diff --git a/truebit-implementation/node_modules/eth-contract-class/.editorconfig b/truebit-implementation/.editorconfig similarity index 71% rename from truebit-implementation/node_modules/eth-contract-class/.editorconfig rename to truebit-implementation/.editorconfig index e717f5eb..5c50917f 100644 --- a/truebit-implementation/node_modules/eth-contract-class/.editorconfig +++ b/truebit-implementation/.editorconfig @@ -1,13 +1,14 @@ -# http://editorconfig.org +# Editor configuration, see http://editorconfig.org root = true [*] +charset = utf-8 indent_style = space indent_size = 2 end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true insert_final_newline = true +trim_trailing_whitespace = true [*.md] +max_line_length = off trim_trailing_whitespace = false diff --git a/truebit-implementation/.env b/truebit-implementation/.env new file mode 100644 index 00000000..c2192082 --- /dev/null +++ b/truebit-implementation/.env @@ -0,0 +1,2 @@ +MNENOMIC= +INFURA_API_KEY= diff --git a/truebit-implementation/.gitignore b/truebit-implementation/.gitignore new file mode 100644 index 00000000..8f85105f --- /dev/null +++ b/truebit-implementation/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/build +package-lock.json +.env diff --git a/truebit-implementation/.npmignore b/truebit-implementation/.npmignore new file mode 100644 index 00000000..72c3fc6c --- /dev/null +++ b/truebit-implementation/.npmignore @@ -0,0 +1,6 @@ +/node_modules +package-lock.json +.editorconfig +.env +/screenshots +/test diff --git a/truebit-implementation/README.md b/truebit-implementation/README.md new file mode 100644 index 00000000..bfa0ff8b --- /dev/null +++ b/truebit-implementation/README.md @@ -0,0 +1,30 @@ +# truebit-iico-beta-dev + +## How to deploy the contract into the infura-rinkeby network + +- Clone this repository +- Open the `truebit-implementation` folder +- Install the dependencies using `npm install` +- Add the required variables to to the `.env` file: + +**MNEMONIC** is the mnemonic of your wallet, if you are using metamask you can get this under **Setting > Reveal Seed Words** + +**INFURA_API_KEY** is the API KEY provided by infura + +- Deploy the contract using `npm run deploy-contract-infura` +- You will see the deployed contact address on the console +![contract_address](./screenshots/deploying_contract.PNG "contract_address") + +**Notes:** +- Rember to whitelist the contract address in the infura dashboard in order to use it +- Please do not commit/push changes in the `.env` file to this repository + +### Changelog + +- **Breaking Changes:** starting in version `1.0.0` you should import the `IICO` and `IICOABI` like: + +```js +import { IICO, IICOABI } from 'truebit-iico-beta-dev'; +``` + +- **Breaking Changes:** starting in version `2.0.0` you can only import the `IICOABI` diff --git a/truebit-implementation/build/contracts/ERC20.json b/truebit-implementation/build/contracts/ERC20.json deleted file mode 100644 index 8b2ab85e..00000000 --- a/truebit-implementation/build/contracts/ERC20.json +++ /dev/null @@ -1,12211 +0,0 @@ -{ - "contractName": "ERC20", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50610e69806100206000396000f30060806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461009357806318160ddd146100f857806323b872dd1461012357806339509351146101a857806370a082311461020d578063a457c2d714610264578063a9059cbb146102c9578063dd62ed3e1461032e575b600080fd5b34801561009f57600080fd5b506100de600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103a5565b604051808215151515815260200191505060405180910390f35b34801561010457600080fd5b5061010d6104d2565b6040518082815260200191505060405180910390f35b34801561012f57600080fd5b5061018e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104dc565b604051808215151515815260200191505060405180910390f35b3480156101b457600080fd5b506101f3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061068e565b604051808215151515815260200191505060405180910390f35b34801561021957600080fd5b5061024e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108c5565b6040518082815260200191505060405180910390f35b34801561027057600080fd5b506102af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061090d565b604051808215151515815260200191505060405180910390f35b3480156102d557600080fd5b50610314600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b44565b604051808215151515815260200191505060405180910390f35b34801561033a57600080fd5b5061038f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5b565b6040518082815260200191505060405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156103e257600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600254905090565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561056957600080fd5b6105f882600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610683848484610c03565b600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156106cb57600080fd5b61075a82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e1c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561094a57600080fd5b6109d982600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be290919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000610b51338484610c03565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080838311151515610bf457600080fd5b82840390508091505092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111151515610c5057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610c8c57600080fd5b610cdd816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d70816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e1c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808284019050838110151515610e3357600080fd5b80915050929150505600a165627a7a72305820bdb61cf77057776b3a6f04a0f0a2914a99430a331f10aceb839b5e9b50e6caf10029", - "deployedBytecode": "0x60806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461009357806318160ddd146100f857806323b872dd1461012357806339509351146101a857806370a082311461020d578063a457c2d714610264578063a9059cbb146102c9578063dd62ed3e1461032e575b600080fd5b34801561009f57600080fd5b506100de600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103a5565b604051808215151515815260200191505060405180910390f35b34801561010457600080fd5b5061010d6104d2565b6040518082815260200191505060405180910390f35b34801561012f57600080fd5b5061018e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104dc565b604051808215151515815260200191505060405180910390f35b3480156101b457600080fd5b506101f3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061068e565b604051808215151515815260200191505060405180910390f35b34801561021957600080fd5b5061024e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108c5565b6040518082815260200191505060405180910390f35b34801561027057600080fd5b506102af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061090d565b604051808215151515815260200191505060405180910390f35b3480156102d557600080fd5b50610314600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b44565b604051808215151515815260200191505060405180910390f35b34801561033a57600080fd5b5061038f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5b565b6040518082815260200191505060405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156103e257600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600254905090565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561056957600080fd5b6105f882600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610683848484610c03565b600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156106cb57600080fd5b61075a82600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e1c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561094a57600080fd5b6109d982600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be290919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000610b51338484610c03565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080838311151515610bf457600080fd5b82840390508091505092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111151515610c5057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610c8c57600080fd5b610cdd816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610d70816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e1c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808284019050838110151515610e3357600080fd5b80915050929150505600a165627a7a72305820bdb61cf77057776b3a6f04a0f0a2914a99430a331f10aceb839b5e9b50e6caf10029", - "sourceMap": "369:6595:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;369:6595:3;;;;;;;", - "deployedSourceMap": "369:6595:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:220;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2380:220:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;640:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;640:83:3;;;;;;;;;;;;;;;;;;;;;;;2872:288;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2872:288:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3611:330;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3611:330:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;920:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;920:98:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4397:340;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4397:340:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1637:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1637:127:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1335:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1335:150:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:220;2445:4;2484:1;2465:21;;:7;:21;;;;2457:30;;;;;;;;2526:5;2494:8;:20;2503:10;2494:20;;;;;;;;;;;;;;;:29;2515:7;2494:29;;;;;;;;;;;;;;;:37;;;;2563:7;2542:36;;2551:10;2542:36;;;2572:5;2542:36;;;;;;;;;;;;;;;;;;2591:4;2584:11;;2380:220;;;;:::o;640:83::-;684:7;706:12;;699:19;;640:83;:::o;2872:288::-;2975:4;3006:8;:14;3015:4;3006:14;;;;;;;;;;;;;;;:26;3021:10;3006:26;;;;;;;;;;;;;;;;2997:5;:35;;2989:44;;;;;;;;3069:37;3100:5;3069:8;:14;3078:4;3069:14;;;;;;;;;;;;;;;:26;3084:10;3069:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;3040:8;:14;3049:4;3040:14;;;;;;;;;;;;;;;:26;3055:10;3040:26;;;;;;;;;;;;;;;:66;;;;3112:26;3122:4;3128:2;3132:5;3112:9;:26::i;:::-;3151:4;3144:11;;2872:288;;;;;:::o;3611:330::-;3711:4;3752:1;3733:21;;:7;:21;;;;3725:30;;;;;;;;3802:45;3836:10;3802:8;:20;3811:10;3802:20;;;;;;;;;;;;;;;:29;3823:7;3802:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;3762:8;:20;3771:10;3762:20;;;;;;;;;;;;;;;:29;3783:7;3762:29;;;;;;;;;;;;;;;:86;;;;3880:7;3859:60;;3868:10;3859:60;;;3889:8;:20;3898:10;3889:20;;;;;;;;;;;;;;;:29;3910:7;3889:29;;;;;;;;;;;;;;;;3859:60;;;;;;;;;;;;;;;;;;3932:4;3925:11;;3611:330;;;;:::o;920:98::-;975:7;997:9;:16;1007:5;997:16;;;;;;;;;;;;;;;;990:23;;920:98;;;:::o;4397:340::-;4502:4;4543:1;4524:21;;:7;:21;;;;4516:30;;;;;;;;4593:50;4627:15;4593:8;:20;4602:10;4593:20;;;;;;;;;;;;;;;:29;4614:7;4593:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;4553:8;:20;4562:10;4553:20;;;;;;;;;;;;;;;:29;4574:7;4553:29;;;;;;;;;;;;;;;:91;;;;4676:7;4655:60;;4664:10;4655:60;;;4685:8;:20;4694:10;4685:20;;;;;;;;;;;;;;;:29;4706:7;4685:29;;;;;;;;;;;;;;;;4655:60;;;;;;;;;;;;;;;;;;4728:4;4721:11;;4397:340;;;;:::o;1637:127::-;1698:4;1710:32;1720:10;1732:2;1736:5;1710:9;:32::i;:::-;1755:4;1748:11;;1637:127;;;;:::o;1335:150::-;1432:7;1456:8;:15;1465:5;1456:15;;;;;;;;;;;;;;;:24;1472:7;1456:24;;;;;;;;;;;;;;;;1449:31;;1335:150;;;;:::o;1078:131:2:-;1136:7;1172:9;1164:1;1159;:6;;1151:15;;;;;;;;1188:1;1184;:5;1172:17;;1203:1;1196:8;;1078:131;;;;;:::o;4937:277:3:-;5029:9;:15;5039:4;5029:15;;;;;;;;;;;;;;;;5020:5;:24;;5012:33;;;;;;;;5073:1;5059:16;;:2;:16;;;;5051:25;;;;;;;;5101:26;5121:5;5101:9;:15;5111:4;5101:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;5083:9;:15;5093:4;5083:15;;;;;;;;;;;;;;;:44;;;;5149:24;5167:5;5149:9;:13;5159:2;5149:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;5133:9;:13;5143:2;5133:13;;;;;;;;;;;;;;;:40;;;;5199:2;5184:25;;5193:4;5184:25;;;5203:5;5184:25;;;;;;;;;;;;;;;;;;4937:277;;;:::o;1272:131:2:-;1330:7;1345:9;1361:1;1357;:5;1345:17;;1381:1;1376;:6;;1368:15;;;;;;;;1397:1;1390:8;;1272:131;;;;;:::o", - "source": "pragma solidity ^0.4.24;\n\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.sol\";\n\n/**\n * @title Standard ERC20 token\n *\n * @dev Implementation of the basic standard token.\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\n * Originally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol\n */\ncontract ERC20 is IERC20 {\n using SafeMath for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowed;\n\n uint256 private _totalSupply;\n\n /**\n * @dev Total number of tokens in existence\n */\n function totalSupply() public view returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev Gets the balance of the specified address.\n * @param owner The address to query the balance of.\n * @return An uint256 representing the amount owned by the passed address.\n */\n function balanceOf(address owner) public view returns (uint256) {\n return _balances[owner];\n }\n\n /**\n * @dev Function to check the amount of tokens that an owner allowed to a spender.\n * @param owner address The address which owns the funds.\n * @param spender address The address which will spend the funds.\n * @return A uint256 specifying the amount of tokens still available for the spender.\n */\n function allowance(\n address owner,\n address spender\n )\n public\n view\n returns (uint256)\n {\n return _allowed[owner][spender];\n }\n\n /**\n * @dev Transfer token for a specified address\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n */\n function transfer(address to, uint256 value) public returns (bool) {\n _transfer(msg.sender, to, value);\n return true;\n }\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n * Beware that changing an allowance with this method brings the risk that someone may use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n */\n function approve(address spender, uint256 value) public returns (bool) {\n require(spender != address(0));\n\n _allowed[msg.sender][spender] = value;\n emit Approval(msg.sender, spender, value);\n return true;\n }\n\n /**\n * @dev Transfer tokens from one address to another\n * @param from address The address which you want to send tokens from\n * @param to address The address which you want to transfer to\n * @param value uint256 the amount of tokens to be transferred\n */\n function transferFrom(\n address from,\n address to,\n uint256 value\n )\n public\n returns (bool)\n {\n require(value <= _allowed[from][msg.sender]);\n\n _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Increase the amount of tokens that an owner allowed to a spender.\n * approve should be called when allowed_[_spender] == 0. To increment\n * allowed value is better to use this function to avoid 2 calls (and wait until\n * the first transaction is mined)\n * From MonolithDAO Token.sol\n * @param spender The address which will spend the funds.\n * @param addedValue The amount of tokens to increase the allowance by.\n */\n function increaseAllowance(\n address spender,\n uint256 addedValue\n )\n public\n returns (bool)\n {\n require(spender != address(0));\n\n _allowed[msg.sender][spender] = (\n _allowed[msg.sender][spender].add(addedValue));\n emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n return true;\n }\n\n /**\n * @dev Decrease the amount of tokens that an owner allowed to a spender.\n * approve should be called when allowed_[_spender] == 0. To decrement\n * allowed value is better to use this function to avoid 2 calls (and wait until\n * the first transaction is mined)\n * From MonolithDAO Token.sol\n * @param spender The address which will spend the funds.\n * @param subtractedValue The amount of tokens to decrease the allowance by.\n */\n function decreaseAllowance(\n address spender,\n uint256 subtractedValue\n )\n public\n returns (bool)\n {\n require(spender != address(0));\n\n _allowed[msg.sender][spender] = (\n _allowed[msg.sender][spender].sub(subtractedValue));\n emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n return true;\n }\n\n /**\n * @dev Transfer token for a specified addresses\n * @param from The address to transfer from.\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n */\n function _transfer(address from, address to, uint256 value) internal {\n require(value <= _balances[from]);\n require(to != address(0));\n\n _balances[from] = _balances[from].sub(value);\n _balances[to] = _balances[to].add(value);\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Internal function that mints an amount of the token and assigns it to\n * an account. This encapsulates the modification of balances such that the\n * proper events are emitted.\n * @param account The account that will receive the created tokens.\n * @param value The amount that will be created.\n */\n function _mint(address account, uint256 value) internal {\n require(account != 0);\n _totalSupply = _totalSupply.add(value);\n _balances[account] = _balances[account].add(value);\n emit Transfer(address(0), account, value);\n }\n\n /**\n * @dev Internal function that burns an amount of the token of a given\n * account.\n * @param account The account whose tokens will be burnt.\n * @param value The amount that will be burnt.\n */\n function _burn(address account, uint256 value) internal {\n require(account != 0);\n require(value <= _balances[account]);\n\n _totalSupply = _totalSupply.sub(value);\n _balances[account] = _balances[account].sub(value);\n emit Transfer(account, address(0), value);\n }\n\n /**\n * @dev Internal function that burns an amount of the token of a given\n * account, deducting from the sender's allowance for said account. Uses the\n * internal burn function.\n * @param account The account whose tokens will be burnt.\n * @param value The amount that will be burnt.\n */\n function _burnFrom(address account, uint256 value) internal {\n require(value <= _allowed[account][msg.sender]);\n\n // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted,\n // this function needs to emit an event with the updated approval.\n _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(\n value);\n _burn(account, value);\n }\n}\n", - "sourcePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "ast": { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "exportedSymbols": { - "ERC20": [ - 1958 - ] - }, - "id": 1959, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1516, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:3" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 1517, - "nodeType": "ImportDirective", - "scope": 1959, - "sourceUnit": 2028, - "src": "26:22:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 1518, - "nodeType": "ImportDirective", - "scope": 1959, - "sourceUnit": 1515, - "src": "49:33:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1519, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2027, - "src": "387:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2027", - "typeString": "contract IERC20" - } - }, - "id": 1520, - "nodeType": "InheritanceSpecifier", - "src": "387:6:3" - } - ], - "contractDependencies": [ - 2027 - ], - "contractKind": "contract", - "documentation": "@title Standard ERC20 token\n * @dev Implementation of the basic standard token.\nhttps://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\nOriginally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol", - "fullyImplemented": true, - "id": 1958, - "linearizedBaseContracts": [ - 1958, - 2027 - ], - "name": "ERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1523, - "libraryName": { - "contractScope": null, - "id": 1521, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1514, - "src": "404:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1514", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "398:27:3", - "typeName": { - "id": 1522, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "417:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": false, - "id": 1527, - "name": "_balances", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "429:46:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 1526, - "keyType": { - "id": 1524, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "438:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "429:28:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 1525, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "449:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 1533, - "name": "_allowed", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "480:66:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 1532, - "keyType": { - "id": 1528, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "489:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "480:49:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueType": { - "id": 1531, - "keyType": { - "id": 1529, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "509:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "500:28:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 1530, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "520:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 1535, - "name": "_totalSupply", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "551:28:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1534, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "551:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 1542, - "nodeType": "Block", - "src": "693:30:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1540, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "706:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1539, - "id": 1541, - "nodeType": "Return", - "src": "699:19:3" - } - ] - }, - "documentation": "@dev Total number of tokens in existence", - "id": 1543, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1536, - "nodeType": "ParameterList", - "parameters": [], - "src": "660:2:3" - }, - "payable": false, - "returnParameters": { - "id": 1539, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1538, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1543, - "src": "684:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1537, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "684:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "683:9:3" - }, - "scope": 1958, - "src": "640:83:3", - "stateMutability": "view", - "superFunction": 1965, - "visibility": "public" - }, - { - "body": { - "id": 1554, - "nodeType": "Block", - "src": "984:34:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1550, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "997:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1552, - "indexExpression": { - "argumentTypes": null, - "id": 1551, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1545, - "src": "1007:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "997:16:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1549, - "id": 1553, - "nodeType": "Return", - "src": "990:23:3" - } - ] - }, - "documentation": "@dev Gets the balance of the specified address.\n@param owner The address to query the balance of.\n@return An uint256 representing the amount owned by the passed address.", - "id": 1555, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1546, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1545, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1555, - "src": "939:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1544, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "939:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "938:15:3" - }, - "payable": false, - "returnParameters": { - "id": 1549, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1548, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1555, - "src": "975:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1547, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "975:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "974:9:3" - }, - "scope": 1958, - "src": "920:98:3", - "stateMutability": "view", - "superFunction": 1972, - "visibility": "public" - }, - { - "body": { - "id": 1570, - "nodeType": "Block", - "src": "1443:42:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1564, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "1456:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1566, - "indexExpression": { - "argumentTypes": null, - "id": 1565, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1557, - "src": "1465:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1456:15:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1568, - "indexExpression": { - "argumentTypes": null, - "id": 1567, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1559, - "src": "1472:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1456:24:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1563, - "id": 1569, - "nodeType": "Return", - "src": "1449:31:3" - } - ] - }, - "documentation": "@dev Function to check the amount of tokens that an owner allowed to a spender.\n@param owner address The address which owns the funds.\n@param spender address The address which will spend the funds.\n@return A uint256 specifying the amount of tokens still available for the spender.", - "id": 1571, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1560, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1557, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1571, - "src": "1359:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1556, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1359:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1559, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1571, - "src": "1378:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1558, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1378:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1353:45:3" - }, - "payable": false, - "returnParameters": { - "id": 1563, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1562, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1571, - "src": "1432:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1561, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1432:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1431:9:3" - }, - "scope": 1958, - "src": "1335:150:3", - "stateMutability": "view", - "superFunction": 1981, - "visibility": "public" - }, - { - "body": { - "id": 1589, - "nodeType": "Block", - "src": "1704:60:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1581, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "1720:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1720:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1583, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1573, - "src": "1732:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1584, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1575, - "src": "1736:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1580, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "1710:9:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1710:32:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1586, - "nodeType": "ExpressionStatement", - "src": "1710:32:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1587, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1755:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1579, - "id": 1588, - "nodeType": "Return", - "src": "1748:11:3" - } - ] - }, - "documentation": "@dev Transfer token for a specified address\n@param to The address to transfer to.\n@param value The amount to be transferred.", - "id": 1590, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1576, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1573, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1590, - "src": "1655:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1572, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1655:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1575, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1590, - "src": "1667:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1574, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1667:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1654:27:3" - }, - "payable": false, - "returnParameters": { - "id": 1579, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1578, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1590, - "src": "1698:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1577, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1698:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1697:6:3" - }, - "scope": 1958, - "src": "1637:127:3", - "stateMutability": "nonpayable", - "superFunction": 1990, - "visibility": "public" - }, - { - "body": { - "id": 1625, - "nodeType": "Block", - "src": "2451:149:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1600, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "2465:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1602, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2484:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1601, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2476:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1603, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2476:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2465:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1599, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "2457:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2457:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1606, - "nodeType": "ExpressionStatement", - "src": "2457:30:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1607, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "2494:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1611, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1608, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "2503:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2503:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2494:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1612, - "indexExpression": { - "argumentTypes": null, - "id": 1610, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "2515:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2494:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1613, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1594, - "src": "2526:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2494:37:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1615, - "nodeType": "ExpressionStatement", - "src": "2494:37:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1617, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "2551:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2551:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1619, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "2563:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1620, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1594, - "src": "2572:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1616, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2542:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2542:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1622, - "nodeType": "EmitStatement", - "src": "2537:41:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1623, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2591:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1598, - "id": 1624, - "nodeType": "Return", - "src": "2584:11:3" - } - ] - }, - "documentation": "@dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\nBeware that changing an allowance with this method brings the risk that someone may use both the old\nand the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\nrace condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n@param spender The address which will spend the funds.\n@param value The amount of tokens to be spent.", - "id": 1626, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1595, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1592, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1626, - "src": "2397:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1591, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2397:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1594, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1626, - "src": "2414:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1593, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2414:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2396:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1598, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1597, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1626, - "src": "2445:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1596, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2445:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2444:6:3" - }, - "scope": 1958, - "src": "2380:220:3", - "stateMutability": "nonpayable", - "superFunction": 1999, - "visibility": "public" - }, - { - "body": { - "id": 1673, - "nodeType": "Block", - "src": "2983:177:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1638, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1632, - "src": "2997:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1639, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3006:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1641, - "indexExpression": { - "argumentTypes": null, - "id": 1640, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3015:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3006:14:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1644, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1642, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3021:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3021:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3006:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2997:35:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1637, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "2989:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2989:44:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1647, - "nodeType": "ExpressionStatement", - "src": "2989:44:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1663, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1648, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3040:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1652, - "indexExpression": { - "argumentTypes": null, - "id": 1649, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3049:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3040:14:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1653, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1650, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3055:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1651, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3055:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3040:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1661, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1632, - "src": "3100:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1654, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3069:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1656, - "indexExpression": { - "argumentTypes": null, - "id": 1655, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3078:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3069:14:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1659, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1657, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3084:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3084:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3069:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1660, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "3069:30:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1662, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3069:37:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3040:66:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1664, - "nodeType": "ExpressionStatement", - "src": "3040:66:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1666, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3122:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1667, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1630, - "src": "3128:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1668, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1632, - "src": "3132:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1665, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "3112:9:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3112:26:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1670, - "nodeType": "ExpressionStatement", - "src": "3112:26:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1671, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3151:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1636, - "id": 1672, - "nodeType": "Return", - "src": "3144:11:3" - } - ] - }, - "documentation": "@dev Transfer tokens from one address to another\n@param from address The address which you want to send tokens from\n@param to address The address which you want to transfer to\n@param value uint256 the amount of tokens to be transferred", - "id": 1674, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1633, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1628, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2899:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1627, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2899:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1630, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2917:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1629, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2917:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1632, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2933:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1631, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2933:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2893:57:3" - }, - "payable": false, - "returnParameters": { - "id": 1636, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1635, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2975:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1634, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2975:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2974:6:3" - }, - "scope": 1958, - "src": "2872:288:3", - "stateMutability": "nonpayable", - "superFunction": 2010, - "visibility": "public" - }, - { - "body": { - "id": 1723, - "nodeType": "Block", - "src": "3719:222:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1684, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3733:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1686, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3752:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1685, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3744:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1687, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3744:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3733:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1683, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "3725:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3725:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1690, - "nodeType": "ExpressionStatement", - "src": "3725:30:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1691, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3762:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1695, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1692, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3771:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3771:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3762:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1696, - "indexExpression": { - "argumentTypes": null, - "id": 1694, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3783:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3762:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1704, - "name": "addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1678, - "src": "3836:10:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1697, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3802:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1700, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1698, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3811:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1699, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3811:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3802:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1702, - "indexExpression": { - "argumentTypes": null, - "id": 1701, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3823:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3802:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "3802:33:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3802:45:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1706, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3794:54:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3762:86:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1708, - "nodeType": "ExpressionStatement", - "src": "3762:86:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1710, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3868:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3868:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1712, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3880:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1713, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3889:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1716, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1714, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3898:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1715, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3898:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3889:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1718, - "indexExpression": { - "argumentTypes": null, - "id": 1717, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3910:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3889:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1709, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "3859:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3859:60:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1720, - "nodeType": "EmitStatement", - "src": "3854:65:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1721, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3932:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1682, - "id": 1722, - "nodeType": "Return", - "src": "3925:11:3" - } - ] - }, - "documentation": "@dev Increase the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To increment\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param addedValue The amount of tokens to increase the allowance by.", - "id": 1724, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "increaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1676, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1724, - "src": "3643:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1675, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3643:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1678, - "name": "addedValue", - "nodeType": "VariableDeclaration", - "scope": 1724, - "src": "3664:18:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1677, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3664:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3637:49:3" - }, - "payable": false, - "returnParameters": { - "id": 1682, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1681, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1724, - "src": "3711:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1680, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3711:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3710:6:3" - }, - "scope": 1958, - "src": "3611:330:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1773, - "nodeType": "Block", - "src": "4510:227:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1734, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4524:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1736, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4543:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1735, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4535:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1737, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4535:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4524:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1733, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "4516:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4516:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1740, - "nodeType": "ExpressionStatement", - "src": "4516:30:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1741, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "4553:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1745, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1742, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4562:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1743, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4562:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4553:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1746, - "indexExpression": { - "argumentTypes": null, - "id": 1744, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4574:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4553:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1754, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1728, - "src": "4627:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1747, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "4593:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1750, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1748, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4602:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1749, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4602:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4593:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1752, - "indexExpression": { - "argumentTypes": null, - "id": 1751, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4614:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4593:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1753, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "4593:33:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4593:50:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1756, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4585:59:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4553:91:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1758, - "nodeType": "ExpressionStatement", - "src": "4553:91:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1760, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4664:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1761, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4664:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1762, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4676:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1763, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "4685:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1766, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1764, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4694:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4694:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4685:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1768, - "indexExpression": { - "argumentTypes": null, - "id": 1767, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4706:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4685:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1759, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "4655:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4655:60:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1770, - "nodeType": "EmitStatement", - "src": "4650:65:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1771, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4728:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1732, - "id": 1772, - "nodeType": "Return", - "src": "4721:11:3" - } - ] - }, - "documentation": "@dev Decrease the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To decrement\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param subtractedValue The amount of tokens to decrease the allowance by.", - "id": 1774, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "decreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1729, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1726, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1774, - "src": "4429:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1725, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4429:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1728, - "name": "subtractedValue", - "nodeType": "VariableDeclaration", - "scope": 1774, - "src": "4450:23:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1727, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4450:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4423:54:3" - }, - "payable": false, - "returnParameters": { - "id": 1732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1731, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1774, - "src": "4502:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1730, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4502:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4501:6:3" - }, - "scope": 1958, - "src": "4397:340:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1827, - "nodeType": "Block", - "src": "5006:208:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1784, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5020:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1785, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5029:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1787, - "indexExpression": { - "argumentTypes": null, - "id": 1786, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5039:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5029:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5020:24:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1783, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "5012:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5012:33:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1790, - "nodeType": "ExpressionStatement", - "src": "5012:33:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1792, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5059:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1794, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5073:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1793, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5065:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1795, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5065:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5059:16:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1791, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "5051:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5051:25:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1798, - "nodeType": "ExpressionStatement", - "src": "5051:25:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1799, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5083:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1801, - "indexExpression": { - "argumentTypes": null, - "id": 1800, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5093:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5083:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1806, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5121:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1802, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5101:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1804, - "indexExpression": { - "argumentTypes": null, - "id": 1803, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5111:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5101:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "5101:19:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1807, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5101:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5083:44:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1809, - "nodeType": "ExpressionStatement", - "src": "5083:44:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1810, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5133:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1812, - "indexExpression": { - "argumentTypes": null, - "id": 1811, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5143:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5133:13:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1817, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5167:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1813, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5149:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1815, - "indexExpression": { - "argumentTypes": null, - "id": 1814, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5159:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5149:13:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "5149:17:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1818, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5149:24:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5133:40:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1820, - "nodeType": "ExpressionStatement", - "src": "5133:40:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1822, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5193:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1823, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5199:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1824, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5203:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1821, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2018, - "src": "5184:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1825, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5184:25:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1826, - "nodeType": "EmitStatement", - "src": "5179:30:3" - } - ] - }, - "documentation": "@dev Transfer token for a specified addresses\n@param from The address to transfer from.\n@param to The address to transfer to.\n@param value The amount to be transferred.", - "id": 1828, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1781, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1776, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1828, - "src": "4956:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1775, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4956:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1778, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1828, - "src": "4970:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1777, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4970:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1780, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1828, - "src": "4982:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1779, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4982:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4955:41:3" - }, - "payable": false, - "returnParameters": { - "id": 1782, - "nodeType": "ParameterList", - "parameters": [], - "src": "5006:0:3" - }, - "scope": 1958, - "src": "4937:277:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1867, - "nodeType": "Block", - "src": "5597:179:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1838, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1836, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5611:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1837, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5622:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5611:12:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1835, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "5603:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1839, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5603:21:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1840, - "nodeType": "ExpressionStatement", - "src": "5603:21:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1846, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1841, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "5630:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1844, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1832, - "src": "5662:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1842, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "5645:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1843, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "5645:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5645:23:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5630:38:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1847, - "nodeType": "ExpressionStatement", - "src": "5630:38:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1857, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1848, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5674:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1850, - "indexExpression": { - "argumentTypes": null, - "id": 1849, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5684:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5674:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1855, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1832, - "src": "5718:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1851, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5695:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1853, - "indexExpression": { - "argumentTypes": null, - "id": 1852, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5705:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5695:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1854, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "5695:22:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5695:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5674:50:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1858, - "nodeType": "ExpressionStatement", - "src": "5674:50:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1861, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5752:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1860, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5744:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5744:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1863, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5756:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1864, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1832, - "src": "5765:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1859, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2018, - "src": "5735:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5735:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1866, - "nodeType": "EmitStatement", - "src": "5730:41:3" - } - ] - }, - "documentation": "@dev Internal function that mints an amount of the token and assigns it to\nan account. This encapsulates the modification of balances such that the\nproper events are emitted.\n@param account The account that will receive the created tokens.\n@param value The amount that will be created.", - "id": 1868, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1833, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1830, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "5556:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1829, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5556:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1832, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "5573:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1831, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5573:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5555:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1834, - "nodeType": "ParameterList", - "parameters": [], - "src": "5597:0:3" - }, - "scope": 1958, - "src": "5541:235:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1915, - "nodeType": "Block", - "src": "6044:222:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1878, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1876, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6058:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1877, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6069:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "6058:12:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1875, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6050:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6050:21:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1880, - "nodeType": "ExpressionStatement", - "src": "6050:21:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1886, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1882, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6085:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1883, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "6094:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1885, - "indexExpression": { - "argumentTypes": null, - "id": 1884, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6104:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6094:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6085:27:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1881, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6077:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1887, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6077:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1888, - "nodeType": "ExpressionStatement", - "src": "6077:36:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1894, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1889, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "6120:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1892, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6152:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1890, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "6135:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "6135:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1893, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6135:23:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6120:38:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1895, - "nodeType": "ExpressionStatement", - "src": "6120:38:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1896, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "6164:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1898, - "indexExpression": { - "argumentTypes": null, - "id": 1897, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6174:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6164:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1903, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6208:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1899, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "6185:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1901, - "indexExpression": { - "argumentTypes": null, - "id": 1900, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6195:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6185:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "6185:22:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6185:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6164:50:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1906, - "nodeType": "ExpressionStatement", - "src": "6164:50:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1908, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6234:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1910, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6251:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1909, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6243:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1911, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6243:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1912, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6255:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1907, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2018, - "src": "6225:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1913, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6225:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1914, - "nodeType": "EmitStatement", - "src": "6220:41:3" - } - ] - }, - "documentation": "@dev Internal function that burns an amount of the token of a given\naccount.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.", - "id": 1916, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_burn", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1873, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1870, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1916, - "src": "6003:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1869, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6003:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1872, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1916, - "src": "6020:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1871, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6020:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6002:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1874, - "nodeType": "ParameterList", - "parameters": [], - "src": "6044:0:3" - }, - "scope": 1958, - "src": "5988:278:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1956, - "nodeType": "Block", - "src": "6632:330:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1924, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1920, - "src": "6646:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1925, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "6655:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1927, - "indexExpression": { - "argumentTypes": null, - "id": 1926, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6664:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6655:17:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1930, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1928, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6673:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6673:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6655:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6646:38:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1923, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6638:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1932, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6638:47:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1933, - "nodeType": "ExpressionStatement", - "src": "6638:47:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1934, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "6851:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1938, - "indexExpression": { - "argumentTypes": null, - "id": 1935, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6860:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6851:17:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1939, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1936, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6869:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6869:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6851:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1947, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1920, - "src": "6924:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1940, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "6883:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1942, - "indexExpression": { - "argumentTypes": null, - "id": 1941, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6892:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6883:17:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1945, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1943, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6901:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1944, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6901:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6883:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "6883:33:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6883:47:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6851:79:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1950, - "nodeType": "ExpressionStatement", - "src": "6851:79:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1952, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6942:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1953, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1920, - "src": "6951:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1951, - "name": "_burn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1916, - "src": "6936:5:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6936:21:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1955, - "nodeType": "ExpressionStatement", - "src": "6936:21:3" - } - ] - }, - "documentation": "@dev Internal function that burns an amount of the token of a given\naccount, deducting from the sender's allowance for said account. Uses the\ninternal burn function.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.", - "id": 1957, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_burnFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1921, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1918, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1957, - "src": "6591:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1917, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6591:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1920, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1957, - "src": "6608:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1919, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6608:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6590:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1922, - "nodeType": "ParameterList", - "parameters": [], - "src": "6632:0:3" - }, - "scope": 1958, - "src": "6572:390:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1959, - "src": "369:6595:3" - } - ], - "src": "0:6965:3" - }, - "legacyAST": { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "exportedSymbols": { - "ERC20": [ - 1958 - ] - }, - "id": 1959, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1516, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:3" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 1517, - "nodeType": "ImportDirective", - "scope": 1959, - "sourceUnit": 2028, - "src": "26:22:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 1518, - "nodeType": "ImportDirective", - "scope": 1959, - "sourceUnit": 1515, - "src": "49:33:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1519, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2027, - "src": "387:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$2027", - "typeString": "contract IERC20" - } - }, - "id": 1520, - "nodeType": "InheritanceSpecifier", - "src": "387:6:3" - } - ], - "contractDependencies": [ - 2027 - ], - "contractKind": "contract", - "documentation": "@title Standard ERC20 token\n * @dev Implementation of the basic standard token.\nhttps://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\nOriginally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol", - "fullyImplemented": true, - "id": 1958, - "linearizedBaseContracts": [ - 1958, - 2027 - ], - "name": "ERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1523, - "libraryName": { - "contractScope": null, - "id": 1521, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1514, - "src": "404:8:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1514", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "398:27:3", - "typeName": { - "id": 1522, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "417:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": false, - "id": 1527, - "name": "_balances", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "429:46:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 1526, - "keyType": { - "id": 1524, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "438:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "429:28:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 1525, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "449:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 1533, - "name": "_allowed", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "480:66:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 1532, - "keyType": { - "id": 1528, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "489:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "480:49:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueType": { - "id": 1531, - "keyType": { - "id": 1529, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "509:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "500:28:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 1530, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "520:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 1535, - "name": "_totalSupply", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "551:28:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1534, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "551:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 1542, - "nodeType": "Block", - "src": "693:30:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1540, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "706:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1539, - "id": 1541, - "nodeType": "Return", - "src": "699:19:3" - } - ] - }, - "documentation": "@dev Total number of tokens in existence", - "id": 1543, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1536, - "nodeType": "ParameterList", - "parameters": [], - "src": "660:2:3" - }, - "payable": false, - "returnParameters": { - "id": 1539, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1538, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1543, - "src": "684:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1537, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "684:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "683:9:3" - }, - "scope": 1958, - "src": "640:83:3", - "stateMutability": "view", - "superFunction": 1965, - "visibility": "public" - }, - { - "body": { - "id": 1554, - "nodeType": "Block", - "src": "984:34:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1550, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "997:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1552, - "indexExpression": { - "argumentTypes": null, - "id": 1551, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1545, - "src": "1007:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "997:16:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1549, - "id": 1553, - "nodeType": "Return", - "src": "990:23:3" - } - ] - }, - "documentation": "@dev Gets the balance of the specified address.\n@param owner The address to query the balance of.\n@return An uint256 representing the amount owned by the passed address.", - "id": 1555, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1546, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1545, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1555, - "src": "939:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1544, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "939:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "938:15:3" - }, - "payable": false, - "returnParameters": { - "id": 1549, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1548, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1555, - "src": "975:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1547, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "975:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "974:9:3" - }, - "scope": 1958, - "src": "920:98:3", - "stateMutability": "view", - "superFunction": 1972, - "visibility": "public" - }, - { - "body": { - "id": 1570, - "nodeType": "Block", - "src": "1443:42:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1564, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "1456:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1566, - "indexExpression": { - "argumentTypes": null, - "id": 1565, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1557, - "src": "1465:5:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1456:15:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1568, - "indexExpression": { - "argumentTypes": null, - "id": 1567, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1559, - "src": "1472:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1456:24:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1563, - "id": 1569, - "nodeType": "Return", - "src": "1449:31:3" - } - ] - }, - "documentation": "@dev Function to check the amount of tokens that an owner allowed to a spender.\n@param owner address The address which owns the funds.\n@param spender address The address which will spend the funds.\n@return A uint256 specifying the amount of tokens still available for the spender.", - "id": 1571, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1560, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1557, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1571, - "src": "1359:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1556, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1359:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1559, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1571, - "src": "1378:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1558, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1378:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1353:45:3" - }, - "payable": false, - "returnParameters": { - "id": 1563, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1562, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1571, - "src": "1432:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1561, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1432:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1431:9:3" - }, - "scope": 1958, - "src": "1335:150:3", - "stateMutability": "view", - "superFunction": 1981, - "visibility": "public" - }, - { - "body": { - "id": 1589, - "nodeType": "Block", - "src": "1704:60:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1581, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "1720:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1720:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1583, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1573, - "src": "1732:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1584, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1575, - "src": "1736:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1580, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "1710:9:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1710:32:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1586, - "nodeType": "ExpressionStatement", - "src": "1710:32:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1587, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1755:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1579, - "id": 1588, - "nodeType": "Return", - "src": "1748:11:3" - } - ] - }, - "documentation": "@dev Transfer token for a specified address\n@param to The address to transfer to.\n@param value The amount to be transferred.", - "id": 1590, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1576, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1573, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1590, - "src": "1655:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1572, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1655:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1575, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1590, - "src": "1667:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1574, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1667:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1654:27:3" - }, - "payable": false, - "returnParameters": { - "id": 1579, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1578, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1590, - "src": "1698:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1577, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1698:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1697:6:3" - }, - "scope": 1958, - "src": "1637:127:3", - "stateMutability": "nonpayable", - "superFunction": 1990, - "visibility": "public" - }, - { - "body": { - "id": 1625, - "nodeType": "Block", - "src": "2451:149:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1600, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "2465:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1602, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2484:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1601, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2476:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1603, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2476:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2465:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1599, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "2457:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2457:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1606, - "nodeType": "ExpressionStatement", - "src": "2457:30:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1607, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "2494:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1611, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1608, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "2503:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2503:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2494:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1612, - "indexExpression": { - "argumentTypes": null, - "id": 1610, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "2515:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2494:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1613, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1594, - "src": "2526:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2494:37:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1615, - "nodeType": "ExpressionStatement", - "src": "2494:37:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1617, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "2551:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2551:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1619, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1592, - "src": "2563:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1620, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1594, - "src": "2572:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1616, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2542:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2542:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1622, - "nodeType": "EmitStatement", - "src": "2537:41:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1623, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2591:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1598, - "id": 1624, - "nodeType": "Return", - "src": "2584:11:3" - } - ] - }, - "documentation": "@dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\nBeware that changing an allowance with this method brings the risk that someone may use both the old\nand the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\nrace condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n@param spender The address which will spend the funds.\n@param value The amount of tokens to be spent.", - "id": 1626, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1595, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1592, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1626, - "src": "2397:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1591, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2397:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1594, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1626, - "src": "2414:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1593, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2414:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2396:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1598, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1597, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1626, - "src": "2445:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1596, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2445:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2444:6:3" - }, - "scope": 1958, - "src": "2380:220:3", - "stateMutability": "nonpayable", - "superFunction": 1999, - "visibility": "public" - }, - { - "body": { - "id": 1673, - "nodeType": "Block", - "src": "2983:177:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1638, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1632, - "src": "2997:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1639, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3006:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1641, - "indexExpression": { - "argumentTypes": null, - "id": 1640, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3015:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3006:14:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1644, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1642, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3021:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3021:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3006:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2997:35:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1637, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "2989:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2989:44:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1647, - "nodeType": "ExpressionStatement", - "src": "2989:44:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1663, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1648, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3040:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1652, - "indexExpression": { - "argumentTypes": null, - "id": 1649, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3049:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3040:14:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1653, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1650, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3055:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1651, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3055:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3040:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1661, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1632, - "src": "3100:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1654, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3069:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1656, - "indexExpression": { - "argumentTypes": null, - "id": 1655, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3078:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3069:14:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1659, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1657, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3084:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3084:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3069:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1660, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "3069:30:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1662, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3069:37:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3040:66:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1664, - "nodeType": "ExpressionStatement", - "src": "3040:66:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1666, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1628, - "src": "3122:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1667, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1630, - "src": "3128:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1668, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1632, - "src": "3132:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1665, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "3112:9:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3112:26:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1670, - "nodeType": "ExpressionStatement", - "src": "3112:26:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1671, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3151:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1636, - "id": 1672, - "nodeType": "Return", - "src": "3144:11:3" - } - ] - }, - "documentation": "@dev Transfer tokens from one address to another\n@param from address The address which you want to send tokens from\n@param to address The address which you want to transfer to\n@param value uint256 the amount of tokens to be transferred", - "id": 1674, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1633, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1628, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2899:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1627, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2899:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1630, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2917:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1629, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2917:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1632, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2933:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1631, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2933:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2893:57:3" - }, - "payable": false, - "returnParameters": { - "id": 1636, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1635, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1674, - "src": "2975:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1634, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2975:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2974:6:3" - }, - "scope": 1958, - "src": "2872:288:3", - "stateMutability": "nonpayable", - "superFunction": 2010, - "visibility": "public" - }, - { - "body": { - "id": 1723, - "nodeType": "Block", - "src": "3719:222:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1684, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3733:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1686, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3752:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1685, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3744:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1687, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3744:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3733:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1683, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "3725:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3725:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1690, - "nodeType": "ExpressionStatement", - "src": "3725:30:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1691, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3762:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1695, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1692, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3771:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3771:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3762:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1696, - "indexExpression": { - "argumentTypes": null, - "id": 1694, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3783:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3762:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1704, - "name": "addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1678, - "src": "3836:10:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1697, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3802:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1700, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1698, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3811:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1699, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3811:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3802:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1702, - "indexExpression": { - "argumentTypes": null, - "id": 1701, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3823:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3802:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "3802:33:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3802:45:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1706, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3794:54:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3762:86:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1708, - "nodeType": "ExpressionStatement", - "src": "3762:86:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1710, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3868:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3868:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1712, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3880:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1713, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "3889:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1716, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1714, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3898:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1715, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3898:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3889:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1718, - "indexExpression": { - "argumentTypes": null, - "id": 1717, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1676, - "src": "3910:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3889:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1709, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "3859:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3859:60:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1720, - "nodeType": "EmitStatement", - "src": "3854:65:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1721, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3932:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1682, - "id": 1722, - "nodeType": "Return", - "src": "3925:11:3" - } - ] - }, - "documentation": "@dev Increase the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To increment\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param addedValue The amount of tokens to increase the allowance by.", - "id": 1724, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "increaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1676, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1724, - "src": "3643:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1675, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3643:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1678, - "name": "addedValue", - "nodeType": "VariableDeclaration", - "scope": 1724, - "src": "3664:18:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1677, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3664:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3637:49:3" - }, - "payable": false, - "returnParameters": { - "id": 1682, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1681, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1724, - "src": "3711:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1680, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3711:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3710:6:3" - }, - "scope": 1958, - "src": "3611:330:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1773, - "nodeType": "Block", - "src": "4510:227:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1734, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4524:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1736, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4543:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1735, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4535:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1737, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4535:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4524:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1733, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "4516:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4516:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1740, - "nodeType": "ExpressionStatement", - "src": "4516:30:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1741, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "4553:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1745, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1742, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4562:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1743, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4562:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4553:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1746, - "indexExpression": { - "argumentTypes": null, - "id": 1744, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4574:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4553:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1754, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1728, - "src": "4627:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1747, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "4593:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1750, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1748, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4602:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1749, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4602:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4593:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1752, - "indexExpression": { - "argumentTypes": null, - "id": 1751, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4614:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4593:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1753, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "4593:33:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4593:50:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1756, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4585:59:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4553:91:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1758, - "nodeType": "ExpressionStatement", - "src": "4553:91:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1760, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4664:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1761, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4664:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1762, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4676:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1763, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "4685:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1766, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1764, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "4694:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4694:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4685:20:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1768, - "indexExpression": { - "argumentTypes": null, - "id": 1767, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "4706:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4685:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1759, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "4655:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4655:60:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1770, - "nodeType": "EmitStatement", - "src": "4650:65:3" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1771, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4728:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 1732, - "id": 1772, - "nodeType": "Return", - "src": "4721:11:3" - } - ] - }, - "documentation": "@dev Decrease the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To decrement\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param subtractedValue The amount of tokens to decrease the allowance by.", - "id": 1774, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "decreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1729, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1726, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1774, - "src": "4429:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1725, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4429:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1728, - "name": "subtractedValue", - "nodeType": "VariableDeclaration", - "scope": 1774, - "src": "4450:23:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1727, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4450:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4423:54:3" - }, - "payable": false, - "returnParameters": { - "id": 1732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1731, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1774, - "src": "4502:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1730, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4502:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4501:6:3" - }, - "scope": 1958, - "src": "4397:340:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1827, - "nodeType": "Block", - "src": "5006:208:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1784, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5020:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1785, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5029:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1787, - "indexExpression": { - "argumentTypes": null, - "id": 1786, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5039:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5029:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5020:24:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1783, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "5012:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5012:33:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1790, - "nodeType": "ExpressionStatement", - "src": "5012:33:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1792, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5059:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1794, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5073:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1793, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5065:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1795, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5065:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5059:16:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1791, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "5051:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5051:25:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1798, - "nodeType": "ExpressionStatement", - "src": "5051:25:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1799, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5083:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1801, - "indexExpression": { - "argumentTypes": null, - "id": 1800, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5093:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5083:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1806, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5121:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1802, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5101:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1804, - "indexExpression": { - "argumentTypes": null, - "id": 1803, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5111:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5101:15:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "5101:19:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1807, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5101:26:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5083:44:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1809, - "nodeType": "ExpressionStatement", - "src": "5083:44:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1810, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5133:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1812, - "indexExpression": { - "argumentTypes": null, - "id": 1811, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5143:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5133:13:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1817, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5167:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1813, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5149:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1815, - "indexExpression": { - "argumentTypes": null, - "id": 1814, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5159:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5149:13:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "5149:17:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1818, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5149:24:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5133:40:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1820, - "nodeType": "ExpressionStatement", - "src": "5133:40:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1822, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1776, - "src": "5193:4:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1823, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1778, - "src": "5199:2:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1824, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1780, - "src": "5203:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1821, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2018, - "src": "5184:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1825, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5184:25:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1826, - "nodeType": "EmitStatement", - "src": "5179:30:3" - } - ] - }, - "documentation": "@dev Transfer token for a specified addresses\n@param from The address to transfer from.\n@param to The address to transfer to.\n@param value The amount to be transferred.", - "id": 1828, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1781, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1776, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1828, - "src": "4956:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1775, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4956:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1778, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1828, - "src": "4970:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1777, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4970:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1780, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1828, - "src": "4982:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1779, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4982:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4955:41:3" - }, - "payable": false, - "returnParameters": { - "id": 1782, - "nodeType": "ParameterList", - "parameters": [], - "src": "5006:0:3" - }, - "scope": 1958, - "src": "4937:277:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1867, - "nodeType": "Block", - "src": "5597:179:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1838, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1836, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5611:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1837, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5622:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5611:12:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1835, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "5603:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1839, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5603:21:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1840, - "nodeType": "ExpressionStatement", - "src": "5603:21:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1846, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1841, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "5630:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1844, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1832, - "src": "5662:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1842, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "5645:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1843, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "5645:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5645:23:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5630:38:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1847, - "nodeType": "ExpressionStatement", - "src": "5630:38:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1857, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1848, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5674:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1850, - "indexExpression": { - "argumentTypes": null, - "id": 1849, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5684:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5674:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1855, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1832, - "src": "5718:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1851, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "5695:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1853, - "indexExpression": { - "argumentTypes": null, - "id": 1852, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5705:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5695:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1854, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1493, - "src": "5695:22:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5695:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5674:50:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1858, - "nodeType": "ExpressionStatement", - "src": "5674:50:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1861, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5752:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1860, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5744:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5744:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1863, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1830, - "src": "5756:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1864, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1832, - "src": "5765:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1859, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2018, - "src": "5735:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5735:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1866, - "nodeType": "EmitStatement", - "src": "5730:41:3" - } - ] - }, - "documentation": "@dev Internal function that mints an amount of the token and assigns it to\nan account. This encapsulates the modification of balances such that the\nproper events are emitted.\n@param account The account that will receive the created tokens.\n@param value The amount that will be created.", - "id": 1868, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1833, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1830, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "5556:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1829, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5556:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1832, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "5573:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1831, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5573:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5555:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1834, - "nodeType": "ParameterList", - "parameters": [], - "src": "5597:0:3" - }, - "scope": 1958, - "src": "5541:235:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1915, - "nodeType": "Block", - "src": "6044:222:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1878, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1876, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6058:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1877, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6069:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "6058:12:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1875, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6050:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6050:21:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1880, - "nodeType": "ExpressionStatement", - "src": "6050:21:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1886, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1882, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6085:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1883, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "6094:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1885, - "indexExpression": { - "argumentTypes": null, - "id": 1884, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6104:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6094:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6085:27:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1881, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6077:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1887, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6077:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1888, - "nodeType": "ExpressionStatement", - "src": "6077:36:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1894, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1889, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "6120:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1892, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6152:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1890, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1535, - "src": "6135:12:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "6135:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1893, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6135:23:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6120:38:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1895, - "nodeType": "ExpressionStatement", - "src": "6120:38:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1896, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "6164:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1898, - "indexExpression": { - "argumentTypes": null, - "id": 1897, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6174:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6164:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1903, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6208:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1899, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1527, - "src": "6185:9:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1901, - "indexExpression": { - "argumentTypes": null, - "id": 1900, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6195:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6185:18:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "6185:22:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6185:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6164:50:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1906, - "nodeType": "ExpressionStatement", - "src": "6164:50:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1908, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1870, - "src": "6234:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1910, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6251:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1909, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6243:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1911, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6243:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1912, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1872, - "src": "6255:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1907, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2018, - "src": "6225:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 1913, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6225:36:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1914, - "nodeType": "EmitStatement", - "src": "6220:41:3" - } - ] - }, - "documentation": "@dev Internal function that burns an amount of the token of a given\naccount.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.", - "id": 1916, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_burn", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1873, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1870, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1916, - "src": "6003:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1869, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6003:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1872, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1916, - "src": "6020:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1871, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6020:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6002:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1874, - "nodeType": "ParameterList", - "parameters": [], - "src": "6044:0:3" - }, - "scope": 1958, - "src": "5988:278:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1956, - "nodeType": "Block", - "src": "6632:330:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1924, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1920, - "src": "6646:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1925, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "6655:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1927, - "indexExpression": { - "argumentTypes": null, - "id": 1926, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6664:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6655:17:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1930, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1928, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6673:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6673:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6655:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6646:38:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1923, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6638:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1932, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6638:47:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1933, - "nodeType": "ExpressionStatement", - "src": "6638:47:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1934, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "6851:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1938, - "indexExpression": { - "argumentTypes": null, - "id": 1935, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6860:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6851:17:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1939, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1936, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6869:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6869:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6851:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1947, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1920, - "src": "6924:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1940, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1533, - "src": "6883:8:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 1942, - "indexExpression": { - "argumentTypes": null, - "id": 1941, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6892:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6883:17:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1945, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1943, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6901:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1944, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6901:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6883:29:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1469, - "src": "6883:33:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6883:47:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6851:79:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1950, - "nodeType": "ExpressionStatement", - "src": "6851:79:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1952, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1918, - "src": "6942:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1953, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1920, - "src": "6951:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1951, - "name": "_burn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1916, - "src": "6936:5:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6936:21:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1955, - "nodeType": "ExpressionStatement", - "src": "6936:21:3" - } - ] - }, - "documentation": "@dev Internal function that burns an amount of the token of a given\naccount, deducting from the sender's allowance for said account. Uses the\ninternal burn function.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.", - "id": 1957, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_burnFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1921, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1918, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1957, - "src": "6591:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1917, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6591:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1920, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1957, - "src": "6608:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1919, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6608:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6590:32:3" - }, - "payable": false, - "returnParameters": { - "id": 1922, - "nodeType": "ParameterList", - "parameters": [], - "src": "6632:0:3" - }, - "scope": 1958, - "src": "6572:390:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1959, - "src": "369:6595:3" - } - ], - "src": "0:6965:3" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-12-07T22:50:05.605Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/ERC20Mintable.json b/truebit-implementation/build/contracts/ERC20Mintable.json deleted file mode 100644 index 866bd208..00000000 --- a/truebit-implementation/build/contracts/ERC20Mintable.json +++ /dev/null @@ -1,1000 +0,0 @@ -{ - "contractName": "ERC20Mintable", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceMinter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "MinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "MinterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405261001c33610021640100000000026401000000009004565b6101db565b6100428160036100886401000000000261127b179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156100c457600080fd5b6100dd8282610147640100000000026401000000009004565b1515156100e957600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561018457600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611406806101ea6000396000f3006080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b3146100bf57806318160ddd1461012457806323b872dd1461014f57806339509351146101d457806340c10f191461023957806370a082311461029e578063983b2d56146102f55780639865027514610338578063a457c2d71461034f578063a9059cbb146103b4578063aa271e1a14610419578063dd62ed3e14610474575b600080fd5b3480156100cb57600080fd5b5061010a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104eb565b604051808215151515815260200191505060405180910390f35b34801561013057600080fd5b50610139610618565b6040518082815260200191505060405180910390f35b34801561015b57600080fd5b506101ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610622565b604051808215151515815260200191505060405180910390f35b3480156101e057600080fd5b5061021f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107d4565b604051808215151515815260200191505060405180910390f35b34801561024557600080fd5b50610284600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a0b565b604051808215151515815260200191505060405180910390f35b3480156102aa57600080fd5b506102df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a35565b6040518082815260200191505060405180910390f35b34801561030157600080fd5b50610336600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a7d565b005b34801561034457600080fd5b5061034d610a9d565b005b34801561035b57600080fd5b5061039a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610aa8565b604051808215151515815260200191505060405180910390f35b3480156103c057600080fd5b506103ff600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cdf565b604051808215151515815260200191505060405180910390f35b34801561042557600080fd5b5061045a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cf6565b604051808215151515815260200191505060405180910390f35b34801561048057600080fd5b506104d5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d13565b6040518082815260200191505060405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561052857600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600254905090565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156106af57600080fd5b61073e82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d9a90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506107c9848484610dbb565b600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561081157600080fd5b6108a082600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd490919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000610a1633610cf6565b1515610a2157600080fd5b610a2b8383610ff5565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a8633610cf6565b1515610a9157600080fd5b610a9a81611133565b50565b610aa63361118d565b565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ae557600080fd5b610b7482600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d9a90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000610cec338484610dbb565b6001905092915050565b6000610d0c8260036111e790919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080838311151515610dac57600080fd5b82840390508091505092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111151515610e0857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e4457600080fd5b610e95816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d9a90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f28816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808284019050838110151515610feb57600080fd5b8091505092915050565b60008273ffffffffffffffffffffffffffffffffffffffff161415151561101b57600080fd5b61103081600254610fd490919063ffffffff16565b600281905550611087816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61114781600361127b90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6111a181600361132b90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561122457600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156112b757600080fd5b6112c182826111e7565b1515156112cd57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561136757600080fd5b61137182826111e7565b151561137c57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505600a165627a7a72305820054623f3b2d955920054765ab5952968fbca1c61f0f847f8eb7e92c761f98eaf0029", - "deployedBytecode": "0x6080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b3146100bf57806318160ddd1461012457806323b872dd1461014f57806339509351146101d457806340c10f191461023957806370a082311461029e578063983b2d56146102f55780639865027514610338578063a457c2d71461034f578063a9059cbb146103b4578063aa271e1a14610419578063dd62ed3e14610474575b600080fd5b3480156100cb57600080fd5b5061010a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104eb565b604051808215151515815260200191505060405180910390f35b34801561013057600080fd5b50610139610618565b6040518082815260200191505060405180910390f35b34801561015b57600080fd5b506101ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610622565b604051808215151515815260200191505060405180910390f35b3480156101e057600080fd5b5061021f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107d4565b604051808215151515815260200191505060405180910390f35b34801561024557600080fd5b50610284600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a0b565b604051808215151515815260200191505060405180910390f35b3480156102aa57600080fd5b506102df600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a35565b6040518082815260200191505060405180910390f35b34801561030157600080fd5b50610336600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a7d565b005b34801561034457600080fd5b5061034d610a9d565b005b34801561035b57600080fd5b5061039a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610aa8565b604051808215151515815260200191505060405180910390f35b3480156103c057600080fd5b506103ff600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cdf565b604051808215151515815260200191505060405180910390f35b34801561042557600080fd5b5061045a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cf6565b604051808215151515815260200191505060405180910390f35b34801561048057600080fd5b506104d5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d13565b6040518082815260200191505060405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561052857600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600254905090565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156106af57600080fd5b61073e82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d9a90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506107c9848484610dbb565b600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561081157600080fd5b6108a082600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd490919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000610a1633610cf6565b1515610a2157600080fd5b610a2b8383610ff5565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a8633610cf6565b1515610a9157600080fd5b610a9a81611133565b50565b610aa63361118d565b565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ae557600080fd5b610b7482600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d9a90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000610cec338484610dbb565b6001905092915050565b6000610d0c8260036111e790919063ffffffff16565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080838311151515610dac57600080fd5b82840390508091505092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111151515610e0857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e4457600080fd5b610e95816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d9a90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f28816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808284019050838110151515610feb57600080fd5b8091505092915050565b60008273ffffffffffffffffffffffffffffffffffffffff161415151561101b57600080fd5b61103081600254610fd490919063ffffffff16565b600281905550611087816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b61114781600361127b90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6111a181600361132b90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561122457600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156112b757600080fd5b6112c182826111e7565b1515156112cd57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561136757600080fd5b61137182826111e7565b151561137c57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505600a165627a7a72305820054623f3b2d955920054765ab5952968fbca1c61f0f847f8eb7e92c761f98eaf0029", - "sourceMap": "153:423:7:-;;;260:22:4;271:10;260;;;:22;;;:::i;:::-;153:423:7;;629:108:4;681:20;693:7;681;:11;;;;;;:20;;;;;:::i;:::-;724:7;712:20;;;;;;;;;;;;629:108;:::o;244:167:3:-;335:1;316:21;;:7;:21;;;;308:30;;;;;;;;353:18;357:4;363:7;353:3;;;:18;;;:::i;:::-;352:19;344:28;;;;;;;;402:4;379;:11;;:20;391:7;379:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;244:167;;:::o;725:166::-;809:4;850:1;831:21;;:7;:21;;;;823:30;;;;;;;;866:4;:11;;:20;878:7;866:20;;;;;;;;;;;;;;;;;;;;;;;;;859:27;;725:166;;;;:::o;153:423:7:-;;;;;;;", - "deployedSourceMap": "153:423:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:220:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2380:220:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;640:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;640:83:6;;;;;;;;;;;;;;;;;;;;;;;2872:288;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2872:288:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3611:330;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3611:330:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;430:144:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;430:144:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;920:98:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;920:98:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;468:84:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;468:84:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;556:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;556:69:4;;;;;;4397:340:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4397:340:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1637:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1637:127:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;364:100:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;364:100:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1335:150:6;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1335:150:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:220;2445:4;2484:1;2465:21;;:7;:21;;;;2457:30;;;;;;;;2526:5;2494:8;:20;2503:10;2494:20;;;;;;;;;;;;;;;:29;2515:7;2494:29;;;;;;;;;;;;;;;:37;;;;2563:7;2542:36;;2551:10;2542:36;;;2572:5;2542:36;;;;;;;;;;;;;;;;;;2591:4;2584:11;;2380:220;;;;:::o;640:83::-;684:7;706:12;;699:19;;640:83;:::o;2872:288::-;2975:4;3006:8;:14;3015:4;3006:14;;;;;;;;;;;;;;;:26;3021:10;3006:26;;;;;;;;;;;;;;;;2997:5;:35;;2989:44;;;;;;;;3069:37;3100:5;3069:8;:14;3078:4;3069:14;;;;;;;;;;;;;;;:26;3084:10;3069:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;3040:8;:14;3049:4;3040:14;;;;;;;;;;;;;;;:26;3055:10;3040:26;;;;;;;;;;;;;;;:66;;;;3112:26;3122:4;3128:2;3132:5;3112:9;:26::i;:::-;3151:4;3144:11;;2872:288;;;;;:::o;3611:330::-;3711:4;3752:1;3733:21;;:7;:21;;;;3725:30;;;;;;;;3802:45;3836:10;3802:8;:20;3811:10;3802:20;;;;;;;;;;;;;;;:29;3823:7;3802:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;3762:8;:20;3771:10;3762:20;;;;;;;;;;;;;;;:29;3783:7;3762:29;;;;;;;;;;;;;;;:86;;;;3880:7;3859:60;;3868:10;3859:60;;;3889:8;:20;3898:10;3889:20;;;;;;;;;;;;;;;:29;3910:7;3889:29;;;;;;;;;;;;;;;;3859:60;;;;;;;;;;;;;;;;;;3932:4;3925:11;;3611:330;;;;:::o;430:144:7:-;522:4;327:20:4;336:10;327:8;:20::i;:::-;319:29;;;;;;;;536:16:7;542:2;546:5;536;:16::i;:::-;565:4;558:11;;430:144;;;;:::o;920:98:6:-;975:7;997:9;:16;1007:5;997:16;;;;;;;;;;;;;;;;990:23;;920:98;;;:::o;468:84:4:-;327:20;336:10;327:8;:20::i;:::-;319:29;;;;;;;;528:19;539:7;528:10;:19::i;:::-;468:84;:::o;556:69::-;595:25;609:10;595:13;:25::i;:::-;556:69::o;4397:340:6:-;4502:4;4543:1;4524:21;;:7;:21;;;;4516:30;;;;;;;;4593:50;4627:15;4593:8;:20;4602:10;4593:20;;;;;;;;;;;;;;;:29;4614:7;4593:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;4553:8;:20;4562:10;4553:20;;;;;;;;;;;;;;;:29;4574:7;4553:29;;;;;;;;;;;;;;;:91;;;;4676:7;4655:60;;4664:10;4655:60;;;4685:8;:20;4694:10;4685:20;;;;;;;;;;;;;;;:29;4706:7;4685:29;;;;;;;;;;;;;;;;4655:60;;;;;;;;;;;;;;;;;;4728:4;4721:11;;4397:340;;;;:::o;1637:127::-;1698:4;1710:32;1720:10;1732:2;1736:5;1710:9;:32::i;:::-;1755:4;1748:11;;1637:127;;;;:::o;364:100:4:-;420:4;439:20;451:7;439;:11;;:20;;;;:::i;:::-;432:27;;364:100;;;:::o;1335:150:6:-;1432:7;1456:8;:15;1465:5;1456:15;;;;;;;;;;;;;;;:24;1472:7;1456:24;;;;;;;;;;;;;;;;1449:31;;1335:150;;;;:::o;1078:131:5:-;1136:7;1172:9;1164:1;1159;:6;;1151:15;;;;;;;;1188:1;1184;:5;1172:17;;1203:1;1196:8;;1078:131;;;;;:::o;4937:277:6:-;5029:9;:15;5039:4;5029:15;;;;;;;;;;;;;;;;5020:5;:24;;5012:33;;;;;;;;5073:1;5059:16;;:2;:16;;;;5051:25;;;;;;;;5101:26;5121:5;5101:9;:15;5111:4;5101:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;5083:9;:15;5093:4;5083:15;;;;;;;;;;;;;;;:44;;;;5149:24;5167:5;5149:9;:13;5159:2;5149:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;5133:9;:13;5143:2;5133:13;;;;;;;;;;;;;;;:40;;;;5199:2;5184:25;;5193:4;5184:25;;;5203:5;5184:25;;;;;;;;;;;;;;;;;;4937:277;;;:::o;1272:131:5:-;1330:7;1345:9;1361:1;1357;:5;1345:17;;1381:1;1376;:6;;1368:15;;;;;;;;1397:1;1390:8;;1272:131;;;;;:::o;5541:235:6:-;5622:1;5611:7;:12;;;;5603:21;;;;;;;;5645:23;5662:5;5645:12;;:16;;:23;;;;:::i;:::-;5630:12;:38;;;;5695:29;5718:5;5695:9;:18;5705:7;5695:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;5674:9;:18;5684:7;5674:18;;;;;;;;;;;;;;;:50;;;;5756:7;5735:36;;5752:1;5735:36;;;5765:5;5735:36;;;;;;;;;;;;;;;;;;5541:235;;:::o;629:108:4:-;681:20;693:7;681;:11;;:20;;;;:::i;:::-;724:7;712:20;;;;;;;;;;;;629:108;:::o;741:116::-;796:23;811:7;796;:14;;:23;;;;:::i;:::-;844:7;830:22;;;;;;;;;;;;741:116;:::o;725:166:3:-;809:4;850:1;831:21;;:7;:21;;;;823:30;;;;;;;;866:4;:11;;:20;878:7;866:20;;;;;;;;;;;;;;;;;;;;;;;;;859:27;;725:166;;;;:::o;244:167::-;335:1;316:21;;:7;:21;;;;308:30;;;;;;;;353:18;357:4;363:7;353:3;:18::i;:::-;352:19;344:28;;;;;;;;402:4;379;:11;;:20;391:7;379:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;244:167;;:::o;477:170::-;571:1;552:21;;:7;:21;;;;544:30;;;;;;;;588:18;592:4;598:7;588:3;:18::i;:::-;580:27;;;;;;;;637:5;614:4;:11;;:20;626:7;614:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;477:170;;:::o", - "source": "pragma solidity ^0.4.24;\n\nimport \"./ERC20.sol\";\nimport \"../../access/roles/MinterRole.sol\";\n\n/**\n * @title ERC20Mintable\n * @dev ERC20 minting logic\n */\ncontract ERC20Mintable is ERC20, MinterRole {\n /**\n * @dev Function to mint tokens\n * @param to The address that will receive the minted tokens.\n * @param value The amount of tokens to mint.\n * @return A boolean that indicates if the operation was successful.\n */\n function mint(\n address to,\n uint256 value\n )\n public\n onlyMinter\n returns (bool)\n {\n _mint(to, value);\n return true;\n }\n}\n", - "sourcePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol", - "ast": { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol", - "exportedSymbols": { - "ERC20Mintable": [ - 2201 - ] - }, - "id": 2202, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2175, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:7" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "file": "./ERC20.sol", - "id": 2176, - "nodeType": "ImportDirective", - "scope": 2202, - "sourceUnit": 2174, - "src": "26:21:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/access/roles/MinterRole.sol", - "file": "../../access/roles/MinterRole.sol", - "id": 2177, - "nodeType": "ImportDirective", - "scope": 2202, - "sourceUnit": 1602, - "src": "48:43:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 2178, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2173, - "src": "179:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$2173", - "typeString": "contract ERC20" - } - }, - "id": 2179, - "nodeType": "InheritanceSpecifier", - "src": "179:5:7" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 2180, - "name": "MinterRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1601, - "src": "186:10:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_MinterRole_$1601", - "typeString": "contract MinterRole" - } - }, - "id": 2181, - "nodeType": "InheritanceSpecifier", - "src": "186:10:7" - } - ], - "contractDependencies": [ - 1601, - 2173, - 2270 - ], - "contractKind": "contract", - "documentation": "@title ERC20Mintable\n@dev ERC20 minting logic", - "fullyImplemented": true, - "id": 2201, - "linearizedBaseContracts": [ - 2201, - 1601, - 2173, - 2270 - ], - "name": "ERC20Mintable", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 2199, - "nodeType": "Block", - "src": "530:44:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2193, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2183, - "src": "542:2:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2194, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2185, - "src": "546:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2192, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2083, - "src": "536:5:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "536:16:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2196, - "nodeType": "ExpressionStatement", - "src": "536:16:7" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 2197, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "565:4:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 2191, - "id": 2198, - "nodeType": "Return", - "src": "558:11:7" - } - ] - }, - "documentation": "@dev Function to mint tokens\n@param to The address that will receive the minted tokens.\n@param value The amount of tokens to mint.\n@return A boolean that indicates if the operation was successful.", - "id": 2200, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 2188, - "modifierName": { - "argumentTypes": null, - "id": 2187, - "name": "onlyMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "498:10:7", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "498:10:7" - } - ], - "name": "mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2186, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2183, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2200, - "src": "449:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "449:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2185, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2200, - "src": "465:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2184, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "465:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "443:39:7" - }, - "payable": false, - "returnParameters": { - "id": 2191, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2190, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2200, - "src": "522:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2189, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "522:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "521:6:7" - }, - "scope": 2201, - "src": "430:144:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 2202, - "src": "153:423:7" - } - ], - "src": "0:577:7" - }, - "legacyAST": { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol", - "exportedSymbols": { - "ERC20Mintable": [ - 2201 - ] - }, - "id": 2202, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2175, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:7" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "file": "./ERC20.sol", - "id": 2176, - "nodeType": "ImportDirective", - "scope": 2202, - "sourceUnit": 2174, - "src": "26:21:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/access/roles/MinterRole.sol", - "file": "../../access/roles/MinterRole.sol", - "id": 2177, - "nodeType": "ImportDirective", - "scope": 2202, - "sourceUnit": 1602, - "src": "48:43:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 2178, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2173, - "src": "179:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$2173", - "typeString": "contract ERC20" - } - }, - "id": 2179, - "nodeType": "InheritanceSpecifier", - "src": "179:5:7" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 2180, - "name": "MinterRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1601, - "src": "186:10:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_MinterRole_$1601", - "typeString": "contract MinterRole" - } - }, - "id": 2181, - "nodeType": "InheritanceSpecifier", - "src": "186:10:7" - } - ], - "contractDependencies": [ - 1601, - 2173, - 2270 - ], - "contractKind": "contract", - "documentation": "@title ERC20Mintable\n@dev ERC20 minting logic", - "fullyImplemented": true, - "id": 2201, - "linearizedBaseContracts": [ - 2201, - 1601, - 2173, - 2270 - ], - "name": "ERC20Mintable", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 2199, - "nodeType": "Block", - "src": "530:44:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 2193, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2183, - "src": "542:2:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 2194, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2185, - "src": "546:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2192, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2083, - "src": "536:5:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "536:16:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2196, - "nodeType": "ExpressionStatement", - "src": "536:16:7" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 2197, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "565:4:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 2191, - "id": 2198, - "nodeType": "Return", - "src": "558:11:7" - } - ] - }, - "documentation": "@dev Function to mint tokens\n@param to The address that will receive the minted tokens.\n@param value The amount of tokens to mint.\n@return A boolean that indicates if the operation was successful.", - "id": 2200, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 2188, - "modifierName": { - "argumentTypes": null, - "id": 2187, - "name": "onlyMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "498:10:7", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "498:10:7" - } - ], - "name": "mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2186, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2183, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2200, - "src": "449:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "449:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2185, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2200, - "src": "465:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2184, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "465:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "443:39:7" - }, - "payable": false, - "returnParameters": { - "id": 2191, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2190, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2200, - "src": "522:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2189, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "522:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "521:6:7" - }, - "scope": 2201, - "src": "430:144:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 2202, - "src": "153:423:7" - } - ], - "src": "0:577:7" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-11-15T02:10:59.846Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/IERC20.json b/truebit-implementation/build/contracts/IERC20.json deleted file mode 100644 index b47b919e..00000000 --- a/truebit-implementation/build/contracts/IERC20.json +++ /dev/null @@ -1,1859 +0,0 @@ -{ - "contractName": "IERC20", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "sourceMap": "", - "deployedSourceMap": "", - "source": "pragma solidity ^0.4.24;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender)\n external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value)\n external returns (bool);\n\n function transferFrom(address from, address to, uint256 value)\n external returns (bool);\n\n event Transfer(\n address indexed from,\n address indexed to,\n uint256 value\n );\n\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n}\n", - "sourcePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "ast": { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 2027 - ] - }, - "id": 2028, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1960, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:4" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 2027, - "linearizedBaseContracts": [ - 2027 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 1965, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1961, - "nodeType": "ParameterList", - "parameters": [], - "src": "156:2:4" - }, - "payable": false, - "returnParameters": { - "id": 1964, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1963, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1965, - "src": "182:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1962, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "182:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "181:9:4" - }, - "scope": 2027, - "src": "136:55:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1972, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1968, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1967, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 1972, - "src": "214:11:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1966, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "214:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "213:13:4" - }, - "payable": false, - "returnParameters": { - "id": 1971, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1970, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1972, - "src": "250:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1969, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "250:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "249:9:4" - }, - "scope": 2027, - "src": "195:64:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1981, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1977, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1974, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1981, - "src": "282:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1973, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "282:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1976, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1981, - "src": "297:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1975, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "297:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "281:32:4" - }, - "payable": false, - "returnParameters": { - "id": 1980, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1979, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1981, - "src": "341:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1978, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "341:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "340:9:4" - }, - "scope": 2027, - "src": "263:87:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1990, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1986, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1983, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1990, - "src": "372:10:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1982, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "372:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1985, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1990, - "src": "384:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1984, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "384:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:27:4" - }, - "payable": false, - "returnParameters": { - "id": 1989, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1988, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1990, - "src": "417:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1987, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "417:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "416:6:4" - }, - "scope": 2027, - "src": "354:69:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1999, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1992, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1999, - "src": "444:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1991, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "444:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1994, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1999, - "src": "461:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1993, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "461:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "443:32:4" - }, - "payable": false, - "returnParameters": { - "id": 1998, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1997, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1999, - "src": "498:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1996, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "498:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "497:6:4" - }, - "scope": 2027, - "src": "427:77:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2010, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2006, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2001, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "530:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2000, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "530:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2003, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "544:10:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2002, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "544:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2005, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "556:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2004, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "556:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:41:4" - }, - "payable": false, - "returnParameters": { - "id": 2009, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2008, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "593:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2007, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "593:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "592:6:4" - }, - "scope": 2027, - "src": "508:91:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 2018, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 2017, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2012, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2018, - "src": "623:20:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2011, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "623:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2014, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2018, - "src": "649:18:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2013, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2016, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2018, - "src": "673:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2015, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "673:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "617:73:4" - }, - "src": "603:88:4" - }, - { - "anonymous": false, - "documentation": null, - "id": 2026, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 2025, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2020, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2026, - "src": "715:21:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2019, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "715:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2022, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2026, - "src": "742:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2021, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "742:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2024, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2026, - "src": "771:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2023, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "771:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "709:79:4" - }, - "src": "695:94:4" - } - ], - "scope": 2028, - "src": "115:676:4" - } - ], - "src": "0:792:4" - }, - "legacyAST": { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 2027 - ] - }, - "id": 2028, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1960, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:4" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 2027, - "linearizedBaseContracts": [ - 2027 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 1965, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1961, - "nodeType": "ParameterList", - "parameters": [], - "src": "156:2:4" - }, - "payable": false, - "returnParameters": { - "id": 1964, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1963, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1965, - "src": "182:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1962, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "182:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "181:9:4" - }, - "scope": 2027, - "src": "136:55:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1972, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1968, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1967, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 1972, - "src": "214:11:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1966, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "214:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "213:13:4" - }, - "payable": false, - "returnParameters": { - "id": 1971, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1970, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1972, - "src": "250:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1969, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "250:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "249:9:4" - }, - "scope": 2027, - "src": "195:64:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1981, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1977, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1974, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1981, - "src": "282:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1973, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "282:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1976, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1981, - "src": "297:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1975, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "297:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "281:32:4" - }, - "payable": false, - "returnParameters": { - "id": 1980, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1979, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1981, - "src": "341:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1978, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "341:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "340:9:4" - }, - "scope": 2027, - "src": "263:87:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1990, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1986, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1983, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1990, - "src": "372:10:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1982, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "372:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1985, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1990, - "src": "384:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1984, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "384:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:27:4" - }, - "payable": false, - "returnParameters": { - "id": 1989, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1988, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1990, - "src": "417:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1987, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "417:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "416:6:4" - }, - "scope": 2027, - "src": "354:69:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1999, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1992, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1999, - "src": "444:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1991, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "444:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1994, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1999, - "src": "461:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1993, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "461:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "443:32:4" - }, - "payable": false, - "returnParameters": { - "id": 1998, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1997, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1999, - "src": "498:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1996, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "498:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "497:6:4" - }, - "scope": 2027, - "src": "427:77:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 2010, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2006, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2001, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "530:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2000, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "530:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2003, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "544:10:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2002, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "544:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2005, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "556:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2004, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "556:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:41:4" - }, - "payable": false, - "returnParameters": { - "id": 2009, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2008, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 2010, - "src": "593:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2007, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "593:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "592:6:4" - }, - "scope": 2027, - "src": "508:91:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 2018, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 2017, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2012, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 2018, - "src": "623:20:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2011, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "623:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2014, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 2018, - "src": "649:18:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2013, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2016, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2018, - "src": "673:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2015, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "673:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "617:73:4" - }, - "src": "603:88:4" - }, - { - "anonymous": false, - "documentation": null, - "id": 2026, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 2025, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2020, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 2026, - "src": "715:21:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2019, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "715:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2022, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 2026, - "src": "742:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2021, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "742:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 2024, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 2026, - "src": "771:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2023, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "771:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "709:79:4" - }, - "src": "695:94:4" - } - ], - "scope": 2028, - "src": "115:676:4" - } - ], - "src": "0:792:4" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-12-07T22:50:05.592Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/IICO.json b/truebit-implementation/build/contracts/IICO.json deleted file mode 100644 index 69da1fd3..00000000 --- a/truebit-implementation/build/contracts/IICO.json +++ /dev/null @@ -1,31570 +0,0 @@ -{ - "contractName": "IICO", - "abi": [ - { - "constant": true, - "inputs": [], - "name": "tokensForSale", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "sumAcceptedVirtualContrib", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "cutOffBidID", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "uint256" - } - ], - "name": "contributorBidIDs", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "endTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "withdrawalLockTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "beneficiary", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "bids", - "outputs": [ - { - "name": "maxValuation", - "type": "uint256" - }, - { - "name": "personalMin", - "type": "uint256" - }, - { - "name": "contrib", - "type": "uint256" - }, - { - "name": "bonus", - "type": "uint256" - }, - { - "name": "contributor", - "type": "address" - }, - { - "name": "withdrawn", - "type": "bool" - }, - { - "name": "redeemed", - "type": "bool" - }, - { - "name": "active", - "type": "bool" - }, - { - "name": "minBucketID", - "type": "uint256" - }, - { - "name": "maxBucketID", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "maxBonus", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "lastBidID", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "startTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "buckets", - "outputs": [ - { - "name": "valuation", - "type": "uint256" - }, - { - "name": "creator", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "maxValuation", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "minValuation", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "finalized", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "numBuckets", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "increment", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "sumAcceptedContrib", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "endFullBonusTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "_startTime", - "type": "uint256" - }, - { - "name": "_fullBonusLength", - "type": "uint256" - }, - { - "name": "_partialWithdrawalLength", - "type": "uint256" - }, - { - "name": "_withdrawalLockUpLength", - "type": "uint256" - }, - { - "name": "_maxBonus", - "type": "uint256" - }, - { - "name": "_beneficiary", - "type": "address" - }, - { - "name": "_minValuation", - "type": "uint256" - }, - { - "name": "_maxValuation", - "type": "uint256" - }, - { - "name": "_increment", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "contributor", - "type": "address" - }, - { - "indexed": true, - "name": "bidID", - "type": "uint256" - }, - { - "indexed": true, - "name": "time", - "type": "uint256" - } - ], - "name": "BidSubmitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "poker", - "type": "address" - }, - { - "indexed": true, - "name": "bidID", - "type": "uint256" - } - ], - "name": "Poked", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "name": "_token", - "type": "address" - } - ], - "name": "setToken", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_maxCap", - "type": "uint256" - }, - { - "name": "_personalMin", - "type": "uint256" - } - ], - "name": "submitBid", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_bidID", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "finalize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_bidID", - "type": "uint256" - } - ], - "name": "redeem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_bids", - "type": "uint256[]" - } - ], - "name": "poke", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "bonus", - "outputs": [ - { - "name": "b", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_contributor", - "type": "address" - } - ], - "name": "totalContrib", - "outputs": [ - { - "name": "contribution", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_bucketid", - "type": "uint256" - } - ], - "name": "bucketMinBids", - "outputs": [ - { - "name": "minBids", - "type": "uint256[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_bucketid", - "type": "uint256" - } - ], - "name": "bucketMaxBids", - "outputs": [ - { - "name": "maxBids", - "type": "uint256[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405260006005557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6012553480156200003a57600080fd5b5060405161012080620025e6833981018060405281019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860068190555087600654016007819055508660075401600881905550856008540160098190555084600c8190555083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e8190555082600d8190555080600f819055506001600f54600d54600e54038115156200018a57fe5b0401601081905550608060405190810160405280600d5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015620001f35781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156200022a5781602001602082028038833980820191505090505b50815250600360008081526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190620002b092919062000428565b506060820151816003019080519060200190620002cf92919062000428565b50905050608060405190810160405280600e5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015620003345781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156200036b5781602001602082028038833980820191505090505b508152506003600060016010540381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190620003f692919062000428565b5060608201518160030190805190602001906200041592919062000428565b50905050505050505050505050620004a2565b82805482825590600052602060002090810192821562000467579160200282015b828111156200046657825182559160200191906001019062000449565b5b5090506200047691906200047a565b5090565b6200049f91905b808211156200049b57600081600090555060010162000481565b5090565b90565b61213480620004b26000396000f30060806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806312aef8c314610369578063144fa6d714610394578063152713b3146103d75780631ae9fe6a146104025780631def6bad1461042d5780632e1a7d4d1461048e5780633197cbb6146104bb57806334f732e8146104e657806338af3eed146105115780634423c5f1146105685780634bb278f31461062057806354c5b6961461063757806357f196fa146106625780635e7c85b11461068d57806372a2fee0146106e457806375b4d78c1461076657806378e97925146107915780638da5cb5b146107bc5780639b51fb0d14610813578063a79fb0c214610887578063aac16603146108b2578063b3f05b97146108dd578063b821da1b1461090c578063bfdcc9a214610936578063d09de08a14610961578063db006a751461098c578063dc382cbf146109b9578063ea9ad4a5146109e4578063f0d6cc7014610a66578063f5e7f5d914610a91578063fc0c546a14610af7575b600080341415801561019f57506006544210155b80156101ac575060095442105b15610200576101fb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b4e565b610366565b60003414801561021c5750601160009054906101000a900460ff165b1561036057600090505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561035b5760026000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156102c057fe5b9060005260206000200154815260200190815260200160002060040160159054906101000a900460ff1615156103505761034f600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561033f57fe5b9060005260206000200154611288565b5b806001019050610226565b610365565b600080fd5b5b50005b34801561037557600080fd5b5061037e611516565b6040518082815260200191505060405180910390f35b3480156103a057600080fd5b506103d5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061151c565b005b3480156103e357600080fd5b506103ec611716565b6040518082815260200191505060405180910390f35b34801561040e57600080fd5b5061041761171c565b6040518082815260200191505060405180910390f35b34801561043957600080fd5b50610478600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611722565b6040518082815260200191505060405180910390f35b34801561049a57600080fd5b506104b960048036038101908080359060200190929190505050611752565b005b3480156104c757600080fd5b506104d061192f565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611935565b6040518082815260200191505060405180910390f35b34801561051d57600080fd5b5061052661193b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561057457600080fd5b5061059360048036038101908080359060200190929190505050611961565b604051808b81526020018a81526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018615151515815260200185151515158152602001841515151581526020018381526020018281526020019a505050505050505050505060405180910390f35b34801561062c57600080fd5b506106356119fc565b005b34801561064357600080fd5b5061064c611aa0565b6040518082815260200191505060405180910390f35b34801561066e57600080fd5b50610677611aa6565b6040518082815260200191505060405180910390f35b34801561069957600080fd5b506106ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aac565b6040518082815260200191505060405180910390f35b3480156106f057600080fd5b5061070f60048036038101908080359060200190929190505050611b80565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610752578082015181840152602081019050610737565b505050509050019250505060405180910390f35b34801561077257600080fd5b5061077b611c9c565b6040518082815260200191505060405180910390f35b34801561079d57600080fd5b506107a6611ce5565b6040518082815260200191505060405180910390f35b3480156107c857600080fd5b506107d1611ceb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081f57600080fd5b5061083e60048036038101908080359060200190929190505050611d10565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561089357600080fd5b5061089c611d54565b6040518082815260200191505060405180910390f35b3480156108be57600080fd5b506108c7611d5a565b6040518082815260200191505060405180910390f35b3480156108e957600080fd5b506108f2611d60565b604051808215151515815260200191505060405180910390f35b6109346004803603810190808035906020019092919080359060200190929190505050610b4e565b005b34801561094257600080fd5b5061094b611d73565b6040518082815260200191505060405180910390f35b34801561096d57600080fd5b50610976611d79565b6040518082815260200191505060405180910390f35b34801561099857600080fd5b506109b760048036038101908080359060200190929190505050611288565b005b3480156109c557600080fd5b506109ce611d7f565b6040518082815260200191505060405180910390f35b3480156109f057600080fd5b50610a0f60048036038101908080359060200190929190505050611d85565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610a52578082015181840152602081019050610a37565b505050509050019250505060405180910390f35b348015610a7257600080fd5b50610a7b611ea1565b6040518082815260200191505060405180910390f35b348015610a9d57600080fd5b50610af560048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611ea7565b005b348015610b0357600080fd5b50610b0c612070565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000806006544210158015610b67575060095442105b1515610b7257600080fd5b600d548610158015610b8357508486115b1515610b8e57600080fd5b6000600f54600d548803811515610ba157fe5b06141515610bae57600080fd5b6000600f54600d548703811515610bc157fe5b06141515610bce57600080fd5b600f54600d548603811515610bdf57fe5b049350600f54600d548703811515610bf357fe5b049250600073ffffffffffffffffffffffffffffffffffffffff166003600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d9b576080604051908101604052808681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015610cbf5781602001602082028038833980820191505090505b5081526020016000604051908082528060200260200182016040528015610cf55781602001602082028038833980820191505090505b50815250600360008681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610d79929190612096565b506060820151816003019080519060200190610d96929190612096565b509050505b600073ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f40576080604051908101604052808781526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015610e645781602001602082028038833980820191505090505b5081526020016000604051908082528060200260200182016040528015610e9a5781602001602082028038833980820191505090505b50815250600360008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610f1e929190612096565b506060820151816003019080519060200190610f3b929190612096565b509050505b6003600084815260200190815260200160002091506005600081546001019190508190555061014060405190810160405280878152602001868152602001348152602001610f8c611c9c565b81526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020018734601354011180610fd45750863460135401105b610fdf576001610fe2565b60005b15158152602001858152602001848152506002600060055481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c08201518160040160156101000a81548160ff02191690831515021790555060e08201518160040160166101000a81548160ff0219169083151502179055506101008201518160050155610120820151816006015590505060026000600554815260200190815260200160002090508060020154601360008282540192505081905550633b9aca00816003015482600201540281151561113457fe5b04816002015401601460008282540192505081905550600360008481526020019081526020016000206002016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600360008581526020019081526020016000206003016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005549080600181540180825580915050906001820390600052602060002001600090919290919091505550426005543373ffffffffffffffffffffffffffffffffffffffff167f84bee513033536a8de8a8260e2674a4a3eebd61ddce74615fdeca8a1499f5efe60405160405180910390a4505050505050565b6000806002600084815260200190815260200160002091506002600060125481526020019081526020016000209050601160009054906101000a900460ff1615156112d257600080fd5b8160040160159054906101000a900460ff161515156112f057600080fd5b60018260040160156101000a81548160ff02191690831515021790555080600001548260000154118061133857508060000154826000015414801561133757506012548310155b5b156114a157600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601454633b9aca0086600301548760020154028115156113bc57fe5b04866002015401600b54028115156113d057fe5b046040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b505050506040513d602081101561148057600080fd5b8101908080519060200190929190505050151561149c57600080fd5b611511565b8160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc83600201549081150290604051600060405180830381858888f1935050505015801561150f573d6000803e3d6000fd5b505b505050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561157757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156115d457600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156116d257600080fd5b505af11580156116e6573d6000803e3d6000fd5b505050506040513d60208110156116fc57600080fd5b8101908080519060200190929190505050600b8190555050565b60145481565b60125481565b60046020528160005260406000208181548110151561173d57fe5b90600052602060002001600091509150505481565b6000806002600084815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117c857600080fd5b600854421015156117d857600080fd5b8160040160149054906101000a900460ff161515156117f657600080fd5b60018260040160146101000a81548160ff02191690831515021790555060008260040160166101000a81548160ff021916908315150217905550600754421061185a5760075460085403426008540383600201540281151561185457fe5b04611860565b81600201545b90508160020154811115151561187257fe5b8082600201600082825403925050819055506003600283600301540281151561189757fe5b0482600301819055508060136000828254039250508190555080633b9aca00600202826003028460020154018460030154028115156118d257fe5b04016014600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611929573d6000803e3d6000fd5b50505050565b60095481565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060040160159054906101000a900460ff16908060040160169054906101000a900460ff1690806005015490806006015490508a565b6009544210151515611a0d57600080fd5b601160009054906101000a900460ff16151515611a2957600080fd5b6001601160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f1935050505050565b600c5481565b60055481565b600080600090505b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611b7a5760026000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611b4e57fe5b906000526020600020015481526020019081526020016000206002015482019150806001019050611ab4565b50919050565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bfb57829250611c95565b8160020180549050604051908082528060200260200182016040528015611c315781602001602082028038833980820191505090505b50925060009050600090505b8160020180549050811015611c91578160020181815481101515611c5d57fe5b90600052602060002001548382815181101515611c7657fe5b90602001906020020181815250508080600101915050611c3d565b8292505b5050919050565b6000600754421015611cb257600c549050611ce2565b600954421115611cc55760009050611ce2565b600754600954034260095403600c5402811515611cde57fe5b0490505b90565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600e5481565b600d5481565b601160009054906101000a900460ff1681565b60105481565b600f5481565b60135481565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e0057829250611e9a565b8160030180549050604051908082528060200260200182016040528015611e365781602001602082028038833980820191505090505b50925060009050600090505b8160030180549050811015611e96578160030181815481101515611e6257fe5b90600052602060002001548382815181101515611e7b57fe5b90602001906020020181815250508080600101915050611e42565b8292505b5050919050565b60075481565b6000806000806013549350601454925060009150600260008081526020019081526020016000209050600091505b8451821015611f4657600260008684815181101515611ef057fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611f2f57806002015484039350611f39565b8060020154840193505b8180600101925050611ed5565b600091505b8451821015611fed57600260008684815181101515611f6657fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611fbc578060000154841180611fac5750806001015484105b1515611fb757600080fd5b611fe0565b80600001548411158015611fd4575080600101548410155b1515611fdf57600080fd5b5b8180600101925050611f4b565b600091505b84518210156120625760026000868481518110151561200d57fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff16158160040160166101000a81548160ff0219169083151502179055508180600101925050611ff2565b836013819055505050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8280548282559060005260206000209081019282156120d2579160200282015b828111156120d15782518255916020019190600101906120b6565b5b5090506120df91906120e3565b5090565b61210591905b808211156121015760008160009055506001016120e9565b5090565b905600a165627a7a72305820d996df6d3dfc92ccd120a8a073efe13ca65accd26f98bb069962779214bb3ff60029", - "deployedBytecode": "0x60806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806312aef8c314610369578063144fa6d714610394578063152713b3146103d75780631ae9fe6a146104025780631def6bad1461042d5780632e1a7d4d1461048e5780633197cbb6146104bb57806334f732e8146104e657806338af3eed146105115780634423c5f1146105685780634bb278f31461062057806354c5b6961461063757806357f196fa146106625780635e7c85b11461068d57806372a2fee0146106e457806375b4d78c1461076657806378e97925146107915780638da5cb5b146107bc5780639b51fb0d14610813578063a79fb0c214610887578063aac16603146108b2578063b3f05b97146108dd578063b821da1b1461090c578063bfdcc9a214610936578063d09de08a14610961578063db006a751461098c578063dc382cbf146109b9578063ea9ad4a5146109e4578063f0d6cc7014610a66578063f5e7f5d914610a91578063fc0c546a14610af7575b600080341415801561019f57506006544210155b80156101ac575060095442105b15610200576101fb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b4e565b610366565b60003414801561021c5750601160009054906101000a900460ff165b1561036057600090505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561035b5760026000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156102c057fe5b9060005260206000200154815260200190815260200160002060040160159054906101000a900460ff1615156103505761034f600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561033f57fe5b9060005260206000200154611288565b5b806001019050610226565b610365565b600080fd5b5b50005b34801561037557600080fd5b5061037e611516565b6040518082815260200191505060405180910390f35b3480156103a057600080fd5b506103d5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061151c565b005b3480156103e357600080fd5b506103ec611716565b6040518082815260200191505060405180910390f35b34801561040e57600080fd5b5061041761171c565b6040518082815260200191505060405180910390f35b34801561043957600080fd5b50610478600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611722565b6040518082815260200191505060405180910390f35b34801561049a57600080fd5b506104b960048036038101908080359060200190929190505050611752565b005b3480156104c757600080fd5b506104d061192f565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b506104fb611935565b6040518082815260200191505060405180910390f35b34801561051d57600080fd5b5061052661193b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561057457600080fd5b5061059360048036038101908080359060200190929190505050611961565b604051808b81526020018a81526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018615151515815260200185151515158152602001841515151581526020018381526020018281526020019a505050505050505050505060405180910390f35b34801561062c57600080fd5b506106356119fc565b005b34801561064357600080fd5b5061064c611aa0565b6040518082815260200191505060405180910390f35b34801561066e57600080fd5b50610677611aa6565b6040518082815260200191505060405180910390f35b34801561069957600080fd5b506106ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aac565b6040518082815260200191505060405180910390f35b3480156106f057600080fd5b5061070f60048036038101908080359060200190929190505050611b80565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610752578082015181840152602081019050610737565b505050509050019250505060405180910390f35b34801561077257600080fd5b5061077b611c9c565b6040518082815260200191505060405180910390f35b34801561079d57600080fd5b506107a6611ce5565b6040518082815260200191505060405180910390f35b3480156107c857600080fd5b506107d1611ceb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081f57600080fd5b5061083e60048036038101908080359060200190929190505050611d10565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b34801561089357600080fd5b5061089c611d54565b6040518082815260200191505060405180910390f35b3480156108be57600080fd5b506108c7611d5a565b6040518082815260200191505060405180910390f35b3480156108e957600080fd5b506108f2611d60565b604051808215151515815260200191505060405180910390f35b6109346004803603810190808035906020019092919080359060200190929190505050610b4e565b005b34801561094257600080fd5b5061094b611d73565b6040518082815260200191505060405180910390f35b34801561096d57600080fd5b50610976611d79565b6040518082815260200191505060405180910390f35b34801561099857600080fd5b506109b760048036038101908080359060200190929190505050611288565b005b3480156109c557600080fd5b506109ce611d7f565b6040518082815260200191505060405180910390f35b3480156109f057600080fd5b50610a0f60048036038101908080359060200190929190505050611d85565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610a52578082015181840152602081019050610a37565b505050509050019250505060405180910390f35b348015610a7257600080fd5b50610a7b611ea1565b6040518082815260200191505060405180910390f35b348015610a9d57600080fd5b50610af560048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611ea7565b005b348015610b0357600080fd5b50610b0c612070565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000806006544210158015610b67575060095442105b1515610b7257600080fd5b600d548610158015610b8357508486115b1515610b8e57600080fd5b6000600f54600d548803811515610ba157fe5b06141515610bae57600080fd5b6000600f54600d548703811515610bc157fe5b06141515610bce57600080fd5b600f54600d548603811515610bdf57fe5b049350600f54600d548703811515610bf357fe5b049250600073ffffffffffffffffffffffffffffffffffffffff166003600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d9b576080604051908101604052808681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015610cbf5781602001602082028038833980820191505090505b5081526020016000604051908082528060200260200182016040528015610cf55781602001602082028038833980820191505090505b50815250600360008681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610d79929190612096565b506060820151816003019080519060200190610d96929190612096565b509050505b600073ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f40576080604051908101604052808781526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015610e645781602001602082028038833980820191505090505b5081526020016000604051908082528060200260200182016040528015610e9a5781602001602082028038833980820191505090505b50815250600360008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610f1e929190612096565b506060820151816003019080519060200190610f3b929190612096565b509050505b6003600084815260200190815260200160002091506005600081546001019190508190555061014060405190810160405280878152602001868152602001348152602001610f8c611c9c565b81526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020018734601354011180610fd45750863460135401105b610fdf576001610fe2565b60005b15158152602001858152602001848152506002600060055481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c08201518160040160156101000a81548160ff02191690831515021790555060e08201518160040160166101000a81548160ff0219169083151502179055506101008201518160050155610120820151816006015590505060026000600554815260200190815260200160002090508060020154601360008282540192505081905550633b9aca00816003015482600201540281151561113457fe5b04816002015401601460008282540192505081905550600360008481526020019081526020016000206002016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600360008581526020019081526020016000206003016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005549080600181540180825580915050906001820390600052602060002001600090919290919091505550426005543373ffffffffffffffffffffffffffffffffffffffff167f84bee513033536a8de8a8260e2674a4a3eebd61ddce74615fdeca8a1499f5efe60405160405180910390a4505050505050565b6000806002600084815260200190815260200160002091506002600060125481526020019081526020016000209050601160009054906101000a900460ff1615156112d257600080fd5b8160040160159054906101000a900460ff161515156112f057600080fd5b60018260040160156101000a81548160ff02191690831515021790555080600001548260000154118061133857508060000154826000015414801561133757506012548310155b5b156114a157600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601454633b9aca0086600301548760020154028115156113bc57fe5b04866002015401600b54028115156113d057fe5b046040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b505050506040513d602081101561148057600080fd5b8101908080519060200190929190505050151561149c57600080fd5b611511565b8160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc83600201549081150290604051600060405180830381858888f1935050505015801561150f573d6000803e3d6000fd5b505b505050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561157757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156115d457600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156116d257600080fd5b505af11580156116e6573d6000803e3d6000fd5b505050506040513d60208110156116fc57600080fd5b8101908080519060200190929190505050600b8190555050565b60145481565b60125481565b60046020528160005260406000208181548110151561173d57fe5b90600052602060002001600091509150505481565b6000806002600084815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117c857600080fd5b600854421015156117d857600080fd5b8160040160149054906101000a900460ff161515156117f657600080fd5b60018260040160146101000a81548160ff02191690831515021790555060008260040160166101000a81548160ff021916908315150217905550600754421061185a5760075460085403426008540383600201540281151561185457fe5b04611860565b81600201545b90508160020154811115151561187257fe5b8082600201600082825403925050819055506003600283600301540281151561189757fe5b0482600301819055508060136000828254039250508190555080633b9aca00600202826003028460020154018460030154028115156118d257fe5b04016014600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611929573d6000803e3d6000fd5b50505050565b60095481565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060040160159054906101000a900460ff16908060040160169054906101000a900460ff1690806005015490806006015490508a565b6009544210151515611a0d57600080fd5b601160009054906101000a900460ff16151515611a2957600080fd5b6001601160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f1935050505050565b600c5481565b60055481565b600080600090505b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611b7a5760026000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611b4e57fe5b906000526020600020015481526020019081526020016000206002015482019150806001019050611ab4565b50919050565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bfb57829250611c95565b8160020180549050604051908082528060200260200182016040528015611c315781602001602082028038833980820191505090505b50925060009050600090505b8160020180549050811015611c91578160020181815481101515611c5d57fe5b90600052602060002001548382815181101515611c7657fe5b90602001906020020181815250508080600101915050611c3d565b8292505b5050919050565b6000600754421015611cb257600c549050611ce2565b600954421115611cc55760009050611ce2565b600754600954034260095403600c5402811515611cde57fe5b0490505b90565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600e5481565b600d5481565b601160009054906101000a900460ff1681565b60105481565b600f5481565b60135481565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e0057829250611e9a565b8160030180549050604051908082528060200260200182016040528015611e365781602001602082028038833980820191505090505b50925060009050600090505b8160030180549050811015611e96578160030181815481101515611e6257fe5b90600052602060002001548382815181101515611e7b57fe5b90602001906020020181815250508080600101915050611e42565b8292505b5050919050565b60075481565b6000806000806013549350601454925060009150600260008081526020019081526020016000209050600091505b8451821015611f4657600260008684815181101515611ef057fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611f2f57806002015484039350611f39565b8060020154840193505b8180600101925050611ed5565b600091505b8451821015611fed57600260008684815181101515611f6657fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611fbc578060000154841180611fac5750806001015484105b1515611fb757600080fd5b611fe0565b80600001548411158015611fd4575080600101548410155b1515611fdf57600080fd5b5b8180600101925050611f4b565b600091505b84518210156120625760026000868481518110151561200d57fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff16158160040160166101000a81548160ff0219169083151502179055508180600101925050611ff2565b836013819055505050505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b8280548282559060005260206000209081019282156120d2579160200282015b828111156120d15782518255916020019190600101906120b6565b5b5090506120df91906120e3565b5090565b61210591905b808211156121015760008160009055506001016120e9565b5090565b905600a165627a7a72305820d996df6d3dfc92ccd120a8a073efe13ca65accd26f98bb069962779214bb3ff60029", - "sourceMap": "2160:19023:0:-;;;4381:1;4357:25;;2526:2;5566:30;;6962:1191;8:9:-1;5:2;;;30:1;27;20:12;5:2;6962:1191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7197:10;7189:5;;:18;;;;;;;;;;;;;;;;;;7229:10;7217:9;:22;;;;7280:16;7268:9;;:28;7249:16;:47;;;;7346:24;7327:16;;:43;7306:18;:64;;;;7411:23;7390:18;;:44;7380:7;:54;;;;7455:9;7444:8;:20;;;;7488:12;7474:11;;:26;;;;;;;;;;;;;;;;;;7525:13;7510:12;:28;;;;7563:13;7548:12;:28;;;;7598:10;7586:9;:22;;;;7677:1;7664:9;;7648:12;;7633;;:27;7632:41;;;;;;;;7631:47;7618:10;:60;;;;7757:174;;;;;;;;;7792:12;;7757:174;;;;7910:10;7757:174;;;;;;7841:1;7830:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;7830:13:0;;;;7757:174;;;;7885:1;7874:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;7874:13:0;;;;7757:174;;;7744:7;:10;7752:1;7744:10;;;;;;;;;;;:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;7972:174;;;;;;;;;8007:12;;7972:174;;;;8125:10;7972:174;;;;;;8056:1;8045:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8045:13:0;;;;7972:174;;;;8100:1;8089:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8089:13:0;;;;7972:174;;;7942:7;:27;7966:1;7955:10;;:12;7942:27;;;;;;;;;;;:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;6962:1191;;;;;;;;;2160:19023;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", - "deployedSourceMap": "2160:19023:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17187:6;16898:1;16885:9;:14;;:34;;;;;16910:9;;16903:3;:16;;16885:34;:51;;;;;16929:7;;16923:3;:13;16885:51;16881:649;;;17016:25;2659:2;2526;17016:9;:25::i;:::-;16881:649;;;17073:1;17060:9;:14;:27;;;;;17078:9;;;;;;;;;;;17060:27;17056:474;;;17196:1;17187:10;;17182:223;17203:17;:29;17221:10;17203:29;;;;;;;;;;;;;;;:36;;;;17199:1;:40;17182:223;;;17281:4;:38;17286:17;:29;17304:10;17286:29;;;;;;;;;;;;;;;17316:1;17286:32;;;;;;;;;;;;;;;;;;17281:38;;;;;;;;;;;:47;;;;;;;;;;;;17280:48;17276:114;;;17350:40;17357:17;:29;17375:10;17357:29;;;;;;;;;;;;;;;17387:1;17357:32;;;;;;;;;;;;;;;;;;17350:6;:40::i;:::-;17276:114;17241:3;;;;;17182:223;;;17056:474;;;17522:8;;;17056:474;16881:649;16844:693;2160:19023;4883:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4883:25:0;;;;;;;;;;;;;;;;;;;;;;;8315:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8315:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5749:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5749:37:0;;;;;;;;;;;;;;;;;;;;;;;5566:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5566:30:0;;;;;;;;;;;;;;;;;;;;;;;4255:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4255:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11526:1060;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11526:1060:0;;;;;;;;;;;;;;;;;;;;;;;;;;4736:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4736:19:0;;;;;;;;;;;;;;;;;;;;;;;4619:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4619:30:0;;;;;;;;;;;;;;;;;;;;;;;2275:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2275:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4120:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4120:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15335:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15335:142:0;;;;;;4975:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4975:20:0;;;;;;;;;;;;;;;;;;;;;;;4357:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4357:25:0;;;;;;;;;;;;;;;;;;;;;;;19642:243;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19642:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20802:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20802:377:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20802:377:0;;;;;;;;;;;;;;;;;18757:411;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18757:411:0;;;;;;;;;;;;;;;;;;;;;;;4462:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4462:21:0;;;;;;;;;;;;;;;;;;;;;;;2207:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2207:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4180:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4180:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5180:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5180:24:0;;;;;;;;;;;;;;;;;;;;;;;5150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5150:24:0;;;;;;;;;;;;;;;;;;;;;;;5416:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5416:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8960:2268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5237:22:0;;;;;;;;;;;;;;;;;;;;;;;5210:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5210:21:0;;;;;;;;;;;;;;;;;;;;;;;15721:731;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15721:731:0;;;;;;;;;;;;;;;;;;;;;;;;;;5668:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5668:30:0;;;;;;;;;;;;;;;;;;;;;;;20148:392;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20148:392:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20148:392:0;;;;;;;;;;;;;;;;;4535:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4535:28:0;;;;;;;;;;;;;;;;;;;;;;;17665:788;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17665:788:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4807:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4807:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8960:2268;9395:16;9465;10130:24;10738:15;9123:9;;9116:3;:16;;:33;;;;;9142:7;;9136:3;:13;9116:33;9108:42;;;;;;;;9218:12;;9207:7;:23;;:49;;;;;9244:12;9234:7;:22;9207:49;9199:58;;;;;;;;9316:1;9303:9;;9287:12;;9277:7;:22;9276:36;;;;;;;;:41;9267:51;;;;;;;;9382:1;9369:9;;9353:12;;9338;:27;9337:41;;;;;;;;:46;9328:56;;;;;;;;9446:9;;9430:12;;9415;:27;9414:41;;;;;;;;9395:60;;9511:9;;9495:12;;9485:7;:22;9484:36;;;;;;;;9465:55;;9576:3;9536:44;;:7;:20;9544:11;9536:20;;;;;;;;;;;:28;;;;;;;;;;;;:44;;;9532:292;;;9619:194;;;;;;;;;9658:12;9619:194;;;;9788:10;9619:194;;;;;;9711:1;9700:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9700:13:0;;;;9619:194;;;;9759:1;9748:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9748:13:0;;;;9619:194;;;9596:7;:20;9604:11;9596:20;;;;;;;;;;;:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;9532:292;9877:3;9837:44;;:7;:20;9845:11;9837:20;;;;;;;;;;;:28;;;;;;;;;;;;:44;;;9833:287;;;9920:189;;;;;;;;;9959:7;9920:189;;;;10084:10;9920:189;;;;;;10007:1;9996:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9996:13:0;;;;9920:189;;;;10055:1;10044:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;10044:13:0;;;;9920:189;;;9897:7;:20;9905:11;9897:20;;;;;;;;;;;:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;9833:287;10157:7;:20;10165:11;10157:20;;;;;;;;;;;10130:47;;10189:9;;10187:11;;;;;;;;;;;10316:417;;;;;;;;;10348:7;10316:417;;;;10382:12;10316:417;;;;10417:9;10316:417;;;;10447:7;:5;:7::i;:::-;10316:417;;;;10481:10;10316:417;;;;;;10516:5;10316:417;;;;;;10545:5;10316:417;;;;;;10653:7;10641:9;10622:18;;:28;:38;:85;;;;10695:12;10683:9;10664:18;;:28;:43;10622:85;10621:101;;10718:4;10621:101;;;10711:5;10621:101;10316:417;;;;;;10568:11;10316:417;;;;10597:11;10316:417;;;10298:4;:15;10303:9;;10298:15;;;;;;;;;;;:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10756:4;:15;10761:9;;10756:15;;;;;;;;;;;10738:33;;10851:3;:11;;;10829:18;;:33;;;;;;;;;;;5295:3;10924;:9;;;10910:3;:11;;;:23;10909:41;;;;;;;;10895:3;:11;;;:55;10866:25;;:84;;;;;;;;;;;11000:7;:20;11008:11;11000:20;;;;;;;;;;;:31;;11037:9;;11000:47;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11000:47:0;;;;;;;;;;;;;;;;;;;;;;11057:7;:20;11065:11;11057:20;;;;;;;;;;;:36;;11099:9;;11057:52;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11057:52:0;;;;;;;;;;;;;;;;;;;;;;11120:17;:29;11138:10;11120:29;;;;;;;;;;;;;;;11155:9;;11120:45;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11120:45:0;;;;;;;;;;;;;;;;;;;;;;11216:3;11205:9;;11193:10;11180:40;;;;;;;;;;;;8960:2268;;;;;;:::o;15721:731::-;15767:15;15807:21;15785:4;:12;15790:6;15785:12;;;;;;;;;;;15767:30;;15831:4;:17;15836:11;;15831:17;;;;;;;;;;;15807:41;;15866:9;;;;;;;;;;;15858:18;;;;;;;;15895:3;:12;;;;;;;;;;;;15894:13;15886:22;;;;;;;;15932:4;15919:3;:12;;;:17;;;;;;;;;;;;;;;;;;15969:9;:22;;;15950:3;:16;;;:41;:114;;;;16016:9;:22;;;15996:3;:16;;;:42;:67;;;;;16052:11;;16042:6;:21;;15996:67;15950:114;15946:499;;;16125:5;;;;;;;;;;;:14;;;16140:3;:15;;;;;;;;;;;;16235:25;;5295:3;16204;:9;;;16190:3;:11;;;:23;16189:41;;;;;;;;16175:3;:11;;;:55;16158:13;;:73;16157:103;;;;;;;;16125:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16125:136:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16125:136:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16125:136:0;;;;;;;;;;;;;;;;16117:145;;;;;;;;15946:499;;;16408:3;:15;;;;;;;;;;;;:24;;:37;16433:3;:11;;;16408:37;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16408:37:0;15946:499;15721:731;;;:::o;4883:25::-;;;;:::o;8315:218::-;6100:10;6091:19;;:5;;;;;;;;;;;:19;;;6083:28;;;;;;;;8408:1;8382:28;;8390:5;;;;;;;;;;;8382:28;;;8374:37;;;;;;;;8473:6;8465:5;;:14;;;;;;;;;;;;;;;;;;8505:5;;;;;;;;;;;:15;;;8521:4;8505:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8505:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8505:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8505:21:0;;;;;;;;;;;;;;;;8489:13;:37;;;;8315:218;:::o;5749:37::-;;;;:::o;5566:30::-;;;;:::o;4255:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11526:1060::-;11574:15;11949:11;11592:4;:12;11597:6;11592:12;;;;;;;;;;;11574:30;;11636:3;:15;;;;;;;;;;;;11622:29;;:10;:29;;;11614:38;;;;;;;;11676:18;;11670:3;:24;11662:33;;;;;;;;11714:3;:13;;;;;;;;;;;;11713:14;11705:23;;;;;;;;11755:4;11739:3;:13;;;:20;;;;;;;;;;;;;;;;;;11776:5;11763:3;:10;;;:18;;;;;;;;;;;;;;;;;;11970:16;;11964:3;:22;11963:125;;12071:16;;12050:18;;:37;12041:3;12020:18;;:24;12005:3;:11;;;:40;12004:84;;;;;;;;11963:125;;;11990:3;:11;;;11963:125;11949:139;;12115:3;:11;;;12105:6;:21;;12098:29;;;;;;12297:6;12282:3;:11;;;:21;;;;;;;;;;;12343:1;12338;12326:3;:9;;;:13;12325:19;;;;;;;;12313:3;:9;;:31;;;;12433:6;12411:18;;:28;;;;;;;;;;;12535:6;5295:3;12514:1;:17;12502:6;12500:1;:8;12486:3;:11;;;:22;12473:3;:9;;;:36;12472:60;;;;;;;;:69;12443:25;;:98;;;;;;;;;;;12552:10;:19;;:27;12572:6;12552:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12552:27:0;11526:1060;;;:::o;4736:19::-;;;;:::o;4619:30::-;;;;:::o;2275:26::-;;;;;;;;;;;;;:::o;4120:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15335:142::-;15381:7;;15374:3;:14;;15366:23;;;;;;;;15402:9;;;;;;;;;;;15401:10;15393:19;;;;;;;;15429:4;15417:9;;:16;;;;;;;;;;;;;;;;;;15437:11;;;;;;;;;;;:16;;:36;15454:18;;15437:36;;;;;;;;;;;;;;;;;;;;;;;;15335:142::o;4975:20::-;;;;:::o;4357:25::-;;;;:::o;19642:243::-;19707:17;19741:6;19750:1;19741:10;;19736:142;19757:17;:31;19775:12;19757:31;;;;;;;;;;;;;;;:38;;;;19753:1;:42;19736:142;;;19830:4;:40;19835:17;:31;19853:12;19835:31;;;;;;;;;;;;;;;19867:1;19835:34;;;;;;;;;;;;;;;;;;19830:40;;;;;;;;;;;:48;;;19814:64;;;;19797:3;;;;;19736:142;;;19642:243;;;;:::o;20802:377::-;20862:21;20889:24;21052:6;20916:7;:18;20924:9;20916:18;;;;;;;;;;;20889:45;;20968:3;20942:30;;:6;:14;;;;;;;;;;;;:30;;;20938:60;;;20986:7;20979:14;;;;20938:60;21023:6;:17;;:24;;;;21012:36;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;21012:36:0;;;;21002:46;;21061:1;21052:10;;21076:1;21072:5;;21067:90;21083:6;:17;;:24;;;;21079:1;:28;21067:90;;;21132:6;:17;;21150:1;21132:20;;;;;;;;;;;;;;;;;;21119:7;21127:1;21119:10;;;;;;;;;;;;;;;;;:33;;;;;21109:3;;;;;;;21067:90;;;21168:7;21161:14;;20802:377;;;;;;:::o;18757:411::-;18794:6;18822:16;;18816:3;:22;18812:349;;;18874:8;;18867:15;;;;18812:349;18907:7;;18901:3;:13;18897:264;;;18969:1;18962:8;;;;18897:264;19144:16;;19134:7;;:26;19125:3;19115:7;;:13;19103:8;;:26;19102:59;;;;;;;;19095:66;;18757:411;;:::o;4462:21::-;;;;:::o;2207:20::-;;;;;;;;;;;;;:::o;4180:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5180:24::-;;;;:::o;5150:::-;;;;:::o;5416:21::-;;;;;;;;;;;;;:::o;5237:22::-;;;;:::o;5210:21::-;;;;:::o;5668:30::-;;;;:::o;20148:392::-;20208:21;20235:24;20403:6;20262:7;:18;20270:9;20262:18;;;;;;;;;;;20235:45;;20314:3;20288:30;;:6;:14;;;;;;;;;;;;:30;;;20284:60;;;20332:7;20325:14;;;;20284:60;20369:6;:22;;:29;;;;20358:41;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;20358:41:0;;;;20348:51;;20412:1;20403:10;;20427:1;20423:5;;20418:100;20434:6;:22;;:29;;;;20430:1;:33;20418:100;;;20488:6;:22;;20511:1;20488:25;;;;;;;;;;;;;;;;;;20475:7;20483:1;20475:10;;;;;;;;;;;;;;;;;:38;;;;;20465:3;;;;;;;20418:100;;;20529:7;20522:14;;20148:392;;;;;;:::o;4535:28::-;;;;:::o;17665:788::-;17704:20;17749:21;17802:9;17819:15;17727:18;;17704:41;;17773:25;;17749:49;;17814:1;17802:13;;17837:4;:7;17842:1;17837:7;;;;;;;;;;;17819:25;;17858:1;17854:5;;17849:181;17865:5;:12;17861:1;:16;17849:181;;;17895:4;:14;17900:5;17906:1;17900:8;;;;;;;;;;;;;;;;;;17895:14;;;;;;;;;;;17889:20;;17924:3;:10;;;;;;;;;;;;17920:106;;;17961:3;:11;;;17942:30;;;;17920:106;;;18009:3;:11;;;17990:30;;;;17920:106;17879:3;;;;;;;17849:181;;;18043:1;18039:5;;18034:277;18050:5;:12;18046:1;:16;18034:277;;;18080:4;:14;18085:5;18091:1;18085:8;;;;;;;;;;;;;;;;;;18080:14;;;;;;;;;;;18074:20;;18103:3;:10;;;;;;;;;;;;18099:208;;;18147:3;:16;;;18129:15;:34;:71;;;;18185:3;:15;;;18167;:33;18129:71;18121:80;;;;;;;;18099:208;;;18246:3;:16;;;18227:15;:35;;:73;;;;;18285:3;:15;;;18266;:34;;18227:73;18219:82;;;;;;;;18099:208;18064:3;;;;;;;18034:277;;;18324:1;18320:5;;18315:94;18331:5;:12;18327:1;:16;18315:94;;;18361:4;:14;18366:5;18372:1;18366:8;;;;;;;;;;;;;;;;;;18361:14;;;;;;;;;;;18355:20;;18394:3;:10;;;;;;;;;;;;18393:11;18380:3;:10;;;:24;;;;;;;;;;;;;;;;;;18345:3;;;;;;;18315:94;;;18434:15;18413:18;:36;;;;17665:788;;;;;:::o;4807:18::-;;;;;;;;;;;;;:::o;2160:19023::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o", - "source": "/** @title Interactive Coin Offering\n * @author Clément Lesaege - \n * This smart contract has undertaken two audits and two bounty programs. However, keep in mind that smart contracts still rely on experimental technology.\n */\n\npragma solidity ^0.4.23;\n\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\n\n/** @title Interactive Coin Offering\n * This contract implements the Interactive Coin Offering token sale as described in this paper:\n * https://people.cs.uchicago.edu/~teutsch/papers/ico.pdf\n * Implementation details and modifications compared to the paper:\n * -A fixed amount of tokens is sold. This allows more flexibility for the distribution of the remaining tokens (rounds, team tokens which can be preallocated, non-initial sell of some cryptographic assets).\n * -The valuation pointer is only moved when the sale is over. This greatly reduces the amount of write operations and code complexity. However, at least one party must make one or multiple calls to finalize the sale.\n * -Buckets are not used as they are not required and increase code complexity.\n * -The bid submitter must provide the insertion spot. A search of the insertion spot is still done in the contract just in case the one provided was wrong or other bids were added between when the TX got signed and executed, but giving the search starting point greatly lowers gas consumption.\n * -Automatic withdrawals are only possible at the end of the sale. This decreases code complexity and possible interactions between different parts of the code.\n * -We put a full bonus, free withdrawal period at the beginning. This allows everyone to have a chance to place bids with full bonus and avoids clogging the network just after the sale starts. Note that at this moment, no information can be taken for granted as parties can withdraw freely.\n * -Calling the fallback function while sending ETH places a bid with an infinite maximum valuation. This allows buyers who want to buy no matter the price not need to use a specific interface and just send ETH. Without ETH, a call to the fallback function redeems the bids of the caller.\n */\ncontract IICO {\n\n /* *** General *** */\n address public owner; // The one setting up the contract.\n address public beneficiary; // The address which will get the funds.\n\n /* *** Bid *** */\n uint constant HEAD = 0; // Minimum value used for both the maxValuation and bidID of the head of the linked list.\n uint constant TAIL = uint(-1); // Maximum value used for both the maxValuation and bidID of the tail of the linked list.\n uint constant INFINITY = uint(-2); // A value so high that a bid using it is guaranteed to succeed. Still lower than TAIL to be placed before TAIL.\n // A bid to buy tokens as long as the personal maximum valuation is not exceeded.\n // Bids are in a sorted doubly linked list.\n // They are sorted in ascending order by (maxValuation,bidID) where bidID is the ID and key of the bid in the mapping.\n // The list contains two artificial bids HEAD and TAIL having respectively the minimum and maximum bidID and maxValuation.\n struct Bid {\n /* *** Bid Members *** */\n uint maxValuation; // Maximum valuation in wei beyond which the contributor prefers refund.\n uint personalMin;\n uint contrib; // Contribution in wei.\n uint bonus; // The numerator of the bonus that will be divided by BONUS_DIVISOR.\n address contributor; // The contributor who placed the bid.\n bool withdrawn; // True if the bid has been withdrawn.\n bool redeemed; // True if the ETH or tokens have been redeemed.\n\t\tbool active;\t\t // True if the bid is active given the current valuation.\n\n\t\tuint minBucketID;\n\t\tuint maxBucketID;\n\n }\n\n struct BidBucket {\n uint valuation; // the max cap/personal min valuation of bids in this bucket\n address creator; // The creator of this bucket for gas refund at the end. \n uint[] maxCapBids;\n uint[] personalMinBids;\n }\n\n mapping (uint => Bid) public bids; // Map bidID to bid.\n mapping (uint => BidBucket) public buckets; // Map bucketID to bucket.\n mapping (address => uint[]) public contributorBidIDs; // Map contributor to a list of its bid ID.\n uint public lastBidID = 0; // The last bidID not accounting TAIL.\n\n /* *** Sale parameters *** */\n uint public startTime; // When the sale starts.\n uint public endFullBonusTime; // When the full bonus period ends.\n uint public withdrawalLockTime; // When the contributors can't withdraw their bids manually anymore.\n uint public endTime; // When the sale ends.\n ERC20 public token; // The token which is sold.\n uint public tokensForSale; // The amount of tokens which will be sold.\n uint public maxBonus; // The maximum bonus. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n uint public minValuation;\n uint public maxValuation;\n uint public increment;\n uint public numBuckets;\n uint constant BONUS_DIVISOR = 1E9; // The quantity we need to divide by to normalize the bonus.\n\n /* *** Finalization variables *** */\n bool public finalized; // True when the cutting bid has been found. The following variables are final only after finalized==true.\n uint public cutOffBidID = TAIL; // The first accepted bid. All bids after it are accepted.\n uint public sumAcceptedContrib; // The sum of accepted contributions.\n uint public sumAcceptedVirtualContrib; // The sum of virtual (taking into account bonuses) contributions.\n\n /* *** Events *** */\n event BidSubmitted(address indexed contributor, uint indexed bidID, uint indexed time);\n\tevent Poked(address indexed poker, uint indexed bidID);\n\n /* *** Modifiers *** */\n modifier onlyOwner{ require(owner == msg.sender); _; }\n\n /* *** Functions Modifying the state *** */\n\n /** @dev Constructor. First contract set up (tokens will also need to be transferred to the contract and then setToken needs to be called to finish the setup).\n * @param _startTime Time the sale will start in seconds since the Unix Epoch.\n * @param _fullBonusLength Amount of seconds the sale lasts in the full bonus period.\n * @param _partialWithdrawalLength Amount of seconds the sale lasts in the partial withdrawal period.\n * @param _withdrawalLockUpLength Amount of seconds the sale lasts in the withdrawal lockup period.\n * @param _maxBonus The maximum bonus. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n * @param _beneficiary The party which will get the funds of the token sale.\n */\n function IICO(uint _startTime, uint _fullBonusLength, uint _partialWithdrawalLength, uint _withdrawalLockUpLength, uint _maxBonus, address _beneficiary, uint _minValuation, uint _maxValuation, uint _increment) public {\n owner = msg.sender;\n startTime = _startTime;\n endFullBonusTime = startTime + _fullBonusLength;\n withdrawalLockTime = endFullBonusTime + _partialWithdrawalLength;\n endTime = withdrawalLockTime + _withdrawalLockUpLength;\n maxBonus = _maxBonus;\n beneficiary = _beneficiary;\n maxValuation = _maxValuation;\n minValuation = _minValuation;\n increment = _increment;\n numBuckets = ((maxValuation - minValuation) / increment) + 1;\n \n // Add the first and the last buckets.\n buckets[0] = BidBucket({\n valuation: minValuation,\n maxCapBids: new uint[](0),\n personalMinBids: new uint[](0),\n creator: msg.sender\n });\n\n buckets[uint(numBuckets-1)] = BidBucket({\n valuation: maxValuation,\n maxCapBids: new uint[](0),\n personalMinBids: new uint[](0),\n creator: msg.sender\n });\n }\n\n /** @dev Set the token. Must only be called after the IICO contract receives the tokens to be sold.\n * @param _token The token to be sold.\n */\n function setToken(ERC20 _token) public onlyOwner {\n require(address(token) == address(0)); // Make sure the token is not already set.\n\n token = _token;\n tokensForSale = token.balanceOf(this);\n }\n\n /** @dev Submit a bid. The caller must give the exact position the bid must be inserted into in the list.\n * In practice, use searchAndBid to avoid the position being incorrect due to a new bid being inserted and changing the position the bid must be inserted at.\n * @param _maxCap The maximum cap accepted by this bid.\n * @param _personalMin The minimum sale value for the bid to be included.\n */\n function submitBid(uint _maxCap, uint _personalMin) public payable {\n // Make sure the two valuations are multiples of the increment\n require(now >= startTime && now < endTime); // Check that the bids are still open.\n require(_maxCap >= minValuation && _maxCap > _personalMin);\n require( (_maxCap - minValuation) % increment == 0);\n require( (_personalMin - minValuation) % increment == 0);\n\n uint minBucketID = (_personalMin - minValuation) / increment;\n uint maxBucketID = (_maxCap - minValuation) / increment; \n\n if (buckets[minBucketID].creator == address(0x0)) {\n buckets[minBucketID] = BidBucket({\n valuation: _personalMin,\n maxCapBids: new uint[](0),\n personalMinBids: new uint[](0),\n creator: msg.sender\n });\n }\n if (buckets[maxBucketID].creator == address(0x0)) {\n buckets[maxBucketID] = BidBucket({\n valuation: _maxCap,\n maxCapBids: new uint[](0),\n personalMinBids: new uint[](0),\n creator: msg.sender\n });\n }\n\n BidBucket storage bucket = buckets[maxBucketID];\n ++lastBidID;\n\n\t\t// Create the bid and mark it inactive if the valuation is not within\n\t\t// its bounds.\n bids[lastBidID] = Bid({\n maxValuation: _maxCap,\n personalMin: _personalMin,\n contrib: msg.value,\n bonus: bonus(),\n contributor: msg.sender,\n withdrawn: false,\n redeemed: false,\n\t\t\tminBucketID: minBucketID,\n\t\t\tmaxBucketID: maxBucketID,\n\t\t\tactive: (sumAcceptedContrib+msg.value > _maxCap || sumAcceptedContrib+msg.value < _personalMin) ? false: true\n });\n\n\t\tBid storage bid = bids[lastBidID];\n\t\t\n\t\t// Update the contribution amount with the bonus\n\t\tsumAcceptedContrib += bid.contrib;\n\t\tsumAcceptedVirtualContrib += bid.contrib + (bid.contrib * bid.bonus) / BONUS_DIVISOR;\n\n\t\t// Place the bids in the two buckets\n buckets[maxBucketID].maxCapBids.push(lastBidID);\n buckets[minBucketID].personalMinBids.push(lastBidID); \n contributorBidIDs[msg.sender].push(lastBidID);\n emit BidSubmitted(msg.sender, lastBidID, now); \n }\n\t\n\n /** @dev Withdraw a bid. Can only be called before the end of the withdrawal lock period.\n * Withdrawing a bid reduces its bonus by 1/3.\n * For retrieving ETH after an automatic withdrawal, use the redeem function.\n * @param _bidID The ID of the bid to withdraw.\n */\n function withdraw(uint _bidID) public {\n Bid storage bid = bids[_bidID];\n require(msg.sender == bid.contributor);\n require(now < withdrawalLockTime);\n require(!bid.withdrawn);\n\n bid.withdrawn = true;\n\t\tbid.active = false;\n // Before endFullBonusTime, everything is refunded. Otherwise, an amount decreasing linearly from endFullBonusTime to withdrawalLockTime is refunded.\n uint refund = (now < endFullBonusTime) ? bid.contrib : (bid.contrib * (withdrawalLockTime - now)) / (withdrawalLockTime - endFullBonusTime);\n assert(refund <= bid.contrib); // Make sure that we don't refund more than the contribution. Would a bug arise, we prefer blocking withdrawal than letting someone steal money.\n bid.contrib -= refund;\n bid.bonus = (bid.bonus * 2) / 3; // Reduce the bonus by 1/3.\n\n\t\t/* Only subtract the refund. */\n\t\tsumAcceptedContrib -= refund;\n\t\tsumAcceptedVirtualContrib -= (bid.bonus * (bid.contrib + 3*refund)) / (2 * BONUS_DIVISOR) + refund;\n\n msg.sender.transfer(refund);\n }\n\n\n /** @dev Finalize by finding the cut-off bid.\n * Since the amount of bids is not bounded, this function may have to be called multiple times.\n * The function is O(min(n,_maxIt)) where n is the amount of bids. In total it will perform O(n) computations, possibly in multiple calls.\n * Each call only has a O(1) storage write operations.\n */\n// function finalize(uint _maxIt) public {\n// require(now >= endTime);\n// require(!finalized);\n//\n// // Make local copies of the finalization variables in order to avoid modifying storage in order to save gas.\n// uint localCutOffBidID = cutOffBidID;\n// uint localSumAcceptedContrib = sumAcceptedContrib;\n// uint localSumAcceptedVirtualContrib = sumAcceptedVirtualContrib;\n//\n// // Search for the cut-off bid while adding the contributions.\n// for (uint it = 0; it < _maxIt && !finalized; ++it) {\n// Bid storage bid = bids[localCutOffBidID];\n// if (bid.contrib+localSumAcceptedContrib < bid.maxValuation) { // We haven't found the cut-off yet.\n// localSumAcceptedContrib += bid.contrib;\n// localSumAcceptedVirtualContrib += bid.contrib + (bid.contrib * bid.bonus) / BONUS_DIVISOR;\n// localCutOffBidID = bid.prev; // Go to the previous bid.\n// } else { // We found the cut-off. This bid will be taken partially.\n// finalized = true;\n// uint contribCutOff = bid.maxValuation >= localSumAcceptedContrib ? bid.maxValuation - localSumAcceptedContrib : 0; // The amount of the contribution of the cut-off bid that can stay in the sale without spilling over the maxValuation.\n// contribCutOff = contribCutOff < bid.contrib ? contribCutOff : bid.contrib; // The amount that stays in the sale should not be more than the original contribution. This line is not required but it is added as an extra security measure.\n// bid.contributor.send(bid.contrib-contribCutOff); // Send the non-accepted part. Use send in order to not block if the contributor's fallback reverts.\n// bid.contrib = contribCutOff; // Update the contribution value.\n// localSumAcceptedContrib += bid.contrib;\n// localSumAcceptedVirtualContrib += bid.contrib + (bid.contrib * bid.bonus) / BONUS_DIVISOR;\n// beneficiary.send(localSumAcceptedContrib); // Use send in order to not block if the beneficiary's fallback reverts.\n// }\n// }\n//\n// // Update storage.\n// cutOffBidID = localCutOffBidID;\n// sumAcceptedContrib = localSumAcceptedContrib;\n// sumAcceptedVirtualContrib = localSumAcceptedVirtualContrib;\n// }\n\n\tfunction finalize() public {\n\t\trequire(now >= endTime);\n\t\trequire(!finalized);\n\n\t\tfinalized = true;\n\t\tbeneficiary.send(sumAcceptedContrib);\n\t}\n /** @dev Redeem a bid. If the bid is accepted, send the tokens, otherwise refund the ETH.\n * Note that anyone can call this function, not only the party which made the bid.\n * @param _bidID ID of the bid to withdraw.\n */\n function redeem(uint _bidID) public {\n Bid storage bid = bids[_bidID];\n Bid storage cutOffBid = bids[cutOffBidID];\n require(finalized);\n require(!bid.redeemed);\n\n bid.redeemed=true;\n if (bid.maxValuation > cutOffBid.maxValuation || (bid.maxValuation == cutOffBid.maxValuation && _bidID >= cutOffBidID)) // Give tokens if the bid is accepted.\n require(token.transfer(bid.contributor, (tokensForSale * (bid.contrib + (bid.contrib * bid.bonus) / BONUS_DIVISOR)) / sumAcceptedVirtualContrib));\n else // Reimburse ETH otherwise.\n bid.contributor.transfer(bid.contrib);\n }\n\n /** @dev Fallback. Make a bid if ETH are sent. Redeem all the bids of the contributor otherwise.\n * Note that the contributor could make this function go out of gas if it has too much bids. This in not a problem as it is still possible to redeem using the redeem function directly.\n * This allows users to bid and get their tokens back using only send operations.\n */\n function () public payable {\n if (msg.value != 0 && now >= startTime && now < endTime) // Make a bid with an infinite maxValuation if some ETH was sent.\n submitBid(INFINITY, TAIL);\n else if (msg.value == 0 && finalized) // Else, redeem all the non redeemed bids if no ETH was sent.\n for (uint i = 0; i < contributorBidIDs[msg.sender].length; ++i)\n {\n if (!bids[contributorBidIDs[msg.sender][i]].redeemed)\n redeem(contributorBidIDs[msg.sender][i]);\n }\n else // Otherwise, no actions are possible.\n revert();\n }\n\n\t/** @dev Poke a bid. Checks if the bid should be make active or inactive.\n\t * @param _bids ID of the bid to poke.\n */\n\tfunction poke(uint[] _bids) public {\n\t\tuint localSumContrib = sumAcceptedContrib;\n\t\tuint localVSumContrib = sumAcceptedVirtualContrib;\n\t\tuint256 i = 0;\n\t\tBid storage bid = bids[0];\n\n\t\tfor (i = 0; i < _bids.length; i++) {\n\t\t\tbid = bids[_bids[i]];\t\t\t\t\t\t\n\t\t\tif (bid.active) {\n\t\t\t\tlocalSumContrib -= bid.contrib;\n\t\t\t} else {\n\t\t\t\tlocalSumContrib += bid.contrib;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < _bids.length; i++) {\n\t\t\tbid = bids[_bids[i]];\n\t\t\tif (bid.active) {\n\t\t\t\trequire(localSumContrib > bid.maxValuation || localSumContrib < bid.personalMin);\n\t\t\t} else {\n\t\t\t\trequire(localSumContrib <= bid.maxValuation && localSumContrib >= bid.personalMin);\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0; i < _bids.length; i++) {\n\t\t\tbid = bids[_bids[i]];\n\t\t\tbid.active = !bid.active;\n\t\t}\n\n\t\tsumAcceptedContrib = localSumContrib;\n\t}\n\n /* *** View Functions *** */\n\n /** @dev Return the current bonus. The bonus only changes in 1/BONUS_DIVISOR increments.\n * @return b The bonus expressed in 1/BONUS_DIVISOR. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n */\n function bonus() public view returns(uint b) {\n if (now < endFullBonusTime) // Full bonus.\n return maxBonus;\n else if (now > endTime) // Assume no bonus after end.\n return 0;\n else // Compute the bonus decreasing linearly from endFullBonusTime to endTime.\n return (maxBonus * (endTime - now)) / (endTime - endFullBonusTime);\n }\n\n /** @dev Get the total contribution of an address.\n * This can be used for a KYC threshold.\n * This function is O(n) where n is the amount of bids made by the contributor.\n * This means that the contributor can make totalContrib(contributor) revert due to an out of gas error on purpose.\n * @param _contributor The contributor whose contribution will be returned.\n * @return contribution The total contribution of the contributor.\n */\n function totalContrib(address _contributor) public view returns (uint contribution) {\n for (uint i = 0; i < contributorBidIDs[_contributor].length; ++i)\n contribution += bids[contributorBidIDs[_contributor][i]].contrib;\n }\n\n\n\t/** @dev Get the array of personal min bids from a bucket.\n\t *\tThis can be used for getting data for visualization.\n * @param _bucketid The ID of the bucket to get the list from.\n\t * @return minBids The array of personal min bids in the bucket.\n\t */\n\tfunction bucketMinBids(uint _bucketid) public view returns (uint[] memory minBids) {\n\t\tBidBucket storage bucket = buckets[_bucketid];\n\t\tif (bucket.creator == address(0x0)) {\n\t\t\treturn minBids;\n\t\t}\n\n\t\tminBids = new uint[](bucket.personalMinBids.length);\n\t\tuint i = 0;\n\n\t\tfor (i = 0; i < bucket.personalMinBids.length; i++) {\n\t\t\tminBids[i] = bucket.personalMinBids[i];\n\t\t}\n\n\t\treturn minBids;\n\t}\t\n\n\n\t/** @dev Get the array of maximum cap bids from a bucket.\n\t *\tThis can be used for getting data for visualization.\n * @param _bucketid The ID of the bucket to get the list from.\n\t * @return maxBids The array of maximum cap bids in the bucket.\n\t */\n\tfunction bucketMaxBids(uint _bucketid) public view returns (uint[] memory maxBids) {\n\t\tBidBucket storage bucket = buckets[_bucketid];\n\t\tif (bucket.creator == address(0x0)) {\n\t\t\treturn maxBids;\n\t\t}\n\n\t\tmaxBids = new uint[](bucket.maxCapBids.length);\n\t\tuint i = 0;\n\n\t\tfor (i = 0; i < bucket.maxCapBids.length; i++) {\n\t\t\tmaxBids[i] = bucket.maxCapBids[i];\n\t\t}\n\n\t\treturn maxBids;\n\t}\t\n\n}\n", - "sourcePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/IICO.sol", - "ast": { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/IICO.sol", - "exportedSymbols": { - "IICO": [ - 1151 - ] - }, - "id": 1152, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "^", - "0.4", - ".23" - ], - "nodeType": "PragmaDirective", - "src": "252:24:0" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 1152, - "sourceUnit": 1959, - "src": "278:63:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": "@title Interactive Coin Offering\n This contract implements the Interactive Coin Offering token sale as described in this paper:\n https://people.cs.uchicago.edu/~teutsch/papers/ico.pdf\n Implementation details and modifications compared to the paper:\n -A fixed amount of tokens is sold. This allows more flexibility for the distribution of the remaining tokens (rounds, team tokens which can be preallocated, non-initial sell of some cryptographic assets).\n -The valuation pointer is only moved when the sale is over. This greatly reduces the amount of write operations and code complexity. However, at least one party must make one or multiple calls to finalize the sale.\n -Buckets are not used as they are not required and increase code complexity.\n -The bid submitter must provide the insertion spot. A search of the insertion spot is still done in the contract just in case the one provided was wrong or other bids were added between when the TX got signed and executed, but giving the search starting point greatly lowers gas consumption.\n -Automatic withdrawals are only possible at the end of the sale. This decreases code complexity and possible interactions between different parts of the code.\n -We put a full bonus, free withdrawal period at the beginning. This allows everyone to have a chance to place bids with full bonus and avoids clogging the network just after the sale starts. Note that at this moment, no information can be taken for granted as parties can withdraw freely.\n -Calling the fallback function while sending ETH places a bid with an infinite maximum valuation. This allows buyers who want to buy no matter the price not need to use a specific interface and just send ETH. Without ETH, a call to the fallback function redeems the bids of the caller.", - "fullyImplemented": true, - "id": 1151, - "linearizedBaseContracts": [ - 1151 - ], - "name": "IICO", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 4, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2207:20:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2207:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 6, - "name": "beneficiary", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2275:26:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2275:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": true, - "id": 9, - "name": "HEAD", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2371:22:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2371:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "30", - "id": 8, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2392:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 15, - "name": "TAIL", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2500:29:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2500:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 13, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "2526:2:0", - "subExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2527:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_-1_by_1", - "typeString": "int_const -1" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_-1_by_1", - "typeString": "int_const -1" - } - ], - "id": 11, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2521:4:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 14, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2521:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 21, - "name": "INFINITY", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2629:33:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2629:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 19, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "2659:2:0", - "subExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 18, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2660:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_-2_by_1", - "typeString": "int_const -2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_-2_by_1", - "typeString": "int_const -2" - } - ], - "id": 17, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2654:4:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 20, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2654:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "canonicalName": "IICO.Bid", - "id": 42, - "members": [ - { - "constant": false, - "id": 23, - "name": "maxValuation", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3228:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 22, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3228:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 25, - "name": "personalMin", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3331:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 24, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3331:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 27, - "name": "contrib", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3357:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 26, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3357:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 29, - "name": "bonus", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3411:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 28, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3411:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31, - "name": "contributor", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3510:19:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 30, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3510:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 33, - "name": "withdrawn", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3579:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 32, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3579:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 35, - "name": "redeemed", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3648:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 34, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3648:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 37, - "name": "active", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3721:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 36, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3721:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 39, - "name": "minBucketID", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3798:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 38, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3798:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 41, - "name": "maxBucketID", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3818:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 40, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3818:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Bid", - "nodeType": "StructDefinition", - "scope": 1151, - "src": "3165:677:0", - "visibility": "public" - }, - { - "canonicalName": "IICO.BidBucket", - "id": 53, - "members": [ - { - "constant": false, - "id": 44, - "name": "valuation", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "3875:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 43, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3875:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 46, - "name": "creator", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "3968:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 45, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3968:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 49, - "name": "maxCapBids", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "4058:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 47, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4058:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 48, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4058:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 52, - "name": "personalMinBids", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "4085:22:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 50, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4085:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 51, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4085:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "BidBucket", - "nodeType": "StructDefinition", - "scope": 1151, - "src": "3848:266:0", - "visibility": "public" - }, - { - "constant": false, - "id": 57, - "name": "bids", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4120:33:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid)" - }, - "typeName": { - "id": 56, - "keyType": { - "id": 54, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4129:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Mapping", - "src": "4120:21:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid)" - }, - "valueType": { - "contractScope": null, - "id": 55, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "4137:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 61, - "name": "buckets", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4180:42:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket)" - }, - "typeName": { - "id": 60, - "keyType": { - "id": 58, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4189:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Mapping", - "src": "4180:27:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket)" - }, - "valueType": { - "contractScope": null, - "id": 59, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "4197:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 66, - "name": "contributorBidIDs", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4255:52:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[])" - }, - "typeName": { - "id": 65, - "keyType": { - "id": 62, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4264:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "4255:27:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[])" - }, - "valueType": { - "baseType": { - "id": 63, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4275:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 64, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4275:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 69, - "name": "lastBidID", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4357:25:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 67, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4357:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "30", - "id": 68, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4381:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 71, - "name": "startTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4462:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 70, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4462:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 73, - "name": "endFullBonusTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4535:28:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 72, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4535:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 75, - "name": "withdrawalLockTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4619:30:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 74, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4619:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 77, - "name": "endTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4736:19:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 76, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4736:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 79, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4807:18:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - }, - "typeName": { - "contractScope": null, - "id": 78, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1958, - "src": "4807:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 81, - "name": "tokensForSale", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4883:25:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 80, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4883:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 83, - "name": "maxBonus", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4975:20:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 82, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4975:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 85, - "name": "minValuation", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5150:24:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 84, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5150:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 87, - "name": "maxValuation", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5180:24:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 86, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5180:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 89, - "name": "increment", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5210:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 88, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5210:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 91, - "name": "numBuckets", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5237:22:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 90, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5237:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": true, - "id": 94, - "name": "BONUS_DIVISOR", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5265:33:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 92, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5265:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "314539", - "id": 93, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5295:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000000_by_1", - "typeString": "int_const 1000000000" - }, - "value": "1E9" - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 96, - "name": "finalized", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5416:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 95, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5416:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 99, - "name": "cutOffBidID", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5566:30:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 97, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5566:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "id": 98, - "name": "TAIL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15, - "src": "5592:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "id": 101, - "name": "sumAcceptedContrib", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5668:30:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 100, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5668:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 103, - "name": "sumAcceptedVirtualContrib", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5749:37:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 102, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5749:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "anonymous": false, - "documentation": null, - "id": 111, - "name": "BidSubmitted", - "nodeType": "EventDefinition", - "parameters": { - "id": 110, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 105, - "indexed": true, - "name": "contributor", - "nodeType": "VariableDeclaration", - "scope": 111, - "src": "5904:27:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 104, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5904:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 107, - "indexed": true, - "name": "bidID", - "nodeType": "VariableDeclaration", - "scope": 111, - "src": "5933:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 106, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5933:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 109, - "indexed": true, - "name": "time", - "nodeType": "VariableDeclaration", - "scope": 111, - "src": "5953:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 108, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5953:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5903:68:0" - }, - "src": "5885:87:0" - }, - { - "anonymous": false, - "documentation": null, - "id": 117, - "name": "Poked", - "nodeType": "EventDefinition", - "parameters": { - "id": 116, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 113, - "indexed": true, - "name": "poker", - "nodeType": "VariableDeclaration", - "scope": 117, - "src": "5986:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 112, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5986:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 115, - "indexed": true, - "name": "bidID", - "nodeType": "VariableDeclaration", - "scope": 117, - "src": "6009:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 114, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6009:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5985:43:0" - }, - "src": "5974:55:0" - }, - { - "body": { - "id": 127, - "nodeType": "Block", - "src": "6081:36:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 120, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4, - "src": "6091:5:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 121, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6100:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6100:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6091:19:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 119, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6083:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6083:28:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 125, - "nodeType": "ExpressionStatement", - "src": "6083:28:0" - }, - { - "id": 126, - "nodeType": "PlaceholderStatement", - "src": "6113:1:0" - } - ] - }, - "documentation": null, - "id": 128, - "name": "onlyOwner", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 118, - "nodeType": "ParameterList", - "parameters": [], - "src": "6081:0:0" - }, - "src": "6063:54:0", - "visibility": "internal" - }, - { - "body": { - "id": 252, - "nodeType": "Block", - "src": "7179:974:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 149, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4, - "src": "7189:5:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 150, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "7197:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 151, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7197:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7189:18:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 153, - "nodeType": "ExpressionStatement", - "src": "7189:18:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 154, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "7217:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 155, - "name": "_startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 130, - "src": "7229:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7217:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 157, - "nodeType": "ExpressionStatement", - "src": "7217:22:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 158, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "7249:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 159, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "7268:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 160, - "name": "_fullBonusLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 132, - "src": "7280:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7268:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7249:47:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 163, - "nodeType": "ExpressionStatement", - "src": "7249:47:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 164, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "7306:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 165, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "7327:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 166, - "name": "_partialWithdrawalLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "7346:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7327:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7306:64:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 169, - "nodeType": "ExpressionStatement", - "src": "7306:64:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 170, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7380:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 171, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "7390:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 172, - "name": "_withdrawalLockUpLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 136, - "src": "7411:23:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7390:44:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7380:54:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 175, - "nodeType": "ExpressionStatement", - "src": "7380:54:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 178, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 176, - "name": "maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 83, - "src": "7444:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 177, - "name": "_maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 138, - "src": "7455:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7444:20:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 179, - "nodeType": "ExpressionStatement", - "src": "7444:20:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 180, - "name": "beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6, - "src": "7474:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 181, - "name": "_beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 140, - "src": "7488:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7474:26:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 183, - "nodeType": "ExpressionStatement", - "src": "7474:26:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 184, - "name": "maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 87, - "src": "7510:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 185, - "name": "_maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 144, - "src": "7525:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7510:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 187, - "nodeType": "ExpressionStatement", - "src": "7510:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 188, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7548:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 189, - "name": "_minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 142, - "src": "7563:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7548:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 191, - "nodeType": "ExpressionStatement", - "src": "7548:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 192, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "7586:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 193, - "name": "_increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 146, - "src": "7598:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7586:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 195, - "nodeType": "ExpressionStatement", - "src": "7586:22:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 196, - "name": "numBuckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 91, - "src": "7618:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 205, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 197, - "name": "maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 87, - "src": "7633:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 198, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7648:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7633:27:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 200, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7632:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 201, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "7664:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7632:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 203, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7631:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 204, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7677:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7631:47:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7618:60:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 207, - "nodeType": "ExpressionStatement", - "src": "7618:60:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 208, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "7744:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 210, - "indexExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 209, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7752:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7744:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 212, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7792:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 216, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7841:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 215, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "7830:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 213, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7834:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 214, - "length": null, - "nodeType": "ArrayTypeName", - "src": "7834:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 217, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7830:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 221, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7885:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 220, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "7874:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 218, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7878:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 219, - "length": null, - "nodeType": "ArrayTypeName", - "src": "7878:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 222, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7874:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 223, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "7910:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7910:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 211, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "7757:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "7757:174:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "7744:187:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 227, - "nodeType": "ExpressionStatement", - "src": "7744:187:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 250, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 228, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "7942:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 234, - "indexExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 230, - "name": "numBuckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 91, - "src": "7955:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 231, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7966:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7955:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 229, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7950:4:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7950:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7942:27:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 236, - "name": "maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 87, - "src": "8007:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 240, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8056:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 239, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "8045:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 237, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8049:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 238, - "length": null, - "nodeType": "ArrayTypeName", - "src": "8049:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 241, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8045:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 245, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8100:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 244, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "8089:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 242, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8093:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 243, - "length": null, - "nodeType": "ArrayTypeName", - "src": "8093:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 246, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8089:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 247, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "8125:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "8125:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 235, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "7972:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "7972:174:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "7942:204:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 251, - "nodeType": "ExpressionStatement", - "src": "7942:204:0" - } - ] - }, - "documentation": "@dev Constructor. First contract set up (tokens will also need to be transferred to the contract and then setToken needs to be called to finish the setup).\n @param _startTime Time the sale will start in seconds since the Unix Epoch.\n @param _fullBonusLength Amount of seconds the sale lasts in the full bonus period.\n @param _partialWithdrawalLength Amount of seconds the sale lasts in the partial withdrawal period.\n @param _withdrawalLockUpLength Amount of seconds the sale lasts in the withdrawal lockup period.\n @param _maxBonus The maximum bonus. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n @param _beneficiary The party which will get the funds of the token sale.", - "id": 253, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "IICO", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 147, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 130, - "name": "_startTime", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "6976:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 129, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6976:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 132, - "name": "_fullBonusLength", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "6993:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 131, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6993:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 134, - "name": "_partialWithdrawalLength", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7016:29:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 133, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7016:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 136, - "name": "_withdrawalLockUpLength", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7047:28:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 135, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7047:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 138, - "name": "_maxBonus", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7077:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 137, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7077:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 140, - "name": "_beneficiary", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7093:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 139, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7093:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 142, - "name": "_minValuation", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7115:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 141, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7115:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 144, - "name": "_maxValuation", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7135:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 143, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7135:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 146, - "name": "_increment", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7155:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 145, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7155:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6975:196:0" - }, - "payable": false, - "returnParameters": { - "id": 148, - "nodeType": "ParameterList", - "parameters": [], - "src": "7179:0:0" - }, - "scope": 1151, - "src": "6962:1191:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 281, - "nodeType": "Block", - "src": "8364:169:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 262, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "8390:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - ], - "id": 261, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8382:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8382:14:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 265, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8408:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 264, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8400:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 266, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8400:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8382:28:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 260, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "8374:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 268, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8374:37:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 269, - "nodeType": "ExpressionStatement", - "src": "8374:37:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 270, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "8465:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 271, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 255, - "src": "8473:6:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "src": "8465:14:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "id": 273, - "nodeType": "ExpressionStatement", - "src": "8465:14:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 274, - "name": "tokensForSale", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "8489:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 277, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2061, - "src": "8521:4:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IICO_$1151", - "typeString": "contract IICO" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IICO_$1151", - "typeString": "contract IICO" - } - ], - "expression": { - "argumentTypes": null, - "id": 275, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "8505:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "id": 276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 1555, - "src": "8505:15:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8505:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8489:37:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 280, - "nodeType": "ExpressionStatement", - "src": "8489:37:0" - } - ] - }, - "documentation": "@dev Set the token. Must only be called after the IICO contract receives the tokens to be sold.\n @param _token The token to be sold.", - "id": 282, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 258, - "modifierName": { - "argumentTypes": null, - "id": 257, - "name": "onlyOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "8354:9:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "8354:9:0" - } - ], - "name": "setToken", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 255, - "name": "_token", - "nodeType": "VariableDeclaration", - "scope": 282, - "src": "8333:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - }, - "typeName": { - "contractScope": null, - "id": 254, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1958, - "src": "8333:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "8332:14:0" - }, - "payable": false, - "returnParameters": { - "id": 259, - "nodeType": "ParameterList", - "parameters": [], - "src": "8364:0:0" - }, - "scope": 1151, - "src": "8315:218:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 510, - "nodeType": "Block", - "src": "9027:2201:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 290, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "9116:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 291, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "9123:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9116:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 293, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "9136:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 294, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "9142:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9136:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9116:33:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 289, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9108:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9108:42:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 298, - "nodeType": "ExpressionStatement", - "src": "9108:42:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 302, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 300, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9207:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 301, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9218:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9207:23:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 305, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 303, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9234:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "id": 304, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9244:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9234:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9207:49:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 299, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9199:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9199:58:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 308, - "nodeType": "ExpressionStatement", - "src": "9199:58:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 310, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9277:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 311, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9287:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9277:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 313, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9276:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 314, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9303:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9276:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 316, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9316:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9276:41:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 309, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9267:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 318, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9267:51:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 319, - "nodeType": "ExpressionStatement", - "src": "9267:51:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 326, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 321, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9338:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 322, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9353:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9338:27:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 324, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9337:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 325, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9369:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9337:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 327, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9382:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9337:46:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 320, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9328:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 329, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9328:56:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 330, - "nodeType": "ExpressionStatement", - "src": "9328:56:0" - }, - { - "assignments": [ - 332 - ], - "declarations": [ - { - "constant": false, - "id": 332, - "name": "minBucketID", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "9395:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 331, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9395:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 339, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 333, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9415:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 334, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9430:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9415:27:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 336, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9414:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 337, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9446:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9414:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9395:60:0" - }, - { - "assignments": [ - 341 - ], - "declarations": [ - { - "constant": false, - "id": 341, - "name": "maxBucketID", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "9465:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 340, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9465:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 348, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 342, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9485:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 343, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9495:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9485:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 345, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9484:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 346, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9511:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9484:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9465:55:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 349, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9536:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 351, - "indexExpression": { - "argumentTypes": null, - "id": 350, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "9544:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9536:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 352, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "9536:28:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 354, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9576:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 353, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9568:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 355, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9568:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9536:44:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 378, - "nodeType": "IfStatement", - "src": "9532:292:0", - "trueBody": { - "id": 377, - "nodeType": "Block", - "src": "9582:242:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 375, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 357, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9596:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 359, - "indexExpression": { - "argumentTypes": null, - "id": 358, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "9604:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9596:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 361, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9658:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 365, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9711:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 364, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "9700:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 362, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9704:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 363, - "length": null, - "nodeType": "ArrayTypeName", - "src": "9704:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 366, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9700:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 370, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9759:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 369, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "9748:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 367, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9752:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 368, - "length": null, - "nodeType": "ArrayTypeName", - "src": "9752:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 371, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9748:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 372, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "9788:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "9788:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 360, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "9619:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "9619:194:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "9596:217:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 376, - "nodeType": "ExpressionStatement", - "src": "9596:217:0" - } - ] - } - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 379, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9837:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 381, - "indexExpression": { - "argumentTypes": null, - "id": 380, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "9845:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9837:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 382, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "9837:28:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9877:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 383, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9869:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9869:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9837:44:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 408, - "nodeType": "IfStatement", - "src": "9833:287:0", - "trueBody": { - "id": 407, - "nodeType": "Block", - "src": "9883:237:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 387, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9897:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 389, - "indexExpression": { - "argumentTypes": null, - "id": 388, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "9905:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9897:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 391, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9959:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10007:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 394, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "9996:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 392, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "10000:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 393, - "length": null, - "nodeType": "ArrayTypeName", - "src": "10000:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 396, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9996:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10055:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 399, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "10044:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 397, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "10048:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 398, - "length": null, - "nodeType": "ArrayTypeName", - "src": "10048:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 401, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10044:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 402, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10084:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10084:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 390, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "9920:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "9920:189:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "9897:212:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 406, - "nodeType": "ExpressionStatement", - "src": "9897:212:0" - } - ] - } - }, - { - "assignments": [ - 410 - ], - "declarations": [ - { - "constant": false, - "id": 410, - "name": "bucket", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "10130:24:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - }, - "typeName": { - "contractScope": null, - "id": 409, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "10130:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 414, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 411, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "10157:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 413, - "indexExpression": { - "argumentTypes": null, - "id": 412, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "10165:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10157:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10130:47:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "10187:11:0", - "subExpression": { - "argumentTypes": null, - "id": 415, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "10189:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 417, - "nodeType": "ExpressionStatement", - "src": "10187:11:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 418, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "10298:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 420, - "indexExpression": { - "argumentTypes": null, - "id": 419, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "10303:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "10298:15:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 422, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "10348:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 423, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "10382:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 424, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10417:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10417:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 426, - "name": "bonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 989, - "src": "10447:5:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10447:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 428, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10481:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10481:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 430, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10516:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10545:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "argumentTypes": null, - "id": 432, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "10568:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 433, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "10597:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 439, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 434, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "10622:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 435, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10641:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10641:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10622:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "id": 438, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "10653:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10622:38:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 440, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "10664:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 441, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10683:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10683:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10664:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 444, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "10695:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10664:43:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "10622:85:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 447, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10621:87:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10718:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "id": 450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "10621:101:0", - "trueExpression": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 448, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10711:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 421, - "name": "Bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "10316:3:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Bid_$42_storage_ptr_$", - "typeString": "type(struct IICO.Bid storage pointer)" - } - }, - "id": 451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "maxValuation", - "personalMin", - "contrib", - "bonus", - "contributor", - "withdrawn", - "redeemed", - "minBucketID", - "maxBucketID", - "active" - ], - "nodeType": "FunctionCall", - "src": "10316:417:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_memory", - "typeString": "struct IICO.Bid memory" - } - }, - "src": "10298:435:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "id": 453, - "nodeType": "ExpressionStatement", - "src": "10298:435:0" - }, - { - "assignments": [ - 455 - ], - "declarations": [ - { - "constant": false, - "id": 455, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "10738:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 454, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "10738:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 459, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 456, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "10756:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 458, - "indexExpression": { - "argumentTypes": null, - "id": 457, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "10761:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10756:15:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10738:33:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 460, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "10829:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 461, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10851:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 462, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "10851:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10829:33:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 464, - "nodeType": "ExpressionStatement", - "src": "10829:33:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 465, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "10866:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 466, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10895:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 467, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "10895:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 475, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 468, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10910:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 469, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "10910:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 470, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10924:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 471, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "10924:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10910:23:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 473, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10909:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 474, - "name": "BONUS_DIVISOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 94, - "src": "10937:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10909:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10895:55:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10866:84:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 478, - "nodeType": "ExpressionStatement", - "src": "10866:84:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 484, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11037:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 479, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "11000:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 481, - "indexExpression": { - "argumentTypes": null, - "id": 480, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "11008:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11000:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 482, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "11000:31:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11000:36:0", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) returns (uint256)" - } - }, - "id": 485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11000:47:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 486, - "nodeType": "ExpressionStatement", - "src": "11000:47:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 492, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11099:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 487, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "11057:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 489, - "indexExpression": { - "argumentTypes": null, - "id": 488, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "11065:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11057:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 490, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "11057:36:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11057:41:0", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) returns (uint256)" - } - }, - "id": 493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11057:52:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 494, - "nodeType": "ExpressionStatement", - "src": "11057:52:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 500, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11155:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 495, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "11120:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 498, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 496, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "11138:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11138:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11120:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11120:34:0", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) returns (uint256)" - } - }, - "id": 501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11120:45:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 502, - "nodeType": "ExpressionStatement", - "src": "11120:45:0" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 504, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "11193:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11193:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 506, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11205:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 507, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "11216:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 503, - "name": "BidSubmitted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 111, - "src": "11180:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11180:40:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 509, - "nodeType": "EmitStatement", - "src": "11175:45:0" - } - ] - }, - "documentation": "@dev Submit a bid. The caller must give the exact position the bid must be inserted into in the list.\n In practice, use searchAndBid to avoid the position being incorrect due to a new bid being inserted and changing the position the bid must be inserted at.\n @param _maxCap The maximum cap accepted by this bid.\n @param _personalMin The minimum sale value for the bid to be included.", - "id": 511, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "submitBid", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 287, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 284, - "name": "_maxCap", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "8979:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 283, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8979:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 286, - "name": "_personalMin", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "8993:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 285, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8993:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "8978:33:0" - }, - "payable": true, - "returnParameters": { - "id": 288, - "nodeType": "ParameterList", - "parameters": [], - "src": "9027:0:0" - }, - "scope": 1151, - "src": "8960:2268:0", - "stateMutability": "payable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 635, - "nodeType": "Block", - "src": "11564:1022:0", - "statements": [ - { - "assignments": [ - 517 - ], - "declarations": [ - { - "constant": false, - "id": 517, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11574:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 516, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "11574:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 521, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 518, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "11592:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 520, - "indexExpression": { - "argumentTypes": null, - "id": 519, - "name": "_bidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 513, - "src": "11597:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11592:12:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11574:30:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 527, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 523, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "11622:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11622:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 525, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11636:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 526, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributor", - "nodeType": "MemberAccess", - "referencedDeclaration": 31, - "src": "11636:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "11622:29:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 522, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "11614:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11614:38:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 529, - "nodeType": "ExpressionStatement", - "src": "11614:38:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 531, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "11670:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 532, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "11676:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11670:24:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 530, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "11662:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 534, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11662:33:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 535, - "nodeType": "ExpressionStatement", - "src": "11662:33:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "11713:14:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 537, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11714:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 538, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "withdrawn", - "nodeType": "MemberAccess", - "referencedDeclaration": 33, - "src": "11714:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 536, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "11705:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11705:23:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 541, - "nodeType": "ExpressionStatement", - "src": "11705:23:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 546, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 542, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11739:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 544, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "withdrawn", - "nodeType": "MemberAccess", - "referencedDeclaration": 33, - "src": "11739:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 545, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11755:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "11739:20:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 547, - "nodeType": "ExpressionStatement", - "src": "11739:20:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 548, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11763:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 550, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "11763:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 551, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11776:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "11763:18:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 553, - "nodeType": "ExpressionStatement", - "src": "11763:18:0" - }, - { - "assignments": [ - 555 - ], - "declarations": [ - { - "constant": false, - "id": 555, - "name": "refund", - "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11949:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 554, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "11949:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 576, - "initialValue": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 556, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "11964:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 557, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "11970:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11964:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 559, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "11963:24:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 574, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 562, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12005:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 563, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12005:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 566, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 564, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "12020:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 565, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "12041:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12020:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 567, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12019:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12005:40:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 569, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12004:42:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 570, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "12050:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 571, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "12071:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12050:37:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 573, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12049:39:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12004:84:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 575, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "11963:125:0", - "trueExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 560, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11990:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 561, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "11990:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11949:139:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 578, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12105:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 579, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12115:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 580, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12115:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12105:21:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 577, - "name": "assert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2031, - "src": "12098:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12098:29:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 583, - "nodeType": "ExpressionStatement", - "src": "12098:29:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 584, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12282:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 586, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12282:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 587, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12297:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12282:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 589, - "nodeType": "ExpressionStatement", - "src": "12282:21:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 590, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12313:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 592, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "12313:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 593, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12326:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 594, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "12326:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 595, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12338:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "12326:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 597, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12325:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 598, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12343:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "12325:19:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12313:31:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 601, - "nodeType": "ExpressionStatement", - "src": "12313:31:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 602, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "12411:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 603, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12433:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12411:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 605, - "nodeType": "ExpressionStatement", - "src": "12411:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 625, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 606, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "12443:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 624, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 607, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12473:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 608, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "12473:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 609, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12486:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 610, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12486:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 611, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12500:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 612, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12502:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12500:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12486:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 615, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12485:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12473:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 617, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12472:38:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 620, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12514:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 619, - "name": "BONUS_DIVISOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 94, - "src": "12518:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12514:17:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 621, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12513:19:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12472:60:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 623, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12535:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12472:69:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12443:98:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 626, - "nodeType": "ExpressionStatement", - "src": "12443:98:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 632, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12572:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 627, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "12552:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "12552:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "12552:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12552:27:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 634, - "nodeType": "ExpressionStatement", - "src": "12552:27:0" - } - ] - }, - "documentation": "@dev Withdraw a bid. Can only be called before the end of the withdrawal lock period.\n Withdrawing a bid reduces its bonus by 1/3.\n For retrieving ETH after an automatic withdrawal, use the redeem function.\n @param _bidID The ID of the bid to withdraw.", - "id": 636, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "withdraw", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 514, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 513, - "name": "_bidID", - "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11544:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 512, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "11544:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "11543:13:0" - }, - "payable": false, - "returnParameters": { - "id": 515, - "nodeType": "ParameterList", - "parameters": [], - "src": "11564:0:0" - }, - "scope": 1151, - "src": "11526:1060:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 660, - "nodeType": "Block", - "src": "15362:115:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 640, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "15374:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 641, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "15381:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15374:14:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 639, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15366:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15366:23:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 644, - "nodeType": "ExpressionStatement", - "src": "15366:23:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "15401:10:0", - "subExpression": { - "argumentTypes": null, - "id": 646, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "15402:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 645, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15393:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 648, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15393:19:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 649, - "nodeType": "ExpressionStatement", - "src": "15393:19:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 650, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "15417:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 651, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15429:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "15417:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 653, - "nodeType": "ExpressionStatement", - "src": "15417:16:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 657, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "15454:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 654, - "name": "beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6, - "src": "15437:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 656, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "send", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "15437:16:0", - "typeDescriptions": { - "typeIdentifier": "t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) returns (bool)" - } - }, - "id": 658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15437:36:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 659, - "nodeType": "ExpressionStatement", - "src": "15437:36:0" - } - ] - }, - "documentation": "@dev Finalize by finding the cut-off bid.\n Since the amount of bids is not bounded, this function may have to be called multiple times.\n The function is O(min(n,_maxIt)) where n is the amount of bids. In total it will perform O(n) computations, possibly in multiple calls.\n Each call only has a O(1) storage write operations.", - "id": 661, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "finalize", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 637, - "nodeType": "ParameterList", - "parameters": [], - "src": "15352:2:0" - }, - "payable": false, - "returnParameters": { - "id": 638, - "nodeType": "ParameterList", - "parameters": [], - "src": "15362:0:0" - }, - "scope": 1151, - "src": "15335:142:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 745, - "nodeType": "Block", - "src": "15757:695:0", - "statements": [ - { - "assignments": [ - 667 - ], - "declarations": [ - { - "constant": false, - "id": 667, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 746, - "src": "15767:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 666, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "15767:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 671, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 668, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "15785:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 670, - "indexExpression": { - "argumentTypes": null, - "id": 669, - "name": "_bidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 663, - "src": "15790:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15785:12:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15767:30:0" - }, - { - "assignments": [ - 673 - ], - "declarations": [ - { - "constant": false, - "id": 673, - "name": "cutOffBid", - "nodeType": "VariableDeclaration", - "scope": 746, - "src": "15807:21:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 672, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "15807:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 677, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 674, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "15831:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 676, - "indexExpression": { - "argumentTypes": null, - "id": 675, - "name": "cutOffBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 99, - "src": "15836:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15831:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15807:41:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 679, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "15866:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 678, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15858:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15858:18:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 681, - "nodeType": "ExpressionStatement", - "src": "15858:18:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "15894:13:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 683, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15895:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 684, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "redeemed", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "15895:12:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 682, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15886:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15886:22:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 687, - "nodeType": "ExpressionStatement", - "src": "15886:22:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 688, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15919:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 690, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "redeemed", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "15919:12:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 691, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15932:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "15919:17:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 693, - "nodeType": "ExpressionStatement", - "src": "15919:17:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 694, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15950:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 695, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "15950:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 696, - "name": "cutOffBid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 673, - "src": "15969:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 697, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "15969:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15950:41:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 699, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15996:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 700, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "15996:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 701, - "name": "cutOffBid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 673, - "src": "16016:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 702, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "16016:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15996:42:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 704, - "name": "_bidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 663, - "src": "16042:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 705, - "name": "cutOffBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 99, - "src": "16052:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16042:21:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "15996:67:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 708, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "15995:69:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "15950:114:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 740, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16433:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 741, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "16433:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 735, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16408:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 738, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributor", - "nodeType": "MemberAccess", - "referencedDeclaration": 31, - "src": "16408:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "16408:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "16408:37:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 743, - "nodeType": "ExpressionStatement", - "src": "16408:37:0" - }, - "id": 744, - "nodeType": "IfStatement", - "src": "15946:499:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 713, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16140:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 714, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributor", - "nodeType": "MemberAccess", - "referencedDeclaration": 31, - "src": "16140:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 731, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 715, - "name": "tokensForSale", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "16158:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 726, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 716, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16175:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 717, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "16175:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 725, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 722, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 718, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16190:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 719, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "16190:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 720, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16204:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 721, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "16204:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16190:23:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 723, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16189:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 724, - "name": "BONUS_DIVISOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 94, - "src": "16217:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16189:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16175:55:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 727, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16174:57:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16158:73:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 729, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16157:75:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 730, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "16235:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16157:103:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 711, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "16125:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "id": 712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1590, - "src": "16125:14:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "16125:136:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 710, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "16117:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "16117:145:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 734, - "nodeType": "ExpressionStatement", - "src": "16117:145:0" - } - } - ] - }, - "documentation": "@dev Redeem a bid. If the bid is accepted, send the tokens, otherwise refund the ETH.\n Note that anyone can call this function, not only the party which made the bid.\n @param _bidID ID of the bid to withdraw.", - "id": 746, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "redeem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 664, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 663, - "name": "_bidID", - "nodeType": "VariableDeclaration", - "scope": 746, - "src": "15737:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 662, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "15737:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "15736:13:0" - }, - "payable": false, - "returnParameters": { - "id": 665, - "nodeType": "ParameterList", - "parameters": [], - "src": "15757:0:0" - }, - "scope": 1151, - "src": "15721:731:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 813, - "nodeType": "Block", - "src": "16871:666:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 760, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 756, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 749, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "16885:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "16885:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 751, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16898:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "16885:14:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 753, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "16903:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 754, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "16910:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16903:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "16885:34:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 759, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 757, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "16923:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 758, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "16929:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16923:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "16885:51:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 766, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17060:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17060:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 768, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17073:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "17060:14:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "id": 770, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "17078:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "17060:27:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 808, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2047, - 2048 - ], - "referencedDeclaration": 2047, - "src": "17522:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17522:8:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 810, - "nodeType": "ExpressionStatement", - "src": "17522:8:0" - }, - "id": 811, - "nodeType": "IfStatement", - "src": "17056:474:0", - "trueBody": { - "body": { - "id": 806, - "nodeType": "Block", - "src": "17258:147:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "id": 795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "17280:48:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 786, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "17281:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 793, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 787, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "17286:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 790, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 788, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17304:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17304:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17286:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 792, - "indexExpression": { - "argumentTypes": null, - "id": 791, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17316:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17286:32:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17281:38:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "id": 794, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "redeemed", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "17281:47:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 805, - "nodeType": "IfStatement", - "src": "17276:114:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 797, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "17357:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 800, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 798, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17375:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17375:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17357:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 802, - "indexExpression": { - "argumentTypes": null, - "id": 801, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17387:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17357:32:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 796, - "name": "redeem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 746, - "src": "17350:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17350:40:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 804, - "nodeType": "ExpressionStatement", - "src": "17350:40:0" - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 782, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 776, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17199:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 777, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "17203:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 780, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 778, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17221:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17221:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17203:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 781, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17203:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17199:40:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 807, - "initializationExpression": { - "assignments": [ - 773 - ], - "declarations": [ - { - "constant": false, - "id": 773, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 814, - "src": "17187:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 772, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17187:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 775, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 774, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17196:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "17187:10:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "17241:3:0", - "subExpression": { - "argumentTypes": null, - "id": 783, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17243:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 785, - "nodeType": "ExpressionStatement", - "src": "17241:3:0" - }, - "nodeType": "ForStatement", - "src": "17182:223:0" - } - }, - "id": 812, - "nodeType": "IfStatement", - "src": "16881:649:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 762, - "name": "INFINITY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 21, - "src": "17026:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 763, - "name": "TAIL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15, - "src": "17036:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 761, - "name": "submitBid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 511, - "src": "17016:9:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 764, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17016:25:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 765, - "nodeType": "ExpressionStatement", - "src": "17016:25:0" - } - } - ] - }, - "documentation": "@dev Fallback. Make a bid if ETH are sent. Redeem all the bids of the contributor otherwise.\n Note that the contributor could make this function go out of gas if it has too much bids. This in not a problem as it is still possible to redeem using the redeem function directly.\n This allows users to bid and get their tokens back using only send operations.", - "id": 814, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 747, - "nodeType": "ParameterList", - "parameters": [], - "src": "16853:2:0" - }, - "payable": true, - "returnParameters": { - "id": 748, - "nodeType": "ParameterList", - "parameters": [], - "src": "16871:0:0" - }, - "scope": 1151, - "src": "16844:693:0", - "stateMutability": "payable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 957, - "nodeType": "Block", - "src": "17700:753:0", - "statements": [ - { - "assignments": [ - 821 - ], - "declarations": [ - { - "constant": false, - "id": 821, - "name": "localSumContrib", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17704:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 820, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17704:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 823, - "initialValue": { - "argumentTypes": null, - "id": 822, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "17727:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17704:41:0" - }, - { - "assignments": [ - 825 - ], - "declarations": [ - { - "constant": false, - "id": 825, - "name": "localVSumContrib", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17749:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 824, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17749:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 827, - "initialValue": { - "argumentTypes": null, - "id": 826, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "17773:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17749:49:0" - }, - { - "assignments": [ - 829 - ], - "declarations": [ - { - "constant": false, - "id": 829, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17802:9:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 828, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17802:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 831, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 830, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17814:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "17802:13:0" - }, - { - "assignments": [ - 833 - ], - "declarations": [ - { - "constant": false, - "id": 833, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17819:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 832, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "17819:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 837, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 834, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "17837:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 836, - "indexExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 835, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17842:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17837:7:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17819:25:0" - }, - { - "body": { - "id": 872, - "nodeType": "Block", - "src": "17884:146:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 849, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "17889:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 850, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "17895:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 854, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 851, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "17900:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 853, - "indexExpression": { - "argumentTypes": null, - "id": 852, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17906:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17900:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17895:14:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "src": "17889:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 856, - "nodeType": "ExpressionStatement", - "src": "17889:20:0" - }, - { - "condition": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 857, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "17924:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 858, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "17924:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 870, - "nodeType": "Block", - "src": "17984:42:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 868, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 865, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "17990:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 866, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18009:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 867, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "18009:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17990:30:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 869, - "nodeType": "ExpressionStatement", - "src": "17990:30:0" - } - ] - }, - "id": 871, - "nodeType": "IfStatement", - "src": "17920:106:0", - "trueBody": { - "id": 864, - "nodeType": "Block", - "src": "17936:42:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 859, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "17942:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 860, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "17961:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 861, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "17961:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17942:30:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 863, - "nodeType": "ExpressionStatement", - "src": "17942:30:0" - } - ] - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 842, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17861:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 843, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "17865:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17865:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17861:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 873, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 840, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 838, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17854:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 839, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17858:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "17854:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 841, - "nodeType": "ExpressionStatement", - "src": "17854:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "17879:3:0", - "subExpression": { - "argumentTypes": null, - "id": 846, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17879:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 848, - "nodeType": "ExpressionStatement", - "src": "17879:3:0" - }, - "nodeType": "ForStatement", - "src": "17849:181:0" - }, - { - "body": { - "id": 922, - "nodeType": "Block", - "src": "18069:242:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 885, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18074:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 886, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "18080:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 890, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 887, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18085:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 889, - "indexExpression": { - "argumentTypes": null, - "id": 888, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18091:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18085:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18080:14:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "src": "18074:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 892, - "nodeType": "ExpressionStatement", - "src": "18074:20:0" - }, - { - "condition": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 893, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18103:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 894, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "18103:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 920, - "nodeType": "Block", - "src": "18213:94:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 909, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18227:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 910, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18246:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 911, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "18246:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18227:35:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 913, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18266:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 914, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18285:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 915, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMin", - "nodeType": "MemberAccess", - "referencedDeclaration": 25, - "src": "18285:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18266:34:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "18227:73:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 908, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "18219:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 918, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "18219:82:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 919, - "nodeType": "ExpressionStatement", - "src": "18219:82:0" - } - ] - }, - "id": 921, - "nodeType": "IfStatement", - "src": "18099:208:0", - "trueBody": { - "id": 907, - "nodeType": "Block", - "src": "18115:92:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 896, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18129:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 897, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18147:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 898, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "18147:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18129:34:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 903, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 900, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18167:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 901, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18185:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 902, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMin", - "nodeType": "MemberAccess", - "referencedDeclaration": 25, - "src": "18185:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18167:33:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "18129:71:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 895, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "18121:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "18121:80:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 906, - "nodeType": "ExpressionStatement", - "src": "18121:80:0" - } - ] - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 881, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 878, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18046:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 879, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18050:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "18050:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18046:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 923, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 874, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18039:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 875, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18043:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "18039:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 877, - "nodeType": "ExpressionStatement", - "src": "18039:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 883, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "18064:3:0", - "subExpression": { - "argumentTypes": null, - "id": 882, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18064:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 884, - "nodeType": "ExpressionStatement", - "src": "18064:3:0" - }, - "nodeType": "ForStatement", - "src": "18034:277:0" - }, - { - "body": { - "id": 951, - "nodeType": "Block", - "src": "18350:59:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 935, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18355:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 936, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "18361:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 940, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 937, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18366:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 939, - "indexExpression": { - "argumentTypes": null, - "id": 938, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18372:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18366:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18361:14:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "src": "18355:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 942, - "nodeType": "ExpressionStatement", - "src": "18355:20:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 943, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18380:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 945, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "18380:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "18393:11:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 946, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18394:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 947, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "18394:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "18380:24:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 950, - "nodeType": "ExpressionStatement", - "src": "18380:24:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 928, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18327:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 929, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18331:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "18331:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18327:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 952, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 924, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18320:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 925, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18324:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "18320:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 927, - "nodeType": "ExpressionStatement", - "src": "18320:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "18345:3:0", - "subExpression": { - "argumentTypes": null, - "id": 932, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18345:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 934, - "nodeType": "ExpressionStatement", - "src": "18345:3:0" - }, - "nodeType": "ForStatement", - "src": "18315:94:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 955, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 953, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "18413:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 954, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18434:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18413:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 956, - "nodeType": "ExpressionStatement", - "src": "18413:36:0" - } - ] - }, - "documentation": "@dev Poke a bid. Checks if the bid should be make active or inactive.\n@param _bids ID of the bid to poke.", - "id": 958, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "poke", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 818, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 817, - "name": "_bids", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17679:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 815, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17679:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 816, - "length": null, - "nodeType": "ArrayTypeName", - "src": "17679:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "17678:14:0" - }, - "payable": false, - "returnParameters": { - "id": 819, - "nodeType": "ParameterList", - "parameters": [], - "src": "17700:0:0" - }, - "scope": 1151, - "src": "17665:788:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 988, - "nodeType": "Block", - "src": "18802:366:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 963, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "18816:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 964, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "18822:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18816:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 968, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "18901:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "id": 969, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "18907:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18901:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 984, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 978, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 973, - "name": "maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 83, - "src": "19103:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 976, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 974, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "19115:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 975, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "19125:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19115:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 977, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19114:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19103:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 979, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19102:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 980, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "19134:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 981, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "19144:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19134:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 983, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19133:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19102:59:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 962, - "id": 985, - "nodeType": "Return", - "src": "19095:66:0" - }, - "id": 986, - "nodeType": "IfStatement", - "src": "18897:264:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 971, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18969:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 962, - "id": 972, - "nodeType": "Return", - "src": "18962:8:0" - } - }, - "id": 987, - "nodeType": "IfStatement", - "src": "18812:349:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "id": 966, - "name": "maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 83, - "src": "18874:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 962, - "id": 967, - "nodeType": "Return", - "src": "18867:15:0" - } - } - ] - }, - "documentation": "@dev Return the current bonus. The bonus only changes in 1/BONUS_DIVISOR increments.\n @return b The bonus expressed in 1/BONUS_DIVISOR. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.", - "id": 989, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "bonus", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 959, - "nodeType": "ParameterList", - "parameters": [], - "src": "18771:2:0" - }, - "payable": false, - "returnParameters": { - "id": 962, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 961, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 989, - "src": "18794:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 960, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "18794:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "18793:8:0" - }, - "scope": 1151, - "src": "18757:411:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1021, - "nodeType": "Block", - "src": "19726:159:0", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1009, - "name": "contribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 994, - "src": "19814:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1010, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "19830:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 1016, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1011, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "19835:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 1013, - "indexExpression": { - "argumentTypes": null, - "id": 1012, - "name": "_contributor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "19853:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19835:31:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1015, - "indexExpression": { - "argumentTypes": null, - "id": 1014, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 997, - "src": "19867:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19835:34:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19830:40:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "id": 1017, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "19830:48:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19814:64:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1019, - "nodeType": "ExpressionStatement", - "src": "19814:64:0" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1000, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 997, - "src": "19753:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1001, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "19757:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 1003, - "indexExpression": { - "argumentTypes": null, - "id": 1002, - "name": "_contributor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "19775:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19757:31:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1004, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "19757:38:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19753:42:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1020, - "initializationExpression": { - "assignments": [ - 997 - ], - "declarations": [ - { - "constant": false, - "id": 997, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1022, - "src": "19741:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 996, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "19741:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 999, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 998, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19750:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "19741:10:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "19797:3:0", - "subExpression": { - "argumentTypes": null, - "id": 1006, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 997, - "src": "19799:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1008, - "nodeType": "ExpressionStatement", - "src": "19797:3:0" - }, - "nodeType": "ForStatement", - "src": "19736:142:0" - } - ] - }, - "documentation": "@dev Get the total contribution of an address.\n This can be used for a KYC threshold.\n This function is O(n) where n is the amount of bids made by the contributor.\n This means that the contributor can make totalContrib(contributor) revert due to an out of gas error on purpose.\n @param _contributor The contributor whose contribution will be returned.\n @return contribution The total contribution of the contributor.", - "id": 1022, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalContrib", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 992, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 991, - "name": "_contributor", - "nodeType": "VariableDeclaration", - "scope": 1022, - "src": "19664:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 990, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19664:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "19663:22:0" - }, - "payable": false, - "returnParameters": { - "id": 995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 994, - "name": "contribution", - "nodeType": "VariableDeclaration", - "scope": 1022, - "src": "19707:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 993, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "19707:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "19706:19:0" - }, - "scope": 1151, - "src": "19642:243:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1085, - "nodeType": "Block", - "src": "20231:309:0", - "statements": [ - { - "assignments": [ - 1031 - ], - "declarations": [ - { - "constant": false, - "id": 1031, - "name": "bucket", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20235:24:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - }, - "typeName": { - "contractScope": null, - "id": 1030, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "20235:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1035, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1032, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "20262:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 1034, - "indexExpression": { - "argumentTypes": null, - "id": 1033, - "name": "_bucketid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1024, - "src": "20270:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "20262:18:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20235:45:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1036, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20288:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1037, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "20288:14:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 1039, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20314:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1038, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "20306:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1040, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20306:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "20288:30:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1045, - "nodeType": "IfStatement", - "src": "20284:60:0", - "trueBody": { - "id": 1044, - "nodeType": "Block", - "src": "20320:24:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1042, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20332:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1029, - "id": 1043, - "nodeType": "Return", - "src": "20325:14:0" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 1054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1046, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20348:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1050, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20369:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1051, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "20369:22:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1052, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "20369:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1049, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "20358:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 1047, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20362:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1048, - "length": null, - "nodeType": "ArrayTypeName", - "src": "20362:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 1053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20358:41:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - "src": "20348:51:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1055, - "nodeType": "ExpressionStatement", - "src": "20348:51:0" - }, - { - "assignments": [ - 1057 - ], - "declarations": [ - { - "constant": false, - "id": 1057, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20403:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1056, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20403:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1059, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1058, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20412:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "20403:10:0" - }, - { - "body": { - "id": 1081, - "nodeType": "Block", - "src": "20470:48:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1072, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20475:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1074, - "indexExpression": { - "argumentTypes": null, - "id": 1073, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20483:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "20475:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1075, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20488:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1076, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "20488:22:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1078, - "indexExpression": { - "argumentTypes": null, - "id": 1077, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20511:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "20488:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20475:38:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1080, - "nodeType": "ExpressionStatement", - "src": "20475:38:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1064, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20430:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1065, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20434:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1066, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "20434:22:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1067, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "20434:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20430:33:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1082, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 1062, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1060, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20423:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 1061, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20427:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "20423:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1063, - "nodeType": "ExpressionStatement", - "src": "20423:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "20465:3:0", - "subExpression": { - "argumentTypes": null, - "id": 1069, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20465:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1071, - "nodeType": "ExpressionStatement", - "src": "20465:3:0" - }, - "nodeType": "ForStatement", - "src": "20418:100:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 1083, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20529:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1029, - "id": 1084, - "nodeType": "Return", - "src": "20522:14:0" - } - ] - }, - "documentation": "@dev Get the array of personal min bids from a bucket.\nThis can be used for getting data for visualization.\n@param _bucketid The ID of the bucket to get the list from.\n@return minBids The array of personal min bids in the bucket.", - "id": 1086, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "bucketMinBids", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1025, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1024, - "name": "_bucketid", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20171:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1023, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20171:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20170:16:0" - }, - "payable": false, - "returnParameters": { - "id": 1029, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1028, - "name": "minBids", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20208:21:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 1026, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20208:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1027, - "length": null, - "nodeType": "ArrayTypeName", - "src": "20208:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20207:23:0" - }, - "scope": 1151, - "src": "20148:392:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1149, - "nodeType": "Block", - "src": "20885:294:0", - "statements": [ - { - "assignments": [ - 1095 - ], - "declarations": [ - { - "constant": false, - "id": 1095, - "name": "bucket", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "20889:24:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - }, - "typeName": { - "contractScope": null, - "id": 1094, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "20889:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1099, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1096, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "20916:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 1098, - "indexExpression": { - "argumentTypes": null, - "id": 1097, - "name": "_bucketid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1088, - "src": "20924:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "20916:18:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20889:45:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1105, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1100, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "20942:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1101, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "20942:14:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 1103, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20968:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1102, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "20960:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1104, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20960:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "20942:30:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1109, - "nodeType": "IfStatement", - "src": "20938:60:0", - "trueBody": { - "id": 1108, - "nodeType": "Block", - "src": "20974:24:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1106, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "20986:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1093, - "id": 1107, - "nodeType": "Return", - "src": "20979:14:0" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 1118, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1110, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "21002:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1114, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "21023:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1115, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "21023:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1116, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "21023:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1113, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "21012:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 1111, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "21016:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1112, - "length": null, - "nodeType": "ArrayTypeName", - "src": "21016:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 1117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "21012:36:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - "src": "21002:46:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1119, - "nodeType": "ExpressionStatement", - "src": "21002:46:0" - }, - { - "assignments": [ - 1121 - ], - "declarations": [ - { - "constant": false, - "id": 1121, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "21052:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1120, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "21052:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1123, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1122, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21061:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "21052:10:0" - }, - { - "body": { - "id": 1145, - "nodeType": "Block", - "src": "21114:43:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1143, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1136, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "21119:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1138, - "indexExpression": { - "argumentTypes": null, - "id": 1137, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21127:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "21119:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1139, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "21132:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1140, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "21132:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1142, - "indexExpression": { - "argumentTypes": null, - "id": 1141, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21150:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "21132:20:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21119:33:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1144, - "nodeType": "ExpressionStatement", - "src": "21119:33:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1128, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21079:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1129, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "21083:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1130, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "21083:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1131, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "21083:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21079:28:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1146, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 1126, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1124, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21072:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 1125, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21076:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "21072:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1127, - "nodeType": "ExpressionStatement", - "src": "21072:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1134, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "21109:3:0", - "subExpression": { - "argumentTypes": null, - "id": 1133, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21109:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1135, - "nodeType": "ExpressionStatement", - "src": "21109:3:0" - }, - "nodeType": "ForStatement", - "src": "21067:90:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 1147, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "21168:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1093, - "id": 1148, - "nodeType": "Return", - "src": "21161:14:0" - } - ] - }, - "documentation": "@dev Get the array of maximum cap bids from a bucket.\nThis can be used for getting data for visualization.\n@param _bucketid The ID of the bucket to get the list from.\n@return maxBids The array of maximum cap bids in the bucket.", - "id": 1150, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "bucketMaxBids", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1089, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1088, - "name": "_bucketid", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "20825:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1087, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20825:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20824:16:0" - }, - "payable": false, - "returnParameters": { - "id": 1093, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1092, - "name": "maxBids", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "20862:21:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 1090, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20862:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1091, - "length": null, - "nodeType": "ArrayTypeName", - "src": "20862:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20861:23:0" - }, - "scope": 1151, - "src": "20802:377:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1152, - "src": "2160:19023:0" - } - ], - "src": "252:20932:0" - }, - "legacyAST": { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/IICO.sol", - "exportedSymbols": { - "IICO": [ - 1151 - ] - }, - "id": 1152, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "^", - "0.4", - ".23" - ], - "nodeType": "PragmaDirective", - "src": "252:24:0" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 1152, - "sourceUnit": 1959, - "src": "278:63:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": "@title Interactive Coin Offering\n This contract implements the Interactive Coin Offering token sale as described in this paper:\n https://people.cs.uchicago.edu/~teutsch/papers/ico.pdf\n Implementation details and modifications compared to the paper:\n -A fixed amount of tokens is sold. This allows more flexibility for the distribution of the remaining tokens (rounds, team tokens which can be preallocated, non-initial sell of some cryptographic assets).\n -The valuation pointer is only moved when the sale is over. This greatly reduces the amount of write operations and code complexity. However, at least one party must make one or multiple calls to finalize the sale.\n -Buckets are not used as they are not required and increase code complexity.\n -The bid submitter must provide the insertion spot. A search of the insertion spot is still done in the contract just in case the one provided was wrong or other bids were added between when the TX got signed and executed, but giving the search starting point greatly lowers gas consumption.\n -Automatic withdrawals are only possible at the end of the sale. This decreases code complexity and possible interactions between different parts of the code.\n -We put a full bonus, free withdrawal period at the beginning. This allows everyone to have a chance to place bids with full bonus and avoids clogging the network just after the sale starts. Note that at this moment, no information can be taken for granted as parties can withdraw freely.\n -Calling the fallback function while sending ETH places a bid with an infinite maximum valuation. This allows buyers who want to buy no matter the price not need to use a specific interface and just send ETH. Without ETH, a call to the fallback function redeems the bids of the caller.", - "fullyImplemented": true, - "id": 1151, - "linearizedBaseContracts": [ - 1151 - ], - "name": "IICO", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 4, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2207:20:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2207:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 6, - "name": "beneficiary", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2275:26:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2275:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": true, - "id": 9, - "name": "HEAD", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2371:22:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2371:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "30", - "id": 8, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2392:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 15, - "name": "TAIL", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2500:29:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2500:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 13, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "2526:2:0", - "subExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2527:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_-1_by_1", - "typeString": "int_const -1" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_-1_by_1", - "typeString": "int_const -1" - } - ], - "id": 11, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2521:4:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 14, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2521:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 21, - "name": "INFINITY", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "2629:33:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2629:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 19, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "-", - "prefix": true, - "src": "2659:2:0", - "subExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 18, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2660:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "typeDescriptions": { - "typeIdentifier": "t_rational_-2_by_1", - "typeString": "int_const -2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_-2_by_1", - "typeString": "int_const -2" - } - ], - "id": 17, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2654:4:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 20, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2654:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "canonicalName": "IICO.Bid", - "id": 42, - "members": [ - { - "constant": false, - "id": 23, - "name": "maxValuation", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3228:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 22, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3228:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 25, - "name": "personalMin", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3331:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 24, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3331:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 27, - "name": "contrib", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3357:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 26, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3357:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 29, - "name": "bonus", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3411:10:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 28, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3411:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 31, - "name": "contributor", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3510:19:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 30, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3510:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 33, - "name": "withdrawn", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3579:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 32, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3579:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 35, - "name": "redeemed", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3648:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 34, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3648:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 37, - "name": "active", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3721:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 36, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3721:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 39, - "name": "minBucketID", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3798:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 38, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3798:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 41, - "name": "maxBucketID", - "nodeType": "VariableDeclaration", - "scope": 42, - "src": "3818:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 40, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3818:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Bid", - "nodeType": "StructDefinition", - "scope": 1151, - "src": "3165:677:0", - "visibility": "public" - }, - { - "canonicalName": "IICO.BidBucket", - "id": 53, - "members": [ - { - "constant": false, - "id": 44, - "name": "valuation", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "3875:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 43, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3875:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 46, - "name": "creator", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "3968:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 45, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3968:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 49, - "name": "maxCapBids", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "4058:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 47, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4058:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 48, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4058:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 52, - "name": "personalMinBids", - "nodeType": "VariableDeclaration", - "scope": 53, - "src": "4085:22:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 50, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4085:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 51, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4085:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "BidBucket", - "nodeType": "StructDefinition", - "scope": 1151, - "src": "3848:266:0", - "visibility": "public" - }, - { - "constant": false, - "id": 57, - "name": "bids", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4120:33:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid)" - }, - "typeName": { - "id": 56, - "keyType": { - "id": 54, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4129:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Mapping", - "src": "4120:21:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid)" - }, - "valueType": { - "contractScope": null, - "id": 55, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "4137:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 61, - "name": "buckets", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4180:42:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket)" - }, - "typeName": { - "id": 60, - "keyType": { - "id": 58, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4189:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Mapping", - "src": "4180:27:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket)" - }, - "valueType": { - "contractScope": null, - "id": 59, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "4197:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 66, - "name": "contributorBidIDs", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4255:52:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[])" - }, - "typeName": { - "id": 65, - "keyType": { - "id": 62, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4264:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "4255:27:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[])" - }, - "valueType": { - "baseType": { - "id": 63, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4275:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 64, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4275:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 69, - "name": "lastBidID", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4357:25:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 67, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4357:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "30", - "id": 68, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4381:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 71, - "name": "startTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4462:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 70, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4462:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 73, - "name": "endFullBonusTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4535:28:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 72, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4535:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 75, - "name": "withdrawalLockTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4619:30:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 74, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4619:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 77, - "name": "endTime", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4736:19:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 76, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4736:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 79, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4807:18:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - }, - "typeName": { - "contractScope": null, - "id": 78, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1958, - "src": "4807:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 81, - "name": "tokensForSale", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4883:25:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 80, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4883:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 83, - "name": "maxBonus", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "4975:20:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 82, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4975:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 85, - "name": "minValuation", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5150:24:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 84, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5150:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 87, - "name": "maxValuation", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5180:24:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 86, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5180:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 89, - "name": "increment", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5210:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 88, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5210:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 91, - "name": "numBuckets", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5237:22:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 90, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5237:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": true, - "id": 94, - "name": "BONUS_DIVISOR", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5265:33:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 92, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5265:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "314539", - "id": 93, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5295:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000000_by_1", - "typeString": "int_const 1000000000" - }, - "value": "1E9" - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 96, - "name": "finalized", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5416:21:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 95, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5416:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 99, - "name": "cutOffBidID", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5566:30:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 97, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5566:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "id": 98, - "name": "TAIL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15, - "src": "5592:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "id": 101, - "name": "sumAcceptedContrib", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5668:30:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 100, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5668:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 103, - "name": "sumAcceptedVirtualContrib", - "nodeType": "VariableDeclaration", - "scope": 1151, - "src": "5749:37:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 102, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5749:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "anonymous": false, - "documentation": null, - "id": 111, - "name": "BidSubmitted", - "nodeType": "EventDefinition", - "parameters": { - "id": 110, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 105, - "indexed": true, - "name": "contributor", - "nodeType": "VariableDeclaration", - "scope": 111, - "src": "5904:27:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 104, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5904:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 107, - "indexed": true, - "name": "bidID", - "nodeType": "VariableDeclaration", - "scope": 111, - "src": "5933:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 106, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5933:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 109, - "indexed": true, - "name": "time", - "nodeType": "VariableDeclaration", - "scope": 111, - "src": "5953:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 108, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "5953:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5903:68:0" - }, - "src": "5885:87:0" - }, - { - "anonymous": false, - "documentation": null, - "id": 117, - "name": "Poked", - "nodeType": "EventDefinition", - "parameters": { - "id": 116, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 113, - "indexed": true, - "name": "poker", - "nodeType": "VariableDeclaration", - "scope": 117, - "src": "5986:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 112, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5986:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 115, - "indexed": true, - "name": "bidID", - "nodeType": "VariableDeclaration", - "scope": 117, - "src": "6009:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 114, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6009:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5985:43:0" - }, - "src": "5974:55:0" - }, - { - "body": { - "id": 127, - "nodeType": "Block", - "src": "6081:36:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 120, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4, - "src": "6091:5:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 121, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "6100:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "6100:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6091:19:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 119, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "6083:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6083:28:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 125, - "nodeType": "ExpressionStatement", - "src": "6083:28:0" - }, - { - "id": 126, - "nodeType": "PlaceholderStatement", - "src": "6113:1:0" - } - ] - }, - "documentation": null, - "id": 128, - "name": "onlyOwner", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 118, - "nodeType": "ParameterList", - "parameters": [], - "src": "6081:0:0" - }, - "src": "6063:54:0", - "visibility": "internal" - }, - { - "body": { - "id": 252, - "nodeType": "Block", - "src": "7179:974:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 149, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4, - "src": "7189:5:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 150, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "7197:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 151, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7197:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7189:18:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 153, - "nodeType": "ExpressionStatement", - "src": "7189:18:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 154, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "7217:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 155, - "name": "_startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 130, - "src": "7229:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7217:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 157, - "nodeType": "ExpressionStatement", - "src": "7217:22:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 158, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "7249:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 159, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "7268:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 160, - "name": "_fullBonusLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 132, - "src": "7280:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7268:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7249:47:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 163, - "nodeType": "ExpressionStatement", - "src": "7249:47:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 164, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "7306:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 165, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "7327:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 166, - "name": "_partialWithdrawalLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "7346:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7327:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7306:64:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 169, - "nodeType": "ExpressionStatement", - "src": "7306:64:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 170, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7380:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 171, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "7390:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 172, - "name": "_withdrawalLockUpLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 136, - "src": "7411:23:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7390:44:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7380:54:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 175, - "nodeType": "ExpressionStatement", - "src": "7380:54:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 178, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 176, - "name": "maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 83, - "src": "7444:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 177, - "name": "_maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 138, - "src": "7455:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7444:20:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 179, - "nodeType": "ExpressionStatement", - "src": "7444:20:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 180, - "name": "beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6, - "src": "7474:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 181, - "name": "_beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 140, - "src": "7488:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7474:26:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 183, - "nodeType": "ExpressionStatement", - "src": "7474:26:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 184, - "name": "maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 87, - "src": "7510:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 185, - "name": "_maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 144, - "src": "7525:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7510:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 187, - "nodeType": "ExpressionStatement", - "src": "7510:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 188, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7548:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 189, - "name": "_minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 142, - "src": "7563:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7548:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 191, - "nodeType": "ExpressionStatement", - "src": "7548:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 192, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "7586:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 193, - "name": "_increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 146, - "src": "7598:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7586:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 195, - "nodeType": "ExpressionStatement", - "src": "7586:22:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 196, - "name": "numBuckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 91, - "src": "7618:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 205, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 197, - "name": "maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 87, - "src": "7633:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 198, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7648:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7633:27:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 200, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7632:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 201, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "7664:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7632:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 203, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7631:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 204, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7677:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7631:47:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7618:60:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 207, - "nodeType": "ExpressionStatement", - "src": "7618:60:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 208, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "7744:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 210, - "indexExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 209, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7752:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7744:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 212, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7792:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 216, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7841:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 215, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "7830:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 213, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7834:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 214, - "length": null, - "nodeType": "ArrayTypeName", - "src": "7834:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 217, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7830:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 221, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7885:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 220, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "7874:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 218, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7878:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 219, - "length": null, - "nodeType": "ArrayTypeName", - "src": "7878:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 222, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7874:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 223, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "7910:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7910:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 211, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "7757:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "7757:174:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "7744:187:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 227, - "nodeType": "ExpressionStatement", - "src": "7744:187:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 250, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 228, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "7942:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 234, - "indexExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 230, - "name": "numBuckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 91, - "src": "7955:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 231, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7966:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7955:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 229, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7950:4:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint" - }, - "id": 233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7950:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7942:27:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 236, - "name": "maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 87, - "src": "8007:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 240, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8056:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 239, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "8045:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 237, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8049:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 238, - "length": null, - "nodeType": "ArrayTypeName", - "src": "8049:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 241, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8045:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 245, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8100:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 244, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "8089:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 242, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8093:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 243, - "length": null, - "nodeType": "ArrayTypeName", - "src": "8093:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 246, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8089:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 247, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "8125:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "8125:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 235, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "7972:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "7972:174:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "7942:204:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 251, - "nodeType": "ExpressionStatement", - "src": "7942:204:0" - } - ] - }, - "documentation": "@dev Constructor. First contract set up (tokens will also need to be transferred to the contract and then setToken needs to be called to finish the setup).\n @param _startTime Time the sale will start in seconds since the Unix Epoch.\n @param _fullBonusLength Amount of seconds the sale lasts in the full bonus period.\n @param _partialWithdrawalLength Amount of seconds the sale lasts in the partial withdrawal period.\n @param _withdrawalLockUpLength Amount of seconds the sale lasts in the withdrawal lockup period.\n @param _maxBonus The maximum bonus. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n @param _beneficiary The party which will get the funds of the token sale.", - "id": 253, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "IICO", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 147, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 130, - "name": "_startTime", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "6976:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 129, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6976:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 132, - "name": "_fullBonusLength", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "6993:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 131, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "6993:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 134, - "name": "_partialWithdrawalLength", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7016:29:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 133, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7016:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 136, - "name": "_withdrawalLockUpLength", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7047:28:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 135, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7047:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 138, - "name": "_maxBonus", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7077:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 137, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7077:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 140, - "name": "_beneficiary", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7093:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 139, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7093:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 142, - "name": "_minValuation", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7115:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 141, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7115:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 144, - "name": "_maxValuation", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7135:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 143, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7135:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 146, - "name": "_increment", - "nodeType": "VariableDeclaration", - "scope": 253, - "src": "7155:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 145, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "7155:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6975:196:0" - }, - "payable": false, - "returnParameters": { - "id": 148, - "nodeType": "ParameterList", - "parameters": [], - "src": "7179:0:0" - }, - "scope": 1151, - "src": "6962:1191:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 281, - "nodeType": "Block", - "src": "8364:169:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 262, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "8390:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - ], - "id": 261, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8382:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8382:14:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 265, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8408:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 264, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8400:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 266, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8400:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8382:28:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 260, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "8374:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 268, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8374:37:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 269, - "nodeType": "ExpressionStatement", - "src": "8374:37:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 270, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "8465:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 271, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 255, - "src": "8473:6:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "src": "8465:14:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "id": 273, - "nodeType": "ExpressionStatement", - "src": "8465:14:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 274, - "name": "tokensForSale", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "8489:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 277, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2061, - "src": "8521:4:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IICO_$1151", - "typeString": "contract IICO" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IICO_$1151", - "typeString": "contract IICO" - } - ], - "expression": { - "argumentTypes": null, - "id": 275, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "8505:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "id": 276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 1555, - "src": "8505:15:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "8505:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8489:37:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 280, - "nodeType": "ExpressionStatement", - "src": "8489:37:0" - } - ] - }, - "documentation": "@dev Set the token. Must only be called after the IICO contract receives the tokens to be sold.\n @param _token The token to be sold.", - "id": 282, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 258, - "modifierName": { - "argumentTypes": null, - "id": 257, - "name": "onlyOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "8354:9:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "8354:9:0" - } - ], - "name": "setToken", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 255, - "name": "_token", - "nodeType": "VariableDeclaration", - "scope": 282, - "src": "8333:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - }, - "typeName": { - "contractScope": null, - "id": 254, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1958, - "src": "8333:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "8332:14:0" - }, - "payable": false, - "returnParameters": { - "id": 259, - "nodeType": "ParameterList", - "parameters": [], - "src": "8364:0:0" - }, - "scope": 1151, - "src": "8315:218:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 510, - "nodeType": "Block", - "src": "9027:2201:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 290, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "9116:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 291, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "9123:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9116:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 293, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "9136:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 294, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "9142:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9136:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9116:33:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 289, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9108:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9108:42:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 298, - "nodeType": "ExpressionStatement", - "src": "9108:42:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 302, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 300, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9207:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 301, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9218:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9207:23:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 305, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 303, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9234:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "id": 304, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9244:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9234:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9207:49:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 299, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9199:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9199:58:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 308, - "nodeType": "ExpressionStatement", - "src": "9199:58:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 310, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9277:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 311, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9287:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9277:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 313, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9276:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 314, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9303:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9276:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 316, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9316:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9276:41:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 309, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9267:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 318, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9267:51:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 319, - "nodeType": "ExpressionStatement", - "src": "9267:51:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 326, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 321, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9338:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 322, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9353:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9338:27:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 324, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9337:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 325, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9369:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9337:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 327, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9382:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9337:46:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 320, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "9328:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 329, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9328:56:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 330, - "nodeType": "ExpressionStatement", - "src": "9328:56:0" - }, - { - "assignments": [ - 332 - ], - "declarations": [ - { - "constant": false, - "id": 332, - "name": "minBucketID", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "9395:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 331, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9395:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 339, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 333, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9415:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 334, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9430:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9415:27:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 336, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9414:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 337, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9446:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9414:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9395:60:0" - }, - { - "assignments": [ - 341 - ], - "declarations": [ - { - "constant": false, - "id": 341, - "name": "maxBucketID", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "9465:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 340, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9465:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 348, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 342, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9485:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 343, - "name": "minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9495:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9485:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 345, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9484:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 346, - "name": "increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "9511:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9484:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9465:55:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 349, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9536:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 351, - "indexExpression": { - "argumentTypes": null, - "id": 350, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "9544:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9536:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 352, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "9536:28:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 354, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9576:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 353, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9568:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 355, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9568:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9536:44:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 378, - "nodeType": "IfStatement", - "src": "9532:292:0", - "trueBody": { - "id": 377, - "nodeType": "Block", - "src": "9582:242:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 375, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 357, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9596:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 359, - "indexExpression": { - "argumentTypes": null, - "id": 358, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "9604:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9596:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 361, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "9658:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 365, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9711:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 364, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "9700:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 362, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9704:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 363, - "length": null, - "nodeType": "ArrayTypeName", - "src": "9704:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 366, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9700:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 370, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9759:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 369, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "9748:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 367, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "9752:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 368, - "length": null, - "nodeType": "ArrayTypeName", - "src": "9752:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 371, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9748:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 372, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "9788:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "9788:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 360, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "9619:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "9619:194:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "9596:217:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 376, - "nodeType": "ExpressionStatement", - "src": "9596:217:0" - } - ] - } - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 379, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9837:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 381, - "indexExpression": { - "argumentTypes": null, - "id": 380, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "9845:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9837:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 382, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "9837:28:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9877:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 383, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9869:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9869:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9837:44:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 408, - "nodeType": "IfStatement", - "src": "9833:287:0", - "trueBody": { - "id": 407, - "nodeType": "Block", - "src": "9883:237:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 387, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "9897:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 389, - "indexExpression": { - "argumentTypes": null, - "id": 388, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "9905:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9897:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 391, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "9959:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10007:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 394, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "9996:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 392, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "10000:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 393, - "length": null, - "nodeType": "ArrayTypeName", - "src": "10000:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 396, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9996:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10055:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 399, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "10044:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 397, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "10048:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 398, - "length": null, - "nodeType": "ArrayTypeName", - "src": "10048:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 401, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10044:13:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 402, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10084:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10084:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 390, - "name": "BidBucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 53, - "src": "9920:9:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_BidBucket_$53_storage_ptr_$", - "typeString": "type(struct IICO.BidBucket storage pointer)" - } - }, - "id": 404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "valuation", - "maxCapBids", - "personalMinBids", - "creator" - ], - "nodeType": "FunctionCall", - "src": "9920:189:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_memory", - "typeString": "struct IICO.BidBucket memory" - } - }, - "src": "9897:212:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 406, - "nodeType": "ExpressionStatement", - "src": "9897:212:0" - } - ] - } - }, - { - "assignments": [ - 410 - ], - "declarations": [ - { - "constant": false, - "id": 410, - "name": "bucket", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "10130:24:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - }, - "typeName": { - "contractScope": null, - "id": 409, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "10130:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 414, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 411, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "10157:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 413, - "indexExpression": { - "argumentTypes": null, - "id": 412, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "10165:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10157:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10130:47:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "10187:11:0", - "subExpression": { - "argumentTypes": null, - "id": 415, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "10189:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 417, - "nodeType": "ExpressionStatement", - "src": "10187:11:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 418, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "10298:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 420, - "indexExpression": { - "argumentTypes": null, - "id": 419, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "10303:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "10298:15:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 422, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "10348:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 423, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "10382:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 424, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10417:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10417:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 426, - "name": "bonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 989, - "src": "10447:5:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "10447:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 428, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10481:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10481:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 430, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10516:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10545:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "argumentTypes": null, - "id": 432, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "10568:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 433, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "10597:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 439, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 434, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "10622:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 435, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10641:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10641:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10622:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "id": 438, - "name": "_maxCap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 284, - "src": "10653:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10622:38:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 440, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "10664:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 441, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "10683:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "10683:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10664:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 444, - "name": "_personalMin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 286, - "src": "10695:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10664:43:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "10622:85:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 447, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10621:87:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10718:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "id": 450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "10621:101:0", - "trueExpression": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 448, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10711:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": null, - "id": 421, - "name": "Bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "10316:3:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Bid_$42_storage_ptr_$", - "typeString": "type(struct IICO.Bid storage pointer)" - } - }, - "id": 451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "names": [ - "maxValuation", - "personalMin", - "contrib", - "bonus", - "contributor", - "withdrawn", - "redeemed", - "minBucketID", - "maxBucketID", - "active" - ], - "nodeType": "FunctionCall", - "src": "10316:417:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_memory", - "typeString": "struct IICO.Bid memory" - } - }, - "src": "10298:435:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "id": 453, - "nodeType": "ExpressionStatement", - "src": "10298:435:0" - }, - { - "assignments": [ - 455 - ], - "declarations": [ - { - "constant": false, - "id": 455, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "10738:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 454, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "10738:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 459, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 456, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "10756:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 458, - "indexExpression": { - "argumentTypes": null, - "id": 457, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "10761:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10756:15:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10738:33:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 460, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "10829:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 461, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10851:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 462, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "10851:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10829:33:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 464, - "nodeType": "ExpressionStatement", - "src": "10829:33:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 465, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "10866:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 466, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10895:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 467, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "10895:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 475, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 468, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10910:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 469, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "10910:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 470, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 455, - "src": "10924:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 471, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "10924:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10910:23:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 473, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10909:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 474, - "name": "BONUS_DIVISOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 94, - "src": "10937:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10909:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10895:55:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10866:84:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 478, - "nodeType": "ExpressionStatement", - "src": "10866:84:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 484, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11037:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 479, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "11000:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 481, - "indexExpression": { - "argumentTypes": null, - "id": 480, - "name": "maxBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "11008:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11000:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 482, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "11000:31:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11000:36:0", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) returns (uint256)" - } - }, - "id": 485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11000:47:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 486, - "nodeType": "ExpressionStatement", - "src": "11000:47:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 492, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11099:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 487, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "11057:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 489, - "indexExpression": { - "argumentTypes": null, - "id": 488, - "name": "minBucketID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "11065:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11057:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "id": 490, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "11057:36:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11057:41:0", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) returns (uint256)" - } - }, - "id": 493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11057:52:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 494, - "nodeType": "ExpressionStatement", - "src": "11057:52:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 500, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11155:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 495, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "11120:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 498, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 496, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "11138:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11138:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11120:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11120:34:0", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) returns (uint256)" - } - }, - "id": 501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11120:45:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 502, - "nodeType": "ExpressionStatement", - "src": "11120:45:0" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 504, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "11193:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11193:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 506, - "name": "lastBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 69, - "src": "11205:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 507, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "11216:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 503, - "name": "BidSubmitted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 111, - "src": "11180:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11180:40:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 509, - "nodeType": "EmitStatement", - "src": "11175:45:0" - } - ] - }, - "documentation": "@dev Submit a bid. The caller must give the exact position the bid must be inserted into in the list.\n In practice, use searchAndBid to avoid the position being incorrect due to a new bid being inserted and changing the position the bid must be inserted at.\n @param _maxCap The maximum cap accepted by this bid.\n @param _personalMin The minimum sale value for the bid to be included.", - "id": 511, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "submitBid", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 287, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 284, - "name": "_maxCap", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "8979:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 283, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8979:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 286, - "name": "_personalMin", - "nodeType": "VariableDeclaration", - "scope": 511, - "src": "8993:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 285, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "8993:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "8978:33:0" - }, - "payable": true, - "returnParameters": { - "id": 288, - "nodeType": "ParameterList", - "parameters": [], - "src": "9027:0:0" - }, - "scope": 1151, - "src": "8960:2268:0", - "stateMutability": "payable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 635, - "nodeType": "Block", - "src": "11564:1022:0", - "statements": [ - { - "assignments": [ - 517 - ], - "declarations": [ - { - "constant": false, - "id": 517, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11574:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 516, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "11574:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 521, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 518, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "11592:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 520, - "indexExpression": { - "argumentTypes": null, - "id": 519, - "name": "_bidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 513, - "src": "11597:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11592:12:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11574:30:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 527, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 523, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "11622:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "11622:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 525, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11636:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 526, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributor", - "nodeType": "MemberAccess", - "referencedDeclaration": 31, - "src": "11636:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "11622:29:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 522, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "11614:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11614:38:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 529, - "nodeType": "ExpressionStatement", - "src": "11614:38:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 531, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "11670:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 532, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "11676:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11670:24:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 530, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "11662:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 534, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11662:33:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 535, - "nodeType": "ExpressionStatement", - "src": "11662:33:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "11713:14:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 537, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11714:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 538, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "withdrawn", - "nodeType": "MemberAccess", - "referencedDeclaration": 33, - "src": "11714:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 536, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "11705:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "11705:23:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 541, - "nodeType": "ExpressionStatement", - "src": "11705:23:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 546, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 542, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11739:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 544, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "withdrawn", - "nodeType": "MemberAccess", - "referencedDeclaration": 33, - "src": "11739:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 545, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11755:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "11739:20:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 547, - "nodeType": "ExpressionStatement", - "src": "11739:20:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 548, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11763:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 550, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "11763:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 551, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11776:5:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "11763:18:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 553, - "nodeType": "ExpressionStatement", - "src": "11763:18:0" - }, - { - "assignments": [ - 555 - ], - "declarations": [ - { - "constant": false, - "id": 555, - "name": "refund", - "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11949:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 554, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "11949:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 576, - "initialValue": { - "argumentTypes": null, - "condition": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 556, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "11964:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 557, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "11970:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11964:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 559, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "11963:24:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 574, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 562, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12005:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 563, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12005:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 566, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 564, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "12020:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 565, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "12041:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12020:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 567, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12019:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12005:40:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 569, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12004:42:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 570, - "name": "withdrawalLockTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "12050:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 571, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "12071:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12050:37:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 573, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12049:39:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12004:84:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 575, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "11963:125:0", - "trueExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 560, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "11990:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 561, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "11990:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11949:139:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 578, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12105:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 579, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12115:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 580, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12115:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12105:21:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 577, - "name": "assert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2031, - "src": "12098:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12098:29:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 583, - "nodeType": "ExpressionStatement", - "src": "12098:29:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 584, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12282:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 586, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12282:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 587, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12297:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12282:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 589, - "nodeType": "ExpressionStatement", - "src": "12282:21:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 590, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12313:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 592, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "12313:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 593, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12326:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 594, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "12326:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 595, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12338:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "12326:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 597, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12325:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 598, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12343:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "12325:19:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12313:31:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 601, - "nodeType": "ExpressionStatement", - "src": "12313:31:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 602, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "12411:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "id": 603, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12433:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12411:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 605, - "nodeType": "ExpressionStatement", - "src": "12411:28:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 625, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 606, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "12443:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 624, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 607, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12473:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 608, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "12473:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 609, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 517, - "src": "12486:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 610, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "12486:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 611, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12500:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 612, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12502:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12500:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12486:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 615, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12485:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12473:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 617, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12472:38:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 620, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12514:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 619, - "name": "BONUS_DIVISOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 94, - "src": "12518:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12514:17:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 621, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "12513:19:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12472:60:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 623, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12535:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12472:69:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12443:98:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 626, - "nodeType": "ExpressionStatement", - "src": "12443:98:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 632, - "name": "refund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 555, - "src": "12572:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 627, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "12552:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "12552:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "12552:19:0", - "typeDescriptions": { - "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "12552:27:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 634, - "nodeType": "ExpressionStatement", - "src": "12552:27:0" - } - ] - }, - "documentation": "@dev Withdraw a bid. Can only be called before the end of the withdrawal lock period.\n Withdrawing a bid reduces its bonus by 1/3.\n For retrieving ETH after an automatic withdrawal, use the redeem function.\n @param _bidID The ID of the bid to withdraw.", - "id": 636, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "withdraw", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 514, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 513, - "name": "_bidID", - "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11544:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 512, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "11544:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "11543:13:0" - }, - "payable": false, - "returnParameters": { - "id": 515, - "nodeType": "ParameterList", - "parameters": [], - "src": "11564:0:0" - }, - "scope": 1151, - "src": "11526:1060:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 660, - "nodeType": "Block", - "src": "15362:115:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 640, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "15374:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 641, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "15381:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15374:14:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 639, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15366:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15366:23:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 644, - "nodeType": "ExpressionStatement", - "src": "15366:23:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "15401:10:0", - "subExpression": { - "argumentTypes": null, - "id": 646, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "15402:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 645, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15393:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 648, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15393:19:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 649, - "nodeType": "ExpressionStatement", - "src": "15393:19:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 650, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "15417:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 651, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15429:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "15417:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 653, - "nodeType": "ExpressionStatement", - "src": "15417:16:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 657, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "15454:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 654, - "name": "beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6, - "src": "15437:11:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 656, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "send", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "15437:16:0", - "typeDescriptions": { - "typeIdentifier": "t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) returns (bool)" - } - }, - "id": 658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15437:36:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 659, - "nodeType": "ExpressionStatement", - "src": "15437:36:0" - } - ] - }, - "documentation": "@dev Finalize by finding the cut-off bid.\n Since the amount of bids is not bounded, this function may have to be called multiple times.\n The function is O(min(n,_maxIt)) where n is the amount of bids. In total it will perform O(n) computations, possibly in multiple calls.\n Each call only has a O(1) storage write operations.", - "id": 661, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "finalize", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 637, - "nodeType": "ParameterList", - "parameters": [], - "src": "15352:2:0" - }, - "payable": false, - "returnParameters": { - "id": 638, - "nodeType": "ParameterList", - "parameters": [], - "src": "15362:0:0" - }, - "scope": 1151, - "src": "15335:142:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 745, - "nodeType": "Block", - "src": "15757:695:0", - "statements": [ - { - "assignments": [ - 667 - ], - "declarations": [ - { - "constant": false, - "id": 667, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 746, - "src": "15767:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 666, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "15767:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 671, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 668, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "15785:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 670, - "indexExpression": { - "argumentTypes": null, - "id": 669, - "name": "_bidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 663, - "src": "15790:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15785:12:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15767:30:0" - }, - { - "assignments": [ - 673 - ], - "declarations": [ - { - "constant": false, - "id": 673, - "name": "cutOffBid", - "nodeType": "VariableDeclaration", - "scope": 746, - "src": "15807:21:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 672, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "15807:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 677, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 674, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "15831:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 676, - "indexExpression": { - "argumentTypes": null, - "id": 675, - "name": "cutOffBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 99, - "src": "15836:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15831:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15807:41:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 679, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "15866:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 678, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15858:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15858:18:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 681, - "nodeType": "ExpressionStatement", - "src": "15858:18:0" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "15894:13:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 683, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15895:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 684, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "redeemed", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "15895:12:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 682, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "15886:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "15886:22:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 687, - "nodeType": "ExpressionStatement", - "src": "15886:22:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 688, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15919:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 690, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "redeemed", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "15919:12:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 691, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15932:4:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "15919:17:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 693, - "nodeType": "ExpressionStatement", - "src": "15919:17:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 694, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15950:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 695, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "15950:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 696, - "name": "cutOffBid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 673, - "src": "15969:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 697, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "15969:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15950:41:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 699, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "15996:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 700, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "15996:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 701, - "name": "cutOffBid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 673, - "src": "16016:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 702, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "16016:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15996:42:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 704, - "name": "_bidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 663, - "src": "16042:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 705, - "name": "cutOffBidID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 99, - "src": "16052:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16042:21:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "15996:67:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 708, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "15995:69:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "15950:114:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 740, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16433:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 741, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "16433:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 735, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16408:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 738, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributor", - "nodeType": "MemberAccess", - "referencedDeclaration": 31, - "src": "16408:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "16408:24:0", - "typeDescriptions": { - "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "16408:37:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 743, - "nodeType": "ExpressionStatement", - "src": "16408:37:0" - }, - "id": 744, - "nodeType": "IfStatement", - "src": "15946:499:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 713, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16140:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 714, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributor", - "nodeType": "MemberAccess", - "referencedDeclaration": 31, - "src": "16140:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 731, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 715, - "name": "tokensForSale", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "16158:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 726, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 716, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16175:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 717, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "16175:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 725, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 722, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 718, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16190:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 719, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "16190:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 720, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "16204:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 721, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bonus", - "nodeType": "MemberAccess", - "referencedDeclaration": 29, - "src": "16204:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16190:23:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 723, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16189:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 724, - "name": "BONUS_DIVISOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 94, - "src": "16217:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16189:41:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16175:55:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 727, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16174:57:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16158:73:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 729, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16157:75:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 730, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "16235:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16157:103:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 711, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "16125:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1958", - "typeString": "contract ERC20" - } - }, - "id": 712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1590, - "src": "16125:14:0", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "16125:136:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 710, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "16117:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "16117:145:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 734, - "nodeType": "ExpressionStatement", - "src": "16117:145:0" - } - } - ] - }, - "documentation": "@dev Redeem a bid. If the bid is accepted, send the tokens, otherwise refund the ETH.\n Note that anyone can call this function, not only the party which made the bid.\n @param _bidID ID of the bid to withdraw.", - "id": 746, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "redeem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 664, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 663, - "name": "_bidID", - "nodeType": "VariableDeclaration", - "scope": 746, - "src": "15737:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 662, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "15737:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "15736:13:0" - }, - "payable": false, - "returnParameters": { - "id": 665, - "nodeType": "ParameterList", - "parameters": [], - "src": "15757:0:0" - }, - "scope": 1151, - "src": "15721:731:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 813, - "nodeType": "Block", - "src": "16871:666:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 760, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 756, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 749, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "16885:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "16885:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 751, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16898:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "16885:14:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 753, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "16903:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 754, - "name": "startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "16910:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16903:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "16885:34:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 759, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 757, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "16923:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 758, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "16929:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16923:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "16885:51:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 766, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17060:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17060:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 768, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17073:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "17060:14:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "id": 770, - "name": "finalized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "17078:9:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "17060:27:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 808, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2047, - 2048 - ], - "referencedDeclaration": 2047, - "src": "17522:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17522:8:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 810, - "nodeType": "ExpressionStatement", - "src": "17522:8:0" - }, - "id": 811, - "nodeType": "IfStatement", - "src": "17056:474:0", - "trueBody": { - "body": { - "id": 806, - "nodeType": "Block", - "src": "17258:147:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "id": 795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "17280:48:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 786, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "17281:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 793, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 787, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "17286:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 790, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 788, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17304:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17304:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17286:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 792, - "indexExpression": { - "argumentTypes": null, - "id": 791, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17316:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17286:32:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17281:38:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "id": 794, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "redeemed", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "17281:47:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 805, - "nodeType": "IfStatement", - "src": "17276:114:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 797, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "17357:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 800, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 798, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17375:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17375:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17357:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 802, - "indexExpression": { - "argumentTypes": null, - "id": 801, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17387:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17357:32:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 796, - "name": "redeem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 746, - "src": "17350:6:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17350:40:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 804, - "nodeType": "ExpressionStatement", - "src": "17350:40:0" - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 782, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 776, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17199:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 777, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "17203:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 780, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 778, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "17221:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17221:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17203:29:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 781, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17203:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17199:40:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 807, - "initializationExpression": { - "assignments": [ - 773 - ], - "declarations": [ - { - "constant": false, - "id": 773, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 814, - "src": "17187:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 772, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17187:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 775, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 774, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17196:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "17187:10:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "17241:3:0", - "subExpression": { - "argumentTypes": null, - "id": 783, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 773, - "src": "17243:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 785, - "nodeType": "ExpressionStatement", - "src": "17241:3:0" - }, - "nodeType": "ForStatement", - "src": "17182:223:0" - } - }, - "id": 812, - "nodeType": "IfStatement", - "src": "16881:649:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 762, - "name": "INFINITY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 21, - "src": "17026:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 763, - "name": "TAIL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15, - "src": "17036:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 761, - "name": "submitBid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 511, - "src": "17016:9:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 764, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "17016:25:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 765, - "nodeType": "ExpressionStatement", - "src": "17016:25:0" - } - } - ] - }, - "documentation": "@dev Fallback. Make a bid if ETH are sent. Redeem all the bids of the contributor otherwise.\n Note that the contributor could make this function go out of gas if it has too much bids. This in not a problem as it is still possible to redeem using the redeem function directly.\n This allows users to bid and get their tokens back using only send operations.", - "id": 814, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 747, - "nodeType": "ParameterList", - "parameters": [], - "src": "16853:2:0" - }, - "payable": true, - "returnParameters": { - "id": 748, - "nodeType": "ParameterList", - "parameters": [], - "src": "16871:0:0" - }, - "scope": 1151, - "src": "16844:693:0", - "stateMutability": "payable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 957, - "nodeType": "Block", - "src": "17700:753:0", - "statements": [ - { - "assignments": [ - 821 - ], - "declarations": [ - { - "constant": false, - "id": 821, - "name": "localSumContrib", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17704:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 820, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17704:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 823, - "initialValue": { - "argumentTypes": null, - "id": 822, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "17727:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17704:41:0" - }, - { - "assignments": [ - 825 - ], - "declarations": [ - { - "constant": false, - "id": 825, - "name": "localVSumContrib", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17749:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 824, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17749:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 827, - "initialValue": { - "argumentTypes": null, - "id": 826, - "name": "sumAcceptedVirtualContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 103, - "src": "17773:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17749:49:0" - }, - { - "assignments": [ - 829 - ], - "declarations": [ - { - "constant": false, - "id": 829, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17802:9:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 828, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17802:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 831, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 830, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17814:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "17802:13:0" - }, - { - "assignments": [ - 833 - ], - "declarations": [ - { - "constant": false, - "id": 833, - "name": "bid", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17819:15:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - }, - "typeName": { - "contractScope": null, - "id": 832, - "name": "Bid", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 42, - "src": "17819:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 837, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 834, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "17837:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 836, - "indexExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 835, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17842:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17837:7:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17819:25:0" - }, - { - "body": { - "id": 872, - "nodeType": "Block", - "src": "17884:146:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 849, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "17889:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 850, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "17895:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 854, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 851, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "17900:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 853, - "indexExpression": { - "argumentTypes": null, - "id": 852, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17906:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17900:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17895:14:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "src": "17889:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 856, - "nodeType": "ExpressionStatement", - "src": "17889:20:0" - }, - { - "condition": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 857, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "17924:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 858, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "17924:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 870, - "nodeType": "Block", - "src": "17984:42:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 868, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 865, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "17990:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 866, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18009:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 867, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "18009:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17990:30:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 869, - "nodeType": "ExpressionStatement", - "src": "17990:30:0" - } - ] - }, - "id": 871, - "nodeType": "IfStatement", - "src": "17920:106:0", - "trueBody": { - "id": 864, - "nodeType": "Block", - "src": "17936:42:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 859, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "17942:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 860, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "17961:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 861, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "17961:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17942:30:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 863, - "nodeType": "ExpressionStatement", - "src": "17942:30:0" - } - ] - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 842, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17861:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 843, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "17865:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "17865:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17861:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 873, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 840, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 838, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17854:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 839, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17858:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "17854:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 841, - "nodeType": "ExpressionStatement", - "src": "17854:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "17879:3:0", - "subExpression": { - "argumentTypes": null, - "id": 846, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "17879:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 848, - "nodeType": "ExpressionStatement", - "src": "17879:3:0" - }, - "nodeType": "ForStatement", - "src": "17849:181:0" - }, - { - "body": { - "id": 922, - "nodeType": "Block", - "src": "18069:242:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 885, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18074:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 886, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "18080:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 890, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 887, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18085:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 889, - "indexExpression": { - "argumentTypes": null, - "id": 888, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18091:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18085:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18080:14:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "src": "18074:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 892, - "nodeType": "ExpressionStatement", - "src": "18074:20:0" - }, - { - "condition": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 893, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18103:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 894, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "18103:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 920, - "nodeType": "Block", - "src": "18213:94:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 909, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18227:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 910, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18246:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 911, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "18246:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18227:35:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 913, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18266:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 914, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18285:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 915, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMin", - "nodeType": "MemberAccess", - "referencedDeclaration": 25, - "src": "18285:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18266:34:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "18227:73:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 908, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "18219:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 918, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "18219:82:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 919, - "nodeType": "ExpressionStatement", - "src": "18219:82:0" - } - ] - }, - "id": 921, - "nodeType": "IfStatement", - "src": "18099:208:0", - "trueBody": { - "id": 907, - "nodeType": "Block", - "src": "18115:92:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 896, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18129:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 897, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18147:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 898, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxValuation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23, - "src": "18147:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18129:34:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 903, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 900, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18167:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 901, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18185:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 902, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMin", - "nodeType": "MemberAccess", - "referencedDeclaration": 25, - "src": "18185:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18167:33:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "18129:71:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 895, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "18121:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "18121:80:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 906, - "nodeType": "ExpressionStatement", - "src": "18121:80:0" - } - ] - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 881, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 878, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18046:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 879, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18050:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "18050:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18046:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 923, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 874, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18039:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 875, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18043:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "18039:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 877, - "nodeType": "ExpressionStatement", - "src": "18039:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 883, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "18064:3:0", - "subExpression": { - "argumentTypes": null, - "id": 882, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18064:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 884, - "nodeType": "ExpressionStatement", - "src": "18064:3:0" - }, - "nodeType": "ForStatement", - "src": "18034:277:0" - }, - { - "body": { - "id": 951, - "nodeType": "Block", - "src": "18350:59:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 935, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18355:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 936, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "18361:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 940, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 937, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18366:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 939, - "indexExpression": { - "argumentTypes": null, - "id": 938, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18372:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18366:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "18361:14:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "src": "18355:20:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 942, - "nodeType": "ExpressionStatement", - "src": "18355:20:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 943, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18380:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 945, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "18380:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "18393:11:0", - "subExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 946, - "name": "bid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 833, - "src": "18394:3:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage_ptr", - "typeString": "struct IICO.Bid storage pointer" - } - }, - "id": 947, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "active", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "18394:10:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "18380:24:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 950, - "nodeType": "ExpressionStatement", - "src": "18380:24:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 928, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18327:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 929, - "name": "_bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "18331:5:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "18331:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18327:16:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 952, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 924, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18320:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 925, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18324:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "18320:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 927, - "nodeType": "ExpressionStatement", - "src": "18320:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "18345:3:0", - "subExpression": { - "argumentTypes": null, - "id": 932, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 829, - "src": "18345:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 934, - "nodeType": "ExpressionStatement", - "src": "18345:3:0" - }, - "nodeType": "ForStatement", - "src": "18315:94:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 955, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 953, - "name": "sumAcceptedContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 101, - "src": "18413:18:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 954, - "name": "localSumContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "18434:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18413:36:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 956, - "nodeType": "ExpressionStatement", - "src": "18413:36:0" - } - ] - }, - "documentation": "@dev Poke a bid. Checks if the bid should be make active or inactive.\n@param _bids ID of the bid to poke.", - "id": 958, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "poke", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 818, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 817, - "name": "_bids", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "17679:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 815, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "17679:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 816, - "length": null, - "nodeType": "ArrayTypeName", - "src": "17679:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "17678:14:0" - }, - "payable": false, - "returnParameters": { - "id": 819, - "nodeType": "ParameterList", - "parameters": [], - "src": "17700:0:0" - }, - "scope": 1151, - "src": "17665:788:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 988, - "nodeType": "Block", - "src": "18802:366:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 963, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "18816:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 964, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "18822:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18816:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 968, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "18901:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "id": 969, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "18907:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18901:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 984, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 978, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 973, - "name": "maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 83, - "src": "19103:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 976, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 974, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "19115:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 975, - "name": "now", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2044, - "src": "19125:3:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19115:13:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 977, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19114:15:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19103:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 979, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19102:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 980, - "name": "endTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "19134:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 981, - "name": "endFullBonusTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "19144:16:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19134:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 983, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19133:28:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19102:59:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 962, - "id": 985, - "nodeType": "Return", - "src": "19095:66:0" - }, - "id": 986, - "nodeType": "IfStatement", - "src": "18897:264:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 971, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18969:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 962, - "id": 972, - "nodeType": "Return", - "src": "18962:8:0" - } - }, - "id": 987, - "nodeType": "IfStatement", - "src": "18812:349:0", - "trueBody": { - "expression": { - "argumentTypes": null, - "id": 966, - "name": "maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 83, - "src": "18874:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 962, - "id": 967, - "nodeType": "Return", - "src": "18867:15:0" - } - } - ] - }, - "documentation": "@dev Return the current bonus. The bonus only changes in 1/BONUS_DIVISOR increments.\n @return b The bonus expressed in 1/BONUS_DIVISOR. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.", - "id": 989, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "bonus", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 959, - "nodeType": "ParameterList", - "parameters": [], - "src": "18771:2:0" - }, - "payable": false, - "returnParameters": { - "id": 962, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 961, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 989, - "src": "18794:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 960, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "18794:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "18793:8:0" - }, - "scope": 1151, - "src": "18757:411:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1021, - "nodeType": "Block", - "src": "19726:159:0", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1009, - "name": "contribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 994, - "src": "19814:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1010, - "name": "bids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 57, - "src": "19830:4:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Bid_$42_storage_$", - "typeString": "mapping(uint256 => struct IICO.Bid storage ref)" - } - }, - "id": 1016, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1011, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "19835:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 1013, - "indexExpression": { - "argumentTypes": null, - "id": 1012, - "name": "_contributor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "19853:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19835:31:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1015, - "indexExpression": { - "argumentTypes": null, - "id": 1014, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 997, - "src": "19867:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19835:34:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19830:40:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bid_$42_storage", - "typeString": "struct IICO.Bid storage ref" - } - }, - "id": 1017, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contrib", - "nodeType": "MemberAccess", - "referencedDeclaration": 27, - "src": "19830:48:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19814:64:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1019, - "nodeType": "ExpressionStatement", - "src": "19814:64:0" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1000, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 997, - "src": "19753:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1001, - "name": "contributorBidIDs", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "19757:17:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$", - "typeString": "mapping(address => uint256[] storage ref)" - } - }, - "id": 1003, - "indexExpression": { - "argumentTypes": null, - "id": 1002, - "name": "_contributor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "19775:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "19757:31:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1004, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "19757:38:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19753:42:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1020, - "initializationExpression": { - "assignments": [ - 997 - ], - "declarations": [ - { - "constant": false, - "id": 997, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1022, - "src": "19741:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 996, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "19741:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 999, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 998, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19750:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "19741:10:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "19797:3:0", - "subExpression": { - "argumentTypes": null, - "id": 1006, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 997, - "src": "19799:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1008, - "nodeType": "ExpressionStatement", - "src": "19797:3:0" - }, - "nodeType": "ForStatement", - "src": "19736:142:0" - } - ] - }, - "documentation": "@dev Get the total contribution of an address.\n This can be used for a KYC threshold.\n This function is O(n) where n is the amount of bids made by the contributor.\n This means that the contributor can make totalContrib(contributor) revert due to an out of gas error on purpose.\n @param _contributor The contributor whose contribution will be returned.\n @return contribution The total contribution of the contributor.", - "id": 1022, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalContrib", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 992, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 991, - "name": "_contributor", - "nodeType": "VariableDeclaration", - "scope": 1022, - "src": "19664:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 990, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19664:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "19663:22:0" - }, - "payable": false, - "returnParameters": { - "id": 995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 994, - "name": "contribution", - "nodeType": "VariableDeclaration", - "scope": 1022, - "src": "19707:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 993, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "19707:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "19706:19:0" - }, - "scope": 1151, - "src": "19642:243:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1085, - "nodeType": "Block", - "src": "20231:309:0", - "statements": [ - { - "assignments": [ - 1031 - ], - "declarations": [ - { - "constant": false, - "id": 1031, - "name": "bucket", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20235:24:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - }, - "typeName": { - "contractScope": null, - "id": 1030, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "20235:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1035, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1032, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "20262:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 1034, - "indexExpression": { - "argumentTypes": null, - "id": 1033, - "name": "_bucketid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1024, - "src": "20270:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "20262:18:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20235:45:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1036, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20288:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1037, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "20288:14:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 1039, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20314:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1038, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "20306:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1040, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20306:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "20288:30:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1045, - "nodeType": "IfStatement", - "src": "20284:60:0", - "trueBody": { - "id": 1044, - "nodeType": "Block", - "src": "20320:24:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1042, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20332:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1029, - "id": 1043, - "nodeType": "Return", - "src": "20325:14:0" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 1054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1046, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20348:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1050, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20369:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1051, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "20369:22:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1052, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "20369:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1049, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "20358:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 1047, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20362:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1048, - "length": null, - "nodeType": "ArrayTypeName", - "src": "20362:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 1053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20358:41:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - "src": "20348:51:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1055, - "nodeType": "ExpressionStatement", - "src": "20348:51:0" - }, - { - "assignments": [ - 1057 - ], - "declarations": [ - { - "constant": false, - "id": 1057, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20403:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1056, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20403:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1059, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1058, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20412:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "20403:10:0" - }, - { - "body": { - "id": 1081, - "nodeType": "Block", - "src": "20470:48:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1072, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20475:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1074, - "indexExpression": { - "argumentTypes": null, - "id": 1073, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20483:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "20475:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1075, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20488:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1076, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "20488:22:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1078, - "indexExpression": { - "argumentTypes": null, - "id": 1077, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20511:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "20488:25:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20475:38:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1080, - "nodeType": "ExpressionStatement", - "src": "20475:38:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1064, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20430:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1065, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "20434:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1066, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "personalMinBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 52, - "src": "20434:22:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1067, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "20434:29:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20430:33:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1082, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 1062, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1060, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20423:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 1061, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20427:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "20423:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1063, - "nodeType": "ExpressionStatement", - "src": "20423:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "20465:3:0", - "subExpression": { - "argumentTypes": null, - "id": 1069, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1057, - "src": "20465:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1071, - "nodeType": "ExpressionStatement", - "src": "20465:3:0" - }, - "nodeType": "ForStatement", - "src": "20418:100:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 1083, - "name": "minBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "20529:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1029, - "id": 1084, - "nodeType": "Return", - "src": "20522:14:0" - } - ] - }, - "documentation": "@dev Get the array of personal min bids from a bucket.\nThis can be used for getting data for visualization.\n@param _bucketid The ID of the bucket to get the list from.\n@return minBids The array of personal min bids in the bucket.", - "id": 1086, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "bucketMinBids", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1025, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1024, - "name": "_bucketid", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20171:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1023, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20171:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20170:16:0" - }, - "payable": false, - "returnParameters": { - "id": 1029, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1028, - "name": "minBids", - "nodeType": "VariableDeclaration", - "scope": 1086, - "src": "20208:21:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 1026, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20208:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1027, - "length": null, - "nodeType": "ArrayTypeName", - "src": "20208:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20207:23:0" - }, - "scope": 1151, - "src": "20148:392:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1149, - "nodeType": "Block", - "src": "20885:294:0", - "statements": [ - { - "assignments": [ - 1095 - ], - "declarations": [ - { - "constant": false, - "id": 1095, - "name": "bucket", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "20889:24:0", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - }, - "typeName": { - "contractScope": null, - "id": 1094, - "name": "BidBucket", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 53, - "src": "20889:9:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1099, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1096, - "name": "buckets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61, - "src": "20916:7:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_BidBucket_$53_storage_$", - "typeString": "mapping(uint256 => struct IICO.BidBucket storage ref)" - } - }, - "id": 1098, - "indexExpression": { - "argumentTypes": null, - "id": 1097, - "name": "_bucketid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1088, - "src": "20924:9:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "20916:18:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage", - "typeString": "struct IICO.BidBucket storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20889:45:0" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1105, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1100, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "20942:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1101, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "creator", - "nodeType": "MemberAccess", - "referencedDeclaration": 46, - "src": "20942:14:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "307830", - "id": 1103, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20968:3:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1102, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "20960:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1104, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "20960:12:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "20942:30:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1109, - "nodeType": "IfStatement", - "src": "20938:60:0", - "trueBody": { - "id": 1108, - "nodeType": "Block", - "src": "20974:24:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1106, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "20986:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1093, - "id": 1107, - "nodeType": "Return", - "src": "20979:14:0" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 1118, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1110, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "21002:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1114, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "21023:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1115, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "21023:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1116, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "21023:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1113, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "21012:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 1111, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "21016:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1112, - "length": null, - "nodeType": "ArrayTypeName", - "src": "21016:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 1117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "21012:36:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory", - "typeString": "uint256[] memory" - } - }, - "src": "21002:46:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1119, - "nodeType": "ExpressionStatement", - "src": "21002:46:0" - }, - { - "assignments": [ - 1121 - ], - "declarations": [ - { - "constant": false, - "id": 1121, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "21052:6:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1120, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "21052:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1123, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1122, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21061:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "21052:10:0" - }, - { - "body": { - "id": 1145, - "nodeType": "Block", - "src": "21114:43:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1143, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1136, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "21119:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 1138, - "indexExpression": { - "argumentTypes": null, - "id": 1137, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21127:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "21119:10:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1139, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "21132:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1140, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "21132:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1142, - "indexExpression": { - "argumentTypes": null, - "id": 1141, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21150:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "21132:20:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21119:33:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1144, - "nodeType": "ExpressionStatement", - "src": "21119:33:0" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1128, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21079:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1129, - "name": "bucket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1095, - "src": "21083:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_BidBucket_$53_storage_ptr", - "typeString": "struct IICO.BidBucket storage pointer" - } - }, - "id": 1130, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "maxCapBids", - "nodeType": "MemberAccess", - "referencedDeclaration": 49, - "src": "21083:17:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage", - "typeString": "uint256[] storage ref" - } - }, - "id": 1131, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "21083:24:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21079:28:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1146, - "initializationExpression": { - "expression": { - "argumentTypes": null, - "id": 1126, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1124, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21072:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "30", - "id": 1125, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21076:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "21072:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1127, - "nodeType": "ExpressionStatement", - "src": "21072:5:0" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1134, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "21109:3:0", - "subExpression": { - "argumentTypes": null, - "id": 1133, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "21109:1:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1135, - "nodeType": "ExpressionStatement", - "src": "21109:3:0" - }, - "nodeType": "ForStatement", - "src": "21067:90:0" - }, - { - "expression": { - "argumentTypes": null, - "id": 1147, - "name": "maxBids", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "21168:7:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 1093, - "id": 1148, - "nodeType": "Return", - "src": "21161:14:0" - } - ] - }, - "documentation": "@dev Get the array of maximum cap bids from a bucket.\nThis can be used for getting data for visualization.\n@param _bucketid The ID of the bucket to get the list from.\n@return maxBids The array of maximum cap bids in the bucket.", - "id": 1150, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "bucketMaxBids", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1089, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1088, - "name": "_bucketid", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "20825:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1087, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20825:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20824:16:0" - }, - "payable": false, - "returnParameters": { - "id": 1093, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1092, - "name": "maxBids", - "nodeType": "VariableDeclaration", - "scope": 1150, - "src": "20862:21:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 1090, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "20862:4:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1091, - "length": null, - "nodeType": "ArrayTypeName", - "src": "20862:6:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "20861:23:0" - }, - "scope": 1151, - "src": "20802:377:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1152, - "src": "2160:19023:0" - } - ], - "src": "252:20932:0" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-12-07T22:50:05.626Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/LevelWhitelistedIICO.json b/truebit-implementation/build/contracts/LevelWhitelistedIICO.json deleted file mode 100644 index 4c5b5273..00000000 --- a/truebit-implementation/build/contracts/LevelWhitelistedIICO.json +++ /dev/null @@ -1,6566 +0,0 @@ -{ - "contractName": "LevelWhitelistedIICO", - "abi": [ - { - "constant": true, - "inputs": [], - "name": "tokensForSale", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_token", - "type": "address" - } - ], - "name": "setToken", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "sumAcceptedVirtualContrib", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "cutOffBidID", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "uint256" - } - ], - "name": "contributorBidIDs", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "whitelister", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "baseWhitelist", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_bidID", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "endTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "withdrawalLockTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "beneficiary", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "bids", - "outputs": [ - { - "name": "maxValuation", - "type": "uint256" - }, - { - "name": "personalMin", - "type": "uint256" - }, - { - "name": "contrib", - "type": "uint256" - }, - { - "name": "bonus", - "type": "uint256" - }, - { - "name": "contributor", - "type": "address" - }, - { - "name": "withdrawn", - "type": "bool" - }, - { - "name": "redeemed", - "type": "bool" - }, - { - "name": "active", - "type": "bool" - }, - { - "name": "minBucketID", - "type": "uint256" - }, - { - "name": "maxBucketID", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "finalize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "maxBonus", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "lastBidID", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_contributor", - "type": "address" - } - ], - "name": "totalContrib", - "outputs": [ - { - "name": "contribution", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_bucketid", - "type": "uint256" - } - ], - "name": "bucketMaxBids", - "outputs": [ - { - "name": "maxBids", - "type": "uint256[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "bonus", - "outputs": [ - { - "name": "b", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "startTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "buckets", - "outputs": [ - { - "name": "valuation", - "type": "uint256" - }, - { - "name": "creator", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "maxValuation", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "minValuation", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "maximumBaseContribution", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "finalized", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "numBuckets", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "address" - } - ], - "name": "reinforcedWhitelist", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "increment", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_bidID", - "type": "uint256" - } - ], - "name": "redeem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "sumAcceptedContrib", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_bucketid", - "type": "uint256" - } - ], - "name": "bucketMinBids", - "outputs": [ - { - "name": "minBids", - "type": "uint256[]" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "endFullBonusTime", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_bids", - "type": "uint256[]" - } - ], - "name": "poke", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "_startTime", - "type": "uint256" - }, - { - "name": "_fullBonusLength", - "type": "uint256" - }, - { - "name": "_partialWithdrawalLength", - "type": "uint256" - }, - { - "name": "_withdrawalLockUpLength", - "type": "uint256" - }, - { - "name": "_maxBonus", - "type": "uint256" - }, - { - "name": "_beneficiary", - "type": "address" - }, - { - "name": "_maximumBaseContribution", - "type": "uint256" - }, - { - "name": "_minValuation", - "type": "uint256" - }, - { - "name": "_maxValuation", - "type": "uint256" - }, - { - "name": "_increment", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "contributor", - "type": "address" - }, - { - "indexed": true, - "name": "bidID", - "type": "uint256" - }, - { - "indexed": true, - "name": "time", - "type": "uint256" - } - ], - "name": "BidSubmitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "poker", - "type": "address" - }, - { - "indexed": true, - "name": "bidID", - "type": "uint256" - } - ], - "name": "Poked", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "name": "_maxValuation", - "type": "uint256" - }, - { - "name": "_next", - "type": "uint256" - } - ], - "name": "submitBid", - "outputs": [], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_whitelister", - "type": "address" - } - ], - "name": "setWhitelister", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_buyersToWhitelist", - "type": "address[]" - } - ], - "name": "addBaseWhitelist", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_buyersToWhitelist", - "type": "address[]" - } - ], - "name": "addReinforcedWhitelist", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_buyersToRemove", - "type": "address[]" - } - ], - "name": "removeBaseWhitelist", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_buyersToRemove", - "type": "address[]" - } - ], - "name": "removeReinforcedWhitelist", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405260006005557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6012553480156200003a57600080fd5b506040516101408062002f0583398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050898989898989888888336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860068190555087600654016007819055508660075401600881905550856008540160098190555084600c8190555083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e8190555082600d8190555080600f819055506001600f54600d54600e54038115156200019d57fe5b0401601081905550608060405190810160405280600d5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015620002065781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156200023d5781602001602082028038833980820191505090505b50815250600360008081526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190620002c39291906200044c565b506060820151816003019080519060200190620002e29291906200044c565b50905050608060405190810160405280600e5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016000604051908082528060200260200182016040528015620003475781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156200037e5781602001602082028038833980820191505090505b508152506003600060016010540381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190620004099291906200044c565b506060820151816003019080519060200190620004289291906200044c565b509050505050505050505050508360158190555050505050505050505050620004c6565b8280548282559060005260206000209081019282156200048b579160200282015b828111156200048a5782518255916020019190600101906200046d565b5b5090506200049a91906200049e565b5090565b620004c391905b80821115620004bf576000816000905550600101620004a5565b5090565b90565b612a2f80620004d66000396000f3006080604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063106c6441146103cc57806312aef8c314610432578063144fa6d71461045d578063152713b3146104a05780631552cb04146104cb5780631ae9fe6a146105315780631def6bad1461055c57806322758a4a146105bd5780632c2f93d5146106145780632e1a7d4d1461066f5780633197cbb61461069c57806334f732e8146106c757806338af3eed146106f25780634423c5f1146107495780634bb278f31461080157806354c5b6961461081857806357f196fa146108435780635e7c85b11461086e57806372a2fee0146108c557806375b4d78c1461094757806378e979251461097257806380999b711461099d5780638da5cb5b14610a035780639b51fb0d14610a5a578063a79fb0c214610ace578063aac1660314610af9578063b196aabb14610b24578063b3f05b9714610b4f578063b821da1b14610b7e578063bfdcc9a214610ba8578063c1f6004514610bd3578063d09de08a14610c2e578063db006a7514610c59578063dc382cbf14610c86578063ea9ad4a514610cb1578063f0d6cc7014610d33578063f5e7f5d914610d5e578063f98f5b9214610dc4578063fc0c546a14610e07578063ffbd26ce14610e5e575b600080341415801561020257506006544210155b801561020f575060095442105b156102635761025e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ec4565b6103c9565b60003414801561027f5750601160009054906101000a900460ff165b156103c357600090505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156103be5760026000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561032357fe5b9060005260206000200154815260200190815260200160002060040160159054906101000a900460ff1615156103b3576103b2600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156103a257fe5b9060005260206000200154610f96565b5b806001019050610289565b6103c8565b600080fd5b5b50005b3480156103d857600080fd5b5061043060048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611224565b005b34801561043e57600080fd5b5061044761130e565b6040518082815260200191505060405180910390f35b34801561046957600080fd5b5061049e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611314565b005b3480156104ac57600080fd5b506104b561150e565b6040518082815260200191505060405180910390f35b3480156104d757600080fd5b5061052f60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611514565b005b34801561053d57600080fd5b506105466115fe565b6040518082815260200191505060405180910390f35b34801561056857600080fd5b506105a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611604565b6040518082815260200191505060405180910390f35b3480156105c957600080fd5b506105d2611634565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062057600080fd5b50610655600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165a565b604051808215151515815260200191505060405180910390f35b34801561067b57600080fd5b5061069a6004803603810190808035906020019092919050505061167a565b005b3480156106a857600080fd5b506106b1611857565b6040518082815260200191505060405180910390f35b3480156106d357600080fd5b506106dc61185d565b6040518082815260200191505060405180910390f35b3480156106fe57600080fd5b50610707611863565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075557600080fd5b5061077460048036038101908080359060200190929190505050611889565b604051808b81526020018a81526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018615151515815260200185151515158152602001841515151581526020018381526020018281526020019a505050505050505050505060405180910390f35b34801561080d57600080fd5b50610816611924565b005b34801561082457600080fd5b5061082d6119c8565b6040518082815260200191505060405180910390f35b34801561084f57600080fd5b506108586119ce565b6040518082815260200191505060405180910390f35b34801561087a57600080fd5b506108af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d4565b6040518082815260200191505060405180910390f35b3480156108d157600080fd5b506108f060048036038101908080359060200190929190505050611aa8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610933578082015181840152602081019050610918565b505050509050019250505060405180910390f35b34801561095357600080fd5b5061095c611bc4565b6040518082815260200191505060405180910390f35b34801561097e57600080fd5b50610987611c0d565b6040518082815260200191505060405180910390f35b3480156109a957600080fd5b50610a0160048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611c13565b005b348015610a0f57600080fd5b50610a18611cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a6657600080fd5b50610a8560048036038101908080359060200190929190505050611d22565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b348015610ada57600080fd5b50610ae3611d66565b6040518082815260200191505060405180910390f35b348015610b0557600080fd5b50610b0e611d6c565b6040518082815260200191505060405180910390f35b348015610b3057600080fd5b50610b39611d72565b6040518082815260200191505060405180910390f35b348015610b5b57600080fd5b50610b64611d78565b604051808215151515815260200191505060405180910390f35b610ba66004803603810190808035906020019092919080359060200190929190505050610ec4565b005b348015610bb457600080fd5b50610bbd611d8b565b6040518082815260200191505060405180910390f35b348015610bdf57600080fd5b50610c14600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d91565b604051808215151515815260200191505060405180910390f35b348015610c3a57600080fd5b50610c43611db1565b6040518082815260200191505060405180910390f35b348015610c6557600080fd5b50610c8460048036038101908080359060200190929190505050610f96565b005b348015610c9257600080fd5b50610c9b611db7565b6040518082815260200191505060405180910390f35b348015610cbd57600080fd5b50610cdc60048036038101908080359060200190929190505050611dbd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d1f578082015181840152602081019050610d04565b505050509050019250505060405180910390f35b348015610d3f57600080fd5b50610d48611ed9565b6040518082815260200191505060405180910390f35b348015610d6a57600080fd5b50610dc260048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611edf565b005b348015610dd057600080fd5b50610e05600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a8565b005b348015610e1357600080fd5b50610e1c612147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e6a57600080fd5b50610ec26004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061216d565b005b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610f7d5750601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610f7c5750601554610f77336119d4565b340111155b5b1515610f8857600080fd5b610f928282612257565b5050565b6000806002600084815260200190815260200160002091506002600060125481526020019081526020016000209050601160009054906101000a900460ff161515610fe057600080fd5b8160040160159054906101000a900460ff16151515610ffe57600080fd5b60018260040160156101000a81548160ff02191690831515021790555080600001548260000154118061104657508060000154826000015414801561104557506012548310155b5b156111af57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601454633b9aca0086600301548760020154028115156110ca57fe5b04866002015401600b54028115156110de57fe5b046040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561116457600080fd5b505af1158015611178573d6000803e3d6000fd5b505050506040513d602081101561118e57600080fd5b810190808051906020019092919050505015156111aa57600080fd5b61121f565b8160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc83600201549081150290604051600060405180830381858888f1935050505015801561121d573d6000803e3d6000fd5b505b505050565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561128257600080fd5b600090505b815181101561130a5760006017600084848151811015156112a457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611287565b5050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561136f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156113cc57600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b505050506040513d60208110156114f457600080fd5b8101908080519060200190929190505050600b8190555050565b60145481565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561157257600080fd5b600090505b81518110156115fa57600160166000848481518110151561159457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611577565b5050565b60125481565b60046020528160005260406000208181548110151561161f57fe5b90600052602060002001600091509150505481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b6000806002600084815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116f057600080fd5b6008544210151561170057600080fd5b8160040160149054906101000a900460ff1615151561171e57600080fd5b60018260040160146101000a81548160ff02191690831515021790555060008260040160166101000a81548160ff02191690831515021790555060075442106117825760075460085403426008540383600201540281151561177c57fe5b04611788565b81600201545b90508160020154811115151561179a57fe5b808260020160008282540392505081905550600360028360030154028115156117bf57fe5b0482600301819055508060136000828254039250508190555080633b9aca00600202826003028460020154018460030154028115156117fa57fe5b04016014600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611851573d6000803e3d6000fd5b50505050565b60095481565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060040160159054906101000a900460ff16908060040160169054906101000a900460ff1690806005015490806006015490508a565b600954421015151561193557600080fd5b601160009054906101000a900460ff1615151561195157600080fd5b6001601160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f1935050505050565b600c5481565b60055481565b600080600090505b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611aa25760026000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611a7657fe5b9060005260206000200154815260200190815260200160002060020154820191508060010190506119dc565b50919050565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b2357829250611bbd565b8160020180549050604051908082528060200260200182016040528015611b595781602001602082028038833980820191505090505b50925060009050600090505b8160020180549050811015611bb9578160020181815481101515611b8557fe5b90600052602060002001548382815181101515611b9e57fe5b90602001906020020181815250508080600101915050611b65565b8292505b5050919050565b6000600754421015611bda57600c549050611c0a565b600954421115611bed5760009050611c0a565b600754600954034260095403600c5402811515611c0657fe5b0490505b90565b60065481565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c7157600080fd5b600090505b8151811015611cf9576000601660008484815181101515611c9357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611c76565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600e5481565b600d5481565b60155481565b601160009054906101000a900460ff1681565b60105481565b60176020528060005260406000206000915054906101000a900460ff1681565b600f5481565b60135481565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e3857829250611ed2565b8160030180549050604051908082528060200260200182016040528015611e6e5781602001602082028038833980820191505090505b50925060009050600090505b8160030180549050811015611ece578160030181815481101515611e9a57fe5b90600052602060002001548382815181101515611eb357fe5b90602001906020020181815250508080600101915050611e7a565b8292505b5050919050565b60075481565b6000806000806013549350601454925060009150600260008081526020019081526020016000209050600091505b8451821015611f7e57600260008684815181101515611f2857fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611f6757806002015484039350611f71565b8060020154840193505b8180600101925050611f0d565b600091505b845182101561202557600260008684815181101515611f9e57fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611ff4578060000154841180611fe45750806001015484105b1515611fef57600080fd5b612018565b8060000154841115801561200c575080600101548410155b151561201757600080fd5b5b8180600101925050611f83565b600091505b845182101561209a5760026000868481518110151561204557fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff16158160040160166101000a81548160ff021916908315150217905550818060010192505061202a565b836013819055505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561210357600080fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156121cb57600080fd5b600090505b81518110156122535760016017600084848151811015156121ed57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506121d0565b5050565b6000806000806006544210158015612270575060095442105b151561227b57600080fd5b600d54861015801561228c57508486115b151561229757600080fd5b6000600f54600d5488038115156122aa57fe5b061415156122b757600080fd5b6000600f54600d5487038115156122ca57fe5b061415156122d757600080fd5b600f54600d5486038115156122e857fe5b049350600f54600d5487038115156122fc57fe5b049250600073ffffffffffffffffffffffffffffffffffffffff166003600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124a4576080604051908101604052808681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160006040519080825280602002602001820160405280156123c85781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156123fe5781602001602082028038833980820191505090505b50815250600360008681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190612482929190612991565b50606082015181600301908051906020019061249f929190612991565b509050505b600073ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612649576080604051908101604052808781526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600060405190808252806020026020018201604052801561256d5781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156125a35781602001602082028038833980820191505090505b50815250600360008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190612627929190612991565b506060820151816003019080519060200190612644929190612991565b509050505b6003600084815260200190815260200160002091506005600081546001019190508190555061014060405190810160405280878152602001868152602001348152602001612695611bc4565b81526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160001515815260200160001515815260200187346013540111806126dd5750863460135401105b6126e85760016126eb565b60005b15158152602001858152602001848152506002600060055481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c08201518160040160156101000a81548160ff02191690831515021790555060e08201518160040160166101000a81548160ff0219169083151502179055506101008201518160050155610120820151816006015590505060026000600554815260200190815260200160002090508060020154601360008282540192505081905550633b9aca00816003015482600201540281151561283d57fe5b04816002015401601460008282540192505081905550600360008481526020019081526020016000206002016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600360008581526020019081526020016000206003016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005549080600181540180825580915050906001820390600052602060002001600090919290919091505550426005543373ffffffffffffffffffffffffffffffffffffffff167f84bee513033536a8de8a8260e2674a4a3eebd61ddce74615fdeca8a1499f5efe60405160405180910390a4505050505050565b8280548282559060005260206000209081019282156129cd579160200282015b828111156129cc5782518255916020019190600101906129b1565b5b5090506129da91906129de565b5090565b612a0091905b808211156129fc5760008160009055506001016129e4565b5090565b905600a165627a7a72305820fdeb2f87303b5b9625beec04c4351aabc7c8463e5e58198841e92982d516bbab0029", - "deployedBytecode": "0x6080604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063106c6441146103cc57806312aef8c314610432578063144fa6d71461045d578063152713b3146104a05780631552cb04146104cb5780631ae9fe6a146105315780631def6bad1461055c57806322758a4a146105bd5780632c2f93d5146106145780632e1a7d4d1461066f5780633197cbb61461069c57806334f732e8146106c757806338af3eed146106f25780634423c5f1146107495780634bb278f31461080157806354c5b6961461081857806357f196fa146108435780635e7c85b11461086e57806372a2fee0146108c557806375b4d78c1461094757806378e979251461097257806380999b711461099d5780638da5cb5b14610a035780639b51fb0d14610a5a578063a79fb0c214610ace578063aac1660314610af9578063b196aabb14610b24578063b3f05b9714610b4f578063b821da1b14610b7e578063bfdcc9a214610ba8578063c1f6004514610bd3578063d09de08a14610c2e578063db006a7514610c59578063dc382cbf14610c86578063ea9ad4a514610cb1578063f0d6cc7014610d33578063f5e7f5d914610d5e578063f98f5b9214610dc4578063fc0c546a14610e07578063ffbd26ce14610e5e575b600080341415801561020257506006544210155b801561020f575060095442105b156102635761025e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ec4565b6103c9565b60003414801561027f5750601160009054906101000a900460ff165b156103c357600090505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156103be5760026000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561032357fe5b9060005260206000200154815260200190815260200160002060040160159054906101000a900460ff1615156103b3576103b2600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811015156103a257fe5b9060005260206000200154610f96565b5b806001019050610289565b6103c8565b600080fd5b5b50005b3480156103d857600080fd5b5061043060048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611224565b005b34801561043e57600080fd5b5061044761130e565b6040518082815260200191505060405180910390f35b34801561046957600080fd5b5061049e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611314565b005b3480156104ac57600080fd5b506104b561150e565b6040518082815260200191505060405180910390f35b3480156104d757600080fd5b5061052f60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611514565b005b34801561053d57600080fd5b506105466115fe565b6040518082815260200191505060405180910390f35b34801561056857600080fd5b506105a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611604565b6040518082815260200191505060405180910390f35b3480156105c957600080fd5b506105d2611634565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062057600080fd5b50610655600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165a565b604051808215151515815260200191505060405180910390f35b34801561067b57600080fd5b5061069a6004803603810190808035906020019092919050505061167a565b005b3480156106a857600080fd5b506106b1611857565b6040518082815260200191505060405180910390f35b3480156106d357600080fd5b506106dc61185d565b6040518082815260200191505060405180910390f35b3480156106fe57600080fd5b50610707611863565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075557600080fd5b5061077460048036038101908080359060200190929190505050611889565b604051808b81526020018a81526020018981526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018615151515815260200185151515158152602001841515151581526020018381526020018281526020019a505050505050505050505060405180910390f35b34801561080d57600080fd5b50610816611924565b005b34801561082457600080fd5b5061082d6119c8565b6040518082815260200191505060405180910390f35b34801561084f57600080fd5b506108586119ce565b6040518082815260200191505060405180910390f35b34801561087a57600080fd5b506108af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d4565b6040518082815260200191505060405180910390f35b3480156108d157600080fd5b506108f060048036038101908080359060200190929190505050611aa8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610933578082015181840152602081019050610918565b505050509050019250505060405180910390f35b34801561095357600080fd5b5061095c611bc4565b6040518082815260200191505060405180910390f35b34801561097e57600080fd5b50610987611c0d565b6040518082815260200191505060405180910390f35b3480156109a957600080fd5b50610a0160048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611c13565b005b348015610a0f57600080fd5b50610a18611cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a6657600080fd5b50610a8560048036038101908080359060200190929190505050611d22565b604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b348015610ada57600080fd5b50610ae3611d66565b6040518082815260200191505060405180910390f35b348015610b0557600080fd5b50610b0e611d6c565b6040518082815260200191505060405180910390f35b348015610b3057600080fd5b50610b39611d72565b6040518082815260200191505060405180910390f35b348015610b5b57600080fd5b50610b64611d78565b604051808215151515815260200191505060405180910390f35b610ba66004803603810190808035906020019092919080359060200190929190505050610ec4565b005b348015610bb457600080fd5b50610bbd611d8b565b6040518082815260200191505060405180910390f35b348015610bdf57600080fd5b50610c14600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d91565b604051808215151515815260200191505060405180910390f35b348015610c3a57600080fd5b50610c43611db1565b6040518082815260200191505060405180910390f35b348015610c6557600080fd5b50610c8460048036038101908080359060200190929190505050610f96565b005b348015610c9257600080fd5b50610c9b611db7565b6040518082815260200191505060405180910390f35b348015610cbd57600080fd5b50610cdc60048036038101908080359060200190929190505050611dbd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d1f578082015181840152602081019050610d04565b505050509050019250505060405180910390f35b348015610d3f57600080fd5b50610d48611ed9565b6040518082815260200191505060405180910390f35b348015610d6a57600080fd5b50610dc260048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611edf565b005b348015610dd057600080fd5b50610e05600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120a8565b005b348015610e1357600080fd5b50610e1c612147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e6a57600080fd5b50610ec26004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929050505061216d565b005b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610f7d5750601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610f7c5750601554610f77336119d4565b340111155b5b1515610f8857600080fd5b610f928282612257565b5050565b6000806002600084815260200190815260200160002091506002600060125481526020019081526020016000209050601160009054906101000a900460ff161515610fe057600080fd5b8160040160159054906101000a900460ff16151515610ffe57600080fd5b60018260040160156101000a81548160ff02191690831515021790555080600001548260000154118061104657508060000154826000015414801561104557506012548310155b5b156111af57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601454633b9aca0086600301548760020154028115156110ca57fe5b04866002015401600b54028115156110de57fe5b046040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561116457600080fd5b505af1158015611178573d6000803e3d6000fd5b505050506040513d602081101561118e57600080fd5b810190808051906020019092919050505015156111aa57600080fd5b61121f565b8160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc83600201549081150290604051600060405180830381858888f1935050505015801561121d573d6000803e3d6000fd5b505b505050565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561128257600080fd5b600090505b815181101561130a5760006017600084848151811015156112a457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611287565b5050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561136f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156113cc57600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b505050506040513d60208110156114f457600080fd5b8101908080519060200190929190505050600b8190555050565b60145481565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561157257600080fd5b600090505b81518110156115fa57600160166000848481518110151561159457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611577565b5050565b60125481565b60046020528160005260406000208181548110151561161f57fe5b90600052602060002001600091509150505481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b6000806002600084815260200190815260200160002091508160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116f057600080fd5b6008544210151561170057600080fd5b8160040160149054906101000a900460ff1615151561171e57600080fd5b60018260040160146101000a81548160ff02191690831515021790555060008260040160166101000a81548160ff02191690831515021790555060075442106117825760075460085403426008540383600201540281151561177c57fe5b04611788565b81600201545b90508160020154811115151561179a57fe5b808260020160008282540392505081905550600360028360030154028115156117bf57fe5b0482600301819055508060136000828254039250508190555080633b9aca00600202826003028460020154018460030154028115156117fa57fe5b04016014600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611851573d6000803e3d6000fd5b50505050565b60095481565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160149054906101000a900460ff16908060040160159054906101000a900460ff16908060040160169054906101000a900460ff1690806005015490806006015490508a565b600954421015151561193557600080fd5b601160009054906101000a900460ff1615151561195157600080fd5b6001601160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f1935050505050565b600c5481565b60055481565b600080600090505b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611aa25760026000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611a7657fe5b9060005260206000200154815260200190815260200160002060020154820191508060010190506119dc565b50919050565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b2357829250611bbd565b8160020180549050604051908082528060200260200182016040528015611b595781602001602082028038833980820191505090505b50925060009050600090505b8160020180549050811015611bb9578160020181815481101515611b8557fe5b90600052602060002001548382815181101515611b9e57fe5b90602001906020020181815250508080600101915050611b65565b8292505b5050919050565b6000600754421015611bda57600c549050611c0a565b600954421115611bed5760009050611c0a565b600754600954034260095403600c5402811515611c0657fe5b0490505b90565b60065481565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c7157600080fd5b600090505b8151811015611cf9576000601660008484815181101515611c9357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050611c76565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600e5481565b600d5481565b60155481565b601160009054906101000a900460ff1681565b60105481565b60176020528060005260406000206000915054906101000a900460ff1681565b600f5481565b60135481565b6060600080600360008581526020019081526020016000209150600073ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e3857829250611ed2565b8160030180549050604051908082528060200260200182016040528015611e6e5781602001602082028038833980820191505090505b50925060009050600090505b8160030180549050811015611ece578160030181815481101515611e9a57fe5b90600052602060002001548382815181101515611eb357fe5b90602001906020020181815250508080600101915050611e7a565b8292505b5050919050565b60075481565b6000806000806013549350601454925060009150600260008081526020019081526020016000209050600091505b8451821015611f7e57600260008684815181101515611f2857fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611f6757806002015484039350611f71565b8060020154840193505b8180600101925050611f0d565b600091505b845182101561202557600260008684815181101515611f9e57fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff1615611ff4578060000154841180611fe45750806001015484105b1515611fef57600080fd5b612018565b8060000154841115801561200c575080600101548410155b151561201757600080fd5b5b8180600101925050611f83565b600091505b845182101561209a5760026000868481518110151561204557fe5b90602001906020020151815260200190815260200160002090508060040160169054906101000a900460ff16158160040160166101000a81548160ff021916908315150217905550818060010192505061202a565b836013819055505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561210357600080fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003373ffffffffffffffffffffffffffffffffffffffff16601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156121cb57600080fd5b600090505b81518110156122535760016017600084848151811015156121ed57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506121d0565b5050565b6000806000806006544210158015612270575060095442105b151561227b57600080fd5b600d54861015801561228c57508486115b151561229757600080fd5b6000600f54600d5488038115156122aa57fe5b061415156122b757600080fd5b6000600f54600d5487038115156122ca57fe5b061415156122d757600080fd5b600f54600d5486038115156122e857fe5b049350600f54600d5487038115156122fc57fe5b049250600073ffffffffffffffffffffffffffffffffffffffff166003600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124a4576080604051908101604052808681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160006040519080825280602002602001820160405280156123c85781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156123fe5781602001602082028038833980820191505090505b50815250600360008681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190612482929190612991565b50606082015181600301908051906020019061249f929190612991565b509050505b600073ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612649576080604051908101604052808781526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600060405190808252806020026020018201604052801561256d5781602001602082028038833980820191505090505b50815260200160006040519080825280602002602001820160405280156125a35781602001602082028038833980820191505090505b50815250600360008581526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190612627929190612991565b506060820151816003019080519060200190612644929190612991565b509050505b6003600084815260200190815260200160002091506005600081546001019190508190555061014060405190810160405280878152602001868152602001348152602001612695611bc4565b81526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160001515815260200160001515815260200187346013540111806126dd5750863460135401105b6126e85760016126eb565b60005b15158152602001858152602001848152506002600060055481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160040160146101000a81548160ff02191690831515021790555060c08201518160040160156101000a81548160ff02191690831515021790555060e08201518160040160166101000a81548160ff0219169083151502179055506101008201518160050155610120820151816006015590505060026000600554815260200190815260200160002090508060020154601360008282540192505081905550633b9aca00816003015482600201540281151561283d57fe5b04816002015401601460008282540192505081905550600360008481526020019081526020016000206002016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600360008581526020019081526020016000206003016005549080600181540180825580915050906001820390600052602060002001600090919290919091505550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005549080600181540180825580915050906001820390600052602060002001600090919290919091505550426005543373ffffffffffffffffffffffffffffffffffffffff167f84bee513033536a8de8a8260e2674a4a3eebd61ddce74615fdeca8a1499f5efe60405160405180910390a4505050505050565b8280548282559060005260206000209081019282156129cd579160200282015b828111156129cc5782518255916020019190600101906129b1565b5b5090506129da91906129de565b5090565b612a0091905b808211156129fc5760008160009055506001016129e4565b5090565b905600a165627a7a72305820fdeb2f87303b5b9625beec04c4351aabc7c8463e5e58198841e92982d516bbab0029", - "sourceMap": "401:4446:1:-;;;4381:1:0;4357:25;;2526:2;5566:30;;1800:474:1;8:9:-1;5:2;;;30:1;27;20:12;5:2;1800:474:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2062:10;2073:16;2090:24;2115:23;2139:9;2149:12;2162:13;2176;2190:10;7197::0;7189:5;;:18;;;;;;;;;;;;;;;;;;7229:10;7217:9;:22;;;;7280:16;7268:9;;:28;7249:16;:47;;;;7346:24;7327:16;;:43;7306:18;:64;;;;7411:23;7390:18;;:44;7380:7;:54;;;;7455:9;7444:8;:20;;;;7488:12;7474:11;;:26;;;;;;;;;;;;;;;;;;7525:13;7510:12;:28;;;;7563:13;7548:12;:28;;;;7598:10;7586:9;:22;;;;7677:1;7664:9;;7648:12;;7633;;:27;7632:41;;;;;;;;7631:47;7618:10;:60;;;;7757:174;;;;;;;;;7792:12;;7757:174;;;;7910:10;7757:174;;;;;;7841:1;7830:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;7830:13:0;;;;7757:174;;;;7885:1;7874:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;7874:13:0;;;;7757:174;;;7744:7;:10;7752:1;7744:10;;;;;;;;;;;:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;7972:174;;;;;;;;;8007:12;;7972:174;;;;8125:10;7972:174;;;;;;8056:1;8045:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8045:13:0;;;;7972:174;;;;8100:1;8089:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8089:13:0;;;;7972:174;;;7942:7;:27;7966:1;7955:10;;:12;7942:27;;;;;;;;;;;:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;6962:1191;;;;;;;;;2243:24:1;2219:23;:48;;;;1800:474;;;;;;;;;;401:4446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", - "deployedSourceMap": "401:4446:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17187:6:0;16898:1;16885:9;:14;;:34;;;;;16910:9;;16903:3;:16;;16885:34;:51;;;;;16929:7;;16923:3;:13;16885:51;16881:649;;;17016:25;2659:2;2526;17016:9;:25::i;:::-;16881:649;;;17073:1;17060:9;:14;:27;;;;;17078:9;;;;;;;;;;;17060:27;17056:474;;;17196:1;17187:10;;17182:223;17203:17;:29;17221:10;17203:29;;;;;;;;;;;;;;;:36;;;;17199:1;:40;17182:223;;;17281:4;:38;17286:17;:29;17304:10;17286:29;;;;;;;;;;;;;;;17316:1;17286:32;;;;;;;;;;;;;;;;;;17281:38;;;;;;;;;;;:47;;;;;;;;;;;;17280:48;17276:114;;;17350:40;17357:17;:29;17375:10;17357:29;;;;;;;;;;;;;;;17387:1;17357:32;;;;;;;;;;;;;;;;;;17350:6;:40::i;:::-;17276:114;17241:3;;;;;17182:223;;;17056:474;;;17522:8;;;17056:474;16881:649;16844:693;401:4446:1;4642:202;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4642:202:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4883:25:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4883:25:0;;;;;;;;;;;;;;;;;;;;;;;8315:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8315:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5749:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5749:37:0;;;;;;;;;;;;;;;;;;;;;;;3631:195:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3631:195:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5566:30:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5566:30:0;;;;;;;;;;;;;;;;;;;;;;;4255:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4255:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;739:26:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;739:26:1;;;;;;;;;;;;;;;;;;;;;;;;;;;491:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;491:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11526:1060:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11526:1060:0;;;;;;;;;;;;;;;;;;;;;;;;;;4736:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4736:19:0;;;;;;;;;;;;;;;;;;;;;;;4619:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4619:30:0;;;;;;;;;;;;;;;;;;;;;;;2275:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2275:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4120:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4120:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15335:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15335:142:0;;;;;;4975:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4975:20:0;;;;;;;;;;;;;;;;;;;;;;;4357:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4357:25:0;;;;;;;;;;;;;;;;;;;;;;;19642:243;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19642:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20802:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20802:377:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20802:377:0;;;;;;;;;;;;;;;;;18757:411;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18757:411:0;;;;;;;;;;;;;;;;;;;;;;;4462:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4462:21:0;;;;;;;;;;;;;;;;;;;;;;;4308:190:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4308:190:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2207:20:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2207:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4180:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4180:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5180:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5180:24:0;;;;;;;;;;;;;;;;;;;;;;;5150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5150:24:0;;;;;;;;;;;;;;;;;;;;;;;450:35:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;450:35:1;;;;;;;;;;;;;;;;;;;;;;;5416:21:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5416:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2884:415:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:22:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5237:22:0;;;;;;;;;;;;;;;;;;;;;;;604:52:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;604:52:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5210:21:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5210:21:0;;;;;;;;;;;;;;;;;;;;;;;15721:731;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15721:731:0;;;;;;;;;;;;;;;;;;;;;;;;;;5668:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5668:30:0;;;;;;;;;;;;;;;;;;;;;;;20148:392;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20148:392:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20148:392:0;;;;;;;;;;;;;;;;;4535:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4535:28:0;;;;;;;;;;;;;;;;;;;;;;;17665:788;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17665:788:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3396:104:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3396:104:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;4807:18:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4807:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:207:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3963:207:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2884:415;2968:19;:31;2988:10;2968:31;;;;;;;;;;;;;;;;;;;;;;;;;:131;;;;3004:13;:25;3018:10;3004:25;;;;;;;;;;;;;;;;;;;;;;;;;:94;;;;;3074:23;;3046:24;3059:10;3046:12;:24::i;:::-;3034:9;:36;:63;;3004:94;2968:131;2960:140;;;;;;;;3256:36;3272:13;3286:5;3256:15;:36::i;:::-;2884:415;;:::o;15721:731:0:-;15767:15;15807:21;15785:4;:12;15790:6;15785:12;;;;;;;;;;;15767:30;;15831:4;:17;15836:11;;15831:17;;;;;;;;;;;15807:41;;15866:9;;;;;;;;;;;15858:18;;;;;;;;15895:3;:12;;;;;;;;;;;;15894:13;15886:22;;;;;;;;15932:4;15919:3;:12;;;:17;;;;;;;;;;;;;;;;;;15969:9;:22;;;15950:3;:16;;;:41;:114;;;;16016:9;:22;;;15996:3;:16;;;:42;:67;;;;;16052:11;;16042:6;:21;;15996:67;15950:114;15946:499;;;16125:5;;;;;;;;;;;:14;;;16140:3;:15;;;;;;;;;;;;16235:25;;5295:3;16204;:9;;;16190:3;:11;;;:23;16189:41;;;;;;;;16175:3;:11;;;:55;16158:13;;:73;16157:103;;;;;;;;16125:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16125:136:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16125:136:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16125:136:0;;;;;;;;;;;;;;;;16117:145;;;;;;;;15946:499;;;16408:3;:15;;;;;;;;;;;;:24;;:37;16433:3;:11;;;16408:37;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16408:37:0;15946:499;15721:731;;;:::o;4642:202:1:-;4741:6;889:10;874:25;;:11;;;;;;;;;;;:25;;;866:34;;;;;;;;4748:1;4741:8;;4737:100;4752:15;:22;4750:1;:24;4737:100;;;4832:5;4792:19;:39;4812:15;4828:1;4812:18;;;;;;;;;;;;;;;;;;4792:39;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;4775:3;;;;;4737:100;;;4642:202;;:::o;4883:25:0:-;;;;:::o;8315:218::-;6100:10;6091:19;;:5;;;;;;;;;;;:19;;;6083:28;;;;;;;;8408:1;8382:28;;8390:5;;;;;;;;;;;8382:28;;;8374:37;;;;;;;;8473:6;8465:5;;:14;;;;;;;;;;;;;;;;;;8505:5;;;;;;;;;;;:15;;;8521:4;8505:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8505:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8505:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8505:21:0;;;;;;;;;;;;;;;;8489:13;:37;;;;8315:218;:::o;5749:37::-;;;;:::o;3631:195:1:-;3724:6;889:10;874:25;;:11;;;;;;;;;;;:25;;;866:34;;;;;;;;3731:1;3724:8;;3720:99;3735:18;:25;3733:1;:27;3720:99;;;3815:4;3778:13;:36;3792:18;3811:1;3792:21;;;;;;;;;;;;;;;;;;3778:36;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;3761:3;;;;;3720:99;;;3631:195;;:::o;5566:30:0:-;;;;:::o;4255:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;739:26:1:-;;;;;;;;;;;;;:::o;491:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;11526:1060:0:-;11574:15;11949:11;11592:4;:12;11597:6;11592:12;;;;;;;;;;;11574:30;;11636:3;:15;;;;;;;;;;;;11622:29;;:10;:29;;;11614:38;;;;;;;;11676:18;;11670:3;:24;11662:33;;;;;;;;11714:3;:13;;;;;;;;;;;;11713:14;11705:23;;;;;;;;11755:4;11739:3;:13;;;:20;;;;;;;;;;;;;;;;;;11776:5;11763:3;:10;;;:18;;;;;;;;;;;;;;;;;;11970:16;;11964:3;:22;11963:125;;12071:16;;12050:18;;:37;12041:3;12020:18;;:24;12005:3;:11;;;:40;12004:84;;;;;;;;11963:125;;;11990:3;:11;;;11963:125;11949:139;;12115:3;:11;;;12105:6;:21;;12098:29;;;;;;12297:6;12282:3;:11;;;:21;;;;;;;;;;;12343:1;12338;12326:3;:9;;;:13;12325:19;;;;;;;;12313:3;:9;;:31;;;;12433:6;12411:18;;:28;;;;;;;;;;;12535:6;5295:3;12514:1;:17;12502:6;12500:1;:8;12486:3;:11;;;:22;12473:3;:9;;;:36;12472:60;;;;;;;;:69;12443:25;;:98;;;;;;;;;;;12552:10;:19;;:27;12572:6;12552:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12552:27:0;11526:1060;;;:::o;4736:19::-;;;;:::o;4619:30::-;;;;:::o;2275:26::-;;;;;;;;;;;;;:::o;4120:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15335:142::-;15381:7;;15374:3;:14;;15366:23;;;;;;;;15402:9;;;;;;;;;;;15401:10;15393:19;;;;;;;;15429:4;15417:9;;:16;;;;;;;;;;;;;;;;;;15437:11;;;;;;;;;;;:16;;:36;15454:18;;15437:36;;;;;;;;;;;;;;;;;;;;;;;;15335:142::o;4975:20::-;;;;:::o;4357:25::-;;;;:::o;19642:243::-;19707:17;19741:6;19750:1;19741:10;;19736:142;19757:17;:31;19775:12;19757:31;;;;;;;;;;;;;;;:38;;;;19753:1;:42;19736:142;;;19830:4;:40;19835:17;:31;19853:12;19835:31;;;;;;;;;;;;;;;19867:1;19835:34;;;;;;;;;;;;;;;;;;19830:40;;;;;;;;;;;:48;;;19814:64;;;;19797:3;;;;;19736:142;;;19642:243;;;;:::o;20802:377::-;20862:21;20889:24;21052:6;20916:7;:18;20924:9;20916:18;;;;;;;;;;;20889:45;;20968:3;20942:30;;:6;:14;;;;;;;;;;;;:30;;;20938:60;;;20986:7;20979:14;;;;20938:60;21023:6;:17;;:24;;;;21012:36;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;21012:36:0;;;;21002:46;;21061:1;21052:10;;21076:1;21072:5;;21067:90;21083:6;:17;;:24;;;;21079:1;:28;21067:90;;;21132:6;:17;;21150:1;21132:20;;;;;;;;;;;;;;;;;;21119:7;21127:1;21119:10;;;;;;;;;;;;;;;;;:33;;;;;21109:3;;;;;;;21067:90;;;21168:7;21161:14;;20802:377;;;;;;:::o;18757:411::-;18794:6;18822:16;;18816:3;:22;18812:349;;;18874:8;;18867:15;;;;18812:349;18907:7;;18901:3;:13;18897:264;;;18969:1;18962:8;;;;18897:264;19144:16;;19134:7;;:26;19125:3;19115:7;;:13;19103:8;;:26;19102:59;;;;;;;;19095:66;;18757:411;;:::o;4462:21::-;;;;:::o;4308:190:1:-;4401:6;889:10;874:25;;:11;;;;;;;;;;;:25;;;866:34;;;;;;;;4408:1;4401:8;;4397:94;4412:15;:22;4410:1;:24;4397:94;;;4486:5;4452:13;:33;4466:15;4482:1;4466:18;;;;;;;;;;;;;;;;;;4452:33;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;4435:3;;;;;4397:94;;;4308:190;;:::o;2207:20:0:-;;;;;;;;;;;;;:::o;4180:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5180:24::-;;;;:::o;5150:::-;;;;:::o;450:35:1:-;;;;:::o;5416:21:0:-;;;;;;;;;;;;;:::o;5237:22::-;;;;:::o;604:52:1:-;;;;;;;;;;;;;;;;;;;;;;:::o;5210:21:0:-;;;;:::o;5668:30::-;;;;:::o;20148:392::-;20208:21;20235:24;20403:6;20262:7;:18;20270:9;20262:18;;;;;;;;;;;20235:45;;20314:3;20288:30;;:6;:14;;;;;;;;;;;;:30;;;20284:60;;;20332:7;20325:14;;;;20284:60;20369:6;:22;;:29;;;;20358:41;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;20358:41:0;;;;20348:51;;20412:1;20403:10;;20427:1;20423:5;;20418:100;20434:6;:22;;:29;;;;20430:1;:33;20418:100;;;20488:6;:22;;20511:1;20488:25;;;;;;;;;;;;;;;;;;20475:7;20483:1;20475:10;;;;;;;;;;;;;;;;;:38;;;;;20465:3;;;;;;;20418:100;;;20529:7;20522:14;;20148:392;;;;;;:::o;4535:28::-;;;;:::o;17665:788::-;17704:20;17749:21;17802:9;17819:15;17727:18;;17704:41;;17773:25;;17749:49;;17814:1;17802:13;;17837:4;:7;17842:1;17837:7;;;;;;;;;;;17819:25;;17858:1;17854:5;;17849:181;17865:5;:12;17861:1;:16;17849:181;;;17895:4;:14;17900:5;17906:1;17900:8;;;;;;;;;;;;;;;;;;17895:14;;;;;;;;;;;17889:20;;17924:3;:10;;;;;;;;;;;;17920:106;;;17961:3;:11;;;17942:30;;;;17920:106;;;18009:3;:11;;;17990:30;;;;17920:106;17879:3;;;;;;;17849:181;;;18043:1;18039:5;;18034:277;18050:5;:12;18046:1;:16;18034:277;;;18080:4;:14;18085:5;18091:1;18085:8;;;;;;;;;;;;;;;;;;18080:14;;;;;;;;;;;18074:20;;18103:3;:10;;;;;;;;;;;;18099:208;;;18147:3;:16;;;18129:15;:34;:71;;;;18185:3;:15;;;18167;:33;18129:71;18121:80;;;;;;;;18099:208;;;18246:3;:16;;;18227:15;:35;;:73;;;;;18285:3;:15;;;18266;:34;;18227:73;18219:82;;;;;;;;18099:208;18064:3;;;;;;;18034:277;;;18324:1;18320:5;;18315:94;18331:5;:12;18327:1;:16;18315:94;;;18361:4;:14;18366:5;18372:1;18366:8;;;;;;;;;;;;;;;;;;18361:14;;;;;;;;;;;18355:20;;18394:3;:10;;;;;;;;;;;;18393:11;18380:3;:10;;;:24;;;;;;;;;;;;;;;;;;18345:3;;;;;;;18315:94;;;18434:15;18413:18;:36;;;;17665:788;;;;;:::o;3396:104:1:-;6100:10:0;6091:19;;:5;;;;;;;;;;;:19;;;6083:28;;;;;;;;3481:12:1;3469:11;;:24;;;;;;;;;;;;;;;;;;3396:104;:::o;4807:18:0:-;;;;;;;;;;;;;:::o;3963:207:1:-;4062:6;889:10;874:25;;:11;;;;;;;;;;;:25;;;866:34;;;;;;;;4069:1;4062:8;;4058:105;4073:18;:25;4071:1;:27;4058:105;;;4159:4;4116:19;:42;4136:18;4155:1;4136:21;;;;;;;;;;;;;;;;;;4116:42;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;4099:3;;;;;4058:105;;;3963:207;;:::o;8960:2268:0:-;9395:16;9465;10130:24;10738:15;9123:9;;9116:3;:16;;:33;;;;;9142:7;;9136:3;:13;9116:33;9108:42;;;;;;;;9218:12;;9207:7;:23;;:49;;;;;9244:12;9234:7;:22;9207:49;9199:58;;;;;;;;9316:1;9303:9;;9287:12;;9277:7;:22;9276:36;;;;;;;;:41;9267:51;;;;;;;;9382:1;9369:9;;9353:12;;9338;:27;9337:41;;;;;;;;:46;9328:56;;;;;;;;9446:9;;9430:12;;9415;:27;9414:41;;;;;;;;9395:60;;9511:9;;9495:12;;9485:7;:22;9484:36;;;;;;;;9465:55;;9576:3;9536:44;;:7;:20;9544:11;9536:20;;;;;;;;;;;:28;;;;;;;;;;;;:44;;;9532:292;;;9619:194;;;;;;;;;9658:12;9619:194;;;;9788:10;9619:194;;;;;;9711:1;9700:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9700:13:0;;;;9619:194;;;;9759:1;9748:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9748:13:0;;;;9619:194;;;9596:7;:20;9604:11;9596:20;;;;;;;;;;;:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;9532:292;9877:3;9837:44;;:7;:20;9845:11;9837:20;;;;;;;;;;;:28;;;;;;;;;;;;:44;;;9833:287;;;9920:189;;;;;;;;;9959:7;9920:189;;;;10084:10;9920:189;;;;;;10007:1;9996:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9996:13:0;;;;9920:189;;;;10055:1;10044:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;10044:13:0;;;;9920:189;;;9897:7;:20;9905:11;9897:20;;;;;;;;;;;:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;9833:287;10157:7;:20;10165:11;10157:20;;;;;;;;;;;10130:47;;10189:9;;10187:11;;;;;;;;;;;10316:417;;;;;;;;;10348:7;10316:417;;;;10382:12;10316:417;;;;10417:9;10316:417;;;;10447:7;:5;:7::i;:::-;10316:417;;;;10481:10;10316:417;;;;;;10516:5;10316:417;;;;;;10545:5;10316:417;;;;;;10653:7;10641:9;10622:18;;:28;:38;:85;;;;10695:12;10683:9;10664:18;;:28;:43;10622:85;10621:101;;10718:4;10621:101;;;10711:5;10621:101;10316:417;;;;;;10568:11;10316:417;;;;10597:11;10316:417;;;10298:4;:15;10303:9;;10298:15;;;;;;;;;;;:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10756:4;:15;10761:9;;10756:15;;;;;;;;;;;10738:33;;10851:3;:11;;;10829:18;;:33;;;;;;;;;;;5295:3;10924;:9;;;10910:3;:11;;;:23;10909:41;;;;;;;;10895:3;:11;;;:55;10866:25;;:84;;;;;;;;;;;11000:7;:20;11008:11;11000:20;;;;;;;;;;;:31;;11037:9;;11000:47;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11000:47:0;;;;;;;;;;;;;;;;;;;;;;11057:7;:20;11065:11;11057:20;;;;;;;;;;;:36;;11099:9;;11057:52;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11057:52:0;;;;;;;;;;;;;;;;;;;;;;11120:17;:29;11138:10;11120:29;;;;;;;;;;;;;;;11155:9;;11120:45;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11120:45:0;;;;;;;;;;;;;;;;;;;;;;11216:3;11205:9;;11193:10;11180:40;;;;;;;;;;;;8960:2268;;;;;;:::o;401:4446:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o", - "source": "/** @title Level Whitelisted Interactive Coin Offering\n * @author Clément Lesaege - \n */\n\npragma solidity ^0.4.23;\n\nimport \"./IICO.sol\";\n\n/** @title Level Whitelisted Interactive Coin Offering\n * This contract implements an Interactive Coin Offering with two whitelists:\n * - The base one, with limited contribution.\n * - The reinforced one, with unlimited contribution.\n */\ncontract LevelWhitelistedIICO is IICO {\n \n uint public maximumBaseContribution;\n mapping (address => bool) public baseWhitelist; // True if in the base whitelist (has a contribution limit).\n mapping (address => bool) public reinforcedWhitelist; // True if in the reinforced whitelist (does not have a contribution limit).\n address public whitelister; // The party which can add or remove people from the whitelist.\n \n modifier onlyWhitelister{ require(whitelister == msg.sender); _; }\n \n /** @dev Constructor. First contract set up (tokens will also need to be transferred to the contract and then setToken needs to be called to finish the setup).\n * @param _startTime Time the sale will start in seconds since the Unix Epoch.\n * @param _fullBonusLength Amount of seconds the sale lasts in the full bonus period.\n * @param _partialWithdrawalLength Amount of seconds the sale lasts in the partial withdrawal period.\n * @param _withdrawalLockUpLength Amount of seconds the sale lasts in the withdrawal lockup period.\n * @param _maxBonus The maximum bonus. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n * @param _beneficiary The party which will get the funds of the token sale.\n * @param _maximumBaseContribution The maximum contribution for buyers on the base list.\n */\n function LevelWhitelistedIICO(uint _startTime, uint _fullBonusLength, uint _partialWithdrawalLength, uint _withdrawalLockUpLength, uint _maxBonus, address _beneficiary, uint _maximumBaseContribution, uint _minValuation, uint _maxValuation, uint _increment) IICO(_startTime,_fullBonusLength,_partialWithdrawalLength,_withdrawalLockUpLength,_maxBonus,_beneficiary,_minValuation,_maxValuation,_increment) public {\n maximumBaseContribution=_maximumBaseContribution;\n }\n \n /** @dev Submit a bid. The caller must give the exact position the bid must be inserted into in the list.\n * In practice, use searchAndBid to avoid the position being incorrect due to a new bid being inserted and changing the position the bid must be inserted at.\n * @param _maxValuation The maximum valuation given by the contributor. If the amount raised is higher, the bid is cancelled and the contributor refunded because it prefers a refund instead of this level of dilution. To buy no matter what, use INFINITY.\n * @param _next The bidID of the next bid in the list.\n */\n function submitBid(uint _maxValuation, uint _next) public payable {\n require(reinforcedWhitelist[msg.sender] || (baseWhitelist[msg.sender] && (msg.value + totalContrib(msg.sender) <= maximumBaseContribution))); // Check if the buyer is in the reinforced whitelist or if it is on the base one and this would not make its total contribution exceed the limit.\n super.submitBid(_maxValuation,_next);\n }\n \n /** @dev Set the whitelister.\n * @param _whitelister The whitelister.\n */\n function setWhitelister(address _whitelister) public onlyOwner {\n whitelister=_whitelister;\n }\n \n /** @dev Add buyers to the base whitelist.\n * @param _buyersToWhitelist Buyers to add to the whitelist.\n */\n function addBaseWhitelist(address[] _buyersToWhitelist) public onlyWhitelister {\n for(uint i=0;i<_buyersToWhitelist.length;++i)\n baseWhitelist[_buyersToWhitelist[i]]=true;\n }\n \n /** @dev Add buyers to the reinforced whitelist.\n * @param _buyersToWhitelist Buyers to add to the whitelist.\n */\n function addReinforcedWhitelist(address[] _buyersToWhitelist) public onlyWhitelister {\n for(uint i=0;i<_buyersToWhitelist.length;++i)\n reinforcedWhitelist[_buyersToWhitelist[i]]=true;\n }\n \n /** @dev Remove buyers from the base whitelist.\n * @param _buyersToRemove Buyers to remove from the whitelist.\n */\n function removeBaseWhitelist(address[] _buyersToRemove) public onlyWhitelister {\n for(uint i=0;i<_buyersToRemove.length;++i)\n baseWhitelist[_buyersToRemove[i]]=false;\n }\n \n /** @dev Remove buyers from the reinforced whitelist.\n * @param _buyersToRemove Buyers to remove from the whitelist.\n */\n function removeReinforcedWhitelist(address[] _buyersToRemove) public onlyWhitelister {\n for(uint i=0;i<_buyersToRemove.length;++i)\n reinforcedWhitelist[_buyersToRemove[i]]=false;\n }\n\n}\n", - "sourcePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/LevelWhitelistedIICO.sol", - "ast": { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/LevelWhitelistedIICO.sol", - "exportedSymbols": { - "LevelWhitelistedIICO": [ - 1386 - ] - }, - "id": 1387, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1153, - "literals": [ - "solidity", - "^", - "0.4", - ".23" - ], - "nodeType": "PragmaDirective", - "src": "113:24:1" - }, - { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/IICO.sol", - "file": "./IICO.sol", - "id": 1154, - "nodeType": "ImportDirective", - "scope": 1387, - "sourceUnit": 1152, - "src": "139:20:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1155, - "name": "IICO", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1151, - "src": "434:4:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IICO_$1151", - "typeString": "contract IICO" - } - }, - "id": 1156, - "nodeType": "InheritanceSpecifier", - "src": "434:4:1" - } - ], - "contractDependencies": [ - 1151 - ], - "contractKind": "contract", - "documentation": "@title Level Whitelisted Interactive Coin Offering\n This contract implements an Interactive Coin Offering with two whitelists:\n - The base one, with limited contribution.\n - The reinforced one, with unlimited contribution.", - "fullyImplemented": true, - "id": 1386, - "linearizedBaseContracts": [ - 1386, - 1151 - ], - "name": "LevelWhitelistedIICO", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 1158, - "name": "maximumBaseContribution", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "450:35:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1157, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "450:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1162, - "name": "baseWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "491:46:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1161, - "keyType": { - "id": 1159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "500:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "491:25:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1160, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "511:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1166, - "name": "reinforcedWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "604:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1165, - "keyType": { - "id": 1163, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "613:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "604:25:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1164, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "624:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1168, - "name": "whitelister", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "739:26:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1167, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "739:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "body": { - "id": 1178, - "nodeType": "Block", - "src": "864:42:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1171, - "name": "whitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "874:11:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1172, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "889:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "889:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "874:25:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1170, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "866:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1175, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "866:34:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1176, - "nodeType": "ExpressionStatement", - "src": "866:34:1" - }, - { - "id": 1177, - "nodeType": "PlaceholderStatement", - "src": "902:1:1" - } - ] - }, - "documentation": null, - "id": 1179, - "name": "onlyWhitelister", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1169, - "nodeType": "ParameterList", - "parameters": [], - "src": "864:0:1" - }, - "src": "840:66:1", - "visibility": "internal" - }, - { - "body": { - "id": 1217, - "nodeType": "Block", - "src": "2209:65:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1213, - "name": "maximumBaseContribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1158, - "src": "2219:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1214, - "name": "_maximumBaseContribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1193, - "src": "2243:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2219:48:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1216, - "nodeType": "ExpressionStatement", - "src": "2219:48:1" - } - ] - }, - "documentation": "@dev Constructor. First contract set up (tokens will also need to be transferred to the contract and then setToken needs to be called to finish the setup).\n @param _startTime Time the sale will start in seconds since the Unix Epoch.\n @param _fullBonusLength Amount of seconds the sale lasts in the full bonus period.\n @param _partialWithdrawalLength Amount of seconds the sale lasts in the partial withdrawal period.\n @param _withdrawalLockUpLength Amount of seconds the sale lasts in the withdrawal lockup period.\n @param _maxBonus The maximum bonus. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n @param _beneficiary The party which will get the funds of the token sale.\n @param _maximumBaseContribution The maximum contribution for buyers on the base list.", - "id": 1218, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [ - { - "argumentTypes": null, - "id": 1202, - "name": "_startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1181, - "src": "2062:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1203, - "name": "_fullBonusLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1183, - "src": "2073:16:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1204, - "name": "_partialWithdrawalLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1185, - "src": "2090:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1205, - "name": "_withdrawalLockUpLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "2115:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1206, - "name": "_maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1189, - "src": "2139:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1207, - "name": "_beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1191, - "src": "2149:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1208, - "name": "_minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1195, - "src": "2162:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1209, - "name": "_maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1197, - "src": "2176:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1210, - "name": "_increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1199, - "src": "2190:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1211, - "modifierName": { - "argumentTypes": null, - "id": 1201, - "name": "IICO", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1151, - "src": "2057:4:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IICO_$1151_$", - "typeString": "type(contract IICO)" - } - }, - "nodeType": "ModifierInvocation", - "src": "2057:144:1" - } - ], - "name": "LevelWhitelistedIICO", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1200, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1181, - "name": "_startTime", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1830:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1180, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1830:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1183, - "name": "_fullBonusLength", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1847:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1182, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1847:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1185, - "name": "_partialWithdrawalLength", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1870:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1184, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1870:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1187, - "name": "_withdrawalLockUpLength", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1901:28:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1186, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1901:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1189, - "name": "_maxBonus", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1931:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1188, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1931:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1191, - "name": "_beneficiary", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1947:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1190, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1947:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1193, - "name": "_maximumBaseContribution", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1969:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1192, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1969:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1195, - "name": "_minValuation", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "2000:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1194, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2000:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1197, - "name": "_maxValuation", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "2020:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1196, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2020:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1199, - "name": "_increment", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "2040:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1198, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2040:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1829:227:1" - }, - "payable": false, - "returnParameters": { - "id": 1212, - "nodeType": "ParameterList", - "parameters": [], - "src": "2209:0:1" - }, - "scope": 1386, - "src": "1800:474:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1256, - "nodeType": "Block", - "src": "2950:349:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1246, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1226, - "name": "reinforcedWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "2968:19:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1229, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1227, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "2988:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1228, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2988:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2968:31:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1244, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1230, - "name": "baseWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1162, - "src": "3004:13:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1233, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1231, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3018:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3018:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3004:25:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1240, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1234, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3034:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3034:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1237, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3059:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3059:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1236, - "name": "totalContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1022, - "src": "3046:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 1239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3046:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3034:36:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 1241, - "name": "maximumBaseContribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1158, - "src": "3074:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3034:63:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1243, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3033:65:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3004:94:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1245, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3003:96:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "2968:131:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1225, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "2960:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2960:140:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1248, - "nodeType": "ExpressionStatement", - "src": "2960:140:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1252, - "name": "_maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1220, - "src": "3272:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1253, - "name": "_next", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1222, - "src": "3286:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1249, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2064, - "src": "3256:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_LevelWhitelistedIICO_$1386", - "typeString": "contract super LevelWhitelistedIICO" - } - }, - "id": 1251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "submitBid", - "nodeType": "MemberAccess", - "referencedDeclaration": 511, - "src": "3256:15:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 1254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3256:36:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1255, - "nodeType": "ExpressionStatement", - "src": "3256:36:1" - } - ] - }, - "documentation": "@dev Submit a bid. The caller must give the exact position the bid must be inserted into in the list.\n In practice, use searchAndBid to avoid the position being incorrect due to a new bid being inserted and changing the position the bid must be inserted at.\n @param _maxValuation The maximum valuation given by the contributor. If the amount raised is higher, the bid is cancelled and the contributor refunded because it prefers a refund instead of this level of dilution. To buy no matter what, use INFINITY.\n @param _next The bidID of the next bid in the list.", - "id": 1257, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "submitBid", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1223, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1220, - "name": "_maxValuation", - "nodeType": "VariableDeclaration", - "scope": 1257, - "src": "2903:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1219, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2903:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1222, - "name": "_next", - "nodeType": "VariableDeclaration", - "scope": 1257, - "src": "2923:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1221, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2923:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2902:32:1" - }, - "payable": true, - "returnParameters": { - "id": 1224, - "nodeType": "ParameterList", - "parameters": [], - "src": "2950:0:1" - }, - "scope": 1386, - "src": "2884:415:1", - "stateMutability": "payable", - "superFunction": 511, - "visibility": "public" - }, - { - "body": { - "id": 1268, - "nodeType": "Block", - "src": "3459:41:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1264, - "name": "whitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "3469:11:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1265, - "name": "_whitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1259, - "src": "3481:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3469:24:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1267, - "nodeType": "ExpressionStatement", - "src": "3469:24:1" - } - ] - }, - "documentation": "@dev Set the whitelister.\n @param _whitelister The whitelister.", - "id": 1269, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1262, - "modifierName": { - "argumentTypes": null, - "id": 1261, - "name": "onlyOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "3449:9:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3449:9:1" - } - ], - "name": "setWhitelister", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1260, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1259, - "name": "_whitelister", - "nodeType": "VariableDeclaration", - "scope": 1269, - "src": "3420:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1258, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3420:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3419:22:1" - }, - "payable": false, - "returnParameters": { - "id": 1263, - "nodeType": "ParameterList", - "parameters": [], - "src": "3459:0:1" - }, - "scope": 1386, - "src": "3396:104:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1297, - "nodeType": "Block", - "src": "3710:116:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1288, - "name": "baseWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1162, - "src": "3778:13:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1292, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1289, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1272, - "src": "3792:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1291, - "indexExpression": { - "argumentTypes": null, - "id": 1290, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "3811:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3792:21:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3778:36:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1293, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3815:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "3778:41:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1295, - "nodeType": "ExpressionStatement", - "src": "3778:41:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1281, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "3733:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1282, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1272, - "src": "3735:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3735:25:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3733:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1296, - "initializationExpression": { - "assignments": [ - 1278 - ], - "declarations": [ - { - "constant": false, - "id": 1278, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1298, - "src": "3724:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1277, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3724:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1280, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1279, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3731:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "3724:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1286, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "3761:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1285, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "3763:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1287, - "nodeType": "ExpressionStatement", - "src": "3761:3:1" - }, - "nodeType": "ForStatement", - "src": "3720:99:1" - } - ] - }, - "documentation": "@dev Add buyers to the base whitelist.\n @param _buyersToWhitelist Buyers to add to the whitelist.", - "id": 1298, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1275, - "modifierName": { - "argumentTypes": null, - "id": 1274, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "3694:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3694:15:1" - } - ], - "name": "addBaseWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1273, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1272, - "name": "_buyersToWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1298, - "src": "3657:28:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1270, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3657:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1271, - "length": null, - "nodeType": "ArrayTypeName", - "src": "3657:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3656:30:1" - }, - "payable": false, - "returnParameters": { - "id": 1276, - "nodeType": "ParameterList", - "parameters": [], - "src": "3710:0:1" - }, - "scope": 1386, - "src": "3631:195:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1326, - "nodeType": "Block", - "src": "4048:122:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1317, - "name": "reinforcedWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "4116:19:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1321, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1318, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1301, - "src": "4136:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1320, - "indexExpression": { - "argumentTypes": null, - "id": 1319, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1307, - "src": "4155:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4136:21:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4116:42:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1322, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4159:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "4116:47:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1324, - "nodeType": "ExpressionStatement", - "src": "4116:47:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1310, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1307, - "src": "4071:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1311, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1301, - "src": "4073:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4073:25:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4071:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1325, - "initializationExpression": { - "assignments": [ - 1307 - ], - "declarations": [ - { - "constant": false, - "id": 1307, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1327, - "src": "4062:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1306, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4062:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1309, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1308, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4069:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4062:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "4099:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1314, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1307, - "src": "4101:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1316, - "nodeType": "ExpressionStatement", - "src": "4099:3:1" - }, - "nodeType": "ForStatement", - "src": "4058:105:1" - } - ] - }, - "documentation": "@dev Add buyers to the reinforced whitelist.\n @param _buyersToWhitelist Buyers to add to the whitelist.", - "id": 1327, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1304, - "modifierName": { - "argumentTypes": null, - "id": 1303, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "4032:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4032:15:1" - } - ], - "name": "addReinforcedWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1302, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1301, - "name": "_buyersToWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1327, - "src": "3995:28:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1299, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3995:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1300, - "length": null, - "nodeType": "ArrayTypeName", - "src": "3995:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3994:30:1" - }, - "payable": false, - "returnParameters": { - "id": 1305, - "nodeType": "ParameterList", - "parameters": [], - "src": "4048:0:1" - }, - "scope": 1386, - "src": "3963:207:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1355, - "nodeType": "Block", - "src": "4387:111:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1346, - "name": "baseWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1162, - "src": "4452:13:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1350, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1347, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1330, - "src": "4466:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1349, - "indexExpression": { - "argumentTypes": null, - "id": 1348, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1336, - "src": "4482:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4466:18:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4452:33:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1351, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4486:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "4452:39:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1353, - "nodeType": "ExpressionStatement", - "src": "4452:39:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1339, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1336, - "src": "4410:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1340, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1330, - "src": "4412:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4412:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4410:24:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1354, - "initializationExpression": { - "assignments": [ - 1336 - ], - "declarations": [ - { - "constant": false, - "id": 1336, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1356, - "src": "4401:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1335, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4401:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1338, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1337, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4408:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4401:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "4435:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1343, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1336, - "src": "4437:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1345, - "nodeType": "ExpressionStatement", - "src": "4435:3:1" - }, - "nodeType": "ForStatement", - "src": "4397:94:1" - } - ] - }, - "documentation": "@dev Remove buyers from the base whitelist.\n @param _buyersToRemove Buyers to remove from the whitelist.", - "id": 1356, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1333, - "modifierName": { - "argumentTypes": null, - "id": 1332, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "4371:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4371:15:1" - } - ], - "name": "removeBaseWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1331, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1330, - "name": "_buyersToRemove", - "nodeType": "VariableDeclaration", - "scope": 1356, - "src": "4337:25:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1328, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4337:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1329, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4337:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4336:27:1" - }, - "payable": false, - "returnParameters": { - "id": 1334, - "nodeType": "ParameterList", - "parameters": [], - "src": "4387:0:1" - }, - "scope": 1386, - "src": "4308:190:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1384, - "nodeType": "Block", - "src": "4727:117:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1381, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1375, - "name": "reinforcedWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "4792:19:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1379, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1376, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1359, - "src": "4812:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1378, - "indexExpression": { - "argumentTypes": null, - "id": 1377, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1365, - "src": "4828:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4812:18:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4792:39:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1380, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4832:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "4792:45:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1382, - "nodeType": "ExpressionStatement", - "src": "4792:45:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1368, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1365, - "src": "4750:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1369, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1359, - "src": "4752:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4752:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4750:24:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1383, - "initializationExpression": { - "assignments": [ - 1365 - ], - "declarations": [ - { - "constant": false, - "id": 1365, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1385, - "src": "4741:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1364, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4741:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1367, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1366, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4748:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4741:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "4775:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1372, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1365, - "src": "4777:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1374, - "nodeType": "ExpressionStatement", - "src": "4775:3:1" - }, - "nodeType": "ForStatement", - "src": "4737:100:1" - } - ] - }, - "documentation": "@dev Remove buyers from the reinforced whitelist.\n @param _buyersToRemove Buyers to remove from the whitelist.", - "id": 1385, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1362, - "modifierName": { - "argumentTypes": null, - "id": 1361, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "4711:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4711:15:1" - } - ], - "name": "removeReinforcedWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1360, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1359, - "name": "_buyersToRemove", - "nodeType": "VariableDeclaration", - "scope": 1385, - "src": "4677:25:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1357, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4677:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1358, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4677:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4676:27:1" - }, - "payable": false, - "returnParameters": { - "id": 1363, - "nodeType": "ParameterList", - "parameters": [], - "src": "4727:0:1" - }, - "scope": 1386, - "src": "4642:202:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1387, - "src": "401:4446:1" - } - ], - "src": "113:4735:1" - }, - "legacyAST": { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/LevelWhitelistedIICO.sol", - "exportedSymbols": { - "LevelWhitelistedIICO": [ - 1386 - ] - }, - "id": 1387, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1153, - "literals": [ - "solidity", - "^", - "0.4", - ".23" - ], - "nodeType": "PragmaDirective", - "src": "113:24:1" - }, - { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/IICO.sol", - "file": "./IICO.sol", - "id": 1154, - "nodeType": "ImportDirective", - "scope": 1387, - "sourceUnit": 1152, - "src": "139:20:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1155, - "name": "IICO", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1151, - "src": "434:4:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IICO_$1151", - "typeString": "contract IICO" - } - }, - "id": 1156, - "nodeType": "InheritanceSpecifier", - "src": "434:4:1" - } - ], - "contractDependencies": [ - 1151 - ], - "contractKind": "contract", - "documentation": "@title Level Whitelisted Interactive Coin Offering\n This contract implements an Interactive Coin Offering with two whitelists:\n - The base one, with limited contribution.\n - The reinforced one, with unlimited contribution.", - "fullyImplemented": true, - "id": 1386, - "linearizedBaseContracts": [ - 1386, - 1151 - ], - "name": "LevelWhitelistedIICO", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 1158, - "name": "maximumBaseContribution", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "450:35:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1157, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "450:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1162, - "name": "baseWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "491:46:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1161, - "keyType": { - "id": 1159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "500:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "491:25:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1160, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "511:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1166, - "name": "reinforcedWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "604:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1165, - "keyType": { - "id": 1163, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "613:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "604:25:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1164, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "624:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1168, - "name": "whitelister", - "nodeType": "VariableDeclaration", - "scope": 1386, - "src": "739:26:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1167, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "739:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "body": { - "id": 1178, - "nodeType": "Block", - "src": "864:42:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1171, - "name": "whitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "874:11:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1172, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "889:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "889:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "874:25:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1170, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "866:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1175, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "866:34:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1176, - "nodeType": "ExpressionStatement", - "src": "866:34:1" - }, - { - "id": 1177, - "nodeType": "PlaceholderStatement", - "src": "902:1:1" - } - ] - }, - "documentation": null, - "id": 1179, - "name": "onlyWhitelister", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1169, - "nodeType": "ParameterList", - "parameters": [], - "src": "864:0:1" - }, - "src": "840:66:1", - "visibility": "internal" - }, - { - "body": { - "id": 1217, - "nodeType": "Block", - "src": "2209:65:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1213, - "name": "maximumBaseContribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1158, - "src": "2219:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1214, - "name": "_maximumBaseContribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1193, - "src": "2243:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2219:48:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1216, - "nodeType": "ExpressionStatement", - "src": "2219:48:1" - } - ] - }, - "documentation": "@dev Constructor. First contract set up (tokens will also need to be transferred to the contract and then setToken needs to be called to finish the setup).\n @param _startTime Time the sale will start in seconds since the Unix Epoch.\n @param _fullBonusLength Amount of seconds the sale lasts in the full bonus period.\n @param _partialWithdrawalLength Amount of seconds the sale lasts in the partial withdrawal period.\n @param _withdrawalLockUpLength Amount of seconds the sale lasts in the withdrawal lockup period.\n @param _maxBonus The maximum bonus. Will be normalized by BONUS_DIVISOR. For example for a 20% bonus, _maxBonus must be 0.2 * BONUS_DIVISOR.\n @param _beneficiary The party which will get the funds of the token sale.\n @param _maximumBaseContribution The maximum contribution for buyers on the base list.", - "id": 1218, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [ - { - "argumentTypes": null, - "id": 1202, - "name": "_startTime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1181, - "src": "2062:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1203, - "name": "_fullBonusLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1183, - "src": "2073:16:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1204, - "name": "_partialWithdrawalLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1185, - "src": "2090:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1205, - "name": "_withdrawalLockUpLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "2115:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1206, - "name": "_maxBonus", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1189, - "src": "2139:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1207, - "name": "_beneficiary", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1191, - "src": "2149:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1208, - "name": "_minValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1195, - "src": "2162:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1209, - "name": "_maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1197, - "src": "2176:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1210, - "name": "_increment", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1199, - "src": "2190:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 1211, - "modifierName": { - "argumentTypes": null, - "id": 1201, - "name": "IICO", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1151, - "src": "2057:4:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IICO_$1151_$", - "typeString": "type(contract IICO)" - } - }, - "nodeType": "ModifierInvocation", - "src": "2057:144:1" - } - ], - "name": "LevelWhitelistedIICO", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1200, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1181, - "name": "_startTime", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1830:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1180, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1830:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1183, - "name": "_fullBonusLength", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1847:21:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1182, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1847:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1185, - "name": "_partialWithdrawalLength", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1870:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1184, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1870:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1187, - "name": "_withdrawalLockUpLength", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1901:28:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1186, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1901:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1189, - "name": "_maxBonus", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1931:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1188, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1931:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1191, - "name": "_beneficiary", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1947:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1190, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1947:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1193, - "name": "_maximumBaseContribution", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "1969:29:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1192, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "1969:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1195, - "name": "_minValuation", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "2000:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1194, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2000:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1197, - "name": "_maxValuation", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "2020:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1196, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2020:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1199, - "name": "_increment", - "nodeType": "VariableDeclaration", - "scope": 1218, - "src": "2040:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1198, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2040:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1829:227:1" - }, - "payable": false, - "returnParameters": { - "id": 1212, - "nodeType": "ParameterList", - "parameters": [], - "src": "2209:0:1" - }, - "scope": 1386, - "src": "1800:474:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1256, - "nodeType": "Block", - "src": "2950:349:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1246, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1226, - "name": "reinforcedWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "2968:19:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1229, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1227, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "2988:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1228, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2988:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2968:31:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1244, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1230, - "name": "baseWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1162, - "src": "3004:13:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1233, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1231, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3018:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3018:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3004:25:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1240, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1234, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3034:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3034:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1237, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2042, - "src": "3059:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3059:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1236, - "name": "totalContrib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1022, - "src": "3046:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 1239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3046:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3034:36:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 1241, - "name": "maximumBaseContribution", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1158, - "src": "3074:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3034:63:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1243, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3033:65:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3004:94:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1245, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3003:96:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "2968:131:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1225, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "2960:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2960:140:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1248, - "nodeType": "ExpressionStatement", - "src": "2960:140:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1252, - "name": "_maxValuation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1220, - "src": "3272:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 1253, - "name": "_next", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1222, - "src": "3286:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1249, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2064, - "src": "3256:5:1", - "typeDescriptions": { - "typeIdentifier": "t_super$_LevelWhitelistedIICO_$1386", - "typeString": "contract super LevelWhitelistedIICO" - } - }, - "id": 1251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "submitBid", - "nodeType": "MemberAccess", - "referencedDeclaration": 511, - "src": "3256:15:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256)" - } - }, - "id": 1254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3256:36:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1255, - "nodeType": "ExpressionStatement", - "src": "3256:36:1" - } - ] - }, - "documentation": "@dev Submit a bid. The caller must give the exact position the bid must be inserted into in the list.\n In practice, use searchAndBid to avoid the position being incorrect due to a new bid being inserted and changing the position the bid must be inserted at.\n @param _maxValuation The maximum valuation given by the contributor. If the amount raised is higher, the bid is cancelled and the contributor refunded because it prefers a refund instead of this level of dilution. To buy no matter what, use INFINITY.\n @param _next The bidID of the next bid in the list.", - "id": 1257, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "submitBid", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1223, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1220, - "name": "_maxValuation", - "nodeType": "VariableDeclaration", - "scope": 1257, - "src": "2903:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1219, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2903:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1222, - "name": "_next", - "nodeType": "VariableDeclaration", - "scope": 1257, - "src": "2923:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1221, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "2923:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2902:32:1" - }, - "payable": true, - "returnParameters": { - "id": 1224, - "nodeType": "ParameterList", - "parameters": [], - "src": "2950:0:1" - }, - "scope": 1386, - "src": "2884:415:1", - "stateMutability": "payable", - "superFunction": 511, - "visibility": "public" - }, - { - "body": { - "id": 1268, - "nodeType": "Block", - "src": "3459:41:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1264, - "name": "whitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "3469:11:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1265, - "name": "_whitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1259, - "src": "3481:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3469:24:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1267, - "nodeType": "ExpressionStatement", - "src": "3469:24:1" - } - ] - }, - "documentation": "@dev Set the whitelister.\n @param _whitelister The whitelister.", - "id": 1269, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1262, - "modifierName": { - "argumentTypes": null, - "id": 1261, - "name": "onlyOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "3449:9:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3449:9:1" - } - ], - "name": "setWhitelister", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1260, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1259, - "name": "_whitelister", - "nodeType": "VariableDeclaration", - "scope": 1269, - "src": "3420:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1258, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3420:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3419:22:1" - }, - "payable": false, - "returnParameters": { - "id": 1263, - "nodeType": "ParameterList", - "parameters": [], - "src": "3459:0:1" - }, - "scope": 1386, - "src": "3396:104:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1297, - "nodeType": "Block", - "src": "3710:116:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1288, - "name": "baseWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1162, - "src": "3778:13:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1292, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1289, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1272, - "src": "3792:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1291, - "indexExpression": { - "argumentTypes": null, - "id": 1290, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "3811:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3792:21:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3778:36:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1293, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3815:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "3778:41:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1295, - "nodeType": "ExpressionStatement", - "src": "3778:41:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1281, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "3733:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1282, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1272, - "src": "3735:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3735:25:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3733:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1296, - "initializationExpression": { - "assignments": [ - 1278 - ], - "declarations": [ - { - "constant": false, - "id": 1278, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1298, - "src": "3724:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1277, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "3724:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1280, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1279, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3731:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "3724:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1286, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "3761:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1285, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "3763:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1287, - "nodeType": "ExpressionStatement", - "src": "3761:3:1" - }, - "nodeType": "ForStatement", - "src": "3720:99:1" - } - ] - }, - "documentation": "@dev Add buyers to the base whitelist.\n @param _buyersToWhitelist Buyers to add to the whitelist.", - "id": 1298, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1275, - "modifierName": { - "argumentTypes": null, - "id": 1274, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "3694:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3694:15:1" - } - ], - "name": "addBaseWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1273, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1272, - "name": "_buyersToWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1298, - "src": "3657:28:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1270, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3657:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1271, - "length": null, - "nodeType": "ArrayTypeName", - "src": "3657:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3656:30:1" - }, - "payable": false, - "returnParameters": { - "id": 1276, - "nodeType": "ParameterList", - "parameters": [], - "src": "3710:0:1" - }, - "scope": 1386, - "src": "3631:195:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1326, - "nodeType": "Block", - "src": "4048:122:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1317, - "name": "reinforcedWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "4116:19:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1321, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1318, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1301, - "src": "4136:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1320, - "indexExpression": { - "argumentTypes": null, - "id": 1319, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1307, - "src": "4155:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4136:21:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4116:42:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1322, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4159:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "4116:47:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1324, - "nodeType": "ExpressionStatement", - "src": "4116:47:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1310, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1307, - "src": "4071:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1311, - "name": "_buyersToWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1301, - "src": "4073:18:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4073:25:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4071:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1325, - "initializationExpression": { - "assignments": [ - 1307 - ], - "declarations": [ - { - "constant": false, - "id": 1307, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1327, - "src": "4062:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1306, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4062:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1309, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1308, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4069:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4062:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "4099:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1314, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1307, - "src": "4101:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1316, - "nodeType": "ExpressionStatement", - "src": "4099:3:1" - }, - "nodeType": "ForStatement", - "src": "4058:105:1" - } - ] - }, - "documentation": "@dev Add buyers to the reinforced whitelist.\n @param _buyersToWhitelist Buyers to add to the whitelist.", - "id": 1327, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1304, - "modifierName": { - "argumentTypes": null, - "id": 1303, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "4032:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4032:15:1" - } - ], - "name": "addReinforcedWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1302, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1301, - "name": "_buyersToWhitelist", - "nodeType": "VariableDeclaration", - "scope": 1327, - "src": "3995:28:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1299, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3995:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1300, - "length": null, - "nodeType": "ArrayTypeName", - "src": "3995:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3994:30:1" - }, - "payable": false, - "returnParameters": { - "id": 1305, - "nodeType": "ParameterList", - "parameters": [], - "src": "4048:0:1" - }, - "scope": 1386, - "src": "3963:207:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1355, - "nodeType": "Block", - "src": "4387:111:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1346, - "name": "baseWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1162, - "src": "4452:13:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1350, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1347, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1330, - "src": "4466:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1349, - "indexExpression": { - "argumentTypes": null, - "id": 1348, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1336, - "src": "4482:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4466:18:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4452:33:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1351, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4486:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "4452:39:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1353, - "nodeType": "ExpressionStatement", - "src": "4452:39:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1339, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1336, - "src": "4410:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1340, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1330, - "src": "4412:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4412:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4410:24:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1354, - "initializationExpression": { - "assignments": [ - 1336 - ], - "declarations": [ - { - "constant": false, - "id": 1336, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1356, - "src": "4401:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1335, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4401:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1338, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1337, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4408:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4401:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "4435:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1343, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1336, - "src": "4437:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1345, - "nodeType": "ExpressionStatement", - "src": "4435:3:1" - }, - "nodeType": "ForStatement", - "src": "4397:94:1" - } - ] - }, - "documentation": "@dev Remove buyers from the base whitelist.\n @param _buyersToRemove Buyers to remove from the whitelist.", - "id": 1356, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1333, - "modifierName": { - "argumentTypes": null, - "id": 1332, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "4371:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4371:15:1" - } - ], - "name": "removeBaseWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1331, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1330, - "name": "_buyersToRemove", - "nodeType": "VariableDeclaration", - "scope": 1356, - "src": "4337:25:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1328, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4337:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1329, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4337:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4336:27:1" - }, - "payable": false, - "returnParameters": { - "id": 1334, - "nodeType": "ParameterList", - "parameters": [], - "src": "4387:0:1" - }, - "scope": 1386, - "src": "4308:190:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1384, - "nodeType": "Block", - "src": "4727:117:1", - "statements": [ - { - "body": { - "expression": { - "argumentTypes": null, - "id": 1381, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1375, - "name": "reinforcedWhitelist", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1166, - "src": "4792:19:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1379, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 1376, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1359, - "src": "4812:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1378, - "indexExpression": { - "argumentTypes": null, - "id": 1377, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1365, - "src": "4828:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4812:18:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4792:39:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1380, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4832:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "4792:45:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1382, - "nodeType": "ExpressionStatement", - "src": "4792:45:1" - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1368, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1365, - "src": "4750:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1369, - "name": "_buyersToRemove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1359, - "src": "4752:15:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 1370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4752:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4750:24:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1383, - "initializationExpression": { - "assignments": [ - 1365 - ], - "declarations": [ - { - "constant": false, - "id": 1365, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 1385, - "src": "4741:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1364, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "4741:4:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1367, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 1366, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4748:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4741:8:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 1373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "4775:3:1", - "subExpression": { - "argumentTypes": null, - "id": 1372, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1365, - "src": "4777:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1374, - "nodeType": "ExpressionStatement", - "src": "4775:3:1" - }, - "nodeType": "ForStatement", - "src": "4737:100:1" - } - ] - }, - "documentation": "@dev Remove buyers from the reinforced whitelist.\n @param _buyersToRemove Buyers to remove from the whitelist.", - "id": 1385, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1362, - "modifierName": { - "argumentTypes": null, - "id": 1361, - "name": "onlyWhitelister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1179, - "src": "4711:15:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4711:15:1" - } - ], - "name": "removeReinforcedWhitelist", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1360, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1359, - "name": "_buyersToRemove", - "nodeType": "VariableDeclaration", - "scope": 1385, - "src": "4677:25:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 1357, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4677:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1358, - "length": null, - "nodeType": "ArrayTypeName", - "src": "4677:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4676:27:1" - }, - "payable": false, - "returnParameters": { - "id": 1363, - "nodeType": "ParameterList", - "parameters": [], - "src": "4727:0:1" - }, - "scope": 1386, - "src": "4642:202:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1387, - "src": "401:4446:1" - } - ], - "src": "113:4735:1" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-12-07T22:50:05.598Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/Migrations.json b/truebit-implementation/build/contracts/Migrations.json deleted file mode 100644 index 2e36c077..00000000 --- a/truebit-implementation/build/contracts/Migrations.json +++ /dev/null @@ -1,1402 +0,0 @@ -{ - "contractName": "Migrations", - "abi": [ - { - "constant": true, - "inputs": [], - "name": "last_completed_migration", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "constant": false, - "inputs": [ - { - "name": "completed", - "type": "uint256" - } - ], - "name": "setCompleted", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "new_address", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102f8806100606000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100aa5780638da5cb5b146100d5578063fdacd5761461012c575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610159565b005b3480156100b657600080fd5b506100bf610241565b6040518082815260200191505060405180910390f35b3480156100e157600080fd5b506100ea610247565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013857600080fd5b506101576004803603810190808035906020019092919050505061026c565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023d578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561022457600080fd5b505af1158015610238573d6000803e3d6000fd5b505050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102c957806001819055505b505600a165627a7a72305820fef05258c4bae665987fe53b8c6838e71be25ac10c49902fcd5a8e519948fa690029", - "deployedBytecode": "0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100aa5780638da5cb5b146100d5578063fdacd5761461012c575b600080fd5b34801561007357600080fd5b506100a8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610159565b005b3480156100b657600080fd5b506100bf610241565b6040518082815260200191505060405180910390f35b3480156100e157600080fd5b506100ea610247565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561013857600080fd5b506101576004803603810190808035906020019092919050505061026c565b005b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023d578190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561022457600080fd5b505af1158015610238573d6000803e3d6000fd5b505050505b5050565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102c957806001819055505b505600a165627a7a72305820fef05258c4bae665987fe53b8c6838e71be25ac10c49902fcd5a8e519948fa690029", - "sourceMap": "98:488:2:-;;;250:58;8:9:-1;5:2;;;30:1;27;20:12;5:2;250:58:2;293:10;285:5;;:18;;;;;;;;;;;;;;;;;;98:488;;;;;;", - "deployedSourceMap": "98:488:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;419:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;419:165:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;146:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;146:36:2;;;;;;;;;;;;;;;;;;;;;;;122:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;122:20:2;;;;;;;;;;;;;;;;;;;;;;;;;;;312:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;312:103:2;;;;;;;;;;;;;;;;;;;;;;;;;;419:165;481:19;233:5;;;;;;;;;;;219:19;;:10;:19;;;215:26;;;514:11;481:45;;532:8;:21;;;554:24;;532:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;532:47:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;532:47:2;;;;215:26;419:165;;:::o;146:36::-;;;;:::o;122:20::-;;;;;;;;;;;;;:::o;312:103::-;233:5;;;;;;;;;;;219:19;;:10;:19;;;215:26;;;401:9;374:24;:36;;;;215:26;312:103;:::o", - "source": "import \"openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol\";\npragma solidity ^0.4.17;\n\ncontract Migrations {\n address public owner;\n uint public last_completed_migration;\n\n modifier restricted() {\n if (msg.sender == owner) _;\n }\n\n function Migrations() public {\n owner = msg.sender;\n }\n\n function setCompleted(uint completed) public restricted {\n last_completed_migration = completed;\n }\n\n function upgrade(address new_address) public restricted {\n Migrations upgraded = Migrations(new_address);\n upgraded.setCompleted(last_completed_migration);\n }\n}\n", - "sourcePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/Migrations.sol", - "ast": { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/Migrations.sol", - "exportedSymbols": { - "Migrations": [ - 1404 - ] - }, - "id": 1405, - "nodeType": "SourceUnit", - "nodes": [ - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol", - "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol", - "id": 1348, - "nodeType": "ImportDirective", - "scope": 1405, - "sourceUnit": 2202, - "src": "0:71:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 1349, - "literals": [ - "solidity", - "^", - "0.4", - ".17" - ], - "nodeType": "PragmaDirective", - "src": "72:24:2" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1404, - "linearizedBaseContracts": [ - 1404 - ], - "name": "Migrations", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 1351, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1404, - "src": "122:20:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "122:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1353, - "name": "last_completed_migration", - "nodeType": "VariableDeclaration", - "scope": 1404, - "src": "146:36:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1352, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "146:4:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "body": { - "id": 1361, - "nodeType": "Block", - "src": "209:37:2", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1355, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "219:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "219:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1357, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "233:5:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "219:19:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1360, - "nodeType": "IfStatement", - "src": "215:26:2", - "trueBody": { - "id": 1359, - "nodeType": "PlaceholderStatement", - "src": "240:1:2" - } - } - ] - }, - "documentation": null, - "id": 1362, - "name": "restricted", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1354, - "nodeType": "ParameterList", - "parameters": [], - "src": "206:2:2" - }, - "src": "187:59:2", - "visibility": "internal" - }, - { - "body": { - "id": 1370, - "nodeType": "Block", - "src": "279:29:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1368, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1365, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "285:5:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1366, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "293:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "293:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "285:18:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1369, - "nodeType": "ExpressionStatement", - "src": "285:18:2" - } - ] - }, - "documentation": null, - "id": 1371, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "Migrations", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1363, - "nodeType": "ParameterList", - "parameters": [], - "src": "269:2:2" - }, - "payable": false, - "returnParameters": { - "id": 1364, - "nodeType": "ParameterList", - "parameters": [], - "src": "279:0:2" - }, - "scope": 1404, - "src": "250:58:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1382, - "nodeType": "Block", - "src": "368:47:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1380, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1378, - "name": "last_completed_migration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1353, - "src": "374:24:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1379, - "name": "completed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1373, - "src": "401:9:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "374:36:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1381, - "nodeType": "ExpressionStatement", - "src": "374:36:2" - } - ] - }, - "documentation": null, - "id": 1383, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1376, - "modifierName": { - "argumentTypes": null, - "id": 1375, - "name": "restricted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1362, - "src": "357:10:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "357:10:2" - } - ], - "name": "setCompleted", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1373, - "name": "completed", - "nodeType": "VariableDeclaration", - "scope": 1383, - "src": "334:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1372, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "334:4:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "333:16:2" - }, - "payable": false, - "returnParameters": { - "id": 1377, - "nodeType": "ParameterList", - "parameters": [], - "src": "368:0:2" - }, - "scope": 1404, - "src": "312:103:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1402, - "nodeType": "Block", - "src": "475:109:2", - "statements": [ - { - "assignments": [ - 1391 - ], - "declarations": [ - { - "constant": false, - "id": 1391, - "name": "upgraded", - "nodeType": "VariableDeclaration", - "scope": 1403, - "src": "481:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - }, - "typeName": { - "contractScope": null, - "id": 1390, - "name": "Migrations", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1404, - "src": "481:10:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1395, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1393, - "name": "new_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1385, - "src": "514:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1392, - "name": "Migrations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1404, - "src": "503:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Migrations_$1404_$", - "typeString": "type(contract Migrations)" - } - }, - "id": 1394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "503:23:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "481:45:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1399, - "name": "last_completed_migration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1353, - "src": "554:24:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1396, - "name": "upgraded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1391, - "src": "532:8:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - } - }, - "id": 1398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setCompleted", - "nodeType": "MemberAccess", - "referencedDeclaration": 1383, - "src": "532:21:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256) external" - } - }, - "id": 1400, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "532:47:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1401, - "nodeType": "ExpressionStatement", - "src": "532:47:2" - } - ] - }, - "documentation": null, - "id": 1403, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1388, - "modifierName": { - "argumentTypes": null, - "id": 1387, - "name": "restricted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1362, - "src": "464:10:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "464:10:2" - } - ], - "name": "upgrade", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1386, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1385, - "name": "new_address", - "nodeType": "VariableDeclaration", - "scope": 1403, - "src": "436:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1384, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "436:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "435:21:2" - }, - "payable": false, - "returnParameters": { - "id": 1389, - "nodeType": "ParameterList", - "parameters": [], - "src": "475:0:2" - }, - "scope": 1404, - "src": "419:165:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1405, - "src": "98:488:2" - } - ], - "src": "0:587:2" - }, - "legacyAST": { - "absolutePath": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/contracts/Migrations.sol", - "exportedSymbols": { - "Migrations": [ - 1404 - ] - }, - "id": 1405, - "nodeType": "SourceUnit", - "nodes": [ - { - "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol", - "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol", - "id": 1348, - "nodeType": "ImportDirective", - "scope": 1405, - "sourceUnit": 2202, - "src": "0:71:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "id": 1349, - "literals": [ - "solidity", - "^", - "0.4", - ".17" - ], - "nodeType": "PragmaDirective", - "src": "72:24:2" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1404, - "linearizedBaseContracts": [ - 1404 - ], - "name": "Migrations", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 1351, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1404, - "src": "122:20:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "122:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 1353, - "name": "last_completed_migration", - "nodeType": "VariableDeclaration", - "scope": 1404, - "src": "146:36:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1352, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "146:4:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "public" - }, - { - "body": { - "id": 1361, - "nodeType": "Block", - "src": "209:37:2", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1355, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "219:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1356, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "219:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1357, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "233:5:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "219:19:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1360, - "nodeType": "IfStatement", - "src": "215:26:2", - "trueBody": { - "id": 1359, - "nodeType": "PlaceholderStatement", - "src": "240:1:2" - } - } - ] - }, - "documentation": null, - "id": 1362, - "name": "restricted", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1354, - "nodeType": "ParameterList", - "parameters": [], - "src": "206:2:2" - }, - "src": "187:59:2", - "visibility": "internal" - }, - { - "body": { - "id": 1370, - "nodeType": "Block", - "src": "279:29:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1368, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1365, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "285:5:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1366, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "293:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "293:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "285:18:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1369, - "nodeType": "ExpressionStatement", - "src": "285:18:2" - } - ] - }, - "documentation": null, - "id": 1371, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "Migrations", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1363, - "nodeType": "ParameterList", - "parameters": [], - "src": "269:2:2" - }, - "payable": false, - "returnParameters": { - "id": 1364, - "nodeType": "ParameterList", - "parameters": [], - "src": "279:0:2" - }, - "scope": 1404, - "src": "250:58:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1382, - "nodeType": "Block", - "src": "368:47:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1380, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1378, - "name": "last_completed_migration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1353, - "src": "374:24:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 1379, - "name": "completed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1373, - "src": "401:9:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "374:36:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1381, - "nodeType": "ExpressionStatement", - "src": "374:36:2" - } - ] - }, - "documentation": null, - "id": 1383, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1376, - "modifierName": { - "argumentTypes": null, - "id": 1375, - "name": "restricted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1362, - "src": "357:10:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "357:10:2" - } - ], - "name": "setCompleted", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1373, - "name": "completed", - "nodeType": "VariableDeclaration", - "scope": 1383, - "src": "334:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1372, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "334:4:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "333:16:2" - }, - "payable": false, - "returnParameters": { - "id": 1377, - "nodeType": "ParameterList", - "parameters": [], - "src": "368:0:2" - }, - "scope": 1404, - "src": "312:103:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1402, - "nodeType": "Block", - "src": "475:109:2", - "statements": [ - { - "assignments": [ - 1391 - ], - "declarations": [ - { - "constant": false, - "id": 1391, - "name": "upgraded", - "nodeType": "VariableDeclaration", - "scope": 1403, - "src": "481:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - }, - "typeName": { - "contractScope": null, - "id": 1390, - "name": "Migrations", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1404, - "src": "481:10:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1395, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1393, - "name": "new_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1385, - "src": "514:11:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1392, - "name": "Migrations", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1404, - "src": "503:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Migrations_$1404_$", - "typeString": "type(contract Migrations)" - } - }, - "id": 1394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "503:23:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "481:45:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1399, - "name": "last_completed_migration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1353, - "src": "554:24:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1396, - "name": "upgraded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1391, - "src": "532:8:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Migrations_$1404", - "typeString": "contract Migrations" - } - }, - "id": 1398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "setCompleted", - "nodeType": "MemberAccess", - "referencedDeclaration": 1383, - "src": "532:21:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256) external" - } - }, - "id": 1400, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "532:47:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1401, - "nodeType": "ExpressionStatement", - "src": "532:47:2" - } - ] - }, - "documentation": null, - "id": 1403, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1388, - "modifierName": { - "argumentTypes": null, - "id": 1387, - "name": "restricted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1362, - "src": "464:10:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "464:10:2" - } - ], - "name": "upgrade", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1386, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1385, - "name": "new_address", - "nodeType": "VariableDeclaration", - "scope": 1403, - "src": "436:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1384, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "436:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "435:21:2" - }, - "payable": false, - "returnParameters": { - "id": 1389, - "nodeType": "ParameterList", - "parameters": [], - "src": "475:0:2" - }, - "scope": 1404, - "src": "419:165:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1405, - "src": "98:488:2" - } - ], - "src": "0:587:2" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-11-15T02:10:59.843Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/MinterRole.json b/truebit-implementation/build/contracts/MinterRole.json deleted file mode 100644 index e55d7f03..00000000 --- a/truebit-implementation/build/contracts/MinterRole.json +++ /dev/null @@ -1,2502 +0,0 @@ -{ - "contractName": "MinterRole", - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "MinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "MinterRemoved", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceMinter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "sourceMap": "", - "deployedSourceMap": "", - "source": "pragma solidity ^0.4.24;\n\nimport \"../Roles.sol\";\n\ncontract MinterRole {\n using Roles for Roles.Role;\n\n event MinterAdded(address indexed account);\n event MinterRemoved(address indexed account);\n\n Roles.Role private minters;\n\n constructor() internal {\n _addMinter(msg.sender);\n }\n\n modifier onlyMinter() {\n require(isMinter(msg.sender));\n _;\n }\n\n function isMinter(address account) public view returns (bool) {\n return minters.has(account);\n }\n\n function addMinter(address account) public onlyMinter {\n _addMinter(account);\n }\n\n function renounceMinter() public {\n _removeMinter(msg.sender);\n }\n\n function _addMinter(address account) internal {\n minters.add(account);\n emit MinterAdded(account);\n }\n\n function _removeMinter(address account) internal {\n minters.remove(account);\n emit MinterRemoved(account);\n }\n}\n", - "sourcePath": "openzeppelin-solidity/contracts/access/roles/MinterRole.sol", - "ast": { - "absolutePath": "openzeppelin-solidity/contracts/access/roles/MinterRole.sol", - "exportedSymbols": { - "MinterRole": [ - 1601 - ] - }, - "id": 1602, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1500, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:4" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol", - "file": "../Roles.sol", - "id": 1501, - "nodeType": "ImportDirective", - "scope": 1602, - "sourceUnit": 1499, - "src": "26:22:4", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1601, - "linearizedBaseContracts": [ - 1601 - ], - "name": "MinterRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1504, - "libraryName": { - "contractScope": null, - "id": 1502, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1498, - "src": "80:5:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$1498", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "74:27:4", - "typeName": { - "contractScope": null, - "id": 1503, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "90:10:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "anonymous": false, - "documentation": null, - "id": 1508, - "name": "MinterAdded", - "nodeType": "EventDefinition", - "parameters": { - "id": 1507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1506, - "indexed": true, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1508, - "src": "123:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1505, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "123:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "122:25:4" - }, - "src": "105:43:4" - }, - { - "anonymous": false, - "documentation": null, - "id": 1512, - "name": "MinterRemoved", - "nodeType": "EventDefinition", - "parameters": { - "id": 1511, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1510, - "indexed": true, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1512, - "src": "171:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1509, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "171:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "170:25:4" - }, - "src": "151:45:4" - }, - { - "constant": false, - "id": 1514, - "name": "minters", - "nodeType": "VariableDeclaration", - "scope": 1601, - "src": "200:26:4", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1513, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "200:10:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 1522, - "nodeType": "Block", - "src": "254:33:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1518, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "271:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "271:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1517, - "name": "_addMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "260:10:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "260:22:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1521, - "nodeType": "ExpressionStatement", - "src": "260:22:4" - } - ] - }, - "documentation": null, - "id": 1523, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1515, - "nodeType": "ParameterList", - "parameters": [], - "src": "242:2:4" - }, - "payable": false, - "returnParameters": { - "id": 1516, - "nodeType": "ParameterList", - "parameters": [], - "src": "254:0:4" - }, - "scope": 1601, - "src": "231:56:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1533, - "nodeType": "Block", - "src": "313:47:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1527, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "336:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "336:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1526, - "name": "isMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1547, - "src": "327:8:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 1529, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1525, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "319:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "319:29:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1531, - "nodeType": "ExpressionStatement", - "src": "319:29:4" - }, - { - "id": 1532, - "nodeType": "PlaceholderStatement", - "src": "354:1:4" - } - ] - }, - "documentation": null, - "id": 1534, - "name": "onlyMinter", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1524, - "nodeType": "ParameterList", - "parameters": [], - "src": "310:2:4" - }, - "src": "291:69:4", - "visibility": "internal" - }, - { - "body": { - "id": 1546, - "nodeType": "Block", - "src": "426:38:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1543, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1536, - "src": "451:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1541, - "name": "minters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1514, - "src": "439:7:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 1542, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 1497, - "src": "439:11:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$1411_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "439:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1540, - "id": 1545, - "nodeType": "Return", - "src": "432:27:4" - } - ] - }, - "documentation": null, - "id": 1547, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1537, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1536, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1547, - "src": "382:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1535, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "382:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "381:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1540, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1539, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1547, - "src": "420:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1538, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "420:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "419:6:4" - }, - "scope": 1601, - "src": "364:100:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1558, - "nodeType": "Block", - "src": "522:30:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1555, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1549, - "src": "539:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1554, - "name": "_addMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "528:10:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1556, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "528:19:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1557, - "nodeType": "ExpressionStatement", - "src": "528:19:4" - } - ] - }, - "documentation": null, - "id": 1559, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1552, - "modifierName": { - "argumentTypes": null, - "id": 1551, - "name": "onlyMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "511:10:4", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "511:10:4" - } - ], - "name": "addMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1550, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1549, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1559, - "src": "487:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1548, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "487:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "486:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1553, - "nodeType": "ParameterList", - "parameters": [], - "src": "522:0:4" - }, - "scope": 1601, - "src": "468:84:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1567, - "nodeType": "Block", - "src": "589:36:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1563, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "609:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "609:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1562, - "name": "_removeMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1600, - "src": "595:13:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "595:25:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1566, - "nodeType": "ExpressionStatement", - "src": "595:25:4" - } - ] - }, - "documentation": null, - "id": 1568, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "renounceMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1560, - "nodeType": "ParameterList", - "parameters": [], - "src": "579:2:4" - }, - "payable": false, - "returnParameters": { - "id": 1561, - "nodeType": "ParameterList", - "parameters": [], - "src": "589:0:4" - }, - "scope": 1601, - "src": "556:69:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1583, - "nodeType": "Block", - "src": "675:62:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1576, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1570, - "src": "693:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1573, - "name": "minters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1514, - "src": "681:7:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 1575, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1443, - "src": "681:11:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1411_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 1577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "681:20:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1578, - "nodeType": "ExpressionStatement", - "src": "681:20:4" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1580, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1570, - "src": "724:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1579, - "name": "MinterAdded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1508, - "src": "712:11:4", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "712:20:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1582, - "nodeType": "EmitStatement", - "src": "707:25:4" - } - ] - }, - "documentation": null, - "id": 1584, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_addMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1571, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1570, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1584, - "src": "649:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1569, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "648:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1572, - "nodeType": "ParameterList", - "parameters": [], - "src": "675:0:4" - }, - "scope": 1601, - "src": "629:108:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1599, - "nodeType": "Block", - "src": "790:67:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1592, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "811:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1589, - "name": "minters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1514, - "src": "796:7:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 1591, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 1474, - "src": "796:14:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1411_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 1593, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "796:23:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1594, - "nodeType": "ExpressionStatement", - "src": "796:23:4" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1596, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "844:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1595, - "name": "MinterRemoved", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "830:13:4", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "830:22:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1598, - "nodeType": "EmitStatement", - "src": "825:27:4" - } - ] - }, - "documentation": null, - "id": 1600, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_removeMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1587, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1586, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1600, - "src": "764:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1585, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "764:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "763:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1588, - "nodeType": "ParameterList", - "parameters": [], - "src": "790:0:4" - }, - "scope": 1601, - "src": "741:116:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1602, - "src": "50:809:4" - } - ], - "src": "0:860:4" - }, - "legacyAST": { - "absolutePath": "openzeppelin-solidity/contracts/access/roles/MinterRole.sol", - "exportedSymbols": { - "MinterRole": [ - 1601 - ] - }, - "id": 1602, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1500, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:4" - }, - { - "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol", - "file": "../Roles.sol", - "id": 1501, - "nodeType": "ImportDirective", - "scope": 1602, - "sourceUnit": 1499, - "src": "26:22:4", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1601, - "linearizedBaseContracts": [ - 1601 - ], - "name": "MinterRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1504, - "libraryName": { - "contractScope": null, - "id": 1502, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1498, - "src": "80:5:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$1498", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "74:27:4", - "typeName": { - "contractScope": null, - "id": 1503, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "90:10:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "anonymous": false, - "documentation": null, - "id": 1508, - "name": "MinterAdded", - "nodeType": "EventDefinition", - "parameters": { - "id": 1507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1506, - "indexed": true, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1508, - "src": "123:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1505, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "123:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "122:25:4" - }, - "src": "105:43:4" - }, - { - "anonymous": false, - "documentation": null, - "id": 1512, - "name": "MinterRemoved", - "nodeType": "EventDefinition", - "parameters": { - "id": 1511, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1510, - "indexed": true, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1512, - "src": "171:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1509, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "171:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "170:25:4" - }, - "src": "151:45:4" - }, - { - "constant": false, - "id": 1514, - "name": "minters", - "nodeType": "VariableDeclaration", - "scope": 1601, - "src": "200:26:4", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1513, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "200:10:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 1522, - "nodeType": "Block", - "src": "254:33:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1518, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "271:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "271:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1517, - "name": "_addMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "260:10:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "260:22:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1521, - "nodeType": "ExpressionStatement", - "src": "260:22:4" - } - ] - }, - "documentation": null, - "id": 1523, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1515, - "nodeType": "ParameterList", - "parameters": [], - "src": "242:2:4" - }, - "payable": false, - "returnParameters": { - "id": 1516, - "nodeType": "ParameterList", - "parameters": [], - "src": "254:0:4" - }, - "scope": 1601, - "src": "231:56:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1533, - "nodeType": "Block", - "src": "313:47:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1527, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "336:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "336:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1526, - "name": "isMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1547, - "src": "327:8:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 1529, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1525, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "319:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "319:29:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1531, - "nodeType": "ExpressionStatement", - "src": "319:29:4" - }, - { - "id": 1532, - "nodeType": "PlaceholderStatement", - "src": "354:1:4" - } - ] - }, - "documentation": null, - "id": 1534, - "name": "onlyMinter", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1524, - "nodeType": "ParameterList", - "parameters": [], - "src": "310:2:4" - }, - "src": "291:69:4", - "visibility": "internal" - }, - { - "body": { - "id": 1546, - "nodeType": "Block", - "src": "426:38:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1543, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1536, - "src": "451:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1541, - "name": "minters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1514, - "src": "439:7:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 1542, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 1497, - "src": "439:11:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$1411_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "439:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1540, - "id": 1545, - "nodeType": "Return", - "src": "432:27:4" - } - ] - }, - "documentation": null, - "id": 1547, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1537, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1536, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1547, - "src": "382:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1535, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "382:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "381:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1540, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1539, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1547, - "src": "420:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1538, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "420:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "419:6:4" - }, - "scope": 1601, - "src": "364:100:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1558, - "nodeType": "Block", - "src": "522:30:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1555, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1549, - "src": "539:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1554, - "name": "_addMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1584, - "src": "528:10:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1556, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "528:19:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1557, - "nodeType": "ExpressionStatement", - "src": "528:19:4" - } - ] - }, - "documentation": null, - "id": 1559, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 1552, - "modifierName": { - "argumentTypes": null, - "id": 1551, - "name": "onlyMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "511:10:4", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "511:10:4" - } - ], - "name": "addMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1550, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1549, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1559, - "src": "487:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1548, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "487:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "486:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1553, - "nodeType": "ParameterList", - "parameters": [], - "src": "522:0:4" - }, - "scope": 1601, - "src": "468:84:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1567, - "nodeType": "Block", - "src": "589:36:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1563, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2285, - "src": "609:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "609:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1562, - "name": "_removeMinter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1600, - "src": "595:13:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "595:25:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1566, - "nodeType": "ExpressionStatement", - "src": "595:25:4" - } - ] - }, - "documentation": null, - "id": 1568, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "renounceMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1560, - "nodeType": "ParameterList", - "parameters": [], - "src": "579:2:4" - }, - "payable": false, - "returnParameters": { - "id": 1561, - "nodeType": "ParameterList", - "parameters": [], - "src": "589:0:4" - }, - "scope": 1601, - "src": "556:69:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 1583, - "nodeType": "Block", - "src": "675:62:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1576, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1570, - "src": "693:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1573, - "name": "minters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1514, - "src": "681:7:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 1575, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1443, - "src": "681:11:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1411_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 1577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "681:20:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1578, - "nodeType": "ExpressionStatement", - "src": "681:20:4" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1580, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1570, - "src": "724:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1579, - "name": "MinterAdded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1508, - "src": "712:11:4", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "712:20:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1582, - "nodeType": "EmitStatement", - "src": "707:25:4" - } - ] - }, - "documentation": null, - "id": 1584, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_addMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1571, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1570, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1584, - "src": "649:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1569, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "648:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1572, - "nodeType": "ParameterList", - "parameters": [], - "src": "675:0:4" - }, - "scope": 1601, - "src": "629:108:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1599, - "nodeType": "Block", - "src": "790:67:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1592, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "811:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1589, - "name": "minters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1514, - "src": "796:7:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 1591, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 1474, - "src": "796:14:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1411_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 1593, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "796:23:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1594, - "nodeType": "ExpressionStatement", - "src": "796:23:4" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1596, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "844:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1595, - "name": "MinterRemoved", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "830:13:4", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "830:22:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1598, - "nodeType": "EmitStatement", - "src": "825:27:4" - } - ] - }, - "documentation": null, - "id": 1600, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_removeMinter", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1587, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1586, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1600, - "src": "764:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1585, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "764:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "763:17:4" - }, - "payable": false, - "returnParameters": { - "id": 1588, - "nodeType": "ParameterList", - "parameters": [], - "src": "790:0:4" - }, - "scope": 1601, - "src": "741:116:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1602, - "src": "50:809:4" - } - ], - "src": "0:860:4" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-11-15T02:10:59.843Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/Roles.json b/truebit-implementation/build/contracts/Roles.json deleted file mode 100644 index 915c9934..00000000 --- a/truebit-implementation/build/contracts/Roles.json +++ /dev/null @@ -1,2569 +0,0 @@ -{ - "contractName": "Roles", - "abi": [], - "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820ac25fab4c717803902b5fabc4cc443e2b3ee747211b409770034b099c62ee0ce0029", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820ac25fab4c717803902b5fabc4cc443e2b3ee747211b409770034b099c62ee0ce0029", - "sourceMap": "109:784:3:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24", - "deployedSourceMap": "109:784:3:-;;;;;;;;", - "source": "pragma solidity ^0.4.24;\n\n/**\n * @title Roles\n * @dev Library for managing addresses assigned to a Role.\n */\nlibrary Roles {\n struct Role {\n mapping (address => bool) bearer;\n }\n\n /**\n * @dev give an account access to this role\n */\n function add(Role storage role, address account) internal {\n require(account != address(0));\n require(!has(role, account));\n\n role.bearer[account] = true;\n }\n\n /**\n * @dev remove an account's access to this role\n */\n function remove(Role storage role, address account) internal {\n require(account != address(0));\n require(has(role, account));\n\n role.bearer[account] = false;\n }\n\n /**\n * @dev check if an account has this role\n * @return bool\n */\n function has(Role storage role, address account)\n internal\n view\n returns (bool)\n {\n require(account != address(0));\n return role.bearer[account];\n }\n}\n", - "sourcePath": "openzeppelin-solidity/contracts/access/Roles.sol", - "ast": { - "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 1498 - ] - }, - "id": 1499, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1406, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:3" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 1498, - "linearizedBaseContracts": [ - 1498 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 1411, - "members": [ - { - "constant": false, - "id": 1410, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 1411, - "src": "145:32:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1409, - "keyType": { - "id": 1407, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "154:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "145:25:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1408, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "165:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 1498, - "src": "127:55:3", - "visibility": "public" - }, - { - "body": { - "id": 1442, - "nodeType": "Block", - "src": "302:109:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1419, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1415, - "src": "316:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "335:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "327:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1422, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "316:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1418, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "308:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "308:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1425, - "nodeType": "ExpressionStatement", - "src": "308:30:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "352:19:3", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1428, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1413, - "src": "357:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 1429, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1415, - "src": "363:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1427, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "353:3:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "353:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1426, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "344:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "344:28:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1433, - "nodeType": "ExpressionStatement", - "src": "344:28:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1434, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1413, - "src": "379:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1437, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1410, - "src": "379:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1438, - "indexExpression": { - "argumentTypes": null, - "id": 1436, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1415, - "src": "391:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "379:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1439, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "402:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "379:27:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1441, - "nodeType": "ExpressionStatement", - "src": "379:27:3" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 1443, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1416, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1413, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1443, - "src": "257:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1412, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "257:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1415, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1443, - "src": "276:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1414, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "276:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "256:36:3" - }, - "payable": false, - "returnParameters": { - "id": 1417, - "nodeType": "ParameterList", - "parameters": [], - "src": "302:0:3" - }, - "scope": 1498, - "src": "244:167:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1473, - "nodeType": "Block", - "src": "538:109:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1455, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1451, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "552:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1453, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "571:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1452, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "563:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1454, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "563:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "552:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1450, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "544:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "544:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1457, - "nodeType": "ExpressionStatement", - "src": "544:30:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1460, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1445, - "src": "592:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 1461, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "598:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1459, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "588:3:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "588:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1458, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "580:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "580:27:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1464, - "nodeType": "ExpressionStatement", - "src": "580:27:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1471, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1465, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1445, - "src": "614:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1468, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1410, - "src": "614:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1469, - "indexExpression": { - "argumentTypes": null, - "id": 1467, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "626:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "614:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1470, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "637:5:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "614:28:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1472, - "nodeType": "ExpressionStatement", - "src": "614:28:3" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 1474, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1448, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1445, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1474, - "src": "493:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1444, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "493:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1447, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1474, - "src": "512:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1446, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "512:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "492:36:3" - }, - "payable": false, - "returnParameters": { - "id": 1449, - "nodeType": "ParameterList", - "parameters": [], - "src": "538:0:3" - }, - "scope": 1498, - "src": "477:170:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1496, - "nodeType": "Block", - "src": "817:74:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1484, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1478, - "src": "831:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1486, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "850:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1485, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "842:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1487, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "842:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "831:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1483, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "823:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "823:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1490, - "nodeType": "ExpressionStatement", - "src": "823:30:3" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1491, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1476, - "src": "866:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1492, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1410, - "src": "866:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1494, - "indexExpression": { - "argumentTypes": null, - "id": 1493, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1478, - "src": "878:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "866:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1482, - "id": 1495, - "nodeType": "Return", - "src": "859:27:3" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 1497, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1479, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1476, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1497, - "src": "738:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1475, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "738:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1478, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1497, - "src": "757:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1477, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "757:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "737:36:3" - }, - "payable": false, - "returnParameters": { - "id": 1482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1481, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1497, - "src": "809:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1480, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "809:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "808:6:3" - }, - "scope": 1498, - "src": "725:166:3", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1499, - "src": "109:784:3" - } - ], - "src": "0:894:3" - }, - "legacyAST": { - "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 1498 - ] - }, - "id": 1499, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1406, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:3" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 1498, - "linearizedBaseContracts": [ - 1498 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 1411, - "members": [ - { - "constant": false, - "id": 1410, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 1411, - "src": "145:32:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1409, - "keyType": { - "id": 1407, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "154:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "145:25:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1408, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "165:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 1498, - "src": "127:55:3", - "visibility": "public" - }, - { - "body": { - "id": 1442, - "nodeType": "Block", - "src": "302:109:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1419, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1415, - "src": "316:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "335:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "327:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1422, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "316:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1418, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "308:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "308:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1425, - "nodeType": "ExpressionStatement", - "src": "308:30:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "352:19:3", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1428, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1413, - "src": "357:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 1429, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1415, - "src": "363:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1427, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "353:3:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "353:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1426, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "344:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "344:28:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1433, - "nodeType": "ExpressionStatement", - "src": "344:28:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1434, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1413, - "src": "379:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1437, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1410, - "src": "379:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1438, - "indexExpression": { - "argumentTypes": null, - "id": 1436, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1415, - "src": "391:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "379:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1439, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "402:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "379:27:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1441, - "nodeType": "ExpressionStatement", - "src": "379:27:3" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 1443, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1416, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1413, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1443, - "src": "257:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1412, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "257:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1415, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1443, - "src": "276:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1414, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "276:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "256:36:3" - }, - "payable": false, - "returnParameters": { - "id": 1417, - "nodeType": "ParameterList", - "parameters": [], - "src": "302:0:3" - }, - "scope": 1498, - "src": "244:167:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1473, - "nodeType": "Block", - "src": "538:109:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1455, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1451, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "552:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1453, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "571:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1452, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "563:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1454, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "563:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "552:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1450, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "544:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "544:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1457, - "nodeType": "ExpressionStatement", - "src": "544:30:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1460, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1445, - "src": "592:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 1461, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "598:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1459, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "588:3:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1411_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "588:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1458, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "580:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "580:27:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1464, - "nodeType": "ExpressionStatement", - "src": "580:27:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 1471, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1465, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1445, - "src": "614:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1468, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1410, - "src": "614:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1469, - "indexExpression": { - "argumentTypes": null, - "id": 1467, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "626:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "614:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1470, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "637:5:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "614:28:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1472, - "nodeType": "ExpressionStatement", - "src": "614:28:3" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 1474, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1448, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1445, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1474, - "src": "493:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1444, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "493:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1447, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1474, - "src": "512:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1446, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "512:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "492:36:3" - }, - "payable": false, - "returnParameters": { - "id": 1449, - "nodeType": "ParameterList", - "parameters": [], - "src": "538:0:3" - }, - "scope": 1498, - "src": "477:170:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1496, - "nodeType": "Block", - "src": "817:74:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1484, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1478, - "src": "831:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1486, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "850:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1485, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "842:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1487, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "842:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "831:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1483, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2288, - 2289 - ], - "referencedDeclaration": 2288, - "src": "823:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "823:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1490, - "nodeType": "ExpressionStatement", - "src": "823:30:3" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1491, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1476, - "src": "866:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1492, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1410, - "src": "866:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1494, - "indexExpression": { - "argumentTypes": null, - "id": 1493, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1478, - "src": "878:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "866:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1482, - "id": 1495, - "nodeType": "Return", - "src": "859:27:3" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 1497, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1479, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1476, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1497, - "src": "738:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1475, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1411, - "src": "738:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1411_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1478, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1497, - "src": "757:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1477, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "757:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "737:36:3" - }, - "payable": false, - "returnParameters": { - "id": 1482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1481, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1497, - "src": "809:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1480, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "809:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "808:6:3" - }, - "scope": 1498, - "src": "725:166:3", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1499, - "src": "109:784:3" - } - ], - "src": "0:894:3" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-11-15T02:10:59.843Z" -} \ No newline at end of file diff --git a/truebit-implementation/build/contracts/SafeMath.json b/truebit-implementation/build/contracts/SafeMath.json deleted file mode 100644 index 64caa92b..00000000 --- a/truebit-implementation/build/contracts/SafeMath.json +++ /dev/null @@ -1,3299 +0,0 @@ -{ - "contractName": "SafeMath", - "abi": [], - "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820b1bb993de962adc6f260c76caa215c5c2682180b1afbe01a04e87c282a79ce1a0029", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820b1bb993de962adc6f260c76caa215c5c2682180b1afbe01a04e87c282a79ce1a0029", - "sourceMap": "117:1531:2:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24", - "deployedSourceMap": "117:1531:2:-;;;;;;;;", - "source": "pragma solidity ^0.4.24;\n\n/**\n * @title SafeMath\n * @dev Math operations with safety checks that revert on error\n */\nlibrary SafeMath {\n\n /**\n * @dev Multiplies two numbers, reverts on overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n if (a == 0) {\n return 0;\n }\n\n uint256 c = a * b;\n require(c / a == b);\n\n return c;\n }\n\n /**\n * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0); // Solidity only automatically asserts when dividing by 0\n uint256 c = a / b;\n // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n return c;\n }\n\n /**\n * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a);\n uint256 c = a - b;\n\n return c;\n }\n\n /**\n * @dev Adds two numbers, reverts on overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a);\n\n return c;\n }\n\n /**\n * @dev Divides two numbers and returns the remainder (unsigned integer modulo),\n * reverts when dividing by zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b != 0);\n return a % b;\n }\n}\n", - "sourcePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", - "ast": { - "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 1514 - ] - }, - "id": 1515, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1388, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:2" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 1514, - "linearizedBaseContracts": [ - 1514 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 1420, - "nodeType": "Block", - "src": "271:314:2", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1397, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "486:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1398, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "491:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "486:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1403, - "nodeType": "IfStatement", - "src": "482:35:2", - "trueBody": { - "id": 1402, - "nodeType": "Block", - "src": "494:23:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "509:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 1396, - "id": 1401, - "nodeType": "Return", - "src": "502:8:2" - } - ] - } - }, - { - "assignments": [ - 1405 - ], - "declarations": [ - { - "constant": false, - "id": 1405, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "523:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1404, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "523:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1409, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1406, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "535:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 1407, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1392, - "src": "539:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "535:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "523:17:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1411, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1405, - "src": "554:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1412, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "558:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1414, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1392, - "src": "563:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:10:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1410, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "546:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "546:19:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1417, - "nodeType": "ExpressionStatement", - "src": "546:19:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1418, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1405, - "src": "579:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1396, - "id": 1419, - "nodeType": "Return", - "src": "572:8:2" - } - ] - }, - "documentation": "@dev Multiplies two numbers, reverts on overflow.", - "id": 1421, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1393, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1390, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "217:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1389, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "217:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1392, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "228:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1391, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "228:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "216:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1395, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "262:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "262:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "261:9:2" - }, - "scope": 1514, - "src": "204:381:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1444, - "nodeType": "Block", - "src": "762:203:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1433, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1431, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1425, - "src": "776:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1432, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "780:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "776:5:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1430, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "768:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "768:14:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1435, - "nodeType": "ExpressionStatement", - "src": "768:14:2" - }, - { - "assignments": [ - 1437 - ], - "declarations": [ - { - "constant": false, - "id": 1437, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "846:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1436, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "846:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1441, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1438, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1423, - "src": "858:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1439, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1425, - "src": "862:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "858:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "846:17:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1442, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1437, - "src": "959:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1429, - "id": 1443, - "nodeType": "Return", - "src": "952:8:2" - } - ] - }, - "documentation": "@dev Integer division of two numbers truncating the quotient, reverts on division by zero.", - "id": 1445, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1426, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1423, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "708:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1422, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "708:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1425, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "719:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1424, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "719:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "707:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1428, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "753:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1427, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "753:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "752:9:2" - }, - "scope": 1514, - "src": "695:270:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1468, - "nodeType": "Block", - "src": "1145:64:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1455, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1449, - "src": "1159:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 1456, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "1164:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1159:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1454, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "1151:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1151:15:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1459, - "nodeType": "ExpressionStatement", - "src": "1151:15:2" - }, - { - "assignments": [ - 1461 - ], - "declarations": [ - { - "constant": false, - "id": 1461, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1172:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1460, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1172:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1465, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1462, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "1184:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 1463, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1449, - "src": "1188:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1184:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1172:17:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1466, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1461, - "src": "1203:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1453, - "id": 1467, - "nodeType": "Return", - "src": "1196:8:2" - } - ] - }, - "documentation": "@dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 1469, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1450, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1447, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1091:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1446, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1091:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1449, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1102:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1448, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1102:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1090:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1453, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1452, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1136:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1451, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1136:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1135:9:2" - }, - "scope": 1514, - "src": "1078:131:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1492, - "nodeType": "Block", - "src": "1339:64:2", - "statements": [ - { - "assignments": [ - 1479 - ], - "declarations": [ - { - "constant": false, - "id": 1479, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1345:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1478, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1345:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1483, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1480, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1471, - "src": "1357:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 1481, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1473, - "src": "1361:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1357:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1345:17:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1485, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1479, - "src": "1376:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 1486, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1471, - "src": "1381:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1376:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1484, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "1368:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1368:15:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1489, - "nodeType": "ExpressionStatement", - "src": "1368:15:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1490, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1479, - "src": "1397:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1477, - "id": 1491, - "nodeType": "Return", - "src": "1390:8:2" - } - ] - }, - "documentation": "@dev Adds two numbers, reverts on overflow.", - "id": 1493, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1474, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1471, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1285:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1470, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1285:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1473, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1296:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1472, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1296:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1284:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1477, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1476, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1330:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1475, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1330:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1329:9:2" - }, - "scope": 1514, - "src": "1272:131:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1512, - "nodeType": "Block", - "src": "1602:44:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1503, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "1616:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1504, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1621:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1616:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1502, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "1608:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1608:15:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1507, - "nodeType": "ExpressionStatement", - "src": "1608:15:2" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1508, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1495, - "src": "1636:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 1509, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "1640:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1636:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1501, - "id": 1511, - "nodeType": "Return", - "src": "1629:12:2" - } - ] - }, - "documentation": "@dev Divides two numbers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 1513, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1498, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1495, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1513, - "src": "1548:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1494, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1548:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1497, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1513, - "src": "1559:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1496, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1559:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1547:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1501, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1500, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1513, - "src": "1593:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1499, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1593:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1592:9:2" - }, - "scope": 1514, - "src": "1535:111:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1515, - "src": "117:1531:2" - } - ], - "src": "0:1649:2" - }, - "legacyAST": { - "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 1514 - ] - }, - "id": 1515, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1388, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:2" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 1514, - "linearizedBaseContracts": [ - 1514 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 1420, - "nodeType": "Block", - "src": "271:314:2", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1397, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "486:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1398, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "491:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "486:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1403, - "nodeType": "IfStatement", - "src": "482:35:2", - "trueBody": { - "id": 1402, - "nodeType": "Block", - "src": "494:23:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "509:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 1396, - "id": 1401, - "nodeType": "Return", - "src": "502:8:2" - } - ] - } - }, - { - "assignments": [ - 1405 - ], - "declarations": [ - { - "constant": false, - "id": 1405, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "523:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1404, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "523:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1409, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1406, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "535:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 1407, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1392, - "src": "539:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "535:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "523:17:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1411, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1405, - "src": "554:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1412, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "558:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1414, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1392, - "src": "563:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:10:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1410, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "546:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "546:19:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1417, - "nodeType": "ExpressionStatement", - "src": "546:19:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1418, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1405, - "src": "579:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1396, - "id": 1419, - "nodeType": "Return", - "src": "572:8:2" - } - ] - }, - "documentation": "@dev Multiplies two numbers, reverts on overflow.", - "id": 1421, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1393, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1390, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "217:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1389, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "217:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1392, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "228:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1391, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "228:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "216:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1395, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "262:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "262:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "261:9:2" - }, - "scope": 1514, - "src": "204:381:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1444, - "nodeType": "Block", - "src": "762:203:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1433, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1431, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1425, - "src": "776:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1432, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "780:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "776:5:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1430, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "768:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "768:14:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1435, - "nodeType": "ExpressionStatement", - "src": "768:14:2" - }, - { - "assignments": [ - 1437 - ], - "declarations": [ - { - "constant": false, - "id": 1437, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "846:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1436, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "846:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1441, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1438, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1423, - "src": "858:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1439, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1425, - "src": "862:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "858:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "846:17:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1442, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1437, - "src": "959:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1429, - "id": 1443, - "nodeType": "Return", - "src": "952:8:2" - } - ] - }, - "documentation": "@dev Integer division of two numbers truncating the quotient, reverts on division by zero.", - "id": 1445, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1426, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1423, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "708:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1422, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "708:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1425, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "719:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1424, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "719:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "707:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1428, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1445, - "src": "753:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1427, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "753:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "752:9:2" - }, - "scope": 1514, - "src": "695:270:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1468, - "nodeType": "Block", - "src": "1145:64:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1455, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1449, - "src": "1159:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 1456, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "1164:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1159:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1454, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "1151:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1151:15:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1459, - "nodeType": "ExpressionStatement", - "src": "1151:15:2" - }, - { - "assignments": [ - 1461 - ], - "declarations": [ - { - "constant": false, - "id": 1461, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1172:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1460, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1172:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1465, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1462, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1447, - "src": "1184:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 1463, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1449, - "src": "1188:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1184:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1172:17:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1466, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1461, - "src": "1203:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1453, - "id": 1467, - "nodeType": "Return", - "src": "1196:8:2" - } - ] - }, - "documentation": "@dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 1469, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1450, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1447, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1091:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1446, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1091:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1449, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1102:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1448, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1102:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1090:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1453, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1452, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1469, - "src": "1136:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1451, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1136:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1135:9:2" - }, - "scope": 1514, - "src": "1078:131:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1492, - "nodeType": "Block", - "src": "1339:64:2", - "statements": [ - { - "assignments": [ - 1479 - ], - "declarations": [ - { - "constant": false, - "id": 1479, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1345:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1478, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1345:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1483, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1480, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1471, - "src": "1357:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 1481, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1473, - "src": "1361:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1357:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1345:17:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1485, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1479, - "src": "1376:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 1486, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1471, - "src": "1381:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1376:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1484, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "1368:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1488, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1368:15:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1489, - "nodeType": "ExpressionStatement", - "src": "1368:15:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 1490, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1479, - "src": "1397:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1477, - "id": 1491, - "nodeType": "Return", - "src": "1390:8:2" - } - ] - }, - "documentation": "@dev Adds two numbers, reverts on overflow.", - "id": 1493, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1474, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1471, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1285:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1470, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1285:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1473, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1296:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1472, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1296:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1284:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1477, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1476, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1493, - "src": "1330:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1475, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1330:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1329:9:2" - }, - "scope": 1514, - "src": "1272:131:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1512, - "nodeType": "Block", - "src": "1602:44:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1503, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "1616:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1504, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1621:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1616:6:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1502, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 2045, - 2046 - ], - "referencedDeclaration": 2045, - "src": "1608:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1608:15:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1507, - "nodeType": "ExpressionStatement", - "src": "1608:15:2" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1508, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1495, - "src": "1636:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 1509, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "1640:1:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1636:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1501, - "id": 1511, - "nodeType": "Return", - "src": "1629:12:2" - } - ] - }, - "documentation": "@dev Divides two numbers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 1513, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1498, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1495, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1513, - "src": "1548:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1494, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1548:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1497, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1513, - "src": "1559:9:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1496, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1559:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1547:22:2" - }, - "payable": false, - "returnParameters": { - "id": 1501, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1500, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1513, - "src": "1593:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1499, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1593:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1592:9:2" - }, - "scope": 1514, - "src": "1535:111:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1515, - "src": "117:1531:2" - } - ], - "src": "0:1649:2" - }, - "compiler": { - "name": "solc", - "version": "0.4.24+commit.e67f0147.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "2.0.1", - "updatedAt": "2018-12-07T22:50:05.593Z" -} \ No newline at end of file diff --git a/truebit-implementation/contracts/IICO.sol b/truebit-implementation/contracts/IICO.sol index b5be9bfd..c2c799fa 100644 --- a/truebit-implementation/contracts/IICO.sol +++ b/truebit-implementation/contracts/IICO.sol @@ -29,6 +29,8 @@ contract IICO { uint constant HEAD = 0; // Minimum value used for both the maxValuation and bidID of the head of the linked list. uint constant TAIL = uint(-1); // Maximum value used for both the maxValuation and bidID of the tail of the linked list. uint constant INFINITY = uint(-2); // A value so high that a bid using it is guaranteed to succeed. Still lower than TAIL to be placed before TAIL. + uint constant ZERO = 0; + uint constant MAXMIN = uint(-1) - 1; // A bid to buy tokens as long as the personal maximum valuation is not exceeded. // Bids are in a sorted doubly linked list. // They are sorted in ascending order by (maxValuation,bidID) where bidID is the ID and key of the bid in the mapping. @@ -46,7 +48,9 @@ contract IICO { uint minBucketID; uint maxBucketID; - + uint creationBlock; + uint pokeOutReward; + uint pokeInReward; } struct BidBucket { @@ -74,6 +78,7 @@ contract IICO { uint public increment; uint public numBuckets; uint constant BONUS_DIVISOR = 1E9; // The quantity we need to divide by to normalize the bonus. + uint public constant pokeReward = 0.01 ether; /* *** Finalization variables *** */ bool public finalized; // True when the cutting bid has been found. The following variables are final only after finalized==true. @@ -83,7 +88,8 @@ contract IICO { /* *** Events *** */ event BidSubmitted(address indexed contributor, uint indexed bidID, uint indexed time); - event Poked(address indexed poker, uint indexed bidID); + event PokeIn(address indexed poker, uint indexed bidID); + event PokeOut(address indexed poker, uint indexed bidID); /* *** Modifiers *** */ modifier onlyOwner{ require(owner == msg.sender); _; } @@ -110,21 +116,6 @@ contract IICO { minValuation = _minValuation; increment = _increment; numBuckets = ((maxValuation - minValuation) / increment) + 1; - - // Add the first and the last buckets. - buckets[0] = BidBucket({ - valuation: minValuation, - maxCapBids: new uint[](0), - personalMinBids: new uint[](0), - creator: msg.sender - }); - - buckets[uint(numBuckets-1)] = BidBucket({ - valuation: maxValuation, - maxCapBids: new uint[](0), - personalMinBids: new uint[](0), - creator: msg.sender - }); } /** @dev Set the token. Must only be called after the IICO contract receives the tokens to be sold. @@ -146,45 +137,31 @@ contract IICO { // Make sure the two valuations are multiples of the increment require(now >= startTime && now < endTime); // Check that the bids are still open. require(_maxCap >= minValuation && _maxCap > _personalMin); - require( (_maxCap - minValuation) % increment == 0); - require( (_personalMin - minValuation) % increment == 0); + require( msg.value > (pokeReward + pokeReward)); uint minBucketID = (_personalMin - minValuation) / increment; uint maxBucketID = (_maxCap - minValuation) / increment; - - if (buckets[minBucketID].creator == address(0x0)) { - buckets[minBucketID] = BidBucket({ - valuation: _personalMin, - maxCapBids: new uint[](0), - personalMinBids: new uint[](0), - creator: msg.sender - }); - } - if (buckets[maxBucketID].creator == address(0x0)) { - buckets[maxBucketID] = BidBucket({ - valuation: _maxCap, - maxCapBids: new uint[](0), - personalMinBids: new uint[](0), - creator: msg.sender - }); - } - - BidBucket storage bucket = buckets[maxBucketID]; + uint realContrib = msg.value - (pokeReward + pokeReward); + ++lastBidID; // Create the bid and mark it inactive if the valuation is not within // its bounds. + // TODO : CRITICAL THAT WE SUBTRACT THE POKE REWARD FROM THE AMOUNT SENT WITH THE TRANSACTION bids[lastBidID] = Bid({ maxValuation: _maxCap, personalMin: _personalMin, - contrib: msg.value, + contrib: realContrib, bonus: bonus(), contributor: msg.sender, withdrawn: false, redeemed: false, minBucketID: minBucketID, maxBucketID: maxBucketID, - active: (sumAcceptedContrib+msg.value > _maxCap || sumAcceptedContrib+msg.value < _personalMin) ? false: true + active: (sumAcceptedContrib+realContrib > _maxCap || sumAcceptedContrib+realContrib < _personalMin) ? false: true, + creationBlock: block.number, + pokeOutReward: pokeReward, + pokeInReward: pokeReward }); Bid storage bid = bids[lastBidID]; @@ -194,12 +171,33 @@ contract IICO { sumAcceptedVirtualContrib += bid.contrib + (bid.contrib * bid.bonus) / BONUS_DIVISOR; // Place the bids in the two buckets - buckets[maxBucketID].maxCapBids.push(lastBidID); - buckets[minBucketID].personalMinBids.push(lastBidID); contributorBidIDs[msg.sender].push(lastBidID); emit BidSubmitted(msg.sender, lastBidID, now); } - + + + function bidBufferUint() public constant + returns (uint[], uint[], uint[], uint[], uint[]) + { + uint[] memory _maxval = new uint[](lastBidID); + uint[] memory _pmin = new uint[](lastBidID); + uint[] memory _contrib = new uint[](lastBidID); + uint[] memory _bonus = new uint[](lastBidID); + uint[] memory _block = new uint[](lastBidID); + uint i = 0; + + for (i = 0; i < lastBidID; i++) { + Bid storage _bid = bids[i]; + _maxval[i] = _bid.maxValuation; + _pmin[i] = _bid.personalMin; + _contrib[i] = _bid.contrib; + _bonus[i] = _bid.bonus; + _block[i] = _bid.creationBlock; + } + + return (_maxval, _pmin, _contrib, _bonus, _block); + } + /** @dev Withdraw a bid. Can only be called before the end of the withdrawal lock period. * Withdrawing a bid reduces its bonus by 1/3. @@ -297,7 +295,7 @@ contract IICO { */ function () public payable { if (msg.value != 0 && now >= startTime && now < endTime) // Make a bid with an infinite maxValuation if some ETH was sent. - submitBid(INFINITY, TAIL); + submitBid(INFINITY, ZERO); else if (msg.value == 0 && finalized) // Else, redeem all the non redeemed bids if no ETH was sent. for (uint i = 0; i < contributorBidIDs[msg.sender].length; ++i) { @@ -308,36 +306,49 @@ contract IICO { revert(); } - /** @dev Poke a bid. Checks if the bid should be make active or inactive. - * @param _bids ID of the bid to poke. - */ - function poke(uint[] _bids) public { + function pokeOut(uint[] _bids) public { uint localSumContrib = sumAcceptedContrib; uint localVSumContrib = sumAcceptedVirtualContrib; uint256 i = 0; - Bid storage bid = bids[0]; - - for (i = 0; i < _bids.length; i++) { - bid = bids[_bids[i]]; - if (bid.active) { - localSumContrib -= bid.contrib; - } else { - localSumContrib += bid.contrib; - } - } + Bid storage bid = bids[0]; // TEST THIS LINE for (i = 0; i < _bids.length; i++) { bid = bids[_bids[i]]; if (bid.active) { - require(localSumContrib > bid.maxValuation || localSumContrib < bid.personalMin); - } else { - require(localSumContrib <= bid.maxValuation && localSumContrib >= bid.personalMin); + if (localSumContrib > bid.maxValuation) { + bid.active = false; + localSumContrib -= bid.contrib; + if (bid.pokeOutReward != 0) { + msg.sender.transfer(bid.pokeOutReward); + bid.pokeOutReward = 0; + } + emit PokeOut(msg.sender, _bids[i]); + } } } + sumAcceptedContrib = localSumContrib; + } + + function pokeIn(uint[] _bids) public { + uint localSumContrib = sumAcceptedContrib; + uint localVSumContrib = sumAcceptedVirtualContrib; + uint256 i = 0; + Bid storage bid = bids[0]; // TEST THIS LINE + for (i = 0; i < _bids.length; i++) { bid = bids[_bids[i]]; - bid.active = !bid.active; + if (!bid.active) { + if (localSumContrib >= bid.personalMin) { + bid.active = true; + localSumContrib += bid.contrib; + if (bid.pokeInReward != 0) { + msg.sender.transfer(bid.pokeInReward); + bid.pokeInReward = 0; + } + emit PokeIn(msg.sender, _bids[i]); + } + } } sumAcceptedContrib = localSumContrib; @@ -369,48 +380,4 @@ contract IICO { contribution += bids[contributorBidIDs[_contributor][i]].contrib; } - - /** @dev Get the array of personal min bids from a bucket. - * This can be used for getting data for visualization. - * @param _bucketid The ID of the bucket to get the list from. - * @return minBids The array of personal min bids in the bucket. - */ - function bucketMinBids(uint _bucketid) public view returns (uint[] memory minBids) { - BidBucket storage bucket = buckets[_bucketid]; - if (bucket.creator == address(0x0)) { - return minBids; - } - - minBids = new uint[](bucket.personalMinBids.length); - uint i = 0; - - for (i = 0; i < bucket.personalMinBids.length; i++) { - minBids[i] = bucket.personalMinBids[i]; - } - - return minBids; - } - - - /** @dev Get the array of maximum cap bids from a bucket. - * This can be used for getting data for visualization. - * @param _bucketid The ID of the bucket to get the list from. - * @return maxBids The array of maximum cap bids in the bucket. - */ - function bucketMaxBids(uint _bucketid) public view returns (uint[] memory maxBids) { - BidBucket storage bucket = buckets[_bucketid]; - if (bucket.creator == address(0x0)) { - return maxBids; - } - - maxBids = new uint[](bucket.maxCapBids.length); - uint i = 0; - - for (i = 0; i < bucket.maxCapBids.length; i++) { - maxBids[i] = bucket.maxCapBids[i]; - } - - return maxBids; - } - } diff --git a/truebit-implementation/contracts/Migrations.sol b/truebit-implementation/contracts/Migrations.sol index b32598ea..c4efb65e 100644 --- a/truebit-implementation/contracts/Migrations.sol +++ b/truebit-implementation/contracts/Migrations.sol @@ -1,16 +1,15 @@ -import "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol"; -pragma solidity ^0.4.17; +pragma solidity ^0.4.23; contract Migrations { address public owner; uint public last_completed_migration; - modifier restricted() { - if (msg.sender == owner) _; + constructor() public { + owner = msg.sender; } - function Migrations() public { - owner = msg.sender; + modifier restricted() { + if (msg.sender == owner) _; } function setCompleted(uint completed) public restricted { diff --git a/truebit-implementation/export-abi.js b/truebit-implementation/export-abi.js new file mode 100644 index 00000000..d4b121d9 --- /dev/null +++ b/truebit-implementation/export-abi.js @@ -0,0 +1,23 @@ +const fs = require('fs'); + +function main() { + console.log('Exporting IICO ABI'); + const input = 'build/contracts/IICO.json'; + const output = 'build/IICO.abi.json'; + const abi = exportAbiForFile(input); + fs.writeFileSync(output, JSON.stringify(abi, null, 2)); + console.log(`IICO ABI was exported ${output}`); +} + +function exportAbiForFile(filename) { + if (filename.endsWith(".json")) { + const data = fs.readFileSync(filename); + const jsonData = JSON.parse(data); + if (jsonData.hasOwnProperty("abi")) { + return jsonData["abi"]; + } + } + return null; +} + +main(); diff --git a/truebit-implementation/index.js b/truebit-implementation/index.js new file mode 100644 index 00000000..e3eda1ef --- /dev/null +++ b/truebit-implementation/index.js @@ -0,0 +1,4 @@ +const IICOABI = require('./build/IICO.abi.json'); +module.exports = { + IICOABI +}; diff --git a/truebit-implementation/migrations/1_initial_migration.js b/truebit-implementation/migrations/1_initial_migration.js index 4d5f3f9b..8c2e0e73 100644 --- a/truebit-implementation/migrations/1_initial_migration.js +++ b/truebit-implementation/migrations/1_initial_migration.js @@ -1,4 +1,4 @@ -var Migrations = artifacts.require("./Migrations.sol"); +var Migrations = artifacts.require("Migrations.sol"); module.exports = function(deployer) { deployer.deploy(Migrations); diff --git a/truebit-implementation/migrations/2_deploy_contracts.js b/truebit-implementation/migrations/2_deploy_contracts.js new file mode 100644 index 00000000..c699e3c4 --- /dev/null +++ b/truebit-implementation/migrations/2_deploy_contracts.js @@ -0,0 +1,31 @@ +const Web3Utils = require('web3-utils'); +const IICO = artifacts.require('IICO.sol'); + +module.exports = function(deployer, network, accounts) { + const startTime = Math.floor(new Date().getTime() / 1000); + const timeBeforeStart = 0; // in seconds + const fullBonusLength = 2000000; + const partialWithdrawalLength = 2000000; + const withdrawalLockUpLength = 2000000; + const maxBonus = 2E8; + // const noCap = 120000000E18; + const beneficiary = accounts[1]; + const minValuation = 0; + const maxValuation = Web3Utils.toWei('100000', 'ether'); + const increment = Web3Utils.toWei('0.5', 'ether'); + // const numBuckets = 200001; + + deployer.deploy( + IICO, + startTime + timeBeforeStart, + fullBonusLength, + partialWithdrawalLength, + withdrawalLockUpLength, + maxBonus, + beneficiary, + minValuation, + maxValuation, + increment, + { from: accounts[0] } + ); +} diff --git a/truebit-implementation/node_modules/.bin/miller-rabin b/truebit-implementation/node_modules/.bin/miller-rabin deleted file mode 120000 index c175fe9f..00000000 --- a/truebit-implementation/node_modules/.bin/miller-rabin +++ /dev/null @@ -1 +0,0 @@ -../miller-rabin/bin/miller-rabin \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/mime b/truebit-implementation/node_modules/.bin/mime deleted file mode 120000 index fbb7ee0e..00000000 --- a/truebit-implementation/node_modules/.bin/mime +++ /dev/null @@ -1 +0,0 @@ -../mime/cli.js \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/mkdirp b/truebit-implementation/node_modules/.bin/mkdirp deleted file mode 120000 index 017896ce..00000000 --- a/truebit-implementation/node_modules/.bin/mkdirp +++ /dev/null @@ -1 +0,0 @@ -../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/rimraf b/truebit-implementation/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a49..00000000 --- a/truebit-implementation/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/seek-bunzip b/truebit-implementation/node_modules/.bin/seek-bunzip deleted file mode 120000 index 7bda56e7..00000000 --- a/truebit-implementation/node_modules/.bin/seek-bunzip +++ /dev/null @@ -1 +0,0 @@ -../seek-bzip/bin/seek-bunzip \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/seek-table b/truebit-implementation/node_modules/.bin/seek-table deleted file mode 120000 index 77217106..00000000 --- a/truebit-implementation/node_modules/.bin/seek-table +++ /dev/null @@ -1 +0,0 @@ -../seek-bzip/bin/seek-bzip-table \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/sha.js b/truebit-implementation/node_modules/.bin/sha.js deleted file mode 120000 index 3c761051..00000000 --- a/truebit-implementation/node_modules/.bin/sha.js +++ /dev/null @@ -1 +0,0 @@ -../sha.js/bin.js \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/sshpk-conv b/truebit-implementation/node_modules/.bin/sshpk-conv deleted file mode 120000 index a2a295c8..00000000 --- a/truebit-implementation/node_modules/.bin/sshpk-conv +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-conv \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/sshpk-sign b/truebit-implementation/node_modules/.bin/sshpk-sign deleted file mode 120000 index 766b9b3a..00000000 --- a/truebit-implementation/node_modules/.bin/sshpk-sign +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-sign \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/sshpk-verify b/truebit-implementation/node_modules/.bin/sshpk-verify deleted file mode 120000 index bfd7e3ad..00000000 --- a/truebit-implementation/node_modules/.bin/sshpk-verify +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-verify \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/targz b/truebit-implementation/node_modules/.bin/targz deleted file mode 120000 index 4f5b1ee1..00000000 --- a/truebit-implementation/node_modules/.bin/targz +++ /dev/null @@ -1 +0,0 @@ -../tar.gz/bin/targz \ No newline at end of file diff --git a/truebit-implementation/node_modules/.bin/uuid b/truebit-implementation/node_modules/.bin/uuid deleted file mode 120000 index b3e45bc5..00000000 --- a/truebit-implementation/node_modules/.bin/uuid +++ /dev/null @@ -1 +0,0 @@ -../uuid/bin/uuid \ No newline at end of file diff --git a/truebit-implementation/node_modules/@types/node/LICENSE b/truebit-implementation/node_modules/@types/node/LICENSE deleted file mode 100644 index 4b1ad51b..00000000 --- a/truebit-implementation/node_modules/@types/node/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - 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 diff --git a/truebit-implementation/node_modules/@types/node/README.md b/truebit-implementation/node_modules/@types/node/README.md deleted file mode 100644 index cf8de73c..00000000 --- a/truebit-implementation/node_modules/@types/node/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Installation -> `npm install --save @types/node` - -# Summary -This package contains type definitions for Node.js (http://nodejs.org/). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node - -Additional Details - * Last updated: Wed, 07 Nov 2018 17:01:43 GMT - * Dependencies: none - * Global values: Buffer, NodeJS, SlowBuffer, Symbol, __dirname, __filename, clearImmediate, clearInterval, clearTimeout, console, exports, global, module, process, require, setImmediate, setInterval, setTimeout - -# Credits -These definitions were written by Microsoft TypeScript , DefinitelyTyped , Alberto Schiabel , Alexander T. , Alvis HT Tang , Andrew Makarov , Bruno Scheufler , Chigozirim C. , Christian Vaagland Tellnes , Deividas Bakanas , Eugene Y. Q. Shen , Flarna , Hannes Magnusson , Hoàng Văn Khải , Huw , Kelvin Jin , Klaus Meinhardt , Lishude , Mariusz Wiktorczyk , Matthieu Sieben , Mohsen Azimi , Nicolas Even , Nicolas Voigt , Parambir Singh , Sebastian Silbermann , Simon Schick , Thomas den Hollander , Wilco Bakker , wwwy3y3 , Zane Hannan AU , Jeremie Rodriguez . diff --git a/truebit-implementation/node_modules/@types/node/index.d.ts b/truebit-implementation/node_modules/@types/node/index.d.ts deleted file mode 100644 index 3258e70e..00000000 --- a/truebit-implementation/node_modules/@types/node/index.d.ts +++ /dev/null @@ -1,8608 +0,0 @@ -// Type definitions for Node.js 10.12 -// Project: http://nodejs.org/ -// Definitions by: Microsoft TypeScript -// DefinitelyTyped -// Alberto Schiabel -// Alexander T. -// Alvis HT Tang -// Andrew Makarov -// Bruno Scheufler -// Chigozirim C. -// Christian Vaagland Tellnes -// Deividas Bakanas -// Eugene Y. Q. Shen -// Flarna -// Hannes Magnusson -// Hoàng Văn Khải -// Huw -// Kelvin Jin -// Klaus Meinhardt -// Lishude -// Mariusz Wiktorczyk -// Matthieu Sieben -// Mohsen Azimi -// Nicolas Even -// Nicolas Voigt -// Parambir Singh -// Sebastian Silbermann -// Simon Schick -// Thomas den Hollander -// Wilco Bakker -// wwwy3y3 -// Zane Hannan AU -// Jeremie Rodriguez -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -/** inspector module types */ -/// - -// This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build -interface Console { - Console: NodeJS.ConsoleConstructor; - /** - * A simple assertion test that verifies whether `value` is truthy. - * If it is not, an `AssertionError` is thrown. - * If provided, the error `message` is formatted using `util.format()` and used as the error message. - */ - assert(value: any, message?: string, ...optionalParams: any[]): void; - /** - * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the TTY. - * When `stdout` is not a TTY, this method does nothing. - */ - clear(): void; - /** - * Maintains an internal counter specific to `label` and outputs to `stdout` the number of times `console.count()` has been called with the given `label`. - */ - count(label?: string): void; - /** - * Resets the internal counter specific to `label`. - */ - countReset(label?: string): void; - /** - * The `console.debug()` function is an alias for {@link console.log()}. - */ - debug(message?: any, ...optionalParams: any[]): void; - /** - * Uses {@link util.inspect()} on `obj` and prints the resulting string to `stdout`. - * This function bypasses any custom `inspect()` function defined on `obj`. - */ - dir(obj: any, options?: NodeJS.InspectOptions): void; - /** - * This method calls {@link console.log()} passing it the arguments received. Please note that this method does not produce any XML formatting - */ - dirxml(...data: any[]): void; - /** - * Prints to `stderr` with newline. - */ - error(message?: any, ...optionalParams: any[]): void; - /** - * Increases indentation of subsequent lines by two spaces. - * If one or more `label`s are provided, those are printed first without the additional indentation. - */ - group(...label: any[]): void; - /** - * The `console.groupCollapsed()` function is an alias for {@link console.group()}. - */ - groupCollapsed(): void; - /** - * Decreases indentation of subsequent lines by two spaces. - */ - groupEnd(): void; - /** - * The {@link console.info()} function is an alias for {@link console.log()}. - */ - info(message?: any, ...optionalParams: any[]): void; - /** - * Prints to `stdout` with newline. - */ - log(message?: any, ...optionalParams: any[]): void; - /** - * This method does not display anything unless used in the inspector. - * Prints to `stdout` the array `array` formatted as a table. - */ - table(tabularData: any, properties?: string[]): void; - /** - * Starts a timer that can be used to compute the duration of an operation. Timers are identified by a unique `label`. - */ - time(label?: string): void; - /** - * Stops a timer that was previously started by calling {@link console.time()} and prints the result to `stdout`. - */ - timeEnd(label?: string): void; - /** - * For a timer that was previously started by calling {@link console.time()}, prints the elapsed time and other `data` arguments to `stdout`. - */ - timeLog(label: string, ...data: any[]): void; - /** - * Prints to `stderr` the string 'Trace :', followed by the {@link util.format()} formatted message and stack trace to the current position in the code. - */ - trace(message?: any, ...optionalParams: any[]): void; - /** - * The {@link console.warn()} function is an alias for {@link console.error()}. - */ - warn(message?: any, ...optionalParams: any[]): void; - - // --- Inspector mode only --- - /** - * This method does not display anything unless used in the inspector. - * Starts a JavaScript CPU profile with an optional label. - */ - profile(label?: string): void; - /** - * This method does not display anything unless used in the inspector. - * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. - */ - profileEnd(): void; - /** - * This method does not display anything unless used in the inspector. - * Adds an event with the label `label` to the Timeline panel of the inspector. - */ - timeStamp(label?: string): void; -} - -interface Error { - stack?: string; -} - -// Declare "static" methods in Error -interface ErrorConstructor { - /** Create .stack property on a target object */ - captureStackTrace(targetObject: Object, constructorOpt?: Function): void; - - /** - * Optional override for formatting stack traces - * - * @see https://github.com/v8/v8/wiki/Stack%20Trace%20API#customizing-stack-traces - */ - prepareStackTrace?: (err: Error, stackTraces: NodeJS.CallSite[]) => any; - - stackTraceLimit: number; -} - -// compat for TypeScript 1.8 and default es5 target -// if you use with --target es3 or --target es5 and use below definitions, -// use the lib.es6.d.ts that is bundled with TypeScript 1.8. -interface MapConstructor { } -interface WeakMapConstructor { } -interface SetConstructor { } -interface WeakSetConstructor { } - -interface Set {} -interface ReadonlySet {} - -// Forward-declare needed types from lib.es2015.d.ts (in case users are using `--lib es5`) -interface Iterable { } -interface Iterator { - next(value?: any): IteratorResult; -} -interface IteratorResult { } -interface AsyncIterableIterator {} -interface SymbolConstructor { - readonly observable: symbol; - readonly iterator: symbol; - readonly asyncIterator: symbol; -} -declare var Symbol: SymbolConstructor; -interface SharedArrayBuffer { - readonly byteLength: number; - slice(begin?: number, end?: number): SharedArrayBuffer; -} - -// Node.js ESNEXT support -interface String { - /** Removes whitespace from the left end of a string. */ - trimLeft(): string; - /** Removes whitespace from the right end of a string. */ - trimRight(): string; -} - -/*-----------------------------------------------* - * * - * GLOBAL * - * * - ------------------------------------------------*/ -declare var process: NodeJS.Process; -declare var global: NodeJS.Global; -declare var console: Console; - -declare var __filename: string; -declare var __dirname: string; - -declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; -declare namespace setTimeout { - function __promisify__(ms: number): Promise; - function __promisify__(ms: number, value: T): Promise; -} -declare function clearTimeout(timeoutId: NodeJS.Timeout): void; -declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; -declare function clearInterval(intervalId: NodeJS.Timeout): void; -declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; -declare namespace setImmediate { - function __promisify__(): Promise; - function __promisify__(value: T): Promise; -} -declare function clearImmediate(immediateId: NodeJS.Immediate): void; - -// TODO: change to `type NodeRequireFunction = (id: string) => any;` in next mayor version. -interface NodeRequireFunction { - /* tslint:disable-next-line:callable-types */ - (id: string): any; -} - -interface NodeRequire extends NodeRequireFunction { - resolve: RequireResolve; - cache: any; - extensions: NodeExtensions; - main: NodeModule | undefined; -} - -interface RequireResolve { - (id: string, options?: { paths?: string[]; }): string; - paths(request: string): string[] | null; -} - -interface NodeExtensions { - '.js': (m: NodeModule, filename: string) => any; - '.json': (m: NodeModule, filename: string) => any; - '.node': (m: NodeModule, filename: string) => any; - [ext: string]: (m: NodeModule, filename: string) => any; -} - -declare var require: NodeRequire; - -interface NodeModule { - exports: any; - require: NodeRequireFunction; - id: string; - filename: string; - loaded: boolean; - parent: NodeModule | null; - children: NodeModule[]; - paths: string[]; -} - -declare var module: NodeModule; - -// Same as module.exports -declare var exports: any; -declare const SlowBuffer: { - new(str: string, encoding?: string): Buffer; - new(size: number): Buffer; - new(size: Uint8Array): Buffer; - new(array: any[]): Buffer; - prototype: Buffer; - isBuffer(obj: any): boolean; - byteLength(string: string, encoding?: string): number; - concat(list: Buffer[], totalLength?: number): Buffer; -}; - -// Buffer class -type BufferEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "base64" | "latin1" | "binary" | "hex"; -interface Buffer extends Uint8Array { - constructor: typeof Buffer; - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): { type: 'Buffer', data: any[] }; - equals(otherBuffer: Uint8Array): boolean; - compare(otherBuffer: Uint8Array, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: string): number; - entries(): IterableIterator<[number, number]>; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - keys(): IterableIterator; - values(): IterableIterator; -} - -/** - * Raw data is stored in instances of the Buffer class. - * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. - * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - */ -declare const Buffer: { - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. - */ - new(str: string, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). - */ - new(size: number): Buffer; - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. - */ - new(array: Uint8Array): Buffer; - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}/{SharedArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. - */ - new(arrayBuffer: ArrayBuffer | SharedArrayBuffer): Buffer; - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. - */ - new(array: any[]): Buffer; - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead. - */ - new(buffer: Buffer): Buffer; - prototype: Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of any TypedArray or a new ArrayBuffer() - */ - from(arrayBuffer: ArrayBuffer | SharedArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Creates a new Buffer using the passed {data} - * @param data data to create a new Buffer - */ - from(data: any[]): Buffer; - from(data: Uint8Array): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - */ - from(str: string, encoding?: string): Buffer; - /** - * Creates a new Buffer using the passed {data} - * @param values to create a new Buffer - */ - of(...items: number[]): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - isEncoding(encoding: string): boolean | undefined; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - byteLength(string: string | NodeJS.TypedArray | DataView | ArrayBuffer | SharedArrayBuffer, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - concat(list: Uint8Array[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - compare(buf1: Uint8Array, buf2: Uint8Array): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - allocUnsafeSlow(size: number): Buffer; - /** - * This is the number of bytes used to determine the size of pre-allocated, internal Buffer instances used for pooling. This value may be modified. - */ - poolSize: number; -}; - -/*----------------------------------------------* -* * -* GLOBAL INTERFACES * -* * -*-----------------------------------------------*/ -declare namespace NodeJS { - interface InspectOptions { - showHidden?: boolean; - depth?: number | null; - colors?: boolean; - customInspect?: boolean; - showProxy?: boolean; - maxArrayLength?: number | null; - breakLength?: number; - compact?: boolean; - sorted?: boolean | ((a: string, b: string) => number); - } - - interface ConsoleConstructor { - prototype: Console; - new(stdout: WritableStream, stderr?: WritableStream): Console; - } - - interface CallSite { - /** - * Value of "this" - */ - getThis(): any; - - /** - * Type of "this" as a string. - * This is the name of the function stored in the constructor field of - * "this", if available. Otherwise the object's [[Class]] internal - * property. - */ - getTypeName(): string | null; - - /** - * Current function - */ - getFunction(): Function | undefined; - - /** - * Name of the current function, typically its name property. - * If a name property is not available an attempt will be made to try - * to infer a name from the function's context. - */ - getFunctionName(): string | null; - - /** - * Name of the property [of "this" or one of its prototypes] that holds - * the current function - */ - getMethodName(): string | null; - - /** - * Name of the script [if this function was defined in a script] - */ - getFileName(): string | null; - - /** - * Current line number [if this function was defined in a script] - */ - getLineNumber(): number | null; - - /** - * Current column number [if this function was defined in a script] - */ - getColumnNumber(): number | null; - - /** - * A call site object representing the location where eval was called - * [if this function was created using a call to eval] - */ - getEvalOrigin(): string | undefined; - - /** - * Is this a toplevel invocation, that is, is "this" the global object? - */ - isToplevel(): boolean; - - /** - * Does this call take place in code defined by a call to eval? - */ - isEval(): boolean; - - /** - * Is this call in native V8 code? - */ - isNative(): boolean; - - /** - * Is this a constructor call? - */ - isConstructor(): boolean; - } - - interface ErrnoException extends Error { - errno?: number; - code?: string; - path?: string; - syscall?: string; - stack?: string; - } - - class EventEmitter { - addListener(event: string | symbol, listener: (...args: any[]) => void): this; - on(event: string | symbol, listener: (...args: any[]) => void): this; - once(event: string | symbol, listener: (...args: any[]) => void): this; - removeListener(event: string | symbol, listener: (...args: any[]) => void): this; - off(event: string | symbol, listener: (...args: any[]) => void): this; - removeAllListeners(event?: string | symbol): this; - setMaxListeners(n: number): this; - getMaxListeners(): number; - listeners(event: string | symbol): Function[]; - rawListeners(event: string | symbol): Function[]; - emit(event: string | symbol, ...args: any[]): boolean; - listenerCount(type: string | symbol): number; - // Added in Node 6... - prependListener(event: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; - eventNames(): Array; - } - - interface ReadableStream extends EventEmitter { - readable: boolean; - read(size?: number): string | Buffer; - setEncoding(encoding: string): this; - pause(): this; - resume(): this; - isPaused(): boolean; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: WritableStream): this; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: ReadableStream): this; - [Symbol.asyncIterator](): AsyncIterableIterator; - } - - interface WritableStream extends EventEmitter { - writable: boolean; - write(buffer: Buffer | string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(cb?: Function): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - interface ReadWriteStream extends ReadableStream, WritableStream { } - - interface Events extends EventEmitter { } - - interface Domain extends Events { - run(fn: Function): void; - add(emitter: Events): void; - remove(emitter: Events): void; - bind(cb: (err: Error, data: any) => any): any; - intercept(cb: (data: any) => any): any; - - addListener(event: string, listener: (...args: any[]) => void): this; - on(event: string, listener: (...args: any[]) => void): this; - once(event: string, listener: (...args: any[]) => void): this; - removeListener(event: string, listener: (...args: any[]) => void): this; - removeAllListeners(event?: string): this; - } - - interface MemoryUsage { - rss: number; - heapTotal: number; - heapUsed: number; - external: number; - } - - interface CpuUsage { - user: number; - system: number; - } - - interface ProcessRelease { - name: string; - sourceUrl?: string; - headersUrl?: string; - libUrl?: string; - lts?: string; - } - - interface ProcessVersions { - http_parser: string; - node: string; - v8: string; - ares: string; - uv: string; - zlib: string; - modules: string; - openssl: string; - } - - type Platform = 'aix' - | 'android' - | 'darwin' - | 'freebsd' - | 'linux' - | 'openbsd' - | 'sunos' - | 'win32' - | 'cygwin'; - - type Signals = - "SIGABRT" | "SIGALRM" | "SIGBUS" | "SIGCHLD" | "SIGCONT" | "SIGFPE" | "SIGHUP" | "SIGILL" | "SIGINT" | "SIGIO" | - "SIGIOT" | "SIGKILL" | "SIGPIPE" | "SIGPOLL" | "SIGPROF" | "SIGPWR" | "SIGQUIT" | "SIGSEGV" | "SIGSTKFLT" | - "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" | - "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO"; - - type MultipleResolveType = 'resolve' | 'reject'; - - type BeforeExitListener = (code: number) => void; - type DisconnectListener = () => void; - type ExitListener = (code: number) => void; - type RejectionHandledListener = (promise: Promise) => void; - type UncaughtExceptionListener = (error: Error) => void; - type UnhandledRejectionListener = (reason: any, promise: Promise) => void; - type WarningListener = (warning: Error) => void; - type MessageListener = (message: any, sendHandle: any) => void; - type SignalsListener = (signal: Signals) => void; - type NewListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; - type RemoveListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; - type MultipleResolveListener = (type: MultipleResolveType, promise: Promise, value: any) => void; - - interface Socket extends ReadWriteStream { - isTTY?: true; - } - - interface ProcessEnv { - [key: string]: string | undefined; - } - - interface WriteStream extends Socket { - readonly writableHighWaterMark: number; - readonly writableLength: number; - columns?: number; - rows?: number; - _write(chunk: any, encoding: string, callback: Function): void; - _destroy(err: Error | null, callback: Function): void; - _final(callback: Function): void; - setDefaultEncoding(encoding: string): this; - cork(): void; - uncork(): void; - destroy(error?: Error): void; - } - interface ReadStream extends Socket { - readonly readableHighWaterMark: number; - readonly readableLength: number; - isRaw?: boolean; - setRawMode?(mode: boolean): void; - _read(size: number): void; - _destroy(err: Error | null, callback: Function): void; - push(chunk: any, encoding?: string): boolean; - destroy(error?: Error): void; - } - - interface Process extends EventEmitter { - stdout: WriteStream; - stderr: WriteStream; - stdin: ReadStream; - openStdin(): Socket; - argv: string[]; - argv0: string; - execArgv: string[]; - execPath: string; - abort(): void; - chdir(directory: string): void; - cwd(): string; - debugPort: number; - emitWarning(warning: string | Error, name?: string, ctor?: Function): void; - env: ProcessEnv; - exit(code?: number): never; - exitCode: number; - getgid(): number; - setgid(id: number | string): void; - getuid(): number; - setuid(id: number | string): void; - geteuid(): number; - seteuid(id: number | string): void; - getegid(): number; - setegid(id: number | string): void; - getgroups(): number[]; - setgroups(groups: Array): void; - setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; - hasUncaughtExceptionCaptureCallback(): boolean; - version: string; - versions: ProcessVersions; - config: { - target_defaults: { - cflags: any[]; - default_configuration: string; - defines: string[]; - include_dirs: string[]; - libraries: string[]; - }; - variables: { - clang: number; - host_arch: string; - node_install_npm: boolean; - node_install_waf: boolean; - node_prefix: string; - node_shared_openssl: boolean; - node_shared_v8: boolean; - node_shared_zlib: boolean; - node_use_dtrace: boolean; - node_use_etw: boolean; - node_use_openssl: boolean; - target_arch: string; - v8_no_strict_aliasing: number; - v8_use_snapshot: boolean; - visibility: string; - }; - }; - kill(pid: number, signal?: string | number): void; - pid: number; - ppid: number; - title: string; - arch: string; - platform: Platform; - mainModule?: NodeModule; - memoryUsage(): MemoryUsage; - cpuUsage(previousValue?: CpuUsage): CpuUsage; - nextTick(callback: Function, ...args: any[]): void; - release: ProcessRelease; - umask(mask?: number): number; - uptime(): number; - hrtime(time?: [number, number]): [number, number]; - domain: Domain; - - // Worker - send?(message: any, sendHandle?: any): void; - disconnect(): void; - connected: boolean; - - /** - * The `process.allowedNodeEnvironmentFlags` property is a special, - * read-only `Set` of flags allowable within the [`NODE_OPTIONS`][] - * environment variable. - */ - allowedNodeEnvironmentFlags: ReadonlySet; - - /** - * EventEmitter - * 1. beforeExit - * 2. disconnect - * 3. exit - * 4. message - * 5. rejectionHandled - * 6. uncaughtException - * 7. unhandledRejection - * 8. warning - * 9. message - * 10. - * 11. newListener/removeListener inherited from EventEmitter - */ - addListener(event: "beforeExit", listener: BeforeExitListener): this; - addListener(event: "disconnect", listener: DisconnectListener): this; - addListener(event: "exit", listener: ExitListener): this; - addListener(event: "rejectionHandled", listener: RejectionHandledListener): this; - addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; - addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; - addListener(event: "warning", listener: WarningListener): this; - addListener(event: "message", listener: MessageListener): this; - addListener(event: Signals, listener: SignalsListener): this; - addListener(event: "newListener", listener: NewListenerListener): this; - addListener(event: "removeListener", listener: RemoveListenerListener): this; - addListener(event: "multipleResolves", listener: MultipleResolveListener): this; - - emit(event: "beforeExit", code: number): boolean; - emit(event: "disconnect"): boolean; - emit(event: "exit", code: number): boolean; - emit(event: "rejectionHandled", promise: Promise): boolean; - emit(event: "uncaughtException", error: Error): boolean; - emit(event: "unhandledRejection", reason: any, promise: Promise): boolean; - emit(event: "warning", warning: Error): boolean; - emit(event: "message", message: any, sendHandle: any): this; - emit(event: Signals, signal: Signals): boolean; - emit(event: "newListener", eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(event: "removeListener", eventName: string, listener: (...args: any[]) => void): this; - emit(event: "multipleResolves", listener: MultipleResolveListener): this; - - on(event: "beforeExit", listener: BeforeExitListener): this; - on(event: "disconnect", listener: DisconnectListener): this; - on(event: "exit", listener: ExitListener): this; - on(event: "rejectionHandled", listener: RejectionHandledListener): this; - on(event: "uncaughtException", listener: UncaughtExceptionListener): this; - on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; - on(event: "warning", listener: WarningListener): this; - on(event: "message", listener: MessageListener): this; - on(event: Signals, listener: SignalsListener): this; - on(event: "newListener", listener: NewListenerListener): this; - on(event: "removeListener", listener: RemoveListenerListener): this; - on(event: "multipleResolves", listener: MultipleResolveListener): this; - - once(event: "beforeExit", listener: BeforeExitListener): this; - once(event: "disconnect", listener: DisconnectListener): this; - once(event: "exit", listener: ExitListener): this; - once(event: "rejectionHandled", listener: RejectionHandledListener): this; - once(event: "uncaughtException", listener: UncaughtExceptionListener): this; - once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; - once(event: "warning", listener: WarningListener): this; - once(event: "message", listener: MessageListener): this; - once(event: Signals, listener: SignalsListener): this; - once(event: "newListener", listener: NewListenerListener): this; - once(event: "removeListener", listener: RemoveListenerListener): this; - once(event: "multipleResolves", listener: MultipleResolveListener): this; - - prependListener(event: "beforeExit", listener: BeforeExitListener): this; - prependListener(event: "disconnect", listener: DisconnectListener): this; - prependListener(event: "exit", listener: ExitListener): this; - prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this; - prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; - prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; - prependListener(event: "warning", listener: WarningListener): this; - prependListener(event: "message", listener: MessageListener): this; - prependListener(event: Signals, listener: SignalsListener): this; - prependListener(event: "newListener", listener: NewListenerListener): this; - prependListener(event: "removeListener", listener: RemoveListenerListener): this; - prependListener(event: "multipleResolves", listener: MultipleResolveListener): this; - - prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; - prependOnceListener(event: "disconnect", listener: DisconnectListener): this; - prependOnceListener(event: "exit", listener: ExitListener): this; - prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this; - prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; - prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; - prependOnceListener(event: "warning", listener: WarningListener): this; - prependOnceListener(event: "message", listener: MessageListener): this; - prependOnceListener(event: Signals, listener: SignalsListener): this; - prependOnceListener(event: "newListener", listener: NewListenerListener): this; - prependOnceListener(event: "removeListener", listener: RemoveListenerListener): this; - prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this; - - listeners(event: "beforeExit"): BeforeExitListener[]; - listeners(event: "disconnect"): DisconnectListener[]; - listeners(event: "exit"): ExitListener[]; - listeners(event: "rejectionHandled"): RejectionHandledListener[]; - listeners(event: "uncaughtException"): UncaughtExceptionListener[]; - listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; - listeners(event: "warning"): WarningListener[]; - listeners(event: "message"): MessageListener[]; - listeners(event: Signals): SignalsListener[]; - listeners(event: "newListener"): NewListenerListener[]; - listeners(event: "removeListener"): RemoveListenerListener[]; - listeners(event: "multipleResolves"): MultipleResolveListener[]; - } - - interface Global { - Array: typeof Array; - ArrayBuffer: typeof ArrayBuffer; - Boolean: typeof Boolean; - Buffer: typeof Buffer; - DataView: typeof DataView; - Date: typeof Date; - Error: typeof Error; - EvalError: typeof EvalError; - Float32Array: typeof Float32Array; - Float64Array: typeof Float64Array; - Function: typeof Function; - GLOBAL: Global; - Infinity: typeof Infinity; - Int16Array: typeof Int16Array; - Int32Array: typeof Int32Array; - Int8Array: typeof Int8Array; - Intl: typeof Intl; - JSON: typeof JSON; - Map: MapConstructor; - Math: typeof Math; - NaN: typeof NaN; - Number: typeof Number; - Object: typeof Object; - Promise: Function; - RangeError: typeof RangeError; - ReferenceError: typeof ReferenceError; - RegExp: typeof RegExp; - Set: SetConstructor; - String: typeof String; - Symbol: Function; - SyntaxError: typeof SyntaxError; - TypeError: typeof TypeError; - URIError: typeof URIError; - Uint16Array: typeof Uint16Array; - Uint32Array: typeof Uint32Array; - Uint8Array: typeof Uint8Array; - Uint8ClampedArray: Function; - WeakMap: WeakMapConstructor; - WeakSet: WeakSetConstructor; - clearImmediate: (immediateId: Immediate) => void; - clearInterval: (intervalId: Timeout) => void; - clearTimeout: (timeoutId: Timeout) => void; - console: typeof console; - decodeURI: typeof decodeURI; - decodeURIComponent: typeof decodeURIComponent; - encodeURI: typeof encodeURI; - encodeURIComponent: typeof encodeURIComponent; - escape: (str: string) => string; - eval: typeof eval; - global: Global; - isFinite: typeof isFinite; - isNaN: typeof isNaN; - parseFloat: typeof parseFloat; - parseInt: typeof parseInt; - process: Process; - root: Global; - setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => Immediate; - setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout; - setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout; - undefined: typeof undefined; - unescape: (str: string) => string; - gc: () => void; - v8debug?: any; - } - - interface Timer { - ref(): void; - refresh(): void; - unref(): void; - } - - class Immediate { - ref(): void; - unref(): void; - _onImmediate: Function; // to distinguish it from the Timeout class - } - - class Timeout implements Timer { - ref(): void; - refresh(): void; - unref(): void; - } - - class Module { - static runMain(): void; - static wrap(code: string): string; - static createRequireFromPath(path: string): (path: string) => any; - static builtinModules: string[]; - - static Module: typeof Module; - - exports: any; - require: NodeRequireFunction; - id: string; - filename: string; - loaded: boolean; - parent: Module | null; - children: Module[]; - paths: string[]; - - constructor(id: string, parent?: Module); - } - - type TypedArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array; -} - -interface IterableIterator { } - -/*----------------------------------------------* -* * -* MODULES * -* * -*-----------------------------------------------*/ -declare module "buffer" { - export const INSPECT_MAX_BYTES: number; - const BuffType: typeof Buffer; - const SlowBuffType: typeof SlowBuffer; - export { BuffType as Buffer, SlowBuffType as SlowBuffer }; -} - -declare module "querystring" { - interface StringifyOptions { - encodeURIComponent?: Function; - } - - interface ParseOptions { - maxKeys?: number; - decodeURIComponent?: Function; - } - - interface ParsedUrlQuery { [key: string]: string | string[]; } - - function stringify(obj?: {}, sep?: string, eq?: string, options?: StringifyOptions): string; - function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; - function escape(str: string): string; - function unescape(str: string): string; -} - -declare module "events" { - class internal extends NodeJS.EventEmitter { } - - namespace internal { - class EventEmitter extends internal { - /** @deprecated since v4.0.0 */ - static listenerCount(emitter: EventEmitter, event: string | symbol): number; - static defaultMaxListeners: number; - - addListener(event: string | symbol, listener: (...args: any[]) => void): this; - on(event: string | symbol, listener: (...args: any[]) => void): this; - once(event: string | symbol, listener: (...args: any[]) => void): this; - prependListener(event: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; - removeListener(event: string | symbol, listener: (...args: any[]) => void): this; - off(event: string | symbol, listener: (...args: any[]) => void): this; - removeAllListeners(event?: string | symbol): this; - setMaxListeners(n: number): this; - getMaxListeners(): number; - listeners(event: string | symbol): Function[]; - rawListeners(event: string | symbol): Function[]; - emit(event: string | symbol, ...args: any[]): boolean; - eventNames(): Array; - listenerCount(type: string | symbol): number; - } - } - - export = internal; -} - -declare module "http" { - import * as events from "events"; - import * as net from "net"; - import * as stream from "stream"; - import { URL } from "url"; - - // incoming headers will never contain number - interface IncomingHttpHeaders { - 'accept'?: string; - 'access-control-allow-origin'?: string; - 'access-control-allow-credentials'?: string; - 'access-control-expose-headers'?: string; - 'access-control-max-age'?: string; - 'access-control-allow-methods'?: string; - 'access-control-allow-headers'?: string; - 'accept-patch'?: string; - 'accept-ranges'?: string; - 'authorization'?: string; - 'age'?: string; - 'allow'?: string; - 'alt-svc'?: string; - 'cache-control'?: string; - 'connection'?: string; - 'content-disposition'?: string; - 'content-encoding'?: string; - 'content-language'?: string; - 'content-length'?: string; - 'content-location'?: string; - 'content-range'?: string; - 'content-type'?: string; - 'date'?: string; - 'expires'?: string; - 'host'?: string; - 'last-modified'?: string; - 'location'?: string; - 'pragma'?: string; - 'proxy-authenticate'?: string; - 'public-key-pins'?: string; - 'referer'?: string; - 'retry-after'?: string; - 'set-cookie'?: string[]; - 'strict-transport-security'?: string; - 'trailer'?: string; - 'transfer-encoding'?: string; - 'tk'?: string; - 'upgrade'?: string; - 'user-agent'?: string; - 'vary'?: string; - 'via'?: string; - 'warning'?: string; - 'www-authenticate'?: string; - [header: string]: string | string[] | undefined; - } - - // outgoing headers allows numbers (as they are converted internally to strings) - interface OutgoingHttpHeaders { - [header: string]: number | string | string[] | undefined; - } - - interface ClientRequestArgs { - protocol?: string; - host?: string; - hostname?: string; - family?: number; - port?: number | string; - defaultPort?: number | string; - localAddress?: string; - socketPath?: string; - method?: string; - path?: string; - headers?: OutgoingHttpHeaders; - auth?: string; - agent?: Agent | boolean; - _defaultAgent?: Agent; - timeout?: number; - // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278 - createConnection?: (options: ClientRequestArgs, oncreate: (err: Error, socket: net.Socket) => void) => net.Socket; - } - - class Server extends net.Server { - constructor(requestListener?: (req: IncomingMessage, res: ServerResponse) => void); - - setTimeout(msecs?: number, callback?: () => void): this; - setTimeout(callback: () => void): this; - maxHeadersCount: number; - timeout: number; - keepAliveTimeout: number; - } - - // https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js - class OutgoingMessage extends stream.Writable { - upgrading: boolean; - chunkedEncoding: boolean; - shouldKeepAlive: boolean; - useChunkedEncodingByDefault: boolean; - sendDate: boolean; - finished: boolean; - headersSent: boolean; - connection: net.Socket; - - constructor(); - - setTimeout(msecs: number, callback?: () => void): this; - setHeader(name: string, value: number | string | string[]): void; - getHeader(name: string): number | string | string[] | undefined; - getHeaders(): OutgoingHttpHeaders; - getHeaderNames(): string[]; - hasHeader(name: string): boolean; - removeHeader(name: string): void; - addTrailers(headers: OutgoingHttpHeaders | Array<[string, string]>): void; - flushHeaders(): void; - } - - // https://github.com/nodejs/node/blob/master/lib/_http_server.js#L108-L256 - class ServerResponse extends OutgoingMessage { - statusCode: number; - statusMessage: string; - - constructor(req: IncomingMessage); - - assignSocket(socket: net.Socket): void; - detachSocket(socket: net.Socket): void; - // https://github.com/nodejs/node/blob/master/test/parallel/test-http-write-callbacks.js#L53 - // no args in writeContinue callback - writeContinue(callback?: () => void): void; - writeHead(statusCode: number, reasonPhrase?: string, headers?: OutgoingHttpHeaders): void; - writeHead(statusCode: number, headers?: OutgoingHttpHeaders): void; - } - - // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L77 - class ClientRequest extends OutgoingMessage { - connection: net.Socket; - socket: net.Socket; - aborted: number; - - constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void); - - abort(): void; - onSocket(socket: net.Socket): void; - setTimeout(timeout: number, callback?: () => void): this; - setNoDelay(noDelay?: boolean): void; - setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; - } - - class IncomingMessage extends stream.Readable { - constructor(socket: net.Socket); - - httpVersion: string; - httpVersionMajor: number; - httpVersionMinor: number; - connection: net.Socket; - headers: IncomingHttpHeaders; - rawHeaders: string[]; - trailers: { [key: string]: string | undefined }; - rawTrailers: string[]; - setTimeout(msecs: number, callback: () => void): this; - /** - * Only valid for request obtained from http.Server. - */ - method?: string; - /** - * Only valid for request obtained from http.Server. - */ - url?: string; - /** - * Only valid for response obtained from http.ClientRequest. - */ - statusCode?: number; - /** - * Only valid for response obtained from http.ClientRequest. - */ - statusMessage?: string; - socket: net.Socket; - destroy(error?: Error): void; - } - - interface AgentOptions { - /** - * Keep sockets around in a pool to be used by other requests in the future. Default = false - */ - keepAlive?: boolean; - /** - * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. - * Only relevant if keepAlive is set to true. - */ - keepAliveMsecs?: number; - /** - * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity - */ - maxSockets?: number; - /** - * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. - */ - maxFreeSockets?: number; - /** - * Socket timeout in milliseconds. This will set the timeout after the socket is connected. - */ - timeout?: number; - } - - class Agent { - maxFreeSockets: number; - maxSockets: number; - sockets: any; - requests: any; - - constructor(opts?: AgentOptions); - - /** - * Destroy any sockets that are currently in use by the agent. - * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled, - * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise, - * sockets may hang open for quite a long time before the server terminates them. - */ - destroy(): void; - } - - const METHODS: string[]; - - const STATUS_CODES: { - [errorCode: number]: string | undefined; - [errorCode: string]: string | undefined; - }; - - function createServer(requestListener?: (request: IncomingMessage, response: ServerResponse) => void): Server; - function createClient(port?: number, host?: string): any; - - // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly, - // create interface RequestOptions would make the naming more clear to developers - interface RequestOptions extends ClientRequestArgs { } - function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; - function request(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; - function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; - function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; - let globalAgent: Agent; -} - -declare module "cluster" { - import * as child from "child_process"; - import * as events from "events"; - import * as net from "net"; - - // interfaces - interface ClusterSettings { - execArgv?: string[]; // default: process.execArgv - exec?: string; - args?: string[]; - silent?: boolean; - stdio?: any[]; - uid?: number; - gid?: number; - inspectPort?: number | (() => number); - } - - interface Address { - address: string; - port: number; - addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6" - } - - class Worker extends events.EventEmitter { - id: number; - process: child.ChildProcess; - suicide: boolean; - send(message: any, sendHandle?: any, callback?: (error: Error) => void): boolean; - kill(signal?: string): void; - destroy(signal?: string): void; - disconnect(): void; - isConnected(): boolean; - isDead(): boolean; - exitedAfterDisconnect: boolean; - - /** - * events.EventEmitter - * 1. disconnect - * 2. error - * 3. exit - * 4. listening - * 5. message - * 6. online - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "disconnect", listener: () => void): this; - addListener(event: "error", listener: (error: Error) => void): this; - addListener(event: "exit", listener: (code: number, signal: string) => void): this; - addListener(event: "listening", listener: (address: Address) => void): this; - addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - addListener(event: "online", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "disconnect"): boolean; - emit(event: "error", error: Error): boolean; - emit(event: "exit", code: number, signal: string): boolean; - emit(event: "listening", address: Address): boolean; - emit(event: "message", message: any, handle: net.Socket | net.Server): boolean; - emit(event: "online"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "disconnect", listener: () => void): this; - on(event: "error", listener: (error: Error) => void): this; - on(event: "exit", listener: (code: number, signal: string) => void): this; - on(event: "listening", listener: (address: Address) => void): this; - on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - on(event: "online", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "disconnect", listener: () => void): this; - once(event: "error", listener: (error: Error) => void): this; - once(event: "exit", listener: (code: number, signal: string) => void): this; - once(event: "listening", listener: (address: Address) => void): this; - once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - once(event: "online", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "disconnect", listener: () => void): this; - prependListener(event: "error", listener: (error: Error) => void): this; - prependListener(event: "exit", listener: (code: number, signal: string) => void): this; - prependListener(event: "listening", listener: (address: Address) => void): this; - prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - prependListener(event: "online", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "disconnect", listener: () => void): this; - prependOnceListener(event: "error", listener: (error: Error) => void): this; - prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this; - prependOnceListener(event: "listening", listener: (address: Address) => void): this; - prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - prependOnceListener(event: "online", listener: () => void): this; - } - - interface Cluster extends events.EventEmitter { - Worker: Worker; - disconnect(callback?: Function): void; - fork(env?: any): Worker; - isMaster: boolean; - isWorker: boolean; - // TODO: cluster.schedulingPolicy - settings: ClusterSettings; - setupMaster(settings?: ClusterSettings): void; - worker?: Worker; - workers?: { - [index: string]: Worker | undefined - }; - - /** - * events.EventEmitter - * 1. disconnect - * 2. exit - * 3. fork - * 4. listening - * 5. message - * 6. online - * 7. setup - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "disconnect", listener: (worker: Worker) => void): this; - addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; - addListener(event: "fork", listener: (worker: Worker) => void): this; - addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; - addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - addListener(event: "online", listener: (worker: Worker) => void): this; - addListener(event: "setup", listener: (settings: any) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "disconnect", worker: Worker): boolean; - emit(event: "exit", worker: Worker, code: number, signal: string): boolean; - emit(event: "fork", worker: Worker): boolean; - emit(event: "listening", worker: Worker, address: Address): boolean; - emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; - emit(event: "online", worker: Worker): boolean; - emit(event: "setup", settings: any): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "disconnect", listener: (worker: Worker) => void): this; - on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; - on(event: "fork", listener: (worker: Worker) => void): this; - on(event: "listening", listener: (worker: Worker, address: Address) => void): this; - on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - on(event: "online", listener: (worker: Worker) => void): this; - on(event: "setup", listener: (settings: any) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "disconnect", listener: (worker: Worker) => void): this; - once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; - once(event: "fork", listener: (worker: Worker) => void): this; - once(event: "listening", listener: (worker: Worker, address: Address) => void): this; - once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - once(event: "online", listener: (worker: Worker) => void): this; - once(event: "setup", listener: (settings: any) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "disconnect", listener: (worker: Worker) => void): this; - prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; - prependListener(event: "fork", listener: (worker: Worker) => void): this; - prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; - prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. - prependListener(event: "online", listener: (worker: Worker) => void): this; - prependListener(event: "setup", listener: (settings: any) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this; - prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; - prependOnceListener(event: "fork", listener: (worker: Worker) => void): this; - prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; - // the handle is a net.Socket or net.Server object, or undefined. - prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; - prependOnceListener(event: "online", listener: (worker: Worker) => void): this; - prependOnceListener(event: "setup", listener: (settings: any) => void): this; - } - - function disconnect(callback?: Function): void; - function fork(env?: any): Worker; - const isMaster: boolean; - const isWorker: boolean; - // TODO: cluster.schedulingPolicy - const settings: ClusterSettings; - function setupMaster(settings?: ClusterSettings): void; - const worker: Worker; - const workers: { - [index: string]: Worker | undefined - }; - - /** - * events.EventEmitter - * 1. disconnect - * 2. exit - * 3. fork - * 4. listening - * 5. message - * 6. online - * 7. setup - */ - function addListener(event: string, listener: (...args: any[]) => void): Cluster; - function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; - function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; - function addListener(event: "fork", listener: (worker: Worker) => void): Cluster; - function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; - // the handle is a net.Socket or net.Server object, or undefined. - function addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; - function addListener(event: "online", listener: (worker: Worker) => void): Cluster; - function addListener(event: "setup", listener: (settings: any) => void): Cluster; - - function emit(event: string | symbol, ...args: any[]): boolean; - function emit(event: "disconnect", worker: Worker): boolean; - function emit(event: "exit", worker: Worker, code: number, signal: string): boolean; - function emit(event: "fork", worker: Worker): boolean; - function emit(event: "listening", worker: Worker, address: Address): boolean; - function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; - function emit(event: "online", worker: Worker): boolean; - function emit(event: "setup", settings: any): boolean; - - function on(event: string, listener: (...args: any[]) => void): Cluster; - function on(event: "disconnect", listener: (worker: Worker) => void): Cluster; - function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; - function on(event: "fork", listener: (worker: Worker) => void): Cluster; - function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; - function on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined. - function on(event: "online", listener: (worker: Worker) => void): Cluster; - function on(event: "setup", listener: (settings: any) => void): Cluster; - - function once(event: string, listener: (...args: any[]) => void): Cluster; - function once(event: "disconnect", listener: (worker: Worker) => void): Cluster; - function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; - function once(event: "fork", listener: (worker: Worker) => void): Cluster; - function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; - function once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined. - function once(event: "online", listener: (worker: Worker) => void): Cluster; - function once(event: "setup", listener: (settings: any) => void): Cluster; - - function removeListener(event: string, listener: (...args: any[]) => void): Cluster; - function removeAllListeners(event?: string): Cluster; - function setMaxListeners(n: number): Cluster; - function getMaxListeners(): number; - function listeners(event: string): Function[]; - function listenerCount(type: string): number; - - function prependListener(event: string, listener: (...args: any[]) => void): Cluster; - function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; - function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; - function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster; - function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; - // the handle is a net.Socket or net.Server object, or undefined. - function prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; - function prependListener(event: "online", listener: (worker: Worker) => void): Cluster; - function prependListener(event: "setup", listener: (settings: any) => void): Cluster; - - function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster; - function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; - function prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; - function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster; - function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; - // the handle is a net.Socket or net.Server object, or undefined. - function prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; - function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster; - function prependOnceListener(event: "setup", listener: (settings: any) => void): Cluster; - - function eventNames(): string[]; -} - -declare module "zlib" { - import * as stream from "stream"; - - interface ZlibOptions { - flush?: number; // default: zlib.constants.Z_NO_FLUSH - finishFlush?: number; // default: zlib.constants.Z_FINISH - chunkSize?: number; // default: 16*1024 - windowBits?: number; - level?: number; // compression only - memLevel?: number; // compression only - strategy?: number; // compression only - dictionary?: Buffer | NodeJS.TypedArray | DataView | ArrayBuffer; // deflate/inflate only, empty dictionary by default - } - - interface Zlib { - readonly bytesRead: number; - close(callback?: () => void): void; - flush(kind?: number | (() => void), callback?: () => void): void; - } - - interface ZlibParams { - params(level: number, strategy: number, callback: () => void): void; - } - - interface ZlibReset { - reset(): void; - } - - interface Gzip extends stream.Transform, Zlib { } - interface Gunzip extends stream.Transform, Zlib { } - interface Deflate extends stream.Transform, Zlib, ZlibReset, ZlibParams { } - interface Inflate extends stream.Transform, Zlib, ZlibReset { } - interface DeflateRaw extends stream.Transform, Zlib, ZlibReset, ZlibParams { } - interface InflateRaw extends stream.Transform, Zlib, ZlibReset { } - interface Unzip extends stream.Transform, Zlib { } - - function createGzip(options?: ZlibOptions): Gzip; - function createGunzip(options?: ZlibOptions): Gunzip; - function createDeflate(options?: ZlibOptions): Deflate; - function createInflate(options?: ZlibOptions): Inflate; - function createDeflateRaw(options?: ZlibOptions): DeflateRaw; - function createInflateRaw(options?: ZlibOptions): InflateRaw; - function createUnzip(options?: ZlibOptions): Unzip; - - type InputType = string | Buffer | DataView | ArrayBuffer | NodeJS.TypedArray; - function deflate(buf: InputType, callback: (error: Error | null, result: Buffer) => void): void; - function deflate(buf: InputType, options: ZlibOptions, callback: (error: Error | null, result: Buffer) => void): void; - function deflateSync(buf: InputType, options?: ZlibOptions): Buffer; - function deflateRaw(buf: InputType, callback: (error: Error | null, result: Buffer) => void): void; - function deflateRaw(buf: InputType, options: ZlibOptions, callback: (error: Error | null, result: Buffer) => void): void; - function deflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; - function gzip(buf: InputType, callback: (error: Error | null, result: Buffer) => void): void; - function gzip(buf: InputType, options: ZlibOptions, callback: (error: Error | null, result: Buffer) => void): void; - function gzipSync(buf: InputType, options?: ZlibOptions): Buffer; - function gunzip(buf: InputType, callback: (error: Error | null, result: Buffer) => void): void; - function gunzip(buf: InputType, options: ZlibOptions, callback: (error: Error | null, result: Buffer) => void): void; - function gunzipSync(buf: InputType, options?: ZlibOptions): Buffer; - function inflate(buf: InputType, callback: (error: Error | null, result: Buffer) => void): void; - function inflate(buf: InputType, options: ZlibOptions, callback: (error: Error | null, result: Buffer) => void): void; - function inflateSync(buf: InputType, options?: ZlibOptions): Buffer; - function inflateRaw(buf: InputType, callback: (error: Error | null, result: Buffer) => void): void; - function inflateRaw(buf: InputType, options: ZlibOptions, callback: (error: Error | null, result: Buffer) => void): void; - function inflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; - function unzip(buf: InputType, callback: (error: Error | null, result: Buffer) => void): void; - function unzip(buf: InputType, options: ZlibOptions, callback: (error: Error | null, result: Buffer) => void): void; - function unzipSync(buf: InputType, options?: ZlibOptions): Buffer; - - namespace constants { - // Allowed flush values. - - const Z_NO_FLUSH: number; - const Z_PARTIAL_FLUSH: number; - const Z_SYNC_FLUSH: number; - const Z_FULL_FLUSH: number; - const Z_FINISH: number; - const Z_BLOCK: number; - const Z_TREES: number; - - // Return codes for the compression/decompression functions. Negative values are errors, positive values are used for special but normal events. - - const Z_OK: number; - const Z_STREAM_END: number; - const Z_NEED_DICT: number; - const Z_ERRNO: number; - const Z_STREAM_ERROR: number; - const Z_DATA_ERROR: number; - const Z_MEM_ERROR: number; - const Z_BUF_ERROR: number; - const Z_VERSION_ERROR: number; - - // Compression levels. - - const Z_NO_COMPRESSION: number; - const Z_BEST_SPEED: number; - const Z_BEST_COMPRESSION: number; - const Z_DEFAULT_COMPRESSION: number; - - // Compression strategy. - - const Z_FILTERED: number; - const Z_HUFFMAN_ONLY: number; - const Z_RLE: number; - const Z_FIXED: number; - const Z_DEFAULT_STRATEGY: number; - } - - // Constants - const Z_NO_FLUSH: number; - const Z_PARTIAL_FLUSH: number; - const Z_SYNC_FLUSH: number; - const Z_FULL_FLUSH: number; - const Z_FINISH: number; - const Z_BLOCK: number; - const Z_TREES: number; - const Z_OK: number; - const Z_STREAM_END: number; - const Z_NEED_DICT: number; - const Z_ERRNO: number; - const Z_STREAM_ERROR: number; - const Z_DATA_ERROR: number; - const Z_MEM_ERROR: number; - const Z_BUF_ERROR: number; - const Z_VERSION_ERROR: number; - const Z_NO_COMPRESSION: number; - const Z_BEST_SPEED: number; - const Z_BEST_COMPRESSION: number; - const Z_DEFAULT_COMPRESSION: number; - const Z_FILTERED: number; - const Z_HUFFMAN_ONLY: number; - const Z_RLE: number; - const Z_FIXED: number; - const Z_DEFAULT_STRATEGY: number; - const Z_BINARY: number; - const Z_TEXT: number; - const Z_ASCII: number; - const Z_UNKNOWN: number; - const Z_DEFLATED: number; -} - -declare module "os" { - interface CpuInfo { - model: string; - speed: number; - times: { - user: number; - nice: number; - sys: number; - idle: number; - irq: number; - }; - } - - interface NetworkInterfaceBase { - address: string; - netmask: string; - mac: string; - internal: boolean; - cidr: string | null; - } - - interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { - family: "IPv4"; - } - - interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { - family: "IPv6"; - scopeid: number; - } - - type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; - - function hostname(): string; - function loadavg(): number[]; - function uptime(): number; - function freemem(): number; - function totalmem(): number; - function cpus(): CpuInfo[]; - function type(): string; - function release(): string; - function networkInterfaces(): { [index: string]: NetworkInterfaceInfo[] }; - function homedir(): string; - function userInfo(options?: { encoding: string }): { username: string, uid: number, gid: number, shell: any, homedir: string }; - const constants: { - UV_UDP_REUSEADDR: number; - signals: { - SIGHUP: number; - SIGINT: number; - SIGQUIT: number; - SIGILL: number; - SIGTRAP: number; - SIGABRT: number; - SIGIOT: number; - SIGBUS: number; - SIGFPE: number; - SIGKILL: number; - SIGUSR1: number; - SIGSEGV: number; - SIGUSR2: number; - SIGPIPE: number; - SIGALRM: number; - SIGTERM: number; - SIGCHLD: number; - SIGSTKFLT: number; - SIGCONT: number; - SIGSTOP: number; - SIGTSTP: number; - SIGTTIN: number; - SIGTTOU: number; - SIGURG: number; - SIGXCPU: number; - SIGXFSZ: number; - SIGVTALRM: number; - SIGPROF: number; - SIGWINCH: number; - SIGIO: number; - SIGPOLL: number; - SIGPWR: number; - SIGSYS: number; - SIGUNUSED: number; - }; - errno: { - E2BIG: number; - EACCES: number; - EADDRINUSE: number; - EADDRNOTAVAIL: number; - EAFNOSUPPORT: number; - EAGAIN: number; - EALREADY: number; - EBADF: number; - EBADMSG: number; - EBUSY: number; - ECANCELED: number; - ECHILD: number; - ECONNABORTED: number; - ECONNREFUSED: number; - ECONNRESET: number; - EDEADLK: number; - EDESTADDRREQ: number; - EDOM: number; - EDQUOT: number; - EEXIST: number; - EFAULT: number; - EFBIG: number; - EHOSTUNREACH: number; - EIDRM: number; - EILSEQ: number; - EINPROGRESS: number; - EINTR: number; - EINVAL: number; - EIO: number; - EISCONN: number; - EISDIR: number; - ELOOP: number; - EMFILE: number; - EMLINK: number; - EMSGSIZE: number; - EMULTIHOP: number; - ENAMETOOLONG: number; - ENETDOWN: number; - ENETRESET: number; - ENETUNREACH: number; - ENFILE: number; - ENOBUFS: number; - ENODATA: number; - ENODEV: number; - ENOENT: number; - ENOEXEC: number; - ENOLCK: number; - ENOLINK: number; - ENOMEM: number; - ENOMSG: number; - ENOPROTOOPT: number; - ENOSPC: number; - ENOSR: number; - ENOSTR: number; - ENOSYS: number; - ENOTCONN: number; - ENOTDIR: number; - ENOTEMPTY: number; - ENOTSOCK: number; - ENOTSUP: number; - ENOTTY: number; - ENXIO: number; - EOPNOTSUPP: number; - EOVERFLOW: number; - EPERM: number; - EPIPE: number; - EPROTO: number; - EPROTONOSUPPORT: number; - EPROTOTYPE: number; - ERANGE: number; - EROFS: number; - ESPIPE: number; - ESRCH: number; - ESTALE: number; - ETIME: number; - ETIMEDOUT: number; - ETXTBSY: number; - EWOULDBLOCK: number; - EXDEV: number; - }; - priority: { - PRIORITY_LOW: number; - PRIORITY_BELOW_NORMAL: number; - PRIORITY_NORMAL: number; - PRIORITY_ABOVE_NORMAL: number; - PRIORITY_HIGH: number; - PRIORITY_HIGHEST: number; - } - }; - function arch(): string; - function platform(): NodeJS.Platform; - function tmpdir(): string; - const EOL: string; - function endianness(): "BE" | "LE"; - /** - * Gets the priority of a process. - * Defaults to current process. - */ - function getPriority(pid?: number): number; - /** - * Sets the priority of the current process. - * @param priority Must be in range of -20 to 19 - */ - function setPriority(priority: number): void; - /** - * Sets the priority of the process specified process. - * @param priority Must be in range of -20 to 19 - */ - function setPriority(pid: number, priority: number): void; -} - -declare module "https" { - import * as tls from "tls"; - import * as events from "events"; - import * as http from "http"; - import { URL } from "url"; - - type ServerOptions = tls.SecureContextOptions & tls.TlsOptions; - - type RequestOptions = http.RequestOptions & tls.SecureContextOptions & { - rejectUnauthorized?: boolean; // Defaults to true - servername?: string; // SNI TLS Extension - }; - - interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { - rejectUnauthorized?: boolean; - maxCachedSessions?: number; - } - - class Agent extends http.Agent { - constructor(options?: AgentOptions); - options: AgentOptions; - } - - class Server extends tls.Server { - setTimeout(callback: () => void): this; - setTimeout(msecs?: number, callback?: () => void): this; - timeout: number; - keepAliveTimeout: number; - } - - function createServer(options: ServerOptions, requestListener?: (req: http.IncomingMessage, res: http.ServerResponse) => void): Server; - function request(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; - function request(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; - function get(options: RequestOptions | string | URL, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; - function get(url: string | URL, options: RequestOptions, callback?: (res: http.IncomingMessage) => void): http.ClientRequest; - let globalAgent: Agent; -} - -declare module "punycode" { - function decode(string: string): string; - function encode(string: string): string; - function toUnicode(domain: string): string; - function toASCII(domain: string): string; - const ucs2: ucs2; - interface ucs2 { - decode(string: string): number[]; - encode(codePoints: number[]): string; - } - const version: any; -} - -declare module "repl" { - import * as stream from "stream"; - import * as readline from "readline"; - - interface ReplOptions { - prompt?: string; - input?: NodeJS.ReadableStream; - output?: NodeJS.WritableStream; - terminal?: boolean; - eval?: Function; - useColors?: boolean; - useGlobal?: boolean; - ignoreUndefined?: boolean; - writer?: Function; - completer?: Function; - replMode?: any; - breakEvalOnSigint?: any; - } - - interface REPLServer extends readline.ReadLine { - context: any; - inputStream: NodeJS.ReadableStream; - outputStream: NodeJS.WritableStream; - - defineCommand(keyword: string, cmd: Function | { help: string, action: Function }): void; - displayPrompt(preserveCursor?: boolean): void; - - /** - * events.EventEmitter - * 1. exit - * 2. reset - */ - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "exit", listener: () => void): this; - addListener(event: "reset", listener: (...args: any[]) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "exit"): boolean; - emit(event: "reset", context: any): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "exit", listener: () => void): this; - on(event: "reset", listener: (...args: any[]) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "exit", listener: () => void): this; - once(event: "reset", listener: (...args: any[]) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "exit", listener: () => void): this; - prependListener(event: "reset", listener: (...args: any[]) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "exit", listener: () => void): this; - prependOnceListener(event: "reset", listener: (...args: any[]) => void): this; - } - - function start(options?: string | ReplOptions): REPLServer; - - class Recoverable extends SyntaxError { - err: Error; - - constructor(err: Error); - } -} - -declare module "readline" { - import * as events from "events"; - import * as stream from "stream"; - - interface Key { - sequence?: string; - name?: string; - ctrl?: boolean; - meta?: boolean; - shift?: boolean; - } - - interface ReadLine extends events.EventEmitter { - setPrompt(prompt: string): void; - prompt(preserveCursor?: boolean): void; - question(query: string, callback: (answer: string) => void): void; - pause(): ReadLine; - resume(): ReadLine; - close(): void; - write(data: string | Buffer, key?: Key): void; - - /** - * events.EventEmitter - * 1. close - * 2. line - * 3. pause - * 4. resume - * 5. SIGCONT - * 6. SIGINT - * 7. SIGTSTP - */ - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "close", listener: () => void): this; - addListener(event: "line", listener: (input: any) => void): this; - addListener(event: "pause", listener: () => void): this; - addListener(event: "resume", listener: () => void): this; - addListener(event: "SIGCONT", listener: () => void): this; - addListener(event: "SIGINT", listener: () => void): this; - addListener(event: "SIGTSTP", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "close"): boolean; - emit(event: "line", input: any): boolean; - emit(event: "pause"): boolean; - emit(event: "resume"): boolean; - emit(event: "SIGCONT"): boolean; - emit(event: "SIGINT"): boolean; - emit(event: "SIGTSTP"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "close", listener: () => void): this; - on(event: "line", listener: (input: any) => void): this; - on(event: "pause", listener: () => void): this; - on(event: "resume", listener: () => void): this; - on(event: "SIGCONT", listener: () => void): this; - on(event: "SIGINT", listener: () => void): this; - on(event: "SIGTSTP", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "close", listener: () => void): this; - once(event: "line", listener: (input: any) => void): this; - once(event: "pause", listener: () => void): this; - once(event: "resume", listener: () => void): this; - once(event: "SIGCONT", listener: () => void): this; - once(event: "SIGINT", listener: () => void): this; - once(event: "SIGTSTP", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "close", listener: () => void): this; - prependListener(event: "line", listener: (input: any) => void): this; - prependListener(event: "pause", listener: () => void): this; - prependListener(event: "resume", listener: () => void): this; - prependListener(event: "SIGCONT", listener: () => void): this; - prependListener(event: "SIGINT", listener: () => void): this; - prependListener(event: "SIGTSTP", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "line", listener: (input: any) => void): this; - prependOnceListener(event: "pause", listener: () => void): this; - prependOnceListener(event: "resume", listener: () => void): this; - prependOnceListener(event: "SIGCONT", listener: () => void): this; - prependOnceListener(event: "SIGINT", listener: () => void): this; - prependOnceListener(event: "SIGTSTP", listener: () => void): this; - } - - type Completer = (line: string) => CompleterResult; - type AsyncCompleter = (line: string, callback: (err: any, result: CompleterResult) => void) => any; - - type CompleterResult = [string[], string]; - - interface ReadLineOptions { - input: NodeJS.ReadableStream; - output?: NodeJS.WritableStream; - completer?: Completer | AsyncCompleter; - terminal?: boolean; - historySize?: number; - prompt?: string; - crlfDelay?: number; - removeHistoryDuplicates?: boolean; - } - - function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean): ReadLine; - function createInterface(options: ReadLineOptions): ReadLine; - - function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number): void; - function emitKeypressEvents(stream: NodeJS.ReadableStream, interface?: ReadLine): void; - function moveCursor(stream: NodeJS.WritableStream, dx: number | string, dy: number | string): void; - function clearLine(stream: NodeJS.WritableStream, dir: number): void; - function clearScreenDown(stream: NodeJS.WritableStream): void; -} - -declare module "vm" { - interface Context { } - interface BaseOptions { - /** - * Specifies the filename used in stack traces produced by this script. - * Default: `''`. - */ - filename?: string; - /** - * Specifies the line number offset that is displayed in stack traces produced by this script. - * Default: `0`. - */ - lineOffset?: number; - /** - * Specifies the column number offset that is displayed in stack traces produced by this script. - * Default: `0` - */ - columnOffset?: number; - } - interface ScriptOptions extends BaseOptions { - displayErrors?: boolean; - timeout?: number; - cachedData?: Buffer; - produceCachedData?: boolean; - } - interface RunningScriptOptions extends BaseOptions { - displayErrors?: boolean; - timeout?: number; - } - interface CompileFunctionOptions extends BaseOptions { - /** - * Provides an optional data with V8's code cache data for the supplied source. - */ - cachedData?: Buffer; - /** - * Specifies whether to produce new cache data. - * Default: `false`, - */ - produceCachedData?: boolean; - /** - * The sandbox/context in which the said function should be compiled in. - */ - parsingContext?: Context; - - /** - * An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling - */ - contextExtensions?: Object[]; - } - class Script { - constructor(code: string, options?: ScriptOptions); - runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any; - runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any; - runInThisContext(options?: RunningScriptOptions): any; - } - function createContext(sandbox?: Context): Context; - function isContext(sandbox: Context): boolean; - function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions | string): any; - function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions | string): any; - function runInThisContext(code: string, options?: RunningScriptOptions | string): any; - function compileFunction(code: string, params: string[], options: CompileFunctionOptions): Function; -} - -declare module "child_process" { - import * as events from "events"; - import * as stream from "stream"; - import * as net from "net"; - - interface ChildProcess extends events.EventEmitter { - stdin: stream.Writable; - stdout: stream.Readable; - stderr: stream.Readable; - stdio: [stream.Writable, stream.Readable, stream.Readable]; - killed: boolean; - pid: number; - kill(signal?: string): void; - send(message: any, callback?: (error: Error) => void): boolean; - send(message: any, sendHandle?: net.Socket | net.Server, callback?: (error: Error) => void): boolean; - send(message: any, sendHandle?: net.Socket | net.Server, options?: MessageOptions, callback?: (error: Error) => void): boolean; - connected: boolean; - disconnect(): void; - unref(): void; - ref(): void; - - /** - * events.EventEmitter - * 1. close - * 2. disconnect - * 3. error - * 4. exit - * 5. message - */ - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "close", listener: (code: number, signal: string) => void): this; - addListener(event: "disconnect", listener: () => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: "exit", listener: (code: number, signal: string) => void): this; - addListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "close", code: number, signal: string): boolean; - emit(event: "disconnect"): boolean; - emit(event: "error", err: Error): boolean; - emit(event: "exit", code: number, signal: string): boolean; - emit(event: "message", message: any, sendHandle: net.Socket | net.Server): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "close", listener: (code: number, signal: string) => void): this; - on(event: "disconnect", listener: () => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: "exit", listener: (code: number, signal: string) => void): this; - on(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "close", listener: (code: number, signal: string) => void): this; - once(event: "disconnect", listener: () => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: "exit", listener: (code: number, signal: string) => void): this; - once(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "close", listener: (code: number, signal: string) => void): this; - prependListener(event: "disconnect", listener: () => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: "exit", listener: (code: number, signal: string) => void): this; - prependListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "close", listener: (code: number, signal: string) => void): this; - prependOnceListener(event: "disconnect", listener: () => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this; - prependOnceListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; - } - - interface MessageOptions { - keepOpen?: boolean; - } - - type StdioOptions = "pipe" | "ignore" | "inherit" | Array<("pipe" | "ipc" | "ignore" | "inherit" | stream.Stream | number | null | undefined)>; - - interface SpawnOptions { - cwd?: string; - env?: NodeJS.ProcessEnv; - argv0?: string; - stdio?: StdioOptions; - detached?: boolean; - uid?: number; - gid?: number; - shell?: boolean | string; - windowsVerbatimArguments?: boolean; - windowsHide?: boolean; - } - - function spawn(command: string, args?: ReadonlyArray, options?: SpawnOptions): ChildProcess; - - interface ExecOptions { - cwd?: string; - env?: NodeJS.ProcessEnv; - shell?: string; - timeout?: number; - maxBuffer?: number; - killSignal?: string; - uid?: number; - gid?: number; - windowsHide?: boolean; - } - - interface ExecOptionsWithStringEncoding extends ExecOptions { - encoding: BufferEncoding; - } - - interface ExecOptionsWithBufferEncoding extends ExecOptions { - encoding: string | null; // specify `null`. - } - - interface ExecException extends Error { - cmd?: string; - killed?: boolean; - code?: number; - signal?: string; - } - - // no `options` definitely means stdout/stderr are `string`. - function exec(command: string, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; - - // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. - function exec(command: string, options: { encoding: "buffer" | null } & ExecOptions, callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess; - - // `options` with well known `encoding` means stdout/stderr are definitely `string`. - function exec(command: string, options: { encoding: BufferEncoding } & ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; - - // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. - // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. - function exec(command: string, options: { encoding: string } & ExecOptions, callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess; - - // `options` without an `encoding` means stdout/stderr are definitely `string`. - function exec(command: string, options: ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; - - // fallback if nothing else matches. Worst case is always `string | Buffer`. - function exec( - command: string, - options: ({ encoding?: string | null } & ExecOptions) | undefined | null, - callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, - ): ChildProcess; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace exec { - function __promisify__(command: string): Promise<{ stdout: string, stderr: string }>; - function __promisify__(command: string, options: { encoding: "buffer" | null } & ExecOptions): Promise<{ stdout: Buffer, stderr: Buffer }>; - function __promisify__(command: string, options: { encoding: BufferEncoding } & ExecOptions): Promise<{ stdout: string, stderr: string }>; - function __promisify__(command: string, options: ExecOptions): Promise<{ stdout: string, stderr: string }>; - function __promisify__(command: string, options?: ({ encoding?: string | null } & ExecOptions) | null): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; - } - - interface ExecFileOptions { - cwd?: string; - env?: NodeJS.ProcessEnv; - timeout?: number; - maxBuffer?: number; - killSignal?: string; - uid?: number; - gid?: number; - windowsHide?: boolean; - windowsVerbatimArguments?: boolean; - } - interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { - encoding: BufferEncoding; - } - interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { - encoding: 'buffer' | null; - } - interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions { - encoding: string; - } - - function execFile(file: string): ChildProcess; - function execFile(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess; - function execFile(file: string, args?: ReadonlyArray | null): ChildProcess; - function execFile(file: string, args: ReadonlyArray | undefined | null, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess; - - // no `options` definitely means stdout/stderr are `string`. - function execFile(file: string, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess; - function execFile(file: string, args: ReadonlyArray | undefined | null, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess; - - // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. - function execFile(file: string, options: ExecFileOptionsWithBufferEncoding, callback: (error: Error | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess; - function execFile( - file: string, - args: ReadonlyArray | undefined | null, - options: ExecFileOptionsWithBufferEncoding, - callback: (error: Error | null, stdout: Buffer, stderr: Buffer) => void, - ): ChildProcess; - - // `options` with well known `encoding` means stdout/stderr are definitely `string`. - function execFile(file: string, options: ExecFileOptionsWithStringEncoding, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess; - function execFile( - file: string, - args: ReadonlyArray | undefined | null, - options: ExecFileOptionsWithStringEncoding, - callback: (error: Error | null, stdout: string, stderr: string) => void, - ): ChildProcess; - - // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. - // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. - function execFile( - file: string, - options: ExecFileOptionsWithOtherEncoding, - callback: (error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void, - ): ChildProcess; - function execFile( - file: string, - args: ReadonlyArray | undefined | null, - options: ExecFileOptionsWithOtherEncoding, - callback: (error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void, - ): ChildProcess; - - // `options` without an `encoding` means stdout/stderr are definitely `string`. - function execFile(file: string, options: ExecFileOptions, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess; - function execFile(file: string, args: ReadonlyArray | undefined | null, options: ExecFileOptions, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess; - - // fallback if nothing else matches. Worst case is always `string | Buffer`. - function execFile( - file: string, - options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null, - callback: ((error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null, - ): ChildProcess; - function execFile( - file: string, - args: ReadonlyArray | undefined | null, - options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null, - callback: ((error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null, - ): ChildProcess; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace execFile { - function __promisify__(file: string): Promise<{ stdout: string, stderr: string }>; - function __promisify__(file: string, args: string[] | undefined | null): Promise<{ stdout: string, stderr: string }>; - function __promisify__(file: string, options: ExecFileOptionsWithBufferEncoding): Promise<{ stdout: Buffer, stderr: Buffer }>; - function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithBufferEncoding): Promise<{ stdout: Buffer, stderr: Buffer }>; - function __promisify__(file: string, options: ExecFileOptionsWithStringEncoding): Promise<{ stdout: string, stderr: string }>; - function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithStringEncoding): Promise<{ stdout: string, stderr: string }>; - function __promisify__(file: string, options: ExecFileOptionsWithOtherEncoding): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; - function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithOtherEncoding): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; - function __promisify__(file: string, options: ExecFileOptions): Promise<{ stdout: string, stderr: string }>; - function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptions): Promise<{ stdout: string, stderr: string }>; - function __promisify__(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; - function __promisify__( - file: string, - args: string[] | undefined | null, - options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null, - ): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; - } - - interface ForkOptions { - cwd?: string; - env?: NodeJS.ProcessEnv; - execPath?: string; - execArgv?: string[]; - silent?: boolean; - stdio?: StdioOptions; - windowsVerbatimArguments?: boolean; - uid?: number; - gid?: number; - } - function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess; - - interface SpawnSyncOptions { - argv0?: string; // Not specified in the docs - cwd?: string; - input?: string | Buffer | NodeJS.TypedArray | DataView; - stdio?: StdioOptions; - env?: NodeJS.ProcessEnv; - uid?: number; - gid?: number; - timeout?: number; - killSignal?: string | number; - maxBuffer?: number; - encoding?: string; - shell?: boolean | string; - windowsVerbatimArguments?: boolean; - windowsHide?: boolean; - } - interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { - encoding: BufferEncoding; - } - interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { - encoding: string; // specify `null`. - } - interface SpawnSyncReturns { - pid: number; - output: string[]; - stdout: T; - stderr: T; - status: number; - signal: string; - error: Error; - } - function spawnSync(command: string): SpawnSyncReturns; - function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; - function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; - function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; - function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; - function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; - function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptions): SpawnSyncReturns; - - interface ExecSyncOptions { - cwd?: string; - input?: string | Buffer | Uint8Array; - stdio?: StdioOptions; - env?: NodeJS.ProcessEnv; - shell?: string; - uid?: number; - gid?: number; - timeout?: number; - killSignal?: string | number; - maxBuffer?: number; - encoding?: string; - windowsHide?: boolean; - } - interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { - encoding: BufferEncoding; - } - interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { - encoding: string; // specify `null`. - } - function execSync(command: string): Buffer; - function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string; - function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer; - function execSync(command: string, options?: ExecSyncOptions): Buffer; - - interface ExecFileSyncOptions { - cwd?: string; - input?: string | Buffer | NodeJS.TypedArray | DataView; - stdio?: StdioOptions; - env?: NodeJS.ProcessEnv; - uid?: number; - gid?: number; - timeout?: number; - killSignal?: string | number; - maxBuffer?: number; - encoding?: string; - windowsHide?: boolean; - shell?: boolean | string; - } - interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { - encoding: BufferEncoding; - } - interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { - encoding: string; // specify `null`. - } - function execFileSync(command: string): Buffer; - function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string; - function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; - function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer; - function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptionsWithStringEncoding): string; - function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; - function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptions): Buffer; -} - -declare module "url" { - import { ParsedUrlQuery } from 'querystring'; - - interface UrlObjectCommon { - auth?: string; - hash?: string; - host?: string; - hostname?: string; - href?: string; - path?: string; - pathname?: string; - protocol?: string; - search?: string; - slashes?: boolean; - } - - // Input to `url.format` - interface UrlObject extends UrlObjectCommon { - port?: string | number; - query?: string | null | { [key: string]: any }; - } - - // Output of `url.parse` - interface Url extends UrlObjectCommon { - port?: string; - query?: string | null | ParsedUrlQuery; - } - - interface UrlWithParsedQuery extends Url { - query: ParsedUrlQuery; - } - - interface UrlWithStringQuery extends Url { - query: string | null; - } - - function parse(urlStr: string): UrlWithStringQuery; - function parse(urlStr: string, parseQueryString: false | undefined, slashesDenoteHost?: boolean): UrlWithStringQuery; - function parse(urlStr: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; - function parse(urlStr: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; - - function format(URL: URL, options?: URLFormatOptions): string; - function format(urlObject: UrlObject | string): string; - function resolve(from: string, to: string): string; - - function domainToASCII(domain: string): string; - function domainToUnicode(domain: string): string; - - /** - * This function ensures the correct decodings of percent-encoded characters as - * well as ensuring a cross-platform valid absolute path string. - * @param url The file URL string or URL object to convert to a path. - */ - function fileURLToPath(url: string | URL): string; - - /** - * This function ensures that path is resolved absolutely, and that the URL - * control characters are correctly encoded when converting into a File URL. - * @param url The path to convert to a File URL. - */ - function pathToFileURL(url: string): URL; - - interface URLFormatOptions { - auth?: boolean; - fragment?: boolean; - search?: boolean; - unicode?: boolean; - } - - class URL { - constructor(input: string, base?: string | URL); - hash: string; - host: string; - hostname: string; - href: string; - readonly origin: string; - password: string; - pathname: string; - port: string; - protocol: string; - search: string; - readonly searchParams: URLSearchParams; - username: string; - toString(): string; - toJSON(): string; - } - - class URLSearchParams implements Iterable<[string, string]> { - constructor(init?: URLSearchParams | string | { [key: string]: string | string[] | undefined } | Iterable<[string, string]> | Array<[string, string]>); - append(name: string, value: string): void; - delete(name: string): void; - entries(): IterableIterator<[string, string]>; - forEach(callback: (value: string, name: string, searchParams: this) => void): void; - get(name: string): string | null; - getAll(name: string): string[]; - has(name: string): boolean; - keys(): IterableIterator; - set(name: string, value: string): void; - sort(): void; - toString(): string; - values(): IterableIterator; - [Symbol.iterator](): IterableIterator<[string, string]>; - } -} - -declare module "dns" { - // Supported getaddrinfo flags. - const ADDRCONFIG: number; - const V4MAPPED: number; - - interface LookupOptions { - family?: number; - hints?: number; - all?: boolean; - verbatim?: boolean; - } - - interface LookupOneOptions extends LookupOptions { - all?: false; - } - - interface LookupAllOptions extends LookupOptions { - all: true; - } - - interface LookupAddress { - address: string; - family: number; - } - - function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException, address: string, family: number) => void): void; - function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException, address: string, family: number) => void): void; - function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException, addresses: LookupAddress[]) => void): void; - function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException, address: string | LookupAddress[], family: number) => void): void; - function lookup(hostname: string, callback: (err: NodeJS.ErrnoException, address: string, family: number) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace lookup { - function __promisify__(hostname: string, options: LookupAllOptions): Promise<{ address: LookupAddress[] }>; - function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise<{ address: string, family: number }>; - function __promisify__(hostname: string, options?: LookupOptions | number): Promise<{ address: string | LookupAddress[], family?: number }>; - } - - function lookupService(address: string, port: number, callback: (err: NodeJS.ErrnoException, hostname: string, service: string) => void): void; - - namespace lookupService { - function __promisify__(address: string, port: number): Promise<{ hostname: string, service: string }>; - } - - interface ResolveOptions { - ttl: boolean; - } - - interface ResolveWithTtlOptions extends ResolveOptions { - ttl: true; - } - - interface RecordWithTtl { - address: string; - ttl: number; - } - - /** @deprecated Use AnyARecord or AnyAaaaRecord instead. */ - type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord; - - interface AnyARecord extends RecordWithTtl { - type: "A"; - } - - interface AnyAaaaRecord extends RecordWithTtl { - type: "AAAA"; - } - - interface MxRecord { - priority: number; - exchange: string; - } - - interface AnyMxRecord extends MxRecord { - type: "MX"; - } - - interface NaptrRecord { - flags: string; - service: string; - regexp: string; - replacement: string; - order: number; - preference: number; - } - - interface AnyNaptrRecord extends NaptrRecord { - type: "NAPTR"; - } - - interface SoaRecord { - nsname: string; - hostmaster: string; - serial: number; - refresh: number; - retry: number; - expire: number; - minttl: number; - } - - interface AnySoaRecord extends SoaRecord { - type: "SOA"; - } - - interface SrvRecord { - priority: number; - weight: number; - port: number; - name: string; - } - - interface AnySrvRecord extends SrvRecord { - type: "SRV"; - } - - interface AnyTxtRecord { - type: "TXT"; - entries: string[]; - } - - interface AnyNsRecord { - type: "NS"; - value: string; - } - - interface AnyPtrRecord { - type: "PTR"; - value: string; - } - - interface AnyCnameRecord { - type: "CNAME"; - value: string; - } - - type AnyRecord = AnyARecord | - AnyAaaaRecord | - AnyCnameRecord | - AnyMxRecord | - AnyNaptrRecord | - AnyNsRecord | - AnyPtrRecord | - AnySoaRecord | - AnySrvRecord | - AnyTxtRecord; - - function resolve(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve(hostname: string, rrtype: "A", callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve(hostname: string, rrtype: "AAAA", callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve(hostname: string, rrtype: "ANY", callback: (err: NodeJS.ErrnoException, addresses: AnyRecord[]) => void): void; - function resolve(hostname: string, rrtype: "CNAME", callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve(hostname: string, rrtype: "MX", callback: (err: NodeJS.ErrnoException, addresses: MxRecord[]) => void): void; - function resolve(hostname: string, rrtype: "NAPTR", callback: (err: NodeJS.ErrnoException, addresses: NaptrRecord[]) => void): void; - function resolve(hostname: string, rrtype: "NS", callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve(hostname: string, rrtype: "PTR", callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve(hostname: string, rrtype: "SOA", callback: (err: NodeJS.ErrnoException, addresses: SoaRecord) => void): void; - function resolve(hostname: string, rrtype: "SRV", callback: (err: NodeJS.ErrnoException, addresses: SrvRecord[]) => void): void; - function resolve(hostname: string, rrtype: "TXT", callback: (err: NodeJS.ErrnoException, addresses: string[][]) => void): void; - function resolve( - hostname: string, - rrtype: string, - callback: (err: NodeJS.ErrnoException, addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]) => void, - ): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace resolve { - function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise; - function __promisify__(hostname: string, rrtype: "ANY"): Promise; - function __promisify__(hostname: string, rrtype: "MX"): Promise; - function __promisify__(hostname: string, rrtype: "NAPTR"): Promise; - function __promisify__(hostname: string, rrtype: "SOA"): Promise; - function __promisify__(hostname: string, rrtype: "SRV"): Promise; - function __promisify__(hostname: string, rrtype: "TXT"): Promise; - function __promisify__(hostname: string, rrtype: string): Promise; - } - - function resolve4(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve4(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException, addresses: RecordWithTtl[]) => void): void; - function resolve4(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException, addresses: string[] | RecordWithTtl[]) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace resolve4 { - function __promisify__(hostname: string): Promise; - function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; - function __promisify__(hostname: string, options?: ResolveOptions): Promise; - } - - function resolve6(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - function resolve6(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException, addresses: RecordWithTtl[]) => void): void; - function resolve6(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException, addresses: string[] | RecordWithTtl[]) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace resolve6 { - function __promisify__(hostname: string): Promise; - function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; - function __promisify__(hostname: string, options?: ResolveOptions): Promise; - } - - function resolveCname(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - namespace resolveCname { - function __promisify__(hostname: string): Promise; - } - - function resolveMx(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: MxRecord[]) => void): void; - namespace resolveMx { - function __promisify__(hostname: string): Promise; - } - - function resolveNaptr(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: NaptrRecord[]) => void): void; - namespace resolveNaptr { - function __promisify__(hostname: string): Promise; - } - - function resolveNs(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - namespace resolveNs { - function __promisify__(hostname: string): Promise; - } - - function resolvePtr(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void; - namespace resolvePtr { - function __promisify__(hostname: string): Promise; - } - - function resolveSoa(hostname: string, callback: (err: NodeJS.ErrnoException, address: SoaRecord) => void): void; - namespace resolveSoa { - function __promisify__(hostname: string): Promise; - } - - function resolveSrv(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: SrvRecord[]) => void): void; - namespace resolveSrv { - function __promisify__(hostname: string): Promise; - } - - function resolveTxt(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[][]) => void): void; - namespace resolveTxt { - function __promisify__(hostname: string): Promise; - } - - function resolveAny(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: AnyRecord[]) => void): void; - namespace resolveAny { - function __promisify__(hostname: string): Promise; - } - - function reverse(ip: string, callback: (err: NodeJS.ErrnoException, hostnames: string[]) => void): void; - function setServers(servers: string[]): void; - function getServers(): string[]; - - // Error codes - const NODATA: string; - const FORMERR: string; - const SERVFAIL: string; - const NOTFOUND: string; - const NOTIMP: string; - const REFUSED: string; - const BADQUERY: string; - const BADNAME: string; - const BADFAMILY: string; - const BADRESP: string; - const CONNREFUSED: string; - const TIMEOUT: string; - const EOF: string; - const FILE: string; - const NOMEM: string; - const DESTRUCTION: string; - const BADSTR: string; - const BADFLAGS: string; - const NONAME: string; - const BADHINTS: string; - const NOTINITIALIZED: string; - const LOADIPHLPAPI: string; - const ADDRGETNETWORKPARAMS: string; - const CANCELLED: string; - - class Resolver { - getServers: typeof getServers; - setServers: typeof setServers; - resolve: typeof resolve; - resolve4: typeof resolve4; - resolve6: typeof resolve6; - resolveAny: typeof resolveAny; - resolveCname: typeof resolveCname; - resolveMx: typeof resolveMx; - resolveNaptr: typeof resolveNaptr; - resolveNs: typeof resolveNs; - resolvePtr: typeof resolvePtr; - resolveSoa: typeof resolveSoa; - resolveSrv: typeof resolveSrv; - resolveTxt: typeof resolveTxt; - reverse: typeof reverse; - cancel(): void; - } -} - -declare module "net" { - import * as stream from "stream"; - import * as events from "events"; - import * as dns from "dns"; - - type LookupFunction = (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void; - - interface AddressInfo { - address: string; - family: string; - port: number; - } - - interface SocketConstructorOpts { - fd?: number; - allowHalfOpen?: boolean; - readable?: boolean; - writable?: boolean; - } - - interface TcpSocketConnectOpts { - port: number; - host?: string; - localAddress?: string; - localPort?: number; - hints?: number; - family?: number; - lookup?: LookupFunction; - } - - interface IpcSocketConnectOpts { - path: string; - } - - type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; - - class Socket extends stream.Duplex { - constructor(options?: SocketConstructorOpts); - - // Extended base methods - write(buffer: Buffer): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - write(str: string, encoding?: string, fd?: string): boolean; - write(data: any, encoding?: string, callback?: Function): void; - - connect(options: SocketConnectOpts, connectionListener?: Function): this; - connect(port: number, host: string, connectionListener?: Function): this; - connect(port: number, connectionListener?: Function): this; - connect(path: string, connectionListener?: Function): this; - - setEncoding(encoding?: string): this; - pause(): this; - resume(): this; - setTimeout(timeout: number, callback?: Function): this; - setNoDelay(noDelay?: boolean): this; - setKeepAlive(enable?: boolean, initialDelay?: number): this; - address(): AddressInfo | string; - unref(): void; - ref(): void; - - readonly bufferSize: number; - readonly bytesRead: number; - readonly bytesWritten: number; - readonly connecting: boolean; - readonly destroyed: boolean; - readonly localAddress: string; - readonly localPort: number; - readonly remoteAddress?: string; - readonly remoteFamily?: string; - readonly remotePort?: number; - - // Extended base methods - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - end(data?: any, encoding?: string): void; - - /** - * events.EventEmitter - * 1. close - * 2. connect - * 3. data - * 4. drain - * 5. end - * 6. error - * 7. lookup - * 8. timeout - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "close", listener: (had_error: boolean) => void): this; - addListener(event: "connect", listener: () => void): this; - addListener(event: "data", listener: (data: Buffer) => void): this; - addListener(event: "drain", listener: () => void): this; - addListener(event: "end", listener: () => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; - addListener(event: "timeout", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "close", had_error: boolean): boolean; - emit(event: "connect"): boolean; - emit(event: "data", data: Buffer): boolean; - emit(event: "drain"): boolean; - emit(event: "end"): boolean; - emit(event: "error", err: Error): boolean; - emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean; - emit(event: "timeout"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "close", listener: (had_error: boolean) => void): this; - on(event: "connect", listener: () => void): this; - on(event: "data", listener: (data: Buffer) => void): this; - on(event: "drain", listener: () => void): this; - on(event: "end", listener: () => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; - on(event: "timeout", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "close", listener: (had_error: boolean) => void): this; - once(event: "connect", listener: () => void): this; - once(event: "data", listener: (data: Buffer) => void): this; - once(event: "drain", listener: () => void): this; - once(event: "end", listener: () => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; - once(event: "timeout", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "close", listener: (had_error: boolean) => void): this; - prependListener(event: "connect", listener: () => void): this; - prependListener(event: "data", listener: (data: Buffer) => void): this; - prependListener(event: "drain", listener: () => void): this; - prependListener(event: "end", listener: () => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; - prependListener(event: "timeout", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "close", listener: (had_error: boolean) => void): this; - prependOnceListener(event: "connect", listener: () => void): this; - prependOnceListener(event: "data", listener: (data: Buffer) => void): this; - prependOnceListener(event: "drain", listener: () => void): this; - prependOnceListener(event: "end", listener: () => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; - prependOnceListener(event: "timeout", listener: () => void): this; - } - - interface ListenOptions { - port?: number; - host?: string; - backlog?: number; - path?: string; - exclusive?: boolean; - readableAll?: boolean; - writableAll?: boolean; - } - - // https://github.com/nodejs/node/blob/master/lib/net.js - class Server extends events.EventEmitter { - constructor(connectionListener?: (socket: Socket) => void); - constructor(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void); - - listen(port?: number, hostname?: string, backlog?: number, listeningListener?: Function): this; - listen(port?: number, hostname?: string, listeningListener?: Function): this; - listen(port?: number, backlog?: number, listeningListener?: Function): this; - listen(port?: number, listeningListener?: Function): this; - listen(path: string, backlog?: number, listeningListener?: Function): this; - listen(path: string, listeningListener?: Function): this; - listen(options: ListenOptions, listeningListener?: Function): this; - listen(handle: any, backlog?: number, listeningListener?: Function): this; - listen(handle: any, listeningListener?: Function): this; - close(callback?: Function): this; - address(): AddressInfo | string; - getConnections(cb: (error: Error | null, count: number) => void): void; - ref(): this; - unref(): this; - maxConnections: number; - connections: number; - listening: boolean; - - /** - * events.EventEmitter - * 1. close - * 2. connection - * 3. error - * 4. listening - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "close", listener: () => void): this; - addListener(event: "connection", listener: (socket: Socket) => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: "listening", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "close"): boolean; - emit(event: "connection", socket: Socket): boolean; - emit(event: "error", err: Error): boolean; - emit(event: "listening"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "close", listener: () => void): this; - on(event: "connection", listener: (socket: Socket) => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: "listening", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "close", listener: () => void): this; - once(event: "connection", listener: (socket: Socket) => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: "listening", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "close", listener: () => void): this; - prependListener(event: "connection", listener: (socket: Socket) => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: "listening", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: "listening", listener: () => void): this; - } - - interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { - timeout?: number; - } - - interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { - timeout?: number; - } - - type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; - - function createServer(connectionListener?: (socket: Socket) => void): Server; - function createServer(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void): Server; - function connect(options: NetConnectOpts, connectionListener?: Function): Socket; - function connect(port: number, host?: string, connectionListener?: Function): Socket; - function connect(path: string, connectionListener?: Function): Socket; - function createConnection(options: NetConnectOpts, connectionListener?: Function): Socket; - function createConnection(port: number, host?: string, connectionListener?: Function): Socket; - function createConnection(path: string, connectionListener?: Function): Socket; - function isIP(input: string): number; - function isIPv4(input: string): boolean; - function isIPv6(input: string): boolean; -} - -declare module "dgram" { - import { AddressInfo } from "net"; - import * as dns from "dns"; - import * as events from "events"; - - interface RemoteInfo { - address: string; - family: string; - port: number; - } - - interface BindOptions { - port: number; - address?: string; - exclusive?: boolean; - } - - type SocketType = "udp4" | "udp6"; - - interface SocketOptions { - type: SocketType; - reuseAddr?: boolean; - recvBufferSize?: number; - sendBufferSize?: number; - lookup?: (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException, address: string, family: number) => void) => void; - } - - function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; - function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; - - class Socket extends events.EventEmitter { - send(msg: Buffer | string | Uint8Array | any[], port: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void; - send(msg: Buffer | string | Uint8Array, offset: number, length: number, port: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void; - bind(port?: number, address?: string, callback?: () => void): void; - bind(port?: number, callback?: () => void): void; - bind(callback?: () => void): void; - bind(options: BindOptions, callback?: Function): void; - close(callback?: () => void): void; - address(): AddressInfo | string; - setBroadcast(flag: boolean): void; - setTTL(ttl: number): void; - setMulticastTTL(ttl: number): void; - setMulticastInterface(multicastInterface: string): void; - setMulticastLoopback(flag: boolean): void; - addMembership(multicastAddress: string, multicastInterface?: string): void; - dropMembership(multicastAddress: string, multicastInterface?: string): void; - ref(): this; - unref(): this; - setRecvBufferSize(size: number): void; - setSendBufferSize(size: number): void; - getRecvBufferSize(): number; - getSendBufferSize(): number; - - /** - * events.EventEmitter - * 1. close - * 2. error - * 3. listening - * 4. message - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "close", listener: () => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: "listening", listener: () => void): this; - addListener(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "close"): boolean; - emit(event: "error", err: Error): boolean; - emit(event: "listening"): boolean; - emit(event: "message", msg: Buffer, rinfo: AddressInfo): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "close", listener: () => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: "listening", listener: () => void): this; - on(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "close", listener: () => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: "listening", listener: () => void): this; - once(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "close", listener: () => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: "listening", listener: () => void): this; - prependListener(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: "listening", listener: () => void): this; - prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; - } -} - -declare module "fs" { - import * as stream from "stream"; - import * as events from "events"; - import { URL } from "url"; - - /** - * Valid types for path values in "fs". - */ - type PathLike = string | Buffer | URL; - - type BinaryData = Buffer | DataView | NodeJS.TypedArray; - class Stats { - isFile(): boolean; - isDirectory(): boolean; - isBlockDevice(): boolean; - isCharacterDevice(): boolean; - isSymbolicLink(): boolean; - isFIFO(): boolean; - isSocket(): boolean; - dev: number; - ino: number; - mode: number; - nlink: number; - uid: number; - gid: number; - rdev: number; - size: number; - blksize: number; - blocks: number; - atimeMs: number; - mtimeMs: number; - ctimeMs: number; - birthtimeMs: number; - atime: Date; - mtime: Date; - ctime: Date; - birthtime: Date; - } - - class Dirent { - isFile(): boolean; - isDirectory(): boolean; - isBlockDevice(): boolean; - isCharacterDevice(): boolean; - isSymbolicLink(): boolean; - isFIFO(): boolean; - isSocket(): boolean; - name: string; - } - - interface FSWatcher extends events.EventEmitter { - close(): void; - - /** - * events.EventEmitter - * 1. change - * 2. error - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; - addListener(event: "error", listener: (error: Error) => void): this; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; - on(event: "error", listener: (error: Error) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; - once(event: "error", listener: (error: Error) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; - prependListener(event: "error", listener: (error: Error) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; - prependOnceListener(event: "error", listener: (error: Error) => void): this; - } - - class ReadStream extends stream.Readable { - close(): void; - bytesRead: number; - path: string | Buffer; - - /** - * events.EventEmitter - * 1. open - * 2. close - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "open", listener: (fd: number) => void): this; - addListener(event: "close", listener: () => void): this; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "open", listener: (fd: number) => void): this; - on(event: "close", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "open", listener: (fd: number) => void): this; - once(event: "close", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "open", listener: (fd: number) => void): this; - prependListener(event: "close", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "open", listener: (fd: number) => void): this; - prependOnceListener(event: "close", listener: () => void): this; - } - - class WriteStream extends stream.Writable { - close(): void; - bytesWritten: number; - path: string | Buffer; - - /** - * events.EventEmitter - * 1. open - * 2. close - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "open", listener: (fd: number) => void): this; - addListener(event: "close", listener: () => void): this; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "open", listener: (fd: number) => void): this; - on(event: "close", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "open", listener: (fd: number) => void): this; - once(event: "close", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "open", listener: (fd: number) => void): this; - prependListener(event: "close", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "open", listener: (fd: number) => void): this; - prependOnceListener(event: "close", listener: () => void): this; - } - - /** - * Asynchronous rename(2) - Change the name or location of a file or directory. - * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function rename(oldPath: PathLike, newPath: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace rename { - /** - * Asynchronous rename(2) - Change the name or location of a file or directory. - * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function __promisify__(oldPath: PathLike, newPath: PathLike): Promise; - } - - /** - * Synchronous rename(2) - Change the name or location of a file or directory. - * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function renameSync(oldPath: PathLike, newPath: PathLike): void; - - /** - * Asynchronous truncate(2) - Truncate a file to a specified length. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param len If not specified, defaults to `0`. - */ - function truncate(path: PathLike, len: number | undefined | null, callback: (err: NodeJS.ErrnoException) => void): void; - - /** - * Asynchronous truncate(2) - Truncate a file to a specified length. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function truncate(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace truncate { - /** - * Asynchronous truncate(2) - Truncate a file to a specified length. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param len If not specified, defaults to `0`. - */ - function __promisify__(path: PathLike, len?: number | null): Promise; - } - - /** - * Synchronous truncate(2) - Truncate a file to a specified length. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param len If not specified, defaults to `0`. - */ - function truncateSync(path: PathLike, len?: number | null): void; - - /** - * Asynchronous ftruncate(2) - Truncate a file to a specified length. - * @param fd A file descriptor. - * @param len If not specified, defaults to `0`. - */ - function ftruncate(fd: number, len: number | undefined | null, callback: (err: NodeJS.ErrnoException) => void): void; - - /** - * Asynchronous ftruncate(2) - Truncate a file to a specified length. - * @param fd A file descriptor. - */ - function ftruncate(fd: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace ftruncate { - /** - * Asynchronous ftruncate(2) - Truncate a file to a specified length. - * @param fd A file descriptor. - * @param len If not specified, defaults to `0`. - */ - function __promisify__(fd: number, len?: number | null): Promise; - } - - /** - * Synchronous ftruncate(2) - Truncate a file to a specified length. - * @param fd A file descriptor. - * @param len If not specified, defaults to `0`. - */ - function ftruncateSync(fd: number, len?: number | null): void; - - /** - * Asynchronous chown(2) - Change ownership of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function chown(path: PathLike, uid: number, gid: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace chown { - /** - * Asynchronous chown(2) - Change ownership of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike, uid: number, gid: number): Promise; - } - - /** - * Synchronous chown(2) - Change ownership of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function chownSync(path: PathLike, uid: number, gid: number): void; - - /** - * Asynchronous fchown(2) - Change ownership of a file. - * @param fd A file descriptor. - */ - function fchown(fd: number, uid: number, gid: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace fchown { - /** - * Asynchronous fchown(2) - Change ownership of a file. - * @param fd A file descriptor. - */ - function __promisify__(fd: number, uid: number, gid: number): Promise; - } - - /** - * Synchronous fchown(2) - Change ownership of a file. - * @param fd A file descriptor. - */ - function fchownSync(fd: number, uid: number, gid: number): void; - - /** - * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function lchown(path: PathLike, uid: number, gid: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace lchown { - /** - * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike, uid: number, gid: number): Promise; - } - - /** - * Synchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function lchownSync(path: PathLike, uid: number, gid: number): void; - - /** - * Asynchronous chmod(2) - Change permissions of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function chmod(path: PathLike, mode: string | number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace chmod { - /** - * Asynchronous chmod(2) - Change permissions of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function __promisify__(path: PathLike, mode: string | number): Promise; - } - - /** - * Synchronous chmod(2) - Change permissions of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function chmodSync(path: PathLike, mode: string | number): void; - - /** - * Asynchronous fchmod(2) - Change permissions of a file. - * @param fd A file descriptor. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function fchmod(fd: number, mode: string | number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace fchmod { - /** - * Asynchronous fchmod(2) - Change permissions of a file. - * @param fd A file descriptor. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function __promisify__(fd: number, mode: string | number): Promise; - } - - /** - * Synchronous fchmod(2) - Change permissions of a file. - * @param fd A file descriptor. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function fchmodSync(fd: number, mode: string | number): void; - - /** - * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function lchmod(path: PathLike, mode: string | number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace lchmod { - /** - * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function __promisify__(path: PathLike, mode: string | number): Promise; - } - - /** - * Synchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function lchmodSync(path: PathLike, mode: string | number): void; - - /** - * Asynchronous stat(2) - Get file status. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function stat(path: PathLike, callback: (err: NodeJS.ErrnoException, stats: Stats) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace stat { - /** - * Asynchronous stat(2) - Get file status. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike): Promise; - } - - /** - * Synchronous stat(2) - Get file status. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function statSync(path: PathLike): Stats; - - /** - * Asynchronous fstat(2) - Get file status. - * @param fd A file descriptor. - */ - function fstat(fd: number, callback: (err: NodeJS.ErrnoException, stats: Stats) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace fstat { - /** - * Asynchronous fstat(2) - Get file status. - * @param fd A file descriptor. - */ - function __promisify__(fd: number): Promise; - } - - /** - * Synchronous fstat(2) - Get file status. - * @param fd A file descriptor. - */ - function fstatSync(fd: number): Stats; - - /** - * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException, stats: Stats) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace lstat { - /** - * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike): Promise; - } - - /** - * Synchronous lstat(2) - Get file status. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function lstatSync(path: PathLike): Stats; - - /** - * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. - * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function link(existingPath: PathLike, newPath: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace link { - /** - * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. - * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function link(existingPath: PathLike, newPath: PathLike): Promise; - } - - /** - * Synchronous link(2) - Create a new link (also known as a hard link) to an existing file. - * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function linkSync(existingPath: PathLike, newPath: PathLike): void; - - /** - * Asynchronous symlink(2) - Create a new symbolic link to an existing file. - * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. - * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. - * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). - * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. - */ - function symlink(target: PathLike, path: PathLike, type: symlink.Type | undefined | null, callback: (err: NodeJS.ErrnoException) => void): void; - - /** - * Asynchronous symlink(2) - Create a new symbolic link to an existing file. - * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. - * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. - */ - function symlink(target: PathLike, path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace symlink { - /** - * Asynchronous symlink(2) - Create a new symbolic link to an existing file. - * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. - * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. - * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). - * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. - */ - function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise; - - type Type = "dir" | "file" | "junction"; - } - - /** - * Synchronous symlink(2) - Create a new symbolic link to an existing file. - * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. - * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. - * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). - * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. - */ - function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink(path: PathLike, options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException, linkString: string) => void): void; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException, linkString: Buffer) => void): void; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException, linkString: string | Buffer) => void): void; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function readlink(path: PathLike, callback: (err: NodeJS.ErrnoException, linkString: string) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace readlink { - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: { encoding?: string | null } | string | null): Promise; - } - - /** - * Synchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlinkSync(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string; - - /** - * Synchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlinkSync(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer; - - /** - * Synchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlinkSync(path: PathLike, options?: { encoding?: string | null } | string | null): string | Buffer; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath(path: PathLike, options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => void): void; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException, resolvedPath: Buffer) => void): void; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException, resolvedPath: string | Buffer) => void): void; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function realpath(path: PathLike, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace realpath { - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: { encoding?: string | null } | string | null): Promise; - - function native(path: PathLike, options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => void): void; - function native(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException, resolvedPath: Buffer) => void): void; - function native(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException, resolvedPath: string | Buffer) => void): void; - function native(path: PathLike, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => void): void; - } - - /** - * Synchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpathSync(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string; - - /** - * Synchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpathSync(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer; - - /** - * Synchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpathSync(path: PathLike, options?: { encoding?: string | null } | string | null): string | Buffer; - - namespace realpathSync { - function native(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string; - function native(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer; - function native(path: PathLike, options?: { encoding?: string | null } | string | null): string | Buffer; - } - - /** - * Asynchronous unlink(2) - delete a name and possibly the file it refers to. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function unlink(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace unlink { - /** - * Asynchronous unlink(2) - delete a name and possibly the file it refers to. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike): Promise; - } - - /** - * Synchronous unlink(2) - delete a name and possibly the file it refers to. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function unlinkSync(path: PathLike): void; - - /** - * Asynchronous rmdir(2) - delete a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function rmdir(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace rmdir { - /** - * Asynchronous rmdir(2) - delete a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike): Promise; - } - - /** - * Synchronous rmdir(2) - delete a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function rmdirSync(path: PathLike): void; - - export interface MakeDirectoryOptions { - /** - * Indicates whether parent folders should be created. - * @default false - */ - recursive?: boolean; - /** - * A file mode. If a string is passed, it is parsed as an octal integer. If not specified - * @default 0o777. - */ - mode?: number; - } - - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdir(path: PathLike, options: number | string | MakeDirectoryOptions | undefined | null, callback: (err: NodeJS.ErrnoException) => void): void; - - /** - * Asynchronous mkdir(2) - create a directory with a mode of `0o777`. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function mkdir(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace mkdir { - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function __promisify__(path: PathLike, options?: number | string | MakeDirectoryOptions | null): Promise; - } - - /** - * Synchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdirSync(path: PathLike, options?: number | string | MakeDirectoryOptions | null): void; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp(prefix: string, options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException, folder: string) => void): void; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp(prefix: string, options: "buffer" | { encoding: "buffer" }, callback: (err: NodeJS.ErrnoException, folder: Buffer) => void): void; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp(prefix: string, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException, folder: string | Buffer) => void): void; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - */ - function mkdtemp(prefix: string, callback: (err: NodeJS.ErrnoException, folder: string) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace mkdtemp { - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(prefix: string, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(prefix: string, options: { encoding: "buffer" } | "buffer"): Promise; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(prefix: string, options?: { encoding?: string | null } | string | null): Promise; - } - - /** - * Synchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtempSync(prefix: string, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string; - - /** - * Synchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtempSync(prefix: string, options: { encoding: "buffer" } | "buffer"): Buffer; - - /** - * Synchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtempSync(prefix: string, options?: { encoding?: string | null } | string | null): string | Buffer; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir( - path: PathLike, - options: { encoding: BufferEncoding | null; withFileTypes?: false } | BufferEncoding | undefined | null, - callback: (err: NodeJS.ErrnoException, files: string[]) => void, - ): void; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir(path: PathLike, options: { encoding: "buffer"; withFileTypes?: false } | "buffer", callback: (err: NodeJS.ErrnoException, files: Buffer[]) => void): void; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir( - path: PathLike, - options: { encoding?: string | null; withFileTypes?: false } | string | undefined | null, - callback: (err: NodeJS.ErrnoException, files: string[] | Buffer[]) => void, - ): void; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function readdir(path: PathLike, callback: (err: NodeJS.ErrnoException, files: string[]) => void): void; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. - */ - function readdir(path: PathLike, options: { withFileTypes: true }, callback: (err: NodeJS.ErrnoException, files: Dirent[]) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace readdir { - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: { encoding: BufferEncoding | null; withFileTypes?: false } | BufferEncoding | null): Promise; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options: "buffer" | { encoding: "buffer"; withFileTypes?: false }): Promise; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: { encoding?: string | null; withFileTypes?: false } | string | null): Promise; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options If called with `withFileTypes: true` the result data will be an array of Dirent - */ - function __promisify__(path: PathLike, options: { withFileTypes: true }): Promise; - } - - /** - * Synchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdirSync(path: PathLike, options?: { encoding: BufferEncoding | null; withFileTypes?: false } | BufferEncoding | null): string[]; - - /** - * Synchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdirSync(path: PathLike, options: { encoding: "buffer"; withFileTypes?: false } | "buffer"): Buffer[]; - - /** - * Synchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdirSync(path: PathLike, options?: { encoding?: string | null; withFileTypes?: false } | string | null): string[] | Buffer[]; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. - */ - function readdirSync(path: PathLike, options: { withFileTypes: true }): Dirent[]; - - /** - * Asynchronous close(2) - close a file descriptor. - * @param fd A file descriptor. - */ - function close(fd: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace close { - /** - * Asynchronous close(2) - close a file descriptor. - * @param fd A file descriptor. - */ - function __promisify__(fd: number): Promise; - } - - /** - * Synchronous close(2) - close a file descriptor. - * @param fd A file descriptor. - */ - function closeSync(fd: number): void; - - /** - * Asynchronous open(2) - open and possibly create a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. - */ - function open(path: PathLike, flags: string | number, mode: string | number | undefined | null, callback: (err: NodeJS.ErrnoException, fd: number) => void): void; - - /** - * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function open(path: PathLike, flags: string | number, callback: (err: NodeJS.ErrnoException, fd: number) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace open { - /** - * Asynchronous open(2) - open and possibly create a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. - */ - function __promisify__(path: PathLike, flags: string | number, mode?: string | number | null): Promise; - } - - /** - * Synchronous open(2) - open and possibly create a file, returning a file descriptor.. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. - */ - function openSync(path: PathLike, flags: string | number, mode?: string | number | null): number; - - /** - * Asynchronously change file timestamps of the file referenced by the supplied path. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function utimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace utimes { - /** - * Asynchronously change file timestamps of the file referenced by the supplied path. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function __promisify__(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; - } - - /** - * Synchronously change file timestamps of the file referenced by the supplied path. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function utimesSync(path: PathLike, atime: string | number | Date, mtime: string | number | Date): void; - - /** - * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function futimes(fd: number, atime: string | number | Date, mtime: string | number | Date, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace futimes { - /** - * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function __promisify__(fd: number, atime: string | number | Date, mtime: string | number | Date): Promise; - } - - /** - * Synchronously change file timestamps of the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function futimesSync(fd: number, atime: string | number | Date, mtime: string | number | Date): void; - - /** - * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. - * @param fd A file descriptor. - */ - function fsync(fd: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace fsync { - /** - * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. - * @param fd A file descriptor. - */ - function __promisify__(fd: number): Promise; - } - - /** - * Synchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. - * @param fd A file descriptor. - */ - function fsyncSync(fd: number): void; - - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function write( - fd: number, - buffer: TBuffer, - offset: number | undefined | null, - length: number | undefined | null, - position: number | undefined | null, - callback: (err: NodeJS.ErrnoException, written: number, buffer: TBuffer) => void, - ): void; - - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - */ - function write( - fd: number, - buffer: TBuffer, - offset: number | undefined | null, - length: number | undefined | null, - callback: (err: NodeJS.ErrnoException, written: number, buffer: TBuffer) => void, - ): void; - - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - */ - function write(fd: number, buffer: TBuffer, offset: number | undefined | null, callback: (err: NodeJS.ErrnoException, written: number, buffer: TBuffer) => void): void; - - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - */ - function write(fd: number, buffer: TBuffer, callback: (err: NodeJS.ErrnoException, written: number, buffer: TBuffer) => void): void; - - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. If something other than a string is supplied it will be coerced to a string. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - function write( - fd: number, - string: any, - position: number | undefined | null, - encoding: string | undefined | null, - callback: (err: NodeJS.ErrnoException, written: number, str: string) => void, - ): void; - - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. If something other than a string is supplied it will be coerced to a string. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function write(fd: number, string: any, position: number | undefined | null, callback: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; - - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. If something other than a string is supplied it will be coerced to a string. - */ - function write(fd: number, string: any, callback: (err: NodeJS.ErrnoException, written: number, str: string) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace write { - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function __promisify__( - fd: number, - buffer?: TBuffer, - offset?: number, - length?: number, - position?: number | null, - ): Promise<{ bytesWritten: number, buffer: TBuffer }>; - - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. If something other than a string is supplied it will be coerced to a string. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - function __promisify__(fd: number, string: any, position?: number | null, encoding?: string | null): Promise<{ bytesWritten: number, buffer: string }>; - } - - /** - * Synchronously writes `buffer` to the file referenced by the supplied file descriptor, returning the number of bytes written. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function writeSync(fd: number, buffer: BinaryData, offset?: number | null, length?: number | null, position?: number | null): number; - - /** - * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written. - * @param fd A file descriptor. - * @param string A string to write. If something other than a string is supplied it will be coerced to a string. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - function writeSync(fd: number, string: any, position?: number | null, encoding?: string | null): number; - - /** - * Asynchronously reads data from the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param buffer The buffer that the data will be written to. - * @param offset The offset in the buffer at which to start writing. - * @param length The number of bytes to read. - * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. - */ - function read( - fd: number, - buffer: TBuffer, - offset: number, - length: number, - position: number | null, - callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: TBuffer) => void, - ): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace read { - /** - * @param fd A file descriptor. - * @param buffer The buffer that the data will be written to. - * @param offset The offset in the buffer at which to start writing. - * @param length The number of bytes to read. - * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. - */ - function __promisify__(fd: number, buffer: TBuffer, offset: number, length: number, position: number | null): Promise<{ bytesRead: number, buffer: TBuffer }>; - } - - /** - * Synchronously reads data from the file referenced by the supplied file descriptor, returning the number of bytes read. - * @param fd A file descriptor. - * @param buffer The buffer that the data will be written to. - * @param offset The offset in the buffer at which to start writing. - * @param length The number of bytes to read. - * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. - */ - function readSync(fd: number, buffer: BinaryData, offset: number, length: number, position: number | null): number; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile(path: PathLike | number, options: { encoding?: null; flag?: string; } | undefined | null, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile(path: PathLike | number, options: { encoding: string; flag?: string; } | string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile( - path: PathLike | number, - options: { encoding?: string | null; flag?: string; } | string | undefined | null, - callback: (err: NodeJS.ErrnoException, data: string | Buffer) => void, - ): void; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - */ - function readFile(path: PathLike | number, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace readFile { - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function __promisify__(path: PathLike | number, options?: { encoding?: null; flag?: string; } | null): Promise; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function __promisify__(path: PathLike | number, options: { encoding: string; flag?: string; } | string): Promise; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function __promisify__(path: PathLike | number, options?: { encoding?: string | null; flag?: string; } | string | null): Promise; - } - - /** - * Synchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. If a flag is not provided, it defaults to `'r'`. - */ - function readFileSync(path: PathLike | number, options?: { encoding?: null; flag?: string; } | null): Buffer; - - /** - * Synchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFileSync(path: PathLike | number, options: { encoding: string; flag?: string; } | string): string; - - /** - * Synchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFileSync(path: PathLike | number, options?: { encoding?: string | null; flag?: string; } | string | null): string | Buffer; - - type WriteFileOptions = { encoding?: string | null; mode?: number | string; flag?: string; } | string | null; - - /** - * Asynchronously writes data to a file, replacing the file if it already exists. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'w'` is used. - */ - function writeFile(path: PathLike | number, data: any, options: WriteFileOptions, callback: (err: NodeJS.ErrnoException) => void): void; - - /** - * Asynchronously writes data to a file, replacing the file if it already exists. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - */ - function writeFile(path: PathLike | number, data: any, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace writeFile { - /** - * Asynchronously writes data to a file, replacing the file if it already exists. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'w'` is used. - */ - function __promisify__(path: PathLike | number, data: any, options?: WriteFileOptions): Promise; - } - - /** - * Synchronously writes data to a file, replacing the file if it already exists. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'w'` is used. - */ - function writeFileSync(path: PathLike | number, data: any, options?: WriteFileOptions): void; - - /** - * Asynchronously append data to a file, creating the file if it does not exist. - * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'a'` is used. - */ - function appendFile(file: PathLike | number, data: any, options: WriteFileOptions, callback: (err: NodeJS.ErrnoException) => void): void; - - /** - * Asynchronously append data to a file, creating the file if it does not exist. - * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - */ - function appendFile(file: PathLike | number, data: any, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace appendFile { - /** - * Asynchronously append data to a file, creating the file if it does not exist. - * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'a'` is used. - */ - function __promisify__(file: PathLike | number, data: any, options?: WriteFileOptions): Promise; - } - - /** - * Synchronously append data to a file, creating the file if it does not exist. - * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'a'` is used. - */ - function appendFileSync(file: PathLike | number, data: any, options?: WriteFileOptions): void; - - /** - * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. - */ - function watchFile(filename: PathLike, options: { persistent?: boolean; interval?: number; } | undefined, listener: (curr: Stats, prev: Stats) => void): void; - - /** - * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. - * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function watchFile(filename: PathLike, listener: (curr: Stats, prev: Stats) => void): void; - - /** - * Stop watching for changes on `filename`. - * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function unwatchFile(filename: PathLike, listener?: (curr: Stats, prev: Stats) => void): void; - - /** - * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. - * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `persistent` is not supplied, the default of `true` is used. - * If `recursive` is not supplied, the default of `false` is used. - */ - function watch( - filename: PathLike, - options: { encoding?: BufferEncoding | null, persistent?: boolean, recursive?: boolean } | BufferEncoding | undefined | null, - listener?: (event: string, filename: string) => void, - ): FSWatcher; - - /** - * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. - * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `persistent` is not supplied, the default of `true` is used. - * If `recursive` is not supplied, the default of `false` is used. - */ - function watch(filename: PathLike, options: { encoding: "buffer", persistent?: boolean, recursive?: boolean } | "buffer", listener?: (event: string, filename: Buffer) => void): FSWatcher; - - /** - * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. - * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `persistent` is not supplied, the default of `true` is used. - * If `recursive` is not supplied, the default of `false` is used. - */ - function watch( - filename: PathLike, - options: { encoding?: string | null, persistent?: boolean, recursive?: boolean } | string | null, - listener?: (event: string, filename: string | Buffer) => void, - ): FSWatcher; - - /** - * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. - * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function watch(filename: PathLike, listener?: (event: string, filename: string) => any): FSWatcher; - - /** - * Asynchronously tests whether or not the given path exists by checking with the file system. - * @deprecated - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function exists(path: PathLike, callback: (exists: boolean) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace exists { - /** - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function __promisify__(path: PathLike): Promise; - } - - /** - * Synchronously tests whether or not the given path exists by checking with the file system. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function existsSync(path: PathLike): boolean; - - namespace constants { - // File Access Constants - - /** Constant for fs.access(). File is visible to the calling process. */ - const F_OK: number; - - /** Constant for fs.access(). File can be read by the calling process. */ - const R_OK: number; - - /** Constant for fs.access(). File can be written by the calling process. */ - const W_OK: number; - - /** Constant for fs.access(). File can be executed by the calling process. */ - const X_OK: number; - - // File Copy Constants - - /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */ - const COPYFILE_EXCL: number; - - /** - * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink. - * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used. - */ - const COPYFILE_FICLONE: number; - - /** - * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink. - * If the underlying platform does not support copy-on-write, then the operation will fail with an error. - */ - const COPYFILE_FICLONE_FORCE: number; - - // File Open Constants - - /** Constant for fs.open(). Flag indicating to open a file for read-only access. */ - const O_RDONLY: number; - - /** Constant for fs.open(). Flag indicating to open a file for write-only access. */ - const O_WRONLY: number; - - /** Constant for fs.open(). Flag indicating to open a file for read-write access. */ - const O_RDWR: number; - - /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */ - const O_CREAT: number; - - /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */ - const O_EXCL: number; - - /** - * Constant for fs.open(). Flag indicating that if path identifies a terminal device, - * opening the path shall not cause that terminal to become the controlling terminal for the process - * (if the process does not already have one). - */ - const O_NOCTTY: number; - - /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */ - const O_TRUNC: number; - - /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */ - const O_APPEND: number; - - /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */ - const O_DIRECTORY: number; - - /** - * constant for fs.open(). - * Flag indicating reading accesses to the file system will no longer result in - * an update to the atime information associated with the file. - * This flag is available on Linux operating systems only. - */ - const O_NOATIME: number; - - /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */ - const O_NOFOLLOW: number; - - /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */ - const O_SYNC: number; - - /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */ - const O_DSYNC: number; - - /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */ - const O_SYMLINK: number; - - /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */ - const O_DIRECT: number; - - /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */ - const O_NONBLOCK: number; - - // File Type Constants - - /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */ - const S_IFMT: number; - - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */ - const S_IFREG: number; - - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */ - const S_IFDIR: number; - - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */ - const S_IFCHR: number; - - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */ - const S_IFBLK: number; - - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */ - const S_IFIFO: number; - - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */ - const S_IFLNK: number; - - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */ - const S_IFSOCK: number; - - // File Mode Constants - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */ - const S_IRWXU: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */ - const S_IRUSR: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */ - const S_IWUSR: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */ - const S_IXUSR: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */ - const S_IRWXG: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */ - const S_IRGRP: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */ - const S_IWGRP: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */ - const S_IXGRP: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */ - const S_IRWXO: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */ - const S_IROTH: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */ - const S_IWOTH: number; - - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */ - const S_IXOTH: number; - } - - /** - * Asynchronously tests a user's permissions for the file specified by path. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function access(path: PathLike, mode: number | undefined, callback: (err: NodeJS.ErrnoException) => void): void; - - /** - * Asynchronously tests a user's permissions for the file specified by path. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function access(path: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace access { - /** - * Asynchronously tests a user's permissions for the file specified by path. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function __promisify__(path: PathLike, mode?: number): Promise; - } - - /** - * Synchronously tests a user's permissions for the file specified by path. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function accessSync(path: PathLike, mode?: number): void; - - /** - * Returns a new `ReadStream` object. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function createReadStream(path: PathLike, options?: string | { - flags?: string; - encoding?: string; - fd?: number; - mode?: number; - autoClose?: boolean; - start?: number; - end?: number; - highWaterMark?: number; - }): ReadStream; - - /** - * Returns a new `WriteStream` object. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function createWriteStream(path: PathLike, options?: string | { - flags?: string; - encoding?: string; - fd?: number; - mode?: number; - autoClose?: boolean; - start?: number; - }): WriteStream; - - /** - * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. - * @param fd A file descriptor. - */ - function fdatasync(fd: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace fdatasync { - /** - * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. - * @param fd A file descriptor. - */ - function __promisify__(fd: number): Promise; - } - - /** - * Synchronous fdatasync(2) - synchronize a file's in-core state with storage device. - * @param fd A file descriptor. - */ - function fdatasyncSync(fd: number): void; - - /** - * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. - * No arguments other than a possible exception are given to the callback function. - * Node.js makes no guarantees about the atomicity of the copy operation. - * If an error occurs after the destination file has been opened for writing, Node.js will attempt - * to remove the destination. - * @param src A path to the source file. - * @param dest A path to the destination file. - */ - function copyFile(src: PathLike, dest: PathLike, callback: (err: NodeJS.ErrnoException) => void): void; - /** - * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. - * No arguments other than a possible exception are given to the callback function. - * Node.js makes no guarantees about the atomicity of the copy operation. - * If an error occurs after the destination file has been opened for writing, Node.js will attempt - * to remove the destination. - * @param src A path to the source file. - * @param dest A path to the destination file. - * @param flags An integer that specifies the behavior of the copy operation. The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists. - */ - function copyFile(src: PathLike, dest: PathLike, flags: number, callback: (err: NodeJS.ErrnoException) => void): void; - - // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. - namespace copyFile { - /** - * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. - * No arguments other than a possible exception are given to the callback function. - * Node.js makes no guarantees about the atomicity of the copy operation. - * If an error occurs after the destination file has been opened for writing, Node.js will attempt - * to remove the destination. - * @param src A path to the source file. - * @param dest A path to the destination file. - * @param flags An optional integer that specifies the behavior of the copy operation. - * The only supported flag is fs.constants.COPYFILE_EXCL, - * which causes the copy operation to fail if dest already exists. - */ - function __promisify__(src: PathLike, dst: PathLike, flags?: number): Promise; - } - - /** - * Synchronously copies src to dest. By default, dest is overwritten if it already exists. - * Node.js makes no guarantees about the atomicity of the copy operation. - * If an error occurs after the destination file has been opened for writing, Node.js will attempt - * to remove the destination. - * @param src A path to the source file. - * @param dest A path to the destination file. - * @param flags An optional integer that specifies the behavior of the copy operation. - * The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists. - */ - function copyFileSync(src: PathLike, dest: PathLike, flags?: number): void; - - namespace promises { - interface FileHandle { - /** - * Gets the file descriptor for this file handle. - */ - readonly fd: number; - - /** - * Asynchronously append data to a file, creating the file if it does not exist. The underlying file will _not_ be closed automatically. - * The `FileHandle` must have been opened for appending. - * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'a'` is used. - */ - appendFile(data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise; - - /** - * Asynchronous fchown(2) - Change ownership of a file. - */ - chown(uid: number, gid: number): Promise; - - /** - * Asynchronous fchmod(2) - Change permissions of a file. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - chmod(mode: string | number): Promise; - - /** - * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. - */ - datasync(): Promise; - - /** - * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. - */ - sync(): Promise; - - /** - * Asynchronously reads data from the file. - * The `FileHandle` must have been opened for reading. - * @param buffer The buffer that the data will be written to. - * @param offset The offset in the buffer at which to start writing. - * @param length The number of bytes to read. - * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. - */ - read(buffer: TBuffer, offset?: number | null, length?: number | null, position?: number | null): Promise<{ bytesRead: number, buffer: TBuffer }>; - - /** - * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. - * The `FileHandle` must have been opened for reading. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - readFile(options?: { encoding?: null, flag?: string | number } | null): Promise; - - /** - * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. - * The `FileHandle` must have been opened for reading. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - readFile(options: { encoding: BufferEncoding, flag?: string | number } | BufferEncoding): Promise; - - /** - * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. - * The `FileHandle` must have been opened for reading. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - readFile(options?: { encoding?: string | null, flag?: string | number } | string | null): Promise; - - /** - * Asynchronous fstat(2) - Get file status. - */ - stat(): Promise; - - /** - * Asynchronous ftruncate(2) - Truncate a file to a specified length. - * @param len If not specified, defaults to `0`. - */ - truncate(len?: number): Promise; - - /** - * Asynchronously change file timestamps of the file. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - utimes(atime: string | number | Date, mtime: string | number | Date): Promise; - - /** - * Asynchronously writes `buffer` to the file. - * The `FileHandle` must have been opened for writing. - * @param buffer The buffer that the data will be written to. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - write(buffer: TBuffer, offset?: number | null, length?: number | null, position?: number | null): Promise<{ bytesWritten: number, buffer: TBuffer }>; - - /** - * Asynchronously writes `string` to the file. - * The `FileHandle` must have been opened for writing. - * It is unsafe to call `write()` multiple times on the same file without waiting for the `Promise` - * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. - * @param string A string to write. If something other than a string is supplied it will be coerced to a string. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - write(data: any, position?: number | null, encoding?: string | null): Promise<{ bytesWritten: number, buffer: string }>; - - /** - * Asynchronously writes data to a file, replacing the file if it already exists. The underlying file will _not_ be closed automatically. - * The `FileHandle` must have been opened for writing. - * It is unsafe to call `writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected). - * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'w'` is used. - */ - writeFile(data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise; - - /** - * Asynchronous close(2) - close a `FileHandle`. - */ - close(): Promise; - } - - /** - * Asynchronously tests a user's permissions for the file specified by path. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function access(path: PathLike, mode?: number): Promise; - - /** - * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it already exists. - * Node.js makes no guarantees about the atomicity of the copy operation. - * If an error occurs after the destination file has been opened for writing, Node.js will attempt - * to remove the destination. - * @param src A path to the source file. - * @param dest A path to the destination file. - * @param flags An optional integer that specifies the behavior of the copy operation. The only - * supported flag is `fs.constants.COPYFILE_EXCL`, which causes the copy operation to fail if - * `dest` already exists. - */ - function copyFile(src: PathLike, dest: PathLike, flags?: number): Promise; - - /** - * Asynchronous open(2) - open and possibly create a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not - * supplied, defaults to `0o666`. - */ - function open(path: PathLike, flags: string | number, mode?: string | number): Promise; - - /** - * Asynchronously reads data from the file referenced by the supplied `FileHandle`. - * @param handle A `FileHandle`. - * @param buffer The buffer that the data will be written to. - * @param offset The offset in the buffer at which to start writing. - * @param length The number of bytes to read. - * @param position The offset from the beginning of the file from which data should be read. If - * `null`, data will be read from the current position. - */ - function read( - handle: FileHandle, - buffer: TBuffer, - offset?: number | null, - length?: number | null, - position?: number | null, - ): Promise<{ bytesRead: number, buffer: TBuffer }>; - - /** - * Asynchronously writes `buffer` to the file referenced by the supplied `FileHandle`. - * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise` - * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. - * @param handle A `FileHandle`. - * @param buffer The buffer that the data will be written to. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function write( - handle: FileHandle, - buffer: TBuffer, - offset?: number | null, - length?: number | null, position?: number | null): Promise<{ bytesWritten: number, buffer: TBuffer }>; - - /** - * Asynchronously writes `string` to the file referenced by the supplied `FileHandle`. - * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise` - * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. - * @param handle A `FileHandle`. - * @param string A string to write. If something other than a string is supplied it will be coerced to a string. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - function write(handle: FileHandle, string: any, position?: number | null, encoding?: string | null): Promise<{ bytesWritten: number, buffer: string }>; - - /** - * Asynchronous rename(2) - Change the name or location of a file or directory. - * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function rename(oldPath: PathLike, newPath: PathLike): Promise; - - /** - * Asynchronous truncate(2) - Truncate a file to a specified length. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param len If not specified, defaults to `0`. - */ - function truncate(path: PathLike, len?: number): Promise; - - /** - * Asynchronous ftruncate(2) - Truncate a file to a specified length. - * @param handle A `FileHandle`. - * @param len If not specified, defaults to `0`. - */ - function ftruncate(handle: FileHandle, len?: number): Promise; - - /** - * Asynchronous rmdir(2) - delete a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function rmdir(path: PathLike): Promise; - - /** - * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. - * @param handle A `FileHandle`. - */ - function fdatasync(handle: FileHandle): Promise; - - /** - * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. - * @param handle A `FileHandle`. - */ - function fsync(handle: FileHandle): Promise; - - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdir(path: PathLike, options?: number | string | MakeDirectoryOptions | null): Promise; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise; - - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir(path: PathLike, options?: { encoding?: string | null } | string | null): Promise; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise; - - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink(path: PathLike, options?: { encoding?: string | null } | string | null): Promise; - - /** - * Asynchronous symlink(2) - Create a new symbolic link to an existing file. - * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. - * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. - * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). - * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. - */ - function symlink(target: PathLike, path: PathLike, type?: string | null): Promise; - - /** - * Asynchronous fstat(2) - Get file status. - * @param handle A `FileHandle`. - */ - function fstat(handle: FileHandle): Promise; - - /** - * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function lstat(path: PathLike): Promise; - - /** - * Asynchronous stat(2) - Get file status. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function stat(path: PathLike): Promise; - - /** - * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. - * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function link(existingPath: PathLike, newPath: PathLike): Promise; - - /** - * Asynchronous unlink(2) - delete a name and possibly the file it refers to. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function unlink(path: PathLike): Promise; - - /** - * Asynchronous fchmod(2) - Change permissions of a file. - * @param handle A `FileHandle`. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function fchmod(handle: FileHandle, mode: string | number): Promise; - - /** - * Asynchronous chmod(2) - Change permissions of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function chmod(path: PathLike, mode: string | number): Promise; - - /** - * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function lchmod(path: PathLike, mode: string | number): Promise; - - /** - * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function lchown(path: PathLike, uid: number, gid: number): Promise; - - /** - * Asynchronous fchown(2) - Change ownership of a file. - * @param handle A `FileHandle`. - */ - function fchown(handle: FileHandle, uid: number, gid: number): Promise; - - /** - * Asynchronous chown(2) - Change ownership of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function chown(path: PathLike, uid: number, gid: number): Promise; - - /** - * Asynchronously change file timestamps of the file referenced by the supplied path. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function utimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; - - /** - * Asynchronously change file timestamps of the file referenced by the supplied `FileHandle`. - * @param handle A `FileHandle`. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function futimes(handle: FileHandle, atime: string | number | Date, mtime: string | number | Date): Promise; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise; - - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath(path: PathLike, options?: { encoding?: string | null } | string | null): Promise; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp(prefix: string, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp(prefix: string, options: { encoding: "buffer" } | "buffer"): Promise; - - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp(prefix: string, options?: { encoding?: string | null } | string | null): Promise; - - /** - * Asynchronously writes data to a file, replacing the file if it already exists. - * It is unsafe to call `fsPromises.writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected). - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'w'` is used. - */ - function writeFile(path: PathLike | FileHandle, data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise; - - /** - * Asynchronously append data to a file, creating the file if it does not exist. - * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'a'` is used. - */ - function appendFile(path: PathLike | FileHandle, data: any, options?: { encoding?: string | null, mode?: string | number, flag?: string | number } | string | null): Promise; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile(path: PathLike | FileHandle, options?: { encoding?: null, flag?: string | number } | null): Promise; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile(path: PathLike | FileHandle, options: { encoding: BufferEncoding, flag?: string | number } | BufferEncoding): Promise; - - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile(path: PathLike | FileHandle, options?: { encoding?: string | null, flag?: string | number } | string | null): Promise; - } -} - -declare module "path" { - /** - * A parsed path object generated by path.parse() or consumed by path.format(). - */ - interface ParsedPath { - /** - * The root of the path such as '/' or 'c:\' - */ - root: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base: string; - /** - * The file extension (if any) such as '.html' - */ - ext: string; - /** - * The file name without extension (if any) such as 'index' - */ - name: string; - } - interface FormatInputPathObject { - /** - * The root of the path such as '/' or 'c:\' - */ - root?: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir?: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base?: string; - /** - * The file extension (if any) such as '.html' - */ - ext?: string; - /** - * The file name without extension (if any) such as 'index' - */ - name?: string; - } - - /** - * Normalize a string path, reducing '..' and '.' parts. - * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. - * - * @param p string path to normalize. - */ - function normalize(p: string): string; - /** - * Join all arguments together and normalize the resulting path. - * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. - * - * @param paths paths to join. - */ - function join(...paths: string[]): string; - /** - * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. - * - * Starting from leftmost {from} parameter, resolves {to} to an absolute path. - * - * If {to} isn't already absolute, {from} arguments are prepended in right to left order, - * until an absolute path is found. If after using all {from} paths still no absolute path is found, - * the current working directory is used as well. The resulting path is normalized, - * and trailing slashes are removed unless the path gets resolved to the root directory. - * - * @param pathSegments string paths to join. Non-string arguments are ignored. - */ - function resolve(...pathSegments: string[]): string; - /** - * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. - * - * @param path path to test. - */ - function isAbsolute(path: string): boolean; - /** - * Solve the relative path from {from} to {to}. - * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. - */ - function relative(from: string, to: string): string; - /** - * Return the directory name of a path. Similar to the Unix dirname command. - * - * @param p the path to evaluate. - */ - function dirname(p: string): string; - /** - * Return the last portion of a path. Similar to the Unix basename command. - * Often used to extract the file name from a fully qualified path. - * - * @param p the path to evaluate. - * @param ext optionally, an extension to remove from the result. - */ - function basename(p: string, ext?: string): string; - /** - * Return the extension of the path, from the last '.' to end of string in the last portion of the path. - * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string - * - * @param p the path to evaluate. - */ - function extname(p: string): string; - /** - * The platform-specific file separator. '\\' or '/'. - */ - const sep: '\\' | '/'; - /** - * The platform-specific file delimiter. ';' or ':'. - */ - const delimiter: ';' | ':'; - /** - * Returns an object from a path string - the opposite of format(). - * - * @param pathString path to evaluate. - */ - function parse(pathString: string): ParsedPath; - /** - * Returns a path string from an object - the opposite of parse(). - * - * @param pathString path to evaluate. - */ - function format(pathObject: FormatInputPathObject): string; - - namespace posix { - function normalize(p: string): string; - function join(...paths: any[]): string; - function resolve(...pathSegments: any[]): string; - function isAbsolute(p: string): boolean; - function relative(from: string, to: string): string; - function dirname(p: string): string; - function basename(p: string, ext?: string): string; - function extname(p: string): string; - const sep: string; - const delimiter: string; - function parse(p: string): ParsedPath; - function format(pP: FormatInputPathObject): string; - } - - namespace win32 { - function normalize(p: string): string; - function join(...paths: any[]): string; - function resolve(...pathSegments: any[]): string; - function isAbsolute(p: string): boolean; - function relative(from: string, to: string): string; - function dirname(p: string): string; - function basename(p: string, ext?: string): string; - function extname(p: string): string; - const sep: string; - const delimiter: string; - function parse(p: string): ParsedPath; - function format(pP: FormatInputPathObject): string; - } -} - -declare module "string_decoder" { - interface NodeStringDecoder { - write(buffer: Buffer): string; - end(buffer?: Buffer): string; - } - const StringDecoder: { - new(encoding?: string): NodeStringDecoder; - }; -} - -declare module "tls" { - import * as crypto from "crypto"; - import * as dns from "dns"; - import * as net from "net"; - import * as stream from "stream"; - - const CLIENT_RENEG_LIMIT: number; - const CLIENT_RENEG_WINDOW: number; - - interface Certificate { - /** - * Country code. - */ - C: string; - /** - * Street. - */ - ST: string; - /** - * Locality. - */ - L: string; - /** - * Organization. - */ - O: string; - /** - * Organizational unit. - */ - OU: string; - /** - * Common name. - */ - CN: string; - } - - interface PeerCertificate { - subject: Certificate; - issuer: Certificate; - subjectaltname: string; - infoAccess: { [index: string]: string[] | undefined }; - modulus: string; - exponent: string; - valid_from: string; - valid_to: string; - fingerprint: string; - ext_key_usage: string[]; - serialNumber: string; - raw: Buffer; - } - - interface DetailedPeerCertificate extends PeerCertificate { - issuerCertificate: DetailedPeerCertificate; - } - - interface CipherNameAndProtocol { - /** - * The cipher name. - */ - name: string; - /** - * SSL/TLS protocol version. - */ - version: string; - } - - class TLSSocket extends net.Socket { - /** - * Construct a new tls.TLSSocket object from an existing TCP socket. - */ - constructor(socket: net.Socket, options?: { - /** - * An optional TLS context object from tls.createSecureContext() - */ - secureContext?: SecureContext, - /** - * If true the TLS socket will be instantiated in server-mode. - * Defaults to false. - */ - isServer?: boolean, - /** - * An optional net.Server instance. - */ - server?: net.Server, - /** - * If true the server will request a certificate from clients that - * connect and attempt to verify that certificate. Defaults to - * false. - */ - requestCert?: boolean, - /** - * If true the server will reject any connection which is not - * authorized with the list of supplied CAs. This option only has an - * effect if requestCert is true. Defaults to false. - */ - rejectUnauthorized?: boolean, - /** - * An array of strings or a Buffer naming possible NPN protocols. - * (Protocols should be ordered by their priority.) - */ - NPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array, - /** - * An array of strings or a Buffer naming possible ALPN protocols. - * (Protocols should be ordered by their priority.) When the server - * receives both NPN and ALPN extensions from the client, ALPN takes - * precedence over NPN and the server does not send an NPN extension - * to the client. - */ - ALPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array, - /** - * SNICallback(servername, cb) A function that will be - * called if the client supports SNI TLS extension. Two arguments - * will be passed when called: servername and cb. SNICallback should - * invoke cb(null, ctx), where ctx is a SecureContext instance. - * (tls.createSecureContext(...) can be used to get a proper - * SecureContext.) If SNICallback wasn't provided the default callback - * with high-level API will be used (see below). - */ - SNICallback?: (servername: string, cb: (err: Error | null, ctx: SecureContext) => void) => void, - /** - * An optional Buffer instance containing a TLS session. - */ - session?: Buffer, - /** - * If true, specifies that the OCSP status request extension will be - * added to the client hello and an 'OCSPResponse' event will be - * emitted on the socket before establishing a secure communication - */ - requestOCSP?: boolean - }); - - /** - * A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false. - */ - authorized: boolean; - /** - * The reason why the peer's certificate has not been verified. - * This property becomes available only when tlsSocket.authorized === false. - */ - authorizationError: Error; - /** - * Static boolean value, always true. - * May be used to distinguish TLS sockets from regular ones. - */ - encrypted: boolean; - /** - * Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection. - * @returns Returns an object representing the cipher name - * and the SSL/TLS protocol version of the current connection. - */ - getCipher(): CipherNameAndProtocol; - /** - * Returns an object representing the peer's certificate. - * The returned object has some properties corresponding to the field of the certificate. - * If detailed argument is true the full chain with issuer property will be returned, - * if false only the top certificate without issuer property. - * If the peer does not provide a certificate, it returns null or an empty object. - * @param detailed - If true; the full chain with issuer property will be returned. - * @returns An object representing the peer's certificate. - */ - getPeerCertificate(detailed: true): DetailedPeerCertificate; - getPeerCertificate(detailed?: false): PeerCertificate; - getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; - /** - * Returns a string containing the negotiated SSL/TLS protocol version of the current connection. - * The value `'unknown'` will be returned for connected sockets that have not completed the handshaking process. - * The value `null` will be returned for server sockets or disconnected client sockets. - * See https://www.openssl.org/docs/man1.0.2/ssl/SSL_get_version.html for more information. - * @returns negotiated SSL/TLS protocol version of the current connection - */ - getProtocol(): string | null; - /** - * Could be used to speed up handshake establishment when reconnecting to the server. - * @returns ASN.1 encoded TLS session or undefined if none was negotiated. - */ - getSession(): any; - /** - * NOTE: Works only with client TLS sockets. - * Useful only for debugging, for session reuse provide session option to tls.connect(). - * @returns TLS session ticket or undefined if none was negotiated. - */ - getTLSTicket(): any; - /** - * Initiate TLS renegotiation process. - * - * NOTE: Can be used to request peer's certificate after the secure connection has been established. - * ANOTHER NOTE: When running as the server, socket will be destroyed with an error after handshakeTimeout timeout. - * @param options - The options may contain the following fields: rejectUnauthorized, - * requestCert (See tls.createServer() for details). - * @param callback - callback(err) will be executed with null as err, once the renegotiation - * is successfully completed. - */ - renegotiate(options: { rejectUnauthorized?: boolean, requestCert?: boolean }, callback: (err: Error | null) => void): any; - /** - * Set maximum TLS fragment size (default and maximum value is: 16384, minimum is: 512). - * Smaller fragment size decreases buffering latency on the client: large fragments are buffered by - * the TLS layer until the entire fragment is received and its integrity is verified; - * large fragments can span multiple roundtrips, and their processing can be delayed due to packet - * loss or reordering. However, smaller fragments add extra TLS framing bytes and CPU overhead, - * which may decrease overall server throughput. - * @param size - TLS fragment size (default and maximum value is: 16384, minimum is: 512). - * @returns Returns true on success, false otherwise. - */ - setMaxSendFragment(size: number): boolean; - - /** - * events.EventEmitter - * 1. OCSPResponse - * 2. secureConnect - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; - addListener(event: "secureConnect", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "OCSPResponse", response: Buffer): boolean; - emit(event: "secureConnect"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "OCSPResponse", listener: (response: Buffer) => void): this; - on(event: "secureConnect", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "OCSPResponse", listener: (response: Buffer) => void): this; - once(event: "secureConnect", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; - prependListener(event: "secureConnect", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; - prependOnceListener(event: "secureConnect", listener: () => void): this; - } - - interface TlsOptions extends SecureContextOptions { - handshakeTimeout?: number; - requestCert?: boolean; - rejectUnauthorized?: boolean; - NPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array; - ALPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array; - SNICallback?: (servername: string, cb: (err: Error | null, ctx: SecureContext) => void) => void; - sessionTimeout?: number; - ticketKeys?: Buffer; - } - - interface ConnectionOptions extends SecureContextOptions { - host?: string; - port?: number; - path?: string; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. - socket?: net.Socket; // Establish secure connection on a given socket rather than creating a new socket - rejectUnauthorized?: boolean; // Defaults to true - NPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array; - ALPNProtocols?: string[] | Buffer[] | Uint8Array[] | Buffer | Uint8Array; - checkServerIdentity?: typeof checkServerIdentity; - servername?: string; // SNI TLS Extension - session?: Buffer; - minDHSize?: number; - secureContext?: SecureContext; // If not provided, the entire ConnectionOptions object will be passed to tls.createSecureContext() - lookup?: net.LookupFunction; - } - - class Server extends net.Server { - addContext(hostName: string, credentials: { - key: string; - cert: string; - ca: string; - }): void; - - /** - * events.EventEmitter - * 1. tlsClientError - * 2. newSession - * 3. OCSPRequest - * 4. resumeSession - * 5. secureConnection - */ - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; - addListener(event: "newSession", listener: (sessionId: any, sessionData: any, callback: (err: Error, resp: Buffer) => void) => void): this; - addListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: Function) => void): this; - addListener(event: "resumeSession", listener: (sessionId: any, callback: (err: Error, sessionData: any) => void) => void): this; - addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean; - emit(event: "newSession", sessionId: any, sessionData: any, callback: (err: Error, resp: Buffer) => void): boolean; - emit(event: "OCSPRequest", certificate: Buffer, issuer: Buffer, callback: Function): boolean; - emit(event: "resumeSession", sessionId: any, callback: (err: Error, sessionData: any) => void): boolean; - emit(event: "secureConnection", tlsSocket: TLSSocket): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; - on(event: "newSession", listener: (sessionId: any, sessionData: any, callback: (err: Error, resp: Buffer) => void) => void): this; - on(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: Function) => void): this; - on(event: "resumeSession", listener: (sessionId: any, callback: (err: Error, sessionData: any) => void) => void): this; - on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; - once(event: "newSession", listener: (sessionId: any, sessionData: any, callback: (err: Error, resp: Buffer) => void) => void): this; - once(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: Function) => void): this; - once(event: "resumeSession", listener: (sessionId: any, callback: (err: Error, sessionData: any) => void) => void): this; - once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; - prependListener(event: "newSession", listener: (sessionId: any, sessionData: any, callback: (err: Error, resp: Buffer) => void) => void): this; - prependListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: Function) => void): this; - prependListener(event: "resumeSession", listener: (sessionId: any, callback: (err: Error, sessionData: any) => void) => void): this; - prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; - prependOnceListener(event: "newSession", listener: (sessionId: any, sessionData: any, callback: (err: Error, resp: Buffer) => void) => void): this; - prependOnceListener(event: "OCSPRequest", listener: (certificate: Buffer, issuer: Buffer, callback: Function) => void): this; - prependOnceListener(event: "resumeSession", listener: (sessionId: any, callback: (err: Error, sessionData: any) => void) => void): this; - prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; - } - - interface SecurePair { - encrypted: any; - cleartext: any; - } - - interface SecureContextOptions { - pfx?: string | Buffer | Array; - key?: string | Buffer | Array; - passphrase?: string; - cert?: string | Buffer | Array; - ca?: string | Buffer | Array; - ciphers?: string; - honorCipherOrder?: boolean; - ecdhCurve?: string; - clientCertEngine?: string; - crl?: string | Buffer | Array; - dhparam?: string | Buffer; - secureOptions?: number; // Value is a numeric bitmask of the `SSL_OP_*` options - secureProtocol?: string; // SSL Method, e.g. SSLv23_method - sessionIdContext?: string; - } - - interface SecureContext { - context: any; - } - - /* - * Verifies the certificate `cert` is issued to host `host`. - * @host The hostname to verify the certificate against - * @cert PeerCertificate representing the peer's certificate - * - * Returns Error object, populating it with the reason, host and cert on failure. On success, returns undefined. - */ - function checkServerIdentity(host: string, cert: PeerCertificate): Error | undefined; - function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; - function connect(options: ConnectionOptions, secureConnectionListener?: () => void): TLSSocket; - function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; - function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; - function createSecurePair(credentials?: crypto.Credentials, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair; - function createSecureContext(details: SecureContextOptions): SecureContext; - function getCiphers(): string[]; - - const DEFAULT_ECDH_CURVE: string; -} - -declare module "crypto" { - import * as stream from "stream"; - - interface Certificate { - exportChallenge(spkac: string | Buffer | NodeJS.TypedArray | DataView): Buffer; - exportPublicKey(spkac: string | Buffer | NodeJS.TypedArray | DataView): Buffer; - verifySpkac(spkac: Buffer | NodeJS.TypedArray | DataView): boolean; - } - const Certificate: { - new(): Certificate; - (): Certificate; - }; - - /** @deprecated since v10.0.0 */ - const fips: boolean; - - interface CredentialDetails { - pfx: string; - key: string; - passphrase: string; - cert: string; - ca: string | string[]; - crl: string | string[]; - ciphers: string; - } - interface Credentials { context?: any; } - function createCredentials(details: CredentialDetails): Credentials; - function createHash(algorithm: string, options?: stream.TransformOptions): Hash; - function createHmac(algorithm: string, key: string | Buffer | NodeJS.TypedArray | DataView, options?: stream.TransformOptions): Hmac; - - type Utf8AsciiLatin1Encoding = "utf8" | "ascii" | "latin1"; - type HexBase64Latin1Encoding = "latin1" | "hex" | "base64"; - type Utf8AsciiBinaryEncoding = "utf8" | "ascii" | "binary"; - type HexBase64BinaryEncoding = "binary" | "base64" | "hex"; - type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; - - interface Hash extends NodeJS.ReadWriteStream { - update(data: string | Buffer | NodeJS.TypedArray | DataView): Hash; - update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hash; - digest(): Buffer; - digest(encoding: HexBase64Latin1Encoding): string; - } - interface Hmac extends NodeJS.ReadWriteStream { - update(data: string | Buffer | NodeJS.TypedArray | DataView): Hmac; - update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hmac; - digest(): Buffer; - digest(encoding: HexBase64Latin1Encoding): string; - } - type CipherCCMTypes = 'aes-128-ccm' | 'aes-192-ccm' | 'aes-256-ccm'; - type CipherGCMTypes = 'aes-128-gcm' | 'aes-192-gcm' | 'aes-256-gcm'; - interface CipherCCMOptions extends stream.TransformOptions { - authTagLength: number; - } - interface CipherGCMOptions extends stream.TransformOptions { - authTagLength?: number; - } - /** @deprecated since v10.0.0 use createCipheriv() */ - function createCipher(algorithm: CipherCCMTypes, password: string | Buffer | NodeJS.TypedArray | DataView, options: CipherCCMOptions): CipherCCM; - /** @deprecated since v10.0.0 use createCipheriv() */ - function createCipher(algorithm: CipherGCMTypes, password: string | Buffer | NodeJS.TypedArray | DataView, options?: CipherGCMOptions): CipherGCM; - /** @deprecated since v10.0.0 use createCipheriv() */ - function createCipher(algorithm: string, password: string | Buffer | NodeJS.TypedArray | DataView, options?: stream.TransformOptions): Cipher; - - function createCipheriv(algorithm: CipherCCMTypes, key: string | Buffer | NodeJS.TypedArray | DataView, iv: string | Buffer | NodeJS.TypedArray | DataView, options: CipherCCMOptions): CipherCCM; - function createCipheriv(algorithm: CipherGCMTypes, key: string | Buffer | NodeJS.TypedArray | DataView, iv: string | Buffer | NodeJS.TypedArray | DataView, options?: CipherGCMOptions): CipherGCM; - function createCipheriv(algorithm: string, key: string | Buffer | NodeJS.TypedArray | DataView, iv: string | Buffer | NodeJS.TypedArray | DataView, options?: stream.TransformOptions): Cipher; - - interface Cipher extends NodeJS.ReadWriteStream { - update(data: string | Buffer | NodeJS.TypedArray | DataView): Buffer; - update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer; - update(data: Buffer | NodeJS.TypedArray | DataView, output_encoding: HexBase64BinaryEncoding): string; - update(data: Buffer | NodeJS.TypedArray | DataView, input_encoding: any, output_encoding: HexBase64BinaryEncoding): string; - // second arg ignored - update(data: string, input_encoding: Utf8AsciiBinaryEncoding, output_encoding: HexBase64BinaryEncoding): string; - final(): Buffer; - final(output_encoding: string): string; - setAutoPadding(auto_padding?: boolean): this; - // getAuthTag(): Buffer; - // setAAD(buffer: Buffer): this; // docs only say buffer - } - interface CipherCCM extends Cipher { - setAAD(buffer: Buffer, options: { plaintextLength: number }): this; - getAuthTag(): Buffer; - } - interface CipherGCM extends Cipher { - setAAD(buffer: Buffer, options?: { plaintextLength: number }): this; - getAuthTag(): Buffer; - } - /** @deprecated since v10.0.0 use createCipheriv() */ - function createDecipher(algorithm: CipherCCMTypes, password: string | Buffer | NodeJS.TypedArray | DataView, options: CipherCCMOptions): DecipherCCM; - /** @deprecated since v10.0.0 use createCipheriv() */ - function createDecipher(algorithm: CipherGCMTypes, password: string | Buffer | NodeJS.TypedArray | DataView, options?: CipherGCMOptions): DecipherGCM; - /** @deprecated since v10.0.0 use createCipheriv() */ - function createDecipher(algorithm: string, password: string | Buffer | NodeJS.TypedArray | DataView, options?: stream.TransformOptions): Decipher; - - function createDecipheriv( - algorithm: CipherCCMTypes, - key: string | Buffer | NodeJS.TypedArray | DataView, - iv: string | Buffer | NodeJS.TypedArray | DataView, - options: CipherCCMOptions, - ): DecipherCCM; - function createDecipheriv( - algorithm: CipherGCMTypes, - key: string | Buffer | NodeJS.TypedArray | DataView, - iv: string | Buffer | NodeJS.TypedArray | DataView, - options?: CipherGCMOptions, - ): DecipherGCM; - function createDecipheriv(algorithm: string, key: string | Buffer | NodeJS.TypedArray | DataView, iv: string | Buffer | NodeJS.TypedArray | DataView, options?: stream.TransformOptions): Decipher; - - interface Decipher extends NodeJS.ReadWriteStream { - update(data: Buffer | NodeJS.TypedArray | DataView): Buffer; - update(data: string, input_encoding: HexBase64BinaryEncoding): Buffer; - update(data: Buffer | NodeJS.TypedArray | DataView, input_encoding: any, output_encoding: Utf8AsciiBinaryEncoding): string; - // second arg is ignored - update(data: string, input_encoding: HexBase64BinaryEncoding, output_encoding: Utf8AsciiBinaryEncoding): string; - final(): Buffer; - final(output_encoding: string): string; - setAutoPadding(auto_padding?: boolean): this; - // setAuthTag(tag: Buffer | NodeJS.TypedArray | DataView): this; - // setAAD(buffer: Buffer | NodeJS.TypedArray | DataView): this; - } - interface DecipherCCM extends Decipher { - setAuthTag(buffer: Buffer | NodeJS.TypedArray | DataView): this; - setAAD(buffer: Buffer | NodeJS.TypedArray | DataView, options: { plaintextLength: number }): this; - } - interface DecipherGCM extends Decipher { - setAuthTag(buffer: Buffer | NodeJS.TypedArray | DataView): this; - setAAD(buffer: Buffer | NodeJS.TypedArray | DataView, options?: { plaintextLength: number }): this; - } - - function createSign(algorithm: string, options?: stream.WritableOptions): Signer; - interface Signer extends NodeJS.WritableStream { - update(data: string | Buffer | NodeJS.TypedArray | DataView): Signer; - update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Signer; - sign(private_key: string | { key: string; passphrase: string, padding?: number, saltLength?: number }): Buffer; - sign(private_key: string | { key: string; passphrase: string, padding?: number, saltLength?: number }, output_format: HexBase64Latin1Encoding): string; - } - function createVerify(algorith: string, options?: stream.WritableOptions): Verify; - interface Verify extends NodeJS.WritableStream { - update(data: string | Buffer | NodeJS.TypedArray | DataView): Verify; - update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Verify; - verify(object: string | Object, signature: Buffer | NodeJS.TypedArray | DataView): boolean; - verify(object: string | Object, signature: string, signature_format: HexBase64Latin1Encoding): boolean; - // https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format - // The signature field accepts a TypedArray type, but it is only available starting ES2017 - } - function createDiffieHellman(prime_length: number, generator?: number | Buffer | NodeJS.TypedArray | DataView): DiffieHellman; - function createDiffieHellman(prime: Buffer | NodeJS.TypedArray | DataView): DiffieHellman; - function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding): DiffieHellman; - function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: number | Buffer | NodeJS.TypedArray | DataView): DiffieHellman; - function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: string, generator_encoding: HexBase64Latin1Encoding): DiffieHellman; - interface DiffieHellman { - generateKeys(): Buffer; - generateKeys(encoding: HexBase64Latin1Encoding): string; - computeSecret(other_public_key: Buffer | NodeJS.TypedArray | DataView): Buffer; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer; - computeSecret(other_public_key: Buffer | NodeJS.TypedArray | DataView, output_encoding: HexBase64Latin1Encoding): string; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string; - getPrime(): Buffer; - getPrime(encoding: HexBase64Latin1Encoding): string; - getGenerator(): Buffer; - getGenerator(encoding: HexBase64Latin1Encoding): string; - getPublicKey(): Buffer; - getPublicKey(encoding: HexBase64Latin1Encoding): string; - getPrivateKey(): Buffer; - getPrivateKey(encoding: HexBase64Latin1Encoding): string; - setPublicKey(public_key: Buffer | NodeJS.TypedArray | DataView): void; - setPublicKey(public_key: string, encoding: string): void; - setPrivateKey(private_key: Buffer | NodeJS.TypedArray | DataView): void; - setPrivateKey(private_key: string, encoding: string): void; - verifyError: number; - } - function getDiffieHellman(group_name: string): DiffieHellman; - function pbkdf2( - password: string | Buffer | NodeJS.TypedArray | DataView, - salt: string | Buffer | NodeJS.TypedArray | DataView, - iterations: number, - keylen: number, - digest: string, - callback: (err: Error | null, derivedKey: Buffer) => any, - ): void; - function pbkdf2Sync(password: string | Buffer | NodeJS.TypedArray | DataView, salt: string | Buffer | NodeJS.TypedArray | DataView, iterations: number, keylen: number, digest: string): Buffer; - - function randomBytes(size: number): Buffer; - function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; - function pseudoRandomBytes(size: number): Buffer; - function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; - - function randomFillSync(buffer: T, offset?: number, size?: number): T; - function randomFill(buffer: T, callback: (err: Error | null, buf: T) => void): void; - function randomFill(buffer: T, offset: number, callback: (err: Error | null, buf: T) => void): void; - function randomFill(buffer: T, offset: number, size: number, callback: (err: Error | null, buf: T) => void): void; - - interface ScryptOptions { - N?: number; - r?: number; - p?: number; - maxmem?: number; - } - function scrypt( - password: string | Buffer | NodeJS.TypedArray | DataView, - salt: string | Buffer | NodeJS.TypedArray | DataView, - keylen: number, callback: (err: Error | null, derivedKey: Buffer) => void, - ): void; - function scrypt( - password: string | Buffer | NodeJS.TypedArray | DataView, - salt: string | Buffer | NodeJS.TypedArray | DataView, - keylen: number, - options: ScryptOptions, - callback: (err: Error | null, derivedKey: Buffer) => void, - ): void; - function scryptSync(password: string | Buffer | NodeJS.TypedArray | DataView, salt: string | Buffer | NodeJS.TypedArray | DataView, keylen: number, options?: ScryptOptions): Buffer; - - interface RsaPublicKey { - key: string; - padding?: number; - } - interface RsaPrivateKey { - key: string; - passphrase?: string; - padding?: number; - } - function publicEncrypt(public_key: string | RsaPublicKey, buffer: Buffer | NodeJS.TypedArray | DataView): Buffer; - function privateDecrypt(private_key: string | RsaPrivateKey, buffer: Buffer | NodeJS.TypedArray | DataView): Buffer; - function privateEncrypt(private_key: string | RsaPrivateKey, buffer: Buffer | NodeJS.TypedArray | DataView): Buffer; - function publicDecrypt(public_key: string | RsaPublicKey, buffer: Buffer | NodeJS.TypedArray | DataView): Buffer; - function getCiphers(): string[]; - function getCurves(): string[]; - function getHashes(): string[]; - class ECDH { - static convertKey( - key: string | Buffer | NodeJS.TypedArray | DataView, - curve: string, - inputEncoding?: HexBase64Latin1Encoding, - outputEncoding?: "latin1" | "hex" | "base64", - format?: "uncompressed" | "compressed" | "hybrid", - ): Buffer | string; - generateKeys(): Buffer; - generateKeys(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string; - computeSecret(other_public_key: Buffer | NodeJS.TypedArray | DataView): Buffer; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer; - computeSecret(other_public_key: Buffer | NodeJS.TypedArray | DataView, output_encoding: HexBase64Latin1Encoding): string; - computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string; - getPrivateKey(): Buffer; - getPrivateKey(encoding: HexBase64Latin1Encoding): string; - getPublicKey(): Buffer; - getPublicKey(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string; - setPrivateKey(private_key: Buffer | NodeJS.TypedArray | DataView): void; - setPrivateKey(private_key: string, encoding: HexBase64Latin1Encoding): void; - } - function createECDH(curve_name: string): ECDH; - function timingSafeEqual(a: Buffer | NodeJS.TypedArray | DataView, b: Buffer | NodeJS.TypedArray | DataView): boolean; - /** @deprecated since v10.0.0 */ - const DEFAULT_ENCODING: string; - - export type KeyType = 'rsa' | 'dsa' | 'ec'; - export type KeyFormat = 'pem' | 'der'; - - interface BasePrivateKeyEncodingOptions { - format: T; - cipher: string; - passphrase: string; - } - - interface RSAKeyPairOptions { - /** - * Key size in bits - */ - modulusLength: number; - /** - * @default 0x10001 - */ - publicExponent?: number; - - publicKeyEncoding: { - type: 'pkcs1' | 'spki'; - format: PubF; - }; - privateKeyEncoding: BasePrivateKeyEncodingOptions & { - type: 'pkcs1' | 'pkcs8'; - }; - } - - interface DSAKeyPairOptions { - /** - * Key size in bits - */ - modulusLength: number; - /** - * Size of q in bits - */ - divisorLength: number; - - publicKeyEncoding: { - type: 'spki'; - format: PubF; - }; - privateKeyEncoding: BasePrivateKeyEncodingOptions & { - type: 'pkcs8'; - }; - } - - interface ECKeyPairOptions { - /** - * Name of the curve to use. - */ - namedCurve: string; - - publicKeyEncoding: { - type: 'pkcs1' | 'spki'; - format: PubF; - }; - privateKeyEncoding: BasePrivateKeyEncodingOptions & { - type: 'sec1' | 'pkcs8'; - }; - } - - interface KeyPairSyncResult { - publicKey: T1; - privateKey: T2; - } - - function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult; - - function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult; - - function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>): KeyPairSyncResult; - function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'der'>): KeyPairSyncResult; -} - -declare module "stream" { - import * as events from "events"; - - class internal extends events.EventEmitter { - pipe(destination: T, options?: { end?: boolean; }): T; - } - - namespace internal { - class Stream extends internal { } - - interface ReadableOptions { - highWaterMark?: number; - encoding?: string; - objectMode?: boolean; - read?(this: Readable, size: number): void; - destroy?(this: Readable, error: Error | null, callback: (error: Error | null) => void): void; - } - - class Readable extends Stream implements NodeJS.ReadableStream { - readable: boolean; - readonly readableHighWaterMark: number; - readonly readableLength: number; - constructor(opts?: ReadableOptions); - _read(size: number): void; - read(size?: number): any; - setEncoding(encoding: string): this; - pause(): this; - resume(): this; - isPaused(): boolean; - unpipe(destination?: NodeJS.WritableStream): this; - unshift(chunk: any): void; - wrap(oldStream: NodeJS.ReadableStream): this; - push(chunk: any, encoding?: string): boolean; - _destroy(error: Error | null, callback: (error: Error | null) => void): void; - destroy(error?: Error): void; - - /** - * Event emitter - * The defined events on documents including: - * 1. close - * 2. data - * 3. end - * 4. readable - * 5. error - */ - addListener(event: "close", listener: () => void): this; - addListener(event: "data", listener: (chunk: any) => void): this; - addListener(event: "end", listener: () => void): this; - addListener(event: "readable", listener: () => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: string | symbol, listener: (...args: any[]) => void): this; - - emit(event: "close"): boolean; - emit(event: "data", chunk: any): boolean; - emit(event: "end"): boolean; - emit(event: "readable"): boolean; - emit(event: "error", err: Error): boolean; - emit(event: string | symbol, ...args: any[]): boolean; - - on(event: "close", listener: () => void): this; - on(event: "data", listener: (chunk: any) => void): this; - on(event: "end", listener: () => void): this; - on(event: "readable", listener: () => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: string | symbol, listener: (...args: any[]) => void): this; - - once(event: "close", listener: () => void): this; - once(event: "data", listener: (chunk: any) => void): this; - once(event: "end", listener: () => void): this; - once(event: "readable", listener: () => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: string | symbol, listener: (...args: any[]) => void): this; - - prependListener(event: "close", listener: () => void): this; - prependListener(event: "data", listener: (chunk: any) => void): this; - prependListener(event: "end", listener: () => void): this; - prependListener(event: "readable", listener: () => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: string | symbol, listener: (...args: any[]) => void): this; - - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "data", listener: (chunk: any) => void): this; - prependOnceListener(event: "end", listener: () => void): this; - prependOnceListener(event: "readable", listener: () => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; - - removeListener(event: "close", listener: () => void): this; - removeListener(event: "data", listener: (chunk: any) => void): this; - removeListener(event: "end", listener: () => void): this; - removeListener(event: "readable", listener: () => void): this; - removeListener(event: "error", listener: (err: Error) => void): this; - removeListener(event: string | symbol, listener: (...args: any[]) => void): this; - - [Symbol.asyncIterator](): AsyncIterableIterator; - } - - interface WritableOptions { - highWaterMark?: number; - decodeStrings?: boolean; - objectMode?: boolean; - write?(this: Writable, chunk: any, encoding: string, callback: (error?: Error | null) => void): void; - writev?(this: Writable, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void; - destroy?(this: Writable, error: Error | null, callback: (error: Error | null) => void): void; - final?(this: Writable, callback: (error?: Error | null) => void): void; - } - - class Writable extends Stream implements NodeJS.WritableStream { - writable: boolean; - readonly writableHighWaterMark: number; - readonly writableLength: number; - constructor(opts?: WritableOptions); - _write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void; - _writev?(chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void; - _destroy(error: Error | null, callback: (error: Error | null) => void): void; - _final(callback: (error?: Error | null) => void): void; - write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; - write(chunk: any, encoding?: string, cb?: (error: Error | null | undefined) => void): boolean; - setDefaultEncoding(encoding: string): this; - end(cb?: () => void): void; - end(chunk: any, cb?: () => void): void; - end(chunk: any, encoding?: string, cb?: () => void): void; - cork(): void; - uncork(): void; - destroy(error?: Error): void; - - /** - * Event emitter - * The defined events on documents including: - * 1. close - * 2. drain - * 3. error - * 4. finish - * 5. pipe - * 6. unpipe - */ - addListener(event: "close", listener: () => void): this; - addListener(event: "drain", listener: () => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: "finish", listener: () => void): this; - addListener(event: "pipe", listener: (src: Readable) => void): this; - addListener(event: "unpipe", listener: (src: Readable) => void): this; - addListener(event: string | symbol, listener: (...args: any[]) => void): this; - - emit(event: "close"): boolean; - emit(event: "drain"): boolean; - emit(event: "error", err: Error): boolean; - emit(event: "finish"): boolean; - emit(event: "pipe", src: Readable): boolean; - emit(event: "unpipe", src: Readable): boolean; - emit(event: string | symbol, ...args: any[]): boolean; - - on(event: "close", listener: () => void): this; - on(event: "drain", listener: () => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: "finish", listener: () => void): this; - on(event: "pipe", listener: (src: Readable) => void): this; - on(event: "unpipe", listener: (src: Readable) => void): this; - on(event: string | symbol, listener: (...args: any[]) => void): this; - - once(event: "close", listener: () => void): this; - once(event: "drain", listener: () => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: "finish", listener: () => void): this; - once(event: "pipe", listener: (src: Readable) => void): this; - once(event: "unpipe", listener: (src: Readable) => void): this; - once(event: string | symbol, listener: (...args: any[]) => void): this; - - prependListener(event: "close", listener: () => void): this; - prependListener(event: "drain", listener: () => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: "finish", listener: () => void): this; - prependListener(event: "pipe", listener: (src: Readable) => void): this; - prependListener(event: "unpipe", listener: (src: Readable) => void): this; - prependListener(event: string | symbol, listener: (...args: any[]) => void): this; - - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "drain", listener: () => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: "finish", listener: () => void): this; - prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; - prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; - prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; - - removeListener(event: "close", listener: () => void): this; - removeListener(event: "drain", listener: () => void): this; - removeListener(event: "error", listener: (err: Error) => void): this; - removeListener(event: "finish", listener: () => void): this; - removeListener(event: "pipe", listener: (src: Readable) => void): this; - removeListener(event: "unpipe", listener: (src: Readable) => void): this; - removeListener(event: string | symbol, listener: (...args: any[]) => void): this; - } - - interface DuplexOptions extends ReadableOptions, WritableOptions { - allowHalfOpen?: boolean; - readableObjectMode?: boolean; - writableObjectMode?: boolean; - read?(this: Duplex, size: number): void; - write?(this: Duplex, chunk: any, encoding: string, callback: (error?: Error | null) => void): void; - writev?(this: Duplex, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void; - final?(this: Duplex, callback: (error?: Error | null) => void): void; - destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void; - } - - // Note: Duplex extends both Readable and Writable. - class Duplex extends Readable implements Writable { - writable: boolean; - readonly writableHighWaterMark: number; - readonly writableLength: number; - constructor(opts?: DuplexOptions); - _write(chunk: any, encoding: string, callback: (error?: Error | null) => void): void; - _writev?(chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void; - _destroy(error: Error | null, callback: (error: Error | null) => void): void; - _final(callback: (error?: Error | null) => void): void; - write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; - write(chunk: any, encoding?: string, cb?: (error: Error | null | undefined) => void): boolean; - setDefaultEncoding(encoding: string): this; - end(cb?: () => void): void; - end(chunk: any, cb?: () => void): void; - end(chunk: any, encoding?: string, cb?: () => void): void; - cork(): void; - uncork(): void; - } - - type TransformCallback = (error?: Error, data?: any) => void; - - interface TransformOptions extends DuplexOptions { - read?(this: Transform, size: number): void; - write?(this: Transform, chunk: any, encoding: string, callback: (error?: Error | null) => void): void; - writev?(this: Transform, chunks: Array<{ chunk: any, encoding: string }>, callback: (error?: Error | null) => void): void; - final?(this: Transform, callback: (error?: Error | null) => void): void; - destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void; - transform?(this: Transform, chunk: any, encoding: string, callback: TransformCallback): void; - flush?(this: Transform, callback: TransformCallback): void; - } - - class Transform extends Duplex { - constructor(opts?: TransformOptions); - _transform(chunk: any, encoding: string, callback: TransformCallback): void; - _flush(callback: TransformCallback): void; - } - - class PassThrough extends Transform { } - - function finished(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, callback: (err?: NodeJS.ErrnoException) => void): () => void; - namespace finished { - function __promisify__(stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream): Promise; - } - - function pipeline(stream1: NodeJS.ReadableStream, stream2: T, callback?: (err: NodeJS.ErrnoException) => void): T; - function pipeline(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: T, callback?: (err: NodeJS.ErrnoException) => void): T; - function pipeline( - stream1: NodeJS.ReadableStream, - stream2: NodeJS.ReadWriteStream, - stream3: NodeJS.ReadWriteStream, - stream4: T, - callback?: (err: NodeJS.ErrnoException) => void, - ): T; - function pipeline( - stream1: NodeJS.ReadableStream, - stream2: NodeJS.ReadWriteStream, - stream3: NodeJS.ReadWriteStream, - stream4: NodeJS.ReadWriteStream, - stream5: T, - callback?: (err: NodeJS.ErrnoException) => void, - ): T; - function pipeline(streams: Array, callback?: (err: NodeJS.ErrnoException) => void): NodeJS.WritableStream; - function pipeline( - stream1: NodeJS.ReadableStream, - stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, - ...streams: Array void)>, - ): NodeJS.WritableStream; - namespace pipeline { - function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.WritableStream): Promise; - function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: NodeJS.WritableStream): Promise; - function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.ReadWriteStream, stream3: NodeJS.ReadWriteStream, stream4: NodeJS.WritableStream): Promise; - function __promisify__( - stream1: NodeJS.ReadableStream, - stream2: NodeJS.ReadWriteStream, - stream3: NodeJS.ReadWriteStream, - stream4: NodeJS.ReadWriteStream, - stream5: NodeJS.WritableStream, - ): Promise; - function __promisify__(streams: Array): Promise; - function __promisify__( - stream1: NodeJS.ReadableStream, - stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, - ...streams: Array, - ): Promise; - } - } - - export = internal; -} - -declare module "util" { - interface InspectOptions extends NodeJS.InspectOptions { } - function format(format: any, ...param: any[]): string; - function formatWithOptions(inspectOptions: InspectOptions, format: string, ...param: any[]): string; - /** @deprecated since v0.11.3 - use `console.error()` instead. */ - function debug(string: string): void; - /** @deprecated since v0.11.3 - use `console.error()` instead. */ - function error(...param: any[]): void; - /** @deprecated since v0.11.3 - use `console.log()` instead. */ - function puts(...param: any[]): void; - /** @deprecated since v0.11.3 - use `console.log()` instead. */ - function print(...param: any[]): void; - /** @deprecated since v0.11.3 - use a third party module instead. */ - function log(string: string): void; - const inspect: { - (object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string; - (object: any, options: InspectOptions): string; - colors: { - [color: string]: [number, number] | undefined - } - styles: { - [style: string]: string | undefined - } - defaultOptions: InspectOptions; - custom: symbol; - }; - /** @deprecated since v4.0.0 - use `Array.isArray()` instead. */ - function isArray(object: any): object is any[]; - /** @deprecated since v4.0.0 - use `util.types.isRegExp()` instead. */ - function isRegExp(object: any): object is RegExp; - /** @deprecated since v4.0.0 - use `util.types.isDate()` instead. */ - function isDate(object: any): object is Date; - /** @deprecated since v4.0.0 - use `util.types.isNativeError()` instead. */ - function isError(object: any): object is Error; - function inherits(constructor: any, superConstructor: any): void; - function debuglog(key: string): (msg: string, ...param: any[]) => void; - /** @deprecated since v4.0.0 - use `typeof value === 'boolean'` instead. */ - function isBoolean(object: any): object is boolean; - /** @deprecated since v4.0.0 - use `Buffer.isBuffer()` instead. */ - function isBuffer(object: any): object is Buffer; - /** @deprecated since v4.0.0 - use `typeof value === 'function'` instead. */ - function isFunction(object: any): boolean; - /** @deprecated since v4.0.0 - use `value === null` instead. */ - function isNull(object: any): object is null; - /** @deprecated since v4.0.0 - use `value === null || value === undefined` instead. */ - function isNullOrUndefined(object: any): object is null | undefined; - /** @deprecated since v4.0.0 - use `typeof value === 'number'` instead. */ - function isNumber(object: any): object is number; - /** @deprecated since v4.0.0 - use `value !== null && typeof value === 'object'` instead. */ - function isObject(object: any): boolean; - /** @deprecated since v4.0.0 - use `(typeof value !== 'object' && typeof value !== 'function') || value === null` instead. */ - function isPrimitive(object: any): boolean; - /** @deprecated since v4.0.0 - use `typeof value === 'string'` instead. */ - function isString(object: any): object is string; - /** @deprecated since v4.0.0 - use `typeof value === 'symbol'` instead. */ - function isSymbol(object: any): object is symbol; - /** @deprecated since v4.0.0 - use `value === undefined` instead. */ - function isUndefined(object: any): object is undefined; - function deprecate(fn: T, message: string): T; - function isDeepStrictEqual(val1: any, val2: any): boolean; - - interface CustomPromisify extends Function { - __promisify__: TCustom; - } - - function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException) => void) => void; - function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - function callbackify(fn: (arg1: T1) => Promise): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void; - function callbackify(fn: (arg1: T1) => Promise): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - function callbackify(fn: (arg1: T1, arg2: T2) => Promise): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void; - function callbackify(fn: (arg1: T1, arg2: T2) => Promise): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - function callbackify(fn: (arg1: T1, arg2: T2, arg3: T3) => Promise): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void; - function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3) => Promise): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void; - function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void; - function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException) => void) => void; - function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - - function promisify(fn: CustomPromisify): TCustom; - function promisify(fn: (callback: (err: Error | null, result: TResult) => void) => void): () => Promise; - function promisify(fn: (callback: (err?: Error | null) => void) => void): () => Promise; - function promisify(fn: (arg1: T1, callback: (err: Error | null, result: TResult) => void) => void): (arg1: T1) => Promise; - function promisify(fn: (arg1: T1, callback: (err?: Error | null) => void) => void): (arg1: T1) => Promise; - function promisify(fn: (arg1: T1, arg2: T2, callback: (err: Error | null, result: TResult) => void) => void): (arg1: T1, arg2: T2) => Promise; - function promisify(fn: (arg1: T1, arg2: T2, callback: (err?: Error | null) => void) => void): (arg1: T1, arg2: T2) => Promise; - function promisify(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: Error | null, result: TResult) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise; - function promisify(fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: Error | null) => void) => void): (arg1: T1, arg2: T2, arg3: T3) => Promise; - function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: Error | null, result: TResult) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; - function promisify(fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: Error | null) => void) => void): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; - function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: Error | null, result: TResult) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; - function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: Error | null) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; - function promisify(fn: Function): Function; - namespace promisify { - const custom: symbol; - } - - namespace types { - function isAnyArrayBuffer(object: any): boolean; - function isArgumentsObject(object: any): object is IArguments; - function isArrayBuffer(object: any): object is ArrayBuffer; - function isAsyncFunction(object: any): boolean; - function isBooleanObject(object: any): object is Boolean; - function isBoxedPrimitive(object: any): object is (Number | Boolean | String | Symbol /* BigInt */); - function isDataView(object: any): object is DataView; - function isDate(object: any): object is Date; - function isExternal(object: any): boolean; - function isFloat32Array(object: any): object is Float32Array; - function isFloat64Array(object: any): object is Float64Array; - function isGeneratorFunction(object: any): boolean; - function isGeneratorObject(object: any): boolean; - function isInt8Array(object: any): object is Int8Array; - function isInt16Array(object: any): object is Int16Array; - function isInt32Array(object: any): object is Int32Array; - function isMap(object: any): boolean; - function isMapIterator(object: any): boolean; - function isNativeError(object: any): object is Error; - function isNumberObject(object: any): object is Number; - function isPromise(object: any): boolean; - function isProxy(object: any): boolean; - function isRegExp(object: any): object is RegExp; - function isSet(object: any): boolean; - function isSetIterator(object: any): boolean; - function isSharedArrayBuffer(object: any): boolean; - function isStringObject(object: any): boolean; - function isSymbolObject(object: any): boolean; - function isTypedArray(object: any): object is NodeJS.TypedArray; - function isUint8Array(object: any): object is Uint8Array; - function isUint8ClampedArray(object: any): object is Uint8ClampedArray; - function isUint16Array(object: any): object is Uint16Array; - function isUint32Array(object: any): object is Uint32Array; - function isWeakMap(object: any): boolean; - function isWeakSet(object: any): boolean; - function isWebAssemblyCompiledModule(object: any): boolean; - } - - class TextDecoder { - readonly encoding: string; - readonly fatal: boolean; - readonly ignoreBOM: boolean; - constructor( - encoding?: string, - options?: { fatal?: boolean; ignoreBOM?: boolean } - ); - decode( - input?: NodeJS.TypedArray | DataView | ArrayBuffer | null, - options?: { stream?: boolean } - ): string; - } - - class TextEncoder { - readonly encoding: string; - constructor(); - encode(input?: string): Uint8Array; - } -} - -declare module "assert" { - function internal(value: any, message?: string | Error): void; - namespace internal { - class AssertionError implements Error { - name: string; - message: string; - actual: any; - expected: any; - operator: string; - generatedMessage: boolean; - code: 'ERR_ASSERTION'; - - constructor(options?: { - message?: string; actual?: any; expected?: any; - operator?: string; stackStartFn?: Function - }); - } - - function fail(message?: string | Error): never; - /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */ - function fail(actual: any, expected: any, message?: string | Error, operator?: string, stackStartFn?: Function): never; - function ok(value: any, message?: string | Error): void; - /** @deprecated since v9.9.0 - use strictEqual() instead. */ - function equal(actual: any, expected: any, message?: string | Error): void; - /** @deprecated since v9.9.0 - use notStrictEqual() instead. */ - function notEqual(actual: any, expected: any, message?: string | Error): void; - /** @deprecated since v9.9.0 - use deepStrictEqual() instead. */ - function deepEqual(actual: any, expected: any, message?: string | Error): void; - /** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */ - function notDeepEqual(actual: any, expected: any, message?: string | Error): void; - function strictEqual(actual: any, expected: any, message?: string | Error): void; - function notStrictEqual(actual: any, expected: any, message?: string | Error): void; - function deepStrictEqual(actual: any, expected: any, message?: string | Error): void; - function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void; - - function throws(block: Function, message?: string | Error): void; - function throws(block: Function, error: RegExp | Function | Object | Error, message?: string | Error): void; - function doesNotThrow(block: Function, message?: string | Error): void; - function doesNotThrow(block: Function, error: RegExp | Function, message?: string | Error): void; - - function ifError(value: any): void; - - function rejects(block: Function | Promise, message?: string | Error): Promise; - function rejects(block: Function | Promise, error: RegExp | Function | Object | Error, message?: string | Error): Promise; - function doesNotReject(block: Function | Promise, message?: string | Error): Promise; - function doesNotReject(block: Function | Promise, error: RegExp | Function, message?: string | Error): Promise; - - const strict: typeof internal; - } - - export = internal; -} - -declare module "tty" { - import * as net from "net"; - - function isatty(fd: number): boolean; - class ReadStream extends net.Socket { - isRaw: boolean; - setRawMode(mode: boolean): void; - isTTY: boolean; - } - class WriteStream extends net.Socket { - columns: number; - rows: number; - isTTY: boolean; - } -} - -declare module "domain" { - import * as events from "events"; - - class Domain extends events.EventEmitter implements NodeJS.Domain { - run(fn: Function): void; - add(emitter: events.EventEmitter): void; - remove(emitter: events.EventEmitter): void; - bind(cb: (err: Error, data: any) => any): any; - intercept(cb: (data: any) => any): any; - members: any[]; - enter(): void; - exit(): void; - } - - function create(): Domain; -} - -declare module "constants" { - const E2BIG: number; - const EACCES: number; - const EADDRINUSE: number; - const EADDRNOTAVAIL: number; - const EAFNOSUPPORT: number; - const EAGAIN: number; - const EALREADY: number; - const EBADF: number; - const EBADMSG: number; - const EBUSY: number; - const ECANCELED: number; - const ECHILD: number; - const ECONNABORTED: number; - const ECONNREFUSED: number; - const ECONNRESET: number; - const EDEADLK: number; - const EDESTADDRREQ: number; - const EDOM: number; - const EEXIST: number; - const EFAULT: number; - const EFBIG: number; - const EHOSTUNREACH: number; - const EIDRM: number; - const EILSEQ: number; - const EINPROGRESS: number; - const EINTR: number; - const EINVAL: number; - const EIO: number; - const EISCONN: number; - const EISDIR: number; - const ELOOP: number; - const EMFILE: number; - const EMLINK: number; - const EMSGSIZE: number; - const ENAMETOOLONG: number; - const ENETDOWN: number; - const ENETRESET: number; - const ENETUNREACH: number; - const ENFILE: number; - const ENOBUFS: number; - const ENODATA: number; - const ENODEV: number; - const ENOENT: number; - const ENOEXEC: number; - const ENOLCK: number; - const ENOLINK: number; - const ENOMEM: number; - const ENOMSG: number; - const ENOPROTOOPT: number; - const ENOSPC: number; - const ENOSR: number; - const ENOSTR: number; - const ENOSYS: number; - const ENOTCONN: number; - const ENOTDIR: number; - const ENOTEMPTY: number; - const ENOTSOCK: number; - const ENOTSUP: number; - const ENOTTY: number; - const ENXIO: number; - const EOPNOTSUPP: number; - const EOVERFLOW: number; - const EPERM: number; - const EPIPE: number; - const EPROTO: number; - const EPROTONOSUPPORT: number; - const EPROTOTYPE: number; - const ERANGE: number; - const EROFS: number; - const ESPIPE: number; - const ESRCH: number; - const ETIME: number; - const ETIMEDOUT: number; - const ETXTBSY: number; - const EWOULDBLOCK: number; - const EXDEV: number; - const WSAEINTR: number; - const WSAEBADF: number; - const WSAEACCES: number; - const WSAEFAULT: number; - const WSAEINVAL: number; - const WSAEMFILE: number; - const WSAEWOULDBLOCK: number; - const WSAEINPROGRESS: number; - const WSAEALREADY: number; - const WSAENOTSOCK: number; - const WSAEDESTADDRREQ: number; - const WSAEMSGSIZE: number; - const WSAEPROTOTYPE: number; - const WSAENOPROTOOPT: number; - const WSAEPROTONOSUPPORT: number; - const WSAESOCKTNOSUPPORT: number; - const WSAEOPNOTSUPP: number; - const WSAEPFNOSUPPORT: number; - const WSAEAFNOSUPPORT: number; - const WSAEADDRINUSE: number; - const WSAEADDRNOTAVAIL: number; - const WSAENETDOWN: number; - const WSAENETUNREACH: number; - const WSAENETRESET: number; - const WSAECONNABORTED: number; - const WSAECONNRESET: number; - const WSAENOBUFS: number; - const WSAEISCONN: number; - const WSAENOTCONN: number; - const WSAESHUTDOWN: number; - const WSAETOOMANYREFS: number; - const WSAETIMEDOUT: number; - const WSAECONNREFUSED: number; - const WSAELOOP: number; - const WSAENAMETOOLONG: number; - const WSAEHOSTDOWN: number; - const WSAEHOSTUNREACH: number; - const WSAENOTEMPTY: number; - const WSAEPROCLIM: number; - const WSAEUSERS: number; - const WSAEDQUOT: number; - const WSAESTALE: number; - const WSAEREMOTE: number; - const WSASYSNOTREADY: number; - const WSAVERNOTSUPPORTED: number; - const WSANOTINITIALISED: number; - const WSAEDISCON: number; - const WSAENOMORE: number; - const WSAECANCELLED: number; - const WSAEINVALIDPROCTABLE: number; - const WSAEINVALIDPROVIDER: number; - const WSAEPROVIDERFAILEDINIT: number; - const WSASYSCALLFAILURE: number; - const WSASERVICE_NOT_FOUND: number; - const WSATYPE_NOT_FOUND: number; - const WSA_E_NO_MORE: number; - const WSA_E_CANCELLED: number; - const WSAEREFUSED: number; - const SIGHUP: number; - const SIGINT: number; - const SIGILL: number; - const SIGABRT: number; - const SIGFPE: number; - const SIGKILL: number; - const SIGSEGV: number; - const SIGTERM: number; - const SIGBREAK: number; - const SIGWINCH: number; - const SSL_OP_ALL: number; - const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; - const SSL_OP_CIPHER_SERVER_PREFERENCE: number; - const SSL_OP_CISCO_ANYCONNECT: number; - const SSL_OP_COOKIE_EXCHANGE: number; - const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; - const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; - const SSL_OP_EPHEMERAL_RSA: number; - const SSL_OP_LEGACY_SERVER_CONNECT: number; - const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number; - const SSL_OP_MICROSOFT_SESS_ID_BUG: number; - const SSL_OP_MSIE_SSLV2_RSA_PADDING: number; - const SSL_OP_NETSCAPE_CA_DN_BUG: number; - const SSL_OP_NETSCAPE_CHALLENGE_BUG: number; - const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number; - const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number; - const SSL_OP_NO_COMPRESSION: number; - const SSL_OP_NO_QUERY_MTU: number; - const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; - const SSL_OP_NO_SSLv2: number; - const SSL_OP_NO_SSLv3: number; - const SSL_OP_NO_TICKET: number; - const SSL_OP_NO_TLSv1: number; - const SSL_OP_NO_TLSv1_1: number; - const SSL_OP_NO_TLSv1_2: number; - const SSL_OP_PKCS1_CHECK_1: number; - const SSL_OP_PKCS1_CHECK_2: number; - const SSL_OP_SINGLE_DH_USE: number; - const SSL_OP_SINGLE_ECDH_USE: number; - const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number; - const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number; - const SSL_OP_TLS_BLOCK_PADDING_BUG: number; - const SSL_OP_TLS_D5_BUG: number; - const SSL_OP_TLS_ROLLBACK_BUG: number; - const ENGINE_METHOD_DSA: number; - const ENGINE_METHOD_DH: number; - const ENGINE_METHOD_RAND: number; - const ENGINE_METHOD_ECDH: number; - const ENGINE_METHOD_ECDSA: number; - const ENGINE_METHOD_CIPHERS: number; - const ENGINE_METHOD_DIGESTS: number; - const ENGINE_METHOD_STORE: number; - const ENGINE_METHOD_PKEY_METHS: number; - const ENGINE_METHOD_PKEY_ASN1_METHS: number; - const ENGINE_METHOD_ALL: number; - const ENGINE_METHOD_NONE: number; - const DH_CHECK_P_NOT_SAFE_PRIME: number; - const DH_CHECK_P_NOT_PRIME: number; - const DH_UNABLE_TO_CHECK_GENERATOR: number; - const DH_NOT_SUITABLE_GENERATOR: number; - const NPN_ENABLED: number; - const RSA_PKCS1_PADDING: number; - const RSA_SSLV23_PADDING: number; - const RSA_NO_PADDING: number; - const RSA_PKCS1_OAEP_PADDING: number; - const RSA_X931_PADDING: number; - const RSA_PKCS1_PSS_PADDING: number; - const POINT_CONVERSION_COMPRESSED: number; - const POINT_CONVERSION_UNCOMPRESSED: number; - const POINT_CONVERSION_HYBRID: number; - const O_RDONLY: number; - const O_WRONLY: number; - const O_RDWR: number; - const S_IFMT: number; - const S_IFREG: number; - const S_IFDIR: number; - const S_IFCHR: number; - const S_IFBLK: number; - const S_IFIFO: number; - const S_IFSOCK: number; - const S_IRWXU: number; - const S_IRUSR: number; - const S_IWUSR: number; - const S_IXUSR: number; - const S_IRWXG: number; - const S_IRGRP: number; - const S_IWGRP: number; - const S_IXGRP: number; - const S_IRWXO: number; - const S_IROTH: number; - const S_IWOTH: number; - const S_IXOTH: number; - const S_IFLNK: number; - const O_CREAT: number; - const O_EXCL: number; - const O_NOCTTY: number; - const O_DIRECTORY: number; - const O_NOATIME: number; - const O_NOFOLLOW: number; - const O_SYNC: number; - const O_DSYNC: number; - const O_SYMLINK: number; - const O_DIRECT: number; - const O_NONBLOCK: number; - const O_TRUNC: number; - const O_APPEND: number; - const F_OK: number; - const R_OK: number; - const W_OK: number; - const X_OK: number; - const COPYFILE_EXCL: number; - const COPYFILE_FICLONE: number; - const COPYFILE_FICLONE_FORCE: number; - const UV_UDP_REUSEADDR: number; - const SIGQUIT: number; - const SIGTRAP: number; - const SIGIOT: number; - const SIGBUS: number; - const SIGUSR1: number; - const SIGUSR2: number; - const SIGPIPE: number; - const SIGALRM: number; - const SIGCHLD: number; - const SIGSTKFLT: number; - const SIGCONT: number; - const SIGSTOP: number; - const SIGTSTP: number; - const SIGTTIN: number; - const SIGTTOU: number; - const SIGURG: number; - const SIGXCPU: number; - const SIGXFSZ: number; - const SIGVTALRM: number; - const SIGPROF: number; - const SIGIO: number; - const SIGPOLL: number; - const SIGPWR: number; - const SIGSYS: number; - const SIGUNUSED: number; - const defaultCoreCipherList: string; - const defaultCipherList: string; - const ENGINE_METHOD_RSA: number; - const ALPN_ENABLED: number; -} - -declare module "module" { - export = NodeJS.Module; -} - -declare module "process" { - export = process; -} - -declare module "v8" { - interface HeapSpaceInfo { - space_name: string; - space_size: number; - space_used_size: number; - space_available_size: number; - physical_space_size: number; - } - - // ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */ - type DoesZapCodeSpaceFlag = 0 | 1; - - interface HeapInfo { - total_heap_size: number; - total_heap_size_executable: number; - total_physical_size: number; - total_available_size: number; - used_heap_size: number; - heap_size_limit: number; - malloced_memory: number; - peak_malloced_memory: number; - does_zap_garbage: DoesZapCodeSpaceFlag; - } - - function getHeapStatistics(): HeapInfo; - function getHeapSpaceStatistics(): HeapSpaceInfo[]; - function setFlagsFromString(flags: string): void; -} - -declare module "timers" { - function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; - namespace setTimeout { - function __promisify__(ms: number): Promise; - function __promisify__(ms: number, value: T): Promise; - } - function clearTimeout(timeoutId: NodeJS.Timeout): void; - function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; - function clearInterval(intervalId: NodeJS.Timeout): void; - function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; - namespace setImmediate { - function __promisify__(): Promise; - function __promisify__(value: T): Promise; - } - function clearImmediate(immediateId: NodeJS.Immediate): void; -} - -declare module "console" { - export = console; -} - -/** - * Async Hooks module: https://nodejs.org/api/async_hooks.html - */ -declare module "async_hooks" { - /** - * Returns the asyncId of the current execution context. - */ - function executionAsyncId(): number; - - /** - * Returns the ID of the resource responsible for calling the callback that is currently being executed. - */ - function triggerAsyncId(): number; - - interface HookCallbacks { - /** - * Called when a class is constructed that has the possibility to emit an asynchronous event. - * @param asyncId a unique ID for the async resource - * @param type the type of the async resource - * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created - * @param resource reference to the resource representing the async operation, needs to be released during destroy - */ - init?(asyncId: number, type: string, triggerAsyncId: number, resource: Object): void; - - /** - * When an asynchronous operation is initiated or completes a callback is called to notify the user. - * The before callback is called just before said callback is executed. - * @param asyncId the unique identifier assigned to the resource about to execute the callback. - */ - before?(asyncId: number): void; - - /** - * Called immediately after the callback specified in before is completed. - * @param asyncId the unique identifier assigned to the resource which has executed the callback. - */ - after?(asyncId: number): void; - - /** - * Called when a promise has resolve() called. This may not be in the same execution id - * as the promise itself. - * @param asyncId the unique id for the promise that was resolve()d. - */ - promiseResolve?(asyncId: number): void; - - /** - * Called after the resource corresponding to asyncId is destroyed - * @param asyncId a unique ID for the async resource - */ - destroy?(asyncId: number): void; - } - - interface AsyncHook { - /** - * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop. - */ - enable(): this; - - /** - * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled. - */ - disable(): this; - } - - /** - * Registers functions to be called for different lifetime events of each async operation. - * @param options the callbacks to register - * @return an AsyncHooks instance used for disabling and enabling hooks - */ - function createHook(options: HookCallbacks): AsyncHook; - - interface AsyncResourceOptions { - /** - * The ID of the execution context that created this async event. - * Default: `executionAsyncId()` - */ - triggerAsyncId?: number; - - /** - * Disables automatic `emitDestroy` when the object is garbage collected. - * This usually does not need to be set (even if `emitDestroy` is called - * manually), unless the resource's `asyncId` is retrieved and the - * sensitive API's `emitDestroy` is called with it. - * Default: `false` - */ - requireManualDestroy?: boolean; - } - - /** - * The class AsyncResource was designed to be extended by the embedder's async resources. - * Using this users can easily trigger the lifetime events of their own resources. - */ - class AsyncResource { - /** - * AsyncResource() is meant to be extended. Instantiating a - * new AsyncResource() also triggers init. If triggerAsyncId is omitted then - * async_hook.executionAsyncId() is used. - * @param type The type of async event. - * @param triggerAsyncId The ID of the execution context that created - * this async event (default: `executionAsyncId()`), or an - * AsyncResourceOptions object (since 9.3) - */ - constructor(type: string, triggerAsyncId?: number|AsyncResourceOptions); - - /** - * Call AsyncHooks before callbacks. - * @deprecated since 9.6 - Use asyncResource.runInAsyncScope() instead. - */ - emitBefore(): void; - - /** - * Call AsyncHooks after callbacks. - * @deprecated since 9.6 - Use asyncResource.runInAsyncScope() instead. - */ - emitAfter(): void; - - /** - * Call the provided function with the provided arguments in the - * execution context of the async resource. This will establish the - * context, trigger the AsyncHooks before callbacks, call the function, - * trigger the AsyncHooks after callbacks, and then restore the original - * execution context. - * @param fn The function to call in the execution context of this - * async resource. - * @param thisArg The receiver to be used for the function call. - * @param args Optional arguments to pass to the function. - */ - runInAsyncScope(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result; - - /** - * Call AsyncHooks destroy callbacks. - */ - emitDestroy(): void; - - /** - * @return the unique ID assigned to this AsyncResource instance. - */ - asyncId(): number; - - /** - * @return the trigger ID for this AsyncResource instance. - */ - triggerAsyncId(): number; - } -} - -declare module "http2" { - import * as events from "events"; - import * as fs from "fs"; - import * as net from "net"; - import * as stream from "stream"; - import * as tls from "tls"; - import * as url from "url"; - - import { IncomingHttpHeaders as Http1IncomingHttpHeaders, OutgoingHttpHeaders } from "http"; - export { OutgoingHttpHeaders } from "http"; - - export interface IncomingHttpStatusHeader { - ":status"?: number; - } - - export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders { - ":path"?: string; - ":method"?: string; - ":authority"?: string; - ":scheme"?: string; - } - - // Http2Stream - - export interface StreamPriorityOptions { - exclusive?: boolean; - parent?: number; - weight?: number; - silent?: boolean; - } - - export interface StreamState { - localWindowSize?: number; - state?: number; - streamLocalClose?: number; - streamRemoteClose?: number; - sumDependencyWeight?: number; - weight?: number; - } - - export interface ServerStreamResponseOptions { - endStream?: boolean; - getTrailers?: (trailers: OutgoingHttpHeaders) => void; - } - - export interface StatOptions { - offset: number; - length: number; - } - - export interface ServerStreamFileResponseOptions { - statCheck?: (stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions) => void | boolean; - getTrailers?: (trailers: OutgoingHttpHeaders) => void; - offset?: number; - length?: number; - } - - export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions { - onError?: (err: NodeJS.ErrnoException) => void; - } - - export interface Http2Stream extends stream.Duplex { - readonly aborted: boolean; - readonly closed: boolean; - readonly destroyed: boolean; - readonly pending: boolean; - readonly rstCode: number; - readonly session: Http2Session; - readonly state: StreamState; - /** - * Set the true if the END_STREAM flag was set in the request or response HEADERS frame received, - * indicating that no additional data should be received and the readable side of the Http2Stream will be closed. - */ - readonly endAfterHeaders: boolean; - close(code?: number, callback?: () => void): void; - priority(options: StreamPriorityOptions): void; - setTimeout(msecs: number, callback?: () => void): void; - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "aborted", listener: () => void): this; - addListener(event: "close", listener: () => void): this; - addListener(event: "data", listener: (chunk: Buffer | string) => void): this; - addListener(event: "drain", listener: () => void): this; - addListener(event: "end", listener: () => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: "finish", listener: () => void): this; - addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; - addListener(event: "pipe", listener: (src: stream.Readable) => void): this; - addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; - addListener(event: "streamClosed", listener: (code: number) => void): this; - addListener(event: "timeout", listener: () => void): this; - addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "aborted"): boolean; - emit(event: "close"): boolean; - emit(event: "data", chunk: Buffer | string): boolean; - emit(event: "drain"): boolean; - emit(event: "end"): boolean; - emit(event: "error", err: Error): boolean; - emit(event: "finish"): boolean; - emit(event: "frameError", frameType: number, errorCode: number): boolean; - emit(event: "pipe", src: stream.Readable): boolean; - emit(event: "unpipe", src: stream.Readable): boolean; - emit(event: "streamClosed", code: number): boolean; - emit(event: "timeout"): boolean; - emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "aborted", listener: () => void): this; - on(event: "close", listener: () => void): this; - on(event: "data", listener: (chunk: Buffer | string) => void): this; - on(event: "drain", listener: () => void): this; - on(event: "end", listener: () => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: "finish", listener: () => void): this; - on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; - on(event: "pipe", listener: (src: stream.Readable) => void): this; - on(event: "unpipe", listener: (src: stream.Readable) => void): this; - on(event: "streamClosed", listener: (code: number) => void): this; - on(event: "timeout", listener: () => void): this; - on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "aborted", listener: () => void): this; - once(event: "close", listener: () => void): this; - once(event: "data", listener: (chunk: Buffer | string) => void): this; - once(event: "drain", listener: () => void): this; - once(event: "end", listener: () => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: "finish", listener: () => void): this; - once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; - once(event: "pipe", listener: (src: stream.Readable) => void): this; - once(event: "unpipe", listener: (src: stream.Readable) => void): this; - once(event: "streamClosed", listener: (code: number) => void): this; - once(event: "timeout", listener: () => void): this; - once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "aborted", listener: () => void): this; - prependListener(event: "close", listener: () => void): this; - prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; - prependListener(event: "drain", listener: () => void): this; - prependListener(event: "end", listener: () => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: "finish", listener: () => void): this; - prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; - prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; - prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; - prependListener(event: "streamClosed", listener: (code: number) => void): this; - prependListener(event: "timeout", listener: () => void): this; - prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "aborted", listener: () => void): this; - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; - prependOnceListener(event: "drain", listener: () => void): this; - prependOnceListener(event: "end", listener: () => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: "finish", listener: () => void): this; - prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; - prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; - prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; - prependOnceListener(event: "streamClosed", listener: (code: number) => void): this; - prependOnceListener(event: "timeout", listener: () => void): this; - prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; - } - - export interface ClientHttp2Stream extends Http2Stream { - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; - addListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; - emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean; - emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; - on(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; - once(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; - prependListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; - prependOnceListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - } - - export interface ServerHttp2Stream extends Http2Stream { - additionalHeaders(headers: OutgoingHttpHeaders): void; - readonly headersSent: boolean; - readonly pushAllowed: boolean; - pushStream(headers: OutgoingHttpHeaders, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void; - pushStream(headers: OutgoingHttpHeaders, options?: StreamPriorityOptions, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void; - respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void; - respondWithFD(fd: number, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptions): void; - respondWithFile(path: string, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptionsWithError): void; - } - - // Http2Session - - export interface Settings { - headerTableSize?: number; - enablePush?: boolean; - initialWindowSize?: number; - maxFrameSize?: number; - maxConcurrentStreams?: number; - maxHeaderListSize?: number; - } - - export interface ClientSessionRequestOptions { - endStream?: boolean; - exclusive?: boolean; - parent?: number; - weight?: number; - getTrailers?: (trailers: OutgoingHttpHeaders, flags: number) => void; - } - - export interface SessionState { - effectiveLocalWindowSize?: number; - effectiveRecvDataLength?: number; - nextStreamID?: number; - localWindowSize?: number; - lastProcStreamID?: number; - remoteWindowSize?: number; - outboundQueueSize?: number; - deflateDynamicTableSize?: number; - inflateDynamicTableSize?: number; - } - - export interface Http2Session extends events.EventEmitter { - readonly alpnProtocol?: string; - close(callback?: () => void): void; - readonly closed: boolean; - readonly connecting: boolean; - destroy(error?: Error, code?: number): void; - readonly destroyed: boolean; - readonly encrypted?: boolean; - goaway(code?: number, lastStreamID?: number, opaqueData?: Buffer | DataView | NodeJS.TypedArray): void; - readonly localSettings: Settings; - readonly originSet?: string[]; - readonly pendingSettingsAck: boolean; - ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; - ping(payload: Buffer | DataView | NodeJS.TypedArray , callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; - ref(): void; - readonly remoteSettings: Settings; - rstStream(stream: Http2Stream, code?: number): void; - setTimeout(msecs: number, callback?: () => void): void; - readonly socket: net.Socket | tls.TLSSocket; - readonly state: SessionState; - priority(stream: Http2Stream, options: StreamPriorityOptions): void; - settings(settings: Settings): void; - readonly type: number; - unref(): void; - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "close", listener: () => void): this; - addListener(event: "error", listener: (err: Error) => void): this; - addListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; - addListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; - addListener(event: "localSettings", listener: (settings: Settings) => void): this; - addListener(event: "remoteSettings", listener: (settings: Settings) => void): this; - addListener(event: "timeout", listener: () => void): this; - addListener(event: "ping", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "close"): boolean; - emit(event: "error", err: Error): boolean; - emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean; - emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean; - emit(event: "localSettings", settings: Settings): boolean; - emit(event: "remoteSettings", settings: Settings): boolean; - emit(event: "timeout"): boolean; - emit(event: "ping"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "close", listener: () => void): this; - on(event: "error", listener: (err: Error) => void): this; - on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; - on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; - on(event: "localSettings", listener: (settings: Settings) => void): this; - on(event: "remoteSettings", listener: (settings: Settings) => void): this; - on(event: "timeout", listener: () => void): this; - on(event: "ping", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "close", listener: () => void): this; - once(event: "error", listener: (err: Error) => void): this; - once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; - once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; - once(event: "localSettings", listener: (settings: Settings) => void): this; - once(event: "remoteSettings", listener: (settings: Settings) => void): this; - once(event: "timeout", listener: () => void): this; - once(event: "ping", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "close", listener: () => void): this; - prependListener(event: "error", listener: (err: Error) => void): this; - prependListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; - prependListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; - prependListener(event: "localSettings", listener: (settings: Settings) => void): this; - prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this; - prependListener(event: "timeout", listener: () => void): this; - prependListener(event: "ping", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "error", listener: (err: Error) => void): this; - prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; - prependOnceListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; - prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this; - prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this; - prependOnceListener(event: "timeout", listener: () => void): this; - prependOnceListener(event: "ping", listener: () => void): this; - } - - export interface ClientHttp2Session extends Http2Session { - request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream; - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; - addListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - addListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "altsvc", alt: string, origin: string, stream: number): boolean; - emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; - emit(event: "stream", stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; - on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - on(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; - once(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - once(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; - prependListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - prependListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; - prependOnceListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - prependOnceListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this; - } - - export interface AlternativeServiceOptions { - origin: number | string | url.URL; - } - - export interface ServerHttp2Session extends Http2Session { - altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void; - readonly server: Http2Server | Http2SecureServer; - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; - emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; - prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - } - - // Http2Server - - export interface SessionOptions { - maxDeflateDynamicTableSize?: number; - maxReservedRemoteStreams?: number; - maxSendHeaderBlockLength?: number; - paddingStrategy?: number; - peerMaxConcurrentStreams?: number; - selectPadding?: (frameLen: number, maxFrameLen: number) => number; - settings?: Settings; - } - - export type ClientSessionOptions = SessionOptions; - export type ServerSessionOptions = SessionOptions; - - export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions { } - export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions { } - - export interface ServerOptions extends ServerSessionOptions { - allowHTTP1?: boolean; - } - - export interface SecureServerOptions extends SecureServerSessionOptions { - allowHTTP1?: boolean; - } - - export interface Http2Server extends net.Server { - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - addListener(event: "sessionError", listener: (err: Error) => void): this; - addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - addListener(event: "timeout", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; - emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; - emit(event: "sessionError", err: Error): boolean; - emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; - emit(event: "timeout"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - on(event: "sessionError", listener: (err: Error) => void): this; - on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - on(event: "timeout", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - once(event: "sessionError", listener: (err: Error) => void): this; - once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - once(event: "timeout", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependListener(event: "sessionError", listener: (err: Error) => void): this; - prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - prependListener(event: "timeout", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; - prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - prependOnceListener(event: "timeout", listener: () => void): this; - } - - export interface Http2SecureServer extends tls.Server { - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - addListener(event: "sessionError", listener: (err: Error) => void): this; - addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - addListener(event: "timeout", listener: () => void): this; - addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; - emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; - emit(event: "sessionError", err: Error): boolean; - emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; - emit(event: "timeout"): boolean; - emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - on(event: "sessionError", listener: (err: Error) => void): this; - on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - on(event: "timeout", listener: () => void): this; - on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - once(event: "sessionError", listener: (err: Error) => void): this; - once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - once(event: "timeout", listener: () => void): this; - once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependListener(event: "sessionError", listener: (err: Error) => void): this; - prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - prependListener(event: "timeout", listener: () => void): this; - prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; - prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; - prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this; - prependOnceListener(event: "timeout", listener: () => void): this; - prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; - } - - export class Http2ServerRequest extends stream.Readable { - private constructor(); - headers: IncomingHttpHeaders; - httpVersion: string; - method: string; - rawHeaders: string[]; - rawTrailers: string[]; - setTimeout(msecs: number, callback?: () => void): void; - socket: net.Socket | tls.TLSSocket; - stream: ServerHttp2Stream; - trailers: IncomingHttpHeaders; - url: string; - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "aborted", hadError: boolean, code: number): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - } - - export class Http2ServerResponse extends events.EventEmitter { - private constructor(); - addTrailers(trailers: OutgoingHttpHeaders): void; - connection: net.Socket | tls.TLSSocket; - end(callback?: () => void): void; - end(data?: string | Buffer, callback?: () => void): void; - end(data?: string | Buffer, encoding?: string, callback?: () => void): void; - readonly finished: boolean; - getHeader(name: string): string; - getHeaderNames(): string[]; - getHeaders(): OutgoingHttpHeaders; - hasHeader(name: string): boolean; - readonly headersSent: boolean; - removeHeader(name: string): void; - sendDate: boolean; - setHeader(name: string, value: number | string | string[]): void; - setTimeout(msecs: number, callback?: () => void): void; - socket: net.Socket | tls.TLSSocket; - statusCode: number; - statusMessage: ''; - stream: ServerHttp2Stream; - write(chunk: string | Buffer, callback?: (err: Error) => void): boolean; - write(chunk: string | Buffer, encoding?: string, callback?: (err: Error) => void): boolean; - writeContinue(): void; - writeHead(statusCode: number, headers?: OutgoingHttpHeaders): void; - writeHead(statusCode: number, statusMessage?: string, headers?: OutgoingHttpHeaders): void; - createPushResponse(headers: OutgoingHttpHeaders, callback: (err: Error | null, res: Http2ServerResponse) => void): void; - - addListener(event: string, listener: (...args: any[]) => void): this; - addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - addListener(event: "close", listener: () => void): this; - addListener(event: "drain", listener: () => void): this; - addListener(event: "error", listener: (error: Error) => void): this; - addListener(event: "finish", listener: () => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "aborted", hadError: boolean, code: number): boolean; - emit(event: "close"): boolean; - emit(event: "drain"): boolean; - emit(event: "error", error: Error): boolean; - emit(event: "finish"): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - on(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - on(event: "close", listener: () => void): this; - on(event: "drain", listener: () => void): this; - on(event: "error", listener: (error: Error) => void): this; - on(event: "finish", listener: () => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - once(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - once(event: "close", listener: () => void): this; - once(event: "drain", listener: () => void): this; - once(event: "error", listener: (error: Error) => void): this; - once(event: "finish", listener: () => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - prependListener(event: "close", listener: () => void): this; - prependListener(event: "drain", listener: () => void): this; - prependListener(event: "error", listener: (error: Error) => void): this; - prependListener(event: "finish", listener: () => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; - prependOnceListener(event: "close", listener: () => void): this; - prependOnceListener(event: "drain", listener: () => void): this; - prependOnceListener(event: "error", listener: (error: Error) => void): this; - prependOnceListener(event: "finish", listener: () => void): this; - } - - // Public API - - export namespace constants { - const NGHTTP2_SESSION_SERVER: number; - const NGHTTP2_SESSION_CLIENT: number; - const NGHTTP2_STREAM_STATE_IDLE: number; - const NGHTTP2_STREAM_STATE_OPEN: number; - const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number; - const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number; - const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number; - const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number; - const NGHTTP2_STREAM_STATE_CLOSED: number; - const NGHTTP2_NO_ERROR: number; - const NGHTTP2_PROTOCOL_ERROR: number; - const NGHTTP2_INTERNAL_ERROR: number; - const NGHTTP2_FLOW_CONTROL_ERROR: number; - const NGHTTP2_SETTINGS_TIMEOUT: number; - const NGHTTP2_STREAM_CLOSED: number; - const NGHTTP2_FRAME_SIZE_ERROR: number; - const NGHTTP2_REFUSED_STREAM: number; - const NGHTTP2_CANCEL: number; - const NGHTTP2_COMPRESSION_ERROR: number; - const NGHTTP2_CONNECT_ERROR: number; - const NGHTTP2_ENHANCE_YOUR_CALM: number; - const NGHTTP2_INADEQUATE_SECURITY: number; - const NGHTTP2_HTTP_1_1_REQUIRED: number; - const NGHTTP2_ERR_FRAME_SIZE_ERROR: number; - const NGHTTP2_FLAG_NONE: number; - const NGHTTP2_FLAG_END_STREAM: number; - const NGHTTP2_FLAG_END_HEADERS: number; - const NGHTTP2_FLAG_ACK: number; - const NGHTTP2_FLAG_PADDED: number; - const NGHTTP2_FLAG_PRIORITY: number; - const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number; - const DEFAULT_SETTINGS_ENABLE_PUSH: number; - const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number; - const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number; - const MAX_MAX_FRAME_SIZE: number; - const MIN_MAX_FRAME_SIZE: number; - const MAX_INITIAL_WINDOW_SIZE: number; - const NGHTTP2_DEFAULT_WEIGHT: number; - const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number; - const NGHTTP2_SETTINGS_ENABLE_PUSH: number; - const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number; - const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number; - const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number; - const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number; - const PADDING_STRATEGY_NONE: number; - const PADDING_STRATEGY_MAX: number; - const PADDING_STRATEGY_CALLBACK: number; - const HTTP2_HEADER_STATUS: string; - const HTTP2_HEADER_METHOD: string; - const HTTP2_HEADER_AUTHORITY: string; - const HTTP2_HEADER_SCHEME: string; - const HTTP2_HEADER_PATH: string; - const HTTP2_HEADER_ACCEPT_CHARSET: string; - const HTTP2_HEADER_ACCEPT_ENCODING: string; - const HTTP2_HEADER_ACCEPT_LANGUAGE: string; - const HTTP2_HEADER_ACCEPT_RANGES: string; - const HTTP2_HEADER_ACCEPT: string; - const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string; - const HTTP2_HEADER_AGE: string; - const HTTP2_HEADER_ALLOW: string; - const HTTP2_HEADER_AUTHORIZATION: string; - const HTTP2_HEADER_CACHE_CONTROL: string; - const HTTP2_HEADER_CONNECTION: string; - const HTTP2_HEADER_CONTENT_DISPOSITION: string; - const HTTP2_HEADER_CONTENT_ENCODING: string; - const HTTP2_HEADER_CONTENT_LANGUAGE: string; - const HTTP2_HEADER_CONTENT_LENGTH: string; - const HTTP2_HEADER_CONTENT_LOCATION: string; - const HTTP2_HEADER_CONTENT_MD5: string; - const HTTP2_HEADER_CONTENT_RANGE: string; - const HTTP2_HEADER_CONTENT_TYPE: string; - const HTTP2_HEADER_COOKIE: string; - const HTTP2_HEADER_DATE: string; - const HTTP2_HEADER_ETAG: string; - const HTTP2_HEADER_EXPECT: string; - const HTTP2_HEADER_EXPIRES: string; - const HTTP2_HEADER_FROM: string; - const HTTP2_HEADER_HOST: string; - const HTTP2_HEADER_IF_MATCH: string; - const HTTP2_HEADER_IF_MODIFIED_SINCE: string; - const HTTP2_HEADER_IF_NONE_MATCH: string; - const HTTP2_HEADER_IF_RANGE: string; - const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string; - const HTTP2_HEADER_LAST_MODIFIED: string; - const HTTP2_HEADER_LINK: string; - const HTTP2_HEADER_LOCATION: string; - const HTTP2_HEADER_MAX_FORWARDS: string; - const HTTP2_HEADER_PREFER: string; - const HTTP2_HEADER_PROXY_AUTHENTICATE: string; - const HTTP2_HEADER_PROXY_AUTHORIZATION: string; - const HTTP2_HEADER_RANGE: string; - const HTTP2_HEADER_REFERER: string; - const HTTP2_HEADER_REFRESH: string; - const HTTP2_HEADER_RETRY_AFTER: string; - const HTTP2_HEADER_SERVER: string; - const HTTP2_HEADER_SET_COOKIE: string; - const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string; - const HTTP2_HEADER_TRANSFER_ENCODING: string; - const HTTP2_HEADER_TE: string; - const HTTP2_HEADER_UPGRADE: string; - const HTTP2_HEADER_USER_AGENT: string; - const HTTP2_HEADER_VARY: string; - const HTTP2_HEADER_VIA: string; - const HTTP2_HEADER_WWW_AUTHENTICATE: string; - const HTTP2_HEADER_HTTP2_SETTINGS: string; - const HTTP2_HEADER_KEEP_ALIVE: string; - const HTTP2_HEADER_PROXY_CONNECTION: string; - const HTTP2_METHOD_ACL: string; - const HTTP2_METHOD_BASELINE_CONTROL: string; - const HTTP2_METHOD_BIND: string; - const HTTP2_METHOD_CHECKIN: string; - const HTTP2_METHOD_CHECKOUT: string; - const HTTP2_METHOD_CONNECT: string; - const HTTP2_METHOD_COPY: string; - const HTTP2_METHOD_DELETE: string; - const HTTP2_METHOD_GET: string; - const HTTP2_METHOD_HEAD: string; - const HTTP2_METHOD_LABEL: string; - const HTTP2_METHOD_LINK: string; - const HTTP2_METHOD_LOCK: string; - const HTTP2_METHOD_MERGE: string; - const HTTP2_METHOD_MKACTIVITY: string; - const HTTP2_METHOD_MKCALENDAR: string; - const HTTP2_METHOD_MKCOL: string; - const HTTP2_METHOD_MKREDIRECTREF: string; - const HTTP2_METHOD_MKWORKSPACE: string; - const HTTP2_METHOD_MOVE: string; - const HTTP2_METHOD_OPTIONS: string; - const HTTP2_METHOD_ORDERPATCH: string; - const HTTP2_METHOD_PATCH: string; - const HTTP2_METHOD_POST: string; - const HTTP2_METHOD_PRI: string; - const HTTP2_METHOD_PROPFIND: string; - const HTTP2_METHOD_PROPPATCH: string; - const HTTP2_METHOD_PUT: string; - const HTTP2_METHOD_REBIND: string; - const HTTP2_METHOD_REPORT: string; - const HTTP2_METHOD_SEARCH: string; - const HTTP2_METHOD_TRACE: string; - const HTTP2_METHOD_UNBIND: string; - const HTTP2_METHOD_UNCHECKOUT: string; - const HTTP2_METHOD_UNLINK: string; - const HTTP2_METHOD_UNLOCK: string; - const HTTP2_METHOD_UPDATE: string; - const HTTP2_METHOD_UPDATEREDIRECTREF: string; - const HTTP2_METHOD_VERSION_CONTROL: string; - const HTTP_STATUS_CONTINUE: number; - const HTTP_STATUS_SWITCHING_PROTOCOLS: number; - const HTTP_STATUS_PROCESSING: number; - const HTTP_STATUS_OK: number; - const HTTP_STATUS_CREATED: number; - const HTTP_STATUS_ACCEPTED: number; - const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number; - const HTTP_STATUS_NO_CONTENT: number; - const HTTP_STATUS_RESET_CONTENT: number; - const HTTP_STATUS_PARTIAL_CONTENT: number; - const HTTP_STATUS_MULTI_STATUS: number; - const HTTP_STATUS_ALREADY_REPORTED: number; - const HTTP_STATUS_IM_USED: number; - const HTTP_STATUS_MULTIPLE_CHOICES: number; - const HTTP_STATUS_MOVED_PERMANENTLY: number; - const HTTP_STATUS_FOUND: number; - const HTTP_STATUS_SEE_OTHER: number; - const HTTP_STATUS_NOT_MODIFIED: number; - const HTTP_STATUS_USE_PROXY: number; - const HTTP_STATUS_TEMPORARY_REDIRECT: number; - const HTTP_STATUS_PERMANENT_REDIRECT: number; - const HTTP_STATUS_BAD_REQUEST: number; - const HTTP_STATUS_UNAUTHORIZED: number; - const HTTP_STATUS_PAYMENT_REQUIRED: number; - const HTTP_STATUS_FORBIDDEN: number; - const HTTP_STATUS_NOT_FOUND: number; - const HTTP_STATUS_METHOD_NOT_ALLOWED: number; - const HTTP_STATUS_NOT_ACCEPTABLE: number; - const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number; - const HTTP_STATUS_REQUEST_TIMEOUT: number; - const HTTP_STATUS_CONFLICT: number; - const HTTP_STATUS_GONE: number; - const HTTP_STATUS_LENGTH_REQUIRED: number; - const HTTP_STATUS_PRECONDITION_FAILED: number; - const HTTP_STATUS_PAYLOAD_TOO_LARGE: number; - const HTTP_STATUS_URI_TOO_LONG: number; - const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number; - const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number; - const HTTP_STATUS_EXPECTATION_FAILED: number; - const HTTP_STATUS_TEAPOT: number; - const HTTP_STATUS_MISDIRECTED_REQUEST: number; - const HTTP_STATUS_UNPROCESSABLE_ENTITY: number; - const HTTP_STATUS_LOCKED: number; - const HTTP_STATUS_FAILED_DEPENDENCY: number; - const HTTP_STATUS_UNORDERED_COLLECTION: number; - const HTTP_STATUS_UPGRADE_REQUIRED: number; - const HTTP_STATUS_PRECONDITION_REQUIRED: number; - const HTTP_STATUS_TOO_MANY_REQUESTS: number; - const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number; - const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number; - const HTTP_STATUS_INTERNAL_SERVER_ERROR: number; - const HTTP_STATUS_NOT_IMPLEMENTED: number; - const HTTP_STATUS_BAD_GATEWAY: number; - const HTTP_STATUS_SERVICE_UNAVAILABLE: number; - const HTTP_STATUS_GATEWAY_TIMEOUT: number; - const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number; - const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number; - const HTTP_STATUS_INSUFFICIENT_STORAGE: number; - const HTTP_STATUS_LOOP_DETECTED: number; - const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number; - const HTTP_STATUS_NOT_EXTENDED: number; - const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number; - } - - export function getDefaultSettings(): Settings; - export function getPackedSettings(settings: Settings): Settings; - export function getUnpackedSettings(buf: Buffer | Uint8Array): Settings; - - export function createServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server; - export function createServer(options: ServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server; - - export function createSecureServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer; - export function createSecureServer(options: SecureServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer; - - export function connect(authority: string | url.URL, listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): ClientHttp2Session; - export function connect( - authority: string | url.URL, - options?: ClientSessionOptions | SecureClientSessionOptions, - listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, - ): ClientHttp2Session; -} - -declare module "perf_hooks" { - import { AsyncResource } from "async_hooks"; - - interface PerformanceEntry { - /** - * The total number of milliseconds elapsed for this entry. - * This value will not be meaningful for all Performance Entry types. - */ - readonly duration: number; - - /** - * The name of the performance entry. - */ - readonly name: string; - - /** - * The high resolution millisecond timestamp marking the starting time of the Performance Entry. - */ - readonly startTime: number; - - /** - * The type of the performance entry. - * Currently it may be one of: 'node', 'mark', 'measure', 'gc', or 'function'. - */ - readonly entryType: string; - - /** - * When performanceEntry.entryType is equal to 'gc', the performance.kind property identifies - * the type of garbage collection operation that occurred. - * The value may be one of perf_hooks.constants. - */ - readonly kind?: number; - } - - interface PerformanceNodeTiming extends PerformanceEntry { - /** - * The high resolution millisecond timestamp at which the Node.js process completed bootstrap. - */ - readonly bootstrapComplete: number; - - /** - * The high resolution millisecond timestamp at which cluster processing ended. - */ - readonly clusterSetupEnd: number; - - /** - * The high resolution millisecond timestamp at which cluster processing started. - */ - readonly clusterSetupStart: number; - - /** - * The high resolution millisecond timestamp at which the Node.js event loop exited. - */ - readonly loopExit: number; - - /** - * The high resolution millisecond timestamp at which the Node.js event loop started. - */ - readonly loopStart: number; - - /** - * The high resolution millisecond timestamp at which main module load ended. - */ - readonly moduleLoadEnd: number; - - /** - * The high resolution millisecond timestamp at which main module load started. - */ - readonly moduleLoadStart: number; - - /** - * The high resolution millisecond timestamp at which the Node.js process was initialized. - */ - readonly nodeStart: number; - - /** - * The high resolution millisecond timestamp at which preload module load ended. - */ - readonly preloadModuleLoadEnd: number; - - /** - * The high resolution millisecond timestamp at which preload module load started. - */ - readonly preloadModuleLoadStart: number; - - /** - * The high resolution millisecond timestamp at which third_party_main processing ended. - */ - readonly thirdPartyMainEnd: number; - - /** - * The high resolution millisecond timestamp at which third_party_main processing started. - */ - readonly thirdPartyMainStart: number; - - /** - * The high resolution millisecond timestamp at which the V8 platform was initialized. - */ - readonly v8Start: number; - } - - interface Performance { - /** - * If name is not provided, removes all PerformanceFunction objects from the Performance Timeline. - * If name is provided, removes entries with name. - * @param name - */ - clearFunctions(name?: string): void; - - /** - * If name is not provided, removes all PerformanceMark objects from the Performance Timeline. - * If name is provided, removes only the named mark. - * @param name - */ - clearMarks(name?: string): void; - - /** - * If name is not provided, removes all PerformanceMeasure objects from the Performance Timeline. - * If name is provided, removes only objects whose performanceEntry.name matches name. - */ - clearMeasures(name?: string): void; - - /** - * Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime. - * @return list of all PerformanceEntry objects - */ - getEntries(): PerformanceEntry[]; - - /** - * Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime - * whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type. - * @param name - * @param type - * @return list of all PerformanceEntry objects - */ - getEntriesByName(name: string, type?: string): PerformanceEntry[]; - - /** - * Returns a list of all PerformanceEntry objects in chronological order with respect to performanceEntry.startTime - * whose performanceEntry.entryType is equal to type. - * @param type - * @return list of all PerformanceEntry objects - */ - getEntriesByType(type: string): PerformanceEntry[]; - - /** - * Creates a new PerformanceMark entry in the Performance Timeline. - * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark', - * and whose performanceEntry.duration is always 0. - * Performance marks are used to mark specific significant moments in the Performance Timeline. - * @param name - */ - mark(name?: string): void; - - /** - * Creates a new PerformanceMeasure entry in the Performance Timeline. - * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', - * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. - * - * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify - * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, - * then startMark is set to timeOrigin by default. - * - * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp - * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. - * @param name - * @param startMark - * @param endMark - */ - measure(name: string, startMark: string, endMark: string): void; - - /** - * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones. - */ - readonly nodeTiming: PerformanceNodeTiming; - - /** - * @return the current high resolution millisecond timestamp - */ - now(): number; - - /** - * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured. - */ - readonly timeOrigin: number; - - /** - * Wraps a function within a new function that measures the running time of the wrapped function. - * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed. - * @param fn - */ - timerify any>(fn: T): T; - } - - interface PerformanceObserverEntryList { - /** - * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime. - */ - getEntries(): PerformanceEntry[]; - - /** - * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime - * whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type. - */ - getEntriesByName(name: string, type?: string): PerformanceEntry[]; - - /** - * @return Returns a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime - * whose performanceEntry.entryType is equal to type. - */ - getEntriesByType(type: string): PerformanceEntry[]; - } - - type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; - - class PerformanceObserver extends AsyncResource { - constructor(callback: PerformanceObserverCallback); - - /** - * Disconnects the PerformanceObserver instance from all notifications. - */ - disconnect(): void; - - /** - * Subscribes the PerformanceObserver instance to notifications of new PerformanceEntry instances identified by options.entryTypes. - * When options.buffered is false, the callback will be invoked once for every PerformanceEntry instance. - * Property buffered defaults to false. - * @param options - */ - observe(options: { entryTypes: string[], buffered?: boolean }): void; - } - - namespace constants { - const NODE_PERFORMANCE_GC_MAJOR: number; - const NODE_PERFORMANCE_GC_MINOR: number; - const NODE_PERFORMANCE_GC_INCREMENTAL: number; - const NODE_PERFORMANCE_GC_WEAKCB: number; - } - - const performance: Performance; -} diff --git a/truebit-implementation/node_modules/@types/node/inspector.d.ts b/truebit-implementation/node_modules/@types/node/inspector.d.ts deleted file mode 100644 index 3a2bb35a..00000000 --- a/truebit-implementation/node_modules/@types/node/inspector.d.ts +++ /dev/null @@ -1,2899 +0,0 @@ -// tslint:disable-next-line:dt-header -// Type definitions for inspector - -// These definitions are auto-generated. -// Please see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19330 -// for more information. - -/** - * The inspector module provides an API for interacting with the V8 inspector. - */ -// tslint:disable-next-line:no-single-declare-module -declare module "inspector" { - import { EventEmitter } from 'events'; - - interface InspectorNotification { - method: string; - params: T; - } - - namespace Console { - /** - * Console message. - */ - interface ConsoleMessage { - /** - * Message source. - */ - source: string; - /** - * Message severity. - */ - level: string; - /** - * Message text. - */ - text: string; - /** - * URL of the message origin. - */ - url?: string; - /** - * Line number in the resource that generated this message (1-based). - */ - line?: number; - /** - * Column number in the resource that generated this message (1-based). - */ - column?: number; - } - - interface MessageAddedEventDataType { - /** - * Console message that has been added. - */ - message: ConsoleMessage; - } - } - - namespace Debugger { - /** - * Breakpoint identifier. - */ - type BreakpointId = string; - - /** - * Call frame identifier. - */ - type CallFrameId = string; - - /** - * Location in the source code. - */ - interface Location { - /** - * Script identifier as reported in the `Debugger.scriptParsed`. - */ - scriptId: Runtime.ScriptId; - /** - * Line number in the script (0-based). - */ - lineNumber: number; - /** - * Column number in the script (0-based). - */ - columnNumber?: number; - } - - /** - * Location in the source code. - * @experimental - */ - interface ScriptPosition { - lineNumber: number; - columnNumber: number; - } - - /** - * JavaScript call frame. Array of call frames form the call stack. - */ - interface CallFrame { - /** - * Call frame identifier. This identifier is only valid while the virtual machine is paused. - */ - callFrameId: CallFrameId; - /** - * Name of the JavaScript function called on this call frame. - */ - functionName: string; - /** - * Location in the source code. - */ - functionLocation?: Location; - /** - * Location in the source code. - */ - location: Location; - /** - * JavaScript script name or url. - */ - url: string; - /** - * Scope chain for this call frame. - */ - scopeChain: Scope[]; - /** - * `this` object for this call frame. - */ - this: Runtime.RemoteObject; - /** - * The value being returned, if the function is at return point. - */ - returnValue?: Runtime.RemoteObject; - } - - /** - * Scope description. - */ - interface Scope { - /** - * Scope type. - */ - type: string; - /** - * Object representing the scope. For `global` and `with` scopes it represents the actual - * object; for the rest of the scopes, it is artificial transient object enumerating scope - * variables as its properties. - */ - object: Runtime.RemoteObject; - name?: string; - /** - * Location in the source code where scope starts - */ - startLocation?: Location; - /** - * Location in the source code where scope ends - */ - endLocation?: Location; - } - - /** - * Search match for resource. - */ - interface SearchMatch { - /** - * Line number in resource content. - */ - lineNumber: number; - /** - * Line with match content. - */ - lineContent: string; - } - - interface BreakLocation { - /** - * Script identifier as reported in the `Debugger.scriptParsed`. - */ - scriptId: Runtime.ScriptId; - /** - * Line number in the script (0-based). - */ - lineNumber: number; - /** - * Column number in the script (0-based). - */ - columnNumber?: number; - type?: string; - } - - interface ContinueToLocationParameterType { - /** - * Location to continue to. - */ - location: Location; - targetCallFrames?: string; - } - - interface EvaluateOnCallFrameParameterType { - /** - * Call frame identifier to evaluate on. - */ - callFrameId: CallFrameId; - /** - * Expression to evaluate. - */ - expression: string; - /** - * String object group name to put result into (allows rapid releasing resulting object handles - * using `releaseObjectGroup`). - */ - objectGroup?: string; - /** - * Specifies whether command line API should be available to the evaluated expression, defaults - * to false. - */ - includeCommandLineAPI?: boolean; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause - * execution. Overrides `setPauseOnException` state. - */ - silent?: boolean; - /** - * Whether the result is expected to be a JSON object that should be sent by value. - */ - returnByValue?: boolean; - /** - * Whether preview should be generated for the result. - * @experimental - */ - generatePreview?: boolean; - /** - * Whether to throw an exception if side effect cannot be ruled out during evaluation. - */ - throwOnSideEffect?: boolean; - /** - * Terminate execution after timing out (number of milliseconds). - * @experimental - */ - timeout?: Runtime.TimeDelta; - } - - interface GetPossibleBreakpointsParameterType { - /** - * Start of range to search possible breakpoint locations in. - */ - start: Location; - /** - * End of range to search possible breakpoint locations in (excluding). When not specified, end - * of scripts is used as end of range. - */ - end?: Location; - /** - * Only consider locations which are in the same (non-nested) function as start. - */ - restrictToFunction?: boolean; - } - - interface GetScriptSourceParameterType { - /** - * Id of the script to get source for. - */ - scriptId: Runtime.ScriptId; - } - - interface GetStackTraceParameterType { - stackTraceId: Runtime.StackTraceId; - } - - interface PauseOnAsyncCallParameterType { - /** - * Debugger will pause when async call with given stack trace is started. - */ - parentStackTraceId: Runtime.StackTraceId; - } - - interface RemoveBreakpointParameterType { - breakpointId: BreakpointId; - } - - interface RestartFrameParameterType { - /** - * Call frame identifier to evaluate on. - */ - callFrameId: CallFrameId; - } - - interface SearchInContentParameterType { - /** - * Id of the script to search in. - */ - scriptId: Runtime.ScriptId; - /** - * String to search for. - */ - query: string; - /** - * If true, search is case sensitive. - */ - caseSensitive?: boolean; - /** - * If true, treats string parameter as regex. - */ - isRegex?: boolean; - } - - interface SetAsyncCallStackDepthParameterType { - /** - * Maximum depth of async call stacks. Setting to `0` will effectively disable collecting async - * call stacks (default). - */ - maxDepth: number; - } - - interface SetBlackboxPatternsParameterType { - /** - * Array of regexps that will be used to check script url for blackbox state. - */ - patterns: string[]; - } - - interface SetBlackboxedRangesParameterType { - /** - * Id of the script. - */ - scriptId: Runtime.ScriptId; - positions: ScriptPosition[]; - } - - interface SetBreakpointParameterType { - /** - * Location to set breakpoint in. - */ - location: Location; - /** - * Expression to use as a breakpoint condition. When specified, debugger will only stop on the - * breakpoint if this expression evaluates to true. - */ - condition?: string; - } - - interface SetBreakpointByUrlParameterType { - /** - * Line number to set breakpoint at. - */ - lineNumber: number; - /** - * URL of the resources to set breakpoint on. - */ - url?: string; - /** - * Regex pattern for the URLs of the resources to set breakpoints on. Either `url` or - * `urlRegex` must be specified. - */ - urlRegex?: string; - /** - * Script hash of the resources to set breakpoint on. - */ - scriptHash?: string; - /** - * Offset in the line to set breakpoint at. - */ - columnNumber?: number; - /** - * Expression to use as a breakpoint condition. When specified, debugger will only stop on the - * breakpoint if this expression evaluates to true. - */ - condition?: string; - } - - interface SetBreakpointOnFunctionCallParameterType { - /** - * Function object id. - */ - objectId: Runtime.RemoteObjectId; - /** - * Expression to use as a breakpoint condition. When specified, debugger will - * stop on the breakpoint if this expression evaluates to true. - */ - condition?: string; - } - - interface SetBreakpointsActiveParameterType { - /** - * New value for breakpoints active state. - */ - active: boolean; - } - - interface SetPauseOnExceptionsParameterType { - /** - * Pause on exceptions mode. - */ - state: string; - } - - interface SetReturnValueParameterType { - /** - * New return value. - */ - newValue: Runtime.CallArgument; - } - - interface SetScriptSourceParameterType { - /** - * Id of the script to edit. - */ - scriptId: Runtime.ScriptId; - /** - * New content of the script. - */ - scriptSource: string; - /** - * If true the change will not actually be applied. Dry run may be used to get result - * description without actually modifying the code. - */ - dryRun?: boolean; - } - - interface SetSkipAllPausesParameterType { - /** - * New value for skip pauses state. - */ - skip: boolean; - } - - interface SetVariableValueParameterType { - /** - * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' - * scope types are allowed. Other scopes could be manipulated manually. - */ - scopeNumber: number; - /** - * Variable name. - */ - variableName: string; - /** - * New variable value. - */ - newValue: Runtime.CallArgument; - /** - * Id of callframe that holds variable. - */ - callFrameId: CallFrameId; - } - - interface StepIntoParameterType { - /** - * Debugger will issue additional Debugger.paused notification if any async task is scheduled - * before next pause. - * @experimental - */ - breakOnAsyncCall?: boolean; - } - - interface EnableReturnType { - /** - * Unique identifier of the debugger. - * @experimental - */ - debuggerId: Runtime.UniqueDebuggerId; - } - - interface EvaluateOnCallFrameReturnType { - /** - * Object wrapper for the evaluation result. - */ - result: Runtime.RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: Runtime.ExceptionDetails; - } - - interface GetPossibleBreakpointsReturnType { - /** - * List of the possible breakpoint locations. - */ - locations: BreakLocation[]; - } - - interface GetScriptSourceReturnType { - /** - * Script source. - */ - scriptSource: string; - } - - interface GetStackTraceReturnType { - stackTrace: Runtime.StackTrace; - } - - interface RestartFrameReturnType { - /** - * New stack trace. - */ - callFrames: CallFrame[]; - /** - * Async stack trace, if any. - */ - asyncStackTrace?: Runtime.StackTrace; - /** - * Async stack trace, if any. - * @experimental - */ - asyncStackTraceId?: Runtime.StackTraceId; - } - - interface SearchInContentReturnType { - /** - * List of search matches. - */ - result: SearchMatch[]; - } - - interface SetBreakpointReturnType { - /** - * Id of the created breakpoint for further reference. - */ - breakpointId: BreakpointId; - /** - * Location this breakpoint resolved into. - */ - actualLocation: Location; - } - - interface SetBreakpointByUrlReturnType { - /** - * Id of the created breakpoint for further reference. - */ - breakpointId: BreakpointId; - /** - * List of the locations this breakpoint resolved into upon addition. - */ - locations: Location[]; - } - - interface SetBreakpointOnFunctionCallReturnType { - /** - * Id of the created breakpoint for further reference. - */ - breakpointId: BreakpointId; - } - - interface SetScriptSourceReturnType { - /** - * New stack trace in case editing has happened while VM was stopped. - */ - callFrames?: CallFrame[]; - /** - * Whether current call stack was modified after applying the changes. - */ - stackChanged?: boolean; - /** - * Async stack trace, if any. - */ - asyncStackTrace?: Runtime.StackTrace; - /** - * Async stack trace, if any. - * @experimental - */ - asyncStackTraceId?: Runtime.StackTraceId; - /** - * Exception details if any. - */ - exceptionDetails?: Runtime.ExceptionDetails; - } - - interface BreakpointResolvedEventDataType { - /** - * Breakpoint unique identifier. - */ - breakpointId: BreakpointId; - /** - * Actual breakpoint location. - */ - location: Location; - } - - interface PausedEventDataType { - /** - * Call stack the virtual machine stopped on. - */ - callFrames: CallFrame[]; - /** - * Pause reason. - */ - reason: string; - /** - * Object containing break-specific auxiliary properties. - */ - data?: {}; - /** - * Hit breakpoints IDs - */ - hitBreakpoints?: string[]; - /** - * Async stack trace, if any. - */ - asyncStackTrace?: Runtime.StackTrace; - /** - * Async stack trace, if any. - * @experimental - */ - asyncStackTraceId?: Runtime.StackTraceId; - /** - * Just scheduled async call will have this stack trace as parent stack during async execution. - * This field is available only after `Debugger.stepInto` call with `breakOnAsynCall` flag. - * @experimental - */ - asyncCallStackTraceId?: Runtime.StackTraceId; - } - - interface ScriptFailedToParseEventDataType { - /** - * Identifier of the script parsed. - */ - scriptId: Runtime.ScriptId; - /** - * URL or name of the script parsed (if any). - */ - url: string; - /** - * Line offset of the script within the resource with given URL (for script tags). - */ - startLine: number; - /** - * Column offset of the script within the resource with given URL. - */ - startColumn: number; - /** - * Last line of the script. - */ - endLine: number; - /** - * Length of the last line of the script. - */ - endColumn: number; - /** - * Specifies script creation context. - */ - executionContextId: Runtime.ExecutionContextId; - /** - * Content hash of the script. - */ - hash: string; - /** - * Embedder-specific auxiliary data. - */ - executionContextAuxData?: {}; - /** - * URL of source map associated with script (if any). - */ - sourceMapURL?: string; - /** - * True, if this script has sourceURL. - */ - hasSourceURL?: boolean; - /** - * True, if this script is ES6 module. - */ - isModule?: boolean; - /** - * This script length. - */ - length?: number; - /** - * JavaScript top stack frame of where the script parsed event was triggered if available. - * @experimental - */ - stackTrace?: Runtime.StackTrace; - } - - interface ScriptParsedEventDataType { - /** - * Identifier of the script parsed. - */ - scriptId: Runtime.ScriptId; - /** - * URL or name of the script parsed (if any). - */ - url: string; - /** - * Line offset of the script within the resource with given URL (for script tags). - */ - startLine: number; - /** - * Column offset of the script within the resource with given URL. - */ - startColumn: number; - /** - * Last line of the script. - */ - endLine: number; - /** - * Length of the last line of the script. - */ - endColumn: number; - /** - * Specifies script creation context. - */ - executionContextId: Runtime.ExecutionContextId; - /** - * Content hash of the script. - */ - hash: string; - /** - * Embedder-specific auxiliary data. - */ - executionContextAuxData?: {}; - /** - * True, if this script is generated as a result of the live edit operation. - * @experimental - */ - isLiveEdit?: boolean; - /** - * URL of source map associated with script (if any). - */ - sourceMapURL?: string; - /** - * True, if this script has sourceURL. - */ - hasSourceURL?: boolean; - /** - * True, if this script is ES6 module. - */ - isModule?: boolean; - /** - * This script length. - */ - length?: number; - /** - * JavaScript top stack frame of where the script parsed event was triggered if available. - * @experimental - */ - stackTrace?: Runtime.StackTrace; - } - } - - namespace HeapProfiler { - /** - * Heap snapshot object id. - */ - type HeapSnapshotObjectId = string; - - /** - * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. - */ - interface SamplingHeapProfileNode { - /** - * Function location. - */ - callFrame: Runtime.CallFrame; - /** - * Allocations size in bytes for the node excluding children. - */ - selfSize: number; - /** - * Child nodes. - */ - children: SamplingHeapProfileNode[]; - } - - /** - * Profile. - */ - interface SamplingHeapProfile { - head: SamplingHeapProfileNode; - } - - interface AddInspectedHeapObjectParameterType { - /** - * Heap snapshot object id to be accessible by means of $x command line API. - */ - heapObjectId: HeapSnapshotObjectId; - } - - interface GetHeapObjectIdParameterType { - /** - * Identifier of the object to get heap object id for. - */ - objectId: Runtime.RemoteObjectId; - } - - interface GetObjectByHeapObjectIdParameterType { - objectId: HeapSnapshotObjectId; - /** - * Symbolic group name that can be used to release multiple objects. - */ - objectGroup?: string; - } - - interface StartSamplingParameterType { - /** - * Average sample interval in bytes. Poisson distribution is used for the intervals. The - * default value is 32768 bytes. - */ - samplingInterval?: number; - } - - interface StartTrackingHeapObjectsParameterType { - trackAllocations?: boolean; - } - - interface StopTrackingHeapObjectsParameterType { - /** - * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken - * when the tracking is stopped. - */ - reportProgress?: boolean; - } - - interface TakeHeapSnapshotParameterType { - /** - * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. - */ - reportProgress?: boolean; - } - - interface GetHeapObjectIdReturnType { - /** - * Id of the heap snapshot object corresponding to the passed remote object id. - */ - heapSnapshotObjectId: HeapSnapshotObjectId; - } - - interface GetObjectByHeapObjectIdReturnType { - /** - * Evaluation result. - */ - result: Runtime.RemoteObject; - } - - interface GetSamplingProfileReturnType { - /** - * Return the sampling profile being collected. - */ - profile: SamplingHeapProfile; - } - - interface StopSamplingReturnType { - /** - * Recorded sampling heap profile. - */ - profile: SamplingHeapProfile; - } - - interface AddHeapSnapshotChunkEventDataType { - chunk: string; - } - - interface HeapStatsUpdateEventDataType { - /** - * An array of triplets. Each triplet describes a fragment. The first integer is the fragment - * index, the second integer is a total count of objects for the fragment, the third integer is - * a total size of the objects for the fragment. - */ - statsUpdate: number[]; - } - - interface LastSeenObjectIdEventDataType { - lastSeenObjectId: number; - timestamp: number; - } - - interface ReportHeapSnapshotProgressEventDataType { - done: number; - total: number; - finished?: boolean; - } - } - - namespace Profiler { - /** - * Profile node. Holds callsite information, execution statistics and child nodes. - */ - interface ProfileNode { - /** - * Unique id of the node. - */ - id: number; - /** - * Function location. - */ - callFrame: Runtime.CallFrame; - /** - * Number of samples where this node was on top of the call stack. - */ - hitCount?: number; - /** - * Child node ids. - */ - children?: number[]; - /** - * The reason of being not optimized. The function may be deoptimized or marked as don't - * optimize. - */ - deoptReason?: string; - /** - * An array of source position ticks. - */ - positionTicks?: PositionTickInfo[]; - } - - /** - * Profile. - */ - interface Profile { - /** - * The list of profile nodes. First item is the root node. - */ - nodes: ProfileNode[]; - /** - * Profiling start timestamp in microseconds. - */ - startTime: number; - /** - * Profiling end timestamp in microseconds. - */ - endTime: number; - /** - * Ids of samples top nodes. - */ - samples?: number[]; - /** - * Time intervals between adjacent samples in microseconds. The first delta is relative to the - * profile startTime. - */ - timeDeltas?: number[]; - } - - /** - * Specifies a number of samples attributed to a certain source position. - */ - interface PositionTickInfo { - /** - * Source line number (1-based). - */ - line: number; - /** - * Number of samples attributed to the source line. - */ - ticks: number; - } - - /** - * Coverage data for a source range. - */ - interface CoverageRange { - /** - * JavaScript script source offset for the range start. - */ - startOffset: number; - /** - * JavaScript script source offset for the range end. - */ - endOffset: number; - /** - * Collected execution count of the source range. - */ - count: number; - } - - /** - * Coverage data for a JavaScript function. - */ - interface FunctionCoverage { - /** - * JavaScript function name. - */ - functionName: string; - /** - * Source ranges inside the function with coverage data. - */ - ranges: CoverageRange[]; - /** - * Whether coverage data for this function has block granularity. - */ - isBlockCoverage: boolean; - } - - /** - * Coverage data for a JavaScript script. - */ - interface ScriptCoverage { - /** - * JavaScript script id. - */ - scriptId: Runtime.ScriptId; - /** - * JavaScript script name or url. - */ - url: string; - /** - * Functions contained in the script that has coverage data. - */ - functions: FunctionCoverage[]; - } - - /** - * Describes a type collected during runtime. - * @experimental - */ - interface TypeObject { - /** - * Name of a type collected with type profiling. - */ - name: string; - } - - /** - * Source offset and types for a parameter or return value. - * @experimental - */ - interface TypeProfileEntry { - /** - * Source offset of the parameter or end of function for return values. - */ - offset: number; - /** - * The types for this parameter or return value. - */ - types: TypeObject[]; - } - - /** - * Type profile data collected during runtime for a JavaScript script. - * @experimental - */ - interface ScriptTypeProfile { - /** - * JavaScript script id. - */ - scriptId: Runtime.ScriptId; - /** - * JavaScript script name or url. - */ - url: string; - /** - * Type profile entries for parameters and return values of the functions in the script. - */ - entries: TypeProfileEntry[]; - } - - interface SetSamplingIntervalParameterType { - /** - * New sampling interval in microseconds. - */ - interval: number; - } - - interface StartPreciseCoverageParameterType { - /** - * Collect accurate call counts beyond simple 'covered' or 'not covered'. - */ - callCount?: boolean; - /** - * Collect block-based coverage. - */ - detailed?: boolean; - } - - interface GetBestEffortCoverageReturnType { - /** - * Coverage data for the current isolate. - */ - result: ScriptCoverage[]; - } - - interface StopReturnType { - /** - * Recorded profile. - */ - profile: Profile; - } - - interface TakePreciseCoverageReturnType { - /** - * Coverage data for the current isolate. - */ - result: ScriptCoverage[]; - } - - interface TakeTypeProfileReturnType { - /** - * Type profile for all scripts since startTypeProfile() was turned on. - */ - result: ScriptTypeProfile[]; - } - - interface ConsoleProfileFinishedEventDataType { - id: string; - /** - * Location of console.profileEnd(). - */ - location: Debugger.Location; - profile: Profile; - /** - * Profile title passed as an argument to console.profile(). - */ - title?: string; - } - - interface ConsoleProfileStartedEventDataType { - id: string; - /** - * Location of console.profile(). - */ - location: Debugger.Location; - /** - * Profile title passed as an argument to console.profile(). - */ - title?: string; - } - } - - namespace Runtime { - /** - * Unique script identifier. - */ - type ScriptId = string; - - /** - * Unique object identifier. - */ - type RemoteObjectId = string; - - /** - * Primitive value which cannot be JSON-stringified. Includes values `-0`, `NaN`, `Infinity`, - * `-Infinity`, and bigint literals. - */ - type UnserializableValue = string; - - /** - * Mirror object referencing original JavaScript object. - */ - interface RemoteObject { - /** - * Object type. - */ - type: string; - /** - * Object subtype hint. Specified for `object` type values only. - */ - subtype?: string; - /** - * Object class (constructor) name. Specified for `object` type values only. - */ - className?: string; - /** - * Remote object value in case of primitive values or JSON values (if it was requested). - */ - value?: any; - /** - * Primitive value which can not be JSON-stringified does not have `value`, but gets this - * property. - */ - unserializableValue?: UnserializableValue; - /** - * String representation of the object. - */ - description?: string; - /** - * Unique object identifier (for non-primitive values). - */ - objectId?: RemoteObjectId; - /** - * Preview containing abbreviated property values. Specified for `object` type values only. - * @experimental - */ - preview?: ObjectPreview; - /** - * @experimental - */ - customPreview?: CustomPreview; - } - - /** - * @experimental - */ - interface CustomPreview { - header: string; - hasBody: boolean; - formatterObjectId: RemoteObjectId; - bindRemoteObjectFunctionId: RemoteObjectId; - configObjectId?: RemoteObjectId; - } - - /** - * Object containing abbreviated remote object value. - * @experimental - */ - interface ObjectPreview { - /** - * Object type. - */ - type: string; - /** - * Object subtype hint. Specified for `object` type values only. - */ - subtype?: string; - /** - * String representation of the object. - */ - description?: string; - /** - * True iff some of the properties or entries of the original object did not fit. - */ - overflow: boolean; - /** - * List of the properties. - */ - properties: PropertyPreview[]; - /** - * List of the entries. Specified for `map` and `set` subtype values only. - */ - entries?: EntryPreview[]; - } - - /** - * @experimental - */ - interface PropertyPreview { - /** - * Property name. - */ - name: string; - /** - * Object type. Accessor means that the property itself is an accessor property. - */ - type: string; - /** - * User-friendly property value string. - */ - value?: string; - /** - * Nested value preview. - */ - valuePreview?: ObjectPreview; - /** - * Object subtype hint. Specified for `object` type values only. - */ - subtype?: string; - } - - /** - * @experimental - */ - interface EntryPreview { - /** - * Preview of the key. Specified for map-like collection entries. - */ - key?: ObjectPreview; - /** - * Preview of the value. - */ - value: ObjectPreview; - } - - /** - * Object property descriptor. - */ - interface PropertyDescriptor { - /** - * Property name or symbol description. - */ - name: string; - /** - * The value associated with the property. - */ - value?: RemoteObject; - /** - * True if the value associated with the property may be changed (data descriptors only). - */ - writable?: boolean; - /** - * A function which serves as a getter for the property, or `undefined` if there is no getter - * (accessor descriptors only). - */ - get?: RemoteObject; - /** - * A function which serves as a setter for the property, or `undefined` if there is no setter - * (accessor descriptors only). - */ - set?: RemoteObject; - /** - * True if the type of this property descriptor may be changed and if the property may be - * deleted from the corresponding object. - */ - configurable: boolean; - /** - * True if this property shows up during enumeration of the properties on the corresponding - * object. - */ - enumerable: boolean; - /** - * True if the result was thrown during the evaluation. - */ - wasThrown?: boolean; - /** - * True if the property is owned for the object. - */ - isOwn?: boolean; - /** - * Property symbol object, if the property is of the `symbol` type. - */ - symbol?: RemoteObject; - } - - /** - * Object internal property descriptor. This property isn't normally visible in JavaScript code. - */ - interface InternalPropertyDescriptor { - /** - * Conventional property name. - */ - name: string; - /** - * The value associated with the property. - */ - value?: RemoteObject; - } - - /** - * Represents function call argument. Either remote object id `objectId`, primitive `value`, - * unserializable primitive value or neither of (for undefined) them should be specified. - */ - interface CallArgument { - /** - * Primitive value or serializable javascript object. - */ - value?: any; - /** - * Primitive value which can not be JSON-stringified. - */ - unserializableValue?: UnserializableValue; - /** - * Remote object handle. - */ - objectId?: RemoteObjectId; - } - - /** - * Id of an execution context. - */ - type ExecutionContextId = number; - - /** - * Description of an isolated world. - */ - interface ExecutionContextDescription { - /** - * Unique id of the execution context. It can be used to specify in which execution context - * script evaluation should be performed. - */ - id: ExecutionContextId; - /** - * Execution context origin. - */ - origin: string; - /** - * Human readable name describing given context. - */ - name: string; - /** - * Embedder-specific auxiliary data. - */ - auxData?: {}; - } - - /** - * Detailed information about exception (or error) that was thrown during script compilation or - * execution. - */ - interface ExceptionDetails { - /** - * Exception id. - */ - exceptionId: number; - /** - * Exception text, which should be used together with exception object when available. - */ - text: string; - /** - * Line number of the exception location (0-based). - */ - lineNumber: number; - /** - * Column number of the exception location (0-based). - */ - columnNumber: number; - /** - * Script ID of the exception location. - */ - scriptId?: ScriptId; - /** - * URL of the exception location, to be used when the script was not reported. - */ - url?: string; - /** - * JavaScript stack trace if available. - */ - stackTrace?: StackTrace; - /** - * Exception object if available. - */ - exception?: RemoteObject; - /** - * Identifier of the context where exception happened. - */ - executionContextId?: ExecutionContextId; - } - - /** - * Number of milliseconds since epoch. - */ - type Timestamp = number; - - /** - * Number of milliseconds. - */ - type TimeDelta = number; - - /** - * Stack entry for runtime errors and assertions. - */ - interface CallFrame { - /** - * JavaScript function name. - */ - functionName: string; - /** - * JavaScript script id. - */ - scriptId: ScriptId; - /** - * JavaScript script name or url. - */ - url: string; - /** - * JavaScript script line number (0-based). - */ - lineNumber: number; - /** - * JavaScript script column number (0-based). - */ - columnNumber: number; - } - - /** - * Call frames for assertions or error messages. - */ - interface StackTrace { - /** - * String label of this stack trace. For async traces this may be a name of the function that - * initiated the async call. - */ - description?: string; - /** - * JavaScript function name. - */ - callFrames: CallFrame[]; - /** - * Asynchronous JavaScript stack trace that preceded this stack, if available. - */ - parent?: StackTrace; - /** - * Asynchronous JavaScript stack trace that preceded this stack, if available. - * @experimental - */ - parentId?: StackTraceId; - } - - /** - * Unique identifier of current debugger. - * @experimental - */ - type UniqueDebuggerId = string; - - /** - * If `debuggerId` is set stack trace comes from another debugger and can be resolved there. This - * allows to track cross-debugger calls. See `Runtime.StackTrace` and `Debugger.paused` for usages. - * @experimental - */ - interface StackTraceId { - id: string; - debuggerId?: UniqueDebuggerId; - } - - interface AwaitPromiseParameterType { - /** - * Identifier of the promise. - */ - promiseObjectId: RemoteObjectId; - /** - * Whether the result is expected to be a JSON object that should be sent by value. - */ - returnByValue?: boolean; - /** - * Whether preview should be generated for the result. - */ - generatePreview?: boolean; - } - - interface CallFunctionOnParameterType { - /** - * Declaration of the function to call. - */ - functionDeclaration: string; - /** - * Identifier of the object to call function on. Either objectId or executionContextId should - * be specified. - */ - objectId?: RemoteObjectId; - /** - * Call arguments. All call arguments must belong to the same JavaScript world as the target - * object. - */ - arguments?: CallArgument[]; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause - * execution. Overrides `setPauseOnException` state. - */ - silent?: boolean; - /** - * Whether the result is expected to be a JSON object which should be sent by value. - */ - returnByValue?: boolean; - /** - * Whether preview should be generated for the result. - * @experimental - */ - generatePreview?: boolean; - /** - * Whether execution should be treated as initiated by user in the UI. - */ - userGesture?: boolean; - /** - * Whether execution should `await` for resulting value and return once awaited promise is - * resolved. - */ - awaitPromise?: boolean; - /** - * Specifies execution context which global object will be used to call function on. Either - * executionContextId or objectId should be specified. - */ - executionContextId?: ExecutionContextId; - /** - * Symbolic group name that can be used to release multiple objects. If objectGroup is not - * specified and objectId is, objectGroup will be inherited from object. - */ - objectGroup?: string; - } - - interface CompileScriptParameterType { - /** - * Expression to compile. - */ - expression: string; - /** - * Source url to be set for the script. - */ - sourceURL: string; - /** - * Specifies whether the compiled script should be persisted. - */ - persistScript: boolean; - /** - * Specifies in which execution context to perform script run. If the parameter is omitted the - * evaluation will be performed in the context of the inspected page. - */ - executionContextId?: ExecutionContextId; - } - - interface EvaluateParameterType { - /** - * Expression to evaluate. - */ - expression: string; - /** - * Symbolic group name that can be used to release multiple objects. - */ - objectGroup?: string; - /** - * Determines whether Command Line API should be available during the evaluation. - */ - includeCommandLineAPI?: boolean; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause - * execution. Overrides `setPauseOnException` state. - */ - silent?: boolean; - /** - * Specifies in which execution context to perform evaluation. If the parameter is omitted the - * evaluation will be performed in the context of the inspected page. - */ - contextId?: ExecutionContextId; - /** - * Whether the result is expected to be a JSON object that should be sent by value. - */ - returnByValue?: boolean; - /** - * Whether preview should be generated for the result. - * @experimental - */ - generatePreview?: boolean; - /** - * Whether execution should be treated as initiated by user in the UI. - */ - userGesture?: boolean; - /** - * Whether execution should `await` for resulting value and return once awaited promise is - * resolved. - */ - awaitPromise?: boolean; - /** - * Whether to throw an exception if side effect cannot be ruled out during evaluation. - * @experimental - */ - throwOnSideEffect?: boolean; - /** - * Terminate execution after timing out (number of milliseconds). - * @experimental - */ - timeout?: TimeDelta; - } - - interface GetPropertiesParameterType { - /** - * Identifier of the object to return properties for. - */ - objectId: RemoteObjectId; - /** - * If true, returns properties belonging only to the element itself, not to its prototype - * chain. - */ - ownProperties?: boolean; - /** - * If true, returns accessor properties (with getter/setter) only; internal properties are not - * returned either. - * @experimental - */ - accessorPropertiesOnly?: boolean; - /** - * Whether preview should be generated for the results. - * @experimental - */ - generatePreview?: boolean; - } - - interface GlobalLexicalScopeNamesParameterType { - /** - * Specifies in which execution context to lookup global scope variables. - */ - executionContextId?: ExecutionContextId; - } - - interface QueryObjectsParameterType { - /** - * Identifier of the prototype to return objects for. - */ - prototypeObjectId: RemoteObjectId; - /** - * Symbolic group name that can be used to release the results. - */ - objectGroup?: string; - } - - interface ReleaseObjectParameterType { - /** - * Identifier of the object to release. - */ - objectId: RemoteObjectId; - } - - interface ReleaseObjectGroupParameterType { - /** - * Symbolic object group name. - */ - objectGroup: string; - } - - interface RunScriptParameterType { - /** - * Id of the script to run. - */ - scriptId: ScriptId; - /** - * Specifies in which execution context to perform script run. If the parameter is omitted the - * evaluation will be performed in the context of the inspected page. - */ - executionContextId?: ExecutionContextId; - /** - * Symbolic group name that can be used to release multiple objects. - */ - objectGroup?: string; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause - * execution. Overrides `setPauseOnException` state. - */ - silent?: boolean; - /** - * Determines whether Command Line API should be available during the evaluation. - */ - includeCommandLineAPI?: boolean; - /** - * Whether the result is expected to be a JSON object which should be sent by value. - */ - returnByValue?: boolean; - /** - * Whether preview should be generated for the result. - */ - generatePreview?: boolean; - /** - * Whether execution should `await` for resulting value and return once awaited promise is - * resolved. - */ - awaitPromise?: boolean; - } - - interface SetCustomObjectFormatterEnabledParameterType { - enabled: boolean; - } - - interface AwaitPromiseReturnType { - /** - * Promise result. Will contain rejected value if promise was rejected. - */ - result: RemoteObject; - /** - * Exception details if stack strace is available. - */ - exceptionDetails?: ExceptionDetails; - } - - interface CallFunctionOnReturnType { - /** - * Call result. - */ - result: RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails; - } - - interface CompileScriptReturnType { - /** - * Id of the script. - */ - scriptId?: ScriptId; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails; - } - - interface EvaluateReturnType { - /** - * Evaluation result. - */ - result: RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails; - } - - interface GetIsolateIdReturnType { - /** - * The isolate id. - */ - id: string; - } - - interface GetHeapUsageReturnType { - /** - * Used heap size in bytes. - */ - usedSize: number; - /** - * Allocated heap size in bytes. - */ - totalSize: number; - } - - interface GetPropertiesReturnType { - /** - * Object properties. - */ - result: PropertyDescriptor[]; - /** - * Internal object properties (only of the element itself). - */ - internalProperties?: InternalPropertyDescriptor[]; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails; - } - - interface GlobalLexicalScopeNamesReturnType { - names: string[]; - } - - interface QueryObjectsReturnType { - /** - * Array with objects. - */ - objects: RemoteObject; - } - - interface RunScriptReturnType { - /** - * Run result. - */ - result: RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails; - } - - interface ConsoleAPICalledEventDataType { - /** - * Type of the call. - */ - type: string; - /** - * Call arguments. - */ - args: RemoteObject[]; - /** - * Identifier of the context where the call was made. - */ - executionContextId: ExecutionContextId; - /** - * Call timestamp. - */ - timestamp: Timestamp; - /** - * Stack trace captured when the call was made. - */ - stackTrace?: StackTrace; - /** - * Console context descriptor for calls on non-default console context (not console.*): - * 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call - * on named context. - * @experimental - */ - context?: string; - } - - interface ExceptionRevokedEventDataType { - /** - * Reason describing why exception was revoked. - */ - reason: string; - /** - * The id of revoked exception, as reported in `exceptionThrown`. - */ - exceptionId: number; - } - - interface ExceptionThrownEventDataType { - /** - * Timestamp of the exception. - */ - timestamp: Timestamp; - exceptionDetails: ExceptionDetails; - } - - interface ExecutionContextCreatedEventDataType { - /** - * A newly created execution context. - */ - context: ExecutionContextDescription; - } - - interface ExecutionContextDestroyedEventDataType { - /** - * Id of the destroyed context - */ - executionContextId: ExecutionContextId; - } - - interface InspectRequestedEventDataType { - object: RemoteObject; - hints: {}; - } - } - - namespace Schema { - /** - * Description of the protocol domain. - */ - interface Domain { - /** - * Domain name. - */ - name: string; - /** - * Domain version. - */ - version: string; - } - - interface GetDomainsReturnType { - /** - * List of supported domains. - */ - domains: Domain[]; - } - } - - /** - * The inspector.Session is used for dispatching messages to the V8 inspector back-end and receiving message responses and notifications. - */ - class Session extends EventEmitter { - /** - * Create a new instance of the inspector.Session class. - * The inspector session needs to be connected through session.connect() before the messages can be dispatched to the inspector backend. - */ - constructor(); - - /** - * Connects a session to the inspector back-end. - * An exception will be thrown if there is already a connected session established either - * through the API or by a front-end connected to the Inspector WebSocket port. - */ - connect(): void; - - /** - * Immediately close the session. All pending message callbacks will be called with an error. - * session.connect() will need to be called to be able to send messages again. - * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints. - */ - disconnect(): void; - - /** - * Posts a message to the inspector back-end. callback will be notified when a response is received. - * callback is a function that accepts two optional arguments - error and message-specific result. - */ - post(method: string, params?: {}, callback?: (err: Error | null, params?: {}) => void): void; - post(method: string, callback?: (err: Error | null, params?: {}) => void): void; - - /** - * Does nothing. - */ - post(method: "Console.clearMessages", callback?: (err: Error | null) => void): void; - - /** - * Disables console domain, prevents further console messages from being reported to the client. - */ - post(method: "Console.disable", callback?: (err: Error | null) => void): void; - - /** - * Enables console domain, sends the messages collected so far to the client by means of the - * `messageAdded` notification. - */ - post(method: "Console.enable", callback?: (err: Error | null) => void): void; - /** - * Continues execution until specific location is reached. - */ - post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.continueToLocation", callback?: (err: Error | null) => void): void; - - /** - * Disables debugger for given page. - */ - post(method: "Debugger.disable", callback?: (err: Error | null) => void): void; - - /** - * Enables debugger for the given page. Clients should not assume that the debugging has been - * enabled until the result for this command is received. - */ - post(method: "Debugger.enable", callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; - - /** - * Evaluates expression on a given call frame. - */ - post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; - post(method: "Debugger.evaluateOnCallFrame", callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; - - /** - * Returns possible locations for breakpoint. scriptId in start and end range locations should be - * the same. - */ - post( - method: "Debugger.getPossibleBreakpoints", - params?: Debugger.GetPossibleBreakpointsParameterType, - callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void - ): void; - post(method: "Debugger.getPossibleBreakpoints", callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; - - /** - * Returns source for the script with given id. - */ - post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; - post(method: "Debugger.getScriptSource", callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; - - /** - * Returns stack trace with given `stackTraceId`. - * @experimental - */ - post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; - post(method: "Debugger.getStackTrace", callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; - - /** - * Stops on the next JavaScript statement. - */ - post(method: "Debugger.pause", callback?: (err: Error | null) => void): void; - - /** - * @experimental - */ - post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.pauseOnAsyncCall", callback?: (err: Error | null) => void): void; - - /** - * Removes JavaScript breakpoint. - */ - post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.removeBreakpoint", callback?: (err: Error | null) => void): void; - - /** - * Restarts particular call frame from the beginning. - */ - post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; - post(method: "Debugger.restartFrame", callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; - - /** - * Resumes JavaScript execution. - */ - post(method: "Debugger.resume", callback?: (err: Error | null) => void): void; - - /** - * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and - * Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled - * before next pause. Returns success when async task is actually scheduled, returns error if no - * task were scheduled or another scheduleStepIntoAsync was called. - * @experimental - */ - post(method: "Debugger.scheduleStepIntoAsync", callback?: (err: Error | null) => void): void; - - /** - * Searches for given string in script content. - */ - post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; - post(method: "Debugger.searchInContent", callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; - - /** - * Enables or disables async call stacks tracking. - */ - post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setAsyncCallStackDepth", callback?: (err: Error | null) => void): void; - - /** - * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in - * scripts with url matching one of the patterns. VM will try to leave blackboxed script by - * performing 'step in' several times, finally resorting to 'step out' if unsuccessful. - * @experimental - */ - post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setBlackboxPatterns", callback?: (err: Error | null) => void): void; - - /** - * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted - * scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. - * Positions array contains positions where blackbox state is changed. First interval isn't - * blackboxed. Array should be sorted. - * @experimental - */ - post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setBlackboxedRanges", callback?: (err: Error | null) => void): void; - - /** - * Sets JavaScript breakpoint at a given location. - */ - post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; - post(method: "Debugger.setBreakpoint", callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; - - /** - * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this - * command is issued, all existing parsed scripts will have breakpoints resolved and returned in - * `locations` property. Further matching script parsing will result in subsequent - * `breakpointResolved` events issued. This logical breakpoint will survive page reloads. - */ - post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; - post(method: "Debugger.setBreakpointByUrl", callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; - - /** - * Sets JavaScript breakpoint before each call to the given function. - * If another function was created from the same source as a given one, - * calling it will also trigger the breakpoint. - * @experimental - */ - post( - method: "Debugger.setBreakpointOnFunctionCall", - params?: Debugger.SetBreakpointOnFunctionCallParameterType, - callback?: (err: Error | null, params: Debugger.SetBreakpointOnFunctionCallReturnType) => void - ): void; - post(method: "Debugger.setBreakpointOnFunctionCall", callback?: (err: Error | null, params: Debugger.SetBreakpointOnFunctionCallReturnType) => void): void; - - /** - * Activates / deactivates all breakpoints on the page. - */ - post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setBreakpointsActive", callback?: (err: Error | null) => void): void; - - /** - * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or - * no exceptions. Initial pause on exceptions state is `none`. - */ - post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setPauseOnExceptions", callback?: (err: Error | null) => void): void; - - /** - * Changes return value in top frame. Available only at return break position. - * @experimental - */ - post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setReturnValue", callback?: (err: Error | null) => void): void; - - /** - * Edits JavaScript source live. - */ - post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; - post(method: "Debugger.setScriptSource", callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; - - /** - * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). - */ - post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setSkipAllPauses", callback?: (err: Error | null) => void): void; - - /** - * Changes value of variable in a callframe. Object-based scopes are not supported and must be - * mutated manually. - */ - post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setVariableValue", callback?: (err: Error | null) => void): void; - - /** - * Steps into the function call. - */ - post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.stepInto", callback?: (err: Error | null) => void): void; - - /** - * Steps out of the function call. - */ - post(method: "Debugger.stepOut", callback?: (err: Error | null) => void): void; - - /** - * Steps over the statement. - */ - post(method: "Debugger.stepOver", callback?: (err: Error | null) => void): void; - /** - * Enables console to refer to the node with given id via $x (see Command Line API for more details - * $x functions). - */ - post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.addInspectedHeapObject", callback?: (err: Error | null) => void): void; - - post(method: "HeapProfiler.collectGarbage", callback?: (err: Error | null) => void): void; - - post(method: "HeapProfiler.disable", callback?: (err: Error | null) => void): void; - - post(method: "HeapProfiler.enable", callback?: (err: Error | null) => void): void; - - post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; - post(method: "HeapProfiler.getHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; - - post( - method: "HeapProfiler.getObjectByHeapObjectId", - params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, - callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void - ): void; - post(method: "HeapProfiler.getObjectByHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; - - post(method: "HeapProfiler.getSamplingProfile", callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; - - post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.startSampling", callback?: (err: Error | null) => void): void; - - post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.startTrackingHeapObjects", callback?: (err: Error | null) => void): void; - - post(method: "HeapProfiler.stopSampling", callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; - - post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.stopTrackingHeapObjects", callback?: (err: Error | null) => void): void; - - post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.takeHeapSnapshot", callback?: (err: Error | null) => void): void; - post(method: "Profiler.disable", callback?: (err: Error | null) => void): void; - - post(method: "Profiler.enable", callback?: (err: Error | null) => void): void; - - /** - * Collect coverage data for the current isolate. The coverage data may be incomplete due to - * garbage collection. - */ - post(method: "Profiler.getBestEffortCoverage", callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; - - /** - * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. - */ - post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; - post(method: "Profiler.setSamplingInterval", callback?: (err: Error | null) => void): void; - - post(method: "Profiler.start", callback?: (err: Error | null) => void): void; - - /** - * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code - * coverage may be incomplete. Enabling prevents running optimized code and resets execution - * counters. - */ - post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; - post(method: "Profiler.startPreciseCoverage", callback?: (err: Error | null) => void): void; - - /** - * Enable type profile. - * @experimental - */ - post(method: "Profiler.startTypeProfile", callback?: (err: Error | null) => void): void; - - post(method: "Profiler.stop", callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; - - /** - * Disable precise code coverage. Disabling releases unnecessary execution count records and allows - * executing optimized code. - */ - post(method: "Profiler.stopPreciseCoverage", callback?: (err: Error | null) => void): void; - - /** - * Disable type profile. Disabling releases type profile data collected so far. - * @experimental - */ - post(method: "Profiler.stopTypeProfile", callback?: (err: Error | null) => void): void; - - /** - * Collect coverage data for the current isolate, and resets execution counters. Precise code - * coverage needs to have started. - */ - post(method: "Profiler.takePreciseCoverage", callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; - - /** - * Collect type profile. - * @experimental - */ - post(method: "Profiler.takeTypeProfile", callback?: (err: Error | null, params: Profiler.TakeTypeProfileReturnType) => void): void; - /** - * Add handler to promise with given promise object id. - */ - post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; - post(method: "Runtime.awaitPromise", callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; - - /** - * Calls function with given declaration on the given object. Object group of the result is - * inherited from the target object. - */ - post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; - post(method: "Runtime.callFunctionOn", callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; - - /** - * Compiles expression. - */ - post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; - post(method: "Runtime.compileScript", callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; - - /** - * Disables reporting of execution contexts creation. - */ - post(method: "Runtime.disable", callback?: (err: Error | null) => void): void; - - /** - * Discards collected exceptions and console API calls. - */ - post(method: "Runtime.discardConsoleEntries", callback?: (err: Error | null) => void): void; - - /** - * Enables reporting of execution contexts creation by means of `executionContextCreated` event. - * When the reporting gets enabled the event will be sent immediately for each existing execution - * context. - */ - post(method: "Runtime.enable", callback?: (err: Error | null) => void): void; - - /** - * Evaluates expression on global object. - */ - post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; - post(method: "Runtime.evaluate", callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; - - /** - * Returns the isolate id. - * @experimental - */ - post(method: "Runtime.getIsolateId", callback?: (err: Error | null, params: Runtime.GetIsolateIdReturnType) => void): void; - - /** - * Returns the JavaScript heap usage. - * It is the total usage of the corresponding isolate not scoped to a particular Runtime. - * @experimental - */ - post(method: "Runtime.getHeapUsage", callback?: (err: Error | null, params: Runtime.GetHeapUsageReturnType) => void): void; - - /** - * Returns properties of a given object. Object group of the result is inherited from the target - * object. - */ - post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; - post(method: "Runtime.getProperties", callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; - - /** - * Returns all let, const and class variables from global scope. - */ - post( - method: "Runtime.globalLexicalScopeNames", - params?: Runtime.GlobalLexicalScopeNamesParameterType, - callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void - ): void; - post(method: "Runtime.globalLexicalScopeNames", callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; - - post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; - post(method: "Runtime.queryObjects", callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; - - /** - * Releases remote object with given id. - */ - post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; - post(method: "Runtime.releaseObject", callback?: (err: Error | null) => void): void; - - /** - * Releases all remote objects that belong to a given group. - */ - post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; - post(method: "Runtime.releaseObjectGroup", callback?: (err: Error | null) => void): void; - - /** - * Tells inspected instance to run if it was waiting for debugger to attach. - */ - post(method: "Runtime.runIfWaitingForDebugger", callback?: (err: Error | null) => void): void; - - /** - * Runs script with given id in a given context. - */ - post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; - post(method: "Runtime.runScript", callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; - - /** - * @experimental - */ - post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; - post(method: "Runtime.setCustomObjectFormatterEnabled", callback?: (err: Error | null) => void): void; - - /** - * Terminate current or next JavaScript execution. - * Will cancel the termination when the outer-most script execution ends. - * @experimental - */ - post(method: "Runtime.terminateExecution", callback?: (err: Error | null) => void): void; - /** - * Returns supported domains. - */ - post(method: "Schema.getDomains", callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; - - // Events - - addListener(event: string, listener: (...args: any[]) => void): this; - - /** - * Emitted when any notification from the V8 Inspector is received. - */ - addListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; - - /** - * Issued when new console message is added. - */ - addListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - addListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine resumed execution. - */ - addListener(event: "Debugger.resumed", listener: () => void): this; - - /** - * Fired when virtual machine fails to parse the script. - */ - addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected - * scripts upon enabling debugger. - */ - addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - - addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend regularly sends a current value for last - * seen object id and corresponding timestamp. If the were changes in the heap since last event - * then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - - addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - - /** - * Sent when new profile recording is started using console.profile() call. - */ - addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when console API was called. - */ - addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when unhandled exception was revoked. - */ - addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when exception was thrown and unhandled. - */ - addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when new execution context is created. - */ - addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when execution context is destroyed. - */ - addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when all executionContexts were cleared in browser - */ - addListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API - * call). - */ - addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "inspectorNotification", message: InspectorNotification<{}>): boolean; - emit(event: "Console.messageAdded", message: InspectorNotification): boolean; - emit(event: "Debugger.breakpointResolved", message: InspectorNotification): boolean; - emit(event: "Debugger.paused", message: InspectorNotification): boolean; - emit(event: "Debugger.resumed"): boolean; - emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification): boolean; - emit(event: "Debugger.scriptParsed", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.resetProfiles"): boolean; - emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification): boolean; - emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification): boolean; - emit(event: "Runtime.consoleAPICalled", message: InspectorNotification): boolean; - emit(event: "Runtime.exceptionRevoked", message: InspectorNotification): boolean; - emit(event: "Runtime.exceptionThrown", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextCreated", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextsCleared"): boolean; - emit(event: "Runtime.inspectRequested", message: InspectorNotification): boolean; - - on(event: string, listener: (...args: any[]) => void): this; - - /** - * Emitted when any notification from the V8 Inspector is received. - */ - on(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; - - /** - * Issued when new console message is added. - */ - on(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - on(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine resumed execution. - */ - on(event: "Debugger.resumed", listener: () => void): this; - - /** - * Fired when virtual machine fails to parse the script. - */ - on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected - * scripts upon enabling debugger. - */ - on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - - on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend regularly sends a current value for last - * seen object id and corresponding timestamp. If the were changes in the heap since last event - * then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - - on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - on(event: "HeapProfiler.resetProfiles", listener: () => void): this; - on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - - /** - * Sent when new profile recording is started using console.profile() call. - */ - on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when console API was called. - */ - on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when unhandled exception was revoked. - */ - on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when exception was thrown and unhandled. - */ - on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when new execution context is created. - */ - on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when execution context is destroyed. - */ - on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when all executionContexts were cleared in browser - */ - on(event: "Runtime.executionContextsCleared", listener: () => void): this; - - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API - * call). - */ - on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - - once(event: string, listener: (...args: any[]) => void): this; - - /** - * Emitted when any notification from the V8 Inspector is received. - */ - once(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; - - /** - * Issued when new console message is added. - */ - once(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - once(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine resumed execution. - */ - once(event: "Debugger.resumed", listener: () => void): this; - - /** - * Fired when virtual machine fails to parse the script. - */ - once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected - * scripts upon enabling debugger. - */ - once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - - once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend regularly sends a current value for last - * seen object id and corresponding timestamp. If the were changes in the heap since last event - * then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - - once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - once(event: "HeapProfiler.resetProfiles", listener: () => void): this; - once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - - /** - * Sent when new profile recording is started using console.profile() call. - */ - once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when console API was called. - */ - once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when unhandled exception was revoked. - */ - once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when exception was thrown and unhandled. - */ - once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when new execution context is created. - */ - once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when execution context is destroyed. - */ - once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when all executionContexts were cleared in browser - */ - once(event: "Runtime.executionContextsCleared", listener: () => void): this; - - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API - * call). - */ - once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - - prependListener(event: string, listener: (...args: any[]) => void): this; - - /** - * Emitted when any notification from the V8 Inspector is received. - */ - prependListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; - - /** - * Issued when new console message is added. - */ - prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - prependListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine resumed execution. - */ - prependListener(event: "Debugger.resumed", listener: () => void): this; - - /** - * Fired when virtual machine fails to parse the script. - */ - prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected - * scripts upon enabling debugger. - */ - prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - - prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend regularly sends a current value for last - * seen object id and corresponding timestamp. If the were changes in the heap since last event - * then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - - prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - - /** - * Sent when new profile recording is started using console.profile() call. - */ - prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when console API was called. - */ - prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when unhandled exception was revoked. - */ - prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when exception was thrown and unhandled. - */ - prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when new execution context is created. - */ - prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when execution context is destroyed. - */ - prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when all executionContexts were cleared in browser - */ - prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API - * call). - */ - prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - - /** - * Emitted when any notification from the V8 Inspector is received. - */ - prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; - - /** - * Issued when new console message is added. - */ - prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when the virtual machine resumed execution. - */ - prependOnceListener(event: "Debugger.resumed", listener: () => void): this; - - /** - * Fired when virtual machine fails to parse the script. - */ - prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected - * scripts upon enabling debugger. - */ - prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - - prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - - /** - * If heap objects tracking has been started then backend regularly sends a current value for last - * seen object id and corresponding timestamp. If the were changes in the heap since last event - * then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - - prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - - /** - * Sent when new profile recording is started using console.profile() call. - */ - prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when console API was called. - */ - prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when unhandled exception was revoked. - */ - prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when exception was thrown and unhandled. - */ - prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when new execution context is created. - */ - prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when execution context is destroyed. - */ - prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - - /** - * Issued when all executionContexts were cleared in browser - */ - prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API - * call). - */ - prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - } - - // Top Level API - - /** - * Activate inspector on host and port. Equivalent to node --inspect=[[host:]port], but can be done programatically after node has started. - * If wait is true, will block until a client has connected to the inspect port and flow control has been passed to the debugger client. - * @param port Port to listen on for inspector connections. Optional, defaults to what was specified on the CLI. - * @param host Host to listen on for inspector connections. Optional, defaults to what was specified on the CLI. - * @param wait Block until a client has connected. Optional, defaults to false. - */ - function open(port?: number, host?: string, wait?: boolean): void; - - /** - * Deactivate the inspector. Blocks until there are no active connections. - */ - function close(): void; - - /** - * Return the URL of the active inspector, or undefined if there is none. - */ - function url(): string; -} diff --git a/truebit-implementation/node_modules/@types/node/package.json b/truebit-implementation/node_modules/@types/node/package.json deleted file mode 100644 index cc26a37d..00000000 --- a/truebit-implementation/node_modules/@types/node/package.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "_from": "@types/node@^10.3.2", - "_id": "@types/node@10.12.3", - "_inBundle": false, - "_integrity": "sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg==", - "_location": "/@types/node", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "@types/node@^10.3.2", - "name": "@types/node", - "escapedName": "@types%2fnode", - "scope": "@types", - "rawSpec": "^10.3.2", - "saveSpec": null, - "fetchSpec": "^10.3.2" - }, - "_requiredBy": [ - "/ethers" - ], - "_resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.3.tgz", - "_shasum": "3918b73ceed484e58367be5acb79d1775239e393", - "_spec": "@types/node@^10.3.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ethers", - "bugs": { - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Microsoft TypeScript", - "url": "https://github.com/Microsoft" - }, - { - "name": "DefinitelyTyped", - "url": "https://github.com/DefinitelyTyped" - }, - { - "name": "Alberto Schiabel", - "url": "https://github.com/jkomyno" - }, - { - "name": "Alexander T.", - "url": "https://github.com/a-tarasyuk" - }, - { - "name": "Alvis HT Tang", - "url": "https://github.com/alvis" - }, - { - "name": "Andrew Makarov", - "url": "https://github.com/r3nya" - }, - { - "name": "Bruno Scheufler", - "url": "https://github.com/brunoscheufler" - }, - { - "name": "Chigozirim C.", - "url": "https://github.com/smac89" - }, - { - "name": "Christian Vaagland Tellnes", - "url": "https://github.com/tellnes" - }, - { - "name": "Deividas Bakanas", - "url": "https://github.com/DeividasBakanas" - }, - { - "name": "Eugene Y. Q. Shen", - "url": "https://github.com/eyqs" - }, - { - "name": "Flarna", - "url": "https://github.com/Flarna" - }, - { - "name": "Hannes Magnusson", - "url": "https://github.com/Hannes-Magnusson-CK" - }, - { - "name": "Hoàng Văn Khải", - "url": "https://github.com/KSXGitHub" - }, - { - "name": "Huw", - "url": "https://github.com/hoo29" - }, - { - "name": "Kelvin Jin", - "url": "https://github.com/kjin" - }, - { - "name": "Klaus Meinhardt", - "url": "https://github.com/ajafff" - }, - { - "name": "Lishude", - "url": "https://github.com/islishude" - }, - { - "name": "Mariusz Wiktorczyk", - "url": "https://github.com/mwiktorczyk" - }, - { - "name": "Matthieu Sieben", - "url": "https://github.com/matthieusieben" - }, - { - "name": "Mohsen Azimi", - "url": "https://github.com/mohsen1" - }, - { - "name": "Nicolas Even", - "url": "https://github.com/n-e" - }, - { - "name": "Nicolas Voigt", - "url": "https://github.com/octo-sniffle" - }, - { - "name": "Parambir Singh", - "url": "https://github.com/parambirs" - }, - { - "name": "Sebastian Silbermann", - "url": "https://github.com/eps1lon" - }, - { - "name": "Simon Schick", - "url": "https://github.com/SimonSchick" - }, - { - "name": "Thomas den Hollander", - "url": "https://github.com/ThomasdenH" - }, - { - "name": "Wilco Bakker", - "url": "https://github.com/WilcoBakker" - }, - { - "name": "wwwy3y3", - "url": "https://github.com/wwwy3y3" - }, - { - "name": "Zane Hannan AU", - "url": "https://github.com/ZaneHannanAU" - }, - { - "name": "Jeremie Rodriguez", - "url": "https://github.com/jeremiergz" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "TypeScript definitions for Node.js", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped#readme", - "license": "MIT", - "main": "", - "name": "@types/node", - "repository": { - "type": "git", - "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git" - }, - "scripts": {}, - "typeScriptVersion": "2.0", - "types": "index", - "typesPublisherContentHash": "722f6fc61b2bfb97b7f958e6d406f546e83b1f9572318716d7e52c331c7bc7e6", - "version": "10.12.3" -} diff --git a/truebit-implementation/node_modules/accepts/HISTORY.md b/truebit-implementation/node_modules/accepts/HISTORY.md deleted file mode 100644 index f16c17a5..00000000 --- a/truebit-implementation/node_modules/accepts/HISTORY.md +++ /dev/null @@ -1,224 +0,0 @@ -1.3.5 / 2018-02-28 -================== - - * deps: mime-types@~2.1.18 - - deps: mime-db@~1.33.0 - -1.3.4 / 2017-08-22 -================== - - * deps: mime-types@~2.1.16 - - deps: mime-db@~1.29.0 - -1.3.3 / 2016-05-02 -================== - - * deps: mime-types@~2.1.11 - - deps: mime-db@~1.23.0 - * deps: negotiator@0.6.1 - - perf: improve `Accept` parsing speed - - perf: improve `Accept-Charset` parsing speed - - perf: improve `Accept-Encoding` parsing speed - - perf: improve `Accept-Language` parsing speed - -1.3.2 / 2016-03-08 -================== - - * deps: mime-types@~2.1.10 - - Fix extension of `application/dash+xml` - - Update primary extension for `audio/mp4` - - deps: mime-db@~1.22.0 - -1.3.1 / 2016-01-19 -================== - - * deps: mime-types@~2.1.9 - - deps: mime-db@~1.21.0 - -1.3.0 / 2015-09-29 -================== - - * deps: mime-types@~2.1.7 - - deps: mime-db@~1.19.0 - * deps: negotiator@0.6.0 - - Fix including type extensions in parameters in `Accept` parsing - - Fix parsing `Accept` parameters with quoted equals - - Fix parsing `Accept` parameters with quoted semicolons - - Lazy-load modules from main entry point - - perf: delay type concatenation until needed - - perf: enable strict mode - - perf: hoist regular expressions - - perf: remove closures getting spec properties - - perf: remove a closure from media type parsing - - perf: remove property delete from media type parsing - -1.2.13 / 2015-09-06 -=================== - - * deps: mime-types@~2.1.6 - - deps: mime-db@~1.18.0 - -1.2.12 / 2015-07-30 -=================== - - * deps: mime-types@~2.1.4 - - deps: mime-db@~1.16.0 - -1.2.11 / 2015-07-16 -=================== - - * deps: mime-types@~2.1.3 - - deps: mime-db@~1.15.0 - -1.2.10 / 2015-07-01 -=================== - - * deps: mime-types@~2.1.2 - - deps: mime-db@~1.14.0 - -1.2.9 / 2015-06-08 -================== - - * deps: mime-types@~2.1.1 - - perf: fix deopt during mapping - -1.2.8 / 2015-06-07 -================== - - * deps: mime-types@~2.1.0 - - deps: mime-db@~1.13.0 - * perf: avoid argument reassignment & argument slice - * perf: avoid negotiator recursive construction - * perf: enable strict mode - * perf: remove unnecessary bitwise operator - -1.2.7 / 2015-05-10 -================== - - * deps: negotiator@0.5.3 - - Fix media type parameter matching to be case-insensitive - -1.2.6 / 2015-05-07 -================== - - * deps: mime-types@~2.0.11 - - deps: mime-db@~1.9.1 - * deps: negotiator@0.5.2 - - Fix comparing media types with quoted values - - Fix splitting media types with quoted commas - -1.2.5 / 2015-03-13 -================== - - * deps: mime-types@~2.0.10 - - deps: mime-db@~1.8.0 - -1.2.4 / 2015-02-14 -================== - - * Support Node.js 0.6 - * deps: mime-types@~2.0.9 - - deps: mime-db@~1.7.0 - * deps: negotiator@0.5.1 - - Fix preference sorting to be stable for long acceptable lists - -1.2.3 / 2015-01-31 -================== - - * deps: mime-types@~2.0.8 - - deps: mime-db@~1.6.0 - -1.2.2 / 2014-12-30 -================== - - * deps: mime-types@~2.0.7 - - deps: mime-db@~1.5.0 - -1.2.1 / 2014-12-30 -================== - - * deps: mime-types@~2.0.5 - - deps: mime-db@~1.3.1 - -1.2.0 / 2014-12-19 -================== - - * deps: negotiator@0.5.0 - - Fix list return order when large accepted list - - Fix missing identity encoding when q=0 exists - - Remove dynamic building of Negotiator class - -1.1.4 / 2014-12-10 -================== - - * deps: mime-types@~2.0.4 - - deps: mime-db@~1.3.0 - -1.1.3 / 2014-11-09 -================== - - * deps: mime-types@~2.0.3 - - deps: mime-db@~1.2.0 - -1.1.2 / 2014-10-14 -================== - - * deps: negotiator@0.4.9 - - Fix error when media type has invalid parameter - -1.1.1 / 2014-09-28 -================== - - * deps: mime-types@~2.0.2 - - deps: mime-db@~1.1.0 - * deps: negotiator@0.4.8 - - Fix all negotiations to be case-insensitive - - Stable sort preferences of same quality according to client order - -1.1.0 / 2014-09-02 -================== - - * update `mime-types` - -1.0.7 / 2014-07-04 -================== - - * Fix wrong type returned from `type` when match after unknown extension - -1.0.6 / 2014-06-24 -================== - - * deps: negotiator@0.4.7 - -1.0.5 / 2014-06-20 -================== - - * fix crash when unknown extension given - -1.0.4 / 2014-06-19 -================== - - * use `mime-types` - -1.0.3 / 2014-06-11 -================== - - * deps: negotiator@0.4.6 - - Order by specificity when quality is the same - -1.0.2 / 2014-05-29 -================== - - * Fix interpretation when header not in request - * deps: pin negotiator@0.4.5 - -1.0.1 / 2014-01-18 -================== - - * Identity encoding isn't always acceptable - * deps: negotiator@~0.4.0 - -1.0.0 / 2013-12-27 -================== - - * Genesis diff --git a/truebit-implementation/node_modules/accepts/LICENSE b/truebit-implementation/node_modules/accepts/LICENSE deleted file mode 100644 index 06166077..00000000 --- a/truebit-implementation/node_modules/accepts/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/accepts/README.md b/truebit-implementation/node_modules/accepts/README.md deleted file mode 100644 index 6a2749a1..00000000 --- a/truebit-implementation/node_modules/accepts/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# accepts - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). -Extracted from [koa](https://www.npmjs.com/package/koa) for general use. - -In addition to negotiator, it allows: - -- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` - as well as `('text/html', 'application/json')`. -- Allows type shorthands such as `json`. -- Returns `false` when no types match -- Treats non-existent headers as `*` - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install accepts -``` - -## API - - - -```js -var accepts = require('accepts') -``` - -### accepts(req) - -Create a new `Accepts` object for the given `req`. - -#### .charset(charsets) - -Return the first accepted charset. If nothing in `charsets` is accepted, -then `false` is returned. - -#### .charsets() - -Return the charsets that the request accepts, in the order of the client's -preference (most preferred first). - -#### .encoding(encodings) - -Return the first accepted encoding. If nothing in `encodings` is accepted, -then `false` is returned. - -#### .encodings() - -Return the encodings that the request accepts, in the order of the client's -preference (most preferred first). - -#### .language(languages) - -Return the first accepted language. If nothing in `languages` is accepted, -then `false` is returned. - -#### .languages() - -Return the languages that the request accepts, in the order of the client's -preference (most preferred first). - -#### .type(types) - -Return the first accepted type (and it is returned as the same text as what -appears in the `types` array). If nothing in `types` is accepted, then `false` -is returned. - -The `types` array can contain full MIME types or file extensions. Any value -that is not a full MIME types is passed to `require('mime-types').lookup`. - -#### .types() - -Return the types that the request accepts, in the order of the client's -preference (most preferred first). - -## Examples - -### Simple type negotiation - -This simple example shows how to use `accepts` to return a different typed -respond body based on what the client wants to accept. The server lists it's -preferences in order and will get back the best match between the client and -server. - -```js -var accepts = require('accepts') -var http = require('http') - -function app (req, res) { - var accept = accepts(req) - - // the order of this list is significant; should be server preferred order - switch (accept.type(['json', 'html'])) { - case 'json': - res.setHeader('Content-Type', 'application/json') - res.write('{"hello":"world!"}') - break - case 'html': - res.setHeader('Content-Type', 'text/html') - res.write('hello, world!') - break - default: - // the fallback is text/plain, so no need to specify it above - res.setHeader('Content-Type', 'text/plain') - res.write('hello, world!') - break - } - - res.end() -} - -http.createServer(app).listen(3000) -``` - -You can test this out with the cURL program: -```sh -curl -I -H'Accept: text/html' http://localhost:3000/ -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/accepts.svg -[npm-url]: https://npmjs.org/package/accepts -[node-version-image]: https://img.shields.io/node/v/accepts.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg -[travis-url]: https://travis-ci.org/jshttp/accepts -[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/accepts -[downloads-image]: https://img.shields.io/npm/dm/accepts.svg -[downloads-url]: https://npmjs.org/package/accepts diff --git a/truebit-implementation/node_modules/accepts/index.js b/truebit-implementation/node_modules/accepts/index.js deleted file mode 100644 index e9b2f63f..00000000 --- a/truebit-implementation/node_modules/accepts/index.js +++ /dev/null @@ -1,238 +0,0 @@ -/*! - * accepts - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var Negotiator = require('negotiator') -var mime = require('mime-types') - -/** - * Module exports. - * @public - */ - -module.exports = Accepts - -/** - * Create a new Accepts object for the given req. - * - * @param {object} req - * @public - */ - -function Accepts (req) { - if (!(this instanceof Accepts)) { - return new Accepts(req) - } - - this.headers = req.headers - this.negotiator = new Negotiator(req) -} - -/** - * Check if the given `type(s)` is acceptable, returning - * the best match when true, otherwise `undefined`, in which - * case you should respond with 406 "Not Acceptable". - * - * The `type` value may be a single mime type string - * such as "application/json", the extension name - * such as "json" or an array `["json", "html", "text/plain"]`. When a list - * or array is given the _best_ match, if any is returned. - * - * Examples: - * - * // Accept: text/html - * this.types('html'); - * // => "html" - * - * // Accept: text/*, application/json - * this.types('html'); - * // => "html" - * this.types('text/html'); - * // => "text/html" - * this.types('json', 'text'); - * // => "json" - * this.types('application/json'); - * // => "application/json" - * - * // Accept: text/*, application/json - * this.types('image/png'); - * this.types('png'); - * // => undefined - * - * // Accept: text/*;q=.5, application/json - * this.types(['html', 'json']); - * this.types('html', 'json'); - * // => "json" - * - * @param {String|Array} types... - * @return {String|Array|Boolean} - * @public - */ - -Accepts.prototype.type = -Accepts.prototype.types = function (types_) { - var types = types_ - - // support flattened arguments - if (types && !Array.isArray(types)) { - types = new Array(arguments.length) - for (var i = 0; i < types.length; i++) { - types[i] = arguments[i] - } - } - - // no types, return all requested types - if (!types || types.length === 0) { - return this.negotiator.mediaTypes() - } - - // no accept header, return first given type - if (!this.headers.accept) { - return types[0] - } - - var mimes = types.map(extToMime) - var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)) - var first = accepts[0] - - return first - ? types[mimes.indexOf(first)] - : false -} - -/** - * Return accepted encodings or best fit based on `encodings`. - * - * Given `Accept-Encoding: gzip, deflate` - * an array sorted by quality is returned: - * - * ['gzip', 'deflate'] - * - * @param {String|Array} encodings... - * @return {String|Array} - * @public - */ - -Accepts.prototype.encoding = -Accepts.prototype.encodings = function (encodings_) { - var encodings = encodings_ - - // support flattened arguments - if (encodings && !Array.isArray(encodings)) { - encodings = new Array(arguments.length) - for (var i = 0; i < encodings.length; i++) { - encodings[i] = arguments[i] - } - } - - // no encodings, return all requested encodings - if (!encodings || encodings.length === 0) { - return this.negotiator.encodings() - } - - return this.negotiator.encodings(encodings)[0] || false -} - -/** - * Return accepted charsets or best fit based on `charsets`. - * - * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` - * an array sorted by quality is returned: - * - * ['utf-8', 'utf-7', 'iso-8859-1'] - * - * @param {String|Array} charsets... - * @return {String|Array} - * @public - */ - -Accepts.prototype.charset = -Accepts.prototype.charsets = function (charsets_) { - var charsets = charsets_ - - // support flattened arguments - if (charsets && !Array.isArray(charsets)) { - charsets = new Array(arguments.length) - for (var i = 0; i < charsets.length; i++) { - charsets[i] = arguments[i] - } - } - - // no charsets, return all requested charsets - if (!charsets || charsets.length === 0) { - return this.negotiator.charsets() - } - - return this.negotiator.charsets(charsets)[0] || false -} - -/** - * Return accepted languages or best fit based on `langs`. - * - * Given `Accept-Language: en;q=0.8, es, pt` - * an array sorted by quality is returned: - * - * ['es', 'pt', 'en'] - * - * @param {String|Array} langs... - * @return {Array|String} - * @public - */ - -Accepts.prototype.lang = -Accepts.prototype.langs = -Accepts.prototype.language = -Accepts.prototype.languages = function (languages_) { - var languages = languages_ - - // support flattened arguments - if (languages && !Array.isArray(languages)) { - languages = new Array(arguments.length) - for (var i = 0; i < languages.length; i++) { - languages[i] = arguments[i] - } - } - - // no languages, return all requested languages - if (!languages || languages.length === 0) { - return this.negotiator.languages() - } - - return this.negotiator.languages(languages)[0] || false -} - -/** - * Convert extnames to mime. - * - * @param {String} type - * @return {String} - * @private - */ - -function extToMime (type) { - return type.indexOf('/') === -1 - ? mime.lookup(type) - : type -} - -/** - * Check if mime is valid. - * - * @param {String} type - * @return {String} - * @private - */ - -function validMime (type) { - return typeof type === 'string' -} diff --git a/truebit-implementation/node_modules/accepts/package.json b/truebit-implementation/node_modules/accepts/package.json deleted file mode 100644 index da4810cb..00000000 --- a/truebit-implementation/node_modules/accepts/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_from": "accepts@~1.3.5", - "_id": "accepts@1.3.5", - "_inBundle": false, - "_integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "_location": "/accepts", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "accepts@~1.3.5", - "name": "accepts", - "escapedName": "accepts", - "rawSpec": "~1.3.5", - "saveSpec": null, - "fetchSpec": "~1.3.5" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "_shasum": "eb777df6011723a3b14e8a72c0805c8e86746bd2", - "_spec": "accepts@~1.3.5", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "bugs": { - "url": "https://github.com/jshttp/accepts/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "dependencies": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - }, - "deprecated": false, - "description": "Higher-level content negotiation", - "devDependencies": { - "eslint": "4.18.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.9.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "~1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/accepts#readme", - "keywords": [ - "content", - "negotiation", - "accept", - "accepts" - ], - "license": "MIT", - "name": "accepts", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/accepts.git" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.3.5" -} diff --git a/truebit-implementation/node_modules/aes-js/.npmignore b/truebit-implementation/node_modules/aes-js/.npmignore deleted file mode 100644 index c2658d7d..00000000 --- a/truebit-implementation/node_modules/aes-js/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/truebit-implementation/node_modules/aes-js/LICENSE.txt b/truebit-implementation/node_modules/aes-js/LICENSE.txt deleted file mode 100644 index 8a40a384..00000000 --- a/truebit-implementation/node_modules/aes-js/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Richard Moore - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/aes-js/README.md b/truebit-implementation/node_modules/aes-js/README.md deleted file mode 100644 index 5ab2e97a..00000000 --- a/truebit-implementation/node_modules/aes-js/README.md +++ /dev/null @@ -1,406 +0,0 @@ -AES-JS -====== - -[![npm version](https://badge.fury.io/js/aes-js.svg)](https://badge.fury.io/js/aes-js) - -A pure JavaScript implementation of the AES block cipher algorithm and all common modes of operation (CBC, CFB, CTR, ECB and OFB). - -Features --------- - -- Pure JavaScript (with no dependencies) -- Supports all key sizes (128-bit, 192-bit and 256-bit) -- Supports all common modes of operation (CBC, CFB, CTR, ECB and OFB) -- Works in either node.js or web browsers - -Migrating from 2.x to 3.x -------------------------- - -The utility functions have been renamed in the 3.x branch, since they were causing a great deal of confusion converting between bytes and string. - -The examples have also been updated to encode binary data as printable hex strings. - -**Strings and Bytes** - -Strings should **NOT** be used as keys. UTF-8 allows variable length, multi-byte characters, so a string that is 16 *characters* long may not be 16 *bytes* long. - -Also, UTF8 should **NOT** be used to store arbitrary binary data as it is a *string* encoding format, not a *binary* encoding format. - -```javascript -// aesjs.util.convertStringToBytes(aString) -// Becomes: -aesjs.utils.utf8.toBytes(aString) - - -// aesjs.util.convertBytesToString(aString) -// Becomes: -aesjs.utils.utf8.fromBytes(aString) -``` - -**Bytes and Hex strings** - -Binary data, such as encrypted bytes, can safely be stored and printed as hexidecimal strings. - -```javascript -// aesjs.util.convertStringToBytes(aString, 'hex') -// Becomes: -aesjs.utils.hex.toBytes(aString) - - -// aesjs.util.convertBytesToString(aString, 'hex') -// Becomes: -aesjs.utils.hex.fromBytes(aString) -``` - -**Typed Arrays** - -The 3.x and above versions of aes-js use [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) instead of Array, which reduces code size when used with Browserify (it no longer pulls in Buffer) and is also about **twice** the speed. - -However, if you need to support browsers older than IE 10, you should continue using version 2.x. - - -API -=== - -#### Node.js - -To install `aes-js` in your node.js project: - -``` -npm install aes-js -``` - -And to access it from within node, simply add: - -```javascript -var aesjs = require('aes-js'); -``` - -#### Web Browser - -To use `aes-js` in a web page, add the following: - -```html - -``` - -Keys ----- - -All keys must be 128 bits (16 bytes), 192 bits (24 bytes) or 256 bits (32 bytes) long. - -The library work with `Array`, `Uint8Array` and `Buffer` objects as well as any *array-like* object (i.e. must have a `length` property, and have a valid byte value for each entry). - -```javascript -// 128-bit, 192-bit and 256-bit keys -var key_128 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; -var key_192 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23]; -var key_256 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31]; - -// or, you may use Uint8Array: -var key_128_array = new Uint8Array(key_128); -var key_192_array = new Uint8Array(key_192); -var key_258_array = new Uint8Array(key_256); - -// or, you may use Buffer in node.js: -var key_128_buffer = new Buffer(key_128); -var key_192_buffer = new Buffer(key_192); -var key_258_buffer = new Buffer(key_256); -``` - - -To generate keys from simple-to-remember passwords, consider using a password-based key-derivation function such as [scrypt](https://www.npmjs.com/package/scrypt-js) or [bcrypt](https://www.npmjs.com/search?q=bcrypt). - - -Common Modes of Operation -------------------------- - -There are several modes of operations, each with various pros and cons. In general though, the **CBC** and **CTR** modes are recommended. The **ECB is NOT recommended.**, and is included primarily for completeness. - -### CTR - Counter (recommended) - -```javascript -// An example 128-bit key (16 bytes * 8 bits/byte = 128 bits) -var key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - -// Convert text to bytes -var text = 'Text may be any length you wish, no padding is required.'; -var textBytes = aesjs.utils.utf8.toBytes(text); - -// The counter is optional, and if omitted will begin at 1 -var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); -var encryptedBytes = aesCtr.encrypt(textBytes); - -// To print or store the binary data, you may convert it to hex -var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); -console.log(encryptedHex); -// "a338eda3874ed884b6199150d36f49988c90f5c47fe7792b0cf8c7f77eeffd87 -// ea145b73e82aefcf2076f881c88879e4e25b1d7b24ba2788" - -// When ready to decrypt the hex string, convert it back to bytes -var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex); - -// The counter mode of operation maintains internal state, so to -// decrypt a new instance must be instantiated. -var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); -var decryptedBytes = aesCtr.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); -console.log(decryptedText); -// "Text may be any length you wish, no padding is required." -``` - - -### CBC - Cipher-Block Chaining (recommended) - -```javascript -// An example 128-bit key -var key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - -// The initialization vector (must be 16 bytes) -var iv = [ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,35, 36 ]; - -// Convert text to bytes (text must be a multiple of 16 bytes) -var text = 'TextMustBe16Byte'; -var textBytes = aesjs.utils.utf8.toBytes(text); - -var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv); -var encryptedBytes = aesCbc.encrypt(textBytes); - -// To print or store the binary data, you may convert it to hex -var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); -console.log(encryptedHex); -// "104fb073f9a131f2cab49184bb864ca2" - -// When ready to decrypt the hex string, convert it back to bytes -var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex); - -// The cipher-block chaining mode of operation maintains internal -// state, so to decrypt a new instance must be instantiated. -var aesCbc = new aesjs.ModeOfOperation.cbc(key, iv); -var decryptedBytes = aesCbc.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); -console.log(decryptedText); -// "TextMustBe16Byte" -``` - - -### CFB - Cipher Feedback - -```javascript -// An example 128-bit key -var key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - -// The initialization vector (must be 16 bytes) -var iv = [ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,35, 36 ]; - -// Convert text to bytes (must be a multiple of the segment size you choose below) -var text = 'TextMustBeAMultipleOfSegmentSize'; -var textBytes = aesjs.utils.utf8.toBytes(text); - -// The segment size is optional, and defaults to 1 -var segmentSize = 8; -var aesCfb = new aesjs.ModeOfOperation.cfb(key, iv, segmentSize); -var encryptedBytes = aesCfb.encrypt(textBytes); - -// To print or store the binary data, you may convert it to hex -var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); -console.log(encryptedHex); -// "55e3af2638c560b4fdb9d26a630733ea60197ec23deb85b1f60f71f10409ce27" - -// When ready to decrypt the hex string, convert it back to bytes -var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex); - -// The cipher feedback mode of operation maintains internal state, -// so to decrypt a new instance must be instantiated. -var aesCfb = new aesjs.ModeOfOperation.cfb(key, iv, 8); -var decryptedBytes = aesCfb.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); -console.log(decryptedText); -// "TextMustBeAMultipleOfSegmentSize" -``` - - -### OFB - Output Feedback - -```javascript -// An example 128-bit key -var key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - -// The initialization vector (must be 16 bytes) -var iv = [ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,35, 36 ]; - -// Convert text to bytes -var text = 'Text may be any length you wish, no padding is required.'; -var textBytes = aesjs.utils.utf8.toBytes(text); - -var aesOfb = new aesjs.ModeOfOperation.ofb(key, iv); -var encryptedBytes = aesOfb.encrypt(textBytes); - -// To print or store the binary data, you may convert it to hex -var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); -console.log(encryptedHex); -// "55e3af2655dd72b9f32456042f39bae9accff6259159e608be55a1aa313c598d -// b4b18406d89c83841c9d1af13b56de8eda8fcfe9ec8e75e8" - -// When ready to decrypt the hex string, convert it back to bytes -var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex); - -// The output feedback mode of operation maintains internal state, -// so to decrypt a new instance must be instantiated. -var aesOfb = new aesjs.ModeOfOperation.ofb(key, iv); -var decryptedBytes = aesOfb.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); -console.log(decryptedText); -// "Text may be any length you wish, no padding is required." -``` - - -### ECB - Electronic Codebook (NOT recommended) - -This mode is **not** recommended. Since, for a given key, the same plaintext block in produces the same ciphertext block out, this mode of operation can leak data, such as patterns. For more details and examples, see the Wikipedia article, [Electronic Codebook](http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29). - -```javascript -// An example 128-bit key -var key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]; - -// Convert text to bytes -var text = 'TextMustBe16Byte'; -var textBytes = aesjs.utils.utf8.toBytes(text); - -var aesEcb = new aesjs.ModeOfOperation.ecb(key); -var encryptedBytes = aesEcb.encrypt(textBytes); - -// To print or store the binary data, you may convert it to hex -var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); -console.log(encryptedHex); -// "a7d93b35368519fac347498dec18b458" - -// When ready to decrypt the hex string, convert it back to bytes -var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex); - -// Since electronic codebook does not store state, we can -// reuse the same instance. -//var aesEcb = new aesjs.ModeOfOperation.ecb(key); -var decryptedBytes = aesEcb.decrypt(encryptedBytes); - -// Convert our bytes back into text -var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); -console.log(decryptedText); -// "TextMustBe16Byte" -``` - - - -Block Cipher ------------- - -You should usually use one of the above common modes of operation. Using the block cipher algorithm directly is also possible using **ECB** as that mode of operation is merely a thin wrapper. - -But this might be useful to experiment with custom modes of operation or play with block cipher algorithms. - -```javascript - -// the AES block cipher algorithm works on 16 byte bloca ks, no more, no less -var text = "ABlockIs16Bytes!"; -var textAsBytes = aesjs.utils.utf8.toBytes(text) -console.log(textAsBytes); -// [65, 66, 108, 111, 99, 107, 73, 115, 49, 54, 66, 121, 116, 101, 115, 33] - -// create an instance of the block cipher algorithm -var key = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3]; -var aes = new aesjs.AES(key); - -// encrypt... -var encryptedBytes = aes.encrypt(textAsBytes); -console.log(encryptedBytes); -// [136, 15, 199, 174, 118, 133, 233, 177, 143, 47, 42, 211, 96, 55, 107, 109] - -// To print or store the binary data, you may convert it to hex -var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); -console.log(encryptedHex); -// "880fc7ae7685e9b18f2f2ad360376b6d" - -// When ready to decrypt the hex string, convert it back to bytes -var encryptedBytes = aesjs.utils.hex.toBytes(encryptedHex); - -// decrypt... -var decryptedBytes = aes.decrypt(encryptedBytes); -console.log(decryptedBytes); -// [65, 66, 108, 111, 99, 107, 73, 115, 49, 54, 66, 121, 116, 101, 115, 33] - - -// decode the bytes back into our original text -var decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); -console.log(decryptedText); -// "ABlockIs16Bytes!" -``` - - -Notes -===== - -What is a Key -------------- - -This seems to be a point of confusion for many people new to using encryption. You can think of the key as the *"password"*. However, these algorithms require the *"password"* to be a specific length. - -With AES, there are three possible key lengths, 128-bit (16 bytes), 192-bit (24 bytes) or 256-bit (32 bytes). When you create an AES object, the key size is automatically detected, so it is important to pass in a key of the correct length. - -Often, you wish to provide a password of arbitrary length, for example, something easy to remember or write down. In these cases, you must come up with a way to transform the password into a key of a specific length. A **Password-Based Key Derivation Function** (PBKDF) is an algorithm designed for this exact purpose. - -Here is an example, using the popular (possibly obsolete?) pbkdf2: - -```javascript -var pbkdf2 = require('pbkdf2'); - -var key_128 = pbkdf2.pbkdf2Sync('password', 'salt', 1, 128 / 8, 'sha512'); -var key_192 = pbkdf2.pbkdf2Sync('password', 'salt', 1, 192 / 8, 'sha512'); -var key_256 = pbkdf2.pbkdf2Sync('password', 'salt', 1, 256 / 8, 'sha512'); -``` - -Another possibility, is to use a hashing function, such as SHA256 to hash the password, but this method is vulnerable to [Rainbow Attacks](http://en.wikipedia.org/wiki/Rainbow_table), unless you use a [salt](http://en.wikipedia.org/wiki/Salt_(cryptography)). - -Performance ------------ - -Todo... - -Tests ------ - -A test suite has been generated (`test/test-vectors.json`) from a known correct implementation, [pycrypto](https://www.dlitz.net/software/pycrypto/). To generate new test vectors, run `python generate-tests.py`. - -To run the node.js test suite: - -``` -npm test -``` - -To run the web browser tests, open the `test/test.html` file in your browser. - -FAQ ---- - -#### How do I get a question I have added? - -E-mail me at aes-js@ricmoo.com with any questions, suggestions, comments, et cetera. - - -Donations ---------- - -Obviously, it's all licensed under the MIT license, so use it as you wish; but if you'd like to buy me a coffee, I won't complain. =) - -- Bitcoin - `1K1Ax9t6uJmjE4X5xcoVuyVTsiLrYRqe2P` -- Ethereum - `0x70bDC274028F3f391E398dF8e3977De64FEcBf04` diff --git a/truebit-implementation/node_modules/aes-js/bower.json b/truebit-implementation/node_modules/aes-js/bower.json deleted file mode 100644 index 63b313d3..00000000 --- a/truebit-implementation/node_modules/aes-js/bower.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "aes-js", - "description": "A pure JavaScript implementation of the AES block cipher and all common modes of operation.", - "main": "index.js", - "authors": [ - "Richard Moore " - ], - "license": "MIT", - "keywords": [ - "aes", - "aes-ctr", - "aes-ofb", - "aes-ecb", - "aes-cbc", - "aes-cfb", - "encrypt", - "decrypt", - "block", - "cipher" - ], - "homepage": "https://github.com/ricmoo/aes-js", - "moduleType": [ - "globals" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/truebit-implementation/node_modules/aes-js/generate-tests.py b/truebit-implementation/node_modules/aes-js/generate-tests.py deleted file mode 100644 index 3e3bcc9e..00000000 --- a/truebit-implementation/node_modules/aes-js/generate-tests.py +++ /dev/null @@ -1,127 +0,0 @@ -# The MIT License (MIT) -# -# Copyright (c) 2014 Richard Moore -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# 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. - - -# This file is a modified version of the test suite for pyaes (https://www.github.com/ricmoo/pyaes/) - - -import json - -class NoIndent(object): - def __init__(self, value): - self.value = value - -def default(o, encoder=json.JSONEncoder()): - if isinstance(o, NoIndent): - return '__' + json.dumps(o.value) + '__' - return encoder.default(o) - - -import os, time - -Tests = [] - -# compare against a known working implementation -from Crypto.Cipher import AES as KAES -from Crypto.Util import Counter as KCounter -for mode in [ 'CBC', 'CTR', 'CFB', 'ECB', 'OFB' ]: - - (tt_ksetup, tt_kencrypt, tt_kdecrypt) = (0.0, 0.0, 0.0) - (tt_setup, tt_encrypt, tt_decrypt) = (0.0, 0.0, 0.0) - count = 0 - - for key_size in (128, 192, 256): - - for test in xrange(1, 8): - key = os.urandom(key_size // 8) - - iv = None - segment_size = None - - if mode == 'CBC': - iv = os.urandom(16) - - text_length = [None, 16, 16, 16, 32, 48, 64, 64, 64][test] - if test == 1: - plaintext = [ '' ] - else: - plaintext = [ os.urandom(text_length) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_CBC, IV = iv) - kaes2 = KAES.new(key, KAES.MODE_CBC, IV = iv) - - elif mode == 'CFB': - iv = os.urandom(16) - plaintext = [ os.urandom(test * 5) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_CFB, IV = iv, segment_size = test * 8) - kaes2 = KAES.new(key, KAES.MODE_CFB, IV = iv, segment_size = test * 8) - - segment_size = test - - elif mode == 'ECB': - text_length = [None, 16, 16, 16, 32, 48, 64, 64, 64][test] - if test == 1: - plaintext = [ '' ] - else: - plaintext = [ os.urandom(text_length) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_ECB) - kaes2 = KAES.new(key, KAES.MODE_ECB) - - elif mode == 'OFB': - iv = os.urandom(16) - plaintext = [ os.urandom(16) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_OFB, IV = iv) - kaes2 = KAES.new(key, KAES.MODE_OFB, IV = iv) - - elif mode == 'CTR': - text_length = [None, 3, 16, 127, 128, 129, 1500, 10000, 100000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008][test] - if test < 6: - plaintext = [ os.urandom(text_length) ] - else: - plaintext = [ os.urandom(text_length) for x in xrange(0, test) ] - - kaes = KAES.new(key, KAES.MODE_CTR, counter = KCounter.new(128, initial_value = 0)) - kaes2 = KAES.new(key, KAES.MODE_CTR, counter = KCounter.new(128, initial_value = 0)) - - count += 1 - - kenc = [kaes.encrypt(p) for p in plaintext] - - iv_enc = None - if iv: - iv_enc = NoIndent([ord(x) for x in iv]) - Tests.append(dict( - encrypted = [NoIndent([ord(x) for x in chunk]) for chunk in kenc], - iv = iv_enc, - key = NoIndent([ord(x) for x in key]), - modeOfOperation = mode.lower(), - plaintext = [NoIndent([ord(x) for x in chunk]) for chunk in plaintext], - segmentSize = segment_size, - )) - - dt1 = [kaes2.decrypt(k) for k in kenc] - -print json.dumps(Tests, indent = 4, sort_keys = True, default = default).replace('"__', '').replace('__"', '') - diff --git a/truebit-implementation/node_modules/aes-js/index.js b/truebit-implementation/node_modules/aes-js/index.js deleted file mode 100644 index 6fbdfe7d..00000000 --- a/truebit-implementation/node_modules/aes-js/index.js +++ /dev/null @@ -1,798 +0,0 @@ -"use strict"; - -(function(root) { - - function checkInt(value) { - return (parseInt(value) === value); - } - - function checkInts(arrayish) { - if (!checkInt(arrayish.length)) { return false; } - - for (var i = 0; i < arrayish.length; i++) { - if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) { - return false; - } - } - - return true; - } - - function coerceArray(arg, copy) { - - // ArrayBuffer view - if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') { - - if (copy) { - if (arg.slice) { - arg = arg.slice(); - } else { - arg = Array.prototype.slice.call(arg); - } - } - - return arg; - } - - // It's an array; check it is a valid representation of a byte - if (Array.isArray(arg)) { - if (!checkInts(arg)) { - throw new Error('Array contains invalid value: ' + arg); - } - - return new Uint8Array(arg); - } - - // Something else, but behaves like an array (maybe a Buffer? Arguments?) - if (checkInt(arg.length) && checkInts(arg)) { - return new Uint8Array(arg); - } - - throw new Error('unsupported array-like object'); - } - - function createArray(length) { - return new Uint8Array(length); - } - - function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) { - if (sourceStart != null || sourceEnd != null) { - if (sourceArray.slice) { - sourceArray = sourceArray.slice(sourceStart, sourceEnd); - } else { - sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd); - } - } - targetArray.set(sourceArray, targetStart); - } - - - - var convertUtf8 = (function() { - function toBytes(text) { - var result = [], i = 0; - text = encodeURI(text); - while (i < text.length) { - var c = text.charCodeAt(i++); - - // if it is a % sign, encode the following 2 bytes as a hex value - if (c === 37) { - result.push(parseInt(text.substr(i, 2), 16)) - i += 2; - - // otherwise, just the actual byte - } else { - result.push(c) - } - } - - return coerceArray(result); - } - - function fromBytes(bytes) { - var result = [], i = 0; - - while (i < bytes.length) { - var c = bytes[i]; - - if (c < 128) { - result.push(String.fromCharCode(c)); - i++; - } else if (c > 191 && c < 224) { - result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f))); - i += 2; - } else { - result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))); - i += 3; - } - } - - return result.join(''); - } - - return { - toBytes: toBytes, - fromBytes: fromBytes, - } - })(); - - var convertHex = (function() { - function toBytes(text) { - var result = []; - for (var i = 0; i < text.length; i += 2) { - result.push(parseInt(text.substr(i, 2), 16)); - } - - return result; - } - - // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html - var Hex = '0123456789abcdef'; - - function fromBytes(bytes) { - var result = []; - for (var i = 0; i < bytes.length; i++) { - var v = bytes[i]; - result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]); - } - return result.join(''); - } - - return { - toBytes: toBytes, - fromBytes: fromBytes, - } - })(); - - - // Number of rounds by keysize - var numberOfRounds = {16: 10, 24: 12, 32: 14} - - // Round constant words - var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; - - // S-box and Inverse S-box (S is for Substitution) - var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; - var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; - - // Transformations for encryption - var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; - var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; - var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; - var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; - - // Transformations for decryption - var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; - var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; - var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; - var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; - - // Transformations for decryption key expansion - var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; - var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; - var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; - var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; - - function convertToInt32(bytes) { - var result = []; - for (var i = 0; i < bytes.length; i += 4) { - result.push( - (bytes[i ] << 24) | - (bytes[i + 1] << 16) | - (bytes[i + 2] << 8) | - bytes[i + 3] - ); - } - return result; - } - - var AES = function(key) { - if (!(this instanceof AES)) { - throw Error('AES must be instanitated with `new`'); - } - - Object.defineProperty(this, 'key', { - value: coerceArray(key, true) - }); - - this._prepare(); - } - - - AES.prototype._prepare = function() { - - var rounds = numberOfRounds[this.key.length]; - if (rounds == null) { - throw new Error('invalid key size (must be 16, 24 or 32 bytes)'); - } - - // encryption round keys - this._Ke = []; - - // decryption round keys - this._Kd = []; - - for (var i = 0; i <= rounds; i++) { - this._Ke.push([0, 0, 0, 0]); - this._Kd.push([0, 0, 0, 0]); - } - - var roundKeyCount = (rounds + 1) * 4; - var KC = this.key.length / 4; - - // convert the key into ints - var tk = convertToInt32(this.key); - - // copy values into round key arrays - var index; - for (var i = 0; i < KC; i++) { - index = i >> 2; - this._Ke[index][i % 4] = tk[i]; - this._Kd[rounds - index][i % 4] = tk[i]; - } - - // key expansion (fips-197 section 5.2) - var rconpointer = 0; - var t = KC, tt; - while (t < roundKeyCount) { - tt = tk[KC - 1]; - tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ - (S[(tt >> 8) & 0xFF] << 16) ^ - (S[ tt & 0xFF] << 8) ^ - S[(tt >> 24) & 0xFF] ^ - (rcon[rconpointer] << 24)); - rconpointer += 1; - - // key expansion (for non-256 bit) - if (KC != 8) { - for (var i = 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - - // key expansion for 256-bit keys is "slightly different" (fips-197) - } else { - for (var i = 1; i < (KC / 2); i++) { - tk[i] ^= tk[i - 1]; - } - tt = tk[(KC / 2) - 1]; - - tk[KC / 2] ^= (S[ tt & 0xFF] ^ - (S[(tt >> 8) & 0xFF] << 8) ^ - (S[(tt >> 16) & 0xFF] << 16) ^ - (S[(tt >> 24) & 0xFF] << 24)); - - for (var i = (KC / 2) + 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - } - - // copy values into round key arrays - var i = 0, r, c; - while (i < KC && t < roundKeyCount) { - r = t >> 2; - c = t % 4; - this._Ke[r][c] = tk[i]; - this._Kd[rounds - r][c] = tk[i++]; - t++; - } - } - - // inverse-cipher-ify the decryption round key (fips-197 section 5.3) - for (var r = 1; r < rounds; r++) { - for (var c = 0; c < 4; c++) { - tt = this._Kd[r][c]; - this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^ - U2[(tt >> 16) & 0xFF] ^ - U3[(tt >> 8) & 0xFF] ^ - U4[ tt & 0xFF]); - } - } - } - - AES.prototype.encrypt = function(plaintext) { - if (plaintext.length != 16) { - throw new Error('invalid plaintext size (must be 16 bytes)'); - } - - var rounds = this._Ke.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(plaintext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Ke[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T1[(t[ i ] >> 24) & 0xff] ^ - T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ - T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T4[ t[(i + 3) % 4] & 0xff] ^ - this._Ke[r][i]); - } - t = a.slice(); - } - - // the last round is special - var result = createArray(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Ke[rounds][i]; - result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - AES.prototype.decrypt = function(ciphertext) { - if (ciphertext.length != 16) { - throw new Error('invalid ciphertext size (must be 16 bytes)'); - } - - var rounds = this._Kd.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(ciphertext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Kd[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T5[(t[ i ] >> 24) & 0xff] ^ - T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ - T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T8[ t[(i + 1) % 4] & 0xff] ^ - this._Kd[r][i]); - } - t = a.slice(); - } - - // the last round is special - var result = createArray(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Kd[rounds][i]; - result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - - /** - * Mode Of Operation - Electonic Codebook (ECB) - */ - var ModeOfOperationECB = function(key) { - if (!(this instanceof ModeOfOperationECB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Electronic Code Block"; - this.name = "ecb"; - - this._aes = new AES(key); - } - - ModeOfOperationECB.prototype.encrypt = function(plaintext) { - plaintext = coerceArray(plaintext); - - if ((plaintext.length % 16) !== 0) { - throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); - } - - var ciphertext = createArray(plaintext.length); - var block = createArray(16); - - for (var i = 0; i < plaintext.length; i += 16) { - copyArray(plaintext, block, 0, i, i + 16); - block = this._aes.encrypt(block); - copyArray(block, ciphertext, i); - } - - return ciphertext; - } - - ModeOfOperationECB.prototype.decrypt = function(ciphertext) { - ciphertext = coerceArray(ciphertext); - - if ((ciphertext.length % 16) !== 0) { - throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); - } - - var plaintext = createArray(ciphertext.length); - var block = createArray(16); - - for (var i = 0; i < ciphertext.length; i += 16) { - copyArray(ciphertext, block, 0, i, i + 16); - block = this._aes.decrypt(block); - copyArray(block, plaintext, i); - } - - return plaintext; - } - - - /** - * Mode Of Operation - Cipher Block Chaining (CBC) - */ - var ModeOfOperationCBC = function(key, iv) { - if (!(this instanceof ModeOfOperationCBC)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Cipher Block Chaining"; - this.name = "cbc"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 bytes)'); - } - - this._lastCipherblock = coerceArray(iv, true); - - this._aes = new AES(key); - } - - ModeOfOperationCBC.prototype.encrypt = function(plaintext) { - plaintext = coerceArray(plaintext); - - if ((plaintext.length % 16) !== 0) { - throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); - } - - var ciphertext = createArray(plaintext.length); - var block = createArray(16); - - for (var i = 0; i < plaintext.length; i += 16) { - copyArray(plaintext, block, 0, i, i + 16); - - for (var j = 0; j < 16; j++) { - block[j] ^= this._lastCipherblock[j]; - } - - this._lastCipherblock = this._aes.encrypt(block); - copyArray(this._lastCipherblock, ciphertext, i); - } - - return ciphertext; - } - - ModeOfOperationCBC.prototype.decrypt = function(ciphertext) { - ciphertext = coerceArray(ciphertext); - - if ((ciphertext.length % 16) !== 0) { - throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); - } - - var plaintext = createArray(ciphertext.length); - var block = createArray(16); - - for (var i = 0; i < ciphertext.length; i += 16) { - copyArray(ciphertext, block, 0, i, i + 16); - block = this._aes.decrypt(block); - - for (var j = 0; j < 16; j++) { - plaintext[i + j] = block[j] ^ this._lastCipherblock[j]; - } - - copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16); - } - - return plaintext; - } - - - /** - * Mode Of Operation - Cipher Feedback (CFB) - */ - var ModeOfOperationCFB = function(key, iv, segmentSize) { - if (!(this instanceof ModeOfOperationCFB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Cipher Feedback"; - this.name = "cfb"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 size)'); - } - - if (!segmentSize) { segmentSize = 1; } - - this.segmentSize = segmentSize; - - this._shiftRegister = coerceArray(iv, true); - - this._aes = new AES(key); - } - - ModeOfOperationCFB.prototype.encrypt = function(plaintext) { - if ((plaintext.length % this.segmentSize) != 0) { - throw new Error('invalid plaintext size (must be segmentSize bytes)'); - } - - var encrypted = coerceArray(plaintext, true); - - var xorSegment; - for (var i = 0; i < encrypted.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - for (var j = 0; j < this.segmentSize; j++) { - encrypted[i + j] ^= xorSegment[j]; - } - - // Shift the register - copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); - copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return encrypted; - } - - ModeOfOperationCFB.prototype.decrypt = function(ciphertext) { - if ((ciphertext.length % this.segmentSize) != 0) { - throw new Error('invalid ciphertext size (must be segmentSize bytes)'); - } - - var plaintext = coerceArray(ciphertext, true); - - var xorSegment; - for (var i = 0; i < plaintext.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - - for (var j = 0; j < this.segmentSize; j++) { - plaintext[i + j] ^= xorSegment[j]; - } - - // Shift the register - copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); - copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return plaintext; - } - - /** - * Mode Of Operation - Output Feedback (OFB) - */ - var ModeOfOperationOFB = function(key, iv) { - if (!(this instanceof ModeOfOperationOFB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Output Feedback"; - this.name = "ofb"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 bytes)'); - } - - this._lastPrecipher = coerceArray(iv, true); - this._lastPrecipherIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationOFB.prototype.encrypt = function(plaintext) { - var encrypted = coerceArray(plaintext, true); - - for (var i = 0; i < encrypted.length; i++) { - if (this._lastPrecipherIndex === 16) { - this._lastPrecipher = this._aes.encrypt(this._lastPrecipher); - this._lastPrecipherIndex = 0; - } - encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt; - - - /** - * Counter object for CTR common mode of operation - */ - var Counter = function(initialValue) { - if (!(this instanceof Counter)) { - throw Error('Counter must be instanitated with `new`'); - } - - // We allow 0, but anything false-ish uses the default 1 - if (initialValue !== 0 && !initialValue) { initialValue = 1; } - - if (typeof(initialValue) === 'number') { - this._counter = createArray(16); - this.setValue(initialValue); - - } else { - this.setBytes(initialValue); - } - } - - Counter.prototype.setValue = function(value) { - if (typeof(value) !== 'number' || parseInt(value) != value) { - throw new Error('invalid counter value (must be an integer)'); - } - - for (var index = 15; index >= 0; --index) { - this._counter[index] = value % 256; - value = value >> 8; - } - } - - Counter.prototype.setBytes = function(bytes) { - bytes = coerceArray(bytes, true); - - if (bytes.length != 16) { - throw new Error('invalid counter bytes size (must be 16 bytes)'); - } - - this._counter = bytes; - }; - - Counter.prototype.increment = function() { - for (var i = 15; i >= 0; i--) { - if (this._counter[i] === 255) { - this._counter[i] = 0; - } else { - this._counter[i]++; - break; - } - } - } - - - /** - * Mode Of Operation - Counter (CTR) - */ - var ModeOfOperationCTR = function(key, counter) { - if (!(this instanceof ModeOfOperationCTR)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Counter"; - this.name = "ctr"; - - if (!(counter instanceof Counter)) { - counter = new Counter(counter) - } - - this._counter = counter; - - this._remainingCounter = null; - this._remainingCounterIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationCTR.prototype.encrypt = function(plaintext) { - var encrypted = coerceArray(plaintext, true); - - for (var i = 0; i < encrypted.length; i++) { - if (this._remainingCounterIndex === 16) { - this._remainingCounter = this._aes.encrypt(this._counter._counter); - this._remainingCounterIndex = 0; - this._counter.increment(); - } - encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt; - - - /////////////////////// - // Padding - - // See:https://tools.ietf.org/html/rfc2315 - function pkcs7pad(data) { - data = coerceArray(data, true); - var padder = 16 - (data.length % 16); - var result = createArray(data.length + padder); - copyArray(data, result); - for (var i = data.length; i < result.length; i++) { - result[i] = padder; - } - return result; - } - - function pkcs7strip(data) { - data = coerceArray(data, true); - if (data.length < 16) { throw new Error('PKCS#7 invalid length'); } - - var padder = data[data.length - 1]; - if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); } - - var length = data.length - padder; - for (var i = 0; i < padder; i++) { - if (data[length + i] !== padder) { - throw new Error('PKCS#7 invalid padding byte'); - } - } - - var result = createArray(length); - copyArray(data, result, 0, 0, length); - return result; - } - - /////////////////////// - // Exporting - - - // The block cipher - var aesjs = { - AES: AES, - Counter: Counter, - - ModeOfOperation: { - ecb: ModeOfOperationECB, - cbc: ModeOfOperationCBC, - cfb: ModeOfOperationCFB, - ofb: ModeOfOperationOFB, - ctr: ModeOfOperationCTR - }, - - utils: { - hex: convertHex, - utf8: convertUtf8 - }, - - padding: { - pkcs7: { - pad: pkcs7pad, - strip: pkcs7strip - } - }, - - _arrayTest: { - coerceArray: coerceArray, - createArray: createArray, - copyArray: copyArray, - } - }; - - - // node.js - if (typeof exports !== 'undefined') { - module.exports = aesjs - - // RequireJS/AMD - // http://www.requirejs.org/docs/api.html - // https://github.com/amdjs/amdjs-api/wiki/AMD - } else if (typeof(define) === 'function' && define.amd) { - define(aesjs); - - // Web Browsers - } else { - - // If there was an existing library at "aesjs" make sure it's still available - if (root.aesjs) { - aesjs._aesjs = root.aesjs; - } - - root.aesjs = aesjs; - } - - -})(this); diff --git a/truebit-implementation/node_modules/aes-js/package.json b/truebit-implementation/node_modules/aes-js/package.json deleted file mode 100644 index 0e887c41..00000000 --- a/truebit-implementation/node_modules/aes-js/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "aes-js@3.0.0", - "_id": "aes-js@3.0.0", - "_inBundle": false, - "_integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=", - "_location": "/aes-js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "aes-js@3.0.0", - "name": "aes-js", - "escapedName": "aes-js", - "rawSpec": "3.0.0", - "saveSpec": null, - "fetchSpec": "3.0.0" - }, - "_requiredBy": [ - "/ethers" - ], - "_resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "_shasum": "e21df10ad6c2053295bcbb8dab40b09dbea87e4d", - "_spec": "aes-js@3.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ethers", - "author": { - "name": "Richard Moore", - "email": "me@ricmoo.com" - }, - "bugs": { - "url": "http://github.com/ricmoo/aes-js/issues", - "email": "github@ricmoo.com" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A pure JavaScript implementation of the AES block cipher and all common modes of operation.", - "devDependencies": { - "nodeunit": "0.9.1" - }, - "homepage": "https://github.com/ricmoo/aes-js#readme", - "keywords": [ - "aes", - "aes-ctr", - "aes-ofb", - "aes-ecb", - "aes-cbc", - "aes-cfb", - "encrypt", - "decrypt", - "block", - "cipher" - ], - "license": "MIT", - "main": "index.js", - "name": "aes-js", - "repository": { - "type": "git", - "url": "git://github.com/ricmoo/aes-js.git" - }, - "scripts": { - "test": "nodeunit test/index.js" - }, - "version": "3.0.0" -} diff --git a/truebit-implementation/node_modules/aes-js/run-readme.py b/truebit-implementation/node_modules/aes-js/run-readme.py deleted file mode 100644 index 7f8d948f..00000000 --- a/truebit-implementation/node_modules/aes-js/run-readme.py +++ /dev/null @@ -1,15 +0,0 @@ -import re - -reJavaScript = re.compile('```javascript((.|\n)*?)```') -readmeData = file('README.md').read() - -print 'const aesjs = require("./index.js");' -for (example, nl) in reJavaScript.findall(readmeData): - print 'console.log("=====================");' - print '(function() {' - print ' try {' - print 'console.log(%r)' % example - for line in example.split('\n'): - print (' ' * 8) + line - print ' } catch (error) { console.log("ERROR: ", error); }' - print '})();' diff --git a/truebit-implementation/node_modules/aes-js/test/index.js b/truebit-implementation/node_modules/aes-js/test/index.js deleted file mode 100644 index 87f25e7f..00000000 --- a/truebit-implementation/node_modules/aes-js/test/index.js +++ /dev/null @@ -1,12 +0,0 @@ - -function populateTests(tests) { - for (var key in tests) { - module.exports[key] = tests[key]; - } -} - -populateTests(require('./test-aes.js')); -populateTests(require('./test-counter.js')); -populateTests(require('./test-buffer.js')); -populateTests(require('./test-errors.js')); -populateTests(require('./test-padding.js')); diff --git a/truebit-implementation/node_modules/aes-js/test/test-aes.js b/truebit-implementation/node_modules/aes-js/test/test-aes.js deleted file mode 100644 index fbfe4014..00000000 --- a/truebit-implementation/node_modules/aes-js/test/test-aes.js +++ /dev/null @@ -1,83 +0,0 @@ -var nodeunit = require('nodeunit'); - -var aes = require('../index'); - -function bufferEquals(a, b) { - if (a.length != b.length) { return false; } - for (var i = 0; i < a.length; i++) { - if (a[i] != b[i]) { return false; } - } - return true; -} - -function makeTest(options) { - - var modeOfOperation = options.modeOfOperation; - var mo = aes.ModeOfOperation[modeOfOperation]; - - var plaintext = []; - for (var i = 0; i < options.plaintext.length; i++) { - plaintext.push(new Buffer(options.plaintext[i])); - } - - var key = new Buffer(options.key); - - var iv = null; - if (options.iv) { iv = new Buffer(options.iv); } - - var segmentSize = 0; - if (options.segmentSize) { segmentSize = options.segmentSize; } - - var ciphertext = []; - for (var i = 0; i < options.encrypted.length; i++) { - ciphertext.push(new Buffer(options.encrypted[i])); - } - - - return function (test) { - var func; - switch (modeOfOperation) { - case 'ecb': - func = function() { return new mo(key); } - break; - case 'cfb': - func = function() { return new mo(key, iv, segmentSize); } - break; - case 'ofb': - case 'cbc': - func = function() { return new mo(key, iv); } - break; - case 'ctr': - func = function() { return new mo(key, new aes.Counter(0)); } - break; - default: - throw new Error('unknwon mode of operation') - } - - var encrypter = func(), decrypter = func(); - var totalDiffers = 0; - for (var i = 0; i < plaintext.length; i++) { - var ciphertext2 = encrypter.encrypt(plaintext[i]); - test.ok(bufferEquals(ciphertext2, ciphertext[i]), "encrypt failed to match test vector"); - - var plaintext2 = decrypter.decrypt(ciphertext2); - test.ok(bufferEquals(plaintext2, plaintext[i]), "decrypt failed to match original text"); - } - - test.done(); - }; -}; - - -var testVectors = require('./test-vectors.json'); - -var Tests = {}; -var counts = {} -for (var i = 0; i < testVectors.length; i++) { - var test = testVectors[i]; - name = test.modeOfOperation + '-' + test.key.length; - counts[name] = (counts[name] || 0) + 1; - Tests['test-' + name + '-' + counts[name]] = makeTest(test); -} - -module.exports = Tests; diff --git a/truebit-implementation/node_modules/aes-js/test/test-buffer.js b/truebit-implementation/node_modules/aes-js/test/test-buffer.js deleted file mode 100644 index 78b9ea6a..00000000 --- a/truebit-implementation/node_modules/aes-js/test/test-buffer.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var nodeunit = require('nodeunit'); - -var slowCreateBuffer = require('../index')._arrayTest.coerceArray; - -var testArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; -var testBuffer = new Buffer(testArray); - -// We mimic some weird non-array-but-sortof-like-an-array object that people on -// obscure browsers seem to have problems with, for the purpose of testing our -// slowCreateBuffer. -function WeirdBuffer(data) { - this.length = data.length; - for (var i = 0; i < data.length; i++) { - this[i] = data[i]; - } -} - -function buffersEqual(a, b) { - if (a.length !== b.length) { return false; } - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; -} - -module.exports = { - "test-slowCreate": function(test) { - //var result = new AES(testArray).key; - var result = slowCreateBuffer(testArray); - test.ok(buffersEqual(testArray, result), 'bufferCreate failed to match input array'); - - result = slowCreateBuffer(testBuffer); - test.ok(buffersEqual(testBuffer, result), 'bufferCreate failed to match input array'); - - result = slowCreateBuffer(new WeirdBuffer(testArray)); - test.ok(buffersEqual(testBuffer, result), 'bufferCreate failed to match input array'); - - test.done(); - }, -}; diff --git a/truebit-implementation/node_modules/aes-js/test/test-counter.js b/truebit-implementation/node_modules/aes-js/test/test-counter.js deleted file mode 100644 index f6643b03..00000000 --- a/truebit-implementation/node_modules/aes-js/test/test-counter.js +++ /dev/null @@ -1,73 +0,0 @@ -var nodeunit = require('nodeunit'); - -var aes = require('../index'); - -function bufferEquals(a, b) { - if (a.length != b.length) { return false; } - for (var i = 0; i < a.length; i++) { - if (a[i] != b[i]) { return false; } - } - return true; -} - -function makeTest (options) { - return function(test) { - var result = new Buffer(options.incrementResult, 'hex'); - - if (options.hasOwnProperty('nullish')) { - var counter = new aes.Counter(options.nullish); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to initialize with a nullish thing") - } - - if (options.hasOwnProperty('number')) { - - var counter = new aes.Counter(options.number); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to initialize with a number") - - counter.setValue(options.number); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset to a number") - - counter = new aes.Counter(); - counter.setValue(options.number); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset to a number") - } - - if (options.bytes) { - var bytes = new Buffer(options.bytes, 'hex'); - - var counter = new aes.Counter(bytes); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to initialize with bytes") - - counter.setBytes(bytes); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset with bytes") - - counter = new aes.Counter(); - counter.setBytes(bytes); - counter.increment(); - test.ok(bufferEquals(counter._counter, result), "counter failed to reset with bytes") - } - - test.done(); - }; -} - -module.exports = { - 'test-counter-nullish-null': makeTest({nullish: null, incrementResult: "00000000000000000000000000000002"}), - 'test-counter-nullish-undefined': makeTest({nullish: undefined, incrementResult: "00000000000000000000000000000002"}), - 'test-counter-number-0': makeTest({number: 0, incrementResult: "00000000000000000000000000000001"}), - 'test-counter-number-1': makeTest({number: 1, incrementResult: "00000000000000000000000000000002"}), - 'test-counter-number-254': makeTest({number: 254, incrementResult: "000000000000000000000000000000ff"}), - 'test-counter-number-255': makeTest({number: 255, incrementResult: "00000000000000000000000000000100"}), - 'test-counter-number-256': makeTest({number: 256, incrementResult: "00000000000000000000000000000101"}), - 'test-counter-bytes-0000': makeTest({bytes: "00000000000000000000000000000000", incrementResult: "00000000000000000000000000000001"}), - 'test-counter-bytes-00ff': makeTest({bytes: "000000000000000000000000000000ff", incrementResult: "00000000000000000000000000000100"}), - 'test-counter-bytes-ffff': makeTest({bytes: "ffffffffffffffffffffffffffffffff", incrementResult: "00000000000000000000000000000000"}), - 'test-counter-bytes-dead': makeTest({bytes: "deadbeefdeadbeefdeadbeefdeadbeef", incrementResult: "deadbeefdeadbeefdeadbeefdeadbef0"}), -}; - diff --git a/truebit-implementation/node_modules/aes-js/test/test-errors.js b/truebit-implementation/node_modules/aes-js/test/test-errors.js deleted file mode 100644 index 9876328c..00000000 --- a/truebit-implementation/node_modules/aes-js/test/test-errors.js +++ /dev/null @@ -1,198 +0,0 @@ -'use strict'; - -var nodeunit = require('nodeunit'); - -var aes = require('../index'); - -function newBuffer(length) { - var buffer = new Buffer(length); - buffer.fill(42); - return buffer; -} - -// Invalid key sizes to try -var keySizes = [0, 1, 2, 7, 8, 9, 15, 17, 23, 25, 31, 33, 100]; - -module.exports = { - "test-errors-key-size": function(test) { - for (var i = 0; i < keySizes.length; i++) { - test.throws(function() { - var moo = new aes.ModeOfOperation.ecb(newBuffer(keySizes[i])); - }, function(error) { - return (error.message === 'invalid key size (must be 16, 24 or 32 bytes)'); - }, - 'invalid key size failed to throw an error'); - } - - test.done(); - }, - - "test-errors-iv-size": function(test) { - var ivSizes = [0, 15, 17, 100]; - for (var i = 0; i < 3; i++) { - var keySize = newBuffer(16 + i * 8); - - for (var j = 0; j < ivSizes.length; j++) { - test.throws(function() { - var moo = new aes.ModeOfOperation.cbc(newBuffer(keySize), newBuffer(ivSizes[j])); - }, function(error) { - return (error.message === 'invalid initialation vector size (must be 16 bytes)'); - }, - 'invalid iv size for cbc failed to throw an error'); - - test.throws(function() { - var moo = new aes.ModeOfOperation.ofb(newBuffer(keySize), newBuffer(ivSizes[j])); - }, function(error) { - return (error.message === 'invalid initialation vector size (must be 16 bytes)'); - }, - 'invalid iv size for ofb failed to throw an error'); - } - } - - test.done(); - }, - - "test-errors-segment-size": function(test) { - var key = newBuffer(16); - var iv = newBuffer(16); - for (var i = 1; i < 17; i++) { - for (var j = 1; j < 17; j++) { - if ((j % i) === 0) { continue; } - - var moo = new aes.ModeOfOperation.cfb(key, iv, i); - - test.throws(function() { - moo.encrypt(newBuffer(j)); - }, function(error) { - return (error.message === 'invalid plaintext size (must be segmentSize bytes)'); - }, - 'invalid plaintext (invalid segment size) failed to throw an error ' + i + ' ' + j); - } - } - - test.done(); - }, - - "test-errors-text-size": function(test) { - var textSizes = [1, 2, 15, 17, 31, 33]; - - for (var i = 0; i < 3; i++) { - var key = newBuffer(16 + i * 8); - for (var j = 0; j < textSizes.length; j++) { - for (var k = 0; k < 2; k++) { - var text = newBuffer(textSizes[j]); - if (k === 0) { - var moo = new aes.ModeOfOperation.ecb(key); - } else { - var moo = new aes.ModeOfOperation.cbc(key, newBuffer(16)); - } - - test.throws(function() { - moo.encrypt(text); - }, function(error) { - return (error.message === 'invalid plaintext size (must be multiple of 16 bytes)'); - }, - 'invalid text size failed to throw an error'); - } - } - } - - for (var i = 0; i < 3; i++) { - var key = newBuffer(16 + i * 8); - for (var j = 0; j < textSizes.length; j++) { - for (var k = 0; k < 2; k++) { - var text = newBuffer(textSizes[j]); - if (k === 0) { - var moo = new aes.ModeOfOperation.ecb(key); - } else { - var moo = new aes.ModeOfOperation.cbc(key, newBuffer(16)); - } - - test.throws(function() { - moo.decrypt(text); - }, function(error) { - return (error.message === 'invalid ciphertext size (must be multiple of 16 bytes)'); - }, - 'invalid text size failed to throw an error'); - } - } - } - - test.done(); - }, - - "test-errors-counter": function(test) { - var textSizes = [0, 1, 2, 15, 17]; - for (var i = 0; i < textSizes.length; i++) { - test.throws(function() { - var counter = new aes.Counter(newBuffer(textSizes[i])); - }, function(error) { - return (error.message === 'invalid counter bytes size (must be 16 bytes)'); - }, - 'invalid counter size (bytes.length != 16) failed to throw an error'); - - var counter = new aes.Counter(); - test.throws(function() { - counter.setBytes(newBuffer(textSizes[i])); - }, function(error) { - return (error.message === 'invalid counter bytes size (must be 16 bytes)'); - }, - 'invalid counter setBytes (bytes.length != 16) failed to throw an error'); - - var counter = new aes.Counter(); - test.throws(function() { - counter.setValue(newBuffer(textSizes[i])); - }, function(error) { - return (error.message === 'invalid counter value (must be an integer)'); - }, - 'invalid counter setValue (Array) failed to throw an error'); - } - - test.throws(function() { - var counter = new aes.Counter(1.5); - }, function(error) { - return (error.message === 'invalid counter value (must be an integer)'); - }, - 'invalid counter value (non-integer number) failed to throw an error'); - - var counter = new aes.Counter(); - test.throws(function() { - counter.setValue(1.5); - }, function(error) { - return (error.message === 'invalid counter value (must be an integer)'); - }, - 'invalid counter setValue (non-integer number) failed to throw an error'); - - var badThings = [0, 1.5, 1]; - for (var i = 0; i < badThings.length; i++) { - var counter = new aes.Counter(); - test.throws(function() { - counter.setBytes(badThings[i]); - }, function(error) { - return (error.message === 'unsupported array-like object'); - }, - 'invalid counter setBytes (numbers) failed to throw an error'); - } - - var badThings = [1.5, 'foobar', {}]; - for (var i = 0; i < badThings.length; i++) { - var counter = new aes.Counter(); - test.throws(function() { - counter.setBytes(badThings[i]); - }, function(error) { - return (error.message === 'unsupported array-like object'); - }, - 'invalid counter setBytes (' + badThings[i] + ') failed to throw an error'); - - var counter = new aes.Counter(); - test.throws(function() { - counter.setValue(badThings[i]); - }, function(error) { - return (error.message === 'invalid counter value (must be an integer)'); - }, - 'invalid counter setValue (' + badThings[i] + ') failed to throw an error'); - } - - test.done(); - }, -}; diff --git a/truebit-implementation/node_modules/aes-js/test/test-padding.js b/truebit-implementation/node_modules/aes-js/test/test-padding.js deleted file mode 100644 index 1390b3de..00000000 --- a/truebit-implementation/node_modules/aes-js/test/test-padding.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var nodeunit = require('nodeunit'); - -var aes = require('../index.js'); - -function bufferEqual(a, b) { - if (a.length != b.length) { return false; } - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { return false; } - } - return true; -} - -module.exports = { - "test-padding": function(test) { - for (var size = 0; size < 100; size++) { - - // Create a random piece of data - var data = []; - for (var i = 0; i < size; i++) { data.push(42); } - - // Pad it - var padded = aes.padding.pkcs7.pad(data); - test.ok((padded.length % 16) === 0, "Failed to pad to block size"); - test.ok(data.length <= padded.length && padded.length <= data.length + 16, "Padding went awry"); - test.ok(padded[padded.length - 1] >= 1 && padded[padded.length - 1] <= 16, "Failed to pad to block size"); - - // Trim it - var trimmed = aes.padding.pkcs7.strip(padded); - test.ok(bufferEqual(data, trimmed), "Failed to trim to original data"); - } - test.done(); - } -} diff --git a/truebit-implementation/node_modules/aes-js/test/test-vectors.json b/truebit-implementation/node_modules/aes-js/test/test-vectors.json deleted file mode 100644 index 0a42b8ee..00000000 --- a/truebit-implementation/node_modules/aes-js/test/test-vectors.json +++ /dev/null @@ -1,1832 +0,0 @@ -[ - { - "encrypted": [ - [] - ], - "iv": [210, 94, 20, 139, 33, 227, 182, 169, 65, 136, 208, 188, 198, 212, 91, 88], - "key": [155, 70, 225, 213, 103, 248, 2, 82, 206, 37, 109, 25, 73, 34, 9, 27], - "modeOfOperation": "cbc", - "plaintext": [ - [] - ], - "segmentSize": null - }, - { - "encrypted": [ - [215, 238, 74, 62, 188, 204, 110, 226, 60, 165, 249, 53, 192, 105, 170, 242], - [11, 46, 168, 90, 158, 182, 37, 132, 9, 110, 109, 228, 252, 198, 9, 2] - ], - "iv": [235, 86, 206, 143, 225, 253, 82, 192, 220, 64, 112, 106, 26, 194, 193, 218], - "key": [101, 134, 119, 140, 213, 160, 234, 3, 148, 221, 195, 153, 240, 69, 253, 255], - "modeOfOperation": "cbc", - "plaintext": [ - [168, 8, 221, 252, 21, 193, 149, 122, 213, 17, 252, 154, 186, 66, 168, 129], - [173, 10, 220, 38, 56, 150, 251, 88, 72, 82, 231, 198, 251, 106, 85, 180] - ], - "segmentSize": null - }, - { - "encrypted": [ - [226, 179, 163, 28, 230, 161, 191, 34, 39, 100, 105, 25, 244, 78, 240, 99], - [33, 11, 203, 63, 219, 15, 48, 203, 0, 196, 102, 232, 214, 210, 209, 78], - [249, 138, 137, 76, 193, 1, 197, 19, 186, 51, 222, 119, 8, 237, 2, 36] - ], - "iv": [38, 214, 178, 226, 63, 53, 231, 78, 67, 95, 26, 11, 84, 22, 240, 171], - "key": [234, 35, 86, 91, 230, 79, 117, 166, 4, 89, 179, 189, 153, 133, 158, 22], - "modeOfOperation": "cbc", - "plaintext": [ - [37, 148, 91, 192, 147, 133, 18, 181, 134, 232, 8, 243, 180, 76, 196, 156], - [146, 159, 177, 185, 29, 138, 209, 45, 144, 151, 35, 199, 2, 58, 194, 95], - [153, 131, 129, 136, 62, 69, 189, 61, 112, 133, 101, 67, 185, 141, 97, 157] - ], - "segmentSize": null - }, - { - "encrypted": [ - [118, 5, 203, 203, 176, 147, 173, 54, 106, 157, 21, 100, 1, 185, 192, 81, 147, 28, 3, 18, 66, 107, 19, 182, 113, 255, 157, 179, 150, 215, 119, 79], - [210, 68, 227, 172, 214, 85, 66, 175, 212, 28, 155, 77, 137, 188, 9, 126, 78, 189, 11, 201, 151, 197, 178, 173, 141, 49, 32, 102, 215, 189, 183, 248], - [178, 120, 152, 215, 149, 158, 152, 125, 72, 79, 202, 185, 72, 174, 8, 27, 148, 205, 43, 90, 26, 63, 213, 78, 165, 172, 181, 60, 221, 143, 224, 178], - [0, 130, 208, 66, 133, 244, 199, 87, 137, 139, 90, 24, 116, 187, 74, 89, 169, 181, 125, 102, 108, 219, 54, 16, 127, 145, 164, 227, 11, 152, 143, 239] - ], - "iv": [172, 151, 4, 112, 6, 7, 156, 246, 189, 136, 109, 132, 152, 96, 15, 218], - "key": [229, 28, 121, 206, 142, 216, 7, 14, 217, 209, 147, 248, 151, 51, 107, 177], - "modeOfOperation": "cbc", - "plaintext": [ - [5, 164, 69, 34, 194, 125, 232, 102, 208, 136, 26, 94, 35, 236, 219, 163, 24, 105, 239, 198, 178, 61, 184, 125, 207, 100, 220, 239, 247, 208, 220, 121], - [43, 109, 194, 38, 209, 242, 142, 128, 133, 15, 194, 46, 179, 80, 154, 192, 173, 241, 141, 80, 134, 1, 65, 184, 26, 99, 235, 98, 190, 134, 2, 90], - [93, 205, 130, 161, 66, 55, 132, 166, 126, 220, 11, 124, 249, 87, 222, 194, 150, 54, 142, 47, 43, 203, 178, 254, 1, 45, 225, 132, 246, 219, 135, 177], - [79, 174, 188, 232, 182, 202, 51, 9, 130, 71, 129, 168, 16, 134, 156, 136, 191, 246, 232, 43, 139, 241, 65, 14, 185, 185, 221, 182, 242, 86, 192, 221] - ], - "segmentSize": null - }, - { - "encrypted": [ - [79, 123, 208, 228, 162, 179, 137, 233, 1, 174, 115, 140, 166, 153, 42, 42, 191, 252, 37, 91, 178, 70, 17, 196, 44, 166, 35, 192, 72, 202, 217, 13, 88, 13, 32, 14, 138, 85, 170, 178, 121, 22, 79, 196, 241, 53, 118, 21], - [31, 66, 236, 12, 118, 57, 163, 179, 82, 123, 22, 39, 250, 243, 59, 174, 69, 235, 170, 146, 131, 117, 182, 235, 112, 148, 37, 101, 33, 80, 2, 141, 14, 58, 129, 171, 158, 84, 59, 53, 143, 143, 91, 5, 225, 215, 166, 249], - [126, 117, 3, 145, 4, 208, 179, 76, 249, 83, 243, 33, 237, 220, 207, 181, 82, 43, 102, 219, 38, 49, 65, 254, 221, 141, 154, 187, 39, 252, 57, 81, 175, 169, 23, 9, 185, 186, 123, 72, 160, 165, 12, 8, 120, 7, 209, 240], - [119, 232, 246, 66, 177, 71, 238, 160, 150, 181, 37, 254, 31, 141, 37, 74, 223, 85, 69, 38, 23, 140, 152, 18, 177, 198, 113, 8, 251, 9, 155, 139, 230, 225, 207, 189, 58, 231, 205, 84, 213, 32, 6, 221, 64, 219, 31, 181], - [145, 161, 231, 112, 21, 127, 174, 39, 100, 219, 75, 24, 46, 26, 142, 144, 101, 133, 242, 70, 191, 252, 211, 100, 217, 171, 107, 137, 47, 149, 124, 14, 225, 152, 72, 168, 51, 104, 203, 27, 7, 199, 249, 101, 19, 85, 233, 110] - ], - "iv": [238, 139, 239, 60, 149, 184, 148, 75, 43, 217, 219, 158, 98, 31, 40, 169], - "key": [20, 195, 1, 206, 103, 117, 189, 95, 165, 91, 61, 16, 159, 138, 199, 65], - "modeOfOperation": "cbc", - "plaintext": [ - [133, 24, 124, 110, 200, 41, 8, 167, 76, 125, 156, 7, 62, 129, 164, 52, 198, 16, 208, 57, 68, 29, 192, 60, 151, 172, 181, 44, 27, 175, 251, 140, 134, 108, 60, 22, 9, 31, 161, 67, 125, 80, 4, 207, 46, 95, 200, 244], - [137, 224, 139, 155, 42, 12, 97, 18, 92, 248, 47, 22, 13, 102, 31, 105, 97, 201, 192, 249, 128, 1, 54, 24, 131, 167, 14, 251, 237, 116, 222, 32, 245, 39, 191, 210, 173, 36, 1, 208, 23, 135, 150, 31, 27, 187, 46, 168], - [120, 94, 244, 180, 200, 97, 212, 239, 241, 160, 137, 207, 2, 246, 241, 29, 192, 227, 123, 79, 99, 166, 71, 2, 186, 253, 101, 65, 137, 18, 39, 222, 40, 177, 248, 15, 6, 208, 166, 28, 31, 10, 66, 83, 198, 216, 200, 139], - [40, 205, 120, 180, 20, 199, 142, 28, 209, 96, 5, 184, 242, 171, 113, 187, 72, 235, 66, 134, 241, 69, 151, 233, 120, 143, 35, 30, 86, 25, 199, 51, 192, 166, 111, 192, 195, 11, 72, 155, 147, 135, 36, 33, 28, 176, 99, 89], - [126, 183, 175, 211, 46, 36, 198, 11, 157, 190, 4, 184, 152, 206, 200, 28, 146, 205, 128, 32, 88, 187, 201, 102, 101, 201, 104, 46, 216, 99, 59, 151, 175, 48, 81, 189, 11, 81, 215, 195, 87, 250, 181, 94, 151, 105, 56, 51] - ], - "segmentSize": null - }, - { - "encrypted": [ - [152, 251, 225, 147, 85, 133, 122, 98, 167, 84, 44, 165, 30, 178, 150, 180, 117, 162, 238, 88, 24, 94, 39, 17, 185, 126, 196, 121, 44, 37, 219, 200, 161, 101, 225, 176, 102, 249, 14, 220, 146, 118, 249, 170, 49, 187, 146, 141, 65, 207, 191, 136, 57, 90, 161, 121, 88, 124, 241, 103, 108, 94, 177, 99], - [174, 206, 141, 80, 229, 191, 228, 77, 213, 2, 49, 95, 66, 208, 131, 116, 3, 63, 178, 18, 49, 111, 43, 249, 96, 44, 158, 78, 247, 6, 57, 182, 201, 125, 170, 232, 125, 9, 69, 164, 31, 22, 151, 164, 160, 104, 37, 77, 14, 115, 24, 236, 138, 245, 78, 92, 144, 76, 85, 82, 243, 70, 211, 166], - [0, 76, 225, 39, 215, 173, 200, 205, 132, 87, 39, 121, 194, 13, 189, 60, 22, 77, 10, 192, 242, 189, 26, 237, 245, 117, 8, 105, 56, 45, 184, 170, 49, 180, 152, 32, 142, 171, 147, 129, 135, 20, 108, 29, 182, 0, 62, 19, 89, 80, 189, 59, 179, 10, 213, 247, 193, 60, 245, 164, 234, 90, 52, 218], - [122, 191, 238, 213, 141, 145, 36, 110, 165, 217, 4, 36, 86, 214, 242, 208, 164, 127, 118, 149, 104, 59, 216, 14, 162, 97, 127, 124, 15, 223, 67, 235, 168, 140, 163, 29, 190, 136, 190, 234, 20, 163, 22, 209, 98, 49, 138, 209, 130, 132, 103, 165, 116, 241, 25, 159, 37, 237, 8, 74, 200, 129, 210, 217], - [80, 229, 9, 222, 88, 57, 92, 56, 208, 71, 169, 142, 237, 169, 19, 224, 228, 249, 107, 79, 78, 199, 52, 191, 155, 226, 217, 198, 176, 153, 195, 240, 198, 204, 247, 218, 253, 22, 149, 223, 107, 68, 129, 172, 70, 240, 22, 153, 202, 58, 126, 93, 26, 0, 115, 78, 101, 115, 208, 193, 123, 155, 54, 107], - [158, 93, 68, 26, 96, 91, 124, 28, 60, 61, 228, 68, 129, 201, 90, 20, 49, 121, 30, 150, 166, 95, 7, 160, 197, 219, 104, 255, 243, 182, 198, 202, 34, 11, 58, 133, 178, 108, 115, 128, 148, 126, 227, 11, 204, 49, 57, 60, 94, 13, 131, 207, 1, 12, 193, 84, 170, 172, 182, 50, 142, 221, 41, 95] - ], - "iv": [122, 198, 138, 104, 85, 71, 100, 10, 168, 65, 109, 26, 222, 167, 186, 209], - "key": [138, 33, 231, 192, 31, 103, 7, 156, 93, 110, 212, 18, 70, 22, 83, 43], - "modeOfOperation": "cbc", - "plaintext": [ - [124, 190, 18, 35, 20, 83, 222, 71, 86, 247, 132, 69, 43, 52, 18, 219, 190, 45, 127, 122, 215, 250, 9, 214, 252, 232, 5, 29, 142, 0, 182, 58, 132, 90, 58, 94, 26, 169, 10, 240, 5, 250, 120, 77, 39, 48, 137, 136, 214, 157, 113, 89, 223, 83, 177, 157, 124, 146, 213, 16, 205, 122, 203, 194], - [134, 163, 252, 76, 61, 100, 178, 61, 8, 92, 14, 59, 237, 49, 116, 99, 136, 97, 239, 226, 125, 249, 95, 214, 145, 130, 143, 194, 103, 150, 108, 165, 189, 218, 55, 188, 128, 53, 136, 254, 147, 83, 144, 53, 239, 227, 197, 91, 161, 203, 129, 164, 181, 194, 183, 254, 76, 96, 135, 199, 79, 160, 120, 103], - [253, 150, 129, 218, 9, 195, 234, 97, 15, 145, 103, 246, 42, 164, 229, 250, 196, 198, 72, 205, 144, 218, 66, 102, 88, 247, 8, 152, 55, 172, 21, 57, 131, 176, 77, 172, 14, 195, 65, 246, 51, 232, 157, 22, 45, 188, 2, 244, 201, 204, 179, 212, 122, 170, 231, 27, 118, 221, 255, 104, 52, 251, 214, 120], - [183, 128, 35, 110, 130, 98, 47, 78, 154, 110, 3, 80, 7, 204, 109, 25, 174, 91, 69, 208, 179, 34, 76, 147, 199, 232, 177, 140, 114, 251, 181, 177, 108, 107, 244, 112, 5, 199, 237, 18, 169, 128, 9, 223, 180, 21, 6, 220, 104, 32, 213, 213, 88, 180, 25, 97, 148, 190, 237, 164, 133, 155, 11, 249], - [39, 10, 221, 197, 61, 98, 199, 219, 227, 221, 25, 32, 235, 9, 76, 13, 139, 174, 142, 111, 163, 109, 44, 126, 182, 93, 51, 197, 57, 91, 55, 78, 173, 148, 208, 65, 161, 165, 74, 92, 131, 213, 247, 231, 6, 243, 43, 9, 44, 210, 64, 209, 172, 143, 35, 233, 83, 125, 15, 71, 232, 24, 193, 0], - [118, 97, 45, 62, 152, 77, 58, 77, 188, 146, 44, 187, 248, 208, 20, 127, 196, 73, 117, 106, 56, 22, 7, 193, 195, 44, 95, 169, 199, 151, 174, 49, 81, 168, 184, 146, 37, 184, 247, 62, 60, 30, 111, 8, 5, 122, 183, 15, 143, 185, 152, 174, 143, 37, 13, 133, 86, 162, 149, 99, 142, 127, 179, 190] - ], - "segmentSize": null - }, - { - "encrypted": [ - [191, 102, 113, 97, 171, 41, 1, 230, 3, 228, 68, 71, 143, 156, 152, 30, 115, 83, 25, 223, 121, 229, 77, 249, 115, 21, 63, 217, 68, 85, 239, 155, 233, 241, 238, 168, 116, 88, 131, 22, 24, 52, 35, 202, 179, 99, 44, 215, 157, 97, 152, 213, 43, 241, 100, 85, 172, 3, 20, 141, 39, 183, 109, 240], - [171, 153, 42, 104, 144, 64, 16, 117, 172, 154, 131, 33, 8, 136, 123, 242, 159, 136, 134, 80, 66, 160, 82, 45, 51, 247, 100, 29, 202, 85, 139, 163, 185, 191, 52, 151, 19, 63, 190, 163, 106, 7, 3, 176, 65, 5, 66, 158, 36, 73, 214, 109, 76, 223, 73, 196, 93, 119, 159, 195, 21, 75, 211, 90], - [156, 61, 53, 177, 76, 134, 108, 136, 194, 174, 86, 33, 144, 212, 71, 95, 52, 93, 249, 151, 122, 227, 234, 239, 23, 140, 232, 169, 218, 179, 204, 192, 10, 86, 177, 96, 172, 187, 198, 229, 213, 249, 121, 36, 52, 176, 86, 138, 252, 31, 107, 99, 200, 61, 32, 166, 118, 206, 100, 114, 185, 142, 30, 118], - [73, 142, 172, 171, 219, 105, 189, 234, 11, 32, 25, 252, 147, 23, 159, 120, 132, 7, 212, 83, 228, 108, 1, 83, 98, 241, 238, 120, 60, 106, 0, 163, 41, 127, 111, 176, 200, 125, 131, 192, 193, 6, 252, 74, 172, 216, 156, 43, 60, 184, 151, 116, 82, 238, 152, 50, 76, 60, 221, 126, 130, 187, 33, 21], - [55, 27, 33, 99, 169, 231, 153, 27, 75, 103, 214, 16, 85, 255, 21, 191, 171, 194, 109, 161, 112, 3, 202, 35, 9, 53, 86, 254, 98, 223, 207, 13, 239, 51, 133, 170, 242, 33, 142, 248, 120, 104, 180, 215, 197, 115, 158, 189, 203, 135, 96, 160, 195, 45, 226, 133, 244, 158, 44, 17, 149, 83, 103, 193], - [121, 182, 75, 228, 80, 14, 176, 176, 245, 66, 152, 55, 137, 11, 127, 49, 14, 29, 195, 241, 9, 41, 175, 161, 22, 246, 145, 187, 219, 178, 168, 241, 13, 102, 152, 7, 237, 51, 178, 18, 199, 106, 232, 107, 213, 156, 166, 203, 88, 209, 34, 82, 219, 238, 247, 9, 67, 176, 82, 161, 164, 89, 200, 127], - [215, 84, 175, 208, 105, 173, 32, 162, 139, 40, 83, 97, 98, 47, 66, 33, 107, 106, 170, 172, 9, 232, 255, 242, 46, 12, 237, 238, 99, 121, 120, 15, 77, 230, 40, 185, 176, 41, 126, 79, 8, 27, 85, 100, 20, 16, 201, 222, 188, 79, 239, 130, 71, 18, 174, 44, 101, 33, 243, 38, 23, 32, 223, 192] - ], - "iv": [164, 37, 29, 253, 82, 190, 184, 186, 31, 147, 238, 62, 109, 54, 163, 31], - "key": [217, 241, 41, 85, 133, 142, 26, 70, 63, 42, 0, 87, 152, 116, 244, 75], - "modeOfOperation": "cbc", - "plaintext": [ - [103, 10, 254, 0, 115, 148, 40, 234, 253, 146, 66, 3, 187, 17, 190, 127, 34, 118, 221, 148, 57, 149, 191, 80, 235, 11, 67, 171, 66, 106, 122, 188, 124, 29, 214, 242, 165, 253, 55, 132, 218, 121, 253, 129, 23, 143, 45, 141, 105, 184, 15, 107, 154, 172, 188, 166, 132, 28, 28, 27, 152, 198, 223, 1], - [9, 176, 39, 188, 4, 98, 254, 127, 154, 59, 24, 66, 123, 236, 176, 130, 222, 200, 250, 42, 98, 158, 92, 184, 236, 130, 27, 244, 95, 241, 7, 198, 41, 123, 189, 246, 194, 73, 134, 209, 22, 220, 227, 140, 196, 254, 19, 40, 224, 255, 143, 120, 231, 136, 253, 72, 250, 128, 35, 221, 5, 208, 218, 23], - [33, 21, 7, 97, 127, 105, 162, 86, 38, 102, 102, 152, 1, 165, 117, 255, 42, 130, 218, 179, 16, 169, 195, 154, 104, 18, 174, 161, 35, 199, 9, 38, 188, 59, 163, 63, 218, 73, 242, 8, 17, 248, 204, 170, 196, 30, 240, 32, 172, 48, 102, 241, 237, 122, 4, 2, 148, 156, 249, 60, 2, 254, 106, 189], - [197, 125, 71, 110, 103, 76, 6, 102, 166, 49, 245, 17, 46, 206, 29, 93, 110, 3, 114, 33, 50, 16, 40, 101, 247, 30, 249, 87, 97, 249, 169, 82, 52, 251, 121, 172, 104, 37, 106, 101, 144, 85, 112, 88, 70, 112, 186, 184, 185, 169, 111, 121, 76, 245, 131, 109, 227, 245, 156, 172, 12, 238, 103, 105], - [101, 189, 29, 150, 250, 225, 208, 223, 96, 226, 232, 58, 249, 195, 93, 251, 196, 79, 107, 234, 254, 149, 192, 163, 95, 236, 233, 252, 207, 145, 252, 87, 168, 239, 17, 242, 206, 47, 245, 192, 5, 113, 15, 98, 167, 60, 168, 246, 44, 58, 162, 108, 224, 92, 146, 14, 215, 194, 215, 71, 32, 114, 214, 229], - [16, 130, 206, 7, 156, 58, 220, 228, 48, 172, 58, 98, 58, 131, 3, 67, 138, 198, 240, 192, 187, 134, 9, 190, 45, 201, 185, 218, 120, 166, 184, 241, 70, 144, 216, 2, 71, 99, 128, 100, 1, 17, 200, 68, 127, 141, 112, 255, 204, 115, 180, 163, 192, 131, 145, 86, 57, 28, 83, 106, 42, 201, 20, 132], - [159, 204, 227, 234, 24, 132, 157, 69, 223, 217, 158, 205, 183, 237, 99, 100, 12, 37, 235, 126, 88, 142, 253, 45, 85, 234, 47, 28, 46, 22, 173, 241, 111, 78, 177, 163, 213, 66, 44, 233, 52, 78, 237, 207, 154, 174, 126, 14, 70, 228, 251, 163, 218, 134, 80, 72, 181, 31, 242, 0, 119, 85, 150, 64] - ], - "segmentSize": null - }, - { - "encrypted": [ - [] - ], - "iv": [239, 223, 181, 236, 61, 118, 254, 53, 251, 59, 113, 4, 2, 58, 69, 100], - "key": [58, 69, 185, 228, 20, 175, 122, 156, 194, 103, 53, 209, 61, 20, 147, 253, 222, 177, 125, 54, 3, 84, 13, 168], - "modeOfOperation": "cbc", - "plaintext": [ - [] - ], - "segmentSize": null - }, - { - "encrypted": [ - [2, 197, 123, 18, 178, 88, 117, 73, 193, 222, 40, 130, 130, 147, 153, 146], - [32, 229, 1, 242, 186, 14, 49, 191, 18, 252, 92, 43, 138, 114, 166, 139] - ], - "iv": [226, 204, 91, 23, 222, 112, 95, 88, 129, 196, 199, 242, 49, 82, 149, 154], - "key": [56, 151, 213, 91, 53, 235, 92, 171, 48, 84, 156, 189, 46, 190, 76, 75, 110, 36, 69, 24, 51, 63, 72, 94], - "modeOfOperation": "cbc", - "plaintext": [ - [65, 96, 9, 2, 43, 13, 183, 15, 104, 71, 44, 20, 19, 119, 245, 128], - [95, 183, 253, 145, 243, 132, 161, 191, 143, 215, 91, 116, 200, 76, 251, 232] - ], - "segmentSize": null - }, - { - "encrypted": [ - [98, 119, 122, 233, 148, 249, 196, 87, 45, 192, 234, 111, 189, 238, 111, 202], - [24, 40, 234, 132, 152, 80, 58, 111, 119, 247, 98, 17, 182, 139, 12, 229], - [217, 35, 34, 18, 8, 132, 197, 47, 83, 198, 166, 119, 144, 141, 186, 105] - ], - "iv": [219, 249, 171, 131, 91, 202, 129, 27, 18, 26, 126, 101, 53, 73, 180, 21], - "key": [116, 153, 11, 0, 170, 48, 112, 137, 135, 205, 239, 233, 72, 205, 220, 27, 106, 65, 73, 66, 97, 239, 229, 16], - "modeOfOperation": "cbc", - "plaintext": [ - [31, 215, 187, 191, 120, 179, 202, 206, 55, 52, 88, 233, 146, 101, 134, 74], - [117, 84, 108, 183, 118, 250, 90, 72, 0, 187, 79, 131, 99, 209, 68, 195], - [37, 190, 190, 11, 93, 115, 75, 179, 140, 160, 23, 111, 51, 6, 188, 23] - ], - "segmentSize": null - }, - { - "encrypted": [ - [59, 184, 76, 226, 246, 7, 153, 67, 103, 107, 230, 215, 152, 106, 216, 25, 49, 185, 155, 90, 147, 213, 125, 74, 48, 67, 235, 244, 139, 179, 62, 46], - [0, 135, 251, 57, 121, 72, 120, 197, 232, 12, 110, 184, 113, 235, 211, 77, 124, 170, 215, 23, 136, 77, 146, 148, 43, 122, 159, 166, 208, 148, 178, 143], - [155, 248, 77, 105, 64, 55, 135, 193, 36, 85, 137, 160, 44, 103, 65, 14, 75, 42, 193, 164, 181, 3, 148, 41, 195, 129, 102, 176, 243, 185, 224, 199], - [78, 9, 151, 94, 151, 57, 44, 143, 229, 218, 119, 29, 43, 245, 220, 191, 76, 23, 71, 193, 216, 231, 20, 220, 98, 228, 127, 191, 130, 87, 237, 92] - ], - "iv": [62, 201, 74, 59, 23, 100, 123, 62, 188, 93, 70, 192, 35, 58, 27, 234], - "key": [4, 23, 102, 145, 158, 60, 216, 186, 162, 190, 217, 57, 174, 21, 168, 172, 167, 114, 115, 54, 208, 224, 54, 110], - "modeOfOperation": "cbc", - "plaintext": [ - [203, 88, 237, 226, 175, 143, 191, 0, 255, 41, 70, 118, 40, 120, 37, 43, 142, 240, 218, 144, 23, 206, 128, 153, 53, 47, 61, 67, 73, 160, 210, 178], - [52, 232, 73, 0, 62, 150, 175, 81, 235, 34, 235, 163, 130, 94, 98, 65, 96, 251, 90, 223, 189, 131, 116, 16, 96, 18, 74, 23, 173, 227, 209, 187], - [169, 77, 20, 157, 40, 128, 143, 181, 183, 204, 24, 91, 84, 207, 3, 131, 205, 68, 108, 248, 104, 91, 11, 15, 116, 127, 228, 33, 98, 227, 134, 88], - [220, 226, 246, 202, 59, 38, 167, 113, 19, 124, 42, 243, 209, 30, 81, 63, 53, 3, 162, 195, 101, 204, 226, 180, 144, 134, 117, 99, 79, 197, 13, 102] - ], - "segmentSize": null - }, - { - "encrypted": [ - [190, 12, 28, 200, 31, 102, 215, 82, 15, 74, 59, 72, 29, 135, 37, 210, 46, 20, 99, 104, 4, 124, 74, 253, 75, 157, 1, 27, 162, 20, 16, 62, 206, 32, 229, 220, 39, 65, 88, 204, 227, 55, 117, 143, 112, 174, 66, 20], - [91, 130, 35, 148, 0, 10, 225, 117, 71, 156, 13, 139, 237, 236, 176, 38, 69, 250, 169, 225, 154, 78, 234, 111, 22, 101, 110, 210, 73, 215, 190, 77, 244, 240, 204, 161, 130, 224, 246, 170, 223, 107, 248, 42, 124, 41, 196, 18], - [75, 60, 144, 133, 215, 215, 169, 91, 209, 3, 5, 161, 234, 124, 114, 47, 35, 3, 3, 75, 179, 226, 188, 198, 38, 117, 161, 229, 133, 19, 175, 90, 135, 223, 242, 124, 138, 41, 118, 243, 56, 1, 68, 121, 152, 53, 152, 132], - [195, 159, 235, 107, 110, 206, 148, 200, 87, 20, 203, 54, 65, 254, 254, 77, 92, 50, 2, 0, 66, 12, 54, 250, 219, 59, 184, 216, 10, 247, 229, 75, 26, 34, 61, 101, 109, 211, 124, 97, 165, 115, 146, 18, 60, 25, 170, 22], - [132, 184, 92, 131, 114, 30, 177, 224, 52, 150, 118, 61, 134, 163, 165, 91, 169, 22, 14, 117, 99, 154, 176, 239, 146, 147, 15, 146, 5, 16, 167, 74, 231, 3, 205, 41, 244, 153, 146, 127, 119, 122, 229, 109, 244, 33, 240, 1] - ], - "iv": [160, 123, 104, 33, 26, 102, 195, 92, 38, 175, 232, 171, 223, 35, 95, 38], - "key": [73, 178, 104, 140, 234, 153, 113, 217, 249, 90, 176, 173, 47, 137, 26, 99, 171, 191, 101, 6, 188, 147, 105, 164], - "modeOfOperation": "cbc", - "plaintext": [ - [218, 65, 74, 112, 27, 40, 125, 77, 108, 20, 165, 197, 100, 85, 213, 154, 254, 197, 240, 217, 167, 131, 26, 56, 176, 206, 34, 119, 167, 189, 0, 28, 199, 114, 85, 110, 25, 152, 108, 7, 30, 65, 186, 89, 237, 145, 37, 7], - [49, 234, 172, 137, 224, 123, 31, 123, 80, 100, 127, 203, 58, 107, 224, 218, 240, 166, 76, 3, 154, 178, 176, 206, 68, 40, 93, 222, 154, 100, 109, 139, 12, 117, 143, 181, 78, 148, 25, 102, 44, 18, 28, 20, 110, 188, 76, 165], - [91, 22, 196, 127, 11, 5, 169, 219, 155, 94, 103, 65, 129, 95, 185, 95, 113, 195, 123, 221, 104, 124, 123, 89, 57, 203, 148, 33, 171, 62, 248, 143, 160, 38, 231, 130, 91, 15, 184, 229, 235, 168, 218, 72, 237, 140, 253, 254], - [243, 213, 172, 60, 245, 198, 246, 125, 43, 209, 193, 3, 193, 227, 142, 94, 147, 173, 210, 209, 229, 72, 96, 213, 34, 107, 26, 28, 198, 48, 3, 28, 47, 197, 198, 103, 59, 101, 193, 173, 98, 73, 177, 89, 39, 66, 41, 11], - [177, 68, 152, 235, 54, 203, 184, 41, 100, 53, 227, 187, 48, 163, 225, 140, 228, 36, 186, 10, 63, 82, 175, 98, 222, 109, 99, 4, 72, 81, 200, 241, 125, 254, 130, 126, 112, 14, 198, 111, 178, 134, 8, 214, 166, 160, 219, 77] - ], - "segmentSize": null - }, - { - "encrypted": [ - [224, 65, 85, 5, 113, 88, 115, 246, 84, 227, 13, 52, 10, 17, 37, 136, 49, 136, 218, 181, 149, 19, 24, 197, 99, 131, 199, 81, 121, 113, 64, 94, 22, 3, 144, 234, 177, 165, 21, 185, 20, 40, 119, 116, 205, 148, 70, 82, 179, 157, 42, 23, 49, 90, 105, 162, 92, 47, 215, 92, 231, 125, 185, 188], - [156, 85, 220, 59, 210, 16, 70, 152, 230, 58, 220, 162, 145, 198, 59, 151, 2, 141, 182, 48, 146, 42, 159, 103, 114, 161, 37, 181, 165, 70, 192, 117, 18, 217, 77, 12, 65, 24, 45, 96, 202, 208, 204, 9, 127, 160, 83, 159, 188, 4, 12, 156, 245, 131, 168, 176, 36, 78, 69, 189, 48, 226, 112, 8], - [188, 164, 130, 74, 210, 176, 201, 156, 80, 36, 147, 172, 1, 249, 191, 45, 244, 89, 197, 103, 157, 105, 61, 91, 139, 167, 183, 22, 162, 194, 177, 138, 233, 237, 28, 91, 4, 195, 171, 64, 243, 59, 211, 5, 182, 248, 222, 39, 96, 110, 232, 160, 121, 44, 61, 86, 232, 125, 12, 167, 247, 89, 217, 204], - [112, 67, 74, 216, 213, 251, 241, 124, 77, 235, 23, 209, 142, 217, 244, 92, 35, 107, 185, 104, 1, 240, 100, 117, 86, 0, 200, 61, 94, 190, 191, 202, 166, 120, 174, 121, 89, 98, 199, 87, 62, 188, 8, 17, 203, 237, 41, 2, 44, 253, 245, 162, 198, 176, 131, 22, 167, 113, 24, 224, 230, 26, 189, 83], - [231, 167, 230, 95, 37, 157, 130, 189, 147, 59, 209, 231, 233, 132, 51, 16, 57, 66, 92, 179, 173, 224, 105, 239, 155, 10, 186, 88, 197, 79, 31, 214, 83, 143, 126, 249, 134, 17, 202, 89, 237, 132, 206, 200, 109, 62, 167, 179, 212, 137, 191, 202, 147, 20, 126, 229, 241, 223, 173, 58, 174, 1, 73, 148], - [29, 98, 138, 100, 144, 240, 78, 202, 15, 104, 29, 6, 159, 98, 232, 213, 68, 185, 89, 14, 221, 246, 96, 255, 238, 87, 39, 152, 4, 81, 7, 94, 53, 194, 159, 154, 228, 233, 131, 122, 34, 209, 167, 104, 23, 248, 239, 121, 253, 192, 215, 59, 3, 124, 154, 134, 251, 10, 171, 3, 1, 154, 243, 73] - ], - "iv": [60, 12, 228, 207, 131, 156, 5, 185, 161, 242, 156, 224, 114, 224, 16, 53], - "key": [133, 187, 142, 139, 253, 51, 187, 102, 139, 78, 251, 216, 248, 213, 238, 27, 197, 245, 55, 53, 239, 89, 78, 224], - "modeOfOperation": "cbc", - "plaintext": [ - [113, 209, 55, 178, 183, 87, 73, 157, 112, 85, 142, 180, 158, 145, 75, 227, 191, 47, 29, 42, 115, 95, 5, 107, 249, 41, 17, 135, 124, 208, 119, 220, 97, 196, 7, 79, 14, 110, 106, 171, 84, 7, 132, 228, 254, 110, 19, 201, 62, 25, 189, 134, 154, 200, 11, 232, 103, 231, 95, 39, 200, 14, 15, 196], - [254, 113, 154, 66, 82, 13, 140, 126, 201, 16, 244, 30, 113, 132, 255, 242, 193, 221, 117, 238, 32, 251, 11, 220, 20, 39, 238, 209, 45, 128, 164, 187, 151, 225, 57, 213, 104, 9, 205, 138, 21, 184, 11, 199, 172, 169, 245, 142, 209, 229, 237, 14, 111, 105, 73, 183, 248, 5, 133, 125, 3, 77, 162, 249], - [28, 79, 163, 50, 200, 157, 140, 106, 26, 98, 93, 8, 101, 243, 203, 190, 113, 99, 10, 102, 127, 194, 118, 172, 102, 23, 59, 164, 72, 203, 75, 251, 99, 150, 224, 86, 243, 2, 159, 120, 226, 75, 33, 163, 90, 142, 128, 229, 58, 201, 206, 92, 250, 166, 201, 146, 176, 144, 167, 45, 196, 179, 79, 122], - [98, 153, 244, 15, 59, 145, 218, 220, 27, 60, 120, 93, 212, 57, 110, 148, 121, 248, 40, 237, 149, 36, 50, 150, 75, 252, 151, 82, 154, 6, 23, 42, 217, 214, 47, 189, 92, 247, 132, 25, 82, 19, 26, 147, 98, 149, 71, 235, 231, 47, 2, 164, 155, 245, 179, 170, 52, 17, 225, 92, 85, 126, 152, 6], - [240, 45, 188, 155, 156, 95, 223, 137, 161, 148, 131, 124, 253, 231, 219, 207, 117, 14, 194, 22, 254, 122, 210, 187, 210, 201, 155, 118, 106, 109, 222, 127, 56, 7, 43, 163, 207, 32, 142, 233, 217, 15, 136, 69, 74, 190, 233, 2, 138, 85, 144, 201, 147, 85, 0, 129, 82, 192, 80, 220, 212, 47, 95, 47], - [30, 79, 58, 46, 32, 128, 158, 123, 102, 100, 219, 19, 24, 161, 243, 30, 66, 213, 42, 252, 178, 67, 102, 168, 202, 14, 108, 234, 109, 75, 233, 17, 243, 216, 249, 159, 203, 151, 31, 7, 104, 189, 149, 185, 20, 247, 242, 105, 237, 235, 197, 74, 201, 154, 44, 39, 43, 121, 127, 172, 233, 158, 3, 234] - ], - "segmentSize": null - }, - { - "encrypted": [ - [187, 96, 43, 71, 215, 240, 152, 94, 218, 138, 181, 120, 140, 115, 184, 43, 222, 99, 70, 71, 87, 10, 66, 244, 165, 172, 188, 42, 241, 43, 221, 223, 112, 211, 122, 131, 176, 44, 222, 16, 110, 132, 74, 121, 162, 168, 110, 33, 113, 30, 21, 117, 201, 129, 188, 197, 51, 223, 68, 234, 118, 127, 213, 114], - [179, 244, 141, 166, 183, 75, 20, 85, 233, 179, 118, 189, 255, 187, 167, 81, 157, 125, 152, 11, 6, 91, 11, 41, 77, 152, 60, 212, 18, 87, 26, 43, 194, 251, 199, 155, 26, 238, 83, 9, 151, 12, 29, 182, 90, 164, 235, 229, 106, 203, 102, 79, 87, 114, 78, 182, 12, 249, 213, 64, 184, 164, 53, 31], - [132, 130, 0, 125, 127, 251, 111, 203, 75, 250, 100, 19, 35, 148, 215, 243, 3, 25, 95, 140, 104, 107, 179, 49, 108, 233, 127, 143, 125, 158, 195, 50, 124, 204, 155, 213, 183, 62, 131, 151, 189, 239, 141, 16, 13, 185, 79, 228, 5, 165, 137, 156, 46, 1, 170, 205, 216, 142, 139, 114, 10, 129, 124, 213], - [148, 205, 155, 185, 47, 19, 71, 8, 72, 44, 136, 186, 176, 45, 88, 247, 68, 163, 132, 190, 104, 29, 216, 25, 116, 127, 121, 249, 81, 249, 98, 184, 94, 74, 49, 62, 90, 231, 219, 114, 10, 19, 168, 162, 107, 170, 148, 59, 71, 46, 107, 234, 253, 133, 2, 51, 204, 142, 247, 3, 219, 213, 71, 94], - [64, 197, 23, 188, 236, 95, 20, 175, 19, 80, 116, 18, 90, 27, 52, 110, 226, 170, 84, 184, 48, 15, 66, 157, 121, 59, 70, 82, 103, 124, 47, 96, 40, 205, 190, 30, 180, 180, 71, 191, 31, 130, 17, 59, 48, 209, 9, 78, 0, 248, 73, 223, 179, 33, 171, 70, 230, 231, 200, 134, 236, 241, 207, 66], - [96, 226, 124, 139, 239, 23, 179, 123, 130, 131, 127, 104, 198, 62, 41, 250, 10, 230, 132, 198, 92, 31, 214, 147, 110, 95, 234, 121, 164, 235, 110, 9, 22, 17, 4, 130, 53, 141, 17, 240, 140, 95, 167, 122, 77, 52, 182, 230, 130, 61, 28, 33, 81, 238, 125, 38, 202, 173, 100, 173, 186, 64, 247, 251], - [92, 229, 246, 243, 190, 181, 119, 87, 244, 123, 204, 154, 179, 0, 116, 253, 154, 244, 26, 34, 248, 130, 133, 168, 213, 51, 227, 158, 120, 188, 79, 209, 149, 25, 245, 7, 230, 47, 253, 10, 20, 16, 173, 188, 29, 176, 149, 88, 193, 204, 93, 192, 84, 187, 255, 81, 25, 11, 149, 23, 199, 242, 48, 65] - ], - "iv": [99, 137, 115, 15, 13, 199, 28, 168, 101, 51, 124, 173, 144, 143, 204, 97], - "key": [252, 226, 69, 168, 172, 99, 86, 112, 141, 106, 15, 177, 104, 248, 174, 106, 138, 229, 208, 194, 0, 251, 101, 250], - "modeOfOperation": "cbc", - "plaintext": [ - [222, 94, 189, 184, 210, 173, 113, 147, 74, 210, 92, 11, 139, 205, 57, 54, 147, 6, 179, 226, 17, 71, 52, 69, 211, 220, 122, 80, 52, 72, 229, 203, 206, 58, 21, 243, 11, 238, 126, 218, 195, 1, 211, 233, 237, 51, 141, 150, 122, 1, 81, 214, 89, 242, 161, 34, 254, 237, 235, 85, 18, 209, 163, 21], - [211, 146, 62, 70, 223, 187, 73, 242, 75, 32, 0, 186, 44, 10, 15, 220, 253, 20, 179, 41, 120, 156, 87, 18, 35, 234, 205, 141, 161, 56, 211, 153, 206, 78, 234, 187, 38, 179, 125, 129, 98, 99, 141, 255, 17, 81, 33, 184, 115, 199, 128, 191, 235, 60, 66, 214, 4, 222, 96, 2, 43, 116, 220, 106], - [23, 23, 226, 39, 94, 197, 21, 190, 18, 131, 209, 248, 31, 28, 242, 195, 19, 126, 37, 15, 228, 185, 132, 169, 252, 54, 161, 181, 12, 221, 55, 181, 4, 49, 150, 38, 17, 43, 229, 202, 199, 98, 23, 154, 138, 242, 206, 54, 184, 98, 183, 30, 52, 211, 162, 139, 58, 230, 209, 56, 189, 94, 116, 81], - [66, 85, 176, 101, 92, 204, 122, 245, 133, 198, 19, 214, 108, 239, 57, 205, 99, 163, 107, 152, 141, 21, 252, 54, 191, 109, 223, 8, 240, 196, 42, 68, 221, 45, 10, 192, 218, 56, 203, 241, 123, 7, 80, 222, 131, 246, 28, 55, 148, 67, 164, 158, 128, 102, 99, 76, 241, 157, 201, 81, 148, 53, 73, 121], - [167, 209, 251, 243, 239, 143, 35, 251, 204, 192, 143, 8, 130, 85, 103, 30, 157, 227, 101, 101, 90, 35, 250, 55, 84, 194, 209, 251, 60, 169, 152, 177, 228, 35, 225, 227, 173, 234, 93, 172, 180, 232, 80, 22, 84, 163, 90, 169, 228, 114, 201, 118, 172, 10, 231, 141, 82, 167, 238, 25, 161, 208, 195, 236], - [109, 82, 96, 204, 101, 155, 197, 200, 22, 168, 145, 238, 232, 60, 65, 205, 212, 24, 2, 112, 150, 182, 201, 154, 239, 169, 36, 77, 20, 18, 102, 217, 214, 193, 3, 78, 196, 233, 47, 137, 41, 59, 246, 152, 31, 95, 54, 202, 53, 116, 148, 55, 216, 156, 50, 198, 98, 136, 74, 182, 63, 102, 107, 81], - [91, 203, 157, 43, 231, 244, 77, 104, 142, 138, 80, 110, 55, 182, 232, 214, 39, 162, 191, 175, 195, 67, 99, 120, 49, 146, 254, 1, 220, 169, 233, 29, 111, 125, 204, 241, 226, 33, 16, 106, 93, 111, 233, 184, 150, 87, 43, 33, 222, 243, 182, 132, 73, 109, 228, 49, 94, 18, 237, 95, 185, 46, 245, 85] - ], - "segmentSize": null - }, - { - "encrypted": [ - [] - ], - "iv": [154, 49, 235, 194, 249, 107, 199, 226, 240, 22, 34, 214, 233, 44, 210, 255], - "key": [219, 248, 217, 40, 209, 92, 221, 179, 28, 201, 25, 35, 94, 202, 209, 131, 27, 192, 164, 53, 62, 12, 255, 215, 149, 22, 163, 238, 67, 4, 188, 201], - "modeOfOperation": "cbc", - "plaintext": [ - [] - ], - "segmentSize": null - }, - { - "encrypted": [ - [130, 163, 238, 120, 146, 107, 246, 135, 197, 155, 92, 151, 145, 41, 182, 214], - [73, 149, 221, 76, 30, 210, 36, 189, 247, 29, 38, 196, 209, 229, 16, 17] - ], - "iv": [228, 208, 189, 88, 14, 204, 94, 135, 246, 209, 6, 147, 145, 105, 3, 138], - "key": [152, 63, 43, 166, 57, 162, 34, 174, 78, 254, 190, 140, 248, 56, 190, 108, 132, 98, 182, 166, 77, 57, 92, 138, 14, 238, 224, 132, 130, 221, 36, 250], - "modeOfOperation": "cbc", - "plaintext": [ - [82, 232, 125, 46, 187, 43, 168, 219, 220, 166, 68, 108, 106, 15, 30, 77], - [39, 51, 87, 9, 95, 230, 40, 82, 94, 101, 53, 34, 183, 69, 8, 193] - ], - "segmentSize": null - }, - { - "encrypted": [ - [250, 35, 102, 230, 240, 69, 29, 132, 42, 149, 96, 29, 44, 211, 224, 156], - [41, 117, 170, 92, 94, 2, 71, 216, 31, 93, 220, 20, 112, 112, 23, 250], - [49, 90, 156, 219, 235, 14, 166, 108, 208, 183, 125, 45, 124, 248, 9, 149] - ], - "iv": [45, 167, 246, 137, 90, 206, 55, 65, 107, 248, 200, 103, 6, 1, 84, 128], - "key": [59, 11, 11, 214, 152, 172, 174, 219, 62, 0, 139, 118, 62, 176, 35, 134, 60, 30, 150, 58, 73, 219, 127, 74, 217, 14, 54, 140, 224, 108, 231, 78], - "modeOfOperation": "cbc", - "plaintext": [ - [191, 182, 55, 185, 106, 99, 238, 201, 170, 105, 113, 234, 30, 108, 238, 218], - [108, 188, 153, 5, 184, 36, 176, 52, 41, 143, 97, 253, 216, 208, 254, 122], - [210, 68, 137, 66, 95, 112, 143, 246, 71, 253, 223, 105, 95, 170, 1, 248] - ], - "segmentSize": null - }, - { - "encrypted": [ - [74, 38, 236, 116, 98, 136, 111, 245, 148, 37, 109, 48, 231, 56, 105, 94, 9, 98, 199, 113, 213, 56, 240, 157, 36, 22, 28, 56, 5, 201, 21, 148], - [126, 241, 217, 27, 186, 85, 171, 213, 29, 113, 110, 20, 150, 84, 79, 7, 164, 189, 197, 163, 147, 252, 178, 150, 131, 160, 23, 214, 15, 148, 118, 13], - [74, 199, 54, 165, 184, 102, 254, 57, 123, 107, 63, 221, 204, 202, 232, 136, 165, 117, 240, 103, 33, 214, 184, 196, 81, 96, 36, 227, 64, 94, 50, 56], - [157, 132, 16, 201, 162, 7, 34, 236, 103, 175, 90, 190, 149, 61, 105, 92, 94, 197, 90, 104, 47, 198, 248, 83, 241, 54, 139, 204, 236, 244, 177, 169] - ], - "iv": [135, 191, 116, 144, 226, 64, 173, 145, 149, 187, 98, 149, 189, 205, 98, 91], - "key": [219, 31, 27, 151, 69, 71, 116, 189, 233, 196, 57, 111, 130, 253, 214, 238, 233, 40, 27, 87, 197, 49, 154, 143, 23, 125, 64, 221, 190, 23, 65, 241], - "modeOfOperation": "cbc", - "plaintext": [ - [63, 101, 174, 132, 120, 155, 129, 101, 4, 230, 26, 224, 15, 101, 154, 20, 109, 52, 4, 179, 53, 249, 197, 155, 130, 178, 31, 49, 107, 200, 107, 10], - [32, 163, 124, 110, 17, 51, 144, 132, 201, 103, 180, 68, 76, 84, 142, 192, 220, 163, 182, 122, 152, 216, 143, 64, 143, 115, 16, 106, 30, 81, 241, 245], - [16, 41, 243, 85, 41, 31, 215, 61, 53, 44, 253, 255, 233, 6, 150, 80, 94, 131, 136, 214, 143, 250, 49, 225, 226, 231, 243, 135, 106, 172, 26, 107], - [224, 55, 150, 211, 186, 181, 243, 116, 34, 65, 246, 91, 30, 171, 67, 37, 100, 101, 97, 77, 122, 234, 166, 127, 19, 124, 108, 184, 233, 110, 11, 23] - ], - "segmentSize": null - }, - { - "encrypted": [ - [155, 117, 90, 5, 109, 166, 134, 250, 103, 138, 44, 137, 211, 163, 63, 108, 3, 182, 159, 64, 26, 88, 35, 161, 18, 27, 169, 51, 76, 101, 179, 122, 9, 73, 230, 214, 247, 181, 37, 79, 40, 158, 210, 246, 255, 120, 47, 209], - [195, 186, 34, 246, 25, 45, 106, 195, 231, 129, 216, 32, 11, 26, 64, 29, 47, 18, 62, 43, 17, 159, 110, 111, 181, 13, 144, 127, 233, 154, 151, 45, 220, 85, 98, 2, 207, 19, 55, 2, 30, 22, 137, 75, 200, 252, 248, 168], - [79, 7, 203, 214, 89, 50, 178, 157, 208, 195, 93, 136, 63, 120, 252, 64, 192, 108, 65, 240, 122, 148, 195, 176, 4, 141, 49, 181, 220, 76, 210, 57, 109, 155, 241, 14, 244, 123, 87, 220, 64, 77, 234, 217, 186, 123, 134, 35], - [247, 36, 189, 254, 121, 21, 72, 165, 189, 212, 196, 175, 31, 97, 120, 11, 107, 146, 0, 133, 192, 12, 205, 125, 152, 57, 76, 26, 69, 252, 218, 23, 63, 35, 153, 166, 62, 74, 127, 23, 95, 72, 194, 119, 94, 104, 88, 48], - [1, 204, 202, 150, 246, 240, 4, 76, 55, 86, 163, 40, 101, 30, 196, 68, 165, 167, 87, 85, 247, 78, 125, 57, 235, 5, 172, 215, 201, 185, 65, 76, 89, 193, 85, 173, 111, 229, 251, 1, 228, 65, 189, 37, 26, 84, 50, 255] - ], - "iv": [53, 143, 213, 76, 206, 106, 166, 60, 217, 46, 66, 71, 160, 50, 205, 235], - "key": [247, 27, 74, 230, 208, 197, 156, 197, 25, 92, 113, 64, 106, 117, 115, 29, 43, 244, 203, 161, 235, 59, 42, 182, 12, 81, 190, 169, 33, 181, 77, 30], - "modeOfOperation": "cbc", - "plaintext": [ - [79, 173, 131, 78, 90, 163, 126, 129, 230, 78, 253, 177, 93, 123, 109, 240, 127, 52, 193, 11, 13, 42, 167, 191, 218, 228, 53, 133, 145, 13, 134, 206, 83, 25, 214, 36, 111, 103, 193, 2, 29, 28, 74, 220, 107, 83, 147, 61], - [246, 32, 255, 254, 1, 207, 179, 60, 252, 142, 251, 135, 217, 206, 10, 0, 32, 57, 45, 217, 53, 123, 161, 24, 134, 89, 53, 25, 72, 178, 90, 39, 118, 30, 134, 227, 60, 44, 194, 83, 166, 140, 12, 166, 20, 81, 37, 204], - [43, 151, 95, 80, 154, 178, 68, 143, 228, 117, 113, 196, 163, 142, 28, 106, 234, 184, 218, 140, 188, 251, 77, 72, 103, 87, 4, 126, 135, 51, 247, 249, 233, 44, 209, 55, 59, 157, 231, 250, 43, 1, 8, 66, 167, 152, 163, 8], - [53, 31, 127, 145, 90, 93, 100, 4, 208, 65, 49, 99, 108, 82, 95, 31, 101, 106, 85, 51, 108, 3, 75, 221, 143, 164, 1, 220, 18, 245, 88, 173, 63, 32, 209, 168, 59, 206, 148, 249, 37, 147, 55, 165, 254, 101, 169, 167], - [248, 133, 101, 236, 82, 233, 38, 31, 226, 18, 212, 239, 190, 39, 170, 62, 103, 128, 223, 134, 30, 186, 39, 240, 195, 94, 59, 213, 218, 76, 52, 71, 187, 8, 151, 216, 81, 223, 107, 136, 11, 100, 170, 23, 175, 145, 77, 196] - ], - "segmentSize": null - }, - { - "encrypted": [ - [138, 237, 22, 54, 232, 140, 238, 86, 160, 133, 169, 241, 248, 196, 253, 129, 21, 89, 2, 40, 67, 116, 230, 81, 18, 38, 6, 5, 49, 118, 53, 219, 84, 223, 208, 223, 21, 67, 72, 107, 207, 194, 28, 194, 79, 67, 127, 90, 40, 111, 207, 157, 57, 206, 247, 135, 21, 230, 55, 53, 108, 94, 124, 11], - [14, 219, 110, 43, 110, 203, 241, 87, 49, 132, 156, 122, 96, 30, 230, 4, 9, 244, 73, 152, 246, 181, 195, 109, 31, 174, 48, 191, 163, 188, 82, 156, 203, 87, 107, 242, 142, 180, 180, 197, 51, 233, 14, 107, 37, 77, 185, 60, 176, 178, 123, 152, 88, 143, 100, 159, 245, 92, 64, 147, 7, 184, 97, 250], - [246, 17, 139, 236, 36, 217, 77, 122, 134, 22, 154, 43, 120, 232, 87, 81, 106, 2, 29, 75, 179, 215, 67, 197, 235, 40, 229, 149, 156, 36, 53, 26, 169, 16, 35, 85, 30, 34, 70, 211, 140, 93, 180, 45, 170, 115, 174, 27, 168, 236, 121, 9, 225, 1, 44, 105, 228, 180, 172, 149, 202, 91, 105, 54], - [115, 145, 27, 83, 49, 216, 244, 3, 43, 246, 168, 50, 197, 138, 70, 27, 174, 120, 227, 162, 193, 10, 245, 79, 90, 244, 79, 180, 80, 25, 66, 124, 41, 219, 103, 68, 249, 155, 81, 237, 232, 103, 180, 95, 52, 97, 110, 197, 146, 163, 239, 245, 116, 102, 0, 139, 125, 200, 164, 238, 27, 152, 36, 132], - [18, 187, 142, 112, 226, 214, 241, 127, 209, 41, 198, 13, 189, 134, 196, 211, 29, 24, 142, 150, 65, 56, 226, 8, 182, 160, 42, 232, 96, 31, 250, 99, 232, 208, 39, 109, 25, 36, 161, 135, 41, 163, 166, 158, 208, 86, 18, 44, 60, 161, 160, 115, 10, 60, 167, 39, 106, 33, 27, 95, 229, 39, 70, 223], - [166, 57, 109, 37, 223, 204, 190, 75, 140, 46, 184, 180, 158, 58, 18, 6, 188, 191, 40, 99, 89, 211, 16, 36, 119, 83, 139, 188, 234, 17, 196, 202, 212, 128, 147, 193, 37, 230, 197, 218, 77, 169, 199, 116, 103, 218, 86, 47, 101, 178, 217, 21, 94, 251, 174, 199, 203, 132, 164, 179, 162, 196, 44, 190] - ], - "iv": [59, 119, 75, 39, 125, 3, 118, 6, 62, 186, 14, 89, 181, 205, 133, 181], - "key": [161, 49, 22, 114, 218, 210, 70, 17, 215, 109, 75, 251, 160, 254, 129, 125, 249, 250, 200, 135, 117, 176, 162, 111, 67, 47, 165, 28, 252, 58, 28, 216], - "modeOfOperation": "cbc", - "plaintext": [ - [84, 199, 202, 56, 151, 15, 81, 6, 13, 21, 4, 120, 102, 50, 129, 144, 140, 177, 160, 92, 113, 212, 238, 223, 54, 54, 207, 171, 39, 221, 166, 33, 138, 147, 235, 125, 173, 146, 59, 117, 37, 22, 163, 112, 127, 164, 242, 188, 242, 244, 139, 246, 239, 21, 32, 81, 173, 129, 58, 66, 194, 2, 245, 10], - [181, 66, 89, 26, 107, 196, 149, 13, 222, 120, 185, 229, 121, 148, 181, 97, 86, 119, 50, 217, 228, 210, 99, 230, 205, 148, 232, 8, 5, 138, 69, 246, 7, 41, 156, 133, 75, 7, 78, 234, 120, 203, 252, 134, 112, 10, 191, 227, 217, 67, 90, 137, 252, 9, 102, 15, 191, 226, 68, 231, 92, 166, 133, 89], - [66, 217, 61, 70, 101, 182, 205, 20, 135, 107, 183, 153, 247, 130, 165, 183, 237, 239, 39, 158, 248, 204, 136, 69, 90, 42, 67, 233, 47, 192, 153, 3, 165, 248, 41, 34, 49, 55, 70, 72, 141, 91, 154, 212, 22, 239, 245, 37, 198, 106, 140, 36, 70, 212, 59, 192, 50, 26, 103, 70, 54, 155, 54, 103], - [231, 119, 93, 90, 64, 73, 17, 138, 13, 48, 137, 155, 78, 254, 33, 11, 98, 254, 29, 241, 110, 123, 155, 160, 98, 139, 11, 182, 250, 15, 4, 211, 241, 38, 106, 129, 115, 53, 71, 27, 174, 249, 171, 214, 177, 68, 245, 138, 64, 61, 92, 247, 253, 157, 197, 144, 4, 250, 121, 251, 250, 80, 247, 50], - [111, 211, 188, 179, 84, 212, 49, 38, 222, 122, 68, 201, 66, 103, 157, 199, 202, 63, 5, 188, 67, 204, 232, 102, 88, 33, 36, 165, 184, 193, 9, 77, 18, 216, 7, 150, 224, 33, 111, 91, 135, 130, 224, 98, 59, 198, 152, 232, 119, 193, 82, 57, 106, 76, 253, 48, 133, 12, 9, 84, 208, 39, 159, 72], - [51, 0, 69, 163, 121, 149, 202, 18, 99, 214, 105, 5, 175, 157, 89, 198, 144, 13, 237, 175, 78, 227, 79, 238, 233, 85, 135, 64, 23, 182, 22, 252, 225, 155, 99, 103, 61, 76, 78, 182, 253, 33, 115, 185, 195, 40, 1, 181, 187, 199, 45, 113, 128, 184, 2, 99, 17, 187, 72, 244, 236, 243, 225, 230] - ], - "segmentSize": null - }, - { - "encrypted": [ - [178, 1, 205, 27, 24, 65, 236, 86, 10, 122, 204, 157, 186, 226, 8, 161, 119, 200, 213, 35, 161, 36, 1, 86, 110, 127, 29, 251, 31, 197, 81, 242, 140, 52, 58, 171, 48, 94, 209, 43, 122, 214, 86, 48, 158, 170, 178, 66, 104, 54, 13, 110, 217, 187, 229, 184, 179, 27, 42, 36, 95, 1, 101, 133], - [62, 17, 72, 232, 120, 157, 239, 12, 32, 60, 112, 65, 203, 185, 17, 90, 96, 77, 84, 241, 66, 191, 130, 77, 76, 221, 135, 176, 202, 184, 223, 221, 55, 78, 133, 205, 179, 58, 248, 57, 64, 137, 105, 95, 195, 117, 84, 228, 56, 198, 111, 198, 70, 176, 28, 239, 19, 123, 140, 35, 202, 81, 228, 113], - [165, 104, 22, 87, 180, 47, 56, 142, 173, 105, 248, 102, 203, 95, 244, 38, 191, 159, 238, 77, 15, 174, 165, 115, 200, 92, 191, 215, 91, 222, 65, 46, 100, 163, 250, 64, 221, 178, 163, 124, 217, 7, 74, 12, 170, 141, 247, 90, 155, 209, 61, 201, 74, 205, 252, 72, 0, 58, 102, 205, 59, 113, 225, 229], - [225, 204, 248, 58, 230, 100, 250, 167, 44, 186, 185, 168, 165, 102, 54, 78, 38, 233, 133, 70, 98, 78, 34, 61, 128, 138, 180, 154, 27, 175, 155, 203, 15, 222, 90, 159, 198, 157, 92, 25, 54, 2, 107, 172, 232, 79, 182, 110, 250, 9, 163, 122, 119, 31, 15, 136, 159, 86, 71, 208, 159, 24, 207, 212], - [64, 38, 139, 43, 191, 227, 157, 209, 115, 129, 92, 250, 90, 126, 2, 135, 102, 202, 27, 31, 83, 208, 249, 199, 235, 155, 123, 177, 123, 71, 27, 182, 13, 33, 45, 122, 25, 70, 10, 92, 66, 75, 245, 118, 201, 63, 99, 191, 48, 163, 224, 221, 224, 212, 84, 247, 61, 181, 243, 203, 185, 3, 101, 128], - [23, 206, 15, 238, 125, 78, 181, 133, 32, 32, 251, 146, 195, 49, 37, 101, 170, 84, 23, 79, 38, 69, 154, 67, 195, 156, 225, 231, 214, 17, 223, 103, 101, 117, 133, 88, 125, 4, 239, 39, 152, 101, 211, 208, 113, 77, 122, 115, 175, 62, 105, 31, 229, 229, 60, 57, 245, 5, 128, 116, 98, 97, 73, 212], - [67, 60, 54, 173, 67, 139, 176, 78, 183, 145, 42, 94, 105, 25, 242, 20, 93, 136, 64, 26, 113, 121, 195, 132, 229, 159, 134, 40, 246, 193, 198, 62, 39, 38, 25, 136, 230, 13, 169, 153, 223, 131, 89, 26, 148, 64, 132, 77, 123, 35, 47, 106, 141, 109, 170, 7, 198, 250, 93, 217, 17, 152, 123, 244] - ], - "iv": [137, 51, 189, 131, 174, 76, 58, 118, 164, 116, 105, 183, 10, 235, 12, 92], - "key": [102, 215, 255, 123, 134, 86, 10, 46, 24, 139, 25, 9, 39, 116, 68, 174, 172, 206, 22, 230, 62, 241, 198, 40, 93, 241, 200, 118, 130, 98, 248, 47], - "modeOfOperation": "cbc", - "plaintext": [ - [113, 205, 35, 143, 75, 17, 236, 130, 189, 121, 239, 83, 195, 122, 67, 225, 104, 114, 4, 128, 2, 173, 28, 41, 67, 151, 119, 176, 157, 80, 112, 28, 254, 72, 105, 179, 136, 151, 210, 230, 40, 255, 98, 63, 124, 239, 13, 225, 184, 24, 52, 101, 34, 139, 143, 89, 22, 47, 122, 165, 209, 225, 236, 54], - [61, 252, 142, 119, 234, 36, 141, 25, 214, 77, 195, 88, 95, 244, 123, 210, 89, 154, 66, 15, 66, 38, 9, 169, 47, 134, 75, 208, 170, 100, 59, 127, 211, 82, 199, 17, 0, 51, 207, 26, 184, 183, 231, 9, 229, 8, 25, 60, 199, 105, 224, 114, 199, 8, 126, 118, 18, 220, 209, 199, 228, 41, 142, 165], - [22, 255, 93, 251, 220, 64, 22, 75, 9, 90, 100, 16, 68, 251, 194, 19, 108, 33, 251, 103, 30, 202, 93, 179, 159, 15, 205, 108, 143, 99, 211, 143, 75, 202, 175, 96, 205, 181, 18, 79, 171, 33, 108, 240, 11, 162, 142, 97, 117, 175, 194, 143, 18, 65, 48, 158, 71, 128, 233, 16, 73, 239, 32, 111], - [159, 31, 52, 221, 247, 189, 125, 82, 220, 171, 38, 206, 51, 240, 199, 219, 240, 49, 48, 138, 76, 214, 235, 216, 97, 111, 244, 221, 14, 238, 116, 156, 95, 188, 94, 44, 221, 65, 114, 106, 68, 129, 17, 190, 89, 245, 18, 59, 200, 163, 180, 149, 107, 178, 13, 237, 68, 66, 92, 145, 15, 97, 107, 128], - [140, 4, 125, 176, 240, 178, 101, 57, 48, 255, 16, 254, 18, 167, 103, 111, 112, 104, 208, 228, 192, 135, 16, 37, 21, 111, 31, 50, 155, 144, 124, 106, 222, 86, 82, 30, 90, 18, 144, 176, 220, 13, 143, 100, 245, 169, 121, 45, 130, 112, 229, 88, 250, 246, 60, 190, 186, 253, 151, 235, 166, 196, 138, 119], - [72, 119, 76, 183, 142, 48, 121, 143, 74, 12, 202, 251, 186, 132, 236, 31, 120, 175, 153, 73, 14, 100, 237, 158, 89, 167, 186, 152, 84, 90, 214, 106, 143, 92, 9, 153, 72, 187, 58, 10, 140, 208, 87, 61, 4, 249, 175, 65, 62, 128, 108, 210, 21, 150, 166, 122, 86, 186, 113, 59, 7, 123, 64, 115], - [154, 6, 201, 210, 42, 163, 41, 112, 74, 168, 78, 71, 107, 75, 111, 181, 67, 145, 230, 128, 151, 152, 250, 254, 45, 163, 159, 56, 220, 162, 82, 30, 6, 222, 100, 153, 32, 184, 173, 47, 86, 52, 202, 71, 156, 4, 194, 40, 21, 135, 40, 232, 250, 81, 68, 38, 249, 71, 214, 152, 1, 62, 69, 58] - ], - "segmentSize": null - }, - { - "encrypted": [ - [67, 15, 44] - ], - "iv": null, - "key": [131, 117, 6, 35, 178, 249, 37, 228, 134, 129, 172, 48, 110, 6, 233, 103], - "modeOfOperation": "ctr", - "plaintext": [ - [198, 171, 132] - ], - "segmentSize": null - }, - { - "encrypted": [ - [151, 9, 116, 223, 153, 154, 152, 165, 104, 32, 158, 217, 11, 209, 74, 236] - ], - "iv": null, - "key": [9, 131, 134, 220, 205, 148, 111, 180, 77, 89, 63, 197, 82, 176, 121, 115], - "modeOfOperation": "ctr", - "plaintext": [ - [20, 142, 236, 114, 255, 7, 245, 251, 223, 138, 221, 141, 210, 188, 209, 233] - ], - "segmentSize": null - }, - { - "encrypted": [ - [228, 254, 4, 106, 58, 51, 3, 114, 120, 110, 18, 26, 168, 173, 67, 187, 162, 90, 129, 18, 170, 100, 191, 156, 56, 75, 128, 141, 173, 83, 171, 177, 66, 61, 182, 177, 214, 129, 81, 13, 221, 241, 251, 100, 210, 72, 111, 178, 147, 22, 157, 49, 12, 203, 35, 133, 65, 38, 194, 39, 53, 248, 176, 203, 151, 136, 248, 21, 249, 252, 147, 240, 251, 232, 191, 213, 224, 181, 217, 30, 73, 22, 126, 101, 58, 67, 212, 107, 196, 179, 124, 230, 82, 140, 238, 226, 83, 248, 245, 195, 8, 185, 59, 46, 98, 81, 222, 203, 113, 181, 0, 206, 250, 92, 241, 97, 154, 247, 43, 74, 140, 98, 136, 108, 170, 123, 117] - ], - "iv": null, - "key": [54, 35, 114, 145, 95, 67, 82, 169, 137, 201, 23, 22, 27, 55, 175, 226], - "modeOfOperation": "ctr", - "plaintext": [ - [90, 215, 79, 236, 241, 49, 31, 92, 81, 1, 84, 34, 65, 115, 78, 29, 51, 178, 82, 191, 152, 116, 196, 6, 149, 1, 3, 24, 72, 212, 251, 229, 70, 228, 84, 57, 115, 5, 100, 233, 56, 140, 17, 102, 116, 63, 227, 146, 127, 201, 76, 110, 123, 82, 71, 166, 102, 145, 81, 193, 154, 229, 26, 218, 153, 34, 231, 3, 159, 24, 231, 220, 64, 193, 221, 23, 249, 72, 206, 29, 45, 211, 182, 247, 252, 60, 16, 214, 206, 63, 149, 184, 169, 95, 147, 142, 237, 115, 115, 183, 96, 233, 8, 90, 100, 208, 161, 90, 45, 247, 62, 252, 94, 12, 137, 115, 186, 129, 149, 118, 243, 234, 46, 34, 81, 82, 59] - ], - "segmentSize": null - }, - { - "encrypted": [ - [14, 11, 40, 99, 71, 239, 215, 49, 226, 216, 152, 179, 37, 243, 213, 28, 15, 51, 211, 82, 208, 244, 255, 179, 239, 46, 0, 124, 203, 177, 210, 165, 96, 166, 60, 99, 225, 233, 138, 212, 82, 129, 9, 132, 101, 1, 166, 125, 25, 215, 74, 94, 8, 67, 73, 12, 15, 118, 116, 139, 32, 75, 15, 96, 252, 248, 210, 1, 128, 188, 248, 144, 171, 97, 164, 172, 97, 72, 59, 159, 131, 92, 127, 253, 15, 237, 193, 213, 15, 135, 228, 86, 242, 66, 27, 19, 109, 20, 190, 85, 125, 164, 181, 202, 146, 5, 28, 154, 65, 181, 149, 85, 249, 159, 63, 148, 26, 187, 166, 37, 4, 201, 107, 198, 103, 84, 95, 118] - ], - "iv": null, - "key": [125, 39, 76, 130, 49, 102, 239, 37, 107, 58, 82, 176, 254, 194, 221, 18], - "modeOfOperation": "ctr", - "plaintext": [ - [214, 44, 128, 36, 122, 182, 47, 206, 197, 222, 135, 6, 218, 228, 230, 120, 132, 175, 241, 130, 107, 123, 78, 247, 195, 47, 69, 215, 198, 46, 150, 81, 100, 111, 92, 239, 3, 126, 200, 184, 87, 5, 195, 178, 113, 76, 64, 1, 41, 228, 224, 32, 138, 80, 187, 134, 113, 210, 168, 61, 47, 4, 221, 4, 181, 242, 205, 88, 103, 90, 122, 30, 21, 3, 100, 239, 24, 250, 97, 204, 39, 137, 255, 254, 90, 165, 154, 47, 206, 101, 157, 175, 196, 203, 127, 229, 241, 53, 129, 23, 12, 12, 116, 228, 166, 66, 252, 171, 82, 216, 240, 255, 128, 59, 249, 170, 229, 180, 47, 195, 51, 21, 30, 223, 83, 32, 145, 205] - ], - "segmentSize": null - }, - { - "encrypted": [ - [142, 31, 169, 42, 24, 69, 45, 60, 20, 38, 231, 44, 78, 226, 182, 32, 250, 36, 131, 210, 97, 95, 12, 155, 243, 97, 117, 229, 35, 68, 58, 79, 127, 126, 159, 101, 108, 119, 49, 143, 33, 237, 67, 121, 216, 84, 219, 41, 237, 28, 216, 96, 249, 226, 91, 62, 139, 18, 134, 75, 110, 127, 115, 102, 224, 138, 235, 145, 65, 188, 240, 101, 96, 232, 213, 178, 229, 150, 162, 218, 151, 155, 148, 139, 59, 76, 254, 212, 9, 67, 33, 76, 223, 76, 157, 27, 15, 197, 188, 20, 100, 106, 193, 32, 195, 243, 193, 71, 5, 17, 238, 183, 151, 174, 46, 71, 211, 77, 29, 181, 80, 193, 113, 239, 71, 96, 213, 10, 69] - ], - "iv": null, - "key": [129, 164, 104, 238, 135, 189, 78, 252, 130, 23, 253, 65, 228, 58, 130, 183], - "modeOfOperation": "ctr", - "plaintext": [ - [114, 76, 183, 7, 80, 17, 171, 97, 50, 173, 213, 220, 103, 1, 145, 230, 158, 210, 111, 222, 233, 100, 115, 110, 152, 62, 75, 120, 186, 150, 118, 250, 13, 24, 172, 208, 163, 4, 193, 136, 105, 188, 137, 162, 74, 240, 145, 4, 110, 115, 237, 130, 11, 92, 117, 141, 208, 137, 245, 5, 116, 98, 250, 82, 41, 201, 75, 187, 104, 95, 38, 65, 149, 32, 255, 10, 241, 88, 75, 249, 200, 27, 208, 108, 255, 89, 113, 223, 13, 69, 21, 62, 222, 101, 180, 57, 235, 193, 46, 26, 94, 152, 150, 121, 33, 82, 59, 69, 224, 239, 76, 205, 13, 9, 168, 35, 110, 65, 108, 183, 38, 88, 11, 100, 180, 121, 234, 107, 130] - ], - "segmentSize": null - }, - { - "encrypted": [ - [116, 140, 101, 132, 174, 122, 31, 33, 150, 125, 112, 8, 136, 171, 209, 242, 50, 140, 182, 254, 44, 167, 216, 218, 57, 93, 78, 198, 82, 101, 105, 246, 59, 77, 164, 22, 44, 211, 159, 62, 135, 107, 68, 161, 174, 241, 35, 52, 58, 235, 158, 34, 225, 139, 78, 74, 117, 173, 218, 127, 21, 228, 225, 114, 210, 155, 232, 160, 190, 73, 23, 211, 29, 105, 176, 242, 5, 233, 26, 106, 8, 165, 42, 222, 84, 177, 249, 146, 21, 63, 105, 137, 33, 61, 141, 53, 181, 183, 196, 107, 228, 10, 108, 150, 187, 44, 194, 87, 39, 246, 235, 82, 66, 142, 76, 203, 188, 216, 128, 254, 226, 10, 93, 32, 3, 125, 107, 21, 149, 95, 119, 197, 149, 65, 201, 86, 146, 58, 212, 13, 44, 240, 135, 36, 44, 225, 37, 48, 253, 86, 219, 87, 161, 149, 73, 54, 165, 237, 188, 97, 54, 106, 213, 33, 152, 199, 166, 143, 109, 86, 7, 242, 11, 74, 94, 121, 224, 12, 146, 199, 90, 173, 249, 254, 51, 34, 108, 246, 40, 34, 168, 199, 38, 145, 204, 150, 71, 20, 46, 30, 7, 130, 135, 224, 220, 114, 138, 183, 39, 71, 222, 164, 25, 233, 114, 8, 202, 147, 249, 107, 7, 138, 60, 149, 171, 235, 116, 241, 28, 211, 9, 70, 174, 25, 202, 34, 210, 241, 103, 171, 167, 240, 178, 157, 1, 188, 238, 129, 197, 226, 59, 107, 65, 187, 53, 63, 20, 108, 13, 18, 105, 18, 20, 185, 23, 223, 204, 124, 8, 187, 81, 84, 100, 236, 83, 135, 16, 78, 103, 76, 85, 144, 201, 166, 53, 215, 40, 40, 2, 202, 239, 141, 234, 80, 207, 58, 212, 82, 106, 110, 161, 130, 174, 125, 144, 132, 165, 174, 127, 210, 62, 238, 75, 158, 189, 134, 26, 227, 235, 223, 150, 255, 29, 90, 123, 23, 251, 18, 117, 215, 231, 221, 239, 90, 101, 238, 39, 85, 108, 37, 138, 94, 151, 142, 95, 27, 218, 123, 125, 76, 234, 70, 106, 82, 122, 232, 192, 100, 64, 161, 16, 31, 73, 159, 34, 77, 242, 157, 7, 185, 175, 202, 206, 255, 163, 242, 23, 48, 113, 160, 54, 128, 8, 231, 241, 228, 201, 113, 40, 157, 130, 24, 221, 167, 240, 222, 42, 88, 73, 230, 227, 84, 231, 85, 205, 219, 215, 50, 57, 122, 219, 238, 183, 239, 176, 149, 91, 15, 89, 110, 121, 26, 220, 163, 122, 199, 198, 164, 200, 167, 147, 92, 66, 5, 79, 235, 38, 108, 47, 202, 43, 198, 208, 87, 253, 126, 249, 47, 253, 253, 132, 116, 233, 191, 188, 80, 216, 64, 226, 159, 197, 175, 27, 249, 147, 119, 177, 63, 139, 159, 146, 34, 202, 211, 165, 217, 110, 203, 14, 16, 227, 26, 97, 129, 21, 159, 21, 243, 228, 185, 230, 224, 138, 168, 99, 219, 248, 65, 166, 142, 2, 230, 186, 177, 95, 106, 55, 219, 40, 219, 70, 167, 251, 63, 150, 13, 63, 215, 100, 187, 240, 125, 181, 64, 210, 250, 45, 96, 0, 138, 96, 11, 34, 122, 50, 48, 234, 227, 190, 201, 156, 240, 141, 181, 190, 47, 171, 102, 26, 107, 244, 131, 170, 5, 233, 248, 74, 177, 15, 77, 63, 40, 230, 242, 243, 4, 104, 62, 114, 213, 188, 67, 169, 4, 242, 177, 161, 48, 226, 134, 37, 222, 92, 244, 230, 18, 191, 108, 193, 34, 243, 137, 179, 231, 163, 221, 134, 246, 107, 35, 193, 244, 147, 230, 108, 128, 49, 13, 193, 45, 86, 1, 185, 49, 238, 108, 99, 128, 118, 161, 49, 98, 17, 168, 123, 68, 219, 120, 78, 31, 88, 193, 178, 212, 48, 239, 213, 192, 10, 106, 137, 61, 153, 157, 15, 133, 244, 216, 253, 38, 212, 134, 27, 74, 19, 48, 18, 157, 40, 10, 124, 99, 74, 105, 254, 91, 143, 155, 154, 132, 2, 1, 198, 141, 94, 171, 105, 56, 238, 99, 8, 65, 129, 61, 207, 92, 35, 141, 128, 48, 208, 251, 106, 44, 203, 150, 154, 211, 182, 114, 197, 165, 80, 59, 36, 190, 73, 46, 143, 69, 26, 185, 111, 169, 68, 239, 87, 178, 30, 86, 86, 114, 1, 157, 173, 58, 144, 16, 157, 76, 4, 48, 148, 123, 119, 45, 245, 204, 248, 253, 108, 161, 124, 4, 144, 71, 241, 146, 109, 237, 65, 251, 130, 97, 134, 207, 152, 196, 64, 247, 138, 118, 78, 69, 250, 73, 221, 75, 214, 252, 23, 232, 21, 60, 15, 184, 238, 253, 181, 195, 95, 121, 228, 172, 37, 20, 130, 165, 23, 102, 123, 41, 15, 75, 198, 26, 72, 73, 134, 53, 190, 144, 172, 170, 225, 8, 27, 195, 60, 25, 252, 206, 171, 82, 45, 47, 252, 94, 25, 175, 206, 147, 99, 93, 75, 221, 115, 85, 135, 95, 159, 246, 101, 32, 42, 135, 41, 46, 155, 79, 63, 129, 200, 62, 166, 222, 32, 10, 20, 145, 79, 85, 102, 124, 52, 67, 24, 227, 132, 183, 94, 199, 184, 189, 76, 39, 167, 14, 5, 26, 243, 53, 120, 13, 43, 219, 188, 156, 58, 4, 118, 145, 32, 82, 174, 181, 61, 228, 15, 77, 194, 2, 4, 186, 232, 26, 53, 168, 64, 2, 106, 221, 238, 41, 127, 201, 227, 43, 177, 85, 209, 100, 244, 24, 54, 86, 223, 159, 24, 72, 89, 128, 45, 111, 54, 229, 42, 233, 162, 92, 39, 28, 185, 82, 232, 64, 37, 190, 230, 236, 180, 170, 42, 242, 244, 80, 159, 174, 49, 39, 53, 224, 8, 8, 226, 216, 52, 102, 201, 225, 28, 249, 85, 60, 92, 149, 55, 18, 134, 80, 75, 106, 123, 64, 185, 176, 32, 11, 231, 5, 43, 129, 148, 60, 240, 102, 157, 127, 211, 196, 197, 204, 193, 65, 138, 156, 203, 68, 21, 45, 113, 143, 134, 115, 186, 52, 64, 12, 64, 158, 22, 127, 205, 234, 28, 248, 198, 232, 152, 198, 132, 147, 143, 227, 115, 243, 225, 204, 212, 138, 112, 245, 226, 199, 57, 32, 111, 237, 185, 110, 119, 108, 185, 93, 15, 69, 17, 208, 46, 148, 245, 82, 220, 243, 200, 206, 236, 99, 130, 72, 70, 232, 175, 133, 41, 219, 231, 174, 125, 51, 51, 99, 11, 108, 149, 165, 152, 219, 27, 87, 11, 167, 70, 180, 92, 10, 9, 243, 200, 85, 104, 51, 69, 173, 67, 217, 61, 165, 124, 85, 192, 152, 232, 17, 251, 191, 158, 218, 98, 74, 91, 100, 36, 37, 38, 232, 63, 221, 142, 119, 108, 117, 156, 84, 229, 9, 168, 6, 107, 142, 214, 94, 130, 96, 50, 43, 222, 97, 101, 37, 119, 204, 102, 166, 151, 84, 43, 173, 7, 121, 73, 70, 141, 5, 185, 220, 232, 59, 31, 27, 173, 100, 62, 238, 224, 89, 123, 209, 83, 33, 177, 138, 230, 65, 10, 217, 216, 63, 12, 75, 167, 156, 102, 177, 190, 10, 105, 239, 125, 17, 27, 48, 141, 220, 232, 144, 245, 180, 97, 234, 54, 6, 187, 152, 83, 82, 215, 6, 57, 205, 35, 78, 88, 101, 78, 83, 236, 194, 114, 20, 98, 107, 178, 6, 19, 88, 254, 41, 205, 51, 166, 51, 54, 216, 63, 130, 188, 18, 154, 214, 100, 152, 134, 28, 109, 189, 118, 153, 124, 67, 16, 86, 180, 200, 195, 174, 122, 146, 17, 166, 103, 26, 80, 46, 101, 6, 230, 138, 166, 63, 150, 41, 33, 49, 120, 199, 91, 151, 141, 176, 134, 130, 41, 27, 189, 85, 60, 151, 86, 252, 203, 73, 168, 236, 103, 237, 62, 216, 79, 117, 139, 171, 21, 160, 158, 43, 232, 52, 31, 158, 94, 33, 56, 88, 223, 176, 228, 219, 26, 68, 161, 112, 241, 233, 61, 177, 225, 156, 140, 114, 169, 181, 144, 41, 36, 160, 8, 78, 99, 133, 26, 114, 247, 224, 95, 111, 159, 252, 207, 234, 1, 37, 225, 41, 103, 8, 237, 81, 219, 56, 228, 101, 94, 154, 124, 72, 33, 26, 61, 65, 139, 168, 99, 31, 149, 179, 172, 171, 40, 196, 239, 213, 197, 176, 74, 202, 242, 16, 245, 237, 229, 182, 140, 50, 130, 131, 53, 26, 254, 2, 49, 187, 227, 78, 223, 55, 112, 8, 146, 101, 120, 119, 150, 213, 204, 146, 232, 23, 95, 101, 111, 185, 41, 199, 59, 37, 115, 77, 4, 140, 138, 18, 43, 72, 129, 221, 115, 189, 235, 179, 77, 134, 227, 246, 211, 114, 204, 254, 20, 241, 1, 150, 127, 66, 238, 97, 209, 143, 231, 232, 121, 249, 88, 199, 80, 26, 108, 71, 15, 76, 19, 239, 197, 7, 43, 176, 145, 199, 30, 226, 18, 218, 5, 254, 73, 112, 79, 248, 255, 193, 252, 227, 114, 156, 125, 85, 190, 162, 137, 60], - [74, 11, 146, 68, 224, 89, 50, 217, 64, 156, 117, 251, 210, 187, 132, 141, 232, 110, 89, 91, 199, 4, 194, 103, 188, 55, 222, 61, 210, 210, 30, 176, 233, 47, 131, 130, 84, 100, 181, 253, 167, 48, 164, 43, 69, 240, 183, 26, 119, 41, 110, 130, 185, 174, 45, 22, 128, 251, 110, 41, 96, 77, 197, 224, 175, 1, 14, 244, 52, 77, 229, 228, 131, 135, 84, 78, 240, 61, 190, 64, 108, 105, 217, 12, 53, 244, 25, 55, 216, 17, 156, 101, 213, 1, 111, 59, 127, 42, 32, 200, 212, 59, 3, 27, 122, 197, 237, 203, 36, 212, 45, 201, 59, 3, 179, 169, 191, 68, 82, 97, 8, 13, 38, 222, 112, 215, 127, 197, 104, 134, 75, 206, 150, 163, 97, 180, 91, 19, 20, 70, 23, 98, 10, 201, 239, 236, 113, 116, 102, 6, 23, 226, 55, 179, 127, 194, 213, 109, 18, 210, 111, 243, 7, 194, 236, 181, 93, 231, 170, 2, 203, 100, 241, 159, 95, 161, 196, 234, 77, 86, 252, 132, 56, 105, 157, 51, 46, 112, 72, 165, 187, 24, 46, 232, 182, 231, 160, 168, 166, 198, 195, 150, 17, 28, 100, 139, 56, 179, 89, 123, 2, 243, 95, 184, 220, 248, 15, 115, 185, 10, 197, 10, 71, 166, 31, 7, 91, 181, 248, 55, 130, 3, 65, 47, 39, 25, 88, 236, 151, 65, 241, 198, 204, 79, 104, 133, 28, 210, 88, 20, 0, 219, 3, 17, 223, 88, 3, 70, 10, 60, 171, 90, 128, 189, 192, 234, 120, 134, 129, 27, 69, 28, 90, 24, 225, 159, 163, 139, 86, 66, 139, 187, 203, 230, 96, 126, 107, 30, 113, 195, 117, 67, 197, 43, 80, 50, 32, 221, 111, 60, 50, 132, 136, 50, 229, 54, 245, 167, 192, 193, 96, 231, 81, 211, 6, 190, 97, 135, 160, 248, 248, 30, 28, 145, 145, 40, 56, 85, 253, 132, 53, 96, 183, 213, 5, 226, 249, 220, 39, 162, 65, 105, 226, 74, 194, 23, 243, 190, 166, 95, 145, 93, 110, 176, 50, 207, 23, 250, 5, 136, 23, 130, 131, 73, 244, 126, 86, 157, 85, 223, 113, 203, 240, 171, 165, 119, 156, 176, 221, 178, 71, 162, 93, 148, 59, 166, 119, 194, 86, 1, 122, 45, 167, 129, 123, 144, 244, 191, 118, 154, 31, 225, 165, 54, 25, 243, 171, 30, 179, 128, 123, 119, 140, 211, 178, 113, 36, 196, 132, 32, 51, 113, 226, 62, 254, 241, 129, 94, 253, 229, 24, 181, 155, 115, 52, 19, 139, 14, 61, 181, 70, 190, 68, 145, 82, 84, 169, 78, 116, 167, 221, 35, 137, 239, 29, 92, 56, 187, 0, 6, 157, 52, 208, 212, 132, 90, 72, 190, 220, 135, 183, 118, 66, 51, 38, 117, 69, 93, 87, 148, 194, 217, 220, 208, 234, 177, 124, 244, 97, 105, 97, 233, 1, 149, 169, 158, 63, 59, 183, 94, 144, 91, 43, 171, 165, 194, 24, 129, 148, 72, 82, 14, 76, 55, 119, 247, 174, 176, 15, 61, 86, 236, 67, 202, 48, 73, 21, 177, 116, 39, 210, 148, 195, 213, 133, 168, 162, 142, 247, 149, 224, 209, 150, 220, 176, 214, 105, 182, 44, 188, 17, 157, 57, 222, 163, 178, 222, 238, 66, 75, 47, 110, 165, 109, 200, 158, 39, 158, 24, 116, 145, 56, 68, 229, 176, 125, 136, 116, 193, 179, 246, 201, 103, 126, 83, 167, 199, 125, 161, 243, 35, 89, 151, 209, 221, 202, 76, 8, 232, 154, 209, 166, 78, 255, 19, 204, 115, 252, 247, 95, 208, 152, 13, 123, 90, 80, 39, 218, 28, 78, 144, 251, 94, 200, 133, 159, 10, 137, 34, 61, 22, 64, 185, 64, 187, 228, 131, 216, 204, 33, 40, 149, 31, 48, 36, 72, 114, 76, 186, 63, 172, 15, 180, 43, 101, 212, 184, 35, 19, 123, 223, 144, 168, 82, 221, 148, 48, 254, 124, 121, 62, 131, 121, 183, 65, 123, 204, 114, 201, 101, 135, 130, 76, 77, 36, 190, 122, 100, 232, 9, 176, 121, 247, 45, 135, 195, 7, 195, 11, 37, 242, 218, 122, 224, 121, 20, 50, 224, 233, 124, 166, 15, 84, 150, 84, 71, 170, 187, 154, 8, 14, 104, 232, 186, 201, 78, 237, 29, 129, 207, 113, 168, 253, 52, 215, 166, 157, 82, 39, 126, 255, 83, 159, 210, 41, 17, 171, 224, 215, 144, 12, 72, 159, 0, 217, 195, 153, 99, 2, 222, 192, 50, 25, 109, 254, 225, 54, 46, 255, 118, 198, 2, 78, 245, 25, 198, 237, 33, 137, 203, 169, 163, 76, 12, 171, 8, 187, 110, 63, 208, 214, 125, 210, 201, 38, 19, 134, 210, 115, 130, 203, 205, 66, 35, 2, 234, 10, 111, 97, 156, 140, 94, 54, 60, 148, 228, 125, 224, 29, 217, 244, 203, 142, 240, 102, 101, 198, 217, 3, 75, 120, 156, 176, 7, 77, 50, 102, 172, 191, 162, 47, 129, 22, 61, 233, 62, 125, 39, 144, 165, 232, 204, 212, 27, 182, 96, 125, 203, 151, 11, 225, 68, 81, 215, 155, 132, 195, 218, 5, 177, 161, 35, 224, 10, 56, 195, 33, 61, 141, 24, 70, 165, 125, 118, 60, 247, 128, 33, 96, 97, 72, 46, 231, 127, 206, 107, 200, 197, 195, 10, 215, 68, 22, 248, 233, 7, 32, 15, 199, 114, 198, 167, 78, 132, 175, 202, 58, 3, 227, 0, 191, 170, 29, 151, 141, 177, 192, 216, 0, 234, 38, 50, 169, 3, 149, 146, 99, 96, 151, 46, 36, 79, 101, 168, 2, 23, 63, 148, 3, 190, 21, 40, 238, 158, 84, 75, 9, 185, 210, 198, 140, 108, 184, 244, 19, 217, 30, 146, 122, 123, 235, 220, 98, 44, 138, 246, 23, 209, 89, 148, 156, 202, 88, 122, 236, 141, 130, 78, 208, 116, 240, 77, 162, 48, 125, 164, 33, 137, 194, 76, 105, 78, 188, 144, 214, 19, 54, 101, 38, 101, 58, 26, 146, 86, 167, 211, 183, 46, 197, 117, 147, 127, 98, 197, 52, 40, 123, 30, 74, 4, 6, 161, 142, 187, 55, 81, 200, 42, 23, 176, 171, 170, 177, 143, 71, 147, 135, 9, 167, 157, 186, 111, 80, 57, 199, 178, 88, 41, 227, 125, 229, 109, 246, 156, 105, 59, 35, 2, 9, 221, 143, 176, 117, 103, 142, 96, 50, 52, 243, 71, 6, 198, 196, 3, 173, 237, 5, 48, 6, 155, 11, 196, 218, 147, 57, 173, 90, 176, 136, 4, 89, 24, 111, 146, 114, 240, 48, 78, 182, 139, 56, 209, 23, 142, 7, 215, 137, 46, 135, 213, 93, 234, 117, 9, 248, 103, 195, 15, 249, 71, 90, 65, 127, 203, 226, 200, 50, 90, 207, 142, 237, 249, 251, 76, 219, 222, 253, 253, 200, 158, 237, 41, 110, 12, 142, 233, 117, 31, 169, 81, 150, 166, 16, 227, 163, 91, 20, 245, 107, 230, 179, 226, 183, 25, 110, 51, 206, 61, 58, 219, 71, 212, 61, 6, 226, 243, 57, 137, 224, 8, 31, 48, 115, 127, 225, 157, 154, 92, 251, 251, 18, 113, 209, 8, 132, 123, 136, 248, 44, 137, 15, 208, 199, 99, 115, 216, 61, 14, 49, 36, 2, 220, 187, 78, 118, 211, 50, 7, 201, 48, 164, 151, 55, 210, 236, 193, 41, 60, 0, 53, 29, 65, 82, 245, 226, 33, 18, 71, 160, 31, 198, 175, 93, 219, 54, 180, 118, 93, 5, 130, 32, 162, 100, 24, 174, 71, 41, 18, 187, 19, 168, 200, 138, 32, 127, 211, 91, 121, 174, 215, 183, 80, 134, 54, 108, 204, 100, 121, 25, 213, 0, 0, 87, 159, 161, 110, 230, 79, 187, 59, 241, 99, 219, 16, 57, 237, 254, 172, 49, 164, 246, 165, 144, 223, 38, 38, 216, 41, 109, 47, 186, 124, 33, 192, 212, 116, 42, 56, 237, 146, 124, 236, 70, 180, 56, 106, 136, 115, 100, 225, 68, 29, 204, 22, 173, 64, 63, 93, 80, 251, 226, 72, 152, 9, 216, 53, 90, 173, 217, 235, 32, 17, 225, 196, 169, 7, 87, 121, 178, 3, 24, 95, 169, 91, 142, 58, 153, 170, 221, 58, 232, 67, 201, 177, 146, 208, 28, 249, 116, 133, 120, 172, 95, 8, 184, 236, 140, 77, 72, 198, 40, 14, 69, 18, 145, 101, 196, 40, 32, 88, 221, 157, 234, 83, 1, 183, 249, 53, 1, 186, 71, 177, 210, 229, 132, 45, 137, 187, 135, 26, 140, 108, 245, 228, 84, 179, 46, 168, 41, 133, 163, 76, 29, 234, 171, 134, 230, 21, 34, 119, 127, 156, 29, 22, 181, 232, 125, 3, 136, 174, 25, 51, 38, 153, 231, 104, 108, 195, 43, 167, 138, 54, 185, 57, 192, 7, 98, 191, 69, 111, 246, 194, 232, 96, 252, 171, 174, 127, 133, 232, 125, 83, 132, 229, 4, 42, 20, 244, 109, 172], - [93, 153, 88, 255, 223, 147, 158, 101, 139, 107, 181, 51, 113, 239, 247, 225, 138, 135, 193, 31, 42, 169, 58, 222, 195, 103, 228, 233, 61, 219, 148, 183, 208, 117, 143, 161, 173, 151, 208, 105, 214, 133, 3, 201, 107, 139, 28, 75, 233, 180, 4, 36, 149, 12, 52, 151, 108, 114, 176, 54, 128, 191, 149, 14, 62, 112, 19, 88, 115, 93, 37, 240, 65, 240, 155, 133, 113, 100, 192, 9, 141, 156, 132, 160, 243, 73, 220, 40, 141, 105, 132, 208, 43, 62, 151, 230, 187, 242, 221, 194, 18, 137, 84, 65, 41, 173, 102, 251, 215, 71, 89, 133, 177, 179, 198, 152, 20, 144, 8, 125, 26, 166, 238, 163, 12, 209, 182, 169, 100, 81, 161, 249, 163, 123, 202, 105, 51, 80, 152, 152, 181, 195, 239, 184, 116, 53, 198, 86, 157, 129, 223, 151, 176, 88, 78, 4, 201, 120, 74, 30, 207, 66, 25, 125, 60, 107, 151, 61, 102, 46, 100, 144, 189, 181, 159, 141, 118, 38, 237, 9, 37, 154, 161, 101, 41, 28, 36, 206, 50, 4, 45, 34, 108, 235, 106, 114, 175, 154, 31, 147, 132, 47, 41, 228, 182, 197, 103, 185, 160, 165, 136, 239, 26, 154, 181, 79, 147, 234, 7, 16, 224, 114, 8, 159, 187, 103, 166, 28, 130, 133, 73, 246, 158, 160, 23, 156, 203, 210, 202, 174, 250, 236, 22, 31, 65, 240, 252, 187, 94, 180, 175, 165, 199, 216, 211, 104, 166, 26, 210, 48, 113, 36, 42, 218, 221, 142, 2, 58, 48, 148, 250, 243, 1, 36, 140, 64, 59, 7, 15, 192, 118, 177, 26, 199, 116, 128, 156, 69, 245, 252, 25, 104, 147, 250, 78, 188, 202, 197, 153, 149, 142, 44, 219, 116, 59, 11, 190, 90, 239, 50, 216, 140, 203, 88, 29, 99, 11, 150, 22, 206, 154, 216, 27, 149, 15, 48, 86, 227, 251, 55, 174, 215, 116, 170, 155, 47, 226, 156, 99, 204, 16, 25, 169, 150, 117, 61, 176, 237, 62, 51, 231, 246, 183, 223, 190, 1, 209, 82, 255, 28, 133, 22, 202, 164, 47, 218, 246, 148, 129, 99, 18, 113, 168, 248, 219, 116, 221, 24, 92, 186, 52, 150, 62, 81, 150, 115, 102, 197, 154, 164, 235, 215, 45, 246, 131, 210, 97, 249, 185, 25, 248, 29, 112, 64, 39, 232, 168, 135, 236, 84, 224, 213, 19, 93, 79, 234, 177, 108, 34, 139, 111, 13, 229, 24, 95, 188, 76, 248, 125, 106, 94, 251, 70, 166, 0, 224, 85, 12, 42, 47, 86, 72, 123, 206, 226, 122, 52, 119, 249, 22, 224, 179, 76, 125, 153, 196, 231, 53, 142, 145, 110, 147, 96, 222, 96, 203, 73, 79, 230, 253, 247, 216, 173, 126, 139, 233, 207, 137, 97, 74, 210, 212, 203, 200, 68, 90, 93, 70, 11, 18, 138, 140, 83, 204, 4, 161, 229, 11, 136, 22, 237, 189, 12, 204, 211, 152, 163, 241, 49, 135, 82, 7, 160, 23, 1, 240, 53, 61, 10, 223, 181, 0, 199, 146, 215, 47, 150, 36, 2, 128, 46, 83, 252, 47, 177, 24, 97, 7, 197, 209, 236, 220, 42, 230, 145, 128, 67, 31, 57, 89, 200, 158, 63, 115, 119, 201, 56, 15, 36, 146, 36, 35, 204, 142, 138, 131, 44, 76, 102, 27, 48, 79, 184, 249, 174, 59, 184, 133, 94, 105, 74, 187, 96, 104, 103, 192, 8, 201, 189, 142, 77, 122, 153, 187, 116, 187, 38, 15, 210, 175, 139, 50, 6, 31, 160, 37, 98, 156, 71, 167, 184, 89, 50, 198, 134, 67, 149, 31, 197, 19, 171, 192, 211, 67, 41, 41, 7, 201, 161, 242, 25, 106, 77, 116, 250, 86, 182, 196, 140, 172, 95, 13, 115, 28, 48, 175, 105, 163, 120, 43, 89, 15, 155, 97, 209, 166, 88, 115, 78, 229, 246, 141, 48, 37, 56, 26, 82, 11, 111, 65, 239, 113, 58, 176, 150, 247, 148, 242, 197, 255, 90, 174, 212, 237, 9, 241, 140, 55, 121, 210, 26, 210, 122, 35, 190, 242, 151, 207, 211, 192, 177, 10, 36, 78, 253, 190, 100, 29, 158, 70, 224, 3, 180, 159, 234, 205, 108, 53, 217, 9, 73, 57, 234, 220, 204, 224, 140, 205, 30, 56, 178, 131, 14, 255, 144, 15, 234, 50, 210, 63, 254, 33, 60, 167, 76, 116, 50, 129, 196, 44, 154, 232, 52, 236, 103, 29, 152, 229, 181, 236, 143, 126, 44, 175, 109, 0, 124, 40, 162, 6, 46, 174, 4, 66, 206, 213, 118, 120, 243, 122, 242, 34, 40, 176, 30, 108, 47, 22, 119, 214, 237, 174, 228, 143, 22, 35, 35, 103, 193, 234, 76, 98, 7, 0, 147, 167, 214, 213, 85, 164, 26, 63, 249, 6, 154, 77, 106, 2, 75, 185, 240, 52, 26, 217, 127, 203, 84, 73, 255, 45, 51, 84, 94, 178, 206, 20, 88, 1, 147, 93, 201, 32, 212, 69, 66, 156, 90, 15, 182, 62, 245, 32, 235, 161, 131, 19, 82, 183, 186, 2, 73, 172, 244, 219, 99, 162, 106, 164, 213, 194, 181, 102, 119, 145, 13, 231, 40, 129, 148, 121, 200, 131, 142, 98, 87, 0, 86, 214, 66, 148, 127, 139, 8, 31, 101, 135, 239, 159, 183, 191, 93, 103, 42, 88, 59, 249, 39, 74, 254, 223, 35, 52, 118, 151, 40, 48, 214, 20, 6, 120, 180, 193, 219, 233, 168, 184, 29, 105, 212, 203, 67, 145, 126, 236, 22, 172, 138, 72, 20, 110, 158, 90, 147, 175, 93, 102, 236, 93, 121, 209, 43, 173, 133, 240, 231, 49, 249, 117, 98, 20, 235, 247, 27, 247, 222, 5, 242, 242, 57, 9, 56, 115, 140, 187, 59, 46, 16, 251, 177, 80, 65, 193, 10, 74, 162, 117, 176, 104, 67, 237, 208, 111, 32, 141, 151, 143, 151, 132, 192, 62, 13, 247, 213, 229, 216, 155, 151, 211, 215, 19, 226, 232, 24, 108, 10, 219, 142, 244, 146, 244, 17, 140, 123, 239, 2, 127, 85, 244, 110, 126, 123, 32, 195, 36, 226, 84, 25, 202, 210, 230, 169, 228, 162, 34, 247, 132, 95, 212, 248, 131, 36, 198, 121, 56, 27, 131, 70, 22, 160, 136, 228, 137, 225, 52, 10, 131, 71, 78, 168, 33, 157, 116, 235, 123, 109, 196, 90, 96, 175, 168, 42, 39, 25, 10, 241, 85, 25, 188, 244, 25, 208, 151, 221, 66, 106, 38, 119, 74, 57, 142, 175, 89, 210, 81, 141, 195, 241, 4, 77, 55, 123, 214, 147, 158, 29, 28, 253, 128, 13, 140, 244, 228, 201, 233, 98, 152, 55, 124, 174, 236, 159, 139, 163, 212, 10, 23, 49, 250, 60, 2, 176, 232, 63, 129, 166, 115, 30, 148, 47, 23, 145, 166, 8, 29, 64, 11, 104, 255, 13, 219, 48, 165, 40, 37, 47, 58, 145, 217, 177, 1, 158, 35, 15, 198, 227, 24, 184, 78, 227, 7, 128, 6, 87, 255, 61, 14, 149, 228, 177, 238, 228, 27, 60, 190, 248, 155, 75, 11, 236, 16, 198, 86, 66, 21, 86, 185, 70, 42, 9, 168, 218, 63, 250, 154, 65, 58, 123, 81, 102, 91, 48, 128, 163, 147, 44, 222, 142, 85, 94, 131, 230, 82, 64, 88, 38, 141, 53, 108, 43, 245, 54, 206, 67, 230, 227, 133, 27, 25, 136, 132, 14, 96, 39, 10, 236, 47, 165, 178, 68, 122, 57, 16, 24, 10, 191, 24, 1, 105, 81, 95, 104, 77, 158, 181, 241, 178, 194, 49, 72, 88, 64, 160, 93, 16, 179, 182, 144, 44, 190, 38, 37, 78, 143, 22, 158, 148, 162, 155, 148, 98, 117, 189, 75, 144, 36, 136, 121, 59, 17, 101, 143, 152, 145, 207, 242, 189, 31, 243, 252, 106, 220, 37, 93, 177, 24, 150, 82, 48, 43, 56, 164, 252, 204, 186, 130, 192, 74, 87, 201, 170, 57, 248, 105, 245, 162, 28, 220, 36, 58, 17, 109, 45, 7, 205, 227, 202, 156, 76, 148, 42, 255, 180, 154, 80, 94, 102, 18, 165, 87, 34, 58, 101, 64, 77, 201, 129, 123, 42, 42, 168, 204, 253, 223, 171, 192, 22, 183, 67, 231, 103, 134, 83, 161, 214, 253, 86, 77, 161, 223, 90, 213, 54, 103, 211, 177, 174, 252, 131, 198, 60, 67, 27, 19, 18, 121, 13, 240, 109, 87, 11, 25, 160, 36, 241, 237, 239, 202, 150, 217, 246, 245, 61, 39, 230, 120, 181, 210, 143, 103, 163, 231, 63, 218, 109, 138, 117, 234, 248, 154, 158, 47, 200, 169, 35, 63, 113, 54, 134, 37, 107, 176, 199, 49, 136, 39, 210, 22, 191, 165, 76, 8, 219, 40, 227, 255, 249, 99, 119, 63, 202, 83, 162, 217, 6, 133, 34, 145, 0, 174, 1, 83, 100, 15, 118, 203, 211, 108, 124, 142, 68], - [71, 243, 24, 156, 48, 7, 206, 127, 94, 249, 114, 233, 171, 60, 169, 80, 83, 101, 79, 239, 86, 200, 3, 172, 128, 60, 167, 212, 74, 220, 218, 171, 20, 235, 233, 39, 86, 209, 123, 39, 245, 231, 205, 23, 85, 218, 146, 166, 43, 138, 211, 70, 126, 133, 250, 203, 247, 226, 168, 65, 64, 176, 106, 183, 110, 250, 54, 129, 203, 216, 39, 106, 230, 170, 40, 99, 141, 21, 203, 26, 42, 185, 188, 122, 33, 218, 181, 226, 122, 32, 23, 77, 193, 53, 194, 83, 47, 244, 185, 247, 146, 64, 240, 219, 158, 29, 9, 250, 237, 68, 145, 141, 213, 140, 199, 79, 184, 236, 40, 70, 62, 35, 16, 64, 92, 29, 171, 217, 65, 147, 128, 30, 230, 170, 105, 114, 161, 63, 180, 107, 54, 27, 69, 239, 18, 16, 179, 30, 106, 120, 221, 176, 154, 226, 168, 155, 29, 194, 204, 84, 252, 222, 243, 200, 137, 127, 147, 82, 112, 25, 235, 203, 104, 70, 233, 206, 47, 65, 247, 30, 117, 229, 173, 64, 120, 215, 179, 137, 214, 249, 153, 90, 55, 229, 148, 247, 239, 1, 246, 52, 149, 111, 6, 140, 122, 116, 135, 142, 51, 157, 216, 149, 85, 5, 105, 76, 92, 11, 126, 213, 237, 206, 31, 240, 37, 169, 36, 248, 38, 81, 254, 69, 188, 246, 193, 228, 0, 127, 63, 64, 71, 75, 77, 95, 56, 206, 18, 170, 253, 66, 27, 127, 102, 12, 84, 128, 234, 223, 2, 186, 234, 143, 183, 58, 157, 119, 2, 145, 180, 177, 247, 94, 117, 241, 156, 190, 145, 164, 193, 114, 56, 238, 135, 118, 22, 133, 190, 205, 169, 117, 98, 201, 66, 99, 9, 11, 53, 119, 205, 176, 100, 142, 132, 25, 122, 231, 6, 189, 81, 193, 115, 5, 80, 153, 136, 177, 226, 254, 159, 247, 121, 168, 230, 58, 208, 192, 123, 88, 6, 181, 238, 141, 51, 98, 14, 180, 205, 224, 147, 202, 124, 226, 224, 246, 139, 58, 217, 186, 103, 3, 37, 223, 176, 148, 58, 56, 250, 170, 168, 195, 236, 202, 243, 236, 223, 58, 251, 218, 46, 174, 76, 200, 12, 235, 3, 236, 243, 126, 112, 172, 161, 11, 88, 210, 251, 198, 243, 39, 20, 116, 25, 21, 41, 82, 92, 12, 34, 225, 200, 25, 189, 168, 127, 254, 228, 83, 42, 146, 103, 200, 17, 195, 7, 144, 145, 178, 102, 69, 42, 119, 38, 79, 247, 167, 164, 63, 113, 89, 214, 13, 214, 152, 194, 69, 103, 140, 143, 205, 125, 51, 172, 231, 139, 201, 24, 132, 90, 39, 211, 178, 102, 89, 205, 124, 122, 139, 87, 237, 226, 105, 112, 225, 20, 129, 102, 255, 229, 255, 40, 201, 176, 65, 111, 56, 93, 211, 27, 159, 69, 122, 249, 134, 10, 106, 50, 217, 247, 243, 130, 115, 33, 241, 80, 58, 85, 186, 94, 142, 204, 128, 56, 206, 18, 251, 218, 2, 221, 222, 130, 42, 156, 34, 21, 18, 208, 121, 252, 157, 88, 54, 117, 107, 26, 251, 129, 121, 241, 52, 9, 24, 211, 52, 253, 39, 20, 229, 5, 127, 240, 5, 223, 214, 216, 59, 133, 80, 193, 187, 7, 39, 237, 165, 13, 42, 79, 254, 215, 188, 145, 206, 64, 166, 8, 50, 46, 172, 180, 159, 29, 10, 168, 232, 154, 33, 151, 245, 83, 103, 93, 91, 243, 160, 10, 187, 143, 20, 255, 210, 165, 164, 61, 71, 240, 164, 48, 214, 182, 59, 146, 132, 108, 130, 199, 214, 187, 237, 225, 100, 130, 200, 162, 243, 79, 227, 240, 205, 111, 153, 75, 220, 216, 120, 11, 41, 6, 194, 29, 79, 6, 255, 240, 250, 56, 62, 251, 186, 84, 56, 27, 252, 32, 164, 20, 46, 195, 12, 136, 56, 244, 253, 167, 41, 179, 120, 200, 180, 173, 73, 175, 34, 149, 223, 75, 0, 169, 58, 168, 100, 178, 8, 127, 5, 108, 11, 224, 233, 239, 48, 71, 103, 208, 164, 87, 138, 21, 121, 70, 178, 56, 83, 64, 7, 211, 167, 63, 63, 6, 62, 188, 108, 65, 89, 143, 168, 38, 37, 47, 20, 225, 103, 235, 115, 217, 88, 70, 68, 156, 243, 17, 179, 35, 160, 255, 101, 227, 176, 52, 49, 167, 191, 81, 235, 169, 52, 106, 157, 127, 226, 172, 239, 14, 210, 14, 26, 170, 62, 69, 85, 23, 245, 89, 99, 143, 246, 101, 70, 252, 190, 90, 198, 92, 252, 232, 98, 98, 225, 167, 242, 78, 70, 26, 241, 19, 156, 37, 226, 135, 183, 49, 73, 121, 146, 4, 105, 191, 96, 147, 175, 32, 236, 18, 192, 105, 46, 242, 210, 84, 233, 11, 193, 101, 166, 236, 0, 75, 81, 129, 10, 194, 97, 236, 176, 94, 9, 97, 161, 67, 165, 1, 95, 242, 155, 14, 204, 150, 56, 99, 68, 228, 7, 30, 25, 195, 7, 120, 201, 1, 189, 61, 125, 51, 110, 218, 124, 206, 240, 127, 112, 60, 13, 103, 236, 131, 138, 147, 121, 9, 105, 193, 213, 159, 246, 229, 1, 106, 20, 177, 174, 216, 119, 128, 5, 160, 59, 103, 210, 33, 241, 86, 183, 247, 229, 162, 127, 120, 52, 253, 169, 63, 42, 157, 92, 148, 39, 78, 188, 133, 237, 29, 3, 198, 92, 67, 47, 229, 173, 128, 65, 183, 45, 206, 178, 234, 152, 157, 163, 112, 67, 67, 28, 186, 192, 177, 101, 54, 63, 58, 12, 122, 20, 157, 71, 119, 203, 36, 11, 9, 118, 81, 151, 156, 216, 47, 163, 153, 60, 71, 145, 81, 157, 240, 239, 22, 179, 213, 39, 59, 168, 188, 245, 145, 185, 93, 121, 183, 104, 49, 163, 128, 176, 140, 156, 187, 182, 165, 112, 210, 155, 96, 219, 106, 143, 184, 65, 204, 174, 78, 234, 112, 77, 182, 206, 207, 48, 61, 27, 189, 5, 23, 223, 37, 227, 30, 218, 123, 65, 220, 229, 118, 117, 86, 43, 217, 26, 217, 144, 5, 206, 152, 9, 94, 45, 41, 219, 78, 231, 80, 48, 31, 142, 200, 143, 8, 9, 249, 185, 34, 97, 90, 236, 142, 123, 201, 99, 0, 47, 94, 212, 156, 112, 18, 104, 62, 92, 220, 14, 163, 71, 212, 185, 211, 0, 200, 243, 154, 188, 118, 102, 58, 235, 35, 68, 114, 169, 11, 117, 232, 190, 21, 94, 178, 152, 205, 196, 57, 176, 115, 123, 45, 9, 152, 32, 211, 67, 85, 48, 234, 103, 38, 56, 94, 36, 230, 187, 210, 224, 12, 140, 41, 203, 179, 102, 220, 119, 115, 244, 208, 133, 148, 158, 79, 127, 252, 45, 62, 111, 57, 186, 102, 58, 156, 6, 172, 175, 185, 213, 124, 167, 128, 64, 27, 76, 54, 168, 57, 1, 231, 231, 191, 77, 74, 22, 123, 217, 229, 253, 90, 240, 248, 55, 32, 229, 141, 55, 155, 203, 147, 79, 125, 214, 32, 249, 106, 99, 111, 221, 174, 95, 55, 13, 204, 140, 251, 98, 105, 214, 8, 47, 105, 240, 172, 241, 104, 117, 125, 133, 43, 204, 232, 12, 120, 102, 193, 136, 240, 76, 8, 45, 208, 92, 217, 195, 50, 229, 200, 210, 97, 168, 203, 179, 6, 142, 196, 24, 98, 13, 113, 203, 207, 230, 87, 179, 120, 170, 78, 151, 164, 202, 47, 83, 251, 224, 110, 238, 102, 111, 1, 56, 38, 203, 195, 92, 222, 26, 203, 58, 63, 234, 149, 69, 114, 159, 75, 217, 11, 32, 239, 62, 40, 150, 236, 17, 137, 57, 105, 171, 172, 4, 206, 27, 46, 35, 18, 89, 214, 157, 174, 108, 95, 162, 187, 255, 232, 185, 123, 38, 200, 32, 247, 222, 226, 129, 198, 101, 245, 165, 26, 4, 14, 118, 233, 152, 2, 0, 5, 116, 124, 161, 34, 71, 194, 233, 98, 66, 152, 125, 202, 92, 186, 185, 30, 66, 177, 36, 171, 124, 73, 243, 86, 201, 223, 147, 169, 73, 235, 86, 197, 9, 78, 193, 160, 191, 167, 106, 111, 49, 14, 119, 215, 29, 170, 135, 43, 159, 11, 80, 145, 143, 141, 191, 191, 151, 254, 220, 196, 128, 143, 211, 47, 35, 81, 49, 141, 151, 206, 150, 29, 23, 132, 133, 128, 145, 107, 216, 155, 55, 31, 99, 233, 213, 0, 38, 180, 76, 187, 132, 92, 99, 74, 202, 93, 126, 245, 2, 76, 208, 200, 214, 237, 172, 37, 251, 251, 84, 127, 137, 67, 200, 28, 93, 159, 14, 246, 82, 53, 53, 45, 135, 14, 35, 70, 35, 242, 166, 12, 33, 213, 150, 57, 170, 86, 35, 28, 218, 131, 172, 140, 27, 102, 227, 176, 114, 239, 7, 1, 33, 109, 64, 170, 200, 174, 49, 252, 135, 139, 0, 51, 247, 0, 137, 243, 165, 53, 110, 176, 115, 131, 184, 22, 209, 131, 62, 159, 187, 255, 255, 230, 183, 212, 88], - [75, 55, 159, 126, 177, 183, 44, 223, 28, 165, 193, 198, 170, 219, 212, 148, 2, 9, 154, 244, 50, 77, 176, 164, 82, 67, 61, 190, 181, 44, 136, 194, 69, 92, 16, 57, 223, 254, 253, 188, 109, 241, 173, 103, 22, 91, 158, 164, 161, 134, 144, 82, 43, 216, 29, 52, 124, 154, 98, 20, 152, 127, 43, 174, 218, 108, 84, 45, 23, 205, 111, 27, 237, 86, 209, 122, 225, 228, 226, 132, 132, 8, 15, 59, 201, 99, 186, 76, 126, 12, 248, 239, 210, 100, 229, 26, 204, 54, 36, 23, 17, 246, 17, 124, 139, 74, 229, 135, 55, 238, 235, 0, 67, 48, 205, 154, 81, 168, 220, 237, 63, 66, 190, 221, 92, 104, 77, 68, 153, 198, 177, 50, 252, 6, 38, 45, 156, 116, 58, 57, 187, 67, 141, 185, 212, 215, 248, 23, 157, 210, 29, 4, 232, 41, 103, 108, 227, 155, 138, 192, 179, 228, 63, 217, 214, 85, 50, 73, 125, 6, 203, 105, 70, 236, 43, 114, 175, 125, 91, 237, 200, 151, 17, 157, 66, 54, 157, 146, 237, 75, 61, 198, 44, 175, 186, 8, 38, 137, 126, 21, 36, 12, 71, 150, 219, 211, 90, 88, 187, 130, 18, 107, 204, 222, 129, 154, 172, 141, 15, 139, 121, 189, 125, 191, 174, 64, 39, 237, 43, 82, 56, 158, 195, 36, 194, 157, 180, 161, 185, 6, 179, 171, 76, 147, 182, 13, 109, 81, 149, 43, 237, 1, 123, 217, 198, 181, 234, 49, 157, 218, 99, 206, 203, 24, 28, 17, 43, 169, 7, 205, 151, 150, 110, 40, 213, 98, 244, 19, 4, 11, 77, 47, 136, 243, 34, 149, 179, 115, 66, 120, 227, 34, 20, 163, 255, 38, 205, 152, 51, 77, 21, 243, 192, 147, 238, 2, 122, 122, 75, 13, 82, 10, 59, 93, 45, 234, 44, 228, 102, 114, 240, 77, 247, 176, 212, 249, 205, 212, 219, 68, 9, 104, 91, 55, 237, 204, 17, 92, 183, 251, 8, 104, 126, 37, 22, 73, 231, 19, 79, 70, 122, 155, 35, 69, 7, 27, 141, 233, 38, 156, 28, 208, 59, 218, 151, 137, 187, 101, 34, 225, 53, 58, 210, 48, 76, 123, 251, 189, 158, 253, 82, 33, 168, 84, 240, 120, 59, 16, 184, 184, 228, 11, 130, 170, 231, 109, 242, 105, 39, 169, 198, 204, 95, 251, 146, 254, 226, 107, 58, 104, 87, 63, 204, 29, 105, 41, 165, 61, 245, 46, 98, 179, 56, 99, 33, 179, 137, 59, 239, 192, 141, 83, 1, 27, 180, 76, 176, 61, 255, 15, 211, 84, 117, 132, 168, 82, 145, 104, 16, 129, 196, 118, 176, 164, 46, 14, 112, 155, 84, 198, 5, 98, 118, 12, 138, 136, 255, 190, 27, 152, 51, 226, 29, 229, 18, 138, 127, 4, 163, 95, 188, 23, 102, 60, 148, 38, 112, 103, 132, 41, 135, 84, 171, 2, 94, 191, 57, 166, 188, 213, 211, 148, 202, 31, 177, 11, 162, 113, 127, 160, 132, 35, 177, 46, 99, 34, 219, 220, 135, 208, 187, 203, 198, 39, 249, 153, 149, 149, 12, 222, 206, 233, 218, 185, 136, 49, 8, 248, 11, 93, 196, 167, 125, 196, 139, 15, 245, 218, 116, 104, 235, 74, 121, 206, 129, 134, 182, 1, 101, 133, 151, 7, 235, 17, 93, 164, 168, 152, 244, 194, 59, 124, 70, 112, 64, 148, 170, 194, 57, 55, 176, 135, 148, 59, 46, 157, 202, 171, 114, 112, 179, 64, 181, 148, 219, 192, 250, 133, 111, 13, 96, 94, 134, 25, 17, 239, 179, 158, 64, 162, 162, 12, 97, 166, 103, 176, 89, 17, 163, 103, 20, 147, 183, 14, 216, 88, 217, 39, 79, 221, 181, 227, 58, 125, 235, 67, 77, 3, 3, 36, 56, 119, 163, 239, 188, 135, 230, 98, 25, 32, 15, 222, 40, 48, 69, 0, 22, 141, 208, 237, 59, 225, 206, 178, 57, 130, 15, 7, 33, 91, 181, 105, 67, 179, 30, 134, 251, 251, 7, 253, 226, 146, 112, 34, 127, 46, 39, 86, 116, 230, 32, 49, 211, 75, 33, 222, 56, 170, 222, 65, 59, 12, 179, 73, 35, 235, 44, 251, 50, 222, 4, 215, 141, 105, 1, 241, 244, 127, 6, 77, 225, 2, 123, 13, 225, 156, 40, 56, 26, 243, 147, 168, 250, 156, 60, 9, 205, 62, 226, 3, 3, 4, 243, 162, 222, 254, 38, 133, 160, 118, 141, 41, 36, 45, 143, 231, 161, 124, 221, 61, 79, 46, 213, 104, 17, 17, 108, 224, 137, 246, 158, 76, 99, 154, 185, 83, 46, 82, 1, 73, 190, 156, 132, 199, 44, 6, 90, 36, 148, 16, 24, 194, 20, 217, 122, 155, 130, 164, 185, 105, 167, 198, 240, 194, 251, 15, 247, 159, 119, 160, 197, 62, 62, 0, 166, 129, 190, 26, 95, 235, 240, 81, 70, 221, 115, 109, 17, 158, 247, 195, 10, 54, 99, 124, 230, 146, 250, 86, 35, 139, 111, 131, 48, 150, 85, 246, 216, 80, 121, 28, 95, 99, 255, 14, 120, 193, 236, 239, 236, 245, 19, 224, 190, 32, 192, 4, 117, 15, 222, 23, 26, 26, 79, 240, 213, 201, 115, 105, 157, 144, 155, 80, 26, 213, 60, 173, 213, 138, 86, 177, 236, 48, 90, 166, 202, 197, 179, 198, 27, 67, 70, 191, 229, 6, 10, 188, 225, 137, 229, 197, 170, 148, 97, 194, 212, 169, 109, 155, 53, 88, 96, 213, 233, 139, 214, 165, 51, 31, 102, 34, 202, 221, 148, 12, 145, 210, 78, 222, 232, 124, 163, 185, 198, 238, 78, 206, 160, 149, 190, 124, 53, 250, 105, 115, 252, 34, 11, 73, 32, 190, 18, 191, 149, 233, 133, 71, 40, 84, 71, 140, 159, 237, 53, 89, 185, 195, 212, 95, 175, 219, 9, 12, 218, 135, 151, 44, 78, 186, 102, 54, 93, 110, 88, 210, 1, 114, 141, 27, 40, 166, 77, 169, 255, 126, 131, 220, 69, 168, 197, 18, 85, 208, 183, 66, 0, 165, 255, 107, 217, 145, 53, 29, 73, 148, 32, 193, 112, 70, 215, 46, 76, 65, 243, 71, 164, 22, 4, 209, 11, 66, 204, 210, 40, 136, 166, 45, 221, 235, 187, 200, 29, 183, 251, 230, 154, 70, 178, 90, 5, 245, 201, 125, 219, 232, 168, 11, 220, 255, 132, 50, 72, 80, 252, 162, 224, 101, 134, 118, 87, 172, 62, 63, 159, 171, 13, 114, 214, 202, 145, 173, 74, 74, 228, 152, 74, 35, 22, 121, 196, 116, 59, 190, 210, 67, 138, 109, 63, 65, 124, 62, 158, 111, 167, 160, 24, 7, 198, 82, 233, 16, 110, 229, 32, 55, 185, 36, 158, 36, 11, 25, 66, 139, 6, 115, 82, 250, 154, 154, 12, 183, 52, 230, 157, 9, 8, 106, 197, 209, 54, 6, 37, 218, 154, 206, 199, 214, 244, 105, 117, 20, 202, 20, 234, 19, 187, 68, 89, 184, 66, 81, 227, 194, 63, 13, 5, 26, 0, 174, 106, 154, 87, 140, 207, 135, 147, 253, 159, 54, 244, 39, 34, 84, 25, 127, 49, 136, 17, 49, 0, 248, 241, 238, 186, 9, 77, 205, 119, 107, 217, 7, 229, 130, 186, 36, 190, 248, 128, 220, 157, 109, 28, 72, 157, 143, 120, 94, 168, 81, 70, 121, 255, 195, 218, 28, 243, 182, 128, 133, 19, 28, 255, 97, 177, 157, 219, 55, 193, 159, 151, 196, 105, 11, 150, 230, 225, 126, 225, 234, 242, 242, 190, 144, 121, 21, 4, 175, 90, 23, 153, 161, 132, 57, 116, 119, 141, 25, 217, 81, 160, 79, 160, 202, 98, 28, 129, 100, 182, 101, 17, 74, 18, 162, 97, 89, 125, 102, 6, 68, 48, 62, 206, 158, 35, 249, 64, 98, 207, 210, 200, 154, 28, 120, 250, 12, 184, 97, 254, 135, 119, 106, 69, 21, 30, 228, 188, 101, 55, 59, 134, 72, 157, 188, 139, 95, 86, 214, 63, 116, 100, 140, 171, 39, 43, 91, 138, 189, 75, 134, 245, 111, 111, 100, 146, 39, 205, 115, 207, 80, 38, 77, 100, 3, 144, 191, 5, 200, 254, 134, 1, 69, 120, 169, 128, 182, 147, 3, 19, 172, 164, 3, 55, 233, 63, 183, 201, 66, 83, 111, 72, 6, 134, 111, 95, 158, 184, 182, 16, 123, 191, 79, 65, 7, 99, 237, 80, 62, 84, 124, 187, 210, 192, 143, 55, 141, 98, 162, 174, 193, 254, 60, 86, 132, 123, 246, 23, 232, 59, 41, 151, 234, 9, 199, 181, 131, 95, 2, 27, 1, 196, 243, 170, 223, 5, 104, 125, 3, 12, 9, 235, 40, 178, 85, 164, 142, 35, 52, 153, 63, 182, 219, 22, 109, 54, 207, 23, 54, 28, 75, 124, 82, 75, 2, 162, 211, 35, 56, 89, 168, 237, 56, 15, 16, 187, 133, 56, 92, 33, 236, 179, 239, 205, 157, 68, 129, 68, 220, 160, 216, 239, 181], - [191, 215, 21, 214, 190, 38, 9, 162, 60, 55, 41, 92, 249, 38, 22, 84, 67, 167, 123, 38, 237, 254, 160, 10, 100, 3, 76, 87, 20, 252, 121, 230, 8, 225, 253, 146, 137, 151, 189, 207, 240, 89, 183, 154, 2, 78, 7, 234, 28, 1, 69, 8, 17, 173, 26, 193, 149, 77, 150, 222, 221, 70, 113, 244, 93, 152, 237, 228, 88, 124, 207, 194, 76, 156, 82, 235, 223, 248, 99, 112, 143, 208, 161, 60, 244, 242, 193, 233, 53, 128, 53, 114, 157, 222, 74, 220, 189, 204, 20, 253, 156, 239, 174, 188, 137, 105, 110, 185, 59, 106, 47, 179, 72, 89, 8, 214, 75, 238, 113, 176, 216, 40, 242, 150, 126, 18, 241, 202, 92, 12, 91, 154, 119, 90, 56, 34, 50, 227, 40, 76, 56, 180, 220, 45, 196, 99, 17, 81, 75, 89, 120, 25, 185, 24, 159, 38, 62, 151, 130, 136, 26, 42, 64, 230, 173, 136, 5, 154, 3, 215, 67, 177, 116, 200, 183, 179, 225, 244, 169, 149, 178, 100, 157, 10, 215, 85, 77, 142, 138, 9, 14, 154, 200, 46, 56, 202, 70, 1, 67, 232, 11, 40, 226, 102, 188, 163, 101, 122, 204, 92, 106, 73, 31, 21, 110, 46, 161, 176, 183, 61, 129, 168, 247, 203, 60, 38, 19, 85, 241, 44, 154, 57, 175, 217, 211, 67, 89, 198, 29, 207, 149, 35, 251, 112, 204, 58, 100, 66, 200, 122, 51, 92, 221, 91, 253, 73, 167, 183, 168, 115, 123, 151, 91, 91, 70, 39, 15, 0, 40, 199, 206, 215, 65, 151, 106, 165, 77, 84, 168, 241, 182, 168, 163, 227, 229, 37, 49, 155, 102, 89, 24, 100, 219, 49, 144, 20, 98, 78, 150, 34, 140, 145, 255, 195, 217, 243, 234, 86, 107, 125, 50, 69, 8, 152, 143, 179, 157, 247, 66, 110, 43, 10, 208, 138, 130, 193, 86, 54, 62, 45, 120, 124, 196, 107, 134, 229, 79, 192, 95, 87, 159, 145, 228, 71, 205, 22, 8, 132, 215, 204, 54, 82, 253, 212, 23, 84, 80, 225, 247, 97, 225, 229, 222, 16, 141, 137, 132, 216, 143, 145, 36, 21, 35, 127, 117, 10, 204, 212, 12, 16, 54, 248, 224, 190, 35, 34, 45, 206, 75, 229, 125, 143, 82, 148, 19, 160, 69, 31, 179, 135, 210, 189, 131, 185, 207, 12, 14, 122, 38, 85, 52, 90, 89, 127, 17, 150, 216, 85, 9, 16, 138, 154, 56, 201, 227, 136, 172, 40, 104, 57, 20, 234, 4, 98, 93, 86, 252, 64, 42, 209, 253, 215, 191, 238, 110, 156, 107, 114, 17, 202, 236, 220, 67, 64, 115, 180, 29, 119, 102, 223, 56, 192, 175, 4, 229, 140, 100, 255, 57, 255, 221, 233, 117, 48, 63, 25, 100, 103, 51, 219, 118, 238, 209, 86, 167, 1, 213, 150, 99, 23, 2, 12, 120, 195, 11, 218, 38, 152, 211, 140, 29, 75, 254, 108, 151, 88, 226, 92, 193, 205, 148, 188, 193, 130, 241, 174, 223, 61, 153, 44, 50, 155, 174, 41, 95, 100, 70, 189, 205, 65, 161, 139, 61, 218, 138, 139, 109, 123, 211, 230, 198, 91, 122, 75, 220, 246, 218, 175, 4, 99, 153, 32, 156, 43, 191, 161, 32, 219, 133, 244, 171, 198, 181, 136, 228, 6, 182, 131, 89, 124, 101, 214, 80, 35, 178, 245, 94, 253, 35, 61, 0, 136, 245, 94, 155, 151, 222, 74, 125, 249, 240, 133, 246, 41, 48, 255, 146, 134, 121, 163, 164, 252, 82, 177, 96, 77, 196, 123, 124, 124, 19, 128, 67, 24, 254, 245, 216, 65, 62, 8, 77, 197, 201, 250, 151, 61, 244, 17, 84, 190, 51, 21, 44, 184, 99, 134, 28, 172, 228, 174, 206, 225, 57, 12, 112, 28, 83, 238, 88, 162, 20, 12, 143, 47, 133, 48, 235, 164, 30, 235, 100, 170, 159, 34, 118, 95, 35, 57, 249, 176, 25, 37, 125, 10, 180, 168, 105, 161, 72, 49, 212, 112, 148, 228, 14, 221, 138, 30, 52, 99, 158, 154, 109, 190, 111, 214, 174, 62, 185, 181, 223, 247, 186, 187, 88, 204, 36, 182, 156, 224, 23, 111, 253, 31, 15, 31, 226, 128, 246, 4, 224, 202, 227, 160, 9, 177, 157, 56, 23, 24, 55, 213, 82, 191, 194, 33, 206, 249, 173, 240, 75, 92, 7, 163, 135, 8, 5, 201, 201, 184, 79, 66, 126, 159, 188, 224, 61, 86, 56, 71, 94, 52, 92, 38, 126, 154, 207, 143, 5, 113, 161, 204, 61, 68, 91, 41, 108, 58, 218, 110, 249, 176, 118, 48, 20, 43, 78, 53, 114, 221, 106, 13, 28, 18, 179, 132, 4, 100, 94, 171, 9, 246, 189, 122, 25, 61, 3, 141, 235, 224, 204, 185, 150, 182, 245, 200, 108, 179, 189, 8, 103, 208, 223, 4, 73, 176, 119, 211, 38, 182, 204, 135, 165, 170, 59, 147, 14, 63, 80, 107, 121, 200, 9, 224, 12, 58, 40, 225, 225, 73, 147, 131, 16, 174, 37, 138, 8, 233, 251, 4, 127, 76, 230, 41, 80, 211, 246, 17, 125, 136, 118, 125, 32, 235, 19, 201, 35, 241, 79, 233, 187, 247, 255, 3, 142, 63, 152, 84, 182, 107, 112, 159, 93, 28, 39, 101, 247, 104, 124, 206, 48, 81, 30, 172, 56, 158, 183, 29, 190, 116, 178, 66, 16, 85, 111, 222, 169, 216, 0, 208, 35, 162, 1, 104, 6, 139, 101, 103, 1, 53, 250, 124, 167, 115, 88, 200, 158, 45, 223, 139, 6, 64, 138, 82, 246, 100, 141, 71, 100, 85, 245, 31, 11, 235, 206, 79, 117, 156, 93, 47, 106, 154, 113, 37, 107, 156, 216, 97, 109, 37, 230, 138, 121, 237, 6, 95, 70, 7, 20, 92, 58, 37, 129, 200, 50, 251, 116, 237, 161, 30, 122, 239, 116, 20, 94, 34, 49, 46, 85, 6, 74, 73, 73, 12, 7, 48, 87, 144, 184, 109, 114, 94, 39, 140, 17, 10, 31, 187, 79, 75, 163, 24, 237, 214, 220, 105, 224, 220, 27, 146, 57, 108, 184, 77, 189, 11, 38, 19, 135, 207, 39, 79, 185, 55, 177, 108, 6, 16, 112, 64, 78, 129, 228, 157, 242, 51, 47, 239, 193, 87, 218, 116, 237, 46, 99, 197, 147, 95, 11, 202, 106, 73, 3, 185, 138, 147, 25, 225, 185, 73, 200, 118, 155, 241, 211, 16, 15, 38, 240, 183, 142, 83, 156, 20, 200, 79, 197, 51, 71, 42, 96, 116, 136, 137, 47, 98, 234, 26, 254, 47, 173, 2, 244, 201, 100, 42, 149, 237, 209, 205, 8, 144, 9, 243, 171, 69, 130, 27, 177, 60, 25, 7, 93, 197, 162, 225, 18, 250, 114, 253, 95, 62, 5, 218, 60, 21, 230, 31, 245, 129, 0, 60, 54, 211, 132, 53, 24, 68, 74, 179, 237, 21, 227, 236, 91, 166, 179, 10, 162, 57, 208, 23, 124, 214, 19, 251, 26, 105, 227, 92, 95, 87, 197, 67, 11, 8, 219, 253, 234, 184, 81, 127, 189, 228, 130, 18, 87, 129, 175, 172, 68, 207, 4, 146, 151, 242, 237, 155, 82, 237, 244, 40, 96, 45, 246, 14, 139, 46, 231, 163, 71, 80, 121, 55, 64, 238, 91, 89, 88, 94, 35, 138, 159, 14, 75, 19, 247, 154, 28, 234, 126, 174, 65, 25, 186, 78, 186, 44, 157, 55, 127, 17, 39, 143, 63, 33, 81, 152, 68, 25, 70, 140, 153, 240, 171, 113, 211, 78, 28, 129, 131, 78, 131, 160, 206, 124, 250, 4, 25, 143, 213, 38, 172, 7, 222, 180, 181, 226, 87, 241, 169, 134, 145, 76, 95, 241, 101, 231, 77, 0, 68, 209, 67, 160, 173, 158, 215, 10, 223, 54, 72, 211, 123, 252, 247, 125, 91, 247, 82, 112, 118, 20, 105, 23, 129, 164, 115, 245, 98, 151, 217, 94, 73, 39, 192, 184, 142, 153, 170, 219, 45, 29, 131, 155, 226, 200, 62, 79, 68, 15, 218, 2, 210, 77, 54, 17, 96, 205, 144, 0, 37, 77, 224, 149, 185, 183, 108, 108, 171, 71, 22, 34, 158, 37, 76, 231, 147, 190, 210, 55, 229, 158, 102, 162, 105, 133, 29, 223, 49, 55, 190, 187, 24, 146, 231, 28, 14, 117, 200, 85, 135, 17, 193, 30, 14, 194, 98, 199, 49, 150, 241, 43, 138, 198, 228, 72, 95, 223, 217, 100, 109, 182, 29, 78, 178, 112, 137, 247, 82, 97, 231, 171, 223, 74, 118, 153, 57, 85, 70, 210, 55, 21, 93, 183, 33, 100, 85, 195, 132, 171, 166, 3, 116, 211, 137, 255, 124, 216, 89, 43, 93, 154, 37, 85, 7, 93, 193, 158, 11, 125, 71, 74, 250, 160, 8, 89, 25, 118, 222, 10, 2, 56, 24, 211, 152, 43, 82, 185, 79, 153, 239, 45, 105, 232, 11, 90, 229, 214, 33, 94] - ], - "iv": null, - "key": [40, 49, 76, 76, 158, 217, 111, 1, 164, 114, 236, 72, 212, 87, 41, 21], - "modeOfOperation": "ctr", - "plaintext": [ - [34, 130, 138, 120, 153, 21, 109, 218, 172, 58, 94, 76, 249, 10, 27, 138, 33, 212, 182, 139, 166, 174, 218, 24, 206, 16, 242, 224, 13, 77, 190, 127, 201, 41, 115, 95, 119, 60, 141, 29, 212, 49, 13, 124, 206, 162, 100, 84, 208, 234, 51, 181, 82, 75, 39, 136, 220, 26, 208, 78, 248, 182, 249, 26, 142, 197, 18, 79, 75, 179, 222, 153, 203, 128, 163, 30, 112, 172, 113, 209, 248, 55, 17, 93, 238, 98, 95, 150, 64, 192, 202, 12, 51, 81, 221, 89, 86, 36, 142, 245, 17, 225, 131, 28, 134, 215, 192, 45, 131, 26, 250, 4, 152, 179, 163, 17, 181, 206, 161, 94, 24, 195, 41, 105, 185, 58, 100, 91, 93, 108, 118, 186, 98, 185, 44, 170, 9, 220, 173, 148, 147, 207, 90, 238, 23, 155, 64, 211, 135, 53, 169, 4, 111, 158, 129, 79, 157, 15, 114, 72, 159, 167, 166, 185, 228, 61, 187, 245, 216, 226, 155, 132, 227, 140, 193, 39, 83, 171, 153, 240, 173, 1, 147, 125, 251, 131, 13, 203, 253, 234, 230, 49, 102, 153, 28, 72, 152, 240, 26, 224, 38, 124, 194, 28, 129, 158, 175, 148, 50, 96, 144, 46, 191, 152, 75, 170, 120, 224, 215, 3, 3, 137, 175, 115, 76, 115, 112, 10, 147, 207, 24, 10, 207, 233, 107, 226, 34, 68, 188, 41, 34, 237, 239, 119, 149, 113, 108, 150, 121, 192, 255, 19, 203, 122, 99, 164, 252, 221, 49, 2, 58, 68, 113, 255, 123, 217, 29, 33, 120, 9, 157, 251, 180, 149, 66, 156, 201, 117, 51, 1, 108, 213, 232, 146, 120, 213, 106, 24, 21, 235, 94, 43, 200, 248, 223, 44, 190, 225, 234, 56, 94, 109, 191, 151, 89, 222, 208, 56, 65, 81, 102, 114, 125, 253, 56, 59, 239, 125, 196, 153, 139, 14, 7, 3, 141, 194, 15, 103, 191, 196, 69, 38, 23, 232, 189, 88, 162, 143, 232, 124, 124, 250, 167, 219, 56, 236, 1, 63, 89, 237, 174, 219, 155, 42, 86, 120, 231, 127, 201, 236, 62, 231, 137, 107, 37, 136, 248, 198, 237, 154, 243, 248, 27, 214, 109, 171, 179, 190, 248, 180, 224, 56, 46, 132, 218, 57, 164, 26, 38, 175, 197, 170, 230, 190, 152, 47, 39, 210, 186, 208, 146, 211, 249, 188, 84, 234, 107, 233, 14, 240, 49, 234, 62, 230, 80, 68, 64, 210, 240, 72, 187, 204, 87, 213, 55, 129, 193, 41, 212, 206, 205, 197, 138, 220, 181, 166, 123, 96, 253, 183, 128, 200, 250, 230, 249, 138, 99, 6, 67, 179, 184, 212, 2, 46, 220, 239, 183, 51, 38, 79, 99, 33, 222, 187, 222, 162, 195, 11, 146, 119, 82, 158, 87, 230, 185, 247, 145, 158, 117, 79, 240, 84, 207, 38, 17, 80, 134, 71, 68, 7, 207, 224, 250, 208, 113, 178, 95, 206, 138, 112, 188, 137, 124, 16, 72, 107, 249, 61, 31, 48, 48, 86, 199, 224, 204, 3, 81, 35, 192, 118, 113, 243, 10, 86, 197, 3, 253, 125, 136, 23, 232, 66, 187, 33, 161, 68, 203, 16, 86, 40, 207, 214, 113, 23, 190, 135, 252, 12, 83, 202, 83, 22, 166, 200, 136, 173, 207, 43, 42, 146, 239, 58, 209, 41, 59, 220, 101, 173, 205, 209, 172, 236, 119, 176, 201, 254, 143, 215, 3, 217, 152, 201, 105, 233, 96, 219, 170, 34, 66, 75, 96, 113, 74, 186, 62, 175, 70, 133, 21, 37, 93, 17, 16, 13, 126, 59, 134, 246, 6, 133, 70, 171, 207, 164, 143, 133, 214, 71, 91, 141, 59, 204, 140, 22, 242, 49, 192, 210, 3, 218, 244, 174, 3, 187, 99, 72, 187, 139, 186, 145, 159, 139, 81, 251, 152, 140, 96, 131, 160, 84, 240, 149, 176, 103, 57, 169, 212, 203, 100, 211, 142, 126, 180, 201, 82, 97, 25, 47, 194, 209, 204, 241, 28, 82, 254, 99, 215, 235, 249, 42, 250, 162, 172, 46, 23, 69, 0, 129, 208, 182, 160, 28, 186, 93, 211, 77, 121, 144, 76, 21, 107, 142, 37, 61, 31, 50, 227, 189, 75, 176, 89, 61, 169, 134, 83, 114, 213, 222, 144, 39, 97, 4, 107, 248, 4, 15, 15, 242, 145, 126, 211, 7, 90, 150, 146, 236, 231, 40, 166, 236, 151, 102, 200, 117, 255, 40, 253, 16, 253, 192, 76, 158, 21, 252, 125, 7, 69, 58, 137, 87, 229, 228, 203, 222, 112, 38, 15, 7, 182, 84, 193, 205, 144, 217, 19, 184, 211, 231, 179, 183, 200, 63, 155, 10, 148, 243, 214, 132, 188, 143, 230, 10, 32, 216, 41, 35, 217, 64, 49, 165, 88, 66, 207, 53, 247, 130, 117, 222, 146, 47, 101, 138, 90, 100, 79, 96, 74, 160, 204, 135, 164, 218, 38, 207, 224, 113, 123, 120, 217, 38, 84, 31, 79, 16, 109, 134, 122, 153, 97, 55, 55, 19, 2, 22, 149, 71, 161, 229, 98, 104, 64, 213, 245, 166, 138, 150, 151, 201, 185, 223, 62, 234, 27, 176, 102, 38, 250, 4, 155, 69, 83, 69, 239, 205, 8, 144, 22, 1, 157, 32, 227, 205, 138, 247, 230, 40, 165, 160, 126, 115, 222, 40, 153, 32, 186, 29, 203, 23, 227, 215, 134, 124, 183, 11, 99, 177, 198, 191, 115, 239, 17, 218, 80, 197, 1, 25, 239, 224, 210, 191, 156, 37, 103, 101, 66, 23, 150, 27, 226, 181, 235, 4, 122, 177, 59, 248, 93, 204, 150, 230, 4, 40, 71, 78, 243, 30, 252, 164, 72, 169, 195, 114, 91, 12, 168, 104, 72, 154, 77, 181, 65, 36, 173, 99, 87, 94, 114, 145, 107, 147, 13, 59, 193, 167, 125, 184, 82, 196, 230, 59, 211, 136, 78, 90, 160, 74, 68, 255, 80, 159, 149, 106, 246, 246, 233, 225, 60, 230, 66, 44, 101, 8, 95, 118, 85, 181, 93, 35, 69, 231, 253, 149, 247, 214, 64, 56, 117, 19, 144, 45, 216, 230, 215, 149, 249, 114, 134, 109, 185, 88, 124, 202, 156, 81, 138, 105, 110, 39, 145, 156, 155, 132, 188, 28, 137, 57, 183, 166, 213, 165, 65, 212, 74, 139, 97, 85, 142, 138, 220, 229, 66, 137, 127, 3, 234, 66, 59, 154, 200, 238, 140, 172, 211, 250, 15, 222, 156, 15, 40, 32, 78, 119, 78, 33, 107, 135, 135, 6, 66, 176, 211, 143, 153, 206, 98, 59, 168, 137, 225, 9, 43, 218, 209, 151, 105, 25, 215, 51, 10, 12, 253, 122, 67, 10, 76, 174, 145, 245, 41, 73, 0, 98, 255, 231, 99, 86, 200, 105, 101, 158, 112, 84, 134, 208, 206, 129, 128, 73, 183, 216, 123, 133, 193, 136, 33, 213, 8, 20, 5, 49, 60, 244, 192, 108, 143, 243, 94, 109, 99, 102, 127, 20, 97, 64, 197, 172, 17, 244, 86, 23, 116, 226, 84, 223, 31, 108, 11, 117, 41, 192, 223, 100, 134, 20, 93, 201, 83, 245, 87, 21, 109, 168, 189, 241, 109, 165, 89, 210, 85, 9, 35, 32, 54, 193, 18, 169, 252, 27, 134, 213, 21, 114, 24, 228, 247, 92, 250, 73, 33, 238, 85, 21, 231, 65, 10, 162, 123, 24, 100, 134, 70, 73, 109, 255, 222, 121, 217, 90, 98, 161, 212, 198, 154, 38, 2, 158, 233, 215, 166, 156, 135, 153, 149, 75, 101, 222, 128, 121, 88, 121, 196, 172, 203, 194, 197, 83, 111, 222, 24, 227, 101, 5, 17, 1, 124, 246, 222, 245, 127, 245, 114, 224, 116, 165, 112, 150, 142, 51, 133, 162, 11, 136, 106, 213, 21, 252, 91, 38, 161, 22, 209, 41, 173, 148, 72, 234, 132, 6, 94, 139, 48, 114, 12, 253, 164, 67, 113, 250, 110, 106, 255, 204, 152, 203, 145, 140, 17, 226, 69, 95, 35, 180, 102, 241, 161, 165, 197, 156, 144, 8, 1, 13, 120, 255, 180, 144, 157, 176, 23, 48, 84, 118, 40, 203, 135, 163, 37, 255, 179, 47, 203, 108, 188, 87, 32, 203, 230, 35, 156, 211, 210, 54, 62, 109, 215, 241, 35, 108, 50, 2, 39, 120, 9, 145, 147, 188, 200, 151, 84, 207, 168, 215, 245, 47, 245, 27, 36, 122, 214, 3, 206, 230, 53, 235, 64, 81, 41, 236, 139, 1, 3, 59, 183, 251, 203, 103, 144, 114, 6, 25, 129, 100, 150, 167, 122, 241, 42, 205, 248, 39, 94, 192, 236, 7, 18, 216, 228, 240, 134, 119, 140, 34, 113, 37, 135, 150, 89, 196, 191, 248, 86, 127, 207, 205, 197, 241, 170, 192, 237, 3, 125, 163, 76, 242, 121, 23, 11, 54, 6, 251, 251, 236, 198, 48, 19, 91, 170, 214, 226, 121, 137, 146, 177, 243, 105, 66, 49, 244, 246, 96, 35, 114, 35, 103, 89, 208, 184, 205, 222, 218], - [55, 138, 33, 227, 177, 221, 92, 79, 250, 191, 28, 146, 244, 202, 25, 3, 85, 176, 65, 154, 251, 113, 33, 62, 158, 134, 172, 117, 87, 73, 100, 171, 236, 99, 236, 73, 60, 117, 219, 146, 171, 173, 1, 236, 163, 78, 201, 119, 100, 53, 215, 194, 235, 176, 180, 199, 206, 126, 171, 162, 183, 4, 242, 29, 179, 64, 248, 29, 63, 195, 183, 9, 62, 190, 113, 145, 187, 252, 86, 12, 104, 191, 0, 166, 116, 212, 156, 209, 94, 149, 84, 109, 80, 218, 2, 108, 252, 229, 196, 75, 184, 248, 183, 212, 148, 112, 89, 192, 35, 25, 110, 230, 205, 22, 135, 115, 52, 117, 78, 143, 254, 83, 53, 221, 39, 24, 80, 79, 188, 138, 169, 225, 150, 72, 227, 81, 0, 68, 166, 214, 114, 135, 107, 214, 2, 221, 228, 11, 78, 32, 231, 91, 5, 101, 105, 151, 117, 114, 74, 4, 237, 221, 134, 83, 165, 224, 113, 41, 96, 75, 167, 94, 110, 74, 227, 34, 3, 221, 168, 38, 242, 22, 15, 46, 216, 27, 130, 100, 164, 216, 165, 1, 17, 7, 2, 253, 59, 148, 113, 197, 29, 41, 234, 208, 191, 89, 80, 198, 234, 137, 45, 201, 145, 250, 234, 169, 122, 36, 40, 148, 109, 28, 20, 140, 212, 214, 99, 106, 187, 82, 145, 99, 195, 101, 28, 27, 144, 180, 85, 235, 97, 160, 64, 173, 191, 198, 85, 82, 249, 9, 156, 132, 122, 133, 164, 158, 121, 144, 80, 162, 80, 48, 112, 158, 235, 103, 0, 146, 3, 93, 192, 241, 80, 57, 173, 249, 247, 77, 5, 65, 64, 79, 76, 194, 77, 93, 176, 84, 65, 76, 165, 241, 178, 232, 232, 234, 126, 134, 47, 132, 105, 92, 134, 24, 38, 9, 91, 232, 173, 7, 24, 253, 35, 191, 29, 250, 196, 24, 160, 160, 207, 39, 167, 18, 58, 59, 170, 241, 204, 168, 68, 97, 32, 218, 206, 147, 214, 127, 65, 197, 57, 77, 121, 141, 92, 46, 211, 227, 158, 133, 40, 255, 183, 190, 202, 70, 154, 31, 212, 121, 68, 243, 6, 85, 188, 181, 85, 62, 185, 192, 42, 73, 228, 60, 84, 101, 67, 9, 84, 62, 201, 147, 37, 116, 217, 45, 30, 190, 44, 217, 37, 106, 206, 75, 214, 136, 1, 181, 171, 74, 149, 103, 152, 12, 185, 169, 115, 45, 41, 111, 201, 125, 46, 52, 234, 213, 60, 116, 117, 54, 28, 201, 52, 13, 221, 44, 43, 13, 195, 78, 171, 206, 214, 60, 182, 70, 189, 239, 195, 66, 233, 103, 174, 21, 48, 29, 219, 225, 221, 207, 232, 13, 123, 247, 254, 227, 36, 127, 165, 150, 184, 73, 219, 234, 63, 225, 42, 195, 56, 23, 206, 234, 228, 60, 234, 100, 88, 142, 41, 199, 182, 120, 15, 102, 147, 226, 134, 174, 172, 100, 34, 227, 74, 122, 177, 251, 10, 195, 179, 61, 250, 209, 137, 52, 231, 157, 76, 41, 50, 145, 126, 191, 216, 164, 60, 204, 169, 67, 142, 197, 182, 38, 21, 176, 212, 221, 188, 98, 158, 215, 151, 133, 210, 75, 10, 236, 89, 215, 215, 128, 200, 184, 69, 223, 134, 106, 99, 65, 117, 234, 57, 164, 143, 134, 46, 215, 124, 151, 122, 105, 111, 186, 44, 24, 177, 133, 115, 122, 110, 107, 111, 154, 89, 60, 85, 160, 26, 69, 72, 166, 237, 159, 55, 181, 139, 171, 115, 71, 245, 68, 168, 64, 109, 23, 188, 162, 117, 4, 80, 15, 110, 168, 80, 63, 87, 22, 162, 45, 229, 211, 188, 219, 85, 158, 36, 37, 192, 55, 209, 42, 90, 186, 247, 118, 1, 240, 205, 30, 198, 170, 212, 165, 36, 200, 133, 246, 49, 21, 14, 152, 114, 170, 238, 127, 28, 214, 120, 48, 207, 59, 26, 155, 192, 62, 48, 99, 114, 28, 25, 179, 93, 14, 213, 104, 4, 157, 124, 238, 234, 97, 246, 3, 153, 255, 253, 33, 139, 48, 1, 175, 123, 235, 149, 61, 163, 205, 31, 177, 224, 210, 166, 52, 150, 43, 224, 243, 3, 193, 43, 148, 176, 62, 166, 75, 48, 231, 206, 102, 71, 165, 29, 165, 34, 77, 87, 163, 179, 196, 59, 60, 217, 196, 146, 133, 208, 234, 128, 205, 208, 225, 144, 27, 34, 157, 253, 38, 81, 116, 143, 250, 85, 8, 128, 86, 121, 253, 65, 125, 207, 106, 67, 16, 188, 254, 33, 73, 232, 128, 189, 102, 118, 150, 26, 162, 229, 181, 189, 26, 123, 113, 57, 63, 230, 105, 32, 156, 185, 194, 130, 143, 208, 219, 241, 205, 181, 133, 224, 67, 13, 154, 112, 48, 222, 107, 86, 178, 45, 225, 55, 169, 73, 224, 32, 252, 36, 77, 86, 171, 247, 135, 6, 93, 204, 143, 39, 90, 228, 28, 170, 65, 28, 183, 249, 159, 3, 14, 214, 163, 67, 206, 253, 92, 227, 172, 83, 230, 249, 137, 5, 85, 72, 155, 81, 233, 165, 168, 18, 63, 156, 36, 9, 150, 23, 39, 180, 187, 153, 147, 74, 39, 100, 241, 1, 185, 191, 223, 101, 230, 32, 182, 201, 84, 145, 174, 253, 53, 136, 49, 178, 22, 12, 48, 248, 100, 241, 158, 169, 145, 54, 95, 237, 126, 164, 188, 21, 94, 141, 136, 131, 185, 220, 131, 48, 91, 23, 73, 248, 89, 239, 231, 164, 223, 214, 204, 165, 87, 253, 60, 139, 194, 169, 175, 31, 32, 253, 102, 72, 48, 116, 52, 119, 80, 68, 129, 129, 212, 217, 219, 105, 144, 102, 105, 195, 121, 68, 234, 153, 4, 253, 89, 54, 131, 124, 147, 22, 23, 212, 83, 104, 74, 47, 156, 205, 207, 239, 142, 127, 244, 66, 42, 5, 74, 13, 137, 105, 199, 156, 55, 36, 25, 162, 87, 131, 66, 96, 218, 163, 113, 17, 165, 73, 115, 117, 138, 176, 120, 124, 228, 8, 243, 30, 206, 61, 179, 16, 207, 79, 235, 185, 148, 253, 212, 14, 132, 251, 107, 146, 237, 143, 34, 6, 127, 39, 8, 36, 60, 248, 115, 182, 89, 130, 93, 197, 235, 145, 15, 64, 235, 148, 137, 226, 77, 75, 80, 203, 26, 75, 4, 21, 80, 71, 85, 123, 4, 128, 209, 193, 132, 170, 19, 107, 254, 81, 17, 15, 54, 92, 125, 33, 186, 97, 149, 234, 137, 3, 71, 114, 69, 127, 95, 210, 20, 60, 229, 182, 89, 52, 106, 68, 197, 69, 150, 188, 75, 105, 137, 150, 156, 23, 50, 108, 3, 255, 179, 194, 232, 82, 248, 86, 72, 25, 54, 138, 214, 147, 37, 135, 236, 141, 64, 248, 214, 249, 155, 117, 163, 155, 113, 90, 107, 120, 57, 51, 179, 199, 192, 132, 97, 43, 33, 202, 190, 95, 178, 11, 213, 253, 163, 212, 168, 166, 240, 218, 232, 81, 156, 227, 77, 58, 148, 152, 180, 185, 54, 0, 119, 202, 38, 4, 140, 76, 135, 177, 251, 85, 172, 43, 134, 236, 71, 135, 64, 228, 18, 111, 153, 158, 22, 31, 203, 0, 180, 195, 125, 193, 84, 240, 69, 131, 159, 124, 144, 33, 136, 102, 246, 14, 195, 152, 71, 106, 209, 125, 135, 237, 131, 211, 156, 57, 215, 50, 176, 47, 47, 108, 170, 137, 11, 63, 249, 134, 234, 39, 53, 70, 236, 114, 193, 136, 124, 225, 128, 228, 177, 231, 163, 123, 180, 196, 19, 148, 96, 44, 186, 86, 111, 140, 117, 111, 112, 161, 85, 124, 90, 174, 119, 224, 99, 129, 212, 1, 239, 239, 21, 249, 169, 204, 243, 174, 165, 233, 226, 227, 98, 63, 167, 140, 239, 226, 54, 174, 64, 102, 159, 20, 87, 165, 103, 173, 141, 86, 87, 137, 183, 130, 133, 253, 223, 177, 202, 108, 228, 190, 163, 200, 109, 95, 51, 159, 124, 250, 105, 205, 57, 54, 134, 73, 1, 24, 176, 105, 133, 53, 213, 7, 224, 142, 78, 122, 221, 252, 122, 80, 125, 243, 117, 89, 141, 223, 255, 34, 10, 94, 137, 76, 7, 73, 168, 176, 144, 97, 226, 122, 248, 31, 174, 127, 12, 211, 47, 117, 67, 29, 72, 14, 207, 101, 24, 219, 49, 185, 19, 168, 214, 215, 15, 214, 178, 147, 128, 165, 248, 109, 171, 195, 159, 76, 200, 4, 209, 108, 98, 101, 235, 194, 6, 88, 93, 51, 116, 131, 118, 173, 187, 201, 105, 142, 124, 254, 132, 94, 14, 11, 122, 146, 9, 149, 234, 12, 59, 249, 135, 30, 208, 164, 147, 246, 231, 155, 87, 51, 112, 254, 139, 41, 221, 34, 174, 194, 67, 189, 33, 182, 199, 13, 86, 175, 205, 172, 139, 222, 36, 250, 113, 225, 76, 121, 12, 90, 6, 63, 214, 161, 241, 216, 62, 133, 23, 66, 151, 185, 110, 235, 48, 58, 128, 76, 210, 211, 95, 171, 104, 70, 173, 160, 225, 137, 111, 128, 185], - [188, 71, 130, 35, 137, 71, 222, 2, 209, 37, 178, 89, 1, 95, 221, 222, 189, 181, 184, 101, 168, 208, 80, 5, 249, 140, 162, 183, 188, 239, 12, 98, 15, 150, 31, 200, 101, 163, 230, 171, 125, 79, 223, 54, 141, 144, 126, 142, 174, 139, 100, 220, 139, 131, 56, 224, 38, 73, 85, 215, 192, 54, 171, 97, 184, 99, 126, 230, 227, 53, 185, 236, 111, 218, 27, 89, 193, 225, 1, 201, 94, 56, 2, 250, 238, 229, 207, 75, 108, 41, 58, 150, 245, 199, 88, 13, 178, 15, 44, 230, 141, 226, 21, 103, 110, 36, 59, 158, 191, 5, 92, 163, 144, 244, 210, 248, 113, 164, 65, 169, 93, 176, 184, 200, 214, 207, 185, 43, 192, 234, 37, 56, 18, 133, 150, 20, 178, 22, 20, 170, 209, 219, 137, 120, 181, 237, 172, 133, 7, 32, 30, 215, 34, 171, 253, 54, 237, 185, 111, 125, 230, 80, 53, 175, 180, 119, 33, 130, 19, 158, 180, 245, 39, 205, 21, 186, 48, 38, 144, 60, 52, 62, 139, 134, 235, 252, 162, 49, 215, 172, 41, 238, 65, 199, 123, 236, 31, 106, 117, 13, 48, 117, 134, 3, 123, 52, 123, 60, 151, 69, 248, 229, 233, 181, 150, 163, 135, 42, 109, 72, 55, 34, 8, 240, 77, 219, 75, 130, 109, 25, 147, 97, 228, 35, 189, 173, 189, 234, 34, 1, 244, 131, 17, 215, 139, 151, 26, 141, 221, 220, 44, 100, 15, 244, 238, 201, 65, 172, 219, 158, 47, 252, 145, 1, 141, 117, 212, 152, 134, 131, 157, 4, 238, 220, 171, 104, 137, 165, 7, 145, 33, 76, 182, 72, 221, 22, 229, 213, 38, 73, 201, 6, 223, 1, 174, 203, 110, 66, 201, 209, 50, 48, 126, 66, 106, 112, 167, 218, 231, 180, 155, 55, 16, 41, 253, 72, 114, 180, 41, 202, 105, 54, 200, 19, 63, 116, 154, 82, 199, 38, 34, 115, 46, 218, 52, 193, 176, 201, 75, 170, 166, 224, 19, 84, 3, 21, 160, 143, 165, 220, 71, 25, 250, 11, 77, 222, 180, 62, 54, 254, 239, 170, 164, 136, 73, 161, 19, 52, 47, 27, 26, 127, 80, 56, 38, 56, 135, 84, 127, 9, 244, 58, 16, 111, 166, 9, 203, 8, 230, 101, 113, 46, 255, 59, 196, 34, 161, 3, 243, 199, 158, 235, 47, 10, 18, 142, 17, 162, 8, 252, 96, 10, 247, 237, 184, 216, 194, 0, 147, 231, 184, 117, 98, 15, 67, 187, 69, 139, 209, 235, 223, 224, 164, 232, 129, 10, 232, 122, 85, 228, 247, 158, 117, 166, 234, 16, 238, 187, 246, 17, 12, 187, 152, 66, 71, 80, 5, 7, 203, 67, 250, 188, 228, 201, 39, 111, 184, 119, 42, 246, 138, 43, 123, 73, 115, 195, 72, 147, 167, 145, 173, 42, 83, 108, 103, 105, 155, 127, 53, 206, 233, 104, 51, 169, 68, 165, 227, 38, 215, 69, 212, 56, 141, 215, 182, 190, 106, 72, 65, 105, 239, 128, 8, 186, 25, 25, 194, 148, 117, 178, 210, 39, 99, 21, 109, 34, 226, 166, 106, 51, 153, 243, 52, 234, 7, 208, 121, 58, 27, 228, 159, 253, 22, 223, 232, 213, 50, 64, 148, 117, 109, 110, 223, 169, 175, 73, 54, 86, 209, 22, 213, 181, 86, 77, 173, 19, 46, 175, 155, 100, 21, 30, 114, 93, 153, 105, 123, 232, 17, 199, 151, 133, 185, 209, 170, 31, 211, 247, 200, 66, 159, 37, 196, 120, 181, 238, 121, 82, 192, 25, 216, 239, 248, 250, 21, 238, 252, 235, 7, 57, 54, 156, 211, 116, 159, 149, 19, 131, 244, 32, 220, 167, 5, 195, 192, 82, 33, 66, 34, 227, 57, 247, 213, 129, 250, 25, 186, 234, 134, 171, 90, 176, 46, 168, 134, 19, 165, 133, 172, 204, 78, 238, 12, 188, 216, 226, 123, 55, 32, 110, 213, 157, 219, 41, 119, 141, 174, 47, 230, 105, 169, 185, 233, 108, 195, 58, 0, 44, 15, 159, 72, 79, 255, 46, 92, 72, 85, 242, 4, 68, 5, 95, 90, 238, 153, 156, 132, 6, 230, 109, 201, 35, 156, 112, 195, 133, 173, 17, 110, 171, 99, 33, 121, 225, 181, 10, 182, 141, 171, 154, 89, 178, 233, 192, 5, 88, 124, 70, 76, 84, 57, 153, 184, 162, 210, 33, 99, 141, 132, 246, 220, 237, 172, 62, 155, 193, 92, 55, 93, 128, 120, 53, 232, 139, 76, 213, 3, 242, 215, 149, 35, 237, 98, 20, 99, 54, 223, 48, 159, 44, 251, 58, 5, 149, 87, 217, 75, 103, 23, 16, 212, 47, 243, 251, 223, 86, 90, 132, 131, 215, 138, 119, 59, 125, 184, 15, 185, 148, 121, 76, 88, 115, 93, 10, 59, 161, 125, 1, 9, 145, 221, 238, 230, 23, 235, 230, 14, 249, 179, 100, 204, 104, 193, 76, 240, 88, 218, 162, 160, 73, 82, 222, 241, 194, 16, 225, 238, 56, 10, 213, 128, 131, 49, 54, 85, 141, 132, 255, 205, 118, 24, 23, 89, 1, 245, 172, 48, 224, 17, 202, 126, 246, 224, 226, 38, 144, 100, 181, 89, 207, 130, 8, 69, 102, 181, 209, 51, 157, 224, 49, 142, 249, 6, 30, 155, 204, 52, 60, 14, 224, 3, 129, 159, 43, 203, 116, 28, 217, 251, 151, 75, 175, 223, 87, 181, 183, 206, 226, 47, 92, 114, 14, 92, 234, 173, 250, 186, 138, 154, 75, 31, 226, 134, 194, 129, 2, 204, 127, 134, 189, 67, 111, 152, 46, 19, 47, 146, 173, 24, 213, 86, 3, 11, 107, 177, 133, 63, 32, 5, 13, 156, 17, 7, 47, 151, 224, 2, 215, 229, 15, 32, 8, 56, 42, 105, 175, 206, 5, 104, 254, 255, 22, 101, 88, 214, 70, 58, 70, 17, 180, 209, 62, 211, 188, 124, 124, 231, 174, 59, 211, 170, 44, 181, 122, 199, 113, 52, 16, 3, 49, 255, 144, 245, 235, 55, 52, 26, 195, 78, 38, 63, 155, 16, 7, 57, 224, 143, 76, 172, 132, 77, 30, 220, 82, 94, 245, 235, 99, 201, 60, 88, 128, 79, 63, 102, 64, 212, 72, 50, 9, 70, 188, 12, 249, 239, 103, 17, 252, 103, 95, 50, 125, 174, 126, 28, 135, 94, 3, 72, 188, 60, 13, 99, 163, 222, 128, 2, 2, 181, 31, 176, 93, 241, 38, 6, 99, 136, 247, 174, 32, 104, 164, 63, 251, 156, 144, 253, 17, 203, 234, 139, 18, 51, 254, 220, 93, 199, 212, 21, 232, 160, 244, 246, 172, 150, 142, 202, 85, 182, 223, 204, 225, 155, 122, 204, 112, 252, 82, 81, 244, 32, 6, 229, 179, 32, 134, 65, 192, 218, 216, 248, 223, 152, 195, 228, 169, 195, 123, 129, 235, 76, 224, 192, 194, 59, 170, 207, 19, 77, 74, 70, 187, 14, 238, 186, 42, 230, 168, 37, 119, 70, 163, 173, 233, 116, 58, 38, 234, 28, 54, 13, 39, 60, 246, 140, 198, 43, 86, 253, 128, 165, 190, 80, 129, 30, 146, 125, 203, 26, 100, 119, 7, 127, 146, 141, 34, 38, 190, 33, 42, 252, 109, 245, 22, 48, 166, 106, 142, 59, 21, 32, 69, 68, 196, 216, 151, 41, 66, 18, 223, 71, 54, 97, 223, 237, 52, 224, 11, 65, 146, 28, 124, 24, 161, 114, 93, 24, 253, 50, 11, 10, 78, 37, 202, 90, 98, 161, 176, 157, 13, 131, 148, 22, 242, 34, 174, 123, 166, 136, 113, 254, 194, 133, 187, 183, 38, 8, 127, 211, 22, 188, 22, 247, 40, 177, 136, 214, 204, 217, 78, 169, 155, 185, 112, 81, 5, 123, 52, 74, 28, 168, 190, 36, 109, 210, 190, 65, 15, 1, 183, 73, 94, 4, 26, 226, 0, 246, 49, 147, 196, 111, 67, 99, 38, 90, 1, 175, 228, 216, 121, 160, 193, 178, 71, 253, 215, 187, 103, 213, 242, 241, 205, 108, 134, 40, 34, 128, 170, 141, 109, 31, 17, 251, 126, 162, 155, 31, 46, 69, 169, 237, 217, 235, 163, 114, 253, 224, 89, 46, 151, 252, 13, 224, 51, 146, 94, 65, 137, 115, 58, 222, 57, 51, 62, 101, 22, 32, 2, 179, 128, 158, 192, 190, 222, 153, 72, 239, 252, 206, 21, 89, 255, 183, 124, 23, 239, 121, 210, 148, 52, 8, 92, 160, 199, 153, 199, 149, 45, 151, 97, 41, 222, 130, 64, 69, 84, 81, 196, 196, 134, 243, 84, 7, 150, 223, 156, 159, 132, 33, 134, 91, 79, 11, 183, 178, 101, 215, 227, 143, 71, 231, 221, 40, 58, 55, 144, 13, 85, 51, 128, 168, 124, 194, 28, 5, 237, 129, 34, 118, 145, 116, 195, 115, 129, 202, 229, 132, 136, 37, 225, 147, 87, 157, 208, 106, 218, 238, 62, 111, 130, 251, 110, 66, 87, 56, 191, 113, 109, 41, 27, 98, 237, 228, 229, 149, 29, 43, 142, 220, 231], - [121, 143, 37, 218, 234, 144, 26, 5, 241, 181, 142, 254, 21, 9, 2, 248, 76, 56, 63, 143, 17, 189, 224, 170, 201, 179, 246, 208, 92, 30, 51, 21, 165, 43, 221, 102, 209, 67, 242, 93, 88, 209, 94, 141, 16, 194, 202, 186, 41, 67, 168, 102, 12, 107, 72, 213, 202, 220, 25, 229, 200, 241, 48, 32, 114, 29, 195, 229, 48, 154, 1, 30, 233, 155, 17, 7, 231, 80, 254, 157, 154, 162, 117, 116, 251, 54, 152, 78, 17, 63, 223, 209, 66, 25, 91, 73, 39, 202, 247, 46, 27, 170, 104, 17, 253, 120, 12, 198, 150, 60, 212, 242, 41, 144, 45, 49, 250, 1, 1, 81, 236, 255, 75, 99, 105, 162, 106, 147, 115, 152, 204, 2, 204, 26, 251, 82, 51, 63, 34, 249, 70, 34, 156, 113, 238, 27, 60, 90, 188, 247, 242, 175, 132, 62, 71, 81, 119, 12, 167, 32, 207, 129, 166, 189, 214, 203, 217, 186, 142, 98, 122, 237, 187, 11, 54, 172, 78, 204, 12, 152, 144, 63, 70, 176, 46, 170, 189, 186, 240, 255, 200, 182, 243, 198, 149, 137, 233, 83, 111, 85, 143, 228, 41, 41, 62, 195, 90, 34, 159, 104, 200, 203, 105, 28, 233, 118, 200, 161, 126, 88, 129, 202, 132, 214, 107, 218, 156, 188, 72, 121, 237, 251, 22, 75, 194, 113, 11, 249, 26, 173, 252, 123, 85, 17, 110, 193, 202, 8, 5, 194, 85, 255, 182, 104, 174, 52, 175, 138, 4, 192, 245, 160, 130, 119, 163, 226, 6, 178, 150, 123, 30, 61, 193, 250, 208, 200, 10, 113, 107, 16, 124, 103, 203, 11, 208, 130, 149, 126, 66, 27, 151, 89, 32, 99, 138, 98, 32, 88, 185, 212, 179, 187, 179, 195, 204, 86, 187, 223, 211, 34, 90, 254, 201, 51, 224, 219, 72, 231, 86, 39, 116, 59, 66, 159, 209, 101, 29, 188, 107, 232, 186, 206, 133, 209, 12, 63, 229, 246, 162, 9, 101, 183, 228, 53, 1, 56, 69, 228, 27, 75, 148, 15, 46, 163, 141, 123, 143, 255, 181, 46, 156, 187, 252, 41, 137, 95, 177, 37, 153, 71, 209, 159, 12, 101, 76, 64, 190, 158, 222, 65, 141, 251, 184, 190, 88, 97, 111, 150, 2, 144, 236, 10, 115, 188, 158, 69, 184, 92, 48, 222, 9, 107, 141, 202, 128, 198, 149, 149, 78, 157, 236, 58, 145, 115, 6, 13, 122, 207, 64, 120, 24, 227, 98, 248, 101, 129, 115, 51, 212, 141, 33, 17, 176, 193, 162, 138, 135, 148, 241, 57, 61, 54, 202, 51, 239, 68, 124, 210, 150, 224, 103, 19, 179, 147, 41, 166, 246, 245, 67, 55, 52, 12, 83, 123, 156, 62, 227, 36, 89, 184, 13, 70, 209, 248, 254, 34, 125, 105, 219, 113, 5, 87, 42, 6, 154, 155, 177, 63, 135, 48, 121, 252, 164, 71, 236, 158, 24, 120, 220, 64, 75, 231, 97, 16, 62, 101, 131, 18, 209, 7, 124, 13, 17, 246, 141, 177, 105, 249, 175, 14, 99, 91, 30, 52, 237, 177, 183, 244, 153, 143, 173, 149, 131, 39, 164, 65, 77, 42, 203, 108, 229, 205, 0, 55, 236, 78, 175, 112, 153, 79, 152, 7, 218, 226, 33, 61, 204, 16, 116, 172, 107, 182, 139, 44, 117, 164, 32, 179, 138, 116, 211, 143, 187, 238, 95, 19, 7, 178, 245, 145, 109, 20, 6, 156, 25, 155, 32, 106, 92, 7, 102, 235, 116, 36, 150, 117, 239, 109, 157, 84, 28, 177, 212, 137, 70, 152, 43, 30, 222, 86, 118, 82, 117, 101, 106, 146, 171, 208, 205, 32, 113, 111, 24, 51, 209, 159, 216, 128, 234, 233, 244, 1, 43, 105, 20, 201, 207, 183, 94, 204, 90, 222, 166, 101, 231, 67, 178, 226, 148, 174, 158, 156, 154, 241, 94, 47, 149, 81, 75, 165, 141, 247, 61, 239, 184, 182, 180, 62, 169, 209, 166, 179, 44, 180, 39, 103, 124, 252, 145, 101, 18, 146, 153, 86, 14, 219, 94, 144, 7, 57, 125, 9, 195, 97, 209, 231, 225, 70, 10, 130, 85, 2, 183, 77, 192, 78, 179, 12, 79, 80, 188, 154, 34, 118, 144, 148, 140, 216, 198, 58, 250, 139, 92, 208, 223, 124, 155, 255, 75, 226, 65, 46, 73, 5, 246, 237, 70, 93, 79, 4, 58, 66, 77, 22, 36, 108, 36, 200, 240, 163, 119, 2, 159, 3, 178, 72, 169, 41, 247, 13, 130, 197, 23, 90, 20, 207, 36, 241, 179, 105, 112, 206, 55, 213, 151, 13, 14, 229, 71, 239, 143, 68, 156, 142, 128, 78, 200, 14, 144, 106, 182, 134, 184, 220, 56, 83, 15, 108, 128, 219, 39, 32, 60, 27, 184, 219, 18, 39, 24, 70, 118, 60, 143, 134, 68, 119, 125, 225, 137, 21, 164, 164, 229, 155, 136, 187, 82, 22, 152, 156, 46, 9, 225, 225, 146, 38, 167, 189, 16, 54, 192, 23, 219, 29, 111, 33, 186, 60, 69, 72, 5, 114, 136, 45, 49, 3, 142, 141, 190, 196, 229, 186, 249, 214, 20, 84, 154, 21, 151, 117, 132, 247, 25, 239, 193, 35, 226, 24, 204, 193, 229, 23, 69, 179, 33, 182, 96, 13, 225, 176, 163, 152, 211, 84, 46, 228, 203, 181, 152, 15, 6, 51, 145, 108, 170, 235, 169, 99, 34, 203, 160, 243, 80, 128, 181, 237, 55, 185, 228, 25, 13, 99, 55, 148, 169, 183, 41, 145, 4, 238, 97, 169, 134, 246, 106, 94, 4, 88, 35, 223, 182, 95, 22, 124, 123, 37, 125, 80, 225, 15, 19, 169, 109, 118, 229, 212, 106, 93, 239, 233, 247, 49, 50, 133, 194, 160, 183, 249, 2, 124, 138, 111, 65, 11, 247, 93, 102, 55, 218, 243, 227, 151, 218, 4, 18, 65, 128, 194, 191, 131, 38, 248, 48, 141, 238, 51, 132, 104, 77, 15, 45, 142, 185, 100, 130, 44, 134, 187, 240, 231, 29, 10, 64, 180, 168, 40, 162, 139, 201, 236, 32, 52, 236, 29, 63, 208, 31, 218, 34, 161, 157, 97, 240, 2, 63, 152, 100, 207, 219, 217, 7, 55, 66, 6, 198, 142, 136, 28, 132, 233, 116, 236, 90, 246, 252, 158, 98, 122, 240, 125, 162, 216, 227, 32, 97, 39, 22, 52, 249, 43, 51, 241, 57, 85, 131, 216, 130, 12, 109, 127, 11, 27, 195, 4, 230, 45, 58, 193, 186, 109, 178, 0, 145, 192, 181, 34, 207, 38, 118, 1, 36, 240, 86, 8, 73, 208, 170, 215, 124, 11, 139, 48, 118, 171, 71, 122, 220, 101, 38, 186, 98, 123, 47, 175, 64, 32, 75, 67, 167, 171, 243, 191, 4, 22, 158, 4, 233, 172, 214, 186, 214, 48, 249, 84, 134, 109, 80, 177, 226, 238, 103, 60, 85, 168, 169, 250, 168, 215, 69, 99, 59, 128, 179, 187, 147, 71, 14, 163, 95, 79, 168, 0, 21, 87, 144, 108, 166, 29, 74, 179, 182, 52, 212, 34, 64, 204, 34, 241, 2, 217, 177, 74, 208, 243, 61, 182, 211, 80, 116, 165, 181, 211, 144, 174, 73, 54, 78, 168, 47, 205, 247, 92, 18, 6, 137, 10, 27, 79, 166, 207, 130, 112, 89, 225, 10, 163, 162, 213, 34, 236, 27, 210, 224, 110, 36, 142, 143, 99, 38, 58, 20, 43, 63, 66, 222, 250, 213, 81, 119, 204, 78, 134, 110, 108, 98, 191, 226, 170, 85, 50, 93, 158, 105, 212, 204, 170, 106, 55, 155, 56, 103, 176, 7, 114, 22, 18, 98, 68, 154, 238, 235, 106, 171, 151, 205, 251, 205, 188, 86, 22, 98, 193, 140, 135, 181, 5, 71, 31, 184, 168, 203, 73, 185, 77, 140, 94, 114, 78, 80, 24, 181, 217, 116, 246, 115, 253, 3, 153, 192, 133, 127, 172, 115, 81, 156, 166, 27, 76, 77, 174, 94, 136, 225, 244, 148, 28, 43, 133, 75, 102, 238, 188, 175, 201, 91, 42, 124, 127, 83, 55, 95, 74, 228, 182, 125, 213, 33, 82, 160, 176, 170, 178, 211, 42, 79, 74, 174, 135, 129, 48, 9, 122, 220, 253, 17, 9, 20, 99, 194, 27, 34, 17, 161, 233, 49, 203, 216, 180, 172, 138, 50, 205, 243, 200, 183, 16, 239, 74, 72, 56, 234, 84, 52, 127, 154, 29, 109, 202, 219, 69, 71, 104, 36, 246, 55, 227, 154, 86, 120, 6, 41, 178, 74, 163, 137, 12, 140, 193, 41, 10, 11, 105, 237, 40, 157, 212, 250, 18, 108, 57, 42, 172, 86, 6, 110, 227, 52, 169, 49, 171, 41, 105, 50, 60, 210, 203, 221, 1, 49, 198, 33, 139, 46, 103, 23, 127, 83, 155, 59, 221, 162, 1, 69, 255, 243, 2, 147, 141, 170, 28, 31, 101, 183, 166, 158, 168, 45, 3, 133, 74, 249, 245, 254, 240, 27, 206, 179, 99, 155, 247], - [137, 154, 29, 153, 94, 88, 214, 169, 254, 143, 5, 133, 242, 31, 86, 40, 100, 112, 196, 74, 32, 175, 243, 109, 108, 61, 44, 172, 248, 20, 38, 158, 74, 153, 160, 114, 191, 78, 220, 51, 137, 236, 70, 111, 195, 64, 47, 220, 199, 244, 89, 232, 16, 184, 227, 37, 70, 7, 127, 221, 137, 158, 173, 8, 121, 67, 172, 192, 15, 34, 179, 97, 59, 167, 20, 44, 206, 156, 128, 186, 229, 44, 172, 196, 141, 176, 31, 244, 220, 58, 218, 227, 31, 80, 96, 150, 177, 237, 59, 239, 72, 199, 24, 160, 79, 34, 186, 212, 12, 196, 241, 255, 191, 75, 93, 114, 98, 56, 56, 247, 225, 220, 75, 222, 110, 17, 58, 126, 156, 7, 208, 109, 109, 110, 230, 245, 172, 64, 225, 99, 244, 124, 55, 58, 247, 247, 84, 88, 89, 69, 7, 22, 253, 239, 74, 206, 142, 14, 126, 143, 174, 118, 220, 86, 246, 237, 0, 206, 98, 213, 75, 186, 116, 131, 179, 230, 21, 209, 4, 65, 150, 190, 250, 222, 24, 112, 6, 23, 127, 241, 168, 82, 208, 126, 184, 132, 115, 156, 154, 23, 10, 38, 183, 161, 238, 189, 248, 91, 234, 216, 175, 248, 112, 83, 150, 200, 67, 178, 145, 81, 95, 170, 199, 238, 230, 49, 142, 98, 175, 135, 209, 59, 68, 242, 207, 221, 10, 53, 96, 82, 211, 106, 223, 92, 157, 88, 204, 19, 28, 166, 120, 158, 92, 232, 39, 229, 230, 83, 16, 235, 232, 80, 126, 122, 19, 142, 123, 122, 85, 57, 39, 206, 187, 225, 242, 47, 93, 160, 32, 145, 109, 61, 128, 131, 50, 156, 110, 205, 98, 36, 48, 98, 11, 123, 164, 59, 213, 239, 182, 167, 145, 55, 223, 227, 236, 130, 200, 220, 185, 214, 174, 156, 69, 25, 159, 241, 51, 73, 110, 232, 242, 93, 198, 106, 112, 91, 6, 84, 177, 167, 166, 103, 89, 26, 37, 69, 177, 96, 124, 28, 237, 13, 244, 248, 201, 197, 134, 20, 185, 45, 195, 70, 202, 74, 157, 15, 33, 29, 222, 253, 53, 99, 249, 194, 137, 247, 230, 246, 102, 64, 238, 161, 37, 60, 119, 104, 44, 82, 51, 242, 4, 69, 36, 245, 186, 144, 232, 89, 222, 212, 208, 168, 52, 201, 191, 210, 115, 109, 130, 74, 118, 59, 171, 54, 127, 229, 33, 144, 107, 195, 242, 168, 104, 168, 217, 147, 115, 211, 26, 126, 39, 106, 119, 22, 12, 251, 114, 98, 21, 189, 208, 163, 15, 210, 180, 88, 152, 85, 91, 229, 126, 34, 177, 55, 2, 53, 54, 151, 57, 64, 41, 160, 37, 49, 82, 135, 219, 153, 227, 212, 85, 134, 235, 208, 220, 217, 179, 109, 118, 53, 106, 158, 116, 5, 163, 159, 66, 112, 79, 238, 75, 99, 192, 26, 178, 203, 47, 45, 37, 193, 206, 79, 16, 221, 98, 145, 124, 2, 99, 81, 178, 131, 76, 251, 5, 243, 189, 36, 206, 235, 199, 8, 198, 90, 223, 71, 73, 42, 184, 226, 189, 228, 92, 109, 76, 214, 58, 251, 241, 163, 176, 238, 160, 18, 170, 116, 82, 165, 168, 227, 205, 114, 111, 193, 175, 197, 157, 6, 194, 175, 214, 178, 73, 130, 10, 66, 199, 230, 184, 212, 167, 161, 67, 177, 116, 30, 171, 129, 154, 140, 216, 248, 52, 45, 209, 35, 236, 150, 89, 9, 103, 98, 147, 116, 42, 227, 13, 67, 77, 249, 206, 182, 65, 189, 55, 194, 189, 30, 57, 173, 160, 160, 243, 102, 205, 82, 196, 19, 51, 196, 135, 94, 233, 76, 150, 207, 178, 59, 14, 162, 47, 147, 153, 134, 9, 247, 12, 25, 22, 83, 68, 102, 82, 155, 222, 153, 2, 101, 116, 55, 54, 231, 89, 42, 159, 168, 229, 167, 16, 182, 221, 101, 36, 77, 17, 161, 212, 105, 154, 87, 206, 177, 193, 72, 208, 197, 66, 210, 97, 174, 59, 153, 103, 70, 249, 138, 117, 100, 211, 41, 13, 68, 227, 98, 19, 50, 75, 235, 60, 228, 82, 3, 112, 141, 81, 98, 197, 94, 1, 211, 189, 124, 175, 54, 183, 17, 62, 121, 175, 156, 74, 155, 41, 72, 177, 235, 69, 73, 17, 150, 52, 7, 14, 127, 51, 238, 179, 69, 65, 26, 235, 171, 32, 33, 19, 136, 226, 37, 214, 50, 154, 159, 165, 233, 154, 11, 137, 8, 99, 228, 104, 18, 191, 18, 60, 61, 152, 128, 189, 216, 220, 194, 151, 154, 231, 145, 153, 73, 41, 14, 29, 165, 102, 55, 253, 9, 235, 5, 28, 149, 153, 127, 173, 200, 224, 245, 49, 114, 206, 160, 13, 192, 249, 54, 186, 72, 98, 255, 222, 126, 122, 167, 221, 87, 45, 79, 84, 253, 217, 9, 71, 89, 148, 231, 162, 252, 46, 6, 78, 231, 250, 76, 46, 204, 23, 38, 29, 143, 142, 236, 115, 185, 63, 251, 40, 118, 173, 102, 160, 171, 9, 228, 152, 216, 136, 246, 204, 36, 221, 92, 206, 43, 22, 62, 215, 114, 105, 41, 35, 34, 62, 170, 36, 72, 110, 74, 47, 26, 109, 168, 111, 117, 105, 88, 216, 191, 55, 117, 2, 197, 206, 212, 191, 62, 123, 22, 187, 187, 123, 20, 117, 42, 41, 218, 8, 83, 76, 3, 43, 135, 235, 191, 70, 71, 145, 123, 114, 134, 175, 81, 16, 23, 37, 145, 246, 214, 23, 107, 21, 15, 138, 154, 154, 187, 152, 119, 176, 109, 15, 231, 173, 237, 248, 54, 28, 247, 241, 173, 219, 25, 205, 236, 196, 37, 168, 221, 226, 240, 60, 135, 62, 216, 37, 30, 143, 234, 224, 72, 211, 203, 178, 231, 27, 98, 238, 138, 183, 138, 103, 111, 181, 187, 39, 83, 8, 168, 93, 178, 167, 106, 66, 49, 34, 118, 144, 73, 242, 190, 170, 211, 41, 48, 103, 178, 64, 137, 229, 238, 188, 101, 121, 127, 168, 189, 195, 167, 158, 207, 78, 89, 142, 31, 6, 151, 231, 100, 130, 25, 119, 131, 18, 94, 20, 202, 82, 178, 242, 163, 15, 211, 55, 148, 164, 158, 17, 102, 203, 23, 100, 163, 84, 211, 208, 157, 113, 41, 32, 15, 181, 164, 158, 131, 106, 189, 202, 119, 208, 10, 128, 34, 85, 50, 190, 138, 12, 74, 61, 22, 110, 230, 4, 160, 204, 95, 170, 162, 245, 114, 209, 199, 8, 167, 118, 20, 21, 93, 19, 10, 210, 93, 19, 28, 34, 255, 40, 12, 120, 4, 63, 67, 121, 52, 34, 156, 141, 11, 172, 34, 57, 68, 7, 38, 230, 10, 148, 4, 247, 166, 122, 162, 159, 248, 41, 218, 245, 51, 61, 74, 52, 199, 152, 32, 224, 229, 254, 202, 214, 31, 188, 71, 234, 100, 151, 31, 213, 117, 102, 67, 216, 226, 168, 63, 135, 38, 182, 50, 255, 8, 171, 199, 154, 222, 48, 19, 194, 237, 169, 51, 211, 68, 93, 130, 218, 40, 81, 49, 38, 55, 133, 180, 180, 149, 140, 112, 73, 212, 128, 168, 165, 142, 9, 253, 15, 49, 107, 197, 131, 101, 64, 89, 79, 183, 227, 22, 204, 247, 168, 233, 148, 30, 221, 126, 237, 98, 110, 237, 229, 87, 134, 212, 238, 123, 86, 233, 49, 88, 92, 61, 91, 119, 117, 209, 147, 68, 65, 176, 12, 249, 241, 116, 255, 216, 173, 93, 63, 252, 186, 141, 249, 253, 245, 89, 117, 63, 145, 152, 142, 18, 49, 86, 118, 198, 12, 249, 237, 181, 91, 186, 120, 48, 99, 54, 218, 91, 114, 201, 197, 134, 131, 255, 10, 18, 82, 103, 136, 87, 188, 113, 115, 187, 123, 70, 31, 20, 186, 9, 71, 72, 209, 105, 148, 108, 244, 220, 156, 176, 176, 246, 243, 209, 69, 51, 151, 35, 232, 78, 130, 0, 74, 133, 78, 204, 80, 231, 248, 67, 5, 47, 59, 4, 111, 127, 47, 85, 61, 189, 151, 182, 218, 46, 120, 16, 156, 26, 23, 1, 7, 89, 250, 167, 22, 97, 175, 237, 54, 202, 104, 83, 105, 240, 203, 146, 147, 227, 73, 53, 0, 177, 68, 158, 105, 131, 140, 185, 246, 195, 34, 172, 98, 104, 115, 82, 133, 55, 48, 241, 68, 211, 80, 39, 150, 194, 81, 143, 28, 214, 71, 149, 63, 66, 243, 185, 197, 220, 245, 242, 60, 237, 56, 2, 60, 124, 245, 71, 134, 148, 137, 62, 15, 7, 35, 164, 186, 140, 143, 163, 127, 53, 29, 138, 86, 103, 109, 71, 51, 249, 19, 109, 148, 10, 170, 196, 65, 81, 178, 191, 184, 229, 184, 58, 27, 93, 253, 157, 56, 240, 170, 47, 126, 202, 221, 18, 145, 232, 152, 139, 142, 108, 59, 223, 117, 150, 23, 86, 21, 49, 52, 0, 122, 65, 160, 39, 1, 221, 200, 27, 245, 85, 6, 182, 255, 131, 27, 23, 49, 136, 34, 78, 88, 30], - [211, 44, 165, 87, 67, 114, 207, 234, 226, 243, 254, 55, 186, 89, 164, 4, 144, 234, 158, 190, 16, 25, 113, 246, 145, 29, 43, 247, 86, 162, 14, 112, 27, 164, 112, 77, 59, 11, 11, 98, 246, 56, 88, 56, 159, 102, 27, 48, 98, 246, 98, 39, 48, 202, 226, 20, 104, 106, 138, 36, 237, 26, 202, 161, 25, 168, 207, 207, 140, 37, 21, 157, 232, 216, 236, 56, 213, 138, 148, 82, 224, 71, 53, 154, 221, 68, 217, 37, 189, 23, 93, 191, 94, 128, 238, 149, 230, 183, 166, 111, 39, 225, 204, 91, 200, 138, 163, 149, 139, 215, 85, 134, 166, 135, 61, 82, 236, 29, 46, 189, 169, 205, 191, 188, 170, 160, 9, 4, 28, 37, 21, 162, 98, 164, 99, 18, 158, 34, 31, 156, 209, 136, 190, 117, 76, 225, 226, 193, 203, 234, 117, 112, 22, 51, 96, 178, 2, 160, 234, 58, 167, 47, 42, 145, 179, 160, 213, 232, 79, 136, 101, 136, 45, 83, 217, 102, 206, 2, 115, 122, 222, 96, 227, 226, 37, 158, 238, 183, 105, 160, 97, 93, 5, 195, 200, 131, 107, 205, 246, 92, 72, 47, 230, 223, 35, 59, 213, 198, 210, 174, 26, 70, 15, 189, 114, 156, 107, 223, 206, 160, 27, 212, 193, 198, 141, 238, 149, 232, 203, 121, 96, 205, 96, 31, 234, 71, 222, 101, 33, 101, 251, 232, 119, 169, 215, 40, 143, 155, 219, 158, 182, 92, 20, 93, 37, 155, 150, 220, 69, 239, 149, 209, 74, 56, 18, 229, 126, 56, 17, 67, 195, 109, 191, 16, 7, 122, 83, 235, 198, 165, 153, 160, 174, 115, 222, 149, 136, 50, 56, 97, 61, 78, 13, 11, 59, 165, 105, 202, 141, 113, 240, 63, 219, 195, 251, 104, 161, 24, 104, 92, 25, 185, 157, 8, 153, 231, 54, 97, 225, 212, 47, 222, 252, 188, 221, 247, 40, 3, 114, 186, 178, 4, 233, 181, 73, 252, 105, 70, 58, 171, 39, 18, 108, 176, 15, 9, 193, 33, 247, 159, 32, 228, 71, 132, 169, 66, 25, 38, 3, 211, 133, 76, 225, 56, 205, 219, 185, 228, 182, 52, 137, 152, 176, 224, 79, 206, 227, 125, 55, 216, 47, 140, 226, 172, 32, 1, 155, 105, 24, 113, 80, 31, 217, 222, 159, 88, 54, 115, 71, 226, 80, 50, 52, 17, 119, 163, 7, 188, 77, 152, 104, 15, 25, 12, 58, 77, 140, 103, 178, 169, 213, 7, 15, 27, 82, 227, 11, 255, 160, 139, 166, 237, 100, 139, 184, 132, 5, 111, 253, 100, 111, 200, 62, 13, 142, 64, 117, 172, 198, 172, 174, 187, 59, 233, 79, 232, 34, 180, 254, 50, 118, 107, 63, 103, 103, 191, 104, 133, 219, 106, 31, 151, 129, 11, 200, 94, 210, 13, 22, 54, 249, 204, 242, 120, 120, 133, 42, 159, 152, 217, 218, 188, 142, 52, 62, 75, 182, 209, 194, 124, 186, 146, 56, 164, 245, 69, 133, 253, 243, 171, 128, 92, 240, 96, 57, 92, 174, 45, 165, 196, 30, 190, 111, 8, 54, 146, 241, 40, 207, 182, 128, 50, 171, 234, 109, 234, 118, 240, 196, 90, 169, 51, 155, 240, 36, 238, 233, 98, 19, 229, 106, 174, 165, 22, 187, 230, 41, 232, 129, 130, 230, 225, 92, 121, 255, 2, 101, 74, 220, 127, 65, 113, 217, 223, 121, 47, 212, 219, 234, 188, 211, 195, 18, 198, 123, 1, 248, 57, 92, 90, 90, 52, 136, 113, 145, 205, 169, 122, 110, 124, 238, 162, 213, 181, 190, 237, 253, 128, 37, 206, 101, 86, 156, 194, 22, 83, 160, 108, 46, 191, 37, 232, 112, 220, 122, 128, 23, 154, 63, 35, 162, 213, 193, 135, 23, 135, 226, 105, 72, 13, 24, 75, 168, 72, 245, 84, 12, 175, 1, 146, 19, 37, 240, 208, 26, 127, 232, 15, 22, 124, 136, 159, 200, 32, 33, 55, 130, 107, 190, 78, 225, 208, 200, 120, 8, 132, 144, 102, 212, 165, 115, 73, 140, 7, 139, 197, 170, 50, 96, 195, 146, 112, 184, 29, 20, 76, 91, 157, 13, 222, 236, 12, 19, 177, 169, 64, 20, 214, 133, 106, 12, 51, 168, 179, 95, 40, 102, 58, 131, 65, 49, 198, 43, 91, 224, 243, 227, 25, 120, 68, 62, 233, 87, 208, 131, 120, 134, 213, 164, 96, 163, 239, 148, 131, 206, 243, 235, 49, 228, 209, 153, 66, 162, 225, 196, 34, 7, 128, 4, 106, 75, 65, 36, 198, 34, 172, 76, 102, 65, 160, 64, 155, 12, 197, 145, 9, 14, 139, 55, 15, 98, 101, 178, 148, 182, 23, 113, 8, 155, 152, 211, 25, 89, 116, 232, 46, 23, 145, 112, 94, 136, 179, 215, 198, 10, 114, 198, 200, 35, 103, 26, 42, 93, 54, 52, 108, 174, 6, 107, 188, 188, 236, 246, 99, 91, 172, 219, 38, 65, 216, 221, 112, 70, 172, 117, 220, 85, 41, 90, 141, 37, 65, 86, 230, 120, 231, 252, 77, 233, 15, 49, 195, 151, 71, 190, 213, 46, 254, 223, 10, 125, 119, 106, 51, 191, 24, 139, 234, 182, 111, 98, 164, 15, 194, 14, 49, 82, 166, 182, 159, 185, 13, 197, 134, 237, 242, 119, 143, 141, 54, 128, 243, 132, 120, 45, 219, 16, 7, 104, 142, 149, 55, 200, 231, 150, 95, 10, 179, 194, 239, 29, 84, 87, 214, 30, 221, 203, 201, 60, 117, 27, 228, 137, 4, 26, 74, 241, 180, 141, 110, 119, 241, 236, 24, 10, 146, 235, 33, 217, 94, 223, 8, 62, 171, 212, 1, 232, 158, 218, 210, 55, 228, 23, 220, 154, 177, 19, 58, 104, 26, 98, 21, 147, 62, 242, 39, 131, 254, 169, 68, 9, 216, 32, 84, 61, 226, 92, 80, 89, 204, 137, 251, 156, 26, 243, 54, 124, 250, 172, 215, 229, 120, 126, 37, 176, 51, 90, 137, 175, 39, 129, 26, 221, 96, 63, 133, 254, 140, 116, 109, 14, 127, 194, 155, 239, 231, 55, 225, 206, 79, 128, 239, 23, 0, 45, 41, 31, 60, 49, 4, 210, 120, 119, 190, 218, 248, 205, 43, 157, 112, 69, 114, 241, 105, 159, 185, 227, 39, 17, 6, 251, 120, 134, 253, 212, 4, 237, 45, 227, 218, 35, 82, 24, 52, 88, 22, 222, 88, 114, 184, 31, 201, 231, 98, 66, 32, 87, 180, 41, 199, 127, 178, 165, 75, 20, 97, 196, 166, 229, 184, 226, 142, 72, 187, 240, 212, 32, 29, 126, 232, 133, 115, 142, 115, 12, 8, 144, 213, 60, 90, 139, 65, 150, 108, 103, 63, 69, 228, 16, 18, 142, 92, 116, 136, 196, 161, 180, 165, 29, 227, 201, 51, 207, 102, 124, 229, 215, 232, 38, 175, 50, 209, 163, 214, 239, 142, 103, 114, 66, 87, 198, 32, 140, 243, 209, 188, 97, 21, 44, 150, 222, 251, 41, 112, 218, 163, 207, 13, 155, 52, 13, 153, 71, 202, 57, 237, 72, 109, 51, 177, 203, 146, 58, 115, 230, 76, 195, 92, 147, 138, 73, 153, 172, 153, 128, 154, 238, 63, 29, 91, 217, 201, 91, 45, 230, 27, 190, 152, 34, 84, 176, 143, 64, 217, 190, 0, 248, 236, 243, 213, 245, 106, 60, 8, 154, 98, 125, 70, 246, 202, 12, 114, 55, 144, 185, 28, 101, 125, 215, 131, 218, 229, 94, 207, 194, 51, 4, 184, 222, 189, 188, 204, 141, 2, 172, 215, 117, 124, 161, 194, 189, 134, 155, 6, 84, 94, 207, 114, 135, 229, 189, 202, 87, 155, 32, 178, 58, 22, 187, 110, 148, 18, 77, 13, 86, 139, 49, 180, 49, 86, 146, 201, 78, 143, 166, 41, 174, 227, 112, 181, 171, 104, 224, 203, 16, 196, 76, 160, 189, 173, 27, 166, 202, 7, 191, 207, 77, 130, 234, 76, 208, 250, 92, 75, 210, 92, 210, 3, 59, 33, 189, 152, 13, 37, 220, 71, 101, 82, 240, 100, 93, 167, 3, 37, 14, 90, 38, 160, 71, 153, 21, 195, 23, 45, 166, 114, 32, 195, 88, 219, 176, 191, 11, 52, 166, 50, 187, 192, 66, 48, 166, 6, 170, 198, 98, 113, 45, 247, 153, 220, 90, 148, 3, 104, 149, 161, 234, 175, 175, 23, 190, 93, 195, 149, 206, 221, 223, 48, 78, 14, 211, 206, 80, 2, 108, 56, 150, 66, 37, 142, 93, 62, 78, 184, 100, 74, 177, 97, 201, 20, 174, 121, 98, 106, 29, 168, 60, 221, 45, 163, 203, 97, 22, 162, 15, 209, 196, 169, 237, 4, 12, 14, 201, 149, 84, 38, 129, 196, 109, 101, 82, 195, 220, 236, 54, 146, 107, 200, 15, 156, 106, 42, 101, 172, 105, 202, 109, 71, 24, 184, 120, 140, 125, 197, 109, 115, 79, 51, 58, 233, 186, 137, 185, 174, 53, 135, 140, 99, 89, 56, 225, 141, 106, 183, 142, 197, 164, 53, 62, 237] - ], - "segmentSize": null - }, - { - "encrypted": [ - [55, 134, 60, 41, 123, 175, 232, 15, 232, 24, 237, 145, 91, 211, 155, 113, 13, 96, 7, 166, 220, 75, 73, 247, 135, 124, 182, 38, 174, 67, 121, 151, 144, 117, 71, 214, 181, 117, 10, 218, 192, 31, 231, 44, 4, 228, 11, 227, 197, 236, 47, 61, 239, 86, 164, 168, 136, 220, 36, 144, 153, 1, 100, 105, 12, 158, 247, 157, 205, 83, 94, 216, 208, 97, 126, 166, 205, 253, 141, 37, 182, 252, 202, 174, 90, 36, 223, 187, 47, 17, 83, 121, 235, 167, 28, 22, 117, 170, 152, 134, 31, 16, 192, 89, 244, 37, 175, 59, 251, 137, 141, 138, 159, 217, 96, 242, 54, 65, 55, 228, 245, 84, 56, 58, 151, 151, 35, 201, 4, 152, 170, 0, 172, 9, 197, 138, 191, 156, 210, 23, 71, 26, 156, 184, 32, 13, 214, 59, 23, 176, 253, 31, 120, 181, 91, 4, 119, 1, 172, 10, 190, 81, 170, 54, 114, 11, 74, 47, 225, 111, 135, 167, 158, 164, 57, 66, 34, 242, 150, 60, 79, 126, 117, 7, 19, 161, 117, 171, 235, 55, 38, 16, 189, 33, 18, 142, 54, 151, 203, 254, 47, 121, 65, 33, 160, 55, 98, 253, 221, 28, 26, 5, 188, 229, 202, 206, 98, 158, 50, 129, 210, 7, 246, 137, 137, 125, 68, 136, 60, 2, 49, 222, 88, 136, 156, 249, 151, 181, 225, 90, 222, 132, 81, 31, 80, 229, 148, 199, 22, 181, 182, 230, 117, 152, 108, 211, 111, 117, 77, 25, 203, 20, 181, 63, 1, 34, 164, 126, 107, 205, 227, 105, 81, 134, 160, 247, 122, 36, 135, 131, 231, 135, 244, 129, 246, 220, 139, 226, 184, 234, 22, 208, 127, 157, 41, 223, 145, 106, 52, 19, 92, 38, 214, 114, 228, 222, 0, 178, 214, 21, 197, 101, 229, 58, 210, 55, 108, 28, 243, 135, 95, 146, 211, 181, 39, 56, 42, 14, 112, 9, 180, 15, 211, 31, 73, 101, 239, 80, 55, 56, 154, 32, 203, 231, 205, 124, 139, 201, 223, 72, 236, 201, 215, 124, 189, 236, 179, 74, 90, 206, 53, 124, 172, 73, 200, 87, 92, 50, 67, 253, 79, 116, 245, 62, 52, 55, 127, 247, 12, 114, 197, 124, 9, 170, 23, 155, 115, 207, 19, 204, 65, 228, 245, 51, 189, 15, 80, 191, 150, 198, 231, 61, 173, 202, 84, 195, 41, 35, 35, 127, 151, 154, 205, 147, 38, 224, 158, 169, 1, 76, 30, 98, 103, 227, 89, 50, 219, 182, 131, 249, 137, 221, 153, 184, 208, 7, 169, 103, 131, 99, 191, 89, 124, 199, 158, 75, 252, 165, 94, 236, 132, 229, 107, 55, 37, 105, 24, 88, 73, 143, 27, 191, 91, 151, 1, 16, 50, 24, 237, 201, 192, 177, 4, 188, 151, 52, 118, 185, 255, 159, 220, 242, 153, 206, 146, 135, 219, 92, 100, 162, 163, 236, 33, 85, 85, 183, 2, 43, 238, 185, 50, 244, 182, 106, 44, 75, 54, 99, 65, 96, 74, 84, 182, 3, 60, 211, 75, 229, 0, 30, 26, 240, 137, 102, 159, 121, 2, 46, 147, 87, 179, 133, 226, 16, 242, 140, 111, 63, 29, 38, 199, 228, 86, 184, 67, 83, 180, 191, 139, 79, 116, 3, 221, 172, 180, 33, 80, 138, 157, 106, 204, 192, 124, 143, 123, 97, 50, 191, 225, 96, 84, 80, 15, 35, 64, 247, 123, 122, 148, 6, 212, 249, 245, 132, 158, 147, 58, 45, 208, 196, 175, 86, 103, 131, 58, 241, 202, 229, 129, 106, 72, 41, 124, 236, 232, 176, 57, 82, 87, 244, 218, 179, 122, 212, 232, 111, 49, 160, 130, 107, 125, 195, 80, 62, 222, 249, 108, 216, 150, 146, 194, 171, 58, 114, 54, 92, 39, 65, 249, 181, 50, 42, 90, 126, 41, 96, 186, 152, 52, 247, 168, 113, 159, 180, 160, 181, 75, 141, 152, 155, 221, 154, 180, 3, 57, 255, 75, 215, 53, 168, 170, 199, 164, 28, 0, 58, 176, 91, 187, 42, 129, 84, 11, 9, 168, 250, 43, 47, 140, 170, 97, 217, 82, 110, 235, 52, 137, 248, 48, 20, 155, 82, 196, 235, 189, 124, 187, 13, 246, 16, 169, 119, 93, 147, 146, 223, 21, 107, 88, 134, 89, 71, 178, 189, 193, 93, 192, 213, 168, 232, 213, 240, 60, 82, 50, 96, 165, 62, 184, 207, 232, 30, 200, 204, 104, 103, 213, 249, 193, 19, 245, 223, 255, 91, 68, 215, 5, 27, 79, 190, 165, 23, 73, 22, 36, 90, 160, 84, 154, 87, 210, 134, 197, 9, 228, 39, 121, 37, 104, 15, 157, 43, 242, 221, 140, 96, 28, 67, 137, 177, 213, 51, 18, 98, 0, 210, 133, 25, 33, 36, 56, 160, 125, 216, 131, 189, 51, 158, 153, 252, 1, 97, 18, 244, 104, 165, 3, 155, 196, 149, 44, 139, 70, 25, 36, 73, 162, 42, 185, 174, 6, 225, 38, 241, 79, 116, 67, 22, 161, 189, 108, 113, 62, 113, 233, 162, 226, 15, 234, 201, 151, 187, 232, 129, 30, 195, 185, 226, 107, 119, 0, 41, 242, 41, 223, 113, 31, 51, 166, 190, 68, 158, 53, 72, 173, 136, 35, 254, 175, 60, 109, 83, 251, 143, 29, 72, 232, 184, 150, 172, 128, 54, 67, 232, 96, 255, 72, 2, 175, 144, 249, 194, 5, 85, 205, 74, 153, 252, 150, 144, 45, 160, 109, 187, 140, 76, 134, 33, 171, 142, 42, 199, 28, 95, 212, 164, 136, 62, 176, 31, 81, 249, 165, 113, 76, 27, 162, 200, 68, 216, 27, 15, 211, 9, 55, 100, 18, 151, 167, 17, 73, 171, 171, 85, 118, 69, 7, 162, 77, 71, 96, 177, 164, 41, 188, 92, 100, 142, 243, 197, 222, 218, 45, 95, 108, 165, 202, 103, 246, 57, 245, 210, 154, 162, 142, 182, 18, 13, 124, 32, 245, 174, 96, 139, 177, 29, 143, 214, 135, 247, 117, 38, 243, 55, 97, 99, 227, 153, 213, 20, 20, 238, 76, 217, 145, 166, 90, 20, 232, 207, 0, 147, 6, 32, 20, 205, 174, 42, 219, 172, 13, 138, 197, 62, 116, 6, 142, 173, 19, 19, 54, 191, 184, 83, 73, 202, 188, 59, 139, 98, 136, 101, 77, 67, 218, 113, 103, 231, 17, 20, 137, 77, 21, 97, 72, 214, 206, 193, 26, 53, 52, 34, 198, 223, 61, 198, 127, 176, 216, 211, 235, 241, 17, 215, 113, 75, 230, 34, 89, 225, 76, 247, 163, 164, 183, 13, 210, 187, 42, 185, 208, 196, 220, 245, 157, 214, 172, 17, 171, 101, 137, 68, 5, 138, 55, 129, 224, 179, 30, 0, 110, 49, 66, 147, 17, 103, 49, 46, 41, 45, 187, 238, 187, 46, 174, 122, 96, 16, 199, 247, 41, 150, 238, 241, 237, 188, 42, 230, 202, 158, 162, 144, 77, 172, 191, 104, 61, 158, 173, 58, 180, 58, 133, 157, 118, 89, 131, 74, 45, 26, 3, 241, 151, 44, 18, 113, 100, 92, 72, 224, 55, 69, 1, 66, 246, 148, 241, 76, 188, 251, 109, 126, 9, 210, 81, 231, 112, 166, 122, 50, 149, 114, 239, 114, 28, 73, 1, 191, 233, 166, 140, 118, 182, 183, 83, 16, 4, 7, 174, 200, 233, 247, 73, 176, 249, 215, 66, 114, 55, 82, 254, 202, 173, 189, 130, 243, 196, 221, 93, 234, 116, 60, 109, 52, 29, 25, 10, 164, 237, 50, 82, 121, 194, 87, 212, 117, 183, 152, 136, 1, 252, 44, 139, 55, 50, 71, 171, 185, 94, 54, 207, 38, 94, 239, 163, 253, 170, 110, 174, 137, 43, 217, 253, 124, 12, 86, 246, 87, 85, 222, 81, 52, 10, 127, 248, 138, 106, 235, 145, 91, 46, 81, 180, 181, 99, 62, 29, 84, 213, 195, 42, 57, 158, 95, 215, 127, 74, 78, 149, 41, 201, 37, 150, 112, 154, 198, 90, 163, 130, 19, 96, 92, 49, 117, 198, 78, 187, 230, 243, 132, 129, 36, 10, 10, 62, 26, 36, 148, 163, 72, 157, 39, 192, 253, 153, 86, 221, 146, 19, 192, 123, 244, 76, 0, 187, 29, 155, 13, 55, 54, 86, 47, 106, 130, 154, 90, 71, 247, 224, 186, 230, 224, 121, 63, 118, 241, 127, 101, 80, 19, 97, 103, 145, 21, 188, 2, 72, 160, 64, 213, 8, 246, 39, 76, 201, 231, 240, 211, 198, 80, 231, 80, 165, 149, 22, 241, 229, 74, 146, 26, 25, 69, 174, 190, 14, 240, 82, 76, 131, 113, 0, 187, 19, 162, 193, 56, 209, 117, 84, 30, 13, 97, 151, 190, 116, 245, 15, 71, 128, 133, 105, 23, 115, 86, 126, 192, 109, 37, 254, 35, 32, 223, 248, 198, 152, 254, 255, 209, 181, 184, 177, 121, 103, 61, 236, 212, 169, 141, 172, 238, 6, 45, 28, 195, 191, 76, 73, 163, 53, 76, 84, 115, 209, 51, 83, 219, 125, 233, 103, 176, 8, 193, 50, 4, 136, 100, 140, 162, 69, 53, 76, 25, 234, 167, 165, 226, 172, 164, 205, 72, 11, 148, 154, 56, 71, 8, 6, 146, 40, 223, 17, 160, 41, 72, 95, 30, 10, 238, 88, 169, 24, 129, 110, 20, 254, 147, 232, 64, 236, 15, 254, 63, 99, 58, 30, 242, 47, 145, 162, 76, 142, 93, 117, 63, 14, 203, 182, 254, 120, 80, 215, 125, 104, 236, 63, 178, 209, 161, 94, 244, 28, 68, 210, 232, 37, 202, 137, 5, 188, 126, 138, 57, 90, 89, 158, 169, 110, 221, 147, 73, 253, 211, 234, 17, 212, 20, 61, 6, 45, 0, 220, 124, 101, 8, 128, 212, 119, 183, 38, 139, 110, 180, 47, 25, 209, 24, 211, 73, 114, 138, 23, 76, 43, 94, 126, 47, 250, 198, 179, 32, 80, 49, 160, 215, 178, 151, 178, 144, 164, 229, 41, 206, 126, 186, 140, 123, 95, 132, 243, 242, 27, 151, 74, 221, 188, 1, 197, 62, 52, 156, 4, 190, 250, 26, 76, 42, 152, 17, 76, 211, 19, 86, 148, 194, 156, 181, 64, 149, 210, 175, 208, 54, 107, 14, 27, 188, 100, 64, 208, 219, 146, 150, 196, 118, 145, 109, 234, 252, 248, 49, 12, 197, 69, 141, 89, 235, 188, 83, 166, 211, 22, 138, 36, 186, 115, 119, 72, 82, 43, 7, 8, 184, 169, 95, 152, 101, 177, 85, 171, 153, 14, 112, 77, 48, 83, 137, 71, 151, 185, 189, 146, 142, 147, 162, 179, 12, 195, 238, 168, 167, 53, 122, 174, 138, 114, 9, 254, 99, 79, 105, 13, 146, 215, 68, 139, 101, 81, 94, 250, 210, 7, 233, 127, 18, 199, 101, 182, 216, 109, 210, 134, 43, 47, 175, 60, 57, 14, 241, 86, 125, 218, 17, 1, 15, 104, 98, 115, 72, 203, 146, 254, 153, 218, 213, 20, 113, 120, 210, 202, 170, 16, 73, 191, 191, 62, 154, 97, 145, 72, 194, 8, 168, 68, 105, 52, 43, 234, 65, 134, 133, 37, 19, 147, 13, 66, 210, 20, 104, 35, 188, 11, 152, 70, 129, 139, 158, 65, 206, 189, 249, 69, 165, 190, 42, 57, 101, 231, 46, 131, 185, 102, 166, 15, 36, 82, 186, 194, 30, 53, 59, 138, 63, 124, 219, 139, 246, 150, 181, 26, 208, 148, 164, 132, 202, 90, 170, 184, 205, 148, 16, 245, 39, 173, 254, 194, 153, 66, 112, 215, 0, 215, 213, 91, 231, 191, 233, 108, 177, 148, 148, 97, 172, 233, 70, 178, 58, 91, 142, 46, 21, 165, 10, 141, 8, 177, 37, 174, 250, 81, 17, 114, 155, 141, 135, 232, 8, 117, 192, 199, 245, 19, 45, 95, 254, 127, 51, 50, 110, 198, 54, 54, 129, 77, 41, 190, 181, 205, 2, 7, 124, 196, 103, 88, 72, 6, 46, 65, 238, 184, 220, 207, 19, 157, 179, 17, 130, 2, 134, 215, 111, 94, 100, 38, 32, 152, 65, 212, 85, 0, 61, 102, 208, 178, 233, 216, 183, 43, 253, 244, 66, 223, 190, 72, 149, 237, 92, 7, 141, 48, 65, 99, 174, 114, 85, 126, 207, 34, 42, 177, 193, 255, 71, 124, 243, 101, 8, 117, 0, 52, 155, 174, 18, 46, 192, 26, 230, 62, 107, 212, 206, 187, 234, 220, 248, 158, 238, 86, 54, 219, 217, 14, 141, 83, 78, 44, 243, 52, 230, 250, 175, 11, 131, 250, 73, 198, 255, 117, 73, 197, 114, 142, 64, 21, 38, 47, 207, 204, 251, 213, 204, 134, 26, 113, 69, 159, 149, 219, 4, 80, 249, 197, 196, 31, 198, 186, 63, 24, 254, 182, 153, 193, 57, 14, 156, 86, 220, 207, 167, 156, 150, 213, 248, 79, 194, 19, 39, 155, 141, 142, 205, 248, 190, 109, 126, 165, 216, 150, 124, 109, 81, 213, 3, 78, 83, 76, 85, 83, 112, 181, 24, 62, 64, 3, 43, 88, 200, 198, 199, 92, 204, 230, 40, 140, 215, 46, 69, 244, 167, 253, 31, 91, 165, 119, 164, 229, 155, 107, 109, 136, 211, 108, 56, 182, 230, 115, 42, 208, 103, 122, 17, 166, 29, 190, 152, 161, 205, 205, 8, 28, 101, 161, 240, 35, 46, 244, 10, 56, 167, 152, 120, 134, 221, 133, 13, 71, 40, 179, 216, 156, 154, 24, 117, 169, 172, 145, 55, 178, 5, 36, 241, 174, 108, 75, 146, 141, 208, 205, 219, 192, 209, 85, 166, 3, 227, 152, 6, 250, 251, 163, 233, 180, 182, 87, 175, 6, 90, 52, 109, 234, 210, 51, 137, 17, 42, 103, 121, 78, 205, 33, 124, 113, 133, 85, 180, 26, 179, 255, 39, 8, 117, 186, 176, 118, 228, 219, 87, 234, 125, 194, 120, 26, 88, 21, 50, 231, 104, 16, 247, 132, 245, 153, 209, 182, 170, 25, 216, 142, 65, 135, 209, 231, 9, 97, 73, 35, 198, 212, 222, 218, 165, 242, 243, 218, 145, 175, 237, 134, 212, 86, 244, 34, 151, 51, 161, 47, 84, 36, 41, 28, 145, 23, 251, 125, 204, 185, 67, 217, 1, 212, 232, 171, 255, 186, 178, 114, 211, 69, 89, 145, 67, 187, 43, 189, 162, 87, 245, 70, 192, 181, 25, 211, 178, 9, 224, 41, 46, 250, 192, 132, 161, 134, 138, 109, 169, 207, 246, 140, 196, 147, 180, 120, 75, 150, 96, 24, 131, 152, 29, 6, 183, 66, 132, 202, 196, 157, 25, 192, 12, 191, 206, 11, 28, 119, 95, 225, 179, 181, 254, 251, 85, 212, 152, 34, 208, 84, 7, 76, 55, 24, 138, 151, 50, 96, 247, 129, 5, 230, 80, 129, 140, 163, 88, 30, 239, 107, 246, 253, 161, 73, 199, 85, 180, 123, 32, 138, 228, 163, 237, 159, 180, 115, 84, 155, 169, 193, 181, 73, 205, 198, 208, 167, 15, 95, 239, 33, 227, 92, 132, 253, 107, 224, 161, 108, 102, 218, 205, 192, 203, 28, 112, 23, 215, 120, 188, 247, 162, 202, 101, 221, 106, 223, 158, 240, 116, 84, 13, 187, 238, 223, 109, 164, 186, 115, 225, 108, 246, 54, 225, 181, 235, 141, 171, 91, 104, 100, 20, 151, 174, 241, 124, 165, 229, 47, 136, 80, 19, 31, 174, 202, 58, 59, 37, 130, 222, 160, 34, 158, 79, 223, 169, 19, 234, 203, 169, 155, 72, 249, 191, 78, 207, 89, 160, 211, 9, 160, 13, 178, 114, 124, 243, 241, 221, 141, 146, 146, 155, 65, 82, 155, 197, 96, 152, 4, 236, 58, 95, 164, 124, 76, 131, 99, 58, 135, 13, 240, 22, 63, 40, 82, 26, 177, 52, 120, 210, 5, 8, 222, 20, 224, 59, 253, 226, 81, 198, 194, 219, 139, 190, 153, 12, 50, 198, 154, 180, 54, 46, 66, 197, 18, 206, 231, 148, 109, 33, 7, 214, 197, 13, 146, 197, 137, 126, 147, 36, 244, 188, 166, 249, 23, 203, 91, 131, 133, 119, 125, 162, 242, 204, 111, 126, 72, 167, 223, 56, 127, 77, 205, 188, 155, 238, 102, 238, 9, 212, 212, 22, 232, 239, 11, 70, 207, 173, 55, 41, 44, 29, 201, 133, 235, 108, 204, 22, 25, 29, 39, 160, 144, 10, 20, 6, 57, 17, 137, 114, 186, 75, 93, 30, 23, 32, 226, 154, 239, 164, 3, 211, 154, 179, 71, 82, 167, 221, 187, 18, 175, 164, 167, 49, 12, 229, 77, 145, 137, 143, 122, 138, 252, 207, 233, 100, 148, 15, 254, 224, 107, 187, 182, 144, 105, 227, 59, 181, 162, 200, 176, 128, 237, 74, 229, 81, 150, 46, 11, 144, 38, 47, 37, 158, 237, 204, 118, 198, 29, 168, 207, 223, 75, 37, 32, 183, 39, 74, 56, 93, 74, 189, 85, 189, 115, 231, 245, 228, 76, 232, 117, 242, 166, 219, 154, 66, 96, 39, 119, 135, 201, 47, 122, 24, 21, 219, 27, 229, 64, 74, 40, 165, 28, 21, 212, 135, 230, 64, 10, 22, 187, 174, 38, 156, 152, 83, 54, 48, 23, 38, 53, 77, 22, 132, 74, 154, 163, 179, 236, 17, 103, 109, 202, 164, 248, 9, 129, 208, 6, 162, 41, 238, 18, 187, 71, 237, 27, 4, 142, 242, 243, 149, 73, 248, 155, 31, 194, 177, 182, 10, 123, 169, 83, 92, 214, 172, 166, 63, 141, 200, 207, 95, 109, 91, 200, 50, 213, 5, 174, 49, 232, 132, 106, 223, 31, 171, 56, 82, 12, 108, 9, 183, 27, 146, 135, 50, 239, 111, 206, 2, 195, 178, 137, 146, 215, 220, 28, 249, 84, 193, 70, 225, 230, 55, 221, 121, 84, 79, 117, 30, 231, 251, 225, 126, 61, 109, 201, 217, 203, 29, 204, 32, 40, 219, 123, 64, 88, 151, 234, 152, 198, 166, 129, 26, 220, 21, 150, 155, 175, 200, 5, 77, 230, 151, 49, 154, 94, 176, 134, 158, 153, 224, 219, 191, 148, 94, 120, 228, 64, 24, 139, 143, 197, 109, 110, 191, 112, 204, 195, 23, 249, 70, 68, 83, 166, 93, 122, 147, 68, 226, 226, 32, 198, 216, 220, 8, 159, 76, 77, 48, 103, 125, 36, 147, 92, 88, 195, 71, 202, 103, 69, 183, 44, 65, 62, 122, 246, 209, 37, 96, 226, 64, 51, 188, 26, 194, 38, 245, 232, 39, 246, 123, 230, 161, 90, 224, 90, 18, 43, 98, 204, 197, 179, 112, 218, 18, 208, 52, 143, 58, 252, 126, 241, 16, 83, 227, 37, 37, 228, 13, 161, 28, 246, 41, 164, 235, 85, 174, 78, 27, 219, 75, 50, 243, 191, 24, 205, 88, 240, 114, 212, 112, 15, 42, 4, 17, 229, 27, 190, 185, 3, 7, 154, 37, 225, 238, 122, 234, 43, 226, 195, 251, 147, 118, 189, 117, 171, 176, 125, 235, 10, 82, 203, 120, 142, 103, 77, 29, 176, 221, 188, 72, 160, 197, 105, 190, 196, 80, 69, 111, 194, 75, 243, 70, 178, 171, 122, 135, 189, 124, 187, 149, 80, 199, 4, 129, 14, 77, 178, 225, 115, 39, 182, 167, 194, 85, 222, 125, 118, 147, 253, 51, 208, 93, 60, 119, 75, 8, 251, 134, 124, 44, 254, 127, 84, 3, 94, 248, 143, 43, 22, 241, 14, 252, 184, 177, 80, 68, 79, 210, 0, 242, 252, 236, 193, 177, 100, 108, 123, 136, 53, 44, 82, 105, 174, 78, 217, 57, 222, 194, 183, 72, 98, 164, 136, 29, 166, 46, 50, 142, 51, 9, 122, 124, 123, 152, 18, 173, 77, 205, 29, 38, 98, 17, 52, 111, 216, 147, 94, 87, 72, 205, 6, 44, 31, 177, 169, 34, 225, 185, 48, 190, 214, 40, 96, 24, 246, 12, 19, 235, 129, 18, 100, 138, 27, 195, 1, 70, 183, 92, 94, 1, 40, 213, 98, 26, 61, 14, 63, 94, 214, 63, 252, 54, 211, 10, 143, 110, 155, 58, 144, 204, 20, 61, 92, 40, 117, 235, 194, 93, 63, 221, 13, 239, 179, 244, 236, 102, 19, 213, 190, 59, 28, 118, 229, 76, 14, 226, 251, 196, 61, 156, 7, 165, 195, 20, 233, 52, 216, 181, 28, 124, 113, 106, 44, 156, 158, 248, 130, 249, 40, 66, 176, 17, 30, 134, 65, 234, 19, 189, 98, 106, 49, 196, 186, 168, 233, 24, 176, 86, 211, 115, 236, 251, 35, 245, 124, 120, 72, 32, 254, 2, 65, 126, 203, 61, 149, 94, 5, 205, 71, 231, 80, 131, 77, 237, 238, 179, 205, 128, 190, 24, 149, 255, 77, 164, 99, 131, 193, 197, 43, 158, 231, 170, 149, 91, 114, 199, 126, 182, 190, 180, 180, 30, 202, 220, 67, 1, 68, 148, 202, 147, 140, 165, 63, 41, 121, 0, 141, 94, 164, 212, 192, 104, 48, 83, 101, 52, 195, 240, 53, 174, 241, 112, 197, 33, 41, 184, 125, 66, 166, 80, 224, 48, 23, 161, 143, 189, 70, 198, 144, 3, 6, 216, 164, 187, 33, 102, 31, 229, 128, 104, 36, 125, 234, 191, 68, 195, 8, 237, 43, 42, 24, 117, 58, 148, 229, 121, 173, 12, 34, 201, 138, 15, 4, 139, 220, 181, 70, 72, 130, 150, 250, 235, 16, 156, 96, 119, 50, 44, 44, 224, 116, 237, 226, 17, 170, 146, 86, 183, 182, 57, 178, 245, 82, 44, 254, 128, 22, 217, 197, 249, 181, 202, 0, 213, 41, 140, 203, 58, 34, 117, 237, 58, 76, 89, 91, 101, 52, 238, 95, 209, 14, 97, 184, 77, 35, 27, 107, 81, 42, 204, 109, 56, 119, 48, 42, 68, 127, 81, 176, 86, 110, 151, 229, 39, 5, 68, 249, 69, 241, 213, 34, 95, 194, 177, 232, 38, 173, 245, 193, 212, 128, 142, 248, 217, 91, 1, 51, 158, 57, 198, 40, 190, 56, 184, 65, 30, 177, 47, 110, 160, 177, 68, 9, 237, 212, 171, 255, 141, 207, 122, 145, 144, 245, 217, 6, 213, 103, 202, 216, 222, 199, 39, 134, 243, 255, 25, 151, 67, 248, 68, 81, 107, 116, 147, 46, 58, 168, 93, 202, 86, 231, 125, 35, 187, 183, 245, 142, 204, 91, 65, 5, 31, 252, 63, 242, 97, 84, 137, 151, 141, 32, 38, 79, 245, 144, 90, 181, 242, 130, 130, 17, 112, 77, 82, 215, 167, 49, 156, 15, 8, 1, 226, 240, 90, 216, 252, 251, 151, 173, 164, 28, 106, 139, 162, 141, 17, 121, 170, 40, 174, 89, 46, 239, 173, 107, 39, 186, 164, 106, 44, 51, 249, 117, 61, 205, 116, 57, 8, 106, 82, 54, 215, 40, 219, 125, 5, 152, 8, 162, 5, 14, 79, 76, 128, 142, 170, 222, 158, 58, 110, 215, 25, 68, 95, 188, 232, 111, 22, 16, 175, 64, 244, 233, 60, 9, 139, 109, 156, 211, 248, 252, 183, 100, 1, 231, 3, 236, 227, 80, 199, 103, 29, 175, 172, 230, 162, 45, 43, 218, 96, 184, 229, 218, 134, 103, 57, 30, 163, 144, 173, 155, 10, 152, 53, 139, 126, 189, 117, 72, 208, 115, 193, 212, 190, 117, 200, 92, 206, 121, 89, 106, 196, 153, 122, 237, 22, 117, 49, 168, 50, 105, 41, 249, 96, 18, 159, 215, 58, 198, 167, 191, 65, 224, 252, 130, 54, 14, 160, 134, 200, 208, 79, 50, 145, 159, 229, 126, 31, 18, 216, 246, 55, 52, 249, 101, 148, 3, 124, 207, 101, 254, 191, 152, 108, 149, 175, 227, 250, 116, 99, 105, 225, 122, 145, 8, 237, 64, 126, 188, 103, 3, 219, 237, 175, 129, 250, 62, 177, 161, 220, 80, 123, 208, 242, 87, 20, 27, 177, 230, 107, 215, 34, 6, 138, 61, 227, 157, 139, 210, 94, 103, 239, 250, 120, 201, 240, 80, 118, 187, 126, 48, 63, 224, 231, 104, 246, 78, 125, 166, 29, 148, 3, 55, 30, 47, 227, 114, 222, 110, 24, 171, 253, 109, 154, 233, 220, 243, 144, 138, 243, 91, 69, 80, 12, 37, 90, 5, 39, 156, 66, 156, 244, 31, 38, 67, 90, 108, 100, 204, 48, 0, 132, 70, 209, 15, 42, 109, 118, 9, 171, 123, 84, 110, 223, 236, 72, 164, 171, 90, 2, 228, 34, 88, 156, 15, 158, 3, 215, 252, 97, 142, 211, 235, 141, 116, 250, 137, 159, 121, 152, 211, 252, 226, 178, 144, 191, 117, 13, 67, 247, 226, 103, 57, 100, 68, 189, 141, 124, 120, 153, 248, 57, 105, 58, 243, 153, 21, 69, 187, 2, 16, 254, 155, 240, 157, 102, 78, 89, 155, 171, 89, 52, 26, 220, 175, 69, 112, 121, 36, 137, 237, 73, 132, 10, 64, 1, 54, 56, 232, 190, 171, 35, 199, 32, 45, 113, 206, 158, 35, 116, 107, 182, 52, 213, 55, 17, 90, 116, 110, 62, 237, 31, 55, 175, 165, 127, 23, 27, 213, 170, 219, 66, 233, 249, 91, 143, 181, 3, 175, 194, 205, 182, 215, 120, 29, 71, 109, 178, 144, 237, 47, 147, 121, 247, 138, 174, 199, 215, 115, 242, 220, 13, 3, 241, 62, 247, 220, 132, 145, 10, 211, 50, 201, 96, 226, 18, 249, 62, 254, 156, 221, 227, 18, 149, 240, 177, 75, 100, 40, 39, 55, 208, 218, 84, 70, 157, 134, 27, 172, 141, 187, 44, 178, 43, 43, 233, 175, 90, 64, 6, 96, 58, 205, 58, 73, 46, 161, 43, 80, 130, 219, 91, 204, 219, 32, 11, 47, 144, 9, 241, 149, 11, 95, 41, 224, 152, 88, 51, 105, 96, 237, 238, 43, 152, 177, 169, 162, 5, 248, 3, 57, 168, 91, 0, 10, 152, 108, 20, 205, 242, 125, 181, 197, 115, 74, 202, 22, 43, 87, 39, 154, 11, 7, 184, 72, 170, 17, 21, 66, 180, 192, 118, 109, 158, 21, 85, 38, 212, 8, 110, 233, 56, 197, 122, 189, 207, 79, 225, 119, 0, 117, 238, 123, 14, 9, 92, 1, 91, 53, 163, 154, 97, 109, 73, 227, 57, 122, 94, 78, 36, 182, 78, 173, 249, 115, 222, 235, 15, 22, 27, 38, 107, 226, 225, 154, 96, 96, 109, 161, 107, 165, 81, 192, 87, 65, 106, 94, 122, 158, 2, 206, 224, 235, 20, 169, 188, 217, 181, 7, 144, 7, 26, 219, 137, 238, 4, 233, 159, 103, 96, 204, 130, 15, 46, 80, 227, 114, 99, 53, 77, 119, 186, 42, 33, 130, 59, 177, 161, 24, 57, 207, 194, 176, 200, 232, 53, 35, 100, 118, 228, 147, 235, 186, 26, 221, 75, 44, 196, 92, 141, 121, 213, 47, 138, 215, 87, 69, 221, 106, 61, 164, 137, 207, 221, 186, 6, 97, 250, 124, 251, 254, 86, 18, 69, 102, 57, 83, 101, 126, 218, 31, 156, 174, 60, 16, 174, 209, 116, 103, 16, 78, 135, 12, 123, 66, 4, 242, 66, 125, 39, 23, 25, 215, 52, 136, 204, 231, 103, 27, 164, 213, 244, 254, 235, 210, 140, 106, 87, 228, 178, 88, 48, 113, 199, 95, 165, 234, 239, 243, 38, 19, 20, 169, 132, 48, 47, 181, 127, 9, 184, 178, 107, 244, 16, 82, 178, 44, 221, 192, 76, 178, 31, 189, 162, 43, 87, 225, 28, 67, 159, 139, 83, 104, 117, 81, 161, 90, 87, 45, 38, 233, 245, 17, 189, 142, 202, 171, 243, 204, 226, 35, 7, 78, 91, 42, 113, 252, 248, 238, 195, 80, 193, 190, 157, 192, 183, 194, 76, 5, 156, 134, 90, 146, 246, 162, 243, 66, 79, 187, 192, 0, 143, 157, 220, 117, 131, 219, 72, 107, 179, 147, 67, 96, 73, 222, 214, 156, 204, 166, 134, 46, 57, 230, 221, 23, 118, 217, 12, 144, 37, 112, 139, 223, 122, 57, 132, 215, 28, 223, 255, 155, 207, 249, 19, 66, 115, 216, 145, 225, 83, 133, 169, 245, 192, 138, 66, 56, 77, 54, 125, 62, 59, 234, 8, 102, 172, 145, 156, 221, 243, 238, 41, 13, 5, 98, 219, 21, 1, 120, 194, 185, 58, 245, 156, 184, 252, 21, 234, 210, 120, 138, 147, 231, 39, 108, 26, 60, 7, 7, 103, 221, 123, 109, 117, 246, 248, 183, 249, 77, 175, 212, 44, 176, 219, 137, 76, 141, 44, 184, 60, 27, 111, 166, 23, 247, 1, 73, 17, 114, 120, 203, 210, 94, 16, 246, 102, 68, 30, 199, 110, 237, 120, 154, 199, 177, 135, 182, 32, 229, 76, 193, 255, 102, 155, 237, 162, 99, 0, 53, 23, 8, 168, 156, 121, 242, 198, 253, 187, 0, 118, 254, 29, 26, 187, 170, 72, 74, 93, 11, 237, 191, 212, 53, 32, 82, 124, 57, 4, 37, 209, 127, 174, 33, 37, 216, 237, 198, 244, 74, 172, 249, 203, 92, 155, 214, 105, 191, 173, 47, 38, 69, 149, 47, 137, 49, 190, 242, 93, 28, 38, 25, 44, 41, 204, 252, 150, 104, 138, 8, 9, 239, 217, 166, 189, 205, 85, 83, 48, 7, 10, 106, 98, 104, 40, 177, 124, 17, 194, 214, 190, 216, 74, 161, 60, 91, 104, 116, 172, 160, 147, 227, 23, 116, 3, 178, 24, 94, 42, 186, 18, 150, 207, 134, 79, 113, 122, 184, 94, 6, 144, 190, 181, 199, 122, 8, 98, 89, 158, 240, 170, 105, 133, 38, 240, 87, 224, 226, 110, 202, 30, 212, 251, 233, 47, 246, 149, 17, 153, 19, 82, 17, 186, 166, 226, 167, 195, 60, 255, 26, 189, 187, 178, 157, 70, 254, 201, 146, 30, 211, 231, 69, 23, 147, 245, 175, 24, 74, 40, 7, 50, 7, 175, 11, 184, 184, 224, 244, 84, 143, 4, 193, 175, 105, 46, 37, 166, 171, 18, 31, 13, 232, 46, 51, 245, 125, 89, 95, 161, 106, 165, 191, 93, 64, 1, 92, 248, 213, 81, 7, 169, 123, 35, 91, 114, 20, 236, 16, 154, 250, 64, 80, 87, 0, 99, 10, 61, 110, 4, 250, 16, 212, 73, 33, 70, 205, 122, 222, 212, 140, 163, 31, 42, 217, 255, 65, 251, 148, 194, 54, 108, 94, 215, 165, 13, 179, 42, 241, 46, 174, 82, 130, 156, 16, 81, 134, 48, 226, 65, 183, 229, 97, 219, 184, 121, 99, 114, 181, 210, 50, 179, 14, 236, 72, 24, 17, 138, 16, 43, 187, 135, 199, 114, 255, 182, 59, 161, 251, 247, 190, 208, 201, 14, 21, 98, 248, 189, 79, 245, 245, 153, 189, 174, 162, 245, 78, 41, 93, 29, 227, 246, 118, 203, 23, 67, 204, 193, 176, 35, 22, 245, 242, 85, 75, 188, 214, 165, 142, 71, 164, 89, 164, 203, 120, 76, 185, 113, 229, 14, 216, 158, 119, 135, 199, 106, 197, 35, 29, 76, 54, 82, 130, 28, 247, 26, 131, 250, 112, 172, 251, 115, 61, 66, 198, 86, 122, 198, 37, 152, 253, 194, 140, 144, 205, 110, 244, 107, 50, 204, 112, 32, 28, 94, 146, 11, 13, 102, 126, 1, 111, 2, 27, 56, 201, 157, 142, 252, 30, 152, 195, 120, 168, 233, 52, 25, 58, 188, 180, 114, 46, 12, 179, 248, 154, 191, 240, 238, 9, 2, 96, 181, 182, 225, 2, 92, 98, 102, 22, 163, 16, 219, 121, 40, 21, 115, 140, 145, 169, 237, 27, 20, 65, 20, 49, 73, 48, 165, 218, 32, 133, 10, 11, 95, 141, 156, 38, 114, 227, 117, 246, 19, 89, 13, 111, 197, 136, 45, 46, 224, 167, 119, 132, 31, 96, 153, 134, 86, 172, 24, 49, 198, 40, 196, 1, 40, 119, 145, 254, 15, 35, 206, 44, 22, 172, 54, 222, 75, 238, 160, 103, 16, 2, 115, 55, 60, 239, 222, 251, 7, 172, 52, 127, 140, 156, 214, 100, 186, 117, 205, 187, 58, 50, 1, 171, 92, 122, 117, 67, 239, 101, 109, 253, 255, 164, 13, 204, 147, 54, 218, 68, 166, 251, 227, 199, 16, 55, 114, 103, 70, 237, 210, 85, 80, 121, 54, 7, 203, 125, 126, 230, 198, 196, 139, 251, 96, 150, 189, 183, 73, 71, 114, 194, 125, 182, 100, 135, 209, 196, 133, 0, 232, 250, 184, 25, 47, 146, 189, 64, 17, 192, 158, 2, 245, 170, 244, 150, 235, 175, 16, 240, 230, 57, 144, 169, 130, 237, 69, 91, 46, 87, 197, 150, 142, 111, 236, 140, 144, 48, 212, 98, 44, 145, 2, 124, 73, 88, 84, 134, 243, 92, 107, 160, 91, 23, 34, 233, 45, 221, 153, 219, 186, 92, 103, 249, 20, 65, 159, 215, 32, 117, 91, 213, 203, 117, 243, 231, 184, 137, 177, 161, 55, 231, 248, 188, 139, 83, 194, 234, 17, 247, 15, 54, 171, 117, 74, 188, 166, 248, 48, 167, 116, 204, 27, 92, 48, 195, 99, 49, 203, 190, 43, 49, 120, 123, 153, 235, 151, 141, 247, 246, 138, 143, 146, 246, 96, 115, 19, 77, 187, 186, 48, 73, 121, 47, 166, 41, 183, 151, 24, 172, 154, 208, 171, 156, 151, 37, 242, 15, 98, 177, 123, 236, 247, 46, 249, 95, 126, 68, 177, 34, 178, 178, 245, 151, 63, 151, 45, 26, 120, 105, 18, 178, 14, 56, 101, 74, 165, 248, 24, 222, 95, 33, 64, 123, 80, 124, 10, 239, 144, 110, 155, 55, 127, 144, 249, 232, 122, 65, 208, 5, 255, 58, 49, 8, 18, 234, 68, 237, 127, 153, 92, 42, 176, 168, 16, 101, 37, 125, 85, 161, 60, 28, 96, 93, 233, 155, 167, 39, 204, 42, 162, 64, 100, 186, 104, 127, 191, 129, 91, 136, 56, 246, 181, 12, 230, 139, 180, 82, 57, 33, 115, 92, 125, 200, 156, 62, 198, 27, 183, 85, 28, 23, 112, 245, 139, 182, 28, 222, 213, 100, 148, 171, 201, 130, 9, 108, 162, 170, 222, 166, 109, 80, 137, 209, 145, 43, 63, 62, 47, 51, 101, 109, 222, 46, 49, 178, 175, 110, 77, 151, 73, 26, 228, 4, 44, 246, 167, 25, 130, 26, 26, 199, 117, 37, 196, 239, 46, 159, 104, 34, 218, 253, 149, 68, 200, 180, 189, 97, 119, 197, 111, 11, 51, 150, 94, 111, 231, 210, 47, 107, 167, 39, 68, 0, 147, 41, 221, 138, 151, 138, 220, 164, 75, 14, 22, 102, 35, 84, 252, 47, 181, 66, 222, 159, 68, 92, 225, 38, 124, 164, 36, 39, 58, 8, 172, 29, 239, 190, 24, 38, 235, 76, 59, 202, 110, 23, 10, 91, 17, 197, 128, 249, 119, 210, 228, 186, 8, 36, 196, 24, 104, 99, 207, 88, 26, 123, 61, 152, 183, 50, 201, 122, 44, 38, 25, 225, 110, 215, 239, 220, 107, 243, 223, 78, 242, 205, 18, 255, 70, 170, 247, 118, 25, 249, 20, 127, 114, 209, 30, 60, 147, 45, 36, 243, 22, 60, 16, 31, 245, 89, 177, 235, 177, 154, 44, 238, 240, 219, 243, 115, 108, 163, 201, 224, 173, 102, 178, 141, 48, 243, 73, 49, 204, 66, 103, 97, 16, 14, 97, 96, 129, 247, 223, 18, 56, 143, 186, 238, 45, 219, 248, 185, 175, 181, 57, 60, 84, 28, 143, 100, 3, 97, 113, 1, 8, 250, 94, 152, 126, 1, 165, 130, 190, 53, 73, 163, 247, 12, 246, 231, 7, 218, 31, 14, 6, 155, 133, 248, 208, 147, 106, 143, 100, 228, 127, 197, 134, 92, 0, 194, 49, 176, 114, 225, 2, 12, 115, 86, 22, 152, 185, 143, 17, 143, 239, 234, 8, 162, 83, 51, 216, 60, 75, 182, 222, 106, 145, 147, 230, 162, 102, 104, 51, 206, 24, 179, 54, 188, 188, 85, 141, 214, 181, 0, 41, 235, 255, 140, 238, 7, 186, 187, 191, 21, 38, 108, 108, 214, 191, 238, 103, 77, 68, 216, 218, 2, 142, 74, 242, 241, 66, 92, 201, 19, 71, 7, 220, 51, 125, 71, 237, 90, 179, 78, 114, 59, 159, 209, 51, 251, 24, 3, 103, 103, 158, 229, 181, 120, 111, 130, 221, 139, 195, 43, 181, 4, 33, 68, 141, 61, 87, 18, 59, 177, 244, 153, 173, 69, 163, 44, 159, 50, 194, 72, 95, 244, 251, 46, 45, 73, 185, 145, 71, 105, 58, 52, 113, 124, 119, 42, 222, 226, 93, 117, 138, 107, 232, 213, 243, 0, 164, 214, 93, 181, 163, 3, 149, 40, 34, 225, 57, 172, 156, 41, 86, 189, 30, 168, 189, 38, 37, 238, 172, 46, 189, 72, 44, 145, 6, 58, 213, 192, 140, 220, 76, 27, 2, 225, 195, 1, 173, 179, 170, 85, 85, 206, 90, 27, 2, 172, 133, 59, 4, 219, 2, 219, 12, 165, 85, 181, 16, 166, 138, 202, 40, 37, 157, 135, 93, 139, 100, 242, 195, 183, 69, 1, 154, 133, 149, 36, 199, 51, 216, 194, 255, 63, 150, 188, 73, 176, 54, 35, 66, 182, 242, 160, 96, 131, 188, 197, 9, 201, 192, 131, 136, 218, 220, 92, 40, 8, 113, 174, 159, 50, 242, 250, 125, 102, 230, 152, 18, 191, 47, 168, 195, 236, 143, 203, 253, 199, 42, 151, 57, 9, 249, 75, 40, 50, 182, 214, 140, 168, 92, 171, 218, 80, 229, 154, 96, 102, 1, 232, 7, 196, 97, 216, 218, 42, 183, 251, 18, 163, 103, 181, 142, 40, 47, 78, 246, 159, 194, 115, 233, 113, 39, 199, 114, 5, 125, 151, 248, 188, 146, 242, 106, 4, 85, 34, 103, 116, 235, 8, 144, 251, 84, 188, 71, 27, 156, 249, 168, 255, 41, 217, 201, 140, 111, 126, 219, 64, 71, 65, 184, 240, 15, 75, 80, 114, 43, 156, 215, 244, 218, 158, 23, 232, 48, 128, 138, 99, 228, 175, 209, 100, 99, 78, 163, 85, 137, 8, 88, 222, 5, 85, 91, 198, 131, 81, 200, 132, 116, 37, 122, 53, 229, 12, 254, 246, 9, 9, 169, 154, 150, 77, 45, 222, 214, 241, 226, 167, 242, 137, 43, 23, 138, 214, 196, 88, 57, 206, 155, 178, 252, 197, 248, 187, 134, 193, 131, 222, 21, 72, 65, 104, 36, 248, 202, 212, 170, 202, 29, 121, 46, 161, 167, 89, 62, 82, 239, 81, 6, 154, 206, 197, 18, 54, 72, 97, 202, 255, 167, 27, 146, 37, 110, 44, 93, 160, 213, 5, 121, 183, 190, 201, 15, 229, 82, 146, 209, 212, 191, 109, 65, 27, 6, 92, 40, 134, 204, 123, 232, 97, 251, 125, 1, 50, 172, 77, 167, 235, 216, 93, 252, 125, 35, 178, 254, 137, 167, 138, 220, 169, 178, 73, 230, 0, 224, 223, 81, 9, 30, 21, 90, 116, 55, 128, 75, 171, 67, 164, 2, 185, 39, 60, 142, 86, 83, 91, 194, 159, 23, 169, 88, 169, 106, 189, 59, 206, 23, 248, 147, 217, 196, 169, 243, 23, 253, 172, 242, 145, 57, 106, 231, 201, 53, 103, 235, 66, 132, 147, 241, 204, 229, 143, 213, 52, 6, 132, 128, 133, 252, 187, 166, 139, 163, 67, 92, 41, 100, 27, 60, 244, 7, 32, 114, 161, 26, 121, 190, 177, 235, 139, 18, 58, 198, 119, 174, 72, 13, 250, 111, 249, 53, 61, 222, 85, 186, 100, 166, 174, 49, 29, 125, 46, 156, 105, 187, 252, 204, 108, 139, 17, 108, 63, 213, 216, 199, 46, 62, 128, 88, 17, 234, 65, 177, 227, 204, 234, 9, 168, 114, 132, 154, 160, 138, 131, 237, 102, 230, 85, 192, 174, 159, 175, 189, 105, 192, 55, 15, 177, 43, 0, 54, 93, 176, 22, 68, 63, 181, 164, 205, 87, 250, 228, 81, 101, 43, 15, 48, 210, 191, 249, 229, 69, 42, 204, 39, 19, 223, 115, 73, 58, 56, 150, 75, 46, 181, 133, 76, 38, 30, 203, 68, 216, 211, 147, 71, 32, 52, 157, 246, 225, 198, 213, 23, 128, 180, 56, 238, 99, 131, 104, 34, 107, 70, 145, 154, 193, 235, 39, 69, 214, 164, 11, 215, 179, 155, 174, 128, 161, 142, 247, 97, 191, 169, 234, 247, 62, 88, 133, 156, 102, 53, 68, 32, 58, 95, 97, 238, 48, 195, 241, 192, 36, 43, 19, 136, 116, 99, 175, 101, 228, 2, 69, 196, 194, 163, 207, 136, 142, 101, 202, 89, 239, 100, 174, 165, 138, 238, 248, 101, 222, 87, 192, 232, 82, 147, 52, 185, 205, 35, 218, 23, 12, 21, 176, 28, 181, 149, 246, 149, 162, 208, 93, 196, 59, 38, 119, 155, 178, 64, 111, 222, 122, 125, 92, 7, 52, 47, 76, 24, 121, 64, 66, 149, 61, 2, 180, 252, 198, 99, 93, 97, 57, 109, 244, 154, 58, 196, 14, 62, 66, 116, 142, 196, 90, 220, 3, 217, 105, 56, 201, 77, 130, 228, 139, 14, 37, 204, 185, 247, 67, 25, 137, 75, 182, 176, 166, 202, 220, 149, 45, 52, 246, 57, 152, 135, 94, 47, 184, 151, 239, 53, 54, 140, 197, 203, 251, 107, 166, 148, 77, 47, 225, 199, 90, 228, 235, 102, 158, 90, 99, 89, 132, 116, 70, 1, 27, 192, 96, 54, 148, 35, 160, 209, 64, 96, 8, 84, 28, 49, 128, 188, 124, 52, 156, 91, 42, 84, 210, 224, 206, 109, 31, 202, 244, 6, 22, 126, 133, 154, 3, 105, 242, 207, 33, 2, 50, 106, 80, 45, 86, 118, 241, 40, 83, 103, 62, 206, 181, 54, 217, 236, 240, 73, 227, 157, 50, 191, 150, 45, 67, 133, 173, 5, 82, 255, 243, 148, 122, 34, 138, 221, 164, 159, 173, 157, 225, 107, 140, 115, 204, 250, 62, 129, 185, 139, 251, 246, 217, 214, 159, 180, 57, 91, 66, 239, 213, 137, 131, 8, 133, 167, 94, 209, 106, 19, 234, 182, 6, 52, 182, 179, 111, 241, 125, 47, 147, 193, 186, 254, 110, 19, 165, 107, 128, 138, 40, 199, 94, 32, 97, 188, 111, 204, 52, 197, 114, 4, 46, 14, 2, 9, 77, 8, 6, 101, 158, 49, 37, 39, 37, 221, 254, 193, 32, 159, 146, 193, 210, 67, 126, 216, 114, 70, 115, 176, 225, 53, 113, 169, 20, 107, 231, 213, 128, 157, 199, 173, 110, 25, 216, 222, 49, 72, 15, 37, 127, 185, 248, 138, 102, 193, 49, 118, 202, 97, 16, 93, 199, 138, 188, 41, 22, 105, 109, 137, 18, 179, 231, 2, 86, 187, 65, 229, 248, 162, 179, 212, 39, 91, 32, 255, 21, 131, 121, 213, 118, 177, 1, 213, 253, 154, 191, 132, 186, 31, 185, 136, 12, 104, 130, 208, 148, 150, 250, 126, 212, 159, 33, 239, 58, 218, 76, 78, 82, 140, 61, 215, 86, 254, 196, 121, 241, 227, 30, 243, 245, 190, 241, 38, 53, 201, 13, 215, 112, 219, 227, 10, 4, 70, 139, 224, 236, 242, 34, 157, 49, 172, 76, 120, 16, 45, 158, 74, 85, 2, 68, 150, 251, 232, 112, 161, 40, 68, 204, 209, 92, 54, 110, 160, 210, 188, 244, 135, 161, 215, 121, 221, 201, 39, 196, 19, 196, 60, 233, 118, 213, 21, 139, 138, 136, 219, 104, 188, 88, 198, 162, 161, 200, 83, 97, 203, 43, 244, 57, 254, 13, 121, 217, 19, 158, 139, 20, 86, 175, 25, 178, 88, 193, 186, 206, 35, 20, 7, 13, 240, 96, 173, 100, 127, 81, 133, 95, 8, 50, 168, 236, 193, 152, 224, 171, 213, 165, 124, 49, 140, 20, 237, 160, 2, 97, 173, 130, 60, 98, 244, 140, 186, 167, 30, 138, 48, 54, 84, 97, 154, 98, 203, 44, 58, 77, 128, 17, 6, 182, 212, 214, 174, 98, 125, 106, 186, 58, 208, 6, 70, 102, 201, 67, 172, 60, 173, 50, 240, 118, 207, 130, 163, 176, 153, 247, 223, 93, 189, 198, 161, 197, 151, 47, 123, 142, 133, 140, 132, 249, 109, 31, 101, 21, 49, 158, 89, 177, 21, 190, 184, 105, 88, 32, 252, 168, 127, 42, 231, 172, 105, 209, 44, 170, 102, 142, 47, 162, 219, 119, 187, 70, 246, 151, 237, 43, 187, 6, 154, 17, 71, 42, 77, 169, 186, 88, 35, 167, 88, 64, 189, 158, 42, 169, 82, 143, 95, 218, 190, 104, 142, 124, 101, 233, 209, 63, 125, 221, 66, 182, 149, 68, 231, 70, 147, 218, 39, 237, 233, 221, 144, 45, 114, 237, 125, 130, 25, 209, 182, 104, 125, 63, 108, 4, 210, 139, 19, 2, 125, 145, 114, 105, 112, 34, 162, 66, 22, 80, 12, 217, 167, 212, 68, 5, 56, 150, 88, 13, 183, 115, 135, 14, 63, 180, 202, 229, 63, 213, 104, 102, 233, 59, 106, 230, 120, 56, 130, 72, 180, 146, 233, 20, 224, 161, 177, 20, 140, 162, 228, 187, 230, 83, 31, 43, 19, 188, 117, 154, 53, 245, 207, 110, 167, 165, 247, 168, 37, 40, 205, 203, 225, 128, 182, 241, 135, 4, 212, 156, 217, 108, 79, 159, 16, 123, 184, 175, 200, 2, 101, 167, 216, 57, 238, 176, 251, 12, 58, 56, 87, 124, 13, 249, 39, 93, 229, 107, 186, 24, 119, 30, 165, 101, 253, 231, 90, 186, 79, 153, 142, 119, 95, 92, 92, 165, 22, 64, 135, 121, 124, 56, 227, 68, 101, 214, 86, 137, 76, 6, 56, 67, 211, 136, 150, 213, 7, 8, 203, 11, 36, 252, 63, 135, 221, 245, 154, 198, 91, 173, 75, 176, 94, 122, 32, 112, 21, 156, 121, 199, 215, 188, 116, 242, 249, 218, 55, 39, 146, 108, 215, 19, 43, 148, 156, 70, 190, 153, 71, 15, 240, 237, 97, 40, 125, 74, 92, 22, 110, 66, 244, 32, 190, 248, 9, 101, 196, 100, 13, 222, 9, 66, 68, 67, 245, 12, 167, 41, 227, 172, 117, 6, 89, 234, 255, 78, 158, 37, 232, 30, 57, 201, 126, 206, 122, 18, 238, 60, 167, 84, 182, 165, 201, 78, 206, 71, 150, 149, 182, 91, 61, 239, 195, 155, 102, 177, 205, 136, 56, 64, 163, 92, 248, 169, 130, 29, 254, 38, 250, 86, 233, 111, 112, 49, 76, 180, 101, 238, 169, 149, 6, 128, 192, 212, 69, 77, 117, 176, 55, 62, 231, 242, 106, 7, 100, 160, 129, 108, 56, 148, 30, 2, 133, 3, 70, 101, 185, 74, 72, 38, 82, 59, 15, 127, 101, 60, 146, 39, 80, 147, 251, 147, 246, 185, 253, 118, 119, 20, 171, 87, 26, 135, 130, 57, 205, 206, 132, 79, 214, 88, 120, 8, 81, 8, 155, 172, 55, 107, 13, 181, 218, 154, 64, 185, 231, 79, 145, 124, 28, 225, 93, 54, 241, 139, 223, 15, 226, 130, 29, 254, 68, 184, 103, 128, 128, 47, 133, 40, 116, 88, 216, 55, 33, 99, 46, 91, 167, 197, 233, 90, 79, 157, 10, 234, 48, 15, 48, 131, 151, 142, 140, 107, 186, 149, 39, 105, 27, 73, 175, 172, 229, 54, 145, 157, 74, 83, 157, 73, 125, 237, 33, 70, 174, 120, 49, 70, 34, 138, 181, 185, 217, 92, 86, 246, 171, 89, 154, 119, 49, 235, 87, 70, 229, 170, 72, 147, 35, 158, 206, 93, 142, 87, 74, 210, 169, 35, 142, 54, 188, 28, 63, 161, 182, 79, 190, 202, 201, 43, 194, 59, 15, 247, 61, 230, 55, 22, 246, 41, 114, 134, 132, 20, 39, 44, 242, 125, 10, 244, 76, 143, 135, 222, 150, 38, 40, 124, 121, 231, 135, 142, 190, 75, 198, 143, 120, 159, 233, 72, 212, 238, 31, 249, 105, 212, 14, 117, 255, 237, 72, 120, 58, 131, 201, 18, 67, 166, 200, 154, 238, 219, 167, 90, 213, 15, 184, 54, 61, 244, 218, 42, 111, 143, 163, 164, 75, 156, 133, 228, 212, 87, 16, 25, 88, 164, 36, 95, 223, 39, 14, 133, 34, 217, 243, 142, 97, 134, 38, 47, 190, 38, 210, 26, 87, 131, 196, 75, 222, 3, 19, 227, 243, 183, 46, 129, 201, 161, 145, 190, 192, 73, 220, 162, 249, 132, 173, 102, 223, 53, 246, 112, 120, 206, 193, 110, 221, 37, 108, 209, 113, 190, 98, 49, 23, 79, 197, 97, 148, 151, 2, 125, 126, 10, 38, 111, 121, 40, 132, 5, 195, 99, 76, 59, 90, 116, 128, 139, 178, 57, 65, 159, 231, 176, 168, 55, 58, 160, 58, 64, 253, 201, 143, 120, 6, 82, 184, 208, 41, 245, 216, 105, 227, 160, 4, 51, 65, 183, 74, 116, 244, 6, 50, 93, 55, 236, 92, 129, 86, 229, 91, 89, 39, 224, 129, 226, 123, 219, 102, 116, 99, 124, 230, 236, 229, 103, 223, 246, 222, 113, 233, 119, 141, 85, 51, 125, 49, 39, 122, 23, 84, 220, 82, 10, 144, 94, 207, 88, 10, 191, 85, 90, 66, 136, 192, 254, 10, 213, 229, 234, 184, 99, 33, 73, 132, 92, 178, 194, 123, 246, 168, 23, 99, 241, 90, 27, 44, 17, 165, 122, 232, 200, 132, 82, 142, 51, 112, 214, 96, 116, 19, 218, 122, 121, 83, 152, 222, 110, 92, 70, 71, 91, 201, 46, 37, 86, 191, 221, 153, 196, 190, 201, 194, 216, 83, 185, 192, 227, 108, 209, 191, 11, 196, 106, 21, 82, 181, 159, 86, 57, 36, 230, 109, 40, 23, 109, 27, 193, 224, 146, 147, 9, 225, 42, 109, 48, 165, 196, 232, 139, 131, 35, 35, 206, 199, 20, 223, 105, 196, 224, 177, 113, 77, 246, 49, 111, 255, 137, 24, 102, 134, 126, 68, 155, 38, 184, 73, 127, 251, 205, 182, 175, 179, 203, 80, 47, 236, 165, 178, 158, 252, 129, 106, 14, 40, 107, 228, 247, 95, 106, 167, 178, 138, 97, 5, 205, 176, 196, 178, 80, 251, 104, 142, 178, 75, 165, 142, 207, 2, 166, 1, 48, 199, 131, 197, 79, 239, 33, 160, 170, 134, 37, 12, 18, 85, 50, 111, 188, 28, 167, 72, 247, 40, 122, 31, 187, 136, 6, 64, 2, 103, 41, 5, 49, 157, 99, 245, 39, 128, 108, 100, 25, 138, 217, 124, 245, 107, 238, 163, 149, 111, 2, 27, 41, 33, 178, 115, 247, 172, 173, 130, 185, 132, 114, 23, 8, 74, 185, 181, 252, 226, 23, 108, 80, 87, 141, 235, 62, 76, 136, 239, 107, 243, 183, 105, 195, 235, 129, 202, 197, 191, 192, 81, 176, 70, 129, 125, 109, 31, 115, 53, 108, 238, 145, 140, 39, 235, 159, 29, 253, 52, 240, 186, 194, 205, 142, 182, 164, 190, 130, 38, 235, 209, 186, 36, 132, 208, 198, 42, 207, 48, 235, 53, 62, 12, 171, 57, 101, 68, 102, 177, 50, 44, 40, 107, 61, 54, 21, 65, 167, 65, 46, 42, 145, 226, 153, 123, 73, 90, 177, 78, 173, 25, 149, 101, 95, 54, 187, 168, 202, 147, 94, 139, 73, 90, 4, 19, 191, 22, 44, 231, 146, 3, 30, 95, 44, 37, 174, 239, 216, 125, 159, 22, 224, 16, 74, 219, 125, 130, 5, 84, 22, 2, 204, 222, 128, 95, 129, 112, 115, 227, 237, 50, 212, 86, 219, 54, 39, 217, 87, 209, 27, 57, 201, 223, 165, 157, 120, 147, 208, 244, 30, 77, 215, 185, 185, 213, 1, 24, 16, 151, 123, 182, 14, 55, 173, 75, 230, 122, 56, 229, 248, 14, 134, 206, 213, 193, 249, 112, 73, 67, 195, 194, 202, 107, 217, 214, 128, 216, 41, 250, 71, 24, 110, 154, 73, 223, 201, 175, 205, 193, 4, 90, 105, 149, 198, 48, 129, 231, 177, 149, 231, 62, 112, 6, 181, 117, 110, 0, 229, 26, 64, 226, 155, 61, 138, 51, 177, 191, 169, 48, 207, 231, 179, 231, 109, 117, 124, 7, 61, 117, 220, 209, 121, 120, 31, 56, 65, 185, 74, 173, 116, 84, 165, 167, 18, 209, 220, 120, 197, 85, 124, 252, 239, 138, 149, 219, 96, 229, 177, 85, 18, 41, 235, 149, 145, 209, 85, 182, 230, 79, 15, 120, 234, 174, 13, 31, 160, 77, 186, 190, 108, 201, 193, 246, 242, 193, 169, 49, 198, 75, 74, 109, 32, 44, 206, 151, 235, 112, 74, 166, 55, 244, 216, 118, 74, 155, 142, 178, 105, 230, 252, 216, 249, 128, 108, 54, 111, 94, 232, 151, 42, 163, 123, 169, 129, 33, 56, 205, 35, 57, 234, 187, 203, 45, 199, 95, 141, 254, 209, 5, 85, 88, 203, 119, 172, 146, 199, 94, 176, 185, 144, 51, 230, 116, 97, 158, 48, 247, 160, 194, 34, 221, 112, 6, 176, 250, 164, 201, 102, 226, 214, 118, 170, 238, 197, 189, 100, 134, 26, 106, 149, 214, 163, 107, 129, 136, 131, 179, 254, 212, 105, 115, 64, 46, 114, 209, 174, 126, 246, 207, 179, 238, 248, 230, 146, 220, 191, 84, 53, 28, 1, 27, 111, 106, 11, 149, 238, 83, 20, 109, 22, 86, 111, 189, 120, 114, 211, 184, 154, 137, 35, 92, 155, 156, 104, 98, 21, 152, 186, 189, 146, 220, 189, 31, 180, 21, 20, 134, 143, 250, 196, 147, 109, 42, 22, 8, 198, 83, 36, 124, 158, 240, 112, 171, 180, 149, 215, 238, 96, 115, 205, 156, 150, 100, 187, 63, 62, 205, 33, 250, 67, 46, 212, 66, 152, 163, 209, 37, 60, 105, 65, 252, 190, 216, 227, 101, 242, 232, 162, 219, 59, 103, 6, 174, 69, 218, 154, 212, 169, 139, 58, 101, 145, 47, 131, 34, 233, 166, 56, 176, 62, 126, 1, 203, 63, 42, 40, 178, 107, 119, 162, 238, 202, 105, 120, 123, 22, 145, 122, 250, 166, 182, 172, 94, 15, 154, 110, 157, 92, 25, 130, 241, 120, 184, 84, 199, 99, 17, 186, 93, 6, 139, 235, 69, 120, 240, 178, 147, 138, 23, 40, 146, 63, 51, 41, 11, 72, 135, 4, 91, 110, 80, 105, 97, 90, 135, 157, 190, 30, 21, 149, 235, 163, 127, 44, 222, 86, 195, 130, 62, 202, 247, 77, 100, 173, 2, 172, 215, 154, 11, 105, 142, 195, 81, 79, 58, 145, 44, 213, 119, 146, 23, 144, 73, 57, 97, 182, 16, 189, 73, 81, 82, 187, 229, 247, 78, 118, 9, 20, 65, 59, 113, 231, 176, 229, 248, 105, 125, 34, 50, 222, 1, 13, 244, 20, 94, 210, 213, 77, 210, 161, 250, 58, 82, 174, 9, 145, 176, 251, 120, 146, 47, 4, 89, 252, 34, 109, 121, 67, 196, 170, 170, 135, 209, 43, 91, 221, 237, 115, 99, 36, 206, 54, 174, 143, 43, 200, 75, 127, 200, 181, 43, 37, 215, 43, 153, 105, 244, 75, 225, 49, 88, 18, 250, 210, 163, 157, 161, 8, 102, 195, 54, 60, 27, 113, 98, 66, 11, 92, 148, 70, 130, 172, 216, 237, 75, 4, 176, 166, 143, 116, 212, 158, 81, 197, 150, 69, 170, 241, 2, 158, 170, 245, 40, 172, 236, 35, 34, 140, 149, 68, 89, 242, 190, 231, 7, 168, 220, 8, 86, 59, 159, 55, 102, 186, 185, 70, 138, 10, 142, 38, 116, 145, 189, 238, 175, 243, 240, 173, 98, 87, 126, 195, 102, 123, 228, 116, 34, 79, 214, 202, 255, 19, 46, 71, 90, 216, 74, 62, 111, 29, 5, 23, 103, 120, 211, 189, 125, 235, 81, 207, 110, 247, 45, 5, 204, 96, 37, 156, 114, 68, 60, 39, 199, 199, 159, 226, 120, 113, 242, 14, 180, 123, 241, 228, 45, 70, 209, 232, 247, 234, 218, 67, 241, 91, 21, 191, 161, 163, 33, 95, 93, 207, 46, 23, 127, 17, 218, 96, 20, 152, 241, 225, 94, 35, 9, 9, 151, 108, 71, 131, 124, 242, 7, 70, 116, 197, 253, 224, 39, 195, 213, 126, 226, 35, 87, 25, 232, 179, 60, 180, 222, 79, 93, 17, 134, 252, 12, 170, 216, 179, 28, 65, 92, 29, 163, 116, 126, 120, 1, 216, 122, 133, 203, 225, 163, 206, 177, 18, 189, 116, 235, 47, 96, 19, 15, 9, 135, 254, 59, 130, 98, 230, 168, 55, 157, 28, 63, 206, 1, 69, 37, 152, 231, 204, 222, 56, 57, 143, 164, 160, 138, 125, 166, 100, 45, 99, 240, 100, 239, 188, 154, 171, 57, 119, 118, 182, 20, 8, 94, 20, 240, 94, 33, 154, 37, 230, 210, 29, 248, 92, 56, 153, 147, 82, 63, 109, 207, 218, 107, 93, 44, 212, 30, 88, 188, 55, 252, 101, 167, 113, 243, 208, 41, 71, 213, 154, 111, 190, 234, 151, 21, 65, 150, 141, 90, 94, 115, 179, 54, 12, 13, 110, 138, 104, 125, 37, 89, 223, 126, 12, 18, 220, 120, 188, 67, 210, 223, 37, 101, 134, 232, 66, 24, 132, 247, 255, 230, 17, 182, 93, 185, 28, 146, 118, 79, 183, 73, 46, 134, 125, 242, 83, 45, 220, 9, 231, 133, 134, 150, 204, 108, 31, 208, 38, 42, 83, 235, 126, 175, 72, 122, 204, 27, 57, 24, 63, 221, 57, 152, 125, 130, 216, 159, 6, 207, 85, 188, 233, 73, 60, 103, 57, 181, 125, 185, 167, 167, 172, 122, 114, 224, 144, 191, 116, 172, 148, 107, 9, 23, 233, 51, 76, 209, 55, 99, 165, 72, 234, 188, 175, 93, 192, 146, 181, 73, 146, 254, 241, 140, 213, 249, 245, 2, 67, 154, 193, 176, 216, 137, 185, 188, 26, 162, 134, 63, 214, 114, 61, 83, 120, 228, 2, 148, 77, 113, 203, 165, 148, 222, 111, 53, 40, 230, 90, 17, 228, 66, 42, 10, 10, 80, 177, 144, 6, 165, 235, 68, 21, 128, 21, 117, 152, 11, 133, 40, 54, 149, 250, 44, 158, 225, 211, 218, 221, 169, 17, 8, 162, 45, 101, 121, 162, 101, 218, 64, 135, 14, 203, 170, 67, 148, 18, 174, 113, 34, 58, 29, 5, 206, 223, 110, 194, 7, 167, 72, 211, 57, 51, 9, 102, 114, 138, 199, 163, 20, 193, 202, 234, 145, 8, 196, 111, 243, 86, 106, 36, 220, 39, 24, 110, 221, 187, 126, 99, 253, 128, 148, 67, 12, 77, 55, 106, 66, 204, 221, 57, 135, 52, 36, 3, 142, 123, 221, 14, 127, 26, 223, 185, 253, 45, 112, 52, 36, 202, 149, 172, 105, 15, 72, 68, 105, 252, 27, 139, 218, 16, 121, 13, 77, 24, 162, 77, 32, 93, 164, 182, 73, 38, 178, 175, 69, 215, 248, 96, 167, 55, 102, 168, 122, 195, 99, 82, 2, 79, 228, 195, 218, 128, 75, 66, 125, 84, 34, 133, 188, 94, 114, 76, 149, 165, 138, 131, 148, 99, 158, 69, 234, 211, 101, 203, 132, 160, 43, 71, 220, 13, 189, 0, 175, 89, 6, 27, 60, 137, 49, 82, 179, 47, 177, 238, 220, 87, 233, 88, 159, 110, 229, 2, 102, 114, 247, 210, 42, 135, 76, 92, 69, 99, 51, 248, 97, 1, 49, 107, 255, 177, 142, 214, 188, 152, 135, 131, 149, 21, 115, 25, 115, 201, 149, 78, 55, 91, 32, 2, 153, 209, 245, 33, 113, 2, 118, 84, 3, 139, 248, 148, 38, 213, 189, 113, 226, 19, 60, 150, 63, 238, 35, 172, 34, 237, 218, 88, 57, 173, 67, 166, 246, 208, 168, 89, 166, 241, 99, 83, 23, 64, 220, 58, 215, 139, 123, 176, 41, 65, 69, 18, 50, 82, 208, 13, 135, 160, 6, 11, 71, 87, 77, 93, 79, 173, 137, 49, 213, 88, 208, 180, 123, 252, 37, 184, 8, 114, 178, 214, 151, 29, 65, 53, 97, 84, 23, 159, 232, 136, 47, 239, 135, 163, 44, 226, 6, 226, 21, 8, 70, 210, 227, 105, 232, 17, 42, 94, 166, 18, 34, 18, 94, 174, 96, 214, 109, 228, 141, 240, 174, 103, 211, 221, 132, 145, 58, 196, 5, 64, 244, 49, 45, 113, 241, 33, 128, 61, 33, 95, 51, 14, 206, 238, 57, 249, 5, 57, 140, 169, 222, 132, 188, 50, 54, 244, 44, 56, 231, 173, 235, 120, 130, 246, 232, 127, 150, 26, 232, 139, 86, 2, 5, 233, 92, 41, 186, 57, 26, 97, 143, 43, 63, 247, 53, 128, 123, 184, 114, 230, 88, 223, 49, 183, 75, 118, 143, 130, 233, 157, 224, 92, 14, 243, 123, 47, 50, 109, 38, 93, 215, 206, 60, 72, 202, 160, 119, 85, 214, 132, 174, 35, 31, 75, 42, 32, 219], - [193, 52, 137, 65, 118, 236, 220, 47, 43, 203, 69, 31, 77, 106, 2, 141, 80, 223, 130, 92, 81, 56, 126, 55, 216, 124, 190, 20, 220, 37, 141, 142, 187, 245, 230, 94, 156, 121, 184, 52, 204, 112, 108, 170, 100, 89, 182, 44, 103, 101, 86, 54, 151, 62, 230, 95, 6, 146, 64, 104, 191, 21, 116, 70, 166, 253, 125, 156, 10, 251, 102, 251, 73, 167, 83, 157, 184, 127, 10, 210, 252, 116, 190, 243, 222, 170, 205, 123, 226, 88, 111, 121, 48, 174, 52, 152, 156, 255, 18, 250, 12, 29, 182, 128, 119, 242, 195, 171, 26, 160, 3, 198, 110, 72, 4, 54, 86, 250, 241, 9, 142, 198, 60, 72, 87, 196, 191, 212, 89, 91, 222, 163, 203, 142, 99, 229, 124, 66, 124, 9, 239, 254, 18, 37, 10, 149, 81, 156, 7, 73, 95, 21, 52, 237, 212, 251, 40, 12, 223, 114, 192, 254, 202, 173, 39, 106, 132, 231, 100, 141, 221, 92, 81, 185, 238, 234, 162, 25, 220, 125, 77, 206, 13, 153, 193, 24, 150, 134, 73, 230, 228, 90, 176, 205, 64, 199, 65, 126, 230, 228, 182, 104, 18, 27, 106, 163, 100, 241, 99, 107, 148, 216, 172, 9, 206, 35, 156, 120, 30, 173, 9, 7, 249, 49, 70, 184, 198, 15, 4, 15, 115, 101, 151, 43, 97, 67, 219, 83, 17, 6, 138, 227, 229, 117, 138, 124, 46, 4, 243, 96, 168, 176, 208, 96, 74, 89, 55, 22, 212, 213, 185, 220, 49, 208, 207, 109, 243, 77, 163, 130, 172, 193, 147, 74, 177, 64, 136, 102, 170, 168, 196, 37, 82, 101, 150, 214, 39, 245, 141, 223, 159, 23, 7, 144, 182, 106, 115, 114, 234, 145, 56, 231, 126, 211, 140, 39, 186, 27, 104, 34, 151, 193, 74, 160, 249, 241, 30, 70, 175, 241, 182, 141, 127, 49, 113, 50, 233, 161, 4, 43, 109, 163, 25, 135, 70, 130, 9, 44, 58, 231, 107, 153, 124, 199, 152, 151, 66, 130, 151, 11, 129, 7, 24, 212, 51, 105, 103, 32, 43, 48, 52, 246, 105, 13, 51, 17, 91, 162, 210, 240, 88, 54, 46, 30, 134, 137, 72, 123, 182, 186, 120, 254, 207, 63, 216, 18, 112, 244, 67, 252, 125, 136, 18, 146, 124, 196, 180, 213, 138, 200, 135, 5, 217, 185, 119, 42, 255, 55, 190, 28, 250, 36, 108, 63, 58, 55, 27, 17, 113, 233, 201, 88, 61, 254, 54, 231, 180, 67, 39, 10, 86, 78, 115, 3, 207, 222, 59, 36, 243, 190, 176, 108, 216, 229, 117, 194, 62, 105, 130, 186, 148, 92, 134, 50, 10, 98, 192, 201, 0, 53, 218, 47, 14, 75, 28, 160, 181, 52, 47, 179, 20, 169, 190, 175, 185, 206, 164, 154, 130, 30, 32, 53, 93, 124, 194, 135, 32, 227, 253, 58, 210, 160, 222, 196, 143, 157, 62, 144, 111, 13, 165, 113, 182, 233, 195, 73, 94, 2, 23, 180, 209, 243, 246, 52, 204, 50, 175, 241, 207, 136, 148, 85, 20, 141, 188, 152, 67, 128, 124, 87, 32, 185, 13, 55, 247, 1, 119, 129, 212, 118, 169, 202, 87, 208, 94, 162, 132, 207, 39, 167, 104, 224, 196, 243, 74, 227, 22, 115, 54, 169, 181, 54, 72, 117, 98, 134, 115, 91, 108, 235, 226, 78, 239, 210, 53, 39, 117, 246, 144, 64, 245, 214, 3, 57, 25, 123, 1, 24, 179, 191, 140, 245, 49, 13, 57, 56, 209, 188, 193, 90, 113, 158, 202, 235, 224, 105, 69, 105, 203, 33, 189, 137, 215, 7, 254, 139, 115, 93, 27, 38, 84, 110, 60, 78, 87, 71, 205, 60, 179, 255, 65, 24, 205, 122, 142, 227, 107, 207, 224, 54, 232, 234, 180, 119, 96, 71, 241, 180, 172, 148, 113, 108, 13, 116, 229, 190, 180, 150, 214, 205, 10, 136, 16, 24, 8, 105, 214, 38, 162, 254, 146, 227, 232, 226, 64, 245, 93, 146, 177, 54, 13, 146, 44, 66, 3, 89, 161, 75, 27, 250, 25, 159, 255, 118, 232, 38, 171, 209, 10, 37, 215, 212, 74, 8, 136, 57, 70, 168, 221, 22, 145, 167, 137, 113, 224, 209, 18, 250, 112, 191, 206, 130, 173, 203, 138, 193, 38, 192, 172, 34, 87, 207, 86, 24, 200, 200, 27, 162, 228, 56, 73, 177, 36, 99, 238, 45, 190, 45, 27, 193, 241, 140, 161, 180, 175, 181, 222, 211, 143, 139, 43, 46, 145, 59, 133, 199, 222, 152, 89, 136, 142, 145, 79, 193, 110, 8, 203, 62, 218, 250, 50, 62, 242, 63, 236, 166, 250, 68, 119, 55, 91, 185, 202, 239, 135, 33, 108, 60, 195, 197, 143, 177, 156, 179, 199, 69, 174, 85, 111, 139, 31, 198, 7, 85, 46, 138, 162, 99, 108, 11, 136, 117, 162, 151, 77, 57, 59, 134, 107, 81, 166, 135, 56, 161, 95, 84, 103, 73, 22, 59, 177, 223, 1, 184, 49, 191, 174, 164, 143, 112, 254, 4, 160, 24, 19, 102, 131, 24, 46, 106, 205, 221, 237, 244, 61, 153, 216, 94, 96, 209, 215, 118, 86, 225, 82, 28, 108, 75, 201, 212, 204, 48, 222, 45, 136, 211, 12, 238, 72, 163, 255, 134, 47, 3, 179, 27, 224, 196, 15, 0, 114, 169, 94, 77, 218, 236, 112, 160, 210, 217, 230, 56, 68, 186, 184, 109, 155, 24, 113, 111, 120, 111, 128, 248, 90, 78, 82, 141, 162, 79, 96, 239, 126, 89, 112, 26, 127, 189, 49, 0, 238, 209, 183, 103, 191, 104, 168, 24, 97, 128, 39, 130, 98, 234, 86, 108, 211, 84, 4, 133, 28, 9, 127, 53, 13, 32, 55, 184, 136, 24, 16, 86, 132, 79, 82, 252, 97, 110, 122, 155, 108, 134, 148, 126, 45, 118, 120, 28, 121, 27, 171, 10, 160, 134, 38, 204, 149, 76, 221, 87, 239, 96, 229, 22, 81, 107, 11, 235, 81, 159, 160, 177, 126, 44, 9, 164, 75, 234, 87, 134, 21, 249, 237, 21, 182, 254, 157, 245, 113, 56, 214, 38, 26, 138, 163, 252, 174, 89, 19, 203, 135, 79, 189, 212, 7, 138, 79, 10, 255, 189, 46, 108, 14, 13, 97, 237, 21, 192, 63, 158, 100, 79, 81, 193, 149, 132, 108, 94, 48, 182, 114, 175, 43, 65, 7, 198, 119, 201, 141, 122, 181, 238, 92, 33, 105, 228, 68, 49, 195, 30, 218, 148, 68, 218, 6, 33, 35, 150, 39, 255, 251, 239, 241, 245, 164, 32, 233, 212, 59, 208, 124, 183, 247, 80, 239, 7, 163, 12, 35, 152, 9, 217, 252, 126, 170, 124, 27, 22, 244, 36, 235, 46, 150, 218, 207, 146, 217, 104, 244, 132, 222, 81, 67, 127, 87, 208, 236, 137, 138, 96, 253, 181, 164, 58, 160, 152, 111, 7, 128, 195, 5, 146, 141, 30, 59, 133, 4, 231, 236, 106, 10, 216, 149, 85, 78, 195, 173, 126, 161, 94, 171, 163, 190, 238, 68, 69, 71, 120, 184, 211, 40, 92, 100, 89, 37, 7, 31, 37, 145, 17, 129, 139, 48, 69, 217, 62, 159, 100, 34, 137, 236, 213, 28, 93, 59, 135, 75, 128, 228, 45, 206, 88, 49, 123, 0, 226, 95, 170, 234, 111, 165, 221, 99, 173, 253, 13, 96, 57, 196, 241, 231, 218, 165, 77, 82, 148, 18, 154, 159, 190, 252, 158, 138, 153, 10, 172, 27, 233, 57, 147, 178, 179, 68, 212, 136, 13, 26, 221, 222, 112, 52, 112, 132, 154, 211, 161, 59, 148, 139, 109, 157, 211, 165, 15, 185, 142, 84, 194, 10, 210, 147, 89, 55, 101, 150, 143, 156, 134, 154, 130, 171, 202, 157, 170, 152, 67, 25, 49, 221, 228, 131, 43, 40, 253, 219, 114, 248, 49, 142, 242, 17, 236, 30, 165, 91, 64, 232, 97, 27, 81, 131, 210, 111, 157, 175, 36, 179, 203, 156, 50, 100, 223, 96, 169, 196, 240, 39, 131, 187, 156, 145, 165, 9, 206, 155, 231, 186, 242, 27, 184, 68, 0, 165, 34, 233, 179, 80, 161, 97, 208, 253, 77, 48, 107, 143, 126, 183, 156, 239, 102, 204, 199, 205, 191, 14, 5, 202, 23, 220, 159, 147, 107, 118, 129, 67, 195, 108, 56, 103, 252, 82, 192, 145, 202, 135, 178, 232, 135, 214, 89, 6, 247, 124, 24, 218, 158, 115, 226, 89, 38, 52, 194, 125, 246, 57, 1, 226, 90, 187, 206, 174, 52, 139, 138, 44, 228, 16, 182, 47, 241, 237, 248, 200, 240, 225, 9, 103, 167, 35, 222, 27, 35, 133, 171, 129, 114, 90, 251, 85, 217, 63, 61, 233, 157, 81, 59, 78, 216, 56, 201, 54, 226, 113, 17, 183, 116, 41, 219, 115, 249, 33, 142, 244, 30, 237, 71, 188, 10, 123, 151, 43, 121, 26, 48, 13, 194, 184, 107, 207, 170, 33, 40, 176, 60, 68, 216, 41, 26, 206, 30, 34, 90, 44, 159, 199, 8, 8, 13, 170, 20, 158, 151, 223, 229, 14, 128, 138, 7, 59, 254, 195, 199, 26, 129, 20, 218, 163, 131, 238, 141, 110, 250, 160, 62, 13, 119, 109, 176, 31, 152, 190, 131, 116, 48, 134, 215, 212, 188, 192, 87, 104, 54, 223, 38, 177, 53, 55, 47, 242, 63, 205, 25, 110, 112, 173, 27, 182, 70, 209, 189, 71, 65, 63, 13, 76, 201, 150, 252, 195, 94, 78, 212, 169, 87, 162, 137, 191, 29, 178, 89, 182, 131, 62, 100, 32, 112, 8, 146, 79, 211, 48, 93, 89, 49, 136, 25, 34, 49, 100, 134, 182, 143, 80, 54, 187, 71, 19, 7, 210, 10, 22, 4, 127, 248, 2, 23, 43, 58, 28, 146, 230, 15, 253, 112, 99, 42, 131, 223, 168, 3, 129, 72, 247, 12, 147, 75, 91, 118, 180, 109, 216, 89, 91, 121, 52, 207, 4, 47, 142, 136, 189, 190, 5, 22, 132, 81, 207, 155, 182, 245, 17, 140, 57, 108, 25, 27, 92, 178, 14, 3, 113, 243, 96, 124, 62, 87, 121, 4, 253, 106, 7, 203, 27, 210, 39, 220, 103, 108, 5, 86, 166, 159, 139, 81, 255, 20, 109, 9, 77, 53, 87, 63, 93, 106, 48, 50, 140, 208, 150, 22, 238, 20, 241, 183, 61, 192, 86, 184, 186, 211, 47, 137, 238, 62, 128, 170, 146, 83, 62, 174, 219, 12, 212, 168, 222, 122, 182, 44, 32, 244, 235, 161, 71, 253, 142, 2, 155, 216, 181, 173, 64, 251, 173, 145, 235, 201, 8, 100, 84, 70, 129, 168, 59, 106, 59, 21, 157, 45, 23, 85, 122, 182, 64, 219, 235, 221, 238, 75, 66, 213, 153, 3, 136, 80, 146, 60, 116, 60, 174, 226, 139, 49, 7, 122, 135, 197, 59, 129, 102, 55, 201, 21, 107, 8, 223, 99, 198, 180, 187, 239, 137, 122, 148, 133, 253, 110, 63, 58, 218, 104, 152, 174, 70, 107, 79, 34, 2, 5, 238, 100, 165, 97, 237, 123, 211, 33, 146, 37, 234, 149, 200, 191, 72, 8, 160, 60, 40, 75, 82, 241, 223, 213, 135, 21, 188, 14, 85, 90, 194, 119, 213, 252, 224, 222, 193, 45, 215, 69, 14, 212, 146, 216, 219, 35, 55, 252, 175, 170, 209, 203, 212, 47, 205, 129, 109, 234, 230, 215, 249, 215, 33, 133, 29, 4, 15, 0, 106, 252, 101, 122, 29, 66, 149, 235, 119, 146, 16, 148, 173, 175, 83, 69, 230, 104, 132, 161, 140, 196, 30, 58, 183, 109, 196, 103, 99, 221, 110, 195, 30, 7, 106, 127, 97, 216, 145, 148, 62, 111, 101, 103, 100, 251, 4, 56, 11, 198, 63, 44, 182, 11, 6, 133, 10, 57, 211, 218, 243, 69, 18, 55, 113, 137, 56, 152, 51, 71, 216, 223, 166, 188, 0, 24, 7, 125, 179, 190, 216, 193, 98, 180, 69, 223, 23, 200, 58, 64, 150, 79, 218, 244, 78, 31, 138, 9, 105, 205, 197, 20, 220, 202, 115, 117, 0, 81, 198, 251, 29, 207, 248, 35, 87, 214, 155, 101, 17, 29, 39, 102, 116, 41, 108, 204, 233, 166, 26, 61, 239, 183, 187, 68, 59, 63, 166, 210, 79, 3, 111, 90, 194, 44, 208, 152, 73, 225, 234, 83, 55, 34, 127, 215, 118, 100, 74, 100, 33, 43, 94, 88, 252, 129, 89, 16, 89, 195, 52, 178, 70, 36, 250, 117, 131, 157, 203, 128, 96, 67, 155, 94, 75, 60, 45, 139, 75, 92, 131, 70, 85, 101, 178, 235, 93, 86, 23, 159, 212, 196, 71, 145, 220, 198, 216, 94, 232, 184, 115, 64, 187, 78, 174, 153, 139, 243, 88, 57, 88, 248, 37, 250, 247, 157, 31, 190, 204, 197, 194, 82, 36, 71, 11, 49, 161, 66, 214, 185, 74, 168, 100, 129, 174, 217, 238, 239, 117, 212, 17, 131, 10, 29, 31, 224, 195, 34, 11, 150, 101, 136, 246, 147, 228, 114, 152, 46, 161, 51, 137, 55, 78, 152, 224, 180, 107, 209, 221, 16, 166, 67, 51, 173, 148, 169, 141, 232, 46, 12, 249, 126, 48, 63, 237, 61, 226, 25, 34, 71, 157, 248, 74, 101, 8, 205, 23, 112, 154, 201, 86, 124, 102, 132, 221, 244, 211, 27, 19, 159, 211, 66, 31, 236, 29, 23, 127, 22, 58, 227, 176, 3, 117, 234, 120, 24, 206, 160, 253, 123, 209, 103, 55, 173, 99, 194, 137, 238, 156, 227, 37, 178, 70, 104, 161, 213, 150, 206, 20, 36, 226, 33, 100, 4, 241, 71, 160, 255, 13, 115, 56, 229, 44, 42, 28, 97, 101, 77, 111, 33, 233, 225, 40, 224, 51, 214, 37, 87, 118, 225, 145, 34, 17, 37, 48, 123, 85, 140, 135, 64, 88, 241, 244, 156, 103, 6, 109, 135, 59, 77, 158, 196, 96, 254, 219, 26, 217, 38, 13, 7, 52, 135, 119, 25, 226, 252, 38, 99, 110, 202, 206, 36, 209, 99, 175, 194, 68, 211, 39, 239, 135, 188, 151, 35, 59, 212, 79, 126, 75, 3, 199, 227, 229, 122, 194, 217, 241, 245, 239, 200, 87, 115, 103, 232, 244, 51, 212, 230, 217, 34, 80, 252, 140, 51, 110, 43, 213, 46, 224, 116, 31, 69, 169, 120, 67, 16, 243, 143, 241, 169, 198, 234, 183, 96, 175, 255, 250, 246, 28, 249, 223, 54, 254, 248, 158, 144, 216, 40, 138, 164, 71, 4, 251, 38, 215, 58, 171, 220, 60, 137, 23, 28, 152, 168, 181, 215, 151, 183, 150, 220, 101, 126, 10, 83, 91, 1, 251, 27, 150, 16, 248, 237, 83, 170, 30, 36, 162, 231, 148, 7, 26, 198, 166, 107, 166, 147, 110, 47, 119, 246, 190, 76, 230, 141, 222, 254, 54, 201, 167, 28, 184, 125, 19, 148, 70, 189, 33, 0, 160, 84, 80, 239, 65, 118, 154, 12, 150, 61, 151, 202, 121, 153, 232, 221, 145, 128, 245, 174, 101, 149, 139, 17, 10, 177, 24, 74, 250, 36, 234, 14, 248, 239, 129, 191, 107, 165, 239, 15, 196, 82, 208, 211, 134, 21, 169, 18, 199, 116, 126, 248, 38, 137, 90, 105, 147, 255, 249, 41, 106, 166, 15, 148, 155, 120, 138, 101, 113, 53, 227, 237, 10, 138, 60, 5, 120, 119, 66, 75, 6, 24, 10, 21, 118, 219, 189, 192, 131, 106, 49, 25, 30, 41, 145, 15, 189, 204, 172, 125, 103, 237, 13, 176, 114, 148, 65, 99, 114, 124, 32, 104, 81, 250, 8, 73, 218, 251, 52, 16, 195, 229, 144, 72, 207, 104, 105, 166, 34, 109, 183, 140, 248, 101, 191, 85, 30, 77, 167, 251, 219, 9, 54, 2, 173, 117, 11, 180, 16, 201, 20, 198, 90, 197, 173, 143, 182, 66, 77, 216, 40, 89, 204, 23, 176, 113, 0, 117, 39, 153, 124, 145, 105, 135, 156, 178, 220, 251, 242, 213, 75, 54, 74, 66, 60, 77, 73, 230, 69, 43, 193, 26, 165, 208, 3, 112, 253, 92, 102, 153, 48, 171, 237, 248, 86, 204, 55, 200, 239, 76, 222, 108, 97, 98, 169, 158, 116, 120, 112, 168, 79, 54, 78, 52, 18, 132, 175, 38, 182, 48, 21, 192, 9, 12, 200, 110, 109, 178, 68, 202, 194, 84, 220, 76, 163, 170, 167, 62, 65, 201, 13, 121, 45, 144, 62, 131, 198, 114, 31, 239, 192, 29, 121, 33, 205, 128, 215, 110, 236, 18, 44, 103, 152, 111, 191, 73, 113, 227, 58, 197, 77, 207, 84, 242, 29, 51, 161, 126, 76, 190, 25, 181, 218, 238, 169, 230, 77, 147, 77, 219, 232, 176, 195, 167, 23, 143, 113, 140, 244, 111, 37, 125, 2, 136, 37, 125, 180, 205, 189, 137, 237, 146, 10, 135, 227, 126, 17, 34, 1, 242, 15, 17, 211, 18, 243, 151, 49, 148, 76, 118, 94, 130, 87, 224, 79, 249, 128, 184, 34, 177, 249, 1, 91, 189, 20, 221, 238, 88, 216, 180, 153, 194, 128, 106, 98, 138, 82, 154, 18, 70, 140, 82, 106, 51, 181, 32, 50, 165, 107, 172, 153, 136, 170, 197, 169, 10, 8, 41, 155, 4, 82, 62, 12, 89, 61, 23, 59, 169, 72, 166, 44, 116, 48, 1, 49, 218, 193, 95, 44, 113, 8, 192, 213, 54, 65, 43, 165, 220, 196, 139, 252, 107, 19, 65, 37, 119, 76, 55, 254, 117, 219, 219, 74, 179, 220, 51, 16, 159, 10, 229, 197, 94, 21, 152, 224, 165, 138, 45, 153, 54, 13, 147, 230, 61, 104, 255, 42, 41, 67, 194, 87, 200, 198, 173, 78, 44, 103, 143, 168, 68, 104, 165, 200, 13, 241, 115, 119, 222, 41, 36, 110, 194, 214, 233, 190, 244, 179, 9, 4, 118, 38, 160, 45, 21, 184, 8, 196, 239, 249, 131, 250, 19, 167, 126, 104, 151, 73, 237, 120, 238, 89, 76, 109, 127, 16, 194, 94, 40, 81, 245, 187, 118, 83, 60, 26, 27, 245, 241, 135, 206, 223, 23, 24, 228, 96, 132, 29, 194, 105, 112, 14, 86, 46, 76, 49, 125, 68, 144, 201, 157, 131, 243, 10, 233, 179, 166, 37, 219, 104, 55, 240, 102, 232, 114, 90, 239, 203, 35, 96, 128, 14, 175, 157, 152, 115, 68, 137, 69, 253, 116, 47, 89, 6, 193, 224, 210, 198, 133, 162, 187, 30, 125, 201, 65, 206, 187, 13, 180, 35, 232, 142, 21, 230, 108, 26, 173, 135, 246, 104, 76, 171, 201, 211, 6, 28, 10, 131, 212, 121, 57, 12, 121, 231, 210, 241, 105, 45, 35, 6, 133, 21, 203, 197, 24, 112, 13, 37, 29, 6, 225, 56, 153, 51, 137, 251, 247, 59, 238, 32, 250, 36, 253, 9, 244, 28, 125, 32, 250, 13, 152, 151, 98, 172, 230, 168, 187, 34, 144, 194, 252, 12, 122, 137, 125, 10, 149, 177, 48, 44, 222, 206, 78, 196, 7, 237, 221, 106, 47, 233, 100, 102, 25, 182, 228, 128, 238, 208, 191, 207, 204, 213, 164, 95, 74, 243, 92, 74, 164, 135, 104, 72, 11, 74, 55, 94, 91, 26, 89, 239, 212, 7, 4, 50, 70, 33, 134, 167, 3, 224, 209, 51, 43, 55, 100, 238, 152, 134, 204, 54, 248, 151, 14, 92, 70, 8, 80, 179, 235, 215, 183, 237, 80, 41, 189, 26, 60, 103, 134, 137, 249, 160, 232, 254, 69, 238, 133, 181, 127, 164, 99, 115, 116, 79, 52, 244, 23, 9, 171, 16, 207, 172, 241, 229, 139, 99, 148, 119, 250, 205, 160, 163, 112, 2, 143, 75, 169, 18, 209, 76, 93, 175, 219, 33, 29, 43, 174, 54, 129, 105, 164, 165, 60, 168, 95, 37, 183, 72, 196, 62, 33, 91, 63, 102, 174, 163, 168, 237, 32, 50, 203, 227, 188, 93, 199, 166, 70, 13, 201, 68, 194, 154, 156, 60, 4, 12, 244, 186, 110, 163, 208, 244, 254, 94, 41, 43, 52, 238, 71, 161, 78, 175, 252, 78, 254, 154, 236, 128, 218, 1, 231, 62, 194, 138, 136, 226, 53, 209, 108, 9, 181, 201, 208, 68, 235, 198, 129, 204, 113, 40, 0, 122, 171, 113, 148, 142, 18, 160, 241, 16, 28, 190, 109, 16, 248, 121, 212, 0, 185, 196, 248, 108, 34, 16, 199, 83, 252, 19, 238, 117, 131, 30, 164, 183, 206, 23, 72, 175, 245, 167, 89, 83, 163, 33, 21, 12, 58, 86, 80, 96, 21, 85, 235, 217, 254, 230, 137, 184, 131, 57, 40, 77, 12, 148, 186, 108, 193, 215, 222, 61, 254, 79, 113, 84, 148, 250, 93, 247, 80, 180, 129, 45, 185, 55, 106, 38, 228, 245, 200, 217, 100, 88, 57, 30, 250, 223, 82, 127, 58, 62, 173, 212, 174, 35, 104, 205, 175, 222, 128, 122, 112, 169, 19, 163, 171, 136, 54, 59, 156, 24, 254, 136, 149, 194, 113, 117, 115, 96, 188, 242, 222, 218, 250, 1, 85, 177, 231, 68, 104, 145, 142, 223, 154, 120, 60, 117, 226, 49, 139, 119, 132, 167, 191, 138, 225, 123, 143, 176, 211, 57, 130, 219, 88, 169, 211, 214, 153, 189, 201, 222, 172, 85, 101, 24, 101, 243, 122, 171, 229, 213, 29, 198, 177, 40, 47, 23, 12, 99, 151, 26, 38, 65, 101, 202, 207, 144, 120, 149, 142, 66, 156, 91, 36, 79, 80, 0, 229, 32, 54, 205, 236, 236, 36, 91, 129, 246, 2, 56, 230, 106, 175, 74, 6, 183, 66, 219, 206, 18, 140, 150, 65, 6, 146, 82, 162, 188, 10, 211, 109, 1, 110, 245, 133, 218, 216, 36, 25, 21, 84, 119, 64, 154, 14, 95, 149, 97, 201, 150, 23, 56, 138, 201, 249, 36, 245, 214, 44, 83, 52, 32, 238, 57, 74, 165, 33, 121, 130, 238, 164, 90, 168, 164, 108, 219, 90, 183, 118, 127, 233, 209, 12, 128, 143, 53, 54, 252, 243, 52, 90, 115, 36, 51, 106, 145, 249, 182, 79, 36, 71, 227, 211, 66, 163, 66, 126, 75, 203, 245, 53, 18, 152, 91, 143, 127, 97, 208, 122, 186, 54, 217, 119, 73, 165, 211, 171, 155, 99, 68, 254, 208, 144, 47, 54, 240, 31, 44, 142, 9, 88, 31, 14, 193, 160, 225, 140, 60, 17, 235, 172, 10, 227, 89, 182, 15, 54, 223, 209, 76, 118, 90, 30, 65, 131, 180, 240, 121, 96, 117, 150, 179, 60, 137, 124, 33, 22, 232, 4, 226, 191, 251, 200, 6, 112, 189, 10, 185, 62, 136, 227, 81, 10, 160, 182, 168, 127, 23, 53, 244, 102, 20, 130, 202, 192, 230, 167, 169, 81, 163, 117, 204, 103, 56, 146, 62, 45, 105, 60, 14, 22, 180, 94, 195, 160, 116, 17, 203, 28, 19, 106, 205, 106, 22, 7, 254, 212, 198, 72, 234, 155, 177, 107, 61, 9, 84, 82, 100, 107, 234, 59, 252, 212, 243, 192, 60, 164, 120, 119, 58, 36, 120, 116, 35, 14, 31, 124, 185, 229, 60, 0, 177, 8, 206, 211, 19, 52, 236, 14, 188, 226, 231, 206, 129, 1, 174, 125, 246, 230, 54, 139, 16, 4, 151, 51, 171, 25, 89, 44, 68, 90, 137, 203, 160, 250, 202, 83, 15, 89, 149, 188, 99, 104, 22, 150, 23, 123, 254, 166, 189, 179, 28, 50, 143, 111, 30, 113, 81, 114, 216, 154, 77, 160, 47, 193, 171, 128, 90, 220, 167, 74, 238, 154, 119, 8, 72, 8, 173, 59, 46, 215, 83, 180, 4, 174, 140, 96, 2, 173, 38, 203, 115, 221, 100, 13, 148, 73, 193, 32, 125, 251, 139, 227, 97, 94, 17, 89, 22, 152, 66, 105, 243, 38, 115, 16, 89, 148, 187, 225, 36, 25, 186, 58, 231, 160, 56, 14, 249, 229, 180, 117, 120, 174, 45, 248, 202, 208, 116, 144, 240, 118, 184, 115, 20, 206, 160, 58, 2, 73, 166, 189, 253, 177, 168, 146, 251, 235, 139, 230, 75, 118, 140, 18, 176, 115, 183, 56, 213, 224, 125, 0, 12, 40, 12, 57, 39, 69, 97, 234, 15, 85, 212, 3, 200, 75, 249, 91, 181, 176, 103, 115, 249, 79, 33, 159, 2, 62, 60, 72, 203, 188, 21, 37, 84, 92, 174, 100, 102, 227, 33, 175, 61, 37, 245, 80, 3, 53, 224, 245, 79, 150, 125, 227, 118, 39, 2, 54, 226, 218, 40, 25, 5, 158, 228, 81, 248, 27, 58, 176, 173, 92, 128, 80, 223, 236, 6, 184, 233, 124, 96, 28, 83, 255, 82, 68, 72, 93, 207, 96, 24, 10, 162, 234, 181, 68, 36, 70, 208, 216, 210, 184, 174, 124, 136, 98, 134, 99, 5, 187, 45, 120, 220, 38, 132, 57, 170, 37, 34, 176, 130, 222, 166, 75, 117, 20, 167, 162, 129, 59, 128, 225, 170, 215, 101, 242, 141, 1, 222, 45, 47, 28, 167, 242, 110, 242, 139, 122, 241, 21, 180, 215, 69, 124, 193, 67, 218, 196, 194, 226, 138, 93, 108, 220, 80, 45, 243, 2, 43, 71, 31, 37, 217, 68, 3, 3, 24, 36, 34, 188, 67, 180, 207, 198, 183, 79, 150, 57, 67, 205, 87, 241, 72, 202, 82, 236, 192, 248, 154, 17, 151, 105, 3, 70, 255, 87, 67, 92, 5, 194, 60, 110, 254, 113, 248, 234, 17, 28, 80, 159, 205, 32, 235, 41, 195, 2, 18, 7, 213, 180, 232, 68, 6, 212, 100, 115, 165, 236, 197, 51, 133, 39, 139, 165, 213, 102, 202, 254, 33, 15, 144, 64, 123, 99, 97, 148, 29, 104, 68, 247, 171, 9, 99, 148, 70, 195, 51, 171, 191, 135, 3, 224, 230, 247, 249, 216, 253, 34, 111, 239, 231, 245, 126, 248, 79, 234, 94, 170, 32, 249, 128, 168, 14, 165, 117, 146, 93, 37, 196, 96, 113, 220, 240, 147, 128, 138, 252, 22, 203, 180, 208, 27, 179, 80, 103, 222, 15, 237, 191, 203, 65, 27, 237, 135, 132, 165, 126, 71, 51, 50, 46, 160, 24, 107, 182, 71, 30, 242, 237, 208, 11, 139, 212, 50, 1, 217, 69, 151, 54, 183, 97, 49, 32, 203, 9, 82, 135, 92, 220, 157, 148, 128, 156, 176, 32, 253, 12, 68, 244, 207, 20, 224, 154, 46, 204, 45, 186, 106, 66, 9, 99, 174, 225, 196, 83, 215, 244, 74, 177, 219, 181, 77, 149, 233, 189, 44, 204, 34, 15, 55, 58, 190, 247, 64, 50, 99, 249, 49, 76, 189, 169, 161, 2, 247, 93, 165, 225, 44, 54, 192, 130, 108, 123, 177, 108, 122, 84, 83, 31, 37, 68, 199, 255, 147, 15, 127, 138, 48, 209, 237, 114, 44, 145, 50, 119, 109, 9, 163, 163, 226, 185, 164, 28, 174, 81, 250, 96, 124, 182, 62, 12, 114, 174, 6, 234, 164, 40, 94, 235, 70, 148, 11, 55, 170, 192, 193, 52, 224, 129, 49, 148, 211, 80, 143, 155, 82, 254, 41, 136, 82, 248, 243, 229, 133, 1, 51, 33, 54, 20, 180, 175, 140, 235, 81, 195, 24, 232, 0, 160, 134, 32, 221, 140, 150, 29, 245, 223, 235, 187, 77, 123, 253, 148, 110, 39, 146, 97, 48, 3, 7, 88, 80, 58, 46, 23, 158, 83, 170, 244, 135, 12, 194, 138, 189, 164, 175, 163, 173, 141, 205, 192, 80, 133, 58, 209, 11, 13, 114, 122, 109, 95, 129, 212, 250, 142, 254, 180, 67, 47, 32, 10, 190, 184, 83, 137, 39, 120, 135, 237, 215, 27, 198, 62, 200, 200, 233, 60, 248, 220, 104, 88, 254, 23, 94, 183, 125, 25, 24, 43, 94, 224, 85, 17, 38, 162, 190, 174, 57, 57, 24, 155, 27, 229, 131, 184, 57, 72, 57, 250, 55, 97, 71, 24, 132, 64, 153, 44, 36, 34, 108, 247, 2, 203, 56, 212, 117, 60, 167, 141, 48, 17, 174, 51, 228, 232, 169, 192, 216, 186, 127, 35, 177, 191, 231, 168, 176, 116, 199, 10, 229, 0, 122, 29, 241, 161, 116, 163, 76, 55, 65, 52, 209, 27, 120, 255, 184, 91, 45, 153, 191, 145, 223, 220, 245, 218, 128, 226, 221, 88, 157, 179, 121, 1, 33, 133, 141, 164, 170, 119, 180, 137, 36, 22, 9, 8, 185, 48, 154, 87, 197, 172, 93, 38, 1, 229, 36, 143, 185, 118, 190, 119, 135, 226, 42, 201, 164, 120, 234, 112, 233, 153, 212, 86, 58, 110, 3, 35, 252, 181, 32, 207, 200, 222, 253, 125, 67, 226, 244, 45, 253, 149, 203, 46, 116, 53, 7, 51, 180, 232, 144, 70, 135, 155, 253, 121, 149, 49, 151, 201, 52, 80, 49, 236, 11, 161, 5, 27, 146, 38, 73, 112, 168, 160, 176, 73, 205, 217, 134, 223, 65, 7, 179, 231, 41, 167, 46, 67, 43, 102, 168, 188, 222, 72, 49, 74, 93, 195, 10, 42, 152, 82, 9, 69, 170, 225, 188, 199, 175, 56, 255, 123, 37, 198, 253, 79, 98, 65, 113, 18, 74, 31, 235, 172, 80, 164, 117, 63, 36, 6, 3, 205, 251, 56, 255, 74, 142, 226, 2, 203, 23, 219, 222, 90, 41, 244, 186, 238, 10, 198, 62, 106, 252, 225, 95, 38, 11, 21, 149, 205, 87, 114, 155, 136, 210, 191, 87, 62, 251, 214, 117, 127, 141, 121, 7, 28, 42, 21, 211, 21, 239, 16, 210, 134, 254, 12, 227, 179, 65, 239, 98, 207, 49, 230, 138, 111, 222, 123, 104, 227, 178, 54, 83, 93, 164, 130, 115, 231, 46, 62, 60, 241, 244, 113, 196, 59, 14, 163, 211, 79, 255, 121, 213, 46, 32, 89, 96, 228, 50, 103, 35, 95, 250, 224, 25, 73, 150, 98, 183, 165, 230, 16, 102, 127, 62, 80, 188, 246, 105, 207, 22, 116, 52, 30, 109, 216, 43, 80, 251, 214, 178, 208, 105, 163, 177, 106, 196, 86, 91, 108, 128, 89, 160, 220, 248, 78, 144, 160, 136, 4, 170, 155, 75, 50, 75, 138, 117, 91, 177, 50, 24, 76, 155, 183, 144, 187, 67, 60, 35, 102, 77, 42, 126, 35, 250, 106, 249, 114, 14, 194, 168, 248, 149, 137, 229, 201, 42, 164, 8, 34, 60, 36, 240, 0, 190, 77, 51, 233, 174, 220, 4, 168, 28, 47, 45, 123, 181, 53, 240, 14, 199, 48, 137, 104, 34, 40, 112, 169, 248, 230, 152, 99, 104, 130, 255, 227, 0, 104, 233, 111, 124, 121, 223, 87, 25, 9, 86, 233, 181, 47, 108, 8, 47, 249, 76, 211, 76, 5, 239, 141, 53, 237, 188, 32, 180, 242, 242, 200, 119, 140, 154, 214, 111, 158, 189, 51, 137, 40, 83, 35, 214, 172, 175, 132, 112, 149, 26, 5, 188, 38, 63, 226, 153, 8, 179, 219, 194, 136, 101, 129, 171, 34, 214, 20, 206, 172, 43, 99, 131, 79, 255, 255, 210, 204, 146, 50, 108, 75, 241, 100, 113, 59, 167, 151, 90, 113, 246, 63, 125, 164, 113, 106, 191, 227, 107, 252, 226, 175, 155, 76, 170, 235, 45, 36, 137, 201, 219, 120, 240, 192, 36, 160, 8, 236, 87, 88, 130, 55, 189, 117, 21, 237, 177, 47, 160, 178, 28, 249, 70, 16, 23, 166, 224, 31, 59, 112, 204, 237, 61, 127, 122, 75, 36, 242, 89, 152, 34, 70, 114, 26, 224, 13, 109, 124, 142, 231, 153, 135, 215, 200, 106, 3, 106, 100, 134, 237, 176, 114, 68, 231, 42, 74, 112, 90, 164, 75, 100, 160, 227, 183, 212, 181, 108, 100, 232, 5, 190, 99, 159, 218, 191, 227, 64, 143, 198, 55, 83, 206, 189, 137, 188, 0, 6, 147, 253, 140, 62, 226, 84, 140, 212, 22, 88, 182, 240, 32, 105, 138, 8, 248, 197, 222, 10, 181, 246, 64, 7, 170, 20, 121, 171, 206, 205, 128, 142, 185, 143, 78, 77, 84, 169, 181, 214, 197, 187, 98, 95, 234, 72, 71, 0, 88, 9, 106, 138, 116, 119, 170, 60, 19, 38, 90, 129, 159, 135, 73, 134, 154, 220, 200, 225, 184, 185, 113, 213, 80, 89, 255, 87, 118, 47, 48, 212, 155, 244, 110, 31, 59, 106, 202, 27, 195, 139, 124, 198, 18, 79, 199, 13, 187, 139, 20, 183, 8, 14, 70, 210, 221, 173, 61, 64, 197, 159, 230, 28, 192, 111, 58, 197, 130, 152, 129, 179, 139, 206, 238, 33, 169, 139, 140, 223, 39, 14, 218, 75, 231, 126, 72, 94, 23, 81, 198, 104, 168, 26, 173, 53, 246, 232, 177, 5, 255, 135, 70, 153, 28, 85, 230, 2, 118, 229, 87, 169, 222, 175, 191, 68, 149, 236, 113, 152, 174, 207, 44, 48, 99, 112, 122, 61, 114, 165, 8, 180, 77, 10, 107, 230, 70, 197, 0, 113, 76, 216, 26, 16, 87, 73, 207, 223, 18, 42, 203, 120, 11, 99, 137, 9, 57, 201, 55, 237, 218, 172, 133, 7, 133, 161, 97, 116, 237, 38, 91, 129, 247, 43, 106, 9, 103, 14, 81, 18, 232, 118, 6, 203, 66, 141, 85, 211, 53, 227, 250, 117, 42, 155, 31, 140, 18, 83, 0, 203, 64, 46, 92, 90, 228, 207, 139, 249, 224, 124, 206, 39, 52, 185, 10, 58, 98, 105, 232, 59, 207, 237, 170, 187, 245, 80, 208, 168, 154, 213, 9, 60, 72, 66, 114, 200, 91, 81, 28, 230, 133, 1, 94, 108, 199, 206, 13, 91, 123, 125, 139, 218, 220, 165, 208, 162, 29, 62, 77, 149, 151, 173, 111, 119, 99, 41, 96, 152, 59, 141, 201, 90, 23, 55, 182, 35, 246, 113, 175, 102, 10, 130, 194, 114, 86, 41, 233, 9, 178, 93, 142, 50, 174, 83, 152, 66, 96, 246, 4, 51, 163, 186, 76, 21, 173, 75, 15, 146, 38, 167, 188, 162, 108, 36, 130, 183, 130, 41, 225, 209, 46, 130, 116, 149, 33, 25, 114, 124, 148, 18, 51, 198, 19, 194, 174, 240, 22, 158, 87, 190, 224, 163, 60, 24, 229, 125, 145, 248, 252, 163, 155, 47, 216, 248, 38, 105, 40, 6, 7, 46, 207, 143, 134, 119, 78, 104, 61, 35, 204, 113, 126, 141, 106, 36, 109, 231, 171, 35, 11, 37, 193, 92, 189, 205, 64, 216, 2, 209, 95, 28, 18, 165, 15, 86, 145, 39, 218, 23, 138, 101, 154, 199, 187, 165, 191, 60, 122, 59, 190, 10, 58, 240, 62, 67, 144, 71, 89, 87, 221, 247, 233, 175, 120, 205, 218, 24, 242, 170, 199, 13, 119, 130, 92, 157, 29, 17, 190, 162, 48, 31, 176, 99, 139, 209, 173, 151, 97, 222, 167, 240, 210, 219, 86, 180, 18, 196, 98, 123, 114, 242, 233, 166, 92, 225, 61, 37, 179, 110, 167, 33, 242, 150, 103, 105, 73, 132, 50, 221, 39, 142, 125, 95, 236, 144, 118, 7, 113, 172, 126, 236, 16, 79, 23, 119, 254, 155, 131, 83, 50, 5, 69, 120, 165, 231, 234, 0, 22, 24, 176, 193, 76, 137, 108, 139, 249, 237, 105, 160, 6, 29, 194, 39, 157, 185, 162, 46, 35, 35, 179, 57, 41, 251, 83, 1, 42, 17, 177, 229, 207, 122, 56, 201, 171, 128, 223, 17, 78, 186, 217, 9, 41, 69, 130, 47, 67, 105, 157, 154, 46, 119, 142, 167, 102, 115, 96, 231, 144, 202, 225, 207, 35, 192, 26, 109, 19, 228, 208, 98, 225, 203, 4, 151, 8, 255, 242, 59, 216, 228, 80, 211, 134, 76, 249, 120, 81, 162, 120, 164, 130, 87, 254, 127, 99, 59, 7, 1, 218, 191, 147, 160, 235, 128, 127, 8, 214, 251, 230, 161, 116, 191, 199, 240, 163, 182, 118, 129, 147, 87, 156, 176, 77, 98, 74, 215, 186, 122, 123, 80, 19, 225, 65, 253, 37, 122, 227, 173, 58, 73, 138, 95, 225, 102, 129, 66, 118, 93, 192, 155, 65, 154, 7, 231, 91, 110, 107, 130, 41, 225, 131, 99, 99, 197, 235, 123, 62, 118, 154, 103, 41, 28, 248, 39, 247, 64, 20, 224, 229, 200, 213, 68, 201, 246, 17, 114, 37, 153, 29, 159, 44, 28, 36, 246, 249, 135, 245, 147, 178, 53, 63, 82, 135, 236, 185, 1, 127, 115, 60, 155, 91, 40, 181, 114, 108, 216, 197, 207, 214, 186, 37, 242, 51, 2, 23, 158, 77, 136, 219, 106, 27, 111, 76, 97, 35, 182, 10, 114, 19, 190, 109, 253, 253, 54, 206, 135, 217, 90, 215, 50, 161, 186, 176, 143, 156, 154, 239, 52, 18, 9, 206, 133, 64, 100, 201, 37, 249, 117, 189, 157, 18, 132, 212, 141, 33, 182, 7, 99, 154, 160, 170, 148, 253, 105, 17, 83, 160, 117, 182, 120, 216, 241, 144, 176, 223, 228, 151, 120, 213, 1, 9, 102, 48, 227, 245, 179, 18, 177, 135, 228, 142, 18, 203, 77, 88, 46, 164, 142, 99, 31, 179, 252, 146, 80, 205, 112, 32, 168, 79, 187, 152, 92, 89, 201, 61, 118, 18, 117, 140, 199, 169, 31, 105, 60, 26, 195, 199, 130, 182, 245, 99, 38, 194, 22, 240, 164, 60, 58, 5, 53, 195, 17, 110, 38, 176, 223, 143, 223, 156, 142, 90, 228, 24, 135, 118, 224, 194, 230, 149, 208, 38, 232, 236, 29, 255, 92, 88, 47, 186, 98, 128, 33, 69, 129, 67, 145, 163, 241, 201, 221, 79, 165, 159, 227, 233, 191, 52, 52, 213, 130, 160, 233, 176, 220, 57, 18, 41, 3, 130, 14, 4, 16, 64, 67, 68, 160, 213, 223, 239, 17, 109, 11, 200, 226, 94, 55, 195, 19, 103, 148, 195, 130, 173, 69, 90, 92, 110, 120, 190, 96, 43, 13, 112, 239, 155, 162, 79, 231, 180, 65, 15, 212, 111, 164, 212, 219, 11, 16, 48, 152, 71, 209, 233, 65, 187, 146, 221, 161, 133, 59, 216, 231, 229, 159, 83, 134, 74, 55, 232, 129, 195, 202, 151, 167, 92, 85, 132, 28, 153, 133, 182, 48, 46, 207, 102, 252, 126, 37, 49, 174, 222, 120, 231, 167, 238, 200, 46, 210, 179, 147, 231, 96, 236, 141, 159, 92, 171, 180, 62, 28, 145, 30, 144, 212, 114, 193, 18, 140, 1, 200, 206, 18, 153, 215, 251, 200, 2, 46, 8, 128, 76, 161, 159, 212, 246, 223, 246, 206, 22, 255, 2, 210, 240, 239, 87, 225, 62, 219, 70, 244, 55, 14, 252, 50, 156, 36, 121, 151, 111, 28, 83, 95, 188, 250, 243, 181, 235, 173, 253, 103, 246, 243, 39, 11, 73, 254, 66, 1, 74, 80, 252, 40, 26, 107, 130, 185, 171, 79, 56, 250, 249, 8, 225, 192, 103, 129, 10, 63, 23, 230, 65, 11, 33, 221, 187, 6, 70, 17, 156, 34, 178, 254, 75, 118, 202, 208, 65, 164, 51, 172, 151, 37, 87, 151, 49, 215, 186, 122, 133, 176, 23, 5, 212, 117, 132, 84, 125, 148, 52, 120, 63, 162, 115, 79, 24, 156, 207, 173, 253, 202, 229, 252, 45, 87, 77, 211, 129, 96, 15, 186, 87, 231, 204, 39, 99, 125, 6, 151, 254, 255, 229, 70, 182, 95, 171, 90, 203, 41, 39, 90, 44, 122, 151, 126, 208, 215, 114, 37, 39, 185, 145, 54, 168, 10, 14, 84, 194, 57, 48, 53, 211, 82, 213, 99, 38, 72, 123, 253, 213, 132, 249, 201, 25, 219, 247, 200, 19, 195, 198, 173, 87, 90, 14, 132, 203, 191, 230, 195, 170, 143, 161, 219, 220, 173, 97, 63, 25, 155, 253, 136, 4, 24, 151, 121, 57, 32, 251, 109, 237, 115, 33, 176, 65, 248, 142, 183, 11, 60, 64, 203, 26, 22, 17, 48, 145, 46, 65, 248, 241, 94, 194, 171, 24, 93, 85, 110, 48, 91, 116, 255, 245, 116, 105, 75, 180, 207, 12, 149, 108, 215, 82, 90, 235, 245, 101, 232, 134, 193, 92, 75, 98, 246, 202, 5, 141, 97, 161, 232, 250, 39, 46, 30, 189, 162, 184, 21, 115, 241, 106, 94, 213, 246, 30, 85, 31, 66, 19, 112, 93, 253, 240, 42, 133, 250, 235, 20, 237, 235, 184, 51, 175, 33, 44, 232, 176, 24, 135, 53, 209, 93, 97, 238, 87, 4, 67, 200, 251, 3, 223, 125, 147, 109, 1, 239, 60, 117, 79, 209, 37, 138, 112, 174, 142, 87, 29, 197, 195, 251, 233, 243, 223, 249, 148, 62, 245, 36, 57, 156, 246, 58, 68, 92, 139, 45, 143, 16, 17, 151, 83, 157, 236, 115, 245, 212, 22, 64, 243, 1, 127, 154, 135, 123, 185, 44, 112, 121, 226, 233, 157, 150, 70, 95, 31, 96, 8, 18, 88, 249, 113, 242, 152, 216, 31, 243, 208, 8, 165, 101, 196, 225, 237, 206, 26, 239, 170, 109, 49, 237, 187, 7, 138, 213, 160, 123, 80, 17, 8, 206, 68, 20, 17, 113, 113, 113, 40, 158, 90, 77, 30, 198, 20, 188, 17, 77, 149, 13, 176, 141, 82, 63, 107, 40, 141, 176, 122, 106, 43, 126, 187, 229, 31, 147, 115, 119, 85, 246, 214, 242, 237, 234, 251, 16, 43, 198, 125, 43, 128, 160, 175, 31, 180, 95, 255, 170, 221, 50, 224, 195, 1, 105, 104, 101, 30, 6, 39, 61, 24, 62, 17, 254, 62, 14, 15, 32, 184, 149, 214, 86, 155, 38, 71, 187, 79, 190, 130, 25, 248, 13, 38, 197, 167, 98, 28, 174, 250, 67, 171, 252, 173, 230, 34, 174, 100, 20, 173, 26, 35, 112, 123, 62, 250, 250, 241, 55, 124, 120, 224, 95, 63, 2, 206, 95, 115, 199, 89, 128, 166, 5, 73, 163, 195, 173, 235, 126, 206, 70, 103, 94, 76, 135, 120, 92, 32, 52, 39, 214, 25, 205, 42, 82, 250, 235, 205, 26, 228, 84, 27, 246, 35, 152, 61, 91, 144, 167, 6, 32, 148, 93, 158, 130, 48, 153, 107, 89, 161, 187, 197, 171, 21, 134, 39, 152, 103, 154, 42, 225, 77, 156, 85, 240, 19, 44, 18, 242, 251, 40, 211, 145, 230, 191, 38, 182, 184, 221, 87, 72, 129, 143, 231, 9, 140, 225, 23, 91, 59, 197, 108, 254, 95, 126, 205, 89, 8, 201, 171, 229, 251, 158, 241, 72, 245, 164, 92, 27, 194, 72, 255, 244, 12, 159, 233, 184, 196, 191, 2, 106, 188, 185, 214, 121, 42, 54, 219, 75, 97, 233, 241, 145, 225, 241, 94, 129, 163, 254, 253, 28, 254, 35, 95, 207, 33, 182, 181, 167, 255, 216, 236, 131, 202, 184, 218, 7, 197, 225, 119, 227, 167, 9, 195, 190, 24, 229, 53, 26, 85, 170, 162, 42, 17, 206, 132, 174, 112, 31, 84, 124, 0, 23, 64, 172, 177, 174, 41, 165, 175, 74, 252, 148, 87, 143, 15, 233, 67, 229, 233, 180, 115, 21, 212, 148, 227, 158, 237, 88, 164, 24, 126, 170, 9, 239, 213, 120, 254, 146, 219, 193, 230, 113, 60, 189, 26, 183, 216, 245, 180, 187, 80, 100, 210, 243, 254, 181, 106, 64, 249, 245, 100, 44, 235, 227, 69, 168, 228, 45, 0, 117, 224, 62, 61, 68, 223, 213, 251, 35, 206, 144, 194, 216, 230, 219, 25, 49, 109, 105, 199, 239, 95, 209, 128, 200, 33, 26, 137, 29, 229, 242, 43, 29, 127, 231, 159, 132, 252, 184, 170, 252, 166, 162, 227, 173, 94, 181, 7, 80, 6, 246, 73, 33, 110, 152, 198, 229, 133, 47, 219, 194, 27, 31, 4, 183, 192, 33, 192, 235, 98, 149, 50, 114, 133, 180, 155, 163, 166, 28, 36, 172, 69, 56, 223, 116, 146, 237, 65, 231, 123, 177, 220, 35, 34, 238, 48, 48, 188, 170, 95, 133, 239, 215, 56, 126, 122, 237, 91, 66, 187, 100, 63, 32, 144, 51, 94, 82, 26, 184, 20, 23, 69, 153, 250, 178, 36, 175, 45, 47, 0, 154, 179, 132, 139, 85, 202, 147, 170, 47, 244, 93, 76, 148, 93, 77, 25, 232, 40, 206, 85, 182, 89, 200, 44, 53, 211, 48, 103, 20, 140, 165, 76, 3, 247, 109, 79, 47, 7, 17, 70, 170, 143, 65, 252, 141, 181, 191, 102, 26, 27, 24, 36, 214, 49, 143, 51, 41, 90, 61, 115, 204, 124, 192, 46, 145, 237, 202, 72, 132, 37, 55, 164, 225, 111, 227, 114, 166, 134, 9, 195, 221, 176, 94, 167, 17, 200, 87, 211, 101, 204, 234, 198, 111, 179, 3, 50, 113, 211, 173, 163, 71, 56, 31, 61, 132, 113, 2, 225, 188, 56, 141, 250, 5, 157, 182, 8, 209, 98, 53, 123, 139, 9, 65, 24, 30, 145, 125, 139, 191, 167, 23, 148, 112, 239, 227, 91, 96, 178, 210, 241, 177, 8, 68, 100, 3, 90, 237, 28, 127, 103, 146, 198, 109, 142, 169, 162, 16, 91, 136, 133, 248, 21, 173, 168, 168, 140, 230, 199, 140, 139, 155, 97, 177, 175, 199, 188, 173, 56, 60, 201, 104, 112, 83, 89, 13, 205, 218, 95, 111, 213, 204, 130, 115, 162, 30, 71, 117, 5, 167, 3, 57, 29, 194, 96, 177, 136, 160, 140, 161, 10, 1, 76, 62, 134, 126, 102, 77, 19, 134, 130, 169, 69, 6, 73, 62, 235, 70, 105, 215, 46, 117, 152, 177, 55, 78, 53, 44, 224, 225, 208, 196, 41, 28, 191, 107, 1, 230, 106, 68, 15, 188, 185, 243, 127, 124, 104, 24, 144, 32, 90, 17, 121, 10, 240, 96, 98, 218, 75, 57, 91, 107, 73, 184, 180, 104, 138, 223, 26, 60, 35, 106, 161, 194, 62, 205, 140, 38, 186, 248, 196, 228, 242, 101, 210, 46, 93, 226, 84, 46, 194, 76, 94, 15, 140, 171, 89, 22, 108, 216, 89, 219, 220, 48, 243, 178, 135, 148, 255, 176, 50, 178, 161, 114, 2, 218, 119, 9, 229, 71, 236, 108, 185, 36, 121, 143, 214, 148, 233, 232, 153, 70, 229, 221, 164, 110, 196, 254, 173, 217, 64, 50, 157, 96, 162, 105, 156, 155, 241, 105, 143, 214, 130, 120, 223, 205, 199, 1, 51, 131, 208, 12, 84, 101, 130, 12, 137, 75, 89, 50, 231, 101, 15, 73, 197, 89, 192, 244, 203, 30, 189, 138, 55, 100, 78, 188, 92, 66, 158, 173, 193, 195, 0, 14, 163, 225, 186, 167, 16, 244, 73, 19, 22, 168, 168, 225, 86, 13, 212, 250, 195, 191, 145, 47, 110, 3, 140, 141, 252, 210, 183, 166, 163, 185, 229, 231, 229, 133, 253, 135, 92, 170, 154, 2, 76, 105, 236, 30, 112, 93, 227, 67, 82, 140, 23, 80, 212, 80, 3, 62, 70, 119, 236, 232, 68, 192, 243, 55, 42, 97, 147, 72, 38, 104, 157, 203, 137, 153, 67, 197, 78, 240, 145, 47, 115, 70, 220, 150, 134, 97, 197, 209, 111, 136, 134, 102, 208, 53, 196, 208, 38, 21, 85, 132, 12, 95, 158, 127, 65, 47, 25, 6, 49, 203, 20, 223, 219, 135, 12, 71, 35, 59, 8, 201, 249, 61, 222, 80, 252, 9, 144, 216, 4, 57, 229, 146, 56, 109, 65, 73, 14, 212, 55, 224, 209, 29, 234, 229, 223, 164, 109, 207, 10, 88, 33, 235, 239, 176, 36, 192, 176, 221, 161, 172, 225, 149, 254, 42, 97, 208, 97, 135, 170, 91, 252, 185, 249, 215, 122, 44, 190, 175, 210, 114, 252, 152, 28, 173, 175, 67, 184, 31, 47, 231, 237, 247, 119, 114, 223, 207, 244, 152, 143, 121, 72, 194, 143, 213, 118, 81, 225, 220, 78, 250, 184, 129, 29, 85, 195, 7, 212, 151, 142, 137, 94, 213, 83, 153, 179, 39, 183, 210, 202, 97, 153, 73, 106, 74, 161, 120, 128, 9, 239, 228, 195, 63, 75, 96, 68, 151, 86, 158, 242, 231, 125, 120, 47, 110, 158, 89, 183, 208, 217, 126, 143, 240, 126, 247, 168, 176, 250, 39, 90, 96, 108, 141, 43, 156, 191, 165, 173, 176, 29, 4, 159, 198, 54, 189, 190, 62, 139, 18, 54, 28, 216, 144, 230, 203, 86, 252, 100, 153, 249, 121, 83, 146, 221, 234, 70, 108, 210, 227, 46, 241, 52, 103, 138, 36, 173, 33, 23, 149, 6, 109, 31, 190, 18, 253, 140, 129, 70, 41, 107, 54, 188, 68, 24, 93, 141, 154, 173, 121, 234, 190, 126, 235, 150, 81, 100, 181, 74, 221, 150, 248, 26, 253, 123, 2, 19, 127, 85, 88, 30, 226, 104, 226, 214, 190, 95, 21, 171, 45, 113, 138, 231, 54, 66, 99, 149, 62, 38, 82, 195, 23, 68, 20, 47, 26, 161, 192, 67, 42, 35, 61, 103, 127, 201, 224, 118, 246, 238, 165, 249, 52, 102, 30, 12, 87, 79, 49, 47, 10, 0, 79, 98, 169, 192, 182, 21, 11, 36, 104, 133, 207, 68, 121, 17, 44, 151, 43, 78, 28, 242, 128, 223, 191, 116, 191, 161, 2, 68, 78, 50, 201, 215, 55, 25, 51, 247, 225, 69, 212, 26, 111, 4, 78, 132, 199, 44, 57, 181, 208, 227, 164, 102, 190, 30, 221, 46, 144, 78, 56, 245, 31, 152, 216, 243, 242, 224, 6, 174, 161, 77, 17, 9, 111, 244, 182, 170, 5, 89, 44, 59, 231, 79, 48, 85, 120, 247, 18, 26, 203, 87, 53, 191, 119, 193, 27, 119, 133, 130, 50, 156, 23, 211, 107, 114, 105, 18, 159, 159, 169, 154, 16, 180, 7, 231, 24, 16, 198, 182, 200, 134, 8, 12, 104, 146, 254, 173, 162, 151, 140, 91, 123, 78, 199, 74, 161, 79, 61, 184, 187, 145, 74, 118, 236, 133, 217, 37, 191, 137, 250, 254, 225, 237, 140, 119, 131, 201, 239, 204, 107, 235, 1, 170, 74, 244, 216, 232, 235, 157, 218, 199, 121, 128, 74, 168, 105, 203, 74, 149, 243, 181, 44, 150, 53, 146, 203, 22, 131, 159, 84, 250, 47, 180, 68, 90, 215, 64, 75, 218, 72, 188, 25, 133, 23, 12, 145, 197, 137, 222, 190, 155, 49, 90, 129, 136, 229, 76, 162, 97, 34, 159, 115, 159, 97, 110, 75, 92, 200, 112, 132, 8, 52, 66, 149, 125, 22, 68, 252, 144, 133, 69, 82, 54, 186, 255, 53, 17, 181, 29, 51, 120, 175, 178, 106, 114, 207, 137, 100, 180, 103, 173, 209, 88, 145, 135, 170, 12, 213, 56, 166, 42, 171, 255, 185, 14, 62, 102, 135, 134, 107, 136, 48, 139, 236, 140, 26, 146, 6, 245, 231, 87, 242, 206, 187, 221, 113, 226, 83, 19, 1, 67, 104, 211, 173, 99, 214, 39, 24, 41, 216, 164, 154, 211, 193, 90, 82, 66, 52, 61, 221, 137, 97, 29, 171, 124, 118, 124, 72, 125, 197, 47, 251, 31, 42, 63, 55, 100, 86, 239, 4, 251, 33, 235, 87, 195, 16, 68, 210, 33, 128, 254, 112, 47, 47, 35, 64, 253, 188, 56, 28, 83, 121, 156, 136, 240, 221, 217, 108, 71, 20, 85, 68, 21, 135, 87, 63, 221, 124, 133, 149, 111, 111, 158, 211, 137, 255, 137, 116, 165, 111, 191, 226, 42, 111, 224, 125, 34, 241, 201, 117, 136, 89, 147, 164, 160, 75, 249, 252, 54, 115, 41, 131, 212, 110, 156, 86, 170, 109, 224, 126, 247, 236, 250, 224, 220, 52, 150, 230, 178, 0, 129, 54, 232, 254, 153, 239, 135, 56, 77, 185, 93, 184, 132, 14, 51, 132, 53, 15, 229, 232, 130, 203, 75, 73, 70, 198, 140, 129, 1, 0, 206, 230, 240, 47, 103, 246, 62, 169, 241, 58, 219, 159, 246, 138, 101, 87, 204, 182, 179, 148, 93, 16, 172, 2, 227, 181, 128, 4, 217, 210, 9, 32, 150, 54, 141, 115, 193, 66, 94, 233, 230, 157, 91, 160, 16, 108, 219, 185, 247, 97, 155, 25, 85, 172, 145, 120, 91, 161, 179, 217, 223, 94, 78, 250, 217, 152, 138, 178, 238, 23, 54, 44, 169, 23, 26, 215, 113, 106, 192, 120, 140, 76, 222, 185, 194, 152, 166, 165, 229, 217, 241, 154, 177, 157, 230, 207, 170, 240, 100, 95, 82, 138, 70, 8, 187, 15, 165, 41, 196, 216, 254, 230, 136, 15, 109, 201, 49, 56, 185, 181, 108, 246, 64, 227, 88, 45, 1, 200, 22, 7, 254, 164, 8, 137, 26, 179, 196, 188, 152, 102, 55, 48, 202, 104, 16, 164, 46, 222, 57, 127, 179, 177, 14, 75, 100, 172, 196, 52, 216, 230, 21, 195, 22, 191, 127, 5, 113, 200, 66, 155, 106, 240, 38, 64, 163, 247, 114, 18, 81, 47, 201, 220, 158, 72, 73, 168, 6, 76, 122, 67, 82, 35, 148, 21, 64, 246, 0, 86, 33, 82, 90, 200, 207, 57, 135, 240, 75, 170, 205, 163, 169, 59, 66, 107, 152, 187, 197, 248, 12, 150, 139, 12, 169, 119, 115, 91, 179, 144, 5, 159, 239, 151, 103, 190, 221, 180, 185, 248, 156, 27, 253, 12, 243, 168, 184, 19, 96, 96, 101, 249, 67, 153, 112, 225, 153, 66, 100, 211, 181, 118, 127, 231, 154, 254, 99, 87, 248, 176, 166, 236, 11, 84, 97, 120, 89, 211, 128, 145, 160, 111, 182, 124, 97, 95, 91, 224, 53, 145, 253, 8, 143, 165, 107, 159, 93, 46, 18, 98, 195, 39, 180, 209, 197, 91, 168, 245, 97, 81, 71, 11, 54, 153, 10, 207, 250, 150, 7, 185, 253, 119, 154, 218, 239, 252, 250, 234, 246, 41, 118, 139, 164, 243, 125, 8, 85, 12, 110, 117, 176, 18, 69, 25, 12, 37, 33, 135, 240, 250, 60, 207, 151, 65, 221, 196, 93, 195, 240, 247, 152, 140, 224, 204, 88, 38, 103, 105, 219, 123, 25, 217, 54, 138, 214, 109, 56, 142, 90, 84, 100, 214, 29, 201, 80, 34, 87, 89, 102, 242, 112, 123, 205, 104, 71, 50, 186, 207, 25, 162, 135, 143, 223, 198, 165, 254, 0, 69, 231, 51, 123, 50, 186, 102, 18, 38, 124, 181, 254, 131, 21, 173, 133, 174, 88, 232, 111, 70, 88, 131, 161, 144, 8, 116, 117, 226, 191, 125, 227, 220, 14, 35, 110, 47, 142, 209, 25, 110, 167, 86, 200, 124, 61, 200, 241, 173, 42, 98, 17, 199, 190, 41, 133, 171, 212, 49, 217, 79, 3, 84, 164, 157, 118, 243, 56, 190, 158, 209, 117, 76, 227, 227, 113, 204, 57, 117, 100, 29, 182, 251, 118, 140, 203, 6, 87, 1, 199, 184, 94, 149, 245, 49, 85, 74, 212, 108, 42, 16, 99, 14, 242, 155, 185, 157, 54, 162, 42, 26, 150, 149, 78, 101, 61, 99, 81, 80, 160, 130, 127, 127, 2, 126, 92, 94, 146, 45, 91, 87, 147, 177, 250, 239, 236, 152, 127, 193, 42, 19, 178, 111, 46, 187, 114, 225, 143, 73, 207, 100, 87, 250, 68, 210, 63, 239, 243, 179, 123, 208, 232, 191, 5, 110, 29, 54, 250, 69, 60, 195, 63, 160, 90, 175, 241, 225, 28, 172, 170, 65, 84, 9, 174, 184, 148, 60, 157, 249, 145, 152, 216, 219, 133, 236, 233, 130, 166, 136, 161, 183, 167, 135, 77, 199, 247, 156, 234, 3, 251, 229, 195, 111, 161, 158, 79, 25, 12, 54, 211, 68, 116, 49, 27, 145, 37, 190, 102, 216, 248, 33, 6, 9, 114, 210, 126, 95, 165, 179, 51, 68, 136, 71, 199, 172, 158, 108, 181, 111, 102, 117, 207, 27, 139, 160, 9, 94, 108, 107, 4, 170, 4, 38, 48, 101, 76, 161, 231, 68, 61, 198, 10, 62, 236, 89, 44, 61, 69, 235, 177, 55, 127, 189, 243, 128, 185, 71, 116, 69, 235, 208, 129, 243, 200, 90, 128, 8, 172, 239, 72, 31, 75, 204, 178, 243, 5, 186, 2, 99, 82, 245, 69, 64, 31, 87, 85, 100, 101, 111, 1, 130, 241, 251, 41, 163, 59, 190, 96, 134, 185, 211, 203, 134, 74, 4, 23, 182, 53, 249, 183, 171, 181, 27, 28, 140, 104, 69, 48, 159, 26, 163, 31, 93, 194, 68, 254, 227, 153, 111, 142, 133, 176, 130, 50, 238, 193, 89, 232, 127, 135, 160, 240, 87, 183, 221, 37, 156, 48, 244, 186, 181, 159, 116, 26, 81, 131, 209, 7, 211, 210, 66, 250, 238, 135, 136, 16, 135, 58, 28, 46, 189, 43, 115, 230, 57, 31, 71, 173, 237, 70, 218, 186, 178, 143, 93, 45, 123, 95, 159, 35, 243, 98, 149, 206, 134, 91, 239, 4, 171, 96, 79, 155, 56, 115, 38, 61, 131, 138, 173, 16, 74, 241, 131, 26, 8, 64, 32, 6, 208, 156, 125, 169, 153, 57, 214, 145, 176, 254, 208, 93, 59, 32, 57, 238, 56, 204, 75, 23, 41, 43, 187, 232, 91, 97, 1, 198, 185, 171, 235, 67, 124, 1, 71, 97, 194, 95, 219, 71, 149, 54, 180, 206, 222, 224, 198, 205, 191, 147, 123, 106, 0, 202, 54, 164, 56, 76, 168, 82, 9, 89, 55, 80, 213, 248, 13, 92, 75, 201, 76, 117, 227, 105, 164, 119, 178, 153, 44, 64, 168, 255, 57, 193, 100, 105, 106, 214, 208, 12, 221, 11, 135, 219, 219, 127, 144, 12, 180, 100, 194, 122, 177, 214, 204, 125, 45, 238, 128, 200, 198, 210, 146, 152, 9, 133, 55, 60, 85, 57, 123, 248, 224, 61, 233, 24, 229, 176, 100, 180, 117, 13, 140, 55, 29, 109, 48, 148, 65, 117, 73, 146, 13, 229, 213, 88, 163, 154, 19, 132, 36, 132, 233, 115, 177, 20, 128, 185, 73, 189, 63, 93, 156, 123, 160, 148, 126, 51, 55, 26, 50, 65, 158, 65, 67, 194, 246, 115, 228, 246, 151, 4, 63, 206, 113, 65, 2, 154, 67, 187, 235, 225, 211, 105, 220, 125, 64, 96, 59, 191, 218, 192, 127, 104, 203, 21, 94, 1, 225, 115, 250, 25, 46, 40, 103, 144, 243, 157, 159, 147, 180, 183, 190, 200, 31, 217, 242, 212, 245, 204, 6, 96, 159, 215, 227, 132, 180, 7, 47, 19, 224, 71, 25, 133, 66, 30, 161, 174, 221, 81, 82, 111, 189, 194, 52, 22, 182, 227, 18, 28, 204, 10, 70, 116, 4, 194, 15, 168, 79, 85, 197, 214, 191, 88, 183, 86, 153, 170, 143, 64, 5, 115, 215, 106, 62, 247, 94, 254, 143, 21, 154, 140, 99, 139, 138, 119, 83, 123, 105, 139, 158, 141, 86, 158, 135, 17, 132, 234, 43, 128, 104, 119, 70, 218, 62, 84, 42, 85, 34, 2, 135, 1, 183, 189, 38, 186, 250, 65, 8, 208, 29, 143, 228, 166, 212, 101, 181, 88, 170, 178, 100, 110, 225, 139, 166, 235, 198, 167, 12, 175, 169, 105, 229, 146, 222, 105, 60, 231, 233, 129, 188, 63, 52, 13, 208, 168, 52, 0, 34, 108, 54, 77, 101, 4, 87, 94, 211, 146, 135, 87, 191, 72, 232, 159, 115, 169, 175, 189, 108, 233, 119, 16, 230, 203, 136, 225, 221, 227, 172, 101, 234, 182, 151, 40, 132, 142, 107, 247, 189, 145, 105, 244, 143, 72, 67, 247, 60, 213, 35, 112, 85, 1, 127, 70, 100, 110, 95, 168, 128, 41, 114, 142, 52, 146, 45, 224, 173, 127, 207, 143, 2, 104, 70, 165, 56, 2, 5, 157, 134, 101, 225, 74, 4, 132, 183, 157, 54, 229, 139, 80, 248, 33, 168, 118, 251, 25, 146, 46, 228, 77, 200, 53, 157, 55, 192, 22, 190, 169, 129, 73, 94, 123, 49, 18, 79, 83, 175, 77, 11, 241, 103, 63, 61, 30, 14, 42, 65, 31, 169, 222, 237, 129, 25, 136, 99, 231, 213, 140, 147, 188, 100, 172, 111, 19, 12, 194, 167, 10, 199, 77, 230, 25, 33, 110, 93, 6, 194, 243, 221, 38, 69, 90, 103, 188, 66], - [210, 77, 129, 70, 187, 211, 97, 27, 5, 189, 96, 3, 111, 31, 115, 251, 68, 190, 233, 93, 131, 130, 108, 165, 212, 113, 76, 225, 146, 7, 79, 224, 187, 203, 188, 169, 40, 159, 153, 208, 215, 212, 49, 44, 136, 103, 44, 160, 7, 155, 100, 125, 9, 41, 51, 167, 43, 36, 246, 248, 168, 160, 134, 228, 204, 254, 229, 245, 147, 200, 19, 163, 132, 152, 104, 174, 60, 29, 0, 1, 184, 225, 83, 89, 61, 241, 137, 90, 214, 228, 126, 207, 119, 92, 147, 126, 3, 102, 50, 225, 150, 87, 221, 90, 202, 246, 29, 96, 255, 214, 38, 246, 189, 222, 129, 233, 37, 141, 125, 99, 126, 61, 246, 11, 154, 124, 16, 10, 135, 84, 115, 11, 215, 213, 96, 102, 40, 60, 25, 215, 145, 76, 218, 138, 176, 38, 179, 164, 41, 170, 56, 134, 19, 161, 64, 54, 184, 12, 222, 73, 163, 151, 150, 49, 61, 185, 37, 252, 185, 59, 76, 224, 6, 68, 22, 124, 108, 69, 63, 8, 198, 198, 64, 94, 145, 60, 227, 99, 130, 235, 22, 131, 95, 108, 199, 113, 135, 204, 57, 88, 57, 116, 255, 64, 43, 100, 103, 216, 208, 122, 31, 227, 57, 30, 84, 106, 67, 198, 140, 178, 123, 125, 91, 77, 68, 139, 232, 142, 185, 69, 231, 119, 167, 206, 143, 136, 231, 207, 18, 113, 33, 171, 50, 77, 159, 11, 74, 189, 85, 133, 243, 197, 237, 55, 230, 115, 120, 172, 42, 133, 132, 197, 212, 155, 253, 73, 120, 163, 77, 245, 241, 45, 128, 29, 177, 178, 1, 222, 247, 6, 100, 51, 52, 24, 202, 102, 63, 242, 40, 26, 106, 59, 73, 218, 5, 19, 237, 106, 22, 72, 26, 60, 221, 66, 48, 141, 168, 205, 82, 163, 243, 126, 179, 66, 20, 233, 203, 234, 28, 48, 219, 150, 199, 7, 211, 154, 254, 5, 247, 187, 148, 161, 21, 120, 117, 104, 83, 228, 100, 79, 40, 37, 201, 108, 13, 66, 90, 12, 43, 185, 1, 191, 230, 88, 167, 108, 61, 126, 57, 37, 158, 204, 48, 75, 231, 56, 166, 30, 252, 135, 251, 57, 240, 138, 2, 198, 6, 2, 175, 19, 106, 103, 135, 245, 177, 213, 66, 40, 66, 129, 173, 168, 180, 14, 55, 208, 133, 8, 83, 155, 82, 231, 0, 153, 149, 190, 4, 126, 13, 96, 1, 187, 152, 124, 131, 54, 63, 123, 196, 10, 211, 59, 228, 238, 19, 116, 216, 118, 217, 183, 141, 236, 66, 248, 5, 19, 153, 47, 177, 227, 202, 237, 80, 93, 118, 228, 175, 188, 27, 91, 4, 183, 204, 44, 54, 179, 114, 72, 38, 241, 4, 48, 182, 120, 186, 215, 63, 67, 102, 101, 180, 1, 245, 140, 123, 218, 23, 250, 23, 131, 217, 175, 39, 180, 118, 60, 155, 135, 156, 164, 242, 175, 243, 89, 17, 105, 50, 60, 235, 163, 219, 65, 140, 144, 69, 100, 26, 50, 221, 177, 230, 253, 114, 184, 136, 58, 76, 140, 205, 159, 181, 58, 79, 40, 185, 129, 91, 196, 181, 33, 164, 217, 161, 112, 229, 147, 153, 136, 234, 173, 20, 64, 78, 219, 164, 215, 46, 13, 96, 99, 21, 78, 108, 230, 252, 35, 88, 141, 12, 193, 141, 137, 135, 234, 84, 163, 216, 111, 226, 85, 194, 160, 84, 203, 93, 245, 71, 181, 13, 99, 170, 81, 141, 62, 84, 39, 55, 128, 252, 126, 41, 25, 17, 232, 74, 180, 177, 39, 248, 95, 211, 187, 75, 198, 249, 222, 222, 208, 204, 255, 137, 154, 204, 95, 182, 145, 113, 227, 153, 34, 71, 208, 73, 118, 139, 28, 125, 98, 70, 7, 70, 141, 119, 162, 24, 189, 154, 140, 184, 238, 220, 233, 193, 210, 236, 154, 170, 149, 203, 213, 229, 98, 43, 101, 84, 75, 83, 13, 76, 33, 97, 221, 131, 189, 106, 207, 68, 243, 242, 76, 49, 20, 144, 199, 179, 201, 175, 42, 239, 115, 78, 158, 42, 6, 106, 61, 56, 240, 254, 109, 241, 40, 83, 42, 254, 208, 56, 110, 227, 148, 246, 250, 76, 245, 149, 212, 210, 20, 98, 14, 29, 127, 154, 25, 143, 26, 132, 116, 124, 15, 105, 30, 50, 193, 86, 71, 242, 43, 102, 201, 90, 152, 169, 83, 244, 92, 121, 34, 4, 158, 162, 16, 47, 221, 180, 200, 104, 209, 230, 202, 36, 227, 112, 200, 55, 223, 172, 247, 151, 62, 81, 144, 55, 180, 3, 156, 123, 180, 76, 56, 204, 248, 129, 132, 10, 198, 99, 44, 132, 230, 109, 4, 243, 20, 186, 84, 158, 90, 10, 66, 164, 159, 64, 70, 153, 175, 117, 169, 199, 48, 206, 118, 130, 168, 239, 82, 70, 6, 211, 98, 124, 46, 197, 186, 151, 21, 125, 165, 67, 97, 215, 215, 4, 193, 164, 83, 140, 119, 71, 10, 140, 209, 92, 32, 4, 123, 5, 163, 117, 246, 30, 254, 114, 145, 242, 119, 212, 99, 51, 133, 176, 229, 40, 35, 45, 195, 88, 197, 247, 232, 103, 29, 108, 20, 192, 174, 9, 179, 221, 151, 166, 56, 170, 6, 119, 97, 63, 119, 77, 17, 76, 200, 212, 76, 91, 84, 1, 32, 122, 244, 77, 184, 166, 179, 65, 150, 138, 3, 136, 252, 203, 63, 123, 237, 128, 208, 138, 58, 237, 189, 177, 40, 46, 119, 59, 39, 190, 216, 164, 148, 153, 188, 11, 131, 9, 113, 119, 247, 127, 53, 71, 219, 9, 41, 120, 242, 116, 114, 158, 3, 57, 171, 232, 239, 123, 172, 116, 57, 99, 233, 111, 175, 51, 236, 1, 30, 202, 32, 135, 61, 53, 27, 137, 59, 152, 146, 73, 121, 117, 171, 96, 30, 79, 240, 184, 100, 62, 154, 76, 101, 85, 23, 128, 13, 40, 219, 213, 167, 173, 123, 56, 165, 186, 77, 16, 46, 55, 155, 106, 117, 180, 93, 24, 212, 137, 138, 112, 99, 112, 125, 162, 193, 69, 70, 162, 145, 96, 152, 246, 162, 108, 199, 132, 67, 203, 65, 97, 165, 125, 56, 190, 40, 243, 132, 112, 124, 107, 194, 144, 28, 200, 104, 249, 129, 114, 190, 206, 109, 142, 120, 10, 82, 191, 106, 167, 189, 191, 207, 1, 196, 165, 213, 128, 238, 19, 23, 44, 139, 242, 255, 223, 245, 217, 87, 44, 108, 162, 181, 97, 246, 181, 250, 242, 211, 94, 107, 196, 41, 246, 112, 139, 36, 214, 124, 153, 69, 160, 112, 130, 99, 123, 81, 217, 192, 134, 63, 184, 219, 28, 154, 20, 222, 11, 23, 138, 211, 194, 123, 108, 216, 107, 22, 230, 174, 134, 238, 23, 167, 173, 149, 133, 184, 84, 47, 253, 18, 153, 220, 212, 93, 170, 163, 250, 6, 22, 17, 165, 234, 48, 143, 130, 240, 139, 76, 57, 132, 170, 170, 230, 214, 170, 205, 100, 32, 105, 221, 5, 207, 143, 135, 113, 199, 2, 251, 56, 149, 47, 22, 151, 240, 28, 9, 179, 34, 25, 77, 188, 229, 62, 145, 17, 62, 141, 97, 21, 119, 129, 34, 128, 69, 117, 233, 90, 244, 201, 6, 166, 14, 193, 123, 121, 105, 240, 19, 198, 41, 236, 195, 141, 72, 254, 3, 150, 136, 133, 133, 236, 101, 78, 50, 171, 196, 231, 174, 166, 168, 20, 211, 122, 153, 176, 121, 0, 151, 214, 50, 190, 253, 131, 130, 243, 211, 11, 235, 119, 9, 203, 16, 115, 208, 213, 223, 167, 37, 71, 193, 227, 111, 125, 100, 208, 176, 55, 151, 83, 85, 56, 124, 177, 160, 182, 160, 221, 104, 149, 114, 167, 30, 98, 204, 113, 195, 158, 149, 144, 16, 216, 10, 58, 222, 17, 214, 195, 84, 144, 118, 27, 236, 31, 243, 16, 205, 253, 197, 199, 3, 59, 230, 50, 180, 112, 236, 66, 138, 68, 177, 44, 226, 6, 188, 175, 234, 218, 207, 107, 125, 209, 84, 135, 165, 50, 47, 154, 17, 242, 19, 235, 150, 176, 174, 28, 236, 239, 132, 138, 240, 150, 36, 126, 9, 127, 126, 171, 246, 40, 128, 216, 137, 16, 41, 136, 48, 238, 222, 223, 17, 190, 172, 44, 223, 108, 110, 88, 17, 124, 237, 39, 122, 103, 246, 250, 238, 142, 140, 252, 118, 161, 235, 22, 15, 188, 71, 213, 16, 79, 216, 156, 158, 201, 90, 0, 125, 170, 226, 23, 94, 87, 181, 39, 116, 229, 183, 14, 215, 147, 203, 10, 61, 207, 77, 195, 43, 92, 107, 153, 11, 243, 225, 50, 109, 95, 21, 181, 121, 168, 48, 168, 141, 25, 106, 79, 207, 151, 206, 147, 179, 159, 191, 92, 128, 79, 214, 127, 58, 61, 252, 143, 145, 186, 234, 78, 191, 187, 3, 207, 219, 16, 8, 209, 48, 170, 239, 64, 193, 116, 103, 101, 68, 42, 119, 103, 222, 168, 45, 14, 164, 180, 20, 218, 40, 157, 147, 236, 1, 128, 156, 35, 89, 109, 164, 105, 130, 208, 117, 194, 252, 147, 95, 241, 49, 252, 184, 88, 209, 230, 38, 62, 191, 17, 150, 173, 208, 9, 111, 91, 84, 171, 191, 247, 105, 182, 245, 65, 229, 94, 38, 110, 236, 152, 18, 123, 203, 11, 221, 127, 64, 211, 82, 162, 186, 22, 28, 73, 34, 159, 188, 5, 70, 162, 200, 231, 182, 72, 173, 19, 107, 97, 24, 27, 44, 59, 203, 129, 198, 13, 240, 191, 64, 18, 221, 32, 240, 192, 177, 230, 234, 244, 206, 89, 179, 220, 13, 132, 247, 203, 232, 183, 154, 181, 242, 193, 131, 86, 227, 209, 12, 249, 175, 171, 219, 39, 75, 6, 202, 36, 192, 247, 253, 233, 169, 48, 11, 116, 253, 54, 116, 152, 206, 170, 190, 82, 144, 219, 88, 180, 98, 188, 43, 81, 86, 68, 130, 87, 129, 62, 243, 9, 199, 209, 208, 25, 60, 137, 3, 23, 195, 56, 64, 178, 10, 28, 217, 79, 33, 146, 97, 188, 173, 120, 62, 217, 118, 71, 82, 97, 55, 98, 79, 35, 46, 34, 43, 147, 130, 58, 131, 225, 63, 47, 192, 102, 18, 96, 132, 35, 235, 249, 111, 12, 93, 123, 223, 37, 13, 195, 85, 46, 116, 114, 200, 0, 215, 120, 90, 190, 172, 76, 142, 17, 138, 76, 171, 46, 136, 34, 0, 137, 109, 179, 103, 38, 234, 208, 138, 4, 109, 128, 139, 169, 249, 246, 193, 189, 73, 56, 112, 1, 1, 100, 242, 113, 81, 23, 162, 16, 175, 153, 222, 99, 249, 124, 231, 170, 105, 195, 86, 79, 57, 249, 97, 195, 238, 26, 196, 140, 50, 142, 182, 180, 236, 5, 217, 201, 243, 34, 72, 66, 150, 111, 44, 91, 118, 3, 127, 129, 144, 106, 107, 197, 249, 137, 124, 245, 226, 221, 217, 109, 94, 49, 79, 162, 47, 38, 113, 218, 56, 5, 107, 223, 97, 3, 128, 35, 165, 116, 158, 40, 243, 12, 112, 231, 221, 227, 29, 127, 95, 129, 169, 134, 226, 217, 214, 189, 94, 218, 242, 99, 232, 182, 30, 231, 193, 248, 92, 160, 233, 38, 66, 252, 135, 95, 161, 44, 31, 181, 242, 61, 30, 17, 240, 234, 173, 161, 231, 97, 157, 119, 82, 48, 148, 101, 211, 166, 70, 1, 218, 207, 26, 87, 70, 67, 239, 11, 55, 66, 42, 157, 41, 15, 178, 79, 75, 231, 82, 17, 98, 166, 136, 92, 5, 17, 131, 45, 122, 123, 232, 7, 27, 153, 79, 87, 175, 10, 141, 145, 69, 71, 104, 77, 33, 229, 56, 8, 234, 230, 178, 239, 64, 67, 149, 233, 138, 189, 241, 129, 25, 54, 99, 92, 167, 188, 50, 59, 48, 114, 117, 107, 226, 108, 55, 210, 173, 124, 165, 97, 118, 246, 204, 22, 18, 235, 98, 72, 145, 211, 29, 199, 94, 190, 243, 100, 196, 217, 86, 31, 215, 250, 101, 9, 224, 156, 7, 16, 202, 34, 95, 5, 241, 105, 214, 132, 202, 68, 19, 236, 91, 5, 71, 179, 80, 184, 200, 252, 96, 202, 182, 142, 198, 158, 124, 44, 178, 97, 245, 108, 164, 6, 97, 64, 189, 143, 232, 84, 167, 198, 45, 88, 208, 99, 102, 128, 95, 30, 130, 48, 220, 211, 216, 214, 77, 22, 81, 179, 247, 111, 164, 189, 229, 54, 52, 104, 129, 153, 159, 166, 216, 221, 52, 84, 84, 43, 222, 197, 49, 133, 168, 14, 163, 94, 67, 253, 31, 26, 92, 5, 183, 132, 255, 187, 35, 176, 167, 113, 242, 246, 29, 130, 29, 153, 97, 90, 133, 3, 43, 230, 102, 124, 240, 136, 45, 230, 39, 254, 93, 172, 101, 223, 251, 63, 88, 105, 17, 106, 171, 90, 27, 71, 233, 19, 118, 223, 65, 48, 81, 159, 147, 34, 106, 243, 184, 4, 12, 142, 151, 34, 190, 47, 116, 236, 56, 157, 130, 155, 66, 147, 81, 48, 95, 106, 68, 89, 190, 246, 160, 247, 21, 33, 92, 254, 177, 86, 191, 204, 160, 227, 155, 91, 0, 90, 160, 215, 64, 1, 129, 3, 62, 60, 60, 0, 125, 41, 6, 105, 160, 158, 48, 211, 192, 101, 199, 251, 139, 116, 20, 65, 183, 173, 164, 194, 31, 30, 18, 107, 200, 66, 84, 31, 160, 44, 162, 183, 217, 244, 176, 66, 129, 67, 159, 184, 99, 131, 245, 220, 131, 70, 218, 229, 69, 98, 47, 9, 70, 55, 91, 251, 110, 234, 240, 110, 27, 91, 167, 123, 207, 235, 197, 77, 17, 255, 235, 17, 78, 160, 219, 133, 197, 24, 86, 102, 201, 25, 167, 193, 119, 4, 94, 64, 105, 90, 57, 191, 140, 185, 115, 0, 208, 148, 175, 102, 56, 138, 181, 27, 245, 234, 200, 173, 14, 160, 71, 110, 100, 184, 206, 204, 163, 239, 117, 253, 160, 124, 116, 242, 111, 147, 96, 15, 76, 125, 92, 5, 67, 26, 63, 45, 114, 163, 69, 50, 82, 82, 86, 240, 78, 48, 140, 50, 51, 186, 42, 229, 95, 119, 209, 15, 185, 199, 188, 91, 231, 204, 146, 95, 206, 62, 127, 3, 218, 54, 39, 80, 53, 222, 239, 32, 241, 97, 115, 33, 49, 115, 80, 59, 222, 30, 249, 156, 93, 250, 22, 126, 47, 26, 2, 128, 67, 135, 81, 0, 79, 195, 66, 122, 148, 32, 231, 193, 58, 13, 22, 80, 81, 122, 88, 66, 158, 140, 115, 85, 16, 65, 235, 195, 82, 148, 114, 103, 85, 152, 242, 234, 85, 230, 34, 216, 101, 77, 186, 173, 252, 228, 125, 183, 55, 221, 121, 186, 176, 120, 235, 77, 42, 250, 19, 204, 105, 167, 192, 155, 154, 217, 158, 219, 185, 220, 96, 122, 75, 18, 105, 235, 149, 25, 214, 125, 225, 93, 111, 115, 147, 205, 90, 61, 31, 26, 106, 205, 82, 193, 47, 70, 44, 34, 83, 183, 6, 115, 246, 68, 59, 152, 196, 98, 72, 6, 205, 140, 144, 139, 4, 120, 250, 120, 81, 96, 31, 79, 170, 212, 137, 34, 118, 110, 223, 117, 84, 79, 125, 120, 0, 157, 2, 236, 184, 68, 252, 62, 85, 21, 112, 110, 161, 245, 72, 33, 137, 248, 94, 87, 187, 245, 148, 138, 43, 15, 106, 166, 91, 222, 158, 54, 43, 249, 238, 246, 1, 222, 195, 71, 110, 76, 114, 103, 75, 213, 204, 64, 177, 180, 166, 234, 94, 146, 145, 86, 57, 227, 226, 202, 232, 137, 137, 207, 206, 233, 16, 125, 10, 138, 62, 36, 25, 143, 133, 132, 29, 40, 2, 192, 102, 199, 226, 170, 202, 129, 189, 252, 141, 185, 159, 24, 131, 109, 160, 138, 182, 98, 225, 182, 32, 171, 106, 2, 224, 80, 112, 93, 45, 67, 75, 69, 8, 136, 60, 0, 160, 97, 109, 113, 195, 196, 225, 78, 239, 79, 192, 27, 79, 94, 51, 179, 141, 155, 11, 53, 193, 88, 55, 197, 193, 240, 37, 58, 186, 192, 22, 154, 54, 19, 85, 101, 165, 153, 85, 189, 113, 56, 169, 46, 252, 209, 73, 35, 145, 123, 86, 10, 220, 178, 182, 117, 175, 18, 117, 114, 185, 118, 75, 6, 238, 67, 124, 168, 229, 217, 31, 9, 237, 129, 48, 138, 164, 23, 164, 141, 176, 53, 71, 138, 195, 17, 26, 180, 43, 81, 121, 214, 53, 5, 70, 130, 198, 82, 104, 168, 162, 244, 242, 64, 208, 247, 99, 186, 113, 57, 155, 156, 71, 144, 57, 185, 98, 147, 247, 173, 237, 209, 19, 99, 4, 6, 69, 102, 23, 173, 171, 52, 223, 63, 121, 29, 111, 88, 75, 247, 85, 28, 111, 82, 216, 193, 186, 45, 240, 2, 87, 193, 144, 248, 159, 114, 206, 12, 236, 226, 53, 54, 27, 150, 20, 106, 117, 59, 146, 239, 93, 6, 3, 46, 186, 205, 70, 116, 6, 79, 192, 28, 148, 80, 170, 227, 174, 188, 42, 252, 4, 44, 29, 7, 158, 62, 62, 139, 0, 167, 11, 64, 4, 67, 75, 112, 52, 131, 116, 161, 148, 65, 87, 152, 169, 10, 198, 149, 117, 234, 186, 92, 198, 109, 58, 63, 28, 131, 210, 41, 244, 157, 44, 116, 229, 70, 240, 178, 202, 47, 31, 18, 254, 219, 31, 33, 0, 204, 59, 144, 147, 47, 241, 23, 69, 173, 90, 178, 169, 1, 24, 5, 69, 154, 2, 226, 41, 25, 254, 209, 5, 93, 205, 102, 203, 54, 166, 167, 137, 133, 179, 249, 229, 229, 126, 162, 85, 173, 42, 119, 53, 88, 65, 210, 21, 129, 135, 129, 16, 47, 215, 95, 28, 113, 54, 11, 56, 200, 252, 200, 104, 69, 210, 243, 155, 152, 200, 226, 127, 168, 213, 36, 152, 195, 153, 236, 66, 97, 117, 169, 19, 118, 52, 37, 100, 24, 163, 196, 32, 119, 116, 136, 117, 199, 51, 184, 48, 59, 135, 8, 92, 140, 112, 103, 212, 211, 236, 160, 45, 53, 200, 147, 36, 222, 179, 215, 62, 234, 217, 244, 118, 20, 252, 30, 16, 35, 156, 231, 131, 52, 101, 236, 251, 106, 236, 2, 26, 69, 33, 160, 167, 14, 94, 158, 161, 140, 76, 191, 146, 14, 72, 23, 139, 127, 44, 170, 148, 196, 181, 104, 252, 137, 21, 244, 201, 7, 224, 233, 77, 155, 195, 159, 110, 49, 58, 157, 75, 75, 200, 4, 159, 254, 58, 246, 202, 230, 254, 232, 98, 50, 73, 108, 61, 247, 55, 9, 204, 171, 167, 61, 10, 102, 230, 43, 168, 33, 164, 68, 2, 202, 254, 245, 8, 216, 157, 188, 31, 52, 73, 9, 83, 8, 5, 253, 204, 246, 184, 170, 2, 168, 98, 116, 254, 177, 199, 181, 148, 237, 45, 53, 114, 83, 128, 59, 4, 129, 25, 235, 118, 199, 191, 47, 158, 35, 11, 226, 80, 81, 222, 216, 97, 85, 211, 208, 31, 62, 19, 19, 143, 246, 165, 137, 219, 230, 93, 99, 250, 163, 200, 96, 105, 234, 36, 200, 61, 54, 140, 216, 15, 100, 11, 113, 54, 226, 199, 77, 8, 2, 193, 127, 84, 73, 3, 39, 89, 161, 141, 85, 138, 115, 238, 145, 173, 98, 65, 213, 185, 249, 251, 175, 210, 100, 253, 249, 241, 183, 103, 252, 184, 19, 119, 247, 23, 72, 14, 216, 205, 67, 35, 178, 5, 187, 250, 151, 238, 172, 6, 83, 117, 75, 224, 130, 136, 142, 67, 154, 121, 188, 99, 121, 99, 135, 89, 73, 30, 116, 227, 71, 96, 74, 200, 227, 121, 220, 166, 37, 167, 123, 49, 52, 169, 27, 114, 180, 174, 7, 77, 72, 199, 14, 240, 136, 205, 224, 220, 122, 56, 149, 43, 85, 28, 139, 166, 202, 230, 71, 116, 28, 218, 103, 168, 208, 119, 236, 25, 99, 125, 167, 91, 250, 188, 97, 123, 239, 206, 167, 254, 187, 217, 224, 155, 212, 213, 247, 244, 219, 3, 231, 238, 82, 74, 21, 165, 101, 151, 199, 121, 107, 245, 70, 244, 18, 99, 38, 138, 246, 115, 246, 2, 255, 81, 33, 0, 251, 255, 208, 218, 32, 240, 9, 85, 186, 100, 36, 165, 64, 123, 180, 4, 219, 128, 44, 121, 218, 142, 153, 159, 28, 20, 25, 247, 193, 144, 121, 228, 66, 123, 55, 19, 73, 120, 116, 153, 136, 165, 141, 27, 149, 38, 194, 89, 254, 106, 245, 202, 79, 21, 125, 238, 177, 48, 228, 162, 63, 20, 112, 164, 46, 125, 156, 174, 169, 15, 146, 215, 42, 6, 1, 143, 178, 235, 19, 118, 18, 139, 151, 123, 250, 145, 120, 221, 20, 50, 214, 184, 244, 70, 14, 183, 69, 137, 255, 177, 61, 13, 151, 160, 154, 255, 156, 53, 80, 232, 121, 57, 106, 141, 44, 218, 165, 52, 90, 55, 157, 166, 204, 223, 248, 250, 213, 154, 67, 181, 251, 166, 236, 111, 21, 216, 93, 237, 118, 223, 197, 85, 18, 167, 246, 124, 120, 211, 202, 217, 249, 57, 167, 125, 9, 210, 87, 232, 70, 152, 131, 82, 31, 107, 35, 170, 52, 120, 191, 131, 46, 234, 233, 25, 110, 90, 138, 204, 121, 209, 153, 34, 10, 40, 240, 119, 132, 221, 240, 162, 175, 43, 113, 47, 194, 223, 189, 118, 174, 209, 213, 164, 211, 222, 63, 71, 245, 148, 204, 19, 241, 23, 228, 49, 201, 218, 70, 213, 65, 158, 93, 3, 198, 49, 228, 253, 141, 78, 78, 60, 235, 93, 197, 80, 51, 189, 125, 250, 208, 134, 229, 247, 0, 72, 158, 217, 211, 112, 16, 12, 59, 182, 141, 201, 40, 235, 101, 140, 86, 131, 27, 238, 91, 193, 205, 77, 157, 114, 227, 17, 143, 204, 159, 253, 162, 141, 178, 53, 92, 115, 91, 200, 9, 203, 187, 113, 184, 135, 169, 145, 84, 40, 171, 176, 142, 56, 227, 137, 215, 98, 52, 75, 108, 46, 127, 63, 95, 169, 228, 187, 89, 248, 86, 137, 63, 53, 42, 26, 205, 240, 130, 62, 164, 230, 255, 89, 21, 241, 198, 32, 162, 108, 118, 115, 1, 100, 52, 51, 143, 80, 100, 103, 252, 105, 144, 139, 151, 142, 160, 173, 243, 143, 102, 209, 125, 169, 40, 128, 136, 9, 53, 217, 200, 184, 53, 111, 92, 209, 63, 94, 8, 87, 246, 98, 108, 109, 46, 9, 103, 225, 166, 1, 50, 171, 195, 173, 45, 190, 236, 26, 43, 41, 243, 207, 248, 59, 15, 39, 110, 96, 121, 5, 129, 2, 76, 13, 155, 251, 134, 32, 133, 114, 207, 205, 17, 215, 135, 64, 171, 157, 218, 84, 164, 62, 117, 201, 177, 23, 86, 21, 46, 106, 125, 86, 102, 98, 152, 189, 45, 233, 39, 216, 244, 31, 153, 202, 156, 7, 58, 242, 144, 105, 204, 108, 229, 33, 140, 116, 217, 106, 94, 204, 235, 90, 28, 254, 21, 110, 16, 106, 20, 189, 217, 145, 38, 4, 80, 19, 237, 101, 55, 228, 92, 38, 101, 6, 28, 47, 243, 233, 186, 73, 222, 12, 93, 166, 126, 27, 252, 251, 86, 230, 32, 170, 48, 104, 138, 54, 206, 198, 167, 235, 190, 249, 216, 45, 80, 35, 93, 146, 136, 19, 93, 197, 79, 72, 225, 156, 153, 178, 205, 169, 160, 6, 153, 228, 205, 211, 151, 56, 157, 241, 195, 211, 6, 162, 113, 124, 247, 179, 65, 18, 90, 120, 8, 34, 101, 118, 167, 6, 62, 198, 143, 7, 108, 149, 18, 218, 216, 218, 209, 44, 231, 175, 58, 24, 16, 148, 180, 9, 16, 175, 230, 170, 64, 88, 60, 54, 14, 6, 80, 225, 156, 104, 135, 176, 194, 106, 125, 242, 9, 140, 112, 24, 96, 143, 98, 18, 101, 66, 9, 30, 214, 210, 168, 17, 153, 207, 230, 59, 248, 151, 179, 220, 104, 202, 250, 39, 10, 180, 204, 81, 193, 25, 125, 232, 117, 28, 7, 228, 165, 119, 131, 71, 46, 17, 57, 158, 86, 174, 140, 60, 244, 81, 214, 182, 157, 238, 220, 195, 171, 135, 68, 206, 141, 20, 204, 66, 160, 15, 28, 255, 92, 123, 212, 18, 147, 160, 21, 51, 191, 181, 169, 130, 245, 65, 138, 177, 244, 91, 61, 37, 25, 64, 193, 37, 20, 179, 148, 26, 41, 170, 143, 114, 235, 59, 25, 48, 46, 150, 171, 177, 28, 174, 139, 230, 48, 134, 13, 53, 175, 145, 128, 60, 81, 45, 72, 39, 251, 237, 62, 178, 22, 186, 130, 245, 61, 183, 220, 14, 169, 77, 92, 195, 67, 54, 163, 214, 108, 123, 43, 137, 27, 58, 180, 58, 147, 207, 103, 169, 158, 226, 105, 117, 41, 110, 236, 48, 225, 198, 25, 75, 71, 95, 56, 21, 83, 162, 211, 158, 153, 246, 126, 162, 97, 130, 87, 7, 50, 213, 186, 62, 36, 95, 7, 163, 32, 78, 94, 189, 23, 213, 93, 189, 183, 46, 138, 132, 147, 66, 204, 189, 224, 210, 126, 10, 95, 155, 8, 29, 68, 5, 51, 229, 131, 192, 0, 230, 50, 58, 91, 4, 55, 0, 156, 229, 205, 141, 112, 193, 195, 140, 18, 118, 97, 23, 156, 67, 73, 96, 36, 151, 216, 79, 19, 229, 100, 209, 78, 183, 229, 160, 169, 162, 37, 129, 149, 11, 250, 183, 202, 83, 15, 236, 208, 231, 170, 138, 32, 222, 101, 184, 208, 92, 119, 225, 238, 177, 141, 245, 162, 174, 136, 1, 211, 92, 228, 51, 224, 20, 143, 108, 158, 241, 117, 58, 83, 122, 75, 236, 85, 118, 195, 161, 170, 63, 45, 219, 187, 95, 91, 65, 53, 51, 246, 172, 189, 241, 40, 188, 210, 170, 125, 54, 114, 79, 224, 148, 235, 28, 247, 57, 202, 245, 188, 167, 176, 137, 2, 49, 106, 252, 247, 214, 107, 111, 132, 96, 98, 8, 62, 125, 167, 105, 224, 26, 58, 163, 183, 94, 195, 248, 193, 167, 88, 46, 193, 124, 88, 242, 150, 41, 124, 36, 215, 61, 182, 77, 254, 110, 224, 134, 83, 166, 149, 151, 150, 93, 217, 225, 49, 227, 91, 140, 167, 124, 121, 127, 127, 4, 45, 108, 215, 100, 133, 129, 191, 70, 57, 102, 208, 21, 238, 167, 15, 215, 29, 255, 121, 140, 212, 70, 13, 139, 109, 190, 188, 225, 96, 101, 144, 149, 115, 107, 105, 79, 243, 206, 87, 234, 164, 204, 223, 198, 228, 151, 29, 44, 155, 17, 84, 27, 68, 156, 196, 240, 23, 166, 71, 68, 221, 107, 244, 201, 224, 51, 73, 165, 84, 10, 96, 236, 104, 62, 10, 157, 31, 185, 202, 119, 89, 220, 13, 79, 251, 218, 178, 203, 252, 155, 44, 44, 54, 36, 248, 98, 160, 6, 84, 139, 118, 122, 244, 137, 208, 49, 48, 130, 147, 209, 95, 219, 10, 93, 143, 101, 48, 78, 138, 6, 77, 234, 201, 88, 220, 34, 136, 124, 99, 132, 45, 249, 255, 226, 241, 215, 87, 211, 67, 49, 121, 239, 155, 182, 30, 200, 215, 132, 246, 98, 141, 21, 97, 111, 237, 28, 13, 12, 76, 29, 64, 113, 46, 23, 9, 14, 44, 143, 239, 252, 237, 64, 11, 254, 139, 44, 65, 17, 167, 249, 160, 204, 25, 196, 215, 215, 49, 81, 152, 195, 55, 105, 234, 24, 57, 236, 185, 143, 54, 101, 173, 2, 117, 202, 31, 157, 132, 112, 188, 61, 6, 225, 42, 51, 58, 163, 213, 238, 15, 37, 34, 93, 120, 248, 63, 53, 47, 9, 236, 242, 138, 134, 92, 157, 46, 116, 191, 226, 58, 49, 105, 41, 228, 138, 107, 153, 59, 143, 225, 46, 253, 184, 204, 127, 38, 101, 107, 166, 8, 28, 219, 44, 158, 11, 3, 181, 86, 180, 83, 92, 144, 66, 172, 243, 228, 194, 200, 72, 94, 68, 159, 33, 67, 236, 220, 114, 13, 210, 146, 203, 209, 179, 153, 131, 106, 87, 68, 73, 37, 77, 214, 197, 18, 36, 239, 165, 150, 237, 123, 60, 94, 29, 191, 236, 66, 32, 66, 7, 57, 237, 137, 13, 234, 124, 53, 19, 27, 212, 77, 188, 131, 193, 253, 133, 119, 72, 170, 77, 37, 95, 145, 244, 229, 77, 231, 131, 141, 200, 26, 79, 247, 253, 212, 232, 184, 140, 139, 93, 205, 112, 251, 38, 66, 217, 12, 137, 123, 93, 174, 32, 214, 197, 170, 127, 19, 118, 220, 80, 107, 203, 76, 216, 83, 172, 248, 233, 3, 216, 156, 10, 244, 242, 191, 161, 140, 127, 147, 180, 82, 93, 41, 232, 81, 128, 109, 33, 224, 250, 187, 187, 57, 166, 234, 108, 154, 192, 187, 63, 111, 252, 242, 105, 57, 163, 68, 127, 163, 67, 139, 180, 115, 252, 105, 70, 64, 237, 254, 170, 8, 252, 218, 40, 211, 52, 50, 41, 243, 62, 181, 0, 219, 139, 244, 186, 83, 141, 158, 234, 232, 96, 194, 244, 175, 68, 146, 85, 232, 68, 173, 55, 11, 103, 74, 199, 151, 241, 26, 2, 248, 247, 203, 61, 220, 238, 105, 98, 133, 121, 31, 170, 119, 206, 108, 33, 192, 32, 252, 81, 94, 172, 97, 236, 126, 139, 62, 12, 162, 233, 244, 10, 200, 3, 225, 136, 221, 119, 67, 190, 170, 10, 168, 7, 184, 5, 141, 245, 195, 48, 155, 195, 111, 205, 94, 168, 165, 135, 116, 246, 176, 123, 36, 72, 142, 250, 82, 212, 198, 47, 38, 61, 126, 62, 216, 208, 80, 167, 224, 166, 199, 125, 40, 0, 203, 173, 2, 166, 132, 60, 175, 235, 235, 171, 39, 165, 121, 65, 81, 50, 10, 64, 44, 231, 250, 217, 37, 35, 10, 144, 184, 36, 243, 178, 183, 71, 88, 201, 114, 81, 210, 123, 55, 84, 237, 117, 251, 176, 12, 93, 176, 199, 131, 61, 8, 240, 134, 92, 33, 237, 202, 43, 29, 57, 13, 108, 116, 97, 254, 108, 175, 25, 154, 104, 107, 47, 170, 230, 47, 27, 197, 189, 236, 231, 45, 69, 142, 82, 134, 110, 226, 235, 14, 17, 63, 105, 16, 147, 251, 155, 195, 131, 70, 240, 149, 152, 196, 153, 250, 108, 159, 92, 224, 172, 225, 131, 87, 185, 200, 65, 154, 212, 240, 56, 9, 141, 83, 215, 106, 34, 205, 224, 118, 249, 86, 209, 253, 52, 233, 76, 54, 140, 108, 161, 214, 8, 123, 110, 170, 224, 25, 170, 99, 74, 68, 134, 11, 37, 47, 43, 116, 162, 188, 89, 52, 66, 183, 201, 185, 180, 176, 177, 177, 59, 40, 193, 214, 52, 152, 173, 46, 111, 221, 176, 20, 167, 2, 175, 171, 180, 78, 238, 240, 171, 187, 234, 148, 52, 169, 148, 2, 121, 162, 83, 82, 171, 61, 175, 186, 216, 220, 76, 199, 156, 162, 66, 18, 245, 228, 41, 240, 125, 38, 99, 227, 115, 134, 161, 77, 58, 50, 189, 245, 90, 3, 93, 197, 162, 145, 79, 61, 68, 58, 234, 108, 130, 142, 58, 119, 41, 141, 22, 174, 128, 197, 194, 49, 9, 193, 19, 229, 203, 19, 200, 118, 244, 78, 135, 79, 42, 217, 31, 175, 9, 152, 153, 58, 248, 126, 69, 188, 249, 194, 22, 89, 27, 252, 228, 55, 129, 236, 46, 166, 26, 251, 30, 95, 178, 70, 97, 219, 154, 149, 20, 119, 200, 48, 163, 250, 62, 43, 158, 149, 208, 222, 245, 157, 143, 179, 251, 80, 63, 19, 150, 177, 27, 72, 255, 121, 202, 92, 5, 182, 68, 37, 118, 57, 33, 206, 105, 252, 153, 139, 252, 156, 192, 212, 35, 74, 0, 99, 47, 62, 219, 158, 22, 71, 196, 155, 159, 180, 108, 94, 154, 45, 127, 102, 224, 214, 25, 102, 112, 166, 65, 145, 105, 45, 103, 33, 170, 145, 2, 190, 164, 57, 76, 38, 60, 87, 35, 196, 57, 21, 212, 122, 129, 182, 93, 18, 97, 121, 62, 248, 32, 73, 138, 249, 156, 195, 146, 205, 247, 129, 120, 133, 145, 195, 159, 101, 159, 178, 110, 100, 43, 174, 25, 233, 169, 187, 187, 199, 200, 43, 84, 190, 254, 21, 45, 70, 127, 230, 20, 181, 233, 75, 12, 237, 3, 5, 187, 89, 51, 99, 112, 189, 67, 52, 139, 171, 0, 140, 222, 197, 247, 200, 232, 110, 172, 120, 210, 9, 138, 65, 251, 161, 43, 127, 170, 141, 149, 203, 93, 231, 150, 32, 31, 22, 189, 107, 18, 137, 112, 84, 14, 170, 255, 206, 249, 237, 62, 18, 85, 18, 32, 237, 132, 36, 107, 189, 34, 141, 201, 243, 47, 114, 149, 69, 221, 239, 55, 214, 214, 102, 176, 38, 89, 53, 251, 54, 247, 154, 190, 109, 125, 208, 25, 237, 56, 54, 59, 42, 241, 79, 75, 161, 16, 44, 67, 17, 30, 141, 53, 211, 26, 140, 1, 226, 245, 171, 197, 138, 13, 110, 221, 126, 207, 34, 7, 66, 202, 19, 168, 152, 180, 93, 73, 214, 83, 120, 81, 106, 23, 67, 122, 63, 101, 214, 173, 161, 174, 75, 142, 16, 1, 185, 240, 13, 73, 87, 42, 107, 28, 208, 228, 67, 182, 197, 255, 251, 216, 227, 227, 24, 47, 69, 75, 231, 56, 167, 78, 125, 92, 65, 187, 231, 58, 40, 55, 253, 47, 97, 92, 227, 127, 45, 175, 224, 45, 180, 202, 74, 29, 246, 98, 7, 117, 79, 12, 134, 161, 159, 199, 62, 200, 181, 130, 60, 73, 177, 132, 229, 85, 153, 254, 109, 128, 115, 139, 26, 55, 101, 117, 116, 56, 203, 239, 104, 152, 201, 180, 211, 120, 124, 26, 180, 208, 194, 208, 65, 17, 65, 231, 12, 65, 195, 136, 65, 232, 75, 140, 84, 33, 145, 202, 227, 5, 230, 230, 66, 29, 255, 93, 77, 243, 242, 5, 7, 92, 210, 71, 212, 62, 237, 83, 242, 87, 114, 171, 187, 174, 32, 150, 69, 214, 201, 180, 112, 93, 151, 39, 93, 113, 47, 24, 198, 232, 116, 53, 211, 217, 129, 177, 253, 4, 156, 233, 3, 59, 66, 91, 238, 236, 97, 187, 152, 68, 208, 83, 8, 34, 157, 7, 106, 10, 94, 133, 190, 37, 135, 189, 146, 82, 197, 156, 222, 63, 204, 22, 220, 72, 231, 42, 226, 229, 33, 89, 41, 54, 123, 9, 237, 218, 39, 241, 137, 141, 244, 49, 164, 73, 180, 118, 213, 87, 173, 100, 153, 98, 185, 235, 160, 237, 83, 129, 110, 37, 6, 147, 133, 56, 241, 168, 139, 25, 79, 157, 217, 59, 152, 25, 12, 194, 5, 95, 172, 109, 101, 142, 205, 3, 202, 149, 20, 23, 0, 6, 159, 161, 211, 60, 34, 153, 118, 216, 144, 104, 158, 219, 81, 235, 134, 7, 237, 12, 10, 15, 233, 94, 177, 154, 80, 121, 251, 226, 30, 255, 7, 189, 164, 246, 172, 235, 132, 211, 74, 244, 103, 67, 32, 216, 51, 154, 54, 53, 32, 81, 156, 187, 57, 41, 222, 218, 169, 139, 100, 33, 194, 241, 9, 142, 32, 177, 136, 7, 139, 93, 8, 120, 202, 61, 52, 34, 241, 153, 127, 156, 23, 27, 101, 205, 140, 82, 85, 159, 160, 73, 237, 25, 83, 105, 126, 39, 221, 133, 20, 173, 199, 74, 168, 253, 7, 252, 21, 166, 13, 143, 179, 77, 110, 88, 102, 81, 155, 248, 139, 102, 37, 119, 180, 215, 130, 31, 170, 211, 255, 132, 198, 26, 217, 66, 43, 100, 164, 132, 201, 138, 180, 61, 47, 8, 20, 199, 127, 5, 229, 164, 234, 140, 132, 148, 60, 94, 147, 242, 92, 140, 234, 237, 2, 59, 231, 68, 48, 156, 90, 213, 107, 210, 68, 234, 103, 95, 206, 2, 125, 209, 22, 168, 239, 219, 76, 46, 79, 204, 140, 95, 66, 196, 160, 76, 191, 90, 71, 10, 165, 9, 254, 149, 103, 255, 238, 152, 163, 171, 247, 56, 136, 180, 206, 101, 130, 80, 175, 242, 48, 12, 171, 91, 130, 130, 64, 68, 29, 98, 142, 64, 139, 52, 222, 97, 123, 142, 166, 93, 174, 89, 206, 203, 244, 76, 151, 241, 39, 249, 255, 47, 36, 136, 151, 71, 167, 12, 74, 161, 223, 178, 140, 173, 55, 113, 59, 33, 232, 30, 85, 230, 62, 24, 113, 65, 113, 177, 215, 84, 158, 75, 237, 198, 104, 94, 95, 133, 128, 58, 85, 123, 119, 243, 108, 164, 19, 154, 75, 223, 152, 34, 246, 14, 40, 113, 130, 128, 102, 30, 136, 78, 83, 207, 254, 51, 208, 94, 71, 250, 136, 118, 121, 223, 231, 234, 204, 249, 206, 148, 57, 66, 24, 118, 89, 87, 115, 0, 68, 150, 133, 202, 117, 174, 105, 41, 251, 64, 107, 55, 36, 3, 74, 98, 47, 224, 183, 244, 141, 23, 93, 161, 150, 211, 209, 166, 157, 196, 173, 229, 204, 37, 75, 134, 156, 25, 118, 149, 201, 241, 238, 116, 236, 252, 13, 17, 177, 173, 166, 231, 185, 205, 219, 230, 45, 251, 40, 18, 148, 195, 253, 166, 131, 92, 72, 65, 40, 215, 173, 221, 203, 35, 146, 209, 83, 110, 47, 6, 123, 6, 233, 182, 200, 200, 166, 220, 147, 47, 224, 37, 203, 170, 51, 198, 181, 69, 191, 95, 181, 143, 218, 116, 243, 218, 242, 12, 95, 44, 87, 7, 89, 27, 232, 240, 68, 43, 180, 205, 110, 161, 4, 33, 242, 42, 154, 166, 148, 239, 110, 16, 64, 150, 234, 161, 255, 103, 0, 76, 181, 234, 189, 25, 4, 77, 255, 10, 57, 145, 126, 232, 214, 234, 223, 28, 2, 175, 179, 3, 86, 224, 88, 80, 40, 218, 241, 162, 16, 2, 188, 223, 75, 155, 99, 194, 238, 140, 50, 172, 2, 101, 10, 119, 44, 240, 222, 55, 156, 78, 40, 31, 73, 3, 61, 109, 247, 130, 128, 11, 123, 203, 125, 174, 174, 148, 23, 179, 22, 233, 130, 61, 25, 237, 26, 163, 149, 90, 27, 130, 152, 36, 128, 75, 204, 93, 117, 23, 104, 175, 213, 145, 205, 225, 39, 219, 57, 161, 136, 47, 19, 158, 164, 159, 245, 118, 149, 254, 84, 7, 196, 43, 70, 118, 208, 237, 211, 112, 180, 71, 98, 229, 2, 219, 9, 25, 37, 155, 48, 81, 226, 10, 91, 35, 217, 124, 64, 9, 97, 251, 133, 163, 129, 139, 18, 174, 61, 230, 132, 132, 176, 106, 138, 32, 125, 80, 92, 28, 143, 188, 141, 174, 99, 16, 32, 22, 113, 142, 127, 243, 153, 233, 255, 4, 126, 109, 110, 99, 236, 60, 39, 210, 63, 12, 58, 202, 147, 67, 148, 94, 173, 136, 94, 130, 155, 11, 24, 19, 183, 248, 113, 9, 86, 47, 58, 95, 128, 226, 68, 160, 69, 111, 26, 203, 208, 221, 197, 123, 48, 82, 41, 254, 218, 143, 229, 0, 17, 187, 80, 123, 16, 36, 174, 92, 186, 212, 21, 113, 94, 219, 168, 93, 28, 111, 19, 50, 150, 104, 84, 36, 209, 252, 37, 201, 121, 192, 204, 23, 215, 107, 68, 101, 102, 191, 221, 66, 184, 17, 33, 73, 52, 88, 166, 226, 173, 245, 53, 19, 53, 227, 121, 82, 158, 109, 217, 209, 159, 150, 39, 60, 156, 247, 70, 202, 181, 149, 236, 49, 232, 76, 70, 228, 45, 117, 5, 241, 41, 19, 94, 3, 129, 81, 158, 104, 162, 4, 70, 206, 116, 93, 72, 168, 88, 243, 246, 216, 102, 41, 244, 255, 192, 229, 55, 75, 22, 104, 88, 226, 138, 61, 14, 65, 29, 13, 181, 162, 118, 222, 245, 179, 54, 255, 191, 146, 244, 10, 147, 233, 150, 230, 120, 159, 63, 90, 189, 205, 57, 140, 251, 121, 58, 55, 129, 99, 224, 142, 31, 251, 152, 83, 72, 164, 89, 87, 184, 98, 174, 204, 142, 161, 109, 153, 3, 74, 95, 109, 50, 183, 111, 125, 224, 150, 52, 246, 212, 237, 128, 27, 85, 219, 149, 195, 70, 153, 255, 95, 203, 109, 160, 173, 190, 189, 62, 51, 191, 226, 12, 213, 64, 236, 70, 84, 149, 181, 246, 133, 192, 76, 246, 52, 172, 98, 6, 3, 147, 249, 153, 216, 83, 229, 157, 249, 200, 160, 16, 119, 123, 131, 42, 105, 102, 45, 207, 45, 192, 214, 124, 188, 62, 233, 252, 111, 12, 97, 157, 121, 174, 201, 225, 132, 190, 53, 72, 54, 242, 174, 217, 63, 134, 161, 92, 150, 20, 5, 138, 112, 218, 189, 239, 53, 200, 253, 145, 23, 193, 59, 23, 142, 240, 211, 103, 74, 3, 34, 7, 109, 19, 135, 206, 171, 242, 103, 153, 105, 74, 252, 179, 150, 38, 21, 210, 37, 73, 105, 190, 39, 173, 120, 179, 9, 249, 55, 130, 104, 228, 121, 145, 91, 75, 100, 236, 196, 86, 213, 101, 170, 253, 230, 206, 29, 15, 154, 76, 245, 52, 27, 144, 126, 16, 102, 175, 146, 129, 44, 25, 53, 14, 65, 32, 216, 185, 73, 152, 99, 232, 167, 236, 168, 247, 181, 192, 244, 173, 3, 182, 20, 76, 69, 185, 213, 168, 117, 237, 136, 105, 167, 14, 63, 96, 186, 2, 127, 184, 121, 217, 167, 172, 181, 236, 28, 47, 200, 230, 92, 160, 55, 121, 16, 191, 154, 112, 178, 6, 203, 93, 119, 211, 177, 162, 152, 62, 51, 23, 86, 174, 89, 105, 114, 30, 57, 137, 167, 30, 230, 109, 159, 167, 199, 32, 114, 143, 62, 150, 28, 253, 223, 200, 34, 189, 130, 33, 224, 16, 44, 174, 221, 19, 201, 135, 152, 40, 72, 230, 40, 122, 238, 110, 17, 183, 177, 236, 6, 56, 241, 192, 123, 135, 194, 60, 101, 43, 237, 127, 40, 28, 232, 127, 106, 203, 55, 226, 107, 210, 157, 44, 143, 144, 177, 67, 159, 138, 95, 26, 141, 180, 58, 218, 81, 31, 178, 128, 9, 179, 167, 140, 47, 198, 188, 144, 100, 87, 28, 211, 1, 44, 192, 89, 198, 164, 174, 16, 29, 5, 237, 173, 180, 108, 3, 15, 58, 41, 60, 40, 253, 27, 46, 155, 158, 219, 227, 211, 74, 137, 50, 87, 15, 225, 19, 35, 149, 26, 180, 211, 104, 24, 89, 7, 243, 112, 65, 64, 201, 139, 40, 213, 226, 107, 156, 120, 169, 138, 236, 33, 103, 8, 243, 27, 99, 174, 54, 110, 79, 226, 116, 49, 16, 33, 36, 134, 71, 78, 233, 19, 180, 249, 240, 33, 198, 7, 134, 49, 179, 144, 220, 155, 244, 208, 125, 84, 137, 104, 178, 123, 134, 214, 212, 89, 15, 181, 168, 66, 20, 155, 40, 249, 3, 191, 220, 236, 248, 246, 109, 170, 31, 163, 1, 15, 138, 237, 107, 179, 191, 76, 247, 210, 76, 18, 33, 49, 145, 134, 199, 24, 227, 226, 118, 183, 107, 64, 39, 127, 30, 204, 247, 187, 242, 236, 77, 148, 201, 152, 109, 156, 189, 12, 228, 19, 152, 229, 13, 221, 166, 249, 73, 13, 149, 53, 147, 180, 0, 239, 231, 58, 24, 179, 47, 87, 158, 116, 213, 129, 182, 47, 112, 126, 103, 141, 226, 206, 226, 150, 92, 32, 119, 200, 22, 9, 201, 239, 115, 77, 98, 80, 137, 28, 219, 210, 196, 50, 190, 75, 253, 46, 213, 106, 163, 243, 180, 79, 60, 42, 140, 21, 164, 17, 219, 20, 10, 4, 237, 81, 62, 122, 68, 241, 7, 175, 228, 214, 143, 33, 178, 31, 109, 247, 182, 212, 4, 144, 84, 125, 221, 185, 240, 99, 193, 226, 140, 129, 197, 206, 4, 241, 155, 21, 8, 48, 224, 69, 128, 181, 79, 66, 91, 171, 86, 149, 47, 222, 211, 149, 41, 113, 170, 172, 159, 180, 35, 234, 21, 151, 146, 226, 83, 243, 151, 180, 237, 23, 146, 191, 7, 253, 177, 93, 146, 177, 127, 29, 25, 21, 140, 128, 168, 90, 248, 84, 240, 93, 122, 20, 84, 41, 179, 52, 84, 235, 31, 194, 156, 29, 147, 109, 239, 165, 81, 251, 139, 128, 185, 178, 213, 107, 234, 165, 241, 183, 215, 182, 136, 212, 155, 81, 58, 34, 184, 7, 65, 140, 26, 83, 70, 236, 183, 147, 136, 74, 9, 33, 212, 162, 177, 93, 200, 147, 102, 15, 25, 76, 17, 218, 28, 207, 29, 25, 180, 17, 32, 198, 44, 71, 13, 38, 107, 158, 120, 141, 163, 84, 78, 122, 119, 153, 6, 67, 55, 205, 216, 49, 250, 84, 216, 226, 166, 68, 192, 114, 110, 255, 249, 125, 191, 215, 49, 247, 48, 199, 134, 46, 15, 31, 64, 24, 60, 94, 107, 206, 113, 31, 93, 238, 92, 51, 42, 178, 203, 29, 83, 95, 42, 210, 242, 133, 233, 43, 237, 10, 108, 29, 100, 247, 83, 94, 68, 234, 5, 139, 43, 164, 96, 102, 231, 35, 218, 114, 67, 80, 202, 138, 213, 18, 103, 251, 75, 206, 77, 91, 152, 189, 13, 169, 107, 235, 143, 250, 83, 221, 238, 250, 105, 147, 248, 161, 255, 206, 192, 73, 87, 234, 191, 151, 211, 252, 19, 42, 156, 236, 60, 46, 154, 216, 19, 24, 64, 122, 106, 100, 171, 50, 152, 36, 124, 190, 89, 186, 98, 137, 0, 61, 241, 175, 216, 224, 30, 210, 130, 140, 62, 71, 163, 87, 178, 61, 220, 10, 116, 199, 82, 224, 50, 168, 19, 114, 118, 171, 136, 179, 76, 252, 63, 204, 211, 42, 214, 210, 20, 253, 220, 106, 67, 86, 101, 88, 158, 221, 92, 156, 13, 94, 31, 11, 251, 168, 183, 241, 51, 194, 129, 62, 78, 200, 186, 97, 31, 58, 173, 190, 215, 11, 169, 221, 15, 80, 82, 154, 51, 225, 226, 135, 15, 128, 162, 56, 78, 42, 51, 186, 212, 149, 217, 82, 207, 208, 173, 139, 165, 142, 207, 188, 132, 135, 251, 97, 138, 21, 139, 62, 249, 113, 85, 26, 219, 212, 95, 183, 26, 226, 155, 126, 100, 28, 134, 170, 111, 188, 225, 115, 222, 229, 14, 135, 91, 222, 15, 106, 243, 239, 142, 219, 64, 8, 251, 145, 239, 237, 8, 152, 34, 57, 242, 194, 96, 232, 30, 45, 134, 199, 144, 105, 218, 105, 185, 133, 60, 234, 202, 13, 37, 237, 132, 115, 189, 222, 139, 70, 236, 89, 188, 140, 151, 223, 111, 144, 134, 221, 14, 201, 163, 56, 41, 32, 2, 218, 127, 23, 17, 9, 70, 248, 216, 185, 225, 22, 52, 107, 23, 25, 159, 108, 161, 195, 53, 95, 68, 165, 17, 186, 163, 146, 214, 82, 245, 97, 99, 43, 79, 9, 80, 70, 247, 135, 127, 231, 12, 19, 37, 29, 135, 102, 160, 175, 160, 32, 6, 44, 100, 240, 26, 129, 29, 238, 109, 95, 59, 230, 126, 151, 159, 218, 125, 58, 211, 52, 179, 25, 105, 8, 14, 53, 122, 112, 41, 143, 124, 107, 246, 198, 46, 143, 247, 232, 181, 53, 181, 19, 155, 217, 63, 110, 2, 17, 150, 27, 254, 150, 207, 123, 174, 162, 110, 198, 115, 247, 142, 112, 4, 177, 134, 22, 87, 129, 164, 209, 33, 99, 108, 34, 39, 61, 111, 146, 20, 1, 198, 223, 151, 153, 212, 88, 62, 71, 155, 149, 163, 14, 81, 253, 183, 128, 89, 231, 85, 27, 79, 199, 180, 141, 13, 228, 95, 68, 83, 184, 175, 62, 110, 113, 162, 213, 147, 219, 70, 48, 86, 208, 217, 246, 83, 171, 207, 69, 106, 17, 147, 121, 76, 255, 201, 236, 76, 67, 197, 144, 134, 50, 52, 37, 239, 96, 151, 254, 65, 209, 194, 181, 151, 238, 137, 86, 142, 105, 182, 171, 8, 163, 207, 217, 78, 35, 12, 202, 130, 15, 22, 175, 19, 34, 218, 251, 181, 153, 55, 190, 119, 164, 172, 113, 192, 134, 242, 93, 201, 112, 18, 85, 199, 84, 25, 171, 57, 150, 97, 14, 225, 156, 121, 81, 162, 242, 216, 224, 223, 75, 3, 6, 19, 217, 142, 104, 156, 222, 124, 11, 9, 210, 119, 12, 66, 99, 164, 76, 153, 103, 226, 61, 98, 118, 18, 54, 96, 133, 64, 244, 179, 60, 103, 202, 94, 205, 153, 106, 232, 251, 99, 135, 240, 29, 220, 51, 248, 42, 117, 5, 25, 119, 38, 97, 229, 198, 241, 161, 110, 147, 228, 151, 78, 210, 213, 125, 113, 215, 193, 26, 85, 198, 194, 21, 128, 114, 102, 210, 115, 40, 61, 3, 130, 94, 108, 78, 163, 90, 191, 145, 186, 177, 198, 17, 59, 42, 41, 33, 29, 2, 176, 99, 220, 251, 132, 187, 40, 66, 176, 97, 181, 160, 221, 139, 8, 24, 24, 95, 223, 2, 223, 58, 219, 171, 205, 181, 176, 142, 6, 200, 168, 185, 255, 217, 203, 87, 3, 76, 23, 234, 62, 216, 182, 228, 93, 47, 116, 76, 192, 244, 6, 6, 102, 157, 162, 167, 97, 141, 159, 112, 222, 193, 234, 178, 100, 233, 176, 116, 156, 198, 78, 149, 71, 105, 192, 78, 17, 53, 249, 130, 54, 163, 61, 74, 115, 165, 212, 196, 90, 5, 11, 228, 238, 100, 0, 170, 0, 201, 252, 236, 88, 217, 71, 60, 131, 114, 53, 185, 83, 249, 74, 71, 48, 214, 219, 35, 225, 232, 9, 101, 229, 149, 139, 158, 210, 110, 73, 28, 70, 227, 177, 56, 36, 175, 41, 12, 38, 29, 9, 240, 83, 80, 229, 231, 0, 119, 208, 24, 29, 210, 231, 186, 76, 189, 31, 112, 28, 181, 140, 6, 54, 205, 9, 147, 220, 16, 200, 30, 16, 64, 172, 204, 70, 248, 206, 201, 127, 201, 59, 4, 224, 97, 39, 49, 231, 220, 40, 134, 145, 152, 199, 1, 184, 8, 182, 178, 42, 71, 18, 84, 129, 28, 248, 104, 115, 119, 130, 66, 128, 154, 201, 65, 108, 175, 154, 194, 87, 14, 51, 86, 128, 81, 182, 185, 21, 192, 53, 61, 106, 132, 87, 64, 194, 95, 118, 241, 37, 38, 19, 207, 155, 153, 124, 166, 224, 106, 172, 21, 234, 200, 213, 200, 12, 15, 81, 69, 208, 8, 116, 191, 53, 205, 144, 220, 224, 224, 243, 33, 150, 36, 45, 5, 227, 193, 11, 242, 143, 166, 216, 81, 15, 2, 121, 39, 98, 44, 48, 113, 238, 27, 25, 190, 127, 141, 79, 26, 133, 44, 233, 111, 18, 23, 198, 123, 89, 240, 182, 87, 219, 183, 139, 236, 183, 245, 66, 255, 161, 225, 214, 21, 95, 255, 135, 138, 226, 166, 146, 149, 46, 220, 147, 30, 30, 13, 23, 221, 210, 125, 250, 56, 254, 168, 150, 102, 12, 221, 14, 22, 81, 161, 49, 226, 148, 67, 188, 149, 22, 150, 28, 246, 55, 228, 210, 35, 216, 172, 77, 162, 129, 73, 4, 6, 48, 168, 68, 254, 84, 106, 196, 105, 180, 245, 79, 87, 137, 147, 209, 12, 156, 83, 32, 184, 41, 55, 215, 189, 228, 95, 217, 120, 178, 253, 4, 251, 75, 213, 189, 164, 1, 1, 245, 184, 106, 241, 239, 201, 84, 8, 188, 208, 17, 26, 8, 76, 172, 113, 151, 117, 165, 90, 122, 5, 19, 195, 30, 213, 131, 90, 32, 198, 91, 253, 231, 87, 109, 112, 141, 163, 34, 153, 66, 226, 215, 143, 141, 231, 110, 210, 98, 231, 246, 121, 167, 157, 96, 113, 109, 207, 198, 145, 89, 21, 199, 164, 160, 203, 204, 166, 110, 137, 29, 183, 183, 160, 31, 245, 251, 209, 168, 236, 17, 236, 42, 14, 80, 95, 170, 134, 16, 64, 218, 30, 255, 190, 33, 77, 195, 120, 63, 137, 128, 132, 111, 113, 64, 210, 224, 254, 154, 93, 196, 38, 239, 109, 117, 105, 213, 215, 159, 16, 199, 195, 69, 199, 105, 62, 245, 124, 132, 50, 138, 61, 152, 195, 201, 97, 234, 249, 204, 247, 151, 58, 48, 198, 205, 98, 190, 130, 53, 213, 168, 66, 154, 10, 72, 71, 214, 146, 197, 179, 231, 82, 140, 32, 119, 244, 218, 232, 132, 224, 193, 64, 249, 252, 216, 74, 30, 183, 54, 217, 208, 148, 157, 237, 54, 142, 124, 110, 137, 52, 141, 136, 9, 13, 255, 230, 161, 30, 182, 177, 59, 238, 205, 125, 43, 202, 13, 185, 99, 120, 163, 184, 63, 116, 6, 176, 216, 24, 176, 115, 24, 255, 200, 126, 84, 193, 200, 79, 101, 194, 16, 108, 225, 91, 205, 65, 249, 199, 82, 148, 3, 15, 99, 91, 213, 130, 111, 189, 221, 136, 87, 193, 92, 8, 106, 49, 6, 63, 46, 222, 223, 250, 19, 73, 5, 107, 85, 53, 212, 235, 194, 198, 115, 37, 221, 203, 172, 248, 88, 62, 193, 164, 143, 108, 93, 57, 129, 147, 133, 57, 18, 215, 147, 27, 70, 111, 79, 30, 69, 207, 253, 10, 87, 21, 93, 245, 136, 146, 50, 119, 18, 27, 62, 106, 187, 92, 8, 200, 19, 114, 205, 62, 161, 20, 82, 253, 26, 95, 147, 161, 37, 164, 240, 15, 253, 31, 54, 12, 184, 131, 192, 32, 7, 20, 57, 255, 125, 98, 48, 190, 219, 159, 126, 121, 224, 235, 241, 139, 55, 12, 12, 128, 46, 150, 240, 250, 127, 56, 159, 209, 146, 199, 26, 247, 60, 82, 233, 249, 223, 35, 194, 3, 47, 65, 122, 90, 9, 176, 165, 2, 252, 27, 59, 73, 29, 17, 243, 35, 59, 110, 137, 63, 4, 12, 14, 34, 171, 147, 177, 67, 247, 98, 235, 244, 24, 98, 71, 76, 254, 149, 61, 28, 159, 160, 242, 140, 201, 120, 37, 106, 109, 134, 122, 239, 248, 48, 127, 129, 135, 88, 101, 209, 100, 254, 39, 51, 82, 165, 223, 131, 215, 102, 164, 249, 49, 122, 236, 125, 251, 8, 131, 68, 132, 123, 129, 146, 21, 211, 44, 2, 21, 90, 230, 206, 204, 201, 113, 43, 123, 224, 211, 245, 240, 244, 133, 58, 20, 253, 120, 233, 220, 213, 55, 5, 235, 53, 224, 3, 101, 209, 152, 221, 108, 0, 205, 37, 229, 53, 234, 12, 174, 93, 249, 205, 39, 113, 195, 63, 183, 148, 55, 112, 6, 141, 132, 162, 196, 208, 64, 185, 241, 111, 219, 249, 254, 88, 217, 239, 77, 189, 129, 34, 40, 121, 221, 72, 127, 85, 242, 68, 148, 130, 36, 125, 6, 188, 27, 174, 222, 27, 46, 27, 204, 189, 29, 76, 78, 242, 250, 200, 135, 6, 206, 1, 175, 9, 104, 38, 0, 77, 153, 222, 178, 75, 29, 174, 193, 146, 193, 137, 148, 221, 7, 81, 121, 28, 220, 134, 205, 191, 85, 10, 204, 93, 185, 129, 60, 164, 66, 17, 167, 155, 92, 52, 133, 100, 93, 238, 130, 216, 43, 99, 144, 105, 198, 48, 171, 211, 92, 201, 12, 69, 109, 141, 1, 195, 73, 211, 1, 207, 142, 171, 145, 138, 128, 146, 219, 58, 247, 188, 239, 174, 112, 23, 30, 186, 41, 151, 157, 156, 123, 162, 10, 159, 162, 208, 106, 112, 251, 91, 235, 252, 50, 177, 23, 38, 118, 139, 226, 117, 225, 38, 44, 11, 98, 108, 66, 199, 252, 48, 114, 71, 58, 33, 28, 126, 242, 168, 100, 100, 32, 49, 56, 190, 100, 218, 18, 225, 208, 33, 37, 98, 48, 201, 103, 45, 40, 92, 163, 13, 20, 50, 102, 208, 116, 210, 106, 72, 216, 243, 38, 129, 143, 213, 170, 61, 219, 135, 99, 34, 80, 3, 217, 174, 27, 230, 14, 153, 120, 24, 104, 253, 71, 146, 160, 250, 147, 56, 247, 190, 202, 189, 224, 64, 73, 229, 176, 94, 251, 51, 107, 181, 244, 159, 49, 119, 234, 96, 18, 130, 177, 249, 211, 104, 73, 137, 128, 231, 245, 0, 147, 86, 140, 92, 123, 107, 156, 85, 4, 35, 243, 243, 83, 206, 222, 102, 73, 126, 26, 221, 22, 62, 95, 52, 35, 203, 189, 128, 51, 129, 227, 26, 213, 180, 48, 14, 33, 63, 216, 165, 62, 195, 217, 108, 136, 20, 108, 154, 194, 56, 254, 217, 57, 116, 18, 2, 104, 196, 134, 242, 229, 19, 247, 54, 192, 208, 15, 163, 186, 136, 168, 6, 238, 36, 54, 164, 238, 157, 186, 195, 249, 51, 225, 82, 130, 130, 222, 10, 233, 73, 203, 119, 73, 71, 93, 201, 189, 173, 233, 109, 196, 100, 229, 158, 225, 37, 209, 196, 39, 204, 125, 2, 223, 220, 87, 98, 63, 249, 54, 8, 106, 69, 222, 48, 196, 17, 35, 145, 181, 38, 45, 102, 176, 112, 187, 144, 157, 49, 176, 62, 184, 106, 228, 157, 129, 160, 57, 163, 242, 174, 154, 13, 253, 195, 201, 105, 188, 122, 43, 175, 224, 42, 5, 78, 109, 43, 85, 66, 96, 183, 173, 72, 228, 134, 38, 198, 58, 136, 96, 102, 199, 195, 115, 197, 164, 28, 58, 208, 61, 15, 29, 141, 110, 143, 6, 141, 62, 72, 45, 75, 169, 222, 15, 47, 8, 158, 74, 33, 120, 25, 97, 152, 126, 132, 35, 51, 86, 113, 77, 50, 171, 242, 250, 197, 220, 68, 10, 108, 89, 238, 128, 246, 167, 146, 49, 17, 113, 23, 190, 36, 7, 6, 108, 88, 21, 45, 65, 225, 54, 169, 162, 65, 182, 224, 24, 165, 230, 113, 157, 72, 167, 204, 124, 230, 41, 221, 108, 20, 45, 202, 22, 48, 148, 224, 201, 252, 248, 133, 182, 174, 2, 249, 156, 18, 241, 198, 60, 22, 241, 239, 2, 232, 252, 30, 80, 97, 75, 79, 164, 102, 132, 207, 34, 85, 23, 87, 36, 174, 33, 192, 33, 88, 47, 26, 67, 78, 2, 73, 217, 141, 232, 214, 219, 183, 179, 24, 92, 4, 20, 49, 19, 221, 141, 41, 202, 181, 117, 38, 68, 200, 140, 254, 125, 254, 189, 179, 1, 98, 90, 54, 83, 107, 196, 55, 178, 121, 29, 174, 44, 189, 35, 211, 159, 29, 201, 70, 220, 68, 108, 197, 245, 51, 141, 67, 3, 14, 61, 164, 53, 243, 127, 174, 123, 43, 98, 25, 208, 249, 45, 174, 18, 82, 17, 248, 90, 30, 91, 118, 230, 78, 84, 147, 152, 73, 120, 61, 167, 190, 245, 206, 39, 242, 83, 77, 174, 32, 52, 118, 1, 13, 245, 198, 201, 153, 35, 13, 161, 99, 55, 148, 4, 28, 93, 114, 155, 83, 169, 152, 129, 153, 147, 165, 71, 168, 3, 107, 144, 127, 58, 238, 69, 170, 30, 200, 115, 231, 19, 144, 56, 26, 56, 182, 125, 171, 198, 9, 161, 242, 9, 11, 192, 203, 212, 85, 223, 219, 24, 10, 250, 222, 109, 110, 152, 143, 82, 144, 102, 170, 244, 242, 8, 0, 134, 1, 66, 95, 153, 48, 64, 250, 115, 161, 129, 153, 41, 199, 239, 39, 135, 129, 153, 155, 247, 142, 197, 8, 146, 176, 231, 184, 106, 96, 4, 56, 84, 15, 153, 100, 188, 203, 35, 123, 85, 112, 150, 129, 77, 252, 230, 157, 52, 71, 253, 183, 248, 20, 26, 213, 210, 190, 153, 158, 32, 240, 19, 9, 164, 118, 253, 35, 110, 210, 238, 82, 189, 211, 39, 107, 5, 72, 9, 104, 205, 73, 72, 211, 164, 119, 242, 110, 97, 24, 94, 137, 230, 6, 130, 116, 135, 124, 249, 202, 24, 93, 84, 118, 242, 157, 51, 188, 180, 170, 74, 139, 252, 120, 27, 204, 191, 30, 135, 117, 162, 73, 221, 69, 91, 149, 107, 28, 254, 234, 44, 203, 246, 224, 183, 213, 152, 72, 28, 178, 196, 34, 252, 130, 19, 21, 192, 255, 239, 98, 115, 243, 7, 170, 170, 10, 172, 15, 198, 16, 173, 214, 254, 194, 213, 233, 41, 60, 87, 224, 3, 1, 22, 47, 19, 229, 74, 251, 174, 142, 163, 78, 109, 205, 171, 107, 171, 108, 111, 166, 207, 117, 183, 201, 147, 157, 241, 114, 167, 23, 92, 97, 140, 220, 121, 80, 72], - [131, 184, 160, 5, 207, 250, 133, 241, 33, 200, 32, 174, 141, 75, 116, 160, 225, 146, 234, 63, 202, 39, 123, 137, 100, 115, 168, 124, 156, 92, 0, 172, 26, 21, 141, 190, 125, 234, 176, 155, 198, 210, 36, 133, 80, 166, 158, 119, 7, 187, 247, 186, 128, 228, 79, 74, 158, 165, 133, 244, 0, 160, 225, 53, 188, 28, 80, 220, 159, 42, 100, 157, 73, 49, 179, 145, 69, 125, 214, 8, 28, 86, 243, 214, 212, 33, 121, 5, 110, 25, 86, 68, 111, 204, 43, 159, 243, 54, 68, 135, 162, 157, 228, 194, 236, 130, 6, 66, 76, 63, 24, 126, 129, 180, 103, 228, 183, 10, 148, 146, 197, 86, 199, 252, 142, 23, 140, 70, 120, 195, 145, 67, 166, 209, 4, 60, 249, 144, 234, 231, 32, 229, 156, 7, 236, 168, 2, 196, 62, 42, 73, 90, 138, 226, 29, 170, 13, 4, 242, 18, 6, 183, 13, 126, 8, 244, 206, 247, 31, 141, 39, 227, 96, 254, 143, 244, 249, 54, 46, 109, 17, 236, 208, 9, 90, 135, 56, 87, 231, 94, 55, 4, 185, 28, 239, 39, 87, 135, 106, 254, 90, 117, 41, 9, 131, 212, 199, 91, 105, 89, 131, 197, 142, 234, 146, 214, 156, 223, 255, 23, 229, 102, 2, 25, 210, 58, 178, 218, 88, 121, 140, 20, 172, 159, 109, 25, 95, 183, 150, 242, 108, 9, 203, 36, 70, 171, 122, 200, 191, 103, 229, 200, 132, 13, 255, 185, 111, 229, 201, 97, 86, 47, 116, 238, 237, 119, 135, 177, 204, 160, 91, 41, 129, 125, 89, 108, 151, 127, 141, 231, 79, 62, 208, 66, 132, 202, 242, 176, 57, 154, 182, 145, 168, 215, 199, 159, 124, 2, 115, 66, 226, 58, 16, 79, 92, 250, 233, 72, 27, 128, 139, 30, 4, 150, 200, 155, 241, 13, 226, 186, 228, 197, 145, 33, 132, 53, 67, 124, 141, 70, 247, 226, 64, 245, 218, 107, 60, 49, 2, 235, 139, 76, 179, 173, 71, 111, 39, 216, 239, 28, 165, 226, 83, 255, 117, 42, 155, 83, 43, 69, 5, 224, 186, 46, 29, 233, 31, 172, 90, 145, 153, 170, 67, 113, 10, 48, 6, 4, 228, 2, 143, 32, 182, 91, 248, 248, 71, 59, 180, 77, 210, 11, 219, 69, 6, 246, 169, 9, 173, 111, 251, 13, 139, 2, 233, 146, 221, 132, 237, 14, 100, 174, 189, 26, 105, 171, 137, 181, 28, 131, 233, 170, 89, 26, 148, 210, 233, 217, 40, 233, 183, 29, 179, 93, 254, 230, 184, 44, 78, 112, 119, 56, 239, 195, 63, 45, 248, 88, 250, 215, 163, 173, 177, 13, 212, 251, 231, 174, 103, 22, 236, 2, 154, 140, 134, 103, 80, 236, 251, 64, 194, 74, 165, 221, 59, 137, 241, 123, 243, 219, 179, 224, 63, 144, 172, 58, 193, 204, 215, 29, 37, 191, 177, 179, 118, 106, 246, 0, 195, 237, 225, 59, 49, 73, 233, 12, 24, 174, 248, 111, 232, 15, 152, 12, 13, 222, 114, 121, 67, 197, 199, 162, 200, 228, 132, 46, 49, 218, 194, 187, 140, 69, 113, 169, 90, 156, 16, 164, 108, 176, 239, 220, 189, 74, 74, 157, 54, 138, 22, 60, 113, 119, 121, 175, 176, 212, 245, 219, 243, 57, 160, 29, 25, 127, 53, 136, 5, 37, 238, 35, 156, 25, 245, 178, 23, 183, 102, 255, 88, 99, 217, 100, 135, 107, 172, 150, 72, 215, 125, 154, 105, 128, 46, 173, 33, 229, 134, 148, 43, 216, 233, 17, 213, 29, 52, 138, 40, 212, 138, 126, 215, 10, 84, 162, 39, 51, 22, 188, 196, 240, 103, 102, 67, 153, 246, 92, 219, 75, 34, 115, 40, 40, 125, 188, 202, 227, 106, 182, 166, 111, 55, 183, 215, 114, 131, 111, 245, 141, 106, 115, 77, 44, 235, 38, 182, 39, 151, 105, 5, 239, 29, 6, 19, 119, 144, 32, 1, 211, 193, 8, 188, 115, 163, 64, 234, 198, 188, 50, 40, 115, 7, 11, 237, 113, 5, 151, 223, 13, 19, 75, 114, 188, 155, 151, 6, 52, 110, 246, 171, 212, 241, 106, 227, 121, 146, 185, 16, 127, 167, 120, 184, 236, 131, 191, 202, 38, 251, 73, 232, 40, 51, 215, 16, 146, 10, 166, 158, 117, 235, 177, 3, 186, 87, 168, 0, 235, 66, 145, 243, 200, 96, 30, 61, 21, 252, 201, 5, 217, 127, 206, 164, 4, 148, 139, 246, 197, 219, 225, 41, 145, 152, 40, 99, 251, 135, 73, 244, 18, 33, 31, 52, 116, 191, 12, 109, 4, 184, 53, 208, 151, 140, 84, 183, 70, 11, 25, 91, 122, 2, 188, 22, 25, 31, 16, 26, 221, 95, 34, 226, 46, 7, 54, 201, 171, 213, 40, 135, 43, 227, 139, 6, 182, 157, 93, 63, 111, 204, 124, 55, 170, 246, 84, 111, 205, 56, 12, 36, 233, 30, 188, 137, 138, 98, 191, 80, 52, 23, 32, 76, 187, 210, 24, 63, 190, 98, 149, 254, 183, 211, 199, 252, 235, 111, 181, 216, 204, 182, 10, 75, 91, 34, 253, 192, 158, 114, 137, 222, 255, 54, 199, 110, 243, 202, 75, 84, 226, 170, 32, 3, 66, 89, 51, 172, 9, 29, 159, 31, 167, 148, 97, 93, 49, 44, 247, 166, 31, 94, 219, 199, 44, 240, 238, 8, 150, 79, 154, 116, 175, 101, 82, 136, 198, 57, 235, 134, 2, 86, 182, 82, 222, 152, 5, 166, 187, 53, 190, 242, 109, 68, 42, 78, 65, 97, 82, 78, 73, 6, 198, 13, 47, 171, 211, 250, 180, 22, 154, 54, 46, 57, 129, 240, 224, 215, 146, 57, 214, 238, 230, 163, 43, 58, 232, 130, 195, 163, 195, 156, 119, 36, 47, 72, 125, 165, 198, 253, 187, 71, 229, 69, 194, 204, 9, 109, 124, 123, 200, 57, 236, 36, 168, 176, 243, 114, 169, 231, 88, 11, 10, 153, 253, 112, 112, 88, 173, 121, 105, 8, 108, 191, 146, 86, 55, 219, 201, 117, 171, 3, 116, 242, 199, 233, 249, 203, 1, 91, 42, 83, 99, 89, 93, 54, 129, 215, 143, 77, 44, 211, 60, 154, 132, 117, 223, 16, 31, 91, 94, 148, 5, 63, 127, 119, 49, 62, 167, 77, 224, 103, 223, 250, 4, 116, 225, 115, 118, 216, 59, 174, 217, 132, 0, 216, 216, 75, 139, 136, 85, 82, 226, 253, 203, 54, 226, 232, 80, 251, 32, 66, 60, 78, 132, 96, 87, 26, 199, 196, 221, 9, 189, 245, 149, 128, 157, 195, 64, 226, 26, 156, 48, 206, 236, 151, 150, 212, 25, 83, 62, 125, 149, 143, 144, 75, 180, 237, 248, 40, 64, 180, 113, 202, 83, 145, 54, 18, 87, 109, 47, 75, 70, 51, 90, 235, 23, 123, 37, 3, 87, 241, 249, 127, 173, 107, 36, 163, 147, 229, 106, 2, 6, 154, 142, 157, 158, 84, 36, 131, 246, 22, 63, 151, 95, 61, 118, 37, 179, 93, 7, 229, 81, 130, 5, 50, 33, 153, 136, 121, 23, 168, 94, 156, 214, 253, 186, 164, 70, 200, 158, 142, 19, 45, 166, 229, 197, 1, 191, 136, 78, 76, 122, 113, 228, 80, 138, 92, 82, 72, 91, 50, 32, 241, 155, 185, 179, 152, 16, 75, 165, 245, 67, 29, 133, 176, 144, 43, 162, 26, 98, 66, 252, 35, 55, 84, 97, 87, 30, 189, 60, 225, 9, 68, 204, 249, 177, 193, 213, 64, 12, 44, 134, 207, 92, 104, 32, 194, 64, 160, 216, 142, 99, 182, 236, 167, 66, 242, 127, 35, 241, 216, 90, 101, 32, 173, 100, 16, 212, 74, 153, 192, 1, 15, 149, 208, 93, 125, 118, 54, 17, 250, 142, 177, 51, 119, 178, 161, 123, 226, 21, 99, 193, 216, 200, 65, 96, 120, 5, 229, 65, 81, 247, 121, 229, 6, 202, 113, 33, 110, 108, 94, 105, 206, 222, 156, 24, 73, 61, 57, 97, 201, 170, 145, 41, 205, 219, 26, 58, 46, 75, 179, 116, 224, 4, 6, 125, 233, 62, 63, 112, 248, 159, 134, 137, 127, 187, 109, 12, 239, 67, 122, 102, 11, 92, 197, 6, 163, 189, 107, 75, 59, 248, 40, 102, 50, 32, 226, 242, 220, 187, 144, 250, 161, 90, 121, 224, 101, 226, 94, 209, 194, 144, 206, 222, 69, 73, 148, 62, 88, 181, 223, 219, 149, 26, 191, 221, 97, 182, 244, 199, 32, 254, 7, 206, 13, 184, 49, 129, 222, 178, 176, 206, 252, 62, 212, 29, 18, 59, 134, 247, 189, 16, 60, 199, 199, 87, 31, 214, 70, 158, 95, 55, 159, 104, 240, 55, 129, 132, 200, 206, 75, 4, 51, 153, 29, 136, 160, 75, 135, 46, 24, 18, 2, 249, 214, 70, 32, 70, 200, 92, 69, 129, 50, 217, 78, 47, 226, 3, 186, 104, 172, 131, 91, 254, 77, 66, 146, 150, 117, 99, 134, 143, 220, 152, 96, 97, 153, 133, 54, 65, 142, 126, 206, 182, 217, 45, 41, 6, 97, 102, 85, 162, 136, 70, 191, 155, 20, 162, 57, 113, 69, 141, 245, 200, 34, 53, 42, 240, 24, 159, 3, 85, 230, 54, 100, 96, 195, 119, 211, 125, 8, 244, 186, 184, 175, 81, 169, 221, 2, 70, 251, 156, 136, 208, 195, 186, 52, 165, 171, 151, 138, 38, 100, 192, 46, 68, 72, 215, 182, 118, 59, 121, 67, 127, 34, 106, 45, 0, 101, 191, 69, 9, 215, 172, 28, 228, 64, 216, 55, 195, 148, 254, 85, 17, 226, 39, 95, 123, 26, 181, 69, 133, 130, 164, 12, 52, 120, 225, 208, 11, 231, 65, 7, 103, 203, 109, 242, 8, 200, 13, 80, 201, 106, 78, 124, 76, 177, 35, 117, 64, 143, 85, 75, 113, 43, 166, 61, 181, 181, 139, 214, 18, 63, 51, 176, 14, 164, 42, 222, 52, 116, 147, 44, 226, 177, 49, 97, 50, 219, 157, 181, 169, 171, 209, 19, 23, 162, 66, 175, 69, 216, 249, 7, 223, 100, 108, 239, 227, 1, 187, 96, 224, 182, 16, 255, 157, 129, 217, 241, 251, 212, 79, 227, 114, 152, 168, 38, 10, 180, 244, 98, 66, 158, 198, 232, 192, 197, 38, 230, 11, 37, 165, 111, 66, 88, 102, 8, 139, 166, 196, 41, 183, 200, 106, 71, 205, 208, 167, 144, 51, 205, 125, 65, 55, 157, 221, 171, 99, 118, 221, 237, 37, 78, 225, 110, 2, 53, 62, 143, 156, 46, 154, 217, 123, 19, 83, 102, 134, 68, 141, 186, 20, 149, 254, 188, 1, 230, 86, 233, 208, 136, 139, 2, 9, 135, 83, 119, 7, 119, 136, 111, 195, 166, 66, 7, 51, 59, 139, 251, 246, 190, 255, 233, 162, 161, 151, 119, 190, 6, 99, 51, 211, 29, 99, 252, 72, 65, 183, 5, 51, 200, 99, 9, 131, 117, 187, 115, 224, 36, 101, 99, 68, 79, 150, 50, 228, 27, 74, 11, 58, 65, 91, 190, 64, 45, 206, 26, 193, 148, 87, 145, 114, 45, 226, 186, 233, 86, 157, 221, 50, 124, 231, 167, 66, 14, 35, 150, 97, 48, 248, 125, 236, 146, 88, 190, 158, 178, 25, 150, 141, 119, 25, 176, 134, 14, 108, 208, 207, 237, 182, 123, 149, 114, 89, 222, 80, 58, 22, 106, 7, 129, 105, 252, 194, 75, 68, 219, 248, 30, 91, 83, 89, 225, 131, 190, 110, 229, 6, 220, 136, 77, 95, 9, 116, 217, 124, 226, 137, 127, 87, 217, 156, 170, 242, 51, 242, 162, 124, 233, 230, 7, 75, 98, 28, 143, 247, 253, 58, 105, 136, 73, 105, 232, 193, 120, 25, 31, 45, 130, 173, 186, 139, 28, 111, 227, 96, 9, 75, 42, 152, 147, 51, 132, 138, 120, 27, 34, 250, 48, 135, 71, 216, 52, 86, 16, 128, 65, 233, 76, 65, 201, 248, 215, 191, 235, 150, 32, 90, 115, 34, 165, 194, 136, 177, 185, 83, 244, 96, 60, 254, 179, 164, 76, 137, 10, 163, 98, 38, 205, 108, 28, 97, 161, 243, 130, 204, 108, 206, 43, 30, 238, 250, 218, 249, 9, 181, 166, 238, 185, 161, 230, 102, 227, 57, 70, 233, 138, 172, 37, 39, 208, 17, 196, 45, 114, 60, 221, 110, 9, 173, 105, 109, 111, 28, 85, 217, 146, 54, 156, 94, 109, 0, 166, 167, 51, 248, 175, 15, 68, 198, 58, 126, 191, 9, 157, 24, 102, 203, 122, 53, 39, 72, 121, 14, 70, 206, 218, 86, 171, 190, 132, 92, 207, 22, 241, 122, 211, 154, 27, 233, 172, 45, 243, 135, 251, 51, 153, 25, 251, 151, 213, 211, 57, 233, 146, 81, 93, 228, 150, 65, 163, 92, 56, 101, 192, 128, 246, 151, 159, 140, 212, 118, 64, 4, 207, 63, 234, 50, 74, 68, 125, 58, 174, 118, 209, 23, 149, 254, 204, 48, 139, 100, 128, 147, 128, 198, 177, 128, 58, 96, 112, 53, 145, 197, 89, 242, 171, 107, 23, 33, 56, 208, 205, 58, 147, 189, 18, 41, 109, 183, 250, 145, 217, 156, 161, 132, 80, 210, 164, 182, 80, 203, 109, 224, 215, 77, 11, 12, 160, 253, 103, 173, 207, 10, 147, 132, 93, 11, 86, 69, 115, 38, 100, 4, 205, 153, 80, 172, 111, 167, 201, 114, 98, 167, 162, 72, 79, 208, 213, 147, 126, 133, 101, 112, 220, 168, 170, 230, 195, 123, 122, 179, 89, 115, 113, 94, 115, 225, 56, 52, 24, 232, 82, 58, 142, 110, 98, 135, 215, 225, 20, 80, 6, 181, 160, 244, 92, 15, 97, 171, 215, 199, 70, 76, 24, 208, 47, 151, 180, 76, 87, 209, 61, 86, 139, 38, 203, 123, 240, 191, 223, 124, 211, 26, 12, 250, 8, 102, 51, 88, 44, 156, 197, 91, 110, 221, 61, 76, 19, 140, 129, 16, 137, 51, 19, 34, 73, 139, 181, 19, 49, 200, 235, 137, 172, 182, 144, 166, 33, 9, 94, 253, 77, 135, 69, 22, 200, 70, 219, 170, 167, 109, 47, 137, 35, 62, 43, 175, 255, 9, 82, 188, 32, 54, 75, 89, 0, 78, 191, 200, 250, 156, 241, 28, 91, 60, 20, 130, 47, 116, 204, 177, 186, 112, 196, 235, 80, 131, 84, 189, 250, 121, 162, 106, 112, 47, 66, 145, 203, 44, 79, 103, 28, 152, 150, 171, 104, 236, 67, 81, 188, 198, 242, 243, 11, 90, 185, 254, 119, 65, 13, 12, 68, 241, 116, 10, 77, 177, 152, 9, 204, 69, 251, 229, 119, 169, 65, 30, 44, 206, 49, 215, 161, 207, 36, 225, 12, 221, 31, 15, 131, 130, 107, 11, 86, 117, 141, 195, 119, 248, 87, 53, 177, 214, 171, 11, 133, 52, 99, 63, 85, 59, 52, 32, 238, 178, 127, 199, 191, 166, 254, 255, 196, 166, 101, 115, 13, 155, 203, 188, 97, 228, 239, 156, 14, 117, 100, 127, 211, 252, 57, 101, 39, 40, 89, 218, 253, 6, 90, 160, 246, 108, 25, 56, 104, 202, 222, 89, 183, 249, 119, 171, 163, 40, 121, 202, 123, 171, 5, 213, 178, 194, 218, 141, 126, 3, 199, 208, 218, 170, 156, 227, 208, 20, 18, 48, 0, 162, 134, 78, 5, 61, 176, 181, 51, 50, 32, 114, 10, 37, 226, 212, 162, 146, 115, 99, 117, 51, 196, 126, 255, 197, 175, 98, 251, 42, 47, 136, 46, 70, 142, 53, 207, 220, 247, 155, 100, 228, 185, 243, 74, 82, 177, 77, 1, 214, 161, 219, 56, 248, 4, 42, 247, 8, 106, 3, 131, 133, 66, 98, 132, 234, 65, 146, 222, 255, 70, 154, 74, 223, 95, 238, 3, 2, 136, 53, 37, 88, 7, 149, 143, 200, 253, 177, 29, 97, 235, 160, 169, 78, 194, 245, 234, 217, 84, 80, 31, 110, 132, 58, 194, 64, 181, 220, 42, 65, 50, 0, 93, 166, 46, 142, 95, 196, 96, 117, 54, 243, 83, 67, 41, 75, 147, 162, 141, 118, 119, 131, 83, 193, 138, 134, 84, 142, 129, 147, 250, 103, 136, 183, 227, 220, 222, 61, 154, 245, 42, 100, 13, 200, 171, 187, 108, 65, 205, 167, 233, 200, 131, 94, 136, 76, 126, 171, 36, 105, 231, 217, 240, 6, 25, 146, 56, 228, 61, 179, 178, 98, 182, 77, 247, 122, 202, 39, 58, 64, 82, 246, 52, 9, 141, 72, 155, 46, 241, 117, 209, 9, 199, 149, 123, 89, 188, 88, 108, 104, 129, 129, 44, 214, 170, 3, 96, 42, 186, 87, 58, 56, 32, 245, 126, 200, 157, 113, 58, 28, 65, 245, 251, 252, 247, 49, 196, 191, 108, 235, 85, 132, 105, 17, 192, 36, 88, 115, 116, 224, 250, 242, 73, 190, 134, 44, 68, 26, 82, 208, 37, 116, 58, 208, 214, 65, 131, 31, 184, 63, 152, 15, 168, 186, 5, 38, 179, 57, 246, 220, 189, 196, 14, 146, 65, 138, 67, 60, 70, 225, 208, 79, 41, 209, 178, 41, 47, 59, 203, 235, 12, 41, 161, 68, 208, 87, 162, 13, 32, 160, 232, 76, 155, 8, 154, 59, 191, 88, 162, 224, 28, 26, 118, 109, 207, 202, 169, 183, 23, 229, 8, 52, 150, 42, 3, 206, 86, 140, 80, 221, 222, 212, 129, 237, 5, 219, 231, 148, 33, 35, 25, 136, 82, 51, 165, 6, 55, 137, 143, 0, 160, 190, 239, 74, 78, 195, 93, 193, 254, 187, 218, 100, 194, 172, 153, 31, 252, 243, 157, 174, 194, 144, 133, 137, 59, 161, 48, 192, 153, 222, 247, 142, 116, 184, 131, 83, 20, 97, 190, 123, 73, 12, 73, 227, 201, 22, 233, 248, 14, 192, 255, 75, 248, 19, 54, 10, 165, 214, 130, 160, 46, 244, 60, 27, 205, 109, 203, 240, 24, 136, 209, 117, 127, 216, 201, 114, 61, 135, 97, 167, 111, 124, 191, 60, 26, 103, 37, 228, 212, 115, 209, 96, 25, 150, 166, 194, 150, 187, 168, 22, 120, 124, 244, 53, 216, 118, 91, 141, 155, 41, 199, 90, 71, 42, 240, 15, 148, 30, 165, 190, 53, 147, 184, 191, 201, 179, 112, 41, 159, 197, 184, 238, 10, 113, 96, 76, 135, 82, 243, 237, 169, 168, 16, 201, 27, 235, 133, 76, 118, 60, 246, 63, 163, 73, 73, 168, 78, 152, 46, 251, 135, 130, 170, 31, 117, 232, 0, 66, 168, 153, 229, 23, 92, 131, 195, 112, 66, 47, 82, 17, 6, 51, 162, 82, 116, 216, 36, 171, 177, 171, 188, 9, 179, 10, 149, 129, 65, 155, 100, 26, 85, 247, 246, 86, 234, 53, 196, 221, 167, 203, 148, 96, 10, 245, 173, 233, 95, 131, 23, 217, 94, 46, 211, 24, 234, 238, 219, 115, 146, 49, 111, 82, 127, 77, 208, 146, 165, 109, 175, 11, 153, 174, 210, 240, 87, 83, 123, 195, 155, 220, 122, 10, 83, 73, 41, 147, 184, 212, 242, 197, 93, 199, 34, 128, 0, 49, 124, 25, 176, 76, 170, 104, 200, 4, 53, 58, 104, 127, 191, 108, 65, 104, 57, 178, 96, 236, 44, 152, 160, 234, 156, 68, 236, 135, 103, 127, 131, 209, 28, 231, 82, 36, 161, 85, 85, 11, 143, 56, 115, 60, 9, 195, 44, 65, 75, 134, 164, 174, 130, 143, 212, 207, 19, 120, 182, 168, 211, 44, 98, 190, 143, 155, 249, 182, 235, 212, 1, 132, 189, 26, 83, 101, 91, 73, 48, 120, 192, 162, 220, 195, 96, 13, 208, 90, 15, 227, 152, 176, 210, 53, 10, 90, 107, 16, 175, 107, 121, 231, 209, 15, 125, 253, 132, 158, 225, 209, 52, 198, 20, 92, 64, 56, 234, 156, 6, 61, 15, 123, 136, 127, 91, 203, 97, 168, 142, 190, 166, 114, 121, 242, 17, 254, 212, 56, 186, 47, 206, 112, 234, 69, 15, 240, 95, 163, 77, 210, 254, 137, 250, 212, 123, 218, 71, 242, 173, 167, 142, 26, 80, 217, 172, 139, 109, 114, 123, 225, 187, 50, 228, 217, 118, 59, 87, 172, 41, 122, 108, 204, 28, 117, 166, 232, 190, 61, 247, 102, 124, 94, 228, 121, 142, 141, 173, 162, 55, 227, 235, 167, 109, 216, 42, 50, 84, 13, 205, 251, 161, 194, 120, 53, 76, 1, 48, 223, 114, 55, 57, 154, 63, 142, 54, 95, 118, 114, 237, 125, 156, 4, 133, 234, 138, 85, 253, 81, 155, 187, 165, 178, 128, 3, 216, 205, 44, 223, 166, 153, 105, 138, 199, 196, 44, 233, 116, 160, 204, 100, 109, 216, 70, 87, 97, 163, 172, 228, 208, 221, 179, 23, 251, 202, 11, 44, 245, 225, 210, 162, 139, 93, 144, 248, 137, 152, 24, 113, 101, 101, 104, 148, 240, 52, 1, 112, 91, 98, 142, 235, 127, 26, 1, 118, 246, 57, 100, 179, 19, 179, 231, 197, 71, 111, 210, 50, 153, 175, 247, 208, 234, 71, 78, 45, 110, 237, 196, 36, 64, 178, 129, 27, 8, 47, 126, 17, 169, 176, 219, 158, 226, 133, 14, 76, 131, 55, 49, 0, 186, 140, 72, 158, 187, 80, 227, 163, 114, 107, 146, 22, 49, 170, 215, 32, 202, 67, 119, 47, 20, 134, 80, 205, 169, 51, 193, 63, 27, 132, 134, 8, 104, 76, 120, 232, 111, 222, 29, 72, 95, 212, 30, 39, 183, 199, 176, 51, 255, 36, 231, 182, 140, 75, 35, 211, 200, 247, 179, 97, 71, 146, 192, 151, 102, 236, 34, 53, 191, 247, 192, 45, 38, 119, 105, 91, 90, 168, 167, 162, 104, 50, 158, 50, 142, 101, 148, 13, 184, 19, 99, 197, 85, 213, 97, 58, 150, 145, 239, 34, 194, 14, 62, 221, 49, 65, 118, 84, 231, 209, 199, 237, 97, 200, 191, 212, 229, 16, 48, 28, 13, 55, 228, 124, 197, 175, 30, 203, 190, 181, 96, 124, 41, 19, 4, 91, 253, 58, 186, 147, 136, 44, 83, 136, 179, 8, 150, 198, 187, 130, 50, 64, 41, 135, 38, 106, 78, 250, 40, 247, 74, 158, 71, 199, 249, 11, 214, 177, 197, 127, 75, 110, 95, 64, 125, 238, 159, 102, 227, 24, 170, 224, 252, 130, 4, 242, 21, 197, 145, 189, 59, 222, 56, 220, 232, 80, 125, 130, 136, 65, 106, 148, 74, 44, 254, 105, 144, 109, 174, 14, 72, 186, 242, 161, 249, 83, 236, 85, 47, 247, 239, 178, 78, 170, 241, 170, 72, 205, 105, 29, 39, 196, 214, 173, 226, 148, 160, 109, 53, 130, 103, 20, 229, 2, 101, 253, 166, 131, 208, 193, 2, 224, 230, 213, 158, 151, 200, 89, 214, 95, 97, 168, 122, 102, 124, 136, 23, 226, 148, 115, 221, 184, 210, 175, 85, 70, 105, 139, 65, 128, 245, 193, 131, 133, 205, 169, 165, 174, 8, 17, 101, 221, 20, 130, 90, 206, 81, 85, 248, 238, 255, 110, 125, 176, 68, 238, 220, 81, 85, 111, 241, 17, 143, 86, 125, 238, 75, 243, 18, 90, 121, 39, 60, 191, 113, 176, 207, 16, 37, 98, 177, 125, 124, 107, 144, 33, 150, 187, 240, 162, 124, 122, 32, 208, 14, 127, 148, 204, 251, 141, 20, 208, 128, 6, 241, 144, 159, 145, 226, 203, 255, 48, 15, 88, 197, 224, 200, 130, 142, 228, 222, 238, 127, 24, 200, 78, 48, 106, 20, 128, 250, 232, 127, 179, 130, 148, 94, 90, 42, 170, 166, 193, 150, 83, 42, 43, 90, 208, 151, 21, 207, 198, 199, 229, 196, 164, 249, 207, 0, 198, 159, 6, 40, 192, 222, 52, 203, 180, 194, 138, 140, 149, 73, 7, 196, 187, 163, 206, 141, 253, 152, 115, 126, 140, 117, 247, 227, 133, 238, 215, 160, 102, 141, 200, 17, 233, 52, 69, 254, 190, 238, 27, 193, 181, 26, 35, 106, 144, 227, 140, 112, 148, 91, 201, 23, 155, 169, 99, 152, 132, 109, 145, 32, 190, 156, 118, 168, 237, 103, 28, 117, 111, 18, 41, 255, 120, 105, 229, 11, 22, 164, 29, 214, 250, 42, 110, 158, 181, 127, 120, 65, 7, 231, 219, 47, 3, 54, 123, 34, 174, 157, 175, 159, 37, 215, 70, 49, 35, 181, 196, 18, 208, 95, 244, 214, 184, 117, 62, 53, 147, 117, 155, 151, 0, 10, 5, 75, 61, 69, 175, 110, 221, 76, 241, 6, 123, 184, 239, 109, 116, 177, 85, 73, 150, 75, 6, 25, 205, 208, 183, 13, 134, 243, 215, 22, 181, 212, 142, 112, 111, 120, 222, 150, 64, 235, 5, 122, 136, 96, 90, 55, 22, 235, 132, 131, 49, 231, 122, 175, 145, 9, 202, 202, 44, 160, 162, 80, 124, 82, 19, 30, 16, 67, 119, 79, 51, 176, 29, 169, 112, 172, 213, 231, 187, 24, 62, 186, 63, 242, 39, 77, 176, 144, 123, 250, 86, 13, 188, 151, 221, 38, 134, 42, 169, 96, 61, 31, 183, 143, 97, 238, 211, 101, 193, 12, 71, 249, 200, 62, 177, 61, 186, 106, 146, 59, 0, 40, 209, 71, 135, 161, 219, 128, 9, 24, 122, 191, 232, 80, 111, 12, 0, 21, 70, 91, 65, 210, 152, 98, 145, 46, 184, 110, 128, 20, 24, 173, 102, 42, 186, 38, 73, 47, 252, 66, 125, 164, 202, 160, 165, 236, 67, 200, 222, 140, 45, 55, 250, 207, 173, 48, 96, 237, 14, 48, 232, 190, 7, 1, 34, 93, 123, 19, 11, 208, 169, 49, 122, 96, 19, 32, 138, 159, 178, 91, 150, 87, 15, 2, 141, 137, 177, 105, 6, 195, 85, 223, 206, 0, 76, 202, 195, 210, 195, 116, 91, 31, 229, 37, 39, 249, 88, 82, 191, 13, 97, 251, 214, 59, 231, 232, 140, 67, 233, 122, 51, 52, 63, 2, 230, 120, 158, 48, 251, 15, 42, 104, 14, 206, 193, 201, 32, 243, 202, 234, 86, 228, 235, 174, 157, 45, 34, 87, 39, 121, 142, 205, 161, 63, 117, 45, 228, 178, 41, 47, 212, 222, 223, 79, 140, 52, 166, 72, 47, 94, 7, 19, 211, 164, 147, 167, 208, 134, 210, 207, 37, 207, 215, 225, 253, 133, 204, 70, 127, 144, 142, 54, 54, 44, 145, 222, 118, 38, 103, 196, 104, 4, 107, 0, 70, 198, 84, 127, 68, 32, 7, 203, 109, 154, 134, 179, 129, 121, 161, 103, 27, 8, 239, 190, 250, 59, 7, 198, 253, 126, 166, 157, 144, 184, 88, 211, 49, 238, 244, 243, 225, 133, 204, 235, 120, 36, 232, 103, 195, 89, 218, 62, 111, 121, 170, 45, 37, 161, 251, 194, 36, 199, 245, 35, 235, 90, 9, 114, 35, 24, 211, 119, 175, 77, 140, 154, 129, 69, 49, 166, 18, 89, 197, 23, 84, 45, 26, 20, 36, 197, 159, 48, 0, 135, 64, 166, 29, 53, 169, 243, 199, 136, 203, 6, 217, 114, 154, 177, 168, 181, 6, 219, 42, 211, 29, 150, 150, 22, 99, 104, 218, 191, 236, 43, 83, 125, 198, 56, 227, 91, 33, 81, 167, 139, 85, 123, 160, 143, 196, 97, 232, 231, 241, 51, 14, 99, 106, 220, 231, 78, 178, 231, 118, 138, 149, 27, 201, 48, 126, 226, 145, 183, 250, 8, 74, 252, 52, 247, 66, 70, 51, 244, 42, 123, 182, 108, 96, 188, 9, 30, 56, 29, 14, 63, 163, 24, 87, 69, 135, 205, 124, 46, 240, 109, 158, 242, 253, 212, 109, 62, 236, 241, 228, 239, 92, 93, 109, 208, 39, 238, 36, 50, 211, 93, 25, 136, 239, 23, 30, 55, 149, 142, 125, 128, 61, 217, 31, 252, 138, 110, 93, 93, 203, 21, 239, 212, 226, 214, 10, 119, 53, 60, 220, 204, 177, 141, 247, 73, 219, 215, 70, 23, 186, 236, 5, 230, 233, 51, 164, 101, 208, 27, 219, 87, 245, 242, 41, 59, 39, 213, 202, 240, 176, 35, 179, 164, 213, 173, 142, 4, 3, 179, 115, 19, 153, 87, 117, 144, 20, 23, 31, 241, 21, 57, 187, 242, 125, 51, 160, 143, 36, 163, 44, 135, 62, 192, 156, 43, 102, 246, 187, 176, 141, 132, 13, 224, 45, 161, 117, 77, 233, 21, 202, 81, 189, 181, 138, 168, 52, 137, 78, 209, 153, 166, 175, 87, 34, 152, 154, 25, 53, 102, 177, 131, 170, 141, 65, 242, 139, 179, 71, 240, 166, 251, 216, 59, 223, 154, 24, 26, 236, 4, 146, 10, 53, 230, 154, 43, 146, 234, 146, 18, 200, 86, 77, 68, 91, 35, 188, 48, 69, 65, 32, 22, 231, 121, 227, 75, 183, 156, 166, 104, 74, 37, 8, 100, 118, 89, 52, 166, 80, 169, 76, 167, 226, 50, 195, 13, 148, 124, 123, 77, 9, 182, 214, 156, 110, 85, 36, 49, 39, 51, 239, 149, 22, 247, 149, 50, 76, 220, 60, 176, 13, 61, 146, 73, 38, 9, 62, 9, 182, 168, 112, 8, 105, 148, 40, 4, 178, 209, 169, 101, 90, 209, 43, 201, 222, 233, 104, 142, 121, 131, 158, 51, 240, 232, 51, 38, 215, 195, 104, 226, 152, 200, 120, 25, 112, 92, 233, 99, 41, 149, 95, 7, 23, 214, 147, 41, 59, 59, 161, 88, 1, 207, 117, 85, 12, 245, 182, 205, 29, 121, 237, 222, 142, 42, 117, 113, 250, 212, 12, 185, 192, 21, 222, 109, 177, 112, 112, 196, 184, 247, 153, 61, 207, 162, 93, 226, 189, 173, 46, 163, 34, 37, 160, 20, 158, 99, 156, 222, 17, 216, 109, 195, 133, 183, 210, 142, 30, 7, 245, 173, 240, 221, 176, 131, 251, 217, 207, 142, 2, 3, 94, 113, 173, 48, 25, 121, 197, 60, 1, 225, 96, 15, 126, 63, 248, 24, 175, 231, 76, 131, 58, 62, 61, 210, 188, 161, 51, 197, 71, 68, 190, 244, 205, 109, 183, 168, 89, 160, 240, 54, 238, 250, 239, 208, 58, 206, 133, 131, 129, 43, 168, 144, 56, 7, 183, 178, 188, 150, 221, 71, 213, 91, 125, 141, 113, 180, 137, 39, 22, 82, 3, 166, 197, 180, 171, 71, 240, 86, 15, 161, 176, 88, 247, 237, 203, 123, 187, 186, 47, 177, 231, 107, 39, 36, 255, 230, 15, 112, 133, 116, 45, 124, 73, 129, 142, 195, 8, 54, 206, 231, 194, 143, 94, 97, 121, 251, 192, 254, 180, 134, 103, 72, 82, 81, 196, 80, 251, 193, 131, 47, 242, 35, 215, 47, 134, 17, 83, 214, 85, 182, 170, 5, 45, 209, 102, 218, 9, 156, 248, 239, 163, 99, 223, 125, 188, 27, 126, 140, 195, 43, 238, 49, 74, 64, 226, 69, 101, 60, 112, 49, 40, 212, 152, 43, 184, 60, 102, 168, 123, 126, 19, 29, 50, 96, 194, 11, 119, 104, 39, 54, 242, 178, 15, 200, 226, 65, 12, 225, 51, 111, 188, 107, 149, 237, 51, 9, 58, 217, 122, 217, 84, 165, 87, 123, 128, 150, 51, 3, 91, 158, 44, 252, 152, 219, 203, 255, 200, 186, 63, 209, 158, 225, 155, 217, 40, 1, 200, 58, 146, 250, 120, 200, 240, 84, 52, 163, 151, 6, 228, 151, 57, 168, 184, 99, 206, 89, 20, 58, 136, 25, 70, 117, 115, 31, 131, 46, 174, 182, 92, 208, 43, 142, 19, 208, 211, 101, 4, 228, 39, 23, 55, 17, 33, 43, 28, 57, 111, 49, 230, 78, 79, 105, 165, 8, 217, 12, 76, 201, 184, 122, 118, 255, 120, 25, 119, 40, 107, 184, 172, 26, 160, 237, 81, 201, 226, 235, 211, 39, 37, 200, 166, 115, 62, 160, 84, 2, 33, 185, 6, 102, 27, 196, 66, 40, 198, 214, 140, 125, 42, 0, 170, 183, 151, 59, 170, 4, 127, 89, 176, 3, 250, 27, 227, 170, 168, 181, 218, 157, 64, 226, 197, 113, 43, 89, 99, 27, 93, 202, 77, 39, 163, 10, 187, 25, 20, 104, 19, 220, 79, 167, 117, 39, 246, 210, 4, 200, 136, 128, 88, 201, 115, 113, 62, 254, 136, 51, 179, 127, 70, 171, 158, 108, 60, 153, 171, 113, 209, 233, 57, 15, 147, 192, 236, 205, 203, 192, 218, 15, 59, 9, 155, 209, 184, 95, 203, 192, 3, 30, 111, 85, 43, 200, 11, 204, 148, 152, 27, 157, 167, 198, 181, 34, 138, 197, 229, 13, 226, 109, 158, 1, 36, 197, 17, 231, 131, 59, 131, 44, 30, 30, 88, 110, 49, 248, 236, 11, 29, 73, 100, 203, 100, 228, 57, 89, 66, 58, 139, 253, 108, 209, 91, 0, 159, 71, 11, 158, 25, 122, 147, 218, 149, 95, 224, 238, 156, 248, 144, 111, 128, 53, 100, 148, 59, 164, 95, 183, 30, 112, 1, 153, 5, 9, 87, 213, 60, 154, 98, 98, 9, 12, 30, 91, 236, 20, 104, 0, 236, 240, 83, 38, 209, 127, 223, 86, 227, 128, 45, 226, 168, 85, 177, 184, 32, 253, 80, 227, 14, 31, 253, 117, 99, 103, 164, 108, 7, 51, 64, 223, 17, 233, 241, 134, 161, 142, 166, 160, 250, 212, 143, 154, 85, 72, 98, 175, 145, 190, 53, 153, 169, 174, 153, 254, 149, 75, 176, 70, 10, 6, 34, 192, 72, 123, 133, 184, 132, 99, 209, 219, 154, 110, 123, 132, 155, 74, 34, 98, 76, 66, 17, 110, 35, 3, 124, 200, 196, 194, 91, 104, 123, 122, 109, 249, 172, 45, 108, 54, 90, 74, 247, 250, 33, 192, 250, 28, 248, 222, 9, 118, 47, 41, 65, 135, 213, 97, 14, 82, 224, 65, 123, 115, 155, 170, 35, 155, 141, 209, 87, 238, 43, 68, 135, 209, 139, 216, 23, 86, 244, 81, 44, 101, 190, 82, 180, 67, 175, 131, 235, 247, 49, 205, 225, 111, 11, 53, 60, 227, 218, 172, 1, 72, 21, 62, 64, 142, 235, 4, 78, 1, 67, 124, 169, 80, 22, 255, 33, 55, 116, 198, 145, 245, 199, 212, 15, 22, 220, 125, 226, 35, 199, 188, 22, 82, 178, 112, 217, 83, 99, 136, 97, 77, 14, 154, 107, 250, 118, 177, 41, 171, 142, 218, 31, 63, 85, 125, 196, 132, 63, 138, 169, 206, 190, 138, 115, 23, 122, 144, 244, 181, 227, 147, 163, 25, 27, 148, 223, 102, 198, 114, 45, 3, 207, 26, 57, 77, 222, 219, 18, 234, 41, 190, 96, 166, 116, 235, 16, 70, 212, 19, 109, 78, 37, 212, 131, 103, 181, 173, 75, 245, 30, 168, 24, 255, 8, 69, 207, 248, 19, 202, 239, 136, 105, 169, 174, 207, 170, 151, 64, 194, 163, 166, 116, 180, 242, 207, 228, 78, 66, 17, 205, 40, 118, 237, 34, 15, 88, 92, 178, 23, 4, 82, 115, 238, 58, 139, 187, 118, 148, 128, 85, 10, 231, 185, 51, 116, 101, 235, 3, 128, 240, 112, 153, 20, 202, 118, 0, 43, 13, 164, 155, 190, 73, 34, 80, 27, 108, 78, 141, 215, 224, 205, 15, 30, 202, 105, 56, 132, 245, 222, 199, 15, 226, 50, 51, 102, 14, 245, 199, 63, 174, 132, 169, 94, 128, 126, 168, 88, 210, 219, 61, 131, 124, 133, 36, 82, 177, 4, 148, 178, 31, 125, 159, 79, 253, 28, 186, 241, 170, 5, 197, 127, 78, 122, 9, 136, 167, 236, 93, 18, 32, 113, 18, 224, 172, 122, 153, 241, 42, 100, 154, 70, 254, 41, 156, 77, 3, 46, 86, 80, 62, 17, 60, 120, 178, 81, 13, 205, 49, 128, 174, 84, 5, 184, 79, 126, 126, 205, 112, 195, 111, 205, 179, 84, 181, 142, 97, 184, 154, 19, 41, 47, 139, 187, 201, 20, 195, 102, 43, 226, 25, 110, 179, 132, 242, 53, 164, 196, 138, 4, 158, 127, 173, 244, 64, 217, 202, 245, 228, 222, 182, 74, 202, 146, 71, 142, 193, 149, 52, 159, 73, 186, 92, 3, 85, 249, 171, 96, 170, 120, 145, 16, 112, 136, 39, 216, 5, 138, 149, 245, 225, 97, 46, 195, 41, 151, 65, 141, 97, 106, 157, 24, 17, 26, 212, 77, 72, 136, 216, 239, 34, 63, 104, 245, 193, 79, 78, 116, 96, 117, 156, 187, 126, 143, 55, 29, 42, 45, 61, 147, 252, 127, 250, 192, 156, 89, 246, 42, 207, 240, 104, 241, 112, 239, 231, 28, 52, 169, 207, 27, 228, 241, 137, 234, 189, 105, 180, 140, 109, 234, 171, 45, 25, 192, 146, 64, 18, 192, 197, 118, 0, 123, 205, 18, 130, 210, 172, 100, 40, 174, 219, 160, 240, 165, 34, 10, 46, 253, 46, 56, 199, 124, 204, 152, 14, 101, 91, 74, 218, 212, 74, 41, 198, 165, 211, 45, 100, 0, 211, 231, 95, 49, 151, 68, 123, 176, 183, 114, 1, 165, 191, 110, 124, 110, 117, 229, 195, 192, 118, 51, 199, 170, 14, 127, 247, 92, 253, 137, 12, 63, 180, 82, 103, 246, 143, 177, 58, 208, 245, 134, 216, 202, 71, 10, 31, 151, 100, 127, 126, 229, 216, 69, 228, 141, 5, 235, 141, 225, 81, 226, 106, 238, 202, 158, 41, 188, 51, 61, 24, 169, 150, 35, 244, 82, 80, 58, 77, 40, 71, 49, 50, 158, 176, 207, 199, 216, 165, 144, 252, 64, 140, 140, 87, 165, 182, 6, 196, 146, 39, 121, 106, 191, 202, 52, 147, 74, 134, 67, 201, 34, 255, 217, 40, 98, 92, 154, 21, 203, 144, 66, 113, 101, 249, 115, 71, 170, 205, 30, 114, 217, 90, 166, 45, 85, 4, 54, 156, 183, 250, 11, 31, 189, 171, 53, 224, 122, 96, 63, 135, 88, 126, 113, 248, 108, 203, 17, 59, 240, 54, 248, 222, 178, 64, 250, 112, 202, 155, 116, 215, 141, 0, 218, 170, 246, 4, 113, 225, 161, 12, 87, 47, 42, 156, 235, 236, 100, 99, 20, 69, 179, 241, 190, 222, 241, 126, 107, 165, 78, 250, 193, 123, 1, 216, 218, 79, 204, 233, 104, 186, 77, 239, 106, 224, 204, 115, 20, 65, 73, 181, 156, 80, 121, 16, 201, 56, 209, 95, 183, 161, 95, 202, 126, 193, 112, 211, 170, 36, 44, 198, 100, 10, 119, 14, 188, 195, 253, 191, 95, 183, 254, 98, 75, 45, 246, 56, 122, 134, 232, 51, 109, 1, 235, 125, 64, 59, 202, 142, 159, 192, 133, 208, 24, 91, 229, 230, 18, 209, 85, 10, 26, 42, 97, 241, 201, 103, 154, 116, 186, 212, 215, 105, 50, 221, 114, 29, 95, 73, 189, 221, 199, 188, 1, 229, 26, 89, 92, 87, 27, 42, 43, 121, 189, 211, 114, 49, 125, 241, 143, 30, 228, 166, 31, 208, 238, 110, 165, 141, 48, 123, 124, 156, 69, 33, 66, 79, 14, 8, 31, 215, 30, 132, 102, 115, 250, 170, 87, 28, 110, 50, 89, 185, 213, 131, 212, 52, 190, 166, 0, 160, 253, 221, 178, 173, 209, 119, 169, 216, 97, 227, 4, 36, 63, 119, 163, 100, 73, 145, 163, 18, 131, 19, 211, 136, 108, 17, 25, 39, 150, 116, 150, 171, 48, 209, 128, 213, 90, 140, 61, 17, 183, 236, 18, 173, 163, 97, 220, 4, 144, 158, 143, 82, 44, 16, 191, 105, 185, 63, 48, 44, 167, 228, 79, 157, 68, 87, 171, 215, 49, 16, 13, 70, 32, 177, 149, 230, 133, 223, 179, 236, 66, 56, 130, 148, 32, 48, 243, 105, 201, 90, 223, 47, 114, 42, 50, 72, 21, 102, 103, 212, 232, 229, 233, 219, 122, 247, 173, 86, 218, 218, 128, 222, 173, 248, 215, 76, 134, 114, 220, 183, 82, 250, 78, 159, 133, 240, 79, 116, 59, 29, 6, 102, 77, 93, 148, 234, 192, 145, 9, 156, 153, 138, 34, 209, 55, 116, 110, 210, 173, 33, 246, 18, 106, 194, 175, 21, 213, 97, 213, 0, 141, 65, 130, 243, 24, 115, 239, 244, 164, 12, 25, 130, 129, 174, 25, 221, 155, 239, 245, 161, 150, 32, 31, 190, 119, 29, 244, 39, 133, 78, 248, 253, 157, 197, 14, 50, 152, 40, 246, 90, 217, 215, 194, 54, 46, 16, 43, 28, 183, 105, 140, 9, 75, 75, 152, 28, 242, 22, 57, 93, 120, 100, 91, 25, 249, 96, 98, 234, 176, 237, 224, 58, 157, 142, 193, 222, 183, 17, 3, 81, 54, 71, 200, 194, 48, 56, 127, 66, 68, 15, 31, 82, 198, 68, 209, 136, 255, 4, 88, 10, 14, 67, 213, 149, 160, 73, 179, 113, 93, 52, 110, 124, 18, 201, 60, 125, 142, 195, 1, 38, 80, 1, 135, 209, 168, 141, 117, 225, 55, 171, 195, 168, 124, 226, 71, 136, 29, 95, 232, 153, 143, 68, 131, 196, 86, 126, 19, 184, 228, 125, 102, 45, 24, 108, 126, 136, 36, 241, 203, 249, 170, 100, 102, 218, 1, 204, 182, 237, 76, 21, 59, 46, 214, 101, 121, 252, 114, 222, 0, 60, 17, 168, 74, 57, 80, 246, 157, 126, 119, 116, 100, 62, 77, 176, 210, 122, 233, 101, 13, 176, 234, 25, 197, 59, 144, 35, 153, 191, 201, 54, 41, 207, 3, 83, 233, 62, 218, 137, 58, 153, 112, 127, 123, 96, 89, 186, 212, 195, 181, 194, 155, 89, 226, 164, 45, 112, 50, 187, 149, 137, 240, 202, 195, 204, 215, 162, 156, 20, 172, 218, 23, 159, 9, 55, 4, 31, 59, 100, 69, 110, 86, 94, 41, 252, 168, 249, 155, 35, 24, 63, 114, 1, 185, 203, 67, 79, 168, 157, 12, 191, 26, 99, 71, 130, 208, 73, 211, 147, 10, 201, 30, 193, 137, 236, 18, 214, 50, 33, 70, 240, 235, 104, 168, 165, 2, 97, 153, 242, 152, 37, 252, 79, 119, 252, 194, 65, 83, 100, 240, 78, 89, 196, 36, 127, 223, 48, 101, 186, 61, 114, 10, 96, 169, 172, 146, 252, 124, 208, 6, 233, 71, 246, 84, 96, 130, 199, 122, 206, 186, 23, 253, 255, 109, 34, 91, 137, 175, 235, 221, 87, 247, 33, 182, 137, 154, 227, 55, 217, 168, 81, 233, 60, 240, 111, 10, 210, 112, 241, 155, 99, 154, 148, 202, 69, 179, 148, 158, 75, 252, 165, 255, 109, 133, 131, 166, 116, 59, 148, 231, 187, 131, 210, 82, 72, 76, 158, 197, 173, 0, 109, 171, 156, 14, 19, 222, 45, 169, 165, 234, 174, 142, 55, 13, 238, 102, 130, 78, 86, 25, 240, 116, 210, 110, 7, 122, 232, 94, 53, 108, 94, 6, 106, 161, 117, 111, 19, 121, 246, 177, 26, 41, 7, 99, 161, 22, 221, 163, 215, 71, 225, 167, 96, 147, 118, 4, 127, 219, 242, 199, 137, 66, 106, 151, 206, 241, 173, 244, 100, 44, 238, 25, 36, 39, 124, 56, 167, 199, 251, 111, 55, 97, 230, 183, 214, 50, 99, 216, 0, 163, 116, 49, 173, 188, 153, 84, 128, 100, 15, 140, 63, 251, 153, 212, 100, 207, 124, 8, 250, 178, 191, 228, 220, 42, 19, 2, 128, 238, 194, 218, 25, 104, 132, 101, 206, 209, 255, 96, 152, 219, 214, 216, 168, 162, 226, 98, 0, 203, 153, 112, 224, 171, 96, 88, 116, 225, 125, 214, 182, 109, 134, 92, 28, 142, 18, 137, 35, 78, 186, 51, 184, 71, 1, 7, 147, 151, 221, 1, 56, 64, 7, 61, 154, 6, 139, 187, 92, 116, 104, 242, 172, 8, 196, 78, 100, 177, 15, 157, 101, 44, 140, 248, 75, 59, 227, 87, 62, 160, 113, 163, 50, 181, 24, 206, 108, 83, 175, 190, 4, 99, 171, 102, 3, 227, 231, 8, 105, 157, 35, 157, 113, 180, 241, 47, 97, 191, 220, 47, 52, 90, 255, 238, 136, 243, 59, 22, 129, 191, 205, 60, 222, 169, 244, 200, 204, 104, 223, 93, 1, 250, 231, 189, 211, 74, 233, 195, 104, 209, 231, 134, 157, 75, 119, 172, 69, 6, 59, 104, 29, 167, 118, 144, 89, 0, 205, 194, 179, 11, 171, 191, 163, 236, 48, 178, 201, 47, 81, 46, 240, 160, 244, 116, 29, 140, 115, 3, 119, 252, 163, 170, 46, 86, 234, 203, 1, 7, 35, 116, 118, 66, 119, 136, 154, 73, 132, 125, 13, 33, 185, 150, 242, 172, 135, 245, 141, 228, 40, 4, 179, 66, 27, 67, 138, 247, 170, 166, 61, 231, 52, 162, 225, 148, 137, 135, 160, 27, 252, 160, 238, 8, 130, 131, 112, 48, 118, 63, 214, 243, 4, 159, 104, 247, 219, 67, 77, 188, 213, 38, 178, 16, 16, 4, 184, 116, 170, 10, 214, 42, 8, 222, 112, 32, 92, 83, 246, 161, 36, 39, 23, 80, 231, 1, 48, 93, 72, 97, 94, 195, 255, 3, 150, 197, 111, 136, 108, 199, 142, 51, 69, 198, 176, 221, 190, 90, 60, 219, 212, 117, 197, 247, 109, 97, 112, 92, 15, 118, 210, 142, 11, 175, 62, 153, 28, 34, 162, 171, 36, 26, 98, 28, 185, 92, 35, 252, 185, 153, 222, 116, 153, 60, 156, 87, 216, 166, 13, 158, 175, 144, 251, 142, 27, 145, 218, 58, 122, 132, 68, 35, 85, 84, 254, 220, 149, 13, 14, 47, 21, 152, 173, 241, 15, 205, 124, 220, 117, 23, 202, 200, 11, 128, 107, 43, 86, 84, 84, 141, 189, 201, 133, 2, 190, 182, 72, 208, 143, 134, 117, 22, 57, 205, 198, 66, 236, 32, 114, 22, 60, 152, 110, 91, 248, 109, 101, 3, 51, 144, 63, 112, 254, 203, 91, 16, 230, 13, 60, 35, 215, 65, 26, 12, 139, 132, 187, 99, 168, 23, 7, 165, 23, 105, 61, 103, 210, 40, 92, 62, 162, 167, 129, 190, 129, 1, 232, 95, 109, 52, 115, 20, 18, 204, 138, 99, 231, 78, 237, 92, 127, 247, 50, 73, 26, 31, 255, 63, 28, 34, 119, 181, 63, 120, 176, 179, 118, 106, 12, 218, 45, 13, 105, 143, 31, 176, 163, 71, 218, 160, 18, 212, 12, 161, 244, 212, 229, 23, 29, 155, 227, 162, 118, 224, 52, 52, 32, 104, 54, 214, 30, 87, 0, 188, 14, 86, 240, 152, 12, 193, 31, 21, 231, 21, 16, 50, 134, 195, 243, 183, 47, 58, 119, 153, 133, 126, 159, 20, 32, 185, 40, 160, 48, 186, 19, 218, 86, 25, 220, 186, 45, 170, 79, 16, 187, 132, 110, 184, 191, 64, 198, 97, 6, 236, 56, 155, 222, 28, 138, 168, 217, 199, 104, 136, 159, 229, 205, 94, 184, 202, 32, 10, 210, 202, 40, 61, 41, 217, 180, 238, 42, 135, 83, 58, 148, 188, 241, 191, 95, 127, 161, 193, 45, 143, 241, 101, 71, 148, 177, 158, 118, 47, 14, 253, 49, 110, 74, 4, 124, 92, 229, 160, 58, 30, 18, 13, 55, 20, 13, 73, 176, 233, 165, 237, 82, 247, 238, 101, 119, 115, 255, 155, 44, 8, 35, 253, 149, 56, 90, 45, 88, 128, 28, 114, 95, 114, 237, 12, 33, 105, 114, 100, 9, 101, 22, 76, 151, 38, 216, 74, 245, 215, 23, 19, 66, 31, 3, 150, 135, 116, 107, 90, 232, 247, 81, 142, 243, 5, 25, 21, 84, 238, 0, 191, 82, 186, 244, 252, 77, 104, 231, 128, 60, 171, 37, 61, 17, 3, 160, 141, 165, 193, 131, 30, 16, 180, 236, 79, 109, 169, 194, 86, 41, 192, 127, 172, 191, 42, 20, 180, 102, 159, 34, 142, 176, 164, 218, 255, 121, 81, 72, 231, 110, 144, 9, 64, 244, 154, 198, 166, 31, 229, 166, 24, 137, 196, 183, 119, 167, 194, 37, 196, 21, 239, 53, 174, 176, 205, 144, 93, 121, 200, 13, 102, 154, 152, 31, 182, 190, 195, 169, 209, 40, 1, 145, 47, 74, 193, 108, 169, 7, 2, 164, 159, 41, 10, 146, 39, 215, 242, 43, 244, 51, 90, 166, 255, 138, 10, 5, 47, 164, 125, 59, 36, 134, 147, 218, 180, 107, 37, 117, 244, 36, 105, 158, 108, 147, 144, 155, 104, 237, 234, 140, 212, 240, 93, 36, 170, 155, 129, 150, 219, 54, 247, 253, 200, 83, 180, 243, 159, 0, 5, 177, 65, 160, 120, 62, 153, 202, 185, 142, 153, 8, 103, 244, 128, 139, 22, 208, 27, 226, 171, 63, 197, 36, 220, 19, 119, 174, 89, 203, 86, 123, 85, 19, 115, 72, 80, 254, 160, 157, 139, 59, 121, 165, 62, 251, 115, 9, 56, 142, 12, 139, 108, 150, 218, 235, 82, 223, 55, 12, 211, 152, 243, 34, 236, 60, 7, 183, 142, 7, 153, 150, 64, 171, 37, 226, 204, 226, 87, 113, 167, 110, 150, 132, 18, 215, 225, 245, 175, 92, 89, 3, 47, 195, 25, 34, 188, 14, 17, 13, 123, 70, 136, 192, 24, 142, 92, 52, 173, 153, 225, 104, 39, 36, 61, 145, 93, 3, 142, 51, 71, 76, 59, 125, 143, 214, 235, 154, 28, 181, 254, 54, 246, 176, 131, 91, 143, 138, 193, 74, 129, 88, 201, 3, 80, 4, 52, 91, 61, 46, 66, 254, 102, 199, 121, 145, 23, 249, 208, 5, 7, 53, 56, 68, 45, 169, 137, 247, 36, 27, 38, 136, 89, 29, 151, 255, 152, 200, 239, 155, 139, 18, 30, 19, 182, 184, 57, 9, 176, 113, 104, 131, 153, 223, 162, 211, 153, 70, 45, 187, 158, 213, 51, 237, 241, 223, 182, 176, 2, 176, 6, 120, 39, 62, 0, 90, 90, 83, 24, 199, 152, 143, 178, 223, 1, 241, 199, 93, 62, 32, 180, 188, 50, 200, 118, 147, 30, 229, 112, 103, 176, 160, 49, 154, 197, 193, 227, 169, 148, 221, 23, 108, 7, 0, 100, 0, 249, 233, 249, 78, 54, 59, 133, 43, 183, 106, 181, 186, 126, 88, 73, 29, 120, 35, 193, 28, 180, 114, 239, 89, 6, 21, 32, 153, 242, 234, 237, 142, 61, 17, 0, 128, 92, 184, 178, 180, 128, 61, 127, 165, 45, 237, 182, 201, 165, 46, 212, 133, 40, 253, 227, 119, 112, 225, 106, 61, 84, 211, 249, 240, 238, 185, 173, 221, 54, 186, 223, 0, 246, 201, 254, 7, 50, 111, 54, 208, 182, 196, 163, 48, 84, 142, 153, 73, 102, 55, 215, 249, 146, 153, 174, 196, 198, 149, 193, 86, 48, 214, 185, 198, 161, 216, 102, 208, 159, 169, 157, 202, 16, 206, 14, 0, 4, 204, 186, 113, 173, 175, 201, 200, 2, 201, 83, 167, 118, 83, 10, 207, 146, 88, 187, 254, 233, 240, 15, 62, 129, 23, 66, 205, 104, 175, 64, 209, 59, 186, 212, 143, 139, 184, 51, 153, 78, 253, 245, 154, 158, 154, 124, 62, 103, 46, 140, 140, 157, 94, 74, 126, 213, 167, 170, 233, 135, 104, 158, 105, 83, 114, 140, 119, 111, 186, 255, 146, 62, 20, 254, 85, 71, 6, 154, 210, 255, 10, 202, 97, 60, 70, 250, 14, 237, 40, 157, 24, 20, 97, 220, 159, 123, 179, 50, 203, 212, 53, 254, 99, 90, 42, 179, 154, 15, 187, 178, 46, 128, 190, 27, 124, 205, 68, 139, 135, 124, 152, 3, 83, 119, 101, 180, 57, 140, 193, 249, 231, 165, 174, 9, 114, 9, 164, 54, 101, 63, 33, 83, 43, 76, 155, 13, 62, 22, 78, 59, 200, 53, 140, 105, 211, 37, 82, 213, 166, 70, 92, 151, 148, 210, 28, 40, 50, 157, 113, 160, 166, 150, 202, 223, 151, 144, 89, 27, 227, 33, 20, 117, 233, 218, 197, 65, 195, 105, 184, 200, 205, 198, 120, 114, 224, 102, 99, 19, 108, 30, 204, 177, 36, 151, 45, 45, 198, 76, 19, 217, 181, 18, 170, 253, 231, 241, 210, 136, 140, 193, 29, 248, 255, 223, 27, 191, 116, 252, 149, 74, 196, 46, 104, 12, 230, 139, 223, 136, 96, 58, 179, 232, 74, 148, 35, 167, 119, 49, 123, 179, 184, 104, 173, 197, 14, 236, 49, 31, 106, 134, 191, 143, 250, 120, 111, 200, 100, 169, 34, 70, 7, 129, 55, 216, 57, 56, 106, 205, 125, 234, 100, 241, 91, 46, 108, 31, 13, 232, 224, 117, 99, 108, 171, 138, 96, 247, 206, 203, 211, 56, 121, 81, 165, 231, 76, 81, 13, 249, 68, 172, 215, 157, 60, 244, 93, 103, 72, 194, 53, 222, 33, 166, 173, 212, 69, 211, 201, 92, 233, 192, 105, 4, 129, 138, 206, 146, 168, 45, 236, 167, 37, 245, 72, 177, 166, 78, 247, 170, 102, 57, 94, 137, 121, 68, 252, 183, 207, 158, 150, 162, 103, 202, 224, 228, 30, 249, 118, 43, 33, 37, 180, 28, 67, 121, 92, 9, 214, 165, 46, 129, 213, 236, 61, 146, 131, 237, 43, 99, 94, 240, 96, 62, 37, 175, 149, 13, 242, 100, 194, 51, 1, 121, 219, 193, 22, 232, 233, 44, 2, 32, 153, 35, 145, 228, 230, 104, 206, 138, 103, 180, 241, 251, 58, 142, 1, 138, 107, 16, 183, 11, 158, 246, 203, 65, 174, 243, 46, 145, 96, 30, 24, 141, 45, 138, 70, 74, 135, 169, 15, 223, 55, 221, 240, 179, 190, 123, 29, 133, 52, 243, 145, 28, 100, 210, 129, 134, 60, 150, 90, 236, 235, 21, 92, 62, 123, 78, 220, 166, 153, 227, 8, 54, 248, 10, 238, 83, 160, 95, 15, 155, 214, 227, 251, 5, 116, 191, 130, 177, 168, 13, 68, 68, 11, 220, 45, 251, 90, 17, 45, 145, 215, 64, 164, 226, 151, 170, 226, 5, 97, 1, 211, 84, 138, 47, 95, 97, 116, 92, 172, 253, 77, 10, 239, 114, 106, 202, 243, 208, 231, 183, 81, 38, 77, 48, 204, 94, 168, 253, 195, 145, 239, 252, 142, 229, 194, 223, 159, 94, 203, 188, 22, 159, 191, 222, 7, 121, 161, 240, 8, 145, 144, 234, 129, 84, 205, 61, 202, 209, 186, 181, 67, 224, 48, 172, 81, 8, 37, 68, 30, 146, 131, 69, 39, 98, 50, 239, 130, 212, 142, 105, 170, 232, 10, 152, 224, 63, 122, 90, 176, 88, 83, 47, 21, 41, 25, 174, 239, 151, 77, 173, 79, 135, 177, 242, 112, 164, 205, 159, 66, 167, 43, 116, 182, 14, 115, 13, 167, 234, 32, 40, 9, 237, 55, 100, 22, 84, 153, 202, 194, 46, 196, 219, 175, 159, 138, 57, 168, 132, 160, 144, 47, 32, 37, 61, 96, 20, 197, 166, 136, 164, 227, 208, 130, 198, 41, 50, 110, 208, 150, 19, 7, 145, 125, 102, 194, 155, 246, 40, 95, 238, 160, 231, 70, 35, 61, 126, 201, 76, 178, 166, 12, 91, 215, 3, 63, 162, 214, 124, 146, 73, 17, 158, 225, 13, 129, 141, 244, 255, 65, 123, 53, 138, 100, 187, 235, 114, 66, 125, 164, 103, 193, 31, 110, 195, 192, 21, 237, 138, 222, 2, 204, 185, 65, 190, 68, 209, 117, 130, 222, 109, 210, 156, 229, 82, 104, 193, 150, 173, 99, 228, 29, 153, 138, 119, 187, 67, 213, 210, 73, 173, 15, 236, 215, 215, 224, 109, 17, 83, 193, 77, 116, 114, 130, 198, 84, 157, 107, 154, 188, 88, 164, 46, 10, 61, 110, 251, 25, 150, 62, 244, 205, 176, 198, 125, 23, 83, 56, 27, 40, 35, 208, 210, 24, 225, 230, 207, 221, 174, 162, 103, 21, 135, 38, 23, 231, 245, 234, 221, 112, 1, 155, 21, 15, 111, 35, 33, 208, 243, 230, 103, 186, 43, 245, 238, 185, 170, 101, 8, 135, 1, 59, 251, 73, 61, 140, 11, 110, 113, 10, 129, 213, 26, 178, 237, 113, 175, 112, 179, 85, 31, 212, 190, 59, 77, 1, 208, 85, 187, 228, 222, 238, 22, 54, 41, 11, 147, 41, 108, 232, 43, 200, 197, 129, 169, 70, 143, 120, 130, 45, 215, 51, 248, 87, 247, 229, 192, 129, 221, 7, 25, 17, 174, 154, 252, 206, 125, 197, 243, 105, 10, 28, 104, 228, 52, 173, 117, 74, 245, 199, 235, 1, 212, 96, 36, 49, 228, 126, 145, 53, 234, 64, 159, 159, 208, 64, 159, 113, 157, 126, 168, 70, 108, 169, 211, 66, 252, 25, 136, 36, 95, 94, 143, 93, 44, 72, 143, 213, 78, 38, 58, 216, 165, 15, 21, 109, 193, 226, 232, 170, 221, 38, 149, 23, 101, 25, 161, 1, 152, 154, 150, 81, 144, 156, 157, 85, 93, 47, 8, 114, 162, 65, 186, 252, 123, 85, 133, 116, 244, 69, 123, 109, 150, 206, 98, 28, 229, 209, 251, 63, 57, 95, 147, 99, 103, 184, 36, 141, 49, 99, 93, 97, 41, 174, 25, 249, 8, 7, 7, 158, 38, 144, 13, 138, 72, 17, 112, 81, 14, 205, 133, 143, 216, 113, 25, 149, 77, 183, 160, 121, 255, 204, 37, 204, 197, 111, 97, 251, 54, 85, 195, 139, 70, 0, 196, 129, 165, 215, 158, 74, 196, 81, 106, 156, 132, 35, 187, 197, 66, 204, 235, 209, 192, 209, 94, 89, 135, 100, 232, 59, 98, 78, 216, 162, 101, 202, 141, 107, 116, 102, 140, 32, 139, 41, 206, 207, 110, 218, 214, 165, 181, 50, 36, 179, 74, 223, 251, 192, 252, 249, 51, 55, 28, 73, 93, 221, 206, 132, 250, 176, 68, 254, 50, 83, 111, 150, 203, 52, 32, 233, 204, 51, 54, 66, 189, 174, 204, 53, 146, 197, 191, 124, 134, 92, 52, 84, 11, 245, 219, 107, 95, 72, 13, 15, 4, 119, 193, 197, 219, 234, 86, 244, 6, 80, 194, 9, 239, 61, 203, 231, 94, 118, 205, 127, 140, 207, 168, 189, 85, 49, 92, 191, 83, 85, 177, 133, 133, 234, 21, 236, 36, 96, 134, 121, 49, 239, 174, 149, 228, 34, 168, 15, 68, 118, 178, 85, 220, 171, 40, 160, 254, 66, 138, 193, 119, 205, 11, 241, 99, 82, 195, 183, 170, 160, 167, 45, 11, 251, 172, 102, 131, 249, 147, 147, 164, 134, 10, 63, 91, 236, 128, 58, 243, 224, 134, 183, 68, 3, 176, 159, 11, 248, 148, 237, 159, 216, 2, 25, 216, 110, 122, 235, 216, 68, 222, 1, 125, 107, 17, 247, 79, 203, 208, 31, 54, 227, 59, 244, 92, 128, 163, 190, 171, 191, 153, 119, 192, 167, 211, 29, 39, 134, 126, 40, 74, 209, 150, 196, 74, 226, 161, 82, 171, 244, 137, 96, 187, 218, 29, 208, 128, 188, 175, 13, 114, 78, 120, 146, 75, 194, 142, 170, 222, 93, 159, 203, 204, 255, 80, 81, 31, 73, 166, 170, 138, 242, 243, 189, 120, 145, 192, 144, 136, 210, 103, 138, 50, 170, 206, 150, 102, 239, 245, 11, 232, 202, 215, 105, 188, 132, 107, 63, 226, 254, 215, 146, 12, 97, 180, 53, 18, 30, 104, 58, 33, 149, 52, 11, 208, 35, 120, 33, 50, 237, 211, 136, 144, 8, 232, 120, 251, 57, 32, 4, 122, 200, 75, 224, 198, 156, 87, 48, 201, 106, 54, 110, 153, 247, 30, 124, 201, 251, 76, 220, 152, 233, 63, 235, 85, 6, 59, 194, 219, 226, 55, 250, 224, 107, 104, 52, 90, 148, 24, 181, 180, 21, 145, 184, 61, 7, 18, 224, 2, 236, 1, 51, 77, 100, 209, 52, 237, 242, 178, 54, 18, 20, 237, 114, 83, 9, 118, 232, 185, 213, 30, 135, 21, 197, 137, 70, 48, 172, 141, 175, 69, 244, 20, 112, 64, 174, 216, 250, 13, 115, 92, 196, 53, 81, 243, 59, 115, 201, 172, 181, 107, 195, 26, 185, 211, 191, 93, 145, 100, 130, 140, 180, 171, 26, 196, 214, 28, 137, 201, 197, 220, 34, 249, 139, 131, 32, 46, 176, 218, 101, 78, 37, 141, 162, 98, 123, 34, 221, 46, 75, 58, 32, 32, 43, 150, 60, 222, 41, 160, 248, 183, 1, 156, 11, 240, 237, 27, 201, 176, 79, 236, 69, 147, 32, 108, 57, 56, 159, 220, 62, 185, 35, 198, 118, 188, 125, 205, 165, 37, 204, 254, 87, 42, 136, 104, 113, 197, 37, 190, 88, 54, 151, 115, 44, 125, 24, 199, 3, 41, 78, 67, 70, 59, 148, 128, 222, 137, 52, 192, 214, 69, 126, 177, 98, 179, 83, 69, 195], - [179, 250, 7, 145, 27, 186, 110, 180, 110, 62, 68, 57, 66, 163, 15, 210, 18, 154, 226, 131, 167, 170, 112, 192, 72, 177, 73, 172, 116, 197, 75, 95, 192, 53, 43, 49, 155, 0, 143, 70, 21, 33, 107, 123, 85, 46, 164, 238, 31, 52, 202, 148, 232, 1, 102, 127, 26, 182, 101, 157, 113, 253, 27, 217, 200, 160, 103, 115, 169, 156, 99, 166, 181, 54, 161, 55, 240, 169, 58, 83, 10, 78, 180, 78, 125, 221, 148, 31, 58, 116, 153, 5, 112, 45, 251, 252, 181, 45, 76, 170, 69, 211, 133, 189, 65, 185, 28, 215, 83, 2, 134, 153, 233, 2, 189, 23, 158, 79, 203, 192, 136, 171, 38, 216, 167, 249, 125, 48, 74, 178, 111, 166, 178, 110, 92, 202, 187, 70, 51, 57, 233, 133, 131, 8, 46, 142, 107, 152, 80, 128, 91, 74, 158, 242, 192, 11, 120, 195, 144, 103, 251, 66, 71, 165, 60, 55, 3, 238, 228, 59, 68, 168, 194, 172, 248, 64, 249, 141, 160, 2, 51, 206, 253, 254, 123, 150, 219, 250, 116, 144, 154, 201, 59, 21, 142, 131, 181, 178, 128, 7, 55, 70, 130, 91, 108, 93, 93, 158, 224, 86, 42, 71, 150, 188, 133, 148, 181, 149, 238, 193, 62, 62, 156, 135, 98, 104, 149, 110, 84, 250, 218, 207, 170, 63, 120, 1, 142, 140, 9, 118, 214, 162, 152, 194, 255, 131, 225, 255, 41, 75, 51, 109, 166, 167, 59, 186, 21, 118, 27, 201, 163, 26, 178, 109, 139, 59, 129, 151, 109, 162, 165, 184, 247, 121, 41, 74, 94, 133, 140, 11, 219, 55, 76, 206, 200, 83, 9, 74, 229, 168, 149, 137, 4, 143, 213, 202, 57, 26, 186, 51, 102, 215, 146, 12, 89, 254, 151, 125, 20, 251, 61, 255, 236, 81, 28, 216, 146, 140, 136, 251, 42, 39, 77, 44, 27, 83, 35, 171, 95, 173, 215, 207, 219, 54, 141, 188, 45, 209, 143, 89, 21, 38, 246, 144, 97, 54, 129, 142, 108, 120, 42, 250, 112, 188, 88, 39, 64, 178, 89, 232, 227, 75, 113, 121, 3, 127, 23, 144, 24, 25, 151, 208, 252, 64, 187, 210, 50, 101, 192, 75, 104, 225, 253, 156, 49, 124, 80, 47, 130, 140, 94, 178, 49, 225, 8, 246, 32, 46, 215, 98, 186, 66, 240, 247, 225, 157, 147, 236, 172, 53, 205, 142, 80, 241, 9, 4, 198, 4, 116, 182, 102, 139, 52, 88, 64, 28, 81, 210, 16, 34, 171, 6, 245, 246, 46, 67, 140, 244, 13, 27, 57, 10, 55, 154, 179, 212, 154, 186, 9, 177, 10, 154, 55, 151, 99, 0, 0, 153, 6, 22, 80, 71, 63, 219, 78, 177, 47, 147, 180, 98, 254, 52, 133, 233, 30, 49, 45, 149, 94, 222, 97, 133, 118, 39, 227, 150, 171, 240, 49, 154, 213, 34, 185, 159, 122, 228, 205, 255, 44, 114, 235, 126, 244, 116, 159, 221, 72, 181, 69, 110, 47, 212, 225, 63, 46, 5, 196, 241, 77, 104, 140, 161, 69, 66, 205, 130, 202, 145, 240, 205, 118, 217, 53, 233, 198, 162, 131, 111, 3, 135, 133, 240, 164, 73, 188, 2, 115, 226, 48, 62, 75, 178, 154, 59, 124, 112, 23, 111, 6, 19, 18, 49, 103, 220, 225, 41, 159, 239, 146, 160, 97, 223, 102, 98, 79, 65, 236, 209, 16, 35, 168, 7, 5, 69, 26, 21, 12, 244, 195, 91, 26, 63, 204, 191, 103, 32, 111, 162, 169, 51, 42, 75, 69, 82, 231, 125, 250, 238, 209, 176, 176, 24, 200, 51, 135, 97, 220, 58, 3, 149, 128, 101, 37, 28, 198, 32, 42, 55, 142, 84, 120, 200, 227, 5, 89, 150, 240, 96, 35, 239, 165, 137, 208, 137, 220, 90, 211, 32, 89, 139, 116, 132, 198, 253, 55, 216, 211, 110, 166, 124, 41, 110, 59, 18, 185, 224, 23, 204, 167, 153, 20, 153, 111, 56, 197, 252, 248, 224, 215, 3, 80, 90, 17, 94, 64, 27, 53, 188, 190, 233, 121, 50, 251, 253, 180, 4, 47, 154, 22, 45, 16, 79, 244, 165, 108, 100, 15, 52, 107, 121, 160, 161, 185, 169, 244, 79, 101, 62, 44, 245, 232, 169, 67, 107, 7, 162, 55, 185, 41, 66, 43, 216, 35, 37, 14, 51, 90, 29, 84, 132, 112, 11, 76, 223, 103, 31, 210, 169, 245, 138, 37, 183, 49, 22, 201, 110, 213, 1, 137, 92, 205, 202, 169, 218, 215, 107, 110, 167, 201, 82, 220, 91, 95, 105, 202, 52, 54, 178, 110, 102, 244, 40, 220, 94, 246, 89, 46, 65, 57, 45, 210, 177, 9, 74, 157, 233, 200, 187, 7, 213, 111, 200, 110, 245, 74, 33, 208, 3, 126, 75, 169, 203, 113, 229, 91, 50, 196, 181, 139, 107, 48, 142, 121, 87, 85, 234, 47, 64, 81, 224, 105, 62, 155, 250, 30, 88, 162, 141, 3, 215, 99, 220, 197, 32, 181, 217, 113, 60, 255, 10, 221, 220, 184, 64, 206, 129, 204, 30, 179, 231, 34, 70, 226, 207, 224, 241, 126, 154, 217, 9, 16, 55, 223, 168, 79, 32, 253, 164, 200, 183, 173, 7, 84, 44, 184, 249, 140, 178, 15, 249, 52, 188, 7, 164, 164, 43, 76, 220, 82, 38, 1, 134, 38, 93, 192, 126, 68, 190, 1, 250, 56, 114, 139, 159, 41, 63, 25, 142, 66, 2, 168, 90, 4, 136, 35, 31, 117, 191, 228, 20, 166, 183, 7, 126, 230, 185, 176, 96, 59, 224, 47, 10, 27, 114, 112, 244, 66, 106, 45, 84, 36, 140, 136, 0, 77, 34, 135, 143, 84, 207, 63, 238, 206, 86, 135, 84, 155, 125, 98, 62, 21, 158, 107, 213, 2, 204, 246, 181, 71, 241, 132, 250, 169, 36, 195, 226, 48, 39, 158, 199, 104, 84, 179, 180, 47, 47, 119, 73, 189, 238, 246, 203, 13, 215, 153, 0, 205, 240, 183, 221, 227, 228, 12, 28, 5, 11, 31, 17, 217, 25, 222, 206, 250, 112, 136, 136, 19, 153, 1, 66, 65, 234, 122, 82, 31, 197, 85, 204, 90, 246, 10, 92, 232, 139, 154, 97, 121, 40, 168, 111, 39, 71, 131, 245, 105, 148, 17, 177, 95, 71, 149, 62, 161, 31, 17, 34, 105, 83, 188, 162, 127, 18, 198, 211, 235, 39, 72, 192, 142, 90, 36, 175, 75, 20, 3, 167, 88, 95, 137, 84, 38, 219, 58, 184, 46, 239, 91, 114, 68, 91, 128, 197, 113, 120, 17, 179, 108, 164, 60, 125, 4, 74, 119, 169, 133, 203, 4, 233, 246, 8, 209, 229, 110, 175, 18, 238, 23, 144, 161, 120, 2, 4, 123, 249, 8, 218, 116, 18, 133, 196, 51, 67, 81, 208, 222, 79, 131, 179, 231, 241, 159, 251, 96, 17, 148, 179, 251, 45, 13, 71, 244, 71, 211, 172, 84, 137, 13, 55, 254, 169, 108, 43, 153, 17, 118, 213, 205, 210, 221, 62, 128, 19, 107, 123, 225, 128, 218, 140, 111, 93, 13, 209, 160, 85, 167, 57, 19, 225, 177, 175, 39, 180, 180, 101, 187, 200, 167, 180, 193, 95, 134, 199, 168, 68, 196, 228, 169, 143, 99, 9, 83, 4, 171, 204, 118, 80, 112, 82, 142, 5, 198, 61, 222, 185, 213, 118, 8, 30, 43, 63, 178, 129, 230, 94, 87, 247, 227, 104, 105, 5, 4, 3, 148, 131, 209, 158, 163, 172, 77, 48, 78, 205, 39, 75, 203, 89, 91, 181, 165, 198, 193, 207, 13, 174, 48, 56, 73, 108, 29, 37, 106, 248, 211, 21, 226, 158, 90, 171, 250, 116, 243, 82, 17, 56, 92, 56, 49, 39, 152, 36, 214, 224, 33, 101, 112, 121, 254, 21, 201, 30, 237, 76, 42, 224, 136, 64, 126, 156, 204, 204, 212, 235, 162, 122, 11, 78, 26, 160, 40, 98, 133, 40, 209, 126, 200, 242, 5, 254, 67, 29, 105, 78, 42, 248, 72, 6, 116, 72, 115, 68, 162, 243, 131, 5, 210, 88, 244, 12, 8, 118, 192, 28, 70, 50, 233, 189, 28, 206, 47, 16, 251, 58, 249, 243, 61, 45, 247, 1, 229, 232, 100, 179, 50, 247, 15, 252, 217, 228, 47, 155, 171, 158, 176, 246, 170, 14, 253, 240, 255, 232, 212, 48, 76, 13, 167, 31, 141, 162, 108, 88, 236, 126, 182, 121, 126, 23, 229, 166, 168, 97, 144, 221, 138, 41, 180, 161, 249, 154, 176, 204, 43, 149, 83, 68, 254, 68, 188, 150, 115, 127, 94, 26, 9, 0, 191, 62, 159, 130, 6, 220, 37, 184, 52, 239, 223, 81, 180, 205, 165, 76, 57, 58, 179, 138, 60, 46, 198, 145, 18, 130, 249, 73, 73, 31, 124, 86, 125, 89, 180, 65, 124, 134, 150, 250, 12, 57, 254, 25, 148, 13, 211, 126, 61, 73, 167, 91, 5, 32, 148, 162, 47, 184, 68, 235, 122, 91, 8, 98, 163, 113, 231, 166, 220, 24, 25, 113, 134, 2, 79, 176, 72, 38, 213, 132, 23, 206, 249, 217, 35, 190, 198, 136, 153, 198, 248, 249, 231, 249, 215, 122, 219, 118, 250, 156, 104, 100, 16, 194, 41, 110, 207, 36, 38, 181, 195, 64, 106, 134, 21, 65, 153, 170, 83, 34, 135, 0, 223, 39, 133, 112, 89, 114, 210, 177, 203, 31, 225, 224, 224, 147, 109, 103, 213, 137, 1, 185, 101, 27, 5, 38, 79, 158, 235, 120, 240, 249, 44, 226, 74, 143, 47, 22, 105, 252, 85, 45, 18, 71, 127, 196, 165, 72, 174, 126, 20, 38, 0, 75, 59, 100, 146, 167, 101, 80, 64, 101, 224, 116, 166, 148, 151, 123, 199, 94, 35, 153, 53, 157, 169, 148, 39, 118, 202, 182, 193, 27, 92, 84, 240, 211, 28, 1, 192, 239, 120, 55, 82, 161, 208, 53, 106, 129, 4, 235, 178, 85, 126, 215, 67, 158, 81, 157, 147, 61, 183, 180, 29, 55, 245, 84, 231, 181, 222, 65, 249, 133, 56, 184, 149, 83, 67, 152, 6, 175, 11, 108, 144, 190, 91, 25, 76, 25, 219, 21, 39, 155, 181, 6, 139, 30, 153, 96, 9, 107, 196, 6, 231, 207, 96, 223, 8, 81, 252, 149, 92, 151, 80, 164, 85, 107, 196, 55, 228, 0, 33, 235, 123, 171, 221, 223, 158, 96, 164, 36, 191, 229, 144, 76, 211, 160, 39, 56, 180, 20, 178, 177, 140, 38, 162, 198, 163, 215, 45, 149, 240, 175, 135, 200, 9, 52, 1, 203, 161, 247, 8, 126, 179, 58, 132, 8, 22, 8, 35, 150, 3, 221, 184, 219, 192, 192, 50, 135, 105, 7, 188, 138, 250, 130, 150, 90, 141, 204, 214, 252, 53, 107, 44, 95, 220, 44, 16, 31, 238, 250, 213, 255, 35, 219, 239, 147, 126, 12, 249, 181, 191, 0, 154, 12, 193, 69, 56, 98, 248, 67, 92, 123, 21, 8, 183, 193, 146, 222, 182, 201, 217, 104, 83, 26, 7, 236, 100, 136, 64, 118, 91, 33, 158, 108, 125, 192, 237, 151, 145, 41, 127, 82, 131, 115, 66, 91, 242, 117, 234, 6, 234, 23, 94, 103, 118, 81, 47, 207, 151, 30, 146, 101, 42, 84, 188, 33, 158, 226, 213, 117, 39, 37, 111, 137, 223, 172, 101, 109, 56, 153, 82, 91, 27, 32, 211, 90, 180, 2, 96, 231, 96, 185, 29, 249, 3, 67, 53, 85, 38, 132, 34, 37, 177, 57, 200, 57, 157, 111, 76, 4, 11, 117, 157, 37, 93, 248, 74, 243, 143, 39, 74, 233, 187, 140, 84, 69, 225, 79, 223, 129, 188, 130, 180, 100, 62, 238, 89, 56, 16, 37, 85, 65, 109, 168, 166, 96, 233, 69, 125, 190, 119, 209, 59, 6, 114, 126, 171, 109, 177, 124, 50, 125, 13, 242, 71, 228, 57, 75, 22, 149, 248, 246, 17, 160, 86, 68, 51, 208, 31, 199, 0, 247, 213, 153, 7, 31, 189, 45, 80, 105, 240, 17, 173, 99, 169, 129, 71, 14, 209, 26, 185, 91, 226, 123, 208, 234, 146, 228, 129, 236, 99, 221, 128, 198, 160, 117, 157, 152, 149, 107, 174, 51, 226, 128, 4, 240, 73, 122, 168, 165, 148, 120, 186, 33, 240, 5, 156, 46, 77, 152, 16, 196, 27, 56, 219, 49, 139, 56, 54, 191, 70, 88, 26, 101, 8, 19, 157, 128, 174, 248, 15, 140, 200, 74, 107, 37, 101, 112, 226, 156, 79, 226, 212, 179, 238, 213, 44, 1, 163, 7, 195, 96, 48, 253, 54, 177, 181, 53, 251, 56, 234, 146, 101, 28, 19, 236, 85, 203, 115, 116, 190, 124, 70, 206, 195, 233, 36, 9, 81, 63, 192, 107, 93, 158, 95, 179, 27, 105, 145, 241, 43, 225, 202, 182, 23, 122, 89, 233, 171, 182, 82, 156, 9, 192, 118, 177, 134, 220, 152, 147, 49, 203, 245, 94, 230, 29, 150, 187, 133, 139, 153, 27, 10, 212, 180, 138, 28, 38, 105, 5, 82, 90, 167, 213, 183, 224, 17, 110, 86, 82, 50, 76, 103, 45, 234, 67, 193, 151, 52, 0, 141, 137, 187, 11, 119, 11, 4, 245, 193, 52, 36, 68, 229, 248, 31, 104, 51, 169, 132, 213, 132, 110, 36, 236, 82, 242, 17, 77, 247, 68, 232, 97, 42, 145, 133, 213, 41, 191, 246, 227, 100, 42, 239, 119, 212, 52, 242, 79, 108, 104, 64, 102, 172, 22, 186, 203, 214, 6, 23, 131, 129, 117, 113, 128, 188, 176, 149, 159, 0, 112, 209, 65, 152, 5, 17, 140, 156, 138, 64, 229, 6, 247, 183, 134, 41, 226, 139, 24, 116, 147, 112, 61, 26, 251, 173, 50, 32, 209, 123, 234, 166, 12, 114, 236, 215, 202, 73, 110, 57, 42, 28, 160, 29, 176, 4, 207, 172, 185, 63, 5, 58, 55, 243, 125, 165, 240, 117, 249, 119, 189, 142, 156, 248, 13, 26, 137, 194, 94, 75, 209, 95, 83, 246, 110, 55, 189, 124, 254, 36, 218, 54, 65, 144, 246, 213, 167, 166, 181, 147, 202, 208, 213, 109, 188, 44, 54, 36, 106, 163, 27, 165, 234, 194, 72, 11, 1, 175, 25, 221, 11, 236, 245, 180, 153, 174, 57, 97, 34, 134, 155, 248, 235, 216, 181, 214, 180, 137, 9, 253, 141, 201, 95, 26, 216, 245, 102, 168, 214, 123, 96, 243, 219, 57, 246, 159, 139, 168, 50, 89, 117, 229, 113, 117, 209, 92, 208, 188, 136, 114, 71, 254, 36, 55, 200, 227, 240, 69, 236, 189, 243, 213, 23, 78, 5, 87, 213, 52, 135, 165, 202, 131, 1, 39, 64, 167, 179, 188, 40, 92, 210, 60, 222, 103, 195, 165, 198, 145, 42, 246, 103, 130, 60, 1, 111, 199, 17, 147, 236, 197, 240, 180, 114, 157, 135, 17, 118, 121, 108, 48, 225, 84, 253, 78, 131, 90, 231, 38, 174, 97, 178, 148, 185, 228, 237, 65, 39, 166, 9, 91, 127, 101, 186, 235, 34, 4, 15, 170, 50, 58, 115, 197, 231, 243, 208, 158, 12, 26, 182, 173, 188, 79, 123, 225, 82, 71, 69, 117, 254, 63, 145, 126, 250, 22, 232, 184, 226, 144, 236, 90, 0, 121, 220, 240, 227, 216, 37, 57, 157, 116, 208, 238, 16, 168, 243, 238, 18, 120, 82, 45, 53, 163, 84, 92, 149, 234, 177, 14, 24, 179, 111, 190, 165, 27, 56, 81, 11, 133, 165, 205, 224, 240, 160, 31, 75, 88, 152, 227, 163, 6, 117, 207, 237, 99, 194, 167, 184, 221, 94, 42, 240, 199, 40, 56, 110, 231, 140, 235, 9, 245, 114, 59, 208, 192, 149, 149, 196, 235, 179, 204, 65, 221, 16, 209, 83, 1, 174, 127, 136, 68, 172, 218, 20, 186, 1, 70, 51, 117, 141, 118, 168, 231, 177, 43, 4, 0, 124, 78, 108, 132, 197, 118, 107, 132, 115, 58, 134, 83, 103, 33, 46, 162, 219, 232, 133, 148, 130, 88, 76, 110, 56, 151, 42, 226, 16, 31, 57, 141, 43, 163, 2, 93, 66, 108, 238, 17, 244, 22, 123, 219, 248, 30, 8, 217, 43, 148, 177, 50, 50, 254, 81, 167, 236, 12, 144, 249, 131, 153, 122, 67, 254, 125, 13, 60, 114, 18, 7, 108, 36, 205, 31, 102, 144, 127, 24, 138, 58, 141, 112, 248, 132, 8, 128, 37, 50, 124, 8, 60, 235, 225, 31, 127, 222, 242, 41, 188, 128, 46, 7, 119, 30, 95, 107, 170, 135, 98, 217, 16, 129, 246, 246, 197, 61, 146, 161, 182, 56, 163, 33, 144, 185, 223, 137, 50, 62, 93, 53, 235, 234, 219, 0, 123, 174, 31, 103, 101, 246, 80, 22, 4, 110, 57, 52, 198, 98, 184, 81, 79, 137, 232, 195, 157, 125, 86, 65, 45, 186, 14, 40, 180, 163, 89, 40, 65, 173, 7, 159, 27, 159, 221, 140, 131, 57, 161, 31, 16, 185, 142, 58, 231, 185, 175, 206, 178, 87, 123, 217, 72, 182, 126, 183, 232, 251, 175, 147, 249, 77, 239, 83, 124, 136, 204, 129, 153, 75, 30, 116, 139, 132, 41, 64, 206, 122, 255, 211, 205, 239, 146, 34, 6, 225, 194, 65, 48, 172, 237, 51, 73, 198, 8, 122, 82, 100, 53, 92, 125, 140, 25, 101, 64, 118, 92, 253, 149, 203, 165, 109, 233, 44, 103, 196, 183, 42, 192, 72, 166, 47, 154, 163, 20, 233, 119, 22, 143, 109, 205, 42, 5, 35, 109, 53, 239, 251, 85, 189, 242, 78, 68, 117, 243, 63, 94, 109, 249, 234, 78, 47, 3, 192, 27, 201, 120, 218, 152, 246, 17, 140, 97, 1, 31, 114, 6, 189, 150, 172, 3, 122, 38, 145, 207, 211, 108, 211, 91, 65, 185, 145, 151, 192, 243, 1, 177, 138, 152, 224, 112, 69, 227, 80, 210, 172, 18, 42, 152, 198, 89, 121, 143, 98, 150, 24, 99, 162, 128, 176, 134, 117, 33, 13, 132, 97, 204, 80, 40, 220, 81, 7, 199, 188, 87, 167, 69, 93, 206, 217, 129, 132, 49, 176, 248, 68, 61, 251, 155, 204, 3, 222, 223, 156, 255, 143, 189, 166, 61, 126, 122, 154, 214, 252, 231, 38, 5, 188, 112, 112, 232, 229, 175, 51, 168, 24, 120, 255, 55, 204, 57, 8, 10, 1, 196, 50, 192, 39, 240, 111, 195, 150, 31, 163, 91, 122, 132, 198, 222, 132, 202, 193, 179, 159, 135, 199, 219, 9, 16, 108, 66, 232, 170, 170, 75, 164, 229, 227, 4, 83, 188, 135, 52, 167, 61, 69, 120, 27, 184, 223, 89, 213, 103, 235, 164, 167, 15, 29, 5, 60, 53, 164, 122, 181, 194, 143, 69, 65, 173, 145, 222, 159, 94, 155, 15, 99, 132, 68, 150, 58, 244, 50, 152, 91, 255, 247, 194, 80, 161, 7, 215, 244, 28, 155, 48, 90, 54, 188, 227, 67, 235, 64, 69, 171, 141, 223, 185, 225, 207, 67, 10, 204, 25, 220, 104, 225, 14, 72, 204, 55, 37, 253, 205, 40, 162, 136, 28, 209, 160, 39, 247, 142, 20, 249, 61, 247, 190, 147, 39, 112, 252, 27, 59, 240, 213, 166, 172, 191, 113, 84, 105, 88, 187, 41, 130, 204, 20, 71, 198, 123, 192, 73, 133, 239, 69, 192, 213, 61, 54, 192, 93, 248, 136, 24, 252, 214, 222, 96, 198, 54, 140, 222, 65, 189, 107, 71, 184, 50, 64, 239, 237, 85, 97, 156, 53, 12, 49, 70, 246, 219, 101, 197, 62, 71, 170, 173, 177, 217, 43, 77, 27, 221, 116, 166, 227, 206, 135, 142, 161, 165, 134, 49, 17, 86, 153, 10, 135, 18, 255, 125, 230, 158, 40, 173, 69, 167, 209, 180, 134, 42, 139, 243, 72, 38, 132, 52, 128, 165, 185, 224, 78, 143, 176, 63, 102, 85, 35, 253, 118, 249, 36, 127, 81, 145, 29, 89, 156, 178, 170, 71, 88, 23, 17, 49, 233, 40, 109, 195, 96, 59, 19, 33, 227, 135, 89, 230, 36, 27, 178, 130, 169, 154, 169, 198, 139, 28, 0, 27, 93, 37, 173, 201, 133, 189, 116, 148, 187, 182, 229, 114, 250, 76, 127, 251, 144, 129, 78, 41, 250, 17, 83, 192, 105, 92, 222, 153, 87, 230, 18, 240, 216, 78, 171, 69, 58, 97, 131, 160, 152, 100, 21, 93, 62, 8, 7, 226, 65, 178, 160, 29, 142, 234, 205, 196, 92, 143, 174, 30, 143, 124, 226, 64, 159, 184, 105, 51, 133, 19, 54, 141, 124, 174, 173, 235, 105, 62, 17, 52, 202, 112, 245, 152, 239, 172, 60, 252, 209, 136, 141, 211, 119, 249, 4, 96, 182, 98, 156, 174, 167, 171, 153, 47, 61, 236, 210, 132, 237, 85, 1, 164, 181, 8, 10, 51, 8, 129, 250, 218, 42, 104, 87, 20, 12, 198, 203, 120, 52, 29, 221, 166, 72, 153, 84, 1, 46, 186, 134, 2, 64, 45, 247, 225, 129, 209, 192, 89, 190, 116, 232, 34, 205, 86, 109, 246, 44, 145, 43, 96, 101, 185, 217, 177, 96, 191, 157, 117, 119, 90, 164, 110, 124, 198, 16, 192, 215, 226, 55, 75, 139, 0, 188, 134, 172, 194, 82, 137, 39, 229, 126, 3, 229, 174, 72, 245, 54, 141, 253, 198, 213, 120, 63, 194, 171, 90, 198, 120, 245, 137, 225, 70, 161, 157, 45, 70, 69, 218, 219, 29, 89, 119, 219, 233, 141, 62, 186, 44, 138, 227, 238, 242, 175, 73, 105, 140, 218, 107, 0, 148, 82, 192, 55, 66, 123, 29, 77, 60, 241, 91, 147, 86, 88, 61, 188, 66, 46, 202, 209, 81, 69, 177, 50, 135, 162, 55, 114, 249, 2, 201, 2, 109, 230, 87, 95, 4, 28, 198, 130, 78, 220, 165, 27, 66, 218, 111, 29, 128, 183, 43, 158, 194, 252, 86, 82, 14, 241, 130, 156, 20, 35, 186, 4, 211, 47, 230, 28, 95, 152, 162, 175, 109, 65, 75, 238, 224, 240, 39, 71, 18, 7, 115, 170, 241, 214, 254, 93, 64, 200, 180, 96, 42, 2, 137, 212, 142, 49, 211, 129, 217, 51, 73, 118, 170, 157, 136, 134, 71, 147, 61, 35, 162, 232, 221, 197, 11, 190, 9, 200, 235, 212, 208, 183, 45, 169, 57, 39, 48, 154, 162, 51, 222, 80, 174, 27, 129, 89, 103, 98, 134, 196, 226, 225, 230, 245, 70, 253, 67, 127, 153, 71, 91, 8, 251, 186, 104, 73, 189, 239, 27, 87, 144, 215, 173, 213, 100, 187, 172, 240, 235, 48, 123, 19, 240, 78, 131, 34, 101, 122, 94, 50, 103, 102, 125, 1, 165, 77, 1, 50, 62, 44, 69, 65, 11, 42, 103, 81, 230, 114, 10, 21, 22, 242, 125, 77, 66, 180, 179, 34, 202, 227, 12, 249, 132, 47, 77, 144, 47, 72, 212, 77, 13, 247, 43, 75, 137, 29, 45, 125, 137, 156, 40, 8, 145, 121, 128, 64, 20, 41, 69, 47, 160, 55, 227, 79, 172, 171, 159, 236, 60, 103, 141, 6, 151, 134, 179, 226, 229, 208, 3, 201, 82, 31, 143, 199, 172, 101, 149, 56, 35, 213, 137, 214, 251, 19, 102, 116, 198, 207, 36, 244, 19, 217, 155, 2, 28, 70, 211, 80, 214, 206, 145, 22, 157, 36, 97, 189, 76, 127, 236, 124, 173, 139, 230, 177, 115, 196, 231, 160, 246, 89, 78, 19, 84, 18, 77, 125, 85, 30, 185, 142, 54, 203, 69, 112, 75, 126, 185, 10, 196, 0, 75, 172, 101, 119, 64, 14, 222, 109, 155, 196, 80, 13, 90, 253, 137, 152, 3, 204, 98, 250, 49, 137, 84, 201, 218, 40, 42, 103, 130, 56, 18, 129, 241, 93, 201, 39, 176, 2, 159, 223, 154, 165, 160, 243, 162, 22, 216, 213, 162, 72, 215, 195, 145, 111, 250, 120, 217, 126, 238, 185, 75, 13, 55, 210, 81, 167, 62, 236, 23, 59, 71, 148, 146, 140, 253, 77, 154, 166, 86, 153, 244, 97, 14, 89, 219, 47, 161, 136, 29, 50, 27, 35, 114, 55, 167, 109, 175, 70, 221, 24, 252, 38, 199, 20, 22, 88, 254, 40, 64, 111, 203, 4, 169, 190, 15, 6, 66, 111, 160, 54, 19, 130, 254, 31, 2, 147, 34, 0, 125, 248, 50, 174, 67, 211, 52, 10, 250, 174, 42, 195, 221, 28, 64, 155, 81, 243, 127, 132, 230, 134, 94, 21, 52, 9, 127, 74, 213, 77, 25, 240, 46, 169, 167, 4, 227, 181, 72, 31, 103, 19, 71, 236, 17, 1, 152, 129, 87, 115, 201, 88, 18, 8, 180, 65, 67, 142, 133, 44, 241, 73, 94, 128, 236, 255, 246, 121, 222, 67, 42, 25, 234, 71, 108, 248, 135, 62, 143, 71, 151, 164, 148, 105, 80, 202, 164, 71, 2, 115, 22, 114, 242, 187, 87, 9, 234, 186, 132, 6, 43, 242, 107, 102, 52, 234, 48, 132, 235, 145, 251, 165, 253, 31, 194, 7, 146, 199, 242, 35, 242, 58, 210, 11, 41, 163, 189, 194, 105, 35, 187, 207, 37, 179, 178, 25, 204, 31, 93, 43, 97, 37, 12, 135, 255, 107, 152, 194, 52, 150, 14, 247, 71, 102, 172, 149, 182, 109, 150, 154, 189, 41, 109, 250, 63, 180, 127, 207, 80, 150, 170, 131, 20, 13, 1, 239, 99, 130, 214, 64, 165, 122, 150, 235, 219, 212, 10, 171, 103, 243, 211, 134, 222, 170, 53, 176, 238, 23, 153, 230, 12, 37, 17, 198, 133, 142, 182, 134, 198, 27, 248, 175, 105, 83, 195, 252, 158, 224, 34, 213, 208, 82, 53, 70, 148, 38, 41, 88, 71, 242, 119, 67, 125, 159, 241, 156, 248, 171, 111, 81, 248, 61, 5, 34, 250, 236, 102, 69, 184, 118, 199, 225, 21, 22, 113, 45, 115, 77, 217, 119, 88, 204, 247, 165, 184, 94, 148, 177, 238, 29, 143, 218, 4, 37, 60, 209, 108, 114, 209, 159, 110, 138, 74, 234, 237, 248, 37, 136, 184, 24, 140, 213, 255, 253, 28, 191, 84, 26, 65, 48, 144, 242, 63, 200, 3, 101, 204, 7, 25, 22, 245, 140, 189, 99, 140, 18, 179, 109, 17, 81, 138, 38, 165, 158, 229, 39, 152, 38, 169, 145, 52, 40, 243, 174, 41, 172, 242, 63, 181, 126, 237, 41, 105, 128, 174, 72, 144, 185, 118, 10, 108, 156, 170, 199, 182, 135, 216, 154, 139, 79, 187, 95, 152, 194, 18, 0, 99, 126, 93, 170, 87, 70, 79, 52, 47, 60, 49, 66, 193, 14, 100, 74, 203, 132, 48, 137, 13, 201, 231, 147, 121, 159, 222, 82, 118, 152, 221, 108, 9, 55, 159, 146, 219, 88, 76, 174, 14, 165, 152, 188, 120, 104, 2, 228, 42, 126, 42, 60, 249, 136, 134, 250, 133, 70, 77, 255, 145, 171, 223, 243, 99, 191, 30, 188, 124, 114, 183, 57, 31, 52, 136, 211, 157, 18, 215, 18, 56, 207, 163, 115, 68, 126, 130, 134, 26, 124, 88, 235, 131, 81, 18, 197, 234, 116, 158, 23, 42, 53, 82, 224, 78, 16, 218, 143, 74, 17, 71, 112, 84, 108, 221, 183, 110, 123, 70, 110, 210, 216, 48, 14, 69, 126, 205, 110, 175, 101, 99, 183, 227, 57, 38, 49, 118, 249, 99, 175, 216, 222, 22, 117, 55, 223, 195, 247, 55, 27, 188, 229, 156, 207, 109, 132, 224, 81, 197, 11, 52, 192, 196, 169, 189, 157, 39, 98, 215, 97, 229, 45, 157, 181, 16, 238, 226, 179, 128, 47, 112, 20, 160, 140, 164, 72, 105, 204, 136, 164, 188, 116, 141, 255, 18, 83, 18, 8, 0, 5, 211, 204, 168, 127, 57, 7, 232, 52, 245, 167, 104, 207, 247, 214, 146, 228, 119, 112, 61, 206, 46, 40, 102, 230, 111, 246, 202, 49, 27, 176, 176, 180, 119, 21, 0, 67, 220, 1, 0, 223, 1, 244, 234, 205, 40, 69, 131, 90, 197, 101, 1, 54, 89, 162, 166, 181, 2, 139, 94, 248, 88, 229, 74, 157, 175, 31, 98, 254, 42, 156, 64, 9, 145, 237, 133, 208, 115, 157, 121, 181, 236, 138, 146, 6, 72, 97, 171, 87, 160, 146, 188, 172, 131, 146, 104, 17, 217, 15, 172, 30, 246, 180, 231, 131, 111, 184, 56, 26, 228, 145, 98, 252, 236, 246, 88, 21, 142, 205, 127, 124, 233, 36, 104, 2, 110, 105, 144, 5, 194, 213, 39, 174, 132, 221, 120, 246, 65, 151, 240, 13, 83, 122, 117, 90, 13, 51, 236, 203, 20, 160, 252, 192, 235, 221, 140, 28, 140, 130, 2, 198, 97, 107, 228, 116, 217, 106, 94, 68, 138, 134, 230, 224, 182, 136, 92, 198, 181, 142, 11, 255, 230, 30, 177, 128, 170, 181, 37, 145, 207, 224, 199, 143, 174, 175, 146, 133, 252, 232, 246, 215, 172, 134, 174, 235, 85, 191, 222, 68, 185, 212, 219, 132, 61, 187, 216, 36, 248, 165, 127, 166, 160, 113, 0, 57, 112, 186, 53, 185, 225, 108, 165, 217, 222, 69, 217, 67, 23, 253, 107, 226, 96, 57, 75, 228, 244, 58, 84, 142, 28, 24, 89, 161, 158, 248, 157, 154, 68, 133, 251, 1, 216, 254, 229, 49, 187, 15, 220, 21, 9, 169, 212, 249, 50, 173, 59, 137, 158, 189, 221, 250, 105, 177, 125, 152, 15, 133, 57, 83, 32, 253, 139, 29, 28, 0, 151, 28, 29, 240, 154, 3, 206, 18, 179, 127, 99, 168, 168, 2, 12, 247, 169, 209, 150, 248, 46, 199, 116, 26, 217, 106, 122, 140, 226, 22, 108, 83, 75, 103, 231, 44, 208, 174, 55, 236, 61, 42, 240, 118, 83, 176, 78, 40, 237, 78, 100, 221, 54, 200, 202, 3, 200, 173, 73, 130, 108, 90, 83, 232, 48, 50, 255, 143, 208, 66, 243, 11, 25, 112, 41, 11, 44, 238, 25, 20, 102, 35, 71, 151, 189, 66, 216, 43, 221, 166, 52, 109, 2, 98, 213, 102, 135, 197, 221, 181, 58, 0, 116, 199, 5, 82, 72, 184, 219, 81, 218, 227, 164, 197, 84, 191, 244, 228, 182, 49, 172, 158, 149, 104, 26, 60, 60, 5, 141, 153, 12, 193, 134, 70, 67, 214, 17, 19, 238, 151, 240, 83, 128, 128, 177, 252, 185, 59, 9, 130, 241, 21, 77, 180, 88, 41, 48, 34, 55, 201, 255, 50, 155, 136, 78, 211, 102, 43, 56, 65, 41, 25, 92, 234, 17, 37, 231, 69, 248, 39, 185, 8, 180, 253, 112, 128, 28, 138, 222, 51, 8, 133, 203, 70, 243, 19, 205, 41, 111, 124, 172, 64, 71, 10, 38, 173, 27, 6, 195, 53, 117, 208, 36, 132, 178, 219, 247, 2, 27, 82, 93, 41, 124, 179, 209, 202, 184, 102, 221, 213, 104, 174, 34, 250, 81, 150, 125, 222, 204, 115, 237, 215, 8, 8, 245, 118, 87, 86, 83, 148, 246, 171, 59, 114, 91, 245, 181, 149, 7, 141, 99, 190, 159, 229, 230, 238, 24, 24, 166, 187, 109, 14, 113, 103, 112, 218, 229, 109, 147, 137, 249, 83, 147, 182, 127, 150, 243, 180, 160, 199, 254, 228, 119, 72, 245, 82, 124, 7, 72, 233, 2, 221, 64, 177, 36, 1, 126, 211, 206, 107, 73, 200, 129, 213, 56, 105, 224, 21, 217, 101, 54, 90, 214, 179, 176, 64, 196, 50, 66, 56, 135, 15, 10, 130, 170, 85, 125, 126, 185, 23, 231, 103, 231, 161, 203, 165, 64, 104, 61, 179, 249, 30, 20, 226, 30, 254, 202, 20, 106, 212, 127, 245, 48, 175, 201, 107, 65, 149, 50, 125, 235, 137, 36, 79, 247, 126, 199, 124, 125, 255, 124, 196, 12, 220, 64, 194, 87, 3, 202, 32, 131, 244, 209, 236, 216, 162, 129, 109, 74, 29, 210, 189, 201, 81, 212, 242, 94, 204, 15, 156, 150, 155, 30, 43, 131, 120, 223, 113, 5, 7, 157, 14, 111, 154, 158, 235, 174, 101, 92, 133, 227, 178, 154, 217, 31, 244, 195, 125, 211, 200, 23, 91, 11, 240, 83, 28, 2, 209, 178, 27, 42, 246, 226, 187, 9, 136, 60, 43, 27, 172, 33, 231, 21, 245, 11, 125, 7, 251, 222, 81, 188, 197, 102, 42, 57, 174, 9, 200, 120, 120, 124, 245, 121, 100, 141, 26, 155, 92, 185, 95, 17, 245, 191, 138, 33, 209, 130, 79, 40, 128, 218, 175, 205, 183, 214, 122, 125, 121, 172, 68, 52, 46, 34, 221, 205, 158, 29, 68, 34, 154, 238, 90, 88, 228, 2, 76, 2, 11, 43, 54, 66, 238, 92, 213, 166, 206, 144, 35, 148, 198, 184, 19, 130, 59, 93, 11, 55, 239, 99, 28, 58, 251, 6, 134, 234, 174, 244, 185, 44, 96, 235, 161, 154, 89, 188, 152, 134, 235, 252, 49, 61, 195, 109, 78, 161, 54, 70, 55, 82, 51, 23, 106, 77, 124, 111, 198, 180, 229, 119, 27, 81, 161, 131, 39, 51, 149, 22, 212, 21, 209, 251, 64, 106, 40, 194, 51, 188, 83, 44, 42, 150, 44, 36, 228, 226, 24, 248, 249, 19, 65, 160, 56, 45, 25, 51, 186, 34, 16, 120, 225, 117, 229, 153, 237, 16, 178, 105, 13, 201, 130, 216, 103, 0, 37, 251, 230, 4, 195, 186, 2, 237, 146, 37, 222, 163, 59, 251, 26, 65, 11, 55, 118, 41, 83, 188, 29, 99, 12, 18, 150, 135, 42, 6, 10, 3, 250, 12, 45, 168, 12, 235, 84, 190, 192, 90, 167, 192, 178, 218, 110, 15, 195, 118, 172, 238, 247, 179, 145, 175, 107, 145, 33, 234, 55, 215, 144, 147, 5, 220, 106, 18, 169, 163, 75, 235, 9, 147, 83, 59, 51, 148, 148, 98, 207, 83, 103, 134, 190, 152, 111, 154, 209, 27, 164, 94, 173, 197, 93, 180, 131, 17, 107, 223, 162, 197, 104, 77, 117, 188, 145, 220, 51, 150, 166, 189, 146, 240, 2, 55, 115, 184, 235, 58, 71, 229, 131, 183, 76, 248, 200, 196, 85, 254, 247, 39, 184, 188, 116, 164, 192, 163, 176, 244, 220, 157, 120, 87, 101, 89, 104, 242, 225, 126, 19, 120, 73, 42, 115, 112, 194, 16, 23, 249, 89, 75, 154, 12, 17, 200, 189, 31, 181, 29, 178, 152, 103, 225, 98, 76, 209, 145, 244, 238, 72, 151, 160, 9, 96, 38, 238, 158, 174, 237, 67, 91, 249, 194, 130, 134, 52, 169, 198, 233, 86, 181, 117, 195, 221, 226, 210, 151, 235, 127, 31, 225, 235, 4, 155, 21, 39, 134, 76, 216, 161, 168, 37, 39, 214, 203, 46, 56, 105, 196, 141, 51, 179, 33, 26, 80, 138, 245, 36, 164, 4, 218, 217, 44, 205, 15, 78, 41, 14, 31, 193, 43, 47, 223, 149, 60, 194, 54, 181, 28, 196, 1, 81, 134, 77, 73, 53, 103, 202, 18, 134, 7, 227, 93, 189, 82, 0, 203, 135, 237, 135, 61, 160, 205, 16, 152, 152, 70, 113, 129, 202, 240, 68, 196, 123, 29, 8, 181, 44, 48, 250, 124, 105, 216, 105, 219, 61, 37, 109, 127, 81, 182, 47, 1, 142, 144, 254, 188, 95, 164, 52, 143, 171, 246, 52, 36, 237, 80, 74, 131, 76, 157, 112, 182, 83, 237, 103, 194, 47, 21, 46, 70, 140, 25, 11, 93, 229, 242, 146, 101, 78, 9, 186, 179, 176, 232, 180, 41, 160, 50, 132, 68, 240, 106, 80, 96, 126, 212, 22, 253, 4, 185, 117, 199, 87, 232, 233, 188, 206, 121, 61, 178, 133, 254, 178, 110, 15, 148, 163, 162, 45, 193, 107, 182, 32, 67, 130, 123, 125, 35, 109, 103, 156, 232, 103, 166, 166, 210, 82, 155, 126, 5, 105, 42, 52, 255, 18, 29, 128, 161, 224, 209, 125, 3, 0, 56, 135, 216, 167, 155, 48, 161, 243, 64, 226, 167, 104, 201, 162, 226, 245, 91, 220, 109, 124, 102, 76, 224, 44, 130, 209, 141, 213, 245, 237, 75, 207, 232, 27, 25, 220, 104, 205, 173, 221, 215, 56, 162, 9, 130, 253, 132, 98, 14, 50, 104, 49, 102, 43, 235, 0, 51, 184, 19, 93, 69, 130, 52, 240, 1, 6, 31, 17, 222, 97, 17, 56, 35, 139, 38, 144, 147, 169, 157, 165, 75, 165, 157, 8, 165, 234, 218, 252, 215, 126, 160, 23, 44, 5, 60, 104, 181, 140, 192, 73, 246, 148, 64, 91, 148, 244, 132, 61, 247, 86, 210, 84, 235, 58, 184, 253, 167, 240, 150, 94, 119, 207, 237, 69, 102, 45, 75, 175, 46, 146, 76, 235, 77, 111, 217, 221, 123, 64, 235, 186, 119, 199, 196, 254, 14, 55, 244, 205, 68, 102, 21, 221, 113, 239, 21, 79, 171, 70, 174, 228, 2, 110, 54, 183, 245, 203, 192, 233, 132, 159, 247, 44, 100, 112, 227, 228, 251, 143, 97, 157, 138, 188, 198, 245, 89, 106, 215, 205, 74, 73, 162, 204, 128, 29, 34, 135, 108, 31, 3, 178, 247, 162, 222, 51, 46, 0, 167, 151, 239, 247, 86, 38, 72, 148, 133, 245, 151, 66, 88, 217, 191, 3, 189, 96, 153, 40, 232, 83, 77, 42, 134, 8, 126, 182, 170, 240, 159, 5, 116, 205, 49, 35, 40, 246, 31, 19, 21, 153, 84, 208, 4, 64, 224, 154, 102, 106, 51, 47, 19, 95, 128, 14, 89, 207, 247, 252, 46, 180, 13, 56, 194, 132, 0, 39, 145, 81, 104, 215, 40, 144, 21, 151, 221, 181, 67, 114, 218, 131, 156, 182, 9, 202, 114, 124, 175, 235, 17, 201, 203, 189, 206, 40, 120, 225, 64, 146, 1, 213, 236, 83, 171, 143, 112, 226, 96, 168, 81, 52, 59, 189, 41, 225, 171, 175, 1, 125, 230, 99, 131, 73, 189, 20, 11, 89, 142, 187, 192, 100, 195, 85, 91, 110, 9, 40, 248, 254, 180, 224, 220, 0, 1, 112, 23, 153, 149, 136, 143, 238, 117, 89, 94, 193, 22, 35, 235, 198, 27, 110, 128, 155, 172, 135, 0, 7, 116, 119, 117, 187, 80, 186, 61, 248, 27, 79, 89, 221, 234, 80, 95, 17, 35, 247, 23, 163, 182, 11, 63, 51, 132, 199, 119, 168, 159, 92, 253, 215, 50, 203, 222, 103, 195, 23, 131, 107, 28, 157, 220, 41, 71, 36, 84, 10, 118, 99, 163, 241, 209, 230, 234, 144, 60, 31, 31, 76, 40, 37, 170, 171, 96, 149, 159, 53, 31, 76, 101, 224, 162, 89, 28, 186, 67, 186, 219, 183, 161, 245, 163, 104, 90, 201, 226, 66, 242, 65, 168, 51, 68, 227, 171, 88, 179, 182, 215, 138, 212, 226, 74, 111, 234, 6, 254, 85, 118, 255, 197, 119, 172, 56, 207, 248, 115, 3, 125, 10, 156, 131, 89, 136, 95, 40, 28, 234, 62, 216, 219, 49, 195, 97, 96, 255, 21, 250, 23, 224, 82, 237, 91, 113, 92, 82, 51, 34, 189, 182, 2, 253, 164, 207, 76, 21, 4, 177, 200, 162, 215, 87, 248, 219, 141, 89, 220, 124, 12, 82, 14, 194, 197, 15, 130, 205, 49, 51, 144, 36, 126, 250, 113, 186, 229, 204, 79, 196, 210, 71, 130, 0, 245, 185, 194, 244, 99, 84, 50, 107, 201, 60, 202, 19, 222, 4, 103, 114, 189, 164, 110, 155, 38, 190, 220, 80, 219, 195, 248, 50, 203, 194, 176, 244, 231, 158, 49, 180, 22, 238, 57, 26, 187, 4, 229, 12, 75, 219, 198, 18, 246, 86, 200, 203, 144, 216, 43, 29, 108, 211, 60, 130, 121, 196, 155, 150, 100, 189, 187, 105, 93, 134, 55, 62, 13, 59, 238, 122, 2, 152, 175, 21, 118, 222, 6, 149, 190, 203, 40, 68, 134, 9, 135, 109, 235, 156, 210, 128, 129, 51, 179, 8, 27, 51, 80, 99, 131, 104, 209, 178, 180, 96, 190, 68, 223, 90, 126, 104, 235, 86, 60, 134, 75, 98, 176, 191, 88, 209, 165, 87, 122, 45, 105, 236, 57, 56, 186, 99, 134, 47, 95, 226, 35, 190, 28, 201, 208, 145, 211, 189, 90, 232, 219, 110, 209, 123, 208, 4, 134, 251, 112, 133, 232, 138, 64, 56, 251, 164, 107, 50, 206, 198, 85, 159, 36, 65, 114, 142, 83, 250, 127, 193, 113, 110, 173, 234, 30, 86, 28, 2, 185, 231, 169, 164, 67, 132, 206, 82, 93, 95, 178, 255, 201, 230, 84, 88, 232, 119, 215, 109, 147, 176, 172, 172, 253, 51, 66, 154, 4, 107, 95, 134, 241, 73, 53, 43, 172, 9, 202, 158, 148, 78, 221, 54, 78, 39, 148, 167, 139, 122, 90, 173, 179, 234, 119, 25, 120, 70, 127, 208, 223, 128, 234, 112, 182, 53, 123, 99, 97, 156, 225, 217, 182, 195, 169, 122, 106, 11, 28, 191, 206, 20, 199, 75, 104, 148, 213, 213, 219, 202, 209, 4, 219, 157, 166, 199, 28, 94, 120, 234, 28, 108, 136, 36, 183, 169, 17, 85, 89, 9, 57, 81, 143, 162, 80, 18, 35, 188, 244, 74, 73, 245, 94, 196, 186, 3, 197, 213, 50, 81, 199, 16, 44, 39, 232, 169, 66, 127, 90, 235, 59, 162, 191, 161, 160, 180, 121, 176, 122, 152, 122, 160, 32, 168, 124, 143, 205, 134, 128, 27, 31, 70, 200, 174, 75, 106, 211, 143, 11, 213, 221, 140, 88, 56, 45, 105, 83, 194, 122, 183, 190, 180, 97, 185, 213, 177, 145, 222, 99, 73, 124, 255, 26, 36, 82, 78, 216, 151, 127, 7, 160, 144, 120, 229, 62, 51, 0, 212, 57, 233, 76, 219, 73, 77, 32, 21, 2, 160, 199, 143, 196, 159, 67, 184, 8, 89, 11, 127, 45, 228, 55, 190, 86, 84, 143, 191, 187, 161, 27, 107, 28, 172, 137, 168, 172, 194, 29, 183, 20, 20, 167, 222, 177, 12, 216, 25, 195, 23, 89, 69, 237, 181, 8, 77, 130, 37, 73, 204, 87, 221, 169, 213, 246, 138, 36, 246, 226, 74, 250, 208, 206, 188, 49, 227, 33, 249, 227, 42, 148, 223, 21, 245, 152, 169, 20, 195, 253, 112, 221, 78, 115, 141, 48, 221, 112, 229, 75, 59, 149, 117, 3, 122, 189, 233, 97, 43, 190, 70, 202, 187, 210, 56, 27, 110, 85, 56, 58, 185, 74, 218, 243, 135, 168, 217, 40, 148, 171, 0, 94, 181, 229, 124, 200, 3, 163, 208, 31, 178, 42, 123, 187, 195, 87, 200, 255, 189, 181, 200, 89, 45, 156, 92, 214, 199, 7, 128, 39, 48, 214, 233, 234, 15, 125, 244, 106, 151, 128, 44, 71, 97, 186, 66, 236, 91, 140, 39, 123, 6, 90, 253, 22, 45, 100, 187, 5, 160, 201, 170, 221, 218, 193, 223, 114, 178, 243, 45, 63, 220, 193, 167, 35, 175, 70, 213, 133, 151, 106, 19, 218, 209, 22, 189, 103, 25, 172, 2, 72, 236, 43, 47, 44, 111, 53, 187, 186, 60, 135, 2, 135, 7, 72, 127, 133, 40, 227, 238, 5, 218, 233, 159, 103, 250, 71, 221, 80, 119, 34, 111, 201, 219, 100, 102, 140, 136, 211, 39, 123, 190, 219, 134, 109, 51, 50, 47, 43, 163, 177, 186, 232, 28, 193, 27, 237, 247, 125, 253, 164, 157, 76, 91, 226, 228, 228, 198, 139, 181, 173, 233, 47, 90, 223, 252, 9, 50, 19, 139, 70, 221, 17, 0, 166, 6, 67, 234, 0, 210, 233, 255, 18, 237, 9, 106, 66, 65, 127, 170, 27, 118, 85, 129, 106, 61, 213, 43, 171, 211, 148, 196, 250, 187, 52, 222, 166, 129, 230, 143, 119, 159, 28, 151, 243, 33, 230, 143, 27, 19, 102, 204, 172, 93, 91, 112, 12, 119, 206, 163, 130, 200, 227, 49, 211, 174, 66, 203, 241, 24, 147, 32, 215, 199, 226, 191, 120, 197, 239, 75, 192, 87, 17, 71, 70, 100, 72, 91, 64, 185, 125, 17, 155, 85, 243, 81, 1, 127, 112, 77, 198, 247, 135, 159, 216, 52, 27, 96, 186, 167, 250, 30, 29, 42, 225, 26, 37, 254, 81, 44, 214, 92, 149, 85, 5, 186, 7, 228, 245, 65, 212, 66, 8, 102, 140, 185, 39, 237, 115, 139, 75, 237, 224, 249, 178, 65, 125, 101, 57, 38, 55, 215, 141, 127, 70, 1, 13, 211, 85, 252, 220, 67, 122, 191, 191, 237, 53, 210, 54, 90, 37, 98, 128, 171, 60, 153, 142, 203, 71, 210, 32, 126, 132, 47, 142, 59, 234, 48, 234, 61, 70, 80, 165, 212, 222, 179, 66, 219, 130, 94, 178, 172, 10, 42, 20, 125, 113, 60, 72, 170, 185, 14, 191, 48, 127, 18, 201, 184, 222, 9, 99, 103, 217, 229, 32, 180, 55, 19, 214, 65, 18, 219, 131, 171, 4, 198, 39, 148, 86, 210, 47, 236, 66, 112, 101, 40, 247, 35, 107, 100, 142, 233, 160, 193, 60, 235, 210, 51, 233, 183, 12, 36, 247, 161, 36, 69, 151, 94, 248, 226, 6, 113, 54, 16, 67, 153, 123, 242, 106, 63, 89, 108, 90, 169, 101, 100, 159, 157, 236, 232, 93, 78, 135, 187, 102, 150, 76, 44, 73, 226, 143, 142, 206, 156, 45, 89, 37, 158, 104, 122, 79, 140, 226, 168, 151, 86, 229, 211, 215, 92, 146, 255, 226, 49, 176, 96, 239, 185, 194, 116, 215, 73, 142, 172, 28, 171, 106, 56, 37, 115, 248, 98, 252, 47, 121, 239, 222, 184, 50, 104, 66, 63, 128, 153, 104, 145, 152, 14, 116, 44, 142, 189, 136, 13, 199, 42, 116, 10, 218, 149, 123, 110, 144, 209, 107, 232, 210, 30, 175, 171, 121, 240, 87, 188, 196, 24, 208, 74, 27, 33, 67, 16, 222, 182, 107, 33, 116, 89, 21, 226, 197, 130, 38, 18, 55, 26, 54, 227, 225, 80, 134, 98, 164, 160, 103, 151, 93, 95, 187, 63, 247, 39, 54, 142, 114, 204, 221, 227, 8, 130, 127, 67, 168, 20, 34, 174, 238, 78, 191, 75, 145, 210, 149, 216, 102, 85, 174, 166, 147, 233, 236, 128, 215, 241, 225, 84, 227, 1, 189, 230, 67, 187, 57, 153, 19, 62, 250, 156, 235, 167, 179, 227, 49, 148, 122, 240, 173, 151, 169, 134, 150, 20, 73, 198, 103, 89, 88, 86, 124, 112, 155, 137, 51, 26, 41, 170, 225, 206, 50, 190, 160, 179, 249, 179, 114, 44, 223, 84, 4, 83, 117, 224, 118, 237, 173, 192, 161, 201, 16, 157, 246, 75, 245, 70, 4, 214, 44, 59, 20, 221, 144, 11, 119, 105, 10, 20, 189, 142, 28, 74, 232, 90, 121, 157, 234, 210, 250, 48, 172, 26, 101, 180, 167, 22, 175, 191, 25, 175, 56, 106, 25, 58, 104, 221, 200, 218, 174, 18, 235, 76, 91, 91, 18, 45, 88, 173, 95, 103, 141, 96, 58, 212, 3, 41, 53, 98, 238, 135, 46, 216, 166, 130, 13, 111, 237, 196, 167, 106, 118, 77, 199, 196, 155, 112, 253, 49, 106, 201, 48, 102, 154, 136, 17, 135, 39, 147, 173, 50, 56, 218, 0, 30, 169, 173, 51, 52, 26, 57, 224, 99, 93, 152, 22, 86, 179, 174, 60, 134, 68, 162, 86, 95, 49, 68, 188, 162, 62, 85, 126, 109, 131, 130, 93, 68, 47, 206, 35, 198, 133, 49, 65, 199, 27, 218, 36, 220, 106, 51, 56, 107, 123, 222, 179, 77, 234, 97, 250, 206, 116, 167, 21, 159, 122, 237, 154, 8, 80, 16, 215, 66, 230, 98, 36, 194, 144, 162, 124, 46, 82, 139, 180, 243, 56, 77, 125, 97, 69, 22, 149, 161, 151, 222, 154, 233, 194, 142, 84, 211, 254, 237, 224, 3, 39, 80, 3, 51, 128, 239, 2, 157, 71, 177, 104, 234, 53, 141, 16, 238, 197, 186, 206, 134, 49, 219, 118, 211, 31, 210, 77, 102, 27, 228, 120, 28, 44, 137, 190, 94, 244, 54, 152, 7, 114, 230, 95, 20, 248, 71, 1, 164, 216, 126, 89, 40, 239, 180, 43, 122, 32, 55, 99, 210, 221, 251, 203, 24, 201, 170, 129, 234, 87, 66, 114, 211, 51, 188, 252, 108, 89, 93, 102, 38, 135, 91, 76, 153, 116, 232, 197, 226, 96, 179, 140, 84, 150, 132, 230, 54, 39, 236, 2, 175, 60, 72, 163, 8, 128, 146, 227, 122, 41, 130, 164, 54, 64, 27, 202, 213, 82, 149, 17, 145, 162, 30, 250, 135, 203, 158, 197, 106, 96, 89, 47, 125, 212, 9, 52, 172, 196, 88, 145, 182, 11, 113, 230, 64, 43, 40, 55, 138, 21, 82, 38, 253, 160, 6, 215, 76, 2, 125, 5, 57, 147, 21, 41, 135, 73, 56, 149, 247, 125, 140, 78, 79, 146, 233, 210, 67, 13, 92, 211, 246, 15, 41, 176, 152, 178, 179, 115, 78, 248, 250, 20, 24, 153, 17, 52, 106, 3, 194, 90, 113, 185, 139, 103, 241, 22, 211, 86, 219, 127, 202, 97, 229, 63, 111, 186, 218, 142, 50, 79, 233, 57, 92, 6, 127, 175, 125, 143, 204, 183, 164, 55, 10, 248, 215, 225, 87, 90, 38, 80, 213, 86, 15, 169, 40, 80, 247, 107, 18, 192, 205, 206, 188, 229, 199, 238, 212, 155, 55, 208, 219, 177, 117, 234, 43, 231, 136, 251, 55, 6, 55, 71, 120, 78, 255, 198, 96, 138, 136, 206, 44, 189, 13, 27, 232, 121, 191, 47, 138, 126, 13, 227, 88, 126, 145, 22, 175, 49, 229, 234, 48, 217, 221, 90, 15, 247, 185, 78, 212, 211, 219, 3, 254, 236, 192, 165, 195, 188, 33, 81, 101, 75, 121, 104, 192, 86, 237, 77, 42, 129, 207, 40, 67, 234, 69, 210, 232, 22, 235, 46, 120, 135, 56, 47, 249, 162, 39, 29, 218, 38, 6, 5, 177, 206, 14, 109, 88, 73, 46, 130, 34, 52, 44, 95, 246, 136, 171, 176, 113, 35, 240, 217, 207, 230, 177, 73, 246, 60, 83, 206, 116, 170, 172, 244, 39, 215, 148, 225, 129, 186, 244, 46, 80, 57, 7, 188, 173, 74, 29, 31, 81, 6, 140, 126, 59, 49, 43, 225, 121, 202, 196, 224, 17, 251, 204, 100, 58, 93, 239, 116, 153, 156, 183, 234, 190, 241, 83, 177, 64, 171, 129, 116, 42, 102, 237, 188, 150, 7, 111, 98, 129, 29, 176, 7, 47, 91, 167, 151, 132, 112, 164, 177, 156, 193, 45, 155, 7, 81, 57, 149, 187, 74, 182, 202, 232, 46, 127, 135, 210, 239, 199, 26, 72, 71, 175, 25, 86, 73, 63, 95, 252, 171, 208, 1, 124, 210, 94, 182, 10, 212, 142, 191, 83, 201, 238, 47, 232, 210, 51, 244, 220, 57, 235, 239, 177, 71, 116, 64, 0, 156, 19, 28, 199, 165, 102, 2, 64, 75, 15, 202, 79, 230, 203, 99, 55, 115, 54, 224, 141, 230, 159, 59, 8, 79, 206, 8, 138, 209, 44, 52, 43, 239, 11, 223, 176, 182, 233, 64, 142, 102, 214, 134, 87, 83, 206, 94, 189, 23, 18, 162, 230, 225, 87, 79, 172, 61, 104, 102, 80, 23, 208, 194, 48, 51, 195, 106, 58, 92, 126, 76, 118, 12, 12, 207, 147, 209, 185, 78, 89, 109, 173, 66, 218, 98, 101, 185, 67, 82, 31, 80, 203, 244, 186, 193, 125, 151, 79, 251, 32, 137, 203, 118, 94, 39, 155, 11, 142, 132, 56, 8, 245, 57, 29, 31, 171, 131, 150, 120, 23, 109, 222, 167, 25, 126, 5, 183, 253, 68, 8, 174, 180, 121, 100, 213, 220, 11, 214, 97, 250, 83, 107, 250, 240, 66, 29, 127, 144, 177, 206, 41, 186, 88, 76, 78, 114, 73, 133, 68, 150, 250, 252, 104, 152, 76, 164, 77, 211, 108, 110, 200, 146, 112, 240, 149, 2, 121, 196, 134, 163, 23, 145, 28, 199, 233, 224, 138, 99, 169, 186, 146, 24, 237, 212, 151, 12, 76, 32, 219, 137, 140, 17, 54, 254, 248, 15, 29, 91, 33, 15, 130, 152, 48, 71, 252, 45, 202, 196, 1, 124, 62, 230, 129, 93, 184, 147, 19, 10, 90, 236, 146, 30, 48, 33, 89, 58, 152, 196, 98, 204, 79, 99, 169, 223, 66, 122, 4, 245, 220, 124, 248, 239, 213, 104, 247, 173, 69, 20, 93, 230, 238, 113, 218, 179, 132, 25, 217, 82, 50, 140, 184, 55, 60, 9, 164, 31, 85, 105, 135, 171, 52, 119, 232, 142, 164, 34, 176, 1, 39, 91, 197, 207, 187, 94, 143, 110, 13, 145, 44, 8, 111, 158, 98, 6, 70, 35, 31, 184, 29, 79, 252, 35, 128, 183, 38, 40, 182, 97, 96, 48, 63, 227, 113, 189, 252, 139, 163, 58, 47, 174, 96, 163, 160, 112, 240, 181, 28, 227, 198, 58, 161, 141, 202, 98, 220, 36, 178, 112, 147, 123, 129, 166, 234, 51, 21, 177, 198, 229, 124, 208, 249, 6, 179, 191, 179, 12, 220, 121, 110, 239, 33, 24, 48, 249, 80, 161, 36, 192, 205, 178, 93, 124, 135, 118, 130, 117, 84, 171, 119, 185, 95, 26, 219, 181, 159, 83, 55, 61, 10, 87, 111, 20, 42, 54, 160, 100, 12, 197, 109, 157, 145, 121, 125, 146, 187, 40, 242, 176, 251, 102, 31, 249, 193, 246, 51, 19, 134, 58, 67, 203, 5, 74, 53, 40, 207, 48, 242, 3, 54, 221, 237, 26, 89, 127, 116, 27, 190, 169, 85, 245, 26, 141, 79, 124, 145, 103, 114, 200, 152, 35, 206, 84, 160, 5, 213, 5, 174, 190, 32, 172, 59, 156, 170, 232, 208, 82, 94, 54, 113, 105, 232, 12, 118, 76, 84, 17, 186, 21, 163, 116, 252, 229, 184, 212, 149, 231, 171, 255, 86, 115, 204, 165, 0, 35, 120, 46, 88, 159, 41, 13, 47, 231, 98, 53, 98, 46, 101, 81, 93, 167, 163, 23, 68, 103, 63, 102, 12, 46, 22, 93, 48, 125, 189, 152, 154, 202, 189, 98, 212, 229, 202, 242, 16, 190, 253, 71, 19, 11, 222, 78, 129, 65, 9, 186, 253, 7, 113, 71, 150, 139, 191, 235, 200, 236, 38, 131, 6, 38, 102, 68, 62, 99, 123, 240, 236, 63, 23, 61, 15, 52, 21, 145, 111, 91, 64, 216, 73, 208, 212, 29, 39, 246, 60, 131, 39, 66, 133, 202, 203, 244, 160, 192, 202, 113, 179, 22, 48, 213, 14, 212, 62, 150, 184, 122, 21, 20, 12, 223, 97, 21, 133, 52, 194, 141, 228, 137, 82, 51, 93, 69, 226, 126, 107, 163, 94, 202, 251, 225, 35, 56, 137, 98, 45, 123, 37, 111, 114, 203, 107, 123, 73, 231, 100, 172, 91, 205, 168, 150, 53, 94, 253, 82, 226, 31, 244, 188, 219, 147, 145, 135, 221, 252, 186, 212, 158, 114, 47, 69, 214, 159, 136, 95, 82, 93, 242, 204, 184, 66, 221, 94, 70, 220, 5, 114, 240, 149, 70, 77, 201, 31, 11, 213, 150, 150, 75, 159, 18, 95, 152, 74, 193, 51, 128, 66, 174, 73, 169, 200, 144, 140, 109, 196, 234, 23, 235, 74, 47, 109, 235, 255, 170, 50, 82, 40, 58, 255, 115, 182, 122, 61, 252, 126, 117, 119, 43, 9, 57, 162, 61, 196, 4, 75, 135, 235, 126, 22, 147, 175, 54, 15, 183, 33, 131, 96, 153, 145, 1, 30, 137, 230, 10, 191, 236, 142, 106, 204, 63, 206, 221, 15, 211, 66, 72, 52, 143, 35, 117, 229, 22, 232, 130, 144, 2, 170, 180, 84, 154, 147, 232, 66, 30, 188, 119, 185, 25, 1, 181, 240, 100, 208, 40, 170, 175, 15, 235, 111, 95, 153, 13, 181, 154, 120, 189, 116, 220, 183, 217, 145, 128, 96, 175, 39, 140, 183, 109, 231, 157, 115, 185, 251, 170, 178, 29, 174, 164, 244, 196, 82, 154, 179, 67, 231, 89, 35, 255, 111, 59, 125, 112, 176, 158, 150, 224, 198, 120, 183, 221, 48, 10, 174, 111, 252, 149, 77, 197, 186, 240, 100, 216, 175, 32, 15, 129, 243, 191, 242, 162, 53, 247, 239, 26, 239, 223, 95, 169, 157, 35, 227, 29, 34, 165, 113, 22, 50, 174, 41, 203, 57, 210, 86, 68, 99, 239, 138, 194, 14, 95, 208, 160, 6, 62, 61, 203, 230, 182, 21, 98, 213, 14, 30, 36, 228, 21, 252, 235, 238, 119, 81, 50, 6, 162, 208, 189, 229, 133, 27, 144, 192, 87, 95, 107, 206, 127, 85, 65, 91, 213, 73, 17, 106, 200, 162, 182, 194, 105, 135, 65, 103, 176, 179, 205, 230, 217, 18, 144, 169, 23, 15, 130, 86, 50, 207, 37, 47, 194, 38, 134, 158, 163, 50, 46, 178, 132, 127, 248, 178, 226, 80, 225, 52, 225, 121, 167, 203, 252, 135, 174, 69, 0, 37, 53, 92, 78, 225, 151, 237, 207, 72, 81, 242, 88, 10, 190, 2, 46, 221, 177, 199, 242, 203, 182, 72, 234, 156, 201, 86, 179, 88, 95, 229, 149, 114, 57, 194, 62, 45, 80, 244, 147, 180, 248, 240, 249, 89, 253, 64, 78, 114, 195, 138, 49, 3, 182, 145, 103, 93, 115, 15, 214, 249, 191, 203, 51, 17, 97, 11, 1, 57, 174, 162, 48, 169, 15, 172, 46, 180, 100, 144, 123, 242, 25, 104, 6, 33, 106, 210, 157, 163, 45, 63, 233, 210, 123, 203, 171, 108, 88, 100, 119, 120, 254, 218, 190, 20, 202, 219, 203, 189, 119, 207, 40, 184, 124, 236, 40, 213, 248, 191, 251, 53, 105, 35, 164, 86, 110, 132, 215, 59, 28, 4, 61, 70, 97, 237, 41, 253, 225, 24, 163, 226, 20, 144, 109, 65, 142, 63, 133, 238, 178, 70, 229, 64, 96, 86, 94, 116, 134, 137, 94, 227, 20, 34, 210, 88, 66, 143, 73, 219, 8, 59, 200, 40, 166, 31, 88, 79, 85, 2, 195, 114, 135, 11, 166, 19, 184, 179, 252, 56, 71, 238, 7, 15, 206, 32, 229, 12, 167, 63, 4, 254, 221, 225, 151, 251, 5, 206, 51, 221, 128, 142, 114, 73, 171, 76, 66, 210, 93, 239, 245, 147, 145, 219, 181, 147, 39, 187, 160, 37, 248, 211, 93, 124, 5, 9, 1, 210, 160, 175, 195, 2, 26, 243, 126, 104, 151, 89, 83, 86, 147, 251, 220, 72, 241, 199, 110, 103, 10, 190, 50, 230, 24, 245, 216, 50, 64, 193, 116, 54, 60, 76, 178, 209, 87, 77, 31, 130, 255, 175, 227, 48, 241, 5, 223, 255, 78, 4, 235, 171, 187, 100, 238, 114, 57, 238, 53, 4, 215, 40, 196, 51, 182, 77, 130, 22, 14, 192, 77, 165, 11, 72, 98, 153, 88, 58, 131, 152, 31, 104, 174, 11, 5, 23, 85, 66, 17, 210, 29, 185, 30, 210, 180, 212, 167, 106, 248, 98, 110, 148, 105, 16, 34, 65, 116, 80, 37, 167, 122, 7, 182, 96, 62, 22, 87, 168, 178, 30, 19, 40, 214, 164, 152, 169, 136, 77, 242, 39, 85, 237, 218, 213, 126, 165, 22, 15, 198, 84, 10, 215, 203, 166, 157, 203, 29, 52, 78, 73, 92, 165, 49, 228, 54, 102, 174, 254, 55, 80, 22, 252, 104, 225, 244, 247, 73, 184, 81, 152, 248, 128, 40, 82, 50, 114, 167, 0, 104, 247, 75, 76, 1, 106, 133, 132, 124, 125, 27, 155, 70, 108, 238, 79, 149, 142, 131, 44, 21, 62, 224, 79, 111, 191, 253, 188, 38, 32, 248, 173, 53, 252, 132, 202, 164, 187, 31, 192, 218, 200, 98, 201, 211, 212, 221, 57, 164, 175, 197, 108, 44, 47, 47, 12, 1, 15, 57, 64, 164, 222, 242, 23, 83, 205, 91, 139, 138, 161, 194, 235, 168, 240, 52, 119, 202, 196, 6, 49, 76, 103, 207, 180, 173, 23, 78, 126, 44, 228, 171, 101, 196], - [180, 168, 253, 81, 225, 24, 137, 56, 49, 41, 41, 75, 187, 113, 54, 117, 20, 51, 29, 24, 141, 116, 46, 94, 90, 218, 64, 120, 62, 146, 92, 81, 155, 149, 106, 138, 7, 147, 93, 149, 64, 148, 183, 117, 68, 205, 17, 200, 139, 253, 144, 212, 73, 179, 27, 189, 218, 76, 107, 233, 186, 82, 48, 36, 225, 116, 146, 106, 241, 14, 213, 197, 10, 57, 159, 247, 230, 92, 75, 22, 198, 30, 100, 118, 112, 18, 10, 81, 223, 4, 170, 140, 222, 95, 31, 84, 147, 23, 88, 233, 192, 188, 32, 117, 62, 154, 218, 82, 167, 171, 134, 55, 221, 195, 211, 175, 247, 0, 199, 166, 217, 188, 144, 97, 116, 106, 44, 60, 131, 37, 115, 176, 215, 160, 80, 142, 4, 67, 163, 139, 217, 222, 238, 201, 18, 217, 22, 171, 227, 187, 88, 3, 238, 57, 97, 60, 89, 254, 141, 232, 124, 56, 14, 183, 208, 168, 213, 73, 159, 214, 187, 251, 74, 3, 58, 6, 172, 151, 250, 238, 142, 94, 0, 222, 221, 199, 107, 59, 206, 73, 86, 81, 120, 205, 127, 169, 82, 208, 110, 95, 99, 70, 9, 212, 113, 91, 231, 96, 168, 13, 232, 148, 99, 239, 246, 138, 152, 86, 147, 122, 35, 102, 139, 155, 9, 62, 14, 174, 112, 143, 147, 141, 122, 7, 30, 18, 43, 90, 17, 90, 117, 7, 123, 70, 180, 201, 120, 212, 19, 29, 255, 192, 178, 14, 160, 84, 5, 27, 63, 70, 173, 214, 90, 2, 192, 51, 72, 133, 183, 37, 218, 120, 66, 219, 132, 239, 137, 232, 197, 64, 199, 192, 232, 116, 133, 218, 184, 137, 103, 252, 68, 228, 231, 249, 228, 209, 222, 32, 34, 53, 105, 232, 223, 47, 61, 63, 92, 125, 158, 243, 221, 233, 73, 40, 180, 133, 242, 21, 58, 158, 227, 123, 226, 181, 116, 96, 11, 99, 83, 124, 146, 19, 196, 104, 89, 54, 240, 90, 112, 163, 97, 236, 106, 233, 49, 41, 96, 137, 201, 136, 42, 165, 174, 176, 140, 114, 238, 131, 108, 118, 35, 130, 13, 71, 166, 112, 244, 128, 236, 243, 224, 51, 129, 81, 115, 186, 40, 20, 223, 234, 142, 78, 65, 51, 109, 97, 13, 172, 180, 102, 229, 221, 57, 211, 121, 151, 141, 251, 196, 166, 250, 178, 135, 246, 33, 153, 255, 27, 229, 113, 69, 165, 70, 105, 106, 77, 42, 63, 203, 107, 102, 19, 198, 130, 216, 86, 222, 12, 165, 61, 2, 110, 239, 208, 143, 193, 105, 21, 214, 51, 52, 46, 158, 128, 4, 231, 162, 181, 211, 33, 39, 4, 26, 103, 61, 167, 158, 65, 118, 3, 130, 79, 155, 101, 144, 152, 194, 174, 237, 177, 220, 22, 16, 246, 254, 21, 137, 214, 174, 75, 87, 149, 151, 103, 49, 75, 76, 120, 162, 171, 188, 168, 130, 107, 43, 187, 62, 248, 204, 193, 196, 185, 4, 138, 188, 232, 165, 26, 74, 194, 116, 69, 161, 210, 113, 3, 234, 125, 29, 189, 211, 212, 145, 96, 96, 108, 27, 237, 25, 128, 196, 112, 33, 90, 255, 159, 56, 56, 229, 32, 72, 9, 141, 46, 131, 205, 121, 196, 99, 198, 140, 222, 48, 67, 79, 58, 69, 150, 94, 100, 69, 181, 228, 153, 2, 193, 199, 248, 217, 171, 24, 74, 119, 87, 62, 152, 220, 162, 23, 123, 92, 127, 226, 145, 183, 175, 36, 105, 35, 70, 153, 16, 205, 234, 179, 51, 244, 200, 8, 111, 25, 191, 1, 80, 69, 135, 208, 162, 146, 192, 164, 161, 217, 77, 240, 177, 25, 253, 123, 220, 68, 80, 36, 222, 109, 16, 86, 73, 69, 121, 36, 160, 127, 98, 83, 22, 118, 15, 126, 71, 187, 91, 231, 84, 128, 252, 72, 235, 40, 95, 234, 240, 6, 76, 25, 60, 184, 6, 86, 106, 255, 198, 160, 55, 93, 238, 254, 124, 215, 204, 237, 231, 189, 173, 85, 141, 115, 123, 23, 221, 58, 182, 43, 207, 119, 136, 250, 12, 204, 77, 231, 93, 244, 81, 185, 40, 202, 196, 102, 9, 93, 95, 179, 11, 181, 116, 121, 58, 144, 67, 11, 46, 139, 131, 255, 163, 22, 194, 36, 54, 200, 75, 134, 138, 166, 155, 105, 220, 212, 36, 59, 206, 88, 60, 131, 73, 255, 154, 100, 53, 63, 145, 218, 226, 3, 125, 181, 132, 194, 207, 31, 84, 210, 209, 247, 94, 224, 0, 27, 143, 72, 199, 16, 121, 11, 96, 240, 149, 251, 183, 21, 100, 127, 15, 77, 182, 37, 200, 159, 145, 88, 124, 42, 131, 114, 145, 88, 147, 149, 95, 120, 244, 185, 180, 52, 76, 55, 251, 119, 63, 18, 79, 69, 213, 67, 167, 148, 14, 232, 99, 253, 155, 251, 108, 2, 52, 45, 207, 85, 96, 191, 225, 202, 94, 181, 205, 63, 202, 217, 138, 170, 241, 162, 68, 65, 73, 50, 233, 218, 162, 17, 0, 60, 124, 139, 114, 202, 157, 156, 173, 172, 16, 146, 179, 12, 63, 19, 75, 78, 146, 78, 165, 202, 183, 206, 38, 1, 114, 128, 203, 175, 173, 41, 38, 67, 115, 110, 176, 179, 126, 7, 153, 53, 164, 242, 158, 103, 179, 181, 237, 61, 191, 179, 84, 148, 226, 108, 1, 53, 233, 129, 129, 82, 14, 187, 108, 171, 161, 3, 50, 167, 160, 10, 202, 197, 207, 145, 207, 165, 141, 112, 255, 173, 231, 159, 101, 111, 113, 26, 148, 127, 32, 166, 91, 225, 162, 139, 94, 158, 190, 213, 77, 41, 97, 237, 253, 145, 167, 85, 177, 67, 66, 16, 222, 0, 10, 157, 98, 126, 2, 253, 35, 95, 169, 173, 21, 153, 250, 145, 120, 61, 9, 96, 197, 105, 91, 224, 48, 59, 157, 247, 163, 120, 210, 106, 176, 154, 0, 44, 81, 216, 244, 48, 0, 24, 110, 95, 186, 176, 75, 252, 230, 36, 75, 141, 37, 22, 157, 26, 112, 234, 216, 202, 220, 212, 164, 221, 3, 162, 139, 167, 79, 150, 47, 229, 42, 155, 139, 215, 61, 186, 214, 231, 233, 123, 67, 114, 217, 249, 55, 132, 54, 26, 144, 133, 230, 137, 136, 115, 244, 187, 20, 175, 121, 137, 95, 115, 192, 221, 15, 25, 6, 21, 178, 46, 199, 26, 71, 62, 162, 131, 57, 42, 126, 74, 79, 254, 77, 202, 119, 57, 163, 49, 16, 181, 192, 32, 152, 72, 143, 113, 104, 241, 55, 238, 146, 83, 19, 203, 141, 8, 27, 0, 16, 142, 133, 129, 196, 39, 10, 67, 111, 14, 211, 146, 155, 108, 1, 88, 164, 13, 103, 230, 252, 44, 86, 133, 54, 87, 120, 232, 153, 207, 63, 70, 34, 2, 47, 105, 99, 190, 174, 135, 178, 183, 121, 131, 182, 228, 105, 102, 57, 130, 79, 70, 40, 49, 116, 6, 84, 142, 43, 236, 131, 109, 46, 17, 25, 251, 105, 138, 52, 226, 31, 244, 23, 184, 214, 49, 220, 199, 110, 224, 138, 45, 100, 122, 50, 165, 221, 113, 28, 176, 241, 109, 74, 131, 83, 198, 95, 43, 227, 10, 91, 239, 198, 240, 77, 253, 63, 188, 13, 33, 101, 180, 75, 137, 146, 136, 157, 201, 158, 231, 120, 147, 35, 13, 149, 171, 115, 12, 25, 249, 166, 106, 234, 239, 96, 24, 168, 35, 71, 176, 234, 111, 230, 62, 248, 89, 191, 153, 4, 119, 46, 88, 49, 193, 153, 76, 180, 189, 65, 132, 13, 188, 214, 137, 218, 127, 100, 216, 174, 213, 146, 237, 51, 137, 143, 108, 254, 141, 0, 67, 55, 18, 89, 107, 29, 130, 166, 76, 46, 2, 32, 157, 102, 254, 97, 154, 188, 239, 101, 155, 221, 106, 236, 27, 21, 56, 127, 214, 195, 111, 78, 235, 131, 247, 102, 205, 56, 210, 12, 111, 166, 239, 61, 204, 75, 156, 202, 227, 126, 246, 177, 178, 96, 77, 124, 101, 208, 39, 251, 0, 187, 3, 131, 215, 118, 51, 185, 249, 80, 28, 219, 222, 255, 208, 119, 81, 215, 129, 254, 237, 243, 65, 108, 15, 195, 93, 76, 115, 17, 232, 14, 183, 30, 71, 94, 178, 108, 145, 115, 44, 255, 128, 195, 124, 218, 203, 63, 166, 43, 178, 92, 101, 226, 122, 135, 173, 94, 122, 80, 65, 143, 96, 102, 110, 230, 101, 74, 120, 176, 56, 9, 109, 63, 156, 187, 15, 30, 91, 173, 16, 142, 77, 218, 10, 235, 153, 251, 189, 218, 121, 232, 243, 112, 34, 109, 136, 187, 6, 15, 92, 77, 221, 81, 19, 103, 141, 62, 156, 230, 225, 230, 51, 23, 92, 195, 9, 197, 44, 48, 170, 192, 199, 164, 50, 225, 76, 74, 46, 191, 160, 72, 47, 7, 26, 241, 63, 19, 243, 166, 207, 241, 27, 239, 50, 254, 214, 100, 175, 120, 45, 0, 38, 59, 240, 94, 134, 151, 219, 161, 155, 246, 89, 86, 221, 35, 97, 88, 227, 46, 13, 93, 155, 183, 212, 40, 3, 219, 189, 50, 152, 248, 252, 205, 6, 235, 150, 45, 9, 199, 28, 85, 11, 134, 64, 50, 110, 176, 219, 199, 241, 80, 13, 217, 223, 29, 245, 216, 196, 205, 183, 156, 62, 52, 23, 98, 90, 240, 149, 116, 123, 63, 138, 105, 250, 9, 191, 209, 32, 239, 234, 23, 196, 253, 152, 93, 101, 20, 86, 8, 70, 168, 104, 7, 83, 97, 126, 59, 193, 212, 253, 25, 71, 172, 158, 172, 2, 244, 127, 88, 212, 58, 239, 39, 179, 169, 102, 201, 146, 145, 39, 157, 242, 140, 235, 126, 210, 60, 169, 83, 214, 38, 55, 185, 137, 69, 65, 248, 211, 65, 41, 198, 179, 224, 27, 173, 117, 186, 135, 182, 163, 234, 98, 15, 213, 101, 73, 20, 208, 191, 100, 22, 194, 70, 216, 222, 2, 91, 122, 141, 9, 69, 155, 39, 176, 47, 79, 51, 169, 89, 32, 60, 203, 99, 189, 89, 213, 229, 51, 237, 96, 249, 118, 244, 198, 32, 64, 157, 228, 227, 249, 242, 123, 65, 173, 126, 71, 217, 12, 128, 77, 126, 222, 94, 64, 163, 116, 41, 215, 199, 103, 50, 16, 117, 144, 3, 46, 253, 217, 215, 139, 165, 245, 67, 158, 247, 236, 91, 72, 101, 171, 146, 255, 125, 147, 69, 31, 103, 182, 94, 13, 71, 130, 212, 75, 196, 219, 218, 74, 157, 15, 18, 86, 169, 107, 195, 75, 82, 246, 205, 255, 231, 132, 231, 241, 21, 184, 213, 219, 126, 146, 164, 141, 147, 41, 245, 225, 241, 152, 86, 195, 122, 151, 62, 3, 240, 142, 57, 221, 141, 91, 95, 245, 8, 29, 177, 109, 189, 244, 76, 157, 245, 11, 73, 168, 33, 172, 142, 125, 215, 107, 94, 52, 21, 220, 82, 125, 210, 113, 178, 80, 99, 127, 94, 116, 99, 194, 209, 62, 222, 115, 116, 229, 109, 123, 183, 242, 23, 86, 97, 240, 192, 243, 241, 58, 186, 244, 216, 50, 205, 78, 69, 69, 243, 167, 230, 169, 131, 41, 113, 61, 103, 181, 20, 52, 26, 244, 108, 115, 0, 84, 58, 166, 15, 157, 209, 64, 13, 247, 95, 156, 182, 10, 125, 141, 226, 214, 37, 46, 172, 249, 84, 11, 131, 113, 49, 238, 201, 191, 161, 224, 59, 237, 86, 140, 204, 200, 34, 198, 142, 179, 15, 52, 137, 138, 21, 154, 76, 222, 161, 74, 2, 43, 115, 150, 24, 255, 20, 141, 169, 183, 185, 140, 117, 219, 247, 58, 86, 239, 76, 27, 74, 245, 157, 210, 164, 38, 170, 117, 32, 192, 105, 151, 42, 200, 155, 30, 99, 173, 247, 181, 37, 186, 21, 250, 127, 40, 225, 70, 198, 29, 62, 44, 15, 20, 22, 81, 244, 125, 190, 24, 28, 27, 126, 249, 179, 171, 218, 210, 186, 133, 27, 126, 197, 108, 169, 125, 4, 224, 108, 55, 145, 134, 8, 74, 186, 127, 161, 9, 207, 135, 19, 138, 62, 36, 109, 152, 117, 8, 187, 20, 17, 218, 97, 193, 31, 132, 26, 125, 115, 124, 236, 227, 205, 50, 249, 166, 160, 56, 176, 132, 161, 45, 114, 71, 235, 203, 43, 185, 96, 104, 132, 69, 42, 180, 154, 158, 140, 212, 70, 63, 220, 165, 162, 30, 101, 115, 108, 194, 139, 138, 50, 218, 143, 234, 81, 198, 35, 107, 242, 64, 91, 248, 129, 246, 208, 159, 58, 237, 147, 248, 197, 149, 33, 55, 199, 10, 134, 99, 170, 242, 18, 7, 152, 173, 162, 198, 122, 183, 250, 161, 247, 162, 17, 242, 64, 217, 46, 66, 70, 232, 200, 120, 186, 218, 253, 170, 179, 33, 66, 110, 113, 28, 71, 163, 103, 244, 207, 239, 73, 209, 90, 22, 122, 160, 90, 35, 189, 119, 168, 155, 122, 134, 97, 127, 87, 104, 165, 231, 146, 92, 165, 25, 153, 212, 176, 57, 76, 170, 173, 32, 221, 164, 2, 144, 168, 91, 63, 218, 236, 217, 208, 208, 110, 236, 54, 80, 2, 222, 79, 152, 254, 29, 255, 158, 13, 173, 211, 222, 218, 202, 178, 228, 170, 207, 16, 125, 140, 106, 178, 227, 107, 102, 127, 53, 159, 243, 31, 56, 46, 171, 198, 244, 135, 207, 60, 165, 239, 200, 19, 210, 136, 206, 154, 75, 124, 244, 155, 158, 96, 88, 109, 114, 38, 88, 180, 249, 84, 15, 74, 221, 3, 213, 90, 219, 48, 238, 130, 98, 239, 7, 138, 193, 49, 118, 142, 149, 53, 133, 163, 152, 2, 34, 35, 48, 93, 199, 160, 52, 225, 83, 233, 229, 222, 200, 31, 126, 157, 141, 157, 62, 131, 255, 94, 177, 189, 185, 145, 175, 38, 126, 7, 160, 190, 193, 134, 48, 239, 51, 212, 153, 23, 79, 227, 119, 248, 115, 229, 221, 176, 69, 40, 214, 14, 58, 190, 153, 137, 23, 183, 87, 23, 170, 80, 191, 80, 238, 152, 138, 57, 239, 78, 29, 106, 173, 130, 72, 27, 40, 185, 209, 197, 155, 33, 33, 37, 163, 178, 138, 85, 120, 63, 245, 125, 42, 141, 160, 245, 201, 37, 182, 125, 21, 56, 33, 97, 193, 128, 164, 47, 218, 122, 124, 125, 247, 196, 117, 245, 243, 213, 57, 118, 247, 93, 51, 27, 181, 112, 152, 240, 231, 41, 26, 138, 210, 209, 194, 30, 196, 103, 65, 204, 0, 140, 152, 116, 186, 200, 42, 23, 78, 187, 88, 235, 12, 211, 190, 109, 196, 222, 143, 235, 19, 181, 119, 181, 71, 82, 62, 17, 133, 117, 196, 32, 156, 144, 31, 93, 64, 55, 252, 119, 119, 171, 186, 9, 199, 226, 16, 252, 210, 182, 235, 127, 240, 254, 186, 9, 28, 227, 62, 171, 251, 27, 9, 237, 126, 220, 154, 7, 113, 247, 20, 214, 242, 104, 147, 147, 54, 1, 207, 107, 211, 177, 34, 101, 100, 242, 48, 136, 209, 251, 178, 22, 10, 66, 177, 16, 69, 137, 209, 40, 219, 251, 103, 237, 51, 68, 71, 205, 49, 54, 40, 119, 150, 19, 47, 191, 37, 7, 150, 16, 183, 70, 166, 147, 53, 157, 95, 238, 104, 173, 59, 232, 44, 171, 131, 122, 17, 168, 129, 166, 37, 9, 213, 65, 230, 36, 242, 198, 13, 122, 171, 127, 162, 244, 193, 49, 222, 69, 66, 72, 143, 248, 101, 64, 53, 52, 202, 3, 152, 245, 190, 243, 28, 72, 23, 19, 2, 203, 203, 190, 38, 97, 159, 249, 59, 50, 151, 49, 233, 136, 26, 97, 82, 69, 12, 61, 195, 118, 216, 34, 61, 172, 237, 239, 218, 165, 57, 57, 85, 76, 189, 192, 243, 41, 64, 212, 64, 45, 189, 56, 10, 93, 250, 43, 227, 186, 249, 31, 171, 21, 211, 143, 116, 185, 94, 189, 52, 139, 244, 22, 129, 206, 175, 22, 250, 31, 44, 15, 106, 190, 227, 0, 142, 244, 70, 93, 122, 93, 2, 86, 234, 116, 187, 157, 242, 124, 69, 201, 174, 249, 244, 6, 118, 109, 158, 215, 101, 73, 219, 83, 239, 211, 228, 19, 197, 230, 47, 143, 215, 123, 62, 68, 102, 8, 98, 244, 251, 120, 206, 63, 168, 94, 87, 110, 130, 224, 249, 93, 73, 186, 62, 80, 250, 249, 128, 103, 80, 17, 51, 31, 135, 133, 49, 142, 250, 150, 203, 188, 28, 33, 106, 203, 9, 134, 134, 187, 129, 13, 76, 220, 179, 161, 66, 104, 75, 216, 105, 91, 172, 33, 140, 150, 145, 233, 17, 131, 15, 176, 133, 211, 31, 61, 51, 163, 120, 233, 68, 19, 129, 123, 61, 9, 164, 49, 237, 7, 177, 139, 88, 70, 97, 134, 4, 170, 90, 154, 46, 35, 162, 4, 121, 23, 113, 102, 104, 139, 128, 1, 127, 169, 41, 51, 206, 128, 72, 61, 202, 147, 225, 186, 167, 53, 198, 143, 40, 151, 221, 215, 57, 14, 85, 103, 242, 250, 20, 168, 114, 175, 64, 159, 75, 158, 204, 33, 238, 96, 176, 59, 83, 239, 49, 191, 154, 109, 68, 91, 16, 201, 5, 87, 127, 224, 144, 158, 128, 182, 9, 153, 235, 209, 52, 32, 77, 137, 18, 152, 34, 240, 195, 200, 149, 50, 29, 201, 31, 116, 180, 79, 151, 19, 180, 121, 217, 224, 209, 239, 112, 214, 199, 104, 57, 162, 130, 109, 16, 25, 89, 106, 166, 10, 71, 114, 128, 130, 56, 194, 134, 76, 21, 107, 253, 103, 126, 11, 166, 1, 136, 95, 252, 230, 167, 150, 15, 242, 242, 167, 178, 182, 95, 244, 160, 194, 14, 167, 52, 78, 99, 119, 238, 202, 167, 106, 52, 94, 250, 206, 209, 250, 246, 73, 160, 36, 101, 191, 99, 28, 95, 59, 53, 28, 160, 21, 62, 117, 228, 34, 244, 152, 74, 160, 178, 124, 216, 103, 208, 142, 120, 181, 80, 219, 164, 74, 233, 186, 83, 240, 18, 213, 190, 144, 208, 206, 122, 225, 10, 85, 138, 161, 108, 190, 13, 80, 54, 219, 18, 242, 197, 38, 25, 233, 91, 66, 203, 208, 92, 185, 113, 73, 96, 233, 8, 181, 243, 140, 126, 153, 83, 105, 74, 153, 80, 72, 152, 23, 182, 90, 102, 95, 2, 176, 177, 57, 24, 144, 95, 215, 245, 133, 164, 90, 170, 72, 80, 74, 173, 92, 208, 100, 184, 245, 88, 70, 47, 63, 153, 77, 154, 46, 199, 76, 41, 26, 148, 96, 114, 112, 95, 124, 96, 163, 214, 196, 131, 205, 86, 212, 84, 135, 49, 95, 236, 253, 195, 133, 138, 28, 95, 138, 59, 1, 181, 37, 191, 146, 205, 33, 45, 92, 156, 232, 190, 90, 39, 13, 201, 253, 213, 107, 56, 147, 205, 53, 250, 162, 249, 31, 235, 140, 55, 206, 251, 76, 213, 125, 207, 131, 172, 95, 222, 251, 209, 123, 151, 18, 223, 142, 146, 13, 244, 122, 197, 104, 213, 174, 92, 143, 134, 17, 26, 169, 126, 209, 42, 69, 102, 134, 57, 190, 4, 207, 76, 0, 4, 165, 111, 250, 52, 62, 209, 76, 82, 14, 217, 185, 78, 122, 153, 35, 164, 11, 33, 48, 0, 146, 207, 6, 45, 183, 163, 145, 6, 158, 177, 158, 165, 43, 239, 116, 188, 82, 96, 6, 15, 236, 124, 57, 236, 126, 113, 221, 64, 175, 121, 143, 9, 100, 81, 238, 172, 8, 4, 196, 231, 74, 172, 27, 103, 151, 246, 2, 228, 225, 219, 96, 165, 148, 86, 137, 223, 25, 103, 205, 209, 201, 192, 198, 132, 168, 52, 245, 238, 18, 102, 52, 214, 53, 233, 87, 249, 196, 255, 27, 193, 97, 92, 177, 6, 123, 114, 13, 87, 203, 216, 13, 61, 229, 190, 132, 45, 168, 24, 162, 181, 251, 173, 36, 205, 199, 49, 124, 251, 103, 97, 234, 111, 86, 23, 69, 25, 135, 173, 62, 175, 143, 91, 123, 149, 181, 104, 167, 14, 164, 42, 39, 117, 108, 190, 54, 246, 162, 134, 10, 49, 252, 197, 58, 117, 177, 81, 245, 162, 11, 172, 72, 161, 72, 189, 197, 200, 191, 70, 103, 76, 84, 161, 65, 55, 203, 225, 172, 143, 61, 139, 48, 228, 196, 178, 177, 122, 226, 21, 208, 7, 213, 190, 78, 182, 225, 48, 37, 113, 192, 23, 42, 72, 15, 165, 135, 100, 66, 248, 12, 68, 237, 217, 204, 181, 26, 128, 255, 12, 212, 169, 37, 124, 26, 245, 251, 94, 69, 106, 57, 239, 158, 160, 170, 201, 28, 91, 167, 248, 137, 155, 42, 128, 252, 175, 47, 33, 84, 23, 23, 143, 136, 182, 124, 78, 102, 248, 222, 139, 207, 116, 142, 240, 45, 190, 172, 72, 136, 242, 201, 174, 190, 122, 94, 128, 219, 210, 201, 75, 194, 29, 144, 38, 67, 182, 208, 229, 93, 42, 31, 6, 131, 150, 181, 123, 6, 101, 142, 188, 234, 82, 39, 12, 162, 35, 68, 31, 27, 71, 53, 198, 129, 204, 143, 166, 125, 156, 206, 136, 3, 25, 17, 135, 245, 247, 151, 90, 218, 177, 182, 162, 167, 37, 106, 59, 191, 107, 198, 193, 82, 214, 177, 45, 30, 187, 28, 223, 68, 81, 104, 70, 165, 186, 109, 126, 90, 191, 67, 169, 23, 125, 215, 248, 4, 34, 183, 124, 155, 1, 143, 204, 126, 36, 102, 38, 152, 20, 19, 107, 235, 12, 154, 69, 2, 223, 189, 219, 175, 83, 184, 181, 139, 131, 216, 26, 206, 17, 163, 193, 239, 191, 156, 194, 55, 79, 195, 21, 130, 10, 16, 82, 2, 242, 49, 213, 121, 136, 198, 133, 150, 43, 230, 120, 231, 4, 184, 109, 22, 145, 148, 53, 36, 233, 147, 112, 116, 25, 137, 129, 24, 197, 228, 113, 171, 228, 229, 76, 123, 191, 139, 5, 173, 168, 138, 167, 84, 68, 23, 246, 122, 197, 40, 182, 127, 130, 103, 58, 172, 137, 141, 97, 164, 57, 36, 142, 23, 237, 61, 211, 197, 43, 207, 191, 110, 123, 238, 113, 44, 126, 162, 65, 83, 98, 54, 121, 214, 198, 182, 253, 177, 15, 44, 90, 168, 154, 236, 63, 254, 111, 60, 75, 93, 206, 4, 232, 203, 107, 172, 129, 175, 172, 42, 68, 129, 11, 201, 125, 30, 182, 227, 50, 53, 59, 163, 211, 181, 107, 105, 58, 152, 87, 42, 120, 185, 81, 161, 25, 216, 24, 76, 34, 51, 82, 127, 163, 55, 18, 47, 168, 43, 47, 54, 86, 81, 86, 30, 133, 55, 27, 40, 33, 81, 238, 79, 234, 40, 191, 45, 161, 242, 41, 253, 201, 178, 177, 200, 210, 182, 86, 1, 215, 90, 101, 147, 176, 15, 254, 17, 37, 27, 199, 189, 135, 1, 148, 31, 77, 78, 120, 112, 35, 220, 169, 90, 177, 11, 35, 193, 190, 175, 223, 36, 47, 59, 44, 24, 194, 11, 230, 20, 22, 182, 180, 170, 222, 96, 10, 131, 94, 140, 44, 96, 74, 124, 143, 75, 208, 241, 179, 218, 181, 47, 134, 38, 190, 83, 189, 12, 108, 103, 59, 224, 187, 77, 30, 245, 4, 171, 123, 119, 114, 77, 168, 168, 131, 114, 33, 106, 252, 147, 11, 236, 250, 226, 230, 228, 253, 148, 34, 198, 229, 127, 127, 194, 125, 253, 102, 203, 186, 118, 72, 54, 42, 29, 160, 5, 106, 89, 225, 172, 158, 219, 29, 200, 227, 190, 205, 96, 251, 204, 9, 35, 157, 92, 226, 203, 142, 171, 24, 58, 189, 234, 136, 252, 215, 39, 89, 80, 220, 44, 110, 97, 248, 230, 101, 4, 181, 231, 142, 39, 150, 190, 174, 46, 251, 96, 80, 250, 82, 50, 91, 115, 72, 249, 226, 70, 49, 1, 133, 162, 108, 220, 108, 51, 22, 112, 113, 143, 249, 106, 70, 164, 208, 187, 235, 174, 188, 134, 192, 224, 97, 217, 132, 182, 224, 48, 145, 138, 242, 127, 196, 124, 200, 160, 165, 87, 186, 52, 69, 251, 11, 232, 248, 211, 146, 197, 52, 127, 212, 15, 113, 55, 109, 58, 33, 27, 124, 10, 116, 234, 9, 124, 169, 57, 159, 12, 96, 217, 156, 117, 29, 38, 203, 172, 109, 219, 184, 135, 106, 129, 147, 127, 62, 207, 34, 14, 23, 9, 186, 158, 52, 8, 168, 2, 2, 121, 166, 26, 194, 178, 113, 131, 55, 174, 214, 16, 127, 15, 98, 5, 145, 230, 77, 125, 128, 138, 237, 180, 54, 29, 162, 251, 23, 237, 96, 116, 242, 145, 5, 151, 55, 135, 15, 113, 105, 167, 226, 52, 65, 34, 110, 182, 53, 53, 4, 198, 13, 204, 35, 97, 8, 105, 132, 200, 249, 104, 117, 17, 202, 84, 199, 81, 58, 133, 198, 204, 85, 143, 21, 97, 3, 52, 247, 194, 196, 106, 167, 76, 24, 19, 148, 28, 182, 140, 62, 115, 252, 174, 83, 38, 249, 255, 133, 220, 120, 114, 134, 114, 184, 17, 181, 42, 109, 12, 239, 141, 206, 82, 16, 161, 197, 88, 173, 178, 186, 27, 171, 243, 126, 97, 2, 135, 155, 36, 3, 236, 51, 160, 225, 143, 53, 35, 73, 183, 111, 153, 60, 45, 177, 109, 177, 231, 106, 72, 194, 115, 65, 82, 181, 145, 54, 44, 240, 131, 45, 5, 88, 225, 93, 243, 191, 99, 109, 26, 110, 235, 55, 236, 40, 86, 9, 17, 126, 56, 109, 64, 218, 176, 168, 50, 188, 216, 70, 84, 86, 25, 106, 184, 39, 179, 107, 216, 51, 166, 73, 63, 193, 121, 87, 164, 47, 6, 68, 248, 249, 168, 186, 82, 253, 75, 255, 132, 156, 20, 66, 3, 180, 189, 237, 74, 29, 102, 124, 66, 187, 151, 167, 145, 245, 224, 101, 92, 254, 24, 189, 145, 207, 57, 25, 195, 215, 222, 114, 140, 237, 138, 149, 10, 80, 236, 192, 141, 247, 57, 244, 110, 103, 50, 40, 51, 137, 21, 49, 202, 110, 71, 222, 35, 215, 113, 61, 30, 47, 238, 139, 15, 68, 192, 195, 198, 120, 103, 236, 73, 44, 154, 234, 200, 73, 156, 243, 142, 105, 37, 3, 202, 11, 158, 171, 79, 150, 110, 184, 96, 206, 233, 108, 213, 129, 50, 198, 107, 51, 45, 234, 135, 6, 216, 49, 147, 149, 127, 81, 231, 107, 239, 88, 204, 99, 103, 88, 83, 223, 89, 214, 153, 183, 106, 118, 163, 162, 99, 74, 147, 182, 85, 129, 3, 180, 208, 69, 11, 111, 193, 185, 218, 48, 169, 39, 46, 172, 81, 136, 169, 252, 67, 245, 254, 82, 208, 140, 201, 59, 165, 9, 106, 243, 28, 101, 211, 205, 250, 212, 198, 237, 11, 131, 157, 95, 83, 161, 171, 226, 28, 118, 142, 147, 95, 247, 30, 109, 78, 3, 134, 67, 246, 98, 225, 192, 153, 206, 61, 82, 207, 7, 135, 176, 30, 33, 3, 117, 25, 121, 11, 133, 211, 122, 31, 237, 112, 152, 81, 129, 255, 192, 246, 82, 37, 58, 221, 210, 138, 7, 245, 248, 213, 111, 52, 120, 254, 232, 80, 165, 196, 116, 229, 37, 154, 136, 230, 165, 101, 63, 233, 213, 87, 102, 102, 153, 41, 78, 225, 166, 242, 3, 50, 219, 253, 172, 151, 159, 98, 52, 234, 63, 17, 8, 52, 197, 223, 242, 9, 198, 90, 131, 173, 231, 179, 119, 9, 131, 230, 85, 98, 112, 94, 190, 163, 56, 16, 255, 134, 207, 16, 226, 93, 203, 218, 61, 139, 110, 169, 189, 90, 44, 66, 164, 68, 197, 14, 141, 186, 160, 201, 49, 36, 42, 174, 114, 118, 134, 52, 116, 127, 213, 113, 197, 24, 201, 113, 73, 125, 253, 121, 78, 163, 62, 151, 18, 133, 253, 121, 138, 0, 103, 175, 144, 79, 221, 33, 131, 244, 223, 103, 145, 148, 179, 50, 134, 233, 120, 206, 8, 61, 187, 51, 236, 250, 145, 127, 41, 19, 245, 188, 65, 244, 251, 182, 239, 238, 160, 146, 235, 164, 53, 123, 72, 237, 23, 110, 42, 166, 67, 68, 121, 173, 84, 210, 86, 29, 117, 210, 210, 251, 20, 87, 77, 90, 12, 30, 129, 68, 254, 220, 177, 236, 183, 76, 36, 181, 179, 78, 186, 13, 31, 61, 118, 175, 86, 175, 29, 40, 212, 122, 147, 242, 165, 2, 22, 6, 242, 68, 96, 103, 214, 198, 163, 136, 23, 221, 217, 240, 226, 0, 9, 231, 61, 203, 68, 21, 170, 64, 191, 105, 34, 51, 8, 41, 185, 73, 34, 192, 245, 130, 207, 10, 225, 120, 203, 14, 37, 100, 9, 55, 55, 194, 240, 41, 111, 159, 70, 121, 62, 184, 103, 113, 249, 252, 148, 11, 42, 145, 230, 241, 175, 175, 0, 191, 180, 95, 93, 101, 100, 220, 254, 113, 104, 218, 80, 32, 137, 180, 61, 22, 174, 252, 109, 3, 9, 62, 118, 34, 194, 224, 213, 137, 62, 15, 161, 11, 176, 46, 185, 128, 19, 36, 8, 172, 217, 12, 52, 83, 211, 51, 7, 124, 27, 162, 50, 244, 222, 75, 79, 122, 188, 177, 163, 31, 131, 91, 151, 169, 19, 31, 80, 173, 177, 47, 99, 252, 33, 198, 159, 222, 204, 102, 46, 130, 162, 219, 206, 35, 116, 88, 57, 71, 194, 226, 170, 185, 249, 151, 160, 205, 203, 205, 71, 243, 36, 212, 182, 254, 237, 127, 161, 119, 24, 61, 10, 214, 78, 58, 9, 11, 53, 119, 54, 171, 111, 143, 124, 203, 143, 24, 121, 171, 142, 150, 7, 185, 47, 89, 230, 115, 102, 194, 24, 76, 194, 179, 2, 239, 207, 123, 187, 145, 242, 145, 44, 203, 219, 37, 49, 64, 200, 166, 106, 166, 72, 255, 66, 17, 221, 147, 251, 17, 6, 40, 42, 211, 115, 252, 96, 72, 91, 255, 191, 202, 2, 245, 149, 135, 153, 2, 231, 141, 161, 30, 129, 103, 163, 58, 125, 9, 33, 236, 239, 56, 220, 77, 8, 178, 165, 136, 45, 96, 209, 201, 227, 40, 10, 47, 20, 250, 133, 80, 14, 235, 89, 211, 196, 11, 39, 106, 25, 252, 13, 174, 46, 168, 139, 227, 143, 167, 99, 106, 30, 82, 172, 159, 137, 181, 95, 142, 49, 229, 160, 145, 226, 111, 186, 255, 249, 194, 149, 106, 128, 42, 132, 191, 188, 183, 58, 77, 108, 251, 5, 33, 139, 142, 161, 115, 230, 213, 199, 3, 154, 5, 239, 8, 245, 68, 156, 164, 229, 169, 32, 198, 4, 254, 82, 215, 33, 118, 114, 219, 220, 208, 137, 236, 241, 175, 104, 86, 13, 114, 254, 110, 163, 243, 223, 169, 110, 251, 90, 180, 219, 12, 60, 246, 131, 6, 69, 113, 58, 33, 148, 141, 50, 139, 125, 237, 110, 23, 179, 134, 37, 23, 136, 119, 35, 85, 251, 59, 217, 173, 145, 209, 236, 171, 198, 51, 106, 247, 217, 225, 112, 12, 248, 129, 53, 163, 0, 200, 112, 65, 26, 62, 195, 185, 180, 217, 148, 223, 18, 42, 6, 250, 190, 29, 61, 245, 190, 183, 50, 102, 121, 118, 159, 196, 230, 225, 42, 215, 0, 118, 17, 51, 214, 157, 173, 154, 147, 211, 231, 178, 34, 189, 185, 183, 185, 79, 214, 8, 55, 23, 107, 192, 61, 40, 114, 102, 153, 138, 161, 146, 38, 247, 167, 131, 204, 198, 147, 232, 155, 9, 180, 67, 236, 230, 216, 58, 189, 190, 103, 73, 62, 70, 133, 202, 147, 108, 107, 130, 57, 255, 98, 208, 115, 53, 11, 155, 14, 182, 192, 80, 143, 152, 16, 24, 173, 116, 149, 248, 127, 31, 142, 225, 235, 214, 56, 126, 249, 70, 248, 164, 201, 97, 60, 143, 125, 191, 249, 178, 50, 80, 93, 88, 222, 254, 56, 230, 154, 186, 19, 130, 243, 89, 49, 197, 70, 202, 184, 131, 183, 191, 155, 135, 85, 237, 47, 50, 189, 48, 180, 181, 42, 184, 183, 7, 216, 236, 180, 113, 108, 89, 196, 122, 219, 45, 23, 42, 61, 3, 45, 127, 169, 104, 34, 216, 250, 178, 87, 17, 111, 173, 19, 94, 231, 131, 66, 165, 10, 194, 203, 168, 60, 110, 145, 153, 188, 17, 97, 42, 22, 101, 119, 14, 91, 27, 199, 94, 86, 85, 28, 158, 165, 84, 208, 180, 73, 232, 61, 2, 153, 74, 162, 254, 236, 139, 87, 203, 227, 121, 18, 136, 94, 20, 90, 144, 152, 251, 101, 158, 14, 106, 3, 50, 208, 75, 124, 89, 250, 209, 190, 174, 213, 74, 26, 3, 3, 202, 58, 56, 44, 44, 35, 129, 38, 29, 66, 144, 244, 0, 235, 240, 245, 210, 28, 83, 174, 170, 7, 219, 252, 160, 252, 122, 185, 173, 146, 237, 27, 123, 94, 66, 194, 98, 10, 28, 8, 18, 177, 20, 177, 107, 49, 121, 99, 11, 196, 172, 30, 4, 43, 108, 204, 93, 179, 65, 131, 166, 111, 246, 231, 29, 97, 126, 124, 39, 145, 174, 90, 148, 177, 204, 25, 15, 160, 176, 127, 165, 147, 113, 168, 151, 242, 34, 207, 204, 173, 16, 79, 36, 154, 44, 217, 166, 216, 75, 107, 208, 228, 245, 58, 95, 135, 14, 54, 28, 34, 225, 224, 41, 129, 249, 31, 4, 43, 119, 174, 30, 132, 242, 197, 243, 156, 49, 212, 233, 254, 9, 24, 218, 68, 38, 220, 187, 51, 29, 57, 142, 33, 102, 23, 143, 208, 108, 165, 112, 142, 76, 237, 228, 220, 73, 176, 199, 65, 77, 122, 230, 127, 230, 93, 80, 36, 168, 216, 130, 149, 245, 175, 204, 95, 214, 20, 231, 12, 110, 98, 71, 250, 98, 205, 186, 78, 199, 212, 230, 50, 94, 203, 115, 200, 210, 11, 82, 22, 223, 116, 203, 241, 233, 233, 37, 87, 188, 202, 18, 104, 84, 227, 237, 29, 78, 202, 120, 206, 127, 222, 181, 74, 137, 209, 161, 177, 54, 205, 187, 213, 176, 141, 28, 215, 242, 127, 176, 51, 221, 120, 227, 98, 237, 213, 5, 50, 234, 141, 250, 27, 244, 58, 63, 255, 171, 55, 58, 228, 96, 97, 122, 84, 150, 48, 203, 65, 174, 207, 6, 9, 107, 76, 37, 73, 103, 149, 75, 88, 165, 59, 47, 227, 0, 174, 61, 119, 195, 181, 52, 177, 26, 99, 157, 46, 103, 254, 22, 138, 34, 120, 5, 8, 209, 26, 89, 135, 83, 32, 176, 202, 208, 83, 20, 119, 239, 81, 5, 46, 240, 29, 143, 120, 41, 172, 12, 142, 160, 150, 225, 119, 69, 58, 225, 251, 107, 249, 248, 240, 184, 136, 122, 35, 20, 221, 86, 216, 213, 253, 139, 136, 10, 57, 81, 231, 234, 1, 214, 146, 91, 210, 82, 82, 203, 187, 80, 4, 213, 128, 76, 157, 56, 70, 40, 61, 210, 229, 92, 139, 205, 143, 118, 179, 170, 141, 171, 196, 16, 82, 236, 156, 99, 92, 175, 113, 236, 93, 229, 209, 107, 13, 176, 47, 165, 142, 88, 209, 110, 107, 59, 161, 150, 86, 10, 50, 174, 28, 202, 57, 38, 241, 1, 147, 142, 250, 179, 102, 170, 207, 213, 25, 133, 111, 82, 237, 16, 93, 41, 142, 89, 208, 136, 88, 127, 83, 209, 147, 97, 225, 222, 234, 25, 242, 57, 84, 148, 76, 34, 238, 175, 122, 90, 137, 225, 154, 168, 126, 140, 233, 202, 105, 16, 142, 6, 135, 36, 196, 221, 152, 54, 157, 221, 54, 153, 255, 240, 179, 27, 156, 130, 117, 216, 32, 83, 99, 24, 225, 54, 144, 186, 5, 65, 130, 35, 52, 184, 181, 216, 163, 188, 212, 56, 234, 189, 179, 125, 62, 178, 104, 37, 29, 76, 112, 129, 63, 58, 239, 23, 130, 172, 113, 209, 152, 121, 148, 55, 25, 97, 203, 2, 112, 130, 80, 112, 172, 236, 105, 245, 194, 150, 250, 33, 17, 207, 78, 172, 162, 32, 22, 28, 58, 114, 121, 77, 96, 207, 186, 106, 81, 111, 23, 111, 89, 34, 57, 21, 176, 162, 81, 95, 189, 110, 229, 126, 106, 200, 193, 120, 210, 4, 99, 80, 243, 128, 82, 188, 134, 69, 242, 135, 157, 110, 154, 129, 181, 42, 235, 155, 172, 62, 62, 69, 247, 66, 80, 97, 95, 35, 55, 177, 217, 110, 124, 24, 127, 245, 232, 112, 156, 121, 227, 183, 164, 46, 41, 207, 126, 152, 142, 195, 120, 227, 170, 195, 245, 11, 57, 156, 108, 151, 51, 199, 249, 84, 180, 49, 85, 184, 56, 92, 247, 21, 83, 163, 108, 227, 50, 199, 14, 177, 73, 66, 241, 184, 190, 209, 79, 71, 224, 137, 163, 208, 248, 160, 12, 85, 115, 62, 246, 159, 22, 196, 34, 53, 206, 62, 127, 74, 107, 73, 42, 31, 65, 249, 104, 31, 5, 239, 127, 214, 146, 182, 27, 194, 112, 0, 10, 210, 124, 117, 191, 63, 212, 166, 31, 87, 236, 9, 218, 182, 147, 7, 111, 211, 59, 164, 83, 241, 197, 164, 97, 87, 176, 60, 47, 4, 28, 75, 251, 22, 128, 1, 62, 146, 58, 87, 173, 239, 130, 142, 165, 188, 152, 15, 90, 40, 109, 115, 9, 195, 122, 81, 98, 148, 88, 86, 78, 113, 237, 67, 87, 87, 53, 75, 87, 226, 72, 151, 4, 208, 188, 16, 240, 166, 163, 62, 217, 79, 162, 56, 148, 50, 5, 182, 59, 233, 152, 254, 66, 246, 30, 21, 107, 195, 195, 161, 164, 33, 109, 230, 238, 121, 77, 85, 178, 103, 150, 96, 168, 84, 64, 70, 190, 172, 173, 195, 167, 33, 230, 71, 6, 73, 144, 111, 69, 255, 119, 136, 169, 22, 22, 164, 182, 250, 161, 126, 248, 22, 44, 4, 12, 85, 211, 7, 219, 133, 112, 179, 125, 74, 133, 171, 65, 233, 74, 109, 103, 117, 149, 139, 149, 148, 243, 77, 32, 146, 156, 41, 22, 243, 50, 211, 131, 214, 133, 152, 36, 95, 27, 232, 155, 164, 189, 193, 224, 10, 189, 187, 231, 188, 38, 236, 181, 196, 111, 40, 236, 223, 113, 194, 197, 101, 75, 189, 213, 234, 17, 102, 200, 29, 154, 227, 4, 134, 212, 237, 170, 116, 57, 251, 161, 217, 212, 91, 226, 63, 152, 126, 174, 200, 12, 211, 74, 162, 233, 176, 111, 122, 119, 59, 197, 149, 123, 230, 135, 216, 64, 107, 238, 34, 54, 48, 56, 4, 88, 85, 163, 116, 155, 22, 72, 180, 198, 221, 26, 106, 185, 41, 5, 100, 96, 151, 198, 222, 139, 80, 177, 66, 116, 12, 141, 132, 59, 93, 201, 162, 208, 243, 106, 81, 22, 227, 18, 47, 138, 253, 160, 159, 182, 47, 197, 65, 165, 215, 71, 22, 65, 80, 135, 105, 210, 8, 37, 212, 253, 221, 155, 175, 35, 217, 196, 36, 84, 241, 27, 237, 106, 59, 48, 253, 119, 7, 25, 83, 198, 204, 240, 130, 5, 55, 4, 115, 139, 102, 230, 32, 19, 47, 176, 230, 206, 244, 95, 94, 104, 41, 14, 229, 83, 170, 73, 147, 253, 90, 221, 33, 125, 244, 169, 39, 18, 138, 205, 255, 51, 136, 152, 90, 71, 86, 204, 248, 108, 69, 39, 128, 161, 9, 221, 230, 8, 211, 64, 214, 125, 52, 175, 154, 60, 218, 156, 204, 128, 110, 112, 195, 120, 87, 144, 4, 115, 198, 249, 106, 250, 162, 248, 175, 225, 51, 62, 31, 184, 1, 150, 54, 3, 113, 205, 63, 100, 82, 176, 86, 32, 254, 37, 203, 51, 230, 84, 171, 65, 1, 182, 198, 172, 175, 41, 192, 238, 15, 177, 249, 65, 58, 163, 31, 113, 124, 36, 40, 170, 60, 3, 143, 57, 32, 95, 27, 17, 206, 39, 61, 231, 21, 25, 83, 208, 157, 98, 37, 75, 180, 108, 22, 78, 88, 172, 35, 164, 194, 179, 204, 97, 155, 188, 204, 77, 140, 125, 49, 215, 173, 84, 28, 53, 168, 61, 66, 77, 189, 86, 156, 184, 154, 85, 220, 184, 53, 163, 242, 64, 56, 58, 184, 237, 133, 72, 253, 133, 178, 192, 139, 226, 0, 138, 41, 79, 101, 154, 151, 118, 59, 199, 105, 157, 10, 63, 65, 191, 254, 67, 143, 107, 233, 206, 106, 25, 27, 120, 243, 245, 224, 175, 203, 243, 122, 145, 56, 181, 145, 37, 189, 211, 71, 180, 211, 72, 8, 155, 128, 245, 50, 223, 188, 175, 204, 82, 191, 14, 120, 176, 254, 94, 86, 173, 254, 98, 60, 1, 236, 163, 96, 109, 194, 58, 233, 200, 94, 249, 184, 217, 68, 68, 116, 63, 16, 38, 19, 11, 73, 23, 222, 151, 176, 193, 215, 172, 89, 203, 240, 41, 144, 21, 19, 255, 181, 54, 206, 130, 127, 188, 232, 109, 214, 93, 250, 172, 19, 15, 242, 135, 45, 163, 60, 184, 7, 167, 76, 207, 247, 230, 67, 181, 95, 178, 102, 103, 49, 116, 56, 56, 183, 23, 74, 214, 12, 86, 157, 31, 222, 87, 38, 194, 5, 221, 141, 162, 120, 138, 117, 59, 153, 158, 214, 67, 107, 237, 98, 130, 247, 144, 147, 175, 251, 79, 130, 160, 1, 51, 3, 183, 218, 128, 19, 252, 156, 189, 48, 166, 134, 184, 33, 38, 58, 178, 223, 17, 9, 12, 223, 9, 130, 224, 187, 19, 226, 11, 144, 99, 90, 7, 53, 147, 144, 230, 40, 131, 224, 235, 118, 167, 31, 219, 66, 225, 135, 4, 123, 97, 113, 40, 157, 84, 63, 138, 253, 187, 155, 125, 95, 103, 29, 192, 230, 31, 150, 202, 173, 227, 145, 193, 17, 87, 105, 151, 188, 32, 85, 97, 155, 32, 88, 183, 244, 59, 136, 44, 138, 124, 210, 235, 245, 67, 131, 139, 139, 15, 113, 50, 167, 20, 111, 228, 182, 149, 241, 26, 158, 185, 231, 86, 90, 136, 146, 43, 167, 79, 239, 140, 200, 173, 220, 206, 10, 83, 124, 10, 137, 103, 254, 166, 115, 210, 120, 213, 52, 52, 112, 67, 135, 249, 4, 217, 151, 115, 11, 61, 253, 204, 18, 249, 34, 157, 111, 217, 195, 217, 249, 182, 24, 125, 37, 43, 26, 244, 92, 9, 183, 158, 164, 163, 181, 254, 41, 224, 174, 37, 225, 237, 67, 221, 37, 232, 131, 61, 44, 153, 111, 16, 93, 122, 234, 21, 174, 63, 56, 31, 220, 182, 234, 70, 201, 8, 69, 152, 114, 42, 150, 142, 60, 186, 22, 56, 66, 191, 194, 188, 176, 158, 221, 46, 159, 197, 184, 231, 77, 46, 152, 72, 116, 240, 147, 55, 100, 122, 45, 60, 64, 141, 72, 109, 19, 192, 251, 143, 119, 172, 25, 238, 19, 127, 161, 187, 5, 184, 159, 152, 13, 116, 60, 169, 176, 183, 129, 188, 232, 98, 73, 124, 145, 227, 248, 170, 103, 216, 255, 44, 192, 54, 229, 222, 170, 170, 248, 65, 75, 155, 95, 92, 136, 86, 139, 92, 85, 132, 22, 201, 128, 35, 13, 13, 166, 209, 242, 16, 77, 161, 66, 191, 6, 67, 218, 209, 56, 46, 160, 97, 166, 29, 107, 123, 166, 172, 36, 207, 93, 35, 59, 216, 126, 20, 160, 31, 10, 188, 154, 77, 158, 181, 173, 168, 110, 77, 230, 135, 195, 246, 6, 144, 199, 169, 75, 200, 250, 183, 231, 188, 174, 35, 92, 35, 76, 216, 15, 131, 158, 179, 66, 214, 111, 247, 154, 1, 191, 137, 170, 242, 43, 24, 21, 168, 159, 83, 163, 92, 194, 83, 214, 120, 43, 115, 212, 237, 146, 229, 21, 197, 110, 123, 23, 220, 88, 215, 160, 82, 17, 90, 224, 163, 255, 63, 113, 217, 252, 55, 2, 142, 94, 238, 252, 188, 184, 216, 172, 204, 130, 119, 219, 42, 147, 182, 199, 81, 49, 153, 125, 236, 148, 83, 13, 168, 219, 9, 237, 238, 43, 146, 134, 71, 82, 37, 156, 77, 160, 104, 146, 87, 227, 36, 84, 124, 194, 46, 72, 103, 145, 79, 207, 175, 33, 186, 49, 188, 32, 248, 124, 46, 158, 236, 218, 80, 176, 93, 84, 7, 115, 232, 54, 116, 107, 155, 204, 169, 144, 213, 143, 198, 202, 146, 251, 242, 220, 157, 243, 190, 187, 106, 98, 224, 51, 172, 236, 39, 212, 62, 245, 92, 54, 150, 19, 5, 180, 146, 145, 211, 238, 61, 123, 76, 139, 144, 206, 145, 254, 205, 84, 84, 233, 179, 253, 155, 36, 192, 13, 175, 233, 95, 61, 255, 26, 236, 192, 131, 186, 237, 139, 105, 131, 53, 69, 20, 127, 110, 102, 141, 110, 17, 64, 99, 248, 42, 230, 99, 170, 168, 11, 69, 133, 220, 33, 22, 59, 92, 148, 167, 66, 231, 20, 184, 230, 82, 190, 85, 21, 111, 197, 141, 209, 99, 76, 53, 88, 93, 128, 155, 78, 102, 198, 212, 143, 172, 79, 184, 121, 178, 242, 214, 243, 140, 100, 149, 238, 215, 73, 79, 6, 229, 115, 172, 20, 147, 177, 237, 190, 155, 167, 100, 81, 227, 78, 73, 133, 207, 234, 203, 55, 209, 209, 80, 145, 71, 90, 139, 206, 68, 153, 121, 189, 57, 225, 14, 12, 97, 237, 24, 121, 62, 143, 245, 193, 219, 208, 7, 163, 164, 61, 206, 112, 199, 117, 133, 171, 140, 117, 131, 58, 241, 66, 48, 92, 242, 97, 118, 225, 52, 209, 115, 245, 22, 126, 229, 232, 7, 188, 55, 7, 192, 154, 105, 128, 142, 216, 44, 201, 174, 87, 231, 211, 16, 107, 191, 144, 23, 201, 185, 68, 27, 207, 170, 49, 167, 70, 209, 187, 129, 8, 246, 203, 244, 228, 252, 131, 145, 102, 88, 244, 211, 2, 3, 245, 106, 193, 135, 92, 110, 8, 158, 144, 88, 51, 217, 147, 18, 115, 7, 214, 111, 23, 7, 110, 208, 222, 41, 145, 230, 123, 76, 41, 189, 108, 26, 30, 97, 139, 234, 14, 58, 170, 84, 170, 80, 8, 233, 204, 88, 2, 103, 63, 31, 94, 134, 20, 143, 184, 44, 23, 168, 147, 228, 165, 180, 132, 60, 12, 11, 143, 254, 163, 78, 99, 98, 166, 208, 52, 25, 206, 3, 124, 45, 236, 94, 234, 61, 67, 141, 179, 146, 35, 226, 145, 237, 226, 119, 55, 81, 47, 68, 194, 12, 165, 12, 253, 78, 197, 179, 107, 221, 131, 239, 23, 153, 73, 161, 32, 21, 7, 230, 223, 128, 31, 103, 200, 54, 37, 234, 236, 153, 173, 239, 89, 51, 108, 30, 183, 242, 64, 246, 197, 254, 51, 186, 59, 167, 59, 188, 188, 70, 22, 142, 241, 133, 103, 31, 38, 55, 154, 78, 156, 211, 246, 250, 157, 158, 37, 243, 173, 51, 199, 144, 20, 63, 4, 92, 70, 244, 234, 94, 218, 221, 12, 97, 26, 197, 104, 118, 78, 251, 185, 99, 116, 6, 108, 156, 154, 140, 57, 114, 157, 43, 27, 129, 96, 130, 130, 111, 83, 193, 30, 215, 99, 32, 61, 231, 102, 18, 187, 239, 202, 35, 250, 214, 6, 130, 182, 220, 37, 201, 41, 7, 28, 135, 99, 92, 167, 49, 41, 231, 126, 145, 26, 13, 12, 207, 176, 225, 117, 72, 52, 55, 138, 166, 156, 69, 241, 84, 184, 44, 164, 33, 91, 213, 82, 75, 175, 90, 51, 55, 51, 122, 110, 130, 90, 83, 46, 218, 9, 61, 94, 220, 153, 231, 47, 20, 192, 223, 109, 22, 20, 235, 84, 234, 116, 255, 129, 252, 39, 133, 24, 177, 14, 92, 167, 56, 69, 156, 230, 42, 182, 162, 55, 14, 218, 106, 154, 202, 101, 80, 67, 230, 3, 153, 78, 121, 236, 216, 26, 176, 96, 120, 197, 48, 191, 4, 225, 53, 55, 246, 92, 223, 245, 189, 245, 4, 74, 232, 23, 160, 217, 206, 237, 190, 228, 62, 40, 218, 240, 6, 199, 131, 25, 113, 163, 151, 162, 7, 155, 219, 118, 255, 238, 140, 183, 14, 86, 159, 244, 218, 209, 80, 141, 179, 251, 212, 74, 24, 210, 5, 222, 112, 140, 20, 77, 49, 34, 21, 25, 210, 244, 161, 22, 167, 119, 26, 161, 136, 0, 129, 229, 149, 127, 226, 106, 144, 227, 174, 86, 20, 22, 151, 13, 193, 5, 155, 117, 13, 110, 235, 237, 132, 100, 119, 157, 170, 196, 122, 164, 27, 196, 240, 46, 246, 224, 183, 31, 180, 236, 170, 7, 61, 150, 21, 109, 51, 185, 25, 57, 190, 214, 94, 75, 8, 168, 82, 122, 87, 123, 193, 31, 59, 230, 45, 214, 218, 75, 229, 194, 228, 207, 176, 156, 218, 208, 181, 192, 76, 241, 151, 234, 75, 72, 73, 120, 15, 66, 225, 203, 15, 110, 189, 223, 146, 60, 64, 52, 153, 187, 217, 3, 73, 114, 79, 163, 27, 202, 74, 99, 115, 72, 147, 171, 111, 252, 193, 100, 167, 89, 40, 22, 97, 168, 94, 109, 65, 205, 19, 4, 122, 222, 107, 179, 5, 111, 79, 31, 172, 250, 95, 104, 129, 139, 127, 89, 164, 152, 42, 20, 139, 30, 173, 156, 66, 62, 27, 149, 101, 95, 15, 128, 50, 142, 163, 251, 54, 120, 216, 103, 100, 84, 132, 34, 91, 50, 255, 58, 155, 147, 18, 121, 159, 211, 0, 182, 197, 16, 153, 110, 28, 244, 248, 14, 126, 177, 118, 128, 124, 136, 207, 88, 28, 128, 203, 96, 32, 202, 48, 189, 253, 77, 221, 64, 74, 90, 41, 10, 201, 131, 177, 25, 173, 97, 165, 83, 117, 240, 171, 170, 35, 34, 118, 47, 107, 250, 43, 53, 183, 128, 198, 182, 207, 181, 91, 147, 190, 179, 12, 11, 139, 189, 34, 162, 203, 93, 7, 169, 34, 166, 241, 7, 145, 181, 71, 103, 36, 88, 233, 21, 9, 200, 98, 41, 75, 240, 71, 139, 114, 184, 56, 199, 232, 136, 52, 123, 21, 171, 217, 223, 52, 135, 99, 252, 154, 157, 234, 248, 110, 178, 32, 138, 171, 180, 38, 131, 82, 230, 227, 200, 157, 225, 202, 26, 85, 189, 127, 55, 244, 121, 28, 105, 219, 117, 134, 172, 151, 7, 251, 175, 24, 168, 164, 174, 226, 160, 175, 123, 139, 16, 193, 123, 202, 75, 0, 147, 78, 182, 41, 124, 135, 84, 194, 164, 160, 212, 96, 11, 182, 206, 145, 107, 238, 59, 220, 153, 27, 255, 79, 25, 76, 107, 137, 214, 83, 219, 216, 123, 145, 208, 211, 162, 47, 167, 28, 183, 33, 228, 182, 3, 101, 103, 229, 209, 255, 166, 189, 252, 233, 122, 79, 197, 147, 222, 157, 204, 212, 9, 68, 120, 177, 229, 46, 166, 249, 165, 170, 166, 239, 135, 195, 7, 177, 66, 194, 148, 40, 253, 159, 74, 178, 113, 101, 206, 139, 205, 215, 137, 107, 138, 160, 84, 35, 216, 60, 89, 51, 52, 47, 197, 228, 105, 0, 15, 168, 33, 136, 215, 245, 128, 115, 10, 55, 107, 9, 148, 33, 134, 85, 49, 22, 186, 146, 213, 70, 124, 61, 163, 94, 231, 224, 216, 164, 208, 190, 172, 6, 157, 147, 136, 99, 102, 203, 29, 27, 234, 208, 13, 68, 243, 38, 253, 100, 156, 18, 66, 43, 78, 185, 194, 41, 154, 53, 111, 230, 158, 177, 52, 240, 161, 234, 201, 54, 71, 75, 46, 10, 190, 68, 167, 135, 130, 210, 252, 10, 177, 100, 9, 165, 62, 59, 90, 67, 1, 48, 194, 26, 121, 196, 55, 247, 255, 4, 63, 22, 247, 120, 75, 160, 94, 117, 186, 6, 125, 211, 49, 237, 15, 249, 156, 70, 4, 10, 210, 97, 9, 113, 203, 251, 111, 129, 224, 167, 84, 250, 70, 184, 157, 95, 29, 164, 112, 168, 129, 67, 207, 139, 39, 223, 144, 99, 210, 31, 35, 61, 228, 165, 15, 77, 71, 64, 49, 245, 198, 115, 6, 68, 239, 75, 236, 157, 108, 9, 232, 36, 117, 187, 43, 78, 230, 64, 52, 158, 198, 183, 147, 134, 216, 133, 58, 139, 212, 113, 101, 213, 200, 74, 45, 115, 46, 138, 228, 11, 65, 214, 59, 240, 216, 247, 139, 139, 219, 187, 214, 103, 160, 53, 160, 27, 252, 143, 245, 231, 240, 10, 157, 33, 54, 142, 17, 64, 0, 185, 244, 66, 104, 79, 165, 90, 34, 239, 137, 90, 239, 219, 154, 136, 203, 12, 36, 175, 40, 99, 127, 106, 123, 116, 142, 15, 203, 185, 123, 39, 197, 192, 121, 74, 244, 45, 156, 204, 47, 105, 58, 21, 252, 152, 18, 203, 244, 92, 147, 28, 243, 250, 16, 78, 80, 141, 81, 210, 194, 21, 162, 78, 146, 60, 128, 175, 129, 169, 73, 14, 146, 74, 142, 192, 236, 22, 170, 186, 232, 42, 198, 144, 0, 99, 156, 99, 179, 10, 119, 22, 136, 8, 141, 159, 250, 109, 11, 155, 221, 90, 109, 225, 75, 144, 168, 179, 190, 139, 95, 213, 35, 103, 145, 146, 200, 122, 234, 182, 102, 106, 60, 5, 85, 19, 254, 207, 90, 5, 79, 56, 189, 132, 125, 226, 193, 236, 157, 0, 251, 11, 38, 89, 43, 114, 235, 138, 111, 212, 6, 65, 98, 48, 121, 113, 28, 1, 100, 3, 2, 51, 131, 92, 254, 86, 24, 235, 56, 211, 123, 143, 170, 235, 145, 111, 148, 184, 148, 164, 125, 146, 100, 17, 255, 80, 1, 84, 19, 241, 23, 62, 16, 86, 213, 137, 233, 118, 188, 66, 43, 133, 125, 180, 156, 239, 127, 184, 137, 35, 145, 210, 250, 72, 88, 171, 249, 117, 172, 203, 124, 66, 131, 48, 46, 180, 138, 26, 229, 213, 57, 245, 54, 206, 171, 31, 217, 41, 75, 180, 218, 24, 99, 179, 19, 187, 63, 182, 78, 235, 244, 33, 47, 81, 97, 108, 34, 134, 75, 75, 167, 38, 101, 167, 52, 15, 97, 196, 238, 245, 85, 177, 61, 73, 35, 67, 12, 226, 228, 203, 122, 251, 221, 13, 76, 168, 4, 62, 79, 120, 139, 7, 36, 22, 23, 135, 135, 241, 166, 236, 118, 218, 4, 212, 149, 162, 100, 60, 83, 130, 76, 28, 112, 31, 64, 218, 225, 58, 86, 249, 221, 137, 55, 88, 199, 61, 243, 219, 205, 221, 154, 207, 109, 247, 171, 25, 46, 150, 110, 142, 19, 229, 29, 166, 179, 41, 36, 220, 127, 77, 104, 103, 175, 203, 255, 6, 47, 244, 209, 201, 212, 1, 209, 166, 171, 47, 224, 0, 95, 125, 73, 80, 87, 176, 187, 98, 8, 95, 65, 152, 0, 203, 15, 81, 122, 247, 6, 208, 141, 88, 180, 159, 102, 29, 82, 73, 198, 152, 167, 190, 178, 43, 61, 248, 39, 12, 6, 119, 122, 168, 82, 40, 175, 237, 61, 128, 8, 23, 4, 132, 64, 210, 9, 111, 45, 194, 242, 17, 202, 64, 120, 187, 228, 96, 151, 166, 225, 255, 108, 79, 58, 38, 235, 156, 59, 199, 245, 32, 181, 143, 26, 140, 196, 46, 56, 149, 209, 204, 210, 16, 74, 24, 119, 145, 231, 241, 41, 240, 124, 163, 49, 255, 57, 20, 97, 108, 121, 26, 195, 151, 54, 24, 83, 187, 199, 174, 195, 85, 239, 158, 213, 238, 211, 211, 29, 228, 237, 218, 51, 239, 253, 229, 179, 204, 184, 183, 149, 19, 124, 17, 116, 55, 48, 173, 108, 178, 195, 209, 67, 227, 221, 164, 174, 16, 253, 152, 190, 207, 92, 254, 142, 185, 240, 82, 241, 169, 208, 173, 222, 165, 225, 93, 219, 229, 205, 29, 71, 7, 17, 227, 5, 198, 67, 186, 143, 79, 64, 131, 66, 90, 151, 79, 179, 71, 107, 113, 249, 130, 58, 238, 7, 183, 71, 153, 104, 213, 117, 124, 75, 192, 150, 219, 32, 26, 187, 211, 46, 78, 175, 7, 171, 3, 143, 75, 4, 195, 18, 126, 175, 78, 13, 145, 198, 151, 255, 177, 175, 42, 28, 122, 30, 42, 213, 107, 85, 5, 84, 170, 13, 160, 123, 101, 60, 145, 121, 162, 161, 64, 249, 143, 119, 176, 12, 43, 221, 90, 188, 165, 170, 0, 34, 146, 80, 119, 50, 15, 166, 162, 11, 174, 180, 172, 145, 208, 197, 2, 55, 201, 27, 23, 214, 237, 107, 83, 185, 128, 35, 86, 137, 87, 58, 240, 240, 174, 170, 22, 188, 250, 188, 237, 167, 130, 29, 59, 211, 5, 144, 161, 41, 209, 76, 101, 85, 241, 152, 76, 93, 173, 205, 213, 101, 45, 40, 54, 9, 127, 10, 162, 98, 161, 193, 100, 65, 224, 92, 200, 31, 238, 165, 111, 228, 211, 82, 137, 207, 113, 24, 69, 42, 119, 41, 210, 128, 252, 204, 228, 18, 128, 140, 73, 231, 111, 15, 16, 71, 167, 180, 109, 254, 255, 15, 230, 76, 204, 44, 186, 20, 73, 107, 25, 103, 127, 148, 165, 217, 175, 169, 123, 24, 148, 222, 113, 178, 154, 162, 195, 28, 175, 81, 125, 53, 198, 46, 219, 214, 59, 230, 162, 138, 190, 187, 241, 247, 89, 81, 162, 251, 139, 148, 115, 195, 36, 1, 22, 126, 209, 69, 25, 164, 67, 130, 3, 151, 229, 91, 164, 251, 165, 158, 216, 79, 154, 249, 10, 121, 84, 23, 16, 246, 146, 208, 154, 49, 197, 102, 137, 70, 86, 179, 9, 198, 53, 23, 190, 140, 61, 31, 98, 169, 246, 218, 223, 11, 59, 5, 98, 7, 98, 170, 214, 71, 148, 24, 182, 252, 138, 145, 99, 187, 108, 120, 19, 220, 182, 128, 163, 124, 180, 154, 109, 203, 110, 2, 98, 115, 186, 38, 88, 180, 57, 181, 189, 180, 191, 218, 182, 132, 139, 254, 225, 42, 7, 91, 27, 127, 214, 83, 8, 230, 71, 132, 248, 75, 44, 182, 242, 189, 158, 208, 161, 74, 121, 230, 103, 24, 96, 186, 91, 50, 46, 138, 183, 128, 238, 12, 48, 36, 15, 83, 111, 253, 4, 24, 99, 22, 99, 66, 214, 214, 166, 161, 226, 213, 211, 201, 13, 34, 242, 157, 96, 203, 87, 53, 79, 222, 150, 154, 159, 188, 191, 42, 109, 234, 149, 234, 137, 84, 19, 36, 73, 220, 229, 130, 191, 95, 78, 193, 236, 12, 216, 200, 153, 159, 211, 139, 192, 82, 66, 159, 33, 195, 81, 68, 125, 178, 145, 101, 219, 255, 54, 99, 216, 173, 156, 9, 140, 73, 75, 25, 58, 146, 127, 122, 171, 164, 31, 141, 4, 20, 196, 115, 137, 53, 110, 74, 44, 10, 9, 73, 49, 200, 177, 110, 85, 135, 35, 60, 75, 249, 230, 4, 120, 50, 164, 75, 255, 167, 254, 93, 227, 170, 21, 164, 85, 67, 108, 74, 41, 152, 200, 103, 17, 115, 171, 142, 92, 117, 121, 200, 196, 198, 219, 130, 192, 76, 152, 185, 220, 155, 138, 159, 180, 2, 28, 158, 74, 214, 77, 240, 12, 37, 156, 90, 36, 132, 143, 52, 193, 133, 96, 184, 218, 180, 18, 43, 180, 116, 224, 233, 127, 54, 143, 240, 193, 115, 220, 231, 147, 210, 179, 20, 100, 179, 22, 146, 76, 227, 63, 49, 198, 17, 166, 4, 95, 148, 195, 200, 247, 209, 238, 120, 190, 255, 89, 226, 11, 22, 203, 223, 214, 193, 219, 65, 255, 213, 56, 6, 175, 172, 151, 165, 248, 222, 165, 135, 73, 31, 26, 170, 42, 51, 14, 148, 21, 63, 97, 31, 250, 73, 31, 119, 179, 169, 205, 239, 121, 71, 121, 90, 66, 184, 120, 141, 25, 245, 70, 108, 100, 254, 109, 127, 96, 118, 121, 164, 25, 143, 97, 199, 207, 30, 171, 46, 154, 239, 138, 102, 29, 3, 34, 13, 3, 39, 129, 203, 189, 49, 47, 247, 112, 110, 214, 210, 230, 247, 150, 100, 151, 78, 182, 196, 17, 184, 22, 143, 23, 181, 188, 50, 118, 180, 147, 114, 149, 112, 161, 10, 208, 53, 26, 120, 231, 160, 59, 104, 80, 37, 77, 85, 157, 225, 200, 61, 0, 248, 200, 204, 82, 69, 252, 104, 222, 68, 190, 204, 143, 182, 210, 10, 198, 8, 94, 129, 244, 54], - [71, 146, 77, 198, 235, 3, 120, 240, 147, 54, 21, 160, 182, 185, 28, 55, 241, 54, 75, 93, 119, 172, 178, 134, 121, 147, 78, 74, 142, 90, 212, 58, 250, 154, 117, 7, 107, 236, 102, 85, 231, 199, 159, 103, 178, 239, 66, 248, 120, 182, 149, 195, 159, 132, 151, 43, 148, 60, 65, 237, 212, 158, 189, 62, 138, 181, 23, 199, 57, 210, 213, 211, 181, 26, 187, 191, 153, 85, 1, 25, 60, 73, 36, 188, 139, 14, 56, 182, 14, 39, 164, 32, 104, 112, 41, 25, 96, 158, 192, 26, 45, 237, 223, 151, 109, 118, 25, 81, 32, 237, 241, 208, 174, 195, 171, 59, 124, 202, 141, 255, 153, 24, 228, 160, 228, 21, 40, 10, 218, 148, 181, 198, 106, 94, 237, 144, 59, 130, 58, 169, 11, 77, 59, 15, 34, 72, 160, 47, 87, 207, 84, 33, 135, 184, 9, 90, 33, 97, 252, 210, 21, 250, 22, 193, 255, 137, 154, 110, 196, 199, 55, 152, 47, 62, 237, 92, 149, 42, 218, 202, 230, 217, 12, 191, 139, 2, 19, 41, 182, 147, 57, 225, 88, 250, 31, 111, 42, 235, 165, 62, 95, 217, 60, 134, 251, 186, 175, 126, 149, 222, 208, 97, 98, 113, 19, 252, 182, 90, 236, 229, 208, 236, 78, 77, 255, 98, 73, 223, 0, 43, 251, 91, 19, 154, 124, 82, 54, 57, 152, 134, 110, 94, 77, 77, 210, 246, 124, 52, 68, 128, 153, 141, 32, 189, 177, 64, 20, 241, 178, 249, 62, 167, 223, 208, 49, 88, 21, 71, 193, 51, 114, 184, 135, 161, 55, 91, 48, 154, 73, 229, 96, 173, 93, 178, 145, 205, 10, 41, 16, 111, 104, 126, 198, 5, 74, 210, 211, 226, 11, 7, 51, 121, 217, 42, 27, 175, 56, 94, 254, 183, 45, 58, 159, 61, 15, 51, 159, 2, 151, 240, 243, 31, 204, 87, 115, 168, 182, 190, 83, 101, 28, 91, 138, 134, 175, 95, 24, 47, 141, 205, 14, 7, 0, 48, 30, 153, 186, 142, 76, 166, 178, 1, 3, 101, 16, 126, 217, 153, 244, 8, 214, 75, 133, 242, 202, 98, 90, 40, 173, 175, 80, 95, 117, 54, 141, 253, 118, 72, 209, 176, 150, 234, 45, 176, 25, 2, 65, 144, 97, 211, 141, 160, 219, 79, 82, 206, 84, 121, 58, 39, 64, 51, 13, 235, 199, 58, 57, 40, 164, 29, 107, 205, 108, 183, 220, 139, 173, 81, 5, 47, 133, 45, 165, 79, 118, 245, 233, 155, 135, 243, 174, 142, 85, 241, 82, 142, 252, 126, 103, 2, 48, 118, 6, 15, 241, 240, 200, 196, 95, 235, 7, 29, 1, 52, 89, 111, 60, 164, 202, 96, 75, 68, 175, 153, 47, 173, 90, 147, 185, 249, 231, 128, 150, 111, 39, 180, 203, 118, 82, 62, 181, 105, 136, 178, 155, 7, 167, 202, 22, 84, 19, 178, 244, 248, 13, 218, 207, 245, 57, 181, 107, 77, 163, 75, 61, 166, 135, 204, 12, 95, 205, 181, 245, 59, 38, 110, 193, 251, 4, 243, 35, 248, 128, 166, 213, 209, 249, 172, 224, 130, 117, 159, 60, 254, 129, 68, 168, 129, 149, 110, 242, 240, 171, 90, 41, 146, 223, 62, 210, 234, 139, 78, 37, 139, 177, 130, 131, 44, 123, 85, 8, 252, 60, 72, 70, 71, 58, 7, 153, 57, 141, 148, 228, 116, 119, 181, 169, 201, 17, 56, 79, 85, 84, 109, 105, 229, 142, 62, 84, 154, 117, 114, 72, 172, 53, 146, 131, 97, 211, 103, 61, 91, 75, 14, 88, 141, 60, 178, 119, 191, 156, 150, 57, 147, 112, 99, 11, 161, 19, 60, 220, 130, 253, 139, 123, 32, 249, 146, 22, 105, 50, 16, 150, 94, 60, 129, 61, 251, 70, 193, 126, 39, 67, 197, 47, 86, 180, 193, 241, 70, 156, 204, 152, 23, 130, 216, 126, 163, 180, 208, 247, 166, 137, 237, 13, 149, 95, 226, 151, 165, 112, 243, 48, 234, 167, 36, 137, 214, 174, 187, 6, 164, 138, 24, 43, 254, 38, 219, 104, 29, 120, 196, 250, 94, 97, 217, 234, 155, 48, 9, 116, 137, 205, 16, 229, 99, 1, 185, 240, 165, 34, 72, 57, 11, 199, 148, 100, 53, 124, 127, 231, 212, 42, 244, 138, 245, 194, 212, 86, 171, 88, 34, 42, 226, 74, 27, 56, 168, 184, 190, 7, 226, 91, 128, 176, 51, 203, 40, 146, 101, 183, 64, 91, 221, 160, 175, 70, 177, 85, 226, 131, 91, 131, 12, 25, 115, 233, 124, 38, 13, 148, 89, 130, 172, 19, 127, 119, 21, 116, 76, 114, 130, 135, 182, 42, 53, 200, 167, 149, 32, 109, 186, 128, 150, 151, 134, 228, 106, 173, 146, 166, 8, 103, 46, 172, 111, 72, 75, 50, 52, 249, 198, 242, 195, 119, 97, 36, 162, 209, 170, 78, 2, 242, 68, 181, 69, 112, 238, 159, 248, 27, 129, 175, 88, 219, 161, 162, 148, 104, 5, 157, 49, 40, 234, 30, 48, 253, 126, 178, 167, 162, 35, 93, 61, 77, 38, 17, 196, 114, 64, 237, 114, 153, 106, 115, 153, 28, 164, 92, 185, 58, 75, 149, 95, 151, 32, 19, 163, 169, 83, 112, 4, 191, 167, 179, 43, 26, 216, 245, 187, 227, 121, 56, 204, 37, 158, 198, 218, 23, 176, 145, 145, 49, 55, 87, 186, 44, 3, 248, 191, 207, 159, 238, 229, 18, 74, 7, 78, 43, 115, 192, 99, 150, 199, 81, 228, 181, 235, 66, 132, 36, 125, 130, 147, 145, 67, 221, 241, 210, 21, 149, 99, 9, 107, 46, 12, 91, 60, 160, 155, 232, 235, 173, 219, 102, 155, 236, 178, 128, 254, 95, 206, 42, 103, 4, 155, 218, 45, 33, 50, 182, 130, 185, 199, 31, 95, 81, 207, 64, 126, 41, 204, 43, 98, 15, 52, 139, 66, 21, 188, 138, 171, 179, 11, 108, 5, 76, 144, 161, 200, 73, 81, 178, 223, 255, 63, 170, 243, 216, 3, 255, 137, 215, 31, 105, 237, 199, 107, 83, 104, 244, 19, 155, 168, 144, 56, 137, 171, 180, 27, 75, 3, 48, 53, 181, 241, 29, 91, 245, 237, 123, 201, 133, 91, 45, 246, 210, 112, 213, 92, 138, 35, 212, 110, 167, 103, 218, 208, 41, 54, 182, 229, 37, 112, 247, 32, 143, 139, 5, 213, 52, 85, 74, 121, 173, 27, 150, 38, 131, 95, 162, 111, 104, 140, 211, 178, 235, 175, 118, 55, 157, 216, 29, 13, 234, 48, 181, 144, 44, 168, 217, 156, 206, 251, 155, 158, 219, 156, 91, 24, 215, 71, 164, 221, 89, 239, 131, 195, 41, 167, 196, 47, 171, 79, 78, 215, 56, 141, 208, 93, 164, 80, 139, 126, 95, 128, 145, 230, 28, 16, 69, 112, 95, 225, 104, 225, 128, 246, 124, 110, 54, 90, 212, 219, 113, 27, 37, 76, 64, 44, 222, 87, 228, 48, 2, 217, 128, 60, 123, 237, 72, 9, 235, 56, 247, 68, 210, 0, 241, 35, 251, 235, 10, 242, 48, 10, 175, 176, 159, 208, 231, 168, 47, 46, 62, 143, 106, 62, 203, 58, 176, 38, 68, 64, 92, 18, 183, 143, 119, 58, 115, 216, 235, 181, 156, 126, 126, 117, 73, 147, 162, 36, 120, 1, 186, 183, 74, 253, 226, 102, 190, 203, 88, 193, 238, 39, 59, 104, 205, 155, 223, 140, 8, 172, 245, 64, 175, 177, 117, 1, 105, 146, 29, 192, 194, 254, 143, 107, 235, 195, 184, 233, 103, 108, 211, 178, 149, 147, 22, 108, 125, 39, 177, 236, 54, 82, 225, 144, 215, 67, 43, 62, 213, 169, 52, 104, 40, 63, 248, 137, 83, 198, 163, 105, 66, 93, 38, 25, 78, 215, 2, 38, 93, 59, 194, 50, 186, 47, 70, 224, 23, 50, 190, 115, 55, 106, 168, 200, 129, 130, 207, 149, 192, 253, 204, 126, 184, 215, 112, 244, 64, 112, 29, 220, 34, 98, 37, 146, 103, 67, 83, 105, 170, 145, 206, 170, 105, 88, 225, 200, 212, 242, 207, 144, 146, 90, 108, 63, 148, 249, 89, 127, 81, 93, 247, 169, 254, 171, 209, 8, 21, 232, 215, 41, 96, 133, 245, 38, 83, 191, 141, 111, 64, 60, 56, 184, 166, 196, 164, 73, 117, 134, 206, 116, 21, 147, 181, 80, 191, 79, 185, 174, 61, 195, 121, 219, 246, 161, 218, 141, 113, 101, 82, 5, 32, 132, 48, 60, 93, 6, 133, 170, 161, 176, 18, 214, 182, 205, 128, 56, 147, 64, 142, 72, 71, 105, 196, 235, 108, 185, 147, 0, 173, 75, 130, 173, 210, 13, 158, 191, 22, 58, 249, 246, 147, 151, 128, 222, 126, 207, 164, 169, 22, 111, 74, 54, 35, 50, 55, 86, 158, 223, 100, 246, 96, 6, 127, 93, 142, 221, 20, 39, 44, 170, 69, 230, 137, 32, 104, 212, 138, 179, 214, 5, 111, 164, 5, 53, 114, 100, 51, 149, 249, 72, 55, 208, 29, 207, 243, 60, 251, 124, 151, 11, 116, 135, 207, 226, 160, 103, 81, 15, 86, 96, 72, 154, 125, 112, 255, 221, 181, 72, 137, 234, 200, 2, 198, 119, 248, 200, 48, 84, 251, 225, 237, 98, 104, 170, 195, 158, 106, 137, 21, 67, 183, 42, 201, 225, 119, 149, 212, 45, 206, 7, 158, 98, 174, 128, 198, 46, 4, 164, 10, 192, 105, 189, 125, 124, 168, 10, 110, 104, 20, 97, 60, 147, 245, 190, 157, 142, 145, 46, 244, 193, 47, 23, 52, 103, 10, 217, 133, 244, 221, 145, 26, 159, 59, 250, 8, 36, 150, 126, 204, 58, 33, 94, 49, 185, 168, 41, 237, 165, 234, 40, 31, 205, 169, 124, 63, 134, 236, 65, 64, 136, 213, 47, 122, 175, 83, 17, 133, 142, 45, 43, 129, 87, 106, 118, 197, 135, 102, 224, 132, 6, 125, 89, 106, 82, 131, 68, 45, 227, 62, 19, 130, 25, 130, 215, 87, 71, 169, 200, 166, 226, 168, 124, 0, 95, 67, 68, 85, 231, 84, 11, 101, 149, 224, 54, 153, 97, 154, 229, 91, 60, 80, 89, 193, 173, 33, 240, 132, 15, 193, 201, 92, 209, 48, 91, 67, 103, 149, 147, 40, 65, 115, 83, 73, 243, 99, 57, 140, 201, 151, 69, 68, 76, 217, 30, 250, 215, 145, 177, 13, 63, 178, 107, 216, 61, 90, 2, 161, 25, 54, 135, 252, 210, 229, 70, 176, 228, 82, 84, 181, 227, 184, 103, 243, 146, 190, 100, 130, 17, 96, 7, 151, 95, 201, 71, 3, 94, 132, 121, 46, 209, 5, 114, 251, 131, 151, 45, 126, 142, 126, 49, 42, 97, 85, 66, 200, 37, 238, 73, 2, 219, 174, 84, 75, 18, 126, 254, 102, 210, 99, 109, 150, 98, 63, 238, 184, 98, 124, 215, 81, 131, 166, 160, 112, 24, 104, 59, 55, 61, 124, 32, 35, 201, 252, 202, 253, 166, 170, 142, 56, 134, 82, 7, 199, 211, 148, 211, 25, 244, 74, 125, 76, 10, 109, 201, 140, 231, 41, 209, 15, 130, 43, 185, 189, 228, 106, 232, 237, 234, 22, 120, 251, 188, 20, 118, 96, 197, 204, 235, 128, 239, 31, 127, 3, 161, 246, 32, 14, 254, 204, 186, 123, 21, 141, 33, 83, 201, 149, 63, 242, 0, 146, 84, 125, 117, 179, 123, 169, 248, 63, 163, 208, 235, 41, 164, 13, 194, 49, 93, 158, 167, 64, 187, 211, 171, 158, 214, 56, 21, 61, 85, 19, 65, 231, 212, 211, 28, 4, 121, 41, 48, 166, 31, 133, 13, 156, 134, 120, 224, 242, 127, 56, 154, 165, 55, 254, 176, 206, 8, 200, 171, 193, 180, 149, 223, 60, 219, 118, 255, 251, 11, 81, 234, 149, 225, 91, 40, 161, 254, 178, 88, 150, 148, 7, 220, 87, 114, 176, 233, 242, 116, 40, 89, 241, 21, 89, 113, 106, 182, 234, 225, 162, 172, 84, 22, 136, 159, 48, 110, 173, 218, 123, 197, 241, 192, 196, 37, 175, 91, 30, 128, 56, 170, 96, 44, 14, 133, 52, 255, 175, 55, 60, 187, 78, 80, 204, 91, 230, 205, 81, 121, 2, 107, 29, 160, 127, 115, 86, 244, 223, 200, 97, 248, 236, 94, 153, 206, 255, 4, 38, 21, 158, 221, 15, 71, 137, 94, 31, 204, 209, 171, 68, 50, 252, 202, 18, 178, 155, 135, 244, 187, 85, 253, 240, 229, 4, 155, 236, 90, 42, 199, 119, 238, 198, 234, 190, 8, 12, 202, 79, 37, 117, 234, 198, 3, 33, 239, 167, 129, 133, 138, 16, 12, 195, 125, 195, 3, 72, 117, 236, 112, 73, 225, 166, 76, 142, 7, 217, 225, 141, 54, 114, 235, 230, 180, 236, 37, 195, 249, 160, 47, 152, 13, 243, 222, 124, 18, 208, 86, 23, 169, 113, 55, 243, 40, 41, 143, 168, 194, 124, 3, 3, 131, 131, 95, 81, 96, 33, 87, 135, 158, 87, 51, 34, 251, 224, 204, 61, 92, 118, 240, 251, 145, 182, 88, 163, 6, 57, 237, 253, 21, 239, 128, 206, 254, 104, 28, 56, 60, 107, 6, 159, 41, 151, 98, 155, 225, 134, 32, 111, 204, 21, 152, 108, 160, 252, 144, 122, 197, 154, 166, 26, 23, 180, 17, 10, 180, 87, 121, 179, 141, 231, 42, 70, 72, 81, 60, 56, 206, 124, 110, 91, 201, 60, 117, 31, 230, 130, 250, 168, 163, 188, 12, 84, 183, 14, 50, 125, 192, 133, 94, 183, 168, 210, 252, 239, 24, 113, 99, 41, 218, 14, 141, 40, 210, 120, 224, 95, 54, 218, 225, 15, 53, 60, 65, 248, 8, 166, 214, 129, 67, 10, 26, 215, 164, 27, 243, 1, 229, 119, 17, 125, 21, 141, 94, 161, 253, 41, 27, 206, 175, 5, 55, 127, 111, 198, 69, 184, 46, 21, 51, 142, 88, 110, 106, 196, 232, 25, 96, 160, 26, 104, 244, 252, 215, 48, 39, 17, 212, 163, 166, 234, 243, 240, 95, 3, 61, 122, 55, 80, 36, 98, 12, 96, 122, 162, 62, 168, 135, 225, 206, 208, 210, 178, 41, 251, 163, 81, 11, 231, 138, 174, 206, 192, 199, 43, 51, 113, 154, 75, 222, 188, 84, 5, 26, 22, 105, 163, 168, 53, 102, 142, 115, 111, 87, 90, 39, 165, 222, 101, 189, 81, 74, 17, 226, 172, 43, 219, 73, 54, 9, 214, 69, 166, 210, 54, 194, 111, 41, 143, 104, 168, 237, 34, 21, 21, 58, 157, 162, 227, 149, 151, 76, 76, 129, 202, 39, 42, 131, 242, 40, 101, 146, 27, 247, 90, 101, 134, 82, 167, 203, 199, 242, 253, 177, 5, 135, 48, 144, 224, 10, 127, 136, 33, 188, 14, 137, 136, 195, 141, 46, 243, 44, 183, 59, 184, 72, 91, 212, 175, 179, 108, 161, 147, 140, 2, 178, 191, 180, 152, 155, 27, 50, 12, 192, 154, 243, 124, 215, 147, 157, 38, 176, 87, 208, 206, 65, 40, 37, 41, 143, 214, 74, 3, 62, 132, 35, 131, 156, 161, 205, 39, 163, 45, 184, 19, 182, 80, 52, 131, 29, 124, 43, 23, 44, 168, 198, 101, 193, 207, 28, 23, 250, 100, 151, 2, 8, 228, 246, 112, 112, 26, 66, 26, 160, 201, 236, 12, 159, 177, 201, 161, 23, 196, 57, 212, 110, 88, 146, 179, 137, 80, 34, 128, 120, 187, 40, 221, 93, 41, 15, 104, 148, 155, 1, 84, 250, 88, 156, 129, 44, 45, 19, 32, 144, 136, 132, 209, 129, 228, 242, 65, 201, 175, 43, 155, 240, 119, 131, 48, 46, 5, 155, 112, 9, 87, 118, 81, 38, 90, 222, 221, 167, 85, 13, 39, 161, 144, 51, 167, 118, 7, 230, 95, 206, 123, 236, 94, 150, 182, 197, 63, 75, 221, 20, 197, 213, 242, 179, 196, 248, 211, 107, 68, 108, 21, 169, 235, 39, 96, 148, 112, 191, 110, 70, 209, 156, 126, 229, 222, 209, 52, 222, 213, 91, 0, 26, 149, 69, 228, 122, 126, 229, 216, 230, 145, 217, 174, 114, 34, 95, 111, 91, 10, 169, 208, 145, 129, 149, 112, 161, 240, 166, 168, 9, 115, 65, 45, 10, 123, 166, 39, 198, 136, 108, 67, 30, 59, 194, 178, 54, 163, 32, 242, 72, 78, 18, 136, 219, 29, 174, 142, 98, 9, 217, 233, 226, 8, 170, 229, 119, 200, 95, 155, 237, 126, 124, 224, 103, 163, 161, 191, 182, 208, 77, 108, 112, 245, 206, 83, 205, 224, 168, 81, 231, 77, 20, 149, 162, 26, 5, 140, 8, 254, 82, 104, 208, 243, 215, 249, 117, 99, 175, 77, 253, 119, 197, 151, 184, 152, 206, 8, 60, 99, 101, 201, 66, 111, 143, 132, 61, 213, 249, 115, 217, 130, 40, 118, 159, 62, 49, 14, 179, 224, 38, 249, 28, 53, 91, 49, 86, 166, 229, 49, 216, 246, 249, 169, 213, 195, 45, 118, 230, 232, 218, 25, 113, 188, 218, 88, 57, 71, 181, 186, 64, 39, 238, 176, 21, 139, 119, 222, 65, 54, 111, 174, 70, 109, 34, 87, 198, 216, 227, 206, 179, 10, 181, 115, 147, 206, 35, 163, 224, 158, 44, 250, 129, 252, 144, 113, 137, 189, 4, 221, 69, 85, 249, 27, 132, 98, 229, 80, 138, 176, 243, 86, 0, 211, 197, 78, 69, 119, 8, 202, 151, 208, 65, 219, 239, 223, 93, 211, 59, 132, 154, 213, 83, 209, 175, 114, 27, 21, 164, 155, 72, 248, 249, 176, 152, 223, 74, 251, 71, 62, 21, 249, 107, 41, 198, 186, 179, 242, 154, 142, 128, 57, 246, 153, 229, 225, 124, 180, 140, 188, 145, 211, 135, 239, 152, 113, 66, 172, 110, 50, 24, 168, 119, 159, 88, 32, 192, 31, 172, 241, 104, 99, 131, 130, 135, 109, 123, 2, 8, 2, 123, 163, 32, 241, 140, 187, 251, 189, 38, 111, 220, 140, 179, 114, 180, 138, 2, 208, 191, 42, 4, 137, 203, 25, 119, 30, 235, 209, 49, 42, 230, 50, 0, 180, 138, 162, 59, 11, 235, 57, 164, 38, 42, 7, 232, 100, 178, 213, 85, 216, 194, 14, 105, 139, 20, 135, 245, 117, 181, 251, 223, 75, 66, 215, 135, 170, 113, 112, 153, 155, 149, 25, 197, 38, 151, 204, 188, 65, 198, 252, 237, 218, 93, 108, 129, 66, 180, 36, 159, 185, 88, 32, 180, 65, 117, 219, 23, 244, 241, 168, 14, 76, 31, 95, 31, 93, 85, 104, 46, 32, 86, 28, 26, 205, 108, 97, 153, 240, 104, 92, 62, 208, 240, 217, 128, 175, 108, 62, 59, 228, 233, 40, 75, 236, 237, 119, 73, 144, 253, 243, 99, 194, 142, 227, 14, 189, 74, 202, 134, 53, 157, 79, 2, 204, 136, 166, 14, 94, 101, 98, 182, 153, 134, 74, 218, 29, 217, 163, 111, 188, 68, 213, 32, 34, 246, 175, 91, 51, 211, 83, 59, 36, 56, 26, 34, 157, 24, 178, 243, 250, 38, 151, 144, 163, 24, 41, 23, 201, 120, 183, 39, 145, 156, 96, 24, 81, 88, 167, 213, 29, 97, 6, 45, 205, 153, 29, 49, 210, 247, 103, 74, 73, 56, 24, 176, 219, 218, 201, 71, 66, 77, 238, 90, 218, 98, 236, 114, 79, 95, 49, 84, 123, 138, 81, 116, 75, 242, 51, 233, 190, 48, 207, 26, 213, 200, 117, 53, 249, 85, 34, 4, 117, 33, 88, 0, 38, 214, 162, 156, 76, 115, 83, 141, 163, 67, 86, 76, 132, 175, 13, 250, 221, 190, 244, 235, 117, 71, 151, 73, 55, 217, 80, 117, 201, 201, 194, 181, 21, 114, 211, 199, 234, 63, 7, 107, 214, 121, 189, 215, 170, 14, 241, 203, 211, 42, 52, 150, 92, 162, 73, 207, 112, 254, 178, 195, 157, 88, 184, 59, 62, 26, 40, 218, 85, 189, 51, 106, 202, 172, 233, 219, 124, 172, 228, 94, 106, 138, 45, 130, 137, 171, 64, 116, 236, 211, 48, 108, 111, 5, 139, 115, 88, 2, 244, 20, 32, 216, 73, 27, 197, 38, 134, 178, 211, 127, 169, 189, 73, 184, 165, 214, 106, 55, 174, 54, 19, 80, 209, 178, 78, 10, 0, 56, 110, 158, 43, 126, 1, 22, 99, 191, 230, 137, 179, 59, 175, 237, 49, 202, 145, 76, 51, 175, 103, 39, 196, 0, 177, 26, 12, 106, 107, 22, 13, 170, 59, 40, 176, 146, 81, 131, 210, 106, 112, 100, 144, 180, 138, 180, 214, 106, 69, 91, 75, 69, 218, 255, 95, 224, 76, 111, 244, 62, 6, 133, 66, 91, 204, 196, 108, 68, 157, 134, 41, 62, 252, 208, 192, 122, 175, 105, 232, 45, 22, 168, 243, 115, 172, 45, 207, 198, 92, 72, 168, 176, 235, 232, 51, 89, 178, 31, 224, 6, 94, 237, 85, 23, 244, 241, 185, 51, 112, 133, 186, 124, 196, 31, 209, 95, 16, 50, 105, 19, 7, 76, 211, 140, 93, 6, 207, 41, 7, 208, 116, 139, 11, 148, 122, 199, 186, 163, 145, 203, 30, 145, 17, 127, 237, 51, 187, 151, 254, 156, 233, 133, 172, 231, 88, 163, 10, 105, 54, 89, 186, 157, 34, 235, 85, 213, 193, 137, 120, 212, 103, 73, 208, 128, 153, 78, 127, 159, 187, 117, 85, 42, 67, 184, 226, 169, 61, 96, 40, 56, 253, 91, 78, 226, 234, 216, 115, 236, 120, 10, 59, 45, 197, 225, 146, 242, 164, 119, 23, 61, 134, 82, 120, 48, 86, 231, 236, 132, 221, 173, 16, 198, 16, 114, 95, 131, 25, 64, 86, 58, 140, 243, 207, 184, 190, 105, 97, 81, 58, 170, 237, 173, 195, 184, 31, 244, 121, 158, 231, 234, 8, 253, 136, 139, 6, 10, 251, 42, 115, 158, 154, 106, 68, 165, 195, 48, 40, 207, 128, 173, 179, 99, 103, 46, 33, 234, 63, 5, 83, 13, 221, 76, 194, 168, 247, 49, 251, 90, 11, 53, 74, 20, 182, 238, 1, 239, 195, 200, 24, 243, 239, 82, 81, 110, 221, 241, 37, 162, 102, 93, 142, 160, 143, 249, 6, 173, 122, 179, 217, 188, 156, 128, 144, 167, 93, 158, 40, 148, 229, 208, 22, 177, 53, 194, 81, 159, 188, 112, 106, 58, 228, 206, 214, 30, 151, 42, 153, 165, 55, 248, 106, 154, 210, 204, 130, 75, 58, 19, 230, 228, 177, 197, 91, 34, 62, 26, 165, 192, 111, 162, 143, 158, 128, 12, 66, 39, 186, 14, 78, 79, 149, 217, 51, 169, 153, 230, 73, 211, 219, 140, 185, 91, 218, 236, 253, 9, 129, 154, 11, 102, 141, 243, 116, 201, 35, 152, 122, 250, 173, 250, 224, 182, 201, 100, 154, 74, 213, 153, 118, 113, 138, 131, 146, 170, 114, 248, 36, 79, 166, 211, 29, 94, 28, 33, 55, 120, 20, 82, 150, 109, 108, 66, 160, 126, 206, 150, 23, 149, 88, 123, 211, 229, 16, 235, 208, 18, 63, 150, 128, 135, 41, 47, 226, 204, 79, 204, 13, 171, 245, 44, 21, 224, 199, 225, 230, 155, 171, 127, 40, 6, 68, 204, 251, 55, 145, 244, 14, 202, 61, 117, 125, 112, 187, 238, 89, 92, 135, 63, 90, 173, 202, 16, 224, 179, 8, 104, 21, 15, 129, 153, 243, 49, 228, 145, 142, 153, 68, 102, 165, 171, 66, 133, 228, 40, 248, 90, 253, 33, 65, 190, 193, 252, 82, 193, 112, 2, 91, 254, 237, 151, 70, 25, 133, 72, 195, 223, 197, 175, 44, 5, 150, 132, 235, 194, 145, 155, 190, 127, 173, 129, 32, 119, 0, 235, 128, 209, 118, 4, 252, 26, 169, 62, 29, 37, 131, 12, 236, 88, 27, 14, 112, 237, 222, 248, 171, 32, 1, 124, 125, 179, 53, 138, 16, 157, 71, 185, 5, 114, 81, 57, 248, 115, 174, 7, 78, 204, 68, 117, 127, 144, 199, 117, 1, 26, 200, 238, 214, 51, 41, 30, 75, 218, 140, 45, 68, 115, 95, 161, 42, 217, 51, 105, 151, 70, 203, 166, 171, 213, 164, 123, 254, 128, 203, 221, 11, 64, 90, 112, 94, 101, 133, 209, 58, 25, 155, 236, 220, 215, 202, 147, 244, 209, 182, 117, 204, 1, 22, 212, 125, 239, 150, 84, 248, 25, 175, 237, 163, 184, 149, 4, 198, 119, 95, 110, 166, 161, 170, 156, 56, 71, 205, 133, 176, 19, 229, 132, 84, 115, 164, 137, 24, 145, 187, 23, 231, 202, 187, 56, 143, 183, 92, 73, 20, 88, 1, 134, 251, 70, 24, 16, 208, 130, 193, 221, 213, 52, 48, 91, 244, 195, 92, 160, 122, 87, 222, 21, 178, 213, 107, 125, 76, 47, 218, 171, 14, 52, 112, 73, 226, 192, 56, 155, 139, 165, 166, 18, 16, 63, 154, 244, 123, 222, 199, 203, 136, 13, 23, 210, 158, 130, 69, 225, 193, 243, 214, 196, 45, 8, 69, 125, 72, 109, 239, 173, 128, 130, 173, 5, 24, 87, 5, 199, 42, 230, 7, 241, 119, 55, 178, 225, 0, 116, 193, 76, 30, 4, 198, 39, 56, 185, 185, 162, 201, 77, 45, 227, 17, 246, 158, 244, 181, 241, 34, 182, 154, 87, 3, 197, 248, 23, 192, 17, 207, 197, 79, 251, 27, 209, 213, 30, 70, 245, 72, 252, 45, 7, 53, 148, 56, 230, 4, 126, 64, 235, 153, 154, 50, 240, 131, 118, 215, 90, 160, 235, 92, 223, 80, 200, 11, 108, 81, 186, 240, 141, 117, 100, 135, 221, 186, 32, 252, 210, 169, 255, 226, 75, 101, 31, 224, 110, 224, 54, 160, 10, 61, 129, 249, 56, 213, 43, 12, 190, 114, 209, 243, 247, 52, 159, 164, 174, 209, 81, 74, 42, 183, 50, 37, 70, 70, 3, 245, 182, 201, 233, 84, 248, 193, 46, 175, 15, 171, 109, 218, 91, 31, 193, 192, 12, 56, 58, 9, 8, 19, 151, 178, 231, 172, 48, 94, 70, 201, 218, 229, 101, 223, 59, 28, 171, 247, 105, 112, 220, 79, 223, 30, 46, 219, 99, 193, 250, 72, 205, 116, 59, 161, 229, 102, 113, 144, 45, 75, 244, 228, 170, 167, 73, 232, 203, 173, 165, 128, 239, 23, 209, 205, 53, 56, 201, 108, 216, 31, 68, 209, 58, 244, 6, 150, 185, 153, 35, 75, 77, 16, 243, 222, 210, 84, 76, 29, 61, 203, 61, 73, 247, 219, 93, 48, 248, 230, 58, 210, 212, 145, 82, 27, 83, 17, 88, 127, 61, 149, 71, 69, 222, 224, 63, 246, 197, 206, 25, 164, 23, 130, 200, 213, 153, 123, 31, 122, 124, 245, 138, 143, 130, 200, 86, 220, 211, 141, 223, 244, 54, 176, 78, 149, 133, 117, 98, 137, 185, 242, 189, 184, 237, 224, 184, 148, 191, 31, 179, 248, 183, 205, 6, 130, 4, 37, 248, 16, 111, 7, 228, 34, 1, 14, 254, 111, 32, 225, 251, 70, 86, 176, 67, 206, 65, 9, 228, 224, 1, 12, 45, 107, 197, 14, 78, 173, 231, 249, 195, 28, 188, 212, 67, 228, 152, 252, 218, 240, 147, 10, 34, 60, 62, 253, 254, 224, 178, 242, 234, 241, 35, 38, 245, 44, 113, 111, 165, 226, 33, 122, 23, 153, 253, 230, 99, 79, 5, 14, 13, 138, 75, 133, 229, 42, 78, 193, 90, 158, 81, 86, 221, 145, 186, 120, 203, 74, 135, 162, 144, 29, 30, 90, 230, 30, 255, 64, 164, 163, 168, 85, 1, 99, 13, 208, 61, 174, 250, 26, 39, 239, 134, 125, 10, 179, 152, 205, 148, 174, 42, 205, 241, 158, 149, 166, 181, 74, 182, 246, 130, 8, 40, 197, 190, 190, 9, 147, 8, 23, 121, 190, 191, 203, 216, 12, 17, 188, 10, 14, 93, 76, 122, 125, 208, 207, 19, 145, 236, 56, 184, 187, 220, 105, 172, 133, 232, 249, 162, 127, 124, 69, 89, 86, 107, 93, 251, 108, 10, 202, 113, 110, 118, 74, 56, 114, 188, 189, 187, 147, 56, 184, 12, 75, 125, 171, 56, 18, 253, 119, 33, 32, 186, 48, 152, 228, 207, 100, 33, 247, 226, 20, 255, 96, 165, 205, 199, 198, 127, 171, 123, 44, 145, 156, 195, 197, 182, 254, 186, 183, 19, 93, 81, 123, 17, 14, 214, 130, 32, 197, 131, 212, 38, 156, 80, 83, 174, 78, 249, 252, 238, 142, 79, 119, 72, 152, 50, 16, 73, 60, 136, 55, 94, 112, 198, 68, 12, 188, 203, 66, 168, 89, 76, 198, 210, 18, 242, 163, 79, 250, 232, 227, 137, 35, 146, 240, 63, 124, 119, 199, 219, 119, 143, 92, 1, 53, 5, 118, 200, 176, 127, 179, 74, 30, 58, 177, 226, 111, 84, 23, 186, 35, 83, 247, 67, 251, 76, 231, 167, 81, 109, 163, 42, 241, 77, 88, 225, 135, 233, 251, 226, 253, 28, 242, 105, 227, 8, 143, 140, 207, 65, 164, 211, 152, 32, 250, 173, 133, 1, 79, 43, 58, 169, 41, 103, 15, 50, 73, 9, 8, 192, 244, 138, 109, 184, 210, 102, 166, 190, 225, 15, 19, 117, 14, 223, 114, 59, 90, 19, 88, 241, 73, 133, 74, 242, 204, 4, 162, 0, 93, 243, 176, 67, 82, 71, 85, 7, 161, 53, 5, 37, 117, 78, 158, 220, 201, 155, 5, 185, 67, 226, 124, 197, 84, 97, 80, 65, 48, 74, 185, 20, 107, 116, 7, 150, 160, 226, 245, 203, 171, 220, 95, 142, 202, 172, 169, 18, 86, 182, 207, 150, 19, 12, 26, 208, 162, 171, 150, 78, 54, 107, 107, 140, 104, 113, 75, 111, 147, 148, 119, 243, 145, 166, 75, 252, 134, 129, 147, 156, 18, 174, 120, 151, 4, 154, 99, 107, 206, 251, 94, 40, 109, 186, 191, 132, 49, 209, 202, 12, 226, 156, 158, 228, 30, 171, 56, 164, 153, 176, 56, 32, 142, 53, 177, 154, 90, 73, 159, 195, 39, 8, 148, 114, 108, 245, 65, 252, 113, 166, 99, 187, 93, 37, 248, 106, 40, 219, 254, 183, 155, 82, 203, 82, 54, 61, 121, 99, 82, 185, 104, 230, 122, 127, 77, 90, 59, 141, 22, 145, 120, 182, 1, 28, 39, 49, 69, 165, 191, 147, 242, 43, 81, 97, 71, 21, 78, 90, 17, 213, 244, 80, 162, 34, 238, 139, 191, 36, 143, 198, 112, 231, 187, 231, 131, 137, 239, 166, 28, 64, 238, 156, 236, 3, 3, 116, 51, 236, 101, 228, 116, 40, 81, 52, 61, 238, 202, 142, 45, 85, 224, 229, 31, 249, 169, 101, 246, 167, 73, 180, 54, 41, 173, 160, 76, 47, 121, 60, 112, 192, 228, 189, 245, 172, 82, 90, 89, 210, 59, 214, 219, 144, 147, 224, 156, 201, 34, 51, 85, 42, 126, 174, 134, 45, 92, 133, 230, 87, 113, 136, 25, 206, 83, 224, 167, 56, 98, 170, 13, 113, 140, 39, 6, 212, 27, 82, 173, 160, 112, 148, 239, 137, 122, 74, 124, 230, 204, 155, 2, 49, 216, 54, 53, 224, 147, 140, 32, 143, 165, 212, 237, 91, 79, 213, 126, 218, 9, 90, 149, 34, 190, 226, 207, 86, 234, 190, 137, 237, 14, 69, 100, 169, 22, 23, 71, 91, 155, 28, 131, 225, 70, 219, 209, 116, 147, 2, 84, 241, 196, 154, 207, 46, 104, 25, 214, 157, 177, 147, 241, 96, 254, 214, 89, 19, 252, 200, 20, 73, 97, 241, 28, 113, 163, 211, 108, 32, 25, 114, 152, 77, 113, 56, 13, 246, 191, 35, 234, 48, 221, 102, 63, 133, 143, 60, 120, 249, 124, 37, 52, 180, 207, 134, 31, 202, 176, 212, 181, 210, 29, 58, 117, 54, 121, 8, 10, 211, 152, 138, 38, 245, 242, 123, 139, 160, 206, 161, 67, 35, 185, 186, 89, 29, 214, 137, 244, 150, 141, 13, 40, 101, 12, 47, 155, 168, 237, 155, 78, 23, 199, 53, 33, 101, 71, 92, 136, 177, 161, 161, 52, 104, 249, 189, 249, 132, 107, 21, 162, 19, 236, 33, 148, 118, 111, 168, 89, 126, 244, 220, 58, 82, 108, 242, 148, 188, 207, 25, 230, 206, 249, 151, 162, 185, 186, 192, 196, 209, 33, 23, 173, 146, 169, 205, 11, 69, 134, 179, 153, 178, 236, 206, 10, 133, 66, 133, 38, 9, 91, 58, 110, 114, 186, 65, 188, 136, 181, 140, 244, 139, 105, 215, 162, 89, 37, 90, 112, 78, 135, 197, 191, 202, 250, 214, 78, 110, 44, 134, 104, 4, 109, 82, 16, 120, 205, 60, 243, 72, 238, 191, 26, 163, 217, 40, 173, 100, 30, 5, 63, 230, 91, 156, 246, 187, 22, 44, 165, 201, 49, 48, 141, 41, 24, 199, 81, 232, 145, 245, 148, 79, 87, 240, 226, 87, 62, 49, 243, 161, 66, 111, 93, 105, 244, 60, 133, 107, 49, 249, 198, 237, 199, 190, 107, 55, 182, 155, 248, 170, 9, 35, 183, 95, 52, 229, 155, 179, 159, 195, 13, 138, 30, 91, 22, 181, 144, 215, 39, 151, 198, 76, 202, 236, 205, 37, 117, 85, 139, 185, 212, 185, 121, 66, 204, 249, 60, 119, 136, 12, 93, 195, 88, 16, 45, 34, 152, 206, 199, 254, 203, 163, 143, 226, 77, 48, 252, 53, 63, 102, 110, 103, 241, 10, 111, 46, 37, 146, 74, 207, 0, 59, 108, 12, 56, 92, 182, 107, 60, 222, 215, 171, 221, 151, 255, 73, 12, 45, 84, 142, 194, 26, 255, 83, 22, 93, 208, 190, 39, 127, 0, 48, 126, 36, 159, 205, 152, 49, 152, 68, 58, 209, 127, 222, 63, 177, 186, 45, 116, 200, 23, 128, 220, 62, 110, 168, 47, 229, 52, 220, 122, 21, 52, 255, 64, 98, 131, 55, 122, 87, 8, 32, 60, 123, 32, 92, 114, 249, 221, 141, 184, 0, 92, 133, 244, 26, 127, 175, 52, 44, 227, 35, 5, 91, 225, 156, 201, 52, 157, 28, 131, 252, 226, 80, 57, 198, 175, 244, 54, 104, 163, 174, 176, 99, 231, 226, 63, 89, 31, 219, 58, 25, 167, 56, 208, 96, 247, 224, 128, 33, 195, 191, 255, 83, 60, 182, 35, 56, 157, 172, 124, 199, 221, 78, 95, 158, 15, 47, 210, 140, 186, 72, 135, 224, 234, 168, 185, 172, 12, 149, 123, 231, 46, 215, 103, 117, 101, 245, 152, 37, 1, 147, 215, 29, 140, 161, 148, 79, 115, 224, 250, 17, 214, 126, 165, 64, 9, 62, 37, 154, 197, 182, 184, 214, 244, 147, 59, 214, 198, 204, 72, 14, 88, 4, 95, 69, 161, 68, 70, 13, 89, 145, 69, 168, 235, 155, 71, 21, 26, 49, 10, 176, 23, 12, 137, 197, 150, 234, 228, 147, 104, 13, 188, 47, 150, 187, 195, 83, 40, 78, 110, 152, 241, 189, 17, 210, 112, 73, 114, 231, 25, 69, 179, 146, 12, 90, 179, 93, 88, 44, 105, 254, 13, 11, 116, 238, 56, 108, 94, 116, 91, 251, 50, 207, 200, 25, 125, 43, 253, 171, 163, 233, 35, 178, 71, 228, 80, 154, 150, 75, 51, 220, 255, 143, 230, 132, 81, 242, 34, 41, 189, 110, 80, 203, 186, 235, 176, 137, 227, 222, 4, 153, 127, 97, 242, 44, 230, 221, 8, 173, 133, 37, 84, 160, 31, 246, 35, 17, 214, 169, 133, 228, 93, 228, 139, 190, 171, 160, 61, 249, 37, 172, 79, 109, 9, 98, 30, 224, 41, 44, 69, 228, 146, 123, 28, 173, 16, 141, 194, 96, 177, 238, 61, 242, 204, 97, 13, 4, 247, 235, 238, 48, 217, 72, 49, 71, 125, 107, 159, 39, 227, 143, 220, 248, 56, 170, 148, 63, 63, 213, 158, 150, 206, 147, 132, 207, 75, 95, 139, 76, 171, 4, 191, 173, 249, 220, 0, 58, 253, 128, 25, 172, 155, 90, 13, 178, 190, 66, 87, 251, 189, 56, 38, 140, 17, 174, 7, 172, 255, 27, 119, 80, 133, 22, 169, 66, 13, 126, 49, 227, 201, 91, 135, 109, 245, 205, 199, 208, 136, 36, 27, 211, 148, 108, 47, 241, 58, 40, 195, 63, 74, 67, 44, 245, 182, 21, 45, 224, 188, 115, 80, 230, 234, 202, 58, 167, 248, 162, 205, 221, 29, 108, 30, 46, 38, 57, 118, 213, 47, 87, 253, 50, 252, 194, 104, 71, 21, 33, 244, 0, 248, 39, 85, 11, 106, 176, 106, 74, 71, 70, 148, 229, 105, 84, 63, 147, 169, 46, 20, 60, 97, 209, 52, 181, 247, 48, 155, 85, 227, 158, 76, 84, 67, 112, 2, 127, 83, 157, 206, 142, 63, 125, 128, 36, 11, 45, 133, 67, 223, 134, 33, 28, 41, 71, 133, 221, 66, 54, 8, 86, 52, 113, 41, 155, 57, 250, 24, 64, 227, 8, 26, 173, 90, 39, 237, 210, 160, 73, 47, 166, 226, 54, 147, 29, 138, 45, 131, 252, 67, 162, 189, 190, 85, 127, 204, 197, 222, 186, 6, 100, 126, 167, 162, 129, 202, 167, 243, 241, 53, 244, 140, 31, 84, 196, 42, 215, 75, 60, 253, 125, 63, 87, 179, 144, 220, 244, 3, 192, 0, 136, 62, 38, 174, 185, 51, 92, 104, 45, 246, 253, 161, 2, 84, 98, 230, 159, 216, 153, 206, 123, 254, 99, 50, 137, 212, 157, 231, 229, 77, 174, 178, 13, 65, 86, 59, 135, 168, 109, 193, 177, 161, 160, 229, 118, 94, 177, 180, 254, 22, 237, 66, 42, 198, 196, 7, 129, 87, 53, 144, 76, 149, 97, 183, 76, 245, 191, 150, 127, 71, 137, 186, 229, 3, 214, 64, 146, 26, 161, 11, 137, 199, 28, 30, 236, 66, 116, 179, 48, 165, 206, 99, 114, 18, 115, 88, 57, 209, 94, 216, 49, 206, 86, 16, 58, 113, 97, 69, 214, 237, 40, 108, 247, 138, 142, 128, 162, 57, 200, 149, 186, 83, 148, 180, 133, 106, 70, 210, 146, 29, 191, 133, 130, 223, 168, 111, 203, 254, 187, 142, 161, 201, 50, 82, 110, 54, 200, 118, 45, 86, 192, 107, 33, 117, 177, 67, 124, 132, 221, 3, 229, 9, 145, 184, 55, 59, 186, 110, 151, 1, 107, 178, 219, 142, 244, 241, 149, 20, 231, 192, 117, 54, 102, 60, 223, 231, 31, 41, 56, 11, 72, 160, 115, 52, 212, 26, 101, 206, 135, 92, 50, 237, 163, 241, 242, 46, 163, 70, 116, 75, 69, 225, 25, 120, 213, 9, 159, 40, 123, 57, 186, 115, 177, 58, 197, 153, 163, 131, 244, 115, 219, 114, 91, 32, 59, 171, 100, 40, 29, 9, 93, 57, 248, 5, 56, 99, 187, 119, 7, 20, 173, 40, 203, 13, 208, 29, 229, 21, 134, 47, 109, 207, 5, 158, 170, 45, 53, 156, 164, 106, 61, 143, 54, 182, 174, 154, 187, 93, 170, 53, 225, 157, 182, 220, 58, 216, 235, 94, 28, 105, 170, 82, 73, 57, 139, 39, 27, 75, 112, 223, 252, 222, 180, 123, 28, 77, 178, 4, 194, 11, 239, 207, 47, 144, 249, 156, 49, 225, 7, 223, 42, 62, 70, 251, 64, 43, 199, 164, 148, 230, 81, 129, 115, 67, 178, 16, 239, 164, 4, 122, 65, 89, 151, 18, 56, 29, 94, 185, 161, 145, 116, 105, 83, 50, 153, 73, 144, 26, 189, 200, 46, 176, 141, 202, 239, 185, 3, 239, 100, 93, 12, 64, 82, 78, 33, 185, 153, 76, 151, 1, 55, 155, 187, 178, 156, 36, 198, 71, 183, 150, 210, 36, 150, 14, 80, 40, 205, 204, 119, 222, 209, 217, 114, 192, 131, 215, 154, 27, 98, 138, 135, 175, 161, 111, 57, 176, 100, 49, 122, 179, 166, 202, 212, 54, 143, 79, 136, 41, 120, 110, 69, 33, 110, 175, 36, 45, 40, 188, 78, 217, 46, 163, 135, 3, 187, 202, 14, 93, 180, 232, 84, 151, 215, 77, 144, 217, 156, 235, 154, 92, 34, 86, 220, 129, 117, 186, 0, 98, 132, 18, 235, 241, 219, 39, 153, 224, 131, 224, 62, 114, 137, 114, 124, 61, 221, 160, 215, 163, 168, 132, 241, 72, 5, 44, 189, 54, 92, 183, 250, 140, 89, 94, 64, 68, 108, 12, 148, 238, 173, 246, 37, 155, 60, 94, 206, 38, 149, 118, 155, 209, 68, 114, 131, 82, 50, 161, 86, 117, 137, 135, 198, 30, 104, 122, 104, 32, 5, 233, 33, 211, 254, 239, 103, 231, 90, 220, 106, 165, 126, 255, 155, 197, 67, 228, 76, 76, 29, 224, 91, 183, 103, 126, 117, 49, 12, 164, 36, 115, 31, 103, 158, 25, 46, 195, 149, 213, 42, 44, 11, 44, 46, 132, 103, 21, 141, 23, 159, 74, 99, 55, 142, 137, 83, 96, 22, 80, 148, 73, 53, 168, 50, 165, 194, 53, 41, 11, 227, 9, 118, 130, 84, 130, 19, 71, 40, 199, 238, 233, 241, 93, 7, 249, 131, 80, 198, 103, 220, 21, 182, 175, 182, 141, 13, 168, 166, 162, 19, 8, 83, 44, 46, 162, 233, 108, 2, 112, 64, 162, 237, 138, 174, 149, 229, 8, 154, 9, 128, 131, 229, 108, 9, 66, 161, 124, 141, 172, 172, 134, 219, 81, 220, 19, 203, 252, 128, 188, 191, 179, 222, 48, 135, 189, 118, 131, 171, 141, 15, 100, 87, 161, 181, 178, 86, 234, 236, 72, 131, 191, 127, 234, 10, 18, 150, 142, 146, 43, 89, 71, 9, 156, 129, 184, 90, 2, 73, 71, 91, 252, 213, 240, 191, 206, 206, 184, 68, 5, 182, 241, 239, 231, 204, 29, 179, 6, 70, 4, 90, 66, 113, 237, 80, 83, 234, 88, 218, 137, 9, 146, 32, 180, 122, 160, 249, 42, 242, 12, 53, 162, 238, 53, 55, 149, 74, 79, 190, 225, 131, 59, 29, 208, 3, 124, 35, 72, 137, 139, 39, 252, 5, 187, 116, 231, 229, 39, 88, 76, 152, 236, 211, 111, 168, 240, 32, 58, 59, 65, 88, 188, 32, 114, 31, 182, 9, 36, 246, 178, 255, 110, 50, 124, 77, 72, 125, 5, 181, 24, 143, 133, 48, 5, 112, 176, 50, 59, 47, 22, 159, 235, 35, 103, 151, 30, 169, 83, 1, 169, 231, 22, 11, 60, 75, 139, 70, 191, 149, 48, 82, 139, 141, 7, 100, 227, 180, 158, 52, 86, 133, 145, 28, 244, 69, 147, 112, 145, 229, 146, 98, 89, 135, 230, 45, 122, 219, 215, 25, 217, 52, 144, 211, 134, 139, 220, 180, 73, 31, 40, 78, 111, 155, 180, 113, 72, 37, 91, 177, 252, 14, 85, 174, 152, 209, 240, 168, 217, 250, 202, 243, 252, 67, 116, 97, 68, 73, 156, 139, 49, 206, 117, 253, 60, 50, 39, 71, 5, 146, 14, 141, 134, 6, 228, 199, 195, 186, 149, 106, 201, 251, 86, 110, 142, 235, 253, 60, 40, 174, 205, 183, 91, 246, 149, 212, 187, 14, 231, 207, 171, 118, 241, 171, 240, 103, 199, 232, 71, 174, 144, 1, 81, 181, 98, 52, 206, 225, 137, 101, 249, 13, 70, 204, 199, 1, 183, 137, 67, 11, 54, 191, 168, 200, 239, 55, 54, 255, 232, 25, 1, 148, 245, 109, 75, 19, 239, 191, 115, 215, 24, 139, 80, 140, 189, 89, 150, 58, 92, 238, 200, 140, 219, 182, 193, 12, 174, 93, 253, 213, 65, 55, 218, 29, 250, 118, 81, 11, 91, 41, 148, 126, 226, 225, 171, 188, 222, 35, 172, 31, 229, 114, 202, 173, 148, 16, 161, 104, 105, 139, 105, 112, 213, 42, 137, 177, 99, 221, 148, 3, 81, 238, 203, 172, 247, 118, 22, 234, 101, 112, 166, 247, 148, 91, 247, 179, 223, 38, 191, 31, 194, 225, 132, 115, 21, 61, 162, 169, 2, 246, 111, 0, 177, 104, 106, 36, 121, 104, 89, 118, 183, 1, 11, 234, 47, 152, 4, 45, 177, 22, 214, 42, 70, 101, 206, 225, 126, 10, 254, 163, 143, 62, 37, 232, 125, 133, 90, 137, 126, 84, 241, 218, 243, 242, 36, 74, 28, 194, 179, 246, 190, 161, 227, 103, 230, 191, 23, 42, 15, 208, 211, 15, 202, 150, 79, 215, 164, 87, 58, 232, 49, 236, 41, 72, 217, 133, 134, 63, 174, 6, 61, 130, 56, 114, 2, 246, 71, 230, 173, 65, 162, 45, 1, 197, 128, 162, 132, 221, 242, 141, 151, 231, 206, 12, 105, 132, 228, 150, 231, 33, 155, 153, 1, 222, 251, 205, 228, 113, 215, 120, 253, 206, 119, 143, 20, 36, 208, 226, 28, 221, 25, 131, 227, 251, 8, 214, 214, 66, 162, 225, 160, 236, 252, 177, 32, 7, 154, 73, 54, 39, 61, 200, 164, 120, 211, 126, 94, 144, 244, 78, 23, 232, 124, 157, 196, 31, 103, 94, 200, 220, 107, 28, 227, 126, 80, 177, 74, 60, 35, 8, 0, 246, 116, 70, 147, 219, 170, 168, 199, 226, 96, 10, 50, 98, 140, 50, 220, 42, 20, 168, 154, 239, 100, 181, 54, 220, 89, 18, 126, 192, 140, 246, 175, 25, 139, 56, 212, 54, 57, 252, 131, 89, 1, 249, 38, 67, 45, 203, 118, 175, 197, 250, 37, 115, 233, 164, 244, 83, 76, 238, 210, 109, 120, 137, 250, 32, 66, 112, 221, 135, 95, 231, 138, 180, 162, 170, 90, 120, 241, 113, 210, 111, 176, 133, 113, 67, 254, 38, 46, 81, 46, 81, 218, 227, 74, 221, 244, 15, 176, 168, 208, 127, 222, 151, 218, 76, 179, 91, 138, 166, 206, 143, 142, 233, 24, 212, 96, 46, 134, 34, 4, 173, 23, 198, 253, 105, 105, 93, 227, 49, 219, 52, 216, 181, 81, 59, 159, 152, 219, 123, 249, 58, 212, 227, 64, 192, 158, 237, 176, 103, 175, 249, 166, 46, 198, 236, 12, 58, 48, 11, 135, 2, 120, 137, 5, 212, 115, 24, 131, 12, 254, 252, 144, 30, 16, 100, 76, 179, 171, 20, 118, 116, 74, 15, 97, 10, 150, 163, 219, 15, 123, 123, 57, 250, 92, 24, 76, 171, 171, 101, 74, 74, 146, 151, 48, 188, 237, 36, 247, 120, 14, 118, 211, 229, 44, 3, 189, 107, 85, 210, 194, 101, 67, 79, 28, 26, 70, 6, 249, 227, 167, 94, 55, 47, 86, 223, 110, 37, 80, 80, 124, 84, 141, 242, 253, 138, 169, 224, 57, 223, 173, 4, 64, 218, 213, 110, 246, 101, 152, 210, 78, 108, 85, 24, 11, 165, 159, 98, 145, 1, 236, 41, 198, 106, 238, 232, 185, 219, 157, 22, 233, 94, 104, 72, 11, 165, 4, 105, 111, 100, 248, 61, 189, 50, 251, 12, 246, 237, 73, 7, 19, 246, 13, 205, 199, 193, 55, 234, 139, 122, 139, 45, 25, 68, 62, 214, 39, 225, 186, 136, 217, 246, 43, 109, 135, 135, 71, 222, 92, 106, 47, 158, 80, 237, 80, 80, 12, 123, 64, 23, 127, 249, 35, 95, 152, 96, 230, 44, 229, 126, 45, 197, 194, 29, 181, 228, 179, 198, 146, 181, 210, 99, 49, 39, 139, 182, 23, 46, 173, 156, 0, 89, 117, 207, 74, 168, 157, 103, 237, 243, 0, 27, 247, 162, 135, 7, 4, 109, 198, 48, 102, 156, 193, 178, 41, 193, 125, 85, 120, 243, 60, 179, 247, 21, 10, 137, 114, 241, 89, 34, 233, 138, 13, 126, 14, 55, 237, 231, 72, 10, 21, 80, 167, 224, 142, 88, 102, 61, 246, 43, 78, 113, 122, 186, 71, 188, 163, 53, 150, 231, 251, 43, 28, 64, 106, 153, 132, 135, 174, 0, 161, 136, 150, 24, 50, 164, 245, 158, 9, 63, 247, 158, 217, 48, 63, 74, 76, 141, 212, 248, 252, 225, 31, 131, 242, 19, 246, 173, 80, 9, 202, 50, 189, 21, 13, 91, 236, 228, 147, 19, 196, 114, 199, 212, 57, 208, 99, 71, 248, 125, 177, 157, 195, 191, 30, 202, 245, 63, 133, 65, 98, 89, 236, 90, 160, 123, 4, 10, 248, 231, 125, 181, 176, 92, 214, 225, 220, 92, 129, 40, 158, 68, 240, 5, 55, 229, 70, 200, 68, 64, 249, 96, 117, 12, 127, 54, 63, 24, 89, 21, 78, 208, 112, 138, 57, 112, 24, 241, 19, 152, 186, 2, 155, 171, 245, 66, 125, 1, 64, 13, 76, 15, 156, 205, 178, 158, 168, 220, 41, 113, 52, 91, 247, 193, 68, 226, 18, 199, 189, 42, 196, 194, 60, 222, 24, 57, 182, 97, 220, 60, 35, 99, 208, 98, 90, 155, 82, 227, 59, 186, 228, 56, 80, 238, 160, 123, 179, 89, 212, 220, 31, 135, 171, 135, 197, 129, 40, 8, 233, 124, 88, 51, 16, 4, 144, 165, 52, 24, 191, 120, 182, 158, 65, 80, 1, 227, 205, 208, 255, 134, 109, 79, 49, 106, 241, 208, 247, 6, 42, 39, 119, 235, 58, 213, 253, 34, 10, 168, 186, 128, 175, 219, 161, 46, 200, 234, 152, 211, 120, 165, 175, 163, 184, 45, 13, 141, 216, 159, 196, 192, 83, 1, 27, 67, 223, 120, 72, 81, 141, 35, 10, 230, 113, 197, 17, 120, 90, 237, 82, 85, 129, 219, 182, 30, 241, 3, 162, 158, 212, 210, 182, 131, 0, 82, 173, 195, 226, 211, 81, 86, 181, 50, 129, 196, 203, 140, 111, 164, 128, 240, 107, 54, 5, 110, 108, 125, 164, 71, 78, 23, 51, 164, 73, 112, 148, 72, 193, 238, 255, 37, 146, 122, 73, 147, 117, 171, 69, 167, 79, 85, 13, 201, 0, 61, 15, 135, 6, 97, 104, 49, 159, 209, 146, 30, 23, 192, 209, 81, 66, 91, 80, 116, 188, 52, 14, 171, 185, 63, 191, 184, 246, 21, 3, 232, 247, 115, 65, 255, 25, 212, 192, 163, 93, 208, 67, 26, 165, 181, 234, 187, 154, 176, 242, 129, 59, 150, 253, 43, 219, 172, 36, 224, 103, 242, 162, 185, 21, 92, 198, 188, 123, 230, 170, 213, 23, 248, 231, 21, 6, 122, 18, 97, 87, 104, 249, 153, 213, 117, 99, 34, 116, 195, 239, 28, 193, 30, 226, 60, 30, 154, 179, 72, 143, 127, 233, 55, 52, 93, 114, 225, 74, 121, 182, 2, 32, 193, 208, 70, 196, 0, 208, 99, 0, 125, 46, 252, 183, 140, 233, 7, 32, 56, 124, 46, 78, 26, 132, 55, 114, 255, 158, 96, 59, 126, 202, 203, 98, 231, 22, 139, 137, 62, 148, 185, 232, 157, 62, 169, 223, 33, 133, 137, 18, 71, 86, 30, 197, 232, 68, 249, 62, 95, 137, 203, 244, 246, 195, 104, 144, 240, 124, 7, 24, 80, 204, 155, 51, 201, 164, 135, 227, 229, 141, 135, 84, 234, 211, 223, 120, 146, 127, 112, 48, 143, 249, 117, 9, 77, 84, 78, 196, 156, 87, 177, 15, 255, 82, 133, 83, 56, 110, 232, 81, 74, 57, 252, 240, 114, 33, 81, 117, 208, 70, 131, 196, 146, 44, 33, 222, 9, 206, 170, 255, 93, 223, 24, 157, 50, 83, 151, 237, 65, 120, 2, 173, 253, 124, 177, 112, 19, 94, 8, 131, 95, 221, 41, 139, 97, 247, 178, 134, 167, 134, 93, 61, 253, 179, 141, 116, 68, 148, 137, 202, 52, 116, 157, 52, 57, 102, 51, 152, 145, 161, 93, 98, 252, 230, 155, 122, 95, 81, 249, 47, 52, 51, 178, 231, 127, 163, 230, 74, 97, 94, 217, 127, 57, 94, 115, 120, 154, 14, 7, 101, 133, 143, 183, 179, 157, 228, 98, 145, 238, 104, 134, 136, 246, 3, 166, 6, 129, 25, 1, 97, 207, 203, 70, 24, 184, 109, 219, 47, 46, 160, 142, 83, 112, 232, 197, 171, 35, 240, 201, 237, 69, 160, 238, 64, 235, 101, 132, 176, 224, 188, 236, 206, 205, 113, 20, 44, 91, 128, 115, 234, 216, 210, 63, 155, 162, 83, 27, 177, 206, 64, 147, 212, 229, 194, 194, 114, 11, 150, 14, 199, 80, 185, 164, 85, 72, 73, 132, 209, 237, 150, 135, 141, 163, 179, 19, 100, 83, 168, 130, 233, 175, 83, 238, 168, 210, 148, 65, 35, 49, 116, 224, 145, 88, 209, 184, 137, 111, 219, 58, 208, 138, 109, 171, 37, 187, 134, 3, 23, 107, 59, 170, 77, 61, 69, 198, 140, 17, 139, 53, 146, 233, 5, 45, 59, 182, 116, 176, 18, 161, 92, 190, 66, 63, 99, 25, 146, 120, 109, 231, 170, 60, 114, 158, 74, 199, 1, 110, 18, 10, 51, 110, 177, 181, 94, 210, 73, 112, 113, 39, 74, 194, 79, 65, 180, 97, 7, 112, 87, 216, 134, 114, 84, 206, 139, 246, 33, 101, 228, 36, 24, 66, 231, 151, 174, 66, 28, 220, 78, 183, 12, 144, 251, 229, 219, 219, 254, 101, 202, 78, 217, 19, 127, 41, 149, 166, 48, 132, 33, 109, 236, 201, 89, 34, 69, 46, 63, 98, 1, 123, 165, 16, 93, 244, 207, 90, 194, 180, 254, 177, 84, 164, 79, 210, 73, 129, 205, 244, 221, 168, 223, 244, 239, 150, 229, 245, 23, 45, 135, 88, 134, 201, 214, 147, 162, 178, 36, 166, 12, 228, 20, 84, 43, 10, 235, 161, 59, 207, 148, 53, 195, 37, 204, 103, 106, 196, 238, 224, 239, 255, 30, 178, 35, 157, 240, 76, 174, 73, 106, 252, 61, 124, 236, 209, 99, 159, 125, 16, 16, 41, 13, 60, 43, 195, 163, 114, 220, 142, 216, 173, 5, 126, 6, 170, 250, 31, 74, 241, 225, 33, 50, 72, 230, 205, 121, 27, 92, 4, 151, 4, 173, 22, 170, 37, 97, 78, 155, 154, 244, 113, 13, 196, 53, 156, 93, 228, 165, 111, 228, 45, 117, 93, 38, 239, 188, 250, 139, 58, 148, 207, 168, 62, 73, 23, 71, 50, 144, 27, 212, 84, 109, 147, 83, 166, 128, 182, 209, 71, 27, 80, 185, 145, 219, 77, 82, 115, 224, 72, 28, 28, 49, 131, 28, 227, 102, 150, 178, 210, 50, 48, 223, 38, 94, 42, 94, 177, 50, 34, 144, 117, 186, 108, 214, 244, 143, 215, 240, 82, 134, 157, 43, 228, 158, 173, 27, 230, 30, 253, 54, 240, 184, 196, 181, 129, 118, 39, 131, 3, 207, 171, 152, 151, 74, 45, 9, 52, 119, 173, 33, 149, 140, 193, 148, 10, 45, 130, 199, 162, 81, 97, 138, 9, 103, 226, 113, 141, 201, 207, 20, 177, 249, 118, 149, 240, 20, 102, 220, 226, 146, 35, 157, 85, 68, 107, 166, 42, 199, 41, 231, 178, 53, 191, 93, 254, 193, 183, 20, 175, 179, 49, 236, 207, 200, 151, 0, 103, 91, 33, 101, 192, 128, 175, 108, 201, 125, 246, 143, 0, 217, 201, 211, 183, 116, 205, 194, 26, 125, 172, 249, 150, 123, 86, 218, 210, 122, 207, 60, 158, 71, 219, 216, 65, 33, 244, 212, 208, 158, 32, 177, 7, 170, 229, 119, 145, 125, 225, 163, 45, 168, 186, 242, 90, 81, 73, 17, 166, 208, 61, 29, 212, 197, 29, 230, 39, 78, 26, 31, 204, 59, 174, 155, 141, 231, 210, 129, 16, 251, 218, 199, 199, 4, 161, 143, 231, 167, 221, 14, 248, 126, 252, 235, 240, 8, 22, 171, 188, 64, 71, 191, 60, 228, 251, 153, 208, 232, 179, 85, 156, 102, 204, 17, 41, 99, 0, 216, 79, 16, 252, 120, 95, 142, 69, 201, 125, 236, 102, 113, 177, 164, 246, 233, 218, 107, 163, 33, 154, 116, 124, 75, 20, 227, 29, 200, 189, 82, 165, 48, 214, 150, 161, 220, 15, 12, 155, 135, 101, 211, 226, 170, 34, 69, 199, 132, 20, 97, 188, 79, 219, 253, 148, 103, 247, 140, 223, 159, 141, 134, 227, 180, 50, 113, 135, 169, 128, 144, 70, 52, 217, 114, 157, 104, 57, 37, 45, 244, 234, 28, 54, 206, 111, 138, 211, 188, 81, 53, 35, 1, 228, 7, 129, 210, 148, 152, 133, 161, 68, 180, 191, 52, 93, 135, 12, 26, 45, 132, 132, 205, 230, 199, 224, 80, 110, 144, 40, 2, 147, 90, 55, 39, 245, 71, 119, 45, 62, 96, 25, 242, 21, 4, 239, 40, 139, 233, 211, 133, 116, 36, 115, 237, 7, 248, 253, 216, 141, 49, 30, 176, 200, 230, 168, 185, 146, 13, 130, 78, 92, 170, 1, 241, 145, 20, 82, 33, 133, 217, 177, 233, 38, 21, 15, 56, 231, 64, 119, 21, 44, 39, 97, 144, 166, 162, 37, 115, 235, 42, 146, 34, 196, 32, 204, 72, 47, 57, 34, 240, 163, 169, 223, 81, 214, 76, 83, 151, 55, 165, 57, 45, 18, 33, 189, 50, 161, 180, 163, 156, 73, 16, 254, 231, 159, 86, 95, 223, 136, 227, 228, 225, 149, 252, 170, 13, 98, 213, 110, 150, 31, 85, 156, 97, 230, 229, 133, 56, 162, 172, 162, 6, 118, 247, 20, 76, 139, 53, 106, 103, 3, 103, 217, 145, 193, 109, 16, 213, 84, 34, 70, 195, 177, 96, 83, 7, 16, 207, 172, 245, 75, 154, 100, 38, 136, 228, 189, 196, 84, 31, 206, 56, 194, 198, 111, 75, 109, 195, 75, 129, 56, 91, 197, 78, 250, 54, 243, 51, 206, 109, 31, 203, 29, 94, 237, 4, 218, 49, 129, 182, 200, 245, 21, 171, 45, 188, 38, 172, 108, 91, 95, 91, 163, 152, 29, 169, 40, 175, 63, 226, 195, 209, 169, 136, 187, 161, 56, 113, 206, 185, 128, 21, 44, 72, 28, 42, 26, 67, 217, 113, 40, 160, 24, 120, 197, 59, 188, 215, 222, 3, 106, 217, 201, 216, 117, 201, 156, 81, 71, 248, 181, 205, 251, 74, 225, 206, 125, 109, 148, 183, 43, 173, 247, 70, 179, 109, 149, 53, 239, 145, 99, 123, 35, 103, 28, 26, 138, 17, 172, 121, 255, 80, 163, 201, 33, 201, 47, 125, 199, 3, 225, 122, 214, 41, 142, 188, 77, 236, 225, 40, 243, 209, 208, 249, 203, 209, 122, 114, 174, 135, 132, 120, 22, 28, 93, 1, 214, 33, 48, 48, 174, 26, 146, 113, 30, 149, 103, 76, 69, 249, 178, 22, 126, 140, 82, 164, 64, 54, 172, 59, 132, 241, 10, 200, 99, 193, 215, 89, 35, 93, 20, 83, 29, 83, 150, 71, 152, 59, 73, 237, 67, 40, 203, 53, 247, 185, 67, 49, 220, 92, 143, 24, 167, 14, 57, 252, 88, 48, 37, 180, 34, 230, 189, 52, 249, 140, 236, 219, 26, 223, 85, 126, 50, 34, 70, 200, 111, 37, 132, 135, 182, 121, 11, 186, 126, 177, 57, 205, 104, 96, 171, 62, 23, 188, 232, 144, 61, 185, 76, 27, 13, 141, 183, 94, 169, 244, 77, 13, 164, 75, 112, 88, 4, 210, 153, 66, 16, 178, 144, 170, 190, 25, 42, 221, 217, 123, 60, 152, 129, 11, 95, 179, 77, 64, 224, 230, 164, 194, 2, 4, 109, 2, 44, 155, 247, 225, 134, 224, 56, 252, 145, 239, 215, 108, 141, 122, 22, 100, 170, 215, 152, 208, 251, 90, 200, 72, 96, 153, 25, 54, 5, 170, 215, 66, 8, 76, 7, 229, 74, 111, 206, 163, 5, 247, 128, 12, 250, 118, 194, 99, 33, 1, 35, 192, 28, 43, 68, 2, 184, 144, 164, 229, 105, 40, 207, 139, 65, 134, 219, 18, 3, 76, 252, 182, 66, 194, 38, 103, 235, 0, 183, 12, 107, 227, 128, 213, 191, 99, 62, 236, 94, 64, 71, 232, 29, 151, 138, 225, 143, 161, 241, 225, 89, 10, 208, 50, 232, 219, 187, 20, 89, 162, 123, 37, 12, 97, 106, 252, 251, 241, 154, 123, 246, 146, 79, 19, 157, 82, 36, 246, 145, 9, 47, 236, 243, 245, 237, 228, 109, 14, 5, 229, 65, 109, 242, 107, 31, 26, 204, 223, 27, 2, 47, 61, 137, 136, 178, 226, 50, 9, 48, 31, 44, 228, 202, 252, 93, 250, 190, 188, 210, 115, 87, 244, 56, 105, 145, 55, 90, 169, 138, 114, 15, 62, 113, 62, 66, 91, 127, 102, 142, 102, 168, 152, 251, 40, 122, 46, 102, 235, 145, 136, 69, 148, 144, 5, 68, 206, 243, 116, 141, 96, 143, 118, 106, 202, 13, 151, 135, 43, 229, 95, 7, 32, 131] - ], - "iv": null, - "key": [74, 18, 84, 175, 227, 15, 202, 248, 133, 227, 165, 127, 150, 232, 234, 97], - "modeOfOperation": "ctr", - "plaintext": [ - [170, 94, 185, 29, 86, 74, 131, 217, 106, 234, 9, 67, 101, 234, 183, 251, 157, 136, 70, 61, 216, 93, 171, 230, 159, 196, 190, 65, 72, 60, 134, 98, 243, 232, 245, 102, 92, 72, 202, 9, 187, 76, 214, 54, 226, 48, 177, 13, 57, 196, 84, 50, 196, 42, 209, 164, 141, 13, 11, 167, 250, 107, 226, 113, 184, 104, 185, 207, 106, 187, 59, 181, 124, 57, 213, 4, 209, 58, 231, 119, 253, 137, 198, 18, 150, 231, 232, 2, 210, 238, 89, 83, 4, 225, 106, 23, 250, 204, 136, 0, 214, 103, 62, 33, 55, 126, 134, 84, 166, 238, 79, 14, 27, 80, 207, 92, 83, 150, 233, 49, 187, 186, 84, 38, 176, 198, 238, 228, 104, 44, 106, 35, 60, 208, 81, 82, 144, 94, 228, 3, 76, 30, 175, 178, 118, 33, 135, 151, 218, 24, 218, 154, 247, 144, 192, 11, 253, 2, 117, 195, 89, 174, 194, 71, 58, 235, 255, 103, 210, 251, 31, 120, 68, 146, 158, 249, 21, 50, 241, 232, 253, 113, 226, 182, 86, 25, 198, 195, 249, 136, 149, 174, 92, 224, 214, 214, 32, 112, 166, 252, 36, 67, 90, 201, 38, 130, 226, 231, 90, 146, 159, 211, 40, 83, 115, 218, 27, 247, 122, 93, 73, 39, 44, 71, 243, 44, 196, 169, 177, 227, 120, 75, 130, 30, 0, 182, 74, 77, 55, 1, 196, 230, 148, 192, 210, 70, 188, 93, 130, 24, 30, 9, 255, 74, 99, 120, 82, 204, 16, 221, 43, 113, 32, 9, 127, 254, 169, 23, 122, 52, 62, 239, 235, 142, 15, 142, 104, 248, 29, 152, 109, 118, 9, 171, 91, 52, 211, 64, 240, 160, 127, 94, 154, 237, 211, 190, 217, 119, 33, 181, 29, 196, 217, 246, 211, 255, 215, 74, 159, 36, 79, 3, 56, 167, 89, 174, 74, 74, 7, 41, 62, 171, 223, 104, 239, 210, 152, 153, 30, 202, 6, 196, 21, 178, 8, 19, 184, 65, 139, 139, 189, 135, 70, 25, 56, 55, 35, 201, 131, 217, 214, 183, 49, 93, 44, 226, 165, 72, 203, 108, 96, 96, 0, 165, 46, 234, 245, 47, 158, 146, 133, 133, 163, 153, 106, 196, 188, 61, 52, 190, 118, 211, 165, 251, 56, 183, 183, 167, 125, 213, 70, 120, 149, 138, 10, 21, 182, 209, 127, 19, 29, 101, 42, 146, 225, 142, 255, 56, 206, 83, 103, 0, 57, 89, 96, 22, 22, 73, 61, 138, 230, 237, 84, 35, 221, 32, 114, 96, 239, 55, 70, 48, 189, 56, 114, 106, 48, 225, 88, 155, 10, 42, 174, 222, 223, 36, 74, 130, 134, 83, 124, 235, 14, 208, 35, 97, 253, 161, 58, 79, 91, 150, 138, 212, 223, 178, 196, 151, 249, 226, 174, 1, 96, 155, 35, 91, 88, 35, 171, 106, 192, 241, 231, 36, 13, 152, 146, 126, 130, 76, 16, 247, 194, 173, 105, 178, 132, 36, 250, 19, 162, 23, 169, 188, 124, 208, 110, 156, 150, 243, 15, 191, 101, 1, 57, 189, 221, 140, 101, 215, 135, 166, 56, 101, 229, 232, 96, 75, 21, 132, 242, 17, 71, 94, 251, 168, 75, 215, 200, 211, 44, 113, 175, 17, 34, 94, 106, 71, 85, 178, 30, 169, 147, 22, 146, 219, 111, 88, 237, 68, 34, 87, 134, 94, 120, 106, 203, 71, 162, 112, 165, 32, 200, 110, 105, 153, 253, 64, 95, 187, 175, 70, 247, 22, 214, 184, 38, 250, 34, 210, 66, 107, 158, 43, 149, 234, 211, 165, 197, 212, 244, 160, 181, 218, 42, 178, 171, 10, 136, 106, 212, 69, 68, 163, 165, 199, 218, 56, 77, 114, 78, 227, 156, 41, 55, 153, 158, 174, 50, 163, 117, 90, 253, 93, 63, 251, 216, 153, 22, 11, 42, 227, 58, 229, 79, 223, 231, 46, 206, 52, 135, 178, 205, 54, 186, 165, 64, 60, 66, 40, 136, 124, 31, 248, 229, 6, 134, 20, 88, 28, 26, 90, 238, 225, 213, 168, 32, 156, 2, 36, 24, 136, 48, 218, 116, 155, 113, 229, 168, 92, 20, 92, 104, 233, 249, 63, 69, 249, 109, 72, 210, 8, 146, 124, 199, 123, 218, 240, 48, 208, 155, 201, 11, 21, 207, 90, 251, 196, 65, 233, 72, 2, 89, 233, 40, 142, 247, 43, 240, 44, 144, 108, 184, 211, 56, 243, 89, 182, 151, 195, 28, 8, 254, 83, 82, 14, 115, 204, 175, 78, 74, 78, 81, 54, 150, 97, 44, 33, 56, 131, 69, 238, 22, 43, 254, 165, 11, 195, 97, 229, 146, 40, 157, 44, 248, 130, 198, 71, 35, 20, 16, 15, 154, 61, 226, 66, 149, 46, 150, 189, 19, 119, 158, 184, 246, 62, 177, 215, 233, 175, 132, 215, 108, 137, 205, 210, 28, 20, 204, 17, 52, 156, 217, 91, 228, 201, 213, 240, 141, 219, 104, 235, 122, 190, 163, 209, 41, 157, 127, 86, 61, 127, 131, 82, 153, 7, 45, 240, 221, 246, 56, 160, 240, 122, 238, 219, 166, 226, 144, 67, 194, 15, 65, 157, 212, 179, 181, 76, 61, 198, 21, 15, 230, 94, 94, 154, 39, 157, 164, 140, 38, 55, 53, 242, 238, 218, 0, 251, 118, 146, 10, 63, 120, 7, 242, 179, 241, 125, 69, 191, 107, 53, 136, 45, 165, 119, 4, 188, 138, 150, 45, 251, 23, 168, 71, 178, 232, 87, 132, 184, 100, 9, 25, 113, 79, 227, 101, 23, 45, 207, 185, 92, 110, 103, 236, 16, 45, 189, 124, 182, 132, 197, 150, 126, 65, 18, 227, 43, 199, 122, 200, 119, 106, 4, 30, 110, 32, 4, 85, 35, 139, 92, 180, 50, 232, 45, 154, 67, 24, 14, 180, 57, 0, 146, 194, 54, 127, 36, 229, 134, 248, 172, 226, 58, 197, 120, 147, 191, 77, 132, 122, 43, 218, 228, 130, 85, 137, 236, 215, 167, 128, 51, 180, 167, 61, 73, 233, 139, 95, 200, 250, 36, 192, 57, 203, 33, 177, 245, 191, 189, 197, 217, 85, 35, 216, 123, 69, 158, 242, 149, 245, 146, 148, 121, 48, 47, 144, 58, 121, 191, 94, 211, 18, 58, 85, 230, 2, 247, 128, 76, 170, 162, 132, 164, 214, 89, 45, 208, 89, 5, 246, 126, 125, 221, 65, 186, 179, 99, 87, 159, 102, 52, 14, 40, 200, 136, 177, 74, 117, 96, 182, 215, 19, 17, 21, 175, 249, 227, 11, 77, 158, 147, 140, 86, 169, 8, 199, 227, 20, 214, 244, 16, 231, 139, 85, 163, 55, 41, 93, 140, 232, 90, 1, 160, 216, 69, 73, 195, 198, 198, 23, 228, 85, 23, 70, 251, 102, 22, 12, 25, 180, 227, 136, 217, 156, 134, 113, 116, 213, 235, 45, 33, 183, 98, 50, 223, 127, 31, 18, 66, 44, 170, 224, 143, 53, 116, 36, 120, 220, 164, 13, 170, 232, 133, 152, 153, 102, 9, 129, 10, 43, 196, 137, 196, 251, 39, 115, 130, 36, 171, 217, 144, 151, 214, 164, 159, 176, 244, 7, 209, 236, 203, 94, 134, 225, 146, 142, 237, 254, 91, 191, 51, 54, 173, 246, 222, 96, 200, 234, 111, 198, 87, 183, 159, 98, 135, 165, 120, 40, 203, 132, 163, 170, 193, 172, 245, 71, 210, 23, 230, 76, 248, 239, 223, 24, 23, 110, 152, 56, 8, 44, 191, 202, 162, 82, 85, 5, 139, 52, 165, 150, 147, 59, 88, 255, 115, 199, 194, 32, 100, 96, 245, 179, 16, 188, 6, 23, 88, 82, 249, 100, 184, 176, 136, 90, 250, 21, 53, 147, 110, 159, 157, 50, 168, 24, 89, 236, 185, 112, 41, 14, 171, 87, 32, 61, 136, 33, 237, 136, 8, 212, 214, 182, 2, 182, 170, 228, 248, 223, 92, 179, 36, 184, 124, 73, 146, 149, 164, 161, 236, 188, 226, 124, 127, 130, 70, 253, 249, 34, 137, 39, 118, 47, 45, 142, 140, 84, 250, 150, 19, 185, 230, 223, 128, 18, 148, 74, 230, 4, 102, 99, 213, 11, 196, 26, 153, 237, 59, 201, 245, 224, 15, 231, 200, 62, 76, 45, 175, 231, 250, 140, 171, 13, 178, 122, 157, 196, 20, 102, 128, 227, 49, 168, 30, 196, 123, 60, 139, 243, 140, 138, 217, 239, 136, 8, 161, 96, 82, 156, 50, 87, 168, 239, 7, 172, 3, 167, 137, 17, 189, 116, 247, 57, 36, 4, 47, 191, 88, 211, 52, 78, 95, 16, 243, 195, 74, 90, 131, 89, 253, 142, 138, 129, 85, 105, 101, 97, 180, 87, 98, 206, 205, 157, 226, 195, 59, 16, 202, 224, 115, 249, 201, 176, 227, 2, 237, 48, 241, 183, 186, 167, 132, 253, 123, 21, 166, 31, 136, 38, 54, 29, 63, 131, 114, 141, 237, 57, 249, 192, 40, 185, 149, 207, 67, 188, 31, 63, 213, 249, 184, 224, 108, 56, 24, 151, 115, 62, 25, 178, 145, 54, 136, 224, 78, 229, 206, 108, 26, 42, 139, 14, 150, 42, 58, 82, 90, 242, 47, 126, 215, 52, 135, 175, 246, 197, 111, 120, 57, 31, 119, 22, 93, 100, 167, 29, 102, 166, 139, 194, 118, 156, 217, 16, 100, 11, 192, 209, 195, 224, 246, 47, 162, 163, 117, 112, 107, 135, 67, 168, 241, 159, 254, 207, 186, 218, 168, 245, 220, 87, 118, 130, 151, 154, 9, 85, 222, 85, 121, 58, 12, 30, 166, 143, 168, 23, 127, 48, 8, 215, 253, 232, 70, 78, 7, 7, 126, 220, 93, 78, 68, 226, 80, 21, 55, 93, 111, 157, 183, 1, 206, 187, 90, 107, 21, 71, 189, 63, 172, 135, 86, 224, 242, 120, 172, 144, 148, 89, 172, 56, 247, 67, 45, 170, 99, 13, 236, 208, 135, 72, 133, 143, 252, 154, 227, 161, 175, 225, 58, 166, 127, 92, 148, 119, 194, 84, 184, 32, 3, 194, 78, 153, 160, 126, 173, 78, 20, 213, 42, 58, 161, 124, 211, 255, 192, 226, 155, 175, 97, 94, 107, 196, 72, 246, 117, 116, 189, 190, 242, 144, 57, 168, 12, 193, 3, 24, 64, 140, 16, 81, 77, 160, 253, 175, 226, 50, 8, 63, 138, 38, 24, 104, 218, 101, 88, 17, 122, 161, 26, 211, 246, 67, 243, 60, 208, 40, 145, 254, 85, 95, 53, 90, 233, 245, 129, 219, 90, 243, 56, 224, 185, 157, 91, 77, 129, 3, 202, 179, 119, 89, 45, 1, 120, 203, 150, 91, 80, 147, 234, 21, 4, 60, 107, 59, 44, 10, 42, 103, 81, 206, 238, 73, 115, 254, 119, 144, 8, 161, 188, 231, 104, 239, 249, 165, 35, 198, 21, 143, 70, 11, 157, 74, 196, 198, 133, 110, 41, 39, 34, 51, 128, 137, 126, 139, 25, 122, 112, 51, 209, 79, 110, 191, 181, 28, 98, 166, 99, 197, 108, 158, 172, 213, 177, 235, 237, 60, 164, 47, 64, 253, 114, 220, 135, 43, 132, 42, 196, 79, 236, 215, 95, 48, 162, 167, 31, 120, 57, 148, 241, 253, 34, 242, 97, 84, 85, 207, 20, 225, 135, 191, 188, 201, 22, 132, 42, 5, 29, 64, 119, 188, 242, 207, 132, 216, 215, 73, 161, 196, 199, 195, 243, 116, 170, 168, 71, 62, 87, 42, 46, 43, 245, 70, 166, 140, 189, 188, 72, 39, 208, 153, 206, 230, 106, 54, 123, 84, 71, 95, 214, 189, 19, 86, 211, 218, 99, 118, 204, 234, 2, 162, 54, 31, 62, 157, 51, 98, 182, 15, 227, 0, 55, 50, 59, 204, 218, 192, 131, 88, 95, 212, 184, 234, 102, 249, 191, 35, 210, 115, 244, 186, 90, 81, 123, 172, 105, 226, 191, 179, 203, 12, 237, 115, 73, 231, 0, 175, 229, 5, 91, 169, 44, 26, 108, 235, 78, 174, 175, 62, 207, 131, 91, 76, 112, 3, 211, 137, 239, 19, 145, 163, 160, 160, 242, 180, 143, 157, 30, 249, 156, 30, 66, 135, 86, 122, 90, 205, 150, 225, 77, 81, 184, 200, 125, 239, 105, 252, 98, 240, 251, 84, 88, 74, 36, 111, 8, 255, 208, 82, 172, 177, 57, 39, 200, 230, 149, 240, 126, 132, 236, 111, 223, 252, 255, 33, 147, 55, 105, 10, 245, 252, 254, 233, 168, 103, 87, 136, 153, 88, 15, 7, 40, 211, 238, 97, 166, 116, 149, 205, 173, 123, 237, 176, 241, 26, 147, 78, 187, 97, 171, 120, 99, 110, 218, 193, 3, 179, 36, 133, 62, 218, 136, 116, 35, 174, 226, 245, 201, 15, 126, 179, 192, 228, 197, 20, 75, 83, 171, 107, 71, 225, 104, 158, 207, 170, 171, 144, 192, 84, 99, 98, 202, 25, 215, 106, 158, 132, 100, 120, 234, 103, 153, 75, 94, 126, 61, 12, 5, 205, 238, 231, 217, 128, 112, 234, 166, 233, 44, 102, 39, 162, 16, 16, 198, 225, 213, 67, 254, 159, 205, 48, 201, 116, 195, 45, 244, 193, 134, 125, 34, 203, 66, 188, 39, 151, 132, 172, 25, 16, 124, 41, 162, 46, 158, 255, 5, 137, 107, 189, 206, 183, 83, 85, 105, 143, 82, 24, 115, 223, 210, 96, 205, 242, 38, 122, 82, 135, 141, 229, 9, 76, 67, 87, 209, 100, 27, 24, 184, 125, 48, 141, 4, 113, 8, 154, 56, 120, 96, 198, 102, 222, 65, 38, 143, 144, 210, 100, 192, 139, 61, 178, 98, 99, 206, 212, 230, 50, 58, 161, 17, 191, 119, 104, 47, 202, 211, 245, 131, 103, 225, 162, 221, 227, 23, 196, 66, 227, 150, 242, 244, 18, 96, 216, 207, 18, 136, 239, 210, 74, 18, 66, 119, 189, 208, 251, 116, 173, 38, 187, 62, 248, 88, 224, 152, 153, 146, 150, 52, 77, 163, 251, 218, 98, 187, 234, 112, 82, 204, 143, 121, 208, 219, 209, 12, 195, 102, 147, 227, 145, 165, 170, 43, 250, 103, 225, 17, 82, 134, 107, 167, 184, 183, 141, 238, 158, 9, 153, 182, 60, 228, 229, 206, 216, 202, 140, 189, 127, 142, 148, 37, 131, 49, 81, 224, 18, 237, 88, 106, 106, 20, 205, 18, 86, 237, 48, 219, 57, 40, 222, 139, 27, 140, 214, 164, 199, 14, 51, 181, 1, 189, 177, 85, 63, 153, 212, 36, 21, 65, 154, 49, 150, 176, 41, 33, 231, 243, 18, 170, 242, 230, 184, 36, 31, 103, 38, 229, 14, 255, 128, 167, 9, 16, 32, 154, 58, 193, 46, 179, 67, 13, 71, 55, 236, 148, 127, 212, 148, 171, 45, 19, 223, 253, 51, 221, 176, 126, 92, 11, 73, 135, 194, 65, 24, 35, 39, 213, 83, 167, 11, 67, 219, 0, 170, 177, 84, 255, 145, 95, 145, 229, 242, 7, 109, 169, 178, 68, 20, 90, 180, 63, 70, 178, 42, 246, 205, 157, 180, 141, 242, 243, 5, 2, 75, 7, 123, 181, 229, 211, 42, 249, 135, 76, 77, 190, 224, 248, 255, 240, 6, 38, 25, 187, 20, 9, 84, 177, 190, 228, 31, 104, 194, 151, 173, 91, 118, 215, 23, 46, 15, 19, 223, 213, 150, 84, 226, 112, 102, 91, 20, 115, 175, 249, 123, 165, 56, 160, 135, 52, 221, 250, 235, 10, 146, 47, 40, 118, 196, 182, 171, 212, 120, 11, 38, 88, 226, 199, 145, 32, 115, 15, 108, 129, 228, 29, 225, 245, 100, 210, 209, 121, 88, 187, 10, 244, 53, 191, 35, 140, 238, 48, 202, 135, 224, 174, 185, 110, 91, 227, 198, 120, 134, 14, 34, 48, 176, 169, 85, 184, 139, 166, 181, 116, 57, 4, 89, 151, 228, 220, 65, 13, 69, 228, 211, 123, 192, 150, 239, 160, 142, 108, 12, 89, 51, 248, 249, 45, 33, 226, 96, 144, 141, 11, 17, 59, 163, 66, 19, 52, 20, 158, 219, 132, 251, 82, 36, 39, 79, 51, 223, 199, 37, 150, 230, 247, 15, 56, 105, 94, 5, 253, 78, 200, 146, 155, 162, 56, 174, 105, 111, 214, 65, 109, 125, 69, 81, 98, 215, 184, 55, 21, 113, 174, 172, 184, 59, 239, 11, 230, 224, 10, 176, 241, 246, 105, 188, 214, 113, 164, 52, 34, 67, 160, 242, 5, 236, 7, 94, 7, 152, 31, 9, 247, 2, 127, 235, 92, 64, 104, 32, 185, 103, 92, 226, 50, 127, 75, 143, 145, 59, 73, 33, 78, 242, 187, 228, 41, 147, 9, 96, 203, 33, 25, 138, 178, 146, 97, 111, 219, 180, 242, 33, 203, 15, 134, 87, 68, 204, 43, 10, 112, 109, 29, 229, 37, 134, 167, 179, 133, 32, 220, 252, 31, 35, 78, 68, 5, 219, 3, 200, 202, 86, 23, 213, 78, 19, 172, 55, 184, 170, 139, 195, 11, 23, 175, 124, 22, 128, 187, 178, 44, 13, 203, 183, 226, 54, 117, 226, 209, 25, 230, 156, 94, 214, 53, 6, 21, 222, 132, 182, 161, 42, 225, 166, 32, 52, 131, 209, 8, 181, 3, 14, 184, 226, 59, 162, 40, 193, 44, 146, 92, 77, 180, 83, 190, 74, 86, 193, 21, 178, 107, 178, 235, 13, 32, 59, 167, 17, 82, 81, 215, 148, 95, 70, 129, 149, 220, 36, 24, 84, 204, 106, 175, 217, 36, 187, 195, 169, 155, 178, 139, 112, 142, 231, 171, 129, 34, 140, 180, 192, 115, 234, 152, 198, 77, 223, 181, 198, 156, 177, 3, 165, 83, 153, 186, 180, 115, 69, 135, 4, 31, 237, 129, 130, 210, 232, 48, 121, 210, 197, 0, 233, 195, 83, 119, 252, 135, 252, 15, 26, 128, 141, 247, 33, 154, 3, 125, 129, 77, 118, 53, 43, 182, 222, 40, 160, 117, 191, 163, 135, 63, 191, 229, 10, 109, 55, 248, 142, 214, 7, 184, 1, 209, 3, 248, 139, 162, 144, 122, 39, 32, 122, 79, 124, 3, 127, 141, 42, 32, 13, 226, 102, 184, 165, 238, 208, 131, 28, 186, 140, 47, 13, 243, 60, 176, 201, 52, 229, 3, 97, 186, 47, 9, 43, 73, 115, 246, 118, 172, 240, 79, 154, 148, 154, 152, 254, 68, 19, 173, 232, 31, 120, 138, 130, 223, 156, 126, 164, 235, 176, 82, 159, 148, 111, 227, 226, 102, 63, 68, 27, 25, 140, 23, 232, 79, 48, 83, 3, 119, 219, 219, 86, 94, 55, 80, 137, 240, 160, 137, 229, 75, 221, 48, 139, 165, 65, 224, 179, 170, 86, 151, 255, 208, 61, 125, 166, 7, 8, 232, 65, 158, 200, 78, 118, 65, 154, 73, 222, 233, 132, 181, 251, 86, 78, 194, 198, 12, 194, 134, 181, 150, 19, 181, 129, 12, 124, 134, 236, 238, 216, 198, 104, 156, 250, 154, 248, 240, 84, 78, 116, 170, 67, 39, 6, 51, 232, 169, 228, 2, 132, 14, 56, 226, 17, 203, 193, 70, 11, 219, 183, 78, 142, 41, 232, 71, 44, 74, 90, 205, 17, 36, 100, 242, 20, 98, 212, 207, 138, 133, 61, 41, 223, 97, 61, 59, 138, 245, 159, 24, 124, 185, 181, 175, 202, 138, 231, 11, 147, 244, 107, 140, 77, 101, 41, 2, 62, 49, 125, 158, 134, 215, 107, 131, 80, 31, 145, 102, 120, 56, 248, 236, 192, 17, 226, 245, 119, 193, 147, 107, 155, 169, 236, 109, 83, 36, 53, 198, 145, 157, 162, 184, 72, 105, 235, 108, 86, 44, 141, 194, 21, 25, 130, 70, 169, 241, 61, 170, 149, 85, 158, 252, 0, 49, 175, 254, 169, 254, 88, 118, 188, 84, 59, 15, 137, 135, 222, 198, 160, 178, 245, 43, 196, 37, 185, 236, 3, 80, 1, 97, 94, 85, 170, 95, 2, 57, 41, 248, 242, 187, 143, 161, 84, 110, 167, 165, 193, 237, 26, 232, 178, 141, 160, 47, 189, 129, 74, 133, 4, 20, 151, 223, 87, 166, 67, 232, 230, 128, 19, 20, 190, 131, 34, 34, 79, 114, 206, 78, 105, 28, 126, 42, 178, 77, 155, 208, 124, 163, 38, 238, 15, 216, 42, 78, 199, 137, 59, 132, 60, 106, 112, 230, 110, 183, 0, 192, 144, 151, 135, 220, 81, 89, 163, 20, 107, 209, 51, 225, 152, 193, 38, 5, 60, 12, 54, 33, 120, 119, 3, 162, 3, 255, 248, 243, 220, 66, 100, 208, 198, 159, 61, 158, 254, 200, 74, 199, 200, 163, 122, 206, 132, 234, 89, 219, 219, 18, 78, 55, 68, 181, 32, 158, 9, 45, 172, 235, 55, 131, 89, 188, 87, 172, 208, 220, 138, 58, 117, 121, 238, 226, 66, 34, 193, 153, 126, 49, 26, 29, 251, 77, 2, 175, 131, 193, 17, 224, 67, 219, 30, 46, 146, 176, 248, 219, 1, 31, 213, 35, 2, 46, 164, 10, 165, 145, 13, 221, 43, 138, 106, 58, 141, 32, 111, 33, 203, 124, 192, 116, 98, 201, 188, 86, 216, 81, 216, 48, 65, 48, 135, 5, 82, 233, 219, 152, 9, 154, 102, 88, 156, 168, 96, 245, 156, 184, 36, 112, 238, 63, 143, 56, 169, 95, 145, 148, 14, 82, 170, 130, 171, 34, 102, 115, 114, 174, 158, 144, 71, 112, 99, 24, 215, 76, 156, 121, 69, 155, 170, 50, 146, 36, 27, 193, 203, 30, 23, 193, 100, 21, 110, 224, 180, 25, 68, 157, 82, 215, 212, 32, 186, 101, 255, 242, 159, 9, 125, 57, 30, 67, 197, 31, 239, 251, 160, 129, 79, 249, 195, 116, 141, 173, 141, 121, 62, 240, 71, 183, 3, 134, 92, 250, 225, 68, 199, 193, 35, 29, 89, 40, 178, 60, 240, 103, 222, 157, 146, 84, 255, 62, 87, 30, 148, 166, 51, 253, 0, 108, 246, 63, 99, 164, 233, 141, 8, 195, 115, 34, 71, 10, 110, 158, 4, 12, 76, 40, 143, 47, 56, 53, 217, 209, 209, 60, 167, 47, 160, 153, 148, 63, 48, 150, 233, 71, 252, 228, 15, 239, 223, 81, 79, 44, 209, 223, 226, 168, 166, 83, 229, 119, 21, 163, 225, 206, 124, 78, 168, 131, 159, 27, 204, 28, 182, 207, 217, 155, 206, 234, 220, 38, 68, 192, 133, 100, 213, 154, 109, 18, 85, 80, 67, 187, 158, 105, 55, 46, 100, 49, 8, 22, 207, 6, 92, 15, 108, 63, 18, 75, 63, 89, 8, 120, 61, 5, 7, 9, 113, 91, 5, 3, 169, 21, 39, 219, 214, 86, 33, 190, 147, 69, 123, 53, 187, 0, 30, 139, 212, 126, 109, 181, 216, 238, 91, 15, 28, 243, 151, 203, 166, 223, 204, 152, 57, 225, 209, 235, 15, 189, 122, 193, 212, 67, 164, 25, 6, 7, 5, 36, 254, 21, 187, 118, 54, 233, 253, 158, 131, 156, 146, 72, 218, 192, 68, 91, 115, 222, 137, 164, 143, 169, 2, 89, 68, 126, 43, 148, 205, 148, 166, 240, 189, 166, 194, 89, 37, 53, 191, 41, 8, 75, 55, 253, 28, 128, 169, 187, 157, 136, 40, 183, 184, 63, 198, 195, 170, 160, 89, 108, 144, 209, 59, 111, 218, 11, 208, 103, 4, 216, 123, 239, 47, 199, 106, 179, 39, 48, 158, 71, 246, 254, 136, 132, 179, 178, 104, 201, 137, 214, 247, 148, 207, 223, 181, 70, 158, 22, 216, 72, 197, 228, 6, 114, 141, 47, 27, 139, 184, 248, 167, 54, 33, 184, 32, 40, 229, 90, 93, 49, 211, 211, 151, 214, 200, 163, 167, 116, 159, 240, 79, 172, 237, 209, 65, 203, 216, 194, 138, 11, 84, 117, 194, 232, 137, 119, 33, 40, 220, 77, 238, 129, 116, 226, 93, 78, 171, 48, 251, 94, 224, 141, 37, 187, 44, 253, 183, 24, 52, 136, 158, 105, 211, 97, 33, 83, 87, 254, 163, 92, 35, 99, 30, 74, 59, 212, 213, 62, 219, 142, 85, 65, 54, 250, 2, 19, 157, 161, 225, 2, 50, 115, 184, 110, 42, 91, 63, 58, 12, 157, 43, 10, 185, 208, 137, 142, 197, 237, 235, 85, 149, 1, 248, 0, 13, 183, 62, 169, 138, 125, 114, 5, 125, 42, 97, 162, 108, 95, 59, 108, 209, 83, 38, 25, 82, 117, 48, 104, 112, 42, 97, 20, 1, 195, 138, 161, 254, 124, 139, 108, 59, 109, 13, 101, 247, 17, 55, 9, 244, 158, 138, 13, 15, 47, 161, 210, 92, 225, 13, 163, 54, 156, 124, 107, 127, 231, 49, 112, 75, 0, 88, 182, 250, 153, 75, 187, 154, 97, 149, 34, 80, 98, 196, 82, 126, 143, 25, 246, 115, 86, 200, 239, 166, 163, 136, 101, 198, 229, 140, 144, 161, 213, 162, 176, 36, 149, 231, 177, 113, 57, 31, 214, 47, 97, 254, 227, 137, 145, 133, 49, 173, 186, 94, 55, 147, 77, 100, 105, 154, 246, 6, 41, 86, 62, 78, 186, 138, 90, 38, 14, 48, 138, 38, 99, 156, 206, 61, 5, 86, 140, 50, 92, 145, 86, 61, 115, 192, 65, 63, 133, 75, 27, 25, 161, 98, 239, 179, 181, 79, 11, 82, 225, 197, 103, 1, 58, 118, 89, 248, 213, 88, 161, 183, 170, 88, 105, 139, 75, 181, 231, 107, 206, 20, 151, 53, 82, 112, 228, 197, 229, 178, 237, 174, 116, 140, 115, 41, 73, 164, 196, 193, 170, 160, 148, 158, 124, 147, 83, 165, 35, 199, 150, 245, 88, 195, 224, 74, 86, 210, 79, 26, 254, 205, 47, 227, 199, 211, 65, 119, 149, 25, 128, 101, 21, 12, 202, 94, 224, 225, 55, 224, 45, 216, 68, 229, 244, 17, 68, 99, 52, 52, 205, 190, 4, 49, 5, 241, 54, 107, 102, 63, 89, 180, 217, 157, 139, 26, 64, 82, 153, 33, 170, 65, 76, 119, 249, 134, 80, 120, 88, 206, 93, 88, 203, 218, 227, 164, 105, 110, 216, 176, 108, 170, 96, 120, 121, 74, 7, 100, 47, 253, 255, 217, 182, 119, 28, 30, 185, 173, 76, 74, 190, 239, 117, 231, 62, 76, 187, 62, 221, 13, 245, 75, 81, 208, 108, 115, 65, 25, 140, 31, 234, 62, 33, 13, 214, 80, 254, 208, 132, 83, 69, 101, 188, 159, 33, 245, 91, 71, 185, 213, 79, 17, 116, 111, 161, 30, 163, 232, 70, 26, 13, 237, 18, 84, 228, 30, 238, 155, 142, 128, 116, 128, 105, 201, 138, 191, 41, 47, 206, 76, 4, 84, 183, 181, 6, 103, 123, 49, 166, 90, 51, 120, 107, 47, 149, 174, 95, 17, 185, 244, 86, 203, 103, 95, 173, 135, 230, 56, 35, 102, 54, 142, 107, 229, 221, 77, 199, 21, 76, 216, 248, 46, 229, 146, 78, 186, 121, 1, 20, 90, 115, 234, 10, 134, 117, 187, 204, 173, 12, 183, 59, 253, 114, 79, 215, 70, 15, 208, 186, 127, 232, 186, 168, 17, 177, 173, 79, 108, 87, 119, 92, 139, 100, 71, 127, 57, 126, 137, 167, 112, 72, 39, 53, 46, 135, 139, 96, 239, 18, 168, 119, 77, 94, 162, 66, 4, 214, 58, 99, 143, 127, 153, 230, 163, 36, 37, 15, 202, 18, 169, 107, 15, 194, 101, 133, 62, 194, 213, 94, 170, 15, 148, 198, 171, 229, 148, 126, 168, 241, 220, 186, 229, 207, 10, 113, 194, 225, 160, 161, 233, 194, 115, 179, 97, 110, 236, 160, 179, 122, 200, 62, 252, 149, 43, 135, 57, 149, 249, 112, 142, 160, 97, 146, 94, 215, 63, 80, 38, 14, 136, 113, 219, 192, 83, 198, 91, 63, 117, 20, 169, 142, 133, 154, 112, 246, 187, 200, 211, 127, 209, 81, 152, 163, 8, 162, 0, 17, 79, 21, 177, 104, 146, 58, 225, 45, 244, 141, 198, 125, 144, 187, 35, 207, 60, 98, 211, 131, 80, 125, 162, 8, 53, 66, 105, 218, 172, 240, 172, 4, 223, 158, 99, 11, 251, 103, 77, 236, 122, 22, 166, 143, 172, 197, 243, 117, 174, 150, 190, 250, 71, 55, 60, 98, 201, 199, 104, 167, 74, 153, 105, 112, 33, 7, 118, 110, 75, 166, 176, 112, 194, 224, 79, 151, 125, 206, 62, 25, 187, 136, 132, 144, 252, 131, 127, 14, 142, 86, 106, 49, 171, 83, 154, 42, 141, 80, 84, 194, 32, 136, 9, 134, 217, 255, 189, 120, 157, 84, 194, 94, 225, 53, 157, 38, 208, 53, 73, 91, 209, 230, 149, 9, 153, 227, 71, 104, 69, 156, 89, 234, 210, 222, 78, 72, 91, 165, 163, 191, 22, 202, 80, 57, 67, 153, 113, 148, 140, 78, 139, 42, 27, 200, 254, 146, 232, 67, 101, 59, 197, 194, 21, 54, 19, 234, 116, 172, 47, 246, 11, 64, 185, 203, 154, 77, 18, 20, 135, 71, 29, 228, 9, 145, 165, 138, 219, 74, 180, 59, 89, 92, 25, 18, 236, 252, 58, 154, 110, 0, 100, 192, 146, 126, 27, 81, 148, 7, 91, 32, 86, 149, 200, 40, 226, 105, 189, 255, 11, 181, 153, 48, 107, 58, 66, 98, 212, 24, 235, 120, 106, 132, 78, 188, 123, 58, 22, 211, 46, 146, 86, 149, 30, 85, 208, 4, 191, 211, 248, 10, 61, 133, 131, 90, 51, 161, 2, 25, 195, 120, 205, 244, 124, 120, 133, 52, 115, 195, 42, 177, 242, 114, 47, 63, 137, 103, 1, 85, 214, 30, 55, 36, 155, 70, 16, 216, 38, 115, 84, 82, 226, 48, 88, 68, 49, 17, 80, 76, 59, 156, 24, 227, 1, 53, 178, 12, 79, 36, 75, 22, 203, 199, 108, 134, 74, 0, 234, 215, 183, 50, 170, 32, 154, 0, 88, 66, 178, 67, 23, 94, 77, 200, 157, 12, 74, 33, 205, 60, 141, 71, 183, 167, 71, 135, 187, 245, 172, 225, 121, 95, 115, 11, 9, 14, 31, 75, 108, 78, 229, 87, 191, 56, 132, 18, 50, 66, 161, 34, 72, 109, 77, 246, 9, 219, 117, 203, 36, 154, 115, 130, 156, 161, 178, 210, 86, 48, 196, 215, 133, 13, 82, 165, 1, 210, 9, 53, 47, 204, 96, 195, 39, 216, 82, 124, 228, 75, 90, 65, 2, 213, 11, 169, 71, 121, 111, 209, 25, 48, 83, 113, 134, 221, 227, 248, 39, 70, 9, 226, 252, 175, 187, 250, 5, 175, 118, 83, 24, 84, 199, 44, 250, 37, 99, 57, 66, 186, 168, 181, 198, 140, 252, 212, 32, 99, 37, 197, 89, 98, 90, 15, 110, 0, 244, 212, 191, 29, 19, 230, 71, 233, 73, 175, 152, 24, 133, 53, 237, 107, 123, 0, 215, 169, 131, 133, 137, 211, 253, 199, 62, 54, 15, 92, 30, 243, 34, 188, 108, 217, 243, 145, 132, 47, 252, 26, 66, 108, 26, 61, 158, 225, 151, 221, 212, 195, 133, 116, 229, 198, 146, 157, 147, 99, 115, 76, 2, 160, 180, 187, 146, 145, 106, 140, 112, 147, 71, 84, 36, 139, 206, 73, 122, 128, 187, 162, 132, 181, 212, 57, 223, 167, 43, 127, 61, 16, 154, 209, 246, 159, 253, 175, 114, 238, 92, 48, 206, 100, 22, 52, 48, 112, 92, 152, 147, 205, 32, 145, 52, 94, 176, 78, 86, 36, 245, 113, 181, 63, 87, 154, 73, 32, 48, 235, 4, 78, 139, 140, 83, 136, 243, 201, 82, 23, 228, 55, 9, 101, 221, 127, 7, 233, 213, 78, 126, 247, 165, 8, 6, 145, 196, 188, 167, 145, 11, 2, 58, 139, 212, 194, 107, 40, 26, 47, 170, 204, 248, 68, 60, 40, 181, 112, 36, 36, 88, 12, 132, 251, 186, 33, 10, 11, 183, 32, 180, 82, 183, 164, 200, 78, 206, 213, 43, 175, 72, 63, 169, 246, 192, 115, 197, 194, 170, 144, 247, 122, 234, 252, 230, 57, 20, 114, 175, 56, 102, 91, 252, 28, 35, 161, 70, 9, 13, 130, 219, 223, 9, 183, 236, 166, 242, 239, 41, 114, 67, 68, 53, 163, 169, 74, 28, 231, 119, 105, 91, 7, 245, 194, 192, 172, 253, 207, 148, 115, 182, 132, 51, 7, 253, 153, 180, 157, 44, 173, 201, 87, 87, 53, 123, 94, 213, 203, 80, 26, 60, 129, 43, 170, 67, 212, 146, 95, 161, 100, 156, 219, 72, 241, 36, 218, 238, 133, 21, 132, 140, 244, 163, 34, 237, 252, 9, 33, 138, 112, 29, 213, 76, 100, 235, 68, 72, 33, 226, 151, 161, 91, 6, 82, 164, 94, 113, 80, 14, 145, 255, 64, 80, 40, 172, 21, 2, 196, 246, 127, 110, 220, 50, 45, 198, 214, 198, 101, 223, 101, 104, 138, 18, 105, 99, 225, 126, 232, 247, 37, 241, 69, 1, 147, 141, 73, 166, 82, 122, 71, 244, 1, 47, 28, 115, 217, 141, 108, 151, 133, 215, 103, 80, 174, 76, 66, 186, 91, 144, 74, 18, 210, 231, 240, 94, 3, 177, 40, 10, 181, 222, 168, 106, 119, 103, 93, 177, 16, 113, 193, 91, 8, 122, 4, 145, 72, 240, 208, 253, 136, 208, 9, 119, 224, 94, 239, 252, 175, 85, 39, 29, 165, 122, 170, 194, 37, 44, 136, 139, 46, 252, 97, 157, 111, 225, 254, 98, 150, 99, 225, 133, 188, 98, 212, 197, 21, 156, 2, 57, 68, 176, 121, 58, 255, 59, 29, 236, 242, 240, 143, 14, 159, 237, 178, 196, 82, 1, 96, 79, 144, 186, 173, 15, 179, 162, 147, 93, 75, 161, 230, 222, 180, 8, 182, 67, 197, 103, 161, 230, 159, 186, 66, 235, 153, 169, 121, 97, 69, 62, 120, 41, 194, 245, 52, 231, 3, 8, 240, 84, 52, 9, 73, 168, 137, 62, 168, 182, 229, 84, 106, 255, 188, 162, 218, 20, 201, 21, 189, 128, 158, 180, 13, 20, 216, 152, 81, 130, 21, 38, 22, 15, 130, 87, 40, 59, 225, 232, 113, 145, 183, 121, 25, 245, 50, 49, 186, 61, 254, 28, 143, 225, 10, 212, 250, 3, 230, 27, 251, 87, 109, 70, 122, 181, 35, 81, 6, 137, 99, 35, 0, 40, 87, 183, 132, 87, 120, 79, 165, 133, 125, 19, 135, 104, 109, 58, 20, 133, 55, 254, 163, 103, 135, 184, 167, 60, 177, 12, 211, 35, 220, 245, 92, 58, 67, 44, 70, 94, 118, 140, 35, 201, 137, 198, 174, 218, 104, 57, 155, 46, 93, 252, 208, 225, 165, 164, 87, 147, 93, 78, 2, 195, 158, 212, 27, 241, 119, 98, 79, 49, 238, 115, 50, 188, 146, 253, 198, 175, 140, 35, 216, 217, 55, 203, 25, 123, 63, 68, 25, 123, 212, 169, 21, 39, 64, 152, 241, 35, 95, 151, 214, 186, 124, 150, 189, 161, 168, 217, 211, 83, 152, 181, 46, 25, 60, 74, 13, 46, 226, 209, 131, 12, 52, 71, 168, 189, 204, 209, 27, 158, 5, 181, 245, 51, 17, 117, 215, 93, 79, 100, 159, 51, 89, 107, 193, 225, 67, 167, 45, 27, 131, 92, 242, 115, 112, 31, 226, 192, 167, 226, 188, 185, 200, 57, 69, 118, 149, 27, 82, 234, 23, 249, 166, 181, 241, 148, 61, 87, 39, 239, 113, 231, 234, 28, 78, 99, 244, 121, 182, 136, 220, 33, 168, 113, 213, 97, 95, 142, 103, 8, 144, 152, 65, 125, 247, 117, 125, 17, 153, 65, 99, 186, 184, 6, 205, 235, 25, 116, 162, 68, 90, 199, 81, 27, 149, 128, 166, 56, 32, 66, 22, 68, 254, 174, 243, 79, 247, 51, 108, 45, 165, 71, 53, 20, 108, 172, 230, 39, 128, 170, 124, 252, 107, 203, 119, 171, 15, 114, 113, 167, 101, 235, 94, 42, 14, 210, 151, 254, 222, 45, 151, 234, 43, 63, 175, 58, 33, 106, 227, 48, 64, 180, 177, 0, 208, 95, 111, 195, 162, 248, 86, 246, 65, 156, 175, 128, 29, 55, 68, 50, 45, 212, 24, 26, 243, 202, 222, 109, 84, 2, 77, 79, 96, 74, 79, 197, 142, 244, 43, 190, 179, 226, 12, 173, 254, 3, 235, 176, 183, 163, 29, 226, 50, 209, 131, 103, 85, 37, 214, 169, 22, 192, 38, 187, 195, 82, 171, 245, 95, 25, 109, 145, 171, 143, 129, 114, 195, 147, 14, 172, 132, 31, 65, 107, 69, 147, 75, 142, 246, 218, 208, 119, 128, 99, 229, 178, 44, 157, 63, 10, 22, 75, 229, 130, 216, 66, 137, 177, 255, 99, 224, 235, 185, 74, 221, 48, 243, 71, 113, 179, 28, 114, 183, 157, 71, 4, 218, 143, 219, 63, 230, 204, 162, 155, 7, 177, 250, 57, 236, 202, 8, 109, 234, 225, 214, 62, 217, 22, 241, 67, 44, 7, 94, 237, 64, 1, 26, 187, 15, 142, 118, 134, 66, 61, 37, 117, 236, 53, 51, 71, 209, 220, 111, 203, 229, 205, 0, 141, 12, 108, 48, 80, 152, 4, 76, 114, 126, 168, 198, 233, 151, 186, 11, 171, 62, 165, 231, 189, 49, 136, 245, 68, 241, 231, 213, 168, 100, 113, 122, 244, 158, 105, 70, 15, 170, 245, 202, 78, 235, 210, 228, 80, 63, 18, 100, 209, 20, 104, 147, 177, 182, 255, 171, 97, 250, 57, 142, 92, 216, 29, 9, 94, 50, 222, 132, 220, 77, 97, 202, 145, 35, 92, 14, 11, 163, 100, 201, 56, 109, 204, 131, 3, 47, 235, 160, 131, 42, 123, 84, 121, 64, 13, 150, 14, 6, 213, 104, 47, 47, 113, 173, 239, 215, 191, 219, 141, 249, 189, 119, 110, 55, 59, 202, 178, 36, 116, 206, 52, 43, 168, 241, 37, 137, 168, 76, 31, 181, 225, 78, 86, 235, 40, 232, 177, 51, 252, 124, 74, 10, 37, 41, 6, 146, 104, 36, 246, 30, 30, 155, 57, 25, 87, 67, 190, 142, 157, 108, 51, 138, 18, 222, 95, 130, 87, 161, 87, 130, 189, 194, 28, 160, 88, 63, 169, 56, 255, 224, 207, 236, 90, 60, 122, 245, 9, 56, 127, 82, 93, 212, 190, 86, 235, 20, 254, 22, 37, 94, 12, 172, 204, 159, 68, 156, 122, 254, 238, 50, 215, 247, 67, 5, 159, 79, 134, 170, 35, 238, 91, 180, 33, 164, 157, 144, 217, 251, 113, 218, 183, 166, 213, 248, 134, 68, 169, 179, 58, 192, 217, 122, 183, 185, 113, 107, 210, 147, 153, 51, 80, 79, 149, 144, 47, 227, 46, 66, 210, 61, 112, 82, 234, 64, 191, 148, 106, 167, 109, 98, 62, 183, 35, 27, 143, 62, 134, 185, 162, 89, 159, 179, 241, 42, 133, 106, 165, 234, 206, 245, 176, 42, 104, 11, 16, 254, 111, 199, 255, 89, 36, 1, 95, 7, 188, 246, 158, 208, 208, 10, 233, 80, 60, 34, 188, 119, 123, 117, 192, 52, 244, 187, 57, 40, 83, 159, 184, 34, 47, 48, 200, 58, 133, 10, 127, 162, 70, 176, 200, 188, 224, 140, 208, 24, 249, 114, 120, 3, 79, 99, 62, 54, 110, 40, 222, 170, 28, 52, 42, 29, 55, 195, 44, 11, 157, 150, 180, 171, 132, 51, 4, 248, 29, 198, 115, 76, 96, 156, 154, 148, 110, 251, 126, 128, 92, 162, 117, 163, 43, 147, 55, 53, 70, 43, 34, 156, 204, 131, 253, 31, 142, 16, 132, 164, 184, 116, 247, 45, 190, 176, 119, 101, 93, 144, 29, 5, 3, 76, 194, 176, 74, 85, 143, 232, 77, 98, 148, 72, 93, 97, 244, 71, 126, 182, 41, 49, 13, 244, 216, 118, 106, 165, 146, 4, 166, 186, 125, 193, 118, 37, 214, 193, 2, 140, 110, 36, 241, 71, 126, 58, 129, 128, 236, 194, 27, 111, 219, 53, 240, 78, 131, 238, 110, 175, 5, 208, 101, 21, 15, 185, 59, 10, 96, 55, 247, 80, 246, 135, 251, 92, 187, 152, 32, 221, 184, 145, 142, 149, 120, 170, 110, 195, 146, 84, 226, 140, 185, 18, 217, 127, 251, 80, 57, 68, 84, 179, 162, 112, 37, 197, 136, 132, 19, 98, 220, 105, 51, 36, 85, 73, 7, 224, 163, 115, 155, 37, 105, 105, 193, 83, 83, 213, 237, 183, 17, 30, 154, 167, 61, 85, 18, 109, 108, 3, 57, 228, 235, 14, 0, 38, 34, 138, 130, 253, 156, 65, 69, 213, 245, 63, 2, 232, 168, 225, 45, 171, 55, 5, 182, 43, 33, 212, 88, 56, 130, 49, 117, 34, 104, 195, 138, 87, 234, 229, 163, 111, 11, 131, 208, 84, 214, 184, 76, 56, 216, 159, 246, 78, 64, 160, 53, 222, 180, 63, 67, 158, 203, 211, 151, 224, 216, 13, 64, 9, 241, 175, 20, 32, 149, 68, 46, 247, 61, 71, 40, 119, 228, 34, 175, 244, 169, 18, 209, 240, 0, 89, 117, 21, 146, 21, 115, 235, 84, 245, 95, 56, 78, 36, 15, 206, 165, 61, 169, 123, 251, 69, 203, 195, 107, 115, 58, 179, 11, 238, 155, 9, 106, 73, 23, 39, 191, 22, 166, 143, 182, 67, 6, 183, 120, 166, 136, 232, 36, 81, 123, 203, 243, 212, 255, 210, 52, 207, 147, 51, 82, 135, 120, 196, 170, 80, 0, 151, 202, 156, 5, 56, 100, 126, 245, 119, 11, 255, 178, 142, 4, 221, 1, 33, 25, 158, 169, 138, 102, 234, 122, 231, 27, 162, 16, 166, 35, 232, 144, 19, 188, 45, 20, 243, 159, 199, 237, 181, 173, 124, 165, 189, 157, 166, 58, 238, 180, 45, 74, 151, 56, 88, 70, 221, 162, 43, 238, 157, 225, 59, 72, 173, 229, 117, 16, 116, 79, 242, 163, 118, 134, 248, 167, 151, 255, 152, 159, 65, 159, 163, 95, 199, 245, 92, 12, 38, 105, 174, 140, 221, 121, 153, 200, 106, 251, 161, 22, 235, 220, 54, 217, 44, 17, 32, 56, 132, 235, 8, 174, 66, 141, 210, 251, 205, 59, 254, 43, 244, 238, 106, 160, 63, 167, 13, 15, 255, 244, 77, 210, 186, 136, 194, 114, 104, 235, 188, 130, 31, 247, 122, 147, 40, 0, 84, 150, 122, 214, 211, 241, 30, 250, 190, 234, 237, 193, 185, 48, 143, 20, 125, 109, 226, 158, 17, 43, 86, 110, 205, 40, 166, 105, 166, 106, 76, 124, 77, 105, 116, 100, 28, 113, 123, 178, 31, 220, 158, 155, 148, 31, 134, 220, 234, 64, 235, 209, 127, 131, 147, 110, 47, 41, 170, 115, 169, 81, 16, 164, 150, 161, 20, 140, 95, 101, 107, 17, 42, 223, 54, 176, 45, 96, 85, 163, 245, 192, 140, 112, 193, 239, 218, 105, 183, 183, 196, 251, 198, 6, 46, 161, 134, 79, 144, 175, 169, 43, 18, 202, 49, 176, 138, 77, 61, 161, 78, 182, 105, 159, 47, 162, 28, 237, 74, 105, 137, 44, 199, 208, 225, 75, 123, 221, 2, 223, 168, 236, 81, 28, 23, 222, 247, 41, 62, 75, 240, 199, 36, 127, 148, 210, 236, 167, 13, 61, 197, 91, 4, 78, 145, 238, 56, 232, 7, 51, 245, 178, 216, 77, 180, 77, 48, 237, 110, 66, 0, 15, 253, 32, 165, 231, 106, 236, 204, 202, 74, 172, 91, 232, 9, 72, 119, 128, 237, 99, 7, 39, 160, 208, 157, 197, 218, 3, 16, 174, 193, 98, 120, 123, 173, 0, 69, 91, 158, 187, 135, 246, 117, 189, 81, 67, 161, 159, 36, 175, 162, 228, 159, 59, 2, 225, 124, 21, 41, 176, 38, 220, 177, 105, 50, 44, 203, 47, 10, 119, 162, 44, 19, 19, 212, 196, 217, 181, 226, 110, 104, 242, 99, 144, 152, 206, 134, 108, 25, 42, 217, 190, 64, 28, 1, 241, 51, 187, 246, 69, 17, 168, 99, 198, 36, 155, 88, 8, 19, 138, 11, 132, 152, 253, 19, 2, 243, 237, 221, 246, 63, 101, 146, 16, 90, 0, 210, 233, 123, 148, 95, 235, 181, 89, 228, 10, 9, 88, 203, 117, 121, 43, 178, 35, 188, 119, 194, 22, 152, 181, 159, 57, 112, 43, 69, 150, 105, 213, 93, 28, 160, 39, 61, 104, 201, 183, 60, 47, 150, 80, 90, 177, 178, 30, 131, 96, 210, 112, 95, 250, 237, 226, 83, 208, 19, 139, 43, 158, 142, 43, 221, 7, 216, 237, 11, 31, 0, 65, 167, 66, 76, 19, 72, 37, 232, 30, 250, 128, 24, 227, 156, 36, 106, 197, 142, 255, 6, 33, 106, 192, 201, 178, 96, 38, 188, 53, 83, 50, 167, 47, 195, 52, 245, 137, 231, 31, 183, 50, 0, 168, 248, 121, 103, 180, 161, 16, 224, 98, 18, 95, 185, 248, 55, 65, 6, 45, 211, 157, 186, 75, 202, 166, 133, 227, 110, 48, 243, 203, 17, 22, 195, 236, 135, 225, 177, 155, 28, 127, 85, 152, 140, 79, 102, 111, 131, 45, 18, 33, 114, 110, 129, 237, 141, 143, 51, 110, 125, 234, 112, 93, 173, 76, 13, 186, 69, 170, 56, 171, 184, 27, 209, 199, 62, 169, 88, 84, 205, 136, 161, 74, 246, 75, 143, 206, 81, 50, 6, 135, 188, 94, 172, 29, 226, 26, 16, 81, 187, 93, 149, 208, 64, 204, 14, 174, 47, 92, 66, 125, 49, 21, 85, 104, 49, 204, 187, 6, 2, 77, 213, 23, 46, 95, 135, 68, 33, 216, 31, 254, 105, 121, 108, 62, 148, 39, 211, 156, 198, 91, 143, 254, 108, 73, 98, 63, 20, 31, 129, 161, 245, 159, 10, 42, 25, 239, 85, 188, 157, 237, 104, 88, 177, 143, 23, 1, 224, 107, 68, 110, 108, 52, 245, 160, 169, 10, 223, 27, 40, 252, 59, 233, 173, 104, 194, 92, 169, 5, 128, 169, 247, 103, 98, 52, 21, 255, 110, 204, 234, 70, 182, 10, 204, 6, 232, 196, 50, 126, 153, 80, 176, 8, 202, 255, 47, 69, 52, 42, 2, 10, 15, 32, 23, 255, 191, 198, 244, 119, 145, 162, 191, 225, 129, 93, 26, 43, 246, 119, 44, 230, 106, 39, 39, 29, 121, 54, 160, 203, 138, 82, 25, 148, 90, 85, 168, 5, 88, 123, 85, 254, 93, 250, 105, 35, 97, 45, 51, 224, 63, 96, 131, 209, 252, 112, 189, 2, 44, 107, 66, 36, 184, 153, 15, 210, 3, 214, 110, 180, 248, 84, 79, 104, 242, 145, 74, 150, 12, 187, 46, 152, 249, 79, 188, 198, 98, 174, 19, 250, 72, 29, 69, 216, 230, 49, 196, 33, 161, 21, 235, 142, 74, 55, 130, 109, 225, 131, 117, 244, 78, 25, 46, 65, 162, 49, 100, 71, 249, 214, 197, 88, 213, 239, 182, 99, 29, 143, 234, 172, 150, 45, 32, 119, 189, 153, 116, 252, 18, 178, 24, 244, 127, 242, 106, 31, 177, 68, 235, 151, 103, 155, 81, 255, 204, 25, 198, 205, 121, 89, 170, 128, 2, 95, 31, 240, 55, 77, 81, 147, 14, 67, 239, 96, 105, 116, 110, 163, 23, 79, 146, 196, 33, 213, 119, 135, 182, 152, 106, 207, 30, 129, 79, 39, 208, 229, 226, 181, 158, 140, 53, 38, 58, 202, 109, 74, 105, 157, 249, 224, 111, 254, 192, 252, 241, 189, 49, 186, 13, 179, 30, 108, 13, 38, 111, 155, 139, 178, 23, 200, 54, 191, 16, 219, 14, 41, 20, 231, 35, 247, 69, 82, 238, 227, 174, 147, 99, 25, 210, 167, 45, 120, 130, 247, 16, 196, 118, 229, 180, 129, 170, 92, 50, 249, 88, 150, 78, 119, 198, 170, 108, 150, 1, 249, 150, 158, 21, 220, 197, 151, 98, 140, 74, 73, 179, 232, 224, 96, 116, 21, 149, 109, 160, 205, 98, 205, 254, 92, 132, 135, 191, 165, 210, 68, 158, 57, 159, 97, 116, 222, 175, 114, 121, 79, 224, 215, 188, 145, 68, 197, 163, 163, 217, 170, 133, 160, 137, 68, 0, 188, 9, 215, 209, 145, 105, 55, 170, 77, 129, 124, 56, 252, 67, 14, 251, 35, 109, 38, 223, 15, 28, 147, 112, 132, 104, 50, 38, 140, 61, 165, 40, 198, 42, 213, 47, 110, 230, 74, 60, 118, 249, 118, 25, 127, 20, 149, 11, 240, 95, 186, 151, 178, 83, 37, 134, 151, 4, 33, 201, 240, 67, 252, 200, 227, 88, 202, 173, 243, 221, 122, 188, 236, 255, 43, 127, 37, 234, 22, 204, 122, 126, 135, 108, 236, 215, 45, 132, 61, 20, 154, 48, 97, 179, 54, 208, 172, 141, 164, 5, 197, 50, 115, 26, 229, 156, 47, 187, 143, 23, 112, 88, 178, 108, 177, 60, 68, 128, 45, 29, 168, 26, 112, 159, 10, 138, 156, 67, 36, 241, 178, 48, 145, 193, 134, 187, 124, 85, 207, 220, 103, 154, 194, 42, 16, 183, 249, 77, 149, 212, 71, 67, 220, 220, 211, 102, 51, 212, 125, 18, 77, 47, 208, 178, 20, 247, 182, 223, 56, 156, 203, 226, 240, 25, 207, 243, 120, 60, 46, 217, 219, 59, 5, 6, 167, 228, 38, 190, 198, 244, 30, 228, 210, 50, 56, 86, 238, 225, 166, 170, 192, 251, 100, 205, 116, 34, 227, 125, 175, 154, 67, 47, 84, 163, 83, 224, 34, 118, 251, 143, 7, 4, 116, 181, 137, 205, 8, 71, 74, 216, 198, 235, 19, 73, 87, 112, 147, 44, 228, 111, 155, 45, 75, 173, 168, 160, 119, 82, 189, 132, 175, 31, 237, 15, 231, 121, 174, 184, 218, 85, 3, 103, 235, 232, 151, 27, 149, 39, 51, 6, 62, 48, 199, 74, 52, 6, 153, 158, 103, 64, 15, 252, 133, 73, 231, 29, 113, 34, 69, 69, 119, 226, 80, 148, 76, 184, 138, 22, 115, 136, 33, 148, 0, 122, 245, 246, 161, 73, 243, 59, 128, 173, 251, 34, 187, 32, 40, 4, 110, 13, 34, 174, 209, 103, 44, 141, 231, 33, 49, 180, 238, 243, 13, 77, 8, 54, 241, 58, 118, 127, 29, 16, 129, 115, 226, 184, 79, 86, 17, 118, 161, 214, 115, 254, 131, 103, 28, 4, 26, 191, 231, 218, 7, 98, 120, 153, 86, 229, 142, 171, 4, 95, 29, 55, 104, 115, 183, 21, 78, 225, 118, 199, 98, 248, 35, 159, 220, 109, 198, 201, 146, 218, 103, 246, 203, 88, 231, 168, 40, 125, 50, 159, 240, 200, 237, 210, 160, 18, 222, 118, 222, 35, 36, 147, 5, 207, 96, 214, 31, 252, 248, 211, 45, 230, 107, 133, 14, 29, 77, 197, 16, 222, 53, 214, 158, 22, 154, 89, 168, 168, 209, 15, 230, 7, 0, 113, 12, 168, 110, 100, 36, 120, 65, 169, 69, 86, 150, 52, 246, 151, 192, 241, 199, 0, 220, 44, 218, 182, 133, 67, 116, 227, 12, 7, 3, 226, 204, 126, 40, 18, 153, 217, 211, 46, 49, 188, 241, 249, 79, 37, 186, 51, 116, 43, 109, 140, 97, 248, 166, 165, 148, 31, 219, 49, 215, 118, 5, 103, 247, 130, 152, 105, 119, 95, 136, 127, 254, 190, 13, 115, 103, 248, 3, 194, 71, 221, 34, 210, 216, 62, 179, 191, 94, 108, 56, 84, 146, 181, 202, 62, 37, 99, 145, 17, 240, 223, 89, 145, 168, 140, 180, 88, 16, 71, 195, 22, 58, 193, 195, 10, 194, 210, 145, 137, 226, 117, 179, 117, 188, 99, 61, 211, 5, 70, 83, 181, 210, 147, 40, 71, 111, 168, 71, 229, 96, 96, 192, 80, 106, 131, 236, 14, 60, 164, 61, 205, 199, 39, 159, 168, 159, 28, 133, 84, 68, 216, 164, 106, 155, 140, 18, 235, 115, 33, 53, 12, 35, 187, 194, 58, 116, 31, 205, 58, 60, 84, 209, 202, 75, 189, 119, 190, 92, 2, 68, 27, 243, 56, 181, 128, 95, 247, 237, 213, 142, 65, 93, 10, 255, 8, 193, 2, 114, 212, 181, 215, 29, 52, 249, 18, 149, 241, 174, 216, 125, 201, 204, 159, 135, 171, 99, 149, 140, 35, 171, 218, 59, 166, 149, 8, 216, 253, 119, 190, 211, 20, 110, 46, 6, 119, 94, 174, 38, 167, 151, 234, 26, 7, 154, 33, 250, 107, 84, 13, 98, 116, 233, 35, 9, 188, 48, 177, 241, 118, 162, 238, 20, 49, 66, 121, 38, 170, 234, 76, 86, 232, 167, 157, 143, 74, 42, 182, 147, 185, 211, 165, 154, 142, 170, 167, 57, 28, 162, 213, 236, 47, 152, 185, 164, 177, 225, 160, 55, 63, 102, 156, 160, 55, 250, 155, 73, 8, 154, 56, 38, 201, 192, 56, 249, 146, 141, 213, 114, 91, 187, 189, 151, 253, 181, 214, 35, 116, 208, 184, 104, 235, 165, 95, 112, 71, 126, 41, 57, 69, 112, 155, 164, 63, 54, 22, 19, 58, 31, 231, 110, 244, 107, 80, 175, 191, 203, 189, 191, 181, 136, 218, 217, 176, 145, 234, 90, 21, 80, 123, 221, 43, 27, 191, 200, 25, 16, 196, 176, 44, 82, 250, 9, 180, 23, 226, 141, 146, 138, 253, 17, 9, 146, 71, 212, 179, 96, 211, 182, 160, 123, 238, 97, 183, 125, 67, 59, 31, 220, 215, 192, 25, 85, 64, 20, 152, 153, 231, 147, 60, 66, 184, 245, 119, 19, 89, 82, 162, 111, 78, 131, 179, 204, 159, 194, 167, 58, 121, 30, 51, 74, 121, 124, 245, 134, 65, 252, 108, 65, 236, 166, 82, 138, 29, 169, 225, 154, 98, 138, 55, 43, 232, 186, 65, 43, 19, 55, 24, 55, 22, 253, 140, 106, 176, 109, 35, 24, 247, 40, 90, 201, 162, 154, 70, 168, 210, 93, 46, 41, 47, 227, 162, 195, 134, 183, 169, 134, 222, 229, 75, 101, 60, 87, 203, 242, 179, 195, 0, 168, 40, 145, 114, 134, 232, 36, 171, 219, 162, 34, 227, 156, 164, 161, 124, 25, 117, 224, 180, 147, 49, 203, 239, 25, 129, 169, 230, 171, 8, 168, 254, 15, 237, 255, 229, 223, 104, 23, 57, 3, 15, 81, 119, 34, 164, 237, 244, 163, 60, 156, 19, 213, 24, 77, 24, 42, 208, 150, 105, 3, 197, 161, 51, 4, 130, 161, 126, 120, 73, 231, 59, 253, 28, 128, 183, 30, 213, 13, 42, 8, 80, 66, 66, 132, 15, 157, 17, 124, 227, 83, 148, 52, 154, 27, 102, 90, 147, 230, 202, 49, 20, 178, 190, 126, 199, 117, 31, 245, 249, 83, 171, 214, 65, 38, 228, 85, 194, 90, 181, 111, 223, 72, 99, 217, 173, 17, 46, 87, 190, 174, 182, 90, 181, 53, 39, 75, 249, 180, 115, 83, 146, 235, 211, 248, 5, 50, 49, 216, 160, 254, 38, 10, 36, 142, 42, 85, 25, 25, 213, 192, 192, 99, 230, 9, 26, 191, 74, 61, 233, 26, 116, 199, 171, 180, 28, 197, 211, 138, 139, 90, 212, 106, 147, 4, 21, 254, 140, 231, 15, 124, 97, 51, 64, 101, 5, 33, 216, 106, 23, 142, 163, 167, 34, 72, 155, 98, 84, 55, 24, 108, 67, 0, 57, 146, 28, 171, 144, 7, 235, 108, 200, 132, 87, 16, 182, 54, 197, 139, 115, 98, 95, 136, 243, 183, 39, 185, 139, 220, 58, 156, 121, 232, 27, 108, 15, 132, 227, 79, 58, 217, 217, 91, 202, 209, 160, 129, 139, 238, 1, 82, 58, 11, 61, 134, 229, 22, 187, 213, 92, 168, 193, 21, 186, 153, 171, 115, 39, 101, 140, 96, 104, 198, 1, 234, 149, 226, 250, 60, 17, 133, 41, 18, 221, 227, 155, 33, 147, 112, 239, 236, 89, 207, 183, 184, 236, 95, 225, 67, 224, 224, 117, 175, 20, 210, 181, 14, 28, 135, 5, 231, 77, 67, 110, 83, 129, 75, 221, 183, 7, 239, 107, 215, 166, 174, 161, 85, 65, 26, 174, 160, 91, 45, 139, 224, 185, 227, 126, 234, 41, 235, 22, 236, 199, 173, 52, 245, 236, 90, 56, 229, 249, 132, 113, 45, 0, 148, 87, 222, 51, 89, 249, 79, 210, 42, 40, 145, 103, 238, 53, 36, 120, 233, 42, 119, 170, 132, 75, 210, 101, 135, 65, 173, 55, 147, 35, 160, 31, 38, 44, 249, 102, 160, 164, 182, 20, 144, 110, 243, 198, 247, 1, 106, 230, 120, 82, 116, 43, 100, 73, 175, 115, 60, 60, 232, 29, 233, 118, 168, 47, 62, 10, 234, 42, 45, 97, 5, 227, 217, 204, 22, 131, 6, 255, 226, 6, 13, 74, 180, 5, 13, 12, 233, 71, 28, 141, 236, 57, 92, 91, 184, 56, 130, 18, 250, 106, 148, 24, 55, 37, 43, 254, 42, 209, 213, 74, 104, 71, 162, 149, 134, 26, 37, 158, 147, 115, 233, 13, 107, 92, 98, 220, 86, 82, 244, 217, 38, 75, 209, 153, 124, 246, 227, 169, 230, 175, 204, 88, 246, 72, 91, 234, 251, 48, 110, 129, 117, 188, 72, 170, 224, 175, 68, 117, 20, 86, 99, 229, 206, 38, 69, 69, 188, 46, 176, 176, 206, 141, 32, 209, 38, 103, 235, 179, 60, 2, 26, 32, 21, 101, 196, 50, 206, 106, 11, 30, 211, 200, 145, 94, 120, 180, 30, 61, 1, 206, 41, 187, 120, 173, 2, 246, 240, 63, 39, 209, 57, 223, 15, 97, 246, 254, 236, 147, 121, 247, 32, 81, 171, 46, 152, 140, 179, 22, 98, 113, 102, 231, 40, 68, 149, 231, 35, 159, 80, 213, 59, 146, 94, 126, 135, 5, 239, 72, 184, 66, 96, 234, 197, 118, 72, 161, 181, 73, 244, 184, 125, 49, 25, 164, 221, 179, 170, 53, 140, 190, 89, 189, 151, 117, 115, 184, 6, 120, 84, 227, 116, 68, 183, 215, 138, 60, 49, 98, 239, 109, 236, 62, 123, 58, 226, 200, 245, 221, 113, 75, 229, 176, 66, 128, 4, 204, 86, 31, 145, 82, 128, 194, 84, 130, 36, 41, 89, 61, 1, 49, 129, 225, 147, 149, 23, 133, 255, 155, 87, 161, 185, 12, 81, 79, 242, 107, 218, 207, 101, 186, 2, 87, 80, 63, 19, 108, 112, 15, 193, 127, 219, 224, 206, 104, 84, 73, 201, 27, 68, 182, 232, 255, 217, 10, 121, 137, 197, 5, 30, 76, 23, 41, 169, 183, 207, 203, 22, 128, 235, 134, 168, 7, 9, 226, 105, 108, 31, 127, 243, 158, 61, 185, 160, 63, 206, 82, 175, 87, 216, 73, 60, 225, 157, 225, 10, 195, 255, 109, 68, 55, 137, 76, 202, 47, 60, 39, 244, 54, 133, 56, 156, 167, 93, 2, 253, 8, 46, 174, 94, 154, 195, 170, 242, 72, 147, 62, 93, 179, 81, 148, 222, 172, 157, 239, 205, 23, 193, 154, 59, 231, 56, 93, 245, 198, 79, 233, 107, 141, 63, 4, 35, 117, 13, 245, 76, 161, 241, 149, 221, 98, 207, 158, 98, 200, 79, 244, 142, 77, 12, 121, 160, 23, 146, 85, 235, 194, 245, 179, 88, 220, 175, 115, 87, 125, 109, 147, 245, 121, 240, 10, 110, 107, 101, 177, 84, 37, 99, 22, 191, 14, 247, 112, 231, 52, 109, 90, 11, 131, 174, 135, 33, 102, 101, 158, 206, 223, 104, 102, 185, 224, 52, 56, 97, 237, 140, 174, 217, 41, 39, 109, 204, 28, 216, 92, 244, 17, 159, 20, 238, 238, 120, 237, 159, 204, 99, 236, 182, 241, 145, 61, 224, 61, 204, 197, 229, 197, 146, 135, 248, 44, 247, 222, 240, 31, 116, 247, 134, 181, 35, 52, 117, 180, 81, 19, 211, 254, 104, 114, 2, 221, 70, 189, 129, 218, 138, 233, 219, 124, 238, 122, 50, 172, 99, 101, 27, 64, 248, 82, 129, 120, 219, 82, 127, 170, 146, 218, 173, 193, 2, 130, 21, 22, 250, 36, 224, 215, 151, 253, 225, 154, 143, 237, 240, 173, 242, 168, 197, 204, 123, 214, 133, 87, 219, 61, 234, 134, 34, 226, 154, 66, 41, 169, 63, 244, 61, 163, 244, 82, 101, 205, 113, 206, 132, 106, 67, 9, 30, 166, 77, 137, 124, 210, 30, 70, 56, 39, 114, 194, 31, 102, 12, 204, 217, 26, 133, 150, 181, 13, 92, 47, 230, 209, 125, 119, 215, 72, 185, 192, 235, 249, 92, 69, 53, 133, 112, 246, 156, 14, 91, 35, 49, 182, 107, 28, 176, 164, 116, 146, 122, 4, 119, 55, 208, 42, 139, 171, 215, 117, 15, 2, 182, 149, 232, 202, 176, 141, 85, 156, 63, 53, 104, 217, 162, 142, 226, 2, 191, 24, 43, 197, 104, 233, 127, 48, 24, 70, 95, 238, 60, 3, 12, 204, 61, 163, 70, 8, 55, 97, 163, 53, 211, 43, 147, 25, 187, 109, 111, 194, 162, 14, 161, 117], - [98, 193, 188, 237, 202, 107, 164, 214, 17, 87, 194, 220, 105, 62, 225, 203, 79, 158, 204, 252, 32, 228, 20, 32, 155, 183, 230, 173, 64, 22, 0, 146, 129, 90, 222, 3, 247, 197, 236, 97, 83, 43, 34, 170, 216, 238, 142, 208, 143, 1, 180, 4, 68, 13, 225, 137, 59, 158, 141, 47, 100, 195, 224, 154, 153, 0, 148, 25, 112, 220, 2, 12, 118, 1, 158, 8, 40, 5, 160, 72, 136, 94, 138, 203, 200, 136, 206, 183, 246, 53, 152, 59, 97, 167, 136, 82, 217, 156, 100, 74, 223, 37, 224, 33, 180, 78, 43, 180, 152, 63, 94, 44, 197, 236, 45, 18, 155, 142, 170, 63, 22, 121, 81, 226, 153, 101, 60, 58, 201, 101, 251, 21, 216, 128, 241, 184, 126, 35, 237, 253, 205, 103, 239, 95, 191, 27, 220, 100, 185, 163, 96, 148, 207, 14, 116, 191, 106, 48, 50, 89, 144, 160, 54, 153, 160, 22, 74, 57, 140, 35, 15, 142, 74, 218, 77, 248, 167, 156, 237, 166, 58, 201, 57, 249, 90, 53, 34, 121, 12, 20, 163, 160, 120, 10, 158, 60, 1, 57, 83, 2, 40, 25, 91, 143, 250, 113, 25, 209, 12, 158, 251, 105, 119, 156, 21, 118, 29, 202, 252, 118, 23, 35, 163, 113, 120, 241, 249, 87, 181, 54, 134, 246, 193, 174, 61, 10, 147, 55, 146, 67, 159, 90, 67, 16, 185, 87, 237, 199, 62, 41, 32, 214, 54, 3, 57, 57, 118, 142, 253, 100, 186, 255, 157, 102, 29, 24, 207, 150, 7, 204, 175, 215, 114, 50, 216, 95, 35, 247, 221, 56, 10, 171, 208, 46, 99, 36, 151, 127, 5, 37, 98, 155, 119, 151, 58, 63, 74, 255, 113, 111, 126, 105, 83, 71, 50, 24, 14, 99, 123, 14, 249, 197, 105, 183, 163, 78, 93, 58, 8, 94, 90, 234, 117, 118, 24, 128, 148, 253, 107, 36, 60, 202, 13, 70, 250, 83, 157, 0, 227, 102, 151, 253, 93, 177, 121, 193, 113, 176, 61, 151, 165, 51, 1, 166, 1, 205, 133, 36, 195, 108, 130, 105, 133, 36, 144, 236, 166, 238, 185, 169, 39, 209, 174, 34, 153, 248, 129, 174, 95, 127, 139, 107, 56, 219, 162, 62, 130, 168, 238, 161, 137, 52, 223, 144, 125, 80, 44, 87, 248, 244, 165, 68, 14, 132, 109, 23, 155, 128, 47, 236, 66, 36, 70, 230, 173, 27, 220, 148, 122, 231, 226, 199, 67, 174, 30, 245, 52, 31, 110, 240, 128, 23, 73, 118, 200, 64, 99, 216, 241, 23, 162, 210, 136, 153, 83, 51, 29, 1, 1, 30, 15, 160, 100, 35, 91, 188, 2, 87, 34, 215, 183, 9, 79, 163, 91, 80, 174, 26, 63, 25, 85, 61, 94, 244, 231, 123, 142, 231, 131, 88, 233, 70, 97, 113, 188, 163, 96, 123, 37, 221, 134, 100, 166, 73, 209, 136, 112, 36, 226, 27, 65, 58, 161, 13, 62, 26, 193, 107, 106, 165, 240, 216, 235, 123, 19, 134, 91, 210, 251, 171, 54, 161, 183, 54, 28, 238, 252, 126, 242, 72, 122, 157, 181, 20, 118, 108, 18, 199, 17, 34, 160, 250, 54, 4, 64, 127, 95, 112, 227, 37, 96, 210, 142, 143, 3, 17, 119, 98, 249, 254, 72, 105, 45, 197, 181, 30, 167, 22, 79, 39, 177, 50, 57, 69, 254, 4, 190, 187, 3, 64, 252, 135, 239, 182, 68, 163, 123, 45, 121, 2, 74, 171, 224, 109, 184, 63, 140, 136, 26, 244, 37, 34, 239, 181, 160, 151, 206, 198, 208, 44, 83, 233, 50, 166, 221, 230, 194, 94, 83, 103, 198, 109, 173, 203, 31, 51, 175, 46, 176, 19, 12, 202, 246, 156, 115, 22, 158, 238, 180, 200, 123, 137, 104, 94, 72, 205, 239, 72, 56, 123, 15, 53, 209, 88, 72, 63, 118, 4, 224, 222, 64, 151, 148, 59, 216, 8, 165, 165, 255, 199, 58, 209, 84, 21, 98, 95, 129, 76, 95, 155, 87, 246, 169, 84, 192, 57, 92, 40, 130, 237, 202, 169, 173, 4, 178, 221, 215, 101, 8, 75, 209, 200, 84, 218, 85, 152, 4, 5, 65, 231, 227, 210, 112, 78, 126, 15, 130, 2, 71, 246, 101, 46, 49, 47, 42, 96, 200, 143, 170, 188, 147, 170, 30, 57, 136, 13, 102, 31, 89, 20, 127, 185, 179, 58, 144, 39, 140, 139, 72, 114, 226, 248, 70, 228, 152, 10, 23, 176, 64, 28, 189, 138, 48, 236, 236, 225, 228, 90, 141, 83, 64, 124, 222, 253, 86, 101, 148, 210, 53, 40, 214, 104, 89, 156, 5, 111, 79, 9, 104, 80, 138, 69, 223, 156, 9, 92, 100, 62, 205, 48, 182, 252, 70, 168, 56, 110, 171, 229, 251, 40, 178, 61, 56, 137, 24, 168, 80, 125, 148, 233, 40, 220, 1, 17, 111, 45, 87, 173, 73, 253, 186, 97, 180, 83, 143, 231, 211, 252, 243, 188, 9, 159, 103, 45, 127, 52, 98, 222, 58, 79, 36, 98, 163, 152, 36, 148, 178, 113, 204, 160, 84, 64, 25, 244, 33, 169, 170, 189, 8, 112, 20, 120, 64, 14, 76, 15, 34, 251, 183, 172, 164, 93, 61, 235, 63, 212, 104, 181, 127, 159, 61, 218, 71, 47, 235, 117, 161, 142, 55, 8, 43, 160, 118, 2, 2, 4, 28, 195, 32, 108, 246, 101, 211, 87, 106, 218, 152, 54, 68, 11, 117, 143, 151, 162, 226, 203, 127, 58, 192, 90, 41, 4, 150, 227, 110, 65, 14, 49, 126, 213, 192, 207, 123, 90, 191, 28, 157, 64, 19, 53, 181, 230, 92, 101, 131, 110, 123, 171, 42, 181, 181, 105, 220, 167, 211, 3, 79, 250, 107, 50, 11, 159, 11, 17, 182, 99, 41, 111, 7, 108, 6, 216, 172, 59, 200, 83, 241, 40, 126, 100, 28, 242, 220, 180, 234, 206, 218, 160, 35, 173, 238, 172, 209, 33, 89, 201, 34, 94, 187, 224, 9, 77, 53, 182, 39, 82, 182, 55, 162, 107, 35, 118, 127, 63, 157, 73, 29, 197, 187, 121, 178, 136, 204, 89, 41, 217, 240, 191, 130, 104, 184, 204, 70, 171, 138, 10, 105, 155, 135, 11, 121, 58, 96, 163, 125, 128, 108, 224, 211, 48, 16, 173, 80, 131, 43, 79, 202, 71, 58, 174, 23, 248, 168, 71, 144, 5, 150, 163, 103, 246, 28, 147, 184, 24, 119, 235, 117, 218, 57, 202, 111, 176, 36, 176, 184, 81, 192, 142, 231, 144, 204, 1, 17, 197, 46, 120, 231, 252, 24, 201, 171, 194, 94, 98, 9, 11, 112, 139, 207, 55, 151, 105, 133, 13, 119, 111, 48, 222, 215, 25, 141, 111, 139, 225, 227, 165, 163, 18, 73, 12, 142, 95, 60, 75, 75, 113, 101, 21, 72, 136, 73, 150, 91, 147, 110, 172, 208, 70, 179, 86, 7, 139, 128, 179, 123, 155, 31, 182, 69, 43, 108, 85, 204, 165, 74, 216, 250, 139, 177, 178, 171, 213, 65, 179, 136, 94, 171, 27, 45, 191, 132, 30, 218, 168, 23, 53, 27, 91, 14, 146, 253, 88, 124, 120, 26, 62, 22, 179, 204, 173, 134, 74, 66, 189, 217, 247, 199, 121, 242, 241, 16, 94, 86, 166, 140, 15, 201, 73, 19, 208, 68, 208, 63, 118, 11, 122, 221, 147, 84, 42, 186, 166, 16, 77, 31, 172, 30, 28, 205, 126, 233, 15, 167, 208, 120, 215, 53, 86, 119, 27, 228, 206, 70, 47, 232, 232, 174, 203, 197, 69, 26, 239, 156, 57, 8, 107, 10, 127, 120, 225, 115, 38, 174, 60, 23, 206, 237, 41, 121, 61, 100, 203, 73, 207, 75, 239, 81, 4, 204, 97, 210, 6, 175, 108, 197, 245, 193, 139, 16, 26, 50, 155, 47, 81, 94, 113, 200, 22, 130, 203, 150, 180, 58, 93, 160, 14, 13, 125, 121, 188, 88, 4, 134, 225, 223, 29, 136, 72, 143, 191, 252, 101, 186, 182, 48, 202, 118, 153, 220, 210, 141, 233, 225, 14, 16, 168, 6, 102, 78, 239, 152, 124, 148, 215, 63, 93, 181, 154, 249, 149, 56, 120, 201, 65, 250, 200, 24, 11, 170, 238, 17, 61, 210, 40, 22, 122, 216, 114, 211, 138, 75, 184, 91, 146, 128, 202, 242, 55, 253, 19, 209, 131, 128, 165, 31, 67, 9, 88, 181, 32, 32, 115, 210, 115, 235, 181, 72, 135, 230, 198, 39, 202, 54, 180, 172, 165, 168, 170, 74, 208, 133, 150, 166, 7, 103, 144, 225, 3, 213, 99, 79, 1, 28, 205, 24, 185, 76, 108, 169, 245, 250, 144, 202, 224, 196, 153, 66, 177, 168, 23, 175, 31, 18, 123, 248, 173, 177, 175, 31, 245, 193, 72, 66, 253, 119, 192, 118, 239, 111, 244, 93, 5, 62, 111, 227, 154, 35, 184, 244, 157, 9, 62, 236, 254, 130, 11, 53, 156, 208, 204, 206, 220, 104, 124, 137, 38, 201, 226, 71, 41, 247, 161, 208, 174, 253, 52, 93, 232, 96, 33, 130, 171, 222, 75, 228, 146, 172, 3, 93, 175, 230, 178, 136, 45, 18, 182, 250, 201, 67, 93, 183, 75, 113, 218, 198, 219, 64, 179, 11, 231, 81, 87, 45, 211, 126, 171, 128, 39, 52, 211, 214, 87, 186, 132, 52, 190, 176, 103, 4, 15, 12, 190, 155, 33, 211, 153, 92, 173, 193, 78, 35, 223, 24, 181, 19, 74, 98, 2, 134, 83, 106, 28, 89, 63, 157, 159, 146, 77, 64, 55, 114, 179, 4, 202, 207, 5, 240, 72, 186, 130, 224, 24, 132, 248, 36, 177, 89, 56, 3, 242, 242, 26, 158, 57, 135, 165, 65, 131, 25, 202, 249, 176, 67, 62, 115, 80, 212, 59, 158, 170, 9, 177, 215, 130, 15, 7, 183, 30, 120, 108, 154, 151, 100, 171, 30, 55, 160, 176, 180, 86, 21, 5, 29, 23, 88, 27, 74, 50, 56, 42, 81, 182, 58, 92, 89, 101, 110, 122, 56, 254, 170, 162, 143, 147, 205, 71, 124, 29, 134, 201, 129, 168, 157, 201, 162, 80, 81, 227, 162, 72, 35, 151, 9, 122, 213, 19, 180, 98, 103, 171, 29, 109, 50, 217, 67, 56, 98, 169, 74, 153, 183, 93, 236, 79, 253, 113, 39, 79, 82, 11, 239, 189, 190, 97, 95, 186, 227, 60, 41, 93, 248, 99, 68, 244, 126, 81, 131, 224, 118, 169, 57, 235, 174, 43, 193, 211, 131, 66, 71, 198, 159, 4, 164, 41, 41, 81, 170, 94, 128, 124, 205, 91, 40, 137, 6, 23, 135, 212, 189, 251, 126, 253, 167, 74, 73, 29, 112, 55, 129, 64, 47, 159, 116, 99, 202, 83, 228, 188, 195, 252, 116, 28, 33, 149, 210, 109, 189, 55, 244, 155, 2, 142, 66, 220, 237, 209, 119, 54, 12, 96, 2, 109, 34, 228, 23, 50, 102, 80, 86, 58, 221, 126, 226, 121, 197, 118, 11, 210, 124, 41, 196, 54, 60, 68, 224, 16, 78, 224, 206, 55, 124, 142, 41, 45, 218, 247, 37, 5, 255, 96, 106, 197, 6, 245, 207, 82, 185, 14, 172, 60, 177, 223, 24, 150, 247, 95, 208, 23, 171, 32, 119, 244, 152, 154, 74, 9, 47, 36, 91, 132, 119, 187, 143, 222, 55, 178, 43, 219, 63, 216, 85, 115, 34, 26, 20, 49, 94, 225, 136, 243, 29, 57, 62, 150, 155, 146, 237, 122, 174, 149, 1, 12, 106, 133, 111, 121, 204, 2, 99, 99, 185, 209, 105, 75, 181, 61, 74, 0, 65, 140, 41, 103, 223, 145, 165, 210, 233, 229, 124, 158, 168, 217, 198, 114, 95, 151, 140, 244, 20, 248, 205, 132, 178, 193, 136, 64, 114, 97, 160, 28, 64, 201, 27, 123, 27, 48, 74, 254, 176, 210, 159, 140, 12, 54, 38, 241, 177, 243, 153, 124, 128, 188, 253, 14, 23, 31, 250, 25, 163, 133, 51, 160, 39, 92, 64, 247, 146, 93, 186, 110, 223, 237, 142, 80, 116, 243, 66, 51, 138, 185, 241, 247, 164, 91, 142, 199, 137, 24, 73, 111, 107, 68, 179, 34, 237, 59, 4, 216, 87, 109, 67, 38, 165, 251, 106, 209, 66, 87, 7, 0, 4, 190, 63, 154, 132, 241, 249, 113, 207, 92, 107, 203, 228, 19, 131, 177, 175, 53, 1, 11, 15, 151, 151, 159, 70, 93, 243, 214, 220, 104, 141, 76, 3, 149, 51, 226, 21, 13, 187, 0, 187, 182, 183, 102, 247, 159, 43, 81, 47, 221, 237, 186, 49, 156, 222, 20, 16, 216, 85, 140, 107, 254, 199, 43, 136, 203, 68, 28, 95, 249, 96, 1, 78, 116, 40, 148, 176, 25, 194, 246, 42, 214, 112, 154, 3, 74, 112, 147, 195, 182, 232, 132, 157, 144, 179, 183, 136, 84, 199, 205, 205, 67, 224, 84, 58, 80, 135, 223, 126, 216, 211, 20, 254, 242, 239, 118, 191, 14, 216, 129, 45, 244, 62, 235, 107, 45, 141, 186, 194, 242, 248, 223, 225, 61, 102, 141, 66, 71, 141, 102, 173, 75, 233, 143, 153, 157, 203, 63, 47, 140, 38, 184, 165, 106, 83, 255, 14, 242, 9, 89, 252, 20, 7, 34, 192, 150, 32, 28, 81, 152, 199, 138, 167, 104, 20, 37, 91, 155, 119, 229, 191, 178, 164, 54, 237, 27, 74, 220, 108, 169, 44, 46, 191, 178, 226, 135, 91, 116, 107, 62, 222, 106, 112, 179, 182, 176, 33, 107, 17, 42, 248, 22, 99, 233, 158, 8, 241, 40, 5, 201, 207, 239, 133, 180, 119, 159, 116, 99, 89, 63, 113, 99, 129, 184, 175, 66, 78, 200, 225, 253, 172, 99, 186, 90, 182, 33, 120, 70, 219, 240, 7, 81, 27, 230, 90, 68, 149, 16, 169, 218, 167, 63, 211, 163, 72, 224, 91, 27, 163, 158, 143, 92, 65, 17, 104, 89, 87, 99, 48, 63, 8, 242, 1, 94, 63, 124, 131, 54, 33, 132, 150, 20, 16, 165, 159, 224, 195, 4, 191, 156, 233, 42, 219, 221, 40, 116, 19, 75, 135, 82, 43, 217, 65, 119, 43, 160, 51, 53, 88, 22, 37, 126, 44, 1, 16, 130, 220, 70, 54, 18, 172, 241, 43, 177, 91, 95, 107, 201, 51, 237, 209, 90, 106, 138, 104, 89, 210, 18, 193, 2, 237, 67, 178, 192, 2, 166, 184, 202, 10, 27, 58, 114, 250, 157, 180, 161, 172, 153, 131, 102, 174, 215, 173, 69, 216, 71, 203, 251, 123, 61, 215, 149, 205, 207, 221, 134, 126, 108, 39, 115, 154, 20, 208, 24, 216, 96, 20, 151, 162, 46, 209, 151, 133, 222, 246, 225, 222, 135, 207, 220, 178, 187, 130, 70, 20, 29, 194, 152, 226, 15, 108, 102, 189, 33, 30, 111, 198, 126, 52, 87, 65, 66, 132, 202, 30, 243, 141, 140, 154, 54, 227, 136, 26, 61, 186, 251, 201, 89, 252, 105, 104, 236, 38, 39, 106, 203, 103, 82, 34, 2, 55, 115, 10, 255, 76, 47, 87, 188, 123, 243, 237, 147, 7, 138, 253, 153, 186, 43, 236, 53, 206, 249, 152, 28, 106, 200, 19, 195, 10, 236, 105, 72, 96, 88, 65, 17, 73, 193, 189, 34, 63, 141, 9, 206, 249, 194, 30, 228, 136, 202, 7, 172, 216, 48, 49, 31, 105, 121, 176, 243, 137, 141, 143, 52, 16, 48, 107, 172, 214, 102, 243, 83, 254, 243, 34, 93, 82, 247, 175, 47, 137, 166, 243, 171, 222, 213, 91, 99, 209, 119, 169, 139, 117, 3, 248, 253, 133, 109, 198, 203, 161, 67, 176, 98, 62, 160, 130, 58, 129, 107, 85, 163, 136, 218, 15, 154, 231, 85, 111, 151, 176, 24, 30, 25, 65, 139, 239, 41, 143, 127, 40, 150, 152, 4, 169, 14, 249, 28, 22, 171, 190, 129, 74, 117, 168, 244, 151, 141, 21, 102, 247, 48, 149, 147, 60, 117, 7, 177, 206, 154, 99, 166, 241, 26, 218, 80, 129, 234, 133, 218, 227, 163, 237, 203, 209, 234, 176, 86, 21, 27, 20, 72, 245, 201, 68, 69, 32, 254, 6, 145, 112, 249, 140, 180, 255, 93, 114, 114, 68, 95, 91, 248, 106, 186, 18, 107, 180, 89, 236, 27, 18, 161, 167, 249, 158, 13, 38, 196, 25, 122, 183, 79, 177, 188, 138, 155, 218, 231, 94, 204, 129, 237, 161, 15, 238, 80, 209, 11, 173, 177, 0, 192, 55, 177, 110, 225, 239, 96, 204, 215, 62, 85, 213, 62, 245, 122, 3, 92, 137, 71, 36, 247, 100, 222, 170, 237, 34, 87, 144, 129, 51, 137, 166, 219, 225, 209, 208, 249, 187, 181, 119, 120, 178, 217, 217, 40, 124, 23, 132, 154, 255, 207, 105, 216, 143, 136, 31, 119, 171, 169, 29, 83, 46, 221, 214, 179, 191, 240, 118, 114, 214, 97, 184, 64, 53, 108, 23, 217, 35, 155, 215, 235, 133, 118, 228, 113, 52, 101, 253, 146, 55, 247, 235, 227, 149, 96, 107, 46, 176, 99, 48, 246, 245, 230, 45, 1, 200, 28, 201, 254, 16, 171, 69, 120, 108, 248, 180, 190, 177, 36, 182, 247, 242, 33, 7, 53, 93, 240, 114, 42, 238, 230, 236, 131, 142, 25, 114, 203, 110, 62, 224, 123, 204, 33, 100, 92, 124, 159, 18, 62, 74, 203, 32, 99, 234, 177, 187, 54, 11, 60, 46, 40, 102, 5, 167, 217, 77, 17, 221, 146, 62, 163, 45, 137, 68, 193, 163, 21, 14, 95, 132, 94, 91, 149, 2, 243, 101, 122, 122, 23, 68, 211, 143, 100, 64, 236, 111, 158, 81, 73, 1, 29, 185, 54, 13, 120, 206, 220, 14, 65, 62, 28, 28, 203, 58, 28, 22, 104, 228, 216, 15, 56, 78, 161, 53, 220, 152, 79, 90, 199, 170, 191, 246, 83, 76, 13, 7, 89, 248, 222, 106, 118, 231, 41, 69, 239, 109, 33, 251, 97, 175, 231, 198, 108, 189, 41, 240, 69, 182, 174, 39, 100, 30, 247, 152, 168, 153, 240, 215, 55, 139, 217, 156, 82, 214, 166, 34, 242, 38, 137, 203, 220, 114, 152, 38, 38, 30, 226, 159, 226, 218, 2, 238, 179, 196, 175, 57, 60, 201, 20, 132, 30, 214, 43, 114, 188, 108, 110, 182, 102, 154, 111, 253, 61, 191, 144, 206, 110, 59, 240, 54, 245, 13, 218, 39, 185, 71, 29, 187, 163, 151, 219, 194, 88, 188, 178, 93, 110, 144, 13, 132, 244, 225, 89, 105, 67, 44, 222, 29, 164, 37, 255, 85, 236, 73, 28, 193, 246, 70, 231, 213, 102, 117, 225, 145, 79, 244, 238, 121, 182, 116, 187, 111, 236, 177, 224, 34, 42, 82, 4, 15, 147, 139, 63, 34, 161, 210, 163, 107, 5, 51, 151, 92, 86, 110, 156, 138, 234, 42, 175, 123, 144, 189, 241, 94, 114, 43, 49, 144, 96, 182, 162, 8, 194, 191, 138, 40, 49, 141, 169, 101, 188, 75, 246, 180, 62, 75, 120, 85, 68, 47, 181, 213, 46, 63, 43, 181, 170, 79, 99, 153, 16, 96, 251, 108, 241, 69, 150, 147, 205, 36, 160, 204, 231, 237, 48, 88, 147, 57, 154, 251, 110, 88, 105, 255, 101, 46, 134, 217, 83, 107, 183, 132, 219, 116, 213, 193, 221, 59, 8, 127, 97, 138, 239, 34, 252, 218, 165, 211, 213, 225, 86, 92, 83, 220, 65, 18, 31, 109, 75, 72, 225, 206, 195, 57, 32, 166, 106, 247, 225, 137, 75, 151, 119, 106, 53, 40, 20, 32, 96, 30, 179, 116, 13, 82, 174, 222, 95, 236, 43, 132, 236, 212, 181, 174, 215, 171, 203, 187, 193, 191, 149, 255, 63, 218, 213, 157, 221, 20, 206, 213, 127, 1, 112, 250, 82, 169, 40, 86, 179, 99, 153, 73, 72, 58, 195, 245, 186, 31, 255, 228, 3, 192, 71, 136, 105, 200, 59, 197, 28, 73, 174, 208, 7, 241, 116, 243, 99, 53, 109, 22, 172, 121, 12, 213, 163, 202, 243, 193, 201, 208, 118, 253, 17, 67, 58, 56, 88, 134, 156, 27, 51, 191, 191, 203, 197, 21, 143, 68, 106, 235, 245, 172, 203, 77, 198, 221, 145, 201, 216, 164, 216, 33, 180, 173, 68, 88, 150, 62, 243, 252, 76, 143, 33, 45, 224, 208, 100, 138, 169, 37, 194, 16, 27, 142, 85, 244, 201, 39, 35, 199, 23, 196, 221, 207, 148, 32, 100, 15, 109, 80, 229, 98, 216, 244, 11, 246, 205, 239, 33, 140, 132, 127, 119, 157, 207, 174, 205, 76, 135, 0, 38, 92, 247, 16, 246, 71, 161, 44, 3, 250, 142, 230, 34, 44, 102, 111, 6, 116, 93, 116, 64, 26, 174, 157, 104, 22, 212, 199, 34, 143, 108, 121, 159, 195, 194, 227, 25, 20, 126, 130, 229, 145, 169, 113, 40, 93, 88, 236, 184, 86, 125, 239, 65, 77, 210, 62, 79, 144, 160, 174, 230, 53, 253, 124, 245, 253, 133, 238, 136, 25, 172, 49, 125, 108, 250, 254, 53, 139, 160, 128, 33, 181, 234, 151, 89, 179, 232, 7, 105, 174, 205, 88, 245, 225, 164, 234, 7, 162, 160, 67, 59, 175, 209, 233, 144, 83, 156, 50, 20, 34, 20, 11, 108, 194, 223, 145, 73, 111, 23, 214, 50, 217, 21, 64, 197, 29, 128, 25, 214, 4, 39, 155, 120, 62, 8, 140, 43, 64, 8, 10, 237, 234, 16, 159, 107, 72, 162, 240, 184, 123, 219, 236, 218, 49, 12, 63, 124, 67, 193, 160, 117, 184, 106, 215, 40, 158, 65, 102, 228, 19, 104, 155, 227, 162, 85, 60, 34, 23, 26, 229, 188, 90, 64, 70, 209, 207, 17, 88, 66, 116, 204, 49, 22, 44, 188, 247, 13, 214, 242, 5, 47, 117, 39, 83, 3, 148, 10, 83, 223, 184, 123, 166, 243, 221, 225, 105, 108, 165, 26, 175, 173, 193, 228, 226, 66, 201, 57, 231, 70, 62, 228, 197, 97, 205, 65, 91, 1, 250, 246, 183, 230, 57, 99, 44, 2, 0, 101, 87, 23, 198, 39, 75, 28, 63, 130, 29, 89, 178, 79, 118, 86, 162, 161, 171, 30, 70, 139, 134, 155, 83, 166, 55, 71, 115, 233, 243, 220, 4, 92, 189, 87, 110, 0, 25, 135, 139, 84, 16, 27, 145, 182, 193, 94, 123, 54, 199, 143, 166, 34, 67, 154, 98, 144, 252, 168, 134, 60, 171, 28, 232, 38, 130, 190, 87, 15, 154, 235, 139, 174, 93, 177, 72, 167, 17, 20, 155, 235, 82, 13, 92, 135, 120, 117, 237, 189, 89, 8, 191, 207, 118, 77, 223, 120, 221, 188, 142, 35, 201, 15, 157, 219, 120, 124, 151, 179, 65, 136, 11, 119, 160, 190, 70, 150, 1, 152, 198, 92, 203, 179, 83, 198, 89, 92, 185, 181, 119, 115, 204, 97, 209, 64, 70, 166, 216, 65, 253, 115, 138, 138, 166, 220, 23, 72, 94, 47, 218, 112, 1, 136, 200, 165, 243, 155, 74, 35, 45, 72, 166, 40, 172, 16, 141, 79, 41, 89, 246, 129, 73, 201, 143, 88, 76, 40, 131, 85, 214, 63, 6, 43, 176, 26, 226, 1, 95, 149, 36, 150, 9, 161, 43, 89, 182, 27, 3, 141, 11, 60, 189, 90, 199, 210, 212, 104, 233, 220, 143, 105, 219, 96, 68, 118, 116, 148, 195, 42, 96, 132, 32, 74, 130, 229, 218, 201, 48, 46, 234, 83, 112, 98, 43, 168, 104, 107, 118, 194, 53, 51, 144, 144, 199, 246, 78, 82, 147, 37, 25, 121, 50, 187, 195, 237, 93, 108, 78, 30, 58, 135, 70, 2, 129, 49, 237, 12, 112, 26, 130, 196, 84, 162, 246, 47, 64, 129, 196, 84, 76, 46, 150, 176, 51, 187, 123, 33, 238, 173, 75, 111, 46, 223, 141, 46, 206, 215, 64, 105, 94, 94, 149, 75, 11, 245, 22, 148, 56, 186, 211, 222, 145, 122, 121, 83, 69, 158, 209, 71, 38, 149, 61, 177, 225, 222, 87, 161, 46, 189, 165, 237, 173, 109, 148, 33, 248, 224, 234, 115, 196, 60, 253, 108, 207, 112, 154, 224, 140, 30, 213, 154, 167, 155, 81, 50, 12, 13, 34, 192, 92, 42, 62, 73, 151, 255, 98, 44, 71, 192, 223, 238, 121, 130, 254, 220, 40, 50, 85, 164, 146, 176, 49, 115, 166, 193, 32, 23, 172, 17, 25, 84, 62, 167, 249, 94, 141, 89, 176, 176, 119, 28, 39, 149, 188, 146, 123, 178, 215, 182, 72, 77, 202, 147, 186, 115, 128, 26, 185, 156, 186, 118, 6, 194, 224, 26, 249, 100, 25, 80, 205, 49, 93, 124, 168, 182, 44, 114, 199, 60, 165, 106, 205, 195, 229, 189, 113, 10, 112, 33, 153, 161, 100, 234, 210, 241, 110, 86, 93, 153, 127, 57, 173, 39, 203, 114, 141, 243, 92, 233, 121, 239, 229, 243, 47, 165, 50, 155, 238, 98, 225, 177, 200, 213, 64, 12, 30, 178, 30, 138, 84, 60, 235, 39, 124, 66, 210, 45, 98, 57, 117, 143, 222, 19, 139, 163, 201, 48, 34, 34, 121, 218, 225, 92, 243, 183, 125, 213, 28, 241, 240, 13, 182, 121, 60, 122, 201, 141, 154, 118, 197, 157, 221, 98, 52, 170, 234, 22, 24, 170, 160, 211, 53, 71, 68, 127, 193, 76, 86, 166, 176, 119, 160, 13, 240, 73, 172, 158, 182, 248, 54, 61, 234, 238, 216, 169, 66, 75, 234, 251, 83, 81, 113, 151, 31, 176, 14, 118, 79, 36, 206, 130, 236, 90, 197, 122, 224, 71, 147, 14, 167, 57, 128, 185, 212, 52, 47, 87, 19, 134, 102, 94, 80, 72, 33, 187, 215, 243, 246, 154, 201, 91, 182, 238, 126, 50, 222, 119, 199, 56, 226, 40, 107, 184, 76, 8, 41, 14, 77, 195, 129, 157, 54, 10, 90, 186, 217, 176, 42, 113, 173, 15, 251, 164, 124, 41, 212, 88, 111, 252, 154, 198, 239, 212, 1, 106, 32, 101, 175, 39, 71, 227, 85, 243, 6, 41, 200, 97, 120, 80, 197, 21, 29, 202, 82, 141, 207, 100, 200, 54, 114, 116, 1, 0, 71, 73, 101, 73, 60, 176, 214, 187, 146, 189, 166, 218, 75, 254, 82, 42, 171, 250, 8, 98, 36, 12, 22, 223, 156, 13, 11, 112, 149, 214, 8, 52, 165, 167, 98, 253, 157, 120, 53, 169, 10, 94, 111, 69, 227, 116, 146, 251, 78, 117, 103, 73, 33, 155, 98, 206, 100, 70, 192, 255, 254, 21, 41, 192, 89, 142, 188, 160, 178, 26, 169, 205, 184, 21, 177, 187, 62, 51, 79, 247, 161, 4, 195, 190, 68, 25, 114, 76, 140, 68, 96, 227, 138, 37, 151, 198, 110, 64, 89, 208, 128, 203, 129, 83, 198, 248, 118, 247, 224, 88, 25, 1, 30, 243, 118, 163, 45, 101, 100, 172, 67, 24, 148, 0, 207, 208, 134, 41, 116, 237, 80, 43, 8, 115, 92, 97, 205, 132, 4, 173, 151, 224, 164, 236, 46, 13, 91, 90, 111, 99, 15, 166, 207, 82, 201, 169, 4, 255, 117, 105, 214, 61, 72, 19, 187, 205, 38, 173, 202, 95, 52, 168, 18, 170, 154, 14, 151, 151, 35, 245, 222, 239, 7, 19, 59, 253, 53, 154, 104, 65, 247, 226, 25, 217, 202, 197, 19, 66, 182, 221, 136, 65, 38, 97, 21, 153, 74, 170, 53, 105, 158, 43, 250, 123, 41, 14, 15, 255, 209, 101, 28, 207, 194, 235, 132, 243, 95, 103, 208, 250, 220, 18, 213, 0, 94, 207, 47, 40, 242, 103, 97, 67, 243, 18, 158, 133, 231, 35, 197, 142, 253, 75, 19, 171, 255, 105, 16, 103, 41, 123, 77, 245, 22, 58, 80, 199, 39, 106, 52, 107, 114, 186, 112, 62, 231, 11, 35, 45, 184, 239, 66, 164, 164, 150, 98, 143, 95, 50, 207, 83, 49, 219, 199, 248, 46, 99, 22, 149, 63, 27, 17, 13, 126, 230, 52, 64, 181, 55, 39, 163, 254, 254, 130, 101, 208, 20, 237, 163, 161, 179, 195, 208, 138, 234, 179, 67, 66, 120, 56, 77, 156, 199, 235, 204, 150, 174, 91, 128, 236, 61, 168, 144, 196, 25, 163, 208, 175, 0, 210, 142, 33, 109, 205, 112, 243, 51, 255, 227, 111, 27, 52, 187, 219, 39, 99, 198, 101, 221, 124, 59, 176, 153, 246, 224, 184, 237, 185, 52, 92, 127, 10, 55, 129, 154, 130, 58, 54, 103, 119, 3, 196, 239, 206, 1, 87, 85, 133, 90, 0, 27, 107, 151, 18, 163, 145, 37, 163, 186, 48, 198, 83, 17, 202, 82, 12, 151, 234, 240, 41, 106, 158, 30, 70, 113, 184, 143, 189, 28, 100, 220, 81, 42, 153, 252, 66, 176, 125, 46, 138, 174, 0, 6, 160, 24, 227, 182, 5, 134, 195, 16, 140, 134, 4, 50, 190, 186, 134, 13, 63, 245, 255, 133, 7, 146, 243, 43, 104, 248, 66, 6, 112, 203, 221, 69, 93, 59, 32, 216, 74, 231, 86, 138, 237, 189, 152, 145, 127, 213, 84, 82, 127, 167, 58, 126, 180, 19, 48, 246, 235, 127, 103, 149, 223, 76, 99, 134, 159, 72, 84, 96, 225, 148, 53, 163, 173, 244, 136, 4, 247, 180, 237, 225, 175, 251, 21, 178, 19, 33, 188, 163, 10, 249, 91, 24, 208, 63, 91, 228, 199, 74, 125, 182, 247, 69, 159, 74, 180, 77, 5, 172, 250, 245, 211, 145, 101, 244, 106, 239, 123, 54, 63, 138, 35, 57, 140, 118, 215, 195, 151, 19, 160, 128, 103, 21, 16, 55, 85, 46, 227, 80, 21, 103, 136, 95, 56, 209, 217, 149, 201, 225, 162, 90, 84, 60, 111, 45, 237, 48, 84, 107, 164, 137, 167, 153, 37, 124, 203, 185, 176, 255, 164, 186, 140, 178, 157, 107, 209, 114, 241, 99, 139, 67, 225, 176, 127, 228, 91, 77, 225, 109, 184, 81, 13, 72, 101, 140, 74, 64, 124, 22, 43, 78, 102, 229, 27, 127, 158, 13, 85, 203, 182, 13, 159, 92, 210, 200, 211, 180, 204, 206, 165, 156, 251, 88, 197, 252, 124, 16, 0, 102, 20, 98, 92, 166, 35, 143, 207, 140, 179, 121, 156, 116, 120, 217, 127, 37, 24, 199, 173, 75, 176, 16, 186, 92, 70, 248, 49, 244, 214, 55, 52, 210, 6, 136, 11, 47, 135, 31, 1, 136, 71, 216, 54, 153, 85, 223, 91, 5, 31, 63, 17, 68, 222, 253, 109, 106, 72, 131, 143, 131, 99, 249, 122, 176, 161, 249, 124, 28, 155, 92, 173, 177, 204, 229, 70, 225, 205, 80, 38, 240, 3, 129, 179, 252, 148, 97, 234, 236, 237, 38, 132, 171, 67, 21, 245, 86, 67, 36, 229, 237, 6, 59, 66, 72, 70, 29, 230, 126, 248, 0, 163, 237, 158, 148, 20, 162, 39, 125, 228, 131, 179, 17, 63, 214, 153, 239, 23, 64, 118, 245, 167, 229, 193, 103, 46, 28, 50, 67, 76, 116, 88, 207, 27, 34, 22, 83, 228, 237, 10, 244, 2, 204, 113, 170, 150, 16, 227, 190, 120, 75, 183, 20, 60, 221, 236, 207, 172, 207, 50, 177, 227, 175, 75, 47, 116, 187, 50, 199, 240, 147, 246, 176, 149, 110, 33, 132, 215, 166, 245, 178, 182, 168, 86, 125, 37, 178, 35, 39, 96, 76, 252, 176, 110, 159, 121, 161, 168, 24, 30, 89, 53, 150, 133, 183, 154, 50, 46, 247, 183, 57, 146, 20, 10, 76, 91, 8, 44, 70, 59, 29, 61, 108, 75, 148, 4, 2, 79, 195, 180, 44, 191, 178, 216, 5, 20, 246, 88, 98, 15, 73, 223, 150, 112, 210, 124, 158, 87, 180, 1, 108, 35, 137, 106, 186, 157, 205, 36, 66, 62, 150, 49, 74, 111, 124, 222, 149, 31, 53, 44, 226, 75, 71, 180, 137, 98, 239, 50, 135, 35, 201, 253, 223, 24, 202, 26, 13, 23, 103, 142, 75, 41, 121, 69, 86, 187, 191, 150, 56, 180, 199, 100, 228, 185, 86, 64, 248, 143, 70, 149, 239, 238, 178, 218, 255, 254, 215, 248, 188, 175, 12, 114, 220, 74, 17, 24, 114, 172, 99, 162, 37, 219, 30, 128, 82, 182, 107, 99, 16, 121, 20, 3, 71, 219, 60, 236, 135, 144, 254, 46, 249, 33, 249, 213, 216, 53, 96, 83, 126, 91, 45, 70, 229, 93, 192, 104, 19, 198, 137, 238, 143, 172, 106, 156, 211, 49, 41, 118, 50, 50, 89, 171, 60, 100, 252, 115, 66, 67, 5, 114, 244, 242, 180, 206, 206, 224, 85, 98, 165, 12, 176, 251, 105, 189, 229, 75, 191, 98, 107, 155, 99, 180, 12, 198, 37, 45, 183, 60, 209, 120, 182, 2, 223, 81, 178, 35, 86, 3, 205, 41, 57, 83, 109, 19, 26, 96, 80, 129, 12, 102, 40, 121, 215, 100, 150, 78, 144, 100, 159, 53, 181, 168, 219, 140, 0, 190, 7, 198, 35, 132, 90, 234, 210, 13, 251, 182, 104, 240, 73, 130, 209, 167, 100, 215, 133, 171, 183, 183, 206, 69, 142, 216, 61, 127, 69, 2, 2, 230, 143, 184, 135, 136, 202, 224, 157, 23, 232, 77, 46, 35, 70, 94, 8, 186, 129, 66, 118, 180, 59, 187, 50, 99, 246, 44, 147, 163, 185, 236, 104, 169, 197, 156, 76, 233, 54, 52, 23, 91, 164, 204, 137, 132, 14, 93, 32, 50, 106, 17, 144, 57, 137, 78, 112, 35, 177, 85, 158, 141, 201, 15, 237, 165, 252, 48, 209, 61, 168, 51, 147, 236, 43, 108, 176, 165, 177, 112, 238, 3, 117, 233, 253, 103, 35, 200, 173, 105, 182, 105, 62, 232, 155, 242, 59, 26, 247, 125, 145, 85, 102, 251, 120, 178, 121, 12, 49, 144, 69, 25, 70, 68, 189, 30, 234, 104, 43, 106, 6, 246, 105, 121, 7, 229, 32, 230, 77, 43, 108, 93, 185, 244, 229, 180, 34, 5, 144, 195, 19, 238, 59, 63, 153, 200, 0, 237, 191, 222, 192, 102, 224, 93, 209, 64, 103, 193, 102, 208, 252, 245, 207, 249, 250, 184, 180, 109, 167, 181, 153, 171, 11, 139, 166, 230, 176, 116, 29, 129, 249, 248, 187, 69, 48, 233, 60, 135, 103, 44, 240, 236, 235, 64, 151, 102, 165, 75, 248, 89, 142, 147, 135, 9, 67, 54, 193, 54, 142, 238, 229, 250, 173, 164, 211, 8, 136, 172, 38, 15, 73, 183, 23, 243, 51, 227, 199, 68, 20, 98, 11, 22, 32, 33, 71, 105, 231, 89, 182, 70, 194, 50, 242, 111, 223, 55, 38, 187, 42, 207, 74, 183, 61, 21, 19, 223, 81, 171, 89, 27, 209, 150, 39, 205, 172, 235, 90, 194, 199, 98, 186, 92, 108, 27, 250, 102, 247, 221, 91, 85, 235, 253, 73, 168, 224, 184, 172, 197, 104, 227, 242, 205, 177, 168, 254, 115, 136, 21, 7, 255, 150, 106, 163, 210, 18, 235, 166, 71, 73, 30, 135, 83, 37, 109, 66, 78, 20, 243, 79, 44, 243, 75, 143, 111, 250, 244, 25, 142, 134, 41, 251, 42, 226, 148, 23, 19, 162, 24, 55, 175, 188, 140, 218, 250, 210, 244, 23, 178, 49, 49, 101, 179, 55, 151, 81, 192, 226, 30, 10, 70, 123, 179, 194, 174, 147, 81, 171, 248, 26, 219, 194, 55, 185, 40, 235, 136, 141, 245, 75, 245, 133, 98, 198, 47, 62, 138, 171, 37, 89, 177, 225, 142, 140, 1, 73, 133, 145, 81, 15, 153, 47, 64, 211, 118, 49, 176, 98, 127, 73, 250, 242, 29, 98, 182, 255, 31, 182, 214, 236, 191, 228, 147, 141, 16, 193, 215, 176, 223, 128, 29, 197, 108, 239, 152, 61, 90, 90, 93, 202, 87, 143, 226, 40, 231, 65, 136, 228, 33, 215, 35, 211, 172, 25, 147, 187, 193, 125, 23, 139, 23, 101, 243, 232, 226, 3, 139, 245, 124, 202, 99, 229, 1, 121, 77, 8, 169, 16, 44, 54, 38, 134, 138, 45, 15, 108, 3, 247, 120, 135, 210, 17, 224, 235, 177, 8, 20, 0, 242, 99, 64, 179, 74, 37, 250, 136, 58, 13, 38, 14, 81, 93, 213, 157, 227, 178, 164, 253, 99, 19, 68, 192, 255, 190, 127, 226, 251, 107, 163, 9, 178, 179, 191, 65, 6, 55, 80, 135, 98, 71, 102, 41, 134, 103, 245, 125, 201, 90, 99, 232, 132, 105, 230, 115, 48, 207, 117, 16, 136, 165, 86, 164, 0, 220, 219, 145, 240, 97, 11, 178, 163, 71, 35, 44, 241, 88, 76, 253, 23, 144, 124, 149, 104, 61, 175, 81, 172, 235, 26, 34, 26, 146, 96, 92, 77, 160, 149, 83, 136, 100, 232, 49, 0, 29, 34, 11, 57, 212, 169, 177, 135, 77, 153, 95, 119, 151, 31, 27, 38, 94, 31, 187, 216, 74, 115, 255, 22, 230, 231, 174, 58, 43, 245, 247, 53, 131, 228, 140, 4, 212, 73, 93, 213, 82, 238, 244, 161, 73, 123, 48, 254, 122, 97, 89, 98, 31, 54, 14, 249, 77, 140, 4, 103, 23, 20, 34, 79, 213, 67, 41, 71, 131, 100, 230, 138, 236, 42, 130, 133, 159, 229, 55, 241, 67, 184, 0, 245, 143, 58, 62, 78, 112, 202, 190, 50, 130, 199, 109, 71, 75, 97, 75, 247, 230, 18, 93, 103, 138, 253, 131, 144, 215, 26, 158, 103, 156, 90, 215, 3, 17, 27, 67, 83, 124, 104, 125, 178, 43, 192, 163, 42, 77, 202, 232, 203, 212, 163, 81, 200, 218, 34, 60, 86, 192, 92, 218, 2, 107, 211, 89, 5, 38, 5, 37, 229, 72, 51, 52, 237, 116, 112, 190, 2, 199, 97, 112, 4, 198, 34, 54, 162, 246, 201, 153, 83, 136, 220, 40, 78, 47, 158, 87, 20, 225, 31, 14, 80, 59, 194, 121, 131, 29, 42, 94, 3, 26, 186, 128, 166, 66, 235, 188, 234, 99, 252, 41, 234, 185, 255, 164, 248, 240, 125, 79, 45, 90, 212, 188, 86, 205, 234, 142, 132, 106, 155, 163, 157, 73, 69, 71, 188, 200, 86, 208, 141, 49, 101, 72, 155, 59, 172, 64, 186, 128, 185, 215, 95, 187, 63, 215, 84, 244, 28, 109, 229, 7, 62, 90, 173, 172, 123, 17, 119, 33, 136, 203, 31, 134, 217, 0, 62, 40, 34, 43, 11, 166, 72, 252, 238, 179, 150, 225, 253, 79, 253, 45, 71, 155, 137, 93, 228, 184, 79, 129, 234, 39, 235, 178, 202, 132, 84, 55, 123, 97, 121, 237, 190, 99, 145, 45, 214, 78, 88, 43, 59, 173, 62, 216, 246, 51, 87, 57, 14, 125, 50, 148, 228, 185, 122, 224, 142, 61, 161, 103, 234, 121, 43, 91, 23, 70, 85, 129, 3, 105, 66, 42, 43, 66, 221, 241, 52, 38, 60, 131, 222, 143, 88, 64, 12, 229, 225, 214, 159, 54, 132, 106, 122, 246, 1, 50, 1, 69, 119, 27, 190, 230, 134, 6, 87, 134, 53, 234, 112, 8, 238, 221, 231, 10, 126, 25, 23, 254, 203, 72, 113, 203, 140, 122, 181, 109, 153, 254, 145, 140, 134, 16, 253, 113, 223, 140, 149, 180, 16, 166, 242, 45, 172, 134, 48, 107, 116, 4, 10, 37, 234, 89, 31, 190, 214, 5, 51, 70, 233, 79, 240, 217, 176, 232, 46, 120, 135, 253, 160, 243, 51, 164, 182, 106, 211, 23, 98, 30, 168, 179, 254, 73, 150, 6, 62, 211, 71, 62, 141, 16, 36, 148, 106, 235, 102, 106, 1, 15, 25, 191, 183, 44, 4, 204, 85, 140, 244, 102, 171, 208, 83, 130, 214, 227, 113, 150, 177, 114, 160, 96, 221, 240, 34, 195, 113, 2, 214, 41, 230, 181, 46, 8, 85, 49, 34, 250, 253, 10, 187, 133, 66, 187, 103, 231, 228, 1, 148, 159, 225, 105, 24, 218, 14, 33, 228, 118, 25, 202, 11, 200, 85, 1, 125, 198, 189, 76, 201, 26, 157, 157, 66, 252, 46, 220, 176, 236, 131, 244, 185, 35, 151, 233, 222, 239, 223, 160, 23, 229, 103, 185, 217, 62, 149, 93, 48, 27, 88, 250, 124, 64, 232, 221, 107, 173, 223, 208, 119, 145, 125, 30, 176, 173, 243, 26, 119, 8, 254, 184, 39, 2, 9, 11, 162, 138, 120, 53, 154, 64, 175, 197, 221, 87, 212, 118, 171, 77, 98, 209, 191, 6, 226, 133, 197, 241, 230, 167, 246, 252, 207, 191, 122, 205, 96, 220, 113, 175, 37, 101, 116, 94, 78, 144, 207, 100, 65, 32, 81, 244, 50, 199, 228, 53, 223, 205, 7, 26, 247, 5, 74, 125, 252, 60, 132, 77, 214, 54, 59, 118, 48, 31, 248, 252, 53, 149, 236, 6, 37, 79, 208, 218, 61, 250, 8, 42, 237, 131, 21, 46, 232, 11, 127, 58, 138, 54, 200, 251, 116, 100, 168, 29, 15, 180, 42, 78, 161, 171, 94, 64, 228, 222, 101, 67, 87, 113, 154, 21, 132, 193, 32, 184, 206, 29, 0, 8, 156, 244, 21, 221, 135, 137, 32, 138, 255, 38, 239, 128, 236, 150, 239, 254, 69, 6, 33, 209, 112, 84, 138, 80, 40, 37, 76, 166, 120, 112, 209, 161, 127, 241, 215, 186, 2, 239, 186, 40, 111, 120, 186, 40, 98, 22, 248, 255, 222, 105, 229, 234, 201, 248, 106, 249, 163, 33, 116, 9, 153, 184, 176, 0, 91, 82, 40, 31, 169, 213, 197, 23, 25, 197, 101, 189, 93, 27, 159, 82, 46, 178, 55, 97, 94, 130, 163, 174, 224, 218, 11, 123, 124, 221, 133, 68, 231, 241, 202, 1, 193, 127, 44, 177, 64, 13, 208, 215, 47, 180, 39, 169, 128, 231, 138, 54, 178, 163, 144, 8, 127, 146, 224, 153, 99, 207, 75, 68, 74, 53, 207, 67, 153, 205, 52, 41, 39, 77, 118, 150, 195, 8, 122, 113, 67, 242, 73, 252, 163, 35, 103, 246, 166, 112, 155, 103, 199, 210, 66, 226, 166, 231, 83, 10, 87, 48, 201, 184, 242, 28, 33, 201, 103, 172, 242, 156, 50, 79, 151, 216, 139, 28, 229, 8, 150, 132, 32, 115, 141, 212, 29, 247, 228, 155, 189, 10, 237, 240, 2, 218, 164, 81, 229, 109, 62, 72, 104, 39, 87, 17, 175, 247, 52, 245, 202, 36, 173, 141, 53, 252, 200, 190, 210, 207, 249, 29, 133, 71, 86, 41, 32, 245, 235, 162, 95, 209, 130, 106, 198, 191, 6, 172, 151, 114, 68, 176, 161, 114, 224, 215, 76, 25, 192, 189, 112, 131, 117, 98, 237, 86, 24, 225, 57, 33, 131, 108, 248, 101, 37, 92, 35, 193, 210, 10, 33, 43, 149, 55, 114, 138, 78, 250, 90, 176, 125, 209, 184, 4, 129, 219, 202, 12, 58, 108, 140, 88, 27, 21, 154, 142, 140, 132, 173, 138, 210, 226, 196, 140, 20, 121, 80, 33, 153, 158, 162, 49, 164, 121, 23, 144, 8, 123, 50, 95, 46, 141, 209, 206, 46, 13, 228, 112, 105, 103, 211, 248, 130, 0, 113, 87, 139, 85, 212, 151, 95, 221, 202, 123, 51, 156, 189, 217, 118, 221, 26, 79, 117, 151, 192, 83, 54, 2, 36, 126, 63, 225, 83, 208, 109, 168, 166, 190, 25, 27, 216, 152, 64, 158, 85, 141, 151, 41, 177, 181, 82, 219, 139, 23, 163, 4, 66, 1, 65, 116, 55, 238, 92, 165, 47, 169, 238, 146, 118, 237, 112, 242, 84, 36, 109, 90, 10, 248, 152, 37, 129, 184, 74, 123, 36, 186, 10, 97, 195, 114, 234, 189, 109, 223, 74, 221, 33, 247, 153, 96, 29, 93, 26, 246, 144, 254, 191, 0, 224, 204, 218, 38, 62, 165, 2, 181, 136, 81, 240, 117, 35, 75, 176, 190, 183, 65, 94, 57, 27, 113, 76, 100, 122, 226, 145, 158, 34, 77, 202, 175, 170, 13, 8, 107, 55, 249, 101, 89, 80, 110, 128, 182, 242, 12, 59, 202, 173, 17, 241, 130, 30, 141, 251, 213, 198, 194, 180, 135, 22, 1, 137, 246, 65, 242, 74, 240, 187, 49, 112, 130, 215, 185, 202, 7, 221, 254, 254, 67, 219, 140, 58, 86, 119, 159, 42, 46, 167, 115, 243, 167, 168, 20, 107, 60, 2, 39, 26, 166, 4, 177, 224, 230, 121, 177, 11, 5, 245, 57, 144, 72, 115, 142, 102, 154, 150, 142, 163, 18, 109, 145, 93, 6, 186, 169, 126, 3, 235, 241, 21, 160, 200, 23, 227, 55, 47, 162, 66, 129, 186, 107, 149, 6, 195, 68, 166, 109, 204, 206, 29, 190, 221, 226, 88, 24, 161, 77, 62, 68, 19, 246, 254, 242, 99, 114, 156, 21, 112, 107, 87, 131, 197, 92, 140, 12, 103, 219, 18, 115, 83, 81, 219, 219, 121, 240, 126, 164, 172, 19, 20, 90, 251, 2, 49, 76, 20, 84, 140, 113, 155, 246, 37, 87, 20, 187, 5, 73, 107, 7, 68, 46, 92, 101, 63, 202, 74, 236, 238, 181, 78, 128, 1, 124, 48, 216, 200, 228, 101, 90, 248, 77, 102, 73, 221, 187, 150, 198, 213, 1, 225, 217, 227, 97, 108, 245, 179, 51, 141, 39, 88, 96, 118, 15, 162, 67, 34, 193, 166, 241, 175, 46, 194, 99, 13, 241, 208, 37, 142, 151, 16, 228, 11, 240, 242, 154, 219, 49, 28, 247, 9, 75, 103, 89, 232, 54, 182, 92, 214, 13, 165, 199, 40, 39, 82, 158, 39, 193, 35, 41, 142, 32, 89, 33, 220, 254, 131, 157, 182, 217, 65, 2, 88, 75, 113, 246, 70, 133, 124, 132, 193, 157, 157, 16, 73, 169, 123, 58, 159, 2, 194, 54, 94, 200, 81, 253, 142, 229, 42, 128, 190, 15, 54, 186, 45, 219, 88, 117, 173, 98, 70, 182, 107, 183, 162, 41, 24, 35, 200, 52, 239, 72, 212, 120, 93, 87, 72, 27, 203, 153, 203, 191, 171, 239, 0, 34, 110, 110, 125, 59, 123, 167, 112, 41, 119, 17, 19, 38, 120, 20, 211, 189, 144, 195, 72, 160, 9, 244, 225, 139, 22, 185, 169, 237, 173, 118, 4, 172, 241, 161, 183, 213, 231, 30, 170, 44, 219, 217, 163, 242, 150, 214, 185, 187, 218, 143, 24, 78, 139, 88, 18, 104, 251, 25, 161, 244, 170, 23, 225, 155, 180, 27, 121, 196, 92, 242, 114, 252, 124, 15, 91, 237, 34, 5, 134, 181, 52, 124, 76, 67, 123, 190, 10, 229, 196, 137, 5, 57, 143, 114, 114, 149, 150, 128, 78, 255, 162, 247, 59, 148, 111, 12, 85, 130, 8, 150, 191, 2, 52, 41, 78, 52, 253, 79, 110, 195, 32, 54, 164, 185, 23, 47, 61, 233, 63, 253, 156, 170, 212, 194, 38, 239, 185, 112, 231, 13, 73, 231, 73, 248, 82, 141, 144, 26, 103, 253, 243, 250, 246, 175, 169, 229, 182, 60, 76, 60, 152, 235, 123, 112, 255, 80, 209, 174, 8, 213, 18, 218, 151, 204, 206, 242, 216, 71, 225, 90, 165, 172, 221, 183, 50, 2, 156, 175, 217, 147, 41, 183, 18, 99, 9, 38, 50, 52, 44, 184, 67, 201, 123, 81, 162, 145, 4, 20, 241, 206, 11, 32, 241, 43, 88, 84, 108, 128, 220, 232, 7, 153, 43, 76, 201, 218, 51, 97, 167, 22, 22, 36, 118, 148, 241, 245, 208, 177, 19, 153, 47, 224, 21, 43, 42, 174, 3, 221, 225, 219, 87, 176, 69, 186, 126, 249, 254, 246, 118, 225, 20, 251, 96, 12, 139, 240, 144, 154, 34, 61, 128, 46, 44, 13, 191, 80, 18, 4, 71, 178, 238, 11, 41, 36, 106, 85, 207, 132, 159, 226, 0, 22, 146, 76, 132, 220, 208, 253, 33, 143, 149, 199, 4, 222, 243, 225, 87, 55, 181, 16, 31, 28, 234, 247, 116, 61, 109, 89, 70, 2, 83, 7, 176, 152, 25, 196, 172, 122, 66, 146, 176, 26, 183, 74, 235, 84, 12, 18, 106, 187, 183, 186, 53, 133, 36, 85, 210, 173, 242, 142, 97, 1, 40, 62, 126, 167, 78, 13, 100, 24, 107, 104, 135, 242, 24, 25, 238, 183, 178, 148, 179, 221, 219, 244, 142, 237, 215, 213, 228, 88, 25, 198, 207, 39, 125, 1, 224, 1, 241, 33, 219, 114, 239, 202, 152, 153, 36, 162, 199, 217, 198, 245, 81, 108, 65, 179, 231, 85, 21, 224, 187, 66, 124, 27, 82, 98, 175, 162, 17, 91, 197, 158, 34, 188, 210, 186, 227, 254, 184, 233, 162, 222, 130, 229, 155, 51, 185, 162, 115, 119, 180, 251, 228, 150, 146, 157, 199, 106, 253, 146, 65, 62, 203, 190, 192, 119, 107, 112, 83, 119, 174, 139, 230, 46, 195, 172, 7, 75, 127, 142, 100, 112, 198, 102, 143, 245, 199, 193, 234, 251, 161, 241, 170, 116, 207, 236, 174, 44, 133, 207, 71, 104, 192, 163, 74, 213, 230, 93, 111, 21, 55, 29, 119, 71, 219, 147, 26, 83, 177, 91, 252, 96, 116, 87, 95, 185, 211, 11, 15, 49, 235, 124, 200, 233, 151, 251, 201, 165, 209, 24, 9, 185, 76, 101, 107, 116, 119, 15, 77, 55, 116, 180, 41, 98, 75, 114, 21, 190, 252, 223, 30, 206, 234, 209, 215, 247, 188, 43, 91, 89, 171, 81, 187, 175, 125, 5, 211, 5, 179, 228, 93, 119, 201, 26, 101, 205, 97, 204, 154, 145, 38, 9, 182, 250, 98, 95, 183, 19, 112, 47, 131, 167, 246, 50, 200, 93, 250, 211, 125, 72, 129, 114, 156, 101, 26, 37, 235, 45, 186, 204, 108, 212, 72, 5, 29, 217, 197, 54, 245, 235, 30, 22, 240, 18, 7, 91, 80, 168, 119, 166, 146, 121, 91, 240, 46, 53, 255, 162, 137, 82, 203, 140, 88, 19, 137, 80, 106, 80, 69, 197, 195, 7, 50, 150, 43, 181, 115, 226, 48, 120, 30, 187, 4, 191, 191, 37, 161, 214, 240, 35, 248, 225, 126, 179, 66, 77, 39, 208, 114, 183, 33, 46, 193, 133, 191, 245, 227, 79, 80, 75, 24, 77, 239, 69, 37, 98, 148, 124, 86, 70, 250, 216, 251, 195, 26, 18, 154, 145, 29, 153, 128, 126, 104, 130, 133, 125, 90, 67, 169, 42, 207, 8, 172, 60, 99, 77, 99, 17, 50, 56, 135, 181, 144, 26, 207, 237, 84, 70, 40, 224, 98, 198, 78, 141, 152, 180, 146, 130, 208, 20, 32, 167, 215, 141, 178, 166, 53, 27, 90, 181, 66, 126, 164, 93, 0, 61, 1, 160, 115, 180, 5, 205, 17, 40, 39, 2, 60, 58, 190, 23, 80, 42, 44, 12, 252, 221, 247, 64, 87, 11, 49, 109, 236, 166, 143, 20, 133, 67, 40, 176, 218, 151, 136, 206, 248, 171, 22, 167, 131, 173, 111, 128, 167, 179, 228, 177, 147, 220, 186, 109, 188, 114, 248, 20, 38, 234, 208, 229, 206, 124, 7, 32, 210, 174, 37, 17, 28, 220, 170, 236, 7, 129, 214, 139, 2, 42, 239, 164, 156, 74, 249, 194, 194, 209, 74, 251, 136, 158, 113, 212, 209, 59, 44, 132, 97, 126, 80, 46, 139, 62, 23, 102, 142, 6, 131, 87, 46, 53, 108, 137, 133, 123, 28, 51, 183, 193, 210, 41, 80, 20, 82, 125, 73, 214, 234, 82, 25, 157, 206, 164, 104, 166, 112, 65, 70, 140, 171, 131, 161, 56, 75, 126, 167, 93, 16, 219, 137, 39, 116, 99, 174, 110, 247, 187, 153, 126, 144, 72, 245, 29, 181, 213, 98, 237, 187, 67, 131, 139, 0, 238, 80, 161, 187, 224, 238, 124, 98, 36, 23, 213, 112, 77, 37, 88, 122, 6, 101, 83, 193, 82, 182, 135, 105, 218, 117, 104, 194, 66, 132, 57, 79, 159, 24, 239, 196, 62, 139, 254, 149, 77, 227, 183, 192, 100, 45, 8, 138, 168, 29, 94, 233, 230, 195, 85, 181, 202, 14, 222, 234, 245, 58, 40, 175, 13, 237, 222, 148, 182, 237, 168, 99, 148, 26, 59, 123, 12, 92, 94, 132, 96, 49, 187, 147, 22, 153, 154, 212, 16, 206, 245, 34, 40, 162, 55, 68, 200, 7, 39, 171, 75, 75, 193, 210, 242, 230, 205, 128, 22, 140, 113, 210, 208, 176, 214, 174, 153, 173, 213, 119, 8, 143, 203, 253, 137, 118, 57, 243, 113, 62, 100, 94, 144, 129, 56, 28, 195, 85, 240, 23, 176, 204, 250, 85, 139, 118, 94, 242, 151, 146, 247, 18, 197, 232, 249, 137, 11, 112, 34, 81, 180, 114, 239, 7, 254, 145, 26, 195, 4, 80, 30, 24, 59, 56, 144, 39, 105, 71, 250, 102, 238, 83, 136, 37, 59, 71, 186, 196, 104, 125, 145, 53, 185, 57, 232, 13, 210, 210, 171, 48, 159, 126, 131, 49, 57, 150, 76, 224, 253, 227, 166, 157, 74, 172, 127, 98, 221, 227, 194, 251, 213, 210, 73, 234, 183, 166, 131, 61, 3, 178, 86, 217, 58, 72, 153, 169, 54, 39, 149, 220, 216, 176, 123, 38, 149, 86, 4, 86, 126, 19, 231, 252, 121, 53, 114, 140, 244, 244, 228, 192, 250, 131, 184, 29, 14, 48, 110, 250, 82, 70, 112, 211, 20, 76, 33, 161, 156, 15, 104, 42, 234, 116, 137, 233, 254, 200, 83, 111, 99, 114, 151, 184, 199, 24, 152, 18, 133, 21, 247, 217, 224, 21, 178, 4, 103, 158, 182, 157, 71, 241, 130, 1, 240, 31, 29, 148, 167, 23, 58, 252, 210, 121, 112, 17, 229, 97, 170, 168, 26, 162, 139, 237, 39, 67, 139, 6, 168, 96, 66, 24, 76, 87, 16, 165, 179, 58, 104, 67, 170, 1, 163, 157, 126, 203, 106, 239, 216, 227, 66, 10, 104, 24, 24, 58, 247, 60, 188, 219, 125, 36, 239, 18, 175, 63, 249, 226, 154, 253, 211, 126, 76, 239, 12, 202, 123, 83, 101, 110, 113, 209, 46, 215, 34, 108, 112, 201, 98, 136, 67, 185, 39, 164, 12, 11, 60, 180, 109, 24, 118, 118, 255, 29, 58, 101, 176, 254, 114, 10, 167, 205, 51, 32, 85, 88, 139, 39, 65, 183, 198, 27, 164, 232, 91, 157, 151, 51, 252, 214, 158, 251, 108, 120, 54, 67, 112, 117, 123, 79, 221, 129, 67, 133, 196, 134, 27, 143, 150, 113, 242, 208, 125, 104, 127, 82, 249, 127, 255, 41, 224, 69, 157, 108, 176, 161, 45, 69, 244, 241, 253, 253, 17, 23, 223, 127, 195, 151, 25, 223, 115, 196, 33, 42, 254, 29, 12, 218, 87, 145, 30, 200, 167, 237, 86, 31, 93, 204, 9, 28, 121, 228, 28, 221, 66, 239, 152, 204, 62, 151, 46, 116, 1, 142, 226, 173, 143, 103, 41, 210, 158, 70, 242, 138, 70, 214, 126, 203, 127, 92, 93, 147, 119, 221, 1, 10, 171, 241, 36, 74, 104, 144, 246, 202, 205, 255, 9, 58, 167, 10, 8, 166, 99, 5, 157, 38, 168, 194, 102, 0, 45, 225, 169, 87, 156, 26, 223, 205, 23, 78, 85, 151, 110, 91, 51, 133, 16, 82, 84, 42, 89, 126, 141, 188, 191, 126, 133, 25, 116, 150, 18, 102, 191, 190, 23, 213, 39, 105, 123, 219, 135, 212, 7, 232, 62, 162, 132, 108, 126, 44, 237, 63, 253, 96, 157, 140, 82, 184, 2, 46, 187, 97, 143, 57, 66, 136, 73, 179, 179, 29, 228, 6, 80, 128, 150, 125, 62, 147, 16, 131, 80, 17, 38, 67, 173, 57, 28, 15, 166, 109, 4, 55, 164, 203, 107, 116, 105, 227, 161, 109, 51, 41, 108, 149, 77, 102, 58, 114, 72, 5, 58, 247, 152, 136, 140, 62, 91, 197, 227, 215, 183, 206, 244, 218, 94, 101, 254, 111, 157, 25, 14, 31, 108, 125, 75, 168, 236, 33, 189, 123, 232, 83, 153, 38, 54, 191, 2, 12, 36, 109, 157, 55, 235, 138, 129, 107, 203, 71, 187, 174, 119, 179, 175, 2, 166, 172, 177, 171, 73, 237, 124, 112, 39, 40, 129, 152, 92, 58, 201, 191, 159, 26, 216, 117, 181, 67, 116, 96, 62, 23, 74, 133, 198, 189, 166, 26, 57, 124, 160, 2, 39, 26, 156, 173, 50, 109, 169, 218, 178, 248, 6, 141, 117, 104, 84, 17, 164, 225, 179, 194, 178, 10, 81, 143, 187, 235, 10, 6, 124, 120, 15, 173, 138, 159, 233, 52, 31, 149, 46, 137, 180, 241, 248, 79, 67, 134, 75, 184, 11, 24, 93, 236, 102, 152, 229, 60, 238, 184, 211, 124, 222, 76, 45, 195, 164, 22, 34, 176, 253, 244, 199, 233, 58, 68, 110, 120, 101, 60, 207, 101, 122, 162, 132, 174, 48, 6, 182, 228, 172, 40, 72, 143, 49, 189, 163, 120, 77, 230, 254, 39, 244, 90, 186, 51, 208, 237, 237, 0, 214, 131, 11, 145, 5, 223, 118, 184, 33, 64, 57, 194, 78, 70, 210, 41, 63, 143, 74, 178, 62, 95, 96, 87, 178, 175, 57, 139, 1, 205, 129, 71, 100, 88, 248, 253, 179, 123, 165, 38, 114, 111, 152, 135, 244, 116, 129, 242, 73, 91, 141, 57, 207, 240, 178, 172, 62, 93, 219, 61, 65, 120, 203, 56, 33, 38, 214, 253, 222, 72, 111, 53, 80, 201, 200, 92, 37, 8, 54, 34, 134, 166, 210, 92, 210, 122, 160, 39, 215, 166, 193, 204, 68, 36, 123, 133, 193, 223, 131, 46, 17, 177, 116, 67, 243, 88, 30, 152, 216, 227, 148, 198, 36, 44, 129, 116, 178, 242, 210, 221, 149, 62, 255, 205, 181, 26, 220, 184, 4, 38, 111, 62, 172, 249, 156, 156, 13, 121, 233, 101, 234, 106, 26, 7, 9, 95, 195, 86, 199, 33, 174, 200, 245, 119, 253, 14, 255, 144, 70, 200, 155, 41, 81, 184, 20, 21, 4, 81, 225, 179, 70, 60, 11, 8, 120, 175, 142, 36, 192, 33, 106, 53, 234, 128, 79, 230, 188, 129, 122, 16, 255, 42, 110, 213, 64, 20, 223, 203, 41, 70, 185, 107, 29, 33, 150, 26, 11, 95, 246, 44, 94, 101, 108, 61, 113, 177, 32, 5, 74, 98, 52, 23, 102, 119, 40, 108, 87, 227, 187, 202, 92, 133, 131, 157, 255, 180, 225, 29, 173, 172, 242, 5, 200, 184, 155, 154, 72, 39, 141, 155, 17, 5, 140, 89, 196, 76, 130, 167, 146, 151, 252, 141, 195, 69, 214, 228, 22, 20, 114, 169, 168, 150, 201, 237, 114, 99, 138, 203, 84, 251, 6, 110, 8, 12, 217, 194, 45, 223, 182, 203, 135, 175, 150, 150, 62, 220, 80, 146, 28, 70, 142, 140, 147, 133, 141, 49, 204, 104, 69, 213, 44, 98, 163, 206, 156, 60, 250, 102, 33, 39, 103, 253, 69, 78, 61, 84, 206, 243, 137, 3, 66, 79, 151, 188, 106, 115, 3, 23, 162, 202, 151, 97, 226, 213, 170, 164, 38, 105, 115, 78, 241, 65, 152, 86, 254, 16, 139, 8, 108, 250, 6, 65, 92, 16, 170, 208, 247, 103, 124, 243, 208, 255, 231, 74, 241, 200, 104, 61, 63, 151, 180, 84, 110, 87, 225, 139, 89, 186, 154, 51, 179, 229, 169, 187, 182, 203, 77, 193, 174, 80, 3, 85, 192, 203, 102, 23, 55, 248, 32, 55, 186, 164, 224, 48, 182, 245, 73, 165, 204, 151, 26, 237, 84, 9, 174, 212, 127, 145, 178, 45, 53, 18, 47, 139, 69, 149, 142, 61, 79, 127, 14, 173, 116, 122, 254, 182, 176, 174, 23, 178, 25, 84, 61, 67, 171, 114, 234, 71, 162, 212, 41, 4, 19, 202, 98, 5, 177, 125, 199, 197, 153, 76, 46, 171, 69, 169, 127, 14, 125, 15, 140, 145, 200, 126, 17, 19, 74, 183, 213, 26, 6, 110, 162, 237, 22, 51, 192, 170, 191, 185, 33, 30, 191, 132, 211, 184, 52, 143, 168, 112, 192, 136, 101, 227, 33], - [242, 37, 217, 86, 3, 126, 63, 169, 139, 182, 202, 166, 153, 175, 198, 225, 137, 161, 40, 4, 27, 125, 191, 253, 49, 43, 168, 150, 253, 25, 184, 227, 237, 49, 105, 226, 252, 60, 41, 117, 198, 196, 19, 59, 165, 94, 83, 207, 116, 35, 52, 179, 35, 135, 240, 6, 16, 176, 139, 10, 106, 161, 15, 55, 28, 191, 124, 40, 143, 1, 19, 45, 90, 93, 206, 163, 86, 61, 63, 168, 79, 163, 38, 161, 112, 27, 227, 211, 185, 230, 176, 122, 101, 133, 9, 131, 41, 79, 66, 179, 109, 176, 141, 3, 31, 100, 208, 225, 108, 65, 210, 211, 145, 127, 235, 152, 104, 26, 178, 252, 215, 194, 117, 182, 239, 142, 188, 93, 34, 184, 79, 239, 181, 233, 7, 228, 185, 2, 53, 123, 248, 20, 204, 164, 220, 243, 23, 45, 30, 37, 78, 118, 7, 246, 19, 162, 47, 75, 91, 21, 176, 165, 250, 7, 207, 155, 10, 168, 129, 154, 197, 7, 12, 131, 239, 116, 209, 200, 204, 47, 186, 8, 29, 253, 60, 129, 251, 211, 139, 113, 90, 189, 189, 190, 130, 76, 4, 192, 65, 200, 107, 237, 248, 63, 29, 55, 102, 1, 176, 244, 102, 151, 141, 212, 255, 69, 56, 221, 68, 76, 210, 223, 143, 212, 219, 137, 214, 192, 17, 217, 195, 95, 176, 68, 236, 103, 193, 113, 192, 72, 179, 240, 185, 14, 28, 47, 131, 164, 146, 42, 153, 43, 29, 253, 145, 4, 85, 103, 219, 45, 65, 244, 206, 187, 101, 13, 209, 247, 218, 103, 95, 178, 159, 3, 62, 103, 45, 141, 168, 121, 77, 176, 171, 26, 174, 109, 36, 62, 12, 96, 251, 209, 129, 187, 139, 19, 106, 207, 122, 124, 186, 130, 214, 137, 138, 213, 126, 158, 48, 123, 95, 189, 81, 190, 102, 173, 245, 20, 250, 204, 109, 45, 242, 55, 201, 126, 68, 115, 126, 206, 145, 123, 106, 236, 167, 247, 2, 45, 202, 124, 78, 44, 214, 228, 66, 16, 90, 95, 75, 247, 172, 229, 229, 142, 30, 150, 39, 156, 221, 104, 122, 13, 55, 50, 39, 173, 253, 98, 170, 238, 33, 14, 244, 150, 137, 236, 133, 80, 99, 133, 48, 5, 255, 55, 20, 97, 62, 146, 203, 100, 247, 55, 16, 222, 94, 254, 73, 29, 235, 142, 144, 240, 175, 66, 148, 178, 143, 65, 128, 224, 172, 194, 27, 44, 162, 222, 104, 63, 165, 244, 255, 218, 179, 39, 165, 231, 240, 129, 48, 254, 37, 30, 54, 133, 186, 187, 234, 71, 97, 33, 203, 147, 121, 86, 102, 153, 64, 200, 22, 134, 76, 121, 207, 152, 164, 117, 241, 23, 54, 199, 6, 140, 7, 91, 113, 63, 23, 113, 43, 42, 112, 103, 72, 253, 164, 207, 161, 70, 149, 217, 7, 26, 102, 124, 18, 119, 129, 94, 137, 4, 251, 152, 229, 150, 119, 162, 149, 107, 18, 4, 166, 215, 59, 86, 104, 171, 208, 8, 185, 211, 254, 168, 22, 44, 230, 38, 173, 167, 152, 86, 1, 148, 223, 15, 58, 171, 49, 103, 2, 255, 52, 111, 119, 76, 200, 102, 252, 1, 46, 151, 12, 131, 32, 122, 67, 159, 199, 44, 160, 36, 158, 15, 121, 210, 51, 61, 69, 114, 27, 206, 198, 4, 184, 31, 197, 251, 99, 162, 99, 53, 173, 17, 54, 42, 157, 139, 89, 83, 198, 53, 235, 233, 83, 129, 141, 246, 187, 127, 21, 119, 55, 228, 206, 26, 104, 247, 216, 216, 168, 92, 43, 143, 143, 219, 3, 8, 114, 33, 41, 7, 121, 54, 30, 75, 20, 15, 48, 142, 71, 220, 42, 101, 38, 103, 219, 192, 5, 152, 133, 118, 69, 63, 36, 232, 240, 171, 77, 177, 109, 2, 9, 61, 58, 160, 234, 116, 46, 76, 105, 51, 101, 154, 5, 84, 225, 169, 210, 72, 44, 170, 41, 167, 220, 238, 188, 63, 128, 11, 175, 151, 52, 36, 142, 139, 208, 186, 212, 81, 113, 146, 174, 68, 7, 138, 235, 201, 112, 255, 137, 243, 236, 37, 247, 185, 252, 114, 110, 45, 1, 162, 95, 69, 34, 231, 144, 47, 49, 138, 12, 27, 178, 122, 200, 10, 150, 78, 151, 2, 47, 212, 202, 87, 243, 89, 255, 40, 194, 156, 255, 16, 28, 162, 155, 141, 238, 124, 243, 112, 78, 143, 81, 95, 214, 8, 204, 101, 146, 189, 210, 208, 71, 84, 223, 176, 80, 50, 3, 225, 50, 170, 124, 102, 122, 131, 141, 237, 164, 8, 145, 132, 120, 61, 46, 74, 48, 113, 178, 25, 243, 35, 168, 33, 130, 244, 197, 62, 92, 134, 162, 94, 147, 1, 140, 3, 160, 243, 77, 79, 205, 29, 228, 163, 147, 220, 245, 87, 49, 76, 57, 10, 203, 228, 188, 32, 253, 149, 19, 117, 166, 144, 8, 187, 9, 243, 126, 41, 178, 223, 43, 158, 59, 129, 121, 58, 80, 178, 201, 32, 195, 218, 182, 222, 167, 186, 136, 75, 26, 112, 171, 189, 186, 100, 120, 45, 20, 10, 96, 192, 69, 138, 17, 79, 83, 175, 62, 52, 137, 130, 246, 56, 21, 57, 160, 4, 88, 44, 55, 49, 237, 38, 89, 98, 171, 56, 22, 58, 188, 70, 200, 141, 105, 146, 55, 186, 79, 67, 123, 88, 210, 92, 200, 85, 60, 228, 38, 172, 212, 217, 49, 109, 99, 139, 213, 60, 40, 147, 191, 223, 147, 49, 220, 126, 245, 104, 85, 84, 35, 57, 178, 255, 32, 127, 14, 21, 133, 101, 218, 20, 116, 167, 78, 119, 66, 120, 188, 229, 48, 72, 105, 111, 81, 191, 132, 147, 139, 30, 238, 12, 183, 173, 132, 141, 206, 20, 97, 195, 180, 242, 141, 203, 81, 227, 250, 186, 55, 175, 227, 86, 215, 58, 233, 85, 104, 240, 67, 204, 24, 49, 42, 139, 255, 218, 231, 122, 94, 224, 215, 203, 94, 176, 26, 113, 40, 177, 3, 33, 241, 242, 171, 185, 213, 238, 61, 237, 150, 78, 207, 184, 153, 214, 181, 137, 146, 95, 90, 55, 83, 132, 22, 244, 177, 102, 126, 125, 159, 133, 194, 109, 172, 70, 99, 92, 100, 233, 16, 159, 217, 247, 189, 144, 57, 185, 235, 206, 70, 253, 24, 202, 152, 138, 187, 204, 198, 119, 134, 160, 96, 76, 2, 53, 188, 147, 192, 183, 60, 50, 7, 86, 127, 219, 184, 84, 238, 50, 228, 233, 220, 216, 58, 82, 219, 114, 75, 207, 85, 17, 3, 119, 74, 92, 255, 97, 28, 204, 141, 32, 160, 153, 58, 210, 68, 165, 81, 93, 172, 186, 189, 5, 194, 81, 230, 210, 146, 144, 53, 0, 29, 182, 148, 249, 153, 228, 226, 193, 83, 51, 232, 98, 113, 185, 168, 230, 87, 135, 3, 173, 63, 178, 68, 54, 56, 196, 104, 147, 183, 243, 215, 116, 156, 87, 33, 150, 45, 185, 65, 62, 104, 67, 151, 147, 157, 210, 78, 188, 87, 18, 34, 209, 98, 73, 236, 195, 210, 97, 20, 73, 56, 98, 74, 29, 198, 210, 83, 174, 236, 173, 211, 218, 19, 215, 143, 1, 4, 60, 205, 172, 242, 84, 27, 210, 239, 136, 180, 151, 225, 17, 239, 87, 172, 166, 34, 175, 188, 79, 217, 234, 186, 142, 62, 65, 88, 68, 100, 101, 171, 52, 123, 14, 113, 68, 63, 38, 178, 190, 60, 59, 236, 19, 142, 134, 143, 122, 197, 40, 90, 228, 29, 119, 169, 167, 83, 3, 82, 100, 215, 58, 47, 221, 176, 196, 119, 228, 194, 84, 56, 45, 161, 81, 39, 138, 234, 174, 149, 252, 137, 2, 192, 147, 242, 137, 64, 218, 187, 34, 200, 188, 195, 83, 16, 142, 127, 137, 42, 253, 238, 238, 216, 233, 121, 44, 222, 204, 124, 175, 17, 43, 17, 241, 127, 24, 201, 1, 74, 201, 24, 84, 63, 8, 217, 163, 27, 121, 92, 9, 98, 220, 200, 157, 191, 62, 139, 128, 189, 194, 3, 219, 20, 202, 253, 185, 68, 213, 89, 188, 18, 82, 147, 103, 209, 92, 105, 191, 97, 240, 127, 142, 233, 199, 227, 234, 214, 254, 12, 96, 99, 88, 104, 208, 139, 196, 180, 99, 104, 73, 0, 96, 124, 224, 69, 58, 94, 18, 208, 52, 132, 183, 206, 159, 174, 110, 245, 124, 17, 48, 25, 170, 24, 175, 179, 245, 117, 141, 178, 247, 27, 133, 99, 65, 150, 106, 118, 184, 113, 145, 157, 79, 237, 20, 204, 12, 70, 31, 173, 193, 138, 39, 1, 54, 188, 133, 130, 15, 249, 75, 98, 55, 184, 90, 158, 118, 210, 92, 156, 193, 40, 43, 144, 112, 66, 156, 2, 79, 104, 253, 167, 153, 37, 59, 232, 41, 10, 156, 13, 82, 134, 167, 69, 196, 229, 159, 120, 50, 165, 88, 65, 113, 30, 24, 52, 58, 33, 35, 203, 238, 222, 53, 99, 200, 96, 194, 212, 234, 31, 224, 202, 29, 117, 76, 215, 194, 100, 18, 40, 100, 123, 77, 125, 250, 166, 168, 222, 24, 8, 93, 76, 211, 74, 225, 201, 241, 139, 170, 96, 89, 123, 177, 154, 205, 168, 7, 187, 129, 90, 204, 88, 88, 139, 47, 133, 141, 171, 143, 22, 230, 114, 248, 182, 130, 47, 170, 191, 44, 211, 98, 253, 49, 112, 210, 79, 23, 229, 217, 177, 181, 41, 219, 238, 92, 221, 67, 196, 79, 11, 82, 46, 48, 32, 223, 42, 144, 154, 216, 165, 181, 73, 94, 14, 246, 234, 184, 187, 81, 226, 231, 44, 98, 179, 217, 17, 39, 138, 225, 163, 20, 78, 122, 191, 135, 235, 191, 106, 229, 144, 191, 143, 142, 191, 207, 115, 96, 150, 32, 80, 208, 131, 66, 64, 41, 165, 70, 89, 194, 77, 208, 57, 212, 212, 37, 155, 215, 17, 12, 67, 235, 66, 236, 222, 34, 219, 115, 39, 191, 162, 238, 222, 92, 255, 55, 136, 4, 43, 241, 67, 235, 185, 221, 27, 108, 244, 54, 135, 54, 121, 128, 238, 90, 248, 204, 151, 251, 90, 96, 241, 166, 108, 100, 173, 214, 92, 67, 248, 106, 112, 76, 232, 215, 53, 92, 71, 174, 185, 194, 36, 245, 38, 160, 93, 226, 220, 69, 66, 105, 236, 88, 182, 112, 202, 201, 92, 191, 115, 117, 155, 142, 75, 190, 108, 87, 246, 160, 55, 70, 60, 91, 72, 29, 149, 221, 236, 32, 1, 220, 216, 62, 34, 59, 97, 77, 177, 219, 240, 219, 51, 232, 16, 105, 26, 51, 186, 44, 45, 235, 66, 68, 20, 174, 12, 243, 107, 247, 231, 219, 181, 17, 184, 117, 149, 246, 145, 200, 221, 156, 155, 250, 43, 136, 211, 57, 174, 162, 100, 74, 206, 50, 30, 62, 133, 20, 75, 163, 75, 220, 143, 190, 133, 120, 111, 183, 2, 131, 87, 194, 113, 127, 203, 234, 32, 91, 30, 79, 24, 236, 82, 24, 125, 92, 190, 159, 168, 3, 198, 213, 211, 188, 162, 245, 19, 43, 17, 38, 126, 21, 104, 199, 247, 85, 13, 36, 196, 76, 249, 17, 2, 89, 252, 175, 10, 216, 214, 20, 94, 183, 83, 56, 58, 149, 197, 89, 29, 112, 9, 133, 90, 84, 34, 91, 152, 114, 113, 169, 111, 51, 168, 57, 96, 246, 224, 20, 42, 226, 63, 201, 40, 122, 183, 160, 175, 102, 70, 179, 120, 238, 116, 23, 88, 122, 44, 235, 89, 16, 235, 38, 98, 62, 37, 28, 80, 76, 142, 101, 158, 104, 244, 105, 20, 93, 89, 50, 92, 168, 11, 206, 228, 250, 197, 77, 208, 142, 214, 40, 154, 64, 181, 59, 230, 133, 190, 163, 69, 85, 76, 140, 186, 48, 212, 250, 64, 235, 162, 63, 28, 64, 169, 150, 130, 93, 57, 133, 118, 102, 228, 160, 166, 127, 131, 145, 206, 126, 240, 98, 226, 128, 181, 155, 61, 0, 99, 58, 139, 237, 73, 97, 215, 114, 229, 120, 65, 124, 178, 155, 236, 28, 150, 213, 211, 53, 5, 106, 57, 207, 103, 60, 249, 107, 100, 230, 96, 49, 113, 7, 250, 187, 219, 184, 180, 189, 245, 192, 33, 147, 31, 217, 86, 185, 91, 33, 19, 177, 189, 159, 146, 165, 222, 58, 102, 30, 93, 127, 219, 248, 23, 251, 38, 241, 97, 252, 196, 241, 87, 161, 249, 241, 89, 26, 142, 67, 179, 140, 50, 117, 4, 249, 220, 172, 50, 16, 122, 101, 223, 159, 186, 16, 238, 13, 177, 19, 229, 173, 181, 244, 152, 149, 212, 199, 81, 68, 236, 42, 167, 14, 163, 231, 64, 135, 185, 35, 159, 143, 24, 247, 3, 149, 13, 255, 237, 227, 23, 37, 98, 115, 123, 72, 251, 147, 130, 57, 24, 100, 97, 77, 43, 37, 163, 99, 22, 149, 143, 166, 199, 160, 155, 78, 73, 1, 197, 120, 174, 42, 6, 153, 38, 18, 240, 177, 28, 216, 237, 160, 138, 240, 194, 207, 89, 249, 207, 220, 18, 90, 222, 32, 128, 249, 4, 184, 36, 8, 30, 175, 167, 253, 100, 176, 25, 138, 134, 104, 10, 230, 95, 122, 35, 223, 125, 226, 210, 164, 254, 248, 219, 43, 114, 193, 123, 243, 101, 32, 150, 175, 185, 218, 182, 129, 158, 146, 168, 33, 154, 122, 250, 226, 113, 114, 108, 245, 105, 171, 233, 172, 24, 234, 255, 27, 230, 201, 91, 112, 216, 12, 122, 24, 89, 55, 20, 125, 84, 209, 33, 9, 158, 202, 16, 75, 48, 53, 229, 23, 217, 68, 30, 159, 138, 147, 21, 91, 155, 245, 103, 95, 176, 1, 166, 157, 1, 246, 21, 144, 222, 206, 34, 149, 104, 43, 1, 49, 92, 47, 163, 97, 171, 72, 67, 236, 198, 92, 54, 78, 247, 50, 61, 169, 105, 183, 229, 252, 55, 144, 64, 236, 200, 224, 51, 138, 65, 222, 183, 92, 201, 201, 133, 194, 211, 240, 36, 18, 155, 203, 51, 116, 0, 177, 39, 21, 219, 82, 33, 85, 85, 13, 240, 187, 22, 13, 180, 164, 178, 48, 181, 90, 102, 224, 91, 148, 66, 11, 115, 232, 112, 155, 43, 77, 59, 178, 57, 186, 227, 244, 18, 10, 99, 8, 184, 205, 13, 186, 119, 28, 255, 38, 5, 247, 35, 28, 238, 51, 207, 87, 135, 182, 138, 70, 89, 110, 40, 55, 239, 239, 83, 225, 239, 73, 9, 253, 179, 97, 231, 1, 145, 30, 80, 223, 123, 27, 127, 66, 106, 5, 40, 207, 235, 189, 34, 233, 238, 154, 228, 168, 171, 72, 243, 165, 215, 128, 28, 190, 168, 183, 64, 243, 169, 96, 175, 70, 202, 86, 243, 158, 228, 194, 189, 84, 139, 242, 79, 41, 141, 48, 197, 174, 197, 137, 247, 177, 134, 237, 5, 182, 93, 168, 61, 99, 236, 90, 119, 106, 37, 15, 134, 71, 182, 46, 49, 74, 214, 135, 197, 221, 204, 81, 240, 142, 75, 84, 105, 15, 141, 198, 232, 71, 22, 51, 106, 128, 91, 101, 47, 117, 163, 100, 254, 233, 77, 112, 184, 211, 164, 254, 174, 83, 195, 161, 141, 167, 209, 94, 134, 43, 12, 105, 67, 226, 232, 100, 134, 84, 185, 67, 227, 116, 232, 155, 157, 158, 101, 161, 52, 107, 23, 149, 24, 189, 230, 234, 118, 100, 106, 201, 53, 180, 233, 178, 174, 164, 73, 169, 209, 253, 90, 68, 4, 97, 95, 137, 206, 215, 33, 1, 21, 106, 32, 245, 158, 244, 8, 20, 240, 255, 252, 140, 81, 126, 84, 102, 8, 3, 117, 29, 169, 151, 249, 249, 92, 76, 19, 75, 225, 25, 168, 4, 84, 211, 169, 44, 70, 172, 136, 39, 232, 18, 192, 201, 21, 128, 116, 87, 11, 163, 185, 252, 185, 159, 211, 12, 42, 173, 14, 181, 48, 91, 79, 179, 202, 40, 27, 103, 167, 233, 97, 203, 98, 181, 79, 231, 149, 20, 74, 187, 164, 110, 159, 73, 62, 42, 73, 248, 136, 113, 43, 114, 30, 34, 212, 225, 195, 135, 219, 15, 26, 209, 98, 66, 188, 248, 176, 132, 187, 90, 11, 187, 94, 232, 136, 111, 152, 125, 50, 35, 122, 135, 54, 190, 158, 141, 185, 115, 14, 57, 186, 237, 142, 252, 224, 166, 252, 84, 127, 222, 74, 244, 36, 157, 93, 197, 237, 90, 242, 29, 3, 200, 208, 5, 136, 113, 207, 59, 119, 139, 173, 219, 27, 59, 105, 79, 70, 213, 120, 229, 71, 7, 213, 187, 103, 237, 171, 136, 199, 195, 64, 54, 71, 31, 17, 17, 34, 115, 128, 179, 59, 208, 131, 137, 194, 73, 4, 167, 229, 34, 132, 60, 162, 15, 140, 179, 233, 44, 109, 76, 213, 219, 245, 170, 108, 124, 33, 192, 54, 249, 219, 132, 54, 108, 140, 158, 127, 8, 12, 48, 154, 108, 225, 27, 37, 110, 64, 57, 252, 137, 80, 234, 239, 195, 204, 98, 238, 147, 50, 29, 95, 206, 140, 237, 223, 192, 57, 36, 184, 251, 141, 50, 95, 56, 217, 37, 102, 10, 46, 51, 158, 1, 142, 163, 48, 67, 71, 35, 50, 99, 131, 143, 250, 15, 163, 6, 202, 22, 119, 43, 48, 126, 37, 207, 43, 232, 6, 226, 92, 107, 157, 67, 191, 177, 10, 59, 223, 23, 50, 199, 111, 174, 188, 36, 64, 248, 11, 32, 85, 6, 113, 114, 62, 148, 74, 40, 65, 80, 205, 138, 217, 162, 239, 243, 97, 52, 221, 214, 25, 24, 50, 109, 69, 33, 117, 223, 245, 64, 36, 185, 85, 242, 111, 197, 193, 113, 240, 199, 222, 108, 22, 197, 130, 207, 105, 184, 6, 184, 16, 0, 124, 251, 101, 200, 41, 149, 245, 40, 113, 231, 125, 20, 241, 130, 89, 65, 158, 203, 165, 86, 236, 27, 215, 23, 238, 29, 250, 2, 32, 251, 19, 62, 166, 155, 141, 130, 215, 76, 171, 254, 14, 67, 237, 107, 99, 225, 23, 170, 146, 191, 231, 102, 242, 68, 56, 23, 37, 173, 59, 239, 23, 252, 115, 27, 59, 194, 242, 102, 151, 77, 45, 239, 173, 239, 245, 182, 54, 89, 81, 58, 32, 58, 234, 175, 20, 174, 4, 192, 18, 180, 99, 191, 146, 142, 225, 185, 135, 235, 151, 49, 72, 194, 15, 151, 145, 239, 61, 68, 118, 9, 87, 48, 161, 142, 213, 28, 204, 209, 36, 243, 231, 231, 117, 61, 237, 7, 75, 52, 131, 120, 192, 231, 140, 252, 24, 125, 154, 32, 144, 47, 209, 229, 141, 150, 99, 154, 219, 88, 119, 81, 185, 70, 104, 125, 177, 81, 251, 243, 219, 145, 253, 43, 221, 38, 135, 190, 29, 84, 98, 138, 226, 67, 222, 83, 84, 228, 170, 209, 207, 223, 151, 153, 232, 168, 175, 50, 60, 204, 168, 138, 67, 83, 63, 147, 114, 33, 2, 40, 223, 138, 114, 193, 72, 162, 123, 17, 23, 195, 60, 235, 29, 210, 230, 55, 1, 106, 239, 132, 173, 76, 109, 119, 9, 3, 69, 128, 189, 20, 99, 112, 229, 24, 80, 174, 199, 240, 43, 134, 68, 193, 25, 87, 37, 104, 185, 22, 121, 100, 208, 177, 52, 213, 229, 54, 153, 39, 247, 80, 179, 240, 146, 180, 242, 28, 249, 11, 226, 24, 85, 25, 84, 138, 46, 99, 195, 28, 11, 77, 113, 255, 177, 163, 122, 176, 49, 175, 138, 249, 20, 57, 242, 214, 222, 130, 142, 97, 196, 106, 120, 182, 119, 235, 235, 203, 138, 243, 31, 206, 176, 252, 142, 43, 109, 121, 98, 151, 132, 74, 118, 98, 100, 115, 218, 60, 29, 220, 13, 75, 12, 160, 57, 151, 92, 48, 183, 146, 129, 92, 11, 153, 182, 184, 192, 52, 171, 220, 82, 11, 228, 159, 164, 60, 33, 176, 82, 162, 91, 0, 67, 82, 31, 54, 18, 32, 97, 208, 53, 230, 59, 60, 195, 118, 11, 215, 117, 169, 110, 54, 221, 57, 70, 12, 68, 193, 138, 248, 98, 170, 211, 34, 218, 61, 81, 238, 44, 172, 95, 188, 26, 198, 131, 89, 35, 163, 138, 153, 166, 153, 196, 52, 15, 98, 222, 145, 151, 139, 77, 114, 132, 192, 41, 241, 53, 19, 226, 133, 136, 233, 164, 109, 92, 106, 24, 105, 124, 27, 84, 148, 32, 31, 111, 203, 74, 211, 184, 115, 130, 174, 121, 246, 215, 233, 192, 187, 41, 227, 50, 184, 175, 231, 117, 252, 199, 210, 46, 9, 93, 200, 45, 172, 81, 22, 222, 217, 237, 187, 254, 13, 119, 42, 127, 39, 31, 87, 189, 110, 142, 119, 245, 129, 110, 145, 190, 162, 160, 102, 113, 139, 52, 129, 230, 251, 14, 210, 81, 158, 185, 22, 245, 105, 235, 58, 102, 58, 64, 87, 149, 144, 146, 211, 160, 115, 10, 36, 206, 14, 153, 89, 229, 209, 160, 194, 218, 245, 136, 244, 41, 171, 46, 123, 102, 68, 40, 145, 247, 55, 28, 43, 204, 153, 249, 192, 185, 27, 218, 30, 22, 196, 99, 228, 106, 240, 114, 7, 244, 126, 14, 79, 107, 140, 2, 44, 70, 163, 57, 146, 24, 220, 57, 38, 143, 34, 150, 109, 80, 239, 5, 176, 81, 18, 229, 225, 184, 241, 155, 101, 174, 101, 221, 4, 47, 92, 69, 75, 89, 3, 66, 11, 37, 228, 69, 232, 26, 107, 55, 142, 177, 125, 215, 227, 241, 50, 34, 159, 182, 204, 30, 54, 144, 44, 199, 43, 50, 105, 140, 150, 192, 253, 157, 76, 81, 107, 77, 76, 197, 196, 201, 135, 43, 133, 51, 230, 106, 11, 93, 136, 41, 154, 17, 1, 63, 38, 203, 159, 43, 68, 173, 106, 168, 182, 32, 232, 29, 138, 112, 166, 125, 180, 15, 124, 140, 26, 54, 95, 8, 167, 207, 83, 75, 32, 144, 176, 42, 33, 197, 173, 29, 17, 121, 61, 72, 152, 201, 179, 65, 125, 198, 147, 235, 148, 250, 193, 49, 165, 2, 250, 83, 46, 134, 194, 176, 236, 109, 219, 160, 95, 165, 100, 190, 52, 143, 178, 15, 211, 162, 240, 67, 130, 153, 150, 159, 30, 167, 22, 73, 231, 62, 21, 152, 250, 75, 154, 72, 220, 247, 157, 114, 156, 211, 20, 168, 62, 163, 32, 149, 34, 68, 107, 83, 25, 127, 40, 48, 14, 74, 151, 109, 95, 85, 16, 226, 8, 166, 123, 31, 126, 50, 100, 222, 233, 76, 13, 151, 242, 181, 219, 142, 21, 0, 1, 179, 225, 88, 255, 113, 6, 123, 158, 109, 51, 241, 170, 94, 97, 5, 232, 47, 52, 13, 222, 103, 125, 132, 116, 239, 27, 179, 64, 89, 169, 203, 36, 64, 86, 202, 19, 10, 104, 62, 117, 160, 203, 56, 195, 219, 150, 200, 88, 107, 16, 77, 99, 239, 124, 221, 24, 71, 91, 243, 221, 250, 242, 23, 61, 208, 132, 10, 157, 24, 184, 101, 131, 47, 234, 228, 214, 237, 217, 153, 164, 1, 217, 209, 25, 32, 98, 145, 99, 88, 71, 14, 64, 214, 27, 197, 159, 9, 247, 3, 220, 107, 229, 173, 35, 140, 105, 41, 106, 75, 139, 40, 203, 119, 51, 39, 62, 110, 22, 123, 249, 187, 150, 181, 240, 32, 197, 188, 239, 65, 25, 14, 88, 137, 144, 26, 216, 82, 85, 104, 27, 63, 176, 204, 38, 31, 249, 242, 178, 197, 82, 214, 210, 148, 158, 108, 241, 170, 255, 104, 247, 73, 155, 21, 208, 200, 227, 252, 102, 56, 18, 44, 191, 101, 113, 154, 22, 44, 75, 151, 122, 11, 140, 237, 167, 0, 163, 44, 101, 191, 207, 43, 164, 192, 185, 137, 77, 103, 21, 9, 71, 236, 203, 153, 226, 155, 54, 114, 126, 86, 20, 224, 14, 92, 205, 115, 243, 12, 117, 175, 203, 61, 147, 243, 199, 29, 88, 186, 113, 228, 9, 218, 69, 65, 237, 227, 234, 124, 141, 242, 114, 191, 22, 219, 139, 178, 39, 185, 191, 114, 106, 183, 221, 18, 72, 132, 2, 148, 108, 72, 250, 239, 126, 18, 37, 113, 187, 250, 205, 81, 94, 112, 155, 199, 178, 177, 74, 205, 254, 138, 18, 28, 144, 246, 232, 19, 49, 232, 30, 72, 95, 141, 150, 226, 20, 10, 231, 195, 189, 162, 92, 144, 234, 134, 221, 220, 65, 255, 80, 66, 243, 126, 216, 161, 201, 153, 36, 102, 95, 114, 117, 15, 188, 8, 101, 141, 39, 147, 124, 29, 230, 112, 107, 165, 104, 36, 133, 146, 225, 170, 98, 172, 224, 140, 25, 95, 26, 3, 192, 54, 106, 152, 178, 19, 133, 241, 113, 40, 197, 109, 178, 138, 231, 147, 188, 32, 255, 221, 128, 2, 33, 191, 170, 181, 152, 93, 17, 178, 193, 161, 231, 28, 249, 121, 45, 135, 234, 133, 127, 9, 44, 143, 26, 27, 182, 161, 56, 174, 222, 44, 25, 133, 183, 128, 31, 254, 167, 98, 165, 75, 244, 251, 112, 76, 35, 71, 208, 68, 167, 60, 193, 82, 119, 113, 30, 17, 220, 205, 171, 181, 246, 215, 197, 63, 176, 41, 137, 108, 59, 237, 242, 27, 229, 158, 205, 104, 201, 174, 154, 46, 19, 182, 180, 54, 161, 212, 114, 113, 213, 15, 107, 66, 178, 153, 40, 139, 52, 214, 53, 84, 94, 230, 153, 12, 220, 116, 8, 152, 160, 56, 17, 86, 91, 175, 133, 248, 136, 49, 101, 42, 239, 97, 237, 7, 230, 230, 167, 29, 6, 185, 34, 90, 162, 83, 146, 127, 38, 193, 144, 112, 250, 91, 104, 153, 146, 145, 53, 161, 146, 27, 160, 200, 216, 255, 169, 187, 29, 120, 181, 138, 30, 153, 75, 74, 46, 251, 11, 127, 109, 8, 13, 99, 10, 81, 209, 107, 240, 192, 68, 155, 53, 30, 46, 198, 53, 238, 99, 183, 132, 188, 36, 168, 71, 27, 136, 211, 168, 144, 233, 139, 97, 235, 156, 129, 136, 137, 137, 116, 191, 169, 129, 86, 222, 242, 176, 118, 72, 70, 250, 73, 98, 137, 204, 16, 151, 103, 75, 100, 245, 16, 134, 12, 253, 209, 67, 79, 254, 87, 233, 100, 49, 67, 195, 220, 186, 24, 189, 253, 181, 185, 14, 232, 152, 8, 136, 186, 59, 182, 10, 86, 201, 36, 247, 119, 237, 212, 239, 189, 118, 14, 99, 31, 29, 72, 149, 64, 21, 249, 132, 230, 221, 157, 2, 46, 52, 107, 96, 6, 49, 47, 146, 100, 52, 170, 216, 194, 74, 32, 80, 125, 102, 228, 233, 182, 138, 150, 101, 42, 85, 143, 96, 212, 40, 49, 170, 121, 54, 37, 61, 168, 95, 133, 84, 89, 38, 101, 210, 123, 50, 133, 47, 198, 9, 13, 35, 18, 108, 218, 163, 164, 172, 180, 88, 183, 175, 193, 243, 238, 89, 157, 83, 20, 73, 143, 188, 233, 138, 49, 173, 21, 120, 140, 53, 133, 18, 168, 40, 113, 219, 238, 175, 99, 65, 234, 228, 35, 100, 116, 79, 6, 204, 135, 73, 115, 65, 255, 125, 39, 198, 211, 31, 104, 5, 52, 59, 117, 142, 144, 126, 15, 2, 112, 109, 221, 98, 5, 183, 62, 213, 242, 246, 251, 115, 47, 164, 247, 103, 205, 163, 140, 120, 32, 191, 170, 182, 219, 253, 156, 168, 253, 6, 36, 31, 169, 237, 58, 192, 240, 83, 225, 127, 244, 115, 57, 172, 33, 77, 118, 85, 237, 189, 25, 136, 3, 211, 71, 71, 97, 63, 69, 193, 164, 180, 162, 248, 92, 28, 200, 181, 122, 122, 83, 45, 113, 109, 188, 114, 80, 11, 56, 220, 177, 127, 0, 53, 132, 145, 201, 73, 113, 146, 6, 42, 138, 134, 179, 83, 193, 128, 160, 134, 36, 144, 156, 240, 150, 184, 19, 221, 20, 170, 4, 137, 129, 180, 199, 56, 107, 249, 253, 62, 113, 165, 192, 70, 61, 229, 118, 199, 124, 159, 4, 94, 176, 188, 162, 31, 70, 203, 142, 52, 84, 65, 88, 17, 141, 16, 217, 173, 152, 7, 10, 138, 59, 63, 88, 6, 54, 73, 91, 217, 192, 210, 57, 48, 180, 172, 112, 212, 38, 243, 56, 11, 221, 177, 36, 199, 31, 8, 120, 254, 216, 160, 244, 237, 86, 181, 235, 6, 56, 176, 236, 63, 227, 61, 115, 39, 86, 9, 20, 35, 170, 27, 22, 91, 100, 242, 213, 4, 76, 87, 239, 32, 226, 188, 170, 160, 42, 121, 65, 115, 49, 4, 202, 90, 37, 98, 207, 96, 230, 141, 93, 231, 15, 87, 130, 177, 115, 127, 165, 84, 5, 164, 174, 25, 129, 184, 31, 140, 1, 196, 18, 150, 91, 153, 171, 31, 124, 182, 103, 48, 132, 218, 114, 32, 237, 191, 246, 219, 115, 175, 155, 243, 148, 122, 105, 74, 117, 113, 221, 72, 208, 134, 238, 202, 82, 220, 148, 152, 213, 118, 197, 205, 5, 202, 3, 206, 108, 202, 222, 84, 109, 155, 174, 8, 141, 196, 210, 221, 150, 173, 153, 63, 156, 254, 233, 249, 47, 84, 252, 109, 220, 58, 60, 56, 35, 208, 198, 119, 45, 241, 235, 199, 239, 51, 125, 206, 90, 116, 227, 144, 104, 149, 132, 249, 214, 230, 167, 46, 209, 83, 176, 150, 144, 53, 239, 94, 115, 141, 130, 50, 64, 199, 255, 164, 65, 98, 50, 196, 14, 78, 133, 149, 123, 247, 82, 43, 151, 50, 127, 76, 69, 0, 155, 60, 225, 147, 224, 81, 28, 200, 207, 51, 51, 177, 239, 55, 40, 53, 241, 65, 188, 150, 216, 200, 36, 60, 29, 98, 24, 255, 11, 204, 226, 120, 25, 250, 55, 154, 77, 228, 145, 212, 51, 129, 152, 161, 67, 83, 82, 247, 7, 57, 194, 91, 169, 181, 52, 105, 40, 81, 154, 251, 191, 220, 178, 56, 55, 58, 188, 174, 175, 65, 224, 88, 74, 65, 235, 19, 55, 149, 179, 89, 42, 8, 122, 235, 182, 253, 13, 79, 208, 209, 191, 230, 197, 38, 16, 148, 177, 107, 198, 201, 110, 3, 183, 243, 216, 171, 168, 88, 166, 187, 103, 219, 157, 200, 69, 162, 157, 30, 29, 167, 115, 122, 154, 76, 67, 126, 117, 36, 139, 109, 27, 145, 142, 231, 24, 173, 182, 161, 203, 79, 3, 18, 186, 242, 9, 100, 1, 93, 194, 26, 215, 133, 147, 81, 161, 125, 23, 82, 27, 224, 170, 169, 164, 25, 229, 226, 61, 226, 175, 249, 219, 232, 204, 75, 122, 67, 159, 236, 224, 253, 227, 115, 58, 160, 148, 174, 7, 99, 92, 121, 125, 73, 101, 88, 227, 12, 7, 17, 119, 116, 10, 134, 121, 61, 74, 180, 168, 184, 220, 181, 87, 108, 63, 249, 205, 23, 191, 213, 127, 16, 203, 69, 55, 33, 5, 67, 51, 164, 49, 40, 15, 2, 4, 62, 44, 46, 178, 187, 192, 159, 24, 27, 68, 178, 170, 49, 254, 120, 22, 134, 25, 188, 71, 100, 46, 18, 115, 51, 88, 215, 15, 57, 57, 0, 62, 127, 145, 243, 65, 30, 149, 22, 198, 76, 18, 188, 56, 141, 76, 135, 80, 179, 64, 239, 84, 223, 137, 13, 165, 197, 35, 115, 82, 26, 152, 159, 61, 147, 232, 170, 135, 63, 119, 210, 218, 81, 93, 126, 180, 249, 24, 8, 63, 182, 18, 76, 244, 105, 255, 217, 32, 54, 83, 56, 177, 120, 61, 16, 123, 166, 238, 121, 41, 31, 196, 246, 203, 249, 179, 252, 224, 166, 135, 48, 16, 191, 183, 32, 82, 174, 77, 178, 155, 168, 233, 238, 136, 134, 213, 212, 111, 105, 23, 242, 208, 150, 178, 135, 10, 238, 233, 0, 213, 121, 176, 59, 102, 3, 196, 104, 253, 184, 194, 237, 243, 97, 191, 120, 211, 246, 236, 134, 1, 74, 80, 26, 219, 73, 155, 148, 175, 178, 4, 9, 52, 153, 7, 111, 229, 56, 98, 156, 247, 58, 250, 202, 141, 223, 126, 39, 15, 172, 126, 86, 206, 40, 200, 223, 30, 94, 59, 116, 240, 29, 133, 118, 243, 168, 154, 108, 231, 253, 160, 177, 132, 228, 120, 146, 99, 11, 106, 18, 69, 55, 201, 226, 250, 245, 83, 234, 61, 196, 174, 84, 184, 53, 216, 51, 42, 73, 146, 58, 11, 143, 233, 230, 200, 88, 166, 94, 161, 29, 25, 59, 209, 97, 175, 17, 10, 162, 34, 227, 226, 188, 206, 208, 226, 182, 132, 141, 26, 211, 192, 16, 124, 214, 230, 69, 68, 2, 223, 59, 245, 205, 172, 21, 191, 24, 204, 77, 51, 88, 147, 143, 168, 122, 64, 48, 124, 152, 251, 22, 37, 29, 191, 116, 64, 89, 99, 185, 163, 139, 239, 87, 108, 239, 248, 235, 118, 170, 25, 40, 238, 47, 131, 218, 249, 128, 14, 33, 105, 45, 255, 211, 226, 165, 97, 248, 243, 124, 101, 96, 8, 193, 41, 58, 63, 163, 122, 220, 51, 20, 140, 228, 70, 137, 191, 48, 167, 160, 0, 185, 50, 24, 195, 120, 137, 215, 189, 238, 88, 173, 27, 131, 22, 136, 107, 1, 37, 118, 163, 214, 195, 216, 244, 23, 55, 170, 48, 64, 113, 48, 84, 136, 171, 160, 228, 232, 98, 105, 229, 112, 104, 80, 45, 83, 66, 119, 9, 104, 200, 220, 67, 128, 113, 49, 228, 55, 129, 223, 225, 222, 104, 36, 109, 51, 215, 227, 198, 10, 171, 63, 73, 228, 87, 72, 8, 152, 224, 192, 3, 203, 66, 190, 248, 95, 168, 64, 53, 184, 212, 148, 230, 100, 25, 87, 14, 152, 124, 216, 69, 151, 113, 110, 66, 213, 211, 97, 168, 248, 208, 91, 194, 229, 162, 99, 142, 174, 224, 234, 191, 4, 164, 107, 231, 96, 141, 216, 117, 121, 215, 209, 184, 189, 251, 101, 134, 124, 166, 111, 129, 238, 17, 4, 41, 145, 121, 215, 93, 16, 232, 20, 161, 115, 155, 63, 85, 220, 252, 208, 29, 55, 211, 208, 46, 17, 217, 0, 171, 135, 32, 27, 65, 48, 61, 6, 248, 181, 38, 239, 234, 207, 245, 92, 179, 39, 61, 114, 141, 80, 98, 237, 61, 212, 241, 76, 112, 186, 226, 9, 193, 128, 252, 69, 232, 91, 235, 210, 168, 203, 144, 52, 143, 252, 27, 228, 100, 29, 70, 191, 197, 200, 180, 79, 58, 91, 95, 79, 79, 179, 39, 147, 224, 0, 236, 55, 17, 138, 24, 200, 43, 85, 113, 137, 111, 149, 180, 153, 243, 131, 55, 63, 171, 151, 183, 5, 31, 135, 145, 26, 49, 211, 122, 41, 157, 199, 24, 214, 191, 220, 3, 25, 226, 252, 84, 92, 15, 6, 199, 118, 50, 53, 0, 9, 243, 72, 145, 68, 246, 24, 103, 20, 185, 60, 54, 131, 118, 205, 221, 100, 111, 146, 78, 80, 97, 26, 246, 30, 171, 49, 221, 137, 142, 96, 36, 226, 149, 74, 251, 182, 105, 220, 196, 149, 144, 111, 134, 134, 170, 97, 35, 187, 213, 133, 63, 94, 9, 17, 1, 219, 244, 139, 134, 209, 206, 120, 89, 3, 186, 135, 241, 157, 100, 243, 80, 212, 228, 235, 112, 23, 233, 153, 80, 64, 184, 5, 165, 174, 9, 159, 219, 243, 72, 95, 140, 16, 93, 184, 65, 119, 113, 255, 230, 171, 222, 63, 89, 177, 4, 114, 166, 73, 199, 167, 80, 58, 199, 18, 32, 253, 192, 51, 169, 29, 186, 200, 196, 185, 83, 143, 162, 184, 250, 68, 69, 59, 87, 176, 106, 39, 235, 153, 78, 194, 250, 75, 16, 137, 55, 124, 54, 185, 253, 145, 222, 240, 59, 107, 24, 127, 36, 203, 211, 218, 7, 236, 37, 18, 67, 34, 223, 58, 207, 162, 128, 188, 200, 55, 10, 237, 244, 161, 194, 80, 133, 89, 146, 205, 199, 133, 129, 101, 216, 22, 161, 56, 250, 188, 235, 71, 21, 142, 184, 70, 241, 44, 85, 33, 0, 65, 43, 159, 194, 249, 80, 28, 131, 192, 160, 225, 148, 135, 239, 86, 61, 31, 246, 94, 238, 100, 143, 133, 132, 216, 35, 52, 62, 74, 215, 83, 253, 11, 89, 31, 191, 24, 114, 4, 41, 208, 133, 142, 174, 112, 156, 90, 232, 148, 186, 5, 212, 177, 150, 130, 91, 87, 52, 217, 24, 56, 14, 134, 150, 228, 4, 87, 16, 121, 221, 235, 171, 99, 193, 87, 1, 171, 222, 88, 33, 9, 86, 102, 252, 95, 149, 197, 241, 7, 172, 65, 14, 104, 119, 208, 141, 110, 198, 201, 31, 188, 93, 86, 195, 6, 236, 96, 81, 168, 128, 217, 238, 191, 168, 169, 4, 242, 7, 111, 139, 24, 176, 217, 74, 124, 188, 17, 65, 0, 11, 247, 101, 91, 49, 94, 109, 187, 67, 207, 163, 189, 100, 145, 34, 193, 242, 20, 242, 67, 224, 150, 59, 135, 134, 114, 159, 213, 97, 58, 95, 161, 135, 211, 43, 102, 198, 30, 187, 25, 220, 166, 222, 205, 8, 124, 111, 197, 233, 7, 206, 52, 21, 24, 199, 13, 251, 158, 133, 116, 150, 244, 217, 90, 222, 199, 228, 237, 242, 248, 16, 174, 218, 237, 69, 94, 217, 243, 31, 153, 70, 74, 97, 85, 1, 234, 117, 74, 20, 223, 15, 140, 214, 96, 221, 137, 117, 77, 16, 95, 211, 56, 46, 87, 111, 33, 243, 154, 199, 224, 27, 213, 232, 66, 67, 103, 100, 247, 75, 142, 180, 92, 125, 238, 67, 57, 105, 22, 61, 177, 104, 32, 34, 0, 196, 141, 230, 84, 115, 200, 1, 194, 26, 136, 141, 235, 43, 5, 208, 228, 239, 35, 240, 134, 135, 73, 8, 192, 221, 26, 5, 236, 29, 154, 10, 185, 14, 201, 231, 109, 124, 53, 164, 63, 38, 217, 149, 36, 193, 27, 251, 233, 88, 217, 242, 9, 105, 131, 32, 113, 206, 91, 67, 70, 140, 161, 120, 12, 121, 136, 76, 68, 216, 64, 204, 66, 180, 25, 92, 241, 45, 49, 244, 191, 183, 131, 214, 182, 64, 65, 186, 90, 210, 191, 36, 153, 4, 213, 130, 233, 249, 110, 224, 51, 60, 133, 32, 58, 115, 102, 219, 228, 127, 21, 46, 22, 105, 212, 135, 219, 7, 69, 252, 193, 253, 143, 241, 217, 47, 41, 250, 93, 76, 120, 244, 223, 7, 74, 244, 92, 186, 69, 101, 204, 134, 118, 62, 237, 44, 184, 22, 18, 163, 139, 199, 110, 238, 24, 190, 124, 240, 155, 175, 155, 215, 219, 227, 132, 128, 31, 240, 188, 104, 163, 213, 27, 72, 244, 178, 145, 65, 117, 208, 62, 140, 231, 122, 122, 189, 100, 148, 166, 23, 102, 74, 77, 158, 214, 107, 185, 71, 32, 115, 200, 14, 141, 238, 129, 18, 136, 200, 88, 95, 253, 210, 4, 63, 162, 12, 39, 127, 242, 104, 192, 195, 191, 64, 202, 210, 85, 2, 46, 120, 3, 84, 118, 185, 11, 70, 158, 80, 142, 143, 34, 16, 59, 140, 2, 175, 34, 64, 133, 82, 9, 149, 56, 220, 175, 202, 35, 166, 66, 101, 2, 180, 222, 190, 6, 43, 106, 131, 109, 97, 128, 60, 182, 59, 152, 179, 177, 134, 175, 30, 199, 175, 209, 133, 167, 253, 221, 161, 123, 114, 80, 140, 86, 69, 151, 109, 107, 133, 252, 104, 169, 244, 53, 0, 126, 2, 165, 154, 64, 78, 73, 229, 233, 206, 166, 17, 155, 142, 223, 68, 176, 8, 122, 46, 175, 87, 144, 222, 222, 189, 188, 67, 59, 193, 135, 81, 70, 254, 117, 125, 33, 89, 155, 251, 119, 140, 40, 196, 135, 150, 47, 99, 28, 200, 141, 93, 10, 107, 155, 68, 114, 211, 109, 217, 61, 101, 242, 56, 235, 39, 235, 218, 44, 177, 217, 132, 26, 41, 78, 89, 199, 223, 139, 159, 118, 97, 113, 246, 49, 245, 201, 12, 138, 43, 125, 123, 1, 152, 217, 64, 158, 150, 39, 166, 87, 65, 176, 235, 197, 199, 198, 189, 194, 249, 235, 178, 57, 71, 115, 231, 214, 31, 169, 5, 210, 197, 69, 84, 93, 90, 170, 24, 64, 164, 119, 138, 115, 35, 81, 203, 55, 216, 60, 49, 221, 96, 0, 218, 214, 152, 169, 94, 144, 155, 26, 41, 247, 244, 121, 57, 121, 2, 177, 113, 228, 26, 79, 231, 124, 20, 172, 81, 138, 123, 2, 79, 93, 104, 59, 119, 202, 25, 88, 36, 175, 119, 240, 114, 170, 68, 88, 146, 118, 184, 253, 211, 72, 81, 45, 37, 162, 93, 13, 183, 49, 193, 230, 145, 249, 138, 6, 238, 127, 200, 152, 19, 68, 152, 155, 60, 240, 198, 143, 35, 138, 213, 223, 190, 172, 4, 216, 98, 110, 8, 73, 6, 52, 142, 237, 209, 202, 9, 132, 244, 247, 22, 26, 39, 251, 219, 94, 148, 211, 2, 172, 226, 112, 232, 51, 186, 50, 179, 179, 106, 26, 101, 25, 57, 37, 107, 140, 94, 225, 110, 41, 100, 34, 127, 46, 61, 206, 48, 139, 240, 20, 154, 7, 234, 105, 146, 226, 118, 162, 87, 202, 42, 114, 74, 253, 240, 100, 2, 121, 33, 144, 245, 252, 79, 183, 21, 176, 155, 230, 66, 240, 218, 155, 32, 236, 100, 106, 136, 229, 219, 55, 28, 213, 2, 139, 150, 13, 42, 154, 190, 61, 140, 38, 148, 241, 102, 226, 105, 248, 30, 150, 172, 42, 176, 29, 96, 141, 164, 162, 168, 96, 227, 23, 71, 176, 153, 81, 169, 170, 157, 141, 91, 65, 12, 44, 141, 109, 175, 243, 184, 241, 229, 117, 237, 43, 164, 254, 106, 73, 227, 234, 135, 90, 223, 27, 128, 67, 97, 15, 97, 253, 137, 91, 9, 196, 81, 238, 166, 11, 63, 79, 182, 124, 161, 78, 118, 114, 47, 129, 132, 121, 48, 102, 249, 127, 219, 124, 242, 204, 131, 176, 54, 95, 5, 107, 102, 227, 187, 25, 168, 46, 186, 168, 3, 163, 254, 229, 236, 47, 1, 187, 210, 190, 74, 217, 49, 207, 251, 42, 127, 134, 124, 175, 176, 37, 77, 130, 226, 84, 33, 239, 250, 6, 195, 181, 57, 201, 30, 146, 108, 234, 22, 218, 190, 13, 201, 78, 127, 250, 2, 124, 27, 195, 229, 215, 130, 77, 82, 7, 174, 47, 218, 52, 236, 134, 6, 175, 214, 120, 246, 241, 55, 144, 107, 73, 229, 82, 143, 201, 245, 71, 58, 11, 15, 236, 220, 176, 148, 64, 113, 21, 222, 174, 40, 1, 69, 39, 203, 58, 83, 183, 180, 27, 128, 40, 214, 228, 111, 59, 204, 8, 152, 188, 87, 92, 160, 220, 225, 119, 173, 230, 153, 114, 130, 55, 122, 112, 210, 170, 0, 16, 175, 207, 245, 224, 219, 197, 194, 191, 150, 209, 84, 163, 112, 32, 204, 171, 24, 5, 30, 235, 20, 126, 115, 25, 30, 223, 51, 236, 214, 239, 106, 143, 128, 126, 104, 170, 67, 228, 148, 66, 114, 190, 43, 67, 42, 43, 7, 125, 173, 128, 68, 253, 182, 89, 91, 97, 226, 101, 51, 1, 52, 174, 247, 208, 17, 21, 146, 115, 184, 124, 236, 76, 58, 227, 60, 129, 66, 182, 112, 217, 117, 200, 140, 35, 143, 18, 243, 119, 165, 113, 17, 241, 100, 203, 237, 239, 232, 203, 171, 228, 39, 151, 187, 23, 95, 2, 185, 189, 8, 53, 129, 251, 31, 31, 172, 179, 118, 62, 145, 94, 145, 144, 19, 130, 202, 150, 23, 30, 47, 41, 54, 80, 221, 158, 109, 204, 83, 127, 51, 69, 154, 126, 106, 66, 160, 39, 180, 0, 209, 136, 156, 174, 150, 83, 190, 9, 60, 254, 94, 9, 169, 40, 73, 46, 187, 163, 93, 158, 70, 27, 174, 185, 20, 194, 200, 120, 52, 108, 229, 242, 29, 35, 197, 80, 130, 84, 0, 106, 8, 47, 88, 52, 169, 121, 56, 10, 73, 7, 220, 89, 213, 227, 13, 137, 213, 32, 166, 2, 170, 208, 24, 122, 182, 228, 193, 179, 152, 208, 49, 24, 162, 172, 192, 245, 82, 179, 28, 255, 148, 69, 123, 13, 157, 93, 124, 133, 247, 197, 155, 14, 20, 144, 50, 104, 56, 109, 92, 162, 203, 204, 232, 14, 43, 194, 103, 251, 250, 186, 95, 134, 35, 48, 46, 209, 65, 11, 57, 236, 147, 70, 218, 48, 111, 146, 238, 6, 224, 39, 133, 29, 247, 179, 11, 130, 178, 211, 38, 174, 236, 177, 51, 227, 183, 157, 152, 243, 113, 156, 34, 218, 138, 39, 142, 16, 40, 203, 66, 36, 135, 147, 86, 17, 192, 36, 204, 145, 170, 134, 140, 204, 183, 207, 25, 176, 85, 171, 124, 254, 239, 52, 226, 115, 178, 54, 231, 162, 244, 247, 23, 147, 154, 34, 246, 146, 144, 13, 128, 8, 164, 152, 179, 249, 31, 158, 238, 178, 203, 246, 149, 191, 153, 19, 50, 172, 210, 223, 92, 6, 173, 176, 10, 57, 83, 148, 7, 93, 168, 26, 194, 36, 132, 106, 66, 108, 103, 142, 37, 10, 40, 127, 46, 110, 16, 104, 203, 188, 39, 44, 4, 22, 238, 84, 136, 230, 189, 180, 141, 211, 197, 115, 167, 47, 93, 161, 65, 23, 157, 114, 151, 142, 93, 36, 8, 223, 71, 118, 77, 3, 49, 13, 89, 231, 231, 14, 6, 215, 12, 52, 232, 211, 226, 114, 56, 59, 18, 236, 192, 185, 202, 136, 21, 196, 236, 239, 12, 102, 69, 148, 182, 57, 79, 180, 213, 109, 66, 20, 90, 15, 71, 35, 171, 88, 211, 53, 194, 230, 113, 183, 128, 254, 72, 183, 57, 5, 104, 17, 11, 228, 114, 145, 148, 141, 75, 197, 148, 195, 118, 113, 175, 62, 47, 157, 17, 253, 28, 78, 18, 21, 112, 208, 218, 176, 11, 251, 245, 146, 132, 76, 220, 57, 205, 95, 241, 8, 106, 12, 41, 35, 249, 211, 172, 209, 64, 72, 122, 82, 100, 195, 236, 247, 201, 221, 232, 155, 93, 37, 203, 136, 217, 143, 98, 253, 207, 13, 194, 8, 239, 55, 24, 33, 255, 34, 113, 196, 22, 41, 227, 148, 168, 28, 252, 124, 52, 33, 92, 75, 56, 153, 218, 99, 50, 26, 18, 233, 120, 222, 205, 194, 67, 121, 214, 37, 81, 177, 190, 144, 229, 124, 210, 253, 214, 248, 25, 50, 162, 30, 177, 199, 177, 102, 213, 8, 196, 243, 153, 107, 205, 156, 22, 143, 43, 110, 21, 68, 132, 152, 134, 103, 94, 82, 211, 163, 231, 58, 87, 213, 248, 33, 95, 18, 190, 244, 10, 129, 110, 35, 230, 206, 67, 85, 86, 175, 112, 179, 2, 182, 59, 136, 188, 160, 136, 95, 216, 30, 76, 24, 94, 118, 16, 132, 192, 177, 35, 198, 142, 239, 131, 77, 230, 217, 172, 213, 97, 154, 68, 171, 57, 193, 140, 66, 0, 169, 235, 117, 16, 183, 65, 45, 175, 242, 242, 198, 22, 8, 143, 129, 175, 4, 114, 116, 2, 223, 159, 145, 175, 205, 175, 226, 209, 172, 109, 248, 205, 169, 187, 73, 104, 225, 204, 164, 224, 6, 130, 210, 103, 205, 11, 135, 205, 221, 86, 170, 127, 114, 180, 55, 17, 163, 135, 113, 41, 120, 178, 184, 77, 60, 223, 156, 234, 249, 135, 70, 13, 137, 191, 15, 79, 107, 219, 113, 57, 205, 144, 240, 95, 140, 40, 172, 25, 141, 24, 172, 15, 78, 222, 104, 154, 58, 65, 175, 29, 243, 1, 117, 7, 110, 164, 87, 237, 179, 151, 19, 181, 241, 202, 228, 165, 231, 178, 165, 11, 179, 216, 113, 210, 91, 28, 248, 16, 16, 113, 66, 165, 189, 50, 128, 85, 21, 93, 146, 25, 4, 204, 128, 44, 253, 10, 66, 149, 245, 29, 127, 83, 218, 14, 185, 227, 37, 237, 221, 251, 98, 231, 110, 184, 174, 35, 154, 156, 170, 47, 205, 47, 99, 159, 205, 57, 62, 185, 124, 75, 155, 27, 57, 69, 147, 87, 139, 105, 23, 249, 180, 68, 44, 225, 0, 254, 225, 141, 175, 71, 133, 70, 64, 93, 9, 196, 6, 174, 162, 23, 172, 164, 239, 37, 47, 93, 14, 25, 39, 84, 33, 100, 169, 21, 249, 67, 50, 7, 104, 114, 90, 250, 1, 193, 1, 159, 111, 176, 21, 202, 171, 230, 41, 174, 77, 242, 166, 215, 42, 245, 25, 124, 156, 246, 96, 133, 243, 224, 83, 42, 168, 5, 195, 177, 227, 95, 127, 255, 236, 85, 225, 4, 16, 49, 6, 120, 198, 206, 134, 91, 41, 66, 215, 193, 145, 40, 141, 7, 186, 32, 177, 215, 211, 137, 249, 179, 213, 174, 219, 40, 34, 225, 14, 21, 155, 53, 30, 243, 18, 138, 250, 78, 110, 237, 133, 83, 163, 94, 209, 142, 82, 99, 90, 151, 207, 237, 53, 103, 186, 147, 54, 225, 106, 84, 91, 240, 141, 8, 139, 86, 82, 123, 66, 213, 24, 177, 52, 57, 231, 175, 29, 239, 74, 174, 11, 102, 33, 28, 44, 39, 208, 39, 87, 136, 229, 3, 248, 7, 93, 91, 55, 76, 180, 134, 204, 20, 244, 108, 255, 56, 107, 161, 243, 221, 253, 45, 141, 226, 28, 16, 159, 217, 120, 236, 49, 16, 18, 214, 240, 185, 39, 17, 189, 121, 143, 218, 48, 42, 98, 9, 94, 212, 31, 155, 212, 214, 114, 63, 238, 189, 155, 128, 54, 239, 150, 14, 227, 208, 86, 191, 29, 20, 164, 138, 194, 1, 205, 78, 218, 119, 73, 107, 177, 8, 52, 130, 35, 203, 104, 247, 72, 102, 198, 192, 60, 24, 115, 57, 0, 43, 67, 198, 183, 69, 16, 242, 192, 192, 211, 9, 4, 20, 30, 115, 214, 187, 148, 5, 85, 168, 194, 77, 81, 43, 189, 36, 214, 199, 237, 213, 233, 46, 128, 212, 177, 18, 101, 245, 137, 116, 234, 116, 248, 117, 16, 240, 88, 122, 165, 66, 81, 110, 135, 199, 242, 30, 176, 205, 123, 41, 76, 20, 176, 41, 179, 88, 63, 40, 200, 229, 140, 160, 245, 227, 126, 91, 135, 161, 157, 198, 103, 245, 187, 103, 214, 230, 174, 8, 17, 118, 237, 57, 203, 44, 130, 47, 94, 152, 11, 167, 229, 24, 20, 216, 1, 27, 65, 40, 216, 40, 251, 75, 31, 37, 152, 73, 153, 121, 75, 213, 218, 176, 104, 169, 62, 229, 109, 17, 125, 157, 19, 85, 181, 59, 84, 94, 202, 137, 100, 196, 94, 196, 72, 56, 158, 254, 249, 4, 82, 193, 217, 51, 152, 197, 198, 197, 227, 136, 160, 63, 233, 167, 193, 188, 226, 103, 21, 85, 106, 192, 13, 84, 133, 224, 254, 127, 124, 58, 12, 128, 187, 189, 247, 55, 117, 112, 135, 172, 69, 221, 230, 13, 122, 56, 246, 25, 38, 77, 223, 228, 241, 250, 111, 219, 186, 218, 234, 75, 198, 142, 5, 38, 244, 103, 87, 170, 173, 175, 150, 110, 178, 45, 250, 254, 27, 161, 14, 44, 227, 170, 127, 77, 150, 39, 94, 0, 193, 1, 177, 148, 99, 250, 68, 227, 58, 183, 129, 121, 106, 34, 239, 227, 172, 163, 185, 147, 254, 59, 33, 87, 96, 205, 205, 111, 150, 190, 59, 246, 253, 168, 193, 21, 254, 177, 0, 251, 29, 152, 40, 141, 152, 118, 100, 204, 55, 159, 194, 118, 42, 65, 213, 1, 194, 43, 139, 30, 227, 9, 109, 97, 131, 101, 252, 173, 128, 22, 233, 154, 29, 41, 250, 172, 4, 106, 63, 217, 148, 115, 142, 217, 104, 25, 167, 12, 22, 81, 11, 102, 217, 92, 170, 95, 244, 114, 205, 121, 140, 131, 34, 67, 34, 102, 122, 164, 193, 122, 113, 69, 57, 235, 80, 172, 134, 239, 102, 74, 109, 111, 57, 38, 160, 34, 159, 77, 211, 251, 201, 77, 212, 168, 83, 85, 159, 17, 88, 88, 46, 69, 47, 138, 21, 212, 151, 242, 180, 206, 207, 205, 61, 234, 159, 143, 234, 194, 171, 194, 64, 145, 197, 199, 210, 130, 228, 209, 166, 58, 82, 185, 77, 167, 36, 204, 107, 33, 179, 80, 27, 160, 67, 160, 204, 36, 64, 233, 3, 114, 198, 118, 61, 191, 110, 76, 30, 196, 11, 250, 139, 136, 30, 141, 204, 175, 164, 83, 120, 7, 56, 38, 93, 198, 243, 247, 115, 37, 52, 200, 49, 123, 144, 34, 166, 26, 70, 54, 15, 211, 22, 98, 90, 146, 60, 100, 31, 140, 172, 54, 195, 47, 54, 14, 227, 143, 100, 136, 51, 148, 237, 44, 185, 223, 128, 182, 9, 81, 32, 225, 73, 130, 84, 46, 46, 88, 159, 241, 191, 235, 96, 235, 37, 194, 33, 204, 155, 157, 202, 33, 135, 31, 171, 125, 44, 105, 244, 237, 50, 175, 83, 243, 127, 131, 144, 76, 187, 3, 91, 151, 98, 131, 24, 224, 74, 229, 221, 126, 12, 243, 231, 56, 175, 204, 40, 27, 36, 127, 165, 69, 219, 150, 19, 223, 138, 87, 121, 252, 82, 216, 185, 145, 243, 70, 35, 16, 13, 196, 100, 156, 128, 230, 29, 117, 239, 132, 14, 211, 148, 142, 19, 179, 181, 109, 255, 166, 1, 216, 127, 230, 236, 36, 117, 98, 225, 164, 120, 0, 29, 228, 129, 153, 205, 209, 14, 113, 196, 228, 208, 154, 156, 30, 184, 156, 62, 3, 169, 95, 125, 58, 246, 194, 171, 51, 6, 62, 112, 106, 30, 63, 240, 108, 153, 144, 201, 244, 89, 97, 247, 118, 32, 227, 115, 8, 251, 13, 181, 141, 48, 96, 118, 118, 71, 49, 72, 134, 113, 38, 160, 135, 138, 38, 171, 98, 237, 106, 115, 73, 43, 62, 177, 152, 115, 84, 51, 121, 32, 129, 22, 47, 73, 236, 172, 130, 239, 128, 154, 114, 177, 71, 136, 97, 36, 208, 177, 221, 135, 51, 234, 245, 131, 152, 208, 103, 95, 223, 204, 178, 182, 16, 30, 254, 200, 139, 18, 243, 30, 131, 180, 33, 67, 220, 77, 4, 72, 52, 18, 126, 218, 143, 103, 218, 243, 128, 130, 40, 34, 118, 58, 181, 2, 251, 31, 166, 162, 111, 97, 189, 234, 202, 62, 71, 171, 238, 53, 96, 202, 62, 144, 207, 249, 241, 221, 180, 216, 127, 96, 104, 70, 165, 54, 84, 129, 16, 119, 108, 88, 23, 123, 187, 201, 217, 10, 99, 113, 176, 245, 23, 251, 205, 254, 90, 34, 199, 242, 142, 142, 72, 139, 108, 77, 170, 224, 50, 171, 75, 203, 140, 65, 74, 172, 206, 63, 93, 246, 143, 92, 135, 246, 249, 196, 35, 61, 202, 63, 30, 130, 70, 149, 77, 66, 112, 7, 110, 127, 221, 88, 16, 125, 198, 1, 194, 189, 78, 39, 150, 189, 62, 129, 32, 199, 6, 3, 60, 207, 135, 108, 3, 129, 122, 135, 137, 253, 27, 151, 47, 163, 229, 0, 243, 242, 65, 66, 218, 243, 61, 46, 253, 83, 47, 45, 245, 92, 24, 239, 250, 191, 160, 47, 197, 169, 74, 160, 134, 85, 158, 145, 130, 99, 243, 244, 145, 202, 114, 88, 213, 222, 89, 123, 108, 189, 178, 239, 175, 126, 232, 215, 227, 216, 29, 98, 35, 63, 92, 248, 203, 242, 25, 3, 5, 58, 32, 216, 197, 43, 126, 103, 175, 14, 209, 12, 52, 199, 117, 52, 188, 188, 41, 126, 182, 17, 23, 248, 41, 63, 160, 248, 30, 128, 209, 122, 35, 230, 70, 44, 218, 4, 211, 38, 171, 158, 183, 40, 45, 14, 32, 17, 22, 26, 145, 146, 49, 137, 143, 75, 98, 85, 131, 173, 169, 140, 96, 129, 214, 38, 224, 201, 6, 199, 231, 87, 14, 99, 117, 19, 56, 215, 255, 146, 143, 71, 72, 236, 118, 148, 53, 109, 180, 226, 67, 236, 69, 132, 139, 238, 236, 18, 148, 218, 140, 204, 73, 61, 88, 83, 140, 40, 123, 252, 249, 157, 74, 245, 190, 248, 121, 57, 214, 32, 41, 190, 205, 93, 125, 191, 83, 79, 65, 53, 35, 36, 198, 114, 100, 54, 139, 10, 105, 160, 126, 51, 194, 17, 27, 43, 217, 13, 16, 121, 89, 102, 87, 52, 131, 212, 168, 225, 181, 192, 244, 34, 224, 144, 123, 55, 4, 117, 245, 8, 90, 223, 250, 60, 6, 242, 78, 254, 66, 195, 98, 132, 148, 107, 183, 229, 204, 188, 199, 220, 209, 224, 75, 66, 0, 61, 23, 89, 194, 17, 18, 129, 174, 9, 64, 243, 1, 192, 140, 125, 140, 69, 176, 156, 57, 17, 92, 55, 126, 48, 153, 198, 212, 232, 177, 29, 87, 69, 137, 232, 32, 217, 170, 41, 33, 237, 180, 150, 15, 84, 252, 169, 124, 115, 173, 124, 98, 116, 72, 255, 241, 108, 72, 95, 129, 215, 155, 73, 6, 240, 215, 20, 247, 81, 138, 214, 206, 10, 7, 98, 100, 8, 57, 186, 5, 169, 14, 50, 69, 108, 211, 87, 4, 160, 138, 30, 174, 117, 115, 87, 10, 205, 101, 236, 250, 249, 30, 243, 251, 195, 196, 38, 218, 36, 39, 136, 224, 149, 17, 67, 32, 35, 3, 59, 53, 157, 140, 114, 66, 160, 70, 145, 254, 93, 13, 39, 246, 133, 102, 49, 70, 25, 25, 47, 77, 76, 131, 239, 43, 224, 244, 253, 241, 131, 123, 99, 19, 84, 110, 163, 201, 56, 238, 235, 5, 17, 99, 14, 6, 64, 242, 110, 110, 36, 49, 102, 244, 241, 214, 83, 175, 229, 118, 121, 127, 112, 174, 3, 200, 205, 186, 32, 4, 185, 219, 219, 104, 138, 67, 239, 128, 180, 111, 21, 61, 21, 222, 207, 151, 10, 106, 121, 179, 251, 203, 166, 203, 246, 93, 50, 77, 66, 220, 240, 132, 134, 16, 192, 46, 242, 81, 235, 86, 91, 110, 24, 193, 222, 114, 167, 67, 145, 119, 228, 52, 218, 247, 114, 6, 70, 100, 82, 182, 136, 239, 146, 48, 5, 174, 234, 216, 220, 21, 233, 252, 236, 53, 227, 51, 93, 147, 83, 28, 23, 131, 3, 67, 92, 154, 94, 82, 86, 125, 57, 185, 228, 2, 131, 214, 99, 154, 230, 43, 172, 141, 146, 79, 35, 0, 24, 101, 22, 224, 156, 190, 212, 88, 152, 44, 150, 163, 125, 103, 227, 138, 141, 199, 102, 156, 212, 51, 150, 64, 158, 156, 4, 35, 153, 117, 58, 12, 71, 237, 84, 126, 178, 241, 149, 50, 44, 133, 163, 14, 86, 106, 99, 234, 206, 68, 151, 135, 81, 103, 228, 187, 245, 80, 112, 134, 137, 91, 98, 160, 14, 148, 38, 95, 47, 206, 62, 179, 110, 79, 49, 191, 24, 229, 197, 212, 109, 136, 1, 221, 180, 80, 197, 234, 117, 210, 200, 246, 207, 201, 114, 233, 53, 146, 126, 131, 169, 91, 98, 241, 54, 206, 176, 254, 47, 61, 215, 153, 144, 236, 244, 148, 131, 66, 3, 39, 159, 83, 141, 225, 146, 117, 237, 50, 125, 156, 123, 150, 64, 18, 9, 71, 221, 204, 49, 81, 39, 198, 67, 107, 198, 148, 31, 240, 145, 132, 249, 94, 96, 167, 45, 102, 126, 82, 92, 228, 8, 112, 174, 41, 101, 73, 24, 126, 209, 51, 99, 29, 208, 56, 99, 88, 21, 216, 137, 119, 113, 95, 40, 108, 86, 68, 165, 138, 10, 130, 104, 243, 173, 150, 55, 254, 236, 135, 34, 77, 138, 171, 120, 138, 6, 250, 186, 66, 87, 42, 95, 158, 112, 110, 168, 158, 111, 40, 237, 222, 224, 73, 193, 249, 211, 13, 101, 45, 176, 84, 241, 180, 48, 0, 21, 15, 160, 3, 105, 7, 189, 24, 218, 120, 84, 198, 133, 69, 197, 198, 190, 163, 225, 72, 113, 59, 186, 51, 207, 240, 52, 154, 239, 40, 5, 93, 36, 219, 51, 220, 154, 205, 134, 64, 49, 20, 73, 215, 20, 206, 125, 54, 241, 30, 138, 157, 191, 13, 116, 150, 252, 12, 16, 176, 114, 187, 37, 91, 84, 15, 155, 128, 204, 16, 220, 148, 26, 67, 102, 54, 96], - [49, 87, 107, 222, 47, 13, 115, 71, 204, 178, 94, 114, 155, 244, 39, 146, 131, 124, 13, 199, 53, 99, 171, 39, 36, 6, 64, 245, 179, 40, 97, 28, 108, 121, 12, 249, 155, 214, 179, 63, 154, 165, 183, 175, 166, 135, 110, 99, 68, 126, 236, 205, 88, 132, 95, 242, 127, 244, 45, 194, 225, 86, 230, 49, 175, 108, 226, 248, 231, 98, 57, 246, 85, 105, 7, 77, 26, 242, 109, 65, 194, 162, 18, 53, 42, 28, 123, 196, 236, 230, 219, 176, 196, 108, 175, 176, 90, 216, 13, 212, 214, 122, 182, 241, 139, 204, 150, 118, 232, 40, 215, 250, 188, 91, 60, 65, 188, 70, 200, 38, 97, 182, 5, 7, 149, 53, 41, 42, 2, 18, 152, 104, 208, 51, 225, 124, 215, 5, 33, 227, 144, 230, 114, 13, 139, 144, 38, 75, 138, 45, 100, 134, 216, 103, 226, 152, 205, 183, 78, 204, 148, 191, 82, 198, 177, 72, 202, 168, 25, 160, 215, 46, 150, 55, 22, 162, 5, 1, 16, 84, 87, 223, 187, 197, 248, 11, 148, 212, 76, 15, 40, 6, 83, 48, 3, 214, 179, 128, 82, 182, 197, 153, 100, 166, 221, 74, 141, 105, 221, 115, 142, 210, 191, 238, 132, 85, 101, 34, 97, 211, 149, 233, 149, 84, 202, 63, 226, 98, 21, 220, 222, 192, 75, 1, 245, 246, 148, 225, 157, 53, 131, 27, 110, 136, 39, 248, 113, 84, 80, 108, 131, 48, 218, 24, 221, 224, 64, 132, 193, 215, 85, 170, 74, 22, 70, 202, 44, 49, 93, 133, 230, 84, 22, 133, 244, 84, 140, 95, 252, 112, 27, 135, 164, 166, 95, 174, 111, 131, 48, 28, 61, 28, 82, 35, 80, 160, 101, 52, 47, 21, 90, 118, 99, 154, 203, 209, 217, 43, 236, 72, 130, 203, 80, 139, 116, 141, 82, 224, 12, 126, 63, 175, 12, 182, 140, 133, 111, 240, 142, 102, 178, 227, 140, 103, 48, 78, 208, 130, 102, 27, 211, 190, 77, 53, 121, 126, 191, 45, 49, 5, 229, 200, 193, 161, 106, 151, 6, 143, 133, 2, 16, 241, 70, 134, 33, 205, 124, 169, 182, 45, 146, 165, 15, 70, 55, 246, 235, 148, 134, 220, 16, 191, 162, 249, 250, 126, 216, 75, 59, 63, 170, 46, 241, 184, 186, 240, 173, 156, 13, 233, 234, 48, 198, 219, 81, 147, 183, 110, 37, 70, 165, 125, 179, 138, 114, 112, 253, 76, 154, 97, 174, 148, 156, 92, 96, 176, 91, 100, 231, 167, 199, 27, 253, 78, 58, 116, 151, 228, 24, 167, 167, 86, 190, 69, 230, 185, 11, 183, 225, 216, 138, 247, 20, 193, 76, 80, 139, 63, 238, 148, 92, 134, 16, 131, 138, 215, 59, 65, 226, 134, 174, 31, 200, 37, 195, 108, 86, 68, 73, 26, 238, 247, 192, 61, 192, 218, 241, 91, 182, 55, 66, 98, 31, 16, 200, 128, 224, 253, 158, 66, 133, 123, 229, 207, 131, 80, 118, 223, 108, 5, 136, 251, 248, 144, 35, 249, 113, 120, 37, 48, 193, 10, 74, 61, 111, 215, 243, 172, 173, 98, 5, 200, 189, 21, 58, 200, 49, 143, 55, 61, 113, 181, 239, 21, 221, 120, 9, 22, 159, 35, 100, 10, 127, 10, 27, 119, 22, 227, 23, 1, 43, 15, 78, 31, 220, 21, 188, 129, 158, 33, 160, 177, 241, 218, 252, 56, 86, 169, 191, 105, 4, 126, 217, 194, 37, 82, 156, 84, 96, 174, 6, 107, 49, 138, 50, 146, 56, 177, 160, 202, 185, 77, 29, 9, 55, 149, 57, 253, 184, 161, 157, 231, 207, 1, 184, 144, 23, 166, 188, 242, 130, 4, 70, 190, 10, 62, 187, 128, 149, 173, 77, 102, 236, 176, 110, 10, 217, 63, 203, 255, 206, 83, 43, 45, 239, 16, 206, 158, 3, 207, 178, 235, 247, 183, 35, 11, 36, 16, 23, 242, 35, 112, 199, 205, 171, 26, 20, 39, 18, 52, 139, 219, 145, 182, 52, 39, 225, 61, 65, 144, 85, 249, 137, 223, 39, 170, 17, 95, 197, 33, 25, 46, 105, 186, 206, 7, 141, 78, 169, 111, 208, 48, 156, 199, 140, 113, 139, 202, 73, 192, 207, 16, 94, 221, 175, 164, 94, 117, 39, 238, 221, 179, 187, 107, 202, 64, 98, 184, 230, 245, 249, 9, 89, 82, 207, 63, 57, 147, 149, 180, 24, 140, 248, 124, 239, 83, 88, 188, 102, 252, 0, 20, 95, 33, 33, 62, 96, 156, 194, 73, 78, 147, 1, 231, 151, 144, 163, 184, 62, 236, 52, 240, 113, 242, 242, 3, 245, 179, 220, 216, 240, 181, 156, 167, 203, 87, 173, 33, 4, 88, 1, 198, 34, 136, 57, 139, 26, 128, 113, 222, 227, 199, 98, 192, 139, 20, 178, 184, 93, 68, 190, 75, 41, 108, 169, 212, 10, 44, 43, 143, 108, 17, 90, 117, 6, 249, 16, 216, 15, 203, 94, 195, 156, 190, 101, 10, 248, 24, 142, 193, 97, 118, 178, 26, 51, 214, 38, 199, 217, 245, 189, 121, 51, 241, 189, 213, 89, 137, 113, 117, 66, 162, 66, 183, 117, 190, 120, 39, 18, 229, 109, 126, 219, 236, 98, 191, 112, 49, 241, 162, 94, 165, 37, 220, 92, 13, 254, 177, 217, 118, 78, 193, 166, 13, 17, 240, 234, 86, 227, 100, 66, 218, 65, 163, 246, 58, 67, 22, 57, 244, 83, 82, 7, 89, 0, 106, 34, 123, 126, 135, 37, 188, 115, 175, 43, 212, 206, 175, 25, 82, 205, 232, 239, 35, 104, 218, 231, 234, 60, 251, 165, 51, 244, 197, 142, 159, 51, 69, 244, 246, 95, 149, 141, 183, 35, 8, 11, 227, 164, 122, 201, 40, 191, 247, 150, 49, 176, 18, 108, 177, 231, 130, 186, 78, 132, 166, 161, 85, 254, 114, 18, 167, 29, 93, 241, 200, 247, 130, 234, 27, 143, 229, 229, 183, 132, 0, 243, 4, 117, 210, 12, 156, 249, 134, 57, 240, 128, 43, 156, 168, 151, 81, 83, 122, 182, 201, 207, 73, 64, 193, 7, 62, 32, 153, 208, 96, 24, 54, 58, 29, 178, 182, 215, 67, 15, 114, 146, 38, 255, 149, 147, 13, 132, 245, 56, 255, 105, 6, 140, 4, 141, 175, 231, 100, 178, 147, 79, 34, 206, 224, 89, 106, 105, 18, 58, 5, 74, 156, 162, 162, 204, 162, 147, 212, 80, 96, 249, 55, 234, 188, 62, 103, 9, 250, 136, 68, 207, 77, 188, 39, 84, 149, 205, 234, 27, 238, 134, 25, 214, 234, 45, 31, 117, 53, 35, 26, 223, 26, 125, 59, 207, 226, 249, 221, 171, 3, 242, 179, 126, 21, 52, 16, 74, 67, 156, 218, 202, 157, 163, 72, 216, 31, 3, 82, 42, 66, 88, 134, 176, 101, 127, 40, 160, 254, 50, 124, 186, 201, 82, 4, 54, 126, 153, 199, 7, 140, 233, 221, 158, 97, 83, 241, 136, 178, 239, 211, 102, 8, 72, 111, 230, 29, 110, 26, 126, 150, 81, 84, 180, 236, 195, 24, 251, 194, 107, 30, 103, 248, 203, 194, 22, 3, 177, 23, 18, 213, 116, 4, 110, 63, 187, 190, 158, 54, 41, 212, 250, 18, 47, 126, 195, 233, 164, 233, 100, 41, 139, 136, 91, 107, 255, 47, 14, 97, 147, 14, 165, 23, 192, 35, 39, 76, 62, 251, 254, 1, 234, 43, 23, 206, 43, 0, 34, 241, 241, 20, 106, 160, 219, 84, 77, 195, 255, 145, 119, 50, 215, 131, 20, 29, 120, 89, 206, 139, 196, 50, 12, 145, 163, 235, 144, 81, 136, 246, 191, 248, 113, 29, 232, 80, 152, 38, 123, 220, 84, 249, 128, 198, 101, 122, 158, 149, 196, 78, 2, 47, 211, 87, 140, 104, 113, 156, 102, 174, 91, 65, 148, 113, 113, 207, 225, 98, 226, 68, 91, 115, 28, 233, 188, 185, 104, 243, 61, 103, 122, 170, 225, 220, 236, 5, 252, 60, 90, 122, 77, 201, 198, 254, 107, 193, 72, 51, 175, 69, 74, 25, 144, 71, 47, 0, 54, 74, 116, 225, 180, 30, 10, 207, 190, 44, 91, 123, 12, 173, 216, 247, 15, 55, 8, 98, 229, 113, 111, 126, 85, 53, 244, 107, 156, 37, 0, 70, 228, 229, 1, 139, 198, 242, 177, 16, 19, 240, 181, 250, 57, 132, 114, 119, 95, 196, 85, 144, 233, 253, 194, 125, 3, 129, 23, 2, 80, 85, 134, 119, 112, 69, 62, 15, 135, 191, 96, 236, 190, 129, 249, 108, 240, 143, 17, 196, 145, 238, 178, 169, 49, 80, 101, 55, 96, 23, 122, 51, 230, 7, 189, 43, 158, 52, 239, 188, 81, 30, 68, 46, 170, 185, 0, 236, 74, 57, 31, 244, 65, 29, 17, 98, 111, 179, 45, 129, 31, 226, 15, 108, 130, 37, 69, 127, 16, 38, 208, 146, 47, 200, 138, 101, 114, 113, 206, 132, 32, 62, 40, 53, 200, 183, 103, 140, 72, 81, 145, 93, 41, 2, 123, 98, 87, 230, 55, 8, 155, 236, 141, 252, 141, 91, 145, 65, 24, 120, 225, 212, 42, 157, 124, 220, 225, 46, 206, 107, 42, 21, 228, 97, 179, 190, 195, 134, 165, 214, 217, 182, 54, 155, 136, 96, 32, 40, 253, 41, 191, 204, 65, 157, 133, 242, 89, 13, 12, 195, 105, 31, 109, 61, 168, 213, 168, 26, 121, 246, 221, 111, 62, 165, 10, 180, 44, 187, 74, 71, 184, 62, 252, 95, 68, 98, 234, 105, 48, 116, 229, 151, 67, 248, 204, 20, 187, 141, 230, 46, 37, 106, 217, 40, 114, 2, 65, 180, 233, 106, 83, 116, 41, 8, 247, 156, 155, 219, 202, 199, 198, 93, 99, 150, 5, 148, 104, 133, 170, 30, 194, 12, 207, 248, 106, 76, 46, 39, 65, 40, 25, 16, 90, 158, 170, 120, 165, 125, 161, 58, 197, 5, 41, 36, 116, 54, 180, 78, 237, 44, 181, 140, 22, 69, 193, 193, 120, 21, 242, 201, 217, 35, 200, 238, 152, 106, 216, 14, 95, 0, 52, 98, 247, 226, 32, 78, 226, 189, 16, 20, 174, 192, 69, 148, 150, 10, 132, 91, 174, 145, 50, 184, 9, 236, 64, 196, 82, 158, 48, 185, 69, 157, 53, 78, 214, 74, 179, 128, 100, 136, 227, 165, 60, 27, 162, 120, 67, 241, 146, 251, 64, 86, 115, 66, 87, 132, 69, 92, 203, 92, 78, 127, 57, 79, 26, 44, 35, 112, 91, 226, 242, 4, 140, 99, 39, 69, 48, 144, 244, 15, 179, 11, 68, 1, 186, 137, 192, 73, 248, 102, 53, 178, 245, 112, 118, 201, 250, 198, 219, 90, 85, 226, 237, 140, 18, 101, 8, 164, 209, 92, 111, 26, 232, 79, 72, 143, 121, 109, 170, 190, 26, 100, 200, 106, 202, 15, 215, 49, 84, 223, 219, 137, 150, 177, 6, 210, 62, 161, 180, 222, 224, 229, 98, 36, 22, 103, 79, 31, 17, 210, 38, 187, 53, 131, 126, 62, 169, 45, 121, 229, 89, 9, 11, 53, 5, 41, 116, 12, 190, 252, 242, 56, 47, 156, 163, 71, 90, 145, 30, 252, 113, 40, 69, 200, 224, 246, 212, 94, 1, 102, 75, 208, 111, 126, 237, 124, 15, 201, 198, 120, 229, 43, 239, 101, 209, 177, 188, 243, 66, 14, 169, 243, 186, 225, 234, 226, 102, 144, 162, 67, 10, 228, 154, 135, 152, 235, 80, 71, 190, 142, 137, 140, 6, 37, 108, 157, 149, 36, 190, 201, 195, 34, 95, 213, 73, 1, 221, 71, 142, 79, 246, 137, 89, 139, 245, 199, 130, 53, 204, 234, 121, 146, 232, 44, 11, 107, 127, 168, 151, 33, 227, 90, 19, 98, 35, 52, 210, 112, 171, 135, 86, 210, 79, 227, 180, 66, 188, 167, 217, 7, 139, 208, 42, 235, 34, 114, 3, 181, 33, 158, 93, 16, 237, 174, 29, 197, 103, 138, 210, 115, 210, 128, 112, 166, 107, 255, 126, 46, 19, 166, 195, 87, 217, 142, 253, 173, 122, 41, 17, 49, 73, 29, 182, 31, 203, 136, 19, 165, 1, 26, 20, 226, 166, 157, 107, 56, 221, 197, 67, 47, 9, 222, 160, 131, 247, 206, 218, 162, 98, 93, 59, 128, 209, 123, 82, 130, 252, 6, 136, 29, 200, 92, 237, 190, 253, 62, 12, 67, 58, 121, 221, 77, 17, 191, 141, 213, 239, 94, 197, 177, 206, 166, 158, 78, 115, 44, 8, 153, 248, 35, 24, 79, 214, 24, 202, 67, 95, 26, 164, 120, 116, 201, 109, 59, 183, 116, 122, 172, 35, 16, 226, 5, 251, 0, 64, 159, 255, 190, 60, 239, 84, 154, 118, 135, 245, 218, 49, 244, 59, 246, 76, 88, 73, 67, 31, 168, 86, 51, 185, 202, 134, 3, 41, 223, 208, 141, 46, 151, 65, 192, 130, 190, 229, 64, 176, 241, 41, 0, 9, 15, 103, 26, 16, 8, 174, 116, 193, 78, 142, 216, 184, 237, 160, 80, 155, 146, 221, 39, 67, 4, 89, 222, 22, 54, 175, 49, 33, 30, 87, 206, 232, 243, 150, 16, 150, 26, 53, 248, 239, 16, 180, 165, 158, 91, 81, 57, 84, 32, 162, 156, 164, 81, 42, 131, 105, 108, 63, 186, 230, 66, 164, 102, 253, 11, 41, 118, 61, 40, 125, 178, 101, 181, 26, 49, 0, 110, 96, 174, 143, 66, 128, 19, 237, 20, 144, 244, 193, 117, 244, 101, 253, 156, 251, 239, 137, 154, 147, 175, 125, 200, 97, 235, 189, 12, 28, 103, 88, 244, 204, 160, 112, 93, 76, 106, 138, 44, 168, 5, 158, 20, 65, 6, 197, 81, 35, 107, 115, 10, 126, 7, 63, 49, 182, 221, 56, 64, 88, 169, 3, 181, 40, 132, 67, 46, 145, 28, 149, 6, 207, 179, 140, 116, 61, 38, 199, 163, 154, 10, 140, 143, 245, 243, 239, 163, 29, 58, 217, 241, 24, 205, 75, 252, 86, 183, 179, 189, 137, 4, 162, 61, 255, 240, 173, 114, 235, 14, 58, 231, 219, 157, 251, 192, 112, 121, 164, 220, 133, 207, 245, 187, 164, 252, 92, 96, 153, 26, 109, 210, 53, 45, 51, 189, 224, 241, 96, 111, 21, 61, 213, 138, 150, 131, 175, 9, 218, 118, 101, 191, 191, 167, 199, 31, 232, 7, 37, 223, 194, 213, 143, 126, 233, 136, 101, 102, 91, 138, 145, 155, 61, 129, 147, 91, 203, 86, 215, 45, 115, 71, 220, 173, 213, 139, 214, 16, 131, 147, 209, 211, 68, 253, 49, 4, 4, 192, 20, 222, 184, 228, 90, 117, 99, 183, 34, 167, 172, 130, 204, 185, 146, 249, 74, 197, 230, 186, 23, 63, 33, 109, 12, 229, 255, 80, 151, 217, 41, 26, 248, 222, 212, 0, 86, 37, 75, 26, 70, 52, 117, 132, 23, 167, 153, 208, 64, 40, 54, 253, 60, 67, 226, 227, 11, 75, 7, 249, 80, 91, 71, 136, 155, 219, 76, 122, 47, 104, 104, 170, 237, 16, 205, 109, 244, 4, 156, 139, 16, 166, 140, 116, 112, 154, 173, 46, 40, 44, 210, 210, 9, 158, 162, 200, 92, 255, 171, 238, 209, 68, 216, 180, 151, 201, 236, 136, 51, 232, 47, 25, 159, 172, 80, 70, 247, 81, 242, 75, 189, 172, 214, 136, 188, 202, 245, 36, 74, 208, 229, 245, 250, 5, 178, 63, 59, 10, 229, 121, 6, 66, 130, 255, 38, 230, 164, 0, 206, 245, 150, 175, 176, 57, 106, 129, 141, 147, 19, 149, 248, 131, 201, 5, 186, 0, 75, 223, 128, 222, 245, 247, 255, 157, 60, 186, 106, 209, 203, 172, 116, 186, 248, 195, 234, 215, 47, 11, 66, 22, 19, 163, 61, 44, 178, 72, 180, 43, 10, 63, 110, 92, 198, 239, 184, 180, 164, 4, 115, 176, 201, 38, 71, 97, 161, 81, 180, 151, 115, 43, 202, 16, 36, 197, 249, 20, 245, 135, 45, 206, 229, 214, 50, 234, 121, 219, 4, 156, 50, 120, 102, 41, 166, 209, 19, 118, 20, 197, 182, 4, 78, 31, 177, 223, 112, 46, 148, 51, 10, 100, 184, 15, 7, 143, 216, 159, 173, 186, 156, 139, 144, 56, 191, 94, 190, 132, 71, 99, 146, 6, 114, 103, 85, 140, 163, 20, 73, 80, 248, 60, 199, 134, 59, 126, 123, 16, 172, 221, 11, 249, 150, 212, 18, 163, 242, 107, 78, 115, 51, 88, 8, 163, 139, 36, 19, 116, 172, 210, 150, 100, 180, 223, 115, 158, 23, 123, 0, 109, 245, 207, 122, 224, 56, 112, 125, 135, 196, 156, 247, 33, 19, 80, 192, 94, 147, 143, 208, 154, 83, 166, 90, 8, 254, 193, 130, 0, 67, 251, 213, 35, 173, 232, 41, 226, 96, 9, 71, 206, 5, 163, 221, 174, 231, 38, 8, 174, 247, 144, 56, 147, 24, 45, 225, 231, 206, 188, 197, 243, 82, 170, 182, 88, 102, 41, 207, 254, 175, 189, 92, 123, 119, 235, 91, 207, 117, 114, 33, 219, 209, 137, 226, 216, 141, 50, 27, 67, 157, 68, 100, 173, 47, 122, 64, 159, 15, 110, 198, 28, 232, 207, 17, 121, 130, 58, 124, 128, 211, 162, 245, 107, 153, 158, 169, 207, 240, 233, 144, 114, 234, 0, 48, 91, 114, 100, 135, 183, 207, 147, 176, 118, 95, 123, 92, 29, 57, 213, 234, 82, 198, 132, 179, 218, 99, 61, 76, 101, 45, 149, 208, 207, 131, 8, 44, 61, 234, 44, 191, 193, 12, 46, 245, 191, 78, 218, 186, 200, 160, 45, 27, 37, 87, 165, 108, 163, 13, 149, 248, 145, 237, 114, 106, 49, 139, 183, 43, 215, 9, 11, 82, 1, 92, 126, 84, 77, 105, 220, 161, 198, 71, 82, 197, 105, 27, 238, 109, 56, 17, 102, 41, 155, 110, 92, 114, 227, 204, 139, 138, 0, 81, 102, 82, 249, 16, 149, 163, 42, 214, 78, 31, 238, 26, 102, 190, 251, 132, 108, 173, 70, 24, 43, 31, 178, 21, 75, 137, 166, 84, 235, 169, 73, 148, 185, 116, 189, 75, 201, 34, 125, 77, 76, 136, 95, 4, 7, 205, 205, 48, 95, 155, 28, 54, 77, 132, 83, 84, 100, 145, 105, 233, 195, 109, 206, 73, 211, 60, 81, 181, 25, 196, 220, 43, 131, 237, 29, 122, 147, 14, 130, 186, 48, 17, 228, 29, 80, 111, 50, 140, 63, 70, 248, 63, 164, 82, 80, 172, 16, 87, 232, 181, 238, 2, 228, 142, 52, 98, 9, 77, 168, 192, 66, 141, 33, 48, 142, 152, 200, 2, 93, 18, 187, 33, 70, 223, 47, 238, 254, 74, 211, 5, 22, 171, 66, 21, 51, 110, 100, 133, 119, 115, 42, 255, 103, 92, 59, 224, 118, 91, 218, 233, 27, 226, 174, 255, 33, 122, 4, 206, 84, 9, 14, 115, 117, 101, 58, 169, 39, 191, 101, 225, 246, 17, 59, 154, 204, 210, 117, 246, 152, 31, 131, 214, 7, 169, 133, 13, 221, 171, 101, 117, 47, 145, 130, 58, 217, 105, 176, 62, 30, 219, 26, 253, 240, 51, 46, 66, 183, 153, 160, 217, 80, 7, 94, 5, 209, 91, 225, 220, 254, 220, 255, 180, 179, 131, 205, 235, 19, 105, 186, 168, 74, 247, 80, 26, 75, 39, 254, 174, 71, 233, 211, 8, 60, 59, 41, 169, 114, 1, 27, 63, 215, 81, 68, 142, 94, 153, 41, 99, 74, 26, 227, 65, 119, 127, 155, 129, 54, 226, 158, 193, 146, 107, 93, 185, 166, 43, 77, 178, 128, 149, 156, 245, 43, 164, 20, 224, 209, 88, 192, 128, 169, 68, 206, 142, 206, 125, 82, 180, 118, 27, 42, 140, 224, 178, 163, 184, 49, 53, 79, 83, 136, 54, 139, 115, 95, 43, 209, 119, 97, 179, 1, 202, 107, 29, 9, 9, 81, 90, 198, 96, 187, 141, 126, 43, 246, 35, 51, 16, 229, 203, 254, 240, 142, 133, 33, 12, 179, 165, 203, 74, 86, 111, 33, 63, 212, 74, 127, 231, 45, 195, 181, 87, 100, 15, 216, 3, 17, 186, 80, 142, 76, 151, 245, 103, 11, 83, 253, 179, 179, 180, 147, 204, 39, 130, 20, 16, 217, 14, 211, 253, 93, 120, 244, 72, 156, 88, 28, 126, 125, 134, 4, 90, 87, 251, 54, 63, 246, 46, 82, 231, 71, 82, 63, 30, 71, 46, 181, 7, 172, 109, 73, 101, 181, 29, 54, 182, 97, 80, 1, 41, 229, 177, 0, 153, 49, 127, 195, 166, 148, 39, 247, 123, 42, 96, 106, 126, 166, 194, 255, 75, 19, 123, 220, 200, 171, 195, 67, 143, 36, 30, 161, 167, 139, 114, 117, 235, 95, 35, 76, 224, 1, 66, 222, 238, 153, 81, 150, 131, 139, 31, 102, 14, 173, 180, 74, 102, 60, 194, 187, 227, 63, 192, 50, 250, 33, 197, 30, 148, 180, 210, 226, 21, 63, 148, 238, 242, 225, 30, 182, 69, 228, 111, 39, 59, 212, 233, 183, 131, 15, 195, 41, 68, 104, 131, 3, 41, 77, 207, 181, 56, 169, 250, 61, 134, 189, 121, 97, 120, 120, 216, 59, 139, 38, 101, 132, 141, 96, 132, 131, 169, 70, 251, 138, 45, 125, 193, 2, 135, 183, 146, 213, 104, 14, 234, 122, 219, 58, 239, 113, 128, 2, 128, 146, 152, 239, 160, 116, 174, 252, 11, 66, 110, 184, 181, 66, 78, 130, 233, 52, 22, 146, 111, 133, 76, 184, 163, 90, 237, 58, 64, 94, 249, 134, 35, 92, 49, 176, 136, 238, 149, 198, 186, 209, 229, 71, 111, 174, 23, 178, 159, 132, 108, 12, 118, 205, 59, 23, 61, 156, 24, 28, 44, 250, 60, 129, 249, 90, 51, 226, 175, 8, 141, 146, 250, 253, 157, 27, 16, 59, 32, 246, 209, 1, 241, 243, 149, 180, 186, 4, 146, 179, 217, 169, 210, 120, 225, 50, 155, 145, 61, 83, 171, 161, 45, 135, 184, 78, 152, 215, 219, 117, 8, 13, 222, 216, 254, 79, 157, 232, 63, 214, 62, 201, 173, 89, 56, 77, 32, 86, 4, 229, 53, 154, 157, 23, 196, 242, 127, 224, 195, 114, 64, 251, 216, 123, 75, 53, 164, 158, 28, 82, 83, 76, 103, 177, 36, 157, 51, 25, 250, 208, 113, 195, 109, 213, 146, 98, 3, 148, 151, 59, 181, 179, 87, 59, 59, 146, 236, 80, 246, 4, 84, 139, 91, 105, 225, 43, 49, 180, 38, 109, 14, 207, 162, 154, 208, 159, 95, 99, 67, 153, 43, 36, 220, 64, 15, 62, 69, 191, 226, 120, 71, 219, 168, 0, 229, 61, 15, 201, 69, 184, 32, 7, 18, 36, 253, 129, 100, 196, 123, 247, 77, 247, 83, 116, 189, 23, 155, 231, 151, 102, 26, 109, 41, 225, 132, 33, 211, 50, 255, 163, 89, 64, 171, 110, 208, 57, 236, 113, 82, 229, 95, 107, 246, 15, 161, 142, 57, 234, 171, 143, 17, 72, 241, 245, 113, 250, 113, 185, 101, 137, 121, 53, 4, 93, 5, 127, 197, 167, 79, 200, 195, 241, 188, 235, 241, 77, 224, 132, 232, 124, 33, 207, 56, 199, 138, 103, 28, 137, 237, 79, 144, 233, 100, 64, 27, 74, 133, 78, 210, 71, 9, 62, 39, 61, 44, 2, 64, 131, 104, 219, 94, 123, 238, 187, 9, 27, 194, 213, 244, 91, 90, 33, 123, 173, 245, 140, 177, 157, 248, 12, 55, 12, 10, 209, 129, 128, 86, 106, 133, 94, 202, 243, 84, 195, 157, 232, 22, 108, 135, 98, 45, 186, 232, 234, 223, 70, 189, 149, 49, 222, 122, 143, 250, 207, 192, 136, 181, 133, 12, 138, 163, 210, 191, 178, 38, 167, 231, 219, 91, 53, 165, 161, 169, 12, 204, 65, 160, 247, 184, 181, 66, 48, 203, 100, 94, 49, 226, 206, 169, 117, 244, 35, 144, 7, 133, 99, 76, 32, 214, 57, 224, 146, 206, 121, 201, 196, 122, 91, 202, 79, 131, 239, 205, 127, 187, 137, 109, 230, 174, 125, 166, 34, 139, 42, 74, 136, 156, 130, 195, 220, 200, 83, 65, 49, 154, 187, 4, 155, 4, 3, 248, 40, 145, 120, 180, 212, 83, 132, 221, 13, 37, 88, 123, 116, 201, 119, 82, 248, 173, 171, 72, 33, 205, 239, 214, 231, 81, 153, 50, 101, 106, 238, 163, 251, 136, 31, 16, 99, 6, 2, 208, 215, 22, 54, 231, 204, 47, 253, 190, 222, 69, 241, 182, 203, 209, 192, 247, 170, 111, 211, 152, 36, 120, 41, 93, 142, 118, 84, 254, 77, 240, 218, 207, 97, 131, 206, 169, 188, 71, 238, 1, 10, 63, 114, 157, 51, 27, 24, 234, 191, 234, 133, 96, 244, 207, 124, 87, 166, 215, 35, 132, 43, 3, 36, 127, 146, 235, 60, 55, 99, 176, 155, 172, 189, 189, 117, 200, 97, 20, 142, 34, 174, 104, 251, 83, 108, 13, 21, 18, 65, 181, 24, 76, 63, 178, 239, 112, 167, 118, 104, 153, 128, 79, 230, 104, 224, 3, 9, 182, 196, 34, 214, 245, 228, 157, 42, 43, 47, 253, 136, 35, 246, 116, 206, 178, 30, 153, 236, 214, 30, 236, 214, 125, 80, 252, 53, 168, 195, 136, 240, 84, 43, 233, 131, 1, 88, 220, 104, 105, 3, 177, 243, 184, 151, 74, 228, 94, 200, 134, 50, 141, 242, 252, 13, 245, 220, 182, 116, 26, 89, 49, 141, 84, 122, 164, 192, 251, 139, 166, 238, 117, 79, 121, 115, 207, 53, 136, 152, 115, 109, 33, 33, 117, 221, 15, 245, 215, 93, 20, 120, 154, 250, 188, 22, 48, 15, 81, 230, 174, 175, 214, 190, 248, 69, 73, 105, 198, 212, 140, 191, 254, 118, 178, 194, 250, 160, 96, 146, 231, 204, 133, 51, 20, 174, 63, 6, 183, 36, 127, 107, 181, 5, 26, 157, 74, 246, 128, 76, 88, 163, 28, 74, 177, 89, 110, 76, 250, 238, 242, 236, 21, 238, 141, 101, 224, 49, 93, 194, 72, 224, 142, 231, 244, 254, 156, 0, 112, 29, 190, 4, 151, 48, 233, 64, 70, 125, 69, 62, 42, 119, 123, 93, 192, 53, 138, 7, 204, 158, 57, 5, 38, 194, 242, 143, 108, 213, 71, 192, 3, 52, 81, 188, 48, 125, 251, 118, 179, 42, 239, 113, 133, 154, 213, 168, 186, 245, 144, 163, 137, 251, 85, 116, 219, 55, 46, 193, 8, 49, 95, 232, 143, 86, 170, 51, 90, 246, 119, 42, 39, 196, 212, 124, 204, 193, 11, 182, 0, 0, 215, 219, 156, 194, 92, 103, 34, 195, 124, 241, 156, 203, 50, 14, 106, 244, 219, 237, 24, 142, 193, 102, 28, 56, 89, 66, 3, 207, 120, 80, 99, 73, 223, 110, 168, 114, 199, 231, 141, 3, 181, 57, 83, 2, 205, 52, 224, 147, 144, 193, 95, 75, 25, 248, 126, 18, 186, 216, 38, 52, 34, 206, 69, 169, 45, 29, 189, 233, 242, 16, 55, 11, 206, 9, 208, 8, 238, 91, 20, 179, 158, 146, 84, 143, 49, 244, 205, 181, 7, 183, 139, 167, 215, 241, 101, 44, 138, 189, 160, 241, 83, 239, 56, 236, 83, 156, 19, 106, 84, 2, 188, 96, 27, 11, 81, 137, 245, 64, 160, 186, 213, 99, 123, 177, 120, 24, 150, 182, 147, 139, 157, 184, 234, 114, 230, 40, 14, 248, 251, 88, 24, 87, 29, 196, 4, 225, 115, 111, 226, 230, 177, 46, 77, 43, 98, 50, 155, 175, 163, 195, 35, 210, 195, 6, 250, 201, 106, 1, 172, 90, 241, 213, 178, 246, 248, 131, 28, 96, 177, 235, 95, 69, 228, 40, 133, 153, 12, 194, 177, 88, 98, 76, 169, 184, 249, 159, 166, 83, 54, 193, 182, 183, 14, 40, 84, 91, 179, 123, 35, 11, 8, 172, 40, 159, 40, 184, 56, 108, 87, 105, 183, 152, 21, 161, 34, 71, 212, 131, 148, 246, 20, 24, 31, 255, 51, 110, 166, 255, 105, 237, 181, 95, 35, 171, 141, 18, 194, 64, 202, 151, 155, 157, 189, 70, 246, 230, 21, 11, 191, 222, 236, 22, 210, 3, 113, 98, 201, 136, 36, 18, 96, 116, 11, 222, 16, 117, 161, 2, 197, 105, 252, 100, 204, 129, 81, 175, 217, 199, 167, 197, 52, 23, 48, 38, 41, 124, 189, 232, 108, 236, 197, 101, 112, 203, 216, 100, 114, 245, 95, 211, 244, 66, 39, 205, 208, 52, 215, 54, 46, 70, 38, 45, 68, 236, 135, 68, 177, 131, 95, 243, 228, 152, 110, 57, 125, 223, 253, 199, 230, 148, 235, 193, 180, 216, 60, 64, 43, 70, 71, 56, 88, 147, 63, 161, 26, 229, 106, 61, 182, 232, 229, 42, 31, 97, 167, 130, 214, 3, 206, 14, 71, 198, 48, 108, 210, 196, 17, 185, 38, 90, 232, 244, 41, 124, 160, 149, 94, 160, 136, 240, 170, 213, 88, 117, 23, 83, 51, 110, 218, 17, 159, 102, 144, 181, 186, 193, 31, 144, 85, 128, 180, 225, 159, 151, 28, 0, 3, 104, 199, 130, 67, 50, 220, 37, 181, 39, 26, 182, 129, 48, 130, 22, 104, 209, 192, 89, 195, 186, 49, 64, 41, 237, 206, 96, 83, 99, 98, 150, 83, 184, 30, 110, 6, 21, 201, 160, 220, 85, 156, 240, 224, 243, 232, 229, 209, 97, 137, 238, 133, 196, 196, 102, 167, 173, 130, 234, 58, 224, 150, 67, 32, 156, 6, 143, 151, 253, 17, 173, 1, 165, 134, 141, 77, 127, 168, 168, 23, 58, 161, 0, 126, 244, 42, 180, 181, 89, 126, 3, 128, 145, 39, 139, 175, 216, 151, 108, 25, 104, 81, 102, 224, 184, 104, 21, 4, 213, 46, 146, 164, 161, 243, 219, 50, 25, 251, 169, 11, 184, 95, 187, 240, 179, 60, 221, 31, 156, 66, 151, 3, 140, 222, 141, 99, 16, 34, 114, 199, 232, 73, 84, 200, 196, 32, 59, 45, 72, 67, 243, 107, 109, 202, 75, 113, 0, 211, 213, 78, 94, 119, 203, 119, 148, 153, 8, 240, 212, 195, 76, 86, 182, 30, 111, 34, 225, 239, 45, 182, 16, 202, 158, 89, 255, 156, 98, 35, 101, 118, 100, 157, 219, 243, 56, 164, 164, 114, 182, 126, 68, 32, 1, 157, 245, 87, 187, 147, 202, 22, 142, 118, 152, 118, 175, 235, 38, 240, 91, 15, 107, 183, 214, 188, 201, 77, 90, 123, 145, 145, 184, 15, 191, 180, 58, 70, 134, 78, 165, 181, 39, 50, 208, 56, 180, 198, 19, 6, 175, 49, 114, 19, 101, 55, 160, 139, 194, 68, 137, 1, 222, 81, 162, 153, 216, 195, 160, 168, 193, 91, 72, 58, 163, 230, 248, 14, 219, 131, 123, 34, 150, 1, 177, 7, 226, 210, 10, 2, 37, 195, 131, 161, 224, 122, 94, 192, 110, 91, 72, 232, 219, 155, 195, 7, 75, 40, 203, 51, 175, 198, 22, 114, 220, 12, 218, 10, 255, 243, 175, 236, 150, 159, 149, 202, 51, 165, 243, 66, 251, 105, 59, 99, 254, 6, 243, 47, 212, 216, 245, 128, 32, 102, 40, 123, 180, 85, 249, 108, 123, 133, 62, 110, 118, 128, 235, 89, 30, 173, 57, 182, 192, 69, 24, 165, 221, 88, 29, 33, 195, 253, 199, 104, 205, 231, 65, 138, 237, 70, 63, 5, 111, 116, 187, 106, 33, 82, 11, 65, 85, 133, 43, 202, 46, 140, 62, 89, 107, 141, 227, 219, 214, 148, 202, 105, 80, 86, 189, 10, 224, 37, 250, 195, 196, 33, 240, 10, 19, 146, 123, 159, 245, 53, 82, 223, 226, 145, 116, 234, 213, 186, 154, 54, 195, 152, 3, 164, 217, 133, 15, 66, 223, 112, 114, 114, 137, 12, 86, 22, 254, 209, 23, 237, 51, 61, 50, 100, 137, 59, 79, 115, 187, 120, 237, 134, 80, 187, 18, 98, 151, 145, 244, 153, 252, 134, 169, 3, 40, 145, 53, 145, 230, 45, 193, 206, 86, 172, 153, 87, 27, 81, 136, 50, 207, 74, 53, 154, 3, 24, 199, 154, 78, 198, 159, 5, 234, 39, 1, 93, 62, 145, 22, 2, 71, 111, 165, 148, 251, 130, 166, 34, 152, 89, 69, 95, 174, 70, 134, 213, 137, 96, 190, 124, 79, 87, 85, 30, 164, 99, 135, 169, 113, 159, 203, 233, 169, 17, 192, 57, 60, 37, 153, 47, 200, 80, 254, 218, 8, 29, 109, 178, 119, 134, 15, 39, 98, 204, 119, 226, 30, 30, 16, 142, 152, 100, 57, 0, 236, 143, 37, 188, 96, 17, 5, 107, 204, 121, 218, 1, 193, 82, 32, 247, 110, 91, 90, 215, 109, 218, 201, 15, 43, 88, 180, 58, 144, 53, 149, 125, 58, 162, 56, 56, 119, 144, 163, 75, 73, 90, 8, 167, 65, 206, 126, 111, 37, 135, 126, 228, 232, 127, 28, 122, 155, 216, 246, 15, 189, 228, 45, 96, 225, 133, 72, 56, 13, 194, 231, 148, 56, 47, 162, 123, 148, 58, 157, 138, 26, 161, 147, 22, 0, 11, 129, 110, 11, 194, 182, 58, 89, 120, 210, 229, 33, 210, 164, 38, 155, 221, 229, 25, 129, 103, 227, 76, 189, 245, 228, 32, 57, 202, 246, 181, 203, 64, 153, 203, 173, 100, 132, 169, 174, 224, 14, 185, 11, 185, 251, 37, 206, 109, 112, 89, 209, 181, 101, 47, 93, 134, 52, 242, 10, 173, 149, 175, 254, 253, 2, 77, 42, 142, 43, 163, 180, 69, 9, 252, 102, 165, 68, 193, 85, 202, 246, 233, 6, 253, 224, 253, 188, 50, 36, 182, 212, 67, 66, 139, 6, 212, 8, 181, 174, 178, 221, 115, 64, 11, 28, 183, 161, 15, 106, 157, 169, 82, 156, 160, 196, 136, 24, 93, 250, 170, 177, 22, 245, 142, 247, 253, 60, 8, 20, 176, 99, 165, 167, 104, 181, 247, 239, 184, 186, 39, 101, 75, 54, 5, 24, 73, 53, 11, 136, 247, 35, 119, 254, 51, 246, 75, 47, 29, 69, 101, 240, 188, 38, 11, 112, 22, 20, 63, 52, 45, 44, 212, 97, 189, 202, 99, 3, 109, 244, 230, 14, 200, 238, 133, 96, 180, 121, 122, 195, 147, 182, 3, 191, 186, 237, 38, 92, 86, 28, 62, 62, 139, 162, 236, 134, 202, 168, 13, 80, 64, 175, 48, 40, 130, 37, 86, 46, 30, 132, 10, 202, 10, 176, 178, 22, 72, 173, 207, 148, 82, 100, 66, 42, 122, 227, 173, 214, 232, 36, 171, 20, 215, 10, 251, 37, 159, 231, 210, 144, 195, 255, 232, 235, 136, 226, 34, 157, 68, 175, 214, 150, 190, 177, 240, 164, 204, 202, 16, 238, 50, 50, 13, 137, 126, 132, 50, 74, 97, 116, 42, 129, 174, 176, 221, 20, 83, 106, 199, 94, 11, 215, 24, 238, 6, 65, 26, 177, 95, 155, 118, 119, 33, 221, 115, 19, 72, 180, 230, 145, 231, 189, 37, 202, 101, 39, 189, 123, 23, 46, 143, 34, 43, 207, 216, 44, 181, 133, 153, 216, 185, 232, 162, 224, 75, 69, 20, 52, 195, 73, 226, 144, 253, 155, 177, 251, 142, 74, 59, 193, 211, 181, 217, 33, 5, 131, 126, 254, 28, 46, 57, 37, 155, 156, 129, 26, 102, 97, 172, 194, 171, 233, 163, 239, 248, 74, 68, 81, 122, 137, 208, 46, 153, 82, 91, 9, 64, 220, 30, 199, 3, 106, 146, 5, 241, 9, 133, 240, 198, 52, 188, 53, 208, 185, 77, 87, 37, 98, 29, 202, 83, 220, 31, 94, 60, 210, 138, 148, 141, 148, 199, 54, 197, 228, 209, 37, 120, 166, 91, 50, 209, 192, 63, 41, 240, 149, 244, 231, 186, 25, 63, 129, 33, 11, 128, 22, 107, 116, 134, 213, 145, 203, 89, 208, 194, 71, 103, 160, 188, 178, 125, 25, 214, 91, 178, 231, 89, 115, 188, 104, 101, 49, 142, 176, 9, 163, 243, 204, 171, 119, 25, 142, 90, 37, 147, 240, 246, 173, 45, 55, 74, 35, 76, 109, 216, 170, 231, 119, 243, 204, 23, 162, 84, 89, 53, 161, 223, 103, 250, 133, 120, 13, 205, 22, 211, 103, 1, 136, 218, 204, 171, 149, 0, 6, 91, 52, 190, 65, 187, 27, 216, 211, 189, 63, 30, 48, 113, 220, 0, 231, 87, 245, 160, 144, 14, 203, 207, 211, 204, 179, 172, 207, 199, 105, 69, 119, 164, 170, 3, 244, 179, 75, 85, 138, 25, 213, 108, 43, 127, 32, 137, 138, 28, 223, 165, 0, 15, 29, 25, 216, 159, 124, 2, 151, 232, 63, 223, 79, 151, 10, 163, 191, 149, 114, 231, 232, 166, 248, 132, 241, 232, 255, 72, 93, 71, 31, 226, 117, 160, 60, 249, 208, 215, 32, 184, 172, 200, 151, 168, 61, 212, 48, 82, 133, 4, 233, 110, 69, 152, 162, 63, 247, 55, 188, 10, 31, 216, 40, 7, 151, 29, 242, 133, 40, 161, 118, 87, 208, 238, 99, 174, 237, 31, 178, 217, 19, 205, 20, 121, 153, 60, 221, 80, 15, 217, 59, 148, 195, 91, 254, 33, 169, 151, 124, 215, 238, 40, 200, 19, 206, 183, 249, 62, 88, 217, 33, 252, 73, 125, 45, 136, 25, 185, 3, 164, 113, 140, 186, 16, 7, 177, 31, 61, 117, 146, 169, 88, 128, 86, 121, 17, 230, 227, 182, 245, 93, 127, 228, 44, 169, 112, 18, 206, 213, 151, 152, 131, 150, 117, 169, 0, 4, 164, 223, 161, 193, 0, 254, 200, 118, 173, 64, 221, 163, 85, 223, 108, 174, 33, 73, 232, 118, 212, 153, 143, 25, 31, 131, 104, 130, 69, 113, 144, 143, 57, 224, 44, 42, 225, 93, 241, 171, 143, 56, 100, 207, 223, 233, 119, 115, 69, 3, 165, 254, 78, 52, 114, 156, 42, 204, 33, 26, 214, 34, 138, 160, 94, 194, 216, 71, 193, 144, 207, 89, 163, 130, 42, 116, 101, 248, 171, 2, 133, 252, 181, 28, 183, 202, 227, 102, 208, 41, 196, 30, 109, 105, 140, 223, 114, 47, 66, 143, 102, 94, 215, 46, 149, 45, 83, 115, 167, 249, 109, 137, 1, 110, 3, 201, 38, 15, 154, 15, 50, 29, 218, 53, 255, 2, 69, 135, 26, 12, 102, 156, 126, 90, 167, 123, 116, 43, 129, 84, 72, 70, 133, 142, 41, 10, 60, 97, 199, 126, 232, 71, 96, 211, 86, 85, 124, 217, 114, 11, 157, 199, 252, 40, 197, 243, 175, 157, 212, 121, 10, 237, 90, 201, 21, 161, 127, 41, 121, 159, 94, 238, 79, 234, 132, 104, 80, 179, 85, 88, 19, 7, 202, 5, 175, 69, 18, 148, 131, 41, 173, 87, 225, 97, 232, 145, 16, 171, 179, 131, 160, 102, 233, 184, 214, 116, 92, 209, 66, 176, 55, 204, 214, 130, 58, 246, 61, 188, 96, 24, 84, 209, 167, 179, 116, 130, 66, 244, 70, 242, 43, 61, 134, 6, 192, 171, 182, 251, 142, 201, 221, 57, 85, 27, 144, 120, 0, 79, 84, 213, 175, 104, 36, 72, 88, 119, 17, 7, 64, 191, 190, 97, 218, 78, 39, 137, 242, 30, 185, 208, 181, 75, 139, 151, 14, 39, 199, 12, 70, 250, 230, 113, 254, 50, 116, 61, 47, 221, 37, 236, 133, 0, 246, 201, 18, 187, 163, 161, 231, 6, 121, 78, 254, 157, 128, 181, 158, 106, 237, 145, 101, 212, 106, 175, 161, 70, 130, 23, 184, 77, 8, 9, 43, 53, 30, 133, 207, 70, 253, 149, 59, 74, 153, 78, 230, 70, 1, 211, 254, 233, 85, 151, 85, 214, 105, 143, 230, 158, 18, 243, 141, 55, 81, 106, 114, 243, 153, 125, 223, 12, 226, 224, 84, 118, 248, 80, 157, 179, 180, 230, 160, 192, 38, 41, 130, 38, 55, 28, 39, 64, 224, 99, 89, 175, 240, 246, 80, 100, 114, 58, 103, 89, 179, 31, 205, 8, 20, 63, 18, 164, 34, 186, 237, 207, 123, 109, 108, 215, 137, 148, 122, 135, 137, 136, 240, 25, 23, 114, 210, 240, 232, 231, 158, 109, 164, 164, 23, 220, 114, 168, 137, 206, 83, 86, 36, 103, 7, 195, 164, 10, 160, 36, 86, 13, 229, 31, 173, 134, 35, 42, 35, 214, 28, 1, 170, 195, 102, 123, 241, 40, 94, 229, 13, 19, 206, 237, 152, 125, 243, 116, 174, 118, 171, 91, 106, 146, 91, 73, 184, 234, 86, 39, 232, 255, 246, 87, 34, 173, 194, 179, 82, 8, 209, 165, 10, 253, 191, 162, 70, 213, 22, 234, 27, 191, 17, 73, 45, 97, 97, 203, 131, 11, 185, 205, 116, 17, 35, 57, 148, 107, 140, 224, 47, 115, 82, 225, 96, 143, 192, 66, 39, 60, 16, 159, 57, 201, 252, 79, 138, 87, 111, 48, 235, 26, 173, 96, 217, 50, 225, 124, 29, 40, 71, 185, 27, 177, 214, 72, 27, 122, 26, 70, 25, 60, 151, 160, 247, 64, 91, 171, 58, 122, 83, 23, 122, 77, 38, 94, 144, 211, 197, 170, 27, 195, 139, 144, 219, 193, 75, 200, 230, 189, 77, 229, 105, 195, 251, 185, 255, 174, 32, 185, 137, 45, 149, 52, 190, 211, 31, 206, 52, 225, 89, 151, 13, 109, 92, 70, 0, 189, 6, 148, 33, 215, 234, 157, 137, 168, 38, 65, 33, 1, 27, 142, 6, 209, 149, 111, 14, 20, 244, 194, 149, 205, 163, 9, 197, 165, 120, 3, 4, 188, 173, 76, 251, 199, 205, 84, 89, 74, 187, 88, 8, 116, 242, 60, 52, 131, 74, 71, 169, 227, 21, 200, 183, 153, 40, 18, 50, 178, 187, 226, 196, 125, 70, 124, 42, 120, 122, 180, 87, 144, 37, 135, 147, 189, 50, 77, 14, 23, 82, 127, 233, 87, 186, 102, 173, 135, 138, 73, 92, 139, 188, 29, 87, 12, 22, 126, 231, 34, 84, 146, 34, 92, 1, 0, 62, 179, 107, 242, 98, 79, 62, 207, 156, 222, 127, 55, 163, 22, 70, 152, 199, 167, 207, 156, 106, 149, 153, 255, 61, 251, 56, 250, 197, 247, 254, 38, 140, 223, 223, 247, 227, 246, 16, 177, 182, 231, 9, 96, 110, 223, 172, 247, 174, 0, 37, 77, 182, 17, 89, 135, 184, 96, 165, 188, 21, 34, 174, 189, 28, 88, 102, 33, 117, 112, 65, 202, 20, 189, 144, 229, 48, 0, 80, 176, 254, 246, 49, 0, 53, 100, 116, 218, 3, 169, 62, 221, 240, 203, 130, 83, 54, 17, 62, 90, 216, 239, 41, 100, 51, 29, 64, 185, 33, 139, 75, 5, 129, 82, 4, 162, 248, 40, 199, 154, 18, 196, 116, 1, 234, 57, 72, 56, 94, 100, 232, 142, 123, 184, 57, 222, 111, 75, 194, 195, 192, 182, 6, 93, 111, 247, 197, 220, 12, 115, 194, 124, 132, 0, 82, 109, 59, 204, 39, 169, 225, 117, 200, 82, 117, 48, 250, 177, 190, 127, 2, 53, 120, 189, 249, 187, 81, 111, 195, 243, 206, 241, 185, 4, 68, 182, 152, 63, 94, 196, 93, 234, 57, 229, 207, 218, 14, 156, 136, 138, 71, 131, 153, 97, 23, 37, 164, 226, 193, 122, 6, 10, 196, 246, 244, 50, 190, 122, 70, 179, 226, 125, 163, 216, 33, 35, 75, 212, 177, 210, 48, 59, 28, 142, 38, 46, 80, 63, 73, 104, 157, 113, 219, 118, 69, 131, 113, 218, 197, 196, 6, 96, 177, 167, 34, 32, 188, 172, 240, 44, 21, 159, 238, 111, 213, 174, 15, 81, 151, 216, 5, 207, 182, 191, 88, 114, 184, 37, 229, 253, 153, 152, 253, 191, 136, 159, 227, 29, 108, 105, 68, 140, 12, 220, 222, 182, 200, 58, 125, 118, 237, 204, 218, 167, 195, 139, 30, 77, 6, 80, 78, 118, 46, 155, 255, 222, 150, 202, 41, 126, 139, 109, 76, 88, 239, 140, 238, 64, 206, 120, 180, 154, 59, 162, 163, 86, 143, 214, 19, 119, 112, 40, 37, 191, 10, 81, 64, 141, 148, 106, 190, 35, 141, 144, 30, 143, 58, 127, 74, 243, 135, 30, 66, 72, 229, 160, 120, 91, 92, 40, 171, 221, 121, 190, 182, 14, 2, 127, 236, 105, 222, 10, 176, 88, 31, 54, 225, 143, 232, 187, 159, 94, 180, 238, 132, 46, 71, 212, 178, 167, 117, 41, 103, 44, 193, 74, 154, 110, 75, 34, 114, 181, 148, 134, 61, 18, 216, 145, 177, 234, 248, 8, 170, 34, 9, 57, 68, 140, 217, 244, 63, 61, 247, 131, 73, 67, 76, 96, 149, 67, 172, 74, 72, 121, 93, 179, 22, 238, 36, 147, 35, 13, 107, 56, 200, 42, 233, 43, 20, 101, 44, 126, 181, 96, 38, 15, 57, 0, 143, 140, 190, 44, 11, 207, 84, 228, 64, 153, 246, 37, 59, 61, 89, 206, 72, 168, 102, 42, 116, 33, 25, 177, 202, 215, 130, 174, 0, 122, 42, 85, 95, 153, 82, 38, 34, 45, 57, 98, 17, 24, 14, 124, 22, 147, 238, 28, 201, 223, 102, 226, 115, 189, 60, 194, 201, 148, 217, 41, 139, 195, 63, 149, 178, 87, 160, 44, 113, 229, 208, 224, 1, 235, 155, 121, 136, 17, 47, 3, 158, 100, 184, 167, 87, 227, 183, 245, 64, 253, 60, 215, 77, 174, 52, 192, 152, 241, 43, 71, 214, 161, 39, 82, 214, 174, 147, 25, 26, 214, 78, 9, 161, 225, 20, 145, 0, 25, 164, 155, 122, 152, 193, 43, 200, 94, 72, 185, 145, 158, 109, 85, 116, 77, 69, 106, 185, 146, 92, 146, 138, 155, 80, 35, 54, 32, 112, 57, 119, 2, 42, 255, 252, 130, 134, 158, 28, 186, 142, 171, 60, 43, 219, 73, 146, 196, 18, 109, 246, 76, 107, 5, 46, 169, 40, 99, 154, 159, 140, 242, 72, 58, 89, 98, 223, 180, 27, 98, 10, 112, 172, 144, 154, 41, 5, 119, 240, 120, 248, 55, 62, 213, 51, 180, 196, 46, 53, 65, 220, 123, 242, 250, 58, 200, 121, 93, 192, 207, 54, 124, 209, 250, 194, 101, 66, 104, 220, 54, 6, 87, 162, 248, 28, 155, 61, 162, 98, 172, 31, 161, 249, 104, 236, 96, 150, 214, 152, 123, 169, 245, 32, 203, 212, 135, 139, 218, 252, 186, 100, 114, 176, 30, 43, 61, 151, 138, 3, 159, 152, 252, 222, 68, 34, 93, 85, 58, 173, 126, 149, 209, 121, 216, 174, 183, 238, 81, 98, 9, 252, 213, 57, 175, 78, 141, 69, 161, 39, 42, 176, 27, 26, 154, 137, 205, 163, 4, 51, 207, 13, 121, 36, 208, 123, 40, 210, 237, 109, 230, 68, 215, 229, 181, 245, 101, 93, 162, 24, 106, 6, 139, 22, 137, 75, 159, 75, 210, 212, 86, 17, 241, 79, 15, 108, 213, 14, 166, 158, 209, 164, 164, 84, 13, 220, 245, 108, 96, 184, 139, 252, 146, 222, 222, 132, 223, 38, 98, 202, 36, 190, 41, 178, 226, 132, 224, 255, 2, 57, 44, 88, 12, 218, 84, 182, 211, 197, 93, 107, 169, 151, 161, 21, 110, 1, 252, 40, 220, 186, 253, 14, 197, 171, 82, 203, 209, 127, 122, 135, 65, 132, 176, 16, 82, 8, 173, 206, 153, 9, 216, 49, 40, 233, 139, 136, 115, 230, 212, 16, 169, 123, 178, 110, 240, 10, 57, 21, 51, 209, 25, 61, 245, 88, 5, 93, 105, 253, 123, 213, 92, 113, 188, 200, 78, 142, 64, 47, 20, 244, 4, 105, 0, 201, 206, 6, 127, 212, 233, 69, 49, 57, 92, 0, 72, 74, 12, 137, 68, 165, 69, 177, 196, 99, 238, 115, 39, 173, 59, 155, 157, 121, 213, 6, 131, 93, 35, 29, 171, 238, 58, 181, 84, 138, 51, 124, 254, 191, 9, 122, 124, 254, 197, 204, 103, 41, 23, 156, 71, 134, 49, 91, 58, 101, 167, 98, 251, 155, 168, 242, 117, 44, 160, 64, 64, 23, 105, 231, 146, 32, 216, 248, 137, 152, 251, 17, 104, 207, 249, 59, 159, 226, 9, 123, 1, 205, 1, 158, 225, 64, 5, 135, 137, 157, 117, 146, 253, 184, 210, 60, 223, 237, 159, 38, 97, 146, 131, 33, 110, 14, 61, 69, 214, 186, 13, 184, 142, 118, 128, 208, 139, 210, 47, 34, 133, 55, 171, 255, 131, 13, 100, 146, 95, 128, 229, 200, 49, 87, 36, 33, 208, 33, 2, 75, 210, 84, 159, 236, 171, 167, 241, 45, 209, 139, 114, 238, 64, 114, 203, 122, 161, 134, 190, 58, 28, 178, 67, 53, 24, 26, 198, 66, 16, 65, 210, 28, 43, 68, 134, 68, 47, 160, 148, 194, 99, 224, 208, 142, 0, 6, 238, 208, 147, 168, 45, 5, 48, 143, 235, 120, 143, 121, 164, 143, 254, 77, 228, 130, 85, 235, 208, 9, 233, 115, 110, 89, 74, 75, 250, 57, 103, 78, 174, 99, 105, 63, 71, 168, 171, 156, 233, 111, 167, 154, 245, 185, 174, 150, 63, 103, 222, 15, 235, 238, 169, 137, 173, 166, 247, 81, 131, 72, 175, 236, 75, 203, 231, 238, 75, 85, 67, 73, 127, 48, 73, 44, 60, 188, 193, 114, 140, 237, 112, 121, 102, 12, 6, 131, 203, 45, 5, 5, 44, 237, 3, 222, 3, 7, 168, 156, 201, 87, 227, 40, 238, 103, 164, 181, 115, 75, 219, 158, 210, 16, 59, 25, 105, 176, 139, 94, 109, 149, 2, 2, 219, 143, 233, 60, 136, 228, 174, 8, 216, 80, 230, 151, 197, 78, 159, 143, 132, 125, 229, 245, 30, 100, 23, 170, 31, 233, 196, 79, 112, 247, 14, 17, 181, 162, 209, 221, 18, 229, 73, 164, 179, 253, 9, 106, 87, 189, 18, 151, 80, 137, 238, 168, 163, 2, 9, 154, 159, 146, 207, 205, 64, 224, 11, 233, 204, 135, 65, 133, 207, 25, 5, 216, 168, 149, 153, 173, 150, 212, 20, 246, 29, 17, 58, 209, 125, 141, 47, 231, 79, 218, 101, 149, 23, 229, 28, 45, 158, 201, 224, 101, 145, 4, 51, 50, 247, 83, 56, 28, 187, 248, 29, 61, 50, 84, 227, 188, 104, 246, 199, 232, 1, 58, 27, 196, 127, 101, 105, 29, 230, 160, 71, 195, 31, 162, 172, 188, 110, 40, 0, 145, 71, 243, 133, 109, 198, 13, 11, 152, 88, 65, 66, 229, 2, 86, 234, 132, 29, 36, 85, 120, 8, 177, 93, 77, 74, 98, 137, 95, 68, 47, 233, 71, 108, 27, 155, 54, 75, 77, 167, 144, 236, 133, 122, 224, 241, 13, 216, 222, 62, 195, 145, 113, 245, 182, 137, 249, 101, 29, 156, 93, 93, 98, 216, 255, 44, 97, 193, 249, 151, 19, 9, 111, 99, 234, 217, 4, 54, 87, 93, 198, 231, 236, 16, 234, 133, 104, 195, 11, 185, 39, 188, 115, 198, 117, 175, 208, 229, 1, 168, 157, 105, 17, 209, 175, 30, 20, 99, 187, 180, 44, 233, 72, 143, 182, 19, 179, 19, 9, 151, 189, 126, 165, 155, 123, 150, 195, 26, 41, 194, 150, 13, 195, 214, 24, 238, 54, 62, 229, 51, 132, 114, 145, 69, 145, 206, 64, 208, 18, 216, 96, 85, 62, 176, 228, 190, 163, 213, 39, 113, 218, 62, 89, 195, 227, 89, 51, 21, 2, 194, 34, 44, 168, 24, 55, 167, 49, 10, 43, 174, 222, 229, 109, 79, 27, 210, 32, 166, 9, 37, 204, 250, 3, 23, 141, 112, 76, 40, 24, 206, 213, 155, 48, 77, 230, 128, 53, 156, 19, 219, 175, 182, 201, 128, 52, 76, 24, 70, 177, 228, 182, 84, 193, 94, 219, 91, 116, 189, 52, 58, 249, 107, 193, 91, 80, 9, 93, 119, 248, 37, 198, 125, 234, 142, 230, 202, 183, 243, 227, 159, 8, 192, 8, 84, 177, 188, 242, 186, 96, 210, 8, 218, 209, 191, 248, 62, 189, 200, 66, 85, 237, 133, 117, 151, 132, 125, 40, 29, 68, 16, 72, 190, 150, 19, 75, 20, 9, 38, 101, 132, 87, 236, 2, 83, 131, 220, 225, 68, 78, 138, 173, 252, 18, 23, 215, 25, 19, 45, 201, 81, 175, 112, 171, 55, 42, 180, 70, 142, 162, 58, 159, 199, 253, 255, 192, 177, 7, 53, 150, 52, 0, 189, 139, 189, 184, 99, 57, 208, 24, 159, 104, 131, 67, 227, 160, 85, 9, 42, 68, 88, 240, 101, 114, 107, 64, 10, 199, 231, 25, 177, 106, 59, 183, 54, 175, 162, 108, 189, 127, 19, 16, 52, 199, 114, 157, 224, 18, 252, 138, 161, 4, 120, 132, 43, 118, 170, 182, 239, 104, 237, 161, 224, 164, 16, 146, 73, 246, 63, 52, 239, 132, 82, 25, 107, 86, 249, 76, 139, 186, 197, 58, 183, 195, 127, 43, 133, 39, 142, 53, 103, 194, 198, 92, 208, 143, 212, 28, 7, 215, 190, 70, 58, 110, 210, 37, 193, 240, 102, 30, 58, 108, 149, 190, 169, 42, 179, 130, 54, 184, 233, 78, 240, 51, 50, 197, 254, 29, 17, 21, 243, 128, 235, 19, 58, 238, 206, 202, 54, 179, 63, 204, 77, 186, 72, 97, 10, 17, 162, 12, 218, 183, 16, 253, 150, 113, 34, 8, 13, 130, 56, 99, 154, 126, 42, 170, 158, 57, 28, 46, 182, 212, 228, 176, 120, 142, 254, 69, 96, 83, 87, 63, 54, 118, 46, 4, 26, 50, 139, 94, 245, 147, 68, 12, 94, 219, 98, 10, 232, 96, 90, 181, 55, 29, 121, 2, 233, 83, 71, 167, 157, 10, 91, 130, 195, 208, 50, 202, 176, 135, 244, 251, 41, 137, 245, 34, 208, 185, 206, 186, 114, 12, 95, 13, 46, 9, 96, 42, 233, 10, 244, 221, 203, 96, 59, 0, 238, 21, 137, 5, 195, 126, 29, 103, 248, 155, 165, 182, 56, 224, 88, 116, 13, 33, 97, 169, 61, 126, 107, 44, 49, 37, 74, 69, 42, 215, 187, 62, 46, 242, 202, 81, 234, 141, 185, 107, 216, 67, 151, 245, 248, 163, 210, 4, 177, 167, 110, 152, 243, 54, 202, 115, 250, 195, 235, 36, 8, 189, 14, 112, 143, 181, 58, 134, 134, 62, 172, 24, 25, 181, 17, 148, 193, 218, 66, 23, 111, 2, 165, 55, 74, 227, 34, 75, 73, 180, 30, 222, 199, 96, 136, 99, 102, 192, 44, 68, 125, 166, 186, 239, 131, 29, 212, 23, 88, 214, 19, 24, 105, 211, 136, 189, 156, 37, 29, 192, 9, 169, 173, 156, 182, 46, 189, 99, 57, 120, 156, 160, 233, 57, 145, 56, 75, 235, 103, 42, 128, 52, 41, 175, 201, 248, 30, 239, 54, 174, 200, 83, 4, 224, 199, 34, 170, 252, 241, 40, 190, 73, 114, 216, 232, 243, 191, 76, 58, 36, 16, 121, 251, 156, 182, 80, 163, 179, 98, 96, 183, 217, 87, 195, 218, 183, 217, 71, 58, 87, 149, 148, 182, 56, 217, 197, 73, 142, 96, 69, 213, 217, 115, 149, 102, 182, 124, 148, 109, 20, 204, 209, 121, 94, 13, 18, 141, 65, 153, 54, 94, 173, 238, 253, 187, 209, 223, 166, 194, 249, 173, 96, 1, 46, 238, 248, 39, 17, 242, 188, 155, 213, 177, 118, 211, 162, 201, 215, 136, 176, 137, 14, 232, 201, 49, 221, 203, 55, 249, 75, 230, 210, 158, 184, 138, 197, 134, 8, 219, 145, 109, 50, 8, 129, 48, 118, 214, 181, 153, 118, 125, 54, 10, 213, 210, 210, 132, 14, 176, 221, 125, 189, 79, 0, 217, 164, 187, 232, 85, 141, 184, 85, 110, 27, 101, 91, 37, 151, 20, 91, 16, 111, 1, 81, 230, 85, 212, 214, 149, 6, 71, 206, 180, 68, 72, 106, 83, 169, 232, 19, 162, 90, 128, 253, 108, 4, 30, 95, 239, 209, 202, 181, 42, 250, 224, 84, 52, 212, 169, 92, 150, 165, 59, 131, 102, 212, 211, 200, 107, 38, 151, 35, 98, 163, 31, 143, 122, 15, 7, 42, 19, 209, 244, 11, 37, 240, 26, 234, 5, 215, 32, 55, 165, 244, 22, 54, 153, 119, 145, 30, 10, 219, 241, 169, 120, 114, 246, 76, 253, 196, 110, 194, 33, 226, 66, 225, 116, 13, 218, 179, 194, 211, 211, 185, 127, 254, 41, 250, 7, 20, 84, 54, 116, 213, 122, 51, 64, 40, 146, 117, 237, 88, 205, 136, 65, 82, 243, 144, 144, 78, 146, 208, 216, 95, 92, 92, 194, 132, 179, 0, 106, 252, 243, 169, 86, 69, 184, 183, 121, 207, 100, 41, 212, 222, 192, 167, 20, 157, 48, 99, 165, 197, 138, 91, 210, 174, 112, 63, 151, 149, 88, 64, 47, 106, 154, 215, 31, 86, 13, 7, 66, 95, 235, 195, 19, 191, 82, 40, 171, 137, 40, 190, 199, 131, 247, 48, 220, 109, 220, 67, 177, 120, 217, 191, 56, 84, 28, 58, 189, 36, 54, 217, 225, 196, 119, 246, 217, 130, 137, 124, 65, 42, 208, 219, 76, 210, 204, 235, 155, 162, 126, 190, 108, 13, 116, 176, 190, 4, 212, 24, 156, 213, 175, 253, 226, 7, 53, 99, 211, 22, 152, 84, 84, 154, 62, 15, 176, 220, 21, 228, 221, 107, 172, 177, 185, 91, 91, 146, 19, 217, 10, 174, 10, 203, 92, 245, 95, 10, 119, 2, 116, 142, 119, 163, 103, 209, 117, 107, 34, 43, 189, 73, 10, 50, 154, 44, 216, 23, 163, 166, 132, 88, 255, 211, 92, 193, 62, 64, 157, 253, 180, 187, 55, 57, 249, 236, 31, 204, 9, 103, 213, 161, 72, 170, 141, 94, 84, 221, 84, 130, 36, 172, 75, 96, 4, 192, 15, 46, 42, 114, 86, 81, 16, 196, 1, 58, 176, 232, 109, 67, 70, 227, 167, 44, 176, 74, 135, 199, 144, 139, 97, 215, 223, 41, 229, 205, 189, 135, 101, 227, 71, 236, 202, 3, 96, 182, 167, 174, 8, 133, 244, 71, 137, 81, 215, 100, 108, 138, 212, 220, 156, 0, 15, 171, 188, 193, 45, 97, 220, 252, 24, 174, 115, 235, 227, 34, 238, 28, 120, 163, 255, 45, 143, 20, 28, 228, 185, 172, 19, 136, 124, 233, 142, 28, 206, 183, 96, 4, 133, 10, 72, 68, 173, 1, 150, 186, 113, 35, 36, 118, 74, 91, 210, 49, 111, 160, 221, 250, 213, 232, 200, 76, 30, 208, 119, 216, 172, 109, 208, 210, 33, 182, 125, 242, 3, 9, 229, 7, 109, 236, 63, 40, 24, 136, 83, 7, 39, 57, 0, 92, 116, 81, 138, 14, 66, 33, 43, 26, 191, 177, 211, 34, 68, 204, 19, 38, 56, 118, 175, 53, 247, 21, 174, 37, 216, 72, 208, 93, 152, 95, 174, 21, 39, 200, 89, 140, 182, 32, 42, 160, 9, 246, 216, 92, 148, 199, 97, 147, 129, 204, 90, 193, 146, 220, 7, 9, 210, 136, 120, 112, 24, 173, 162, 251, 85, 125, 164, 193, 27, 194, 3, 98, 234, 150, 240, 92, 144, 224, 70, 153, 41, 197, 93, 58, 53, 79, 92, 36, 156, 143, 154, 64, 104, 198, 73, 55, 134, 7, 242, 18, 102, 249, 138, 27, 191, 35, 160, 91, 19, 181, 197, 37, 225, 162, 189, 253, 222, 240, 27, 51, 235, 22, 211, 164, 87, 127, 183, 168, 216, 13, 109, 190, 240, 243, 214, 250, 1, 83, 79, 90, 38, 3, 125, 96, 10, 69, 171, 13, 60, 57, 97, 61, 2, 15, 135, 255, 0, 141, 85, 99, 63, 5, 78, 98, 58, 72, 22, 191, 31, 12, 82, 45, 52, 202, 193, 18, 183, 129, 187, 73, 136, 35, 237, 17, 119, 60, 163, 243, 219, 96, 83, 222, 123, 128, 156, 157, 27, 2, 81, 217, 22, 223, 13, 208, 131, 68, 181, 206, 8, 224, 108, 227, 97, 88, 28, 188, 47, 71, 40, 110, 212, 142, 132, 152, 123, 129, 163, 16, 92, 82, 87, 108, 114, 11, 26, 131, 100, 185, 121, 185, 216, 77, 207, 204, 104, 72, 19, 179, 236, 99, 235, 217, 62, 175, 163, 44, 22, 255, 3, 152, 140, 217, 37, 8, 58, 108, 80, 241, 84, 179, 12, 109, 119, 37, 85, 16, 235, 199, 192, 196, 189, 229, 79, 214, 140, 205, 205, 186, 176], - [134, 25, 65, 245, 56, 181, 107, 10, 166, 215, 113, 186, 10, 59, 58, 204, 237, 69, 62, 65, 49, 143, 247, 103, 79, 198, 106, 7, 48, 1, 246, 56, 119, 155, 181, 79, 139, 242, 26, 99, 254, 80, 165, 103, 139, 17, 121, 58, 61, 146, 204, 101, 141, 51, 54, 184, 157, 124, 89, 2, 146, 167, 57, 10, 129, 247, 125, 101, 109, 36, 108, 28, 36, 202, 105, 17, 181, 205, 50, 138, 152, 111, 153, 5, 72, 5, 81, 221, 71, 177, 136, 140, 219, 36, 14, 154, 242, 231, 9, 117, 14, 237, 122, 198, 146, 56, 173, 231, 245, 184, 34, 135, 242, 4, 248, 84, 68, 35, 19, 154, 19, 127, 202, 86, 165, 124, 197, 54, 112, 223, 251, 229, 238, 33, 46, 169, 69, 35, 123, 5, 201, 138, 214, 198, 235, 187, 163, 218, 237, 249, 186, 230, 245, 31, 235, 150, 150, 69, 77, 23, 3, 199, 189, 128, 127, 23, 193, 30, 142, 75, 15, 195, 255, 9, 64, 213, 54, 232, 229, 40, 115, 144, 128, 65, 240, 133, 145, 30, 210, 178, 21, 90, 50, 5, 155, 237, 142, 207, 122, 29, 253, 1, 95, 88, 86, 188, 67, 41, 218, 185, 69, 44, 68, 54, 42, 245, 181, 36, 227, 175, 113, 210, 230, 216, 109, 33, 123, 255, 113, 106, 56, 151, 248, 232, 18, 56, 198, 208, 134, 166, 96, 55, 230, 0, 89, 146, 249, 207, 18, 40, 59, 240, 251, 206, 78, 45, 78, 193, 35, 43, 60, 148, 116, 76, 201, 151, 43, 143, 169, 91, 197, 108, 58, 188, 54, 7, 112, 86, 225, 189, 62, 194, 2, 204, 46, 41, 130, 136, 135, 126, 101, 41, 68, 122, 140, 167, 225, 167, 247, 240, 128, 53, 142, 100, 82, 25, 193, 226, 6, 196, 210, 76, 11, 18, 65, 213, 55, 24, 218, 19, 246, 33, 215, 231, 56, 30, 218, 217, 1, 138, 129, 39, 254, 148, 68, 166, 166, 247, 33, 178, 207, 163, 215, 53, 130, 154, 202, 238, 133, 6, 208, 156, 78, 128, 250, 158, 48, 140, 167, 141, 101, 133, 167, 121, 65, 229, 168, 197, 30, 6, 70, 169, 112, 212, 70, 120, 245, 255, 53, 190, 36, 130, 29, 129, 42, 170, 220, 13, 163, 201, 182, 109, 106, 23, 194, 19, 48, 154, 243, 106, 104, 210, 12, 44, 247, 202, 92, 129, 119, 137, 228, 82, 250, 19, 48, 32, 24, 66, 26, 99, 67, 116, 96, 90, 170, 178, 179, 69, 224, 79, 255, 151, 85, 113, 80, 249, 126, 190, 189, 120, 188, 89, 53, 204, 125, 72, 197, 17, 8, 159, 71, 96, 158, 115, 38, 246, 223, 40, 159, 110, 61, 67, 119, 207, 145, 244, 230, 77, 53, 74, 185, 86, 63, 73, 218, 79, 60, 106, 5, 33, 215, 15, 175, 181, 2, 156, 32, 167, 253, 5, 115, 135, 6, 106, 200, 152, 87, 199, 247, 247, 154, 13, 136, 181, 223, 97, 185, 19, 36, 118, 246, 118, 7, 66, 182, 30, 82, 38, 183, 154, 56, 116, 156, 129, 53, 241, 63, 86, 152, 7, 142, 122, 156, 201, 162, 95, 24, 27, 167, 115, 186, 251, 47, 159, 19, 125, 151, 99, 222, 197, 181, 145, 137, 1, 247, 34, 102, 254, 202, 95, 211, 201, 54, 170, 89, 63, 156, 123, 173, 41, 117, 169, 153, 255, 153, 132, 6, 82, 119, 241, 249, 75, 118, 30, 77, 121, 153, 113, 12, 222, 170, 175, 12, 3, 148, 121, 175, 170, 168, 137, 178, 175, 58, 157, 79, 38, 231, 42, 54, 91, 30, 202, 57, 37, 158, 24, 183, 19, 6, 175, 206, 234, 113, 61, 177, 180, 205, 143, 36, 199, 179, 189, 212, 95, 60, 125, 213, 2, 65, 65, 47, 206, 34, 101, 18, 12, 111, 162, 156, 208, 228, 237, 105, 10, 45, 71, 75, 126, 249, 58, 33, 105, 64, 148, 193, 35, 63, 163, 240, 13, 218, 95, 86, 66, 200, 157, 10, 194, 212, 203, 10, 77, 72, 114, 82, 80, 232, 67, 231, 215, 78, 140, 230, 210, 227, 161, 229, 160, 161, 30, 0, 77, 173, 131, 88, 57, 249, 17, 219, 149, 149, 38, 199, 247, 164, 185, 143, 195, 246, 124, 98, 87, 90, 131, 183, 240, 236, 3, 250, 122, 224, 241, 237, 13, 233, 78, 76, 10, 152, 246, 100, 164, 111, 163, 246, 101, 39, 185, 159, 191, 234, 248, 253, 138, 195, 131, 80, 204, 127, 122, 13, 149, 97, 253, 95, 224, 47, 35, 3, 71, 201, 132, 175, 165, 157, 189, 91, 192, 129, 98, 180, 18, 158, 52, 180, 252, 181, 122, 30, 77, 102, 34, 193, 119, 182, 235, 193, 115, 140, 62, 236, 128, 135, 219, 68, 111, 44, 173, 173, 148, 114, 105, 180, 62, 220, 22, 229, 252, 58, 33, 151, 153, 105, 244, 177, 55, 240, 14, 127, 28, 205, 226, 191, 158, 42, 5, 168, 36, 19, 114, 173, 111, 113, 147, 99, 88, 97, 13, 53, 98, 95, 130, 133, 31, 216, 244, 114, 192, 166, 163, 134, 208, 2, 169, 45, 153, 138, 3, 122, 224, 112, 168, 9, 52, 15, 89, 253, 79, 229, 254, 204, 55, 242, 100, 197, 206, 46, 88, 182, 119, 70, 9, 66, 241, 131, 38, 164, 190, 196, 190, 70, 109, 71, 109, 133, 134, 122, 24, 64, 151, 181, 41, 117, 83, 36, 47, 192, 229, 116, 227, 77, 0, 94, 131, 162, 143, 51, 237, 95, 15, 90, 44, 122, 250, 81, 15, 173, 109, 235, 97, 53, 93, 156, 150, 9, 156, 122, 98, 252, 213, 169, 236, 204, 110, 102, 55, 136, 141, 27, 137, 147, 148, 32, 25, 63, 224, 234, 253, 7, 142, 191, 9, 125, 73, 27, 130, 121, 192, 120, 251, 90, 94, 14, 151, 146, 248, 61, 213, 46, 54, 50, 116, 204, 159, 79, 2, 51, 127, 24, 186, 103, 136, 248, 185, 135, 77, 124, 93, 205, 2, 86, 237, 65, 95, 80, 22, 169, 132, 123, 230, 201, 157, 195, 67, 36, 231, 111, 15, 100, 248, 141, 206, 130, 61, 88, 196, 229, 67, 238, 104, 190, 52, 161, 208, 173, 253, 3, 114, 15, 3, 111, 112, 189, 96, 130, 145, 142, 194, 245, 234, 45, 47, 76, 191, 248, 224, 167, 205, 117, 170, 89, 31, 130, 176, 51, 133, 21, 163, 194, 182, 202, 152, 171, 179, 58, 175, 134, 251, 131, 224, 106, 133, 165, 151, 33, 30, 80, 243, 67, 212, 93, 253, 230, 189, 222, 163, 108, 220, 2, 28, 126, 246, 165, 104, 222, 174, 113, 10, 42, 169, 212, 166, 195, 185, 76, 104, 175, 253, 141, 226, 241, 117, 229, 224, 188, 189, 52, 160, 82, 127, 102, 137, 93, 229, 190, 165, 116, 165, 205, 195, 119, 116, 86, 245, 197, 39, 25, 209, 80, 164, 184, 95, 224, 156, 254, 104, 34, 45, 168, 109, 162, 255, 22, 92, 63, 78, 10, 101, 190, 248, 237, 66, 180, 66, 9, 195, 6, 96, 157, 220, 41, 127, 59, 172, 234, 161, 180, 37, 176, 31, 21, 81, 14, 174, 132, 168, 200, 229, 5, 61, 52, 243, 194, 106, 133, 215, 98, 190, 79, 100, 146, 12, 68, 55, 2, 235, 142, 38, 0, 101, 100, 233, 178, 79, 126, 79, 189, 176, 252, 188, 196, 198, 156, 95, 88, 133, 215, 80, 234, 125, 201, 127, 225, 182, 105, 101, 195, 184, 108, 143, 134, 67, 15, 103, 155, 224, 151, 145, 9, 51, 20, 59, 96, 187, 49, 142, 144, 231, 178, 227, 49, 61, 129, 108, 46, 69, 46, 45, 201, 183, 42, 201, 70, 222, 240, 43, 145, 44, 210, 93, 125, 89, 92, 32, 102, 4, 61, 251, 121, 174, 147, 131, 194, 13, 210, 7, 156, 86, 178, 36, 5, 108, 227, 74, 253, 143, 214, 134, 210, 235, 69, 207, 234, 166, 249, 84, 67, 165, 10, 57, 147, 198, 205, 102, 209, 97, 25, 153, 71, 225, 15, 25, 80, 151, 81, 57, 108, 215, 51, 222, 215, 201, 235, 6, 75, 127, 163, 220, 138, 238, 196, 229, 37, 119, 182, 182, 152, 239, 95, 71, 200, 71, 242, 118, 67, 3, 106, 21, 153, 250, 240, 110, 211, 22, 234, 198, 145, 156, 253, 45, 191, 203, 64, 177, 71, 167, 214, 165, 104, 82, 154, 95, 49, 65, 93, 137, 208, 102, 85, 54, 1, 38, 72, 166, 57, 91, 129, 111, 105, 75, 173, 214, 190, 248, 18, 110, 128, 140, 194, 128, 8, 138, 74, 107, 212, 138, 35, 53, 85, 144, 236, 12, 134, 221, 57, 201, 204, 54, 215, 79, 49, 193, 205, 240, 45, 24, 166, 76, 2, 171, 150, 49, 55, 19, 115, 29, 61, 94, 48, 171, 1, 141, 116, 159, 187, 196, 245, 142, 134, 74, 232, 186, 213, 49, 128, 171, 145, 239, 55, 247, 80, 243, 197, 208, 187, 24, 167, 122, 91, 88, 190, 176, 149, 95, 7, 71, 0, 113, 200, 141, 127, 89, 122, 187, 193, 246, 137, 102, 20, 94, 67, 164, 5, 241, 112, 126, 129, 8, 71, 85, 9, 88, 167, 187, 239, 127, 38, 73, 204, 123, 141, 197, 97, 18, 79, 33, 140, 70, 71, 242, 13, 1, 219, 6, 13, 143, 208, 228, 213, 54, 217, 146, 0, 233, 202, 108, 149, 208, 95, 4, 237, 105, 0, 113, 47, 7, 189, 245, 76, 36, 13, 225, 5, 134, 220, 169, 124, 181, 8, 230, 184, 43, 4, 83, 224, 189, 158, 121, 197, 5, 224, 189, 243, 183, 239, 65, 15, 153, 111, 147, 70, 60, 49, 152, 34, 203, 112, 221, 43, 170, 164, 63, 179, 12, 142, 210, 254, 112, 110, 191, 217, 252, 27, 175, 21, 224, 62, 36, 78, 217, 10, 141, 26, 203, 130, 242, 245, 6, 51, 48, 232, 149, 2, 65, 249, 86, 70, 6, 153, 0, 95, 215, 6, 190, 99, 49, 225, 113, 82, 49, 212, 95, 32, 202, 163, 50, 16, 36, 66, 138, 231, 13, 235, 192, 179, 60, 122, 66, 20, 16, 230, 105, 151, 82, 215, 146, 114, 152, 69, 211, 90, 25, 199, 120, 11, 179, 88, 168, 46, 145, 3, 148, 88, 126, 192, 33, 247, 172, 115, 192, 15, 161, 26, 202, 203, 44, 160, 249, 181, 156, 141, 192, 135, 149, 162, 166, 197, 12, 46, 112, 129, 247, 169, 80, 162, 76, 65, 218, 89, 168, 71, 135, 203, 109, 240, 141, 64, 251, 151, 61, 206, 252, 61, 220, 8, 56, 80, 148, 73, 85, 31, 89, 182, 13, 254, 229, 116, 138, 136, 242, 209, 15, 246, 211, 238, 42, 143, 198, 20, 58, 171, 195, 45, 75, 190, 37, 8, 49, 153, 229, 83, 109, 19, 255, 167, 70, 29, 223, 235, 104, 125, 145, 97, 155, 206, 192, 79, 41, 137, 230, 170, 59, 242, 184, 38, 179, 35, 56, 33, 133, 54, 252, 42, 82, 190, 45, 120, 231, 148, 219, 115, 62, 220, 196, 76, 21, 16, 153, 108, 39, 202, 55, 147, 151, 238, 22, 89, 103, 175, 156, 244, 37, 36, 253, 3, 19, 3, 80, 185, 25, 11, 128, 144, 76, 26, 45, 33, 102, 28, 133, 125, 36, 180, 139, 220, 49, 202, 21, 59, 190, 135, 22, 82, 229, 162, 206, 50, 220, 114, 24, 218, 25, 22, 19, 5, 109, 20, 30, 10, 186, 227, 0, 5, 136, 0, 182, 58, 229, 217, 119, 148, 3, 253, 39, 177, 205, 162, 8, 75, 182, 8, 235, 170, 71, 77, 90, 5, 103, 131, 55, 145, 198, 44, 100, 60, 63, 252, 168, 222, 132, 84, 31, 190, 40, 103, 32, 206, 138, 7, 252, 208, 48, 126, 179, 128, 10, 139, 227, 127, 50, 121, 68, 154, 77, 22, 136, 0, 44, 81, 93, 181, 135, 251, 234, 233, 196, 142, 107, 124, 52, 218, 200, 13, 206, 73, 215, 181, 36, 138, 49, 7, 88, 253, 140, 189, 56, 124, 87, 96, 183, 101, 232, 108, 118, 177, 115, 89, 37, 155, 45, 106, 223, 208, 100, 27, 235, 176, 141, 223, 162, 143, 249, 17, 237, 49, 138, 209, 10, 57, 238, 48, 124, 148, 239, 199, 57, 155, 12, 37, 124, 38, 117, 66, 125, 215, 9, 142, 153, 20, 133, 200, 129, 84, 207, 63, 85, 191, 66, 251, 132, 92, 231, 24, 171, 131, 177, 201, 29, 75, 149, 115, 111, 134, 243, 220, 203, 81, 6, 214, 127, 125, 20, 4, 113, 246, 19, 76, 83, 38, 217, 135, 130, 180, 74, 82, 167, 124, 224, 247, 250, 108, 1, 155, 188, 180, 142, 13, 129, 194, 233, 248, 240, 59, 185, 231, 49, 191, 42, 237, 46, 219, 133, 8, 162, 100, 222, 197, 232, 234, 204, 90, 126, 54, 81, 164, 29, 160, 214, 49, 73, 166, 37, 50, 202, 168, 70, 27, 236, 132, 191, 88, 114, 10, 75, 181, 191, 238, 104, 158, 138, 40, 36, 212, 53, 53, 140, 159, 42, 123, 73, 82, 64, 64, 76, 114, 75, 42, 168, 164, 206, 205, 207, 52, 225, 107, 6, 144, 203, 134, 52, 237, 91, 235, 250, 176, 95, 166, 111, 101, 59, 139, 100, 75, 113, 255, 165, 43, 34, 116, 66, 4, 129, 223, 201, 135, 96, 141, 197, 159, 129, 9, 163, 44, 115, 18, 69, 62, 111, 255, 27, 56, 74, 228, 191, 218, 234, 221, 91, 226, 154, 48, 64, 35, 131, 32, 172, 119, 27, 153, 24, 100, 151, 37, 35, 182, 200, 47, 247, 189, 40, 83, 127, 178, 177, 126, 110, 242, 55, 250, 83, 186, 58, 183, 44, 169, 72, 85, 94, 88, 100, 224, 80, 110, 174, 39, 59, 93, 211, 211, 232, 229, 54, 213, 17, 135, 100, 77, 221, 239, 88, 84, 53, 254, 105, 255, 16, 187, 163, 33, 77, 105, 179, 123, 60, 57, 44, 211, 243, 169, 228, 93, 59, 127, 4, 113, 238, 36, 132, 170, 61, 36, 18, 47, 233, 137, 34, 22, 220, 24, 225, 31, 127, 253, 233, 4, 143, 23, 90, 251, 45, 226, 20, 203, 251, 25, 101, 205, 29, 141, 34, 222, 153, 68, 250, 45, 148, 43, 244, 55, 87, 169, 20, 235, 129, 142, 158, 75, 190, 109, 131, 196, 13, 180, 238, 28, 243, 46, 228, 5, 198, 32, 27, 249, 81, 46, 82, 254, 104, 32, 167, 59, 73, 56, 15, 117, 141, 246, 117, 192, 161, 97, 167, 33, 94, 84, 73, 8, 252, 55, 164, 181, 164, 90, 189, 204, 109, 26, 88, 182, 158, 219, 134, 62, 222, 2, 56, 66, 96, 57, 90, 72, 203, 176, 53, 148, 202, 212, 187, 85, 123, 47, 158, 74, 133, 231, 189, 210, 167, 208, 196, 130, 152, 111, 240, 78, 232, 135, 252, 109, 17, 202, 75, 141, 78, 84, 241, 101, 99, 133, 241, 238, 118, 197, 250, 72, 187, 98, 185, 82, 6, 9, 124, 181, 17, 93, 208, 186, 84, 181, 176, 182, 62, 59, 159, 211, 92, 75, 183, 167, 56, 131, 22, 94, 251, 129, 195, 19, 23, 87, 6, 7, 29, 189, 156, 108, 184, 96, 99, 22, 32, 140, 156, 116, 17, 115, 186, 43, 113, 165, 151, 92, 110, 252, 210, 57, 114, 13, 186, 76, 200, 239, 123, 223, 125, 100, 171, 144, 107, 131, 221, 23, 18, 149, 123, 242, 94, 174, 234, 70, 212, 97, 232, 55, 141, 160, 195, 210, 53, 233, 34, 252, 190, 94, 215, 247, 211, 227, 175, 134, 162, 64, 249, 83, 98, 193, 142, 207, 152, 90, 187, 105, 60, 193, 50, 194, 11, 140, 127, 150, 209, 155, 168, 245, 211, 251, 177, 8, 223, 79, 23, 18, 214, 120, 34, 55, 62, 246, 253, 0, 125, 226, 249, 128, 164, 224, 177, 97, 62, 224, 148, 161, 162, 179, 30, 92, 106, 230, 139, 243, 238, 69, 229, 196, 124, 136, 190, 227, 11, 187, 6, 193, 113, 167, 228, 95, 113, 18, 162, 234, 219, 225, 228, 96, 186, 16, 31, 106, 246, 86, 184, 37, 77, 41, 82, 249, 5, 10, 181, 59, 25, 163, 101, 13, 175, 50, 168, 158, 14, 84, 140, 94, 59, 151, 2, 148, 171, 188, 12, 40, 209, 215, 82, 170, 219, 118, 234, 115, 41, 185, 213, 250, 126, 1, 3, 72, 102, 75, 98, 77, 80, 15, 161, 23, 195, 194, 75, 144, 175, 148, 239, 148, 222, 78, 167, 4, 196, 243, 18, 232, 170, 59, 103, 160, 157, 5, 180, 133, 128, 235, 108, 236, 130, 33, 162, 8, 20, 215, 48, 55, 65, 7, 201, 185, 148, 249, 61, 174, 103, 157, 42, 193, 12, 106, 181, 103, 139, 193, 137, 251, 185, 109, 163, 212, 13, 218, 148, 232, 128, 186, 15, 159, 17, 191, 42, 238, 31, 115, 241, 129, 181, 0, 75, 142, 49, 209, 27, 122, 201, 73, 113, 214, 57, 3, 209, 24, 136, 196, 33, 201, 128, 70, 188, 75, 15, 0, 64, 230, 191, 200, 50, 233, 26, 202, 219, 201, 251, 149, 234, 170, 253, 49, 153, 18, 108, 112, 89, 59, 116, 213, 76, 215, 205, 199, 32, 130, 74, 133, 255, 243, 96, 176, 45, 67, 251, 50, 173, 73, 46, 69, 174, 104, 231, 142, 207, 5, 82, 233, 253, 51, 13, 104, 28, 133, 67, 240, 112, 226, 50, 60, 89, 251, 127, 239, 201, 59, 18, 165, 116, 173, 241, 236, 56, 86, 105, 215, 41, 119, 163, 92, 161, 152, 41, 53, 251, 166, 250, 149, 91, 59, 45, 64, 83, 72, 197, 98, 219, 109, 118, 10, 83, 108, 32, 254, 54, 178, 209, 142, 242, 206, 23, 15, 141, 77, 92, 157, 109, 179, 89, 29, 71, 198, 17, 101, 72, 67, 213, 186, 77, 245, 194, 205, 131, 69, 64, 60, 35, 232, 95, 248, 248, 250, 255, 185, 197, 9, 42, 230, 57, 117, 172, 244, 8, 51, 109, 174, 152, 21, 206, 185, 254, 63, 144, 126, 201, 195, 153, 79, 85, 148, 64, 147, 196, 22, 131, 209, 176, 206, 188, 111, 124, 125, 250, 41, 111, 35, 193, 75, 200, 109, 225, 190, 251, 119, 176, 83, 18, 117, 252, 202, 126, 220, 11, 119, 238, 198, 218, 240, 249, 156, 192, 13, 131, 101, 145, 216, 215, 106, 108, 225, 216, 131, 35, 199, 106, 91, 177, 140, 91, 108, 187, 139, 193, 66, 29, 209, 78, 91, 55, 3, 165, 234, 142, 107, 235, 114, 37, 228, 125, 164, 234, 41, 141, 141, 50, 183, 13, 247, 188, 215, 47, 84, 125, 155, 48, 225, 169, 25, 148, 164, 212, 110, 70, 188, 4, 31, 176, 242, 12, 91, 187, 127, 130, 154, 34, 183, 228, 101, 127, 103, 252, 246, 110, 71, 35, 184, 198, 116, 190, 222, 254, 9, 247, 102, 250, 144, 232, 40, 171, 234, 178, 202, 97, 16, 179, 130, 79, 192, 96, 152, 63, 210, 99, 105, 152, 238, 199, 208, 11, 117, 34, 142, 34, 16, 25, 157, 106, 106, 58, 4, 189, 13, 166, 96, 223, 151, 216, 198, 151, 19, 104, 180, 6, 231, 191, 34, 102, 244, 5, 62, 43, 39, 98, 80, 195, 127, 228, 94, 63, 215, 26, 32, 218, 23, 40, 157, 218, 191, 176, 182, 158, 179, 105, 85, 239, 102, 49, 68, 204, 222, 34, 165, 239, 94, 28, 249, 157, 155, 140, 55, 142, 92, 232, 40, 158, 170, 84, 133, 8, 239, 83, 159, 92, 185, 198, 23, 105, 64, 192, 73, 132, 13, 235, 117, 0, 242, 15, 212, 247, 8, 105, 39, 152, 137, 176, 80, 164, 223, 133, 153, 86, 46, 144, 201, 69, 146, 4, 255, 183, 36, 104, 180, 254, 18, 76, 211, 3, 201, 154, 50, 134, 24, 233, 243, 30, 49, 3, 45, 100, 88, 226, 125, 175, 45, 43, 217, 81, 157, 151, 158, 191, 86, 191, 122, 48, 232, 224, 154, 181, 30, 192, 99, 32, 186, 190, 168, 44, 234, 75, 127, 219, 135, 146, 253, 53, 160, 13, 144, 181, 113, 74, 200, 189, 46, 54, 125, 14, 140, 203, 81, 132, 13, 211, 176, 201, 249, 247, 84, 118, 60, 199, 197, 3, 240, 21, 17, 68, 60, 212, 146, 168, 36, 204, 96, 44, 96, 28, 190, 234, 83, 82, 166, 179, 175, 56, 46, 210, 45, 178, 7, 192, 165, 214, 193, 156, 195, 163, 195, 73, 88, 136, 36, 154, 58, 0, 208, 248, 77, 168, 195, 3, 168, 103, 146, 219, 42, 215, 175, 38, 183, 89, 44, 237, 20, 223, 247, 129, 209, 234, 133, 113, 148, 208, 208, 55, 19, 199, 0, 31, 192, 99, 112, 208, 190, 1, 98, 227, 234, 163, 135, 88, 165, 162, 66, 165, 48, 49, 122, 65, 31, 142, 61, 218, 127, 252, 78, 43, 235, 57, 178, 160, 11, 57, 221, 60, 231, 54, 55, 168, 142, 228, 162, 142, 56, 40, 127, 114, 39, 167, 164, 157, 251, 221, 17, 99, 49, 231, 212, 147, 48, 37, 164, 201, 104, 106, 33, 5, 160, 249, 7, 105, 121, 53, 43, 45, 23, 108, 61, 244, 199, 2, 88, 105, 154, 104, 22, 30, 239, 224, 97, 183, 251, 148, 191, 155, 104, 155, 36, 116, 75, 58, 219, 100, 234, 4, 200, 147, 184, 169, 41, 151, 47, 205, 119, 113, 180, 247, 140, 106, 211, 157, 93, 23, 184, 229, 251, 157, 126, 53, 245, 27, 208, 182, 205, 248, 86, 91, 175, 221, 125, 214, 124, 75, 226, 26, 76, 228, 182, 24, 46, 78, 51, 30, 53, 214, 134, 130, 163, 189, 61, 226, 222, 254, 255, 156, 233, 18, 254, 44, 109, 209, 38, 208, 56, 232, 88, 222, 73, 115, 247, 186, 92, 243, 139, 74, 86, 221, 236, 216, 120, 109, 247, 24, 225, 5, 1, 117, 128, 79, 20, 59, 95, 152, 186, 222, 18, 219, 215, 87, 252, 46, 244, 10, 55, 152, 204, 6, 28, 159, 83, 26, 173, 151, 176, 69, 178, 55, 248, 11, 195, 16, 18, 248, 222, 17, 113, 9, 82, 41, 13, 43, 187, 23, 167, 65, 143, 148, 119, 139, 113, 119, 192, 104, 11, 113, 73, 174, 214, 136, 87, 16, 224, 142, 136, 238, 144, 89, 66, 112, 112, 228, 230, 192, 169, 143, 95, 233, 192, 170, 140, 139, 186, 5, 238, 66, 172, 182, 246, 196, 232, 203, 141, 169, 230, 49, 222, 124, 91, 78, 97, 197, 30, 87, 149, 124, 254, 12, 32, 11, 76, 131, 215, 55, 6, 110, 178, 150, 23, 2, 197, 41, 18, 43, 30, 106, 77, 254, 174, 8, 253, 95, 91, 94, 210, 247, 49, 190, 66, 237, 144, 9, 235, 14, 167, 151, 29, 106, 205, 234, 191, 183, 167, 9, 20, 5, 247, 243, 103, 181, 66, 181, 45, 168, 104, 92, 19, 48, 18, 87, 57, 125, 128, 200, 25, 121, 182, 176, 71, 220, 155, 82, 127, 213, 192, 26, 198, 168, 29, 82, 138, 152, 213, 96, 21, 56, 130, 216, 92, 147, 215, 214, 73, 248, 237, 131, 102, 157, 51, 25, 115, 164, 42, 57, 96, 3, 232, 111, 127, 215, 92, 33, 23, 91, 193, 226, 209, 72, 165, 220, 43, 57, 0, 196, 12, 89, 18, 27, 26, 218, 204, 132, 69, 113, 194, 205, 175, 24, 123, 15, 139, 61, 174, 221, 139, 237, 100, 43, 154, 139, 58, 248, 54, 74, 232, 93, 192, 71, 23, 111, 183, 72, 213, 147, 29, 94, 235, 112, 165, 106, 58, 98, 58, 118, 16, 36, 195, 156, 203, 116, 139, 193, 104, 238, 134, 71, 58, 147, 251, 69, 133, 126, 112, 110, 140, 30, 104, 63, 27, 93, 60, 178, 4, 140, 18, 225, 66, 138, 131, 217, 249, 186, 197, 248, 21, 93, 108, 89, 154, 134, 13, 217, 11, 8, 181, 105, 212, 115, 50, 0, 193, 127, 240, 208, 11, 138, 187, 52, 192, 114, 170, 196, 247, 17, 58, 72, 48, 224, 109, 92, 73, 27, 58, 64, 30, 163, 169, 152, 97, 79, 56, 164, 58, 119, 206, 136, 173, 26, 197, 179, 102, 177, 52, 22, 6, 99, 219, 172, 210, 194, 23, 66, 174, 204, 237, 212, 252, 200, 63, 170, 253, 220, 39, 177, 214, 157, 250, 174, 107, 181, 203, 92, 227, 221, 50, 98, 239, 157, 149, 128, 77, 137, 45, 58, 119, 92, 176, 120, 8, 228, 84, 136, 81, 164, 195, 45, 226, 244, 37, 34, 221, 226, 66, 204, 71, 186, 161, 112, 113, 121, 17, 112, 209, 36, 244, 62, 9, 238, 140, 208, 50, 39, 223, 160, 241, 232, 89, 66, 221, 20, 130, 11, 53, 245, 67, 35, 60, 161, 167, 19, 81, 62, 46, 14, 77, 129, 215, 57, 44, 233, 177, 43, 42, 253, 126, 176, 118, 88, 174, 5, 209, 106, 7, 110, 10, 96, 106, 20, 227, 163, 31, 197, 146, 136, 96, 197, 136, 55, 246, 224, 67, 90, 72, 58, 138, 82, 17, 13, 145, 121, 11, 23, 1, 193, 218, 7, 220, 34, 154, 207, 192, 16, 171, 19, 155, 205, 158, 11, 112, 94, 156, 187, 99, 198, 50, 210, 7, 2, 28, 36, 93, 15, 5, 151, 235, 198, 186, 65, 30, 125, 174, 31, 59, 150, 27, 240, 180, 124, 47, 210, 231, 19, 82, 114, 163, 10, 114, 19, 37, 79, 20, 76, 161, 32, 177, 235, 113, 199, 227, 51, 121, 75, 47, 47, 215, 203, 92, 182, 211, 124, 102, 49, 164, 244, 4, 85, 197, 201, 82, 105, 241, 68, 97, 76, 17, 201, 139, 32, 21, 14, 58, 238, 57, 97, 104, 90, 139, 126, 29, 14, 25, 2, 209, 62, 186, 87, 85, 219, 39, 181, 25, 18, 79, 119, 164, 58, 131, 187, 91, 169, 194, 63, 236, 46, 36, 207, 249, 107, 222, 88, 87, 3, 171, 243, 103, 244, 192, 10, 221, 117, 60, 224, 157, 71, 51, 84, 34, 155, 178, 36, 39, 243, 164, 70, 247, 127, 41, 213, 110, 124, 41, 233, 48, 140, 84, 217, 243, 249, 177, 43, 165, 94, 242, 145, 149, 223, 77, 198, 204, 54, 17, 123, 200, 142, 73, 136, 69, 114, 142, 210, 124, 230, 58, 228, 251, 112, 171, 86, 46, 219, 208, 220, 22, 85, 159, 188, 84, 40, 110, 255, 40, 122, 225, 239, 183, 57, 223, 111, 133, 208, 206, 135, 52, 250, 232, 108, 203, 211, 191, 48, 253, 13, 101, 90, 149, 166, 145, 92, 111, 238, 162, 226, 239, 184, 97, 166, 114, 203, 216, 228, 161, 143, 136, 132, 129, 20, 37, 230, 174, 174, 153, 100, 239, 58, 81, 86, 150, 202, 57, 72, 218, 225, 226, 121, 69, 199, 225, 18, 115, 7, 104, 221, 93, 181, 202, 230, 128, 126, 198, 143, 224, 230, 229, 186, 38, 226, 56, 255, 98, 14, 215, 199, 156, 147, 122, 40, 23, 18, 72, 29, 163, 242, 255, 247, 112, 236, 86, 209, 90, 208, 228, 53, 172, 225, 20, 93, 112, 101, 61, 93, 79, 6, 111, 172, 166, 126, 113, 81, 206, 6, 163, 43, 224, 36, 61, 189, 229, 202, 124, 236, 243, 249, 144, 238, 133, 121, 42, 154, 144, 242, 46, 186, 4, 253, 244, 248, 171, 5, 140, 177, 159, 111, 234, 95, 77, 214, 172, 186, 157, 105, 242, 157, 77, 254, 220, 78, 72, 36, 169, 10, 117, 207, 8, 122, 51, 153, 242, 174, 150, 221, 113, 226, 51, 22, 59, 251, 105, 97, 200, 10, 206, 241, 58, 42, 107, 165, 49, 116, 145, 199, 12, 184, 51, 236, 72, 1, 184, 200, 185, 8, 90, 198, 68, 14, 15, 181, 29, 234, 220, 49, 89, 197, 142, 179, 169, 66, 131, 201, 4, 157, 40, 22, 102, 248, 161, 80, 120, 98, 65, 232, 205, 193, 201, 97, 250, 254, 28, 195, 143, 229, 152, 4, 251, 55, 91, 184, 47, 246, 115, 252, 36, 138, 15, 231, 177, 26, 59, 138, 87, 156, 200, 217, 189, 139, 54, 228, 112, 132, 186, 180, 31, 22, 234, 54, 156, 189, 77, 153, 193, 239, 254, 206, 246, 68, 237, 206, 129, 100, 197, 158, 121, 80, 213, 165, 233, 157, 185, 1, 133, 13, 253, 197, 221, 98, 73, 144, 117, 150, 157, 72, 31, 134, 251, 65, 0, 46, 121, 121, 93, 187, 137, 39, 212, 97, 133, 79, 255, 165, 96, 166, 63, 105, 148, 89, 147, 218, 4, 97, 98, 219, 205, 132, 235, 215, 227, 131, 249, 118, 31, 160, 106, 16, 141, 219, 135, 38, 18, 37, 23, 246, 165, 211, 99, 160, 106, 156, 251, 138, 182, 212, 59, 151, 223, 202, 30, 135, 159, 4, 106, 88, 38, 228, 139, 69, 137, 206, 19, 166, 104, 94, 13, 240, 109, 254, 247, 1, 7, 48, 91, 230, 130, 24, 117, 207, 117, 247, 65, 28, 149, 63, 248, 88, 6, 12, 254, 165, 227, 64, 232, 220, 80, 15, 160, 53, 217, 100, 22, 143, 159, 56, 122, 199, 43, 12, 7, 26, 180, 129, 27, 187, 116, 211, 249, 11, 95, 235, 132, 183, 210, 61, 167, 253, 251, 146, 39, 218, 107, 85, 131, 17, 82, 154, 33, 70, 255, 230, 231, 128, 178, 96, 154, 52, 41, 255, 172, 82, 188, 163, 46, 115, 21, 53, 108, 84, 52, 37, 202, 62, 120, 254, 186, 248, 87, 47, 73, 69, 134, 74, 68, 39, 91, 42, 188, 8, 18, 49, 224, 193, 51, 52, 23, 22, 19, 175, 79, 55, 101, 75, 1, 206, 50, 167, 106, 179, 111, 217, 107, 182, 26, 119, 79, 217, 161, 32, 211, 34, 207, 122, 235, 196, 57, 23, 183, 145, 131, 20, 3, 237, 60, 202, 136, 57, 145, 241, 229, 233, 37, 0, 14, 140, 184, 220, 95, 138, 43, 241, 16, 49, 148, 146, 185, 3, 104, 232, 94, 45, 160, 128, 183, 25, 45, 85, 69, 138, 183, 79, 194, 143, 122, 152, 90, 70, 75, 176, 33, 178, 201, 58, 107, 37, 55, 192, 78, 167, 174, 64, 248, 57, 36, 22, 230, 80, 17, 141, 120, 43, 31, 115, 162, 6, 78, 142, 169, 229, 59, 118, 119, 75, 193, 135, 35, 169, 155, 81, 94, 85, 201, 36, 192, 175, 190, 110, 194, 213, 179, 244, 208, 234, 30, 192, 252, 182, 207, 157, 5, 154, 123, 34, 54, 204, 163, 162, 46, 222, 1, 116, 193, 49, 103, 225, 72, 17, 203, 74, 104, 127, 206, 144, 4, 23, 238, 125, 127, 165, 81, 162, 130, 18, 246, 73, 105, 103, 53, 101, 127, 1, 23, 235, 128, 94, 198, 39, 216, 6, 71, 20, 177, 148, 188, 118, 24, 131, 12, 1, 162, 116, 95, 255, 175, 119, 6, 234, 31, 151, 194, 31, 252, 75, 210, 183, 44, 14, 50, 208, 11, 243, 197, 21, 170, 191, 4, 220, 241, 191, 190, 49, 40, 17, 191, 53, 226, 1, 197, 157, 218, 112, 109, 192, 66, 71, 143, 207, 223, 248, 219, 204, 4, 155, 83, 95, 176, 215, 30, 248, 17, 49, 228, 247, 16, 168, 77, 52, 221, 129, 194, 172, 176, 129, 26, 133, 152, 142, 160, 78, 208, 137, 61, 148, 73, 165, 212, 219, 63, 202, 165, 48, 218, 240, 183, 31, 133, 233, 247, 170, 233, 190, 9, 151, 153, 45, 8, 243, 100, 101, 195, 215, 72, 173, 232, 140, 125, 197, 158, 200, 79, 156, 7, 146, 116, 103, 227, 13, 18, 82, 38, 90, 207, 159, 201, 17, 165, 151, 230, 56, 181, 25, 235, 202, 18, 90, 29, 214, 13, 18, 79, 143, 79, 146, 122, 235, 184, 199, 58, 55, 22, 233, 86, 203, 198, 21, 16, 133, 236, 8, 203, 72, 149, 31, 186, 62, 99, 67, 59, 142, 136, 112, 221, 92, 68, 185, 237, 232, 35, 32, 177, 152, 239, 72, 26, 64, 245, 255, 252, 126, 88, 9, 180, 83, 112, 117, 8, 102, 16, 229, 27, 113, 34, 248, 179, 47, 228, 111, 169, 208, 119, 33, 217, 180, 116, 121, 232, 6, 147, 82, 122, 140, 162, 248, 0, 137, 188, 139, 54, 149, 70, 115, 167, 166, 56, 127, 3, 244, 217, 173, 6, 65, 30, 80, 23, 49, 245, 80, 249, 128, 83, 202, 43, 55, 214, 23, 6, 173, 59, 180, 223, 165, 132, 112, 92, 208, 16, 197, 249, 55, 174, 198, 203, 66, 100, 234, 10, 248, 249, 17, 246, 251, 158, 162, 13, 195, 191, 87, 108, 162, 161, 158, 16, 40, 31, 128, 162, 47, 225, 5, 134, 254, 157, 216, 101, 171, 14, 37, 19, 55, 94, 7, 115, 243, 200, 18, 32, 139, 120, 45, 229, 104, 53, 108, 21, 93, 46, 130, 95, 128, 4, 242, 116, 97, 186, 15, 244, 196, 33, 84, 123, 233, 198, 34, 9, 121, 201, 159, 59, 156, 204, 108, 44, 130, 46, 186, 3, 215, 108, 100, 64, 34, 135, 120, 208, 23, 225, 84, 17, 146, 58, 35, 180, 38, 192, 62, 193, 213, 191, 208, 211, 28, 145, 127, 179, 182, 129, 239, 214, 106, 134, 21, 205, 23, 209, 129, 231, 97, 8, 233, 250, 149, 210, 26, 56, 236, 52, 138, 189, 9, 128, 10, 243, 232, 139, 29, 198, 239, 147, 31, 157, 74, 208, 190, 57, 138, 119, 56, 116, 51, 41, 73, 1, 30, 217, 213, 68, 185, 36, 203, 166, 224, 50, 19, 104, 125, 117, 123, 220, 66, 252, 249, 123, 149, 245, 117, 96, 127, 121, 73, 120, 78, 74, 1, 77, 115, 150, 178, 28, 233, 189, 83, 140, 94, 254, 144, 151, 238, 0, 38, 135, 52, 246, 8, 249, 153, 43, 142, 145, 14, 12, 112, 107, 161, 175, 154, 145, 250, 173, 36, 73, 42, 227, 219, 144, 138, 186, 213, 226, 51, 108, 139, 122, 67, 164, 60, 59, 57, 206, 188, 49, 94, 31, 12, 111, 202, 226, 227, 108, 211, 255, 167, 119, 190, 172, 18, 255, 203, 174, 153, 132, 226, 69, 155, 157, 132, 139, 163, 172, 88, 49, 124, 219, 147, 90, 12, 244, 2, 117, 95, 194, 178, 195, 147, 249, 35, 79, 190, 239, 46, 50, 2, 237, 77, 254, 227, 96, 183, 127, 136, 61, 236, 136, 4, 241, 191, 60, 228, 172, 128, 177, 16, 198, 32, 151, 165, 48, 91, 156, 18, 89, 58, 145, 56, 158, 133, 174, 114, 50, 102, 139, 35, 96, 142, 115, 123, 159, 234, 159, 100, 120, 92, 18, 224, 92, 91, 164, 103, 69, 48, 103, 207, 197, 76, 245, 42, 130, 21, 253, 185, 110, 63, 32, 130, 1, 239, 221, 233, 228, 98, 135, 199, 230, 26, 7, 168, 71, 148, 71, 79, 228, 103, 86, 174, 195, 106, 22, 253, 124, 242, 39, 197, 201, 107, 153, 238, 197, 216, 20, 169, 21, 83, 43, 213, 140, 241, 167, 242, 107, 106, 157, 17, 102, 114, 249, 234, 42, 215, 221, 25, 27, 49, 120, 230, 203, 255, 232, 44, 226, 225, 63, 215, 196, 214, 221, 213, 18, 191, 159, 203, 244, 80, 53, 107, 165, 45, 155, 2, 152, 114, 24, 153, 237, 171, 217, 226, 7, 254, 235, 69, 204, 67, 116, 6, 114, 95, 151, 153, 97, 60, 136, 104, 135, 166, 196, 235, 184, 201, 40, 177, 255, 36, 68, 65, 238, 5, 114, 189, 118, 122, 21, 144, 156, 151, 97, 27, 10, 120, 151, 144, 58, 162, 69, 57, 141, 135, 168, 56, 3, 245, 48, 135, 103, 233, 27, 155, 105, 131, 65, 17, 132, 193, 23, 199, 64, 12, 226, 41, 37, 7, 66, 94, 114, 88, 160, 73, 163, 106, 235, 15, 20, 50, 41, 254, 29, 207, 85, 231, 194, 242, 128, 5, 219, 82, 169, 108, 81, 72, 254, 92, 169, 45, 179, 77, 78, 241, 69, 224, 255, 55, 8, 123, 61, 224, 176, 155, 39, 169, 115, 145, 5, 212, 255, 25, 198, 35, 48, 51, 205, 33, 29, 173, 101, 151, 89, 177, 15, 87, 93, 113, 58, 216, 49, 201, 4, 182, 152, 236, 71, 162, 178, 49, 104, 110, 47, 81, 20, 68, 105, 138, 175, 109, 25, 116, 114, 180, 20, 193, 223, 204, 254, 194, 1, 223, 137, 90, 250, 9, 227, 139, 18, 206, 113, 236, 121, 165, 38, 177, 251, 75, 222, 56, 26, 126, 169, 25, 229, 21, 173, 254, 231, 226, 90, 156, 19, 136, 199, 92, 123, 96, 222, 131, 187, 92, 157, 198, 225, 180, 163, 212, 1, 11, 82, 167, 135, 77, 11, 251, 194, 141, 119, 233, 254, 250, 183, 111, 242, 247, 133, 4, 115, 131, 183, 93, 233, 97, 83, 124, 188, 31, 188, 254, 36, 174, 243, 190, 71, 162, 241, 202, 94, 85, 197, 91, 226, 16, 149, 229, 232, 57, 16, 92, 17, 9, 232, 44, 103, 105, 117, 216, 32, 243, 45, 237, 27, 93, 180, 90, 19, 158, 117, 38, 33, 10, 39, 65, 106, 209, 105, 109, 251, 232, 39, 182, 53, 164, 120, 101, 174, 162, 222, 134, 109, 121, 2, 180, 106, 41, 142, 24, 113, 237, 130, 50, 108, 155, 239, 96, 68, 214, 31, 87, 75, 173, 129, 11, 68, 96, 122, 86, 125, 10, 150, 189, 237, 212, 40, 240, 197, 28, 60, 12, 8, 169, 240, 197, 78, 1, 237, 216, 190, 47, 190, 112, 35, 192, 73, 13, 112, 39, 65, 95, 153, 196, 36, 53, 63, 71, 36, 145, 8, 64, 207, 67, 24, 148, 141, 17, 192, 224, 203, 233, 177, 176, 81, 107, 160, 176, 210, 118, 194, 160, 47, 28, 179, 99, 80, 46, 179, 249, 118, 1, 169, 179, 158, 211, 148, 36, 156, 128, 110, 102, 69, 30, 65, 48, 55, 93, 133, 39, 36, 48, 211, 69, 43, 116, 248, 168, 109, 239, 128, 104, 62, 153, 203, 154, 115, 126, 200, 219, 197, 84, 62, 161, 88, 66, 157, 105, 179, 248, 248, 28, 96, 249, 90, 219, 9, 13, 67, 254, 252, 40, 77, 118, 105, 68, 41, 55, 146, 199, 143, 148, 27, 27, 170, 147, 209, 187, 11, 185, 16, 94, 0, 207, 248, 249, 81, 137, 41, 146, 242, 17, 8, 211, 219, 7, 125, 221, 213, 43, 202, 31, 189, 105, 194, 156, 10, 68, 252, 171, 85, 170, 8, 235, 209, 131, 137, 243, 76, 131, 190, 238, 165, 211, 248, 76, 113, 174, 193, 254, 98, 255, 213, 241, 218, 255, 17, 241, 3, 193, 137, 209, 216, 10, 13, 1, 9, 178, 77, 211, 13, 4, 139, 174, 193, 44, 135, 109, 204, 39, 1, 83, 40, 123, 151, 240, 90, 163, 177, 125, 170, 56, 20, 110, 97, 179, 230, 78, 142, 209, 64, 244, 142, 30, 5, 67, 213, 63, 156, 44, 117, 254, 148, 247, 219, 215, 5, 143, 187, 132, 45, 5, 183, 228, 63, 121, 206, 4, 121, 143, 194, 236, 79, 160, 212, 132, 86, 216, 74, 127, 223, 9, 31, 101, 11, 175, 69, 179, 243, 155, 120, 235, 229, 103, 53, 56, 57, 38, 87, 110, 32, 127, 132, 24, 222, 91, 173, 166, 182, 218, 72, 62, 66, 13, 86, 213, 103, 71, 4, 150, 75, 93, 24, 148, 239, 243, 20, 179, 237, 39, 165, 174, 70, 27, 78, 234, 252, 188, 139, 58, 236, 142, 48, 105, 169, 217, 229, 18, 128, 90, 45, 16, 161, 88, 98, 221, 252, 123, 223, 28, 104, 134, 197, 36, 200, 97, 176, 145, 2, 8, 176, 224, 161, 84, 64, 225, 147, 68, 32, 8, 254, 93, 38, 190, 109, 233, 8, 52, 25, 227, 99, 7, 159, 78, 179, 95, 195, 205, 106, 249, 236, 8, 210, 11, 156, 174, 41, 195, 116, 72, 67, 80, 35, 125, 112, 10, 232, 4, 142, 96, 117, 184, 230, 138, 177, 17, 203, 126, 14, 226, 76, 229, 16, 10, 242, 58, 249, 82, 141, 181, 21, 73, 88, 122, 208, 176, 197, 204, 193, 190, 249, 10, 13, 86, 108, 239, 202, 205, 71, 7, 249, 150, 144, 236, 102, 61, 38, 236, 185, 147, 61, 63, 210, 185, 147, 147, 166, 67, 162, 197, 224, 153, 17, 158, 77, 242, 107, 27, 96, 19, 2, 13, 150, 164, 203, 252, 44, 61, 248, 172, 233, 245, 97, 244, 57, 118, 112, 128, 236, 53, 72, 37, 173, 170, 168, 43, 67, 20, 143, 102, 65, 146, 52, 155, 30, 240, 93, 216, 115, 192, 247, 154, 40, 237, 123, 141, 50, 21, 216, 25, 3, 59, 124, 36, 2, 120, 195, 4, 42, 135, 221, 133, 237, 86, 147, 192, 53, 162, 231, 25, 49, 150, 118, 18, 177, 147, 207, 28, 47, 52, 221, 200, 144, 51, 126, 235, 160, 162, 48, 114, 149, 17, 75, 206, 235, 222, 123, 144, 6, 201, 202, 146, 69, 201, 38, 86, 65, 3, 109, 16, 152, 146, 28, 192, 209, 22, 77, 189, 209, 98, 157, 25, 87, 37, 174, 140, 206, 10, 175, 142, 40, 160, 203, 167, 113, 201, 185, 87, 212, 154, 192, 164, 2, 199, 1, 12, 230, 20, 248, 110, 67, 127, 2, 61, 143, 2, 214, 211, 148, 54, 14, 30, 50, 58, 138, 129, 199, 13, 224, 135, 64, 214, 123, 80, 112, 101, 129, 28, 75, 36, 227, 254, 209, 183, 170, 163, 238, 125, 50, 170, 98, 129, 155, 121, 151, 95, 62, 121, 64, 237, 40, 135, 176, 75, 57, 4, 229, 15, 151, 114, 252, 232, 239, 86, 65, 0, 10, 244, 63, 128, 126, 88, 9, 160, 45, 32, 168, 201, 169, 207, 40, 214, 87, 252, 167, 48, 132, 150, 130, 239, 56, 51, 52, 129, 212, 35, 88, 41, 36, 30, 139, 255, 163, 95, 233, 46, 104, 181, 234, 212, 232, 93, 47, 122, 152, 79, 88, 168, 246, 117, 134, 235, 18, 117, 128, 171, 82, 135, 80, 114, 144, 235, 168, 228, 50, 65, 146, 79, 122, 142, 252, 90, 190, 63, 25, 225, 128, 144, 207, 253, 141, 77, 21, 85, 225, 51, 126, 30, 170, 155, 53, 39, 58, 252, 126, 89, 68, 204, 140, 182, 211, 109, 230, 2, 93, 151, 98, 225, 248, 41, 245, 2, 144, 79, 111, 166, 99, 242, 132, 232, 24, 128, 128, 97, 167, 193, 206, 93, 200, 211, 142, 189, 49, 194, 185, 70, 68, 202, 226, 137, 85, 212, 42, 26, 198, 180, 84, 22, 234, 41, 116, 76, 81, 170, 44, 82, 178, 245, 3, 229, 152, 179, 91, 100, 121, 15, 41, 243, 11, 84, 220, 92, 137, 111, 68, 127, 193, 210, 247, 27, 147, 77, 125, 196, 198, 101, 163, 168, 148, 61, 31, 98, 177, 72, 5, 225, 107, 174, 8, 168, 147, 111, 14, 89, 148, 12, 82, 198, 216, 184, 157, 25, 111, 208, 37, 229, 115, 19, 109, 41, 98, 17, 222, 237, 98, 182, 252, 246, 105, 3, 63, 223, 174, 241, 205, 57, 233, 16, 237, 50, 150, 238, 199, 81, 25, 29, 67, 113, 52, 76, 241, 34, 138, 204, 198, 164, 219, 63, 34, 134, 18, 203, 38, 50, 244, 209, 31, 208, 198, 154, 218, 207, 166, 230, 80, 212, 155, 225, 206, 252, 97, 230, 117, 53, 59, 56, 50, 59, 156, 160, 187, 241, 221, 204, 175, 201, 122, 250, 55, 208, 209, 63, 49, 64, 40, 251, 89, 36, 125, 143, 213, 68, 80, 237, 225, 173, 49, 103, 27, 157, 227, 182, 161, 110, 153, 82, 13, 7, 141, 114, 71, 184, 91, 15, 84, 27, 32, 173, 123, 61, 222, 79, 13, 67, 21, 105, 95, 106, 67, 182, 18, 216, 110, 15, 34, 205, 200, 115, 129, 65, 161, 209, 44, 80, 82, 53, 152, 205, 53, 162, 181, 57, 175, 174, 11, 94, 41, 36, 78, 140, 235, 216, 239, 218, 255, 255, 219, 92, 152, 101, 137, 9, 186, 12, 123, 90, 169, 63, 220, 7, 224, 72, 56, 188, 61, 114, 190, 84, 209, 14, 191, 203, 164, 58, 177, 59, 253, 230, 240, 51, 188, 49, 65, 68, 168, 33, 91, 178, 185, 91, 207, 241, 218, 212, 150, 223, 0, 117, 166, 27, 78, 197, 133, 42, 212, 3, 14, 131, 121, 229, 80, 105, 162, 211, 228, 171, 47, 178, 113, 148, 193, 116, 245, 128, 129, 116, 135, 253, 200, 99, 123, 126, 129, 240, 82, 197, 11, 12, 252, 193, 132, 39, 160, 147, 154, 229, 30, 223, 188, 234, 106, 133, 141, 185, 217, 246, 109, 228, 32, 244, 92, 31, 243, 94, 75, 220, 215, 97, 177, 76, 130, 2, 116, 4, 46, 101, 137, 21, 88, 53, 46, 35, 240, 179, 159, 94, 115, 8, 235, 244, 16, 211, 135, 108, 210, 11, 54, 35, 230, 89, 30, 227, 172, 246, 121, 194, 32, 117, 134, 178, 148, 204, 233, 69, 234, 205, 94, 109, 117, 234, 163, 178, 58, 248, 125, 190, 199, 61, 123, 206, 119, 139, 182, 56, 249, 242, 228, 19, 161, 225, 232, 147, 165, 85, 239, 106, 24, 62, 224, 116, 35, 76, 31, 52, 32, 152, 79, 193, 125, 249, 192, 65, 215, 29, 66, 253, 193, 245, 5, 4, 183, 2, 159, 63, 45, 130, 83, 101, 37, 172, 173, 124, 255, 11, 37, 102, 165, 61, 164, 145, 16, 173, 23, 234, 129, 211, 246, 103, 235, 137, 251, 4, 112, 89, 26, 212, 127, 173, 211, 145, 68, 207, 215, 81, 75, 5, 70, 82, 22, 20, 88, 75, 93, 202, 60, 127, 107, 3, 160, 68, 140, 69, 116, 191, 3, 38, 215, 153, 66, 111, 249, 22, 52, 204, 53, 128, 132, 192, 130, 74, 9, 218, 99, 133, 116, 63, 101, 14, 214, 91, 184, 49, 109, 14, 189, 192, 60, 101, 231, 120, 105, 228, 142, 212, 151, 96, 140, 129, 108, 78, 81, 48, 123, 126, 117, 233, 231, 205, 155, 254, 3, 227, 9, 193, 226, 99, 195, 174, 141, 113, 67, 35, 171, 138, 222, 216, 155, 71, 245, 179, 3, 241, 133, 50, 65, 44, 23, 244, 107, 6, 211, 53, 227, 78, 38, 112, 127, 4, 93, 203, 219, 64, 14, 218, 21, 201, 190, 107, 219, 202, 76, 240, 137, 206, 11, 105, 11, 223, 142, 164, 78, 223, 16, 24, 60, 141, 119, 8, 183, 107, 211, 68, 129, 178, 114, 109, 244, 199, 167, 103, 60, 118, 121, 130, 169, 62, 12, 95, 67, 88, 83, 241, 124, 99, 57, 172, 54, 207, 156, 138, 62, 194, 98, 23, 242, 111, 36, 162, 33, 80, 156, 246, 41, 78, 178, 233, 25, 142, 132, 254, 152, 224, 116, 214, 136, 178, 64, 87, 190, 16, 201, 56, 21, 129, 177, 75, 84, 42, 168, 200, 246, 153, 56, 92, 102, 22, 129, 11, 246, 34, 157, 112, 155, 93, 4, 119, 172, 31, 227, 43, 140, 158, 166, 144, 142, 9, 177, 78, 165, 223, 179, 141, 5, 167, 178, 107, 217, 139, 121, 11, 24, 187, 123, 195, 53, 216, 14, 162, 249, 200, 229, 224, 20, 27, 205, 134, 76, 184, 189, 134, 145, 46, 107, 29, 151, 172, 49, 23, 94, 162, 99, 225, 146, 44, 99, 213, 217, 68, 55, 25, 165, 74, 117, 179, 82, 55, 14, 44, 84, 227, 66, 36, 100, 238, 99, 139, 39, 114, 113, 190, 7, 140, 232, 216, 194, 252, 166, 104, 1, 225, 207, 162, 54, 85, 166, 143, 23, 239, 235, 106, 92, 59, 136, 66, 55, 182, 242, 131, 60, 238, 66, 2, 157, 221, 122, 243, 146, 160, 37, 123, 230, 147, 248, 237, 55, 50, 245, 92, 137, 193, 122, 199, 4, 136, 162, 6, 165, 180, 96, 213, 99, 27, 182, 22, 122, 147, 255, 221, 75, 225, 12, 78, 171, 249, 124, 76, 81, 179, 235, 143, 93, 191, 207, 27, 5, 254, 157, 216, 129, 254, 78, 21, 227, 29, 17, 17, 194, 103, 113, 148, 82, 247, 215, 2, 90, 81, 62, 51, 239, 142, 103, 138, 128, 240, 181, 154, 172, 48, 19, 243, 94, 131, 126, 149, 227, 148, 249, 100, 84, 151, 208, 91, 237, 5, 47, 118, 61, 13, 68, 134, 173, 242, 13, 172, 159, 34, 15, 248, 233, 222, 40, 200, 5, 87, 70, 198, 144, 15, 159, 14, 170, 243, 186, 238, 251, 247, 21, 216, 62, 98, 117, 39, 12, 146, 233, 69, 213, 134, 168, 182, 198, 118, 89, 224, 221, 25, 237, 75, 97, 255, 55, 126, 82, 251, 175, 214, 127, 68, 171, 6, 206, 64, 191, 222, 48, 125, 168, 182, 35, 105, 92, 106, 95, 116, 212, 62, 13, 160, 220, 143, 161, 59, 16, 110, 126, 39, 137, 250, 1, 75, 234, 114, 158, 171, 191, 105, 171, 47, 9, 172, 164, 48, 232, 137, 99, 144, 166, 86, 71, 120, 127, 220, 13, 85, 5, 17, 68, 124, 21, 246, 218, 239, 190, 106, 11, 200, 198, 102, 181, 36, 112, 52, 211, 170, 74, 8, 204, 65, 193, 238, 21, 73, 34, 72, 10, 81, 146, 136, 229, 153, 17, 116, 152, 131, 244, 125, 242, 83, 233, 122, 177, 217, 47, 180, 30, 47, 95, 33, 124, 212, 113, 38, 72, 74, 183, 152, 195, 185, 150, 223, 223, 41, 97, 236, 118, 7, 85, 214, 76, 221, 48, 213, 80, 59, 128, 188, 84, 182, 8, 235, 89, 123, 85, 120, 133, 49, 228, 198, 91, 111, 215, 246, 60, 86, 181, 113, 228, 205, 194, 240, 152, 214, 3, 43, 217, 167, 210, 238, 173, 218, 219, 196, 180, 138, 4, 190, 52, 221, 247, 77, 254, 78, 35, 168, 51, 88, 185, 216, 83, 101, 255, 99, 45, 130, 191, 87, 6, 225, 222, 168, 7, 161, 139, 253, 96, 22, 202, 206, 44, 140, 226, 31, 89, 81, 27, 136, 23, 24, 85, 209, 70, 170, 163, 123, 168, 29, 195, 154, 89, 191, 158, 89, 114, 121, 149, 69, 171, 16, 148, 167, 9, 67, 40, 80, 245, 121, 187, 138, 241, 228, 14, 46, 251, 225, 122, 213, 169, 59, 193, 9, 59, 202, 227, 199, 41, 235, 80, 252, 93, 168, 155, 33, 26, 203, 12, 152, 106, 58, 60, 142, 38, 179, 91, 189, 112, 175, 237, 231, 87, 232, 205, 40, 141, 116, 2, 95, 20, 208, 160, 101, 137, 5, 68, 1, 139, 124, 103, 48, 166, 215, 54, 76, 69, 252, 206, 100, 24, 45, 23, 86, 220, 38, 169, 29, 48, 44, 51, 177, 205, 251, 12, 133, 166, 121, 104, 232, 61, 238, 201, 138, 125, 10, 205, 181, 140, 124, 233, 137, 20, 232, 7, 185, 82, 240, 84, 155, 81, 213, 102, 73, 89, 60, 26, 127, 229, 76, 35, 158, 148, 193, 163, 65, 227, 17, 99, 46, 15, 201, 20, 117, 148, 73, 158, 117, 145, 135, 163, 72, 42, 237, 223, 36, 22, 97, 96, 192, 116, 56, 53, 251, 202, 240, 27, 48, 81, 85, 178, 84, 16, 98, 125, 51, 248, 177, 164, 165, 144, 43, 121, 192, 109, 97, 65, 52, 158, 217, 223, 87, 200, 253, 198, 207, 63, 108, 8, 202, 216, 198, 85, 23, 122, 115, 168, 137, 254, 111, 219, 83, 23, 11, 50, 14, 40, 237, 88, 170, 1, 89, 19, 118, 166, 202, 232, 35, 187, 218, 166, 204, 104, 137, 221, 105, 229, 184, 40, 247, 100, 234, 217, 196, 1, 33, 69, 211, 249, 247, 151, 129, 184, 126, 249, 246, 99, 115, 203, 205, 122, 206, 179, 113, 127, 254, 37, 190, 24, 6, 57, 210, 156, 127, 227, 13, 222, 148, 193, 70, 13, 155, 103, 2, 212, 108, 253, 58, 133, 2, 134, 155, 32, 156, 56, 244, 164, 39, 13, 172, 157, 254, 112, 119, 105, 153, 158, 54, 210, 65, 22, 71, 7, 163, 198, 212, 214, 178, 248, 177, 195, 213, 91, 83, 98, 109, 48, 155, 67, 91, 87, 24, 43, 243, 27, 219, 54, 198, 99, 85, 2, 64, 253, 81, 30, 251, 127, 49, 98, 157, 57, 169, 176, 169, 240, 97, 84, 207, 62, 215, 74, 152, 169, 136, 45, 114, 44, 132, 101, 215, 12, 146, 54, 139, 58, 191, 54, 212, 151, 23, 156, 181, 212, 228, 169, 156, 146, 127, 180, 109, 242, 237, 148, 124, 174, 2, 142, 160, 202, 138, 105, 140, 230, 4, 72, 18, 157, 11, 27, 20, 172, 107, 222, 103, 212, 18, 131, 25, 182, 177, 180, 129, 77, 30, 214, 44, 197, 91, 139, 87, 195, 22, 60, 188, 18, 33, 202, 184, 213, 114, 188, 68, 46, 127, 5, 236, 119, 157, 58, 104, 81, 75, 236, 1, 242, 56, 32, 159, 43, 62, 216, 37, 252, 58, 238, 131, 178, 242, 125, 122, 119, 245, 69, 121, 184, 31, 112, 194, 125, 140, 0, 59, 95, 248, 97, 115, 153, 247, 62, 95, 178, 255, 122, 20, 222, 211, 228, 175, 200, 67, 231, 156, 176, 154, 50, 41, 42, 68, 130, 221, 166, 75, 235, 109, 121, 252, 149, 61, 125, 105, 88, 123, 142, 133, 249, 215, 185, 174, 208, 151, 77, 174, 254, 161, 151, 71, 138, 133, 251, 150, 138, 148, 164, 61, 117, 161, 133, 65, 164, 231, 73, 191, 183, 171, 202, 16, 46, 239, 214, 11, 250, 216, 196, 2, 85, 36, 82, 20, 118, 161, 253, 233, 211, 32, 178, 106, 132, 229, 43, 231, 47, 158, 5, 120, 112, 48, 113, 200, 39, 137, 221, 98, 21, 232, 154, 87, 151, 129, 26, 189, 58, 28, 54, 231, 94, 49, 155, 87, 5, 124, 245, 39, 226, 88, 33, 164, 241, 187, 52, 237, 13, 203, 160, 235, 66, 69, 93, 123, 34, 43, 214, 137, 94, 178, 53, 73, 130, 196, 56, 30, 212, 179, 170, 10, 87, 235, 42, 104, 114, 55, 95, 66, 82, 143, 181, 114, 37, 174, 171, 95, 161, 17, 158, 145, 18, 75, 102, 154, 223, 110, 131, 9, 0, 242, 81, 158, 193, 47, 94, 182, 189, 146, 144, 231, 43, 129, 218, 55, 174, 115, 47, 139, 236, 228, 185, 172, 60, 126, 41, 196, 253, 192, 162, 134, 49, 232, 69, 11, 221, 230, 196, 235, 111, 241, 84, 232, 247, 125, 97, 66, 124, 181, 179, 32, 247, 204, 174, 235, 49, 8, 170, 6, 93, 192, 84, 180, 210, 223, 218, 41, 159, 230, 232, 179, 192, 27, 34, 108, 18, 253, 163, 95, 156, 165, 97, 82, 81, 53, 22, 222, 190, 122, 3, 154, 212, 50, 43, 181, 246, 15, 229, 22, 102, 123, 114, 119, 140, 8, 208, 112, 215, 139, 208, 114, 108, 14, 180, 73, 104, 57, 48, 222, 179, 69, 154, 243, 201, 202, 58, 94, 4, 82, 170, 254, 112, 225, 32, 15, 187, 178, 197, 150, 74, 184, 217, 109, 154, 42, 78, 234, 53, 52, 136, 243, 141, 82, 206, 135, 189, 36, 90, 127, 93, 185, 173, 74, 69, 15, 1, 246, 48, 55, 71, 153, 81, 207, 133, 124, 112, 131, 72, 168, 209, 10, 142, 220, 92, 11, 11, 14, 48, 118, 230, 82, 242, 255, 24, 165, 183, 158, 100, 35, 24, 20, 178, 175, 71, 69, 208, 102, 30, 151, 245, 201, 211, 10, 201, 231, 111, 47, 3, 162, 8, 168, 203, 22, 63, 29, 72, 253, 85, 134, 31, 175, 100, 119, 80, 65, 209, 77, 66, 161, 215, 178, 14, 141, 222, 80, 228, 150, 27, 230, 13, 136, 39, 234, 253, 7, 135, 235, 69, 140, 107, 159, 102, 159, 26, 80, 83, 235, 222, 134, 133, 244, 156, 220, 69, 88, 82, 143, 65, 160, 61, 128, 161, 181, 35, 3, 1, 209, 177, 146, 32, 94, 173, 218, 23, 135, 241, 192, 225, 121, 81, 90, 181, 250, 22, 45, 209, 57, 185, 46, 158, 187, 83, 210, 228, 104, 254, 55, 51, 211, 213, 224, 119, 92, 229, 231, 175, 143, 157, 67, 127, 43, 33, 250, 56, 176, 131, 181, 143, 133, 210, 233, 167, 66, 241, 236, 203, 213, 113, 35, 173, 149, 253, 208, 89, 143, 139, 17, 220, 52, 73, 124, 78, 39, 185, 21, 227, 41, 123, 36, 52, 130, 150, 149, 33, 222, 248, 173, 103, 24, 116, 86, 121, 148, 8, 111, 5, 136, 48, 136, 95, 247, 75, 55, 208, 8, 82, 22, 166, 148, 47, 55, 176, 143, 41, 1, 165, 1, 100, 228, 115, 22, 194, 184, 246, 28, 35, 125, 27, 10, 141, 218, 249, 83, 237, 41, 185, 15, 4, 35, 74, 232, 145, 73, 166, 179, 30, 63, 192, 78, 59, 37, 141, 121, 217, 128, 178, 236, 201, 213, 84, 25, 147, 83, 60, 219, 154, 35, 121, 119, 201, 205, 173, 27, 103, 33, 83, 77, 204, 191, 222, 175, 143, 214, 174, 96, 155, 51, 146, 15, 174, 67, 223, 146, 206, 140, 136, 125, 10, 238, 65, 206, 182, 28, 37, 43, 133, 152, 25, 186, 40, 150, 128, 225, 230, 21, 168, 255, 51, 235, 65, 3, 51, 57, 54, 140, 4, 188, 100, 139, 47, 12, 197, 3, 154, 47, 139, 176, 54, 229, 140, 157, 223, 189, 184, 4, 137, 55, 244, 82, 63, 211, 92, 187, 245, 29, 47, 241, 45, 40, 163, 17, 47, 209, 123, 140, 2, 220, 234, 187, 87, 42, 46, 173, 134, 97, 226, 179, 139, 115, 72, 209, 45, 204, 228, 125, 74, 214, 185, 179, 221, 15, 159, 37, 124, 195, 246, 12, 87, 231, 128, 110, 115, 224, 144, 235, 214, 167, 93, 91, 101, 133, 79, 220, 159, 252, 172, 192, 66, 63, 90, 40, 189, 170, 163, 181, 67, 37, 194, 245, 135, 95, 222, 226, 14, 2, 100, 195, 213, 28, 190, 253, 37, 216, 243, 18, 198, 191, 91, 7, 236, 184, 75, 29, 119, 105, 196, 60, 169, 90, 226, 24, 97, 181, 120, 117, 156, 74, 251, 249, 207, 128, 93, 196, 7, 43, 39, 146, 193, 89, 88, 76, 251, 34, 33, 210, 222, 99, 204, 211, 163, 164, 147, 124, 239, 12, 87, 157, 82, 140, 90, 112, 222, 104, 70, 148, 172, 8, 24, 228, 72, 127, 15, 250, 8, 221, 151, 108, 40, 19, 175, 143, 94, 115, 209, 206, 178, 221, 73, 88, 99, 200, 105, 197, 87, 194, 191, 21, 94, 40, 235, 144, 11, 14, 200, 195, 234, 108, 125, 211, 137, 155, 53, 180, 216, 99, 182, 237, 203, 159, 54, 214, 130, 191, 19, 52, 190, 200, 254, 133, 220, 249, 78, 129, 203, 116, 9, 108, 23, 233, 202, 4, 21, 87, 165, 138, 175, 212, 249, 99, 66, 151, 124, 193, 98, 142, 22, 215, 1, 121, 165, 187, 118, 192, 94, 87, 153, 54, 148, 154, 74, 202, 219, 62, 203, 140, 28, 34, 211, 152, 164, 36, 164, 46, 17, 9, 145, 54, 244, 115, 198, 169, 228, 21, 7, 35, 176, 222, 168, 104, 245, 31, 44, 204, 33, 45, 45, 208, 215, 69, 186, 26, 129, 131, 119, 39, 248, 235, 170, 211, 84, 135, 127, 167, 99, 13, 52, 56, 17, 206, 204, 63, 11, 255, 195, 43, 154, 142, 84, 185, 97, 117, 134, 99, 98, 192, 6, 83, 139, 240, 231, 193, 232, 31, 143, 107, 120, 219, 127, 204, 208, 103, 185, 108, 196, 94, 83, 110, 179, 166, 96, 52, 184, 202, 34, 130, 116, 234, 207, 2, 234, 169, 182, 140, 27, 226, 254, 92, 139, 241, 37, 8, 175, 146, 58, 187, 172, 58, 125, 191, 121, 105, 216, 237, 16, 72, 115, 139, 49, 168, 208, 110, 85, 165, 183, 140, 149, 214, 251, 224, 143, 54, 183, 81, 184, 202, 249, 210, 161, 157], - [2, 214, 64, 95, 72, 190, 5, 8, 5, 136, 45, 46, 100, 12, 174, 182, 146, 174, 119, 55, 116, 84, 47, 212, 220, 176, 45, 15, 208, 53, 166, 48, 216, 236, 28, 208, 239, 135, 15, 4, 28, 171, 62, 55, 9, 87, 227, 181, 41, 58, 75, 186, 57, 76, 253, 198, 79, 123, 62, 254, 161, 209, 95, 209, 72, 145, 147, 152, 6, 131, 253, 159, 247, 236, 50, 85, 64, 174, 211, 141, 65, 171, 141, 130, 194, 230, 54, 144, 76, 44, 248, 150, 252, 189, 48, 253, 242, 244, 42, 94, 119, 9, 173, 234, 52, 220, 204, 37, 111, 46, 8, 144, 239, 141, 217, 130, 176, 126, 115, 101, 53, 54, 210, 86, 35, 112, 55, 222, 61, 101, 112, 27, 83, 166, 223, 217, 191, 30, 141, 49, 226, 210, 141, 117, 32, 152, 239, 166, 141, 175, 161, 249, 6, 20, 188, 30, 161, 183, 210, 29, 126, 122, 206, 240, 15, 110, 146, 233, 34, 210, 59, 168, 25, 207, 40, 225, 24, 74, 99, 127, 161, 253, 255, 192, 132, 62, 82, 112, 103, 10, 195, 11, 9, 177, 34, 130, 160, 29, 46, 244, 155, 232, 2, 23, 84, 90, 246, 86, 211, 103, 188, 238, 226, 107, 79, 81, 159, 126, 80, 68, 70, 143, 28, 133, 12, 243, 86, 4, 2, 123, 19, 71, 109, 70, 253, 73, 19, 194, 197, 96, 222, 7, 80, 68, 239, 106, 127, 62, 170, 42, 225, 11, 23, 56, 61, 35, 32, 69, 7, 34, 238, 25, 18, 132, 185, 131, 128, 167, 88, 52, 160, 177, 90, 101, 67, 84, 13, 46, 122, 9, 50, 72, 106, 144, 208, 243, 59, 182, 105, 237, 13, 221, 195, 158, 13, 199, 139, 126, 3, 192, 170, 6, 107, 175, 61, 66, 143, 213, 115, 29, 125, 6, 216, 54, 61, 160, 157, 63, 217, 94, 96, 28, 226, 238, 211, 231, 119, 123, 44, 211, 152, 205, 229, 32, 215, 145, 246, 30, 196, 204, 27, 90, 22, 246, 150, 223, 214, 65, 59, 240, 6, 195, 142, 233, 252, 20, 213, 127, 123, 245, 182, 11, 182, 62, 125, 86, 143, 128, 166, 68, 254, 32, 144, 4, 227, 20, 121, 149, 3, 217, 111, 246, 222, 10, 115, 203, 35, 115, 99, 79, 230, 103, 160, 134, 42, 11, 12, 247, 56, 53, 191, 80, 5, 86, 93, 35, 85, 195, 146, 104, 247, 8, 222, 194, 189, 97, 119, 169, 163, 111, 103, 47, 99, 107, 113, 149, 31, 23, 123, 222, 173, 241, 150, 153, 253, 223, 195, 20, 33, 19, 138, 206, 133, 164, 59, 185, 122, 57, 101, 172, 9, 219, 192, 3, 212, 65, 50, 22, 101, 142, 26, 42, 103, 159, 121, 159, 161, 206, 94, 167, 24, 58, 22, 31, 108, 179, 224, 119, 19, 42, 116, 15, 32, 113, 173, 141, 180, 122, 214, 119, 143, 176, 85, 33, 3, 109, 180, 227, 245, 48, 2, 92, 21, 62, 219, 137, 226, 69, 67, 80, 47, 170, 183, 167, 248, 78, 99, 96, 143, 64, 66, 30, 15, 195, 142, 91, 126, 216, 28, 88, 253, 141, 83, 142, 100, 158, 103, 167, 14, 98, 153, 133, 8, 241, 58, 17, 2, 16, 228, 222, 235, 128, 124, 92, 155, 75, 214, 212, 78, 185, 123, 34, 84, 33, 54, 95, 84, 224, 141, 137, 46, 213, 94, 41, 78, 67, 117, 132, 86, 90, 97, 208, 110, 167, 25, 17, 161, 100, 110, 65, 159, 197, 240, 86, 221, 67, 6, 33, 7, 58, 27, 252, 43, 150, 204, 145, 61, 246, 157, 150, 101, 115, 6, 105, 168, 166, 87, 84, 6, 213, 111, 57, 196, 98, 164, 174, 115, 254, 51, 200, 162, 41, 243, 185, 237, 112, 142, 181, 192, 178, 252, 108, 48, 47, 157, 203, 5, 68, 39, 205, 4, 192, 130, 177, 201, 131, 14, 25, 46, 194, 56, 207, 168, 154, 21, 165, 205, 53, 76, 53, 43, 112, 105, 209, 244, 103, 231, 64, 49, 215, 75, 6, 24, 236, 53, 227, 52, 116, 173, 247, 240, 142, 41, 1, 6, 212, 251, 16, 158, 31, 187, 54, 178, 56, 52, 207, 101, 227, 58, 203, 4, 129, 91, 116, 144, 208, 253, 110, 36, 155, 75, 111, 151, 21, 235, 122, 99, 206, 79, 195, 195, 172, 170, 121, 202, 180, 219, 246, 28, 87, 34, 0, 57, 219, 118, 62, 252, 79, 83, 189, 203, 42, 88, 95, 198, 182, 197, 179, 24, 176, 79, 245, 235, 94, 131, 20, 56, 132, 95, 6, 183, 39, 13, 25, 9, 37, 8, 127, 95, 41, 176, 16, 128, 174, 57, 49, 219, 203, 62, 171, 223, 214, 246, 2, 13, 173, 108, 70, 9, 217, 216, 53, 196, 98, 24, 94, 36, 180, 127, 157, 89, 248, 6, 51, 202, 182, 188, 205, 101, 89, 95, 230, 238, 16, 66, 244, 20, 129, 42, 120, 71, 38, 156, 243, 249, 166, 95, 254, 226, 184, 16, 198, 25, 53, 88, 132, 217, 229, 149, 186, 7, 97, 31, 62, 168, 250, 131, 239, 22, 84, 95, 69, 132, 48, 224, 123, 88, 63, 140, 98, 43, 252, 183, 19, 6, 244, 123, 116, 36, 160, 52, 52, 230, 40, 53, 250, 224, 38, 84, 1, 106, 193, 78, 56, 22, 27, 150, 190, 211, 109, 160, 242, 190, 252, 234, 37, 14, 236, 40, 133, 222, 255, 251, 67, 172, 77, 194, 150, 221, 5, 224, 134, 247, 59, 167, 140, 45, 12, 168, 203, 162, 64, 55, 224, 208, 251, 53, 159, 95, 3, 239, 46, 201, 143, 54, 215, 190, 197, 32, 21, 10, 81, 57, 57, 42, 164, 45, 6, 105, 107, 119, 100, 187, 163, 231, 122, 4, 178, 221, 0, 56, 185, 158, 144, 161, 71, 50, 211, 175, 187, 65, 46, 34, 10, 109, 110, 193, 193, 19, 77, 26, 82, 32, 64, 149, 195, 247, 32, 119, 183, 77, 57, 96, 239, 119, 234, 241, 218, 13, 172, 244, 199, 165, 144, 162, 39, 102, 27, 21, 235, 58, 196, 217, 127, 19, 193, 234, 59, 161, 79, 22, 160, 220, 156, 107, 76, 68, 60, 215, 143, 216, 221, 224, 78, 66, 5, 18, 43, 22, 159, 128, 191, 135, 125, 84, 218, 81, 36, 157, 105, 140, 148, 34, 209, 250, 92, 84, 181, 190, 50, 208, 56, 193, 23, 130, 216, 223, 121, 51, 240, 14, 88, 239, 198, 72, 95, 231, 188, 97, 114, 26, 69, 232, 244, 48, 17, 140, 164, 224, 4, 171, 6, 191, 108, 34, 206, 191, 79, 194, 105, 194, 50, 113, 159, 225, 42, 171, 35, 5, 84, 66, 125, 163, 116, 121, 97, 220, 59, 118, 57, 244, 117, 28, 10, 32, 92, 45, 203, 53, 35, 131, 7, 236, 101, 160, 117, 120, 244, 99, 205, 231, 203, 249, 103, 134, 44, 107, 236, 210, 27, 192, 223, 59, 0, 137, 145, 145, 200, 76, 151, 91, 20, 242, 116, 187, 94, 87, 153, 172, 57, 15, 154, 230, 157, 23, 229, 125, 179, 8, 24, 25, 62, 155, 166, 8, 166, 71, 56, 148, 91, 8, 251, 55, 100, 30, 99, 166, 90, 199, 49, 37, 182, 70, 6, 150, 28, 0, 178, 155, 34, 220, 19, 216, 251, 239, 47, 31, 15, 51, 253, 94, 217, 183, 47, 83, 130, 193, 80, 73, 126, 234, 215, 68, 13, 38, 203, 118, 176, 184, 156, 96, 141, 72, 46, 90, 253, 206, 41, 217, 221, 72, 24, 5, 100, 136, 254, 43, 233, 180, 92, 234, 76, 78, 81, 181, 191, 121, 158, 143, 103, 88, 16, 64, 81, 130, 194, 22, 195, 55, 199, 177, 132, 231, 218, 252, 182, 14, 37, 94, 254, 27, 47, 60, 145, 182, 120, 135, 58, 214, 87, 99, 189, 119, 87, 108, 40, 160, 242, 220, 93, 38, 195, 92, 245, 7, 27, 185, 207, 67, 13, 222, 72, 33, 95, 219, 105, 1, 73, 250, 43, 104, 109, 162, 85, 77, 223, 230, 192, 54, 157, 110, 200, 77, 47, 72, 115, 177, 9, 251, 139, 248, 252, 4, 203, 22, 96, 27, 32, 186, 192, 22, 73, 222, 16, 166, 164, 69, 77, 106, 44, 3, 248, 188, 36, 115, 251, 177, 226, 91, 238, 177, 120, 143, 83, 122, 44, 170, 220, 208, 237, 81, 203, 49, 44, 29, 66, 29, 242, 140, 69, 67, 22, 49, 56, 117, 42, 79, 29, 92, 166, 184, 151, 115, 181, 99, 26, 59, 108, 218, 124, 165, 185, 55, 67, 84, 245, 171, 185, 149, 245, 88, 29, 171, 215, 197, 251, 211, 114, 193, 193, 81, 197, 74, 71, 184, 74, 52, 227, 6, 35, 68, 27, 70, 110, 35, 249, 57, 133, 150, 84, 16, 10, 242, 10, 178, 223, 126, 56, 194, 66, 231, 235, 202, 139, 60, 125, 151, 76, 130, 32, 136, 202, 80, 119, 151, 67, 187, 228, 17, 199, 78, 138, 188, 226, 83, 39, 209, 171, 41, 189, 134, 34, 57, 165, 253, 117, 122, 7, 122, 152, 185, 57, 211, 99, 111, 220, 150, 208, 115, 202, 226, 59, 153, 147, 72, 185, 205, 145, 35, 7, 44, 127, 234, 124, 176, 149, 203, 204, 121, 43, 104, 217, 182, 231, 118, 247, 158, 2, 202, 192, 103, 1, 89, 172, 9, 28, 169, 19, 154, 95, 110, 240, 58, 119, 137, 160, 250, 24, 22, 51, 146, 6, 91, 225, 16, 58, 130, 3, 255, 139, 180, 113, 99, 90, 218, 229, 39, 240, 175, 160, 98, 71, 170, 18, 241, 118, 117, 254, 163, 50, 32, 226, 71, 181, 38, 160, 97, 89, 86, 140, 105, 138, 143, 168, 25, 184, 194, 95, 135, 55, 212, 54, 201, 38, 122, 235, 47, 125, 247, 176, 77, 85, 99, 253, 188, 218, 225, 92, 21, 104, 178, 126, 53, 102, 11, 137, 23, 164, 105, 201, 112, 201, 148, 36, 5, 121, 110, 73, 32, 80, 58, 81, 177, 248, 98, 182, 27, 52, 73, 251, 26, 164, 164, 238, 106, 89, 71, 218, 188, 85, 242, 110, 187, 88, 181, 112, 157, 211, 234, 229, 12, 98, 85, 124, 114, 60, 180, 139, 135, 162, 31, 118, 171, 135, 202, 195, 5, 45, 5, 141, 65, 143, 243, 97, 10, 230, 53, 243, 171, 94, 72, 143, 144, 87, 171, 211, 226, 241, 80, 133, 166, 41, 37, 216, 180, 107, 74, 168, 83, 53, 156, 165, 225, 33, 91, 218, 8, 170, 47, 208, 76, 64, 175, 50, 39, 202, 4, 151, 108, 79, 172, 35, 0, 195, 92, 241, 215, 212, 149, 182, 155, 138, 189, 73, 88, 119, 74, 203, 190, 84, 54, 150, 3, 127, 95, 130, 98, 199, 224, 50, 15, 149, 167, 240, 151, 17, 85, 97, 193, 143, 206, 24, 0, 222, 166, 196, 214, 216, 125, 174, 207, 192, 159, 35, 248, 32, 17, 32, 56, 127, 24, 128, 107, 193, 251, 163, 132, 133, 227, 110, 31, 185, 211, 187, 242, 253, 66, 11, 114, 60, 63, 124, 186, 146, 200, 191, 98, 244, 12, 44, 130, 85, 195, 52, 59, 8, 26, 211, 213, 50, 224, 15, 105, 9, 25, 210, 243, 99, 221, 249, 145, 247, 139, 79, 56, 197, 219, 48, 36, 69, 46, 214, 48, 116, 39, 91, 209, 8, 101, 108, 28, 67, 212, 120, 252, 23, 108, 164, 125, 27, 108, 167, 32, 87, 71, 119, 75, 109, 114, 96, 24, 173, 147, 75, 118, 41, 164, 89, 77, 234, 248, 142, 241, 45, 203, 119, 112, 98, 142, 137, 78, 7, 98, 149, 109, 44, 126, 103, 204, 117, 146, 73, 195, 124, 201, 20, 248, 165, 90, 66, 149, 50, 16, 9, 189, 194, 242, 19, 74, 102, 128, 30, 76, 115, 248, 169, 132, 86, 95, 241, 205, 121, 151, 165, 243, 114, 206, 103, 168, 173, 186, 230, 148, 28, 200, 180, 40, 156, 112, 211, 111, 13, 192, 101, 63, 133, 234, 227, 153, 115, 13, 217, 66, 59, 60, 146, 114, 39, 5, 216, 198, 219, 229, 168, 202, 216, 225, 217, 104, 146, 73, 177, 12, 213, 181, 240, 0, 53, 52, 238, 238, 7, 124, 223, 138, 230, 36, 27, 7, 80, 192, 51, 181, 231, 247, 62, 161, 176, 176, 145, 187, 250, 21, 16, 197, 255, 241, 243, 126, 13, 251, 136, 125, 21, 81, 76, 113, 79, 177, 38, 3, 10, 166, 203, 129, 187, 10, 254, 243, 34, 100, 43, 253, 237, 136, 17, 90, 43, 135, 229, 219, 2, 43, 224, 186, 206, 108, 192, 113, 23, 87, 15, 51, 210, 172, 147, 54, 123, 148, 88, 114, 52, 121, 95, 11, 175, 24, 115, 188, 247, 131, 33, 243, 141, 232, 101, 137, 23, 129, 216, 118, 74, 53, 128, 104, 202, 3, 78, 216, 83, 79, 169, 196, 52, 175, 16, 199, 147, 143, 249, 65, 204, 199, 107, 44, 186, 218, 185, 232, 97, 61, 182, 75, 76, 124, 35, 65, 55, 45, 170, 198, 208, 144, 135, 3, 208, 124, 148, 12, 19, 108, 40, 37, 160, 158, 181, 136, 201, 108, 153, 97, 116, 112, 26, 187, 40, 80, 182, 105, 159, 255, 81, 162, 24, 200, 139, 95, 22, 220, 63, 180, 58, 179, 231, 82, 6, 213, 34, 211, 101, 0, 190, 116, 135, 106, 227, 193, 7, 47, 236, 95, 29, 15, 126, 250, 61, 178, 16, 82, 224, 57, 160, 124, 94, 96, 242, 75, 112, 142, 249, 105, 73, 230, 167, 4, 70, 94, 120, 171, 87, 105, 107, 238, 223, 219, 147, 99, 40, 234, 96, 141, 81, 84, 219, 195, 134, 45, 65, 28, 62, 244, 67, 234, 66, 47, 74, 65, 31, 117, 57, 71, 243, 156, 39, 222, 46, 59, 83, 210, 84, 205, 64, 78, 211, 97, 242, 94, 30, 203, 198, 198, 124, 8, 85, 101, 218, 213, 75, 31, 163, 141, 183, 243, 31, 140, 179, 24, 140, 104, 186, 83, 140, 204, 72, 141, 183, 222, 84, 224, 160, 245, 74, 80, 218, 64, 196, 171, 127, 81, 227, 66, 13, 25, 107, 54, 72, 29, 88, 95, 37, 84, 199, 215, 249, 177, 68, 254, 216, 80, 189, 244, 78, 245, 121, 124, 127, 47, 199, 198, 209, 92, 150, 163, 26, 174, 204, 51, 101, 86, 18, 167, 98, 156, 231, 107, 91, 221, 67, 236, 205, 186, 96, 36, 49, 16, 154, 22, 224, 5, 76, 115, 120, 138, 234, 212, 245, 98, 73, 84, 203, 180, 114, 162, 85, 75, 21, 6, 241, 56, 91, 55, 81, 99, 155, 24, 6, 133, 88, 151, 220, 143, 162, 2, 91, 174, 143, 137, 106, 22, 176, 201, 184, 160, 26, 25, 134, 196, 16, 5, 117, 203, 255, 209, 206, 118, 127, 189, 162, 46, 116, 222, 192, 229, 170, 65, 240, 142, 112, 96, 36, 194, 57, 255, 191, 30, 206, 228, 108, 122, 49, 151, 91, 209, 206, 86, 77, 15, 148, 171, 156, 153, 151, 251, 177, 113, 159, 83, 188, 38, 23, 33, 3, 206, 241, 137, 253, 63, 21, 252, 137, 13, 176, 187, 201, 176, 59, 79, 204, 79, 89, 145, 173, 31, 209, 78, 226, 28, 218, 187, 3, 176, 55, 85, 128, 242, 195, 249, 188, 122, 61, 86, 51, 243, 96, 24, 80, 54, 245, 3, 37, 100, 199, 146, 7, 154, 32, 197, 29, 12, 226, 99, 238, 239, 242, 95, 25, 250, 143, 35, 70, 181, 180, 164, 61, 135, 215, 177, 115, 18, 182, 138, 18, 108, 73, 139, 202, 173, 246, 12, 67, 189, 98, 79, 166, 132, 241, 194, 28, 212, 228, 35, 189, 236, 133, 155, 246, 227, 113, 144, 159, 200, 150, 44, 157, 170, 21, 113, 74, 213, 186, 124, 26, 158, 98, 99, 228, 53, 112, 183, 163, 243, 218, 61, 235, 181, 251, 105, 5, 242, 148, 92, 88, 227, 158, 150, 101, 166, 131, 195, 121, 128, 250, 156, 17, 238, 95, 52, 156, 180, 36, 133, 151, 198, 154, 153, 117, 180, 56, 112, 71, 214, 182, 242, 228, 197, 199, 9, 2, 5, 182, 78, 34, 37, 109, 24, 114, 196, 198, 113, 148, 171, 62, 128, 131, 240, 119, 92, 116, 246, 2, 159, 221, 137, 200, 142, 105, 33, 171, 187, 25, 19, 210, 88, 225, 218, 92, 151, 30, 229, 131, 36, 21, 98, 166, 57, 50, 68, 56, 139, 184, 71, 41, 28, 23, 105, 100, 170, 110, 67, 228, 111, 109, 141, 244, 201, 76, 36, 152, 227, 129, 13, 75, 252, 18, 121, 2, 90, 57, 112, 202, 97, 241, 51, 89, 75, 33, 231, 84, 223, 71, 75, 107, 76, 41, 190, 177, 195, 227, 14, 140, 49, 182, 91, 27, 121, 67, 147, 175, 228, 140, 106, 235, 238, 122, 97, 197, 199, 174, 4, 201, 159, 134, 172, 27, 37, 67, 66, 143, 149, 146, 86, 47, 15, 201, 76, 94, 144, 78, 200, 78, 81, 208, 182, 64, 27, 72, 201, 125, 238, 3, 118, 50, 75, 86, 210, 117, 131, 57, 86, 24, 93, 115, 222, 44, 170, 186, 167, 77, 179, 107, 227, 53, 105, 167, 162, 68, 253, 59, 178, 156, 200, 153, 14, 228, 72, 82, 211, 66, 130, 149, 211, 180, 143, 141, 254, 80, 230, 146, 250, 28, 189, 92, 225, 17, 44, 197, 231, 164, 20, 241, 220, 225, 193, 123, 29, 7, 171, 48, 185, 174, 237, 41, 8, 165, 35, 171, 128, 115, 67, 82, 7, 187, 103, 160, 68, 62, 253, 49, 18, 137, 22, 121, 22, 234, 219, 36, 164, 130, 157, 25, 8, 105, 204, 38, 53, 159, 80, 240, 107, 2, 141, 141, 201, 35, 57, 21, 99, 89, 253, 2, 121, 138, 4, 159, 67, 197, 71, 136, 153, 249, 255, 240, 33, 19, 165, 85, 3, 154, 132, 200, 69, 0, 96, 77, 187, 107, 167, 147, 38, 242, 228, 175, 246, 128, 210, 228, 109, 48, 235, 17, 111, 241, 90, 28, 102, 145, 86, 61, 157, 130, 190, 82, 187, 168, 150, 186, 207, 181, 55, 72, 116, 112, 159, 151, 227, 103, 68, 15, 103, 41, 19, 210, 56, 226, 52, 131, 108, 87, 78, 150, 117, 9, 179, 107, 240, 140, 78, 227, 130, 159, 127, 148, 189, 252, 62, 53, 135, 56, 82, 81, 225, 166, 227, 130, 153, 92, 190, 238, 98, 98, 103, 4, 109, 192, 44, 173, 69, 113, 143, 142, 27, 178, 142, 137, 170, 204, 131, 92, 140, 254, 96, 116, 60, 30, 184, 77, 240, 204, 248, 10, 150, 116, 202, 244, 1, 161, 151, 10, 34, 4, 239, 238, 62, 208, 83, 97, 104, 76, 205, 229, 14, 99, 103, 226, 176, 116, 30, 109, 197, 91, 195, 96, 221, 164, 160, 192, 51, 118, 59, 187, 117, 180, 203, 47, 69, 51, 80, 94, 99, 222, 86, 143, 103, 106, 175, 230, 139, 89, 113, 3, 167, 206, 180, 229, 191, 100, 240, 64, 8, 35, 96, 220, 100, 251, 76, 217, 57, 129, 70, 105, 106, 171, 166, 111, 72, 56, 24, 179, 113, 140, 207, 202, 70, 86, 10, 83, 47, 253, 154, 39, 63, 45, 35, 141, 132, 167, 233, 148, 40, 190, 54, 86, 55, 158, 10, 186, 227, 18, 227, 23, 183, 72, 60, 35, 117, 204, 48, 210, 106, 15, 172, 219, 76, 158, 59, 201, 150, 158, 224, 88, 6, 9, 245, 225, 164, 133, 121, 107, 148, 85, 83, 253, 183, 228, 79, 123, 44, 184, 212, 60, 161, 170, 112, 98, 8, 162, 139, 27, 45, 121, 165, 23, 176, 161, 20, 185, 173, 14, 84, 99, 3, 226, 12, 131, 170, 232, 55, 49, 75, 209, 175, 124, 174, 10, 20, 132, 94, 109, 175, 49, 169, 131, 251, 2, 240, 56, 168, 69, 215, 21, 225, 64, 10, 218, 240, 103, 74, 234, 185, 134, 126, 83, 200, 36, 225, 31, 111, 105, 171, 7, 16, 181, 61, 161, 230, 104, 46, 213, 169, 129, 98, 254, 131, 47, 26, 134, 84, 128, 86, 1, 7, 161, 233, 143, 2, 201, 205, 164, 227, 7, 0, 23, 21, 82, 122, 165, 151, 76, 32, 154, 43, 102, 241, 2, 163, 130, 187, 131, 171, 184, 67, 95, 96, 205, 117, 208, 226, 6, 74, 185, 200, 29, 142, 170, 24, 57, 52, 198, 214, 221, 161, 29, 163, 210, 160, 146, 90, 19, 171, 109, 98, 154, 221, 77, 16, 149, 142, 39, 241, 105, 16, 141, 142, 193, 224, 163, 162, 9, 37, 139, 202, 215, 111, 224, 218, 213, 46, 14, 121, 43, 3, 188, 84, 201, 0, 195, 2, 25, 160, 132, 194, 181, 28, 176, 185, 161, 17, 123, 137, 243, 237, 154, 165, 189, 111, 72, 107, 69, 161, 94, 225, 63, 117, 125, 77, 105, 207, 121, 99, 126, 119, 85, 183, 192, 146, 7, 14, 185, 39, 171, 157, 10, 131, 220, 46, 75, 9, 208, 145, 119, 242, 29, 94, 25, 214, 25, 128, 102, 53, 188, 52, 170, 133, 29, 112, 142, 180, 186, 226, 157, 13, 186, 19, 126, 229, 66, 78, 1, 47, 229, 207, 6, 142, 229, 59, 51, 105, 165, 34, 162, 198, 29, 151, 233, 98, 162, 197, 229, 122, 173, 130, 32, 92, 135, 237, 101, 155, 66, 77, 72, 77, 88, 186, 170, 20, 206, 35, 172, 82, 223, 196, 233, 239, 233, 2, 195, 203, 113, 41, 134, 192, 89, 49, 255, 49, 241, 71, 229, 14, 80, 27, 148, 223, 86, 130, 39, 129, 15, 76, 171, 68, 58, 79, 151, 1, 38, 131, 97, 90, 1, 3, 211, 125, 86, 37, 13, 51, 250, 129, 85, 138, 136, 8, 253, 49, 17, 216, 22, 173, 88, 230, 91, 147, 159, 118, 141, 132, 145, 66, 216, 203, 10, 26, 68, 121, 183, 113, 64, 58, 148, 85, 53, 168, 146, 133, 5, 29, 20, 103, 19, 156, 43, 69, 16, 32, 165, 226, 95, 247, 236, 34, 95, 13, 181, 66, 166, 57, 181, 174, 1, 104, 162, 212, 127, 44, 242, 170, 235, 248, 38, 164, 59, 143, 23, 177, 17, 6, 235, 72, 13, 160, 51, 72, 255, 146, 39, 158, 177, 108, 150, 57, 28, 193, 15, 170, 152, 243, 3, 242, 54, 100, 206, 111, 0, 84, 158, 2, 119, 245, 196, 92, 25, 114, 170, 20, 201, 56, 238, 196, 2, 103, 181, 251, 128, 199, 255, 206, 97, 216, 158, 66, 106, 163, 103, 202, 21, 56, 63, 193, 253, 28, 4, 134, 88, 152, 28, 106, 42, 184, 147, 37, 14, 50, 231, 194, 172, 3, 192, 44, 164, 215, 243, 12, 2, 68, 109, 1, 87, 190, 85, 55, 60, 143, 139, 240, 53, 201, 50, 203, 232, 83, 91, 203, 28, 213, 53, 244, 46, 243, 161, 116, 125, 152, 178, 227, 99, 186, 217, 159, 89, 58, 48, 99, 97, 38, 239, 233, 138, 136, 211, 229, 16, 251, 146, 148, 127, 63, 73, 16, 175, 254, 106, 132, 146, 18, 110, 19, 242, 130, 84, 162, 170, 46, 23, 134, 134, 68, 237, 157, 179, 123, 137, 75, 103, 181, 182, 181, 89, 3, 10, 64, 216, 227, 226, 46, 230, 16, 74, 81, 202, 210, 133, 193, 111, 229, 148, 128, 135, 84, 238, 21, 137, 133, 136, 131, 136, 174, 33, 122, 104, 155, 120, 203, 89, 38, 199, 213, 42, 90, 128, 82, 25, 161, 2, 167, 19, 174, 70, 57, 88, 229, 109, 174, 3, 241, 99, 186, 55, 78, 11, 180, 81, 40, 36, 76, 204, 137, 91, 45, 72, 58, 230, 176, 194, 241, 67, 68, 43, 170, 243, 181, 13, 222, 224, 49, 94, 25, 97, 230, 194, 163, 29, 104, 242, 21, 52, 199, 251, 31, 30, 127, 141, 71, 75, 103, 130, 255, 146, 90, 149, 30, 205, 89, 152, 108, 173, 252, 227, 38, 164, 106, 125, 157, 40, 177, 149, 44, 3, 186, 41, 193, 163, 137, 37, 54, 170, 62, 202, 60, 179, 98, 66, 3, 37, 229, 230, 120, 87, 150, 39, 218, 250, 40, 53, 242, 74, 186, 209, 50, 56, 254, 21, 214, 107, 124, 201, 148, 53, 228, 75, 76, 134, 170, 215, 181, 7, 58, 176, 255, 120, 185, 229, 51, 146, 136, 5, 180, 195, 22, 219, 184, 135, 162, 47, 49, 137, 51, 3, 135, 85, 30, 12, 110, 47, 10, 94, 109, 49, 89, 191, 159, 15, 191, 15, 41, 174, 181, 155, 197, 46, 99, 93, 176, 201, 0, 195, 114, 101, 208, 19, 8, 14, 244, 27, 184, 220, 71, 154, 38, 197, 192, 205, 49, 95, 152, 92, 231, 12, 0, 137, 2, 113, 28, 191, 85, 129, 171, 53, 101, 194, 105, 162, 190, 253, 61, 131, 180, 53, 137, 88, 71, 169, 159, 106, 8, 129, 67, 243, 61, 68, 83, 217, 11, 43, 48, 199, 231, 42, 146, 230, 110, 215, 158, 75, 130, 6, 84, 159, 189, 182, 153, 7, 31, 86, 168, 238, 142, 147, 78, 158, 62, 120, 75, 75, 237, 72, 130, 233, 14, 180, 146, 5, 253, 138, 90, 97, 148, 243, 188, 137, 98, 0, 216, 20, 152, 72, 247, 119, 110, 47, 190, 239, 192, 215, 50, 36, 211, 93, 47, 12, 225, 204, 6, 56, 16, 24, 97, 48, 42, 223, 226, 255, 15, 27, 237, 44, 45, 102, 42, 37, 167, 164, 156, 218, 170, 228, 194, 161, 27, 187, 70, 171, 38, 234, 39, 120, 45, 13, 97, 68, 65, 140, 243, 118, 75, 249, 71, 88, 50, 156, 17, 226, 100, 82, 134, 79, 142, 200, 122, 109, 153, 10, 148, 153, 162, 79, 240, 17, 227, 73, 7, 182, 215, 136, 150, 217, 239, 74, 196, 197, 214, 127, 122, 30, 24, 43, 183, 132, 37, 82, 165, 1, 17, 43, 90, 253, 54, 67, 107, 109, 71, 217, 77, 55, 83, 74, 254, 192, 172, 134, 15, 51, 211, 99, 174, 157, 152, 75, 42, 10, 189, 251, 105, 67, 34, 128, 240, 29, 198, 131, 121, 200, 139, 189, 78, 110, 132, 47, 198, 173, 22, 43, 83, 158, 96, 239, 146, 110, 160, 116, 15, 114, 177, 71, 84, 52, 29, 22, 237, 54, 145, 138, 177, 241, 182, 225, 228, 167, 86, 42, 57, 69, 249, 228, 201, 108, 21, 162, 1, 210, 194, 103, 202, 60, 146, 27, 243, 172, 160, 84, 133, 209, 179, 56, 176, 254, 174, 107, 201, 81, 179, 250, 115, 93, 32, 168, 119, 70, 179, 31, 224, 107, 47, 239, 185, 206, 75, 141, 215, 69, 52, 0, 5, 63, 107, 172, 75, 222, 3, 143, 47, 184, 33, 104, 84, 206, 94, 85, 16, 21, 22, 0, 215, 195, 2, 225, 130, 156, 206, 246, 1, 106, 247, 8, 93, 41, 186, 23, 5, 202, 198, 88, 136, 178, 21, 245, 213, 136, 37, 201, 172, 217, 4, 109, 175, 127, 220, 110, 113, 222, 190, 75, 177, 193, 235, 68, 85, 39, 85, 90, 149, 124, 118, 81, 215, 1, 225, 10, 153, 90, 82, 232, 50, 24, 109, 235, 217, 8, 112, 101, 149, 39, 87, 65, 196, 109, 237, 60, 233, 102, 222, 172, 178, 38, 134, 102, 74, 44, 209, 133, 67, 53, 72, 153, 183, 106, 3, 42, 188, 76, 147, 28, 99, 253, 86, 72, 101, 98, 98, 116, 172, 56, 247, 13, 94, 213, 249, 113, 73, 1, 32, 37, 222, 174, 52, 20, 128, 97, 117, 132, 19, 63, 233, 63, 96, 101, 141, 108, 222, 71, 176, 21, 30, 26, 68, 178, 80, 229, 190, 159, 179, 130, 137, 193, 62, 152, 167, 15, 70, 206, 74, 167, 114, 160, 246, 112, 242, 38, 240, 89, 39, 101, 95, 140, 113, 83, 5, 177, 126, 215, 175, 127, 59, 63, 38, 181, 101, 246, 60, 203, 43, 133, 208, 170, 232, 25, 184, 86, 91, 245, 90, 115, 133, 9, 178, 92, 249, 34, 155, 177, 232, 2, 237, 25, 5, 234, 127, 121, 189, 0, 193, 176, 166, 216, 223, 246, 210, 122, 195, 152, 28, 78, 149, 84, 251, 44, 125, 27, 225, 219, 236, 160, 86, 188, 158, 230, 147, 247, 49, 32, 43, 221, 6, 186, 92, 63, 142, 39, 214, 23, 146, 80, 106, 3, 144, 165, 184, 94, 87, 69, 62, 254, 40, 253, 242, 250, 216, 235, 104, 194, 115, 168, 84, 22, 224, 50, 35, 9, 221, 90, 115, 218, 184, 193, 109, 89, 16, 254, 211, 199, 202, 116, 133, 132, 242, 245, 223, 171, 106, 210, 3, 82, 11, 98, 246, 1, 63, 118, 253, 85, 252, 191, 10, 81, 174, 112, 124, 72, 45, 152, 254, 217, 37, 160, 38, 216, 75, 126, 212, 104, 218, 6, 82, 253, 166, 18, 130, 22, 92, 137, 198, 42, 27, 152, 229, 106, 184, 212, 119, 68, 10, 127, 10, 220, 144, 243, 162, 178, 31, 27, 174, 36, 206, 237, 171, 99, 217, 121, 58, 178, 211, 167, 157, 181, 48, 68, 168, 152, 196, 39, 79, 49, 235, 210, 122, 92, 125, 134, 37, 232, 29, 0, 193, 255, 169, 30, 116, 145, 170, 121, 228, 242, 200, 237, 164, 48, 240, 158, 221, 165, 252, 51, 251, 132, 59, 105, 157, 143, 219, 221, 183, 93, 113, 56, 5, 246, 176, 215, 162, 216, 115, 87, 185, 137, 17, 133, 238, 99, 129, 233, 179, 14, 9, 235, 142, 177, 9, 114, 128, 217, 135, 97, 1, 224, 171, 56, 71, 116, 146, 224, 63, 240, 65, 138, 196, 172, 223, 145, 96, 224, 4, 141, 116, 24, 225, 216, 12, 28, 135, 32, 229, 11, 92, 177, 137, 208, 33, 43, 106, 247, 131, 30, 22, 97, 202, 193, 113, 53, 40, 197, 220, 0, 238, 212, 0, 92, 191, 183, 45, 240, 209, 203, 242, 59, 204, 99, 131, 227, 96, 246, 28, 141, 254, 234, 89, 146, 185, 25, 254, 69, 121, 227, 145, 4, 125, 13, 202, 66, 150, 192, 194, 43, 202, 191, 126, 79, 181, 223, 174, 178, 182, 191, 78, 193, 97, 56, 41, 31, 84, 53, 233, 42, 5, 125, 16, 41, 247, 196, 47, 241, 239, 184, 8, 82, 129, 164, 38, 57, 223, 1, 171, 100, 148, 90, 76, 91, 128, 14, 122, 214, 163, 231, 192, 194, 136, 53, 137, 187, 13, 243, 165, 166, 86, 93, 195, 139, 53, 161, 202, 216, 27, 120, 41, 104, 147, 234, 35, 103, 111, 170, 23, 69, 236, 97, 176, 169, 176, 196, 83, 213, 11, 127, 51, 128, 20, 31, 46, 33, 240, 152, 62, 140, 199, 97, 115, 160, 49, 144, 147, 44, 214, 56, 198, 131, 14, 187, 238, 32, 27, 108, 23, 49, 202, 27, 163, 142, 250, 195, 151, 55, 15, 204, 138, 62, 29, 147, 237, 126, 222, 131, 202, 117, 240, 94, 208, 109, 61, 128, 156, 204, 245, 127, 138, 192, 112, 239, 43, 68, 217, 96, 161, 173, 198, 254, 36, 32, 217, 55, 126, 74, 243, 37, 185, 71, 152, 205, 83, 180, 207, 55, 140, 171, 173, 95, 173, 234, 199, 181, 220, 99, 108, 90, 72, 127, 199, 184, 172, 76, 93, 235, 56, 71, 8, 83, 83, 217, 135, 115, 82, 54, 182, 200, 106, 216, 152, 80, 130, 202, 44, 112, 155, 195, 194, 87, 12, 25, 18, 108, 35, 74, 24, 22, 120, 120, 10, 38, 202, 139, 159, 229, 247, 112, 12, 55, 46, 85, 187, 179, 207, 57, 225, 40, 140, 208, 101, 143, 211, 176, 101, 65, 84, 247, 81, 147, 45, 40, 81, 202, 196, 136, 62, 101, 183, 35, 72, 200, 56, 41, 241, 125, 146, 83, 193, 217, 189, 234, 193, 12, 195, 248, 149, 99, 201, 120, 23, 169, 81, 180, 61, 241, 158, 247, 249, 1, 135, 92, 183, 82, 118, 66, 248, 110, 203, 56, 123, 188, 219, 99, 21, 250, 110, 19, 83, 178, 115, 182, 191, 117, 66, 66, 200, 202, 246, 67, 138, 27, 145, 174, 1, 133, 24, 185, 70, 105, 7, 53, 240, 124, 160, 147, 236, 201, 221, 140, 110, 148, 87, 143, 80, 80, 6, 59, 177, 46, 97, 93, 198, 62, 120, 114, 37, 76, 162, 16, 230, 10, 158, 224, 183, 198, 109, 12, 49, 179, 213, 97, 144, 107, 24, 108, 109, 141, 146, 147, 223, 219, 222, 221, 57, 57, 223, 29, 229, 177, 12, 251, 2, 102, 6, 54, 180, 134, 50, 61, 55, 216, 211, 247, 157, 193, 57, 35, 171, 250, 182, 172, 121, 41, 3, 86, 199, 209, 133, 130, 53, 174, 81, 103, 189, 221, 212, 242, 249, 230, 6, 40, 131, 246, 69, 141, 101, 168, 221, 138, 97, 172, 22, 140, 213, 18, 135, 240, 208, 156, 134, 251, 254, 104, 25, 123, 9, 92, 119, 201, 66, 121, 138, 18, 199, 151, 92, 151, 31, 75, 34, 8, 202, 192, 198, 174, 224, 197, 105, 243, 14, 255, 62, 109, 65, 19, 166, 159, 50, 153, 16, 1, 172, 139, 68, 132, 166, 254, 4, 34, 83, 46, 197, 145, 104, 144, 206, 147, 92, 100, 153, 140, 116, 87, 170, 35, 98, 79, 97, 213, 83, 220, 238, 228, 180, 148, 105, 177, 104, 214, 176, 206, 4, 128, 255, 59, 191, 5, 221, 88, 21, 118, 247, 227, 130, 158, 103, 41, 52, 116, 92, 235, 138, 145, 112, 21, 40, 225, 204, 34, 61, 99, 227, 86, 162, 177, 132, 143, 60, 12, 34, 50, 113, 76, 250, 176, 57, 105, 249, 203, 89, 138, 136, 95, 139, 140, 121, 1, 145, 44, 4, 240, 161, 126, 20, 222, 136, 104, 133, 63, 103, 142, 185, 217, 146, 132, 182, 134, 29, 167, 152, 218, 88, 24, 124, 206, 46, 11, 137, 208, 42, 2, 8, 155, 226, 1, 255, 245, 112, 132, 74, 90, 59, 107, 205, 72, 226, 196, 126, 88, 11, 66, 204, 147, 166, 197, 150, 218, 226, 99, 74, 132, 235, 51, 137, 233, 231, 218, 18, 179, 16, 74, 240, 133, 153, 58, 154, 54, 70, 244, 172, 207, 175, 202, 152, 63, 70, 72, 49, 102, 169, 70, 12, 234, 255, 66, 78, 227, 10, 20, 144, 18, 213, 115, 114, 100, 221, 111, 173, 51, 245, 212, 201, 106, 228, 146, 2, 246, 239, 16, 196, 249, 146, 28, 134, 32, 163, 231, 102, 241, 141, 156, 108, 232, 15, 204, 151, 86, 250, 29, 113, 254, 23, 173, 16, 200, 115, 219, 64, 139, 120, 201, 3, 89, 159, 34, 210, 197, 246, 13, 83, 67, 198, 217, 204, 21, 104, 233, 213, 255, 232, 226, 197, 96, 160, 162, 134, 162, 111, 107, 206, 128, 135, 44, 146, 61, 28, 208, 131, 135, 3, 95, 95, 106, 117, 30, 204, 64, 92, 163, 228, 150, 72, 104, 185, 125, 111, 96, 177, 221, 35, 7, 244, 71, 213, 83, 1, 200, 109, 15, 153, 172, 12, 164, 162, 175, 115, 240, 158, 132, 103, 154, 57, 169, 219, 237, 184, 16, 41, 193, 85, 244, 143, 230, 188, 98, 24, 83, 138, 255, 47, 185, 82, 90, 192, 90, 128, 10, 229, 52, 144, 32, 73, 63, 142, 109, 179, 15, 31, 113, 19, 218, 123, 214, 182, 246, 10, 92, 130, 67, 226, 183, 44, 252, 151, 230, 41, 44, 55, 252, 230, 44, 53, 180, 17, 125, 81, 157, 90, 11, 43, 241, 78, 64, 232, 44, 159, 114, 147, 254, 43, 90, 177, 189, 179, 32, 87, 226, 153, 126, 30, 204, 155, 166, 162, 34, 111, 58, 188, 239, 186, 231, 67, 82, 5, 180, 11, 78, 43, 155, 97, 52, 24, 76, 144, 129, 213, 238, 208, 32, 41, 253, 120, 122, 205, 232, 129, 228, 178, 177, 12, 248, 117, 121, 13, 228, 247, 129, 140, 4, 112, 33, 76, 178, 207, 196, 141, 194, 36, 44, 20, 176, 98, 43, 190, 132, 162, 181, 239, 10, 198, 198, 80, 201, 132, 10, 241, 130, 31, 135, 14, 121, 231, 205, 173, 116, 45, 6, 80, 57, 155, 221, 32, 172, 119, 84, 227, 53, 118, 183, 63, 166, 51, 218, 72, 135, 14, 223, 207, 156, 7, 181, 25, 242, 65, 9, 251, 174, 253, 245, 15, 252, 159, 36, 32, 209, 164, 15, 225, 202, 26, 125, 12, 218, 90, 139, 57, 233, 123, 111, 94, 254, 96, 195, 249, 102, 57, 169, 80, 123, 74, 255, 28, 26, 157, 76, 30, 200, 75, 80, 171, 46, 29, 84, 124, 117, 160, 5, 250, 115, 139, 178, 7, 129, 60, 150, 189, 95, 121, 52, 250, 124, 183, 172, 84, 148, 208, 160, 71, 75, 90, 143, 247, 162, 73, 70, 35, 5, 66, 159, 240, 81, 224, 40, 99, 86, 209, 233, 95, 146, 54, 223, 113, 18, 92, 198, 193, 67, 197, 75, 140, 117, 224, 214, 247, 232, 171, 179, 81, 1, 208, 76, 43, 97, 69, 178, 185, 145, 180, 26, 249, 37, 4, 19, 218, 127, 25, 144, 233, 86, 77, 41, 69, 254, 88, 194, 76, 99, 28, 29, 1, 103, 29, 174, 83, 222, 96, 101, 206, 224, 209, 83, 9, 214, 102, 183, 126, 97, 199, 53, 34, 144, 228, 53, 54, 68, 59, 212, 115, 233, 204, 238, 40, 95, 158, 151, 208, 168, 232, 235, 162, 80, 177, 140, 179, 35, 195, 250, 83, 5, 91, 29, 254, 203, 104, 169, 156, 19, 59, 133, 101, 236, 125, 90, 5, 31, 3, 64, 74, 108, 100, 50, 27, 37, 26, 45, 242, 250, 16, 76, 19, 7, 177, 206, 7, 239, 80, 254, 106, 100, 29, 17, 218, 175, 247, 237, 158, 249, 215, 250, 56, 34, 200, 240, 107, 144, 29, 237, 27, 1, 245, 18, 175, 160, 217, 158, 190, 6, 192, 201, 118, 69, 23, 114, 149, 180, 158, 122, 140, 77, 87, 42, 221, 32, 220, 205, 236, 149, 141, 124, 115, 142, 125, 163, 204, 219, 7, 224, 40, 189, 14, 7, 197, 46, 148, 28, 128, 18, 59, 197, 130, 226, 15, 65, 31, 56, 52, 200, 3, 13, 74, 55, 23, 158, 56, 82, 186, 125, 185, 134, 47, 110, 142, 132, 0, 153, 205, 161, 85, 2, 242, 53, 200, 218, 38, 88, 70, 244, 221, 149, 181, 108, 45, 67, 151, 8, 98, 87, 215, 89, 63, 172, 29, 45, 157, 23, 46, 65, 231, 75, 96, 83, 22, 60, 64, 38, 148, 182, 213, 69, 183, 196, 103, 205, 91, 62, 146, 78, 166, 84, 142, 78, 113, 61, 42, 152, 106, 34, 69, 57, 40, 83, 198, 177, 180, 230, 248, 162, 151, 105, 125, 51, 81, 59, 11, 254, 250, 69, 250, 102, 2, 250, 110, 60, 242, 99, 123, 87, 136, 35, 238, 207, 100, 156, 182, 1, 113, 8, 172, 146, 98, 218, 236, 208, 230, 86, 213, 90, 110, 148, 91, 95, 140, 58, 53, 144, 207, 15, 30, 63, 109, 77, 211, 65, 79, 210, 223, 29, 112, 92, 41, 252, 2, 210, 20, 39, 136, 148, 206, 50, 79, 159, 40, 176, 56, 244, 239, 209, 112, 123, 88, 70, 178, 161, 167, 123, 112, 252, 246, 83, 174, 87, 253, 239, 20, 162, 57, 38, 168, 17, 5, 154, 250, 249, 55, 166, 255, 14, 237, 99, 97, 182, 182, 32, 158, 19, 170, 243, 222, 132, 24, 169, 45, 193, 189, 39, 229, 185, 83, 8, 243, 160, 146, 201, 68, 179, 37, 119, 98, 5, 88, 97, 250, 198, 192, 174, 230, 1, 211, 238, 182, 207, 28, 170, 194, 6, 232, 73, 208, 154, 176, 221, 99, 24, 27, 182, 124, 201, 230, 52, 189, 63, 65, 195, 145, 205, 137, 54, 111, 96, 56, 142, 84, 223, 172, 130, 77, 26, 214, 110, 22, 69, 222, 140, 141, 189, 10, 251, 185, 57, 96, 37, 197, 182, 197, 203, 206, 171, 227, 205, 145, 173, 25, 33, 85, 148, 183, 186, 101, 108, 154, 48, 66, 5, 5, 100, 248, 153, 22, 130, 167, 83, 183, 142, 0, 231, 183, 83, 13, 119, 23, 78, 224, 237, 192, 25, 57, 0, 10, 161, 231, 139, 219, 170, 44, 36, 74, 218, 55, 68, 24, 209, 176, 222, 22, 185, 39, 5, 187, 147, 172, 13, 167, 34, 215, 152, 182, 143, 125, 49, 21, 1, 141, 236, 163, 135, 15, 173, 79, 146, 234, 150, 241, 54, 118, 151, 233, 134, 98, 141, 124, 223, 244, 224, 66, 204, 215, 221, 149, 175, 103, 92, 245, 172, 33, 231, 230, 34, 54, 50, 255, 64, 34, 129, 242, 79, 207, 206, 181, 83, 245, 118, 172, 235, 107, 81, 17, 129, 215, 249, 21, 24, 185, 166, 196, 213, 249, 112, 56, 18, 169, 173, 87, 180, 54, 47, 159, 19, 187, 90, 81, 253, 190, 138, 56, 151, 76, 61, 186, 107, 73, 187, 126, 159, 20, 117, 75, 73, 30, 250, 90, 55, 0, 27, 94, 118, 116, 37, 91, 8, 35, 210, 37, 204, 246, 220, 197, 160, 125, 109, 127, 45, 203, 139, 154, 210, 52, 238, 118, 195, 53, 43, 56, 152, 55, 20, 63, 116, 230, 148, 48, 219, 113, 40, 16, 22, 72, 55, 36, 107, 220, 173, 128, 180, 73, 68, 246, 38, 162, 59, 16, 80, 181, 80, 75, 11, 100, 48, 128, 10, 80, 149, 39, 56, 103, 80, 254, 215, 153, 222, 32, 161, 165, 150, 132, 125, 39, 66, 205, 165, 36, 149, 48, 11, 80, 13, 118, 114, 69, 215, 237, 234, 222, 107, 170, 132, 72, 70, 222, 54, 75, 91, 96, 57, 75, 63, 22, 173, 119, 211, 250, 193, 107, 138, 33, 18, 67, 158, 116, 101, 37, 125, 167, 179, 196, 89, 45, 31, 100, 171, 61, 17, 67, 242, 180, 141, 32, 251, 105, 212, 236, 118, 103, 48, 89, 159, 153, 65, 194, 3, 220, 11, 110, 234, 151, 181, 187, 133, 64, 37, 125, 218, 234, 15, 88, 42, 100, 211, 16, 77, 86, 26, 3, 69, 189, 69, 64, 30, 151, 51, 26, 160, 162, 172, 59, 254, 164, 235, 73, 88, 224, 163, 63, 238, 248, 19, 14, 204, 99, 255, 31, 136, 99, 87, 227, 8, 128, 96, 154, 124, 77, 211, 204, 252, 193, 191, 146, 105, 202, 12, 172, 70, 196, 192, 103, 246, 195, 231, 127, 252, 11, 88, 153, 174, 146, 196, 109, 238, 18, 244, 33, 121, 195, 247, 5, 3, 79, 247, 99, 230, 7, 246, 243, 118, 242, 228, 214, 34, 177, 144, 200, 112, 191, 36, 215, 57, 29, 59, 131, 195, 103, 67, 150, 132, 174, 235, 156, 106, 73, 252, 91, 19, 150, 6, 226, 221, 204, 162, 178, 112, 108, 44, 47, 237, 219, 119, 187, 6, 255, 233, 249, 94, 218, 53, 160, 215, 111, 135, 39, 246, 223, 78, 124, 37, 138, 155, 211, 129, 160, 161, 165, 134, 97, 88, 81, 214, 64, 184, 160, 79, 207, 155, 236, 8, 73, 255, 188, 182, 55, 155, 95, 130, 61, 159, 178, 103, 189, 251, 13, 82, 27, 130, 40, 141, 238, 157, 224, 92, 138, 114, 93, 214, 70, 141, 178, 108, 0, 50, 98, 66, 43, 148, 146, 104, 26, 19, 68, 2, 87, 131, 166, 180, 120, 42, 11, 120, 94, 220, 33, 248, 216, 111, 83, 41, 1, 148, 130, 234, 229, 194, 48, 197, 176, 54, 212, 201, 178, 242, 94, 180, 65, 235, 71, 129, 117, 224, 90, 63, 1, 87, 28, 255, 142, 204, 231, 120, 223, 38, 45, 13, 87, 123, 9, 235, 20, 2, 134, 143, 112, 76, 121, 102, 183, 213, 117, 54, 42, 243, 248, 122, 236, 62, 96, 13, 163, 1, 188, 219, 66, 21, 151, 249, 122, 204, 163, 139, 138, 247, 144, 234, 204, 136, 59, 170, 115, 13, 197, 112, 184, 141, 131, 255, 205, 148, 231, 73, 166, 6, 249, 242, 110, 4, 224, 187, 113, 129, 52, 214, 176, 197, 245, 9, 142, 222, 161, 159, 102, 86, 182, 67, 138, 106, 249, 100, 72, 159, 183, 59, 170, 137, 148, 192, 106, 21, 35, 131, 197, 60, 96, 79, 33, 224, 45, 121, 72, 151, 121, 181, 32, 70, 56, 217, 44, 19, 235, 194, 140, 8, 14, 43, 130, 37, 45, 131, 133, 136, 175, 64, 130, 218, 237, 132, 133, 2, 14, 225, 150, 72, 236, 202, 149, 235, 90, 148, 102, 76, 169, 39, 154, 68, 177, 44, 236, 9, 79, 202, 216, 91, 2, 82, 12, 57, 67, 114, 182, 235, 240, 90, 136, 230, 83, 132, 224, 106, 113, 54, 167, 248, 170, 185, 170, 148, 238, 142, 135, 15, 62, 76, 235, 112, 55, 88, 58, 27, 62, 185, 99, 99, 101, 188, 84, 200, 52, 236, 204, 135, 132, 122, 55, 53, 206, 195, 54, 188, 129, 223, 55, 149, 81, 29, 168, 178, 8, 140, 248, 110, 211, 119, 89, 225, 130, 91, 201, 39, 220, 153, 36, 126, 25, 100, 172, 231, 114, 224, 110, 60, 63, 23, 154, 27, 250, 151, 87, 122, 97, 222, 146, 149, 175, 91, 157, 143, 77, 93, 237, 218, 48, 113, 17, 8, 162, 194, 110, 93, 176, 172, 228, 162, 0, 126, 64, 214, 184, 114, 153, 13, 174, 91, 44, 164, 113, 217, 14, 170, 49, 253, 81, 52, 86, 224, 252, 106, 15, 117, 43, 64, 89, 57, 230, 173, 173, 231, 148, 87, 122, 82, 225, 102, 245, 51, 224, 227, 49, 74, 139, 99, 64, 32, 160, 155, 165, 60, 207, 52, 155, 60, 110, 151, 2, 193, 217, 89, 216, 245, 255, 250, 63, 127, 64, 28, 72, 100, 221, 201, 114, 21, 96, 231, 202, 86, 128, 164, 157, 47, 34, 132, 237, 102, 25, 151, 5, 157, 85, 249, 20, 118, 56, 1, 177, 219, 235, 30, 165, 190, 83, 156, 84, 84, 144, 215, 109, 244, 177, 167, 123, 140, 217, 190, 176, 75, 96, 69, 73, 78, 132, 139, 129, 111, 56, 104, 204, 122, 102, 134, 91, 247, 4, 116, 70, 56, 74, 202, 162, 238, 237, 66, 64, 49, 158, 207, 127, 3, 92, 4, 217, 213, 249, 8, 156, 253, 114, 28, 144, 76, 192, 202, 86, 24, 136, 199, 179, 81, 81, 53, 102, 46, 198, 138, 87, 55, 162, 163, 131, 52, 246, 4, 79, 236, 62, 225, 80, 105, 172, 230, 241, 241, 52, 249, 32, 107, 30, 94, 65, 118, 95, 244, 106, 158, 166, 65, 21, 236, 141, 248, 199, 81, 238, 205, 175, 136, 166, 74, 19, 70, 252, 168, 178, 67, 245, 77, 104, 97, 10, 191, 65, 79, 52, 6, 5, 48, 22, 78, 33, 231, 69, 15, 160, 119, 252, 251, 214, 234, 43, 164, 199, 29, 47, 10, 35, 200, 60, 93, 160, 255, 121, 191, 68, 187, 194, 13, 200, 93, 218, 248, 117, 32, 72, 207, 193, 79, 217, 20, 19, 14, 157, 161, 134, 39, 168, 46, 208, 89, 9, 52, 83, 9, 73, 8, 100, 80, 75, 152, 173, 7, 215, 190, 239, 133, 160, 128, 84, 112, 163, 221, 213, 7, 178, 235, 192, 113, 225, 12, 147, 14, 40, 110, 245, 155, 74, 122, 229, 164, 141, 202, 50, 150, 60, 9, 20, 64, 228, 186, 99, 63, 25, 68, 100, 91, 240, 21, 207, 22, 59, 77, 58, 97, 151, 110, 86, 21, 113, 46, 217, 176, 202, 213, 164, 247, 137, 146, 240, 27, 233, 191, 124, 42, 12, 168, 79, 158, 153, 194, 121, 50, 55, 15, 139, 208, 167, 182, 9, 63, 60, 10, 254, 145, 169, 198, 112, 30, 184, 82, 146, 251, 52, 173, 22, 1, 0, 55, 255, 167, 42, 225, 204, 7, 31, 164, 183, 9, 238, 0, 72, 138, 155, 132, 55, 99, 106, 134, 154, 1, 246, 25, 181, 174, 241, 184, 67, 24, 189, 94, 43, 2, 3, 63, 10, 126, 188, 108, 220, 62, 124, 107, 140, 181, 82, 19, 51, 51, 56, 137, 49, 163, 149, 100, 69, 52, 195, 197, 22, 227, 104, 201, 59, 103, 199, 8, 33, 83, 231, 58, 215, 96, 72, 252, 246, 176, 10, 32, 29, 121, 243, 107, 31, 126, 27, 44, 123, 100, 149, 25, 215, 3, 64, 228, 51, 236, 202, 77, 140, 99, 193, 38, 2, 123, 121, 157, 79, 80, 94, 222, 116, 4, 61, 225, 55, 119, 174, 115, 80, 179, 249, 193, 210, 52, 250, 90, 80, 58, 185, 172, 115, 73, 96, 31, 226, 164, 246, 171, 159, 89, 32, 70, 26, 121, 45, 11, 255, 14, 205, 191, 52, 16, 67, 66, 176, 10, 118, 155, 136, 165, 98, 26, 17, 100, 108, 54, 4, 209, 113, 43, 190, 150, 12, 4, 171, 151, 163, 17, 16, 216, 59, 4, 197, 70, 150, 171, 121, 216, 233, 212, 166, 217, 86, 232, 186, 160, 16, 228, 168, 226, 104, 9, 69, 176, 27, 25, 143, 3, 29, 135, 174, 60, 65, 159, 168, 130, 87, 10, 82, 44, 172, 158, 187, 145, 220, 192, 91, 158, 100, 62, 50, 135, 26, 229, 145, 80, 47, 3, 5, 244, 74, 113, 12, 0, 5, 43, 143, 77, 223, 57, 63, 190, 112, 0, 97, 133, 201, 213, 9, 214, 108, 148, 154, 0, 229, 119, 208, 252, 107, 55, 227, 179, 207, 221, 222, 80, 127, 183, 186, 93, 246, 116, 164, 60, 169, 192, 70, 41, 34, 31, 47, 208, 113, 29, 232, 80, 12, 56, 100, 198, 80, 19, 178, 188, 75, 6, 1, 10, 173, 156, 202, 149, 240, 222, 166, 224, 10, 145, 110, 127, 111, 135, 153, 162, 2, 35, 113, 2, 96, 221, 34, 117, 107, 164, 161, 178, 193, 235, 118, 144, 208, 224, 133, 87, 38, 218, 19, 175, 88, 189, 18, 176, 15, 26, 43, 4, 195, 71, 9, 196, 62, 160, 234, 115, 179, 8, 165, 154, 17, 9, 212, 115, 138, 245, 80, 244, 108, 46, 164, 66, 148, 180, 38, 220, 79, 216, 217, 211, 130, 28, 108, 195, 233, 95, 252, 20, 225, 16, 25, 87, 64, 241, 165, 71, 151, 172, 131, 45, 57, 65, 157, 60, 121, 24, 191, 185, 221, 161, 129, 108, 6, 57, 172, 94, 4, 62, 7, 10, 239, 159, 163, 180, 195, 76, 155, 66, 229, 169, 184, 122, 208, 69, 2, 190, 122, 51, 15, 220, 21, 219, 26, 232, 197, 188, 135, 234, 146, 52, 187, 172, 218, 131, 247, 76, 165, 11, 67, 242, 34, 221, 203, 235, 236, 195, 85, 3, 10, 146, 145, 140, 194, 185, 43, 196, 220, 176, 69, 201, 7, 244, 245, 51, 240, 146, 180, 5, 223, 137, 48, 201, 176, 21, 161, 118, 187, 228, 13, 29, 241, 182, 174, 163, 18, 72, 204, 235, 161, 206, 223, 184, 42, 161, 172, 134, 158, 63, 98, 65, 193, 71, 56, 149, 157, 17, 201, 43, 95, 130, 127, 51, 223, 189, 17, 185, 77, 180, 75, 202, 253, 223, 222, 62, 213, 0, 61, 30, 153, 74, 113, 157, 175, 177, 209, 246, 79, 43, 200, 179, 129, 161, 31, 157, 24, 29, 119, 125, 136, 66, 215, 38, 7, 170, 224, 38, 211, 93, 233, 15, 242, 167, 235, 134, 195, 71, 131, 93, 88, 19, 164, 58, 238, 44, 111, 169, 112, 92, 114, 110, 90, 24, 184, 187, 135, 41, 183, 22, 184, 152, 72, 199, 62, 12, 173, 237, 20, 134, 232, 127, 176, 203, 33, 166, 114, 240, 55, 62, 102, 225, 193, 14, 122, 121, 125, 231, 139, 2, 56, 238, 86, 124, 170, 27, 164, 132, 125, 201, 217, 102, 43, 85, 154, 205, 101, 182, 39, 66, 150, 42, 174, 111, 145, 198, 138, 174, 113, 124, 188, 75, 121, 231, 37, 195, 106, 186, 169, 107, 176, 202, 48, 133, 61, 48, 29, 149, 246, 200, 94, 34, 243, 233, 164, 15, 51, 126, 119, 11, 187, 107, 22, 49, 150, 134, 190, 26, 117, 105, 214, 228, 71, 155, 100, 86, 133, 194, 162, 25, 87, 18, 194, 32, 152, 201, 237, 222, 105, 127, 17, 163, 89, 60, 93, 76, 99, 147, 141, 148, 112, 53, 209, 110, 231, 247, 178, 28, 5, 80, 170, 218, 165, 253, 179, 230, 38, 94, 21, 127, 194, 224, 130, 105, 71, 111, 130, 108, 160, 80, 23, 76, 208, 174, 99, 30, 245, 61, 0, 63, 92, 11, 103, 253, 80, 74, 188, 196, 54, 179, 251, 173, 22, 4, 129, 164, 67, 162, 80, 79, 40, 108, 221, 245, 59, 29, 145, 86, 137, 220, 248, 30, 249, 220, 201, 211, 245, 133, 184, 180, 70, 239, 113, 111, 150, 235, 101, 14, 24, 54, 70, 79, 109, 143, 114, 63, 15, 173, 10, 85, 228, 110, 56, 16, 228, 110, 79, 116, 214, 93, 159, 159, 78, 56, 39, 211, 152, 152, 237, 138, 237, 2, 199, 23, 233, 25, 27, 123, 80, 212, 239, 59, 12, 214, 85, 12, 238, 227, 121, 61, 252, 26, 158, 174, 177, 21, 100, 145, 95, 121, 156, 246, 32, 237, 134, 56, 226, 121, 220, 100, 194, 125, 133, 194, 228, 227, 148, 13, 173, 160, 0, 79, 94, 255, 205, 124, 11, 10, 116, 109, 98, 110, 174, 99, 231, 28, 205, 53, 70, 43, 59, 4, 29, 214, 231, 251, 62, 169, 113, 110, 21, 158, 33, 98, 211, 205, 193, 215, 83, 184, 157, 232, 27, 18, 160, 167, 4, 15, 106, 75, 120, 114, 163, 48, 170, 251, 57, 28, 111, 232, 123, 156, 233, 19, 122, 167, 51, 35, 227, 83, 226, 93, 65, 46, 221, 75, 96, 115, 152, 129, 79, 19, 131, 233, 52, 3, 250, 0, 210, 139, 3, 240, 224, 249, 137, 195, 115, 12, 119, 240, 215, 129, 92, 116, 60, 255, 200, 43, 75, 0, 95, 225, 107, 84, 211, 127, 157, 178, 232, 63, 66, 164, 108, 86, 181, 105, 153, 44, 147, 123, 132, 21, 221, 91, 150, 0, 8, 129, 71, 81, 144, 143, 125, 218, 116, 79, 125, 11, 162, 30, 136, 15, 204, 110, 36, 202, 228, 106, 138, 113, 2, 223, 251, 12, 22, 224, 195, 94, 92, 65, 107, 45, 113, 4, 230, 17, 219, 15, 237, 201, 119, 120, 29, 43, 0, 53, 219, 92, 71, 78, 34, 38, 217, 128, 110, 167, 248, 181, 211, 171, 115, 228, 130, 112, 191, 51, 70, 25, 71, 191, 4, 109, 126, 66, 81, 51, 78, 149, 30, 237, 188, 67, 241, 116, 72, 4, 62, 143, 143, 134, 206, 152, 39, 168, 105, 88, 136, 162, 5, 145, 170, 62, 97, 108, 130, 63, 108, 202, 188, 101, 106, 82, 72, 78, 182, 0, 150, 121, 44, 112, 84, 122, 193, 15, 27, 50, 140, 17, 51, 86, 224, 19, 180, 189, 101, 16, 14, 204, 203, 24, 81, 136, 16, 49, 198, 29, 103, 136, 69, 175, 171, 251, 35, 175, 167, 54, 117, 80, 118, 59, 111, 183, 134, 70, 58, 44, 20, 227, 146, 237, 184, 75, 62, 15, 151, 115, 156, 193, 68, 166, 148, 199, 25, 43, 245, 230, 161, 100, 82, 71, 207, 133, 39, 229, 105, 188, 142, 131, 221, 76, 25, 204, 30, 115, 203, 125, 209, 4, 74, 11, 43, 47, 196, 102, 67, 128, 22, 40, 160, 48, 211, 35, 224, 124, 127, 140, 77, 5, 78, 16, 21, 116, 34, 55, 178, 247, 157, 84, 6, 238, 220, 125, 12, 79, 95, 5, 51, 159, 169, 36, 85, 142, 174, 249, 214, 51, 197, 126, 76, 150, 57, 246, 89, 20, 168, 126, 0, 20, 76, 159, 109, 67, 147, 107, 28, 50, 193, 202, 6, 119, 18, 78, 192, 202, 96, 3, 141, 99, 227, 226, 224, 7, 146, 193, 100, 66, 182, 223, 100, 136, 184, 123, 73, 190, 253, 0, 120, 123, 60, 182, 119, 11, 142, 226, 14, 139, 81, 78, 50, 133, 111, 199, 186, 142, 34, 65, 116, 245, 246, 166, 255, 238, 177, 82, 118, 0, 93, 63, 154, 97, 80, 57, 132, 189, 64, 109, 223, 99, 14, 236, 111, 11, 182, 232, 95, 78, 249, 150, 179, 161, 36, 82, 201, 81, 169, 85, 244, 93, 228, 148, 248, 99, 47, 134, 29, 103, 148, 141, 162, 209, 28, 12, 224, 92, 99, 225, 52, 72, 31, 149, 33, 34, 67, 79, 11, 69, 92, 28, 113, 1, 49, 84, 214, 61, 134, 132, 219, 243, 168, 129, 188, 96, 216, 195, 184, 204, 18, 4, 37, 188, 32, 138, 174, 48, 185, 135, 104, 180, 237, 223, 91, 86, 60, 58, 30, 17, 27, 191, 40, 144, 139, 177, 89, 136, 237, 212, 141, 211, 135, 202, 133, 97, 31, 129, 212, 121, 162, 10, 92, 114, 76, 9, 80, 218, 6, 81, 159, 93, 41, 8, 118, 43, 247, 210, 76, 85, 183, 99, 232, 192, 137, 216, 145, 94, 189, 2, 65, 45, 247, 86, 93, 231, 192, 75, 159, 30, 80, 235, 126, 74, 165, 74, 25, 126, 254, 113, 149, 241, 175, 41, 196, 195, 153, 3, 161, 63, 45, 161, 112, 26, 77, 27, 104, 176, 175, 135, 45, 23, 254, 253, 83, 123, 253, 80, 84, 67, 221, 157, 238, 66, 248, 39, 158, 36, 11, 234, 72, 202, 32, 228, 129, 21, 162, 7, 169, 180, 253, 31, 215, 197, 22, 6, 19, 26, 155, 65, 0, 224, 189, 100, 70, 37, 225, 214, 179, 40, 30, 42, 240, 146, 165, 243, 119, 172, 172, 57, 240, 18, 24, 148, 132, 212, 155, 134, 222, 15, 209, 198, 64, 9, 93, 180, 91, 236, 120, 42, 155, 65, 118, 136, 86, 223, 181, 43, 157, 47, 63, 127, 195, 212, 11, 242, 239, 191, 94, 225, 244, 118, 181, 34, 249, 159, 17, 196, 233, 157, 53, 144, 183, 141, 72, 71, 124, 134, 206, 178, 153, 42, 54, 244, 142, 175, 48, 244, 225, 88, 138, 98, 215, 55, 168, 211, 179, 105, 144, 9, 148, 27, 55, 146, 49, 169, 12, 201, 105, 255, 30, 129, 136, 94, 42, 142, 205, 118, 217, 177, 183, 165, 114, 102, 173, 50, 227, 234, 38, 28, 169, 44, 68, 59, 85, 220, 26, 99, 192, 239, 21, 213, 49, 96, 127, 184, 189, 5, 210, 207, 87, 98, 36, 21, 210, 78, 43, 173, 235, 198, 236, 224, 29, 18, 21, 248, 118, 179, 218, 11, 51, 75, 245, 28, 127, 45, 167, 189, 199, 238, 26, 57, 143, 238, 199, 205, 168, 184, 243, 7, 252, 168, 14, 72, 14, 13, 141, 123, 213, 6, 38, 83, 151, 54, 188, 10, 186, 146, 13, 159, 211, 236, 133, 72, 60, 187, 152, 239, 24, 225, 134, 237, 91, 71, 30, 171, 19, 37, 121, 195, 55, 134, 61, 50, 50, 11, 198, 122, 154, 62, 186, 159, 213, 18, 69, 72, 138, 153, 110, 22, 111, 83, 209, 50, 30, 4, 121, 110, 149, 164, 189, 125, 190, 121, 168, 190, 134, 225, 52, 43, 185, 145, 174, 207, 59, 164, 102, 156, 96, 61, 229, 171, 182, 26, 33, 25, 195, 255, 52, 108, 82, 174, 6, 148, 35, 246, 213, 149, 243, 11, 69, 209, 144, 183, 223, 28, 248, 1, 144, 81, 97, 129, 89, 211, 157, 213, 28, 112, 28, 111, 87, 133, 133, 183, 213, 208, 233, 15, 8, 201, 1, 156, 118, 248, 64, 25, 83, 164, 160, 101, 40, 187, 50, 105, 117, 30, 166, 156, 227, 249, 17, 223, 180, 135, 65, 232, 229, 254, 60, 31, 225, 169, 66, 247, 33, 141, 15, 48, 110, 214, 6, 56, 246, 153, 240, 223, 62, 41, 101, 107, 174, 224, 115, 35, 32, 28, 180, 50, 40, 117, 229, 149, 104, 230, 196, 64, 149, 185, 62, 34, 173, 145], - [44, 133, 71, 122, 18, 51, 43, 205, 28, 25, 200, 129, 3, 120, 58, 92, 0, 207, 183, 24, 214, 203, 83, 70, 133, 110, 32, 54, 184, 234, 17, 31, 145, 112, 196, 66, 129, 88, 37, 95, 38, 104, 210, 211, 141, 225, 178, 97, 132, 51, 172, 59, 46, 107, 97, 119, 187, 43, 169, 219, 220, 123, 84, 167, 252, 188, 118, 145, 157, 243, 26, 170, 57, 71, 253, 243, 87, 59, 45, 151, 16, 98, 10, 6, 252, 135, 219, 7, 219, 154, 79, 230, 253, 177, 78, 252, 153, 170, 119, 221, 164, 191, 2, 33, 229, 189, 41, 140, 76, 36, 112, 103, 91, 157, 99, 178, 19, 150, 98, 126, 56, 132, 41, 73, 2, 70, 216, 24, 12, 214, 66, 97, 74, 143, 189, 79, 125, 86, 155, 255, 70, 221, 82, 254, 1, 251, 249, 205, 194, 197, 94, 245, 25, 255, 224, 212, 101, 111, 133, 239, 78, 15, 61, 151, 97, 215, 3, 238, 43, 173, 64, 238, 207, 213, 121, 57, 201, 185, 84, 4, 72, 72, 11, 245, 216, 248, 254, 22, 156, 210, 113, 47, 91, 5, 26, 209, 106, 195, 229, 223, 254, 70, 165, 100, 181, 191, 53, 196, 3, 107, 234, 145, 14, 204, 124, 158, 162, 142, 75, 199, 184, 25, 227, 38, 89, 167, 185, 42, 148, 124, 218, 223, 179, 81, 120, 155, 206, 1, 33, 77, 60, 0, 141, 249, 8, 234, 122, 236, 140, 240, 26, 235, 119, 70, 53, 140, 198, 151, 84, 49, 18, 211, 192, 181, 224, 48, 118, 174, 178, 169, 84, 30, 91, 176, 233, 175, 150, 200, 208, 59, 69, 164, 43, 95, 86, 52, 120, 124, 239, 23, 96, 216, 55, 122, 240, 210, 247, 77, 27, 220, 26, 132, 141, 69, 103, 86, 154, 115, 95, 217, 89, 181, 203, 203, 71, 142, 94, 133, 219, 56, 45, 89, 144, 77, 19, 136, 181, 191, 72, 36, 23, 1, 78, 166, 184, 220, 63, 182, 87, 128, 250, 53, 110, 188, 107, 114, 243, 59, 31, 234, 57, 124, 109, 185, 47, 10, 106, 252, 186, 152, 193, 59, 66, 129, 43, 236, 142, 3, 2, 84, 55, 82, 38, 47, 240, 88, 218, 109, 70, 36, 35, 76, 168, 254, 88, 45, 143, 246, 114, 151, 22, 39, 166, 127, 8, 220, 218, 131, 53, 128, 162, 146, 197, 223, 81, 253, 121, 177, 147, 18, 34, 36, 51, 34, 3, 233, 179, 237, 112, 93, 161, 227, 137, 199, 205, 27, 83, 178, 26, 217, 142, 41, 144, 52, 121, 71, 166, 39, 98, 3, 87, 93, 63, 14, 123, 165, 175, 94, 56, 155, 237, 58, 172, 147, 61, 53, 120, 136, 34, 158, 24, 54, 233, 4, 38, 202, 75, 144, 97, 94, 63, 127, 133, 93, 41, 199, 29, 231, 82, 164, 134, 218, 137, 110, 73, 55, 211, 224, 224, 68, 49, 219, 206, 18, 25, 196, 85, 2, 203, 198, 249, 245, 162, 1, 139, 0, 46, 226, 191, 82, 150, 135, 182, 180, 186, 25, 19, 71, 37, 254, 65, 223, 100, 216, 87, 215, 244, 195, 245, 78, 29, 221, 227, 160, 178, 86, 142, 63, 175, 169, 234, 179, 2, 157, 86, 156, 206, 18, 198, 229, 72, 233, 20, 66, 187, 90, 137, 37, 230, 81, 254, 237, 34, 217, 125, 248, 126, 107, 211, 49, 49, 110, 62, 172, 173, 132, 189, 50, 179, 26, 205, 167, 171, 212, 249, 206, 228, 13, 202, 29, 128, 227, 254, 236, 30, 206, 167, 42, 74, 106, 169, 102, 63, 9, 173, 143, 130, 213, 208, 153, 45, 205, 7, 144, 160, 195, 238, 158, 162, 238, 41, 82, 127, 3, 128, 169, 132, 229, 178, 43, 20, 3, 150, 139, 51, 81, 113, 93, 189, 52, 211, 83, 203, 219, 164, 170, 218, 10, 225, 47, 174, 111, 62, 130, 42, 226, 211, 173, 65, 228, 99, 250, 1, 173, 2, 88, 137, 69, 187, 254, 225, 21, 104, 114, 35, 49, 132, 199, 149, 187, 201, 162, 32, 94, 186, 210, 171, 147, 243, 89, 126, 140, 54, 101, 153, 210, 12, 19, 233, 220, 22, 88, 41, 125, 67, 26, 173, 108, 125, 59, 29, 3, 3, 81, 247, 75, 26, 30, 231, 76, 132, 136, 92, 118, 112, 13, 252, 27, 163, 205, 85, 88, 121, 144, 211, 113, 158, 16, 117, 161, 78, 81, 209, 227, 214, 143, 2, 247, 37, 59, 157, 70, 123, 187, 61, 32, 145, 244, 229, 160, 46, 82, 92, 221, 234, 15, 187, 64, 207, 180, 132, 204, 178, 68, 7, 134, 103, 114, 162, 206, 225, 204, 188, 243, 83, 139, 12, 153, 89, 126, 227, 29, 171, 65, 129, 186, 130, 178, 18, 34, 49, 123, 174, 103, 134, 203, 190, 87, 43, 155, 46, 153, 223, 92, 78, 85, 134, 27, 1, 95, 223, 54, 76, 82, 161, 113, 130, 164, 31, 11, 4, 33, 39, 165, 223, 54, 53, 31, 144, 59, 29, 236, 33, 208, 114, 21, 100, 149, 61, 28, 30, 47, 155, 25, 40, 180, 192, 23, 30, 59, 58, 105, 150, 41, 154, 28, 110, 236, 78, 190, 70, 238, 219, 159, 113, 203, 123, 253, 65, 240, 149, 77, 221, 202, 52, 91, 225, 149, 187, 75, 51, 118, 57, 127, 161, 153, 231, 29, 144, 26, 102, 117, 88, 189, 35, 96, 58, 238, 10, 87, 168, 93, 110, 183, 61, 30, 40, 75, 231, 170, 181, 107, 178, 7, 124, 173, 124, 31, 232, 4, 181, 86, 168, 26, 187, 153, 186, 21, 189, 186, 194, 129, 173, 163, 122, 83, 211, 52, 157, 8, 98, 104, 88, 123, 43, 88, 210, 220, 28, 22, 89, 132, 245, 207, 15, 255, 33, 192, 67, 179, 45, 130, 47, 196, 173, 186, 248, 231, 176, 150, 213, 116, 197, 114, 197, 71, 187, 54, 114, 97, 36, 120, 75, 110, 91, 142, 78, 5, 158, 151, 19, 85, 38, 171, 123, 134, 224, 214, 213, 207, 202, 194, 113, 58, 235, 209, 82, 26, 61, 185, 34, 230, 135, 78, 151, 232, 203, 197, 43, 57, 237, 137, 214, 235, 223, 200, 18, 0, 156, 213, 72, 91, 72, 201, 32, 218, 188, 192, 239, 37, 214, 13, 213, 53, 188, 93, 5, 254, 174, 87, 141, 203, 37, 2, 29, 30, 3, 30, 229, 192, 146, 2, 54, 206, 179, 169, 252, 168, 98, 14, 28, 198, 160, 153, 249, 132, 144, 231, 179, 85, 56, 223, 231, 198, 193, 247, 160, 31, 236, 17, 212, 130, 25, 5, 17, 107, 13, 216, 186, 239, 162, 102, 76, 82, 60, 96, 203, 231, 179, 19, 245, 172, 29, 118, 130, 164, 124, 30, 242, 191, 224, 141, 161, 36, 55, 176, 133, 54, 154, 183, 107, 61, 119, 137, 253, 120, 152, 84, 162, 33, 245, 247, 126, 53, 23, 125, 105, 157, 224, 187, 55, 234, 52, 129, 88, 55, 174, 214, 159, 154, 203, 245, 21, 216, 225, 25, 215, 20, 210, 113, 251, 158, 0, 153, 3, 234, 183, 228, 220, 8, 101, 179, 14, 38, 169, 19, 155, 96, 15, 218, 217, 140, 99, 154, 237, 52, 135, 38, 50, 108, 228, 138, 93, 60, 179, 116, 143, 69, 142, 151, 64, 26, 140, 132, 36, 146, 217, 243, 226, 1, 129, 146, 96, 139, 179, 182, 95, 51, 14, 31, 0, 187, 80, 163, 98, 245, 30, 130, 6, 163, 56, 128, 231, 237, 184, 159, 188, 218, 250, 101, 204, 87, 236, 81, 24, 83, 74, 4, 44, 174, 191, 6, 47, 131, 111, 33, 179, 222, 106, 114, 181, 106, 234, 182, 155, 146, 227, 200, 85, 205, 116, 194, 92, 46, 188, 215, 189, 76, 164, 177, 220, 239, 107, 169, 147, 48, 246, 36, 248, 250, 8, 168, 119, 111, 34, 187, 183, 164, 51, 125, 243, 60, 91, 162, 182, 220, 36, 136, 147, 101, 167, 161, 232, 119, 255, 121, 219, 134, 37, 123, 246, 255, 186, 174, 120, 114, 25, 231, 39, 73, 171, 73, 202, 5, 116, 69, 49, 66, 142, 162, 211, 246, 213, 100, 61, 72, 203, 33, 74, 182, 128, 114, 105, 221, 249, 198, 243, 175, 176, 189, 154, 252, 24, 121, 36, 227, 55, 181, 126, 9, 202, 249, 216, 109, 60, 214, 161, 222, 145, 42, 7, 31, 177, 245, 76, 218, 194, 126, 78, 139, 6, 247, 44, 36, 52, 142, 160, 163, 190, 110, 34, 27, 176, 160, 224, 191, 137, 48, 40, 89, 73, 10, 2, 47, 248, 67, 184, 196, 18, 79, 150, 131, 15, 96, 114, 199, 234, 146, 50, 142, 220, 134, 67, 87, 60, 180, 37, 121, 255, 161, 4, 144, 32, 131, 226, 2, 31, 94, 23, 130, 85, 82, 172, 35, 148, 172, 1, 140, 227, 131, 181, 185, 252, 220, 228, 103, 47, 185, 228, 104, 27, 30, 56, 166, 142, 73, 251, 100, 20, 162, 186, 219, 112, 141, 14, 126, 209, 128, 147, 45, 196, 4, 216, 116, 32, 12, 183, 19, 68, 170, 56, 108, 223, 250, 172, 22, 147, 15, 150, 177, 113, 105, 206, 115, 145, 166, 159, 209, 162, 96, 162, 190, 136, 212, 76, 9, 132, 228, 195, 66, 154, 162, 110, 175, 214, 43, 132, 203, 21, 207, 42, 97, 190, 13, 54, 31, 200, 111, 219, 16, 90, 42, 244, 189, 53, 55, 179, 243, 92, 106, 97, 168, 138, 18, 97, 52, 52, 217, 133, 121, 209, 191, 136, 83, 190, 70, 68, 204, 43, 12, 70, 64, 169, 159, 102, 251, 113, 223, 5, 188, 235, 65, 97, 121, 195, 175, 234, 85, 130, 82, 196, 216, 152, 198, 183, 237, 49, 99, 116, 70, 234, 209, 96, 78, 14, 225, 94, 197, 48, 194, 188, 51, 97, 99, 150, 166, 223, 213, 115, 162, 101, 40, 17, 139, 170, 121, 108, 61, 139, 10, 117, 166, 247, 209, 142, 145, 75, 52, 101, 207, 247, 84, 50, 81, 127, 53, 133, 223, 103, 226, 157, 169, 165, 111, 126, 73, 147, 235, 7, 255, 206, 47, 11, 205, 238, 129, 169, 215, 39, 66, 87, 220, 7, 141, 37, 170, 123, 247, 51, 138, 232, 143, 238, 70, 155, 68, 116, 116, 16, 161, 21, 199, 160, 158, 225, 52, 68, 136, 49, 94, 150, 102, 9, 210, 222, 198, 247, 106, 171, 143, 44, 223, 217, 241, 78, 129, 153, 149, 179, 89, 24, 28, 178, 211, 103, 43, 212, 206, 104, 217, 82, 150, 211, 201, 17, 114, 196, 173, 210, 13, 15, 203, 84, 185, 3, 193, 139, 110, 42, 219, 72, 200, 214, 99, 95, 82, 90, 166, 79, 136, 229, 36, 120, 238, 104, 240, 14, 108, 36, 119, 191, 25, 208, 33, 0, 39, 103, 225, 127, 55, 180, 209, 113, 36, 54, 143, 63, 30, 242, 60, 220, 91, 36, 27, 171, 94, 119, 125, 230, 191, 42, 119, 209, 209, 225, 214, 100, 93, 165, 64, 6, 34, 72, 87, 19, 30, 5, 48, 60, 204, 104, 221, 111, 119, 154, 234, 20, 177, 121, 137, 18, 216, 223, 236, 50, 114, 193, 92, 214, 25, 169, 90, 124, 47, 141, 77, 111, 223, 100, 246, 42, 254, 246, 237, 85, 143, 247, 192, 167, 241, 127, 167, 164, 85, 45, 121, 229, 108, 181, 227, 139, 102, 243, 25, 235, 87, 32, 24, 216, 189, 3, 136, 32, 168, 111, 33, 235, 110, 30, 48, 91, 227, 145, 161, 35, 97, 250, 137, 49, 199, 51, 12, 122, 134, 172, 37, 201, 192, 156, 97, 42, 158, 53, 125, 84, 196, 30, 21, 109, 30, 153, 102, 142, 32, 109, 28, 158, 140, 91, 62, 119, 82, 63, 228, 252, 155, 40, 196, 164, 248, 255, 231, 182, 54, 30, 194, 159, 34, 137, 182, 228, 29, 196, 134, 178, 47, 158, 188, 251, 206, 108, 255, 6, 61, 206, 132, 60, 146, 220, 36, 16, 131, 78, 162, 247, 116, 129, 225, 62, 65, 96, 36, 13, 102, 219, 160, 41, 161, 83, 160, 121, 80, 173, 145, 65, 83, 133, 247, 78, 62, 197, 123, 176, 52, 36, 182, 121, 127, 65, 147, 195, 174, 119, 232, 74, 203, 129, 181, 155, 37, 118, 176, 14, 219, 232, 52, 130, 222, 126, 67, 105, 118, 8, 12, 231, 95, 206, 177, 213, 255, 93, 236, 162, 11, 154, 36, 169, 150, 173, 2, 82, 185, 19, 2, 106, 143, 112, 98, 4, 154, 202, 174, 187, 150, 232, 11, 33, 119, 111, 207, 246, 133, 39, 57, 93, 106, 2, 186, 135, 151, 102, 77, 34, 143, 111, 55, 252, 72, 179, 255, 71, 156, 219, 247, 246, 253, 95, 248, 3, 165, 242, 241, 116, 86, 118, 172, 23, 44, 188, 116, 198, 198, 99, 243, 223, 126, 136, 117, 71, 205, 97, 142, 106, 227, 175, 151, 239, 123, 225, 19, 219, 172, 68, 21, 137, 13, 179, 229, 40, 99, 212, 1, 131, 86, 218, 39, 245, 180, 136, 71, 0, 104, 185, 33, 142, 114, 252, 162, 219, 61, 20, 67, 22, 100, 162, 38, 35, 32, 217, 150, 190, 3, 165, 137, 236, 104, 248, 125, 114, 3, 39, 82, 122, 244, 68, 139, 252, 115, 190, 160, 51, 255, 5, 229, 142, 193, 64, 166, 244, 97, 8, 151, 18, 230, 179, 73, 199, 54, 138, 136, 151, 9, 48, 232, 154, 75, 239, 102, 227, 10, 209, 113, 117, 68, 178, 242, 76, 131, 141, 130, 251, 146, 123, 71, 153, 134, 150, 67, 106, 152, 143, 59, 163, 202, 234, 36, 109, 253, 69, 150, 31, 193, 135, 43, 183, 210, 105, 22, 157, 196, 189, 40, 1, 229, 200, 108, 19, 41, 54, 55, 228, 71, 19, 194, 178, 90, 48, 6, 191, 211, 16, 28, 108, 205, 122, 69, 135, 211, 64, 73, 157, 168, 84, 36, 143, 23, 231, 216, 18, 185, 65, 108, 206, 131, 2, 197, 136, 38, 148, 244, 54, 197, 110, 76, 252, 188, 3, 241, 67, 216, 44, 235, 189, 16, 59, 40, 252, 89, 231, 49, 11, 210, 77, 247, 228, 185, 255, 90, 58, 177, 231, 178, 86, 184, 253, 221, 70, 165, 45, 78, 251, 1, 195, 199, 234, 61, 160, 220, 240, 213, 78, 145, 129, 75, 129, 73, 55, 177, 7, 27, 68, 208, 112, 213, 211, 94, 91, 33, 80, 250, 146, 132, 178, 240, 233, 121, 69, 154, 134, 160, 188, 88, 143, 135, 200, 69, 119, 234, 41, 7, 187, 193, 39, 179, 160, 90, 182, 170, 119, 163, 250, 167, 8, 95, 154, 7, 201, 84, 21, 36, 141, 50, 40, 225, 33, 199, 140, 253, 200, 255, 239, 220, 150, 130, 37, 143, 70, 208, 167, 150, 182, 92, 16, 206, 83, 202, 117, 238, 38, 61, 133, 171, 236, 186, 174, 249, 139, 10, 144, 247, 14, 84, 57, 154, 203, 101, 176, 95, 114, 114, 75, 84, 166, 16, 53, 208, 28, 244, 6, 73, 100, 119, 5, 156, 69, 13, 193, 48, 214, 59, 71, 74, 145, 218, 199, 39, 194, 49, 220, 98, 10, 170, 132, 96, 63, 154, 116, 232, 134, 181, 64, 92, 120, 51, 65, 4, 177, 60, 59, 156, 76, 235, 1, 4, 177, 241, 130, 229, 246, 97, 194, 91, 112, 245, 6, 139, 39, 219, 79, 65, 75, 32, 12, 133, 157, 88, 230, 23, 13, 109, 158, 181, 168, 71, 250, 76, 171, 137, 157, 57, 119, 76, 40, 117, 126, 252, 221, 73, 137, 36, 131, 49, 211, 17, 167, 217, 71, 138, 187, 228, 2, 235, 28, 58, 157, 250, 109, 50, 28, 33, 87, 173, 162, 95, 75, 138, 183, 145, 220, 141, 166, 188, 215, 139, 45, 60, 147, 23, 170, 43, 116, 206, 122, 117, 175, 53, 11, 110, 53, 122, 243, 185, 3, 184, 55, 198, 248, 119, 81, 59, 116, 98, 107, 38, 146, 0, 53, 177, 22, 182, 205, 131, 150, 20, 91, 94, 5, 128, 11, 40, 10, 95, 207, 229, 114, 81, 124, 146, 249, 219, 83, 193, 184, 5, 51, 245, 12, 66, 116, 54, 36, 101, 45, 214, 78, 251, 255, 94, 104, 114, 58, 193, 128, 34, 164, 14, 144, 117, 197, 80, 152, 120, 46, 161, 81, 39, 223, 125, 180, 27, 61, 134, 7, 156, 251, 122, 115, 217, 113, 36, 115, 30, 226, 182, 229, 21, 26, 114, 184, 186, 234, 186, 221, 107, 45, 171, 13, 10, 183, 191, 125, 29, 151, 252, 168, 92, 42, 250, 112, 251, 48, 187, 18, 30, 193, 107, 204, 154, 159, 12, 244, 79, 188, 147, 141, 128, 21, 55, 81, 70, 18, 75, 121, 200, 111, 209, 111, 90, 177, 140, 12, 120, 206, 136, 165, 122, 53, 173, 160, 240, 65, 224, 232, 221, 225, 68, 121, 84, 189, 18, 141, 142, 238, 69, 223, 55, 197, 161, 7, 81, 117, 181, 125, 0, 227, 110, 136, 2, 161, 195, 238, 101, 48, 104, 7, 25, 118, 182, 98, 10, 28, 198, 194, 108, 182, 97, 142, 47, 85, 84, 239, 130, 224, 159, 234, 107, 125, 71, 37, 109, 101, 123, 96, 92, 251, 240, 35, 83, 245, 195, 80, 2, 171, 30, 126, 231, 154, 172, 10, 39, 6, 67, 236, 160, 183, 50, 29, 75, 141, 152, 224, 60, 218, 173, 193, 47, 55, 74, 154, 252, 255, 8, 88, 104, 33, 189, 242, 96, 200, 33, 232, 45, 195, 109, 241, 10, 25, 25, 182, 5, 47, 160, 3, 220, 198, 211, 154, 41, 142, 58, 146, 58, 2, 85, 49, 236, 244, 192, 27, 182, 145, 30, 85, 22, 83, 63, 138, 209, 188, 249, 154, 95, 239, 193, 245, 81, 215, 79, 137, 118, 16, 152, 33, 34, 120, 202, 129, 184, 109, 192, 4, 77, 51, 69, 38, 135, 99, 234, 246, 108, 130, 157, 82, 16, 20, 198, 129, 173, 55, 107, 105, 14, 235, 253, 81, 72, 220, 236, 253, 209, 239, 68, 30, 38, 99, 164, 119, 77, 128, 41, 124, 34, 18, 109, 184, 220, 182, 141, 14, 45, 147, 172, 178, 134, 251, 31, 227, 25, 31, 14, 126, 242, 248, 121, 35, 86, 97, 101, 11, 79, 82, 68, 197, 69, 181, 67, 207, 215, 196, 199, 201, 198, 230, 183, 255, 215, 249, 186, 130, 180, 112, 25, 180, 161, 233, 82, 34, 3, 148, 243, 235, 132, 14, 156, 34, 64, 216, 104, 92, 119, 4, 200, 173, 125, 224, 64, 224, 198, 243, 186, 206, 230, 60, 112, 21, 41, 113, 142, 222, 58, 65, 249, 122, 51, 28, 147, 70, 189, 170, 243, 135, 106, 103, 135, 40, 113, 249, 107, 179, 40, 115, 80, 235, 190, 151, 51, 34, 245, 156, 126, 128, 111, 131, 48, 23, 185, 220, 51, 197, 66, 90, 42, 3, 53, 84, 35, 239, 244, 108, 210, 56, 141, 11, 142, 221, 32, 18, 218, 201, 16, 149, 189, 210, 77, 148, 7, 109, 45, 1, 87, 64, 137, 118, 234, 154, 132, 205, 233, 80, 135, 140, 90, 56, 4, 102, 22, 227, 248, 32, 184, 168, 109, 204, 103, 65, 6, 23, 191, 209, 41, 208, 227, 129, 135, 182, 127, 128, 128, 240, 183, 122, 212, 0, 33, 179, 95, 61, 113, 197, 222, 158, 203, 173, 45, 148, 221, 219, 161, 240, 128, 100, 122, 201, 22, 196, 217, 225, 165, 124, 74, 166, 125, 204, 182, 69, 10, 70, 138, 127, 162, 32, 73, 171, 248, 150, 182, 124, 173, 252, 89, 31, 15, 106, 173, 44, 35, 17, 144, 251, 11, 192, 125, 93, 139, 183, 137, 76, 17, 31, 230, 140, 135, 156, 46, 197, 87, 102, 34, 242, 176, 161, 45, 98, 144, 50, 231, 64, 46, 226, 227, 166, 159, 0, 13, 119, 34, 89, 150, 76, 89, 147, 79, 28, 238, 77, 5, 88, 179, 70, 206, 105, 100, 77, 24, 104, 64, 239, 228, 26, 26, 1, 178, 50, 32, 166, 144, 239, 249, 4, 220, 42, 154, 161, 236, 33, 10, 126, 84, 177, 118, 34, 3, 141, 200, 170, 106, 20, 17, 59, 191, 48, 10, 57, 206, 0, 153, 140, 177, 230, 163, 166, 165, 144, 199, 138, 114, 214, 83, 47, 223, 34, 94, 59, 177, 230, 102, 16, 252, 153, 222, 207, 186, 177, 145, 40, 145, 42, 154, 124, 78, 235, 0, 26, 137, 103, 182, 53, 135, 122, 45, 224, 177, 16, 45, 58, 184, 141, 18, 223, 26, 83, 229, 34, 250, 180, 153, 177, 0, 48, 177, 15, 119, 137, 18, 69, 98, 111, 233, 70, 3, 224, 225, 0, 251, 101, 158, 161, 138, 187, 39, 200, 86, 175, 75, 64, 51, 41, 216, 240, 208, 204, 200, 236, 248, 147, 36, 153, 21, 255, 59, 144, 61, 188, 31, 191, 123, 77, 134, 124, 28, 249, 231, 218, 177, 50, 40, 185, 133, 186, 3, 67, 226, 174, 87, 167, 251, 156, 101, 161, 181, 67, 242, 248, 154, 160, 46, 82, 117, 45, 41, 81, 125, 78, 121, 16, 74, 2, 15, 181, 125, 14, 166, 97, 251, 184, 90, 233, 115, 90, 148, 96, 59, 119, 246, 148, 25, 195, 206, 184, 230, 142, 168, 237, 242, 126, 207, 188, 230, 19, 241, 193, 168, 66, 61, 61, 63, 182, 165, 84, 3, 101, 39, 214, 203, 198, 5, 172, 205, 61, 82, 110, 9, 9, 101, 78, 198, 188, 10, 118, 248, 210, 17, 51, 127, 179, 0, 119, 95, 62, 79, 157, 98, 142, 16, 78, 101, 51, 136, 146, 168, 33, 9, 190, 44, 132, 62, 232, 164, 235, 249, 217, 233, 183, 56, 254, 88, 161, 73, 30, 255, 255, 208, 71, 19, 141, 14, 12, 92, 254, 52, 248, 182, 81, 185, 15, 14, 27, 218, 229, 167, 156, 99, 251, 66, 229, 154, 0, 125, 173, 74, 234, 42, 253, 229, 217, 154, 140, 71, 235, 178, 73, 132, 117, 15, 236, 235, 187, 19, 34, 163, 211, 6, 248, 88, 205, 136, 57, 197, 171, 75, 141, 62, 130, 185, 208, 35, 186, 11, 34, 167, 199, 133, 128, 47, 104, 194, 234, 183, 60, 71, 54, 188, 222, 66, 6, 112, 118, 59, 39, 81, 151, 254, 134, 42, 39, 171, 230, 180, 235, 35, 48, 109, 113, 39, 95, 74, 99, 4, 115, 27, 143, 195, 246, 2, 248, 1, 19, 66, 188, 226, 242, 122, 94, 130, 50, 224, 216, 149, 0, 93, 198, 241, 232, 239, 142, 95, 25, 99, 183, 235, 251, 230, 49, 81, 0, 33, 1, 186, 164, 190, 101, 180, 1, 77, 199, 179, 193, 250, 9, 84, 8, 6, 137, 71, 16, 28, 168, 167, 29, 104, 93, 3, 154, 104, 73, 151, 12, 96, 11, 218, 0, 160, 166, 39, 34, 139, 168, 242, 65, 68, 138, 229, 187, 204, 7, 148, 93, 179, 254, 83, 140, 175, 70, 212, 154, 175, 240, 240, 38, 225, 154, 196, 118, 133, 136, 239, 95, 217, 186, 68, 30, 132, 162, 248, 122, 250, 140, 249, 245, 141, 237, 245, 65, 239, 81, 132, 202, 202, 45, 179, 147, 30, 26, 201, 163, 86, 152, 219, 249, 141, 62, 85, 241, 232, 46, 33, 170, 50, 31, 173, 48, 93, 83, 219, 161, 213, 91, 241, 199, 229, 142, 249, 67, 15, 255, 131, 120, 41, 83, 229, 151, 118, 61, 37, 253, 184, 179, 11, 117, 237, 209, 245, 140, 189, 229, 205, 227, 98, 153, 74, 100, 31, 73, 179, 161, 161, 65, 75, 38, 108, 185, 144, 184, 61, 166, 133, 86, 156, 75, 237, 47, 48, 139, 86, 157, 147, 15, 99, 28, 194, 63, 91, 52, 225, 133, 251, 91, 131, 183, 202, 95, 158, 66, 207, 201, 69, 115, 170, 0, 94, 234, 174, 180, 207, 112, 8, 248, 172, 207, 131, 223, 217, 167, 38, 215, 51, 191, 161, 138, 198, 39, 81, 93, 158, 81, 57, 243, 199, 124, 200, 98, 247, 127, 4, 27, 117, 88, 20, 58, 180, 247, 192, 126, 247, 175, 20, 117, 98, 6, 197, 117, 26, 191, 92, 13, 144, 23, 145, 215, 88, 133, 48, 78, 222, 181, 126, 126, 238, 255, 90, 241, 81, 137, 91, 99, 95, 240, 34, 236, 90, 213, 68, 58, 89, 106, 124, 197, 43, 250, 255, 19, 221, 41, 138, 23, 146, 79, 109, 82, 30, 196, 27, 196, 48, 208, 137, 232, 230, 235, 185, 112, 138, 166, 161, 119, 166, 135, 187, 57, 58, 242, 98, 150, 197, 106, 203, 13, 7, 235, 161, 201, 247, 131, 70, 116, 110, 69, 16, 205, 233, 23, 0, 7, 75, 8, 141, 249, 54, 4, 245, 53, 124, 227, 107, 228, 96, 85, 206, 73, 207, 20, 24, 80, 39, 26, 20, 108, 249, 12, 152, 253, 108, 16, 161, 136, 203, 129, 201, 129, 137, 139, 18, 80, 61, 113, 184, 203, 23, 32, 119, 90, 167, 237, 14, 175, 103, 146, 162, 52, 136, 80, 145, 186, 187, 121, 39, 235, 113, 22, 204, 148, 138, 68, 250, 134, 252, 138, 74, 163, 234, 46, 36, 210, 188, 198, 6, 168, 243, 225, 150, 186, 26, 81, 50, 188, 156, 195, 237, 179, 116, 109, 179, 122, 91, 235, 53, 169, 109, 36, 204, 246, 228, 197, 87, 11, 77, 99, 226, 167, 110, 112, 73, 17, 220, 208, 234, 148, 40, 156, 125, 169, 167, 46, 128, 187, 29, 89, 3, 200, 217, 36, 117, 12, 75, 45, 141, 221, 78, 247, 191, 137, 130, 180, 40, 142, 103, 167, 10, 179, 73, 230, 188, 238, 66, 69, 108, 4, 210, 184, 229, 183, 248, 159, 213, 118, 151, 61, 227, 240, 61, 231, 141, 117, 41, 57, 233, 29, 235, 45, 196, 85, 235, 21, 201, 30, 154, 38, 94, 244, 74, 152, 37, 69, 244, 69, 27, 44, 29, 199, 180, 210, 213, 32, 107, 136, 194, 118, 241, 134, 85, 1, 99, 95, 221, 252, 219, 166, 21, 79, 24, 226, 145, 201, 132, 169, 180, 141, 166, 50, 239, 192, 239, 39, 190, 172, 176, 132, 69, 249, 87, 16, 220, 143, 187, 134, 245, 127, 125, 72, 119, 241, 176, 9, 232, 198, 97, 179, 154, 130, 72, 120, 90, 62, 61, 4, 161, 15, 146, 155, 4, 158, 106, 71, 21, 116, 32, 35, 217, 228, 197, 26, 45, 248, 124, 148, 249, 150, 156, 124, 58, 65, 202, 86, 52, 188, 146, 76, 191, 248, 21, 248, 152, 227, 40, 197, 141, 224, 75, 145, 213, 97, 108, 171, 150, 179, 24, 146, 113, 3, 232, 54, 228, 82, 178, 164, 210, 29, 242, 141, 194, 225, 87, 127, 225, 208, 3, 150, 23, 146, 27, 176, 81, 119, 240, 216, 223, 221, 238, 71, 214, 165, 225, 30, 186, 75, 225, 211, 8, 166, 89, 142, 104, 48, 164, 94, 161, 201, 127, 170, 9, 152, 113, 192, 77, 164, 6, 80, 14, 139, 46, 170, 219, 197, 157, 89, 126, 226, 65, 235, 107, 182, 216, 255, 196, 176, 103, 184, 119, 6, 10, 129, 99, 109, 64, 24, 46, 192, 222, 90, 176, 24, 199, 97, 177, 24, 184, 28, 129, 40, 235, 124, 171, 168, 35, 217, 172, 6, 12, 235, 184, 49, 59, 68, 226, 69, 188, 77, 38, 56, 176, 16, 166, 214, 62, 241, 197, 1, 223, 197, 163, 97, 228, 17, 77, 39, 94, 32, 200, 184, 38, 78, 222, 150, 195, 77, 196, 234, 138, 12, 234, 96, 210, 127, 191, 206, 87, 29, 237, 117, 45, 81, 174, 2, 253, 171, 55, 63, 2, 245, 37, 43, 204, 114, 155, 35, 169, 241, 11, 74, 53, 251, 186, 18, 101, 216, 118, 11, 163, 48, 46, 123, 116, 78, 117, 78, 137, 65, 202, 66, 125, 18, 69, 179, 123, 250, 181, 38, 127, 49, 61, 140, 26, 63, 176, 85, 99, 27, 29, 212, 211, 222, 98, 153, 131, 215, 146, 249, 18, 39, 114, 126, 224, 189, 10, 90, 149, 147, 170, 239, 29, 87, 204, 73, 18, 76, 133, 0, 172, 137, 3, 189, 207, 119, 110, 94, 112, 56, 73, 182, 39, 177, 81, 192, 122, 40, 137, 140, 234, 206, 173, 148, 98, 212, 128, 162, 246, 150, 13, 67, 55, 8, 36, 216, 93, 197, 123, 159, 86, 33, 63, 10, 176, 21, 108, 49, 96, 13, 74, 23, 79, 128, 6, 14, 169, 76, 216, 185, 17, 115, 17, 19, 54, 144, 252, 112, 16, 224, 95, 42, 245, 0, 191, 150, 226, 232, 203, 11, 39, 251, 91, 113, 225, 81, 79, 84, 114, 95, 126, 40, 99, 226, 176, 11, 230, 224, 221, 243, 195, 243, 75, 240, 17, 129, 179, 69, 184, 235, 188, 220, 236, 148, 195, 99, 9, 242, 193, 0, 148, 121, 229, 192, 198, 28, 146, 50, 212, 249, 187, 10, 15, 25, 131, 236, 249, 197, 153, 96, 250, 229, 163, 88, 23, 114, 200, 182, 29, 87, 233, 177, 146, 215, 16, 133, 21, 1, 168, 144, 62, 51, 179, 247, 204, 228, 0, 8, 235, 109, 16, 216, 126, 177, 14, 103, 188, 237, 94, 246, 90, 227, 29, 246, 188, 38, 3, 150, 46, 11, 104, 169, 186, 139, 8, 252, 98, 190, 101, 187, 174, 200, 182, 168, 193, 179, 168, 8, 163, 32, 61, 234, 77, 221, 194, 129, 31, 99, 11, 63, 208, 15, 38, 20, 80, 181, 248, 84, 153, 103, 182, 76, 132, 227, 126, 49, 115, 245, 64, 222, 96, 207, 2, 189, 5, 65, 219, 115, 232, 253, 137, 115, 23, 212, 161, 156, 236, 245, 128, 119, 31, 112, 177, 147, 139, 145, 182, 36, 135, 143, 172, 0, 223, 224, 145, 85, 229, 162, 46, 218, 56, 93, 94, 31, 66, 198, 247, 226, 149, 88, 2, 74, 128, 172, 161, 239, 74, 141, 17, 22, 100, 100, 101, 97, 7, 132, 102, 112, 155, 159, 184, 110, 66, 148, 93, 98, 140, 68, 64, 170, 156, 32, 5, 197, 18, 229, 194, 174, 176, 207, 17, 208, 174, 22, 156, 151, 11, 185, 31, 168, 16, 174, 6, 30, 28, 51, 28, 36, 67, 198, 81, 219, 166, 106, 155, 107, 83, 100, 90, 132, 232, 234, 92, 244, 229, 65, 85, 20, 129, 148, 93, 145, 21, 176, 27, 31, 109, 221, 242, 178, 80, 112, 85, 53, 86, 252, 145, 244, 202, 138, 42, 113, 190, 6, 80, 0, 52, 159, 138, 177, 146, 83, 76, 90, 85, 88, 167, 205, 63, 227, 232, 174, 162, 119, 238, 117, 131, 74, 56, 82, 166, 36, 86, 34, 41, 8, 61, 23, 57, 59, 35, 23, 196, 9, 172, 132, 235, 244, 159, 15, 68, 246, 74, 184, 243, 190, 31, 208, 221, 215, 48, 202, 189, 248, 188, 197, 194, 161, 58, 224, 219, 53, 13, 26, 249, 147, 7, 22, 209, 180, 115, 168, 209, 158, 240, 234, 53, 156, 191, 82, 46, 161, 226, 38, 76, 215, 72, 195, 247, 230, 82, 24, 108, 252, 171, 49, 165, 12, 85, 175, 138, 253, 66, 207, 212, 80, 136, 113, 140, 33, 109, 90, 24, 151, 58, 126, 141, 229, 74, 68, 0, 50, 152, 139, 47, 42, 136, 105, 60, 85, 161, 108, 39, 98, 80, 93, 73, 49, 184, 82, 18, 219, 247, 178, 93, 127, 34, 171, 242, 21, 54, 54, 33, 64, 65, 3, 241, 50, 225, 196, 25, 236, 107, 97, 170, 64, 216, 176, 182, 30, 68, 99, 21, 162, 25, 10, 33, 98, 231, 178, 70, 180, 4, 203, 8, 65, 16, 112, 17, 12, 27, 178, 204, 143, 249, 79, 229, 116, 151, 184, 160, 251, 122, 103, 149, 111, 19, 87, 182, 150, 88, 58, 26, 115, 217, 12, 208, 7, 162, 57, 30, 213, 200, 31, 40, 45, 123, 138, 114, 209, 202, 30, 118, 170, 185, 64, 161, 194, 253, 51, 102, 196, 227, 153, 150, 157, 77, 227, 167, 83, 236, 172, 118, 38, 70, 169, 34, 202, 178, 173, 253, 168, 1, 194, 39, 95, 113, 26, 212, 65, 167, 195, 105, 132, 67, 203, 165, 147, 59, 11, 161, 227, 127, 239, 79, 82, 56, 3, 203, 24, 55, 0, 180, 167, 218, 182, 221, 2, 2, 239, 99, 190, 1, 16, 1, 153, 56, 143, 69, 43, 109, 181, 205, 218, 139, 21, 46, 137, 98, 26, 0, 224, 86, 68, 12, 187, 109, 123, 152, 38, 58, 23, 0, 189, 7, 224, 57, 148, 9, 186, 125, 193, 106, 222, 119, 128, 238, 181, 74, 136, 235, 57, 55, 48, 145, 208, 186, 15, 245, 16, 235, 85, 171, 60, 77, 84, 150, 127, 62, 222, 135, 14, 165, 177, 24, 187, 226, 116, 42, 92, 135, 37, 37, 68, 121, 157, 128, 239, 135, 143, 169, 106, 227, 84, 231, 93, 131, 196, 149, 31, 241, 103, 179, 30, 167, 171, 218, 180, 140, 86, 129, 20, 229, 216, 141, 142, 129, 236, 7, 115, 41, 84, 146, 14, 35, 112, 94, 87, 196, 139, 101, 150, 68, 35, 232, 56, 125, 59, 164, 124, 54, 119, 245, 112, 168, 44, 97, 183, 8, 156, 10, 86, 190, 143, 127, 3, 119, 25, 57, 235, 218, 191, 209, 239, 103, 222, 107, 124, 95, 58, 57, 214, 13, 144, 154, 229, 75, 204, 178, 54, 86, 175, 186, 122, 173, 79, 120, 239, 99, 124, 32, 2, 203, 232, 227, 248, 135, 13, 159, 25, 165, 181, 142, 154, 177, 150, 138, 83, 15, 36, 119, 106, 252, 160, 8, 235, 128, 188, 12, 137, 231, 202, 215, 142, 199, 86, 163, 250, 1, 5, 11, 162, 56, 178, 50, 64, 84, 203, 45, 251, 122, 240, 86, 65, 164, 203, 19, 126, 188, 204, 206, 105, 173, 66, 53, 218, 3, 233, 157, 247, 56, 119, 144, 186, 173, 196, 39, 198, 148, 103, 56, 43, 225, 227, 53, 127, 56, 48, 112, 186, 107, 252, 93, 19, 46, 177, 103, 40, 84, 154, 43, 249, 236, 175, 7, 241, 199, 40, 59, 227, 68, 197, 28, 113, 170, 68, 239, 185, 166, 113, 209, 53, 172, 69, 61, 230, 117, 5, 67, 91, 221, 187, 176, 67, 180, 69, 145, 200, 26, 173, 142, 200, 60, 111, 165, 18, 58, 114, 33, 164, 222, 31, 84, 121, 28, 243, 53, 68, 143, 62, 170, 81, 218, 90, 254, 135, 196, 14, 116, 106, 94, 151, 126, 202, 53, 115, 78, 141, 172, 222, 126, 253, 53, 95, 58, 117, 33, 136, 136, 41, 155, 148, 109, 12, 78, 148, 156, 76, 196, 228, 8, 0, 108, 255, 209, 22, 52, 135, 99, 169, 215, 133, 207, 130, 20, 145, 5, 120, 103, 46, 33, 181, 72, 182, 228, 23, 48, 205, 174, 128, 35, 70, 106, 236, 137, 163, 120, 45, 164, 0, 91, 37, 222, 125, 155, 196, 238, 34, 226, 180, 163, 77, 68, 141, 20, 224, 157, 236, 72, 74, 249, 80, 98, 40, 123, 234, 95, 127, 206, 224, 246, 215, 116, 22, 77, 158, 195, 174, 34, 82, 150, 200, 145, 181, 46, 186, 126, 114, 118, 222, 255, 76, 4, 127, 55, 164, 110, 82, 212, 28, 89, 152, 247, 221, 252, 99, 230, 4, 241, 243, 82, 68, 218, 43, 103, 191, 25, 98, 198, 64, 1, 1, 2, 196, 218, 33, 135, 69, 86, 27, 113, 200, 139, 100, 80, 217, 124, 89, 154, 130, 192, 210, 195, 117, 176, 0, 111, 135, 42, 191, 215, 24, 22, 3, 115, 77, 1, 230, 221, 161, 209, 7, 237, 95, 67, 252, 242, 50, 32, 189, 193, 206, 201, 67, 67, 248, 3, 221, 129, 225, 207, 110, 62, 185, 197, 232, 64, 0, 64, 86, 141, 213, 22, 249, 127, 158, 243, 61, 23, 126, 102, 222, 132, 232, 83, 223, 154, 74, 112, 83, 10, 50, 162, 240, 117, 227, 85, 212, 85, 118, 34, 38, 203, 179, 41, 166, 149, 164, 135, 224, 165, 157, 59, 146, 49, 74, 40, 83, 96, 253, 176, 114, 49, 32, 114, 47, 109, 3, 36, 14, 174, 143, 178, 153, 237, 108, 206, 5, 123, 77, 54, 253, 73, 203, 123, 20, 109, 1, 104, 164, 118, 4, 182, 240, 24, 86, 226, 218, 61, 185, 79, 29, 70, 95, 45, 187, 55, 135, 19, 97, 146, 121, 98, 187, 230, 176, 225, 130, 33, 175, 161, 98, 108, 4, 105, 151, 86, 176, 6, 98, 85, 247, 63, 184, 27, 18, 108, 246, 172, 243, 156, 9, 177, 135, 210, 68, 129, 193, 204, 56, 95, 166, 18, 32, 48, 247, 164, 76, 216, 18, 217, 50, 253, 250, 52, 69, 225, 0, 218, 142, 171, 165, 255, 92, 28, 109, 9, 198, 215, 189, 200, 181, 68, 165, 248, 113, 165, 10, 225, 42, 40, 211, 21, 82, 19, 139, 252, 138, 153, 240, 31, 226, 240, 212, 125, 251, 206, 126, 34, 57, 5, 211, 187, 53, 16, 97, 121, 205, 216, 238, 46, 192, 205, 16, 236, 135, 66, 55, 241, 88, 169, 70, 49, 31, 130, 147, 221, 166, 195, 245, 216, 180, 54, 177, 13, 106, 122, 143, 192, 92, 173, 136, 213, 42, 93, 19, 193, 185, 81, 176, 226, 219, 245, 91, 194, 255, 194, 40, 59, 26, 153, 4, 179, 54, 156, 110, 89, 196, 23, 91, 70, 92, 224, 150, 249, 245, 172, 221, 173, 40, 81, 182, 185, 191, 145, 80, 57, 202, 113, 186, 112, 133, 124, 123, 97, 112, 171, 76, 33, 176, 223, 200, 168, 160, 115, 137, 43, 211, 139, 159, 190, 134, 94, 231, 214, 175, 0, 96, 131, 0, 34, 17, 84, 119, 35, 25, 193, 5, 2, 169, 162, 211, 233, 241, 242, 26, 139, 183, 201, 132, 173, 78, 22, 249, 223, 227, 209, 109, 11, 161, 162, 198, 51, 105, 72, 68, 93, 120, 135, 79, 186, 64, 226, 30, 47, 130, 86, 98, 131, 224, 35, 250, 132, 105, 175, 79, 44, 238, 45, 72, 255, 35, 226, 177, 50, 77, 32, 29, 209, 43, 213, 28, 166, 51, 203, 44, 13, 70, 199, 201, 110, 255, 192, 39, 164, 150, 208, 208, 24, 122, 140, 145, 102, 242, 145, 123, 225, 43, 142, 133, 104, 100, 216, 81, 189, 244, 164, 151, 239, 207, 172, 2, 125, 33, 78, 222, 192, 153, 72, 209, 32, 39, 123, 113, 168, 63, 5, 92, 219, 215, 139, 164, 47, 165, 115, 64, 231, 145, 254, 237, 207, 85, 29, 42, 79, 102, 250, 215, 38, 230, 129, 206, 157, 239, 135, 169, 172, 80, 54, 67, 149, 81, 238, 253, 57, 106, 221, 13, 221, 250, 209, 86, 46, 236, 80, 57, 70, 178, 129, 34, 74, 238, 142, 221, 95, 48, 9, 219, 160, 4, 66, 111, 228, 40, 225, 232, 74, 146, 222, 136, 209, 240, 206, 88, 171, 217, 21, 172, 164, 109, 166, 255, 16, 109, 35, 46, 45, 182, 0, 221, 210, 207, 113, 170, 75, 192, 148, 248, 156, 99, 90, 50, 89, 158, 99, 121, 39, 50, 71, 219, 228, 192, 53, 42, 36, 73, 18, 107, 69, 213, 21, 91, 152, 246, 68, 188, 138, 240, 181, 118, 219, 163, 231, 219, 4, 78, 134, 3, 57, 248, 241, 175, 31, 57, 196, 89, 19, 230, 191, 32, 227, 43, 39, 114, 187, 126, 3, 91, 236, 104, 88, 109, 138, 102, 211, 246, 46, 76, 198, 197, 71, 199, 235, 69, 181, 35, 9, 126, 10, 105, 113, 152, 127, 73, 242, 9, 65, 11, 200, 40, 4, 45, 227, 70, 192, 5, 186, 69, 243, 88, 11, 3, 15, 213, 127, 102, 20, 10, 244, 42, 95, 90, 175, 32, 82, 47, 209, 162, 143, 195, 34, 31, 185, 133, 191, 159, 124, 153, 232, 72, 197, 144, 217, 76, 111, 49, 166, 211, 130, 101, 111, 52, 81, 69, 180, 253, 119, 224, 228, 0, 184, 43, 182, 161, 46, 249, 26, 222, 200, 232, 197, 144, 139, 84, 109, 134, 235, 28, 163, 138, 249, 0, 138, 126, 152, 24, 242, 73, 194, 27, 22, 159, 104, 211, 36, 61, 106, 163, 123, 74, 106, 251, 225, 56, 207, 245, 177, 206, 195, 205, 235, 175, 44, 229, 44, 61, 43, 57, 160, 48, 5, 194, 90, 252, 121, 196, 180, 35, 253, 176, 167, 71, 69, 206, 0, 185, 124, 211, 148, 97, 243, 210, 137, 238, 89, 98, 175, 129, 134, 162, 55, 241, 89, 157, 1, 182, 133, 111, 130, 178, 84, 129, 84, 118, 81, 247, 122, 92, 198, 255, 198, 146, 131, 71, 28, 246, 87, 19, 90, 179, 165, 39, 130, 204, 101, 70, 50, 98, 49, 193, 11, 148, 233, 230, 116, 166, 63, 87, 62, 24, 35, 87, 197, 211, 217, 15, 59, 215, 123, 252, 163, 60, 98, 164, 223, 83, 13, 183, 134, 191, 78, 6, 219, 62, 254, 154, 1, 94, 183, 114, 115, 34, 159, 33, 145, 89, 63, 28, 226, 93, 184, 244, 166, 228, 146, 154, 183, 49, 69, 32, 60, 138, 90, 153, 71, 138, 182, 92, 235, 52, 197, 123, 203, 9, 50, 223, 112, 3, 142, 124, 252, 243, 61, 108, 56, 190, 95, 82, 79, 119, 171, 34, 53, 37, 78, 244, 68, 191, 199, 217, 164, 122, 113, 197, 127, 140, 245, 13, 158, 99, 250, 101, 14, 59, 17, 197, 232, 165, 7, 243, 151, 66, 184, 73, 161, 33, 78, 230, 189, 9, 75, 91, 222, 229, 105, 0, 121, 156, 165, 176, 169, 193, 243, 186, 120, 44, 121, 207, 215, 91, 242, 220, 60, 85, 72, 140, 41, 210, 72, 95, 195, 185, 75, 98, 47, 139, 132, 132, 154, 103, 42, 98, 15, 40, 178, 118, 80, 126, 63, 165, 217, 106, 161, 211, 249, 59, 58, 101, 180, 208, 115, 172, 50, 177, 247, 87, 248, 172, 0, 95, 86, 74, 196, 42, 2, 222, 75, 118, 234, 139, 151, 13, 61, 41, 214, 32, 180, 32, 78, 225, 60, 137, 149, 35, 247, 175, 124, 244, 206, 27, 62, 107, 118, 112, 240, 237, 112, 81, 204, 239, 230, 218, 62, 236, 29, 184, 5, 49, 153, 114, 226, 74, 56, 163, 14, 231, 144, 201, 60, 119, 183, 94, 62, 74, 215, 20, 12, 111, 223, 159, 187, 50, 56, 150, 214, 229, 114, 25, 64, 101, 185, 151, 202, 67, 86, 4, 67, 105, 56, 45, 91, 244, 174, 151, 58, 198, 217, 204, 32, 233, 22, 97, 66, 189, 167, 73, 214, 67, 61, 201, 148, 130, 118, 128, 111, 235, 178, 4, 95, 156, 147, 220, 6, 253, 184, 243, 156, 187, 184, 34, 119, 132, 141, 41, 50, 204, 3, 110, 96, 246, 23, 251, 212, 19, 211, 169, 189, 37, 212, 133, 91, 79, 162, 126, 155, 249, 112, 83, 102, 70, 76, 201, 243, 64, 208, 105, 197, 36, 250, 79, 40, 13, 234, 116, 236, 163, 41, 234, 90, 9, 135, 134, 74, 7, 179, 70, 15, 131, 98, 7, 101, 65, 71, 64, 98, 252, 79, 246, 241, 86, 57, 29, 252, 38, 22, 223, 110, 16, 199, 54, 116, 206, 200, 196, 157, 55, 28, 37, 100, 90, 46, 199, 40, 213, 48, 134, 219, 147, 88, 243, 236, 118, 85, 84, 45, 31, 69, 122, 167, 225, 154, 218, 61, 158, 249, 40, 162, 158, 36, 211, 137, 69, 128, 174, 37, 35, 78, 119, 114, 250, 45, 254, 113, 127, 63, 233, 97, 75, 208, 183, 77, 89, 141, 251, 204, 190, 142, 86, 82, 14, 213, 228, 70, 69, 172, 46, 100, 46, 158, 91, 148, 92, 164, 255, 86, 237, 69, 174, 29, 101, 89, 242, 0, 98, 174, 77, 152, 181, 216, 102, 51, 194, 71, 125, 52, 4, 91, 9, 93, 40, 163, 21, 4, 26, 184, 235, 180, 224, 220, 23, 255, 148, 166, 227, 190, 99, 248, 50, 136, 138, 32, 153, 182, 184, 17, 177, 195, 69, 217, 220, 239, 213, 118, 222, 239, 7, 99, 21, 226, 34, 152, 228, 226, 9, 254, 181, 163, 78, 86, 51, 128, 108, 86, 42, 174, 239, 33, 131, 246, 233, 80, 109, 211, 66, 211, 100, 237, 120, 97, 119, 106, 217, 31, 66, 173, 114, 204, 44, 79, 241, 220, 93, 251, 213, 230, 37, 204, 76, 194, 211, 26, 170, 50, 37, 236, 253, 141, 104, 237, 3, 160, 237, 157, 152, 5, 208, 19, 157, 254, 121, 240, 98, 141, 140, 47, 182, 85, 27, 222, 149, 234, 39, 83, 186, 76, 129, 24, 223, 6, 80, 142, 150, 207, 119, 145, 51, 193, 221, 64, 254, 78, 172, 221, 70, 192, 104, 55, 51, 64, 92, 22, 160, 109, 245, 213, 218, 135, 76, 237, 219, 139, 235, 217, 80, 135, 164, 82, 207, 12, 26, 165, 200, 16, 225, 44, 189, 228, 210, 173, 110, 17, 50, 73, 157, 160, 39, 217, 27, 208, 98, 182, 38, 248, 250, 20, 52, 235, 195, 72, 79, 41, 238, 69, 138, 91, 111, 179, 126, 68, 12, 211, 39, 31, 65, 45, 139, 22, 186, 140, 182, 110, 91, 118, 165, 23, 249, 11, 216, 200, 251, 116, 221, 221, 219, 152, 158, 62, 144, 140, 217, 211, 112, 192, 181, 159, 175, 206, 46, 13, 216, 121, 177, 80, 163, 124, 208, 13, 121, 115, 118, 125, 215, 187, 11, 130, 151, 7, 171, 43, 0, 235, 104, 216, 233, 243, 197, 248, 73, 108, 160, 56, 253, 82, 143, 13, 82, 46, 182, 40, 199, 109, 142, 93, 160, 253, 78, 29, 66, 181, 105, 171, 13, 81, 114, 197, 110, 3, 195, 21, 64, 224, 150, 131, 112, 114, 178, 85, 122, 82, 163, 182, 93, 232, 47, 89, 172, 26, 142, 150, 112, 98, 233, 13, 181, 47, 2, 102, 116, 181, 114, 67, 92, 18, 107, 194, 59, 107, 149, 117, 115, 34, 253, 133, 95, 234, 230, 193, 74, 187, 213, 219, 98, 16, 147, 80, 30, 59, 112, 157, 156, 106, 177, 107, 159, 26, 164, 116, 255, 110, 208, 212, 107, 78, 36, 234, 241, 118, 172, 60, 81, 251, 90, 76, 230, 223, 228, 58, 96, 196, 204, 169, 134, 109, 16, 120, 8, 52, 127, 91, 242, 239, 229, 105, 58, 253, 141, 182, 67, 184, 150, 238, 31, 28, 195, 70, 52, 235, 205, 17, 190, 158, 130, 24, 55, 247, 116, 124, 54, 123, 87, 208, 241, 91, 84, 41, 244, 130, 139, 206, 10, 93, 89, 135, 18, 72, 105, 158, 3, 24, 56, 104, 196, 123, 152, 128, 96, 34, 96, 254, 87, 194, 62, 223, 97, 115, 39, 151, 47, 222, 25, 9, 241, 57, 158, 104, 201, 249, 149, 114, 147, 81, 157, 71, 162, 177, 225, 241, 146, 49, 73, 116, 80, 237, 199, 26, 11, 196, 77, 79, 13, 217, 242, 63, 219, 3, 252, 171, 88, 107, 222, 114, 29, 71, 46, 22, 174, 60, 166, 51, 20, 102, 26, 129, 213, 158, 68, 57, 14, 197, 144, 164, 243, 113, 105, 232, 237, 189, 2, 250, 245, 137, 136, 146, 27, 139, 136, 187, 56, 172, 123, 247, 232, 212, 18, 210, 155, 194, 128, 221, 82, 116, 212, 159, 119, 130, 62, 154, 166, 58, 70, 87, 35, 75, 93, 20, 176, 67, 249, 217, 198, 67, 167, 214, 251, 73, 116, 88, 48, 33, 178, 226, 120, 251, 114, 122, 229, 120, 19, 205, 240, 190, 208, 20, 180, 177, 76, 223, 218, 54, 133, 192, 200, 205, 77, 5, 159, 86, 176, 21, 25, 9, 253, 172, 188, 24, 22, 170, 82, 226, 238, 137, 252, 220, 8, 171, 181, 102, 51, 255, 103, 215, 167, 226, 208, 132, 56, 216, 126, 226, 234, 121, 141, 218, 63, 41, 42, 253, 209, 158, 247, 69, 240, 164, 134, 126, 3, 157, 138, 158, 246, 82, 16, 116, 88, 52, 3, 41, 215, 82, 152, 112, 209, 247, 230, 83, 117, 203, 43, 215, 194, 221, 100, 234, 79, 206, 126, 104, 109, 101, 148, 229, 160, 155, 221, 69, 154, 217, 169, 179, 208, 8, 220, 3, 244, 247, 63, 152, 49, 2, 44, 224, 70, 74, 181, 103, 102, 67, 81, 192, 242, 133, 206, 0, 108, 70, 71, 125, 16, 134, 62, 231, 115, 12, 23, 107, 247, 100, 158, 132, 66, 168, 222, 126, 207, 101, 101, 131, 193, 194, 244, 10, 254, 208, 232, 122, 193, 30, 53, 200, 98, 203, 237, 84, 64, 103, 211, 140, 63, 194, 186, 228, 225, 111, 154, 68, 10, 59, 160, 171, 196, 210, 22, 33, 131, 67, 116, 69, 195, 44, 201, 170, 75, 223, 51, 225, 186, 198, 150, 86, 188, 157, 227, 141, 179, 215, 49, 241, 114, 34, 77, 100, 226, 14, 242, 152, 165, 10, 141, 165, 147, 255, 189, 202, 252, 253, 143, 131, 48, 109, 227, 198, 172, 215, 72, 38, 67, 97, 74, 211, 45, 240, 153, 74, 15, 210, 60, 42, 60, 230, 67, 8, 89, 115, 75, 3, 240, 121, 36, 170, 78, 61, 242, 153, 202, 30, 38, 150, 57, 166, 140, 11, 105, 60, 67, 41, 16, 128, 15, 254, 73, 14, 54, 152, 22, 145, 200, 158, 89, 91, 53, 84, 150, 120, 164, 63, 22, 94, 163, 75, 117, 58, 169, 164, 230, 104, 55, 187, 70, 146, 255, 190, 209, 62, 177, 5, 17, 171, 169, 38, 146, 195, 112, 27, 170, 114, 51, 70, 159, 254, 219, 84, 125, 205, 97, 222, 167, 253, 98, 39, 170, 254, 32, 242, 251, 137, 77, 108, 78, 88, 171, 14, 8, 223, 60, 196, 27, 194, 111, 14, 67, 230, 104, 20, 39, 158, 205, 48, 127, 41, 124, 184, 235, 205, 223, 65, 146, 90, 14, 247, 146, 52, 80, 96, 55, 123, 177, 247, 127, 181, 236, 242, 249, 59, 190, 120, 97, 255, 26, 240, 214, 27, 122, 123, 182, 184, 237, 248, 7, 57, 54, 233, 177, 99, 224, 26, 120, 87, 83, 137, 104, 185, 198, 111, 84, 112, 7, 172, 19, 118, 167, 113, 31, 37, 153, 95, 160, 103, 126, 180, 75, 66, 113, 237, 93, 234, 68, 127, 22, 255, 43, 81, 122, 176, 205, 156, 169, 122, 81, 167, 56, 190, 8, 171, 195, 165, 20, 93, 213, 106, 127, 65, 233, 214, 66, 69, 243, 23, 222, 149, 131, 59, 247, 21, 205, 65, 98, 181, 46, 86, 253, 54, 152, 6, 231, 250, 105, 203, 179, 155, 59, 210, 181, 207, 168, 74, 37, 152, 177, 15, 159, 112, 116, 76, 74, 88, 125, 179, 108, 121, 101, 96, 28, 171, 57, 54, 177, 25, 36, 238, 220, 214, 177, 170, 107, 54, 91, 223, 246, 19, 54, 176, 136, 168, 89, 174, 119, 64, 254, 168, 16, 95, 201, 137, 49, 181, 116, 177, 112, 112, 8, 1, 90, 123, 48, 95, 43, 108, 107, 175, 23, 250, 109, 71, 82, 192, 248, 129, 165, 249, 64, 170, 2, 222, 179, 216, 145, 78, 231, 35, 24, 106, 253, 180, 104, 146, 45, 3, 219, 212, 142, 64, 125, 62, 128, 27, 78, 225, 99, 17, 6, 178, 108, 17, 30, 226, 242, 187, 46, 253, 62, 254, 46, 237, 122, 137, 216, 184, 211, 37, 184, 112, 251, 105, 182, 105, 16, 158, 239, 201, 152, 248, 128, 7, 117, 247, 163, 60, 197, 164, 70, 150, 132, 190, 38, 10, 168, 111, 136, 126, 59, 131, 235, 251, 101, 83, 228, 117, 216, 147, 180, 3, 8, 190, 102, 78, 241, 179, 223, 133, 87, 132, 100, 141, 58, 139, 213, 160, 116, 73, 64, 70, 81, 147, 64, 49, 138, 207, 1, 10, 108, 19, 230, 172, 32, 47, 79, 128, 209, 177, 174, 122, 89, 31, 26, 225, 78, 104, 39, 139, 97, 196, 153, 157, 246, 39, 100, 248, 166, 148, 238, 239, 238, 192, 97, 152, 218, 64, 73, 23, 144, 42, 239, 178, 232, 170, 35, 65, 235, 35, 60, 11, 67, 148, 78, 88, 220, 59, 25, 98, 231, 23, 160, 198, 88, 10, 88, 115, 92, 76, 108, 222, 86, 126, 111, 141, 135, 112, 138, 159, 221, 109, 143, 158, 104, 229, 50, 197, 25, 9, 169, 192, 86, 5, 160, 87, 91, 219, 60, 154, 169, 163, 216, 116, 39, 207, 90, 53, 198, 43, 0, 86, 110, 37, 171, 229, 18, 243, 20, 44, 238, 147, 120, 99, 118, 233, 246, 55, 173, 234, 107, 149, 50, 43, 197, 192, 140, 139, 38, 241, 141, 221, 32, 44, 95, 27, 121, 80, 149, 205, 43, 185, 140, 230, 179, 132, 18, 25, 13, 241, 195, 42, 226, 233, 147, 31, 41, 119, 105, 10, 102, 198, 44, 103, 124, 65, 131, 245, 91, 24, 90, 222, 176, 167, 50, 198, 200, 133, 46, 206, 137, 164, 116, 7, 189, 125, 155, 22, 60, 96, 30, 120, 111, 34, 84, 247, 55, 193, 233, 134, 219, 231, 119, 73, 33, 199, 124, 47, 189, 235, 75, 195, 64, 163, 97, 14, 196, 157, 174, 250, 147, 216, 51, 104, 255, 110, 52, 77, 243, 188, 223, 30, 231, 106, 204, 125, 227, 42, 193, 192, 13, 91, 35, 239, 230, 17, 176, 168, 220, 239, 225, 170, 124, 157, 230, 85, 54, 170, 237, 151, 33, 25, 195, 98, 91, 109, 139, 187, 74, 33, 169, 13, 139, 161, 99, 51, 135, 214, 187, 40, 94, 98, 102, 148, 27, 11, 239, 171, 235, 88, 237, 233, 148, 176, 183, 55, 230, 66, 237, 76, 224, 175, 35, 193, 17, 98, 59, 199, 127, 52, 215, 173, 62, 77, 181, 169, 27, 88, 20, 3, 66, 9, 245, 197, 32, 125, 246, 252, 105, 204, 135, 210, 250, 93, 232, 106, 206, 121, 38, 112, 173, 161, 87, 209, 228, 24, 185, 252, 223, 193, 38, 247, 147, 81, 50, 109, 201, 232, 200, 97, 1, 37, 8, 2, 200, 102, 125, 110, 27, 22, 110, 225, 82, 13, 77, 164, 115, 179, 9, 109, 144, 96, 65, 13, 25, 43, 118, 24, 155, 229, 16, 236, 68, 111, 0, 145, 238, 59, 196, 239, 3, 151, 194, 87, 118, 61, 88, 37, 69, 33, 214, 43, 94, 94, 78, 66, 217, 38, 169, 49, 94, 121, 226, 103, 196, 82, 13, 253, 2, 243, 237, 180, 244, 140, 127, 222, 51, 162, 239, 149, 214, 47, 61, 140, 186, 93, 127, 121, 171, 97, 75, 244, 199, 55, 78, 231, 225, 190, 68, 33, 165, 46, 49, 172, 195, 205, 128, 8, 63, 21, 201, 57, 152, 230, 106, 254, 156, 174, 54, 86, 106, 239, 62, 96, 44, 247, 211, 97, 145, 148, 246, 116, 55, 86, 46, 212, 46, 227, 161, 229, 248, 133, 205, 173, 114, 115, 212, 81, 186, 238, 21, 192, 120, 65, 239, 91, 170, 152, 102, 88, 78, 113, 49, 223, 161, 58, 51, 221, 111, 60, 31, 120, 148, 133, 151, 136, 48, 225, 92, 146, 175, 138, 34, 239, 66, 173, 131, 109, 161, 35, 63, 84, 206, 85, 32, 154, 143, 163, 151, 99, 0, 172, 68, 150, 108, 73, 174, 55, 174, 168, 34, 202, 135, 206, 144, 180, 50, 144, 253, 11, 68, 139, 197, 183, 41, 168, 12, 253, 206, 9, 206, 173, 152, 236, 21, 251, 10, 32, 186, 19, 230, 249, 228, 178, 54, 214, 64, 80, 183, 101, 151, 253, 127, 44, 10, 163, 91, 150, 77, 64, 112, 137, 149, 6, 188, 158, 137, 17, 86, 129, 205, 78, 96, 163, 161, 175, 223, 27, 186, 17, 229, 117, 215, 51, 192, 56, 23, 42, 31, 199, 83, 71, 17, 166, 55, 63, 182, 14, 200, 75, 193, 211, 136, 237, 149, 65, 241, 107, 211, 233, 191, 144, 181, 5, 26, 71, 205, 2, 129, 89, 99, 106, 138, 205, 200, 198, 2, 164, 92, 39, 22, 221, 253, 54, 134, 121, 188, 204, 39, 66, 96, 18, 31, 181, 218, 15, 50, 196, 2, 44, 45, 237, 173, 186, 171, 215, 163, 148, 65, 14, 95, 241, 17, 222, 121, 70, 198, 113, 250, 55, 102, 112, 36, 153, 137, 188, 46, 22, 49, 40, 144, 79, 168, 169, 132, 241, 38, 112, 88, 71, 169, 212, 138, 234, 167, 32, 56, 101, 252, 143, 96, 190, 85, 53, 54, 65, 106, 222, 29, 2, 163, 101, 225, 195, 0, 180, 159, 163, 147, 76, 137, 213, 91, 226, 23, 25, 10, 221, 82, 106, 27, 221, 138, 134, 45, 61, 122, 194, 185, 253, 7, 164, 40, 72, 41, 119, 80, 123, 62, 66, 57, 2, 177, 124, 54, 122, 237, 129, 225, 45, 50, 158, 127, 189, 67, 156, 211, 81, 216, 222, 196, 177, 160, 107, 202, 21, 8, 40, 31, 60, 49, 182, 40, 230, 54, 74, 144, 243, 25, 29, 141, 179, 142, 167, 3, 11, 77, 134, 39, 58, 189, 132, 206, 115, 103, 90, 212, 185, 208, 94, 5, 99, 208, 3, 48, 243, 84, 126, 137, 123, 186, 146, 235, 236, 37, 184, 188, 147, 46, 14, 139, 102, 147, 105, 51, 128, 10, 153, 244, 26, 64, 61, 149, 30, 11, 92, 215, 255, 110, 120, 237, 78, 72, 182, 215, 221, 247, 100, 249, 91, 14, 109, 237, 56, 88, 158, 242, 131, 39, 142, 8, 135, 149, 245, 116, 246, 84, 202, 141, 172, 16, 5, 18, 188, 4, 93, 181, 224, 180, 140, 67, 188, 240, 193, 209, 49, 132, 184, 208, 9, 31, 146, 4, 175, 10, 167, 230, 167, 213, 245, 240, 177, 176, 50, 123, 85, 168, 149, 243, 147, 181, 40, 140, 95, 89, 104, 116, 71, 74, 237, 89, 47, 42, 2, 242, 147, 205, 117, 155, 84, 67, 82, 97, 10, 147, 84, 40, 20, 165, 79, 118, 31, 106, 142, 10, 50, 58, 217, 20, 248, 102, 128, 120, 228, 179, 88, 79, 60, 62, 244, 82, 102, 197, 229, 192, 152, 190, 64, 165, 115, 173, 144, 61, 43, 4, 203, 241, 254, 190, 103, 216, 145, 29, 14, 71, 24, 75, 31, 100, 88, 67, 231, 77, 240, 89, 111, 60, 70, 94, 55, 235, 64, 134, 106, 59, 215, 148, 218, 231, 81, 248, 85, 198, 215, 41, 238, 60, 248, 7, 174, 220, 135, 106, 221, 167, 182, 44, 7, 250, 204, 6, 77, 118, 213, 130, 90, 157, 251, 29, 70, 17, 83, 80, 154, 33, 244, 176, 39, 41, 91, 239, 58, 102, 116, 5, 65, 10, 12, 5, 1, 168, 50, 17, 129, 27, 61, 56, 224, 191, 132, 174, 113, 155, 43, 45, 198, 106, 185, 15, 120, 136, 138, 58, 11, 187, 74, 94, 189, 137, 150, 246, 10, 233, 62, 60, 110, 73, 94, 203, 211, 4, 69, 161, 72, 163, 108, 105, 148, 35, 38, 77, 138, 80, 46, 233, 231, 125, 166, 248, 81, 225, 0, 234, 203, 170, 74, 238, 34, 255, 123, 35, 143, 30, 94, 170, 189, 175, 73, 122, 160, 200, 245, 29, 205, 116, 87, 118, 34, 239, 240, 63, 44, 146, 82, 193, 193, 35, 103, 239, 116, 15, 10, 72, 163, 247, 239, 162, 237, 228, 31, 130, 134, 35, 197, 195, 8, 10, 76, 214, 196, 175, 105, 71, 11, 242, 1, 115, 167, 150, 230, 94, 40, 234, 97, 120, 250, 234, 129, 59, 126, 1, 133, 167, 26, 49, 201, 175, 112, 135, 242, 128, 21, 240, 38, 143, 76, 205, 29, 90, 131, 97, 242, 119, 35, 44, 92, 246, 193, 96, 212, 143, 226, 80, 234, 112, 178, 48, 155, 215, 218, 176, 80, 47, 113, 13, 232, 143, 233, 180, 43, 140, 194, 161, 97, 212, 104, 157, 23, 42, 138, 33, 131, 76, 242, 233, 144, 88, 110, 140, 134, 74, 0, 17, 85] - ], - "segmentSize": null - }, - { - "encrypted": [ - [70, 195, 216] - ], - "iv": null, - "key": [218, 153, 44, 106, 183, 105, 92, 145, 14, 137, 204, 176, 116, 163, 31, 67, 148, 55, 13, 161, 22, 53, 118, 222], - "modeOfOperation": "ctr", - "plaintext": [ - [36, 231, 155] - ], - "segmentSize": null - }, - { - "encrypted": [ - [171, 146, 88, 186, 165, 228, 18, 65, 32, 81, 198, 77, 20, 217, 8, 25] - ], - "iv": null, - "key": [150, 42, 69, 137, 181, 148, 25, 173, 153, 178, 192, 132, 127, 220, 222, 52, 122, 49, 181, 61, 236, 255, 226, 238], - "modeOfOperation": "ctr", - "plaintext": [ - [143, 200, 43, 230, 38, 243, 160, 227, 119, 115, 90, 243, 194, 235, 94, 55] - ], - "segmentSize": null - }, - { - "encrypted": [ - [17, 23, 34, 203, 186, 237, 115, 91, 246, 115, 134, 49, 202, 6, 117, 149, 230, 123, 223, 83, 121, 250, 20, 157, 111, 22, 17, 150, 232, 13, 97, 39, 145, 57, 154, 13, 60, 192, 199, 180, 249, 29, 136, 152, 100, 114, 21, 212, 251, 76, 65, 123, 4, 70, 120, 88, 237, 190, 215, 144, 206, 230, 174, 82, 96, 7, 107, 33, 68, 112, 178, 170, 56, 6, 209, 76, 133, 173, 49, 5, 121, 232, 125, 192, 170, 20, 61, 161, 96, 136, 254, 79, 54, 67, 40, 146, 184, 246, 3, 83, 232, 57, 24, 139, 106, 84, 174, 129, 155, 180, 48, 70, 22, 118, 98, 101, 63, 168, 156, 9, 120, 151, 141, 196, 48, 26, 75] - ], - "iv": null, - "key": [131, 13, 58, 53, 219, 168, 177, 247, 225, 25, 241, 137, 27, 43, 73, 236, 159, 210, 72, 40, 89, 187, 37, 52], - "modeOfOperation": "ctr", - "plaintext": [ - [61, 113, 222, 206, 181, 73, 64, 88, 121, 71, 49, 32, 195, 14, 199, 110, 236, 214, 131, 73, 11, 156, 74, 113, 220, 135, 204, 18, 15, 122, 22, 141, 185, 197, 9, 74, 26, 254, 221, 52, 39, 141, 96, 122, 193, 22, 47, 249, 110, 195, 197, 181, 183, 202, 249, 160, 38, 144, 29, 83, 38, 55, 11, 206, 41, 53, 97, 95, 113, 222, 87, 41, 74, 193, 244, 178, 56, 182, 147, 138, 62, 179, 51, 192, 191, 211, 11, 86, 115, 161, 228, 0, 106, 69, 204, 238, 135, 157, 9, 53, 76, 169, 127, 172, 168, 37, 197, 105, 103, 150, 92, 90, 186, 93, 196, 187, 1, 154, 250, 232, 179, 23, 134, 247, 209, 214, 66] - ], - "segmentSize": null - }, - { - "encrypted": [ - [85, 246, 150, 252, 49, 173, 183, 57, 103, 119, 155, 127, 72, 54, 201, 155, 197, 215, 131, 208, 23, 152, 249, 52, 4, 42, 210, 78, 82, 203, 248, 46, 103, 231, 204, 113, 31, 134, 160, 111, 151, 21, 19, 41, 12, 217, 225, 173, 46, 140, 53, 61, 139, 1, 249, 122, 13, 88, 97, 28, 53, 135, 224, 233, 155, 126, 150, 104, 138, 191, 229, 166, 89, 207, 59, 127, 74, 238, 104, 237, 10, 165, 192, 162, 114, 94, 13, 110, 237, 238, 80, 14, 24, 146, 21, 73, 177, 52, 59, 126, 34, 163, 89, 45, 233, 66, 99, 110, 16, 16, 93, 180, 63, 241, 64, 253, 204, 55, 59, 204, 237, 168, 33, 122, 221, 186, 102, 209] - ], - "iv": null, - "key": [249, 103, 70, 85, 126, 14, 20, 169, 204, 166, 185, 160, 1, 129, 61, 57, 248, 203, 18, 62, 87, 61, 171, 205], - "modeOfOperation": "ctr", - "plaintext": [ - [202, 45, 134, 91, 157, 93, 151, 104, 118, 14, 117, 21, 100, 76, 160, 81, 66, 200, 90, 81, 16, 125, 144, 57, 169, 179, 21, 89, 233, 133, 221, 89, 194, 251, 24, 5, 179, 178, 220, 253, 205, 194, 146, 69, 82, 216, 129, 159, 173, 147, 131, 26, 102, 30, 2, 223, 244, 160, 211, 201, 161, 231, 37, 218, 215, 198, 85, 214, 45, 127, 33, 109, 162, 169, 252, 85, 126, 148, 192, 40, 222, 137, 189, 104, 143, 11, 99, 195, 133, 49, 223, 252, 115, 85, 36, 0, 53, 57, 22, 158, 213, 230, 56, 203, 47, 193, 183, 81, 149, 86, 59, 111, 108, 119, 57, 82, 64, 46, 209, 61, 217, 162, 114, 98, 120, 65, 119, 69] - ], - "segmentSize": null - }, - { - "encrypted": [ - [26, 99, 164, 171, 173, 170, 119, 108, 231, 114, 66, 207, 55, 7, 139, 190, 101, 76, 139, 102, 133, 199, 187, 76, 80, 171, 137, 49, 100, 130, 117, 126, 58, 136, 52, 117, 112, 167, 152, 154, 221, 240, 4, 148, 133, 151, 139, 240, 227, 0, 45, 117, 56, 167, 203, 234, 95, 120, 13, 105, 165, 108, 17, 6, 94, 104, 219, 147, 10, 137, 212, 30, 73, 145, 34, 42, 209, 22, 23, 229, 238, 112, 52, 97, 64, 103, 178, 177, 87, 244, 157, 37, 48, 68, 84, 238, 6, 177, 27, 89, 40, 248, 88, 74, 76, 21, 16, 40, 116, 100, 159, 99, 72, 111, 141, 65, 217, 72, 233, 42, 111, 25, 62, 62, 98, 50, 240, 125, 134] - ], - "iv": null, - "key": [227, 152, 228, 162, 75, 202, 131, 72, 3, 244, 228, 32, 106, 112, 18, 24, 162, 247, 121, 62, 44, 219, 224, 246], - "modeOfOperation": "ctr", - "plaintext": [ - [235, 97, 7, 171, 186, 214, 109, 63, 71, 102, 18, 144, 121, 81, 84, 97, 52, 180, 142, 219, 57, 97, 244, 227, 21, 91, 100, 19, 105, 2, 130, 54, 231, 172, 39, 39, 105, 127, 91, 47, 5, 65, 207, 1, 38, 47, 124, 224, 53, 196, 237, 146, 222, 169, 12, 168, 62, 186, 31, 169, 35, 24, 107, 189, 194, 189, 98, 175, 181, 254, 224, 241, 162, 1, 176, 224, 245, 65, 15, 166, 86, 145, 151, 112, 44, 21, 102, 119, 160, 235, 151, 244, 200, 29, 94, 84, 209, 29, 232, 245, 194, 128, 216, 253, 187, 236, 221, 169, 60, 102, 198, 71, 65, 67, 131, 43, 122, 114, 33, 195, 122, 172, 26, 50, 1, 246, 109, 255, 230] - ], - "segmentSize": null - }, - { - "encrypted": [ - [181, 158, 22, 151, 65, 9, 255, 238, 62, 231, 171, 81, 88, 93, 177, 75, 210, 63, 53, 35, 74, 45, 53, 94, 68, 124, 182, 18, 66, 16, 7, 203, 241, 76, 18, 86, 108, 224, 238, 73, 164, 228, 93, 77, 18, 38, 142, 196, 242, 48, 178, 183, 81, 125, 199, 47, 116, 208, 111, 156, 156, 97, 113, 28, 135, 34, 70, 219, 154, 222, 71, 49, 154, 190, 128, 81, 127, 154, 2, 27, 66, 166, 232, 80, 169, 213, 48, 192, 79, 16, 25, 19, 119, 16, 199, 57, 235, 70, 229, 37, 251, 123, 96, 3, 16, 161, 115, 71, 224, 91, 169, 17, 204, 158, 187, 252, 17, 97, 93, 121, 118, 88, 2, 114, 221, 222, 29, 184, 164, 161, 127, 147, 156, 211, 100, 211, 34, 181, 163, 7, 115, 46, 189, 177, 159, 174, 39, 141, 88, 249, 23, 123, 121, 98, 144, 23, 125, 146, 188, 146, 230, 120, 214, 166, 180, 71, 110, 178, 60, 51, 174, 131, 165, 85, 158, 181, 234, 56, 117, 200, 93, 27, 28, 65, 12, 208, 243, 140, 80, 14, 30, 31, 29, 220, 131, 197, 223, 198, 94, 162, 237, 100, 186, 82, 196, 114, 216, 108, 39, 33, 16, 29, 195, 209, 130, 31, 180, 146, 61, 141, 91, 148, 145, 248, 46, 49, 221, 136, 178, 232, 126, 37, 45, 221, 1, 23, 226, 184, 204, 146, 134, 69, 169, 187, 162, 49, 38, 79, 60, 33, 230, 51, 200, 32, 158, 159, 87, 129, 104, 142, 41, 31, 27, 106, 133, 97, 226, 209, 76, 154, 164, 89, 44, 153, 6, 209, 129, 199, 172, 104, 244, 24, 1, 116, 195, 70, 58, 131, 156, 194, 52, 21, 144, 187, 182, 207, 69, 211, 200, 88, 40, 66, 169, 64, 240, 143, 171, 166, 87, 239, 156, 20, 249, 162, 205, 225, 172, 89, 69, 177, 44, 93, 101, 86, 144, 211, 144, 231, 73, 246, 207, 216, 149, 50, 213, 31, 114, 210, 232, 15, 23, 152, 180, 255, 6, 247, 58, 62, 173, 1, 67, 76, 213, 254, 253, 120, 25, 210, 182, 46, 118, 222, 134, 214, 64, 241, 38, 4, 193, 190, 1, 129, 188, 116, 15, 30, 59, 254, 16, 3, 119, 210, 243, 59, 155, 71, 63, 68, 105, 176, 81, 93, 253, 118, 244, 220, 184, 138, 243, 20, 37, 178, 31, 141, 143, 72, 104, 200, 102, 170, 130, 232, 141, 56, 227, 108, 40, 4, 12, 98, 251, 183, 137, 198, 112, 97, 204, 77, 164, 82, 194, 17, 19, 235, 127, 195, 82, 86, 183, 212, 207, 239, 82, 147, 211, 53, 127, 61, 92, 71, 164, 3, 136, 151, 130, 15, 86, 108, 144, 120, 148, 158, 131, 36, 7, 249, 193, 94, 48, 35, 24, 161, 72, 121, 167, 222, 5, 159, 206, 228, 114, 221, 36, 88, 128, 190, 52, 45, 120, 224, 194, 151, 229, 85, 89, 240, 21, 163, 129, 106, 152, 238, 11, 154, 21, 129, 37, 70, 75, 154, 70, 157, 234, 170, 127, 18, 64, 55, 125, 44, 190, 118, 176, 54, 125, 90, 210, 164, 92, 191, 105, 215, 158, 56, 114, 27, 45, 235, 15, 70, 34, 196, 74, 158, 223, 146, 39, 236, 211, 95, 187, 184, 246, 146, 156, 77, 30, 168, 189, 231, 41, 245, 236, 165, 141, 25, 118, 193, 253, 87, 224, 218, 90, 74, 77, 91, 46, 147, 102, 229, 132, 165, 214, 83, 31, 19, 5, 203, 20, 96, 104, 117, 16, 164, 103, 58, 220, 196, 107, 99, 112, 212, 230, 127, 65, 185, 247, 10, 147, 234, 96, 238, 204, 89, 221, 169, 97, 57, 250, 17, 121, 252, 100, 178, 29, 41, 9, 108, 22, 22, 179, 235, 140, 172, 25, 238, 126, 246, 50, 44, 227, 199, 254, 152, 215, 177, 119, 38, 83, 163, 71, 63, 102, 63, 63, 131, 35, 80, 105, 145, 52, 72, 200, 38, 43, 66, 24, 224, 27, 33, 60, 118, 77, 79, 102, 87, 222, 230, 3, 193, 165, 146, 76, 24, 52, 130, 103, 130, 15, 92, 82, 19, 167, 159, 133, 110, 83, 145, 15, 197, 117, 96, 123, 83, 213, 177, 152, 148, 87, 136, 185, 247, 226, 44, 102, 149, 119, 208, 5, 48, 163, 164, 120, 37, 170, 191, 217, 138, 70, 157, 205, 6, 57, 154, 186, 50, 134, 74, 27, 21, 182, 60, 109, 32, 169, 58, 186, 14, 186, 55, 167, 57, 233, 37, 241, 158, 212, 76, 193, 31, 239, 176, 8, 103, 142, 75, 43, 199, 78, 117, 230, 142, 130, 105, 128, 214, 106, 6, 88, 253, 76, 126, 98, 38, 71, 4, 174, 174, 90, 156, 121, 117, 160, 199, 140, 90, 9, 212, 19, 50, 45, 66, 67, 96, 33, 158, 132, 210, 230, 97, 212, 159, 5, 81, 149, 44, 124, 118, 131, 19, 221, 100, 157, 16, 82, 251, 71, 234, 213, 240, 133, 110, 248, 253, 70, 112, 39, 210, 207, 44, 42, 77, 34, 55, 234, 1, 96, 230, 50, 59, 181, 75, 174, 243, 92, 156, 177, 208, 216, 81, 133, 101, 23, 243, 219, 243, 45, 95, 137, 203, 167, 33, 71, 154, 250, 244, 160, 236, 232, 33, 84, 132, 66, 203, 42, 218, 50, 151, 203, 96, 32, 30, 175, 66, 170, 148, 236, 24, 179, 166, 9, 203, 18, 238, 159, 78, 108, 202, 200, 225, 185, 93, 78, 57, 6, 239, 105, 16, 35, 93, 148, 67, 162, 229, 183, 75, 49, 128, 41, 172, 124, 131, 242, 186, 235, 71, 67, 229, 126, 94, 74, 68, 26, 36, 233, 59, 108, 218, 47, 83, 213, 154, 146, 44, 252, 200, 101, 8, 119, 52, 105, 51, 201, 67, 241, 215, 23, 196, 13, 81, 196, 190, 209, 15, 225, 115, 54, 53, 241, 160, 126, 182, 194, 236, 66, 26, 240, 54, 52, 79, 222, 71, 86, 76, 131, 126, 62, 170, 163, 157, 119, 185, 29, 174, 34, 41, 195, 60, 145, 35, 115, 235, 135, 153, 40, 219, 172, 170, 89, 111, 196, 46, 182, 92, 55, 215, 114, 24, 79, 77, 116, 19, 0, 232, 14, 227, 232, 166, 208, 211, 96, 66, 25, 148, 28, 247, 127, 63, 255, 9, 161, 144, 245, 101, 90, 145, 240, 233, 195, 83, 33, 116, 105, 78, 116, 79, 43, 90, 64, 128, 3, 128, 215, 130, 113, 231, 46, 121, 137, 57, 191, 243, 182, 69, 249, 188, 194, 166, 164, 20, 2, 61, 76, 211, 2, 113, 59, 252, 62, 254, 108, 161, 126, 198, 160, 146, 185, 210, 70, 91, 156, 40, 102, 53, 29, 37, 132, 135, 200, 165, 78, 173, 32, 51, 81, 169, 119, 202, 133, 0, 123, 5, 79, 49, 95, 37, 49, 21, 218, 110, 154, 191, 179, 77, 107, 162, 40, 12, 240, 243, 167, 14, 49, 247, 73, 37, 34, 201, 3, 82, 173, 82, 116, 180, 189, 91, 133, 102, 47, 241, 199, 135, 199, 241, 6, 162, 229, 113, 135, 190, 243, 191, 60, 29, 140, 38, 23, 253, 231, 237, 97, 37, 24, 5, 57, 126, 218, 106, 35, 214, 183, 71, 205, 25, 83, 224, 21, 197, 96, 110, 169, 165, 171, 253, 106, 158, 12, 133, 131, 59, 118, 139, 0, 2, 184, 177, 112, 104, 210, 128, 115, 204, 205, 136, 24, 114, 51, 163, 21, 89, 218, 201, 220, 233, 231, 61, 59, 6, 170, 4, 194, 46, 215, 131, 157, 174, 80, 63, 15, 160, 176, 219, 237, 202, 123, 3, 149, 192, 89, 223, 61, 57, 194, 8, 242, 67, 162, 57, 174, 36, 188, 5, 53, 231, 93, 106, 119, 52, 225, 162, 3, 28, 74, 224, 60, 78, 99, 25, 91, 115, 235, 52, 20, 12, 228, 71, 217, 95, 81, 96, 7, 149, 109, 179, 231, 228, 80, 156, 123, 160, 173, 240, 179, 13, 135, 26, 43, 189, 83, 20, 251, 95, 188, 189, 130, 48, 232, 71, 222, 29, 25, 25, 77, 194, 66, 18, 92, 228, 160, 194, 124, 66, 225, 133, 232, 236, 51, 31, 204, 207, 188, 226, 162, 39, 136, 45, 69, 115, 185, 192, 117, 226, 185, 75, 43, 193, 58, 187, 50, 214, 33, 180, 56, 185, 216, 245, 176, 60, 54, 93, 89, 91, 185, 58, 32, 161, 204, 246, 138, 147, 222, 59, 200, 119, 173, 5, 244, 55, 253, 169, 79, 200, 236, 152, 144, 196, 23, 178, 14, 142, 223, 141, 53, 98, 197, 41, 238, 209, 243, 166, 235, 235, 94, 168, 172, 229, 101, 202, 202, 205, 150, 174, 9, 144, 152, 138, 19, 219, 90, 4, 82, 118, 209, 151, 112, 28, 189, 35, 173, 96, 240, 69, 89, 168, 218, 199, 249, 110, 74, 79, 180, 187, 51, 75, 105, 178, 227, 148, 99, 159, 202, 150, 202, 160, 170, 94, 192, 45, 20, 242, 31, 98, 48, 194, 203, 146, 88, 90, 46, 228], - [202, 171, 245, 95, 156, 107, 171, 87, 26, 109, 234, 43, 101, 86, 134, 154, 199, 65, 240, 51, 182, 94, 165, 116, 19, 81, 190, 82, 255, 27, 230, 173, 91, 143, 129, 119, 190, 229, 220, 85, 152, 195, 3, 32, 142, 120, 253, 130, 80, 94, 160, 45, 142, 253, 91, 8, 91, 171, 98, 14, 176, 51, 219, 36, 114, 59, 243, 91, 39, 243, 192, 179, 132, 98, 116, 43, 124, 233, 208, 118, 161, 232, 118, 191, 85, 0, 238, 230, 75, 141, 76, 232, 149, 25, 34, 215, 188, 214, 11, 63, 195, 55, 86, 36, 57, 86, 84, 108, 212, 147, 39, 253, 229, 231, 41, 175, 64, 25, 87, 186, 224, 55, 127, 70, 131, 96, 162, 29, 74, 241, 190, 29, 130, 30, 82, 127, 191, 210, 228, 175, 140, 72, 227, 158, 35, 65, 78, 192, 230, 120, 90, 44, 124, 17, 227, 249, 0, 54, 191, 129, 184, 129, 228, 72, 107, 221, 86, 162, 194, 25, 112, 164, 230, 87, 72, 202, 209, 34, 0, 31, 242, 221, 65, 222, 239, 121, 237, 50, 181, 97, 226, 237, 122, 17, 146, 68, 142, 38, 80, 151, 40, 98, 25, 246, 26, 23, 53, 239, 185, 240, 159, 159, 176, 16, 107, 147, 73, 192, 246, 98, 89, 216, 109, 193, 250, 26, 62, 42, 33, 17, 222, 199, 131, 128, 101, 12, 174, 116, 133, 32, 38, 80, 65, 191, 5, 60, 176, 242, 220, 140, 34, 167, 221, 41, 221, 48, 140, 241, 59, 138, 56, 174, 11, 165, 96, 104, 222, 161, 32, 113, 68, 104, 150, 89, 41, 220, 170, 152, 63, 149, 144, 244, 47, 118, 118, 35, 48, 190, 135, 157, 20, 86, 142, 111, 158, 167, 84, 107, 119, 56, 45, 1, 221, 85, 10, 240, 245, 170, 99, 32, 11, 197, 221, 46, 245, 252, 134, 221, 34, 101, 251, 89, 38, 62, 223, 37, 225, 219, 167, 177, 141, 121, 168, 40, 15, 28, 161, 77, 178, 230, 113, 136, 60, 28, 183, 49, 250, 80, 70, 223, 88, 79, 237, 250, 93, 115, 110, 190, 143, 229, 29, 181, 110, 27, 248, 2, 85, 136, 52, 92, 77, 152, 229, 193, 133, 238, 111, 128, 23, 213, 118, 226, 231, 38, 86, 67, 202, 226, 217, 177, 65, 171, 120, 220, 253, 107, 81, 60, 155, 253, 176, 241, 201, 199, 152, 15, 226, 168, 136, 79, 138, 224, 132, 203, 51, 95, 153, 170, 19, 3, 140, 230, 23, 166, 6, 55, 186, 70, 72, 44, 100, 97, 229, 131, 1, 70, 3, 183, 128, 178, 136, 242, 152, 10, 194, 82, 63, 215, 198, 52, 54, 32, 207, 54, 197, 205, 228, 76, 122, 206, 185, 18, 190, 101, 0, 182, 254, 160, 90, 247, 225, 100, 45, 21, 85, 223, 154, 81, 222, 15, 158, 218, 162, 183, 225, 44, 34, 112, 63, 106, 206, 227, 79, 67, 155, 84, 175, 133, 202, 169, 107, 10, 68, 138, 233, 114, 39, 225, 199, 145, 103, 94, 113, 246, 89, 51, 248, 208, 20, 198, 16, 227, 127, 33, 204, 225, 229, 50, 131, 111, 245, 29, 5, 220, 209, 29, 241, 9, 94, 114, 149, 55, 138, 142, 178, 151, 138, 198, 6, 248, 212, 30, 3, 90, 22, 167, 104, 200, 53, 144, 185, 78, 106, 127, 105, 128, 159, 9, 44, 36, 208, 27, 239, 40, 215, 250, 178, 237, 89, 198, 174, 104, 220, 179, 126, 246, 151, 78, 222, 14, 0, 47, 141, 79, 119, 112, 212, 43, 164, 94, 135, 255, 56, 119, 192, 236, 200, 64, 27, 77, 87, 162, 188, 26, 173, 91, 184, 188, 34, 122, 5, 42, 50, 63, 109, 175, 141, 155, 147, 149, 118, 126, 51, 205, 72, 123, 37, 58, 85, 177, 16, 110, 61, 200, 62, 222, 130, 30, 8, 31, 11, 74, 155, 217, 19, 136, 215, 7, 200, 165, 63, 181, 115, 254, 17, 162, 214, 218, 115, 57, 122, 5, 122, 219, 153, 128, 237, 92, 80, 89, 245, 77, 21, 217, 6, 162, 31, 153, 147, 52, 153, 25, 135, 133, 236, 223, 45, 38, 223, 139, 226, 21, 30, 52, 141, 201, 225, 67, 34, 87, 26, 91, 15, 121, 136, 161, 190, 75, 141, 109, 135, 215, 148, 32, 195, 0, 134, 251, 182, 253, 189, 104, 156, 116, 119, 44, 200, 249, 61, 165, 132, 142, 208, 123, 217, 198, 14, 44, 148, 228, 69, 153, 112, 82, 21, 160, 90, 121, 251, 135, 9, 115, 169, 25, 51, 112, 27, 91, 242, 113, 158, 44, 167, 3, 87, 67, 164, 201, 202, 245, 163, 32, 33, 226, 230, 96, 122, 191, 145, 84, 149, 1, 103, 215, 132, 121, 159, 60, 249, 153, 205, 34, 72, 221, 215, 119, 125, 157, 62, 85, 249, 221, 119, 48, 124, 253, 132, 126, 154, 215, 229, 104, 172, 82, 15, 43, 233, 233, 80, 10, 174, 165, 148, 179, 151, 21, 88, 95, 221, 121, 55, 255, 227, 8, 45, 213, 175, 149, 230, 184, 84, 249, 9, 181, 203, 220, 1, 66, 122, 242, 254, 168, 92, 135, 161, 213, 33, 81, 32, 15, 11, 136, 221, 79, 33, 102, 240, 127, 52, 17, 81, 196, 32, 162, 240, 108, 107, 49, 113, 220, 182, 153, 0, 17, 219, 93, 229, 250, 58, 52, 93, 143, 137, 98, 60, 57, 39, 5, 70, 11, 203, 156, 188, 188, 141, 133, 220, 38, 44, 202, 198, 166, 122, 72, 115, 242, 93, 225, 248, 0, 17, 58, 156, 52, 16, 91, 103, 238, 31, 183, 62, 88, 199, 230, 151, 211, 28, 253, 78, 236, 222, 61, 89, 171, 74, 14, 184, 250, 221, 113, 83, 187, 129, 46, 86, 65, 173, 20, 151, 61, 24, 84, 159, 213, 228, 66, 181, 192, 168, 7, 249, 188, 26, 114, 100, 45, 48, 1, 195, 223, 85, 164, 100, 136, 251, 115, 57, 238, 93, 142, 7, 151, 30, 82, 228, 211, 242, 55, 46, 41, 164, 133, 72, 247, 27, 152, 63, 105, 59, 107, 32, 174, 18, 45, 148, 25, 88, 97, 3, 80, 199, 232, 144, 127, 235, 253, 213, 19, 62, 126, 159, 225, 21, 203, 82, 139, 191, 140, 82, 122, 212, 195, 162, 40, 90, 17, 90, 174, 99, 199, 170, 249, 246, 91, 98, 8, 143, 163, 33, 32, 124, 98, 203, 93, 45, 3, 219, 132, 47, 48, 1, 244, 105, 50, 82, 17, 247, 247, 53, 145, 142, 126, 227, 143, 90, 1, 106, 216, 154, 190, 41, 253, 60, 64, 191, 115, 87, 102, 48, 40, 137, 144, 131, 37, 34, 163, 72, 7, 129, 191, 211, 7, 156, 38, 175, 126, 152, 90, 55, 169, 29, 20, 159, 135, 55, 64, 180, 41, 139, 155, 28, 72, 249, 204, 31, 113, 84, 65, 212, 207, 101, 187, 172, 212, 61, 246, 34, 65, 117, 79, 41, 76, 64, 221, 142, 31, 235, 235, 200, 123, 110, 81, 255, 162, 246, 2, 80, 238, 235, 103, 83, 197, 219, 232, 163, 153, 59, 226, 106, 61, 160, 104, 173, 153, 174, 167, 242, 188, 69, 98, 244, 111, 36, 30, 204, 40, 238, 106, 24, 79, 36, 221, 130, 22, 206, 126, 173, 202, 13, 221, 111, 242, 41, 185, 162, 46, 28, 240, 164, 85, 127, 19, 224, 62, 75, 81, 162, 60, 117, 33, 108, 22, 47, 49, 35, 183, 162, 180, 57, 33, 83, 86, 101, 148, 25, 52, 75, 239, 176, 17, 233, 189, 127, 172, 70, 42, 236, 146, 129, 240, 188, 127, 84, 139, 92, 205, 251, 165, 217, 195, 51, 197, 218, 23, 175, 213, 73, 49, 0, 8, 135, 185, 18, 89, 18, 233, 49, 226, 176, 209, 133, 216, 141, 193, 207, 170, 66, 195, 182, 57, 13, 54, 105, 124, 147, 167, 198, 188, 86, 23, 202, 34, 45, 125, 191, 64, 188, 15, 181, 0, 230, 234, 43, 253, 30, 141, 115, 153, 69, 193, 81, 91, 162, 166, 178, 245, 180, 162, 22, 115, 185, 108, 94, 76, 1, 202, 80, 74, 191, 62, 48, 16, 61, 94, 161, 80, 15, 66, 86, 76, 217, 127, 102, 173, 216, 220, 78, 195, 61, 3, 251, 28, 116, 26, 74, 9, 14, 211, 218, 185, 131, 34, 18, 89, 121, 173, 221, 175, 211, 177, 67, 146, 59, 2, 74, 66, 242, 128, 74, 251, 84, 63, 30, 227, 19, 245, 185, 184, 161, 149, 163, 205, 153, 251, 6, 181, 164, 63, 23, 197, 61, 127, 125, 117, 42, 183, 249, 92, 68, 163, 61, 3, 0, 244, 91, 248, 111, 48, 45, 247, 147, 251, 236, 254, 112, 11, 127, 217, 192, 247, 189, 237, 11, 80, 240, 57, 68, 201, 172, 206, 94, 216, 43, 214, 169, 230, 71, 166, 149, 151, 45, 141, 13, 250, 111, 109, 232, 42, 161, 176, 231, 237, 184, 222, 238, 121, 243, 16, 190, 92], - [141, 171, 31, 208, 48, 213, 254, 249, 217, 176, 29, 116, 115, 170, 202, 144, 57, 119, 212, 135, 207, 207, 39, 219, 213, 234, 234, 57, 248, 227, 66, 99, 183, 160, 132, 91, 25, 99, 20, 67, 41, 225, 197, 194, 0, 91, 67, 237, 155, 197, 165, 18, 2, 37, 36, 29, 220, 239, 101, 61, 75, 190, 49, 186, 201, 176, 191, 63, 223, 81, 45, 99, 27, 214, 62, 108, 194, 178, 17, 42, 53, 26, 109, 129, 238, 138, 135, 169, 164, 193, 237, 250, 57, 7, 62, 58, 137, 226, 171, 70, 44, 196, 109, 153, 143, 136, 6, 11, 34, 104, 46, 246, 22, 7, 126, 146, 110, 145, 143, 26, 110, 229, 128, 201, 252, 141, 54, 104, 72, 247, 107, 44, 111, 155, 103, 8, 252, 91, 185, 184, 82, 2, 3, 99, 162, 128, 116, 201, 193, 211, 143, 149, 77, 232, 216, 124, 201, 29, 101, 175, 87, 73, 90, 203, 133, 96, 231, 19, 65, 196, 15, 254, 184, 194, 24, 249, 159, 245, 165, 76, 14, 125, 117, 121, 155, 234, 179, 206, 98, 216, 5, 192, 20, 240, 99, 134, 119, 108, 134, 177, 162, 95, 72, 195, 111, 63, 124, 190, 13, 201, 78, 174, 75, 58, 81, 13, 41, 217, 228, 138, 103, 160, 166, 243, 217, 152, 66, 168, 197, 113, 108, 45, 246, 186, 48, 72, 53, 50, 35, 246, 116, 202, 99, 247, 38, 253, 114, 137, 146, 182, 244, 189, 9, 33, 197, 208, 247, 52, 126, 214, 117, 217, 182, 3, 253, 195, 76, 84, 126, 139, 204, 153, 104, 172, 167, 65, 173, 211, 45, 154, 72, 109, 40, 55, 16, 19, 155, 50, 233, 56, 203, 100, 63, 199, 27, 110, 15, 120, 147, 133, 65, 179, 121, 109, 250, 1, 91, 175, 113, 49, 210, 61, 18, 231, 51, 104, 225, 40, 18, 80, 203, 227, 132, 223, 244, 244, 98, 214, 163, 117, 3, 218, 76, 161, 34, 4, 224, 41, 185, 18, 176, 1, 118, 156, 85, 141, 9, 174, 15, 45, 13, 153, 113, 87, 171, 86, 156, 105, 236, 105, 33, 236, 217, 184, 16, 97, 30, 75, 101, 84, 228, 164, 18, 105, 8, 114, 213, 92, 147, 1, 98, 212, 222, 161, 80, 193, 180, 83, 193, 94, 91, 135, 123, 155, 109, 107, 169, 13, 137, 33, 30, 95, 240, 199, 71, 222, 71, 242, 221, 245, 116, 224, 196, 97, 68, 143, 118, 23, 232, 46, 196, 192, 158, 145, 205, 99, 129, 47, 39, 38, 20, 255, 236, 44, 119, 253, 6, 148, 231, 235, 6, 112, 42, 217, 10, 201, 224, 133, 59, 92, 88, 118, 116, 173, 251, 242, 4, 186, 53, 64, 176, 182, 69, 198, 6, 132, 64, 29, 235, 168, 95, 44, 147, 121, 3, 46, 181, 151, 165, 219, 171, 73, 134, 98, 123, 214, 64, 135, 118, 240, 32, 185, 183, 0, 233, 226, 19, 196, 253, 118, 56, 130, 161, 231, 167, 250, 117, 38, 173, 195, 22, 229, 155, 238, 136, 108, 148, 142, 197, 204, 199, 228, 114, 61, 221, 5, 50, 97, 33, 163, 160, 35, 20, 238, 131, 102, 215, 182, 190, 85, 149, 92, 20, 118, 49, 114, 78, 60, 86, 240, 19, 167, 151, 204, 69, 67, 104, 83, 172, 185, 231, 214, 79, 155, 69, 133, 205, 111, 18, 142, 140, 138, 216, 148, 0, 249, 123, 202, 92, 29, 50, 94, 145, 5, 189, 63, 121, 115, 65, 155, 134, 62, 39, 3, 3, 128, 116, 46, 158, 144, 206, 234, 229, 76, 235, 67, 242, 227, 246, 205, 102, 71, 95, 240, 134, 195, 63, 111, 88, 45, 41, 229, 254, 198, 189, 241, 220, 22, 185, 193, 109, 117, 233, 70, 180, 19, 48, 6, 210, 202, 192, 214, 67, 229, 155, 138, 3, 247, 16, 26, 96, 170, 248, 147, 157, 98, 88, 201, 9, 189, 72, 218, 220, 229, 232, 73, 27, 46, 26, 226, 116, 158, 110, 220, 168, 225, 210, 59, 26, 21, 222, 49, 71, 172, 178, 65, 105, 50, 255, 66, 123, 81, 76, 98, 4, 63, 71, 204, 44, 237, 229, 239, 101, 98, 145, 81, 198, 152, 126, 11, 176, 2, 137, 51, 250, 26, 148, 82, 32, 135, 137, 164, 189, 40, 11, 37, 194, 47, 50, 32, 59, 125, 144, 255, 231, 124, 111, 200, 24, 173, 121, 214, 119, 214, 11, 227, 41, 206, 208, 68, 238, 143, 171, 12, 199, 213, 32, 73, 201, 111, 124, 136, 47, 158, 1, 116, 61, 224, 25, 39, 7, 132, 89, 58, 199, 50, 158, 183, 128, 30, 210, 179, 119, 151, 17, 210, 24, 252, 110, 92, 107, 216, 10, 11, 120, 165, 115, 161, 66, 12, 250, 249, 204, 252, 46, 190, 45, 209, 23, 43, 143, 156, 4, 91, 242, 6, 49, 157, 81, 145, 172, 94, 56, 212, 144, 207, 48, 159, 46, 84, 235, 145, 19, 212, 86, 222, 24, 21, 22, 234, 248, 149, 244, 30, 73, 119, 44, 227, 205, 222, 137, 220, 174, 170, 103, 29, 219, 199, 33, 35, 54, 201, 223, 67, 232, 212, 30, 224, 58, 151, 51, 210, 215, 200, 40, 128, 226, 120, 249, 76, 96, 190, 71, 31, 169, 129, 37, 230, 105, 32, 254, 8, 210, 214, 9, 228, 67, 97, 160, 200, 149, 146, 36, 129, 202, 158, 9, 202, 21, 73, 77, 174, 97, 126, 130, 61, 230, 98, 154, 199, 101, 5, 180, 7, 108, 122, 72, 163, 85, 159, 31, 2, 42, 126, 160, 147, 22, 168, 40, 10, 169, 253, 158, 243, 27, 82, 218, 27, 165, 183, 38, 174, 139, 59, 214, 93, 16, 49, 60, 184, 33, 212, 215, 145, 78, 147, 9, 16, 242, 86, 128, 92, 227, 87, 152, 164, 75, 75, 197, 98, 17, 77, 62, 84, 243, 103, 47, 220, 95, 101, 102, 139, 168, 179, 118, 163, 175, 26, 76, 66, 32, 123, 253, 154, 218, 197, 225, 197, 90, 192, 146, 127, 115, 27, 20, 162, 201, 169, 197, 20, 223, 54, 173, 203, 68, 30, 23, 226, 160, 107, 104, 76, 213, 135, 8, 217, 55, 118, 192, 190, 60, 69, 45, 84, 69, 11, 220, 17, 166, 255, 187, 72, 248, 148, 233, 15, 215, 231, 209, 8, 234, 77, 56, 240, 183, 123, 155, 245, 244, 16, 111, 195, 47, 204, 208, 29, 195, 181, 128, 139, 169, 31, 191, 86, 123, 104, 86, 158, 175, 139, 85, 131, 70, 44, 200, 110, 101, 190, 141, 241, 6, 184, 50, 208, 113, 172, 8, 188, 179, 87, 18, 62, 91, 18, 38, 120, 55, 1, 139, 229, 124, 83, 48, 191, 180, 124, 117, 31, 161, 223, 130, 182, 244, 138, 112, 27, 111, 57, 161, 117, 209, 42, 34, 71, 33, 222, 67, 72, 44, 66, 1, 101, 253, 196, 89, 130, 243, 156, 155, 161, 200, 198, 98, 121, 180, 28, 216, 129, 186, 56, 10, 6, 128, 155, 21, 35, 196, 129, 139, 69, 136, 18, 80, 47, 56, 153, 230, 156, 116, 207, 82, 94, 138, 16, 39, 162, 217, 79, 225, 228, 53, 82, 22, 241, 93, 250, 216, 170, 128, 156, 199, 248, 45, 211, 99, 54, 123, 15, 44, 35, 24, 86, 84, 3, 161, 50, 210, 0, 63, 183, 6, 15, 252, 76, 21, 42, 0, 101, 75, 246, 137, 63, 210, 236, 122, 135, 226, 27, 168, 60, 248, 130, 60, 15, 236, 175, 131, 98, 65, 62, 39, 249, 135, 171, 9, 23, 197, 78, 213, 113, 71, 179, 58, 83, 220, 91, 67, 151, 167, 131, 46, 123, 65, 104, 19, 191, 32, 22, 16, 36, 209, 180, 115, 241, 61, 247, 142, 76, 7, 113, 19, 64, 93, 205, 75, 71, 25, 72, 33, 143, 35, 131, 216, 115, 45, 164, 147, 84, 44, 155, 248, 80, 150, 95, 124, 215, 131, 203, 187, 99, 13, 37, 129, 173, 43, 72, 7, 110, 174, 137, 158, 208, 153, 19, 25, 216, 85, 102, 112, 195, 203, 172, 208, 149, 147, 92, 159, 119, 25, 210, 206, 128, 17, 60, 18, 130, 177, 172, 129, 54, 6, 124, 244, 214, 206, 234, 107, 124, 126, 110, 79, 99, 132, 2, 178, 25, 104, 16, 16, 39, 6, 208, 90, 127, 87, 246, 97, 238, 186, 120, 95, 227, 162, 34, 106, 213, 150, 69, 118, 14, 86, 128, 129, 174, 16, 233, 238, 89, 248, 239, 60, 231, 30, 66, 115, 64, 39, 170, 225, 133, 42, 6, 172, 25, 65, 218, 154, 214, 196, 216, 136, 239, 60, 51, 61, 212, 91, 48, 224, 207, 222, 243, 47, 213, 138, 226, 59, 252, 253, 137, 229, 143, 38, 35, 15, 244, 174, 147, 125, 23, 173, 74, 53, 108, 227, 104, 37, 164, 131, 15, 250, 57, 226, 185, 245, 2, 71, 14, 221, 85, 31, 173, 228, 138, 146, 114, 157, 63, 89, 16], - [174, 148, 29, 165, 44, 194, 102, 178, 37, 62, 13, 60, 167, 46, 145, 112, 91, 253, 26, 110, 116, 22, 196, 69, 9, 72, 36, 162, 17, 98, 167, 18, 74, 239, 236, 143, 200, 100, 254, 29, 240, 24, 232, 129, 98, 132, 226, 104, 166, 164, 46, 55, 0, 25, 48, 143, 89, 87, 34, 141, 244, 50, 170, 139, 35, 70, 71, 0, 45, 75, 163, 51, 212, 218, 66, 73, 228, 84, 249, 40, 213, 19, 91, 202, 7, 246, 154, 94, 172, 158, 131, 137, 29, 132, 177, 78, 64, 176, 228, 202, 74, 73, 230, 109, 122, 171, 215, 84, 209, 112, 152, 189, 94, 218, 153, 203, 105, 8, 28, 174, 84, 76, 41, 38, 202, 70, 36, 43, 85, 18, 218, 174, 118, 135, 136, 58, 23, 9, 149, 90, 175, 253, 116, 7, 144, 202, 41, 206, 172, 73, 45, 15, 183, 121, 52, 10, 183, 242, 219, 118, 44, 166, 196, 181, 65, 225, 27, 132, 35, 240, 1, 126, 167, 247, 237, 69, 38, 55, 136, 164, 126, 24, 227, 238, 166, 196, 1, 89, 97, 32, 56, 76, 22, 23, 217, 22, 202, 26, 112, 137, 20, 194, 31, 202, 41, 9, 95, 32, 234, 113, 72, 62, 128, 240, 104, 105, 164, 100, 170, 41, 106, 208, 75, 227, 205, 162, 16, 33, 23, 247, 3, 169, 64, 221, 54, 67, 162, 177, 204, 59, 61, 162, 134, 16, 193, 191, 107, 249, 223, 200, 25, 133, 123, 229, 128, 62, 208, 239, 32, 126, 169, 37, 155, 198, 16, 254, 180, 168, 251, 40, 63, 172, 22, 0, 175, 163, 254, 175, 47, 224, 123, 221, 1, 102, 41, 169, 74, 201, 51, 184, 236, 227, 51, 90, 15, 20, 85, 12, 139, 129, 119, 115, 245, 174, 94, 126, 53, 62, 35, 53, 73, 4, 13, 96, 251, 145, 7, 107, 56, 242, 154, 188, 31, 95, 15, 99, 249, 103, 254, 81, 142, 62, 107, 228, 125, 247, 195, 143, 134, 46, 159, 80, 243, 33, 43, 247, 218, 104, 41, 67, 156, 34, 122, 49, 159, 81, 75, 208, 193, 54, 204, 72, 242, 2, 83, 141, 22, 122, 86, 240, 150, 254, 211, 144, 252, 157, 209, 211, 7, 246, 179, 20, 138, 175, 170, 82, 74, 154, 238, 219, 53, 121, 23, 52, 189, 141, 210, 2, 168, 179, 102, 99, 155, 22, 23, 13, 204, 1, 8, 37, 188, 240, 129, 208, 139, 251, 203, 133, 88, 171, 221, 93, 220, 207, 32, 95, 170, 224, 181, 102, 118, 212, 160, 120, 235, 82, 235, 128, 147, 24, 34, 110, 239, 60, 55, 9, 167, 206, 40, 203, 34, 194, 107, 57, 120, 240, 80, 111, 142, 83, 56, 152, 107, 160, 162, 0, 227, 89, 34, 183, 226, 159, 98, 193, 253, 197, 50, 158, 82, 222, 185, 97, 11, 16, 152, 147, 161, 166, 41, 214, 182, 185, 166, 30, 245, 80, 33, 243, 84, 92, 113, 2, 68, 152, 131, 134, 185, 16, 150, 32, 13, 87, 108, 138, 137, 179, 21, 186, 115, 250, 140, 99, 253, 85, 222, 204, 29, 161, 53, 116, 60, 51, 24, 173, 213, 126, 131, 245, 250, 233, 46, 170, 44, 245, 124, 196, 93, 123, 201, 47, 193, 19, 178, 124, 200, 232, 125, 117, 165, 247, 26, 145, 176, 118, 26, 182, 86, 45, 56, 167, 202, 182, 172, 164, 107, 215, 20, 114, 186, 30, 159, 153, 153, 165, 4, 73, 236, 34, 210, 211, 31, 16, 68, 86, 9, 181, 94, 231, 169, 167, 88, 163, 122, 76, 252, 197, 113, 21, 33, 80, 189, 153, 149, 159, 70, 84, 214, 228, 32, 13, 175, 158, 52, 21, 67, 152, 131, 56, 121, 181, 36, 40, 117, 97, 235, 127, 164, 187, 137, 53, 222, 89, 228, 244, 252, 223, 152, 108, 129, 143, 187, 98, 49, 82, 219, 187, 131, 82, 109, 27, 153, 105, 57, 213, 127, 226, 94, 120, 203, 31, 95, 159, 5, 118, 119, 155, 239, 175, 169, 195, 97, 84, 140, 231, 160, 20, 21, 163, 101, 213, 71, 33, 166, 164, 141, 45, 133, 91, 245, 246, 61, 248, 131, 66, 181, 228, 37, 173, 133, 162, 209, 126, 184, 84, 210, 171, 190, 29, 69, 121, 75, 88, 236, 90, 33, 173, 238, 8, 52, 69, 80, 235, 231, 125, 239, 124, 103, 173, 166, 40, 172, 246, 2, 202, 107, 186, 146, 107, 141, 84, 190, 44, 28, 79, 201, 250, 166, 235, 172, 163, 113, 167, 133, 119, 250, 214, 72, 78, 182, 142, 29, 110, 36, 136, 9, 137, 182, 129, 141, 210, 201, 220, 157, 130, 110, 203, 205, 115, 134, 1, 52, 120, 224, 32, 71, 28, 187, 96, 11, 157, 79, 132, 48, 176, 157, 152, 118, 241, 147, 233, 92, 211, 121, 186, 164, 47, 14, 181, 20, 23, 236, 24, 134, 240, 19, 170, 35, 175, 93, 78, 187, 39, 145, 177, 12, 198, 75, 245, 16, 86, 0, 200, 19, 180, 8, 27, 67, 80, 146, 162, 154, 36, 47, 151, 236, 208, 64, 198, 13, 109, 105, 235, 207, 36, 24, 132, 122, 249, 180, 184, 195, 124, 213, 193, 176, 193, 87, 210, 113, 249, 151, 62, 253, 198, 100, 99, 160, 147, 148, 86, 228, 207, 43, 240, 239, 78, 57, 205, 96, 79, 228, 226, 202, 85, 96, 189, 148, 157, 37, 199, 180, 59, 172, 39, 175, 87, 44, 205, 227, 176, 249, 247, 34, 232, 127, 92, 239, 255, 143, 4, 66, 176, 183, 46, 67, 31, 252, 182, 96, 124, 34, 237, 218, 8, 36, 105, 75, 133, 81, 65, 170, 167, 89, 145, 123, 118, 100, 61, 4, 248, 217, 23, 179, 15, 59, 16, 95, 211, 36, 200, 122, 192, 52, 122, 171, 161, 135, 190, 206, 201, 83, 175, 158, 123, 47, 139, 214, 22, 206, 20, 248, 30, 102, 103, 128, 48, 153, 0, 255, 149, 18, 140, 230, 203, 130, 70, 37, 138, 245, 18, 24, 36, 91, 82, 160, 221, 75, 252, 75, 10, 61, 81, 11, 43, 79, 224, 250, 120, 110, 34, 116, 99, 220, 87, 13, 228, 37, 54, 177, 38, 69, 236, 53, 53, 73, 58, 142, 48, 40, 77, 58, 140, 63, 198, 59, 208, 223, 228, 25, 219, 75, 196, 111, 194, 38, 108, 162, 27, 220, 66, 166, 35, 23, 229, 238, 230, 169, 63, 97, 62, 168, 233, 155, 115, 140, 225, 22, 66, 62, 39, 144, 6, 96, 79, 151, 135, 137, 37, 109, 62, 0, 180, 126, 133, 161, 63, 155, 135, 177, 56, 249, 198, 101, 138, 72, 73, 192, 179, 94, 120, 133, 83, 220, 143, 30, 29, 228, 254, 205, 198, 73, 189, 143, 193, 127, 101, 218, 246, 108, 100, 202, 109, 110, 84, 61, 71, 88, 207, 42, 252, 37, 242, 192, 112, 48, 65, 135, 20, 217, 129, 152, 196, 28, 163, 176, 148, 71, 125, 230, 144, 183, 146, 190, 166, 245, 166, 184, 40, 252, 192, 231, 26, 188, 91, 40, 153, 115, 130, 135, 193, 79, 214, 105, 66, 178, 50, 25, 202, 229, 110, 73, 214, 181, 110, 141, 148, 77, 191, 233, 211, 213, 167, 130, 90, 24, 187, 124, 94, 66, 174, 87, 207, 207, 247, 205, 121, 65, 77, 85, 132, 14, 224, 221, 57, 86, 6, 204, 68, 135, 165, 94, 93, 220, 31, 192, 181, 202, 191, 168, 54, 237, 140, 91, 22, 141, 141, 242, 178, 239, 133, 99, 104, 237, 82, 181, 20, 125, 111, 6, 60, 56, 212, 194, 52, 146, 248, 100, 196, 70, 251, 51, 20, 98, 87, 250, 40, 143, 102, 30, 229, 182, 204, 253, 13, 50, 152, 201, 240, 10, 191, 140, 135, 29, 1, 228, 152, 191, 234, 242, 216, 64, 89, 158, 11, 59, 70, 13, 33, 66, 10, 220, 98, 48, 91, 125, 43, 231, 58, 175, 164, 107, 245, 138, 204, 165, 183, 245, 176, 4, 187, 177, 150, 43, 252, 222, 79, 126, 138, 242, 125, 210, 166, 56, 167, 6, 141, 66, 81, 157, 181, 83, 42, 175, 246, 131, 144, 82, 120, 91, 75, 122, 47, 162, 176, 89, 206, 51, 37, 242, 31, 176, 27, 95, 29, 214, 32, 120, 235, 104, 137, 110, 147, 134, 185, 181, 254, 95, 234, 81, 40, 217, 142, 51, 127, 159, 61, 82, 233, 154, 128, 45, 67, 47, 137, 207, 169, 129, 153, 17, 124, 99, 98, 122, 207, 240, 160, 159, 200, 206, 51, 2, 234, 51, 183, 73, 142, 104, 79, 169, 41, 96, 92, 1, 182, 90, 190, 117, 6, 219, 201, 9, 208, 211, 166, 11, 175, 195, 158, 22, 236, 94, 172, 191, 18, 254, 27, 215, 136, 56, 102, 181, 163, 66, 135, 46, 187, 112, 41, 14, 180, 177, 72, 207, 158, 204, 250, 100, 27, 114, 240, 250, 116, 144, 77, 28, 120, 129, 174, 172, 114], - [99, 180, 46, 179, 61, 121, 49, 85, 166, 96, 52, 243, 198, 46, 181, 168, 238, 32, 139, 30, 176, 112, 224, 162, 113, 105, 161, 221, 107, 75, 205, 208, 252, 218, 131, 7, 96, 181, 168, 10, 210, 106, 73, 38, 44, 2, 107, 168, 188, 53, 43, 229, 47, 181, 162, 169, 80, 84, 127, 215, 42, 90, 104, 75, 73, 34, 85, 185, 189, 76, 21, 153, 58, 107, 96, 122, 66, 208, 216, 133, 198, 249, 149, 190, 245, 25, 98, 214, 149, 71, 126, 137, 46, 247, 61, 201, 155, 4, 5, 199, 26, 52, 100, 27, 16, 138, 24, 72, 186, 171, 146, 204, 143, 165, 147, 89, 123, 89, 143, 93, 92, 255, 235, 247, 153, 2, 224, 140, 100, 45, 205, 33, 216, 142, 94, 34, 54, 15, 126, 192, 168, 222, 239, 82, 3, 73, 184, 70, 29, 110, 165, 184, 113, 198, 141, 132, 100, 248, 139, 108, 251, 13, 123, 161, 72, 191, 167, 124, 254, 116, 76, 210, 203, 134, 171, 236, 205, 242, 58, 215, 38, 151, 64, 71, 188, 32, 5, 70, 83, 171, 103, 13, 86, 92, 192, 200, 91, 29, 16, 98, 104, 191, 6, 32, 168, 19, 17, 232, 42, 9, 86, 229, 14, 77, 158, 83, 113, 148, 12, 146, 166, 159, 107, 71, 133, 162, 210, 55, 224, 239, 254, 78, 147, 245, 198, 172, 170, 255, 162, 175, 194, 68, 254, 250, 150, 21, 181, 181, 14, 20, 19, 1, 127, 229, 87, 153, 173, 34, 181, 244, 83, 53, 104, 137, 76, 109, 211, 248, 166, 99, 131, 17, 121, 33, 182, 114, 25, 73, 59, 228, 238, 234, 32, 210, 160, 245, 135, 247, 207, 70, 51, 6, 168, 247, 202, 244, 241, 184, 241, 87, 166, 90, 199, 46, 138, 173, 47, 204, 78, 222, 228, 213, 62, 51, 197, 112, 71, 232, 170, 120, 231, 117, 21, 53, 181, 144, 126, 230, 2, 52, 92, 205, 233, 154, 211, 76, 64, 252, 48, 196, 94, 78, 87, 74, 46, 177, 112, 107, 238, 58, 190, 173, 128, 178, 144, 162, 53, 204, 213, 85, 183, 180, 56, 102, 78, 58, 19, 75, 77, 30, 171, 151, 76, 55, 202, 71, 124, 158, 241, 67, 135, 13, 63, 192, 154, 81, 254, 111, 181, 18, 70, 194, 229, 51, 59, 28, 255, 41, 249, 102, 219, 173, 108, 194, 87, 243, 6, 111, 81, 55, 169, 91, 199, 54, 204, 196, 246, 150, 140, 252, 250, 68, 252, 245, 10, 172, 159, 175, 94, 83, 199, 126, 4, 229, 127, 69, 14, 108, 209, 42, 103, 204, 53, 131, 31, 237, 165, 165, 9, 45, 15, 212, 68, 113, 244, 33, 63, 243, 78, 14, 36, 3, 78, 151, 96, 254, 153, 92, 96, 172, 245, 162, 39, 31, 45, 52, 204, 65, 208, 80, 168, 63, 119, 39, 53, 5, 132, 8, 73, 189, 216, 98, 113, 21, 18, 30, 174, 219, 86, 127, 240, 157, 118, 33, 21, 147, 3, 113, 226, 103, 251, 84, 171, 79, 160, 249, 200, 43, 243, 196, 93, 27, 54, 88, 113, 78, 66, 45, 60, 36, 255, 210, 203, 51, 119, 97, 21, 209, 230, 99, 115, 201, 14, 156, 188, 8, 175, 10, 173, 114, 238, 200, 201, 164, 105, 52, 248, 123, 80, 167, 125, 103, 185, 42, 138, 242, 55, 60, 95, 239, 207, 111, 0, 140, 41, 151, 10, 21, 151, 15, 161, 4, 195, 207, 206, 47, 245, 20, 223, 168, 90, 236, 210, 109, 250, 100, 90, 60, 193, 75, 46, 167, 16, 57, 178, 138, 3, 188, 201, 167, 157, 220, 40, 106, 159, 230, 184, 158, 247, 12, 126, 178, 200, 14, 244, 250, 215, 101, 39, 181, 142, 164, 234, 61, 167, 161, 189, 151, 61, 31, 60, 24, 207, 175, 90, 155, 48, 189, 165, 114, 241, 73, 28, 93, 47, 236, 218, 105, 64, 218, 87, 247, 204, 39, 221, 186, 43, 75, 208, 117, 236, 168, 80, 196, 160, 97, 85, 248, 230, 10, 113, 157, 205, 75, 67, 162, 118, 163, 206, 111, 105, 196, 26, 212, 165, 104, 240, 92, 25, 107, 255, 198, 164, 84, 90, 55, 125, 167, 143, 178, 92, 140, 143, 237, 94, 237, 36, 24, 255, 57, 83, 48, 147, 247, 254, 42, 186, 71, 244, 59, 48, 162, 4, 131, 130, 217, 45, 189, 54, 108, 61, 107, 48, 224, 255, 84, 159, 29, 189, 24, 12, 86, 229, 77, 144, 120, 29, 104, 153, 30, 249, 36, 183, 235, 118, 203, 219, 45, 116, 235, 71, 49, 14, 75, 188, 100, 229, 71, 47, 24, 12, 57, 229, 100, 202, 219, 74, 33, 42, 243, 54, 248, 233, 168, 81, 145, 143, 135, 109, 36, 77, 139, 228, 119, 130, 200, 48, 154, 218, 114, 170, 228, 74, 243, 40, 226, 202, 200, 114, 61, 178, 247, 219, 207, 86, 243, 137, 74, 245, 197, 125, 200, 58, 149, 123, 228, 62, 233, 59, 38, 252, 137, 243, 135, 8, 115, 142, 89, 120, 135, 102, 33, 47, 185, 144, 108, 18, 153, 224, 1, 235, 74, 25, 32, 87, 112, 188, 104, 129, 104, 110, 46, 235, 242, 105, 149, 3, 227, 8, 114, 188, 28, 218, 30, 93, 40, 9, 31, 158, 80, 161, 10, 190, 123, 233, 66, 35, 237, 106, 111, 147, 207, 186, 203, 157, 105, 225, 186, 76, 71, 225, 84, 194, 76, 81, 38, 185, 24, 45, 81, 98, 29, 53, 56, 1, 54, 129, 125, 40, 181, 136, 137, 222, 112, 63, 186, 84, 17, 198, 158, 142, 178, 54, 8, 54, 51, 34, 190, 103, 3, 197, 137, 137, 213, 236, 78, 219, 77, 4, 252, 5, 185, 64, 157, 6, 174, 162, 137, 66, 59, 185, 124, 150, 178, 197, 181, 70, 89, 57, 107, 220, 228, 134, 159, 227, 4, 45, 126, 81, 42, 246, 165, 250, 36, 92, 169, 129, 47, 228, 85, 254, 157, 107, 44, 20, 240, 165, 226, 17, 16, 106, 11, 12, 216, 44, 172, 67, 21, 34, 250, 242, 240, 120, 206, 19, 231, 225, 68, 51, 192, 120, 48, 60, 187, 169, 170, 2, 214, 206, 7, 123, 146, 71, 71, 215, 10, 109, 172, 204, 66, 109, 77, 140, 85, 54, 64, 186, 240, 89, 137, 15, 178, 19, 18, 42, 96, 136, 106, 151, 13, 36, 131, 64, 246, 154, 28, 20, 181, 36, 84, 95, 48, 203, 167, 52, 132, 225, 34, 234, 39, 245, 34, 21, 131, 45, 22, 195, 63, 61, 243, 245, 23, 23, 20, 50, 221, 94, 201, 219, 126, 145, 3, 65, 180, 160, 166, 10, 165, 150, 74, 128, 242, 112, 141, 156, 120, 103, 89, 144, 40, 225, 38, 122, 30, 200, 78, 46, 73, 233, 36, 107, 158, 115, 214, 247, 149, 123, 46, 171, 73, 247, 29, 159, 8, 80, 82, 204, 135, 25, 120, 82, 39, 122, 94, 216, 99, 200, 215, 55, 186, 8, 21, 173, 27, 78, 127, 241, 167, 11, 7, 234, 215, 238, 208, 203, 182, 206, 38, 8, 25, 234, 204, 128, 40, 235, 51, 58, 17, 150, 29, 28, 139, 180, 243, 226, 82, 187, 69, 125, 101, 167, 126, 157, 184, 237, 179, 82, 162, 3, 203, 111, 151, 196, 151, 166, 210, 115, 49, 13, 94, 136, 197, 119, 36, 224, 87, 100, 61, 164, 79, 52, 173, 57, 251, 175, 143, 69, 16, 239, 108, 221, 59, 109, 67, 207, 205, 85, 138, 185, 43, 225, 27, 32, 75, 75, 95, 199, 10, 164, 68, 50, 251, 43, 234, 130, 103, 204, 168, 173, 125, 28, 72, 132, 120, 41, 127, 48, 138, 167, 15, 193, 168, 135, 86, 65, 236, 229, 44, 210, 234, 112, 250, 97, 2, 222, 55, 7, 69, 137, 125, 162, 105, 149, 115, 8, 136, 127, 48, 95, 103, 107, 67, 14, 77, 56, 119, 119, 115, 187, 56, 14, 226, 165, 35, 186, 203, 242, 254, 32, 80, 40, 37, 61, 31, 99, 77, 42, 125, 183, 190, 171, 19, 154, 190, 4, 222, 32, 34, 43, 157, 188, 127, 133, 60, 239, 84, 15, 97, 114, 22, 108, 29, 62, 241, 71, 161, 169, 192, 151, 209, 37, 8, 228, 176, 213, 74, 166, 48, 109, 147, 213, 2, 131, 68, 50, 175, 239, 56, 92, 78, 42, 91, 161, 89, 229, 101, 82, 103, 8, 79, 16, 49, 32, 228, 107, 237, 129, 35, 4, 24, 145, 74, 137, 50, 117, 111, 80, 90, 67, 158, 226, 165, 194, 47, 127, 54, 97, 204, 37, 149, 24, 249, 230, 110, 254, 215, 80, 35, 13, 153, 171, 226, 191, 39, 5, 155, 55, 4, 56, 134, 217, 215, 46, 203, 2, 145, 219, 173, 76, 126, 67, 111, 217, 37, 240, 68, 18, 129, 107, 170, 182, 125, 74, 188, 166, 244, 147, 37, 164, 17, 200, 252, 100, 200, 245, 16, 250, 86, 59, 202], - [115, 206, 158, 235, 160, 120, 219, 170, 122, 134, 195, 136, 236, 180, 128, 73, 27, 93, 4, 85, 167, 47, 99, 145, 208, 77, 184, 156, 66, 61, 138, 173, 155, 246, 71, 140, 41, 186, 13, 132, 63, 4, 217, 181, 192, 173, 128, 9, 43, 10, 137, 169, 105, 118, 187, 110, 97, 231, 139, 93, 153, 127, 12, 120, 7, 157, 202, 65, 146, 70, 30, 0, 227, 215, 152, 79, 131, 53, 60, 47, 39, 102, 97, 200, 43, 235, 11, 89, 89, 232, 9, 202, 47, 204, 135, 132, 14, 95, 56, 216, 243, 136, 216, 115, 100, 111, 236, 55, 176, 121, 195, 198, 18, 220, 99, 234, 98, 79, 254, 105, 233, 249, 223, 94, 46, 60, 109, 159, 199, 111, 30, 87, 204, 228, 79, 55, 126, 38, 124, 138, 144, 50, 252, 6, 49, 122, 22, 241, 74, 141, 91, 23, 84, 121, 222, 196, 55, 119, 189, 135, 68, 101, 15, 16, 78, 54, 215, 156, 194, 134, 7, 89, 129, 39, 177, 203, 185, 231, 37, 243, 43, 137, 123, 167, 69, 192, 191, 180, 201, 76, 147, 169, 71, 81, 208, 72, 44, 11, 164, 176, 41, 48, 151, 252, 219, 26, 175, 151, 125, 250, 130, 80, 217, 86, 149, 148, 64, 248, 239, 107, 160, 204, 118, 50, 107, 102, 6, 150, 225, 74, 37, 244, 171, 219, 94, 35, 15, 162, 107, 232, 212, 93, 42, 63, 152, 47, 73, 228, 178, 24, 125, 222, 33, 212, 181, 244, 94, 37, 19, 110, 241, 105, 36, 254, 33, 229, 47, 89, 40, 62, 48, 242, 228, 239, 36, 189, 174, 117, 168, 199, 37, 203, 238, 45, 195, 197, 230, 126, 217, 69, 100, 97, 14, 75, 230, 167, 103, 108, 124, 234, 157, 92, 32, 217, 171, 11, 94, 238, 25, 57, 238, 127, 53, 189, 194, 200, 30, 94, 50, 121, 190, 221, 248, 170, 103, 200, 159, 170, 196, 150, 144, 223, 201, 52, 131, 58, 13, 166, 224, 9, 73, 252, 39, 226, 212, 157, 158, 41, 116, 110, 209, 18, 9, 241, 99, 146, 249, 68, 165, 209, 78, 83, 212, 12, 98, 225, 51, 62, 101, 225, 143, 111, 167, 155, 95, 157, 202, 245, 159, 125, 75, 242, 231, 88, 217, 241, 203, 131, 143, 64, 113, 250, 150, 59, 60, 24, 144, 3, 4, 112, 110, 123, 59, 227, 118, 101, 175, 197, 64, 250, 20, 163, 163, 168, 219, 219, 187, 189, 89, 194, 82, 157, 106, 198, 173, 21, 61, 119, 172, 52, 121, 8, 172, 212, 204, 144, 163, 13, 2, 181, 105, 150, 8, 15, 127, 49, 37, 170, 132, 227, 0, 164, 220, 210, 136, 194, 13, 172, 194, 58, 230, 110, 225, 60, 231, 56, 250, 81, 140, 121, 54, 150, 38, 181, 195, 188, 156, 99, 255, 206, 18, 20, 184, 245, 175, 223, 49, 211, 43, 45, 238, 235, 123, 80, 31, 19, 214, 71, 68, 76, 204, 119, 62, 174, 254, 97, 239, 129, 67, 156, 62, 12, 68, 231, 99, 118, 132, 238, 142, 144, 137, 184, 208, 135, 136, 181, 27, 44, 170, 235, 90, 22, 94, 115, 23, 201, 207, 30, 53, 42, 251, 229, 175, 162, 98, 232, 242, 150, 242, 44, 237, 217, 93, 92, 187, 15, 53, 207, 11, 146, 26, 50, 141, 168, 74, 190, 166, 9, 113, 104, 5, 215, 118, 69, 31, 248, 254, 67, 138, 77, 208, 113, 151, 72, 68, 38, 141, 21, 50, 212, 171, 168, 131, 236, 38, 56, 177, 24, 58, 167, 199, 229, 38, 68, 140, 197, 167, 253, 19, 159, 21, 246, 203, 150, 224, 49, 16, 145, 245, 228, 64, 41, 136, 168, 105, 163, 101, 86, 242, 182, 199, 108, 198, 241, 205, 26, 99, 103, 194, 133, 50, 47, 157, 249, 161, 241, 43, 217, 99, 225, 113, 243, 238, 13, 172, 190, 14, 183, 86, 251, 90, 42, 214, 22, 243, 223, 144, 83, 121, 231, 116, 86, 56, 62, 59, 7, 5, 0, 85, 7, 165, 26, 162, 58, 179, 100, 64, 122, 7, 126, 173, 141, 176, 223, 100, 3, 1, 60, 101, 245, 96, 8, 133, 240, 150, 229, 171, 153, 158, 161, 220, 66, 92, 170, 114, 233, 110, 88, 162, 79, 42, 49, 41, 92, 96, 56, 29, 133, 80, 219, 163, 188, 96, 221, 60, 70, 61, 186, 157, 91, 222, 206, 2, 117, 67, 24, 97, 75, 66, 122, 158, 22, 10, 195, 230, 241, 224, 82, 208, 95, 197, 148, 110, 92, 94, 73, 169, 57, 69, 219, 218, 137, 61, 129, 235, 150, 4, 133, 226, 170, 154, 209, 136, 254, 75, 161, 27, 104, 58, 200, 3, 251, 77, 28, 242, 226, 103, 176, 98, 198, 96, 252, 224, 109, 29, 7, 172, 105, 152, 175, 199, 115, 101, 28, 114, 101, 78, 8, 50, 248, 28, 103, 18, 181, 19, 35, 32, 173, 156, 201, 199, 187, 169, 132, 13, 68, 205, 94, 9, 62, 65, 106, 85, 77, 118, 139, 122, 75, 183, 191, 94, 2, 123, 163, 49, 158, 140, 127, 73, 16, 32, 152, 203, 125, 218, 61, 221, 239, 116, 236, 102, 37, 165, 34, 8, 39, 135, 94, 67, 58, 190, 179, 248, 116, 85, 63, 176, 224, 34, 220, 11, 226, 161, 139, 159, 183, 90, 82, 4, 127, 77, 45, 223, 77, 170, 66, 192, 52, 64, 132, 15, 173, 122, 180, 64, 95, 126, 184, 42, 8, 29, 89, 80, 252, 61, 92, 185, 28, 5, 149, 50, 57, 241, 104, 88, 96, 208, 96, 247, 213, 38, 108, 34, 19, 122, 49, 225, 179, 157, 95, 24, 170, 236, 169, 235, 150, 37, 13, 120, 224, 255, 245, 191, 88, 55, 57, 205, 137, 149, 225, 156, 220, 207, 137, 141, 57, 16, 150, 213, 159, 81, 234, 220, 122, 139, 71, 11, 192, 203, 101, 211, 193, 63, 242, 33, 246, 156, 255, 146, 90, 7, 66, 90, 54, 11, 211, 100, 56, 176, 159, 187, 152, 167, 185, 55, 163, 142, 237, 59, 101, 203, 78, 246, 170, 188, 188, 172, 62, 138, 98, 108, 183, 189, 184, 254, 116, 43, 122, 110, 149, 136, 205, 28, 66, 65, 8, 206, 211, 128, 65, 158, 109, 169, 250, 202, 2, 92, 196, 110, 208, 37, 170, 124, 170, 40, 94, 170, 14, 55, 163, 120, 152, 248, 89, 70, 136, 177, 100, 210, 239, 253, 69, 175, 175, 137, 211, 228, 106, 156, 151, 67, 117, 0, 227, 43, 31, 56, 87, 49, 132, 29, 29, 162, 194, 140, 190, 173, 98, 19, 237, 179, 179, 226, 246, 186, 244, 159, 109, 40, 201, 120, 166, 148, 218, 2, 8, 109, 173, 149, 3, 71, 218, 148, 163, 98, 35, 29, 54, 96, 146, 82, 128, 173, 82, 213, 88, 42, 177, 58, 124, 71, 47, 250, 126, 214, 194, 169, 15, 200, 236, 123, 122, 27, 155, 142, 119, 229, 179, 88, 102, 43, 180, 40, 252, 175, 148, 93, 15, 208, 204, 113, 10, 55, 50, 62, 19, 167, 0, 19, 180, 174, 197, 53, 34, 169, 60, 212, 37, 28, 91, 61, 19, 18, 142, 90, 119, 33, 160, 164, 79, 54, 119, 196, 9, 98, 123, 172, 127, 213, 51, 159, 100, 213, 130, 6, 76, 162, 233, 17, 18, 234, 213, 151, 8, 72, 214, 55, 231, 204, 50, 25, 75, 202, 230, 163, 167, 154, 95, 103, 26, 216, 105, 152, 103, 216, 20, 203, 99, 156, 167, 112, 112, 81, 246, 202, 71, 100, 136, 180, 252, 170, 40, 111, 225, 221, 212, 180, 113, 192, 43, 181, 35, 238, 81, 123, 171, 169, 107, 251, 251, 141, 11, 42, 4, 71, 77, 85, 90, 208, 29, 56, 150, 128, 221, 111, 120, 199, 197, 232, 58, 135, 204, 232, 124, 177, 171, 79, 160, 247, 121, 147, 184, 226, 224, 2, 239, 229, 52, 186, 22, 242, 97, 88, 111, 21, 192, 205, 151, 140, 98, 112, 0, 220, 116, 132, 196, 98, 83, 224, 71, 175, 134, 143, 201, 158, 212, 44, 10, 156, 105, 47, 231, 29, 255, 211, 24, 205, 225, 101, 7, 177, 200, 23, 228, 151, 44, 143, 241, 165, 105, 103, 108, 223, 192, 109, 100, 40, 89, 183, 176, 4, 220, 19, 118, 132, 16, 45, 44, 156, 155, 173, 222, 9, 199, 83, 227, 225, 1, 235, 186, 44, 77, 157, 132, 66, 216, 51, 30, 88, 223, 204, 245, 250, 148, 91, 13, 69, 70, 109, 120, 142, 161, 101, 189, 78, 182, 109, 65, 45, 8, 248, 58, 163, 33, 245, 33, 225, 118, 10, 150, 106, 55, 207, 20, 168, 28, 196, 95, 223, 105, 209, 2, 167, 126, 99, 85, 132, 105, 86, 149, 49, 105, 112, 243, 247, 245, 206, 68, 235, 77, 193, 126, 236, 204, 73, 116, 105, 72, 234, 53, 159, 131, 198, 96, 192, 212, 190, 124, 128, 28] - ], - "iv": null, - "key": [203, 214, 132, 8, 227, 207, 73, 211, 136, 230, 107, 50, 147, 203, 207, 31, 123, 206, 255, 59, 194, 138, 183, 76], - "modeOfOperation": "ctr", - "plaintext": [ - [0, 17, 249, 69, 84, 108, 145, 74, 198, 50, 110, 237, 58, 117, 117, 135, 34, 156, 48, 199, 8, 88, 96, 139, 182, 85, 77, 100, 167, 253, 40, 196, 43, 180, 50, 240, 150, 20, 47, 175, 162, 115, 157, 178, 73, 46, 65, 31, 70, 2, 250, 246, 138, 203, 240, 86, 231, 6, 199, 93, 11, 6, 224, 249, 95, 142, 87, 29, 37, 8, 192, 23, 25, 154, 144, 1, 246, 50, 168, 42, 166, 178, 126, 11, 9, 146, 6, 57, 215, 44, 145, 18, 91, 168, 39, 251, 72, 52, 207, 121, 116, 173, 20, 125, 161, 223, 171, 10, 63, 107, 192, 17, 227, 207, 248, 9, 218, 237, 14, 28, 173, 181, 235, 46, 17, 101, 122, 7, 83, 27, 229, 42, 220, 75, 105, 102, 0, 187, 36, 124, 174, 35, 114, 247, 93, 172, 115, 44, 150, 35, 220, 248, 77, 186, 170, 17, 46, 43, 36, 18, 150, 27, 210, 227, 116, 75, 63, 219, 205, 87, 147, 218, 117, 191, 100, 130, 96, 19, 226, 216, 247, 28, 154, 106, 145, 223, 204, 105, 152, 106, 251, 57, 216, 210, 71, 82, 227, 46, 107, 112, 236, 167, 226, 25, 34, 134, 7, 133, 154, 131, 232, 182, 39, 175, 237, 123, 195, 34, 140, 193, 180, 149, 121, 157, 96, 86, 249, 128, 238, 127, 232, 182, 154, 122, 41, 227, 177, 250, 194, 213, 245, 212, 178, 99, 51, 168, 228, 70, 182, 99, 54, 26, 171, 167, 114, 152, 34, 235, 20, 144, 148, 56, 252, 149, 73, 154, 36, 236, 100, 97, 149, 147, 226, 243, 0, 191, 89, 159, 193, 61, 22, 143, 56, 65, 217, 245, 103, 243, 189, 41, 179, 58, 220, 184, 138, 206, 54, 92, 78, 243, 12, 243, 56, 199, 131, 72, 162, 20, 27, 30, 21, 116, 37, 57, 239, 252, 238, 238, 196, 158, 21, 145, 4, 103, 15, 103, 207, 24, 136, 24, 206, 240, 228, 169, 224, 195, 30, 148, 100, 245, 3, 83, 167, 100, 92, 152, 216, 61, 125, 66, 90, 118, 44, 52, 205, 172, 144, 123, 87, 195, 34, 193, 50, 142, 97, 39, 226, 162, 36, 40, 244, 141, 67, 244, 146, 103, 196, 248, 230, 142, 218, 194, 76, 20, 242, 41, 12, 201, 168, 177, 176, 130, 133, 157, 217, 240, 244, 45, 183, 209, 159, 137, 223, 239, 149, 140, 232, 146, 10, 57, 27, 75, 214, 237, 153, 165, 123, 166, 199, 63, 14, 215, 151, 117, 96, 152, 131, 243, 203, 170, 228, 102, 87, 178, 3, 94, 188, 139, 188, 68, 9, 206, 75, 176, 131, 235, 176, 20, 6, 95, 24, 20, 155, 178, 38, 33, 10, 246, 52, 230, 50, 99, 82, 210, 184, 153, 7, 126, 238, 54, 73, 235, 211, 218, 13, 244, 151, 92, 84, 106, 207, 0, 0, 22, 26, 172, 196, 231, 116, 148, 37, 221, 2, 27, 35, 188, 7, 215, 164, 116, 216, 87, 30, 104, 61, 232, 95, 145, 69, 115, 210, 134, 37, 217, 207, 94, 117, 251, 31, 86, 98, 25, 181, 82, 239, 2, 158, 90, 111, 90, 152, 33, 21, 67, 24, 230, 92, 111, 129, 209, 43, 129, 116, 176, 89, 144, 44, 101, 248, 10, 162, 116, 201, 177, 106, 52, 90, 225, 109, 120, 47, 230, 78, 89, 93, 22, 230, 114, 236, 27, 46, 85, 112, 93, 168, 126, 183, 28, 249, 237, 28, 64, 151, 111, 172, 89, 199, 237, 64, 86, 247, 229, 151, 71, 206, 235, 190, 38, 119, 147, 223, 204, 234, 89, 143, 236, 42, 189, 111, 108, 221, 3, 79, 253, 229, 248, 33, 23, 175, 215, 105, 62, 17, 53, 144, 25, 203, 242, 167, 226, 203, 6, 15, 168, 200, 195, 237, 226, 65, 63, 203, 41, 50, 20, 131, 84, 73, 43, 198, 3, 52, 184, 82, 51, 46, 200, 224, 25, 122, 95, 215, 233, 59, 167, 226, 149, 129, 7, 241, 151, 195, 253, 210, 206, 14, 185, 242, 132, 198, 140, 247, 34, 250, 160, 202, 14, 36, 14, 186, 96, 23, 114, 130, 32, 222, 14, 13, 50, 123, 223, 50, 135, 32, 102, 80, 119, 186, 36, 252, 80, 172, 46, 163, 150, 128, 53, 52, 249, 205, 204, 51, 206, 248, 83, 97, 9, 144, 179, 61, 171, 171, 246, 176, 151, 0, 95, 140, 175, 66, 138, 169, 57, 38, 103, 76, 168, 75, 168, 114, 181, 147, 225, 75, 197, 102, 197, 175, 128, 188, 97, 215, 35, 43, 15, 34, 158, 81, 159, 63, 81, 65, 72, 7, 138, 81, 15, 131, 202, 244, 218, 77, 109, 124, 11, 223, 100, 233, 137, 244, 134, 245, 108, 144, 12, 7, 152, 169, 12, 31, 60, 227, 52, 228, 196, 107, 219, 159, 141, 246, 244, 129, 96, 16, 103, 79, 51, 123, 209, 153, 125, 73, 192, 13, 4, 161, 15, 25, 220, 200, 215, 244, 211, 96, 244, 197, 176, 43, 46, 41, 33, 250, 58, 188, 205, 3, 222, 245, 217, 22, 179, 211, 36, 157, 248, 72, 221, 64, 88, 23, 97, 95, 106, 142, 18, 72, 64, 95, 66, 231, 139, 202, 182, 77, 249, 29, 5, 109, 170, 226, 144, 157, 57, 14, 216, 237, 176, 5, 242, 43, 95, 166, 41, 250, 37, 227, 164, 14, 75, 136, 221, 246, 95, 76, 139, 46, 105, 237, 33, 159, 71, 233, 170, 178, 3, 132, 201, 147, 120, 102, 196, 55, 50, 96, 21, 25, 194, 246, 108, 175, 3, 189, 204, 252, 14, 66, 232, 27, 143, 144, 231, 146, 97, 223, 173, 87, 254, 201, 39, 154, 2, 234, 132, 215, 85, 103, 70, 155, 248, 138, 47, 84, 159, 118, 45, 35, 174, 89, 135, 140, 94, 196, 53, 108, 34, 178, 71, 4, 111, 182, 23, 117, 245, 3, 176, 125, 239, 176, 136, 208, 163, 113, 8, 235, 43, 193, 6, 112, 30, 194, 90, 250, 238, 140, 108, 104, 242, 196, 41, 183, 47, 231, 239, 255, 113, 7, 248, 71, 143, 166, 221, 249, 212, 202, 26, 202, 90, 20, 162, 26, 214, 106, 191, 116, 153, 101, 238, 190, 56, 143, 18, 134, 142, 7, 80, 110, 78, 164, 55, 194, 19, 22, 152, 206, 93, 193, 196, 244, 126, 179, 80, 117, 51, 106, 223, 38, 117, 63, 16, 169, 117, 117, 127, 134, 229, 15, 243, 17, 206, 160, 157, 30, 9, 1, 9, 218, 37, 182, 248, 164, 228, 9, 171, 243, 85, 208, 92, 221, 155, 212, 110, 57, 123, 100, 202, 85, 83, 4, 3, 239, 201, 148, 176, 179, 2, 159, 116, 80, 231, 44, 29, 93, 114, 29, 181, 251, 219, 124, 202, 222, 89, 237, 21, 210, 9, 8, 131, 36, 166, 179, 175, 195, 102, 71, 33, 152, 249, 33, 51, 240, 48, 36, 167, 37, 90, 0, 246, 15, 227, 20, 149, 105, 65, 45, 68, 86, 5, 239, 84, 244, 177, 169, 16, 197, 235, 72, 6, 225, 40, 218, 103, 247, 51, 9, 191, 118, 174, 188, 138, 217, 153, 1, 125, 238, 244, 36, 39, 29, 144, 119, 56, 52, 194, 79, 253, 95, 213, 71, 211, 175, 236, 28, 192, 183, 11, 65, 10, 242, 238, 178, 134, 173, 255, 164, 80, 185, 180, 155, 208, 11, 220, 23, 154, 224, 1, 116, 0, 249, 247, 111, 36, 178, 91, 0, 121, 6, 250, 95, 74, 24, 46, 155, 4, 58, 204, 134, 111, 132, 8, 190, 107, 178, 28, 129, 58, 102, 11, 249, 150, 40, 192, 249, 113, 34, 206, 228, 241, 162, 165, 18, 169, 109, 8, 111, 151, 21, 179, 38, 144, 133, 131, 214, 125, 212, 70, 247, 107, 107, 238, 4, 113, 192, 164, 46, 40, 253, 184, 118, 201, 96, 166, 45, 41, 43, 138, 39, 69, 204, 78, 144, 179, 141, 188, 74, 253, 30, 224, 230, 132, 131, 133, 16, 167, 222, 118, 191, 50, 249, 187, 219, 95, 27, 80, 104, 147, 21, 131, 91, 0, 175, 97, 114, 156, 80, 120, 205, 120, 7, 226, 132, 126, 95, 37, 166, 30, 240, 0, 214, 225, 43, 21, 175, 21, 173, 172, 33, 87, 94, 142, 246, 4, 232, 135, 36, 5, 241, 20, 69, 42, 184, 77, 79, 207, 228, 53, 142, 149, 190, 63, 199, 165, 197, 190, 67, 239, 215, 73, 64, 230, 159, 197, 103, 248, 233, 44, 222, 245, 46, 149, 36, 213, 19, 50, 70, 193, 206, 221, 159, 61, 60, 213, 200, 99, 188, 143, 130, 187, 239, 227, 227, 226, 222, 142, 147, 179, 213, 152, 140, 101, 105, 205, 165, 191, 213, 135, 96, 250, 177, 127, 150, 113, 216, 195, 61, 205, 40, 31, 225, 157, 147, 128, 19, 49, 203, 8, 221, 149, 148, 186, 40, 230, 164, 171, 29, 17, 216, 140, 128, 147, 176, 4, 154, 233, 201, 82, 133, 229, 108, 202, 33, 51], - [38, 71, 138, 155, 128, 87, 38, 53, 180, 202, 90, 159, 241, 98, 70, 137, 222, 90, 142, 71, 58, 79, 131, 20, 65, 201, 76, 204, 115, 92, 0, 38, 54, 21, 155, 152, 219, 124, 58, 60, 235, 105, 52, 123, 255, 169, 44, 29, 45, 42, 233, 44, 218, 0, 252, 112, 127, 197, 194, 9, 0, 251, 67, 180, 114, 93, 253, 220, 73, 111, 208, 148, 215, 160, 111, 98, 24, 132, 97, 231, 134, 49, 254, 98, 121, 58, 91, 249, 242, 186, 140, 92, 12, 145, 41, 41, 76, 97, 140, 248, 49, 168, 249, 143, 38, 135, 97, 39, 152, 22, 221, 130, 47, 234, 34, 206, 103, 232, 225, 47, 241, 36, 167, 58, 250, 185, 45, 14, 180, 174, 0, 44, 92, 181, 125, 177, 187, 186, 61, 219, 247, 189, 101, 20, 17, 100, 166, 229, 251, 40, 51, 26, 81, 38, 246, 37, 154, 198, 26, 212, 30, 35, 137, 125, 114, 132, 12, 183, 170, 153, 24, 89, 120, 39, 46, 17, 215, 207, 126, 73, 240, 229, 250, 70, 109, 192, 125, 126, 163, 231, 125, 210, 110, 179, 84, 91, 96, 183, 250, 226, 213, 169, 172, 48, 12, 136, 44, 220, 208, 237, 237, 179, 129, 152, 45, 199, 11, 53, 99, 120, 143, 192, 214, 141, 169, 69, 100, 66, 4, 59, 75, 133, 139, 117, 118, 18, 3, 248, 147, 236, 93, 152, 182, 200, 81, 186, 250, 123, 148, 27, 166, 134, 178, 95, 183, 23, 171, 33, 227, 22, 36, 6, 42, 9, 140, 13, 105, 44, 240, 38, 149, 226, 138, 171, 69, 149, 162, 156, 86, 116, 153, 179, 163, 218, 53, 217, 113, 156, 154, 94, 64, 114, 218, 241, 189, 149, 171, 28, 61, 87, 174, 160, 139, 236, 203, 175, 2, 222, 124, 69, 163, 240, 57, 68, 19, 227, 246, 51, 99, 210, 130, 108, 78, 237, 66, 86, 80, 223, 52, 4, 48, 26, 46, 190, 231, 139, 189, 87, 112, 59, 148, 222, 95, 247, 43, 85, 232, 51, 113, 172, 51, 145, 82, 19, 199, 40, 199, 43, 163, 86, 187, 144, 174, 54, 250, 29, 194, 129, 248, 124, 150, 204, 171, 193, 155, 33, 30, 147, 193, 65, 6, 55, 168, 135, 37, 181, 246, 70, 29, 98, 244, 68, 241, 40, 250, 98, 11, 104, 50, 123, 83, 168, 206, 141, 15, 48, 159, 81, 36, 231, 22, 224, 53, 169, 73, 239, 136, 148, 103, 33, 170, 199, 97, 9, 243, 144, 202, 255, 228, 54, 84, 56, 126, 12, 40, 53, 41, 157, 60, 26, 228, 43, 185, 93, 127, 100, 234, 87, 218, 62, 91, 197, 185, 166, 122, 174, 31, 91, 239, 98, 121, 160, 23, 225, 240, 177, 50, 232, 1, 244, 240, 44, 123, 226, 200, 55, 58, 193, 254, 235, 153, 11, 195, 142, 106, 129, 129, 109, 114, 50, 28, 41, 161, 131, 73, 218, 37, 97, 22, 139, 114, 28, 100, 253, 242, 87, 15, 8, 188, 115, 138, 106, 117, 175, 186, 173, 69, 173, 195, 61, 160, 141, 31, 154, 151, 203, 240, 1, 132, 219, 3, 33, 12, 210, 42, 119, 134, 73, 81, 177, 52, 248, 167, 134, 201, 140, 49, 193, 84, 253, 161, 161, 195, 174, 174, 60, 215, 194, 254, 52, 24, 193, 153, 226, 106, 76, 107, 219, 251, 218, 244, 244, 238, 12, 43, 160, 218, 180, 229, 198, 17, 0, 16, 119, 18, 75, 132, 239, 21, 78, 144, 233, 146, 226, 110, 39, 251, 12, 7, 95, 183, 123, 34, 202, 121, 44, 108, 185, 129, 177, 207, 212, 32, 179, 204, 226, 241, 235, 216, 224, 67, 95, 83, 22, 10, 114, 135, 240, 124, 5, 106, 82, 91, 68, 61, 47, 5, 44, 134, 148, 174, 220, 154, 241, 230, 149, 98, 160, 226, 102, 89, 221, 221, 109, 83, 155, 228, 221, 129, 148, 144, 238, 85, 7, 251, 223, 53, 219, 36, 215, 23, 22, 220, 115, 75, 176, 49, 129, 118, 246, 226, 2, 216, 225, 178, 207, 149, 181, 198, 133, 131, 90, 5, 93, 210, 130, 166, 222, 92, 186, 51, 192, 221, 165, 77, 87, 21, 245, 209, 99, 213, 248, 174, 246, 182, 114, 64, 45, 136, 151, 17, 192, 63, 194, 208, 127, 184, 54, 91, 108, 118, 134, 113, 15, 180, 63, 150, 43, 51, 111, 106, 127, 35, 159, 0, 156, 213, 229, 211, 16, 123, 134, 110, 169, 79, 218, 167, 32, 215, 191, 203, 197, 160, 90, 106, 43, 18, 92, 35, 246, 153, 181, 28, 24, 11, 242, 101, 162, 74, 89, 105, 147, 209, 31, 80, 181, 148, 160, 138, 72, 191, 121, 203, 231, 66, 100, 221, 59, 252, 100, 221, 245, 44, 242, 109, 143, 36, 169, 198, 140, 194, 53, 96, 91, 205, 8, 35, 186, 64, 253, 163, 252, 155, 62, 148, 110, 142, 42, 67, 1, 61, 185, 121, 243, 147, 69, 133, 152, 230, 70, 102, 22, 82, 187, 242, 239, 109, 194, 86, 141, 85, 236, 224, 179, 183, 253, 105, 58, 171, 108, 177, 84, 219, 66, 216, 75, 9, 248, 233, 95, 58, 187, 15, 32, 154, 8, 72, 149, 186, 203, 34, 180, 105, 1, 245, 59, 147, 219, 181, 130, 9, 175, 241, 111, 151, 117, 40, 246, 57, 10, 141, 164, 226, 169, 77, 87, 27, 73, 191, 66, 64, 153, 10, 64, 204, 124, 194, 233, 108, 59, 87, 238, 39, 99, 116, 44, 103, 196, 248, 57, 61, 106, 138, 176, 121, 90, 89, 38, 94, 201, 187, 229, 102, 244, 114, 175, 112, 148, 124, 147, 34, 40, 154, 65, 139, 149, 196, 53, 11, 149, 5, 132, 159, 59, 148, 81, 73, 45, 225, 162, 51, 175, 68, 140, 169, 184, 206, 205, 233, 133, 78, 37, 17, 190, 26, 99, 98, 85, 57, 6, 110, 226, 145, 218, 190, 29, 35, 99, 204, 237, 83, 140, 64, 54, 139, 186, 65, 119, 178, 178, 91, 221, 70, 98, 20, 216, 157, 157, 47, 29, 89, 180, 236, 43, 190, 55, 87, 165, 192, 179, 77, 160, 195, 122, 154, 71, 152, 100, 239, 70, 194, 176, 174, 12, 112, 135, 251, 86, 125, 36, 248, 96, 19, 73, 147, 73, 103, 24, 58, 236, 184, 24, 181, 182, 33, 32, 62, 169, 246, 235, 232, 106, 31, 131, 55, 109, 142, 222, 247, 63, 10, 131, 74, 106, 106, 129, 184, 92, 27, 251, 57, 57, 48, 138, 232, 153, 172, 156, 158, 24, 224, 178, 200, 234, 65, 236, 9, 102, 184, 27, 153, 112, 102, 255, 104, 71, 216, 79, 108, 153, 13, 226, 168, 12, 244, 150, 143, 95, 112, 46, 30, 249, 205, 221, 7, 177, 195, 97, 4, 140, 84, 152, 234, 31, 125, 57, 37, 130, 126, 39, 39, 115, 239, 114, 96, 28, 110, 123, 50, 96, 192, 82, 23, 11, 206, 85, 211, 94, 153, 116, 29, 249, 63, 235, 85, 187, 164, 143, 183, 108, 85, 157, 204, 189, 251, 142, 55, 69, 72, 131, 53, 47, 212, 67, 63, 179, 99, 151, 251, 180, 81, 112, 160, 22, 220, 46, 194, 159, 148, 163, 179, 218, 28, 223, 241, 62, 98, 71, 177, 242, 218, 55, 231, 98, 120, 200, 204, 181, 163, 187, 109, 102, 47, 255, 35, 80, 136, 7, 222, 91, 44, 99, 211, 216, 225, 83, 88, 243, 80, 141, 98, 135, 76, 5, 124, 27, 58, 3, 93, 116, 72, 48, 137, 66, 96, 235, 214, 15, 48, 46, 24, 62, 249, 69, 106, 185, 242, 162, 7, 228, 38, 114, 227, 14, 40, 228, 86, 184, 141, 180, 95, 217, 27, 90, 200, 184, 40, 122, 177, 99, 91, 186, 194, 47, 157, 121, 68, 184, 165, 48, 105, 46, 213, 188, 6, 140, 3, 170, 40, 93, 231, 167, 149, 78, 53, 146, 161, 247, 99, 29, 169, 10, 54, 207, 143, 246, 162, 54, 241, 101, 196, 245, 149, 162, 227, 252, 196, 93, 165, 14, 63, 36, 144, 19, 147, 103, 245, 29, 115, 68, 152, 117, 27, 58, 158, 37, 174, 126, 71, 198, 242, 228, 132, 116, 149, 153, 212, 221, 245, 224, 94, 101, 195, 62, 89, 186, 89, 47, 165, 52, 21, 202, 7, 98, 26, 131, 83, 108, 20, 50, 177, 54, 233, 57, 170, 106, 13, 193, 169, 58, 248, 42, 15, 175, 110, 215, 126, 158, 196, 190, 59, 179, 48, 131, 88, 58, 192, 184, 53, 216, 140, 32, 84, 1, 90, 115, 223, 26, 226, 43, 89, 165, 192, 4, 221, 177, 217, 196, 66, 197, 243, 59, 220, 204, 109, 230, 219, 192, 179, 92, 236, 145, 236, 173, 242, 120, 111, 146, 87, 142, 50, 52, 246, 8, 202, 17, 177, 244, 85, 195, 98, 236, 47, 229, 216, 155, 116, 251, 99, 68, 0, 135, 175, 84, 111, 139, 228, 57, 78, 168], - [83, 240, 243, 219, 4, 74, 58, 92, 4, 50, 234, 73, 162, 24, 139, 142, 16, 222, 117, 7, 140, 3, 59, 107, 74, 12, 22, 139, 133, 217, 134, 163, 99, 3, 168, 196, 246, 133, 55, 68, 8, 239, 98, 128, 182, 3, 185, 192, 120, 120, 98, 81, 238, 234, 138, 121, 214, 142, 35, 127, 58, 73, 213, 128, 182, 200, 159, 75, 243, 32, 124, 87, 198, 69, 103, 34, 226, 176, 233, 171, 111, 255, 209, 88, 167, 28, 7, 157, 182, 223, 91, 59, 169, 57, 213, 76, 11, 231, 204, 34, 32, 77, 203, 17, 189, 11, 139, 73, 46, 21, 194, 123, 17, 111, 138, 212, 239, 160, 160, 211, 31, 75, 13, 198, 93, 115, 249, 90, 118, 44, 83, 178, 188, 155, 228, 118, 148, 99, 33, 125, 171, 157, 105, 10, 45, 147, 193, 108, 161, 69, 88, 200, 13, 40, 243, 4, 162, 101, 173, 129, 223, 200, 95, 35, 244, 216, 207, 72, 102, 101, 211, 101, 180, 43, 16, 227, 6, 189, 240, 121, 179, 2, 104, 126, 122, 44, 18, 110, 60, 31, 132, 133, 110, 194, 49, 50, 247, 107, 120, 57, 150, 172, 148, 148, 10, 223, 238, 228, 61, 16, 183, 229, 153, 98, 64, 144, 253, 206, 99, 89, 140, 168, 40, 176, 100, 193, 108, 13, 20, 51, 35, 175, 36, 54, 251, 138, 237, 16, 131, 38, 233, 33, 36, 161, 212, 249, 164, 130, 212, 201, 94, 32, 105, 245, 184, 26, 181, 181, 112, 164, 44, 137, 235, 70, 39, 16, 0, 162, 69, 35, 202, 93, 94, 45, 178, 175, 110, 0, 226, 158, 52, 96, 159, 239, 191, 245, 207, 238, 7, 83, 9, 156, 69, 229, 113, 209, 29, 77, 247, 164, 81, 0, 234, 38, 154, 135, 235, 16, 13, 53, 114, 136, 40, 145, 166, 154, 75, 130, 11, 211, 64, 60, 133, 208, 155, 217, 183, 100, 63, 124, 190, 184, 90, 199, 22, 160, 33, 16, 235, 40, 176, 102, 43, 235, 172, 37, 190, 218, 163, 200, 115, 220, 96, 213, 99, 89, 179, 209, 197, 230, 104, 154, 205, 54, 235, 38, 57, 31, 250, 112, 48, 223, 67, 31, 157, 118, 108, 4, 25, 174, 113, 212, 218, 170, 1, 78, 179, 85, 104, 236, 92, 112, 180, 68, 135, 86, 78, 242, 31, 187, 28, 121, 133, 154, 168, 56, 82, 250, 34, 231, 8, 126, 25, 194, 216, 37, 55, 207, 56, 115, 52, 243, 144, 114, 88, 10, 182, 99, 169, 146, 10, 198, 193, 208, 202, 61, 71, 229, 66, 186, 53, 126, 236, 159, 158, 217, 18, 240, 82, 111, 249, 251, 180, 2, 69, 100, 147, 240, 245, 161, 178, 202, 100, 107, 41, 143, 227, 114, 230, 101, 108, 138, 220, 213, 33, 155, 249, 40, 58, 112, 216, 84, 95, 225, 126, 247, 205, 132, 110, 195, 243, 43, 201, 197, 54, 90, 148, 58, 44, 131, 117, 147, 80, 180, 128, 83, 65, 129, 93, 17, 215, 19, 138, 80, 141, 218, 129, 10, 41, 96, 238, 254, 174, 225, 98, 197, 242, 41, 18, 243, 147, 206, 85, 238, 227, 121, 153, 25, 214, 79, 220, 206, 151, 97, 117, 149, 6, 129, 154, 213, 70, 204, 61, 22, 111, 221, 90, 230, 144, 32, 148, 160, 74, 38, 32, 237, 101, 53, 135, 170, 106, 190, 63, 217, 199, 221, 244, 11, 212, 151, 174, 75, 86, 115, 67, 11, 239, 75, 157, 57, 34, 238, 252, 55, 237, 155, 131, 198, 67, 223, 95, 217, 138, 171, 112, 32, 101, 129, 83, 177, 169, 108, 19, 119, 12, 10, 57, 82, 210, 130, 222, 200, 93, 107, 139, 92, 136, 88, 237, 127, 177, 141, 218, 137, 248, 252, 111, 103, 36, 162, 63, 24, 22, 41, 195, 117, 192, 111, 144, 63, 226, 53, 213, 175, 150, 84, 81, 59, 61, 188, 50, 16, 91, 58, 232, 21, 115, 203, 80, 14, 110, 254, 91, 134, 253, 157, 211, 94, 78, 145, 69, 108, 141, 119, 67, 159, 64, 198, 101, 8, 7, 35, 176, 197, 153, 105, 76, 223, 188, 48, 121, 9, 232, 111, 100, 53, 37, 241, 128, 240, 62, 65, 60, 169, 40, 103, 39, 232, 83, 75, 202, 172, 40, 125, 103, 100, 212, 189, 38, 191, 208, 69, 114, 29, 129, 238, 71, 181, 203, 198, 60, 49, 13, 230, 42, 137, 34, 127, 109, 35, 200, 96, 44, 244, 122, 110, 134, 133, 205, 114, 145, 4, 166, 247, 248, 71, 18, 214, 109, 214, 35, 27, 115, 47, 136, 54, 218, 142, 121, 16, 210, 115, 110, 142, 81, 35, 0, 249, 119, 5, 75, 232, 150, 183, 125, 65, 80, 180, 77, 255, 131, 18, 174, 180, 156, 41, 201, 223, 100, 68, 7, 162, 173, 26, 167, 77, 180, 86, 198, 56, 116, 237, 102, 240, 13, 185, 247, 123, 224, 23, 75, 249, 6, 77, 30, 47, 219, 136, 110, 195, 60, 121, 0, 52, 1, 172, 124, 124, 213, 90, 195, 60, 147, 225, 39, 131, 71, 123, 129, 27, 38, 242, 1, 251, 184, 124, 9, 47, 144, 3, 119, 174, 15, 172, 223, 53, 114, 223, 99, 62, 15, 13, 39, 124, 0, 83, 29, 238, 169, 100, 39, 238, 245, 244, 62, 100, 239, 124, 239, 124, 93, 77, 30, 99, 180, 221, 251, 52, 164, 124, 69, 2, 70, 96, 25, 55, 7, 212, 155, 231, 152, 127, 66, 247, 168, 69, 232, 60, 139, 93, 28, 61, 48, 142, 154, 173, 200, 122, 184, 76, 228, 59, 74, 68, 102, 211, 247, 25, 99, 69, 254, 7, 162, 202, 57, 43, 244, 58, 72, 230, 118, 241, 119, 15, 240, 60, 228, 161, 142, 118, 102, 246, 186, 212, 153, 201, 122, 15, 67, 67, 11, 42, 197, 224, 71, 138, 101, 162, 52, 88, 194, 87, 106, 173, 69, 110, 153, 3, 15, 135, 209, 230, 3, 135, 213, 69, 126, 168, 145, 199, 183, 219, 75, 12, 63, 174, 33, 133, 29, 37, 138, 142, 213, 93, 200, 27, 54, 199, 8, 246, 214, 203, 18, 96, 52, 212, 196, 193, 23, 195, 154, 18, 196, 156, 231, 171, 20, 77, 113, 124, 195, 150, 185, 100, 4, 43, 78, 190, 179, 53, 59, 215, 45, 80, 203, 245, 194, 81, 13, 5, 4, 156, 67, 207, 135, 153, 181, 219, 146, 123, 100, 123, 130, 249, 250, 26, 71, 9, 41, 149, 4, 167, 182, 198, 183, 205, 245, 224, 27, 54, 144, 243, 247, 70, 225, 211, 207, 39, 146, 97, 8, 100, 124, 23, 129, 136, 217, 43, 198, 252, 88, 107, 192, 254, 51, 250, 128, 163, 255, 118, 35, 123, 115, 189, 93, 128, 64, 27, 186, 78, 16, 247, 32, 235, 12, 182, 243, 4, 232, 158, 91, 84, 244, 148, 42, 94, 158, 114, 174, 220, 174, 148, 115, 90, 31, 111, 94, 65, 182, 92, 152, 70, 41, 114, 110, 103, 82, 193, 134, 189, 204, 36, 112, 212, 29, 117, 2, 154, 204, 12, 132, 253, 2, 62, 208, 4, 74, 163, 217, 12, 223, 135, 154, 222, 189, 126, 144, 38, 153, 198, 99, 97, 34, 239, 39, 63, 127, 147, 62, 247, 203, 93, 37, 216, 127, 120, 159, 25, 9, 79, 20, 161, 142, 196, 204, 93, 15, 29, 41, 141, 10, 13, 54, 249, 95, 168, 37, 48, 3, 57, 97, 144, 249, 16, 103, 122, 110, 112, 203, 87, 188, 166, 108, 131, 206, 21, 20, 172, 120, 81, 191, 15, 68, 213, 142, 24, 236, 87, 27, 5, 206, 43, 65, 208, 186, 117, 34, 32, 109, 205, 174, 27, 69, 113, 78, 108, 81, 47, 136, 45, 174, 228, 242, 180, 17, 203, 98, 28, 245, 230, 170, 213, 42, 100, 137, 194, 66, 157, 83, 227, 53, 16, 109, 94, 248, 102, 84, 128, 139, 88, 234, 168, 71, 238, 20, 84, 206, 52, 15, 227, 206, 159, 232, 251, 216, 100, 248, 100, 9, 86, 108, 0, 235, 23, 158, 116, 89, 99, 122, 100, 11, 146, 143, 34, 108, 115, 74, 4, 117, 171, 33, 2, 46, 160, 17, 199, 18, 123, 201, 95, 224, 58, 24, 251, 38, 14, 43, 216, 71, 46, 129, 34, 209, 245, 153, 87, 130, 33, 4, 162, 130, 232, 235, 221, 154, 47, 125, 239, 191, 43, 255, 199, 28, 45, 221, 180, 158, 212, 63, 244, 166, 132, 207, 130, 91, 188, 145, 210, 45, 120, 186, 126, 100, 99, 75, 176, 224, 5, 196, 187, 9, 146, 94, 1, 25, 1, 109, 66, 45, 238, 32, 199, 148, 245, 193, 88, 100, 102, 0, 30, 246, 200, 73, 2, 6, 237, 160, 206, 193, 187, 29, 239, 156, 212, 49, 36, 43, 72, 78, 204, 167, 13, 202, 173, 173, 1, 20, 15, 72, 151, 103, 45, 84, 193, 183, 99, 212, 125, 154, 162], - [27, 188, 165, 42, 64, 78, 150, 16, 233, 50, 228, 244, 249, 116, 120, 218, 30, 108, 182, 239, 95, 119, 65, 168, 147, 148, 236, 185, 194, 80, 28, 184, 138, 106, 90, 106, 177, 105, 191, 112, 108, 243, 53, 123, 54, 234, 208, 142, 123, 190, 71, 183, 20, 89, 4, 66, 88, 163, 75, 226, 197, 255, 52, 149, 58, 224, 190, 243, 41, 239, 42, 159, 245, 65, 161, 69, 8, 77, 181, 55, 164, 96, 104, 111, 222, 25, 176, 3, 153, 245, 38, 82, 58, 79, 110, 210, 46, 220, 72, 180, 206, 50, 81, 70, 91, 125, 16, 113, 56, 59, 47, 244, 193, 133, 126, 21, 139, 120, 158, 183, 31, 131, 41, 165, 233, 58, 177, 118, 102, 47, 66, 137, 149, 76, 10, 107, 115, 232, 228, 224, 203, 42, 108, 237, 139, 16, 19, 249, 190, 31, 18, 136, 227, 47, 30, 208, 94, 226, 220, 240, 226, 235, 100, 89, 46, 5, 220, 180, 232, 194, 236, 254, 123, 109, 98, 215, 48, 16, 145, 53, 77, 11, 207, 84, 180, 85, 216, 243, 162, 190, 207, 242, 134, 125, 86, 132, 255, 154, 100, 92, 229, 18, 1, 210, 154, 184, 187, 4, 164, 26, 82, 174, 101, 207, 44, 100, 9, 71, 46, 107, 119, 56, 207, 145, 252, 74, 186, 44, 127, 77, 171, 46, 17, 122, 124, 112, 178, 120, 171, 89, 129, 223, 172, 252, 210, 52, 127, 192, 123, 51, 45, 154, 153, 224, 84, 132, 155, 155, 155, 18, 186, 55, 94, 34, 130, 123, 253, 207, 17, 179, 153, 227, 159, 82, 150, 215, 111, 129, 53, 152, 220, 168, 160, 153, 131, 205, 164, 152, 38, 94, 113, 156, 224, 129, 81, 182, 246, 128, 130, 255, 214, 74, 32, 129, 62, 70, 127, 47, 21, 249, 194, 19, 105, 185, 254, 235, 74, 114, 8, 86, 253, 195, 43, 143, 166, 93, 195, 164, 243, 169, 205, 75, 192, 41, 130, 12, 251, 248, 28, 130, 2, 202, 136, 51, 165, 140, 58, 72, 11, 117, 205, 238, 176, 174, 222, 19, 229, 210, 52, 200, 83, 95, 207, 255, 212, 205, 168, 211, 125, 27, 243, 16, 115, 148, 172, 102, 83, 134, 50, 203, 11, 42, 157, 78, 178, 53, 146, 149, 117, 191, 23, 137, 189, 199, 225, 219, 147, 14, 246, 9, 112, 183, 143, 211, 58, 145, 104, 116, 118, 67, 65, 167, 227, 27, 157, 239, 250, 241, 210, 10, 217, 244, 137, 26, 235, 102, 187, 30, 194, 223, 68, 185, 253, 161, 30, 55, 54, 63, 55, 121, 37, 102, 43, 222, 190, 188, 132, 132, 9, 46, 149, 84, 90, 70, 240, 250, 136, 245, 175, 185, 3, 130, 197, 58, 91, 245, 255, 221, 243, 1, 247, 213, 206, 80, 119, 120, 168, 37, 128, 205, 234, 61, 199, 111, 16, 69, 208, 16, 26, 50, 156, 185, 36, 65, 90, 19, 15, 92, 111, 175, 125, 162, 105, 106, 37, 65, 36, 40, 36, 107, 239, 141, 199, 107, 40, 70, 93, 151, 197, 32, 159, 248, 23, 106, 8, 184, 118, 121, 59, 240, 220, 202, 8, 176, 56, 69, 200, 213, 116, 239, 241, 46, 203, 200, 197, 218, 71, 239, 32, 195, 95, 243, 212, 8, 72, 2, 46, 104, 235, 56, 172, 57, 158, 61, 162, 224, 1, 201, 196, 58, 234, 241, 142, 87, 42, 173, 253, 1, 72, 233, 127, 100, 161, 125, 135, 8, 122, 195, 172, 169, 196, 221, 45, 48, 177, 20, 229, 240, 235, 83, 117, 102, 129, 94, 177, 222, 87, 250, 218, 7, 166, 232, 239, 83, 207, 180, 9, 47, 154, 227, 129, 195, 206, 151, 112, 175, 116, 104, 66, 182, 43, 20, 23, 130, 84, 19, 45, 86, 219, 251, 232, 212, 121, 104, 224, 189, 54, 132, 174, 112, 115, 237, 36, 0, 101, 157, 250, 3, 18, 184, 104, 16, 191, 160, 69, 165, 38, 72, 134, 201, 171, 145, 127, 185, 202, 133, 235, 227, 246, 41, 203, 18, 139, 93, 19, 237, 82, 45, 127, 69, 102, 166, 251, 38, 101, 15, 60, 139, 115, 189, 48, 129, 204, 170, 177, 244, 48, 91, 215, 60, 145, 169, 99, 176, 225, 164, 101, 194, 247, 239, 10, 26, 209, 228, 82, 219, 42, 246, 156, 254, 7, 72, 229, 178, 6, 147, 252, 150, 158, 11, 67, 187, 37, 67, 216, 12, 89, 213, 206, 173, 235, 43, 20, 59, 63, 116, 0, 200, 192, 252, 195, 45, 0, 186, 9, 130, 173, 177, 148, 51, 49, 101, 203, 195, 132, 186, 159, 82, 49, 115, 66, 236, 14, 11, 112, 220, 6, 78, 60, 71, 227, 17, 12, 156, 101, 223, 214, 216, 177, 59, 163, 150, 136, 209, 248, 81, 119, 151, 32, 202, 120, 119, 179, 148, 31, 24, 63, 213, 163, 17, 101, 105, 77, 190, 217, 96, 15, 70, 18, 163, 57, 161, 209, 19, 37, 110, 57, 226, 61, 192, 77, 173, 140, 214, 21, 104, 165, 123, 206, 201, 204, 73, 210, 5, 167, 234, 13, 116, 88, 48, 85, 245, 248, 231, 152, 96, 2, 223, 232, 24, 153, 85, 133, 206, 134, 181, 155, 161, 124, 4, 163, 194, 58, 96, 251, 148, 209, 86, 126, 206, 5, 130, 97, 94, 160, 188, 153, 10, 233, 16, 241, 146, 221, 84, 252, 208, 209, 191, 152, 208, 213, 224, 238, 95, 87, 74, 208, 74, 145, 159, 174, 70, 199, 98, 55, 77, 104, 59, 156, 160, 153, 140, 231, 187, 152, 159, 7, 187, 154, 67, 201, 101, 162, 40, 36, 203, 181, 42, 45, 9, 141, 10, 87, 162, 7, 14, 215, 60, 20, 93, 233, 12, 208, 18, 211, 65, 65, 26, 145, 38, 194, 27, 240, 24, 0, 195, 97, 68, 229, 113, 125, 141, 233, 132, 54, 1, 79, 255, 14, 120, 108, 98, 126, 31, 185, 83, 110, 53, 151, 132, 143, 62, 218, 75, 238, 36, 0, 206, 236, 209, 3, 19, 71, 73, 18, 85, 159, 165, 50, 25, 200, 247, 67, 247, 22, 187, 231, 242, 209, 113, 75, 11, 252, 190, 21, 61, 35, 118, 122, 37, 250, 160, 6, 173, 67, 32, 81, 230, 215, 103, 27, 203, 211, 5, 254, 85, 115, 48, 15, 223, 71, 49, 203, 213, 55, 193, 2, 128, 128, 116, 70, 244, 119, 105, 137, 224, 46, 249, 99, 250, 88, 206, 25, 89, 9, 240, 117, 229, 34, 207, 39, 150, 195, 16, 117, 71, 88, 174, 9, 91, 43, 187, 250, 6, 73, 69, 233, 38, 167, 147, 163, 68, 186, 38, 208, 181, 23, 136, 81, 219, 198, 194, 212, 133, 56, 36, 170, 101, 92, 228, 171, 20, 71, 64, 220, 90, 119, 7, 181, 114, 122, 255, 195, 94, 64, 163, 37, 196, 217, 7, 125, 185, 121, 79, 131, 23, 143, 235, 243, 84, 172, 142, 190, 166, 191, 11, 108, 93, 31, 107, 146, 238, 186, 93, 210, 127, 103, 13, 154, 144, 22, 207, 108, 172, 18, 6, 97, 15, 106, 127, 22, 175, 16, 159, 163, 179, 253, 181, 172, 169, 53, 153, 181, 18, 19, 112, 82, 84, 146, 90, 188, 217, 237, 208, 67, 224, 25, 194, 24, 117, 33, 15, 140, 80, 94, 63, 121, 30, 86, 120, 110, 254, 243, 168, 115, 75, 37, 240, 252, 127, 168, 51, 8, 34, 137, 73, 45, 223, 210, 223, 92, 195, 160, 210, 117, 111, 8, 87, 194, 198, 224, 187, 2, 147, 151, 201, 144, 211, 198, 221, 240, 219, 9, 119, 84, 12, 37, 85, 123, 158, 229, 151, 34, 137, 40, 177, 66, 33, 209, 110, 104, 61, 201, 92, 2, 3, 92, 177, 227, 170, 243, 103, 221, 145, 173, 72, 85, 154, 63, 194, 49, 154, 183, 33, 89, 6, 145, 43, 34, 117, 81, 198, 15, 165, 88, 28, 77, 5, 41, 244, 89, 219, 223, 16, 203, 244, 230, 112, 33, 199, 252, 116, 136, 5, 162, 86, 99, 37, 174, 175, 92, 153, 73, 114, 211, 50, 29, 22, 143, 169, 7, 236, 211, 250, 1, 29, 72, 237, 85, 228, 94, 204, 144, 144, 201, 139, 119, 70, 110, 193, 177, 42, 49, 137, 114, 206, 247, 43, 99, 31, 114, 73, 23, 176, 169, 203, 112, 200, 115, 58, 6, 92, 115, 159, 41, 176, 108, 0, 101, 164, 122, 122, 190, 64, 108, 124, 219, 149, 121, 56, 229, 152, 239, 162, 3, 126, 246, 86, 153, 197, 240, 255, 64, 102, 196, 204, 207, 159, 204, 156, 109, 130, 148, 3, 209, 106, 53, 4, 211, 183, 224, 141, 76, 249, 105, 92, 89, 238, 89, 4, 113, 125, 133, 102, 116, 38, 213, 85, 31, 70, 167, 69, 187, 238, 248, 7, 14, 71, 52, 82, 158, 83, 29, 211, 139, 48, 209, 47, 233, 81, 225, 186, 16, 13, 151, 63, 223, 242, 118, 118], - [38, 75, 0, 202, 129, 221, 114, 16, 70, 245, 197, 186, 205, 127, 183, 159, 232, 23, 120, 115, 130, 61, 97, 79, 151, 55, 111, 208, 168, 78, 89, 115, 175, 214, 200, 70, 111, 135, 233, 91, 37, 212, 3, 188, 118, 193, 181, 246, 25, 60, 6, 130, 206, 50, 217, 248, 171, 7, 13, 77, 52, 107, 206, 95, 205, 251, 88, 137, 46, 19, 205, 242, 225, 15, 25, 237, 91, 235, 24, 208, 157, 173, 226, 207, 58, 83, 70, 165, 95, 140, 68, 168, 75, 57, 85, 121, 172, 246, 254, 202, 161, 226, 116, 192, 201, 61, 233, 23, 100, 171, 110, 79, 62, 182, 101, 44, 7, 91, 145, 204, 67, 213, 113, 58, 22, 72, 219, 139, 158, 105, 236, 208, 51, 211, 28, 108, 1, 253, 17, 23, 23, 43, 92, 16, 233, 151, 230, 211, 6, 176, 245, 121, 47, 53, 214, 150, 119, 157, 35, 209, 165, 14, 231, 35, 136, 145, 84, 43, 67, 18, 107, 69, 215, 239, 127, 13, 242, 197, 84, 143, 205, 119, 50, 26, 38, 203, 39, 70, 16, 245, 174, 244, 26, 192, 156, 144, 118, 79, 159, 6, 180, 160, 137, 213, 185, 49, 146, 60, 175, 204, 80, 137, 47, 139, 80, 21, 231, 75, 3, 191, 7, 103, 216, 114, 211, 110, 251, 8, 253, 243, 150, 44, 101, 142, 81, 254, 99, 25, 9, 75, 108, 246, 255, 9, 147, 229, 35, 120, 25, 134, 169, 115, 237, 52, 74, 244, 241, 5, 120, 215, 98, 225, 0, 240, 244, 70, 216, 124, 36, 241, 220, 153, 179, 37, 81, 170, 69, 10, 204, 196, 249, 220, 144, 233, 144, 70, 99, 145, 117, 130, 40, 23, 178, 192, 245, 173, 47, 201, 166, 148, 69, 85, 190, 76, 63, 202, 36, 211, 135, 69, 221, 222, 159, 108, 83, 69, 236, 16, 201, 227, 225, 237, 60, 29, 34, 168, 138, 45, 133, 83, 241, 64, 249, 174, 121, 177, 35, 167, 149, 232, 118, 242, 112, 45, 158, 29, 170, 227, 195, 171, 239, 140, 112, 74, 211, 184, 202, 46, 189, 28, 26, 190, 211, 147, 6, 169, 161, 99, 42, 254, 212, 49, 9, 191, 183, 32, 119, 136, 81, 255, 95, 105, 62, 229, 66, 81, 190, 31, 147, 220, 61, 239, 55, 102, 120, 178, 209, 242, 253, 126, 53, 115, 77, 85, 47, 49, 204, 26, 123, 149, 21, 105, 229, 242, 200, 142, 230, 81, 215, 124, 0, 95, 25, 45, 206, 128, 241, 87, 61, 86, 150, 221, 105, 220, 162, 77, 162, 231, 255, 159, 7, 92, 77, 70, 54, 239, 200, 184, 155, 11, 199, 16, 66, 154, 13, 193, 164, 72, 224, 198, 192, 36, 229, 95, 2, 6, 44, 45, 71, 30, 11, 33, 85, 166, 153, 242, 36, 166, 22, 135, 136, 92, 30, 15, 52, 10, 79, 75, 232, 252, 0, 2, 203, 252, 122, 125, 51, 104, 5, 176, 44, 117, 19, 79, 129, 108, 131, 4, 201, 149, 10, 222, 100, 61, 81, 67, 41, 36, 168, 199, 71, 200, 192, 23, 252, 160, 194, 225, 108, 105, 143, 105, 251, 98, 56, 2, 192, 186, 39, 120, 155, 71, 200, 0, 140, 174, 129, 100, 42, 74, 134, 86, 250, 119, 87, 241, 119, 163, 141, 211, 141, 29, 155, 26, 91, 12, 40, 134, 145, 96, 61, 242, 76, 16, 139, 53, 156, 196, 118, 125, 245, 240, 39, 156, 175, 132, 147, 131, 47, 71, 83, 118, 49, 170, 87, 87, 212, 28, 197, 126, 130, 46, 15, 100, 244, 75, 35, 48, 19, 227, 253, 101, 201, 12, 27, 124, 120, 192, 195, 218, 179, 103, 195, 193, 23, 122, 68, 153, 130, 181, 232, 186, 106, 215, 203, 36, 35, 226, 44, 102, 158, 160, 23, 176, 133, 163, 47, 19, 21, 117, 140, 153, 71, 18, 70, 128, 236, 83, 105, 1, 20, 119, 151, 228, 113, 169, 111, 50, 47, 202, 173, 208, 177, 133, 228, 138, 7, 235, 54, 193, 66, 14, 145, 202, 230, 186, 21, 188, 133, 147, 110, 217, 233, 89, 58, 170, 177, 101, 37, 178, 53, 149, 7, 65, 6, 196, 32, 189, 30, 117, 76, 218, 87, 66, 136, 70, 101, 85, 67, 88, 134, 195, 201, 185, 64, 144, 176, 130, 234, 141, 10, 161, 45, 85, 182, 175, 127, 97, 214, 90, 55, 178, 122, 242, 67, 157, 121, 239, 20, 49, 97, 61, 60, 116, 115, 113, 102, 2, 3, 72, 219, 162, 51, 19, 249, 114, 185, 45, 26, 141, 9, 41, 95, 253, 86, 37, 143, 32, 28, 151, 149, 14, 138, 61, 243, 153, 194, 75, 252, 97, 235, 111, 158, 176, 141, 38, 112, 37, 223, 93, 41, 251, 140, 200, 91, 87, 183, 180, 114, 154, 224, 110, 156, 132, 234, 179, 56, 14, 77, 77, 83, 24, 166, 166, 50, 191, 0, 246, 119, 166, 211, 25, 235, 125, 55, 45, 237, 7, 171, 237, 251, 144, 210, 47, 41, 68, 96, 73, 53, 136, 68, 63, 202, 53, 199, 59, 69, 108, 48, 112, 228, 145, 156, 156, 248, 41, 167, 155, 230, 194, 254, 34, 135, 110, 147, 220, 137, 195, 50, 20, 149, 113, 123, 39, 192, 59, 230, 64, 57, 120, 237, 165, 34, 218, 245, 41, 122, 35, 45, 226, 237, 249, 169, 68, 229, 68, 15, 230, 72, 171, 220, 130, 127, 66, 120, 43, 200, 141, 181, 106, 138, 11, 101, 162, 140, 178, 112, 11, 27, 170, 247, 70, 73, 87, 5, 80, 138, 173, 180, 158, 43, 205, 167, 245, 148, 94, 33, 175, 141, 169, 73, 89, 118, 91, 139, 72, 109, 3, 144, 219, 3, 171, 66, 29, 75, 152, 15, 48, 90, 192, 219, 41, 197, 114, 116, 144, 94, 156, 202, 204, 12, 97, 217, 147, 116, 239, 242, 40, 28, 28, 25, 57, 13, 34, 129, 59, 82, 42, 71, 61, 90, 41, 174, 95, 227, 15, 145, 38, 245, 62, 79, 188, 184, 113, 198, 240, 140, 148, 86, 137, 189, 71, 150, 121, 213, 218, 227, 155, 206, 67, 137, 37, 209, 215, 194, 88, 195, 1, 155, 230, 8, 35, 36, 34, 7, 169, 219, 1, 236, 190, 216, 38, 15, 70, 8, 212, 67, 246, 11, 168, 237, 110, 194, 162, 102, 214, 41, 155, 12, 47, 141, 122, 112, 127, 250, 172, 91, 172, 50, 207, 69, 3, 41, 248, 2, 123, 145, 206, 60, 131, 170, 170, 34, 127, 218, 13, 207, 89, 121, 40, 58, 204, 148, 49, 151, 188, 169, 185, 211, 15, 139, 245, 3, 98, 59, 185, 212, 44, 107, 187, 228, 105, 88, 186, 109, 56, 38, 154, 14, 177, 19, 62, 112, 165, 3, 21, 138, 16, 218, 85, 120, 134, 150, 225, 51, 62, 239, 133, 18, 219, 50, 57, 245, 145, 210, 45, 0, 177, 19, 248, 105, 117, 190, 187, 217, 87, 174, 47, 208, 1, 176, 93, 189, 249, 229, 230, 56, 183, 218, 176, 15, 42, 12, 99, 64, 25, 172, 190, 128, 136, 99, 75, 142, 48, 51, 79, 232, 160, 236, 212, 176, 212, 121, 103, 3, 151, 179, 29, 222, 164, 198, 64, 45, 192, 136, 99, 202, 175, 88, 60, 253, 230, 14, 252, 43, 67, 89, 94, 192, 139, 241, 242, 45, 161, 122, 102, 27, 145, 234, 120, 15, 133, 20, 53, 198, 21, 81, 175, 227, 211, 213, 200, 254, 56, 255, 184, 0, 57, 61, 177, 150, 180, 31, 188, 47, 168, 247, 36, 88, 26, 132, 119, 58, 131, 108, 97, 167, 163, 27, 64, 167, 194, 175, 98, 222, 124, 58, 165, 179, 64, 115, 152, 246, 96, 94, 7, 60, 166, 95, 236, 180, 29, 82, 76, 131, 136, 244, 178, 177, 118, 6, 99, 120, 194, 154, 219, 46, 92, 252, 183, 130, 166, 70, 204, 42, 67, 159, 244, 202, 93, 217, 187, 42, 202, 124, 231, 144, 111, 74, 59, 9, 132, 166, 87, 8, 39, 80, 181, 222, 4, 0, 20, 39, 21, 80, 230, 33, 185, 10, 48, 68, 62, 34, 239, 43, 127, 254, 176, 121, 61, 215, 46, 118, 122, 229, 214, 184, 247, 175, 98, 73, 133, 103, 74, 214, 162, 15, 149, 121, 21, 158, 153, 200, 52, 122, 133, 83, 85, 69, 36, 251, 161, 91, 245, 109, 103, 37, 9, 153, 253, 158, 155, 81, 191, 53, 144, 40, 247, 100, 96, 74, 17, 183, 112, 182, 228, 95, 235, 98, 62, 186, 104, 14, 229, 181, 107, 181, 27, 164, 77, 247, 72, 245, 82, 78, 184, 57, 98, 68, 204, 199, 232, 57, 124, 197, 123, 242, 224, 10, 224, 19, 191, 99, 74, 113, 228, 85, 72, 61, 172, 173, 90, 201, 58, 217, 37, 247, 120, 227, 69, 105, 183, 4, 90, 144, 137, 236, 45, 146, 99, 201, 25, 39, 143, 212, 114, 41, 176, 91, 95], - [174, 26, 196, 242, 173, 195, 191, 177, 219, 92, 158, 89, 153, 30, 69, 148, 140, 109, 188, 99, 148, 10, 92, 197, 238, 142, 91, 12, 47, 183, 85, 16, 207, 247, 22, 58, 66, 185, 178, 220, 173, 97, 157, 18, 17, 60, 220, 197, 198, 121, 92, 121, 189, 131, 240, 108, 252, 200, 169, 73, 89, 214, 84, 33, 240, 201, 38, 99, 192, 215, 204, 59, 252, 94, 99, 236, 147, 149, 2, 61, 15, 69, 181, 22, 0, 183, 167, 198, 193, 100, 161, 64, 198, 160, 11, 232, 107, 230, 111, 205, 56, 208, 141, 130, 165, 218, 56, 192, 149, 214, 20, 231, 101, 101, 212, 248, 160, 112, 44, 254, 122, 137, 69, 53, 122, 81, 16, 253, 175, 142, 79, 192, 104, 205, 100, 189, 143, 76, 248, 110, 113, 102, 221, 63, 103, 192, 44, 220, 108, 230, 95, 150, 23, 117, 73, 214, 64, 148, 152, 44, 98, 114, 126, 233, 192, 33, 189, 172, 17, 164, 7, 130, 177, 16, 62, 229, 129, 207, 84, 153, 109, 250, 234, 115, 98, 92, 130, 5, 26, 40, 136, 32, 87, 83, 84, 186, 128, 58, 156, 89, 177, 209, 91, 26, 19, 206, 173, 207, 193, 125, 235, 19, 243, 78, 91, 180, 99, 142, 5, 101, 108, 168, 43, 38, 137, 68, 78, 242, 241, 183, 72, 209, 94, 50, 239, 46, 169, 37, 66, 120, 167, 47, 237, 100, 101, 248, 156, 249, 99, 57, 207, 135, 74, 63, 116, 175, 191, 43, 99, 163, 60, 91, 65, 218, 75, 166, 90, 93, 187, 89, 209, 71, 22, 83, 216, 3, 178, 76, 133, 234, 95, 166, 87, 1, 234, 216, 111, 246, 160, 170, 161, 210, 181, 23, 70, 249, 223, 125, 107, 67, 132, 52, 125, 144, 128, 88, 60, 47, 210, 242, 5, 5, 80, 199, 212, 174, 163, 1, 244, 235, 240, 198, 27, 154, 5, 82, 245, 33, 139, 105, 113, 185, 7, 190, 82, 180, 249, 34, 220, 166, 218, 134, 207, 26, 7, 111, 206, 22, 48, 240, 10, 173, 213, 120, 141, 142, 16, 206, 250, 121, 141, 100, 216, 97, 118, 229, 60, 213, 86, 154, 52, 68, 161, 135, 243, 28, 134, 4, 79, 194, 231, 232, 159, 173, 109, 155, 242, 9, 94, 94, 36, 153, 114, 246, 172, 41, 160, 106, 214, 246, 154, 110, 79, 249, 189, 134, 0, 224, 181, 176, 127, 163, 12, 88, 92, 21, 99, 143, 224, 143, 132, 172, 9, 93, 126, 214, 26, 121, 186, 218, 156, 34, 161, 208, 7, 113, 211, 3, 233, 4, 150, 108, 123, 202, 30, 134, 78, 210, 207, 80, 157, 75, 119, 174, 63, 212, 59, 79, 145, 10, 229, 45, 166, 204, 41, 95, 63, 80, 174, 4, 106, 119, 145, 19, 100, 83, 112, 12, 118, 171, 13, 243, 144, 119, 62, 62, 84, 144, 214, 85, 227, 93, 223, 53, 147, 50, 104, 226, 17, 255, 130, 11, 39, 24, 35, 16, 114, 0, 83, 3, 159, 148, 92, 129, 241, 70, 167, 241, 99, 251, 127, 132, 64, 225, 128, 228, 197, 33, 183, 166, 39, 219, 62, 198, 192, 195, 152, 250, 8, 99, 83, 94, 98, 199, 19, 62, 148, 30, 136, 29, 34, 130, 212, 112, 197, 154, 27, 34, 44, 61, 59, 130, 106, 167, 125, 70, 200, 121, 103, 111, 1, 83, 61, 72, 65, 84, 80, 234, 102, 232, 245, 238, 137, 32, 143, 172, 1, 195, 151, 171, 113, 233, 57, 65, 242, 242, 25, 238, 188, 8, 103, 93, 122, 251, 216, 145, 69, 67, 100, 196, 199, 173, 132, 247, 209, 180, 133, 136, 201, 126, 88, 127, 71, 219, 105, 170, 158, 37, 70, 113, 11, 25, 244, 249, 153, 244, 143, 202, 68, 19, 49, 151, 237, 242, 22, 11, 153, 68, 166, 197, 138, 104, 172, 46, 195, 239, 234, 192, 57, 178, 178, 104, 161, 58, 9, 22, 238, 155, 128, 188, 112, 212, 45, 159, 248, 38, 216, 105, 153, 24, 135, 252, 153, 193, 36, 52, 186, 118, 71, 109, 237, 129, 55, 199, 126, 81, 144, 186, 34, 28, 30, 74, 41, 205, 36, 183, 68, 89, 175, 122, 190, 73, 140, 190, 87, 90, 101, 220, 59, 125, 129, 87, 128, 125, 32, 14, 50, 222, 204, 196, 212, 136, 135, 110, 63, 152, 123, 85, 141, 103, 160, 193, 55, 32, 150, 77, 248, 119, 241, 195, 16, 2, 127, 131, 144, 185, 32, 106, 16, 65, 63, 32, 214, 120, 21, 118, 40, 41, 208, 218, 108, 245, 114, 146, 35, 199, 197, 14, 105, 163, 125, 1, 75, 14, 219, 205, 180, 203, 190, 0, 201, 150, 115, 222, 241, 68, 51, 45, 57, 40, 64, 244, 10, 196, 235, 154, 133, 62, 146, 218, 153, 166, 210, 33, 172, 5, 20, 14, 150, 28, 203, 240, 220, 179, 175, 138, 229, 172, 153, 162, 230, 36, 211, 161, 19, 32, 178, 84, 59, 1, 154, 212, 185, 97, 163, 131, 44, 153, 2, 42, 185, 239, 192, 172, 253, 40, 21, 75, 174, 117, 249, 73, 123, 239, 116, 202, 253, 224, 192, 118, 7, 120, 209, 159, 234, 53, 192, 74, 206, 41, 134, 87, 224, 171, 19, 112, 136, 27, 202, 178, 195, 192, 89, 248, 169, 184, 160, 83, 142, 47, 199, 133, 52, 77, 50, 50, 134, 24, 134, 205, 135, 43, 179, 16, 17, 35, 188, 60, 190, 8, 92, 166, 97, 85, 59, 118, 36, 99, 175, 120, 2, 167, 142, 30, 245, 172, 99, 249, 66, 205, 253, 89, 23, 199, 80, 162, 67, 152, 7, 17, 176, 19, 113, 132, 181, 38, 137, 141, 196, 167, 229, 254, 190, 176, 83, 252, 97, 185, 52, 64, 15, 198, 216, 36, 20, 154, 142, 42, 113, 45, 106, 97, 40, 65, 72, 26, 158, 15, 10, 76, 156, 63, 83, 27, 190, 200, 226, 10, 236, 0, 151, 76, 192, 92, 6, 233, 155, 29, 124, 235, 111, 72, 96, 136, 194, 245, 129, 42, 182, 32, 16, 13, 173, 66, 69, 152, 69, 113, 241, 232, 172, 238, 39, 241, 10, 72, 29, 61, 129, 0, 223, 134, 59, 230, 167, 85, 202, 205, 205, 153, 79, 160, 97, 83, 58, 199, 180, 167, 117, 190, 89, 158, 183, 187, 4, 244, 235, 216, 160, 125, 6, 6, 82, 10, 218, 30, 117, 88, 47, 217, 16, 68, 197, 203, 119, 216, 98, 141, 91, 149, 203, 153, 16, 82, 187, 130, 157, 71, 237, 228, 92, 122, 140, 48, 58, 233, 121, 166, 11, 178, 151, 14, 189, 123, 255, 4, 66, 56, 121, 175, 239, 55, 229, 206, 97, 192, 109, 77, 195, 46, 124, 198, 175, 211, 144, 185, 157, 207, 161, 94, 143, 91, 62, 234, 148, 106, 113, 74, 100, 148, 89, 166, 132, 7, 180, 72, 143, 33, 198, 170, 87, 41, 194, 253, 26, 230, 10, 247, 115, 129, 115, 122, 168, 45, 21, 195, 140, 227, 218, 156, 105, 142, 163, 62, 25, 223, 27, 59, 134, 199, 206, 22, 115, 57, 63, 54, 49, 136, 220, 239, 204, 143, 107, 223, 205, 111, 216, 181, 101, 251, 138, 55, 166, 45, 251, 87, 9, 131, 162, 110, 125, 21, 191, 2, 173, 11, 244, 193, 73, 255, 237, 180, 146, 206, 65, 254, 197, 203, 140, 108, 175, 180, 175, 78, 172, 88, 253, 15, 248, 202, 111, 64, 109, 206, 95, 34, 5, 234, 116, 205, 187, 73, 228, 125, 198, 11, 80, 152, 33, 86, 5, 163, 169, 98, 77, 3, 248, 240, 210, 114, 183, 144, 234, 115, 8, 55, 126, 147, 59, 240, 167, 130, 103, 175, 161, 179, 98, 180, 56, 46, 60, 128, 167, 117, 194, 125, 127, 184, 207, 186, 2, 5, 133, 33, 211, 228, 165, 149, 255, 3, 146, 167, 44, 8, 236, 45, 170, 183, 195, 170, 10, 137, 245, 248, 162, 73, 237, 151, 28, 186, 45, 108, 26, 157, 193, 169, 73, 43, 192, 15, 228, 203, 125, 217, 161, 149, 178, 53, 144, 123, 174, 128, 110, 158, 180, 12, 190, 223, 52, 50, 205, 133, 205, 62, 213, 209, 127, 45, 85, 153, 246, 176, 40, 161, 222, 145, 111, 96, 87, 225, 214, 89, 73, 175, 223, 29, 60, 213, 241, 147, 77, 244, 198, 141, 38, 125, 76, 42, 245, 119, 214, 112, 18, 171, 73, 202, 106, 160, 7, 142, 167, 47, 5, 62, 203, 182, 213, 6, 246, 156, 6, 128, 202, 145, 207, 207, 73, 191, 133, 227, 105, 218, 212, 86, 38, 34, 27, 12, 50, 171, 107, 114, 190, 64, 145, 126, 123, 123, 93, 51, 147, 25, 212, 60, 221, 222, 97, 46, 4, 80, 75, 57, 177, 251, 117, 95, 164, 110, 71, 90, 20, 94, 173, 171, 172, 40, 215, 131, 235, 195, 37, 61, 119, 194, 13, 173, 53, 153, 80, 16] - ], - "segmentSize": null - }, - { - "encrypted": [ - [85, 72, 82, 219, 156, 238, 134, 78, 231, 93, 234, 188, 237, 118, 161, 245, 87, 128, 53, 140, 153, 144, 15, 164, 226, 58, 176, 176, 48, 160, 212, 147, 31, 193, 198, 34, 178, 141, 172, 24, 114, 135, 201, 247, 231, 76, 113, 132, 16, 227, 181, 15, 216, 165, 71, 160, 37, 177, 64, 149, 183, 188, 30, 68, 232, 49, 40, 140, 125, 188, 235, 2, 80, 105, 130, 176, 3, 119, 8, 25, 185, 102, 112, 73, 16, 80, 246, 210, 168, 189, 155, 230, 224, 228, 79, 225, 73, 120, 88, 93, 253, 150, 6, 218, 117, 200, 164, 236, 151, 72, 85, 46, 185, 70, 19, 21, 52, 220, 244, 13, 74, 246, 93, 25, 45, 200, 118, 128, 144, 123, 238, 52, 41, 131, 115, 110, 185, 78, 252, 90, 210, 213, 133, 1, 99, 227, 20, 82, 66, 156, 253, 63, 15, 50, 50, 106, 113, 16, 1, 149, 215, 148, 61, 90, 228, 94, 108, 189, 40, 231, 72, 76, 229, 238, 244, 148, 119, 189, 238, 172, 143, 166, 235, 252, 19, 137, 104, 121, 205, 47, 201, 209, 140, 69, 82, 246, 200, 99, 129, 201, 126, 202, 99, 231, 206, 83, 55, 254, 222, 245, 249, 92, 209, 46, 212, 234, 225, 219, 126, 250, 111, 254, 156, 177, 6, 241, 214, 130, 220, 135, 145, 177, 23, 206, 114, 230, 56, 196, 200, 246, 81, 100, 163, 119, 85, 218, 162, 14, 113, 113, 76, 9, 182, 37, 102, 24, 75, 61, 107, 60, 191, 46, 0, 244, 248, 16, 144, 153, 144, 119, 123, 146, 66, 193, 88, 45, 28, 116, 96, 186, 131, 26, 56, 45, 219, 7, 80, 173, 34, 20, 110, 246, 80, 70, 164, 217, 69, 4, 227, 128, 243, 160, 1, 154, 152, 249, 126, 107, 99, 120, 55, 240, 243, 126, 44, 110, 124, 227, 92, 89, 16, 23, 225, 98, 29, 242, 215, 213, 118, 110, 213, 210, 108, 154, 69, 70, 171, 90, 251, 214, 97, 187, 25, 235, 106, 158, 247, 212, 252, 224, 139, 57, 132, 130, 104, 59, 82, 39, 153, 119, 109, 84, 248, 5, 150, 139, 17, 93, 246, 139, 174, 79, 238, 148, 11, 61, 159, 84, 171, 92, 112, 196, 8, 36, 204, 90, 247, 165, 14, 59, 3, 17, 97, 73, 85, 109, 1, 173, 61, 18, 138, 90, 148, 186, 84, 71, 113, 59, 30, 30, 180, 35, 245, 151, 240, 22, 121, 114, 38, 84, 158, 218, 39, 143, 242, 186, 142, 86, 255, 202, 85, 166, 81, 239, 252, 155, 221, 210, 132, 25, 130, 16, 196, 253, 132, 253, 23, 60, 244, 191, 182, 21, 104, 67, 250, 35, 48, 244, 208, 89, 225, 219, 207, 75, 1, 47, 12, 5, 26, 20, 33, 101, 63, 74, 128, 39, 68, 215, 173, 32, 18, 192, 252, 100, 190, 79, 249, 115, 143, 97, 80, 91, 109, 119, 61, 255, 183, 24, 156, 212, 88, 72, 203, 249, 100, 178, 69, 104, 211, 39, 246, 166, 161, 180, 202, 73, 219, 51, 189, 123, 25, 160, 237, 236, 130, 160, 148, 146, 6, 254, 100, 101, 252, 77, 33, 215, 98, 219, 175, 17, 192, 249, 169, 112, 141, 254, 142, 46, 40, 16, 139, 209, 193, 7, 27, 32, 118, 152, 189, 170, 207, 67, 32, 192, 29, 177, 228, 119, 60, 216, 233, 178, 44, 118, 68, 170, 129, 34, 157, 53, 209, 35, 186, 227, 101, 84, 66, 235, 31, 174, 168, 9, 78, 105, 173, 157, 194, 178, 251, 170, 96, 50, 108, 156, 86, 121, 118, 81, 62, 117, 236, 46, 102, 236, 33, 232, 218, 125, 165, 37, 188, 52, 111, 78, 28, 65, 247, 200, 98, 57, 217, 69, 245, 25, 255, 210, 8, 235, 111, 100, 109, 182, 88, 20, 170, 185, 75, 248, 188, 83, 62, 60, 150, 183, 58, 108, 181, 79, 53, 156, 71, 77, 109, 214, 164, 176, 248, 211, 223, 219, 103, 206, 68, 128, 102, 84, 105, 160, 89, 95, 161, 106, 83, 105, 2, 140, 194, 39, 184, 157, 36, 106, 193, 245, 214, 53, 73, 148, 88, 90, 2, 43, 177, 22, 239, 181, 224, 193, 211, 210, 112, 97, 185, 79, 6, 82, 59, 192, 184, 48, 45, 147, 192, 229, 57, 2, 26, 151, 165, 233, 255, 97, 189, 105, 3, 59, 206, 199, 249, 153, 81, 197, 72, 70, 91, 192, 181, 114, 158, 97, 94, 110, 133, 129, 133, 144, 207, 214, 157, 81, 166, 180, 236, 57, 195, 99, 120, 158, 62, 64, 236, 224, 155, 135, 167, 155, 161, 118, 238, 130, 243, 237, 190, 234, 15, 171, 78, 62, 28, 215, 30, 73, 214, 189, 189, 190, 201, 146, 189, 117, 171, 131, 154, 118, 144, 189, 143, 24, 165, 249, 156, 188, 161, 242, 16, 204, 33, 205, 166, 208, 251, 10, 140, 41, 101, 193, 54, 188, 241, 233, 113, 127, 53, 172, 134, 6, 234, 97, 226, 117, 85, 237, 165, 181, 242, 253, 198, 96, 92, 20, 31, 118, 117, 91, 37, 149, 134, 188, 55, 167, 141, 221, 11, 250, 194, 23, 14, 103, 248, 30, 251, 233, 152, 159, 222, 185, 26, 94, 87, 22, 3, 223, 15, 71, 112, 99, 179, 79, 194, 110, 20, 129, 180, 10, 34, 185, 196, 227, 75, 13, 24, 73, 62, 231, 162, 176, 188, 122, 28, 27, 123, 215, 11, 164, 49, 75, 162, 123, 233, 219, 104, 177, 53, 74, 212, 72, 128, 227, 249, 37, 169, 114, 170, 68, 226, 170, 53, 209, 214, 212, 226, 223, 18, 151, 181, 240, 121, 16, 162, 230, 81, 26, 148, 104, 160, 218, 242, 210, 118, 242, 132, 192, 140, 129, 237, 222, 190, 193, 212, 105, 221, 113, 73, 87, 223, 219, 61, 184, 177, 36, 175, 80, 178, 186, 221, 128, 106, 246, 227, 110, 22, 235, 209, 11, 77, 164, 202, 112, 113, 38, 101, 55, 149, 54, 119, 51, 78, 211, 155, 92, 239, 204, 27, 213, 195, 57, 119, 19, 206, 254, 242, 128, 22, 174, 99, 255, 70, 122, 65, 102, 222, 34, 109, 112, 37, 21, 41, 193, 29, 250, 109, 36, 39, 102, 8, 171, 51, 19, 160, 163, 199, 221, 144, 45, 130, 199, 64, 97, 237, 232, 132, 38, 156, 196, 236, 20, 226, 101, 136, 217, 80, 168, 194, 241, 152, 247, 185, 169, 214, 72, 187, 240, 61, 131, 159, 59, 136, 157, 124, 18, 119, 89, 177, 191, 178, 40, 208, 145, 244, 107, 114, 191, 207, 30, 235, 249, 35, 208, 212, 53, 68, 45, 49, 170, 28, 159, 36, 27, 31, 96, 107, 218, 107, 227, 182, 170, 218, 31, 220, 196, 31, 173, 9, 59, 31, 26, 234, 173, 2, 113, 94, 216, 207, 10, 90, 242, 232, 24, 198, 216, 147, 35, 5, 196, 224, 243, 90, 156, 172, 167, 184, 93, 231, 200, 193, 186, 37, 233, 122, 143, 132, 72, 182, 31, 169, 126, 151, 213, 64, 52, 162, 49, 172, 112, 200, 42, 68, 27, 4, 81, 58, 72, 14, 231, 233, 49, 224, 254, 18, 112, 235, 95, 94, 18, 121, 204, 210, 50, 212, 58, 42, 104, 12, 187, 39, 216, 62, 137, 142, 83, 66, 34, 139, 188, 70, 157, 141, 218, 157, 47, 176, 180, 64, 66, 240, 199, 73, 212, 155, 193, 104, 145, 111, 214, 85, 94, 196, 36, 252, 233, 237, 36, 19, 241, 88, 111, 133, 47, 231, 161, 14, 180, 12, 12, 151, 142, 200, 211, 208, 175, 14, 148, 68, 203, 65, 107, 13, 153, 120, 103, 62, 0, 188, 119, 77, 129, 249, 194, 131, 168, 224, 170, 81, 101, 18, 95, 41, 220, 245, 230, 250, 166, 9, 4, 80, 28, 191, 180, 151, 222, 37, 38, 163, 128, 17, 237, 248, 33, 230, 216, 168, 115, 51, 100, 155, 225, 143, 147, 56, 251, 60, 104, 164, 253, 177, 141, 117, 61, 170, 219, 190, 54, 16, 24, 195, 95, 164, 87, 110, 62, 77, 137, 95, 140, 158, 235, 29, 208, 239, 161, 230, 175, 212, 25, 154, 235, 235, 175, 34, 73, 242, 90, 203, 126, 11, 142, 229, 204, 213, 189, 168, 41, 15, 205, 89, 28, 24, 183, 253, 72, 158, 152, 184, 212, 242, 251, 68, 90, 176, 61, 244, 150, 134, 198, 65, 154, 21, 17, 156, 6, 45, 114, 127, 82, 196, 60, 147, 185, 87, 35, 93, 25, 111, 109, 225, 62, 91, 194, 91, 216, 148, 50, 77, 115, 128, 71, 40, 209, 107, 180, 196, 188, 5, 126, 34, 245, 201, 144, 35, 175, 64, 8, 148, 164, 54, 253, 218, 155, 201, 15, 138, 125, 207, 42, 191, 102, 30, 191, 137, 16, 15, 39, 171, 145, 153, 238, 51, 9, 118, 128, 198, 137, 226, 90, 137, 194, 32, 237, 170, 234, 99, 109, 168, 232, 111, 193, 221, 206, 254, 219, 205, 179, 103, 222, 164, 21, 163, 198, 109, 19, 252, 176, 35, 125, 189, 106, 45, 249, 127, 28, 252, 8, 91, 33, 239, 213, 140, 178, 132, 240, 22, 93, 53, 85, 59, 213, 133, 117, 235, 170, 34, 241, 85, 14, 5, 195, 103, 133, 43, 225, 218, 154, 235, 219, 246, 23, 174, 125, 232, 130, 195, 54, 205, 148, 51, 36, 114, 137, 196, 185, 143, 127, 167, 53, 224, 79, 248, 227, 122, 78, 225, 110, 60, 225, 49, 85, 59, 2, 14, 113, 83, 88, 206, 139, 87, 46, 204, 200, 175, 217, 253, 15, 214, 211, 49, 167, 117, 215, 251, 238, 183, 146, 11, 148, 24, 220, 26, 39, 70, 129, 4, 211, 141, 58, 175, 219, 47, 31, 234, 6, 25, 95, 200, 193, 33, 39, 108, 188, 188, 50, 17, 130, 152, 39, 9, 67, 151, 199, 77, 99, 182, 240, 19, 219, 230, 12, 84, 118, 62, 232, 245, 102, 218, 77, 83, 215, 116, 39, 40, 97, 198, 105, 196, 243, 163, 136, 116, 128, 159, 18, 153, 118, 88, 165, 185, 90, 242, 55, 94, 106, 161, 209, 49, 119, 110, 95, 60, 56, 118, 252, 58, 19, 154, 170, 152, 13, 168, 18, 183, 74, 77, 89, 228, 138, 181, 132, 204, 98, 107, 117, 23, 67, 109, 233, 16, 201, 195, 215, 134, 19, 67, 154, 140, 225, 234, 216, 1, 236, 47, 143, 216, 128, 80, 98, 152, 48, 116, 238, 179, 212, 96, 124, 171, 37, 222, 152, 74, 92, 218, 176, 19, 238, 194, 34, 95, 223, 136, 81, 18, 104, 89, 116, 34, 125, 114, 214, 131, 80, 70, 245, 167, 203, 174, 230, 67, 165, 179, 133, 30, 69, 199, 150, 44, 123, 27, 172, 117, 250, 141, 78, 76, 74, 129, 7, 204, 129, 222, 144, 54, 240, 204, 58, 199, 75, 72, 105, 166, 236, 198, 222, 187, 198, 200, 196, 98, 211, 22, 112, 27, 251, 51, 117, 65, 161, 206, 30, 253, 3, 158, 108, 207, 218, 107, 188, 215, 191, 47, 10, 56, 13, 220, 77, 6, 57, 181, 118, 113, 32, 143, 236, 155, 78, 60, 117, 247, 235, 160, 40, 109, 137, 199, 112, 27, 200, 145, 68, 37, 227, 202, 105, 69, 119, 64, 146, 237, 196, 77, 45, 77, 140, 248, 20, 222, 105, 251, 148, 11, 89, 126, 41, 80, 49, 32, 108, 25, 251, 145, 152, 87, 253, 167, 18, 4, 56, 89, 42, 206, 98, 112, 142, 152, 28, 49, 123, 72, 182, 178, 86, 230, 222, 100, 144, 87, 59, 74, 159, 19, 148, 50, 199, 104, 251, 159, 82, 234, 253, 139, 41, 14, 103, 209, 17, 90, 29, 151, 33, 175, 132, 210, 119, 86, 201, 123, 227, 61, 208, 96, 152, 151, 34, 222, 97, 248, 45, 105, 226, 49, 194, 93, 215, 92, 41, 137, 86, 86, 53, 81, 118, 98, 85, 51, 109, 191, 96, 191, 109, 208, 72, 53, 90, 35, 45, 180, 55, 52, 122, 97, 229, 229, 117, 95, 105, 149, 208, 175, 234, 15, 77, 81, 11, 104, 203, 216, 24, 209, 10, 24, 83, 129, 184, 89, 242, 171, 29, 67, 162, 203, 68, 198, 50, 88, 215, 109, 126, 183, 8, 92, 43, 50, 159, 225, 174, 140, 105, 8, 26, 78, 171, 42, 224, 206, 117, 107, 43, 110, 141, 165, 62, 100, 82, 151, 90, 7, 247, 68, 250, 72, 237, 146, 134, 52, 188, 147, 4, 199, 34, 215, 4, 234, 224, 183, 103, 3, 157, 29, 97, 255, 11, 155, 48, 87, 183, 252, 154, 91, 36, 73, 125, 29, 226, 239, 219, 90, 240, 79, 115, 119, 236, 240, 151, 192, 208, 177, 59, 138, 129, 63, 201, 57, 170, 180, 29, 22, 150, 49, 187, 133, 254, 228, 6, 234, 117, 30, 40, 117, 13, 131, 245, 130, 237, 119, 193, 207, 164, 162, 57, 83, 76, 45, 80, 190, 17, 77, 6, 123, 185, 2, 161, 221, 241, 171, 13, 80, 174, 142, 7, 223, 72, 179, 181, 204, 131, 72, 225, 186, 212, 67, 75, 13, 148, 90, 88, 254, 180, 220, 71, 228, 230, 130, 139, 217, 215, 35, 207, 38, 54, 78, 9, 154, 106, 98, 91, 49, 86, 114, 173, 10, 9, 113, 156, 143, 81, 123, 181, 178, 237, 52, 93, 77, 195, 130, 70, 238, 242, 185, 204, 225, 195, 247, 66, 29, 151, 243, 34, 95, 173, 59, 184, 118, 84, 2, 77, 29, 170, 6, 144, 138, 157, 159, 84, 23, 249, 43, 104, 168, 2, 15, 182, 177, 7, 29, 16, 166, 107, 222, 4, 224, 90, 17, 164, 184, 106, 231, 166, 211, 35, 54, 18, 76, 68, 104, 187, 177, 23, 214, 44, 1, 62, 130, 216, 19, 42, 161, 1, 51, 117, 42, 184, 92, 210, 63, 243, 77, 109, 41, 116, 216, 234, 123, 153, 1, 173, 27, 167, 200, 103, 39, 236, 179, 62, 55, 35, 144, 191, 243, 21, 254, 126, 66, 53, 25, 236, 168, 83, 46, 222, 47, 233, 154, 120, 199, 240, 54, 204, 122, 19, 157, 198, 157, 117, 63, 34, 11, 224, 168, 31, 49, 241, 134, 233, 239, 38, 142, 93, 15, 101, 183, 56, 53, 135, 173, 67, 146, 11, 41, 228, 167, 18, 226, 45, 117, 182, 64, 249, 185, 70, 241, 182, 253, 24, 219, 57, 120, 174, 101, 76, 4, 50, 147, 11, 127, 213, 160, 156, 82, 223, 210, 87, 140, 39, 66, 54, 206, 131, 118, 11, 86, 221, 234, 72, 42, 219, 23, 163, 133, 173, 2, 95, 51, 120, 84, 242, 192, 99, 34, 9, 175, 59, 35, 1, 234, 107, 47, 131, 242, 120, 245, 26, 209, 78, 26, 112, 174, 31, 240, 239, 43, 178, 97, 57, 66, 109, 223, 245, 239, 24, 64, 22, 183, 163, 191, 83, 166, 246, 250, 86, 17, 89, 221, 18, 172, 237, 169, 65, 175, 253, 215, 158, 237, 199, 100, 253, 218, 217, 186, 162, 24, 222, 152, 177, 34, 98, 96, 77, 178, 36, 4, 121, 233, 156, 48, 43, 171, 98, 229, 100, 124, 190, 0, 97, 38, 99, 71, 68, 128, 6, 112, 204, 54, 187, 71, 130, 155, 109, 133, 148, 85, 107, 103, 153, 97, 247, 106, 93, 251, 123, 94, 8, 76, 8, 140, 12, 221, 76, 219, 89, 56, 0, 56, 159, 92, 56, 54, 149, 165, 241, 140, 230, 202, 118, 215, 102, 5, 15, 70, 68, 38, 184, 168, 178, 105, 115, 73, 247, 188, 9, 0, 92, 60, 55, 2, 249, 206, 210, 126, 9, 207, 121, 67, 135, 158, 171, 19, 74, 41, 203, 244, 133, 47, 254, 234, 27, 85, 189, 96, 216, 201, 150, 59, 70, 58, 220, 86, 227, 69, 49, 53, 204, 73, 2, 223, 223, 85, 97, 33, 223, 62, 95, 22, 85, 196, 4, 215, 94, 64, 14, 28, 103, 220, 160, 102, 156, 134, 249, 121, 244, 80, 23, 240, 31, 253, 183, 230, 31, 144, 175, 193, 221, 82, 79, 168, 203, 203, 143, 182, 173, 252, 171, 196, 231, 175, 62, 89, 81, 100, 175, 45, 236, 170, 211, 82, 254, 15, 22, 18, 220, 116, 154, 211, 88, 163, 6, 255, 101, 181, 93, 113, 252, 172, 56, 57, 46, 112, 208, 230, 218, 240, 142, 120, 90, 149, 180, 20, 145, 184, 186, 41, 238, 55, 142, 245, 101, 181, 22, 12, 180, 255, 35, 187, 115, 109, 112, 160, 87, 229, 177, 25, 252, 0, 131, 75, 12, 235, 50, 244, 159, 26, 22, 66, 206, 200, 65, 226, 136, 133, 125, 55, 67, 199, 147, 97, 154, 226, 243, 152, 129, 194, 77, 195, 71, 176, 249, 4, 153, 110, 172, 105, 188, 86, 151, 86, 126, 1, 158, 34, 75, 254, 94, 200, 143, 24, 162, 148, 49, 146, 196, 128, 19, 48, 124, 159, 222, 22, 223, 62, 228, 1, 46, 238, 175, 103, 237, 49, 249, 116, 120, 68, 176, 139, 79, 204, 207, 127, 235, 193, 203, 24, 199, 117, 232, 194, 34, 208, 73, 195, 120, 209, 3, 142, 67, 100, 139, 85, 61, 60, 117, 192, 151, 174, 255, 224, 8, 242, 10, 195, 251, 198, 96, 245, 241, 164, 214, 73, 74, 157, 158, 13, 132, 148, 26, 56, 38, 81, 68, 187, 200, 136, 97, 223, 232, 129, 110, 125, 208, 245, 249, 38, 240, 255, 227, 71, 56, 160, 226, 9, 73, 208, 78, 69, 19, 195, 251, 236, 232, 107, 94, 17, 98, 92, 36, 40, 201, 51, 4, 31, 186, 185, 47, 202, 144, 17, 126, 246, 69, 87, 39, 19, 207, 150, 234, 25, 58, 115, 98, 133, 87, 24, 14, 215, 120, 8, 2, 37, 104, 187, 212, 82, 108, 32, 235, 205, 217, 13, 170, 250, 99, 51, 75, 139, 235, 198, 241, 206, 16, 83, 234, 168, 225, 40, 243, 67, 61, 220, 84, 129, 67, 194, 24, 213, 194, 23, 168, 15, 46, 249, 220, 36, 70, 25, 46, 94, 211, 254, 150, 217, 6, 110, 214, 178, 95, 154, 215, 248, 205, 78, 2, 241, 177, 65, 204, 109, 2, 94, 87, 198, 32, 19, 6, 25, 147, 253, 234, 201, 235, 205, 40, 138, 216, 5, 78, 112, 96, 53, 211, 2, 49, 63, 203, 125, 199, 167, 3, 149, 22, 73, 24, 252, 32, 16, 108, 187, 169, 11, 71, 219, 83, 24, 100, 216, 147, 143, 56, 151, 206, 126, 14, 192, 174, 58, 23, 62, 212, 229, 73, 245, 1, 231, 130, 252, 210, 211, 66, 68, 205, 29, 204, 143, 33, 255, 70, 79, 39, 160, 144, 86, 236, 120, 6, 1, 128, 58, 55, 90, 103, 160, 87, 239, 101, 92, 175, 68, 125, 209, 152, 217, 201, 179, 21, 133, 57, 215, 83, 16, 114, 198, 91, 179, 172, 71, 70, 171, 143, 212, 236, 154, 156, 158, 169, 21, 96, 218, 145, 20, 225, 29, 118, 238, 17, 247, 1, 100, 175, 180, 179, 176, 110, 97, 146, 12, 113, 1, 143, 122, 22, 89, 2, 240, 8, 191, 109, 248, 240, 138, 179, 183, 126, 133, 206, 59, 81, 178, 197, 24, 77, 167, 131, 213, 26, 93, 242, 229, 222, 102, 164, 219, 51, 54, 26, 231, 150, 171, 5, 1, 164, 71, 114, 103, 116, 238, 175, 140, 50, 139, 227, 211, 142, 175, 102, 74, 143, 152, 27, 47, 255, 78, 175, 139, 39, 157, 174, 190, 242, 234, 76, 98, 34, 70, 253, 165, 127, 231, 114, 228, 207, 199, 222, 118, 246, 135, 206, 204, 188, 0, 161, 86, 121, 65, 52, 181, 59, 211, 207, 55, 57, 197, 214, 89, 21, 183, 81, 193, 250, 229, 162, 54, 93, 126, 81, 191, 110, 111, 63, 226, 12, 102, 78, 62, 183, 162, 67, 246, 129, 206, 146, 52, 139, 188, 164, 122, 16, 37, 58, 231, 122, 177, 215, 120, 200, 74, 123, 57, 253, 127, 40, 166, 26, 22, 139, 184, 182, 16, 76, 227, 19, 156, 120, 254, 97, 12, 162, 201, 10, 142, 239, 153, 155, 246, 240, 140, 68, 57, 130, 76, 183, 213, 233, 244, 48, 124, 103, 18, 136, 45, 65, 195, 56, 61, 172, 40, 51, 80, 0, 52, 153, 123, 189, 66, 3, 175, 168, 208, 73, 185, 67, 133, 136, 97, 87, 104, 22, 34, 157, 31, 116, 211, 106, 126, 102, 157, 210, 82, 179, 44, 16, 1, 43, 251, 71, 14, 252, 152, 241, 44, 66, 15, 163, 220, 28, 111, 213, 55, 121, 122, 87, 174, 160, 232, 167, 246, 40, 4, 67, 12, 111, 9, 240, 177, 190, 68, 127, 36, 101, 212, 135, 241, 151, 57, 139, 49, 176, 246, 107, 30, 154, 84, 29, 120, 184, 173, 240, 128, 223, 78, 22, 11, 146, 65, 110, 248, 185, 140, 3, 96, 30, 132, 183, 194, 243, 88, 247, 212, 249, 27, 88, 230, 12, 56, 255, 114, 116, 26, 183, 3, 88, 179, 242, 231, 115, 80, 151, 183, 48, 127, 147, 46, 180, 141, 144, 185, 154, 105, 74, 49, 68, 240, 67, 93, 73, 90, 61, 91, 202, 217, 1, 250, 170, 196, 219, 241, 175, 81, 43, 86, 246, 236, 94, 202, 20, 0, 33, 204, 7, 66, 142, 48, 151, 91, 46, 185, 203, 16, 218, 249, 39, 155, 248, 86, 29, 202, 155, 56, 169, 22, 196, 149, 197, 143, 128, 42, 139, 240, 142, 155, 136, 77, 44, 240, 31, 125, 187, 98, 229, 227, 119, 251, 54, 131, 155, 249, 222, 110, 188, 125, 195, 192, 134, 161, 221, 185, 219, 49, 190, 15, 12, 148, 209, 45, 61, 40, 76, 170, 255, 74, 73, 58, 221, 3, 60, 27, 128, 63, 152, 104, 242, 236, 122, 143, 68, 216, 98, 243, 115, 48, 242, 1, 18, 126, 56, 84, 173, 70, 195, 197, 38, 12, 35, 136, 159, 159, 14, 222, 64, 183, 159, 68, 166, 50, 75, 21, 133, 200, 21, 25, 86, 104, 177, 97, 250, 3, 139, 247, 238, 131, 209, 20, 167, 179, 44, 203, 219, 215, 107, 52, 142, 162, 6, 89, 117, 145, 222, 230, 240, 192, 90, 208, 242, 195, 150, 255, 110, 187, 249, 218, 93, 52, 247, 68, 255, 16, 144, 145, 206, 237, 238, 92, 138, 165, 23, 150, 157, 247, 109, 124, 67, 11, 185, 113, 233, 9, 2, 190, 97, 147, 90, 166, 2, 11, 108, 177, 62, 246, 148, 71, 87, 22, 30, 115, 239, 132, 121, 227, 50, 198, 39, 196, 0, 119, 108, 58, 73, 187, 91, 73, 193, 182, 61, 45, 116, 2, 122, 134, 229, 193, 105, 46, 100, 106, 71, 3, 210, 251, 43, 40, 26, 61, 100, 70, 22, 118, 169, 12, 202, 237, 18, 52, 139, 164, 13, 185, 193, 228, 135, 237, 152, 186, 122, 219, 51, 49, 27, 91, 248, 62, 20, 35, 119, 231, 239, 44, 10, 49, 83, 57, 154, 245, 115, 39, 86, 39, 126, 120, 8, 71, 213, 95, 119, 205, 168, 54, 100, 76, 68, 130, 140, 231, 77, 222, 200, 54, 2, 65, 18, 141, 114, 70, 71, 238, 4, 37, 227, 129, 22, 93, 126, 192, 226, 48, 162, 158, 153, 15, 77, 65, 55, 209, 74, 8, 102, 118, 122, 205, 88, 215, 30, 180, 202, 239, 169, 38, 87, 184, 246, 92, 136, 195, 24, 47, 64, 241, 145, 25, 65, 108, 73, 21, 221, 147, 83, 33, 7, 198, 7, 27, 206, 57, 17, 33, 241, 80, 200, 96, 21, 107, 113, 3, 30, 11, 68, 155, 125, 204, 184, 4, 99, 105, 73, 98, 204, 37, 173, 9, 202, 60, 242, 120, 4, 247, 65, 165, 82, 206, 122, 128, 6, 38, 11, 20, 64, 153, 216, 31, 80, 228, 171, 49, 94, 2, 105, 255, 38, 203, 61, 119, 105, 52, 100, 186, 138, 63, 75, 50, 117, 182, 223, 211, 236, 3, 44, 232, 170, 42, 52, 190, 196, 5, 215, 240, 82, 18, 128, 70, 59, 220, 64, 193, 188, 208, 68, 31, 18, 86, 76, 154, 7, 96, 115, 205, 67, 9, 22, 219, 31, 220, 99, 138, 58, 164, 187, 10, 131, 75, 213, 9, 140, 243, 17, 129, 131, 189, 22, 237, 203, 23, 157, 175, 246, 122, 71, 118, 106, 74, 96, 154, 54, 171, 95, 67, 173, 236, 243, 198, 167, 221, 104, 207, 70, 247, 23, 214, 173, 127, 153, 22, 96, 2, 223, 17, 125, 206, 179, 204, 87, 141, 114, 163, 148, 167, 3, 45, 217, 18, 196, 45, 247, 195, 67, 159, 166, 163, 147, 245, 68, 28, 148, 4, 182, 139, 252, 135, 199, 151, 136, 160, 6, 145, 230, 76, 104, 226, 91, 52, 212, 107, 147, 163, 101, 24, 212, 3, 173, 91, 144, 2, 133, 16, 186, 25, 96, 192, 242, 189, 25, 172, 42, 49, 216, 121, 118, 208, 57, 145, 45, 21, 40, 111, 162, 187, 16, 30, 129, 250, 170, 4, 79, 84, 152, 79, 108, 90, 229, 16, 111, 120, 60, 147, 63, 119, 244, 108, 161, 236, 2, 44, 239, 88, 65, 156, 232, 42, 62, 45, 224, 222, 170, 224, 155, 91, 82, 62, 16, 116, 185, 9, 0, 118, 211, 197, 80, 41, 18, 36, 226, 107, 237, 45, 203, 122, 153, 100, 100, 215, 11, 224, 192, 217, 93, 165, 179, 130, 20, 119, 82, 180, 191, 118, 232, 87, 168, 149, 71, 233, 203, 37, 186, 36, 60, 142, 128, 33, 155, 146, 150, 135, 140, 63, 111, 169, 5, 220, 83, 122, 171, 63, 65, 201, 68, 224, 140, 44, 191, 167, 13, 90, 188, 135, 24, 220, 32, 3, 166, 199, 201, 214, 221, 189, 237, 7, 204, 170, 244, 215, 216, 222, 178, 245, 118, 7, 172, 84, 93, 183, 80, 112, 233, 97, 94, 197, 71, 119, 223, 218, 145, 8, 232, 230, 108, 154, 196, 60, 165, 245, 134, 64, 36, 82, 33, 186, 11, 246, 101, 225, 169, 173, 199, 183, 103, 1, 175, 161, 192, 107, 74, 197, 79, 12, 23, 172, 173, 105, 174, 29, 54, 93, 133, 214, 5, 142, 159, 10, 54, 238, 55, 175, 40, 123, 231, 112, 166, 9, 55, 18, 67, 235, 177, 80, 230, 71, 191, 231, 245, 97, 118, 224, 167, 132, 210, 193, 192, 112, 15, 48, 2, 190, 206, 137, 133, 199, 153, 47, 212, 203, 150, 67, 74, 120, 239, 77, 67, 16, 217, 130, 16, 47, 61, 71, 65, 34, 31, 30, 118, 66, 128, 18, 137, 114, 227, 25, 52, 223, 175, 225, 132, 179, 97, 175, 60, 206, 108, 5, 168, 15, 111, 209, 60, 3, 235, 248, 154, 208, 215, 88, 33, 171, 138, 12, 75, 166, 95, 99, 35, 28, 59, 42, 203, 88, 27, 183, 236, 185, 81, 3, 117, 203, 253, 103, 119, 109, 183, 24, 110, 165, 141, 81, 21, 55, 83, 140, 9, 154, 64, 177, 234, 70, 62, 126, 124, 126, 176, 47, 193, 215, 239, 170, 230, 41, 6, 179, 14, 182, 49, 74, 49, 89, 232, 204, 153, 212, 183, 72, 250, 134, 211, 177, 38, 65, 205, 69, 193, 131, 28, 46, 65, 72, 116, 221, 191, 196, 232, 8, 214, 109, 4, 215, 82, 66, 148, 211, 134, 250, 176, 245, 133, 101, 151, 119, 116, 138, 116, 91, 78, 26, 61, 30, 190, 61, 206, 5, 68, 205, 181, 185, 232, 136, 3, 223, 170, 195, 210, 210, 169, 123, 95, 120, 60, 24, 244, 56, 14, 89, 158, 180, 140, 68, 95, 74, 57, 103, 250, 239, 7, 155, 142, 253, 113, 237, 231, 23, 8, 221, 208, 181, 54, 29, 133, 144, 97, 69, 68, 109, 51, 78, 181, 162, 170, 186, 77, 175, 112, 145, 216, 155, 58, 247, 157, 180, 125, 19, 128, 68, 216, 248, 253, 57, 57, 114, 58, 191, 81, 121, 104, 230, 156, 202, 229, 160, 173, 125, 13, 125, 251, 88, 252, 17, 151, 192, 137, 11, 37, 153, 196, 154, 153, 168, 145, 221, 34, 23, 156, 189, 149, 172, 211, 76, 152, 20, 126, 219, 143, 52, 137, 235, 232, 131, 211, 20, 112, 155, 205, 135, 159, 77, 94, 107, 246, 75, 30, 122, 196, 38, 42, 185, 128, 12, 78, 163, 207, 85, 220, 209, 55, 119, 192, 148, 236, 144, 78, 140, 254, 145, 32, 239, 192, 42, 179, 112, 68, 182, 47, 251, 30, 128, 192, 106, 69, 27, 142, 154, 23, 50, 232, 97, 36, 3, 82, 100, 134, 64, 109, 23, 121, 153, 23, 33, 184, 130, 66, 219, 86, 224, 195, 120, 85, 36, 148, 47, 25, 204, 7, 200, 152, 20, 32, 164, 129, 205, 23, 166, 21, 235, 47, 196, 232, 34, 241, 203, 15, 81, 151, 8, 1, 51, 146, 25, 80, 179, 187, 133, 62, 224, 135, 232, 138, 36, 132, 112, 249, 123, 98, 43, 67, 243, 200, 182, 92, 12, 11, 16, 2, 253, 45, 90, 134, 111, 130, 124, 11, 87, 165, 129, 153, 7, 133, 160, 45, 29, 199, 51, 131, 252, 91, 44, 120, 173, 172, 68, 37, 76, 64, 43, 227, 132, 158, 14, 27, 17, 56, 252, 73, 216, 51, 153, 39, 96, 67, 170, 8, 38, 33, 71, 107, 55, 230, 227, 114, 35, 41, 121, 231, 211, 21, 138, 224, 167, 88, 143, 80, 74, 10, 79, 43, 99, 210, 183, 168, 92, 90, 1, 91, 225, 73, 126, 148, 89, 211, 4, 91, 121, 225, 88, 175, 166, 91, 247, 22, 22, 110, 170, 83, 48, 244, 152, 118, 211, 10, 208, 200, 180, 224, 97, 132, 32, 140, 233, 169, 184, 217, 75, 135, 53, 244, 155, 33, 194, 178, 114, 14, 158, 38, 148, 18, 38, 24, 34, 87, 96, 52, 0, 111, 220, 34, 96, 102, 161, 223, 52, 122, 220, 135, 208, 44, 38, 44, 19, 46, 144, 14, 61, 227, 119, 13, 187, 85, 47, 249, 177, 72, 65, 108, 139, 173, 154, 96, 73, 78, 119, 147, 69, 181, 80, 126, 206, 46, 226, 2, 59, 102, 248, 73, 153, 146, 227, 185, 59, 108, 175, 193, 10, 96, 180, 112, 132, 203, 18, 14, 39, 100, 186, 219, 254, 151, 80, 120, 158, 101, 185, 250, 193, 10, 217, 217, 172, 120, 168, 24, 6, 172, 92, 56, 204, 28, 41, 106, 237, 217, 170, 7, 119, 132, 76, 236, 87, 235, 7, 72, 46, 226, 74, 127, 131, 184, 92, 125, 70, 26, 191, 86, 85, 201, 217, 23, 111, 114, 78, 193, 233, 16, 60, 193, 107, 93, 87, 101, 194, 102, 109, 60, 60, 46, 41, 174, 188, 211, 93, 204, 209, 230, 206, 8, 22, 186, 73, 142, 65, 204, 75, 92, 46, 112, 133, 194, 197, 146, 57, 176, 98, 62, 189, 74, 24, 149, 173, 2, 53, 142, 122, 15, 227, 165, 37, 158, 214, 221, 184, 55, 162, 213, 15, 184, 190, 137, 189, 252, 163, 66, 28, 55, 214, 227, 151, 188, 109, 122, 81, 137, 15, 110, 43, 237, 158, 152, 139, 119, 3, 121, 45, 255, 50, 161, 152, 181, 138, 244, 226, 127, 85, 219, 121, 147, 254, 144, 166, 117, 204, 211, 122, 92, 33, 79, 250, 83, 61, 30, 118, 58, 9, 242, 91, 205, 249, 70, 46, 181, 232, 124, 154, 152, 250, 18, 36, 3, 86, 149, 231, 8, 90, 213, 42, 24, 236, 253, 46, 156, 137, 68, 122, 135, 209, 3, 78, 199, 182, 253, 14, 181, 183, 151, 92, 83, 49, 47, 103, 154, 39, 38, 185, 91, 47, 22, 27, 209, 120, 56, 81, 247, 52, 5, 53, 52, 28, 95, 69, 243, 106, 47, 246, 13, 247, 85, 104, 49, 24, 110, 65, 144, 189, 241, 99, 255, 127, 174, 218, 138, 213, 251, 252, 7, 44, 135, 226, 106, 214, 161, 71, 251, 226, 66, 144, 28, 115, 3, 52, 215, 101, 45, 39, 130, 240, 139, 228, 94, 6, 177, 205, 12, 247, 5, 140, 155, 86, 232, 123, 59, 217, 42, 156, 242, 210, 43, 205, 148, 41, 70, 88, 246, 168, 12, 19, 187, 44, 232, 145, 207, 48, 4, 243, 244, 95, 27, 112, 211, 142, 213, 58, 180, 34, 94, 59, 69, 98, 75, 184, 32, 21, 118, 214, 104, 126, 156, 66, 179, 72, 213, 132, 63, 255, 1, 75, 228, 12, 130, 0, 110, 82, 37, 190, 194, 45, 64, 253, 44, 77, 214, 227, 65, 160, 57, 242, 165, 57, 12, 248, 40, 102, 160, 233, 19, 252, 96, 192, 33, 103, 74, 0, 58, 25, 204, 160, 45, 203, 173, 44, 154, 91, 98, 72, 56, 227, 6, 141, 207, 177, 142, 122, 232, 99, 153, 54, 62, 174, 237, 121, 140, 94, 168, 148, 158, 64, 167, 175, 163, 76, 193, 74, 93, 105, 84, 144, 246, 44, 0, 20, 105, 39, 135, 228, 217, 106, 101, 62, 211, 238, 15, 29, 255, 172, 35, 228, 124, 245, 186, 232, 77, 60, 17, 108, 75, 152, 230, 192, 101, 232, 246, 22, 36, 30, 19, 243, 78, 241, 22, 43, 113, 188, 34, 133, 0, 226, 52, 18, 51, 197, 103, 68, 32, 254, 4, 26, 213, 202, 178, 115, 79, 209, 122, 89, 166, 48, 80, 117, 10, 83, 139, 143, 18, 41, 239, 30, 84, 27, 159, 84, 138, 116, 213, 217, 39, 9, 218, 56, 253, 187, 159, 210, 95, 108, 68, 56, 26, 95, 29, 132, 68, 216, 165, 107, 244, 8, 69, 15, 65, 172, 253, 26, 29, 20, 122, 120, 38, 145, 175, 36, 26, 105, 115, 199, 37, 214, 111, 86, 90, 226, 160, 94, 159, 88, 82, 23, 104, 222, 137, 104, 239, 139, 42, 193, 210, 128, 211, 213, 244, 102, 174, 68, 195, 195, 241, 247, 33, 146, 84, 109, 37, 148, 31, 70, 225, 239, 69, 186, 76, 75, 158, 35, 153, 173, 85, 248, 59, 18, 253, 115, 67, 188, 147, 188, 90, 115, 86, 236, 201, 110, 191, 13, 1, 125, 67, 174, 123, 153, 54, 112, 19, 162, 183, 19, 177, 120, 115, 11, 189, 244, 192, 174, 75, 19, 126, 16, 85, 177, 128, 54, 34, 106, 43, 6, 154, 208, 197, 90, 58, 157, 31, 198, 214, 81, 226, 69, 41, 105, 149, 236, 171, 251, 55, 74, 248, 169, 195, 123, 210, 24, 228, 113, 188, 144, 42, 148, 87, 127, 199, 2, 34, 248, 45, 58, 54, 20, 103, 168, 37, 140, 23, 26, 199, 190, 137, 69, 173, 85, 231, 215, 93, 27, 165, 109, 52, 172, 80, 143, 203, 49, 55, 127, 212, 131, 21, 108, 92, 187, 91, 116, 118, 101, 127, 203, 90, 140, 49, 155, 197, 115, 187, 167, 160, 230, 209, 114, 152, 99, 94, 27, 141, 8, 198, 156, 177, 143, 69, 51, 27, 67, 52, 59, 151, 79, 245, 146, 91, 88, 119, 122, 181, 75, 85, 162, 100, 50, 101, 235, 83, 125, 216, 242, 8, 53, 218, 204, 239, 24, 21, 41, 64, 63, 114, 83, 183, 74, 61, 43, 124, 178, 173, 137, 69, 59, 53, 146, 35, 91, 58, 26, 187, 194, 27, 122, 3, 76, 7, 161, 121, 240, 62, 149, 226, 157, 58, 242, 142, 77, 152, 223, 183, 92, 83, 114, 130, 87, 16, 76, 30, 59, 65, 14, 166, 89, 107, 241, 33, 76, 24, 104, 30, 205, 158, 28, 117, 248, 130, 92, 39, 255, 98, 225, 40, 239, 253, 204, 65, 138, 239, 6, 86, 115, 189, 243, 205, 119, 180, 137, 139, 119, 232, 148, 61, 228, 125, 113, 77, 1, 69, 237, 124, 209, 178, 208, 53, 201, 83, 34, 27, 18, 102, 208, 214, 16, 16, 50, 101, 51, 122, 143, 157, 6, 39, 0, 143, 24, 91, 13, 212, 13, 61, 222, 163, 123, 25, 17, 50, 101, 72, 219, 36, 217, 200, 68, 251, 15, 177, 30, 93, 208, 124, 116, 204, 243, 130, 193, 169, 215, 1, 105, 203, 132, 242, 120, 159, 165, 190, 131, 43, 12, 18, 25, 73, 8, 172, 218, 113, 0, 132, 2, 138, 24, 200, 177, 17, 128, 196, 145, 221, 73, 233, 170, 88, 119, 253, 182, 132, 131, 208, 47, 156, 72, 221, 162, 135, 86, 197, 185, 26, 173, 79, 45, 48, 225, 0, 242, 60, 131, 30, 206, 190, 65, 108, 251, 106, 92, 252, 211, 201, 167, 127, 36, 158, 124, 189, 24, 227, 201, 192, 7, 24, 248, 73, 185, 240, 31, 194, 144, 123, 28, 130, 150, 160, 168, 166, 60, 223, 92, 230, 221, 49, 84, 133, 62, 200, 233, 204, 250, 215, 190, 23, 81, 34, 192, 76, 4, 105, 8, 85, 246, 70, 116, 60, 218, 68, 160, 216, 92, 0, 113, 20, 86, 111, 80, 105, 27, 143, 56, 48, 248, 100, 47, 117, 253, 143, 103, 252, 234, 198, 63, 251, 88, 96, 253, 100, 39, 24, 167, 237, 254, 37, 236, 160, 26, 7, 185, 132, 52, 123, 49, 25, 116, 143, 213, 247, 44, 163, 61, 124, 86, 247, 36, 88, 142, 119, 188, 149, 192, 182, 17, 201, 114, 100, 100, 71, 116, 77, 84, 230, 110, 246, 104, 170, 91, 236, 162, 47, 91, 132, 81, 167, 237, 160, 247, 194, 91, 83, 109, 214, 22, 19, 23, 98, 154, 180, 252, 74, 243, 137, 11, 183, 22, 140, 95, 90, 46, 119, 46, 127, 60, 230, 53, 247, 207, 48, 83, 4, 110, 237, 109, 237, 53, 6, 194, 239, 33, 25, 119, 82, 67, 124, 67, 146, 195, 192, 225, 97, 182, 106, 250, 183, 36, 240, 227, 24, 152, 116, 219, 233, 38, 199, 140, 136, 5, 194, 74, 248, 160, 62, 252, 240, 19, 17, 45, 155, 243, 162, 177, 237, 27, 56, 90, 217, 162, 106, 204, 61, 177, 94, 43, 78, 136, 93, 23, 6, 172, 147, 59, 22, 177, 2, 122, 140, 148, 230, 166, 252, 92, 119, 217, 84, 17, 3, 91, 26, 87, 26, 129, 74, 184, 254, 89, 60, 69, 4, 94, 14, 69, 115, 251, 188, 185, 203, 11, 37, 31, 89, 37, 84, 48, 147, 2, 36, 239, 240, 155, 194, 196, 244, 38, 55, 144, 149, 65, 194, 57, 39, 207, 60, 21, 35, 50, 9, 203, 43, 150, 103, 109, 213, 190, 121, 137, 217, 19, 78, 2, 14, 59, 53, 81, 184, 243, 62, 71, 152, 11, 133, 45, 87, 196, 101, 18, 44, 78, 123, 210, 84, 126, 10, 10, 67, 141, 95, 204, 119, 142, 48, 222, 162, 63, 118, 255, 14, 204, 8, 244, 238, 244, 182, 211, 45, 186, 246, 102, 246, 94, 53, 19, 39, 224, 123, 168, 155, 248, 223, 149, 48, 17, 107, 48, 231, 131, 4, 79, 156, 23, 197, 31, 80, 156, 9, 53, 151, 219, 143, 240, 11, 100, 27, 213, 128, 5, 53, 164, 44, 244, 100, 78, 104, 192, 186, 221, 207, 116, 100, 227, 113, 97, 51, 250, 124, 136, 155, 66, 201, 188, 86, 123, 113, 151, 227, 111, 112, 122, 104, 193, 120, 254, 8, 159, 240, 193, 217, 206, 7, 9, 20, 84, 81, 248, 207, 149, 38, 41, 214, 238, 127, 10, 77, 242, 171, 29, 4, 72, 47, 186, 229, 53, 248, 240, 233, 81, 206, 108, 50, 26, 94, 33, 224, 82, 209, 22, 69, 211, 208, 61, 142, 130, 113, 48, 152, 35, 216, 114, 184, 75, 169, 180, 129, 60, 112, 82, 248, 22, 123, 39, 62, 242, 121, 32, 137, 44, 51, 111, 182, 121, 43, 244, 138, 192, 194, 106, 232, 241, 151, 217, 127, 57, 245, 169, 218, 221, 242, 115, 181, 117, 168, 147, 51, 48, 253, 88, 66, 75, 207, 212, 174, 144, 107, 229, 92, 49, 92, 218, 40, 0, 88, 238, 124, 32, 249, 36, 179, 45, 197, 93, 104, 32, 155, 153, 62, 188, 105, 10, 161, 13, 111, 170, 113, 10, 71, 247, 105, 192, 174, 235, 7, 209, 23, 93, 181, 216, 239, 176, 189, 122, 200, 167, 123, 15, 236, 204, 208, 246, 121, 86, 240, 2, 26, 130, 11, 42, 237, 112, 67, 134, 108, 59, 248, 143, 114, 135, 242, 89, 124, 212, 155, 247, 10, 195, 50, 226, 110, 88, 111, 104, 138, 8, 254, 157, 12, 157, 128, 197, 125, 146, 122, 205, 229, 27, 134, 39, 144, 75, 20, 148, 143, 157, 112, 46, 144, 236, 154, 107, 240, 180, 210, 239, 165, 178, 36, 74, 238, 181, 27, 52, 242, 85, 239, 242, 141, 198, 141, 183, 70, 110, 19, 42, 228, 166, 100, 130, 5, 109, 87, 232, 88, 224, 10, 240, 113, 150, 226, 186, 203, 174, 155, 148, 140, 24, 181, 92, 27, 177, 172, 231, 228, 171, 116, 64, 242, 31, 57, 233, 96, 132, 204, 5, 56, 157, 12, 250, 152, 177, 118, 27, 239, 99, 219, 98, 91, 211, 229, 97, 253, 97, 156, 124, 69, 115, 125, 205, 83, 140, 28, 231, 162, 109, 245, 63, 248, 183, 135, 242, 179, 188, 173, 100, 86, 50, 134, 139, 161, 59, 186, 89, 16, 151, 108, 133, 1, 48, 71, 118, 143, 203, 191, 225, 169, 5, 147, 171, 217, 46, 196, 137, 149, 178, 223, 182, 229, 4, 55, 50, 239, 94, 37, 169, 57, 74, 220, 108, 33, 150, 117, 13, 115, 175, 61, 190, 161, 56, 235, 80, 25, 116, 31, 192, 191, 103, 231, 177, 66, 59, 5, 161, 235, 35, 2, 236, 60, 91, 153, 98, 46, 33, 124, 159, 174, 1, 174, 223, 117, 121, 53, 185, 124, 211, 167, 0, 177, 181, 172, 162, 28, 158, 165, 66, 120, 197, 163, 66, 34, 9, 206, 232, 205, 0, 60, 147, 149, 100, 59, 72, 29, 120, 186, 119, 183, 96, 242, 163, 25, 200, 82, 249, 125, 62, 103, 101, 138, 193, 163, 42, 170, 165, 203, 85, 38, 197, 133, 51, 122, 13, 34, 72, 247, 218, 170, 190, 247, 173, 61, 213, 197, 30, 191, 231, 134, 131, 84, 219, 104, 15, 166, 170, 25, 7, 41, 7, 84, 226, 222, 13, 143, 58, 195, 103, 247, 22, 209, 63, 216, 129, 12, 120, 240, 201, 20, 23, 137, 116, 43, 181, 169, 69, 241, 213, 59, 170, 204, 144, 208, 80, 59, 14, 153, 95, 233, 86, 22, 11, 233, 30, 181, 249, 126, 151, 140, 94, 6, 243, 239, 46, 59, 163, 147, 164, 181, 26, 229, 114, 169, 130, 162, 210, 76, 62, 134, 106, 38, 150, 179, 179, 159, 58, 153, 188, 237, 46, 62, 216, 226, 212, 42, 249, 77, 204, 183, 77, 216, 96, 22, 40, 8, 215, 73, 62, 20, 29, 39, 157, 56, 96, 100, 69, 99, 78, 52, 204, 208, 152, 79, 234, 210, 192, 18, 195, 178, 106, 61, 241, 94, 210, 134, 149, 83, 16, 194, 108, 204, 71, 56, 68, 187, 53, 59, 20, 6, 109, 145, 5, 227, 123, 195, 115, 228, 72, 10, 191, 83, 6, 103, 29, 30, 142, 183, 101, 70, 236, 55, 81, 212, 213, 41, 91, 18, 238, 232, 83, 31, 8, 116, 210, 153, 156, 199, 149, 148, 17, 7, 154, 146, 121, 212, 179, 102, 112, 114, 17, 73, 118, 150, 177, 48, 204, 67, 153, 235, 79, 139, 12, 22, 182, 20, 48, 12, 242, 0, 98, 8, 25, 62, 163, 176, 182, 234, 237, 179, 100, 181, 102, 28, 82, 104, 19, 185, 77, 137, 122, 238, 251, 32, 194, 38, 191, 0, 50, 191, 75, 236, 130, 125, 72, 115, 255, 199, 51, 113, 184, 250, 80, 135, 17, 152, 149, 15, 32, 55, 113, 141, 13, 114, 168, 166, 62, 251, 123, 77, 12, 169, 188, 78, 83, 223, 34, 236, 103, 56, 186, 71, 188, 134, 202, 55, 48, 146, 186, 93, 119, 13, 48, 235, 231, 75, 226, 125, 16, 69, 102, 132, 176, 165, 11, 112, 91, 115, 172, 82, 124, 24, 34, 194, 59, 255, 40, 242, 205, 136, 47, 21, 129, 249, 66, 176, 148, 27, 118, 73, 50, 30, 183, 56, 28, 156, 214, 115, 54, 103, 226, 146, 15, 244, 112, 255, 30, 192, 218, 212, 233, 159, 105, 155, 116, 176, 45, 191, 98, 60, 244, 128, 62, 79, 76, 19, 180, 164, 136, 125, 207, 145, 234, 10, 158, 50, 78, 210, 5, 236, 38, 60, 164, 185, 52, 209, 15, 157, 240, 13, 38, 44, 69, 69, 13, 95, 48, 138, 252, 92, 137, 231, 139, 131, 4, 221, 4, 72, 18, 125, 213, 64, 177, 2, 123, 255, 169, 62, 86, 128, 249, 137, 23, 184, 82, 216, 50, 50, 74, 127, 131, 8, 136, 251, 56, 14, 122, 247, 61, 170, 96, 49, 65, 27, 44, 72, 181, 187, 222, 211, 192, 55, 103, 15, 121, 20, 59, 231, 63, 76, 139, 135, 102, 114, 218, 210, 228, 17, 8, 86, 241, 213, 72, 146, 205, 14, 121, 202, 50, 167, 176, 255, 23, 110, 40, 22, 192, 188, 111, 61, 212, 208, 72, 235, 70, 98, 245, 199, 41, 154, 187, 80, 48, 203, 140, 253, 117, 58, 215, 52, 69, 86, 125, 237, 89, 135, 18, 1, 83, 83, 220, 236, 174, 126, 96, 210, 57, 13, 14, 94, 207, 161, 17, 79, 237, 211, 25, 16, 185, 177, 52, 73, 5, 207, 201, 3, 17, 85, 173, 67, 63, 190, 162, 219, 228, 90, 204, 227, 39, 194, 158, 5, 220, 254, 117, 36, 209, 118, 178, 165, 181, 90, 175, 128, 240, 171, 199, 141, 27, 64, 70, 134, 189, 173, 224, 59, 238, 88, 5, 110, 210, 140, 218, 173, 35, 78, 16, 122, 211, 187, 211, 157, 39, 129, 156, 212, 47, 12, 249, 192, 47, 171, 184, 167, 214, 24, 95, 200, 232, 159, 248, 62, 199, 30, 8, 16, 43, 66, 131, 4, 149, 27, 181, 162, 145, 77, 236, 227, 192, 76, 248, 26, 70, 194, 183, 96, 119, 77, 63, 34, 92, 175, 28, 245, 221, 33, 208, 198, 140, 124, 131, 128, 45, 230, 73, 92, 107, 126, 70, 7, 231, 15, 104, 129, 11, 44, 39, 140, 184, 171, 170, 212, 209, 4, 232, 95, 42, 165, 225, 235, 84, 175, 62, 243, 123, 171, 241, 197, 201, 199, 70, 227, 137, 242, 87, 250, 130, 22, 222, 231, 79, 152, 175, 93, 140, 0, 125, 183, 160, 66, 247, 31, 74, 43, 194, 109, 16, 80, 200, 193, 219, 204, 113, 157, 127, 199, 157, 232, 179, 111, 28, 118, 23, 27, 208, 118, 235, 200, 186, 122, 218, 167, 48, 124, 82, 226, 74, 157, 246, 67, 85, 30, 49, 210, 135, 75, 192, 86, 218, 238, 51, 65, 227, 246, 38, 147, 46, 78, 185, 102, 154, 71, 134, 152, 246, 143, 18, 140, 214, 37, 178, 111, 171, 200, 246, 80, 247, 224, 138, 209, 98, 246, 121, 149, 174, 104, 72, 103, 206, 103, 175, 48, 159, 193, 36, 95, 121, 202, 95, 103, 58, 108, 230, 25, 83, 34, 115, 166, 52, 42, 200, 134, 230, 201, 138, 72, 109, 121, 1, 28, 76, 186, 140, 185, 35, 64, 198, 106, 22, 95, 123, 207, 45, 198, 102, 220, 45, 32, 187, 178, 186, 147, 255, 220, 126, 216, 94, 124, 76, 235, 164, 27, 38, 228, 48, 82, 134, 173, 234, 74, 100, 219, 155, 141, 131, 206, 111, 69, 170, 190, 75, 216, 141, 193, 220, 65, 17, 245, 182, 12, 231, 5, 65, 98, 229, 201, 250, 119, 146, 111, 4, 39, 112, 46, 9, 245, 208, 85, 237, 2, 175, 243, 7, 181, 17, 108, 68, 87, 205, 19, 100, 181, 127, 153, 176, 173, 241, 139, 58, 236, 155, 207, 203, 194, 163, 136, 252, 70, 226, 63, 112, 184, 22, 128, 234, 146, 128, 57, 44, 35, 202, 63, 46, 41, 56, 175, 90, 246, 25, 199, 32, 151, 12, 171, 164, 23, 177, 99, 188, 123, 237, 138, 151, 249, 175, 45, 122, 173, 172, 136, 64, 164, 177, 76, 249, 21, 59, 155, 137, 86, 124, 210, 15, 131, 103, 125, 218, 104, 50, 90, 215, 200, 137, 47, 219, 213, 133, 231, 3, 38, 16, 45, 56, 166, 168, 152, 211, 208, 22, 129, 139, 99, 132, 61, 20, 217, 201, 127, 252, 2, 89, 100, 255, 155, 119, 206, 70, 127, 57, 188, 185, 250, 228, 185, 165, 134, 149, 228, 153, 215, 218, 102, 133, 48, 58, 247, 207, 204, 174, 162, 84, 18, 108, 230, 149, 89, 71, 236, 145, 200, 41, 81, 30, 147, 92, 203, 251, 232, 94, 53, 84, 79, 111, 247, 147, 30, 32, 161, 84, 55, 240, 237, 224, 172, 235, 33, 169, 209, 49, 180, 188, 110, 90, 50, 152, 69, 122, 173, 242, 34, 59, 203, 62, 158, 68, 16, 163, 127, 103, 31, 185, 126, 149, 86, 2, 127, 44, 235, 231, 114, 36, 78, 8, 33, 184, 206, 48, 204, 162, 176, 151, 139, 88, 191, 177, 61, 133, 255, 245, 154, 204, 191, 13, 247, 51, 224, 188, 24, 113, 188, 128, 21, 62, 23, 13, 55, 201, 49, 220, 102, 72, 180, 159, 90, 195, 176, 97, 146, 67, 253, 100, 32, 105, 8, 184, 68, 156, 38, 169, 19, 148, 195, 184, 228, 121, 155, 140, 70, 102, 25, 60, 50, 94, 193, 68, 232, 194, 193, 94, 135, 41, 0, 224, 197, 227, 49, 212, 197, 76, 29, 138, 13, 36, 236, 200, 162, 42, 164, 166, 180, 25, 179, 155, 26, 161, 69, 196, 43, 122, 34, 31, 139, 2, 248, 78, 212, 4, 51, 23, 138, 202, 242, 174, 73, 239, 41, 57, 132, 177, 248, 157, 77, 128, 163, 38, 41, 36, 107, 54, 154, 253, 220, 200, 205, 34, 216, 11, 163, 125, 91, 87, 47, 186, 234, 111, 154, 40, 172, 196, 210, 120, 131, 226, 223, 89, 240, 15, 136, 150, 102, 94, 125, 147, 193, 212, 10, 213, 23, 245, 187, 204, 55, 229, 161, 221, 88, 70, 164, 92, 136, 224, 178, 240, 146, 241, 203, 35, 99, 67, 254, 108, 251, 110, 95, 97, 46, 26, 49, 220, 143, 218, 115, 230, 194, 77, 162, 93, 1, 207, 246, 230, 9, 221, 210, 147, 219, 143, 115, 149, 226, 105, 172, 136, 57, 29, 195, 75, 161, 101, 241, 164, 110, 207, 101, 135, 6, 130, 189, 0, 211, 72, 196, 83, 179, 4, 30, 38, 186, 204, 91, 246, 208, 244, 15, 204, 141, 28, 67, 138, 133, 7, 106, 4, 1, 8, 184, 67, 146, 155, 104, 149, 9, 164, 8, 127, 191, 71, 252, 5, 165, 139, 148, 183, 177, 14, 148, 170, 239, 26, 65, 171, 113, 186, 6, 189, 87, 205, 61, 161, 156, 183, 98, 105, 228, 134, 60, 29, 9, 116, 195, 203, 205, 170, 238, 90, 17, 209, 152, 210, 89, 29, 28, 140, 243, 190, 66, 176, 166, 152, 196, 180, 68, 248, 51, 141, 22, 15, 91, 194, 142, 120, 73, 72, 171, 97, 50, 123, 103, 208, 97, 225, 117, 93, 53, 105, 52, 63, 120, 46, 144, 73, 10, 100, 128, 48, 126, 37, 68, 69, 157, 121, 95, 251, 55, 189, 121, 249, 159, 168, 41, 238, 112, 73, 178, 171, 155, 218, 169, 5, 7, 232, 74, 67, 209, 16, 174, 240, 67, 137, 172, 73, 218, 100, 173, 44, 180, 211, 86, 202, 184, 45, 247, 16, 133, 193, 240, 112, 165, 46, 63, 135, 149, 164, 169, 182, 173, 169, 95, 159, 10, 242, 120, 212, 63, 35, 135, 244, 16, 129, 217, 135, 248, 147, 53, 220, 122, 130, 146, 19, 112, 248, 4, 122, 189, 240, 222, 30, 95, 1, 116, 237, 77, 206, 72, 84, 108, 249, 109, 42, 49, 132, 109, 68, 99, 89, 71, 242, 82, 159, 49, 128, 23, 28, 219, 0, 254, 4, 132, 61, 190, 168, 252, 12, 193, 4, 94, 230, 198, 134, 27, 58, 159, 55, 118, 254, 62, 5, 158, 7, 91, 26, 9, 4, 8, 219, 110, 119, 192, 238, 251, 17, 118, 111, 245, 115, 201, 182, 90, 240, 46, 95, 97, 41, 78, 161, 103, 170, 94, 116, 63, 21, 117, 154, 37, 68, 245, 21, 17, 146, 33, 203, 111, 4, 175, 49, 14, 196, 249, 93, 120, 220, 42, 106, 233, 70, 202, 91, 35, 136, 43, 66, 233, 244, 227, 181, 91, 254, 203, 44, 77, 132, 104, 176, 191, 178, 74, 10, 1, 244, 198, 38, 130, 250, 251, 136, 225, 68, 7, 74, 195, 198, 190, 94, 207, 51, 19, 203, 92, 7, 133, 168, 183, 182, 185, 157, 54, 25, 95, 95, 141, 104, 32, 31, 171, 87, 231, 60, 91, 57, 21, 16, 202, 133, 118, 237, 62, 115, 101, 128, 135, 205, 79, 102, 13, 99, 134, 89, 174, 182, 75, 36, 37, 89, 149, 18, 155, 118, 177, 147, 34, 186, 180, 124, 53, 111, 60, 26, 26, 173, 176, 162, 124, 84, 89, 46, 191, 152, 14, 64, 255, 123, 174, 25, 188, 143, 212, 53, 179, 129, 178, 35, 222, 176, 60, 247, 17, 202, 242, 107, 201, 92, 61, 29, 32, 121, 145, 48, 157, 158, 103, 121, 89, 44, 118, 188, 228, 244, 192, 207, 70, 76, 155, 85, 247, 16, 158, 72, 131, 153, 182, 30, 161, 118, 129, 52, 233, 70, 48, 120, 234, 206, 144, 105, 61, 178, 135, 242, 32, 175, 115, 70, 115, 110, 81, 38, 234, 205, 136, 181, 45, 180, 181, 104, 97, 208, 80, 64, 138, 70, 156, 1, 205, 115, 128, 194, 68, 105, 251, 14, 255, 146, 90, 49, 32, 246, 110, 222, 194, 24, 7, 117, 65, 125, 46, 224, 116, 39, 14, 115, 78, 13, 241, 249, 73, 230, 7, 232, 30, 210, 72, 212, 219, 4, 160, 195, 9, 80, 91, 178, 219, 45, 144, 151, 165, 88, 125, 142, 194, 125, 208, 192, 178, 70, 164, 141, 92, 67, 3, 119, 109, 6, 201, 120, 158, 30, 151, 139, 204, 241, 191, 221, 5, 104, 187, 86, 168, 40, 125, 98, 193, 171, 169, 144, 84, 147, 25, 0, 233, 144, 215, 245, 95, 232, 209, 27, 177, 184, 57, 245, 45, 127, 105, 222, 76, 247, 245, 113, 235, 206, 121, 176, 0, 232, 166, 20, 147, 193, 164, 37, 224, 113, 110, 71, 2, 30, 240, 82, 78, 21, 40, 46, 81, 23, 87, 237, 76, 113, 45, 41, 35, 102, 83, 214, 119, 146, 119, 88, 109, 221, 156, 211, 208, 247, 18, 82, 42, 242, 116, 152, 40, 167, 28, 89, 118, 117, 128, 146, 118, 135, 230, 116, 136, 77, 83, 222, 117, 216, 50, 208, 227, 101, 194, 13, 250, 29, 79, 191, 227, 128, 225, 74, 108, 157, 149, 70, 73, 106, 22, 121, 86, 81, 224, 8, 232, 226, 242, 131, 233, 67, 91, 104, 191, 88, 14, 199, 226, 232, 139, 119, 145, 100, 128, 229, 20, 99, 72, 192, 67, 153, 117, 45, 197, 233, 2, 19, 68, 216, 7, 168, 233, 137, 199, 158, 144, 176, 89, 211, 130, 154, 126, 152, 171, 68, 120, 219, 85, 55, 113, 106, 37, 95, 87, 141, 249, 59, 162, 100, 160, 130, 192, 154, 199, 164, 24, 237, 3, 170, 55, 54, 3, 98, 109, 11, 73, 121, 158, 117, 36, 30, 30, 41, 255, 20, 164, 227, 215, 0, 113, 15, 63, 183, 138, 238, 138, 135, 21, 52, 32, 79, 250, 224, 188, 39, 217, 12, 25, 52, 75, 87, 22, 118, 232, 59, 217, 139, 193, 182, 100, 19, 36, 242, 37, 5, 252, 216, 152, 55, 244, 64, 162, 16, 5, 175, 189, 35, 146, 125, 5, 25, 205, 166, 163, 133, 243, 156, 246, 55, 215, 123, 224, 121, 131, 50, 54, 108, 103, 41, 38, 15, 23, 247, 244, 106, 88, 182, 61, 180, 185, 61, 189, 213, 94, 167, 59, 140, 208, 120, 132, 226, 199, 18, 249, 28, 49, 112, 76, 76, 238, 86, 129, 196, 49, 136, 14, 126, 12, 91, 211, 157, 255, 233, 97, 73, 150, 21, 188, 77, 83, 34, 151, 49, 183, 214, 135, 86, 208, 220, 14, 107, 229, 194, 172, 230, 218, 239, 176, 168, 21, 58, 134, 128, 37, 118, 169, 125, 48, 144, 235, 136, 78, 44, 82, 180, 189, 127, 66, 39, 40, 135, 245, 57, 18, 141, 117, 83, 22, 194, 78, 135, 145, 154, 45, 90, 115, 236, 2, 250, 109, 113, 243, 230, 227, 74, 254, 219, 6, 242, 47, 41, 242, 146, 146, 228, 235, 165, 209, 17, 21, 220, 125, 202, 141, 204, 223, 220, 83, 55, 33, 233, 233, 201, 136, 63, 122, 154, 5, 99, 13, 72, 31, 202, 199, 59, 94, 95, 82, 154, 170, 147, 81, 143, 183, 30, 213, 216, 4, 41, 86, 203, 78, 22, 137, 73, 1, 58, 40, 252, 12, 162, 51, 204, 23, 12, 171, 19, 78, 160, 54, 58, 214, 138, 16, 0, 27, 15, 105, 164, 72, 204, 144, 194, 4, 234, 144, 213, 78, 13, 83, 249, 166, 132, 36, 211, 55, 5, 252, 123, 127, 177, 184, 19, 66, 244, 59, 124, 154, 154, 128, 195, 69, 252, 137, 82, 0, 189, 89, 104, 213, 18, 65, 99, 231, 135, 177, 227, 165, 108, 253, 158, 56, 35, 24, 230, 61, 157, 181, 59, 68, 178, 241, 150, 74, 223, 173, 129, 53, 104, 204, 91, 224, 208, 135, 110, 140, 84, 213, 4, 123, 193, 193, 13, 26, 56, 219, 216, 112, 11, 195, 234, 84, 10, 169, 83, 78, 151, 71, 29, 58, 241, 81, 118, 234, 3, 168, 77, 196, 89, 207, 31, 174, 236, 188, 68, 80, 6, 54, 246, 206, 66, 87, 159, 149, 239, 205, 31, 195, 24, 11, 156, 243, 91, 17, 168, 60, 112, 142, 19, 159, 238, 103, 152, 55, 202, 182, 147, 246, 172, 17, 249, 38, 202, 253, 37, 255, 143, 4, 128, 215, 166, 45, 26, 254, 231, 221, 121, 233, 92, 158, 222, 169, 34, 98, 255, 197, 192, 140, 250, 226, 156, 48, 136, 115, 156, 62, 159, 196, 196, 219, 152, 113, 254, 210, 96, 178, 21, 45, 103, 206, 108, 255, 143, 84, 226, 10, 200, 71, 77, 134, 220, 153, 28, 97, 250, 223, 103, 41, 53, 74, 20, 110, 237, 199, 166, 91, 186, 167, 136, 36, 183, 234, 120, 219, 235, 94, 184, 68, 120, 227, 227, 132, 29, 217, 108, 131, 201, 237, 43, 11, 181, 150, 77, 214, 172, 4, 46, 78, 123, 165, 21, 3, 76, 94, 43, 234, 42, 18, 189, 223, 222, 119, 246, 149, 10, 46, 99, 28, 128, 41, 111, 232, 142, 88, 162, 239, 61, 14, 235, 154, 200, 189, 213, 236, 162, 197, 240, 81, 67, 149, 137, 209, 132, 108, 3, 60, 210, 162, 246, 166, 81, 191, 221, 116, 225, 91, 175, 116, 154, 92, 24, 219, 174, 145, 25, 126, 71, 28, 14, 155, 151, 54, 233, 92, 53, 99, 109, 248, 36, 204, 82, 171, 19, 6, 185, 229, 26, 90, 91, 10, 128, 77, 244, 77, 251, 158, 3, 174, 36, 159, 134, 196, 246, 57, 24, 227, 227, 15, 176, 238, 124, 150, 234, 167, 46, 201, 52, 21, 62, 62, 34, 65, 138, 184, 49, 92, 229, 144, 1, 107, 124, 112, 175, 142, 31, 249, 202, 157, 214, 20, 246, 243, 134, 51, 237, 84, 121, 84, 127, 24, 253, 36, 42, 207, 240, 164, 239, 86, 186, 79, 215, 142, 62, 149, 194, 60, 212, 214, 73, 166, 53, 52, 75, 235, 111, 183, 100, 236, 57, 251, 165, 160, 248, 197, 37, 139, 117, 250, 71, 61, 170, 39, 126, 232, 133, 178, 122, 88, 8, 51, 28, 231, 129, 22, 102, 184, 82, 19, 99, 66, 103, 227], - [12, 32, 126, 149, 19, 14, 25, 177, 206, 154, 77, 183, 192, 37, 86, 189, 66, 30, 198, 38, 227, 117, 128, 101, 155, 10, 125, 215, 156, 145, 123, 55, 121, 183, 186, 184, 3, 102, 252, 7, 140, 135, 73, 38, 28, 215, 52, 230, 20, 117, 42, 20, 67, 136, 114, 87, 230, 125, 1, 107, 27, 230, 70, 152, 149, 11, 153, 70, 113, 144, 155, 178, 98, 203, 45, 67, 34, 54, 167, 77, 128, 16, 109, 208, 70, 178, 211, 182, 214, 16, 224, 75, 107, 240, 64, 104, 214, 114, 104, 193, 84, 220, 254, 56, 226, 101, 69, 200, 158, 230, 46, 87, 36, 119, 198, 105, 168, 194, 41, 35, 178, 105, 254, 70, 111, 137, 105, 252, 253, 38, 23, 105, 29, 147, 140, 146, 123, 3, 250, 223, 253, 81, 65, 142, 253, 141, 5, 25, 213, 121, 60, 50, 118, 128, 196, 30, 11, 216, 236, 34, 235, 245, 145, 135, 224, 86, 29, 180, 91, 210, 36, 9, 44, 146, 233, 64, 96, 4, 71, 127, 85, 184, 118, 68, 92, 105, 237, 233, 110, 52, 209, 63, 68, 147, 161, 73, 190, 54, 36, 189, 235, 68, 113, 63, 194, 150, 102, 49, 52, 101, 87, 219, 165, 88, 73, 101, 8, 201, 77, 251, 40, 148, 195, 81, 21, 34, 48, 1, 245, 192, 180, 67, 64, 186, 192, 120, 59, 118, 126, 143, 162, 42, 186, 142, 216, 71, 200, 21, 6, 226, 190, 117, 55, 158, 46, 74, 25, 109, 170, 164, 126, 234, 93, 87, 253, 249, 115, 244, 209, 232, 243, 31, 166, 91, 43, 21, 194, 176, 51, 18, 73, 81, 243, 180, 159, 231, 33, 109, 189, 251, 164, 218, 213, 68, 35, 61, 112, 251, 112, 209, 6, 135, 0, 110, 140, 109, 131, 18, 238, 222, 1, 107, 117, 66, 181, 144, 247, 94, 88, 137, 217, 41, 55, 222, 178, 35, 230, 95, 106, 5, 57, 139, 192, 2, 168, 78, 120, 49, 202, 129, 179, 249, 123, 31, 64, 236, 91, 19, 179, 133, 21, 140, 188, 63, 121, 175, 21, 68, 29, 217, 39, 248, 113, 110, 108, 198, 181, 131, 241, 75, 53, 160, 129, 32, 186, 155, 221, 139, 25, 158, 162, 16, 13, 105, 252, 232, 97, 207, 137, 232, 153, 3, 240, 126, 204, 152, 182, 53, 146, 60, 4, 51, 2, 133, 184, 73, 45, 123, 153, 213, 217, 68, 132, 79, 62, 146, 138, 28, 184, 124, 213, 146, 244, 189, 75, 94, 106, 16, 242, 9, 161, 55, 83, 202, 47, 139, 64, 222, 187, 85, 6, 232, 77, 169, 170, 153, 195, 87, 102, 66, 242, 220, 129, 171, 147, 107, 118, 243, 81, 244, 190, 233, 224, 149, 237, 247, 12, 73, 250, 94, 31, 154, 146, 88, 186, 133, 53, 51, 169, 16, 177, 34, 183, 177, 132, 190, 75, 230, 40, 4, 214, 147, 173, 81, 34, 192, 239, 14, 118, 208, 83, 223, 127, 41, 164, 121, 113, 9, 230, 154, 8, 238, 196, 209, 172, 87, 114, 174, 207, 19, 46, 74, 57, 98, 43, 178, 238, 101, 76, 60, 67, 248, 196, 144, 38, 31, 193, 150, 54, 144, 211, 116, 47, 225, 141, 235, 121, 73, 3, 242, 197, 55, 40, 24, 247, 81, 112, 232, 133, 206, 1, 17, 73, 100, 161, 198, 130, 183, 200, 164, 162, 167, 230, 254, 85, 91, 208, 77, 117, 17, 37, 21, 134, 187, 243, 59, 252, 225, 183, 228, 189, 90, 189, 149, 165, 149, 152, 100, 61, 148, 233, 176, 177, 88, 102, 197, 95, 72, 93, 34, 153, 238, 3, 239, 84, 227, 162, 183, 137, 66, 97, 165, 83, 152, 4, 6, 189, 9, 183, 51, 60, 93, 221, 118, 93, 221, 122, 27, 158, 86, 100, 14, 190, 40, 241, 143, 235, 79, 78, 188, 63, 196, 113, 197, 5, 106, 67, 30, 3, 61, 41, 131, 1, 110, 112, 133, 183, 178, 108, 203, 92, 57, 200, 13, 202, 48, 0, 180, 77, 197, 76, 23, 68, 241, 8, 232, 195, 51, 69, 224, 153, 56, 75, 149, 45, 105, 148, 114, 251, 131, 172, 60, 69, 3, 40, 120, 43, 188, 164, 96, 46, 254, 212, 2, 81, 30, 15, 252, 140, 227, 165, 19, 195, 88, 112, 163, 253, 137, 64, 18, 122, 147, 115, 86, 105, 150, 75, 38, 159, 36, 61, 236, 127, 165, 139, 248, 128, 42, 14, 25, 215, 162, 113, 242, 175, 88, 237, 14, 26, 74, 249, 35, 59, 19, 195, 85, 115, 162, 140, 216, 176, 163, 144, 137, 244, 168, 218, 252, 22, 208, 55, 43, 65, 190, 33, 113, 198, 124, 62, 49, 41, 83, 163, 130, 165, 42, 102, 23, 189, 205, 233, 92, 116, 46, 0, 56, 116, 111, 0, 246, 123, 136, 74, 166, 45, 174, 242, 179, 133, 38, 90, 92, 104, 171, 244, 139, 40, 175, 115, 163, 151, 143, 58, 156, 38, 96, 144, 55, 80, 63, 110, 107, 217, 21, 165, 66, 96, 9, 202, 59, 164, 93, 13, 87, 77, 20, 109, 224, 109, 3, 190, 216, 138, 107, 51, 168, 1, 204, 87, 195, 54, 59, 100, 129, 225, 149, 132, 3, 178, 241, 109, 155, 129, 134, 231, 41, 95, 228, 3, 85, 186, 240, 243, 122, 145, 107, 224, 228, 36, 1, 131, 16, 61, 63, 110, 4, 209, 30, 5, 191, 7, 206, 134, 233, 240, 142, 30, 17, 135, 57, 241, 178, 9, 68, 168, 45, 190, 163, 78, 146, 204, 155, 225, 104, 152, 243, 130, 49, 134, 51, 254, 54, 56, 222, 60, 219, 166, 89, 248, 74, 42, 89, 49, 87, 210, 236, 143, 244, 139, 223, 160, 203, 104, 25, 67, 92, 148, 37, 135, 180, 121, 151, 42, 58, 70, 21, 47, 249, 147, 89, 51, 37, 90, 144, 13, 25, 158, 202, 118, 239, 76, 163, 126, 46, 140, 236, 134, 18, 176, 176, 2, 95, 181, 203, 59, 0, 112, 116, 66, 133, 225, 240, 178, 26, 17, 127, 177, 220, 245, 121, 31, 88, 157, 40, 6, 74, 192, 19, 133, 252, 198, 157, 17, 105, 211, 138, 20, 23, 244, 2, 72, 214, 96, 223, 84, 213, 90, 147, 39, 96, 21, 62, 109, 102, 174, 37, 50, 19, 242, 233, 101, 104, 252, 114, 83, 117, 176, 40, 111, 234, 223, 58, 196, 182, 227, 79, 2, 90, 4, 73, 188, 115, 40, 181, 72, 141, 35, 5, 254, 105, 68, 210, 243, 95, 86, 207, 167, 144, 5, 156, 208, 71, 12, 176, 236, 0, 73, 175, 72, 237, 187, 208, 192, 177, 7, 56, 70, 105, 48, 176, 104, 119, 137, 161, 65, 99, 31, 116, 45, 227, 208, 226, 209, 87, 240, 157, 254, 248, 196, 230, 195, 7, 11, 247, 229, 150, 205, 213, 198, 85, 219, 79, 36, 15, 180, 251, 248, 247, 243, 58, 70, 249, 126, 36, 174, 244, 97, 223, 173, 245, 146, 253, 106, 8, 4, 245, 152, 108, 238, 57, 231, 175, 179, 7, 147, 71, 244, 17, 15, 116, 199, 222, 194, 46, 0, 118, 49, 210, 130, 229, 224, 52, 51, 119, 32, 118, 96, 159, 191, 76, 78, 83, 163, 95, 108, 131, 83, 253, 199, 5, 132, 165, 211, 61, 132, 54, 65, 145, 68, 100, 103, 164, 221, 101, 36, 193, 37, 107, 196, 208, 87, 130, 14, 72, 227, 137, 143, 226, 118, 53, 189, 65, 167, 59, 223, 58, 79, 177, 15, 87, 69, 24, 101, 152, 13, 67, 141, 106, 213, 99, 191, 237, 255, 50, 249, 81, 12, 199, 191, 152, 27, 237, 106, 131, 57, 222, 148, 55, 29, 156, 228, 12, 64, 193, 213, 166, 74, 119, 112, 163, 214, 40, 189, 174, 120, 149, 187, 118, 4, 172, 88, 89, 223, 202, 29, 43, 84, 87, 51, 39, 99, 221, 225, 91, 49, 67, 190, 216, 91, 207, 193, 180, 27, 218, 81, 177, 183, 123, 168, 80, 8, 40, 164, 160, 72, 156, 197, 129, 227, 168, 68, 164, 184, 224, 180, 175, 116, 112, 255, 227, 39, 214, 225, 10, 11, 93, 202, 139, 201, 154, 80, 247, 124, 245, 244, 207, 247, 94, 66, 140, 5, 150, 27, 59, 158, 111, 248, 213, 169, 66, 16, 40, 234, 97, 178, 35, 55, 198, 24, 205, 121, 247, 102, 253, 67, 191, 86, 154, 9, 39, 231, 54, 212, 140, 9, 96, 148, 36, 91, 8, 33, 12, 94, 159, 199, 4, 85, 228, 93, 148, 236, 94, 155, 3, 54, 100, 138, 148, 51, 120, 35, 196, 253, 48, 224, 70, 207, 141, 166, 226, 170, 247, 190, 116, 183, 207, 37, 188, 155, 30, 210, 251, 177, 29, 169, 80, 231, 239, 149, 83, 11, 240, 64, 210, 17, 137, 72, 178, 141, 103, 125, 157, 232, 117, 11, 229, 85, 160, 122, 223, 96, 177, 170, 23, 62, 119, 84, 140, 249, 222, 253, 2, 249, 187, 230, 59, 203, 208, 13, 77, 90, 255, 62, 202, 49, 21, 23, 16, 241, 9, 232, 105, 101, 138, 244, 183, 32, 246, 0, 108, 246, 197, 105, 181, 255, 135, 250, 248, 103, 87, 116, 28, 58, 45, 167, 252, 155, 174, 242, 91, 46, 16, 197, 47, 93, 176, 77, 58, 221, 218, 236, 126, 4, 215, 58, 14, 110, 35, 135, 101, 253, 215, 107, 173, 20, 34, 217, 135, 120, 136, 164, 173, 85, 63, 113, 28, 179, 91, 16, 157, 171, 151, 218, 77, 104, 175, 102, 126, 243, 248, 205, 19, 63, 24, 248, 251, 147, 217, 63, 32, 219, 119, 19, 146, 98, 143, 54, 128, 13, 86, 70, 181, 216, 67, 203, 145, 158, 137, 154, 223, 171, 132, 163, 165, 66, 140, 188, 84, 89, 254, 170, 187, 212, 193, 174, 35, 112, 215, 186, 107, 54, 157, 90, 184, 185, 142, 218, 12, 228, 3, 145, 245, 4, 137, 129, 50, 217, 147, 91, 183, 145, 255, 158, 199, 107, 153, 186, 76, 114, 82, 18, 187, 128, 175, 240, 222, 120, 248, 225, 106, 108, 14, 220, 117, 178, 111, 158, 33, 38, 96, 75, 39, 248, 9, 121, 28, 77, 175, 20, 169, 234, 98, 200, 173, 114, 155, 23, 178, 40, 88, 175, 28, 217, 152, 218, 153, 108, 242, 41, 45, 136, 201, 124, 20, 219, 17, 47, 241, 158, 4, 164, 92, 12, 58, 139, 85, 188, 163, 210, 9, 7, 6, 5, 103, 231, 115, 156, 250, 206, 103, 8, 29, 167, 130, 192, 96, 161, 118, 4, 249, 140, 183, 105, 172, 117, 251, 73, 148, 191, 52, 19, 90, 209, 172, 157, 87, 169, 48, 206, 34, 55, 109, 148, 158, 210, 224, 78, 211, 176, 173, 113, 14, 171, 213, 214, 248, 146, 228, 56, 69, 31, 126, 38, 164, 8, 129, 28, 76, 231, 119, 18, 1, 225, 86, 190, 156, 38, 61, 16, 40, 14, 37, 128, 235, 136, 140, 205, 208, 162, 28, 131, 10, 41, 193, 167, 247, 131, 89, 136, 117, 217, 140, 188, 184, 42, 98, 138, 90, 54, 172, 182, 8, 214, 54, 94, 163, 248, 132, 212, 69, 206, 140, 245, 89, 178, 43, 91, 127, 179, 125, 45, 102, 0, 69, 11, 128, 16, 119, 13, 250, 240, 34, 222, 72, 177, 147, 149, 134, 198, 147, 166, 190, 1, 254, 217, 1, 156, 221, 94, 119, 254, 203, 41, 7, 207, 248, 37, 131, 80, 160, 244, 203, 132, 244, 136, 92, 222, 40, 20, 103, 35, 131, 125, 173, 144, 30, 160, 225, 225, 223, 172, 249, 20, 141, 167, 217, 203, 30, 195, 79, 34, 166, 178, 138, 235, 15, 104, 151, 26, 74, 50, 173, 219, 9, 135, 74, 242, 34, 68, 15, 23, 129, 71, 230, 242, 148, 81, 168, 214, 27, 144, 158, 93, 186, 131, 18, 108, 97, 88, 184, 228, 12, 250, 59, 186, 29, 188, 99, 29, 89, 166, 235, 49, 188, 170, 64, 129, 236, 37, 77, 227, 45, 68, 133, 113, 245, 98, 248, 38, 136, 101, 63, 224, 60, 37, 220, 181, 0, 133, 144, 3, 144, 141, 171, 41, 159, 33, 63, 29, 9, 249, 203, 255, 111, 101, 20, 224, 62, 28, 145, 217, 18, 229, 24, 28, 142, 24, 29, 91, 232, 34, 66, 205, 79, 175, 82, 227, 56, 214, 200, 157, 40, 137, 25, 199, 65, 194, 112, 210, 98, 91, 245, 54, 171, 168, 49, 155, 160, 64, 114, 98, 55, 28, 22, 116, 86, 250, 184, 81, 251, 5, 118, 82, 209, 137, 38, 14, 20, 23, 250, 73, 194, 84, 192, 227, 46, 113, 232, 55, 56, 52, 95, 29, 135, 67, 58, 36, 22, 212, 31, 174, 114, 235, 233, 122, 138, 64, 225, 125, 127, 47, 132, 183, 77, 139, 85, 223, 255, 214, 189, 117, 5, 90, 232, 152, 182, 29, 201, 217, 159, 183, 96, 12, 72, 206, 29, 161, 119, 197, 20, 41, 129, 34, 2, 151, 99, 212, 42, 248, 113, 54, 218, 72, 205, 34, 29, 121, 254, 241, 87, 231, 189, 113, 29, 249, 28, 233, 53, 65, 228, 133, 212, 147, 163, 39, 4, 244, 72, 221, 4, 66, 242, 217, 49, 86, 42, 10, 168, 252, 203, 163, 33, 81, 107, 138, 243, 229, 84, 49, 245, 4, 44, 99, 198, 39, 12, 129, 119, 156, 62, 246, 228, 255, 178, 214, 128, 37, 23, 166, 102, 144, 233, 22, 47, 212, 148, 123, 119, 192, 22, 200, 178, 59, 70, 130, 188, 15, 44, 141, 120, 87, 214, 71, 92, 88, 80, 144, 68, 136, 10, 237, 237, 246, 25, 166, 141, 89, 3, 244, 91, 168, 13, 173, 248, 218, 169, 137, 233, 153, 82, 131, 48, 226, 241, 180, 87, 146, 212, 241, 35, 217, 65, 162, 8, 90, 152, 203, 50, 62, 246, 138, 98, 105, 71, 71, 8, 86, 27, 53, 13, 35, 184, 122, 242, 200, 241, 176, 89, 210, 58, 61, 23, 87, 22, 192, 143, 30, 123, 162, 199, 29, 1, 66, 39, 237, 118, 209, 143, 184, 146, 164, 64, 212, 130, 237, 183, 173, 17, 93, 79, 43, 196, 70, 16, 36, 159, 73, 120, 134, 65, 60, 246, 239, 37, 85, 91, 172, 235, 91, 161, 36, 50, 114, 114, 79, 73, 181, 25, 221, 6, 82, 231, 231, 168, 90, 220, 233, 244, 134, 189, 200, 168, 91, 84, 135, 5, 73, 162, 240, 0, 254, 159, 139, 77, 54, 210, 165, 186, 169, 3, 172, 190, 112, 98, 62, 70, 77, 39, 205, 200, 172, 241, 208, 201, 76, 67, 3, 139, 34, 28, 145, 167, 16, 193, 222, 172, 24, 188, 234, 84, 159, 198, 106, 204, 173, 63, 55, 44, 37, 84, 197, 6, 185, 126, 46, 93, 39, 198, 136, 40, 127, 161, 169, 235, 209, 192, 161, 219, 250, 87, 236, 194, 22, 73, 18, 123, 66, 74, 249, 18, 86, 13, 243, 205, 144, 173, 64, 107, 7, 206, 160, 75, 17, 142, 10, 129, 212, 214, 37, 59, 58, 113, 11, 173, 247, 113, 141, 137, 213, 237, 198, 49, 197, 43, 207, 93, 243, 61, 214, 60, 134, 190, 95, 255, 153, 110, 89, 191, 73, 163, 138, 94, 147, 150, 16, 202, 38, 21, 89, 218, 73, 127, 186, 101, 192, 241, 226, 179, 113, 146, 131, 21, 124, 154, 31, 199, 38, 55, 24, 112, 66, 55, 51, 48, 160, 252, 17, 236, 241, 70, 85, 60, 22, 146, 124, 241, 25, 186, 244, 94, 216, 253, 204, 244, 193, 78, 192, 169, 232, 126, 23, 98, 196, 139, 172, 39, 127, 173, 119, 28, 248, 222, 109, 3, 31, 42, 198, 226, 228, 18, 34, 128, 188, 135, 84, 223, 65, 19, 134, 133, 92, 219, 85, 117, 198, 249, 229, 186, 147, 229, 25, 68, 63, 236, 195, 254, 168, 66, 28, 105, 219, 162, 158, 38, 59, 89, 251, 47, 37, 82, 200, 128, 224, 228, 144, 178, 79, 220, 236, 227, 235, 238, 152, 79, 85, 23, 63, 173, 159, 26, 176, 177, 66, 228, 172, 136, 19, 6, 150, 148, 223, 162, 101, 106, 47, 88, 251, 236, 204, 27, 127, 74, 75, 16, 245, 102, 69, 98, 175, 181, 215, 98, 250, 14, 54, 73, 198, 83, 108, 148, 177, 97, 155, 88, 126, 74, 213, 62, 63, 93, 138, 218, 223, 79, 36, 36, 142, 23, 252, 6, 212, 67, 94, 211, 20, 86, 21, 40, 147, 191, 3, 149, 30, 48, 206, 13, 240, 246, 156, 176, 111, 57, 241, 243, 143, 17, 199, 172, 232, 37, 0, 46, 43, 13, 164, 21, 228, 33, 221, 119, 0, 55, 229, 25, 242, 57, 127, 58, 196, 47, 74, 35, 83, 113, 114, 82, 168, 108, 188, 232, 215, 85, 188, 215, 17, 74, 165, 235, 170, 215, 153, 104, 74, 177, 220, 156, 77, 148, 213, 159, 61, 39, 43, 46, 24, 243, 8, 242, 193, 209, 105, 8, 136, 223, 156, 81, 27, 167, 103, 23, 215, 107, 183, 168, 161, 161, 217, 89, 173, 81, 219, 230, 99, 254, 15, 48, 159, 194, 231, 174, 166, 169, 12, 131, 22, 147, 154, 176, 78, 49, 206, 0, 239, 10, 103, 174, 20, 28, 253, 209, 195, 5, 247, 141, 17, 170, 161, 71, 140, 108, 33, 41, 193, 170, 26, 176, 171, 131, 91, 208, 229, 15, 42, 112, 83, 232, 71, 172, 88, 38, 106, 13, 158, 94, 30, 105, 35, 240, 147, 109, 248, 147, 90, 190, 33, 204, 214, 140, 43, 92, 197, 155, 252, 101, 72, 191, 51, 195, 140, 119, 200, 34, 224, 246, 164, 47, 164, 217, 173, 246, 246, 89, 69, 134, 197, 28, 248, 176, 173, 138, 168, 89, 28, 133, 134, 29, 77, 5, 52, 147, 225, 117, 56, 14, 45, 87, 151, 103, 89, 9, 197, 13, 24, 129, 39, 189, 235, 210, 189, 143, 72, 182, 194, 122, 213, 186, 109, 112, 69, 247, 14, 202, 154, 85, 106, 32, 170, 171, 156, 200, 136, 56, 158, 58, 245, 228, 53, 209, 109, 210, 1, 229, 182, 167, 119, 7, 153, 174, 18, 39, 195, 196, 47, 86, 86, 197, 122, 88, 137, 12, 176, 24, 13, 193, 204, 41, 127, 37, 87, 214, 17, 182, 26, 57, 176, 82, 181, 140, 170, 22, 183, 208, 185, 189, 203, 136, 70, 81, 20, 57, 225, 97, 236, 158, 74, 162, 87, 219, 176, 229, 55, 37, 43, 29, 243, 4, 103, 209, 14, 200, 251, 139, 185, 214, 8, 104, 84, 185, 123, 196, 150, 134, 55, 254, 100, 220, 117, 104, 58, 23, 203, 135, 117, 65, 185, 156, 140, 119, 252, 80, 106, 7, 223, 140, 162, 135, 11, 172, 216, 133, 11, 53, 38, 230, 224, 123, 95, 95, 130, 6, 191, 51, 20, 104, 170, 177, 183, 26, 102, 238, 142, 79, 244, 95, 197, 162, 125, 150, 40, 246, 182, 109, 18, 159, 30, 44, 186, 109, 232, 164, 148, 44, 24, 232, 27, 225, 120, 99, 130, 56, 15, 126, 3, 49, 202, 148, 224, 115, 18, 160, 159, 24, 94, 255, 211, 130, 41, 177, 137, 174, 96, 172, 199, 64, 149, 250, 173, 24, 167, 200, 175, 136, 74, 148, 170, 148, 25, 77, 13, 137, 120, 53, 12, 109, 11, 57, 23, 186, 193, 1, 112, 33, 178, 83, 189, 17, 61, 130, 250, 174, 202, 190, 10, 233, 237, 116, 204, 173, 143, 98, 225, 94, 232, 106, 156, 97, 201, 250, 52, 116, 226, 244, 96, 207, 82, 227, 219, 184, 46, 200, 150, 171, 160, 159, 78, 170, 105, 20, 242, 173, 180, 79, 183, 209, 206, 151, 254, 180, 62, 232, 208, 36, 18, 30, 147, 219, 188, 46, 9, 228, 155, 200, 9, 254, 208, 241, 129, 241, 3, 47, 29, 235, 90, 200, 112, 108, 225, 0, 19, 195, 156, 250, 16, 89, 234, 53, 51, 95, 194, 161, 192, 34, 143, 1, 142, 51, 91, 172, 141, 207, 19, 33, 95, 166, 4, 111, 89, 65, 119, 130, 215, 58, 231, 173, 167, 224, 253, 214, 15, 98, 232, 235, 112, 55, 140, 56, 95, 131, 185, 111, 203, 243, 102, 26, 117, 202, 17, 104, 15, 132, 58, 149, 126, 128, 241, 169, 243, 247, 133, 218, 215, 79, 196, 59, 133, 36, 5, 128, 240, 193, 240, 115, 117, 0, 101, 73, 48, 135, 207, 77, 79, 23, 136, 154, 125, 42, 26, 90, 68, 40, 167, 16, 138, 176, 154, 48, 230, 191, 124, 236, 73, 41, 118, 53, 153, 147, 55, 65, 241, 88, 44, 100, 222, 189, 100, 45, 180, 213, 227, 253, 98, 251, 71, 71, 155, 131, 4, 167, 183, 122, 239, 201, 188, 206, 255, 230, 58, 17, 52, 248, 179, 242, 58, 250, 61, 255, 83, 48, 195, 39, 55, 86, 217, 7, 104, 97, 170, 7, 227, 40, 63, 92, 140, 14, 190, 63, 205, 42, 229, 211, 64, 174, 89, 221, 204, 104, 53, 24, 215, 123, 169, 128, 239, 133, 88, 26, 121, 165, 159, 88, 88, 15, 197, 224, 73, 0, 234, 10, 118, 56, 141, 175, 216, 136, 247, 246, 68, 183, 95, 121, 79, 243, 128, 121, 126, 56, 191, 109, 213, 130, 110, 52, 129, 2, 194, 2, 86, 151, 174, 67, 182, 27, 109, 235, 170, 234, 217, 112, 24, 98, 48, 165, 77, 2, 135, 69, 141, 127, 190, 51, 136, 198, 39, 192, 121, 247, 150, 148, 209, 171, 159, 184, 188, 43, 142, 183, 192, 200, 231, 116, 42, 45, 117, 109, 76, 31, 172, 140, 81, 143, 161, 31, 179, 48, 87, 238, 182, 28, 178, 36, 247, 249, 137, 81, 20, 184, 207, 158, 59, 0, 237, 61, 41, 193, 72, 85, 244, 76, 72, 78, 67, 45, 142, 142, 54, 131, 154, 142, 6, 233, 234, 207, 183, 77, 237, 150, 37, 160, 226, 3, 101, 110, 110, 71, 105, 127, 255, 129, 62, 242, 97, 172, 140, 58, 80, 54, 223, 58, 202, 160, 26, 44, 249, 19, 203, 66, 46, 109, 172, 41, 234, 70, 231, 208, 232, 171, 251, 106, 43, 233, 229, 138, 199, 202, 14, 108, 47, 200, 35, 179, 134, 35, 17, 206, 62, 107, 151, 233, 115, 187, 151, 214, 53, 203, 16, 175, 86, 103, 204, 209, 251, 60, 198, 111, 235, 166, 8, 114, 148, 130, 245, 84, 160, 171, 129, 133, 139, 210, 78, 159, 97, 232, 214, 169, 169, 238, 152, 23, 225, 28, 253, 86, 140, 134, 47, 230, 235, 118, 185, 198, 17, 66, 72, 84, 229, 142, 122, 252, 154, 77, 166, 17, 114, 184, 226, 151, 220, 54, 186, 214, 179, 205, 195, 121, 226, 197, 126, 66, 152, 50, 81, 205, 53, 205, 179, 254, 2, 167, 244, 71, 6, 239, 125, 174, 114, 54, 8, 1, 225, 12, 200, 212, 185, 143, 106, 93, 28, 190, 130, 156, 247, 184, 120, 182, 246, 20, 231, 133, 90, 111, 119, 41, 176, 156, 239, 220, 255, 233, 47, 89, 64, 101, 207, 247, 106, 53, 127, 57, 61, 253, 209, 115, 198, 19, 52, 79, 195, 157, 190, 188, 87, 28, 102, 213, 191, 14, 104, 178, 4, 28, 139, 109, 101, 226, 159, 204, 73, 144, 93, 101, 152, 190, 83, 128, 127, 86, 188, 233, 145, 244, 158, 59, 78, 105, 57, 136, 15, 127, 202, 112, 253, 38, 176, 46, 222, 93, 185, 74, 196, 100, 123, 158, 219, 229, 175, 70, 21, 112, 157, 69, 199, 248, 202, 192, 170, 223, 235, 100, 61, 85, 185, 115, 80, 183, 217, 157, 221, 188, 143, 26, 164, 193, 95, 76, 20, 9, 188, 158, 202, 78, 156, 132, 179, 139, 161, 238, 107, 72, 43, 200, 128, 26, 215, 58, 204, 58, 242, 221, 159, 136, 152, 108, 36, 137, 36, 217, 130, 50, 128, 68, 134, 84, 159, 115, 39, 50, 67, 69, 156, 14, 133, 142, 16, 112, 233, 68, 88, 130, 222, 140, 15, 15, 58, 227, 219, 112, 68, 101, 76, 190, 194, 36, 210, 79, 11, 166, 231, 170, 154, 87, 254, 5, 200, 170, 23, 83, 165, 26, 118, 55, 150, 168, 252, 3, 154, 193, 130, 241, 143, 54, 54, 5, 125, 199, 173, 148, 61, 200, 236, 0, 30, 10, 79, 100, 9, 146, 210, 71, 9, 39, 119, 105, 155, 17, 122, 117, 111, 51, 44, 120, 37, 106, 139, 250, 155, 77, 196, 152, 169, 118, 46, 205, 76, 58, 153, 142, 131, 232, 120, 89, 183, 204, 235, 130, 162, 142, 78, 25, 63, 60, 104, 244, 235, 217, 222, 228, 139, 170, 70, 91, 232, 155, 126, 245, 198, 234, 137, 88, 96, 7, 50, 121, 149, 112, 133, 33, 10, 196, 74, 172, 11, 18, 15, 149, 118, 117, 49, 126, 46, 86, 23, 111, 163, 96, 254, 220, 109, 37, 58, 25, 62, 27, 124, 131, 216, 28, 0, 78, 248, 221, 26, 169, 146, 156, 192, 144, 162, 77, 187, 172, 231, 30, 71, 30, 43, 217, 166, 31, 5, 60, 25, 2, 135, 55, 241, 84, 44, 246, 5, 113, 227, 236, 220, 196, 249, 191, 118, 195, 184, 121, 249, 92, 232, 20, 34, 189, 121, 36, 239, 231, 103, 246, 177, 144, 163, 46, 188, 239, 96, 243, 99, 101, 230, 124, 222, 26, 175, 90, 40, 73, 203, 96, 207, 136, 166, 64, 51, 39, 43, 4, 31, 74, 22, 19, 211, 60, 87, 93, 0, 142, 226, 169, 104, 245, 85, 60, 181, 23, 3, 100, 103, 82, 227, 248, 177, 218, 4, 188, 195, 189, 252, 248, 161, 38, 227, 63, 232, 75, 130, 238, 28, 130, 152, 37, 189, 44, 150, 14, 228, 233, 15, 185, 37, 31, 84, 123, 183, 50, 47, 81, 52, 188, 97, 138, 181, 190, 95, 127, 86, 71, 209, 157, 31, 55, 140, 52, 234, 102, 235, 81, 19, 107, 243, 112, 189, 207, 8, 17, 232, 121, 78, 91, 97, 9, 177, 93, 119, 105, 1, 58, 72, 75, 28, 207, 150, 157, 128, 71, 242, 23, 69, 93, 246, 176, 24, 196, 84, 254, 80, 59, 252, 144, 198, 13, 23, 206, 82, 128, 242, 145, 200, 129, 238, 50, 242, 64, 138, 214, 159, 28, 135, 44, 251, 101, 105, 172, 80, 119, 250, 248, 51, 3, 156, 211, 79, 54, 75, 55, 49, 110, 157, 112, 199, 46, 215, 170, 210, 155, 79, 111, 29, 217, 228, 253, 227, 123, 238, 64, 94, 88, 53, 99, 69, 240, 77, 229, 217, 18, 63, 251, 200, 209, 202, 122, 30, 111, 23, 231, 64, 24, 155, 95, 245, 238, 131, 41, 6, 183, 114, 144, 221, 33, 7, 155, 231, 251, 168, 25, 110, 59, 42, 174, 26, 222, 89, 33, 193, 5, 65, 122, 16, 211, 166, 91, 69, 240, 201, 230, 246, 6, 35, 106, 169, 252, 133, 166, 140, 188, 235, 171, 227, 0, 118, 232, 47, 37, 238, 36, 130, 207, 169, 201, 238, 72, 167, 157, 226, 136, 57, 126, 148, 83, 211, 95, 76, 64, 241, 165, 32, 13, 237, 247, 223, 105, 152, 43, 153, 251, 105, 136, 160, 87, 112, 120, 65, 213, 187, 138, 58, 106, 31, 182, 23, 251, 131, 223, 10, 99, 185, 66, 117, 10, 11, 175, 50, 252, 82, 8, 166, 250, 113, 177, 197, 70, 131, 38, 102, 116, 254, 82, 184, 230, 125, 116, 82, 168, 250, 241, 163, 238, 207, 220, 118, 156, 229, 97, 111, 253, 242, 47, 188, 46, 133, 180, 230, 247, 255, 239, 182, 203, 42, 175, 179, 69, 161, 216, 72, 100, 12, 123, 82, 253, 220, 73, 175, 46, 235, 155, 2, 60, 218, 131, 107, 185, 246, 223, 188, 27, 65, 72, 24, 38, 68, 126, 161, 96, 114, 156, 182, 39, 88, 91, 26, 114, 221, 130, 219, 184, 176, 1, 103, 216, 246, 47, 236, 190, 140, 221, 46, 113, 163, 66, 94, 25, 158, 79, 198, 187, 161, 83, 124, 109, 48, 90, 6, 165, 32, 16, 91, 209, 209, 207, 23, 158, 103, 84, 45, 97, 53, 233, 191, 180, 146, 101, 187, 14, 173, 221, 73, 70, 16, 100, 32, 156, 235, 21, 66, 236, 225, 147, 32, 193, 158, 165, 244, 88, 188, 223, 248, 197, 138, 12, 25, 182, 0, 99, 33, 204, 40, 203, 125, 183, 235, 219, 246, 126, 225, 56, 96, 43, 29, 78, 169, 132, 154, 32, 244, 124, 179, 15, 120, 78, 127, 88, 189, 131, 44, 149, 26, 25, 81, 48, 39, 5, 176, 152, 2, 243, 195, 180, 56, 1, 127, 18, 89, 221, 171, 84, 203, 109, 77, 221, 124, 197, 117, 223, 18, 132, 176, 4, 211, 84, 203, 156, 130, 58, 242, 116, 1, 187, 228, 188, 255, 161, 134, 148, 72, 30, 139, 0, 105, 63, 219, 200, 116, 118, 46, 176, 50, 228, 96, 228, 202, 1, 71, 95, 8, 65, 181, 214, 192, 153, 60, 139, 245, 175, 218, 165, 22, 111, 103, 150, 233, 79, 133, 179, 142, 14, 91, 54, 180, 91, 145, 11, 74, 137, 45, 237, 231, 190, 118, 231, 222, 149, 59, 186, 149, 141, 11, 239, 64, 189, 169, 194, 141, 12, 206, 51, 89, 116, 117, 238, 97, 107, 26, 210, 150, 98, 26, 113, 209, 79, 73, 199, 207, 139, 239, 68, 43, 220, 5, 105, 59, 39, 14, 68, 135, 47, 210, 123, 55, 77, 41, 84, 178, 90, 161, 39, 61, 96, 61, 112, 15, 45, 104, 201, 59, 51, 216, 83, 138, 41, 184, 200, 102, 241, 99, 149, 233, 49, 121, 234, 17, 152, 248, 87, 153, 33, 92, 92, 193, 88, 194, 191, 218, 134, 243, 117, 188, 123, 85, 152, 107, 216, 24, 97, 158, 155, 240, 233, 96, 136, 49, 24, 245, 245, 133, 118, 189, 30, 190, 9, 175, 36, 29, 7, 106, 93, 74, 89, 176, 51, 22, 137, 94, 220, 17, 112, 226, 97, 245, 193, 212, 57, 203, 244, 173, 100, 218, 90, 216, 253, 208, 40, 42, 170, 231, 249, 15, 164, 135, 144, 73, 26, 191, 169, 174, 164, 36, 47, 186, 132, 229, 171, 68, 195, 67, 23, 15, 74, 132, 220, 158, 109, 81, 191, 96, 204, 135, 121, 58, 158, 77, 139, 105, 71, 168, 49, 95, 213, 234, 226, 10, 228, 54, 172, 218, 248, 87, 157, 138, 73, 163, 249, 47, 128, 175, 175, 151, 229, 15, 44, 100, 36, 153, 20, 123, 53, 59, 165, 8, 30, 216, 230, 209, 100, 10, 106, 236, 119, 151, 28, 28, 241, 107, 200, 71, 201, 1, 147, 176, 45, 248, 158, 60, 175, 36, 149, 26, 79, 127, 215, 103, 70, 213, 130, 203, 175, 146, 101, 36, 243, 93, 244, 87, 132, 53, 175, 131, 216, 197, 158, 196, 80, 23, 218, 0, 126, 236, 93, 150, 147, 66, 2, 197, 253, 207, 114, 108, 192, 72, 6, 25, 217, 85, 81, 63, 95, 139, 39, 43, 58, 241, 134, 51, 10, 225, 223, 69, 165, 68, 110, 197, 27, 129, 174, 8, 203, 38, 228, 105, 4, 114, 87, 178, 72, 237, 132, 11, 239, 138, 127, 35, 239, 225, 20, 178, 195, 96, 38, 167, 24, 153, 125, 164, 236, 16, 174, 133, 192, 153, 85, 80, 47, 185, 103, 75, 198, 111, 128, 61, 72, 42, 208, 209, 149, 70, 128, 204, 97, 171, 32, 58, 223, 74, 83, 236, 81, 77, 121, 19, 176, 83, 228, 16, 234, 200, 231, 166, 77, 142, 156, 182, 197, 229, 40, 95, 83, 127, 25, 59, 100, 128, 42, 25, 164, 163, 151, 143, 225, 92, 244, 149, 11, 14, 59, 130, 100, 248, 93, 34, 64, 179, 35, 36, 65, 56, 25, 66, 138, 177, 227, 55, 12, 166, 246, 102, 108, 16, 192, 213, 190, 115, 158, 127, 247, 84, 232, 188, 96, 84, 252, 240, 151, 36, 93, 241, 118, 142, 147, 26, 106, 240, 66, 233, 144, 36, 218, 255, 67, 137, 30, 182, 231, 196, 147, 200, 222, 119, 25, 174, 165, 121, 210, 228, 200, 230, 126, 130, 216, 211, 236, 111, 140, 175, 53, 185, 104, 253, 131, 106, 0, 17, 214, 31, 87, 88, 92, 58, 217, 90, 190, 120, 182, 214, 255, 106, 209, 119, 240, 95, 214, 127, 145, 127, 242, 19, 238, 182, 86, 156, 55, 210, 19, 229, 90, 180, 5, 37, 109, 106, 201, 169, 137, 11, 99, 62, 130, 113, 27, 207, 153, 138, 224, 94, 41, 85, 54, 70, 48, 196, 147, 99, 16, 141, 168, 22, 194, 232, 29, 107, 196, 163, 45, 41, 154, 18, 92, 61, 35, 216, 43, 222, 8, 202, 145, 169, 21, 45, 151, 188, 223, 190, 172, 245, 125, 233, 55, 3, 204, 80, 249, 86, 121, 178, 185, 60, 128, 139, 146, 42, 65, 238, 155, 119, 151, 108, 215, 164, 98, 179, 183, 250, 240, 16, 188, 189, 8, 150, 116, 65, 7, 220, 91, 152, 0, 112, 19, 166, 204, 239, 10, 157, 127, 208, 143, 186, 248, 177, 231, 92, 118, 34, 145, 176, 238, 199, 26, 90, 74, 27, 68, 157, 188, 48, 50, 25, 58, 149, 227, 101, 206, 164, 240, 161, 148, 243, 253, 191, 152, 57, 132, 177, 156, 138, 226, 55, 150, 123, 69, 99, 188, 93, 78, 121, 252, 62, 249, 23, 6, 248, 152, 49, 28, 47, 193, 110, 47, 118, 46, 141, 206, 166, 96, 212, 124, 16, 43, 79, 12, 56, 41, 128, 218, 193, 0, 124, 81, 209, 243, 178, 132, 115, 10, 111, 192, 197, 224, 238, 192, 95, 190, 30, 163, 158, 184, 77, 159, 11, 228, 198, 228, 133, 251, 50, 112, 206, 101, 198, 98, 249, 153, 16, 15, 99, 46, 72, 188, 107, 132, 174, 244, 209, 99, 237, 183, 220, 93, 230, 143, 92, 89, 114, 138, 51, 11, 191, 10, 57, 201, 66, 188, 221, 76, 182, 218, 204, 189, 19, 231, 59, 122, 178, 55, 3, 239, 150, 141, 254, 127, 31, 163, 96, 2, 78, 79, 218, 112, 177, 22, 240, 112, 113, 161, 203, 197, 100, 2, 121, 30, 230, 201, 46, 161, 167, 17, 122, 189, 50, 252, 35, 61, 219, 225, 10, 181, 37, 171, 86, 28, 168, 128, 125, 255, 155, 54, 24, 24, 31, 62, 56, 2, 53, 17, 104, 72, 50, 226, 143, 29, 148, 207, 203, 108, 215, 62, 37, 163, 124, 52, 97, 180, 201, 175, 15, 212, 231, 141, 235, 128, 205, 112, 221, 121, 18, 187, 21, 82, 38, 220, 239, 133, 216, 126, 16, 28, 9, 240, 162, 122, 30, 27, 219, 172, 207, 169, 84, 104, 164, 78, 176, 101, 25, 125, 175, 44, 173, 18, 25, 11, 98, 189, 156, 233, 26, 153, 30, 161, 117, 24, 44, 21, 54, 212, 57, 135, 5, 209, 60, 131, 8, 178, 214, 146, 188, 188, 39, 78, 57, 14, 248, 196, 220, 97, 19, 173, 69, 111, 71, 129, 29, 184, 36, 79, 127, 150, 58, 229, 211, 158, 153, 164, 210, 222, 160, 60, 166, 228, 43, 9, 94, 88, 168, 245, 92, 38, 252, 12, 226, 181, 147, 116, 129, 173, 240, 111, 18, 88, 48, 227, 47, 168, 24, 125, 139, 121, 213, 160, 136, 44, 108, 119, 254, 245, 162, 135, 103, 121, 184, 125, 30, 192, 3, 97, 55, 129, 230, 169, 153, 81, 69, 143, 135, 22, 184, 251, 85, 77, 80, 191, 191, 244, 247, 221, 178, 110, 16, 229, 102, 114, 5, 81, 57, 183, 46, 221, 72, 48, 209, 143, 176, 242, 61, 195, 119, 43, 162, 80, 154, 165, 248, 33, 255, 103, 220, 139, 39, 66, 173, 67, 191, 106, 175, 201, 7, 130, 155, 59, 111, 13, 172, 57, 146, 61, 150, 87, 97, 177, 97, 158, 192, 62, 72, 184, 203, 90, 170, 112, 102, 44, 32, 45, 162, 104, 225, 242, 46, 197, 63, 107, 204, 20, 134, 164, 85, 242, 56, 113, 253, 91, 131, 44, 62, 175, 114, 209, 128, 148, 209, 191, 242, 16, 78, 23, 240, 227, 52, 200, 251, 252, 121, 140, 47, 61, 92, 132, 120, 54, 49, 22, 51, 241, 126, 6, 178, 193, 198, 190, 236, 5, 235, 5, 71, 141, 34, 116, 220, 95, 70, 242, 203, 89, 136, 115, 166, 118, 162, 148, 17, 200, 54, 0, 235, 50, 120, 104, 97, 9, 166, 215, 109, 99, 155, 189, 253, 3, 0, 138, 69, 14, 13, 82, 238, 35, 77, 182, 2, 222, 204, 107, 62, 136, 178, 223, 175, 133, 239, 41, 3, 249, 70, 65, 242, 40, 6, 69, 113, 44, 87, 108, 66, 142, 214, 212, 90, 150, 36, 183, 180, 98, 10, 190, 110, 56, 123, 85, 53, 219, 117, 28, 154, 208, 61, 28, 247, 48, 100, 220, 176, 119, 73, 240, 156, 125, 109, 214, 130, 181, 127, 204, 66, 117, 179, 12, 239, 92, 232, 242, 51, 143, 107, 195, 245, 58, 133, 143, 232, 221, 179, 44, 141, 127, 179, 255, 191, 13, 154, 14, 116, 25, 110, 102, 230, 118, 213, 173, 223, 185, 194, 231, 74, 122, 160, 93, 26, 39, 206, 114, 63, 8, 246, 78, 87, 80, 142, 102, 234, 243, 160, 208, 239, 87, 193, 45, 136, 134, 205, 191, 184, 138, 189, 131, 203, 13, 254, 54, 108, 240, 164, 18, 135, 251, 218, 189, 65, 106, 199, 238, 243, 56, 255, 125, 232, 75, 63, 135, 181, 36, 25, 75, 71, 225, 181, 120, 171, 150, 107, 94, 164, 115, 250, 201, 184, 250, 124, 141, 130, 23, 138, 118, 35, 100, 65, 93, 17, 6, 88, 136, 18, 149, 171, 70, 181, 129, 54, 9, 31, 50, 75, 103, 179, 153, 22, 98, 141, 40, 151, 141, 254, 70, 79, 79, 89, 70, 36, 37, 158, 118, 28, 69, 150, 81, 64, 167, 111, 206, 210, 67, 118, 215, 38, 195, 200, 218, 151, 6, 69, 254, 162, 165, 237, 57, 144, 240, 7, 31, 76, 124, 15, 8, 144, 62, 94, 86, 55, 88, 125, 248, 3, 48, 61, 80, 21, 108, 218, 207, 59, 150, 57, 99, 132, 216, 36, 57, 155, 97, 216, 106, 208, 230, 30, 218, 158, 26, 130, 208, 31, 215, 251, 37, 81, 172, 140, 129, 199, 90, 91, 120, 111, 141, 4, 214, 49, 45, 10, 123, 80, 15, 98, 192, 138, 93, 23, 102, 185, 120, 75, 73, 35, 245, 155, 187, 122, 128, 98, 75, 184, 79, 47, 28, 149, 141, 133, 135, 198, 106, 152, 69, 179, 90, 149, 33, 200, 78, 96, 102, 70, 186, 218, 248, 49, 62, 12, 57, 53, 1, 153, 206, 35, 209, 64, 114, 106, 14, 146, 146, 103, 243, 62, 188, 254, 220, 223, 196, 181, 175, 54, 194, 16, 34, 195, 10, 116, 105, 117, 186, 215, 53, 128, 131, 101, 251, 0, 105, 190, 140, 216, 151, 60, 164, 163, 187, 175, 210, 196, 249, 33, 95, 19, 205, 164, 189, 208, 127, 41, 44, 216, 229, 216, 64, 56, 62, 152, 0, 136, 128, 59, 138, 227, 185, 126, 27, 28, 60, 192, 233, 154, 218, 10, 21, 46, 72, 59, 89, 102, 216, 169, 231, 120, 202, 158, 58, 84, 155, 164, 94, 102, 8, 26, 140, 73, 113, 202, 154, 69, 58, 80, 197, 4, 229, 46, 66, 84, 29, 78, 23, 209, 200, 79, 155, 39, 252, 31, 88, 83, 15, 6, 35, 206, 215, 82, 237, 194, 196, 57, 181, 74, 126, 217, 85, 136, 145, 164, 173, 135, 213, 222, 212, 30, 211, 235, 105, 20, 248, 176, 34, 29, 249, 49, 102, 11, 104, 210, 19, 55, 118, 97, 247, 188, 65, 40, 73, 95, 135, 238, 73, 90, 143, 156, 156, 227, 4, 199, 14, 125, 30, 78, 80, 254, 155, 20, 185, 241, 4, 57, 9, 120, 199, 45, 95, 170, 248, 25, 82, 213, 171, 51, 169, 2, 12, 38, 88, 59, 128, 50, 97, 198, 119, 209, 27, 190, 254, 196, 91, 176, 122, 131, 210, 3, 47, 215, 111, 23, 218, 23, 148, 162, 39, 248, 55, 218, 133, 92, 6, 205, 55, 4, 111, 187, 128, 172, 197, 111, 109, 126, 170, 205, 40, 141, 30, 23, 90, 15, 222, 240, 168, 121, 29, 216, 34, 245, 184, 21, 41, 4, 116, 228, 69, 217, 245, 151, 23, 218, 203, 69, 62, 161, 79, 169, 155, 86, 250, 150, 59, 171, 185, 34, 15, 51, 22, 113, 99, 22, 182, 203, 192, 148, 46, 66, 86, 231, 55, 77, 44, 226, 173, 193, 67, 10, 96, 18, 142, 133, 2, 7, 98, 131, 222, 200, 119, 52, 247, 182, 50, 42, 115, 148, 187, 107, 75, 137, 236, 137, 143, 146, 107, 148, 12, 244, 80, 99, 229, 28, 233, 165, 48, 224, 119, 137, 67, 249, 31, 172, 255, 92, 199, 99, 16, 130, 145, 49, 152, 168, 142, 114, 184, 100, 235, 33, 25, 243, 102, 170, 29, 51, 98, 80, 253, 222, 199, 57, 74, 90, 11, 24, 75, 47, 194, 118, 167, 91, 153, 12, 36, 128, 132, 241, 171, 240, 64, 250, 223, 140, 67, 201, 241, 211, 42, 189, 221, 127, 201, 177, 35, 222, 2, 125, 245, 73, 228, 144, 145, 19, 174, 105, 70, 24, 27, 44, 147, 170, 72, 22, 221, 232, 26, 113, 148, 71, 14, 78, 31, 234, 158, 83, 40, 38, 6, 39, 86, 50, 41, 247, 106, 51, 229, 205, 76, 137, 131, 27, 50, 225, 15, 240, 80, 73, 157, 237, 200, 47, 35, 120, 51, 17, 219, 153, 79, 8, 11, 108, 244, 85, 255, 214, 109, 146, 175, 44, 36, 29, 206, 58, 76, 94, 78, 6, 114, 7, 102, 42, 84, 165, 99, 199, 156, 248, 177, 192, 87, 52, 193, 197, 44, 100, 235, 175, 35, 250, 65, 47, 14, 230, 229, 153, 74, 132, 219, 87, 226, 6, 232, 172, 5, 83, 190, 144, 134, 195, 98, 46, 207, 2, 240, 146, 69, 200, 236, 109, 1, 137, 138, 231, 51, 196, 87, 36, 196, 166, 102, 53, 164, 17, 221, 234, 224, 245, 80, 243, 87, 90, 189, 152, 107, 252, 91, 165, 106, 235, 44, 253, 180, 120, 39, 13, 231, 91, 175, 235, 174, 213, 169, 42, 151, 141, 71, 124, 208, 22, 144, 61, 86, 140, 76, 68, 222, 252, 252, 243, 19, 160, 142, 237, 12, 227, 19, 155, 149, 174, 14, 213, 37, 111, 225, 52, 120, 61, 245, 129, 64, 55, 224, 70, 221, 150, 196, 102, 55, 86, 32, 61, 34, 64, 177, 118, 201, 138, 172, 33, 195, 30, 220, 157, 84, 139, 255, 4, 252, 126, 158, 157, 30, 167, 134, 50, 246, 20, 239, 28, 122, 115, 187, 12, 121, 182, 68, 252, 127, 11, 67, 200, 211, 95, 81, 252, 239, 185, 226, 170, 254, 208, 12, 157, 157, 235, 83, 227, 133, 212, 170, 154, 71, 130, 153, 100, 197, 130, 241, 151, 187, 9, 248, 156, 190, 189, 103, 70, 250, 196, 187, 159, 93, 102, 228, 77, 208, 104, 4, 18, 129, 139, 53, 170, 9, 136, 102, 249, 130, 71, 132, 105, 195, 143, 162, 167, 93, 83, 71, 64, 29, 4, 120, 37, 11, 129, 118, 100, 250, 243, 249, 165, 248, 211, 224, 5, 66, 159, 218, 130, 205, 248, 80, 69, 97, 65, 255, 142, 131, 44, 71, 175, 6, 213, 175, 46, 202, 129, 47, 26, 34, 58, 220, 74, 175, 63, 12, 191, 88, 251, 92, 50, 176, 138, 202, 100, 47, 78, 234, 152, 216, 180, 91, 186, 3, 104, 198, 6, 224, 99, 71, 80, 68, 227, 148, 137, 117, 102, 231, 219, 204, 28, 227, 187, 18, 98, 241, 60, 168, 190, 151, 26, 187, 79, 193, 158, 171, 88, 139, 226, 154, 55, 148, 75, 201, 88, 232, 183, 246, 98, 13, 221, 62, 114, 102, 186, 143, 144, 126, 167, 162, 64, 135, 154, 2, 242, 115, 0, 86, 19, 153, 237, 114, 185, 78, 226, 36, 220, 107, 8, 178, 208, 108, 77, 31, 154, 7, 115, 97, 211, 21, 2, 12, 97, 203, 156, 138, 7, 89, 161, 249, 103, 19, 144, 177, 65, 131, 76, 97, 247, 159, 251, 138, 107, 85, 2, 161, 116, 69, 111, 23, 22, 135, 165, 59, 8, 121, 227, 236, 153, 63, 30, 141, 227, 59, 24, 69, 118, 25, 233, 107, 154, 133, 236, 165, 105, 31, 22, 49, 255, 20, 82, 148, 124, 110, 26, 170, 207, 228, 75, 99, 66, 225, 23, 133, 221, 170, 226, 34, 176, 159, 148, 244, 183, 104, 77, 220, 133, 26, 49, 59, 229, 189, 37, 197, 194, 85, 22, 182, 22, 167, 211, 177, 6, 225, 190, 176, 16, 162, 86, 184, 27, 236, 226, 0, 65, 83, 47, 42, 184, 133, 222, 117, 39, 15, 177, 46, 239, 61, 21, 103, 128, 244, 91, 150, 61, 63, 199, 65, 163, 185, 120, 122, 165, 246, 160, 126, 207, 135, 82, 60, 0, 109, 7, 192, 79, 169, 88, 1, 195, 169, 107, 244, 12, 56, 233, 21, 197, 1, 122, 227, 250, 134, 226, 9, 175, 180, 171, 107, 195, 172, 73, 194, 218, 192, 62, 255, 189, 215, 17, 245, 180, 79, 159, 166, 56, 90, 229, 189, 132, 200, 62, 122, 221, 190, 54, 63, 209, 72, 3, 236, 228, 228, 80, 176, 61, 15, 212, 20, 152, 232, 77, 171, 238, 181, 77, 196, 64, 94, 118, 76, 35, 92, 132, 200, 232, 86, 215, 179, 105, 229, 8, 233, 226, 239, 221, 102, 13, 99, 249, 190, 69, 61, 207, 175, 143, 253, 115, 14, 184, 198, 154, 20, 13, 214, 144, 220, 159, 228, 88, 41, 112, 117, 197, 172, 102, 197, 190, 169, 13, 23, 223, 14, 164, 81, 192, 234, 46, 151, 18, 234, 45, 226, 72, 147, 218, 11, 56, 207, 51, 220, 158, 32, 171, 63, 53, 229, 15, 1, 230, 104, 228, 234, 127, 80, 4, 98, 214, 212, 250, 168, 115, 236, 249, 241, 253, 21, 90, 157, 176, 116, 239, 191, 205, 112, 105, 69, 188, 111, 244, 112, 50, 177, 69, 12, 79, 42, 254, 171, 32, 168, 88, 38, 237, 88, 183, 189, 107, 105, 56, 135, 220, 141, 135, 222, 71, 165, 242, 38, 50, 0, 130, 40, 227, 73, 134, 254, 18, 74, 32, 94, 150, 183, 166, 70, 149, 89, 42, 68, 153, 72, 155, 23, 189, 87, 53, 224, 110, 253, 101, 183, 10, 168, 100, 20, 235, 162, 103, 225, 126, 116, 68, 105, 45, 190, 78, 189, 128, 174, 225, 214, 255, 223, 100, 153, 151, 189, 135, 163, 78, 237, 218, 22, 70, 54, 222, 199, 250, 52, 62, 219, 118, 176, 216, 220, 97, 226, 20, 174, 220, 12, 188, 52, 60, 120, 147, 139, 61, 2, 17, 72, 101, 119, 138, 105, 204, 42, 49, 137, 164, 4, 140, 251, 138, 138, 163, 94, 15, 224, 129, 86, 38, 21, 135, 43, 79, 80, 21, 210, 154, 232, 47, 152, 162, 237, 0, 57, 167, 6, 30, 120, 110, 203, 96, 193, 226, 104, 122, 21, 30, 241, 218, 91, 246, 40, 115, 102, 138, 70, 0, 32, 11, 231, 227, 58, 5, 203, 116, 6, 81, 9, 156, 9, 48, 17, 220, 119, 76, 125, 22, 234, 44, 65, 68, 127, 47, 43, 137, 116, 191, 139, 150, 35, 155, 157, 12, 207, 37, 50, 223, 22, 75, 149, 132, 114, 186, 232, 90, 144, 55, 222, 58, 31, 155, 176, 233, 105, 206, 7, 234, 31, 245, 229, 46, 77, 234, 77, 243, 172, 90, 127, 89, 119, 197, 151, 251, 236, 147, 248, 153, 195, 240, 102, 248, 68, 224, 212, 130, 235, 110, 22, 190, 103, 140, 236, 69, 125, 236, 29, 168, 205, 199, 176, 102, 171, 121, 217, 57, 83, 236, 112, 46, 158, 9, 172, 203, 3, 231, 179, 102, 63, 69, 166, 252, 201, 135, 207, 62, 117, 58, 23, 88, 118, 191, 58, 249, 31, 196, 235, 223, 7, 187, 20, 27, 180, 208, 113, 164, 134, 80, 224, 107, 198, 160, 121, 231, 156, 12, 240, 115, 83, 168, 5, 244, 40, 82, 237, 3, 12, 180, 53, 134, 212, 75, 151, 104, 239, 110, 137, 204, 211, 9, 59, 83, 120, 30, 219, 124, 155, 134, 20, 125, 98, 125, 47, 207, 52, 212, 249, 72, 28, 17, 169, 255, 219, 2, 226, 183, 126, 38, 81, 205, 139, 170, 126, 75, 84, 64, 122, 177, 164, 96, 99, 122, 34, 47, 149, 159, 36, 77, 96, 209, 64, 127, 252, 223, 149, 74, 234, 76, 204, 111, 241, 166, 128, 202, 47, 180, 12, 87, 99, 249, 49, 232, 241, 240, 164, 88, 98, 194, 114, 31, 47, 70, 137, 19, 39, 82, 219, 82, 50, 120, 52, 56, 24, 66, 9, 107, 67, 3, 118, 206, 129, 84, 137, 97, 69, 93, 187, 16, 128, 57, 90, 185, 141, 18, 216, 214, 172, 18, 11, 66, 112, 249, 154, 171, 160, 194, 117, 89, 193, 58, 133, 102, 104, 77, 94, 143, 188, 229, 110, 16, 18, 28, 208, 163, 171, 115, 205, 32, 80, 148, 190, 29, 35, 105, 205, 103, 37, 246, 24, 188, 206, 245, 190, 218, 115, 234, 59, 106, 236, 183, 170, 123, 3, 163, 2, 98, 158, 135, 65, 81, 221, 178, 246, 62, 133, 95, 70, 134, 114, 223, 107, 157, 203, 28, 230, 229, 166, 125, 206, 29, 108, 138, 151, 110, 225, 159, 115, 177, 135, 159, 105, 214, 209, 88, 183, 228, 92, 9, 79, 74, 77, 186, 222, 221, 214, 216, 66, 236, 213, 186, 141, 36, 42, 118, 202, 115, 154, 139, 116, 140, 200, 136, 179, 54, 218, 94, 6, 178, 157, 9, 172, 212, 142, 163, 230, 221, 162, 130, 139, 68, 193, 208, 61, 192, 45, 221, 190, 79, 4, 53, 146, 242, 244, 167, 158, 23, 124, 191, 1, 198, 0, 18, 200, 245, 155, 237, 33, 97, 41, 89, 237, 103, 127, 23, 212, 12, 132, 5, 172, 132, 238, 193, 104, 33, 96, 76, 125, 48, 138, 156, 192, 231, 200, 7, 90, 82, 98, 169, 50, 123, 137, 183, 191, 255, 254, 136, 227, 253, 90, 168, 46, 189, 159, 91, 27, 114, 250, 62, 94, 233, 62, 221, 157, 202, 4, 110, 103, 37, 59, 75, 138, 83, 58, 46, 127, 119, 186, 187, 151, 126, 165, 240, 167, 163, 133, 189, 245, 141, 102, 163, 215, 122, 51, 78, 129, 103, 90, 107, 22, 8, 119, 226, 39, 95, 79, 186, 66, 85, 140, 113, 225, 249, 151, 197, 40, 173, 185, 227, 48, 77, 80, 182, 45, 101, 117, 185, 173, 136, 73, 102, 171, 143, 25, 102, 120, 36, 81, 14, 153, 104, 103, 220, 22, 122, 9, 2, 246, 116, 139, 117, 194, 42, 41, 21, 136, 56, 102, 95, 222, 63, 202, 64, 131, 151, 100, 132, 26, 92, 202, 70, 241, 140, 140, 223, 94, 139, 233, 26, 33, 34, 196, 252, 170, 84, 208, 17, 116, 85, 213, 199, 125, 167, 188, 142, 92, 158, 242, 20, 150, 105, 49, 91, 240, 199, 89, 73, 8, 224, 74, 179, 100, 65, 36, 133, 184, 125, 151, 213, 30, 33, 186, 240, 188, 179, 227, 190, 29, 247, 106, 138, 144, 24, 209, 71, 209, 25, 99, 177, 19, 125, 230, 22, 62, 198, 130, 252, 67, 225, 225, 158, 21, 134, 221, 41, 126, 213, 115, 56, 220, 101, 201, 24, 17, 219, 196, 217, 193, 188, 182, 49, 33, 190, 104, 170, 73, 179, 177, 250, 157, 234, 98, 254, 132, 84, 82, 247, 96, 203, 219, 89, 249, 158, 46, 221, 221, 27, 216, 106, 18, 118, 184, 115, 168, 108, 33, 228, 159, 64, 145, 188, 246, 243, 231, 50, 60, 110, 53, 149, 71, 40, 254, 182, 232, 131, 28, 99, 229, 49, 171, 116, 93, 239, 135, 48, 131, 89, 63, 177, 78, 49, 39, 68, 140, 163, 195, 113, 197, 132, 38, 180, 150, 142, 20, 94, 178, 92, 40, 141, 42, 156, 121, 37, 13, 36, 94, 143, 17, 254, 55, 199, 118, 232, 199, 107, 21, 125, 47, 205, 191, 75, 223, 87, 60, 20, 17, 123, 198, 250, 118, 253, 5, 87, 161, 148, 210, 102, 200, 214, 106, 176, 163, 9, 3, 166, 16, 170, 164, 161, 233, 224, 49, 231, 95, 207, 230, 180, 91, 41, 2, 239, 176, 23, 33, 72, 73, 37, 213, 15, 226, 56, 149, 3, 245, 80, 46, 84, 227, 211, 17, 122, 196, 60, 162, 58, 67, 44, 93, 79, 140, 230, 75, 249, 21, 54, 50, 88, 125, 95, 24, 144, 169, 72, 128, 112, 185, 45, 43, 167, 217, 118, 177, 93, 27, 92, 109, 127, 17, 96, 216, 163, 225, 155, 204, 191, 32, 162, 52, 204, 88, 59, 88, 216, 97, 135, 12, 17, 129, 163, 148, 132, 121, 95, 109, 114, 119, 111, 165, 244, 236, 193, 106, 249, 18, 114, 194, 244, 168, 183, 40, 30, 194, 219, 133, 187, 50, 40, 239, 208, 47, 245, 137, 161, 155, 246, 205, 211, 62, 35, 164, 196, 196, 41, 223, 164, 11, 249, 0, 194, 163, 12, 129, 162, 242, 6, 57, 95, 220, 178, 34, 170, 209, 48, 62, 142, 107, 137, 98, 234, 36, 149, 87, 224, 65, 172, 15, 178, 44, 85, 174, 65, 254, 255, 92, 152, 62, 94, 89, 145, 159, 198, 65, 205, 23, 59, 230, 203, 133, 171, 3, 11, 61, 122, 131, 196, 54, 181, 134, 100, 223, 31, 106, 164, 200, 78, 115, 85, 175, 161, 106, 38, 105, 112, 49, 51, 74, 6, 79, 236, 142, 43, 164, 66, 181, 87, 160, 1, 193, 138, 83, 70, 89, 198, 20, 138, 74, 141, 61, 121, 10, 118, 27, 81, 22, 117, 7, 172, 195, 227, 76, 181, 63, 189, 95, 37, 160, 216, 13, 70, 20, 229, 108, 142, 81, 206, 108, 218, 2, 139, 17, 133, 65, 211, 155, 219, 24, 246, 72, 174, 221, 153, 131, 136, 30, 146, 106, 94, 230, 33, 8, 192, 207, 75, 51, 200, 170, 138, 54, 11, 7, 127, 164, 39, 85, 171, 52, 104, 219, 254, 201, 24, 191, 1, 33, 129, 76, 142, 28, 150, 121, 31, 22, 8, 5, 202, 220, 128, 202, 132, 221, 29, 46, 138, 16, 33, 205, 132, 231, 134, 162, 47, 164, 102, 252, 97, 117, 18, 186, 244, 230, 23, 55, 184, 65, 63, 173, 140, 204, 187, 99, 37, 80, 83, 217, 114, 65, 180, 95, 241, 90, 246, 123, 19, 114, 124, 248, 13, 234, 5, 210, 167, 81, 97, 37, 152, 75, 18, 82, 179, 247, 136, 134, 37, 65, 197, 58, 248, 251, 130, 179, 17, 148, 88, 97, 232, 61, 100, 14, 207, 187, 81, 61, 175, 76, 241, 237, 205, 41, 4, 61, 51, 228, 231, 173, 93, 45, 177, 189, 26, 183, 194, 1, 22, 151, 240, 164, 109, 204, 97, 32, 105, 89, 94, 188, 171, 26, 141, 97, 145, 78, 53, 105, 95, 179, 190, 80, 241, 203, 54, 42, 4, 7, 223, 5, 195, 188, 116, 95, 223, 119, 152, 110, 221, 136, 41, 224, 127, 178, 128, 40, 151, 93, 211, 118, 199, 33, 176, 149, 201, 65, 221, 237, 190, 66, 144, 138, 100, 17, 104, 54, 70, 13, 45, 223, 224, 126, 252, 100, 222, 210, 186, 127, 37, 51, 209, 195, 68, 125, 184, 219, 80, 30, 223, 163, 55, 70, 5, 218, 164, 70, 84, 33, 129, 215, 146, 253, 174, 92, 23, 28, 122, 153, 228, 171, 138, 207, 163, 187, 221, 33, 178, 139, 176, 128, 209, 121, 155, 55, 87, 17, 150, 8, 8, 221, 163, 189, 141, 111, 7, 203, 190, 0, 195, 53, 66, 160, 23, 145, 156, 229, 158, 140, 75, 174, 70, 190, 253, 121, 181, 72, 17, 97, 35, 82, 159, 21, 238, 4, 58, 115, 255, 2, 10, 25, 240, 237, 110, 251, 223, 207, 242, 36, 60, 64, 219, 61, 227, 4, 79, 21, 62, 184, 221, 251, 33, 171, 122, 20, 91, 175, 137, 178, 81, 67, 46, 148, 154, 252, 120, 79, 3, 234, 104, 69, 89, 141, 77, 161, 242, 36, 100, 33, 13, 134, 205, 241, 154, 34, 61, 0, 12, 254, 49, 250, 27, 124, 233, 137, 161, 141, 111, 133, 51, 123, 196, 255, 64, 139, 249, 228, 23, 124, 52, 10, 64, 98, 129, 207, 157, 246, 127, 179, 51, 233, 152, 187, 245, 185, 176, 16, 244, 229, 34, 85, 220, 221, 90, 244, 30, 193, 44, 137, 167, 187, 126, 43, 218, 39, 216, 113, 221, 38, 5, 64, 254, 145, 21, 84, 234, 48, 108, 114, 99, 45, 40, 45, 70, 144, 34, 164, 179, 25, 143, 28, 17, 141, 223, 248, 21, 187, 231, 191, 46, 47, 104, 2, 72, 45, 216, 139, 38, 63, 125, 20, 164, 19, 222, 102, 250, 140, 21, 130, 14, 70, 157, 55, 158, 172, 143, 163, 207, 37, 233, 49, 27, 189, 132, 140, 115, 140, 50, 93, 42, 189, 184, 76, 35, 233, 228, 147, 245, 12, 165, 66, 55, 110, 57, 16, 155, 198, 223, 24, 115, 99, 77, 220, 180, 44, 191, 69, 127, 168, 88, 38, 155, 56, 53, 29, 202, 164, 154, 24, 220, 61, 129, 154, 41, 208, 134, 50, 71, 10, 129, 115, 123, 210, 201, 79, 95, 13, 255, 10, 151, 55, 145, 87, 174, 128, 184, 245, 174, 189, 120, 111, 154, 90, 67, 1, 95, 69, 160, 141, 97, 211, 46, 225, 214, 207, 0, 142, 4, 59, 152, 213, 124, 105, 81, 102, 55, 25, 0, 68, 201, 247, 246, 1, 65, 15, 136, 181, 151, 184, 231, 47, 149, 56, 224, 152, 111, 215, 227, 43, 188, 45, 84, 238, 244, 24, 235, 161, 45, 222, 156, 187, 242, 113, 82, 84, 31, 201, 103, 197, 3, 185, 64, 122, 147, 41, 220, 1, 216, 247, 195, 164, 182, 253, 3, 34, 223, 174, 192, 207, 231, 67, 206, 58, 171, 136, 172, 46, 173, 245, 29, 125, 80, 180, 115, 234, 23, 224, 15, 71, 6, 26, 147, 152, 227, 140, 113, 225, 216, 205, 194, 144, 151, 25, 42, 62, 105, 167, 130, 222, 139, 74, 145, 168, 13, 99, 238, 168, 110, 76, 197, 78, 153, 183, 237, 84, 4, 120, 129, 56, 226, 52, 172, 167, 238, 140, 38, 178, 234, 155, 158, 65, 34, 164, 250, 146, 252, 137, 64, 120, 186, 226, 234, 145, 116, 96, 41, 246, 2, 111, 20, 131, 149, 160, 208, 24, 32, 253, 50, 131, 222, 200, 199, 89, 15, 248, 217, 48, 129, 52, 115, 185, 27, 72, 10, 58, 44, 87, 108, 224, 195, 97, 41, 183, 87, 162, 199, 101, 247, 69, 10, 200, 220, 254, 237, 206, 114, 223, 183, 117, 85, 164, 125, 80, 223, 75, 14, 143, 133, 225, 235, 192, 39, 206, 26, 203, 106, 72, 158, 221, 28, 149, 15, 9, 23, 186, 54, 164, 16, 220, 219, 231, 193, 67, 154, 31, 13, 46, 255, 82, 227, 170, 32, 254, 96, 45, 76, 193, 54, 155, 231, 18, 76, 159, 191, 74, 228, 161, 73, 89, 22, 112, 34, 138, 83, 7, 209, 172, 220, 176, 242, 106, 65, 187, 183, 78, 198, 62, 219, 198, 72, 147, 41, 244, 164, 73, 231, 131, 137, 113, 159, 224, 201, 168, 149, 147, 145, 106, 102, 122, 1, 47, 88, 145, 213, 203, 234, 236, 45, 241, 224, 90, 196, 141, 4, 44, 142, 0, 253, 106, 155, 215, 221, 76, 31, 157, 127, 204], - [158, 105, 89, 111, 162, 130, 98, 14, 242, 245, 233, 74, 209, 78, 121, 63, 30, 231, 50, 206, 109, 11, 209, 179, 6, 68, 35, 80, 168, 207, 143, 56, 97, 221, 113, 123, 182, 250, 212, 111, 232, 155, 170, 235, 7, 164, 190, 58, 22, 37, 187, 87, 153, 171, 40, 46, 110, 200, 48, 149, 75, 25, 104, 9, 116, 147, 79, 125, 124, 105, 194, 132, 227, 30, 11, 184, 252, 150, 242, 4, 117, 180, 37, 212, 112, 3, 85, 121, 33, 91, 119, 53, 114, 75, 125, 34, 254, 213, 222, 138, 150, 161, 68, 56, 52, 122, 72, 217, 42, 125, 17, 244, 151, 73, 123, 118, 183, 9, 63, 17, 145, 179, 172, 0, 254, 7, 48, 103, 123, 248, 48, 243, 44, 244, 245, 43, 15, 121, 205, 162, 7, 247, 217, 32, 12, 99, 110, 131, 195, 11, 69, 181, 63, 18, 66, 27, 9, 156, 12, 242, 93, 119, 51, 64, 79, 152, 89, 45, 248, 26, 122, 184, 206, 26, 65, 231, 71, 167, 110, 77, 88, 69, 77, 107, 218, 72, 9, 169, 7, 71, 70, 183, 44, 155, 152, 132, 195, 233, 241, 79, 30, 133, 114, 142, 82, 76, 7, 3, 16, 7, 55, 106, 49, 226, 44, 234, 186, 250, 113, 123, 195, 181, 232, 62, 126, 50, 143, 139, 161, 26, 92, 73, 27, 115, 153, 184, 178, 199, 30, 83, 160, 30, 234, 203, 3, 99, 216, 164, 136, 153, 35, 228, 158, 25, 94, 152, 8, 13, 56, 139, 234, 81, 252, 55, 41, 56, 142, 12, 162, 179, 28, 174, 77, 121, 225, 152, 240, 45, 29, 174, 99, 31, 102, 109, 20, 219, 150, 48, 89, 150, 210, 112, 129, 221, 5, 12, 38, 18, 183, 86, 99, 92, 72, 208, 207, 233, 90, 199, 230, 235, 0, 241, 92, 125, 190, 238, 165, 58, 61, 147, 138, 161, 137, 156, 10, 202, 72, 218, 70, 169, 63, 150, 58, 143, 158, 222, 247, 118, 171, 179, 223, 191, 146, 41, 96, 204, 21, 96, 175, 39, 61, 11, 129, 255, 32, 209, 99, 201, 51, 156, 54, 221, 67, 188, 20, 207, 109, 73, 219, 135, 195, 108, 19, 6, 23, 87, 176, 106, 248, 201, 106, 76, 135, 75, 212, 121, 5, 74, 212, 155, 176, 111, 166, 113, 153, 235, 70, 47, 159, 202, 180, 141, 15, 47, 105, 31, 242, 204, 89, 194, 134, 25, 239, 38, 125, 244, 36, 240, 32, 108, 141, 73, 174, 28, 19, 251, 159, 143, 177, 68, 147, 124, 222, 53, 6, 244, 234, 69, 248, 72, 191, 4, 178, 21, 136, 186, 102, 104, 150, 217, 26, 252, 89, 91, 119, 242, 19, 58, 220, 195, 40, 81, 99, 73, 159, 240, 59, 138, 159, 116, 143, 176, 151, 222, 194, 13, 37, 75, 252, 82, 200, 126, 115, 159, 142, 56, 7, 246, 166, 207, 102, 59, 95, 47, 51, 109, 92, 37, 28, 90, 38, 126, 163, 85, 220, 37, 69, 54, 183, 115, 244, 189, 219, 239, 165, 212, 107, 214, 30, 120, 92, 176, 50, 44, 129, 208, 238, 108, 25, 65, 129, 227, 65, 134, 40, 129, 221, 78, 57, 73, 89, 184, 79, 218, 121, 68, 3, 156, 114, 218, 49, 184, 169, 148, 244, 48, 150, 40, 89, 91, 246, 11, 163, 200, 138, 160, 202, 8, 231, 4, 64, 238, 192, 0, 246, 248, 215, 90, 163, 119, 153, 26, 121, 96, 33, 144, 0, 83, 21, 170, 36, 252, 154, 154, 177, 94, 2, 166, 235, 155, 57, 123, 160, 109, 202, 109, 42, 71, 241, 253, 0, 182, 133, 41, 48, 233, 203, 64, 66, 88, 20, 44, 71, 245, 213, 35, 255, 240, 89, 129, 92, 145, 126, 15, 5, 133, 136, 123, 192, 121, 92, 63, 13, 24, 189, 80, 158, 112, 56, 76, 44, 224, 116, 237, 127, 60, 72, 177, 186, 156, 41, 225, 228, 138, 214, 42, 216, 50, 77, 151, 214, 16, 127, 173, 49, 184, 194, 235, 81, 180, 133, 192, 53, 215, 172, 190, 126, 101, 31, 150, 156, 0, 134, 85, 213, 113, 85, 205, 212, 197, 26, 37, 101, 38, 165, 255, 236, 112, 231, 150, 243, 175, 42, 26, 113, 243, 101, 97, 184, 203, 136, 121, 247, 77, 51, 105, 81, 147, 52, 224, 151, 167, 62, 65, 103, 45, 169, 167, 217, 223, 186, 255, 32, 238, 61, 68, 7, 120, 41, 144, 154, 150, 18, 171, 84, 64, 161, 179, 35, 180, 20, 236, 44, 147, 103, 8, 221, 164, 189, 30, 150, 148, 179, 65, 100, 165, 204, 23, 157, 68, 173, 183, 7, 73, 89, 186, 233, 103, 251, 176, 128, 138, 217, 234, 10, 46, 60, 55, 99, 29, 129, 91, 37, 67, 222, 80, 105, 228, 47, 76, 219, 110, 14, 206, 51, 94, 178, 193, 4, 162, 3, 126, 186, 17, 90, 24, 19, 7, 68, 223, 111, 221, 226, 25, 246, 4, 241, 193, 98, 39, 55, 60, 57, 63, 150, 212, 209, 6, 229, 25, 79, 67, 56, 29, 65, 179, 90, 201, 155, 248, 104, 96, 242, 40, 234, 129, 186, 183, 40, 209, 167, 194, 231, 141, 235, 116, 249, 88, 161, 168, 201, 231, 111, 72, 99, 144, 105, 135, 73, 161, 139, 26, 114, 33, 92, 86, 17, 222, 162, 143, 246, 54, 92, 61, 198, 179, 199, 31, 45, 217, 188, 106, 67, 2, 241, 93, 172, 101, 207, 105, 110, 134, 60, 136, 154, 215, 102, 133, 65, 14, 151, 191, 176, 182, 106, 144, 180, 222, 76, 62, 124, 185, 219, 188, 92, 124, 178, 152, 59, 18, 155, 116, 75, 253, 69, 112, 204, 123, 204, 122, 59, 65, 149, 176, 236, 51, 131, 115, 242, 200, 13, 101, 203, 43, 239, 162, 163, 175, 210, 25, 107, 159, 140, 219, 162, 160, 136, 253, 160, 193, 27, 200, 50, 123, 200, 30, 70, 249, 76, 41, 219, 218, 186, 117, 216, 21, 101, 245, 71, 228, 101, 129, 3, 210, 210, 134, 186, 39, 145, 14, 207, 158, 198, 245, 62, 210, 161, 38, 247, 210, 199, 111, 174, 182, 233, 138, 250, 234, 22, 177, 194, 147, 151, 207, 211, 178, 154, 21, 189, 115, 24, 21, 89, 212, 144, 115, 57, 171, 154, 234, 157, 33, 127, 100, 173, 164, 95, 60, 111, 23, 81, 201, 192, 205, 171, 232, 177, 21, 151, 141, 124, 114, 125, 27, 86, 32, 135, 72, 95, 87, 58, 235, 177, 216, 178, 68, 97, 150, 95, 185, 140, 192, 248, 124, 47, 230, 52, 24, 88, 209, 209, 12, 94, 1, 204, 130, 19, 78, 192, 162, 62, 157, 239, 159, 212, 154, 119, 153, 222, 156, 118, 190, 68, 190, 210, 174, 102, 171, 185, 30, 220, 150, 220, 128, 83, 26, 233, 228, 184, 234, 64, 152, 53, 103, 64, 5, 17, 51, 239, 43, 137, 190, 9, 21, 82, 172, 209, 168, 28, 44, 188, 124, 232, 160, 116, 143, 12, 26, 130, 238, 60, 142, 46, 254, 103, 51, 82, 80, 61, 93, 91, 72, 120, 127, 49, 67, 180, 44, 229, 187, 218, 94, 225, 201, 67, 212, 151, 101, 47, 101, 183, 67, 41, 205, 239, 108, 8, 7, 224, 22, 92, 168, 188, 54, 142, 21, 19, 157, 110, 240, 24, 155, 106, 97, 251, 118, 140, 99, 5, 254, 193, 45, 216, 64, 180, 67, 199, 59, 226, 168, 179, 135, 122, 179, 146, 250, 22, 233, 210, 107, 94, 96, 3, 2, 203, 249, 239, 74, 38, 87, 239, 46, 75, 189, 38, 16, 179, 48, 23, 60, 2, 26, 233, 41, 89, 96, 139, 101, 234, 228, 194, 68, 215, 65, 154, 94, 218, 57, 60, 212, 41, 41, 47, 68, 229, 17, 110, 199, 194, 46, 55, 84, 26, 179, 225, 63, 163, 72, 240, 44, 191, 95, 28, 180, 32, 84, 152, 57, 72, 168, 1, 68, 51, 84, 136, 142, 211, 149, 83, 214, 246, 34, 137, 103, 239, 116, 64, 27, 6, 97, 85, 136, 21, 215, 48, 147, 187, 140, 147, 217, 89, 137, 143, 141, 246, 103, 181, 43, 180, 206, 240, 19, 45, 252, 41, 228, 238, 182, 3, 76, 150, 241, 228, 102, 61, 124, 108, 204, 199, 4, 151, 177, 151, 124, 155, 2, 185, 1, 219, 128, 123, 30, 240, 59, 28, 213, 253, 12, 162, 97, 246, 42, 4, 20, 96, 131, 240, 136, 155, 96, 70, 172, 149, 115, 60, 94, 183, 45, 35, 190, 107, 63, 209, 125, 45, 204, 141, 222, 144, 222, 82, 70, 0, 218, 166, 64, 178, 69, 123, 153, 109, 175, 186, 49, 242, 37, 184, 155, 43, 183, 24, 164, 152, 21, 75, 63, 75, 45, 182, 29, 72, 178, 93, 117, 231, 39, 73, 139, 77, 10, 226, 167, 116, 239, 190, 137, 184, 58, 221, 24, 101, 83, 202, 49, 128, 70, 161, 43, 150, 35, 81, 170, 172, 9, 57, 45, 76, 131, 199, 199, 28, 31, 48, 171, 242, 20, 26, 15, 190, 187, 128, 103, 194, 53, 99, 127, 187, 134, 26, 182, 217, 28, 83, 176, 253, 92, 82, 203, 51, 22, 230, 19, 68, 88, 92, 50, 53, 143, 216, 231, 192, 15, 168, 128, 14, 93, 248, 231, 29, 30, 235, 120, 77, 155, 189, 253, 97, 175, 152, 70, 177, 71, 254, 220, 18, 108, 241, 48, 90, 133, 254, 47, 61, 180, 239, 139, 91, 211, 67, 99, 255, 27, 193, 66, 119, 40, 68, 31, 215, 93, 80, 116, 54, 128, 61, 69, 203, 249, 95, 1, 115, 243, 100, 83, 118, 137, 90, 58, 54, 246, 222, 198, 228, 224, 75, 58, 103, 53, 34, 151, 205, 112, 170, 183, 49, 110, 140, 70, 201, 152, 1, 12, 72, 84, 7, 240, 223, 220, 95, 126, 131, 37, 159, 53, 17, 13, 41, 202, 191, 219, 21, 94, 88, 124, 125, 136, 17, 97, 114, 140, 40, 158, 49, 216, 143, 204, 10, 94, 231, 43, 139, 252, 165, 98, 112, 232, 9, 103, 21, 119, 26, 183, 122, 211, 1, 245, 149, 79, 143, 69, 203, 236, 24, 172, 66, 146, 106, 249, 169, 147, 30, 57, 56, 156, 116, 24, 100, 60, 222, 97, 91, 240, 202, 230, 213, 222, 8, 153, 226, 151, 67, 136, 254, 57, 52, 194, 84, 59, 124, 79, 69, 145, 90, 190, 172, 198, 158, 0, 47, 134, 67, 198, 253, 82, 69, 243, 247, 192, 17, 103, 24, 45, 169, 172, 136, 83, 109, 96, 79, 202, 221, 6, 91, 84, 135, 17, 23, 235, 200, 146, 158, 70, 139, 209, 161, 195, 50, 21, 99, 233, 56, 220, 243, 157, 72, 206, 107, 247, 160, 100, 47, 255, 100, 199, 188, 53, 249, 238, 1, 173, 199, 103, 76, 105, 87, 244, 8, 244, 46, 156, 101, 59, 240, 54, 111, 71, 23, 10, 27, 178, 40, 5, 18, 57, 250, 30, 174, 9, 177, 92, 147, 154, 244, 133, 67, 135, 183, 66, 216, 202, 146, 205, 246, 44, 78, 212, 120, 33, 57, 38, 197, 36, 205, 34, 104, 51, 107, 85, 222, 173, 193, 83, 233, 107, 201, 8, 206, 58, 112, 247, 75, 48, 46, 220, 12, 186, 215, 198, 115, 197, 166, 80, 210, 183, 60, 94, 10, 121, 83, 173, 176, 192, 146, 23, 33, 144, 136, 79, 34, 107, 230, 75, 119, 208, 93, 82, 227, 255, 64, 181, 108, 246, 167, 211, 34, 176, 171, 171, 147, 31, 135, 218, 96, 224, 137, 172, 178, 71, 180, 197, 90, 227, 170, 123, 146, 174, 235, 225, 47, 227, 38, 245, 25, 86, 55, 14, 169, 104, 222, 255, 38, 229, 6, 205, 169, 111, 103, 68, 31, 103, 5, 143, 43, 169, 208, 195, 31, 62, 98, 21, 25, 225, 23, 168, 9, 234, 30, 194, 105, 245, 119, 222, 39, 161, 17, 1, 96, 139, 159, 117, 250, 137, 240, 225, 94, 211, 85, 36, 196, 177, 97, 3, 72, 185, 235, 40, 156, 24, 114, 208, 245, 201, 29, 126, 208, 211, 128, 25, 235, 68, 128, 118, 137, 254, 117, 119, 188, 31, 200, 251, 250, 211, 172, 110, 231, 185, 194, 70, 34, 110, 91, 212, 108, 170, 106, 159, 178, 195, 98, 198, 238, 9, 243, 86, 221, 3, 31, 83, 163, 9, 37, 198, 143, 66, 235, 174, 229, 10, 219, 227, 218, 0, 100, 224, 197, 113, 105, 116, 238, 114, 98, 171, 200, 151, 162, 1, 49, 10, 45, 106, 15, 183, 64, 101, 0, 213, 225, 63, 77, 121, 67, 54, 75, 222, 217, 137, 193, 231, 70, 238, 67, 60, 116, 134, 200, 93, 18, 252, 149, 8, 147, 110, 237, 23, 21, 197, 214, 254, 13, 196, 215, 222, 217, 167, 157, 252, 123, 33, 197, 205, 16, 23, 62, 77, 212, 234, 169, 54, 211, 59, 32, 32, 227, 77, 127, 235, 217, 72, 98, 175, 72, 88, 235, 249, 63, 135, 202, 89, 94, 32, 0, 66, 202, 39, 11, 119, 164, 251, 65, 165, 65, 115, 124, 198, 105, 7, 240, 15, 88, 47, 84, 62, 124, 11, 76, 113, 25, 176, 103, 38, 17, 242, 143, 196, 216, 133, 174, 173, 117, 32, 109, 126, 71, 130, 69, 202, 133, 61, 154, 167, 239, 219, 17, 23, 176, 43, 13, 53, 95, 251, 61, 80, 175, 57, 143, 234, 64, 65, 208, 101, 154, 102, 254, 147, 235, 84, 140, 123, 35, 238, 160, 43, 78, 96, 172, 80, 123, 201, 61, 114, 13, 164, 38, 153, 181, 252, 110, 158, 44, 192, 255, 66, 43, 177, 197, 108, 9, 155, 39, 146, 250, 2, 123, 78, 70, 193, 32, 69, 234, 144, 137, 59, 122, 60, 59, 3, 67, 158, 186, 28, 60, 71, 41, 32, 215, 225, 182, 254, 239, 237, 188, 139, 11, 167, 63, 50, 144, 115, 135, 191, 211, 206, 28, 46, 250, 149, 29, 176, 189, 152, 54, 47, 96, 253, 95, 130, 100, 199, 143, 109, 195, 36, 183, 237, 118, 71, 141, 127, 104, 46, 90, 147, 109, 146, 240, 233, 70, 249, 162, 45, 83, 91, 229, 162, 60, 189, 181, 137, 29, 229, 202, 200, 193, 9, 116, 137, 140, 195, 180, 170, 77, 10, 107, 190, 190, 119, 75, 192, 51, 109, 53, 163, 235, 26, 195, 194, 176, 219, 177, 249, 208, 160, 199, 1, 197, 131, 75, 246, 12, 55, 102, 225, 137, 131, 255, 90, 30, 167, 123, 103, 224, 80, 215, 100, 130, 160, 162, 207, 182, 75, 113, 34, 62, 181, 17, 172, 201, 61, 49, 228, 29, 25, 105, 158, 61, 130, 206, 42, 160, 146, 38, 234, 234, 201, 246, 85, 67, 182, 133, 38, 79, 103, 212, 88, 159, 1, 7, 114, 246, 213, 252, 167, 77, 52, 103, 196, 109, 235, 82, 159, 216, 32, 45, 142, 47, 6, 53, 50, 117, 0, 113, 156, 144, 74, 200, 25, 216, 53, 54, 103, 217, 129, 131, 129, 115, 247, 5, 144, 165, 168, 13, 161, 238, 101, 221, 230, 251, 208, 175, 121, 154, 52, 48, 45, 106, 136, 44, 179, 52, 19, 212, 253, 82, 97, 207, 70, 67, 145, 200, 56, 237, 133, 125, 146, 174, 213, 30, 72, 170, 240, 7, 157, 196, 74, 222, 5, 224, 65, 14, 141, 146, 129, 70, 165, 78, 29, 50, 104, 235, 104, 49, 80, 99, 146, 104, 86, 242, 67, 57, 30, 162, 26, 17, 91, 13, 241, 94, 171, 53, 246, 113, 93, 227, 11, 146, 65, 29, 46, 60, 66, 6, 65, 9, 107, 103, 30, 60, 148, 104, 74, 198, 34, 234, 28, 180, 211, 190, 128, 149, 204, 184, 203, 234, 38, 118, 169, 136, 206, 252, 241, 85, 208, 212, 36, 164, 127, 35, 184, 159, 7, 217, 46, 3, 128, 143, 24, 120, 96, 137, 18, 23, 89, 194, 16, 190, 134, 178, 108, 154, 130, 52, 92, 147, 74, 64, 92, 219, 254, 50, 41, 208, 171, 46, 177, 176, 181, 97, 237, 18, 62, 179, 168, 170, 34, 155, 230, 15, 33, 53, 189, 47, 60, 65, 247, 206, 180, 153, 34, 205, 208, 133, 82, 174, 113, 1, 227, 10, 219, 186, 74, 85, 183, 14, 58, 165, 9, 12, 81, 146, 146, 231, 191, 205, 131, 76, 184, 73, 54, 86, 231, 233, 113, 255, 39, 71, 214, 76, 99, 61, 31, 1, 148, 227, 84, 87, 186, 75, 177, 240, 46, 52, 170, 137, 87, 170, 7, 55, 106, 146, 93, 153, 195, 1, 145, 12, 164, 48, 29, 142, 61, 190, 75, 186, 67, 139, 233, 16, 198, 10, 135, 98, 214, 83, 47, 9, 80, 123, 217, 155, 236, 209, 193, 170, 22, 38, 175, 83, 132, 141, 253, 255, 228, 129, 6, 254, 20, 245, 222, 31, 130, 59, 161, 140, 8, 4, 16, 53, 164, 147, 63, 6, 115, 75, 184, 241, 103, 251, 43, 114, 29, 204, 75, 29, 81, 79, 233, 12, 142, 148, 41, 213, 74, 155, 83, 46, 241, 65, 174, 27, 194, 211, 186, 52, 240, 155, 178, 99, 128, 203, 184, 220, 30, 193, 203, 115, 253, 103, 121, 20, 170, 131, 219, 162, 131, 86, 125, 189, 164, 150, 94, 207, 8, 133, 216, 246, 99, 252, 225, 227, 132, 150, 65, 252, 38, 218, 46, 15, 64, 81, 214, 40, 174, 26, 96, 42, 121, 223, 237, 253, 179, 60, 22, 211, 111, 52, 89, 147, 157, 71, 198, 236, 255, 116, 150, 97, 204, 139, 188, 31, 101, 128, 51, 24, 1, 227, 152, 158, 52, 108, 197, 222, 2, 118, 200, 113, 254, 226, 7, 231, 68, 198, 129, 132, 154, 59, 223, 169, 174, 157, 9, 37, 2, 217, 241, 167, 168, 97, 215, 29, 135, 109, 55, 119, 75, 214, 166, 90, 14, 5, 62, 49, 30, 230, 44, 33, 43, 53, 147, 20, 162, 107, 207, 124, 109, 7, 229, 227, 37, 199, 43, 132, 107, 189, 168, 248, 248, 39, 112, 225, 255, 210, 73, 62, 95, 103, 36, 174, 161, 164, 50, 38, 3, 137, 110, 106, 149, 96, 53, 13, 154, 3, 4, 45, 192, 149, 214, 211, 17, 172, 13, 80, 108, 5, 200, 123, 133, 209, 88, 121, 203, 63, 84, 223, 25, 61, 98, 55, 239, 224, 156, 117, 135, 201, 208, 34, 237, 82, 231, 136, 91, 164, 57, 1, 166, 70, 98, 26, 254, 77, 177, 44, 176, 94, 58, 71, 152, 95, 209, 122, 163, 242, 187, 107, 184, 55, 6, 93, 236, 255, 226, 163, 26, 42, 144, 166, 118, 132, 149, 9, 106, 134, 152, 216, 147, 134, 217, 71, 223, 132, 131, 91, 190, 140, 11, 4, 83, 41, 5, 157, 110, 186, 21, 183, 2, 13, 212, 42, 227, 172, 220, 60, 226, 16, 169, 191, 0, 132, 2, 151, 0, 198, 180, 68, 2, 161, 60, 238, 203, 83, 129, 27, 94, 165, 182, 244, 21, 107, 32, 86, 238, 72, 39, 175, 50, 209, 179, 17, 248, 201, 175, 54, 86, 40, 29, 16, 4, 139, 66, 205, 39, 233, 183, 53, 12, 191, 11, 135, 87, 7, 3, 248, 86, 226, 94, 28, 16, 237, 241, 209, 10, 142, 96, 5, 176, 166, 180, 17, 57, 159, 41, 103, 255, 59, 160, 212, 29, 32, 124, 202, 179, 49, 212, 3, 158, 201, 27, 134, 239, 127, 181, 61, 83, 33, 237, 151, 54, 214, 199, 171, 56, 66, 65, 105, 57, 75, 136, 57, 20, 93, 205, 246, 168, 254, 241, 175, 255, 56, 191, 19, 86, 182, 70, 196, 205, 107, 169, 234, 84, 115, 34, 95, 37, 119, 51, 151, 81, 100, 101, 20, 24, 43, 119, 216, 75, 58, 160, 73, 151, 118, 49, 201, 205, 129, 135, 123, 114, 34, 98, 84, 141, 204, 11, 3, 116, 60, 17, 109, 189, 117, 97, 43, 121, 106, 57, 161, 75, 232, 76, 70, 128, 156, 213, 21, 94, 22, 181, 95, 205, 4, 42, 58, 128, 114, 45, 151, 199, 25, 170, 179, 18, 115, 26, 235, 241, 255, 59, 220, 73, 112, 90, 64, 34, 5, 14, 113, 134, 133, 175, 57, 63, 152, 225, 251, 183, 84, 96, 163, 54, 9, 69, 48, 51, 134, 53, 94, 111, 178, 109, 51, 98, 147, 220, 227, 236, 8, 244, 250, 134, 82, 126, 118, 66, 32, 96, 241, 119, 2, 95, 113, 76, 193, 93, 236, 201, 176, 195, 42, 31, 176, 202, 209, 118, 119, 250, 188, 43, 178, 39, 9, 29, 46, 232, 229, 254, 54, 172, 79, 80, 16, 246, 180, 173, 110, 205, 182, 253, 22, 246, 141, 75, 40, 209, 133, 20, 201, 74, 4, 54, 168, 190, 54, 63, 215, 127, 215, 83, 191, 234, 84, 141, 140, 210, 130, 41, 57, 230, 64, 193, 154, 224, 82, 170, 109, 20, 27, 53, 84, 62, 214, 200, 92, 79, 131, 73, 176, 131, 61, 0, 214, 164, 134, 5, 172, 135, 207, 1, 167, 156, 83, 50, 169, 199, 7, 238, 40, 91, 123, 74, 133, 119, 60, 130, 161, 181, 67, 23, 159, 148, 136, 115, 245, 41, 0, 198, 99, 212, 144, 186, 220, 99, 145, 22, 105, 255, 144, 252, 192, 155, 67, 174, 217, 243, 63, 130, 69, 237, 149, 54, 37, 229, 108, 93, 100, 139, 222, 211, 62, 141, 9, 44, 222, 5, 209, 52, 234, 101, 54, 20, 79, 113, 146, 56, 233, 59, 134, 245, 39, 184, 225, 244, 200, 207, 101, 67, 150, 162, 106, 129, 67, 216, 47, 10, 63, 73, 144, 201, 166, 202, 118, 177, 203, 215, 110, 122, 192, 128, 112, 193, 107, 194, 143, 158, 150, 139, 88, 15, 211, 182, 189, 116, 213, 8, 202, 16, 167, 0, 202, 24, 43, 158, 94, 55, 132, 52, 236, 234, 109, 176, 146, 19, 128, 128, 15, 248, 100, 112, 193, 179, 211, 7, 176, 68, 242, 4, 147, 248, 11, 13, 62, 244, 70, 171, 49, 34, 209, 205, 174, 180, 114, 72, 132, 202, 180, 150, 229, 214, 169, 147, 52, 103, 18, 33, 42, 213, 182, 72, 61, 117, 188, 123, 138, 214, 237, 182, 190, 128, 120, 94, 57, 35, 20, 113, 99, 239, 154, 173, 123, 82, 53, 99, 1, 14, 137, 119, 169, 207, 138, 188, 36, 40, 58, 224, 164, 155, 23, 19, 57, 188, 205, 21, 106, 75, 77, 40, 45, 109, 164, 160, 129, 77, 95, 77, 53, 131, 101, 223, 12, 4, 129, 112, 181, 92, 169, 59, 4, 1, 2, 251, 244, 224, 246, 220, 100, 230, 152, 131, 5, 157, 191, 238, 44, 110, 222, 55, 188, 2, 49, 129, 83, 24, 229, 118, 250, 100, 222, 178, 43, 121, 199, 80, 229, 218, 69, 85, 254, 238, 27, 8, 13, 53, 222, 163, 101, 17, 232, 37, 74, 55, 119, 62, 240, 141, 199, 255, 182, 101, 56, 139, 204, 11, 17, 31, 104, 26, 198, 178, 217, 77, 187, 177, 117, 209, 93, 139, 24, 96, 46, 93, 142, 158, 171, 226, 53, 181, 186, 69, 162, 35, 141, 86, 215, 112, 11, 42, 124, 143, 82, 103, 56, 116, 88, 161, 190, 66, 89, 226, 54, 205, 169, 145, 246, 62, 35, 219, 27, 217, 230, 106, 226, 183, 206, 155, 199, 17, 154, 187, 26, 217, 43, 56, 74, 89, 149, 179, 99, 24, 71, 44, 189, 86, 7, 254, 50, 175, 195, 244, 234, 47, 4, 136, 44, 151, 209, 131, 226, 229, 135, 145, 98, 44, 225, 147, 156, 135, 230, 134, 251, 168, 160, 15, 209, 71, 0, 136, 60, 71, 227, 86, 77, 108, 232, 131, 25, 168, 21, 203, 14, 217, 71, 105, 160, 83, 63, 247, 193, 101, 248, 38, 55, 28, 177, 172, 10, 86, 3, 118, 96, 113, 170, 29, 120, 234, 178, 212, 32, 148, 251, 25, 166, 7, 221, 66, 231, 86, 78, 226, 159, 254, 4, 40, 0, 71, 119, 146, 107, 64, 2, 223, 249, 253, 112, 173, 215, 173, 133, 167, 142, 210, 163, 145, 206, 180, 41, 48, 44, 152, 27, 33, 0, 98, 228, 206, 213, 22, 14, 255, 39, 119, 74, 102, 172, 23, 197, 80, 170, 201, 221, 106, 172, 196, 190, 134, 203, 59, 56, 234, 193, 145, 171, 159, 54, 10, 107, 33, 92, 242, 134, 3, 164, 60, 76, 30, 239, 99, 189, 76, 144, 22, 24, 97, 149, 192, 22, 201, 212, 10, 45, 88, 213, 92, 31, 43, 239, 252, 157, 75, 154, 213, 144, 150, 38, 103, 86, 27, 222, 84, 112, 138, 31, 127, 36, 243, 54, 124, 136, 113, 187, 41, 119, 253, 37, 96, 227, 56, 62, 214, 91, 74, 195, 6, 96, 235, 6, 139, 197, 38, 57, 84, 162, 75, 23, 253, 132, 10, 252, 54, 17, 61, 68, 62, 118, 90, 166, 183, 44, 57, 181, 217, 73, 228, 130, 247, 30, 22, 215, 199, 100, 231, 127, 216, 167, 207, 132, 226, 154, 101, 189, 84, 167, 92, 36, 183, 167, 5, 157, 160, 48, 131, 72, 225, 11, 193, 111, 231, 204, 47, 142, 248, 228, 196, 227, 167, 238, 156, 181, 71, 156, 212, 229, 196, 54, 252, 206, 109, 12, 31, 187, 208, 146, 81, 239, 236, 65, 8, 174, 203, 252, 128, 184, 92, 223, 46, 234, 0, 243, 154, 133, 16, 174, 198, 34, 248, 199, 51, 177, 117, 0, 242, 66, 162, 235, 163, 195, 52, 244, 192, 50, 144, 37, 97, 82, 25, 31, 210, 11, 93, 212, 186, 197, 127, 196, 91, 6, 119, 191, 3, 243, 198, 129, 17, 80, 166, 143, 130, 155, 92, 151, 96, 102, 176, 207, 109, 30, 58, 210, 156, 64, 173, 33, 85, 21, 111, 220, 34, 173, 75, 17, 215, 185, 247, 136, 207, 32, 81, 254, 162, 111, 89, 128, 89, 30, 108, 171, 237, 250, 82, 19, 164, 209, 80, 243, 40, 89, 19, 139, 38, 8, 112, 168, 162, 35, 180, 241, 156, 149, 78, 228, 169, 152, 29, 3, 55, 67, 234, 142, 9, 230, 249, 100, 248, 245, 205, 87, 232, 169, 85, 139, 124, 139, 6, 85, 106, 132, 152, 246, 85, 148, 134, 192, 184, 79, 124, 114, 76, 239, 201, 80, 139, 208, 21, 186, 188, 238, 199, 206, 144, 38, 124, 254, 169, 74, 31, 33, 179, 125, 35, 237, 175, 202, 242, 49, 115, 17, 236, 221, 157, 163, 60, 38, 144, 203, 126, 8, 66, 101, 193, 0, 118, 123, 165, 137, 194, 138, 88, 71, 113, 190, 170, 97, 126, 219, 39, 56, 222, 129, 120, 95, 27, 245, 148, 81, 82, 112, 114, 78, 252, 66, 244, 37, 83, 251, 104, 47, 59, 22, 12, 143, 106, 43, 2, 104, 93, 59, 96, 142, 47, 178, 177, 131, 133, 49, 133, 200, 83, 18, 31, 214, 65, 109, 85, 128, 7, 198, 169, 75, 164, 194, 130, 39, 164, 231, 100, 157, 221, 159, 77, 108, 94, 201, 51, 145, 18, 185, 122, 81, 45, 173, 23, 144, 230, 191, 162, 114, 40, 186, 39, 76, 246, 136, 250, 79, 240, 196, 183, 97, 245, 198, 185, 36, 8, 40, 46, 210, 44, 211, 20, 159, 35, 169, 64, 5, 41, 174, 217, 59, 153, 110, 229, 250, 247, 94, 112, 220, 122, 134, 194, 95, 152, 224, 123, 81, 224, 64, 148, 64, 212, 241, 11, 85, 229, 178, 216, 225, 122, 15, 68, 163, 10, 94, 134, 12, 59, 103, 38, 231, 85, 241, 47, 89, 128, 70, 81, 129, 192, 55, 45, 250, 211, 81, 143, 139, 115, 186, 219, 141, 115, 214, 203, 181, 146, 241, 126, 145, 124, 129, 147, 53, 7, 239, 236, 236, 240, 225, 230, 143, 226, 206, 17, 67, 66, 119, 184, 247, 75, 250, 75, 107, 255, 129, 55, 249, 185, 224, 36, 37, 99, 249, 87, 221, 164, 71, 214, 176, 167, 214, 103, 84, 54, 102, 198, 36, 51, 38, 39, 50, 143, 86, 207, 246, 32, 204, 117, 251, 130, 253, 216, 148, 253, 202, 239, 118, 204, 180, 21, 17, 166, 59, 208, 156, 193, 89, 138, 149, 182, 185, 114, 17, 7, 130, 130, 163, 47, 226, 241, 228, 98, 16, 28, 81, 33, 104, 220, 26, 155, 162, 216, 12, 143, 249, 22, 3, 83, 37, 49, 95, 216, 171, 234, 211, 172, 154, 30, 153, 116, 55, 32, 111, 140, 60, 48, 107, 5, 16, 104, 112, 141, 6, 199, 126, 228, 134, 162, 23, 212, 78, 163, 52, 247, 127, 123, 39, 123, 109, 247, 129, 115, 105, 180, 93, 68, 166, 33, 1, 59, 52, 192, 112, 143, 108, 41, 95, 49, 165, 105, 111, 59, 237, 171, 231, 244, 143, 80, 178, 128, 179, 62, 70, 103, 14, 16, 60, 188, 66, 99, 26, 95, 179, 200, 213, 220, 156, 122, 39, 1, 135, 12, 189, 59, 130, 61, 162, 194, 214, 63, 77, 28, 7, 16, 221, 157, 136, 61, 119, 229, 102, 0, 85, 75, 161, 71, 101, 125, 216, 159, 150, 101, 67, 180, 196, 118, 157, 137, 57, 87, 196, 30, 81, 12, 40, 122, 40, 197, 67, 44, 41, 23, 17, 45, 18, 30, 141, 4, 199, 34, 11, 6, 65, 184, 55, 6, 213, 15, 121, 136, 93, 219, 192, 50, 60, 38, 109, 214, 9, 249, 158, 161, 129, 172, 127, 226, 122, 142, 97, 95, 172, 38, 206, 232, 93, 29, 173, 113, 77, 109, 185, 159, 120, 153, 140, 69, 34, 41, 10, 166, 12, 14, 207, 220, 123, 38, 13, 23, 105, 131, 27, 227, 31, 218, 194, 159, 136, 224, 65, 43, 239, 203, 40, 79, 206, 3, 214, 52, 254, 179, 157, 165, 232, 66, 62, 160, 173, 16, 220, 175, 8, 84, 157, 31, 144, 175, 37, 152, 181, 86, 174, 73, 12, 251, 238, 182, 219, 158, 196, 135, 218, 151, 167, 85, 116, 26, 175, 192, 152, 30, 198, 207, 14, 156, 26, 161, 166, 255, 29, 157, 209, 126, 190, 122, 81, 186, 188, 228, 253, 159, 131, 239, 230, 212, 194, 117, 83, 193, 159, 177, 252, 106, 153, 249, 70, 99, 222, 195, 195, 78, 92, 4, 124, 53, 253, 185, 131, 57, 193, 194, 226, 218, 143, 170, 121, 67, 181, 19, 32, 133, 227, 227, 226, 146, 32, 53, 120, 110, 94, 85, 25, 124, 76, 32, 134, 78, 11, 30, 55, 216, 253, 105, 60, 187, 73, 246, 142, 222, 205, 185, 203, 64, 177, 51, 101, 123, 104, 216, 90, 165, 214, 178, 221, 13, 170, 146, 68, 241, 198, 214, 27, 90, 102, 0, 171, 128, 7, 47, 111, 130, 170, 188, 126, 121, 188, 81, 217, 187, 85, 130, 25, 136, 107, 16, 241, 202, 60, 215, 24, 103, 250, 112, 82, 253, 175, 130, 55, 27, 223, 166, 214, 149, 63, 240, 165, 79, 25, 249, 133, 17, 201, 197, 35, 32, 151, 21, 235, 145, 54, 113, 125, 70, 112, 202, 16, 160, 87, 4, 221, 206, 1, 203, 68, 132, 184, 43, 148, 184, 115, 186, 154, 74, 80, 137, 100, 123, 246, 141, 164, 249, 209, 63, 37, 66, 101, 192, 161, 155, 167, 2, 16, 236, 206, 40, 214, 247, 14, 242, 132, 189, 19, 38, 122, 107, 235, 109, 237, 241, 91, 68, 56, 67, 239, 108, 168, 124, 150, 185, 178, 138, 86, 177, 121, 135, 7, 221, 223, 95, 40, 246, 34, 77, 96, 45, 144, 196, 40, 141, 163, 28, 208, 161, 174, 9, 24, 178, 48, 225, 14, 132, 87, 193, 124, 35, 99, 9, 188, 173, 193, 89, 144, 158, 30, 31, 77, 50, 1, 215, 102, 235, 16, 99, 208, 220, 210, 117, 118, 195, 199, 75, 78, 101, 175, 7, 2, 6, 99, 40, 155, 207, 219, 51, 16, 37, 31, 102, 163, 233, 93, 143, 63, 220, 116, 174, 78, 186, 149, 146, 60, 192, 6, 119, 182, 222, 129, 83, 90, 67, 185, 73, 41, 27, 15, 192, 125, 144, 109, 231, 151, 48, 9, 176, 100, 205, 235, 30, 46, 183, 83, 103, 151, 56, 33, 80, 69, 179, 161, 168, 255, 151, 137, 176, 82, 162, 78, 102, 28, 46, 128, 23, 192, 252, 192, 208, 74, 34, 129, 155, 83, 125, 218, 223, 195, 185, 174, 232, 106, 235, 109, 180, 172, 174, 25, 70, 224, 129, 25, 164, 218, 241, 137, 16, 181, 143, 23, 31, 133, 176, 30, 225, 126, 136, 71, 139, 135, 253, 136, 0, 73, 197, 23, 196, 185, 249, 106, 113, 87, 157, 4, 202, 20, 193, 254, 193, 27, 18, 205, 18, 150, 254, 213, 40, 39, 230, 83, 181, 216, 70, 232, 207, 70, 217, 152, 91, 246, 115, 233, 206, 136, 251, 12, 206, 252, 184, 35, 244, 175, 116, 233, 106, 159, 220, 127, 44, 80, 59, 203, 73, 243, 190, 24, 121, 109, 95, 78, 31, 79, 254, 86, 168, 66, 15, 62, 123, 72, 126, 10, 255, 7, 141, 172, 215, 233, 182, 186, 76, 253, 0, 38, 232, 242, 183, 36, 237, 19, 225, 236, 107, 81, 157, 16, 88, 66, 238, 217, 16, 11, 157, 245, 10, 114, 111, 158, 160, 2, 43, 98, 129, 193, 250, 95, 205, 255, 32, 244, 4, 27, 160, 184, 140, 205, 111, 221, 98, 25, 34, 4, 172, 253, 222, 33, 197, 204, 154, 248, 140, 34, 89, 11, 165, 41, 218, 2, 213, 98, 212, 138, 167, 169, 113, 8, 36, 205, 116, 12, 180, 9, 55, 165, 48, 100, 219, 54, 186, 189, 62, 165, 191, 218, 154, 123, 139, 76, 187, 201, 84, 255, 185, 116, 120, 185, 51, 146, 128, 9, 175, 88, 97, 207, 239, 79, 247, 219, 202, 144, 115, 208, 183, 8, 126, 143, 129, 85, 71, 22, 200, 198, 144, 197, 118, 50, 56, 132, 64, 192, 210, 75, 8, 136, 93, 40, 172, 218, 185, 109, 164, 39, 97, 65, 157, 114, 118, 19, 244, 87, 92, 213, 30, 92, 50, 39, 76, 254, 209, 68, 25, 133, 249, 223, 106, 226, 227, 201, 78, 211, 186, 171, 77, 99, 217, 130, 148, 120, 8, 221, 176, 41, 119, 237, 178, 170, 86, 1, 17, 48, 53, 224, 10, 226, 0, 112, 104, 188, 27, 213, 155, 92, 126, 117, 248, 183, 225, 119, 194, 157, 88, 227, 76, 29, 150, 36, 226, 76, 148, 144, 87, 16, 86, 180, 117, 199, 91, 81, 163, 166, 53, 58, 205, 82, 171, 157, 87, 100, 166, 124, 80, 172, 74, 0, 74, 226, 13, 181, 81, 24, 77, 250, 49, 120, 30, 107, 87, 230, 87, 38, 135, 224, 90, 177, 12, 231, 233, 10, 169, 34, 31, 136, 183, 211, 120, 60, 171, 65, 99, 149, 41, 163, 194, 80, 204, 41, 240, 72, 125, 39, 16, 76, 116, 171, 153, 237, 50, 212, 93, 120, 111, 235, 71, 161, 141, 123, 37, 185, 15, 167, 7, 17, 228, 46, 18, 89, 242, 235, 26, 186, 118, 68, 236, 127, 252, 33, 10, 200, 70, 89, 196, 128, 55, 49, 98, 0, 199, 211, 64, 103, 36, 163, 254, 187, 18, 115, 134, 48, 102, 77, 236, 151, 89, 175, 194, 168, 94, 3, 189, 27, 34, 152, 24, 174, 238, 188, 43, 61, 177, 174, 16, 17, 221, 250, 205, 87, 24, 88, 50, 58, 46, 146, 218, 194, 22, 223, 229, 57, 172, 90, 15, 170, 46, 228, 54, 124, 68, 80, 151, 73, 78, 179, 72, 115, 173, 16, 7, 194, 27, 80, 212, 62, 27, 118, 209, 137, 61, 250, 77, 179, 93, 181, 24, 179, 217, 166, 113, 177, 26, 241, 188, 144, 143, 218, 121, 95, 191, 57, 205, 74, 21, 225, 5, 86, 29, 69, 167, 225, 44, 74, 23, 178, 198, 57, 32, 3, 25, 13, 98, 187, 255, 149, 238, 219, 147, 150, 244, 85, 86, 255, 105, 91, 76, 26, 23, 220, 220, 100, 126, 102, 137, 30, 115, 157, 221, 66, 193, 201, 108, 147, 52, 76, 102, 33, 237, 117, 130, 208, 88, 71, 65, 120, 21, 137, 61, 199, 129, 240, 129, 158, 213, 197, 73, 6, 242, 106, 22, 27, 117, 91, 159, 237, 252, 251, 65, 227, 227, 220, 0, 156, 94, 174, 246, 79, 185, 192, 76, 56, 92, 73, 54, 30, 84, 85, 17, 222, 73, 122, 68, 184, 191, 137, 23, 123, 192, 243, 38, 26, 65, 159, 43, 187, 235, 217, 84, 174, 71, 40, 62, 155, 22, 49, 34, 185, 161, 240, 69, 219, 80, 194, 212, 251, 176, 1, 112, 91, 18, 190, 188, 223, 161, 138, 151, 161, 4, 194, 26, 55, 23, 137, 138, 98, 140, 5, 24, 81, 184, 35, 154, 8, 222, 191, 229, 44, 91, 161, 189, 71, 74, 107, 125, 199, 183, 129, 18, 80, 144, 247, 227, 223, 224, 51, 208, 28, 23, 84, 139, 252, 30, 139, 83, 197, 181, 133, 211, 201, 104, 243, 186, 92, 248, 99, 183, 132, 72, 62, 144, 176, 40, 208, 230, 187, 98, 8, 242, 195, 133, 69, 229, 109, 201, 146, 180, 220, 44, 173, 176, 24, 224, 235, 137, 216, 48, 163, 151, 132, 89, 123, 197, 184, 91, 1, 107, 51, 114, 152, 217, 247, 146, 244, 58, 220, 189, 99, 34, 65, 3, 214, 129, 208, 187, 246, 111, 192, 95, 5, 169, 223, 183, 72, 52, 235, 210, 190, 124, 58, 205, 229, 15, 9, 66, 67, 75, 163, 113, 155, 12, 78, 18, 82, 29, 16, 66, 151, 28, 222, 145, 92, 41, 80, 45, 240, 115, 38, 70, 82, 14, 246, 238, 137, 124, 235, 232, 134, 197, 63, 0, 58, 23, 30, 195, 16, 129, 79, 72, 193, 73, 188, 215, 242, 181, 211, 181, 102, 186, 222, 93, 241, 135, 12, 150, 170, 175, 239, 244, 12, 169, 155, 199, 38, 101, 232, 79, 164, 178, 231, 196, 1, 221, 45, 57, 176, 62, 68, 82, 129, 232, 107, 217, 219, 24, 18, 144, 148, 172, 57, 77, 163, 34, 10, 4, 39, 132, 247, 66, 90, 40, 133, 146, 100, 224, 177, 248, 188, 201, 213, 160, 200, 154, 136, 191, 197, 244, 233, 130, 36, 107, 73, 55, 8, 202, 85, 87, 63, 246, 153, 57, 15, 144, 208, 113, 32, 52, 176, 181, 65, 97, 138, 106, 126, 152, 81, 82, 30, 67, 192, 184, 20, 145, 67, 109, 26, 164, 184, 156, 114, 165, 211, 190, 51, 213, 214, 207, 237, 160, 129, 95, 140, 195, 50, 224, 254, 146, 80, 164, 200, 145, 13, 83, 255, 184, 14, 230, 109, 253, 20, 5, 60, 201, 237, 66, 38, 205, 64, 231, 19, 140, 227, 166, 153, 65, 111, 178, 155, 101, 54, 122, 70, 111, 27, 58, 10, 249, 0, 87, 42, 123, 228, 123, 28, 53, 40, 15, 168, 67, 137, 243, 208, 120, 229, 240, 158, 166, 144, 232, 134, 93, 128, 201, 222, 49, 241, 42, 133, 71, 0, 17, 19, 124, 214, 144, 5, 239, 209, 51, 159, 184, 12, 146, 254, 172, 114, 169, 10, 3, 76, 58, 93, 130, 25, 164, 121, 33, 101, 83, 248, 72, 246, 203, 149, 51, 158, 193, 56, 100, 77, 226, 146, 83, 235, 252, 155, 50, 214, 138, 8, 109, 78, 41, 21, 65, 210, 167, 204, 130, 44, 192, 21, 167, 45, 90, 1, 79, 121, 242, 54, 243, 204, 153, 179, 64, 6, 212, 103, 190, 66, 77, 223, 204, 244, 130, 38, 114, 66, 226, 254, 149, 174, 115, 48, 204, 184, 236, 182, 126, 143, 249, 196, 22, 102, 222, 145, 157, 176, 68, 236, 139, 72, 53, 93, 18, 17, 66, 94, 24, 242, 238, 176, 131, 15, 37, 101, 254, 176, 75, 29, 77, 192, 36, 86, 18, 171, 208, 4, 177, 216, 17, 60, 161, 109, 17, 235, 248, 137, 42, 43, 209, 202, 46, 219, 14, 43, 87, 230, 136, 108, 14, 170, 29, 97, 44, 79, 183, 232, 208, 192, 192, 82, 230, 213, 139, 215, 167, 83, 36, 146, 45, 55, 15, 80, 196, 246, 190, 39, 39, 88, 98, 202, 22, 223, 222, 16, 47, 25, 145, 6, 177, 76, 67, 91, 48, 18, 135, 190, 72, 29, 202, 114, 105, 87, 215, 232, 205, 246, 164, 215, 255, 128, 246, 0, 127, 24, 169, 40, 73, 175, 163, 97, 211, 15, 70, 53, 192, 192, 89, 128, 221, 131, 194, 125, 194, 89, 140, 234, 118, 64, 11, 110, 208, 19, 244, 236, 197, 72, 149, 75, 35, 67, 237, 47, 251, 151, 233, 215, 188, 161, 188, 170, 255, 46, 65, 31, 24, 29, 122, 226, 103, 147, 182, 19, 29, 79, 149, 195, 209, 0, 147, 22, 22, 45, 4, 160, 188, 131, 219, 166, 230, 45, 190, 171, 16, 202, 245, 246, 55, 181, 136, 44, 115, 150, 0, 221, 53, 242, 240, 220, 61, 212, 225, 249, 198, 151, 31, 153, 59, 45, 153, 5, 206, 201, 250, 220, 243, 251, 225, 102, 253, 42, 102, 223, 169, 163, 197, 152, 221, 152, 12, 112, 40, 200, 209, 113, 243, 110, 188, 95, 69, 155, 9, 105, 138, 172, 221, 24, 23, 51, 92, 136, 20, 30, 248, 123, 171, 134, 91, 153, 21, 213, 210, 62, 95, 174, 86, 28, 140, 40, 51, 195, 133, 43, 35, 76, 215, 207, 109, 154, 232, 185, 34, 151, 132, 150, 142, 101, 221, 192, 61, 112, 184, 85, 85, 28, 23, 146, 205, 30, 184, 220, 176, 66, 107, 56, 192, 0, 205, 254, 66, 21, 49, 165, 0, 68, 182, 237, 211, 75, 181, 84, 28, 52, 146, 252, 252, 79, 237, 221, 198, 5, 63, 142, 140, 43, 17, 176, 26, 229, 181, 244, 181, 71, 151, 8, 141, 178, 234, 22, 170, 79, 62, 231, 70, 194, 110, 147, 81, 34, 13, 80, 82, 197, 165, 253, 206, 176, 141, 182, 157, 230, 125, 142, 135, 37, 231, 75, 94, 129, 159, 4, 9, 254, 216, 164, 195, 93, 73, 20, 19, 52, 153, 217, 121, 229, 188, 71, 212, 118, 210, 168, 76, 21, 120, 62, 150, 236, 100, 45, 204, 203, 213, 205, 82, 96, 102, 70, 35, 206, 61, 237, 167, 208, 5, 174, 16, 207, 245, 255, 160, 139, 244, 57, 188, 31, 34, 1, 63, 25, 214, 156, 209, 238, 114, 92, 50, 9, 198, 111, 144, 184, 212, 190, 225, 89, 71, 247, 88, 99, 5, 88, 82, 10, 224, 126, 171, 247, 186, 175, 254, 112, 154, 6, 93, 42, 100, 177, 152, 155, 251, 88, 19, 141, 65, 134, 76, 3, 134, 251, 122, 21, 18, 191, 61, 52, 125, 34, 114, 155, 233, 31, 175, 182, 4, 145, 41, 151, 154, 99, 195, 171, 139, 160, 13, 78, 192, 198, 150, 135, 154, 128, 227, 236, 197, 120, 14, 247, 201, 21, 179, 223, 234, 162, 212, 109, 228, 202, 163, 71, 51, 21, 168, 132, 224, 119, 210, 244, 175, 19, 123, 44, 79, 194, 211, 125, 89, 154, 13, 16, 164, 214, 115, 254, 13, 70, 172, 161, 104, 217, 105, 232, 30, 58, 234, 41, 52, 177, 102, 196, 74, 177, 25, 32, 214, 129, 107, 8, 67, 218, 124, 125, 51, 83, 12, 179, 43, 5, 137, 45, 108, 213, 243, 128, 115, 43, 38, 211, 216, 82, 16, 70, 99, 144, 215, 227, 224, 121, 175, 124, 45, 149, 118, 191, 151, 34, 63, 75, 113, 113, 25, 45, 13, 169, 43, 68, 118, 200, 213, 98, 180, 230, 57, 240, 113, 36, 55, 250, 252, 76, 140, 197, 73, 48, 212, 13, 235, 104, 3, 110, 107, 36, 203, 255, 146, 236, 38, 126, 104, 213, 133, 113, 112, 251, 242, 132, 20, 67, 188, 154, 34, 22, 22, 67, 20, 204, 115, 238, 246, 33, 147, 211, 229, 254, 166, 77, 145, 234, 161, 17, 121, 160, 82, 19, 249, 131, 182, 22, 129, 254, 165, 197, 122, 58, 65, 97, 185, 55, 5, 39, 116, 174, 165, 103, 72, 36, 64, 202, 229, 132, 131, 46, 75, 43, 203, 126, 247, 238, 33, 135, 116, 156, 74, 121, 129, 21, 25, 53, 125, 247, 191, 235, 254, 30, 45, 83, 37, 192, 88, 252, 244, 253, 232, 97, 208, 73, 58, 138, 167, 126, 170, 141, 222, 164, 154, 37, 26, 94, 172, 203, 173, 244, 50, 139, 41, 84, 103, 163, 85, 78, 4, 253, 186, 195, 152, 199, 8, 215, 73, 76, 214, 172, 250, 87, 139, 251, 145, 251, 65, 27, 225, 87, 95, 162, 242, 139, 185, 58, 155, 253, 161, 92, 162, 170, 167, 91, 156, 237, 77, 104, 204, 133, 92, 218, 157, 142, 132, 221, 98, 192, 79, 8, 42, 121, 8, 171, 73, 47, 110, 129, 75, 177, 34, 162, 17, 234, 14, 120, 78, 54, 104, 29, 131, 153, 194, 234, 5, 178, 234, 36, 115, 184, 48, 210, 103, 248, 22, 148, 58, 121, 241, 242, 136, 167, 14, 155, 212, 63, 107, 168, 110, 3, 139, 177, 54, 68, 18, 151, 56, 49, 158, 208, 211, 70, 168, 87, 160, 32, 201, 220, 24, 196, 96, 124, 3, 232, 188, 153, 78, 130, 182, 208, 219, 118, 155, 224, 84, 48, 19, 237, 129, 11, 153, 94, 2, 52, 95, 173, 155, 139, 146, 236, 181, 16, 207, 136, 74, 163, 217, 198, 182, 103, 187, 94, 146, 27, 112, 62, 44, 197, 129, 223, 92, 196, 238, 67, 189, 184, 54, 164, 94, 11, 112, 197, 106, 19, 153, 46, 61, 183, 138, 202, 116, 6, 202, 93, 118, 133, 211, 75, 237, 101, 119, 250, 144, 137, 113, 156, 162, 89, 159, 100, 248, 94, 121, 96, 15, 254, 219, 165, 228, 224, 165, 48, 138, 87, 243, 243, 147, 16, 188, 86, 175, 210, 234, 35, 70, 23, 175, 128, 132, 117, 225, 60, 120, 71, 123, 179, 62, 180, 37, 107, 33, 33, 163, 59, 57, 9, 217, 138, 48, 59, 210, 34, 26, 49, 16, 188, 23, 121, 118, 227, 222, 105, 18, 119, 135, 233, 112, 179, 109, 140, 196, 202, 9, 4, 7, 174, 86, 254, 26, 96, 74, 178, 239, 61, 246, 124, 138, 9, 58, 50, 114, 37, 208, 85, 232, 43, 73, 3, 86, 2, 145, 105, 60, 199, 88, 46, 205, 125, 129, 123, 27, 73, 25, 8, 230, 225, 135, 37, 126, 70, 8, 8, 90, 70, 181, 185, 254, 245, 238, 93, 142, 133, 244, 100, 206, 110, 146, 86, 46, 248, 201, 71, 85, 110, 203, 167, 46, 190, 195, 98, 22, 28, 59, 163, 77, 171, 41, 100, 146, 229, 64, 23, 241, 100, 13, 40, 245, 139, 109, 143, 106, 56, 95, 111, 233, 185, 86, 80, 165, 10, 240, 167, 165, 70, 86, 192, 177, 156, 224, 40, 81, 3, 37, 107, 135, 195, 76, 238, 209, 223, 40, 126, 111, 85, 156, 161, 243, 85, 14, 143, 111, 85, 14, 42, 191, 118, 50, 204, 200, 165, 117, 181, 1, 75, 188, 208, 179, 108, 214, 135, 249, 30, 121, 222, 172, 44, 28, 92, 169, 153, 172, 109, 35, 114, 60, 23, 9, 231, 2, 165, 2, 20, 114, 2, 103, 96, 241, 208, 186, 29, 93, 21, 191, 131, 189, 90, 228, 213, 13, 203, 211, 192, 51, 137, 205, 66, 25, 94, 110, 116, 53, 66, 54, 15, 193, 253, 89, 187, 138, 101, 156, 81, 83, 76, 175, 67, 100, 121, 63, 39, 139, 166, 244, 220, 36, 249, 71, 4, 33, 83, 87, 177, 240, 238, 106, 33, 132, 61, 246, 231, 89, 13, 238, 62, 126, 145, 164, 34, 250, 39, 35, 233, 119, 83, 208, 83, 77, 205, 212, 200, 123, 189, 62, 247, 27, 27, 60, 206, 243, 59, 146, 236, 105, 93, 153, 63, 82, 32, 133, 209, 67, 186, 115, 30, 6, 156, 48, 187, 158, 159, 107, 212, 252, 13, 68, 104, 133, 184, 109, 53, 85, 81, 189, 34, 99, 196, 81, 172, 19, 130, 254, 148, 214, 10, 90, 69, 35, 103, 216, 76, 166, 14, 248, 101, 67, 122, 104, 223, 145, 26, 167, 190, 181, 190, 100, 97, 219, 143, 20, 108, 57, 129, 197, 103, 200, 251, 0, 122, 80, 12, 94, 140, 143, 248, 25, 88, 15, 111, 120, 132, 172, 1, 65, 216, 162, 65, 31, 169, 172, 227, 142, 241, 195, 161, 114, 130, 7, 32, 7, 221, 121, 58, 128, 8, 110, 218, 208, 151, 176, 134, 7, 100, 103, 44, 207, 235, 164, 126, 163, 223, 118, 241, 187, 63, 25, 168, 47, 164, 253, 141, 77, 201, 230, 239, 134, 21, 239, 234, 53, 85, 61, 180, 53, 153, 184, 136, 145, 44, 224, 97, 100, 13, 32, 65, 23, 245, 0, 83, 116, 108, 214, 9, 242, 233, 25, 8, 22, 243, 32, 119, 235, 209, 189, 255, 87, 113, 65, 195, 72, 123, 246, 155, 9, 241, 219, 150, 160, 247, 187, 179, 58, 6, 175, 31, 132, 18, 56, 236, 158, 230, 21, 139, 233, 32, 185, 241, 164, 141, 249, 195, 159, 83, 197, 154, 235, 149, 84, 191, 42, 146, 129, 66, 196, 83, 12, 153, 179, 142, 143, 207, 220, 67, 28, 105, 235, 203, 203, 165, 250, 57, 119, 249, 140, 154, 13, 137, 134, 211, 49, 160, 12, 161, 122, 74, 106, 90, 250, 98, 63, 235, 132, 96, 22, 93, 64, 19, 39, 80, 149, 78, 140, 77, 7, 173, 20, 53, 99, 156, 199, 205, 167, 177, 214, 99, 142, 243, 124, 24, 196, 83, 18, 185, 5, 210, 220, 183, 51, 200, 17, 36, 11, 19, 244, 28, 170, 113, 15, 118, 147, 137, 125, 67, 218, 22, 172, 4, 107, 116, 197, 245, 36, 102, 132, 52, 252, 213, 104, 151, 107, 55, 129, 225, 215, 149, 208, 108, 35, 215, 64, 169, 122, 26, 234, 222, 38, 108, 199, 176, 243, 110, 120, 74, 208, 37, 144, 251, 126, 247, 231, 90, 88, 111, 207, 123, 170, 78, 242, 11, 43, 225, 76, 124, 73, 54, 243, 142, 147, 168, 217, 66, 175, 188, 140, 98, 237, 32, 32, 45, 214, 206, 135, 253, 82, 52, 61, 223, 169, 18, 107, 153, 15, 142, 45, 52, 62, 113, 150, 52, 191, 245, 220, 95, 249, 54, 128, 174, 123, 27, 24, 253, 182, 141, 177, 85, 249, 247, 102, 17, 231, 240, 189, 49, 178, 79, 133, 178, 106, 144, 211, 182, 172, 54, 196, 74, 179, 180, 91, 28, 138, 239, 215, 87, 170, 87, 196, 65, 236, 146, 188, 231, 98, 251, 223, 201, 36, 102, 43, 102, 239, 126, 53, 37, 240, 236, 231, 40, 204, 157, 111, 11, 248, 11, 121, 127, 248, 110, 203, 174, 4, 0, 143, 102, 190, 215, 139, 43, 210, 246, 60, 232, 51, 220, 242, 213, 116, 107, 124, 24, 6, 194, 196, 241, 92, 197, 49, 128, 168, 47, 183, 196, 88, 116, 80, 189, 166, 255, 193, 232, 134, 223, 245, 223, 136, 53, 215, 60, 93, 196, 78, 176, 24, 56, 188, 45, 207, 43, 132, 235, 240, 52, 148, 30, 10, 65, 44, 222, 213, 207, 120, 148, 170, 114, 197, 206, 221, 199, 69, 70, 214, 42, 123, 177, 251, 6, 245, 236, 129, 253, 209, 244, 35, 128, 80, 113, 100, 95, 235, 56, 62, 138, 39, 228, 110, 70, 214, 49, 226, 29, 36, 120, 103, 27, 87, 48, 201, 255, 6, 146, 42, 128, 241, 229, 65, 237, 225, 203, 142, 134, 181, 168, 22, 66, 10, 104, 168, 233, 141, 77, 162, 70, 67, 210, 5, 115, 64, 114, 219, 104, 241, 110, 42, 49, 177, 28, 179, 227, 180, 52, 56, 69, 47, 221, 158, 143, 210, 126, 57, 110, 70, 33, 130, 243, 52, 1, 16, 39, 25, 255, 149, 58, 28, 151, 147, 43, 215, 133, 20, 191, 119, 126, 189, 102, 154, 91, 154, 203, 255, 138, 81, 56, 91, 175, 52, 136, 222, 146, 23, 245, 64, 65, 246, 172, 104, 92, 184, 173, 16, 208, 232, 92, 98, 47, 49, 188, 9, 182, 194, 239, 163, 115, 52, 121, 111, 120, 111, 105, 138, 217, 205, 32, 61, 71, 55, 118, 187, 0, 190, 212, 158, 128, 48, 5, 45, 88, 167, 163, 134, 21, 228, 120, 88, 40, 18, 117, 95, 202, 230, 198, 15, 213, 185, 123, 2, 123, 214, 97, 32, 122, 127, 156, 97, 47, 158, 124, 249, 160, 35, 237, 24, 249, 207, 15, 156, 148, 221, 226, 183, 130, 128, 75, 98, 4, 50, 118, 230, 191, 58, 79, 176, 126, 92, 239, 215, 110, 5, 193, 151, 163, 233, 203, 97, 212, 39, 98, 122, 254, 36, 29, 151, 229, 151, 87, 220, 45, 142, 87, 191, 1, 243, 220, 212, 104, 59, 156, 211, 184, 79, 157, 181, 192, 88, 157, 111, 45, 124, 53, 31, 6, 165, 200, 251, 189, 210, 31, 135, 70, 7, 42, 93, 236, 82, 177, 180, 45, 223, 214, 239, 145, 26, 181, 57, 33, 38, 185, 120, 234, 0, 200, 128, 127, 207, 88, 104, 125, 19, 103, 127, 251, 95, 96, 234, 20, 44, 71, 4, 161, 170, 91, 248, 74, 103, 239, 147, 222, 189, 9, 191, 254, 41, 174, 7, 54, 76, 90, 59, 9, 145, 31, 144, 14, 44, 8, 77, 183, 85, 151, 147, 195, 71, 3, 38, 167, 162, 139, 191, 227, 154, 139, 62, 87, 75, 176, 151, 41, 120, 75, 207, 101, 15, 65, 98, 233, 55, 224, 163, 59, 102, 169, 204, 119, 148, 25, 197, 30, 64, 192, 204, 147, 241, 60, 68, 141, 84, 239, 125, 97, 1, 158, 57, 99, 138, 93, 18, 120, 248, 154, 93, 158, 136, 145, 248, 117, 85, 217, 244, 205, 165, 207, 2, 161, 95, 245, 193, 18, 159, 153, 56, 253, 75, 103, 235, 31, 255, 9, 199, 208, 64, 84, 175, 36, 33, 73, 141, 91, 243, 41, 187, 96, 198, 127, 204, 231, 188, 0, 225, 6, 47, 145, 69, 52, 195, 5, 128, 91, 248, 26, 194, 114, 188, 182, 255, 56, 31, 161, 134, 126, 179, 122, 8, 42, 56, 216, 142, 176, 131, 67, 36, 23, 177, 194, 213, 64, 116, 144, 105, 61, 226, 106, 231, 197, 84, 5, 236, 2, 204, 65, 83, 57, 148, 67, 42, 95, 217, 227, 1, 170, 124, 45, 164, 14, 15, 232, 17, 22, 42, 168, 215, 226, 214, 139, 214, 155, 192, 185, 45, 167, 235, 241, 60, 3, 214, 73, 145, 216, 152, 184, 130, 122, 49, 113, 212, 22, 22, 200, 110, 13, 171, 102, 133, 11, 240, 2, 118, 122, 233, 137, 94, 5, 201, 104, 146, 209, 8, 52, 59, 223, 114, 146, 187, 142, 111, 94, 205, 60, 12, 0, 126, 179, 120, 190, 168, 44, 183, 76, 78, 7, 57, 214, 111, 20, 10, 203, 158, 72, 167, 11, 48, 56, 73, 17, 42, 196, 223, 167, 237, 204, 176, 149, 20, 147, 189, 212, 84, 245, 36, 126, 252, 233, 38, 67, 224, 98, 35, 9, 212, 20, 158, 88, 41, 23, 203, 2, 105, 241, 82, 23, 44, 254, 160, 18, 30, 14, 231, 207, 2, 92, 197, 71, 87, 108, 223, 99, 50, 140, 185, 161, 245, 226, 14, 216, 192, 128, 95, 212, 98, 117, 245, 235, 100, 67, 167, 190, 75, 229, 24, 40, 121, 94, 64, 199, 107, 179, 240, 252, 117, 47, 139, 3, 70, 118, 132, 165, 87, 13, 50, 185, 250, 133, 251, 174, 202, 83, 93, 236, 22, 111, 39, 250, 86, 226, 70, 242, 167, 201, 70, 233, 29, 233, 60, 240, 203, 10, 139, 66, 19, 212, 167, 6, 119, 158, 200, 170, 129, 83, 28, 27, 208, 62, 64, 126, 111, 111, 161, 109, 151, 104, 70, 114, 48, 120, 149, 243, 18, 87, 105, 136, 163, 251, 38, 33, 118, 83, 61, 221, 215, 182, 58, 58, 196, 19, 89, 160, 237, 106, 26, 203, 209, 102, 159, 33, 207, 16, 74, 117, 171, 107, 20, 157, 227, 10, 116, 56, 241, 114, 246, 178, 194, 184, 72, 202, 226, 133, 142, 22, 100, 61, 36, 117, 96, 73, 219, 102, 37, 12, 229, 77, 199, 209, 213, 185, 91, 78, 237, 207, 131, 10, 242, 48, 69, 69, 212, 68, 11, 137, 92, 226, 216, 73, 252, 91, 151, 56, 112, 91, 16, 234, 88, 221, 218, 122, 29, 180, 252, 164, 212, 66, 93, 171, 139, 21, 211, 192, 144, 13, 235, 84, 210, 46, 60, 14, 216, 248, 107, 205, 107, 223, 9, 240, 231, 37, 151, 92, 216, 65, 77, 135, 71, 114, 136, 171, 68, 159, 173, 11, 205, 143, 154, 163, 209, 25, 97, 169, 172, 233, 150, 211, 155, 150, 78, 176, 96, 132, 56, 165, 38, 218, 228, 77, 118, 104, 204, 154, 225, 71, 132, 60, 165, 141, 248, 59, 27, 121, 95, 86, 56, 126, 228, 95, 33, 141, 22, 126, 90, 39, 185, 108, 154, 239, 35, 175, 184, 94, 23, 114, 170, 77, 196, 15, 21, 210, 66, 169, 88, 202, 208, 57, 169, 83, 218, 193, 103, 190, 249, 45, 109, 166, 198, 102, 230, 116, 42, 196, 244, 168, 161, 109, 127, 97, 228, 215, 196, 156, 57, 49, 118, 30, 75, 211, 98, 95, 51, 122, 177, 160, 132, 170, 205, 100, 188, 161, 98, 54, 112, 71, 110, 216, 200, 143, 17, 201, 93, 12, 227, 133, 39, 42, 120, 216, 109, 71, 12, 108, 175, 11, 55, 48, 179, 58, 201, 210, 104, 108, 69, 25, 217, 94, 174, 35, 232, 69, 86, 143, 132, 172, 254, 210, 190, 31, 138, 157, 113, 187, 20, 64, 200, 11, 40, 213, 250, 26, 12, 8, 132, 208, 207, 79, 112, 140, 247, 240, 228, 218, 70, 91, 168, 27, 43, 190, 76, 133, 235, 18, 109, 111, 186, 110, 84, 187, 244, 233, 1, 167, 253, 37, 175, 235, 105, 146, 140, 202, 246, 215, 255, 185, 11, 106, 240, 161, 184, 112, 129, 54, 3, 41, 225, 50, 192, 224, 128, 100, 125, 209, 212, 176, 103, 30, 222, 146, 229, 176, 165, 28, 140, 172, 137, 146, 130, 114, 37, 176, 37, 143, 12, 56, 116, 244, 63, 73, 191, 212, 208, 126, 71, 142, 92, 87, 48, 221, 127, 191, 219, 84, 84, 223, 96, 253, 147, 87, 179, 103, 176, 142, 228, 102, 180, 108, 183, 210, 0, 84, 62, 196, 210, 244, 79, 115, 81, 121, 115, 174, 135, 226, 193, 205, 186, 24, 28, 196, 110, 36, 141, 220, 79, 131, 69, 83, 199, 76, 206, 201, 116, 136, 220, 151, 136, 145, 119, 218, 119, 222, 102, 25, 132, 85, 34, 117, 77, 208, 89, 88, 19, 227, 77, 65, 196, 18, 63, 211, 89, 228, 128, 183, 193, 107, 239, 14, 160, 116, 96, 92, 31, 230, 129, 138, 226, 43, 212, 233, 85, 169, 74, 90, 233, 183, 125, 122, 8, 164, 79, 242, 54, 241, 93, 157, 37, 211, 244, 122, 20, 177, 229, 150, 190, 182, 217, 139, 48, 5, 201, 152, 118, 29, 191, 41, 14, 165, 238, 205, 12, 133, 38, 116, 209, 242, 147, 51, 204, 152, 13, 226, 185, 184, 78, 180, 129, 157, 127, 133, 2, 178, 247, 165, 45, 138, 215, 173, 163, 143, 110, 238, 10, 102, 74, 66, 38, 240, 251, 153, 129, 167, 81, 91, 111, 32, 82, 175, 49, 71, 30, 77, 209, 130, 253, 71, 30, 166, 198, 248, 235, 204, 179, 155, 217, 242, 173, 14, 147, 152, 66, 125, 223, 9, 144, 69, 154, 53, 164, 107, 67, 76, 31, 141, 176, 83, 183, 62, 9, 47, 220, 62, 19, 143, 138], - [195, 138, 100, 236, 46, 219, 69, 203, 41, 231, 235, 104, 115, 221, 66, 217, 163, 157, 28, 158, 0, 115, 200, 59, 199, 231, 162, 84, 133, 10, 248, 73, 44, 232, 188, 58, 202, 181, 232, 72, 255, 2, 107, 39, 129, 219, 9, 58, 156, 96, 228, 246, 119, 122, 83, 101, 121, 52, 74, 3, 220, 21, 225, 56, 195, 147, 39, 192, 133, 14, 230, 3, 103, 115, 203, 241, 183, 192, 218, 38, 28, 126, 140, 245, 1, 43, 4, 177, 152, 160, 253, 41, 33, 84, 127, 108, 79, 105, 211, 89, 162, 42, 230, 242, 213, 16, 94, 114, 218, 116, 119, 240, 162, 140, 199, 103, 56, 119, 97, 3, 237, 18, 211, 167, 73, 14, 154, 92, 6, 47, 54, 238, 6, 5, 93, 180, 30, 110, 34, 140, 111, 189, 69, 83, 54, 125, 37, 228, 35, 134, 90, 113, 195, 253, 105, 160, 27, 73, 250, 245, 44, 200, 125, 169, 28, 5, 149, 118, 74, 86, 221, 120, 13, 69, 84, 219, 67, 49, 186, 59, 155, 69, 9, 204, 238, 162, 209, 52, 161, 172, 143, 150, 108, 246, 197, 174, 78, 222, 0, 164, 252, 149, 45, 43, 71, 239, 149, 68, 114, 169, 3, 115, 160, 67, 27, 52, 196, 119, 196, 177, 24, 156, 40, 4, 185, 109, 165, 37, 7, 126, 211, 189, 20, 139, 218, 91, 60, 53, 143, 124, 221, 226, 127, 12, 96, 55, 47, 243, 54, 114, 9, 187, 111, 95, 40, 48, 91, 168, 97, 227, 92, 34, 148, 112, 140, 140, 190, 32, 234, 66, 32, 187, 235, 196, 236, 15, 3, 211, 44, 39, 103, 23, 34, 123, 221, 176, 227, 244, 255, 154, 146, 107, 189, 151, 59, 197, 208, 202, 88, 214, 122, 29, 91, 113, 80, 167, 156, 95, 64, 182, 233, 80, 42, 107, 106, 56, 125, 64, 225, 191, 217, 179, 219, 172, 40, 10, 77, 140, 21, 137, 246, 215, 76, 125, 146, 236, 0, 171, 0, 201, 206, 111, 241, 74, 61, 57, 3, 144, 113, 183, 20, 227, 193, 113, 20, 244, 230, 117, 200, 58, 172, 92, 244, 239, 18, 119, 99, 153, 75, 196, 147, 69, 87, 238, 251, 97, 15, 202, 219, 241, 219, 241, 244, 76, 220, 6, 187, 65, 246, 61, 141, 219, 85, 74, 7, 45, 255, 59, 163, 195, 84, 33, 188, 209, 92, 102, 169, 58, 188, 56, 164, 186, 148, 81, 150, 240, 18, 209, 215, 144, 66, 19, 73, 88, 52, 162, 7, 163, 32, 83, 88, 207, 146, 11, 205, 54, 8, 75, 228, 5, 220, 204, 138, 249, 239, 228, 115, 197, 66, 111, 253, 163, 175, 85, 118, 254, 62, 183, 156, 152, 13, 159, 140, 131, 66, 82, 68, 112, 128, 150, 81, 30, 244, 15, 120, 92, 241, 32, 108, 123, 240, 63, 10, 82, 44, 240, 23, 123, 183, 253, 41, 74, 112, 120, 156, 193, 75, 249, 218, 32, 223, 126, 33, 59, 78, 244, 98, 174, 222, 77, 44, 195, 203, 175, 42, 240, 70, 22, 136, 109, 114, 138, 140, 235, 183, 199, 26, 168, 116, 137, 234, 209, 115, 35, 203, 114, 93, 68, 215, 176, 144, 23, 228, 93, 179, 4, 114, 7, 246, 4, 61, 109, 245, 11, 196, 84, 102, 135, 7, 240, 229, 203, 24, 42, 51, 79, 74, 161, 190, 73, 138, 193, 39, 249, 161, 50, 12, 26, 187, 188, 197, 175, 206, 231, 73, 141, 105, 146, 125, 117, 60, 187, 149, 237, 179, 10, 169, 145, 220, 173, 210, 125, 213, 12, 27, 93, 92, 30, 31, 16, 77, 136, 187, 181, 17, 216, 99, 216, 212, 119, 81, 5, 161, 28, 168, 251, 8, 181, 144, 14, 79, 39, 250, 40, 130, 204, 169, 240, 88, 184, 144, 211, 17, 175, 38, 49, 16, 198, 77, 11, 176, 110, 86, 44, 197, 171, 124, 3, 55, 38, 176, 140, 25, 239, 68, 138, 215, 86, 233, 62, 128, 165, 24, 77, 224, 56, 190, 172, 155, 187, 99, 118, 247, 26, 110, 203, 240, 93, 44, 61, 217, 3, 143, 241, 129, 245, 150, 124, 81, 110, 247, 208, 55, 52, 191, 164, 233, 81, 158, 82, 27, 209, 230, 76, 38, 205, 162, 105, 24, 156, 19, 99, 240, 91, 145, 189, 21, 246, 52, 88, 34, 40, 148, 154, 167, 237, 143, 217, 95, 234, 166, 123, 83, 252, 112, 98, 131, 172, 155, 75, 145, 169, 195, 186, 27, 113, 157, 43, 165, 212, 162, 226, 141, 59, 159, 118, 45, 185, 181, 117, 156, 234, 253, 116, 218, 216, 104, 143, 240, 78, 23, 153, 253, 146, 30, 250, 178, 83, 45, 218, 5, 112, 79, 129, 253, 143, 98, 247, 223, 177, 100, 69, 119, 48, 77, 109, 119, 126, 36, 93, 218, 194, 185, 173, 1, 26, 201, 234, 178, 199, 62, 1, 241, 61, 241, 30, 139, 229, 140, 248, 59, 1, 110, 251, 231, 114, 46, 199, 226, 49, 169, 68, 44, 68, 201, 225, 102, 238, 193, 99, 48, 59, 158, 39, 216, 179, 176, 112, 237, 113, 193, 186, 180, 234, 167, 56, 122, 172, 141, 217, 120, 39, 6, 87, 131, 1, 131, 170, 219, 224, 141, 72, 17, 119, 141, 14, 227, 44, 96, 225, 214, 7, 146, 157, 53, 148, 235, 50, 255, 233, 168, 213, 123, 54, 39, 157, 248, 33, 96, 44, 212, 228, 226, 237, 89, 29, 211, 175, 62, 33, 104, 31, 99, 17, 22, 7, 240, 115, 62, 57, 60, 219, 205, 111, 66, 132, 3, 229, 25, 185, 220, 150, 66, 46, 40, 153, 144, 55, 188, 142, 93, 232, 165, 144, 174, 36, 121, 77, 76, 136, 184, 210, 159, 157, 42, 136, 148, 208, 51, 13, 68, 208, 114, 94, 170, 164, 176, 212, 253, 145, 88, 141, 95, 155, 36, 116, 44, 171, 229, 192, 40, 186, 65, 56, 121, 1, 28, 140, 119, 100, 59, 69, 176, 122, 230, 80, 34, 104, 59, 40, 4, 102, 141, 185, 30, 98, 187, 67, 6, 104, 227, 10, 26, 215, 129, 59, 245, 1, 98, 209, 141, 124, 38, 69, 217, 130, 192, 38, 47, 84, 90, 193, 246, 72, 188, 82, 49, 243, 227, 195, 77, 105, 250, 80, 52, 221, 45, 255, 117, 98, 59, 232, 54, 246, 99, 14, 21, 202, 60, 139, 202, 25, 127, 237, 191, 107, 178, 246, 29, 150, 4, 212, 114, 97, 165, 128, 221, 16, 96, 94, 208, 159, 6, 187, 238, 5, 236, 1, 218, 137, 212, 115, 66, 49, 102, 160, 96, 40, 166, 168, 139, 60, 233, 125, 86, 86, 205, 105, 69, 171, 180, 218, 20, 253, 75, 122, 138, 96, 219, 182, 154, 154, 100, 177, 203, 186, 80, 123, 177, 228, 25, 20, 109, 73, 230, 18, 152, 149, 77, 236, 206, 93, 129, 78, 202, 168, 46, 175, 5, 169, 111, 253, 53, 205, 171, 149, 128, 121, 199, 126, 62, 234, 54, 20, 40, 109, 7, 236, 78, 100, 37, 8, 7, 114, 246, 254, 96, 249, 49, 126, 15, 201, 187, 227, 182, 123, 128, 160, 251, 60, 175, 210, 173, 202, 210, 182, 212, 250, 159, 250, 77, 119, 190, 51, 131, 211, 202, 25, 196, 98, 138, 105, 174, 177, 215, 24, 210, 54, 160, 138, 146, 94, 195, 109, 52, 202, 245, 24, 182, 196, 183, 62, 13, 135, 247, 122, 16, 77, 91, 138, 95, 164, 120, 80, 248, 223, 20, 251, 193, 179, 27, 59, 143, 202, 97, 166, 110, 183, 60, 220, 186, 243, 251, 103, 171, 213, 211, 122, 57, 148, 107, 56, 15, 1, 210, 146, 106, 145, 243, 7, 82, 41, 46, 236, 106, 227, 209, 8, 232, 144, 33, 126, 208, 5, 126, 140, 35, 222, 194, 131, 45, 68, 66, 248, 180, 70, 179, 149, 193, 46, 28, 216, 120, 126, 24, 181, 117, 222, 107, 185, 178, 136, 203, 255, 220, 28, 249, 20, 149, 33, 34, 33, 68, 48, 145, 145, 59, 74, 204, 44, 35, 31, 64, 42, 193, 60, 158, 126, 127, 139, 86, 140, 68, 44, 61, 219, 255, 195, 38, 114, 4, 254, 162, 128, 209, 79, 21, 100, 119, 113, 79, 157, 158, 149, 57, 75, 101, 182, 26, 208, 208, 158, 179, 173, 47, 202, 86, 118, 151, 34, 93, 58, 70, 149, 13, 16, 10, 78, 1, 78, 184, 130, 5, 252, 105, 112, 151, 185, 233, 97, 216, 107, 231, 39, 229, 82, 74, 87, 123, 151, 130, 29, 43, 242, 113, 37, 6, 106, 49, 96, 5, 148, 197, 94, 25, 230, 201, 33, 4, 224, 111, 173, 122, 24, 78, 62, 1, 27, 95, 108, 9, 38, 223, 187, 140, 171, 201, 106, 30, 221, 93, 161, 167, 13, 18, 26, 34, 150, 13, 145, 153, 78, 229, 17, 68, 112, 240, 145, 201, 78, 165, 28, 176, 141, 87, 231, 94, 178, 53, 141, 18, 113, 35, 148, 124, 109, 58, 29, 66, 162, 241, 254, 135, 233, 158, 248, 122, 169, 99, 25, 50, 199, 221, 51, 106, 128, 113, 20, 89, 202, 15, 179, 248, 105, 136, 108, 210, 112, 229, 219, 124, 235, 56, 28, 79, 51, 5, 113, 247, 144, 10, 246, 242, 157, 22, 96, 129, 227, 207, 94, 184, 228, 70, 233, 161, 251, 238, 183, 127, 186, 189, 188, 221, 17, 164, 19, 182, 0, 244, 239, 7, 159, 107, 197, 192, 111, 152, 246, 228, 76, 175, 85, 121, 50, 42, 58, 41, 255, 24, 232, 186, 248, 78, 16, 76, 150, 135, 27, 142, 139, 124, 71, 233, 179, 150, 169, 187, 48, 159, 251, 12, 1, 237, 254, 206, 205, 102, 110, 149, 89, 201, 32, 167, 175, 95, 164, 81, 241, 169, 109, 157, 118, 155, 187, 144, 68, 59, 149, 229, 42, 41, 165, 122, 229, 28, 202, 147, 230, 41, 235, 156, 169, 38, 98, 98, 246, 185, 128, 193, 89, 153, 145, 144, 23, 254, 65, 39, 67, 23, 156, 150, 101, 198, 81, 167, 254, 162, 5, 249, 229, 109, 44, 165, 104, 225, 118, 207, 209, 159, 218, 24, 45, 23, 18, 86, 2, 147, 14, 60, 123, 246, 209, 58, 238, 139, 155, 65, 94, 189, 206, 5, 254, 235, 71, 227, 202, 29, 22, 113, 92, 231, 202, 135, 37, 95, 181, 97, 49, 115, 34, 182, 20, 89, 74, 103, 157, 241, 156, 72, 143, 139, 67, 173, 121, 178, 60, 224, 131, 252, 202, 143, 105, 248, 27, 228, 205, 86, 185, 228, 80, 182, 193, 245, 145, 90, 69, 64, 170, 11, 212, 83, 9, 88, 208, 69, 7, 205, 249, 28, 143, 219, 14, 44, 8, 17, 60, 183, 145, 188, 150, 96, 73, 162, 18, 99, 76, 127, 250, 184, 88, 163, 190, 142, 181, 228, 201, 139, 232, 64, 104, 192, 190, 133, 223, 65, 127, 136, 118, 55, 165, 135, 27, 86, 178, 111, 204, 108, 212, 104, 32, 86, 97, 172, 173, 65, 55, 229, 34, 13, 244, 226, 159, 47, 223, 72, 73, 11, 138, 231, 163, 37, 21, 57, 131, 18, 125, 36, 117, 14, 63, 243, 80, 185, 100, 6, 209, 176, 177, 33, 20, 199, 209, 252, 237, 142, 20, 203, 96, 252, 96, 100, 14, 74, 150, 64, 164, 238, 105, 113, 141, 98, 255, 39, 180, 245, 55, 5, 120, 52, 187, 94, 190, 42, 50, 121, 247, 203, 222, 175, 181, 176, 231, 65, 162, 100, 46, 230, 60, 123, 30, 26, 248, 202, 86, 191, 46, 165, 187, 135, 58, 173, 220, 94, 61, 34, 89, 58, 159, 132, 11, 50, 17, 200, 246, 55, 216, 174, 234, 13, 124, 224, 211, 211, 186, 204, 239, 2, 13, 165, 208, 104, 167, 101, 222, 100, 92, 229, 13, 175, 202, 116, 5, 209, 54, 132, 59, 187, 207, 113, 222, 167, 40, 173, 48, 127, 101, 93, 65, 158, 206, 147, 146, 84, 223, 205, 33, 79, 123, 58, 243, 124, 239, 173, 4, 197, 82, 202, 68, 123, 4, 252, 216, 133, 20, 57, 44, 223, 77, 143, 222, 221, 139, 225, 104, 249, 232, 151, 59, 58, 16, 182, 62, 0, 130, 128, 181, 114, 38, 230, 37, 190, 250, 157, 184, 161, 97, 43, 188, 46, 66, 42, 85, 129, 175, 35, 23, 176, 142, 227, 201, 210, 8, 214, 215, 80, 97, 169, 164, 58, 109, 68, 72, 163, 239, 137, 251, 7, 156, 106, 146, 160, 27, 160, 110, 151, 252, 90, 204, 172, 223, 98, 160, 235, 102, 43, 208, 172, 26, 109, 49, 4, 236, 226, 95, 217, 79, 158, 240, 86, 15, 165, 70, 212, 170, 139, 161, 94, 221, 29, 167, 159, 166, 217, 126, 1, 151, 235, 142, 221, 160, 252, 193, 71, 95, 125, 215, 91, 161, 43, 108, 54, 255, 40, 80, 228, 125, 12, 85, 187, 32, 66, 70, 127, 238, 163, 8, 105, 165, 101, 135, 163, 65, 110, 74, 237, 104, 218, 13, 171, 244, 231, 41, 44, 143, 140, 28, 195, 48, 194, 173, 168, 42, 245, 80, 95, 105, 133, 218, 115, 134, 177, 201, 242, 130, 70, 51, 34, 86, 34, 30, 163, 9, 20, 60, 103, 212, 240, 42, 200, 196, 59, 3, 233, 217, 111, 52, 189, 147, 170, 132, 124, 196, 239, 95, 157, 186, 17, 192, 237, 45, 27, 91, 131, 37, 144, 213, 160, 188, 238, 124, 254, 208, 153, 24, 39, 73, 204, 93, 77, 83, 36, 3, 217, 228, 221, 201, 187, 198, 178, 108, 68, 139, 176, 2, 62, 186, 218, 77, 93, 242, 239, 155, 161, 96, 81, 32, 203, 241, 109, 242, 244, 47, 19, 53, 16, 187, 74, 69, 58, 0, 41, 84, 3, 82, 36, 95, 182, 65, 81, 27, 49, 210, 128, 212, 191, 126, 25, 248, 4, 34, 69, 70, 103, 180, 69, 153, 251, 209, 102, 140, 188, 55, 5, 247, 7, 41, 201, 244, 221, 68, 245, 138, 176, 0, 224, 65, 192, 144, 19, 246, 110, 36, 223, 167, 83, 198, 212, 165, 226, 246, 131, 222, 128, 162, 213, 18, 60, 204, 84, 204, 138, 127, 231, 222, 127, 175, 16, 34, 137, 39, 88, 179, 0, 230, 140, 41, 228, 101, 121, 29, 41, 101, 158, 181, 181, 181, 191, 184, 242, 43, 248, 193, 154, 61, 240, 254, 61, 67, 84, 217, 187, 156, 218, 34, 48, 21, 20, 141, 108, 180, 181, 96, 9, 70, 179, 174, 187, 14, 254, 96, 95, 99, 56, 188, 31, 138, 222, 22, 70, 40, 178, 80, 155, 68, 177, 97, 80, 202, 89, 129, 129, 137, 5, 213, 143, 197, 97, 13, 53, 62, 165, 231, 111, 92, 74, 124, 28, 235, 216, 139, 188, 198, 26, 13, 8, 145, 108, 101, 10, 50, 191, 235, 48, 213, 41, 75, 37, 131, 83, 241, 41, 206, 227, 148, 70, 111, 96, 134, 246, 130, 210, 60, 199, 247, 5, 109, 116, 83, 231, 205, 80, 22, 183, 11, 6, 37, 147, 217, 100, 133, 42, 248, 127, 64, 167, 233, 155, 239, 117, 111, 170, 134, 68, 113, 160, 176, 180, 142, 80, 35, 97, 145, 254, 168, 183, 229, 188, 199, 187, 75, 131, 62, 132, 83, 222, 11, 5, 75, 183, 37, 159, 28, 13, 127, 16, 96, 27, 173, 186, 235, 55, 248, 139, 66, 23, 230, 158, 131, 110, 18, 59, 2, 196, 132, 23, 151, 205, 54, 185, 249, 171, 202, 3, 163, 154, 237, 53, 118, 192, 181, 244, 168, 47, 249, 208, 192, 185, 89, 172, 212, 174, 201, 35, 28, 217, 205, 252, 200, 139, 165, 50, 199, 90, 114, 203, 187, 231, 21, 236, 95, 89, 150, 121, 18, 123, 219, 27, 51, 86, 226, 204, 147, 77, 211, 252, 148, 79, 187, 65, 64, 208, 203, 150, 41, 35, 65, 64, 9, 33, 160, 93, 15, 147, 152, 103, 172, 154, 173, 75, 171, 20, 201, 248, 18, 10, 37, 239, 149, 252, 35, 247, 129, 57, 206, 211, 18, 140, 94, 156, 0, 29, 253, 220, 239, 65, 91, 93, 140, 250, 180, 155, 206, 62, 245, 243, 227, 32, 98, 80, 122, 232, 63, 0, 134, 147, 241, 113, 251, 203, 180, 135, 188, 253, 251, 255, 173, 194, 218, 182, 92, 231, 81, 129, 202, 236, 43, 205, 230, 167, 163, 126, 65, 146, 62, 145, 24, 127, 208, 139, 221, 207, 239, 76, 173, 42, 26, 63, 19, 162, 99, 160, 31, 120, 14, 228, 44, 11, 131, 90, 67, 71, 159, 239, 9, 127, 81, 45, 91, 204, 18, 249, 180, 131, 240, 183, 123, 249, 129, 108, 253, 19, 146, 164, 154, 160, 226, 214, 232, 87, 156, 77, 151, 128, 3, 172, 94, 186, 229, 228, 54, 78, 156, 30, 188, 220, 213, 17, 118, 114, 139, 58, 100, 108, 210, 204, 188, 219, 103, 70, 16, 80, 32, 146, 35, 186, 174, 234, 55, 68, 236, 213, 47, 174, 182, 134, 237, 40, 115, 64, 68, 74, 169, 205, 134, 92, 205, 201, 214, 56, 98, 30, 16, 100, 234, 223, 200, 105, 191, 75, 46, 142, 59, 121, 238, 116, 99, 171, 235, 97, 211, 40, 70, 242, 198, 85, 40, 48, 172, 31, 57, 152, 181, 94, 164, 210, 210, 27, 177, 22, 52, 222, 229, 100, 191, 197, 213, 129, 65, 39, 6, 162, 114, 223, 187, 114, 180, 62, 1, 25, 126, 170, 8, 239, 11, 224, 211, 117, 191, 187, 7, 213, 234, 70, 168, 130, 195, 120, 95, 74, 213, 85, 152, 103, 130, 188, 153, 63, 84, 208, 31, 110, 207, 79, 175, 231, 142, 247, 187, 174, 223, 138, 221, 139, 254, 215, 82, 149, 130, 94, 115, 161, 174, 102, 52, 113, 50, 206, 173, 218, 25, 229, 85, 184, 96, 45, 65, 31, 122, 250, 55, 168, 83, 20, 63, 70, 72, 206, 32, 133, 154, 104, 147, 162, 252, 221, 175, 28, 170, 72, 16, 28, 247, 163, 178, 197, 252, 119, 199, 110, 207, 71, 243, 26, 242, 189, 13, 181, 47, 115, 112, 214, 123, 143, 244, 156, 247, 177, 139, 159, 26, 115, 150, 32, 71, 227, 251, 113, 179, 170, 150, 162, 134, 78, 243, 113, 193, 221, 43, 251, 44, 45, 80, 54, 64, 20, 115, 232, 133, 169, 247, 49, 34, 11, 9, 189, 52, 183, 189, 242, 61, 164, 44, 23, 51, 234, 80, 202, 184, 0, 37, 156, 75, 183, 250, 53, 37, 232, 52, 140, 179, 245, 222, 178, 182, 13, 188, 118, 68, 52, 0, 104, 60, 108, 40, 19, 170, 74, 65, 222, 73, 193, 212, 104, 72, 46, 48, 139, 254, 212, 232, 209, 179, 220, 102, 220, 173, 242, 43, 12, 127, 73, 201, 105, 62, 122, 156, 122, 83, 165, 33, 5, 196, 125, 107, 162, 120, 194, 235, 151, 246, 148, 227, 33, 112, 157, 111, 9, 3, 77, 71, 92, 214, 144, 41, 177, 118, 233, 159, 59, 40, 97, 194, 114, 106, 69, 178, 21, 4, 29, 64, 90, 190, 93, 59, 95, 151, 216, 162, 123, 248, 111, 112, 84, 67, 79, 171, 46, 140, 99, 175, 62, 136, 147, 31, 175, 252, 201, 194, 208, 183, 29, 165, 201, 202, 208, 196, 163, 148, 246, 103, 157, 223, 250, 210, 108, 215, 161, 72, 189, 102, 243, 2, 29, 173, 107, 21, 221, 118, 95, 192, 75, 31, 50, 16, 2, 182, 130, 85, 142, 54, 31, 249, 24, 223, 59, 159, 91, 43, 247, 226, 4, 119, 191, 126, 227, 13, 159, 128, 236, 6, 249, 40, 103, 247, 207, 154, 215, 41, 33, 135, 72, 70, 134, 162, 56, 112, 16, 81, 42, 18, 193, 65, 114, 226, 8, 147, 1, 228, 1, 29, 153, 211, 7, 223, 133, 246, 171, 15, 234, 137, 87, 13, 82, 57, 123, 35, 24, 180, 179, 75, 105, 73, 43, 253, 160, 125, 249, 119, 51, 165, 75, 11, 119, 8, 159, 232, 132, 2, 65, 136, 47, 224, 149, 177, 204, 251, 113, 180, 9, 177, 192, 141, 219, 100, 105, 85, 238, 163, 254, 53, 8, 167, 26, 85, 67, 193, 26, 104, 8, 64, 246, 88, 32, 3, 63, 44, 48, 83, 191, 136, 109, 238, 98, 104, 52, 9, 53, 149, 245, 230, 1, 33, 62, 198, 212, 5, 175, 207, 14, 56, 218, 23, 1, 28, 2, 167, 229, 147, 10, 69, 71, 131, 24, 244, 34, 177, 141, 242, 225, 163, 245, 65, 67, 104, 63, 242, 230, 145, 162, 124, 149, 63, 229, 175, 215, 109, 75, 203, 38, 15, 154, 57, 136, 148, 105, 173, 192, 241, 140, 72, 240, 20, 96, 121, 178, 123, 81, 125, 107, 200, 106, 195, 120, 78, 11, 62, 204, 167, 196, 195, 86, 62, 201, 79, 12, 21, 207, 0, 86, 180, 134, 119, 106, 158, 64, 214, 186, 182, 244, 138, 130, 138, 219, 129, 236, 154, 187, 16, 209, 48, 77, 254, 70, 134, 25, 217, 70, 247, 161, 142, 109, 147, 143, 39, 177, 29, 196, 66, 238, 35, 27, 1, 223, 228, 123, 34, 75, 217, 245, 103, 117, 121, 153, 2, 55, 180, 105, 244, 139, 142, 228, 45, 102, 191, 138, 191, 82, 44, 205, 29, 218, 134, 208, 182, 85, 73, 29, 154, 215, 175, 3, 216, 85, 86, 31, 81, 93, 86, 83, 212, 40, 215, 182, 23, 89, 207, 115, 107, 201, 134, 159, 168, 84, 19, 120, 16, 105, 20, 240, 194, 159, 15, 19, 78, 170, 163, 140, 98, 251, 18, 179, 182, 253, 189, 129, 86, 173, 54, 238, 60, 86, 163, 119, 179, 77, 164, 140, 100, 32, 221, 135, 1, 147, 86, 160, 252, 82, 90, 143, 208, 236, 183, 190, 97, 183, 53, 56, 122, 191, 140, 108, 203, 59, 154, 91, 171, 53, 95, 240, 35, 212, 237, 232, 210, 182, 242, 216, 124, 230, 130, 241, 196, 51, 238, 193, 152, 72, 87, 247, 157, 89, 124, 223, 17, 148, 90, 17, 48, 129, 158, 221, 63, 20, 196, 116, 192, 4, 39, 121, 173, 94, 110, 211, 83, 2, 199, 175, 184, 39, 197, 57, 149, 191, 72, 240, 137, 222, 23, 138, 141, 172, 205, 185, 28, 119, 59, 58, 131, 150, 25, 53, 26, 59, 130, 84, 147, 108, 166, 150, 232, 45, 4, 190, 219, 62, 164, 74, 147, 76, 49, 33, 40, 193, 63, 78, 51, 43, 120, 186, 33, 27, 45, 126, 85, 13, 36, 252, 15, 178, 40, 129, 172, 28, 24, 225, 195, 138, 195, 112, 190, 255, 78, 84, 32, 170, 46, 150, 13, 228, 115, 21, 120, 25, 225, 15, 57, 9, 148, 36, 211, 230, 215, 123, 83, 177, 122, 95, 91, 47, 185, 33, 147, 26, 75, 254, 238, 126, 3, 107, 109, 222, 154, 141, 249, 178, 202, 124, 31, 86, 22, 239, 8, 173, 128, 245, 182, 119, 122, 235, 139, 105, 31, 146, 168, 67, 246, 163, 143, 23, 112, 231, 232, 105, 66, 158, 21, 126, 107, 103, 139, 81, 93, 45, 133, 47, 102, 1, 42, 231, 147, 247, 195, 225, 157, 3, 57, 139, 240, 208, 63, 144, 21, 222, 205, 135, 90, 92, 68, 51, 79, 161, 208, 214, 48, 36, 153, 23, 72, 81, 118, 109, 238, 118, 25, 192, 51, 42, 114, 1, 86, 87, 45, 152, 166, 224, 89, 174, 76, 205, 226, 121, 108, 102, 66, 253, 77, 49, 8, 133, 97, 14, 87, 231, 235, 130, 159, 234, 141, 144, 255, 208, 2, 17, 204, 91, 238, 23, 173, 104, 50, 124, 176, 29, 107, 122, 66, 125, 166, 159, 249, 250, 36, 191, 93, 194, 252, 75, 37, 89, 244, 232, 245, 50, 193, 103, 47, 87, 1, 84, 54, 87, 18, 242, 170, 96, 163, 51, 99, 235, 199, 35, 105, 153, 164, 106, 140, 34, 7, 238, 33, 237, 40, 142, 68, 161, 0, 69, 44, 11, 151, 116, 70, 232, 236, 128, 125, 0, 85, 94, 105, 220, 27, 227, 227, 162, 108, 230, 2, 50, 100, 228, 155, 43, 8, 114, 202, 212, 211, 221, 253, 220, 203, 56, 236, 204, 29, 238, 155, 37, 241, 176, 210, 86, 182, 98, 230, 211, 75, 26, 182, 53, 15, 66, 137, 67, 1, 86, 51, 67, 195, 231, 1, 177, 201, 37, 80, 138, 137, 221, 86, 239, 232, 49, 197, 80, 12, 87, 85, 219, 31, 7, 118, 13, 110, 158, 212, 41, 172, 199, 70, 43, 194, 201, 4, 47, 192, 0, 41, 49, 195, 142, 146, 70, 128, 41, 253, 80, 248, 23, 69, 47, 52, 128, 160, 72, 213, 59, 106, 230, 232, 101, 43, 84, 115, 205, 195, 153, 37, 75, 0, 75, 135, 210, 163, 89, 227, 206, 205, 116, 229, 92, 64, 125, 62, 144, 90, 105, 217, 53, 250, 244, 244, 16, 95, 177, 67, 173, 138, 41, 141, 47, 25, 127, 134, 44, 127, 31, 124, 78, 102, 22, 40, 96, 52, 131, 158, 9, 137, 169, 133, 204, 232, 19, 41, 75, 98, 56, 7, 120, 74, 89, 96, 140, 217, 50, 104, 14, 155, 110, 108, 86, 45, 101, 175, 229, 14, 81, 141, 146, 146, 223, 105, 90, 8, 2, 89, 253, 144, 189, 186, 230, 130, 154, 202, 41, 184, 189, 115, 40, 79, 26, 204, 51, 152, 255, 63, 141, 234, 155, 201, 114, 189, 131, 206, 241, 228, 3, 192, 95, 199, 31, 40, 91, 10, 38, 255, 88, 167, 82, 186, 240, 118, 70, 246, 32, 63, 147, 75, 104, 127, 219, 36, 11, 119, 63, 42, 117, 103, 159, 6, 124, 75, 212, 36, 205, 77, 89, 96, 176, 90, 79, 28, 3, 145, 86, 141, 151, 63, 242, 89, 213, 162, 191, 97, 225, 165, 227, 203, 28, 236, 177, 178, 219, 123, 201, 57, 12, 195, 240, 165, 103, 255, 23, 255, 233, 28, 140, 129, 223, 2, 225, 238, 233, 69, 168, 33, 101, 45, 155, 19, 0, 25, 83, 143, 129, 47, 23, 63, 99, 106, 122, 14, 14, 28, 149, 202, 63, 50, 233, 65, 237, 68, 89, 154, 175, 36, 15, 240, 157, 97, 159, 125, 242, 10, 103, 19, 62, 232, 167, 79, 124, 133, 174, 78, 71, 137, 93, 213, 221, 88, 226, 198, 84, 159, 76, 107, 39, 139, 147, 120, 254, 88, 157, 105, 16, 44, 95, 193, 203, 70, 243, 107, 202, 253, 252, 237, 228, 6, 192, 75, 164, 171, 213, 203, 109, 253, 178, 201, 194, 157, 113, 160, 211, 90, 99, 78, 72, 182, 14, 80, 158, 27, 122, 74, 227, 131, 238, 15, 120, 34, 91, 76, 245, 222, 30, 187, 248, 46, 141, 12, 144, 89, 42, 166, 162, 138, 21, 157, 149, 135, 136, 133, 238, 188, 165, 32, 35, 43, 54, 227, 22, 210, 20, 173, 221, 238, 39, 234, 7, 132, 233, 75, 168, 32, 89, 123, 112, 3, 144, 229, 25, 191, 97, 168, 191, 99, 78, 118, 62, 101, 154, 209, 174, 79, 210, 180, 220, 204, 58, 116, 225, 252, 18, 188, 254, 42, 88, 102, 145, 168, 140, 100, 253, 62, 202, 219, 154, 233, 204, 34, 101, 20, 148, 24, 221, 6, 171, 233, 174, 206, 215, 32, 40, 44, 51, 40, 13, 240, 250, 98, 133, 15, 194, 20, 108, 198, 63, 81, 73, 253, 185, 162, 1, 190, 10, 245, 21, 21, 215, 179, 0, 67, 225, 137, 139, 48, 108, 140, 97, 235, 142, 176, 161, 184, 10, 7, 250, 43, 147, 234, 49, 101, 28, 231, 178, 241, 55, 207, 81, 221, 106, 175, 46, 141, 57, 84, 208, 111, 82, 62, 188, 105, 18, 251, 122, 6, 51, 194, 48, 199, 25, 237, 64, 211, 90, 25, 233, 179, 46, 192, 181, 79, 73, 170, 137, 162, 214, 194, 61, 141, 241, 170, 124, 18, 191, 236, 182, 122, 130, 247, 96, 155, 41, 23, 194, 111, 69, 94, 64, 196, 154, 252, 214, 235, 201, 223, 140, 130, 125, 191, 133, 205, 252, 178, 4, 178, 210, 161, 155, 253, 219, 143, 175, 18, 8, 147, 13, 30, 70, 88, 149, 55, 166, 15, 191, 227, 110, 209, 72, 189, 137, 231, 51, 254, 88, 99, 46, 64, 6, 218, 51, 246, 144, 29, 128, 41, 95, 205, 120, 7, 182, 161, 77, 141, 106, 131, 116, 56, 171, 76, 85, 159, 124, 36, 246, 142, 47, 161, 14, 156, 95, 147, 90, 221, 28, 233, 190, 52, 58, 116, 115, 104, 245, 64, 249, 200, 150, 108, 168, 35, 44, 185, 62, 224, 72, 79, 213, 241, 154, 175, 232, 125, 25, 225, 212, 58, 53, 35, 66, 90, 180, 71, 114, 224, 186, 2, 119, 78, 95, 29, 177, 148, 217, 77, 106, 178, 8, 188, 85, 192, 232, 167, 178, 201, 193, 175, 70, 44, 78, 16, 50, 186, 66, 53, 117, 204, 97, 185, 62, 145, 133, 22, 115, 69, 195, 207, 151, 95, 206, 225, 226, 20, 117, 121, 129, 159, 61, 205, 11, 128, 238, 25, 219, 155, 10, 66, 153, 37, 156, 73, 77, 10, 10, 48, 47, 21, 86, 83, 26, 154, 191, 212, 2, 62, 6, 165, 113, 17, 90, 34, 134, 0, 193, 135, 152, 143, 99, 107, 9, 64, 124, 39, 169, 43, 198, 195, 114, 143, 33, 235, 70, 216, 154, 14, 69, 126, 122, 250, 239, 217, 207, 73, 68, 126, 210, 107, 123, 78, 85, 1, 51, 163, 64, 81, 71, 130, 196, 107, 228, 77, 191, 168, 48, 9, 167, 18, 247, 117, 41, 83, 81, 249, 9, 93, 237, 150, 90, 166, 10, 89, 74, 235, 13, 110, 124, 33, 223, 51, 38, 54, 142, 128, 112, 196, 106, 135, 133, 181, 231, 237, 71, 171, 188, 15, 149, 92, 13, 251, 228, 177, 201, 160, 18, 201, 49, 29, 198, 139, 25, 40, 247, 56, 163, 84, 42, 133, 230, 54, 68, 187, 75, 178, 177, 46, 155, 91, 208, 111, 90, 160, 82, 243, 47, 22, 250, 158, 156, 29, 74, 46, 3, 134, 188, 129, 49, 143, 42, 209, 149, 197, 145, 71, 111, 37, 226, 95, 233, 216, 34, 63, 62, 133, 172, 154, 105, 162, 196, 15, 45, 167, 25, 248, 69, 136, 57, 47, 69, 39, 238, 170, 227, 55, 183, 154, 107, 37, 65, 191, 14, 54, 8, 50, 141, 113, 101, 27, 82, 210, 110, 241, 89, 216, 63, 44, 86, 161, 30, 25, 53, 46, 18, 123, 60, 159, 30, 70, 214, 255, 112, 53, 119, 53, 191, 71, 164, 70, 43, 202, 54, 158, 97, 78, 1, 254, 214, 31, 82, 149, 145, 16, 27, 224, 47, 131, 30, 117, 107, 145, 153, 79, 129, 231, 126, 21, 185, 162, 244, 193, 194, 251, 218, 93, 225, 30, 116, 105, 20, 162, 101, 93, 242, 232, 26, 226, 112, 52, 181, 116, 241, 100, 177, 70, 177, 227, 247, 27, 73, 73, 39, 20, 12, 122, 156, 7, 151, 22, 94, 250, 206, 174, 172, 75, 160, 47, 205, 7, 184, 174, 122, 127, 60, 35, 36, 225, 13, 91, 231, 194, 18, 117, 170, 218, 151, 30, 33, 75, 234, 243, 163, 33, 242, 233, 143, 107, 12, 140, 193, 51, 14, 48, 220, 84, 220, 195, 102, 16, 200, 206, 79, 144, 216, 41, 238, 47, 83, 60, 108, 212, 156, 124, 152, 52, 166, 62, 173, 225, 137, 167, 245, 152, 8, 199, 166, 205, 241, 59, 248, 18, 89, 15, 190, 237, 223, 186, 99, 112, 172, 64, 43, 8, 90, 88, 105, 117, 185, 191, 65, 110, 156, 212, 132, 29, 193, 59, 144, 104, 34, 163, 242, 22, 96, 119, 49, 107, 157, 68, 245, 210, 159, 22, 231, 1, 13, 254, 208, 42, 135, 83, 101, 110, 44, 102, 163, 187, 92, 188, 48, 203, 173, 67, 241, 44, 200, 134, 161, 191, 12, 150, 200, 92, 179, 213, 97, 201, 59, 137, 48, 54, 181, 44, 28, 186, 29, 60, 34, 232, 181, 81, 165, 162, 225, 57, 64, 129, 209, 227, 113, 129, 225, 85, 20, 96, 72, 103, 199, 133, 94, 158, 233, 176, 159, 87, 89, 87, 3, 96, 109, 13, 213, 44, 128, 142, 191, 88, 251, 183, 220, 150, 134, 184, 84, 13, 137, 66, 9, 123, 93, 249, 10, 3, 234, 11, 253, 124, 149, 215, 51, 213, 18, 182, 44, 113, 132, 158, 64, 106, 82, 254, 53, 239, 93, 242, 230, 46, 250, 16, 26, 36, 32, 176, 222, 200, 246, 112, 41, 11, 149, 61, 86, 45, 228, 200, 236, 152, 64, 95, 33, 251, 148, 65, 139, 107, 77, 69, 0, 223, 26, 91, 225, 168, 201, 31, 219, 4, 108, 108, 88, 133, 3, 129, 204, 86, 137, 215, 70, 7, 132, 193, 152, 131, 48, 138, 68, 212, 50, 253, 113, 139, 126, 3, 218, 153, 39, 235, 215, 238, 116, 139, 225, 228, 74, 104, 157, 186, 239, 237, 31, 203, 66, 159, 57, 109, 196, 237, 200, 146, 243, 161, 43, 221, 166, 197, 82, 238, 141, 135, 31, 105, 163, 37, 209, 224, 111, 212, 26, 204, 31, 131, 98, 76, 161, 118, 229, 215, 11, 184, 114, 41, 180, 23, 184, 252, 5, 80, 32, 33, 106, 160, 73, 216, 94, 144, 22, 193, 141, 133, 24, 122, 60, 141, 96, 95, 40, 74, 139, 124, 189, 195, 242, 102, 58, 237, 108, 199, 140, 223, 147, 203, 153, 142, 214, 141, 142, 239, 94, 226, 72, 36, 155, 115, 110, 123, 165, 27, 241, 157, 3, 216, 65, 210, 173, 181, 126, 228, 34, 11, 10, 138, 226, 103, 1, 205, 87, 82, 99, 13, 82, 164, 2, 118, 23, 14, 219, 217, 13, 157, 18, 176, 208, 32, 188, 76, 141, 163, 148, 77, 233, 163, 187, 41, 167, 253, 97, 175, 230, 215, 101, 202, 219, 131, 226, 58, 242, 219, 198, 243, 34, 91, 174, 208, 176, 0, 90, 25, 188, 194, 116, 72, 49, 0, 57, 4, 31, 111, 171, 147, 104, 156, 62, 1, 181, 21, 245, 200, 142, 230, 90, 42, 217, 235, 118, 77, 196, 68, 27, 82, 94, 215, 33, 90, 102, 120, 241, 244, 96, 131, 236, 214, 14, 212, 59, 142, 208, 43, 26, 236, 244, 154, 175, 131, 167, 57, 76, 248, 88, 76, 152, 218, 67, 103, 228, 169, 249, 211, 83, 242, 105, 211, 114, 237, 137, 52, 232, 239, 255, 106, 73, 8, 141, 86, 81, 3, 248, 94, 84, 57, 131, 223, 37, 111, 191, 68, 225, 186, 125, 95, 204, 150, 107, 213, 211, 174, 164, 23, 120, 188, 192, 85, 89, 193, 224, 213, 195, 132, 167, 169, 189, 218, 233, 123, 60, 190, 194, 105, 146, 213, 190, 84, 4, 152, 232, 250, 52, 173, 127, 57, 150, 97, 107, 237, 253, 34, 49, 234, 79, 151, 230, 36, 177, 31, 88, 83, 198, 108, 3, 60, 108, 148, 159, 182, 167, 183, 39, 18, 227, 127, 151, 188, 204, 24, 116, 152, 55, 34, 69, 153, 82, 28, 4, 131, 221, 49, 128, 89, 10, 218, 10, 213, 203, 6, 225, 189, 181, 191, 237, 236, 151, 53, 186, 221, 193, 240, 246, 215, 92, 61, 167, 244, 235, 197, 214, 113, 241, 189, 37, 246, 132, 199, 204, 15, 246, 244, 205, 167, 180, 17, 20, 26, 193, 193, 238, 177, 218, 26, 173, 87, 190, 229, 219, 205, 112, 32, 143, 249, 79, 231, 10, 99, 207, 12, 199, 68, 27, 225, 105, 87, 20, 137, 28, 4, 148, 247, 12, 14, 177, 139, 211, 119, 164, 122, 219, 18, 152, 179, 73, 133, 72, 244, 135, 146, 60, 17, 120, 50, 237, 103, 69, 58, 196, 102, 245, 234, 238, 100, 104, 5, 210, 39, 178, 199, 101, 58, 36, 200, 68, 3, 208, 83, 125, 55, 58, 97, 241, 114, 60, 213, 122, 67, 195, 238, 113, 113, 48, 101, 98, 158, 187, 156, 119, 164, 54, 183, 138, 42, 199, 85, 162, 102, 139, 233, 155, 205, 74, 69, 190, 156, 120, 4, 42, 69, 26, 199, 130, 93, 237, 227, 101, 118, 126, 224, 108, 117, 131, 206, 41, 170, 205, 217, 79, 5, 100, 225, 162, 226, 130, 214, 145, 60, 35, 75, 206, 28, 218, 87, 137, 0, 171, 237, 224, 19, 23, 122, 120, 58, 209, 235, 105, 252, 136, 120, 150, 33, 190, 253, 191, 62, 124, 148, 173, 249, 176, 173, 119, 97, 227, 171, 227, 84, 59, 212, 156, 79, 47, 178, 27, 27, 126, 68, 227, 194, 125, 239, 64, 48, 54, 9, 73, 38, 212, 190, 94, 176, 22, 23, 9, 242, 67, 75, 82, 42, 96, 215, 66, 126, 13, 160, 212, 118, 247, 144, 73, 50, 131, 217, 82, 251, 147, 30, 30, 238, 175, 208, 51, 113, 246, 13, 192, 124, 6, 33, 23, 249, 199, 26, 211, 22, 130, 82, 223, 83, 179, 25, 106, 173, 254, 198, 111, 108, 216, 231, 201, 184, 120, 5, 99, 129, 152, 32, 72, 119, 165, 209, 75, 161, 43, 106, 54, 236, 174, 128, 43, 236, 3, 157, 0, 123, 95, 233, 206, 167, 26, 20, 165, 148, 136, 69, 138, 194, 135, 97, 143, 208, 62, 220, 17, 190, 17, 78, 122, 106, 14, 211, 91, 208, 76, 229, 249, 189, 101, 188, 230, 92, 49, 101, 59, 250, 76, 22, 103, 112, 153, 86, 177, 126, 129, 174, 34, 241, 78, 49, 169, 110, 150, 2, 245, 56, 161, 16, 212, 44, 116, 59, 181, 156, 62, 46, 252, 74, 82, 161, 242, 32, 55, 139, 204, 57, 122, 65, 94, 37, 187, 146, 76, 207, 226, 251, 80, 243, 126, 103, 170, 141, 13, 21, 81, 114, 85, 111, 145, 2, 115, 244, 47, 89, 220, 30, 36, 228, 137, 164, 116, 57, 232, 44, 90, 98, 0, 89, 84, 91, 229, 61, 152, 69, 70, 53, 179, 117, 254, 51, 108, 166, 156, 221, 174, 46, 72, 223, 145, 204, 196, 248, 150, 248, 60, 148, 111, 29, 92, 127, 87, 174, 132, 39, 195, 114, 132, 56, 72, 26, 118, 10, 86, 183, 172, 148, 105, 61, 149, 75, 116, 132, 251, 206, 47, 168, 85, 185, 219, 117, 186, 9, 200, 221, 232, 121, 50, 104, 96, 152, 189, 198, 109, 192, 120, 214, 89, 58, 75, 56, 56, 112, 87, 118, 138, 200, 233, 125, 22, 171, 140, 170, 80, 198, 160, 203, 150, 240, 75, 57, 83, 84, 110, 98, 228, 24, 140, 54, 105, 128, 116, 87, 118, 247, 159, 138, 236, 187, 2, 12, 242, 116, 215, 4, 96, 53, 57, 127, 149, 66, 205, 234, 20, 67, 197, 182, 198, 166, 172, 127, 152, 87, 101, 2, 120, 22, 179, 33, 44, 192, 248, 32, 116, 154, 161, 68, 2, 202, 42, 231, 30, 102, 147, 209, 228, 220, 26, 187, 248, 194, 47, 175, 82, 27, 3, 94, 226, 98, 243, 115, 121, 68, 241, 200, 98, 66, 88, 113, 23, 163, 30, 202, 195, 60, 245, 70, 107, 236, 66, 161, 122, 98, 22, 252, 180, 243, 38, 218, 222, 9, 73, 6, 31, 101, 5, 94, 49, 206, 239, 178, 54, 220, 16, 200, 1, 112, 28, 225, 17, 44, 28, 69, 187, 160, 152, 146, 212, 39, 152, 216, 138, 160, 211, 123, 136, 141, 73, 131, 122, 107, 233, 227, 244, 112, 80, 190, 164, 26, 173, 163, 128, 242, 218, 88, 254, 185, 48, 223, 31, 139, 97, 31, 59, 253, 157, 5, 177, 207, 106, 252, 229, 168, 8, 39, 200, 215, 57, 101, 222, 45, 202, 53, 119, 245, 113, 16, 246, 210, 93, 28, 62, 165, 106, 190, 171, 177, 67, 194, 180, 6, 179, 166, 105, 235, 157, 153, 165, 124, 185, 244, 115, 47, 163, 118, 193, 52, 150, 187, 255, 31, 28, 53, 70, 2, 253, 193, 126, 130, 199, 101, 126, 237, 249, 70, 82, 38, 187, 9, 87, 118, 228, 79, 220, 254, 209, 30, 189, 204, 207, 41, 81, 86, 111, 254, 165, 121, 226, 60, 146, 102, 193, 171, 42, 46, 110, 228, 15, 150, 140, 165, 7, 194, 113, 174, 194, 196, 166, 135, 59, 141, 93, 19, 201, 84, 66, 2, 132, 125, 242, 148, 238, 209, 115, 126, 234, 183, 95, 231, 79, 75, 86, 50, 4, 185, 213, 252, 1, 90, 100, 90, 44, 18, 138, 137, 178, 8, 166, 174, 200, 87, 126, 86, 25, 81, 60, 139, 26, 28, 123, 127, 156, 14, 125, 82, 132, 184, 218, 241, 96, 77, 90, 244, 246, 137, 2, 223, 82, 39, 11, 198, 68, 137, 199, 33, 105, 49, 100, 205, 25, 32, 121, 71, 161, 20, 88, 199, 91, 20, 146, 38, 135, 155, 165, 83, 54, 51, 170, 126, 87, 208, 205, 25, 117, 132, 62, 159, 158, 195, 152, 50, 171, 174, 176, 68, 140, 110, 225, 98, 197, 220, 79, 189, 94, 77, 36, 190, 19, 61, 45, 185, 231, 205, 223, 94, 156, 166, 69, 76, 7, 76, 168, 136, 1, 179, 113, 10, 191, 43, 201, 93, 5, 60, 191, 37, 45, 213, 222, 81, 117, 11, 178, 43, 214, 193, 59, 205, 93, 51, 104, 136, 46, 200, 58, 25, 50, 97, 97, 102, 58, 156, 217, 110, 202, 166, 62, 126, 10, 202, 117, 254, 250, 250, 4, 101, 68, 67, 213, 210, 142, 160, 65, 126, 214, 162, 53, 31, 252, 228, 175, 178, 230, 80, 131, 106, 49, 32, 118, 122, 171, 56, 238, 246, 189, 222, 200, 228, 112, 99, 93, 112, 110, 217, 7, 105, 239, 98, 109, 201, 29, 51, 88, 136, 207, 90, 148, 2, 119, 32, 253, 165, 250, 34, 23, 229, 61, 231, 133, 84, 236, 22, 79, 236, 143, 33, 193, 183, 55, 221, 173, 22, 22, 27, 160, 31, 53, 228, 173, 3, 55, 238, 91, 210, 129, 140, 93, 215, 90, 186, 207, 23, 54, 124, 181, 199, 0, 89, 101, 233, 243, 166, 120, 32, 245, 187, 85, 238, 28, 102, 71, 198, 178, 211, 227, 23, 201, 230, 161, 191, 21, 83, 245, 136, 11, 201, 121, 252, 193, 105, 111, 9, 111, 221, 157, 192, 181, 134, 209, 90, 171, 164, 112, 200, 181, 221, 63, 61, 229, 129, 21, 105, 186, 238, 231, 83, 90, 68, 54, 34, 47, 65, 169, 49, 224, 91, 155, 253, 236, 72, 77, 202, 240, 44, 65, 153, 103, 30, 78, 158, 216, 179, 123, 90, 252, 243, 229, 19, 5, 220, 39, 73, 112, 206, 141, 212, 159, 108, 177, 68, 247, 81, 153, 38, 152, 200, 149, 218, 151, 55, 10, 24, 226, 89, 249, 23, 129, 220, 54, 142, 94, 194, 144, 182, 172, 40, 118, 237, 44, 32, 112, 132, 244, 188, 93, 96, 252, 60, 202, 115, 170, 112, 15, 76, 131, 222, 85, 83, 143, 124, 219, 36, 219, 121, 126, 7, 212, 148, 194, 251, 235, 228, 7, 45, 55, 206, 155, 95, 27, 130, 68, 55, 4, 231, 88, 53, 229, 70, 160, 112, 49, 76, 15, 80, 170, 145, 210, 231, 250, 197, 113, 38, 151, 233, 193, 226, 30, 228, 53, 125, 80, 175, 219, 43, 34, 142, 190, 94, 127, 226, 111, 107, 69, 143, 61, 41, 98, 142, 76, 90, 93, 235, 245, 3, 118, 187, 245, 188, 103, 225, 251, 70, 220, 167, 38, 10, 175, 232, 165, 62, 166, 137, 31, 129, 83, 215, 53, 255, 7, 242, 74, 153, 185, 203, 6, 63, 172, 16, 251, 16, 56, 147, 43, 254, 2, 102, 205, 29, 25, 156, 244, 34, 34, 86, 204, 249, 29, 179, 246, 24, 118, 73, 114, 17, 185, 47, 21, 206, 24, 167, 136, 132, 105, 29, 199, 195, 254, 116, 80, 0, 181, 144, 144, 178, 223, 139, 82, 164, 48, 115, 22, 91, 228, 224, 98, 121, 113, 126, 96, 138, 224, 10, 195, 59, 105, 18, 185, 32, 192, 78, 244, 83, 139, 229, 153, 229, 41, 102, 148, 78, 48, 10, 224, 98, 249, 236, 148, 187, 201, 14, 161, 175, 75, 93, 242, 35, 185, 122, 87, 100, 155, 150, 26, 62, 87, 197, 84, 106, 114, 18, 202, 131, 63, 118, 7, 96, 94, 198, 249, 65, 115, 73, 237, 71, 235, 28, 110, 153, 198, 94, 24, 66, 175, 192, 225, 19, 92, 132, 4, 40, 224, 81, 196, 76, 207, 10, 138, 106, 50, 153, 138, 237, 165, 70, 204, 143, 34, 233, 93, 77, 213, 84, 157, 229, 158, 129, 4, 119, 44, 108, 99, 42, 205, 28, 99, 128, 96, 67, 110, 5, 94, 23, 174, 70, 133, 12, 152, 201, 60, 127, 71, 35, 141, 46, 234, 250, 246, 11, 226, 55, 228, 42, 102, 63, 253, 215, 47, 168, 189, 211, 59, 249, 116, 74, 183, 5, 246, 238, 20, 101, 33, 54, 66, 153, 96, 83, 147, 225, 112, 41, 106, 61, 245, 43, 206, 184, 4, 178, 107, 24, 121, 71, 54, 122, 105, 40, 171, 43, 58, 51, 26, 138, 90, 123, 123, 230, 127, 90, 169, 38, 131, 218, 240, 106, 137, 77, 52, 74, 107, 136, 173, 250, 103, 2, 46, 59, 6, 56, 173, 145, 29, 46, 254, 227, 16, 30, 151, 57, 19, 16, 146, 225, 89, 122, 199, 70, 245, 141, 176, 142, 193, 199, 185, 91, 208, 203, 182, 60, 21, 24, 58, 44, 150, 188, 71, 123, 126, 57, 83, 171, 232, 223, 96, 239, 161, 84, 125, 169, 82, 168, 9, 184, 176, 79, 113, 112, 209, 20, 6, 154, 71, 222, 20, 19, 213, 137, 138, 36, 187, 196, 209, 65, 26, 91, 34, 9, 48, 0, 160, 135, 32, 125, 90, 170, 35, 251, 188, 52, 179, 141, 28, 15, 60, 92, 28, 213, 141, 244, 49, 3, 140, 210, 108, 15, 125, 239, 127, 111, 79, 228, 114, 230, 199, 231, 117, 12, 253, 66, 176, 107, 230, 201, 211, 161, 184, 91, 89, 72, 195, 201, 76, 43, 9, 154, 46, 97, 3, 9, 131, 252, 117, 180, 21, 75, 251, 174, 207, 8, 242, 101, 252, 246, 97, 41, 73, 149, 54, 89, 229, 71, 197, 31, 138, 239, 244, 215, 165, 45, 224, 89, 15, 138, 17, 167, 254, 245, 151, 56, 224, 28, 77, 178, 14, 93, 53, 246, 87, 107, 71, 65, 113, 138, 207, 222, 173, 49, 174, 106, 27, 60, 247, 171, 99, 61, 251, 209, 156, 125, 152, 99, 151, 47, 55, 13, 209, 135, 223, 169, 254, 214, 211, 94, 226, 141, 246, 247, 222, 15, 11, 206, 177, 218, 205, 131, 56, 252, 197, 172, 198, 219, 251, 114, 168, 218, 133, 134, 98, 78, 1, 255, 137, 7, 170, 65, 34, 48, 243, 208, 200, 136, 110, 26, 14, 91, 80, 21, 68, 215, 146, 255, 124, 249, 66, 93, 104, 253, 4, 164, 190, 219, 95, 233, 225, 75, 117, 221, 121, 55, 171, 85, 130, 82, 1, 237, 130, 149, 168, 201, 220, 66, 87, 50, 189, 59, 147, 209, 81, 160, 87, 182, 32, 218, 51, 35, 20, 14, 108, 248, 11, 32, 151, 64, 77, 72, 252, 8, 47, 201, 228, 124, 15, 54, 80, 71, 18, 119, 52, 24, 1, 253, 150, 221, 201, 134, 92, 46, 9, 56, 66, 148, 147, 157, 138, 237, 130, 108, 61, 244, 135, 142, 18, 215, 106, 218, 211, 50, 229, 233, 56, 59, 129, 200, 254, 201, 248, 154, 209, 84, 169, 128, 185, 2, 191, 223, 151, 53, 250, 250, 122, 116, 54, 154, 194, 191, 125, 156, 29, 118, 231, 119, 250, 213, 139, 17, 29, 131, 147, 168, 208, 255, 137, 171, 175, 187, 53, 141, 120, 233, 250, 191, 113, 83, 201, 72, 23, 198, 219, 137, 128, 178, 7, 145, 88, 188, 252, 2, 139, 249, 202, 200, 44, 59, 43, 49, 32, 133, 185, 3, 180, 8, 220, 113, 175, 159, 200, 46, 197, 175, 183, 32, 222, 219, 43, 127, 232, 195, 135, 39, 152, 2, 68, 148, 87, 129, 43, 193, 151, 121, 141, 79, 144, 72, 91, 94, 254, 124, 126, 124, 212, 48, 160, 126, 206, 41, 135, 234, 46, 244, 4, 189, 28, 170, 47, 120, 154, 244, 72, 68, 99, 36, 250, 39, 103, 32, 190, 83, 187, 126, 231, 153, 171, 0, 43, 152, 45, 0, 194, 104, 107, 121, 159, 206, 97, 23, 241, 181, 11, 149, 225, 224, 78, 101, 139, 32, 240, 114, 132, 153, 215, 73, 72, 81, 159, 1, 171, 79, 244, 13, 225, 198, 190, 255, 41, 69, 214, 34, 205, 56, 155, 99, 86, 205, 70, 12, 88, 39, 4, 7, 174, 218, 27, 242, 205, 49, 79, 193, 53, 113, 238, 218, 95, 219, 235, 232, 31, 122, 217, 90, 37, 74, 85, 152, 163, 193, 13, 201, 185, 234, 61, 154, 174, 109, 170, 129, 32, 96, 239, 230, 228, 198, 181, 195, 49, 233, 123, 197, 210, 142, 135, 84, 84, 132, 126, 157, 75, 244, 228, 79, 158, 75, 177, 5, 163, 228, 216, 92, 113, 90, 203, 83, 248, 96, 237, 127, 104, 121, 164, 162, 51, 151, 201, 58, 232, 8, 20, 92, 40, 22, 102, 223, 61, 52, 8, 180, 254, 114, 212, 249, 155, 118, 30, 57, 255, 164, 41, 58, 77, 51, 184, 147, 147, 237, 64, 52, 157, 26, 137, 226, 154, 74, 169, 64, 165, 236, 115, 49, 232, 174, 178, 75, 136, 233, 160, 250, 17, 186, 105, 248, 165, 30, 150, 111, 251, 141, 133, 31, 154, 245, 32, 135, 226, 126, 130, 173, 207, 125, 132, 211, 24, 7, 25, 235, 219, 46, 131, 229, 47, 249, 112, 207, 225, 128, 241, 254, 138, 195, 12, 156, 18, 143, 196, 54, 206, 49, 250, 47, 193, 133, 179, 221, 255, 3, 115, 33, 250, 197, 40, 11, 182, 59, 219, 132, 93, 28, 144, 37, 36, 102, 12, 14, 76, 136, 136, 168, 248, 117, 180, 220, 101, 29, 95, 194, 236, 75, 139, 80, 1, 220, 24, 147, 182, 234, 62, 84, 124, 201, 251, 204, 208, 15, 149, 124, 88, 95, 156, 180, 136, 1, 119, 194, 83, 198, 148, 142, 204, 153, 7, 208, 106, 11, 102, 185, 0, 38, 135, 3, 225, 165, 212, 232, 100, 59, 200, 127, 235, 113, 118, 157, 220, 196, 180, 67, 94, 41, 46, 52, 178, 149, 254, 200, 59, 92, 26, 181, 150, 49, 224, 161, 0, 208, 78, 112, 57, 184, 138, 231, 2, 218, 131, 181, 23, 214, 35, 51, 89, 226, 200, 238, 203, 118, 127, 133, 62, 107, 15, 147, 51, 58, 195, 255, 105, 100, 83, 247, 107, 236, 96, 199, 173, 186, 70, 227, 176, 223, 197, 132, 102, 50, 77, 141, 212, 148, 161, 38, 168, 102, 125, 144, 163, 144, 234, 40, 216, 233, 209, 11, 188, 46, 133, 172, 68, 209, 41, 2, 176, 134, 129, 140, 244, 186, 116, 130, 20, 61, 40, 136, 219, 103, 9, 138, 21, 8, 146, 167, 106, 197, 170, 1, 223, 111, 223, 3, 161, 198, 80, 183, 82, 135, 244, 49, 168, 69, 236, 216, 44, 251, 222, 215, 181, 144, 241, 32, 38, 192, 225, 80, 249, 171, 16, 176, 59, 56, 102, 171, 252, 205, 164, 237, 77, 13, 22, 70, 74, 215, 10, 99, 74, 163, 21, 138, 59, 19, 97, 182, 92, 81, 244, 161, 171, 7, 161, 167, 236, 180, 113, 87, 249, 247, 132, 96, 8, 115, 101, 0, 68, 100, 52, 66, 166, 79, 51, 252, 1, 4, 112, 210, 8, 19, 17, 182, 209, 27, 87, 103, 39, 209, 222, 251, 105, 246, 80, 212, 116, 108, 165, 30, 11, 42, 144, 71, 222, 214, 24, 182, 148, 153, 123, 56, 75, 116, 193, 247, 168, 185, 68, 151, 40, 107, 105, 109, 239, 117, 218, 182, 33, 197, 163, 66, 16, 64, 46, 137, 72, 197, 133, 115, 173, 36, 214, 242, 222, 145, 202, 18, 241, 53, 194, 108, 225, 221, 236, 55, 146, 112, 130, 170, 253, 190, 76, 60, 253, 8, 1, 211, 20, 114, 7, 245, 79, 31, 42, 240, 172, 26, 159, 80, 24, 24, 5, 6, 54, 172, 145, 231, 66, 21, 88, 243, 38, 125, 77, 188, 241, 135, 226, 229, 250, 169, 94, 75, 91, 20, 153, 216, 2, 81, 86, 151, 48, 197, 13, 4, 40, 168, 52, 173, 39, 215, 51, 193, 42, 198, 5, 15, 38, 27, 213, 48, 86, 65, 186, 63, 55, 234, 79, 174, 152, 4, 169, 160, 168, 142, 141, 189, 202, 119, 247, 163, 60, 245, 136, 214, 186, 234, 156, 1, 134, 122, 212, 178, 79, 253, 214, 46, 159, 30, 135, 130, 235, 253, 137, 8, 230, 229, 74, 94, 131, 100, 48, 149, 61, 169, 154, 242, 237, 196, 101, 70, 88, 13, 232, 214, 200, 95, 18, 202, 161, 4, 66, 27, 131, 88, 126, 188, 101, 98, 79, 16, 108, 79, 218, 228, 97, 172, 107, 13, 1, 9, 253, 105, 219, 155, 169, 113, 10, 78, 139, 133, 30, 160, 160, 62, 217, 162, 105, 32, 189, 238, 72, 154, 11, 185, 67, 63, 142, 143, 199, 3, 164, 31, 90, 181, 179, 225, 12, 244, 51, 182, 227, 186, 8, 139, 4, 37, 201, 150, 100, 98, 12, 91, 229, 39, 192, 200, 187, 85, 129, 121, 251, 190, 122, 188, 233, 177, 136, 169, 33, 72, 66, 99, 238, 135, 225, 231, 73, 55, 209, 107, 0, 31, 49, 144, 125, 156, 91, 23, 196, 109, 245, 163, 28, 232, 22, 235, 254, 135, 57, 169, 177, 66, 192, 102, 63, 91, 208, 157, 91, 81, 102, 157, 234, 13, 241, 174, 180, 165, 149, 78, 9, 201, 184, 95, 137, 180, 182, 136, 157, 223, 41, 94, 197, 167, 150, 114, 177, 205, 19, 86, 120, 181, 170, 35, 159, 230, 243, 165, 193, 87, 54, 143, 143, 97, 47, 145, 206, 89, 25, 215, 44, 110, 179, 8, 63, 30, 255, 235, 160, 111, 231, 245, 229, 86, 9, 96, 184, 63, 42, 80, 61, 164, 211, 183, 182, 186, 216, 125, 227, 117, 223, 189, 93, 4, 95, 139, 10, 44, 180, 190, 249, 98, 89, 44, 117, 24, 146, 145, 171, 187, 234, 74, 44, 100, 10, 76, 91, 132, 213, 148, 4, 173, 126, 102, 14, 33, 41, 13, 52, 77, 246, 55, 74, 161, 202, 169, 169, 130, 124, 224, 49, 183, 204, 25, 156, 177, 73, 88, 23, 135, 191, 79, 31, 196, 110, 86, 205, 198, 227, 151, 194, 61, 197, 167, 171, 159, 216, 195, 228, 20, 5, 70, 238, 169, 74, 82, 213, 152, 210, 188, 58, 163, 249, 38, 176, 207, 20, 151, 217, 24, 21, 106, 157, 202, 140, 3, 121, 72, 115, 42, 60, 203, 199, 55, 211, 73, 86, 113, 216, 208, 162, 200, 111, 235, 44, 232, 105, 20, 152, 254, 51, 80, 57, 57, 197, 78, 245, 201, 204, 207, 181, 39, 165, 206, 44, 16, 41, 60, 252, 139, 174, 4, 92, 214, 63, 93, 5, 143, 113, 223, 169, 225, 152, 124, 18, 11, 104, 196, 71, 234, 222, 224, 189, 231, 87, 68, 184, 91, 249, 62, 4, 248, 240, 5, 187, 96, 139, 123, 26, 203, 140, 254, 15, 28, 123, 185, 89, 149, 152, 199, 50, 15, 154, 230, 175, 106, 97, 105, 84, 16, 108, 94, 164, 182, 142, 22, 255, 167, 166, 236, 57, 52, 23, 197, 133, 115, 215, 107, 20, 183, 3, 247, 163, 97, 220, 97, 171, 42, 199, 209, 62, 210, 63, 144, 245, 33, 139, 157, 68, 143, 26, 128, 99, 30, 110, 19, 173, 10, 37, 126, 194, 171, 119, 216, 100, 66, 198, 233, 246, 95, 152, 228, 225, 170, 203, 118, 9, 107, 42, 115, 76, 120, 138, 163, 26, 75, 220, 220, 11, 239, 186, 80, 168, 82, 153, 5, 119, 10, 58, 50, 110, 229, 134, 84, 51, 196, 23, 200, 114, 141, 160, 135, 143, 37, 216, 186, 226, 123, 61, 62, 161, 78, 119, 33, 193, 55, 251, 54, 211, 82, 129, 54, 61, 115, 130, 245, 124, 8, 42, 231, 45, 0, 103, 210, 165, 30, 243, 216, 79, 177, 219, 200, 208, 116, 144, 58, 209, 158, 156, 145, 170, 28, 25, 25, 134, 24, 12, 142, 222, 102, 140, 71, 219, 9, 213, 239, 120, 7, 13, 112, 8, 37, 151, 39, 215, 94, 250, 27, 188, 171, 28, 177, 208, 55, 53, 7, 101, 244, 4, 85, 147, 50, 158, 230, 152, 139, 144, 163, 56, 75, 210, 173, 53, 231, 166, 38, 111, 202, 134, 65, 204, 4, 159, 82, 18, 4, 5, 250, 167, 221, 36, 210, 172, 39, 143, 175, 190, 201, 65, 151, 48, 224, 241, 186, 98, 39, 219, 114, 108, 131, 252, 184, 9, 239, 137, 96, 118, 23, 161, 230, 18, 251, 92, 22, 133, 62, 39, 190, 144, 102, 240, 124, 78, 166, 228, 77, 103, 128, 47, 136, 88, 33, 61, 20, 238, 209, 29, 215, 237, 158, 28, 193, 154, 232, 246, 164, 122, 6, 64, 124, 186, 191, 134, 127, 13, 165, 119, 125, 12, 198, 76, 246, 170, 137, 79, 68, 191, 190, 56, 84, 187, 215, 229, 207, 221, 203, 57, 34, 36, 212, 15, 60, 193, 116, 108, 220, 35, 136, 139, 214, 71, 143, 104, 199, 26, 247, 16, 182, 249, 46, 86, 57, 44, 212, 167, 77, 107, 233, 236, 67, 64, 141, 119, 118, 40, 35, 158, 203, 140, 146, 154, 15, 180, 13, 111, 232, 222, 252, 133, 41, 127, 154, 171, 254, 241, 12, 228, 202, 4, 170, 250, 37, 223, 194, 254, 211, 77, 46, 235, 220, 135, 37, 136, 119, 60, 51, 61, 92, 131, 254, 70, 32, 203, 153, 215, 254, 10, 118, 68, 8, 56, 240, 104, 125, 82, 80, 129, 227, 58, 77, 87, 44, 52, 158, 95, 197, 201, 195, 177, 97, 190, 146, 45, 125, 56, 163, 87, 55, 214, 144, 69, 241, 119, 191, 127, 72, 185, 211, 202, 119, 248, 127, 104, 144, 250, 174, 25, 92, 160, 18, 171, 100, 133, 48, 93, 99, 194, 235, 177, 167, 229, 154, 94, 59, 196, 161, 30, 164, 148, 241, 163, 39, 163, 126, 49, 245, 44, 112, 207, 148, 21, 42, 166, 100, 40, 13, 4, 224, 73, 222, 126, 15, 140, 152, 253, 31, 168, 19, 101, 73, 105, 191, 196, 127, 100, 119, 78, 51, 10, 241, 52, 140, 53, 145, 203, 191, 34, 183, 135, 236, 9, 179, 232, 121, 241, 141, 40, 230, 186, 226, 85, 255, 48, 13, 155, 229, 50, 102, 220, 63, 112, 121, 54, 184, 28, 131, 182, 77, 135, 194, 63, 239, 242, 248, 231, 79, 0, 234, 254, 238, 126, 55, 34, 112, 137, 238, 197, 249, 97, 188, 27, 54, 6, 195, 146, 173, 48, 69, 99, 3, 133, 46, 253, 67, 24, 8, 209, 91, 162, 96, 245, 226, 20, 185, 58, 67, 230, 220, 50, 116, 155, 89, 246, 149, 74, 54, 67, 255, 61, 214, 90, 1, 132, 174, 84, 60, 158, 240, 105, 57, 99, 213, 218, 198, 114, 188, 192, 140, 50, 252, 48, 163, 248, 140, 127, 18, 91, 219, 39, 157, 136, 87, 215, 92, 50, 99, 72, 232, 40, 68, 129, 70, 195, 103, 41, 240, 208, 180, 228, 51, 194, 26, 201, 133, 207, 134, 209, 170, 60, 48, 61, 209, 141, 50, 152, 219, 24, 235, 223, 127, 79, 142, 80, 49, 104, 121, 138, 9, 176, 196, 17, 19, 66, 126, 132, 44, 79, 196, 48, 179, 80, 84, 80, 226, 4, 132, 94, 224, 159, 91, 0, 2, 54, 233], - [198, 18, 220, 180, 76, 61, 52, 243, 115, 213, 150, 59, 212, 244, 222, 99, 80, 40, 194, 42, 123, 216, 167, 86, 146, 200, 76, 109, 33, 132, 23, 13, 1, 131, 87, 127, 85, 124, 185, 194, 132, 105, 217, 190, 18, 117, 23, 96, 133, 31, 242, 39, 108, 224, 98, 188, 196, 71, 245, 103, 69, 76, 210, 43, 239, 250, 130, 161, 185, 164, 53, 124, 0, 79, 104, 43, 99, 222, 51, 192, 88, 170, 50, 165, 157, 81, 142, 47, 214, 220, 215, 67, 181, 194, 236, 100, 36, 161, 19, 57, 233, 152, 193, 7, 27, 237, 174, 34, 188, 248, 142, 100, 101, 252, 149, 241, 241, 66, 69, 43, 123, 224, 21, 29, 0, 6, 186, 18, 235, 200, 59, 72, 148, 147, 122, 118, 162, 175, 172, 10, 128, 136, 237, 231, 71, 6, 135, 113, 252, 221, 179, 55, 193, 165, 71, 118, 240, 0, 174, 87, 34, 56, 216, 239, 81, 103, 131, 11, 198, 195, 103, 100, 235, 152, 186, 143, 50, 64, 68, 14, 119, 216, 167, 246, 143, 37, 26, 200, 87, 138, 125, 72, 125, 248, 86, 183, 66, 207, 45, 26, 68, 179, 210, 154, 29, 225, 8, 192, 227, 76, 60, 2, 230, 207, 77, 241, 107, 247, 137, 58, 191, 109, 56, 7, 116, 180, 144, 106, 165, 113, 240, 48, 155, 87, 97, 48, 26, 26, 110, 29, 251, 28, 56, 79, 164, 229, 117, 248, 73, 215, 33, 121, 67, 174, 130, 157, 152, 67, 114, 46, 118, 149, 241, 84, 199, 174, 122, 67, 143, 141, 245, 148, 193, 235, 207, 39, 83, 49, 146, 162, 80, 155, 146, 43, 104, 220, 125, 112, 165, 212, 126, 172, 170, 11, 3, 201, 69, 114, 46, 149, 250, 174, 62, 233, 237, 130, 169, 93, 132, 5, 47, 151, 165, 243, 211, 254, 146, 175, 191, 11, 190, 4, 212, 189, 216, 134, 240, 181, 102, 52, 137, 33, 251, 245, 236, 116, 0, 25, 72, 160, 1, 125, 33, 130, 179, 76, 9, 146, 89, 76, 85, 87, 85, 19, 14, 56, 104, 98, 88, 226, 187, 51, 73, 82, 183, 216, 23, 134, 190, 78, 49, 208, 175, 92, 6, 227, 167, 118, 89, 135, 194, 126, 85, 13, 211, 36, 110, 208, 129, 142, 172, 127, 236, 119, 89, 74, 77, 24, 242, 87, 134, 114, 19, 149, 185, 18, 205, 177, 1, 215, 47, 201, 214, 20, 25, 83, 0, 209, 154, 28, 98, 149, 14, 208, 97, 184, 3, 229, 143, 173, 247, 48, 13, 59, 69, 255, 237, 205, 143, 232, 122, 223, 236, 37, 20, 73, 59, 83, 1, 161, 240, 181, 146, 139, 148, 197, 198, 213, 201, 20, 189, 190, 7, 158, 66, 132, 73, 133, 99, 76, 91, 192, 166, 215, 234, 185, 184, 102, 140, 83, 66, 188, 117, 74, 56, 109, 211, 216, 211, 192, 1, 20, 201, 241, 10, 187, 58, 215, 173, 57, 249, 101, 195, 34, 53, 194, 109, 119, 37, 191, 90, 200, 35, 69, 64, 32, 123, 66, 229, 81, 36, 226, 55, 149, 237, 40, 211, 204, 89, 197, 192, 161, 112, 240, 50, 42, 214, 251, 249, 248, 148, 108, 16, 156, 173, 64, 179, 100, 142, 2, 102, 108, 76, 72, 6, 85, 225, 77, 131, 232, 76, 223, 31, 7, 68, 8, 159, 17, 9, 78, 23, 4, 114, 59, 71, 68, 240, 133, 128, 246, 128, 17, 122, 143, 183, 80, 91, 65, 223, 204, 244, 216, 187, 39, 5, 175, 161, 146, 109, 45, 89, 178, 199, 45, 232, 251, 227, 105, 194, 27, 53, 35, 195, 22, 164, 139, 167, 77, 248, 254, 143, 226, 120, 175, 77, 72, 30, 162, 196, 62, 26, 49, 30, 146, 44, 252, 90, 144, 192, 0, 195, 236, 165, 89, 136, 129, 181, 97, 205, 144, 27, 169, 96, 252, 141, 133, 74, 221, 153, 163, 55, 236, 98, 253, 78, 50, 102, 10, 141, 39, 49, 20, 213, 84, 222, 154, 76, 194, 130, 27, 101, 235, 135, 43, 61, 180, 134, 222, 36, 14, 65, 38, 251, 80, 38, 227, 137, 78, 161, 3, 157, 50, 171, 206, 17, 127, 26, 243, 169, 157, 165, 122, 118, 121, 113, 122, 63, 135, 138, 139, 154, 50, 157, 200, 13, 134, 20, 72, 64, 8, 7, 233, 132, 61, 213, 252, 238, 96, 16, 89, 54, 195, 147, 199, 125, 77, 83, 12, 57, 63, 221, 41, 201, 181, 108, 255, 222, 10, 125, 137, 248, 93, 209, 111, 132, 65, 17, 68, 58, 242, 192, 184, 230, 123, 56, 151, 170, 9, 148, 209, 159, 102, 138, 37, 225, 82, 3, 127, 72, 72, 34, 161, 4, 134, 75, 6, 81, 188, 44, 122, 167, 227, 21, 62, 76, 2, 87, 5, 195, 154, 76, 68, 172, 138, 200, 32, 193, 16, 251, 235, 69, 48, 73, 169, 124, 70, 60, 214, 1, 185, 171, 253, 38, 130, 107, 144, 221, 186, 164, 55, 117, 194, 140, 16, 165, 245, 138, 227, 214, 32, 3, 210, 189, 225, 244, 190, 93, 42, 88, 62, 33, 103, 2, 109, 140, 110, 54, 199, 42, 245, 177, 229, 79, 144, 146, 17, 97, 98, 92, 5, 180, 65, 72, 126, 182, 230, 28, 63, 34, 36, 247, 182, 173, 232, 242, 249, 33, 181, 107, 23, 43, 146, 198, 202, 221, 75, 183, 141, 4, 5, 161, 40, 110, 81, 26, 145, 180, 38, 89, 20, 149, 190, 11, 139, 113, 125, 201, 71, 161, 16, 213, 119, 92, 136, 225, 169, 191, 95, 123, 68, 91, 102, 176, 150, 209, 119, 134, 35, 232, 218, 199, 142, 55, 230, 64, 63, 248, 236, 194, 128, 170, 105, 239, 188, 56, 236, 242, 241, 140, 104, 183, 238, 136, 241, 8, 113, 134, 172, 162, 90, 131, 208, 119, 131, 81, 86, 226, 245, 67, 44, 106, 117, 145, 178, 162, 212, 112, 177, 182, 11, 153, 18, 63, 5, 194, 45, 239, 56, 201, 52, 109, 220, 158, 235, 41, 191, 72, 168, 33, 233, 161, 185, 17, 7, 55, 241, 13, 185, 229, 147, 183, 206, 70, 90, 166, 204, 122, 155, 179, 57, 137, 81, 158, 23, 134, 228, 9, 167, 18, 11, 255, 110, 179, 48, 165, 85, 125, 6, 153, 17, 179, 88, 137, 25, 221, 54, 99, 167, 142, 194, 49, 241, 103, 67, 198, 197, 37, 41, 248, 40, 56, 151, 70, 216, 12, 191, 22, 154, 213, 24, 189, 106, 136, 233, 225, 27, 25, 203, 22, 105, 100, 238, 91, 8, 81, 91, 198, 70, 133, 214, 136, 231, 85, 229, 222, 179, 50, 231, 163, 115, 168, 14, 209, 252, 9, 248, 244, 226, 255, 22, 94, 110, 118, 199, 63, 62, 15, 175, 189, 93, 31, 242, 142, 254, 19, 64, 137, 77, 221, 237, 251, 4, 127, 40, 112, 51, 83, 89, 89, 169, 149, 154, 214, 50, 62, 173, 233, 159, 108, 16, 109, 5, 199, 171, 179, 56, 73, 149, 172, 194, 105, 197, 37, 14, 163, 234, 180, 120, 49, 22, 26, 219, 199, 122, 130, 134, 180, 71, 215, 160, 211, 52, 90, 95, 213, 114, 146, 227, 177, 95, 170, 117, 154, 216, 10, 171, 239, 199, 71, 103, 9, 112, 98, 56, 107, 31, 182, 65, 222, 164, 234, 230, 150, 104, 154, 94, 28, 229, 138, 198, 225, 88, 194, 243, 177, 183, 201, 0, 21, 62, 96, 174, 96, 25, 169, 13, 121, 20, 218, 73, 240, 184, 212, 26, 122, 62, 229, 79, 108, 116, 211, 245, 23, 149, 127, 212, 61, 251, 195, 88, 85, 89, 138, 139, 10, 232, 241, 167, 16, 17, 4, 76, 189, 47, 35, 102, 95, 65, 11, 194, 105, 14, 54, 224, 47, 83, 238, 203, 129, 58, 35, 58, 9, 126, 120, 229, 106, 69, 25, 136, 15, 186, 107, 14, 170, 219, 214, 208, 100, 26, 23, 80, 167, 236, 62, 223, 220, 1, 135, 113, 158, 54, 85, 135, 186, 77, 15, 219, 121, 121, 218, 244, 130, 185, 124, 254, 2, 194, 223, 73, 38, 251, 255, 119, 10, 118, 164, 201, 9, 61, 33, 116, 139, 234, 193, 68, 14, 215, 150, 48, 141, 186, 244, 62, 3, 214, 203, 239, 175, 204, 152, 234, 170, 70, 3, 231, 60, 206, 191, 97, 148, 23, 176, 103, 254, 50, 153, 41, 165, 63, 233, 75, 129, 231, 57, 7, 118, 43, 153, 252, 234, 179, 230, 49, 104, 27, 202, 159, 116, 169, 142, 39, 225, 11, 132, 156, 88, 135, 245, 222, 196, 228, 117, 159, 21, 116, 1, 78, 124, 144, 36, 119, 169, 87, 200, 56, 192, 123, 229, 163, 107, 213, 136, 122, 55, 128, 130, 44, 29, 149, 181, 15, 109, 188, 195, 190, 165, 121, 43, 191, 210, 103, 199, 214, 149, 70, 253, 13, 191, 94, 85, 203, 87, 98, 99, 172, 145, 95, 57, 36, 233, 115, 189, 74, 59, 237, 170, 89, 146, 145, 167, 192, 6, 49, 22, 69, 74, 18, 111, 15, 7, 93, 216, 7, 151, 138, 96, 188, 203, 47, 187, 162, 100, 105, 217, 213, 228, 97, 47, 6, 8, 162, 196, 17, 229, 172, 170, 80, 104, 101, 24, 39, 35, 40, 86, 173, 116, 207, 28, 83, 19, 138, 129, 19, 131, 18, 69, 77, 94, 164, 233, 32, 89, 25, 166, 102, 233, 27, 154, 43, 9, 206, 173, 4, 191, 131, 53, 52, 114, 88, 38, 33, 192, 149, 249, 249, 239, 6, 91, 209, 45, 29, 208, 148, 104, 112, 214, 247, 20, 203, 113, 63, 182, 84, 120, 224, 178, 128, 248, 141, 125, 105, 148, 168, 106, 165, 212, 251, 248, 247, 24, 87, 190, 206, 130, 201, 245, 36, 55, 130, 212, 78, 44, 34, 205, 174, 254, 99, 13, 124, 64, 71, 142, 126, 13, 99, 115, 187, 40, 109, 60, 147, 110, 127, 48, 191, 212, 248, 217, 53, 162, 62, 191, 58, 96, 39, 231, 232, 235, 80, 121, 16, 9, 95, 177, 184, 18, 26, 85, 30, 251, 85, 192, 144, 213, 107, 49, 58, 6, 7, 163, 2, 71, 222, 16, 244, 41, 17, 45, 202, 247, 112, 38, 79, 245, 28, 68, 163, 247, 197, 219, 53, 184, 112, 180, 35, 51, 24, 220, 239, 254, 137, 19, 76, 82, 6, 252, 45, 80, 230, 70, 86, 224, 18, 77, 113, 144, 75, 88, 56, 54, 133, 79, 5, 66, 112, 156, 4, 240, 35, 20, 73, 141, 188, 1, 40, 58, 59, 75, 237, 60, 22, 12, 168, 182, 101, 120, 33, 249, 164, 138, 33, 211, 128, 249, 254, 6, 91, 140, 92, 226, 245, 170, 111, 140, 32, 134, 230, 49, 225, 54, 4, 238, 200, 86, 116, 247, 153, 196, 64, 54, 72, 29, 24, 202, 218, 28, 165, 214, 21, 138, 237, 230, 72, 73, 122, 103, 109, 220, 216, 246, 165, 63, 102, 64, 189, 27, 9, 234, 124, 118, 223, 12, 72, 159, 166, 134, 112, 62, 234, 206, 109, 195, 149, 253, 63, 166, 16, 90, 221, 127, 189, 184, 30, 30, 192, 100, 157, 255, 38, 251, 224, 253, 160, 52, 191, 100, 53, 112, 11, 240, 53, 15, 158, 45, 128, 176, 95, 39, 236, 216, 50, 182, 214, 17, 198, 66, 96, 88, 31, 219, 180, 5, 84, 93, 67, 241, 127, 210, 247, 117, 161, 148, 72, 176, 175, 58, 145, 85, 137, 99, 108, 220, 57, 121, 5, 160, 26, 9, 252, 174, 250, 92, 208, 58, 79, 129, 15, 7, 251, 205, 75, 5, 18, 235, 211, 136, 41, 74, 212, 20, 64, 72, 200, 140, 215, 98, 213, 229, 84, 76, 124, 211, 40, 202, 172, 34, 219, 92, 21, 175, 198, 14, 7, 45, 192, 248, 255, 111, 79, 83, 219, 55, 6, 12, 59, 152, 48, 174, 0, 146, 87, 189, 136, 151, 174, 21, 156, 192, 6, 28, 43, 91, 124, 214, 193, 216, 177, 199, 255, 183, 206, 186, 10, 228, 12, 237, 84, 59, 73, 53, 72, 214, 135, 252, 20, 86, 67, 7, 0, 182, 50, 128, 11, 101, 46, 117, 73, 39, 206, 242, 139, 153, 252, 107, 45, 154, 188, 119, 86, 127, 17, 143, 187, 32, 107, 155, 191, 233, 218, 88, 179, 210, 112, 194, 223, 121, 145, 253, 174, 11, 96, 133, 91, 227, 54, 248, 1, 91, 223, 241, 28, 223, 3, 203, 26, 21, 180, 101, 162, 52, 121, 158, 232, 103, 150, 250, 71, 40, 135, 160, 23, 101, 210, 52, 38, 52, 101, 219, 16, 50, 251, 165, 225, 158, 234, 17, 144, 60, 22, 237, 232, 197, 136, 141, 140, 132, 95, 11, 163, 114, 25, 195, 194, 57, 215, 129, 95, 226, 98, 138, 145, 171, 253, 154, 222, 80, 102, 180, 91, 186, 165, 190, 111, 70, 246, 194, 231, 221, 118, 247, 14, 180, 39, 80, 169, 246, 248, 207, 139, 243, 130, 51, 71, 196, 208, 31, 52, 209, 62, 59, 93, 212, 118, 22, 110, 21, 235, 205, 92, 153, 149, 60, 181, 207, 162, 131, 252, 239, 228, 190, 81, 150, 123, 9, 252, 110, 52, 119, 72, 204, 22, 222, 250, 147, 159, 209, 55, 66, 161, 249, 240, 91, 119, 204, 255, 210, 21, 201, 41, 95, 27, 185, 253, 126, 73, 168, 152, 182, 6, 247, 178, 3, 77, 78, 168, 79, 1, 59, 62, 21, 182, 140, 250, 104, 210, 68, 165, 223, 238, 112, 14, 75, 215, 10, 156, 39, 123, 74, 6, 111, 136, 11, 152, 128, 119, 40, 19, 98, 24, 37, 176, 79, 24, 46, 189, 178, 79, 96, 175, 211, 73, 50, 110, 147, 93, 121, 147, 53, 112, 180, 97, 18, 6, 191, 168, 213, 133, 65, 14, 243, 142, 4, 227, 86, 16, 75, 216, 30, 129, 41, 127, 207, 7, 44, 235, 47, 233, 120, 229, 100, 146, 115, 38, 174, 172, 167, 9, 86, 10, 220, 139, 115, 189, 31, 181, 7, 177, 10, 159, 225, 76, 246, 76, 46, 58, 190, 159, 71, 95, 174, 214, 254, 101, 148, 150, 208, 207, 230, 115, 75, 76, 99, 176, 193, 25, 220, 122, 82, 148, 34, 192, 120, 146, 50, 216, 130, 145, 29, 175, 233, 180, 253, 93, 39, 89, 129, 133, 24, 43, 248, 19, 118, 249, 12, 107, 131, 94, 237, 177, 115, 243, 146, 241, 191, 92, 224, 184, 143, 18, 205, 210, 202, 80, 207, 219, 154, 254, 97, 13, 3, 17, 255, 153, 64, 177, 97, 163, 137, 32, 252, 223, 46, 253, 244, 230, 150, 227, 74, 67, 175, 178, 180, 178, 110, 97, 62, 143, 114, 176, 142, 33, 74, 208, 245, 49, 86, 155, 144, 75, 41, 181, 169, 21, 83, 138, 165, 3, 113, 29, 32, 103, 173, 60, 177, 105, 33, 79, 46, 151, 165, 235, 9, 47, 193, 74, 231, 56, 223, 137, 215, 248, 225, 238, 110, 85, 236, 102, 54, 32, 18, 219, 157, 143, 121, 29, 22, 117, 156, 243, 98, 171, 208, 205, 211, 198, 99, 106, 255, 16, 145, 20, 33, 88, 114, 141, 16, 140, 216, 27, 31, 220, 37, 146, 182, 102, 10, 166, 29, 224, 132, 137, 211, 77, 239, 38, 225, 111, 188, 80, 47, 130, 137, 209, 88, 232, 19, 165, 184, 158, 182, 174, 32, 58, 139, 6, 216, 186, 92, 107, 170, 86, 220, 54, 116, 22, 9, 136, 165, 222, 68, 11, 124, 90, 252, 24, 51, 127, 64, 60, 108, 217, 36, 191, 198, 107, 187, 139, 232, 147, 211, 96, 7, 88, 127, 117, 58, 168, 183, 78, 153, 221, 30, 2, 134, 209, 190, 132, 252, 33, 196, 11, 94, 188, 188, 23, 106, 55, 227, 219, 10, 19, 62, 230, 220, 116, 84, 142, 200, 218, 66, 29, 243, 93, 216, 143, 104, 83, 46, 125, 54, 169, 94, 196, 212, 242, 66, 254, 176, 14, 43, 195, 224, 36, 190, 122, 9, 73, 226, 90, 4, 227, 166, 236, 58, 103, 100, 208, 189, 96, 12, 24, 11, 186, 207, 201, 220, 20, 186, 172, 57, 101, 175, 34, 187, 209, 212, 39, 236, 94, 235, 171, 119, 195, 199, 232, 241, 182, 5, 213, 244, 132, 111, 135, 214, 75, 138, 43, 242, 112, 223, 49, 219, 252, 136, 91, 107, 224, 72, 152, 224, 79, 121, 173, 247, 65, 153, 253, 210, 218, 75, 185, 64, 128, 71, 159, 76, 10, 20, 214, 237, 44, 21, 108, 115, 255, 97, 124, 138, 220, 150, 121, 228, 41, 255, 189, 147, 213, 184, 205, 124, 92, 185, 220, 185, 166, 106, 212, 204, 221, 149, 162, 55, 109, 231, 85, 142, 33, 61, 86, 53, 81, 73, 174, 237, 36, 242, 148, 238, 134, 185, 233, 250, 195, 216, 254, 223, 76, 97, 118, 202, 186, 123, 244, 184, 105, 27, 15, 162, 233, 88, 59, 27, 71, 181, 106, 173, 149, 33, 76, 18, 66, 159, 145, 65, 83, 173, 156, 190, 39, 66, 231, 118, 244, 247, 78, 200, 182, 51, 30, 247, 73, 121, 138, 239, 92, 3, 153, 41, 48, 9, 30, 230, 44, 181, 17, 59, 122, 200, 58, 196, 84, 60, 202, 61, 220, 120, 117, 0, 89, 100, 202, 203, 52, 130, 212, 143, 234, 238, 146, 77, 163, 83, 153, 62, 128, 40, 98, 189, 75, 195, 112, 236, 135, 246, 172, 208, 48, 198, 52, 202, 180, 114, 162, 31, 109, 141, 32, 24, 89, 239, 57, 177, 191, 110, 225, 99, 100, 185, 152, 44, 153, 242, 152, 204, 240, 75, 205, 132, 15, 74, 107, 98, 200, 92, 254, 183, 137, 2, 81, 75, 212, 198, 215, 157, 127, 172, 119, 144, 67, 95, 29, 196, 44, 182, 237, 84, 130, 224, 177, 173, 100, 85, 50, 235, 125, 64, 10, 146, 250, 92, 70, 181, 23, 16, 1, 133, 26, 30, 252, 91, 169, 131, 64, 195, 74, 21, 183, 95, 106, 232, 140, 232, 109, 104, 249, 16, 55, 132, 61, 216, 208, 185, 108, 193, 21, 233, 3, 157, 13, 95, 107, 167, 91, 82, 113, 135, 129, 141, 44, 136, 142, 76, 187, 249, 44, 213, 242, 43, 24, 17, 220, 215, 54, 2, 239, 244, 72, 28, 188, 29, 245, 2, 199, 21, 84, 132, 106, 191, 204, 145, 182, 28, 143, 229, 95, 231, 95, 124, 99, 162, 73, 55, 236, 159, 75, 109, 48, 30, 80, 225, 53, 34, 64, 229, 145, 101, 5, 213, 205, 184, 133, 59, 218, 38, 244, 170, 141, 132, 179, 88, 239, 246, 37, 48, 146, 151, 242, 202, 64, 89, 92, 199, 98, 147, 205, 202, 72, 136, 44, 221, 106, 62, 15, 9, 240, 10, 66, 71, 94, 149, 155, 33, 163, 96, 174, 113, 230, 5, 248, 14, 58, 217, 5, 213, 4, 48, 241, 125, 126, 251, 150, 199, 131, 123, 144, 124, 242, 253, 119, 75, 44, 216, 180, 4, 186, 181, 14, 190, 16, 239, 148, 51, 183, 147, 94, 206, 14, 114, 227, 233, 69, 158, 94, 109, 42, 163, 208, 208, 249, 10, 14, 86, 77, 130, 99, 183, 37, 218, 71, 44, 159, 186, 21, 47, 194, 249, 230, 163, 116, 196, 75, 146, 81, 76, 156, 3, 248, 247, 19, 57, 122, 194, 83, 200, 8, 136, 133, 96, 142, 159, 51, 103, 231, 228, 60, 86, 53, 85, 76, 144, 84, 91, 10, 74, 98, 127, 116, 45, 158, 116, 73, 133, 85, 46, 216, 238, 190, 91, 102, 80, 225, 34, 15, 45, 195, 161, 174, 0, 170, 241, 161, 66, 32, 125, 84, 143, 27, 225, 175, 104, 20, 219, 175, 101, 121, 209, 111, 29, 221, 179, 66, 20, 218, 133, 140, 95, 117, 33, 61, 50, 72, 116, 120, 77, 129, 124, 66, 16, 11, 46, 37, 235, 148, 116, 49, 78, 155, 102, 107, 199, 18, 224, 161, 15, 34, 216, 38, 134, 161, 216, 151, 242, 26, 63, 218, 173, 48, 144, 99, 157, 55, 48, 171, 109, 22, 55, 200, 100, 165, 82, 129, 219, 38, 158, 82, 96, 60, 171, 243, 229, 232, 163, 7, 51, 219, 72, 161, 66, 252, 220, 125, 149, 35, 48, 218, 74, 94, 171, 123, 104, 112, 2, 105, 132, 215, 3, 146, 158, 22, 3, 99, 115, 60, 60, 130, 208, 0, 173, 173, 214, 229, 74, 119, 71, 248, 48, 210, 83, 91, 88, 97, 125, 74, 53, 89, 17, 71, 137, 66, 69, 45, 68, 115, 165, 1, 24, 172, 30, 139, 60, 129, 220, 139, 200, 234, 144, 54, 236, 8, 53, 48, 213, 108, 47, 75, 112, 63, 180, 14, 104, 88, 239, 103, 178, 184, 231, 233, 218, 228, 213, 114, 93, 36, 72, 212, 227, 201, 74, 15, 68, 160, 174, 92, 95, 222, 224, 127, 242, 113, 43, 146, 58, 139, 53, 20, 22, 28, 31, 209, 7, 85, 235, 58, 49, 127, 184, 202, 141, 112, 254, 193, 107, 128, 105, 230, 72, 84, 118, 71, 5, 164, 18, 92, 193, 182, 162, 45, 183, 28, 114, 192, 208, 100, 182, 163, 139, 230, 238, 154, 9, 12, 102, 205, 35, 228, 179, 210, 65, 215, 164, 224, 171, 95, 17, 20, 7, 66, 166, 3, 52, 187, 193, 108, 120, 94, 223, 82, 38, 219, 78, 103, 146, 188, 7, 28, 200, 138, 81, 245, 111, 121, 233, 30, 6, 66, 58, 30, 60, 64, 245, 171, 233, 237, 176, 64, 212, 28, 122, 20, 85, 100, 29, 246, 140, 154, 150, 216, 89, 11, 62, 51, 27, 129, 230, 253, 232, 37, 80, 173, 27, 237, 223, 254, 228, 24, 163, 42, 122, 29, 127, 232, 44, 105, 225, 74, 42, 239, 137, 48, 163, 241, 202, 178, 253, 191, 124, 220, 210, 98, 218, 237, 165, 129, 183, 182, 14, 188, 105, 9, 213, 105, 219, 96, 221, 156, 251, 11, 108, 54, 167, 69, 0, 192, 2, 248, 167, 44, 225, 255, 123, 141, 22, 77, 143, 213, 177, 82, 105, 232, 159, 184, 71, 222, 28, 30, 86, 160, 127, 44, 165, 21, 229, 4, 192, 137, 137, 100, 250, 185, 22, 53, 22, 96, 139, 228, 42, 247, 23, 157, 237, 172, 63, 107, 184, 91, 25, 88, 182, 247, 82, 173, 151, 70, 102, 123, 232, 22, 35, 62, 121, 77, 78, 10, 116, 228, 150, 205, 174, 21, 245, 160, 13, 70, 12, 76, 102, 206, 98, 69, 177, 87, 78, 38, 54, 254, 106, 158, 79, 186, 221, 166, 12, 133, 77, 210, 108, 7, 169, 228, 24, 107, 123, 204, 104, 7, 64, 13, 21, 12, 104, 21, 189, 54, 66, 15, 213, 173, 160, 185, 128, 187, 47, 143, 150, 190, 144, 203, 120, 168, 214, 65, 89, 156, 2, 151, 117, 217, 186, 190, 198, 108, 234, 247, 67, 209, 225, 218, 254, 56, 15, 152, 255, 42, 225, 26, 43, 236, 27, 159, 110, 114, 244, 86, 43, 60, 114, 224, 44, 116, 26, 36, 230, 25, 243, 216, 180, 167, 77, 159, 213, 32, 249, 138, 70, 16, 196, 82, 255, 124, 83, 218, 106, 123, 172, 211, 118, 163, 227, 246, 204, 7, 129, 228, 30, 236, 204, 241, 159, 194, 242, 136, 37, 236, 213, 210, 234, 87, 69, 227, 217, 121, 157, 38, 231, 233, 122, 37, 124, 116, 106, 224, 73, 163, 239, 211, 112, 58, 226, 80, 196, 53, 228, 143, 184, 5, 182, 171, 230, 199, 53, 12, 121, 104, 6, 87, 242, 167, 251, 38, 166, 26, 225, 45, 121, 72, 211, 110, 16, 61, 250, 173, 21, 106, 121, 32, 251, 176, 170, 217, 31, 65, 59, 122, 44, 175, 28, 189, 117, 198, 118, 118, 247, 201, 37, 103, 117, 81, 115, 187, 128, 55, 18, 183, 146, 40, 104, 183, 20, 254, 76, 209, 155, 193, 73, 234, 168, 61, 218, 117, 105, 93, 106, 173, 83, 209, 215, 98, 58, 80, 198, 13, 87, 251, 69, 125, 42, 7, 255, 138, 146, 76, 3, 159, 212, 194, 65, 70, 184, 206, 107, 84, 239, 146, 159, 207, 118, 57, 241, 12, 193, 110, 36, 19, 203, 3, 170, 135, 150, 193, 6, 101, 89, 9, 106, 216, 198, 217, 71, 91, 37, 154, 0, 93, 179, 255, 63, 61, 137, 84, 141, 144, 180, 21, 243, 246, 211, 123, 110, 15, 77, 132, 42, 187, 173, 242, 247, 134, 72, 141, 11, 199, 158, 20, 2, 224, 187, 196, 36, 65, 114, 17, 160, 17, 38, 126, 174, 25, 107, 16, 240, 157, 108, 222, 158, 176, 223, 33, 240, 101, 88, 248, 152, 24, 36, 71, 101, 239, 119, 16, 200, 19, 238, 123, 203, 233, 244, 168, 241, 3, 18, 226, 22, 3, 209, 248, 210, 6, 220, 252, 86, 248, 109, 143, 217, 193, 248, 131, 143, 60, 133, 124, 96, 158, 211, 202, 80, 189, 62, 215, 138, 79, 252, 214, 91, 123, 89, 218, 78, 42, 234, 190, 252, 175, 172, 173, 123, 48, 25, 108, 191, 238, 137, 215, 86, 189, 9, 142, 112, 87, 79, 186, 51, 203, 74, 236, 191, 32, 147, 181, 196, 242, 211, 115, 14, 185, 236, 85, 82, 67, 175, 107, 185, 115, 205, 111, 238, 128, 51, 65, 211, 91, 240, 178, 39, 166, 73, 162, 250, 157, 8, 84, 111, 31, 9, 160, 197, 104, 98, 135, 51, 144, 90, 16, 107, 150, 40, 126, 63, 37, 126, 20, 234, 171, 214, 199, 5, 88, 163, 205, 167, 44, 143, 16, 228, 83, 65, 165, 24, 234, 222, 36, 48, 121, 164, 172, 228, 198, 118, 191, 29, 211, 145, 228, 163, 164, 125, 156, 130, 145, 53, 175, 69, 192, 199, 218, 182, 73, 198, 194, 58, 67, 233, 231, 247, 99, 97, 7, 229, 78, 252, 75, 182, 54, 118, 5, 245, 35, 108, 236, 107, 249, 12, 138, 169, 32, 150, 226, 0, 68, 151, 129, 85, 119, 100, 12, 153, 93, 248, 95, 66, 2, 192, 107, 134, 21, 2, 153, 39, 176, 245, 137, 15, 247, 253, 109, 205, 170, 221, 226, 40, 71, 65, 201, 250, 97, 130, 200, 143, 89, 128, 138, 49, 84, 81, 232, 47, 243, 174, 63, 208, 82, 84, 191, 197, 88, 156, 243, 249, 86, 229, 103, 3, 163, 132, 4, 62, 202, 18, 213, 161, 172, 174, 19, 131, 146, 227, 229, 149, 230, 113, 95, 231, 235, 57, 60, 231, 144, 199, 27, 250, 112, 160, 129, 99, 168, 161, 57, 251, 190, 19, 105, 24, 61, 154, 54, 161, 185, 169, 164, 101, 175, 114, 68, 131, 222, 133, 56, 201, 239, 7, 36, 37, 183, 232, 152, 249, 244, 207, 173, 78, 94, 73, 217, 12, 142, 121, 114, 30, 20, 87, 95, 246, 125, 72, 4, 193, 8, 246, 183, 52, 162, 160, 9, 18, 36, 17, 96, 79, 83, 95, 43, 119, 124, 36, 6, 115, 195, 195, 12, 24, 43, 17, 253, 38, 59, 49, 144, 48, 242, 113, 130, 206, 236, 22, 101, 178, 206, 172, 18, 11, 249, 236, 209, 247, 181, 183, 69, 138, 175, 74, 247, 20, 103, 193, 71, 223, 252, 203, 28, 188, 244, 46, 96, 143, 126, 211, 176, 118, 221, 30, 44, 50, 70, 215, 84, 177, 178, 133, 127, 11, 142, 137, 216, 146, 234, 57, 150, 96, 25, 132, 87, 132, 155, 123, 161, 244, 191, 200, 153, 64, 170, 124, 19, 103, 246, 32, 49, 199, 221, 255, 134, 30, 94, 156, 111, 39, 131, 119, 99, 223, 105, 51, 5, 88, 92, 64, 181, 213, 134, 202, 225, 202, 121, 227, 218, 225, 0, 178, 10, 221, 10, 243, 75, 208, 243, 50, 102, 69, 142, 10, 82, 209, 189, 105, 143, 68, 177, 6, 254, 98, 81, 30, 205, 223, 74, 159, 121, 18, 150, 13, 224, 92, 43, 208, 62, 188, 125, 47, 220, 76, 188, 106, 140, 28, 219, 230, 113, 170, 185, 8, 162, 133, 116, 129, 189, 203, 183, 155, 142, 153, 110, 151, 227, 178, 141, 204, 34, 29, 198, 19, 227, 100, 91, 90, 81, 48, 237, 210, 234, 51, 170, 22, 54, 6, 55, 99, 63, 164, 222, 55, 254, 248, 58, 40, 9, 58, 85, 144, 176, 131, 44, 217, 207, 22, 76, 94, 139, 154, 159, 104, 172, 17, 154, 209, 209, 251, 106, 182, 159, 24, 149, 24, 244, 224, 189, 217, 224, 223, 47, 41, 152, 69, 88, 107, 33, 147, 139, 147, 118, 93, 82, 91, 133, 4, 2, 58, 167, 222, 54, 145, 210, 200, 79, 118, 36, 120, 135, 38, 224, 155, 108, 54, 171, 54, 144, 115, 218, 103, 16, 182, 153, 177, 29, 48, 204, 7, 180, 27, 9, 227, 253, 241, 209, 59, 21, 58, 51, 247, 5, 102, 32, 41, 254, 82, 202, 14, 108, 227, 76, 76, 187, 47, 27, 250, 234, 37, 132, 32, 27, 3, 195, 29, 192, 217, 253, 222, 12, 189, 251, 224, 203, 133, 186, 245, 225, 196, 14, 102, 41, 159, 186, 118, 140, 49, 104, 173, 153, 119, 225, 22, 180, 179, 41, 88, 244, 19, 250, 71, 9, 143, 50, 87, 144, 127, 161, 29, 120, 174, 149, 26, 164, 141, 71, 109, 65, 210, 84, 210, 12, 66, 96, 16, 114, 229, 107, 208, 221, 132, 105, 160, 56, 90, 191, 86, 156, 41, 5, 218, 142, 103, 155, 248, 193, 160, 20, 187, 101, 18, 89, 143, 26, 107, 88, 246, 2, 253, 75, 109, 95, 48, 111, 26, 18, 138, 222, 66, 165, 182, 52, 46, 207, 91, 6, 163, 130, 104, 33, 196, 138, 37, 155, 107, 180, 33, 190, 186, 72, 208, 252, 60, 2, 116, 176, 49, 157, 203, 195, 70, 186, 176, 22, 60, 38, 135, 119, 107, 162, 146, 115, 54, 144, 142, 136, 141, 223, 0, 170, 147, 8, 6, 72, 101, 184, 149, 233, 104, 52, 27, 219, 125, 6, 193, 242, 228, 4, 57, 87, 39, 231, 111, 14, 25, 111, 218, 34, 187, 122, 164, 176, 193, 211, 36, 143, 232, 41, 90, 141, 114, 63, 27, 154, 64, 239, 66, 158, 203, 135, 132, 40, 191, 244, 147, 117, 125, 20, 24, 29, 196, 30, 39, 213, 193, 56, 83, 197, 96, 162, 182, 120, 131, 160, 166, 14, 128, 14, 213, 55, 220, 64, 180, 31, 165, 11, 192, 129, 31, 245, 121, 6, 236, 111, 23, 61, 181, 69, 124, 56, 69, 13, 39, 169, 211, 7, 139, 245, 65, 33, 25, 238, 3, 89, 123, 56, 191, 40, 23, 229, 124, 225, 245, 40, 216, 12, 184, 146, 95, 177, 214, 230, 53, 95, 130, 186, 126, 247, 189, 149, 148, 67, 36, 205, 232, 63, 144, 42, 23, 71, 238, 245, 38, 168, 243, 24, 165, 207, 39, 216, 248, 115, 215, 0, 202, 59, 61, 157, 26, 90, 120, 154, 115, 14, 151, 118, 204, 219, 17, 134, 215, 151, 165, 173, 68, 143, 164, 201, 250, 43, 187, 132, 191, 20, 112, 248, 4, 238, 40, 7, 14, 28, 236, 143, 22, 255, 52, 167, 209, 141, 130, 55, 124, 236, 132, 19, 209, 191, 193, 163, 99, 189, 167, 95, 24, 231, 221, 114, 143, 99, 69, 122, 83, 153, 53, 35, 219, 57, 122, 89, 21, 78, 155, 20, 33, 250, 78, 59, 131, 80, 4, 176, 180, 147, 204, 176, 111, 13, 216, 241, 206, 93, 27, 34, 247, 51, 100, 222, 115, 214, 115, 225, 131, 16, 87, 198, 175, 24, 56, 55, 94, 220, 34, 174, 241, 170, 71, 7, 235, 111, 28, 107, 200, 187, 101, 210, 206, 194, 196, 41, 24, 86, 140, 164, 212, 229, 139, 250, 226, 124, 214, 93, 80, 126, 2, 31, 31, 0, 161, 58, 186, 89, 226, 38, 12, 125, 96, 223, 70, 24, 55, 150, 82, 239, 144, 108, 105, 234, 219, 175, 218, 243, 184, 209, 176, 212, 205, 137, 11, 57, 250, 54, 194, 77, 42, 106, 61, 27, 203, 151, 154, 199, 201, 55, 157, 126, 226, 229, 165, 201, 104, 213, 40, 119, 20, 78, 236, 113, 235, 128, 208, 2, 50, 2, 37, 48, 93, 156, 218, 83, 37, 124, 92, 211, 184, 218, 52, 157, 180, 165, 224, 249, 71, 181, 255, 14, 77, 221, 28, 40, 38, 173, 67, 46, 4, 169, 77, 29, 45, 148, 180, 1, 18, 135, 213, 225, 228, 43, 116, 63, 134, 199, 159, 38, 63, 74, 110, 165, 98, 181, 100, 84, 23, 176, 170, 225, 137, 215, 196, 141, 253, 241, 173, 16, 24, 51, 51, 110, 33, 23, 128, 80, 212, 230, 62, 201, 62, 148, 126, 73, 180, 221, 34, 50, 35, 141, 183, 244, 147, 148, 59, 114, 128, 154, 47, 21, 54, 136, 174, 149, 96, 158, 99, 65, 255, 184, 199, 205, 67, 142, 160, 42, 113, 169, 19, 120, 6, 58, 8, 27, 103, 182, 208, 155, 202, 188, 114, 81, 207, 189, 26, 241, 159, 6, 73, 73, 223, 145, 56, 102, 175, 26, 27, 54, 219, 158, 150, 155, 229, 116, 65, 11, 117, 84, 204, 158, 132, 2, 219, 177, 126, 204, 197, 171, 193, 117, 180, 101, 93, 131, 213, 82, 15, 239, 84, 65, 36, 8, 116, 177, 7, 152, 120, 35, 77, 219, 244, 208, 137, 191, 120, 55, 58, 180, 206, 223, 54, 139, 113, 147, 114, 75, 29, 110, 15, 83, 113, 62, 101, 90, 37, 104, 222, 177, 71, 242, 22, 80, 170, 171, 221, 169, 213, 8, 115, 53, 26, 30, 210, 254, 168, 149, 89, 102, 67, 156, 2, 21, 245, 29, 44, 201, 146, 32, 147, 252, 179, 55, 192, 154, 4, 15, 175, 101, 209, 8, 35, 58, 67, 75, 141, 226, 251, 88, 213, 81, 210, 46, 179, 0, 211, 195, 150, 171, 23, 38, 13, 35, 134, 234, 34, 63, 219, 30, 162, 215, 34, 131, 30, 145, 221, 211, 2, 1, 180, 152, 185, 40, 60, 27, 136, 3, 72, 227, 252, 134, 224, 34, 8, 240, 151, 130, 21, 122, 198, 157, 169, 131, 62, 108, 81, 149, 244, 203, 83, 148, 132, 188, 102, 194, 121, 116, 119, 154, 1, 179, 74, 67, 249, 73, 180, 119, 246, 29, 135, 198, 74, 191, 33, 36, 112, 133, 192, 185, 232, 154, 34, 216, 8, 83, 73, 141, 200, 26, 252, 237, 202, 90, 94, 5, 65, 205, 115, 93, 237, 200, 27, 96, 195, 248, 98, 83, 83, 253, 44, 143, 137, 38, 183, 161, 197, 188, 41, 240, 19, 9, 137, 112, 142, 162, 212, 6, 44, 103, 163, 232, 218, 199, 148, 145, 38, 186, 107, 100, 53, 179, 180, 112, 115, 73, 81, 143, 231, 46, 221, 231, 76, 193, 48, 198, 228, 151, 176, 229, 18, 11, 51, 32, 143, 169, 220, 217, 82, 59, 87, 211, 233, 21, 153, 142, 112, 221, 239, 4, 10, 138, 141, 107, 136, 208, 122, 135, 255, 50, 219, 24, 119, 3, 11, 15, 61, 224, 33, 61, 36, 213, 11, 46, 71, 219, 147, 58, 116, 173, 128, 121, 168, 247, 25, 105, 108, 113, 202, 255, 222, 76, 75, 173, 195, 45, 59, 164, 98, 244, 9, 35, 39, 171, 94, 239, 139, 244, 191, 140, 180, 104, 114, 171, 157, 117, 88, 176, 12, 151, 106, 143, 125, 157, 70, 225, 2, 242, 218, 255, 170, 170, 208, 44, 142, 124, 209, 252, 174, 215, 37, 39, 202, 40, 239, 97, 155, 96, 100, 27, 246, 183, 163, 173, 36, 98, 72, 157, 38, 110, 187, 129, 21, 237, 175, 6, 90, 146, 193, 158, 59, 135, 91, 132, 118, 90, 55, 243, 60, 65, 150, 200, 196, 180, 4, 143, 89, 82, 242, 197, 165, 196, 120, 106, 29, 45, 158, 25, 229, 6, 8, 14, 58, 58, 239, 62, 38, 81, 188, 131, 170, 172, 44, 57, 59, 204, 234, 4, 61, 172, 45, 250, 64, 50, 201, 28, 40, 189, 115, 87, 225, 14, 247, 216, 159, 253, 125, 121, 34, 5, 143, 139, 75, 134, 236, 2, 171, 153, 91, 64, 87, 105, 219, 110, 215, 119, 8, 209, 23, 110, 190, 134, 142, 239, 241, 61, 187, 84, 228, 171, 193, 40, 59, 42, 178, 234, 241, 41, 247, 234, 134, 65, 102, 141, 38, 38, 225, 11, 220, 52, 36, 28, 30, 227, 8, 74, 189, 121, 16, 38, 109, 141, 228, 108, 170, 227, 16, 222, 104, 212, 25, 79, 250, 7, 92, 19, 247, 183, 161, 13, 94, 2, 20, 21, 187, 250, 71, 175, 43, 243, 97, 204, 195, 247, 182, 99, 102, 103, 25, 212, 153, 154, 148, 154, 0, 164, 124, 104, 185, 171, 122, 198, 168, 87, 165, 146, 54, 122, 26, 70, 152, 34, 1, 249, 232, 54, 44, 182, 244, 85, 134, 17, 166, 47, 200, 175, 150, 67, 96, 252, 102, 112, 231, 161, 122, 53, 194, 177, 146, 142, 0, 253, 254, 207, 151, 190, 59, 79, 233, 109, 138, 109, 202, 100, 238, 204, 142, 130, 203, 94, 171, 161, 197, 22, 7, 107, 75, 212, 75, 58, 192, 21, 62, 153, 207, 142, 232, 158, 92, 232, 249, 213, 63, 104, 120, 101, 137, 73, 216, 106, 15, 226, 215, 10, 2, 136, 18, 0, 107, 136, 164, 7, 4, 24, 41, 253, 43, 156, 24, 4, 14, 192, 88, 106, 99, 244, 73, 115, 110, 206, 116, 15, 162, 106, 227, 158, 74, 107, 243, 251, 15, 23, 158, 67, 118, 47, 135, 85, 230, 32, 208, 67, 49, 142, 204, 141, 54, 113, 142, 83, 232, 14, 119, 11, 248, 241, 232, 35, 194, 31, 201, 224, 115, 149, 112, 161, 218, 117, 134, 9, 112, 130, 118, 139, 5, 232, 14, 21, 81, 169, 128, 214, 100, 73, 40, 78, 162, 167, 211, 254, 95, 85, 81, 208, 24, 127, 94, 119, 22, 20, 183, 223, 157, 126, 161, 224, 153, 206, 185, 215, 8, 62, 199, 27, 186, 48, 127, 135, 150, 154, 72, 184, 57, 1, 96, 155, 238, 176, 188, 61, 72, 43, 129, 29, 158, 22, 163, 225, 172, 238, 231, 241, 41, 204, 122, 128, 134, 226, 105, 83, 214, 169, 252, 252, 154, 229, 185, 62, 241, 169, 145, 211, 164, 198, 118, 87, 12, 20, 42, 130, 85, 60, 230, 214, 69, 15, 187, 252, 86, 158, 209, 164, 189, 65, 110, 13, 220, 65, 97, 223, 229, 252, 111, 26, 197, 136, 194, 118, 20, 57, 47, 85, 142, 241, 111, 21, 207, 89, 8, 136, 10, 182, 149, 113, 37, 72, 237, 245, 120, 103, 69, 124, 239, 58, 27, 69, 81, 109, 111, 23, 95, 90, 255, 3, 28, 118, 203, 113, 154, 96, 72, 119, 45, 230, 104, 156, 176, 144, 145, 110, 56, 242, 86, 76, 220, 95, 19, 74, 156, 244, 229, 221, 224, 100, 233, 193, 43, 88, 121, 1, 1, 158, 36, 226, 56, 184, 111, 194, 139, 204, 232, 83, 131, 140, 85, 59, 188, 47, 38, 33, 136, 254, 254, 53, 231, 230, 211, 132, 219, 182, 88, 164, 113, 83, 85, 173, 221, 255, 26, 140, 137, 126, 121, 218, 232, 107, 82, 94, 29, 37, 168, 24, 4, 221, 233, 171, 196, 232, 0, 146, 242, 0, 10, 185, 81, 183, 225, 97, 122, 196, 192, 45, 212, 6, 100, 106, 230, 218, 152, 181, 178, 111, 101, 43, 207, 186, 173, 200, 156, 203, 223, 72, 197, 222, 173, 241, 169, 221, 38, 43, 196, 232, 161, 131, 3, 98, 76, 95, 67, 149, 96, 52, 191, 110, 191, 183, 249, 84, 147, 253, 72, 82, 122, 87, 191, 205, 240, 253, 188, 124, 178, 78, 86, 69, 224, 102, 181, 188, 135, 252, 211, 184, 177, 59, 201, 19, 55, 172, 78, 180, 10, 196, 6, 160, 164, 243, 137, 161, 69, 31, 180, 184, 186, 197, 12, 174, 253, 57, 226, 58, 90, 223, 82, 82, 244, 113, 239, 52, 14, 161, 109, 8, 80, 38, 193, 8, 113, 249, 137, 164, 222, 28, 224, 163, 35, 89, 130, 217, 73, 139, 140, 130, 232, 33, 64, 164, 99, 144, 159, 69, 24, 149, 3, 221, 224, 249, 111, 250, 216, 25, 194, 165, 98, 200, 39, 61, 202, 186, 184, 164, 229, 12, 203, 248, 232, 225, 2, 113, 40, 70, 14, 85, 253, 167, 192, 129, 90, 27, 150, 59, 81, 228, 241, 134, 78, 17, 90, 87, 112, 65, 115, 162, 20, 124, 94, 47, 164, 2, 159, 245, 108, 247, 209, 48, 161, 247, 38, 13, 149, 122, 226, 108, 176, 125, 46, 82, 48, 238, 251, 234, 31, 66, 40, 157, 227, 111, 163, 186, 220, 114, 147, 148, 98, 208, 207, 249, 192, 2, 3, 215, 154, 110, 148, 85, 64, 75, 28, 89, 62, 254, 242, 26, 80, 11, 64, 54, 171, 248, 165, 79, 102, 18, 72, 85, 173, 212, 189, 133, 190, 170, 211, 128, 190, 207, 69, 89, 51, 105, 167, 50, 239, 9, 139, 4, 235, 128, 138, 176, 232, 19, 150, 66, 49, 238, 171, 49, 164, 234, 128, 136, 117, 11, 180, 153, 69, 108, 67, 74, 51, 141, 83, 16, 108, 176, 124, 8, 36, 109, 5, 114, 76, 214, 23, 147, 22, 219, 11, 111, 63, 144, 177, 214, 3, 199, 54, 40, 10, 132, 246, 163, 191, 20, 97, 79, 117, 172, 31, 66, 206, 229, 236, 183, 69, 184, 174, 193, 197, 239, 197, 159, 96, 4, 16, 37, 82, 114, 118, 1, 219, 196, 31, 208, 198, 146, 180, 14, 79, 61, 89, 70, 223, 5, 99, 63, 69, 244, 26, 191, 19, 200, 94, 231, 24, 43, 10, 14, 21, 140, 5, 205, 223, 116, 75, 63, 67, 153, 137, 232, 178, 186, 184, 189, 133, 141, 69, 151, 192, 13, 22, 207, 248, 247, 11, 31, 3, 140, 205, 251, 57, 243, 8, 215, 124, 128, 35, 211, 236, 247, 182, 34, 226, 44, 166, 156, 137, 167, 35, 187, 52, 9, 207, 60, 122, 52, 87, 16, 229, 125, 159, 32, 45, 158, 232, 21, 241, 211, 185, 174, 159, 21, 40, 201, 10, 187, 245, 189, 125, 249, 34, 244, 220, 105, 108, 150, 180, 81, 62, 195, 113, 193, 201, 191, 28, 230, 132, 155, 61, 19, 95, 47, 133, 140, 252, 78, 31, 113, 173, 97, 107, 239, 48, 19, 231, 237, 146, 248, 106, 166, 200, 219, 21, 235, 66, 162, 133, 51, 127, 105, 35, 229, 116, 119, 146, 106, 79, 76, 206, 120, 63, 240, 63, 215, 140, 141, 239, 149, 23, 234, 137, 214, 51, 98, 221, 94, 150, 170, 46, 2, 139, 181, 254, 242, 86, 227, 223, 61, 213, 22, 44, 19, 197, 184, 34, 42, 206, 53, 242, 76, 186, 234, 120, 89, 154, 206, 189, 133, 166, 58, 243, 232, 239, 244, 53, 213, 204, 222, 68, 97, 151, 96, 227, 167, 85, 99, 66, 204, 1, 206, 84, 133, 203, 177, 122, 23, 7, 238, 46, 123, 88, 226, 108, 104, 87, 164, 28, 239, 249, 206, 125, 254, 200, 142, 128, 111, 234, 57, 5, 226, 72, 194, 123, 149, 2, 135, 95, 162, 12, 133, 88, 11, 55, 155, 210, 193, 18, 7, 52, 63, 141, 10, 220, 105, 177, 13, 85, 173, 47, 12, 146, 217, 211, 160, 236, 14, 217, 26, 240, 97, 124, 185, 17, 61, 243, 21, 166, 158, 221, 32, 171, 62, 30, 211, 105, 107, 69, 182, 223, 254, 227, 118, 89, 179, 32, 19, 6, 9, 215, 195, 152, 213, 147, 119, 202, 217, 67, 214, 91, 17, 36, 45, 169, 131, 14, 172, 217, 57, 95, 215, 134, 33, 27, 249, 212, 39, 43, 111, 222, 149, 215, 156, 233, 117, 116, 48, 94, 98, 126, 75, 221, 14, 142, 101, 8, 44, 246, 28, 24, 38, 138, 77, 219, 251, 6, 208, 232, 149, 35, 31, 198, 191, 245, 50, 230, 166, 248, 89, 147, 169, 197, 180, 77, 98, 1, 110, 16, 96, 6, 223, 173, 241, 107, 55, 255, 250, 125, 182, 195, 154, 77, 37, 8, 38, 111, 48, 169, 64, 78, 140, 175, 202, 201, 198, 80, 109, 18, 108, 4, 247, 31, 237, 32, 226, 199, 94, 106, 37, 250, 175, 207, 237, 85, 156, 150, 74, 78, 190, 146, 157, 222, 210, 69, 248, 128, 57, 159, 146, 38, 150, 202, 61, 189, 250, 206, 86, 88, 47, 203, 235, 242, 208, 125, 71, 221, 89, 196, 7, 39, 25, 24, 37, 65, 76, 11, 229, 164, 181, 34, 124, 250, 128, 58, 165, 255, 112, 46, 102, 114, 227, 125, 107, 224, 190, 49, 182, 16, 65, 160, 218, 174, 246, 10, 165, 242, 22, 216, 45, 7, 141, 219, 147, 228, 210, 155, 190, 112, 199, 6, 88, 241, 67, 69, 17, 73, 59, 95, 242, 64, 9, 207, 140, 150, 175, 162, 1, 47, 37, 115, 253, 125, 63, 102, 167, 10, 167, 114, 179, 195, 87, 67, 131, 109, 73, 27, 63, 154, 139, 75, 191, 233, 230, 124, 150, 51, 188, 62, 195, 243, 52, 237, 226, 129, 253, 60, 253, 45, 126, 58, 151, 130, 137, 17, 241, 138, 246, 169, 180, 211, 213, 144, 167, 176, 225, 165, 26, 141, 192, 90, 241, 205, 91, 174, 44, 121, 13, 129, 227, 98, 118, 81, 168, 148, 103, 130, 42, 51, 165, 126, 115, 198, 209, 212, 56, 33, 93, 251, 4, 122, 90, 124, 132, 189, 101, 133, 26, 180, 120, 191, 158, 200, 95, 16, 8, 57, 34, 226, 169, 231, 95, 14, 21, 80, 186, 13, 77, 26, 143, 189, 224, 215, 240, 12, 145, 144, 169, 234, 62, 161, 234, 163, 45, 250, 40, 250, 241, 103, 229, 148, 120, 17, 234, 183, 215, 129, 173, 116, 144, 46, 80, 64, 163, 147, 35, 101, 212, 111, 112, 11, 55, 217, 110, 215, 8, 126, 244, 107, 164, 44, 127, 130, 251, 238, 12, 17, 7, 129, 164, 57, 204, 95, 108, 126, 84, 122, 245, 238, 153, 242, 211, 94, 46, 106, 145, 207, 176, 193, 221, 101, 221, 125, 35, 83, 204, 201, 168, 20, 107, 227, 141, 125, 242, 13, 89, 253, 202, 95, 163, 186, 131, 127, 43, 111, 16, 141, 131, 235, 151, 53, 73, 56, 224, 152, 5, 175, 189, 195, 17, 237, 34, 73, 143, 152, 246, 22, 93, 124, 237, 136, 196, 100, 47, 86, 100, 82, 254, 46, 183, 194, 251, 19, 92, 2, 66, 93, 101, 60, 82, 60, 106, 175, 122, 215, 15, 168, 226, 149, 188, 5, 88, 94, 205, 48, 221, 116, 150, 112, 138, 160, 226, 202, 172, 47, 183, 72, 216, 248, 229, 12, 11, 200, 229, 86, 222, 180, 100, 69, 10, 227, 15, 218, 45, 219, 166, 12, 22, 48, 99, 105, 170, 146, 132, 250, 133, 140, 4, 74, 103, 56, 216, 213, 2, 225, 78, 188, 9, 134, 139, 135, 72, 254, 51, 217, 100, 108, 8, 176, 7, 127, 55, 22, 75, 143, 79, 107, 29, 184, 49, 4, 136, 47, 122, 94, 6, 154, 88, 103, 45, 188, 234, 62, 92, 74, 236, 193, 198, 223, 206, 99, 82, 188, 16, 245, 55, 96, 121, 75, 118, 174, 53, 103, 80, 222, 4, 78, 124, 211, 119, 22, 45, 121, 234, 191, 213, 209, 186, 62, 46, 41, 222, 13, 70, 139, 189, 84, 55, 42, 126, 187, 109, 196, 164, 253, 0, 186, 15, 238, 152, 225, 157, 158, 60, 61, 228, 242, 38, 189, 245, 17, 219, 178, 142, 231, 0, 250, 58, 196, 47, 89, 239, 187, 116, 70, 109, 226, 0, 20, 153, 17, 77, 63, 205, 55, 9, 227, 148, 33, 6, 180, 182, 228, 121, 6, 72, 163, 187, 127, 202, 169, 200, 180, 61, 71, 139, 18, 51, 235, 69, 196, 223, 76, 48, 162, 5, 58, 57, 222, 229, 93, 87, 107, 174, 206, 247, 85, 211, 42, 81, 154, 12, 163, 169, 240, 98, 114, 65, 72, 208, 149, 37, 203, 200, 106, 83, 177, 214, 233, 228, 90, 18, 167, 16, 123, 216, 153, 205, 72, 66, 12, 190, 139, 49, 160, 169, 19, 120, 127, 86, 195, 32, 229, 177, 178, 154, 13, 233, 248, 17, 254, 135, 92, 136, 49, 23, 45, 80, 120, 238, 246, 91, 35, 242, 249, 14, 233, 168, 194, 95, 76, 176, 227, 116, 198, 88, 94, 178, 142, 234, 125, 6, 132, 238, 186, 232, 180, 189, 155, 217, 208, 38, 175, 29, 31, 104, 156, 7, 240, 155, 113, 78, 53, 21, 162, 158, 9, 4, 242, 167, 226, 93, 122, 87, 173, 159, 149, 1, 4, 206, 95, 234, 244, 162, 138, 65, 207, 0, 159, 68, 136, 36, 18, 94, 131, 219, 181, 80, 219, 249, 141, 66, 194, 160, 67, 7, 182, 228, 71, 208, 50, 141, 6, 82, 18, 136, 80, 249, 205, 191, 124, 109, 253, 169, 105, 81, 254, 177, 202, 55, 219, 186, 227, 171, 216, 195, 24, 194, 130, 0, 164, 58, 211, 16, 171, 98, 214, 35, 125, 217, 120, 119, 7, 135, 236, 39, 186, 193, 81, 202, 106, 162, 179, 104, 237, 43, 220, 227, 4, 204, 77, 222, 120, 80, 50, 184, 104, 184, 40, 69, 61, 79, 168, 26, 202, 147, 104, 129, 109, 170, 164, 82, 168, 210, 189, 134, 67, 3, 208, 86, 170, 239, 231, 149, 212, 224, 254, 89, 25, 171, 26, 20, 13, 179, 252, 200, 59, 41, 195, 149, 235, 218, 139, 36, 192, 2, 56, 137, 88, 160, 74, 95, 29, 122, 21, 154, 1, 44, 31, 190, 156, 154, 200, 209, 250, 153, 25, 47, 76, 194, 110, 7, 89, 61, 239, 184, 75, 162, 158, 136, 157, 124, 156, 85, 215, 192, 80, 43, 105, 149, 156, 154, 39, 201, 53, 13, 164, 187, 112, 55, 77, 92, 199, 184, 64, 51, 34, 191, 123, 148, 20, 160, 56, 108, 5, 201, 241, 199, 108, 118, 34, 107, 0, 159, 201, 234, 31, 70, 35, 157, 241, 157, 1, 76, 4, 33, 220, 12, 183, 173, 90, 62, 78, 90, 204, 102, 110, 120, 173, 112, 63, 79, 131, 80, 27, 148, 66, 186, 12, 240, 107, 94, 72, 225, 214, 65, 3, 129, 170, 251, 235, 171, 230, 101, 30, 30, 119, 250, 134, 254, 87, 142, 40, 17, 98, 24, 152, 141, 154, 173, 87, 52, 150, 115, 134, 52, 70, 245, 134, 51, 135, 108, 1, 31, 239, 99, 187, 214, 222, 207, 136, 28, 0, 10, 29, 10, 107, 147, 226, 59, 201, 114, 161, 47, 131, 10, 52, 244, 210, 18, 31, 180, 129, 50, 6, 180, 184, 154, 55, 213, 248, 99, 196, 75, 105, 142, 67, 20, 171, 150, 141, 235, 44, 159, 126, 169, 47, 137, 141, 88, 187, 240, 190, 195, 160, 206, 55, 119, 180, 160, 250, 121, 56, 39, 78, 209, 172, 119, 248, 19, 108, 120, 148, 112, 178, 138, 186, 253, 225, 115, 137, 117, 215, 131, 89, 135, 250, 24, 11, 224, 205, 51, 108, 19, 102, 4, 88, 61, 133, 248, 201, 135, 204, 198, 44, 24, 154, 203, 69, 14, 78, 34, 208, 133, 198, 106, 39, 190, 191, 37, 148, 98, 21, 64, 229, 169, 230, 172, 11, 91, 195, 160, 180, 70, 57, 194, 55, 80, 136, 246, 30, 198, 153, 19, 56, 144, 171, 249, 170, 4, 22, 186, 215, 222, 48, 113, 190, 59, 211, 72, 41, 78, 111, 117, 29, 70, 173, 203, 37, 202, 69, 123, 1, 86, 99, 0, 20, 210, 73, 78, 1, 14, 106, 190, 83, 27, 116, 53, 61, 49, 128, 167, 20, 148, 142, 130, 127, 161, 60, 66, 233, 162, 88, 203, 154, 92, 141, 226, 196, 178, 226, 204, 214, 41, 250, 141, 134, 12, 18, 249, 187, 144, 75, 28, 122, 185, 113, 41, 181, 217, 184, 56, 107, 68, 229, 20, 160, 83, 3, 151, 37, 150, 232, 243, 108, 70, 224, 164, 111, 54, 110, 159, 55, 55, 96, 138, 74, 149, 238, 234, 20, 2, 250, 186, 209, 253, 244, 38, 52, 159, 154, 110, 49, 197, 164, 242, 171, 47, 220, 218, 161, 104, 58, 52, 194, 97, 74, 140, 40, 138, 27, 153, 70, 103, 205, 87, 131, 59, 79, 62, 30, 95, 237, 78, 79, 72, 186, 76, 233, 43, 83, 56, 66, 204, 119, 68, 135, 34, 239, 162, 228, 47, 110, 28, 156, 237, 183, 185, 212, 10, 112, 231, 17, 90, 235, 83, 140, 215, 62, 209, 34, 52, 204, 176, 53, 220, 107, 34, 158, 198, 80, 93, 251, 133, 149, 54, 78, 23, 50, 124, 177, 180, 15, 80, 251, 29, 118, 232, 40, 52, 133, 18, 45, 116, 39, 20, 248, 19, 51, 221, 94, 30, 83, 253, 203, 237, 187, 71, 16, 186, 184, 119, 79, 41, 151, 150, 234, 29, 89, 97, 94, 104, 12, 47, 210, 178, 105, 15, 92, 210, 183, 5, 32, 1, 231, 238, 56, 105, 180, 9, 255, 35, 97, 143, 4, 201, 100, 20, 39, 225, 29, 9, 31, 0, 14, 166, 208, 214, 148, 34, 18, 190, 180, 216, 79, 247, 35, 245, 161, 97, 237, 119, 223, 211, 27, 145, 223, 103, 208, 99, 6, 69, 30, 93, 0, 74, 126, 199, 207, 173, 115, 112, 117, 42, 156, 153, 58, 204, 66, 8, 183, 181, 254, 148, 21, 80, 72, 252, 102, 254, 8, 120, 186, 111, 57, 231, 68, 47, 38, 96, 86, 170, 241, 14, 133, 227, 174, 26, 242, 140, 32, 97, 29, 253, 163, 164, 5, 2, 113, 5, 187, 104, 130, 11, 165, 243, 90, 222, 155, 2, 79, 131, 104, 4, 25, 174, 61, 160, 150, 132, 120, 114, 42, 152, 117, 155, 160, 56, 3, 129, 205, 15, 217, 141, 131, 76, 142, 212, 227, 209, 189, 121, 144, 181, 176, 119, 67, 37, 13, 173, 40, 192, 162, 115, 218, 76, 36, 168, 218, 142, 32, 90, 182, 209, 160, 54, 8, 3, 236, 196, 206, 171, 4, 25, 163, 201, 42, 140, 94, 254, 169, 68, 116, 68, 138, 60, 93, 138, 138, 218, 132, 12, 94, 194, 169, 157, 236, 195, 95, 75, 5, 240, 132, 250, 219, 65, 10, 185, 135, 52, 74, 105, 173, 3, 8, 144, 251, 253, 127, 53, 112, 43, 80, 174, 44, 234, 129, 43, 16, 246, 248, 140, 100, 205, 219, 197, 128, 218, 223, 191, 23, 41, 119, 44, 119, 49, 157, 237, 73, 91, 211, 22, 89, 37, 7, 213, 212, 229, 171, 135, 97, 65, 43, 17, 173, 235, 201, 187, 248, 209, 147, 56, 154, 105, 76, 73, 21, 171, 112, 53, 198, 74, 176, 22, 234, 195, 38, 192, 166, 133, 102, 28, 85, 146, 196, 167, 72, 104, 177, 82, 99, 232, 155, 28, 95, 152, 71, 23, 70, 101, 211, 221, 170, 138, 221, 203, 188, 128, 227, 219, 25, 114, 212, 125, 50, 102, 137, 248, 127, 228, 219, 3, 2, 239, 81, 120, 48, 89, 220, 233, 11, 174, 99, 129, 55, 181, 175, 124, 116, 59, 197, 90, 165, 123, 191, 166, 150, 220, 155, 38, 127, 62, 128, 119, 194, 240, 87, 93, 216, 44, 158, 180, 198, 201, 10, 176, 51, 81, 215, 196, 125, 50, 22, 60, 33, 41, 117, 109, 132, 212, 69, 123, 37, 128, 166, 23, 137, 188, 39, 45, 128, 121, 139, 35, 170, 241, 96, 149, 160, 199, 238, 112, 212, 242, 170, 144, 78, 60, 84, 156, 234, 17, 23, 196, 246, 226, 83, 52, 168, 136, 199, 9, 55, 24, 14, 75, 107, 209, 182, 145, 6, 27, 239, 72, 56, 243, 186, 20, 58, 190, 222, 101, 188, 78, 107, 193, 75, 112, 84, 217, 37, 177, 7, 188, 212, 229, 3, 211, 201, 213, 150, 140, 179, 78, 72, 33, 63, 75, 250, 172, 49, 125, 97, 141, 112, 22, 51, 235, 188, 192, 158, 196, 19, 236, 132, 53, 4, 216, 122, 86, 194, 225, 233, 136, 5, 154, 13, 33, 127, 12, 170, 171, 111, 62, 226, 30, 36, 103, 103, 185, 97, 10, 189, 67, 74, 90, 12, 30, 213, 172, 86, 116, 136, 44, 208, 210, 42, 38, 92, 235, 82, 216, 202, 136, 220, 68, 255, 16, 244, 61, 218, 95, 31, 88, 187, 12, 37, 68, 148, 245, 3, 239, 107, 109, 72, 81, 112, 61, 111, 39, 25, 175, 231, 47, 212, 85, 57, 193, 252, 204, 66, 129, 40, 140, 99, 172, 103, 242, 39, 214, 186, 94, 79, 201, 129, 254, 71, 126, 206, 130, 243, 180, 59, 91, 18, 222, 135, 230, 142, 182, 138, 24, 161, 103, 3, 139, 85, 198, 29, 95, 84, 135, 233, 240, 76, 83, 51, 253, 185, 205, 35, 139, 172, 136, 31, 108, 118, 201, 19, 240, 2, 94, 61, 196, 241, 210, 1, 52, 227, 173, 94, 206, 100, 133, 228, 117, 205, 74, 98, 221, 172, 120, 111, 140, 70, 244, 189, 19, 117, 79, 212, 176, 30, 199, 255, 192, 88, 72, 214, 67, 251, 30, 235, 8, 211, 248, 157, 201, 139, 250, 116, 161, 198, 57, 177, 153, 211, 10, 202, 254, 78, 116, 221, 17, 243, 25, 230, 21, 173, 127, 32, 155, 189, 221, 170, 232, 140, 91, 101, 103, 244, 13, 22, 72, 55, 45, 124, 135, 255, 19, 241, 55, 160, 124, 54, 222, 104, 23, 73, 55, 142, 165, 233, 163, 236, 6, 161, 210, 78, 11, 166, 245, 234, 237, 113, 111, 163, 24, 96, 245, 127, 218, 212, 77, 130, 13, 140, 4, 30, 157, 207, 123, 109, 156, 157, 3, 221, 2, 206, 182, 141, 45, 135, 146, 169, 112, 223, 182, 169, 51, 244, 78, 203, 189, 161, 55, 123, 237, 1, 12, 236, 247, 147, 167, 8, 183, 20, 42, 93, 23, 28, 136, 10, 127, 17, 89, 117, 197, 246, 93, 229, 11, 92, 137, 106, 234, 50, 24, 72, 38, 62, 143, 108, 214, 18, 90, 184, 54, 13, 85, 62, 160, 169, 28, 206, 175, 191, 31, 199, 87, 35, 146, 54, 104, 139, 230, 14, 252, 125, 220, 120, 17, 41, 224, 241, 152, 47, 190, 193, 88, 28, 22, 210, 243, 144, 242, 60, 128, 181, 249, 229, 217, 82, 255, 45, 107, 68, 223, 85, 119, 60, 159, 118, 23, 119, 205, 144, 82, 133, 125, 110, 138, 79, 114, 30, 197, 205, 68, 81, 197, 113, 61, 113, 88, 209, 179, 94, 165, 74, 115, 116, 77, 185, 107, 194, 177, 196, 36, 0, 250, 86, 190, 254, 144, 150, 83, 175, 30, 250, 177, 90, 206, 95, 151, 235, 255, 167, 149, 65, 149, 183, 38, 197, 12, 148, 54, 50, 89, 55, 247, 210, 194, 235, 197, 179, 46, 251, 195, 235, 235, 186, 87, 45, 196, 57, 162, 243, 237, 219, 20, 80, 33, 29, 1, 72, 37, 144, 4, 191, 17, 88, 19, 95, 171, 122, 201, 220, 220, 235, 227, 47, 234, 40, 157, 196, 232, 104, 194, 51, 243, 75, 30, 168, 159, 164, 222, 240, 76, 179, 234, 3, 40, 92, 170, 36, 159, 218, 28, 17, 33, 2, 73, 184, 229, 254, 190, 40, 36, 166, 243, 27, 9, 227, 156, 170, 222, 118, 100, 95, 121, 50, 138, 74, 166, 240, 106, 175, 183, 52, 241, 3, 15, 222, 40, 64, 180, 49, 147, 16, 222, 160, 238, 169, 65, 102, 202, 226, 142, 196, 56, 125, 131, 155, 235, 167, 15, 47, 102, 241, 17, 62, 11, 51, 2, 87, 94, 18, 171, 43, 180, 13, 114, 21, 223, 248, 222, 13, 41, 191, 176, 66, 105, 147, 151, 227, 23, 3, 231, 247, 102, 92, 41], - [153, 138, 208, 168, 179, 166, 234, 200, 183, 42, 65, 42, 145, 168, 57, 210, 142, 9, 63, 149, 148, 81, 42, 143, 39, 231, 135, 236, 245, 5, 84, 120, 8, 220, 108, 90, 146, 192, 155, 2, 169, 106, 123, 64, 250, 39, 203, 30, 140, 120, 240, 35, 52, 141, 186, 24, 158, 49, 64, 31, 176, 39, 38, 152, 215, 200, 223, 85, 69, 172, 251, 181, 177, 54, 229, 115, 96, 9, 191, 219, 95, 248, 204, 143, 79, 37, 247, 20, 216, 18, 159, 191, 197, 232, 173, 102, 68, 152, 132, 179, 84, 193, 7, 150, 203, 255, 45, 179, 14, 42, 40, 228, 87, 163, 98, 28, 89, 23, 160, 233, 89, 240, 118, 92, 86, 135, 60, 138, 233, 167, 103, 23, 59, 40, 163, 140, 167, 51, 102, 47, 17, 16, 186, 80, 57, 162, 240, 126, 161, 99, 112, 104, 15, 111, 147, 6, 175, 209, 162, 59, 5, 86, 99, 109, 161, 98, 59, 183, 94, 109, 230, 145, 21, 196, 223, 93, 39, 54, 82, 203, 195, 233, 173, 19, 167, 79, 62, 153, 149, 69, 177, 2, 145, 176, 129, 70, 113, 21, 223, 148, 101, 35, 37, 204, 206, 29, 2, 220, 135, 32, 77, 16, 165, 254, 54, 30, 29, 170, 64, 161, 12, 83, 94, 125, 41, 66, 87, 166, 90, 110, 111, 69, 155, 162, 195, 248, 174, 167, 145, 76, 115, 171, 15, 17, 76, 4, 91, 82, 180, 129, 199, 79, 236, 37, 130, 173, 29, 83, 137, 98, 114, 136, 75, 17, 208, 151, 156, 164, 112, 113, 203, 205, 151, 169, 92, 107, 68, 209, 108, 212, 57, 78, 193, 80, 244, 22, 76, 243, 225, 198, 220, 210, 34, 238, 209, 59, 255, 178, 22, 131, 88, 128, 15, 183, 90, 199, 213, 116, 114, 241, 166, 4, 7, 249, 117, 160, 245, 156, 127, 13, 24, 80, 196, 227, 15, 67, 184, 114, 160, 232, 96, 239, 237, 190, 216, 224, 151, 99, 189, 175, 127, 147, 204, 232, 238, 192, 27, 169, 254, 216, 127, 16, 59, 139, 121, 224, 84, 169, 80, 246, 149, 74, 117, 15, 232, 84, 221, 186, 158, 230, 45, 83, 62, 185, 237, 164, 246, 221, 147, 198, 14, 122, 124, 52, 68, 95, 58, 36, 149, 57, 171, 157, 19, 221, 1, 73, 86, 219, 147, 29, 244, 33, 76, 8, 224, 216, 92, 152, 144, 4, 146, 88, 71, 221, 162, 232, 66, 186, 27, 27, 46, 105, 195, 83, 232, 30, 214, 7, 153, 68, 88, 43, 13, 64, 14, 180, 75, 144, 104, 38, 18, 44, 129, 144, 60, 53, 196, 126, 155, 83, 176, 124, 95, 120, 23, 74, 57, 222, 86, 88, 58, 46, 69, 202, 235, 49, 55, 184, 210, 20, 180, 192, 146, 64, 145, 205, 69, 49, 87, 39, 81, 29, 195, 9, 71, 229, 120, 203, 83, 205, 63, 172, 46, 2, 91, 190, 93, 53, 54, 219, 73, 139, 140, 18, 110, 171, 125, 206, 35, 99, 204, 131, 241, 184, 24, 75, 99, 244, 33, 125, 142, 26, 9, 68, 247, 19, 74, 253, 32, 40, 113, 4, 188, 118, 124, 73, 141, 45, 50, 83, 17, 7, 90, 144, 45, 148, 188, 37, 127, 227, 238, 21, 138, 121, 128, 112, 34, 78, 237, 52, 93, 255, 205, 177, 247, 42, 3, 229, 129, 68, 205, 206, 153, 171, 176, 180, 250, 75, 221, 200, 230, 113, 23, 235, 227, 85, 47, 133, 180, 111, 227, 98, 222, 56, 22, 76, 152, 183, 247, 53, 145, 206, 28, 13, 189, 129, 234, 169, 150, 183, 2, 117, 224, 173, 212, 126, 26, 9, 32, 183, 112, 137, 137, 46, 186, 78, 109, 75, 193, 198, 137, 189, 196, 84, 111, 10, 18, 5, 185, 36, 214, 201, 62, 20, 186, 64, 162, 163, 126, 58, 80, 210, 11, 161, 177, 122, 28, 212, 245, 124, 226, 14, 31, 28, 162, 51, 7, 162, 92, 93, 206, 234, 143, 180, 156, 103, 82, 38, 185, 223, 162, 24, 224, 139, 245, 37, 165, 244, 192, 1, 121, 143, 205, 33, 224, 43, 37, 55, 208, 220, 38, 114, 105, 174, 132, 110, 231, 99, 175, 105, 120, 74, 212, 149, 51, 168, 4, 140, 215, 223, 70, 221, 165, 115, 46, 170, 176, 248, 66, 5, 90, 3, 80, 131, 93, 205, 219, 126, 251, 10, 59, 191, 152, 20, 182, 231, 81, 176, 229, 134, 167, 124, 114, 179, 70, 91, 67, 39, 64, 244, 129, 141, 243, 169, 71, 156, 7, 153, 27, 30, 18, 150, 140, 248, 78, 60, 225, 96, 138, 187, 14, 106, 170, 157, 79, 148, 237, 46, 134, 197, 0, 237, 221, 241, 97, 235, 90, 91, 49, 144, 224, 127, 98, 213, 189, 135, 155, 205, 206, 237, 167, 73, 76, 101, 54, 42, 15, 4, 140, 89, 60, 124, 192, 206, 233, 124, 163, 202, 247, 97, 217, 87, 114, 208, 2, 209, 118, 189, 153, 96, 152, 191, 167, 53, 247, 190, 112, 24, 53, 128, 180, 225, 104, 177, 206, 169, 57, 106, 61, 84, 194, 224, 96, 153, 83, 234, 5, 210, 19, 10, 193, 122, 155, 112, 140, 40, 183, 137, 8, 102, 60, 236, 102, 37, 86, 52, 168, 145, 233, 93, 115, 70, 140, 75, 14, 178, 72, 162, 235, 178, 141, 64, 44, 4, 72, 218, 10, 190, 12, 214, 142, 184, 44, 83, 103, 205, 57, 158, 141, 207, 245, 104, 40, 162, 240, 76, 172, 40, 188, 42, 201, 31, 156, 133, 218, 34, 139, 223, 193, 166, 186, 153, 89, 154, 161, 253, 190, 178, 40, 222, 181, 209, 69, 80, 188, 102, 5, 73, 46, 45, 3, 0, 22, 53, 6, 18, 138, 88, 100, 83, 93, 220, 219, 35, 158, 156, 72, 105, 130, 147, 202, 136, 13, 91, 112, 182, 58, 55, 80, 149, 61, 91, 191, 115, 254, 162, 191, 95, 4, 46, 106, 233, 48, 30, 199, 65, 15, 154, 80, 213, 145, 127, 166, 156, 155, 90, 60, 146, 47, 56, 110, 68, 209, 222, 35, 124, 113, 120, 168, 60, 250, 10, 219, 178, 210, 207, 178, 97, 183, 30, 167, 51, 234, 33, 82, 255, 47, 30, 57, 90, 182, 66, 76, 17, 34, 60, 18, 144, 174, 174, 109, 222, 75, 236, 186, 12, 25, 202, 167, 50, 167, 235, 47, 94, 148, 2, 42, 151, 123, 154, 251, 99, 27, 102, 25, 187, 230, 214, 167, 60, 130, 11, 57, 86, 41, 130, 185, 30, 24, 55, 13, 247, 107, 245, 238, 176, 204, 101, 236, 131, 177, 82, 0, 148, 10, 94, 234, 100, 0, 61, 27, 229, 9, 136, 163, 197, 150, 19, 178, 229, 211, 62, 72, 203, 255, 62, 29, 121, 119, 247, 62, 113, 188, 203, 127, 153, 151, 181, 54, 239, 129, 43, 73, 191, 168, 8, 145, 16, 212, 16, 2, 226, 215, 42, 239, 205, 197, 87, 252, 88, 139, 196, 131, 48, 249, 109, 228, 82, 44, 239, 20, 251, 90, 231, 6, 109, 76, 59, 133, 192, 57, 41, 153, 88, 35, 110, 120, 218, 147, 82, 249, 174, 254, 250, 91, 24, 187, 60, 198, 67, 5, 25, 163, 231, 53, 20, 139, 201, 46, 3, 152, 169, 123, 120, 208, 36, 225, 226, 148, 79, 91, 120, 234, 184, 217, 108, 41, 172, 114, 19, 177, 194, 91, 11, 210, 10, 20, 63, 1, 142, 53, 3, 223, 155, 169, 203, 239, 20, 148, 60, 232, 18, 199, 171, 138, 151, 236, 81, 92, 55, 87, 94, 49, 118, 217, 216, 255, 109, 104, 98, 185, 156, 53, 253, 42, 152, 130, 209, 176, 245, 103, 207, 133, 166, 205, 148, 95, 186, 222, 200, 185, 181, 3, 197, 22, 221, 233, 248, 242, 242, 187, 104, 54, 195, 15, 46, 237, 123, 51, 105, 126, 82, 42, 83, 233, 10, 215, 212, 150, 147, 84, 31, 189, 78, 229, 152, 175, 95, 18, 30, 202, 153, 120, 91, 117, 105, 80, 177, 184, 214, 237, 168, 55, 162, 5, 225, 124, 222, 246, 93, 235, 201, 126, 34, 242, 59, 166, 7, 192, 93, 33, 247, 194, 49, 30, 129, 225, 48, 157, 202, 166, 5, 65, 118, 125, 242, 19, 82, 31, 165, 180, 1, 111, 126, 84, 11, 232, 101, 253, 220, 220, 85, 202, 24, 184, 26, 184, 29, 43, 18, 84, 252, 229, 64, 163, 65, 210, 133, 62, 230, 66, 179, 221, 83, 114, 66, 118, 188, 128, 92, 219, 205, 61, 113, 212, 152, 31, 198, 154, 205, 203, 86, 255, 251, 149, 185, 77, 69, 144, 139, 31, 164, 106, 229, 149, 37, 124, 93, 3, 74, 129, 79, 50, 185, 199, 41, 143, 41, 28, 127, 102, 44, 60, 247, 108, 252, 27, 76, 251, 152, 255, 123, 184, 121, 22, 48, 120, 109, 35, 13, 86, 207, 38, 131, 48, 129, 45, 249, 229, 196, 215, 66, 58, 176, 1, 107, 215, 113, 154, 30, 217, 16, 209, 70, 244, 234, 161, 78, 111, 16, 148, 98, 38, 140, 177, 88, 106, 34, 42, 71, 224, 148, 52, 156, 155, 159, 151, 76, 60, 214, 17, 76, 122, 239, 114, 143, 102, 115, 44, 193, 19, 106, 188, 117, 170, 122, 242, 151, 72, 19, 236, 205, 131, 81, 137, 190, 253, 124, 183, 169, 72, 194, 121, 23, 220, 13, 56, 5, 158, 152, 214, 183, 58, 107, 140, 206, 233, 121, 127, 77, 210, 190, 160, 102, 6, 141, 137, 84, 177, 32, 13, 171, 25, 241, 215, 44, 0, 158, 209, 28, 141, 124, 245, 116, 175, 145, 93, 42, 156, 14, 55, 251, 244, 96, 101, 188, 224, 41, 38, 58, 144, 237, 221, 224, 94, 194, 224, 3, 96, 55, 139, 156, 161, 170, 253, 136, 222, 142, 223, 124, 97, 172, 106, 212, 158, 173, 246, 235, 4, 33, 179, 118, 202, 130, 50, 174, 113, 141, 29, 201, 227, 71, 148, 83, 92, 223, 159, 65, 208, 139, 3, 104, 137, 236, 132, 153, 162, 88, 170, 172, 125, 15, 130, 67, 232, 141, 32, 183, 48, 34, 33, 16, 195, 82, 158, 151, 127, 58, 103, 189, 252, 205, 2, 225, 126, 45, 254, 249, 236, 6, 35, 92, 174, 163, 65, 135, 47, 96, 148, 119, 89, 31, 90, 91, 246, 219, 22, 205, 175, 25, 246, 198, 182, 142, 51, 252, 163, 123, 225, 230, 244, 149, 170, 198, 29, 244, 13, 169, 223, 29, 64, 159, 157, 49, 242, 227, 199, 252, 160, 235, 120, 189, 250, 89, 86, 160, 191, 191, 31, 251, 175, 21, 206, 145, 36, 4, 57, 6, 140, 42, 13, 33, 107, 169, 31, 216, 101, 204, 134, 19, 240, 73, 168, 193, 224, 68, 130, 228, 122, 229, 28, 133, 177, 188, 87, 51, 33, 123, 48, 124, 13, 103, 17, 146, 48, 198, 127, 244, 167, 250, 84, 77, 0, 52, 190, 121, 253, 17, 102, 99, 89, 98, 219, 51, 43, 69, 208, 178, 206, 209, 12, 195, 185, 236, 242, 30, 132, 16, 245, 166, 176, 119, 169, 183, 133, 169, 142, 92, 60, 244, 60, 29, 19, 132, 146, 84, 4, 26, 130, 200, 252, 210, 158, 224, 112, 17, 43, 255, 77, 0, 60, 159, 118, 103, 20, 223, 75, 161, 126, 143, 115, 113, 219, 198, 159, 58, 204, 183, 121, 70, 134, 105, 130, 13, 198, 19, 151, 25, 38, 118, 107, 52, 108, 72, 68, 129, 18, 107, 118, 210, 44, 237, 66, 106, 69, 76, 155, 206, 58, 2, 17, 13, 25, 59, 132, 11, 168, 110, 177, 247, 164, 1, 97, 182, 179, 15, 167, 234, 213, 141, 99, 106, 41, 187, 93, 78, 177, 129, 225, 45, 194, 107, 226, 163, 49, 33, 181, 94, 25, 70, 180, 124, 179, 208, 157, 54, 80, 114, 147, 176, 217, 139, 245, 146, 156, 163, 226, 22, 4, 15, 49, 133, 36, 190, 62, 177, 211, 142, 4, 136, 56, 213, 7, 47, 168, 149, 61, 164, 174, 226, 18, 64, 66, 176, 173, 134, 106, 9, 255, 239, 4, 69, 40, 192, 245, 210, 196, 180, 79, 176, 30, 233, 77, 22, 140, 78, 25, 145, 212, 114, 12, 204, 75, 199, 198, 251, 214, 34, 165, 38, 85, 6, 203, 54, 138, 141, 162, 236, 153, 181, 227, 117, 120, 248, 199, 37, 234, 91, 249, 9, 250, 116, 192, 103, 223, 238, 103, 212, 90, 212, 207, 71, 252, 254, 180, 21, 35, 144, 48, 123, 139, 40, 222, 44, 191, 93, 235, 246, 189, 121, 85, 83, 134, 27, 224, 124, 227, 105, 204, 220, 18, 253, 96, 142, 218, 26, 168, 158, 164, 92, 188, 146, 141, 2, 131, 181, 7, 236, 72, 213, 228, 247, 95, 134, 100, 123, 135, 69, 133, 142, 116, 158, 180, 34, 188, 180, 247, 58, 236, 180, 99, 14, 6, 118, 56, 105, 4, 169, 4, 77, 197, 142, 123, 107, 209, 103, 218, 139, 186, 100, 246, 112, 210, 134, 199, 164, 69, 85, 13, 56, 70, 11, 104, 33, 189, 52, 177, 73, 3, 42, 175, 201, 24, 191, 63, 101, 110, 100, 241, 192, 153, 17, 119, 222, 136, 53, 162, 105, 46, 246, 82, 248, 113, 184, 138, 85, 74, 115, 114, 26, 47, 248, 151, 87, 75, 50, 32, 225, 98, 126, 180, 253, 194, 112, 249, 35, 206, 247, 236, 226, 43, 225, 8, 209, 235, 95, 50, 95, 182, 140, 223, 8, 185, 94, 152, 159, 44, 215, 205, 136, 126, 252, 50, 185, 100, 21, 89, 193, 182, 196, 252, 122, 179, 148, 137, 167, 191, 82, 130, 216, 180, 234, 105, 29, 91, 168, 85, 117, 57, 48, 16, 192, 143, 162, 132, 154, 97, 89, 238, 230, 85, 186, 150, 240, 246, 114, 83, 83, 33, 50, 105, 30, 211, 119, 80, 7, 60, 140, 117, 151, 109, 184, 113, 69, 131, 185, 164, 89, 162, 179, 18, 161, 96, 126, 115, 174, 255, 206, 141, 63, 45, 142, 121, 194, 201, 63, 235, 90, 77, 17, 138, 106, 161, 129, 175, 68, 202, 164, 174, 174, 37, 141, 192, 33, 42, 208, 27, 68, 193, 156, 208, 230, 175, 205, 134, 12, 10, 55, 160, 68, 28, 143, 143, 32, 4, 56, 56, 148, 228, 163, 80, 130, 198, 55, 116, 219, 103, 164, 224, 47, 48, 231, 2, 240, 188, 1, 188, 246, 158, 184, 101, 152, 29, 251, 143, 192, 8, 53, 111, 23, 185, 147, 201, 243, 139, 35, 173, 238, 117, 205, 128, 245, 73, 60, 42, 83, 197, 152, 84, 43, 85, 169, 119, 211, 106, 90, 137, 95, 157, 245, 189, 244, 73, 204, 240, 4, 0, 71, 223, 53, 188, 240, 59, 188, 0, 197, 213, 67, 240, 34, 75, 135, 45, 169, 224, 183, 28, 183, 159, 166, 246, 130, 61, 111, 12, 95, 160, 167, 226, 115, 109, 124, 238, 58, 155, 193, 111, 206, 60, 181, 252, 89, 144, 170, 202, 144, 4, 218, 231, 254, 105, 182, 204, 126, 127, 108, 139, 152, 39, 243, 222, 124, 0, 135, 190, 156, 7, 143, 39, 15, 122, 208, 235, 72, 10, 86, 6, 243, 217, 52, 166, 27, 223, 174, 52, 171, 87, 78, 115, 229, 122, 109, 50, 234, 76, 114, 175, 87, 240, 116, 236, 63, 35, 143, 11, 24, 5, 174, 189, 69, 38, 58, 223, 66, 241, 182, 17, 160, 240, 162, 58, 235, 144, 4, 144, 128, 187, 10, 69, 202, 126, 140, 126, 189, 167, 17, 143, 165, 100, 237, 177, 137, 73, 69, 78, 63, 131, 156, 228, 184, 228, 49, 27, 113, 9, 189, 52, 187, 174, 107, 231, 223, 94, 25, 177, 174, 240, 202, 126, 0, 48, 18, 135, 155, 108, 218, 227, 177, 236, 147, 118, 208, 197, 132, 55, 14, 142, 131, 92, 166, 95, 156, 161, 199, 251, 40, 201, 27, 41, 67, 115, 66, 164, 154, 122, 107, 82, 103, 208, 193, 252, 98, 68, 35, 245, 76, 232, 252, 135, 125, 169, 148, 136, 199, 54, 39, 29, 72, 144, 58, 211, 28, 107, 172, 30, 185, 203, 144, 95, 37, 183, 176, 87, 209, 172, 96, 19, 115, 63, 146, 117, 254, 28, 127, 12, 38, 109, 103, 176, 197, 45, 239, 113, 227, 188, 67, 117, 145, 202, 112, 101, 35, 69, 34, 104, 11, 16, 237, 78, 196, 59, 79, 238, 163, 255, 12, 29, 209, 152, 222, 179, 234, 7, 72, 97, 44, 179, 200, 237, 245, 252, 24, 234, 200, 171, 161, 81, 114, 29, 115, 163, 31, 230, 34, 90, 228, 56, 19, 27, 61, 234, 224, 40, 226, 196, 65, 17, 227, 14, 120, 208, 59, 123, 69, 42, 10, 50, 62, 70, 137, 229, 15, 212, 174, 5, 31, 97, 71, 60, 210, 203, 141, 42, 105, 109, 89, 84, 239, 134, 63, 155, 116, 42, 77, 217, 3, 191, 29, 255, 95, 170, 169, 60, 181, 36, 200, 72, 46, 170, 86, 18, 97, 126, 14, 70, 31, 190, 133, 33, 242, 235, 37, 119, 99, 233, 102, 194, 236, 189, 84, 214, 181, 56, 140, 191, 46, 58, 17, 137, 51, 254, 186, 222, 33, 86, 103, 166, 74, 101, 94, 165, 143, 41, 41, 169, 240, 42, 67, 157, 92, 76, 145, 237, 202, 7, 87, 15, 189, 185, 70, 27, 112, 248, 204, 239, 49, 188, 56, 228, 174, 118, 80, 109, 243, 211, 122, 87, 212, 14, 2, 82, 192, 255, 81, 224, 5, 220, 130, 240, 129, 18, 66, 183, 23, 97, 177, 192, 237, 127, 69, 220, 162, 85, 199, 12, 30, 253, 93, 149, 214, 252, 148, 75, 0, 99, 224, 248, 5, 168, 153, 125, 10, 131, 190, 116, 49, 12, 40, 104, 161, 23, 218, 167, 38, 130, 136, 117, 102, 129, 205, 143, 219, 228, 211, 193, 163, 202, 245, 25, 100, 220, 206, 211, 93, 5, 152, 45, 84, 169, 153, 247, 131, 237, 172, 21, 94, 220, 135, 61, 220, 61, 4, 61, 153, 141, 189, 180, 130, 246, 69, 155, 92, 221, 196, 89, 131, 104, 4, 81, 163, 30, 94, 219, 239, 103, 213, 168, 187, 71, 84, 189, 52, 130, 92, 70, 99, 150, 119, 150, 206, 205, 3, 76, 126, 115, 138, 177, 113, 87, 208, 99, 3, 255, 85, 113, 166, 6, 12, 123, 255, 28, 20, 240, 146, 10, 180, 132, 162, 0, 35, 34, 219, 149, 72, 158, 179, 182, 164, 86, 152, 189, 170, 92, 205, 34, 193, 156, 166, 81, 237, 147, 230, 234, 43, 193, 96, 141, 69, 11, 10, 233, 176, 39, 127, 156, 84, 5, 238, 89, 165, 92, 53, 179, 150, 212, 148, 155, 73, 77, 237, 233, 166, 44, 156, 61, 9, 91, 201, 64, 207, 199, 8, 162, 85, 94, 168, 7, 201, 1, 154, 226, 188, 247, 226, 123, 84, 138, 144, 216, 187, 238, 66, 147, 190, 171, 180, 203, 13, 18, 186, 79, 41, 58, 183, 35, 57, 183, 241, 9, 140, 151, 254, 243, 234, 96, 72, 130, 81, 50, 110, 27, 159, 173, 237, 97, 29, 147, 53, 27, 120, 183, 240, 110, 120, 88, 185, 3, 27, 98, 73, 38, 236, 138, 93, 41, 62, 211, 103, 167, 211, 238, 181, 229, 40, 216, 81, 38, 73, 255, 215, 249, 215, 144, 150, 135, 181, 116, 126, 94, 102, 85, 100, 114, 86, 139, 122, 209, 116, 136, 44, 254, 32, 145, 55, 29, 166, 47, 88, 63, 173, 196, 199, 179, 18, 41, 155, 108, 14, 113, 132, 104, 128, 57, 252, 198, 173, 102, 97, 231, 104, 111, 195, 39, 203, 93, 238, 27, 164, 91, 98, 7, 106, 125, 130, 234, 249, 183, 100, 30, 194, 225, 249, 105, 99, 86, 18, 46, 155, 86, 171, 85, 241, 177, 70, 57, 116, 164, 85, 178, 47, 95, 233, 189, 106, 82, 17, 112, 82, 73, 141, 134, 31, 199, 2, 19, 34, 66, 229, 121, 208, 144, 37, 174, 206, 19, 248, 30, 228, 159, 79, 52, 143, 65, 49, 98, 108, 70, 204, 87, 63, 136, 166, 147, 73, 87, 11, 22, 231, 30, 80, 217, 144, 196, 244, 95, 223, 115, 228, 99, 227, 219, 191, 72, 179, 72, 4, 163, 238, 115, 222, 244, 215, 219, 75, 37, 231, 185, 67, 132, 21, 199, 29, 109, 189, 4, 121, 31, 206, 201, 5, 187, 106, 117, 196, 223, 87, 93, 188, 113, 128, 65, 187, 146, 126, 165, 70, 138, 23, 1, 126, 14, 250, 249, 205, 214, 141, 102, 237, 55, 167, 222, 220, 15, 126, 7, 156, 61, 128, 105, 49, 213, 164, 183, 21, 8, 96, 3, 37, 240, 212, 75, 69, 154, 255, 157, 10, 35, 173, 157, 138, 201, 54, 100, 7, 147, 207, 177, 122, 169, 120, 237, 99, 208, 149, 137, 41, 42, 173, 26, 145, 242, 232, 38, 184, 109, 106, 236, 107, 169, 83, 95, 30, 229, 25, 134, 105, 3, 198, 239, 2, 1, 189, 21, 1, 140, 111, 53, 172, 55, 36, 32, 54, 146, 22, 162, 243, 102, 77, 147, 111, 87, 74, 194, 249, 73, 40, 212, 236, 10, 43, 165, 27, 120, 186, 42, 250, 85, 2, 107, 54, 227, 254, 161, 81, 121, 255, 121, 2, 225, 125, 17, 73, 118, 30, 130, 254, 194, 30, 59, 242, 253, 220, 33, 7, 129, 186, 24, 204, 74, 19, 164, 142, 225, 145, 182, 23, 96, 123, 5, 163, 133, 168, 210, 184, 87, 20, 218, 255, 101, 217, 31, 11, 79, 21, 11, 164, 249, 211, 156, 136, 212, 98, 70, 89, 26, 85, 79, 47, 128, 202, 127, 165, 13, 112, 180, 14, 236, 185, 215, 244, 196, 91, 119, 158, 52, 160, 31, 126, 15, 169, 87, 139, 180, 97, 20, 33, 57, 69, 14, 133, 21, 129, 110, 114, 198, 95, 250, 14, 211, 170, 3, 39, 222, 6, 192, 212, 143, 185, 93, 85, 22, 171, 251, 224, 44, 169, 90, 172, 168, 183, 201, 69, 169, 71, 43, 123, 130, 51, 77, 183, 238, 158, 14, 203, 186, 118, 131, 65, 60, 119, 38, 44, 231, 188, 234, 43, 15, 138, 60, 39, 29, 102, 164, 130, 71, 209, 20, 197, 206, 136, 98, 227, 138, 173, 173, 186, 23, 173, 111, 133, 15, 209, 32, 173, 214, 180, 190, 254, 27, 68, 155, 177, 78, 78, 248, 159, 236, 141, 125, 246, 64, 134, 137, 242, 245, 117, 184, 84, 36, 28, 228, 83, 251, 130, 21, 142, 237, 171, 95, 11, 196, 231, 90, 152, 193, 137, 159, 44, 99, 235, 55, 46, 129, 53, 153, 66, 252, 34, 89, 55, 175, 222, 227, 193, 118, 95, 160, 54, 225, 32, 162, 76, 135, 2, 218, 154, 244, 244, 40, 236, 191, 230, 215, 17, 72, 20, 108, 26, 233, 85, 201, 6, 51, 197, 43, 30, 163, 94, 83, 71, 234, 54, 93, 90, 209, 18, 174, 12, 250, 213, 118, 47, 47, 140, 169, 242, 173, 192, 15, 180, 187, 103, 170, 249, 48, 181, 255, 192, 245, 74, 112, 7, 85, 247, 142, 85, 101, 159, 15, 205, 171, 45, 61, 155, 126, 105, 207, 139, 207, 167, 90, 41, 196, 91, 104, 159, 209, 145, 123, 221, 6, 95, 31, 22, 211, 212, 107, 26, 66, 141, 52, 240, 38, 62, 49, 125, 227, 80, 242, 231, 43, 191, 52, 18, 187, 127, 173, 139, 155, 208, 48, 233, 116, 201, 93, 216, 159, 54, 239, 70, 13, 26, 101, 176, 2, 74, 110, 60, 155, 183, 226, 125, 11, 161, 48, 86, 244, 206, 232, 201, 203, 63, 180, 124, 161, 163, 187, 193, 38, 151, 12, 226, 166, 160, 209, 5, 33, 247, 205, 170, 243, 199, 138, 228, 133, 233, 252, 215, 205, 232, 213, 46, 24, 230, 254, 238, 159, 178, 28, 165, 57, 45, 80, 194, 119, 183, 120, 184, 33, 59, 255, 41, 242, 82, 116, 14, 96, 111, 174, 170, 65, 2, 61, 19, 194, 40, 60, 90, 236, 132, 48, 63, 239, 182, 149, 123, 190, 130, 200, 208, 100, 155, 164, 250, 3, 70, 182, 183, 74, 142, 242, 219, 74, 175, 254, 184, 17, 251, 208, 207, 71, 246, 5, 213, 190, 53, 185, 115, 12, 224, 150, 175, 218, 195, 46, 179, 246, 237, 193, 23, 27, 89, 182, 191, 122, 255, 210, 164, 44, 34, 22, 197, 184, 64, 213, 51, 232, 31, 100, 59, 120, 126, 181, 168, 140, 152, 36, 169, 254, 179, 14, 67, 1, 33, 55, 146, 129, 82, 214, 168, 56, 140, 8, 46, 94, 68, 24, 53, 76, 54, 197, 93, 238, 55, 112, 92, 48, 201, 123, 119, 239, 19, 99, 245, 151, 78, 7, 135, 252, 241, 137, 61, 37, 127, 159, 241, 118, 221, 190, 248, 189, 56, 59, 32, 52, 3, 115, 60, 229, 224, 99, 175, 89, 88, 221, 105, 41, 140, 104, 152, 99, 164, 54, 17, 49, 27, 16, 181, 200, 106, 86, 127, 41, 54, 178, 19, 31, 23, 235, 192, 183, 67, 2, 84, 47, 126, 199, 135, 158, 18, 167, 143, 107, 130, 135, 246, 166, 212, 24, 110, 149, 153, 247, 11, 219, 91, 228, 12, 150, 167, 198, 243, 86, 89, 194, 56, 101, 95, 48, 232, 43, 155, 26, 19, 232, 94, 64, 28, 187, 83, 225, 185, 119, 127, 43, 99, 129, 191, 57, 134, 54, 130, 225, 68, 134, 211, 26, 233, 72, 51, 224, 153, 237, 97, 84, 80, 91, 102, 36, 123, 162, 165, 133, 157, 224, 100, 43, 214, 209, 107, 67, 243, 117, 50, 176, 180, 202, 246, 90, 16, 38, 92, 14, 73, 90, 159, 3, 127, 188, 219, 154, 73, 39, 161, 71, 29, 160, 55, 155, 194, 39, 116, 93, 210, 203, 106, 59, 102, 59, 201, 66, 242, 101, 63, 213, 21, 74, 150, 111, 226, 201, 57, 145, 139, 20, 156, 45, 243, 34, 148, 196, 151, 49, 134, 109, 12, 152, 16, 146, 63, 150, 208, 117, 43, 33, 128, 42, 35, 98, 203, 103, 181, 165, 223, 135, 182, 77, 140, 232, 71, 125, 8, 229, 241, 46, 140, 227, 194, 225, 197, 244, 98, 132, 71, 82, 180, 24, 103, 216, 242, 27, 243, 201, 185, 139, 74, 165, 58, 224, 227, 90, 203, 132, 0, 41, 35, 157, 90, 190, 215, 113, 13, 148, 152, 24, 223, 25, 119, 111, 161, 70, 88, 19, 170, 54, 220, 101, 203, 99, 34, 19, 21, 72, 115, 232, 212, 188, 7, 77, 157, 27, 65, 129, 70, 8, 124, 118, 112, 25, 5, 87, 45, 120, 203, 223, 0, 116, 222, 199, 60, 180, 50, 146, 112, 140, 18, 171, 127, 55, 107, 158, 203, 52, 170, 31, 52, 138, 73, 14, 84, 92, 169, 87, 165, 171, 81, 20, 77, 250, 5, 143, 69, 159, 1, 245, 22, 80, 92, 168, 33, 150, 57, 168, 115, 103, 15, 186, 151, 133, 245, 215, 205, 73, 124, 25, 194, 37, 218, 251, 68, 216, 194, 105, 30, 167, 235, 7, 149, 98, 42, 140, 140, 90, 143, 173, 205, 130, 222, 17, 100, 120, 196, 15, 221, 58, 60, 173, 236, 53, 156, 181, 75, 161, 123, 45, 80, 114, 116, 54, 100, 248, 143, 147, 20, 136, 162, 53, 164, 77, 39, 229, 229, 69, 184, 95, 166, 67, 223, 9, 163, 112, 150, 172, 96, 130, 133, 171, 152, 57, 204, 120, 250, 219, 226, 202, 44, 119, 27, 10, 19, 169, 219, 74, 155, 231, 186, 155, 181, 127, 140, 127, 138, 28, 72, 42, 196, 0, 11, 134, 122, 30, 23, 26, 250, 130, 36, 128, 221, 76, 241, 147, 182, 84, 134, 201, 213, 222, 66, 24, 231, 227, 51, 21, 116, 32, 44, 86, 223, 137, 164, 174, 80, 186, 3, 182, 43, 48, 126, 188, 145, 144, 46, 183, 141, 44, 144, 65, 238, 61, 130, 38, 114, 136, 205, 194, 168, 127, 159, 25, 78, 234, 224, 46, 126, 61, 148, 19, 142, 63, 153, 243, 153, 200, 144, 157, 40, 220, 77, 135, 206, 87, 151, 115, 230, 204, 129, 33, 252, 230, 77, 195, 122, 146, 38, 18, 218, 208, 7, 31, 194, 198, 101, 229, 200, 39, 195, 137, 27, 90, 160, 7, 213, 115, 187, 32, 139, 27, 127, 162, 99, 203, 60, 93, 110, 64, 201, 22, 147, 224, 12, 166, 202, 34, 92, 8, 2, 90, 148, 52, 99, 185, 233, 60, 20, 57, 27, 113, 171, 17, 242, 247, 151, 101, 100, 18, 239, 144, 53, 132, 51, 159, 48, 105, 157, 16, 91, 152, 156, 21, 66, 2, 73, 147, 80, 62, 58, 252, 22, 164, 91, 86, 4, 209, 171, 191, 25, 98, 183, 19, 237, 95, 90, 155, 117, 191, 247, 218, 65, 7, 175, 10, 46, 81, 19, 11, 47, 107, 238, 92, 116, 192, 9, 241, 218, 157, 232, 116, 88, 254, 14, 101, 108, 152, 30, 46, 99, 84, 60, 128, 189, 23, 165, 173, 42, 215, 239, 52, 7, 175, 172, 191, 38, 43, 254, 76, 38, 37, 75, 138, 228, 66, 140, 146, 12, 3, 193, 238, 139, 142, 47, 98, 88, 156, 50, 226, 99, 231, 225, 56, 105, 6, 235, 81, 109, 249, 171, 21, 57, 129, 157, 96, 85, 61, 192, 24, 145, 83, 124, 11, 203, 129, 155, 117, 21, 225, 144, 235, 220, 84, 41, 155, 169, 193, 188, 240, 84, 73, 205, 47, 177, 149, 235, 111, 219, 254, 212, 225, 77, 117, 69, 91, 60, 167, 224, 167, 209, 35, 123, 212, 214, 131, 29, 177, 78, 234, 117, 181, 167, 133, 93, 190, 234, 10, 251, 88, 104, 245, 201, 88, 133, 123, 32, 181, 29, 148, 54, 105, 209, 226, 12, 87, 139, 21, 87, 242, 13, 187, 221, 140, 111, 16, 187, 199, 185, 14, 249, 99, 233, 251, 188, 50, 198, 82, 156, 88, 164, 117, 102, 242, 139, 57, 151, 105, 173, 150, 165, 83, 35, 216, 16, 147, 133, 153, 35, 78, 59, 145, 114, 124, 41, 80, 25, 114, 79, 94, 149, 184, 65, 6, 241, 68, 249, 132, 72, 195, 11, 139, 147, 7, 166, 124, 56, 7, 85, 159, 12, 67, 244, 134, 148, 190, 9, 61, 78, 214, 40, 246, 39, 235, 115, 234, 13, 180, 22, 134, 138, 136, 19, 185, 243, 159, 57, 48, 47, 112, 154, 248, 229, 60, 218, 136, 179, 154, 120, 211, 178, 55, 26, 21, 252, 119, 38, 59, 120, 225, 140, 52, 92, 139, 105, 168, 236, 212, 77, 197, 62, 243, 225, 135, 190, 151, 248, 82, 172, 9, 101, 4, 203, 103, 152, 46, 197, 237, 183, 217, 74, 190, 204, 79, 182, 235, 72, 81, 204, 245, 74, 51, 215, 65, 193, 236, 88, 64, 19, 239, 245, 20, 52, 1, 25, 48, 65, 71, 212, 27, 144, 28, 227, 25, 122, 100, 117, 249, 59, 148, 54, 25, 223, 29, 212, 176, 86, 32, 79, 189, 171, 191, 154, 49, 115, 203, 187, 50, 12, 159, 91, 1, 226, 175, 222, 114, 30, 100, 55, 50, 168, 19, 7, 85, 223, 225, 161, 209, 155, 125, 167, 194, 217, 122, 110, 10, 181, 193, 43, 50, 247, 59, 250, 145, 245, 135, 149, 228, 126, 201, 137, 176, 202, 49, 134, 17, 133, 106, 126, 157, 36, 50, 222, 15, 158, 78, 193, 229, 179, 177, 158, 118, 189, 42, 47, 169, 237, 191, 44, 243, 255, 235, 196, 211, 158, 217, 146, 143, 15, 121, 74, 100, 24, 200, 89, 176, 83, 199, 48, 230, 61, 85, 141, 224, 175, 52, 51, 111, 188, 11, 116, 24, 3, 152, 79, 232, 50, 227, 62, 9, 114, 249, 56, 0, 142, 43, 195, 62, 153, 198, 167, 80, 210, 26, 174, 19, 194, 4, 190, 228, 185, 18, 48, 203, 125, 55, 191, 160, 20, 84, 142, 158, 106, 70, 9, 207, 135, 181, 220, 117, 91, 169, 159, 28, 224, 106, 44, 24, 161, 224, 15, 22, 7, 12, 51, 183, 236, 241, 174, 157, 19, 135, 33, 143, 168, 62, 232, 215, 145, 244, 17, 137, 179, 140, 128, 177, 82, 72, 97, 170, 74, 185, 163, 121, 76, 119, 111, 62, 28, 231, 209, 149, 12, 115, 82, 188, 11, 124, 186, 79, 143, 181, 125, 152, 182, 162, 56, 190, 246, 1, 92, 188, 2, 186, 143, 42, 208, 155, 107, 84, 203, 58, 18, 15, 208, 90, 163, 194, 215, 56, 181, 215, 228, 78, 251, 219, 53, 18, 229, 161, 207, 200, 217, 8, 13, 112, 202, 144, 191, 90, 181, 111, 38, 18, 108, 100, 202, 152, 81, 158, 199, 196, 29, 216, 197, 53, 120, 10, 33, 117, 133, 240, 75, 89, 212, 113, 234, 252, 228, 157, 93, 220, 243, 127, 241, 18, 85, 177, 132, 55, 221, 246, 190, 8, 132, 22, 137, 227, 116, 190, 116, 74, 48, 249, 31, 244, 119, 112, 166, 189, 177, 218, 82, 252, 35, 102, 191, 93, 157, 153, 126, 102, 171, 131, 16, 10, 101, 242, 145, 152, 187, 152, 79, 226, 33, 94, 109, 16, 120, 243, 34, 234, 184, 232, 196, 223, 184, 89, 228, 234, 3, 66, 214, 124, 140, 53, 49, 148, 254, 138, 132, 60, 157, 93, 252, 81, 182, 28, 40, 118, 131, 155, 245, 14, 130, 3, 51, 102, 89, 150, 194, 61, 240, 232, 239, 248, 45, 57, 177, 129, 44, 103, 167, 134, 209, 12, 116, 201, 208, 232, 6, 47, 43, 123, 142, 146, 104, 176, 246, 179, 89, 213, 14, 84, 106, 50, 187, 105, 220, 0, 178, 81, 216, 92, 205, 248, 168, 65, 149, 221, 201, 202, 124, 18, 151, 55, 224, 145, 242, 122, 116, 119, 242, 230, 195, 252, 135, 234, 17, 187, 133, 9, 27, 253, 84, 250, 209, 254, 85, 127, 85, 75, 23, 130, 94, 107, 81, 21, 89, 238, 16, 59, 120, 207, 231, 86, 18, 207, 7, 151, 5, 142, 76, 97, 253, 56, 144, 126, 211, 31, 206, 4, 71, 94, 235, 254, 248, 217, 218, 90, 191, 120, 21, 201, 196, 92, 69, 74, 187, 176, 200, 182, 55, 45, 250, 243, 141, 34, 252, 251, 45, 192, 205, 205, 165, 150, 28, 204, 224, 172, 78, 100, 149, 58, 209, 229, 121, 53, 232, 32, 242, 18, 166, 218, 235, 225, 177, 128, 242, 201, 228, 28, 57, 195, 251, 21, 207, 95, 116, 41, 188, 237, 28, 102, 122, 249, 201, 117, 196, 83, 77, 239, 44, 107, 180, 186, 245, 209, 44, 143, 140, 80, 148, 136, 70, 35, 229, 63, 99, 51, 218, 206, 243, 152, 48, 10, 217, 179, 169, 111, 49, 191, 121, 172, 60, 86, 190, 249, 141, 49, 9, 221, 2, 157, 189, 36, 93, 61, 229, 106, 60, 1, 31, 117, 222, 12, 112, 14, 105, 139, 7, 106, 24, 33, 94, 174, 215, 77, 226, 30, 79, 47, 110, 187, 175, 155, 200, 101, 15, 64, 200, 63, 16, 131, 183, 117, 241, 255, 126, 106, 242, 134, 254, 72, 247, 252, 170, 204, 163, 163, 118, 4, 73, 126, 144, 76, 220, 50, 64, 81, 43, 255, 17, 155, 67, 130, 60, 173, 46, 128, 237, 128, 220, 58, 61, 84, 150, 225, 232, 155, 155, 233, 110, 109, 217, 17, 229, 224, 187, 155, 34, 50, 246, 113, 192, 233, 12, 95, 36, 183, 217, 184, 67, 234, 99, 177, 104, 81, 133, 156, 172, 198, 91, 141, 175, 44, 131, 201, 24, 20, 137, 156, 66, 11, 237, 62, 116, 160, 240, 221, 112, 3, 38, 121, 191, 78, 138, 146, 148, 85, 36, 135, 74, 218, 160, 215, 12, 124, 99, 114, 96, 255, 59, 1, 176, 217, 104, 196, 227, 28, 230, 7, 219, 3, 214, 47, 236, 19, 103, 128, 180, 210, 108, 146, 247, 218, 157, 215, 116, 149, 13, 172, 52, 99, 128, 155, 140, 170, 74, 247, 232, 225, 92, 211, 251, 214, 40, 123, 59, 183, 242, 12, 141, 181, 27, 145, 236, 108, 105, 7, 50, 75, 38, 253, 97, 254, 218, 184, 178, 32, 250, 163, 228, 238, 199, 19, 121, 221, 94, 233, 115, 149, 156, 20, 196, 52, 120, 148, 68, 159, 158, 95, 9, 241, 157, 18, 245, 33, 10, 146, 125, 21, 45, 204, 242, 2, 150, 95, 124, 118, 147, 237, 86, 216, 251, 83, 158, 222, 245, 109, 89, 142, 148, 28, 196, 162, 214, 169, 24, 187, 138, 227, 37, 179, 114, 11, 61, 88, 193, 7, 147, 241, 64, 35, 90, 160, 74, 188, 128, 209, 174, 119, 101, 135, 196, 92, 17, 182, 1, 54, 140, 191, 245, 29, 211, 99, 156, 105, 243, 9, 84, 157, 85, 123, 111, 29, 62, 162, 179, 131, 157, 23, 234, 60, 22, 71, 6, 155, 94, 245, 165, 245, 195, 144, 107, 116, 50, 215, 247, 15, 224, 42, 180, 111, 12, 164, 248, 2, 201, 199, 201, 158, 3, 175, 207, 36, 39, 111, 82, 141, 202, 222, 231, 199, 172, 247, 150, 135, 211, 24, 228, 128, 46, 98, 42, 94, 177, 22, 193, 65, 69, 211, 216, 183, 53, 28, 243, 48, 56, 76, 135, 126, 67, 80, 75, 162, 203, 111, 201, 168, 11, 55, 111, 177, 135, 23, 159, 185, 158, 36, 128, 163, 120, 239, 135, 51, 132, 163, 79, 143, 10, 208, 152, 216, 92, 126, 208, 220, 233, 86, 190, 16, 23, 55, 137, 136, 149, 227, 64, 29, 138, 229, 32, 202, 154, 191, 118, 163, 43, 140, 41, 119, 138, 74, 63, 7, 6, 159, 225, 161, 57, 172, 224, 67, 199, 16, 164, 104, 232, 14, 194, 170, 230, 90, 10, 156, 201, 239, 229, 87, 186, 104, 52, 140, 14, 243, 129, 64, 139, 171, 186, 74, 71, 49, 175, 97, 217, 80, 232, 190, 120, 168, 185, 157, 236, 18, 119, 85, 87, 3, 189, 141, 166, 179, 211, 182, 32, 177, 86, 67, 76, 99, 161, 15, 3, 33, 219, 147, 30, 143, 38, 19, 60, 41, 176, 35, 249, 23, 139, 193, 113, 146, 164, 52, 46, 35, 236, 79, 101, 20, 37, 23, 157, 182, 123, 52, 56, 234, 197, 107, 196, 179, 158, 205, 158, 20, 49, 91, 93, 184, 78, 230, 201, 69, 80, 169, 132, 177, 141, 77, 242, 20, 47, 188, 207, 173, 192, 11, 113, 192, 151, 229, 161, 245, 165, 187, 225, 29, 65, 171, 102, 186, 154, 86, 214, 98, 182, 71, 176, 192, 199, 68, 84, 135, 173, 12, 87, 116, 242, 231, 110, 228, 162, 202, 107, 161, 247, 19, 28, 230, 89, 48, 14, 164, 236, 88, 40, 112, 217, 93, 106, 243, 47, 20, 159, 72, 209, 223, 181, 157, 203, 92, 245, 65, 175, 21, 206, 135, 3, 109, 158, 153, 237, 88, 213, 196, 116, 31, 158, 141, 178, 181, 35, 2, 132, 197, 78, 250, 2, 32, 97, 64, 254, 20, 205, 151, 78, 154, 219, 199, 73, 128, 214, 166, 209, 208, 219, 184, 66, 138, 208, 149, 153, 218, 213, 186, 168, 89, 169, 221, 68, 1, 170, 160, 235, 214, 20, 193, 137, 252, 57, 163, 65, 181, 159, 242, 194, 48, 146, 154, 227, 255, 245, 20, 143, 43, 88, 102, 196, 101, 55, 242, 2, 107, 218, 218, 60, 59, 95, 86, 52, 199, 189, 119, 34, 134, 244, 117, 227, 140, 128, 84, 146, 213, 52, 18, 196, 24, 194, 172, 113, 95, 30, 209, 221, 146, 82, 255, 236, 82, 55, 100, 155, 136, 226, 221, 192, 255, 22, 0, 180, 205, 79, 18, 16, 61, 54, 42, 16, 249, 28, 110, 235, 153, 89, 115, 83, 159, 208, 255, 236, 86, 47, 247, 75, 185, 143, 133, 242, 46, 76, 43, 171, 104, 0, 113, 129, 20, 252, 163, 31, 192, 66, 151, 113, 19, 17, 99, 164, 4, 5, 173, 207, 227, 254, 202, 212, 6, 10, 179, 150, 60, 153, 200, 129, 112, 9, 236, 112, 208, 115, 251, 108, 147, 152, 114, 124, 124, 9, 64, 70, 241, 95, 243, 73, 220, 88, 71, 9, 122, 73, 68, 54, 248, 74, 12, 43, 5, 171, 195, 11, 237, 63, 123, 30, 116, 138, 54, 48, 151, 21, 236, 162, 53, 156, 220, 72, 74, 73, 168, 106, 57, 122, 47, 134, 199, 36, 73, 201, 103, 206, 188, 112, 181, 21, 175, 12, 10, 129, 34, 146, 53, 129, 71, 143, 99, 211, 27, 165, 221, 141, 180, 201, 70, 21, 220, 74, 109, 16, 165, 17, 144, 17, 98, 13, 197, 107, 42, 36, 19, 190, 50, 152, 138, 102, 6, 181, 174, 252, 122, 109, 186, 215, 158, 58, 93, 147, 55, 0, 165, 131, 95, 100, 212, 88, 254, 253, 23, 144, 241, 99, 35, 92, 21, 77, 251, 96, 115, 4, 96, 222, 18, 145, 209, 209, 122, 2, 234, 25, 88, 109, 185, 253, 55, 246, 134, 168, 120, 70, 83, 191, 238, 185, 35, 14, 30, 247, 203, 229, 39, 238, 98, 29, 3, 196, 108, 48, 175, 162, 182, 230, 0, 180, 242, 135, 34, 7, 66, 97, 12, 211, 102, 27, 249, 38, 130, 212, 52, 126, 106, 24, 77, 215, 204, 183, 84, 231, 38, 199, 202, 72, 49, 139, 177, 104, 48, 96, 94, 172, 30, 72, 93, 128, 47, 126, 190, 119, 239, 117, 90, 118, 103, 250, 218, 199, 17, 190, 3, 230, 250, 51, 69, 228, 250, 33, 254, 144, 233, 90, 131, 149, 182, 4, 36, 149, 206, 119, 49, 102, 104, 241, 58, 61, 186, 41, 206, 158, 225, 25, 20, 193, 6, 243, 143, 175, 67, 161, 54, 30, 95, 253, 237, 184, 51, 10, 243, 32, 227, 88, 15, 244, 255, 194, 125, 151, 85, 195, 242, 246, 62, 173, 96, 1, 20, 195, 240, 62, 18, 253, 59, 24, 148, 139, 152, 56, 77, 147, 5, 69, 106, 18, 142, 122, 132, 134, 170, 249, 248, 186, 248, 58, 164, 45, 169, 191, 151, 213, 100, 191, 72, 159, 59, 227, 71, 84, 78, 2, 221, 137, 119, 252, 244, 152, 79, 221, 233, 136, 36, 182, 160, 141, 200, 71, 105, 39, 117, 88, 188, 78, 178, 118, 215, 126, 220, 245, 201, 161, 35, 20, 246, 7, 233, 251, 251, 129, 152, 225, 149, 7, 175, 160, 68, 240, 37, 21, 175, 169, 250, 30, 91, 214, 191, 168, 223, 64, 168, 205, 116, 31, 212, 62, 18, 251, 219, 185, 120, 62, 218, 86, 155, 153, 99, 185, 187, 65, 64, 215, 138, 179, 191, 24, 83, 153, 225, 67, 208, 91, 232, 115, 165, 101, 112, 215, 8, 121, 145, 72, 31, 17, 138, 107, 78, 189, 68, 237, 139, 60, 156, 176, 247, 210, 162, 88, 156, 27, 64, 139, 138, 245, 0, 13, 204, 80, 12, 214, 110, 127, 23, 2, 231, 138, 125, 103, 136, 149, 253, 91, 241, 94, 47, 194, 237, 194, 3, 196, 1, 179, 1, 77, 39, 96, 251, 166, 125, 173, 186, 136, 135, 163, 109, 211, 177, 223, 128, 51, 38, 224, 204, 232, 220, 19, 124, 57, 244, 169, 171, 97, 192, 143, 24, 46, 212, 110, 215, 244, 237, 200, 73, 20, 150, 16, 5, 116, 168, 154, 48, 108, 100, 131, 18, 49, 70, 220, 150, 121, 58, 91, 242, 105, 199, 234, 62, 101, 155, 51, 132, 221, 98, 30, 48, 249, 77, 119, 251, 101, 229, 6, 54, 177, 39, 118, 70, 154, 247, 201, 44, 108, 6, 160, 215, 105, 114, 255, 153, 100, 130, 245, 29, 91, 241, 204, 238, 177, 241, 194, 171, 127, 168, 147, 221, 55, 133, 51, 234, 1, 230, 18, 191, 177, 106, 122, 77, 184, 115, 194, 243, 184, 125, 177, 234, 148, 239, 168, 144, 117, 119, 62, 48, 141, 44, 227, 242, 98, 211, 221, 201, 11, 248, 202, 242, 160, 93, 186, 143, 12, 6, 61, 79, 108, 178, 212, 121, 139, 111, 161, 229, 46, 4, 4, 79, 7, 244, 61, 121, 88, 133, 200, 170, 77, 73, 185, 45, 60, 207, 15, 222, 86, 75, 39, 35, 142, 134, 33, 68, 240, 202, 215, 232, 108, 72, 93, 177, 72, 202, 207, 148, 171, 190, 76, 155, 17, 27, 248, 69, 64, 42, 208, 238, 246, 247, 85, 175, 65, 27, 124, 174, 22, 48, 215, 174, 62, 156, 217, 129, 50, 210, 214, 123, 164, 250, 163, 179, 134, 202, 203, 180, 80, 238, 27, 109, 108, 115, 113, 63, 23, 113, 128, 135, 47, 118, 78, 1, 246, 85, 8, 88, 190, 79, 86, 191, 60, 91, 89, 203, 97, 241, 55, 116, 95, 108, 254, 54, 34, 116, 120, 135, 50, 100, 106, 196, 73, 239, 71, 95, 65, 63, 101, 88, 191, 149, 165, 53, 117, 44, 125, 194, 44, 207, 17, 40, 60, 218, 59, 119, 76, 166, 85, 125, 69, 113, 35, 204, 119, 208, 18, 117, 146, 174, 140, 216, 42, 181, 250, 188, 180, 22, 59, 58, 145, 123, 38, 64, 139, 157, 240, 4, 101, 16, 65, 127, 250, 144, 77, 186, 61, 160, 23, 25, 44, 53, 228, 152, 162, 48, 175, 36, 232, 152, 51, 57, 241, 107, 71, 45, 132, 18, 79, 108, 41, 166, 104, 0, 64, 224, 210, 47, 247, 0, 108, 3, 152, 135, 153, 90, 161, 86, 162, 155, 86, 143, 44, 200, 121, 64, 231, 234, 86, 242, 8, 97, 176, 53, 9, 238, 87, 21, 226, 60, 91, 113, 76, 94, 251, 3, 79, 94, 56, 184, 101, 102, 70, 57, 144, 64, 51, 208, 121, 235, 108, 16, 80, 1, 213, 72, 204, 194, 133, 3, 68, 171, 186, 24, 76, 244, 246, 31, 177, 10, 110, 227, 22, 182, 60, 140, 142, 0, 107, 83, 78, 85, 209, 169, 21, 201, 208, 138, 57, 232, 228, 60, 21, 143, 45, 32, 166, 215, 143, 90, 104, 232, 7, 168, 177, 38, 26, 136, 198, 217, 246, 26, 135, 241, 232, 199, 202, 155, 38, 247, 242, 137, 134, 19, 252, 145, 250, 143, 39, 213, 19, 134, 80, 210, 183, 166, 249, 143, 239, 205, 23, 251, 30, 210, 156, 252, 232, 178, 209, 104, 252, 242, 191, 221, 233, 99, 244, 206, 248, 94, 181, 251, 44, 115, 206, 203, 202, 214, 32, 192, 112, 205, 175, 112, 206, 186, 190, 96, 237, 39, 153, 50, 192, 30, 212, 158, 13, 212, 189, 49, 223, 96, 7, 217, 73, 178, 38, 27, 109, 79, 62, 2, 133, 149, 96, 239, 142, 149, 143, 7, 19, 101, 78, 53, 79, 59, 232, 94, 151, 163, 147, 19, 228, 73, 119, 82, 198, 200, 28, 246, 225, 17, 45, 233, 146, 113, 221, 236, 149, 37, 140, 41, 71, 96, 139, 204, 32, 92, 106, 197, 194, 158, 214, 223, 155, 197, 143, 124, 106, 239, 9, 148, 29, 103, 24, 132, 105, 7, 208, 137, 145, 148, 209, 77, 61, 90, 226, 98, 185, 192, 249, 64, 145, 255, 191, 188, 181, 89, 251, 208, 236, 217, 139, 3, 176, 251, 88, 119, 119, 235, 188, 126, 151, 121, 94, 33, 69, 12, 199, 224, 18, 247, 83, 78, 11, 215, 219, 6, 248, 13, 59, 138, 63, 232, 35, 151, 82, 72, 91, 40, 141, 14, 113, 70, 48, 34, 119, 191, 119, 241, 253, 196, 184, 17, 99, 12, 51, 68, 124, 79, 86, 39, 189, 226, 57, 33, 22, 247, 62, 244, 0, 86, 173, 165, 174, 191, 117, 2, 225, 227, 36, 241, 238, 226, 174, 90, 97, 188, 186, 43, 153, 164, 45, 164, 205, 91, 183, 26, 91, 182, 189, 133, 28, 240, 56, 255, 151, 157, 101, 34, 153, 8, 119, 12, 125, 33, 114, 112, 185, 85, 7, 142, 246, 206, 39, 8, 154, 33, 187, 245, 71, 50, 235, 136, 93, 141, 74, 227, 93, 228, 199, 14, 77, 11, 158, 147, 152, 61, 219, 137, 230, 125, 182, 33, 178, 25, 129, 243, 61, 99, 26, 93, 90, 90, 247, 212, 216, 159, 152, 252, 141, 15, 18, 6, 103, 173, 241, 175, 33, 141, 48, 69, 191, 83, 33, 198, 181, 48, 180, 179, 40, 84, 33, 242, 166, 139, 13, 113, 186, 23, 178, 206, 107, 253, 72, 138, 72, 217, 22, 106, 106, 90, 39, 13, 151, 203, 33, 44, 191, 120, 71, 42, 160, 171, 211, 23, 157, 37, 188, 92, 225, 217, 151, 155, 50, 206, 35, 234, 174, 36, 182, 52, 157, 224, 24, 175, 120, 117, 29, 58, 79, 77, 145, 195, 129, 232, 99, 179, 253, 112, 26, 65, 219, 76, 16, 206, 203, 247, 41, 235, 57, 49, 218, 120, 53, 83, 97, 110, 217, 3, 84, 218, 234, 63, 105, 6, 21, 160, 187, 221, 252, 230, 68, 119, 29, 224, 10, 239, 100, 177, 70, 186, 228, 211, 66, 61, 33, 185, 221, 255, 73, 134, 149, 43, 128, 143, 148, 179, 84, 127, 19, 126, 107, 243, 168, 132, 12, 165, 134, 242, 180, 197, 218, 143, 141, 222, 107, 227, 148, 61, 232, 69, 34, 154, 69, 86, 23, 183, 12, 106, 124, 214, 102, 176, 139, 175, 192, 86, 178, 251, 251, 20, 79, 169, 12, 162, 250, 75, 100, 201, 79, 249, 144, 234, 240, 216, 1, 155, 251, 111, 169, 167, 89, 246, 73, 138, 47, 182, 63, 235, 121, 16, 186, 140, 93, 143, 19, 123, 93, 93, 218, 130, 94, 199, 216, 241, 236, 178, 224, 42, 125, 251, 28, 92, 141, 61, 76, 224, 100, 129, 148, 92, 57, 76, 140, 152, 61, 105, 43, 154, 55, 236, 144, 114, 192, 208, 229, 124, 183, 241, 184, 12, 125, 69, 210, 185, 227, 196, 145, 189, 191, 252, 63, 86, 225, 204, 139, 33, 136, 78, 11, 74, 93, 80, 85, 76, 55, 223, 40, 210, 154, 161, 171, 212, 211, 5, 238, 47, 201, 55, 153, 38, 244, 30, 147, 45, 252, 130, 70, 124, 242, 68, 193, 148, 237, 142, 88, 26, 129, 2, 89, 107, 215, 109, 245, 110, 194, 98, 5, 64, 179, 247, 109, 191, 255, 111, 66, 216, 224, 250, 134, 98, 85, 78, 81, 184, 171, 252, 230, 41, 13, 25, 76, 203, 151, 56, 138, 149, 255, 124, 160, 59, 72, 191, 185, 234, 223, 152, 97, 69, 131, 161, 198, 130, 64, 223, 107, 11, 249, 179, 182, 165, 203, 145, 81, 179, 103, 7, 55, 230, 71, 242, 159, 245, 88, 175, 73, 11, 179, 51, 69, 97, 89, 237, 43, 230, 142, 63, 180, 78, 227, 13, 212, 34, 17, 243, 18, 119, 202, 253, 251, 51, 88, 88, 203, 92, 32, 100, 162, 167, 90, 18, 240, 29, 14, 203, 184, 209, 65, 2, 44, 21, 242, 134, 195, 90, 96, 169, 119, 96, 151, 144, 226, 191, 207, 111, 130, 223, 17, 141, 229, 19, 115, 129, 174, 23, 224, 254, 90, 3, 206, 77, 146, 132, 130, 124, 137, 98, 198, 30, 182, 12, 57, 2, 156, 54, 104, 80, 130, 91, 172, 45, 82, 52, 250, 17, 203, 224, 165, 23, 243, 88, 39, 251, 186, 232, 148, 153, 54, 16, 28, 15, 118, 23, 126, 107, 85, 187, 85, 147, 121, 137, 138, 105, 173, 149, 39, 176, 207, 252, 85, 100, 208, 154, 152, 85, 212, 160, 108, 187, 124, 130, 232, 135, 146, 44, 40, 245, 88, 174, 74, 213, 207, 221, 158, 230, 225, 165, 26, 186, 19, 216, 245, 180, 254, 42, 215, 211, 10, 163, 38, 116, 170, 113, 53, 81, 199, 95, 15, 58, 50, 96, 186, 228, 99, 211, 198, 136, 73, 197, 114, 74, 242, 181, 241, 64, 18, 239, 54, 230, 56, 149, 214, 200, 137, 82, 204, 173, 58, 164, 125, 84, 34, 104, 206, 165, 230, 77, 175, 211, 202, 199, 114, 197, 68, 206, 99, 211, 127, 156, 250, 105, 2, 64, 85, 20, 33, 141, 108, 36, 75, 116, 111, 192, 142, 96, 64, 247, 251, 92, 142, 105, 213, 226, 238, 98, 13, 33, 114, 30, 132, 59, 23, 140, 60, 162, 203, 252, 255, 240, 151, 127, 202, 89, 118, 123, 77, 77, 31, 61, 141, 176, 220, 226, 161, 125, 105, 82, 217, 16, 150, 99, 228, 107, 223, 178, 75, 186, 87, 25, 191, 81, 113, 45, 176, 185, 103, 236, 138, 180, 220, 211, 211, 199, 245, 155, 28, 5, 54, 41, 82, 56, 104, 203, 102, 205, 149, 174, 164, 61, 179, 75, 118, 59, 252, 63, 130, 48, 175, 198, 182, 232, 2, 131, 102, 102, 228, 126, 170, 217, 90, 171, 165, 33, 0, 107, 62, 244, 156, 21, 241, 232, 139, 64, 65, 19, 102, 149, 191, 222, 228, 23, 123, 235, 40, 31, 191, 155, 11, 167, 148, 245, 41, 37, 23, 170, 29, 64, 98, 124, 2, 191, 149, 247, 67, 98, 30, 154, 125, 172, 79, 46, 123, 198, 1, 115, 76, 21, 184, 201, 60, 102, 149, 187, 54, 227, 37, 174, 255, 237, 131, 155, 248, 199, 41, 2, 118, 131, 234, 205, 249, 81, 200, 223, 91, 212, 83, 217, 37, 213, 5, 94, 161, 17, 233, 82, 170, 75, 81, 167, 107, 41, 92, 205, 196, 54, 243, 103, 2, 251, 19, 199, 137, 15, 82, 40, 130, 252, 77, 196, 100, 111, 208, 113, 40, 63, 229, 93, 31, 97, 246, 193, 72, 78, 234, 98, 67, 4, 137, 95, 180, 177, 52, 248, 57, 73, 243, 29, 231, 186, 249, 36, 204, 154, 201, 250, 105, 186, 101, 175, 129, 125, 230, 216, 223, 112, 180, 183, 16, 119, 203, 172, 22, 75, 124, 133, 44, 100, 77, 192, 9, 45, 23, 155, 210, 100, 92, 128, 39, 119, 49, 238, 227, 198, 171, 113, 16, 234, 9, 54, 109, 36, 46, 9, 168, 23, 55, 101, 24, 96, 41, 111, 191, 102, 3, 182, 25, 76, 83, 159, 129, 72, 48, 207, 134, 238, 79, 29, 168, 144, 216, 95, 12, 173, 229, 242, 20, 91, 24, 34, 143, 235, 72, 254, 119, 136, 96, 104, 163, 153, 175, 138, 168, 231, 154, 45, 185, 158, 41, 39, 13, 103, 85, 227, 135, 157, 171, 19, 69, 12, 111, 177, 254, 1, 38, 133, 23, 146, 166, 97, 184, 102, 113, 158, 242, 164, 44, 129, 82, 152, 75, 223, 213, 254, 150, 149, 250, 243, 45, 200, 118, 250, 235, 22, 26, 95, 235, 21, 54, 183, 57, 212, 203, 136, 87, 144, 97, 212, 213, 104, 193, 59, 84, 214, 37, 205, 41, 168, 181, 53, 174, 233, 51, 58, 28, 209, 146, 23, 144, 166, 114, 165, 157, 199, 134, 47, 183, 240, 163, 123, 209, 209, 72, 251, 189, 241, 246, 213, 195, 122, 6, 179, 120, 90, 34, 41, 167, 0, 95, 130, 57, 2, 85, 225, 171, 117, 104, 76, 54, 168, 148, 225, 210, 39, 88, 55, 241, 87, 79, 76, 252, 116, 160, 26, 168, 105, 62, 218, 252, 197, 71, 24, 172, 210, 132, 242, 196, 146, 59, 189, 146, 251, 31, 136, 85, 20, 136, 3, 231, 242, 71, 187, 107, 242, 204, 36, 167, 47, 254, 182, 209, 129, 39, 193, 137, 220, 95, 69, 145, 179, 118, 165, 163, 145, 43, 188, 67, 59, 38, 190, 36, 49, 28, 76, 178, 95, 161, 106, 212, 106, 158, 159, 215, 233, 221, 7, 173, 33, 155, 135, 95, 98, 216, 85, 108, 104, 155, 36, 61, 103, 155, 201, 222, 36, 169, 24, 6, 19, 51, 15, 75, 29, 119, 49, 119, 40, 53, 9, 35, 221, 100, 240, 211, 161, 225, 158, 216, 222, 115, 170, 86, 158, 52, 45, 9, 155, 233, 127, 253, 190, 192, 65, 233, 16, 166, 7, 25, 48, 205, 253, 8, 234, 208, 189, 51, 176, 35, 122, 90, 1, 111, 155, 166, 169, 202, 100, 231, 154, 197, 24, 151, 60, 219, 39, 115, 241, 79, 194, 25, 107, 129, 11, 240, 197, 35, 19, 169, 16, 29, 7, 55, 79, 144, 200, 247, 135, 237, 104, 51, 55, 193, 186, 255, 112, 220, 135, 203, 11, 8, 173, 179, 70, 137, 72, 106, 218, 68, 152, 81, 30, 111, 163, 18, 227, 140, 74, 91, 174, 177, 151, 140, 1, 164, 93, 140, 171, 210, 216, 20, 157, 100, 104, 173, 34, 98, 76, 189, 199, 37, 42, 214, 26, 92, 103, 49, 251, 151, 132, 92, 19, 225, 156, 38, 173, 242, 26, 230, 195, 112, 241, 221, 197, 151, 124, 203, 109, 200, 216, 189, 25, 195, 169, 50, 184, 211, 162, 48, 66, 196, 61, 141, 206, 195, 123, 255, 204, 250, 234, 122, 254, 178, 183, 2, 210, 170, 222, 114, 251, 64, 216, 163, 82, 138, 225, 141, 198, 35, 230, 145, 218, 203, 134, 251, 255, 230, 66, 10, 225, 18, 36, 196, 244, 110, 24, 41, 103, 96, 30, 44, 17, 133, 41, 203, 201, 149, 117, 104, 83, 226, 13, 101, 205, 111, 197, 93, 186, 122, 250, 115, 57, 171, 222, 168, 7, 170, 234, 212, 114, 72, 107, 237, 221, 124, 234, 182, 93, 137, 67, 211, 212, 47, 27, 135, 100, 147, 130, 2, 244, 37, 218, 141, 203, 102, 125, 230, 179, 222, 8, 85, 96, 211, 64, 243, 54, 70, 242, 8, 30, 121, 99, 233, 229, 109, 116, 186, 184, 80, 210, 63, 219, 247, 243, 65, 221, 247, 242, 12, 25, 66, 166, 204, 25, 91, 45, 219, 122, 3, 193, 247, 144, 77, 150, 118, 60, 132, 155, 103, 149, 53, 218, 147, 105, 249, 132, 148, 5, 244, 43, 49, 168, 63, 50, 206, 144, 39, 123, 219, 178, 148, 229, 233, 40, 137, 32, 33, 188, 24, 74, 70, 100, 96, 248, 175, 211, 5, 95, 143, 2, 190, 178, 253, 6, 35, 198, 57, 210, 33, 113, 197, 189, 200, 97, 136, 66, 77, 62, 64, 116, 146, 128, 248, 237, 225, 177, 157, 84, 56, 134, 135, 159, 51, 161, 171, 179, 48, 230, 78, 204, 235, 118, 63, 83, 167, 244, 35, 21, 34, 217, 91, 40, 46, 43, 45, 181, 71, 181, 136, 29, 91, 175, 179, 2, 44, 45, 235, 65, 143, 1, 247, 168, 231, 52, 32, 195, 39, 60, 174, 1, 4, 27, 20, 110, 109, 12, 192, 185, 231, 110, 177, 168, 204, 162, 32, 20, 22, 71, 214, 38, 109, 150, 213, 172, 74, 105, 99, 223, 36, 164, 241, 189, 151, 254, 29, 181, 218, 248, 175, 219, 22, 175, 132, 229, 202, 195, 4, 191, 30, 212, 163, 171, 171, 228, 109, 76, 199, 108, 200, 163, 174, 148, 135, 78, 110, 190, 162, 37, 53, 178, 118, 72, 196, 166, 7, 24, 218, 202, 218, 37, 36, 40, 123, 14, 69, 68, 103, 90, 210, 158, 186, 68, 27, 194, 102, 62, 207, 32, 170, 214, 153, 72, 29, 33, 85, 223, 185, 76, 253, 198, 85, 252, 179, 20, 35, 44, 9, 102, 20, 227, 60, 51, 14, 137, 32, 101, 125, 135, 17, 44, 248, 123, 197, 170, 252, 43, 143, 63, 199, 167, 150, 243, 60, 188, 229, 113, 244, 168, 90, 61, 61, 126, 165, 245, 25, 18, 150, 227, 241, 134, 144, 193, 112, 245, 133, 110, 65, 246, 103, 136, 90, 142, 13, 51, 101, 210, 174, 202, 36, 59, 43, 241, 195, 143, 238, 235, 31, 152, 137, 149, 241, 179, 142, 77, 193, 73, 127, 73, 116, 167, 163, 195, 152, 235, 174, 63, 91, 242, 130, 51, 125, 115, 196, 40, 56, 53, 202, 127, 99, 143, 134, 49, 161, 61, 83, 250, 53, 180, 93, 51, 123, 36, 12, 61, 249, 55, 144, 18, 61], - [83, 22, 187, 33, 80, 53, 222, 12, 146, 126, 158, 48, 141, 129, 48, 65, 175, 25, 77, 105, 225, 70, 63, 149, 199, 68, 248, 11, 206, 200, 52, 95, 103, 139, 137, 116, 226, 125, 180, 72, 136, 69, 199, 183, 46, 190, 14, 133, 50, 128, 102, 71, 212, 55, 190, 246, 47, 147, 222, 50, 126, 53, 197, 208, 233, 192, 217, 200, 193, 117, 174, 181, 115, 16, 210, 150, 55, 241, 174, 234, 80, 179, 178, 177, 29, 51, 13, 167, 253, 4, 123, 19, 157, 128, 81, 49, 52, 47, 7, 76, 249, 180, 245, 198, 91, 43, 222, 161, 80, 55, 94, 255, 109, 252, 52, 199, 165, 133, 158, 47, 232, 48, 86, 175, 92, 61, 210, 104, 199, 185, 104, 216, 68, 64, 225, 164, 188, 225, 143, 219, 156, 143, 255, 251, 197, 99, 16, 15, 169, 26, 48, 163, 139, 48, 45, 67, 47, 23, 104, 59, 209, 52, 159, 241, 51, 145, 29, 28, 52, 193, 116, 25, 188, 137, 96, 126, 97, 205, 97, 200, 15, 168, 37, 187, 142, 3, 191, 227, 107, 246, 204, 241, 75, 81, 86, 211, 231, 10, 56, 178, 215, 235, 40, 17, 89, 173, 221, 68, 42, 105, 167, 126, 196, 184, 216, 95, 237, 116, 35, 225, 6, 21, 3, 125, 236, 149, 49, 52, 74, 239, 96, 59, 195, 227, 9, 182, 215, 245, 1, 147, 59, 89, 173, 236, 163, 105, 8, 146, 57, 60, 249, 159, 93, 28, 243, 108, 174, 199, 193, 62, 43, 222, 35, 228, 115, 144, 108, 91, 193, 67, 162, 39, 226, 145, 220, 36, 151, 146, 215, 237, 176, 16, 36, 149, 71, 151, 114, 73, 25, 246, 17, 196, 108, 61, 196, 13, 108, 45, 106, 73, 128, 114, 25, 115, 37, 99, 33, 205, 177, 71, 93, 140, 183, 151, 125, 202, 11, 51, 52, 98, 218, 85, 46, 4, 229, 142, 51, 206, 39, 107, 220, 72, 205, 114, 191, 37, 73, 62, 22, 2, 24, 142, 192, 128, 214, 25, 0, 149, 148, 140, 183, 130, 153, 60, 45, 168, 160, 52, 161, 255, 17, 181, 222, 123, 87, 103, 115, 254, 97, 106, 14, 3, 78, 144, 180, 178, 153, 142, 47, 211, 172, 4, 62, 147, 244, 179, 226, 51, 172, 95, 67, 189, 180, 54, 1, 237, 98, 52, 73, 53, 126, 83, 156, 138, 204, 144, 94, 185, 203, 29, 216, 53, 192, 103, 81, 147, 160, 237, 65, 216, 126, 71, 118, 89, 131, 50, 167, 169, 24, 80, 105, 7, 143, 171, 116, 146, 46, 228, 195, 251, 148, 199, 186, 218, 60, 218, 171, 242, 237, 86, 101, 99, 24, 142, 208, 137, 192, 190, 84, 198, 243, 10, 29, 174, 191, 178, 50, 155, 12, 207, 46, 22, 79, 129, 106, 106, 69, 131, 242, 159, 252, 230, 38, 116, 113, 113, 82, 182, 140, 79, 213, 117, 144, 68, 253, 149, 69, 219, 181, 41, 153, 125, 51, 128, 174, 58, 213, 214, 87, 229, 107, 128, 35, 15, 151, 141, 198, 247, 245, 250, 171, 237, 98, 35, 214, 191, 7, 77, 70, 154, 218, 77, 17, 99, 111, 51, 215, 12, 240, 117, 100, 187, 222, 22, 119, 244, 211, 19, 179, 45, 115, 194, 132, 200, 68, 43, 93, 250, 103, 144, 49, 189, 140, 148, 213, 33, 189, 222, 128, 116, 17, 181, 209, 168, 170, 94, 63, 118, 170, 105, 244, 190, 61, 182, 55, 209, 14, 122, 74, 176, 238, 113, 65, 57, 198, 66, 242, 206, 41, 61, 199, 194, 40, 233, 204, 37, 156, 124, 184, 127, 219, 154, 49, 89, 207, 160, 69, 81, 78, 220, 113, 226, 58, 3, 85, 66, 122, 100, 201, 197, 143, 18, 32, 194, 43, 61, 139, 238, 37, 235, 179, 197, 23, 85, 52, 161, 223, 47, 170, 147, 154, 138, 251, 48, 63, 17, 18, 230, 156, 48, 197, 69, 85, 27, 105, 60, 234, 23, 76, 176, 95, 227, 79, 170, 112, 236, 132, 194, 184, 106, 229, 97, 139, 197, 234, 210, 218, 44, 22, 71, 131, 76, 135, 25, 68, 162, 33, 91, 35, 77, 236, 201, 93, 210, 146, 236, 17, 201, 160, 44, 123, 163, 197, 211, 52, 191, 149, 73, 37, 158, 69, 155, 228, 211, 70, 82, 155, 31, 104, 44, 105, 91, 114, 20, 28, 231, 147, 26, 179, 13, 138, 221, 130, 6, 112, 38, 152, 81, 188, 24, 86, 207, 145, 229, 36, 12, 241, 100, 53, 85, 43, 137, 12, 216, 233, 98, 56, 79, 225, 62, 191, 217, 253, 66, 31, 17, 156, 87, 123, 184, 252, 176, 245, 7, 246, 133, 150, 183, 198, 86, 42, 182, 85, 31, 145, 227, 49, 13, 102, 200, 121, 136, 211, 197, 255, 62, 159, 199, 222, 198, 203, 162, 93, 255, 205, 126, 101, 252, 172, 43, 49, 195, 155, 174, 212, 220, 148, 174, 220, 164, 64, 70, 249, 12, 197, 0, 38, 124, 254, 9, 72, 223, 161, 108, 73, 3, 51, 94, 46, 117, 171, 146, 152, 22, 23, 78, 218, 17, 167, 155, 88, 141, 74, 10, 227, 174, 63, 159, 149, 212, 122, 245, 99, 140, 49, 165, 79, 233, 43, 163, 196, 186, 126, 8, 165, 87, 55, 206, 55, 152, 154, 145, 162, 31, 255, 99, 142, 152, 200, 192, 78, 160, 179, 142, 108, 170, 45, 158, 231, 190, 64, 231, 80, 137, 224, 24, 117, 14, 68, 18, 204, 218, 115, 10, 248, 128, 86, 208, 20, 33, 113, 71, 33, 248, 144, 79, 12, 86, 28, 138, 129, 97, 30, 226, 52, 77, 66, 60, 221, 166, 171, 22, 37, 77, 132, 223, 52, 226, 155, 105, 47, 235, 87, 56, 226, 254, 149, 160, 93, 20, 43, 148, 81, 184, 99, 104, 154, 2, 222, 112, 9, 109, 237, 3, 91, 160, 169, 211, 5, 251, 186, 122, 154, 143, 5, 16, 132, 54, 169, 104, 136, 228, 120, 118, 201, 69, 161, 92, 41, 157, 234, 20, 34, 47, 62, 137, 132, 127, 99, 253, 99, 252, 67, 229, 214, 150, 99, 82, 5, 75, 216, 50, 179, 69, 85, 28, 251, 38, 12, 63, 168, 220, 67, 24, 154, 178, 48, 6, 38, 58, 95, 37, 110, 34, 52, 125, 237, 9, 10, 231, 199, 107, 234, 102, 3, 193, 228, 110, 2, 204, 180, 248, 129, 68, 119, 29, 5, 207, 23, 218, 67, 191, 18, 226, 213, 207, 246, 66, 104, 4, 108, 58, 211, 22, 80, 231, 144, 197, 84, 205, 59, 107, 63, 102, 41, 138, 146, 87, 40, 192, 72, 43, 189, 180, 123, 244, 183, 65, 216, 10, 89, 22, 147, 220, 136, 12, 116, 158, 160, 87, 238, 215, 72, 127, 231, 24, 50, 9, 197, 45, 152, 172, 189, 156, 108, 52, 203, 141, 243, 14, 148, 51, 189, 192, 128, 5, 53, 61, 162, 235, 41, 231, 122, 119, 41, 144, 12, 111, 238, 159, 138, 140, 6, 150, 80, 189, 25, 16, 72, 178, 184, 105, 41, 174, 131, 195, 243, 235, 62, 188, 92, 64, 4, 177, 211, 158, 164, 176, 14, 71, 167, 158, 197, 49, 115, 255, 103, 109, 103, 187, 6, 208, 60, 217, 158, 54, 75, 101, 109, 174, 218, 190, 213, 243, 216, 58, 200, 165, 236, 212, 215, 235, 242, 113, 45, 65, 15, 248, 171, 245, 237, 76, 217, 78, 9, 194, 195, 187, 196, 145, 247, 133, 193, 125, 97, 189, 45, 20, 61, 224, 70, 95, 41, 119, 100, 84, 42, 180, 121, 82, 155, 44, 213, 59, 70, 139, 77, 89, 171, 143, 170, 112, 12, 19, 210, 125, 123, 239, 201, 133, 173, 249, 138, 219, 131, 243, 116, 2, 48, 136, 44, 175, 150, 95, 210, 45, 147, 44, 139, 190, 215, 248, 11, 14, 96, 248, 51, 0, 189, 161, 66, 223, 149, 35, 104, 90, 44, 249, 80, 169, 155, 73, 14, 189, 87, 48, 132, 60, 181, 64, 249, 152, 149, 73, 83, 101, 61, 227, 108, 221, 134, 92, 91, 249, 72, 205, 147, 201, 178, 143, 166, 253, 112, 33, 89, 65, 64, 162, 28, 119, 125, 12, 159, 93, 112, 241, 194, 238, 122, 89, 57, 248, 3, 128, 247, 134, 112, 245, 133, 68, 4, 12, 43, 83, 155, 139, 220, 17, 153, 50, 117, 117, 120, 102, 49, 146, 173, 246, 95, 134, 123, 69, 169, 152, 24, 14, 40, 62, 22, 20, 47, 55, 121, 188, 53, 207, 64, 135, 49, 112, 59, 221, 164, 28, 139, 6, 8, 171, 203, 204, 213, 136, 224, 164, 193, 77, 74, 156, 150, 42, 112, 134, 125, 165, 27, 183, 137, 38, 43, 242, 243, 222, 86, 88, 75, 167, 0, 230, 33, 8, 165, 216, 155, 40, 176, 77, 177, 88, 167, 176, 90, 20, 194, 200, 1, 69, 43, 124, 161, 170, 70, 51, 97, 161, 34, 74, 40, 98, 69, 201, 3, 79, 75, 102, 159, 63, 116, 20, 113, 55, 242, 199, 129, 105, 11, 126, 160, 48, 14, 110, 79, 184, 253, 72, 55, 193, 79, 147, 68, 0, 2, 84, 148, 222, 229, 51, 176, 194, 153, 202, 21, 133, 99, 115, 229, 251, 156, 82, 223, 199, 17, 202, 30, 79, 119, 134, 176, 101, 138, 1, 112, 191, 159, 232, 7, 124, 85, 174, 216, 182, 35, 163, 210, 52, 99, 236, 2, 59, 191, 164, 152, 170, 204, 200, 134, 92, 151, 109, 27, 246, 165, 106, 18, 194, 111, 221, 138, 136, 168, 251, 13, 43, 189, 211, 30, 65, 106, 160, 189, 104, 8, 237, 133, 202, 75, 120, 101, 186, 146, 68, 33, 81, 125, 44, 60, 169, 187, 24, 246, 74, 200, 22, 186, 172, 232, 248, 98, 170, 32, 168, 3, 235, 84, 11, 179, 42, 64, 111, 6, 29, 39, 67, 185, 252, 124, 73, 199, 191, 80, 87, 187, 22, 9, 198, 199, 75, 75, 189, 151, 148, 230, 98, 76, 116, 31, 116, 100, 29, 185, 47, 110, 73, 93, 247, 108, 127, 167, 154, 238, 92, 27, 132, 250, 218, 27, 157, 128, 58, 216, 3, 39, 164, 50, 164, 106, 164, 142, 174, 110, 219, 87, 80, 27, 233, 135, 115, 12, 4, 251, 87, 215, 14, 63, 32, 175, 218, 184, 44, 128, 186, 35, 155, 90, 216, 98, 231, 203, 0, 197, 31, 22, 93, 116, 141, 115, 116, 30, 37, 13, 19, 23, 99, 244, 191, 197, 250, 93, 3, 81, 64, 74, 177, 238, 81, 135, 48, 44, 66, 107, 172, 139, 227, 219, 174, 139, 12, 138, 229, 133, 31, 187, 137, 38, 229, 51, 206, 202, 212, 164, 64, 169, 248, 2, 215, 151, 255, 58, 214, 33, 11, 254, 64, 218, 172, 70, 85, 135, 193, 199, 49, 136, 153, 153, 180, 138, 215, 165, 244, 8, 195, 254, 210, 15, 208, 173, 45, 201, 8, 211, 66, 142, 26, 231, 213, 9, 88, 37, 228, 64, 64, 115, 116, 92, 67, 163, 187, 157, 62, 127, 252, 2, 143, 142, 82, 201, 119, 174, 24, 44, 194, 78, 173, 196, 226, 13, 123, 27, 19, 168, 52, 42, 157, 138, 10, 110, 189, 10, 223, 170, 193, 4, 84, 233, 19, 94, 252, 135, 83, 213, 206, 119, 212, 77, 90, 173, 246, 2, 73, 208, 165, 254, 249, 184, 246, 181, 24, 225, 120, 62, 151, 221, 84, 22, 145, 69, 61, 221, 131, 21, 210, 93, 47, 83, 167, 129, 29, 64, 148, 227, 39, 207, 197, 222, 173, 246, 21, 117, 211, 93, 31, 124, 47, 102, 174, 24, 157, 29, 196, 58, 70, 80, 130, 223, 48, 134, 254, 191, 207, 228, 222, 32, 107, 43, 138, 115, 49, 191, 64, 229, 53, 133, 177, 87, 109, 25, 92, 150, 83, 15, 137, 89, 47, 115, 83, 133, 202, 158, 127, 171, 152, 218, 28, 32, 118, 120, 95, 5, 166, 57, 70, 82, 20, 156, 17, 223, 188, 74, 132, 219, 147, 253, 118, 48, 65, 110, 234, 14, 166, 129, 46, 185, 33, 182, 201, 49, 238, 214, 137, 42, 47, 82, 243, 0, 44, 234, 132, 15, 217, 190, 57, 84, 253, 192, 241, 229, 101, 32, 240, 223, 81, 81, 8, 8, 64, 97, 148, 37, 95, 67, 188, 72, 176, 154, 138, 122, 156, 198, 20, 47, 16, 65, 179, 177, 61, 229, 30, 148, 86, 52, 149, 146, 57, 182, 71, 154, 182, 140, 17, 135, 26, 208, 112, 51, 70, 159, 78, 25, 112, 110, 87, 24, 1, 238, 219, 141, 222, 240, 63, 44, 187, 122, 148, 126, 52, 180, 177, 29, 206, 197, 32, 148, 237, 100, 252, 36, 29, 96, 136, 8, 254, 48, 233, 78, 222, 58, 27, 32, 69, 226, 62, 161, 224, 141, 215, 208, 251, 203, 113, 134, 216, 80, 82, 135, 71, 78, 165, 196, 251, 165, 204, 127, 242, 151, 210, 214, 38, 213, 101, 204, 116, 194, 101, 184, 27, 170, 154, 29, 34, 215, 105, 218, 18, 198, 50, 182, 192, 249, 91, 71, 182, 184, 33, 152, 13, 23, 222, 41, 55, 90, 32, 202, 79, 70, 202, 204, 246, 172, 111, 59, 35, 155, 18, 231, 85, 252, 81, 111, 245, 26, 48, 46, 165, 254, 173, 155, 6, 215, 126, 159, 144, 166, 130, 155, 134, 95, 213, 41, 29, 251, 190, 191, 112, 196, 76, 46, 230, 158, 148, 136, 214, 228, 65, 191, 22, 196, 226, 246, 157, 47, 237, 113, 241, 19, 45, 0, 178, 128, 180, 72, 122, 77, 123, 93, 109, 151, 114, 214, 22, 45, 106, 82, 234, 171, 18, 233, 121, 176, 244, 137, 184, 89, 151, 227, 92, 179, 45, 12, 171, 225, 8, 171, 121, 72, 31, 238, 128, 254, 217, 45, 173, 18, 155, 1, 86, 219, 154, 234, 148, 248, 33, 93, 43, 222, 207, 227, 106, 177, 241, 225, 144, 72, 109, 97, 4, 166, 4, 187, 186, 72, 152, 173, 133, 88, 26, 243, 37, 251, 212, 91, 199, 151, 232, 98, 66, 0, 102, 43, 29, 166, 34, 223, 233, 114, 231, 193, 162, 173, 88, 149, 40, 122, 192, 32, 245, 209, 184, 64, 240, 20, 2, 163, 118, 253, 52, 42, 148, 103, 133, 95, 125, 5, 70, 230, 222, 105, 243, 162, 71, 210, 233, 109, 166, 111, 194, 221, 4, 180, 235, 92, 162, 6, 85, 33, 254, 142, 97, 133, 173, 222, 213, 254, 136, 229, 85, 35, 111, 64, 74, 247, 33, 175, 46, 143, 238, 211, 106, 174, 130, 161, 152, 110, 212, 230, 31, 230, 68, 35, 128, 215, 46, 119, 59, 223, 220, 43, 160, 71, 201, 236, 100, 19, 115, 162, 214, 20, 123, 217, 188, 89, 138, 98, 60, 225, 110, 168, 228, 149, 42, 34, 205, 73, 107, 121, 144, 115, 93, 161, 72, 59, 48, 169, 149, 210, 33, 166, 22, 98, 103, 235, 192, 221, 192, 133, 189, 128, 169, 212, 54, 186, 129, 50, 92, 65, 38, 58, 147, 228, 65, 111, 107, 82, 2, 64, 143, 212, 213, 113, 138, 136, 43, 237, 7, 87, 28, 14, 11, 140, 26, 114, 100, 86, 177, 225, 214, 154, 220, 119, 111, 129, 237, 159, 211, 73, 37, 76, 101, 192, 130, 203, 174, 141, 139, 148, 121, 136, 45, 242, 202, 122, 237, 188, 97, 120, 80, 219, 226, 1, 85, 113, 214, 56, 27, 151, 240, 11, 18, 121, 10, 170, 154, 99, 62, 195, 198, 41, 111, 107, 126, 56, 245, 90, 163, 19, 31, 110, 68, 250, 214, 44, 104, 136, 248, 243, 241, 70, 203, 41, 48, 194, 36, 197, 194, 156, 133, 141, 113, 201, 174, 238, 144, 92, 120, 154, 162, 160, 13, 60, 62, 46, 97, 171, 171, 27, 1, 13, 194, 208, 119, 235, 202, 89, 95, 199, 175, 229, 177, 65, 123, 55, 139, 175, 183, 239, 187, 156, 141, 56, 76, 50, 194, 137, 63, 77, 37, 60, 110, 76, 28, 27, 160, 249, 178, 235, 146, 239, 170, 213, 92, 180, 83, 15, 7, 165, 36, 1, 132, 56, 91, 251, 8, 0, 198, 215, 100, 45, 165, 11, 185, 242, 30, 57, 135, 51, 222, 25, 21, 7, 135, 240, 62, 167, 106, 120, 231, 46, 104, 229, 154, 133, 3, 104, 136, 51, 52, 86, 14, 87, 31, 33, 4, 187, 88, 31, 163, 138, 175, 250, 55, 119, 65, 109, 216, 191, 229, 187, 221, 230, 240, 83, 161, 120, 236, 240, 118, 43, 17, 217, 80, 123, 137, 95, 51, 62, 146, 76, 106, 44, 132, 9, 184, 21, 52, 105, 221, 129, 159, 246, 100, 53, 218, 169, 76, 214, 254, 1, 43, 9, 238, 207, 11, 178, 26, 77, 225, 213, 47, 154, 121, 168, 200, 41, 28, 69, 138, 170, 216, 128, 16, 37, 199, 239, 50, 182, 26, 139, 94, 20, 54, 70, 51, 47, 177, 51, 177, 183, 63, 3, 185, 136, 66, 78, 102, 105, 46, 198, 174, 25, 73, 136, 25, 223, 191, 13, 107, 46, 252, 185, 176, 196, 59, 51, 113, 64, 53, 241, 57, 217, 121, 158, 59, 218, 232, 14, 126, 217, 12, 29, 236, 81, 44, 230, 98, 102, 112, 142, 212, 75, 191, 26, 117, 206, 44, 115, 19, 255, 12, 240, 46, 66, 74, 6, 161, 35, 177, 35, 183, 102, 39, 20, 245, 241, 28, 165, 213, 42, 210, 203, 93, 0, 97, 38, 63, 95, 142, 12, 221, 5, 146, 159, 171, 148, 232, 157, 123, 49, 105, 4, 200, 239, 136, 61, 157, 246, 148, 195, 29, 85, 2, 233, 184, 253, 122, 214, 50, 148, 66, 250, 119, 189, 43, 236, 125, 210, 224, 173, 89, 247, 119, 173, 63, 244, 10, 241, 6, 254, 144, 38, 77, 58, 80, 133, 149, 126, 44, 83, 49, 7, 23, 200, 243, 52, 49, 65, 185, 112, 71, 200, 92, 174, 101, 168, 195, 90, 152, 144, 31, 83, 195, 176, 198, 43, 11, 191, 125, 208, 240, 180, 49, 218, 12, 30, 198, 48, 166, 118, 247, 61, 159, 101, 51, 68, 37, 32, 194, 93, 9, 218, 238, 251, 184, 16, 215, 49, 182, 205, 52, 31, 214, 186, 68, 216, 60, 156, 175, 194, 99, 129, 93, 191, 180, 193, 87, 12, 181, 255, 185, 133, 116, 101, 244, 202, 213, 53, 243, 86, 220, 242, 165, 207, 5, 242, 204, 30, 72, 242, 124, 40, 118, 45, 73, 99, 255, 61, 133, 165, 101, 162, 236, 199, 202, 159, 231, 115, 74, 209, 92, 213, 132, 52, 159, 190, 238, 170, 251, 210, 168, 17, 130, 128, 121, 122, 11, 165, 227, 168, 249, 135, 80, 162, 43, 176, 143, 217, 233, 193, 210, 174, 35, 136, 93, 29, 93, 47, 117, 71, 37, 236, 178, 11, 0, 108, 16, 159, 101, 133, 130, 69, 119, 116, 110, 186, 54, 164, 216, 106, 22, 105, 235, 246, 43, 19, 37, 49, 118, 195, 169, 42, 216, 129, 210, 165, 218, 112, 135, 76, 110, 211, 17, 222, 215, 23, 97, 141, 10, 36, 208, 171, 162, 176, 235, 110, 120, 128, 160, 130, 84, 157, 88, 93, 137, 133, 171, 232, 26, 1, 118, 138, 184, 161, 121, 71, 235, 12, 244, 72, 195, 76, 175, 138, 39, 65, 239, 174, 78, 209, 15, 121, 103, 2, 216, 116, 72, 26, 0, 183, 21, 14, 125, 102, 248, 58, 81, 220, 35, 117, 159, 115, 211, 143, 237, 50, 243, 238, 48, 11, 11, 149, 117, 209, 72, 159, 170, 8, 12, 133, 85, 109, 222, 116, 183, 8, 181, 50, 214, 237, 141, 125, 215, 222, 5, 251, 192, 98, 233, 173, 169, 148, 62, 176, 224, 119, 42, 195, 207, 87, 210, 175, 225, 70, 47, 12, 40, 126, 170, 129, 142, 44, 110, 183, 16, 146, 234, 53, 205, 81, 145, 161, 68, 70, 196, 41, 177, 236, 156, 147, 17, 217, 140, 225, 140, 245, 228, 78, 189, 53, 233, 208, 238, 195, 219, 78, 49, 82, 169, 92, 165, 74, 117, 67, 142, 239, 154, 246, 229, 196, 68, 166, 146, 45, 244, 86, 1, 158, 133, 13, 216, 232, 28, 9, 12, 94, 1, 255, 226, 68, 155, 172, 220, 217, 218, 250, 22, 205, 26, 42, 186, 101, 56, 207, 108, 62, 242, 97, 62, 168, 47, 211, 220, 0, 157, 177, 81, 0, 69, 104, 53, 43, 155, 170, 153, 229, 5, 198, 154, 227, 0, 235, 141, 252, 141, 136, 187, 197, 28, 44, 177, 88, 231, 55, 210, 177, 68, 206, 90, 91, 168, 8, 157, 236, 236, 19, 117, 191, 18, 11, 0, 45, 166, 35, 232, 3, 122, 221, 224, 238, 191, 209, 14, 19, 209, 67, 214, 88, 199, 180, 25, 194, 252, 230, 107, 189, 231, 201, 217, 133, 13, 253, 41, 137, 242, 228, 54, 247, 108, 145, 220, 100, 202, 96, 224, 113, 119, 249, 218, 218, 55, 110, 12, 42, 60, 110, 111, 55, 201, 36, 63, 74, 98, 236, 5, 196, 206, 34, 221, 245, 36, 62, 116, 105, 235, 192, 175, 12, 209, 231, 243, 145, 133, 155, 27, 121, 94, 31, 63, 213, 222, 206, 21, 201, 151, 84, 20, 254, 103, 38, 184, 225, 189, 127, 25, 53, 56, 251, 48, 40, 228, 44, 92, 233, 158, 96, 187, 54, 154, 100, 120, 223, 253, 217, 241, 43, 57, 161, 120, 253, 220, 35, 224, 86, 194, 132, 224, 187, 209, 251, 221, 174, 233, 215, 181, 240, 71, 115, 178, 49, 227, 168, 20, 1, 251, 3, 171, 32, 201, 221, 125, 126, 76, 136, 104, 238, 157, 1, 35, 44, 0, 201, 8, 218, 104, 75, 166, 30, 237, 218, 166, 168, 123, 218, 130, 2, 54, 65, 43, 242, 31, 213, 164, 70, 9, 10, 170, 26, 155, 58, 114, 113, 228, 197, 175, 188, 119, 75, 4, 38, 253, 147, 62, 194, 169, 88, 140, 247, 150, 99, 162, 227, 57, 48, 221, 37, 96, 12, 197, 170, 54, 183, 6, 154, 243, 210, 99, 139, 196, 32, 249, 81, 108, 200, 54, 140, 193, 72, 166, 184, 180, 24, 89, 131, 89, 70, 155, 130, 196, 19, 38, 107, 101, 192, 36, 85, 228, 10, 191, 43, 194, 58, 186, 136, 230, 159, 161, 30, 7, 158, 42, 236, 12, 121, 81, 234, 47, 223, 97, 206, 201, 139, 180, 1, 253, 86, 165, 20, 100, 208, 214, 179, 45, 100, 42, 27, 249, 186, 140, 137, 186, 221, 31, 167, 168, 137, 171, 162, 62, 155, 170, 176, 65, 56, 37, 173, 21, 244, 206, 30, 9, 56, 171, 81, 50, 166, 223, 122, 180, 32, 121, 221, 8, 78, 43, 156, 24, 50, 228, 179, 137, 139, 213, 171, 119, 51, 89, 96, 212, 136, 139, 113, 90, 121, 233, 162, 46, 145, 9, 182, 64, 89, 204, 75, 250, 243, 170, 187, 10, 207, 41, 172, 176, 183, 160, 152, 99, 74, 21, 152, 41, 206, 127, 95, 254, 3, 203, 135, 179, 180, 84, 41, 116, 54, 181, 40, 158, 11, 243, 17, 162, 146, 119, 142, 33, 211, 26, 8, 231, 71, 140, 177, 140, 81, 142, 144, 3, 101, 25, 239, 208, 30, 29, 44, 210, 123, 251, 114, 153, 37, 96, 247, 143, 215, 79, 187, 46, 152, 252, 70, 8, 74, 249, 68, 81, 45, 2, 25, 74, 33, 155, 84, 12, 77, 188, 68, 49, 79, 212, 125, 62, 224, 84, 51, 191, 44, 55, 105, 244, 151, 73, 11, 67, 151, 59, 34, 219, 73, 112, 187, 161, 137, 136, 255, 77, 250, 23, 147, 91, 216, 169, 74, 89, 203, 158, 123, 181, 231, 247, 160, 80, 77, 128, 153, 189, 61, 137, 73, 129, 72, 211, 76, 54, 166, 2, 219, 32, 104, 134, 131, 155, 53, 180, 169, 164, 202, 55, 57, 35, 65, 94, 154, 248, 220, 242, 32, 143, 120, 187, 215, 9, 124, 13, 117, 104, 60, 251, 213, 153, 158, 247, 30, 166, 238, 30, 71, 36, 54, 236, 244, 248, 59, 18, 224, 251, 36, 17, 227, 128, 46, 173, 196, 134, 222, 89, 187, 229, 123, 196, 253, 211, 20, 160, 121, 57, 16, 214, 112, 70, 174, 220, 214, 5, 78, 101, 100, 237, 177, 146, 182, 188, 153, 56, 242, 214, 46, 141, 52, 243, 90, 210, 178, 78, 221, 39, 241, 210, 220, 8, 164, 17, 112, 59, 36, 157, 192, 182, 131, 214, 235, 45, 32, 251, 8, 126, 163, 236, 106, 98, 14, 138, 4, 177, 242, 201, 146, 41, 229, 30, 81, 109, 16, 152, 216, 110, 197, 161, 28, 45, 191, 230, 80, 231, 110, 192, 172, 0, 252, 181, 43, 86, 93, 7, 29, 105, 211, 201, 23, 220, 127, 159, 89, 31, 132, 157, 87, 40, 190, 135, 130, 39, 26, 51, 104, 179, 112, 61, 125, 60, 232, 90, 13, 103, 65, 11, 170, 153, 97, 6, 182, 106, 60, 208, 187, 49, 177, 80, 209, 122, 52, 133, 237, 68, 157, 37, 45, 64, 253, 91, 217, 183, 221, 220, 224, 237, 26, 42, 19, 186, 85, 182, 95, 222, 50, 80, 116, 213, 102, 51, 209, 236, 50, 167, 46, 81, 128, 14, 235, 154, 105, 171, 119, 56, 253, 246, 187, 9, 61, 70, 251, 14, 221, 14, 31, 134, 125, 203, 19, 145, 246, 244, 240, 66, 211, 125, 182, 75, 143, 15, 110, 62, 203, 185, 40, 69, 20, 70, 153, 67, 144, 11, 151, 48, 14, 128, 155, 135, 167, 8, 155, 41, 206, 204, 60, 131, 207, 238, 98, 163, 117, 8, 91, 14, 189, 161, 97, 92, 0, 232, 27, 63, 230, 206, 246, 244, 249, 6, 176, 187, 211, 176, 18, 25, 103, 232, 161, 20, 184, 99, 133, 119, 38, 239, 255, 244, 95, 205, 70, 49, 146, 57, 50, 97, 1, 231, 159, 204, 165, 95, 181, 40, 189, 236, 223, 162, 48, 104, 115, 96, 85, 26, 113, 177, 206, 63, 244, 79, 125, 136, 51, 118, 130, 34, 118, 242, 17, 58, 250, 16, 144, 69, 43, 228, 205, 142, 144, 166, 142, 201, 112, 178, 45, 154, 92, 189, 76, 40, 46, 180, 243, 250, 9, 176, 78, 4, 103, 94, 199, 24, 122, 239, 211, 2, 243, 29, 8, 160, 11, 135, 197, 223, 122, 180, 252, 124, 125, 152, 190, 12, 93, 196, 16, 227, 138, 69, 61, 83, 112, 11, 130, 150, 202, 45, 251, 97, 107, 185, 104, 38, 173, 75, 223, 125, 44, 43, 88, 74, 12, 174, 67, 199, 112, 6, 245, 113, 43, 213, 120, 66, 51, 31, 255, 14, 226, 186, 101, 215, 35, 0, 42, 248, 111, 198, 199, 6, 118, 73, 131, 39, 78, 154, 196, 29, 93, 106, 166, 113, 100, 68, 37, 57, 125, 205, 26, 238, 103, 229, 196, 196, 236, 64, 110, 178, 159, 209, 178, 154, 189, 8, 73, 155, 63, 255, 106, 108, 70, 229, 212, 42, 171, 50, 4, 225, 43, 101, 58, 15, 164, 115, 50, 18, 102, 170, 220, 11, 83, 128, 92, 70, 218, 51, 138, 167, 46, 21, 28, 19, 122, 230, 173, 153, 23, 245, 223, 197, 28, 101, 123, 213, 37, 79, 17, 84, 75, 29, 35, 187, 106, 114, 28, 16, 239, 105, 51, 10, 158, 183, 115, 195, 128, 209, 244, 200, 81, 241, 239, 119, 159, 177, 241, 57, 75, 195, 148, 102, 174, 181, 183, 177, 230, 141, 84, 37, 49, 181, 37, 118, 164, 144, 252, 237, 170, 38, 187, 42, 16, 42, 124, 123, 154, 115, 181, 243, 144, 57, 114, 229, 66, 181, 77, 159, 35, 20, 104, 103, 115, 222, 82, 130, 170, 115, 49, 10, 115, 119, 237, 9, 112, 255, 241, 145, 65, 136, 151, 102, 71, 233, 178, 173, 110, 217, 242, 21, 118, 135, 78, 106, 166, 233, 31, 155, 98, 180, 108, 116, 195, 126, 18, 115, 29, 142, 75, 126, 244, 27, 220, 87, 183, 29, 28, 55, 54, 170, 114, 107, 212, 72, 210, 74, 231, 201, 114, 185, 172, 58, 172, 253, 64, 188, 62, 27, 197, 61, 191, 190, 119, 203, 117, 27, 70, 154, 48, 40, 236, 241, 214, 195, 135, 159, 177, 177, 51, 171, 48, 214, 122, 104, 112, 100, 120, 135, 58, 173, 137, 222, 35, 19, 28, 92, 63, 101, 132, 92, 93, 172, 111, 113, 235, 152, 80, 235, 114, 93, 225, 20, 217, 25, 163, 184, 99, 155, 36, 11, 209, 232, 135, 70, 26, 224, 97, 238, 96, 45, 41, 187, 204, 157, 1, 49, 136, 127, 156, 4, 139, 62, 129, 187, 55, 201, 67, 86, 134, 54, 166, 65, 147, 135, 28, 15, 161, 10, 55, 155, 12, 121, 1, 79, 197, 242, 253, 97, 209, 239, 217, 10, 144, 35, 153, 37, 240, 200, 87, 105, 120, 212, 20, 147, 88, 186, 78, 20, 3, 119, 102, 102, 15, 74, 152, 116, 156, 55, 173, 186, 213, 125, 72, 73, 255, 81, 147, 90, 126, 108, 201, 190, 157, 185, 167, 19, 177, 126, 118, 170, 215, 200, 53, 95, 188, 118, 109, 49, 227, 151, 171, 195, 93, 41, 197, 63, 232, 197, 115, 44, 252, 54, 2, 160, 143, 60, 238, 61, 240, 205, 227, 156, 251, 60, 65, 88, 11, 147, 194, 250, 72, 202, 13, 237, 127, 240, 76, 203, 4, 6, 105, 44, 100, 57, 80, 133, 96, 44, 198, 210, 175, 26, 153, 168, 173, 217, 121, 185, 111, 170, 74, 236, 160, 48, 173, 21, 76, 150, 11, 45, 145, 144, 185, 233, 201, 18, 6, 185, 207, 141, 66, 14, 111, 69, 97, 133, 239, 66, 241, 0, 233, 24, 175, 215, 14, 167, 70, 152, 156, 216, 174, 61, 244, 143, 213, 245, 50, 180, 226, 14, 65, 44, 178, 70, 211, 236, 16, 215, 64, 41, 187, 112, 143, 84, 153, 1, 214, 241, 20, 224, 87, 88, 46, 213, 130, 20, 71, 61, 235, 205, 117, 113, 155, 233, 133, 209, 127, 10, 235, 219, 238, 206, 14, 77, 29, 193, 59, 63, 14, 27, 43, 210, 135, 237, 17, 37, 165, 180, 121, 34, 18, 100, 32, 215, 211, 233, 250, 90, 63, 99, 23, 9, 192, 207, 11, 115, 106, 37, 143, 29, 60, 139, 47, 90, 25, 24, 100, 201, 242, 141, 245, 116, 252, 1, 214, 89, 42, 167, 104, 207, 215, 32, 56, 70, 182, 163, 25, 12, 163, 47, 241, 107, 187, 73, 60, 116, 196, 57, 188, 201, 169, 95, 190, 220, 44, 149, 190, 20, 123, 117, 227, 234, 83, 44, 88, 147, 122, 97, 93, 187, 153, 168, 1, 143, 157, 162, 8, 97, 218, 76, 7, 138, 34, 8, 35, 91, 181, 30, 247, 150, 57, 13, 23, 128, 96, 246, 150, 186, 162, 194, 252, 129, 1, 5, 106, 100, 247, 138, 53, 67, 84, 133, 177, 217, 242, 239, 203, 1, 211, 183, 194, 24, 220, 193, 22, 191, 108, 181, 226, 92, 102, 34, 183, 69, 11, 247, 106, 252, 38, 156, 40, 139, 16, 212, 25, 80, 192, 166, 19, 75, 192, 145, 190, 142, 207, 243, 103, 59, 30, 25, 223, 180, 6, 158, 172, 216, 112, 5, 210, 215, 98, 35, 61, 181, 154, 67, 117, 65, 250, 246, 26, 201, 167, 155, 96, 165, 147, 101, 244, 124, 117, 181, 57, 233, 246, 20, 72, 167, 132, 249, 200, 234, 190, 237, 35, 72, 207, 242, 163, 192, 160, 184, 125, 253, 39, 121, 68, 135, 47, 229, 29, 239, 52, 126, 158, 231, 209, 185, 93, 227, 44, 226, 129, 129, 226, 198, 100, 54, 227, 17, 176, 84, 191, 129, 96, 86, 129, 242, 78, 129, 239, 48, 234, 198, 38, 64, 170, 19, 96, 60, 18, 50, 180, 138, 3, 126, 22, 145, 253, 207, 176, 171, 113, 218, 1, 232, 10, 54, 131, 226, 172, 124, 213, 117, 22, 233, 161, 134, 157, 189, 157, 31, 75, 255, 237, 252, 82, 220, 121, 213, 185, 119, 247, 212, 131, 102, 93, 243, 156, 49, 164, 162, 197, 124, 61, 156, 189, 57, 11, 196, 93, 73, 93, 24, 148, 21, 151, 190, 241, 150, 35, 121, 5, 151, 209, 116, 164, 210, 115, 61, 178, 28, 111, 22, 241, 39, 6, 145, 223, 17, 124, 121, 162, 230, 114, 160, 186, 111, 14, 90, 106, 132, 109, 157, 241, 254, 12, 153, 0, 185, 82, 137, 115, 79, 111, 50, 93, 117, 197, 204, 190, 53, 35, 229, 154, 219, 85, 53, 130, 179, 40, 202, 115, 161, 228, 223, 48, 221, 230, 51, 134, 231, 96, 137, 61, 123, 232, 224, 245, 245, 195, 45, 3, 222, 58, 96, 115, 62, 18, 235, 75, 242, 45, 157, 203, 239, 147, 186, 1, 17, 57, 150, 244, 150, 177, 149, 86, 127, 105, 174, 214, 217, 175, 33, 24, 231, 18, 237, 217, 196, 231, 169, 194, 10, 177, 93, 82, 238, 226, 225, 148, 81, 241, 159, 201, 161, 54, 1, 115, 200, 199, 170, 65, 89, 46, 128, 93, 206, 33, 86, 24, 193, 122, 73, 41, 187, 235, 217, 173, 6, 64, 183, 232, 57, 228, 173, 149, 44, 73, 181, 82, 22, 114, 227, 101, 1, 206, 129, 209, 21, 157, 7, 94, 41, 54, 245, 246, 36, 240, 25, 80, 179, 224, 190, 232, 29, 217, 205, 123, 203, 11, 111, 5, 78, 218, 204, 89, 60, 74, 47, 84, 166, 18, 66, 132, 202, 45, 83, 135, 134, 49, 85, 119, 188, 252, 126, 147, 190, 18, 87, 82, 12, 50, 255, 118, 29, 160, 75, 163, 230, 210, 190, 226, 58, 184, 201, 43, 3, 86, 133, 25, 202, 18, 60, 29, 36, 153, 3, 194, 3, 52, 35, 11, 102, 179, 2, 52, 126, 163, 83, 95, 72, 102, 68, 1, 170, 112, 86, 142, 41, 116, 135, 211, 73, 37, 51, 230, 59, 140, 131, 99, 83, 17, 64, 110, 39, 47, 233, 78, 167, 48, 177, 148, 169, 170, 72, 162, 209, 116, 220, 58, 226, 40, 171, 38, 11, 93, 93, 77, 238, 204, 127, 212, 95, 13, 190, 83, 142, 2, 238, 3, 91, 229, 218, 123, 220, 81, 134, 142, 200, 170, 16, 140, 253, 168, 28, 84, 64, 45, 101, 36, 196, 48, 142, 210, 31, 49, 124, 143, 65, 163, 182, 238, 177, 81, 16, 62, 37, 120, 69, 120, 241, 95, 239, 146, 227, 220, 142, 177, 140, 155, 107, 130, 196, 109, 192, 18, 65, 220, 70, 58, 129, 227, 182, 34, 1, 121, 221, 170, 38, 137, 90, 7, 20, 20, 124, 171, 204, 67, 208, 207, 162, 139, 196, 78, 198, 34, 244, 218, 172, 24, 92, 144, 205, 56, 98, 35, 241, 0, 145, 147, 34, 217, 243, 44, 231, 243, 200, 131, 227, 134, 61, 251, 130, 17, 50, 153, 155, 52, 61, 147, 150, 208, 243, 151, 212, 198, 32, 7, 110, 203, 197, 139, 165, 58, 43, 197, 202, 248, 79, 146, 120, 255, 254, 216, 185, 54, 96, 67, 199, 106, 35, 50, 54, 0, 17, 123, 191, 233, 139, 179, 204, 164, 54, 2, 129, 13, 155, 30, 209, 15, 56, 17, 85, 227, 132, 138, 110, 187, 189, 210, 202, 239, 79, 126, 128, 92, 51, 181, 126, 2, 100, 64, 108, 169, 111, 78, 57, 165, 179, 7, 177, 224, 227, 173, 10, 81, 213, 173, 104, 100, 105, 9, 105, 33, 74, 39, 26, 44, 198, 18, 241, 110, 98, 230, 146, 241, 2, 55, 189, 0, 44, 238, 250, 114, 45, 250, 246, 54, 101, 217, 93, 191, 33, 124, 165, 74, 178, 94, 82, 223, 131, 255, 64, 230, 120, 150, 125, 116, 82, 255, 94, 186, 183, 69, 78, 169, 124, 253, 153, 12, 205, 112, 6, 79, 246, 32, 227, 162, 36, 55, 123, 227, 67, 138, 131, 159, 175, 40, 230, 15, 56, 113, 138, 19, 142, 176, 154, 141, 179, 168, 239, 103, 175, 100, 84, 26, 0, 245, 101, 182, 200, 81, 250, 81, 229, 208, 156, 226, 225, 19, 81, 82, 221, 221, 111, 183, 150, 40, 35, 71, 126, 38, 68, 60, 206, 112, 181, 204, 230, 223, 174, 112, 115, 196, 7, 57, 19, 54, 175, 192, 47, 157, 115, 253, 196, 192, 201, 227, 47, 80, 145, 224, 111, 209, 27, 171, 169, 160, 237, 234, 105, 18, 69, 246, 54, 146, 205, 206, 50, 31, 249, 121, 111, 78, 20, 151, 115, 129, 201, 144, 246, 161, 107, 23, 200, 92, 47, 207, 106, 150, 21, 158, 204, 41, 166, 208, 7, 169, 191, 34, 148, 143, 144, 52, 106, 233, 146, 42, 77, 152, 79, 162, 126, 67, 198, 225, 233, 209, 24, 200, 48, 171, 39, 179, 141, 148, 230, 45, 87, 237, 120, 232, 10, 158, 121, 38, 10, 63, 208, 56, 146, 169, 198, 158, 181, 49, 65, 4, 234, 55, 75, 55, 16, 38, 75, 253, 98, 56, 150, 141, 143, 147, 251, 187, 76, 250, 77, 126, 76, 130, 109, 127, 124, 152, 156, 163, 184, 120, 219, 190, 5, 154, 20, 69, 182, 101, 146, 117, 144, 212, 198, 154, 199, 140, 255, 3, 98, 125, 175, 231, 75, 145, 16, 91, 121, 216, 190, 156, 92, 97, 60, 34, 249, 102, 39, 54, 245, 173, 3, 96, 65, 88, 152, 76, 201, 33, 90, 154, 232, 154, 134, 92, 45, 217, 21, 88, 241, 12, 135, 50, 164, 230, 146, 217, 159, 83, 25, 225, 42, 20, 78, 226, 82, 89, 64, 20, 171, 150, 71, 102, 18, 53, 172, 124, 164, 49, 112, 105, 209, 28, 210, 20, 233, 145, 25, 227, 126, 54, 146, 88, 69, 166, 1, 148, 59, 205, 141, 180, 53, 176, 56, 116, 225, 204, 188, 240, 162, 141, 46, 4, 25, 220, 109, 52, 19, 9, 191, 115, 226, 197, 33, 75, 219, 166, 48, 32, 179, 151, 84, 131, 141, 81, 237, 249, 144, 92, 221, 92, 188, 179, 129, 179, 45, 91, 90, 114, 207, 145, 240, 141, 28, 186, 145, 173, 164, 56, 222, 48, 189, 183, 80, 165, 42, 156, 166, 118, 11, 147, 5, 127, 68, 142, 169, 222, 214, 115, 157, 215, 161, 13, 160, 194, 84, 220, 41, 145, 229, 12, 155, 50, 244, 101, 197, 60, 96, 185, 205, 215, 141, 48, 218, 146, 175, 46, 245, 245, 186, 248, 55, 132, 8, 33, 112, 38, 78, 202, 38, 125, 244, 34, 138, 147, 53, 79, 136, 84, 162, 175, 126, 219, 157, 152, 187, 126, 37, 39, 225, 237, 232, 219, 134, 214, 118, 183, 13, 115, 107, 250, 177, 54, 242, 202, 37, 216, 223, 26, 185, 23, 239, 201, 47, 105, 178, 3, 81, 93, 201, 107, 242, 0, 154, 59, 166, 75, 170, 212, 115, 180, 25, 22, 46, 6, 48, 128, 226, 153, 138, 102, 41, 116, 14, 113, 111, 81, 185, 187, 237, 149, 137, 152, 102, 217, 10, 127, 195, 2, 95, 108, 64, 91, 193, 92, 12, 216, 0, 134, 176, 1, 210, 181, 251, 115, 195, 117, 226, 218, 174, 15, 120, 136, 222, 215, 232, 38, 53, 120, 103, 44, 14, 95, 14, 235, 76, 108, 206, 101, 192, 184, 108, 89, 51, 159, 44, 223, 248, 176, 106, 37, 255, 65, 153, 49, 131, 92, 255, 95, 104, 226, 137, 61, 154, 51, 201, 116, 174, 64, 163, 93, 99, 159, 160, 96, 21, 30, 81, 201, 192, 34, 77, 121, 175, 198, 199, 167, 47, 244, 118, 93, 182, 245, 112, 160, 19, 131, 66, 64, 121, 8, 38, 110, 197, 40, 100, 175, 97, 25, 74, 16, 85, 201, 87, 85, 40, 81, 76, 175, 159, 8, 55, 155, 57, 192, 207, 50, 147, 218, 87, 199, 178, 150, 95, 15, 129, 17, 48, 147, 158, 64, 131, 222, 142, 11, 179, 145, 181, 104, 0, 23, 2, 131, 77, 58, 93, 53, 170, 178, 127, 149, 233, 146, 50, 138, 35, 166, 83, 17, 103, 35, 108, 21, 57, 45, 98, 75, 242, 218, 111, 46, 245, 65, 218, 156, 188, 33, 4, 10, 9, 254, 44, 233, 197, 77, 134, 216, 96, 253, 229, 217, 12, 217, 244, 46, 147, 81, 124, 189, 137, 183, 144, 110, 236, 14, 203, 160, 71, 149, 73, 193, 132, 6, 72, 225, 74, 221, 112, 25, 66, 116, 253, 129, 102, 152, 114, 195, 249, 135, 249, 108, 28, 5, 93, 202, 184, 165, 21, 122, 245, 33, 72, 178, 27, 131, 128, 130, 184, 5, 152, 185, 61, 226, 231, 125, 100, 88, 89, 107, 195, 214, 225, 115, 46, 96, 72, 70, 24, 211, 116, 21, 230, 81, 32, 46, 174, 6, 223, 245, 56, 122, 117, 148, 105, 35, 10, 146, 249, 226, 14, 200, 96, 141, 158, 106, 195, 99, 233, 16, 221, 101, 101, 171, 142, 243, 103, 219, 34, 126, 66, 208, 229, 34, 76, 196, 153, 176, 183, 163, 73, 111, 191, 210, 18, 226, 168, 241, 156, 112, 116, 210, 76, 85, 90, 199, 77, 191, 220, 64, 39, 50, 135, 63, 192, 119, 73, 165, 239, 176, 228, 136, 20, 215, 17, 145, 175, 19, 163, 238, 233, 30, 203, 89, 200, 25, 206, 214, 122, 235, 134, 211, 249, 218, 99, 200, 131, 122, 12, 171, 15, 121, 29, 56, 201, 153, 205, 92, 222, 36, 12, 35, 166, 125, 4, 120, 85, 171, 178, 84, 180, 103, 223, 217, 169, 169, 21, 186, 60, 135, 218, 90, 42, 240, 47, 170, 91, 153, 33, 43, 174, 22, 41, 72, 101, 92, 230, 25, 189, 132, 168, 62, 70, 129, 12, 133, 26, 241, 74, 44, 77, 59, 43, 131, 49, 77, 153, 75, 23, 78, 205, 143, 6, 65, 12, 159, 125, 33, 107, 176, 219, 243, 247, 39, 77, 20, 175, 147, 246, 194, 76, 93, 17, 39, 62, 22, 166, 142, 67, 144, 170, 191, 235, 182, 140, 74, 93, 122, 223, 228, 16, 176, 12, 197, 158, 129, 52, 90, 130, 158, 234, 244, 222, 55, 83, 229, 206, 200, 110, 45, 204, 83, 50, 109, 110, 55, 62, 239, 100, 147, 233, 180, 125, 105, 61, 108, 64, 188, 179, 183, 187, 216, 67, 134, 195, 193, 145, 151, 199, 60, 25, 233, 1, 166, 15, 27, 185, 107, 227, 147, 37, 70, 0, 162, 28, 69, 67, 39, 138, 190, 68, 118, 14, 155, 105, 156, 118, 114, 44, 212, 118, 155, 6, 85, 138, 113, 240, 198, 72, 11, 13, 180, 53, 1, 247, 225, 10, 21, 102, 21, 233, 43, 57, 242, 24, 220, 214, 229, 125, 10, 103, 108, 239, 240, 134, 199, 48, 30, 126, 176, 175, 208, 177, 186, 188, 249, 15, 85, 235, 213, 47, 57, 0, 122, 69, 38, 177, 203, 13, 252, 17, 146, 17, 101, 28, 172, 196, 238, 52, 236, 214, 51, 98, 165, 196, 53, 110, 61, 105, 154, 184, 48, 164, 245, 89, 39, 207, 237, 86, 28, 219, 97, 171, 240, 107, 117, 243, 176, 226, 60, 145, 204, 26, 45, 116, 4, 229, 228, 128, 151, 181, 149, 131, 80, 247, 186, 221, 28, 170, 47, 118, 88, 95, 202, 245, 150, 26, 3, 253, 36, 126, 119, 154, 251, 4, 219, 190, 75, 107, 26, 225, 105, 58, 161, 162, 84, 245, 123, 178, 43, 14, 248, 218, 113, 1, 238, 93, 25, 221, 65, 200, 217, 176, 119, 45, 73, 211, 26, 25, 223, 118, 29, 188, 238, 232, 158, 78, 2, 239, 153, 124, 240, 70, 75, 149, 152, 136, 253, 0, 72, 120, 188, 37, 131, 104, 217, 218, 87, 199, 162, 127, 213, 143, 179, 158, 177, 229, 152, 53, 138, 56, 126, 116, 93, 181, 233, 123, 202, 135, 41, 134, 200, 108, 201, 208, 150, 92, 229, 6, 175, 102, 244, 220, 76, 7, 202, 107, 159, 103, 190, 132, 126, 215, 108, 102, 228, 107, 198, 17, 255, 35, 189, 154, 89, 96, 153, 248, 135, 0, 213, 3, 117, 37, 248, 81, 236, 120, 89, 30, 205, 242, 227, 48, 114, 174, 68, 145, 170, 190, 239, 188, 93, 126, 138, 103, 187, 81, 141, 13, 105, 37, 35, 186, 211, 36, 236, 29, 209, 128, 74, 168, 213, 40, 106, 243, 144, 239, 53, 88, 216, 155, 91, 126, 0, 18, 65, 10, 122, 2, 37, 97, 250, 92, 157, 229, 3, 90, 76, 52, 124, 187, 130, 4, 60, 113, 94, 141, 5, 235, 214, 250, 198, 97, 223, 246, 42, 178, 65, 213, 85, 158, 18, 248, 165, 45, 82, 189, 219, 243, 161, 196, 115, 64, 90, 148, 4, 13, 114, 178, 228, 203, 86, 31, 69, 150, 233, 38, 164, 158, 162, 51, 60, 1, 130, 139, 82, 9, 32, 40, 37, 97, 158, 55, 124, 99, 7, 165, 30, 112, 37, 20, 41, 153, 161, 202, 10, 160, 162, 15, 101, 213, 102, 109, 114, 251, 75, 61, 239, 229, 212, 186, 210, 30, 128, 200, 235, 166, 251, 75, 78, 85, 133, 139, 127, 119, 109, 99, 96, 19, 69, 4, 228, 251, 63, 101, 127, 228, 4, 130, 211, 69, 91, 110, 138, 4, 113, 82, 52, 60, 187, 74, 133, 113, 52, 201, 6, 244, 192, 216, 236, 8, 119, 78, 122, 97, 44, 6, 84, 188, 114, 49, 136, 64, 207, 65, 199, 90, 218, 2, 229, 22, 176, 217, 164, 151, 246, 178, 38, 27, 66, 61, 92, 87, 55, 28, 28, 194, 234, 216, 217, 8, 251, 233, 8, 103, 1, 141, 14, 86, 206, 152, 188, 214, 107, 120, 77, 187, 208, 28, 95, 182, 178, 134, 116, 141, 225, 63, 116, 68, 76, 212, 195, 144, 2, 126, 44, 65, 196, 26, 168, 77, 219, 224, 173, 81, 132, 99, 175, 217, 147, 166, 143, 135, 197, 103, 85, 117, 24, 234, 168, 158, 40, 188, 18, 182, 235, 137, 229, 16, 9, 135, 160, 218, 77, 4, 177, 176, 177, 127, 147, 106, 136, 134, 92, 195, 88, 59, 117, 186, 173, 177, 222, 194, 112, 223, 249, 72, 134, 90, 200, 181, 91, 214, 4, 31, 219, 195, 16, 182, 216, 172, 31, 4, 30, 227, 181, 43, 139, 128, 99, 231, 78, 35, 154, 182, 102, 116, 245, 195, 0, 105, 173, 118, 11, 137, 130, 159, 196, 163, 50, 166, 38, 205, 41, 48, 94, 99, 158, 29, 6, 201, 53, 210, 2, 72, 97, 228, 133, 109, 202, 37, 45, 137, 45, 144, 29, 128, 120, 174, 207, 139, 117, 15, 180, 218, 38, 122, 253, 197, 111, 28, 121, 237, 90, 2, 148, 191, 224, 251, 166, 186, 113, 150, 254, 57, 225, 222, 164, 204, 153, 172, 214, 252, 190, 55, 65, 7, 225, 38, 93, 8, 198, 172, 43, 80, 167, 23, 177, 44, 24, 125, 101, 95, 51, 100, 5, 167, 55, 222, 63, 162, 221, 60, 178, 93, 96, 54, 31, 133, 206, 216, 140, 172, 90, 73, 110, 136, 19, 113, 33, 64, 99, 223, 207, 218, 46, 40, 13, 68, 87, 128, 62, 178, 228, 88, 101, 254, 192, 75, 126, 25, 97, 253, 7, 189, 202, 220, 226, 230, 235, 3, 253, 20, 148, 130, 44, 150, 52, 153, 182, 67, 16, 183, 144, 111, 122, 232, 38, 150, 64, 92, 142, 158, 225, 191, 237, 32, 233, 163, 220, 255, 18, 70, 138, 0, 214, 62, 70, 74, 95, 72, 171, 166, 183, 138, 97, 31, 85, 236, 203, 128, 111, 254, 243, 141, 173, 101, 103, 4, 62, 96, 15, 254, 4, 196, 53, 226, 0, 188, 158, 186, 19, 112, 185, 192, 223, 23, 100, 45, 204, 51, 192, 84, 219, 188, 51, 28, 218, 120, 19, 138, 120, 183, 23, 151, 149, 152, 166, 230, 176, 75, 200, 245, 204, 237, 134, 220, 30, 64, 137, 18, 104, 170, 193, 0, 43, 199, 174, 96, 116, 84, 143, 234, 141, 249, 8, 39, 188, 163, 151, 114, 97, 70, 44, 246, 149, 215, 207, 203, 119, 226, 211, 118, 116, 67, 248, 110, 131, 238, 123, 243, 220, 192, 134, 206, 60, 181, 206, 221, 194, 231, 124, 20, 65, 40, 204, 94, 213, 147, 71, 0, 81, 218, 51, 109, 84, 187, 220, 171, 29, 187, 88, 132, 143, 7, 103, 127, 27, 67, 32, 82, 158, 223, 68, 217, 166, 83, 234, 126, 54, 208, 197, 118, 47, 39, 18, 31, 39, 205, 162, 227, 69, 144, 181, 203, 84, 121, 80, 239, 47, 225, 195, 229, 121, 117, 203, 108, 238, 24, 175, 100, 98, 5, 124, 8, 236, 216, 40, 107, 167, 10, 248, 253, 88, 223, 89, 187, 28, 28, 171, 78, 27, 129, 82, 62, 110, 115, 153, 21, 123, 101, 209, 31, 41, 51, 233, 85, 145, 178, 11, 202, 243, 147, 137, 29, 210, 127, 223, 51, 147, 244, 206, 88, 226, 245, 216, 148, 31, 165, 40, 25, 206, 241, 229, 73, 51, 170, 209, 146, 145, 103, 211, 195, 175, 226, 96, 145, 151, 0, 179, 253, 253, 102, 35, 27, 241, 208, 162, 63, 135, 172, 187, 135, 126, 62, 156, 44, 27, 104, 90, 168, 23, 2, 195, 101, 174, 231, 15, 15, 130, 78, 215, 57, 18, 139, 153, 20, 40, 221, 5, 214, 250, 185, 215, 186, 94, 62, 254, 144, 17, 204, 26, 44, 232, 161, 50, 150, 68, 234, 88, 193, 72, 12, 118, 242, 229, 139, 162, 25, 44, 56, 199, 115, 232, 115, 52, 44, 121, 174, 112, 96, 114, 60, 96, 233, 76, 113, 124, 45, 62, 251, 22, 206, 24, 246, 184, 116, 131, 245, 224, 200, 224, 171, 199, 45, 238, 77, 84, 212, 14, 157, 242, 187, 216, 159, 36, 181, 1, 139, 134, 96, 250, 65, 151, 219, 235, 133, 128, 13, 135, 225, 148, 204, 30, 79, 187, 25, 205, 17, 189, 180, 43, 229, 160, 38, 172, 70, 108, 6, 229, 200, 35, 42, 13, 154, 245, 143, 189, 42, 67, 4, 113, 47, 102, 0, 109, 69, 129, 28, 21, 42, 250, 71, 188, 25, 127, 136, 161, 68, 71, 249, 169, 5, 161, 236, 110, 198, 124, 166, 168, 199, 76, 92, 255, 134, 11, 55, 25, 180, 193, 94, 109, 72, 233, 192, 228, 132, 92, 164, 177, 66, 181, 177, 128, 247, 67, 188, 234, 17, 123, 187, 218, 144, 100, 9, 198, 191, 235, 89, 34, 84, 80, 187, 182, 18, 184, 39, 130, 202, 132, 56, 56, 133, 81, 52, 9, 55, 7, 70, 168, 184, 61, 131, 182, 190, 195, 51, 13, 242, 90, 120, 52, 23, 172, 205, 160, 234, 105, 163, 155, 7, 38, 162, 145, 161, 61, 28, 124, 124, 184, 251, 145, 60, 143, 93, 228, 253, 77, 14, 190, 168, 58, 49, 60, 95, 239, 165, 142, 255, 170, 61, 7, 163, 193, 78, 137, 118, 106, 66, 195, 74, 6, 54, 240, 162, 5, 176, 174, 199, 126, 156, 72, 134, 90, 209, 206, 102, 21, 200, 89, 35, 122, 33, 144, 59, 254, 29, 201, 132, 213, 99, 209, 61, 2, 34, 47, 148, 24, 211, 146, 86, 108, 81, 173, 64, 110, 122, 178, 77, 192, 165, 87, 105, 34, 178, 95, 122, 128, 189, 97, 216, 192, 123, 189, 67, 221, 88, 251, 154, 197, 171, 221, 207, 218, 255, 54, 255, 244, 211, 216, 234, 137, 76, 207, 106, 104, 135, 8, 115, 30, 64, 242, 100, 245, 202, 80, 147, 182, 78, 81, 245, 204, 216, 22, 213, 80, 127, 95, 150, 123, 125, 6, 145, 50, 226, 190, 57, 82, 182, 233, 206, 181, 22, 165, 44, 80, 242, 114, 98, 215, 5, 130, 250, 158, 79, 245, 248, 186, 185, 251, 71, 212, 102, 214, 11, 37, 109, 200, 132, 63, 202, 186, 109, 200, 223, 253, 139, 111, 66, 182, 26, 176, 11, 191, 222, 33, 181, 102, 148, 200, 181, 192, 190, 18, 147, 230, 252, 37, 153, 242, 13, 233, 195, 48, 3, 171, 31, 249, 163, 108, 237, 237, 131, 62, 31, 80, 100, 104, 212, 254, 19, 59, 128, 142, 127, 241, 181, 229, 34, 4, 183, 172, 78, 165, 196, 205, 121, 34, 47, 91, 115, 21, 150, 222, 137, 104, 50, 228, 199, 4, 110, 243, 248, 197, 207, 96, 1, 167, 24, 247, 221, 233, 191, 120, 54, 90, 244, 246, 163, 210, 147, 6, 204, 205, 33, 55, 128, 203, 168, 68, 219, 207, 91, 190, 198, 31, 242, 174, 79, 227, 155, 173, 21, 71, 169, 149, 152, 110, 190, 141, 20, 19, 200, 159, 62, 123, 164, 90, 82, 46, 50, 61, 181, 206, 101, 173, 17, 57, 227, 18, 34, 100, 92, 139, 234, 137, 241, 234, 163, 112, 96, 19, 102, 250, 204, 59, 89, 239, 37, 231, 150, 55, 195, 106, 25, 133, 223, 157, 81, 121, 125, 54, 230, 208, 139, 41, 62, 40, 86, 127, 52, 41, 87, 244, 20, 133, 136, 97, 157, 83, 187, 111, 220, 14, 32, 252, 28, 162, 48, 7, 32, 110, 47, 60, 9, 218, 126, 208, 207, 250, 25, 37, 109, 45, 226, 97, 180, 217, 191, 113, 69, 81, 133, 29, 89, 18, 141, 6, 57, 103, 37, 101, 233, 108, 206, 41, 134, 163, 216, 196, 129, 81, 223, 229, 241, 12, 36, 249, 20, 120, 108, 94, 134, 253, 88, 197, 116, 84, 97, 77, 153, 82, 87, 9, 169, 254, 130, 31, 71, 255, 18, 43, 237, 243, 225, 190, 69, 167, 139, 62, 248, 185, 52, 224, 58, 24, 57, 111, 92, 215, 165, 223, 193, 190, 21, 63, 129, 192, 183, 63, 106, 159, 195, 89, 45, 162, 22, 14, 128, 234, 103, 4, 151, 10, 23, 200, 102, 88, 92, 248, 85, 144, 89, 168, 188, 106, 168, 178, 197, 222, 58, 204, 98, 169, 21, 234, 27, 144, 150, 77, 131, 101, 72, 176, 161, 232, 3, 153, 162, 120, 7, 216, 8, 226, 89, 12, 12, 150, 18, 18, 223, 97, 240, 229, 254, 180, 214, 187, 71, 37, 145, 198, 173, 130, 222, 151, 128, 48, 17, 217, 140, 220, 100, 185, 231, 8, 15, 187, 89, 152, 103, 62, 0, 244, 237, 77, 115, 9, 34, 246, 178, 158, 247, 20, 110, 27, 29, 139, 4, 179, 10, 221, 237, 39, 203, 156, 250, 11, 100, 229, 164, 15, 168, 224, 118, 113, 164, 195, 236, 210, 86, 225, 93, 189, 166, 97, 200, 221, 165, 134, 28, 39, 11, 107, 245, 107, 142, 68, 23, 251, 136, 58, 10, 75, 38, 32, 194, 139, 219, 2, 62, 248, 156, 54, 175, 19, 157, 210, 180, 84, 108, 147, 203, 3, 175, 79, 81, 247, 128, 153, 146, 92, 83, 251, 192, 225, 106, 223, 30, 33, 8, 194, 58, 192, 216, 255, 248, 93, 72, 145, 56, 184, 211, 210, 155, 59, 28, 241, 77, 33, 173, 1, 32, 121, 183, 114, 134, 250, 84, 71, 246, 121, 167, 24, 25, 210, 135, 109, 232, 254, 87, 175, 175, 140, 113, 79, 167, 210, 90, 94, 94, 164, 171, 45, 228, 209, 137, 238, 0, 92, 105, 145, 236, 221, 131, 7, 100, 3, 227, 156, 174, 98, 178, 146, 136, 254, 124, 226, 235, 85, 105, 129, 248, 112, 230, 147, 254, 132, 187, 50, 132, 85, 78, 90, 207, 83, 199, 96, 23, 72, 56, 218, 235, 112, 233, 101, 127, 71, 1, 211, 75, 34, 104, 19, 134, 15, 62, 143, 189, 6, 95, 67, 42, 245, 50, 128, 217, 20, 3, 1, 25, 26, 145, 161, 209, 155, 85, 238, 245, 252, 203, 177, 101, 198, 131, 4, 131, 90, 83, 163, 78, 68, 235, 52, 96, 156, 155, 28, 134, 117, 72, 186, 143, 199, 27, 45, 112, 133, 169, 28, 172, 40, 238, 108, 227, 69, 203, 24, 224, 15, 208, 186, 241, 154, 41, 54, 121, 187, 135, 23, 18, 105, 74, 139, 210, 153, 237, 22, 88, 42, 79, 207, 151, 104, 89, 220, 173, 113, 37, 124, 40, 18, 216, 210, 232, 52, 68, 58, 174, 3, 176, 163, 113, 248, 112, 138, 148, 222, 76, 235, 201, 114, 89, 78, 142, 206, 7, 27, 107, 233, 20, 159, 10, 73, 132, 254, 108, 205, 4, 190, 21, 171, 149, 95, 72, 120, 142, 134, 132, 195, 160, 106, 155, 225, 14, 122, 64, 245, 13, 247, 64, 168, 222, 169, 38, 205, 212, 238, 84, 255, 35, 160, 95, 232, 100, 160, 96, 27, 67, 42, 99, 145, 219, 160, 210, 87, 15, 16, 144, 133, 42, 223, 184, 122, 248, 220, 111, 3, 28, 197, 106, 54, 123, 173, 137, 249, 43, 99, 31, 27, 1, 232, 61, 233, 188, 194, 192, 26, 229, 201, 11, 251, 199, 37, 183, 75, 212, 164, 204, 240, 18, 207, 71, 133, 39, 150, 32, 129, 149, 29, 109, 31, 10, 31, 222, 47, 0, 212, 71, 70, 167, 210, 126, 136, 43, 235, 221, 118, 167, 60, 153, 59, 225, 250, 137, 211, 144, 86, 245, 200, 236, 175, 187, 130, 72, 50, 176, 203, 96, 65, 243, 252, 226, 231, 249, 21, 216, 4, 15, 35, 46, 96, 198, 209, 41, 206, 114, 48, 29, 234, 16, 72, 170, 133, 1, 148, 209, 193, 103, 73, 68, 244, 108, 81, 205, 104, 26, 140, 71, 15, 27, 96, 158, 137, 169, 182, 84, 155, 122, 248, 183, 249, 226, 100, 237, 19, 24, 57, 229, 138, 2, 158, 88, 137, 76, 171, 20, 181, 82, 59, 127, 195, 88, 134, 173, 177, 218, 248, 109, 81, 250, 43, 6, 238, 232, 156, 255, 160, 49, 126, 27, 12, 139, 105, 58, 216, 176, 78, 145, 225, 161, 146, 206, 37, 118, 54, 248, 148, 26, 133, 35, 87, 80, 227, 14, 63, 40, 253, 156, 221, 173, 72, 227, 30, 175, 19, 67, 89, 69, 165, 25, 125, 142, 35, 190, 167, 249, 132, 151, 42, 117, 127, 96, 237, 25, 141, 52, 180, 33, 106, 201, 84, 60, 218, 74, 93, 215, 29, 106, 52, 110, 66, 167, 92, 16, 151, 106, 22, 255, 223, 21, 28, 236, 48, 190, 113, 116, 174, 167, 108, 184, 147, 231, 17, 171, 225, 5, 176, 229, 169, 95, 78, 41, 64, 33, 91, 59, 191, 31, 14, 118, 251, 208, 54, 79, 217, 77, 31, 50, 78, 4, 166, 195, 166, 99, 113, 206, 167, 212, 220, 96, 185, 22, 223, 63, 13, 141, 187, 55, 102, 113, 164, 91, 202, 99, 89, 125, 63, 78, 53, 126, 38, 232, 50, 218, 56, 102, 41, 46, 144, 94, 159, 4, 24, 247, 203, 153, 102, 190, 22, 221, 183, 183, 192, 131, 4, 24, 112, 95, 95, 138, 192, 134, 80, 100, 77, 60, 236, 2, 181, 147, 26, 88, 23, 69, 205, 219, 146, 6, 142, 225, 114, 19, 52, 189, 174, 172, 52, 242, 116, 172, 30, 168, 249, 227, 212, 110, 105, 22, 112, 143, 232, 205, 218, 4, 253, 39, 32, 224, 254, 27, 244, 164, 210, 131, 163, 93, 180, 223, 38, 215, 11, 223, 240, 78, 125, 207, 111, 125, 190, 40, 201, 229, 103, 100, 172, 249, 3, 200, 218, 5, 143, 150, 16, 210, 236, 152, 236, 250, 46, 122, 6, 129, 238, 102, 235, 72, 15, 102, 180, 80, 20, 231, 255, 54, 225, 207, 79, 243, 122, 18, 23, 75, 75, 229, 195, 126, 33, 186, 225, 72, 60, 243, 70, 216, 7, 56, 217, 59, 63, 6, 56, 143, 181, 241, 227, 70, 222, 25, 142, 17, 75, 36, 174, 245, 177, 153, 248, 81, 122, 81, 222, 189, 127, 13, 96, 150, 41, 80, 221, 97, 104, 197, 41, 238, 180, 110, 174, 53, 115, 29, 166, 168, 137, 216] - ], - "iv": null, - "key": [41, 218, 196, 159, 201, 213, 225, 13, 250, 91, 54, 239, 221, 177, 43, 112, 102, 192, 221, 15, 44, 75, 229, 141], - "modeOfOperation": "ctr", - "plaintext": [ - [123, 92, 196, 120, 44, 150, 226, 84, 191, 233, 136, 190, 77, 90, 124, 202, 48, 243, 90, 137, 175, 54, 194, 197, 214, 44, 249, 204, 250, 88, 248, 248, 201, 145, 235, 213, 101, 92, 113, 78, 197, 36, 64, 150, 198, 136, 72, 13, 130, 171, 238, 100, 57, 90, 182, 47, 57, 101, 176, 224, 162, 199, 147, 28, 142, 230, 127, 60, 103, 117, 87, 45, 222, 66, 65, 65, 95, 191, 216, 202, 67, 182, 176, 13, 42, 251, 243, 93, 196, 159, 243, 97, 178, 187, 232, 140, 226, 102, 82, 250, 125, 84, 154, 213, 215, 191, 128, 215, 85, 254, 208, 54, 30, 146, 17, 122, 191, 2, 205, 31, 172, 40, 193, 218, 3, 37, 242, 104, 98, 130, 42, 217, 155, 35, 42, 15, 176, 98, 176, 55, 72, 179, 19, 0, 202, 139, 204, 95, 126, 138, 138, 7, 3, 63, 40, 94, 210, 10, 139, 39, 89, 81, 251, 19, 28, 157, 105, 209, 230, 176, 75, 42, 63, 30, 184, 117, 116, 241, 118, 102, 39, 108, 66, 176, 148, 254, 129, 118, 155, 165, 167, 49, 250, 201, 171, 233, 37, 127, 77, 240, 95, 199, 53, 128, 127, 253, 10, 13, 109, 81, 187, 230, 206, 163, 210, 115, 248, 93, 166, 205, 176, 237, 203, 185, 117, 241, 151, 96, 131, 7, 112, 173, 177, 224, 19, 41, 129, 187, 120, 81, 160, 58, 69, 38, 120, 189, 74, 252, 189, 21, 21, 216, 125, 76, 9, 244, 42, 143, 118, 152, 40, 144, 154, 172, 184, 100, 132, 0, 128, 13, 192, 75, 224, 180, 149, 79, 221, 30, 110, 34, 9, 215, 120, 127, 45, 66, 62, 44, 155, 169, 146, 236, 239, 28, 168, 61, 198, 20, 163, 216, 106, 101, 69, 106, 232, 123, 255, 70, 127, 153, 112, 92, 48, 225, 82, 152, 43, 137, 116, 59, 196, 199, 231, 228, 199, 138, 162, 122, 115, 19, 37, 176, 231, 85, 97, 175, 34, 223, 133, 149, 131, 2, 45, 110, 224, 43, 64, 148, 140, 125, 15, 84, 116, 150, 254, 244, 234, 170, 37, 30, 226, 78, 131, 81, 150, 45, 109, 238, 1, 14, 178, 110, 36, 220, 155, 180, 202, 140, 130, 177, 28, 91, 1, 85, 107, 173, 82, 152, 177, 22, 104, 30, 130, 176, 99, 210, 47, 14, 13, 103, 73, 27, 233, 76, 145, 106, 169, 138, 126, 135, 11, 152, 244, 201, 115, 42, 80, 79, 160, 25, 238, 181, 176, 115, 174, 202, 162, 133, 65, 11, 201, 18, 192, 193, 117, 66, 107, 168, 242, 14, 248, 33, 40, 142, 199, 8, 184, 58, 220, 96, 150, 73, 192, 152, 75, 55, 41, 132, 138, 82, 110, 166, 232, 128, 28, 58, 244, 50, 42, 200, 163, 29, 120, 1, 130, 235, 155, 61, 173, 100, 57, 117, 166, 68, 149, 150, 78, 68, 178, 49, 221, 198, 227, 53, 37, 253, 165, 212, 175, 220, 123, 162, 43, 135, 192, 176, 50, 10, 156, 99, 2, 108, 208, 184, 247, 130, 233, 163, 67, 144, 249, 46, 111, 194, 67, 212, 75, 107, 177, 143, 10, 2, 187, 215, 235, 27, 133, 130, 231, 30, 137, 193, 166, 23, 179, 188, 187, 251, 58, 250, 28, 25, 187, 39, 240, 239, 112, 232, 185, 60, 236, 59, 28, 69, 38, 18, 28, 200, 105, 50, 64, 111, 238, 217, 87, 241, 124, 240, 52, 255, 40, 127, 110, 23, 205, 104, 97, 100, 94, 120, 230, 133, 166, 244, 105, 213, 47, 47, 218, 132, 47, 34, 230, 200, 36, 243, 249, 117, 128, 15, 207, 176, 60, 225, 11, 184, 48, 13, 87, 212, 12, 16, 228, 196, 123, 255, 66, 74, 98, 155, 32, 104, 183, 102, 130, 96, 121, 228, 178, 74, 23, 75, 171, 51, 140, 255, 236, 45, 92, 73, 46, 66, 225, 14, 33, 146, 45, 136, 67, 152, 219, 209, 75, 72, 219, 148, 188, 191, 3, 187, 56, 65, 181, 144, 162, 38, 110, 146, 56, 203, 162, 34, 173, 100, 207, 29, 170, 59, 39, 191, 32, 134, 180, 216, 14, 212, 58, 40, 176, 62, 86, 193, 222, 225, 192, 44, 40, 103, 156, 132, 200, 192, 0, 176, 250, 136, 180, 208, 235, 224, 108, 108, 148, 213, 153, 230, 204, 166, 127, 65, 79, 203, 250, 82, 71, 153, 112, 1, 216, 176, 23, 159, 95, 219, 121, 247, 9, 150, 94, 197, 40, 218, 143, 130, 202, 144, 222, 232, 20, 210, 206, 165, 6, 159, 125, 193, 236, 183, 34, 23, 136, 243, 49, 212, 131, 211, 194, 109, 71, 231, 23, 39, 124, 221, 125, 165, 19, 66, 27, 203, 253, 137, 181, 188, 123, 37, 143, 148, 177, 193, 40, 76, 123, 252, 154, 66, 0, 33, 183, 231, 63, 38, 11, 223, 206, 31, 182, 32, 137, 221, 61, 56, 29, 32, 151, 153, 2, 250, 101, 53, 87, 168, 116, 211, 138, 182, 137, 65, 140, 17, 217, 89, 179, 223, 62, 250, 108, 130, 248, 236, 71, 202, 18, 252, 31, 113, 71, 208, 161, 116, 18, 137, 23, 193, 187, 34, 213, 207, 18, 163, 147, 249, 163, 144, 255, 73, 177, 146, 94, 206, 159, 201, 121, 70, 48, 57, 194, 72, 49, 189, 245, 230, 125, 169, 232, 11, 110, 221, 187, 178, 128, 98, 207, 171, 177, 92, 109, 52, 100, 245, 70, 77, 0, 195, 244, 180, 161, 76, 79, 113, 124, 66, 83, 199, 7, 235, 82, 47, 243, 160, 126, 70, 65, 101, 67, 253, 77, 33, 175, 253, 104, 99, 151, 110, 66, 75, 238, 123, 10, 120, 71, 228, 125, 154, 82, 248, 47, 187, 125, 43, 34, 90, 250, 61, 134, 167, 48, 72, 147, 180, 217, 243, 88, 164, 169, 92, 151, 169, 132, 127, 218, 142, 133, 223, 119, 255, 41, 99, 254, 153, 44, 152, 173, 227, 53, 100, 179, 79, 57, 14, 197, 95, 86, 228, 187, 166, 72, 209, 209, 187, 233, 197, 53, 123, 176, 207, 31, 53, 24, 103, 240, 192, 98, 141, 192, 48, 201, 0, 229, 73, 14, 13, 207, 37, 33, 101, 182, 47, 116, 125, 107, 123, 244, 13, 83, 96, 47, 227, 227, 139, 10, 210, 243, 81, 59, 245, 107, 108, 243, 154, 156, 183, 79, 233, 45, 203, 16, 10, 34, 213, 121, 233, 134, 92, 215, 42, 8, 167, 41, 75, 123, 107, 94, 30, 158, 182, 10, 170, 129, 132, 208, 175, 243, 10, 184, 239, 164, 161, 13, 207, 18, 205, 164, 29, 83, 64, 184, 201, 200, 72, 161, 207, 123, 158, 115, 65, 46, 67, 233, 123, 69, 152, 29, 198, 145, 214, 149, 220, 48, 172, 132, 100, 75, 230, 249, 251, 168, 121, 253, 33, 255, 1, 224, 53, 164, 108, 88, 85, 28, 44, 153, 17, 79, 95, 42, 53, 224, 163, 3, 153, 29, 112, 149, 165, 5, 119, 213, 192, 189, 76, 61, 96, 107, 120, 161, 131, 234, 174, 236, 111, 48, 246, 136, 54, 243, 232, 188, 152, 169, 107, 178, 106, 193, 86, 221, 139, 105, 24, 105, 243, 81, 230, 196, 227, 179, 18, 227, 242, 27, 184, 80, 47, 133, 244, 217, 117, 141, 109, 167, 51, 128, 132, 110, 235, 159, 215, 148, 40, 2, 60, 29, 204, 199, 130, 232, 85, 249, 9, 0, 83, 12, 16, 179, 102, 71, 22, 183, 145, 118, 171, 176, 34, 84, 161, 6, 98, 62, 162, 93, 194, 70, 17, 212, 67, 140, 172, 48, 48, 192, 155, 59, 255, 23, 128, 234, 188, 122, 57, 199, 164, 66, 104, 236, 122, 217, 3, 45, 206, 111, 154, 232, 153, 1, 161, 20, 122, 191, 77, 253, 0, 203, 178, 134, 170, 157, 210, 84, 158, 128, 3, 80, 47, 115, 234, 48, 141, 202, 31, 121, 56, 44, 47, 76, 202, 158, 90, 156, 175, 118, 85, 80, 96, 119, 218, 156, 79, 189, 167, 188, 51, 60, 93, 53, 131, 244, 228, 99, 57, 143, 89, 138, 22, 96, 213, 140, 44, 162, 238, 194, 70, 101, 223, 222, 175, 254, 58, 35, 10, 237, 40, 149, 5, 48, 235, 3, 147, 111, 121, 232, 127, 119, 147, 41, 33, 153, 159, 21, 5, 92, 29, 181, 114, 82, 6, 93, 243, 186, 24, 35, 253, 249, 5, 190, 183, 38, 30, 56, 47, 163, 170, 109, 5, 235, 90, 33, 127, 15, 43, 16, 181, 61, 30, 61, 123, 132, 151, 232, 57, 72, 159, 209, 110, 36, 171, 181, 82, 120, 135, 251, 38, 63, 93, 208, 7, 122, 186, 151, 88, 187, 171, 167, 207, 161, 183, 27, 221, 255, 126, 252, 33, 98, 38, 231, 227, 46, 95, 88, 10, 2, 56, 69, 184, 10, 233, 71, 27, 139, 174, 15, 231, 106, 206, 252, 35, 101, 61, 153, 114, 101, 213, 100, 34, 6, 186, 151, 8, 202, 4, 142, 129, 169, 136, 181, 88, 252, 133, 137, 174, 6, 79, 118, 27, 128, 227, 207, 122, 164, 6, 94, 207, 58, 54, 68, 80, 145, 24, 32, 226, 112, 149, 147, 12, 92, 134, 111, 89, 214, 107, 222, 21, 219, 220, 239, 165, 209, 193, 38, 206, 233, 85, 193, 236, 29, 223, 0, 46, 212, 130, 252, 78, 218, 66, 185, 197, 77, 109, 220, 98, 186, 124, 21, 252, 131, 85, 123, 96, 47, 209, 204, 194, 97, 183, 10, 76, 220, 36, 86, 150, 74, 79, 34, 198, 53, 188, 237, 56, 120, 196, 218, 253, 96, 217, 247, 66, 186, 75, 178, 75, 97, 69, 203, 198, 222, 9, 168, 197, 26, 136, 220, 6, 101, 249, 232, 15, 212, 175, 242, 215, 199, 62, 237, 232, 99, 254, 4, 58, 79, 189, 147, 177, 213, 217, 105, 149, 6, 39, 219, 211, 135, 216, 184, 52, 199, 67, 212, 206, 211, 30, 93, 20, 207, 173, 128, 151, 60, 36, 245, 248, 31, 117, 91, 51, 226, 64, 138, 46, 132, 210, 89, 127, 7, 71, 255, 110, 200, 131, 109, 194, 226, 42, 120, 54, 91, 108, 89, 220, 178, 38, 81, 170, 6, 154, 127, 144, 29, 163, 63, 253, 189, 192, 221, 13, 252, 116, 58, 34, 86, 137, 201, 236, 102, 1, 199, 225, 65, 33, 196, 209, 46, 66, 13, 145, 97, 122, 138, 158, 68, 239, 89, 164, 142, 50, 108, 223, 145, 126, 227, 103, 248, 230, 82, 225, 219, 141, 234, 20, 41, 141, 94, 222, 39, 97, 235, 161, 167, 136, 204, 1, 237, 250, 0, 147, 55, 122, 42, 151, 19, 199, 107, 214, 118, 3, 42, 68, 215, 77, 37, 97, 188, 62, 63, 77, 242, 240, 209, 26, 137, 169, 90, 42, 65, 130, 221, 8, 246, 71, 237, 191, 245, 38, 253, 81, 71, 151, 161, 95, 108, 255, 103, 226, 10, 47, 202, 18, 43, 127, 200, 121, 3, 145, 67, 128, 124, 223, 243, 229, 186, 199, 61, 185, 153, 31, 151, 148, 83, 198, 69, 196, 196, 17, 82, 19, 160, 39, 234, 85, 250, 146, 159, 48, 218, 58, 161, 41, 30, 89, 42, 181, 203, 212, 146, 38, 148, 58, 104, 114, 116, 211, 115, 29, 146, 18, 246, 48, 26, 39, 118, 111, 54, 143, 5, 182, 209, 182, 16, 20, 29, 129, 100, 143, 167, 113, 29, 98, 235, 16, 230, 176, 241, 141, 112, 42, 213, 0, 235, 225, 124, 212, 143, 77, 185, 156, 190, 100, 134, 35, 68, 114, 24, 34, 40, 191, 138, 243, 158, 28, 133, 197, 42, 235, 122, 169, 91, 222, 102, 11, 142, 109, 55, 15, 14, 63, 207, 157, 76, 218, 29, 159, 154, 142, 40, 248, 195, 53, 94, 229, 26, 229, 164, 222, 23, 206, 165, 89, 8, 180, 155, 44, 119, 80, 167, 29, 220, 196, 190, 212, 251, 49, 42, 186, 230, 62, 97, 122, 0, 215, 55, 81, 19, 116, 79, 223, 158, 55, 52, 146, 126, 95, 63, 236, 252, 33, 8, 119, 153, 252, 164, 22, 226, 51, 163, 144, 142, 145, 176, 205, 95, 239, 236, 93, 48, 62, 97, 146, 107, 135, 132, 217, 190, 230, 243, 219, 158, 177, 161, 77, 222, 86, 42, 8, 172, 171, 244, 62, 72, 19, 72, 44, 199, 67, 134, 104, 93, 210, 245, 236, 172, 141, 20, 90, 116, 236, 50, 47, 73, 29, 72, 111, 81, 182, 35, 128, 205, 199, 146, 229, 99, 9, 10, 184, 62, 150, 242, 106, 99, 99, 5, 70, 113, 127, 119, 139, 75, 145, 229, 136, 177, 37, 187, 209, 100, 243, 220, 157, 61, 234, 192, 27, 184, 191, 180, 246, 10, 38, 156, 167, 238, 236, 187, 223, 92, 120, 152, 204, 133, 227, 97, 9, 222, 41, 27, 42, 53, 72, 110, 89, 194, 1, 195, 182, 165, 180, 212, 44, 182, 129, 238, 246, 75, 105, 243, 108, 145, 20, 5, 167, 209, 216, 217, 214, 203, 173, 38, 83, 10, 146, 16, 228, 240, 128, 241, 157, 220, 88, 64, 179, 97, 110, 39, 25, 12, 56, 0, 80, 228, 12, 74, 134, 253, 193, 48, 49, 2, 88, 140, 100, 187, 74, 250, 134, 47, 240, 104, 27, 11, 18, 2, 111, 50, 254, 108, 104, 160, 23, 53, 39, 223, 95, 29, 9, 160, 156, 157, 81, 15, 9, 82, 146, 167, 82, 99, 244, 91, 155, 146, 26, 53, 194, 13, 125, 209, 157, 98, 250, 116, 127, 178, 168, 59, 62, 78, 183, 228, 43, 210, 234, 68, 140, 198, 123, 3, 68, 93, 184, 88, 130, 87, 151, 129, 4, 63, 88, 114, 95, 205, 126, 139, 108, 214, 59, 242, 64, 119, 159, 43, 219, 23, 2, 176, 96, 75, 67, 42, 22, 143, 141, 50, 18, 81, 82, 217, 229, 80, 167, 248, 179, 59, 19, 42, 17, 5, 119, 105, 146, 8, 171, 44, 235, 60, 208, 46, 187, 74, 155, 68, 56, 44, 68, 176, 169, 123, 75, 185, 66, 122, 174, 49, 119, 104, 98, 218, 196, 221, 210, 27, 55, 205, 126, 175, 94, 139, 224, 133, 220, 124, 235, 144, 119, 239, 218, 58, 143, 160, 60, 224, 180, 47, 47, 88, 10, 208, 98, 50, 228, 111, 117, 7, 64, 28, 24, 235, 166, 134, 232, 251, 49, 172, 106, 167, 75, 83, 6, 30, 225, 253, 255, 243, 45, 36, 41, 226, 66, 138, 77, 176, 57, 125, 173, 185, 18, 131, 82, 136, 212, 255, 58, 195, 98, 79, 150, 178, 64, 66, 112, 40, 120, 203, 252, 118, 234, 18, 182, 66, 55, 145, 50, 230, 74, 180, 170, 54, 227, 80, 254, 203, 192, 74, 207, 138, 179, 113, 2, 239, 189, 133, 144, 16, 186, 16, 77, 112, 190, 216, 190, 79, 112, 219, 120, 61, 126, 102, 236, 176, 231, 119, 133, 12, 92, 192, 102, 216, 35, 165, 169, 99, 201, 247, 210, 9, 81, 244, 225, 31, 43, 19, 246, 190, 127, 97, 80, 219, 94, 8, 33, 179, 250, 100, 71, 3, 36, 10, 134, 50, 180, 166, 119, 211, 120, 141, 106, 222, 28, 198, 13, 49, 70, 32, 79, 79, 113, 56, 203, 248, 133, 98, 43, 16, 177, 33, 115, 179, 223, 45, 10, 41, 124, 29, 209, 243, 66, 121, 13, 232, 192, 178, 106, 212, 82, 203, 225, 128, 233, 4, 254, 86, 217, 105, 88, 184, 21, 176, 121, 212, 41, 79, 157, 126, 7, 43, 243, 199, 62, 107, 82, 116, 186, 213, 45, 228, 101, 19, 164, 92, 106, 152, 70, 28, 106, 111, 135, 52, 39, 227, 142, 196, 125, 150, 99, 204, 132, 112, 208, 72, 212, 236, 81, 59, 118, 5, 74, 243, 83, 3, 113, 168, 49, 226, 76, 235, 150, 63, 127, 53, 143, 89, 45, 42, 146, 82, 45, 198, 208, 61, 188, 80, 4, 221, 182, 116, 27, 196, 113, 217, 113, 37, 174, 181, 231, 7, 155, 143, 55, 116, 209, 22, 17, 187, 21, 225, 212, 74, 224, 160, 222, 9, 36, 138, 127, 122, 127, 185, 159, 54, 162, 59, 69, 209, 238, 219, 182, 16, 120, 91, 230, 27, 61, 218, 57, 171, 120, 115, 128, 61, 31, 32, 58, 117, 21, 46, 26, 8, 183, 17, 36, 164, 66, 211, 240, 12, 10, 237, 175, 205, 210, 6, 194, 251, 246, 115, 167, 28, 48, 195, 220, 37, 108, 168, 101, 162, 92, 230, 233, 161, 182, 3, 175, 78, 112, 58, 152, 24, 212, 247, 97, 233, 64, 243, 255, 238, 151, 107, 205, 68, 76, 104, 182, 247, 186, 187, 158, 185, 202, 105, 207, 224, 159, 156, 254, 211, 204, 24, 56, 172, 222, 51, 52, 63, 124, 47, 103, 77, 209, 228, 231, 78, 79, 199, 49, 252, 78, 94, 24, 193, 239, 157, 247, 80, 117, 209, 12, 42, 217, 250, 168, 94, 21, 117, 141, 128, 120, 185, 187, 232, 245, 58, 151, 222, 112, 198, 138, 61, 193, 29, 176, 146, 213, 0, 116, 139, 140, 42, 204, 39, 191, 194, 65, 91, 161, 129, 141, 115, 26, 229, 89, 201, 89, 82, 148, 35, 6, 7, 153, 56, 196, 126, 40, 224, 130, 217, 175, 149, 8, 58, 205, 112, 224, 91, 2, 250, 175, 195, 109, 109, 159, 68, 51, 91, 15, 242, 196, 27, 61, 243, 181, 144, 231, 61, 163, 246, 77, 168, 29, 171, 57, 133, 90, 179, 77, 104, 225, 49, 235, 108, 40, 151, 30, 187, 215, 245, 227, 100, 37, 184, 225, 39, 80, 207, 251, 178, 124, 205, 86, 153, 187, 181, 20, 96, 132, 110, 71, 20, 131, 182, 145, 214, 112, 146, 98, 19, 195, 192, 6, 243, 108, 149, 241, 152, 150, 148, 92, 155, 151, 5, 114, 99, 205, 82, 250, 211, 90, 186, 113, 36, 133, 42, 54, 112, 233, 193, 248, 156, 31, 3, 20, 149, 9, 3, 172, 175, 131, 19, 13, 181, 248, 62, 197, 66, 45, 137, 107, 153, 70, 97, 100, 60, 103, 236, 27, 128, 67, 121, 30, 121, 128, 8, 27, 138, 210, 173, 106, 127, 108, 242, 74, 228, 172, 49, 8, 45, 78, 163, 60, 220, 36, 17, 153, 7, 20, 105, 53, 144, 226, 76, 249, 7, 206, 196, 166, 106, 46, 165, 17, 27, 40, 144, 34, 78, 43, 46, 136, 78, 110, 80, 170, 109, 181, 235, 229, 122, 22, 60, 3, 15, 76, 48, 252, 156, 229, 46, 47, 172, 10, 87, 182, 49, 231, 33, 20, 99, 247, 125, 212, 21, 121, 113, 39, 248, 34, 26, 71, 77, 240, 233, 251, 158, 72, 174, 231, 199, 55, 111, 228, 185, 99, 48, 199, 103, 186, 191, 162, 225, 40, 57, 100, 221, 38, 141, 194, 101, 59, 137, 212, 150, 102, 61, 228, 233, 237, 4, 19, 42, 220, 98, 250, 96, 140, 128, 248, 242, 235, 101, 251, 105, 122, 154, 159, 139, 74, 244, 29, 96, 94, 220, 179, 120, 112, 80, 252, 244, 247, 152, 246, 210, 181, 45, 72, 221, 69, 159, 26, 185, 178, 64, 242, 207, 26, 225, 113, 170, 80, 242, 73, 143, 229, 240, 1, 247, 181, 237, 200, 116, 22, 77, 160, 77, 176, 10, 89, 229, 143, 133, 9, 200, 66, 102, 178, 3, 201, 205, 186, 7, 223, 130, 110, 158, 21, 239, 224, 186, 215, 225, 133, 152, 174, 101, 159, 22, 169, 29, 236, 99, 61, 191, 222, 228, 38, 50, 177, 111, 23, 222, 223, 236, 31, 218, 78, 37, 141, 196, 223, 227, 119, 174, 36, 182, 210, 22, 131, 138, 56, 103, 15, 126, 60, 136, 11, 200, 52, 70, 24, 129, 75, 248, 10, 244, 67, 127, 101, 110, 205, 106, 238, 185, 64, 209, 103, 28, 166, 173, 65, 2, 26, 33, 191, 104, 152, 171, 206, 80, 231, 99, 31, 236, 157, 67, 161, 59, 202, 92, 139, 40, 88, 9, 65, 26, 191, 107, 202, 184, 215, 186, 1, 58, 49, 37, 165, 62, 32, 199, 107, 191, 18, 116, 119, 108, 134, 205, 18, 96, 254, 27, 247, 187, 126, 253, 95, 23, 239, 149, 202, 24, 217, 183, 168, 171, 171, 54, 110, 142, 228, 188, 54, 151, 4, 205, 96, 246, 197, 12, 132, 158, 16, 25, 69, 223, 119, 51, 243, 218, 214, 193, 117, 186, 18, 16, 175, 69, 232, 194, 117, 39, 175, 167, 229, 22, 74, 255, 88, 234, 28, 167, 158, 14, 136, 81, 53, 57, 146, 76, 47, 24, 109, 74, 100, 216, 202, 222, 7, 227, 43, 148, 226, 205, 167, 182, 43, 152, 205, 162, 245, 213, 21, 1, 148, 49, 87, 22, 31, 201, 83, 30, 186, 244, 118, 169, 160, 147, 253, 151, 36, 190, 154, 128, 247, 187, 222, 214, 83, 236, 62, 173, 0, 28, 160, 131, 135, 170, 27, 123, 170, 160, 20, 114, 239, 240, 152, 44, 0, 52, 11, 4, 20, 87, 95, 41, 231, 37, 202, 128, 172, 21, 184, 28, 76, 58, 134, 2, 60, 97, 202, 76, 89, 184, 21, 183, 227, 61, 136, 109, 92, 245, 165, 98, 171, 210, 234, 145, 122, 251, 238, 86, 113, 26, 101, 210, 209, 13, 178, 70, 205, 155, 165, 127, 235, 219, 125, 146, 114, 219, 183, 129, 79, 251, 171, 42, 180, 194, 137, 24, 177, 53, 191, 104, 41, 172, 67, 121, 94, 208, 69, 55, 87, 128, 95, 121, 121, 46, 226, 95, 188, 172, 164, 147, 57, 33, 162, 2, 153, 187, 54, 179, 73, 150, 84, 146, 176, 3, 147, 7, 162, 3, 210, 239, 179, 192, 191, 245, 81, 32, 195, 91, 170, 1, 22, 216, 241, 84, 95, 123, 123, 25, 84, 151, 201, 77, 13, 50, 63, 104, 57, 171, 223, 158, 242, 10, 77, 178, 214, 227, 134, 130, 60, 191, 157, 99, 28, 114, 69, 76, 135, 124, 89, 15, 244, 169, 32, 213, 162, 8, 211, 192, 30, 112, 27, 66, 125, 148, 55, 4, 95, 220, 55, 149, 125, 216, 191, 217, 204, 160, 136, 71, 220, 81, 143, 164, 40, 11, 47, 179, 43, 241, 191, 57, 131, 153, 197, 85, 89, 65, 180, 138, 104, 177, 59, 193, 243, 72, 156, 190, 85, 212, 10, 162, 123, 246, 14, 0, 7, 75, 61, 153, 73, 95, 212, 240, 44, 9, 88, 138, 105, 216, 80, 216, 18, 143, 7, 79, 14, 174, 200, 105, 252, 152, 121, 71, 35, 222, 108, 153, 75, 109, 53, 94, 116, 134, 211, 202, 182, 103, 238, 45, 90, 231, 66, 244, 103, 228, 91, 8, 4, 113, 148, 235, 107, 182, 53, 38, 153, 115, 204, 161, 122, 45, 16, 204, 166, 93, 15, 210, 237, 246, 190, 64, 200, 125, 210, 155, 125, 117, 7, 108, 107, 8, 231, 162, 170, 68, 122, 228, 40, 6, 209, 147, 122, 63, 8, 197, 126, 222, 199, 1, 147, 83, 204, 136, 12, 176, 123, 184, 94, 73, 6, 234, 31, 154, 241, 102, 48, 218, 120, 182, 167, 87, 157, 186, 51, 22, 147, 236, 106, 139, 185, 69, 216, 26, 128, 66, 132, 233, 174, 100, 0, 101, 115, 42, 2, 114, 213, 103, 255, 5, 45, 58, 101, 206, 160, 149, 58, 204, 204, 236, 207, 155, 204, 56, 239, 40, 224, 170, 108, 45, 145, 202, 69, 44, 178, 9, 185, 240, 212, 57, 193, 156, 86, 14, 80, 156, 237, 66, 4, 13, 216, 128, 68, 155, 84, 180, 126, 237, 227, 89, 65, 218, 209, 194, 84, 8, 249, 119, 134, 31, 93, 213, 242, 27, 96, 235, 52, 71, 235, 54, 176, 96, 215, 120, 22, 95, 73, 168, 201, 60, 126, 186, 50, 78, 152, 138, 47, 225, 249, 26, 55, 19, 75, 168, 204, 255, 20, 5, 229, 49, 19, 217, 126, 92, 204, 197, 134, 94, 98, 113, 124, 51, 234, 52, 105, 156, 174, 99, 109, 232, 84, 191, 178, 75, 123, 157, 196, 83, 210, 175, 212, 14, 182, 65, 28, 18, 82, 190, 167, 76, 243, 232, 202, 32, 87, 61, 97, 229, 231, 191, 213, 139, 45, 149, 86, 98, 112, 109, 240, 118, 64, 242, 228, 221, 179, 228, 175, 34, 253, 102, 199, 124, 139, 42, 156, 159, 144, 216, 11, 163, 211, 187, 174, 210, 149, 238, 234, 151, 1, 50, 55, 6, 50, 183, 196, 19, 87, 152, 151, 2, 46, 214, 65, 75, 12, 163, 4, 163, 235, 253, 135, 82, 1, 184, 200, 176, 65, 48, 202, 53, 124, 120, 91, 188, 215, 43, 32, 190, 252, 131, 132, 3, 75, 123, 202, 27, 95, 163, 244, 185, 99, 184, 36, 220, 28, 80, 128, 20, 82, 195, 37, 245, 90, 19, 142, 243, 85, 92, 252, 201, 7, 124, 195, 19, 248, 105, 141, 149, 253, 172, 10, 55, 21, 157, 158, 225, 108, 65, 134, 14, 181, 212, 119, 231, 95, 61, 159, 37, 45, 150, 51, 5, 122, 159, 173, 251, 27, 62, 215, 104, 81, 187, 167, 73, 207, 238, 241, 116, 55, 160, 201, 36, 160, 70, 1, 240, 150, 29, 160, 123, 154, 151, 79, 234, 189, 88, 108, 144, 102, 232, 202, 112, 183, 205, 188, 202, 91, 163, 129, 133, 65, 74, 18, 114, 220, 40, 204, 254, 77, 193, 166, 255, 114, 40, 17, 159, 93, 23, 220, 187, 112, 156, 98, 160, 132, 114, 187, 52, 43, 129, 56, 122, 248, 30, 243, 162, 2, 188, 154, 236, 176, 142, 121, 53, 53, 202, 117, 110, 236, 31, 35, 203, 111, 248, 226, 212, 108, 243, 6, 32, 16, 93, 129, 109, 164, 41, 27, 192, 42, 243, 6, 250, 1, 52, 82, 232, 23, 144, 171, 67, 105, 26, 106, 133, 0, 144, 15, 98, 125, 220, 39, 142, 243, 93, 165, 173, 153, 202, 242, 29, 85, 10, 57, 208, 235, 180, 58, 220, 46, 93, 128, 4, 67, 100, 167, 76, 49, 54, 208, 128, 247, 201, 194, 236, 38, 48, 135, 46, 53, 24, 188, 129, 127, 156, 102, 196, 2, 120, 154, 176, 160, 226, 2, 82, 149, 232, 106, 84, 93, 249, 166, 173, 127, 252, 145, 206, 225, 212, 103, 236, 5, 192, 199, 158, 171, 221, 84, 44, 82, 38, 220, 75, 206, 178, 73, 68, 56, 147, 77, 123, 227, 0, 118, 207, 201, 207, 101, 118, 141, 142, 80, 186, 11, 44, 28, 132, 254, 177, 169, 176, 197, 243, 48, 253, 107, 88, 189, 209, 148, 190, 205, 187, 183, 73, 235, 199, 83, 220, 83, 203, 159, 101, 19, 211, 104, 177, 7, 75, 92, 199, 81, 178, 85, 23, 156, 146, 95, 192, 108, 206, 10, 204, 142, 242, 149, 108, 171, 193, 14, 16, 85, 250, 10, 72, 95, 49, 88, 179, 177, 192, 235, 65, 75, 28, 56, 193, 224, 238, 139, 236, 75, 101, 52, 175, 79, 163, 94, 236, 224, 85, 122, 29, 211, 189, 61, 172, 88, 251, 31, 158, 213, 217, 66, 106, 51, 109, 153, 44, 213, 40, 191, 105, 164, 59, 127, 234, 217, 43, 169, 116, 221, 87, 217, 34, 145, 245, 7, 64, 204, 86, 116, 53, 216, 163, 198, 69, 169, 182, 183, 221, 40, 57, 82, 120, 255, 140, 157, 142, 234, 211, 9, 214, 217, 228, 52, 13, 144, 126, 89, 120, 22, 175, 12, 142, 201, 55, 57, 247, 20, 212, 8, 221, 212, 75, 174, 139, 193, 6, 123, 86, 156, 122, 46, 99, 249, 199, 86, 214, 17, 180, 87, 10, 151, 184, 61, 192, 144, 191, 5, 91, 68, 182, 254, 183, 29, 115, 122, 61, 163, 97, 96, 120, 95, 135, 192, 10, 27, 196, 144, 94, 116, 200, 168, 214, 160, 122, 62, 21, 171, 48, 171, 168, 152, 254, 131, 45, 127, 176, 242, 57, 73, 176, 5, 34, 191, 203, 141, 135, 147, 182, 218, 87, 99, 13, 31, 152, 11, 73, 141, 230, 60, 61, 225, 56, 187, 5, 46, 198, 0, 200, 85, 182, 203, 129, 105, 198, 32, 40, 1, 199, 176, 74, 161, 208, 198, 71, 102, 166, 155, 61, 84, 241, 110, 139, 72, 19, 85, 201, 230, 214, 173, 106, 39, 234, 30, 226, 169, 118, 201, 189, 26, 120, 27, 36, 193, 88, 36, 98, 0, 114, 132, 57, 249, 112, 194, 208, 56, 61, 217, 48, 212, 220, 236, 190, 109, 65, 138, 151, 180, 218, 46, 83, 210, 182, 99, 197, 17, 241, 45, 139, 60, 77, 6, 60, 110, 232, 237, 13, 179, 238, 181, 116, 29, 82, 163, 93, 152, 159, 230, 227, 58, 63, 17, 7, 254, 221, 139, 231, 99, 77, 91, 43, 159, 124, 218, 53, 139, 91, 248, 202, 169, 237, 2, 86, 199, 202, 17, 2, 81, 84, 140, 3, 148, 82, 237, 221, 43, 37, 185, 51, 180, 158, 25, 77, 242, 84, 43, 169, 157, 184, 213, 75, 63, 195, 130, 80, 172, 60, 170, 53, 63, 84, 132, 92, 176, 204, 243, 169, 42, 192, 134, 217, 71, 73, 100, 23, 108, 77, 235, 138, 241, 177, 67, 156, 78, 189, 178, 153, 42, 147, 219, 10, 203, 15, 186, 31, 61, 146, 189, 96, 45, 164, 58, 184, 76, 54, 40, 146, 241, 159, 220, 235, 205, 238, 134, 58, 77, 204, 96, 112, 108, 154, 21, 52, 130, 110, 189, 102, 192, 149, 143, 42, 77, 221, 224, 36, 185, 221, 223, 161, 192, 28, 255, 70, 180, 60, 48, 214, 201, 162, 237, 62, 160, 12, 26, 151, 194, 4, 200, 26, 238, 3, 74, 98, 38, 38, 142, 54, 36, 146, 43, 78, 85, 24, 245, 115, 221, 252, 211, 76, 102, 254, 11, 214, 48, 34, 86, 60, 148, 41, 33, 225, 183, 243, 26, 200, 122, 232, 95, 91, 47, 71, 113, 24, 93, 163, 41, 36, 71, 137, 106, 163, 145, 13, 128, 162, 41, 128, 92, 179, 34, 206, 22, 61, 6, 8, 170, 72, 234, 131, 90, 25, 171, 63, 55, 88, 210, 120, 19, 187, 95, 182, 23, 10, 152, 245, 162, 71, 168, 218, 104, 18, 224, 21, 110, 74, 3, 58, 32, 227, 217, 189, 219, 171, 37, 222, 207, 21, 174, 91, 42, 188, 199, 223, 200, 121, 255, 26, 222, 242, 27, 228, 88, 238, 56, 70, 26, 4, 254, 138, 247, 57, 114, 205, 85, 59, 76, 38, 182, 249, 204, 41, 23, 75, 120, 195, 149, 252, 212, 89, 32, 82, 136, 152, 132, 16, 32, 198, 170, 29, 43, 125, 216, 234, 129, 112, 191, 83, 173, 189, 126, 240, 74, 113, 55, 173, 199, 172, 213, 11, 73, 188, 241, 146, 46, 87, 167, 87, 205, 190, 216, 175, 141, 12, 152, 75, 236, 166, 141, 116, 92, 12, 66, 28, 2, 209, 190, 238, 9, 82, 178, 29, 194, 247, 158, 208, 172, 228, 212, 139, 7, 73, 47, 45, 195, 101, 22, 107, 95, 206, 212, 131, 45, 91, 92, 117, 12, 211, 13, 243, 103, 240, 64, 99, 22, 121, 241, 206, 154, 27, 146, 170, 26, 108, 133, 82, 20, 179, 118, 88, 148, 4, 72, 146, 28, 84, 113, 38, 16, 189, 76, 14, 132, 82, 109, 222, 39, 107, 185, 116, 143, 61, 214, 65, 82, 173, 4, 175, 209, 50, 201, 112, 123, 0, 248, 16, 95, 229, 142, 0, 39, 186, 57, 64, 35, 117, 95, 186, 83, 177, 5, 131, 64, 241, 217, 11, 170, 198, 26, 29, 122, 190, 239, 192, 140, 163, 183, 103, 100, 97, 129, 103, 200, 145, 245, 74, 250, 249, 10, 0, 177, 167, 253, 142, 136, 217, 183, 153, 141, 58, 153, 13, 87, 168, 212, 164, 182, 199, 98, 206, 242, 206, 21, 156, 140, 78, 168, 121, 141, 94, 242, 67, 153, 53, 55, 177, 103, 121, 188, 159, 59, 46, 173, 252, 36, 24, 137, 201, 154, 26, 197, 215, 225, 140, 155, 154, 205, 205, 99, 1, 108, 81, 128, 192, 178, 77, 16, 221, 196, 162, 139, 14, 229, 57, 52, 119, 186, 240, 219, 137, 163, 123, 70, 182, 103, 190, 106, 214, 18, 38, 253, 246, 210, 78, 223, 109, 3, 248, 113, 13, 196, 143, 218, 219, 149, 12, 52, 192, 153, 130, 192, 14, 76, 13, 112, 137, 175, 66, 52, 65, 129, 61, 33, 187, 11, 146, 208, 173, 3, 115, 40, 165, 52, 97, 241, 163, 110, 31, 73, 125, 89, 153, 150, 136, 76, 11, 206, 94, 136, 18, 46, 216, 174, 196, 16, 204, 110, 153, 232, 33, 139, 76, 128, 247, 214, 120, 186, 111, 1, 210, 117, 232, 118, 64, 154, 147, 186, 144, 160, 67, 246, 245, 44, 77, 210, 210, 125, 86, 11, 20, 68, 20, 203, 170, 48, 125, 28, 93, 175, 50, 96, 212, 200, 73, 0, 74, 48, 84, 146, 90, 179, 22, 171, 190, 190, 236, 14, 178, 102, 82, 122, 120, 86, 1, 11, 140, 105, 250, 118, 188, 23, 101, 40, 194, 91, 184, 80, 140, 62, 123, 213, 37, 157, 51, 153, 40, 158, 39, 232, 188, 81, 145, 9, 202, 2, 15, 80, 144, 79, 61, 57, 51, 73, 92, 70, 221, 161, 112, 239, 38, 76, 33, 192, 223, 67, 77, 27, 174, 168, 169, 85, 5, 15, 108, 216, 171, 24, 23, 152, 197, 27, 220, 161, 70, 9, 167, 146, 153, 183, 153, 6, 160, 60, 115, 71, 51, 84, 148, 82, 162, 149, 33, 141, 170, 214, 135, 77, 250, 26, 115, 119, 59, 21, 220, 138, 72, 248, 98, 214, 45, 245, 163, 39, 190, 207, 89, 193, 115, 164, 36, 83, 233, 246, 195, 234, 64, 224, 232, 135, 101, 92, 216, 149, 36, 166, 179, 113, 213, 60, 151, 94, 255, 65, 100, 56, 28, 6, 28, 112, 80, 177, 29, 201, 176, 147, 144, 91, 65, 9, 29, 38, 178, 75, 88, 216, 234, 206, 215, 115, 65, 167, 21, 7, 237, 229, 6, 120, 166, 91, 135, 233, 77, 4, 27, 222, 248, 172, 74, 97, 130, 38, 54, 189, 91, 45, 88, 2, 198, 136, 124, 18, 149, 30, 188, 7, 176, 223, 74, 130, 109, 104, 243, 102, 90, 167, 154, 99, 148, 235, 125, 177, 202, 11, 117, 5, 26, 24, 115, 117, 73, 131, 113, 144, 18, 19, 94, 134, 140, 22, 3, 165, 200, 132, 195, 208, 183, 183, 101, 21, 145, 188, 143, 87, 184, 15, 86, 56, 185, 168, 194, 102, 226, 47, 52, 218, 151, 110, 226, 170, 131, 76, 176, 193, 234, 40, 6, 78, 23, 184, 74, 174, 206, 216, 162, 117, 233, 40, 39, 223, 224, 168, 94, 16, 100, 11, 30, 230, 29, 122, 179, 160, 205, 173, 67, 181, 123, 1, 212, 90, 80, 109, 11, 89, 184, 115, 98, 247, 245, 209, 181, 119, 111, 42, 19, 235, 72, 60, 206, 254, 19, 6, 233, 250, 171, 112, 134, 194, 114, 64, 82, 107, 247, 133, 114, 112, 6, 10, 140, 202, 239, 84, 214, 173, 104, 183, 126, 74, 37, 139, 245, 182, 19, 79, 226, 170, 54, 15, 230, 56, 66, 97, 203, 120, 238, 10, 132, 51, 178, 219, 222, 238, 230, 89, 91, 120, 64, 67, 249, 102, 114, 35, 157, 235, 248, 156, 150, 176, 109, 169, 3, 108, 160, 149, 10, 255, 132, 74, 9, 23, 36, 29, 237, 62, 67, 208, 173, 161, 205, 132, 198, 205, 110, 138, 134, 15, 126, 177, 132, 69, 9, 220, 60, 167, 96, 49, 105, 107, 103, 239, 72, 81, 137, 168, 27, 207, 80, 71, 24, 125, 241, 133, 237, 97, 137, 122, 65, 63, 97, 25, 115, 58, 109, 183, 203, 13, 62, 254, 248, 11, 160, 164, 100, 177, 77, 145, 248, 117, 222, 195, 195, 245, 160, 245, 167, 72, 13, 85, 146, 70, 44, 247, 196, 181, 156, 235, 51, 124, 211, 31, 247, 31, 248, 81, 162, 36, 170, 88, 148, 176, 73, 12, 184, 155, 57, 191, 126, 57, 89, 59, 28, 165, 212, 177, 6, 46, 17, 216, 52, 217, 11, 239, 208, 173, 103, 225, 29, 228, 69, 99, 87, 162, 82, 37, 52, 69, 248, 148, 19, 146, 239, 146, 143, 25, 201, 243, 214, 7, 63, 138, 237, 42, 92, 15, 240, 55, 41, 157, 178, 134, 213, 136, 217, 219, 205, 41, 198, 139, 140, 69, 169, 28, 249, 164, 39, 175, 35, 7, 42, 249, 121, 85, 27, 83, 50, 112, 115, 93, 170, 141, 186, 23, 221, 85, 33, 141, 228, 28, 253, 15, 19, 184, 118, 46, 180, 39, 230, 151, 143, 243, 159, 84, 228, 10, 252, 143, 124, 16, 187, 254, 213, 170, 133, 20, 181, 14, 219, 205, 72, 119, 226, 90, 205, 235, 175, 79, 134, 83, 135, 207, 11, 163, 30, 116, 219, 33, 43, 213, 208, 118, 226, 219, 211, 212, 76, 96, 179, 217, 213, 39, 31, 246, 128, 126, 57, 32, 57, 6, 40, 16, 216, 252, 207, 24, 214, 32, 117, 222, 211, 14, 76, 4, 49, 119, 144, 204, 167, 219, 212, 181, 46, 36, 86, 79, 137, 194, 253, 206, 198, 112, 94, 120, 173, 110, 33, 148, 204, 236, 145, 156, 27, 248, 90, 99, 87, 179, 140, 128, 168, 182, 110, 38, 219, 128, 174, 72, 27, 138, 0, 2, 239, 183, 214, 181, 187, 186, 175, 184, 87, 240, 15, 6, 171, 182, 95, 163, 166, 133, 254, 172, 215, 134, 115, 38, 160, 85, 15, 0, 73, 187, 108, 241, 162, 58, 124, 192, 186, 16, 91, 197, 3, 6, 139, 172, 84, 115, 50, 105, 20, 74, 151, 200, 164, 157, 35, 47, 137, 250, 239, 229, 238, 255, 142, 36, 156, 248, 33, 207, 92, 210, 87, 99, 152, 168, 26, 84, 173, 251, 147, 234, 94, 20, 207, 67, 73, 128, 40, 94, 127, 168, 75, 141, 240, 47, 110, 199, 222, 174, 163, 34, 5, 231, 201, 17, 161, 112, 64, 74, 135, 169, 51, 98, 238, 244, 35, 162, 108, 72, 104, 234, 52, 182, 12, 79, 87, 93, 13, 155, 176, 55, 79, 109, 111, 86, 178, 63, 143, 240, 223, 81, 132, 52, 208, 14, 164, 164, 227, 33, 122, 80, 14, 231, 255, 1, 100, 102, 24, 216, 32, 128, 36, 116, 65, 189, 5, 111, 119, 105, 85, 185, 10, 59, 148, 75, 31, 43, 94, 146, 190, 164, 9, 107, 10, 189, 153, 243, 76, 44, 87, 82, 212, 24, 113, 34, 126, 132, 179, 158, 250, 242, 177, 128, 244, 191, 187, 78, 200, 91, 252, 89, 69, 238, 22, 204, 145, 34, 107, 141, 199, 168, 102, 99, 186, 154, 235, 181, 242, 225, 59, 44, 219, 63, 193, 228, 44, 149, 178, 130, 18, 238, 36, 172, 229, 250, 223, 209, 122, 255, 220, 102, 78, 15, 123, 219, 174, 255, 196, 74, 70, 207, 5, 127, 208, 67, 113, 87, 189, 240, 97, 19, 201, 210, 211, 217, 134, 240, 165, 255, 159, 181, 43, 248, 70, 214, 28, 33, 102, 53, 161, 190, 217, 85, 1, 144, 250, 24, 143, 30, 243, 74, 117, 18, 57, 126, 42, 254, 64, 57, 41, 202, 156, 107, 234, 102, 209, 31, 253, 182, 42, 20, 106, 152, 131, 186, 130, 41, 195, 11, 166, 139, 189, 123, 75, 148, 203, 226, 214, 73, 22, 240, 186, 246, 137, 116, 198, 146, 169, 117, 92, 90, 253, 149, 165, 66, 59, 148, 203, 253, 3, 123, 29, 190, 183, 47, 73, 229, 105, 166, 190, 97, 129, 204, 155, 124, 112, 167, 5, 6, 155, 54, 176, 244, 147, 249, 136, 108, 10, 66, 225, 168, 14, 16, 16, 111, 50, 228, 80, 128, 121, 94, 37, 214, 129, 74, 35, 6, 72, 192, 65, 44, 81, 133, 130, 252, 45, 79, 112, 232, 148, 81, 105, 84, 118, 58, 176, 200, 56, 54, 8, 30, 131, 193, 200, 43, 170, 33, 10, 136, 175, 52, 183, 186, 171, 18, 77, 13, 231, 173, 208, 232, 119, 162, 148, 29, 44, 72, 88, 182, 144, 91, 177, 89, 173, 68, 14, 108, 48, 19, 152, 223, 105, 45, 115, 238, 188, 48, 75, 66, 177, 46, 155, 211, 6, 229, 42, 71, 128, 51, 80, 61, 147, 167, 111, 77, 157, 218, 131, 114, 229, 29, 136, 206, 155, 66, 203, 71, 187, 145, 227, 166, 35, 242, 229, 207, 29, 13, 163, 169, 172, 79, 7, 190, 188, 25, 66, 99, 86, 225, 69, 202, 14, 167, 41, 50, 22, 150, 214, 252, 21, 195, 22, 99, 92, 86, 29, 32, 213, 45, 183, 10, 167, 187, 36, 129, 133, 180, 18, 190, 37, 142, 108, 191, 64, 196, 33, 47, 34, 1, 120, 60, 29, 86, 134, 43, 194, 248, 75, 227, 66, 105, 37, 82, 191, 109, 31, 53, 1, 52, 143, 19, 132, 234, 31, 230, 207, 196, 204, 239, 46, 146, 163, 145, 241, 248, 166, 234, 7, 59, 47, 147, 245, 30, 247, 19, 80, 168, 37, 119, 28, 252, 32, 105, 5, 54, 144, 191, 115, 183, 242, 65, 89, 118, 149, 176, 73, 153, 241, 228, 143, 181, 213, 74, 19, 122, 180, 227, 100, 17, 228, 12, 178, 195, 237, 225, 69, 96, 82, 5, 15, 81, 241, 123, 231, 148, 142, 186, 65, 62, 226, 6, 9, 68, 6, 91, 67, 252, 162, 25, 8, 251, 6, 31, 171, 73, 188, 19, 231, 27, 191, 199, 32, 226, 163, 143, 53, 154, 205, 248, 34, 80, 40, 3, 101, 56, 109, 235, 94, 221, 102, 107, 39, 231, 9, 6, 132, 142, 170, 191, 123, 71, 144, 91, 228, 60, 152, 168, 75, 230, 72, 89, 179, 149, 2, 127, 122, 100, 74, 209, 185, 109, 223, 215, 135, 174, 196, 11, 246, 4, 15, 23, 17, 90, 42, 101, 55, 216, 192, 22, 50, 192, 240, 113, 9, 144, 143, 175, 72, 233, 131, 208, 167, 239, 94, 242, 125, 194, 114, 96, 65, 100, 45, 96, 31, 209, 234, 11, 203, 102, 178, 90, 191, 136, 211, 232, 242, 146, 48, 100, 14, 195, 241, 87, 73, 31, 180, 172, 60, 12, 233, 21, 143, 79, 124, 114, 45, 107, 147, 212, 230, 82, 105, 176, 23, 131, 145, 126, 14, 92, 80, 219, 21, 24, 146, 176, 38, 254, 87, 0, 75, 7, 14, 65, 184, 179, 203, 126, 37, 201, 74, 230, 140, 81, 236, 57, 243, 226, 92, 96, 84, 240, 114, 207, 119, 144, 169, 226, 217, 228, 214, 177, 26, 222, 17, 74, 4, 100, 45, 165, 240, 60, 182, 146, 7, 175, 157, 109, 8, 6, 250, 117, 243, 136, 30, 99, 99, 14, 193, 55, 146, 194, 0, 57, 144, 177, 12, 3, 118, 78, 152, 160, 42, 38, 182, 37, 32, 177, 154, 68, 225, 56, 13, 54, 172, 247, 109, 26, 255, 236, 196, 15, 221, 102, 247, 82, 180, 165, 35, 120, 190, 226, 209, 16, 62, 79, 233, 209, 162, 203, 93, 102, 99, 115, 118, 62, 217, 204, 33, 150, 16, 90, 104, 30, 9, 184, 44, 141, 97, 11, 55, 241, 164, 218, 69, 202, 12, 34, 1, 244, 156, 194, 251, 245, 115, 106, 73, 45, 107, 209, 44, 224, 78, 229, 131, 229, 227, 47, 131, 36, 239, 61, 12, 242, 254, 21, 213, 19, 198, 250, 218, 87, 52, 143, 128, 55, 213, 113, 220, 95, 169, 2, 191, 158, 88, 198, 113, 144, 82, 140, 231, 30, 104, 106, 225, 102, 86, 72, 130, 33, 151, 37, 85, 38, 248, 188, 145, 242, 138, 166, 61, 162, 133, 42, 62, 139, 134, 69, 68, 173, 36, 18, 58, 68, 36, 206, 191, 183, 116, 177, 32, 105, 170, 112, 7, 229, 190, 245, 162, 28, 105, 222, 192, 150, 250, 121, 194, 102, 145, 110, 247, 137, 89, 89, 1, 195, 175, 164, 161, 66, 239, 110, 193, 111, 64, 96, 19, 168, 90, 246, 35, 220, 141, 230, 205, 251, 133, 83, 152, 234, 87, 213, 250, 126, 133, 189, 209, 54, 205, 224, 240, 105, 187, 90, 42, 194, 76, 62, 163, 62, 98, 194, 251, 2, 29, 119, 126, 186, 108, 218, 171, 236, 77, 89, 240, 141, 220, 240, 240, 102, 144, 194, 66, 101, 90, 242, 219, 232, 75, 125, 248, 233, 70, 181, 33, 191, 37, 138, 216, 119, 252, 195, 12, 139, 226, 246, 204, 50, 31, 21, 50, 246, 98, 56, 213, 10, 193, 46, 66, 59, 122, 89, 162, 69, 176, 38, 83, 96, 180, 28, 249, 70, 228, 66, 181, 170, 96, 47, 225, 90, 143, 75, 17, 83, 17, 173, 183, 250, 185, 173, 42, 169, 174, 64, 184, 152, 158, 250, 137, 150, 74, 101, 206, 82, 254, 173, 14, 34, 250, 248, 202, 102, 79, 7, 15, 58, 179, 156, 217, 233, 11, 253, 1, 230, 237, 84, 90, 227, 112, 159, 230, 205, 10, 252, 59, 11, 197, 35, 67, 76, 158, 192, 252, 46, 84, 20, 35, 123, 132, 129, 27, 239, 32, 32, 196, 100, 200, 74, 138, 0, 69, 173, 144, 24, 221, 243, 59, 128, 61, 40, 224, 247, 168, 142, 167, 191, 213, 210, 217, 23, 133, 44, 169, 141, 129, 55, 121, 238, 109, 186, 140, 110, 20, 111, 0, 236, 89, 37, 5, 151, 25, 179, 108, 7, 53, 149, 220, 231, 33, 245, 227, 194, 159, 22, 40, 103, 158, 174, 109, 118, 212, 233, 123, 207, 36, 32, 200, 179, 108, 228, 115, 123, 105, 222, 146, 189, 185, 213, 220, 98, 69, 172, 148, 80, 53, 160, 149, 61, 139, 25, 186, 206, 48, 237, 20, 73, 88, 4, 196, 253, 14, 167, 129, 247, 175, 84, 176, 85, 140, 120, 15, 230, 161, 199, 31, 203, 206, 97, 18, 220, 198, 157, 239, 88, 131, 189, 207, 157, 6, 109, 218, 65, 114, 171, 192, 221, 201, 66, 228, 68, 8, 31, 98, 150, 106, 130, 227, 165, 90, 182, 101, 43, 54, 5, 67, 42, 20, 17, 15, 136, 114, 112, 12, 3, 173, 161, 73, 70, 0, 76, 124, 221, 218, 101, 78, 90, 200, 218, 2, 63, 174, 176, 21, 116, 15, 17, 52, 144, 197, 224, 119, 121, 219, 17, 204, 165, 8, 142, 35, 249, 23, 123, 1, 102, 49, 181, 68, 184, 118, 188, 7, 11, 164, 10, 43, 164, 31, 81, 74, 60, 123, 231, 136, 202, 126, 171, 71, 56, 60, 66, 243, 39, 130, 234, 35, 178, 67, 234, 231, 44, 181, 152, 167, 182, 42, 82, 17, 236, 67, 154, 142, 156, 199, 128, 85, 147, 204, 83, 26, 150, 82, 159, 150, 174, 98, 226, 183, 28, 245, 79, 217, 98, 221, 80, 60, 255, 36, 221, 170, 186, 47, 57, 124, 211, 58, 194, 45, 122, 88, 100, 11, 23, 50, 136, 116, 223, 70, 143, 167, 216, 1, 24, 149, 7, 130, 13, 190, 69, 125, 64, 145, 180, 33, 18, 235, 22, 245, 85, 219, 99, 220, 252, 125, 87, 37, 251, 102, 88, 191, 151, 44, 187, 3, 179, 20, 175, 19, 167, 83, 179, 152, 114, 187, 132, 182, 218, 184, 92, 24, 241, 213, 128, 69, 157, 201, 142, 114, 233, 125, 212, 182, 25, 212, 178, 22, 238, 179, 124, 104, 92, 8, 8, 213, 76, 146, 252, 231, 206, 96, 120, 33, 241, 240, 97, 57, 58, 171, 25, 217, 62, 81, 237, 145, 234, 71, 213, 49, 214, 17, 138, 83, 181, 176, 208, 95, 23, 88, 96, 72, 169, 193, 195, 10, 135, 125, 239, 64, 151, 92, 15, 120, 141, 122, 178, 169, 225, 138, 33, 50, 94, 138, 55, 14, 140, 93, 235, 240, 230, 51, 70, 176, 98, 22, 201, 188, 217, 253, 237, 75, 82, 137, 244, 6, 10, 173, 234, 87, 0, 73, 28, 171, 184, 167, 249, 229, 99, 153, 40, 173, 126, 67, 139, 89, 67, 218, 35, 254, 129, 102, 207, 173, 178, 86, 225, 222, 232, 175, 67, 23, 163, 99, 0, 100, 230, 228, 127, 233, 234, 136, 139, 236, 122, 51, 130, 220, 59, 46, 120, 131, 243, 142, 56, 232, 150, 54, 192, 221, 226, 47, 66, 224, 227, 112, 133, 34, 169, 118, 149, 92, 101, 105, 219, 244, 132, 246, 33, 92, 8, 137, 145, 47, 252, 129, 74, 82, 202, 82, 134, 162, 106, 118, 111, 122, 101, 185, 169, 16, 52, 99, 144, 228, 221, 253, 196, 11, 117, 186, 39, 67, 254, 137, 2, 245, 143, 145, 17, 109, 134, 117, 98, 168, 124, 97, 111, 51, 1, 170, 248, 69, 163, 233, 80, 86, 18, 36, 164, 114, 215, 121, 115, 77, 57, 19, 233, 139, 180, 14, 58, 232, 36, 64, 235, 70, 239, 15, 81, 98, 248, 15, 116, 18, 155, 78, 1, 44, 186, 219, 155, 33, 180, 112, 166, 244, 215, 129, 69, 240, 198, 151, 85, 127, 208, 190, 192, 255, 232, 157, 225, 178, 46, 141, 216, 160, 198, 87, 131, 94, 212, 170, 16, 178, 232, 60, 229, 194, 141, 135, 26, 169, 53, 111, 134, 166, 39, 115, 197, 215, 93, 112, 139, 61, 21, 67, 228, 80, 19, 123, 49, 168, 190, 186, 222, 165, 7, 30, 244, 133, 90, 207, 96, 221, 215, 53, 131, 58, 226, 32, 15, 172, 154, 142, 5, 131, 125, 231, 102, 201, 207, 220, 55, 131, 104, 116, 113, 2, 246, 240, 129, 24, 67, 232, 184, 91, 190, 105, 196, 247, 120, 213, 217, 33, 147, 129, 141, 45, 158, 90, 142, 150, 51, 186, 109, 223, 191, 210, 230, 3, 124, 88, 81, 249, 38, 102, 151, 39, 129, 25, 52, 98, 204, 204, 85, 184, 4, 117, 99, 91, 40, 129, 207, 201, 42, 164, 190, 237, 167, 61, 51, 215, 116, 12, 28, 4, 23, 172, 253, 98, 80, 164, 72, 44, 231, 226, 181, 248, 66, 24, 65, 228, 150, 68, 183, 124, 220, 233, 148, 186, 135, 169, 180, 48, 170, 79, 155, 43, 93, 232, 78, 88, 22, 187, 248, 100, 209, 130, 51, 53, 249, 247, 44, 67, 151, 161, 70, 49, 121, 89, 50, 32, 231, 107, 36, 19, 119, 224, 28, 229, 185, 192, 23, 179, 230, 12, 58, 247, 140, 117, 72, 243, 138, 180, 119, 209, 65, 53, 100, 154, 255, 199, 92, 143, 45, 151, 97, 180, 100, 98, 96, 42, 127, 22, 82, 20, 31, 91, 166, 142, 152, 190, 178, 178, 82, 193, 166, 13, 140, 2, 199, 90, 68, 173, 184, 56, 67, 166, 59, 193, 183, 224, 79, 59, 87, 117, 24, 2, 232, 91, 117, 235, 181, 74, 32, 144, 71, 179, 9, 17, 37, 173, 136, 118, 171, 236, 215, 134, 123, 193, 80, 204, 30, 112, 239, 120, 197, 130, 64, 241, 76, 57, 151, 169, 56, 44, 207, 73, 213, 232, 125, 56, 222, 87, 185, 91, 64, 221, 229, 28, 222, 182, 160, 200, 108, 125, 141, 94, 145, 21, 14, 4, 10, 7, 134, 161, 203, 217, 92, 90, 141, 111, 137, 74, 208, 176, 33, 145, 44, 65, 143, 233, 178, 27, 241, 94, 85, 10, 208, 29, 191, 225, 128, 250, 120, 164, 111, 139, 92, 66, 131, 49, 66, 142, 115, 14, 195, 101, 178, 19, 9, 108, 27, 112, 47, 56, 25, 244, 163, 248, 140, 179, 211, 136, 213, 136, 92, 169, 125, 186, 255, 67, 46, 101, 168, 18, 18, 114, 157, 60, 75, 190, 224, 15, 48, 80, 24, 243, 46, 243, 47, 194, 197, 53, 233, 74, 168, 252, 67, 39, 236, 192, 144, 239, 62, 242, 48, 192, 1, 73, 209, 234, 170, 120, 139, 65, 217, 77, 154, 215, 174, 18, 88, 132, 24, 5, 7, 142, 17, 216, 219, 2, 201, 171, 156, 66, 189, 107, 78, 25, 13, 170, 225, 246, 137, 67, 221, 227, 155, 22, 87, 62, 67, 230, 82, 130, 153, 204, 27, 160, 183, 154, 96, 202, 226, 76, 229, 30, 30, 87, 135, 124, 73, 153, 12, 82, 66, 87, 249, 189, 139, 126, 70, 251, 248, 165, 2, 103, 164, 82, 3, 66, 1, 191, 3, 122, 106, 13, 0, 114, 94, 154, 221, 27, 92, 160, 176, 196, 201, 45, 243, 213, 94, 213, 180, 208, 9, 245, 101, 110, 108, 4, 114, 182, 65, 72, 96, 30, 94, 63, 99, 148, 75, 146, 58, 159, 96, 139, 167, 237, 194, 21, 219, 199, 92, 235, 110, 215, 80, 173, 192, 137, 175, 99, 230, 174, 60, 166, 24, 110, 153, 215, 61, 3, 181, 197, 231, 130, 75, 232, 169, 138, 76, 197, 127, 108, 108, 187, 74, 96, 128, 238, 44, 233, 39, 175, 61, 95, 251, 7, 115, 155, 185, 115, 144, 72, 145, 95, 116, 165, 78, 219, 9, 67, 45, 44, 137, 255, 186, 140, 91, 26, 89, 232, 31, 77, 172, 103, 163, 77, 65, 193, 93, 238, 74, 116, 131, 190, 157, 170, 111, 237, 158, 253, 88, 17, 89, 31, 93, 21, 196, 243, 148, 65, 132, 46, 212, 213, 111, 77, 56, 68, 120, 232, 128, 207, 175, 88, 155, 250, 113, 147, 83, 87, 143, 28, 0, 238, 222, 72, 161, 156, 125, 239, 15, 51, 152, 124, 6, 162, 77, 82, 216, 15, 235, 218, 173, 202, 85, 41, 100, 97, 17, 136, 55, 133, 105, 237, 188, 102, 39, 92, 29, 135, 42, 65, 42, 46, 137, 181, 50, 71, 145, 66, 121, 225, 225, 226, 188, 13, 11, 228, 149, 13, 222, 212, 218, 116, 192, 0, 27, 131, 84, 32, 190, 155, 192, 139, 91, 139, 169, 120, 146, 240, 55, 202, 236, 120, 28, 64, 249, 244, 248, 207, 68, 109, 204, 79, 165, 237, 244, 206, 114, 173, 69, 68, 128, 157, 214, 217, 18, 171, 24, 189, 61, 145, 136, 239, 99, 84, 151, 30, 144, 249, 149, 125, 217, 51, 109, 29, 226, 252, 252, 0, 234, 25, 62, 33, 196, 194, 215, 188, 250, 121, 32, 173, 163, 178, 94, 212, 191, 202, 159, 231, 100, 82, 84, 172, 223, 223, 67, 162, 69, 109, 23, 67, 101, 91, 21, 237, 161, 19, 9, 35, 247, 197, 137, 190, 182, 41, 52, 102, 178, 139, 179, 88, 43, 143, 9, 244, 171, 142, 111, 50, 249, 49, 166, 64, 52, 133, 19, 135, 197, 4, 106, 8, 199, 21, 81, 37, 140, 249, 147, 175, 230, 206, 35, 67, 28, 112, 84, 93, 138, 42, 236, 127, 83, 232, 24, 251, 249, 247, 229, 136, 199, 131, 181, 3, 187, 153, 185, 48, 91, 146, 110, 193, 204, 236, 242, 167, 250, 228, 144, 50, 10, 175, 112, 152, 68, 71, 52, 120, 243, 134, 250, 217, 100, 0, 57, 104, 166, 12, 98, 147, 32, 10, 249, 248, 76, 224, 60, 0, 195, 200, 181, 57, 170, 54, 75, 103, 209, 141, 111, 61, 71, 112, 247, 192, 215, 115, 129, 100, 196, 54, 66, 220, 80, 186, 48, 69, 104, 113, 54, 234, 213, 151, 15, 93, 227, 146, 153, 237, 120, 114, 25, 102, 138, 248, 253, 245, 13, 195, 211, 117, 118, 36, 112, 130, 214, 120, 20, 87, 61, 128, 106, 185, 112, 104, 235, 231, 230, 15, 199, 111, 182, 134, 114, 176, 216, 246, 51, 196, 52, 180, 215, 88, 181, 18, 122, 241, 141, 60, 172, 95, 176, 32, 234, 240, 193, 4, 158, 46, 242, 137, 101, 255, 211, 63, 37, 174, 34, 15, 226, 83, 205, 33, 64, 21, 37, 58, 34, 185, 199, 139, 165, 150, 177, 49, 24, 102, 89, 137, 166, 12, 172, 250, 182, 172, 241, 51, 60, 102, 179, 165, 205, 112, 103, 68, 68, 51, 226, 6, 193, 251, 95, 250, 225, 106, 105, 47, 87, 207, 9, 179, 223, 216, 249, 67, 19, 241, 39, 182, 13, 237, 98, 171, 211, 29, 106, 52, 54, 33, 64, 32, 191, 112, 147, 53, 138, 30, 147, 140, 0, 172, 220, 249, 171, 162, 223, 139, 49, 106, 199, 219, 122, 154, 240, 4, 131, 59, 186, 106, 230, 13, 146, 247, 68, 204, 8, 92, 227, 57, 39, 124, 202, 178, 174, 178, 120, 201, 80, 72, 24, 95, 52, 101, 80, 161, 115, 252, 219, 123, 82, 254, 79, 85, 233, 103, 191, 86, 83, 226, 61, 46, 11, 170, 28, 169, 255, 55, 221, 156, 187, 148, 26, 109, 34, 83, 116, 227, 252, 62, 217, 121, 222, 99, 242, 123, 106, 101, 100, 177, 19, 157, 100, 5, 114, 246, 153, 17, 142, 142, 254, 216, 240, 127, 37, 121, 240, 14, 198, 46, 6, 232, 148, 50, 74, 39, 48, 176, 186, 209, 109, 94, 21, 105, 169, 219, 60, 12, 52, 80, 150, 22, 22, 131, 107, 139, 26, 203, 123, 185, 42, 28, 96, 165, 117, 209, 190, 94, 97, 71, 129, 48, 248, 35, 226, 19, 211, 208, 222, 85, 140, 24, 163, 228, 229, 214, 16, 58, 64, 2, 107, 3, 129, 214, 0, 211, 234, 81, 0, 173, 103, 51, 44, 248, 97, 25, 167, 162, 118, 21, 100, 143, 152, 166, 223, 93, 85, 122, 222, 192, 101, 207, 166, 23, 58, 171, 143, 135, 201, 72, 84, 119, 178, 145, 143, 239, 49, 38, 89, 82, 161, 208, 48, 25, 177, 35, 28, 249, 10, 227, 156, 237, 129, 236, 144, 85, 22, 44, 67, 166, 185, 227, 190, 142, 189, 30, 191, 92, 44, 100, 6, 155, 161, 228, 49, 233, 232, 131, 216, 74, 64, 125, 116, 12, 155, 55, 21, 235, 88, 136, 89, 133, 213, 205, 147, 75, 255, 111, 213, 85, 206, 26, 248, 183, 122, 225, 121, 68, 66, 204, 91, 175, 56, 189, 74, 75, 89, 161, 148, 197, 150, 169, 18, 5, 251, 186, 186, 211, 89, 69, 131, 93, 69, 133, 74, 11, 203, 165, 46, 91, 77, 97, 54, 84, 93, 73, 173, 63, 186, 79, 83, 36, 220, 43, 85, 194, 121, 177, 25, 4, 176, 45, 113, 60, 240, 124, 28, 160, 135, 67, 109, 107, 232, 183, 121, 223, 245, 241, 108, 179, 87, 172, 147, 26, 22, 16, 172, 227, 212, 2, 77, 204, 129, 184, 64, 151, 255, 65, 39, 255, 87, 151, 181, 31, 120, 47, 149, 225, 224, 113, 99, 229, 249, 170, 236, 31, 249, 85, 69, 234, 178, 235, 35, 141, 111, 195, 198, 118, 241, 52, 48, 117, 157, 201, 150, 197, 178, 5, 152, 145, 253, 31, 114, 9, 159, 212, 59, 16, 55, 162, 212, 54, 79, 50, 244, 159, 47, 51, 95, 228, 119, 111, 83, 83, 234, 49, 191, 81, 35, 251, 25, 9, 181, 139, 135, 205, 138, 77, 42, 25, 193, 200, 23, 27, 95, 16, 78, 238, 161, 253, 161, 1, 63, 2, 92, 1, 205, 23, 195, 93, 223, 63, 21, 224, 39, 30, 150, 56, 108, 11, 164, 199, 54, 199, 40, 234, 95, 57, 138, 206, 46, 249, 83, 46, 157, 209, 3, 189, 183, 132, 171, 106, 157, 197, 85, 196, 228, 189, 210, 236, 253, 197, 117, 63, 162, 246, 182, 150, 21, 144, 8, 57, 173, 134, 104, 122, 192, 11, 240, 107, 208, 171, 203, 217, 101, 4, 138, 42, 22, 158, 107, 241, 172, 231, 175, 40, 4, 210, 157, 157, 204, 132, 69, 18, 79, 241, 112, 123, 226, 99, 46, 211, 240, 21, 91, 0, 245, 39, 118, 232, 0, 236, 133, 17, 230, 229, 152, 230, 76, 241, 211, 171, 99, 243, 241, 5, 230, 50, 114, 106, 74, 116, 251, 213, 80, 217, 188, 155, 244, 201, 113, 192, 170, 162, 175, 16, 220, 128, 11, 204, 89, 176, 233, 110, 154, 32, 243, 185, 5, 223, 98, 212, 58, 240, 90, 166, 113, 131, 155, 147, 5, 83, 39], - [239, 74, 104, 191, 56, 46, 113, 24, 79, 199, 120, 167, 168, 170, 164, 72, 16, 43, 228, 88, 182, 76, 190, 41, 187, 164, 73, 223, 19, 200, 173, 116, 92, 1, 111, 89, 201, 183, 153, 137, 212, 111, 153, 224, 216, 48, 252, 42, 201, 4, 117, 26, 176, 109, 205, 59, 250, 157, 148, 71, 155, 77, 2, 68, 232, 93, 109, 11, 68, 12, 61, 176, 133, 97, 111, 201, 181, 91, 143, 52, 77, 209, 185, 182, 228, 36, 223, 152, 151, 123, 184, 138, 103, 201, 216, 159, 218, 189, 37, 84, 202, 239, 198, 124, 164, 157, 56, 223, 201, 210, 65, 4, 187, 220, 204, 215, 117, 181, 103, 9, 62, 222, 250, 168, 27, 177, 193, 218, 108, 208, 149, 135, 241, 106, 236, 48, 227, 45, 227, 34, 217, 216, 239, 38, 237, 187, 59, 127, 136, 12, 131, 43, 34, 160, 130, 37, 158, 255, 141, 206, 123, 206, 141, 191, 14, 5, 113, 159, 199, 159, 31, 122, 151, 41, 90, 16, 218, 80, 137, 245, 99, 188, 97, 37, 62, 144, 251, 201, 46, 199, 223, 214, 60, 40, 46, 132, 157, 43, 241, 145, 177, 80, 149, 190, 200, 219, 51, 131, 189, 83, 200, 19, 107, 253, 172, 11, 103, 47, 200, 177, 9, 84, 253, 178, 252, 79, 184, 53, 140, 76, 138, 206, 55, 208, 111, 47, 127, 72, 236, 215, 226, 52, 217, 81, 3, 22, 251, 248, 58, 181, 159, 10, 144, 175, 254, 106, 228, 32, 88, 185, 195, 18, 31, 104, 16, 244, 48, 211, 16, 193, 237, 168, 86, 19, 61, 178, 215, 246, 103, 146, 246, 211, 245, 1, 179, 129, 60, 246, 142, 32, 180, 134, 87, 105, 43, 154, 38, 182, 130, 131, 112, 43, 217, 36, 127, 41, 78, 248, 249, 94, 122, 217, 51, 101, 91, 178, 115, 116, 180, 238, 167, 11, 203, 102, 236, 118, 237, 126, 83, 101, 247, 16, 110, 5, 112, 111, 118, 22, 234, 96, 150, 124, 19, 122, 31, 162, 205, 108, 252, 110, 212, 14, 3, 134, 46, 82, 22, 31, 184, 90, 35, 130, 41, 178, 66, 93, 119, 197, 109, 127, 77, 37, 142, 29, 44, 93, 138, 155, 248, 217, 205, 3, 34, 215, 211, 66, 202, 112, 193, 199, 79, 116, 50, 31, 112, 19, 241, 231, 58, 146, 40, 88, 57, 16, 75, 190, 86, 75, 58, 68, 148, 42, 169, 175, 143, 111, 142, 12, 58, 163, 31, 249, 87, 149, 179, 174, 238, 46, 208, 51, 67, 87, 225, 45, 109, 108, 57, 98, 196, 77, 255, 189, 219, 0, 90, 77, 134, 5, 35, 179, 122, 6, 26, 177, 245, 172, 83, 87, 232, 69, 64, 31, 179, 74, 249, 86, 205, 129, 5, 138, 233, 227, 78, 18, 183, 23, 236, 148, 26, 135, 53, 224, 96, 141, 8, 12, 12, 126, 182, 12, 17, 217, 248, 51, 181, 49, 213, 162, 233, 92, 254, 131, 77, 34, 174, 111, 177, 77, 134, 72, 249, 53, 133, 164, 179, 44, 193, 253, 45, 36, 189, 252, 136, 48, 230, 97, 57, 173, 185, 96, 57, 175, 160, 3, 158, 95, 95, 131, 109, 62, 239, 241, 90, 111, 2, 180, 97, 86, 24, 87, 75, 196, 205, 107, 55, 25, 122, 218, 110, 217, 87, 21, 1, 26, 255, 190, 21, 32, 235, 148, 247, 13, 194, 177, 162, 253, 233, 121, 50, 237, 179, 191, 88, 224, 218, 202, 10, 184, 28, 255, 39, 232, 166, 136, 220, 15, 33, 55, 173, 127, 13, 18, 141, 187, 22, 4, 143, 127, 202, 71, 96, 77, 65, 233, 120, 8, 118, 92, 46, 247, 204, 143, 214, 127, 60, 76, 97, 155, 171, 165, 33, 142, 97, 196, 59, 248, 235, 32, 52, 225, 75, 167, 118, 36, 240, 153, 213, 82, 136, 236, 167, 82, 124, 105, 69, 86, 143, 78, 187, 152, 195, 38, 212, 221, 132, 201, 255, 21, 241, 49, 52, 239, 171, 176, 111, 248, 255, 57, 153, 192, 217, 84, 107, 46, 176, 71, 105, 24, 243, 4, 112, 156, 125, 201, 129, 177, 106, 162, 64, 107, 64, 187, 80, 64, 199, 97, 147, 20, 204, 11, 84, 24, 84, 95, 245, 99, 187, 255, 88, 211, 189, 238, 109, 124, 133, 185, 45, 253, 103, 181, 68, 110, 184, 88, 218, 216, 18, 64, 84, 149, 245, 185, 113, 103, 166, 73, 212, 218, 155, 181, 184, 207, 23, 221, 3, 210, 115, 184, 71, 104, 118, 249, 179, 206, 171, 149, 132, 102, 46, 133, 112, 66, 26, 14, 248, 74, 155, 54, 99, 92, 123, 15, 177, 193, 211, 230, 37, 129, 16, 97, 98, 199, 97, 25, 93, 168, 213, 162, 29, 215, 198, 44, 123, 117, 57, 209, 211, 33, 1, 31, 86, 44, 207, 233, 5, 245, 244, 4, 128, 28, 168, 5, 217, 132, 199, 181, 121, 227, 36, 61, 194, 218, 125, 66, 117, 254, 32, 223, 1, 137, 65, 17, 117, 120, 155, 141, 173, 218, 75, 13, 16, 9, 16, 22, 123, 46, 225, 239, 15, 165, 12, 194, 58, 180, 179, 164, 2, 89, 201, 117, 219, 141, 65, 139, 129, 251, 179, 139, 199, 188, 119, 94, 64, 37, 167, 83, 111, 99, 41, 43, 51, 135, 153, 198, 152, 10, 41, 132, 42, 189, 215, 200, 217, 6, 177, 226, 233, 183, 241, 31, 98, 252, 220, 253, 204, 177, 142, 8, 61, 226, 36, 29, 69, 89, 79, 231, 12, 143, 34, 28, 50, 233, 111, 210, 247, 177, 50, 254, 184, 37, 247, 140, 234, 205, 7, 196, 28, 24, 117, 205, 169, 124, 10, 143, 197, 245, 213, 96, 121, 110, 43, 127, 109, 148, 39, 178, 86, 48, 82, 186, 123, 51, 170, 180, 53, 48, 212, 224, 8, 102, 70, 82, 48, 213, 183, 149, 103, 135, 195, 243, 80, 56, 194, 93, 216, 203, 41, 29, 87, 57, 37, 126, 163, 241, 253, 108, 37, 65, 158, 248, 68, 164, 34, 251, 12, 125, 159, 247, 186, 176, 111, 139, 206, 245, 212, 142, 126, 125, 63, 190, 41, 183, 184, 105, 195, 24, 189, 113, 16, 138, 164, 52, 88, 78, 151, 252, 41, 179, 156, 153, 198, 87, 130, 60, 85, 252, 124, 55, 155, 238, 187, 140, 82, 105, 177, 5, 105, 206, 103, 144, 217, 35, 18, 183, 156, 82, 44, 242, 250, 249, 203, 79, 96, 12, 163, 22, 61, 21, 90, 52, 154, 8, 139, 100, 222, 70, 250, 80, 127, 180, 149, 103, 60, 141, 42, 7, 17, 242, 147, 226, 123, 227, 248, 253, 138, 186, 89, 123, 29, 221, 149, 58, 108, 92, 33, 75, 98, 88, 234, 78, 58, 201, 93, 21, 188, 105, 62, 146, 171, 209, 86, 200, 79, 0, 71, 242, 175, 212, 41, 177, 180, 80, 55, 61, 192, 184, 100, 84, 141, 196, 253, 6, 207, 200, 61, 193, 209, 1, 252, 164, 198, 68, 22, 129, 204, 73, 200, 1, 12, 182, 63, 154, 104, 192, 193, 70, 133, 212, 4, 176, 53, 242, 208, 201, 62, 58, 128, 129, 145, 107, 54, 128, 92, 28, 54, 2, 3, 119, 8, 127, 219, 92, 186, 136, 217, 120, 248, 15, 6, 72, 63, 68, 31, 49, 116, 224, 38, 157, 102, 173, 233, 20, 17, 222, 36, 243, 233, 38, 182, 240, 162, 88, 161, 18, 205, 208, 154, 240, 112, 171, 83, 186, 23, 91, 182, 159, 52, 104, 76, 108, 141, 42, 73, 12, 16, 247, 122, 231, 179, 207, 166, 24, 158, 165, 49, 215, 167, 204, 136, 234, 253, 18, 41, 190, 33, 225, 169, 247, 126, 105, 109, 155, 216, 226, 68, 241, 33, 67, 114, 0, 23, 108, 63, 137, 28, 151, 162, 143, 105, 171, 13, 95, 62, 140, 92, 130, 146, 37, 18, 69, 73, 127, 240, 215, 97, 66, 174, 144, 222, 166, 105, 37, 242, 15, 178, 172, 52, 0, 120, 255, 46, 207, 153, 66, 45, 175, 233, 62, 148, 220, 1, 212, 25, 14, 214, 214, 149, 58, 221, 30, 110, 237, 5, 60, 16, 243, 158, 232, 141, 157, 139, 167, 152, 55, 177, 17, 238, 139, 194, 33, 37, 175, 146, 181, 21, 44, 30, 219, 201, 197, 50, 68, 150, 236, 18, 238, 146, 78, 42, 93, 54, 49, 53, 144, 211, 226, 161, 155, 88, 108, 40, 49, 155, 96, 150, 140, 213, 2, 112, 21, 150, 212, 129, 152, 3, 90, 177, 115, 181, 2, 192, 93, 124, 143, 43, 47, 154, 176, 175, 246, 99, 157, 239, 220, 202, 56, 137, 135, 122, 119, 74, 118, 118, 160, 182, 57, 78, 159, 218, 97, 81, 93, 156, 99, 137, 168, 236, 169, 197, 149, 9, 104, 195, 166, 14, 115, 71, 86, 142, 166, 228, 17, 44, 93, 20, 133, 98, 93, 219, 148, 95, 154, 28, 87, 109, 28, 104, 50, 115, 115, 138, 5, 79, 185, 159, 109, 128, 230, 181, 139, 67, 173, 233, 22, 136, 61, 19, 149, 174, 4, 0, 194, 128, 169, 125, 70, 136, 230, 125, 85, 240, 194, 82, 173, 240, 180, 134, 63, 26, 26, 22, 104, 213, 130, 88, 145, 124, 207, 47, 16, 105, 25, 196, 79, 84, 65, 27, 201, 96, 143, 180, 97, 149, 104, 103, 244, 251, 207, 155, 219, 235, 197, 70, 181, 254, 37, 234, 140, 232, 228, 167, 95, 1, 3, 44, 203, 34, 57, 77, 165, 144, 24, 107, 253, 153, 57, 84, 235, 226, 172, 212, 40, 35, 195, 46, 197, 88, 137, 2, 237, 65, 165, 235, 107, 32, 87, 59, 5, 159, 2, 76, 255, 220, 197, 147, 241, 154, 129, 159, 172, 27, 82, 252, 226, 174, 129, 145, 117, 139, 36, 17, 204, 126, 233, 248, 48, 58, 134, 156, 139, 192, 213, 136, 241, 26, 184, 174, 235, 21, 44, 181, 17, 13, 170, 199, 69, 45, 220, 116, 28, 243, 122, 221, 174, 63, 98, 182, 170, 146, 35, 142, 89, 254, 227, 46, 125, 245, 27, 57, 8, 220, 118, 103, 120, 252, 243, 216, 229, 195, 164, 9, 131, 151, 202, 56, 22, 87, 60, 81, 87, 84, 134, 140, 174, 160, 220, 209, 16, 36, 198, 24, 92, 47, 248, 111, 156, 124, 82, 85, 189, 124, 192, 215, 228, 112, 17, 221, 1, 143, 25, 171, 215, 89, 148, 9, 157, 210, 55, 185, 128, 222, 39, 215, 222, 84, 233, 252, 223, 139, 144, 144, 247, 189, 73, 6, 182, 168, 200, 140, 79, 47, 148, 234, 9, 63, 215, 92, 9, 103, 48, 216, 191, 195, 97, 30, 198, 172, 65, 232, 59, 212, 121, 147, 126, 43, 35, 37, 125, 184, 234, 207, 11, 174, 126, 116, 15, 123, 96, 217, 112, 58, 31, 42, 154, 221, 244, 2, 50, 45, 10, 222, 109, 215, 29, 52, 166, 186, 201, 203, 162, 180, 119, 139, 84, 140, 229, 207, 44, 236, 195, 102, 90, 43, 219, 193, 238, 15, 6, 114, 32, 207, 159, 228, 26, 255, 247, 34, 22, 63, 94, 77, 203, 111, 46, 83, 24, 112, 7, 211, 104, 85, 190, 218, 151, 178, 129, 119, 147, 212, 69, 112, 19, 190, 1, 184, 36, 221, 189, 4, 70, 162, 231, 148, 166, 114, 155, 139, 45, 26, 225, 221, 154, 67, 15, 17, 189, 17, 39, 41, 18, 39, 195, 130, 227, 55, 3, 166, 172, 255, 36, 223, 98, 124, 185, 136, 110, 57, 74, 255, 141, 187, 126, 22, 251, 244, 189, 37, 58, 151, 185, 171, 76, 122, 112, 99, 77, 157, 79, 159, 54, 151, 189, 101, 61, 117, 20, 188, 121, 243, 80, 167, 192, 119, 157, 115, 105, 172, 10, 19, 129, 7, 30, 20, 77, 165, 92, 139, 36, 152, 91, 223, 141, 0, 172, 151, 23, 75, 156, 221, 91, 94, 30, 207, 102, 84, 153, 15, 36, 72, 35, 221, 148, 232, 77, 221, 99, 74, 56, 172, 225, 199, 75, 47, 55, 176, 252, 245, 47, 201, 182, 148, 135, 68, 194, 217, 180, 87, 217, 4, 3, 165, 76, 96, 166, 153, 26, 77, 47, 123, 68, 167, 215, 180, 211, 8, 120, 92, 157, 62, 174, 211, 72, 176, 110, 135, 237, 38, 189, 136, 68, 157, 218, 130, 12, 201, 162, 189, 9, 21, 218, 89, 94, 32, 76, 90, 230, 252, 119, 140, 228, 207, 57, 242, 26, 69, 7, 171, 146, 115, 231, 35, 206, 124, 204, 158, 119, 178, 162, 94, 171, 75, 163, 25, 71, 252, 69, 217, 251, 242, 105, 81, 69, 77, 64, 209, 94, 5, 82, 162, 139, 193, 158, 8, 100, 242, 133, 226, 15, 35, 75, 164, 36, 115, 112, 47, 41, 237, 87, 237, 35, 243, 169, 114, 203, 96, 23, 20, 64, 11, 54, 149, 128, 219, 20, 94, 4, 8, 59, 54, 13, 5, 108, 27, 112, 157, 73, 39, 64, 238, 209, 5, 206, 85, 201, 79, 252, 137, 59, 192, 241, 208, 177, 31, 113, 177, 227, 221, 131, 158, 104, 152, 49, 94, 26, 102, 155, 53, 70, 21, 91, 9, 92, 197, 212, 240, 188, 102, 176, 69, 186, 38, 21, 107, 95, 174, 118, 68, 182, 94, 110, 195, 95, 79, 35, 247, 91, 234, 151, 90, 209, 121, 93, 11, 41, 5, 144, 47, 52, 51, 125, 42, 252, 119, 157, 243, 103, 84, 41, 22, 90, 103, 178, 28, 98, 55, 162, 22, 162, 195, 43, 178, 188, 138, 112, 22, 52, 12, 150, 19, 96, 2, 161, 167, 189, 170, 122, 244, 101, 108, 124, 5, 16, 182, 99, 110, 102, 11, 195, 225, 148, 107, 197, 224, 42, 164, 128, 34, 241, 11, 90, 176, 183, 137, 160, 237, 16, 142, 122, 26, 109, 101, 198, 96, 24, 45, 150, 206, 84, 102, 168, 245, 213, 13, 205, 96, 149, 100, 72, 127, 166, 104, 9, 208, 216, 240, 25, 248, 234, 174, 206, 5, 238, 21, 232, 124, 63, 174, 253, 150, 207, 6, 117, 55, 147, 172, 71, 106, 147, 155, 70, 1, 34, 190, 221, 1, 24, 105, 87, 132, 130, 164, 73, 57, 210, 178, 213, 129, 184, 59, 195, 232, 138, 54, 105, 87, 2, 20, 97, 41, 238, 91, 17, 25, 171, 30, 33, 106, 48, 4, 181, 220, 87, 152, 246, 70, 235, 134, 20, 196, 84, 244, 59, 48, 243, 106, 206, 163, 182, 77, 139, 93, 41, 203, 175, 88, 168, 185, 236, 157, 106, 84, 20, 68, 128, 139, 53, 28, 36, 18, 62, 114, 150, 120, 80, 163, 78, 236, 188, 65, 55, 54, 18, 106, 18, 49, 42, 15, 198, 247, 127, 44, 64, 83, 228, 220, 184, 135, 228, 125, 138, 238, 107, 75, 31, 149, 100, 243, 40, 199, 124, 149, 66, 21, 127, 57, 213, 218, 70, 18, 192, 110, 252, 27, 6, 46, 211, 96, 85, 172, 159, 174, 138, 20, 18, 84, 72, 77, 104, 23, 154, 27, 14, 250, 65, 50, 19, 137, 182, 231, 196, 136, 238, 90, 105, 19, 104, 43, 226, 192, 34, 150, 184, 7, 202, 97, 185, 138, 44, 126, 238, 20, 234, 156, 24, 104, 155, 204, 28, 198, 176, 40, 122, 6, 161, 210, 126, 81, 143, 249, 143, 14, 43, 19, 56, 16, 105, 34, 241, 15, 120, 210, 66, 40, 195, 226, 144, 98, 158, 238, 197, 193, 28, 152, 91, 252, 110, 78, 255, 29, 75, 74, 15, 215, 95, 114, 97, 191, 86, 73, 100, 206, 100, 97, 233, 157, 126, 178, 50, 180, 12, 218, 178, 11, 189, 29, 132, 120, 80, 101, 16, 57, 186, 150, 206, 54, 0, 48, 70, 184, 113, 65, 10, 168, 142, 117, 119, 200, 197, 128, 40, 227, 12, 143, 248, 140, 157, 38, 126, 39, 216, 121, 114, 26, 225, 53, 127, 146, 20, 233, 106, 92, 166, 141, 216, 46, 134, 178, 115, 12, 74, 95, 254, 232, 129, 237, 108, 126, 99, 14, 225, 160, 49, 239, 54, 241, 47, 148, 17, 57, 61, 85, 71, 118, 89, 74, 26, 115, 45, 151, 178, 148, 15, 75, 89, 63, 56, 162, 28, 231, 91, 55, 237, 123, 172, 97, 17, 10, 238, 91, 255, 17, 178, 46, 254, 33, 41, 166, 192, 154, 120, 188, 243, 29, 175, 169, 11, 102, 194, 189, 32, 192, 179, 122, 188, 246, 33, 111, 8, 91, 134, 242, 229, 185, 76, 229, 252, 119, 86, 51, 67, 47, 130, 37, 83, 254, 202, 107, 193, 143, 125, 181, 68, 136, 155, 196, 122, 184, 47, 146, 148, 53, 89, 160, 29, 187, 228, 218, 238, 254, 249, 125, 20, 68, 166, 152, 229, 87, 78, 112, 44, 250, 169, 103, 61, 147, 226, 38, 120, 106, 188, 121, 58, 118, 229, 109, 168, 210, 6, 161, 191, 64, 16, 37, 251, 203, 5, 1, 57, 245, 2, 163, 90, 200, 12, 230, 167, 4, 209, 196, 142, 35, 45, 190, 191, 69, 93, 56, 138, 4, 196, 180, 30, 86, 154, 180, 166, 237, 188, 32, 207, 15, 75, 251, 76, 79, 137, 226, 251, 194, 55, 177, 168, 244, 52, 230, 197, 63, 207, 146, 114, 167, 216, 24, 12, 89, 57, 56, 107, 87, 162, 225, 158, 180, 26, 65, 131, 206, 250, 12, 90, 231, 234, 150, 72, 233, 191, 248, 194, 212, 209, 72, 129, 100, 222, 44, 5, 122, 171, 30, 27, 152, 133, 228, 70, 153, 97, 67, 173, 219, 237, 218, 134, 60, 90, 109, 37, 45, 146, 178, 142, 86, 179, 29, 196, 15, 252, 190, 242, 230, 210, 91, 171, 43, 233, 31, 168, 69, 135, 175, 93, 173, 202, 154, 254, 48, 212, 178, 120, 167, 234, 36, 204, 179, 28, 170, 158, 61, 30, 152, 72, 218, 197, 55, 245, 132, 127, 72, 14, 235, 205, 169, 178, 184, 163, 244, 171, 187, 185, 152, 175, 32, 63, 156, 35, 95, 174, 225, 156, 222, 16, 55, 60, 210, 119, 41, 95, 122, 230, 32, 113, 245, 128, 37, 73, 117, 241, 231, 94, 96, 126, 154, 183, 113, 29, 80, 80, 104, 129, 251, 104, 47, 239, 226, 110, 216, 131, 198, 17, 48, 194, 21, 228, 65, 97, 50, 131, 214, 239, 119, 239, 176, 41, 6, 110, 222, 118, 102, 169, 157, 137, 136, 233, 232, 219, 136, 7, 162, 106, 1, 73, 94, 231, 71, 167, 44, 226, 36, 5, 32, 221, 16, 169, 114, 111, 50, 140, 155, 82, 214, 156, 205, 128, 85, 125, 174, 9, 92, 228, 95, 244, 121, 152, 73, 138, 253, 175, 51, 44, 228, 142, 61, 186, 23, 125, 189, 54, 113, 43, 140, 76, 178, 152, 171, 33, 151, 0, 33, 88, 237, 254, 14, 203, 234, 181, 119, 6, 170, 199, 138, 7, 74, 17, 17, 85, 81, 22, 42, 212, 159, 179, 93, 159, 160, 94, 60, 22, 124, 3, 123, 213, 20, 181, 42, 237, 231, 235, 122, 18, 228, 44, 249, 136, 91, 1, 193, 124, 181, 87, 216, 166, 219, 224, 180, 200, 209, 176, 234, 236, 238, 83, 65, 105, 165, 103, 218, 114, 241, 196, 184, 155, 65, 250, 58, 98, 70, 97, 8, 76, 122, 251, 32, 234, 147, 30, 148, 105, 221, 48, 45, 248, 203, 67, 69, 224, 201, 216, 231, 145, 112, 202, 76, 198, 223, 141, 36, 237, 187, 44, 19, 153, 88, 242, 245, 156, 214, 54, 172, 4, 151, 35, 56, 217, 167, 178, 168, 173, 13, 177, 115, 66, 239, 141, 184, 22, 156, 5, 135, 148, 19, 120, 76, 133, 35, 96, 178, 110, 58, 228, 213, 134, 127, 95, 197, 123, 98, 132, 207, 142, 198, 234, 46, 224, 181, 37, 55, 245, 120, 99, 173, 89, 128, 0, 23, 213, 42, 129, 61, 195, 117, 219, 179, 30, 243, 208, 183, 75, 59, 90, 107, 195, 93, 76, 4, 88, 134, 6, 130, 225, 112, 140, 15, 61, 223, 41, 58, 252, 213, 18, 198, 211, 91, 213, 23, 181, 12, 228, 253, 253, 95, 8, 10, 219, 157, 49, 210, 95, 7, 51, 8, 246, 45, 111, 91, 169, 136, 188, 221, 39, 195, 60, 96, 68, 9, 207, 253, 84, 229, 103, 90, 151, 202, 169, 110, 69, 235, 92, 160, 210, 38, 255, 70, 232, 134, 140, 211, 41, 39, 16, 117, 147, 96, 61, 146, 52, 113, 104, 121, 206, 218, 189, 251, 129, 26, 21, 175, 141, 101, 56, 183, 131, 217, 93, 222, 27, 154, 29, 152, 48, 223, 15, 133, 158, 95, 155, 200, 71, 209, 248, 102, 73, 224, 221, 11, 17, 55, 6, 34, 133, 182, 193, 177, 192, 202, 97, 232, 157, 210, 38, 184, 183, 36, 196, 254, 110, 83, 177, 47, 56, 132, 63, 250, 135, 214, 37, 16, 140, 194, 182, 169, 73, 45, 252, 129, 170, 233, 228, 172, 153, 226, 95, 216, 188, 252, 194, 98, 103, 227, 64, 224, 147, 252, 10, 10, 78, 244, 2, 19, 59, 22, 37, 199, 2, 112, 233, 108, 175, 79, 48, 109, 253, 26, 250, 152, 113, 193, 140, 115, 121, 49, 34, 222, 96, 210, 27, 213, 5, 47, 118, 183, 138, 175, 171, 209, 101, 8, 63, 82, 180, 212, 230, 156, 92, 154, 125, 2, 241, 32, 144, 46, 56, 149, 103, 173, 127, 237, 162, 155, 207, 22, 168, 192, 247, 14, 1, 202, 131, 205, 106, 74, 236, 251, 5, 98, 127, 203, 127, 49, 235, 175, 10, 93, 102, 73, 222, 50, 191, 153, 18, 109, 182, 179, 21, 34, 97, 56, 174, 116, 12, 232, 208, 136, 28, 152, 17, 85, 171, 250, 101, 146, 233, 9, 104, 93, 229, 226, 96, 249, 78, 119, 199, 32, 120, 129, 168, 251, 101, 156, 137, 54, 90, 122, 23, 24, 237, 85, 49, 50, 192, 228, 148, 196, 101, 26, 241, 62, 243, 102, 42, 176, 146, 10, 177, 69, 46, 249, 110, 154, 60, 49, 11, 180, 200, 127, 75, 151, 138, 244, 244, 139, 149, 229, 36, 90, 45, 115, 142, 195, 31, 172, 34, 105, 164, 41, 11, 169, 138, 89, 130, 30, 42, 250, 41, 62, 129, 244, 133, 48, 199, 158, 27, 1, 48, 13, 220, 197, 126, 245, 29, 197, 138, 183, 122, 4, 128, 155, 4, 186, 100, 136, 145, 157, 213, 188, 28, 227, 157, 173, 171, 164, 64, 23, 56, 25, 65, 24, 172, 17, 209, 236, 196, 246, 77, 203, 242, 94, 11, 99, 28, 81, 25, 4, 42, 117, 3, 112, 14, 161, 14, 50, 174, 44, 152, 251, 44, 104, 253, 222, 19, 101, 165, 192, 16, 35, 98, 238, 43, 167, 104, 188, 97, 246, 197, 182, 40, 210, 4, 91, 118, 211, 162, 184, 181, 80, 203, 20, 213, 11, 227, 72, 87, 59, 97, 153, 104, 4, 255, 216, 243, 237, 61, 189, 246, 6, 57, 101, 194, 131, 245, 23, 27, 151, 163, 223, 103, 11, 104, 210, 47, 103, 181, 15, 34, 141, 97, 208, 20, 189, 250, 7, 35, 92, 135, 83, 251, 2, 77, 3, 91, 81, 223, 3, 161, 16, 19, 87, 175, 250, 150, 151, 173, 149, 245, 157, 138, 69, 125, 171, 79, 90, 163, 240, 235, 142, 37, 148, 80, 27, 70, 76, 252, 207, 36, 5, 211, 236, 212, 42, 152, 104, 221, 31, 102, 41, 114, 69, 231, 224, 103, 36, 58, 164, 133, 89, 232, 137, 140, 86, 20, 195, 47, 102, 105, 76, 255, 198, 83, 170, 48, 72, 89, 76, 85, 93, 141, 205, 171, 206, 106, 221, 82, 118, 42, 83, 95, 31, 192, 92, 104, 213, 154, 97, 131, 146, 116, 125, 29, 16, 78, 55, 158, 199, 172, 212, 252, 96, 217, 33, 233, 189, 183, 96, 255, 177, 240, 192, 161, 212, 222, 177, 207, 137, 50, 210, 121, 17, 133, 65, 126, 168, 114, 110, 102, 77, 151, 227, 188, 5, 70, 128, 12, 138, 55, 229, 197, 29, 172, 96, 191, 73, 202, 38, 89, 5, 127, 22, 178, 87, 229, 188, 121, 26, 144, 78, 125, 73, 204, 13, 26, 65, 149, 77, 199, 20, 65, 178, 197, 194, 216, 228, 2, 211, 60, 247, 24, 233, 25, 90, 174, 106, 198, 64, 153, 42, 19, 145, 64, 101, 235, 250, 32, 165, 185, 2, 163, 247, 33, 50, 90, 157, 200, 239, 111, 47, 247, 3, 38, 190, 72, 120, 3, 133, 243, 53, 27, 158, 153, 61, 136, 161, 47, 103, 34, 170, 158, 210, 191, 17, 115, 104, 137, 61, 224, 158, 9, 85, 221, 6, 211, 38, 236, 114, 139, 37, 19, 148, 11, 200, 91, 102, 102, 106, 35, 231, 96, 224, 97, 149, 150, 94, 204, 230, 7, 221, 167, 15, 46, 202, 60, 206, 56, 165, 21, 14, 68, 209, 7, 36, 37, 210, 58, 172, 48, 244, 209, 79, 61, 190, 14, 211, 82, 213, 97, 18, 24, 188, 0, 93, 183, 86, 23, 231, 40, 217, 107, 187, 37, 151, 52, 33, 108, 54, 101, 153, 76, 36, 78, 75, 64, 85, 187, 75, 185, 40, 15, 165, 15, 97, 44, 245, 132, 198, 65, 213, 142, 90, 50, 216, 192, 23, 109, 78, 96, 142, 101, 19, 101, 233, 115, 59, 142, 13, 231, 19, 79, 31, 120, 155, 50, 118, 176, 174, 243, 194, 44, 191, 65, 107, 4, 145, 234, 142, 187, 196, 173, 18, 92, 199, 124, 128, 11, 169, 179, 198, 152, 96, 201, 24, 243, 237, 131, 137, 39, 77, 200, 109, 156, 166, 254, 150, 146, 172, 201, 228, 185, 234, 170, 240, 178, 131, 96, 189, 188, 171, 183, 234, 193, 45, 196, 25, 148, 54, 64, 105, 225, 135, 201, 41, 88, 190, 41, 57, 108, 40, 117, 196, 229, 197, 226, 83, 80, 88, 156, 14, 34, 126, 149, 112, 236, 83, 35, 246, 191, 9, 130, 2, 179, 3, 99, 98, 170, 136, 91, 177, 254, 202, 134, 203, 110, 147, 98, 192, 7, 59, 94, 119, 91, 93, 213, 136, 147, 226, 52, 234, 138, 188, 98, 56, 79, 200, 167, 112, 150, 125, 179, 115, 110, 119, 245, 115, 202, 204, 208, 131, 174, 230, 40, 183, 35, 63, 123, 37, 228, 40, 32, 44, 183, 132, 23, 119, 101, 242, 87, 216, 9, 72, 66, 223, 48, 79, 149, 57, 201, 20, 202, 123, 201, 137, 225, 121, 1, 147, 185, 201, 53, 221, 75, 63, 93, 64, 182, 246, 139, 237, 99, 198, 150, 197, 249, 236, 90, 60, 64, 118, 217, 5, 230, 136, 120, 136, 186, 213, 158, 20, 110, 176, 112, 2, 128, 72, 119, 48, 55, 46, 82, 48, 168, 204, 139, 188, 233, 128, 190, 113, 75, 44, 43, 132, 74, 236, 32, 215, 138, 19, 103, 6, 41, 196, 165, 24, 217, 213, 103, 131, 89, 140, 198, 157, 250, 42, 121, 120, 164, 196, 245, 159, 149, 119, 253, 115, 91, 108, 195, 252, 169, 42, 18, 66, 232, 60, 228, 251, 64, 35, 85, 106, 61, 62, 171, 254, 124, 35, 88, 53, 3, 138, 30, 206, 48, 88, 243, 109, 93, 188, 230, 110, 84, 95, 244, 121, 213, 75, 170, 169, 45, 82, 187, 70, 13, 192, 166, 154, 154, 225, 71, 138, 78, 105, 21, 208, 192, 40, 244, 160, 251, 140, 91, 162, 170, 6, 172, 27, 162, 215, 62, 189, 18, 195, 242, 243, 197, 129, 161, 203, 164, 195, 68, 95, 186, 228, 244, 186, 75, 101, 31, 73, 139, 73, 68, 35, 174, 37, 0, 83, 147, 140, 138, 148, 85, 76, 249, 227, 58, 169, 109, 3, 168, 216, 206, 143, 199, 25, 154, 208, 9, 76, 5, 132, 45, 170, 232, 237, 188, 88, 213, 70, 149, 169, 40, 155, 191, 151, 215, 21, 22, 116, 239, 252, 238, 199, 122, 50, 55, 210, 134, 218, 13, 92, 173, 66, 254, 152, 207, 84, 180, 190, 29, 165, 9, 155, 178, 157, 135, 80, 140, 168, 128, 176, 108, 86, 51, 140, 103, 203, 102, 6, 97, 36, 120, 14, 141, 167, 38, 229, 64, 206, 210, 6, 38, 255, 65, 131, 22, 148, 238, 186, 76, 115, 159, 112, 171, 216, 46, 5, 4, 19, 178, 208, 76, 159, 27, 110, 4, 34, 126, 207, 68, 70, 230, 95, 32, 145, 52, 31, 166, 148, 224, 80, 73, 8, 35, 110, 182, 127, 196, 152, 234, 181, 129, 14, 204, 185, 240, 191, 191, 19, 144, 250, 206, 133, 168, 225, 255, 164, 176, 126, 109, 56, 201, 173, 45, 250, 66, 242, 12, 5, 124, 37, 9, 225, 149, 93, 139, 207, 4, 64, 83, 23, 13, 60, 208, 245, 160, 147, 213, 133, 185, 200, 119, 63, 87, 6, 154, 138, 214, 8, 7, 119, 201, 41, 165, 131, 10, 15, 167, 249, 230, 36, 39, 234, 87, 155, 41, 116, 144, 73, 175, 66, 116, 146, 95, 75, 110, 29, 98, 196, 171, 103, 173, 122, 141, 37, 87, 206, 43, 171, 212, 55, 46, 207, 254, 40, 28, 68, 81, 111, 95, 230, 180, 1, 28, 78, 146, 237, 143, 161, 127, 128, 101, 118, 142, 223, 210, 57, 64, 190, 28, 42, 131, 176, 225, 192, 101, 203, 191, 109, 156, 170, 225, 176, 115, 151, 150, 203, 52, 255, 46, 118, 95, 190, 208, 89, 215, 237, 100, 49, 41, 158, 238, 66, 15, 208, 142, 96, 196, 94, 102, 230, 132, 115, 98, 151, 237, 7, 140, 69, 203, 151, 57, 105, 192, 239, 166, 162, 113, 7, 113, 21, 228, 204, 107, 155, 88, 16, 0, 243, 229, 238, 149, 89, 112, 195, 157, 47, 251, 42, 202, 92, 122, 164, 119, 89, 195, 170, 228, 234, 164, 240, 153, 80, 53, 140, 91, 210, 189, 126, 240, 194, 87, 245, 9, 161, 229, 54, 63, 1, 89, 225, 237, 252, 27, 183, 64, 25, 167, 197, 5, 182, 187, 203, 25, 51, 81, 249, 84, 112, 75, 135, 204, 92, 56, 96, 149, 119, 19, 146, 49, 144, 81, 180, 148, 91, 203, 39, 114, 236, 166, 77, 243, 55, 143, 183, 235, 248, 205, 208, 86, 199, 7, 132, 166, 251, 19, 73, 138, 10, 242, 246, 123, 49, 254, 73, 181, 17, 110, 61, 32, 107, 46, 127, 19, 68, 245, 58, 248, 91, 125, 29, 13, 44, 209, 17, 20, 211, 163, 110, 193, 107, 143, 103, 15, 32, 15, 63, 170, 16, 26, 151, 78, 67, 154, 233, 52, 2, 162, 73, 130, 118, 134, 189, 159, 6, 108, 52, 15, 142, 242, 88, 219, 10, 180, 118, 114, 132, 172, 64, 176, 118, 243, 244, 136, 162, 92, 62, 19, 221, 179, 88, 255, 80, 133, 228, 128, 5, 217, 226, 5, 157, 11, 148, 95, 113, 145, 249, 36, 108, 143, 52, 137, 11, 21, 185, 243, 47, 182, 224, 127, 243, 165, 79, 85, 196, 36, 197, 116, 203, 77, 110, 93, 222, 14, 161, 13, 106, 101, 89, 240, 217, 96, 96, 247, 83, 1, 202, 57, 33, 112, 94, 209, 242, 149, 168, 184, 159, 195, 198, 181, 60, 125, 222, 120, 34, 155, 40, 34, 124, 230, 144, 153, 72, 54, 143, 217, 227, 91, 154, 255, 202, 189, 6, 30, 245, 232, 248, 16, 171, 147, 172, 77, 97, 168, 140, 165, 74, 245, 131, 110, 196, 88, 29, 45, 25, 174, 79, 166, 132, 84, 82, 87, 231, 243, 136, 252, 240, 136, 199, 101, 61, 182, 78, 219, 61, 174, 111, 153, 206, 113, 124, 167, 242, 219, 157, 221, 110, 62, 47, 167, 90, 207, 48, 78, 79, 34, 94, 82, 251, 237, 141, 198, 165, 51, 250, 209, 224, 58, 135, 202, 22, 22, 160, 203, 187, 97, 13, 74, 251, 159, 184, 167, 91, 161, 245, 21, 92, 237, 253, 119, 116, 154, 144, 131, 174, 56, 75, 51, 84, 193, 92, 116, 70, 76, 145, 129, 2, 73, 35, 254, 181, 29, 117, 64, 37, 32, 169, 32, 97, 254, 28, 182, 246, 75, 200, 7, 241, 50, 179, 124, 234, 25, 117, 253, 117, 203, 81, 247, 71, 16, 206, 195, 176, 218, 52, 123, 21, 0, 63, 21, 135, 217, 230, 12, 167, 220, 45, 150, 103, 148, 128, 33, 239, 127, 42, 187, 147, 224, 90, 249, 88, 46, 236, 76, 206, 38, 33, 61, 131, 43, 92, 26, 19, 103, 242, 178, 119, 39, 41, 4, 251, 130, 160, 203, 163, 91, 102, 130, 102, 44, 253, 226, 174, 29, 126, 148, 175, 174, 109, 139, 189, 132, 12, 200, 58, 236, 215, 249, 53, 240, 122, 227, 141, 111, 216, 52, 141, 242, 12, 238, 8, 125, 73, 184, 252, 207, 111, 32, 56, 77, 71, 91, 112, 255, 209, 133, 217, 2, 243, 64, 226, 131, 0, 31, 90, 14, 120, 208, 7, 77, 135, 159, 215, 18, 31, 183, 242, 119, 164, 18, 159, 237, 134, 59, 87, 221, 152, 5, 5, 104, 128, 123, 228, 152, 145, 58, 238, 44, 56, 169, 195, 164, 186, 226, 13, 30, 86, 120, 122, 227, 19, 234, 95, 127, 252, 248, 39, 99, 92, 67, 2, 146, 206, 236, 83, 195, 155, 125, 196, 195, 184, 123, 100, 139, 141, 196, 116, 68, 149, 191, 84, 149, 143, 255, 62, 21, 93, 58, 251, 80, 157, 175, 220, 21, 174, 132, 104, 139, 136, 194, 64, 145, 182, 128, 130, 159, 87, 161, 56, 45, 181, 213, 119, 137, 94, 28, 36, 82, 229, 87, 144, 100, 248, 238, 217, 223, 62, 218, 89, 83, 111, 224, 55, 204, 128, 122, 245, 0, 248, 219, 89, 160, 23, 4, 252, 78, 101, 88, 239, 5, 74, 220, 175, 2, 104, 48, 85, 119, 55, 251, 42, 65, 255, 226, 169, 102, 246, 254, 169, 93, 64, 110, 102, 90, 31, 143, 183, 104, 125, 210, 254, 123, 171, 66, 198, 163, 24, 77, 240, 243, 137, 144, 182, 41, 253, 10, 138, 41, 136, 193, 65, 126, 224, 28, 51, 99, 33, 66, 103, 234, 235, 101, 96, 51, 60, 172, 14, 170, 203, 18, 122, 167, 93, 182, 192, 116, 241, 123, 49, 124, 1, 120, 184, 254, 2, 187, 75, 75, 37, 63, 122, 71, 34, 69, 48, 123, 62, 202, 196, 103, 202, 38, 203, 178, 185, 87, 113, 126, 187, 75, 149, 178, 45, 147, 251, 197, 140, 108, 188, 190, 249, 107, 10, 0, 252, 89, 136, 133, 199, 87, 190, 76, 109, 124, 90, 116, 78, 29, 185, 237, 51, 106, 111, 179, 126, 128, 204, 42, 54, 6, 113, 104, 73, 154, 125, 99, 232, 129, 90, 150, 209, 45, 14, 184, 37, 160, 239, 69, 61, 18, 77, 183, 180, 188, 20, 144, 157, 109, 219, 86, 188, 242, 236, 47, 249, 146, 220, 250, 138, 76, 213, 180, 76, 9, 113, 185, 230, 170, 183, 127, 28, 86, 190, 114, 223, 58, 238, 38, 27, 200, 197, 223, 93, 40, 182, 148, 59, 98, 205, 110, 114, 52, 229, 7, 126, 228, 245, 87, 232, 150, 86, 220, 184, 242, 107, 171, 131, 124, 118, 5, 133, 29, 72, 74, 9, 210, 248, 240, 214, 161, 101, 10, 122, 140, 187, 73, 225, 186, 95, 214, 175, 210, 219, 54, 6, 9, 61, 48, 85, 223, 177, 119, 126, 133, 202, 212, 228, 66, 165, 148, 203, 13, 201, 242, 116, 76, 250, 212, 20, 183, 156, 17, 41, 2, 50, 147, 164, 164, 58, 210, 71, 146, 103, 226, 143, 49, 180, 107, 60, 93, 89, 152, 58, 183, 99, 93, 108, 94, 178, 162, 169, 200, 137, 64, 79, 69, 129, 168, 19, 70, 28, 185, 10, 117, 60, 155, 156, 206, 51, 91, 85, 155, 55, 142, 237, 197, 5, 223, 238, 236, 48, 138, 136, 124, 40, 251, 94, 82, 205, 155, 3, 162, 19, 6, 128, 115, 101, 61, 9, 134, 154, 69, 122, 253, 135, 137, 193, 103, 221, 73, 72, 4, 83, 81, 109, 174, 183, 236, 198, 247, 206, 131, 28, 14, 27, 64, 196, 216, 78, 165, 117, 19, 179, 24, 154, 171, 6, 143, 252, 121, 15, 108, 38, 131, 215, 123, 124, 54, 90, 185, 224, 150, 142, 62, 83, 133, 133, 3, 96, 237, 66, 94, 129, 114, 199, 183, 5, 98, 91, 109, 35, 171, 192, 114, 56, 246, 53, 184, 13, 31, 243, 96, 253, 39, 56, 199, 78, 46, 248, 201, 33, 234, 41, 36, 47, 3, 208, 48, 65, 132, 103, 248, 93, 34, 116, 171, 209, 7, 65, 114, 149, 164, 245, 37, 150, 147, 238, 129, 114, 58, 216, 200, 103, 122, 151, 88, 179, 193, 72, 208, 75, 204, 165, 93, 158, 89, 54, 59, 98, 199, 5, 90, 126, 165, 31, 53, 255, 220, 193, 183, 153, 226, 250, 83, 97, 185, 69, 251, 87, 82, 214, 126, 7, 62, 133, 163, 195, 245, 124, 254, 187, 19, 24, 87, 157, 83, 135, 189, 106, 91, 15, 170, 37, 113, 63, 0, 70, 36, 186, 47, 124, 113, 106, 243, 14, 85, 32, 116, 175, 194, 150, 158, 39, 251, 140, 48, 103, 231, 196, 0, 45, 90, 253, 39, 36, 4, 78, 16, 176, 251, 142, 30, 13, 225, 170, 30, 118, 240, 230, 231, 172, 51, 218, 255, 189, 123, 21, 237, 165, 15, 82, 1, 96, 131, 155, 44, 76, 36, 34, 37, 180, 192, 98, 125, 64, 202, 191, 124, 155, 221, 172, 0, 205, 126, 206, 32, 32, 113, 194, 117, 130, 106, 119, 171, 231, 179, 18, 210, 159, 87, 213, 42, 178, 238, 182, 189, 1, 197, 178, 35, 42, 226, 71, 34, 233, 143, 87, 71, 240, 160, 207, 98, 31, 54, 24, 39, 189, 175, 182, 244, 162, 255, 208, 78, 240, 209, 109, 218, 91, 194, 23, 97, 113, 98, 68, 76, 119, 40, 12, 32, 210, 180, 228, 178, 87, 74, 66, 157, 227, 59, 47, 233, 8, 122, 86, 118, 112, 187, 104, 146, 160, 197, 73, 207, 248, 70, 94, 178, 16, 75, 164, 154, 49, 32, 166, 235, 42, 152, 37, 200, 20, 32, 2, 191, 157, 229, 128, 71, 150, 64, 35, 155, 246, 214, 10, 88, 181, 30, 159, 241, 207, 112, 133, 160, 2, 124, 145, 40, 188, 249, 202, 195, 171, 231, 109, 208, 115, 3, 16, 229, 10, 126, 52, 202, 26, 4, 48, 6, 144, 154, 28, 189, 105, 231, 126, 57, 88, 108, 180, 26, 180, 124, 234, 155, 12, 63, 178, 17, 161, 230, 216, 119, 155, 255, 235, 225, 183, 139, 23, 137, 40, 77, 148, 178, 67, 61, 81, 21, 168, 178, 230, 67, 123, 224, 201, 198, 149, 91, 83, 1, 254, 157, 51, 144, 211, 54, 224, 110, 187, 225, 116, 1, 2, 54, 179, 252, 38, 231, 144, 237, 56, 40, 227, 185, 76, 208, 166, 59, 80, 122, 208, 230, 23, 13, 212, 187, 13, 91, 6, 167, 254, 68, 120, 35, 153, 130, 147, 173, 83, 179, 176, 224, 238, 51, 120, 126, 30, 169, 96, 49, 229, 34, 77, 239, 78, 230, 193, 225, 250, 50, 179, 58, 214, 147, 106, 67, 252, 4, 52, 63, 48, 76, 42, 70, 233, 19, 146, 19, 30, 105, 210, 14, 61, 65, 67, 63, 12, 37, 21, 79, 187, 176, 92, 38, 96, 53, 205, 215, 105, 17, 109, 66, 75, 172, 0, 232, 225, 216, 84, 30, 207, 207, 114, 73, 112, 54, 76, 179, 254, 255, 232, 171, 87, 151, 212, 76, 77, 156, 195, 245, 83, 105, 12, 2, 107, 224, 228, 50, 116, 246, 119, 94, 215, 135, 167, 12, 172, 184, 96, 133, 224, 202, 22, 0, 161, 189, 251, 220, 121, 29, 158, 236, 139, 1, 131, 163, 3, 212, 49, 151, 130, 199, 213, 148, 24, 45, 59, 102, 96, 234, 27, 65, 42, 201, 102, 128, 53, 208, 49, 245, 135, 56, 244, 158, 89, 120, 156, 187, 71, 38, 94, 151, 81, 2, 47, 102, 36, 46, 122, 199, 41, 159, 47, 94, 244, 227, 134, 68, 130, 4, 209, 232, 58, 50, 157, 100, 112, 90, 181, 72, 126, 36, 84, 233, 33, 240, 190, 216, 3, 228, 182, 188, 101, 247, 110, 210, 99, 63, 44, 225, 160, 14, 176, 16, 85, 103, 150, 108, 150, 166, 146, 91, 238, 100, 180, 97, 244, 108, 134, 131, 189, 204, 40, 115, 30, 160, 26, 231, 6, 175, 79, 119, 174, 172, 146, 41, 186, 88, 254, 149, 85, 3, 22, 112, 77, 180, 98, 243, 45, 119, 153, 254, 10, 114, 174, 168, 4, 148, 92, 131, 74, 62, 134, 21, 147, 171, 203, 188, 11, 138, 138, 11, 118, 4, 186, 201, 253, 77, 24, 183, 56, 39, 138, 214, 206, 158, 104, 39, 102, 205, 145, 61, 111, 87, 157, 229, 216, 244, 135, 19, 161, 28, 70, 231, 201, 92, 133, 101, 244, 71, 207, 30, 253, 17, 253, 248, 222, 21, 138, 209, 18, 217, 68, 151, 192, 158, 207, 205, 114, 136, 173, 118, 199, 205, 242, 126, 78, 191, 246, 34, 142, 204, 220, 112, 12, 30, 18, 151, 244, 42, 227, 182, 20, 165, 99, 138, 157, 189, 160, 114, 36, 142, 53, 207, 63, 199, 171, 168, 43, 222, 65, 133, 176, 46, 116, 31, 122, 10, 188, 133, 186, 209, 116, 150, 142, 137, 144, 199, 13, 171, 250, 77, 240, 220, 55, 50, 32, 119, 51, 33, 34, 75, 172, 208, 253, 126, 6, 127, 152, 193, 197, 117, 205, 205, 149, 249, 64, 155, 100, 94, 239, 1, 204, 206, 71, 29, 104, 0, 0, 147, 125, 94, 38, 150, 183, 84, 59, 216, 7, 84, 81, 113, 129, 110, 60, 181, 95, 194, 43, 94, 98, 66, 34, 71, 207, 97, 245, 44, 19, 203, 189, 59, 31, 49, 125, 110, 231, 99, 195, 248, 18, 122, 251, 190, 27, 185, 108, 248, 143, 20, 5, 154, 165, 94, 217, 172, 17, 87, 99, 15, 172, 63, 225, 112, 153, 23, 62, 79, 187, 204, 206, 22, 199, 24, 68, 49, 169, 59, 170, 91, 175, 72, 161, 110, 117, 62, 130, 253, 18, 161, 212, 37, 138, 232, 141, 69, 234, 170, 13, 206, 1, 150, 152, 145, 200, 41, 227, 28, 223, 60, 226, 66, 157, 108, 35, 42, 69, 17, 122, 66, 209, 2, 33, 150, 204, 151, 122, 162, 168, 232, 160, 229, 50, 57, 38, 248, 25, 30, 86, 71, 41, 230, 56, 232, 77, 149, 93, 21, 127, 175, 14, 25, 9, 43, 85, 78, 35, 198, 207, 234, 149, 79, 228, 167, 15, 203, 77, 31, 56, 1, 35, 39, 125, 223, 59, 241, 144, 105, 47, 178, 244, 119, 181, 84, 211, 44, 35, 189, 224, 141, 240, 9, 200, 139, 183, 11, 6, 97, 203, 16, 203, 109, 221, 99, 123, 255, 210, 241, 31, 253, 30, 141, 136, 187, 76, 248, 190, 133, 220, 38, 130, 176, 39, 16, 111, 115, 62, 254, 88, 191, 114, 10, 208, 110, 65, 221, 43, 136, 139, 66, 40, 129, 240, 83, 2, 229, 245, 36, 19, 171, 188, 126, 132, 27, 167, 119, 52, 130, 13, 152, 14, 203, 176, 54, 203, 127, 102, 81, 134, 219, 92, 155, 220, 213, 196, 4, 38, 22, 131, 13, 196, 152, 129, 243, 101, 164, 67, 108, 255, 13, 201, 153, 147, 172, 141, 179, 32, 79, 123, 38, 97, 5, 139, 188, 146, 3, 213, 225, 86, 40, 101, 32, 115, 193, 6, 254, 7, 103, 47, 252, 132, 216, 179, 20, 116, 188, 160, 62, 23, 143, 138, 52, 10, 202, 65, 35, 205, 118, 249, 167, 62, 90, 239, 181, 80, 59, 204, 255, 81, 29, 161, 20, 76, 32, 142, 17, 82, 206, 66, 5, 233, 145, 188, 211, 98, 117, 142, 208, 204, 189, 234, 7, 34, 159, 214, 38, 251, 174, 38, 195, 209, 7, 209, 138, 187, 11, 81, 17, 42, 30, 59, 32, 140, 212, 124, 196, 78, 216, 1, 47, 72, 144, 149, 71, 129, 67, 168, 139, 242, 251, 56, 4, 128, 62, 97, 136, 201, 69, 243, 86, 143, 40, 249, 163, 24, 52, 226, 234, 193, 62, 79, 151, 68, 38, 10, 172, 251, 155, 79, 171, 174, 190, 105, 182, 71, 242, 77, 119, 27, 173, 22, 97, 98, 121, 35, 30, 105, 87, 199, 175, 114, 2, 16, 21, 174, 155, 148, 199, 98, 210, 47, 50, 49, 48, 73, 158, 172, 201, 43, 109, 58, 167, 63, 169, 27, 22, 74, 28, 68, 45, 16, 8, 197, 12, 123, 161, 148, 199, 219, 235, 153, 155, 205, 54, 234, 157, 26, 242, 45, 55, 35, 33, 81, 7, 21, 33, 212, 48, 160, 253, 135, 244, 65, 117, 171, 150, 88, 90, 26, 180, 251, 232, 91, 14, 16, 24, 109, 34, 114, 137, 95, 154, 47, 167, 31, 227, 236, 214, 225, 86, 130, 111, 146, 245, 83, 228, 184, 228, 206, 14, 248, 68, 105, 164, 209, 231, 245, 76, 22, 222, 150, 48, 175, 220, 4, 61, 23, 77, 28, 66, 200, 19, 28, 109, 42, 34, 121, 90, 102, 242, 159, 153, 57, 48, 88, 18, 103, 214, 90, 72, 173, 189, 32, 64, 192, 11, 50, 145, 26, 170, 190, 232, 84, 194, 222, 216, 231, 57, 7, 101, 44, 106, 159, 205, 243, 206, 80, 2, 46, 196, 43, 23, 142, 223, 180, 150, 48, 197, 94, 198, 164, 102, 174, 117, 234, 95, 115, 40, 197, 157, 42, 45, 10, 53, 168, 235, 153, 201, 14, 249, 99, 101, 185, 15, 186, 240, 230, 7, 114, 189, 47, 50, 181, 234, 38, 70, 204, 161, 150, 220, 14, 104, 158, 130, 42, 212, 90, 207, 3, 205, 196, 238, 144, 141, 106, 98, 190, 118, 122, 26, 191, 56, 42, 142, 96, 146, 190, 90, 58, 69, 170, 94, 85, 144, 192, 163, 42, 36, 20, 206, 251, 74, 101, 49, 23, 207, 178, 147, 177, 183, 254, 189, 46, 44, 112, 201, 94, 43, 93, 248, 253, 187, 44, 103, 2, 188, 152, 62, 162, 117, 54, 15, 166, 228, 214, 238, 23, 216, 15, 35, 12, 76, 128, 216, 234, 152, 251, 130, 106, 25, 146, 150, 219, 78, 230, 83, 198, 88, 221, 56, 92, 23, 83, 207, 151, 63, 182, 197, 204, 113, 183, 193, 118, 94, 161, 70, 146, 122, 180, 17, 135, 242, 108, 28, 247, 139, 241, 162, 61, 190, 146, 200, 240, 210, 213, 58, 44, 8, 161, 198, 200, 90, 200, 121, 233, 18, 12, 121, 75, 92, 138, 224, 119, 32, 132, 217, 152, 126, 51, 221, 218, 13, 238, 1, 239, 13, 16, 34, 253, 125, 76, 115, 137, 59, 54, 217, 65, 239, 16, 66, 10, 67, 20, 171, 127, 152, 230, 181, 224, 233, 44, 83, 156, 149, 144, 234, 130, 153, 71, 227, 159, 44, 72, 62, 216, 171, 237, 118, 156, 115, 154, 219, 57, 252, 118, 139, 214, 231, 218, 86, 48, 223, 89, 138, 162, 70, 97, 71, 204, 43, 127, 176, 128, 77, 161, 98, 246, 161, 147, 248, 133, 6, 146, 21, 79, 10, 214, 232, 64, 230, 249, 45, 45, 38, 246, 158, 166, 221, 22, 222, 209, 89, 50, 79, 75, 76, 4, 58, 216, 55, 176, 239, 42, 127, 154, 201, 186, 186, 116, 224, 132, 135, 1, 200, 184, 201, 164, 13, 21, 146, 89, 216, 35, 161, 203, 135, 76, 134, 100, 145, 229, 35, 253, 173, 186, 232, 166, 43, 97, 244, 2, 117, 54, 81, 223, 87, 184, 18, 214, 36, 157, 217, 90, 240, 119, 205, 84, 137, 13, 121, 186, 88, 51, 204, 90, 207, 7, 111, 3, 0, 162, 135, 41, 9, 67, 47, 135, 25, 18, 190, 36, 22, 99, 203, 27, 232, 189, 177, 140, 200, 12, 216, 48, 196, 84, 124, 136, 44, 4, 104, 121, 110, 38, 91, 136, 3, 25, 222, 47, 233, 51, 134, 103, 254, 12, 72, 240, 147, 80, 74, 139, 167, 231, 54, 183, 6, 218, 152, 7, 25, 104, 195, 250, 190, 230, 185, 103, 187, 88, 106, 34, 145, 104, 95, 87, 15, 81, 72, 219, 1, 231, 145, 48, 19, 84, 35, 94, 138, 117, 228, 183, 136, 157, 217, 223, 168, 196, 16, 203, 238, 142, 223, 246, 236, 78, 179, 136, 218, 96, 211, 48, 171, 239, 183, 238, 173, 83, 224, 76, 124, 7, 132, 163, 20, 202, 140, 210, 41, 66, 26, 232, 200, 101, 233, 6, 152, 217, 27, 54, 41, 64, 254, 28, 2, 43, 246, 130, 83, 109, 218, 225, 20, 130, 50, 207, 72, 26, 110, 35, 197, 44, 235, 80, 183, 76, 169, 108, 123, 111, 189, 53, 161, 207, 196, 103, 164, 156, 14, 113, 176, 92, 187, 30, 49, 103, 197, 104, 141, 99, 195, 79, 26, 172, 1, 53, 239, 65, 143, 87, 31, 24, 174, 39, 255, 231, 128, 210, 109, 167, 127, 178, 35, 151, 130, 51, 143, 242, 74, 88, 57, 241, 182, 47, 49, 107, 182, 87, 215, 104, 158, 192, 48, 93, 54, 116, 220, 242, 174, 182, 139, 95, 64, 136, 169, 253, 209, 153, 136, 133, 35, 124, 234, 108, 196, 93, 111, 93, 171, 217, 181, 8, 34, 51, 28, 12, 239, 58, 180, 228, 114, 218, 172, 127, 46, 119, 185, 159, 49, 181, 170, 202, 185, 54, 253, 20, 235, 61, 136, 201, 210, 192, 237, 224, 24, 181, 220, 122, 158, 126, 70, 226, 58, 122, 170, 117, 14, 121, 105, 194, 104, 170, 85, 237, 237, 227, 113, 14, 111, 124, 57, 13, 34, 37, 111, 101, 36, 226, 164, 89, 202, 220, 84, 165, 58, 121, 44, 207, 134, 255, 188, 24, 112, 105, 192, 77, 124, 153, 137, 201, 102, 172, 20, 254, 135, 133, 53, 153, 154, 147, 39, 182, 62, 3, 236, 201, 200, 89, 182, 157, 48, 158, 200, 90, 229, 82, 84, 238, 46, 241, 87, 43, 106, 49, 238, 127, 38, 26, 132, 152, 143, 115, 127, 39, 189, 224, 3, 85, 71, 14, 17, 59, 108, 74, 143, 208, 33, 103, 8, 179, 199, 6, 6, 45, 65, 233, 96, 194, 189, 238, 85, 191, 165, 74, 77, 225, 66, 174, 90, 210, 144, 144, 134, 81, 76, 62, 248, 161, 16, 235, 6, 153, 194, 207, 122, 89, 39, 236, 172, 220, 12, 169, 36, 230, 247, 244, 204, 32, 119, 93, 131, 223, 96, 152, 212, 79, 233, 57, 131, 157, 135, 218, 140, 110, 176, 71, 244, 238, 242, 212, 22, 26, 204, 82, 3, 17, 176, 83, 83, 180, 209, 6, 150, 238, 246, 252, 149, 37, 121, 155, 149, 88, 229, 221, 227, 26, 109, 119, 215, 85, 62, 80, 193, 140, 144, 203, 104, 150, 70, 136, 226, 246, 135, 193, 160, 61, 35, 163, 202, 189, 87, 220, 215, 209, 13, 227, 34, 146, 142, 169, 236, 15, 146, 203, 152, 13, 41, 197, 48, 63, 66, 5, 145, 96, 2, 225, 215, 154, 40, 109, 211, 38, 152, 14, 131, 109, 143, 68, 233, 108, 218, 199, 228, 34, 107, 29, 136, 212, 255, 163, 88, 98, 67, 235, 104, 81, 235, 12, 107, 219, 24, 114, 32, 231, 224, 39, 5, 142, 23, 185, 117, 226, 24, 102, 255, 39, 196, 7, 176, 236, 104, 52, 136, 70, 255, 208, 118, 29, 17, 174, 85, 175, 16, 10, 125, 176, 214, 1, 111, 163, 132, 93, 120, 194, 191, 36, 55, 254, 79, 39, 84, 2, 118, 110, 156, 215, 39, 219, 152, 215, 216, 228, 66, 95, 251, 60, 196, 170, 188, 56, 91, 188, 102, 248, 229, 42, 85, 68, 155, 54, 17, 37, 42, 138, 153, 196, 138, 45, 206, 7, 75, 97, 238, 237, 190, 193, 103, 218, 78, 88, 179, 149, 86, 99, 234, 196, 58, 208, 117, 47, 113, 89, 112, 5, 130, 204, 221, 83, 11, 20, 228, 14, 146, 29, 90, 67, 188, 33, 217, 95, 252, 144, 184, 64, 138, 193, 95, 151, 3, 109, 124, 219, 135, 141, 22, 2, 50, 137, 212, 53, 216, 190, 87, 173, 180, 62, 112, 238, 13, 230, 254, 98, 166, 119, 34, 81, 42, 7, 46, 145, 168, 24, 157, 7, 76, 234, 2, 118, 35, 95, 124, 191, 135, 30, 90, 67, 31, 242, 64, 137, 63, 71, 240, 198, 71, 113, 5, 70, 116, 155, 167, 191, 142, 162, 173, 210, 229, 71, 202, 170, 212, 60, 148, 87, 29, 128, 77, 1, 141, 35, 50, 29, 107, 150, 123, 208, 199, 94, 72, 59, 93, 49, 214, 11, 66, 7, 41, 55, 87, 237, 92, 231, 152, 50, 203, 212, 220, 148, 188, 183, 169, 10, 15, 156, 108, 83, 174, 177, 88, 236, 245, 176, 67, 14, 108, 118, 65, 4, 146, 172, 52, 10, 190, 250, 14, 178, 66, 192, 237, 224, 56, 20, 205, 2, 5, 29, 136, 45, 78, 20, 52, 129, 236, 98, 209, 23, 155, 74, 186, 197, 179, 82, 123, 10, 236, 146, 9, 56, 134, 74, 139, 8, 162, 134, 53, 227, 183, 77, 46, 6, 212, 160, 89, 75, 53, 21, 196, 64, 160, 161, 158, 16, 87, 231, 61, 252, 111, 232, 1, 156, 170, 106, 74, 249, 177, 40, 51, 79, 50, 231, 159, 81, 162, 95, 208, 86, 23, 87, 43, 124, 218, 66, 27, 37, 180, 97, 190, 124, 2, 66, 148, 111, 19, 144, 143, 11, 27, 12, 242, 36, 167, 242, 251, 41, 176, 233, 205, 135, 9, 173, 79, 248, 14, 91, 6, 95, 222, 86, 127, 166, 19, 170, 50, 161, 38, 28, 91, 174, 149, 24, 3, 239, 15, 235, 84, 152, 53, 3, 8, 78, 169, 86, 191, 106, 31, 187, 32, 171, 84, 237, 180, 127, 62, 43, 179, 209, 39, 74, 104, 222, 246, 156, 184, 214, 72, 5, 23, 32, 31, 55, 122, 152, 59, 107, 73, 212, 138, 221, 160, 43, 184, 185, 85, 42, 50, 151, 98, 163, 86, 102, 235, 244, 90, 176, 121, 9, 0, 237, 196, 52, 210, 182, 129, 67, 239, 231, 216, 190, 229, 140, 197, 218, 209, 73, 124, 30, 242, 246, 172, 53, 76, 189, 229, 32, 100, 149, 108, 246, 224, 107, 168, 55, 254, 191, 6, 180, 205, 214, 235, 8, 147, 78, 131, 160, 180, 106, 65, 79, 90, 33, 214, 161, 18, 162, 98, 110, 58, 162, 100, 93, 184, 75, 87, 19, 54, 202, 98, 124, 7, 138, 59, 75, 47, 12, 175, 172, 241, 40, 25, 183, 73, 214, 167, 110, 123, 43, 91, 95, 51, 123, 206, 145, 138, 125, 120, 113, 1, 254, 153, 239, 78, 195, 191, 39, 72, 17, 105, 193, 249, 190, 187, 43, 198, 14, 59, 158, 198, 217, 131, 91, 248, 46, 22, 247, 212, 223, 109, 26, 20, 183, 4, 234, 200, 8, 209, 56, 136, 103, 16, 187, 131, 22, 73, 39, 38, 228, 241, 44, 219, 141, 90, 46, 177, 196, 221, 192, 233, 185, 108, 93, 175, 133, 135, 218, 21, 12, 191, 86, 96, 224, 216, 7, 98, 252, 86, 152, 53, 109, 149, 9, 247, 185, 157, 198, 43, 211, 73, 190, 68, 240, 53, 181, 67, 191, 16, 130, 247, 58, 93, 38, 54, 141, 8, 229, 177, 135, 77, 7, 39, 95, 188, 200, 44, 118, 158, 53, 10, 82, 197, 9, 30, 49, 232, 87, 224, 95, 80, 50, 3, 139, 13, 101, 212, 124, 146, 15, 7, 208, 125, 19, 210, 229, 35, 78, 72, 232, 111, 113, 10, 147, 156, 214, 151, 28, 206, 217, 188, 143, 19, 59, 66, 232, 6, 15, 84, 203, 179, 47, 162, 77, 217, 245, 210, 75, 15, 169, 160, 13, 131, 247, 240, 60, 229, 135, 53, 105, 77, 197, 134, 49, 115, 188, 137, 165, 102, 22, 159, 134, 39, 122, 113, 107, 56, 136, 101, 133, 84, 238, 109, 120, 85, 212, 207, 114, 187, 35, 0, 116, 71, 189, 112, 176, 34, 38, 107, 20, 234, 210, 255, 158, 49, 0, 201, 170, 6, 10, 4, 10, 72, 185, 177, 10, 104, 79, 175, 21, 217, 41, 111, 82, 48, 104, 0, 99, 134, 74, 63, 237, 197, 26, 161, 207, 211, 179, 35, 228, 227, 156, 69, 156, 66, 28, 217, 43, 234, 131, 254, 13, 233, 100, 88, 50, 243, 141, 18, 89, 13, 219, 128, 97, 141, 233, 187, 63, 222, 147, 243, 89, 110, 28, 149, 222, 185, 171, 251, 37, 2, 188, 31, 221, 36, 134, 216, 38, 221, 199, 71, 6, 226, 142, 37, 203, 51, 23, 30, 221, 181, 226, 115, 70, 71, 255, 92, 81, 51, 84, 38, 185, 12, 206, 8, 123, 83, 221, 70, 121, 47, 134, 27, 72, 83, 223, 25, 162, 48, 193, 108, 35, 232, 137, 73, 94, 27, 167, 240, 176, 235, 187, 129, 28, 65, 100, 149, 164, 42, 241, 209, 201, 88, 159, 144, 223, 233, 156, 129, 33, 40, 232, 100, 44, 198, 177, 1, 190, 202, 96, 127, 238, 168, 207, 169, 135, 35, 184, 58, 36, 100, 254, 130, 177, 202, 24, 195, 219, 187, 231, 177, 96, 148, 132, 34, 80, 181, 135, 235, 239, 168, 20, 101, 6, 95, 114, 184, 239, 73, 190, 47, 23, 85, 93, 122, 23, 134, 205, 204, 191, 210, 119, 28, 127, 253, 35, 186, 71, 90, 116, 43, 145, 143, 62, 13, 172, 3, 221, 132, 64, 144, 146, 84, 254, 90, 104, 197, 239, 117, 231, 85, 121, 160, 102, 219, 82, 196, 37, 152, 35, 45, 1, 160, 140, 197, 65, 93, 28, 99, 76, 85, 62, 198, 201, 32, 153, 230, 39, 161, 53, 204, 164, 109, 249, 227, 125, 102, 49, 243, 226, 95, 89, 174, 184, 215, 33, 204, 34, 182, 179, 154, 146, 68, 119, 127, 226, 231, 1, 17, 224, 241, 226, 59, 141, 254, 202, 152, 88, 174, 223, 160, 134, 194, 144, 132, 254, 151, 200, 165, 46, 213, 154, 136, 37, 67, 189, 191, 190, 234, 69, 111, 238, 187, 137, 106, 12, 30, 13, 80, 224, 14, 12, 99, 47, 228, 207, 28, 88, 40, 127, 161, 124, 91, 102, 88, 113, 183, 224, 235, 255, 69, 81, 102, 221, 47, 91, 83, 31, 10, 84, 47, 188, 76, 86, 210, 239, 216, 184, 15, 210, 163, 205, 244, 11, 24, 3, 198, 186, 109, 186, 53, 147, 132, 138, 62, 13, 139, 206, 91, 156, 143, 56, 205, 149, 17, 140, 59, 40, 190, 23, 238, 89, 99, 11, 73, 187, 25, 123, 235, 93, 35, 142, 22, 193, 235, 211, 28, 43, 4, 22, 71, 170, 224, 253, 136, 239, 44, 92, 25, 149, 237, 181, 97, 129, 108, 40, 155, 188, 205, 67, 123, 176, 134, 199, 190, 132, 231, 131, 136, 80, 98, 200, 149, 124, 180, 220, 207, 100, 242, 161, 155, 175, 253, 5, 223, 225, 112, 49, 221, 97, 159, 198, 224, 61, 249, 165, 54, 138, 29, 26, 142, 250, 26, 149, 10, 87, 46, 58, 2, 254, 246, 38, 7, 147, 101, 192, 192, 195, 163, 69, 75, 23, 162, 32, 151, 23, 155, 242, 69, 212, 48, 112, 57, 96, 66, 48, 98, 60, 82, 0, 89, 118, 7, 206, 9, 189, 176, 9, 226, 9, 11, 206, 184, 202, 237, 185, 53, 222, 227, 107, 15, 107, 218, 152, 176, 150, 67, 126, 192, 106, 83, 123, 54, 73, 139, 64, 10, 219, 33, 80, 128, 174, 30, 84, 185, 116, 20, 97, 2, 14, 87, 168, 85, 110, 187, 238, 189, 236, 233, 234, 13, 104, 189, 180, 5, 28, 131, 9, 142, 65, 213, 203, 244, 101, 234, 151, 206, 151, 35], - [21, 13, 199, 61, 41, 252, 105, 79, 215, 80, 213, 0, 62, 160, 135, 150, 24, 64, 87, 23, 82, 247, 49, 23, 27, 99, 151, 59, 198, 56, 131, 187, 127, 207, 186, 23, 172, 119, 3, 27, 44, 4, 61, 64, 153, 81, 31, 85, 91, 114, 49, 116, 179, 183, 135, 61, 151, 195, 61, 158, 49, 32, 212, 61, 109, 27, 221, 117, 180, 16, 232, 33, 148, 48, 108, 44, 174, 131, 0, 250, 147, 98, 96, 26, 177, 196, 159, 78, 162, 2, 193, 155, 91, 197, 79, 156, 225, 74, 190, 187, 175, 48, 25, 15, 159, 165, 50, 25, 235, 225, 76, 26, 60, 61, 229, 189, 174, 37, 220, 120, 0, 225, 223, 66, 221, 233, 119, 232, 199, 98, 136, 233, 32, 153, 236, 131, 131, 101, 27, 201, 218, 144, 224, 157, 196, 135, 7, 158, 192, 153, 1, 219, 117, 110, 192, 3, 232, 39, 124, 249, 205, 98, 149, 117, 56, 126, 24, 213, 74, 72, 22, 52, 64, 255, 20, 20, 159, 150, 167, 37, 245, 62, 54, 64, 77, 194, 46, 109, 67, 156, 181, 171, 18, 201, 158, 247, 245, 188, 220, 127, 29, 10, 143, 133, 114, 74, 41, 90, 199, 146, 252, 77, 0, 60, 135, 3, 239, 5, 170, 192, 24, 3, 208, 234, 253, 51, 67, 141, 42, 117, 97, 224, 150, 243, 211, 39, 147, 110, 116, 130, 210, 222, 250, 227, 0, 221, 11, 154, 166, 36, 209, 205, 246, 32, 234, 225, 247, 184, 134, 187, 210, 122, 197, 66, 246, 247, 233, 193, 158, 42, 143, 132, 59, 19, 169, 10, 42, 30, 21, 88, 200, 107, 20, 250, 21, 159, 81, 189, 215, 6, 217, 109, 44, 142, 97, 30, 199, 21, 176, 111, 2, 240, 123, 220, 13, 36, 143, 124, 26, 99, 117, 62, 33, 127, 80, 58, 40, 255, 36, 31, 57, 204, 216, 251, 84, 210, 13, 151, 152, 253, 150, 228, 50, 35, 212, 150, 230, 17, 104, 68, 7, 131, 234, 187, 218, 43, 175, 9, 82, 80, 171, 18, 90, 32, 62, 116, 26, 119, 191, 45, 227, 28, 204, 234, 73, 191, 186, 171, 103, 31, 187, 254, 252, 52, 177, 53, 92, 27, 77, 164, 89, 70, 207, 26, 156, 228, 100, 142, 75, 111, 124, 249, 197, 191, 50, 252, 128, 129, 172, 51, 2, 156, 13, 2, 11, 202, 84, 196, 72, 16, 223, 143, 196, 204, 219, 71, 182, 251, 189, 6, 1, 112, 59, 10, 146, 67, 1, 80, 254, 138, 246, 69, 159, 9, 100, 176, 19, 179, 184, 20, 183, 124, 6, 180, 11, 101, 74, 95, 162, 172, 112, 53, 92, 127, 149, 2, 54, 116, 45, 49, 145, 53, 177, 228, 128, 22, 214, 158, 35, 88, 255, 31, 8, 249, 130, 86, 234, 224, 49, 248, 82, 189, 214, 31, 134, 23, 99, 130, 77, 194, 10, 89, 181, 12, 240, 88, 4, 6, 180, 160, 178, 23, 165, 155, 219, 245, 92, 90, 26, 53, 200, 200, 232, 141, 151, 69, 55, 214, 72, 7, 134, 19, 111, 89, 191, 66, 112, 245, 172, 167, 29, 232, 221, 46, 92, 106, 72, 223, 152, 149, 191, 36, 16, 175, 59, 9, 150, 14, 106, 92, 106, 226, 55, 43, 162, 174, 91, 108, 113, 89, 93, 34, 73, 85, 52, 240, 154, 220, 155, 186, 210, 221, 101, 207, 135, 73, 57, 248, 5, 150, 75, 129, 168, 213, 210, 76, 38, 88, 84, 47, 192, 224, 153, 217, 36, 161, 64, 143, 12, 188, 29, 224, 50, 68, 106, 156, 235, 71, 36, 115, 154, 164, 148, 232, 179, 149, 120, 188, 9, 103, 137, 59, 142, 149, 222, 216, 42, 74, 145, 156, 120, 27, 171, 181, 79, 138, 164, 4, 196, 129, 204, 164, 32, 191, 138, 41, 234, 235, 19, 88, 106, 66, 124, 249, 120, 65, 144, 77, 17, 33, 253, 78, 190, 221, 130, 127, 222, 14, 85, 146, 159, 202, 142, 191, 115, 219, 116, 191, 141, 229, 213, 249, 192, 248, 112, 143, 133, 192, 61, 249, 56, 1, 213, 224, 239, 149, 221, 69, 157, 201, 39, 214, 242, 155, 61, 225, 87, 227, 88, 84, 220, 128, 196, 179, 210, 124, 123, 87, 4, 127, 246, 174, 76, 88, 136, 177, 172, 234, 91, 80, 119, 214, 116, 94, 51, 24, 117, 166, 174, 166, 98, 41, 106, 155, 11, 171, 161, 47, 152, 83, 203, 181, 107, 195, 251, 149, 185, 141, 83, 69, 212, 69, 157, 159, 137, 173, 234, 162, 42, 19, 75, 245, 194, 47, 177, 132, 13, 167, 227, 79, 185, 234, 111, 189, 232, 225, 90, 94, 248, 21, 87, 239, 108, 59, 2, 146, 2, 184, 103, 164, 81, 93, 165, 54, 8, 44, 16, 229, 108, 150, 252, 17, 229, 173, 70, 208, 98, 42, 180, 38, 17, 141, 213, 130, 97, 212, 21, 24, 239, 53, 252, 182, 180, 13, 219, 252, 36, 62, 240, 90, 124, 94, 6, 240, 231, 214, 151, 155, 191, 182, 53, 118, 208, 115, 125, 143, 74, 201, 114, 22, 32, 219, 0, 82, 23, 157, 104, 77, 32, 118, 121, 152, 197, 61, 115, 241, 5, 36, 94, 142, 163, 168, 26, 99, 232, 55, 120, 85, 234, 110, 156, 154, 215, 167, 159, 101, 239, 51, 24, 12, 194, 32, 226, 218, 52, 172, 141, 53, 32, 194, 170, 218, 139, 186, 97, 108, 129, 90, 1, 166, 241, 16, 138, 250, 54, 80, 204, 161, 103, 62, 31, 182, 115, 133, 37, 14, 32, 68, 187, 76, 89, 219, 172, 158, 41, 119, 148, 10, 164, 146, 127, 94, 186, 5, 36, 150, 250, 73, 53, 137, 194, 186, 145, 165, 1, 41, 55, 226, 72, 100, 168, 220, 217, 147, 189, 164, 42, 13, 221, 203, 188, 229, 119, 226, 153, 38, 219, 95, 191, 53, 68, 241, 180, 174, 30, 209, 33, 176, 190, 37, 199, 35, 192, 158, 240, 128, 76, 41, 145, 85, 65, 172, 242, 165, 4, 119, 37, 41, 134, 72, 97, 63, 67, 239, 241, 137, 109, 109, 95, 180, 180, 90, 157, 224, 2, 42, 63, 74, 136, 234, 254, 145, 209, 122, 84, 142, 125, 67, 171, 204, 236, 205, 185, 15, 191, 97, 172, 213, 185, 208, 17, 56, 226, 224, 189, 120, 233, 67, 37, 74, 71, 230, 159, 22, 206, 236, 17, 27, 134, 167, 244, 113, 155, 244, 107, 193, 162, 203, 152, 138, 22, 108, 130, 207, 193, 235, 76, 20, 95, 45, 71, 188, 153, 73, 220, 215, 102, 24, 69, 110, 135, 230, 12, 194, 144, 72, 169, 132, 233, 112, 51, 121, 21, 228, 167, 135, 117, 248, 121, 172, 20, 209, 185, 207, 63, 36, 28, 139, 158, 129, 61, 137, 36, 87, 59, 19, 76, 131, 157, 35, 141, 6, 21, 80, 96, 86, 178, 133, 205, 213, 145, 179, 154, 131, 152, 187, 193, 45, 51, 254, 13, 93, 143, 61, 144, 136, 250, 236, 82, 193, 222, 245, 3, 254, 118, 138, 236, 201, 200, 234, 46, 208, 63, 199, 47, 19, 97, 15, 180, 87, 109, 21, 65, 87, 71, 146, 241, 186, 14, 106, 49, 126, 153, 65, 50, 239, 202, 33, 201, 43, 81, 80, 111, 223, 184, 83, 203, 63, 120, 17, 142, 223, 33, 232, 1, 77, 62, 99, 225, 118, 164, 211, 125, 4, 79, 97, 54, 98, 217, 45, 197, 152, 236, 24, 226, 169, 237, 81, 237, 77, 192, 22, 173, 58, 53, 252, 22, 144, 78, 33, 74, 165, 94, 225, 136, 187, 243, 90, 126, 202, 225, 8, 4, 158, 118, 103, 228, 142, 223, 179, 78, 46, 203, 60, 40, 170, 218, 107, 129, 59, 2, 73, 24, 37, 162, 174, 100, 224, 80, 172, 244, 8, 77, 116, 254, 182, 20, 70, 85, 56, 227, 235, 63, 234, 139, 202, 62, 224, 48, 131, 16, 16, 172, 196, 171, 154, 29, 139, 65, 93, 223, 187, 145, 173, 149, 221, 217, 86, 231, 39, 26, 220, 178, 235, 134, 33, 238, 80, 98, 128, 119, 115, 80, 64, 199, 247, 157, 105, 114, 24, 168, 54, 250, 200, 242, 191, 44, 137, 253, 11, 66, 206, 223, 228, 10, 62, 34, 129, 216, 18, 101, 180, 162, 129, 177, 219, 51, 200, 49, 67, 2, 255, 118, 31, 141, 87, 47, 156, 163, 186, 47, 143, 57, 33, 124, 6, 140, 123, 186, 29, 186, 239, 184, 231, 196, 164, 187, 194, 82, 169, 159, 6, 68, 95, 193, 14, 209, 105, 23, 79, 57, 134, 89, 106, 156, 176, 4, 185, 65, 212, 103, 188, 218, 254, 48, 106, 184, 117, 56, 213, 229, 205, 28, 183, 84, 134, 40, 56, 64, 144, 235, 171, 75, 194, 144, 44, 53, 71, 6, 42, 204, 152, 184, 206, 198, 178, 157, 199, 22, 5, 162, 1, 235, 35, 204, 210, 6, 144, 136, 10, 172, 247, 71, 60, 44, 204, 191, 75, 167, 118, 212, 17, 22, 105, 67, 115, 27, 81, 227, 48, 10, 231, 72, 159, 68, 176, 8, 35, 48, 189, 13, 237, 173, 15, 22, 118, 110, 124, 33, 106, 76, 207, 246, 193, 69, 148, 73, 22, 189, 5, 42, 218, 255, 25, 154, 221, 46, 188, 226, 191, 110, 127, 231, 58, 4, 99, 86, 210, 160, 194, 254, 2, 27, 48, 19, 19, 229, 243, 73, 53, 230, 147, 242, 179, 10, 162, 239, 152, 231, 135, 15, 226, 13, 209, 61, 171, 157, 185, 45, 160, 202, 122, 163, 50, 28, 53, 45, 103, 215, 215, 130, 40, 184, 104, 80, 180, 10, 97, 118, 77, 147, 62, 218, 230, 112, 1, 201, 189, 206, 246, 4, 46, 28, 67, 104, 67, 207, 120, 229, 189, 179, 223, 100, 231, 71, 187, 250, 217, 229, 138, 30, 85, 33, 37, 99, 164, 182, 68, 239, 92, 62, 77, 51, 198, 158, 20, 239, 227, 190, 1, 21, 29, 174, 209, 75, 93, 132, 221, 186, 43, 146, 201, 8, 42, 99, 36, 184, 100, 1, 50, 111, 114, 225, 111, 20, 1, 98, 201, 26, 168, 65, 58, 171, 214, 121, 22, 13, 208, 78, 253, 132, 30, 251, 175, 106, 91, 38, 179, 102, 90, 195, 144, 194, 55, 225, 176, 38, 20, 71, 82, 248, 162, 201, 46, 110, 70, 145, 151, 109, 218, 56, 177, 70, 235, 109, 131, 122, 77, 65, 112, 86, 164, 125, 29, 162, 218, 218, 180, 32, 124, 58, 89, 107, 158, 154, 223, 112, 93, 214, 237, 195, 178, 156, 197, 25, 253, 41, 177, 91, 251, 216, 32, 234, 48, 141, 217, 61, 20, 204, 146, 89, 176, 36, 7, 34, 35, 68, 72, 225, 174, 3, 44, 209, 45, 21, 66, 82, 237, 251, 22, 99, 202, 170, 82, 116, 11, 121, 212, 9, 208, 221, 139, 189, 31, 160, 176, 42, 77, 63, 226, 146, 17, 68, 15, 156, 132, 226, 243, 144, 75, 49, 223, 120, 43, 192, 173, 105, 16, 131, 182, 91, 173, 83, 5, 106, 41, 31, 146, 180, 137, 2, 22, 221, 20, 193, 21, 147, 107, 141, 252, 209, 157, 153, 114, 208, 249, 224, 207, 176, 44, 7, 76, 228, 80, 170, 13, 73, 243, 99, 221, 234, 183, 61, 16, 128, 199, 13, 243, 183, 199, 146, 49, 31, 19, 243, 1, 72, 110, 119, 109, 168, 171, 50, 46, 123, 177, 180, 58, 36, 113, 181, 113, 3, 213, 58, 253, 198, 158, 77, 191, 131, 35, 85, 191, 218, 105, 82, 212, 234, 6, 197, 206, 142, 115, 118, 79, 224, 50, 114, 48, 142, 175, 251, 48, 31, 192, 7, 46, 215, 100, 103, 94, 161, 69, 57, 205, 59, 142, 174, 231, 79, 102, 235, 246, 56, 198, 201, 235, 159, 122, 29, 17, 20, 168, 195, 67, 5, 158, 107, 168, 237, 6, 82, 87, 62, 202, 174, 84, 167, 232, 82, 126, 239, 102, 97, 65, 193, 150, 194, 104, 86, 181, 227, 36, 195, 82, 190, 197, 31, 53, 86, 90, 79, 136, 112, 11, 35, 115, 242, 23, 61, 67, 212, 132, 67, 105, 199, 66, 96, 225, 51, 191, 152, 63, 236, 68, 56, 10, 197, 147, 229, 54, 181, 254, 206, 1, 13, 179, 125, 152, 235, 37, 213, 124, 21, 147, 112, 212, 211, 127, 242, 108, 175, 149, 192, 86, 91, 252, 74, 192, 17, 225, 107, 219, 246, 15, 7, 97, 53, 133, 157, 174, 32, 224, 4, 193, 218, 59, 135, 214, 225, 205, 82, 68, 196, 238, 239, 195, 118, 71, 101, 198, 215, 104, 221, 8, 77, 36, 104, 216, 255, 83, 50, 166, 205, 27, 137, 77, 133, 2, 213, 179, 150, 157, 114, 149, 60, 114, 110, 127, 157, 185, 20, 59, 254, 146, 10, 29, 120, 114, 153, 241, 107, 29, 96, 232, 207, 156, 168, 251, 94, 158, 139, 87, 213, 110, 197, 227, 54, 165, 246, 199, 83, 183, 41, 104, 153, 216, 173, 10, 64, 60, 210, 83, 240, 180, 114, 153, 183, 130, 250, 253, 238, 130, 149, 204, 80, 89, 236, 84, 50, 91, 205, 171, 151, 17, 255, 190, 107, 29, 21, 125, 70, 34, 8, 139, 125, 32, 148, 124, 253, 135, 160, 114, 225, 244, 29, 129, 226, 237, 180, 151, 238, 3, 148, 114, 80, 6, 33, 5, 138, 248, 218, 88, 246, 188, 197, 94, 108, 161, 221, 179, 104, 169, 15, 134, 40, 160, 156, 39, 212, 22, 23, 208, 194, 194, 122, 36, 3, 253, 80, 115, 93, 183, 185, 214, 243, 85, 43, 54, 168, 210, 85, 137, 123, 80, 152, 235, 134, 104, 191, 71, 42, 11, 37, 201, 255, 49, 45, 230, 62, 178, 252, 197, 161, 227, 7, 71, 219, 98, 87, 250, 19, 54, 235, 59, 242, 23, 252, 231, 173, 175, 231, 95, 53, 130, 152, 124, 244, 57, 223, 137, 248, 248, 206, 106, 89, 140, 151, 132, 90, 78, 187, 15, 129, 63, 207, 102, 109, 227, 134, 114, 23, 177, 252, 64, 83, 53, 242, 158, 199, 84, 166, 35, 106, 128, 250, 54, 129, 151, 119, 236, 214, 50, 234, 198, 94, 18, 33, 73, 191, 119, 93, 81, 117, 163, 55, 19, 109, 155, 119, 85, 133, 94, 103, 12, 29, 148, 139, 148, 46, 253, 64, 182, 227, 203, 6, 209, 145, 53, 30, 252, 129, 136, 187, 132, 127, 163, 216, 98, 11, 101, 205, 243, 138, 191, 89, 48, 250, 25, 13, 90, 177, 24, 167, 18, 144, 92, 151, 19, 225, 220, 254, 75, 98, 194, 49, 0, 247, 46, 71, 90, 131, 2, 82, 194, 174, 11, 104, 173, 165, 170, 45, 238, 38, 168, 38, 99, 103, 84, 85, 96, 135, 126, 93, 2, 197, 88, 191, 20, 183, 164, 197, 27, 171, 171, 94, 74, 28, 214, 194, 73, 222, 127, 246, 206, 166, 241, 185, 147, 193, 47, 61, 156, 201, 123, 18, 13, 240, 91, 247, 17, 162, 121, 40, 110, 58, 43, 11, 61, 222, 246, 37, 203, 198, 69, 48, 191, 243, 193, 12, 110, 254, 79, 128, 211, 97, 98, 156, 25, 225, 213, 50, 190, 252, 8, 177, 224, 90, 131, 243, 136, 230, 205, 119, 5, 201, 157, 11, 116, 98, 153, 15, 250, 13, 211, 155, 235, 200, 237, 169, 234, 234, 86, 96, 211, 210, 169, 253, 57, 133, 150, 32, 164, 246, 184, 132, 85, 118, 185, 170, 3, 158, 218, 136, 34, 14, 204, 174, 57, 5, 75, 71, 187, 167, 154, 13, 168, 117, 196, 138, 3, 47, 150, 134, 102, 206, 35, 77, 160, 142, 228, 86, 24, 128, 70, 80, 7, 203, 63, 155, 169, 94, 187, 132, 232, 169, 220, 99, 238, 120, 196, 40, 180, 187, 240, 74, 201, 215, 69, 232, 89, 26, 247, 114, 121, 255, 30, 204, 207, 21, 107, 181, 3, 100, 76, 20, 171, 237, 193, 152, 115, 156, 147, 31, 108, 85, 29, 172, 23, 201, 50, 19, 186, 112, 167, 222, 143, 121, 198, 175, 191, 196, 3, 175, 162, 84, 75, 37, 209, 59, 249, 97, 48, 219, 126, 153, 142, 11, 108, 117, 208, 246, 116, 47, 15, 30, 3, 67, 22, 54, 252, 169, 54, 170, 118, 53, 20, 215, 240, 106, 17, 39, 208, 25, 58, 1, 108, 52, 157, 7, 82, 222, 32, 9, 212, 20, 181, 202, 170, 17, 20, 108, 51, 109, 176, 154, 220, 238, 62, 170, 255, 135, 146, 175, 123, 171, 166, 68, 26, 38, 68, 6, 104, 224, 190, 92, 74, 166, 107, 137, 139, 140, 96, 47, 203, 181, 251, 202, 205, 93, 205, 245, 111, 35, 192, 170, 45, 47, 87, 111, 253, 117, 26, 91, 42, 144, 120, 179, 119, 70, 178, 61, 81, 117, 223, 101, 193, 130, 148, 120, 40, 106, 103, 162, 39, 2, 184, 192, 150, 19, 30, 201, 180, 119, 79, 169, 185, 223, 144, 14, 14, 150, 54, 26, 42, 157, 216, 177, 111, 70, 72, 153, 140, 208, 184, 170, 212, 184, 224, 26, 151, 244, 2, 251, 25, 24, 163, 16, 127, 200, 100, 192, 7, 221, 35, 102, 164, 228, 68, 207, 242, 46, 181, 35, 129, 43, 183, 37, 124, 241, 104, 74, 144, 61, 15, 26, 116, 10, 133, 126, 33, 10, 78, 129, 88, 197, 65, 125, 86, 14, 43, 67, 25, 124, 92, 188, 119, 144, 110, 66, 234, 208, 195, 164, 120, 51, 62, 171, 90, 11, 203, 107, 70, 246, 17, 243, 33, 32, 62, 69, 155, 174, 123, 124, 25, 53, 196, 73, 4, 113, 108, 107, 133, 164, 32, 255, 58, 116, 174, 255, 22, 168, 83, 53, 16, 75, 185, 28, 206, 50, 240, 183, 139, 180, 71, 161, 189, 14, 254, 231, 117, 203, 222, 21, 21, 109, 76, 62, 74, 1, 171, 93, 135, 170, 209, 88, 27, 65, 125, 116, 134, 208, 194, 233, 219, 163, 107, 211, 140, 74, 205, 234, 17, 102, 210, 114, 237, 165, 15, 15, 185, 134, 205, 241, 29, 84, 136, 119, 129, 26, 152, 164, 147, 12, 0, 64, 58, 84, 56, 184, 39, 176, 82, 46, 57, 53, 43, 58, 206, 192, 72, 123, 18, 223, 84, 18, 41, 179, 251, 251, 38, 96, 10, 144, 137, 85, 177, 27, 13, 210, 84, 248, 32, 219, 240, 215, 200, 41, 188, 26, 245, 220, 54, 118, 182, 90, 116, 245, 183, 22, 160, 128, 147, 94, 201, 77, 75, 171, 17, 63, 179, 121, 28, 184, 61, 107, 120, 86, 9, 49, 221, 108, 253, 86, 209, 208, 141, 52, 248, 248, 253, 155, 31, 155, 241, 195, 170, 201, 122, 41, 80, 81, 75, 169, 220, 246, 39, 59, 85, 1, 136, 144, 96, 205, 104, 43, 51, 11, 173, 69, 205, 235, 210, 44, 100, 163, 154, 100, 233, 181, 164, 123, 103, 102, 36, 151, 19, 253, 76, 74, 18, 118, 155, 201, 100, 44, 213, 149, 41, 160, 31, 220, 125, 143, 135, 233, 112, 64, 36, 110, 184, 89, 0, 13, 18, 160, 50, 207, 98, 67, 66, 22, 156, 37, 206, 149, 25, 109, 103, 244, 84, 91, 159, 254, 248, 74, 163, 104, 166, 138, 216, 23, 103, 59, 157, 202, 140, 144, 70, 43, 94, 29, 137, 123, 199, 39, 78, 20, 177, 239, 150, 162, 202, 76, 186, 214, 86, 219, 34, 181, 237, 106, 44, 42, 36, 140, 234, 54, 80, 88, 237, 61, 49, 182, 17, 123, 44, 81, 41, 230, 241, 183, 51, 198, 40, 248, 137, 185, 48, 34, 171, 219, 143, 71, 134, 188, 134, 94, 5, 62, 146, 55, 244, 171, 12, 60, 68, 131, 96, 148, 246, 238, 74, 167, 154, 230, 48, 139, 213, 239, 140, 162, 115, 203, 11, 35, 197, 46, 171, 44, 225, 14, 87, 93, 26, 245, 27, 158, 83, 30, 186, 114, 234, 245, 178, 153, 110, 195, 150, 64, 115, 150, 210, 124, 85, 35, 2, 178, 169, 22, 104, 160, 231, 117, 222, 219, 63, 167, 140, 140, 76, 115, 27, 8, 44, 147, 118, 44, 198, 224, 14, 243, 240, 234, 22, 37, 47, 250, 148, 6, 182, 62, 79, 184, 164, 34, 167, 168, 47, 245, 222, 219, 171, 40, 247, 132, 64, 139, 60, 81, 117, 222, 72, 174, 113, 67, 28, 35, 88, 255, 4, 169, 228, 138, 198, 254, 152, 47, 52, 26, 139, 174, 40, 119, 234, 224, 234, 183, 133, 134, 73, 39, 215, 224, 34, 212, 200, 48, 116, 63, 33, 58, 230, 235, 107, 231, 146, 212, 202, 100, 167, 146, 218, 101, 178, 116, 225, 26, 162, 229, 202, 176, 176, 133, 240, 206, 244, 230, 140, 104, 251, 36, 71, 10, 87, 48, 245, 51, 148, 251, 124, 161, 160, 42, 33, 67, 42, 145, 253, 254, 168, 161, 135, 119, 246, 100, 82, 106, 118, 95, 10, 88, 90, 115, 30, 194, 26, 124, 14, 99, 175, 7, 36, 86, 1, 68, 58, 48, 157, 49, 225, 81, 90, 138, 32, 232, 23, 75, 44, 206, 165, 177, 243, 114, 48, 241, 251, 110, 214, 4, 74, 129, 216, 223, 98, 149, 106, 184, 123, 39, 138, 153, 103, 233, 139, 42, 96, 93, 29, 172, 40, 24, 16, 204, 229, 123, 100, 8, 180, 84, 244, 208, 68, 156, 122, 43, 136, 132, 35, 30, 178, 247, 69, 252, 236, 152, 153, 105, 77, 99, 224, 36, 245, 243, 59, 240, 55, 33, 222, 26, 41, 23, 173, 26, 86, 198, 213, 46, 147, 192, 255, 53, 65, 192, 102, 153, 67, 129, 195, 87, 173, 154, 66, 44, 208, 60, 126, 238, 79, 204, 134, 117, 85, 203, 235, 224, 29, 2, 204, 69, 85, 255, 54, 166, 140, 70, 156, 244, 6, 23, 141, 82, 205, 58, 193, 201, 194, 213, 169, 1, 254, 27, 217, 16, 25, 187, 232, 105, 37, 62, 84, 195, 62, 225, 255, 216, 33, 92, 149, 200, 82, 102, 131, 139, 23, 125, 142, 29, 179, 234, 100, 62, 140, 120, 206, 169, 194, 91, 85, 125, 236, 117, 145, 84, 154, 69, 8, 137, 8, 254, 198, 55, 53, 253, 97, 53, 101, 47, 178, 196, 13, 253, 98, 73, 169, 9, 119, 232, 54, 80, 116, 58, 54, 20, 217, 229, 200, 33, 65, 185, 8, 49, 205, 116, 165, 111, 97, 226, 151, 183, 55, 39, 130, 159, 207, 192, 106, 119, 254, 48, 201, 238, 209, 134, 45, 247, 151, 150, 62, 168, 188, 221, 110, 4, 8, 140, 16, 25, 37, 143, 235, 57, 56, 3, 106, 89, 195, 80, 68, 244, 109, 124, 158, 72, 196, 90, 139, 27, 76, 59, 206, 194, 84, 178, 139, 38, 159, 146, 158, 50, 211, 39, 142, 59, 36, 49, 194, 41, 239, 136, 14, 225, 11, 131, 20, 158, 84, 243, 173, 163, 14, 6, 168, 179, 195, 196, 185, 75, 64, 184, 244, 95, 242, 56, 156, 4, 77, 182, 176, 214, 134, 34, 244, 234, 144, 236, 245, 231, 85, 5, 41, 14, 223, 56, 5, 76, 61, 167, 39, 196, 51, 100, 250, 162, 243, 8, 218, 250, 101, 148, 28, 3, 24, 210, 187, 226, 6, 90, 115, 170, 37, 221, 222, 111, 11, 58, 23, 230, 98, 133, 224, 98, 103, 123, 89, 253, 115, 230, 3, 61, 187, 111, 29, 52, 233, 154, 34, 32, 115, 207, 218, 54, 233, 56, 111, 125, 239, 77, 156, 3, 163, 238, 103, 77, 16, 145, 228, 187, 168, 244, 25, 132, 200, 244, 108, 181, 76, 210, 39, 194, 14, 129, 76, 80, 224, 159, 188, 114, 138, 172, 63, 100, 97, 6, 132, 87, 10, 93, 90, 5, 177, 235, 192, 211, 99, 17, 91, 207, 151, 143, 42, 241, 24, 149, 56, 20, 212, 118, 151, 236, 176, 35, 40, 95, 176, 50, 51, 90, 253, 223, 20, 182, 198, 86, 21, 248, 173, 10, 0, 122, 125, 247, 207, 194, 49, 191, 124, 98, 233, 81, 220, 87, 90, 204, 83, 206, 42, 252, 250, 100, 49, 214, 253, 72, 193, 55, 36, 87, 129, 10, 59, 145, 164, 59, 83, 30, 26, 224, 104, 173, 112, 30, 70, 158, 241, 164, 100, 232, 158, 102, 254, 160, 58, 208, 108, 45, 89, 179, 251, 119, 126, 177, 59, 75, 43, 149, 107, 75, 111, 206, 143, 85, 65, 160, 240, 204, 206, 143, 52, 174, 148, 15, 19, 129, 138, 71, 65, 243, 113, 210, 128, 65, 163, 112, 191, 1, 199, 47, 223, 31, 182, 38, 77, 209, 174, 124, 198, 40, 216, 122, 158, 60, 44, 87, 182, 46, 147, 39, 67, 111, 158, 207, 26, 156, 172, 189, 147, 37, 239, 208, 243, 167, 111, 88, 66, 89, 209, 233, 148, 245, 194, 95, 120, 70, 171, 121, 16, 96, 12, 202, 207, 99, 122, 141, 99, 206, 181, 109, 1, 247, 4, 158, 105, 65, 67, 229, 211, 18, 121, 84, 189, 122, 165, 85, 15, 112, 222, 254, 150, 68, 159, 126, 121, 160, 79, 24, 185, 144, 161, 203, 162, 47, 125, 25, 211, 130, 239, 248, 135, 88, 222, 253, 192, 4, 86, 10, 253, 77, 14, 243, 238, 11, 244, 95, 191, 20, 44, 232, 172, 193, 150, 122, 31, 169, 210, 48, 25, 216, 137, 233, 235, 101, 69, 41, 32, 35, 3, 85, 84, 93, 94, 146, 114, 131, 151, 248, 36, 106, 131, 72, 245, 189, 149, 63, 167, 227, 81, 219, 102, 33, 247, 79, 237, 253, 145, 146, 90, 211, 143, 214, 150, 47, 255, 4, 242, 105, 24, 250, 65, 152, 76, 73, 66, 197, 33, 156, 44, 253, 4, 243, 206, 154, 134, 113, 121, 171, 24, 4, 138, 216, 127, 43, 1, 251, 208, 149, 112, 91, 86, 180, 187, 142, 15, 206, 114, 44, 125, 178, 209, 86, 178, 11, 108, 210, 180, 176, 186, 35, 164, 176, 78, 106, 23, 49, 235, 196, 112, 55, 155, 145, 85, 10, 220, 33, 125, 53, 168, 241, 219, 244, 21, 50, 143, 66, 207, 13, 98, 13, 68, 231, 157, 19, 27, 219, 226, 204, 242, 134, 0, 82, 116, 133, 178, 144, 8, 53, 143, 140, 179, 131, 88, 248, 208, 250, 106, 179, 85, 132, 221, 103, 146, 1, 73, 112, 178, 192, 118, 104, 40, 211, 213, 210, 26, 188, 54, 217, 67, 30, 193, 108, 43, 68, 116, 95, 209, 249, 168, 205, 87, 129, 151, 5, 123, 107, 236, 17, 110, 166, 229, 96, 187, 227, 64, 116, 58, 175, 76, 0, 253, 42, 89, 86, 217, 128, 40, 119, 228, 37, 26, 35, 189, 219, 86, 66, 29, 219, 210, 124, 14, 37, 164, 127, 49, 104, 255, 164, 204, 16, 18, 58, 228, 132, 210, 221, 43, 75, 175, 227, 40, 4, 42, 242, 33, 79, 2, 17, 169, 148, 137, 206, 113, 4, 80, 69, 10, 97, 84, 186, 218, 135, 43, 94, 173, 98, 134, 219, 163, 168, 213, 226, 188, 123, 159, 55, 146, 234, 249, 109, 105, 69, 183, 61, 11, 71, 247, 154, 233, 208, 19, 20, 229, 200, 208, 58, 44, 167, 220, 235, 41, 174, 133, 215, 72, 74, 18, 155, 101, 172, 96, 235, 19, 76, 250, 248, 251, 53, 200, 81, 238, 234, 56, 230, 159, 70, 56, 130, 93, 206, 144, 214, 117, 213, 53, 212, 89, 13, 182, 133, 196, 21, 12, 210, 90, 29, 175, 184, 41, 0, 12, 36, 60, 172, 28, 17, 126, 169, 63, 230, 197, 4, 83, 250, 191, 109, 189, 65, 203, 182, 117, 219, 57, 39, 129, 78, 201, 132, 110, 210, 155, 99, 217, 214, 131, 109, 197, 118, 133, 56, 35, 241, 200, 153, 173, 149, 99, 211, 151, 251, 247, 59, 181, 165, 46, 183, 128, 128, 68, 245, 19, 200, 202, 122, 135, 194, 63, 33, 66, 21, 141, 60, 196, 158, 233, 83, 45, 103, 253, 239, 93, 2, 243, 6, 216, 30, 65, 168, 13, 54, 246, 173, 207, 112, 250, 145, 106, 6, 78, 14, 215, 62, 219, 68, 228, 41, 57, 190, 184, 99, 102, 220, 181, 96, 63, 98, 65, 192, 168, 60, 101, 36, 98, 15, 90, 136, 144, 99, 61, 40, 154, 214, 29, 30, 98, 137, 246, 181, 214, 73, 217, 208, 123, 212, 22, 27, 1, 93, 174, 191, 164, 63, 144, 33, 123, 229, 255, 103, 135, 21, 220, 250, 171, 255, 188, 40, 98, 94, 79, 200, 144, 41, 83, 170, 30, 196, 80, 127, 216, 13, 156, 173, 133, 33, 188, 60, 110, 153, 68, 158, 83, 137, 30, 212, 253, 165, 2, 218, 186, 244, 238, 158, 40, 94, 145, 81, 84, 100, 184, 189, 166, 17, 37, 191, 2, 129, 216, 202, 17, 77, 252, 68, 242, 165, 125, 255, 16, 190, 206, 109, 197, 224, 6, 206, 138, 66, 80, 52, 249, 246, 108, 67, 110, 147, 110, 84, 34, 250, 169, 91, 59, 244, 89, 150, 77, 84, 107, 46, 47, 40, 230, 12, 18, 73, 120, 243, 11, 85, 131, 211, 165, 135, 243, 47, 139, 217, 141, 45, 105, 111, 125, 255, 125, 106, 77, 246, 153, 75, 54, 75, 243, 215, 19, 236, 229, 26, 118, 255, 215, 78, 176, 204, 29, 158, 206, 58, 159, 108, 148, 239, 235, 110, 95, 255, 177, 16, 32, 200, 78, 210, 219, 228, 66, 181, 135, 232, 32, 88, 117, 172, 58, 89, 250, 146, 250, 248, 247, 28, 167, 94, 218, 50, 94, 157, 151, 52, 146, 2, 7, 46, 124, 50, 211, 142, 229, 173, 164, 232, 127, 152, 74, 31, 153, 209, 255, 113, 249, 190, 87, 234, 14, 49, 12, 61, 213, 67, 34, 126, 2, 80, 58, 138, 173, 58, 17, 95, 219, 194, 79, 25, 198, 224, 59, 56, 36, 38, 56, 2, 154, 231, 13, 1, 230, 171, 244, 19, 103, 82, 170, 125, 54, 149, 24, 3, 232, 187, 148, 150, 12, 173, 228, 91, 92, 58, 36, 166, 114, 136, 79, 110, 197, 50, 111, 220, 171, 5, 240, 29, 219, 111, 18, 250, 10, 9, 0, 33, 223, 185, 191, 15, 228, 9, 95, 235, 104, 143, 187, 161, 166, 19, 126, 199, 204, 119, 182, 20, 84, 2, 113, 126, 113, 233, 142, 152, 93, 16, 233, 127, 246, 0, 238, 21, 226, 12, 23, 4, 56, 42, 233, 162, 20, 15, 79, 105, 7, 131, 219, 111, 116, 137, 82, 34, 250, 181, 71, 220, 125, 181, 203, 52, 65, 242, 86, 249, 184, 3, 46, 159, 97, 6, 159, 208, 248, 65, 129, 160, 84, 109, 22, 100, 17, 161, 56, 108, 32, 38, 70, 156, 83, 74, 214, 246, 45, 144, 18, 117, 54, 68, 125, 205, 1, 65, 128, 225, 2, 241, 223, 194, 1, 87, 161, 85, 49, 247, 16, 107, 215, 113, 64, 14, 51, 157, 149, 103, 21, 110, 134, 142, 88, 94, 175, 218, 14, 112, 61, 80, 112, 4, 127, 118, 254, 165, 84, 233, 150, 165, 104, 128, 238, 159, 33, 27, 38, 21, 4, 198, 15, 166, 152, 142, 194, 98, 27, 22, 58, 221, 113, 216, 108, 40, 65, 2, 147, 31, 158, 157, 64, 179, 90, 189, 135, 8, 55, 105, 251, 206, 110, 89, 129, 208, 128, 199, 14, 171, 243, 51, 55, 215, 79, 25, 165, 51, 193, 241, 123, 193, 247, 164, 137, 110, 156, 236, 109, 41, 223, 92, 196, 228, 5, 100, 23, 139, 197, 19, 125, 43, 166, 8, 174, 40, 188, 167, 216, 248, 139, 244, 24, 1, 241, 99, 113, 136, 49, 15, 145, 59, 131, 71, 35, 147, 200, 67, 247, 101, 88, 86, 0, 5, 120, 103, 204, 118, 79, 157, 0, 74, 36, 32, 71, 139, 17, 13, 13, 163, 4, 109, 2, 174, 235, 6, 113, 52, 81, 91, 199, 166, 238, 252, 169, 109, 203, 225, 102, 20, 136, 130, 109, 102, 84, 136, 237, 100, 91, 97, 193, 44, 198, 194, 31, 197, 106, 126, 179, 0, 233, 77, 151, 96, 28, 198, 242, 26, 42, 70, 104, 224, 150, 184, 157, 232, 202, 255, 200, 66, 14, 216, 185, 69, 220, 190, 239, 69, 90, 7, 118, 190, 65, 227, 137, 25, 81, 56, 227, 181, 7, 230, 72, 32, 77, 65, 61, 43, 84, 69, 145, 32, 10, 168, 19, 127, 61, 84, 225, 187, 89, 234, 39, 67, 120, 254, 39, 15, 74, 106, 124, 15, 113, 52, 17, 189, 86, 76, 79, 219, 202, 21, 114, 38, 107, 21, 31, 90, 69, 10, 10, 74, 206, 170, 33, 213, 161, 187, 140, 245, 204, 175, 224, 23, 118, 198, 207, 4, 28, 82, 59, 91, 101, 214, 214, 205, 205, 145, 27, 126, 235, 27, 209, 204, 37, 169, 53, 230, 147, 70, 167, 185, 183, 243, 54, 206, 92, 67, 47, 101, 120, 2, 224, 35, 52, 209, 16, 211, 44, 158, 21, 55, 7, 102, 75, 66, 81, 188, 103, 164, 154, 124, 160, 59, 68, 25, 111, 45, 29, 57, 146, 26, 210, 126, 182, 107, 204, 4, 142, 237, 54, 190, 55, 61, 2, 16, 193, 205, 38, 97, 253, 233, 177, 35, 76, 134, 109, 61, 224, 244, 10, 237, 54, 218, 81, 49, 132, 96, 204, 68, 247, 173, 59, 80, 95, 45, 231, 215, 40, 38, 7, 2, 159, 158, 237, 145, 84, 8, 211, 125, 7, 196, 197, 7, 162, 78, 139, 254, 170, 111, 236, 132, 112, 138, 247, 144, 35, 208, 11, 250, 218, 119, 90, 104, 68, 127, 114, 207, 148, 21, 206, 223, 144, 56, 190, 164, 165, 240, 50, 32, 87, 47, 77, 40, 90, 235, 222, 56, 48, 118, 187, 26, 60, 156, 199, 97, 241, 152, 161, 75, 175, 97, 245, 75, 255, 99, 174, 90, 198, 81, 221, 168, 162, 177, 220, 111, 52, 192, 78, 140, 91, 240, 45, 103, 231, 115, 97, 189, 198, 94, 37, 166, 128, 206, 10, 80, 228, 69, 170, 131, 168, 151, 85, 99, 113, 247, 111, 43, 53, 216, 240, 105, 121, 120, 190, 85, 73, 87, 11, 119, 20, 83, 9, 105, 171, 60, 243, 99, 19, 137, 70, 62, 169, 207, 41, 217, 75, 129, 194, 108, 77, 160, 248, 149, 87, 89, 44, 49, 93, 175, 6, 40, 158, 108, 20, 119, 21, 112, 240, 223, 23, 169, 200, 230, 137, 22, 41, 238, 201, 36, 115, 9, 25, 184, 18, 153, 251, 107, 186, 12, 153, 230, 78, 199, 180, 238, 135, 123, 66, 226, 101, 104, 247, 151, 221, 255, 95, 236, 37, 18, 240, 209, 80, 174, 145, 193, 248, 165, 10, 145, 101, 114, 98, 11, 213, 122, 164, 61, 38, 66, 241, 105, 52, 213, 33, 255, 203, 28, 246, 4, 228, 245, 223, 187, 118, 210, 199, 243, 246, 232, 58, 103, 118, 210, 139, 81, 243, 123, 25, 244, 123, 148, 25, 191, 28, 192, 142, 50, 239, 206, 215, 253, 181, 192, 87, 46, 20, 120, 177, 160, 151, 249, 250, 227, 175, 2, 167, 235, 47, 243, 210, 22, 162, 89, 113, 211, 179, 142, 43, 46, 245, 62, 183, 128, 17, 64, 217, 120, 252, 148, 236, 80, 8, 59, 219, 165, 129, 190, 212, 30, 254, 75, 146, 209, 65, 183, 150, 194, 73, 144, 132, 194, 127, 79, 30, 223, 51, 151, 49, 133, 110, 206, 159, 204, 21, 75, 230, 26, 67, 243, 119, 65, 34, 106, 201, 69, 176, 235, 123, 46, 159, 18, 58, 147, 56, 162, 156, 15, 173, 219, 124, 49, 254, 147, 232, 80, 7, 175, 11, 218, 206, 218, 78, 170, 51, 64, 175, 80, 121, 207, 72, 112, 6, 25, 131, 177, 106, 43, 85, 78, 42, 36, 84, 144, 66, 62, 93, 196, 190, 201, 148, 7, 215, 124, 75, 25, 239, 132, 77, 94, 61, 67, 71, 217, 35, 62, 206, 14, 201, 5, 197, 21, 164, 119, 213, 231, 216, 204, 158, 78, 82, 10, 15, 61, 189, 199, 240, 233, 125, 41, 238, 45, 156, 23, 212, 213, 211, 60, 112, 195, 80, 216, 103, 82, 38, 133, 74, 174, 91, 202, 99, 104, 22, 153, 92, 185, 83, 88, 0, 133, 39, 114, 147, 156, 228, 192, 181, 127, 205, 117, 213, 22, 74, 134, 129, 118, 64, 1, 39, 154, 98, 180, 163, 227, 192, 9, 70, 6, 234, 172, 6, 131, 59, 226, 55, 83, 81, 135, 55, 165, 111, 209, 50, 126, 70, 171, 227, 242, 137, 175, 12, 228, 78, 30, 191, 161, 251, 102, 151, 167, 113, 146, 203, 215, 32, 143, 171, 136, 163, 72, 197, 56, 110, 199, 156, 191, 48, 9, 22, 216, 102, 0, 163, 44, 208, 192, 82, 178, 26, 61, 164, 228, 190, 249, 211, 40, 17, 66, 11, 11, 151, 202, 100, 124, 52, 6, 216, 184, 249, 53, 115, 187, 232, 164, 108, 114, 198, 149, 174, 23, 240, 249, 7, 79, 156, 91, 87, 204, 230, 201, 244, 69, 242, 24, 175, 126, 60, 213, 56, 171, 167, 80, 128, 74, 204, 100, 121, 219, 189, 177, 167, 52, 88, 17, 110, 215, 157, 197, 125, 21, 141, 199, 24, 19, 108, 137, 110, 40, 4, 177, 62, 95, 159, 138, 213, 203, 223, 84, 248, 62, 198, 23, 209, 30, 184, 167, 19, 129, 59, 242, 3, 57, 169, 65, 166, 57, 190, 1, 210, 211, 242, 167, 233, 250, 115, 218, 81, 244, 103, 153, 43, 236, 20, 173, 247, 47, 200, 55, 252, 84, 178, 134, 1, 135, 100, 218, 185, 220, 229, 224, 231, 85, 120, 227, 221, 74, 1, 95, 20, 185, 209, 74, 81, 1, 146, 88, 223, 103, 248, 218, 129, 170, 106, 176, 127, 2, 97, 25, 69, 38, 97, 252, 34, 66, 56, 109, 185, 197, 143, 207, 84, 55, 169, 0, 2, 201, 118, 221, 18, 218, 158, 163, 81, 34, 115, 70, 206, 60, 241, 191, 171, 209, 203, 86, 185, 101, 248, 86, 141, 224, 176, 30, 86, 62, 207, 141, 119, 25, 162, 44, 53, 199, 140, 216, 201, 182, 125, 175, 193, 144, 6, 95, 121, 255, 131, 133, 173, 90, 10, 102, 213, 63, 100, 164, 8, 94, 165, 183, 42, 156, 70, 59, 25, 244, 168, 210, 126, 126, 143, 200, 202, 29, 187, 227, 224, 87, 26, 210, 40, 45, 197, 216, 217, 81, 16, 127, 99, 99, 59, 251, 26, 72, 146, 229, 26, 2, 88, 79, 161, 202, 204, 67, 232, 37, 14, 150, 251, 128, 27, 86, 132, 65, 106, 34, 52, 120, 77, 163, 229, 151, 61, 195, 28, 82, 8, 158, 42, 197, 24, 110, 215, 151, 202, 41, 252, 84, 225, 201, 59, 130, 129, 247, 49, 56, 155, 219, 56, 64, 64, 174, 34, 34, 176, 154, 18, 2, 163, 199, 119, 229, 66, 108, 212, 93, 159, 218, 43, 80, 134, 158, 14, 104, 156, 172, 178, 121, 25, 52, 84, 214, 40, 78, 46, 85, 144, 98, 174, 70, 121, 168, 10, 51, 151, 23, 0, 93, 99, 66, 187, 215, 226, 13, 220, 104, 202, 192, 30, 172, 110, 105, 189, 247, 58, 180, 210, 196, 216, 1, 236, 87, 67, 163, 89, 103, 34, 139, 235, 70, 157, 182, 74, 200, 158, 210, 23, 243, 153, 38, 129, 234, 207, 141, 33, 195, 63, 93, 174, 243, 190, 78, 174, 207, 253, 169, 113, 255, 24, 216, 163, 184, 123, 161, 122, 111, 143, 59, 187, 83, 229, 99, 118, 236, 233, 149, 158, 4, 118, 25, 186, 49, 126, 199, 71, 198, 67, 30, 124, 127, 255, 109, 212, 124, 165, 135, 14, 5, 7, 231, 11, 182, 108, 164, 168, 27, 213, 230, 45, 138, 221, 62, 136, 97, 98, 214, 60, 18, 225, 100, 240, 99, 83, 7, 80, 172, 191, 168, 177, 115, 255, 90, 151, 64, 122, 44, 58, 178, 99, 13, 129, 135, 230, 194, 138, 247, 205, 251, 49, 137, 80, 203, 7, 61, 226, 24, 65, 175, 83, 0, 57, 253, 220, 84, 54, 33, 8, 211, 116, 44, 71, 109, 195, 209, 218, 245, 93, 33, 156, 98, 238, 201, 43, 175, 114, 17, 136, 68, 131, 124, 167, 113, 192, 241, 211, 57, 187, 135, 124, 59, 166, 152, 70, 128, 78, 251, 226, 245, 86, 97, 215, 223, 239, 130, 119, 155, 138, 16, 99, 214, 177, 211, 195, 70, 226, 95, 110, 209, 210, 209, 24, 70, 158, 192, 46, 135, 241, 16, 233, 12, 140, 55, 164, 206, 96, 115, 8, 53, 106, 29, 177, 113, 239, 108, 246, 11, 202, 66, 40, 207, 45, 220, 96, 208, 81, 154, 145, 198, 243, 255, 175, 209, 193, 65, 21, 243, 63, 122, 55, 109, 175, 142, 121, 137, 249, 131, 190, 72, 222, 181, 226, 36, 181, 27, 253, 36, 17, 240, 42, 212, 11, 106, 216, 64, 196, 206, 219, 95, 13, 123, 74, 64, 103, 216, 201, 131, 73, 24, 195, 184, 158, 230, 38, 124, 1, 120, 133, 196, 76, 239, 17, 28, 38, 119, 55, 61, 50, 142, 9, 182, 97, 36, 195, 32, 13, 92, 175, 134, 17, 229, 205, 56, 221, 114, 191, 48, 73, 171, 223, 214, 62, 58, 33, 20, 40, 189, 176, 224, 100, 229, 17, 148, 160, 148, 25, 68, 180, 24, 154, 84, 167, 74, 187, 147, 237, 232, 109, 194, 234, 76, 11, 170, 33, 171, 233, 89, 7, 241, 173, 255, 80, 119, 190, 86, 234, 0, 26, 243, 201, 27, 36, 102, 5, 38, 206, 18, 229, 169, 1, 196, 43, 249, 3, 207, 3, 244, 243, 161, 165, 105, 151, 187, 120, 164, 100, 114, 225, 38, 7, 217, 129, 138, 219, 8, 139, 46, 72, 167, 220, 35, 201, 32, 76, 194, 178, 200, 150, 4, 162, 158, 238, 124, 5, 243, 67, 89, 156, 23, 123, 232, 115, 128, 158, 220, 223, 250, 239, 119, 167, 198, 141, 88, 155, 110, 21, 39, 66, 146, 21, 225, 136, 68, 107, 218, 107, 233, 22, 234, 188, 199, 43, 111, 110, 235, 230, 113, 254, 230, 59, 206, 247, 249, 32, 216, 92, 67, 77, 250, 18, 164, 105, 188, 251, 217, 91, 75, 42, 187, 163, 249, 238, 91, 204, 84, 182, 83, 106, 10, 209, 129, 134, 88, 134, 222, 118, 129, 14, 44, 76, 89, 47, 235, 166, 43, 126, 3, 9, 121, 2, 50, 183, 76, 147, 57, 176, 232, 220, 9, 184, 107, 248, 253, 53, 119, 35, 3, 159, 249, 77, 174, 98, 248, 165, 148, 251, 124, 144, 238, 48, 248, 189, 61, 88, 191, 31, 19, 1, 85, 48, 155, 8, 153, 63, 163, 175, 147, 133, 232, 57, 188, 188, 6, 128, 3, 120, 27, 24, 99, 246, 63, 188, 136, 67, 147, 231, 192, 50, 174, 249, 2, 250, 0, 72, 46, 108, 131, 237, 16, 146, 21, 110, 51, 254, 117, 72, 92, 119, 217, 50, 113, 142, 251, 17, 37, 216, 146, 244, 221, 212, 212, 203, 45, 173, 106, 137, 11, 170, 125, 104, 159, 58, 93, 204, 139, 112, 186, 7, 80, 224, 140, 162, 18, 203, 254, 152, 1, 137, 186, 116, 236, 85, 36, 41, 35, 200, 176, 8, 102, 167, 20, 237, 160, 210, 38, 28, 82, 116, 160, 193, 49, 18, 149, 111, 18, 101, 23, 39, 13, 153, 139, 95, 26, 47, 74, 248, 28, 207, 177, 36, 204, 66, 55, 229, 210, 90, 81, 159, 233, 92, 219, 129, 252, 63, 4, 69, 124, 11, 140, 217, 153, 236, 157, 171, 64, 21, 249, 137, 40, 51, 158, 190, 111, 44, 158, 236, 197, 71, 92, 30, 135, 169, 121, 30, 80, 1, 124, 38, 236, 163, 240, 56, 115, 200, 236, 169, 240, 12, 250, 16, 214, 34, 63, 50, 22, 133, 163, 182, 172, 113, 57, 219, 126, 173, 39, 136, 230, 57, 194, 192, 120, 49, 203, 4, 212, 3, 221, 5, 184, 40, 121, 217, 10, 125, 124, 209, 66, 174, 125, 103, 249, 221, 111, 227, 92, 163, 171, 170, 228, 206, 229, 52, 53, 13, 18, 68, 42, 230, 243, 222, 78, 114, 251, 163, 211, 69, 33, 231, 216, 62, 93, 178, 32, 18, 191, 169, 1, 125, 104, 80, 237, 129, 127, 18, 193, 105, 69, 65, 60, 46, 70, 40, 50, 131, 156, 236, 109, 177, 234, 19, 42, 169, 153, 109, 93, 95, 245, 89, 43, 188, 184, 97, 160, 53, 121, 91, 73, 139, 107, 113, 132, 238, 17, 184, 4, 69, 119, 239, 37, 248, 95, 128, 141, 173, 246, 49, 73, 21, 105, 82, 97, 138, 63, 82, 123, 75, 207, 139, 226, 90, 183, 193, 239, 111, 231, 198, 95, 28, 50, 153, 253, 168, 30, 214, 53, 216, 152, 117, 204, 57, 34, 39, 5, 162, 1, 10, 76, 210, 121, 143, 91, 130, 247, 141, 113, 247, 197, 240, 205, 244, 238, 26, 84, 67, 32, 114, 221, 188, 66, 126, 78, 202, 151, 121, 159, 140, 198, 102, 180, 148, 214, 177, 195, 12, 114, 51, 45, 26, 109, 155, 203, 107, 84, 214, 73, 88, 81, 226, 79, 173, 110, 3, 55, 233, 64, 88, 158, 229, 32, 79, 64, 207, 79, 103, 243, 66, 32, 107, 149, 214, 47, 193, 194, 220, 9, 211, 220, 21, 84, 119, 89, 36, 132, 106, 122, 227, 134, 199, 91, 164, 117, 103, 68, 1, 60, 141, 92, 154, 6, 82, 240, 134, 104, 255, 79, 89, 102, 214, 71, 108, 192, 74, 133, 252, 99, 60, 194, 10, 238, 244, 240, 40, 240, 95, 53, 151, 46, 118, 183, 35, 89, 228, 62, 18, 33, 82, 20, 7, 211, 147, 167, 204, 10, 99, 252, 58, 181, 101, 165, 156, 180, 23, 35, 155, 194, 226, 90, 7, 188, 129, 102, 92, 16, 227, 89, 154, 138, 106, 103, 54, 112, 84, 215, 254, 134, 83, 59, 162, 159, 224, 131, 221, 207, 221, 246, 164, 209, 60, 61, 68, 103, 119, 133, 107, 197, 149, 212, 64, 240, 181, 22, 223, 48, 33, 14, 170, 12, 250, 58, 106, 84, 51, 63, 217, 234, 11, 183, 197, 146, 118, 239, 7, 120, 110, 138, 188, 189, 133, 105, 157, 23, 167, 73, 45, 197, 14, 29, 123, 91, 124, 171, 56, 113, 57, 14, 128, 255, 0, 147, 32, 76, 170, 182, 68, 188, 200, 116, 88, 30, 219, 82, 49, 202, 178, 141, 182, 169, 242, 150, 67, 168, 208, 207, 84, 158, 159, 217, 240, 87, 177, 63, 16, 138, 47, 252, 77, 173, 76, 79, 172, 214, 228, 139, 82, 226, 9, 123, 160, 211, 166, 159, 234, 7, 147, 201, 96, 6, 229, 223, 23, 170, 242, 140, 32, 24, 239, 250, 136, 181, 92, 55, 190, 94, 46, 86, 112, 49, 233, 234, 229, 61, 26, 105, 78, 184, 200, 211, 157, 54, 238, 125, 199, 199, 162, 204, 164, 140, 107, 209, 177, 223, 61, 239, 155, 95, 177, 211, 118, 35, 219, 162, 232, 156, 28, 237, 155, 35, 252, 41, 34, 220, 93, 123, 208, 212, 114, 156, 123, 130, 242, 128, 137, 225, 58, 114, 221, 173, 239, 245, 78, 111, 255, 126, 235, 88, 110, 222, 27, 219, 7, 187, 93, 64, 121, 46, 254, 123, 159, 1, 234, 187, 190, 180, 131, 60, 34, 154, 189, 168, 159, 209, 24, 63, 89, 75, 64, 80, 113, 190, 161, 4, 113, 216, 34, 50, 115, 15, 244, 135, 15, 70, 117, 110, 75, 100, 159, 118, 120, 41, 170, 223, 151, 235, 52, 133, 121, 108, 5, 140, 93, 75, 32, 171, 71, 102, 30, 209, 97, 113, 250, 106, 184, 224, 43, 187, 6, 192, 183, 8, 58, 105, 31, 25, 189, 114, 240, 252, 85, 221, 192, 3, 123, 120, 157, 62, 234, 225, 87, 183, 132, 146, 128, 199, 64, 202, 22, 110, 68, 238, 109, 237, 228, 206, 38, 163, 57, 96, 176, 115, 1, 115, 193, 25, 126, 221, 124, 7, 47, 164, 42, 43, 39, 142, 116, 118, 43, 180, 4, 199, 1, 90, 94, 175, 204, 17, 132, 223, 10, 201, 6, 234, 72, 145, 230, 237, 219, 20, 233, 57, 125, 131, 31, 49, 112, 253, 111, 134, 250, 29, 102, 124, 136, 26, 217, 47, 180, 153, 48, 192, 103, 141, 148, 74, 26, 223, 38, 87, 7, 48, 31, 73, 173, 255, 172, 7, 110, 110, 97, 9, 211, 236, 221, 155, 186, 172, 216, 132, 242, 123, 45, 195, 16, 235, 152, 7, 8, 56, 17, 77, 114, 120, 21, 247, 117, 190, 5, 39, 70, 87, 220, 136, 48, 167, 225, 204, 92, 55, 2, 130, 200, 24, 115, 132, 17, 57, 152, 183, 220, 152, 136, 85, 53, 135, 52, 63, 42, 193, 128, 202, 238, 104, 243, 241, 92, 30, 123, 129, 178, 53, 133, 70, 89, 12, 110, 35, 203, 147, 68, 208, 163, 126, 42, 243, 29, 140, 162, 209, 234, 131, 15, 223, 38, 0, 152, 216, 222, 211, 57, 100, 111, 96, 196, 91, 106, 65, 228, 253, 109, 71, 188, 177, 28, 77, 105, 212, 213, 240, 4, 3, 27, 224, 89, 83, 9, 60, 194, 201, 136, 75, 25, 169, 180, 82, 77, 188, 123, 169, 223, 163, 254, 124, 42, 95, 131, 75, 215, 152, 76, 253, 220, 154, 30, 14, 188, 230, 128, 10, 109, 120, 41, 238, 189, 131, 53, 4, 25, 111, 237, 168, 25, 234, 75, 254, 152, 21, 95, 181, 231, 150, 239, 116, 99, 216, 142, 162, 112, 26, 236, 190, 73, 41, 244, 126, 78, 42, 38, 42, 123, 200, 109, 142, 93, 128, 113, 52, 23, 160, 242, 34, 161, 203, 243, 195, 174, 25, 16, 74, 52, 103, 75, 142, 243, 135, 65, 28, 23, 26, 92, 188, 240, 213, 2, 113, 201, 165, 51, 122, 131, 69, 61, 6, 255, 192, 225, 232, 30, 65, 85, 151, 125, 241, 25, 96, 21, 196, 122, 167, 83, 234, 8, 54, 156, 114, 11, 112, 205, 118, 194, 106, 104, 215, 87, 240, 84, 16, 156, 39, 131, 196, 202, 214, 57, 211, 115, 118, 61, 69, 38, 71, 0, 156, 11, 117, 123, 121, 25, 250, 50, 59, 225, 51, 9, 87, 129, 165, 192, 201, 161, 207, 163, 129, 21, 171, 125, 221, 254, 93, 179, 29, 54, 168, 98, 21, 105, 95, 242, 4, 62, 36, 98, 123, 127, 204, 183, 107, 37, 117, 48, 189, 154, 245, 203, 253, 240, 239, 95, 153, 200, 59, 70, 87, 103, 144, 65, 225, 39, 250, 254, 211, 61, 239, 136, 10, 185, 6, 98, 52, 108, 23, 46, 243, 227, 209, 88, 199, 76, 1, 30, 183, 156, 75, 77, 26, 165, 101, 214, 187, 188, 80, 190, 229, 248, 166, 63, 144, 237, 102, 54, 251, 184, 199, 2, 62, 212, 149, 26, 11, 89, 12, 86, 244, 18, 83, 70, 189, 91, 146, 63, 126, 81, 5, 187, 211, 37, 128, 27, 87, 21, 148, 221, 110, 26, 253, 231, 37, 245, 67, 8, 3, 223, 111, 10, 163, 115, 195, 197, 14, 75, 216, 253, 196, 112, 181, 226, 5, 176, 185, 44, 131, 195, 57, 229, 126, 82, 41, 4, 146, 201, 224, 53, 147, 113, 16, 114, 16, 100, 179, 93, 47, 168, 60, 198, 174, 112, 204, 241, 190, 99, 67, 45, 111, 217, 141, 225, 220, 41, 105, 230, 129, 19, 145, 248, 181, 191, 163, 100, 118, 101, 31, 49, 251, 122, 231, 236, 119, 165, 94, 236, 137, 226, 238, 131, 15, 24, 118, 142, 17, 92, 136, 4, 211, 1, 206, 73, 152, 153, 108, 218, 70, 200, 198, 215, 1, 149, 0, 175, 50, 134, 240, 128, 85, 8, 163, 125, 219, 214, 183, 29, 90, 130, 121, 189, 167, 71, 64, 132, 97, 17, 53, 239, 222, 144, 84, 221, 215, 114, 47, 88, 244, 51, 94, 16, 150, 108, 164, 180, 61, 102, 221, 68, 4, 196, 246, 197, 29, 230, 56, 14, 131, 191, 169, 144, 163, 83, 250, 189, 133, 20, 236, 244, 200, 2, 135, 128, 128, 40, 136, 13, 131, 1, 8, 87, 252, 21, 0, 199, 215, 172, 29, 131, 241, 255, 176, 120, 174, 155, 29, 83, 180, 15, 11, 255, 89, 180, 109, 76, 118, 136, 110, 38, 205, 76, 82, 126, 4, 162, 95, 145, 98, 82, 195, 89, 202, 106, 109, 168, 25, 215, 115, 191, 241, 160, 139, 15, 77, 231, 189, 161, 206, 153, 242, 92, 169, 78, 24, 120, 90, 172, 233, 231, 83, 170, 182, 57, 56, 179, 145, 50, 41, 43, 6, 205, 0, 147, 119, 70, 37, 203, 140, 152, 41, 153, 75, 22, 199, 3, 254, 189, 244, 141, 75, 231, 100, 71, 112, 80, 113, 39, 14, 138, 199, 176, 169, 13, 188, 201, 189, 49, 236, 223, 28, 19, 205, 225, 1, 83, 90, 131, 226, 147, 108, 62, 134, 51, 89, 126, 102, 165, 205, 244, 63, 86, 99, 104, 231, 46, 43, 196, 63, 118, 104, 76, 182, 156, 181, 207, 75, 17, 158, 110, 13, 202, 178, 1, 67, 10, 184, 40, 166, 31, 177, 174, 134, 35, 38, 117, 205, 152, 209, 218, 223, 161, 192, 192, 221, 17, 142, 197, 81, 42, 124, 2, 44, 110, 141, 146, 115, 36, 236, 203, 92, 73, 139, 72, 126, 175, 233, 195, 126, 75, 74, 81, 41, 245, 106, 20, 247, 231, 242, 166, 72, 139, 132, 41, 174, 20, 193, 227, 229, 43, 19, 10, 118, 108, 57, 161, 136, 18, 236, 237, 153, 198, 152, 133, 38, 8, 62, 151, 99, 253, 23, 124, 229, 202, 51, 8, 192, 218, 167, 232, 77, 181, 73, 219, 198, 50, 179, 117, 176, 163, 193, 55, 26, 182, 224, 4, 219, 126, 255, 165, 205, 164, 18, 158, 168, 223, 72, 70, 88, 252, 22, 41, 98, 179, 103, 225, 118, 223, 7, 92, 117, 13, 215, 78, 74, 227, 217, 61, 89, 144, 90, 156, 235, 213, 17, 70, 20, 214, 125, 40, 133, 147, 128, 50, 200, 198, 84, 187, 154, 204, 246, 180, 133, 94, 182, 240, 219, 196, 237, 12, 86, 52, 202, 39, 136, 248, 102, 148, 67, 42, 227, 186, 23, 145, 76, 17, 136, 10, 209, 59, 144, 87, 153, 67, 205, 143, 68, 254, 84, 10, 43, 87, 214, 250, 152, 231, 89, 176, 26, 219, 146, 4, 112, 243, 59, 186, 76, 147, 65, 113, 103, 204, 86, 40, 50, 77, 140, 165, 124, 243, 110, 97, 234, 132, 206, 161, 68, 6, 224, 2, 239, 48, 198, 252, 215, 251, 229, 136, 104, 32, 193, 75, 91, 162, 130, 64, 29, 133, 196, 185, 86, 51, 79, 221, 240, 114, 123, 188, 16, 101, 180, 74, 59, 2, 198, 144, 136, 89, 164, 144, 153, 214, 90, 149, 77, 65, 201, 103, 59, 75, 23, 114, 3, 181, 152, 176, 25, 188, 218, 36, 150, 163, 142, 227, 234, 143, 62, 177, 207, 3, 236, 52, 201, 4, 55, 251, 230, 47, 136, 148, 102, 87, 240, 223, 25, 255, 216, 117, 241, 37, 71, 241, 197, 196, 162, 89, 187, 242, 11, 116, 229, 218, 53, 104, 250, 73, 77, 241, 189, 226, 219, 250, 173, 185, 203, 76, 167, 173, 58, 43, 40, 251, 78, 159, 183, 202, 145, 98, 44, 161, 209, 35, 94, 93, 218, 53, 89, 103, 106, 54, 135, 47, 68, 168, 109, 62, 77, 239, 214, 161, 253, 194, 138, 250, 246, 203, 195, 29, 226, 226, 87, 118, 192, 148, 253, 205, 87, 106, 251, 229, 15, 201, 201, 0, 230, 201, 80, 160, 121, 83, 163, 193, 189, 8, 114, 79, 37, 42, 207, 201, 52, 41, 151, 182, 227, 38, 192, 236, 170, 29, 201, 211, 252, 84, 208, 77, 44, 157, 62, 255, 185, 255, 64, 183, 159, 40, 7, 175, 144, 80, 47, 75, 179, 93, 146, 145, 248, 7, 14, 138, 69, 65, 150, 208, 80, 127, 83, 232, 122, 209, 190, 159, 181, 106, 49, 118, 115, 26, 40, 9, 48, 58, 18, 118, 235, 38, 66, 225, 87, 28, 39, 52, 65, 53, 84, 74, 32, 41, 14, 63, 242, 241, 247, 128, 8, 180, 139, 15, 146, 203, 62, 96, 147, 88, 228, 119, 88, 70, 130, 234, 102, 174, 27, 98, 161, 167, 178, 228, 175, 51, 226, 233, 227, 145, 41, 153, 29, 52, 243, 47, 143, 40, 248, 175, 185, 161, 40, 222, 107, 60, 177, 116, 72, 231, 130, 191, 110, 164, 31, 193, 145, 255, 61, 103, 177, 18, 26, 203, 232, 128, 11, 45, 130, 153, 237, 83, 193, 197, 3, 176, 5, 55, 239, 151, 68, 134, 185, 110, 68, 189, 151, 180, 36, 30, 48, 214, 213, 118, 144, 245, 129, 67, 169, 196, 99, 155, 107, 227, 214, 219, 141, 12, 184, 197, 16, 154, 74, 232, 66, 146, 19, 168, 158, 2, 124, 49, 241, 53, 59, 5, 78, 167, 243, 196, 86, 167, 243, 30, 202, 166, 55, 178, 19, 82, 56, 158, 247, 42, 217, 185, 71, 233, 42, 17, 214, 61, 86, 173, 130, 3, 249, 130, 99, 10, 69, 5, 82, 118, 196, 97, 158, 7, 174, 97, 128, 58, 189, 148, 29, 170, 31, 156, 136, 134, 116, 150, 220, 101, 33, 182, 237, 102, 112, 187, 125, 73, 21, 57, 45, 189, 189, 67, 54, 130, 61, 218, 37, 162, 210, 143, 73, 104, 222, 7, 187, 45, 80, 70, 42, 119, 60, 241, 156, 105, 119, 79, 207, 125, 217, 107, 34, 18, 178, 229, 66, 165, 243, 151, 168, 68, 148, 205, 227, 12, 22, 14, 15, 71, 99, 59, 135, 234, 73, 226, 79, 241, 56, 243, 139, 27, 11, 219, 105, 40, 174, 12, 36, 105, 15, 2, 31, 215, 217, 56, 157, 110, 175, 132, 221, 98, 141, 27, 168, 4, 131, 241, 70, 225, 93, 255, 232, 145, 217, 197, 204, 239, 243, 196, 71, 140, 59, 155, 29, 98, 85, 169, 156, 73, 196, 190, 144, 164, 217, 158, 58, 249, 204, 30, 54, 119, 216, 26, 245, 148, 216, 9, 245, 56, 98, 105, 53, 46, 176, 17, 138, 113, 161, 170, 213, 107, 171, 61, 90, 175, 197, 45, 141, 227, 236, 77, 254, 72, 153, 253, 20, 26, 78, 8, 227, 200, 250, 59, 176, 52, 68, 36, 178, 89, 114, 176, 204, 59, 41, 184, 134, 207, 113, 11, 17, 12, 44, 38, 70, 156, 224, 229, 239, 36, 128, 166, 156, 45, 220, 213, 108, 89, 22, 72, 129, 255, 182, 125, 213, 22, 209, 234, 191, 169, 112, 26, 105, 119, 26, 88, 26, 140, 46, 45, 145, 93, 11, 87, 71, 0, 13, 93, 104, 98, 192, 160, 131, 205, 211, 77, 29, 75, 232, 176, 210, 226, 102, 168, 107, 24, 38, 62, 92, 175, 254, 79, 73, 65, 193, 59, 62, 17, 3, 26, 121, 123, 213, 1, 241, 203, 246, 209, 62, 89, 4, 90, 37, 51, 1, 221, 140, 108, 17, 174, 241, 233, 185, 36, 41, 222, 103, 234, 86, 96, 67, 182, 177, 20, 1, 183, 144, 69, 18, 112, 182, 138, 125, 134, 129, 81, 104, 7, 79, 59, 231, 21, 37, 240, 210, 172, 80, 255, 104, 4, 57, 138, 179, 74, 40, 190, 72, 98, 110, 24, 232, 14, 217, 193, 168, 96, 52, 157, 196, 246, 223, 25, 76, 199, 250, 36, 2, 116, 167, 230, 51, 204, 203, 12, 225, 228, 23, 65, 55, 157, 18, 88, 240, 135, 166, 62, 248, 106, 211, 7, 82, 53, 82, 23, 110, 199, 205, 191, 30, 94, 27, 140, 151, 13, 67, 156, 87, 187, 238, 120, 162, 154], - [31, 108, 80, 135, 54, 40, 68, 33, 12, 155, 229, 182, 189, 14, 254, 137, 149, 17, 117, 224, 222, 193, 23, 96, 52, 54, 94, 66, 192, 119, 177, 245, 187, 67, 144, 135, 49, 195, 50, 222, 121, 89, 127, 87, 55, 43, 6, 81, 22, 23, 205, 52, 111, 40, 219, 116, 109, 197, 170, 121, 118, 196, 236, 18, 88, 51, 40, 71, 27, 29, 140, 43, 206, 178, 233, 26, 19, 22, 142, 95, 179, 255, 163, 186, 244, 242, 223, 52, 225, 171, 81, 209, 110, 149, 242, 89, 90, 238, 229, 185, 76, 185, 13, 97, 133, 93, 165, 234, 145, 88, 63, 152, 114, 207, 79, 242, 21, 146, 134, 98, 136, 95, 174, 129, 64, 227, 50, 122, 99, 42, 75, 120, 133, 52, 142, 40, 47, 230, 166, 230, 86, 251, 83, 181, 119, 162, 78, 58, 22, 167, 121, 67, 7, 97, 149, 215, 140, 115, 83, 158, 46, 245, 65, 203, 81, 36, 114, 34, 199, 164, 2, 33, 47, 155, 11, 20, 32, 12, 112, 77, 207, 4, 10, 57, 23, 204, 106, 35, 152, 20, 58, 82, 35, 31, 83, 136, 41, 252, 210, 244, 87, 121, 135, 159, 95, 71, 213, 113, 196, 149, 254, 15, 57, 18, 211, 175, 215, 54, 137, 105, 132, 141, 163, 6, 51, 168, 177, 163, 238, 15, 72, 179, 99, 81, 26, 219, 138, 83, 133, 66, 9, 237, 196, 48, 17, 120, 187, 40, 153, 38, 155, 87, 103, 76, 150, 83, 53, 244, 195, 252, 196, 209, 110, 193, 1, 55, 30, 40, 90, 19, 110, 44, 234, 78, 200, 100, 191, 112, 58, 176, 254, 76, 171, 175, 41, 252, 154, 25, 248, 155, 101, 239, 66, 161, 162, 237, 222, 86, 90, 45, 85, 58, 98, 78, 77, 11, 58, 22, 111, 168, 49, 117, 29, 134, 31, 65, 12, 245, 216, 127, 199, 118, 137, 26, 45, 7, 129, 23, 22, 24, 172, 4, 135, 10, 189, 70, 47, 229, 5, 80, 24, 168, 53, 159, 54, 153, 240, 23, 26, 76, 66, 60, 120, 28, 69, 232, 3, 149, 102, 103, 227, 0, 38, 122, 176, 139, 162, 228, 73, 206, 190, 49, 228, 239, 213, 226, 234, 168, 203, 163, 31, 227, 115, 179, 125, 132, 1, 18, 149, 59, 153, 26, 24, 56, 103, 110, 7, 54, 233, 160, 108, 130, 39, 0, 125, 199, 162, 3, 43, 209, 110, 43, 77, 223, 164, 35, 129, 231, 165, 94, 178, 125, 188, 246, 232, 105, 28, 74, 55, 197, 26, 130, 200, 88, 140, 150, 178, 224, 197, 63, 224, 36, 133, 211, 34, 117, 161, 222, 72, 93, 2, 123, 61, 232, 138, 158, 164, 33, 145, 212, 96, 39, 141, 233, 48, 188, 97, 70, 90, 210, 150, 106, 189, 124, 154, 27, 254, 2, 87, 81, 102, 214, 254, 38, 212, 2, 51, 36, 43, 20, 68, 199, 245, 229, 90, 39, 231, 200, 1, 90, 118, 9, 132, 138, 9, 234, 121, 254, 179, 0, 224, 76, 140, 5, 112, 16, 89, 221, 17, 177, 52, 107, 34, 201, 62, 5, 83, 241, 77, 229, 112, 93, 115, 122, 97, 225, 87, 45, 83, 235, 222, 7, 45, 116, 200, 27, 209, 58, 130, 136, 210, 92, 129, 168, 67, 10, 84, 54, 35, 96, 14, 20, 223, 83, 146, 50, 42, 58, 247, 44, 230, 110, 8, 154, 233, 62, 37, 17, 32, 120, 189, 86, 157, 59, 100, 70, 253, 229, 47, 228, 83, 101, 180, 247, 235, 52, 98, 185, 150, 237, 137, 188, 146, 160, 160, 192, 7, 25, 33, 244, 131, 177, 190, 133, 86, 186, 13, 169, 38, 87, 224, 43, 223, 112, 96, 18, 55, 92, 102, 6, 164, 150, 81, 161, 253, 67, 214, 62, 2, 216, 180, 237, 15, 111, 75, 208, 27, 180, 40, 13, 135, 205, 200, 153, 181, 245, 103, 28, 200, 178, 4, 140, 60, 226, 195, 62, 174, 73, 100, 247, 178, 92, 143, 127, 2, 151, 167, 151, 55, 245, 33, 201, 222, 47, 64, 163, 232, 249, 99, 18, 229, 142, 7, 101, 91, 30, 36, 62, 75, 244, 57, 94, 248, 21, 238, 97, 67, 234, 80, 88, 127, 172, 49, 139, 106, 34, 181, 233, 16, 133, 136, 134, 183, 240, 115, 185, 173, 231, 202, 124, 37, 163, 143, 190, 193, 102, 75, 79, 229, 93, 219, 4, 255, 203, 104, 201, 25, 85, 144, 63, 24, 24, 58, 64, 228, 49, 130, 52, 137, 64, 223, 178, 67, 103, 236, 201, 218, 160, 253, 135, 156, 54, 35, 169, 152, 154, 82, 210, 48, 59, 4, 93, 170, 12, 248, 13, 178, 186, 146, 32, 222, 194, 251, 51, 233, 75, 140, 139, 166, 204, 94, 115, 134, 199, 208, 20, 133, 71, 199, 197, 78, 205, 141, 43, 168, 96, 46, 61, 50, 140, 169, 98, 167, 101, 185, 78, 214, 81, 70, 73, 192, 157, 146, 45, 209, 94, 208, 192, 203, 186, 28, 56, 182, 84, 215, 153, 33, 68, 126, 166, 202, 178, 158, 176, 81, 248, 29, 110, 27, 127, 131, 190, 245, 190, 131, 95, 101, 186, 210, 166, 135, 159, 90, 207, 234, 177, 199, 74, 229, 160, 225, 194, 10, 96, 193, 145, 86, 158, 33, 114, 156, 113, 56, 35, 215, 72, 7, 132, 214, 229, 225, 112, 26, 217, 244, 81, 211, 70, 181, 5, 73, 66, 83, 100, 3, 123, 87, 200, 11, 10, 69, 53, 57, 221, 144, 131, 43, 97, 249, 59, 37, 144, 246, 59, 7, 164, 133, 215, 138, 50, 236, 133, 21, 181, 249, 36, 217, 77, 145, 64, 167, 41, 53, 55, 154, 125, 143, 213, 9, 223, 207, 76, 36, 193, 11, 145, 79, 128, 1, 136, 251, 232, 106, 214, 16, 219, 213, 71, 81, 18, 23, 76, 223, 252, 251, 141, 61, 102, 238, 11, 57, 139, 169, 196, 3, 116, 98, 121, 194, 32, 145, 212, 24, 57, 90, 235, 198, 250, 2, 166, 167, 129, 147, 213, 99, 171, 154, 82, 120, 204, 181, 250, 248, 151, 224, 4, 22, 86, 13, 110, 42, 74, 56, 5, 193, 44, 71, 167, 104, 178, 236, 35, 61, 118, 235, 55, 44, 43, 157, 199, 247, 97, 131, 119, 24, 237, 78, 191, 102, 214, 87, 116, 159, 132, 173, 36, 126, 92, 85, 174, 171, 147, 228, 141, 182, 34, 45, 49, 238, 179, 42, 80, 196, 198, 92, 79, 166, 190, 14, 245, 195, 204, 99, 53, 183, 193, 59, 147, 80, 67, 185, 27, 167, 207, 140, 210, 148, 123, 83, 202, 97, 235, 135, 121, 75, 254, 47, 47, 240, 11, 8, 43, 240, 106, 240, 135, 20, 163, 255, 111, 106, 94, 128, 4, 78, 197, 45, 209, 66, 184, 180, 176, 134, 182, 105, 243, 148, 214, 229, 175, 155, 123, 28, 120, 47, 155, 90, 37, 116, 83, 32, 147, 162, 183, 131, 170, 106, 245, 192, 11, 173, 189, 204, 151, 222, 76, 27, 181, 116, 41, 220, 74, 65, 88, 26, 176, 219, 178, 55, 146, 176, 240, 116, 125, 152, 227, 47, 32, 47, 236, 130, 51, 220, 51, 130, 138, 114, 192, 12, 165, 181, 86, 23, 20, 72, 111, 249, 246, 109, 84, 94, 169, 68, 49, 12, 127, 156, 158, 60, 105, 41, 20, 199, 239, 56, 66, 79, 251, 38, 222, 219, 38, 184, 197, 98, 114, 146, 126, 141, 236, 68, 235, 165, 61, 111, 102, 50, 163, 44, 22, 44, 226, 20, 242, 214, 247, 187, 32, 64, 246, 110, 103, 90, 180, 195, 42, 114, 134, 226, 159, 254, 42, 184, 65, 176, 248, 182, 31, 167, 26, 178, 27, 178, 225, 180, 67, 232, 136, 176, 92, 86, 202, 99, 140, 252, 34, 112, 3, 110, 189, 184, 173, 141, 165, 242, 146, 17, 114, 125, 126, 111, 253, 22, 174, 72, 194, 198, 148, 178, 33, 18, 57, 241, 17, 235, 23, 186, 208, 57, 248, 233, 1, 198, 120, 176, 79, 253, 63, 139, 111, 17, 7, 215, 177, 115, 106, 212, 74, 222, 110, 75, 199, 77, 72, 51, 119, 97, 60, 82, 15, 121, 3, 43, 182, 9, 7, 187, 121, 84, 204, 82, 22, 77, 132, 244, 247, 38, 78, 133, 28, 187, 234, 224, 61, 197, 92, 213, 35, 101, 122, 28, 128, 58, 199, 10, 44, 39, 4, 101, 239, 224, 252, 169, 31, 39, 36, 40, 191, 24, 57, 164, 123, 41, 237, 162, 190, 38, 198, 29, 21, 140, 166, 77, 145, 232, 250, 108, 247, 18, 195, 118, 134, 8, 177, 74, 214, 146, 200, 10, 70, 189, 134, 204, 128, 173, 254, 115, 144, 89, 129, 11, 174, 16, 145, 193, 97, 138, 200, 250, 203, 54, 231, 45, 218, 59, 209, 42, 148, 154, 227, 62, 38, 211, 210, 216, 67, 86, 44, 95, 40, 207, 190, 247, 84, 34, 176, 232, 184, 201, 213, 253, 223, 159, 122, 26, 18, 37, 158, 173, 95, 60, 144, 86, 52, 74, 219, 55, 67, 218, 244, 103, 117, 149, 149, 37, 154, 166, 1, 129, 235, 147, 135, 253, 4, 26, 95, 134, 41, 212, 166, 74, 21, 241, 235, 72, 188, 213, 210, 217, 223, 252, 241, 247, 2, 142, 63, 4, 87, 201, 154, 187, 48, 182, 108, 48, 70, 83, 179, 230, 102, 93, 83, 197, 130, 99, 255, 181, 217, 142, 57, 102, 62, 182, 134, 241, 163, 228, 237, 170, 71, 148, 68, 74, 92, 36, 24, 234, 105, 30, 205, 29, 49, 210, 87, 162, 75, 76, 179, 182, 59, 167, 124, 140, 147, 56, 68, 79, 37, 133, 23, 43, 225, 236, 216, 170, 70, 224, 222, 116, 5, 134, 202, 186, 112, 242, 214, 9, 196, 5, 51, 127, 232, 235, 214, 138, 10, 172, 21, 18, 15, 231, 163, 223, 65, 18, 160, 172, 243, 16, 52, 166, 131, 208, 94, 139, 226, 175, 39, 3, 58, 38, 254, 63, 147, 28, 122, 74, 24, 109, 69, 167, 35, 172, 233, 154, 40, 117, 221, 244, 149, 165, 9, 164, 148, 178, 152, 247, 113, 57, 140, 120, 79, 230, 142, 233, 168, 105, 85, 84, 210, 99, 203, 62, 131, 41, 69, 77, 36, 70, 10, 173, 136, 191, 204, 61, 212, 92, 39, 54, 236, 128, 130, 10, 78, 223, 103, 119, 30, 124, 8, 36, 37, 202, 127, 19, 144, 39, 247, 236, 216, 186, 16, 100, 46, 174, 243, 160, 93, 190, 209, 104, 97, 57, 79, 133, 105, 186, 92, 144, 186, 26, 161, 97, 37, 1, 249, 36, 239, 22, 33, 217, 244, 232, 139, 248, 171, 130, 217, 195, 40, 111, 26, 215, 219, 199, 241, 120, 83, 59, 227, 87, 63, 223, 92, 117, 97, 211, 102, 231, 225, 225, 56, 136, 201, 87, 75, 211, 132, 210, 175, 213, 31, 169, 180, 197, 125, 185, 254, 41, 220, 12, 163, 176, 198, 208, 12, 17, 72, 209, 27, 179, 254, 183, 200, 142, 32, 68, 236, 188, 19, 218, 235, 109, 6, 97, 5, 70, 102, 43, 90, 150, 141, 131, 125, 121, 27, 194, 159, 136, 25, 233, 9, 75, 27, 14, 245, 229, 229, 189, 34, 245, 200, 238, 26, 198, 51, 167, 46, 222, 19, 189, 15, 96, 250, 57, 36, 187, 197, 177, 99, 85, 187, 195, 97, 172, 166, 168, 76, 103, 90, 165, 240, 112, 25, 171, 254, 19, 196, 20, 82, 237, 234, 18, 140, 64, 238, 162, 119, 97, 252, 174, 97, 67, 180, 166, 79, 18, 194, 156, 85, 26, 46, 140, 169, 80, 223, 127, 100, 211, 237, 120, 41, 62, 84, 202, 126, 183, 46, 171, 61, 231, 117, 3, 186, 255, 134, 38, 254, 56, 24, 27, 110, 118, 217, 179, 146, 169, 85, 50, 44, 155, 189, 172, 4, 166, 160, 196, 171, 246, 88, 43, 58, 72, 134, 212, 228, 209, 237, 55, 115, 48, 175, 144, 15, 174, 83, 117, 231, 101, 107, 50, 115, 165, 69, 1, 115, 224, 98, 227, 34, 61, 105, 79, 80, 4, 44, 166, 135, 191, 252, 180, 17, 143, 78, 211, 174, 195, 159, 170, 193, 19, 29, 58, 229, 179, 30, 114, 229, 157, 137, 70, 72, 200, 122, 171, 119, 29, 182, 87, 30, 174, 161, 222, 58, 233, 119, 215, 107, 159, 223, 143, 183, 182, 214, 111, 145, 93, 7, 9, 92, 163, 124, 53, 184, 43, 47, 56, 150, 39, 191, 43, 53, 78, 144, 10, 19, 175, 255, 247, 232, 68, 89, 246, 224, 164, 107, 93, 108, 252, 241, 183, 34, 190, 132, 233, 157, 3, 241, 143, 133, 88, 57, 223, 194, 180, 106, 7, 185, 235, 118, 0, 118, 81, 185, 169, 61, 10, 158, 215, 175, 172, 92, 91, 194, 169, 161, 160, 48, 194, 239, 44, 57, 247, 211, 211, 94, 23, 105, 191, 110, 186, 209, 64, 79, 167, 205, 236, 180, 14, 240, 3, 127, 170, 171, 72, 148, 164, 241, 139, 148, 92, 235, 193, 249, 25, 0, 161, 134, 228, 189, 45, 4, 104, 228, 55, 121, 82, 155, 204, 98, 114, 175, 165, 89, 226, 244, 130, 160, 162, 175, 48, 222, 22, 2, 102, 112, 172, 33, 239, 9, 167, 71, 177, 252, 157, 144, 119, 147, 180, 63, 182, 149, 1, 227, 97, 205, 42, 205, 38, 23, 147, 89, 3, 162, 84, 132, 152, 40, 70, 224, 83, 227, 79, 154, 32, 107, 71, 50, 56, 243, 58, 224, 82, 4, 199, 48, 165, 127, 90, 249, 153, 176, 181, 158, 11, 57, 36, 106, 201, 107, 87, 162, 139, 68, 121, 99, 126, 227, 142, 111, 27, 168, 236, 252, 15, 111, 84, 1, 194, 241, 195, 133, 26, 63, 180, 7, 190, 85, 71, 81, 148, 106, 119, 146, 148, 236, 106, 5, 236, 252, 155, 205, 35, 44, 94, 110, 255, 230, 26, 89, 18, 94, 162, 63, 87, 156, 76, 92, 138, 47, 187, 95, 112, 76, 116, 150, 135, 194, 0, 178, 64, 84, 18, 240, 150, 21, 160, 104, 204, 65, 182, 95, 156, 231, 178, 170, 213, 40, 58, 121, 16, 215, 128, 55, 181, 66, 138, 173, 129, 196, 119, 204, 68, 150, 139, 75, 146, 76, 189, 11, 23, 104, 63, 237, 143, 191, 94, 175, 232, 223, 23, 145, 172, 1, 248, 177, 173, 92, 47, 183, 215, 2, 1, 201, 40, 221, 174, 103, 232, 16, 137, 178, 228, 118, 170, 53, 205, 40, 190, 173, 227, 101, 164, 52, 250, 248, 201, 152, 243, 111, 86, 107, 99, 119, 239, 144, 190, 150, 203, 81, 206, 158, 37, 11, 62, 108, 229, 150, 97, 66, 174, 32, 41, 160, 53, 164, 160, 5, 108, 146, 141, 73, 3, 172, 40, 248, 152, 77, 199, 100, 196, 172, 180, 249, 104, 126, 43, 7, 82, 20, 114, 94, 115, 126, 66, 167, 106, 68, 161, 216, 244, 211, 97, 248, 151, 144, 35, 91, 127, 100, 220, 231, 5, 149, 94, 176, 222, 248, 215, 20, 30, 208, 30, 8, 254, 219, 130, 182, 52, 225, 33, 110, 222, 121, 200, 76, 121, 58, 237, 178, 55, 24, 58, 15, 97, 186, 19, 205, 95, 82, 106, 216, 40, 168, 96, 141, 85, 163, 90, 236, 190, 254, 96, 128, 113, 148, 173, 96, 185, 162, 8, 150, 184, 77, 148, 194, 223, 227, 248, 247, 76, 117, 144, 11, 190, 190, 43, 78, 208, 168, 190, 176, 119, 18, 141, 131, 150, 149, 118, 185, 143, 62, 186, 69, 48, 193, 120, 124, 222, 109, 140, 184, 229, 44, 208, 129, 52, 237, 3, 21, 199, 176, 30, 79, 59, 204, 137, 187, 13, 137, 143, 118, 36, 163, 192, 129, 165, 236, 63, 51, 254, 120, 141, 26, 165, 191, 236, 113, 106, 20, 54, 63, 150, 106, 120, 225, 134, 101, 119, 73, 180, 136, 7, 159, 144, 8, 120, 167, 83, 19, 57, 108, 187, 162, 144, 92, 206, 178, 201, 154, 171, 245, 65, 253, 170, 202, 234, 204, 107, 37, 128, 181, 94, 169, 56, 45, 211, 216, 31, 10, 208, 200, 138, 99, 54, 27, 74, 6, 73, 95, 10, 91, 184, 229, 215, 65, 225, 144, 10, 54, 49, 21, 176, 241, 144, 187, 241, 77, 158, 60, 154, 29, 15, 178, 102, 230, 161, 172, 252, 193, 28, 116, 7, 181, 227, 154, 2, 213, 52, 183, 123, 79, 203, 150, 8, 155, 120, 117, 216, 124, 246, 224, 239, 203, 55, 171, 130, 17, 231, 161, 97, 112, 167, 19, 202, 54, 26, 44, 165, 45, 28, 20, 247, 139, 105, 241, 102, 83, 80, 161, 146, 94, 83, 10, 73, 143, 70, 199, 121, 143, 204, 216, 174, 182, 152, 111, 53, 128, 194, 166, 2, 186, 8, 204, 70, 79, 240, 38, 82, 87, 92, 17, 109, 184, 45, 45, 209, 151, 207, 44, 193, 47, 0, 242, 67, 21, 9, 56, 83, 75, 73, 146, 78, 70, 36, 192, 41, 206, 216, 244, 42, 191, 71, 55, 238, 36, 239, 78, 133, 191, 189, 151, 88, 217, 160, 135, 190, 101, 157, 39, 73, 166, 68, 130, 21, 110, 55, 33, 218, 201, 22, 123, 196, 249, 137, 166, 85, 75, 26, 18, 121, 170, 83, 214, 183, 183, 189, 170, 0, 170, 204, 11, 34, 234, 203, 18, 204, 138, 158, 117, 114, 208, 142, 73, 210, 85, 100, 51, 152, 203, 41, 110, 92, 251, 49, 53, 100, 122, 22, 230, 105, 250, 46, 204, 186, 199, 169, 203, 197, 43, 213, 177, 27, 32, 194, 167, 6, 34, 248, 65, 55, 245, 150, 89, 126, 2, 116, 182, 158, 168, 54, 167, 112, 46, 0, 61, 115, 237, 232, 68, 89, 247, 168, 213, 214, 247, 171, 117, 90, 11, 89, 0, 34, 155, 178, 3, 163, 94, 203, 18, 27, 67, 26, 78, 88, 24, 133, 238, 167, 139, 131, 232, 77, 222, 31, 122, 238, 211, 51, 68, 102, 161, 80, 40, 217, 67, 64, 78, 105, 233, 31, 80, 178, 193, 73, 44, 224, 253, 39, 11, 17, 128, 52, 165, 71, 52, 215, 204, 107, 135, 249, 150, 2, 147, 157, 244, 190, 21, 55, 60, 217, 51, 61, 44, 131, 172, 180, 241, 74, 223, 2, 181, 252, 99, 229, 37, 125, 55, 219, 2, 58, 72, 131, 57, 12, 154, 184, 206, 82, 102, 71, 62, 16, 97, 247, 60, 34, 105, 47, 130, 193, 6, 231, 158, 160, 146, 248, 95, 32, 103, 20, 222, 91, 102, 96, 67, 235, 108, 158, 128, 83, 112, 48, 158, 94, 162, 109, 33, 117, 144, 248, 86, 143, 83, 91, 176, 185, 139, 74, 133, 8, 172, 14, 47, 17, 247, 156, 38, 97, 137, 125, 249, 116, 149, 58, 117, 158, 229, 116, 147, 98, 252, 108, 75, 164, 60, 206, 232, 120, 44, 139, 152, 22, 233, 94, 169, 25, 21, 61, 109, 182, 122, 66, 157, 222, 32, 159, 69, 208, 146, 88, 34, 187, 136, 56, 204, 102, 71, 230, 197, 223, 227, 211, 76, 109, 222, 192, 247, 138, 221, 63, 127, 117, 54, 37, 172, 4, 158, 235, 218, 184, 229, 115, 152, 152, 101, 65, 37, 191, 158, 29, 21, 20, 26, 168, 39, 104, 132, 60, 241, 182, 225, 236, 247, 235, 167, 159, 150, 14, 137, 212, 198, 228, 57, 33, 178, 22, 83, 13, 180, 217, 32, 19, 125, 198, 7, 75, 7, 51, 126, 180, 115, 156, 196, 20, 8, 107, 27, 183, 193, 3, 206, 168, 22, 202, 25, 192, 223, 86, 249, 231, 65, 144, 220, 117, 7, 235, 180, 127, 218, 247, 186, 82, 142, 144, 179, 115, 126, 94, 59, 82, 46, 184, 182, 236, 90, 9, 32, 9, 46, 252, 158, 0, 208, 226, 236, 142, 171, 116, 124, 144, 95, 141, 135, 121, 173, 173, 132, 44, 72, 163, 226, 77, 18, 151, 182, 158, 87, 122, 36, 6, 34, 15, 78, 231, 168, 54, 7, 1, 177, 49, 59, 52, 225, 27, 24, 28, 185, 198, 76, 235, 137, 219, 238, 176, 79, 216, 30, 183, 241, 135, 176, 72, 119, 168, 178, 212, 120, 251, 185, 103, 215, 13, 221, 222, 132, 115, 183, 39, 189, 246, 59, 227, 79, 82, 137, 114, 57, 127, 208, 209, 193, 35, 157, 63, 154, 202, 8, 195, 254, 197, 142, 118, 35, 165, 117, 89, 17, 203, 118, 244, 187, 216, 110, 107, 36, 67, 7, 243, 235, 198, 118, 146, 193, 135, 122, 34, 190, 39, 120, 167, 54, 77, 79, 13, 5, 243, 152, 118, 5, 249, 57, 252, 217, 181, 109, 100, 229, 217, 221, 83, 164, 42, 94, 149, 148, 150, 189, 124, 214, 230, 63, 125, 160, 14, 62, 75, 79, 94, 96, 8, 183, 91, 200, 13, 111, 108, 65, 163, 106, 160, 145, 24, 80, 219, 72, 182, 96, 228, 246, 241, 53, 238, 78, 164, 145, 133, 72, 4, 186, 249, 16, 33, 22, 94, 164, 44, 210, 72, 23, 183, 113, 46, 25, 165, 173, 218, 85, 72, 85, 181, 251, 86, 104, 187, 26, 63, 13, 139, 110, 194, 123, 13, 176, 85, 79, 4, 140, 82, 9, 138, 116, 9, 95, 107, 80, 200, 52, 138, 152, 125, 127, 189, 91, 86, 63, 153, 109, 181, 131, 125, 192, 179, 240, 157, 42, 144, 75, 106, 253, 35, 199, 207, 115, 170, 39, 235, 165, 127, 85, 111, 248, 85, 25, 190, 80, 29, 67, 135, 144, 7, 5, 42, 237, 186, 200, 116, 158, 109, 12, 225, 83, 247, 121, 10, 72, 172, 180, 123, 198, 13, 134, 10, 243, 189, 173, 203, 155, 212, 102, 138, 88, 175, 186, 236, 24, 69, 159, 185, 189, 117, 241, 7, 200, 21, 234, 83, 101, 176, 136, 120, 126, 145, 41, 84, 101, 227, 248, 226, 92, 187, 171, 11, 108, 188, 88, 131, 85, 194, 32, 3, 45, 198, 238, 86, 255, 211, 140, 212, 54, 186, 156, 234, 249, 150, 70, 158, 130, 49, 65, 121, 32, 217, 182, 8, 55, 163, 212, 235, 112, 186, 39, 69, 221, 222, 181, 19, 28, 114, 115, 107, 197, 192, 255, 213, 163, 187, 21, 203, 71, 22, 81, 81, 213, 152, 170, 103, 74, 233, 143, 213, 126, 30, 112, 183, 23, 146, 173, 39, 208, 128, 56, 190, 188, 65, 250, 34, 251, 44, 24, 40, 29, 166, 139, 218, 170, 98, 103, 253, 16, 114, 239, 96, 119, 148, 138, 92, 34, 77, 63, 52, 144, 105, 240, 99, 99, 148, 115, 109, 132, 164, 151, 27, 253, 19, 163, 160, 67, 138, 13, 163, 230, 144, 72, 233, 154, 197, 33, 67, 184, 200, 22, 252, 135, 195, 182, 212, 91, 235, 199, 249, 65, 63, 19, 41, 235, 13, 213, 71, 21, 17, 156, 12, 158, 40, 54, 141, 125, 102, 56, 99, 193, 73, 161, 175, 102, 157, 190, 56, 112, 240, 77, 211, 114, 168, 215, 226, 81, 97, 62, 14, 205, 76, 43, 211, 6, 146, 171, 210, 218, 212, 105, 249, 239, 173, 165, 90, 233, 23, 194, 33, 45, 142, 146, 45, 124, 207, 206, 153, 69, 182, 197, 91, 243, 107, 210, 229, 19, 26, 117, 254, 88, 139, 116, 95, 90, 251, 154, 221, 255, 241, 166, 35, 93, 38, 94, 31, 171, 226, 230, 102, 164, 181, 100, 81, 181, 27, 65, 50, 107, 34, 144, 68, 225, 90, 228, 151, 12, 202, 171, 4, 164, 232, 127, 26, 83, 244, 193, 17, 150, 219, 227, 108, 60, 180, 193, 163, 212, 53, 104, 144, 18, 178, 22, 143, 228, 139, 1, 163, 43, 225, 227, 33, 52, 167, 121, 115, 30, 8, 232, 244, 232, 160, 99, 211, 24, 112, 48, 125, 40, 29, 157, 221, 113, 45, 86, 2, 21, 53, 171, 42, 102, 229, 156, 193, 97, 31, 243, 223, 69, 104, 45, 63, 127, 34, 254, 60, 33, 252, 173, 84, 21, 189, 248, 238, 121, 68, 201, 7, 80, 172, 99, 63, 105, 226, 136, 221, 105, 145, 112, 50, 195, 149, 146, 2, 65, 165, 244, 238, 248, 96, 1, 78, 115, 199, 190, 172, 217, 248, 70, 213, 166, 115, 40, 115, 21, 168, 189, 164, 203, 211, 171, 189, 183, 32, 119, 53, 68, 57, 63, 3, 72, 189, 137, 74, 227, 81, 41, 168, 60, 224, 62, 245, 224, 101, 49, 46, 7, 13, 207, 36, 108, 122, 131, 187, 144, 191, 170, 245, 208, 132, 46, 207, 56, 244, 249, 57, 81, 36, 176, 65, 211, 251, 250, 58, 67, 22, 126, 14, 99, 202, 232, 159, 4, 151, 14, 225, 54, 76, 192, 19, 39, 38, 189, 220, 177, 75, 222, 2, 6, 24, 3, 33, 81, 248, 86, 12, 138, 122, 53, 128, 12, 48, 62, 12, 22, 18, 207, 35, 109, 110, 22, 101, 177, 11, 242, 231, 245, 50, 216, 85, 122, 252, 35, 32, 65, 11, 213, 77, 52, 236, 59, 220, 153, 81, 57, 178, 244, 36, 248, 229, 100, 187, 96, 188, 12, 114, 228, 255, 93, 153, 149, 29, 145, 8, 160, 33, 155, 214, 170, 130, 57, 243, 148, 182, 86, 226, 66, 90, 6, 16, 184, 245, 101, 81, 47, 162, 65, 212, 94, 144, 171, 102, 176, 135, 109, 55, 212, 220, 226, 3, 205, 143, 108, 126, 35, 50, 93, 57, 102, 71, 162, 46, 86, 50, 29, 209, 136, 106, 221, 18, 133, 213, 183, 172, 89, 213, 185, 41, 106, 208, 160, 44, 21, 138, 191, 127, 221, 169, 221, 100, 242, 204, 16, 152, 89, 95, 124, 180, 86, 82, 12, 212, 220, 169, 230, 244, 191, 168, 162, 142, 134, 125, 109, 16, 160, 114, 104, 217, 97, 57, 110, 69, 122, 109, 209, 152, 201, 93, 138, 159, 179, 102, 217, 27, 228, 94, 160, 102, 47, 8, 138, 102, 44, 77, 235, 168, 142, 88, 162, 69, 244, 195, 91, 183, 233, 209, 219, 42, 153, 8, 164, 173, 132, 53, 153, 208, 156, 125, 201, 87, 186, 231, 238, 189, 71, 88, 143, 0, 49, 82, 41, 30, 241, 223, 124, 100, 92, 33, 249, 192, 53, 192, 185, 168, 109, 219, 116, 177, 39, 48, 52, 202, 126, 56, 152, 251, 42, 230, 130, 48, 47, 136, 1, 180, 129, 106, 32, 31, 10, 104, 43, 199, 97, 146, 30, 22, 254, 117, 6, 126, 250, 212, 135, 211, 44, 146, 48, 135, 25, 67, 188, 174, 201, 1, 116, 206, 54, 45, 146, 47, 81, 185, 97, 238, 183, 233, 17, 63, 92, 157, 5, 139, 201, 152, 187, 70, 137, 64, 65, 157, 199, 227, 183, 171, 109, 44, 43, 183, 132, 243, 75, 188, 230, 115, 28, 218, 133, 30, 136, 37, 44, 131, 124, 61, 4, 145, 64, 64, 136, 253, 26, 126, 39, 190, 189, 56, 190, 186, 200, 208, 226, 192, 98, 209, 78, 105, 5, 160, 239, 205, 33, 151, 108, 238, 240, 207, 66, 55, 171, 225, 46, 53, 81, 63, 125, 144, 108, 253, 188, 106, 243, 28, 224, 199, 10, 153, 157, 102, 2, 164, 58, 2, 177, 5, 223, 61, 225, 143, 125, 173, 135, 167, 230, 52, 21, 9, 73, 102, 242, 3, 165, 90, 42, 16, 54, 85, 79, 219, 155, 190, 98, 61, 154, 253, 203, 80, 168, 204, 215, 127, 223, 130, 104, 194, 59, 117, 221, 98, 76, 190, 44, 241, 130, 40, 130, 138, 82, 44, 36, 26, 82, 140, 236, 207, 73, 227, 236, 36, 211, 238, 150, 168, 54, 78, 229, 221, 8, 122, 5, 17, 53, 6, 227, 158, 64, 210, 59, 156, 14, 201, 166, 192, 183, 74, 26, 203, 83, 5, 178, 29, 245, 54, 125, 34, 113, 74, 136, 217, 242, 127, 196, 74, 23, 28, 214, 230, 168, 239, 192, 133, 108, 211, 234, 109, 38, 214, 8, 177, 227, 227, 245, 240, 60, 35, 209, 40, 179, 217, 76, 186, 61, 151, 127, 226, 18, 24, 77, 51, 10, 69, 255, 91, 239, 35, 129, 57, 254, 86, 61, 81, 58, 3, 221, 132, 132, 160, 111, 173, 252, 184, 40, 168, 24, 86, 204, 128, 32, 137, 85, 189, 221, 149, 35, 233, 228, 183, 102, 136, 151, 125, 130, 175, 0, 176, 79, 194, 87, 246, 166, 133, 174, 75, 88, 103, 73, 33, 87, 111, 97, 158, 197, 180, 85, 103, 234, 1, 245, 130, 35, 10, 81, 89, 129, 131, 220, 199, 120, 250, 101, 73, 33, 247, 222, 124, 29, 131, 214, 43, 83, 183, 10, 26, 23, 141, 217, 52, 187, 41, 156, 15, 145, 76, 50, 167, 88, 0, 43, 235, 32, 15, 253, 235, 45, 88, 125, 255, 106, 159, 80, 43, 27, 145, 141, 145, 166, 209, 152, 115, 205, 165, 80, 221, 174, 182, 92, 93, 57, 188, 123, 68, 188, 73, 247, 173, 175, 244, 254, 94, 122, 158, 4, 4, 147, 92, 141, 90, 47, 158, 34, 14, 144, 126, 128, 137, 50, 223, 55, 164, 32, 155, 162, 152, 131, 101, 9, 28, 212, 22, 120, 148, 137, 4, 39, 13, 111, 21, 112, 96, 146, 19, 161, 128, 112, 144, 63, 56, 134, 0, 17, 86, 69, 253, 98, 114, 68, 70, 139, 240, 198, 73, 111, 46, 132, 248, 197, 61, 112, 130, 181, 24, 51, 32, 40, 97, 220, 84, 96, 220, 31, 224, 80, 103, 200, 203, 163, 131, 86, 234, 8, 247, 33, 249, 236, 3, 151, 82, 76, 208, 75, 171, 147, 72, 66, 240, 176, 125, 159, 35, 109, 253, 126, 195, 192, 40, 112, 163, 159, 43, 163, 91, 38, 33, 236, 232, 16, 103, 145, 252, 43, 96, 212, 83, 252, 229, 175, 175, 244, 96, 183, 98, 184, 6, 88, 115, 121, 139, 192, 194, 66, 12, 219, 98, 170, 47, 111, 136, 34, 195, 130, 151, 208, 134, 147, 213, 31, 190, 228, 223, 138, 66, 199, 192, 222, 35, 109, 242, 127, 246, 104, 23, 118, 49, 64, 125, 56, 62, 89, 94, 46, 13, 57, 50, 58, 180, 115, 177, 2, 6, 215, 226, 136, 183, 151, 183, 253, 113, 8, 46, 186, 77, 130, 117, 2, 181, 80, 133, 101, 166, 2, 165, 235, 233, 189, 114, 120, 99, 140, 199, 206, 72, 186, 120, 34, 239, 214, 54, 67, 72, 65, 145, 158, 76, 172, 207, 215, 228, 160, 192, 55, 98, 194, 41, 10, 108, 120, 35, 68, 232, 17, 225, 200, 75, 210, 84, 158, 252, 104, 196, 38, 232, 246, 224, 58, 133, 94, 99, 161, 232, 170, 29, 197, 69, 138, 125, 103, 89, 32, 176, 14, 143, 212, 133, 204, 208, 126, 104, 131, 177, 32, 133, 132, 230, 115, 90, 170, 115, 46, 146, 129, 240, 159, 150, 115, 13, 7, 1, 62, 123, 20, 204, 129, 224, 235, 77, 35, 196, 79, 127, 56, 168, 159, 220, 150, 160, 105, 250, 143, 25, 96, 22, 14, 196, 209, 89, 47, 17, 242, 134, 35, 30, 220, 127, 83, 29, 132, 122, 230, 114, 75, 162, 194, 53, 109, 149, 121, 89, 161, 174, 210, 157, 22, 207, 215, 74, 90, 18, 86, 97, 201, 185, 0, 245, 55, 216, 78, 2, 204, 49, 106, 183, 128, 241, 139, 3, 207, 252, 157, 45, 201, 130, 130, 3, 189, 137, 44, 129, 210, 43, 55, 59, 6, 167, 11, 233, 154, 134, 165, 43, 18, 190, 183, 230, 141, 65, 70, 203, 152, 163, 244, 242, 129, 47, 67, 188, 62, 66, 160, 1, 83, 166, 72, 119, 244, 94, 146, 253, 122, 57, 18, 68, 134, 100, 230, 145, 13, 61, 46, 221, 175, 168, 29, 167, 154, 98, 13, 32, 59, 197, 152, 174, 207, 143, 170, 93, 116, 26, 175, 140, 56, 148, 147, 147, 189, 157, 17, 238, 29, 172, 255, 211, 156, 5, 197, 7, 35, 128, 110, 49, 41, 118, 247, 179, 109, 150, 27, 129, 253, 32, 48, 184, 56, 170, 157, 139, 187, 156, 123, 62, 82, 0, 195, 190, 172, 103, 190, 198, 115, 78, 245, 142, 37, 181, 153, 206, 80, 197, 18, 186, 111, 31, 85, 36, 179, 77, 158, 43, 22, 98, 45, 141, 62, 31, 235, 125, 84, 226, 18, 196, 95, 238, 87, 76, 217, 71, 18, 4, 26, 220, 79, 171, 28, 25, 149, 140, 104, 85, 194, 44, 12, 99, 190, 204, 118, 28, 162, 36, 144, 73, 114, 148, 27, 138, 116, 185, 76, 152, 123, 16, 71, 189, 241, 170, 68, 240, 227, 197, 132, 15, 189, 104, 113, 56, 32, 254, 89, 135, 5, 106, 24, 68, 202, 187, 12, 219, 198, 236, 0, 130, 133, 199, 46, 254, 115, 101, 64, 227, 124, 251, 245, 158, 82, 206, 175, 67, 232, 135, 56, 135, 34, 121, 161, 11, 50, 153, 206, 185, 110, 203, 29, 71, 46, 68, 51, 223, 105, 105, 70, 78, 80, 149, 92, 134, 213, 162, 22, 209, 95, 40, 37, 168, 232, 250, 156, 20, 241, 144, 94, 254, 16, 97, 185, 145, 49, 48, 109, 227, 1, 27, 249, 237, 120, 39, 93, 188, 90, 0, 170, 169, 168, 180, 1, 199, 132, 223, 129, 64, 203, 161, 174, 29, 159, 250, 81, 100, 129, 59, 211, 186, 215, 248, 44, 163, 112, 42, 166, 62, 177, 161, 172, 166, 195, 177, 10, 71, 136, 77, 4, 183, 130, 166, 102, 220, 81, 110, 116, 150, 129, 59, 190, 82, 10, 211, 74, 235, 46, 71, 242, 101, 68, 198, 104, 222, 18, 7, 69, 125, 192, 86, 11, 60, 86, 181, 195, 61, 17, 48, 130, 198, 198, 133, 198, 243, 176, 201, 229, 132, 28, 79, 86, 177, 21, 96, 116, 117, 121, 225, 176, 151, 251, 179, 216, 2, 169, 83, 64, 35, 200, 71, 31, 27, 190, 21, 226, 241, 145, 137, 245, 79, 99, 193, 188, 240, 176, 73, 145, 49, 250, 15, 126, 109, 132, 75, 233, 159, 43, 163, 154, 80, 150, 69, 172, 104, 232, 56, 105, 113, 48, 103, 39, 132, 10, 226, 52, 161, 182, 160, 103, 169, 9, 201, 86, 22, 201, 255, 182, 12, 81, 159, 195, 204, 228, 251, 152, 38, 159, 158, 197, 227, 225, 129, 120, 240, 247, 235, 60, 199, 45, 234, 128, 254, 139, 61, 67, 164, 68, 136, 152, 56, 35, 33, 190, 103, 184, 73, 98, 5, 62, 170, 251, 127, 179, 193, 165, 175, 13, 92, 94, 220, 221, 232, 183, 1, 50, 79, 83, 58, 20, 148, 158, 103, 207, 78, 221, 127, 64, 76, 245, 77, 201, 226, 195, 248, 155, 138, 111, 225, 160, 59, 3, 246, 29, 209, 216, 175, 209, 135, 215, 102, 7, 209, 47, 70, 157, 80, 16, 242, 220, 96, 4, 229, 35, 254, 141, 165, 54, 98, 172, 228, 70, 49, 200, 32, 40, 189, 87, 67, 185, 148, 88, 6, 222, 118, 241, 9, 121, 42, 71, 239, 147, 62, 149, 116, 69, 139, 45, 176, 186, 198, 60, 59, 144, 222, 32, 75, 254, 0, 8, 32, 36, 14, 94, 70, 90, 227, 254, 200, 32, 58, 230, 160, 146, 174, 150, 232, 210, 172, 177, 150, 96, 134, 114, 66, 128, 106, 97, 248, 66, 45, 179, 224, 171, 241, 3, 212, 228, 229, 98, 41, 195, 190, 74, 0, 156, 102, 102, 144, 182, 118, 92, 59, 154, 66, 76, 120, 45, 208, 114, 163, 183, 183, 5, 33, 194, 186, 60, 77, 192, 134, 99, 17, 98, 63, 23, 30, 0, 209, 243, 167, 60, 39, 190, 69, 39, 167, 39, 243, 123, 90, 100, 105, 24, 194, 221, 162, 236, 180, 45, 42, 38, 190, 221, 184, 129, 203, 216, 154, 4, 24, 140, 1, 58, 104, 247, 97, 109, 10, 47, 12, 26, 211, 163, 158, 72, 187, 100, 207, 137, 219, 131, 110, 254, 98, 81, 208, 58, 52, 67, 57, 111, 212, 130, 72, 138, 107, 73, 133, 24, 98, 244, 57, 87, 239, 160, 13, 239, 33, 57, 23, 231, 35, 36, 253, 88, 23, 172, 145, 147, 78, 237, 205, 41, 53, 58, 199, 62, 182, 80, 79, 147, 39, 229, 252, 80, 86, 48, 166, 10, 157, 59, 151, 151, 54, 53, 231, 88, 135, 165, 5, 58, 186, 148, 224, 171, 246, 42, 222, 160, 130, 208, 190, 230, 192, 6, 15, 156, 230, 241, 112, 26, 12, 236, 132, 13, 0, 246, 252, 202, 147, 4, 120, 130, 10, 244, 49, 128, 181, 217, 41, 250, 126, 238, 20, 218, 205, 74, 187, 214, 242, 61, 177, 194, 22, 14, 113, 24, 136, 60, 67, 21, 42, 75, 176, 30, 174, 70, 137, 222, 11, 186, 234, 206, 8, 170, 135, 202, 207, 74, 255, 72, 40, 191, 191, 168, 87, 7, 17, 70, 154, 124, 237, 228, 211, 221, 186, 140, 133, 189, 84, 187, 167, 70, 248, 217, 131, 99, 110, 174, 205, 77, 117, 129, 21, 199, 194, 35, 246, 120, 80, 210, 111, 225, 7, 99, 213, 196, 61, 97, 30, 225, 35, 21, 154, 170, 145, 52, 146, 106, 161, 58, 254, 188, 60, 156, 194, 163, 161, 38, 89, 126, 245, 48, 254, 5, 10, 224, 198, 177, 45, 79, 9, 139, 238, 206, 243, 246, 92, 235, 15, 4, 76, 42, 192, 76, 242, 187, 184, 123, 144, 46, 25, 220, 181, 49, 138, 153, 173, 93, 18, 216, 60, 223, 149, 23, 232, 248, 90, 52, 146, 156, 74, 48, 3, 225, 161, 134, 224, 209, 163, 171, 222, 170, 194, 215, 168, 58, 212, 252, 255, 197, 111, 184, 40, 157, 229, 217, 93, 10, 104, 183, 205, 86, 29, 214, 232, 181, 112, 246, 250, 178, 138, 32, 61, 0, 220, 240, 180, 43, 46, 85, 145, 49, 66, 40, 73, 170, 46, 142, 34, 73, 133, 53, 23, 159, 205, 240, 68, 110, 158, 81, 225, 14, 108, 239, 23, 74, 225, 179, 147, 254, 237, 23, 38, 132, 148, 59, 63, 144, 108, 176, 174, 133, 242, 216, 184, 194, 96, 14, 16, 80, 235, 226, 158, 210, 79, 191, 238, 116, 168, 146, 188, 233, 85, 252, 139, 224, 214, 205, 34, 12, 197, 169, 195, 240, 161, 213, 193, 66, 104, 103, 26, 69, 139, 94, 149, 112, 111, 201, 110, 221, 34, 204, 137, 67, 135, 73, 13, 101, 88, 191, 124, 162, 246, 23, 150, 124, 35, 46, 113, 94, 183, 94, 165, 33, 205, 175, 172, 70, 201, 145, 52, 146, 118, 122, 212, 209, 111, 151, 151, 194, 253, 5, 3, 74, 74, 109, 248, 64, 228, 237, 63, 112, 96, 237, 241, 35, 216, 123, 202, 20, 107, 84, 120, 101, 40, 245, 154, 220, 177, 144, 223, 87, 101, 221, 119, 240, 180, 104, 225, 163, 165, 188, 168, 184, 205, 198, 96, 109, 84, 180, 27, 203, 25, 2, 143, 204, 124, 61, 203, 81, 13, 5, 88, 43, 203, 220, 188, 128, 91, 129, 238, 82, 196, 198, 29, 199, 252, 189, 131, 107, 42, 52, 14, 124, 231, 65, 169, 208, 52, 15, 183, 78, 214, 238, 234, 222, 58, 77, 233, 175, 34, 119, 59, 149, 193, 175, 159, 198, 156, 195, 29, 210, 216, 28, 74, 143, 151, 206, 169, 160, 58, 95, 216, 23, 4, 79, 226, 143, 213, 185, 95, 228, 165, 38, 23, 172, 21, 173, 15, 110, 58, 129, 234, 5, 225, 107, 117, 1, 62, 153, 188, 100, 23, 157, 50, 130, 214, 190, 164, 59, 120, 90, 143, 214, 19, 91, 137, 27, 250, 190, 11, 96, 177, 193, 134, 28, 219, 96, 238, 3, 185, 44, 81, 98, 225, 196, 3, 220, 192, 104, 37, 198, 187, 250, 7, 87, 127, 88, 137, 200, 168, 189, 131, 128, 116, 5, 50, 72, 231, 44, 174, 16, 104, 195, 110, 70, 139, 96, 26, 7, 38, 104, 92, 17, 211, 144, 165, 143, 125, 124, 253, 194, 236, 104, 174, 154, 122, 233, 249, 56, 147, 42, 84, 137, 65, 107, 41, 240, 75, 139, 246, 91, 154, 255, 230, 47, 225, 4, 10, 55, 240, 125, 105, 163, 51, 238, 184, 245, 81, 73, 48, 158, 184, 245, 65, 155, 50, 198, 27, 243, 57, 69, 211, 95, 52, 20, 157, 19, 154, 94, 11, 86, 16, 30, 92, 115, 127, 124, 100, 160, 240, 204, 89, 162, 41, 234, 128, 107, 226, 36, 177, 48, 149, 190, 82, 125, 74, 230, 194, 182, 67, 189, 6, 139, 38, 97, 7, 218, 163, 42, 188, 160, 134, 217, 182, 54, 5, 168, 43, 254, 23, 18, 100, 12, 27, 76, 126, 93, 63, 73, 143, 185, 44, 159, 58, 121, 194, 59, 75, 12, 136, 246, 70, 113, 23, 254, 63, 67, 234, 47, 222, 169, 6, 46, 218, 191, 10, 88, 14, 170, 63, 207, 201, 0, 253, 227, 190, 89, 191, 109, 175, 252, 193, 177, 6, 216, 204, 86, 42, 112, 0, 140, 149, 115, 152, 248, 69, 69, 36, 181, 45, 178, 191, 85, 57, 136, 29, 232, 40, 142, 248, 100, 51, 76, 189, 16, 246, 155, 44, 31, 7, 147, 51, 6, 234, 128, 5, 127, 201, 103, 214, 67, 117, 240, 171, 182, 116, 156, 188, 151, 66, 112, 75, 20, 177, 12, 26, 198, 221, 127, 203, 49, 237, 227, 25, 33, 252, 48, 54, 172, 36, 141, 80, 27, 51, 54, 0, 42, 221, 247, 56, 45, 80, 91, 182, 114, 132, 163, 0, 208, 167, 76, 30, 202, 250, 28, 155, 200, 67, 74, 139, 90, 49, 145, 153, 35, 67, 201, 227, 159, 53, 174, 153, 122, 226, 112, 40, 70, 168, 228, 72, 64, 13, 193, 153, 143, 107, 10, 67, 109, 161, 218, 127, 5, 37, 239, 201, 248, 88, 180, 43, 59, 208, 236, 1, 219, 64, 18, 237, 255, 194, 19, 30, 162, 85, 209, 3, 17, 200, 103, 208, 233, 228, 239, 248, 0, 196, 125, 88, 35, 223, 244, 93, 82, 222, 111, 121, 124, 238, 176, 200, 40, 190, 11, 137, 205, 10, 29, 92, 201, 42, 169, 129, 5, 71, 131, 174, 190, 170, 145, 200, 212, 233, 132, 5, 124, 168, 153, 29, 103, 12, 65, 66, 25, 17, 149, 9, 175, 87, 79, 139, 10, 82, 21, 14, 50, 13, 252, 187, 70, 56, 78, 254, 2, 110, 99, 49, 185, 144, 4, 81, 59, 164, 248, 7, 32, 155, 81, 211, 49, 222, 93, 46, 221, 209, 212, 218, 103, 245, 244, 173, 228, 187, 88, 177, 74, 227, 88, 142, 120, 56, 241, 140, 0, 2, 154, 173, 253, 140, 112, 206, 28, 25, 167, 233, 249, 209, 54, 85, 197, 80, 66, 45, 17, 195, 74, 128, 2, 135, 78, 52, 12, 121, 33, 149, 109, 64, 250, 188, 26, 116, 60, 208, 150, 112, 165, 203, 231, 123, 168, 160, 125, 52, 106, 19, 154, 213, 140, 211, 188, 75, 251, 113, 107, 194, 16, 109, 123, 30, 206, 236, 190, 186, 200, 182, 197, 82, 181, 2, 233, 38, 86, 14, 234, 222, 146, 168, 84, 77, 139, 188, 107, 127, 98, 193, 81, 27, 41, 42, 184, 126, 238, 97, 230, 67, 154, 177, 17, 2, 120, 249, 243, 233, 223, 174, 5, 115, 162, 174, 175, 2, 84, 241, 22, 113, 170, 254, 103, 67, 189, 54, 127, 13, 13, 16, 53, 58, 98, 50, 204, 222, 254, 127, 172, 16, 10, 68, 83, 252, 77, 203, 3, 36, 174, 125, 88, 0, 175, 216, 177, 249, 35, 21, 23, 154, 74, 75, 225, 88, 53, 248, 208, 51, 17, 233, 203, 136, 144, 6, 183, 1, 77, 133, 196, 57, 29, 195, 94, 104, 38, 35, 144, 159, 82, 44, 71, 45, 1, 193, 248, 173, 98, 196, 39, 112, 174, 31, 132, 1, 34, 10, 162, 188, 209, 72, 125, 192, 6, 202, 237, 10, 0, 175, 128, 255, 253, 208, 233, 22, 157, 162, 38, 181, 1, 130, 163, 168, 62, 120, 24, 239, 36, 231, 64, 217, 211, 108, 73, 220, 74, 72, 220, 61, 88, 156, 4, 115, 86, 222, 123, 159, 9, 4, 210, 221, 73, 225, 166, 224, 29, 192, 116, 60, 171, 181, 217, 235, 9, 255, 51, 56, 147, 46, 146, 146, 251, 75, 211, 116, 87, 160, 28, 193, 142, 225, 178, 6, 248, 89, 68, 237, 216, 219, 242, 191, 210, 91, 7, 130, 55, 97, 111, 253, 54, 187, 196, 71, 57, 175, 195, 35, 216, 15, 156, 101, 128, 26, 234, 12, 214, 143, 59, 147, 161, 46, 134, 226, 21, 147, 53, 63, 56, 116, 193, 86, 93, 210, 92, 249, 246, 218, 187, 12, 179, 27, 52, 33, 158, 42, 156, 135, 175, 174, 242, 213, 202, 237, 239, 3, 67, 177, 162, 66, 240, 100, 18, 168, 82, 168, 124, 4, 56, 151, 220, 78, 175, 135, 157, 125, 133, 128, 171, 207, 183, 246, 205, 195, 128, 51, 37, 96, 186, 129, 250, 15, 12, 125, 196, 54, 137, 103, 100, 166, 222, 39, 142, 28, 143, 77, 244, 252, 249, 87, 114, 157, 52, 73, 73, 73, 89, 38, 139, 115, 163, 8, 84, 52, 12, 52, 34, 40, 213, 87, 144, 183, 252, 184, 87, 138, 126, 207, 158, 97, 60, 116, 14, 52, 15, 205, 140, 32, 32, 1, 72, 197, 214, 137, 225, 87, 217, 106, 129, 72, 232, 145, 106, 202, 241, 249, 222, 223, 159, 178, 61, 143, 133, 92, 37, 77, 71, 197, 253, 33, 245, 81, 16, 164, 76, 254, 133, 58, 247, 2, 13, 49, 63, 8, 128, 235, 196, 42, 187, 227, 206, 41, 30, 106, 221, 3, 23, 190, 138, 188, 241, 71, 224, 97, 109, 97, 128, 220, 201, 136, 138, 244, 131, 161, 131, 109, 255, 156, 15, 156, 57, 82, 97, 93, 129, 198, 23, 76, 202, 62, 96, 75, 186, 104, 192, 115, 215, 101, 157, 67, 217, 171, 188, 21, 23, 68, 74, 93, 73, 215, 125, 23, 50, 58, 234, 77, 77, 52, 62, 59, 57, 99, 20, 239, 179, 117, 58, 118, 121, 60, 5, 143, 98, 52, 29, 2, 25, 74, 159, 2, 39, 129, 119, 180, 160, 121, 172, 55, 52, 64, 254, 194, 216, 188, 70, 57, 16, 103, 202, 107, 82, 201, 152, 17, 222, 30, 90, 173, 128, 142, 125, 211, 91, 246, 23, 37, 126, 85, 56, 226, 153, 20, 235, 82, 185, 64, 180, 174, 201, 187, 128, 79, 194, 77, 96, 169, 172, 130, 115, 62, 143, 118, 216, 254, 237, 62, 181, 118, 241, 212, 51, 208, 60, 15, 107, 187, 91, 155, 60, 60, 161, 246, 17, 255, 174, 208, 84, 17, 35, 248, 82, 254, 222, 133, 218, 243, 68, 160, 174, 132, 252, 157, 74, 91, 125, 161, 66, 242, 80, 240, 51, 161, 89, 102, 149, 154, 246, 108, 218, 98, 26, 200, 93, 105, 20, 182, 136, 167, 35, 145, 75, 69, 151, 102, 54, 127, 66, 3, 115, 8, 43, 210, 2, 200, 248, 129, 109, 154, 209, 71, 92, 187, 123, 176, 188, 64, 174, 38, 174, 37, 213, 95, 58, 142, 13, 133, 42, 212, 100, 49, 44, 244, 83, 32, 241, 174, 219, 207, 252, 147, 21, 245, 126, 109, 45, 33, 123, 11, 124, 45, 37, 76, 32, 2, 200, 100, 71, 9, 103, 134, 96, 71, 31, 146, 253, 233, 22, 34, 12, 68, 86, 206, 120, 7, 12, 194, 215, 32, 219, 106, 20, 25, 9, 154, 54, 147, 31, 109, 24, 31, 188, 13, 246, 85, 152, 254, 56, 172, 250, 92, 58, 205, 118, 162, 143, 53, 75, 20, 36, 110, 44, 254, 26, 162, 140, 214, 74, 83, 80, 155, 96, 40, 155, 80, 124, 161, 245, 179, 175, 189, 78, 144, 206, 49, 66, 65, 110, 58, 221, 176, 168, 241, 157, 219, 156, 113, 219, 237, 163, 255, 128, 109, 15, 247, 61, 30, 235, 229, 160, 241, 149, 17, 94, 126, 110, 254, 52, 66, 95, 153, 168, 201, 245, 252, 10, 48, 7, 164, 86, 181, 133, 138, 2, 93, 254, 213, 240, 116, 23, 219, 210, 51, 88, 180, 88, 69, 27, 201, 84, 215, 30, 4, 137, 249, 206, 157, 235, 217, 138, 16, 9, 203, 203, 72, 0, 185, 143, 21, 246, 89, 43, 193, 115, 26, 148, 240, 155, 105, 55, 44, 202, 13, 26, 146, 106, 62, 237, 240, 237, 160, 235, 150, 143, 239, 169, 60, 87, 26, 161, 111, 28, 132, 70, 154, 75, 74, 228, 172, 75, 164, 241, 86, 108, 173, 39, 143, 53, 187, 196, 186, 184, 100, 96, 79, 37, 149, 87, 9, 60, 248, 174, 3, 207, 82, 19, 112, 80, 228, 205, 170, 230, 2, 48, 111, 99, 56, 110, 98, 109, 4, 51, 226, 172, 243, 251, 162, 0, 177, 202, 168, 16, 212, 159, 71, 14, 16, 248, 62, 132, 116, 163, 69, 130, 251, 178, 197, 78, 138, 86, 176, 14, 107, 178, 87, 48, 207, 157, 162, 38, 24, 196, 95, 153, 149, 39, 86, 182, 94, 16, 153, 179, 54, 140, 51, 60, 249, 150, 67, 218, 28, 8, 82, 141, 177, 226, 34, 83, 114, 136, 40, 114, 199, 126, 45, 148, 194, 230, 110, 107, 235, 55, 136, 10, 58, 138, 79, 175, 250, 9, 242, 102, 65, 62, 14, 109, 74, 149, 166, 14, 2, 124, 196, 69, 93, 241, 92, 23, 212, 151, 191, 76, 184, 200, 203, 137, 214, 224, 118, 92, 50, 138, 215, 102, 186, 85, 112, 239, 114, 69, 94, 113, 89, 197, 39, 119, 110, 72, 145, 236, 81, 170, 18, 142, 125, 3, 30, 171, 3, 152, 44, 61, 69, 106, 2, 86, 179, 140, 189, 60, 123, 48, 118, 5, 123, 71, 76, 233, 138, 42, 124, 162, 196, 165, 235, 79, 249, 250, 204, 93, 71, 34, 57, 176, 203, 176, 215, 189, 95, 249, 125, 227, 10, 156, 6, 166, 222, 50, 135, 225, 202, 102, 199, 68, 36, 251, 188, 169, 140, 211, 157, 207, 185, 101, 102, 246, 112, 10, 136, 58, 247, 175, 242, 247, 60, 82, 10, 164, 214, 9, 76, 114, 84, 169, 54, 89, 218, 89, 210, 66, 200, 69, 51, 195, 158, 246, 185, 83, 11, 174, 8, 15, 184, 37, 97, 210, 17, 38, 198, 248, 63, 15, 29, 9, 80, 215, 20, 107, 201, 51, 158, 172, 213, 98, 245, 90, 222, 191, 99, 184, 62, 8, 30, 189, 113, 241, 236, 152, 31, 177, 137, 72, 192, 190, 143, 250, 54, 196, 162, 42, 248, 21, 185, 75, 52, 34, 202, 4, 64, 86, 206, 32, 45, 135, 128, 100, 45, 139, 199, 186, 20, 52, 197, 252, 79, 118, 201, 166, 128, 98, 116, 106, 237, 71, 221, 183, 112, 217, 63, 138, 242, 121, 179, 209, 183, 134, 48, 44, 142, 66, 139, 241, 21, 26, 134, 173, 247, 181, 222, 93, 107, 4, 139, 49, 75, 5, 58, 52, 233, 173, 254, 23, 239, 74, 170, 0, 157, 59, 126, 14, 133, 157, 67, 125, 187, 40, 138, 23, 65, 9, 204, 92, 22, 246, 18, 136, 78, 29, 9, 86, 29, 223, 133, 79, 108, 131, 100, 27, 209, 68, 216, 16, 223, 34, 17, 214, 129, 65, 51, 246, 181, 189, 201, 128, 247, 74, 76, 227, 9, 255, 87, 242, 125, 40, 53, 120, 134, 35, 60, 39, 111, 5, 113, 17, 184, 173, 235, 158, 92, 26, 162, 228, 31, 93, 187, 9, 66, 156, 148, 7, 212, 239, 242, 107, 39, 127, 134, 55, 130, 65, 73, 54, 245, 172, 234, 95, 175, 197, 250, 96, 67, 117, 50, 46, 242, 223, 196, 166, 105, 218, 90, 212, 166, 168, 203, 86, 173, 133, 57, 155, 60, 47, 134, 91, 61, 224, 48, 233, 134, 176, 206, 163, 228, 172, 65, 71, 107, 231, 55, 133, 69, 87, 44, 190, 45, 232, 62, 132, 40, 17, 173, 225, 158, 216, 151, 252, 76, 121, 182, 145, 50, 243, 103, 183, 0, 50, 246, 101, 122, 193, 114, 221, 16, 216, 167, 119, 203, 91, 174, 201, 32, 188, 194, 5, 99, 218, 152, 218, 169, 127, 21, 113, 183, 88, 218, 69, 103, 75, 175, 16, 38, 2, 193, 87, 186, 211, 118, 205, 101, 195, 233, 156, 209, 41, 228, 60, 50, 103, 214, 160, 175, 177, 40, 122, 120, 58, 55, 168, 11, 223, 249, 140, 123, 99, 145, 244, 198, 255, 139, 199, 83, 174, 183, 21, 243, 77, 190, 42, 60, 218, 202, 95, 242, 29, 222, 61, 140, 70, 183, 100, 53, 107, 243, 220, 157, 130, 106, 3, 114, 15, 175, 197, 103, 73, 202, 37, 139, 212, 215, 108, 103, 210, 220, 111, 17, 231, 14, 188, 197, 103, 9, 9, 135, 45, 132, 112, 162, 221, 249, 64, 193, 136, 183, 157, 88, 72, 97, 106, 164, 157, 117, 231, 243, 93, 121, 24, 158, 13, 160, 59, 53, 222, 130, 130, 82, 164, 78, 228, 84, 106, 122, 13, 136, 254, 16, 202, 2, 87, 248, 206, 146, 139, 95, 2, 1, 247, 218, 12, 223, 91, 206, 96, 65, 201, 254, 82, 146, 202, 131, 242, 7, 219, 133, 131, 162, 1, 56, 115, 190, 254, 155, 135, 41, 228, 140, 172, 196, 217, 148, 70, 89, 165, 228, 161, 17, 131, 116, 65, 105, 109, 186, 94, 13, 246, 54, 50, 82, 178, 176, 179, 8, 170, 223, 108, 253, 166, 214, 162, 8, 147, 174, 50, 245, 156, 21, 38, 227, 52, 44, 235, 174, 92, 112, 141, 238, 192, 133, 177, 25, 141, 71, 235, 123, 228, 205, 11, 74, 207, 127, 166, 177, 124, 246, 55, 82, 142, 200, 249, 204, 100, 30, 227, 160, 190, 28, 93, 10, 110, 168, 67, 17, 67, 125, 39, 0, 4, 255, 72, 208, 106, 109, 140, 204, 68, 196, 9, 103, 203, 2, 138, 221, 12, 30, 107, 132, 74, 32, 98, 84, 48, 40, 212, 2, 41, 107, 178, 12, 26, 234, 97, 134, 166, 109, 88, 7, 195, 226, 95, 222, 86, 88, 229, 96, 175, 201, 207, 88, 221, 95, 255, 63, 193, 66, 22, 217, 97, 194, 153, 41, 25, 165, 65, 164, 26, 109, 126, 177, 217, 6, 183, 172, 31, 67, 26, 171, 49, 236, 186, 133, 61, 134, 99, 33, 43, 9, 134, 246, 204, 145, 99, 195, 139, 224, 9, 200, 241, 141, 28, 211, 44, 206, 41, 213, 78, 205, 185, 129, 77, 125, 31, 48, 9, 36, 170, 133, 202, 107, 226, 161, 161, 197, 28, 98, 141, 75, 171, 24, 109, 161, 9, 57, 214, 251, 202, 109, 109, 54, 199, 69, 157, 186, 192, 130, 22, 26, 120, 184, 35, 189, 101, 46, 43, 178, 8, 91, 147, 108, 5, 49, 173, 162, 196, 44, 228, 51, 52, 133, 192, 87, 200, 217, 217, 122, 116, 47, 23, 212, 146, 18, 221, 217, 234, 171, 247, 240, 24, 54, 43, 86, 71, 103, 251, 99, 56, 208, 72, 15, 224, 139, 101, 133, 207, 183, 168, 41, 113, 0, 102, 229, 227, 84, 137, 220, 203, 158, 14, 205, 98, 229, 48, 235, 127, 173, 236, 197, 42, 234, 201, 5, 0, 166, 246, 213, 90, 128, 174, 208, 239, 225, 43, 118, 21, 238, 199, 181, 193, 239, 108, 104, 241, 107, 134, 218, 102, 79, 123, 36, 69, 103, 234, 210, 32, 159, 94, 55, 36, 116, 88, 98, 36, 190, 240, 23, 41, 21, 45, 210, 67, 10, 3, 168, 148, 198, 239, 230, 24, 181, 202, 167, 218, 19, 100, 236, 160, 59, 118, 191, 119, 93, 202, 170, 247, 62, 83, 181, 15, 114, 32, 91, 238, 128, 218, 198, 226, 114, 18, 221, 27, 30, 250, 202, 131, 75, 118, 236, 120, 111, 148, 126, 146, 176, 45, 20, 30, 170, 253, 176, 155, 113, 77, 131, 134, 100, 182, 162, 185, 112, 90, 72, 181, 46, 62, 253, 202, 26, 30, 138, 11, 133, 110, 59, 130, 30, 76, 28, 198, 101, 10, 104, 190, 186, 197, 62, 28, 14, 79, 169, 249, 69, 111, 84, 104, 49, 202, 128, 146, 47, 80, 234, 6, 6, 77, 244, 36, 123, 17, 181, 245, 90, 93, 118, 110, 195, 65, 203, 183, 226, 3, 129, 86, 231, 11, 36, 164, 198, 10, 91, 172, 156, 156, 107, 56, 162, 119, 246, 249, 129, 9, 90, 91, 197, 25, 98, 2, 132, 133, 236, 136, 191, 250, 20, 55, 7, 131, 135, 186, 237, 192, 235, 124, 85, 113, 211, 5, 171, 210, 9, 20, 205, 149, 43, 103, 153, 206, 118, 40, 26, 255, 136, 60, 112, 46, 130, 116, 106, 200, 43, 166, 37, 27, 214, 246, 23, 187, 113, 167, 149, 85, 224, 39, 45, 134, 1, 157, 33, 245, 5, 96, 199, 190, 80, 188, 83, 218, 119, 9, 242, 199, 167, 10, 81, 235, 213, 184, 102, 41, 21, 234, 161, 34, 233, 240, 188, 97, 161, 226, 238, 120, 92, 38, 249, 222, 198, 118, 91, 29, 124, 231, 103, 97, 141, 122, 26, 163, 14, 185, 225, 5, 90, 255, 35, 212, 7, 57, 85, 134, 211, 209, 156, 132, 190, 56, 88, 36, 118, 117, 219, 133, 246, 18, 165, 250, 158, 11, 150, 239, 46, 128, 198, 197, 29, 16, 243, 7, 129, 115, 153, 133, 51, 241, 126, 72, 100, 73, 107, 175, 20, 144, 18, 73, 218, 226, 100, 213, 35, 40, 24, 172, 243, 220, 177, 180, 238, 78, 20, 201, 143, 112, 54, 217, 200, 111, 38, 186, 9, 71, 158, 188, 136, 197, 154, 98, 171, 234, 32, 33, 137, 45, 229, 211, 15, 149, 63, 234, 138, 149, 64, 172, 104, 65, 195, 97, 76, 150, 130, 125, 61, 180, 117, 226, 174, 43, 33, 191, 122, 105, 152, 244, 236, 123, 118, 106, 102, 30, 58, 186, 189, 222, 245, 58, 232, 102, 54, 106, 10, 57, 127, 246, 106, 50, 121, 51, 213, 126, 237, 27, 253, 119, 122, 96, 66, 29, 151, 103, 255, 51, 96, 17, 112, 87, 119, 190, 68, 129, 140, 4, 84, 194, 246, 89, 90, 10, 242, 15, 141, 8, 170, 130, 132, 180, 146, 84, 193, 119, 23, 253, 109, 163, 234, 147, 72, 79, 180, 96, 229, 63, 203, 247, 170, 240, 212, 116, 119, 197, 176, 182, 94, 233, 177, 47, 196, 99, 168, 207, 215, 48, 143, 92, 192, 15, 79, 194, 255, 143, 24, 28, 92, 227, 250, 0, 144, 4, 125, 110, 71, 83, 158, 156, 90, 114, 65, 203, 206, 122, 111, 80, 47, 255, 71, 182, 123, 46, 160, 24, 79, 214, 27, 36, 252, 177, 23, 76, 75, 151, 132, 80, 19, 222, 31, 37, 148, 41, 192, 45, 237, 130, 43, 112, 26, 138, 65, 33, 255, 222, 89, 75, 122, 138, 4, 191, 77, 42, 92, 142, 86, 131, 175, 178, 126, 23, 14, 21, 236, 137, 227, 124, 47, 36, 141, 84, 37, 158, 30, 120, 224, 120, 250, 242, 60, 224, 51, 181, 149, 93, 188, 2, 216, 134, 234, 165, 48, 229, 248, 12, 178, 174, 78, 179, 157, 14, 48, 193, 196, 61, 23, 236, 195, 1, 33, 132, 171, 48, 182, 24, 42, 251, 221, 172, 20, 226, 210, 137, 181, 167, 233, 239, 68, 100, 177, 233, 64, 121, 71, 176, 105, 111, 202, 234, 238, 241, 148, 16, 60, 82, 192, 26, 151, 71, 36, 169, 151, 44, 51, 64, 226, 74, 112, 94, 171, 60, 40, 80, 147, 121, 174, 6, 80, 42, 145, 24, 244, 232, 79, 1, 10, 14, 248, 39, 184, 59, 131, 92, 182, 15, 134, 194, 229, 119, 141, 144, 94, 25, 121, 67, 242, 53, 189, 37], - [132, 143, 138, 49, 218, 249, 127, 159, 187, 124, 72, 38, 115, 216, 112, 179, 253, 251, 253, 77, 212, 26, 237, 195, 209, 64, 26, 105, 73, 79, 145, 22, 129, 235, 255, 64, 143, 184, 198, 91, 23, 244, 84, 181, 9, 67, 62, 54, 39, 200, 163, 180, 170, 118, 128, 145, 126, 191, 50, 170, 70, 139, 78, 133, 74, 182, 146, 54, 179, 113, 90, 248, 118, 209, 217, 185, 82, 59, 131, 22, 212, 189, 169, 28, 154, 96, 224, 15, 153, 156, 33, 72, 119, 157, 59, 255, 255, 3, 231, 205, 86, 155, 242, 206, 236, 10, 216, 36, 37, 48, 199, 204, 120, 230, 144, 203, 55, 103, 133, 110, 212, 213, 15, 22, 206, 222, 235, 137, 72, 230, 208, 78, 16, 57, 49, 21, 170, 247, 219, 84, 157, 240, 33, 84, 241, 30, 170, 123, 234, 145, 111, 165, 111, 152, 35, 71, 122, 219, 19, 25, 111, 234, 1, 70, 31, 119, 82, 202, 105, 166, 104, 236, 31, 79, 105, 58, 99, 225, 29, 226, 53, 101, 39, 38, 121, 123, 221, 85, 31, 86, 63, 108, 206, 187, 130, 124, 168, 168, 37, 74, 225, 54, 222, 229, 212, 17, 207, 191, 250, 10, 36, 228, 182, 36, 181, 24, 171, 191, 60, 60, 56, 184, 125, 70, 164, 1, 66, 13, 39, 23, 221, 92, 72, 193, 126, 225, 234, 135, 33, 145, 167, 32, 235, 185, 195, 241, 111, 236, 224, 160, 6, 148, 63, 55, 21, 224, 115, 245, 78, 75, 122, 5, 169, 166, 27, 95, 47, 212, 4, 67, 205, 88, 64, 155, 141, 27, 202, 42, 69, 41, 10, 136, 153, 179, 12, 80, 11, 212, 26, 217, 28, 253, 16, 252, 155, 115, 98, 8, 80, 186, 252, 65, 208, 128, 100, 243, 122, 27, 166, 56, 95, 91, 165, 129, 17, 152, 101, 37, 148, 72, 71, 78, 208, 58, 126, 215, 180, 205, 180, 224, 207, 213, 126, 124, 236, 20, 201, 223, 195, 246, 143, 255, 16, 52, 173, 10, 255, 97, 48, 116, 165, 166, 48, 189, 159, 195, 165, 85, 199, 242, 166, 44, 131, 18, 143, 124, 180, 189, 172, 49, 226, 218, 34, 18, 65, 84, 234, 160, 229, 228, 85, 224, 72, 107, 130, 64, 92, 180, 56, 133, 218, 73, 63, 87, 113, 20, 245, 49, 20, 235, 134, 253, 110, 77, 137, 35, 150, 251, 197, 149, 128, 255, 95, 95, 56, 188, 78, 115, 204, 159, 38, 174, 200, 240, 176, 23, 95, 63, 62, 126, 27, 142, 117, 105, 32, 169, 227, 212, 174, 112, 199, 16, 112, 229, 81, 64, 14, 26, 8, 132, 77, 100, 138, 72, 40, 132, 49, 118, 69, 94, 113, 48, 3, 98, 137, 218, 162, 132, 86, 102, 194, 125, 30, 157, 169, 218, 217, 131, 226, 220, 67, 102, 184, 179, 198, 27, 107, 86, 68, 25, 11, 138, 128, 26, 204, 142, 80, 145, 122, 81, 118, 182, 104, 10, 128, 229, 85, 89, 189, 107, 176, 86, 109, 3, 85, 206, 252, 252, 93, 136, 56, 210, 77, 73, 20, 33, 30, 176, 192, 46, 184, 146, 34, 203, 231, 105, 91, 96, 147, 219, 133, 24, 82, 182, 144, 232, 202, 2, 55, 118, 110, 223, 242, 244, 59, 180, 213, 144, 119, 114, 8, 111, 159, 30, 145, 239, 40, 123, 213, 88, 49, 120, 19, 134, 78, 75, 155, 158, 11, 255, 125, 131, 76, 126, 42, 155, 176, 153, 92, 85, 161, 13, 217, 185, 66, 134, 46, 104, 90, 103, 218, 173, 129, 81, 102, 135, 124, 127, 42, 244, 134, 174, 79, 81, 222, 88, 81, 183, 253, 175, 3, 226, 181, 185, 254, 206, 254, 243, 102, 238, 219, 162, 230, 193, 28, 98, 127, 233, 108, 246, 182, 57, 187, 47, 165, 46, 220, 175, 163, 52, 190, 63, 112, 154, 100, 101, 252, 6, 100, 94, 179, 152, 148, 67, 154, 253, 108, 14, 139, 95, 97, 236, 194, 241, 13, 97, 189, 241, 117, 175, 24, 98, 78, 94, 55, 52, 17, 166, 77, 19, 244, 162, 190, 173, 144, 138, 187, 135, 147, 37, 57, 218, 134, 114, 241, 10, 94, 213, 23, 125, 76, 43, 86, 146, 248, 23, 35, 213, 7, 29, 187, 77, 77, 1, 142, 210, 152, 19, 75, 250, 7, 237, 77, 165, 92, 81, 147, 247, 55, 54, 225, 150, 131, 244, 29, 165, 160, 132, 50, 206, 122, 195, 255, 49, 14, 164, 87, 255, 225, 91, 177, 103, 137, 44, 237, 182, 115, 156, 134, 89, 237, 83, 54, 133, 3, 59, 246, 160, 106, 197, 14, 188, 10, 80, 214, 74, 106, 31, 212, 181, 136, 138, 52, 38, 124, 22, 133, 16, 242, 25, 192, 122, 146, 71, 24, 53, 84, 197, 14, 121, 185, 155, 233, 171, 73, 117, 120, 224, 231, 122, 83, 225, 247, 134, 10, 146, 14, 35, 174, 219, 183, 223, 178, 108, 236, 44, 17, 247, 171, 81, 67, 50, 180, 118, 232, 242, 106, 181, 230, 219, 62, 41, 123, 54, 185, 54, 102, 146, 243, 167, 87, 175, 45, 143, 194, 112, 71, 226, 211, 143, 252, 70, 164, 170, 141, 225, 108, 51, 198, 25, 128, 254, 110, 51, 93, 142, 131, 160, 52, 131, 64, 87, 163, 163, 232, 97, 27, 1, 47, 66, 53, 188, 235, 173, 41, 84, 206, 219, 68, 94, 50, 115, 246, 147, 90, 148, 154, 207, 254, 17, 211, 186, 107, 107, 111, 218, 195, 79, 18, 164, 151, 123, 250, 37, 236, 14, 128, 120, 142, 82, 102, 167, 134, 99, 81, 89, 1, 28, 253, 70, 19, 129, 225, 7, 60, 86, 105, 105, 183, 71, 236, 111, 159, 183, 12, 163, 48, 99, 23, 92, 143, 161, 137, 197, 196, 117, 132, 9, 254, 72, 161, 155, 235, 218, 61, 253, 249, 178, 92, 226, 37, 35, 148, 11, 249, 170, 130, 45, 11, 133, 204, 65, 49, 130, 62, 230, 93, 145, 214, 4, 118, 209, 247, 125, 183, 186, 167, 95, 40, 92, 222, 38, 93, 24, 4, 91, 255, 12, 117, 19, 88, 38, 21, 55, 139, 43, 119, 210, 197, 107, 218, 95, 171, 72, 134, 170, 19, 43, 232, 54, 251, 157, 229, 172, 167, 137, 52, 176, 22, 139, 224, 64, 175, 42, 175, 36, 225, 99, 80, 37, 68, 42, 115, 233, 117, 218, 157, 76, 48, 51, 106, 201, 165, 160, 155, 141, 135, 187, 251, 231, 130, 13, 218, 20, 189, 240, 154, 190, 155, 140, 204, 187, 89, 240, 14, 93, 55, 94, 163, 86, 195, 91, 248, 102, 179, 55, 239, 164, 231, 128, 65, 251, 93, 2, 61, 76, 59, 179, 162, 177, 210, 40, 61, 50, 35, 248, 167, 136, 235, 194, 57, 134, 48, 173, 217, 192, 94, 227, 77, 22, 11, 149, 56, 132, 94, 153, 107, 222, 251, 127, 191, 88, 53, 79, 202, 27, 30, 98, 201, 16, 121, 17, 75, 74, 1, 25, 115, 42, 130, 128, 107, 189, 91, 153, 85, 46, 132, 223, 201, 138, 163, 241, 97, 32, 216, 207, 165, 92, 159, 221, 146, 100, 96, 63, 220, 241, 246, 173, 198, 93, 196, 26, 234, 202, 4, 36, 84, 31, 54, 101, 28, 251, 109, 68, 28, 51, 239, 15, 126, 55, 150, 230, 72, 214, 206, 216, 153, 105, 123, 101, 209, 128, 65, 107, 171, 122, 252, 46, 184, 63, 46, 67, 115, 167, 241, 235, 43, 254, 12, 152, 0, 225, 168, 33, 70, 251, 8, 225, 126, 45, 57, 197, 25, 249, 241, 117, 194, 149, 15, 113, 114, 73, 230, 203, 62, 157, 176, 240, 139, 129, 70, 120, 110, 86, 73, 166, 254, 234, 181, 156, 117, 224, 248, 229, 121, 69, 52, 170, 186, 138, 97, 79, 184, 49, 80, 181, 245, 77, 208, 151, 95, 183, 167, 209, 245, 42, 93, 242, 1, 20, 73, 112, 95, 85, 163, 187, 157, 43, 106, 81, 108, 233, 86, 223, 66, 168, 207, 158, 74, 54, 238, 131, 212, 98, 49, 205, 190, 27, 29, 28, 11, 106, 144, 73, 27, 84, 187, 143, 91, 176, 110, 239, 42, 123, 60, 251, 110, 132, 109, 187, 210, 241, 73, 244, 111, 119, 52, 87, 64, 133, 130, 120, 184, 65, 140, 220, 250, 51, 218, 10, 100, 220, 182, 69, 122, 149, 63, 237, 82, 155, 93, 192, 106, 21, 190, 76, 7, 140, 115, 83, 213, 15, 111, 117, 176, 238, 166, 181, 110, 129, 162, 39, 139, 96, 12, 28, 3, 67, 113, 118, 107, 32, 71, 243, 138, 123, 119, 74, 10, 105, 146, 75, 164, 76, 215, 74, 163, 120, 75, 202, 51, 140, 138, 148, 220, 14, 40, 63, 228, 232, 150, 55, 67, 23, 103, 20, 151, 123, 62, 22, 194, 6, 202, 0, 97, 236, 114, 1, 10, 37, 212, 229, 217, 243, 216, 111, 172, 7, 40, 127, 254, 96, 243, 159, 163, 169, 140, 182, 133, 24, 162, 109, 231, 116, 183, 182, 32, 176, 164, 167, 131, 204, 107, 232, 9, 140, 85, 81, 198, 115, 216, 135, 142, 219, 172, 50, 239, 199, 251, 46, 231, 160, 186, 138, 91, 248, 199, 88, 56, 55, 155, 186, 95, 24, 32, 41, 4, 203, 87, 102, 52, 101, 57, 69, 105, 182, 236, 84, 4, 106, 28, 118, 226, 251, 211, 137, 223, 75, 82, 100, 9, 60, 161, 71, 162, 100, 83, 202, 234, 66, 131, 72, 97, 212, 71, 230, 149, 33, 43, 148, 254, 29, 163, 175, 97, 86, 97, 136, 100, 168, 243, 121, 220, 203, 96, 179, 35, 118, 41, 149, 32, 136, 229, 192, 219, 103, 199, 20, 139, 119, 203, 116, 142, 96, 201, 143, 184, 7, 172, 97, 222, 236, 71, 180, 189, 74, 56, 217, 49, 146, 203, 86, 51, 80, 189, 137, 108, 71, 122, 170, 114, 120, 179, 151, 158, 20, 99, 130, 71, 203, 53, 179, 207, 150, 144, 159, 103, 154, 198, 200, 72, 18, 50, 242, 7, 93, 148, 67, 128, 166, 140, 106, 208, 242, 70, 127, 159, 103, 218, 157, 100, 200, 154, 30, 230, 113, 85, 252, 80, 15, 62, 119, 213, 174, 77, 9, 148, 113, 225, 236, 36, 110, 43, 66, 144, 173, 91, 38, 93, 157, 65, 96, 123, 127, 108, 37, 142, 212, 123, 147, 222, 16, 59, 21, 134, 36, 123, 246, 163, 91, 106, 179, 9, 255, 144, 150, 250, 141, 246, 50, 197, 205, 191, 88, 200, 129, 89, 84, 54, 77, 214, 109, 190, 81, 247, 204, 89, 69, 233, 226, 123, 109, 164, 153, 100, 72, 47, 159, 160, 206, 15, 50, 39, 23, 246, 227, 23, 220, 184, 164, 241, 105, 122, 91, 5, 192, 206, 223, 104, 29, 110, 179, 151, 144, 192, 73, 145, 8, 164, 199, 85, 150, 57, 1, 170, 254, 231, 143, 145, 191, 92, 160, 183, 54, 197, 249, 139, 122, 127, 237, 187, 139, 188, 242, 126, 243, 12, 82, 90, 60, 182, 236, 71, 9, 117, 251, 21, 108, 70, 107, 171, 185, 140, 224, 90, 16, 178, 82, 33, 128, 94, 249, 203, 98, 143, 137, 129, 62, 227, 101, 45, 32, 22, 153, 143, 181, 100, 179, 133, 69, 134, 80, 230, 252, 33, 50, 228, 192, 43, 191, 248, 61, 115, 113, 132, 68, 61, 140, 14, 108, 242, 105, 150, 189, 59, 152, 210, 9, 215, 56, 255, 211, 80, 41, 146, 173, 18, 252, 31, 187, 43, 34, 217, 176, 221, 19, 225, 200, 40, 2, 245, 106, 75, 64, 242, 190, 148, 139, 83, 80, 94, 82, 229, 203, 104, 181, 211, 248, 81, 164, 110, 167, 158, 63, 184, 41, 142, 167, 202, 32, 56, 231, 61, 34, 138, 179, 112, 43, 21, 23, 64, 52, 9, 137, 204, 134, 80, 21, 57, 37, 132, 149, 51, 89, 191, 107, 72, 119, 123, 102, 68, 249, 245, 67, 17, 213, 195, 59, 159, 30, 33, 28, 230, 68, 144, 175, 120, 96, 41, 84, 168, 90, 145, 12, 245, 44, 145, 252, 118, 101, 78, 13, 45, 204, 176, 74, 180, 38, 215, 82, 112, 128, 42, 211, 57, 28, 212, 0, 176, 178, 182, 152, 231, 116, 228, 108, 51, 222, 125, 188, 250, 223, 110, 30, 104, 226, 247, 192, 3, 134, 160, 8, 90, 202, 99, 136, 133, 41, 242, 210, 149, 57, 248, 172, 189, 70, 176, 76, 202, 36, 14, 137, 188, 37, 130, 191, 70, 181, 221, 145, 62, 151, 12, 66, 20, 116, 189, 32, 145, 245, 41, 145, 227, 190, 79, 240, 118, 229, 202, 48, 22, 64, 233, 90, 128, 12, 241, 36, 85, 218, 160, 0, 108, 244, 133, 112, 16, 69, 191, 217, 85, 156, 4, 246, 87, 29, 109, 95, 146, 162, 218, 233, 253, 104, 231, 120, 31, 173, 176, 251, 27, 122, 206, 107, 231, 6, 195, 192, 33, 165, 12, 65, 146, 226, 72, 108, 157, 14, 175, 158, 34, 63, 7, 81, 177, 159, 202, 112, 149, 77, 90, 40, 237, 222, 72, 226, 108, 151, 55, 5, 30, 35, 73, 52, 31, 116, 142, 48, 43, 67, 70, 122, 206, 105, 72, 115, 83, 114, 89, 173, 96, 41, 91, 48, 169, 78, 119, 173, 68, 8, 34, 84, 156, 224, 185, 213, 251, 81, 249, 197, 23, 208, 228, 254, 146, 62, 184, 213, 42, 71, 235, 112, 211, 237, 35, 242, 185, 61, 193, 43, 39, 45, 87, 57, 113, 90, 152, 232, 227, 87, 68, 57, 59, 184, 195, 177, 90, 213, 130, 216, 106, 73, 48, 9, 214, 184, 126, 198, 95, 206, 244, 200, 107, 193, 131, 85, 156, 175, 56, 88, 152, 38, 196, 106, 102, 98, 32, 201, 204, 52, 17, 173, 16, 73, 30, 150, 64, 197, 244, 204, 230, 118, 116, 219, 239, 153, 101, 16, 49, 124, 239, 124, 105, 2, 252, 228, 81, 111, 36, 121, 119, 114, 194, 222, 24, 15, 54, 88, 140, 227, 131, 254, 204, 227, 149, 15, 244, 105, 189, 77, 187, 255, 25, 116, 127, 53, 175, 205, 142, 164, 199, 253, 242, 244, 213, 75, 193, 163, 89, 97, 223, 245, 160, 11, 54, 35, 74, 160, 64, 85, 112, 132, 117, 176, 64, 159, 238, 149, 114, 26, 33, 135, 228, 223, 234, 197, 204, 162, 254, 231, 47, 99, 189, 138, 12, 10, 243, 203, 114, 16, 110, 231, 100, 157, 211, 228, 88, 220, 147, 59, 19, 146, 53, 50, 11, 176, 104, 38, 94, 240, 187, 149, 51, 116, 122, 173, 206, 32, 11, 123, 223, 138, 130, 228, 149, 243, 162, 218, 162, 213, 95, 58, 137, 97, 31, 206, 218, 0, 48, 177, 237, 175, 126, 31, 14, 255, 220, 110, 53, 133, 177, 158, 43, 226, 177, 232, 88, 95, 205, 21, 224, 118, 236, 26, 141, 6, 142, 231, 198, 156, 159, 80, 71, 52, 218, 52, 83, 74, 137, 54, 120, 244, 126, 73, 166, 225, 241, 141, 60, 47, 154, 112, 2, 37, 8, 113, 211, 4, 155, 162, 187, 64, 176, 150, 180, 149, 138, 11, 185, 204, 1, 57, 17, 164, 1, 61, 234, 169, 71, 58, 61, 7, 212, 190, 29, 162, 44, 127, 144, 96, 115, 1, 244, 254, 149, 245, 140, 158, 243, 58, 181, 111, 131, 133, 230, 195, 172, 71, 191, 161, 200, 109, 54, 252, 222, 252, 215, 141, 241, 134, 251, 124, 245, 81, 53, 150, 49, 152, 71, 18, 191, 245, 201, 212, 152, 66, 164, 245, 142, 4, 156, 217, 57, 155, 71, 233, 238, 40, 145, 39, 19, 44, 39, 94, 2, 165, 221, 134, 166, 33, 161, 200, 255, 146, 49, 83, 144, 132, 88, 245, 82, 188, 74, 46, 207, 205, 19, 71, 230, 22, 29, 192, 39, 165, 106, 240, 251, 185, 130, 48, 131, 34, 118, 63, 98, 195, 35, 149, 17, 244, 45, 71, 91, 174, 243, 15, 184, 190, 110, 43, 129, 102, 143, 21, 61, 75, 237, 147, 168, 31, 19, 168, 222, 50, 68, 221, 74, 209, 67, 33, 237, 78, 201, 23, 117, 175, 135, 83, 44, 198, 141, 125, 27, 198, 85, 244, 117, 118, 205, 178, 135, 62, 57, 237, 19, 138, 246, 118, 193, 220, 164, 126, 156, 165, 125, 134, 217, 227, 147, 248, 19, 115, 115, 103, 73, 150, 113, 252, 164, 166, 227, 24, 76, 159, 103, 228, 210, 97, 16, 246, 150, 160, 155, 103, 64, 72, 83, 203, 126, 179, 250, 216, 223, 241, 234, 78, 213, 5, 74, 153, 179, 176, 71, 2, 52, 120, 120, 63, 15, 247, 151, 99, 28, 8, 239, 212, 246, 189, 133, 134, 168, 101, 95, 95, 127, 71, 88, 87, 8, 247, 132, 253, 139, 21, 92, 218, 64, 146, 6, 166, 173, 9, 158, 76, 9, 61, 156, 3, 33, 21, 9, 219, 120, 184, 191, 192, 134, 111, 112, 14, 21, 159, 188, 146, 86, 237, 207, 140, 33, 175, 77, 254, 244, 107, 247, 21, 94, 0, 76, 195, 13, 218, 76, 219, 241, 95, 251, 217, 228, 72, 66, 81, 25, 116, 183, 148, 83, 145, 180, 2, 212, 37, 122, 241, 143, 236, 124, 230, 34, 69, 10, 178, 48, 83, 141, 105, 14, 110, 4, 30, 71, 70, 20, 104, 149, 187, 175, 51, 121, 6, 165, 198, 242, 148, 101, 51, 187, 110, 230, 81, 0, 24, 138, 218, 200, 133, 31, 30, 193, 96, 189, 4, 114, 46, 18, 105, 215, 12, 194, 95, 158, 85, 241, 158, 101, 163, 49, 15, 249, 208, 254, 26, 126, 21, 121, 173, 22, 64, 120, 152, 28, 255, 159, 61, 160, 101, 89, 166, 121, 245, 216, 51, 166, 91, 222, 128, 152, 80, 194, 107, 161, 233, 140, 54, 160, 180, 131, 113, 119, 28, 135, 211, 189, 167, 72, 179, 140, 180, 189, 237, 213, 186, 76, 69, 160, 39, 253, 109, 252, 166, 204, 28, 115, 224, 3, 240, 99, 244, 141, 139, 19, 213, 93, 76, 21, 199, 3, 110, 12, 43, 24, 222, 20, 113, 47, 165, 112, 178, 122, 128, 0, 217, 138, 143, 61, 145, 65, 71, 27, 130, 219, 10, 190, 195, 140, 230, 208, 198, 155, 99, 154, 58, 160, 73, 71, 92, 201, 234, 237, 205, 44, 183, 57, 24, 81, 111, 114, 134, 83, 32, 172, 214, 187, 240, 170, 225, 241, 90, 75, 49, 156, 63, 70, 198, 132, 4, 27, 203, 10, 56, 187, 123, 1, 32, 194, 82, 230, 45, 171, 144, 166, 144, 183, 148, 101, 174, 123, 153, 156, 2, 206, 175, 17, 75, 244, 129, 210, 34, 101, 98, 253, 163, 198, 210, 213, 103, 3, 184, 58, 230, 33, 121, 11, 111, 12, 245, 27, 0, 228, 47, 101, 67, 188, 239, 202, 113, 31, 215, 185, 8, 179, 8, 32, 210, 35, 156, 198, 90, 13, 7, 207, 74, 174, 135, 233, 129, 101, 113, 3, 5, 117, 206, 93, 169, 64, 161, 158, 126, 242, 24, 218, 123, 64, 165, 70, 196, 166, 220, 224, 131, 96, 4, 75, 208, 43, 244, 69, 121, 29, 184, 51, 54, 90, 37, 52, 13, 18, 52, 98, 126, 189, 90, 104, 108, 32, 235, 66, 210, 10, 232, 133, 181, 93, 27, 57, 188, 161, 106, 177, 194, 165, 79, 175, 150, 230, 6, 234, 103, 248, 194, 122, 178, 184, 149, 174, 71, 23, 80, 203, 203, 147, 241, 202, 168, 19, 95, 16, 210, 12, 75, 51, 218, 231, 244, 229, 227, 49, 188, 172, 184, 51, 109, 112, 18, 61, 6, 246, 75, 19, 51, 0, 192, 241, 113, 162, 175, 135, 240, 15, 238, 34, 115, 186, 240, 66, 9, 165, 17, 83, 167, 230, 226, 183, 122, 43, 147, 46, 117, 178, 164, 92, 16, 163, 72, 171, 232, 42, 200, 139, 212, 158, 176, 174, 245, 103, 66, 231, 104, 98, 14, 40, 206, 133, 57, 185, 217, 200, 196, 231, 48, 0, 233, 158, 34, 252, 43, 164, 163, 127, 46, 210, 166, 0, 46, 115, 126, 200, 138, 214, 96, 32, 208, 93, 148, 212, 69, 91, 248, 129, 118, 186, 117, 82, 22, 165, 138, 135, 117, 197, 101, 128, 70, 89, 139, 215, 254, 41, 223, 236, 65, 4, 23, 141, 177, 32, 237, 174, 214, 17, 131, 28, 115, 78, 108, 25, 160, 211, 229, 242, 26, 228, 22, 20, 97, 95, 40, 231, 212, 9, 179, 151, 123, 59, 75, 42, 220, 253, 143, 74, 100, 112, 104, 154, 180, 105, 251, 58, 126, 70, 170, 157, 234, 54, 81, 57, 121, 232, 28, 228, 12, 166, 55, 161, 236, 195, 22, 23, 9, 136, 114, 45, 83, 161, 67, 173, 117, 162, 79, 167, 139, 27, 23, 187, 134, 117, 4, 228, 236, 80, 183, 110, 76, 224, 67, 49, 25, 238, 77, 213, 153, 131, 35, 26, 227, 80, 204, 65, 119, 120, 218, 116, 66, 106, 80, 98, 23, 69, 224, 202, 76, 169, 130, 35, 96, 234, 255, 82, 143, 195, 51, 97, 192, 163, 71, 177, 70, 49, 61, 51, 253, 156, 70, 156, 65, 176, 235, 252, 236, 225, 8, 9, 75, 170, 228, 186, 162, 63, 147, 81, 9, 227, 72, 91, 73, 172, 95, 64, 94, 64, 77, 163, 202, 201, 160, 231, 47, 198, 41, 34, 219, 187, 56, 234, 147, 245, 190, 77, 20, 75, 115, 159, 72, 63, 116, 158, 180, 221, 4, 5, 223, 194, 26, 185, 196, 47, 220, 203, 254, 75, 224, 151, 43, 206, 25, 239, 58, 4, 227, 10, 242, 42, 143, 171, 136, 94, 104, 235, 208, 214, 250, 88, 166, 166, 224, 176, 102, 64, 34, 56, 114, 206, 63, 196, 22, 94, 102, 159, 38, 182, 255, 215, 41, 165, 243, 105, 0, 93, 145, 232, 129, 22, 111, 227, 22, 40, 247, 248, 113, 96, 71, 181, 253, 102, 141, 64, 74, 151, 165, 192, 164, 244, 83, 124, 33, 139, 122, 141, 198, 95, 26, 171, 101, 125, 59, 18, 90, 58, 213, 149, 190, 185, 247, 75, 121, 93, 67, 84, 241, 40, 92, 30, 61, 175, 160, 15, 65, 216, 186, 105, 19, 13, 213, 149, 142, 46, 183, 131, 109, 37, 1, 217, 78, 94, 201, 188, 144, 125, 87, 172, 189, 229, 123, 169, 205, 132, 194, 60, 49, 220, 44, 83, 99, 0, 170, 235, 160, 16, 38, 41, 182, 235, 146, 142, 252, 38, 99, 134, 84, 3, 55, 5, 37, 119, 198, 163, 167, 17, 81, 124, 103, 157, 93, 220, 155, 96, 155, 148, 220, 39, 54, 184, 244, 53, 18, 85, 208, 146, 197, 1, 182, 126, 196, 132, 253, 31, 28, 97, 245, 163, 79, 80, 182, 209, 51, 82, 24, 47, 9, 107, 196, 174, 238, 159, 117, 247, 15, 155, 15, 24, 178, 123, 78, 144, 14, 2, 234, 42, 137, 96, 157, 75, 171, 203, 203, 61, 168, 245, 192, 23, 122, 78, 62, 247, 35, 183, 62, 144, 149, 221, 248, 225, 24, 1, 239, 66, 70, 36, 194, 25, 173, 70, 54, 189, 68, 233, 147, 101, 116, 129, 171, 144, 165, 46, 5, 123, 93, 194, 129, 137, 99, 194, 162, 111, 16, 75, 147, 40, 99, 210, 178, 57, 211, 216, 86, 1, 136, 223, 115, 79, 123, 155, 207, 37, 89, 57, 81, 85, 155, 7, 51, 199, 244, 124, 241, 109, 244, 34, 221, 107, 47, 3, 171, 145, 234, 219, 54, 36, 9, 68, 155, 24, 67, 122, 110, 40, 129, 4, 194, 37, 192, 164, 108, 79, 18, 26, 235, 68, 130, 227, 244, 98, 234, 189, 55, 193, 54, 93, 13, 137, 236, 155, 46, 252, 244, 125, 107, 153, 160, 121, 246, 2, 5, 188, 134, 114, 34, 129, 123, 140, 92, 4, 43, 23, 231, 236, 29, 96, 172, 55, 18, 214, 234, 206, 142, 98, 129, 19, 27, 76, 13, 203, 0, 15, 243, 13, 247, 147, 165, 195, 219, 100, 193, 50, 238, 236, 250, 19, 77, 237, 209, 172, 190, 77, 206, 220, 232, 47, 105, 154, 105, 59, 68, 172, 192, 40, 4, 5, 156, 122, 36, 253, 173, 201, 153, 29, 150, 181, 118, 227, 15, 242, 80, 66, 240, 190, 230, 15, 157, 207, 81, 225, 135, 99, 171, 136, 154, 137, 27, 37, 122, 90, 243, 157, 90, 204, 48, 86, 163, 158, 191, 47, 174, 14, 185, 97, 26, 68, 210, 121, 243, 202, 255, 105, 218, 195, 160, 129, 89, 45, 171, 234, 135, 114, 108, 206, 144, 163, 126, 157, 99, 23, 190, 193, 67, 83, 1, 57, 37, 66, 9, 203, 184, 20, 124, 150, 253, 48, 31, 211, 119, 240, 187, 98, 193, 115, 72, 137, 5, 124, 202, 31, 251, 220, 202, 96, 86, 5, 209, 92, 203, 255, 100, 115, 126, 100, 158, 180, 4, 95, 107, 1, 7, 145, 59, 0, 16, 23, 224, 177, 27, 30, 183, 48, 5, 187, 22, 6, 1, 49, 233, 206, 105, 61, 198, 232, 25, 233, 79, 137, 98, 141, 176, 217, 122, 27, 156, 95, 165, 59, 88, 246, 48, 92, 161, 211, 242, 88, 55, 255, 239, 48, 10, 87, 236, 215, 124, 98, 213, 151, 217, 89, 168, 150, 134, 211, 238, 166, 86, 234, 121, 199, 25, 5, 185, 203, 91, 141, 165, 28, 190, 29, 10, 133, 132, 255, 45, 124, 34, 9, 140, 197, 190, 11, 30, 79, 179, 195, 211, 127, 84, 125, 93, 101, 70, 126, 87, 187, 231, 184, 187, 33, 114, 248, 197, 135, 228, 3, 141, 247, 10, 77, 172, 66, 209, 83, 13, 218, 19, 188, 188, 231, 86, 119, 38, 216, 138, 158, 219, 19, 26, 201, 237, 196, 122, 231, 74, 120, 146, 203, 166, 72, 226, 131, 232, 60, 236, 25, 230, 208, 184, 77, 228, 7, 70, 149, 152, 238, 187, 70, 139, 59, 111, 37, 35, 180, 182, 61, 11, 70, 127, 13, 109, 93, 164, 94, 47, 83, 232, 159, 195, 117, 231, 62, 24, 163, 209, 165, 74, 184, 222, 48, 176, 122, 105, 158, 77, 27, 19, 23, 197, 255, 203, 20, 22, 32, 241, 129, 112, 161, 4, 82, 29, 84, 52, 105, 189, 236, 10, 74, 128, 14, 51, 137, 80, 199, 96, 157, 193, 76, 226, 99, 12, 107, 73, 27, 42, 101, 151, 232, 15, 214, 30, 19, 165, 79, 174, 145, 113, 111, 164, 80, 229, 175, 51, 152, 1, 64, 74, 236, 128, 33, 143, 3, 248, 192, 10, 56, 213, 238, 96, 173, 57, 173, 0, 9, 239, 209, 105, 222, 14, 146, 128, 190, 182, 213, 61, 128, 204, 197, 163, 14, 234, 27, 252, 143, 170, 195, 81, 157, 214, 8, 226, 111, 52, 211, 250, 121, 208, 232, 108, 38, 231, 132, 140, 27, 100, 49, 138, 155, 112, 165, 232, 58, 96, 20, 254, 139, 18, 217, 38, 189, 29, 210, 191, 199, 51, 47, 241, 108, 177, 227, 221, 86, 240, 160, 34, 67, 191, 36, 181, 136, 249, 142, 133, 198, 127, 91, 245, 194, 111, 165, 254, 22, 38, 20, 184, 204, 40, 100, 77, 246, 82, 96, 100, 234, 209, 105, 235, 84, 219, 89, 121, 199, 255, 31, 21, 6, 157, 190, 230, 234, 132, 6, 247, 33, 226, 105, 164, 164, 139, 251, 59, 152, 189, 129, 28, 71, 158, 226, 184, 199, 155, 100, 89, 60, 6, 126, 165, 214, 193, 124, 194, 246, 167, 211, 159, 210, 182, 24, 228, 241, 135, 221, 70, 65, 75, 239, 76, 204, 92, 109, 129, 46, 143, 227, 43, 32, 242, 197, 210, 10, 162, 104, 142, 226, 106, 144, 177, 133, 230, 237, 78, 128, 214, 13, 174, 197, 194, 196, 184, 135, 245, 219, 89, 91, 56, 13, 132, 205, 101, 142, 22, 4, 243, 150, 105, 24, 104, 24, 194, 211, 174, 138, 227, 176, 215, 151, 123, 26, 228, 181, 101, 250, 144, 208, 225, 213, 113, 154, 92, 117, 77, 17, 11, 22, 213, 226, 93, 119, 56, 81, 178, 39, 202, 0, 108, 226, 187, 237, 249, 63, 48, 27, 101, 0, 245, 58, 205, 162, 80, 21, 142, 221, 235, 93, 205, 240, 206, 249, 13, 212, 179, 141, 37, 209, 101, 164, 95, 189, 238, 69, 214, 85, 102, 207, 244, 191, 244, 76, 128, 81, 56, 94, 42, 251, 211, 101, 129, 123, 220, 242, 221, 11, 101, 109, 213, 89, 204, 25, 239, 252, 134, 92, 121, 214, 137, 202, 7, 243, 186, 164, 124, 72, 138, 109, 61, 248, 5, 8, 149, 250, 40, 117, 101, 160, 101, 104, 124, 167, 16, 176, 96, 107, 104, 85, 149, 232, 103, 109, 238, 69, 162, 40, 11, 162, 210, 19, 245, 66, 6, 35, 164, 206, 7, 50, 89, 104, 133, 121, 165, 119, 250, 17, 143, 41, 68, 10, 179, 99, 183, 136, 153, 51, 137, 202, 94, 183, 96, 106, 56, 224, 126, 195, 154, 162, 126, 224, 176, 113, 122, 146, 62, 170, 87, 185, 139, 210, 19, 128, 95, 153, 188, 117, 20, 55, 69, 20, 186, 96, 189, 51, 15, 229, 231, 128, 112, 200, 251, 149, 188, 6, 114, 30, 161, 254, 12, 95, 75, 201, 207, 143, 254, 96, 71, 56, 6, 78, 170, 16, 87, 34, 109, 82, 68, 103, 110, 121, 72, 40, 141, 249, 84, 254, 172, 169, 39, 76, 73, 161, 167, 13, 26, 91, 15, 195, 145, 69, 53, 15, 37, 160, 137, 92, 121, 154, 51, 11, 113, 127, 22, 120, 159, 115, 195, 130, 240, 240, 220, 239, 160, 166, 250, 144, 43, 139, 144, 9, 53, 140, 194, 86, 150, 169, 125, 54, 230, 175, 112, 121, 180, 149, 30, 69, 187, 228, 255, 114, 184, 54, 53, 5, 243, 237, 157, 198, 11, 205, 208, 237, 82, 48, 132, 83, 226, 182, 150, 38, 131, 120, 85, 124, 71, 202, 162, 255, 73, 179, 54, 12, 140, 219, 246, 77, 98, 162, 66, 75, 166, 75, 114, 239, 37, 185, 229, 111, 27, 241, 117, 8, 86, 224, 44, 7, 178, 67, 181, 62, 19, 2, 27, 160, 119, 110, 141, 203, 75, 227, 21, 170, 214, 143, 147, 188, 202, 156, 136, 163, 121, 23, 20, 120, 94, 203, 198, 198, 164, 192, 166, 94, 226, 100, 81, 119, 130, 77, 182, 36, 207, 6, 38, 88, 8, 233, 147, 33, 64, 69, 178, 149, 132, 9, 134, 80, 92, 3, 195, 250, 209, 209, 235, 48, 211, 48, 30, 156, 240, 140, 105, 219, 141, 142, 221, 38, 75, 16, 58, 124, 216, 68, 214, 97, 131, 44, 195, 212, 179, 83, 202, 88, 96, 87, 149, 93, 219, 133, 15, 176, 199, 132, 76, 175, 113, 41, 3, 97, 81, 16, 250, 181, 152, 135, 64, 195, 180, 172, 210, 82, 29, 254, 242, 75, 38, 165, 75, 37, 73, 92, 160, 14, 142, 63, 153, 78, 221, 202, 241, 76, 76, 71, 29, 1, 33, 143, 62, 163, 45, 120, 208, 210, 154, 30, 143, 208, 179, 23, 239, 163, 45, 90, 199, 13, 26, 113, 48, 164, 165, 155, 159, 173, 159, 18, 137, 223, 126, 185, 134, 114, 185, 163, 87, 101, 67, 173, 217, 15, 90, 247, 240, 57, 226, 39, 192, 19, 142, 54, 0, 239, 145, 19, 69, 9, 8, 67, 35, 71, 0, 23, 64, 142, 236, 241, 164, 60, 80, 60, 27, 25, 18, 203, 133, 227, 66, 233, 85, 115, 187, 165, 240, 48, 17, 58, 24, 122, 151, 238, 142, 205, 136, 225, 160, 143, 197, 25, 149, 82, 171, 191, 118, 241, 192, 127, 221, 64, 85, 239, 95, 200, 148, 2, 210, 26, 51, 64, 210, 100, 32, 14, 95, 119, 81, 183, 144, 254, 131, 92, 31, 197, 105, 251, 64, 111, 163, 203, 153, 225, 236, 215, 197, 181, 7, 106, 62, 157, 235, 123, 42, 164, 45, 236, 140, 182, 0, 208, 105, 67, 230, 84, 185, 107, 65, 215, 165, 200, 67, 167, 242, 129, 207, 147, 143, 123, 61, 23, 203, 168, 48, 107, 158, 51, 229, 192, 153, 137, 81, 54, 22, 94, 62, 60, 224, 179, 173, 251, 123, 149, 59, 34, 104, 224, 198, 44, 63, 64, 251, 167, 86, 99, 148, 188, 94, 160, 242, 158, 137, 118, 165, 228, 19, 77, 212, 20, 77, 237, 213, 46, 36, 54, 73, 136, 137, 49, 176, 84, 245, 66, 213, 24, 44, 107, 208, 62, 250, 236, 35, 234, 175, 5, 127, 62, 95, 137, 103, 141, 39, 96, 199, 200, 143, 160, 142, 209, 199, 12, 195, 188, 118, 27, 23, 40, 237, 224, 150, 102, 117, 58, 212, 126, 25, 78, 151, 214, 154, 158, 208, 93, 31, 100, 227, 23, 189, 119, 195, 98, 28, 29, 73, 69, 204, 45, 99, 192, 169, 153, 142, 194, 249, 82, 164, 39, 56, 148, 5, 176, 106, 107, 179, 210, 164, 197, 102, 21, 129, 78, 33, 69, 116, 49, 212, 196, 4, 6, 75, 121, 123, 96, 17, 122, 17, 215, 13, 88, 70, 128, 224, 245, 96, 117, 114, 176, 37, 252, 2, 164, 168, 16, 147, 164, 158, 242, 55, 139, 8, 254, 125, 27, 102, 23, 6, 9, 52, 136, 225, 3, 249, 26, 56, 174, 213, 36, 34, 53, 251, 46, 245, 46, 47, 95, 215, 219, 106, 114, 99, 243, 14, 161, 173, 243, 158, 134, 73, 129, 201, 179, 65, 43, 220, 71, 69, 17, 192, 189, 189, 188, 44, 53, 225, 205, 57, 242, 201, 51, 49, 13, 5, 80, 126, 163, 43, 48, 77, 238, 104, 80, 138, 146, 164, 211, 71, 71, 198, 10, 134, 202, 201, 45, 22, 51, 163, 194, 226, 172, 87, 33, 230, 78, 44, 0, 137, 149, 212, 66, 159, 91, 111, 55, 197, 126, 165, 176, 110, 0, 235, 34, 12, 194, 204, 206, 176, 2, 77, 128, 223, 98, 177, 114, 208, 56, 200, 34, 77, 114, 168, 1, 125, 230, 17, 187, 158, 33, 72, 32, 105, 238, 126, 176, 229, 24, 39, 14, 89, 60, 123, 122, 124, 67, 2, 224, 212, 61, 229, 167, 0, 99, 152, 37, 193, 215, 152, 12, 13, 70, 192, 171, 248, 138, 4, 213, 98, 120, 24, 224, 244, 50, 104, 88, 37, 213, 127, 29, 138, 104, 187, 144, 7, 102, 49, 246, 78, 132, 230, 218, 224, 98, 129, 97, 161, 85, 15, 99, 200, 218, 220, 25, 183, 59, 214, 228, 232, 54, 253, 173, 132, 149, 212, 32, 35, 152, 118, 99, 196, 96, 15, 91, 73, 122, 224, 166, 181, 83, 250, 152, 29, 60, 72, 230, 109, 245, 136, 157, 162, 204, 73, 19, 66, 214, 49, 45, 16, 4, 161, 234, 107, 218, 10, 3, 151, 232, 168, 72, 140, 247, 174, 23, 14, 186, 123, 148, 186, 156, 156, 213, 185, 68, 123, 37, 224, 17, 6, 151, 169, 94, 118, 52, 174, 189, 145, 22, 138, 93, 45, 4, 87, 104, 203, 76, 62, 148, 149, 158, 97, 16, 181, 160, 93, 129, 227, 132, 30, 39, 204, 227, 83, 232, 182, 14, 28, 27, 63, 188, 48, 80, 19, 172, 215, 124, 35, 170, 22, 164, 28, 119, 93, 91, 80, 16, 191, 49, 146, 152, 107, 28, 64, 168, 92, 181, 207, 231, 241, 122, 59, 254, 5, 205, 254, 82, 53, 62, 249, 133, 56, 10, 124, 197, 20, 76, 158, 129, 139, 253, 187, 189, 237, 20, 252, 198, 63, 45, 60, 143, 35, 78, 23, 180, 157, 133, 87, 83, 233, 58, 43, 50, 234, 72, 99, 238, 29, 245, 9, 129, 140, 43, 187, 56, 57, 94, 48, 73, 95, 255, 247, 152, 106, 153, 155, 242, 245, 30, 247, 180, 187, 164, 241, 41, 247, 171, 206, 61, 155, 53, 75, 155, 67, 207, 131, 227, 41, 81, 29, 81, 172, 182, 37, 81, 163, 8, 105, 193, 151, 198, 223, 147, 217, 156, 114, 141, 84, 228, 6, 51, 162, 44, 171, 79, 250, 156, 81, 16, 236, 102, 121, 234, 135, 60, 59, 122, 193, 98, 146, 18, 194, 163, 236, 14, 208, 241, 248, 181, 227, 249, 216, 234, 188, 62, 5, 142, 1, 50, 99, 238, 0, 93, 58, 13, 73, 24, 200, 221, 187, 210, 214, 141, 35, 120, 71, 99, 137, 25, 110, 133, 10, 118, 169, 207, 97, 127, 110, 109, 38, 199, 146, 150, 200, 224, 9, 25, 168, 165, 15, 136, 150, 211, 76, 244, 232, 230, 223, 132, 104, 193, 119, 173, 192, 251, 248, 39, 60, 136, 153, 88, 136, 44, 124, 216, 107, 119, 31, 18, 203, 184, 11, 150, 62, 4, 177, 228, 58, 1, 20, 151, 215, 100, 217, 213, 192, 98, 198, 52, 44, 203, 227, 97, 178, 198, 168, 83, 202, 15, 84, 160, 82, 166, 108, 66, 52, 8, 221, 7, 60, 179, 202, 108, 85, 20, 214, 1, 77, 39, 221, 153, 101, 130, 232, 7, 44, 241, 187, 136, 252, 134, 243, 37, 85, 153, 235, 124, 182, 35, 27, 178, 16, 159, 139, 28, 172, 52, 196, 241, 225, 135, 148, 51, 176, 39, 27, 162, 70, 142, 129, 82, 32, 203, 132, 96, 253, 219, 118, 164, 84, 201, 62, 151, 206, 32, 149, 97, 42, 162, 182, 89, 103, 202, 202, 14, 252, 226, 187, 163, 45, 189, 107, 110, 31, 227, 181, 31, 111, 204, 113, 168, 238, 13, 183, 164, 58, 105, 100, 196, 164, 2, 164, 235, 108, 51, 214, 12, 208, 250, 180, 138, 217, 250, 246, 244, 221, 215, 17, 152, 105, 253, 106, 245, 164, 197, 187, 130, 20, 148, 215, 250, 202, 36, 73, 92, 42, 90, 83, 190, 160, 189, 159, 220, 201, 72, 19, 144, 164, 72, 211, 236, 190, 180, 118, 240, 147, 110, 153, 110, 98, 192, 55, 101, 31, 216, 7, 58, 12, 70, 216, 158, 152, 30, 46, 95, 86, 248, 8, 211, 50, 202, 142, 198, 140, 20, 124, 26, 168, 56, 236, 227, 118, 217, 217, 13, 190, 135, 129, 213, 252, 89, 49, 41, 184, 65, 82, 206, 105, 224, 79, 250, 22, 179, 251, 201, 201, 241, 146, 255, 202, 209, 127, 110, 106, 238, 135, 45, 130, 104, 188, 73, 172, 244, 16, 1, 100, 78, 209, 119, 139, 153, 53, 24, 147, 193, 176, 193, 173, 88, 152, 6, 212, 48, 232, 209, 57, 9, 13, 78, 87, 97, 158, 67, 1, 109, 76, 50, 61, 224, 190, 132, 79, 115, 168, 179, 245, 13, 156, 127, 94, 126, 217, 29, 100, 198, 104, 39, 162, 142, 190, 59, 210, 57, 138, 36, 107, 16, 204, 38, 36, 3, 148, 73, 95, 221, 5, 213, 145, 219, 254, 94, 173, 120, 253, 163, 138, 213, 179, 201, 71, 105, 240, 4, 175, 238, 26, 113, 197, 65, 143, 173, 49, 94, 50, 77, 111, 123, 187, 71, 39, 153, 184, 174, 193, 84, 26, 197, 156, 110, 31, 70, 133, 86, 68, 223, 178, 245, 109, 228, 71, 232, 76, 110, 213, 172, 132, 146, 7, 136, 221, 153, 85, 152, 204, 124, 78, 9, 11, 192, 77, 74, 249, 149, 42, 131, 239, 130, 218, 242, 245, 114, 89, 157, 43, 35, 205, 152, 235, 47, 214, 98, 9, 71, 160, 28, 168, 186, 251, 197, 124, 67, 59, 22, 209, 164, 252, 12, 203, 96, 140, 154, 38, 35, 241, 119, 50, 34, 159, 7, 177, 103, 25, 119, 78, 30, 21, 137, 156, 200, 149, 149, 122, 90, 155, 79, 203, 42, 161, 211, 94, 51, 124, 153, 21, 79, 206, 208, 95, 231, 124, 93, 65, 143, 21, 138, 133, 247, 61, 130, 50, 46, 131, 249, 51, 97, 50, 245, 229, 106, 40, 212, 10, 51, 11, 12, 201, 207, 12, 181, 64, 137, 163, 174, 119, 77, 93, 87, 218, 173, 1, 167, 163, 171, 163, 201, 248, 154, 230, 157, 248, 12, 221, 142, 72, 23, 194, 196, 8, 74, 222, 18, 95, 86, 128, 204, 142, 122, 56, 99, 94, 64, 186, 85, 221, 1, 42, 178, 177, 152, 45, 109, 55, 161, 198, 183, 70, 88, 0, 45, 243, 153, 210, 1, 119, 111, 78, 116, 37, 98, 143, 233, 173, 180, 86, 37, 38, 219, 132, 26, 62, 191, 172, 46, 224, 222, 117, 255, 13, 22, 56, 185, 88, 49, 203, 228, 78, 107, 72, 75, 129, 249, 198, 4, 43, 129, 115, 191, 221, 225, 19, 144, 239, 75, 143, 157, 126, 105, 42, 125, 131, 219, 210, 62, 48, 176, 104, 8, 131, 224, 44, 130, 137, 189, 99, 91, 50, 130, 77, 172, 225, 99, 87, 13, 131, 203, 93, 3, 177, 120, 94, 52, 14, 247, 165, 134, 142, 53, 112, 151, 52, 173, 1, 102, 250, 101, 239, 195, 7, 74, 236, 54, 241, 114, 189, 252, 131, 77, 76, 59, 64, 245, 127, 178, 224, 235, 153, 31, 135, 254, 233, 127, 38, 78, 178, 84, 73, 140, 184, 5, 148, 146, 146, 103, 106, 51, 197, 65, 194, 237, 119, 48, 170, 214, 230, 98, 87, 177, 42, 157, 231, 157, 94, 113, 184, 9, 186, 226, 207, 247, 43, 15, 50, 141, 215, 0, 156, 172, 107, 156, 4, 247, 36, 103, 231, 165, 169, 37, 88, 249, 192, 140, 204, 121, 136, 95, 235, 123, 217, 114, 186, 12, 112, 38, 4, 157, 212, 147, 158, 84, 207, 114, 23, 173, 71, 200, 219, 197, 204, 4, 20, 204, 113, 11, 165, 22, 39, 174, 110, 88, 248, 63, 0, 246, 49, 9, 73, 111, 164, 185, 204, 208, 86, 175, 60, 143, 228, 149, 230, 65, 172, 3, 223, 40, 92, 126, 56, 149, 42, 176, 174, 89, 46, 17, 13, 107, 131, 91, 52, 88, 126, 148, 124, 127, 13, 25, 12, 246, 232, 194, 7, 56, 31, 56, 106, 39, 240, 178, 163, 19, 213, 1, 244, 228, 238, 60, 95, 60, 221, 55, 183, 214, 72, 120, 105, 22, 15, 74, 202, 167, 142, 30, 108, 116, 88, 85, 134, 95, 142, 240, 104, 188, 147, 140, 124, 237, 101, 207, 237, 246, 93, 20, 31, 35, 138, 88, 242, 181, 226, 6, 127, 218, 35, 136, 113, 254, 41, 65, 16, 148, 162, 153, 73, 144, 160, 211, 250, 15, 104, 44, 134, 217, 14, 148, 182, 186, 138, 146, 230, 191, 80, 97, 140, 178, 167, 110, 9, 118, 221, 74, 199, 57, 92, 79, 189, 35, 176, 111, 63, 72, 81, 182, 35, 85, 177, 31, 178, 102, 0, 191, 45, 28, 225, 8, 20, 144, 38, 177, 44, 92, 30, 47, 224, 72, 1, 198, 124, 65, 234, 165, 207, 55, 212, 44, 151, 131, 19, 185, 174, 157, 201, 88, 17, 252, 27, 235, 118, 33, 76, 22, 40, 79, 153, 113, 217, 93, 231, 159, 212, 22, 176, 197, 20, 84, 29, 203, 116, 210, 181, 109, 37, 128, 10, 74, 58, 10, 176, 162, 114, 189, 243, 107, 202, 193, 231, 157, 5, 142, 163, 59, 18, 67, 239, 137, 114, 172, 207, 122, 180, 74, 108, 68, 104, 210, 45, 27, 230, 5, 25, 3, 109, 31, 66, 97, 4, 115, 2, 122, 237, 216, 85, 210, 33, 77, 115, 176, 212, 87, 24, 32, 19, 35, 153, 90, 165, 94, 60, 230, 91, 156, 76, 40, 46, 137, 13, 201, 44, 87, 244, 230, 19, 210, 120, 176, 15, 14, 11, 81, 43, 21, 163, 66, 118, 81, 205, 29, 99, 145, 234, 108, 92, 180, 77, 252, 245, 189, 79, 199, 67, 250, 5, 97, 240, 128, 196, 9, 203, 130, 63, 31, 234, 207, 100, 64, 215, 243, 109, 123, 57, 188, 111, 37, 58, 109, 153, 74, 219, 209, 155, 44, 253, 169, 169, 246, 206, 60, 29, 174, 110, 77, 20, 77, 204, 44, 58, 171, 138, 203, 169, 210, 236, 7, 245, 209, 180, 120, 32, 238, 121, 1, 60, 212, 141, 64, 222, 143, 124, 203, 198, 154, 74, 108, 214, 9, 55, 99, 155, 168, 39, 156, 174, 11, 16, 91, 65, 207, 95, 7, 242, 185, 80, 102, 143, 73, 199, 90, 30, 235, 129, 18, 34, 99, 195, 137, 81, 225, 226, 155, 140, 179, 155, 244, 72, 168, 172, 170, 84, 89, 43, 210, 178, 248, 181, 70, 147, 177, 135, 79, 242, 157, 182, 192, 223, 202, 182, 254, 124, 214, 18, 96, 123, 90, 195, 118, 35, 83, 27, 13, 177, 122, 136, 81, 236, 113, 188, 196, 71, 69, 211, 188, 66, 185, 212, 188, 141, 19, 32, 246, 187, 26, 220, 90, 163, 101, 225, 170, 38, 28, 233, 100, 37, 113, 246, 117, 186, 254, 145, 21, 217, 64, 213, 254, 134, 45, 141, 4, 150, 222, 246, 118, 255, 4, 117, 227, 152, 41, 171, 110, 140, 95, 41, 71, 240, 55, 230, 84, 226, 155, 94, 103, 203, 37, 67, 47, 236, 173, 225, 31, 59, 36, 84, 19, 94, 74, 6, 139, 106, 255, 96, 99, 183, 10, 241, 86, 86, 232, 148, 150, 197, 172, 248, 103, 85, 160, 243, 205, 254, 26, 174, 23, 73, 192, 154, 124, 234, 12, 170, 241, 31, 242, 89, 139, 40, 210, 231, 110, 34, 76, 230, 46, 110, 35, 20, 24, 54, 173, 97, 78, 201, 139, 35, 72, 104, 10, 132, 43, 137, 33, 37, 94, 113, 138, 105, 143, 107, 13, 248, 61, 131, 20, 113, 134, 120, 179, 205, 201, 91, 127, 130, 111, 135, 124, 75, 149, 241, 211, 21, 222, 103, 226, 236, 197, 113, 226, 231, 198, 35, 227, 218, 211, 239, 51, 210, 153, 46, 156, 22, 63, 144, 239, 114, 177, 40, 32, 112, 188, 74, 247, 215, 196, 109, 166, 179, 160, 37, 71, 87, 74, 125, 19, 89, 51, 250, 9, 16, 91, 0, 250, 93, 150, 123, 201, 231, 243, 29, 144, 94, 250, 133, 115, 98, 0, 222, 230, 251, 115, 231, 214, 111, 28, 222, 251, 98, 25, 46, 235, 20, 254, 11, 163, 39, 25, 164, 123, 161, 41, 241, 64, 91, 56, 56, 39, 5, 226, 88, 247, 137, 68, 199, 202, 112, 160, 144, 161, 53, 75, 239, 154, 138, 27, 35, 56, 72, 149, 204, 109, 211, 221, 66, 207, 55, 160, 215, 217, 76, 60, 232, 163, 166, 146, 202, 41, 72, 88, 37, 169, 44, 98, 0, 159, 204, 19, 206, 162, 57, 118, 225, 29, 147, 163, 221, 167, 41, 189, 18, 161, 132, 10, 25, 61, 138, 95, 170, 247, 153, 216, 177, 214, 87, 196, 208, 181, 38, 4, 24, 221, 198, 165, 27, 116, 224, 183, 47, 64, 234, 176, 166, 57, 207, 1, 14, 183, 32, 175, 0, 137, 24, 227, 27, 140, 65, 59, 254, 55, 136, 167, 206, 99, 155, 93, 137, 116, 117, 183, 81, 52, 216, 145, 218, 185, 103, 131, 228, 120, 38, 41, 64, 132, 235, 18, 70, 54, 238, 206, 200, 183, 221, 71, 247, 91, 44, 255, 72, 218, 1, 145, 24, 187, 106, 58, 189, 159, 69, 248, 2, 29, 50, 225, 11, 79, 181, 135, 2, 73, 84, 181, 174, 254, 52, 116, 144, 84, 71, 59, 185, 133, 186, 229, 122, 236, 70, 33, 231, 9, 98, 50, 139, 156, 64, 163, 136, 238, 179, 131, 143, 152, 18, 62, 235, 46, 21, 225, 35, 203, 250, 123, 128, 169, 187, 140, 227, 133, 71, 71, 82, 64, 121, 242, 183, 29, 100, 13, 111, 205, 209, 112, 234, 181, 5, 7, 114, 253, 69, 7, 224, 203, 207, 164, 150, 243, 103, 134, 151, 235, 21, 211, 4, 5, 156, 174, 172, 245, 66, 39, 141, 205, 2, 209, 112, 237, 60, 47, 251, 210, 103, 155, 177, 11, 232, 119, 121, 25, 92, 124, 141, 128, 29, 204, 161, 222, 152, 127, 231, 149, 102, 67, 151, 46, 8, 31, 72, 205, 28, 121, 144, 52, 200, 241, 116, 84, 30, 182, 90, 116, 7, 204, 231, 90, 168, 171, 176, 40, 12, 241, 59, 138, 84, 191, 115, 193, 111, 120, 135, 60, 92, 244, 106, 204, 129, 162, 80, 90, 80, 254, 75, 252, 222, 153, 203, 154, 176, 208, 165, 246, 47, 28, 122, 109, 244, 44, 140, 19, 243, 172, 119, 250, 110, 47, 53, 24, 43, 197, 202, 28, 241, 108, 112, 225, 146, 82, 43, 49, 34, 235, 183, 78, 83, 98, 83, 231, 90, 158, 64, 247, 136, 214, 121, 248, 225, 48, 6, 187, 203, 102, 13, 118, 157, 31, 138, 4, 7, 201, 101, 85, 225, 246, 177, 213, 104, 17, 233, 249, 31, 73, 156, 235, 102, 73, 63, 100, 37, 110, 150, 204, 235, 202, 255, 84, 141, 92, 33, 144, 34, 211, 24, 0, 81, 184, 88, 125, 229, 164, 66, 66, 207, 196, 141, 132, 18, 40, 187, 96, 82, 234, 56, 15, 62, 94, 140, 158, 129, 40, 242, 101, 167, 117, 245, 240, 24, 216, 2, 246, 50, 89, 241, 208, 127, 236, 118, 208, 124, 179, 65, 66, 112, 133, 221, 59, 186, 33, 162, 83, 37, 44, 203, 248, 83, 165, 24, 176, 197, 149, 116, 85, 242, 115, 18, 140, 4, 126, 174, 240, 142, 145, 240, 151, 138, 115, 174, 204, 65, 55, 110, 45, 213, 6, 191, 229, 134, 44, 191, 92, 220, 100, 214, 190, 152, 88, 194, 60, 234, 166, 70, 169, 202, 157, 22, 179, 119, 224, 238, 31, 61, 11, 103, 99, 9, 131, 242, 10, 145, 13, 196, 122, 154, 230, 230, 222, 107, 170, 67, 66, 128, 16, 224, 210, 145, 118, 52, 106, 82, 2, 141, 33, 52, 187, 120, 252, 233, 46, 158, 174, 197, 126, 84, 5, 169, 188, 24, 185, 243, 106, 223, 152, 36, 48, 37, 150, 77, 123, 6, 14, 191, 205, 189, 27, 26, 49, 63, 42, 88, 171, 133, 225, 116, 4, 9, 137, 47, 149, 242, 246, 9, 240, 72, 109, 178, 152, 239, 131, 114, 129, 35, 227, 253, 178, 195, 245, 53, 159, 5, 182, 81, 182, 88, 220, 1, 112, 82, 81, 83, 3, 76, 92, 179, 254, 80, 53, 181, 12, 222, 156, 179, 127, 106, 53, 106, 192, 75, 38, 125, 161, 243, 228, 61, 37, 19, 122, 132, 244, 126, 89, 200, 91, 91, 183, 51, 116, 113, 228, 157, 148, 82, 32, 175, 88, 135, 33, 151, 72, 58, 83, 64, 135, 38, 203, 189, 212, 59, 200, 86, 70, 147, 57, 141, 252, 176, 198, 111, 57, 23, 139, 2, 197, 162, 178, 226, 243, 181, 152, 217, 131, 90, 53, 44, 86, 113, 106, 30, 9, 224, 240, 50, 172, 150, 190, 170, 8, 176, 55, 36, 253, 50, 182, 211, 15, 47, 106, 0, 17, 94, 142, 113, 240, 71, 34, 83, 212, 95, 47, 87, 126, 154, 102, 55, 66, 93, 19, 212, 165, 16, 215, 31, 198, 167, 180, 162, 142, 246, 226, 120, 72, 202, 30, 197, 55, 188, 80, 102, 128, 48, 15, 235, 138, 174, 255, 244, 229, 216, 218, 28, 189, 180, 250, 140, 175, 44, 233, 137, 102, 123, 204, 220, 89, 57, 213, 198, 223, 248, 183, 21, 129, 46, 237, 208, 177, 67, 217, 0, 14, 196, 78, 135, 199, 136, 59, 154, 126, 245, 46, 101, 147, 209, 120, 190, 95, 64, 198, 21, 124, 149, 212, 251, 74, 99, 50, 75, 178, 221, 249, 168, 232, 38, 145, 28, 42, 164, 83, 90, 109, 75, 12, 247, 31, 46, 50, 127, 28, 148, 158, 194, 231, 161, 54, 179, 107, 189, 212, 248, 207, 36, 152, 186, 51, 48, 142, 239, 121, 250, 67, 237, 35, 32, 205, 160, 154, 240, 208, 147, 105, 213, 3, 142, 225, 244, 41, 31, 108, 205, 172, 125, 160, 145, 167, 73, 168, 234, 126, 113, 89, 29, 54, 135, 231, 82, 49, 174, 97, 196, 64, 207, 90, 182, 160, 196, 82, 179, 176, 243, 78, 154, 171, 167, 194, 129, 136, 196, 55, 104, 13, 160, 211, 244, 183, 215, 25, 36, 97, 69, 215, 231, 135, 175, 166, 52, 81, 183, 219, 101, 3, 95, 15, 225, 119, 178, 224, 142, 66, 7, 153, 159, 40, 17, 170, 179, 253, 42, 23, 26, 66, 232, 26, 87, 234, 42, 53, 93, 79, 183, 210, 110, 176, 116, 101, 113, 209, 98, 179, 46, 10, 77, 208, 24, 164, 237, 229, 161, 125, 224, 133, 116, 117, 103, 80, 168, 97, 85, 240, 70, 79, 189, 89, 196, 87, 125, 176, 42, 147, 10, 18, 200, 217, 129, 98, 57, 79, 100, 221, 210, 40, 41, 63, 191, 74, 31, 31, 161, 9, 163, 210, 105, 215, 149, 184, 149, 111, 110, 106, 240, 150, 140, 33, 103, 213, 143, 45, 77, 109, 2, 90, 124, 69, 192, 225, 151, 0, 240, 163, 10, 15, 225, 154, 205, 36, 125, 49, 168, 48, 5, 22, 62, 179, 254, 99, 84, 221, 174, 185, 224, 16, 161, 187, 146, 101, 174, 32, 14, 147, 128, 251, 63, 220, 240, 97, 162, 115, 244, 37, 76, 128, 86, 142, 214, 219, 84, 219, 237, 162, 186, 192, 79, 181, 102, 211, 48, 28, 185, 74, 206, 1, 209, 53, 225, 212, 19, 253, 51, 84, 40, 112, 37, 110, 79, 0, 82, 221, 105, 3, 165, 227, 100, 184, 104, 227, 103, 224, 227, 211, 168, 98, 178, 34, 235, 156, 98, 194, 18, 37, 115, 220, 178, 32, 211, 56, 165, 175, 127, 3, 194, 77, 196, 186, 25, 12, 29, 142, 139, 246, 251, 223, 161, 151, 50, 228, 226, 80, 57, 97, 108, 72, 27, 202, 195, 106, 14, 28, 149, 14, 179, 23, 94, 220, 188, 81, 87, 176, 172, 98, 119, 143, 198, 208, 139, 2, 80, 49, 58, 16, 188, 82, 136, 180, 76, 91, 50, 65, 57, 106, 104, 213, 156, 200, 91, 206, 174, 73, 169, 167, 33, 235, 235, 184, 178, 20, 106, 26, 150, 199, 147, 216, 31, 231, 94, 251, 186, 198, 86, 45, 51, 199, 105, 237, 125, 255, 185, 154, 87, 98, 80, 194, 244, 202, 251, 126, 75, 207, 128, 172, 102, 2, 193, 29, 44, 93, 73, 12, 210, 151, 182, 238, 61, 244, 91, 22, 69, 89, 85, 97, 251, 229, 169, 130, 141, 253, 228, 124, 151, 189, 88, 249, 64, 111, 241, 205, 135, 86, 196, 149, 32, 220, 222, 24, 88, 237, 187, 203, 66, 19, 95, 63, 5, 36, 180, 129, 13, 25, 95, 5, 251, 244, 159, 164, 125, 65, 91, 81, 247, 73, 2, 16, 226, 250, 23, 159, 196, 89, 174, 253, 84, 0, 92, 87, 204, 203, 115, 43, 173, 184, 67, 192, 87, 157, 87, 143, 48, 149, 78, 39, 124, 69, 64, 31, 190, 100, 186, 72, 232, 130, 17, 167, 169, 47, 97, 112, 21, 111, 254, 203, 52, 153, 243, 49, 243, 66, 34, 229, 52, 4, 168, 183, 144, 97, 233, 179, 75, 29, 88, 25, 46, 123, 134, 225, 18, 110, 55, 221, 215, 210, 236, 130, 26, 125, 96, 100, 101, 237, 171, 59, 171, 218, 186, 124, 144, 234, 208, 75, 56, 209, 192, 131, 187, 140, 199, 150, 233, 37, 202, 77, 85, 231, 219, 219, 211, 110, 106, 234, 34, 221, 148, 170, 9, 89, 128, 140, 182, 36, 249, 19, 194, 36, 15, 78, 34, 133, 145, 158, 25, 32, 242, 152, 144, 153, 232, 218, 117, 242, 36, 110, 245, 206, 154, 221, 189, 121, 5, 62, 247, 107, 143, 178, 34, 105, 81, 59, 243, 23, 107, 138, 5, 72, 29, 51, 209, 153, 70, 52, 122, 73, 230, 101, 58, 93, 234, 118, 86, 112, 74, 156, 236, 217, 190, 123, 74, 58, 66, 14, 13, 229, 37, 222, 174, 122, 204, 183, 46, 230, 107, 34, 49, 17, 109, 104, 176, 220, 62, 124, 213, 111, 165, 40, 245, 190, 45, 236, 155, 194, 128, 209, 28, 86, 255, 35, 228, 48, 65, 198, 7, 215, 179, 237, 62, 109, 172, 170, 215, 0, 133, 57, 25, 36, 49, 7, 245, 212, 6, 181, 80, 48, 59, 237, 46, 15, 132, 12, 221, 26, 46, 135, 111, 73, 46, 104, 139, 100, 23, 245, 6, 100, 88, 124, 148, 69, 31, 149, 150, 141, 4, 115, 84, 111, 70, 79, 184, 194, 223, 41, 226, 108, 238, 166, 29, 78, 52, 28, 37, 169, 247, 138, 114, 176, 113, 33, 223, 143, 89, 181, 110, 34, 79, 121, 36, 49, 193, 139, 105, 66, 27, 193, 17, 99, 213, 37, 194, 158, 5, 44, 184, 224, 189, 56, 64, 90, 61, 108, 226, 164, 236, 123, 185, 129, 138, 123, 109, 86, 236, 31, 7, 77, 177, 179, 47, 235, 10, 162, 38, 39, 238, 249, 222, 199, 119, 194, 141, 204, 202, 56, 159, 204, 98, 199, 70, 119, 49, 40, 216, 78, 89, 132, 10, 121, 193, 99, 17, 24, 14, 119, 17, 136, 164, 105, 96, 217, 88, 221, 77, 228, 68, 9, 36, 74, 98, 69, 206, 86, 153, 17, 5, 127, 111, 171, 163, 76, 74, 31, 75, 104, 226, 211, 67, 249, 117, 104, 145, 192, 252, 151, 108, 137, 40, 115, 223, 143, 103, 64, 42, 4, 85, 88, 216, 14, 6, 134, 165, 2, 245, 228, 222, 172, 56, 88, 248, 251, 200, 25, 15, 171, 199, 106, 156, 178, 140, 186, 15, 132, 202, 229, 92, 157, 208, 53, 177, 206, 255, 22, 236, 99, 140, 33, 47, 6, 142, 108, 192, 71, 177, 148, 25, 251, 174, 128, 172, 123, 61, 249, 94, 211, 66, 51, 11, 240, 81, 120, 55, 83, 36, 68, 240, 40, 173, 207, 81, 116, 66, 247, 194, 206, 235, 230, 227, 173, 185, 167, 46, 28, 201, 188, 18, 82, 94, 99, 166, 234, 114, 121, 216, 142, 70, 72, 52, 72, 198, 107, 226, 61, 179, 110, 96, 160, 208, 34, 214, 9, 126, 30, 218, 30, 209, 157, 93, 2, 23, 157, 8, 6, 7, 98, 117, 252, 225, 217, 30, 170, 166, 148, 240, 26, 248, 188, 69, 93, 203, 241, 199, 108, 190, 115, 36, 42, 83, 12, 143, 42, 65, 230, 35, 92, 16, 55, 140, 41, 80, 110, 223, 186, 144, 161, 160, 94, 213, 57, 90, 6, 83, 228, 214, 86, 211, 148, 204, 146, 171, 210, 152, 179, 160, 5, 175, 110, 246, 29, 83, 83, 29, 25, 147, 47, 34, 40, 195, 175, 94, 117, 98, 103, 75, 52, 13, 17, 224, 76, 134, 54, 71, 114, 9, 219, 64, 31, 116, 3, 163, 249, 104, 155, 200, 84, 116, 218, 201, 48, 176, 35, 32, 165, 157, 211, 108, 6, 232, 182, 219, 207, 61, 204, 194, 206, 223, 209, 27, 254, 123, 93, 87, 15, 56, 26, 191, 232, 240, 217, 154, 38, 143, 64, 38, 55, 163, 226, 50, 238, 12, 89, 146, 14, 250, 43, 23, 90, 61, 52, 170, 126, 165, 106, 108, 113, 166, 109, 157, 58, 251, 222, 88, 76, 103, 11, 106, 164, 85, 46, 229, 209, 139, 233, 215, 66, 71, 158, 219, 45, 54, 85, 148, 235, 42, 243, 22, 117, 130, 107, 113, 17, 136, 67, 221, 150, 84, 240, 242, 98, 76, 136, 4, 179, 232, 212, 25, 65, 164, 160, 152, 223, 255, 61, 148, 185, 5, 187, 18, 103, 175, 181, 176, 201, 157, 95, 221, 33, 229, 126, 228, 107, 119, 244, 83, 97, 128, 151, 83, 96, 49, 140, 34, 153, 76, 152, 113, 206, 63, 98, 116, 126, 220, 95, 143, 12, 152, 186, 74, 115, 103, 178, 121, 203, 12, 72, 191, 124, 180, 73, 74, 59, 165, 250, 202, 218, 92, 233, 78, 174, 63, 137, 41], - [210, 180, 99, 191, 255, 201, 117, 4, 53, 122, 144, 193, 248, 119, 198, 48, 67, 80, 148, 179, 68, 32, 83, 244, 0, 213, 78, 58, 128, 92, 150, 59, 206, 45, 174, 142, 167, 198, 167, 250, 240, 209, 68, 121, 65, 181, 107, 112, 211, 79, 24, 54, 215, 136, 237, 189, 44, 153, 161, 116, 87, 112, 88, 200, 51, 14, 253, 96, 252, 86, 31, 173, 24, 22, 156, 80, 95, 28, 210, 6, 6, 204, 29, 36, 165, 69, 20, 66, 47, 211, 60, 112, 129, 143, 66, 160, 212, 44, 169, 246, 9, 237, 32, 158, 97, 183, 206, 84, 134, 232, 39, 37, 128, 205, 8, 132, 122, 113, 248, 223, 60, 124, 0, 15, 68, 242, 251, 214, 250, 20, 118, 193, 213, 219, 159, 179, 115, 66, 57, 212, 150, 224, 234, 204, 84, 215, 235, 236, 72, 109, 129, 224, 78, 182, 155, 140, 66, 50, 9, 196, 139, 49, 32, 186, 32, 106, 237, 6, 120, 178, 16, 160, 27, 185, 57, 41, 213, 168, 74, 143, 206, 208, 74, 186, 252, 121, 92, 183, 10, 243, 227, 242, 183, 240, 66, 156, 117, 207, 74, 145, 131, 197, 72, 81, 23, 33, 72, 18, 231, 111, 56, 217, 94, 250, 130, 125, 228, 140, 166, 121, 5, 161, 91, 190, 45, 149, 162, 141, 211, 217, 206, 22, 215, 145, 227, 62, 225, 213, 247, 113, 45, 128, 211, 70, 22, 156, 196, 116, 49, 253, 234, 83, 210, 127, 32, 190, 173, 1, 148, 8, 136, 176, 222, 116, 48, 144, 166, 94, 250, 81, 167, 179, 23, 32, 104, 16, 199, 6, 82, 15, 91, 166, 231, 174, 185, 128, 135, 79, 221, 3, 68, 224, 211, 4, 47, 84, 96, 248, 224, 115, 144, 123, 62, 102, 72, 239, 174, 138, 198, 94, 41, 113, 141, 95, 233, 85, 196, 211, 124, 84, 167, 72, 29, 246, 30, 223, 105, 78, 120, 96, 29, 16, 50, 67, 118, 130, 150, 245, 168, 11, 171, 164, 41, 97, 187, 132, 86, 157, 215, 207, 8, 10, 107, 153, 183, 146, 167, 120, 213, 186, 72, 157, 227, 218, 173, 80, 15, 214, 14, 154, 49, 107, 38, 199, 184, 87, 215, 196, 13, 11, 155, 68, 153, 163, 145, 119, 126, 4, 199, 116, 139, 220, 11, 75, 243, 252, 241, 55, 136, 14, 162, 34, 142, 205, 236, 20, 29, 241, 35, 219, 190, 201, 21, 94, 96, 153, 222, 140, 186, 90, 227, 101, 78, 213, 124, 99, 153, 113, 130, 14, 114, 121, 217, 205, 234, 159, 111, 239, 160, 153, 187, 107, 49, 212, 188, 147, 22, 141, 187, 225, 202, 188, 178, 174, 164, 107, 151, 142, 178, 189, 190, 70, 23, 49, 167, 94, 123, 78, 171, 154, 194, 112, 57, 56, 147, 162, 138, 95, 6, 59, 92, 80, 47, 110, 91, 172, 215, 29, 17, 18, 203, 179, 232, 70, 164, 232, 174, 240, 129, 175, 21, 199, 125, 73, 72, 217, 145, 180, 179, 73, 31, 176, 150, 91, 46, 195, 25, 176, 151, 70, 152, 240, 92, 135, 136, 237, 159, 111, 16, 248, 31, 143, 175, 115, 135, 7, 120, 54, 166, 242, 240, 245, 240, 121, 242, 232, 183, 243, 246, 18, 228, 233, 53, 193, 200, 50, 228, 21, 103, 139, 68, 174, 159, 20, 232, 173, 14, 185, 123, 123, 48, 79, 56, 87, 155, 232, 34, 141, 28, 240, 235, 69, 62, 129, 68, 67, 1, 108, 110, 175, 74, 168, 99, 153, 48, 75, 239, 18, 139, 28, 7, 41, 171, 145, 29, 112, 121, 30, 238, 158, 253, 251, 95, 201, 126, 218, 124, 164, 226, 10, 24, 73, 239, 253, 113, 99, 118, 76, 69, 163, 62, 5, 167, 250, 70, 224, 138, 70, 14, 59, 127, 70, 65, 90, 192, 137, 208, 243, 0, 76, 77, 82, 104, 147, 130, 163, 51, 50, 231, 240, 39, 239, 21, 81, 78, 232, 154, 27, 200, 205, 123, 252, 119, 54, 27, 29, 46, 105, 172, 128, 206, 129, 131, 127, 167, 66, 1, 28, 253, 52, 46, 15, 180, 213, 224, 118, 115, 150, 227, 139, 222, 241, 7, 144, 232, 165, 236, 44, 222, 156, 174, 197, 41, 40, 149, 45, 232, 100, 62, 54, 146, 125, 137, 154, 139, 4, 131, 85, 117, 30, 253, 193, 32, 32, 64, 175, 114, 35, 17, 91, 119, 248, 114, 72, 161, 191, 38, 220, 25, 116, 59, 175, 73, 29, 243, 119, 183, 148, 215, 241, 93, 101, 165, 128, 229, 135, 103, 195, 138, 33, 170, 157, 60, 237, 9, 246, 229, 48, 56, 166, 244, 146, 2, 66, 140, 49, 60, 3, 88, 207, 66, 41, 186, 183, 125, 49, 156, 252, 111, 86, 54, 40, 133, 215, 214, 81, 3, 46, 230, 161, 243, 211, 63, 113, 249, 199, 147, 184, 69, 177, 126, 197, 165, 10, 177, 171, 171, 118, 245, 229, 99, 127, 126, 24, 13, 195, 190, 108, 139, 198, 24, 249, 69, 177, 13, 40, 66, 234, 216, 153, 207, 47, 241, 101, 41, 248, 3, 184, 207, 252, 187, 122, 132, 124, 164, 202, 41, 193, 129, 138, 200, 177, 89, 170, 22, 214, 201, 135, 83, 54, 195, 240, 172, 228, 149, 198, 138, 96, 185, 225, 157, 161, 2, 49, 100, 214, 126, 218, 75, 88, 246, 59, 29, 59, 141, 183, 224, 182, 209, 46, 104, 113, 181, 243, 64, 102, 79, 127, 75, 213, 50, 7, 119, 68, 152, 62, 139, 127, 215, 94, 157, 213, 150, 103, 24, 106, 221, 19, 247, 186, 171, 192, 57, 239, 54, 199, 91, 113, 107, 83, 213, 3, 132, 221, 101, 106, 41, 238, 249, 71, 48, 177, 36, 142, 7, 92, 39, 195, 144, 31, 174, 240, 193, 58, 22, 139, 42, 202, 183, 247, 13, 205, 156, 241, 32, 2, 125, 220, 27, 33, 52, 11, 218, 252, 101, 164, 76, 169, 134, 214, 30, 20, 48, 42, 116, 179, 154, 230, 83, 45, 211, 59, 73, 2, 14, 202, 61, 94, 56, 172, 79, 80, 180, 171, 116, 82, 37, 217, 191, 248, 164, 95, 48, 27, 27, 145, 159, 11, 228, 139, 118, 114, 141, 244, 73, 70, 20, 57, 137, 212, 241, 6, 21, 210, 22, 64, 231, 150, 119, 192, 245, 113, 173, 39, 47, 112, 20, 213, 171, 19, 30, 244, 246, 231, 221, 212, 186, 70, 217, 55, 29, 215, 8, 132, 89, 76, 148, 114, 240, 30, 175, 181, 235, 110, 245, 141, 190, 76, 134, 236, 96, 231, 210, 29, 31, 100, 82, 194, 77, 68, 117, 250, 10, 202, 138, 144, 250, 6, 16, 83, 122, 131, 56, 251, 28, 210, 29, 81, 158, 206, 79, 71, 205, 221, 144, 61, 88, 131, 26, 68, 140, 250, 207, 63, 94, 98, 239, 123, 231, 196, 250, 153, 220, 169, 138, 182, 118, 82, 107, 133, 98, 112, 10, 103, 23, 236, 167, 204, 187, 97, 229, 103, 114, 80, 3, 136, 244, 231, 97, 35, 214, 92, 169, 51, 25, 95, 51, 149, 113, 219, 218, 26, 176, 11, 79, 13, 245, 137, 196, 166, 194, 94, 156, 59, 80, 247, 80, 197, 20, 237, 18, 110, 10, 147, 33, 230, 197, 235, 184, 208, 176, 110, 138, 118, 170, 3, 90, 117, 226, 139, 219, 47, 5, 189, 148, 154, 225, 120, 161, 139, 113, 70, 119, 108, 244, 203, 126, 120, 104, 204, 4, 106, 202, 208, 151, 254, 60, 191, 111, 107, 162, 84, 41, 135, 167, 26, 82, 148, 16, 24, 209, 112, 255, 205, 164, 119, 203, 213, 25, 134, 17, 93, 60, 167, 116, 162, 168, 127, 103, 66, 226, 40, 107, 104, 94, 252, 129, 0, 136, 206, 220, 11, 40, 49, 120, 110, 174, 118, 42, 19, 131, 91, 200, 65, 162, 159, 223, 211, 133, 23, 188, 180, 146, 61, 106, 71, 104, 124, 57, 22, 88, 92, 201, 118, 142, 178, 68, 236, 176, 131, 162, 131, 133, 171, 157, 251, 58, 64, 96, 104, 169, 1, 8, 118, 50, 89, 22, 50, 217, 166, 240, 90, 136, 72, 105, 251, 134, 23, 41, 192, 209, 160, 72, 175, 28, 45, 55, 241, 252, 255, 172, 241, 159, 22, 227, 252, 118, 62, 71, 174, 141, 214, 250, 73, 136, 211, 120, 79, 104, 118, 28, 184, 112, 219, 248, 136, 51, 119, 77, 125, 193, 14, 207, 223, 138, 26, 6, 101, 86, 93, 2, 88, 106, 55, 87, 36, 77, 143, 134, 140, 41, 7, 44, 222, 155, 1, 238, 93, 14, 61, 220, 145, 116, 46, 103, 220, 6, 203, 88, 113, 65, 41, 198, 50, 18, 62, 209, 247, 29, 81, 144, 216, 182, 19, 161, 19, 211, 179, 165, 41, 147, 164, 57, 38, 156, 47, 242, 114, 24, 17, 156, 126, 202, 141, 188, 125, 137, 106, 89, 139, 127, 170, 185, 150, 232, 72, 248, 94, 33, 62, 188, 102, 190, 131, 116, 223, 134, 58, 81, 228, 170, 224, 134, 77, 137, 35, 37, 4, 192, 133, 170, 134, 197, 225, 26, 82, 194, 116, 202, 218, 117, 12, 88, 133, 236, 208, 175, 168, 176, 247, 194, 201, 42, 219, 104, 167, 18, 251, 3, 31, 54, 223, 14, 240, 48, 10, 235, 179, 185, 230, 199, 29, 161, 32, 12, 135, 41, 228, 25, 125, 3, 207, 197, 246, 58, 226, 114, 196, 184, 126, 126, 28, 60, 47, 202, 58, 89, 135, 196, 104, 139, 40, 28, 243, 188, 130, 137, 57, 131, 34, 132, 150, 240, 207, 62, 126, 193, 2, 138, 177, 141, 11, 118, 106, 6, 221, 192, 117, 53, 103, 134, 36, 0, 21, 245, 227, 25, 158, 156, 189, 149, 178, 220, 45, 102, 149, 139, 96, 241, 137, 185, 240, 225, 93, 117, 28, 0, 68, 104, 51, 136, 61, 190, 142, 175, 159, 68, 224, 101, 149, 213, 238, 11, 70, 146, 119, 37, 124, 255, 69, 240, 199, 216, 112, 175, 31, 163, 106, 242, 170, 148, 36, 185, 94, 111, 44, 215, 188, 13, 236, 92, 3, 123, 247, 84, 80, 26, 166, 47, 143, 5, 174, 38, 91, 128, 137, 10, 35, 170, 21, 165, 43, 4, 127, 220, 124, 154, 86, 105, 24, 182, 193, 197, 196, 114, 50, 210, 12, 170, 226, 117, 40, 183, 192, 135, 246, 20, 231, 175, 9, 232, 249, 196, 108, 63, 166, 87, 5, 246, 246, 181, 60, 46, 170, 42, 33, 142, 46, 41, 156, 241, 216, 159, 21, 39, 40, 95, 47, 12, 146, 118, 203, 228, 14, 87, 97, 117, 84, 142, 49, 134, 137, 140, 57, 48, 246, 213, 215, 106, 82, 75, 83, 200, 173, 103, 31, 126, 44, 141, 22, 4, 191, 212, 97, 225, 39, 116, 64, 69, 247, 209, 123, 176, 28, 106, 147, 89, 27, 121, 42, 127, 120, 194, 206, 235, 159, 99, 142, 213, 130, 119, 78, 32, 231, 109, 148, 176, 99, 36, 67, 225, 63, 51, 17, 135, 5, 114, 222, 33, 101, 47, 146, 1, 55, 33, 92, 200, 223, 6, 73, 221, 189, 93, 41, 241, 229, 169, 93, 196, 143, 229, 209, 213, 135, 66, 45, 254, 55, 196, 110, 151, 15, 24, 183, 164, 148, 168, 15, 10, 85, 209, 138, 141, 182, 252, 175, 46, 12, 116, 247, 50, 26, 93, 31, 174, 130, 131, 129, 118, 145, 212, 16, 190, 217, 176, 247, 42, 194, 196, 82, 8, 71, 60, 0, 5, 234, 132, 199, 35, 55, 157, 32, 171, 167, 155, 139, 4, 32, 150, 64, 139, 177, 13, 56, 86, 167, 36, 5, 190, 33, 43, 6, 208, 188, 214, 215, 166, 117, 198, 57, 78, 182, 59, 38, 24, 92, 86, 105, 187, 39, 172, 201, 12, 165, 39, 42, 238, 232, 173, 27, 200, 229, 220, 133, 151, 68, 179, 88, 22, 123, 237, 140, 43, 7, 247, 81, 15, 47, 208, 200, 168, 223, 192, 7, 67, 91, 36, 89, 65, 127, 44, 176, 23, 251, 179, 141, 193, 163, 196, 135, 2, 9, 62, 144, 139, 194, 0, 49, 73, 33, 166, 165, 55, 130, 216, 137, 103, 97, 111, 62, 155, 70, 220, 209, 86, 88, 118, 178, 223, 98, 165, 174, 234, 65, 249, 159, 25, 123, 211, 123, 184, 141, 240, 37, 251, 35, 85, 79, 224, 175, 97, 116, 39, 164, 226, 166, 65, 177, 29, 85, 117, 128, 250, 143, 170, 80, 191, 244, 79, 155, 99, 155, 35, 124, 243, 219, 237, 182, 30, 64, 209, 226, 158, 112, 133, 102, 11, 145, 112, 174, 2, 18, 237, 114, 82, 197, 107, 186, 131, 112, 182, 201, 98, 224, 97, 111, 143, 180, 24, 248, 31, 156, 107, 78, 24, 137, 235, 164, 201, 217, 38, 122, 112, 185, 153, 239, 193, 115, 91, 5, 51, 146, 3, 93, 21, 235, 246, 166, 75, 101, 100, 235, 220, 140, 8, 11, 142, 198, 77, 16, 84, 188, 176, 121, 54, 158, 3, 255, 124, 95, 27, 80, 141, 21, 194, 181, 123, 126, 18, 170, 111, 224, 163, 137, 18, 72, 236, 163, 179, 10, 223, 134, 174, 119, 210, 234, 47, 136, 194, 206, 96, 154, 149, 15, 218, 147, 189, 107, 118, 122, 60, 31, 208, 99, 32, 123, 178, 97, 255, 236, 88, 124, 176, 204, 8, 134, 57, 93, 187, 55, 141, 62, 21, 59, 159, 169, 212, 70, 158, 17, 183, 23, 31, 149, 151, 169, 54, 183, 154, 109, 117, 67, 168, 154, 181, 153, 79, 61, 97, 154, 41, 122, 146, 187, 30, 136, 223, 154, 220, 164, 156, 67, 88, 72, 195, 64, 104, 41, 53, 213, 74, 140, 35, 134, 87, 202, 68, 159, 22, 95, 245, 96, 79, 236, 185, 84, 6, 198, 157, 131, 57, 54, 76, 128, 92, 219, 189, 33, 184, 186, 56, 155, 42, 99, 250, 161, 56, 239, 110, 34, 95, 35, 11, 202, 32, 137, 112, 211, 124, 119, 148, 195, 227, 185, 200, 145, 35, 173, 45, 66, 221, 28, 182, 82, 98, 27, 18, 179, 29, 208, 207, 179, 67, 231, 63, 166, 183, 71, 150, 152, 30, 27, 7, 60, 101, 253, 71, 39, 189, 250, 182, 14, 203, 232, 39, 238, 72, 42, 74, 212, 194, 85, 0, 196, 13, 47, 195, 218, 42, 103, 211, 91, 50, 104, 109, 15, 34, 117, 198, 39, 165, 242, 129, 144, 205, 22, 166, 65, 68, 44, 15, 210, 107, 63, 149, 152, 226, 226, 128, 200, 194, 19, 148, 234, 57, 177, 70, 83, 226, 115, 7, 52, 216, 90, 127, 141, 88, 234, 143, 84, 70, 31, 122, 210, 169, 253, 110, 158, 64, 250, 144, 14, 214, 81, 184, 22, 184, 74, 94, 137, 231, 208, 134, 251, 45, 68, 113, 111, 62, 189, 217, 51, 127, 58, 19, 187, 31, 24, 51, 6, 165, 3, 163, 234, 11, 152, 28, 182, 152, 5, 78, 218, 102, 63, 199, 103, 232, 197, 147, 128, 30, 222, 52, 236, 216, 110, 229, 188, 36, 64, 98, 13, 40, 126, 75, 218, 60, 78, 36, 139, 172, 253, 192, 88, 69, 154, 54, 113, 202, 233, 210, 240, 211, 18, 241, 119, 143, 76, 71, 48, 171, 74, 186, 44, 130, 156, 181, 101, 131, 150, 49, 42, 86, 229, 138, 239, 188, 213, 177, 96, 102, 71, 246, 90, 208, 121, 67, 39, 246, 203, 121, 244, 143, 103, 67, 63, 207, 108, 17, 188, 120, 215, 40, 186, 34, 105, 55, 58, 223, 164, 156, 42, 91, 16, 13, 110, 70, 60, 69, 155, 13, 163, 26, 10, 244, 114, 98, 44, 56, 141, 108, 22, 33, 38, 234, 87, 223, 179, 62, 13, 151, 58, 164, 103, 169, 167, 189, 212, 117, 17, 187, 176, 106, 10, 193, 165, 229, 220, 88, 244, 111, 3, 238, 73, 221, 105, 38, 140, 172, 205, 84, 31, 213, 170, 4, 201, 243, 176, 54, 195, 32, 174, 206, 77, 195, 58, 67, 139, 48, 29, 159, 117, 92, 26, 172, 80, 252, 18, 189, 3, 158, 75, 121, 156, 134, 158, 83, 243, 103, 161, 210, 26, 108, 202, 30, 130, 84, 184, 30, 118, 205, 123, 67, 47, 247, 50, 59, 114, 137, 217, 45, 137, 41, 167, 203, 68, 210, 136, 122, 202, 201, 76, 81, 119, 4, 183, 58, 49, 70, 144, 231, 40, 117, 251, 79, 237, 178, 245, 146, 57, 192, 104, 181, 145, 184, 238, 74, 100, 166, 222, 85, 253, 44, 83, 133, 207, 138, 176, 228, 66, 98, 24, 172, 236, 23, 111, 43, 2, 198, 236, 125, 226, 196, 71, 60, 206, 3, 152, 187, 134, 172, 69, 12, 107, 56, 125, 253, 25, 217, 30, 154, 134, 67, 202, 153, 203, 8, 180, 103, 172, 58, 191, 35, 176, 203, 186, 99, 107, 117, 39, 216, 109, 198, 213, 173, 190, 254, 133, 112, 79, 87, 13, 146, 182, 157, 233, 76, 132, 229, 189, 159, 84, 124, 204, 163, 233, 53, 118, 7, 168, 227, 138, 21, 180, 114, 177, 134, 119, 73, 65, 161, 57, 139, 193, 156, 123, 203, 126, 159, 33, 228, 235, 110, 123, 168, 143, 197, 149, 20, 9, 235, 249, 99, 51, 194, 146, 18, 38, 95, 229, 61, 68, 238, 168, 23, 204, 236, 72, 23, 149, 100, 229, 198, 102, 116, 16, 65, 143, 231, 234, 22, 15, 89, 53, 148, 73, 85, 220, 199, 140, 22, 199, 130, 145, 107, 251, 27, 35, 164, 180, 203, 227, 251, 200, 231, 191, 81, 126, 137, 202, 116, 163, 223, 163, 26, 201, 176, 179, 253, 68, 53, 127, 132, 34, 191, 97, 180, 197, 196, 19, 255, 35, 11, 64, 30, 153, 49, 94, 220, 0, 227, 14, 173, 229, 204, 229, 156, 22, 158, 73, 101, 129, 160, 216, 126, 91, 68, 102, 77, 111, 198, 183, 24, 60, 141, 218, 195, 186, 100, 222, 18, 181, 232, 148, 173, 237, 141, 125, 42, 205, 112, 166, 50, 55, 113, 90, 241, 110, 2, 97, 36, 113, 255, 203, 118, 224, 197, 181, 77, 254, 125, 116, 46, 208, 46, 222, 117, 240, 7, 142, 23, 188, 216, 243, 158, 224, 118, 138, 198, 246, 110, 172, 25, 22, 134, 51, 129, 228, 144, 132, 210, 159, 203, 174, 241, 216, 99, 66, 49, 118, 31, 113, 92, 10, 77, 114, 15, 54, 89, 58, 123, 142, 175, 114, 154, 206, 230, 170, 238, 152, 54, 166, 183, 48, 30, 123, 220, 184, 84, 230, 121, 35, 98, 204, 148, 216, 205, 84, 163, 88, 45, 149, 161, 5, 54, 135, 43, 104, 25, 56, 165, 127, 139, 59, 140, 222, 188, 79, 5, 53, 150, 4, 199, 252, 163, 12, 49, 253, 7, 187, 55, 59, 51, 67, 148, 54, 128, 141, 5, 155, 229, 5, 247, 174, 52, 249, 157, 28, 139, 101, 250, 45, 236, 229, 216, 104, 206, 33, 61, 43, 228, 17, 209, 5, 121, 232, 244, 41, 202, 219, 27, 194, 246, 84, 192, 99, 194, 187, 69, 247, 122, 223, 59, 195, 36, 155, 11, 235, 185, 118, 182, 245, 11, 120, 221, 114, 40, 244, 93, 122, 26, 17, 237, 38, 75, 196, 96, 41, 98, 165, 184, 187, 200, 145, 206, 210, 197, 201, 77, 12, 148, 22, 226, 167, 139, 98, 84, 110, 136, 226, 195, 142, 18, 12, 101, 212, 101, 117, 153, 197, 249, 67, 1, 1, 45, 53, 9, 21, 64, 13, 39, 129, 95, 53, 152, 4, 76, 28, 202, 162, 84, 72, 192, 135, 41, 16, 130, 2, 242, 127, 66, 241, 149, 178, 198, 236, 41, 102, 50, 100, 169, 134, 231, 63, 25, 179, 172, 66, 81, 134, 234, 8, 145, 120, 61, 91, 89, 16, 207, 208, 62, 154, 210, 21, 35, 193, 173, 69, 226, 35, 87, 191, 147, 120, 142, 120, 136, 57, 3, 66, 152, 182, 43, 8, 157, 110, 193, 51, 80, 56, 17, 139, 162, 20, 238, 150, 195, 228, 110, 53, 120, 225, 139, 90, 102, 185, 224, 101, 190, 213, 64, 226, 227, 145, 161, 119, 180, 100, 193, 36, 45, 197, 175, 98, 117, 24, 239, 194, 86, 159, 169, 111, 123, 133, 169, 184, 101, 211, 119, 103, 146, 16, 228, 33, 37, 78, 204, 23, 134, 191, 58, 21, 81, 7, 98, 121, 11, 70, 254, 252, 119, 52, 40, 69, 237, 179, 87, 228, 227, 43, 32, 175, 227, 30, 92, 92, 231, 233, 249, 142, 255, 221, 103, 29, 208, 101, 249, 91, 236, 109, 198, 27, 143, 120, 158, 238, 7, 158, 50, 210, 44, 226, 211, 162, 37, 69, 101, 164, 21, 72, 68, 226, 78, 40, 198, 163, 255, 60, 208, 29, 47, 234, 24, 205, 37, 10, 83, 20, 164, 23, 81, 222, 77, 102, 101, 3, 134, 105, 62, 47, 146, 101, 245, 88, 121, 137, 113, 195, 51, 188, 149, 242, 114, 184, 231, 64, 115, 108, 113, 151, 195, 161, 75, 52, 240, 134, 83, 175, 188, 167, 106, 14, 43, 246, 168, 213, 95, 131, 59, 177, 7, 110, 37, 53, 62, 213, 4, 7, 13, 72, 234, 173, 131, 176, 128, 250, 201, 53, 142, 137, 95, 11, 13, 55, 31, 250, 84, 80, 190, 108, 120, 14, 23, 183, 174, 143, 59, 117, 193, 148, 140, 220, 21, 52, 197, 95, 244, 180, 5, 22, 189, 99, 1, 136, 46, 34, 30, 8, 151, 153, 86, 76, 13, 209, 61, 56, 91, 114, 159, 24, 17, 218, 233, 138, 67, 83, 188, 229, 64, 133, 36, 238, 47, 255, 52, 53, 217, 49, 64, 210, 189, 159, 71, 145, 103, 164, 255, 111, 123, 88, 243, 81, 157, 82, 246, 151, 111, 129, 255, 178, 233, 129, 84, 56, 246, 155, 52, 70, 247, 193, 0, 65, 193, 140, 154, 27, 166, 24, 188, 189, 76, 241, 254, 91, 78, 157, 124, 30, 179, 23, 254, 164, 62, 19, 117, 58, 65, 183, 71, 60, 33, 130, 77, 150, 136, 68, 24, 164, 243, 70, 209, 245, 135, 22, 206, 242, 200, 105, 41, 220, 41, 87, 50, 113, 118, 242, 50, 104, 167, 170, 37, 203, 112, 206, 141, 223, 102, 10, 153, 2, 172, 181, 115, 111, 161, 38, 149, 30, 86, 67, 151, 26, 113, 38, 194, 86, 131, 33, 168, 129, 197, 162, 252, 227, 79, 0, 127, 210, 206, 98, 59, 31, 250, 68, 92, 132, 88, 238, 52, 237, 206, 172, 167, 52, 48, 127, 225, 78, 176, 130, 205, 151, 58, 207, 223, 151, 218, 217, 211, 156, 174, 120, 212, 200, 37, 227, 19, 98, 128, 137, 222, 213, 147, 182, 4, 93, 27, 18, 34, 160, 224, 54, 95, 191, 14, 125, 201, 130, 20, 197, 248, 78, 172, 126, 68, 113, 233, 123, 221, 134, 144, 101, 200, 41, 138, 139, 221, 116, 20, 115, 139, 237, 242, 31, 253, 209, 208, 63, 123, 47, 243, 15, 151, 23, 67, 172, 72, 12, 127, 52, 79, 169, 96, 148, 202, 95, 241, 134, 169, 219, 6, 86, 237, 175, 138, 190, 58, 215, 215, 25, 63, 225, 252, 57, 40, 22, 45, 138, 140, 186, 168, 234, 194, 148, 153, 114, 93, 187, 65, 40, 126, 193, 99, 216, 193, 250, 239, 37, 205, 80, 122, 77, 126, 191, 77, 0, 138, 150, 192, 44, 3, 240, 47, 39, 226, 107, 179, 211, 55, 26, 233, 169, 75, 214, 125, 140, 46, 103, 160, 65, 202, 169, 125, 173, 32, 197, 0, 177, 99, 1, 253, 59, 191, 16, 95, 230, 205, 206, 166, 101, 52, 46, 172, 32, 158, 126, 106, 135, 74, 221, 115, 119, 188, 240, 201, 52, 141, 244, 191, 178, 45, 223, 174, 216, 92, 92, 36, 233, 139, 47, 41, 114, 214, 214, 168, 61, 156, 92, 199, 139, 100, 113, 192, 246, 147, 205, 101, 71, 51, 174, 186, 7, 218, 129, 80, 218, 133, 222, 195, 239, 26, 7, 145, 163, 188, 159, 18, 77, 44, 143, 120, 179, 194, 181, 80, 195, 116, 90, 9, 193, 17, 158, 201, 181, 180, 153, 20, 51, 48, 93, 212, 125, 13, 162, 66, 117, 14, 135, 156, 100, 38, 123, 4, 222, 120, 211, 235, 168, 102, 240, 60, 253, 81, 145, 225, 104, 232, 10, 179, 196, 69, 180, 22, 196, 184, 152, 185, 193, 157, 69, 230, 225, 143, 15, 152, 171, 42, 255, 158, 25, 38, 111, 8, 243, 100, 213, 168, 169, 243, 212, 146, 68, 227, 47, 211, 36, 124, 198, 105, 233, 192, 92, 8, 240, 184, 177, 197, 165, 225, 26, 108, 23, 61, 80, 144, 15, 60, 142, 196, 173, 103, 112, 196, 53, 214, 105, 165, 158, 237, 216, 16, 10, 152, 165, 157, 165, 220, 126, 115, 191, 5, 201, 253, 104, 36, 4, 206, 185, 56, 76, 24, 173, 193, 216, 227, 108, 170, 77, 9, 54, 18, 179, 76, 230, 103, 115, 111, 64, 83, 78, 108, 250, 158, 100, 53, 136, 148, 78, 108, 191, 188, 2, 77, 142, 0, 197, 62, 251, 69, 28, 111, 147, 164, 42, 198, 26, 157, 132, 157, 69, 184, 219, 97, 224, 159, 124, 82, 44, 44, 190, 147, 186, 96, 129, 111, 236, 49, 160, 112, 35, 205, 191, 93, 54, 105, 216, 176, 204, 217, 132, 201, 106, 58, 123, 44, 176, 196, 145, 251, 4, 37, 118, 172, 218, 32, 173, 171, 59, 45, 56, 14, 57, 149, 11, 25, 73, 44, 156, 60, 103, 188, 183, 170, 68, 154, 249, 36, 63, 200, 126, 248, 149, 114, 129, 220, 29, 22, 63, 49, 39, 235, 22, 201, 75, 159, 252, 148, 30, 230, 59, 246, 40, 229, 57, 205, 152, 173, 62, 171, 19, 141, 60, 244, 119, 255, 223, 67, 49, 140, 86, 85, 112, 138, 78, 121, 143, 12, 30, 34, 51, 241, 224, 248, 36, 141, 84, 2, 116, 159, 6, 98, 33, 221, 15, 36, 216, 250, 247, 159, 234, 122, 250, 255, 206, 193, 37, 113, 120, 52, 49, 235, 97, 198, 212, 19, 195, 93, 174, 224, 206, 209, 96, 55, 116, 91, 126, 16, 235, 64, 141, 248, 134, 45, 252, 9, 161, 135, 58, 111, 181, 80, 63, 76, 50, 87, 143, 34, 83, 155, 86, 227, 168, 131, 212, 48, 96, 6, 40, 100, 229, 170, 88, 96, 189, 27, 14, 189, 249, 125, 5, 131, 43, 171, 193, 56, 246, 157, 229, 203, 196, 22, 124, 165, 186, 57, 243, 75, 102, 2, 151, 9, 153, 3, 52, 217, 162, 11, 44, 194, 146, 64, 95, 149, 177, 121, 240, 241, 196, 211, 79, 130, 235, 33, 174, 23, 213, 196, 85, 156, 168, 27, 144, 26, 46, 180, 71, 202, 16, 128, 48, 99, 113, 55, 1, 23, 59, 68, 25, 103, 28, 143, 79, 172, 141, 97, 56, 149, 59, 190, 13, 18, 7, 116, 233, 222, 152, 147, 246, 238, 201, 236, 26, 106, 223, 32, 8, 191, 177, 126, 217, 55, 135, 13, 10, 175, 67, 99, 145, 102, 68, 27, 154, 123, 140, 46, 102, 63, 48, 114, 140, 122, 148, 149, 86, 251, 195, 113, 61, 35, 17, 122, 152, 59, 68, 201, 117, 239, 50, 112, 107, 123, 255, 60, 239, 85, 209, 189, 12, 193, 41, 32, 27, 120, 110, 2, 178, 108, 75, 112, 146, 199, 93, 189, 143, 37, 45, 7, 149, 205, 25, 12, 218, 39, 70, 83, 31, 138, 155, 82, 56, 175, 56, 82, 160, 180, 9, 196, 137, 126, 195, 23, 34, 63, 210, 64, 63, 58, 121, 42, 226, 97, 152, 37, 95, 166, 225, 140, 40, 73, 181, 122, 133, 227, 76, 80, 191, 198, 123, 237, 52, 134, 39, 121, 58, 156, 205, 227, 58, 201, 190, 194, 168, 32, 150, 19, 173, 207, 95, 54, 133, 222, 63, 124, 194, 80, 135, 166, 147, 241, 123, 131, 56, 149, 180, 175, 175, 165, 62, 246, 14, 174, 43, 216, 60, 241, 224, 46, 174, 96, 97, 140, 95, 183, 91, 35, 128, 43, 227, 227, 98, 185, 48, 18, 156, 135, 128, 143, 130, 161, 121, 66, 167, 228, 34, 219, 65, 23, 154, 60, 117, 74, 203, 134, 180, 177, 202, 40, 40, 122, 24, 86, 192, 85, 19, 234, 104, 176, 203, 179, 45, 69, 127, 211, 229, 246, 183, 242, 204, 222, 141, 5, 233, 134, 9, 184, 198, 149, 68, 242, 167, 205, 54, 102, 254, 38, 150, 2, 65, 20, 246, 156, 15, 16, 129, 56, 129, 6, 228, 9, 185, 247, 240, 5, 215, 194, 106, 58, 34, 60, 250, 164, 95, 136, 235, 196, 109, 135, 49, 57, 109, 72, 26, 48, 116, 92, 145, 231, 163, 89, 49, 97, 179, 40, 175, 197, 54, 14, 183, 78, 6, 23, 141, 213, 87, 202, 176, 102, 71, 140, 180, 251, 45, 225, 111, 213, 211, 248, 162, 243, 1, 192, 233, 65, 216, 213, 85, 86, 182, 147, 23, 111, 76, 94, 230, 251, 192, 229, 70, 111, 137, 146, 2, 34, 229, 188, 171, 113, 142, 95, 163, 158, 206, 243, 18, 37, 5, 225, 205, 117, 18, 75, 162, 90, 241, 24, 48, 29, 71, 79, 56, 206, 232, 152, 76, 119, 106, 125, 187, 18, 155, 96, 223, 69, 86, 234, 68, 226, 187, 190, 123, 52, 131, 206, 251, 181, 5, 15, 196, 142, 98, 185, 96, 139, 118, 20, 18, 75, 90, 133, 159, 251, 239, 37, 100, 106, 163, 99, 57, 235, 40, 75, 138, 95, 120, 59, 179, 97, 218, 205, 149, 38, 63, 147, 228, 71, 194, 43, 135, 166, 242, 52, 215, 200, 184, 151, 155, 243, 31, 19, 12, 122, 212, 111, 240, 53, 208, 122, 100, 180, 104, 115, 219, 143, 120, 80, 198, 240, 157, 223, 76, 186, 187, 124, 77, 184, 213, 25, 225, 41, 49, 44, 117, 84, 135, 123, 191, 254, 180, 13, 153, 215, 30, 97, 176, 21, 160, 157, 46, 136, 68, 15, 37, 160, 64, 115, 130, 85, 188, 114, 248, 114, 179, 82, 31, 183, 138, 152, 79, 141, 7, 124, 123, 214, 202, 246, 134, 18, 41, 68, 53, 22, 205, 223, 60, 192, 9, 50, 235, 227, 100, 192, 174, 3, 180, 151, 169, 44, 27, 193, 204, 123, 141, 160, 62, 140, 140, 251, 204, 254, 11, 48, 86, 229, 47, 178, 205, 116, 2, 107, 181, 174, 179, 234, 21, 111, 133, 137, 4, 36, 174, 5, 70, 24, 136, 98, 240, 228, 65, 172, 50, 205, 87, 202, 191, 88, 138, 113, 194, 67, 122, 218, 164, 192, 208, 155, 171, 174, 74, 117, 117, 183, 180, 49, 85, 242, 32, 177, 28, 125, 209, 246, 42, 129, 9, 202, 133, 160, 109, 100, 187, 138, 138, 239, 187, 158, 249, 241, 111, 192, 61, 90, 206, 149, 57, 206, 159, 81, 191, 211, 207, 179, 138, 154, 50, 97, 130, 164, 3, 189, 112, 35, 130, 87, 42, 67, 185, 150, 204, 67, 48, 189, 14, 72, 177, 247, 175, 71, 195, 98, 246, 82, 7, 70, 131, 218, 106, 34, 178, 144, 83, 179, 133, 34, 40, 13, 245, 89, 153, 238, 34, 24, 98, 121, 56, 136, 67, 109, 77, 63, 60, 178, 138, 25, 249, 6, 179, 170, 113, 66, 121, 173, 185, 111, 168, 247, 119, 236, 66, 201, 170, 84, 7, 120, 183, 130, 132, 143, 241, 52, 125, 213, 54, 91, 59, 30, 253, 243, 107, 24, 204, 17, 230, 243, 51, 13, 191, 38, 18, 10, 224, 224, 237, 195, 213, 217, 45, 34, 63, 60, 216, 161, 15, 103, 238, 223, 51, 72, 151, 246, 111, 76, 137, 29, 207, 225, 26, 138, 12, 14, 224, 76, 223, 35, 116, 40, 48, 126, 224, 92, 255, 6, 124, 215, 183, 233, 71, 87, 34, 88, 127, 71, 235, 29, 79, 14, 85, 34, 130, 95, 72, 111, 40, 252, 78, 224, 254, 253, 22, 76, 16, 6, 239, 214, 217, 171, 65, 135, 6, 101, 113, 129, 174, 217, 60, 189, 203, 101, 162, 244, 215, 231, 182, 28, 250, 163, 113, 124, 191, 190, 220, 106, 143, 150, 164, 51, 3, 151, 138, 62, 161, 187, 109, 62, 60, 135, 235, 6, 38, 83, 154, 155, 90, 251, 98, 94, 192, 182, 145, 124, 60, 139, 42, 224, 144, 212, 239, 25, 183, 170, 111, 91, 73, 71, 163, 159, 125, 220, 34, 211, 46, 43, 102, 97, 81, 137, 83, 205, 72, 175, 123, 11, 77, 124, 19, 132, 187, 58, 40, 239, 18, 247, 184, 133, 235, 204, 195, 121, 132, 169, 160, 98, 9, 107, 19, 172, 135, 75, 77, 62, 240, 194, 147, 53, 182, 107, 98, 41, 65, 98, 214, 116, 2, 20, 212, 243, 222, 73, 215, 28, 194, 45, 8, 224, 55, 193, 200, 100, 85, 35, 230, 109, 137, 58, 214, 42, 33, 157, 228, 252, 25, 157, 104, 255, 246, 162, 119, 97, 238, 110, 230, 157, 68, 130, 94, 232, 48, 149, 81, 87, 72, 16, 46, 195, 134, 120, 216, 191, 55, 202, 226, 52, 130, 146, 3, 138, 92, 161, 218, 55, 192, 16, 65, 2, 172, 8, 175, 19, 124, 7, 45, 50, 172, 35, 94, 169, 105, 164, 134, 131, 91, 168, 71, 25, 244, 176, 181, 104, 243, 47, 51, 98, 193, 159, 71, 181, 55, 250, 225, 195, 140, 143, 238, 141, 6, 207, 166, 200, 18, 1, 57, 32, 39, 11, 238, 182, 126, 111, 13, 253, 26, 24, 239, 128, 42, 191, 177, 150, 36, 180, 197, 69, 184, 250, 33, 181, 206, 191, 123, 80, 36, 185, 246, 175, 14, 215, 218, 29, 228, 240, 24, 91, 169, 179, 140, 143, 104, 248, 214, 206, 9, 227, 55, 118, 225, 60, 118, 102, 52, 24, 200, 89, 156, 115, 25, 251, 29, 250, 120, 113, 18, 220, 32, 62, 75, 201, 237, 143, 96, 239, 16, 91, 194, 32, 217, 89, 126, 228, 205, 68, 158, 32, 168, 57, 132, 133, 32, 223, 185, 107, 168, 1, 112, 193, 190, 46, 240, 3, 58, 105, 178, 151, 199, 98, 18, 223, 229, 211, 37, 154, 52, 140, 34, 201, 128, 245, 118, 42, 68, 180, 220, 34, 150, 177, 226, 180, 172, 38, 68, 237, 42, 146, 172, 171, 116, 208, 217, 95, 137, 65, 27, 63, 188, 69, 55, 121, 233, 159, 12, 24, 118, 132, 201, 66, 59, 146, 154, 44, 29, 178, 174, 204, 130, 173, 10, 40, 123, 78, 214, 91, 165, 233, 211, 209, 111, 132, 38, 92, 94, 135, 242, 202, 16, 216, 227, 104, 247, 67, 222, 105, 185, 154, 78, 100, 243, 242, 172, 154, 125, 49, 130, 169, 71, 122, 228, 34, 89, 138, 221, 191, 113, 109, 150, 145, 249, 208, 219, 127, 153, 226, 178, 196, 211, 124, 188, 57, 233, 242, 90, 239, 8, 113, 94, 245, 225, 36, 251, 4, 229, 187, 164, 135, 217, 216, 32, 157, 119, 237, 80, 127, 72, 93, 43, 242, 46, 211, 3, 191, 15, 213, 252, 166, 250, 177, 252, 74, 105, 211, 161, 16, 243, 127, 242, 196, 13, 205, 37, 69, 107, 13, 155, 253, 57, 48, 49, 100, 54, 38, 36, 87, 249, 200, 20, 40, 246, 13, 223, 61, 166, 48, 17, 39, 17, 104, 119, 0, 112, 119, 70, 4, 32, 29, 193, 79, 77, 40, 19, 68, 87, 90, 235, 38, 155, 74, 22, 47, 168, 200, 47, 120, 6, 183, 212, 38, 120, 121, 37, 54, 193, 194, 29, 112, 186, 72, 181, 18, 134, 68, 27, 82, 13, 204, 98, 181, 115, 68, 111, 15, 102, 129, 193, 143, 44, 245, 143, 82, 229, 70, 41, 123, 96, 143, 66, 203, 121, 77, 255, 193, 91, 222, 40, 83, 26, 65, 163, 39, 154, 73, 191, 11, 139, 210, 97, 249, 173, 224, 167, 38, 217, 57, 10, 177, 13, 98, 99, 164, 153, 67, 217, 125, 115, 39, 175, 195, 59, 110, 99, 1, 231, 252, 43, 36, 138, 116, 141, 22, 40, 177, 67, 83, 75, 3, 124, 83, 227, 144, 212, 38, 148, 243, 119, 134, 102, 163, 230, 176, 101, 167, 44, 160, 176, 208, 111, 170, 255, 34, 65, 105, 25, 127, 32, 31, 61, 182, 26, 239, 134, 5, 175, 147, 241, 14, 70, 3, 98, 94, 11, 19, 66, 62, 207, 146, 162, 74, 108, 1, 119, 252, 99, 50, 43, 151, 117, 140, 111, 12, 54, 249, 125, 211, 166, 8, 3, 39, 36, 83, 138, 187, 89, 110, 65, 16, 145, 70, 192, 4, 116, 77, 80, 102, 50, 196, 83, 73, 38, 165, 17, 179, 164, 69, 229, 231, 204, 147, 125, 106, 163, 39, 170, 233, 91, 228, 94, 206, 1, 39, 87, 221, 111, 193, 149, 95, 52, 255, 100, 166, 85, 7, 181, 128, 11, 216, 132, 109, 172, 172, 50, 48, 126, 150, 161, 253, 144, 66, 21, 82, 163, 76, 130, 144, 53, 227, 156, 188, 152, 183, 43, 157, 161, 97, 105, 68, 142, 47, 149, 210, 134, 81, 138, 107, 233, 113, 228, 104, 39, 183, 38, 234, 131, 60, 49, 144, 188, 55, 55, 50, 203, 99, 20, 247, 39, 177, 85, 95, 248, 37, 137, 171, 163, 29, 18, 115, 81, 95, 252, 141, 219, 247, 119, 185, 163, 1, 128, 63, 208, 175, 176, 76, 158, 40, 75, 249, 238, 236, 100, 228, 190, 215, 207, 212, 142, 10, 179, 245, 249, 172, 173, 221, 110, 167, 75, 196, 55, 146, 18, 52, 73, 110, 157, 176, 42, 169, 117, 186, 20, 127, 119, 204, 98, 255, 113, 166, 239, 45, 91, 195, 41, 59, 97, 51, 237, 31, 210, 76, 139, 163, 20, 112, 135, 89, 159, 242, 230, 197, 76, 8, 236, 169, 219, 120, 19, 200, 255, 183, 173, 19, 20, 21, 65, 90, 228, 114, 165, 118, 179, 94, 233, 209, 5, 197, 225, 152, 35, 0, 2, 154, 125, 164, 220, 197, 231, 177, 179, 181, 70, 250, 134, 109, 229, 221, 12, 234, 57, 32, 233, 37, 211, 209, 172, 213, 190, 3, 245, 3, 233, 10, 131, 196, 126, 228, 10, 98, 242, 131, 25, 223, 225, 164, 58, 88, 166, 251, 196, 87, 128, 159, 43, 118, 118, 232, 125, 189, 132, 108, 233, 144, 64, 2, 96, 225, 95, 42, 58, 103, 13, 166, 37, 113, 240, 32, 173, 61, 22, 42, 67, 125, 29, 185, 232, 184, 126, 208, 149, 190, 111, 252, 110, 80, 234, 170, 116, 62, 92, 50, 100, 213, 187, 75, 119, 71, 154, 215, 35, 153, 93, 203, 42, 134, 206, 63, 138, 73, 47, 166, 2, 132, 240, 51, 238, 84, 112, 143, 133, 96, 186, 202, 42, 134, 83, 174, 112, 240, 218, 109, 201, 4, 111, 222, 87, 40, 4, 147, 62, 208, 184, 44, 103, 87, 185, 175, 156, 95, 5, 89, 182, 4, 74, 208, 133, 179, 49, 61, 113, 84, 216, 100, 185, 239, 67, 128, 144, 243, 185, 220, 65, 183, 146, 237, 248, 116, 192, 72, 105, 240, 231, 244, 250, 2, 140, 28, 126, 104, 130, 20, 20, 194, 25, 14, 10, 34, 64, 126, 25, 160, 17, 94, 110, 113, 233, 110, 164, 112, 40, 67, 31, 211, 56, 3, 103, 188, 159, 44, 193, 118, 131, 5, 22, 157, 228, 14, 233, 196, 38, 248, 71, 37, 118, 143, 83, 156, 230, 226, 229, 12, 227, 97, 52, 188, 8, 41, 95, 212, 223, 100, 32, 8, 20, 125, 110, 190, 117, 238, 33, 237, 231, 134, 186, 49, 214, 82, 95, 39, 127, 220, 199, 157, 62, 11, 163, 34, 88, 64, 176, 83, 103, 252, 210, 195, 42, 69, 41, 137, 148, 62, 168, 89, 16, 158, 102, 88, 169, 172, 145, 247, 215, 108, 241, 65, 78, 32, 246, 209, 169, 143, 179, 102, 19, 204, 99, 160, 37, 206, 246, 159, 108, 191, 187, 41, 222, 132, 27, 186, 198, 67, 79, 190, 142, 246, 96, 18, 41, 127, 162, 19, 5, 108, 38, 226, 36, 117, 212, 174, 22, 75, 178, 116, 39, 169, 8, 240, 7, 165, 29, 18, 64, 238, 63, 230, 120, 138, 94, 154, 232, 167, 4, 180, 217, 184, 182, 240, 13, 19, 124, 19, 47, 121, 2, 71, 255, 4, 194, 82, 81, 215, 234, 153, 125, 50, 65, 71, 183, 26, 218, 103, 175, 73, 165, 43, 189, 17, 255, 171, 164, 21, 63, 233, 169, 23, 49, 35, 178, 106, 149, 238, 131, 87, 137, 222, 92, 240, 89, 62, 27, 153, 104, 161, 18, 41, 135, 25, 40, 96, 40, 237, 151, 190, 180, 67, 9, 145, 42, 96, 100, 87, 150, 129, 50, 126, 45, 129, 236, 98, 65, 190, 173, 225, 131, 76, 235, 228, 223, 226, 131, 192, 179, 226, 50, 238, 150, 33, 1, 94, 83, 186, 70, 50, 247, 140, 2, 27, 32, 71, 103, 165, 102, 61, 51, 192, 184, 69, 217, 171, 83, 146, 128, 159, 171, 34, 112, 60, 104, 137, 71, 107, 217, 91, 67, 146, 93, 142, 3, 53, 41, 162, 121, 189, 93, 221, 191, 0, 238, 145, 90, 239, 156, 18, 86, 175, 82, 8, 41, 17, 61, 173, 207, 16, 141, 226, 129, 68, 132, 245, 149, 163, 146, 173, 137, 230, 141, 71, 89, 106, 107, 74, 33, 204, 21, 74, 139, 144, 132, 112, 128, 57, 189, 27, 217, 4, 218, 218, 158, 83, 153, 13, 224, 96, 230, 129, 195, 0, 3, 34, 76, 223, 199, 0, 13, 201, 216, 186, 67, 50, 153, 81, 218, 91, 16, 59, 235, 22, 245, 229, 206, 13, 204, 57, 69, 153, 55, 249, 22, 149, 132, 165, 49, 53, 83, 10, 84, 2, 0, 116, 222, 240, 148, 202, 186, 124, 33, 213, 146, 162, 211, 214, 40, 123, 244, 151, 104, 30, 173, 12, 125, 67, 101, 36, 113, 181, 109, 197, 243, 165, 172, 116, 143, 182, 99, 251, 106, 43, 154, 65, 132, 38, 163, 231, 199, 232, 131, 63, 171, 34, 0, 4, 20, 255, 219, 136, 190, 75, 121, 234, 74, 186, 67, 119, 120, 97, 172, 135, 65, 182, 44, 166, 248, 21, 180, 64, 229, 179, 214, 89, 42, 115, 3, 37, 186, 71, 39, 224, 176, 255, 90, 210, 132, 139, 217, 15, 70, 152, 105, 132, 251, 117, 251, 28, 191, 226, 42, 79, 216, 122, 61, 88, 31, 101, 60, 10, 181, 253, 183, 179, 197, 141, 166, 223, 55, 130, 83, 82, 104, 184, 14, 142, 27, 67, 220, 249, 14, 96, 162, 132, 128, 173, 156, 13, 3, 47, 234, 247, 158, 165, 253, 3, 142, 243, 18, 211, 146, 139, 100, 165, 111, 26, 244, 102, 206, 49, 21, 79, 108, 80, 152, 34, 35, 234, 204, 118, 6, 113, 233, 156, 120, 233, 107, 250, 96, 54, 6, 225, 69, 64, 158, 124, 196, 35, 208, 39, 37, 92, 47, 59, 195, 201, 174, 106, 251, 241, 197, 24, 95, 128, 20, 175, 77, 146, 182, 126, 55, 76, 106, 71, 112, 230, 181, 13, 199, 157, 126, 228, 196, 69, 68, 226, 32, 237, 90, 60, 146, 247, 139, 137, 178, 5, 104, 27, 15, 167, 71, 190, 137, 126, 154, 9, 21, 121, 134, 84, 104, 243, 44, 185, 22, 249, 196, 64, 130, 46, 211, 183, 187, 78, 149, 84, 128, 239, 52, 22, 50, 214, 44, 17, 252, 108, 208, 238, 49, 182, 94, 61, 148, 9, 22, 175, 213, 243, 209, 55, 116, 210, 44, 46, 22, 92, 95, 102, 18, 228, 238, 249, 237, 100, 186, 103, 241, 245, 66, 0, 203, 194, 121, 184, 124, 175, 57, 127, 163, 76, 43, 25, 227, 174, 10, 38, 16, 20, 149, 69, 128, 68, 11, 195, 10, 10, 20, 164, 115, 247, 98, 238, 76, 241, 142, 50, 114, 170, 175, 28, 155, 21, 36, 80, 6, 19, 149, 116, 68, 60, 1, 254, 52, 45, 147, 82, 197, 254, 1, 30, 178, 56, 161, 22, 132, 60, 151, 151, 251, 215, 57, 62, 122, 220, 7, 189, 91, 213, 186, 76, 92, 15, 84, 165, 63, 112, 24, 36, 62, 198, 237, 184, 127, 155, 22, 8, 124, 216, 185, 237, 16, 48, 77, 33, 203, 174, 135, 30, 24, 222, 93, 120, 80, 52, 63, 64, 223, 63, 40, 208, 31, 148, 170, 230, 214, 251, 39, 250, 32, 151, 13, 106, 247, 11, 42, 55, 110, 121, 255, 115, 200, 167, 157, 12, 59, 79, 47, 203, 57, 178, 18, 150, 94, 36, 224, 48, 249, 129, 178, 70, 31, 110, 79, 179, 30, 216, 242, 84, 216, 162, 57, 137, 66, 61, 0, 226, 72, 183, 240, 171, 52, 254, 127, 162, 45, 163, 72, 251, 42, 252, 188, 12, 145, 167, 32, 48, 227, 3, 34, 107, 209, 90, 227, 159, 25, 58, 192, 232, 156, 146, 68, 68, 6, 106, 140, 206, 25, 65, 251, 104, 90, 120, 181, 85, 89, 119, 221, 19, 106, 134, 216, 167, 231, 51, 141, 36, 228, 160, 12, 175, 67, 93, 19, 18, 132, 92, 43, 87, 116, 111, 169, 145, 11, 56, 119, 174, 30, 195, 215, 72, 31, 174, 161, 31, 95, 134, 101, 182, 184, 118, 20, 132, 111, 182, 73, 115, 214, 201, 169, 235, 238, 228, 154, 130, 86, 180, 108, 241, 184, 37, 252, 245, 128, 196, 29, 49, 67, 49, 56, 53, 62, 84, 66, 225, 0, 10, 164, 3, 16, 71, 194, 187, 40, 37, 194, 237, 236, 190, 143, 79, 232, 153, 16, 33, 51, 170, 116, 221, 31, 118, 52, 240, 35, 80, 111, 80, 97, 5, 40, 80, 184, 247, 79, 79, 197, 177, 215, 23, 77, 48, 129, 64, 83, 187, 236, 207, 162, 89, 43, 158, 84, 219, 213, 141, 125, 116, 183, 20, 109, 57, 23, 23, 10, 152, 173, 114, 255, 175, 154, 88, 11, 128, 18, 108, 47, 9, 147, 85, 195, 42, 91, 119, 90, 23, 24, 4, 92, 255, 91, 167, 153, 141, 79, 86, 128, 47, 113, 239, 160, 21, 190, 209, 120, 26, 98, 76, 94, 206, 55, 22, 185, 28, 137, 138, 144, 99, 187, 122, 188, 144, 54, 128, 169, 69, 40, 114, 117, 13, 108, 12, 22, 99, 169, 227, 231, 203, 121, 19, 73, 228, 243, 182, 71, 208, 48, 186, 186, 1, 190, 34, 11, 249, 151, 68, 197, 237, 222, 38, 126, 56, 249, 213, 245, 127, 101, 93, 112, 29, 180, 121, 37, 147, 189, 61, 120, 138, 133, 203, 66, 6, 128, 61, 50, 32, 229, 235, 111, 128, 125, 249, 220, 110, 205, 241, 233, 33, 250, 101, 58, 68, 230, 73, 188, 217, 111, 64, 172, 156, 58, 229, 164, 107, 27, 30, 125, 106, 121, 246, 110, 65, 78, 83, 100, 108, 12, 141, 31, 78, 177, 142, 254, 18, 176, 196, 99, 0, 202, 218, 251, 137, 89, 113, 221, 194, 33, 127, 186, 125, 45, 71, 2, 76, 244, 105, 97, 91, 138, 88, 119, 171, 231, 254, 37, 248, 43, 35, 189, 176, 51, 66, 69, 142, 37, 139, 182, 45, 160, 218, 239, 228, 205, 144, 250, 216, 39, 74, 97, 165, 150, 16, 136, 144, 255, 142, 0, 182, 200, 232, 80, 24, 137, 215, 22, 118, 153, 105, 181, 42, 6, 9, 134, 252, 16, 8, 126, 84, 34, 29, 129, 40, 162, 161, 10, 151, 72, 148, 150, 214, 26, 158, 145, 72, 100, 250, 251, 44, 109, 39, 220, 2, 246, 84, 239, 2, 86, 47, 220, 19, 228, 162, 80, 226, 253, 223, 103, 142, 154, 55, 231, 230, 241, 121, 5, 36, 61, 240, 77, 196, 147, 126, 11, 198, 232, 146, 92, 64, 76, 83, 228, 74, 173, 11, 178, 36, 99, 185, 32, 60, 60, 120, 14, 128, 142, 57, 55, 63, 249, 60, 126, 202, 249, 235, 10, 254, 109, 99, 196, 229, 239, 10, 25, 229, 103, 181, 89, 241, 216, 203, 60, 12, 120, 174, 158, 106, 176, 241, 192, 113, 128, 202, 126, 42, 203, 110, 116, 245, 168, 167, 161, 239, 155, 203, 4, 243, 26, 61, 68, 34, 9, 58, 47, 221, 165, 5, 109, 43, 72, 66, 20, 12, 114, 163, 234, 214, 105, 163, 155, 214, 82, 203, 10, 36, 253, 90, 50, 64, 174, 17, 26, 211, 68, 167, 221, 149, 90, 253, 217, 109, 38, 180, 17, 79, 202, 130, 140, 151, 33, 233, 122, 244, 203, 207, 173, 213, 120, 249, 188, 242, 195, 160, 118, 13, 19, 75, 241, 86, 163, 41, 218, 58, 43, 138, 239, 2, 36, 155, 191, 116, 122, 133, 215, 144, 210, 166, 12, 250, 197, 84, 150, 236, 105, 91, 71, 117, 250, 100, 230, 236, 72, 94, 100, 190, 193, 82, 149, 133, 221, 49, 237, 10, 38, 208, 181, 214, 11, 108, 133, 99, 179, 30, 213, 47, 147, 120, 123, 79, 77, 15, 183, 111, 77, 121, 28, 217, 216, 113, 46, 86, 166, 229, 191, 76, 201, 165, 191, 37, 234, 32, 41, 130, 74, 148, 85, 124, 104, 197, 125, 61, 130, 145, 78, 154, 227, 137, 201, 9, 37, 6, 253, 233, 0, 221, 128, 18, 38, 149, 234, 118, 229, 160, 2, 162, 147, 13, 156, 71, 184, 48, 20, 49, 89, 172, 217, 27, 141, 235, 0, 16, 218, 222, 227, 57, 186, 171, 51, 190, 82, 244, 32, 247, 54, 52, 190, 172, 77, 149, 178, 238, 174, 13, 24, 31, 154, 170, 98, 127, 233, 211, 87, 83, 166, 157, 52, 223, 149, 183, 80, 153, 100, 218, 114, 31, 207, 119, 4, 178, 38, 129, 35, 220, 24, 94, 166, 97, 179, 27, 53, 46, 32, 62, 2, 211, 146, 95, 230, 208, 166, 24, 47, 200, 190, 209, 120, 253, 158, 172, 153, 119, 242, 142, 214, 46, 111, 97, 153, 21, 20, 64, 52, 165, 230, 192, 82, 54, 152, 244, 207, 88, 23, 116, 24, 53, 84, 5, 228, 66, 229, 77, 3, 138, 161, 228, 44, 250, 226, 88, 201, 199, 142, 212, 109, 124, 154, 111, 153, 113, 221, 88, 212, 80, 192, 135, 159, 32, 80, 66, 115, 87, 206, 176, 240, 74, 33, 111, 240, 76, 213, 15, 240, 246, 79, 23, 14, 64, 96, 111, 180, 18, 235, 183, 109, 229, 129, 16, 195, 212, 10, 245, 128, 61, 157, 230, 144, 183, 102, 180, 87, 97, 50, 51, 54, 56, 86, 185, 161, 101, 200, 149, 151, 178, 231, 153, 237, 29, 7, 137, 168, 118, 164, 49, 48, 86, 185, 41, 42, 115, 10, 36, 235, 125, 252, 22, 41, 41, 220, 166, 226, 43, 154, 83, 233, 156, 252, 203, 179, 131, 192, 213, 118, 144, 103, 0, 103, 245, 88, 177, 146, 13, 252, 50, 174, 247, 250, 221, 165, 8, 61, 175, 201, 138, 97, 157, 232, 221, 146, 35, 111, 228, 79, 97, 101, 154, 88, 46, 119, 139, 198, 134, 63, 59, 254, 246, 78, 224, 193, 191, 79, 247, 178, 214, 44, 36, 227, 22, 152, 19, 99, 64, 177, 224, 53, 209, 160, 44, 253, 12, 63, 33, 103, 199, 4, 228, 194, 56, 86, 62, 26, 6, 225, 172, 219, 217, 116, 162, 110, 85, 47, 110, 3, 108, 19, 138, 141, 91, 13, 176, 220, 138, 93, 105, 169, 7, 134, 134, 72, 82, 54, 153, 37, 49, 45, 188, 4, 255, 137, 95, 84, 56, 216, 10, 253, 52, 153, 144, 189, 105, 38, 189, 100, 211, 57, 145, 222, 42, 163, 66, 153, 194, 63, 20, 24, 120, 204, 215, 21, 225, 90, 236, 157, 163, 119, 58, 153, 207, 232, 25, 82, 135, 3, 106, 112, 142, 7, 129, 216, 221, 225, 61, 190, 167, 50, 25, 22, 50, 182, 83, 88, 86, 54, 53, 176, 237, 79, 178, 92, 105, 166, 59, 215, 59, 35, 247, 186, 250, 160, 32, 20, 141, 13, 205, 237, 137, 188, 35, 11, 126, 13, 85, 16, 83, 146, 215, 189, 136, 218, 84, 208, 80, 246, 251, 224, 100, 61, 167, 185, 144, 103, 137, 109, 223, 147, 172, 81, 110, 156, 70, 32, 32, 199, 32, 248, 6, 121, 33, 157, 199, 127, 94, 144, 164, 125, 78, 3, 152, 35, 183, 229, 71, 26, 200, 205, 140, 192, 100, 183, 136, 128, 94, 75, 198, 153, 57, 44, 30, 154, 235, 134, 25, 188, 17, 139, 176, 228, 243, 246, 31, 181, 5, 83, 233, 180, 255, 175, 242, 181, 16, 250, 97, 107, 122, 255, 127, 12, 54, 142, 166, 213, 13, 186, 41, 233, 0, 212, 208, 19, 185, 186, 155, 251, 140, 91, 176, 149, 246, 131, 38, 133, 151, 158, 52, 100, 130, 227, 79, 156, 219, 227, 221, 65, 105, 203, 51, 220, 75, 229, 55, 47, 113, 177, 31, 39, 172, 229, 227, 165, 203, 114, 57, 161, 186, 199, 177, 121, 153, 212, 243, 232, 97, 66, 133, 185, 159, 25, 110, 9, 234, 9, 201, 168, 209, 63, 213, 160, 103, 47, 169, 33, 215, 106, 48, 134, 96, 224, 232, 210, 214, 55, 50, 233, 208, 140, 233, 250, 90, 111, 14, 44, 96, 5, 254, 124, 132, 118, 74, 179, 101, 20, 188, 58, 38, 82, 221, 181, 158, 76, 47, 166, 39, 18, 100, 223, 205, 126, 14, 187, 46, 210, 157, 205, 88, 227, 159, 171, 170, 210, 45, 28, 80, 84, 34, 15, 250, 14, 159, 157, 75, 67, 35, 109, 57, 220, 156, 218, 124, 7, 59, 154, 196, 255, 64, 22, 166, 58, 87, 255, 70, 78, 130, 53, 56, 111, 253, 15, 224, 10, 238, 184, 91, 216, 221, 41, 66, 66, 35, 193, 221, 83, 162, 246, 111, 30, 114, 249, 60, 147, 147, 40, 209, 97, 241, 189, 28, 92, 139, 203, 253, 62, 158, 37, 49, 106, 202, 151, 123, 7, 39, 56, 168, 253, 155, 105, 100, 153, 113, 255, 80, 14, 66, 127, 73, 237, 115, 86, 207, 177, 166, 208, 237, 248, 165, 228, 240, 16, 233, 166, 161, 73, 7, 114, 167, 20, 75, 25, 203, 15, 187, 20, 164, 21, 100, 76, 60, 242, 71, 120, 120, 216, 10, 142, 158, 0, 190, 236, 59, 64, 79, 81, 47, 86, 235, 41, 91, 133, 2, 132, 189, 250, 116, 60, 235, 112, 235, 148, 74, 218, 236, 101, 15, 189, 253, 136, 252, 204, 212, 15, 86, 232, 231, 43, 37, 217, 132, 85, 161, 78, 253, 38, 242, 5, 51, 201, 30, 96, 100, 184, 144, 160, 53, 38, 221, 222, 232, 214, 154, 251, 248, 84, 180, 92, 237, 161, 111, 254, 78, 151, 229, 91, 161, 122, 187, 75, 132, 156, 134, 211, 149, 162, 164, 165, 13, 164, 188, 243, 110, 167, 99, 20, 45, 155, 150, 230, 213, 71, 96, 137, 167, 3, 230, 157, 176, 42, 180, 60, 231, 91, 95, 242, 244, 112, 44, 139, 116, 154, 49, 128, 234, 29, 87, 83, 26, 164, 6, 237, 57, 118, 64, 223, 133, 173, 76, 131, 30, 218, 175, 130, 149, 93, 222, 164, 4, 198, 151, 98, 123, 248, 110, 85, 146, 226, 2, 180, 154, 52, 0, 54, 205, 31, 167, 26, 233, 36, 179, 23, 20, 194, 56, 104, 168, 213, 103, 13, 243, 255, 133, 50, 166, 108, 89, 47, 51, 49, 51, 183, 26, 34, 194, 60, 108, 214, 214, 206, 40, 197, 207, 69, 43, 52, 7, 219, 171, 54, 25, 207, 124, 84, 52, 170, 222, 145, 175, 196, 94, 109, 175, 103, 117, 137, 187, 221, 250, 177, 116, 171, 15, 57, 110, 234, 222, 233, 132, 29, 97, 178, 205, 140, 199, 17, 135, 217, 52, 92, 57, 23, 190, 105, 243, 63, 243, 136, 15, 82, 34, 233, 230, 128, 137, 96, 153, 29, 42, 135, 232, 123, 37, 28, 96, 11, 102, 63, 190, 213, 126, 88, 2, 170, 170, 185, 54, 199, 121, 223, 124, 122, 182, 73, 74, 243, 244, 110, 83, 4, 84, 190, 108, 145, 28, 229, 114, 33, 114, 177, 53, 76, 152, 247, 155, 132, 96, 125, 124, 70, 162, 222, 82, 205, 141, 40, 104, 16, 46, 42, 98, 65, 45, 38, 53, 225, 243, 232, 9, 72, 200, 83, 11, 228, 130, 232, 151, 53, 44, 226, 91, 161, 197, 215, 5, 42, 211, 185, 230, 65, 3, 90, 227, 109, 96, 23, 127, 76, 193, 186, 18, 88, 156, 202, 220, 68, 110, 0, 150, 205, 15, 192, 41, 81, 47, 255, 228, 116, 219, 42, 236, 251, 5, 46, 25, 245, 10, 36, 183, 185, 246, 54, 43, 184, 189, 252, 122, 32, 176, 160, 128, 35, 133, 252, 206, 30, 49, 184, 2, 70, 121, 211, 249, 90, 212, 103, 182, 166, 31, 28, 91, 182, 28, 155, 141, 182, 111, 212, 109, 148, 240, 237, 236, 75, 142, 39, 238, 241, 131, 57, 17, 172, 234, 209, 53, 11, 3, 24, 199, 196, 249, 113, 167, 219, 71, 224, 162, 112, 175, 109, 136, 20, 60, 34, 223, 255, 126, 161, 33, 48, 232, 76, 89, 132, 157, 248, 10, 48, 100, 62, 239, 210, 243, 213, 113, 71, 64, 148, 224, 5, 168, 216, 225, 76, 255, 239, 87, 58, 252, 189, 17, 80, 122, 5, 70, 116, 64, 222, 45, 136, 125, 201, 61, 194, 97, 96, 136, 133, 14, 250, 43, 50, 251, 74, 83, 145, 244, 151, 43, 167, 86, 255, 71, 148, 207, 161, 127, 243, 80, 26, 218, 22, 71, 167, 25, 61, 232, 207, 100, 248, 229, 112, 197, 54, 221, 141, 163, 139, 131, 125, 70, 126, 71, 151, 197, 45, 189, 152, 54, 100, 224, 67, 64, 144, 44, 243, 51, 235, 225, 8, 47, 42, 40, 61, 111, 200, 193, 98, 226, 87, 200, 213, 159, 154, 139, 49, 250, 21, 48, 37, 125, 187, 86, 52, 234, 204, 150, 47, 53, 36, 89, 236, 34, 143, 200, 24, 243, 54, 207, 145, 143, 37, 179, 117, 63, 105, 163, 165, 132, 21, 185, 50, 48, 123, 250, 184, 22, 196, 104, 20, 193, 223, 43, 143, 237, 13, 120, 156, 142, 56, 222, 144, 137, 238, 3, 140, 180, 150, 72, 140, 33, 173, 180, 42, 143, 60, 238, 139, 57, 244, 130, 35, 125, 228, 20, 171, 172, 18, 156, 59, 1, 119, 77, 78, 63, 207, 118, 92, 49, 72, 90, 39, 54, 106, 159, 235, 64, 34, 59, 92, 24, 74, 18, 228, 144, 23, 223, 15, 157, 203, 151, 139, 100, 168, 224, 193, 153, 157, 118, 28, 161, 33, 253, 128, 235, 84, 162, 190, 181, 249, 158, 215, 19, 170, 54, 152, 230, 20, 118, 16, 205, 38, 138, 239, 22, 202, 51, 216, 49, 180, 193, 3, 124, 99, 45, 29, 62, 164, 29, 100, 210, 254, 66, 243, 194, 216, 119, 106, 128, 182, 151, 189, 42, 120, 159, 13, 107, 130, 75, 68, 73, 6, 101, 16, 35, 160, 183, 215, 10, 166, 129, 0, 138, 128, 134, 23, 167, 134, 93, 126, 51, 7, 161, 84, 92, 171, 173, 74, 242, 62, 68, 46, 132, 126, 179, 115, 53, 94, 123, 52, 84, 39, 255, 253, 87, 79, 10, 36, 125, 95, 138, 142, 134, 26, 175, 170, 105, 95, 31, 153, 245, 193, 169, 181, 2, 227, 119, 125, 59, 2, 13, 216, 92, 171, 243, 102, 109, 142, 146, 151, 0, 176, 20, 134, 164, 158, 225, 15, 36, 100, 175, 205, 234, 237, 60, 18, 146, 55, 111, 168, 224, 253, 117, 71, 221, 29, 143, 147, 223, 171, 19, 133, 141, 56, 128, 161, 176, 89, 175, 20, 194, 200, 25, 104, 65, 153, 128, 12, 183, 185, 226, 215], - [181, 98, 158, 111, 220, 168, 9, 170, 2, 26, 108, 153, 234, 168, 180, 223, 140, 163, 234, 7, 235, 72, 63, 101, 14, 195, 179, 144, 9, 13, 63, 37, 25, 7, 102, 87, 52, 214, 124, 46, 202, 2, 120, 60, 107, 15, 5, 165, 138, 76, 30, 201, 8, 68, 142, 108, 236, 142, 148, 150, 201, 169, 177, 115, 8, 116, 57, 69, 173, 191, 134, 235, 223, 250, 244, 23, 83, 162, 196, 188, 221, 223, 10, 92, 52, 184, 157, 59, 94, 72, 2, 159, 175, 60, 14, 43, 25, 251, 233, 203, 108, 97, 164, 195, 31, 97, 151, 90, 249, 214, 173, 120, 254, 193, 194, 211, 22, 195, 214, 186, 141, 183, 146, 13, 146, 173, 103, 176, 141, 14, 173, 202, 50, 231, 245, 92, 124, 119, 22, 85, 98, 17, 58, 99, 250, 93, 133, 78, 139, 217, 200, 76, 193, 67, 181, 73, 234, 161, 35, 139, 119, 62, 236, 210, 189, 175, 23, 189, 153, 111, 33, 21, 51, 191, 125, 194, 181, 249, 181, 149, 105, 47, 0, 213, 58, 170, 254, 147, 157, 224, 204, 93, 242, 128, 11, 217, 252, 187, 157, 194, 43, 43, 68, 151, 185, 136, 121, 251, 171, 165, 74, 35, 222, 28, 197, 227, 180, 66, 65, 44, 158, 253, 176, 90, 15, 240, 58, 171, 74, 43, 181, 142, 141, 124, 53, 35, 184, 25, 179, 84, 156, 163, 240, 245, 119, 31, 167, 228, 164, 45, 133, 195, 111, 113, 46, 122, 123, 30, 108, 160, 152, 126, 186, 231, 197, 31, 97, 46, 253, 245, 15, 87, 185, 66, 218, 105, 207, 206, 24, 30, 249, 38, 82, 58, 175, 240, 221, 165, 28, 46, 123, 96, 54, 91, 110, 100, 103, 150, 242, 165, 240, 224, 103, 69, 251, 163, 197, 61, 140, 92, 31, 239, 175, 101, 3, 43, 20, 185, 65, 130, 239, 87, 40, 30, 80, 196, 156, 221, 68, 148, 243, 190, 23, 96, 213, 101, 255, 89, 153, 51, 217, 43, 100, 135, 81, 71, 31, 112, 216, 34, 122, 189, 254, 255, 58, 166, 166, 91, 24, 233, 91, 170, 143, 70, 147, 64, 253, 207, 37, 92, 59, 49, 130, 0, 172, 80, 143, 30, 68, 163, 207, 30, 12, 159, 38, 238, 246, 108, 211, 83, 206, 21, 80, 110, 5, 87, 61, 225, 226, 237, 157, 39, 6, 242, 12, 15, 167, 217, 225, 163, 254, 81, 255, 130, 81, 192, 104, 62, 223, 229, 166, 71, 4, 208, 197, 71, 174, 199, 60, 218, 81, 172, 157, 232, 121, 22, 190, 151, 193, 210, 136, 233, 192, 222, 225, 47, 146, 53, 101, 62, 220, 52, 123, 226, 247, 177, 168, 87, 0, 191, 238, 53, 47, 216, 66, 203, 157, 135, 58, 13, 174, 8, 76, 164, 214, 207, 60, 96, 13, 79, 250, 167, 13, 163, 83, 115, 132, 26, 252, 146, 218, 16, 7, 51, 84, 186, 126, 66, 230, 240, 211, 119, 11, 149, 253, 171, 217, 153, 185, 156, 61, 144, 0, 22, 125, 185, 115, 151, 70, 194, 193, 147, 148, 50, 182, 5, 35, 155, 161, 3, 40, 97, 209, 0, 127, 39, 34, 94, 189, 254, 126, 8, 160, 252, 83, 222, 193, 165, 245, 61, 220, 45, 169, 244, 4, 87, 62, 128, 82, 111, 71, 84, 118, 57, 119, 172, 195, 218, 179, 49, 220, 185, 243, 147, 17, 170, 28, 120, 168, 18, 136, 197, 166, 35, 223, 75, 139, 124, 25, 189, 192, 136, 92, 67, 30, 206, 71, 177, 20, 73, 107, 91, 27, 219, 233, 172, 152, 248, 54, 36, 81, 47, 166, 122, 63, 152, 249, 0, 157, 177, 215, 127, 192, 233, 155, 29, 184, 2, 194, 130, 151, 222, 186, 106, 188, 65, 236, 179, 77, 192, 62, 7, 155, 234, 91, 216, 115, 4, 124, 67, 88, 198, 24, 207, 191, 102, 51, 75, 33, 120, 143, 192, 189, 235, 85, 152, 173, 203, 79, 175, 252, 114, 60, 193, 116, 235, 90, 170, 95, 186, 119, 124, 189, 91, 198, 255, 99, 109, 37, 63, 204, 227, 99, 13, 119, 210, 22, 241, 153, 165, 152, 96, 165, 149, 34, 52, 59, 182, 46, 195, 110, 129, 253, 18, 241, 125, 117, 245, 70, 123, 2, 15, 255, 7, 208, 241, 51, 109, 228, 55, 235, 108, 49, 7, 117, 235, 106, 111, 29, 100, 25, 210, 64, 110, 225, 205, 174, 228, 84, 253, 243, 127, 52, 63, 57, 233, 161, 148, 28, 16, 175, 155, 130, 154, 213, 145, 108, 101, 161, 112, 164, 36, 77, 121, 148, 60, 202, 106, 119, 119, 179, 208, 159, 68, 89, 169, 47, 235, 88, 251, 56, 73, 221, 124, 204, 29, 111, 149, 176, 120, 65, 16, 250, 253, 70, 16, 146, 24, 92, 132, 76, 253, 2, 4, 73, 10, 227, 238, 32, 227, 87, 249, 111, 219, 182, 202, 203, 44, 7, 44, 154, 234, 10, 15, 251, 211, 68, 35, 70, 114, 124, 169, 87, 168, 225, 18, 218, 59, 156, 226, 76, 73, 65, 137, 59, 166, 239, 17, 67, 26, 212, 198, 106, 140, 211, 157, 145, 131, 218, 236, 54, 8, 81, 177, 40, 130, 155, 9, 194, 133, 13, 198, 25, 49, 17, 245, 226, 185, 116, 110, 19, 17, 114, 209, 30, 14, 184, 101, 196, 43, 184, 116, 220, 88, 161, 122, 66, 78, 51, 63, 227, 127, 113, 181, 35, 197, 209, 62, 55, 172, 136, 40, 126, 194, 86, 46, 165, 94, 205, 113, 253, 239, 138, 14, 8, 236, 14, 179, 33, 207, 226, 198, 236, 47, 173, 5, 180, 185, 138, 134, 201, 216, 75, 103, 82, 67, 240, 0, 13, 88, 28, 148, 236, 82, 138, 227, 121, 160, 62, 7, 159, 177, 212, 25, 246, 139, 206, 228, 83, 55, 126, 243, 129, 224, 3, 179, 115, 4, 227, 129, 2, 158, 183, 228, 243, 167, 5, 61, 84, 73, 41, 65, 78, 32, 136, 125, 187, 172, 128, 64, 99, 162, 132, 203, 51, 35, 71, 185, 228, 46, 152, 20, 255, 246, 120, 83, 196, 233, 224, 182, 111, 15, 253, 179, 9, 168, 150, 53, 189, 3, 9, 140, 188, 165, 14, 99, 216, 148, 119, 177, 81, 77, 197, 32, 18, 64, 3, 6, 237, 212, 19, 198, 46, 156, 124, 147, 72, 99, 184, 162, 162, 209, 64, 147, 48, 89, 102, 72, 62, 3, 108, 173, 165, 162, 151, 44, 160, 59, 2, 198, 47, 242, 57, 100, 191, 71, 198, 101, 111, 29, 250, 249, 57, 172, 80, 152, 187, 164, 52, 239, 238, 0, 91, 184, 25, 85, 30, 101, 249, 172, 14, 170, 175, 212, 91, 239, 158, 249, 9, 41, 74, 140, 53, 4, 236, 217, 183, 81, 134, 56, 167, 32, 168, 87, 55, 13, 58, 22, 52, 127, 207, 248, 17, 138, 242, 125, 114, 180, 31, 86, 82, 84, 185, 164, 228, 208, 41, 202, 93, 70, 26, 247, 119, 94, 69, 43, 102, 157, 7, 204, 48, 124, 123, 35, 172, 84, 113, 142, 2, 88, 149, 83, 146, 232, 89, 149, 80, 219, 92, 161, 214, 94, 9, 178, 129, 118, 241, 63, 117, 233, 50, 186, 45, 228, 48, 117, 211, 85, 103, 248, 222, 118, 98, 114, 255, 219, 207, 76, 98, 210, 186, 108, 72, 207, 195, 201, 139, 82, 86, 202, 144, 215, 243, 243, 226, 91, 239, 140, 181, 5, 2, 16, 201, 107, 66, 146, 122, 114, 16, 250, 153, 54, 153, 171, 120, 247, 129, 125, 23, 162, 230, 61, 61, 210, 48, 65, 241, 101, 17, 12, 163, 124, 110, 121, 158, 75, 161, 53, 48, 95, 48, 150, 35, 63, 35, 145, 73, 188, 197, 17, 1, 221, 59, 92, 206, 138, 135, 218, 39, 133, 45, 217, 146, 195, 165, 136, 79, 252, 111, 152, 182, 222, 255, 29, 174, 33, 161, 94, 195, 36, 71, 169, 193, 203, 156, 248, 198, 223, 70, 85, 178, 157, 185, 252, 24, 117, 106, 73, 205, 156, 226, 149, 122, 26, 21, 7, 84, 215, 213, 240, 174, 9, 22, 28, 115, 207, 246, 12, 176, 15, 189, 199, 92, 193, 245, 150, 37, 148, 98, 239, 147, 248, 213, 189, 79, 228, 86, 11, 3, 250, 16, 48, 205, 175, 205, 8, 110, 98, 93, 254, 84, 83, 167, 152, 170, 162, 97, 124, 225, 28, 95, 85, 100, 239, 101, 190, 228, 234, 187, 198, 3, 77, 209, 244, 130, 135, 225, 62, 178, 24, 244, 198, 50, 239, 14, 144, 49, 231, 191, 50, 22, 212, 169, 77, 215, 251, 91, 144, 34, 38, 3, 207, 121, 128, 108, 60, 55, 23, 51, 26, 182, 175, 247, 23, 159, 2, 224, 174, 175, 82, 85, 234, 152, 222, 123, 223, 22, 107, 183, 29, 168, 231, 224, 110, 112, 9, 33, 199, 137, 227, 183, 204, 42, 93, 217, 43, 107, 178, 139, 2, 0, 27, 110, 172, 163, 203, 222, 247, 150, 239, 239, 132, 167, 64, 236, 241, 8, 38, 179, 108, 188, 231, 167, 160, 205, 7, 12, 32, 166, 134, 183, 254, 130, 124, 20, 129, 118, 115, 79, 136, 92, 206, 175, 253, 198, 255, 244, 235, 203, 107, 172, 218, 117, 212, 222, 178, 76, 108, 154, 226, 85, 99, 83, 100, 134, 15, 200, 171, 47, 13, 252, 76, 51, 224, 166, 184, 13, 132, 119, 9, 90, 28, 1, 90, 164, 171, 234, 219, 243, 72, 140, 154, 86, 204, 10, 23, 234, 230, 72, 213, 29, 205, 227, 94, 253, 22, 185, 186, 61, 85, 115, 223, 62, 188, 151, 128, 88, 90, 204, 66, 211, 185, 7, 100, 89, 120, 239, 183, 11, 27, 47, 104, 157, 38, 248, 7, 206, 90, 130, 235, 213, 165, 87, 114, 126, 88, 173, 105, 181, 135, 89, 244, 13, 135, 135, 95, 99, 181, 237, 226, 231, 111, 186, 58, 119, 186, 26, 229, 22, 160, 24, 212, 249, 3, 86, 55, 238, 98, 171, 15, 24, 108, 93, 196, 242, 30, 101, 154, 39, 13, 81, 103, 234, 42, 74, 39, 49, 11, 37, 240, 12, 2, 125, 171, 31, 21, 126, 116, 106, 30, 175, 126, 136, 180, 15, 116, 191, 41, 52, 64, 199, 80, 245, 255, 71, 87, 191, 75, 220, 2, 122, 222, 20, 25, 43, 17, 104, 201, 91, 210, 107, 49, 157, 169, 131, 229, 231, 34, 141, 80, 55, 220, 251, 55, 33, 237, 160, 187, 227, 63, 197, 80, 188, 200, 24, 242, 87, 115, 29, 134, 239, 1, 38, 191, 230, 23, 208, 63, 100, 203, 247, 26, 174, 137, 170, 197, 104, 0, 191, 49, 134, 27, 146, 1, 57, 210, 244, 150, 214, 173, 164, 169, 62, 182, 237, 74, 29, 233, 4, 190, 5, 125, 89, 212, 195, 148, 95, 211, 216, 41, 77, 170, 42, 146, 142, 58, 131, 69, 181, 19, 43, 152, 174, 220, 70, 2, 144, 77, 140, 171, 49, 115, 25, 54, 157, 226, 193, 73, 206, 198, 156, 154, 3, 200, 113, 29, 92, 27, 243, 184, 95, 107, 225, 153, 69, 136, 13, 2, 149, 53, 70, 93, 151, 34, 123, 107, 161, 216, 160, 113, 50, 39, 198, 48, 12, 177, 219, 109, 8, 178, 1, 17, 8, 41, 196, 173, 111, 198, 16, 214, 18, 13, 194, 120, 160, 100, 112, 154, 169, 143, 3, 8, 38, 219, 255, 217, 166, 55, 129, 223, 85, 58, 232, 229, 91, 183, 196, 133, 164, 30, 131, 129, 117, 238, 35, 110, 39, 64, 68, 62, 129, 203, 8, 190, 109, 35, 182, 28, 110, 181, 63, 40, 82, 172, 97, 13, 120, 77, 209, 165, 182, 89, 211, 88, 73, 112, 130, 210, 230, 244, 198, 12, 199, 201, 105, 39, 56, 85, 97, 212, 12, 207, 208, 146, 249, 196, 250, 233, 212, 65, 16, 14, 199, 186, 168, 87, 178, 244, 182, 83, 5, 207, 121, 146, 113, 3, 106, 178, 22, 192, 35, 153, 215, 173, 24, 85, 199, 245, 41, 232, 74, 112, 100, 82, 183, 236, 178, 121, 129, 8, 174, 95, 134, 64, 29, 215, 109, 112, 236, 48, 187, 127, 85, 93, 95, 101, 96, 97, 47, 36, 142, 63, 197, 182, 62, 198, 12, 105, 188, 41, 209, 112, 34, 22, 160, 125, 24, 8, 36, 32, 213, 232, 175, 36, 107, 205, 193, 113, 189, 217, 140, 67, 204, 90, 45, 30, 81, 225, 168, 49, 199, 246, 27, 29, 11, 15, 244, 95, 134, 238, 237, 157, 1, 235, 36, 138, 55, 203, 162, 234, 173, 93, 109, 123, 24, 6, 133, 192, 228, 97, 169, 22, 121, 125, 37, 216, 146, 191, 73, 55, 226, 253, 59, 50, 243, 254, 80, 7, 255, 108, 100, 125, 123, 50, 0, 156, 37, 47, 114, 75, 174, 190, 60, 97, 12, 183, 196, 156, 228, 20, 55, 194, 80, 212, 55, 211, 215, 67, 196, 8, 247, 233, 56, 86, 24, 118, 13, 158, 157, 71, 225, 113, 34, 112, 175, 134, 155, 59, 86, 171, 119, 249, 46, 202, 239, 34, 135, 213, 4, 71, 102, 178, 25, 167, 34, 224, 19, 192, 190, 28, 234, 14, 106, 105, 180, 251, 124, 182, 180, 113, 137, 116, 217, 137, 207, 123, 190, 15, 79, 61, 184, 86, 238, 25, 50, 111, 251, 239, 245, 114, 217, 226, 199, 106, 51, 55, 189, 13, 234, 186, 215, 106, 94, 181, 196, 91, 146, 100, 235, 166, 167, 234, 134, 7, 64, 13, 6, 111, 61, 119, 127, 32, 26, 160, 82, 177, 249, 70, 239, 7, 103, 56, 38, 85, 96, 62, 100, 61, 23, 152, 239, 31, 117, 85, 223, 212, 184, 47, 55, 4, 110, 170, 91, 119, 90, 215, 86, 166, 105, 103, 183, 133, 9, 42, 30, 167, 60, 28, 90, 125, 3, 45, 226, 225, 141, 207, 144, 105, 207, 150, 198, 14, 241, 110, 75, 20, 59, 217, 162, 188, 90, 204, 133, 234, 191, 41, 172, 118, 60, 132, 143, 231, 153, 245, 250, 160, 157, 179, 105, 232, 204, 231, 114, 133, 73, 30, 2, 8, 31, 62, 178, 225, 255, 162, 22, 184, 210, 247, 220, 146, 107, 225, 132, 149, 78, 190, 239, 33, 99, 91, 204, 60, 22, 101, 237, 60, 76, 109, 218, 60, 136, 33, 180, 31, 183, 198, 103, 204, 203, 110, 207, 150, 34, 86, 230, 17, 87, 171, 47, 50, 86, 102, 226, 119, 130, 239, 65, 206, 36, 160, 176, 64, 101, 166, 220, 193, 132, 100, 214, 163, 133, 70, 168, 200, 79, 48, 252, 214, 56, 145, 248, 253, 64, 28, 240, 161, 169, 65, 75, 41, 110, 95, 181, 108, 119, 51, 241, 55, 250, 143, 47, 68, 121, 251, 253, 175, 233, 106, 46, 193, 249, 101, 193, 82, 9, 251, 48, 211, 90, 171, 251, 174, 38, 186, 63, 235, 209, 77, 166, 41, 91, 51, 91, 118, 10, 142, 190, 208, 221, 93, 183, 198, 205, 241, 84, 71, 188, 21, 30, 54, 188, 253, 146, 135, 198, 218, 29, 179, 217, 70, 194, 46, 177, 164, 21, 5, 234, 125, 64, 215, 104, 148, 116, 8, 140, 201, 58, 91, 86, 71, 43, 72, 101, 202, 148, 151, 119, 185, 90, 127, 52, 177, 79, 129, 185, 238, 187, 14, 89, 131, 91, 242, 177, 133, 157, 186, 18, 255, 174, 149, 173, 128, 21, 204, 25, 237, 22, 179, 202, 10, 20, 78, 210, 231, 255, 244, 80, 170, 36, 25, 112, 77, 151, 70, 147, 89, 97, 131, 175, 63, 134, 103, 199, 111, 9, 205, 123, 60, 249, 154, 62, 1, 110, 118, 159, 77, 34, 57, 160, 73, 54, 112, 184, 113, 203, 249, 102, 30, 169, 21, 151, 210, 251, 195, 61, 42, 52, 88, 20, 210, 218, 137, 25, 179, 25, 125, 70, 145, 150, 45, 132, 44, 185, 250, 205, 189, 124, 232, 252, 111, 70, 32, 82, 8, 156, 64, 146, 231, 61, 240, 179, 41, 203, 236, 23, 133, 43, 61, 98, 3, 104, 144, 218, 66, 147, 15, 139, 159, 96, 18, 120, 249, 230, 42, 117, 158, 133, 80, 34, 242, 171, 163, 102, 31, 45, 59, 209, 88, 252, 183, 219, 31, 233, 237, 82, 45, 208, 158, 69, 185, 159, 233, 213, 146, 227, 100, 225, 96, 225, 252, 143, 214, 2, 119, 129, 196, 128, 120, 101, 78, 127, 18, 102, 128, 174, 52, 44, 205, 149, 27, 233, 191, 54, 175, 190, 86, 10, 249, 28, 208, 85, 117, 236, 183, 151, 181, 76, 190, 163, 5, 131, 251, 243, 14, 176, 134, 93, 41, 117, 109, 200, 133, 45, 57, 84, 224, 226, 123, 40, 162, 128, 117, 208, 5, 165, 255, 154, 54, 4, 230, 34, 192, 239, 119, 253, 159, 50, 54, 38, 76, 22, 166, 63, 5, 131, 203, 86, 245, 126, 122, 220, 251, 199, 248, 68, 223, 103, 153, 234, 223, 45, 131, 66, 193, 158, 196, 100, 90, 77, 210, 249, 245, 60, 15, 158, 172, 254, 78, 160, 145, 21, 26, 142, 11, 241, 14, 66, 178, 85, 86, 61, 125, 187, 181, 70, 178, 102, 134, 251, 41, 142, 52, 166, 156, 52, 150, 74, 57, 8, 38, 2, 198, 11, 82, 130, 0, 74, 73, 199, 214, 134, 190, 194, 8, 102, 181, 130, 152, 6, 212, 192, 11, 234, 38, 146, 255, 0, 220, 15, 134, 28, 37, 23, 152, 128, 7, 181, 238, 95, 242, 253, 177, 192, 182, 215, 179, 24, 208, 69, 166, 113, 152, 78, 216, 125, 70, 198, 185, 41, 182, 81, 127, 114, 180, 67, 141, 32, 202, 232, 35, 134, 20, 190, 212, 78, 99, 14, 123, 239, 223, 109, 162, 156, 108, 150, 158, 230, 234, 68, 112, 125, 253, 159, 252, 152, 15, 74, 151, 23, 140, 208, 11, 71, 156, 137, 10, 50, 34, 123, 172, 197, 16, 86, 0, 237, 180, 48, 119, 146, 94, 179, 22, 146, 70, 115, 85, 32, 193, 182, 241, 150, 191, 254, 61, 84, 166, 27, 231, 79, 193, 156, 27, 78, 146, 54, 3, 140, 249, 156, 122, 204, 51, 85, 170, 153, 246, 75, 244, 87, 135, 9, 221, 109, 155, 9, 68, 40, 129, 120, 11, 175, 175, 162, 101, 141, 232, 83, 176, 125, 75, 235, 25, 64, 96, 255, 122, 75, 242, 195, 27, 43, 121, 93, 214, 52, 77, 23, 253, 6, 123, 229, 155, 193, 32, 185, 74, 199, 220, 56, 189, 194, 143, 26, 15, 152, 73, 16, 100, 219, 110, 31, 82, 102, 200, 209, 129, 73, 194, 210, 166, 57, 179, 222, 139, 23, 96, 208, 140, 219, 84, 48, 128, 211, 4, 109, 98, 9, 187, 35, 71, 102, 226, 65, 171, 251, 141, 242, 132, 18, 255, 37, 47, 120, 9, 219, 87, 89, 104, 8, 23, 181, 178, 20, 29, 243, 186, 36, 134, 125, 152, 179, 55, 15, 128, 218, 160, 173, 158, 146, 46, 187, 44, 8, 19, 184, 46, 241, 183, 113, 123, 117, 227, 88, 72, 96, 74, 157, 85, 96, 115, 132, 161, 9, 29, 100, 15, 90, 78, 189, 31, 44, 78, 87, 227, 236, 191, 188, 155, 242, 139, 44, 248, 240, 12, 61, 166, 139, 157, 132, 125, 127, 98, 98, 150, 191, 46, 143, 12, 250, 236, 167, 206, 213, 73, 61, 77, 117, 113, 184, 166, 140, 170, 149, 229, 243, 88, 140, 44, 28, 244, 201, 202, 119, 136, 230, 56, 114, 221, 184, 205, 172, 253, 198, 136, 120, 101, 32, 61, 198, 213, 204, 5, 134, 226, 244, 247, 150, 120, 83, 197, 106, 170, 132, 242, 38, 90, 76, 99, 172, 77, 149, 128, 121, 237, 117, 130, 97, 131, 185, 118, 238, 232, 229, 158, 56, 76, 152, 12, 64, 129, 23, 157, 252, 146, 225, 59, 114, 105, 194, 88, 117, 191, 5, 227, 44, 15, 218, 170, 249, 228, 135, 99, 107, 117, 254, 14, 21, 196, 233, 48, 252, 150, 44, 156, 219, 209, 69, 55, 136, 203, 176, 233, 71, 227, 17, 241, 45, 229, 237, 61, 169, 221, 207, 228, 200, 90, 153, 154, 211, 244, 247, 126, 93, 158, 150, 89, 82, 231, 128, 217, 148, 107, 36, 86, 212, 17, 230, 192, 57, 107, 202, 129, 112, 139, 196, 104, 55, 192, 58, 78, 253, 93, 102, 69, 111, 2, 168, 29, 114, 248, 43, 68, 70, 58, 128, 84, 221, 139, 242, 218, 184, 233, 32, 185, 27, 94, 123, 60, 25, 1, 157, 141, 202, 233, 103, 249, 92, 33, 187, 227, 149, 201, 154, 213, 15, 128, 127, 44, 146, 30, 194, 253, 173, 250, 230, 58, 72, 85, 95, 52, 178, 95, 196, 225, 24, 148, 171, 26, 73, 74, 160, 153, 32, 156, 185, 129, 222, 80, 75, 143, 213, 33, 156, 17, 191, 251, 147, 250, 201, 7, 129, 20, 218, 163, 192, 80, 230, 94, 159, 48, 162, 74, 186, 131, 155, 221, 139, 184, 47, 255, 225, 171, 29, 49, 136, 32, 247, 99, 60, 120, 188, 33, 242, 178, 129, 13, 116, 187, 208, 17, 161, 200, 246, 154, 162, 168, 197, 58, 192, 199, 41, 39, 251, 163, 64, 246, 181, 153, 64, 33, 141, 136, 228, 160, 149, 101, 231, 236, 6, 3, 157, 212, 108, 145, 121, 233, 114, 99, 29, 183, 232, 115, 164, 220, 59, 160, 212, 88, 106, 161, 137, 191, 235, 212, 48, 128, 14, 5, 158, 160, 203, 110, 230, 206, 245, 209, 216, 107, 50, 123, 253, 92, 169, 189, 140, 162, 12, 150, 237, 35, 221, 42, 124, 208, 25, 5, 93, 174, 161, 146, 145, 3, 48, 207, 32, 16, 28, 7, 143, 96, 101, 236, 7, 84, 167, 180, 109, 221, 71, 179, 203, 166, 160, 203, 124, 81, 52, 73, 212, 117, 116, 85, 32, 70, 232, 163, 26, 230, 247, 154, 186, 250, 23, 55, 110, 122, 204, 244, 131, 49, 154, 147, 60, 97, 180, 67, 191, 205, 234, 182, 214, 145, 210, 153, 188, 56, 194, 250, 222, 141, 3, 73, 31, 229, 53, 239, 76, 87, 235, 143, 89, 159, 143, 84, 113, 113, 117, 181, 245, 235, 44, 177, 41, 247, 7, 187, 222, 228, 218, 167, 203, 247, 214, 179, 174, 5, 224, 83, 198, 80, 190, 112, 220, 63, 172, 17, 29, 253, 50, 78, 25, 124, 112, 152, 70, 26, 151, 80, 158, 218, 153, 106, 6, 122, 214, 85, 169, 230, 116, 64, 218, 129, 126, 161, 133, 241, 204, 192, 64, 127, 151, 20, 245, 249, 121, 71, 127, 77, 14, 112, 249, 110, 189, 253, 100, 80, 56, 237, 161, 39, 68, 96, 235, 4, 80, 126, 88, 28, 120, 215, 194, 18, 151, 169, 166, 86, 129, 4, 68, 194, 15, 102, 9, 205, 35, 71, 237, 77, 115, 0, 62, 25, 209, 63, 115, 14, 185, 164, 26, 118, 76, 209, 227, 40, 217, 107, 151, 141, 179, 227, 133, 172, 141, 162, 226, 177, 224, 146, 210, 100, 254, 253, 205, 108, 156, 93, 185, 166, 68, 110, 39, 221, 115, 40, 247, 50, 156, 139, 154, 73, 23, 215, 254, 108, 121, 41, 3, 42, 15, 241, 231, 104, 75, 35, 27, 174, 49, 172, 219, 94, 115, 69, 207, 228, 96, 94, 189, 151, 242, 56, 172, 125, 83, 142, 5, 1, 15, 193, 189, 195, 96, 80, 75, 150, 76, 2, 20, 134, 208, 63, 208, 71, 191, 22, 202, 54, 209, 58, 59, 127, 116, 200, 64, 207, 223, 190, 197, 103, 239, 162, 189, 103, 186, 60, 156, 142, 253, 244, 205, 113, 120, 68, 149, 206, 34, 15, 134, 169, 63, 183, 164, 39, 0, 13, 198, 211, 17, 166, 209, 195, 43, 123, 203, 149, 230, 139, 231, 166, 182, 219, 143, 93, 213, 69, 194, 153, 45, 5, 33, 133, 163, 190, 125, 172, 247, 67, 150, 183, 44, 223, 114, 231, 236, 249, 3, 220, 221, 174, 140, 0, 195, 205, 16, 178, 143, 41, 115, 1, 158, 206, 35, 115, 39, 226, 37, 250, 13, 32, 248, 245, 196, 115, 111, 37, 119, 91, 192, 58, 178, 173, 214, 43, 219, 120, 78, 87, 139, 170, 114, 236, 44, 17, 39, 216, 88, 252, 128, 148, 192, 214, 211, 26, 102, 28, 137, 124, 29, 163, 111, 131, 6, 90, 57, 217, 12, 84, 49, 249, 243, 57, 199, 247, 181, 199, 83, 67, 54, 246, 150, 44, 100, 211, 56, 15, 205, 198, 185, 17, 17, 3, 179, 155, 73, 142, 184, 87, 91, 152, 153, 233, 139, 138, 28, 103, 225, 14, 155, 100, 95, 60, 135, 100, 111, 203, 126, 25, 201, 174, 33, 24, 153, 152, 211, 2, 44, 222, 14, 45, 134, 30, 23, 83, 70, 106, 167, 15, 229, 53, 233, 117, 80, 207, 25, 209, 27, 162, 146, 169, 151, 20, 116, 168, 97, 0, 166, 138, 183, 41, 76, 185, 29, 155, 95, 8, 53, 120, 248, 150, 253, 100, 210, 239, 30, 33, 73, 52, 252, 235, 92, 158, 223, 64, 199, 158, 198, 225, 83, 41, 60, 211, 17, 76, 69, 169, 34, 72, 233, 32, 111, 200, 117, 124, 59, 53, 13, 62, 144, 62, 22, 187, 163, 142, 204, 51, 234, 40, 223, 172, 90, 247, 62, 98, 225, 196, 145, 250, 248, 214, 216, 245, 35, 223, 182, 61, 149, 226, 136, 80, 51, 43, 126, 65, 122, 79, 191, 22, 178, 160, 188, 79, 7, 117, 50, 120, 42, 101, 195, 148, 191, 117, 118, 221, 189, 92, 85, 81, 65, 117, 36, 212, 227, 162, 95, 85, 37, 216, 194, 61, 177, 106, 76, 69, 112, 66, 204, 228, 216, 32, 170, 71, 85, 43, 72, 82, 30, 234, 61, 250, 124, 176, 4, 105, 216, 194, 147, 123, 83, 208, 197, 22, 161, 110, 175, 204, 156, 49, 250, 49, 137, 240, 137, 212, 13, 136, 77, 184, 46, 31, 229, 221, 90, 114, 9, 1, 210, 60, 242, 154, 125, 39, 163, 201, 241, 2, 146, 183, 120, 138, 193, 80, 4, 15, 186, 237, 110, 96, 197, 28, 230, 247, 109, 31, 99, 124, 205, 250, 168, 88, 129, 59, 26, 111, 180, 107, 252, 191, 20, 3, 75, 138, 77, 250, 247, 17, 243, 244, 187, 232, 134, 225, 14, 96, 246, 88, 216, 135, 87, 132, 82, 156, 206, 212, 59, 85, 68, 82, 40, 150, 164, 203, 130, 116, 83, 254, 216, 142, 242, 10, 62, 68, 77, 193, 83, 121, 141, 23, 183, 19, 134, 75, 194, 255, 62, 12, 136, 220, 166, 166, 34, 213, 111, 184, 117, 238, 191, 63, 91, 65, 219, 238, 29, 10, 192, 13, 11, 201, 73, 154, 195, 51, 116, 209, 104, 213, 54, 54, 160, 42, 38, 26, 67, 138, 99, 4, 68, 32, 155, 114, 57, 101, 187, 59, 187, 67, 227, 124, 61, 135, 123, 23, 114, 209, 197, 234, 233, 194, 50, 238, 224, 0, 122, 186, 39, 159, 68, 173, 231, 105, 71, 211, 169, 72, 44, 101, 97, 239, 208, 13, 143, 248, 145, 28, 37, 131, 3, 96, 96, 100, 36, 70, 179, 39, 228, 66, 180, 78, 41, 188, 250, 124, 38, 207, 217, 56, 248, 221, 156, 135, 125, 168, 73, 37, 22, 192, 215, 39, 125, 47, 200, 86, 3, 90, 83, 122, 251, 149, 37, 167, 170, 114, 24, 8, 220, 53, 191, 68, 195, 223, 52, 188, 70, 110, 3, 255, 40, 181, 128, 174, 158, 195, 16, 216, 199, 22, 105, 193, 119, 131, 218, 129, 239, 124, 74, 89, 128, 237, 91, 230, 64, 21, 233, 48, 232, 231, 62, 99, 140, 89, 6, 5, 136, 66, 112, 76, 91, 50, 177, 253, 151, 16, 210, 183, 210, 143, 153, 77, 111, 80, 39, 58, 159, 5, 249, 7, 115, 186, 93, 223, 137, 6, 156, 62, 72, 87, 121, 193, 137, 164, 62, 78, 155, 0, 65, 246, 36, 23, 23, 25, 179, 124, 88, 127, 169, 230, 226, 244, 25, 237, 147, 232, 124, 129, 177, 130, 124, 163, 134, 8, 109, 167, 58, 114, 168, 162, 251, 239, 237, 118, 33, 156, 215, 192, 90, 180, 131, 231, 57, 246, 146, 142, 198, 68, 186, 30, 146, 169, 253, 136, 82, 62, 219, 101, 121, 104, 88, 205, 139, 15, 6, 211, 106, 28, 57, 202, 8, 73, 245, 65, 52, 28, 223, 231, 41, 0, 35, 18, 101, 229, 148, 200, 50, 187, 35, 109, 174, 89, 86, 139, 90, 102, 14, 214, 127, 15, 97, 218, 151, 138, 204, 131, 176, 122, 135, 120, 52, 113, 113, 12, 171, 88, 93, 104, 81, 186, 85, 122, 31, 123, 149, 140, 197, 162, 199, 237, 145, 66, 89, 236, 187, 180, 234, 0, 66, 113, 87, 195, 156, 185, 239, 130, 4, 55, 149, 76, 142, 209, 71, 149, 77, 73, 232, 202, 26, 0, 8, 23, 188, 240, 80, 40, 1, 188, 235, 216, 220, 31, 65, 2, 90, 103, 185, 156, 79, 97, 42, 110, 37, 206, 19, 29, 1, 180, 36, 30, 107, 49, 135, 19, 176, 213, 193, 21, 243, 6, 49, 205, 142, 217, 47, 214, 88, 46, 162, 229, 221, 204, 215, 205, 87, 179, 143, 7, 104, 221, 130, 18, 129, 205, 82, 17, 127, 16, 183, 36, 215, 221, 212, 218, 111, 135, 242, 77, 223, 204, 158, 109, 210, 18, 135, 184, 122, 229, 50, 144, 94, 26, 31, 210, 131, 12, 240, 27, 149, 76, 249, 68, 254, 92, 9, 161, 39, 98, 196, 174, 240, 155, 1, 177, 133, 26, 74, 145, 126, 176, 34, 208, 22, 49, 202, 252, 242, 46, 236, 61, 143, 117, 107, 138, 231, 224, 164, 50, 183, 158, 118, 130, 134, 11, 174, 176, 81, 247, 97, 44, 10, 214, 202, 184, 224, 219, 102, 231, 202, 84, 238, 227, 219, 238, 55, 121, 1, 169, 144, 194, 144, 186, 43, 102, 219, 86, 64, 255, 16, 111, 246, 78, 190, 225, 183, 6, 67, 146, 212, 27, 189, 5, 87, 61, 124, 122, 35, 153, 1, 116, 188, 207, 203, 147, 110, 103, 2, 253, 230, 5, 200, 32, 250, 159, 212, 127, 251, 22, 255, 230, 95, 129, 246, 223, 173, 205, 221, 152, 9, 138, 85, 241, 77, 90, 3, 132, 253, 139, 88, 244, 180, 116, 148, 231, 10, 217, 114, 229, 252, 120, 246, 184, 197, 61, 11, 242, 13, 54, 46, 135, 104, 169, 48, 51, 190, 186, 53, 225, 30, 211, 56, 223, 70, 255, 124, 83, 161, 208, 211, 156, 197, 217, 238, 171, 9, 161, 149, 125, 241, 87, 190, 206, 52, 203, 109, 58, 251, 104, 146, 144, 134, 116, 163, 118, 230, 42, 128, 119, 89, 50, 112, 225, 32, 75, 247, 160, 162, 188, 85, 65, 79, 247, 154, 160, 124, 9, 35, 169, 174, 235, 158, 158, 140, 99, 172, 154, 149, 24, 76, 33, 2, 112, 114, 176, 108, 64, 160, 37, 227, 170, 84, 20, 199, 142, 230, 155, 246, 71, 13, 194, 1, 11, 155, 183, 53, 171, 233, 100, 240, 49, 30, 101, 97, 218, 248, 159, 212, 86, 16, 11, 16, 100, 72, 40, 77, 236, 146, 244, 168, 210, 142, 205, 177, 16, 191, 203, 147, 43, 88, 169, 100, 166, 60, 138, 88, 208, 247, 82, 45, 198, 238, 203, 189, 111, 80, 220, 135, 90, 158, 7, 21, 196, 44, 113, 241, 114, 27, 197, 107, 73, 179, 112, 211, 198, 157, 176, 29, 52, 254, 158, 104, 50, 163, 127, 184, 2, 98, 218, 72, 37, 23, 248, 136, 75, 122, 105, 25, 222, 95, 4, 140, 217, 245, 75, 129, 144, 123, 21, 98, 129, 43, 81, 183, 119, 155, 228, 78, 154, 49, 168, 187, 69, 69, 189, 186, 63, 31, 71, 144, 120, 142, 13, 158, 140, 166, 228, 243, 240, 100, 158, 153, 209, 155, 111, 255, 218, 11, 210, 167, 141, 93, 23, 3, 141, 190, 232, 16, 14, 13, 90, 225, 133, 126, 180, 97, 214, 37, 27, 167, 41, 100, 67, 161, 52, 219, 103, 107, 183, 139, 108, 157, 160, 253, 241, 241, 176, 37, 233, 190, 100, 41, 217, 78, 89, 210, 155, 0, 204, 169, 79, 148, 248, 184, 113, 240, 25, 106, 245, 119, 153, 185, 245, 136, 86, 150, 102, 48, 104, 234, 195, 135, 120, 244, 234, 15, 160, 41, 147, 97, 2, 159, 233, 232, 177, 192, 94, 73, 77, 65, 220, 4, 198, 67, 161, 245, 128, 217, 240, 126, 178, 16, 49, 62, 122, 58, 174, 154, 90, 118, 105, 137, 88, 29, 174, 36, 216, 4, 103, 227, 243, 10, 33, 177, 197, 12, 187, 132, 224, 143, 218, 165, 39, 205, 80, 160, 182, 141, 29, 183, 151, 12, 31, 218, 52, 195, 2, 126, 164, 206, 96, 154, 24, 99, 96, 55, 224, 172, 97, 100, 125, 150, 35, 29, 148, 13, 200, 183, 90, 202, 74, 77, 255, 71, 187, 152, 127, 33, 56, 217, 13, 132, 127, 65, 12, 54, 66, 48, 144, 187, 209, 191, 173, 43, 205, 1, 166, 180, 144, 9, 223, 135, 231, 229, 136, 172, 33, 170, 219, 129, 94, 113, 199, 190, 127, 141, 68, 47, 240, 69, 95, 167, 135, 178, 104, 37, 153, 23, 102, 115, 37, 185, 205, 66, 23, 219, 10, 99, 43, 100, 189, 154, 65, 40, 252, 145, 146, 115, 210, 9, 162, 16, 205, 112, 100, 155, 168, 247, 86, 182, 40, 120, 151, 110, 86, 237, 235, 49, 180, 248, 3, 255, 61, 209, 99, 163, 120, 25, 176, 146, 203, 153, 205, 6, 132, 126, 175, 57, 78, 49, 155, 201, 226, 90, 232, 169, 222, 100, 246, 183, 64, 151, 93, 46, 218, 8, 117, 214, 192, 215, 0, 16, 113, 35, 11, 70, 91, 80, 120, 74, 141, 93, 179, 158, 39, 100, 117, 83, 84, 99, 102, 89, 218, 41, 117, 176, 241, 127, 184, 105, 6, 247, 168, 86, 16, 48, 59, 153, 132, 216, 219, 232, 184, 143, 162, 11, 160, 82, 63, 27, 202, 240, 237, 129, 38, 31, 173, 104, 225, 210, 63, 26, 147, 220, 90, 74, 246, 150, 175, 254, 134, 3, 206, 13, 244, 224, 1, 166, 233, 129, 0, 232, 61, 231, 227, 123, 163, 142, 183, 122, 1, 31, 103, 238, 43, 133, 219, 153, 32, 102, 196, 158, 68, 126, 78, 244, 216, 150, 228, 200, 6, 54, 89, 38, 43, 76, 195, 207, 47, 152, 20, 255, 109, 120, 131, 194, 83, 200, 1, 244, 187, 170, 14, 238, 162, 10, 177, 30, 195, 177, 217, 167, 7, 235, 235, 165, 246, 64, 182, 108, 181, 199, 212, 57, 41, 48, 248, 218, 51, 225, 5, 252, 180, 224, 81, 165, 82, 2, 155, 12, 71, 180, 202, 0, 56, 65, 38, 248, 177, 149, 201, 160, 194, 185, 141, 47, 103, 145, 162, 195, 84, 135, 209, 159, 208, 146, 165, 173, 43, 75, 203, 60, 18, 116, 233, 149, 242, 162, 36, 247, 245, 52, 187, 220, 86, 9, 176, 137, 167, 87, 245, 219, 145, 214, 28, 128, 253, 179, 225, 45, 75, 185, 179, 116, 185, 203, 227, 201, 125, 176, 45, 219, 255, 13, 6, 14, 175, 40, 85, 70, 203, 76, 164, 85, 101, 129, 144, 16, 177, 160, 81, 98, 115, 113, 168, 92, 15, 130, 77, 38, 31, 113, 208, 112, 173, 132, 217, 137, 60, 93, 169, 64, 157, 232, 79, 221, 96, 131, 199, 147, 50, 206, 0, 187, 63, 57, 54, 38, 187, 21, 18, 204, 67, 59, 85, 228, 229, 222, 113, 71, 135, 123, 26, 72, 204, 220, 214, 216, 81, 85, 214, 198, 23, 105, 89, 10, 6, 212, 253, 210, 112, 177, 39, 47, 169, 31, 89, 230, 98, 34, 87, 53, 176, 21, 232, 176, 35, 28, 94, 201, 106, 13, 0, 177, 219, 60, 174, 85, 225, 210, 224, 238, 206, 248, 32, 216, 173, 200, 106, 137, 254, 204, 100, 123, 179, 156, 119, 56, 0, 24, 191, 250, 16, 73, 149, 115, 124, 229, 120, 228, 138, 80, 51, 129, 131, 69, 118, 253, 159, 98, 35, 67, 122, 102, 143, 223, 99, 136, 4, 79, 241, 194, 239, 89, 149, 75, 103, 52, 242, 26, 6, 252, 32, 33, 110, 25, 143, 68, 180, 103, 22, 34, 110, 31, 254, 172, 107, 21, 215, 185, 156, 218, 212, 75, 204, 19, 171, 10, 24, 124, 249, 67, 106, 182, 219, 249, 47, 44, 40, 110, 232, 222, 198, 206, 0, 192, 42, 106, 20, 192, 205, 226, 77, 46, 245, 38, 94, 215, 244, 186, 195, 26, 124, 202, 229, 224, 214, 74, 192, 195, 167, 54, 133, 148, 56, 62, 254, 143, 239, 67, 239, 110, 41, 86, 10, 100, 80, 86, 178, 240, 160, 187, 144, 225, 65, 184, 224, 188, 192, 53, 187, 253, 74, 190, 51, 64, 78, 196, 42, 195, 15, 28, 158, 241, 66, 144, 81, 34, 17, 230, 101, 27, 7, 206, 104, 175, 18, 16, 77, 225, 92, 176, 124, 242, 177, 226, 30, 149, 19, 207, 210, 203, 140, 136, 130, 44, 206, 86, 245, 172, 121, 200, 255, 143, 221, 212, 171, 10, 141, 120, 152, 62, 85, 197, 224, 30, 8, 35, 117, 179, 216, 244, 220, 175, 47, 2, 46, 215, 81, 24, 196, 34, 37, 241, 99, 18, 202, 94, 255, 223, 237, 53, 218, 77, 248, 51, 107, 10, 156, 140, 197, 79, 7, 233, 62, 8, 131, 114, 153, 73, 23, 243, 155, 196, 140, 204, 230, 67, 185, 108, 254, 69, 246, 46, 87, 252, 41, 94, 14, 207, 243, 34, 119, 220, 38, 7, 127, 13, 126, 205, 215, 254, 191, 172, 91, 96, 172, 134, 17, 203, 70, 68, 247, 221, 231, 161, 93, 47, 51, 78, 26, 122, 119, 90, 20, 244, 56, 19, 49, 245, 184, 64, 77, 221, 217, 138, 252, 112, 200, 187, 7, 18, 128, 6, 203, 96, 74, 185, 106, 22, 171, 225, 7, 157, 66, 32, 5, 167, 243, 55, 70, 7, 215, 174, 155, 57, 114, 245, 215, 142, 61, 110, 11, 27, 105, 39, 176, 230, 116, 63, 24, 62, 148, 62, 165, 17, 219, 34, 171, 187, 181, 245, 221, 142, 31, 215, 42, 26, 57, 1, 52, 142, 14, 113, 146, 28, 190, 161, 8, 176, 205, 147, 20, 136, 87, 232, 71, 10, 110, 11, 61, 200, 196, 6, 10, 197, 128, 227, 101, 122, 70, 156, 3, 167, 32, 14, 192, 215, 72, 13, 26, 201, 192, 10, 18, 123, 189, 25, 237, 129, 209, 18, 250, 143, 130, 250, 95, 239, 27, 34, 223, 243, 109, 56, 204, 75, 114, 197, 171, 206, 91, 53, 100, 15, 188, 234, 68, 125, 212, 10, 167, 74, 119, 212, 60, 178, 233, 137, 160, 1, 55, 53, 244, 138, 106, 27, 30, 68, 168, 165, 161, 226, 156, 134, 65, 70, 216, 206, 9, 217, 65, 181, 93, 121, 38, 186, 95, 236, 130, 55, 73, 150, 181, 25, 43, 124, 18, 112, 142, 130, 26, 96, 97, 219, 110, 80, 68, 72, 45, 49, 109, 28, 206, 77, 210, 153, 209, 36, 152, 232, 38, 130, 159, 64, 207, 247, 223, 251, 241, 187, 150, 137, 194, 82, 182, 250, 247, 65, 100, 14, 213, 127, 90, 28, 44, 198, 238, 129, 103, 180, 92, 63, 245, 40, 157, 188, 7, 221, 55, 92, 225, 14, 206, 45, 132, 41, 73, 244, 29, 14, 149, 219, 50, 166, 22, 148, 49, 100, 220, 249, 133, 75, 166, 137, 72, 239, 90, 73, 18, 85, 227, 227, 142, 190, 166, 151, 130, 101, 151, 98, 219, 9, 112, 254, 157, 241, 33, 123, 107, 68, 20, 89, 109, 61, 27, 216, 109, 45, 70, 229, 60, 105, 21, 216, 80, 167, 207, 252, 160, 208, 135, 156, 6, 48, 247, 17, 236, 147, 230, 121, 99, 119, 221, 101, 116, 36, 101, 24, 152, 109, 87, 60, 177, 105, 185, 199, 229, 214, 239, 53, 122, 232, 5, 218, 155, 183, 60, 3, 249, 155, 116, 111, 21, 203, 148, 139, 138, 86, 188, 181, 230, 254, 42, 222, 76, 12, 80, 89, 188, 159, 76, 253, 3, 179, 3, 46, 253, 112, 18, 3, 101, 95, 79, 136, 250, 47, 52, 243, 138, 206, 195, 240, 156, 169, 48, 168, 69, 177, 64, 140, 34, 247, 67, 149, 177, 163, 204, 100, 56, 227, 172, 72, 123, 202, 55, 0, 109, 51, 151, 183, 186, 205, 170, 63, 236, 180, 98, 108, 228, 139, 131, 156, 208, 205, 47, 70, 2, 214, 97, 253, 236, 228, 104, 91, 111, 224, 12, 30, 229, 243, 48, 104, 173, 51, 70, 30, 196, 170, 238, 154, 21, 177, 138, 208, 117, 117, 17, 97, 82, 95, 18, 189, 31, 54, 213, 209, 62, 227, 146, 79, 15, 167, 223, 223, 145, 247, 114, 4, 70, 141, 113, 141, 179, 239, 247, 63, 204, 169, 228, 247, 195, 152, 225, 96, 212, 14, 237, 140, 114, 178, 14, 83, 144, 223, 169, 71, 216, 243, 209, 237, 12, 167, 249, 188, 19, 89, 193, 147, 178, 253, 187, 81, 251, 189, 29, 217, 172, 107, 86, 17, 40, 214, 22, 151, 97, 240, 180, 110, 1, 50, 204, 190, 62, 186, 100, 226, 127, 91, 79, 80, 56, 174, 108, 199, 113, 193, 225, 213, 193, 106, 141, 193, 246, 210, 109, 108, 182, 58, 122, 64, 156, 100, 148, 89, 89, 55, 119, 110, 90, 2, 10, 187, 199, 139, 116, 75, 209, 249, 15, 47, 96, 202, 248, 242, 131, 9, 242, 48, 39, 240, 108, 228, 212, 254, 140, 147, 78, 232, 78, 175, 105, 217, 245, 252, 169, 109, 158, 65, 33, 246, 193, 231, 112, 36, 127, 30, 136, 36, 179, 156, 55, 242, 173, 237, 17, 222, 64, 16, 94, 130, 117, 186, 114, 118, 102, 214, 169, 111, 131, 24, 213, 126, 1, 13, 255, 190, 195, 167, 235, 221, 196, 10, 137, 225, 151, 72, 239, 143, 180, 220, 99, 10, 51, 82, 56, 92, 19, 126, 96, 89, 201, 127, 1, 129, 14, 58, 101, 72, 157, 105, 160, 223, 143, 37, 219, 33, 139, 3, 160, 23, 132, 51, 226, 135, 78, 233, 28, 197, 31, 57, 32, 114, 243, 240, 105, 112, 76, 17, 102, 124, 89, 245, 33, 165, 198, 247, 111, 163, 115, 7, 75, 188, 35, 167, 125, 193, 100, 100, 56, 224, 28, 182, 71, 43, 251, 64, 141, 98, 85, 6, 160, 74, 231, 190, 2, 85, 64, 145, 160, 50, 58, 212, 129, 79, 128, 200, 30, 251, 151, 215, 221, 27, 237, 64, 30, 237, 179, 171, 168, 229, 104, 47, 172, 17, 34, 83, 57, 38, 203, 214, 61, 135, 122, 199, 44, 100, 229, 140, 180, 198, 171, 9, 88, 184, 155, 91, 183, 134, 197, 8, 5, 121, 243, 169, 80, 116, 131, 150, 175, 84, 84, 173, 195, 14, 80, 99, 16, 198, 17, 119, 209, 27, 214, 214, 50, 7, 118, 251, 137, 221, 96, 130, 79, 93, 34, 251, 116, 4, 136, 62, 55, 157, 14, 195, 235, 139, 229, 46, 184, 146, 68, 244, 246, 172, 57, 46, 74, 153, 139, 215, 234, 74, 83, 129, 197, 151, 207, 199, 140, 12, 38, 109, 52, 236, 159, 80, 157, 220, 174, 49, 146, 82, 153, 59, 249, 240, 229, 122, 74, 50, 159, 32, 207, 130, 33, 179, 187, 2, 197, 179, 119, 30, 136, 206, 65, 101, 35, 153, 155, 187, 229, 160, 96, 158, 189, 246, 134, 36, 177, 191, 95, 57, 24, 53, 248, 216, 27, 64, 241, 212, 140, 244, 203, 60, 110, 217, 241, 3, 101, 228, 5, 8, 32, 238, 96, 200, 188, 219, 128, 255, 195, 62, 4, 178, 142, 128, 87, 46, 112, 167, 120, 74, 168, 42, 197, 39, 153, 182, 58, 93, 59, 96, 167, 121, 16, 198, 197, 216, 3, 72, 47, 200, 117, 23, 9, 126, 54, 12, 81, 223, 196, 72, 98, 71, 76, 242, 242, 125, 102, 142, 222, 48, 28, 159, 110, 165, 136, 211, 222, 46, 173, 43, 45, 138, 30, 153, 19, 37, 185, 67, 226, 163, 145, 111, 44, 134, 23, 208, 141, 12, 88, 251, 178, 75, 146, 42, 89, 24, 199, 84, 8, 72, 28, 235, 232, 64, 73, 252, 198, 203, 125, 106, 101, 22, 79, 248, 228, 228, 97, 79, 171, 93, 100, 56, 45, 80, 191, 109, 65, 11, 203, 78, 187, 179, 50, 225, 65, 227, 238, 80, 223, 219, 136, 43, 112, 176, 224, 93, 26, 164, 81, 180, 147, 25, 116, 163, 168, 91, 159, 118, 230, 215, 122, 161, 32, 24, 221, 211, 176, 208, 6, 175, 119, 83, 126, 116, 32, 114, 185, 29, 166, 250, 110, 247, 236, 222, 64, 207, 55, 62, 246, 217, 84, 38, 177, 106, 179, 87, 218, 176, 102, 4, 82, 149, 11, 104, 11, 122, 132, 107, 129, 144, 3, 45, 144, 229, 228, 167, 217, 165, 86, 98, 101, 64, 194, 198, 65, 47, 151, 251, 169, 100, 26, 98, 132, 226, 204, 76, 175, 163, 82, 129, 219, 228, 185, 143, 155, 224, 87, 223, 164, 25, 209, 91, 146, 62, 145, 170, 169, 224, 192, 66, 60, 95, 49, 193, 54, 225, 17, 252, 41, 223, 124, 24, 25, 162, 251, 158, 133, 93, 2, 21, 0, 87, 164, 154, 172, 205, 85, 181, 158, 195, 102, 152, 186, 107, 120, 0, 245, 75, 74, 139, 1, 136, 252, 74, 99, 148, 25, 187, 19, 10, 15, 73, 83, 16, 147, 137, 152, 142, 194, 126, 239, 246, 178, 48, 75, 15, 95, 221, 185, 137, 200, 71, 208, 152, 249, 233, 114, 74, 85, 105, 37, 42, 184, 233, 5, 196, 165, 63, 251, 91, 155, 2, 169, 112, 14, 230, 233, 204, 50, 204, 143, 92, 134, 175, 193, 204, 167, 68, 243, 156, 65, 155, 19, 173, 33, 117, 27, 96, 165, 56, 208, 197, 176, 210, 88, 150, 30, 13, 54, 65, 250, 131, 209, 140, 181, 230, 157, 120, 99, 68, 164, 183, 127, 72, 98, 66, 91, 147, 141, 73, 100, 19, 150, 244, 221, 126, 200, 29, 63, 183, 152, 138, 162, 183, 22, 252, 139, 64, 177, 161, 150, 35, 174, 58, 97, 64, 137, 158, 229, 53, 174, 139, 139, 222, 125, 12, 98, 51, 8, 12, 139, 74, 47, 126, 134, 155, 29, 236, 126, 56, 124, 157, 94, 38, 41, 20, 199, 1, 208, 116, 132, 115, 83, 142, 209, 232, 91, 206, 52, 75, 199, 51, 130, 63, 70, 6, 16, 86, 75, 39, 150, 100, 226, 150, 7, 42, 70, 157, 61, 153, 42, 78, 167, 72, 59, 76, 24, 128, 203, 190, 126, 162, 65, 47, 233, 199, 191, 170, 162, 117, 193, 230, 32, 229, 201, 4, 68, 107, 134, 145, 218, 99, 141, 138, 191, 125, 219, 123, 29, 239, 152, 77, 56, 180, 104, 132, 205, 253, 7, 69, 249, 165, 254, 196, 30, 160, 208, 143, 249, 230, 188, 33, 246, 236, 76, 56, 135, 23, 58, 243, 1, 246, 198, 100, 7, 5, 236, 177, 145, 76, 114, 35, 146, 53, 88, 204, 150, 128, 68, 4, 178, 165, 68, 70, 175, 3, 193, 67, 15, 203, 146, 128, 19, 91, 246, 173, 109, 26, 235, 59, 170, 94, 32, 174, 141, 200, 220, 252, 75, 164, 71, 5, 102, 168, 199, 130, 212, 157, 185, 202, 53, 130, 171, 99, 175, 83, 17, 162, 109, 185, 225, 197, 181, 61, 167, 104, 169, 111, 62, 112, 120, 218, 116, 171, 218, 250, 131, 193, 167, 46, 168, 182, 17, 82, 210, 79, 90, 51, 106, 47, 33, 224, 230, 43, 98, 167, 122, 252, 49, 104, 59, 17, 10, 90, 219, 110, 204, 160, 58, 60, 111, 130, 112, 83, 69, 254, 130, 144, 246, 194, 19, 4, 220, 136, 227, 209, 147, 108, 18, 13, 251, 109, 22, 50, 144, 231, 208, 81, 249, 23, 236, 5, 32, 187, 146, 73, 8, 96, 148, 11, 161, 189, 245, 217, 102, 62, 158, 12, 120, 244, 2, 208, 224, 112, 208, 185, 227, 3, 232, 58, 51, 125, 187, 183, 20, 168, 201, 139, 166, 207, 164, 139, 6, 224, 36, 51, 129, 44, 88, 185, 182, 104, 248, 182, 204, 128, 201, 28, 193, 122, 72, 136, 66, 71, 218, 63, 210, 42, 215, 59, 25, 141, 203, 23, 96, 56, 98, 12, 241, 182, 235, 239, 244, 236, 143, 233, 209, 182, 155, 165, 179, 191, 254, 36, 122, 112, 49, 86, 200, 35, 69, 152, 60, 103, 63, 8, 48, 72, 192, 122, 110, 73, 86, 60, 156, 237, 114, 164, 89, 66, 155, 152, 37, 160, 189, 161, 125, 68, 247, 161, 53, 117, 88, 158, 200, 104, 8, 168, 107, 101, 252, 45, 187, 78, 217, 250, 83, 28, 163, 63, 82, 99, 86, 221, 126, 80, 120, 154, 13, 133, 50, 115, 8, 221, 132, 46, 153, 95, 13, 43, 208, 219, 245, 3, 185, 227, 73, 22, 209, 147, 72, 202, 27, 244, 230, 160, 224, 35, 76, 233, 0, 46, 206, 159, 69, 194, 146, 171, 242, 35, 73, 166, 102, 70, 197, 36, 103, 219, 131, 242, 119, 224, 184, 95, 105, 146, 10, 109, 183, 46, 64, 207, 97, 183, 47, 192, 70, 9, 119, 117, 47, 24, 147, 185, 101, 142, 219, 195, 163, 240, 120, 50, 129, 100, 84, 59, 98, 56, 62, 18, 36, 162, 127, 38, 229, 152, 101, 180, 83, 8, 238, 227, 9, 49, 109, 155, 57, 225, 115, 0, 55, 20, 47, 31, 192, 116, 167, 246, 115, 234, 15, 178, 107, 150, 23, 117, 29, 68, 40, 99, 255, 60, 49, 61, 112, 70, 134, 78, 10, 35, 88, 173, 40, 230, 176, 10, 73, 201, 19, 246, 137, 81, 49, 216, 111, 181, 193, 116, 31, 184, 235, 198, 90, 206, 35, 58, 52, 197, 91, 71, 248, 35, 247, 130, 144, 252, 250, 195, 2, 163, 234, 23, 216, 249, 96, 206, 144, 42, 159, 28, 76, 124, 106, 122, 220, 186, 240, 37, 41, 153, 246, 146, 194, 39, 255, 211, 136, 180, 215, 41, 67, 143, 18, 109, 157, 10, 139, 58, 56, 114, 147, 81, 71, 136, 10, 63, 78, 143, 14, 84, 97, 248, 255, 6, 254, 225, 159, 89, 32, 63, 246, 10, 245, 140, 107, 156, 31, 134, 52, 48, 8, 99, 242, 168, 116, 240, 203, 61, 217, 72, 111, 184, 17, 244, 63, 37, 142, 38, 128, 25, 73, 157, 76, 230, 123, 212, 186, 255, 143, 212, 144, 26, 48, 126, 178, 59, 130, 173, 77, 127, 157, 163, 152, 102, 46, 58, 210, 195, 10, 60, 223, 238, 101, 236, 34, 46, 147, 96, 253, 249, 60, 130, 179, 248, 145, 180, 73, 234, 114, 190, 96, 59, 146, 195, 44, 160, 152, 133, 219, 84, 2, 251, 2, 126, 133, 212, 131, 0, 110, 129, 249, 171, 83, 57, 142, 98, 149, 7, 90, 227, 90, 122, 117, 69, 36, 234, 253, 255, 13, 210, 75, 106, 10, 134, 54, 145, 25, 112, 223, 92, 117, 179, 127, 202, 207, 224, 123, 144, 182, 173, 53, 10, 172, 78, 150, 94, 227, 159, 51, 50, 111, 138, 231, 137, 205, 205, 72, 143, 163, 111, 195, 133, 52, 40, 207, 120, 82, 17, 4, 0, 239, 207, 20, 148, 92, 170, 49, 190, 152, 106, 147, 86, 254, 61, 42, 44, 118, 39, 25, 7, 193, 155, 182, 240, 66, 141, 232, 52, 8, 162, 171, 75, 75, 186, 159, 241, 122, 163, 196, 29, 62, 164, 152, 230, 179, 58, 254, 251, 5, 126, 31, 127, 83, 106, 0, 42, 37, 204, 38, 81, 0, 47, 91, 210, 15, 170, 255, 102, 217, 140, 140, 71, 185, 103, 131, 222, 25, 174, 24, 104, 115, 82, 81, 184, 200, 91, 244, 231, 190, 117, 190, 142, 64, 123, 179, 225, 175, 10, 211, 100, 203, 216, 47, 188, 40, 167, 176, 150, 45, 58, 187, 230, 232, 95, 125, 2, 185, 123, 211, 107, 107, 197, 62, 238, 151, 82, 94, 194, 68, 116, 222, 163, 192, 173, 87, 163, 59, 121, 183, 207, 82, 34, 169, 252, 242, 19, 224, 157, 206, 51, 42, 136, 29, 36, 58, 196, 0, 119, 217, 170, 198, 64, 205, 149, 187, 157, 127, 32, 54, 90, 4, 45, 45, 212, 53, 107, 245, 239, 79, 40, 122, 164, 138, 221, 159, 95, 239, 193, 105, 179, 171, 71, 144, 111, 216, 121, 227, 38, 230, 101, 35, 56, 22, 171, 61, 215, 2, 41, 251, 147, 12, 51, 3, 168, 80, 200, 192, 245, 157, 174, 209, 3, 205, 221, 176, 48, 30, 246, 198, 127, 64, 73, 144, 194, 170, 248, 228, 14, 17, 68, 180, 77, 214, 67, 202, 198, 161, 106, 209, 98, 240, 174, 246, 45, 90, 160, 208, 205, 242, 64, 198, 77, 243, 229, 10, 34, 216, 228, 18, 236, 135, 8, 176, 221, 36, 97, 50, 19, 96, 127, 162, 206, 101, 139, 76, 63, 96, 200, 182, 30, 176, 74, 177, 0, 141, 109, 63, 178, 200, 246, 222, 246, 62, 66, 191, 64, 42, 149, 74, 156, 8, 41, 200, 232, 58, 204, 83, 89, 144, 150, 177, 210, 190, 41, 156, 220, 176, 106, 212, 178, 249, 122, 179, 182, 108, 59, 123, 254, 103, 159, 238, 35, 81, 133, 242, 31, 20, 249, 48, 201, 31, 124, 10, 109, 89, 54, 179, 101, 146, 1, 224, 40, 172, 110, 104, 232, 167, 2, 113, 190, 33, 14, 59, 187, 79, 226, 91, 94, 97, 227, 144, 25, 71, 212, 178, 6, 249, 247, 33, 249, 53, 213, 98, 21, 97, 49, 244, 170, 5, 163, 42, 252, 187, 97, 205, 183, 153, 218, 11, 173, 96, 52, 96, 81, 156, 148, 108, 66, 254, 3, 147, 104, 252, 254, 116, 12, 67, 167, 145, 69, 242, 191, 2, 121, 191, 249, 65, 118, 155, 155, 34, 254, 140, 26, 7, 152, 21, 232, 159, 78, 74, 83, 91, 119, 143, 159, 192, 76, 37, 180, 172, 0, 28, 85, 3, 170, 253, 108, 220, 194, 211, 229, 6, 134, 71, 105, 139, 198, 206, 200, 13, 148, 54, 144, 150, 13, 229, 229, 77, 161, 133, 210, 118, 174, 119, 240, 155, 2, 187, 170, 139, 145, 132, 132, 155, 81, 129, 249, 91, 50, 244, 205, 104, 49, 92, 96, 50, 168, 247, 232, 73, 107, 63, 16, 224, 152, 233, 157, 3, 128, 184, 74, 220, 74, 201, 113, 118, 131, 64, 212, 226, 226, 219, 11, 60, 216, 191, 83, 221, 190, 200, 162, 163, 100, 142, 223, 243, 79, 0, 25, 185, 137, 139, 38, 86, 35, 23, 189, 17, 6, 76, 8, 35, 43, 135, 29, 127, 231, 90, 20, 200, 105, 156, 176, 6, 116, 234, 214, 4, 24, 105, 30, 12, 227, 61, 164, 250, 174, 30, 86, 108, 93, 154, 229, 220, 30, 204, 147, 21, 43, 131, 210, 249, 122, 86, 58, 243, 1, 145, 101, 6, 90, 230, 11, 129, 186, 97, 8, 57, 53, 121, 255, 243, 228, 121, 167, 58, 171, 210, 35, 181, 225, 252, 146, 118, 249, 51, 217, 131, 186, 177, 141, 73, 57, 49, 122, 189, 127, 190, 57, 202, 23, 10, 180, 203, 210, 178, 115, 215, 14, 103, 44, 175, 39, 165, 29, 221, 217, 59, 48, 77, 252, 33, 18, 125, 84, 151, 210, 90, 104, 170, 152, 69, 24, 90, 183, 153, 129, 243, 220, 193, 210, 15, 100, 235, 188, 13, 39, 4, 113, 105, 185, 212, 43, 223, 45, 132, 148, 24, 196, 76, 244, 215, 62, 213, 102, 93, 132, 183, 159, 159, 33, 23, 244, 213, 148, 111, 129, 183, 179, 76, 227, 116, 49, 74, 35, 7, 7, 226, 216, 238, 165, 158, 59, 134, 176, 112, 6, 237, 149, 60, 33, 15, 128, 236, 143, 181, 111, 244, 183, 238, 18, 235, 237, 119, 97, 134, 238, 165, 241, 9, 59, 1, 143, 79, 135, 152, 129, 126, 218, 49, 88, 240, 166, 57, 78, 62, 213, 44, 33, 61, 37, 97, 9, 10, 128, 156, 253, 255, 95, 223, 234, 9, 80, 145, 102, 4, 193, 221, 73, 229, 169, 203, 39, 40, 48, 200, 42, 37, 44, 86, 102, 244, 104, 247, 27, 216, 88, 147, 51, 96, 128, 158, 31, 123, 195, 103, 86, 162, 77, 84, 21, 166, 183, 167, 166, 203, 179, 128, 89, 156, 240, 230, 147, 76, 109, 112, 13, 116, 50, 19, 103, 188, 173, 48, 8, 158, 6, 194, 32, 55, 135, 77, 71, 180, 206, 85, 229, 22, 31, 120, 164, 131, 44, 76, 226, 109, 45, 0, 5, 174, 249, 66, 18, 20, 167, 42, 92, 99, 82, 168, 187, 28, 48, 86, 213, 14, 21, 19, 59, 251, 169, 89, 10, 193, 50, 60, 39, 155, 221, 130, 231, 97, 118, 50, 117, 206, 103, 191, 52, 141, 206, 3, 23, 146, 6, 155, 244, 207, 88, 85, 134, 192, 219, 118, 218, 192, 253, 31, 104, 7, 146, 108, 178, 85, 91, 50, 149, 71, 157, 118, 206, 154, 135, 130, 241, 134, 248, 152, 39, 68, 172, 131, 84, 29, 79, 93, 6, 96, 64, 114, 213, 4, 236, 159, 116, 148, 45, 245, 179, 173, 132, 29, 113, 148, 29, 106, 81, 55, 189, 171, 81, 195, 133, 203, 32, 150, 232, 60, 144, 175, 53, 218, 66, 39, 104, 221, 245, 248, 235, 137, 132, 136, 10, 251, 245, 21, 46, 17, 194, 103, 64, 8, 9, 31, 139, 139, 91, 76, 167, 197, 19, 64, 172, 84, 193, 54, 39, 53, 199, 16, 193, 232, 176, 147, 175, 24, 113, 8, 112, 81, 28, 31, 178, 229, 67, 80, 168, 87, 187, 48, 247, 247, 70, 123, 121, 141, 236, 69, 49, 110, 8, 68, 99, 187, 144, 152, 59, 242, 230, 200, 81, 23, 80, 203, 165, 236, 29, 138, 239, 56, 99, 147, 155, 77, 118, 216, 74, 200, 214, 22, 95, 210, 209, 57, 180, 178, 244, 104, 88, 176, 214, 168, 252, 12, 145, 231, 53, 36, 170, 109, 209, 172, 211, 241, 1, 194, 201, 207, 86, 21, 228, 212, 135, 4, 42, 23, 232, 255, 142, 87, 135, 75, 190, 72, 134, 15, 145, 75, 72, 166, 165, 49, 105, 161, 55, 220, 81, 165, 47, 123, 102, 50, 123, 180, 243, 0, 4, 83, 138, 34, 71, 208, 71, 249, 206, 190, 17, 173, 52, 43, 174, 128, 100, 83, 61, 234, 31, 83, 195, 121, 190, 1, 48, 61, 98, 183, 87, 164, 42, 71, 232, 185, 187, 20, 98, 166, 25, 179, 152, 190, 197, 31, 255, 113, 42, 222, 26, 187, 138, 183, 244, 116, 19, 8, 120, 97, 209, 89, 136, 153, 253, 248, 153, 25, 229, 109, 245, 169, 246, 25, 212, 204, 59, 121, 135, 75, 73, 218, 113, 230, 3, 194, 220, 156, 62, 186, 74, 224, 181, 255, 185, 123, 99, 188, 157, 138, 14, 125, 131, 55, 120, 25, 228, 54, 200, 214, 186, 0, 224, 63, 138, 252, 186, 29, 101, 5, 90, 170, 252, 149, 203, 165, 228, 252, 200, 116, 231, 121, 44, 246, 217, 181, 247, 182, 13, 150, 145, 105, 29, 39, 107, 62, 169, 87, 168, 155, 166, 228, 144, 212, 118, 72, 84, 6, 96, 95, 112, 73, 211, 75, 45, 57, 174, 43, 47, 215, 208, 50, 109, 224, 194, 211, 88, 122, 5, 211, 240, 180, 37, 224, 24, 73, 249, 157] - ], - "segmentSize": null - }, - { - "encrypted": [ - [177, 73, 169] - ], - "iv": null, - "key": [126, 207, 254, 60, 117, 133, 129, 182, 174, 178, 143, 192, 91, 168, 32, 183, 141, 234, 35, 154, 179, 35, 197, 78, 214, 159, 231, 158, 227, 56, 173, 84], - "modeOfOperation": "ctr", - "plaintext": [ - [128, 242, 71] - ], - "segmentSize": null - }, - { - "encrypted": [ - [40, 102, 243, 228, 92, 255, 235, 149, 246, 102, 28, 167, 19, 44, 36, 246] - ], - "iv": null, - "key": [77, 205, 156, 30, 11, 111, 122, 212, 77, 184, 214, 61, 125, 81, 108, 247, 223, 241, 15, 206, 168, 83, 42, 119, 28, 177, 222, 20, 12, 34, 30, 187], - "modeOfOperation": "ctr", - "plaintext": [ - [109, 45, 220, 132, 217, 84, 155, 156, 174, 12, 246, 77, 197, 103, 50, 28] - ], - "segmentSize": null - }, - { - "encrypted": [ - [183, 16, 182, 26, 60, 127, 26, 130, 80, 104, 94, 51, 234, 118, 90, 118, 195, 74, 153, 34, 232, 114, 2, 2, 241, 61, 243, 161, 155, 249, 209, 240, 139, 140, 213, 150, 214, 169, 39, 46, 69, 255, 156, 154, 144, 234, 69, 117, 88, 10, 59, 24, 185, 196, 112, 41, 115, 176, 87, 212, 147, 141, 17, 12, 74, 75, 65, 147, 192, 21, 20, 202, 115, 96, 101, 170, 98, 51, 103, 222, 224, 17, 35, 106, 114, 68, 95, 132, 126, 48, 70, 62, 225, 1, 15, 145, 8, 28, 31, 191, 32, 244, 10, 109, 103, 241, 116, 141, 184, 204, 188, 33, 147, 22, 178, 12, 187, 64, 182, 65, 63, 162, 72, 45, 64, 72, 56] - ], - "iv": null, - "key": [32, 109, 182, 14, 168, 50, 116, 13, 193, 67, 239, 195, 99, 141, 58, 149, 248, 4, 170, 131, 160, 5, 31, 61, 160, 75, 181, 147, 201, 124, 228, 29], - "modeOfOperation": "ctr", - "plaintext": [ - [156, 193, 31, 111, 126, 242, 93, 88, 243, 75, 140, 102, 92, 48, 47, 158, 217, 232, 141, 66, 209, 195, 49, 20, 242, 203, 88, 243, 127, 163, 137, 120, 117, 219, 192, 14, 171, 66, 209, 16, 15, 99, 173, 225, 139, 124, 89, 50, 190, 33, 70, 156, 102, 78, 208, 177, 230, 127, 245, 221, 117, 135, 59, 157, 251, 144, 11, 245, 230, 120, 180, 193, 1, 110, 254, 208, 102, 114, 98, 204, 223, 180, 116, 207, 64, 148, 61, 230, 167, 0, 91, 32, 101, 140, 135, 234, 108, 127, 210, 32, 137, 56, 224, 87, 50, 78, 144, 187, 8, 246, 59, 22, 217, 66, 201, 88, 192, 4, 42, 148, 160, 53, 10, 171, 118, 26, 240] - ], - "segmentSize": null - }, - { - "encrypted": [ - [53, 50, 149, 226, 255, 229, 254, 176, 28, 73, 221, 104, 82, 26, 196, 206, 160, 76, 51, 90, 107, 50, 214, 104, 186, 41, 199, 160, 112, 224, 223, 67, 9, 97, 190, 43, 215, 61, 163, 245, 54, 217, 134, 212, 196, 23, 41, 246, 128, 66, 171, 220, 57, 220, 144, 175, 214, 115, 208, 9, 151, 79, 80, 72, 148, 44, 96, 76, 96, 76, 123, 84, 71, 192, 101, 250, 101, 57, 190, 104, 158, 252, 146, 228, 68, 211, 149, 58, 165, 205, 230, 252, 49, 229, 122, 206, 201, 31, 52, 38, 0, 223, 29, 198, 85, 4, 124, 34, 203, 172, 108, 174, 97, 206, 202, 164, 235, 154, 101, 6, 185, 222, 130, 160, 137, 221, 47, 168] - ], - "iv": null, - "key": [75, 224, 65, 54, 17, 203, 209, 79, 96, 194, 221, 119, 211, 245, 103, 91, 141, 122, 155, 219, 208, 246, 202, 56, 167, 65, 68, 20, 160, 57, 177, 230], - "modeOfOperation": "ctr", - "plaintext": [ - [0, 109, 23, 200, 164, 243, 243, 84, 164, 75, 217, 177, 90, 90, 20, 26, 223, 118, 184, 17, 90, 110, 10, 193, 57, 155, 34, 120, 93, 61, 45, 4, 247, 7, 109, 164, 61, 158, 240, 109, 119, 118, 244, 92, 37, 73, 3, 77, 231, 147, 224, 205, 237, 138, 118, 51, 250, 106, 250, 199, 64, 33, 221, 217, 130, 234, 127, 113, 128, 152, 157, 19, 224, 124, 154, 24, 105, 27, 32, 0, 222, 129, 70, 74, 133, 226, 41, 250, 249, 109, 4, 225, 216, 69, 246, 29, 107, 196, 169, 29, 22, 1, 155, 227, 133, 222, 122, 166, 161, 155, 170, 38, 96, 212, 189, 135, 173, 60, 94, 7, 158, 156, 241, 128, 185, 191, 57, 26] - ], - "segmentSize": null - }, - { - "encrypted": [ - [42, 191, 219, 124, 120, 175, 37, 137, 147, 95, 196, 105, 228, 66, 249, 191, 109, 5, 43, 181, 138, 184, 134, 247, 24, 135, 34, 87, 72, 66, 123, 145, 203, 186, 38, 59, 30, 44, 242, 151, 175, 104, 118, 76, 168, 45, 118, 226, 143, 175, 224, 164, 188, 226, 74, 59, 65, 118, 115, 195, 33, 106, 194, 186, 125, 159, 105, 12, 184, 167, 37, 29, 203, 96, 55, 199, 204, 171, 132, 157, 225, 32, 172, 153, 214, 43, 175, 93, 69, 43, 179, 207, 235, 224, 240, 0, 141, 132, 120, 8, 164, 216, 241, 68, 188, 253, 246, 59, 224, 50, 131, 234, 171, 87, 38, 175, 71, 235, 13, 240, 103, 250, 154, 10, 219, 147, 38, 19, 151] - ], - "iv": null, - "key": [92, 180, 22, 224, 122, 19, 57, 67, 58, 29, 241, 178, 65, 90, 78, 192, 191, 195, 205, 134, 116, 26, 252, 92, 64, 132, 84, 233, 5, 185, 104, 224], - "modeOfOperation": "ctr", - "plaintext": [ - [141, 211, 109, 47, 152, 14, 96, 46, 203, 217, 177, 179, 237, 117, 92, 0, 136, 200, 53, 62, 230, 12, 95, 60, 76, 38, 74, 11, 206, 65, 26, 60, 64, 57, 1, 144, 224, 195, 104, 88, 156, 203, 136, 241, 181, 222, 145, 155, 235, 23, 164, 183, 116, 196, 206, 149, 254, 103, 204, 90, 5, 95, 149, 198, 83, 116, 190, 14, 241, 6, 108, 200, 14, 101, 86, 13, 168, 24, 15, 178, 232, 2, 56, 210, 156, 159, 254, 204, 227, 95, 42, 93, 206, 220, 33, 4, 76, 231, 13, 208, 73, 210, 196, 226, 209, 107, 111, 156, 150, 125, 67, 26, 244, 168, 68, 61, 245, 209, 206, 25, 108, 196, 176, 244, 93, 145, 230, 10, 54] - ], - "segmentSize": null - }, - { - "encrypted": [ - [180, 113, 101, 84, 91, 241, 11, 137, 243, 108, 237, 206, 142, 116, 34, 225, 114, 148, 10, 99, 125, 171, 75, 206, 244, 52, 235, 108, 233, 205, 88, 170, 74, 242, 241, 72, 241, 121, 126, 121, 37, 57, 252, 198, 218, 0, 255, 131, 51, 182, 22, 14, 9, 197, 16, 28, 52, 134, 60, 162, 221, 137, 248, 236, 6, 43, 20, 67, 94, 57, 93, 172, 105, 205, 212, 142, 53, 234, 251, 132, 177, 18, 181, 198, 163, 140, 235, 110, 12, 149, 130, 121, 104, 12, 194, 204, 47, 32, 179, 161, 76, 175, 73, 247, 36, 187, 22, 238, 96, 199, 238, 75, 254, 63, 207, 87, 122, 112, 72, 190, 231, 46, 189, 119, 251, 161, 152, 80, 230, 133, 110, 30, 75, 26, 166, 41, 98, 243, 219, 13, 225, 25, 21, 245, 128, 231, 63, 1, 183, 252, 251, 152, 253, 24, 92, 223, 142, 153, 32, 20, 9, 208, 117, 151, 207, 77, 75, 198, 217, 116, 202, 162, 165, 223, 124, 29, 176, 36, 9, 210, 169, 157, 156, 99, 45, 145, 185, 79, 3, 190, 54, 196, 78, 150, 218, 67, 26, 182, 150, 236, 37, 212, 53, 129, 219, 8, 222, 171, 87, 201, 38, 150, 7, 188, 61, 109, 97, 153, 167, 158, 114, 206, 34, 99, 100, 191, 65, 131, 196, 139, 184, 151, 112, 235, 196, 248, 52, 254, 42, 220, 16, 208, 226, 57, 198, 78, 52, 11, 21, 217, 55, 190, 197, 37, 254, 232, 78, 62, 132, 27, 131, 36, 108, 227, 16, 20, 124, 112, 48, 125, 179, 194, 188, 166, 152, 67, 241, 244, 48, 58, 114, 75, 112, 119, 28, 236, 78, 17, 102, 137, 235, 209, 129, 97, 238, 57, 237, 146, 246, 26, 43, 114, 146, 120, 119, 30, 128, 176, 98, 202, 184, 25, 99, 185, 200, 140, 68, 42, 232, 106, 195, 34, 234, 88, 142, 190, 72, 62, 87, 17, 52, 110, 149, 155, 10, 82, 159, 53, 78, 226, 200, 168, 137, 3, 130, 254, 161, 195, 80, 141, 28, 5, 119, 61, 243, 31, 191, 77, 135, 199, 249, 56, 97, 21, 73, 85, 191, 58, 215, 165, 89, 76, 167, 203, 48, 240, 19, 111, 159, 210, 213, 33, 72, 133, 120, 89, 76, 115, 181, 119, 83, 254, 119, 96, 36, 192, 56, 189, 47, 12, 167, 214, 83, 130, 70, 43, 83, 232, 1, 92, 158, 26, 69, 111, 138, 161, 185, 154, 253, 10, 64, 246, 168, 48, 100, 206, 84, 207, 64, 69, 101, 135, 49, 1, 99, 173, 15, 79, 185, 171, 185, 1, 218, 128, 156, 25, 84, 231, 187, 24, 184, 104, 39, 183, 147, 87, 19, 49, 77, 13, 9, 7, 109, 133, 105, 136, 95, 210, 46, 153, 248, 113, 227, 142, 254, 209, 219, 245, 242, 2, 40, 73, 225, 80, 190, 25, 72, 4, 199, 153, 169, 144, 60, 15, 126, 154, 187, 254, 124, 119, 110, 32, 171, 25, 47, 48, 102, 179, 164, 199, 171, 80, 61, 183, 201, 40, 41, 217, 65, 139, 239, 33, 3, 20, 133, 15, 64, 126, 131, 57, 249, 110, 243, 131, 212, 127, 234, 100, 98, 180, 165, 80, 35, 168, 143, 39, 59, 115, 183, 25, 121, 84, 116, 101, 230, 228, 20, 94, 27, 242, 105, 227, 24, 35, 29, 13, 132, 227, 63, 162, 30, 29, 224, 152, 222, 59, 17, 28, 109, 206, 114, 203, 188, 222, 106, 183, 121, 126, 71, 165, 210, 249, 64, 141, 81, 168, 139, 178, 23, 168, 37, 83, 110, 83, 13, 89, 233, 250, 104, 214, 201, 196, 197, 165, 53, 30, 89, 198, 204, 178, 195, 156, 103, 145, 126, 147, 66, 89, 132, 9, 228, 152, 53, 101, 41, 198, 160, 145, 136, 164, 130, 200, 199, 62, 92, 238, 43, 64, 106, 79, 34, 232, 133, 95, 77, 169, 244, 233, 199, 45, 223, 187, 108, 40, 156, 52, 24, 216, 136, 170, 187, 231, 173, 147, 29, 233, 103, 154, 57, 88, 199, 13, 88, 122, 139, 206, 96, 133, 139, 142, 72, 67, 132, 36, 174, 244, 192, 39, 252, 157, 218, 145, 119, 126, 22, 160, 119, 2, 167, 150, 33, 92, 155, 46, 62, 151, 223, 45, 136, 23, 6, 201, 227, 137, 134, 243, 222, 237, 54, 29, 195, 183, 151, 184, 35, 30, 196, 251, 41, 174, 242, 146, 80, 121, 58, 135, 94, 164, 119, 239, 169, 201, 175, 112, 163, 123, 202, 192, 198, 228, 125, 142, 166, 179, 194, 40, 158, 97, 0, 162, 214, 24, 165, 25, 52, 154, 129, 111, 12, 131, 187, 139, 136, 60, 27, 81, 240, 198, 146, 118, 192, 73, 197, 234, 4, 149, 30, 83, 18, 227, 217, 16, 59, 28, 221, 214, 55, 142, 122, 139, 100, 1, 23, 60, 131, 196, 53, 134, 88, 2, 97, 67, 232, 224, 102, 9, 53, 254, 138, 47, 174, 135, 120, 44, 189, 209, 178, 15, 222, 137, 219, 200, 96, 181, 162, 58, 171, 241, 170, 221, 50, 153, 80, 103, 193, 158, 44, 141, 230, 254, 150, 105, 185, 27, 139, 213, 222, 251, 116, 113, 126, 19, 169, 58, 217, 82, 9, 241, 1, 83, 200, 5, 6, 247, 140, 200, 114, 217, 133, 84, 123, 134, 255, 12, 203, 175, 60, 132, 163, 195, 115, 234, 169, 99, 222, 200, 133, 187, 53, 79, 157, 124, 79, 199, 129, 123, 158, 241, 41, 132, 33, 12, 79, 81, 233, 96, 55, 154, 80, 28, 127, 30, 131, 211, 188, 178, 167, 21, 73, 27, 47, 22, 172, 103, 6, 106, 194, 49, 254, 111, 93, 211, 119, 41, 21, 171, 89, 142, 163, 106, 166, 233, 46, 190, 167, 172, 233, 254, 109, 193, 77, 10, 251, 20, 219, 183, 52, 40, 142, 252, 235, 140, 193, 189, 254, 187, 26, 100, 213, 51, 36, 234, 233, 58, 128, 57, 122, 217, 152, 160, 177, 108, 227, 179, 112, 151, 209, 8, 105, 13, 178, 250, 171, 116, 131, 220, 18, 250, 195, 195, 209, 206, 232, 19, 173, 202, 81, 60, 128, 128, 243, 116, 121, 214, 231, 107, 68, 219, 240, 194, 99, 133, 157, 223, 190, 70, 166, 217, 197, 56, 157, 236, 208, 119, 8, 169, 242, 62, 254, 55, 250, 255, 200, 39, 70, 134, 192, 63, 148, 177, 224, 94, 94, 127, 220, 69, 25, 244, 67, 207, 162, 254, 222, 197, 59, 24, 17, 66, 98, 173, 4, 225, 207, 236, 0, 215, 7, 234, 64, 128, 180, 90, 79, 25, 111, 217, 15, 191, 239, 61, 13, 90, 80, 11, 126, 213, 236, 34, 188, 58, 89, 202, 196, 93, 33, 126, 125, 180, 78, 39, 172, 54, 77, 64, 155, 185, 46, 52, 158, 126, 248, 227, 112, 213, 62, 179, 239, 99, 154, 84, 26, 46, 109, 112, 30, 52, 72, 202, 191, 146, 246, 100, 76, 43, 124, 162, 136, 154, 233, 240, 28, 75, 21, 227, 60, 1, 132, 251, 154, 109, 141, 126, 13, 49, 226, 73, 222, 54, 82, 65, 207, 155, 89, 51, 189, 56, 100, 255, 168, 163, 154, 106, 108, 207, 116, 64, 242, 107, 21, 91, 86, 143, 175, 226, 64, 87, 29, 111, 212, 44, 128, 126, 88, 88, 103, 137, 175, 224, 142, 92, 169, 193, 78, 191, 117, 39, 141, 153, 30, 101, 114, 26, 128, 33, 211, 240, 146, 126, 111, 88, 39, 203, 240, 3, 107, 43, 142, 152, 2, 49, 220, 113, 189, 100, 33, 254, 253, 208, 155, 46, 173, 151, 85, 193, 72, 156, 26, 10, 226, 15, 168, 172, 32, 31, 117, 31, 81, 91, 114, 212, 93, 6, 59, 198, 124, 254, 16, 56, 56, 162, 197, 249, 122, 128, 21, 28, 253, 93, 62, 19, 234, 159, 80, 23, 209, 39, 175, 161, 97, 198, 50, 226, 126, 46, 148, 163, 255, 51, 54, 234, 228, 49, 149, 245, 92, 187, 0, 37, 9, 111, 107, 210, 139, 137, 253, 185, 216, 92, 12, 10, 226, 171, 78, 53, 21, 207, 29, 49, 223, 58, 50, 248, 175, 10, 230, 174, 173, 145, 71, 152, 165, 202, 174, 90, 84, 11, 181, 28, 48, 60, 124, 210, 239, 218, 133, 200, 143, 59, 127, 31, 103, 55, 162, 13, 192, 228, 47, 175, 107, 124, 33, 45, 58, 39, 99, 175, 90, 10, 69, 82, 114, 136, 103, 37, 173, 2, 106, 225, 196, 26, 30, 168, 83, 10, 25, 151, 67, 49, 136, 159, 13, 70, 69, 9, 225, 161, 211, 71, 150, 219, 199, 49, 163, 195, 252, 83, 230, 20, 224, 43, 166, 13, 102, 215, 154, 211, 112, 56, 43, 10, 202, 225, 180, 63, 107, 35, 160, 118, 121, 149, 125, 128, 76, 121, 225, 143, 75, 78, 54, 204, 162, 155, 1, 128, 244, 252, 216, 2, 8, 196, 49, 45, 23, 105, 234, 152, 213, 34, 145, 174], - [111, 225, 255, 48, 4, 138, 147, 238, 238, 126, 75, 82, 179, 74, 191, 202, 9, 164, 252, 5, 103, 207, 215, 174, 217, 161, 247, 200, 209, 88, 39, 239, 163, 51, 190, 122, 44, 252, 216, 116, 106, 251, 187, 70, 13, 79, 162, 91, 204, 141, 195, 107, 101, 99, 160, 70, 249, 212, 65, 187, 92, 50, 20, 130, 29, 120, 101, 5, 79, 204, 43, 139, 80, 44, 7, 98, 216, 186, 221, 151, 107, 222, 165, 17, 45, 71, 112, 98, 60, 109, 127, 90, 17, 201, 231, 38, 33, 106, 59, 151, 18, 184, 38, 78, 190, 153, 139, 76, 164, 2, 217, 203, 124, 248, 234, 60, 66, 33, 32, 8, 161, 152, 180, 142, 216, 110, 54, 250, 159, 209, 110, 47, 142, 172, 19, 118, 214, 192, 85, 248, 99, 28, 0, 177, 231, 208, 89, 118, 99, 182, 179, 97, 96, 178, 250, 18, 100, 186, 16, 220, 58, 177, 85, 104, 21, 42, 186, 38, 112, 58, 171, 103, 252, 99, 116, 83, 209, 202, 29, 239, 173, 54, 71, 223, 118, 13, 141, 71, 147, 39, 2, 48, 35, 60, 104, 119, 7, 215, 79, 209, 84, 155, 53, 153, 110, 207, 65, 28, 176, 82, 208, 212, 186, 200, 28, 160, 175, 69, 12, 165, 95, 38, 221, 250, 189, 103, 48, 15, 109, 119, 131, 207, 133, 12, 151, 221, 25, 233, 153, 168, 15, 134, 53, 208, 117, 186, 64, 88, 42, 163, 140, 202, 151, 35, 124, 219, 4, 135, 97, 156, 11, 156, 67, 161, 12, 203, 35, 202, 203, 247, 35, 85, 61, 102, 184, 126, 130, 234, 93, 197, 119, 225, 112, 240, 124, 167, 94, 112, 36, 162, 128, 5, 62, 43, 50, 220, 146, 51, 52, 207, 156, 113, 120, 1, 201, 45, 23, 215, 130, 100, 178, 169, 96, 115, 32, 80, 187, 1, 45, 103, 110, 70, 22, 140, 146, 212, 88, 58, 148, 167, 41, 170, 149, 154, 202, 117, 195, 146, 181, 82, 199, 255, 37, 81, 149, 244, 142, 43, 239, 50, 163, 17, 149, 133, 248, 219, 125, 114, 8, 249, 81, 76, 80, 63, 26, 208, 205, 192, 31, 151, 60, 245, 178, 125, 17, 74, 44, 150, 51, 200, 42, 38, 244, 38, 74, 11, 182, 253, 68, 87, 197, 97, 136, 176, 8, 14, 97, 138, 246, 238, 121, 6, 147, 81, 131, 113, 140, 122, 206, 214, 251, 99, 239, 191, 235, 194, 81, 115, 152, 34, 210, 215, 56, 222, 71, 156, 48, 148, 136, 38, 29, 246, 176, 214, 213, 147, 209, 88, 122, 42, 50, 92, 126, 189, 60, 99, 52, 113, 216, 24, 70, 69, 193, 199, 178, 29, 118, 5, 98, 247, 14, 95, 40, 181, 22, 253, 148, 153, 224, 14, 10, 113, 165, 32, 4, 68, 40, 160, 176, 57, 166, 60, 65, 215, 149, 156, 162, 100, 35, 176, 33, 199, 115, 255, 236, 60, 160, 15, 89, 95, 155, 130, 248, 55, 75, 29, 47, 1, 25, 161, 251, 122, 14, 50, 37, 48, 173, 66, 217, 22, 16, 4, 191, 159, 3, 45, 198, 223, 82, 193, 191, 6, 190, 72, 157, 19, 175, 208, 38, 20, 10, 169, 126, 146, 241, 83, 197, 253, 157, 228, 170, 126, 134, 43, 230, 60, 206, 87, 37, 96, 68, 18, 126, 136, 222, 83, 99, 100, 109, 86, 67, 152, 159, 63, 250, 189, 246, 130, 255, 36, 128, 153, 32, 126, 135, 123, 0, 11, 230, 221, 86, 241, 181, 37, 249, 12, 158, 216, 10, 222, 35, 123, 121, 185, 8, 235, 206, 51, 60, 58, 39, 97, 92, 6, 132, 140, 81, 254, 239, 187, 212, 159, 160, 156, 181, 214, 78, 239, 58, 48, 200, 229, 204, 137, 32, 31, 177, 76, 31, 213, 30, 50, 135, 211, 15, 239, 201, 183, 107, 59, 203, 32, 136, 110, 76, 21, 166, 220, 185, 181, 190, 150, 182, 30, 222, 10, 198, 146, 100, 104, 78, 39, 50, 192, 158, 158, 133, 139, 110, 169, 20, 223, 54, 255, 150, 97, 254, 160, 150, 185, 164, 26, 197, 144, 254, 183, 236, 25, 189, 227, 19, 28, 74, 130, 86, 52, 80, 196, 243, 60, 82, 50, 54, 89, 110, 166, 242, 40, 26, 68, 123, 241, 196, 126, 156, 94, 131, 158, 95, 78, 64, 0, 49, 123, 81, 168, 73, 222, 129, 200, 245, 235, 87, 37, 82, 155, 175, 23, 200, 236, 240, 91, 178, 37, 174, 164, 235, 236, 115, 55, 20, 250, 173, 185, 126, 106, 122, 119, 113, 189, 9, 32, 219, 123, 68, 159, 35, 201, 28, 250, 44, 39, 36, 60, 159, 101, 210, 11, 115, 237, 224, 83, 187, 147, 138, 126, 255, 152, 170, 161, 124, 111, 211, 231, 119, 44, 86, 112, 82, 236, 181, 122, 223, 9, 167, 122, 48, 215, 53, 118, 49, 91, 174, 95, 53, 243, 37, 224, 241, 156, 156, 188, 221, 228, 25, 176, 136, 153, 254, 11, 58, 190, 52, 12, 139, 42, 25, 149, 150, 46, 187, 116, 173, 214, 99, 92, 0, 24, 61, 3, 96, 141, 181, 130, 54, 238, 42, 113, 161, 91, 113, 65, 10, 238, 129, 161, 187, 202, 45, 54, 222, 135, 189, 157, 219, 85, 216, 150, 226, 93, 165, 212, 33, 88, 82, 139, 43, 246, 214, 253, 154, 160, 85, 31, 250, 51, 84, 10, 17, 67, 13, 202, 23, 126, 46, 196, 156, 212, 227, 244, 206, 61, 199, 140, 47, 248, 166, 138, 97, 6, 21, 78, 112, 33, 253, 12, 135, 89, 72, 255, 8, 29, 125, 246, 168, 182, 28, 212, 242, 40, 41, 217, 225, 221, 30, 200, 196, 154, 94, 30, 117, 219, 100, 108, 32, 151, 39, 75, 29, 18, 4, 79, 67, 176, 64, 27, 135, 22, 117, 90, 154, 80, 212, 156, 29, 18, 190, 196, 8, 25, 245, 237, 119, 72, 156, 28, 232, 0, 122, 57, 214, 14, 17, 97, 241, 122, 171, 16, 121, 176, 232, 119, 1, 204, 109, 89, 252, 146, 166, 127, 16, 230, 236, 226, 2, 62, 147, 106, 127, 147, 228, 19, 99, 60, 244, 110, 142, 68, 226, 187, 4, 92, 92, 206, 151, 227, 195, 204, 89, 74, 150, 166, 25, 112, 192, 56, 199, 129, 221, 243, 68, 63, 106, 251, 211, 124, 5, 246, 174, 136, 164, 200, 131, 50, 8, 67, 2, 150, 59, 193, 211, 223, 110, 68, 16, 52, 178, 156, 191, 197, 186, 252, 175, 162, 146, 162, 4, 186, 215, 33, 8, 69, 7, 167, 93, 90, 132, 169, 162, 200, 54, 244, 250, 222, 226, 103, 252, 148, 167, 222, 209, 102, 232, 179, 13, 103, 127, 175, 14, 223, 107, 182, 82, 180, 89, 164, 92, 90, 154, 193, 66, 167, 255, 95, 195, 166, 216, 100, 232, 88, 108, 111, 252, 206, 189, 20, 217, 156, 94, 163, 71, 144, 67, 175, 110, 4, 183, 87, 105, 164, 174, 132, 191, 227, 3, 176, 168, 152, 218, 89, 210, 134, 163, 2, 87, 142, 230, 140, 211, 186, 129, 222, 36, 243, 95, 38, 128, 198, 254, 138, 14, 254, 3, 177, 132, 239, 74, 106, 183, 247, 60, 39, 142, 239, 41, 151, 174, 161, 125, 142, 248, 126, 204, 207, 93, 17, 12, 10, 148, 4, 226, 25, 28, 24, 191, 7, 1, 235, 155, 93, 36, 163, 22, 11, 249, 34, 59, 182, 162, 9, 218, 42, 112, 175, 114, 146, 5, 13, 68, 131, 137, 239, 9, 8, 193, 45, 123, 129, 7, 199, 230, 209, 253, 218, 244, 138, 18, 158, 111, 79, 72, 248, 145, 186, 59, 79, 0, 161, 49, 54, 75, 216, 127, 39, 150, 112, 190, 109, 156, 90, 206, 21, 7, 126, 151, 62, 131, 87, 53, 141, 41, 246, 105, 205, 111, 133, 17, 25, 207, 108, 46, 112, 126, 45, 17, 59, 226, 204, 234, 231, 156, 12, 43, 222, 223, 162, 7, 221, 164, 29, 247, 140, 169, 154, 251, 89, 5, 42, 10, 5, 103, 170, 89, 69, 228, 19, 180, 7, 10, 169, 96, 150, 219, 81, 96, 50, 184, 14, 124, 215, 94, 248, 249, 129, 42, 149, 250, 167, 84, 95, 245, 92, 156, 103, 48, 35, 76, 79, 5, 19, 133, 183, 219, 179, 143, 103, 19, 211, 223, 71, 144, 135, 110, 249, 67, 44, 250, 226, 169, 83, 232, 78, 126, 86, 72, 11, 48, 136, 1, 192, 111, 187, 130, 39, 242, 67, 76, 228, 134, 88, 247, 155, 40, 100, 143, 237, 15, 229, 239, 63, 216, 73, 246, 12, 69, 202, 56, 54, 132, 223, 88, 199, 229, 97, 97, 105, 202, 226, 157, 136, 208, 201, 168, 14, 93, 155, 131, 221, 24, 245, 235, 112, 85, 46, 39, 102, 184, 27, 58, 86, 66, 50, 68, 168, 23, 252, 14, 190, 23, 22, 40, 194, 92, 181, 139, 17, 184, 149, 7, 201], - [117, 105, 67, 98, 110, 12, 21, 66, 26, 72, 208, 245, 223, 174, 124, 205, 33, 103, 191, 77, 40, 199, 228, 133, 149, 119, 128, 218, 171, 211, 231, 162, 176, 187, 115, 56, 226, 116, 61, 232, 12, 18, 134, 30, 185, 124, 112, 139, 230, 20, 72, 92, 184, 165, 166, 34, 121, 195, 135, 5, 229, 31, 149, 197, 14, 126, 164, 245, 16, 6, 112, 28, 110, 169, 74, 181, 17, 250, 121, 28, 136, 57, 17, 126, 155, 2, 21, 180, 111, 143, 78, 205, 1, 254, 249, 214, 110, 103, 66, 49, 232, 153, 86, 51, 222, 217, 212, 168, 204, 13, 122, 208, 83, 252, 71, 233, 117, 238, 199, 212, 103, 9, 94, 46, 37, 142, 123, 239, 247, 192, 97, 4, 158, 162, 35, 150, 152, 17, 99, 79, 243, 105, 250, 192, 122, 30, 79, 49, 220, 244, 186, 216, 27, 240, 112, 16, 222, 92, 153, 116, 238, 49, 209, 78, 72, 176, 160, 163, 50, 241, 29, 118, 172, 58, 219, 207, 10, 187, 199, 125, 61, 128, 113, 220, 6, 252, 9, 170, 39, 65, 235, 112, 24, 189, 85, 113, 65, 241, 181, 175, 222, 105, 70, 222, 233, 62, 226, 240, 13, 109, 206, 16, 89, 73, 223, 248, 66, 117, 156, 237, 62, 179, 104, 144, 142, 214, 171, 53, 162, 13, 192, 155, 106, 78, 173, 11, 190, 164, 126, 78, 150, 9, 176, 230, 148, 55, 194, 162, 31, 107, 222, 140, 23, 83, 143, 204, 24, 254, 231, 17, 161, 14, 93, 196, 88, 235, 219, 41, 232, 19, 232, 212, 35, 104, 82, 207, 207, 85, 233, 229, 198, 94, 66, 226, 15, 103, 224, 17, 239, 246, 188, 47, 180, 254, 234, 108, 22, 160, 227, 57, 123, 59, 230, 126, 116, 32, 71, 126, 116, 138, 157, 106, 106, 46, 138, 124, 49, 54, 148, 78, 188, 49, 31, 26, 121, 69, 80, 47, 156, 8, 126, 217, 54, 34, 54, 135, 90, 220, 152, 186, 234, 254, 114, 157, 124, 172, 154, 133, 179, 248, 171, 121, 190, 145, 23, 154, 241, 202, 192, 236, 104, 160, 113, 82, 250, 48, 85, 188, 203, 250, 189, 139, 134, 81, 255, 61, 182, 119, 93, 5, 25, 69, 128, 146, 20, 254, 155, 23, 181, 1, 117, 147, 80, 32, 112, 88, 11, 172, 27, 165, 195, 184, 0, 216, 195, 18, 216, 182, 205, 203, 29, 228, 207, 165, 105, 195, 147, 6, 138, 74, 131, 138, 213, 69, 209, 136, 166, 71, 160, 137, 39, 173, 231, 57, 68, 51, 79, 134, 153, 203, 73, 245, 218, 66, 194, 174, 57, 112, 104, 142, 14, 107, 246, 160, 255, 59, 131, 1, 200, 89, 88, 176, 87, 233, 35, 229, 45, 70, 107, 36, 73, 2, 103, 39, 154, 143, 175, 118, 127, 172, 1, 22, 151, 144, 219, 128, 218, 154, 133, 164, 44, 189, 168, 115, 115, 75, 241, 201, 170, 90, 59, 255, 7, 15, 97, 33, 181, 102, 121, 120, 183, 21, 18, 62, 70, 112, 124, 244, 137, 211, 39, 38, 144, 144, 206, 154, 238, 36, 44, 204, 167, 184, 108, 90, 178, 10, 243, 196, 59, 38, 13, 34, 42, 220, 148, 29, 18, 116, 206, 195, 214, 0, 150, 172, 67, 15, 213, 252, 201, 136, 210, 178, 222, 225, 244, 83, 220, 137, 46, 144, 27, 248, 135, 224, 155, 53, 131, 132, 36, 188, 78, 48, 54, 79, 182, 1, 159, 103, 21, 4, 15, 177, 125, 153, 144, 104, 163, 158, 225, 38, 53, 182, 77, 123, 66, 221, 130, 123, 66, 152, 192, 172, 2, 19, 252, 81, 100, 157, 42, 96, 103, 30, 121, 39, 8, 93, 138, 199, 251, 110, 211, 165, 69, 65, 122, 154, 154, 239, 238, 90, 89, 122, 184, 217, 160, 126, 117, 156, 94, 198, 38, 235, 177, 36, 170, 157, 202, 54, 121, 213, 48, 200, 44, 122, 17, 211, 207, 73, 152, 28, 246, 202, 41, 104, 83, 28, 205, 114, 249, 62, 217, 236, 12, 58, 143, 226, 60, 249, 191, 128, 52, 49, 139, 198, 94, 247, 118, 207, 20, 150, 180, 102, 62, 218, 186, 97, 203, 34, 37, 234, 59, 62, 73, 253, 52, 105, 90, 214, 144, 146, 76, 209, 141, 6, 91, 45, 160, 54, 152, 71, 247, 237, 86, 41, 199, 77, 210, 124, 1, 172, 150, 245, 203, 62, 48, 228, 150, 248, 25, 33, 9, 3, 186, 148, 4, 210, 18, 22, 62, 135, 159, 135, 174, 37, 98, 10, 152, 237, 69, 242, 86, 7, 169, 220, 224, 7, 36, 173, 51, 81, 101, 71, 211, 53, 250, 94, 233, 81, 25, 240, 43, 30, 44, 83, 48, 221, 121, 187, 65, 101, 222, 92, 57, 36, 106, 22, 41, 242, 48, 161, 72, 100, 38, 215, 171, 235, 134, 231, 6, 245, 24, 226, 204, 5, 129, 234, 178, 189, 66, 119, 149, 176, 31, 114, 230, 251, 59, 46, 45, 57, 108, 51, 51, 56, 171, 99, 85, 143, 50, 125, 199, 103, 137, 124, 250, 162, 182, 40, 54, 12, 111, 176, 67, 231, 134, 201, 133, 181, 141, 62, 187, 72, 148, 201, 54, 59, 43, 24, 4, 50, 104, 177, 235, 180, 158, 7, 126, 68, 190, 1, 168, 17, 98, 240, 104, 233, 249, 200, 119, 14, 252, 31, 123, 187, 50, 235, 13, 4, 42, 201, 161, 177, 158, 138, 148, 248, 55, 254, 60, 139, 24, 61, 55, 215, 239, 93, 163, 237, 227, 106, 94, 147, 225, 166, 56, 40, 75, 225, 167, 226, 22, 94, 202, 89, 17, 101, 102, 241, 89, 66, 103, 230, 0, 35, 67, 145, 145, 84, 189, 9, 204, 214, 40, 123, 29, 148, 193, 179, 237, 99, 214, 1, 205, 22, 51, 226, 228, 7, 237, 238, 102, 22, 155, 126, 118, 21, 44, 196, 237, 113, 178, 52, 66, 27, 197, 150, 60, 12, 234, 65, 121, 53, 162, 120, 109, 67, 33, 143, 69, 34, 146, 236, 2, 2, 35, 109, 81, 237, 100, 133, 25, 75, 16, 7, 200, 23, 153, 32, 236, 75, 113, 176, 254, 87, 239, 175, 166, 155, 54, 169, 218, 148, 7, 20, 94, 85, 118, 47, 252, 115, 172, 97, 139, 253, 225, 154, 182, 119, 234, 72, 93, 152, 88, 200, 204, 243, 203, 2, 136, 88, 18, 78, 104, 140, 97, 72, 238, 82, 112, 32, 232, 135, 149, 174, 78, 62, 14, 118, 176, 67, 235, 143, 124, 201, 51, 238, 84, 103, 207, 21, 91, 101, 165, 10, 152, 16, 131, 212, 249, 107, 1, 216, 246, 206, 233, 243, 87, 243, 148, 2, 47, 99, 29, 96, 245, 151, 162, 57, 101, 167, 112, 135, 13, 111, 89, 114, 138, 208, 57, 108, 12, 156, 142, 110, 53, 98, 64, 201, 189, 187, 166, 204, 102, 149, 233, 213, 124, 193, 250, 231, 34, 146, 239, 127, 120, 184, 133, 7, 134, 117, 200, 3, 149, 246, 203, 68, 191, 44, 135, 156, 228, 49, 113, 236, 52, 201, 200, 244, 15, 168, 226, 76, 55, 220, 168, 162, 187, 240, 120, 146, 71, 13, 197, 158, 102, 218, 55, 237, 49, 103, 15, 250, 121, 67, 0, 2, 95, 197, 214, 228, 233, 207, 158, 44, 156, 30, 234, 239, 189, 137, 40, 224, 131, 41, 133, 210, 147, 8, 129, 179, 252, 120, 123, 218, 146, 142, 180, 222, 224, 35, 40, 91, 154, 4, 149, 220, 237, 185, 230, 196, 161, 224, 30, 226, 10, 172, 161, 92, 69, 151, 73, 255, 157, 197, 139, 5, 220, 125, 169, 136, 122, 71, 164, 85, 120, 111, 80, 50, 77, 64, 130, 116, 163, 177, 153, 140, 233, 36, 234, 214, 41, 3, 171, 12, 202, 171, 179, 220, 127, 183, 63, 176, 76, 129, 208, 106, 7, 254, 166, 220, 0, 182, 92, 82, 108, 176, 123, 28, 30, 2, 173, 32, 151, 20, 33, 242, 252, 114, 126, 17, 22, 152, 42, 132, 67, 207, 24, 22, 72, 242, 28, 65, 112, 72, 18, 226, 64, 160, 11, 44, 202, 183, 147, 32, 186, 104, 163, 51, 211, 191, 72, 209, 59, 250, 219, 63, 221, 87, 21, 221, 2, 56, 194, 63, 142, 118, 238, 168, 21, 212, 48, 72, 167, 248, 71, 179, 29, 226, 143, 103, 113, 228, 39, 218, 11, 148, 124, 102, 37, 82, 130, 67, 147, 55, 146, 30, 249, 57, 18, 180, 48, 242, 37, 212, 168, 134, 192, 85, 226, 4, 148, 145, 159, 7, 182, 70, 3, 228, 122, 84, 189, 147, 111, 144, 124, 27, 105, 187, 0, 239, 29, 250, 165, 196, 40, 123, 195, 35, 106, 83, 15, 93, 52, 69, 5, 188, 217, 133, 173, 111, 239, 154, 77, 122, 94, 151, 110, 17, 168, 192, 9, 45, 229, 248, 37, 43, 29, 223, 231, 149, 54, 20, 151, 189, 122, 209, 155, 104, 244, 38], - [147, 107, 3, 67, 236, 5, 14, 153, 149, 229, 103, 113, 70, 82, 56, 4, 184, 61, 14, 60, 41, 107, 3, 162, 228, 97, 32, 27, 253, 214, 99, 67, 48, 168, 227, 6, 240, 102, 144, 69, 26, 176, 187, 45, 163, 140, 98, 86, 11, 234, 119, 31, 103, 145, 163, 243, 54, 194, 39, 128, 26, 44, 249, 6, 252, 123, 114, 13, 225, 97, 104, 122, 233, 98, 97, 54, 171, 249, 17, 107, 2, 165, 86, 138, 174, 238, 218, 26, 81, 8, 197, 61, 174, 54, 221, 31, 78, 241, 199, 0, 218, 49, 123, 10, 177, 103, 109, 32, 62, 33, 17, 16, 206, 172, 186, 196, 90, 252, 239, 27, 5, 61, 51, 151, 17, 72, 55, 248, 150, 53, 15, 152, 11, 18, 84, 30, 46, 108, 202, 182, 107, 34, 37, 154, 9, 16, 210, 154, 102, 19, 201, 166, 74, 214, 59, 236, 230, 171, 211, 3, 74, 110, 61, 173, 234, 82, 30, 168, 65, 187, 33, 170, 184, 142, 55, 9, 169, 77, 192, 204, 162, 90, 44, 69, 140, 13, 106, 131, 176, 57, 139, 64, 184, 76, 200, 37, 166, 136, 120, 6, 10, 232, 206, 89, 134, 58, 228, 51, 168, 91, 144, 241, 180, 203, 28, 51, 229, 180, 67, 94, 6, 39, 98, 248, 181, 227, 246, 34, 40, 77, 128, 221, 32, 138, 28, 59, 63, 78, 48, 33, 7, 229, 234, 230, 65, 209, 139, 119, 69, 232, 109, 54, 92, 210, 66, 74, 219, 160, 194, 247, 57, 241, 91, 36, 36, 233, 249, 245, 182, 198, 123, 109, 12, 188, 218, 131, 165, 200, 50, 99, 249, 136, 241, 68, 17, 25, 176, 141, 222, 61, 152, 154, 59, 115, 185, 233, 154, 121, 136, 121, 47, 106, 55, 135, 240, 114, 222, 92, 222, 199, 70, 100, 185, 206, 188, 56, 118, 114, 52, 171, 224, 155, 99, 101, 4, 42, 150, 56, 204, 214, 80, 129, 43, 246, 20, 32, 168, 45, 144, 239, 68, 201, 88, 179, 153, 174, 220, 152, 80, 183, 123, 17, 135, 238, 49, 230, 40, 152, 242, 38, 94, 223, 132, 106, 106, 255, 54, 202, 59, 35, 101, 226, 76, 226, 150, 57, 158, 133, 246, 170, 79, 180, 87, 129, 223, 16, 41, 37, 150, 73, 136, 65, 61, 235, 210, 152, 184, 99, 107, 25, 95, 65, 143, 89, 210, 225, 80, 71, 128, 4, 23, 155, 33, 49, 122, 160, 207, 172, 37, 243, 251, 107, 59, 115, 237, 148, 146, 175, 23, 138, 62, 245, 27, 96, 213, 60, 154, 143, 233, 127, 19, 246, 22, 132, 222, 122, 145, 97, 140, 231, 206, 233, 68, 173, 184, 190, 247, 239, 54, 39, 185, 60, 127, 103, 207, 0, 161, 212, 0, 108, 165, 42, 184, 40, 155, 117, 233, 165, 26, 75, 204, 2, 209, 248, 255, 127, 28, 135, 93, 229, 230, 239, 76, 206, 224, 251, 173, 57, 142, 61, 5, 6, 136, 66, 130, 38, 31, 59, 127, 179, 174, 187, 144, 171, 254, 71, 130, 84, 130, 176, 148, 178, 247, 145, 232, 151, 111, 148, 17, 18, 236, 57, 127, 162, 94, 17, 79, 131, 189, 251, 196, 255, 222, 12, 146, 71, 197, 8, 22, 48, 202, 4, 199, 196, 153, 94, 201, 183, 170, 206, 114, 241, 243, 55, 251, 97, 218, 40, 6, 175, 179, 38, 193, 160, 118, 229, 230, 89, 47, 90, 253, 163, 105, 191, 75, 236, 198, 132, 61, 228, 121, 78, 77, 113, 103, 34, 193, 1, 118, 24, 203, 151, 224, 154, 77, 55, 121, 68, 163, 154, 105, 233, 58, 193, 187, 192, 211, 63, 44, 64, 211, 160, 175, 68, 119, 103, 96, 5, 26, 133, 190, 80, 118, 59, 255, 149, 37, 201, 203, 239, 107, 222, 123, 184, 162, 73, 83, 11, 1, 136, 66, 28, 214, 68, 31, 219, 18, 206, 172, 112, 6, 210, 136, 104, 215, 242, 87, 133, 53, 21, 91, 58, 184, 252, 199, 181, 87, 82, 188, 2, 29, 8, 161, 13, 200, 65, 249, 138, 73, 122, 27, 216, 54, 236, 155, 4, 124, 26, 196, 163, 252, 124, 223, 36, 87, 122, 14, 228, 80, 218, 236, 51, 38, 85, 63, 100, 251, 171, 137, 53, 169, 250, 45, 8, 108, 132, 20, 224, 63, 29, 206, 243, 160, 34, 185, 191, 47, 199, 200, 196, 151, 44, 233, 237, 89, 11, 72, 65, 98, 168, 108, 31, 7, 246, 56, 108, 166, 174, 128, 89, 145, 95, 181, 234, 84, 8, 98, 155, 40, 151, 213, 201, 248, 192, 234, 28, 103, 144, 10, 211, 3, 74, 165, 93, 107, 234, 3, 34, 194, 165, 162, 209, 108, 81, 21, 49, 6, 144, 39, 176, 44, 66, 216, 107, 223, 184, 201, 167, 195, 81, 67, 171, 32, 32, 30, 80, 20, 0, 235, 82, 134, 244, 238, 73, 62, 120, 104, 111, 246, 92, 246, 109, 239, 59, 234, 159, 10, 250, 138, 202, 217, 63, 177, 78, 104, 27, 86, 143, 5, 202, 151, 239, 39, 71, 164, 211, 166, 133, 70, 128, 151, 39, 153, 193, 232, 76, 35, 192, 19, 18, 26, 161, 63, 97, 3, 42, 189, 133, 28, 4, 222, 36, 36, 202, 134, 81, 135, 121, 55, 121, 56, 178, 21, 170, 220, 134, 203, 171, 226, 107, 216, 63, 183, 206, 47, 76, 149, 250, 143, 100, 75, 110, 2, 81, 98, 15, 22, 135, 242, 69, 138, 196, 71, 119, 193, 55, 194, 175, 203, 141, 124, 67, 225, 242, 56, 20, 192, 40, 97, 198, 161, 67, 37, 110, 72, 39, 5, 143, 157, 233, 193, 86, 190, 144, 192, 32, 134, 107, 107, 125, 230, 149, 15, 73, 223, 87, 142, 102, 13, 173, 230, 77, 142, 34, 214, 116, 61, 49, 109, 154, 188, 164, 79, 249, 183, 187, 102, 89, 217, 16, 7, 184, 95, 52, 85, 121, 186, 109, 39, 205, 248, 226, 149, 136, 168, 247, 51, 197, 27, 144, 122, 122, 239, 80, 31, 241, 196, 219, 168, 23, 74, 189, 239, 140, 191, 123, 53, 142, 61, 238, 193, 36, 19, 145, 132, 162, 247, 180, 187, 70, 202, 120, 21, 180, 15, 100, 25, 177, 142, 160, 198, 247, 26, 125, 120, 179, 208, 129, 54, 206, 50, 12, 216, 37, 158, 6, 126, 118, 107, 21, 155, 34, 215, 81, 215, 25, 50, 26, 54, 146, 161, 72, 2, 43, 156, 48, 100, 140, 112, 21, 94, 218, 24, 190, 33, 184, 71, 61, 111, 192, 234, 254, 48, 77, 84, 40, 82, 31, 233, 16, 157, 16, 146, 117, 212, 227, 173, 237, 134, 187, 48, 6, 192, 39, 75, 192, 128, 202, 37, 168, 166, 202, 241, 169, 144, 121, 227, 224, 146, 74, 222, 73, 16, 174, 94, 69, 86, 220, 122, 138, 96, 66, 204, 208, 8, 225, 169, 13, 19, 37, 177, 2, 3, 190, 249, 161, 108, 228, 225, 155, 225, 66, 42, 137, 102, 156, 169, 49, 246, 29, 11, 206, 92, 249, 159, 134, 12, 156, 162, 129, 225, 250, 120, 224, 145, 239, 59, 72, 105, 62, 105, 148, 251, 247, 171, 67, 121, 49, 63, 191, 158, 153, 208, 38, 109, 15, 75, 248, 67, 244, 128, 114, 127, 122, 62, 51, 216, 248, 83, 54, 76, 78, 224, 155, 28, 65, 217, 251, 238, 244, 117, 227, 181, 204, 232, 243, 41, 163, 177, 248, 68, 197, 59, 10, 105, 247, 211, 183, 185, 207, 135, 240, 18, 252, 46, 251, 10, 38, 181, 135, 21, 162, 211, 109, 14, 230, 234, 21, 112, 40, 8, 153, 184, 32, 72, 88, 155, 185, 216, 90, 234, 99, 51, 163, 254, 187, 96, 23, 203, 189, 18, 71, 66, 237, 30, 140, 160, 188, 65, 71, 215, 150, 198, 175, 23, 140, 169, 117, 255, 13, 146, 52, 221, 44, 189, 47, 79, 105, 174, 74, 188, 34, 219, 59, 67, 97, 18, 154, 61, 89, 121, 227, 209, 120, 192, 26, 16, 64, 34, 47, 148, 6, 225, 236, 214, 183, 229, 250, 133, 117, 5, 184, 232, 107, 181, 70, 180, 79, 128, 30, 43, 93, 107, 249, 23, 52, 234, 21, 47, 170, 155, 194, 99, 233, 126, 41, 56, 191, 191, 60, 97, 174, 8, 16, 216, 56, 89, 73, 228, 194, 76, 241, 142, 146, 41, 21, 60, 72, 240, 114, 211, 72, 180, 140, 60, 203, 181, 97, 246, 135, 53, 57, 165, 227, 191, 128, 75, 151, 104, 29, 41, 124, 112, 102, 199, 117, 204, 123, 28, 152, 44, 254, 34, 220, 157, 146, 141, 138, 214, 161, 76, 52, 201, 224, 143, 137, 219, 34, 220, 171, 147, 61, 228, 12, 93, 149, 41, 225, 60, 25, 89, 164, 71, 215, 179, 27, 172, 52, 33, 125, 48, 53, 186, 103, 158, 127, 231, 176, 12, 197, 108, 152, 10, 45, 135, 68, 124, 160, 233, 123], - [145, 176, 173, 221, 206, 52, 92, 252, 245, 226, 0, 50, 19, 159, 254, 27, 218, 44, 143, 61, 50, 71, 191, 142, 24, 103, 49, 70, 79, 146, 135, 23, 254, 108, 31, 196, 164, 145, 206, 112, 194, 204, 34, 124, 187, 7, 176, 74, 136, 52, 129, 55, 20, 18, 221, 29, 116, 48, 49, 37, 77, 2, 101, 93, 209, 142, 115, 130, 220, 178, 20, 117, 39, 93, 134, 90, 109, 103, 208, 222, 157, 78, 86, 215, 143, 188, 147, 48, 169, 177, 42, 4, 252, 39, 225, 98, 162, 1, 238, 129, 38, 156, 52, 211, 171, 106, 83, 132, 56, 38, 7, 195, 9, 38, 141, 140, 31, 110, 252, 93, 34, 61, 144, 28, 156, 186, 15, 182, 40, 19, 36, 187, 60, 68, 240, 244, 188, 111, 107, 50, 120, 23, 80, 118, 113, 1, 224, 188, 184, 198, 196, 86, 152, 115, 115, 172, 142, 133, 24, 93, 69, 181, 232, 72, 208, 226, 29, 58, 74, 45, 6, 49, 102, 21, 228, 176, 163, 36, 15, 26, 191, 33, 122, 212, 37, 119, 100, 188, 169, 252, 188, 10, 230, 215, 194, 207, 134, 150, 119, 111, 45, 12, 12, 32, 22, 37, 165, 38, 238, 139, 119, 68, 74, 214, 130, 171, 72, 167, 50, 178, 1, 231, 240, 37, 36, 228, 78, 247, 152, 54, 6, 123, 250, 183, 97, 54, 77, 121, 12, 132, 171, 51, 8, 107, 157, 27, 102, 83, 5, 70, 251, 150, 23, 156, 15, 83, 105, 157, 164, 200, 247, 190, 50, 201, 6, 238, 81, 131, 203, 232, 199, 105, 119, 136, 160, 70, 113, 255, 242, 3, 117, 169, 102, 220, 23, 26, 165, 95, 58, 108, 119, 245, 233, 210, 85, 217, 160, 13, 106, 249, 228, 147, 45, 89, 156, 36, 203, 8, 133, 226, 221, 96, 193, 169, 210, 54, 90, 67, 249, 122, 244, 52, 233, 47, 252, 203, 127, 71, 194, 157, 251, 228, 252, 134, 70, 45, 181, 199, 100, 234, 41, 246, 8, 45, 67, 203, 235, 178, 23, 179, 189, 49, 119, 158, 180, 215, 22, 245, 175, 154, 177, 36, 55, 48, 97, 189, 107, 126, 227, 203, 158, 189, 93, 157, 10, 37, 95, 112, 33, 24, 164, 183, 228, 114, 59, 121, 163, 205, 110, 255, 111, 176, 120, 122, 157, 173, 160, 138, 68, 102, 50, 102, 21, 220, 198, 30, 204, 170, 116, 188, 62, 23, 185, 130, 215, 178, 223, 61, 104, 225, 104, 157, 5, 102, 82, 46, 201, 96, 0, 200, 18, 76, 116, 251, 152, 106, 211, 157, 65, 113, 15, 124, 66, 212, 80, 23, 219, 93, 25, 196, 60, 118, 200, 69, 66, 33, 72, 132, 243, 66, 16, 126, 232, 161, 80, 140, 109, 160, 171, 96, 195, 112, 18, 248, 8, 176, 20, 253, 73, 243, 36, 189, 28, 22, 84, 54, 13, 134, 11, 27, 57, 94, 2, 78, 212, 175, 5, 178, 244, 206, 203, 37, 52, 138, 152, 74, 23, 69, 57, 6, 135, 80, 188, 15, 20, 132, 204, 112, 128, 189, 24, 133, 68, 157, 75, 34, 59, 183, 216, 59, 116, 87, 243, 88, 173, 197, 255, 79, 255, 159, 178, 68, 184, 135, 96, 198, 8, 184, 82, 126, 193, 28, 169, 134, 101, 80, 76, 122, 163, 213, 154, 250, 35, 39, 61, 55, 60, 65, 221, 76, 165, 94, 13, 66, 137, 89, 236, 155, 137, 148, 211, 63, 45, 230, 77, 2, 152, 160, 190, 242, 195, 72, 43, 96, 255, 44, 49, 134, 9, 64, 44, 90, 146, 40, 84, 8, 172, 144, 231, 26, 44, 69, 216, 126, 158, 17, 8, 29, 111, 128, 133, 121, 10, 123, 201, 7, 127, 168, 128, 8, 23, 84, 25, 107, 246, 70, 180, 181, 239, 104, 10, 118, 85, 143, 121, 181, 44, 32, 86, 132, 14, 79, 221, 43, 95, 49, 64, 76, 93, 84, 152, 136, 86, 126, 175, 177, 90, 106, 177, 150, 225, 94, 103, 114, 41, 254, 100, 141, 216, 243, 210, 87, 221, 39, 249, 153, 67, 109, 37, 233, 102, 219, 99, 90, 245, 222, 12, 105, 136, 84, 111, 21, 30, 184, 27, 127, 218, 8, 21, 171, 165, 196, 109, 224, 234, 189, 130, 74, 238, 253, 27, 16, 93, 42, 113, 27, 13, 104, 152, 201, 31, 251, 38, 1, 206, 121, 151, 102, 87, 115, 197, 116, 161, 242, 135, 252, 79, 62, 163, 204, 247, 115, 130, 34, 38, 74, 16, 191, 48, 204, 212, 205, 241, 207, 195, 105, 239, 243, 184, 120, 3, 199, 130, 148, 29, 246, 150, 153, 197, 49, 228, 9, 253, 117, 212, 233, 101, 97, 198, 54, 50, 125, 87, 81, 12, 211, 185, 193, 151, 37, 156, 195, 110, 232, 104, 88, 122, 114, 113, 34, 10, 35, 210, 204, 200, 225, 112, 114, 189, 205, 78, 40, 22, 5, 228, 38, 189, 43, 139, 88, 131, 222, 104, 251, 250, 37, 4, 20, 67, 160, 94, 130, 60, 89, 140, 165, 39, 163, 70, 118, 120, 225, 61, 15, 78, 102, 38, 128, 232, 144, 124, 152, 54, 102, 17, 23, 26, 187, 188, 100, 124, 10, 143, 130, 94, 89, 81, 66, 105, 234, 150, 71, 69, 149, 138, 232, 16, 17, 179, 254, 70, 202, 175, 247, 141, 132, 106, 96, 107, 200, 153, 129, 14, 141, 252, 251, 7, 51, 23, 241, 18, 132, 158, 41, 159, 29, 89, 172, 158, 116, 46, 170, 209, 126, 43, 148, 78, 184, 142, 197, 167, 127, 223, 204, 203, 242, 125, 155, 150, 23, 132, 52, 97, 221, 6, 102, 123, 56, 199, 162, 223, 42, 237, 17, 93, 229, 54, 235, 100, 227, 123, 209, 13, 131, 78, 2, 241, 42, 45, 131, 109, 159, 139, 45, 39, 241, 223, 199, 248, 97, 0, 205, 221, 156, 192, 213, 16, 196, 28, 252, 187, 163, 36, 59, 163, 107, 52, 31, 146, 136, 39, 99, 175, 99, 30, 200, 27, 185, 73, 148, 39, 6, 40, 68, 132, 117, 53, 31, 192, 31, 113, 162, 192, 75, 41, 52, 7, 77, 99, 142, 221, 42, 155, 225, 107, 1, 111, 27, 114, 252, 109, 125, 202, 38, 237, 4, 141, 143, 50, 190, 252, 128, 100, 235, 152, 240, 174, 101, 112, 170, 116, 186, 176, 114, 77, 51, 211, 161, 137, 15, 177, 10, 146, 246, 158, 7, 64, 214, 92, 178, 37, 87, 184, 30, 80, 223, 29, 48, 197, 171, 195, 156, 119, 53, 253, 29, 40, 230, 75, 149, 243, 27, 234, 122, 176, 5, 115, 24, 219, 47, 33, 177, 158, 58, 107, 247, 102, 175, 95, 201, 150, 126, 73, 247, 51, 222, 237, 51, 214, 239, 206, 105, 63, 72, 230, 53, 248, 70, 142, 224, 202, 222, 53, 21, 204, 181, 100, 170, 21, 232, 72, 80, 52, 143, 62, 161, 198, 241, 240, 8, 100, 226, 156, 233, 97, 9, 247, 92, 70, 39, 170, 182, 22, 179, 229, 157, 132, 4, 40, 23, 161, 56, 213, 152, 65, 58, 161, 8, 39, 43, 111, 107, 237, 224, 239, 8, 205, 71, 193, 188, 203, 25, 113, 240, 38, 165, 166, 136, 72, 130, 47, 169, 46, 193, 110, 129, 20, 1, 137, 194, 138, 13, 169, 77, 152, 225, 197, 131, 213, 147, 85, 63, 171, 142, 169, 13, 30, 148, 165, 21, 151, 219, 73, 203, 58, 77, 33, 206, 101, 140, 149, 131, 99, 115, 173, 177, 141, 70, 229, 154, 13, 189, 249, 107, 150, 225, 161, 97, 21, 86, 23, 142, 225, 123, 185, 223, 143, 221, 210, 166, 39, 213, 220, 179, 175, 26, 25, 48, 112, 115, 149, 118, 137, 29, 190, 189, 195, 251, 243, 161, 171, 27, 103, 22, 225, 96, 79, 192, 98, 183, 8, 68, 79, 199, 173, 144, 131, 215, 127, 43, 40, 185, 62, 124, 139, 185, 196, 141, 82, 35, 120, 99, 215, 207, 180, 248, 6, 105, 215, 13, 118, 93, 254, 225, 178, 195, 246, 211, 35, 190, 32, 109, 8, 160, 85, 235, 100, 251, 193, 96, 104, 127, 8, 205, 171, 223, 247, 210, 130, 65, 117, 122, 105, 152, 128, 229, 249, 56, 49, 254, 245, 93, 82, 107, 60, 178, 48, 64, 28, 31, 189, 39, 188, 49, 122, 42, 201, 94, 232, 202, 170, 7, 208, 10, 251, 37, 13, 63, 4, 240, 211, 107, 254, 114, 255, 11, 142, 180, 204, 154, 67, 187, 25, 136, 253, 166, 28, 155, 25, 108, 90, 216, 248, 121, 50, 6, 248, 114, 153, 162, 57, 134, 93, 135, 42, 231, 147, 201, 22, 82, 251, 13, 231, 55, 236, 108, 250, 27, 130, 80, 49, 113, 6, 103, 75, 107, 202, 36, 193, 61, 206, 51, 90, 241, 112, 139, 18, 138, 159, 179, 158, 66, 13, 99, 239, 195, 235, 240, 210, 104, 163, 50, 249, 124, 29, 81, 88, 7, 157, 163], - [176, 211, 241, 224, 247, 224, 197, 87, 186, 55, 155, 63, 82, 118, 60, 217, 72, 203, 24, 89, 80, 114, 193, 49, 177, 162, 98, 148, 133, 241, 87, 64, 155, 182, 208, 82, 220, 188, 24, 47, 211, 67, 110, 181, 116, 237, 85, 69, 132, 244, 56, 204, 225, 41, 217, 186, 178, 248, 255, 43, 132, 6, 127, 180, 186, 26, 102, 229, 217, 181, 3, 186, 101, 102, 230, 185, 176, 2, 91, 227, 99, 53, 89, 161, 18, 223, 45, 136, 99, 125, 48, 113, 30, 48, 47, 18, 86, 16, 175, 88, 191, 123, 244, 95, 177, 176, 47, 233, 147, 198, 228, 132, 171, 2, 120, 118, 235, 178, 47, 73, 183, 197, 185, 206, 54, 52, 26, 179, 146, 92, 22, 241, 118, 14, 254, 57, 108, 243, 61, 44, 31, 190, 218, 93, 56, 17, 48, 172, 50, 3, 164, 1, 181, 248, 158, 185, 182, 38, 111, 250, 28, 67, 122, 227, 28, 59, 150, 89, 120, 148, 95, 151, 37, 234, 122, 245, 162, 221, 182, 177, 212, 22, 56, 4, 120, 12, 129, 116, 157, 13, 50, 45, 82, 93, 102, 20, 2, 213, 190, 1, 77, 211, 96, 180, 94, 71, 229, 27, 239, 59, 236, 133, 30, 105, 104, 141, 179, 158, 36, 45, 102, 58, 179, 137, 76, 53, 156, 141, 130, 74, 11, 246, 100, 15, 127, 146, 88, 16, 161, 191, 61, 200, 46, 217, 74, 236, 28, 232, 104, 142, 246, 8, 119, 143, 64, 181, 124, 114, 229, 147, 105, 246, 66, 53, 200, 15, 251, 36, 139, 171, 10, 56, 54, 60, 241, 82, 228, 36, 204, 89, 188, 90, 91, 156, 234, 66, 65, 239, 59, 145, 98, 10, 45, 62, 117, 64, 98, 237, 166, 53, 134, 61, 132, 68, 143, 20, 35, 134, 110, 196, 26, 1, 19, 205, 28, 77, 211, 165, 28, 208, 125, 5, 87, 226, 73, 65, 252, 48, 76, 33, 159, 175, 121, 17, 109, 161, 91, 32, 254, 131, 90, 154, 144, 193, 13, 138, 62, 235, 233, 162, 128, 211, 46, 217, 86, 150, 133, 126, 170, 42, 160, 43, 176, 104, 166, 127, 71, 5, 227, 216, 130, 107, 109, 108, 148, 35, 233, 178, 221, 184, 206, 74, 192, 102, 137, 208, 236, 237, 97, 187, 45, 195, 194, 30, 233, 178, 195, 198, 21, 160, 110, 242, 63, 48, 87, 143, 116, 117, 228, 20, 104, 104, 196, 159, 48, 138, 19, 136, 178, 161, 253, 154, 97, 128, 114, 71, 33, 249, 221, 160, 125, 69, 160, 59, 213, 26, 224, 148, 89, 58, 123, 212, 116, 62, 50, 239, 31, 1, 227, 189, 9, 170, 185, 247, 249, 248, 136, 150, 232, 62, 116, 159, 231, 27, 52, 151, 127, 25, 131, 53, 79, 250, 204, 164, 241, 240, 99, 189, 112, 154, 61, 21, 159, 74, 138, 222, 40, 185, 105, 138, 185, 15, 144, 237, 108, 235, 210, 91, 209, 54, 159, 60, 148, 72, 128, 229, 38, 202, 55, 17, 172, 176, 7, 134, 23, 39, 55, 167, 229, 127, 81, 191, 174, 173, 156, 34, 103, 72, 208, 240, 249, 43, 9, 249, 198, 57, 26, 38, 158, 141, 228, 202, 212, 142, 238, 111, 82, 195, 68, 73, 100, 224, 153, 65, 22, 92, 217, 54, 70, 93, 62, 153, 205, 66, 239, 12, 62, 73, 1, 75, 187, 120, 118, 19, 40, 14, 147, 198, 182, 208, 169, 140, 32, 25, 10, 128, 243, 36, 8, 215, 5, 2, 230, 51, 115, 246, 97, 42, 221, 98, 4, 212, 79, 13, 182, 74, 155, 83, 138, 184, 165, 101, 121, 168, 209, 206, 61, 132, 25, 0, 147, 219, 30, 143, 162, 182, 217, 125, 14, 240, 222, 252, 213, 118, 145, 31, 95, 170, 7, 163, 10, 125, 207, 64, 157, 34, 192, 157, 158, 60, 70, 175, 212, 55, 238, 22, 91, 249, 134, 195, 40, 201, 232, 91, 24, 116, 156, 42, 88, 91, 189, 19, 183, 208, 8, 104, 101, 201, 64, 174, 180, 226, 108, 6, 44, 182, 54, 250, 145, 76, 209, 151, 66, 188, 10, 5, 111, 41, 32, 236, 149, 97, 169, 114, 129, 166, 3, 120, 85, 218, 61, 12, 239, 102, 53, 129, 42, 189, 209, 207, 245, 63, 96, 213, 7, 80, 55, 132, 220, 238, 141, 159, 133, 42, 163, 251, 90, 60, 135, 182, 113, 185, 244, 1, 98, 80, 100, 200, 34, 58, 59, 71, 161, 29, 13, 5, 185, 81, 247, 202, 181, 8, 13, 124, 215, 10, 83, 43, 255, 145, 30, 243, 115, 11, 192, 122, 67, 49, 72, 201, 82, 122, 247, 134, 252, 119, 234, 51, 6, 104, 19, 87, 134, 5, 200, 218, 120, 202, 161, 111, 247, 116, 51, 52, 158, 125, 227, 160, 180, 116, 63, 50, 231, 34, 138, 253, 202, 108, 170, 103, 59, 79, 239, 23, 83, 161, 196, 163, 27, 62, 21, 232, 88, 1, 118, 248, 0, 166, 80, 32, 207, 189, 1, 225, 6, 145, 194, 87, 255, 66, 3, 47, 146, 113, 222, 68, 140, 61, 241, 223, 198, 149, 139, 125, 157, 168, 13, 254, 177, 174, 203, 2, 208, 51, 46, 140, 130, 182, 159, 80, 42, 30, 161, 40, 25, 46, 47, 109, 247, 91, 90, 129, 151, 135, 151, 53, 153, 162, 12, 19, 185, 230, 134, 10, 75, 204, 129, 235, 134, 197, 73, 127, 252, 24, 218, 48, 240, 158, 49, 177, 2, 125, 108, 232, 231, 81, 223, 81, 70, 242, 24, 8, 140, 92, 151, 153, 207, 25, 148, 59, 72, 158, 193, 136, 251, 242, 14, 105, 85, 249, 107, 189, 162, 38, 218, 250, 104, 119, 39, 138, 253, 47, 82, 69, 94, 251, 178, 219, 90, 61, 238, 104, 56, 40, 9, 175, 206, 140, 170, 73, 178, 139, 185, 35, 138, 231, 130, 134, 138, 17, 211, 15, 108, 216, 110, 101, 174, 7, 172, 227, 162, 114, 29, 240, 34, 10, 217, 72, 18, 68, 217, 21, 3, 183, 121, 166, 235, 96, 233, 0, 236, 135, 151, 24, 102, 251, 163, 177, 117, 144, 37, 48, 72, 230, 133, 172, 192, 82, 243, 12, 154, 113, 174, 18, 33, 155, 205, 32, 75, 208, 124, 179, 206, 104, 216, 149, 117, 209, 78, 145, 80, 205, 221, 152, 23, 64, 90, 249, 167, 145, 240, 84, 110, 228, 207, 86, 103, 127, 124, 136, 80, 253, 131, 20, 197, 44, 3, 213, 124, 119, 9, 11, 111, 54, 24, 205, 255, 245, 86, 25, 174, 172, 127, 244, 42, 142, 238, 245, 201, 93, 138, 120, 115, 71, 127, 69, 70, 76, 112, 6, 185, 27, 210, 185, 149, 69, 168, 227, 107, 158, 251, 150, 237, 175, 252, 40, 182, 146, 56, 208, 233, 194, 77, 11, 80, 183, 161, 146, 196, 73, 204, 138, 46, 27, 143, 251, 208, 24, 157, 219, 234, 220, 2, 43, 140, 246, 203, 52, 19, 203, 139, 44, 230, 163, 55, 206, 216, 213, 5, 36, 233, 156, 198, 164, 3, 10, 142, 159, 14, 199, 126, 229, 202, 149, 109, 76, 195, 245, 41, 58, 125, 144, 120, 41, 249, 11, 202, 57, 101, 238, 249, 149, 3, 11, 7, 57, 149, 150, 193, 136, 66, 129, 56, 72, 202, 94, 190, 58, 59, 210, 136, 77, 89, 206, 140, 8, 232, 131, 125, 79, 147, 82, 52, 90, 131, 213, 40, 119, 83, 92, 80, 230, 221, 110, 82, 203, 95, 215, 185, 56, 17, 88, 121, 122, 86, 223, 41, 240, 10, 99, 13, 59, 20, 47, 137, 25, 229, 155, 11, 4, 56, 72, 43, 121, 221, 185, 212, 113, 218, 221, 147, 96, 216, 9, 124, 247, 158, 56, 157, 201, 166, 219, 94, 198, 240, 138, 90, 221, 122, 74, 35, 5, 4, 155, 13, 1, 14, 254, 174, 219, 205, 131, 240, 74, 205, 122, 156, 156, 59, 15, 33, 199, 15, 42, 73, 142, 196, 91, 145, 133, 52, 20, 208, 193, 180, 144, 4, 246, 211, 212, 212, 108, 74, 121, 21, 200, 210, 189, 8, 222, 28, 183, 29, 180, 184, 115, 193, 152, 197, 12, 88, 211, 154, 222, 159, 136, 161, 196, 219, 88, 85, 26, 163, 66, 226, 214, 241, 253, 0, 56, 154, 94, 191, 218, 123, 56, 104, 13, 139, 125, 141, 158, 13, 175, 96, 212, 140, 67, 191, 52, 148, 64, 3, 64, 5, 72, 214, 144, 183, 234, 242, 125, 79, 156, 118, 112, 249, 120, 250, 255, 152, 163, 41, 22, 55, 124, 60, 107, 115, 250, 39, 154, 1, 21, 111, 63, 249, 131, 123, 8, 185, 223, 83, 242, 227, 7, 179, 44, 219, 24, 103, 158, 180, 76, 187, 237, 115, 239, 241, 98, 173, 154, 17, 13, 174, 230, 11, 30, 100, 115, 250, 190, 253, 37, 191, 61, 183, 140, 223, 42, 181, 76, 53, 23, 68, 162, 99, 79, 89, 181] - ], - "iv": null, - "key": [144, 119, 239, 159, 167, 69, 122, 142, 217, 226, 127, 75, 144, 189, 72, 131, 115, 95, 217, 27, 71, 32, 5, 17, 151, 54, 31, 149, 38, 164, 28, 36], - "modeOfOperation": "ctr", - "plaintext": [ - [188, 140, 82, 148, 20, 97, 140, 101, 161, 23, 201, 59, 77, 232, 37, 76, 215, 220, 38, 165, 253, 8, 238, 127, 188, 234, 213, 66, 223, 236, 103, 136, 215, 101, 124, 19, 162, 80, 232, 226, 167, 68, 47, 132, 151, 45, 123, 175, 126, 175, 229, 66, 74, 100, 58, 0, 205, 55, 144, 109, 244, 241, 161, 199, 7, 19, 130, 90, 70, 127, 167, 98, 153, 65, 195, 86, 92, 162, 66, 66, 215, 171, 176, 185, 213, 235, 122, 197, 70, 41, 207, 189, 37, 155, 138, 54, 175, 100, 168, 9, 173, 14, 12, 12, 166, 146, 198, 184, 198, 92, 74, 219, 147, 231, 159, 125, 30, 37, 251, 209, 19, 147, 44, 120, 194, 196, 52, 161, 180, 42, 110, 246, 90, 8, 22, 84, 230, 182, 191, 242, 191, 35, 89, 244, 79, 184, 78, 105, 180, 79, 91, 253, 5, 46, 34, 161, 17, 177, 239, 30, 51, 201, 179, 18, 138, 222, 1, 198, 112, 122, 89, 78, 150, 19, 100, 247, 132, 27, 214, 64, 22, 115, 237, 215, 135, 167, 207, 126, 243, 251, 214, 206, 249, 141, 114, 51, 73, 197, 62, 117, 179, 144, 156, 253, 180, 203, 203, 50, 198, 58, 40, 220, 204, 114, 124, 160, 129, 166, 238, 2, 145, 91, 90, 11, 100, 3, 201, 28, 69, 147, 84, 159, 211, 182, 121, 244, 65, 81, 35, 195, 82, 170, 19, 68, 5, 168, 111, 185, 206, 77, 63, 51, 164, 227, 93, 99, 215, 240, 184, 138, 53, 87, 184, 145, 197, 103, 59, 5, 84, 111, 248, 82, 205, 211, 59, 26, 12, 135, 81, 243, 253, 81, 149, 217, 56, 241, 103, 162, 118, 253, 195, 64, 8, 163, 90, 255, 251, 116, 128, 49, 213, 207, 71, 7, 76, 41, 52, 14, 143, 104, 142, 224, 89, 213, 222, 9, 47, 206, 173, 167, 173, 157, 180, 111, 176, 187, 231, 191, 52, 192, 208, 162, 11, 196, 209, 223, 253, 247, 114, 213, 163, 69, 113, 183, 35, 46, 94, 61, 85, 4, 36, 5, 227, 70, 230, 11, 169, 91, 16, 149, 174, 142, 54, 179, 81, 131, 139, 194, 63, 82, 47, 156, 202, 52, 150, 119, 190, 118, 79, 206, 71, 146, 127, 175, 166, 103, 239, 208, 218, 103, 76, 25, 75, 145, 16, 139, 35, 108, 122, 105, 155, 232, 5, 44, 255, 70, 206, 81, 162, 15, 210, 67, 132, 107, 55, 42, 223, 147, 223, 27, 209, 60, 57, 166, 142, 219, 204, 2, 162, 221, 96, 87, 135, 167, 110, 129, 137, 206, 12, 240, 209, 39, 55, 237, 28, 208, 7, 113, 254, 159, 110, 43, 23, 23, 128, 161, 78, 237, 102, 168, 147, 54, 225, 140, 148, 210, 125, 36, 68, 214, 105, 229, 114, 3, 56, 189, 23, 76, 239, 132, 199, 201, 213, 105, 24, 147, 29, 204, 244, 94, 101, 148, 191, 1, 56, 233, 83, 178, 242, 11, 10, 88, 206, 95, 190, 127, 184, 141, 56, 247, 50, 151, 236, 237, 44, 4, 185, 95, 147, 170, 253, 17, 134, 232, 135, 133, 38, 152, 80, 156, 29, 150, 89, 230, 144, 122, 149, 206, 222, 186, 51, 156, 128, 218, 107, 199, 44, 77, 160, 215, 127, 49, 43, 1, 166, 143, 200, 150, 91, 137, 99, 216, 111, 128, 51, 25, 200, 63, 114, 121, 20, 211, 25, 112, 221, 216, 43, 160, 219, 149, 88, 129, 253, 161, 87, 97, 74, 116, 150, 157, 203, 244, 223, 232, 65, 107, 7, 107, 118, 219, 182, 174, 54, 125, 236, 242, 157, 84, 123, 245, 166, 43, 149, 238, 23, 14, 169, 35, 214, 16, 130, 113, 57, 65, 73, 195, 129, 119, 49, 66, 36, 170, 150, 75, 244, 133, 31, 64, 248, 114, 36, 196, 134, 111, 189, 189, 9, 131, 63, 5, 140, 72, 210, 232, 196, 1, 96, 110, 62, 93, 252, 95, 168, 84, 132, 166, 195, 248, 20, 17, 234, 44, 30, 96, 26, 159, 65, 56, 198, 183, 119, 28, 173, 194, 255, 104, 166, 117, 125, 189, 159, 105, 234, 5, 108, 58, 221, 233, 183, 239, 243, 143, 244, 5, 4, 180, 250, 54, 233, 118, 203, 210, 219, 48, 167, 91, 206, 166, 160, 97, 250, 222, 60, 69, 171, 200, 126, 225, 28, 130, 85, 47, 33, 206, 225, 165, 219, 108, 174, 64, 11, 14, 211, 247, 211, 142, 202, 143, 247, 65, 188, 1, 198, 167, 37, 183, 207, 196, 157, 46, 135, 144, 5, 39, 79, 242, 190, 140, 35, 135, 226, 139, 251, 189, 234, 159, 219, 96, 224, 80, 221, 87, 61, 186, 36, 94, 54, 63, 224, 7, 158, 66, 81, 87, 87, 120, 228, 57, 110, 158, 46, 57, 36, 135, 52, 237, 87, 236, 44, 19, 234, 25, 134, 107, 62, 200, 39, 136, 162, 226, 86, 105, 174, 118, 7, 86, 147, 119, 142, 139, 146, 233, 100, 85, 88, 213, 145, 141, 87, 188, 149, 57, 60, 74, 224, 185, 217, 37, 6, 40, 20, 85, 121, 237, 114, 62, 198, 212, 196, 72, 96, 4, 237, 58, 44, 131, 23, 72, 128, 31, 5, 7, 168, 76, 211, 114, 137, 177, 108, 141, 31, 37, 6, 245, 116, 82, 153, 100, 20, 235, 152, 26, 200, 110, 201, 11, 245, 192, 25, 24, 179, 150, 166, 36, 178, 24, 152, 186, 209, 247, 129, 250, 102, 236, 22, 124, 132, 20, 84, 249, 33, 97, 195, 71, 3, 156, 6, 144, 118, 236, 184, 219, 221, 157, 134, 73, 79, 250, 233, 252, 31, 248, 26, 14, 92, 242, 246, 245, 164, 19, 169, 96, 107, 31, 166, 253, 102, 23, 144, 67, 136, 169, 110, 238, 70, 27, 151, 16, 48, 129, 61, 75, 43, 102, 103, 232, 108, 51, 72, 188, 247, 41, 67, 114, 103, 4, 89, 147, 243, 26, 136, 44, 232, 145, 237, 12, 150, 146, 164, 247, 97, 255, 98, 124, 26, 47, 123, 254, 93, 243, 89, 183, 93, 254, 68, 70, 247, 181, 74, 199, 129, 6, 73, 233, 32, 33, 163, 111, 54, 188, 14, 150, 91, 218, 35, 100, 200, 10, 23, 52, 24, 121, 185, 52, 102, 33, 131, 239, 88, 71, 95, 13, 98, 130, 83, 152, 8, 247, 9, 189, 33, 52, 237, 138, 217, 247, 72, 243, 58, 119, 11, 192, 75, 161, 0, 49, 144, 249, 45, 115, 132, 193, 250, 39, 125, 50, 0, 238, 172, 112, 171, 41, 148, 187, 165, 181, 231, 207, 195, 216, 109, 109, 236, 52, 59, 218, 142, 75, 168, 191, 218, 40, 20, 238, 193, 159, 64, 135, 35, 185, 5, 214, 154, 81, 237, 212, 149, 219, 67, 118, 62, 169, 29, 221, 196, 204, 58, 249, 195, 231, 169, 98, 239, 138, 133, 239, 91, 135, 100, 248, 200, 116, 62, 97, 183, 45, 108, 199, 13, 121, 156, 115, 2, 170, 129, 76, 2, 50, 173, 115, 51, 65, 98, 229, 220, 134, 93, 202, 20, 249, 204, 74, 159, 165, 28, 41, 178, 87, 153, 229, 201, 153, 4, 254, 191, 226, 62, 47, 255, 88, 36, 30, 44, 158, 91, 236, 229, 65, 32, 235, 245, 236, 76, 254, 28, 3, 51, 43, 112, 121, 134, 151, 25, 88, 48, 220, 40, 105, 140, 114, 13, 10, 65, 101, 250, 147, 254, 143, 198, 251, 135, 180, 161, 139, 66, 48, 250, 90, 242, 206, 252, 10, 30, 31, 230, 122, 239, 224, 44, 29, 109, 118, 246, 125, 68, 103, 98, 110, 40, 158, 119, 222, 22, 83, 36, 149, 218, 18, 141, 76, 241, 164, 18, 238, 212, 215, 127, 166, 116, 38, 57, 91, 53, 153, 50, 45, 245, 165, 110, 217, 42, 69, 195, 151, 83, 45, 84, 76, 247, 30, 252, 241, 65, 191, 184, 202, 191, 249, 96, 248, 113, 9, 91, 16, 180, 14, 168, 108, 41, 127, 239, 55, 245, 98, 129, 11, 221, 190, 200, 40, 8, 57, 52, 231, 104, 250, 182, 15, 106, 7, 113, 43, 7, 102, 240, 131, 57, 110, 215, 176, 115, 243, 191, 5, 24, 17, 177, 179, 123, 37, 32, 211, 133, 200, 132, 122, 50, 245, 51, 132, 29, 92, 12, 201, 192, 72, 10, 11, 77, 144, 0, 235, 163, 2, 220, 9, 80, 79, 189, 5, 81, 58, 107, 68, 143, 148, 103, 44, 143, 176, 21, 226, 192, 121, 231, 81, 152, 48, 72, 140, 231, 187, 179, 67, 244, 159, 89, 220, 69, 67, 176, 128, 113, 61, 162, 87, 241, 214, 187, 66, 97, 248, 10, 247, 21, 39, 194, 234, 16, 68, 4, 105, 37, 152, 204, 82, 110, 81, 164, 154, 250, 124, 72, 70, 173, 192, 145, 191, 126, 136, 186, 154, 61, 251, 85, 107, 15, 55, 66, 252, 57, 39, 160, 223, 35, 179, 38, 234, 34, 165, 148, 125, 48, 54, 72, 203, 190, 208, 226, 95], - [219, 8, 15, 37, 79, 144, 134, 54, 204, 145, 111, 37, 64, 39, 68, 47, 157, 208, 202, 115, 45, 183, 101, 185, 104, 76, 182, 198, 55, 178, 70, 210, 115, 64, 224, 168, 210, 6, 36, 191, 218, 181, 182, 253, 127, 228, 125, 111, 209, 172, 180, 117, 127, 17, 203, 153, 92, 67, 10, 169, 238, 206, 156, 146, 201, 24, 164, 209, 77, 15, 122, 80, 2, 52, 77, 84, 146, 49, 113, 150, 21, 90, 39, 233, 47, 130, 31, 223, 235, 119, 162, 180, 251, 12, 41, 68, 217, 32, 156, 131, 194, 201, 6, 73, 6, 185, 11, 251, 95, 50, 23, 78, 119, 6, 238, 239, 158, 215, 222, 5, 133, 73, 145, 162, 165, 141, 181, 215, 129, 199, 147, 66, 70, 141, 95, 150, 36, 230, 215, 124, 184, 211, 163, 126, 162, 91, 165, 14, 28, 226, 150, 253, 244, 250, 253, 175, 198, 150, 19, 234, 60, 37, 17, 209, 29, 109, 189, 108, 247, 207, 197, 87, 210, 5, 169, 192, 159, 17, 125, 23, 116, 42, 235, 226, 116, 132, 104, 251, 23, 58, 120, 33, 193, 211, 148, 196, 96, 65, 242, 59, 207, 200, 123, 195, 250, 84, 46, 33, 66, 61, 98, 201, 234, 77, 107, 248, 73, 136, 179, 76, 254, 134, 225, 46, 37, 180, 225, 208, 102, 6, 113, 26, 201, 203, 103, 220, 189, 73, 109, 114, 111, 108, 229, 0, 120, 28, 222, 26, 36, 0, 85, 25, 217, 246, 120, 61, 133, 125, 127, 140, 182, 236, 100, 80, 5, 55, 219, 106, 68, 141, 189, 66, 226, 195, 84, 54, 134, 173, 25, 19, 237, 46, 28, 102, 14, 54, 240, 90, 57, 180, 248, 67, 131, 216, 221, 81, 78, 64, 220, 107, 57, 190, 28, 167, 190, 77, 229, 240, 55, 173, 196, 232, 171, 2, 250, 241, 77, 253, 148, 229, 74, 206, 19, 179, 7, 253, 195, 154, 22, 73, 219, 191, 219, 181, 77, 240, 178, 32, 176, 33, 143, 142, 100, 157, 245, 64, 98, 36, 149, 223, 156, 111, 189, 248, 121, 103, 219, 133, 254, 212, 59, 23, 230, 9, 100, 148, 121, 20, 137, 208, 64, 102, 127, 8, 255, 199, 57, 121, 82, 117, 74, 170, 238, 21, 187, 30, 63, 11, 4, 143, 44, 100, 43, 223, 1, 168, 172, 152, 167, 40, 62, 81, 234, 87, 30, 181, 206, 188, 17, 117, 38, 16, 184, 33, 200, 191, 15, 227, 139, 76, 109, 18, 217, 163, 106, 219, 187, 59, 169, 6, 100, 21, 78, 104, 242, 255, 98, 190, 212, 166, 138, 71, 1, 73, 98, 82, 168, 252, 221, 122, 66, 5, 211, 209, 26, 84, 65, 38, 231, 54, 146, 171, 63, 188, 242, 145, 93, 239, 179, 8, 180, 182, 49, 246, 139, 154, 114, 180, 211, 158, 176, 144, 83, 213, 53, 212, 61, 142, 20, 199, 44, 181, 98, 57, 240, 13, 172, 136, 234, 249, 131, 173, 7, 191, 63, 214, 236, 44, 228, 218, 13, 129, 15, 234, 82, 15, 62, 191, 25, 140, 55, 67, 33, 181, 15, 55, 54, 28, 219, 15, 159, 124, 84, 237, 20, 138, 158, 255, 165, 10, 205, 136, 45, 252, 210, 219, 162, 194, 102, 33, 72, 251, 71, 87, 132, 210, 57, 138, 111, 230, 253, 213, 111, 4, 199, 28, 127, 19, 13, 131, 87, 219, 88, 238, 244, 122, 241, 3, 86, 94, 70, 40, 46, 182, 163, 27, 254, 155, 98, 252, 108, 168, 222, 43, 220, 155, 55, 236, 247, 40, 9, 222, 3, 219, 59, 200, 165, 251, 113, 52, 62, 141, 191, 156, 249, 191, 150, 110, 69, 229, 152, 153, 163, 189, 133, 37, 111, 90, 219, 43, 2, 245, 227, 72, 83, 172, 145, 213, 222, 137, 131, 21, 43, 74, 80, 218, 25, 121, 228, 136, 220, 67, 94, 164, 222, 103, 180, 159, 142, 78, 209, 172, 221, 81, 0, 147, 81, 188, 129, 221, 13, 51, 65, 73, 62, 212, 43, 57, 31, 47, 243, 120, 165, 162, 14, 64, 217, 16, 40, 145, 158, 73, 240, 170, 174, 2, 163, 190, 92, 138, 224, 207, 188, 157, 123, 203, 101, 35, 10, 178, 98, 64, 98, 182, 30, 7, 76, 131, 35, 9, 185, 205, 79, 162, 11, 241, 141, 210, 173, 109, 90, 183, 233, 17, 161, 58, 4, 43, 71, 128, 241, 137, 185, 156, 22, 94, 129, 15, 185, 179, 17, 110, 242, 24, 167, 253, 113, 228, 99, 71, 227, 60, 205, 78, 146, 129, 181, 48, 243, 166, 230, 222, 102, 83, 207, 102, 250, 3, 71, 209, 77, 82, 18, 68, 62, 187, 83, 236, 126, 39, 203, 29, 99, 143, 34, 0, 197, 181, 23, 193, 247, 186, 55, 100, 202, 224, 13, 111, 213, 82, 70, 186, 124, 223, 168, 225, 199, 22, 228, 190, 183, 204, 5, 155, 218, 194, 224, 114, 181, 32, 18, 122, 92, 105, 46, 47, 128, 52, 244, 27, 140, 210, 67, 165, 195, 90, 12, 135, 220, 55, 38, 93, 103, 165, 145, 159, 86, 154, 118, 150, 94, 252, 109, 212, 230, 49, 215, 240, 13, 163, 93, 225, 224, 101, 159, 209, 47, 236, 115, 224, 125, 246, 247, 44, 206, 15, 128, 197, 219, 71, 17, 61, 10, 116, 103, 250, 10, 111, 122, 247, 246, 177, 195, 123, 0, 38, 205, 108, 173, 132, 31, 39, 38, 26, 249, 118, 46, 67, 103, 129, 53, 56, 122, 65, 55, 255, 51, 248, 123, 231, 132, 186, 234, 78, 99, 51, 99, 165, 122, 74, 219, 37, 93, 88, 183, 216, 51, 77, 7, 128, 82, 51, 137, 19, 3, 53, 164, 19, 245, 138, 33, 16, 229, 159, 153, 111, 164, 65, 46, 198, 120, 109, 237, 70, 6, 164, 135, 136, 210, 69, 182, 249, 115, 200, 12, 86, 4, 162, 96, 96, 42, 20, 78, 126, 185, 104, 95, 35, 29, 100, 37, 155, 233, 10, 146, 45, 3, 69, 193, 27, 88, 143, 230, 87, 92, 176, 154, 225, 134, 94, 181, 217, 153, 95, 113, 19, 230, 6, 176, 75, 221, 190, 206, 156, 7, 39, 213, 156, 233, 54, 193, 96, 119, 136, 139, 177, 117, 43, 180, 92, 70, 110, 217, 245, 118, 57, 226, 100, 24, 10, 146, 151, 202, 210, 48, 24, 29, 109, 150, 167, 10, 63, 64, 161, 44, 195, 19, 150, 11, 254, 153, 144, 7, 63, 5, 97, 36, 154, 106, 137, 117, 244, 116, 222, 138, 204, 10, 109, 0, 22, 189, 196, 176, 247, 117, 81, 12, 218, 151, 4, 159, 253, 118, 221, 194, 199, 206, 153, 231, 253, 37, 197, 53, 155, 39, 56, 85, 41, 208, 130, 10, 248, 135, 245, 146, 247, 6, 60, 178, 86, 63, 247, 145, 73, 147, 15, 89, 189, 0, 175, 123, 163, 47, 84, 188, 120, 41, 118, 254, 189, 78, 131, 207, 102, 226, 30, 24, 242, 137, 50, 64, 15, 192, 144, 84, 66, 13, 188, 139, 182, 161, 9, 22, 229, 210, 87, 9, 123, 100, 124, 171, 202, 173, 109, 224, 105, 245, 222, 103, 110, 110, 116, 1, 204, 29, 24, 198, 247, 65, 71, 181, 107, 40, 207, 215, 105, 254, 91, 181, 82, 65, 133, 170, 196, 184, 94, 200, 130, 11, 147, 33, 110, 31, 192, 93, 5, 140, 52, 210, 253, 158, 91, 14, 126, 0, 234, 6, 158, 76, 57, 28, 247, 50, 201, 214, 87, 75, 23, 168, 255, 193, 224, 124, 40, 245, 1, 29, 225, 102, 174, 5, 80, 226, 71, 82, 231, 165, 9, 220, 168, 120, 85, 53, 216, 126, 83, 166, 122, 193, 230, 71, 99, 186, 177, 163, 135, 181, 172, 114, 191, 175, 143, 228, 225, 149, 42, 178, 90, 132, 152, 179, 246, 100, 252, 39, 194, 31, 118, 5, 54, 250, 238, 204, 54, 77, 167, 66, 145, 141, 211, 178, 204, 35, 228, 22, 50, 158, 76, 156, 230, 209, 179, 119, 142, 42, 127, 197, 34, 217, 84, 149, 53, 18, 120, 13, 52, 194, 129, 41, 204, 156, 66, 175, 4, 116, 206, 148, 175, 150, 119, 198, 240, 47, 147, 66, 13, 62, 216, 39, 146, 245, 115, 110, 14, 186, 3, 179, 135, 41, 98, 38, 45, 229, 235, 86, 182, 237, 31, 51, 208, 241, 183, 193, 125, 71, 123, 63, 190, 236, 86, 135, 28, 125, 150, 86, 10, 186, 156, 207, 255, 157, 21, 154, 46, 224, 186, 214, 56, 14, 112, 4, 73, 51, 213, 77, 184, 77, 54, 223, 97, 199, 196, 141, 244, 238, 123, 233, 203, 48, 38, 26, 253, 247, 101, 98, 63, 36, 110, 204, 149, 134, 177, 204, 6, 45, 137, 101, 233, 159, 35, 198, 106, 140, 181, 33, 197, 122, 252, 30, 24, 8, 2, 226, 134, 99, 202, 212, 176, 158, 66, 12, 193, 187, 229, 216, 74, 167, 238, 151, 218], - [130, 169, 162, 28, 122, 69, 85, 224, 99, 48, 83, 70, 154, 115, 121, 217, 122, 174, 187, 141, 94, 169, 241, 3, 89, 67, 243, 66, 46, 98, 81, 233, 235, 76, 240, 46, 223, 122, 173, 156, 226, 233, 227, 143, 161, 119, 239, 237, 3, 189, 251, 187, 170, 203, 62, 65, 89, 157, 87, 32, 135, 160, 13, 90, 174, 199, 124, 22, 115, 136, 100, 228, 119, 84, 232, 22, 34, 93, 202, 53, 108, 133, 183, 106, 99, 137, 123, 12, 31, 53, 173, 173, 254, 86, 39, 56, 202, 41, 50, 67, 127, 157, 176, 15, 91, 163, 38, 238, 168, 122, 254, 181, 48, 33, 241, 227, 23, 234, 210, 172, 152, 6, 102, 81, 240, 221, 196, 239, 250, 94, 7, 233, 2, 248, 87, 208, 175, 47, 243, 172, 85, 144, 29, 192, 58, 20, 196, 147, 145, 83, 160, 191, 66, 188, 221, 75, 242, 215, 184, 169, 28, 43, 134, 119, 154, 64, 7, 212, 88, 154, 206, 192, 169, 139, 10, 42, 245, 255, 121, 125, 115, 28, 182, 116, 187, 205, 13, 22, 62, 97, 175, 185, 202, 204, 2, 5, 16, 235, 189, 119, 157, 27, 100, 83, 60, 197, 146, 62, 243, 209, 15, 21, 255, 62, 147, 185, 47, 133, 173, 194, 162, 71, 34, 192, 211, 3, 20, 49, 199, 122, 48, 173, 181, 174, 52, 82, 17, 182, 2, 210, 130, 168, 135, 17, 37, 149, 127, 228, 27, 161, 0, 172, 140, 68, 27, 186, 5, 171, 6, 64, 140, 17, 254, 118, 80, 215, 62, 118, 205, 102, 230, 55, 220, 172, 220, 155, 93, 190, 224, 249, 38, 66, 233, 243, 165, 14, 235, 172, 140, 80, 159, 184, 3, 176, 72, 67, 158, 47, 204, 28, 52, 203, 217, 64, 7, 94, 215, 124, 218, 106, 151, 69, 187, 96, 136, 72, 10, 203, 113, 245, 83, 73, 143, 75, 251, 84, 96, 84, 109, 143, 61, 132, 49, 137, 251, 176, 13, 35, 6, 111, 94, 160, 195, 251, 63, 55, 206, 6, 175, 158, 91, 161, 96, 231, 146, 171, 103, 58, 194, 255, 18, 190, 107, 165, 99, 133, 231, 81, 176, 121, 2, 43, 219, 146, 174, 126, 106, 49, 12, 218, 189, 150, 11, 38, 171, 173, 176, 21, 7, 151, 36, 118, 143, 131, 121, 7, 39, 250, 115, 224, 172, 110, 159, 212, 68, 134, 110, 8, 12, 113, 159, 7, 185, 163, 194, 127, 232, 255, 91, 49, 91, 176, 11, 37, 221, 93, 223, 107, 4, 36, 176, 242, 214, 203, 82, 235, 27, 98, 174, 120, 139, 63, 55, 51, 36, 31, 7, 185, 132, 227, 160, 83, 216, 243, 96, 22, 40, 158, 37, 195, 135, 118, 143, 247, 81, 219, 102, 151, 224, 235, 161, 62, 31, 220, 236, 47, 120, 35, 24, 133, 119, 91, 84, 230, 209, 140, 155, 68, 29, 217, 240, 74, 238, 193, 132, 40, 4, 19, 33, 38, 38, 96, 206, 94, 172, 82, 155, 188, 140, 197, 39, 26, 178, 211, 233, 30, 234, 180, 215, 43, 127, 209, 105, 133, 231, 25, 227, 176, 53, 43, 154, 20, 249, 249, 86, 69, 167, 40, 128, 5, 106, 135, 14, 136, 92, 206, 76, 188, 99, 132, 104, 180, 99, 66, 74, 134, 40, 124, 3, 64, 72, 237, 228, 200, 40, 31, 42, 174, 67, 231, 119, 43, 96, 179, 189, 178, 5, 115, 100, 93, 122, 7, 233, 234, 199, 189, 128, 144, 67, 245, 238, 96, 198, 31, 81, 81, 83, 26, 160, 233, 220, 52, 211, 134, 100, 34, 60, 152, 159, 110, 186, 224, 157, 97, 228, 246, 203, 106, 74, 230, 156, 176, 175, 248, 214, 68, 74, 42, 237, 113, 40, 128, 111, 106, 198, 252, 204, 112, 110, 244, 125, 209, 227, 136, 86, 83, 108, 14, 114, 232, 206, 17, 209, 184, 181, 111, 185, 49, 169, 70, 133, 134, 168, 253, 109, 250, 153, 215, 254, 162, 58, 211, 57, 253, 119, 184, 14, 42, 187, 63, 137, 183, 231, 61, 243, 21, 226, 47, 9, 110, 45, 226, 101, 137, 19, 94, 105, 245, 126, 37, 161, 15, 253, 59, 204, 136, 130, 7, 31, 51, 47, 148, 85, 52, 125, 162, 169, 134, 55, 253, 100, 65, 203, 227, 7, 119, 172, 140, 166, 244, 168, 32, 155, 155, 56, 54, 1, 138, 209, 173, 52, 10, 102, 208, 127, 215, 105, 241, 19, 154, 175, 7, 176, 115, 111, 77, 79, 191, 178, 63, 148, 150, 247, 5, 75, 124, 231, 20, 131, 26, 141, 185, 120, 231, 158, 101, 202, 113, 78, 132, 148, 181, 177, 141, 235, 160, 92, 236, 70, 173, 130, 12, 198, 156, 49, 138, 174, 170, 131, 80, 128, 56, 153, 185, 60, 40, 50, 29, 23, 48, 217, 168, 147, 193, 101, 111, 69, 47, 247, 248, 152, 110, 157, 52, 118, 150, 202, 145, 194, 61, 231, 187, 16, 80, 90, 207, 100, 174, 212, 162, 10, 17, 75, 69, 81, 181, 100, 214, 173, 93, 249, 111, 119, 93, 48, 81, 92, 1, 189, 85, 212, 119, 254, 103, 223, 90, 102, 136, 164, 57, 38, 61, 182, 61, 235, 203, 228, 191, 206, 87, 158, 154, 218, 3, 127, 168, 86, 142, 77, 100, 58, 20, 10, 50, 67, 138, 30, 200, 158, 112, 38, 174, 69, 150, 215, 248, 255, 235, 153, 222, 250, 149, 75, 59, 238, 41, 83, 3, 91, 60, 215, 219, 120, 98, 51, 171, 134, 58, 65, 38, 101, 78, 147, 94, 235, 122, 244, 196, 114, 212, 158, 1, 58, 252, 248, 9, 199, 203, 244, 95, 245, 205, 244, 27, 212, 47, 57, 147, 175, 98, 44, 124, 32, 140, 126, 173, 112, 158, 53, 128, 85, 127, 246, 37, 102, 97, 214, 245, 91, 68, 211, 118, 225, 129, 254, 158, 60, 40, 220, 114, 77, 85, 185, 176, 253, 177, 248, 32, 116, 253, 210, 8, 196, 1, 1, 32, 116, 229, 219, 142, 17, 133, 170, 124, 72, 57, 204, 195, 144, 104, 217, 65, 173, 179, 146, 246, 23, 191, 157, 208, 216, 135, 34, 30, 91, 123, 66, 248, 160, 231, 84, 206, 22, 36, 152, 243, 17, 226, 134, 177, 91, 67, 133, 69, 186, 80, 72, 118, 36, 224, 247, 97, 241, 104, 172, 110, 77, 81, 52, 238, 29, 243, 77, 35, 229, 231, 252, 37, 20, 87, 158, 172, 179, 101, 110, 60, 35, 208, 157, 96, 137, 209, 70, 254, 165, 160, 221, 183, 143, 46, 37, 135, 38, 51, 237, 239, 14, 35, 64, 186, 91, 122, 126, 158, 153, 42, 96, 93, 210, 130, 10, 244, 32, 1, 154, 251, 222, 102, 41, 33, 171, 147, 234, 69, 238, 91, 103, 8, 168, 111, 164, 240, 137, 137, 136, 152, 127, 191, 250, 101, 140, 187, 61, 191, 142, 51, 233, 146, 126, 26, 110, 107, 223, 223, 17, 126, 115, 152, 150, 68, 149, 163, 208, 151, 175, 136, 161, 27, 100, 151, 246, 240, 4, 51, 189, 3, 237, 115, 92, 85, 60, 212, 53, 138, 45, 230, 138, 78, 88, 146, 151, 12, 20, 47, 151, 217, 152, 232, 21, 115, 242, 148, 191, 185, 172, 229, 157, 23, 41, 75, 39, 206, 70, 33, 187, 0, 148, 117, 232, 112, 211, 22, 242, 159, 195, 134, 230, 222, 32, 5, 15, 253, 98, 255, 15, 252, 203, 212, 230, 75, 30, 22, 107, 191, 176, 174, 21, 96, 89, 175, 80, 19, 151, 133, 42, 192, 195, 77, 71, 71, 208, 115, 167, 167, 43, 74, 231, 212, 151, 214, 89, 142, 38, 9, 5, 12, 146, 151, 184, 207, 185, 72, 194, 194, 176, 54, 111, 113, 199, 30, 131, 39, 165, 254, 44, 210, 185, 240, 146, 11, 61, 119, 187, 77, 46, 50, 137, 225, 32, 182, 113, 162, 13, 90, 142, 197, 21, 186, 16, 3, 201, 242, 222, 107, 13, 108, 117, 130, 177, 204, 35, 239, 245, 18, 90, 113, 75, 207, 133, 133, 56, 219, 36, 238, 128, 240, 89, 215, 49, 79, 158, 222, 120, 40, 205, 252, 212, 242, 248, 14, 170, 92, 153, 106, 85, 49, 110, 55, 197, 44, 59, 121, 172, 234, 255, 47, 117, 110, 5, 126, 41, 201, 167, 184, 63, 1, 78, 115, 57, 65, 39, 144, 203, 84, 41, 113, 58, 119, 19, 32, 225, 154, 145, 199, 97, 206, 103, 219, 206, 16, 99, 208, 211, 59, 27, 167, 227, 170, 163, 183, 84, 98, 158, 214, 105, 1, 101, 186, 9, 58, 188, 90, 174, 101, 132, 248, 82, 158, 188, 160, 61, 186, 246, 186, 184, 165, 11, 7, 54, 216, 134, 192, 121, 16, 225, 231, 147, 139, 176, 94, 220, 75, 190, 34, 215, 2, 89, 97, 193, 108, 19, 155, 246, 52, 15, 202, 98, 201, 62, 164, 26, 244, 160, 0, 38, 154, 79, 74, 179, 140], - [191, 46, 213, 229, 238, 218, 164, 113, 158, 86, 223, 82, 147, 204, 8, 249, 140, 89, 211, 64, 210, 145, 223, 102, 15, 105, 144, 128, 24, 204, 249, 198, 93, 49, 115, 130, 4, 94, 30, 179, 166, 198, 156, 41, 195, 43, 21, 67, 122, 135, 7, 210, 71, 202, 162, 101, 90, 65, 152, 181, 104, 55, 54, 69, 205, 227, 128, 53, 231, 107, 70, 50, 42, 12, 46, 223, 70, 248, 12, 186, 209, 43, 243, 192, 150, 194, 56, 198, 155, 85, 221, 214, 6, 161, 95, 100, 197, 223, 93, 54, 71, 180, 209, 250, 62, 217, 102, 231, 235, 25, 73, 216, 45, 80, 4, 241, 15, 95, 80, 173, 45, 231, 35, 157, 227, 158, 114, 74, 30, 86, 209, 225, 53, 144, 12, 213, 243, 49, 1, 10, 40, 84, 98, 158, 79, 165, 216, 163, 127, 231, 208, 168, 158, 0, 148, 231, 73, 238, 54, 88, 141, 36, 129, 45, 78, 116, 195, 39, 37, 45, 59, 250, 14, 36, 240, 190, 95, 177, 126, 245, 16, 214, 129, 188, 195, 134, 184, 229, 231, 201, 236, 139, 92, 184, 47, 113, 242, 94, 18, 184, 89, 117, 168, 12, 252, 39, 121, 52, 85, 215, 215, 213, 156, 9, 83, 88, 115, 192, 255, 77, 216, 48, 167, 31, 3, 105, 149, 170, 116, 221, 154, 153, 52, 78, 89, 154, 175, 235, 70, 240, 202, 194, 48, 97, 20, 94, 232, 123, 141, 121, 186, 99, 160, 77, 170, 194, 155, 20, 127, 226, 91, 27, 197, 140, 111, 99, 134, 201, 108, 186, 176, 30, 51, 202, 188, 148, 4, 102, 55, 133, 180, 20, 23, 54, 217, 38, 176, 87, 35, 210, 57, 235, 26, 76, 253, 96, 247, 135, 3, 141, 120, 222, 149, 192, 161, 22, 26, 69, 148, 192, 105, 223, 27, 8, 182, 19, 163, 188, 204, 150, 125, 224, 112, 230, 27, 60, 239, 181, 254, 108, 34, 153, 65, 243, 64, 65, 35, 230, 185, 137, 157, 184, 83, 109, 119, 149, 16, 119, 173, 244, 1, 162, 49, 84, 4, 197, 15, 202, 165, 169, 103, 38, 181, 126, 92, 3, 240, 213, 26, 139, 43, 221, 166, 231, 24, 247, 243, 140, 7, 170, 240, 141, 43, 130, 90, 149, 156, 150, 31, 109, 140, 128, 217, 68, 219, 240, 143, 198, 134, 241, 178, 36, 136, 63, 99, 177, 250, 208, 79, 185, 185, 99, 145, 28, 150, 190, 233, 205, 181, 141, 56, 22, 216, 37, 190, 160, 0, 203, 5, 108, 244, 2, 38, 205, 234, 106, 78, 62, 107, 215, 126, 19, 107, 38, 137, 151, 154, 47, 136, 57, 253, 240, 102, 44, 173, 158, 185, 23, 247, 197, 203, 197, 178, 133, 107, 182, 242, 238, 189, 76, 107, 191, 21, 151, 15, 186, 166, 216, 66, 67, 127, 97, 33, 2, 179, 63, 60, 240, 36, 146, 148, 94, 58, 169, 46, 72, 103, 230, 28, 217, 219, 168, 71, 50, 169, 222, 132, 36, 200, 32, 109, 55, 135, 87, 229, 227, 4, 27, 155, 219, 127, 24, 46, 235, 130, 201, 164, 48, 185, 188, 233, 14, 97, 145, 179, 238, 25, 214, 111, 216, 26, 144, 215, 162, 86, 38, 159, 18, 24, 85, 14, 12, 173, 148, 62, 57, 21, 200, 137, 239, 71, 235, 69, 162, 199, 199, 121, 154, 69, 165, 63, 162, 84, 152, 39, 55, 49, 38, 62, 162, 32, 101, 240, 211, 134, 34, 61, 46, 159, 192, 172, 226, 213, 15, 9, 217, 231, 205, 12, 48, 58, 85, 43, 240, 4, 175, 150, 105, 213, 107, 3, 74, 201, 144, 250, 38, 214, 177, 84, 76, 64, 168, 167, 63, 119, 96, 226, 145, 95, 12, 97, 51, 118, 130, 96, 239, 220, 75, 61, 139, 62, 57, 157, 46, 183, 151, 46, 124, 164, 179, 98, 7, 93, 219, 51, 90, 159, 211, 213, 141, 241, 78, 84, 163, 190, 41, 185, 219, 106, 26, 5, 11, 40, 62, 98, 244, 213, 181, 46, 175, 141, 42, 42, 231, 106, 10, 52, 226, 32, 179, 121, 115, 107, 138, 252, 138, 186, 16, 90, 12, 17, 101, 241, 65, 194, 248, 163, 157, 57, 198, 19, 21, 117, 119, 241, 38, 230, 70, 17, 31, 248, 192, 7, 97, 245, 249, 23, 207, 37, 133, 108, 163, 205, 70, 3, 202, 54, 237, 214, 99, 114, 95, 222, 89, 140, 4, 210, 150, 127, 132, 222, 145, 234, 8, 209, 205, 54, 9, 220, 93, 175, 151, 204, 11, 124, 30, 58, 47, 59, 123, 183, 68, 222, 173, 205, 198, 85, 51, 26, 10, 234, 15, 15, 62, 163, 114, 112, 254, 220, 236, 175, 32, 54, 108, 236, 153, 113, 112, 187, 33, 14, 227, 216, 53, 174, 68, 203, 242, 183, 34, 128, 221, 18, 199, 103, 173, 167, 208, 37, 181, 219, 111, 7, 72, 208, 156, 197, 221, 24, 198, 224, 170, 181, 197, 191, 65, 2, 6, 170, 55, 234, 135, 244, 244, 141, 188, 238, 29, 116, 42, 97, 56, 11, 225, 101, 159, 51, 146, 235, 155, 75, 202, 83, 142, 254, 152, 220, 192, 17, 151, 169, 236, 209, 221, 144, 39, 216, 96, 206, 171, 189, 155, 154, 229, 127, 239, 210, 124, 182, 90, 1, 127, 250, 171, 110, 122, 124, 215, 252, 71, 236, 23, 240, 185, 116, 73, 53, 58, 237, 210, 77, 214, 88, 24, 196, 61, 95, 83, 26, 150, 22, 40, 5, 196, 39, 212, 187, 77, 121, 229, 62, 180, 242, 76, 132, 63, 199, 236, 220, 124, 212, 6, 89, 83, 177, 128, 203, 112, 9, 69, 184, 188, 159, 228, 173, 197, 225, 177, 243, 170, 220, 22, 168, 137, 77, 134, 212, 243, 212, 74, 203, 117, 195, 76, 253, 5, 238, 161, 193, 151, 63, 75, 200, 150, 144, 68, 3, 26, 123, 249, 212, 227, 37, 255, 249, 44, 61, 122, 131, 227, 56, 35, 89, 79, 147, 242, 238, 65, 89, 210, 160, 23, 187, 254, 99, 35, 76, 203, 136, 77, 52, 13, 27, 23, 96, 230, 72, 232, 50, 69, 134, 38, 86, 34, 236, 22, 118, 126, 169, 212, 236, 126, 139, 165, 96, 149, 136, 91, 131, 89, 75, 76, 241, 22, 7, 90, 88, 32, 159, 7, 44, 80, 58, 236, 218, 222, 22, 188, 68, 107, 16, 215, 114, 232, 107, 122, 66, 42, 145, 233, 1, 60, 146, 195, 7, 11, 171, 14, 132, 96, 224, 78, 134, 160, 10, 93, 39, 112, 72, 13, 163, 122, 10, 186, 38, 82, 138, 224, 152, 121, 180, 122, 173, 71, 173, 150, 76, 32, 15, 21, 26, 179, 31, 192, 213, 186, 7, 159, 154, 82, 130, 146, 111, 209, 62, 224, 122, 5, 204, 195, 11, 6, 119, 191, 157, 185, 35, 15, 70, 206, 255, 201, 8, 236, 248, 148, 219, 81, 229, 142, 107, 246, 167, 37, 88, 30, 38, 142, 168, 97, 141, 195, 144, 203, 193, 29, 57, 81, 123, 41, 165, 235, 158, 191, 55, 210, 178, 20, 239, 109, 208, 249, 132, 74, 165, 93, 118, 53, 127, 98, 186, 73, 193, 242, 175, 23, 64, 28, 38, 76, 155, 169, 7, 182, 42, 111, 133, 185, 129, 232, 15, 239, 220, 153, 70, 209, 188, 110, 226, 177, 101, 140, 219, 19, 154, 178, 78, 213, 105, 54, 137, 48, 223, 84, 58, 46, 110, 113, 201, 175, 253, 187, 140, 139, 26, 247, 116, 212, 232, 107, 193, 114, 69, 29, 78, 254, 86, 219, 86, 45, 68, 153, 42, 185, 255, 186, 159, 51, 158, 19, 21, 44, 135, 74, 241, 80, 180, 47, 90, 91, 228, 109, 54, 2, 206, 90, 234, 251, 156, 113, 131, 74, 129, 85, 37, 180, 58, 122, 146, 157, 160, 35, 116, 84, 92, 134, 242, 34, 194, 230, 231, 4, 146, 181, 177, 109, 49, 206, 153, 117, 147, 41, 122, 255, 148, 172, 254, 218, 125, 205, 108, 62, 53, 66, 126, 29, 246, 95, 87, 5, 64, 114, 117, 144, 96, 89, 14, 174, 184, 61, 218, 252, 86, 86, 153, 72, 63, 147, 236, 148, 118, 145, 207, 147, 255, 33, 240, 180, 35, 173, 50, 192, 234, 130, 116, 100, 234, 64, 103, 71, 249, 249, 132, 70, 33, 61, 207, 31, 253, 225, 172, 188, 164, 160, 144, 74, 164, 198, 240, 23, 247, 232, 161, 51, 104, 204, 64, 9, 8, 21, 179, 5, 107, 186, 14, 206, 239, 130, 50, 91, 27, 33, 29, 250, 196, 217, 148, 100, 248, 224, 134, 24, 252, 239, 239, 96, 52, 47, 191, 106, 17, 229, 65, 163, 150, 54, 156, 180, 53, 237, 190, 160, 143, 81, 160, 169, 138, 166, 180, 143, 229, 250, 253, 18, 230, 1, 214, 233, 234, 4, 211, 192, 31, 104, 101, 85, 241, 171, 36, 165, 90, 176, 240, 199, 115, 60, 198, 217, 9, 189], - [145, 168, 96, 12, 53, 35, 136, 249, 103, 206, 138, 208, 101, 102, 252, 202, 75, 122, 15, 239, 135, 26, 125, 172, 134, 200, 228, 89, 179, 150, 93, 59, 141, 147, 153, 9, 136, 166, 12, 25, 169, 106, 128, 117, 94, 108, 179, 9, 10, 23, 12, 121, 12, 110, 0, 129, 221, 143, 247, 34, 27, 104, 226, 148, 142, 252, 226, 96, 127, 151, 197, 192, 127, 101, 195, 213, 200, 224, 45, 72, 234, 239, 195, 65, 207, 251, 109, 97, 47, 155, 219, 44, 9, 34, 59, 150, 220, 228, 247, 193, 247, 104, 242, 242, 93, 34, 216, 5, 169, 255, 13, 205, 30, 175, 231, 6, 46, 154, 46, 6, 112, 227, 41, 126, 120, 108, 190, 99, 69, 142, 36, 45, 201, 54, 65, 177, 100, 83, 44, 25, 194, 138, 132, 201, 1, 193, 49, 76, 32, 84, 125, 243, 72, 160, 232, 7, 148, 221, 17, 240, 41, 30, 174, 134, 135, 106, 171, 49, 22, 199, 194, 124, 19, 187, 206, 209, 99, 15, 143, 51, 209, 103, 47, 49, 254, 166, 178, 204, 235, 1, 222, 113, 246, 77, 55, 92, 52, 49, 136, 155, 221, 89, 127, 113, 132, 144, 83, 178, 137, 68, 118, 79, 152, 1, 6, 129, 48, 10, 119, 16, 15, 211, 157, 51, 193, 234, 45, 12, 11, 79, 176, 164, 26, 100, 93, 169, 122, 233, 29, 222, 111, 159, 130, 4, 61, 107, 101, 1, 129, 167, 63, 50, 106, 193, 37, 125, 92, 181, 170, 201, 157, 133, 130, 202, 219, 117, 100, 218, 39, 118, 194, 214, 56, 31, 69, 115, 253, 104, 167, 34, 26, 136, 20, 226, 69, 62, 85, 171, 9, 113, 26, 20, 116, 193, 40, 33, 251, 74, 105, 247, 7, 193, 104, 129, 124, 227, 180, 134, 230, 91, 97, 113, 69, 202, 138, 209, 157, 88, 214, 206, 182, 24, 102, 205, 106, 105, 112, 200, 243, 186, 253, 68, 26, 233, 106, 225, 177, 124, 101, 217, 3, 8, 27, 147, 119, 198, 106, 134, 114, 179, 220, 119, 231, 8, 164, 189, 28, 74, 178, 165, 69, 67, 141, 84, 229, 45, 247, 29, 199, 8, 147, 52, 220, 181, 109, 17, 142, 57, 58, 97, 52, 137, 7, 205, 11, 78, 14, 199, 90, 227, 183, 218, 84, 210, 59, 143, 129, 173, 51, 165, 165, 88, 115, 145, 134, 0, 19, 149, 25, 224, 171, 232, 42, 109, 109, 222, 162, 210, 129, 49, 108, 76, 234, 203, 235, 40, 56, 252, 169, 243, 171, 248, 54, 126, 115, 40, 79, 72, 39, 146, 25, 73, 98, 231, 149, 254, 131, 93, 1, 220, 118, 124, 143, 56, 85, 120, 119, 206, 130, 239, 89, 97, 109, 128, 49, 17, 219, 170, 116, 232, 240, 150, 26, 173, 132, 28, 14, 31, 219, 75, 14, 212, 170, 130, 56, 181, 61, 140, 190, 80, 137, 2, 30, 188, 71, 249, 68, 64, 190, 13, 23, 224, 108, 205, 174, 188, 145, 96, 169, 143, 227, 139, 72, 162, 104, 213, 4, 42, 48, 56, 124, 22, 197, 210, 220, 198, 135, 24, 32, 106, 207, 238, 115, 108, 0, 243, 193, 120, 181, 133, 99, 46, 79, 207, 15, 42, 147, 236, 43, 242, 210, 239, 187, 125, 93, 166, 3, 144, 131, 159, 206, 68, 150, 96, 100, 141, 164, 45, 29, 75, 13, 53, 44, 79, 217, 66, 206, 221, 91, 37, 47, 25, 239, 215, 79, 84, 164, 236, 236, 253, 186, 169, 107, 73, 118, 149, 37, 221, 171, 149, 173, 204, 130, 97, 142, 231, 172, 110, 63, 95, 246, 156, 142, 69, 34, 160, 172, 111, 179, 218, 173, 44, 129, 43, 211, 88, 106, 93, 99, 45, 64, 171, 111, 137, 70, 90, 108, 66, 13, 60, 87, 97, 83, 174, 119, 202, 153, 181, 62, 245, 59, 182, 110, 26, 10, 228, 224, 32, 154, 179, 193, 51, 171, 252, 239, 25, 231, 235, 210, 37, 143, 124, 169, 185, 15, 89, 174, 255, 167, 162, 65, 218, 207, 197, 212, 188, 110, 61, 1, 54, 158, 88, 57, 29, 173, 11, 196, 56, 64, 199, 8, 244, 230, 116, 22, 138, 57, 47, 71, 12, 182, 25, 16, 6, 152, 100, 214, 157, 109, 171, 231, 56, 29, 219, 241, 159, 104, 224, 254, 219, 100, 133, 30, 199, 208, 49, 253, 226, 187, 185, 127, 94, 66, 156, 231, 220, 43, 244, 144, 46, 59, 154, 192, 65, 243, 51, 117, 203, 6, 130, 83, 76, 133, 128, 175, 169, 2, 229, 224, 85, 0, 101, 43, 111, 48, 103, 238, 147, 28, 187, 47, 220, 209, 136, 123, 131, 2, 145, 44, 163, 114, 254, 37, 168, 62, 162, 166, 26, 166, 63, 181, 161, 255, 106, 33, 69, 234, 44, 213, 144, 164, 75, 10, 192, 44, 240, 81, 84, 11, 196, 233, 103, 16, 102, 84, 112, 242, 145, 214, 208, 24, 81, 49, 36, 15, 207, 178, 128, 67, 249, 54, 87, 197, 213, 126, 119, 253, 27, 98, 17, 88, 113, 62, 55, 162, 157, 241, 73, 236, 74, 170, 213, 219, 122, 20, 159, 19, 89, 116, 152, 13, 179, 7, 167, 152, 128, 131, 103, 249, 225, 70, 209, 143, 5, 131, 196, 3, 123, 78, 163, 154, 236, 204, 16, 57, 128, 38, 5, 225, 136, 81, 100, 150, 196, 223, 160, 115, 39, 45, 165, 0, 19, 95, 178, 165, 175, 25, 183, 165, 58, 44, 190, 206, 203, 146, 226, 232, 113, 133, 60, 33, 99, 99, 52, 203, 145, 29, 118, 21, 84, 214, 164, 181, 250, 241, 4, 54, 107, 160, 104, 141, 140, 41, 20, 16, 99, 36, 9, 7, 112, 250, 203, 105, 171, 202, 243, 214, 78, 28, 119, 210, 175, 2, 11, 121, 55, 110, 139, 58, 2, 40, 113, 155, 72, 38, 90, 233, 120, 117, 186, 174, 44, 88, 98, 123, 102, 116, 194, 230, 216, 42, 140, 247, 194, 85, 89, 57, 122, 168, 88, 166, 243, 66, 130, 133, 129, 60, 128, 121, 15, 102, 53, 196, 2, 59, 235, 112, 235, 52, 155, 20, 1, 82, 214, 155, 218, 160, 116, 112, 162, 211, 127, 253, 254, 142, 206, 232, 111, 130, 37, 157, 180, 90, 108, 0, 175, 53, 58, 136, 76, 226, 2, 48, 6, 171, 234, 197, 143, 138, 182, 239, 251, 61, 242, 235, 248, 82, 60, 124, 252, 46, 231, 137, 173, 40, 40, 144, 98, 128, 155, 120, 53, 134, 23, 78, 253, 212, 16, 249, 246, 49, 233, 223, 130, 177, 201, 10, 216, 29, 183, 241, 72, 26, 173, 184, 159, 173, 208, 195, 191, 132, 33, 58, 202, 105, 155, 180, 175, 135, 109, 248, 169, 205, 250, 55, 171, 89, 120, 36, 62, 37, 88, 142, 57, 27, 99, 90, 24, 26, 133, 97, 74, 21, 116, 105, 160, 101, 165, 16, 51, 213, 64, 253, 30, 123, 168, 108, 102, 236, 37, 233, 201, 70, 178, 99, 203, 231, 140, 152, 246, 37, 115, 81, 236, 207, 240, 11, 185, 253, 140, 69, 196, 159, 119, 244, 132, 172, 251, 67, 187, 164, 210, 80, 62, 91, 228, 78, 119, 207, 208, 136, 162, 208, 218, 186, 120, 106, 132, 23, 153, 109, 247, 62, 124, 174, 30, 166, 45, 96, 211, 60, 209, 196, 151, 226, 35, 18, 220, 195, 154, 170, 134, 44, 148, 241, 65, 116, 132, 60, 170, 173, 172, 66, 171, 81, 220, 107, 15, 194, 127, 190, 1, 179, 180, 195, 173, 78, 177, 10, 177, 246, 42, 140, 228, 128, 184, 95, 241, 184, 217, 215, 141, 243, 143, 19, 3, 179, 115, 97, 162, 199, 176, 66, 170, 191, 3, 226, 6, 130, 116, 106, 174, 52, 49, 131, 29, 231, 85, 73, 27, 10, 91, 166, 10, 191, 167, 116, 199, 232, 216, 223, 146, 166, 83, 7, 112, 217, 127, 236, 200, 146, 240, 60, 12, 254, 73, 95, 242, 241, 80, 221, 168, 137, 167, 67, 37, 8, 233, 80, 242, 147, 160, 157, 45, 45, 25, 163, 45, 65, 123, 170, 8, 45, 6, 249, 197, 121, 138, 174, 67, 79, 164, 228, 185, 0, 142, 174, 28, 214, 129, 98, 106, 56, 91, 130, 134, 242, 143, 29, 57, 26, 214, 147, 172, 162, 237, 233, 51, 15, 113, 204, 150, 91, 183, 155, 134, 117, 156, 45, 127, 132, 235, 66, 46, 233, 245, 26, 188, 183, 221, 153, 9, 100, 215, 104, 171, 56, 60, 207, 141, 80, 150, 21, 11, 32, 210, 146, 13, 230, 62, 231, 237, 156, 229, 63, 153, 34, 18, 183, 72, 173, 162, 45, 46, 98, 119, 95, 208, 219, 101, 48, 209, 156, 218, 124, 205, 195, 220, 251, 137, 38, 175, 42, 79, 24, 182, 224, 99, 65, 175, 192, 91, 211, 89, 23, 161, 2, 86, 203, 1, 29, 16, 240, 6, 183, 106, 140, 148, 74, 204], - [117, 176, 137, 133, 153, 6, 241, 212, 204, 212, 158, 2, 220, 213, 209, 145, 204, 3, 250, 219, 191, 46, 20, 97, 70, 85, 123, 12, 159, 242, 19, 157, 235, 211, 222, 168, 94, 187, 2, 193, 53, 47, 30, 213, 140, 208, 206, 181, 117, 76, 205, 71, 254, 206, 2, 115, 159, 111, 175, 62, 30, 221, 62, 138, 187, 127, 22, 56, 91, 61, 107, 157, 235, 114, 187, 34, 37, 20, 193, 72, 162, 199, 220, 170, 68, 189, 246, 24, 110, 15, 174, 60, 170, 62, 95, 114, 23, 49, 156, 56, 35, 235, 90, 248, 70, 210, 209, 57, 67, 33, 23, 189, 6, 163, 207, 10, 0, 27, 89, 24, 60, 141, 90, 232, 24, 68, 152, 204, 89, 17, 235, 223, 7, 49, 231, 96, 119, 144, 0, 163, 189, 171, 214, 7, 158, 246, 151, 152, 60, 218, 15, 0, 105, 12, 240, 96, 122, 6, 1, 113, 102, 230, 52, 195, 105, 31, 123, 209, 31, 119, 142, 250, 167, 130, 155, 195, 11, 103, 200, 94, 55, 20, 106, 35, 125, 252, 128, 38, 22, 210, 55, 117, 2, 93, 8, 146, 106, 50, 4, 240, 201, 144, 144, 132, 87, 28, 129, 96, 253, 118, 15, 145, 191, 108, 228, 13, 216, 188, 240, 245, 91, 209, 56, 163, 37, 250, 167, 164, 42, 46, 66, 100, 134, 48, 39, 14, 92, 234, 128, 129, 243, 178, 116, 209, 243, 118, 29, 62, 217, 126, 14, 220, 156, 79, 10, 179, 73, 159, 192, 221, 242, 23, 46, 70, 219, 162, 228, 106, 139, 253, 104, 26, 204, 104, 170, 221, 151, 142, 11, 119, 20, 71, 33, 79, 57, 73, 96, 207, 220, 250, 171, 196, 152, 53, 15, 154, 86, 122, 220, 111, 131, 129, 88, 156, 26, 205, 167, 206, 33, 123, 88, 30, 14, 160, 133, 0, 126, 173, 130, 165, 146, 201, 138, 102, 92, 109, 205, 159, 131, 40, 250, 74, 233, 143, 1, 171, 6, 117, 73, 190, 89, 143, 244, 206, 174, 201, 113, 164, 44, 38, 220, 192, 229, 135, 214, 6, 191, 117, 111, 29, 9, 54, 56, 244, 192, 173, 69, 225, 52, 124, 105, 251, 140, 238, 56, 56, 199, 5, 68, 94, 200, 119, 226, 97, 180, 113, 90, 171, 198, 162, 126, 153, 217, 232, 108, 102, 46, 27, 192, 125, 219, 146, 142, 191, 100, 142, 208, 9, 24, 221, 220, 124, 21, 53, 102, 57, 216, 14, 156, 176, 119, 26, 235, 204, 93, 133, 188, 174, 224, 114, 139, 58, 255, 205, 133, 142, 139, 183, 42, 97, 184, 107, 122, 18, 161, 189, 41, 67, 250, 143, 195, 28, 244, 187, 54, 240, 97, 247, 49, 1, 3, 5, 107, 30, 104, 154, 18, 131, 250, 89, 68, 43, 113, 6, 251, 29, 80, 143, 125, 101, 81, 37, 107, 9, 174, 152, 178, 45, 35, 85, 67, 36, 131, 37, 190, 32, 155, 249, 101, 89, 76, 191, 120, 28, 86, 64, 248, 135, 180, 238, 226, 46, 141, 99, 140, 137, 169, 118, 132, 39, 154, 176, 83, 187, 200, 135, 124, 173, 111, 169, 134, 86, 55, 88, 120, 103, 34, 71, 104, 43, 248, 147, 130, 96, 98, 16, 249, 17, 30, 8, 122, 223, 182, 119, 120, 141, 195, 115, 248, 181, 131, 238, 173, 128, 17, 200, 49, 54, 25, 135, 160, 164, 114, 72, 177, 146, 113, 216, 186, 131, 27, 164, 211, 54, 72, 165, 248, 181, 17, 188, 166, 186, 251, 21, 24, 45, 122, 50, 190, 167, 50, 201, 139, 96, 251, 82, 134, 81, 117, 16, 69, 119, 155, 38, 153, 122, 44, 84, 252, 54, 153, 42, 135, 209, 195, 252, 104, 53, 69, 27, 156, 135, 92, 63, 59, 94, 23, 214, 63, 144, 49, 183, 242, 148, 122, 136, 253, 252, 109, 193, 22, 121, 43, 136, 7, 211, 154, 223, 190, 230, 231, 42, 9, 7, 141, 249, 95, 56, 40, 212, 153, 161, 79, 137, 239, 174, 229, 116, 51, 239, 253, 179, 137, 95, 19, 196, 109, 77, 62, 181, 28, 81, 21, 248, 83, 226, 223, 231, 230, 238, 248, 199, 184, 78, 227, 212, 93, 236, 44, 246, 101, 192, 20, 177, 236, 170, 91, 176, 225, 112, 121, 79, 57, 75, 177, 133, 54, 33, 145, 136, 165, 245, 148, 185, 152, 186, 199, 29, 65, 220, 192, 72, 68, 239, 197, 227, 84, 163, 110, 90, 206, 79, 80, 2, 184, 92, 123, 200, 127, 123, 188, 158, 2, 10, 143, 120, 102, 60, 138, 64, 69, 7, 141, 212, 71, 169, 6, 86, 165, 175, 216, 14, 128, 164, 95, 92, 223, 255, 255, 3, 162, 176, 159, 90, 74, 145, 88, 66, 37, 10, 251, 108, 235, 252, 82, 19, 169, 12, 26, 210, 138, 152, 238, 203, 208, 254, 75, 71, 80, 98, 15, 35, 243, 138, 115, 12, 224, 75, 36, 158, 35, 133, 23, 210, 250, 135, 143, 119, 221, 240, 65, 178, 78, 14, 19, 66, 223, 95, 61, 204, 141, 171, 156, 71, 137, 76, 43, 71, 118, 137, 207, 176, 118, 120, 104, 248, 218, 113, 118, 121, 159, 77, 160, 151, 124, 12, 80, 55, 38, 199, 235, 37, 95, 244, 21, 255, 51, 78, 49, 49, 99, 21, 218, 109, 74, 105, 251, 99, 2, 163, 219, 139, 242, 194, 181, 178, 89, 109, 3, 49, 56, 6, 60, 150, 10, 43, 200, 219, 208, 25, 69, 182, 30, 201, 226, 4, 115, 238, 2, 188, 60, 209, 82, 111, 38, 135, 171, 40, 125, 253, 129, 71, 244, 52, 228, 197, 185, 173, 25, 132, 99, 88, 92, 231, 199, 48, 127, 141, 240, 53, 113, 44, 16, 11, 115, 39, 38, 17, 50, 208, 67, 8, 63, 76, 90, 192, 143, 11, 118, 67, 104, 158, 254, 143, 237, 74, 222, 216, 166, 213, 28, 87, 206, 33, 108, 156, 205, 239, 219, 75, 155, 28, 133, 73, 116, 240, 163, 84, 110, 89, 29, 39, 201, 60, 108, 67, 231, 68, 188, 55, 195, 125, 234, 33, 95, 184, 200, 5, 47, 108, 201, 79, 59, 226, 115, 92, 148, 102, 56, 195, 148, 140, 27, 30, 47, 229, 42, 205, 49, 0, 80, 102, 103, 65, 114, 138, 15, 13, 18, 227, 130, 23, 36, 81, 28, 35, 144, 62, 61, 83, 96, 193, 98, 6, 244, 202, 127, 120, 102, 219, 23, 151, 119, 226, 76, 121, 7, 70, 104, 205, 95, 14, 115, 145, 30, 165, 193, 39, 145, 142, 24, 60, 144, 97, 214, 101, 55, 61, 138, 208, 109, 147, 138, 102, 64, 49, 249, 86, 200, 202, 101, 2, 124, 40, 227, 217, 179, 47, 227, 216, 214, 138, 238, 220, 143, 231, 27, 165, 41, 32, 123, 172, 97, 84, 92, 131, 191, 65, 252, 248, 147, 21, 162, 134, 115, 22, 50, 4, 53, 82, 216, 114, 153, 253, 216, 8, 200, 112, 173, 64, 230, 233, 96, 50, 59, 59, 120, 137, 55, 90, 207, 251, 2, 95, 216, 47, 98, 103, 186, 11, 251, 24, 232, 246, 161, 59, 177, 201, 50, 141, 169, 233, 139, 151, 49, 150, 206, 22, 22, 253, 19, 222, 42, 233, 190, 22, 157, 227, 73, 117, 101, 234, 62, 188, 20, 37, 109, 38, 201, 103, 233, 202, 193, 205, 119, 141, 100, 141, 119, 77, 33, 11, 22, 195, 23, 216, 21, 71, 203, 91, 33, 73, 150, 1, 181, 12, 8, 44, 118, 254, 196, 150, 135, 64, 214, 34, 46, 254, 188, 85, 22, 104, 130, 248, 213, 53, 178, 17, 54, 205, 160, 55, 164, 251, 70, 84, 35, 194, 163, 64, 237, 91, 80, 19, 33, 203, 232, 45, 209, 132, 245, 234, 245, 63, 177, 211, 179, 207, 177, 249, 188, 87, 138, 125, 221, 44, 207, 157, 228, 22, 50, 35, 245, 237, 119, 46, 251, 150, 87, 164, 170, 137, 222, 0, 95, 12, 179, 76, 28, 117, 254, 105, 145, 221, 119, 194, 134, 97, 24, 109, 93, 176, 231, 123, 68, 82, 32, 164, 196, 43, 35, 141, 99, 56, 110, 57, 135, 142, 85, 145, 235, 202, 201, 211, 200, 6, 119, 107, 67, 119, 209, 24, 15, 185, 35, 230, 169, 35, 181, 166, 50, 81, 171, 71, 227, 172, 215, 117, 93, 86, 54, 241, 188, 206, 77, 62, 152, 62, 234, 19, 123, 94, 95, 93, 88, 53, 88, 10, 227, 108, 111, 67, 104, 60, 237, 118, 45, 92, 84, 217, 146, 224, 80, 86, 234, 216, 120, 157, 229, 112, 99, 149, 146, 49, 8, 56, 247, 99, 195, 149, 89, 44, 82, 193, 149, 35, 191, 85, 99, 35, 163, 87, 123, 125, 14, 132, 253, 5, 30, 3, 165, 248, 219, 26, 130, 96, 5, 174, 114, 110, 62, 172, 7, 158, 99, 77, 147, 99, 136, 64, 210, 142, 30, 49, 173, 196, 209, 61, 83, 36] - ], - "segmentSize": null - }, - { - "encrypted": [ - [147, 10, 90, 51, 8, 120, 221, 138, 55, 61, 54, 203, 60, 35, 121, 163, 223, 91, 158, 55, 212, 120, 224, 105, 223, 73, 81, 129, 63, 176, 243, 52, 148, 138, 148, 131, 55, 229, 209, 158, 212, 10, 146, 176, 16, 147, 49, 230, 94, 81, 181, 103, 109, 83, 177, 65, 56, 222, 249, 40, 94, 154, 251, 160, 200, 141, 96, 76, 97, 199, 11, 226, 193, 219, 251, 55, 27, 0, 125, 32, 10, 29, 0, 160, 49, 29, 49, 47, 91, 90, 134, 158, 238, 92, 31, 254, 45, 182, 109, 4, 172, 214, 129, 175, 64, 153, 117, 117, 183, 180, 114, 187, 70, 148, 119, 207, 28, 243, 7, 172, 80, 157, 238, 177, 12, 88, 249, 104, 22, 134, 220, 64, 192, 117, 94, 10, 205, 245, 129, 172, 196, 230, 4, 74, 51, 222, 69, 101, 165, 186, 166, 178, 151, 208, 251, 72, 109, 177, 181, 38, 53, 96, 96, 23, 207, 251, 151, 18, 113, 251, 30, 161, 39, 109, 116, 113, 28, 232, 223, 34, 137, 109, 0, 252, 153, 79, 173, 157, 77, 70, 86, 17, 196, 152, 93, 222, 240, 14, 255, 20, 81, 204, 112, 164, 24, 0, 148, 7, 40, 71, 201, 134, 105, 163, 41, 247, 148, 134, 79, 144, 92, 155, 162, 40, 207, 175, 219, 243, 107, 83, 208, 44, 83, 255, 248, 95, 162, 198, 144, 12, 238, 234, 197, 27, 29, 71, 104, 200, 227, 19, 91, 138, 221, 145, 141, 126, 220, 71, 254, 74, 147, 212, 232, 150, 168, 178, 103, 214, 51, 81, 197, 207, 168, 254, 132, 175, 134, 182, 237, 199, 248, 241, 163, 145, 124, 150, 175, 13, 33, 227, 117, 158, 201, 180, 145, 92, 9, 83, 252, 227, 190, 81, 6, 27, 180, 117, 249, 86, 203, 114, 172, 222, 190, 193, 52, 43, 135, 65, 173, 184, 189, 98, 190, 202, 113, 249, 233, 202, 38, 242, 201, 71, 6, 189, 137, 147, 124, 252, 31, 83, 12, 238, 142, 82, 231, 249, 41, 187, 93, 205, 38, 162, 165, 24, 223, 125, 9, 15, 31, 115, 26, 174, 165, 123, 194, 68, 1, 140, 97, 10, 252, 213, 140, 250, 254, 18, 211, 118, 217, 222, 184, 15, 232, 8, 187, 148, 226, 21, 102, 186, 233, 94, 6, 42, 234, 189, 159, 24, 209, 227, 159, 110, 108, 212, 238, 158, 102, 252, 70, 7, 195, 116, 138, 232, 239, 163, 20, 8, 70, 74, 2, 190, 142, 249, 65, 41, 198, 252, 171, 63, 63, 195, 134, 67, 140, 98, 2, 203, 166, 117, 159, 11, 204, 41, 133, 191, 195, 27, 179, 1, 252, 87, 129, 148, 114, 204, 119, 217, 8, 27, 141, 150, 27, 18, 20, 233, 124, 181, 103, 66, 21, 110, 55, 166, 126, 170, 83, 245, 37, 174, 250, 38, 228, 179, 65, 159, 210, 117, 215, 249, 65, 33, 198, 185, 31, 243, 93, 107, 173, 156, 255, 24, 64, 118, 184, 228, 211, 199, 249, 130, 60, 126, 78, 117, 170, 137, 123, 40, 7, 25, 81, 139, 17, 166, 11, 75, 129, 154, 68, 63, 128, 148, 151, 96, 55, 26, 219, 13, 71, 30, 2, 161, 148, 38, 198, 113, 8, 154, 65, 162, 78, 146, 248, 14, 44, 152, 152, 27, 49, 248, 80, 233, 151, 239, 62, 81, 34, 122, 195, 159, 18, 190, 90, 40, 152, 24, 81, 121, 110, 88, 173, 251, 128, 171, 123, 183, 129, 163, 42, 140, 140, 58, 21, 169, 190, 106, 48, 221, 175, 38, 150, 252, 247, 206, 111, 216, 55, 181, 64, 168, 181, 188, 83, 144, 37, 123, 216, 177, 227, 182, 30, 230, 198, 90, 63, 177, 243, 194, 157, 231, 122, 83, 195, 64, 4, 90, 68, 137, 96, 246, 38, 203, 215, 47, 20, 59, 115, 25, 213, 230, 209, 71, 67, 29, 147, 104, 233, 6, 215, 78, 137, 40, 171, 201, 156, 103, 31, 209, 220, 150, 249, 72, 212, 216, 11, 175, 206, 225, 145, 36, 228, 44, 224, 125, 206, 83, 46, 63, 103, 214, 114, 188, 19, 165, 130, 137, 68, 130, 39, 101, 147, 102, 7, 200, 249, 143, 18, 12, 165, 238, 250, 233, 102, 124, 59, 170, 168, 184, 39, 122, 21, 124, 113, 215, 199, 68, 218, 213, 125, 25, 132, 39, 37, 74, 22, 131, 67, 197, 124, 178, 165, 120, 153, 152, 244, 98, 38, 83, 179, 191, 255, 147, 96, 157, 77, 167, 42, 42, 179, 128, 112, 69, 154, 240, 165, 121, 12, 192, 194, 174, 18, 41, 35, 65, 56, 159, 78, 1, 47, 172, 22, 45, 155, 228, 101, 190, 247, 168, 190, 174, 191, 109, 50, 223, 166, 179, 209, 12, 163, 197, 232, 190, 108, 96, 158, 207, 28, 81, 202, 46, 105, 102, 75, 244, 72, 110, 197, 176, 201, 127, 82, 5, 5, 14, 59, 147, 183, 51, 38, 178, 224, 201, 52, 126, 47, 103, 147, 153, 73, 165, 193, 201, 41, 241, 90, 113, 120, 56, 127, 197, 150, 77, 99, 19, 0, 27, 203, 189, 97, 81, 17, 187, 13, 84, 7, 158, 170, 33, 25, 62, 253, 241, 82, 55, 254, 11, 26, 99, 254, 213, 99, 35, 217, 81, 108, 39, 8, 220, 235, 161, 193, 86, 64, 47, 105, 184, 214, 171, 220, 244, 142, 230, 110, 113, 237, 196, 214, 122, 167, 210, 10, 74, 235, 196, 194, 175, 107, 74, 191, 111, 47, 227, 119, 190, 185, 145, 70, 220, 233, 5, 37, 159, 168, 60, 222, 106, 238, 63, 35, 46, 247, 224, 168, 45, 183, 139, 36, 50, 227, 172, 65, 233, 101, 220, 188, 218, 58, 163, 150, 28, 53, 122, 192, 41, 39, 11, 13, 234, 247, 171, 26, 23, 114, 71, 192, 140, 38, 65, 202, 187, 158, 178, 145, 229, 98, 149, 8, 127, 26, 199, 236, 224, 60, 62, 127, 104, 189, 128, 220, 205, 250, 122, 82, 10, 34, 201, 238, 193, 234, 167, 244, 70, 9, 74, 242, 9, 239, 163, 58, 154, 164, 34, 137, 66, 100, 186, 116, 153, 193, 113, 200, 203, 126, 177, 97, 137, 200, 25, 99, 164, 39, 55, 225, 252, 159, 208, 208, 248, 176, 244, 100, 171, 115, 71, 82, 128, 54, 187, 146, 2, 56, 81, 98, 96, 88, 74, 203, 223, 245, 96, 3, 118, 28, 134, 199, 92, 144, 67, 143, 11, 172, 28, 135, 235, 90, 153, 237, 127, 186, 78, 218, 204, 161, 145, 36, 51, 159, 86, 142, 168, 54, 63, 47, 47, 251, 160, 55, 97, 235, 175, 136, 127, 82, 34, 216, 10, 76, 109, 254, 41, 190, 188, 15, 14, 47, 81, 74, 18, 37, 49, 3, 143, 185, 132, 7, 161, 201, 200, 24, 64, 220, 87, 164, 229, 105, 108, 13, 4, 185, 225, 59, 146, 26, 42, 40, 128, 131, 148, 148, 168, 21, 114, 157, 43, 224, 142, 232, 155, 14, 220, 129, 12, 42, 183, 123, 235, 78, 122, 78, 191, 29, 92, 165, 68, 172, 107, 243, 117, 58, 185, 204, 231, 226, 187, 67, 32, 127, 26, 52, 62, 195, 222, 233, 236, 247, 70, 173, 65, 153, 148, 28, 193, 13, 147, 216, 28, 145, 219, 34, 230, 35, 100, 11, 108, 87, 142, 140, 165, 224, 130, 229, 35, 95, 84, 173, 245, 183, 137, 116, 80, 26, 35, 239, 224, 4, 243, 250, 96, 221, 37, 254, 57, 187, 99, 149, 192, 87, 235, 63, 236, 206, 237, 118, 188, 238, 191, 207, 38, 154, 53, 252, 208, 121, 177, 156, 57, 118, 52, 43, 3, 60, 51, 198, 165, 112, 63, 130, 188, 169, 1, 14, 167, 100, 151, 45, 149, 44, 253, 39, 170, 90, 65, 201, 14, 91, 95, 76, 60, 44, 249, 12, 178, 112, 153, 102, 244, 45, 105, 207, 135, 233, 206, 26, 228, 230, 61, 42, 135, 99, 125, 21, 134, 190, 215, 46, 220, 19, 1, 12, 10, 1, 80, 10, 238, 62, 51, 23, 123, 3, 245, 21, 129, 56, 142, 100, 41, 166, 234, 96, 174, 145, 18, 60, 246, 249, 64, 130, 126, 147, 82, 161, 129, 184, 242, 7, 215, 245, 224, 192, 52, 35, 10, 215, 170, 165, 131, 173, 99, 13, 231, 187, 193, 70, 220, 145, 210, 0, 66, 204, 221, 249, 56, 18, 135, 115, 221, 153, 32, 42, 228, 213, 54, 190, 184, 22, 153, 99, 239, 197, 197, 251, 163, 152, 79, 201, 3, 65, 83, 77, 173, 125, 128, 3, 130, 20, 191, 247, 49, 233, 62, 20, 2, 134, 130, 52, 158, 48, 217, 99, 175, 215, 21, 48, 77, 26, 138, 190, 91, 99, 150, 143, 217, 4, 153, 117, 249, 102, 12, 65, 16, 96, 234, 86, 101, 151, 142, 121, 55, 182, 57, 239, 150, 37, 246, 39, 244, 29, 86, 44, 2, 177, 227, 180, 9, 210, 152, 240, 159, 19, 121, 135, 46, 27, 129, 202, 2, 131, 15, 221, 105, 174, 80, 146, 247, 20, 5, 43, 23, 162, 76, 195, 198, 180, 71, 114, 190, 123, 218, 135, 0, 90, 75, 149, 158, 205, 20, 189, 94, 82, 89, 156, 170, 14, 133, 239, 18, 99, 168, 252, 0, 162, 85, 247, 148, 177, 5, 116, 53, 113, 125, 170, 145, 11, 123, 237, 214, 101, 20, 200, 12, 241, 168, 165, 127, 104, 19, 170, 92, 133, 144, 54, 88, 124, 37, 117, 233, 126, 88, 184, 180, 237, 196, 234, 144, 93, 242, 229, 230, 58, 217, 239, 233, 6, 126, 111, 37, 102, 187, 168, 25, 154, 41, 16, 102, 122, 133, 53, 95, 57, 236, 165, 81, 154, 156, 95, 92, 0, 222, 178, 68, 95, 225, 179, 19, 189, 252, 160, 30, 95, 218, 253, 189, 111, 81, 40, 186, 60, 31, 120, 4, 172, 99, 142, 3, 144, 93, 214, 143, 101, 249, 167, 183, 110, 82, 202, 43, 70, 103, 172, 77, 19, 7, 115, 242, 54, 13, 75, 39, 175, 56, 213, 200, 161, 252, 143, 40, 238, 53, 223, 250, 196, 198, 150, 245, 83, 8, 220, 116, 224, 125, 124, 249, 230, 33, 157, 131, 18, 81, 158, 199, 151, 14, 15, 54, 80, 15, 110, 84, 206, 10, 52, 30, 206, 181, 21, 41, 146, 253, 103, 242, 29, 4, 26, 41, 131, 90, 241, 237, 111, 49, 140, 98, 138, 14, 215, 182, 246, 11, 235, 190, 196, 12, 41, 228, 121, 3, 128, 98, 83, 237, 203, 219, 118, 220, 134, 186, 251, 65, 190, 88, 65, 87, 86, 135, 115, 47, 167, 124, 209, 92, 133, 15, 231, 37, 141, 76, 177, 229, 227, 186, 223, 239, 250, 83, 213, 176, 106, 34, 118, 12, 229, 70, 185, 127, 67, 97, 224, 180, 125, 163, 90, 37, 13, 39, 154, 163, 56, 190, 113, 24, 207, 210, 161, 53, 160, 100, 232, 13, 181, 144, 114, 183, 39, 189, 23, 112, 254, 130, 30, 165, 223, 163, 17, 206, 208, 66, 64, 156, 64, 117, 209, 99, 4, 247, 207, 90, 72, 57, 47, 141, 59, 146, 32, 209, 143, 170, 74, 136, 45, 40, 200, 250, 48, 85, 92, 58, 180, 25, 213, 35, 200, 43, 17, 125, 67, 178, 163, 174, 234, 186, 70, 211, 120, 19, 195, 247, 154, 146, 245, 34, 226, 225, 76, 96, 52, 140, 179, 1, 52, 214, 117, 47, 77, 117, 247, 204, 12, 46, 183, 10, 127, 124, 75, 16, 203, 109, 149, 100, 50, 159, 25, 9, 217, 138, 190, 113, 161, 170, 184, 64, 71, 162, 137, 124, 217, 220, 12, 247, 173, 141, 171, 185, 57, 170, 103, 134, 172, 92, 224, 186, 122, 66, 221, 142, 171, 93, 193, 178, 93, 179, 121, 152, 183, 24, 83, 92, 119, 73, 18, 137, 136, 251, 135, 123, 220, 63, 254, 14, 85, 20, 73, 238, 119, 147, 208, 73, 132, 77, 244, 143, 130, 154, 104, 44, 79, 194, 126, 17, 86, 214, 138, 205, 40, 53, 134, 192, 107, 158, 156, 231, 8, 213, 187, 100, 67, 83, 109, 70, 251, 4, 247, 175, 31, 207, 57, 155, 32, 26, 143, 95, 32, 238, 13, 21, 146, 117, 82, 123, 59, 49, 114, 244, 54, 128, 193, 19, 217, 199, 27, 156, 97, 84, 112, 134, 41, 213, 75, 54, 146, 38, 156, 62, 39, 15, 74, 51, 43, 231, 51, 9, 136, 167, 20, 117, 116, 19, 91, 56, 7, 112, 67, 80, 91, 60, 197, 77, 33, 220, 166, 138, 60, 107, 172, 231, 254, 198, 24, 178, 215, 4, 52, 105, 71, 45, 55, 200, 116, 254, 55, 32, 62, 31, 79, 44, 240, 61, 226, 144, 234, 119, 17, 67, 60, 234, 161, 237, 115, 171, 143, 217, 113, 95, 207, 243, 126, 222, 130, 10, 184, 1, 180, 149, 166, 51, 233, 109, 103, 175, 118, 85, 179, 251, 58, 21, 55, 192, 167, 118, 96, 43, 127, 203, 232, 205, 242, 247, 147, 187, 150, 110, 130, 180, 20, 51, 7, 7, 230, 156, 77, 18, 240, 28, 173, 149, 9, 2, 161, 185, 237, 236, 148, 198, 65, 30, 102, 189, 1, 209, 82, 101, 45, 21, 166, 166, 103, 24, 66, 32, 79, 222, 237, 54, 10, 37, 29, 241, 17, 98, 0, 179, 168, 155, 58, 208, 13, 107, 233, 30, 192, 79, 224, 93, 97, 253, 125, 29, 62, 167, 0, 229, 243, 166, 73, 17, 154, 190, 41, 127, 213, 214, 167, 13, 128, 224, 153, 211, 121, 230, 51, 23, 118, 148, 65, 241, 187, 133, 85, 220, 158, 201, 21, 70, 23, 57, 103, 89, 84, 89, 146, 166, 226, 253, 94, 43, 139, 195, 143, 209, 113, 234, 53, 146, 226, 190, 107, 197, 49, 79, 139, 128, 82, 123, 207, 201, 61, 111, 158, 157, 154, 73, 80, 234, 241, 113, 9, 76, 62, 209, 210, 108, 46, 24, 88, 218, 191, 132, 129, 252, 176, 110, 51, 128, 38, 51, 100, 235, 144, 187, 137, 50, 31, 82, 24, 159, 146, 163, 59, 95, 205, 87, 35, 36, 168, 214, 78, 185, 103, 114, 185, 42, 81, 45, 210, 177, 193, 176, 214, 27, 109, 53, 93, 29, 183, 17, 4, 206, 39, 170, 145, 42, 149, 68, 44, 233, 52, 133, 118, 244, 106, 194, 153, 248, 179, 47, 245, 94, 43, 99, 81, 231, 15, 177, 12, 66, 226, 220, 132, 57, 239, 255, 122, 69, 64, 100, 242, 147, 188, 157, 250, 74, 54, 112, 137, 234, 251, 251, 6, 73, 86, 253, 177, 161, 31, 170, 184, 164, 205, 93, 95, 105, 165, 166, 133, 207, 188, 237, 44, 212, 173, 199, 184, 125, 37, 129, 184, 43, 241, 229, 204, 57, 105, 134, 220, 88, 191, 221, 65, 19, 100, 27, 32, 183, 91, 249, 75, 175, 92, 35, 161, 241, 109, 51, 53, 129, 8, 240, 164, 156, 46, 248, 38, 65, 239, 182, 197, 237, 99, 114, 50, 212, 89, 139, 59, 29, 56, 42, 167, 26, 122, 205, 180, 247, 238, 148, 120, 22, 249, 235, 20, 14, 137, 217, 76, 88, 19, 111, 225, 149, 64, 246, 235, 116, 91, 64, 70, 53, 59, 234, 136, 70, 11, 100, 51, 144, 178, 254, 148, 88, 176, 89, 227, 77, 95, 248, 235, 19, 230, 106, 192, 237, 170, 156, 124, 40, 249, 80, 167, 49, 93, 135, 210, 35, 137, 201, 26, 16, 119, 116, 111, 62, 106, 246, 78, 147, 19, 202, 34, 195, 99, 255, 96, 202, 92, 181, 60, 207, 75, 220, 77, 100, 231, 35, 10, 164, 67, 239, 239, 224, 117, 59, 35, 184, 150, 143, 165, 139, 47, 201, 133, 153, 6, 216, 149, 6, 166, 151, 142, 105, 195, 39, 193, 231, 73, 177, 75, 22, 223, 104, 251, 164, 232, 174, 111, 196, 47, 56, 207, 189, 75, 0, 93, 19, 152, 172, 37, 70, 242, 161, 154, 6, 184, 240, 217, 87, 13, 90, 16, 198, 14, 209, 248, 123, 204, 203, 92, 109, 3, 128, 19, 144, 249, 194, 131, 231, 199, 124, 201, 163, 196, 231, 56, 59, 177, 183, 142, 149, 198, 157, 161, 220, 125, 157, 9, 122, 195, 172, 98, 243, 95, 250, 8, 165, 247, 110, 162, 81, 0, 221, 12, 6, 208, 132, 22, 185, 182, 251, 20, 27, 165, 224, 118, 234, 14, 100, 39, 239, 224, 208, 111, 147, 220, 91, 16, 203, 86, 219, 226, 161, 219, 18, 67, 178, 135, 30, 28, 68, 157, 79, 255, 148, 243, 84, 161, 28, 88, 39, 134, 206, 79, 95, 217, 4, 86, 62, 174, 10, 79, 195, 16, 41, 197, 235, 251, 115, 94, 143, 16, 18, 192, 135, 225, 58, 232, 227, 138, 76, 2, 211, 80, 45, 113, 183, 21, 30, 91, 23, 174, 148, 242, 228, 95, 210, 16, 203, 39, 138, 17, 181, 75, 110, 106, 236, 213, 159, 50, 111, 119, 81, 190, 52, 139, 20, 69, 79, 52, 108, 82, 109, 234, 163, 134, 20, 112, 49, 126, 109, 235, 16, 146, 42, 136, 96, 59, 110, 206, 15, 72, 11, 250, 169, 140, 5, 100, 172, 185, 128, 167, 188, 105, 217, 223, 53, 188, 230, 238, 150, 122, 160, 186, 162, 146, 121, 12, 161, 253, 32, 236, 73, 84, 80, 11, 120, 154, 60, 25, 184, 143, 104, 194, 230, 153, 252, 115, 168, 143, 226, 54, 231, 18, 128, 198, 219, 59, 38, 74, 95, 49, 198, 230, 190, 236, 122, 126, 121, 106, 112, 22, 82, 244, 14, 202, 148, 96, 153, 160, 12, 55, 249, 81, 146, 188, 102, 224, 236, 143, 120, 80, 114, 3, 45, 232, 85, 158, 198, 135, 128, 145, 143, 64, 48, 189, 199, 223, 107, 161, 78, 159, 200, 76, 192, 40, 103, 21, 13, 117, 156, 191, 252, 77, 75, 217, 155, 231, 242, 31, 29, 255, 228, 23, 173, 76, 158, 180, 150, 11, 225, 169, 71, 92, 40, 209, 32, 163, 29, 111, 74, 131, 253, 148, 49, 166, 0, 195, 53, 149, 223, 92, 169, 63, 249, 84, 251, 75, 242, 240, 55, 205, 249, 84, 181, 6, 39, 227, 187, 7, 29, 154, 21, 220, 48, 156, 179, 121, 80, 196, 0, 187, 207, 81, 225, 112, 95, 135, 20, 234, 40, 87, 108, 15, 189, 21, 38, 109, 195, 86, 84, 210, 196, 166, 227, 230, 209, 24, 47, 154, 196, 128, 79, 139, 234, 122, 96, 45, 168, 83, 183, 177, 221, 27, 123, 174, 25, 167, 89, 77, 183, 158, 131, 201, 160, 179, 208, 122, 120, 214, 31, 158, 217, 84, 175, 241, 160, 185, 223, 88, 72, 223, 89, 19, 239, 14, 51, 142, 241, 240, 176, 22, 122, 232, 212, 236, 71, 211, 12, 182, 108, 96, 236, 109, 110, 74, 168, 82, 153, 86, 92, 228, 6, 9, 115, 12, 137, 63, 182, 100, 214, 84, 213, 246, 221, 18, 208, 74, 220, 144, 131, 136, 4, 58, 164, 114, 24, 166, 133, 181, 99, 167, 43, 231, 105, 230, 13, 45, 88, 232, 143, 242, 160, 115, 65, 92, 155, 196, 24, 212, 53, 30, 122, 160, 240, 73, 32, 233, 202, 15, 41, 15, 215, 100, 67, 20, 191, 229, 97, 217, 6, 225, 249, 26, 162, 88, 234, 158, 228, 105, 114, 83, 62, 183, 37, 250, 63, 139, 167, 159, 148, 89, 128, 250, 41, 90, 79, 26, 50, 26, 221, 70, 51, 170, 95, 210, 127, 69, 188, 62, 80, 22, 37, 20, 44, 231, 147, 10, 73, 11, 210, 186, 57, 8, 13, 70, 103, 176, 74, 231, 119, 233, 44, 242, 157, 224, 222, 110, 34, 205, 9, 210, 117, 112, 122, 98, 37, 239, 206, 59, 31, 248, 59, 166, 245, 176, 122, 69, 211, 39, 62, 252, 168, 230, 96, 251, 250, 222, 180, 182, 231, 169, 201, 115, 175, 116, 1, 91, 151, 177, 55, 68, 10, 207, 198, 209, 156, 211, 110, 37, 204, 231, 61, 34, 107, 57, 17, 230, 132, 126, 140, 83, 34, 83, 205, 40, 123, 144, 37, 171, 193, 127, 96, 59, 109, 10, 71, 200, 199, 126, 130, 36, 37, 53, 220, 15, 96, 39, 88, 192, 123, 68, 197, 60, 131, 148, 201, 152, 131, 119, 202, 55, 51, 199, 226, 216, 185, 172, 146, 103, 142, 146, 111, 71, 221, 165, 230, 71, 238, 13, 168, 142, 202, 58, 167, 159, 164, 228, 5, 140, 129, 126, 251, 114, 12, 183, 29, 79, 130, 254, 15, 164, 171, 184, 121, 86, 244, 28, 168, 5, 113, 219, 115, 202, 200, 173, 84, 10, 49, 222, 115, 9, 125, 28, 185, 48, 56, 130, 223, 170, 64, 65, 203, 173, 127, 142, 143, 244, 115, 43, 33, 148, 191, 49, 98, 220, 105, 194, 140, 236, 190, 99, 152, 102, 187, 114, 74, 233, 218, 130, 99, 12, 104, 166, 122, 161, 185, 232, 98, 241, 96, 229, 24, 252, 204, 12, 39, 74, 237, 220, 202, 57, 182, 55, 105, 83, 143, 142, 190, 52, 155, 248, 152, 82, 113, 175, 69, 51, 81, 85, 250, 71, 161, 131, 27, 244, 49, 112, 232, 206, 16, 140, 97, 208, 69, 145, 123, 223, 209, 59, 245, 142, 125, 71, 169, 40, 178, 118, 42, 5, 99, 195, 162, 155, 38, 243, 76, 218, 248, 13, 113, 191, 134, 160, 192, 179, 254, 252, 230, 79, 241, 250, 88, 60, 186, 104, 210, 170, 168, 199, 199, 14, 185, 211, 65, 67, 157, 100, 135, 155, 229, 208, 131, 170, 219, 8, 247, 63, 138, 39, 98, 38, 225, 205, 251, 198, 119, 148, 198, 48, 206, 70, 92, 237, 232, 116, 112, 133, 165, 136, 239, 139, 62, 88, 86, 197, 131, 136, 129, 168, 250, 16, 82, 193, 170, 139, 201, 223, 165, 214, 163, 225, 3, 0, 162, 30, 42, 244, 183, 120, 147, 250, 95, 185, 141, 37, 245, 15, 153, 215, 175, 26, 244, 6, 172, 140, 245, 69, 62, 141, 193, 61, 194, 226, 195, 208, 190, 116, 162, 239, 223, 174, 85, 233, 215, 210, 28, 246, 86, 170, 175, 72, 154, 156, 171, 235, 13, 190, 243, 172, 240, 207, 214, 149, 236, 11, 130, 177, 60, 197, 236, 116, 222, 71, 98, 245, 151, 248, 174, 53, 43, 91, 121, 151, 211, 55, 210, 209, 68, 14, 175, 235, 28, 118, 6, 240, 69, 48, 174, 190, 169, 87, 46, 50, 76, 233, 101, 13, 5, 232, 5, 203, 93, 100, 216, 87, 204, 191, 223, 157, 251, 6, 165, 40, 114, 179, 182, 168, 54, 125, 123, 174, 241, 119, 29, 240, 138, 189, 80, 169, 89, 97, 97, 195, 81, 18, 206, 139, 193, 227, 234, 0, 107, 46, 60, 157, 100, 102, 143, 161, 224, 18, 205, 89, 246, 119, 180, 138, 195, 1, 168, 57, 234, 228, 230, 147, 239, 133, 232, 10, 22, 173, 251, 205, 154, 18, 43, 70, 113, 5, 3, 117, 36, 19, 16, 240, 38, 34, 83, 184, 96, 152, 37, 86, 133, 192, 18, 246, 104, 221, 252, 104, 60, 250, 217, 35, 238, 239, 43, 127, 83, 69, 13, 147, 32, 93, 65, 29, 190, 106, 55, 165, 185, 26, 43, 98, 64, 129, 217, 250, 52, 104, 138, 212, 109, 220, 247, 9, 139, 139, 95, 19, 208, 251, 235, 139, 157, 130, 73, 2, 30, 134, 9, 188, 27, 125, 20, 8, 77, 206, 138, 28, 65, 7, 78, 83, 240, 247, 127, 241, 114, 182, 60, 36, 42, 113, 169, 241, 204, 8, 159, 16, 121, 254, 137, 161, 25, 243, 144, 119, 56, 32, 89, 208, 23, 175, 69, 40, 102, 156, 17, 227, 51, 201, 123, 252, 63, 20, 245, 184, 164, 254, 158, 78, 38, 142, 192, 129, 194, 219, 208, 223, 158, 67, 128, 54, 101, 9, 3, 131, 24, 33, 222, 246, 242, 113, 125, 114, 18, 139, 236, 251, 191, 19, 76, 188, 248, 204, 192, 244, 33, 109, 133, 46, 33, 9, 79, 159, 105, 41, 218, 23, 59, 68, 227, 87, 135, 190, 76, 34, 113, 248, 45, 154, 159, 216, 91, 3, 57, 128, 89, 130, 63, 80, 40, 137, 36, 101, 82, 190, 90, 206, 191, 101, 204, 43, 29, 82, 228, 105, 23, 217, 101, 15, 94, 80, 184, 143, 215, 0, 155, 156, 192, 56, 152, 241, 136, 156, 204, 249, 250, 22, 29, 69, 223, 112, 210, 142, 53, 60, 39, 233, 82, 66, 109, 18, 100, 168, 81, 91, 71, 58, 184, 95, 139, 184, 235, 124, 206, 110, 229, 119, 10, 237, 45, 150, 95, 209, 158, 149, 136, 137, 103, 131, 209, 209, 13, 78, 2, 108, 108, 35, 36, 161, 238, 208, 127, 157, 209, 119, 5, 210, 54, 118, 239, 4, 128, 124, 178, 1, 158, 189, 242, 138, 202, 248, 107, 121, 143, 33, 205, 70, 189, 51, 5, 224, 85, 51, 253, 208, 115, 138, 187, 233, 248, 143, 102, 220, 18, 16, 129, 189, 236, 239, 69, 223, 96, 156, 226, 35, 171, 94, 222, 173, 154, 133, 12, 118, 156, 55, 18, 155, 174, 21, 199, 91, 77, 52, 38, 77, 230, 96, 250, 24, 0, 170, 59, 188, 35, 178, 195, 119, 117, 192, 188, 224, 63, 253, 189, 242, 149, 225, 97, 177, 49, 252, 172, 175, 52, 205, 41, 92, 155, 78, 180, 22, 152, 195, 152, 136, 195, 143, 244, 79, 120, 60, 79, 66, 180, 88, 130, 35, 40, 112, 9, 112, 86, 95, 210, 175, 205, 218, 131, 212, 111, 52, 204, 214, 107, 104, 131, 40, 64, 163, 196, 152, 16, 223, 153, 192, 58, 15, 81, 7, 219, 208, 237, 38, 61, 53, 196, 168, 226, 192, 171, 227, 104, 238, 108, 199, 6, 127, 226, 200, 252, 117, 38, 110, 100, 77, 154, 15, 248, 190, 107, 4, 174, 40, 126, 9, 179, 197, 110, 59, 88, 196, 39, 218, 89, 222, 151, 205, 183, 147, 174, 193, 76, 184, 95, 224, 214, 137, 151, 143, 39, 22, 222, 222, 116, 216, 43, 75, 232, 238, 39, 67, 33, 243, 97, 87, 231, 5, 202, 71, 156, 0, 251, 90, 238, 223, 206, 155, 47, 111, 21, 204, 116, 44, 179, 64, 21, 75, 154, 23, 108, 228, 180, 130, 87, 191, 73, 134, 178, 91, 85, 72, 98, 15, 14, 143, 82, 5, 241, 106, 190, 232, 243, 59, 219, 199, 195, 176, 143, 128, 1, 120, 232, 183, 45, 202, 74, 152, 8, 32, 82, 255, 161, 53, 36, 195, 124, 119, 51, 66, 58, 23, 87, 120, 26, 138, 80, 89, 167, 167, 84, 191, 163, 86, 33, 173, 81, 16, 52, 248, 17, 235, 204, 253, 136, 96, 201, 179, 178, 168, 255, 64, 161, 42, 73, 185, 123, 246, 24, 147, 233, 18, 139, 195, 194, 45, 248, 228, 143, 117, 255, 206, 95, 129, 23, 109, 47, 251, 51, 67, 28, 74, 255, 144, 133, 50, 213, 200, 203, 189, 112, 75, 226, 241, 84, 161, 228, 207, 220, 135, 61, 1, 101, 33, 200, 209, 115, 82, 38, 97, 248, 21, 72, 244, 59, 172, 144, 156, 233, 196, 76, 55, 125, 0, 178, 35, 229, 120, 29, 43, 246, 253, 80, 152, 137, 151, 106, 164, 132, 18, 98, 187, 67, 31, 153, 237, 217, 179, 164, 154, 44, 185, 251, 193, 108, 88, 72, 244, 124, 143, 103, 135, 165, 50, 220, 224, 110, 146, 187, 85, 7, 136, 231, 95, 23, 243, 83, 0, 166, 204, 128, 128, 163, 246, 31, 21, 67, 109, 232, 28, 107, 68, 82, 105, 247, 237, 116, 21, 147, 199, 21, 12, 243, 176, 197, 170, 74, 58, 70, 49, 226, 69, 219, 189, 207, 25, 217, 41, 43, 117, 169, 239, 164, 47, 219, 216, 170, 133, 62, 59, 82, 160, 150, 20, 222, 216, 89, 59, 80, 114, 20, 22, 131, 119, 75, 100, 174, 83, 145, 181, 177, 239, 229, 160, 117, 51, 86, 133, 93, 33, 109, 189, 21, 230, 84, 202, 109, 76, 13, 27, 74, 75, 198, 28, 16, 4, 51, 59, 229, 13, 97, 18, 38, 68, 199, 113, 184, 65, 218, 23, 166, 188, 219, 128, 79, 31, 73, 144, 57, 120, 212, 163, 74, 220, 221, 110, 229, 191, 124, 81, 55, 99, 134, 179, 53, 242, 161, 155, 161, 246, 207, 190, 253, 180, 146, 237, 237, 11, 198, 40, 116, 60, 59, 9, 54, 71, 239, 196, 230, 104, 165, 233, 250, 153, 9, 209, 96, 145, 32, 193, 152, 22, 70, 225, 193, 135, 157, 158, 212, 189, 92, 106, 0, 25, 196, 210, 208, 242, 2, 103, 34, 173, 177, 215, 163, 54, 244, 215, 152, 68, 204, 236, 126, 93, 215, 26, 246, 206, 28, 3, 29, 237, 47, 211, 227, 250, 234, 116, 34, 203, 36, 93, 171, 61, 3, 160, 243, 244, 248, 106, 189, 218, 218, 234, 96, 213, 246, 218, 74, 229, 255, 57, 147, 244, 15, 67, 93, 242, 117, 246, 83, 30, 237, 79, 181, 194, 154, 106, 193, 186, 133, 51, 164, 94, 9, 156, 67, 232, 209, 35, 10, 48, 76, 222, 138, 233, 81, 39, 57, 97, 224, 28, 42, 175, 174, 247, 215, 71, 204, 48, 177, 150, 161, 192, 133, 193, 25, 233, 177, 246, 84, 33, 245, 19, 201, 155, 102, 222, 210, 215, 5, 186, 123, 135, 172, 58, 148, 143, 66, 252, 175, 78, 105, 155, 91, 223, 211, 101, 145, 72, 139, 116, 204, 20, 0, 209, 185, 219, 199, 35, 40, 253, 143, 78, 219, 117, 59, 172, 192, 250, 85, 29, 108, 27, 73, 91, 190, 214, 5, 9, 107, 172, 154, 225, 223, 69, 96, 244, 10, 137, 182, 26, 225, 56, 19, 18, 10, 192, 214, 203, 130, 13, 77, 69, 198, 189, 82, 104, 190, 195, 68, 16, 70, 118, 101, 108, 96, 49, 101, 216, 143, 213, 52, 95, 26, 16, 20, 34, 125, 189, 118, 206, 47, 250, 51, 188, 160, 195, 111, 157, 79, 196, 227, 137, 63, 140, 202, 221, 30, 60, 122, 99, 248, 164, 211, 161, 129, 66, 78, 167, 248, 219, 217, 138, 63, 167, 120, 199, 249, 91, 13, 135, 33, 58, 23, 48, 255, 134, 233, 5, 83, 74, 2, 38, 0, 35, 146, 98, 85, 44, 212, 146, 84, 84, 153, 65, 108, 146, 251, 20, 3, 142, 247, 129, 254, 177, 12, 98, 168, 252, 114, 67, 214, 54, 173, 214, 87, 20, 150, 158, 1, 72, 110, 193, 38, 18, 201, 77, 140, 158, 140, 58, 255, 62, 189, 121, 226, 1, 224, 171, 241, 237, 253, 201, 148, 214, 82, 161, 161, 151, 82, 146, 142, 210, 50, 68, 173, 100, 55, 160, 247, 50, 209, 176, 66, 223, 72, 218, 49, 240, 11, 226, 35, 184, 21, 87, 47, 177, 243, 33, 254, 52, 14, 132, 42, 242, 139, 246, 128, 238, 91, 115, 195, 35, 241, 168, 178, 252, 154, 81, 32, 148, 227, 251, 74, 143, 86, 90, 14, 106, 114, 178, 188, 123, 65, 155, 183, 186, 238, 56, 246, 148, 215, 250, 249, 113, 116, 170, 93, 1, 126, 126, 123, 78, 231, 195, 53, 34, 129, 218, 112, 0, 20, 254, 115, 175, 228, 21, 167, 225, 86, 254, 86, 144, 226, 105, 67, 82, 9, 104, 11, 83, 28, 124, 112, 50, 167, 142, 114, 226, 248, 176, 147, 155, 126, 35, 174, 76, 219, 241, 6, 3, 24, 34, 206, 203, 29, 248, 92, 232, 2, 235, 45, 163, 84, 191, 175, 34, 187, 54, 75, 223, 152, 11, 43, 74, 255, 178, 59, 41, 113, 167, 27, 194, 21, 164, 103, 149, 160, 115, 249, 210, 24, 3, 140, 166, 174, 93, 62, 234, 174, 16, 144, 170, 14, 157, 246, 225, 249, 128, 4, 84, 230, 64, 187, 36, 180, 58, 88, 183, 208, 52, 223, 165, 10, 110, 48, 42, 125, 146, 64, 195, 91, 243, 58, 89, 0, 248, 86, 71, 214, 15, 152, 222, 43, 14, 88, 20, 20, 49, 6, 85, 150, 30, 235, 9, 101, 4, 153, 89, 63, 48, 77, 142, 208, 241, 186, 204, 78, 8, 81, 80, 49, 64, 86, 120, 236, 104, 153, 233, 143, 206, 32, 195, 141, 200, 91, 199, 64, 84, 24, 95, 99, 68, 38, 176, 195, 127, 122, 108, 155, 233, 183, 213, 84, 112, 15, 165, 208, 116, 135, 104, 209, 206, 127, 146, 255, 20, 215, 110, 62, 133, 235, 34, 246, 230, 37, 252, 146, 238, 85, 211, 215, 17, 6, 216, 250, 115, 103, 28, 65, 97, 238, 115, 84, 154, 146, 118, 44, 29, 146, 140, 222, 47, 181, 82, 35, 30, 93, 242, 199, 186, 236, 143, 69, 238, 73, 61, 13, 249, 94, 7, 107, 54, 178, 108, 25, 199, 184, 100, 143, 82, 95, 133, 218, 88, 202, 193, 113, 23, 32, 132, 223, 115, 163, 125, 49, 97, 47, 209, 31, 85, 82, 110, 157, 253, 71, 57, 199, 175, 82, 61, 165, 39, 183, 80, 231, 111, 69, 32, 10, 79, 251, 33, 118, 167, 51, 5, 211, 146, 112, 3, 58, 64, 188, 150, 180, 252, 192, 239, 93, 180, 145, 191, 197, 202, 192, 102, 245, 142, 186, 99, 40, 190, 186, 163, 211, 234, 150, 32, 88, 68, 247, 159, 62, 246, 79, 23, 215, 78, 87, 188, 118, 175, 128, 6, 57, 253, 241, 6, 183, 211, 25, 147, 225, 56, 105, 163, 80, 77, 208, 171, 110, 163, 119, 152, 172, 246, 133, 139, 49, 18, 26, 69, 159, 224, 216, 236, 97, 126, 175, 38, 132, 171, 41, 2, 250, 190, 73, 203, 172, 151, 203, 121, 154, 243, 226, 71, 28, 77, 151, 252, 234, 82, 199, 169, 21, 154, 135, 142, 153, 24, 165, 230, 180, 171, 91, 149, 15, 41, 78, 202, 34, 67, 248, 115, 217, 34, 46, 40, 183, 193, 213, 97, 214, 119, 149, 32, 11, 198, 54, 162, 185, 208, 196, 235, 45, 28, 67, 2, 13, 163, 42, 201, 48, 54, 236, 128, 104, 3, 109, 86, 180, 212, 87, 164, 251, 249, 140, 46, 206, 125, 62, 163, 1, 211, 9, 71, 48, 182, 93, 52, 222, 133, 187, 84, 41, 186, 157, 59, 239, 234, 162, 70, 112, 230, 154, 174, 87, 222, 78, 250, 219, 141, 224, 168, 217, 89, 13, 78, 146, 195, 72, 198, 134, 17, 124, 15, 210, 206, 102, 218, 51, 126, 249, 127, 252, 39, 240, 32, 19, 196, 79, 254, 95, 64, 194, 241, 102, 248, 15, 141, 66, 153, 243, 225, 37, 231, 95, 93, 137, 175, 154, 205, 40, 111, 98, 233, 13, 35, 164, 13, 43, 172, 193, 16, 111, 66, 242, 218, 220, 20, 76, 110, 48, 239, 140, 151, 146, 157, 19, 169, 45, 222, 27, 70, 131, 3, 2, 65, 193, 50, 237, 40, 167, 96, 37, 89, 85, 238, 173, 172, 54, 63, 71, 90, 224, 64, 84, 252, 43, 237, 162, 61, 178, 74, 87, 251, 211, 184, 128, 230, 60, 190, 110, 223, 119, 48, 16, 172, 59, 34, 217, 215, 0, 17, 212, 191, 255, 175, 234, 125, 193, 255, 148, 87, 51, 71, 143, 249, 24, 136, 157, 63, 48, 42, 21, 4, 0, 194, 175, 41, 102, 8, 73, 234, 215, 17, 129, 245, 113, 213, 23, 132, 244, 100, 11, 70, 153, 185, 130, 240, 135, 105, 128, 166, 101, 197, 39, 237, 176, 153, 155, 37, 130, 156, 188, 214, 81, 255, 31, 209, 109, 99, 231, 92, 210, 194, 192, 218, 222, 129, 156, 4, 26, 125, 210, 18, 32, 116, 203, 79, 40, 162, 161, 59, 181, 10, 221, 249, 49, 240, 16, 200, 218, 229, 210, 202, 2, 145, 154, 87, 152, 30, 236, 90, 7, 114, 240, 143, 101, 252, 92, 109, 174, 14, 10, 114, 168, 101, 200, 159, 68, 200, 106, 180, 87, 51, 80, 53, 228, 70, 142, 9, 26, 15, 212, 147, 242, 21, 0, 59, 146, 106, 9, 245, 62, 127, 165, 140, 242, 58, 34, 176, 82, 38, 140, 195, 123, 32, 79, 92, 234, 183, 252, 97, 162, 208, 230, 121, 12, 114, 80, 52, 26, 16, 30, 141, 8, 252, 141, 117, 105, 229, 250, 234, 244, 9, 223, 115, 9, 169, 47, 60, 112, 78, 211, 201, 251, 37, 230, 158, 61, 60, 119, 91, 56, 25, 53, 193, 212, 234, 145, 82, 103, 201, 249, 129, 103, 158, 98, 252, 109, 60, 162, 80, 239, 184, 66, 197, 112, 252, 94, 107, 150, 79, 163, 207, 228, 192, 102, 168, 238, 53, 194, 30, 254, 34, 190, 197, 191, 226, 118, 224, 112, 142, 107, 222, 156, 231, 175, 200, 141, 194, 27, 100, 85, 192, 129, 207, 16, 252, 37, 145, 234, 20, 88, 3, 165, 13, 226, 186, 30, 166, 197, 198, 143, 51, 210, 37, 131, 144, 15, 187, 50, 140, 146, 214, 23, 0, 48, 55, 133, 130, 98, 93, 134, 166, 211, 153, 32, 150, 230, 201, 15, 34, 8, 222, 10, 26, 186, 7, 8, 88, 204, 45, 218, 140, 214, 184, 151, 248, 89, 151, 174, 87, 236, 226, 91, 114, 164, 11, 69, 160, 193, 14, 214, 59, 19, 1, 245, 14, 85, 152, 71, 4, 69, 187, 68, 255, 34, 120, 37, 4, 146, 92, 36, 110, 114, 184, 67, 85, 254, 242, 127, 98, 67, 80, 151, 85, 109, 247, 107, 138, 25, 134, 25, 215, 219, 54, 227, 40, 169, 178, 245, 71, 134, 56, 23, 138, 165, 97, 227, 156, 235, 184, 120, 139, 78, 154, 7, 129, 18, 185, 168, 155, 194, 96, 115, 123, 180, 245, 230, 199, 5, 6, 43, 12, 85, 152, 201, 191, 69, 15, 182, 149, 28, 33, 154, 18, 122, 212, 217, 206, 1, 86, 143, 182, 120, 129, 45, 109, 87, 98, 164, 213, 126, 238, 248, 195, 254, 210, 224, 205, 11, 114, 72, 30, 220, 134, 186, 164, 170, 37, 255, 161, 58, 46, 253, 138, 189, 31, 52, 83, 25, 11, 166, 11, 236, 212, 70, 3, 8, 182, 189, 131, 107, 61, 221, 25, 228, 110, 86, 244, 65, 217, 255, 122, 153, 144, 93, 9, 184, 108, 140, 99, 112, 240, 180, 213, 85, 69, 39, 112, 254, 8, 84, 138, 92, 164, 209, 46, 119, 19, 160, 47, 238, 65, 84, 124, 134, 250, 149, 42, 91, 184, 41, 214, 122, 238, 3, 193, 220, 251, 92, 116, 226, 85, 126, 218, 187, 95, 211, 118, 105, 239, 27, 251, 122, 57, 185, 65, 127, 179, 205, 10, 6, 12, 214, 142, 154, 18, 232, 139, 175, 229, 159, 152, 192, 86, 106, 19, 207, 120, 156, 29, 125, 119, 128, 103, 171, 190, 185, 166, 65, 254, 199, 40, 2, 192, 30, 32, 162, 117, 63, 45, 243, 251, 148, 147, 187, 179, 87, 27, 85, 68, 13, 109, 154, 53, 131, 121, 194, 69, 210, 206, 235, 29, 185, 63, 178, 240, 47, 87, 218, 211, 167, 237, 78, 231, 124, 178, 230, 48, 200, 48, 255, 229, 52, 33, 50, 107, 163, 6, 229, 214, 8, 29, 240, 127, 164, 11, 104, 202, 7, 50, 43, 168, 224, 73, 80, 212, 165, 34, 137, 30, 239, 5, 170, 169, 99, 154, 42, 145, 254, 47, 119, 110, 17, 154, 202, 82, 29, 11, 158, 158, 70, 63, 176, 230, 151, 135, 72, 100, 144, 82, 242, 227, 53, 236, 248, 32, 53, 195, 72, 86, 133, 204, 13, 207, 8, 90, 227, 140, 47, 147, 39, 154, 81, 27, 169, 140, 225, 93, 35, 158, 200, 93, 50, 248, 9, 15, 180, 207, 170, 97, 193, 90, 117, 194, 95, 80, 255, 110, 60, 111, 130, 88, 128, 96, 8, 64, 34, 232, 229, 34, 136, 236, 93, 202, 12, 183, 196, 208, 125, 109, 176, 215, 213, 48, 115, 116, 98, 51, 170, 164, 11, 19, 28, 212, 199, 20, 58, 201, 147, 63, 171, 178, 237, 174, 236, 164, 87, 249, 102, 187, 18, 75, 36, 128, 124, 179, 41, 39, 27, 225, 143, 53, 248, 75, 209, 110, 153, 68, 117, 179, 243, 238, 27, 83, 47, 69, 27, 129, 82, 12, 20, 176, 244, 97, 196, 11, 201, 148, 201, 81, 208, 239, 244, 118, 20, 255, 178, 174, 141, 114, 245, 86, 16, 55, 177, 169, 200, 202, 240, 101, 166, 222, 248, 54, 218, 106, 51, 25, 124, 135, 137, 238, 88, 190, 250, 59, 154, 225, 148, 14, 250, 245, 184, 58, 110, 201, 170, 172, 35, 159, 53, 17, 93, 141, 61, 189, 157, 27, 194, 34, 30, 56, 71, 220, 211, 161, 136, 181, 57, 13, 132, 39, 107, 41, 163, 108, 223, 4, 128, 138, 218, 76, 138, 119, 212, 159, 87, 131, 150, 48, 39, 28, 9, 133, 251, 184, 62, 201, 89, 72, 75, 105, 59, 175, 235, 24, 26, 214, 183, 218, 250, 9, 23, 118, 52, 35, 173, 77, 3, 46, 251, 13, 240, 235, 252, 97, 34, 89, 117, 66, 46, 255, 227, 129, 189, 62, 58, 100, 52, 131, 137, 51, 73, 82, 125, 25, 19, 212, 236, 97, 148, 25, 111, 245, 105, 254, 139, 87, 184, 53, 247, 208, 129, 15, 93, 225, 8, 37, 96, 240, 143, 64, 10, 231, 44, 205, 31, 101, 7, 76, 36, 181, 84, 51, 142, 176, 130, 224, 32, 17, 39, 33, 201, 219, 126, 91, 47, 223, 157, 185, 202, 68, 121, 64, 125, 44, 238, 217, 121, 240, 159, 43, 231, 20, 63, 72, 239, 172, 8, 147, 226, 182, 225, 213, 66, 170, 183, 39, 23, 92, 9, 27, 105, 229, 250, 177, 174, 219, 117, 153, 255, 214, 254, 153, 71, 220, 102, 210, 202, 214, 94, 44, 227, 95, 125, 27, 142, 177, 43, 246, 98, 132, 14, 188, 75, 162, 187, 22, 220, 167, 15, 218, 151, 174, 42, 35, 78, 142, 42, 44, 80, 39, 12, 61, 133, 182, 47, 34, 237, 254, 84, 87, 35, 100, 202, 44, 66, 184, 213, 103, 41, 127, 117, 66, 137, 127, 224, 221, 37, 130, 151, 166, 16, 1, 82, 13, 249, 27, 43, 20, 180, 172, 81, 0, 117, 98, 24, 198, 122, 219, 193, 87, 99, 197, 28, 223, 104, 149, 228, 52, 228, 86, 203, 101, 156, 191, 31, 214, 87, 162, 28, 233, 182, 195, 52, 37, 59, 57, 148, 219, 32, 170, 98, 33, 59, 21, 49, 249, 192, 59, 66, 21, 193, 89, 144, 51, 50, 115, 225, 169, 59, 100, 52, 214, 214, 61, 178, 128, 25, 135, 70, 227, 80, 181, 17, 196, 73, 84, 141, 84, 159, 139, 246, 242, 183, 124, 150, 109, 39, 188, 126, 58, 204, 219, 50, 172, 206, 67, 187, 94, 76, 248, 175, 15, 121, 12, 95, 17, 6, 255, 105, 172, 174, 136, 90, 60, 168, 42, 92, 75, 116, 23, 176, 97, 216, 135, 176, 220, 215, 254, 107, 231, 12, 102, 138, 244, 65, 211, 19, 36, 176, 34, 104, 146, 238, 199, 195, 58, 168, 82, 12, 82, 10, 12, 228, 19, 206, 103, 139, 179, 243, 18, 47, 181, 136, 122, 229, 238, 114, 168, 105, 66, 217, 96, 160, 122, 13, 16, 42, 225, 132, 155, 162, 167, 188, 157, 209, 225, 86, 153, 69, 149, 1, 31, 97, 8, 221, 97, 231, 37, 196, 11, 232, 236, 66, 51, 166, 223, 222, 158, 227, 116, 241, 242, 17, 74, 155, 22, 231, 228, 137, 208, 108, 195, 148, 189, 211, 171, 145, 218, 122, 123, 56, 152, 209, 72, 187, 255, 172, 55, 237, 64, 2, 247, 151, 124, 250, 12, 243, 248, 222, 80, 237, 114, 73, 34, 146, 119, 53, 120, 2, 212, 68, 196, 32, 244, 148, 187, 186, 200, 37, 92, 228, 192, 237, 23, 246, 208, 61, 82, 105, 183, 76, 201, 181, 201, 138, 237, 145, 54, 207, 25, 15, 173, 140, 57, 64, 53, 130, 75, 200, 145, 171, 175, 104, 132, 213, 218, 103, 228, 211, 11, 70, 25, 237, 123, 99, 0, 127, 54, 208, 154, 59, 237, 26, 80, 144, 46, 139, 141, 79, 31, 96, 116, 231, 133, 19, 225, 247, 112, 242, 248, 233, 53, 133, 181, 33, 27, 29, 192, 225, 17, 15, 50, 178, 124, 128, 70, 115, 216, 157, 60, 14, 108, 128, 133, 185, 203, 139, 4, 138, 155, 59, 45, 235, 186, 73, 200, 248, 21, 45, 225, 234, 176, 234, 98, 73, 211, 138, 161, 161, 162, 217, 143, 64, 91, 108, 235, 35, 244, 83, 63, 214, 193, 89, 112, 64, 111, 181, 32, 60, 109, 206, 115, 54, 61, 148, 185, 227, 225, 36, 49, 66, 207, 237, 70, 155, 228, 164, 135, 81, 154, 234, 54, 141, 157, 68, 132, 0, 255, 97, 112, 124, 96, 19, 27, 185, 198, 71, 121, 51, 209, 77, 233, 207, 182, 182, 163, 92, 96, 91, 241, 167, 126, 126, 40, 108, 202, 216, 182, 69, 83, 225, 123, 189, 119, 155, 152, 193, 2, 187, 116, 246, 64, 125, 102, 78, 249, 11, 253, 77, 200, 98, 72, 219, 88, 75, 254, 167, 230, 135, 74, 81, 222, 115, 94, 58, 82, 204, 89, 78, 230, 173, 2, 46, 127, 55, 177, 36, 104, 96, 244, 163, 181, 74, 58, 87, 200, 183, 86, 207, 177, 220, 83, 29, 206, 218, 84, 231, 188, 74, 48, 74, 107, 107, 143, 206, 239, 181, 87, 30, 198, 194, 15, 21, 39, 35, 27, 48, 197, 19, 10, 60, 164, 55, 181, 246, 73, 144, 129, 81, 72, 147, 14, 81, 126, 187, 183, 235, 211, 173, 122, 229, 93, 124, 53, 83, 46, 92, 62, 50, 220, 243, 161, 133, 233, 15, 20, 102, 73, 132, 100, 3, 154, 1, 72, 246, 162, 176, 237, 49, 240, 58, 65, 48, 0, 180, 197, 89, 196, 94, 176, 244, 54, 154, 16, 149, 53, 198, 179, 32, 38, 119, 75, 248, 188, 176, 0, 61, 75, 70, 84, 234, 153, 128, 215, 25, 50, 0, 47, 158, 162, 166, 204, 20, 27, 133, 150, 215, 232, 249, 39, 71, 117, 244, 181, 88, 126, 115, 2, 162, 15, 186, 0, 34, 113, 143, 126, 25, 39, 222, 30, 92, 255, 222, 0, 125, 148, 140, 150, 198, 73, 31, 218, 126, 216, 5, 248, 247, 95, 225, 249, 226, 238, 110, 123, 247, 244, 146, 85, 103, 59, 45, 188, 38, 11, 78, 44, 71, 248, 175, 69, 73, 91, 254, 77, 127, 109, 99, 101, 34, 20, 213, 206, 213, 11, 120, 32, 189, 53, 217, 233, 107, 158, 242, 122, 102, 231, 115, 99, 142, 159, 177, 10, 33, 30, 182, 91, 106, 90, 22, 233, 197, 38, 91, 43, 171, 212, 221, 246, 52, 246, 153, 85, 62, 241, 63, 94, 231, 147, 217, 158, 146, 70, 245, 211, 103, 9, 1, 246, 172, 200, 97, 144, 127, 15, 210, 6, 118, 11, 62, 120, 126, 182, 230, 81, 33, 149, 165, 28, 227, 57, 233, 178, 187, 146, 35, 23, 163, 23, 225, 52, 5, 200, 210, 188, 57, 79, 175, 33, 73, 68, 50, 112, 135, 24, 37, 117, 118, 168, 84, 18, 55, 217, 120, 44, 220, 212, 194, 70, 59, 111, 240, 97, 242, 240, 77, 81, 158, 189, 211, 40, 158, 71, 165, 106, 119, 128, 108, 114, 224, 97, 226, 141, 169, 23, 32, 104, 143, 171, 158, 227, 170, 211, 76, 116, 222, 3, 181, 108, 150, 54, 68, 64, 33, 169, 96, 56, 253, 102, 14, 216, 47, 30, 213, 223, 75, 17, 243, 38, 77, 149, 159, 58, 127, 27, 10, 225, 200, 69, 70, 42, 167, 216, 71, 211, 196, 44, 58, 170, 0, 249, 212, 185, 64, 124, 138, 16, 37, 97, 132, 91, 36, 223, 65, 199, 17, 176, 178, 84, 45, 135, 21, 182, 238, 177, 124, 214, 204, 182, 243, 155, 99, 174, 218, 167, 212, 94, 165, 79, 211, 120, 10, 62, 205, 120, 18, 95, 144, 223, 253, 251, 79, 93, 188, 33, 193, 174, 132, 196, 237, 213, 148, 139, 240, 239, 157, 111, 46, 49, 48, 48, 87, 34, 234, 153, 73, 238, 247, 236, 133, 5, 200, 59, 73, 143, 75, 59, 59, 28, 28, 66, 211, 90, 91, 3, 211, 22, 60, 176, 216, 222, 18, 149, 221, 216, 56, 59, 26, 52, 243, 99, 7, 200, 88, 235, 28, 210, 18, 245, 59, 83, 62, 223, 209, 155, 219, 188, 226, 252, 63, 224, 196, 95, 174, 170, 79, 52, 99, 14, 96, 19, 66, 175, 5, 120, 49, 72, 61, 163, 245, 250, 180, 237, 237, 230, 89, 151, 69, 204, 155, 127, 225, 117, 110, 236, 166, 175, 183, 235, 114, 245, 77, 54, 55, 17, 219, 222, 42, 36, 14, 148, 42, 21, 228, 32, 181, 90, 91, 8, 225, 199, 5, 213, 43, 176, 160, 179, 183, 46, 198, 197, 78, 65, 192, 82, 18, 106, 216, 173, 190, 162, 216, 8, 254, 229, 254, 242, 84, 18, 131, 125, 56, 25, 86, 191, 206, 67, 90, 154, 211, 51, 167, 251, 195, 212, 77, 217, 181, 152, 233, 134, 243, 195, 57, 144, 124, 229, 248, 206, 151, 83, 190, 136, 191, 152, 147, 233, 212, 172, 90, 99, 72, 148, 125, 174, 156, 110, 83, 54, 139, 50, 89, 28, 243, 146, 41, 255, 170, 44, 32, 247, 177, 196, 48, 73, 241, 113, 119, 228, 147, 11, 180, 27, 155, 191, 137, 224, 139, 245, 52, 162, 172, 1, 4, 21, 157, 183, 168, 137, 23, 235, 21, 54, 191, 178, 12, 146, 166, 53, 147, 249, 15, 92, 120, 113, 199, 21, 82, 20, 149, 190, 50, 232, 113, 6, 178, 220, 37, 80, 70, 128, 1, 26, 29, 136, 159, 167, 169, 61, 103, 95, 49, 230, 120, 14, 252, 145, 62, 103, 46, 252, 181, 93, 235, 133, 45, 48, 165, 93, 180, 172, 211, 156, 232, 240, 94, 32, 119, 135, 56, 21, 247, 16, 227, 153, 217, 12, 25, 163, 193, 99, 17, 3, 49, 217, 59, 120, 121, 226, 79, 5, 242, 251, 5, 227, 116, 206, 69, 67, 38, 157, 130, 120, 189, 61, 99, 171, 10, 92, 110, 174, 232, 114, 229, 132, 36, 53, 203, 47, 215, 207, 147, 56, 183, 12, 166, 134, 226, 5, 113, 150, 146, 80, 160, 243, 7, 27, 173, 6, 110, 142, 7, 74, 53, 46, 128, 193, 254, 131, 9, 40, 157, 152, 14, 45, 53, 135, 35, 56, 26, 101, 110, 236, 233, 3, 30, 172, 39, 208, 95, 98, 165, 131, 195, 108, 108, 87, 39, 216, 125, 220, 254, 119, 40, 101, 216, 44, 108, 235, 20, 182, 75, 141, 12, 109, 0, 245, 252, 35, 2, 112, 77, 55, 83, 150, 79, 160, 55, 47, 242, 107, 249, 185, 175, 13, 24, 213, 139, 33, 155, 31, 237, 254, 41, 107, 253, 197, 158, 138, 115, 115, 187, 64, 33, 117, 151, 248, 44, 57, 40, 234, 101, 230, 108, 37, 63, 193, 149, 25, 117, 119, 253, 21, 148, 54, 10, 77, 58, 134, 51, 236, 137, 2, 244, 93, 151, 235, 236, 246, 218, 73, 255, 191, 14, 42, 66, 29, 60, 243, 46, 89, 186, 26, 108, 5, 247, 176, 202, 175, 144, 173, 28, 59, 244, 68, 19, 60, 238, 67, 65, 222, 13, 166, 4, 74, 169, 65, 181, 221, 95, 89, 205, 45, 144, 187, 18, 184, 29, 193, 27, 225, 112, 202, 149, 30, 99, 253, 158, 198, 166, 30, 217, 10, 143, 215, 173, 194, 149, 254, 126, 134, 186, 123, 49, 6, 106, 146, 6, 125, 220, 119, 145, 228, 246, 44, 215, 95, 55, 113, 190, 192, 90, 232, 238, 228, 254, 172, 31, 160, 185, 226, 245, 10, 244, 111, 75, 247, 250, 205, 52, 9, 227, 128, 252, 154, 235, 218, 127, 48, 44, 62, 81, 93, 132, 200, 123, 22, 128, 89, 182, 79, 123, 157, 149, 185, 231, 53, 172, 22, 27, 26, 254, 15, 84, 209, 199, 39, 98, 157, 145, 46, 127, 118, 240, 231, 170, 205, 26, 154, 81, 253, 154, 102, 95, 4, 103, 27, 82, 79, 61, 250, 116, 190, 254, 10, 109, 214, 135, 64, 108, 220, 47, 2, 103, 210, 107, 107, 102, 175, 207, 224, 163, 196, 58, 123, 189, 121, 255, 37, 45, 175, 143, 123, 216, 74, 17, 126, 147, 212, 255, 29, 65, 70, 155, 154, 52, 243, 164, 231, 232, 109, 14, 115, 43, 109, 64, 64, 138, 6, 5, 49, 31, 158, 148, 79, 191, 234, 181, 97, 103, 13, 2, 179, 20, 100, 244, 74, 10, 171, 252, 170, 220, 60, 244, 85, 188, 163, 179, 33, 161, 29, 246, 112, 236, 162, 74, 161, 139, 226, 121, 89, 33, 231, 177, 179, 121, 245, 35, 184, 115, 97, 94, 41, 185, 98, 151, 83, 120, 250, 157, 188, 54, 69, 153, 45, 61, 240, 95, 15, 15, 7, 231, 53, 199, 48, 111, 159, 163, 184, 240, 184, 96, 0, 247, 98, 21, 244, 145, 210, 170, 36, 139, 251, 200, 73, 157, 238, 25, 137, 179, 174, 174, 10, 60, 216, 255, 127, 54, 207, 137, 13, 60, 115, 108, 43, 254, 133, 164, 92, 247, 67, 7, 194, 203, 253, 190, 171, 189, 9, 184, 166, 149, 150, 244, 18, 65, 76, 102, 146, 190, 171, 179, 69, 157, 248, 63, 143, 140, 34, 9, 73, 242, 12, 242, 104, 206, 133, 253, 38, 41, 255, 84, 239, 48, 11, 244, 204, 87, 137, 32, 79, 159, 92, 140, 70, 89, 72, 134, 170, 21, 182, 44, 17, 49, 117, 12, 79, 99, 19, 166, 36, 175, 98, 251, 248, 170, 40, 54, 69, 61, 241, 52, 192, 123, 238, 69, 186, 101, 32, 167, 11, 212, 20, 114, 146, 182, 70, 176, 18, 176, 64, 194, 221, 168, 177, 76, 232, 237, 240, 213, 2, 249, 103, 66, 34, 225, 75, 1, 3, 7, 184, 69, 73, 75, 7, 79, 41, 197, 103, 71, 125, 63, 229, 120, 178, 86, 28, 196, 150, 1, 227, 199, 76, 189, 233, 58, 75, 178, 7, 208, 101, 253, 77, 242, 1, 44, 152, 74, 124, 229, 200, 79, 247, 18, 113, 192, 39, 120, 28, 120, 137, 39, 83, 99, 182, 181, 93, 93, 71, 166, 134, 196, 72, 30, 149, 100, 105, 191, 17, 129, 217, 46, 108, 162, 211, 75, 6, 17, 90, 85, 244, 204, 231, 4, 210, 233, 105, 209, 161, 251, 196, 139, 137, 15, 227, 223, 204, 156, 155, 49, 47, 160, 56, 11, 58, 243, 159, 143, 37, 217, 55, 222, 136, 204, 176, 203, 16, 150, 114, 179, 56, 184, 14, 169, 102, 64, 128, 226, 164, 84, 91, 117, 40, 194, 32, 156, 193, 38, 253, 53, 156, 241, 85, 143, 194, 250, 73, 212, 171, 173, 17, 124, 71, 62, 151, 210, 18, 222, 253, 55, 198, 43, 80, 5, 26, 116, 45, 82, 224, 128, 250, 248, 144, 192, 111, 244, 156, 9, 116, 179, 245, 94, 240, 64, 1, 174, 130, 72, 251, 42, 27, 67, 68, 180, 48, 116, 200, 9, 94, 107, 222, 110, 127, 128, 51, 43, 172, 174, 85, 63, 144, 46, 18, 85, 87, 52, 199, 13, 188, 247, 153, 248, 231, 11, 142, 18, 148, 129, 186, 37, 84, 198, 120, 240, 188, 78, 44, 209, 46, 238, 24, 29, 108, 41, 93, 216, 17, 56, 76, 58, 6, 200, 233, 233, 169, 244, 111, 137, 153, 22, 121, 233, 82, 247, 225, 100, 41, 206, 119, 194, 54, 177, 102, 100, 134, 161, 57, 126, 116, 127, 78, 188, 167, 17, 117, 211, 44, 189, 87, 225, 197, 97, 205, 196, 114, 63, 144, 192, 123, 192, 215, 150, 149, 49, 43, 212, 226, 188, 42, 176, 153, 31, 69, 70, 211, 112, 146, 7, 51, 50, 137, 196, 156, 103, 3, 39, 86, 29, 180, 133, 65, 248, 43, 102, 228, 252, 116, 212, 63, 189, 209, 124, 63, 23, 133, 125, 231, 144, 70, 247, 194, 191, 172, 204, 0, 197, 152, 204, 168, 221, 166, 190, 78, 12, 194, 160, 47, 63, 83, 201, 19, 34, 47, 61, 16, 77, 79, 132, 0, 64, 75, 130, 170, 15, 254, 200, 199, 167, 65, 181, 120, 151, 181, 207, 75, 210, 33, 152, 129, 165, 167, 9, 21, 73, 153, 60, 182, 31, 40, 128, 186, 29, 183, 161, 245, 84, 65, 95, 51, 31, 28, 63, 91, 42, 203, 112, 185, 208, 42, 194, 163, 163, 44, 110, 167, 183, 136, 1, 160, 104, 143, 215, 168, 241, 125, 104, 183, 44, 174, 186, 143, 247, 240, 150, 240, 236, 186, 243, 56, 170, 38, 26, 92, 68, 215, 40, 124, 45, 29, 4, 94, 244, 171, 66, 219, 199, 81, 36, 170, 186, 155, 126, 93, 28, 204, 184, 142, 6, 191, 207, 218, 219, 156, 247, 69, 165, 11, 251, 119, 110, 30, 154, 94, 89, 47, 174, 211, 139, 222, 96, 177, 85, 108, 92, 105, 140, 81, 138, 106, 179, 155, 177, 29, 203, 164, 229, 43, 154, 240, 124, 126, 4, 48, 205, 54, 239, 191, 122, 224, 169, 6, 73, 16, 207, 13, 162, 200, 35, 198, 255, 49, 99, 175, 130, 160, 174, 34, 65, 127, 241, 63, 83, 242, 32, 42, 234, 152, 229, 229, 88, 31, 128, 69, 174, 204, 1, 156, 172, 191, 202, 144, 165, 238, 106, 103, 188, 215, 169, 174, 92, 211, 160, 145, 62, 81, 219, 145, 182, 134, 143, 76, 18, 135, 245, 197, 177, 115, 233, 218, 237, 164, 136, 134, 25, 54, 232, 15, 154, 67, 247, 40, 20, 202, 48, 13, 184, 231, 207, 107, 105, 52, 197, 88, 58, 199, 46, 78, 127, 108, 237, 140, 190, 15, 138, 98, 181, 211, 157, 16, 160, 182, 135, 84, 226, 214, 173, 170, 151, 224, 76, 185, 231, 165, 22, 96, 181, 188, 154, 10, 43, 66, 73, 41, 217, 66, 111, 140, 52, 77, 30, 201, 219, 55, 236, 146, 31, 232, 190, 128, 29, 61, 99, 149, 111, 117, 23, 83, 216, 217, 226, 152, 6, 136, 195, 41, 88, 49, 140, 173, 114, 171, 213, 82, 220, 0, 40, 189, 53, 68, 57, 121, 37, 199, 130, 163, 196, 171, 121, 161, 24, 218, 199, 59, 217, 231, 53, 222, 180, 214, 15, 153, 187, 76, 223, 24, 26, 128, 18, 82, 253, 158, 183, 124, 245, 113, 11, 164, 128, 151, 126, 70, 226, 180, 240, 229, 53, 126, 190, 210, 209, 108, 209, 247, 20, 223, 155, 182, 132, 215, 236, 191, 191, 18, 111, 24, 48, 181, 185, 65, 123, 64, 191, 14, 95, 9, 218, 139, 151, 254, 2, 81, 203, 58, 3, 41, 236, 66, 209, 46, 118, 48, 54, 230, 142, 233, 36, 35, 66, 240, 106, 47, 205, 46, 3, 150, 199, 115, 218, 90, 29, 42, 189, 152, 199, 232, 30, 33, 193, 205, 176, 79, 73, 11, 4, 65, 225, 62, 118, 65, 146, 153, 139, 179, 167, 208, 52, 196, 209, 14, 143, 232, 2, 6, 236, 199, 214, 83, 215, 49, 146, 43, 13, 54, 139, 72, 238, 9, 170, 174, 52, 18, 15, 219, 125, 93, 238, 24, 141, 197, 216, 120, 231, 130, 118, 59, 229, 9, 188, 214, 72, 28, 226, 192, 165, 67, 90, 30, 57, 2, 33, 130, 173, 210, 218, 204, 207, 134, 63, 70, 73, 222, 111, 56, 232, 253, 191, 160, 8, 89, 7, 215, 155, 133, 152, 147, 29, 190, 60, 74, 207, 247, 187, 84, 29, 104, 136, 139, 49, 45, 183, 199, 209, 157, 181], - [153, 96, 133, 103, 9, 80, 228, 171, 86, 29, 101, 104, 176, 188, 220, 141, 50, 30, 206, 29, 61, 69, 220, 39, 220, 89, 125, 155, 15, 165, 39, 71, 122, 237, 62, 95, 60, 95, 190, 4, 210, 119, 83, 193, 133, 111, 233, 225, 95, 35, 204, 124, 119, 81, 69, 32, 225, 79, 35, 222, 222, 232, 119, 5, 64, 154, 140, 246, 9, 209, 5, 228, 236, 81, 212, 194, 185, 8, 18, 93, 159, 103, 165, 114, 47, 40, 90, 206, 160, 57, 224, 104, 64, 211, 138, 191, 210, 2, 252, 201, 38, 64, 34, 41, 133, 73, 0, 241, 183, 252, 242, 212, 138, 40, 88, 240, 21, 103, 135, 24, 231, 238, 207, 140, 80, 105, 236, 30, 49, 93, 232, 169, 170, 138, 141, 197, 114, 170, 100, 180, 173, 2, 214, 240, 2, 46, 18, 196, 80, 98, 180, 10, 2, 216, 68, 201, 109, 49, 170, 146, 130, 32, 6, 218, 106, 32, 143, 79, 141, 161, 156, 146, 89, 163, 114, 140, 223, 128, 124, 147, 127, 20, 39, 247, 185, 186, 165, 217, 100, 24, 185, 116, 62, 20, 44, 56, 16, 213, 194, 35, 134, 44, 14, 88, 49, 48, 20, 43, 139, 45, 193, 181, 133, 212, 171, 255, 241, 248, 176, 2, 148, 187, 3, 85, 75, 99, 82, 85, 48, 50, 151, 95, 254, 189, 117, 148, 176, 238, 142, 171, 41, 69, 176, 21, 76, 186, 196, 233, 206, 71, 135, 81, 91, 194, 173, 106, 45, 198, 230, 27, 210, 207, 198, 220, 54, 229, 13, 203, 143, 144, 213, 107, 173, 230, 54, 89, 193, 224, 83, 58, 42, 202, 19, 77, 93, 63, 69, 241, 229, 31, 160, 122, 131, 223, 95, 164, 3, 162, 58, 36, 21, 108, 240, 111, 161, 53, 127, 227, 18, 110, 9, 161, 214, 235, 150, 124, 183, 10, 31, 15, 180, 12, 104, 161, 77, 196, 214, 30, 154, 229, 81, 8, 166, 83, 151, 20, 50, 118, 162, 136, 79, 116, 247, 216, 173, 220, 198, 2, 208, 90, 108, 187, 40, 221, 125, 39, 25, 93, 131, 251, 160, 130, 215, 108, 28, 252, 165, 51, 44, 185, 24, 91, 159, 139, 77, 16, 237, 177, 73, 57, 172, 102, 180, 236, 6, 7, 164, 68, 81, 0, 14, 101, 189, 175, 171, 93, 46, 132, 20, 119, 73, 197, 138, 16, 15, 111, 152, 36, 246, 130, 25, 151, 229, 28, 13, 11, 29, 35, 114, 56, 127, 144, 213, 172, 50, 16, 42, 138, 220, 17, 101, 55, 241, 60, 89, 173, 186, 34, 163, 19, 239, 65, 19, 203, 183, 218, 19, 221, 195, 120, 155, 61, 27, 171, 224, 139, 99, 56, 171, 53, 229, 186, 117, 199, 149, 69, 92, 10, 223, 158, 143, 205, 195, 84, 28, 100, 188, 213, 10, 45, 41, 199, 49, 33, 159, 187, 217, 120, 85, 249, 41, 150, 87, 248, 40, 27, 62, 6, 218, 82, 141, 52, 54, 146, 108, 15, 193, 187, 14, 196, 162, 77, 159, 124, 116, 61, 216, 66, 248, 217, 85, 184, 167, 138, 128, 42, 125, 163, 158, 132, 246, 60, 11, 204, 200, 203, 100, 152, 94, 177, 28, 158, 160, 109, 59, 159, 68, 124, 235, 211, 214, 187, 58, 174, 99, 229, 218, 202, 207, 26, 41, 166, 212, 125, 216, 132, 249, 118, 200, 78, 217, 34, 194, 24, 38, 219, 223, 37, 181, 249, 67, 41, 184, 23, 235, 125, 2, 103, 199, 66, 119, 209, 171, 92, 176, 210, 9, 67, 60, 169, 134, 145, 13, 157, 135, 193, 160, 246, 27, 194, 118, 32, 59, 109, 217, 86, 144, 223, 72, 86, 246, 147, 96, 240, 62, 231, 155, 19, 153, 26, 1, 239, 7, 199, 105, 144, 239, 66, 203, 4, 41, 167, 101, 156, 189, 91, 1, 120, 174, 45, 225, 219, 178, 102, 167, 249, 231, 160, 233, 230, 114, 138, 98, 40, 172, 176, 249, 245, 208, 112, 19, 18, 53, 203, 27, 162, 157, 137, 123, 59, 98, 51, 20, 22, 142, 170, 221, 235, 249, 54, 91, 4, 26, 110, 225, 144, 167, 140, 141, 23, 71, 88, 191, 137, 180, 59, 220, 198, 122, 109, 130, 255, 241, 117, 139, 251, 165, 241, 89, 143, 233, 252, 253, 153, 234, 39, 19, 233, 14, 226, 155, 120, 92, 126, 46, 10, 129, 226, 163, 128, 8, 136, 78, 24, 42, 32, 115, 64, 122, 149, 112, 132, 191, 191, 156, 10, 25, 156, 125, 111, 36, 122, 95, 51, 218, 190, 204, 81, 241, 66, 107, 66, 10, 127, 33, 210, 7, 82, 5, 188, 103, 225, 221, 35, 208, 49, 216, 132, 109, 227, 56, 183, 111, 1, 79, 198, 211, 232, 229, 139, 72, 74, 22, 229, 5, 12, 110, 209, 161, 143, 166, 126, 254, 2, 8, 166, 26, 49, 245, 150, 17, 48, 117, 26, 92, 105, 168, 218, 52, 234, 204, 60, 238, 137, 38, 78, 247, 71, 63, 98, 30, 129, 158, 68, 70, 143, 148, 28, 183, 95, 169, 17, 15, 250, 53, 29, 197, 172, 170, 248, 210, 186, 209, 200, 151, 51, 232, 232, 217, 191, 58, 215, 53, 78, 87, 229, 63, 116, 13, 134, 90, 39, 177, 100, 90, 58, 21, 121, 235, 153, 194, 244, 249, 228, 113, 50, 21, 109, 35, 99, 120, 205, 34, 129, 6, 112, 199, 204, 23, 155, 187, 80, 140, 87, 180, 170, 129, 214, 205, 199, 47, 248, 200, 42, 204, 133, 115, 89, 7, 102, 34, 206, 210, 161, 179, 162, 230, 49, 63, 121, 110, 115, 171, 134, 86, 240, 59, 181, 116, 246, 183, 73, 140, 210, 50, 144, 175, 144, 20, 142, 249, 252, 160, 203, 0, 144, 28, 13, 116, 246, 213, 240, 232, 97, 243, 31, 214, 233, 42, 15, 164, 14, 129, 220, 176, 156, 127, 45, 189, 130, 142, 33, 45, 154, 102, 227, 107, 162, 138, 52, 191, 143, 2, 176, 33, 78, 27, 61, 148, 64, 130, 204, 243, 66, 161, 65, 37, 230, 121, 135, 158, 246, 221, 245, 222, 196, 24, 102, 112, 225, 109, 220, 94, 139, 47, 63, 249, 228, 231, 250, 242, 66, 213, 15, 6, 217, 86, 198, 164, 36, 184, 92, 143, 47, 190, 19, 199, 19, 13, 106, 58, 9, 85, 94, 1, 124, 253, 102, 129, 70, 217, 91, 181, 144, 9, 205, 126, 96, 180, 87, 74, 78, 77, 128, 69, 95, 21, 112, 179, 226, 21, 223, 43, 190, 222, 223, 80, 179, 254, 135, 194, 31, 192, 158, 156, 204, 189, 192, 101, 196, 184, 246, 78, 148, 4, 145, 22, 84, 192, 247, 245, 7, 227, 223, 155, 56, 10, 69, 164, 138, 181, 34, 241, 145, 235, 53, 200, 147, 169, 91, 143, 34, 34, 42, 206, 247, 158, 48, 120, 181, 8, 203, 91, 252, 238, 57, 76, 46, 199, 243, 172, 118, 253, 16, 41, 36, 170, 220, 127, 29, 85, 204, 170, 211, 157, 211, 153, 181, 36, 144, 217, 144, 199, 55, 88, 188, 124, 203, 222, 216, 199, 106, 227, 117, 38, 189, 228, 198, 89, 126, 168, 216, 242, 240, 134, 194, 146, 41, 27, 48, 146, 176, 223, 238, 205, 60, 3, 193, 244, 28, 238, 108, 195, 195, 210, 220, 158, 111, 123, 91, 160, 95, 13, 252, 10, 137, 121, 200, 52, 112, 128, 205, 173, 78, 119, 185, 9, 56, 212, 20, 122, 166, 36, 81, 131, 70, 168, 34, 231, 174, 9, 6, 127, 16, 33, 137, 96, 189, 110, 251, 227, 220, 78, 185, 77, 0, 28, 11, 109, 203, 16, 181, 84, 239, 67, 115, 176, 174, 244, 41, 142, 93, 161, 88, 238, 57, 83, 216, 68, 250, 77, 18, 142, 238, 215, 48, 186, 209, 83, 73, 137, 181, 254, 153, 26, 10, 174, 185, 117, 86, 54, 195, 37, 227, 146, 241, 35, 86, 11, 197, 125, 95, 175, 8, 19, 116, 59, 119, 183, 144, 64, 164, 113, 117, 164, 236, 22, 51, 107, 160, 160, 93, 9, 80, 98, 155, 50, 57, 54, 176, 142, 224, 35, 38, 71, 237, 153, 175, 252, 177, 87, 50, 89, 252, 63, 120, 197, 116, 76, 234, 47, 146, 178, 128, 138, 192, 204, 163, 59, 129, 150, 126, 56, 76, 36, 190, 172, 53, 231, 194, 93, 162, 71, 47, 84, 187, 81, 21, 45, 125, 106, 202, 113, 110, 0, 59, 225, 116, 157, 123, 171, 33, 243, 104, 124, 250, 157, 81, 227, 148, 188, 96, 205, 140, 202, 153, 58, 194, 252, 201, 151, 60, 95, 82, 175, 137, 96, 7, 155, 255, 99, 42, 236, 62, 138, 203, 255, 46, 226, 158, 14, 163, 135, 96, 129, 153, 35, 242, 32, 60, 46, 231, 167, 145, 106, 139, 241, 220, 242, 135, 76, 232, 255, 206, 193, 160, 72, 12, 226, 229, 109, 19, 53, 51, 37, 197, 109, 2, 43, 165, 32, 254, 108, 201, 210, 134, 141, 156, 152, 172, 39, 61, 5, 197, 1, 144, 177, 194, 52, 110, 199, 80, 60, 27, 160, 142, 222, 157, 218, 177, 229, 26, 240, 140, 104, 251, 120, 116, 175, 34, 222, 209, 134, 189, 212, 211, 53, 121, 39, 133, 66, 154, 194, 100, 175, 82, 164, 46, 249, 203, 144, 243, 65, 62, 102, 4, 14, 216, 58, 227, 56, 131, 58, 48, 114, 158, 107, 232, 72, 203, 131, 176, 68, 213, 81, 72, 134, 242, 117, 117, 115, 121, 99, 204, 155, 50, 20, 183, 35, 19, 17, 113, 133, 134, 83, 189, 9, 150, 10, 10, 53, 164, 29, 132, 193, 165, 35, 121, 224, 64, 16, 216, 39, 192, 79, 116, 32, 4, 22, 198, 119, 120, 234, 56, 162, 12, 10, 160, 153, 74, 217, 251, 80, 73, 107, 196, 51, 198, 190, 117, 120, 3, 206, 156, 96, 153, 241, 71, 16, 117, 74, 220, 132, 227, 55, 157, 31, 19, 3, 33, 189, 244, 155, 238, 46, 91, 113, 246, 199, 197, 193, 14, 155, 174, 213, 3, 255, 184, 176, 93, 129, 90, 5, 120, 190, 65, 77, 229, 195, 222, 29, 27, 204, 123, 252, 235, 255, 200, 100, 170, 44, 87, 7, 246, 48, 245, 75, 88, 196, 114, 0, 16, 16, 186, 151, 231, 2, 90, 196, 128, 197, 135, 52, 161, 77, 10, 223, 206, 59, 5, 101, 177, 58, 73, 50, 84, 187, 72, 30, 152, 205, 41, 44, 76, 62, 142, 248, 48, 74, 236, 189, 78, 2, 238, 23, 78, 5, 141, 199, 26, 179, 55, 9, 139, 161, 130, 20, 74, 165, 186, 64, 45, 136, 80, 143, 53, 72, 120, 218, 33, 158, 236, 99, 198, 43, 97, 104, 126, 60, 93, 157, 21, 236, 142, 82, 66, 170, 42, 216, 144, 124, 163, 112, 9, 38, 246, 27, 52, 20, 237, 78, 124, 132, 248, 199, 99, 74, 49, 236, 177, 105, 72, 235, 204, 251, 175, 173, 178, 151, 144, 32, 48, 165, 118, 118, 32, 24, 68, 118, 83, 46, 188, 80, 65, 167, 81, 88, 154, 193, 123, 193, 198, 97, 108, 99, 167, 250, 141, 45, 197, 95, 149, 144, 204, 253, 27, 19, 156, 142, 102, 57, 52, 0, 63, 74, 210, 240, 25, 80, 34, 123, 24, 142, 227, 116, 254, 82, 153, 95, 13, 95, 136, 20, 237, 94, 200, 5, 211, 49, 104, 233, 8, 250, 9, 220, 0, 35, 107, 75, 252, 220, 183, 47, 8, 0, 199, 57, 77, 221, 112, 92, 63, 245, 123, 6, 241, 189, 127, 56, 123, 144, 206, 57, 176, 14, 121, 38, 14, 34, 203, 171, 131, 49, 113, 131, 214, 19, 112, 160, 110, 35, 137, 45, 37, 97, 49, 130, 82, 227, 60, 62, 115, 110, 153, 93, 30, 67, 137, 145, 201, 167, 118, 188, 231, 207, 118, 173, 131, 29, 183, 94, 184, 43, 13, 220, 82, 234, 207, 1, 244, 14, 10, 144, 201, 105, 114, 52, 176, 4, 46, 206, 114, 135, 132, 67, 172, 129, 24, 111, 178, 49, 122, 180, 30, 255, 174, 143, 230, 227, 177, 63, 94, 33, 250, 15, 199, 76, 17, 176, 189, 131, 248, 26, 115, 105, 101, 169, 211, 249, 111, 118, 72, 53, 205, 105, 33, 44, 228, 6, 72, 131, 91, 202, 181, 8, 190, 47, 47, 165, 217, 244, 199, 141, 84, 13, 13, 90, 53, 43, 157, 202, 59, 106, 230, 189, 66, 237, 130, 2, 144, 16, 84, 50, 157, 94, 123, 160, 127, 49, 101, 214, 164, 182, 135, 172, 184, 229, 237, 217, 230, 130, 122, 63, 90, 37, 87, 184, 220, 138, 176, 54, 70, 76, 36, 20, 162, 210, 83, 153, 173, 116, 170, 187, 114, 212, 30, 90, 214, 235, 233, 133, 37, 128, 98, 63, 180, 193, 97, 167, 40, 238, 110, 73, 23, 79, 106, 252, 135, 4, 244, 255, 27, 43, 37, 69, 16, 216, 111, 127, 240, 224, 145, 2, 105, 93, 176, 105, 202, 113, 234, 225, 228, 125, 147, 124, 147, 200, 7, 135, 37, 67, 210, 70, 5, 61, 154, 44, 14, 199, 98, 35, 71, 38, 50, 209, 121, 106, 191, 162, 128, 68, 136, 197, 45, 204, 202, 143, 129, 146, 177, 55, 32, 64, 53, 90, 227, 94, 77, 160, 170, 166, 208, 26, 73, 194, 123, 68, 119, 205, 63, 153, 194, 19, 249, 189, 215, 107, 93, 79, 140, 38, 12, 103, 159, 214, 60, 246, 10, 0, 45, 162, 134, 188, 100, 170, 233, 147, 65, 21, 138, 47, 236, 106, 102, 0, 223, 138, 96, 12, 111, 61, 113, 158, 105, 19, 95, 81, 228, 126, 101, 97, 55, 27, 75, 231, 204, 205, 66, 163, 230, 232, 214, 206, 23, 88, 66, 92, 192, 9, 175, 11, 55, 203, 67, 158, 236, 12, 27, 29, 131, 86, 2, 202, 126, 126, 9, 105, 174, 66, 50, 220, 130, 250, 18, 143, 233, 25, 233, 124, 93, 242, 22, 77, 97, 87, 94, 28, 200, 5, 1, 147, 162, 34, 209, 108, 35, 15, 24, 241, 78, 177, 137, 157, 107, 2, 233, 209, 239, 156, 224, 200, 30, 197, 106, 71, 61, 128, 142, 243, 193, 171, 68, 254, 238, 201, 53, 75, 222, 232, 62, 119, 219, 245, 22, 155, 86, 21, 71, 96, 102, 88, 52, 20, 85, 37, 8, 95, 123, 193, 74, 188, 41, 75, 195, 115, 2, 9, 58, 143, 88, 222, 68, 20, 152, 17, 224, 58, 206, 166, 215, 194, 6, 102, 1, 99, 58, 230, 1, 182, 197, 227, 198, 132, 45, 192, 28, 216, 154, 49, 75, 176, 137, 95, 243, 125, 159, 26, 187, 46, 171, 254, 158, 192, 106, 178, 178, 163, 191, 207, 179, 242, 160, 99, 136, 7, 230, 244, 99, 2, 35, 11, 50, 108, 26, 183, 123, 140, 150, 35, 131, 47, 223, 195, 55, 149, 64, 143, 15, 79, 187, 208, 156, 70, 119, 76, 37, 99, 127, 109, 121, 109, 121, 162, 192, 214, 106, 38, 25, 44, 250, 206, 206, 70, 59, 128, 44, 149, 7, 103, 197, 124, 131, 174, 176, 233, 241, 100, 112, 164, 211, 201, 81, 104, 240, 84, 72, 234, 67, 123, 132, 5, 200, 50, 171, 201, 237, 254, 220, 228, 16, 71, 107, 22, 135, 2, 209, 174, 97, 138, 1, 178, 150, 64, 63, 171, 171, 12, 159, 43, 191, 194, 5, 59, 7, 20, 111, 42, 216, 167, 233, 149, 36, 253, 122, 129, 248, 89, 186, 205, 245, 243, 126, 85, 102, 178, 198, 216, 73, 19, 50, 138, 82, 37, 44, 236, 71, 124, 91, 10, 169, 91, 158, 179, 139, 59, 162, 45, 151, 200, 224, 243, 205, 193, 161, 146, 244, 184, 229, 137, 218, 215, 128, 94, 79, 1, 229, 217, 200, 204, 219, 184, 23, 173, 10, 129, 165, 91, 24, 18, 246, 203, 208, 167, 168, 89, 197, 180, 99, 224, 46, 217, 144, 180, 249, 149, 140, 120, 15, 19, 4, 186, 137, 204, 232, 123, 136, 184, 141, 15, 169, 9, 171, 221, 235, 44, 200, 81, 34, 145, 15, 75, 250, 92, 189, 192, 115, 65, 172, 246, 72, 125, 147, 190, 87, 232, 69, 137, 63, 79, 148, 218, 58, 100, 76, 56, 169, 101, 146, 75, 57, 94, 195, 147, 239, 90, 69, 159, 172, 80, 153, 171, 145, 166, 208, 227, 48, 101, 143, 133, 144, 48, 243, 211, 95, 132, 229, 93, 4, 226, 75, 254, 128, 124, 83, 218, 76, 147, 124, 179, 171, 98, 198, 79, 46, 33, 26, 99, 95, 60, 140, 46, 242, 176, 93, 165, 133, 5, 72, 113, 165, 153, 230, 155, 22, 75, 65, 97, 181, 90, 32, 74, 180, 66, 204, 64, 9, 111, 155, 46, 169, 167, 240, 29, 184, 51, 24, 163, 72, 122, 120, 98, 123, 232, 42, 101, 126, 31, 74, 194, 120, 87, 19, 232, 204, 176, 103, 45, 32, 240, 189, 104, 242, 155, 115, 235, 230, 166, 38, 157, 197, 38, 33, 133, 1, 185, 211, 22, 115, 143, 1, 15, 155, 29, 77, 48, 72, 215, 131, 137, 83, 16, 104, 64, 183, 160, 182, 46, 197, 122, 189, 123, 88, 209, 88, 124, 255, 198, 106, 109, 183, 140, 11, 77, 136, 149, 25, 239, 255, 39, 226, 98, 124, 185, 201, 121, 121, 225, 63, 81, 109, 7, 41, 198, 160, 36, 85, 49, 38, 44, 137, 103, 225, 145, 132, 41, 126, 153, 22, 143, 144, 40, 101, 150, 251, 72, 223, 221, 125, 16, 51, 197, 209, 103, 124, 241, 78, 234, 153, 34, 8, 103, 15, 243, 29, 44, 68, 171, 121, 43, 103, 130, 145, 137, 194, 252, 251, 218, 184, 126, 89, 139, 179, 248, 170, 118, 75, 85, 135, 238, 30, 53, 185, 233, 125, 214, 172, 232, 169, 42, 160, 60, 149, 182, 10, 68, 194, 43, 38, 191, 15, 198, 105, 150, 59, 69, 65, 35, 245, 49, 120, 47, 195, 151, 191, 94, 60, 56, 69, 168, 98, 147, 148, 9, 71, 131, 163, 30, 89, 11, 144, 89, 35, 183, 70, 107, 134, 105, 219, 129, 39, 187, 13, 76, 138, 252, 244, 176, 255, 103, 35, 171, 190, 164, 46, 133, 192, 239, 154, 209, 157, 62, 132, 164, 230, 118, 16, 9, 203, 22, 250, 108, 1, 137, 250, 196, 45, 3, 224, 202, 147, 150, 193, 124, 189, 222, 20, 75, 253, 54, 168, 97, 183, 204, 142, 188, 12, 136, 223, 250, 232, 56, 228, 153, 198, 114, 86, 17, 50, 41, 59, 219, 248, 146, 116, 254, 55, 152, 63, 75, 194, 206, 47, 110, 129, 31, 1, 73, 56, 54, 86, 36, 211, 100, 74, 76, 165, 90, 177, 94, 222, 162, 181, 145, 101, 36, 193, 239, 108, 190, 23, 175, 166, 193, 114, 18, 183, 86, 218, 229, 31, 238, 161, 253, 108, 223, 142, 201, 229, 40, 30, 128, 9, 235, 97, 138, 6, 182, 7, 5, 59, 171, 98, 171, 227, 45, 118, 62, 39, 185, 229, 206, 63, 25, 80, 251, 80, 253, 233, 4, 232, 147, 120, 198, 28, 248, 54, 75, 40, 74, 201, 3, 8, 183, 144, 12, 115, 134, 164, 183, 142, 30, 211, 63, 128, 87, 163, 47, 4, 137, 250, 80, 233, 84, 175, 243, 177, 94, 143, 32, 156, 224, 160, 187, 176, 149, 150, 20, 154, 176, 7, 198, 179, 27, 197, 220, 118, 112, 225, 1, 170, 94, 149, 85, 169, 166, 13, 48, 119, 116, 176, 57, 255, 127, 207, 54, 149, 36, 248, 199, 253, 151, 159, 227, 238, 129, 46, 64, 114, 173, 249, 219, 77, 32, 43, 170, 70, 144, 110, 104, 83, 141, 228, 32, 94, 213, 231, 135, 195, 12, 196, 9, 40, 38, 39, 76, 116, 23, 204, 137, 173, 146, 51, 5, 179, 188, 25, 181, 92, 224, 59, 105, 79, 108, 212, 110, 95, 130, 65, 104, 115, 141, 190, 214, 220, 242, 8, 140, 187, 157, 133, 231, 27, 203, 245, 198, 224, 146, 210, 198, 50, 168, 78, 108, 84, 224, 100, 74, 227, 160, 62, 65, 90, 235, 139, 130, 80, 251, 71, 236, 63, 41, 24, 195, 209, 161, 116, 233, 124, 141, 187, 175, 60, 44, 174, 142, 197, 81, 43, 120, 113, 21, 1, 177, 157, 15, 236, 228, 23, 225, 11, 31, 159, 146, 142, 66, 232, 28, 217, 159, 245, 75, 229, 185, 16, 39, 230, 84, 92, 161, 151, 226, 58, 21, 153, 166, 129, 199, 239, 71, 62, 123, 36, 204, 84, 125, 205, 170, 206, 252, 98, 13, 135, 26, 215, 94, 21, 204, 73, 177, 146, 249, 62, 176, 95, 91, 148, 13, 229, 162, 169, 217, 78, 6, 145, 224, 28, 74, 218, 8, 114, 235, 222, 85, 78, 13, 9, 117, 217, 140, 104, 3, 165, 23, 93, 182, 152, 229, 194, 90, 94, 131, 54, 127, 74, 97, 143, 71, 115, 97, 36, 145, 11, 183, 229, 202, 47, 190, 70, 111, 176, 5, 225, 28, 26, 141, 248, 64, 45, 13, 17, 216, 128, 210, 180, 194, 73, 121, 192, 51, 254, 251, 76, 188, 208, 101, 20, 93, 90, 172, 193, 193, 209, 61, 220, 195, 27, 230, 214, 140, 115, 250, 232, 68, 27, 86, 232, 53, 129, 55, 110, 240, 216, 73, 17, 47, 142, 6, 59, 86, 57, 194, 46, 159, 180, 107, 40, 84, 236, 68, 107, 209, 180, 218, 28, 69, 140, 148, 54, 159, 58, 180, 202, 222, 170, 9, 56, 207, 221, 79, 163, 15, 46, 40, 240, 117, 166, 37, 164, 47, 119, 30, 180, 102, 109, 102, 124, 61, 65, 26, 29, 80, 101, 103, 248, 128, 152, 119, 85, 55, 221, 140, 57, 244, 84, 249, 0, 35, 23, 47, 168, 108, 230, 86, 167, 27, 30, 120, 222, 150, 192, 228, 138, 29, 56, 24, 148, 10, 242, 8, 228, 204, 190, 210, 22, 112, 70, 157, 46, 46, 59, 33, 208, 89, 203, 164, 213, 37, 246, 3, 109, 215, 39, 255, 206, 39, 211, 135, 111, 29, 81, 220, 205, 27, 240, 82, 220, 24, 168, 225, 134, 82, 7, 119, 141, 75, 26, 34, 177, 21, 253, 180, 106, 151, 179, 105, 0, 250, 205, 30, 133, 128, 154, 249, 70, 82, 19, 53, 181, 113, 35, 22, 189, 194, 176, 159, 3, 226, 217, 111, 26, 52, 99, 228, 217, 223, 123, 197, 24, 239, 131, 157, 119, 202, 41, 221, 110, 188, 19, 225, 176, 17, 49, 200, 100, 239, 24, 175, 198, 41, 149, 247, 48, 253, 159, 166, 47, 72, 64, 132, 54, 247, 74, 28, 150, 175, 33, 115, 7, 75, 205, 11, 152, 59, 3, 130, 105, 73, 33, 11, 110, 77, 21, 226, 108, 5, 157, 179, 43, 124, 92, 206, 18, 35, 47, 8, 162, 53, 27, 184, 69, 39, 143, 160, 196, 172, 195, 83, 35, 178, 230, 148, 86, 211, 195, 227, 18, 137, 35, 31, 241, 75, 139, 57, 0, 12, 248, 75, 57, 220, 30, 9, 214, 24, 36, 41, 70, 207, 173, 43, 10, 84, 15, 48, 202, 207, 3, 88, 48, 131, 142, 28, 90, 113, 20, 136, 181, 103, 154, 228, 72, 135, 159, 45, 62, 236, 37, 202, 20, 17, 196, 151, 155, 118, 85, 201, 144, 118, 19, 196, 230, 126, 41, 206, 94, 176, 76, 117, 208, 122, 181, 231, 178, 211, 58, 2, 205, 221, 70, 124, 239, 123, 18, 251, 73, 38, 91, 24, 71, 110, 201, 102, 164, 177, 113, 121, 205, 254, 17, 73, 204, 215, 170, 135, 72, 8, 14, 177, 182, 120, 145, 231, 98, 161, 81, 163, 255, 149, 96, 169, 3, 117, 59, 124, 123, 166, 206, 54, 156, 118, 239, 96, 48, 250, 102, 30, 204, 238, 40, 164, 223, 111, 194, 22, 18, 125, 38, 220, 207, 76, 186, 213, 5, 117, 4, 141, 97, 237, 17, 90, 110, 46, 213, 210, 44, 157, 58, 197, 201, 21, 179, 182, 182, 214, 147, 46, 182, 157, 222, 196, 135, 248, 7, 128, 39, 232, 172, 0, 158, 13, 127, 247, 1, 228, 194, 171, 104, 105, 192, 36, 198, 252, 24, 209, 235, 223, 69, 9, 226, 223, 205, 167, 60, 237, 96, 89, 187, 130, 7, 113, 211, 177, 176, 104, 124, 182, 206, 44, 52, 159, 133, 244, 253, 210, 222, 126, 79, 220, 84, 43, 83, 27, 77, 53, 32, 250, 214, 4, 166, 22, 215, 163, 142, 151, 69, 56, 189, 237, 109, 128, 149, 233, 238, 81, 128, 223, 127, 74, 29, 148, 247, 194, 252, 214, 4, 154, 10, 203, 135, 122, 152, 222, 216, 104, 42, 5, 65, 223, 155, 94, 15, 48, 198, 82, 176, 27, 72, 35, 62, 225, 49, 63, 114, 255, 104, 138, 137, 152, 179, 223, 108, 22, 90, 116, 174, 215, 61, 174, 99, 210, 29, 247, 14, 62, 165, 51, 225, 96, 96, 73, 239, 254, 3, 232, 35, 174, 223, 80, 144, 9, 212, 123, 62, 18, 79, 139, 60, 182, 187, 62, 158, 104, 252, 31, 164, 73, 247, 243, 47, 72, 73, 4, 63, 42, 22, 250, 143, 227, 55, 32, 146, 61, 213, 142, 5, 169, 184, 96, 171, 43, 216, 140, 89, 105, 109, 78, 5, 38, 184, 163, 71, 224, 167, 231, 163, 59, 166, 40, 35, 37, 181, 144, 87, 31, 215, 52, 16, 150, 212, 48, 167, 66, 76, 96, 80, 61, 61, 114, 73, 175, 105, 162, 208, 81, 83, 48, 227, 63, 194, 143, 17, 13, 187, 21, 116, 35, 206, 71, 222, 219, 151, 2, 146, 125, 135, 7, 24, 42, 167, 104, 125, 151, 71, 187, 127, 161, 220, 53, 181, 43, 62, 65, 167, 213, 82, 188, 130, 90, 110, 203, 97, 108, 152, 191, 157, 62, 89, 180, 174, 248, 25, 209, 27, 113, 138, 132, 171, 71, 218, 233, 64, 143, 107, 149, 57, 87, 38, 15, 222, 31, 123, 174, 98, 19, 1, 37, 148, 124, 78, 254, 136, 217, 155, 209, 37, 247, 44, 203, 51, 235, 67, 108, 126, 152, 7, 114, 19, 99, 148, 73, 157, 25, 71, 247, 97, 225, 66, 236, 2, 56, 173, 71, 244, 154, 160, 100, 101, 66, 243, 59, 174, 76, 111, 134, 252, 206, 104, 41, 31, 215, 223, 138, 169, 9, 134, 33, 51, 170, 120, 74, 85, 130, 92, 47, 211, 147, 105, 103, 223, 217, 37, 248, 226, 1, 160, 71, 23, 83, 30, 236, 111, 233, 45, 184, 162, 3, 226, 24, 215, 96, 55, 76, 119, 131, 20, 161, 219, 172, 171, 202, 107, 224, 25, 244, 51, 162, 66, 145, 59, 167, 89, 209, 5, 119, 210, 177, 135, 125, 142, 187, 74, 236, 147, 111, 98, 240, 89, 221, 231, 142, 46, 16, 151, 220, 241, 36, 119, 140, 193, 64, 72, 210, 242, 52, 33, 73, 130, 168, 173, 158, 240, 100, 242, 231, 62, 201, 185, 35, 8, 61, 189, 199, 231, 236, 220, 251, 120, 134, 48, 164, 231, 143, 175, 225, 226, 18, 251, 0, 4, 70, 170, 124, 142, 95, 152, 203, 152, 73, 128, 115, 31, 236, 137, 220, 205, 183, 175, 136, 217, 54, 25, 71, 71, 246, 84, 63, 166, 81, 252, 47, 73, 213, 194, 61, 124, 38, 242, 99, 163, 242, 8, 243, 62, 242, 155, 242, 184, 33, 93, 232, 152, 200, 219, 70, 147, 64, 142, 144, 151, 125, 87, 57, 153, 215, 186, 205, 34, 52, 116, 189, 75, 254, 147, 189, 225, 243, 92, 7, 193, 51, 141, 162, 202, 195, 38, 135, 192, 138, 2, 242, 2, 114, 136, 28, 236, 53, 233, 19, 16, 47, 255, 58, 103, 58, 49, 154, 46, 161, 26, 74, 135, 135, 246, 157, 112, 83, 169, 27, 9, 130, 215, 150, 45, 119, 147, 54, 185, 92, 34, 67, 189, 177, 41, 141, 6, 218, 22, 106, 160, 130, 191, 176, 184, 159, 23, 1, 29, 248, 186, 46, 215, 66, 171, 4, 228, 239, 156, 208, 90, 218, 64, 191, 203, 228, 1, 186, 27, 10, 33, 59, 36, 216, 92, 249, 60, 79, 132, 33, 150, 13, 204, 209, 253, 207, 149, 38, 198, 93, 128, 223, 108, 169, 180, 148, 44, 89, 135, 124, 117, 163, 124, 122, 122, 51, 78, 226, 234, 62, 250, 73, 207, 95, 68, 195, 213, 80, 240, 210, 7, 194, 144, 38, 11, 172, 49, 57, 26, 101, 217, 206, 103, 64, 233, 187, 8, 72, 64, 240, 152, 81, 21, 181, 115, 106, 85, 193, 81, 131, 22, 74, 245, 78, 103, 205, 191, 238, 230, 11, 139, 52, 157, 112, 48, 86, 120, 37, 231, 75, 151, 94, 93, 91, 252, 110, 42, 199, 189, 198, 76, 177, 205, 247, 16, 193, 36, 4, 198, 64, 225, 68, 36, 1, 29, 182, 111, 245, 215, 209, 55, 177, 246, 148, 230, 42, 189, 160, 131, 105, 89, 78, 209, 84, 56, 134, 168, 27, 188, 193, 65, 254, 29, 57, 18, 40, 127, 80, 140, 37, 172, 160, 92, 230, 64, 184, 150, 250, 197, 131, 58, 80, 91, 113, 236, 212, 218, 181, 177, 93, 143, 7, 71, 9, 250, 183, 158, 224, 243, 69, 228, 135, 1, 129, 30, 234, 196, 253, 30, 215, 104, 170, 83, 248, 69, 130, 109, 35, 230, 132, 143, 190, 29, 111, 64, 79, 84, 25, 128, 212, 63, 140, 147, 45, 214, 137, 169, 94, 29, 91, 48, 167, 239, 175, 129, 205, 80, 29, 179, 186, 187, 34, 85, 18, 170, 171, 89, 26, 164, 44, 204, 111, 181, 1, 104, 149, 195, 92, 112, 125, 228, 172, 27, 163, 135, 152, 211, 145, 126, 75, 224, 70, 28, 212, 153, 68, 82, 20, 158, 85, 117, 148, 207, 63, 33, 109, 4, 189, 18, 36, 57, 54, 248, 20, 156, 5, 43, 114, 219, 168, 124, 204, 169, 209, 20, 13, 20, 19, 248, 255, 69, 219, 127, 247, 53, 168, 132, 251, 86, 142, 187, 58, 87, 156, 231, 173, 52, 138, 117, 80, 8, 238, 243, 60, 200, 188, 60, 84, 195, 39, 84, 132, 9, 50, 189, 171, 55, 221, 97, 1, 3, 177, 38, 243, 162, 239, 120, 82, 244, 129, 139, 183, 101, 44, 38, 238, 235, 135, 227, 240, 190, 39, 161, 49, 181, 241, 57, 92, 74, 251, 0, 214, 139, 49, 110, 79, 178, 94, 35, 138, 114, 27, 205, 136, 195, 50, 78, 212, 126, 178, 117, 232, 169, 1, 182, 170, 170, 81, 96, 74, 224, 221, 235, 155, 81, 94, 105, 108, 196, 171, 121, 168, 51, 2, 34, 166, 187, 30, 225, 83, 204, 175, 63, 164, 79, 206, 117, 225, 229, 197, 6, 181, 218, 1, 138, 41, 114, 4, 127, 107, 123, 92, 197, 227, 174, 88, 125, 42, 250, 143, 172, 34, 26, 159, 95, 241, 187, 5, 12, 87, 67, 73, 71, 70, 63, 97, 176, 106, 1, 186, 217, 57, 178, 25, 125, 220, 95, 253, 33, 163, 153, 155, 120, 26, 142, 237, 113, 135, 55, 163, 55, 70, 221, 183, 173, 17, 87, 60, 115, 58, 255, 129, 80, 168, 125, 144, 50, 207, 220, 126, 85, 71, 58, 223, 243, 223, 68, 146, 23, 142, 141, 146, 193, 219, 33, 83, 189, 12, 57, 133, 227, 127, 87, 240, 192, 82, 240, 12, 248, 92, 51, 228, 199, 138, 173, 25, 17, 133, 149, 146, 6, 105, 43, 160, 7, 224, 34, 236, 131, 25, 25, 28, 191, 57, 249, 88, 196, 66, 253, 76, 35, 46, 34, 28, 92, 59, 22, 90, 143, 105, 27, 15, 83, 24, 2, 48, 49, 85, 41, 48, 137, 142, 70, 168, 78, 142, 180, 208, 68, 48, 86, 126, 141, 95, 1, 95, 85, 242, 85, 59, 105, 188, 223, 63, 183, 172, 212, 38, 75, 18, 78, 62, 132, 237, 102, 85, 87, 131, 52, 125, 34, 113, 114, 175, 172, 229, 56, 238, 249, 215, 64, 163, 84, 163, 96, 202, 194, 72, 175, 118, 127, 82, 242, 144, 135, 205, 170, 157, 26, 203, 30, 226, 198, 111, 84, 49, 239, 121, 85, 227, 236, 164, 80, 148, 169, 77, 144, 248, 172, 231, 54, 183, 87, 117, 0, 170, 168, 158, 53, 238, 213, 30, 189, 207, 15, 115, 60, 78, 183, 39, 234, 203, 129, 135, 197, 66, 105, 231, 36, 5, 84, 146, 65, 42, 236, 43, 176, 31, 96, 211, 217, 245, 122, 242, 241, 251, 202, 241, 206, 39, 26, 179, 21, 15, 122, 55, 179, 141, 217, 231, 169, 192, 19, 170, 152, 198, 207, 106, 61, 214, 170, 157, 81, 141, 98, 249, 150, 124, 161, 75, 223, 154, 158, 134, 109, 37, 251, 216, 51, 96, 20, 236, 206, 104, 180, 197, 33, 243, 162, 178, 219, 90, 169, 201, 184, 189, 150, 122, 53, 206, 62, 51, 87, 244, 126, 206, 23, 43, 70, 163, 117, 97, 130, 239, 141, 53, 62, 199, 167, 158, 124, 52, 93, 102, 83, 229, 90, 27, 119, 222, 88, 253, 193, 58, 43, 37, 234, 110, 56, 14, 164, 79, 114, 4, 113, 52, 18, 169, 238, 149, 126, 164, 95, 85, 217, 173, 98, 9, 230, 97, 147, 226, 154, 159, 184, 96, 243, 168, 152, 77, 11, 126, 196, 205, 118, 250, 67, 13, 144, 143, 22, 129, 59, 209, 234, 231, 4, 122, 135, 65, 188, 34, 53, 25, 245, 59, 53, 61, 168, 132, 138, 172, 132, 146, 7, 151, 140, 219, 223, 142, 120, 14, 5, 135, 235, 104, 199, 49, 130, 95, 48, 10, 56, 244, 10, 45, 63, 170, 209, 125, 52, 88, 0, 176, 78, 110, 202, 161, 31, 70, 129, 57, 232, 159, 99, 139, 82, 118, 39, 208, 62, 99, 204, 225, 83, 29, 168, 126, 98, 65, 181, 138, 106, 174, 234, 49, 103, 78, 40, 250, 130, 183, 94, 52, 168, 35, 216, 125, 234, 14, 55, 172, 245, 214, 223, 57, 157, 193, 140, 68, 20, 57, 50, 253, 79, 20, 0, 69, 19, 204, 221, 233, 130, 93, 58, 130, 60, 248, 118, 242, 39, 162, 94, 81, 179, 65, 210, 12, 169, 31, 168, 170, 218, 18, 137, 186, 23, 136, 67, 121, 156, 205, 116, 21, 88, 212, 148, 187, 210, 83, 10, 98, 70, 18, 55, 137, 201, 105, 47, 82, 3, 29, 96, 254, 215, 12, 24, 162, 247, 179, 95, 3, 210, 251, 250, 92, 76, 228, 22, 7, 204, 73, 169, 50, 84, 14, 144, 146, 30, 5, 151, 128, 64, 134, 9, 106, 118, 161, 231, 217, 139, 172, 128, 142, 0, 182, 27, 196, 118, 220, 94, 129, 174, 133, 117, 2, 6, 242, 35, 179, 221, 187, 52, 244, 203, 102, 148, 231, 37, 101, 78, 217, 226, 112, 154, 146, 163, 13, 215, 59, 167, 89, 33, 208, 12, 139, 250, 85, 219, 198, 138, 173, 150, 9, 177, 149, 234, 118, 111, 233, 151, 2, 111, 172, 248, 120, 168, 235, 3, 235, 81, 130, 27, 141, 28, 7, 48, 106, 92, 15, 152, 148, 246, 47, 84, 166, 234, 187, 190, 190, 68, 211, 173, 72, 225, 73, 212, 23, 230, 61, 191, 44, 171, 110, 88, 118, 33, 71, 214, 54, 183, 210, 200, 111, 150, 206, 127, 115, 97, 70, 12, 10, 248, 108, 207, 40, 23, 185, 229, 123, 125, 221, 98, 40, 93, 170, 73, 67, 187, 42, 242, 167, 154, 179, 105, 76, 248, 217, 143, 62, 184, 222, 43, 158, 246, 175, 38, 147, 86, 177, 13, 245, 218, 180, 244, 35, 65, 76, 228, 52, 250, 150, 188, 75, 242, 144, 29, 228, 220, 51, 127, 100, 77, 228, 178, 213, 198, 152, 192, 92, 139, 106, 80, 93, 17, 228, 24, 127, 176, 129, 172, 192, 5, 224, 164, 105, 54, 0, 59, 198, 27, 107, 141, 58, 133, 52, 178, 180, 119, 229, 12, 4, 39, 22, 183, 232, 247, 246, 244, 209, 128, 89, 185, 127, 115, 232, 11, 212, 113, 63, 79, 143, 189, 149, 83, 9, 27, 41, 4, 14, 120, 228, 95, 22, 187, 39, 7, 9, 16, 81, 135, 25, 252, 72, 56, 90, 58, 120, 202, 204, 255, 130, 103, 39, 67, 110, 186, 93, 71, 200, 135, 191, 134, 53, 221, 24, 27, 166, 140, 98, 207, 249, 81, 67, 12, 19, 91, 242, 99, 77, 196, 209, 216, 59, 194, 167, 57, 242, 8, 206, 111, 75, 8, 242, 29, 226, 112, 208, 185, 48, 66, 170, 102, 227, 164, 247, 115, 221, 63, 117, 191, 55, 157, 203, 200, 65, 171, 149, 107, 48, 4, 36, 220, 34, 73, 143, 215, 147, 251, 247, 72, 103, 146, 190, 34, 69, 174, 119, 24, 125, 127, 197, 129, 23, 198, 82, 250, 179, 149, 248, 46, 253, 217, 46, 132, 40, 171, 17, 120, 2, 105, 18, 58, 173, 206, 192, 112, 122, 75, 113, 109, 113, 235, 151, 25, 93, 15, 243, 206, 40, 107, 201, 238, 157, 44, 97, 186, 27, 136, 249, 111, 86, 178, 160, 108, 41, 108, 16, 1, 64, 193, 123, 248, 30, 31, 25, 5, 172, 216, 237, 100, 126, 162, 177, 114, 201, 119, 5, 149, 237, 127, 144, 232, 125, 206, 157, 91, 3, 24, 255, 117, 170, 118, 173, 153, 133, 232, 20, 110, 170, 111, 35, 201, 226, 91, 203, 234, 17, 140, 162, 155, 173, 204, 58, 5, 207, 252, 164, 197, 29, 150, 214, 178, 142, 17, 213, 169, 27, 192, 16, 113, 158, 96, 178, 196, 129, 50, 28, 63, 112, 85, 103, 61, 224, 228, 36, 202, 179, 79, 207, 39, 157, 243, 37, 146, 158, 214, 170, 80, 77, 122, 184, 54, 130, 125, 76, 46, 243, 52, 161, 62, 232, 218, 225, 18, 99, 105, 90, 186, 84, 19, 39, 149, 135, 232, 117, 16, 23, 63, 13, 1, 10, 190, 158, 64, 4, 107, 31, 156, 125, 183, 65, 26, 218, 12, 78, 49, 14, 138, 100, 21, 138, 178, 94, 56, 153, 6, 193, 117, 21, 189, 201, 126, 195, 68, 235, 9, 50, 215, 101, 88, 132, 40, 124, 226, 230, 204, 253, 92, 141, 116, 194, 40, 71, 152, 180, 255, 148, 162, 52, 16, 152, 242, 248, 13, 28, 3, 138, 99, 21, 42, 249, 84, 233, 161, 156, 72, 168, 97, 191, 17, 86, 213, 41, 129, 49, 174, 0, 85, 70, 143, 252, 163, 143, 233, 223, 20, 63, 222, 74, 110, 151, 98, 11, 171, 40, 39, 85, 243, 96, 27, 109, 53, 70, 97, 23, 210, 213, 81, 160, 70, 109, 252, 228, 56, 65, 227, 240, 190, 199, 43, 112, 81, 69, 42, 148, 152, 20, 82, 141, 5, 216, 97, 77, 196, 36, 163, 113, 216, 173, 175, 152, 188, 154, 96, 226, 111, 91, 162, 246, 84, 102, 3, 128, 60, 243, 189, 101, 96, 15, 64, 117, 59, 36, 145, 131, 114, 36, 193, 214, 84, 54, 206, 107, 197, 147, 216, 199, 229, 132, 233, 77, 131, 237, 246, 191, 136, 181, 59, 132, 15, 10, 217, 127, 207, 231, 112, 7, 220, 248, 63, 155, 148, 159, 105, 18, 185, 163, 168, 48, 225, 71, 181, 47, 82, 234, 113, 213, 200, 227, 228, 161, 157, 102, 126, 212, 71, 110, 63, 153, 114, 157, 255, 56, 60, 107, 64, 37, 141, 241, 171, 16, 219, 54, 164, 26, 48, 171, 108, 187, 199, 219, 12, 16, 197, 164, 221, 204, 43, 75, 17, 197, 169, 229, 35, 78, 34, 206, 227, 129, 54, 229, 248, 206, 248, 165, 238, 180, 253, 163, 131, 162, 156, 48, 98, 88, 114, 226, 147, 104, 0, 193, 81, 231, 6, 208, 202, 162, 169, 27, 219, 78, 168, 207, 242, 49, 31, 99, 16, 117, 231, 21, 248, 200, 58, 64, 74, 215, 238, 190, 58, 105, 126, 250, 57, 50, 225, 93, 120, 119, 224, 72, 67, 71, 161, 29, 196, 118, 106, 60, 37, 2, 152, 203, 221, 186, 83, 58, 32, 221, 159, 34, 215, 220, 194, 227, 43, 230, 1, 177, 58, 37, 244, 99, 109, 112, 159, 124, 232, 201, 72, 187, 67, 241, 94, 175, 105, 195, 98, 97, 183, 66, 131, 254, 76, 121, 224, 142, 43, 149, 171, 119, 73, 78, 113, 93, 19, 0, 182, 130, 105, 143, 225, 26, 6, 206, 158, 98, 70, 85, 150, 192, 182, 191, 181, 236, 175, 106, 59, 213, 4, 123, 20, 1, 124, 151, 114, 14, 194, 3, 168, 126, 190, 23, 177, 111, 40, 143, 185, 15, 225, 89, 74, 176, 3, 183, 63, 90, 23, 213, 194, 88, 104, 229, 2, 147, 47, 238, 98, 96, 240, 51, 216, 134, 53, 6, 3, 231, 186, 248, 163, 117, 235, 164, 137, 92, 126, 67, 58, 209, 184, 54, 14, 36, 234, 66, 192, 236, 132, 191, 187, 159, 205, 56, 32, 227, 235, 252, 210, 113, 12, 254, 66, 126, 63, 113, 234, 89, 235, 93, 244, 246, 70, 166, 74, 233, 120, 119, 243, 23, 246, 59, 181, 193, 179, 123, 7, 185, 77, 119, 206, 234, 145, 45, 1, 57, 158, 175, 181, 171, 27, 211, 212, 63, 146, 139, 157, 103, 102, 28, 104, 189, 190, 197, 17, 222, 126, 92, 175, 15, 161, 73, 255, 202, 89, 103, 25, 240, 68, 81, 134, 107, 169, 191, 187, 219, 5, 219, 124, 107, 223, 80, 20, 146, 73, 240, 86, 185, 18, 239, 34, 109, 232, 46, 122, 43, 61, 106, 251, 200, 89, 156, 73, 238, 133, 162, 182, 112, 190, 32, 211, 161, 231, 244, 202, 229, 171, 3, 182, 240, 219, 16, 19, 205, 127, 42, 103, 169, 128, 148, 5, 62, 106, 157, 38, 122, 43, 59, 244, 37, 15, 231, 154, 74, 177, 185, 180, 30, 50, 121, 97, 123, 242, 22, 25, 62, 94, 251, 90, 66, 90, 72, 12, 94, 94, 93, 162, 100, 178, 215, 75, 63, 46, 148, 36, 241, 177, 224, 201, 54, 91, 171, 13, 63, 203, 182, 204, 250, 30, 255, 206, 81, 119, 22, 32, 38, 150, 36, 36, 254, 122, 90, 1, 8, 226, 190, 118, 81, 193, 215, 244, 70, 247, 7, 253, 89, 142, 174, 111, 11, 129, 10, 160, 78, 113, 114, 64, 153, 96, 231, 43, 194, 43, 149, 56, 217, 112, 93, 170, 78, 47, 35, 118, 81, 218, 32, 131, 6, 22, 84, 104, 115, 79, 66, 99, 141, 49, 1, 126, 255, 146, 161, 79, 181, 85, 12, 144, 34, 40, 148, 24, 156, 22, 197, 19, 70, 220, 66, 71, 78, 63, 26, 209, 220, 118, 210, 247, 79, 166, 82, 179, 44, 175, 230, 10, 255, 141, 56, 96, 160, 143, 23, 196, 61, 29, 235, 187, 38, 209, 171, 244, 244, 214, 107, 179, 67, 109, 140, 94, 6, 84, 101, 137, 163, 183, 63, 127, 89, 238, 46, 205, 109, 51, 62, 175, 49, 45, 140, 201, 145, 21, 125, 183, 147, 206, 88, 181, 211, 183, 46, 34, 48, 39, 179, 147, 137, 41, 116, 150, 232, 153, 86, 231, 153, 115, 171, 138, 145, 139, 95, 56, 152, 175, 176, 201, 126, 105, 126, 38, 207, 197, 157, 29, 198, 139, 58, 155, 144, 207, 38, 45, 70, 178, 195, 89, 140, 161, 183, 236, 93, 110, 183, 171, 52, 49, 240, 31, 38, 22, 101, 163, 148, 228, 138, 236, 97, 181, 148, 212, 12, 174, 52, 90, 134, 217, 150, 134, 237, 193, 50, 110, 17, 192, 7, 178, 245, 39, 113, 254, 44, 39, 57, 179, 171, 88, 223, 72, 175, 167, 26, 136, 146, 145, 243, 72, 59, 42, 202, 166, 159, 234, 9, 168, 41, 220, 34, 106, 145, 11, 118, 117, 195, 55, 109, 117, 184, 231, 205, 62, 158, 173, 11, 82, 170, 13, 114, 13, 240, 181, 90, 33, 97, 50, 101, 157, 67, 4, 213, 221, 124, 253, 219, 48, 135, 63, 212, 38, 206, 104, 250, 229, 214, 117, 6, 157, 149, 32, 247, 93, 154, 70, 113, 176, 52, 146, 205, 174, 197, 215, 31, 77, 222, 252, 49, 233, 205, 194, 195, 246, 163, 239, 194, 239, 74, 186, 174, 28, 195, 217, 49, 167, 146, 164, 90, 26, 67, 48, 147, 54, 184, 41, 244, 225, 122, 142, 181, 118, 35, 254, 132, 84, 56, 77, 162, 26, 203, 106, 189, 246, 49, 231, 189, 239, 57, 216, 253, 107, 107, 183, 52, 182, 23, 92, 3, 226, 115, 102, 224, 161, 132, 130, 81, 95, 169, 50, 193, 131, 8, 137, 183, 20, 145, 149, 127, 2, 94, 97, 50, 243, 132, 252, 225, 78, 36, 254, 50, 159, 45, 195, 65, 231, 33, 111, 87, 243, 207, 89, 105, 65, 60, 87, 132, 184, 21, 150, 162, 166, 33, 120, 101, 136, 107, 178, 81, 48, 13, 14, 20, 139, 39, 221, 141, 80, 250, 202, 157, 34, 217, 6, 48, 19, 222, 144, 130, 115, 251, 88, 104, 9, 100, 2, 20, 121, 62, 46, 20, 24, 20, 183, 8, 179, 70, 143, 90, 228, 162, 120, 219, 81, 96, 38, 33, 63, 152, 220, 186, 233, 203, 4, 202, 133, 129, 142, 80, 244, 12, 140, 112, 245, 235, 131, 126, 26, 16, 163, 24, 190, 33, 72, 100, 214, 105, 57, 58, 85, 40, 92, 167, 190, 46, 172, 0, 132, 192, 245, 239, 42, 163, 251, 206, 128, 93, 82, 20, 161, 233, 138, 14, 87, 72, 208, 104, 106, 73, 158, 144, 158, 241, 9, 34, 10, 10, 214, 19, 136, 113, 50, 253, 78, 112, 23, 6, 4, 180, 16, 191, 161, 191, 156, 202, 42, 161, 52, 142, 49, 7, 224, 165, 45, 179, 136, 62, 115, 126, 148, 60, 45, 31, 117, 64, 117, 57, 96, 126, 119, 83, 23, 48, 51, 186, 149, 201, 96, 139, 123, 166, 36, 133, 89, 252, 125, 209, 63, 85, 102, 118, 68, 147, 110, 49, 180, 195, 177, 109, 111, 70, 90, 51, 176, 188, 212, 249, 87, 79, 14, 199, 156, 13, 54, 209, 109, 246, 189, 232, 93, 94, 235, 71, 118, 72, 140, 86, 218, 175, 235, 195, 188, 242, 126, 147, 41, 142, 33, 151, 222, 6, 136, 158, 230, 151, 181, 82, 250, 156, 20, 29, 52, 208, 112, 113, 212, 254, 40, 68, 131, 22, 164, 180, 134, 74, 129, 36, 89, 59, 38, 226, 69, 146, 244, 151, 79, 102, 172, 119, 142, 91, 230, 95, 222, 244, 228, 122, 151, 154, 250, 133, 51, 176, 232, 117, 250, 122, 98, 211, 10, 136, 140, 123, 154, 216, 24, 86, 203, 197, 54, 217, 15, 149, 9, 244, 221, 59, 226, 158, 42, 159, 40, 158, 232, 158, 124, 7, 24, 252, 1, 102, 72, 157, 13, 97, 29, 196, 254, 200, 165, 148, 96, 178, 151, 180, 99, 194, 124, 216, 0, 17, 216, 199, 176, 214, 241, 156, 67, 60, 85, 144, 187, 184, 221, 52, 222, 250, 62, 65, 166, 22, 105, 55, 120, 18, 51, 211, 127, 87, 68, 81, 96, 108, 60, 42, 146, 53, 65, 98, 218, 179, 111, 193, 25, 143, 132, 64, 255, 147, 189, 35, 85, 32, 26, 162, 87, 83, 53, 190, 40, 57, 218, 41, 220, 30, 70, 29, 1, 190, 197, 107, 20, 223, 121, 113, 16, 68, 131, 188, 81, 20, 200, 41, 29, 3, 164, 171, 239, 154, 9, 161, 86, 96, 27, 38, 35, 24, 209, 239, 219, 19, 120, 132, 106, 116, 85, 109, 151, 233, 196, 93, 173, 82, 243, 122, 235, 125, 59, 182, 38, 127, 162, 162, 5, 94, 47, 235, 17, 132, 27, 233, 98, 154, 41, 219, 201, 128, 26, 57, 34, 33, 100, 11, 23, 133, 22, 251, 225, 198, 229, 162, 61, 132, 217, 97, 197, 118, 53, 235, 161, 60, 21, 71, 229, 14, 80, 67, 142, 182, 152, 8, 118, 243, 230, 161, 64, 14, 204, 14, 15, 207, 140, 19, 217, 171, 52, 116, 28, 2, 249, 221, 107, 55, 190, 127, 133, 14, 14, 42, 232, 236, 69, 88, 160, 68, 95, 168, 241, 219, 90, 166, 56, 59, 24, 205, 79, 140, 112, 229, 82, 77, 210, 130, 178, 156, 115, 248, 18, 229, 94, 129, 3, 198, 118, 159, 158, 126, 241, 81, 157, 212, 8, 246, 216, 152, 12, 171, 130, 188, 117, 250, 47, 162, 149, 131, 155, 37, 147, 179, 142, 187, 122, 85, 219, 97, 31, 67, 49, 49, 170, 36, 96, 53, 11, 186, 176, 167, 71, 201, 189, 137, 166, 181, 220, 67, 193, 162, 183, 136, 141, 72, 239, 25, 219, 31, 223, 19, 202, 42, 186, 18, 16, 242, 170, 189, 161, 197, 20, 51, 131, 226, 129, 41, 255, 27, 36, 9, 106, 216, 60, 253, 228, 60, 188, 41, 189, 69, 71, 24, 236, 172, 227, 46, 254, 2, 147, 40, 39, 241, 118, 0, 222, 250, 178, 237, 106, 45, 81, 86, 47, 116, 211, 225, 73, 9, 2, 27, 73, 47, 73, 42, 230, 232, 237, 71, 83, 122, 21, 15, 84, 139, 144, 190, 123, 21, 236, 35, 167, 61, 123, 159, 61, 182, 161, 254, 219, 59, 18, 187, 163, 41, 248, 39, 78, 150, 142, 74, 184, 46, 209, 156, 189, 36, 149, 187, 130, 152, 49, 218, 209, 100, 131, 4, 14, 183, 157, 9, 73, 164, 190, 161, 84, 34, 190, 53, 15, 229, 226, 177, 31, 233, 198, 176, 246, 83, 65, 147, 105, 204, 246, 254, 61, 149, 233, 182, 92, 108, 84, 167, 60, 100, 60, 115, 226, 133, 246, 154, 76, 169, 76, 75, 175, 178, 184, 134, 52, 232, 156, 218, 116, 184, 154, 211, 224, 59, 53, 154, 55, 139, 86, 95, 198, 23, 93, 184, 98, 235, 222, 122, 121, 165, 41, 180, 56, 201, 7, 25, 100, 49, 183, 199, 71, 113, 98, 80, 56, 40, 58, 192, 179, 77, 125, 127, 105, 203, 97, 226, 94, 178, 40, 245, 0, 218, 55, 196, 199, 166, 192, 186, 211, 186, 254, 81, 129, 223, 180, 82, 19, 50, 222, 214, 227, 252, 103, 206, 104, 221, 61, 246, 129, 86, 16, 100, 43, 159, 180, 206, 85, 93, 216, 223, 170, 108, 206, 78, 112, 31, 184, 173, 173, 31, 140, 190, 185, 49, 243, 125, 216, 13, 120, 220, 9, 158, 142, 105, 128, 201, 78, 89, 29, 37, 5, 60, 176, 233, 77, 17, 104, 25, 174, 165, 81, 102, 71, 2, 83, 95, 102, 130, 134, 143, 235, 102, 204, 114, 41, 26, 183, 185, 249, 51, 233, 26, 134, 7, 114, 119, 1, 253, 125, 118, 33, 175, 0, 50, 202, 108, 146, 140, 181, 63, 10, 79, 68, 155, 121, 53, 75, 34, 53, 248, 4, 9, 64, 49, 224, 152, 39, 172, 250, 188, 130, 205, 216, 191, 86, 76, 145, 105, 30, 181, 205, 206, 8, 128, 166, 152, 64, 115, 55, 201, 101, 82, 139, 203, 97, 209, 244, 94, 52, 44, 34, 47, 251, 50, 85, 104, 247, 162, 250, 139, 67, 195, 219, 141, 61, 53, 132, 123, 200, 249, 26, 96, 126, 70, 185, 185, 140, 244, 39, 150, 253, 142, 173, 238, 17, 240, 102, 106, 49, 13, 121, 188, 32, 34, 21, 127, 153, 161, 85, 163, 64, 29, 25, 206, 108, 11, 205, 106, 236, 173, 138, 203, 98, 185, 183, 78, 107, 5, 233, 34, 228, 154, 126, 148, 138, 217, 63, 41, 89, 5, 251, 145, 27, 240, 90, 168, 56, 8, 36, 131, 234, 137, 245, 144, 82, 110, 86, 187, 222, 164, 224, 46, 77, 213, 12, 192, 227, 44, 156, 207, 111, 36, 208, 143, 177, 18, 21, 205, 29, 181, 77, 235, 104, 243, 72, 124, 127, 141, 217, 151, 130, 131, 150, 69, 186, 174, 27, 217, 8, 37, 21, 164, 81, 87, 194, 178, 34, 135, 235, 205, 42, 77, 159, 111, 35, 12, 149, 67, 114, 9, 108, 51, 173, 158, 95, 179, 224, 48, 30, 118, 162, 133, 99, 199, 2, 98, 176, 144, 86, 124, 216, 177, 232, 141, 35, 149, 199, 206, 230, 147, 240, 205, 224, 83, 14, 245, 80, 235, 7, 133, 107, 206, 99, 147, 28, 2, 208, 43, 166, 167, 64, 244, 223, 196, 134, 203, 36, 33, 200, 26, 183, 104, 246, 181, 243, 111, 12, 211, 84, 141, 224, 135, 58, 34, 160, 97, 159, 88, 193, 45, 153, 15, 32, 203, 151, 121, 20, 182, 185, 51, 4, 171, 67, 253, 220, 177, 83, 187, 152, 224, 164, 182, 139, 62, 99, 170, 128, 208, 86, 76, 57, 188, 235, 187, 176, 208, 111, 169, 18, 150, 73, 198, 114, 86, 93, 17, 159, 200, 121, 42, 59, 221, 8, 21, 93, 217, 124, 200, 98, 154, 59, 19, 172, 218, 54, 9, 16, 250, 27, 74, 70, 123, 131, 13, 45, 251, 245, 240, 179, 2, 52, 123, 2, 163, 197, 32, 205, 87, 126, 11, 94, 144, 58, 70, 45, 47, 191, 143, 247, 230, 247, 225, 93, 192, 31, 221, 175, 10, 165, 20, 139, 4, 2, 32, 108, 149, 187, 55, 208, 183, 135, 51, 105, 168, 162, 83, 130, 220, 129, 175, 102, 160, 105, 178, 61, 174, 223, 109, 108, 165, 46, 41, 183, 139, 241, 97, 82, 181, 21, 74, 172, 87, 239, 126, 233, 224, 207, 20, 204, 68, 1, 197, 105, 222, 118, 134, 11, 93, 13, 139, 42, 243, 5, 94, 146, 125, 160, 239, 70, 222, 152, 7, 46, 154, 103, 128, 120, 2, 215, 172, 73, 198, 68, 229, 7, 50, 20, 223, 194, 104, 72, 37, 54, 48, 168, 76, 200, 204, 81, 182, 59, 113, 152, 131, 197, 106, 20, 116, 220, 16, 248, 116, 68, 136, 126, 107, 132, 185, 102, 148, 138, 227, 125, 245, 39, 44, 130, 25, 129, 106, 70, 236, 253, 244, 23, 197, 107, 70, 16, 235, 131, 22, 140, 76, 238, 115, 72, 220, 83, 218, 122, 55, 194, 79, 242, 96, 20, 79, 172, 20, 46, 233, 252, 6, 73, 87, 92, 105, 56, 67, 82, 162, 214, 70, 33, 235, 238, 25, 5, 233, 16, 2, 118, 142, 105, 210, 46, 34, 93, 21, 60, 20, 84, 27, 205, 63, 180, 102, 21, 213, 238, 191, 227, 13, 121, 133, 255, 212, 164, 204, 105, 77, 212, 120, 14, 4, 254, 126, 125, 209, 181, 129, 108, 39, 179, 199, 158, 3, 242, 64, 160, 125, 64, 27, 136, 199, 71, 221, 225, 205, 184, 185, 128, 52, 146, 104, 210, 120, 153, 57, 162, 59, 200, 81, 232, 89, 113, 131, 167, 67, 198, 41, 19, 180, 21, 3, 36, 243, 242, 191, 225, 35, 147, 80, 11, 79, 24, 58, 215, 36, 134, 80, 154, 170, 254, 172, 77, 51, 36, 198, 151, 123, 197, 246, 47, 217, 203, 216, 177, 212, 177, 90, 252, 174, 94, 204, 25, 35, 175, 187, 191, 203, 79, 10, 253, 81, 34, 5, 116, 38, 217, 0, 105, 203, 190, 155, 113, 84, 207, 46, 207, 14, 157, 102, 77, 200, 179, 243, 14, 89, 103, 66, 164, 190, 3, 118, 42, 226, 165, 166, 90, 24, 207, 223, 177, 240, 131, 103, 214, 186, 151, 39, 153, 212, 123, 119, 93, 184, 103, 156, 154, 240, 242, 66, 200, 8, 172, 201, 13, 14, 250, 128, 250, 187, 176, 195, 103, 38, 67, 144, 244, 242, 29, 204, 176, 97, 183, 232, 66, 149, 190, 84, 167, 219, 209, 97, 252, 188, 241, 4, 140, 159, 78, 116, 28, 251, 9, 7, 31, 252, 199, 74, 120, 214, 175, 40, 178, 237, 36, 183, 205, 208, 123, 67, 55, 105, 233, 51, 249, 218, 105, 225, 100, 70, 139, 145, 150, 23, 0, 138, 56, 176, 139, 101, 13, 243, 222, 124, 123, 173, 223, 27, 159, 95, 168, 31, 39, 119, 16, 35, 71, 73, 26, 216, 202, 64, 208, 247, 45, 192, 119, 235, 27, 206, 152, 128, 22, 6, 220, 183, 141, 248, 154, 184, 112, 121, 137, 130, 211, 137, 24, 70, 196, 65, 131, 127, 67, 185, 156, 150, 126, 102, 164, 120, 229, 187, 195, 248, 4, 213, 6, 212, 7, 211, 239, 81, 149, 11, 222, 21, 206, 60, 215, 43, 34, 86, 196, 28, 82, 238, 136, 107, 112, 114, 25, 41, 72, 72, 97, 66, 139, 46, 27, 47, 236, 98, 48, 112, 117, 103, 159, 78, 151, 246, 33, 145, 215, 7, 163, 233, 106, 172, 114, 14, 195, 137, 35, 33, 172, 66, 147, 176, 92, 26, 16, 131, 219, 213, 133, 112, 166, 58, 208, 150, 137, 81, 173, 242, 179, 10, 207, 27, 134, 107, 222, 66, 193, 161, 174, 109, 134, 241, 21, 213, 246, 161, 239, 158, 134, 140, 252, 106, 164, 57, 244, 40, 188, 113, 184, 94, 234, 18, 221, 118, 23, 6, 216, 106, 205, 80, 253, 169, 44, 126, 188, 86, 148, 17, 196, 203, 71, 209, 61, 152, 85, 62, 175, 202, 217, 146, 244, 97, 225, 44, 247, 143, 91, 70, 35, 57, 139, 54, 57, 116, 38, 186, 118, 87, 103, 75, 177, 143, 89, 11, 226, 83, 185, 184, 141, 84, 108, 6, 48, 229, 155, 97, 49, 184, 31, 246, 176, 192, 154, 240, 239, 190, 145, 226, 241, 211, 41, 217, 80, 161, 111, 216, 64, 18, 246, 204, 16, 10, 140, 15, 176, 92, 249, 33, 67, 133, 144, 22, 210, 159, 38, 74, 173, 80, 142, 20, 227, 222, 229, 255, 242, 53, 237, 127, 164, 249, 251, 186, 105, 168, 88, 51, 234, 174, 84, 192, 122, 167, 97, 49, 61, 92, 98, 80, 103, 95, 145, 133, 4, 181, 128, 228, 8, 96, 82, 84, 120, 170, 78, 248, 159, 167, 148, 250, 219, 90, 12, 15, 137, 71, 79, 36, 28, 4, 152, 244, 110, 230, 10, 168, 118, 110, 192, 67, 131, 179, 163, 38, 148, 233, 38, 78, 21, 170, 224, 198, 198, 213, 34, 5, 31, 53, 104, 32, 119, 151, 114, 97, 101, 82, 137, 75, 45, 138, 205, 68, 23, 75, 222, 218, 110, 216, 135, 100, 7, 220, 222, 198, 110, 88, 86, 116, 219, 233, 138, 208, 239, 12, 58, 101, 9, 204, 184, 28, 158, 141, 131, 81, 181, 228, 27, 185, 81, 80, 173, 223, 149, 9, 215, 181, 236, 225, 9, 37, 87, 233, 240, 237, 174, 30, 29, 249, 138, 246, 25, 48, 234, 173, 3, 31, 195, 207, 175, 214, 185, 54, 161, 121, 154, 219, 185, 101, 248, 2, 178, 79, 15, 84, 119, 213, 129, 32, 201, 51, 168, 75, 166, 81, 116, 70, 147, 1, 151, 79, 25, 17, 180, 192, 115, 133, 76, 142, 62, 138, 16, 170, 231, 254, 121, 9, 61, 124, 232, 81, 200, 179, 79, 162, 130, 144, 65, 207, 98, 253, 109, 75, 123, 115, 231, 15, 215, 193, 169, 200, 251, 127, 214, 86, 243, 168, 219, 74, 160, 140, 86, 14, 104, 49, 172, 96, 220, 152, 40, 242, 135, 10, 37, 220, 49, 235, 169, 84, 160, 17, 120, 24, 171, 110, 1, 77, 32, 127, 155, 89, 30, 40, 94, 114, 24, 78, 178, 191, 49, 100, 9, 218, 179, 201, 3, 144, 215, 224, 70, 236, 109, 241, 229, 50, 172, 248, 253, 202, 163, 169, 108, 6, 8, 136, 64, 72, 161, 179, 72, 11, 12, 112, 142, 221, 161, 113, 252, 91, 229, 55, 102, 97, 71, 145, 55, 0, 11, 143, 37, 248, 112, 57, 106, 115, 112, 9, 68, 90, 117, 146, 223, 124, 35, 169, 129, 150, 173, 233, 67, 46, 37, 129, 237, 185, 88, 41, 78, 143, 37], - [148, 181, 103, 64, 223, 77, 216, 254, 69, 235, 46, 221, 89, 135, 44, 121, 94, 14, 21, 106, 239, 2, 112, 106, 254, 238, 233, 73, 34, 94, 82, 74, 180, 237, 252, 248, 178, 135, 54, 250, 95, 129, 184, 237, 63, 1, 140, 21, 72, 197, 222, 106, 139, 235, 122, 15, 109, 79, 93, 5, 240, 6, 219, 248, 220, 206, 146, 43, 250, 142, 168, 84, 171, 137, 166, 255, 27, 0, 122, 85, 67, 77, 82, 118, 240, 75, 219, 6, 142, 237, 67, 187, 249, 120, 100, 200, 18, 71, 116, 112, 117, 174, 118, 179, 105, 77, 80, 217, 44, 205, 6, 180, 231, 112, 120, 22, 51, 130, 80, 199, 102, 14, 236, 66, 48, 178, 133, 83, 251, 158, 44, 84, 196, 179, 59, 21, 247, 17, 74, 252, 104, 103, 177, 200, 70, 92, 33, 84, 3, 102, 226, 181, 162, 61, 113, 112, 222, 90, 235, 186, 109, 122, 24, 108, 173, 108, 10, 199, 162, 62, 217, 212, 77, 210, 153, 118, 200, 253, 53, 172, 17, 141, 199, 125, 165, 82, 138, 120, 79, 117, 37, 102, 191, 122, 50, 214, 89, 168, 37, 31, 81, 223, 16, 133, 80, 62, 161, 141, 6, 157, 245, 85, 234, 117, 193, 34, 120, 172, 180, 215, 127, 199, 222, 195, 199, 51, 53, 211, 221, 124, 147, 91, 39, 145, 157, 68, 201, 100, 194, 52, 93, 20, 175, 170, 45, 172, 227, 30, 153, 113, 181, 11, 72, 89, 143, 239, 244, 236, 249, 236, 45, 81, 47, 2, 80, 42, 164, 212, 136, 215, 68, 24, 222, 182, 200, 247, 171, 161, 65, 66, 217, 81, 92, 104, 199, 23, 64, 240, 196, 118, 149, 221, 5, 86, 27, 47, 244, 251, 245, 84, 38, 194, 27, 180, 83, 206, 236, 40, 184, 239, 12, 115, 15, 125, 128, 57, 143, 79, 25, 244, 162, 156, 114, 205, 93, 145, 222, 124, 71, 82, 127, 212, 116, 26, 68, 68, 131, 255, 64, 100, 66, 183, 173, 58, 137, 246, 94, 98, 224, 177, 186, 67, 107, 34, 144, 4, 67, 164, 141, 206, 50, 246, 91, 118, 133, 146, 7, 190, 214, 181, 91, 216, 208, 131, 104, 128, 123, 186, 223, 212, 127, 39, 253, 82, 143, 180, 255, 234, 215, 188, 116, 110, 188, 197, 195, 120, 67, 53, 48, 110, 154, 74, 82, 160, 185, 53, 172, 40, 181, 170, 28, 230, 225, 247, 191, 153, 196, 203, 89, 52, 211, 247, 35, 224, 25, 117, 221, 185, 195, 161, 168, 64, 147, 213, 54, 95, 87, 142, 9, 146, 152, 14, 93, 32, 244, 0, 89, 198, 236, 30, 232, 240, 84, 142, 248, 189, 33, 198, 131, 170, 153, 61, 30, 132, 70, 253, 124, 29, 10, 203, 47, 33, 226, 11, 32, 149, 48, 158, 133, 217, 118, 27, 72, 22, 80, 246, 223, 165, 218, 60, 143, 141, 48, 101, 7, 228, 84, 225, 223, 37, 203, 205, 145, 84, 133, 98, 197, 218, 2, 207, 132, 109, 28, 8, 205, 25, 45, 79, 82, 166, 99, 134, 214, 207, 254, 130, 71, 102, 115, 79, 65, 130, 150, 119, 170, 180, 191, 50, 108, 85, 69, 133, 177, 153, 93, 219, 90, 188, 127, 170, 165, 49, 144, 247, 89, 177, 156, 248, 165, 204, 111, 109, 0, 166, 194, 34, 176, 42, 16, 241, 53, 218, 124, 218, 249, 153, 221, 20, 156, 5, 139, 53, 97, 119, 49, 18, 252, 231, 47, 151, 12, 252, 76, 211, 172, 205, 3, 107, 5, 238, 158, 23, 107, 78, 122, 206, 160, 213, 195, 63, 235, 49, 44, 151, 20, 169, 1, 175, 247, 69, 24, 184, 154, 213, 120, 252, 35, 168, 230, 102, 154, 54, 139, 253, 167, 177, 241, 0, 170, 203, 197, 103, 144, 159, 161, 180, 213, 223, 12, 170, 119, 230, 179, 242, 239, 9, 227, 187, 252, 69, 221, 205, 18, 71, 201, 15, 241, 67, 51, 220, 135, 148, 119, 196, 62, 123, 202, 148, 32, 182, 90, 150, 129, 204, 189, 156, 201, 223, 179, 104, 27, 21, 175, 49, 11, 59, 66, 142, 233, 206, 77, 74, 223, 63, 191, 234, 167, 114, 73, 132, 53, 213, 229, 155, 213, 47, 112, 111, 57, 179, 182, 97, 35, 69, 247, 5, 11, 62, 38, 213, 213, 16, 73, 156, 215, 91, 32, 59, 213, 99, 187, 27, 66, 5, 30, 107, 150, 137, 101, 99, 32, 4, 31, 12, 231, 253, 148, 47, 104, 138, 0, 85, 126, 222, 58, 71, 42, 75, 40, 127, 123, 16, 36, 53, 228, 217, 188, 79, 165, 222, 99, 227, 176, 102, 5, 247, 217, 159, 194, 124, 93, 179, 27, 0, 158, 131, 217, 15, 32, 199, 88, 121, 198, 57, 86, 26, 70, 188, 140, 115, 227, 251, 85, 112, 39, 214, 91, 2, 87, 226, 191, 157, 254, 213, 158, 225, 125, 103, 243, 43, 180, 192, 185, 62, 219, 224, 147, 126, 40, 39, 226, 25, 221, 233, 209, 51, 136, 85, 37, 38, 26, 26, 124, 3, 103, 10, 166, 223, 49, 30, 145, 231, 153, 63, 244, 250, 140, 253, 112, 1, 30, 119, 24, 38, 117, 131, 174, 20, 166, 174, 238, 221, 200, 239, 171, 27, 186, 230, 189, 92, 16, 73, 170, 129, 80, 36, 153, 37, 56, 146, 240, 168, 175, 215, 95, 178, 119, 130, 130, 112, 170, 251, 212, 165, 90, 92, 230, 177, 37, 103, 55, 222, 101, 180, 88, 63, 140, 230, 249, 26, 10, 251, 40, 181, 97, 45, 139, 248, 69, 200, 229, 185, 72, 192, 41, 205, 187, 163, 188, 76, 32, 45, 98, 236, 97, 240, 227, 169, 194, 239, 59, 141, 192, 40, 205, 55, 37, 143, 127, 105, 161, 122, 5, 45, 208, 48, 147, 66, 213, 28, 189, 98, 99, 168, 91, 234, 224, 20, 29, 138, 196, 53, 185, 108, 90, 138, 217, 122, 155, 81, 221, 150, 76, 238, 73, 230, 4, 172, 153, 12, 119, 49, 186, 98, 194, 5, 32, 78, 99, 91, 219, 158, 0, 207, 99, 91, 212, 188, 158, 221, 119, 163, 123, 25, 177, 220, 106, 30, 4, 37, 8, 229, 59, 194, 206, 214, 247, 55, 78, 148, 209, 208, 181, 2, 93, 15, 19, 194, 25, 196, 128, 155, 217, 60, 47, 228, 103, 225, 227, 107, 144, 22, 233, 155, 213, 19, 85, 20, 82, 148, 81, 103, 132, 20, 233, 172, 172, 70, 150, 82, 209, 72, 89, 175, 190, 238, 79, 96, 170, 196, 110, 136, 141, 85, 235, 131, 171, 131, 97, 199, 118, 44, 148, 227, 7, 42, 121, 9, 23, 188, 100, 106, 220, 142, 83, 86, 111, 69, 24, 190, 73, 218, 95, 253, 220, 190, 145, 36, 69, 63, 204, 99, 152, 204, 63, 70, 85, 135, 165, 178, 65, 200, 1, 36, 199, 59, 140, 214, 23, 187, 105, 155, 93, 59, 190, 171, 97, 24, 84, 209, 184, 253, 235, 146, 149, 157, 221, 45, 235, 208, 62, 160, 128, 88, 16, 155, 67, 172, 249, 182, 173, 169, 122, 244, 225, 91, 199, 104, 121, 169, 44, 110, 177, 159, 150, 185, 147, 81, 95, 152, 31, 129, 71, 78, 67, 184, 200, 224, 217, 76, 239, 253, 188, 174, 149, 209, 200, 170, 29, 17, 159, 165, 182, 218, 192, 226, 74, 31, 138, 188, 24, 49, 147, 88, 107, 72, 64, 216, 239, 196, 236, 124, 159, 200, 255, 114, 171, 12, 242, 149, 201, 158, 45, 242, 242, 101, 41, 107, 5, 204, 44, 254, 117, 219, 76, 171, 141, 115, 245, 189, 22, 11, 216, 193, 38, 236, 33, 51, 251, 72, 17, 167, 213, 221, 210, 188, 229, 55, 93, 201, 101, 72, 147, 234, 78, 88, 149, 142, 218, 193, 216, 196, 63, 120, 37, 135, 102, 75, 220, 166, 115, 65, 253, 95, 175, 38, 14, 244, 209, 164, 75, 155, 49, 146, 199, 4, 74, 250, 212, 242, 180, 29, 138, 133, 11, 139, 165, 11, 45, 78, 116, 82, 160, 158, 209, 198, 158, 202, 26, 130, 44, 217, 22, 22, 12, 0, 54, 191, 78, 184, 124, 101, 249, 141, 222, 127, 138, 180, 168, 107, 37, 68, 6, 62, 56, 161, 33, 139, 234, 13, 29, 8, 48, 77, 41, 166, 233, 183, 67, 173, 87, 111, 113, 54, 157, 114, 47, 36, 25, 255, 54, 1, 19, 157, 118, 38, 158, 125, 110, 193, 94, 58, 52, 154, 146, 222, 221, 44, 182, 252, 143, 248, 160, 89, 218, 122, 125, 121, 8, 163, 28, 102, 116, 131, 245, 242, 141, 42, 115, 228, 69, 219, 56, 250, 119, 116, 130, 182, 173, 228, 182, 77, 89, 151, 130, 59, 255, 253, 92, 164, 157, 181, 207, 157, 139, 15, 4, 29, 204, 62, 130, 122, 227, 197, 235, 253, 212, 84, 5, 17, 170, 223, 66, 87, 46, 251, 130, 121, 149, 191, 133, 29, 203, 249, 79, 253, 138, 198, 217, 125, 57, 187, 216, 18, 21, 184, 201, 168, 97, 199, 99, 118, 24, 188, 129, 152, 180, 92, 107, 254, 102, 15, 180, 213, 70, 30, 198, 215, 229, 89, 46, 184, 50, 212, 115, 224, 57, 78, 147, 82, 115, 38, 6, 61, 187, 130, 216, 118, 54, 125, 56, 222, 235, 172, 12, 87, 244, 127, 211, 121, 1, 99, 73, 90, 229, 56, 46, 223, 163, 86, 157, 44, 37, 116, 237, 110, 121, 172, 230, 245, 131, 30, 93, 189, 228, 124, 102, 222, 109, 77, 37, 95, 244, 81, 64, 64, 147, 228, 142, 231, 171, 166, 16, 140, 100, 12, 244, 144, 134, 53, 247, 207, 3, 77, 108, 242, 211, 209, 242, 245, 159, 125, 189, 35, 68, 204, 152, 71, 156, 135, 245, 93, 42, 13, 0, 34, 14, 245, 86, 194, 147, 152, 157, 248, 233, 66, 15, 224, 41, 74, 38, 173, 68, 189, 171, 94, 89, 161, 171, 137, 157, 90, 154, 60, 75, 94, 46, 103, 24, 6, 178, 48, 249, 103, 158, 63, 48, 104, 249, 142, 255, 167, 20, 182, 181, 121, 164, 65, 43, 20, 208, 64, 137, 212, 151, 70, 231, 10, 139, 236, 221, 58, 50, 71, 81, 199, 51, 220, 29, 81, 154, 119, 166, 137, 251, 252, 237, 82, 76, 71, 191, 108, 16, 70, 169, 142, 196, 181, 252, 40, 106, 143, 90, 193, 153, 210, 199, 195, 75, 118, 186, 190, 191, 241, 157, 224, 104, 44, 105, 81, 31, 147, 31, 16, 97, 154, 168, 215, 226, 180, 172, 37, 221, 221, 177, 245, 150, 113, 234, 220, 133, 142, 162, 253, 18, 221, 101, 104, 50, 35, 199, 165, 67, 13, 106, 231, 51, 246, 27, 221, 65, 36, 80, 193, 188, 1, 40, 100, 30, 178, 112, 68, 13, 164, 94, 78, 246, 135, 230, 225, 245, 245, 79, 162, 206, 168, 206, 78, 76, 0, 87, 163, 39, 83, 34, 13, 47, 71, 107, 149, 93, 26, 3, 155, 210, 198, 208, 37, 209, 181, 4, 1, 47, 237, 28, 122, 126, 173, 84, 217, 74, 225, 96, 226, 6, 248, 204, 120, 4, 157, 143, 120, 76, 184, 139, 76, 234, 187, 11, 43, 235, 218, 248, 199, 162, 44, 76, 251, 198, 248, 58, 35, 89, 59, 111, 171, 17, 174, 77, 114, 214, 255, 95, 73, 170, 168, 44, 187, 31, 111, 88, 233, 91, 182, 43, 135, 217, 212, 241, 79, 202, 151, 42, 53, 147, 182, 214, 153, 195, 33, 3, 216, 196, 67, 168, 207, 179, 116, 149, 18, 79, 221, 60, 184, 63, 46, 139, 189, 48, 80, 6, 22, 98, 119, 225, 88, 16, 138, 5, 193, 241, 130, 25, 30, 206, 221, 138, 239, 200, 171, 6, 10, 10, 120, 216, 217, 131, 155, 70, 82, 155, 76, 216, 146, 16, 251, 108, 108, 203, 93, 36, 122, 91, 32, 99, 207, 49, 34, 175, 215, 239, 25, 205, 254, 129, 47, 117, 168, 9, 10, 123, 100, 101, 142, 213, 59, 37, 196, 235, 252, 220, 234, 52, 68, 19, 181, 37, 89, 52, 21, 77, 137, 110, 253, 133, 155, 225, 49, 37, 4, 200, 236, 189, 170, 137, 173, 118, 142, 176, 0, 3, 14, 157, 188, 138, 131, 190, 72, 72, 156, 234, 179, 57, 137, 250, 52, 21, 7, 172, 174, 199, 0, 2, 57, 240, 60, 54, 111, 225, 3, 151, 135, 7, 103, 38, 192, 157, 2, 21, 102, 16, 180, 207, 147, 14, 26, 44, 158, 75, 152, 38, 202, 160, 54, 173, 195, 99, 238, 152, 28, 161, 221, 180, 61, 222, 184, 109, 222, 40, 31, 226, 53, 198, 200, 65, 219, 111, 47, 71, 51, 74, 54, 231, 196, 193, 120, 107, 96, 44, 160, 98, 98, 223, 62, 87, 220, 30, 2, 54, 65, 9, 110, 188, 165, 72, 21, 24, 120, 103, 200, 54, 150, 20, 13, 62, 187, 166, 227, 149, 5, 154, 45, 10, 250, 6, 125, 171, 28, 183, 34, 213, 198, 158, 247, 248, 226, 135, 191, 31, 88, 146, 179, 143, 228, 60, 167, 119, 0, 153, 209, 241, 202, 203, 38, 150, 75, 211, 4, 207, 45, 171, 0, 248, 74, 183, 121, 215, 99, 208, 3, 153, 177, 90, 116, 70, 184, 190, 188, 92, 133, 10, 187, 73, 52, 151, 199, 12, 165, 46, 17, 232, 138, 35, 101, 69, 133, 184, 197, 17, 194, 111, 149, 26, 18, 217, 190, 16, 247, 38, 242, 53, 232, 176, 4, 68, 105, 241, 111, 79, 214, 15, 173, 77, 126, 149, 132, 183, 208, 255, 69, 145, 147, 117, 202, 165, 222, 44, 59, 192, 51, 207, 183, 239, 38, 246, 229, 12, 27, 151, 151, 222, 210, 135, 205, 200, 253, 109, 240, 41, 254, 142, 62, 215, 195, 199, 106, 113, 83, 55, 43, 6, 254, 2, 102, 177, 84, 219, 165, 246, 204, 96, 0, 219, 247, 248, 130, 231, 39, 169, 177, 76, 124, 194, 55, 17, 228, 38, 233, 235, 11, 146, 139, 173, 16, 72, 72, 198, 87, 16, 61, 70, 41, 46, 62, 119, 33, 222, 66, 193, 238, 4, 209, 78, 161, 83, 97, 123, 182, 69, 72, 217, 126, 5, 169, 81, 175, 43, 63, 117, 129, 122, 239, 156, 174, 50, 252, 125, 102, 134, 73, 93, 202, 86, 121, 45, 39, 248, 38, 187, 199, 107, 198, 40, 198, 121, 204, 14, 37, 144, 132, 241, 170, 157, 174, 103, 69, 200, 72, 108, 172, 28, 166, 181, 96, 116, 1, 26, 83, 64, 132, 106, 0, 194, 237, 129, 112, 83, 193, 170, 3, 72, 16, 38, 31, 34, 64, 21, 151, 61, 219, 185, 229, 174, 59, 61, 105, 5, 11, 32, 198, 9, 78, 119, 19, 62, 147, 169, 109, 29, 145, 46, 17, 49, 34, 10, 178, 228, 131, 220, 75, 132, 125, 21, 51, 41, 65, 118, 65, 111, 41, 75, 9, 140, 45, 110, 65, 8, 240, 59, 148, 59, 112, 48, 2, 164, 238, 124, 207, 221, 127, 168, 175, 136, 39, 84, 203, 252, 131, 44, 167, 159, 20, 14, 237, 27, 233, 64, 61, 180, 203, 244, 32, 31, 225, 125, 194, 172, 220, 184, 118, 238, 35, 85, 1, 52, 87, 182, 106, 26, 201, 181, 70, 149, 152, 143, 232, 219, 62, 138, 154, 170, 79, 185, 254, 41, 240, 253, 9, 12, 40, 73, 130, 108, 170, 15, 36, 183, 160, 215, 185, 70, 66, 116, 174, 7, 158, 122, 51, 112, 247, 23, 168, 187, 245, 124, 16, 57, 62, 217, 104, 108, 131, 154, 240, 241, 144, 252, 30, 185, 129, 43, 237, 236, 250, 224, 86, 90, 192, 42, 149, 48, 40, 60, 148, 102, 229, 227, 79, 251, 243, 38, 33, 91, 200, 170, 145, 24, 19, 72, 69, 132, 158, 57, 244, 117, 232, 90, 147, 208, 149, 247, 187, 236, 71, 128, 247, 194, 168, 103, 87, 28, 195, 208, 30, 217, 69, 117, 186, 227, 149, 140, 171, 134, 127, 159, 47, 172, 104, 157, 216, 206, 35, 136, 167, 63, 156, 75, 230, 177, 194, 24, 123, 51, 66, 52, 249, 5, 129, 249, 214, 214, 8, 232, 236, 59, 102, 219, 28, 246, 151, 11, 156, 200, 47, 220, 67, 119, 194, 216, 150, 245, 9, 253, 176, 175, 154, 2, 195, 98, 94, 137, 32, 241, 118, 107, 54, 157, 49, 145, 46, 0, 227, 84, 29, 141, 29, 131, 251, 5, 116, 182, 3, 6, 64, 110, 210, 69, 211, 218, 83, 51, 242, 244, 77, 130, 215, 241, 36, 217, 101, 184, 28, 180, 189, 247, 60, 30, 179, 43, 128, 178, 24, 133, 222, 134, 59, 168, 129, 34, 26, 175, 156, 125, 207, 240, 69, 38, 188, 116, 222, 2, 244, 5, 5, 181, 88, 200, 109, 43, 156, 245, 247, 181, 157, 202, 158, 119, 124, 219, 235, 178, 141, 162, 163, 115, 7, 220, 177, 228, 22, 18, 217, 218, 122, 29, 170, 0, 16, 66, 235, 174, 69, 137, 156, 75, 114, 207, 22, 63, 21, 225, 22, 228, 202, 148, 244, 58, 239, 95, 96, 117, 41, 43, 69, 138, 40, 59, 117, 185, 234, 51, 59, 111, 219, 129, 174, 139, 148, 112, 1, 95, 36, 54, 127, 98, 154, 73, 59, 130, 96, 245, 214, 80, 149, 99, 185, 132, 207, 92, 181, 156, 0, 190, 31, 237, 31, 231, 79, 61, 244, 234, 97, 248, 83, 38, 127, 220, 146, 157, 54, 253, 125, 143, 15, 141, 247, 108, 187, 184, 34, 34, 20, 12, 80, 146, 195, 248, 89, 25, 126, 60, 59, 79, 118, 245, 196, 91, 107, 129, 89, 98, 75, 38, 192, 142, 244, 50, 127, 108, 138, 74, 248, 58, 78, 242, 196, 153, 126, 158, 206, 48, 179, 8, 11, 242, 114, 89, 179, 246, 44, 15, 155, 192, 109, 83, 149, 224, 44, 252, 151, 155, 180, 31, 123, 167, 139, 233, 225, 202, 64, 112, 227, 77, 77, 90, 62, 58, 134, 119, 115, 210, 135, 121, 94, 123, 108, 59, 191, 184, 161, 31, 217, 194, 116, 39, 178, 168, 226, 135, 94, 204, 141, 158, 174, 239, 21, 73, 124, 118, 100, 15, 111, 67, 155, 110, 11, 187, 166, 69, 179, 92, 56, 183, 35, 206, 170, 16, 116, 65, 66, 29, 34, 89, 116, 14, 75, 179, 225, 224, 28, 32, 161, 37, 210, 49, 215, 22, 176, 190, 105, 163, 189, 117, 243, 22, 110, 121, 53, 84, 197, 88, 109, 155, 69, 154, 225, 222, 186, 194, 103, 221, 175, 182, 217, 199, 198, 251, 81, 237, 22, 158, 212, 184, 150, 242, 176, 142, 55, 36, 102, 171, 229, 233, 43, 243, 76, 174, 92, 164, 60, 145, 1, 223, 76, 15, 75, 165, 128, 239, 43, 101, 32, 241, 82, 168, 213, 95, 225, 5, 8, 147, 211, 3, 171, 169, 132, 78, 228, 66, 82, 215, 197, 130, 231, 132, 50, 174, 152, 98, 236, 231, 180, 91, 234, 56, 56, 74, 106, 114, 211, 60, 224, 207, 237, 21, 56, 189, 35, 108, 188, 60, 216, 96, 90, 227, 32, 120, 64, 234, 211, 153, 7, 14, 254, 245, 83, 186, 249, 233, 53, 176, 124, 77, 49, 142, 68, 35, 1, 114, 172, 102, 2, 152, 217, 23, 54, 76, 253, 170, 204, 245, 121, 69, 18, 220, 114, 43, 65, 125, 240, 187, 117, 89, 88, 240, 238, 136, 170, 183, 93, 35, 51, 158, 101, 86, 147, 94, 184, 98, 116, 9, 237, 36, 106, 171, 149, 196, 82, 45, 170, 141, 253, 19, 175, 224, 56, 231, 186, 110, 245, 152, 185, 118, 0, 146, 175, 180, 123, 173, 49, 52, 1, 177, 203, 165, 126, 201, 86, 49, 211, 157, 229, 26, 156, 74, 142, 133, 215, 88, 23, 149, 137, 102, 14, 145, 199, 56, 76, 221, 198, 19, 69, 64, 114, 188, 63, 199, 114, 54, 90, 187, 18, 85, 200, 125, 204, 42, 6, 245, 191, 151, 236, 119, 53, 144, 244, 162, 190, 72, 63, 121, 46, 242, 72, 92, 14, 224, 22, 81, 189, 87, 73, 52, 178, 201, 222, 25, 217, 106, 62, 159, 190, 154, 140, 124, 159, 139, 199, 193, 90, 43, 228, 112, 129, 212, 23, 70, 180, 102, 241, 142, 51, 134, 135, 95, 129, 180, 61, 177, 65, 232, 158, 63, 203, 194, 82, 241, 114, 47, 139, 152, 66, 142, 168, 65, 76, 233, 160, 20, 44, 202, 62, 13, 173, 183, 238, 149, 75, 75, 186, 32, 224, 199, 182, 71, 208, 148, 193, 90, 9, 211, 151, 241, 86, 111, 89, 84, 208, 22, 223, 128, 130, 193, 98, 10, 86, 28, 96, 85, 224, 202, 200, 78, 189, 228, 122, 98, 50, 80, 120, 191, 70, 99, 138, 24, 240, 17, 161, 172, 66, 170, 234, 157, 222, 41, 238, 168, 129, 227, 13, 200, 139, 240, 166, 127, 91, 37, 175, 188, 39, 65, 135, 181, 167, 141, 35, 210, 44, 36, 20, 161, 119, 229, 243, 71, 128, 207, 58, 67, 20, 69, 28, 117, 196, 8, 178, 40, 44, 148, 52, 181, 159, 111, 19, 114, 1, 27, 118, 246, 155, 183, 68, 141, 123, 86, 221, 33, 54, 115, 217, 58, 244, 187, 237, 237, 58, 187, 34, 58, 5, 132, 154, 125, 136, 220, 100, 85, 100, 248, 9, 134, 196, 26, 130, 142, 108, 228, 117, 11, 19, 78, 5, 97, 173, 176, 99, 19, 129, 221, 164, 95, 146, 229, 223, 143, 24, 124, 83, 54, 232, 199, 254, 187, 23, 28, 221, 118, 211, 2, 185, 227, 236, 50, 143, 136, 160, 233, 136, 126, 63, 233, 243, 26, 99, 165, 67, 116, 63, 75, 76, 150, 190, 51, 16, 87, 122, 253, 31, 59, 181, 91, 95, 167, 175, 24, 51, 140, 94, 80, 18, 141, 255, 160, 159, 161, 95, 247, 110, 22, 226, 147, 69, 54, 45, 48, 188, 61, 46, 119, 108, 104, 65, 153, 133, 178, 128, 3, 55, 97, 167, 245, 214, 255, 0, 244, 145, 25, 186, 236, 168, 77, 81, 48, 22, 46, 195, 11, 97, 105, 6, 114, 91, 167, 242, 123, 251, 12, 229, 176, 166, 19, 31, 165, 51, 94, 247, 245, 241, 1, 155, 210, 167, 56, 212, 165, 244, 178, 27, 65, 150, 143, 119, 169, 225, 25, 209, 191, 216, 51, 95, 164, 44, 207, 63, 180, 101, 183, 142, 1, 53, 208, 108, 193, 123, 129, 146, 0, 213, 89, 25, 178, 137, 97, 0, 91, 158, 124, 23, 250, 151, 167, 30, 35, 22, 114, 77, 56, 93, 209, 119, 144, 95, 235, 125, 177, 52, 146, 233, 200, 243, 105, 71, 116, 114, 65, 65, 44, 124, 101, 19, 180, 72, 57, 202, 20, 114, 45, 216, 108, 52, 4, 77, 215, 209, 233, 118, 10, 54, 137, 169, 74, 171, 112, 222, 75, 77, 164, 40, 179, 251, 171, 100, 184, 161, 246, 76, 228, 86, 24, 146, 117, 108, 229, 135, 35, 135, 180, 139, 89, 255, 222, 132, 85, 68, 52, 56, 9, 2, 99, 189, 116, 13, 15, 136, 152, 2, 170, 242, 243, 21, 14, 35, 206, 36, 27, 46, 176, 37, 77, 233, 240, 157, 130, 93, 227, 193, 185, 250, 3, 232, 10, 77, 223, 249, 195, 126, 157, 67, 22, 55, 52, 228, 148, 186, 95, 70, 56, 253, 69, 61, 156, 173, 255, 129, 182, 132, 180, 79, 212, 23, 121, 88, 66, 252, 114, 252, 242, 193, 73, 234, 78, 109, 1, 37, 37, 131, 193, 115, 243, 232, 73, 149, 95, 85, 228, 188, 145, 213, 168, 2, 129, 186, 99, 142, 88, 69, 127, 145, 26, 130, 232, 13, 182, 0, 183, 173, 113, 186, 243, 211, 116, 16, 99, 36, 115, 221, 166, 199, 62, 8, 101, 209, 164, 78, 254, 14, 172, 66, 103, 70, 187, 122, 148, 47, 128, 30, 20, 82, 9, 225, 166, 81, 69, 183, 246, 52, 205, 124, 204, 178, 150, 14, 97, 233, 96, 153, 207, 50, 71, 104, 35, 63, 164, 178, 202, 123, 132, 175, 223, 178, 39, 57, 132, 217, 53, 167, 96, 166, 105, 124, 2, 29, 39, 191, 44, 223, 22, 128, 157, 143, 225, 165, 19, 91, 73, 157, 123, 66, 96, 219, 126, 181, 131, 67, 185, 110, 208, 228, 80, 51, 117, 69, 236, 185, 124, 46, 88, 178, 28, 221, 101, 54, 101, 117, 151, 213, 210, 65, 185, 56, 56, 112, 135, 3, 37, 133, 156, 7, 60, 194, 137, 71, 192, 153, 203, 108, 181, 47, 53, 82, 222, 0, 65, 244, 152, 16, 92, 37, 143, 95, 62, 140, 166, 144, 31, 53, 172, 19, 109, 139, 63, 134, 205, 125, 87, 200, 243, 222, 191, 206, 193, 160, 142, 48, 74, 29, 209, 176, 125, 95, 182, 92, 247, 159, 145, 94, 167, 211, 24, 229, 197, 82, 97, 159, 206, 85, 60, 104, 78, 182, 129, 214, 111, 21, 68, 15, 88, 81, 79, 191, 160, 28, 15, 184, 59, 41, 171, 146, 198, 126, 104, 101, 69, 42, 185, 21, 165, 61, 9, 32, 235, 168, 193, 129, 213, 85, 122, 100, 100, 107, 140, 3, 141, 125, 78, 168, 159, 203, 42, 234, 203, 152, 44, 129, 29, 244, 3, 58, 100, 209, 68, 179, 148, 23, 182, 214, 246, 109, 253, 100, 84, 244, 57, 130, 112, 252, 72, 96, 105, 194, 61, 159, 130, 247, 120, 208, 33, 234, 197, 200, 90, 136, 146, 169, 198, 189, 23, 99, 243, 252, 196, 141, 242, 56, 125, 129, 3, 134, 156, 13, 36, 129, 155, 184, 246, 64, 133, 55, 169, 235, 93, 204, 45, 58, 181, 132, 109, 9, 155, 135, 166, 161, 40, 27, 242, 162, 229, 194, 146, 9, 60, 41, 91, 157, 182, 241, 34, 66, 79, 243, 14, 41, 103, 198, 228, 42, 49, 239, 134, 194, 155, 35, 179, 112, 138, 6, 56, 173, 27, 248, 173, 255, 253, 177, 142, 40, 11, 219, 3, 115, 62, 247, 170, 55, 0, 26, 221, 24, 33, 44, 192, 87, 226, 227, 197, 146, 20, 55, 221, 206, 99, 62, 197, 105, 207, 28, 43, 167, 150, 119, 119, 134, 180, 35, 51, 61, 101, 29, 245, 129, 207, 65, 139, 202, 79, 25, 215, 83, 135, 70, 55, 197, 31, 168, 151, 149, 178, 231, 99, 229, 104, 207, 254, 65, 246, 63, 14, 207, 45, 209, 196, 7, 243, 6, 246, 149, 37, 133, 217, 212, 134, 163, 42, 20, 202, 194, 212, 231, 20, 75, 83, 206, 6, 68, 248, 16, 23, 33, 194, 58, 94, 236, 131, 97, 83, 228, 232, 155, 255, 199, 41, 236, 87, 244, 126, 123, 139, 22, 175, 134, 127, 66, 83, 24, 244, 209, 222, 87, 230, 34, 191, 4, 135, 246, 162, 10, 193, 213, 171, 0, 94, 252, 11, 13, 19, 232, 91, 8, 126, 113, 21, 74, 248, 143, 71, 135, 107, 207, 130, 172, 31, 71, 143, 38, 55, 102, 4, 33, 122, 92, 74, 59, 145, 52, 197, 195, 237, 58, 191, 91, 3, 209, 169, 203, 58, 38, 143, 4, 31, 134, 121, 160, 212, 193, 78, 6, 61, 188, 136, 120, 179, 116, 42, 206, 241, 82, 53, 101, 79, 171, 43, 53, 65, 73, 67, 20, 237, 61, 170, 244, 175, 140, 203, 121, 92, 145, 225, 105, 155, 4, 2, 80, 149, 123, 15, 78, 225, 233, 181, 80, 42, 244, 176, 21, 195, 133, 49, 118, 163, 76, 240, 237, 96, 64, 77, 121, 68, 124, 201, 242, 199, 255, 139, 174, 109, 9, 103, 198, 89, 2, 44, 199, 248, 135, 1, 214, 72, 110, 251, 167, 243, 232, 43, 43, 50, 197, 138, 94, 106, 70, 147, 69, 67, 255, 25, 45, 47, 44, 162, 98, 138, 7, 112, 38, 36, 47, 198, 236, 128, 60, 232, 206, 52, 34, 168, 198, 200, 21, 12, 73, 175, 198, 159, 213, 159, 164, 116, 180, 155, 28, 220, 138, 26, 223, 69, 60, 224, 148, 182, 90, 189, 193, 71, 20, 146, 237, 186, 44, 174, 186, 252, 39, 246, 138, 230, 53, 47, 103, 40, 23, 73, 209, 124, 184, 198, 20, 177, 89, 35, 210, 83, 216, 110, 221, 154, 114, 6, 54, 16, 42, 128, 226, 73, 21, 142, 49, 211, 233, 217, 252, 86, 7, 251, 193, 106, 142, 250, 19, 215, 194, 175, 52, 114, 127, 134, 11, 79, 127, 15, 131, 135, 109, 74, 198, 250, 46, 26, 116, 154, 244, 180, 105, 98, 226, 233, 141, 185, 96, 123, 121, 230, 164, 237, 50, 182, 212, 159, 123, 65, 128, 22, 42, 156, 16, 38, 98, 250, 146, 202, 188, 202, 116, 226, 241, 33, 96, 203, 254, 254, 18, 13, 157, 158, 86, 14, 37, 170, 70, 90, 221, 54, 13, 34, 179, 70, 229, 210, 115, 110, 239, 237, 251, 200, 189, 234, 248, 201, 161, 224, 60, 14, 130, 192, 12, 145, 245, 37, 138, 152, 16, 185, 214, 245, 127, 232, 80, 185, 238, 22, 241, 165, 136, 238, 122, 188, 249, 247, 77, 187, 60, 80, 45, 98, 127, 31, 46, 76, 37, 59, 216, 12, 79, 42, 15, 84, 110, 128, 82, 110, 216, 52, 87, 17, 12, 207, 61, 21, 183, 221, 77, 129, 95, 53, 20, 97, 100, 63, 200, 228, 237, 174, 189, 238, 150, 10, 138, 29, 111, 199, 130, 25, 69, 23, 53, 63, 28, 211, 247, 174, 167, 6, 106, 128, 49, 159, 132, 37, 75, 58, 153, 219, 93, 229, 225, 14, 252, 28, 195, 234, 128, 8, 175, 225, 245, 59, 185, 70, 195, 134, 222, 219, 154, 231, 108, 194, 203, 123, 216, 154, 29, 173, 1, 60, 220, 87, 84, 222, 37, 188, 4, 206, 100, 81, 122, 63, 55, 244, 77, 199, 95, 58, 130, 122, 35, 140, 117, 72, 98, 63, 206, 134, 209, 248, 253, 97, 208, 200, 189, 158, 194, 173, 120, 138, 115, 49, 0, 172, 201, 103, 132, 160, 112, 79, 69, 57, 166, 220, 183, 175, 147, 132, 86, 24, 12, 90, 157, 96, 72, 26, 15, 136, 7, 157, 127, 123, 105, 227, 178, 233, 12, 85, 159, 189, 70, 207, 137, 162, 14, 58, 32, 125, 101, 26, 169, 96, 234, 96, 60, 110, 133, 151, 23, 66, 179, 136, 15, 52, 218, 208, 107, 172, 112, 25, 252, 208, 54, 130, 192, 66, 152, 59, 133, 21, 98, 114, 0, 216, 200, 73, 101, 109, 65, 222, 252, 25, 8, 78, 46, 206, 90, 185, 71, 199, 140, 222, 48, 125, 253, 101, 198, 126, 195, 180, 166, 145, 237, 239, 101, 92, 55, 18, 148, 6, 70, 134, 206, 49, 84, 184, 224, 8, 22, 254, 145, 127, 133, 34, 97, 98, 119, 69, 162, 215, 190, 239, 151, 172, 32, 235, 153, 62, 71, 181, 229, 175, 253, 108, 151, 148, 173, 120, 118, 161, 213, 157, 196, 72, 186, 178, 175, 54, 83, 81, 189, 200, 118, 206, 8, 108, 33, 16, 20, 194, 147, 152, 248, 168, 149, 116, 124, 238, 90, 5, 46, 34, 91, 162, 77, 97, 104, 41, 88, 132, 241, 85, 94, 27, 25, 130, 233, 19, 103, 207, 109, 21, 88, 212, 57, 37, 82, 118, 248, 94, 230, 69, 195, 21, 9, 17, 82, 7, 112, 145, 229, 86, 113, 199, 169, 216, 52, 89, 165, 86, 138, 28, 150, 255, 250, 198, 58, 109, 94, 219, 78, 196, 174, 100, 178, 82, 31, 66, 73, 99, 251, 30, 211, 102, 49, 239, 16, 58, 49, 140, 10, 188, 91, 251, 184, 0, 149, 225, 152, 27, 1, 145, 100, 222, 96, 17, 11, 147, 27, 12, 183, 172, 122, 176, 37, 140, 35, 7, 240, 106, 41, 116, 75, 77, 131, 101, 29, 63, 7, 156, 42, 124, 150, 92, 68, 184, 45, 31, 138, 180, 120, 160, 25, 139, 177, 1, 140, 154, 251, 74, 6, 165, 37, 58, 157, 79, 246, 78, 132, 128, 231, 36, 220, 55, 155, 133, 154, 179, 179, 42, 93, 50, 35, 119, 34, 39, 182, 219, 136, 220, 184, 47, 233, 71, 37, 22, 8, 33, 212, 159, 232, 240, 234, 217, 214, 140, 206, 7, 39, 151, 63, 119, 21, 46, 114, 60, 81, 246, 186, 9, 48, 95, 148, 253, 234, 148, 196, 71, 105, 135, 16, 53, 3, 59, 195, 206, 167, 16, 204, 17, 120, 153, 9, 179, 33, 159, 81, 146, 207, 101, 40, 72, 227, 63, 246, 84, 210, 48, 62, 170, 79, 247, 78, 160, 123, 62, 19, 135, 91, 3, 45, 30, 224, 129, 220, 214, 208, 176, 110, 131, 109, 247, 19, 205, 0, 162, 6, 5, 162, 217, 107, 113, 253, 13, 107, 156, 169, 94, 212, 33, 19, 124, 189, 175, 170, 234, 181, 189, 119, 24, 212, 8, 82, 15, 196, 176, 83, 143, 198, 236, 183, 111, 89, 99, 86, 145, 218, 182, 207, 214, 126, 127, 128, 22, 194, 219, 24, 37, 165, 209, 89, 24, 36, 2, 168, 139, 168, 72, 32, 112, 224, 18, 142, 103, 124, 241, 235, 145, 179, 222, 194, 169, 154, 32, 45, 126, 67, 41, 184, 16, 70, 173, 72, 14, 215, 71, 61, 209, 255, 120, 156, 170, 164, 24, 79, 50, 122, 206, 56, 187, 45, 188, 128, 143, 8, 117, 91, 113, 137, 208, 6, 99, 26, 218, 226, 15, 143, 36, 94, 65, 149, 22, 120, 48, 50, 130, 232, 37, 75, 156, 124, 111, 46, 102, 134, 69, 76, 206, 22, 82, 95, 239, 101, 180, 8, 244, 51, 166, 231, 166, 181, 52, 208, 102, 50, 35, 111, 177, 129, 252, 204, 233, 10, 234, 28, 78, 16, 133, 202, 141, 91, 246, 141, 205, 182, 59, 214, 132, 119, 120, 247, 129, 166, 26, 50, 249, 244, 96, 190, 223, 201, 146, 166, 238, 118, 206, 106, 107, 21, 186, 139, 84, 38, 23, 230, 9, 13, 148, 51, 127, 233, 20, 42, 85, 47, 45, 177, 83, 166, 231, 179, 253, 81, 143, 154, 245, 1, 40, 39, 130, 202, 78, 90, 7, 93, 62, 155, 226, 203, 65, 180, 229, 75, 29, 99, 232, 1, 31, 252, 140, 144, 139, 42, 174, 84, 230, 5, 234, 33, 84, 43, 203, 20, 239, 141, 241, 215, 134, 81, 113, 218, 28, 96, 132, 39, 55, 62, 9, 96, 125, 153, 7, 185, 114, 90, 18, 4, 248, 6, 210, 56, 244, 121, 158, 236, 129, 212, 199, 2, 175, 199, 210, 172, 58, 40, 69, 181, 10, 8, 247, 137, 44, 102, 222, 144, 92, 246, 160, 69, 185, 121, 109, 102, 175, 179, 44, 51, 43, 84, 118, 214, 155, 169, 4, 244, 80, 182, 239, 206, 68, 31, 115, 246, 239, 52, 101, 32, 72, 69, 31, 159, 61, 167, 68, 93, 34, 125, 110, 251, 136, 12, 156, 132, 226, 97, 254, 23, 22, 255, 135, 203, 103, 33, 65, 209, 195, 167, 233, 5, 240, 179, 16, 136, 18, 221, 20, 209, 206, 109, 162, 223, 242, 142, 159, 228, 177, 10, 38, 244, 213, 85, 62, 239, 177, 90, 57, 159, 72, 135, 64, 229, 53, 14, 108, 92, 21, 44, 3, 88, 50, 122, 86, 198, 102, 140, 126, 170, 204, 187, 140, 166, 156, 52, 129, 218, 189, 149, 27, 254, 142, 213, 83, 116, 84, 212, 43, 65, 240, 34, 234, 237, 13, 213, 3, 43, 132, 247, 137, 106, 239, 236, 133, 156, 18, 153, 247, 70, 44, 113, 255, 65, 188, 61, 113, 1, 138, 62, 104, 195, 201, 169, 30, 193, 242, 255, 81, 252, 239, 128, 66, 252, 208, 19, 188, 136, 58, 144, 28, 88, 3, 76, 117, 129, 191, 76, 234, 177, 75, 118, 22, 168, 249, 76, 34, 42, 190, 35, 202, 233, 208, 1, 104, 213, 73, 91, 229, 42, 44, 150, 14, 122, 216, 164, 237, 200, 151, 250, 200, 241, 223, 88, 72, 51, 147, 109, 170, 26, 249, 251, 108, 19, 250, 45, 31, 35, 151, 14, 28, 4, 92, 4, 177, 252, 213, 149, 225, 209, 197, 207, 62, 231, 104, 255, 187, 30, 253, 206, 222, 177, 41, 18, 62, 38, 254, 132, 211, 152, 242, 76, 110, 172, 198, 91, 122, 4, 129, 198, 134, 123, 67, 78, 127, 202, 89, 91, 108, 200, 138, 105, 127, 50, 108, 66, 111, 197, 199, 8, 38, 56, 26, 111, 242, 225, 19, 34, 47, 62, 7, 251, 231, 55, 123, 17, 165, 82, 31, 85, 92, 152, 135, 130, 124, 13, 220, 241, 238, 116, 207, 221, 83, 72, 204, 235, 44, 197, 119, 161, 254, 71, 72, 9, 143, 207, 143, 196, 224, 135, 19, 202, 112, 208, 123, 87, 190, 174, 91, 194, 129, 120, 186, 99, 36, 5, 160, 60, 144, 96, 229, 209, 211, 223, 2, 243, 192, 142, 61, 203, 75, 62, 174, 63, 31, 146, 203, 102, 150, 129, 205, 59, 19, 194, 216, 76, 184, 245, 70, 76, 102, 192, 233, 134, 98, 87, 150, 54, 135, 197, 196, 76, 137, 17, 39, 34, 54, 46, 176, 162, 229, 86, 99, 39, 75, 6, 113, 179, 166, 76, 102, 198, 45, 65, 147, 8, 55, 151, 53, 44, 250, 100, 170, 178, 120, 239, 228, 113, 224, 66, 41, 230, 238, 97, 245, 90, 59, 1, 163, 68, 126, 18, 194, 35, 147, 219, 205, 201, 155, 69, 144, 172, 188, 203, 115, 31, 44, 245, 20, 20, 105, 240, 112, 211, 248, 31, 225, 126, 62, 57, 89, 213, 166, 69, 94, 124, 183, 89, 26, 89, 24, 86, 26, 33, 81, 165, 118, 126, 6, 216, 158, 174, 65, 45, 134, 181, 171, 51, 27, 195, 40, 127, 237, 150, 167, 144, 177, 183, 0, 47, 115, 250, 229, 61, 46, 175, 145, 154, 211, 57, 238, 186, 7, 61, 211, 43, 29, 82, 222, 181, 254, 58, 3, 77, 39, 239, 124, 177, 67, 111, 247, 142, 119, 170, 213, 99, 209, 58, 72, 166, 196, 242, 30, 87, 190, 92, 3, 155, 113, 156, 121, 17, 219, 247, 119, 128, 200, 0, 172, 38, 83, 188, 20, 244, 167, 110, 247, 14, 198, 112, 205, 217, 46, 26, 120, 73, 173, 172, 154, 26, 113, 97, 97, 191, 121, 51, 133, 250, 29, 29, 99, 192, 124, 204, 134, 250, 57, 23, 202, 54, 195, 214, 153, 175, 29, 151, 210, 76, 234, 232, 76, 100, 89, 243, 4, 217, 50, 42, 90, 141, 93, 218, 190, 182, 226, 80, 159, 115, 240, 183, 208, 82, 154, 239, 33, 241, 221, 75, 126, 230, 66, 42, 129, 76, 63, 38, 89, 107, 132, 34, 234, 150, 250, 143, 120, 237, 80, 56, 224, 229, 121, 19, 68, 24, 25, 175, 134, 240, 85, 169, 144, 229, 168, 14, 177, 250, 69, 229, 171, 138, 116, 114, 24, 173, 107, 3, 186, 119, 175, 136, 97, 154, 61, 23, 170, 86, 173, 201, 75, 138, 181, 64, 88, 155, 191, 43, 165, 229, 143, 61, 175, 64, 215, 147, 126, 51, 3, 22, 110, 168, 192, 166, 157, 164, 0, 161, 29, 245, 177, 86, 231, 110, 66, 118, 182, 159, 159, 169, 236, 240, 147, 157, 18, 19, 101, 227, 0, 147, 125, 1, 90, 255, 169, 61, 128, 43, 121, 3, 66, 185, 207, 115, 238, 150, 244, 48, 182, 242, 237, 192, 195, 177, 132, 214, 116, 9, 86, 87, 69, 250, 8, 236, 66, 3, 85, 253, 45, 109, 253, 49, 203, 177, 215, 30, 205, 186, 131, 177, 4, 159, 230, 20, 171, 81, 86, 110, 15, 162, 93, 37, 22, 252, 75, 222, 102, 85, 40, 119, 127, 101, 13, 205, 27, 17, 114, 148, 67, 118, 66, 217, 223, 113, 3, 171, 104, 83, 163, 96, 10, 188, 110, 145, 100, 207, 84, 175, 98, 254, 187, 117, 165, 91, 204, 235, 75, 72, 21, 177, 4, 0, 50, 91, 71, 142, 107, 83, 176, 204, 83, 6, 88, 154, 167, 67, 141, 231, 163, 22, 161, 215, 217, 75, 20, 40, 248, 133, 138, 132, 206, 48, 50, 81, 199, 14, 12, 33, 162, 222, 28, 250, 81, 61, 135, 135, 55, 14, 129, 219, 148, 149, 29, 113, 124, 72, 29, 82, 54, 138, 196, 92, 15, 210, 74, 224, 238, 59, 25, 28, 225, 202, 250, 81, 147, 190, 248, 39, 112, 184, 41, 150, 191, 99, 36, 159, 128, 215, 191, 35, 138, 149, 220, 110, 150, 47, 238, 60, 155, 204, 228, 71, 72, 179, 188, 145, 148, 162, 165, 235, 81, 18, 75, 192, 170, 13, 129, 129, 207, 45, 231, 98, 28, 36, 148, 157, 250, 65, 115, 162, 129, 120, 96, 227, 179, 88, 137, 91, 51, 168, 222, 87, 190, 155, 172, 131, 44, 219, 214, 37, 126, 237, 242, 106, 6, 240, 211, 153, 140, 120, 226, 232, 2, 161, 112, 34, 236, 102, 68, 233, 251, 69, 227, 185, 177, 218, 127, 160, 112, 36, 200, 158, 94, 57, 142, 78, 199, 146, 221, 175, 127, 255, 253, 211, 137, 6, 169, 229, 151, 143, 167, 59, 97, 242, 189, 101, 23, 231, 86, 49, 160, 99, 102, 68, 245, 243, 98, 210, 141, 122, 120, 157, 232, 220, 85, 103, 24, 65, 110, 32, 36, 130, 138, 70, 191, 221, 132, 190, 80, 162, 191, 53, 251, 207, 232, 18, 220, 59, 66, 35, 211, 75, 224, 14, 125, 189, 103, 28, 194, 245, 156, 252, 19, 125, 133, 190, 93, 1, 164, 165, 245, 214, 24, 152, 104, 76, 57, 171, 87, 20, 114, 34, 26, 13, 13, 188, 57, 240, 117, 186, 170, 118, 102, 121, 220, 134, 9, 173, 86, 73, 142, 62, 198, 40, 233, 235, 172, 236, 91, 188, 66, 231, 0, 9, 46, 176, 40, 109, 221, 110, 88, 52, 60, 57, 58, 116, 131, 92, 242, 105, 49, 95, 228, 89, 97, 175, 71, 86, 84, 27, 134, 53, 29, 13, 103, 153, 76, 149, 126, 113, 199, 158, 1, 176, 226, 48, 194, 161, 213, 148, 18, 120, 226, 112, 21, 198, 101, 44, 242, 148, 147, 77, 40, 21, 37, 222, 75, 3, 48, 152, 160, 77, 215, 87, 49, 65, 152, 144, 91, 93, 238, 119, 45, 255, 156, 79, 117, 158, 202, 24, 67, 17, 109, 249, 53, 99, 132, 48, 9, 136, 169, 78, 57, 143, 80, 3, 174, 213, 66, 217, 186, 211, 43, 162, 193, 31, 225, 52, 34, 61, 45, 7, 216, 154, 88, 111, 216, 228, 124, 77, 33, 127, 60, 157, 58, 143, 5, 217, 196, 140, 19, 77, 217, 27, 250, 100, 88, 24, 192, 60, 29, 230, 96, 6, 83, 143, 12, 249, 174, 55, 31, 134, 147, 40, 193, 123, 70, 203, 110, 133, 124, 198, 120, 36, 199, 91, 66, 159, 9, 7, 18, 236, 235, 195, 43, 138, 145, 223, 182, 185, 213, 47, 10, 31, 57, 193, 244, 43, 207, 228, 136, 215, 75, 71, 135, 130, 175, 104, 132, 71, 181, 182, 110, 95, 23, 80, 190, 176, 123, 6, 95, 232, 87, 112, 63, 115, 159, 85, 69, 187, 159, 202, 178, 166, 99, 203, 91, 17, 114, 69, 132, 236, 214, 180, 9, 165, 158, 61, 100, 207, 92, 243, 155, 213, 196, 88, 166, 210, 94, 195, 150, 107, 32, 134, 102, 224, 159, 12, 157, 247, 237, 69, 216, 68, 227, 9, 50, 142, 87, 5, 255, 16, 154, 39, 205, 198, 37, 129, 99, 9, 50, 108, 170, 23, 136, 245, 87, 179, 141, 230, 116, 166, 87, 7, 78, 65, 88, 196, 151, 89, 253, 120, 39, 61, 172, 233, 35, 2, 214, 65, 206, 39, 223, 193, 250, 175, 240, 0, 167, 207, 245, 167, 61, 135, 179, 197, 104, 67, 202, 231, 77, 39, 102, 197, 70, 204, 157, 154, 138, 103, 97, 234, 68, 250, 86, 244, 184, 160, 176, 136, 97, 137, 235, 42, 121, 82, 173, 114, 178, 99, 196, 193, 245, 141, 176, 208, 254, 225, 239, 67, 74, 117, 145, 226, 232, 44, 30, 160, 215, 165, 12, 32, 104, 116, 210, 44, 249, 34, 203, 91, 199, 120, 26, 0, 138, 138, 28, 52, 164, 128, 25, 164, 48, 186, 40, 52, 155, 38, 82, 57, 150, 166, 231, 204, 170, 126, 201, 98, 154, 16, 92, 173, 144, 147, 190, 214, 201, 221, 118, 94, 37, 120, 70, 5, 15, 192, 81, 254, 29, 102, 188, 0, 70, 55, 115, 43, 40, 227, 182, 217, 27, 7, 5, 127, 44, 193, 99, 33, 138, 219, 240, 155, 107, 184, 48, 161, 66, 236, 19, 2, 214, 27, 70, 101, 143, 8, 80, 176, 239, 42, 98, 184, 8, 171, 82, 222, 71, 208, 115, 121, 51, 4, 170, 41, 187, 174, 228, 66, 152, 181, 251, 45, 47, 167, 237, 124, 114, 84, 45, 234, 106, 242, 195, 223, 205, 96, 20, 137, 187, 13, 228, 112, 180, 66, 98, 19, 237, 97, 255, 151, 153, 241, 245, 22, 140, 164, 49, 143, 91, 41, 167, 140, 67, 73, 57, 153, 12, 144, 195, 192, 227, 232, 116, 144, 226, 117, 68, 97, 38, 196, 182, 220, 84, 64, 82, 152, 141, 163, 140, 236, 21, 147, 30, 49, 126, 204, 37, 30, 88, 105, 46, 201, 59, 201, 149, 81, 228, 143, 188, 33, 106, 66, 164, 140, 24, 182, 91, 9, 8, 40, 77, 25, 33, 104, 80, 124, 219, 49, 88, 24, 233, 46, 225, 66, 168, 222, 72, 231, 247, 20, 33, 217, 213, 0, 135, 209, 171, 91, 221, 191, 81, 141, 252, 243, 201, 172, 144, 227, 237, 189, 196, 234, 43, 173, 156, 151, 170, 254, 114, 159, 195, 232, 243, 105, 94, 198, 71, 221, 140, 219, 40, 37, 21, 39, 230, 39, 41, 137, 85, 149, 21, 157, 44, 109, 230, 142, 197, 228, 107, 160, 72, 237, 197, 50, 15, 120, 157, 157, 183, 231, 56, 136, 244, 83, 106, 14, 101, 156, 46, 18, 10, 111, 129, 240, 152, 215, 39, 184, 124, 52, 243, 109, 244, 163, 100, 157, 180, 108, 43, 250, 246, 233, 127, 100, 27, 136, 40, 34, 173, 119, 180, 81, 240, 36, 234, 65, 162, 1, 53, 85, 198, 5, 163, 212, 121, 227, 27, 3, 127, 218, 224, 122, 197, 54, 123, 242, 134, 224, 235, 15, 153, 64, 194, 136, 239, 44, 1, 162, 41, 93, 42, 137, 239, 193, 15, 238, 99, 85, 104, 28, 86, 64, 49, 201, 51, 14, 174, 237, 104, 131, 119, 218, 226, 120, 199, 162, 161, 22, 215, 249, 62, 185, 106, 84, 30, 203, 216, 206, 72, 40, 114, 154, 9, 122, 82, 176, 249, 33, 125, 171, 181, 37, 61, 139, 199, 84, 187, 56, 189, 165, 147, 186, 168, 109, 137, 13, 146, 227, 194, 77, 157, 45, 90, 111, 144, 236, 117, 165, 145, 9, 127, 171, 194, 196, 232, 51, 225, 170, 239, 46, 152, 61, 48, 215, 49, 167, 12, 13, 247, 211, 119, 125, 41, 156, 236, 71, 42, 191, 156, 134, 83, 73, 236, 105, 178, 222, 196, 102, 179, 4, 135, 24, 172, 138, 134, 130, 206, 20, 173, 208, 210, 57, 155, 249, 245, 96, 66, 213, 58, 146, 23, 157, 9, 153, 254, 60, 115, 101, 66, 32, 181, 229, 207, 225, 77, 231, 172, 136, 148, 59, 180, 5, 198, 154, 77, 202, 116, 10, 229, 157, 119, 28, 28, 59, 251, 139, 209, 15, 71, 83, 65, 243, 234, 47, 227, 18, 167, 207, 157, 33, 212, 244, 211, 233, 227, 66, 116, 60, 215, 4, 40, 145, 26, 228, 193, 58, 83, 244, 83, 232, 55, 98, 196, 228, 190, 40, 57, 40, 216, 106, 93, 21, 144, 217, 182, 167, 120, 32, 110, 77, 85, 152, 233, 47, 49, 76, 53, 125, 183, 222, 234, 204, 1, 144, 137, 142, 135, 197, 51, 103, 181, 134, 223, 228, 79, 202, 190, 191, 139, 38, 229, 27, 214, 89, 200, 180, 190, 119, 208, 193, 154, 156, 133, 148, 195, 230, 131, 224, 188, 44, 23, 200, 140, 150, 195, 13, 195, 36, 109, 103, 10, 42, 66, 43, 35, 62, 167, 82, 63, 133, 227, 30, 156, 178, 85, 247, 11, 117, 244, 27, 93, 212, 50, 17, 73, 194, 179, 179, 29, 197, 71, 193, 137, 122, 27, 19, 115, 92, 132, 102, 159, 175, 119, 114, 89, 51, 35, 176, 95, 40, 106, 187, 244, 12, 239, 249, 87, 29, 248, 148, 103, 106, 58, 190, 91, 229, 130, 167, 18, 131, 248, 29, 227, 213, 104, 181, 211, 142, 110, 222, 111, 159, 35, 150, 138, 168, 111, 34, 68, 42, 57, 183, 232, 75, 246, 88, 222, 106, 23, 246, 68, 174, 232, 158, 241, 41, 92, 138, 204, 179, 255, 5, 116, 253, 8, 255, 45, 85, 76, 149, 201, 227, 178, 121, 69, 41, 153, 41, 203, 160, 207, 143, 239, 60, 16, 158, 193, 44, 215, 28, 43, 216, 156, 213, 245, 82, 230, 6, 54, 30, 255, 93, 168, 5, 59, 66, 54, 26, 13, 200, 230, 154, 233, 58, 71, 240, 245, 226, 137, 62, 65, 4, 128, 144, 158, 10, 120, 104, 113, 47, 22, 241, 120, 196, 49, 98, 223, 47, 223, 149, 66, 238, 245, 111, 211, 229, 45, 252, 218, 237, 226, 59, 218, 57, 23, 41, 53, 27, 29, 27, 98, 131, 124, 36, 189, 254, 27, 129, 253, 127, 96, 133, 169, 2, 212, 239, 232, 110, 241, 56, 168, 123, 148, 113, 194, 79, 67, 61, 139, 134, 120, 58, 225, 145, 12, 7, 159, 12, 241, 185, 167, 200, 180, 55, 103, 222, 148, 12, 210, 253, 73, 136, 175, 164, 227, 85, 45, 243, 136, 141, 46, 100, 114, 201, 198, 254, 56, 109, 84, 203, 32, 199, 61, 161, 101, 62, 94, 25, 239, 207, 102, 32, 13, 66, 134, 174, 107, 115, 131, 248, 239, 248, 195, 215, 20, 91, 21, 169, 226, 150, 136, 189, 23, 246, 195, 41, 230, 160, 182, 103, 226, 162, 101, 150, 236, 177, 61, 41, 122, 99, 163, 197, 35, 243, 147, 189, 77, 20, 180, 163, 56, 74, 201, 184, 39, 172, 37, 21, 192, 53, 102, 224, 20, 231, 122, 235, 56, 204, 40, 165, 3, 145, 190, 113, 95, 110, 45, 161, 106, 42, 63, 90, 116, 145, 12, 5, 107, 36, 172, 32, 124, 191, 246, 238, 162, 214, 136, 85, 241, 126, 114, 24, 96, 62, 244, 130, 55, 237, 143, 111, 113, 235, 132, 62, 210, 64, 239, 204, 247, 21, 25, 175, 203, 160, 202, 253, 197, 243, 248, 233, 164, 122, 60, 214, 1, 125, 52, 205, 47, 211, 72, 143, 25, 95, 98, 203, 69, 75, 168, 186, 90, 100, 86, 247, 20, 155, 59, 212, 116, 60, 230, 116, 127, 106, 145, 232, 197, 48, 87, 202, 173, 158, 194, 73, 172, 17, 32, 121, 171, 45, 188, 32, 129, 114, 121, 183, 217, 5, 154, 50, 195, 188, 151, 230, 185, 139, 232, 69, 190, 186, 53, 211, 90, 105, 116, 195, 159, 61, 64, 2, 107, 49, 150, 207, 180, 247, 135, 168, 254, 68, 218, 168, 14, 102, 35, 229, 43, 35, 152, 220, 161, 42, 63, 6, 95, 163, 104, 58, 6, 176, 252, 213, 84, 56, 250, 242, 114, 100, 186, 103, 100, 81, 203, 1, 189, 237, 53, 50, 150, 175, 30, 83, 84, 82, 190, 219, 13, 237, 49, 231, 248, 203, 87, 117, 29, 71, 49, 187, 254, 165, 163, 165, 109, 140, 13, 58, 76, 7, 143, 185, 171, 195, 58, 38, 126, 75, 35, 93, 178, 75, 76, 202, 68, 90, 196, 135, 71, 103, 89, 105, 200, 188, 242, 148, 222, 42, 118, 111, 203, 238, 14, 250, 222, 61, 195, 239, 244, 127, 226, 185, 165, 203, 31, 221, 217, 109, 172, 177, 183, 158, 163, 218, 107, 60, 197, 102, 11, 190, 50, 23, 78, 220, 168, 136, 50, 130, 154, 228, 237, 176, 244, 5, 153, 41, 209, 58, 255, 161, 171, 194, 154, 72, 112, 58, 6, 130, 128, 241, 15, 221, 113, 112, 76, 140, 72, 3, 208, 231, 226, 108, 189, 206, 45, 170, 153, 171, 228, 31, 62, 69, 159, 243, 20, 226, 33, 245, 98, 73, 61, 159, 110, 128, 188, 141, 185, 130, 209, 243, 251, 89, 29, 178, 235, 60, 79, 113, 14, 74, 21, 205, 241, 12, 234, 45, 68, 145, 114, 117, 7, 207, 170, 21, 93, 240, 206, 204, 241, 15, 161, 243, 121, 255, 191, 131, 60, 45, 110, 111, 106, 113, 156, 51, 210, 193, 200, 21, 215, 60, 9, 58, 156, 248, 49, 82, 2, 203, 112, 63, 177, 237, 73, 178, 201, 20, 113, 92, 91, 11, 1, 40, 238, 238, 39, 146, 72, 5, 142, 202, 243, 71, 97, 147, 158, 227, 77, 91, 183, 181, 160, 238, 196, 203, 168, 37, 242, 182, 59, 36, 167, 207, 191, 136, 244, 109, 207, 226, 173, 100, 205, 93, 49, 208, 231, 122, 151, 122, 66, 35, 195, 194, 71, 91, 76, 212, 48, 87, 12, 213, 132, 193, 147, 164, 152, 138, 67, 203, 164, 140, 165, 112, 28, 177, 189, 178, 19, 147, 193, 165, 148, 212, 87, 74, 22, 89, 222, 92, 3, 239, 186, 79, 18, 217, 196, 215, 45, 19, 124, 213, 166, 17, 66, 127, 144, 128, 120, 220, 155, 248, 218, 208, 37, 182, 217, 40, 228, 83, 8, 120, 249, 242, 186, 238, 149, 185, 253, 162, 190, 174, 250, 218, 73, 101, 38, 53, 206, 109, 8, 175, 85, 127, 221, 219, 115, 133, 67, 40, 230, 146, 156, 47, 161, 185, 57, 10, 34, 204, 241, 43, 44, 75, 35, 162, 41, 190, 210, 19, 30, 192, 196, 101, 3, 97, 55, 166, 241, 105, 149, 48, 182, 80, 186, 75, 134, 234, 168, 84, 76, 2, 126, 164, 132, 172, 110, 168, 170, 138, 246, 32, 153, 227, 23, 164, 70, 50, 47, 39, 68, 134, 104, 65, 98, 192, 123, 34, 152, 246, 209, 109, 15, 31, 185, 204, 28, 190, 188, 105, 246, 139, 174, 14, 168, 189, 151, 227, 238, 146, 90, 104, 41, 34, 249, 184, 55, 15, 195, 64, 112, 236, 190, 96, 2, 173, 29, 161, 30, 235, 238, 161, 176, 191, 52, 50, 179, 7, 14, 209, 224, 31, 193, 134, 151, 165, 12, 106, 158, 244, 251, 123, 176, 29, 23, 163, 147, 26, 15, 168, 216, 105, 23, 216, 42, 106, 246, 222, 6, 78, 197, 184, 212, 159, 29, 247, 254, 228, 133, 32, 15, 229, 10, 37, 29, 9, 47, 156, 34, 123, 49, 152, 203, 74, 17, 224, 17, 238, 142, 118, 9, 16, 1, 21, 245, 171, 62, 53, 164, 110, 193, 230, 20, 243, 118, 194, 13, 214, 134, 18, 162, 210, 254, 178, 221, 92, 24, 163, 173, 206, 252, 7, 140, 173, 143, 67, 225, 19, 182, 49, 56, 126, 131, 65, 80, 221, 97, 252, 26, 5, 118, 49, 188, 245, 10, 186, 60, 66, 175, 81, 24, 170, 188, 58, 129, 31, 229, 139, 59, 177, 81, 9, 72, 121, 48, 78, 146, 179, 166, 124, 111, 115, 246, 216, 173, 43, 137, 138, 237, 57, 243, 49, 198, 119, 95, 173, 105, 137, 34, 247, 83, 157, 83, 212, 116, 90, 238, 8, 110, 210, 212, 64, 161, 254, 164, 196, 121, 98, 101, 22, 248, 67, 76, 228, 85, 63, 40, 229, 27, 101, 182, 19, 48, 71, 158, 254, 111, 249, 18, 170, 208, 182, 163, 188, 96, 190, 21, 181, 145, 51, 226, 179, 163, 145, 238, 45, 11, 183, 144, 16, 99, 95, 88, 118, 162, 54, 175, 66, 12, 95, 113, 11, 54, 199, 252, 70, 18, 150, 30, 207, 1, 169, 151, 110, 41, 7, 103, 39, 101, 82, 118, 176, 180, 239, 240, 189, 210, 46, 197, 126, 7, 79, 6, 113, 196, 21, 120, 208, 51, 39, 253, 103, 20, 143, 47, 160, 117, 29, 37, 230, 63, 226, 239, 245, 161, 180, 220, 243, 225, 49, 229, 85, 64, 142, 97, 213, 105, 114, 253, 57, 41, 210, 154, 179, 152, 156, 200, 115, 183, 36, 185, 32, 63, 173, 212, 238, 141, 29, 117, 219, 82, 64, 65, 147, 134, 88, 23, 151, 7, 141, 15, 115, 201, 181, 231, 11, 18, 250, 209, 232, 6, 18, 252, 129, 243, 50, 44, 42, 176, 138, 191, 201, 186, 238, 169, 99, 72, 59, 187, 62, 209, 173, 247, 138, 59, 64, 184, 8, 61, 145, 134, 156, 33, 184, 77, 126, 45, 62, 62, 128, 202, 191, 74, 148, 109, 165, 75, 143, 201, 71, 252, 106, 38, 137, 234, 225, 30, 81, 209, 231, 170, 157, 228, 159, 63, 217, 147, 49, 48, 82, 180, 41, 89, 241, 190, 144, 232, 13, 194, 146, 209, 11, 58, 168, 109, 32, 171, 70, 125, 36, 30, 17, 121, 197, 199, 151, 226, 46, 134, 75, 151, 132, 144, 136, 17, 193, 230, 149, 35, 106, 31, 115, 233, 41, 204, 213, 22, 230, 220, 181, 68, 93, 38, 50, 201, 125, 200, 49, 18, 52, 76, 224, 76, 160, 95, 77, 54, 112, 9, 35, 214, 119, 94, 26, 187, 214, 20, 111, 247, 68, 44, 217, 202, 67, 27, 51, 196, 119, 19, 52, 17, 128, 64, 186, 41, 65, 151, 140, 216, 166, 72, 47, 57, 65, 97, 190, 49, 240, 232, 4, 62, 18, 233, 151, 10, 40, 142, 189, 75, 152, 89, 137, 45, 229, 218, 15, 13, 179, 106, 205, 96, 78, 182, 186, 106, 176, 215, 29, 48, 47, 238, 239, 92, 56, 243, 35, 37, 82, 14, 24, 105, 191, 138, 142, 25, 4, 1, 10, 208, 210, 80, 143, 89, 55, 60, 198, 4, 201, 45, 85, 67, 173, 228, 88, 33, 240, 159, 232, 146, 25, 217, 124, 132, 59, 65, 11, 63, 130, 162, 115, 60, 35, 46, 162, 21, 159, 76, 24, 129, 255, 84, 126, 222, 181, 1, 52, 180, 64, 129, 33, 84, 239, 13, 134, 41, 145, 66, 166, 243, 92, 248, 255, 172, 239, 207, 213, 169, 109, 124, 138, 157, 124, 189, 71, 137, 145, 119, 208, 15, 176, 22, 31, 44, 251, 148, 106, 54, 115, 251, 100, 91, 255, 160, 137, 241, 177, 160, 81, 38, 213, 114, 22, 165, 40, 120, 211, 122, 14, 103, 35, 81, 15, 168, 131, 145, 82, 109, 198, 255, 148, 150, 247, 73, 158, 64, 69, 63, 30, 232, 52, 210, 197, 52, 16, 201, 103, 120, 174, 6, 44, 0, 120, 123, 118, 168, 47, 49, 49, 20, 193, 196, 164, 188, 180, 216, 131, 190, 24, 205, 131, 230, 37, 142, 15, 189, 77, 49, 175, 255, 132, 187, 151, 166, 39, 40, 128, 81, 193, 48, 31, 9, 245, 54, 121, 100, 231, 205, 187, 12, 124, 116, 35, 203, 148, 178, 182, 222, 166, 131, 151, 113, 120, 146, 227, 70, 117, 200, 176, 122, 147, 58, 53, 243, 255, 30, 160, 52, 86, 131, 136, 198, 82, 214, 25, 61, 1, 154, 234, 74, 172, 1, 104, 60, 120, 250, 143, 200, 7, 217, 244, 216, 45, 233, 191, 94, 236, 210, 177, 81, 235, 233, 75, 69, 67, 70, 122, 47, 164, 9, 141, 66, 4, 22, 166, 179, 202, 208, 14, 224, 93, 150, 108, 175, 156, 221, 138, 94, 172, 192, 204, 50, 78, 74, 22, 18, 86, 32, 244, 20, 32, 188, 32, 230, 138, 215, 235, 248, 169, 177, 157, 91, 115, 226, 18, 234, 5, 148, 217, 237, 101, 53, 136, 114, 126, 229, 68], - [198, 216, 8, 83, 27, 253, 60, 224, 251, 85, 93, 77, 69, 45, 154, 161, 78, 188, 209, 242, 69, 203, 160, 59, 76, 95, 1, 218, 95, 226, 125, 61, 200, 61, 104, 126, 215, 116, 88, 112, 118, 209, 163, 172, 10, 211, 10, 137, 13, 230, 226, 128, 109, 255, 59, 216, 108, 79, 180, 84, 240, 157, 21, 6, 18, 31, 109, 158, 50, 16, 130, 3, 151, 251, 154, 24, 19, 156, 255, 47, 201, 153, 240, 126, 102, 59, 120, 179, 77, 108, 230, 76, 169, 68, 141, 127, 38, 101, 156, 129, 134, 176, 4, 204, 90, 251, 74, 233, 189, 100, 34, 47, 81, 66, 45, 104, 106, 242, 170, 36, 58, 104, 125, 253, 186, 200, 222, 50, 95, 245, 223, 96, 153, 132, 177, 166, 209, 0, 4, 109, 224, 110, 244, 129, 106, 240, 158, 80, 97, 253, 135, 109, 126, 233, 217, 172, 113, 81, 81, 140, 204, 36, 214, 172, 1, 7, 36, 96, 27, 197, 202, 4, 80, 57, 219, 18, 225, 178, 212, 35, 131, 65, 96, 200, 63, 206, 17, 112, 212, 23, 10, 18, 236, 168, 45, 124, 54, 47, 58, 178, 93, 241, 234, 25, 40, 144, 70, 176, 185, 66, 141, 225, 221, 12, 106, 19, 184, 255, 164, 149, 173, 105, 78, 11, 205, 141, 235, 173, 226, 125, 190, 16, 18, 101, 30, 239, 200, 54, 74, 223, 109, 214, 52, 115, 221, 86, 42, 136, 170, 129, 148, 63, 210, 125, 108, 206, 26, 192, 116, 159, 102, 247, 249, 165, 214, 187, 247, 1, 165, 159, 219, 116, 200, 131, 118, 213, 38, 133, 160, 123, 111, 207, 64, 231, 24, 211, 125, 108, 149, 38, 53, 216, 157, 181, 223, 136, 238, 49, 181, 207, 7, 217, 131, 169, 48, 31, 8, 78, 37, 204, 94, 120, 156, 245, 189, 45, 231, 128, 150, 52, 125, 22, 157, 236, 76, 135, 58, 141, 125, 253, 164, 208, 124, 111, 247, 240, 6, 123, 207, 65, 71, 19, 146, 153, 251, 40, 46, 118, 235, 61, 90, 253, 160, 28, 182, 123, 217, 223, 78, 127, 176, 0, 48, 185, 33, 225, 228, 34, 176, 241, 157, 213, 10, 45, 157, 74, 221, 210, 116, 13, 90, 34, 178, 202, 146, 225, 248, 144, 55, 128, 47, 32, 115, 3, 90, 29, 74, 99, 56, 55, 59, 49, 118, 43, 4, 56, 157, 242, 93, 57, 108, 192, 81, 105, 109, 162, 222, 42, 182, 23, 82, 137, 255, 99, 153, 52, 224, 192, 100, 198, 184, 242, 66, 39, 167, 14, 138, 32, 182, 73, 105, 90, 47, 12, 232, 233, 55, 183, 119, 78, 50, 99, 191, 252, 214, 90, 93, 26, 188, 38, 240, 187, 220, 188, 166, 111, 196, 49, 11, 145, 180, 108, 75, 88, 230, 181, 221, 35, 176, 222, 145, 248, 201, 129, 85, 61, 45, 73, 111, 224, 41, 208, 244, 114, 5, 123, 215, 173, 71, 95, 142, 139, 8, 60, 116, 48, 234, 118, 159, 65, 235, 57, 175, 155, 119, 254, 154, 105, 100, 165, 201, 219, 240, 21, 38, 44, 67, 53, 29, 195, 83, 168, 245, 153, 94, 239, 241, 164, 248, 137, 125, 206, 159, 255, 108, 83, 78, 114, 19, 122, 100, 102, 171, 232, 192, 116, 248, 152, 74, 209, 141, 95, 200, 112, 235, 61, 130, 42, 129, 242, 109, 228, 236, 245, 231, 91, 206, 255, 207, 190, 194, 188, 157, 147, 229, 38, 83, 185, 82, 138, 232, 36, 216, 107, 158, 15, 59, 161, 12, 50, 89, 45, 144, 129, 103, 131, 8, 94, 176, 217, 234, 209, 51, 100, 126, 185, 227, 199, 182, 61, 131, 206, 65, 153, 244, 75, 30, 127, 34, 193, 178, 65, 246, 15, 141, 121, 200, 12, 54, 21, 204, 95, 65, 232, 114, 200, 193, 172, 105, 215, 92, 54, 229, 206, 191, 124, 22, 33, 181, 144, 167, 186, 150, 205, 188, 147, 91, 120, 73, 119, 241, 130, 73, 36, 121, 104, 189, 63, 164, 186, 9, 133, 240, 138, 198, 12, 159, 100, 108, 161, 138, 225, 40, 5, 147, 230, 64, 174, 125, 109, 85, 32, 191, 103, 98, 54, 51, 197, 194, 16, 36, 99, 198, 106, 120, 55, 5, 233, 137, 158, 123, 154, 40, 47, 134, 203, 40, 222, 127, 113, 182, 132, 228, 67, 123, 149, 145, 204, 207, 194, 65, 48, 25, 72, 247, 105, 197, 164, 90, 230, 139, 111, 111, 181, 109, 76, 95, 93, 11, 55, 216, 60, 83, 111, 255, 92, 104, 191, 205, 246, 159, 189, 194, 173, 174, 121, 71, 118, 174, 84, 142, 219, 96, 92, 241, 42, 116, 177, 167, 34, 227, 253, 12, 173, 233, 161, 236, 165, 19, 187, 232, 205, 190, 158, 101, 79, 81, 47, 27, 58, 68, 93, 5, 37, 244, 168, 246, 34, 146, 182, 61, 248, 181, 6, 253, 76, 62, 67, 240, 150, 225, 29, 32, 160, 144, 216, 165, 86, 54, 161, 96, 219, 221, 82, 162, 3, 229, 64, 237, 93, 173, 85, 172, 25, 123, 89, 94, 41, 198, 234, 212, 17, 198, 5, 242, 103, 241, 202, 12, 173, 193, 51, 24, 51, 35, 47, 179, 24, 195, 59, 242, 8, 35, 43, 226, 180, 247, 177, 225, 0, 159, 171, 98, 78, 244, 241, 130, 125, 159, 102, 51, 100, 140, 235, 182, 236, 218, 154, 83, 163, 225, 103, 231, 12, 53, 94, 51, 249, 226, 50, 21, 200, 135, 58, 74, 197, 165, 78, 106, 176, 52, 209, 108, 206, 252, 16, 172, 12, 63, 26, 117, 83, 5, 203, 38, 252, 236, 49, 203, 153, 8, 36, 76, 126, 234, 62, 125, 206, 105, 234, 112, 207, 204, 31, 49, 72, 103, 61, 95, 230, 182, 163, 109, 233, 92, 82, 222, 22, 172, 221, 148, 102, 46, 93, 217, 107, 57, 62, 237, 241, 88, 237, 80, 3, 59, 148, 89, 133, 1, 49, 37, 191, 248, 128, 139, 182, 104, 222, 238, 1, 113, 1, 211, 140, 129, 66, 87, 123, 229, 39, 189, 199, 200, 222, 95, 174, 110, 211, 58, 237, 138, 104, 185, 170, 157, 173, 211, 9, 228, 9, 229, 0, 94, 5, 9, 142, 253, 194, 150, 151, 249, 90, 191, 203, 100, 163, 218, 223, 75, 73, 149, 114, 75, 119, 60, 70, 28, 152, 112, 85, 127, 219, 169, 51, 207, 246, 246, 178, 31, 195, 243, 37, 215, 143, 251, 100, 178, 7, 101, 167, 223, 180, 245, 75, 158, 140, 91, 151, 91, 135, 30, 77, 230, 75, 25, 192, 104, 117, 90, 242, 1, 53, 11, 221, 110, 87, 10, 18, 9, 177, 138, 246, 198, 160, 251, 13, 86, 193, 33, 217, 78, 41, 181, 170, 92, 48, 227, 32, 100, 22, 101, 30, 110, 234, 218, 21, 81, 161, 28, 26, 165, 235, 215, 230, 215, 55, 232, 154, 30, 97, 12, 9, 76, 163, 237, 92, 62, 201, 61, 229, 237, 85, 209, 70, 202, 86, 131, 238, 247, 150, 102, 67, 141, 174, 35, 205, 182, 13, 219, 16, 127, 173, 112, 72, 116, 23, 42, 255, 226, 123, 178, 34, 138, 146, 177, 234, 222, 101, 248, 53, 46, 32, 45, 253, 234, 11, 53, 68, 188, 173, 67, 114, 187, 34, 65, 213, 173, 27, 159, 133, 36, 12, 158, 106, 87, 29, 254, 105, 14, 161, 224, 212, 145, 83, 183, 132, 7, 225, 13, 253, 78, 83, 51, 49, 151, 136, 222, 164, 96, 207, 41, 101, 204, 183, 117, 200, 14, 209, 162, 43, 154, 189, 237, 22, 230, 61, 195, 152, 50, 214, 227, 114, 85, 108, 128, 63, 42, 100, 13, 35, 82, 157, 20, 79, 225, 134, 12, 4, 137, 95, 248, 127, 134, 214, 163, 122, 77, 168, 167, 98, 118, 99, 66, 83, 21, 218, 126, 237, 220, 35, 209, 71, 120, 41, 71, 139, 65, 119, 91, 185, 118, 54, 203, 222, 151, 53, 216, 211, 255, 151, 243, 153, 110, 29, 97, 144, 235, 180, 159, 206, 67, 148, 102, 197, 17, 169, 179, 41, 219, 75, 171, 35, 14, 42, 115, 100, 180, 162, 88, 0, 220, 21, 208, 169, 16, 204, 142, 135, 47, 72, 118, 6, 162, 175, 133, 50, 147, 3, 204, 237, 51, 144, 122, 177, 107, 198, 207, 30, 224, 204, 223, 215, 64, 0, 207, 137, 222, 231, 185, 34, 92, 177, 64, 55, 118, 73, 4, 88, 4, 114, 46, 55, 17, 168, 133, 92, 148, 198, 190, 8, 182, 147, 3, 83, 23, 143, 3, 83, 148, 26, 210, 242, 173, 216, 189, 54, 220, 201, 181, 49, 30, 113, 190, 16, 3, 13, 223, 101, 34, 69, 114, 59, 48, 127, 73, 14, 65, 129, 112, 201, 57, 29, 47, 214, 227, 86, 129, 87, 110, 165, 206, 35, 164, 35, 232, 217, 1, 245, 121, 153, 211, 36, 162, 148, 200, 14, 224, 119, 221, 106, 236, 102, 231, 111, 82, 174, 209, 207, 246, 176, 191, 141, 16, 104, 165, 54, 147, 45, 197, 213, 166, 234, 47, 232, 97, 160, 182, 220, 4, 250, 244, 124, 242, 137, 234, 22, 92, 146, 124, 157, 165, 81, 176, 87, 235, 221, 154, 84, 64, 253, 151, 230, 171, 119, 80, 248, 175, 146, 200, 185, 196, 246, 75, 87, 125, 240, 130, 86, 105, 225, 246, 39, 148, 188, 2, 126, 61, 67, 95, 176, 247, 17, 135, 96, 44, 163, 75, 67, 145, 38, 234, 176, 31, 13, 73, 133, 186, 97, 233, 146, 139, 226, 72, 167, 9, 252, 194, 31, 133, 35, 157, 81, 86, 131, 73, 185, 203, 2, 174, 110, 149, 160, 49, 238, 84, 148, 48, 169, 47, 148, 156, 134, 99, 220, 178, 220, 9, 249, 107, 234, 82, 142, 255, 240, 107, 166, 200, 247, 193, 33, 64, 217, 182, 224, 146, 120, 213, 234, 111, 154, 87, 109, 86, 152, 194, 222, 98, 96, 137, 96, 106, 220, 112, 160, 14, 44, 201, 49, 78, 192, 116, 68, 154, 43, 13, 235, 170, 57, 54, 76, 157, 180, 21, 220, 239, 51, 39, 176, 139, 177, 136, 204, 163, 232, 77, 92, 250, 119, 83, 90, 204, 72, 242, 199, 29, 84, 81, 176, 180, 93, 78, 6, 247, 165, 198, 137, 233, 48, 252, 81, 202, 12, 46, 151, 54, 185, 128, 97, 79, 3, 13, 113, 9, 41, 43, 220, 4, 167, 42, 160, 133, 140, 172, 163, 221, 38, 185, 23, 100, 29, 17, 191, 236, 93, 92, 58, 166, 114, 213, 37, 17, 94, 184, 244, 109, 26, 146, 57, 38, 114, 181, 44, 142, 207, 13, 58, 98, 173, 15, 85, 49, 0, 94, 97, 226, 75, 161, 125, 156, 190, 57, 121, 0, 243, 53, 228, 244, 12, 109, 9, 225, 37, 27, 235, 121, 233, 46, 8, 58, 73, 206, 94, 43, 224, 0, 69, 69, 238, 131, 183, 23, 207, 15, 140, 177, 176, 181, 219, 89, 214, 32, 46, 184, 180, 196, 75, 161, 14, 239, 159, 104, 84, 169, 36, 240, 128, 226, 174, 242, 149, 151, 208, 62, 171, 21, 153, 46, 30, 92, 37, 193, 153, 21, 146, 76, 191, 217, 161, 176, 205, 133, 162, 166, 160, 13, 241, 185, 169, 189, 92, 39, 123, 232, 94, 138, 94, 45, 16, 22, 57, 246, 110, 32, 58, 163, 80, 245, 108, 95, 59, 164, 60, 218, 1, 249, 34, 141, 72, 36, 164, 76, 216, 57, 211, 123, 4, 30, 137, 15, 252, 152, 65, 118, 110, 134, 80, 254, 11, 205, 52, 249, 178, 74, 64, 246, 250, 118, 161, 215, 214, 178, 98, 189, 61, 141, 44, 77, 123, 196, 58, 29, 131, 255, 123, 246, 148, 237, 161, 35, 224, 222, 231, 203, 253, 96, 189, 22, 212, 60, 37, 158, 32, 129, 67, 239, 100, 115, 236, 211, 189, 187, 130, 192, 51, 167, 94, 141, 178, 22, 184, 50, 198, 164, 231, 137, 40, 108, 155, 241, 70, 38, 252, 25, 166, 175, 17, 219, 246, 243, 19, 167, 252, 71, 137, 255, 205, 65, 9, 181, 228, 140, 197, 198, 246, 64, 212, 191, 249, 124, 254, 174, 128, 42, 245, 93, 75, 91, 243, 120, 245, 14, 24, 160, 52, 45, 72, 130, 193, 28, 155, 193, 77, 76, 152, 206, 27, 55, 119, 124, 78, 20, 82, 135, 201, 76, 7, 243, 172, 124, 165, 185, 70, 147, 213, 15, 69, 141, 232, 59, 104, 62, 230, 83, 3, 57, 62, 255, 104, 89, 171, 120, 74, 41, 231, 79, 7, 219, 251, 149, 118, 215, 138, 188, 75, 227, 229, 24, 127, 228, 186, 133, 56, 136, 15, 126, 217, 254, 27, 40, 149, 112, 89, 114, 161, 7, 198, 212, 89, 17, 60, 75, 78, 50, 102, 216, 61, 152, 26, 23, 228, 13, 14, 156, 63, 85, 82, 203, 140, 16, 68, 25, 43, 238, 237, 232, 23, 231, 5, 73, 201, 58, 157, 63, 88, 141, 126, 132, 29, 60, 242, 32, 187, 174, 120, 9, 161, 248, 220, 141, 72, 21, 137, 212, 138, 222, 236, 106, 170, 124, 30, 83, 228, 61, 209, 66, 106, 178, 172, 33, 109, 6, 176, 142, 129, 222, 22, 163, 86, 9, 179, 253, 216, 1, 162, 225, 23, 47, 125, 54, 186, 5, 212, 229, 117, 186, 109, 23, 130, 241, 74, 197, 200, 254, 32, 249, 194, 53, 53, 142, 213, 92, 156, 204, 0, 220, 100, 37, 10, 199, 204, 233, 22, 228, 76, 203, 74, 36, 42, 196, 240, 92, 133, 37, 76, 117, 65, 205, 190, 26, 239, 140, 150, 102, 107, 2, 143, 186, 110, 159, 235, 159, 250, 60, 24, 135, 215, 39, 236, 127, 56, 253, 56, 117, 50, 194, 147, 94, 6, 78, 158, 206, 89, 35, 40, 101, 199, 119, 104, 129, 143, 195, 88, 6, 194, 14, 13, 82, 158, 133, 192, 249, 50, 41, 124, 198, 183, 48, 107, 3, 51, 233, 188, 169, 204, 142, 141, 207, 39, 231, 46, 64, 143, 172, 233, 0, 112, 252, 85, 32, 2, 160, 150, 9, 123, 0, 176, 33, 167, 147, 194, 185, 80, 163, 94, 221, 231, 176, 127, 28, 205, 38, 229, 69, 167, 223, 60, 202, 153, 114, 151, 105, 74, 117, 90, 148, 13, 125, 202, 12, 14, 139, 167, 189, 192, 65, 50, 139, 33, 250, 150, 48, 31, 169, 20, 48, 60, 158, 186, 2, 84, 86, 84, 23, 187, 93, 117, 21, 7, 171, 33, 90, 32, 137, 239, 58, 63, 47, 231, 159, 103, 57, 121, 245, 251, 8, 235, 101, 233, 16, 70, 134, 85, 76, 53, 79, 103, 48, 35, 112, 6, 164, 110, 0, 67, 110, 216, 116, 130, 66, 72, 229, 68, 218, 131, 91, 106, 8, 230, 33, 166, 251, 54, 146, 209, 149, 214, 253, 139, 81, 239, 162, 16, 163, 105, 15, 22, 180, 111, 205, 236, 142, 223, 245, 150, 118, 10, 218, 109, 234, 145, 115, 92, 190, 195, 147, 86, 232, 208, 1, 8, 148, 150, 157, 107, 62, 56, 44, 29, 255, 55, 42, 178, 119, 253, 220, 226, 129, 233, 238, 70, 246, 111, 45, 136, 45, 31, 113, 109, 4, 73, 172, 193, 165, 202, 114, 57, 163, 204, 216, 214, 88, 58, 100, 224, 186, 253, 209, 71, 183, 221, 103, 244, 124, 233, 140, 233, 173, 235, 244, 0, 202, 12, 210, 118, 105, 236, 98, 105, 72, 240, 237, 71, 96, 219, 4, 232, 67, 151, 196, 104, 253, 126, 42, 160, 208, 34, 87, 172, 43, 80, 159, 214, 18, 141, 83, 234, 201, 22, 7, 227, 205, 127, 209, 173, 203, 145, 1, 101, 23, 216, 27, 48, 164, 91, 1, 130, 250, 231, 115, 181, 136, 34, 111, 165, 248, 134, 253, 42, 250, 132, 182, 52, 10, 62, 13, 138, 118, 184, 153, 220, 162, 10, 171, 94, 251, 95, 239, 209, 242, 204, 227, 149, 194, 171, 33, 90, 180, 124, 196, 48, 98, 49, 41, 188, 119, 209, 1, 77, 77, 10, 200, 112, 222, 70, 158, 88, 183, 242, 155, 136, 97, 5, 65, 251, 146, 33, 155, 144, 120, 173, 32, 110, 93, 98, 79, 81, 193, 92, 174, 58, 150, 65, 166, 192, 43, 217, 255, 82, 202, 255, 141, 36, 147, 73, 60, 147, 16, 24, 172, 30, 78, 219, 152, 139, 98, 221, 188, 1, 227, 253, 213, 230, 22, 123, 58, 235, 166, 91, 122, 49, 214, 86, 31, 68, 92, 75, 243, 255, 128, 221, 201, 130, 223, 141, 46, 155, 154, 5, 177, 233, 123, 238, 124, 100, 109, 192, 237, 182, 72, 240, 104, 0, 157, 210, 180, 252, 50, 134, 220, 9, 239, 134, 178, 143, 197, 59, 118, 218, 161, 101, 44, 223, 95, 180, 172, 185, 135, 16, 15, 209, 61, 89, 188, 41, 46, 52, 238, 160, 191, 142, 51, 218, 212, 221, 71, 145, 82, 23, 223, 213, 138, 245, 231, 153, 47, 39, 60, 54, 19, 71, 197, 50, 106, 149, 62, 174, 159, 114, 182, 176, 107, 3, 215, 42, 18, 53, 220, 89, 19, 102, 56, 250, 89, 29, 92, 70, 139, 78, 26, 64, 129, 1, 246, 75, 124, 136, 14, 67, 66, 201, 111, 188, 30, 124, 231, 70, 150, 68, 249, 77, 64, 25, 12, 73, 83, 216, 94, 208, 234, 197, 227, 207, 35, 74, 162, 160, 58, 32, 157, 64, 107, 38, 210, 22, 163, 218, 100, 75, 24, 213, 112, 48, 214, 254, 251, 26, 176, 187, 89, 81, 146, 0, 213, 188, 70, 93, 43, 126, 8, 182, 40, 159, 136, 9, 163, 120, 146, 190, 246, 50, 3, 217, 161, 57, 57, 14, 120, 148, 174, 46, 30, 169, 193, 168, 160, 238, 61, 139, 48, 182, 35, 75, 28, 15, 70, 177, 30, 48, 73, 120, 161, 135, 67, 30, 121, 184, 46, 131, 174, 181, 34, 185, 212, 236, 189, 189, 172, 67, 237, 79, 133, 7, 2, 103, 156, 235, 128, 225, 102, 110, 17, 68, 214, 158, 212, 76, 99, 63, 232, 15, 29, 197, 184, 205, 116, 177, 26, 137, 161, 125, 162, 188, 54, 27, 144, 154, 157, 120, 135, 143, 237, 145, 237, 178, 143, 192, 198, 52, 68, 105, 14, 228, 172, 23, 6, 19, 7, 59, 141, 61, 78, 119, 56, 51, 160, 237, 7, 133, 216, 11, 42, 7, 86, 147, 91, 226, 84, 99, 81, 221, 164, 4, 233, 46, 3, 16, 195, 240, 94, 240, 111, 89, 158, 123, 56, 135, 242, 69, 181, 211, 165, 164, 253, 94, 2, 11, 19, 214, 171, 83, 49, 183, 236, 132, 34, 111, 89, 210, 29, 244, 80, 26, 233, 190, 181, 13, 148, 152, 68, 49, 79, 183, 248, 72, 79, 95, 137, 27, 64, 222, 139, 217, 226, 207, 131, 204, 204, 252, 124, 242, 133, 155, 44, 46, 255, 1, 36, 145, 232, 18, 63, 35, 250, 151, 109, 108, 176, 60, 132, 72, 201, 165, 5, 1, 22, 52, 144, 140, 92, 138, 4, 194, 51, 218, 172, 204, 115, 57, 47, 225, 71, 182, 235, 188, 101, 170, 224, 14, 2, 211, 233, 19, 101, 215, 110, 38, 81, 2, 0, 216, 97, 232, 221, 207, 94, 171, 216, 188, 135, 122, 250, 63, 220, 193, 32, 37, 122, 184, 196, 148, 1, 237, 90, 247, 109, 123, 136, 226, 148, 247, 52, 168, 184, 212, 172, 76, 146, 177, 248, 163, 122, 178, 60, 104, 59, 87, 190, 162, 151, 200, 3, 190, 253, 66, 247, 94, 190, 203, 52, 241, 140, 39, 139, 198, 173, 195, 140, 139, 167, 208, 38, 191, 222, 33, 182, 60, 202, 43, 141, 254, 35, 144, 218, 26, 214, 16, 244, 92, 81, 207, 192, 125, 26, 162, 250, 83, 200, 234, 254, 73, 46, 67, 139, 176, 96, 151, 170, 203, 151, 37, 222, 120, 3, 106, 163, 67, 90, 237, 131, 16, 205, 208, 188, 239, 239, 80, 5, 55, 230, 37, 5, 42, 29, 109, 83, 140, 176, 214, 220, 31, 18, 176, 199, 209, 179, 41, 242, 161, 80, 224, 145, 173, 41, 220, 160, 237, 89, 239, 122, 216, 235, 71, 47, 103, 54, 0, 123, 127, 20, 78, 123, 219, 70, 119, 52, 206, 230, 14, 173, 28, 183, 44, 54, 73, 138, 181, 231, 138, 246, 151, 6, 135, 38, 173, 7, 72, 17, 8, 162, 124, 73, 197, 240, 36, 84, 12, 234, 164, 208, 248, 97, 115, 212, 29, 221, 158, 27, 195, 244, 151, 10, 209, 38, 121, 0, 94, 105, 96, 97, 15, 1, 94, 36, 253, 103, 161, 238, 78, 180, 229, 194, 255, 134, 255, 119, 96, 186, 82, 49, 204, 127, 197, 65, 125, 192, 204, 19, 33, 59, 35, 48, 4, 171, 129, 146, 140, 193, 10, 204, 237, 197, 237, 39, 78, 63, 10, 215, 49, 51, 184, 26, 158, 213, 174, 99, 241, 94, 250, 90, 252, 59, 38, 246, 142, 211, 15, 93, 103, 176, 89, 45, 219, 232, 59, 59, 206, 74, 147, 0, 67, 125, 91, 53, 216, 121, 5, 154, 154, 226, 226, 41, 53, 193, 64, 85, 199, 90, 44, 33, 71, 175, 51, 32, 31, 95, 200, 156, 183, 95, 126, 78, 184, 117, 113, 130, 161, 33, 170, 227, 142, 198, 245, 176, 52, 186, 2, 183, 153, 172, 212, 108, 166, 149, 76, 115, 18, 221, 36, 63, 65, 130, 200, 86, 253, 51, 251, 193, 210, 85, 167, 192, 102, 62, 24, 112, 209, 23, 71, 82, 165, 41, 200, 116, 144, 123, 254, 90, 241, 177, 97, 149, 28, 80, 65, 87, 70, 100, 191, 89, 35, 26, 206, 192, 42, 102, 225, 219, 108, 251, 20, 172, 161, 175, 116, 180, 131, 45, 195, 64, 54, 155, 254, 228, 129, 74, 22, 107, 166, 15, 229, 164, 40, 50, 196, 2, 222, 142, 82, 237, 63, 131, 22, 214, 78, 74, 46, 162, 27, 204, 227, 175, 241, 252, 186, 110, 79, 25, 84, 51, 119, 81, 122, 59, 208, 53, 245, 78, 35, 201, 118, 192, 134, 9, 130, 65, 39, 73, 138, 108, 114, 217, 137, 85, 2, 152, 217, 181, 245, 95, 238, 65, 120, 157, 77, 106, 60, 142, 151, 143, 215, 108, 168, 246, 157, 133, 33, 15, 216, 72, 8, 34, 44, 47, 57, 242, 252, 50, 170, 39, 104, 72, 148, 218, 65, 119, 112, 254, 16, 168, 173, 167, 52, 76, 170, 253, 229, 77, 3, 243, 37, 200, 168, 35, 97, 242, 45, 64, 14, 203, 220, 35, 95, 119, 202, 12, 30, 222, 117, 219, 84, 77, 196, 186, 61, 74, 233, 172, 108, 22, 171, 47, 133, 90, 98, 218, 248, 216, 227, 52, 65, 254, 26, 15, 12, 34, 59, 79, 73, 141, 55, 85, 194, 157, 225, 194, 142, 79, 136, 52, 49, 252, 104, 31, 188, 80, 48, 207, 163, 185, 47, 176, 47, 121, 73, 5, 133, 134, 101, 228, 13, 113, 83, 129, 0, 245, 4, 136, 205, 9, 200, 83, 105, 51, 238, 119, 86, 146, 34, 232, 147, 168, 190, 48, 201, 102, 10, 113, 162, 115, 96, 131, 166, 124, 185, 191, 32, 52, 247, 21, 218, 67, 38, 151, 1, 186, 129, 6, 62, 231, 243, 85, 165, 213, 1, 90, 19, 226, 193, 220, 149, 189, 101, 193, 60, 46, 148, 145, 201, 98, 93, 185, 187, 247, 91, 50, 30, 234, 96, 101, 114, 73, 18, 64, 48, 224, 119, 121, 116, 163, 188, 171, 46, 164, 51, 94, 101, 193, 153, 63, 59, 49, 122, 207, 220, 98, 116, 142, 81, 83, 81, 18, 187, 171, 192, 146, 131, 253, 100, 78, 90, 129, 170, 174, 225, 255, 165, 98, 155, 136, 110, 60, 252, 112, 96, 179, 223, 87, 88, 72, 75, 129, 216, 16, 250, 187, 94, 188, 36, 6, 48, 10, 76, 4, 247, 96, 170, 240, 194, 169, 238, 225, 180, 163, 56, 52, 213, 173, 94, 169, 77, 187, 226, 209, 151, 241, 105, 11, 163, 252, 237, 215, 161, 24, 133, 106, 89, 141, 250, 133, 141, 57, 48, 79, 97, 101, 5, 216, 210, 208, 59, 67, 232, 104, 60, 191, 115, 201, 63, 194, 177, 111, 181, 62, 51, 77, 214, 170, 172, 50, 42, 36, 99, 88, 187, 175, 73, 40, 26, 244, 221, 89, 88, 14, 245, 182, 224, 200, 133, 136, 171, 37, 109, 135, 173, 67, 47, 10, 153, 138, 76, 41, 94, 125, 207, 132, 110, 11, 117, 83, 44, 7, 31, 229, 215, 173, 77, 121, 71, 58, 206, 8, 237, 98, 95, 176, 119, 131, 12, 217, 179, 64, 152, 149, 203, 128, 13, 59, 117, 223, 53, 124, 81, 14, 144, 98, 28, 242, 194, 166, 240, 151, 221, 61, 220, 235, 239, 220, 93, 4, 147, 240, 176, 13, 112, 160, 94, 1, 206, 164, 251, 98, 58, 219, 176, 24, 46, 123, 230, 226, 89, 16, 155, 181, 189, 94, 79, 111, 112, 202, 251, 20, 175, 17, 195, 162, 3, 124, 110, 50, 4, 201, 43, 164, 175, 21, 29, 142, 138, 151, 27, 81, 193, 95, 240, 141, 145, 36, 212, 31, 1, 106, 48, 147, 247, 93, 180, 171, 107, 197, 227, 10, 189, 42, 131, 42, 69, 211, 10, 84, 242, 108, 178, 193, 139, 33, 9, 251, 56, 222, 176, 79, 78, 182, 133, 113, 165, 236, 158, 181, 157, 118, 36, 184, 231, 83, 234, 251, 23, 234, 222, 90, 245, 44, 248, 220, 165, 244, 125, 77, 88, 5, 124, 78, 215, 102, 114, 54, 93, 84, 233, 170, 246, 202, 179, 119, 86, 143, 76, 1, 141, 21, 127, 106, 90, 150, 154, 179, 135, 12, 236, 36, 96, 237, 95, 114, 172, 158, 127, 182, 0, 242, 99, 161, 194, 18, 91, 106, 129, 218, 130, 143, 26, 13, 4, 214, 246, 147, 189, 160, 195, 103, 167, 4, 102, 136, 19, 196, 6, 129, 170, 164, 150, 219, 141, 239, 204, 74, 183, 163, 158, 191, 63, 207, 141, 27, 7, 216, 16, 26, 147, 0, 72, 61, 106, 68, 33, 91, 221, 234, 82, 33, 8, 31, 134, 232, 141, 157, 240, 239, 207, 127, 56, 87, 230, 159, 10, 69, 86, 167, 40, 72, 6, 126, 34, 146, 15, 96, 99, 248, 215, 178, 73, 157, 65, 221, 197, 94, 96, 166, 255, 46, 182, 62, 72, 161, 24, 59, 231, 4, 249, 193, 77, 58, 194, 117, 118, 219, 91, 130, 233, 95, 124, 120, 123, 25, 249, 222, 213, 178, 50, 102, 218, 231, 183, 234, 52, 228, 231, 137, 141, 202, 126, 100, 70, 247, 15, 238, 208, 193, 141, 112, 43, 202, 106, 195, 88, 88, 178, 79, 234, 214, 75, 96, 67, 108, 163, 141, 171, 41, 144, 6, 113, 206, 180, 59, 148, 173, 191, 185, 123, 94, 3, 238, 164, 97, 34, 125, 66, 177, 152, 233, 51, 109, 136, 202, 28, 216, 62, 83, 40, 231, 145, 195, 215, 244, 162, 24, 193, 205, 97, 204, 147, 243, 248, 235, 215, 90, 32, 79, 217, 140, 38, 134, 165, 252, 185, 217, 95, 37, 15, 133, 147, 168, 97, 128, 117, 25, 170, 209, 40, 161, 8, 210, 209, 91, 139, 99, 182, 103, 9, 32, 124, 57, 7, 173, 46, 83, 45, 168, 17, 173, 246, 243, 140, 201, 248, 32, 60, 225, 228, 245, 163, 229, 233, 150, 156, 4, 214, 36, 209, 113, 53, 186, 98, 223, 155, 107, 237, 202, 244, 149, 45, 160, 41, 100, 216, 140, 219, 200, 102, 118, 243, 96, 119, 224, 113, 90, 20, 147, 190, 91, 220, 48, 177, 221, 8, 76, 36, 246, 127, 73, 24, 77, 204, 88, 48, 201, 162, 4, 139, 144, 1, 86, 224, 83, 83, 68, 72, 161, 119, 170, 114, 10, 204, 55, 95, 180, 105, 84, 22, 237, 177, 231, 39, 221, 236, 100, 226, 154, 113, 172, 120, 169, 208, 102, 13, 95, 190, 44, 105, 171, 11, 19, 39, 225, 151, 39, 33, 174, 45, 143, 74, 170, 6, 153, 27, 163, 6, 201, 81, 231, 32, 173, 142, 85, 213, 195, 15, 133, 248, 177, 104, 157, 63, 52, 92, 224, 15, 238, 31, 116, 233, 98, 82, 117, 42, 182, 203, 173, 156, 77, 103, 251, 65, 203, 25, 236, 57, 146, 36, 50, 153, 107, 110, 101, 192, 178, 50, 174, 72, 50, 186, 172, 116, 96, 123, 116, 78, 214, 228, 198, 35, 116, 224, 221, 174, 108, 89, 220, 136, 139, 27, 98, 135, 90, 10, 51, 253, 65, 65, 154, 20, 54, 61, 212, 172, 146, 44, 33, 195, 18, 252, 70, 103, 105, 235, 17, 133, 25, 194, 121, 105, 121, 246, 201, 59, 131, 120, 239, 113, 241, 161, 182, 212, 70, 47, 47, 27, 168, 103, 24, 121, 118, 159, 168, 238, 13, 209, 82, 133, 200, 231, 175, 54, 11, 6, 0, 149, 188, 157, 186, 71, 48, 251, 242, 156, 71, 28, 106, 190, 47, 93, 233, 238, 17, 28, 163, 248, 196, 87, 202, 218, 235, 127, 148, 140, 34, 26, 228, 108, 71, 59, 166, 249, 7, 198, 111, 6, 45, 179, 116, 171, 212, 132, 98, 26, 59, 121, 89, 158, 224, 30, 183, 107, 51, 24, 161, 40, 31, 137, 77, 249, 210, 221, 156, 153, 69, 170, 172, 130, 139, 185, 50, 254, 113, 82, 26, 83, 132, 47, 81, 173, 122, 73, 28, 207, 121, 250, 172, 193, 176, 174, 200, 119, 53, 109, 252, 159, 87, 133, 28, 216, 108, 245, 127, 27, 166, 168, 154, 187, 107, 73, 26, 217, 0, 204, 53, 141, 66, 221, 159, 28, 5, 208, 255, 200, 23, 173, 209, 28, 48, 254, 159, 253, 100, 3, 244, 166, 73, 157, 179, 22, 226, 94, 110, 196, 27, 65, 77, 10, 143, 255, 215, 233, 13, 58, 230, 21, 145, 31, 219, 50, 7, 104, 97, 61, 175, 175, 151, 220, 235, 85, 207, 24, 118, 32, 101, 126, 44, 18, 59, 122, 30, 234, 208, 99, 129, 40, 206, 34, 56, 144, 226, 35, 154, 87, 50, 208, 137, 114, 204, 173, 58, 163, 141, 158, 243, 85, 11, 186, 55, 111, 54, 107, 63, 185, 85, 25, 197, 116, 238, 196, 69, 168, 88, 93, 69, 234, 128, 5, 39, 185, 111, 44, 193, 225, 32, 196, 95, 234, 125, 41, 243, 104, 199, 152, 170, 154, 127, 188, 27, 47, 92, 233, 131, 223, 205, 41, 230, 170, 224, 235, 40, 2, 242, 30, 1, 70, 16, 159, 48, 29, 188, 50, 215, 30, 17, 68, 190, 206, 130, 198, 208, 25, 255, 186, 180, 128, 63, 200, 249, 97, 224, 12, 59, 22, 137, 145, 184, 110, 166, 229, 181, 48, 179, 188, 88, 118, 31, 106, 225, 144, 68, 192, 32, 79, 60, 140, 35, 93, 239, 200, 114, 111, 59, 114, 208, 81, 11, 54, 40, 31, 105, 82, 8, 235, 121, 130, 171, 82, 210, 39, 226, 163, 51, 30, 112, 75, 11, 203, 220, 48, 79, 214, 218, 143, 51, 70, 2, 112, 134, 188, 251, 222, 74, 144, 232, 102, 169, 69, 58, 198, 75, 41, 14, 209, 136, 246, 109, 164, 234, 83, 237, 181, 221, 202, 96, 150, 166, 128, 119, 197, 77, 7, 236, 251, 7, 150, 225, 189, 221, 210, 77, 29, 139, 130, 195, 84, 189, 121, 114, 127, 3, 152, 137, 189, 97, 82, 117, 42, 167, 200, 184, 62, 11, 217, 9, 185, 32, 93, 150, 92, 102, 116, 60, 4, 23, 3, 83, 124, 43, 1, 178, 193, 213, 224, 129, 9, 44, 90, 82, 236, 84, 145, 220, 155, 8, 162, 194, 60, 64, 65, 173, 170, 42, 114, 203, 177, 35, 28, 229, 108, 48, 228, 95, 245, 212, 185, 52, 4, 31, 35, 195, 95, 131, 182, 167, 64, 90, 28, 88, 55, 48, 68, 84, 24, 220, 183, 41, 14, 107, 169, 7, 186, 134, 177, 23, 180, 28, 32, 224, 27, 234, 146, 76, 122, 3, 243, 216, 228, 53, 86, 159, 244, 239, 253, 244, 242, 210, 149, 45, 68, 209, 225, 168, 140, 252, 37, 253, 136, 109, 241, 2, 214, 55, 20, 59, 134, 252, 213, 192, 210, 108, 190, 156, 70, 143, 219, 95, 98, 98, 36, 34, 130, 4, 154, 67, 146, 212, 101, 84, 32, 89, 87, 215, 231, 71, 201, 136, 36, 238, 4, 33, 40, 250, 176, 20, 40, 105, 60, 126, 96, 60, 192, 214, 10, 185, 58, 148, 106, 18, 182, 37, 52, 158, 216, 6, 196, 186, 127, 153, 129, 37, 191, 209, 140, 21, 44, 182, 39, 32, 125, 127, 240, 106, 228, 153, 93, 229, 91, 127, 106, 121, 130, 217, 83, 63, 198, 146, 102, 203, 196, 165, 61, 154, 139, 35, 255, 166, 250, 103, 29, 223, 187, 153, 170, 65, 163, 120, 191, 16, 131, 128, 136, 42, 96, 116, 45, 181, 109, 207, 207, 248, 151, 11, 7, 132, 123, 121, 254, 51, 39, 179, 217, 185, 112, 154, 131, 140, 7, 186, 112, 39, 117, 161, 35, 35, 80, 171, 187, 235, 215, 199, 123, 237, 116, 87, 59, 194, 20, 99, 66, 105, 116, 147, 108, 229, 75, 84, 69, 198, 24, 134, 57, 248, 86, 56, 189, 100, 55, 141, 245, 197, 218, 97, 58, 91, 82, 44, 43, 157, 93, 59, 128, 42, 135, 95, 188, 62, 247, 162, 21, 117, 73, 24, 77, 224, 47, 133, 40, 139, 136, 251, 8, 30, 178, 13, 82, 75, 18, 134, 57, 162, 42, 131, 39, 29, 65, 36, 22, 35, 135, 227, 67, 76, 18, 96, 250, 144, 172, 128, 201, 145, 10, 177, 92, 102, 183, 62, 183, 64, 86, 159, 69, 120, 150, 146, 199, 146, 53, 39, 212, 92, 57, 6, 23, 249, 182, 174, 193, 75, 207, 83, 162, 127, 25, 221, 69, 160, 45, 75, 173, 186, 57, 41, 232, 209, 247, 99, 196, 149, 208, 112, 238, 177, 219, 244, 100, 90, 253, 169, 80, 252, 247, 181, 200, 161, 143, 39, 23, 114, 147, 202, 194, 69, 55, 203, 187, 89, 216, 224, 119, 167, 180, 66, 188, 92, 202, 127, 221, 93, 26, 29, 212, 95, 91, 164, 206, 146, 185, 4, 134, 176, 45, 215, 195, 79, 214, 35, 133, 227, 13, 234, 89, 212, 247, 8, 247, 35, 81, 205, 50, 236, 146, 140, 229, 163, 96, 137, 249, 117, 173, 21, 173, 157, 245, 53, 149, 250, 239, 30, 181, 222, 11, 229, 174, 55, 142, 161, 238, 85, 237, 63, 101, 28, 86, 154, 142, 138, 205, 184, 163, 202, 13, 170, 168, 246, 119, 145, 38, 226, 241, 177, 176, 66, 100, 208, 40, 165, 41, 190, 133, 210, 103, 230, 78, 35, 175, 179, 133, 131, 179, 61, 101, 255, 50, 10, 18, 211, 219, 62, 44, 182, 85, 234, 83, 83, 175, 54, 153, 83, 17, 138, 11, 223, 183, 155, 23, 17, 188, 61, 42, 204, 195, 72, 86, 99, 42, 198, 8, 2, 181, 249, 194, 52, 250, 234, 92, 48, 130, 185, 74, 68, 55, 235, 95, 130, 161, 38, 114, 131, 177, 177, 134, 210, 108, 177, 127, 91, 131, 10, 32, 208, 167, 182, 222, 247, 92, 67, 10, 168, 237, 30, 198, 11, 19, 167, 113, 139, 131, 76, 46, 59, 44, 251, 111, 64, 47, 245, 117, 166, 61, 94, 62, 44, 202, 175, 74, 238, 41, 249, 100, 105, 72, 59, 130, 143, 62, 208, 152, 75, 104, 55, 86, 63, 57, 120, 73, 150, 83, 189, 167, 216, 26, 110, 173, 152, 242, 6, 57, 109, 192, 129, 238, 99, 71, 227, 90, 24, 63, 38, 200, 13, 86, 146, 210, 126, 189, 195, 48, 145, 42, 165, 25, 98, 97, 253, 107, 183, 199, 7, 182, 14, 89, 155, 100, 246, 46, 199, 76, 189, 207, 205, 129, 196, 38, 117, 201, 233, 113, 170, 184, 73, 172, 201, 222, 105, 100, 120, 216, 234, 143, 75, 20, 171, 199, 1, 39, 12, 5, 113, 127, 126, 116, 236, 44, 65, 200, 108, 196, 204, 62, 3, 241, 222, 244, 91, 2, 255, 2, 163, 46, 83, 85, 224, 52, 18, 129, 254, 28, 255, 246, 13, 62, 19, 81, 211, 183, 159, 70, 213, 121, 180, 11, 68, 199, 219, 241, 242, 2, 117, 117, 4, 218, 209, 29, 28, 232, 211, 13, 200, 176, 143, 72, 141, 60, 129, 220, 134, 203, 12, 188, 42, 34, 128, 53, 235, 9, 207, 134, 45, 62, 25, 62, 135, 204, 202, 252, 209, 95, 194, 183, 214, 32, 55, 198, 205, 134, 65, 169, 169, 209, 19, 1, 96, 193, 252, 68, 154, 216, 139, 23, 66, 154, 2, 61, 27, 57, 221, 243, 232, 176, 137, 78, 58, 158, 189, 206, 237, 218, 213, 90, 186, 38, 225, 26, 118, 73, 24, 170, 227, 110, 158, 161, 26, 8, 169, 93, 138, 137, 154, 232, 18, 206, 61, 9, 250, 111, 100, 80, 72, 63, 67, 235, 56, 156, 194, 231, 55, 195, 213, 225, 64, 163, 249, 85, 42, 39, 176, 46, 73, 173, 125, 154, 209, 108, 92, 206, 91, 202, 155, 225, 114, 165, 251, 167, 179, 49, 55, 213, 163, 112, 70, 76, 45, 1, 108, 247, 112, 90, 255, 210, 227, 201, 245, 115, 115, 26, 78, 39, 58, 36, 175, 3, 150, 249, 75, 116, 23, 145, 148, 238, 44, 98, 188, 114, 162, 125, 252, 1, 76, 243, 152, 117, 207, 237, 252, 162, 144, 87, 117, 135, 227, 61, 190, 55, 57, 147, 130, 212, 50, 89, 68, 131, 245, 12, 87, 97, 102, 144, 71, 47, 92, 120, 147, 26, 192, 132, 13, 22, 69, 184, 126, 148, 80, 172, 29, 44, 254, 137, 31, 39, 70, 141, 192, 36, 108, 192, 51, 128, 11, 166, 174, 210, 111, 222, 180, 161, 105, 101, 233, 186, 179, 231, 128, 72, 73, 28, 122, 166, 176, 137, 216, 73, 147, 187, 41, 129, 136, 109, 12, 95, 181, 194, 36, 15, 255, 120, 142, 41, 119, 229, 28, 30, 223, 226, 224, 9, 35, 10, 211, 157, 24, 208, 209, 192, 76, 149, 138, 123, 132, 135, 234, 242, 243, 118, 170, 112, 38, 208, 7, 18, 99, 111, 3, 233, 179, 84, 168, 42, 250, 97, 200, 37, 205, 121, 245, 153, 39, 217, 58, 133, 33, 24, 19, 208, 61, 62, 195, 151, 29, 72, 209, 27, 107, 200, 164, 24, 184, 78, 70, 42, 246, 207, 140, 1, 124, 108, 5, 121, 247, 130, 238, 221, 194, 254, 115, 93, 22, 235, 251, 16, 16, 87, 161, 70, 202, 1, 70, 162, 181, 95, 211, 84, 238, 227, 221, 207, 92, 182, 109, 134, 178, 23, 33, 188, 61, 72, 242, 62, 86, 198, 24, 22, 93, 3, 87, 67, 170, 113, 69, 103, 204, 219, 130, 67, 109, 103, 196, 194, 242, 103, 125, 179, 32, 94, 151, 19, 43, 3, 243, 247, 228, 243, 76, 129, 85, 138, 217, 101, 62, 133, 193, 222, 22, 30, 207, 179, 90, 201, 220, 69, 47, 143, 197, 30, 233, 77, 230, 132, 171, 193, 59, 13, 13, 33, 228, 64, 84, 250, 54, 217, 224, 107, 233, 9, 230, 25, 95, 212, 69, 75, 194, 160, 155, 212, 65, 22, 163, 80, 105, 171, 233, 67, 56, 31, 183, 38, 143, 89, 175, 237, 222, 254, 108, 171, 94, 49, 68, 31, 161, 101, 78, 250, 251, 48, 5, 168, 45, 117, 11, 203, 142, 148, 207, 95, 219, 191, 17, 247, 102, 130, 207, 250, 43, 68, 105, 239, 48, 69, 234, 15, 72, 122, 169, 98, 9, 210, 79, 27, 69, 174, 106, 184, 32, 15, 135, 235, 55, 137, 206, 86, 214, 176, 23, 156, 200, 54, 121, 147, 157, 213, 86, 179, 87, 102, 181, 185, 58, 213, 79, 45, 125, 72, 233, 2, 70, 130, 198, 157, 41, 245, 254, 147, 234, 216, 126, 213, 249, 24, 4, 252, 47, 25, 184, 71, 106, 85, 35, 16, 129, 246, 101, 90, 114, 44, 164, 17, 24, 163, 2, 132, 186, 75, 115, 1, 37, 24, 57, 222, 59, 253, 205, 137, 118, 110, 94, 241, 229, 3, 245, 236, 167, 222, 64, 89, 41, 63, 23, 9, 233, 207, 114, 8, 187, 104, 31, 107, 237, 218, 85, 176, 31, 226, 52, 36, 80, 115, 120, 213, 115, 178, 87, 152, 120, 114, 138, 27, 123, 8, 210, 172, 76, 177, 4, 245, 112, 176, 60, 182, 175, 140, 196, 40, 164, 214, 208, 190, 131, 6, 10, 96, 250, 43, 193, 96, 135, 22, 236, 152, 27, 199, 33, 79, 245, 232, 2, 116, 108, 136, 53, 239, 74, 203, 157, 104, 152, 129, 228, 190, 35, 209, 79, 132, 190, 240, 66, 12, 130, 110, 195, 228, 225, 126, 82, 7, 248, 69, 213, 227, 172, 139, 55, 54, 109, 21, 23, 32, 110, 69, 195, 31, 183, 137, 210, 217, 155, 83, 156, 229, 48, 8, 85, 89, 45, 205, 69, 137, 153, 224, 57, 192, 251, 118, 253, 128, 116, 78, 179, 125, 226, 73, 108, 235, 218, 182, 58, 51, 110, 125, 208, 69, 149, 76, 74, 137, 125, 100, 32, 5, 117, 154, 13, 124, 130, 241, 185, 157, 188, 202, 191, 158, 150, 159, 132, 96, 29, 127, 153, 197, 27, 61, 74, 168, 214, 10, 102, 218, 90, 90, 220, 225, 233, 93, 106, 174, 184, 44, 123, 51, 0, 60, 216, 194, 14, 12, 93, 34, 75, 164, 247, 195, 29, 224, 251, 154, 128, 38, 157, 134, 147, 143, 3, 109, 43, 34, 58, 167, 183, 96, 249, 210, 40, 251, 254, 131, 211, 155, 58, 157, 209, 233, 149, 242, 87, 118, 146, 169, 58, 107, 153, 74, 101, 19, 74, 30, 38, 53, 45, 242, 69, 207, 146, 3, 160, 95, 66, 71, 200, 194, 246, 111, 232, 129, 23, 239, 237, 121, 113, 154, 139, 1, 178, 183, 125, 201, 49, 27, 197, 208, 198, 95, 173, 222, 75, 16, 65, 39, 108, 209, 6, 174, 221, 213, 114, 160, 38, 3, 136, 35, 116, 119, 34, 224, 12, 100, 84, 244, 21, 193, 143, 60, 175, 0, 44, 117, 178, 103, 197, 132, 17, 204, 70, 239, 45, 39, 102, 210, 238, 147, 43, 225, 62, 118, 220, 216, 239, 160, 39, 9, 191, 136, 204, 226, 13, 251, 82, 171, 124, 8, 251, 121, 138, 200, 36, 126, 155, 8, 194, 79, 230, 67, 205, 77, 36, 173, 16, 224, 206, 72, 1, 63, 120, 24, 133, 109, 4, 1, 81, 13, 219, 174, 247, 116, 93, 158, 130, 225, 222, 4, 27, 205, 225, 187, 125, 234, 71, 214, 71, 233, 88, 207, 136, 8, 191, 28, 48, 196, 10, 164, 253, 184, 94, 154, 219, 248, 176, 152, 148, 130, 37, 125, 163, 180, 177, 234, 50, 90, 12, 130, 110, 25, 224, 4, 34, 13, 116, 197, 118, 223, 223, 92, 105, 176, 28, 157, 136, 158, 147, 140, 110, 94, 68, 246, 82, 52, 167, 151, 172, 247, 211, 153, 117, 143, 246, 107, 159, 173, 103, 60, 70, 126, 3, 206, 208, 81, 153, 37, 158, 41, 176, 133, 222, 242, 23, 251, 25, 1, 81, 202, 114, 92, 162, 30, 50, 166, 197, 148, 254, 0, 39, 199, 177, 247, 64, 14, 233, 248, 225, 54, 237, 36, 172, 142, 54, 42, 68, 239, 57, 39, 24, 6, 108, 47, 38, 43, 151, 139, 1, 134, 120, 136, 33, 245, 156, 219, 165, 158, 193, 122, 71, 237, 194, 200, 228, 36, 81, 194, 13, 53, 137, 208, 178, 69, 227, 72, 176, 75, 9, 234, 229, 182, 160, 151, 215, 202, 20, 137, 2, 15, 57, 48, 159, 188, 243, 225, 190, 151, 94, 48, 175, 151, 61, 117, 42, 183, 200, 218, 171, 7, 219, 16, 194, 22, 25, 106, 97, 68, 4, 131, 254, 236, 0, 184, 202, 204, 139, 36, 192, 47, 41, 118, 216, 167, 136, 170, 47, 249, 238, 92, 75, 195, 95, 68, 139, 8, 249, 43, 143, 161, 32, 55, 156, 204, 3, 186, 230, 3, 107, 99, 242, 120, 157, 131, 52, 173, 117, 28, 182, 145, 173, 208, 170, 15, 56, 27, 52, 152, 152, 190, 237, 232, 170, 138, 173, 217, 224, 76, 211, 245, 23, 89, 231, 122, 194, 223, 240, 76, 182, 210, 199, 14, 166, 112, 170, 171, 172, 3, 215, 78, 38, 144, 157, 95, 186, 53, 190, 55, 227, 168, 40, 254, 169, 56, 44, 161, 103, 157, 149, 15, 135, 186, 122, 189, 235, 207, 82, 142, 37, 204, 10, 244, 207, 100, 126, 144, 177, 246, 153, 53, 181, 168, 92, 186, 223, 85, 190, 169, 217, 219, 71, 47, 35, 8, 251, 97, 133, 154, 31, 32, 131, 253, 139, 249, 57, 101, 51, 205, 240, 43, 220, 2, 179, 58, 139, 138, 22, 164, 184, 170, 154, 24, 181, 54, 231, 213, 177, 70, 144, 26, 214, 250, 50, 217, 125, 56, 7, 40, 85, 116, 89, 245, 107, 88, 94, 91, 138, 85, 58, 50, 157, 157, 26, 61, 120, 86, 67, 239, 167, 121, 110, 201, 216, 162, 175, 8, 29, 107, 90, 15, 49, 129, 24, 11, 65, 33, 15, 74, 41, 250, 102, 62, 187, 153, 64, 170, 32, 252, 118, 116, 234, 19, 232, 208, 150, 30, 149, 55, 251, 139, 118, 6, 160, 203, 74, 68, 209, 194, 122, 67, 39, 141, 87, 29, 117, 153, 103, 156, 205, 255, 163, 184, 78, 74, 17, 192, 133, 203, 16, 226, 169, 136, 222, 93, 155, 8, 178, 26, 69, 202, 15, 228, 197, 10, 5, 135, 233, 111, 182, 140, 63, 171, 165, 12, 46, 24, 254, 161, 205, 32, 13, 144, 43, 61, 98, 19, 77, 1, 225, 116, 143, 114, 37, 208, 102, 158, 55, 198, 104, 126, 180, 198, 123, 183, 7, 7, 247, 168, 179, 199, 185, 42, 193, 145, 5, 79, 89, 231, 147, 92, 137, 6, 110, 142, 50, 206, 54, 164, 235, 250, 218, 211, 49, 40, 238, 231, 161, 186, 51, 29, 131, 253, 4, 194, 248, 12, 28, 216, 130, 16, 45, 125, 239, 103, 188, 5, 61, 80, 170, 235, 68, 214, 43, 204, 137, 2, 42, 27, 211, 123, 127, 173, 136, 89, 99, 79, 2, 143, 112, 179, 138, 169, 79, 244, 0, 97, 114, 69, 172, 84, 54, 1, 90, 176, 126, 231, 145, 20, 148, 138, 188, 122, 179, 143, 10, 168, 147, 48, 172, 53, 123, 216, 153, 109, 102, 112, 167, 182, 55, 52, 74, 192, 124, 171, 242, 252, 50, 180, 6, 252, 147, 108, 85, 210, 77, 243, 222, 79, 252, 205, 67, 26, 65, 2, 82, 160, 57, 10, 248, 63, 148, 205, 29, 191, 123, 189, 192, 38, 154, 20, 73, 58, 176, 168, 180, 238, 224, 73, 150, 217, 10, 57, 28, 86, 7, 59, 169, 40, 0, 122, 37, 233, 206, 237, 62, 125, 155, 131, 247, 101, 213, 4, 9, 140, 100, 18, 104, 159, 74, 142, 210, 197, 98, 124, 132, 35, 11, 188, 214, 141, 25, 211, 154, 236, 12, 36, 112, 196, 233, 250, 84, 57, 114, 68, 3, 176, 68, 6, 10, 215, 92, 33, 16, 253, 180, 94, 134, 45, 228, 11, 216, 24, 152, 242, 209, 55, 115, 2, 189, 156, 90, 207, 158, 43, 194, 69, 57, 104, 206, 89, 21, 195, 134, 231, 91, 12, 32, 183, 176, 207, 216, 249, 93, 59, 123, 94, 60, 134, 146, 60, 205, 176, 184, 23, 79, 228, 22, 82, 165, 108, 247, 138, 36, 192, 157, 97, 121, 227, 35, 118, 117, 217, 136, 196, 164, 224, 91, 132, 84, 89, 71, 213, 79, 106, 15, 149, 121, 163, 145, 239, 28, 165, 175, 235, 17, 75, 118, 218, 189, 204, 238, 193, 163, 231, 90, 176, 177, 88, 170, 58, 159, 45, 90, 131, 157, 8, 128, 228, 212, 73, 208, 55, 39, 249, 35, 244, 39, 248, 10, 57, 93, 97, 51, 101, 39, 246, 134, 185, 197, 62, 255, 129, 194, 48, 170, 104, 68, 244, 58, 123, 161, 159, 20, 61, 35, 197, 132, 151, 23, 17, 184, 122, 126, 240, 196, 242, 192, 181, 110, 27, 178, 72, 69, 241, 213, 201, 96, 150, 206, 97, 10, 171, 118, 153, 247, 251, 81, 23, 209, 232, 185, 248, 177, 61, 224, 252, 71, 120, 174, 166, 207, 101, 60, 59, 170, 114, 26, 22, 225, 142, 238, 31, 155, 248, 248, 49, 153, 212, 194, 130, 195, 132, 61, 9, 100, 164, 92, 36, 0, 176, 204, 81, 176, 68, 103, 52, 182, 83, 13, 166, 136, 121, 234, 25, 187, 99, 50, 133, 250, 186, 157, 224, 156, 207, 151, 174, 118, 58, 19, 74, 26, 162, 33, 235, 132, 195, 180, 14, 29, 113, 144, 97, 235, 22, 110, 35, 64, 121, 205, 12, 204, 140, 250, 132, 173, 109, 41, 43, 50, 22, 204, 217, 107, 105, 151, 171, 154, 251, 188, 4, 235, 65, 177, 101, 156, 113, 50, 127, 40, 226, 244, 41, 251, 37, 90, 39, 169, 71, 170, 143, 213, 236, 224, 225, 228, 73, 61, 117, 180, 76, 86, 135, 130, 65, 33, 157, 97, 106, 131, 176, 207, 246, 126, 226, 104, 111, 234, 130, 67, 201, 81, 40, 155, 201, 34, 56, 136, 180, 98, 136, 96, 204, 117, 163, 138, 55, 43, 66, 136, 233, 112, 172, 4, 135, 88, 184, 234, 191, 155, 164, 232, 240, 152, 207, 64, 61, 183, 128, 25, 144, 151, 255, 97, 18, 132, 9, 190, 45, 219, 6, 121, 129, 218, 94, 140, 65, 36, 57, 245, 143, 118, 106, 113, 3, 239, 223, 31, 115, 8, 135, 101, 52, 85, 171, 247, 57, 19, 222, 107, 107, 99, 208, 2, 219, 218, 251, 253, 175, 41, 15, 74, 247, 97, 43, 48, 120, 253, 57, 89, 101, 28, 234, 181, 103, 92, 5, 246, 199, 57, 167, 254, 212, 30, 164, 189, 82, 98, 109, 207, 95, 79, 219, 88, 191, 121, 34, 214, 214, 231, 111, 82, 103, 181, 25, 19, 189, 36, 158, 121, 219, 144, 39, 32, 20, 75, 185, 27, 102, 199, 29, 77, 134, 165, 92, 164, 36, 215, 166, 89, 255, 159, 0, 122, 7, 114, 18, 144, 239, 216, 179, 16, 22, 49, 135, 14, 110, 201, 217, 103, 161, 159, 42, 251, 35, 120, 221, 159, 148, 34, 201, 11, 210, 139, 60, 149, 127, 115, 7, 185, 121, 10, 8, 223, 60, 59, 41, 14, 192, 27, 186, 140, 217, 183, 182, 10, 72, 69, 106, 93, 125, 195, 121, 140, 212, 204, 250, 65, 234, 73, 40, 41, 145, 125, 172, 44, 5, 251, 33, 0, 224, 121, 65, 186, 51, 166, 109, 191, 192, 5, 238, 188, 114, 153, 114, 213, 187, 111, 108, 50, 70, 231, 132, 80, 198, 34, 72, 131, 66, 128, 130, 229, 178, 171, 50, 215, 246, 107, 211, 5, 70, 86, 178, 165, 163, 236, 71, 250, 112, 86, 108, 183, 57, 240, 250, 90, 146, 1, 2, 241, 84, 82, 202, 33, 134, 143, 138, 224, 7, 33, 82, 111, 143, 212, 38, 156, 183, 149, 136, 214, 61, 130, 153, 96, 52, 33, 218, 91, 69, 113, 185, 89, 237, 12, 223, 151, 221, 66, 236, 201, 69, 177, 112, 32, 215, 2, 144, 201, 12, 156, 62, 163, 106, 42, 255, 15, 180, 225, 62, 191, 15, 181, 60, 117, 181, 93, 40, 178, 40, 73, 170, 41, 150, 151, 189, 221, 32, 219, 71, 83, 187, 6, 48, 171, 27, 245, 42, 166, 209, 255, 40, 37, 142, 203, 30, 199, 191, 150, 164, 96, 71, 180, 201, 3, 90, 200, 35, 96, 62, 153, 245, 147, 130, 62, 14, 185, 91, 207, 52, 201, 102, 9, 56, 154, 24, 167, 92, 153, 143, 66, 105, 124, 154, 59, 108, 206, 25, 112, 75, 40, 45, 141, 38, 176, 19, 5, 69, 104, 66, 149, 244, 9, 182, 198, 208, 22, 117, 6, 175, 204, 190, 94, 74, 90, 98, 221, 30, 158, 204, 117, 234, 14, 89, 80, 222, 61, 13, 191, 185, 251, 112, 58, 85, 105, 15, 210, 39, 236, 182, 146, 64, 47, 31, 99, 76, 211, 108, 42, 26, 192, 83, 165, 127, 167, 149, 18, 3, 100, 188, 77, 250, 110, 182, 138, 247, 46, 166, 229, 85, 252, 237, 172, 204, 53, 87, 168, 208, 24, 143, 170, 81, 240, 174, 57, 53, 57, 21, 47, 149, 177, 183, 150, 121, 9, 21, 238, 178, 227, 13, 125, 214, 204, 158, 102, 227, 109, 7, 127, 159, 235, 104, 124, 90, 129, 189, 211, 206, 37, 137, 42, 194, 97, 247, 219, 134, 63, 42, 161, 55, 223, 131, 173, 191, 215, 226, 54, 124, 236, 207, 170, 62, 235, 27, 29, 3, 254, 199, 251, 117, 255, 238, 183, 63, 255, 182, 190, 145, 53, 231, 63, 197, 108, 46, 65, 181, 238, 137, 44, 12, 123, 105, 21, 148, 10, 107, 218, 73, 154, 149, 77, 113, 126, 89, 62, 1, 201, 102, 71, 180, 147, 244, 84, 95, 44, 95, 7, 34, 194, 59, 136, 133, 30, 152, 203, 53, 19, 46, 100, 76, 28, 30, 153, 171, 87, 215, 63, 58, 239, 27, 231, 210, 85, 153, 17, 44, 214, 134, 253, 35, 149, 172, 231, 14, 42, 190, 233, 204, 6, 30, 62, 120, 248, 224, 143, 77, 152, 45, 137, 178, 42, 98, 65, 96, 119, 11, 137, 40, 155, 94, 196, 32, 24, 62, 76, 184, 113, 78, 102, 20, 24, 26, 19, 207, 50, 59, 147, 243, 243, 96, 209, 66, 10, 131, 57, 144, 149, 164, 231, 123, 134, 137, 179, 100, 247, 153, 139, 76, 108, 163, 87, 201, 54, 57, 115, 4, 142, 120, 141, 139, 88, 138, 203, 15, 150, 9, 238, 148, 89, 152, 192, 219, 208, 66, 104, 88, 62, 240, 86, 52, 203, 236, 8, 141, 138, 223, 18, 175, 17, 50, 99, 31, 94, 59, 129, 116, 108, 148, 205, 41, 114, 129, 20, 136, 180, 35, 191, 240, 188, 63, 141, 237, 65, 136, 203, 193, 209, 40, 240, 82, 43, 201, 239, 172, 21, 99, 167, 86, 237, 104, 93, 185, 224, 90, 42, 22, 109, 29, 251, 26, 143, 242, 185, 172, 114, 125, 245, 134, 29, 145, 134, 189, 114, 148, 147, 32, 62, 112, 241, 180, 120, 64, 123, 140, 127, 207, 193, 184, 235, 146, 43, 137, 194, 132, 183, 158, 26, 46, 67, 3, 219, 45, 40, 165, 29, 242, 181, 228, 83, 229, 226, 118, 253, 214, 66, 95, 248, 5, 143, 195, 240, 243, 52, 27, 99, 101, 162, 106, 133, 6, 100, 91, 254, 179, 80, 241, 131, 96, 50, 174, 204, 126, 219, 61, 218, 194, 81, 81, 104, 149, 203, 21, 81, 207, 7, 234, 103, 168, 31, 222, 46, 32, 71, 226, 164, 200, 236, 168, 83, 29, 196, 141, 88, 23, 197, 246, 193, 144, 107, 205, 184, 141, 111, 53, 119, 233, 240, 117, 45, 191, 34, 113, 174, 179, 27, 20, 62, 164, 35, 133, 79, 63, 93, 115, 126, 187, 163, 47, 114, 155, 121, 200, 200, 62, 221, 193, 165, 183, 218, 186, 118, 162, 225, 173, 206, 72, 76, 231, 163, 223, 58, 61, 37, 16, 199, 55, 108, 43, 43, 139, 20, 237, 61, 61, 254, 159, 116, 27, 251, 110, 28, 107, 134, 224, 107, 83, 169, 130, 77, 225, 138, 40, 112, 232, 68, 119, 191, 7, 66, 219, 88, 5, 105, 186, 21, 55, 97, 50, 133, 155, 186, 107, 109, 96, 208, 25, 118, 241, 78, 238, 166, 183, 126, 92, 61, 49, 34, 37, 106, 181, 46, 21, 155, 247, 248, 104, 9, 250, 194, 101, 249, 215, 140, 123, 102, 49, 119, 27, 245, 136, 155, 21, 64, 104, 100, 205, 50, 67, 60, 3, 2, 250, 99, 161, 31, 245, 245, 130, 85, 18, 1, 29, 38, 180, 108, 63, 67, 161, 116, 174, 51, 60, 11, 212, 28, 99, 99, 24, 245, 93, 68, 220, 32, 49, 208, 28, 229, 253, 240, 144, 125, 75, 201, 2, 68, 162, 104, 63, 4, 234, 113, 0, 141, 139, 163, 34, 44, 200, 159, 232, 227, 241, 123, 146, 107, 60, 66, 20, 188, 208, 37, 173, 42, 9, 161, 66, 201, 242, 96, 37, 190, 236, 240, 117, 228, 205, 44, 242, 239, 80, 47, 84, 105, 240, 3, 54, 228, 205, 94, 35, 50, 112, 221, 198, 17, 86, 16, 36, 170, 62, 51, 207, 210, 190, 96, 123, 101, 176, 89, 1, 35, 195, 241, 31, 215, 76, 63, 176, 222, 93, 106, 62, 174, 163, 127, 32, 67, 129, 254, 17, 196, 84, 28, 71, 170, 31, 226, 74, 255, 255, 241, 74, 79, 47, 88, 125, 12, 245, 209, 100, 45, 53, 50, 92, 15, 63, 36, 72, 165, 21, 186, 95, 74, 168, 140, 129, 156, 152, 74, 63, 225, 242, 200, 101, 166, 28, 234, 157, 193, 11, 154, 176, 33, 35, 195, 88, 131, 144, 97, 169, 87, 154, 184, 145, 86, 181, 69, 24, 165, 206, 81, 21, 194, 185, 164, 172, 149, 0, 13, 65, 14, 35, 20, 148, 127, 225, 231, 181, 163, 245, 77, 29, 217, 17, 140, 87, 160, 77, 25, 90, 59, 176, 227, 5, 200, 0, 150, 185, 28, 7, 242, 123, 4, 36, 103, 128, 168, 108, 46, 203, 111, 110, 109, 234, 239, 51, 40, 241, 236, 86, 87, 106, 77, 111, 103, 32, 66, 89, 143, 110, 66, 77, 239, 147, 55, 117, 110, 73, 186, 8, 56, 190, 167, 193, 91, 112, 137, 245, 97, 19, 59, 245, 174, 249, 204, 22, 9, 67, 39, 184, 134, 42, 161, 149, 178, 130, 162, 245, 192, 178, 134, 98, 197, 105, 62, 11, 205, 98, 34, 184, 222, 14, 7, 189, 69, 224, 49, 38, 119, 108, 29, 99, 222, 252, 8, 80, 169, 139, 105, 162, 20, 86, 26, 18, 161, 144, 210, 13, 87, 246, 77, 122, 144, 34, 226, 64, 251, 94, 147, 122, 103, 94, 198, 90, 175, 208, 171, 61, 119, 218, 88, 120, 111, 80, 112, 217, 188, 22, 108, 253, 77, 203, 27, 12, 155, 135, 47, 253, 4, 21, 55, 86, 242, 131, 25, 120, 94, 135, 41, 47, 1, 227, 4, 168, 107, 178, 151, 248, 233, 81, 42, 244, 69, 133, 221, 69, 173, 74, 46, 254, 213, 226, 42, 148, 100, 221, 89, 106, 116, 93, 30, 73, 4, 125, 28, 89, 55, 9, 244, 215, 85, 107, 205, 99, 247, 21, 27, 208, 92, 172, 207, 82, 242, 91, 245, 6, 187, 45, 76, 132, 32, 50, 56, 63, 142, 228, 219, 80, 93, 84, 108, 216, 77, 62, 73, 148, 36, 235, 111, 247, 183, 98, 32, 173, 87, 237, 118, 195, 55, 212, 212, 249, 70, 154, 217, 254, 144, 121, 238, 209, 144, 235, 225, 21, 148, 152, 155, 39, 174, 61, 146, 128, 84, 67, 225, 136, 106, 234, 209, 97, 88, 73, 84, 141, 103, 224, 20, 111, 132, 20, 25, 116, 248, 5, 82, 37, 97, 113, 136, 40, 88, 233, 36, 6, 63, 229, 85, 205, 104, 246, 192, 66, 20, 207, 16, 5, 36, 84, 210, 90, 14, 155, 62, 239, 76, 226, 136, 207, 121, 171, 29, 226, 54, 20, 140, 46, 71, 182, 206, 148, 44, 146, 218, 23, 223, 190, 111, 216, 97, 237, 51, 101, 148, 93, 95, 101, 226, 245, 193, 229, 219, 96, 200, 203, 17, 214, 164, 97, 193, 238, 235, 95], - [140, 146, 79, 105, 126, 63, 202, 214, 133, 174, 101, 60, 45, 179, 182, 200, 203, 249, 155, 38, 243, 239, 8, 182, 15, 59, 132, 134, 37, 223, 149, 167, 155, 95, 233, 149, 67, 229, 180, 68, 8, 164, 214, 31, 247, 163, 86, 222, 20, 185, 123, 115, 155, 156, 53, 178, 198, 236, 147, 98, 228, 171, 18, 91, 154, 132, 167, 97, 171, 163, 114, 184, 61, 164, 113, 236, 231, 33, 74, 51, 242, 146, 172, 217, 4, 131, 174, 223, 211, 51, 98, 113, 40, 56, 242, 22, 69, 70, 183, 179, 21, 184, 118, 111, 251, 255, 58, 226, 17, 81, 56, 57, 118, 145, 149, 39, 244, 216, 76, 176, 193, 167, 111, 20, 7, 84, 106, 19, 13, 43, 199, 187, 211, 36, 214, 128, 50, 132, 175, 36, 121, 213, 103, 31, 130, 43, 19, 42, 34, 95, 17, 114, 204, 166, 125, 14, 20, 117, 14, 232, 142, 65, 158, 90, 153, 230, 58, 218, 28, 208, 8, 129, 161, 139, 254, 60, 85, 26, 214, 137, 115, 85, 203, 185, 95, 122, 58, 167, 111, 174, 205, 107, 103, 232, 238, 152, 209, 21, 205, 48, 234, 38, 51, 250, 31, 253, 113, 13, 238, 246, 116, 235, 77, 152, 208, 104, 133, 141, 234, 145, 141, 42, 150, 27, 192, 167, 111, 22, 11, 75, 249, 172, 127, 100, 16, 209, 180, 21, 240, 46, 200, 57, 192, 24, 95, 149, 84, 89, 73, 17, 102, 224, 156, 137, 153, 140, 57, 130, 161, 75, 191, 52, 120, 17, 48, 23, 164, 177, 186, 82, 141, 2, 91, 10, 64, 177, 117, 108, 113, 193, 140, 100, 183, 139, 46, 158, 98, 237, 125, 27, 60, 224, 202, 195, 184, 11, 138, 184, 227, 96, 31, 29, 99, 32, 197, 137, 148, 73, 128, 25, 214, 193, 40, 91, 15, 190, 145, 74, 67, 24, 204, 200, 52, 197, 117, 188, 223, 32, 0, 242, 74, 136, 12, 248, 60, 158, 121, 150, 173, 219, 6, 198, 215, 188, 149, 253, 18, 250, 209, 170, 59, 139, 197, 53, 93, 195, 119, 53, 153, 54, 192, 131, 234, 149, 49, 44, 243, 212, 208, 104, 235, 204, 26, 190, 254, 18, 28, 171, 69, 83, 237, 161, 206, 151, 112, 179, 207, 168, 44, 155, 189, 61, 19, 208, 213, 201, 163, 160, 186, 129, 138, 23, 218, 16, 12, 224, 100, 113, 229, 165, 55, 85, 218, 99, 78, 95, 226, 221, 176, 129, 239, 221, 100, 48, 167, 38, 167, 79, 183, 248, 28, 131, 97, 164, 95, 203, 212, 176, 157, 136, 186, 189, 71, 34, 28, 115, 35, 35, 166, 82, 254, 153, 131, 142, 133, 190, 143, 169, 200, 131, 202, 253, 221, 182, 82, 17, 159, 78, 205, 213, 206, 10, 89, 102, 237, 108, 96, 106, 221, 64, 134, 250, 12, 235, 190, 60, 88, 159, 64, 90, 71, 23, 85, 180, 70, 252, 122, 172, 28, 193, 55, 239, 163, 35, 146, 96, 71, 131, 96, 130, 218, 112, 25, 74, 219, 238, 247, 16, 129, 243, 54, 154, 11, 101, 245, 186, 38, 198, 161, 186, 127, 184, 174, 180, 143, 165, 245, 181, 64, 159, 142, 124, 29, 67, 66, 50, 17, 139, 234, 93, 192, 10, 84, 13, 157, 129, 150, 225, 132, 174, 30, 64, 183, 221, 116, 71, 143, 209, 142, 174, 29, 87, 106, 124, 97, 182, 29, 120, 107, 136, 105, 36, 159, 126, 42, 226, 32, 156, 11, 212, 37, 87, 65, 46, 49, 111, 81, 236, 21, 223, 87, 69, 208, 188, 254, 57, 78, 20, 49, 155, 41, 160, 165, 214, 99, 0, 110, 108, 82, 204, 13, 195, 255, 91, 62, 238, 48, 234, 135, 35, 137, 122, 74, 232, 2, 58, 250, 195, 93, 155, 14, 203, 144, 87, 73, 4, 245, 18, 118, 160, 228, 46, 152, 110, 6, 188, 162, 80, 75, 166, 146, 230, 141, 197, 117, 250, 243, 198, 97, 126, 248, 112, 191, 32, 56, 39, 214, 253, 189, 237, 181, 59, 88, 244, 243, 30, 201, 137, 246, 174, 120, 5, 193, 71, 196, 157, 115, 52, 192, 250, 124, 35, 101, 13, 55, 223, 123, 80, 30, 33, 21, 211, 14, 8, 94, 90, 148, 176, 4, 187, 235, 169, 85, 120, 96, 42, 114, 28, 41, 59, 18, 114, 27, 158, 118, 95, 70, 80, 42, 145, 217, 167, 104, 242, 233, 2, 149, 182, 188, 219, 68, 8, 246, 34, 123, 23, 35, 185, 91, 124, 149, 208, 12, 248, 24, 115, 210, 28, 123, 168, 221, 94, 6, 146, 130, 82, 155, 237, 154, 77, 22, 122, 142, 160, 195, 120, 120, 138, 128, 113, 147, 31, 163, 219, 45, 151, 122, 150, 183, 239, 92, 191, 241, 23, 213, 223, 91, 172, 249, 53, 156, 129, 61, 186, 61, 66, 24, 191, 161, 186, 98, 227, 63, 135, 177, 0, 175, 131, 90, 172, 45, 128, 18, 135, 197, 10, 219, 107, 62, 64, 19, 219, 238, 225, 30, 124, 75, 199, 242, 84, 113, 247, 50, 63, 146, 4, 135, 244, 8, 168, 130, 81, 198, 75, 227, 252, 175, 30, 151, 105, 103, 129, 34, 222, 46, 61, 112, 168, 102, 245, 237, 15, 96, 197, 158, 231, 41, 183, 218, 216, 216, 42, 190, 12, 192, 115, 185, 4, 183, 95, 120, 148, 40, 193, 52, 175, 213, 217, 238, 93, 209, 39, 135, 130, 193, 47, 150, 93, 233, 163, 66, 168, 115, 234, 43, 153, 162, 219, 50, 43, 153, 63, 23, 195, 126, 183, 233, 240, 81, 78, 148, 44, 172, 60, 248, 191, 19, 211, 114, 2, 242, 175, 57, 175, 248, 50, 33, 71, 198, 17, 145, 233, 130, 63, 222, 245, 122, 87, 222, 123, 218, 142, 89, 133, 91, 44, 128, 206, 167, 42, 37, 199, 102, 236, 21, 223, 23, 125, 10, 21, 73, 55, 162, 230, 80, 148, 75, 41, 207, 251, 208, 121, 76, 187, 179, 183, 134, 181, 200, 246, 42, 139, 159, 199, 41, 142, 202, 99, 116, 194, 122, 163, 12, 95, 128, 207, 186, 167, 233, 247, 52, 59, 230, 158, 196, 175, 119, 7, 43, 179, 234, 109, 205, 43, 137, 40, 134, 129, 223, 217, 201, 80, 175, 240, 252, 16, 189, 133, 59, 149, 193, 102, 31, 160, 139, 254, 103, 229, 13, 228, 78, 5, 156, 24, 229, 245, 41, 127, 211, 229, 83, 126, 134, 127, 144, 74, 59, 153, 6, 202, 125, 196, 18, 135, 143, 166, 179, 213, 197, 63, 88, 155, 123, 194, 99, 91, 167, 42, 104, 243, 208, 160, 145, 101, 222, 88, 105, 159, 142, 141, 177, 84, 248, 68, 4, 39, 133, 231, 42, 40, 30, 101, 238, 133, 187, 31, 128, 173, 27, 96, 146, 44, 27, 235, 110, 172, 22, 54, 26, 236, 40, 83, 81, 211, 184, 199, 160, 226, 74, 165, 10, 252, 52, 9, 238, 183, 179, 67, 111, 254, 123, 92, 30, 170, 183, 41, 27, 143, 205, 83, 225, 182, 203, 75, 200, 158, 51, 36, 245, 69, 147, 140, 62, 102, 248, 248, 181, 52, 66, 213, 20, 16, 135, 11, 114, 173, 160, 91, 69, 50, 254, 26, 2, 140, 161, 250, 51, 134, 75, 240, 244, 161, 176, 198, 1, 37, 29, 33, 98, 186, 38, 122, 238, 209, 101, 159, 137, 35, 24, 239, 200, 218, 235, 155, 101, 210, 81, 134, 41, 35, 205, 80, 81, 229, 235, 186, 203, 123, 246, 207, 103, 217, 94, 236, 246, 226, 18, 90, 33, 31, 41, 254, 107, 66, 26, 25, 103, 71, 170, 249, 183, 208, 163, 27, 214, 48, 152, 77, 7, 76, 1, 220, 178, 158, 71, 207, 41, 51, 77, 10, 178, 77, 61, 152, 6, 247, 228, 171, 11, 134, 43, 225, 114, 31, 244, 207, 82, 153, 183, 18, 57, 215, 75, 186, 193, 146, 211, 134, 144, 66, 92, 63, 54, 49, 27, 155, 205, 18, 249, 197, 15, 103, 229, 155, 106, 149, 104, 255, 223, 253, 115, 6, 165, 240, 187, 189, 17, 83, 190, 136, 175, 171, 101, 136, 213, 109, 136, 8, 6, 219, 241, 231, 198, 203, 112, 49, 228, 47, 169, 148, 251, 202, 211, 53, 81, 101, 17, 36, 93, 117, 103, 142, 112, 252, 26, 69, 86, 153, 220, 208, 19, 118, 168, 108, 204, 117, 191, 189, 97, 3, 15, 50, 167, 188, 46, 20, 199, 46, 69, 139, 96, 4, 185, 39, 16, 174, 231, 21, 160, 13, 98, 209, 206, 17, 40, 107, 163, 106, 243, 195, 46, 138, 5, 69, 150, 7, 90, 61, 13, 236, 231, 12, 92, 251, 184, 120, 170, 51, 163, 251, 166, 140, 167, 191, 94, 250, 121, 77, 152, 204, 142, 154, 154, 186, 212, 212, 55, 155, 134, 13, 145, 194, 61, 60, 131, 46, 97, 250, 122, 67, 164, 245, 83, 122, 140, 122, 41, 212, 2, 190, 161, 90, 199, 195, 186, 97, 234, 41, 186, 225, 34, 26, 14, 7, 159, 172, 228, 7, 27, 243, 250, 108, 246, 200, 218, 247, 140, 109, 175, 187, 250, 135, 231, 161, 5, 201, 235, 216, 64, 165, 132, 139, 75, 120, 78, 196, 8, 5, 98, 184, 241, 36, 83, 105, 69, 153, 6, 127, 161, 35, 123, 110, 91, 208, 220, 255, 111, 121, 14, 109, 173, 161, 100, 145, 120, 74, 86, 190, 154, 182, 173, 54, 197, 238, 123, 62, 115, 27, 67, 170, 15, 1, 37, 35, 221, 214, 226, 113, 253, 125, 75, 245, 92, 63, 167, 120, 37, 124, 151, 214, 108, 252, 165, 60, 130, 185, 75, 212, 54, 30, 195, 64, 59, 41, 60, 23, 115, 31, 14, 18, 199, 55, 10, 227, 146, 19, 25, 168, 24, 98, 246, 114, 202, 80, 253, 95, 120, 42, 27, 190, 4, 20, 72, 201, 251, 70, 99, 119, 66, 11, 223, 144, 159, 92, 80, 142, 148, 131, 99, 228, 217, 218, 231, 89, 105, 206, 177, 66, 58, 229, 47, 67, 71, 176, 163, 147, 7, 86, 70, 167, 248, 228, 17, 106, 216, 161, 119, 25, 199, 151, 140, 107, 97, 0, 175, 129, 107, 131, 43, 205, 70, 218, 85, 87, 185, 37, 125, 184, 5, 115, 70, 234, 154, 58, 90, 44, 218, 121, 173, 3, 3, 232, 67, 25, 131, 104, 131, 20, 253, 175, 78, 184, 108, 201, 160, 222, 94, 95, 156, 111, 14, 178, 26, 95, 125, 61, 104, 132, 100, 74, 159, 88, 194, 83, 163, 129, 133, 204, 157, 128, 208, 255, 19, 119, 16, 166, 219, 253, 168, 145, 4, 156, 13, 70, 218, 53, 248, 81, 61, 50, 239, 162, 59, 219, 238, 154, 127, 235, 98, 220, 148, 63, 79, 77, 40, 176, 227, 150, 216, 149, 190, 240, 9, 195, 90, 6, 8, 63, 92, 84, 214, 176, 235, 185, 98, 102, 222, 158, 155, 38, 25, 3, 193, 90, 78, 31, 159, 25, 133, 213, 1, 219, 236, 6, 37, 5, 214, 64, 13, 99, 136, 194, 99, 18, 105, 184, 7, 200, 152, 16, 28, 60, 186, 123, 106, 93, 205, 239, 178, 207, 204, 86, 142, 96, 104, 40, 206, 48, 41, 165, 51, 137, 213, 214, 163, 174, 216, 168, 228, 87, 236, 9, 228, 143, 42, 134, 180, 155, 31, 154, 197, 193, 255, 115, 53, 61, 31, 111, 107, 31, 31, 119, 138, 233, 71, 70, 57, 223, 231, 221, 51, 187, 9, 117, 198, 107, 206, 96, 79, 150, 60, 193, 30, 159, 64, 68, 90, 211, 101, 32, 88, 142, 140, 221, 173, 237, 137, 188, 221, 231, 16, 149, 100, 64, 230, 122, 56, 124, 46, 195, 180, 166, 56, 190, 88, 217, 206, 102, 65, 19, 88, 164, 147, 233, 219, 2, 81, 194, 48, 14, 201, 58, 204, 30, 179, 46, 11, 139, 251, 198, 84, 166, 27, 80, 97, 249, 116, 164, 220, 125, 130, 145, 2, 120, 228, 244, 15, 112, 121, 2, 241, 85, 11, 99, 154, 49, 37, 4, 51, 204, 135, 164, 196, 111, 16, 198, 59, 125, 182, 191, 249, 176, 212, 235, 50, 241, 245, 59, 201, 36, 133, 177, 239, 79, 109, 234, 223, 30, 228, 84, 101, 61, 22, 221, 111, 40, 122, 106, 10, 149, 143, 49, 229, 115, 253, 139, 158, 152, 139, 203, 138, 123, 216, 175, 203, 162, 161, 148, 105, 7, 48, 51, 116, 222, 112, 211, 251, 107, 245, 52, 66, 187, 211, 244, 209, 79, 227, 238, 121, 66, 172, 147, 91, 144, 174, 123, 196, 232, 83, 188, 0, 199, 90, 189, 200, 155, 133, 135, 157, 135, 94, 24, 97, 250, 45, 156, 95, 208, 138, 83, 163, 253, 38, 37, 53, 208, 21, 15, 100, 92, 148, 65, 204, 104, 218, 120, 77, 140, 9, 164, 216, 189, 154, 146, 197, 200, 223, 221, 109, 181, 107, 218, 114, 129, 105, 170, 183, 16, 143, 0, 250, 199, 188, 151, 5, 69, 28, 134, 68, 109, 187, 250, 217, 199, 196, 153, 76, 205, 225, 248, 38, 24, 34, 26, 116, 36, 159, 106, 214, 94, 90, 168, 46, 178, 7, 244, 201, 82, 237, 5, 16, 120, 195, 182, 239, 51, 250, 50, 63, 63, 220, 175, 243, 102, 158, 15, 147, 41, 64, 82, 3, 22, 29, 34, 137, 87, 122, 235, 228, 2, 130, 69, 213, 99, 191, 27, 222, 65, 219, 65, 27, 206, 159, 210, 134, 154, 87, 179, 36, 230, 150, 206, 186, 251, 36, 199, 196, 2, 160, 116, 126, 104, 107, 60, 221, 22, 68, 221, 32, 150, 70, 13, 23, 48, 66, 23, 116, 107, 114, 179, 13, 255, 200, 48, 254, 134, 103, 0, 172, 123, 19, 128, 171, 89, 217, 207, 67, 247, 189, 228, 167, 204, 110, 37, 36, 130, 165, 67, 170, 216, 33, 217, 162, 57, 227, 165, 246, 150, 2, 18, 129, 211, 192, 93, 26, 78, 206, 45, 53, 79, 112, 45, 200, 149, 140, 61, 142, 1, 231, 51, 250, 28, 45, 204, 161, 93, 103, 238, 209, 96, 82, 97, 44, 242, 134, 236, 125, 68, 218, 131, 159, 124, 81, 250, 33, 142, 0, 83, 90, 213, 146, 128, 217, 150, 157, 247, 82, 18, 204, 34, 191, 19, 114, 124, 120, 142, 35, 161, 150, 125, 242, 207, 237, 124, 130, 221, 167, 5, 56, 114, 154, 10, 29, 114, 102, 204, 162, 198, 81, 182, 117, 156, 79, 5, 191, 153, 248, 83, 206, 169, 4, 25, 73, 91, 68, 180, 184, 189, 99, 27, 1, 106, 59, 74, 208, 200, 36, 60, 74, 74, 74, 205, 16, 214, 230, 134, 130, 81, 62, 130, 47, 169, 126, 84, 236, 143, 62, 104, 88, 149, 124, 139, 203, 214, 69, 90, 226, 91, 91, 91, 48, 88, 185, 130, 217, 175, 152, 240, 59, 139, 24, 6, 89, 122, 216, 136, 223, 34, 182, 252, 231, 237, 79, 15, 57, 12, 88, 229, 221, 225, 223, 238, 159, 152, 70, 181, 233, 94, 179, 140, 243, 109, 108, 159, 32, 138, 73, 36, 142, 45, 18, 11, 63, 55, 239, 13, 157, 4, 17, 159, 67, 12, 5, 217, 255, 133, 121, 136, 138, 9, 92, 34, 11, 179, 52, 172, 239, 60, 187, 117, 219, 155, 129, 80, 201, 202, 189, 63, 175, 80, 116, 129, 202, 32, 135, 250, 129, 27, 136, 22, 174, 234, 22, 216, 182, 57, 96, 235, 10, 248, 206, 98, 46, 144, 125, 35, 45, 255, 165, 129, 53, 85, 196, 231, 16, 161, 226, 58, 115, 36, 97, 242, 40, 188, 222, 209, 186, 171, 120, 173, 90, 89, 40, 80, 0, 180, 194, 249, 195, 215, 244, 124, 24, 120, 121, 122, 77, 101, 106, 188, 60, 166, 97, 76, 152, 244, 215, 32, 37, 74, 36, 15, 251, 5, 74, 45, 110, 79, 155, 36, 151, 154, 252, 234, 245, 81, 224, 168, 171, 138, 120, 197, 254, 15, 102, 44, 198, 231, 214, 158, 78, 165, 77, 110, 53, 21, 40, 205, 10, 244, 148, 75, 168, 92, 31, 143, 212, 230, 34, 124, 7, 228, 200, 80, 76, 22, 129, 110, 26, 115, 118, 161, 127, 208, 197, 138, 45, 244, 6, 157, 18, 26, 178, 233, 202, 159, 237, 13, 217, 250, 247, 217, 168, 214, 226, 160, 179, 76, 244, 14, 203, 162, 69, 112, 41, 161, 13, 127, 9, 2, 45, 142, 237, 23, 29, 231, 247, 16, 32, 21, 126, 86, 156, 121, 209, 136, 131, 93, 158, 166, 141, 80, 170, 111, 78, 29, 114, 124, 60, 180, 146, 4, 59, 12, 21, 249, 248, 93, 13, 90, 253, 77, 155, 58, 122, 23, 133, 103, 201, 202, 181, 0, 208, 147, 64, 5, 103, 14, 155, 39, 7, 255, 168, 91, 196, 207, 20, 48, 112, 29, 14, 193, 126, 101, 147, 253, 10, 192, 150, 178, 159, 31, 81, 47, 234, 1, 244, 176, 216, 158, 135, 31, 126, 201, 109, 125, 120, 33, 227, 8, 97, 177, 151, 27, 110, 216, 122, 110, 250, 4, 254, 100, 164, 93, 194, 74, 129, 90, 134, 80, 112, 209, 138, 201, 238, 39, 124, 5, 196, 227, 45, 238, 234, 176, 129, 71, 70, 160, 23, 39, 153, 19, 59, 83, 172, 244, 149, 220, 91, 223, 192, 215, 206, 244, 168, 174, 200, 121, 239, 103, 241, 195, 218, 255, 107, 64, 218, 48, 229, 31, 99, 176, 69, 182, 156, 169, 133, 164, 37, 126, 20, 162, 97, 8, 32, 235, 203, 89, 165, 41, 180, 236, 215, 5, 28, 40, 138, 248, 36, 231, 137, 242, 135, 206, 85, 99, 199, 121, 234, 73, 104, 0, 249, 133, 56, 6, 211, 75, 27, 34, 236, 195, 18, 111, 79, 202, 190, 253, 14, 252, 231, 17, 108, 190, 33, 200, 59, 163, 194, 184, 14, 70, 49, 53, 185, 200, 207, 44, 71, 245, 76, 117, 40, 207, 34, 250, 126, 24, 231, 32, 248, 218, 156, 213, 67, 168, 95, 175, 193, 68, 228, 170, 82, 203, 56, 204, 167, 68, 34, 38, 198, 62, 46, 136, 184, 192, 122, 105, 138, 17, 158, 9, 203, 96, 255, 152, 14, 171, 17, 83, 202, 151, 10, 151, 104, 89, 51, 144, 13, 95, 154, 243, 212, 37, 253, 116, 84, 3, 151, 20, 198, 55, 58, 154, 37, 210, 167, 209, 21, 224, 54, 232, 248, 106, 208, 216, 153, 253, 76, 191, 123, 148, 250, 23, 248, 108, 221, 104, 147, 150, 64, 208, 105, 171, 64, 223, 141, 154, 11, 210, 18, 242, 206, 239, 30, 213, 97, 145, 163, 148, 232, 37, 218, 8, 242, 183, 105, 214, 150, 71, 86, 214, 171, 202, 131, 6, 53, 70, 242, 198, 224, 145, 131, 254, 71, 192, 98, 69, 24, 173, 238, 190, 213, 26, 53, 222, 215, 0, 137, 247, 116, 233, 13, 104, 143, 155, 105, 236, 24, 127, 91, 130, 8, 215, 157, 247, 243, 22, 162, 198, 97, 118, 253, 108, 77, 213, 50, 155, 37, 239, 102, 227, 237, 136, 157, 34, 37, 87, 191, 172, 174, 147, 26, 31, 140, 70, 212, 111, 206, 181, 84, 208, 45, 181, 206, 159, 68, 162, 247, 75, 10, 23, 239, 247, 199, 61, 229, 57, 141, 29, 34, 3, 132, 15, 64, 178, 132, 184, 185, 127, 197, 20, 80, 4, 20, 136, 86, 84, 132, 164, 222, 174, 139, 96, 148, 50, 218, 61, 77, 76, 89, 249, 212, 3, 149, 152, 12, 120, 13, 169, 238, 243, 146, 149, 55, 97, 120, 5, 24, 181, 182, 60, 54, 178, 93, 178, 204, 216, 21, 1, 19, 217, 57, 210, 134, 253, 219, 109, 133, 102, 122, 178, 240, 191, 165, 93, 180, 4, 128, 2, 120, 134, 229, 15, 23, 211, 25, 125, 4, 96, 31, 120, 233, 72, 53, 254, 86, 227, 135, 28, 147, 16, 134, 185, 210, 158, 102, 235, 158, 40, 196, 140, 99, 151, 249, 86, 234, 172, 229, 120, 171, 102, 230, 109, 207, 40, 210, 234, 96, 141, 178, 6, 243, 184, 171, 49, 180, 131, 208, 125, 101, 104, 53, 4, 232, 69, 72, 118, 79, 162, 46, 2, 80, 113, 134, 104, 51, 222, 11, 255, 226, 181, 106, 33, 76, 189, 123, 74, 4, 241, 231, 150, 29, 210, 117, 122, 173, 176, 23, 206, 108, 180, 130, 13, 241, 53, 4, 200, 142, 216, 216, 37, 75, 236, 25, 174, 195, 18, 11, 209, 186, 7, 146, 234, 113, 89, 172, 52, 115, 104, 132, 42, 144, 35, 75, 178, 13, 98, 17, 115, 48, 4, 47, 125, 222, 25, 239, 215, 125, 58, 3, 97, 80, 79, 230, 2, 213, 107, 229, 221, 31, 6, 41, 22, 197, 43, 118, 143, 80, 181, 23, 135, 95, 70, 153, 68, 71, 65, 15, 21, 179, 58, 89, 228, 224, 135, 129, 21, 249, 46, 145, 54, 14, 252, 184, 105, 72, 105, 98, 141, 47, 48, 108, 95, 17, 251, 231, 124, 240, 157, 137, 16, 217, 30, 249, 78, 180, 240, 233, 54, 114, 82, 198, 85, 31, 10, 102, 131, 45, 82, 11, 30, 230, 108, 123, 85, 184, 86, 235, 79, 65, 180, 94, 132, 38, 140, 187, 115, 243, 71, 153, 143, 83, 182, 153, 115, 99, 95, 64, 112, 8, 3, 160, 212, 68, 113, 136, 247, 30, 185, 62, 5, 78, 16, 229, 121, 199, 122, 167, 66, 106, 84, 156, 241, 71, 10, 169, 227, 140, 153, 141, 105, 21, 151, 121, 177, 209, 233, 27, 223, 150, 188, 68, 40, 106, 252, 213, 148, 169, 19, 209, 221, 185, 155, 18, 100, 168, 84, 94, 102, 248, 49, 179, 211, 21, 151, 208, 180, 131, 34, 96, 163, 155, 26, 151, 157, 105, 206, 58, 175, 193, 5, 106, 8, 137, 101, 168, 220, 147, 73, 138, 73, 108, 233, 161, 43, 219, 241, 140, 237, 6, 176, 223, 193, 185, 5, 210, 87, 98, 231, 180, 37, 126, 226, 244, 117, 87, 185, 160, 25, 11, 160, 244, 91, 59, 85, 149, 51, 70, 102, 134, 40, 127, 94, 22, 202, 192, 40, 198, 155, 92, 233, 92, 77, 224, 84, 101, 79, 240, 104, 7, 161, 167, 173, 114, 159, 82, 179, 49, 255, 61, 79, 160, 252, 224, 80, 14, 31, 40, 190, 186, 139, 87, 42, 229, 233, 197, 24, 252, 5, 51, 114, 29, 208, 202, 54, 99, 131, 226, 85, 212, 95, 123, 165, 67, 95, 80, 169, 37, 184, 77, 61, 224, 169, 140, 223, 11, 65, 184, 79, 71, 59, 48, 207, 38, 205, 2, 132, 197, 179, 78, 100, 152, 33, 242, 126, 25, 143, 198, 101, 16, 167, 89, 16, 103, 83, 153, 175, 134, 120, 5, 62, 235, 119, 48, 164, 138, 107, 23, 126, 228, 128, 255, 12, 88, 24, 210, 8, 187, 151, 212, 117, 229, 210, 233, 136, 1, 249, 139, 34, 161, 167, 72, 166, 10, 12, 123, 82, 110, 232, 75, 21, 224, 251, 204, 114, 103, 152, 45, 180, 177, 171, 36, 4, 128, 255, 246, 154, 141, 143, 173, 202, 127, 242, 144, 229, 11, 83, 248, 117, 192, 146, 5, 1, 212, 158, 109, 93, 46, 223, 72, 194, 205, 112, 196, 31, 153, 62, 142, 2, 67, 60, 7, 221, 11, 241, 222, 110, 119, 237, 82, 88, 189, 49, 146, 157, 219, 154, 62, 10, 48, 168, 255, 96, 162, 227, 50, 230, 224, 61, 218, 29, 21, 182, 241, 199, 13, 248, 246, 187, 216, 207, 109, 30, 159, 96, 89, 60, 203, 24, 241, 95, 35, 70, 202, 66, 35, 114, 15, 249, 212, 62, 111, 38, 142, 117, 114, 199, 116, 54, 36, 215, 142, 163, 151, 55, 210, 154, 53, 218, 38, 106, 192, 151, 87, 65, 241, 152, 202, 233, 120, 178, 127, 230, 249, 221, 4, 32, 41, 103, 139, 183, 32, 36, 165, 75, 107, 54, 42, 173, 19, 65, 16, 81, 155, 178, 228, 124, 38, 113, 36, 95, 116, 202, 243, 32, 6, 140, 248, 3, 2, 151, 224, 90, 249, 5, 156, 184, 243, 70, 48, 37, 17, 75, 181, 174, 155, 237, 15, 54, 83, 21, 227, 5, 100, 232, 218, 217, 104, 227, 195, 28, 63, 50, 220, 0, 164, 244, 246, 252, 2, 163, 250, 109, 132, 20, 95, 18, 59, 193, 88, 88, 237, 112, 97, 49, 28, 115, 74, 209, 181, 119, 28, 178, 5, 230, 71, 160, 148, 46, 223, 4, 213, 103, 170, 163, 9, 132, 138, 87, 126, 115, 248, 190, 163, 254, 9, 172, 248, 137, 216, 202, 152, 215, 201, 24, 41, 0, 194, 219, 152, 184, 116, 105, 179, 22, 208, 58, 132, 5, 21, 97, 181, 80, 146, 58, 159, 232, 150, 176, 243, 85, 118, 7, 199, 205, 205, 98, 76, 243, 110, 109, 14, 233, 21, 223, 75, 5, 205, 98, 174, 33, 210, 63, 167, 188, 196, 33, 236, 97, 116, 88, 238, 27, 135, 155, 162, 192, 98, 159, 231, 100, 130, 194, 240, 4, 81, 118, 12, 138, 45, 68, 49, 252, 221, 30, 224, 170, 11, 232, 62, 63, 24, 76, 188, 240, 85, 48, 119, 240, 64, 41, 48, 74, 187, 122, 184, 215, 167, 158, 254, 96, 232, 251, 188, 233, 180, 99, 72, 253, 84, 85, 54, 83, 199, 48, 36, 233, 224, 190, 190, 153, 170, 233, 244, 79, 187, 165, 139, 27, 150, 254, 210, 75, 82, 249, 140, 28, 3, 124, 75, 62, 205, 116, 236, 9, 159, 195, 133, 22, 86, 156, 42, 6, 251, 50, 175, 154, 87, 41, 11, 143, 240, 150, 190, 170, 188, 161, 209, 196, 225, 199, 241, 244, 230, 164, 246, 57, 144, 248, 28, 124, 206, 32, 224, 131, 75, 56, 140, 131, 73, 5, 0, 12, 147, 60, 238, 115, 184, 18, 95, 138, 150, 169, 249, 96, 204, 189, 44, 97, 45, 48, 185, 85, 47, 231, 146, 176, 25, 236, 246, 201, 147, 254, 90, 161, 66, 177, 44, 185, 104, 9, 176, 194, 215, 114, 22, 149, 219, 216, 3, 46, 156, 227, 157, 19, 48, 128, 137, 36, 135, 20, 218, 204, 215, 5, 83, 172, 142, 11, 0, 190, 70, 55, 96, 89, 209, 67, 136, 168, 113, 9, 95, 89, 198, 219, 96, 207, 46, 108, 238, 118, 190, 115, 26, 252, 24, 69, 236, 234, 86, 20, 128, 47, 218, 241, 200, 148, 212, 192, 138, 63, 144, 170, 111, 24, 145, 33, 151, 173, 238, 231, 254, 102, 108, 213, 17, 136, 31, 104, 241, 56, 248, 93, 141, 156, 96, 148, 251, 129, 113, 71, 145, 156, 22, 82, 52, 41, 104, 56, 160, 247, 30, 53, 65, 133, 104, 144, 170, 188, 34, 55, 122, 35, 232, 192, 97, 62, 164, 244, 0, 183, 106, 17, 152, 76, 245, 244, 120, 207, 99, 37, 0, 160, 68, 11, 32, 96, 244, 23, 148, 92, 207, 236, 88, 97, 140, 166, 108, 143, 157, 93, 70, 65, 130, 147, 159, 59, 9, 46, 202, 26, 158, 4, 225, 240, 51, 246, 173, 243, 224, 60, 0, 150, 248, 228, 161, 82, 180, 129, 2, 210, 200, 0, 46, 100, 86, 63, 48, 21, 89, 250, 127, 195, 221, 10, 77, 26, 164, 27, 76, 41, 160, 66, 146, 154, 58, 9, 220, 242, 240, 133, 220, 100, 229, 232, 6, 241, 102, 95, 223, 248, 153, 59, 1, 137, 49, 39, 109, 83, 112, 249, 167, 104, 144, 129, 202, 125, 245, 239, 94, 156, 62, 107, 242, 121, 129, 191, 98, 24, 30, 183, 216, 145, 164, 201, 202, 207, 6, 120, 147, 240, 220, 242, 13, 66, 233, 102, 225, 241, 248, 36, 125, 167, 189, 15, 145, 226, 171, 218, 239, 179, 152, 215, 97, 187, 1, 5, 223, 61, 167, 252, 21, 254, 64, 45, 16, 51, 71, 239, 1, 130, 88, 93, 236, 96, 179, 36, 121, 70, 106, 71, 44, 109, 70, 217, 220, 2, 137, 0, 29, 127, 170, 87, 89, 203, 112, 25, 47, 245, 0, 24, 78, 53, 253, 2, 35, 24, 182, 234, 150, 11, 85, 94, 124, 185, 65, 63, 70, 23, 90, 109, 53, 43, 232, 69, 98, 152, 237, 189, 70, 233, 158, 192, 14, 160, 169, 221, 218, 252, 80, 153, 206, 142, 85, 168, 145, 200, 130, 234, 116, 106, 247, 227, 16, 119, 3, 103, 109, 101, 204, 136, 196, 251, 13, 186, 77, 23, 2, 54, 66, 195, 200, 98, 154, 205, 57, 51, 172, 161, 30, 9, 57, 27, 73, 214, 195, 244, 109, 95, 16, 193, 169, 141, 212, 29, 11, 10, 254, 44, 40, 158, 124, 10, 244, 14, 90, 115, 21, 40, 33, 111, 187, 192, 98, 150, 241, 109, 89, 194, 200, 101, 175, 249, 183, 214, 89, 69, 105, 71, 65, 55, 176, 48, 104, 103, 97, 75, 229, 183, 219, 177, 109, 166, 23, 77, 40, 181, 93, 3, 45, 251, 45, 167, 153, 157, 162, 55, 120, 167, 246, 42, 238, 123, 143, 64, 11, 158, 74, 217, 23, 206, 153, 200, 165, 143, 149, 154, 100, 98, 213, 205, 221, 55, 164, 240, 37, 113, 151, 181, 245, 95, 199, 55, 147, 64, 73, 247, 131, 39, 144, 68, 50, 192, 245, 122, 18, 200, 154, 151, 235, 185, 158, 84, 191, 107, 45, 215, 167, 165, 46, 58, 146, 203, 63, 147, 15, 44, 220, 16, 149, 23, 184, 5, 48, 233, 80, 193, 80, 26, 92, 118, 45, 148, 54, 177, 128, 254, 58, 210, 160, 209, 47, 61, 69, 153, 29, 12, 129, 40, 4, 47, 35, 34, 112, 199, 186, 58, 203, 149, 67, 32, 85, 203, 56, 107, 171, 130, 90, 218, 219, 9, 133, 215, 140, 108, 152, 236, 58, 17, 41, 201, 109, 28, 29, 241, 252, 176, 178, 248, 158, 50, 30, 148, 82, 224, 225, 111, 143, 211, 135, 249, 210, 131, 64, 30, 219, 238, 88, 70, 142, 146, 84, 49, 102, 163, 116, 2, 73, 35, 55, 17, 112, 19, 194, 4, 168, 178, 171, 152, 149, 221, 67, 209, 140, 19, 247, 165, 165, 198, 61, 96, 93, 174, 199, 85, 183, 98, 183, 237, 70, 234, 78, 255, 70, 52, 87, 213, 225, 6, 122, 29, 83, 136, 230, 45, 47, 26, 12, 77, 112, 185, 109, 123, 170, 135, 189, 182, 36, 24, 104, 206, 175, 29, 191, 35, 40, 87, 63, 29, 236, 72, 28, 58, 147, 101, 36, 68, 44, 162, 165, 209, 206, 73, 79, 158, 92, 148, 176, 73, 247, 255, 95, 140, 128, 58, 210, 179, 39, 140, 100, 223, 91, 58, 88, 157, 23, 183, 156, 58, 14, 131, 59, 135, 141, 173, 248, 26, 161, 72, 242, 173, 154, 112, 119, 243, 163, 85, 139, 54, 227, 231, 255, 89, 234, 13, 145, 86, 254, 177, 53, 87, 155, 69, 17, 156, 129, 147, 73, 80, 15, 234, 39, 157, 105, 0, 220, 216, 117, 222, 2, 168, 224, 152, 248, 117, 0, 247, 247, 164, 30, 178, 190, 134, 66, 87, 106, 5, 22, 231, 103, 81, 12, 200, 57, 128, 46, 177, 74, 65, 128, 66, 124, 17, 165, 92, 27, 177, 226, 106, 141, 254, 17, 42, 118, 78, 141, 68, 147, 36, 155, 43, 119, 139, 97, 176, 183, 125, 122, 230, 245, 85, 230, 46, 23, 224, 171, 242, 24, 218, 199, 86, 1, 6, 188, 59, 221, 169, 50, 151, 86, 15, 125, 68, 82, 201, 37, 252, 225, 0, 77, 45, 14, 139, 28, 141, 224, 22, 231, 201, 74, 114, 62, 244, 254, 104, 99, 175, 88, 69, 27, 84, 115, 156, 235, 220, 18, 54, 81, 221, 152, 200, 16, 125, 119, 86, 14, 163, 159, 97, 198, 46, 149, 109, 63, 50, 40, 191, 162, 71, 251, 14, 215, 28, 202, 101, 216, 225, 130, 18, 74, 61, 233, 143, 96, 154, 35, 99, 87, 153, 187, 98, 2, 59, 200, 27, 191, 169, 92, 206, 170, 193, 83, 122, 247, 227, 191, 147, 175, 225, 245, 230, 115, 125, 110, 248, 118, 4, 80, 214, 107, 91, 236, 221, 233, 86, 201, 172, 69, 191, 69, 191, 17, 232, 141, 250, 12, 196, 19, 90, 80, 106, 87, 29, 64, 72, 81, 236, 112, 215, 191, 76, 118, 88, 174, 193, 149, 55, 208, 190, 159, 31, 25, 187, 46, 112, 85, 205, 59, 208, 11, 45, 239, 189, 65, 133, 79, 106, 52, 191, 56, 50, 199, 191, 37, 92, 118, 31, 140, 188, 14, 78, 232, 235, 68, 3, 207, 23, 127, 20, 62, 237, 54, 45, 95, 236, 71, 217, 55, 121, 196, 17, 237, 142, 24, 199, 85, 249, 83, 18, 149, 208, 111, 227, 3, 120, 229, 39, 167, 28, 194, 24, 134, 143, 173, 186, 71, 33, 245, 22, 161, 153, 181, 49, 52, 25, 29, 16, 183, 221, 76, 130, 2, 142, 123, 108, 154, 116, 12, 132, 21, 141, 241, 124, 249, 67, 70, 151, 102, 202, 109, 177, 181, 111, 80, 46, 221, 58, 150, 150, 29, 189, 74, 76, 102, 205, 255, 111, 100, 115, 242, 187, 190, 95, 142, 102, 12, 250, 21, 18, 123, 80, 38, 234, 249, 63, 77, 112, 40, 202, 187, 23, 176, 104, 240, 62, 0, 105, 220, 232, 177, 187, 80, 154, 215, 1, 68, 68, 122, 106, 141, 17, 115, 53, 43, 14, 50, 41, 50, 179, 160, 106, 146, 99, 64, 143, 152, 169, 105, 50, 194, 147, 149, 204, 165, 252, 24, 200, 236, 48, 174, 16, 192, 88, 170, 148, 189, 153, 130, 118, 44, 38, 110, 208, 95, 191, 3, 164, 129, 120, 1, 18, 206, 31, 147, 13, 51, 28, 194, 112, 194, 133, 115, 240, 45, 215, 20, 173, 32, 101, 67, 227, 112, 197, 121, 192, 225, 76, 32, 119, 28, 214, 171, 181, 240, 146, 48, 173, 173, 34, 189, 212, 88, 63, 8, 154, 95, 234, 225, 228, 52, 2, 105, 35, 134, 191, 155, 52, 242, 222, 0, 130, 80, 115, 59, 244, 114, 41, 38, 238, 138, 42, 56, 121, 111, 254, 137, 18, 104, 56, 152, 41, 92, 125, 206, 62, 107, 234, 59, 149, 38, 200, 148, 28, 101, 162, 144, 12, 64, 212, 193, 231, 90, 39, 44, 103, 1, 91, 36, 33, 159, 255, 19, 140, 69, 91, 11, 83, 165, 78, 211, 85, 190, 70, 71, 21, 20, 9, 186, 124, 191, 122, 69, 91, 227, 25, 180, 30, 13, 0, 245, 130, 253, 189, 227, 252, 168, 102, 116, 195, 177, 22, 6, 216, 116, 243, 253, 163, 248, 19, 217, 194, 81, 222, 1, 28, 91, 19, 110, 96, 120, 241, 51, 159, 175, 94, 235, 75, 182, 204, 108, 1, 143, 201, 166, 101, 10, 158, 147, 119, 246, 238, 42, 73, 203, 130, 60, 15, 34, 217, 97, 145, 178, 71, 34, 210, 255, 137, 174, 16, 144, 198, 74, 125, 92, 89, 216, 131, 16, 245, 4, 203, 27, 147, 242, 253, 28, 135, 190, 151, 16, 246, 247, 26, 76, 51, 190, 56, 114, 12, 219, 156, 244, 159, 103, 33, 218, 93, 124, 255, 194, 112, 172, 124, 166, 58, 24, 28, 173, 49, 231, 149, 46, 146, 123, 183, 98, 141, 150, 184, 41, 227, 17, 149, 120, 165, 144, 230, 113, 224, 236, 59, 134, 20, 223, 91, 80, 70, 133, 179, 247, 53, 111, 241, 11, 117, 228, 96, 35, 248, 134, 122, 62, 61, 28, 251, 180, 68, 248, 218, 140, 137, 184, 78, 172, 74, 247, 50, 134, 87, 227, 171, 30, 45, 202, 165, 152, 15, 91, 236, 55, 76, 133, 39, 171, 183, 149, 88, 198, 9, 119, 90, 174, 250, 128, 103, 4, 48, 119, 148, 219, 151, 8, 164, 93, 20, 24, 145, 85, 122, 236, 194, 17, 58, 196, 188, 121, 140, 158, 144, 217, 125, 111, 2, 199, 64, 59, 168, 169, 133, 54, 221, 250, 3, 54, 44, 55, 64, 151, 69, 147, 95, 151, 91, 133, 106, 204, 38, 21, 54, 114, 203, 169, 90, 123, 134, 187, 199, 243, 153, 90, 127, 222, 82, 242, 192, 193, 209, 17, 156, 110, 15, 229, 215, 24, 205, 179, 66, 138, 186, 54, 32, 104, 181, 164, 46, 72, 75, 143, 174, 212, 163, 180, 126, 122, 239, 241, 232, 66, 110, 0, 149, 109, 14, 210, 159, 28, 3, 81, 33, 78, 233, 99, 240, 231, 217, 27, 87, 137, 25, 174, 227, 56, 226, 102, 202, 230, 73, 225, 77, 172, 102, 4, 232, 112, 240, 255, 209, 115, 80, 212, 91, 221, 151, 134, 42, 191, 26, 97, 101, 102, 23, 3, 137, 198, 166, 37, 224, 13, 173, 186, 155, 97, 172, 209, 62, 23, 242, 31, 2, 87, 109, 39, 55, 201, 87, 220, 24, 237, 163, 51, 102, 79, 244, 170, 135, 196, 114, 230, 247, 123, 141, 29, 95, 117, 208, 16, 24, 228, 58, 12, 44, 154, 15, 206, 241, 182, 207, 126, 104, 227, 44, 31, 139, 117, 116, 66, 244, 254, 50, 15, 140, 19, 14, 72, 231, 253, 29, 243, 254, 188, 171, 105, 93, 116, 160, 42, 143, 16, 177, 68, 251, 94, 245, 100, 178, 122, 94, 122, 77, 176, 212, 177, 193, 222, 98, 3, 137, 96, 21, 76, 154, 250, 48, 241, 130, 134, 44, 200, 91, 103, 75, 67, 200, 200, 124, 55, 228, 85, 148, 16, 7, 200, 158, 250, 184, 83, 244, 185, 206, 214, 172, 253, 7, 212, 195, 114, 5, 32, 198, 107, 36, 15, 86, 25, 110, 242, 37, 248, 18, 152, 171, 42, 2, 236, 5, 224, 35, 195, 57, 30, 115, 218, 99, 191, 72, 179, 246, 47, 82, 122, 142, 111, 154, 61, 28, 180, 151, 17, 252, 29, 225, 117, 60, 137, 96, 65, 223, 100, 72, 81, 88, 72, 121, 119, 163, 204, 124, 77, 223, 93, 124, 44, 16, 211, 66, 38, 190, 157, 99, 228, 67, 108, 5, 47, 75, 130, 78, 165, 154, 176, 249, 247, 54, 41, 221, 225, 97, 93, 208, 161, 154, 115, 212, 255, 69, 47, 40, 153, 99, 222, 22, 241, 169, 247, 121, 14, 180, 4, 91, 1, 221, 168, 215, 188, 22, 233, 60, 111, 113, 184, 7, 247, 147, 148, 2, 116, 16, 251, 191, 22, 16, 109, 52, 192, 180, 160, 41, 51, 51, 164, 142, 48, 11, 149, 62, 157, 139, 115, 187, 33, 234, 222, 113, 218, 183, 54, 51, 209, 16, 213, 165, 57, 200, 18, 179, 137, 19, 134, 195, 137, 254, 169, 100, 188, 190, 90, 159, 67, 38, 218, 124, 175, 28, 249, 16, 221, 103, 58, 156, 103, 13, 16, 198, 144, 103, 139, 124, 63, 252, 234, 193, 63, 177, 81, 171, 85, 89, 155, 176, 72, 113, 236, 17, 37, 47, 108, 92, 65, 131, 151, 11, 196, 172, 18, 20, 222, 224, 85, 116, 70, 227, 191, 4, 126, 73, 109, 100, 41, 1, 229, 0, 221, 169, 117, 113, 85, 86, 86, 13, 68, 10, 7, 44, 222, 183, 197, 72, 8, 15, 178, 188, 135, 118, 179, 161, 245, 19, 16, 93, 206, 225, 98, 161, 57, 39, 5, 45, 130, 61, 62, 82, 42, 80, 230, 122, 150, 46, 191, 23, 252, 112, 11, 145, 172, 214, 114, 30, 111, 91, 203, 5, 136, 206, 247, 11, 57, 190, 100, 182, 18, 52, 87, 196, 96, 87, 40, 188, 73, 79, 238, 112, 185, 189, 191, 164, 27, 143, 170, 43, 251, 148, 152, 188, 96, 31, 237, 1, 135, 94, 139, 164, 51, 157, 64, 198, 196, 65, 219, 126, 207, 54, 122, 141, 62, 141, 90, 123, 233, 70, 240, 1, 11, 37, 196, 103, 80, 242, 112, 189, 17, 247, 88, 214, 220, 44, 42, 136, 88, 244, 78, 87, 156, 217, 42, 7, 32, 152, 143, 10, 111, 170, 6, 209, 116, 188, 164, 132, 115, 84, 83, 193, 251, 192, 14, 185, 33, 34, 17, 130, 18, 155, 55, 146, 205, 168, 158, 51, 250, 135, 75, 255, 146, 163, 196, 191, 158, 251, 67, 44, 206, 226, 179, 189, 174, 215, 51, 78, 84, 123, 160, 127, 230, 137, 141, 42, 223, 214, 169, 52, 142, 246, 140, 221, 79, 130, 240, 96, 142, 87, 254, 130, 215, 123, 227, 16, 228, 238, 63, 51, 164, 75, 163, 129, 18, 249, 82, 241, 130, 113, 67, 84, 252, 88, 27, 8, 233, 216, 108, 104, 253, 226, 103, 250, 119, 123, 246, 18, 83, 5, 79, 113, 233, 45, 97, 41, 171, 242, 198, 125, 28, 103, 181, 70, 153, 23, 202, 90, 145, 27, 245, 103, 249, 72, 121, 187, 245, 160, 45, 81, 224, 156, 141, 64, 203, 249, 43, 213, 181, 120, 178, 178, 29, 128, 1, 242, 221, 75, 190, 103, 219, 148, 66, 213, 106, 106, 1, 94, 62, 42, 251, 14, 105, 82, 185, 171, 141, 157, 227, 211, 152, 157, 25, 146, 96, 192, 180, 26, 239, 34, 203, 154, 99, 117, 5, 127, 252, 189, 111, 35, 49, 89, 244, 203, 43, 71, 81, 215, 221, 197, 168, 192, 229, 193, 34, 234, 40, 23, 215, 167, 98, 236, 153, 252, 59, 208, 164, 8, 66, 168, 76, 118, 209, 156, 119, 186, 218, 60, 5, 235, 243, 29, 21, 188, 75, 172, 245, 158, 75, 194, 230, 233, 178, 87, 6, 85, 67, 201, 108, 170, 170, 45, 251, 223, 44, 230, 55, 78, 87, 96, 93, 255, 165, 120, 83, 186, 221, 244, 155, 35, 38, 142, 107, 205, 90, 243, 233, 185, 108, 231, 133, 196, 51, 79, 241, 84, 196, 132, 193, 60, 237, 26, 59, 224, 40, 74, 88, 130, 74, 162, 60, 151, 37, 27, 108, 153, 237, 102, 71, 158, 105, 34, 36, 105, 32, 221, 173, 216, 25, 46, 84, 112, 166, 16, 3, 186, 150, 11, 87, 85, 41, 125, 223, 42, 134, 35, 207, 102, 164, 106, 215, 188, 28, 3, 191, 100, 187, 215, 48, 226, 128, 207, 15, 10, 106, 150, 119, 145, 186, 102, 131, 174, 23, 231, 144, 76, 97, 134, 96, 131, 16, 0, 118, 180, 156, 206, 186, 191, 182, 187, 243, 187, 248, 123, 171, 96, 136, 45, 119, 175, 8, 57, 48, 201, 237, 189, 29, 152, 25, 102, 155, 30, 1, 111, 167, 120, 9, 245, 223, 164, 122, 106, 107, 16, 222, 245, 30, 168, 219, 75, 5, 76, 247, 223, 43, 146, 122, 212, 165, 212, 230, 111, 52, 194, 123, 183, 110, 35, 248, 81, 210, 32, 87, 67, 99, 202, 232, 4, 200, 240, 82, 38, 15, 149, 157, 145, 192, 58, 39, 91, 11, 1, 136, 68, 159, 160, 165, 172, 22, 145, 148, 41, 130, 4, 127, 8, 133, 60, 154, 131, 44, 246, 80, 3, 88, 183, 239, 92, 116, 241, 51, 139, 79, 29, 20, 53, 13, 217, 5, 171, 114, 92, 169, 49, 128, 60, 71, 8, 177, 199, 200, 190, 73, 185, 83, 138, 166, 17, 187, 145, 99, 232, 218, 246, 235, 132, 202, 172, 190, 128, 155, 174, 34, 187, 63, 96, 138, 98, 235, 156, 69, 2, 119, 216, 80, 190, 46, 228, 44, 153, 217, 192, 178, 166, 5, 62, 195, 173, 41, 234, 132, 217, 201, 231, 119, 91, 238, 182, 152, 12, 40, 136, 176, 254, 116, 130, 164, 119, 107, 124, 172, 141, 226, 142, 183, 44, 223, 143, 72, 225, 188, 235, 27, 224, 35, 66, 25, 45, 87, 167, 116, 78, 234, 237, 137, 238, 148, 18, 19, 63, 111, 219, 192, 79, 228, 230, 171, 208, 240, 51, 61, 175, 251, 171, 87, 69, 23, 239, 240, 185, 223, 116, 77, 116, 170, 87, 239, 68, 101, 144, 16, 195, 46, 61, 0, 96, 250, 7, 93, 197, 140, 152, 26, 91, 108, 26, 89, 145, 121, 27, 255, 118, 73, 220, 231, 184, 141, 123, 30, 111, 57, 223, 19, 135, 100, 143, 194, 71, 35, 123, 109, 214, 183, 136, 48, 145, 196, 55, 92, 140, 50, 3, 238, 31, 103, 254, 23, 59, 5, 58, 227, 50, 244, 235, 191, 156, 18, 35, 12, 76, 234, 179, 14, 250, 192, 75, 83, 128, 34, 135, 212, 207, 195, 82, 111, 190, 176, 68, 97, 119, 189, 243, 112, 24, 103, 28, 173, 255, 79, 21, 40, 148, 182, 35, 195, 145, 93, 86, 120, 106, 90, 4, 242, 186, 233, 84, 9, 36, 104, 67, 36, 233, 34, 59, 159, 179, 79, 182, 113, 157, 126, 37, 36, 47, 112, 91, 217, 81, 187, 246, 36, 124, 75, 27, 90, 107, 201, 215, 253, 125, 189, 168, 45, 236, 103, 220, 129, 207, 117, 156, 185, 30, 31, 168, 96, 131, 123, 103, 52, 224, 246, 116, 71, 76, 114, 182, 42, 176, 69, 141, 195, 89, 72, 137, 7, 237, 85, 42, 212, 108, 201, 127, 194, 195, 90, 214, 145, 202, 186, 171, 171, 109, 141, 244, 121, 81, 187, 16, 126, 199, 14, 38, 18, 178, 72, 87, 117, 110, 202, 125, 179, 56, 147, 72, 200, 175, 206, 248, 22, 173, 144, 72, 188, 165, 195, 90, 140, 32, 253, 183, 212, 213, 183, 112, 229, 246, 22, 150, 178, 170, 13, 123, 61, 51, 202, 55, 46, 82, 27, 77, 130, 108, 66, 83, 48, 154, 231, 193, 197, 34, 138, 187, 224, 89, 110, 62, 45, 238, 252, 34, 178, 173, 47, 183, 232, 50, 234, 252, 52, 214, 85, 83, 219, 79, 150, 84, 30, 151, 41, 87, 44, 247, 65, 32, 191, 151, 44, 131, 174, 173, 95, 87, 104, 59, 168, 35, 234, 246, 189, 128, 42, 160, 134, 84, 179, 138, 168, 9, 109, 180, 184, 116, 39, 118, 43, 113, 232, 220, 149, 135, 105, 21, 93, 78, 71, 92, 65, 151, 61, 221, 94, 73, 199, 166, 134, 114, 135, 7, 228, 79, 124, 231, 52, 171, 111, 239, 198, 41, 130, 197, 141, 225, 95, 149, 34, 225, 102, 166, 219, 200, 16, 102, 162, 71, 194, 6, 217, 131, 135, 154, 134, 239, 62, 145, 81, 144, 70, 23, 193, 21, 131, 54, 42, 32, 61, 108, 78, 151, 25, 11, 169, 230, 36, 180, 12, 226, 28, 215, 254, 3, 179, 115, 67, 207, 217, 193, 7, 25, 217, 153, 98, 251, 184, 215, 202, 89, 187, 34, 43, 50, 38, 13, 211, 179, 17, 27, 111, 18, 48, 32, 7, 34, 16, 90, 166, 8, 249, 42, 35, 33, 162, 197, 220, 219, 20, 73, 74, 117, 209, 82, 86, 130, 42, 212, 88, 4, 233, 110, 141, 112, 208, 178, 149, 141, 246, 13, 104, 119, 105, 103, 229, 82, 95, 134, 70, 99, 30, 20, 182, 33, 126, 179, 80, 95, 200, 75, 14, 254, 31, 17, 69, 79, 55, 18, 238, 157, 78, 166, 126, 42, 50, 145, 70, 76, 139, 101, 193, 154, 74, 96, 182, 77, 249, 58, 144, 245, 8, 205, 216, 23, 95, 85, 168, 99, 29, 145, 227, 180, 238, 180, 117, 241, 120, 241, 63, 214, 150, 19, 143, 187, 4, 121, 48, 216, 39, 116, 65, 123, 86, 112, 244, 106, 215, 54, 20, 181, 113, 36, 6, 165, 192, 59, 30, 11, 237, 159, 78, 208, 220, 234, 250, 235, 49, 135, 123, 23, 47, 224, 92, 122, 153, 103, 142, 251, 222, 33, 221, 7, 241, 3, 218, 42, 144, 192, 23, 167, 237, 33, 69, 58, 79, 7, 59, 128, 184, 87, 69, 135, 171, 248, 124, 45, 187, 54, 178, 106, 172, 184, 77, 30, 61, 189, 164, 131, 40, 166, 252, 115, 97, 113, 19, 40, 238, 89, 192, 182, 73, 195, 22, 134, 70, 36, 30, 195, 66, 44, 235, 122, 197, 123, 61, 22, 11, 114, 147, 6, 253, 36, 255, 252, 41, 196, 179, 196, 141, 150, 24, 33, 117, 202, 174, 126, 41, 182, 108, 18, 39, 46, 229, 93, 177, 230, 66, 242, 34, 90, 185, 86, 149, 196, 161, 245, 101, 191, 188, 201, 108, 147, 98, 29, 174, 23, 70, 103, 30, 78, 193, 252, 113, 11, 139, 242, 100, 79, 29, 92, 48, 207, 113, 136, 189, 226, 215, 237, 212, 101, 198, 117, 48, 86, 69, 213, 34, 121, 132, 1, 50, 196, 66, 106, 237, 47, 186, 216, 177, 119, 45, 8, 69, 202, 187, 51, 80, 42, 21, 22, 101, 250, 6, 126, 37, 162, 26, 28, 142, 150, 254, 226, 49, 15, 200, 173, 135, 71, 213, 122, 132, 221, 228, 96, 82, 180, 10, 219, 28, 255, 250, 1, 225, 151, 4, 244, 87, 215, 45, 187, 24, 57, 248, 246, 76, 57, 59, 187, 189, 248, 5, 95, 197, 210, 96, 46, 75, 151, 177, 229, 254, 251, 74, 96, 73, 163, 117, 21, 247, 150, 34, 219, 237, 191, 113, 94, 181, 164, 187, 67, 24, 78, 220, 130, 146, 75, 175, 26, 108, 151, 101, 68, 189, 209, 39, 48, 17, 194, 208, 183, 94, 126, 55, 107, 245, 204, 111, 47, 176, 227, 28, 54, 165, 241, 170, 115, 14, 135, 117, 239, 62, 230, 82, 35, 162, 7, 225, 184, 102, 199, 110, 174, 110, 96, 160, 68, 204, 246, 77, 112, 82, 28, 142, 188, 160, 212, 37, 97, 52, 16, 94, 43, 179, 154, 89, 209, 66, 12, 224, 105, 102, 28, 28, 174, 3, 134, 74, 142, 158, 183, 154, 237, 113, 175, 254, 79, 103, 127, 232, 28, 189, 159, 20, 53, 81, 169, 65, 107, 82, 61, 197, 4, 14, 43, 73, 145, 38, 38, 207, 148, 109, 56, 35, 40, 76, 168, 146, 77, 204, 79, 76, 2, 111, 252, 43, 106, 96, 122, 210, 156, 124, 229, 50, 129, 83, 29, 5, 145, 189, 94, 84, 61, 56, 72, 132, 136, 221, 213, 107, 190, 214, 141, 219, 237, 102, 60, 208, 225, 109, 48, 87, 13, 214, 185, 158, 92, 96, 76, 52, 234, 94, 19, 133, 244, 206, 118, 98, 185, 141, 109, 127, 89, 213, 221, 117, 126, 54, 178, 199, 27, 199, 211, 60, 141, 213, 54, 38, 73, 233, 101, 196, 209, 85, 203, 15, 220, 172, 27, 184, 170, 215, 168, 94, 95, 133, 161, 71, 229, 94, 27, 191, 176, 134, 103, 57, 132, 190, 39, 144, 197, 252, 103, 205, 235, 214, 78, 74, 188, 214, 110, 190, 147, 165, 92, 12, 232, 5, 149, 219, 77, 135, 93, 14, 123, 211, 39, 38, 70, 99, 20, 172, 174, 243, 215, 68, 50, 220, 42, 70, 141, 36, 12, 128, 123, 229, 174, 165, 171, 254, 13, 216, 184, 145, 194, 24, 6, 120, 196, 48, 209, 234, 56, 16, 141, 218, 36, 170, 86, 63, 198, 166, 140, 121, 119, 27, 214, 179, 79, 117, 250, 83, 54, 209, 227, 63, 238, 92, 77, 183, 62, 14, 43, 60, 203, 109, 139, 92, 57, 240, 10, 32, 63, 77, 211, 4, 148, 107, 157, 133, 107, 237, 203, 63, 80, 231, 65, 151, 177, 249, 204, 246, 60, 95, 153, 236, 202, 103, 214, 201, 14, 98, 56, 37, 47, 135, 173, 123, 171, 29, 32, 3, 192, 238, 7, 224, 61, 58, 92, 239, 21, 96, 244, 125, 158, 70, 28, 178, 46, 36, 95, 219, 21, 195, 119, 85, 139, 85, 149, 253, 139, 137, 82, 232, 225, 3, 130, 159, 232, 137, 145, 78, 143, 107, 153, 104, 253, 133, 122, 11, 193, 191, 25, 2, 162, 113, 180, 106, 95, 171, 196, 248, 85, 254, 117, 228, 79, 220, 118, 47, 9, 47, 183, 215, 246, 140, 40, 18, 102, 182, 75, 227, 49, 206, 7, 104, 218, 7, 222, 238, 7, 100, 238, 167, 81, 120, 47, 21, 100, 37, 100, 9, 36, 84, 186, 155, 96, 133, 93, 232, 171, 188, 118, 93, 130, 46, 173, 190, 2, 126, 192, 68, 44, 101, 115, 253, 207, 169, 184, 177, 77, 10, 235, 86, 19, 5, 117, 244, 23, 139, 254, 71, 213, 104, 8, 185, 185, 152, 128, 84, 106, 130, 180, 10, 26, 131, 172, 20, 224, 158, 60, 38, 39, 75, 43, 142, 189, 208, 105, 54, 147, 155, 90, 232, 240, 155, 72, 160, 159, 233, 135, 164, 82, 26, 125, 244, 181, 178, 27, 131, 137, 121, 238, 243, 55, 90, 126, 119, 208, 33, 87, 180, 163, 217, 45, 189, 17, 102, 85, 54, 227, 164, 187, 43, 222, 9, 60, 196, 111, 74, 67, 77, 196, 255, 136, 55, 158, 107, 77, 110, 107, 248, 52, 76, 8, 12, 118, 206, 139, 91, 17, 88, 250, 6, 242, 222, 194, 126, 178, 240, 138, 67, 28, 21, 46, 81, 173, 242, 128, 90, 198, 186, 121, 231, 237, 86, 86, 217, 72, 237, 44, 39, 41, 24, 91, 194, 86, 177, 24, 250, 59, 28, 70, 50, 60, 34, 227, 217, 124, 124, 58, 64, 209, 148, 17, 109, 174, 48, 125, 211, 162, 52, 176, 211, 16, 165, 116, 92, 104, 131, 29, 41, 85, 181, 135, 234, 59, 209, 233, 99, 111, 137, 188, 118, 207, 64, 15, 251, 111, 135, 193, 53, 215, 125, 171, 67, 142, 72, 114, 55, 79, 202, 72, 166, 246, 45, 15, 66, 127, 128, 30, 209, 202, 130, 179, 27, 160, 159, 97, 56, 232, 41, 17, 113, 120, 60, 39, 65, 228, 172, 49, 177, 35, 22, 56, 102, 157, 0, 3, 184, 247, 46, 194, 208, 136, 96, 226, 197, 176, 107, 180, 239, 153, 106, 165, 65, 186, 145, 98, 247, 8, 182, 133, 142, 229, 216, 149, 35, 220, 68, 152, 211, 241, 16, 28, 9, 105, 254, 9, 197, 66, 193, 186, 31, 234, 128, 31, 52, 163, 176, 116, 8, 134, 207, 165, 66, 64, 82, 94, 88, 69, 249, 155, 108, 115, 21, 32, 177, 3, 80, 165, 22, 26, 150, 150, 111, 191, 151, 66, 203, 37, 89, 232, 132, 38, 63, 167, 76, 244, 61, 31, 52, 7, 16, 68, 119, 255, 186, 56, 34, 37, 197, 241, 210, 35, 23, 156, 129, 43, 146, 251, 110, 118, 119, 50, 253, 152, 238, 180, 158, 119, 238, 117, 0, 205, 8, 138, 231, 126, 98, 42, 192, 165, 62, 184, 155, 59, 26, 238, 222, 6, 47, 33, 125, 184, 191, 4, 89, 3, 188, 104, 18, 15, 190, 39, 31, 219, 87, 107, 223, 183, 206, 95, 71, 181, 169, 63, 141, 222, 208, 142, 70, 39, 16, 178, 224, 142, 42, 244, 114, 127, 26, 183, 108, 210, 145, 179, 221, 232, 54, 12, 241, 107, 94, 197, 68, 208, 171, 62, 108, 232, 247, 23, 67, 84, 93, 52, 0, 190, 240, 122, 79, 71, 12, 224, 22, 208, 173, 91, 234, 26, 159, 35, 52, 43, 243, 135, 76, 177, 15, 68, 179, 239, 161, 128, 101, 207, 61, 227, 122, 1, 46, 155, 239, 89, 254, 15, 81, 253, 155, 12, 88, 28, 167, 192, 221, 98, 118, 81, 131, 125, 181, 90, 147, 227, 113, 175, 179, 196, 61, 203, 103, 114, 132, 53, 230, 123, 173, 177, 4, 119, 68, 98, 27, 124, 220, 88, 176, 44, 225, 121, 195, 172, 76, 226, 30, 111, 23, 110, 195, 153, 12, 39, 250, 134, 242, 82, 58, 92, 85, 165, 109, 76, 211, 126, 171, 121, 128, 8, 3, 212, 143, 179, 251, 202, 19, 80, 70, 0, 112, 178, 56, 148, 14, 1, 206, 50, 154, 191, 245, 155, 132, 63, 60, 172, 142, 31, 220, 87, 57, 235, 250, 240, 67, 113, 133, 210, 230, 102, 157, 91, 13, 197, 112, 57, 7, 117, 145, 60, 87, 172, 187, 243, 15, 220, 80, 188, 186, 77, 117, 152, 17, 105, 7, 164, 134, 105, 180, 213, 48, 47, 81, 129, 72, 188, 156, 47, 86, 247, 53, 142, 71, 177, 194, 21, 124, 30, 246, 68, 31, 242, 111, 211, 16, 152, 195, 198, 61, 99, 210, 6, 238, 23, 100, 204, 227, 208, 73, 250, 152, 18, 154, 246, 48, 64, 224, 82, 137, 153, 54, 87, 185, 144, 54, 160, 188, 133, 150, 211, 95, 202, 147, 131, 56, 159, 53, 180, 179, 59, 146, 36, 180, 193, 7, 111, 113, 104, 227, 184, 126, 234, 183, 85, 185, 131, 237, 100, 158, 108, 95, 221, 113, 171, 10, 221, 175, 255, 31, 138, 163, 250, 149, 165, 157, 251, 123, 42, 131, 189, 172, 83, 110, 177, 214, 82, 108, 1, 76, 56, 65, 59, 115, 92, 191, 177, 173, 144, 223, 179, 9, 168, 128, 54, 203, 92, 14, 123, 224, 124, 125, 223, 49, 159, 209, 139, 191, 207, 89, 37, 121, 101, 65, 160, 115, 106, 153, 71, 69, 3, 241, 123, 199, 119, 152, 103, 67, 115, 106, 43, 108, 172, 24, 184, 188, 159, 176, 43, 182, 22, 207, 72, 125, 178, 73, 201, 57, 211, 230, 234, 58, 92, 54, 18, 179, 110, 65, 62, 135, 118, 11, 240, 25, 62, 72, 113, 122, 82, 105, 185, 101, 152, 176, 217, 44, 231, 108, 59, 90, 115, 115, 15, 74, 31, 125, 2, 238, 221, 76, 207, 244, 178, 17, 92, 82, 245, 84, 194, 34, 126, 84, 45, 88, 136, 121, 181, 87, 158, 123, 254, 27, 34, 25, 255, 66, 10, 14, 25, 205, 41, 202, 78, 89, 164, 231, 168, 146, 182, 208, 219, 192, 28, 114, 74, 195, 55, 192, 76, 96, 108, 170, 242, 153, 181, 116, 154, 101, 223, 227, 176, 221, 74, 25, 127, 127, 193, 124, 209, 32, 174, 14, 232, 108, 27, 159, 60, 4, 226, 5, 59, 232, 215, 242, 15, 192, 96, 144, 58, 232, 150, 214, 215, 189, 231, 146, 81, 56, 238, 156, 204, 2, 212, 135, 178, 6, 154, 23, 165, 241, 143, 131, 18, 82, 49, 203, 73, 140, 39, 21, 246, 1, 88, 126, 68, 189, 85, 82, 190, 168, 22, 102, 124, 186, 136, 39, 93, 254, 40, 64, 202, 34, 107, 105, 182, 234, 11, 222, 83, 175, 23, 213, 144, 71, 71, 42, 26, 122, 161, 12, 174, 220, 95, 245, 78, 242, 154, 110, 99, 82, 69, 184, 145, 245, 26, 168, 236, 27, 20, 74, 241, 205, 248, 240, 95, 99, 36, 6, 113, 39, 210, 77, 104, 234, 43, 195, 244, 245, 36, 80, 62, 221, 81, 242, 22, 17, 136, 40, 28, 11, 190, 182, 175, 29, 60, 176, 54, 172, 32, 29, 27, 79, 182, 187, 82, 233, 230, 106, 154, 66, 47, 253, 112, 48, 228, 139, 20, 227, 239, 77, 100, 140, 184, 28, 7, 93, 30, 77, 1, 168, 24, 177, 44, 210, 64, 37, 58, 234, 34, 86, 205, 219, 16, 10, 214, 91, 147, 156, 119, 216, 253, 130, 73, 189, 86, 255, 221, 243, 204, 77, 153, 182, 127, 24, 145, 206, 127, 213, 121, 152, 249, 109, 189, 101, 122, 105, 164, 140, 216, 17, 53, 71, 193, 244, 140, 255, 173, 135, 57, 87, 241, 11, 152, 221, 231, 225, 216, 214, 240, 58, 222, 213, 219, 177, 46, 174, 157, 91, 130, 213, 157, 48, 21, 82, 130, 23, 22, 128, 20, 70, 122, 131, 241, 79, 41, 81, 92, 196, 139, 208, 40, 152, 171, 86, 68, 248, 151, 65, 130, 138, 209, 80, 39, 156, 205, 0, 249, 177, 127, 83, 160, 131, 183, 6, 54, 66, 215, 59, 40, 1, 26, 27, 8, 221, 228, 104, 233, 92, 194, 215, 148, 245, 41, 47, 147, 246, 113, 225, 201, 189, 154, 179, 138, 217, 126, 177, 35, 0, 213, 135, 120, 229, 96, 111, 45, 118, 235, 93, 183, 63, 163, 10, 238, 211, 46, 24, 128, 161, 186, 104, 209, 105, 9, 148, 13, 168, 201], - [51, 21, 43, 143, 136, 96, 178, 140, 4, 67, 11, 163, 161, 240, 68, 150, 201, 38, 120, 196, 148, 199, 225, 192, 4, 243, 160, 74, 198, 71, 104, 123, 226, 38, 9, 251, 106, 24, 76, 229, 246, 194, 158, 214, 47, 141, 153, 11, 133, 21, 243, 30, 234, 56, 33, 103, 86, 92, 196, 165, 158, 128, 49, 85, 242, 91, 151, 232, 97, 180, 58, 150, 96, 217, 212, 207, 86, 36, 77, 241, 159, 35, 44, 251, 114, 205, 201, 90, 34, 161, 101, 150, 94, 238, 206, 204, 51, 0, 3, 27, 244, 243, 231, 109, 155, 4, 24, 133, 150, 177, 191, 253, 87, 130, 25, 78, 43, 57, 166, 135, 248, 197, 179, 1, 51, 184, 112, 76, 107, 171, 234, 121, 123, 165, 148, 66, 98, 207, 222, 32, 86, 250, 217, 76, 5, 190, 237, 20, 106, 18, 132, 168, 89, 10, 183, 234, 177, 140, 188, 24, 211, 23, 15, 126, 252, 173, 3, 141, 158, 223, 85, 146, 93, 152, 233, 99, 232, 138, 56, 76, 69, 91, 87, 48, 242, 156, 122, 52, 254, 215, 103, 214, 95, 250, 104, 253, 61, 2, 126, 143, 168, 24, 247, 0, 95, 253, 239, 157, 53, 126, 138, 12, 250, 32, 169, 99, 57, 180, 135, 158, 196, 63, 22, 83, 35, 119, 151, 11, 74, 25, 153, 126, 22, 98, 126, 187, 188, 74, 21, 24, 190, 58, 101, 101, 36, 130, 185, 125, 79, 160, 251, 230, 191, 237, 192, 62, 66, 202, 249, 153, 157, 15, 176, 6, 22, 125, 239, 57, 161, 7, 44, 13, 213, 13, 50, 150, 139, 118, 222, 85, 124, 70, 124, 210, 5, 98, 141, 182, 160, 231, 122, 166, 173, 215, 33, 159, 247, 254, 4, 110, 212, 203, 192, 234, 73, 46, 55, 48, 193, 76, 21, 153, 217, 48, 101, 213, 213, 219, 88, 199, 249, 132, 112, 214, 216, 212, 246, 189, 164, 126, 58, 109, 52, 171, 196, 23, 27, 129, 209, 220, 232, 192, 109, 246, 140, 207, 196, 135, 231, 143, 164, 70, 180, 216, 173, 120, 229, 186, 202, 51, 182, 95, 29, 149, 176, 153, 22, 39, 66, 191, 196, 197, 16, 156, 5, 203, 54, 113, 160, 43, 230, 138, 97, 11, 247, 89, 150, 72, 72, 230, 114, 95, 29, 57, 109, 31, 231, 27, 119, 169, 58, 122, 0, 87, 247, 161, 36, 106, 189, 236, 230, 244, 127, 64, 115, 178, 0, 242, 133, 105, 106, 61, 198, 107, 146, 212, 66, 205, 225, 72, 180, 7, 47, 115, 93, 168, 84, 16, 114, 121, 246, 180, 155, 202, 7, 73, 220, 85, 191, 196, 152, 15, 11, 142, 140, 169, 92, 216, 224, 82, 111, 79, 37, 163, 240, 103, 135, 192, 236, 224, 133, 255, 73, 161, 170, 224, 181, 34, 95, 190, 190, 47, 115, 141, 221, 59, 26, 100, 254, 138, 172, 144, 185, 179, 48, 250, 210, 8, 96, 108, 95, 210, 48, 172, 72, 102, 234, 39, 30, 93, 79, 97, 143, 242, 170, 253, 114, 26, 66, 151, 202, 162, 179, 149, 10, 162, 23, 131, 26, 239, 190, 152, 89, 88, 116, 86, 154, 118, 204, 237, 82, 54, 83, 90, 81, 51, 88, 19, 148, 82, 97, 171, 17, 245, 181, 37, 47, 218, 204, 138, 174, 26, 24, 117, 178, 13, 237, 225, 230, 3, 71, 192, 85, 25, 44, 156, 182, 175, 114, 14, 81, 196, 255, 212, 150, 49, 60, 7, 189, 36, 132, 110, 185, 67, 139, 16, 216, 36, 148, 35, 252, 213, 4, 178, 254, 143, 30, 142, 162, 52, 53, 13, 192, 186, 5, 147, 139, 45, 79, 101, 246, 51, 71, 27, 253, 92, 206, 21, 249, 100, 101, 104, 221, 211, 60, 110, 240, 110, 144, 132, 151, 123, 168, 69, 10, 68, 225, 135, 71, 76, 231, 216, 146, 59, 238, 197, 198, 146, 59, 197, 113, 153, 250, 184, 104, 88, 176, 234, 187, 148, 73, 212, 248, 86, 162, 53, 33, 126, 180, 248, 118, 132, 181, 2, 65, 21, 242, 96, 145, 247, 171, 135, 25, 120, 71, 186, 15, 40, 121, 183, 161, 201, 69, 5, 27, 148, 120, 213, 198, 9, 247, 212, 145, 227, 145, 234, 226, 212, 148, 123, 46, 201, 161, 31, 173, 98, 161, 158, 55, 86, 41, 76, 188, 115, 30, 12, 75, 68, 30, 46, 104, 203, 59, 174, 0, 133, 205, 107, 101, 167, 159, 171, 159, 51, 152, 74, 116, 208, 126, 38, 193, 172, 247, 238, 187, 207, 0, 108, 27, 17, 156, 185, 190, 109, 119, 196, 94, 1, 42, 165, 232, 207, 207, 74, 11, 218, 140, 136, 13, 162, 62, 210, 188, 105, 202, 103, 196, 179, 226, 61, 240, 86, 181, 28, 136, 151, 32, 169, 179, 13, 237, 229, 70, 63, 103, 195, 170, 34, 124, 60, 61, 248, 197, 161, 141, 95, 147, 157, 39, 141, 150, 220, 89, 39, 17, 224, 182, 121, 135, 192, 173, 211, 141, 167, 143, 150, 20, 44, 41, 149, 16, 117, 110, 70, 211, 46, 134, 123, 201, 139, 242, 155, 131, 199, 147, 159, 93, 59, 193, 231, 254, 231, 17, 135, 35, 11, 132, 191, 190, 119, 122, 175, 86, 236, 80, 79, 93, 141, 173, 230, 77, 239, 231, 12, 90, 63, 234, 157, 247, 198, 22, 60, 178, 14, 74, 152, 130, 103, 16, 126, 171, 212, 162, 58, 87, 89, 113, 71, 52, 220, 68, 215, 103, 22, 243, 111, 138, 145, 147, 157, 71, 178, 25, 227, 211, 210, 181, 168, 184, 220, 86, 60, 119, 103, 230, 202, 19, 54, 1, 199, 38, 117, 154, 17, 217, 198, 192, 165, 187, 234, 153, 58, 69, 247, 0, 229, 17, 18, 201, 244, 182, 126, 6, 141, 199, 206, 94, 153, 242, 61, 152, 61, 94, 129, 162, 203, 104, 251, 117, 207, 141, 180, 115, 187, 78, 163, 114, 121, 68, 140, 73, 143, 136, 17, 247, 54, 28, 237, 96, 4, 10, 144, 62, 1, 46, 90, 133, 100, 25, 160, 192, 212, 76, 155, 129, 108, 117, 98, 182, 58, 36, 185, 104, 161, 237, 19, 217, 17, 253, 193, 22, 67, 78, 67, 103, 57, 0, 69, 138, 203, 222, 94, 229, 30, 51, 213, 252, 122, 197, 236, 153, 86, 213, 121, 30, 59, 139, 2, 5, 29, 112, 169, 151, 147, 246, 126, 40, 64, 18, 34, 129, 78, 29, 184, 44, 213, 175, 179, 217, 30, 237, 22, 117, 81, 114, 33, 106, 117, 236, 119, 225, 66, 215, 203, 182, 6, 129, 131, 210, 198, 64, 75, 151, 190, 23, 249, 206, 21, 226, 44, 93, 74, 125, 14, 62, 126, 40, 187, 236, 241, 69, 29, 162, 213, 163, 146, 69, 93, 17, 45, 235, 34, 241, 214, 79, 238, 130, 0, 84, 30, 162, 218, 100, 122, 255, 75, 75, 245, 1, 105, 20, 108, 220, 117, 176, 32, 203, 120, 189, 20, 130, 64, 23, 169, 225, 10, 85, 98, 156, 111, 239, 82, 106, 197, 78, 34, 164, 111, 238, 53, 168, 102, 247, 172, 104, 86, 233, 6, 201, 157, 80, 159, 97, 224, 51, 233, 33, 195, 8, 110, 3, 128, 123, 75, 12, 151, 151, 53, 237, 234, 194, 214, 11, 198, 175, 78, 34, 208, 241, 152, 214, 219, 19, 100, 42, 56, 62, 23, 73, 184, 105, 184, 11, 239, 239, 244, 227, 17, 139, 128, 229, 245, 100, 59, 10, 71, 45, 247, 38, 131, 95, 91, 54, 165, 161, 145, 10, 33, 236, 255, 226, 97, 109, 135, 3, 31, 30, 2, 19, 127, 222, 17, 123, 100, 58, 25, 222, 82, 60, 75, 176, 15, 18, 106, 19, 109, 116, 177, 169, 100, 100, 73, 86, 22, 155, 49, 244, 79, 133, 96, 125, 214, 26, 39, 146, 196, 221, 205, 72, 211, 180, 252, 197, 191, 207, 214, 203, 233, 91, 116, 74, 105, 105, 38, 98, 81, 44, 248, 189, 16, 156, 226, 159, 211, 35, 198, 149, 111, 48, 192, 69, 127, 187, 146, 77, 98, 6, 65, 220, 68, 238, 162, 182, 140, 174, 159, 246, 50, 171, 220, 86, 254, 58, 185, 46, 187, 78, 35, 207, 13, 45, 1, 199, 14, 96, 178, 35, 61, 77, 248, 93, 251, 114, 128, 204, 37, 37, 200, 106, 223, 126, 15, 129, 150, 83, 45, 100, 7, 65, 61, 218, 118, 161, 234, 117, 33, 253, 206, 194, 172, 9, 182, 26, 70, 72, 246, 238, 89, 47, 81, 63, 138, 51, 165, 170, 170, 135, 85, 174, 242, 128, 235, 153, 240, 181, 159, 31, 135, 135, 118, 29, 148, 218, 111, 101, 193, 227, 61, 193, 77, 48, 74, 110, 204, 23, 60, 159, 164, 113, 86, 209, 37, 157, 17, 197, 67, 30, 56, 83, 215, 1, 108, 205, 64, 10, 94, 180, 231, 33, 171, 131, 168, 51, 106, 157, 42, 114, 96, 58, 98, 194, 171, 237, 158, 93, 125, 255, 229, 112, 213, 136, 192, 217, 93, 221, 9, 252, 71, 12, 226, 247, 62, 138, 121, 4, 19, 150, 73, 156, 187, 166, 22, 84, 5, 184, 28, 38, 30, 193, 117, 211, 7, 100, 60, 16, 140, 143, 234, 176, 84, 110, 183, 227, 151, 63, 16, 5, 208, 68, 221, 242, 142, 22, 123, 25, 226, 118, 45, 65, 252, 163, 235, 238, 42, 97, 181, 246, 15, 48, 212, 159, 51, 220, 111, 202, 43, 43, 93, 245, 22, 225, 57, 75, 162, 19, 212, 109, 120, 27, 46, 152, 76, 247, 87, 87, 54, 50, 15, 131, 55, 251, 54, 55, 56, 141, 234, 5, 65, 80, 42, 150, 73, 42, 64, 255, 195, 84, 63, 5, 49, 55, 76, 91, 38, 59, 91, 68, 131, 70, 97, 78, 120, 54, 105, 98, 136, 128, 129, 65, 33, 17, 245, 34, 213, 9, 243, 219, 201, 5, 137, 153, 48, 82, 215, 150, 204, 92, 143, 69, 209, 206, 191, 97, 96, 198, 179, 241, 37, 41, 138, 69, 145, 201, 234, 124, 189, 255, 2, 215, 211, 32, 245, 182, 83, 67, 189, 193, 185, 159, 136, 163, 178, 87, 238, 161, 205, 161, 207, 116, 163, 217, 236, 38, 121, 173, 89, 180, 61, 59, 35, 218, 89, 52, 188, 7, 196, 129, 124, 246, 194, 61, 185, 7, 220, 172, 253, 49, 52, 243, 28, 52, 16, 213, 121, 25, 178, 59, 101, 51, 115, 177, 152, 79, 214, 149, 124, 97, 242, 44, 83, 51, 200, 242, 176, 29, 42, 128, 56, 36, 34, 160, 223, 14, 70, 188, 237, 221, 180, 64, 221, 87, 93, 54, 191, 211, 145, 103, 26, 118, 106, 171, 5, 13, 86, 149, 50, 14, 48, 41, 68, 98, 20, 41, 229, 123, 131, 229, 122, 203, 100, 88, 253, 153, 218, 143, 251, 136, 22, 245, 154, 122, 155, 162, 236, 76, 213, 161, 80, 94, 80, 82, 10, 59, 194, 179, 167, 251, 151, 128, 54, 49, 4, 37, 133, 136, 159, 121, 175, 128, 200, 134, 189, 63, 54, 88, 200, 214, 180, 72, 223, 55, 184, 163, 242, 198, 216, 220, 176, 94, 88, 115, 185, 142, 242, 148, 90, 7, 243, 66, 16, 181, 253, 72, 43, 156, 243, 239, 201, 247, 12, 59, 167, 246, 133, 83, 101, 197, 169, 230, 144, 47, 64, 120, 148, 36, 92, 74, 90, 198, 192, 49, 86, 22, 112, 207, 183, 132, 244, 163, 117, 26, 13, 249, 122, 170, 66, 200, 108, 90, 142, 48, 103, 62, 253, 6, 18, 85, 62, 110, 134, 121, 75, 240, 30, 104, 16, 114, 23, 160, 202, 231, 142, 64, 3, 187, 240, 94, 88, 75, 248, 108, 210, 169, 58, 198, 171, 137, 200, 5, 95, 62, 35, 107, 139, 112, 31, 244, 64, 67, 243, 95, 157, 101, 94, 74, 216, 40, 62, 56, 100, 224, 120, 111, 1, 244, 137, 112, 96, 136, 104, 217, 13, 224, 101, 14, 0, 42, 201, 41, 184, 189, 147, 197, 231, 46, 244, 197, 141, 69, 4, 114, 229, 45, 225, 204, 45, 132, 68, 128, 128, 238, 198, 200, 233, 204, 252, 31, 242, 161, 163, 210, 143, 165, 136, 19, 220, 251, 29, 62, 107, 222, 62, 161, 133, 180, 237, 63, 68, 170, 85, 241, 38, 176, 82, 34, 254, 153, 170, 161, 94, 97, 231, 196, 136, 44, 1, 204, 70, 103, 17, 160, 25, 87, 40, 38, 201, 55, 69, 195, 160, 176, 165, 25, 119, 97, 210, 112, 134, 44, 166, 117, 195, 170, 24, 158, 165, 64, 135, 41, 94, 19, 250, 71, 24, 37, 134, 186, 38, 239, 223, 56, 170, 240, 104, 93, 130, 152, 59, 137, 180, 135, 233, 92, 155, 144, 200, 229, 161, 91, 235, 27, 193, 157, 212, 52, 210, 18, 59, 247, 41, 65, 97, 80, 9, 66, 64, 222, 57, 42, 83, 45, 47, 99, 167, 69, 6, 37, 103, 127, 240, 82, 201, 36, 24, 66, 71, 32, 27, 137, 102, 0, 59, 85, 65, 247, 126, 167, 102, 56, 56, 83, 191, 67, 161, 146, 99, 221, 31, 206, 222, 74, 90, 27, 151, 121, 128, 149, 5, 180, 229, 2, 93, 28, 106, 184, 102, 83, 194, 231, 69, 7, 201, 58, 77, 165, 219, 172, 213, 109, 202, 116, 238, 113, 63, 82, 177, 104, 72, 173, 71, 36, 242, 109, 168, 236, 42, 231, 201, 104, 208, 100, 131, 98, 106, 173, 247, 253, 182, 213, 31, 212, 89, 78, 193, 156, 15, 151, 133, 105, 127, 180, 99, 230, 249, 37, 92, 161, 41, 231, 127, 122, 230, 199, 192, 33, 52, 143, 39, 124, 36, 25, 4, 214, 76, 24, 219, 117, 103, 238, 180, 137, 199, 149, 221, 59, 140, 13, 193, 176, 175, 60, 58, 242, 61, 6, 185, 39, 239, 0, 59, 200, 233, 133, 31, 50, 164, 20, 83, 20, 234, 224, 122, 79, 243, 213, 131, 41, 165, 185, 56, 121, 13, 126, 90, 194, 234, 65, 138, 97, 136, 236, 37, 23, 39, 153, 214, 243, 91, 66, 150, 178, 93, 212, 42, 17, 139, 224, 91, 104, 22, 111, 163, 98, 7, 180, 196, 78, 66, 168, 255, 87, 205, 54, 202, 183, 244, 45, 136, 117, 63, 49, 0, 127, 137, 197, 25, 143, 128, 228, 11, 125, 201, 158, 250, 247, 38, 57, 24, 2, 164, 241, 161, 10, 85, 70, 151, 248, 28, 247, 253, 48, 22, 44, 231, 62, 175, 217, 12, 150, 123, 250, 140, 80, 192, 226, 223, 189, 23, 8, 233, 74, 92, 69, 155, 26, 251, 214, 79, 187, 255, 252, 231, 253, 238, 205, 161, 230, 68, 137, 179, 88, 29, 206, 203, 91, 76, 70, 42, 68, 90, 200, 88, 244, 231, 221, 17, 57, 219, 28, 142, 178, 219, 197, 57, 34, 186, 107, 174, 78, 41, 84, 240, 46, 247, 36, 113, 245, 144, 149, 7, 32, 149, 240, 95, 217, 13, 93, 147, 241, 218, 30, 4, 120, 192, 213, 51, 97, 16, 79, 143, 67, 167, 196, 90, 27, 196, 178, 13, 103, 174, 74, 158, 172, 121, 5, 200, 138, 218, 2, 10, 17, 214, 136, 115, 214, 80, 50, 2, 182, 83, 235, 225, 38, 178, 79, 121, 204, 150, 42, 136, 218, 23, 142, 73, 161, 215, 82, 157, 18, 132, 255, 206, 85, 200, 186, 99, 144, 204, 23, 140, 80, 32, 254, 23, 99, 110, 237, 12, 38, 76, 38, 209, 35, 254, 140, 127, 83, 46, 77, 142, 115, 255, 192, 137, 176, 124, 70, 165, 101, 28, 243, 130, 73, 100, 21, 198, 67, 226, 94, 103, 12, 28, 161, 111, 173, 243, 10, 24, 148, 123, 218, 159, 214, 135, 119, 255, 143, 166, 136, 95, 3, 60, 246, 31, 249, 89, 95, 126, 64, 51, 68, 10, 173, 212, 217, 43, 229, 32, 155, 97, 65, 62, 43, 103, 89, 123, 184, 230, 60, 92, 18, 231, 86, 214, 82, 66, 11, 129, 42, 22, 162, 254, 139, 241, 32, 42, 192, 114, 17, 207, 244, 187, 74, 135, 57, 153, 150, 49, 11, 224, 193, 83, 144, 29, 230, 190, 9, 220, 183, 56, 215, 133, 40, 40, 53, 210, 35, 105, 85, 161, 41, 61, 161, 149, 157, 138, 16, 38, 31, 218, 37, 195, 102, 158, 29, 57, 6, 65, 184, 246, 141, 19, 220, 195, 86, 239, 68, 43, 94, 251, 254, 67, 62, 27, 100, 123, 134, 101, 33, 112, 60, 250, 61, 171, 90, 60, 23, 46, 190, 216, 227, 70, 145, 201, 195, 197, 200, 214, 182, 169, 222, 153, 90, 40, 13, 164, 133, 136, 220, 246, 207, 176, 34, 105, 0, 127, 251, 91, 134, 43, 139, 143, 92, 225, 21, 83, 87, 37, 238, 91, 143, 89, 169, 235, 206, 53, 199, 7, 177, 218, 169, 236, 36, 86, 33, 224, 242, 247, 244, 116, 178, 146, 130, 115, 248, 14, 169, 153, 226, 48, 243, 6, 97, 71, 125, 0, 128, 198, 27, 146, 150, 2, 26, 197, 74, 152, 99, 4, 0, 90, 244, 169, 94, 156, 190, 202, 185, 97, 55, 59, 197, 167, 223, 220, 8, 48, 248, 79, 80, 128, 38, 31, 186, 252, 19, 39, 63, 55, 119, 72, 129, 104, 78, 68, 129, 104, 143, 184, 35, 156, 147, 37, 150, 12, 242, 53, 223, 127, 65, 39, 113, 139, 139, 8, 172, 215, 88, 48, 212, 154, 59, 110, 231, 195, 59, 131, 159, 9, 245, 188, 243, 0, 135, 254, 15, 93, 172, 66, 176, 159, 97, 36, 223, 9, 166, 151, 105, 19, 8, 92, 209, 62, 95, 100, 151, 212, 167, 109, 207, 169, 194, 70, 119, 199, 123, 70, 105, 132, 70, 156, 219, 58, 21, 162, 161, 87, 21, 204, 161, 226, 128, 32, 155, 113, 213, 250, 216, 60, 95, 255, 50, 119, 158, 248, 153, 14, 113, 42, 164, 153, 231, 109, 15, 95, 161, 137, 122, 87, 1, 197, 225, 232, 89, 54, 60, 225, 186, 244, 108, 238, 146, 65, 4, 46, 99, 26, 134, 56, 80, 245, 45, 85, 135, 70, 70, 205, 4, 55, 48, 128, 181, 97, 208, 251, 44, 230, 210, 107, 141, 229, 68, 65, 3, 157, 58, 229, 121, 42, 135, 147, 221, 90, 211, 32, 104, 210, 193, 123, 170, 147, 126, 220, 120, 232, 234, 82, 151, 91, 42, 91, 66, 219, 76, 214, 113, 213, 156, 255, 52, 116, 191, 139, 91, 105, 6, 48, 80, 115, 138, 6, 132, 125, 245, 186, 117, 208, 133, 175, 81, 110, 4, 157, 162, 72, 2, 12, 187, 121, 229, 61, 108, 134, 133, 228, 156, 105, 22, 222, 95, 197, 206, 111, 205, 178, 215, 138, 219, 78, 50, 69, 231, 150, 190, 8, 195, 167, 130, 62, 155, 49, 140, 255, 59, 2, 121, 250, 106, 145, 61, 22, 219, 108, 111, 7, 75, 9, 180, 149, 134, 37, 39, 57, 183, 254, 128, 246, 51, 131, 225, 23, 255, 158, 129, 105, 36, 209, 183, 134, 53, 244, 61, 1, 55, 200, 200, 183, 67, 10, 77, 208, 250, 53, 88, 234, 89, 168, 32, 91, 159, 186, 67, 50, 204, 210, 253, 26, 179, 72, 202, 141, 71, 133, 79, 154, 177, 28, 212, 215, 103, 115, 228, 19, 6, 133, 148, 98, 13, 29, 236, 209, 5, 47, 159, 231, 160, 138, 145, 227, 77, 160, 250, 208, 187, 226, 149, 171, 108, 12, 233, 123, 105, 73, 16, 169, 153, 54, 214, 185, 132, 89, 189, 83, 72, 253, 111, 88, 122, 39, 56, 229, 176, 144, 178, 38, 78, 211, 231, 130, 236, 30, 165, 23, 181, 252, 15, 253, 30, 69, 62, 72, 69, 76, 243, 46, 0, 130, 181, 142, 17, 36, 249, 212, 202, 44, 48, 144, 91, 39, 180, 14, 166, 240, 62, 97, 82, 107, 58, 131, 91, 178, 130, 229, 70, 43, 51, 43, 49, 194, 230, 156, 153, 122, 147, 157, 33, 97, 166, 46, 220, 13, 210, 19, 153, 103, 29, 4, 234, 53, 102, 25, 201, 11, 14, 41, 145, 177, 97, 201, 208, 212, 111, 162, 6, 195, 55, 88, 201, 12, 86, 165, 42, 159, 0, 18, 149, 238, 97, 242, 92, 118, 227, 0, 153, 156, 182, 237, 135, 155, 201, 179, 234, 160, 18, 157, 218, 219, 248, 179, 98, 234, 212, 230, 64, 146, 159, 246, 199, 234, 207, 228, 61, 198, 196, 31, 111, 225, 123, 59, 212, 19, 133, 132, 228, 247, 254, 80, 127, 54, 112, 85, 181, 39, 82, 158, 153, 124, 143, 229, 224, 236, 190, 252, 173, 224, 166, 248, 88, 125, 161, 189, 106, 106, 110, 73, 48, 108, 100, 26, 150, 50, 155, 150, 51, 249, 129, 111, 249, 117, 232, 129, 229, 113, 62, 117, 57, 44, 238, 167, 38, 33, 150, 4, 151, 142, 40, 199, 111, 42, 190, 151, 86, 153, 65, 55, 71, 253, 162, 223, 22, 197, 148, 113, 14, 88, 51, 162, 54, 9, 62, 252, 167, 63, 51, 62, 239, 67, 39, 190, 178, 166, 192, 184, 124, 97, 116, 88, 192, 133, 13, 252, 31, 103, 186, 127, 41, 211, 118, 23, 24, 19, 52, 228, 51, 196, 139, 31, 82, 49, 230, 226, 180, 53, 129, 49, 232, 210, 195, 108, 241, 24, 5, 188, 131, 236, 56, 136, 35, 89, 117, 196, 68, 20, 70, 94, 107, 242, 249, 35, 92, 39, 116, 218, 241, 66, 192, 109, 176, 65, 141, 241, 94, 227, 5, 58, 206, 143, 185, 85, 135, 89, 186, 72, 15, 144, 64, 159, 18, 123, 96, 198, 190, 196, 41, 13, 54, 168, 194, 146, 11, 185, 178, 94, 213, 169, 233, 18, 145, 65, 178, 53, 121, 91, 204, 98, 123, 239, 109, 132, 71, 100, 56, 18, 247, 85, 20, 198, 90, 251, 213, 155, 120, 208, 214, 28, 15, 50, 201, 214, 35, 94, 167, 252, 94, 251, 177, 253, 152, 186, 155, 210, 172, 230, 219, 160, 206, 99, 151, 140, 86, 49, 112, 110, 177, 27, 202, 81, 167, 212, 145, 54, 231, 241, 175, 251, 241, 15, 140, 134, 255, 124, 210, 233, 129, 1, 179, 137, 112, 174, 65, 203, 112, 96, 28, 47, 142, 126, 188, 137, 253, 163, 192, 215, 175, 102, 97, 4, 137, 31, 8, 228, 40, 16, 56, 61, 46, 239, 208, 130, 87, 117, 168, 222, 52, 221, 113, 140, 62, 76, 25, 255, 137, 252, 155, 232, 141, 140, 232, 37, 7, 5, 146, 136, 183, 102, 64, 81, 149, 199, 95, 191, 249, 121, 109, 87, 174, 64, 57, 114, 1, 232, 11, 75, 59, 28, 233, 237, 64, 101, 169, 77, 80, 55, 90, 112, 72, 176, 236, 165, 233, 181, 225, 24, 101, 142, 247, 136, 175, 218, 8, 237, 211, 161, 67, 225, 166, 143, 36, 97, 214, 103, 219, 106, 67, 95, 109, 236, 194, 45, 132, 25, 125, 27, 169, 215, 6, 49, 74, 124, 170, 136, 180, 52, 225, 105, 111, 82, 190, 209, 9, 217, 11, 245, 185, 216, 152, 230, 124, 143, 216, 219, 153, 25, 54, 93, 137, 203, 42, 180, 166, 154, 52, 22, 178, 189, 50, 76, 161, 153, 132, 211, 217, 120, 137, 24, 184, 79, 87, 60, 76, 181, 161, 218, 204, 176, 188, 122, 33, 187, 38, 245, 229, 143, 121, 158, 91, 74, 209, 81, 196, 230, 164, 189, 203, 91, 55, 194, 85, 68, 47, 56, 38, 159, 249, 236, 237, 217, 145, 94, 218, 14, 251, 40, 176, 138, 9, 7, 123, 62, 144, 217, 222, 95, 184, 191, 95, 215, 170, 67, 142, 21, 162, 133, 218, 161, 122, 248, 73, 30, 177, 175, 24, 170, 31, 130, 90, 14, 71, 128, 232, 131, 184, 100, 142, 219, 40, 99, 49, 138, 205, 87, 146, 70, 2, 93, 149, 207, 137, 89, 84, 253, 227, 56, 137, 161, 35, 65, 75, 15, 115, 85, 103, 184, 223, 211, 82, 110, 76, 127, 11, 87, 84, 167, 251, 72, 199, 98, 19, 72, 15, 118, 22, 7, 40, 41, 228, 248, 177, 175, 97, 242, 164, 207, 233, 199, 206, 63, 24, 98, 155, 252, 247, 254, 134, 126, 95, 194, 134, 6, 125, 101, 241, 60, 2, 152, 226, 247, 93, 79, 147, 124, 85, 76, 158, 171, 7, 32, 102, 178, 101, 153, 232, 149, 160, 11, 146, 95, 28, 143, 151, 15, 189, 72, 81, 184, 11, 24, 135, 181, 203, 96, 91, 9, 70, 175, 206, 98, 169, 231, 162, 241, 243, 225, 242, 45, 253, 194, 180, 45, 197, 186, 206, 162, 113, 42, 141, 100, 216, 91, 12, 179, 74, 19, 60, 252, 113, 44, 44, 99, 123, 215, 153, 239, 2, 78, 163, 39, 39, 43, 118, 244, 139, 222, 156, 189, 119, 188, 83, 90, 6, 16, 168, 90, 175, 87, 233, 105, 88, 241, 123, 246, 126, 208, 102, 12, 50, 156, 105, 190, 79, 99, 87, 218, 85, 217, 227, 243, 75, 114, 150, 175, 9, 217, 87, 8, 220, 112, 243, 242, 32, 149, 178, 87, 44, 29, 67, 133, 20, 163, 42, 63, 171, 191, 157, 173, 193, 129, 66, 238, 71, 139, 155, 49, 39, 113, 196, 39, 98, 142, 106, 8, 73, 219, 147, 148, 90, 129, 99, 178, 13, 104, 254, 162, 145, 104, 61, 85, 196, 213, 82, 214, 50, 200, 213, 114, 24, 160, 16, 232, 145, 196, 162, 42, 217, 40, 219, 159, 133, 236, 122, 118, 8, 78, 25, 119, 90, 150, 236, 184, 45, 252, 218, 188, 253, 163, 125, 22, 27, 142, 156, 201, 107, 241, 51, 51, 137, 117, 151, 125, 165, 17, 106, 85, 36, 186, 171, 60, 122, 74, 207, 165, 207, 78, 118, 149, 165, 147, 159, 141, 90, 238, 17, 197, 238, 79, 81, 118, 28, 179, 58, 125, 60, 195, 125, 51, 46, 153, 159, 201, 95, 128, 245, 100, 202, 98, 239, 127, 222, 20, 163, 131, 30, 217, 149, 191, 218, 27, 26, 74, 125, 136, 211, 17, 223, 163, 34, 172, 255, 29, 114, 175, 205, 26, 166, 158, 141, 100, 124, 133, 175, 144, 152, 63, 54, 119, 240, 205, 203, 249, 230, 246, 143, 252, 40, 31, 142, 80, 206, 70, 87, 78, 84, 42, 63, 77, 192, 68, 15, 210, 140, 175, 115, 29, 162, 220, 157, 189, 131, 102, 199, 90, 43, 101, 198, 95, 45, 227, 63, 42, 152, 222, 139, 205, 216, 112, 38, 133, 241, 114, 149, 9, 3, 250, 221, 100, 176, 77, 225, 2, 224, 87, 103, 168, 122, 64, 67, 220, 110, 173, 93, 93, 57, 238, 159, 78, 96, 38, 130, 237, 51, 40, 31, 138, 66, 146, 79, 201, 110, 197, 110, 179, 243, 32, 130, 96, 87, 34, 164, 150, 89, 35, 229, 170, 10, 238, 90, 107, 163, 139, 12, 249, 235, 119, 36, 231, 152, 61, 144, 187, 48, 125, 1, 200, 219, 126, 241, 191, 183, 30, 88, 49, 146, 127, 81, 42, 152, 198, 255, 70, 63, 118, 15, 86, 76, 252, 179, 144, 162, 225, 134, 173, 155, 51, 213, 15, 1, 122, 156, 227, 241, 32, 212, 178, 148, 245, 226, 148, 253, 0, 99, 253, 60, 97, 153, 25, 226, 45, 51, 118, 56, 120, 111, 72, 134, 99, 17, 124, 218, 21, 22, 145, 138, 151, 10, 41, 213, 121, 160, 230, 168, 196, 228, 222, 31, 99, 93, 246, 233, 95, 178, 109, 72, 83, 144, 24, 109, 70, 23, 214, 48, 60, 132, 154, 44, 166, 32, 250, 159, 228, 63, 180, 28, 108, 164, 12, 164, 84, 129, 69, 211, 4, 153, 76, 116, 50, 145, 204, 116, 91, 214, 255, 21, 103, 92, 186, 84, 44, 150, 70, 145, 178, 12, 75, 94, 168, 13, 41, 197, 191, 166, 13, 14, 215, 221, 220, 88, 186, 108, 215, 164, 215, 190, 66, 83, 183, 101, 19, 40, 47, 224, 215, 217, 124, 34, 196, 72, 239, 183, 192, 128, 216, 181, 70, 29, 8, 226, 168, 170, 240, 117, 135, 155, 205, 76, 91, 181, 79, 197, 13, 53, 171, 165, 29, 203, 172, 79, 200, 74, 107, 203, 59, 14, 30, 251, 248, 182, 205, 25, 154, 53, 63, 32, 240, 48, 7, 1, 239, 160, 170, 205, 81, 92, 71, 208, 4, 115, 222, 19, 25, 114, 8, 237, 167, 181, 187, 253, 8, 128, 129, 227, 49, 151, 149, 101, 230, 64, 68, 222, 227, 206, 114, 97, 121, 240, 80, 225, 5, 68, 54, 27, 239, 44, 182, 46, 56, 149, 232, 146, 142, 115, 32, 111, 45, 118, 254, 202, 21, 70, 77, 75, 128, 39, 0, 98, 228, 222, 45, 151, 205, 138, 108, 97, 223, 171, 248, 17, 173, 137, 197, 84, 116, 212, 174, 152, 13, 194, 244, 217, 53, 22, 8, 193, 24, 223, 38, 16, 56, 79, 116, 23, 123, 99, 63, 20, 225, 136, 123, 188, 107, 202, 246, 11, 226, 205, 230, 244, 122, 77, 4, 86, 130, 193, 125, 209, 208, 208, 77, 43, 62, 172, 132, 27, 106, 195, 30, 235, 54, 184, 233, 98, 229, 98, 153, 241, 0, 139, 109, 248, 102, 125, 92, 74, 165, 84, 165, 161, 123, 39, 229, 208, 236, 246, 238, 127, 180, 190, 64, 176, 219, 145, 124, 227, 110, 250, 37, 30, 66, 134, 179, 40, 149, 155, 9, 146, 35, 25, 139, 248, 122, 75, 217, 230, 6, 111, 25, 124, 25, 24, 29, 218, 133, 127, 230, 44, 46, 254, 205, 184, 244, 144, 233, 45, 214, 126, 107, 203, 36, 144, 9, 219, 6, 83, 31, 128, 165, 44, 195, 17, 252, 60, 122, 178, 153, 150, 248, 185, 158, 11, 51, 28, 53, 217, 49, 61, 188, 43, 125, 51, 174, 139, 85, 64, 241, 37, 238, 222, 47, 150, 166, 106, 7, 20, 39, 236, 147, 221, 138, 231, 58, 218, 154, 99, 16, 15, 250, 165, 23, 80, 102, 115, 29, 63, 245, 95, 1, 11, 64, 225, 191, 96, 230, 200, 145, 232, 191, 70, 28, 30, 72, 101, 42, 228, 36, 226, 121, 23, 243, 20, 81, 72, 111, 103, 181, 85, 8, 97, 129, 184, 150, 199, 116, 85, 107, 239, 4, 47, 183, 199, 244, 133, 243, 56, 84, 7, 215, 43, 62, 221, 194, 199, 8, 34, 74, 179, 103, 185, 54, 3, 67, 172, 19, 169, 88, 90, 154, 210, 18, 107, 123, 54, 100, 132, 173, 185, 40, 128, 252, 118, 81, 227, 182, 108, 235, 121, 244, 232, 250, 82, 182, 36, 63, 142, 15, 132, 167, 2, 203, 3, 104, 198, 25, 69, 4, 82, 182, 205, 54, 148, 57, 116, 224, 3, 228, 154, 159, 68, 107, 92, 111, 70, 18, 52, 103, 121, 32, 125, 18, 155, 206, 12, 90, 239, 68, 5, 250, 65, 76, 196, 86, 38, 93, 98, 196, 97, 47, 17, 236, 42, 113, 63, 183, 86, 87, 240, 6, 197, 238, 171, 59, 91, 225, 208, 234, 203, 50, 70, 250, 248, 73, 118, 237, 187, 3, 75, 108, 10, 227, 180, 121, 121, 20, 20, 130, 116, 196, 116, 6, 151, 149, 125, 164, 118, 216, 170, 46, 92, 114, 154, 15, 105, 47, 79, 153, 22, 51, 181, 170, 187, 254, 102, 189, 112, 232, 245, 145, 14, 85, 156, 98, 25, 138, 204, 59, 32, 180, 146, 99, 10, 147, 179, 139, 67, 227, 12, 73, 200, 216, 90, 9, 109, 32, 150, 37, 197, 11, 17, 224, 49, 108, 155, 176, 115, 209, 199, 165, 68, 9, 70, 155, 178, 205, 226, 143, 65, 195, 223, 98, 72, 134, 132, 186, 171, 157, 101, 68, 36, 208, 91, 147, 238, 18, 177, 191, 181, 185, 188, 199, 164, 183, 117, 215, 127, 38, 83, 207, 192, 16, 87, 251, 108, 239, 11, 150, 69, 33, 102, 178, 120, 228, 171, 177, 55, 55, 103, 230, 189, 121, 65, 51, 99, 5, 5, 198, 122, 2, 112, 194, 144, 63, 63, 45, 40, 161, 242, 159, 169, 110, 97, 42, 156, 204, 195, 28, 48, 250, 1, 108, 121, 166, 29, 69, 61, 29, 82, 206, 163, 22, 150, 85, 30, 21, 15, 159, 143, 236, 133, 44, 164, 19, 32, 153, 153, 247, 119, 13, 16, 124, 234, 26, 14, 225, 155, 183, 245, 111, 60, 128, 37, 187, 9, 162, 61, 141, 30, 35, 46, 225, 46, 167, 89, 3, 218, 205, 179, 21, 97, 118, 0, 47, 15, 204, 181, 71, 76, 38, 134, 52, 156, 90, 21, 18, 21, 5, 30, 41, 91, 26, 71, 83, 78, 93, 38, 63, 64, 219, 11, 154, 129, 233, 92, 165, 104, 77, 70, 143, 252, 221, 178, 51, 215, 128, 10, 185, 137, 216, 185, 102, 105, 107, 90, 240, 31, 174, 188, 225, 134, 16, 19, 202, 93, 67, 212, 165, 244, 177, 233, 59, 220, 101, 1, 26, 245, 0, 87, 29, 16, 204, 147, 132, 208, 37, 29, 104, 32, 76, 65, 99, 34, 126, 157, 114, 36, 55, 11, 172, 69, 200, 27, 106, 201, 211, 6, 30, 115, 30, 56, 18, 90, 109, 195, 27, 206, 205, 182, 49, 134, 91, 203, 106, 249, 73, 2, 122, 51, 104, 123, 115, 44, 158, 93, 36, 192, 36, 67, 100, 19, 25, 165, 62, 56, 59, 183, 233, 174, 58, 187, 178, 165, 27, 250, 79, 232, 22, 208, 194, 53, 10, 57, 177, 107, 44, 111, 199, 38, 137, 53, 147, 40, 72, 204, 26, 62, 66, 63, 84, 252, 173, 211, 232, 172, 121, 236, 108, 204, 95, 218, 147, 217, 61, 151, 64, 90, 72, 32, 231, 135, 74, 60, 219, 24, 66, 209, 220, 200, 136, 102, 62, 73, 72, 198, 81, 111, 83, 80, 197, 57, 99, 223, 63, 52, 226, 95, 171, 169, 178, 163, 175, 236, 147, 54, 226, 208, 199, 52, 107, 138, 114, 116, 119, 240, 98, 4, 229, 200, 133, 9, 182, 29, 210, 83, 175, 140, 120, 10, 232, 145, 90, 53, 102, 34, 4, 77, 211, 195, 37, 6, 253, 97, 82, 223, 44, 20, 188, 63, 3, 241, 242, 5, 130, 198, 203, 141, 245, 46, 74, 168, 215, 16, 168, 155, 72, 3, 37, 17, 192, 132, 253, 244, 146, 74, 122, 41, 172, 171, 44, 64, 8, 188, 206, 71, 193, 110, 107, 49, 238, 224, 76, 12, 73, 100, 76, 146, 149, 8, 64, 170, 78, 106, 119, 27, 65, 9, 171, 150, 87, 160, 33, 248, 234, 185, 72, 6, 34, 243, 15, 6, 217, 156, 51, 232, 35, 189, 201, 41, 173, 83, 243, 222, 42, 188, 243, 167, 218, 220, 185, 100, 69, 15, 115, 102, 239, 190, 156, 135, 81, 146, 40, 186, 92, 13, 204, 63, 110, 1, 138, 64, 117, 181, 159, 71, 243, 187, 250, 39, 32, 116, 144, 174, 27, 233, 46, 170, 207, 245, 157, 2, 203, 218, 2, 183, 124, 114, 169, 131, 225, 217, 43, 145, 101, 187, 28, 81, 208, 244, 196, 66, 170, 141, 130, 166, 74, 206, 239, 0, 134, 68, 166, 50, 27, 203, 193, 126, 135, 186, 89, 184, 111, 250, 242, 253, 113, 183, 242, 90, 37, 177, 3, 76, 214, 124, 218, 142, 99, 46, 26, 95, 33, 76, 201, 53, 182, 253, 115, 46, 133, 115, 51, 79, 95, 96, 151, 209, 89, 124, 195, 176, 195, 235, 171, 206, 7, 170, 124, 115, 162, 236, 160, 117, 221, 217, 71, 38, 163, 86, 108, 141, 206, 125, 180, 9, 48, 29, 96, 127, 187, 9, 16, 176, 63, 158, 48, 246, 44, 69, 167, 108, 107, 167, 168, 230, 210, 237, 187, 6, 67, 179, 81, 128, 61, 25, 203, 117, 237, 20, 224, 29, 210, 100, 143, 44, 197, 87, 18, 233, 148, 167, 184, 39, 109, 117, 206, 230, 132, 209, 186, 180, 234, 95, 56, 14, 116, 242, 211, 163, 123, 24, 160, 134, 223, 131, 161, 200, 132, 214, 162, 218, 114, 94, 227, 211, 180, 145, 22, 55, 89, 162, 154, 31, 182, 182, 94, 233, 55, 203, 206, 37, 117, 126, 100, 40, 233, 101, 88, 109, 32, 98, 113, 106, 4, 243, 166, 74, 243, 152, 121, 193, 41, 54, 95, 148, 184, 61, 223, 46, 217, 55, 224, 230, 198, 181, 151, 71, 219, 213, 1, 122, 22, 51, 207, 169, 61, 15, 223, 59, 238, 253, 63, 176, 209, 170, 122, 104, 190, 222, 72, 150, 74, 208, 191, 20, 212, 26, 155, 172, 218, 124, 176, 108, 114, 117, 76, 64, 92, 139, 87, 218, 248, 211, 242, 168, 203, 169, 51, 134, 179, 34, 144, 114, 37, 213, 145, 28, 59, 19, 114, 241, 88, 28, 29, 73, 245, 137, 134, 167, 223, 138, 180, 112, 173, 203, 106, 31, 29, 255, 1, 79, 11, 152, 252, 97, 210, 200, 60, 179, 143, 129, 6, 201, 93, 193, 40, 24, 31, 97, 155, 201, 15, 125, 86, 62, 4, 111, 169, 134, 91, 75, 30, 196, 16, 47, 133, 157, 88, 69, 181, 66, 10, 73, 213, 121, 202, 108, 239, 248, 165, 116, 171, 4, 201, 252, 134, 191, 6, 193, 216, 249, 6, 90, 190, 150, 38, 120, 39, 152, 58, 46, 137, 250, 186, 135, 130, 92, 59, 61, 25, 153, 196, 112, 163, 162, 228, 4, 15, 103, 43, 116, 55, 78, 20, 41, 166, 30, 133, 77, 109, 84, 110, 9, 121, 109, 117, 26, 93, 24, 103, 65, 106, 180, 201, 179, 252, 144, 94, 158, 173, 217, 154, 190, 235, 203, 226, 160, 118, 35, 206, 138, 28, 248, 147, 27, 66, 253, 234, 143, 112, 62, 52, 16, 55, 16, 158, 100, 239, 162, 140, 228, 15, 81, 248, 173, 56, 240, 188, 238, 19, 161, 16, 66, 81, 74, 77, 135, 188, 23, 202, 203, 248, 192, 9, 245, 146, 106, 84, 194, 200, 105, 91, 51, 148, 180, 195, 216, 177, 40, 242, 90, 6, 80, 200, 100, 78, 87, 176, 209, 95, 236, 132, 248, 102, 144, 18, 39, 184, 68, 234, 223, 130, 39, 121, 235, 184, 6, 30, 133, 200, 161, 197, 157, 8, 33, 235, 161, 64, 148, 241, 46, 132, 235, 49, 130, 228, 225, 23, 132, 148, 40, 255, 128, 202, 120, 135, 137, 105, 10, 133, 58, 16, 138, 75, 178, 102, 208, 205, 64, 254, 31, 250, 128, 78, 0, 235, 129, 119, 120, 206, 206, 75, 5, 106, 207, 98, 18, 62, 171, 61, 155, 218, 227, 252, 134, 209, 136, 55, 100, 237, 141, 179, 189, 247, 125, 236, 101, 138, 243, 254, 168, 86, 229, 131, 6, 235, 84, 105, 36, 140, 60, 253, 172, 253, 130, 231, 6, 26, 122, 31, 194, 185, 237, 61, 242, 48, 242, 225, 93, 9, 212, 223, 80, 125, 162, 48, 110, 141, 220, 221, 134, 121, 108, 250, 255, 112, 232, 160, 110, 244, 243, 82, 102, 120, 23, 187, 228, 218, 186, 187, 15, 83, 253, 210, 172, 160, 15, 223, 32, 101, 163, 18, 93, 98, 84, 173, 122, 95, 131, 10, 102, 27, 13, 184, 236, 238, 7, 124, 131, 23, 190, 100, 163, 34, 235, 68, 91, 255, 150, 182, 142, 202, 73, 101, 94, 79, 214, 109, 12, 124, 11, 59, 38, 189, 230, 157, 94, 150, 243, 198, 131, 111, 228, 221, 227, 7, 213, 80, 176, 214, 80, 133, 16, 90, 2, 1, 215, 27, 115, 134, 107, 254, 227, 160, 25, 134, 87, 95, 39, 110, 35, 178, 8, 253, 141, 133, 112, 105, 81, 251, 45, 64, 111, 14, 198, 213, 237, 127, 73, 72, 207, 1, 57, 161, 232, 90, 20, 241, 77, 107, 113, 255, 11, 205, 106, 35, 15, 119, 51, 154, 215, 241, 5, 245, 6, 59, 245, 22, 254, 28, 149, 171, 242, 160, 158, 76, 135, 134, 11, 74, 146, 113, 88, 48, 26, 117, 29, 176, 203, 177, 243, 31, 205, 4, 37, 62, 249, 80, 100, 46, 8, 72, 141, 4, 94, 249, 78, 161, 124, 122, 35, 211, 200, 52, 160, 63, 24, 233, 245, 202, 96, 157, 33, 39, 170, 4, 88, 178, 56, 139, 86, 6, 107, 215, 58, 97, 108, 73, 157, 151, 84, 48, 38, 182, 137, 47, 141, 75, 196, 232, 117, 97, 203, 226, 66, 147, 104, 192, 112, 18, 74, 104, 154, 165, 59, 150, 218, 38, 6, 57, 210, 152, 65, 130, 82, 208, 148, 170, 76, 136, 26, 222, 25, 49, 80, 144, 14, 141, 17, 181, 127, 222, 7, 173, 139, 85, 69, 217, 44, 41, 247, 85, 133, 194, 194, 219, 105, 4, 216, 184, 9, 156, 124, 101, 31, 103, 148, 59, 209, 91, 17, 250, 244, 196, 172, 99, 106, 186, 122, 189, 134, 49, 221, 48, 97, 231, 170, 173, 21, 12, 69, 63, 141, 79, 29, 89, 31, 9, 74, 158, 241, 142, 242, 226, 244, 132, 163, 160, 80, 91, 12, 119, 30, 23, 64, 210, 124, 170, 173, 205, 160, 155, 167, 41, 59, 208, 29, 235, 94, 167, 181, 5, 207, 29, 52, 77, 194, 34, 42, 159, 136, 2, 44, 187, 208, 60, 121, 186, 144, 205, 0, 86, 107, 254, 31, 167, 215, 236, 114, 91, 200, 203, 154, 175, 226, 177, 84, 218, 100, 79, 149, 247, 171, 92, 131, 86, 94, 110, 143, 191, 55, 68, 253, 7, 165, 205, 84, 179, 24, 99, 181, 0, 75, 129, 233, 253, 207, 226, 91, 195, 218, 172, 92, 95, 6, 121, 55, 233, 217, 9, 193, 76, 105, 24, 41, 214, 217, 158, 240, 125, 40, 147, 165, 136, 47, 242, 20, 114, 95, 114, 236, 104, 20, 86, 251, 134, 224, 21, 248, 229, 167, 124, 132, 103, 27, 114, 42, 47, 154, 209, 207, 16, 186, 234, 101, 224, 209, 159, 56, 196, 110, 4, 141, 237, 25, 211, 141, 27, 132, 250, 243, 170, 7, 241, 177, 219, 248, 196, 144, 139, 32, 116, 157, 9, 131, 243, 245, 59, 82, 34, 62, 220, 45, 27, 136, 139, 133, 172, 7, 47, 161, 0, 123, 105, 41, 101, 78, 227, 217, 22, 179, 138, 49, 170, 150, 0, 181, 159, 29, 191, 169, 237, 115, 165, 81, 122, 13, 251, 213, 152, 156, 152, 140, 191, 132, 94, 126, 121, 170, 85, 228, 112, 22, 127, 45, 46, 202, 71, 210, 93, 74, 233, 99, 223, 159, 232, 96, 142, 232, 208, 129, 128, 56, 235, 34, 178, 144, 92, 219, 188, 213, 121, 184, 194, 131, 29, 171, 144, 60, 12, 158, 59, 218, 156, 245, 171, 143, 90, 171, 105, 183, 123, 191, 176, 78, 193, 51, 1, 74, 226, 30, 65, 251, 202, 166, 22, 243, 50, 175, 17, 231, 195, 226, 209, 21, 37, 234, 231, 151, 111, 144, 224, 47, 194, 207, 217, 41, 31, 112, 210, 181, 43, 207, 180, 89, 239, 12, 58, 178, 237, 11, 92, 1, 130, 93, 89, 169, 10, 153, 27, 72, 219, 185, 137, 238, 164, 115, 124, 13, 75, 157, 24, 231, 175, 51, 71, 198, 88, 70, 79, 15, 79, 234, 147, 55, 23, 45, 121, 197, 43, 195, 75, 4, 208, 11, 38, 232, 116, 30, 71, 6, 138, 161, 24, 73, 78, 210, 44, 33, 168, 222, 124, 249, 161, 29, 110, 99, 104, 246, 208, 53, 16, 151, 195, 33, 3, 71, 95, 154, 220, 152, 12, 242, 36, 74, 100, 145, 200, 157, 197, 243, 0, 151, 159, 242, 181, 165, 251, 160, 98, 132, 44, 228, 22, 153, 216, 30, 244, 155, 130, 202, 36, 188, 208, 230, 131, 72, 97, 43, 251, 78, 149, 152, 105, 209, 52, 56, 65, 235, 165, 58, 14, 195, 3, 52, 241, 4, 71, 4, 26, 231, 91, 109, 97, 231, 193, 116, 115, 45, 94, 213, 157, 102, 63, 215, 15, 148, 94, 206, 174, 172, 19, 156, 230, 73, 228, 173, 195, 197, 61, 137, 56, 108, 103, 253, 179, 150, 250, 208, 157, 75, 100, 217, 194, 35, 129, 228, 53, 158, 89, 153, 130, 173, 21, 195, 92, 112, 127, 168, 48, 87, 224, 72, 252, 20, 177, 183, 103, 249, 193, 109, 100, 27, 1, 125, 164, 226, 243, 206, 197, 145, 166, 178, 228, 157, 121, 188, 86, 76, 126, 225, 247, 164, 94, 137, 113, 100, 199, 58, 225, 239, 179, 164, 224, 160, 90, 26, 194, 212, 129, 16, 0, 161, 243, 131, 193, 124, 246, 231, 153, 48, 238, 189, 199, 67, 255, 206, 20, 113, 109, 198, 170, 73, 73, 162, 108, 82, 228, 159, 220, 136, 80, 58, 167, 100, 253, 5, 41, 41, 145, 32, 16, 235, 107, 201, 23, 106, 110, 226, 52, 78, 9, 148, 250, 248, 25, 213, 200, 36, 131, 19, 164, 42, 173, 175, 237, 136, 173, 140, 156, 96, 36, 126, 158, 255, 55, 244, 0, 60, 111, 54, 241, 82, 247, 119, 80, 68, 102, 110, 95, 82, 144, 2, 246, 187, 167, 134, 18, 40, 48, 129, 145, 202, 70, 219, 183, 163, 48, 185, 223, 8, 6, 116, 235, 48, 219, 2, 199, 158, 56, 235, 194, 37, 146, 53, 58, 174, 6, 3, 252, 110, 82, 149, 234, 0, 191, 241, 9, 58, 43, 61, 17, 92, 34, 133, 106, 105, 196, 100, 133, 30, 67, 132, 104, 250, 181, 169, 133, 19, 159, 37, 247, 214, 191, 142, 88, 16, 104, 74, 26, 238, 162, 99, 102, 29, 28, 161, 245, 125, 188, 107, 13, 132, 110, 214, 233, 159, 205, 167, 7, 196, 149, 13, 225, 208, 154, 161, 6, 192, 59, 79, 85, 24, 174, 97, 16, 93, 224, 102, 47, 82, 111, 246, 4, 174, 119, 11, 110, 204, 245, 114, 33, 125, 90, 109, 94, 180, 219, 34, 202, 16, 59, 156, 115, 15, 234, 182, 19, 16, 163, 213, 183, 107, 0, 148, 62, 210, 105, 38, 251, 171, 34, 211, 108, 39, 156, 14, 75, 59, 229, 99, 176, 161, 144, 127, 133, 253, 35, 152, 86, 12, 180, 214, 155, 116, 121, 203, 95, 37, 255, 73, 218, 123, 95, 106, 248, 138, 46, 191, 11, 131, 84, 3, 226, 76, 67, 119, 187, 245, 103, 108, 7, 50, 33, 65, 227, 74, 113, 204, 130, 114, 4, 50, 141, 13, 154, 115, 106, 2, 26, 125, 221, 119, 155, 180, 21, 206, 177, 197, 231, 52, 233, 14, 137, 135, 243, 134, 133, 149, 237, 75, 140, 52, 228, 176, 79, 187, 133, 226, 12, 111, 54, 207, 82, 201, 160, 1, 194, 47, 41, 129, 85, 199, 194, 82, 144, 87, 164, 56, 58, 9, 24, 166, 128, 181, 52, 41, 111, 46, 221, 58, 95, 8, 80, 101, 94, 18, 0, 146, 67, 165, 109, 101, 73, 229, 143, 215, 143, 116, 159, 33, 241, 174, 241, 151, 210, 252, 159, 177, 159, 181, 113, 8, 137, 137, 11, 7, 63, 227, 58, 52, 122, 25, 245, 21, 57, 77, 63, 37, 173, 245, 27, 67, 145, 116, 199, 167, 31, 17, 247, 24, 186, 149, 7, 234, 14, 131, 38, 129, 254, 78, 240, 35, 145, 110, 9, 18, 111, 190, 157, 91, 8, 212, 154, 163, 21, 253, 105, 178, 31, 111, 181, 191, 136, 146, 102, 102, 85, 24, 162, 178, 52, 93, 55, 62, 184, 160, 145, 37, 97, 94, 191, 20, 87, 142, 14, 36, 190, 170, 10, 148, 86, 56, 251, 83, 24, 169, 163, 211, 140, 32, 101, 137, 227, 120, 209, 177, 148, 166, 125, 73, 97, 94, 202, 131, 230, 54, 172, 229, 152, 53, 41, 231, 207, 200, 219, 99, 146, 64, 78, 69, 182, 62, 136, 217, 131, 139, 18, 193, 55, 157, 80, 22, 199, 199, 131, 233, 245, 98, 114, 251, 33, 79, 233, 219, 244, 237, 243, 68, 117, 156, 76, 202, 52, 100, 101, 135, 13, 16, 55, 31, 77, 205, 11, 109, 182, 181, 201, 141, 163, 199, 165, 86, 52, 156, 233, 102, 50, 248, 70, 108, 39, 215, 56, 146, 106, 111, 74, 88, 195, 23, 225, 14, 51, 162, 205, 220, 255, 72, 193, 157, 91, 24, 22, 25, 200, 212, 228, 67, 99, 91, 12, 196, 246, 25, 175, 234, 124, 239, 252, 219, 201, 253, 233, 160, 54, 224, 122, 238, 142, 89, 220, 73, 212, 156, 119, 147, 252, 81, 6, 170, 5, 224, 56, 41, 142, 200, 158, 18, 127, 123, 215, 154, 144, 182, 100, 81, 66, 163, 73, 254, 152, 126, 70, 110, 165, 7, 92, 98, 19, 189, 86, 241, 247, 80, 24, 224, 164, 68, 122, 144, 233, 216, 48, 202, 56, 30, 105, 160, 158, 243, 170, 72, 223, 234, 174, 130, 189, 163, 154, 11, 110, 92, 108, 246, 15, 116, 124, 12, 190, 97, 8, 16, 124, 30, 2, 248, 138, 34, 91, 203, 255, 69, 68, 54, 237, 153, 10, 114, 50, 167, 119, 44, 164, 210, 51, 145, 22, 151, 170, 3, 163, 178, 149, 228, 205, 95, 99, 16, 160, 26, 91, 153, 249, 230, 237, 18, 249, 172, 43, 194, 72, 215, 147, 146, 161, 155, 35, 43, 255, 40, 120, 149, 153, 179, 84, 129, 181, 95, 20, 172, 237, 194, 121, 197, 11, 67, 252, 183, 5, 32, 35, 40, 115, 29, 2, 241, 15, 168, 157, 51, 161, 63, 15, 219, 190, 106, 232, 116, 193, 247, 33, 127, 236, 5, 11, 179, 84, 242, 243, 81, 40, 93, 90, 8, 202, 143, 54, 194, 106, 73, 235, 131, 26, 181, 146, 150, 178, 63, 40, 50, 111, 28, 197, 106, 14, 59, 3, 117, 245, 172, 223, 224, 93, 214, 214, 211, 190, 99, 254, 233, 87, 216, 74, 207, 145, 49, 153, 220, 8, 136, 183, 188, 212, 96, 226, 66, 155, 187, 138, 22, 239, 174, 30, 119, 65, 30, 221, 70, 9, 0, 69, 34, 175, 220, 159, 61, 226, 241, 169, 149, 117, 195, 179, 249, 163, 186, 108, 163, 51, 220, 39, 85, 99, 177, 242, 22, 173, 15, 14, 118, 26, 159, 96, 247, 230, 127, 110, 94, 57, 128, 94, 107, 116, 50, 161, 39, 210, 29, 82, 89, 11, 118, 21, 236, 130, 221, 110, 116, 247, 198, 8, 198, 11, 224, 157, 29, 194, 127, 180, 84, 143, 233, 236, 243, 40, 22, 35, 54, 86, 66, 164, 105, 236, 244, 237, 231, 26, 152, 226, 32, 151, 168, 80, 177, 200, 186, 70, 231, 82, 179, 187, 174, 86, 168, 48, 114, 254, 58, 95, 65, 205, 171, 3, 64, 100, 143, 106, 173, 107, 230, 238, 207, 23, 87, 70, 120, 53, 139, 60, 235, 254, 38, 119, 128, 47, 130, 81, 71, 88, 140, 209, 2, 61, 108, 164, 54, 121, 126, 184, 63, 40, 179, 49, 214, 123, 10, 123, 237, 172, 37, 216, 125, 110, 34, 196, 130, 230, 114, 30, 214, 156, 5, 144, 168, 131, 180, 35, 81, 194, 124, 97, 86, 14, 231, 7, 56, 100, 125, 161, 199, 36, 168, 86, 231, 226, 169, 202, 211, 145, 161, 18, 63, 74, 183, 166, 12, 138, 64, 247, 36, 245, 82, 24, 72, 196, 122, 120, 218, 163, 247, 129, 199, 250, 194, 231, 34, 253, 49, 35, 79, 142, 207, 42, 82, 213, 254, 148, 181, 158, 192, 253, 211, 219, 124, 52, 98, 250, 162, 112, 162, 98, 209, 177, 128, 167, 59, 176, 172, 119, 232, 131, 25, 146, 227, 116, 0, 118, 231, 151, 83, 51, 149, 16, 250, 107, 136, 230, 247, 161, 5, 32, 56, 183, 151, 248, 136, 32, 231, 85, 252, 242, 181, 16, 151, 177, 219, 50, 133, 13, 15, 12, 38, 252, 40, 5, 89, 104, 197, 130, 239, 212, 201, 181, 215, 164, 178, 237, 131, 49, 201, 198, 241, 189, 144, 24, 5, 25, 165, 33, 142, 252, 228, 18, 230, 56, 19, 44, 152, 147, 141, 36, 89, 253, 61, 227, 133, 24, 168, 146, 12, 4, 108, 156, 150, 110, 57, 15, 43, 218, 6, 214, 154, 209, 8, 14, 235, 186, 220, 94, 175, 170, 77, 80, 207, 216, 74, 32, 82, 125, 30, 66, 65, 165, 102, 76, 21, 70, 207, 239, 217, 154, 158, 213, 254, 18, 153, 155, 158, 197, 142, 194, 202, 190, 9, 85, 217, 66, 113, 237, 183, 102, 22, 43, 95, 240, 173, 181, 183, 109, 79, 9, 109, 10, 181, 209, 113, 226, 146, 84, 108, 26, 134, 183, 119, 95, 19, 110, 81, 6, 254, 103, 124, 240, 164, 223, 240, 232, 104, 86, 23, 78, 52, 14, 102, 151, 145, 186, 67, 189, 218, 252, 183, 37, 115, 166, 226, 148, 21, 212, 105, 131, 47, 25, 227, 37, 70, 167, 193, 157, 29, 43, 128, 57, 237, 223, 231, 153, 47, 57, 57, 110, 143, 182, 107, 61, 74, 45, 26, 213, 220, 217, 231, 220, 95, 193, 174, 226, 77, 202, 83, 33, 128, 181, 84, 224, 237, 143, 201, 236, 18, 28, 157, 86, 20, 211, 136, 50, 90, 190, 98, 228, 184, 69, 194, 123, 140, 126, 79, 58, 194, 46, 12, 98, 126, 241, 122, 98, 66, 197, 148, 94, 127, 193, 207, 202, 48, 244, 131, 168, 201, 80, 226, 109, 127, 5, 190, 93, 192, 81, 120, 8, 31, 156, 185, 251, 52, 61, 7, 255, 1, 1, 232, 153, 232, 69, 252, 243, 80, 134, 189, 217, 202, 31, 28, 33, 247, 190, 1, 154, 224, 57, 253, 209, 92, 9, 173, 32, 6, 186, 95, 166, 206, 133, 34, 194, 217, 185, 202, 149, 90, 74, 205, 244, 68, 237, 53, 65, 59, 255, 145, 178, 170, 171, 83, 89, 196, 210, 61, 128, 91, 69, 25, 213, 201, 55, 71, 175, 89, 51, 50, 228, 21, 125, 76, 8, 86, 247, 205, 190, 149, 49, 223, 65, 98, 116, 36, 163, 130, 219, 252, 10, 30, 195, 110, 164, 62, 175, 185, 198, 196, 184, 69, 148, 170, 164, 113, 82, 51, 209, 186, 174, 141, 186, 78, 220, 60, 62, 63, 53, 189, 156, 104, 67, 39, 217, 229, 106, 113, 35, 152, 66, 48, 190, 253, 99, 35, 9, 196, 210, 109, 54, 247, 8, 194, 111, 198, 49, 55, 151, 170, 115, 80, 198, 65, 137, 246, 197, 131, 148, 204, 8, 227, 160, 225, 79, 19, 144, 41, 182, 44, 34, 230, 70, 139, 56, 32, 34, 234, 124, 95, 29, 0, 17, 217, 234, 146, 105, 160, 106, 101, 203, 0, 236, 150, 184, 143, 247, 30, 37, 14, 8, 117, 55, 236, 231, 186, 224, 73, 214, 238, 88, 109, 174, 130, 236, 69, 27, 11, 27, 60, 61, 133, 158, 106, 162, 41, 49, 180, 107, 127, 197, 207, 206, 107, 106, 176, 56, 180, 149, 130, 252, 77, 221, 189, 230, 20, 173, 46, 159, 68, 169, 168, 161, 178, 74, 189, 58, 156, 221, 9, 137, 216, 110, 102, 218, 181, 154, 56, 78, 32, 233, 148, 28, 13, 4, 25, 111, 103, 140, 66, 64, 133, 115, 226, 247, 44, 34, 11, 127, 29, 240, 30, 11, 62, 127, 120, 156, 48, 125, 53, 133, 235, 60, 179, 217, 115, 212, 20, 223, 150, 218, 220, 158, 244, 143, 225, 228, 222, 81, 249, 214, 190, 56, 48, 122, 98, 223, 120, 164, 148, 115, 26, 143, 3, 78, 253, 114, 180, 139, 122, 81, 243, 141, 103, 52, 184, 170, 216, 78, 161, 192, 25, 25, 184, 125, 131, 200, 96, 106, 111, 164, 153, 141, 43, 14, 192, 10, 106, 45, 178, 72, 114, 57, 161, 78, 33, 161, 97, 57, 205, 252, 145, 102, 38, 164, 229, 9, 55, 44, 83, 101, 83, 114, 180, 144, 19, 30, 245, 2, 9, 7, 98, 59, 77, 18, 234, 98, 230, 37, 85, 211, 113, 183, 84, 231, 228, 204, 139, 222, 46, 48, 222, 99, 51, 127, 162, 252, 129, 100, 124, 2, 203, 192, 114, 184, 139, 213, 58, 238, 253, 203, 60, 67, 205, 2, 114, 215, 83, 0, 95, 79, 122, 206, 164, 87, 157, 159, 208, 6, 243, 26, 27, 249, 63, 130, 172, 79, 10, 208, 171, 125, 247, 132, 218, 91, 68, 136, 159, 1, 36, 164, 3, 156, 7, 164, 105, 35, 227, 188, 166, 57, 178, 44, 77, 4, 171, 126, 243, 54, 24, 185, 41, 219, 116, 234, 103, 21, 189, 40, 123, 116, 76, 37, 133, 44, 109, 74, 81, 165, 96, 77, 230, 146, 102, 16, 111, 234, 104, 84, 62, 40, 122, 202, 162, 86, 235, 199, 127, 187, 254, 117, 182, 95, 253, 5, 111, 98, 54, 112, 237, 169, 123, 213, 243, 190, 221, 12, 181, 151, 57, 7, 178, 234, 123, 59, 167, 224, 236, 66, 214, 125, 215, 160, 38, 232, 100, 138, 148, 47, 168, 115, 121, 33, 254, 48, 194, 47, 44, 190, 33, 49, 127, 173, 182, 240, 31, 18, 14, 198, 231, 187, 91, 74, 202, 78, 65, 133, 178, 151, 48, 159, 201, 95, 213, 128, 78, 85, 216, 98, 3, 79, 24, 119, 47, 147, 211, 94, 16, 226, 139, 112, 162, 43, 170, 211, 203, 225, 173, 141, 215, 142, 214, 157, 23, 171, 3, 41, 101, 142, 180, 63, 165, 139, 10, 187, 14, 129, 34, 241, 33, 214, 38, 179, 4, 20, 231, 13, 199, 102, 156, 216, 19, 43, 106, 65, 47, 153, 104, 114, 133, 167, 231, 136, 5, 182, 208, 66, 220, 49, 161, 143, 119, 120, 0, 24, 91, 170, 128, 225, 112, 158, 244, 95, 208, 157, 15, 166, 101, 204, 248, 108, 23, 212, 138, 130, 117, 0, 195, 44, 26, 113, 196, 124, 136, 99, 247, 221, 76, 109, 115, 198, 252, 244, 174, 253, 228, 215, 52, 27, 242, 64, 246, 136, 137, 191, 239, 38, 247, 199, 82, 190, 181, 103, 34, 222, 234, 218, 161, 180, 99, 130, 142, 27, 72, 252, 62, 30, 209, 109, 104, 238, 113, 33, 25, 12, 59, 85, 181, 117, 10, 221, 38, 149, 11, 18, 198, 82, 254, 109, 232, 1, 40, 155, 36, 114, 203, 206, 14, 255, 8, 164, 90, 144, 15, 107, 183, 153, 153, 153, 202, 98, 200, 84, 191, 82, 103, 40, 90, 26, 183, 208, 237, 134, 12, 181, 176, 126, 117, 152, 255, 162, 247, 139, 159, 238, 43, 85, 103, 23, 188, 188, 195, 73, 165, 29, 227, 197, 8, 78, 234, 194, 185, 242, 194, 95, 48, 42, 45, 252, 76, 162, 71, 40, 189, 177, 163, 42, 30, 38, 84, 188, 137, 111, 151, 57, 205, 39, 53, 106, 103, 250, 222, 148, 192, 254, 149, 65, 173, 1, 101, 113, 115, 147, 224, 233, 125, 49, 208, 24, 192, 221, 44, 100, 106, 190, 213, 136, 86, 84, 183, 128, 216, 110, 228, 19, 187, 121, 150, 134, 254, 73, 119, 220, 92, 78, 136, 38, 128, 99, 134, 221, 246, 153, 248, 103, 250, 196, 181, 94, 171, 75, 54, 8, 196, 66, 241, 161, 31, 161, 142, 120, 0, 181, 71, 27, 65, 223, 65, 47, 104, 5, 146, 159, 148, 245, 250, 243, 71, 57, 200, 203, 215, 106, 35, 6, 14, 19, 250, 52, 124, 69, 68, 11, 128, 70, 200, 9, 65, 132, 123, 219, 125, 40, 100, 36, 198, 210, 5, 172, 114, 125, 140, 222, 85, 203, 189, 175, 139, 160, 225, 121, 194, 183, 225, 107, 26, 45, 192, 229, 13, 226, 16, 51, 229, 3, 142, 91, 123, 115, 249, 121, 22, 25, 254, 25, 146, 244, 198, 185, 157, 178, 53, 165, 93, 79, 140, 17, 131, 195, 157, 46, 41, 208, 60, 133, 218, 90, 197, 193, 213, 233, 229, 95, 134, 231, 196, 160, 81, 12, 69, 163, 240, 56, 244, 62], - [62, 91, 104, 1, 154, 77, 202, 22, 195, 51, 29, 214, 143, 99, 34, 138, 105, 54, 255, 66, 237, 43, 77, 180, 239, 82, 159, 232, 128, 196, 185, 19, 50, 44, 2, 67, 197, 57, 221, 47, 161, 184, 11, 206, 133, 63, 139, 151, 51, 59, 142, 224, 179, 34, 215, 1, 217, 160, 107, 219, 219, 191, 51, 129, 18, 198, 15, 165, 171, 73, 193, 10, 106, 32, 221, 162, 83, 96, 15, 109, 16, 109, 219, 13, 91, 237, 208, 192, 41, 126, 134, 7, 82, 44, 245, 155, 64, 219, 89, 109, 207, 208, 190, 228, 163, 36, 56, 189, 78, 170, 90, 126, 40, 137, 238, 215, 208, 109, 120, 152, 248, 127, 0, 36, 41, 9, 175, 121, 189, 207, 221, 229, 119, 112, 18, 112, 134, 134, 1, 16, 59, 177, 65, 58, 83, 100, 226, 179, 10, 36, 200, 12, 246, 6, 45, 131, 4, 12, 41, 38, 44, 26, 242, 201, 64, 224, 228, 227, 251, 98, 234, 201, 134, 197, 197, 117, 120, 83, 171, 189, 207, 239, 144, 204, 211, 46, 225, 144, 103, 95, 224, 95, 186, 36, 126, 202, 46, 154, 4, 103, 241, 67, 223, 221, 209, 253, 178, 94, 180, 13, 225, 41, 143, 49, 86, 114, 163, 54, 216, 235, 186, 159, 98, 189, 232, 77, 165, 84, 182, 227, 187, 125, 130, 135, 150, 180, 51, 13, 222, 65, 242, 181, 134, 41, 47, 104, 52, 154, 213, 92, 225, 67, 216, 11, 245, 50, 200, 29, 0, 9, 134, 167, 106, 73, 22, 207, 138, 249, 46, 26, 219, 49, 69, 149, 14, 69, 99, 13, 87, 205, 215, 232, 20, 134, 192, 202, 253, 172, 116, 205, 223, 183, 79, 49, 197, 175, 183, 188, 245, 99, 179, 156, 146, 96, 71, 79, 159, 117, 66, 233, 233, 46, 88, 195, 189, 168, 163, 52, 21, 232, 18, 78, 224, 119, 234, 147, 188, 151, 158, 8, 51, 96, 224, 36, 73, 226, 78, 1, 28, 32, 53, 84, 48, 14, 204, 107, 238, 37, 195, 80, 127, 27, 31, 65, 36, 240, 213, 216, 130, 184, 34, 243, 169, 183, 124, 3, 251, 202, 112, 209, 147, 56, 241, 39, 11, 43, 167, 155, 79, 65, 36, 108, 104, 109, 64, 44, 118, 5, 119, 27, 174, 134, 33, 170, 22, 253, 16, 220, 253, 191, 190, 87, 74, 209, 54, 190, 171, 229, 54, 166, 131, 172, 46, 64, 112, 99, 187, 91, 122, 180, 164, 157, 205, 233, 24, 111, 71, 88, 234, 14, 113, 106, 147, 89, 207, 133, 188, 169, 55, 14, 155, 178, 14, 178, 184, 226, 174, 126, 217, 191, 3, 29, 30, 233, 172, 151, 41, 234, 208, 166, 41, 220, 155, 166, 120, 122, 113, 146, 168, 230, 242, 135, 10, 37, 191, 213, 242, 170, 21, 124, 109, 173, 45, 99, 41, 28, 35, 141, 29, 203, 81, 2, 120, 89, 225, 25, 6, 46, 62, 215, 122, 186, 155, 126, 231, 119, 93, 211, 192, 184, 85, 83, 23, 55, 157, 230, 165, 78, 227, 248, 32, 138, 188, 15, 26, 81, 251, 156, 178, 77, 233, 118, 78, 1, 172, 127, 18, 130, 75, 254, 143, 119, 196, 18, 96, 47, 216, 18, 59, 54, 73, 214, 46, 55, 22, 105, 15, 10, 117, 146, 76, 195, 166, 20, 253, 42, 19, 160, 30, 109, 237, 199, 163, 63, 172, 174, 138, 238, 201, 227, 106, 220, 59, 254, 73, 155, 249, 182, 68, 91, 183, 92, 37, 140, 129, 105, 40, 70, 129, 41, 141, 142, 177, 0, 21, 47, 122, 203, 19, 230, 131, 99, 160, 92, 15, 17, 215, 167, 170, 179, 38, 96, 12, 201, 101, 89, 5, 185, 63, 154, 237, 154, 156, 230, 74, 60, 191, 91, 112, 162, 133, 76, 243, 182, 12, 171, 27, 68, 169, 164, 195, 98, 67, 86, 177, 142, 160, 224, 17, 2, 93, 69, 49, 63, 71, 87, 69, 73, 125, 217, 76, 119, 150, 24, 89, 95, 29, 76, 149, 221, 165, 4, 72, 74, 243, 193, 226, 175, 184, 8, 238, 231, 149, 21, 239, 10, 10, 23, 54, 122, 83, 30, 142, 106, 136, 221, 169, 241, 131, 33, 153, 202, 191, 31, 155, 63, 252, 255, 99, 183, 174, 190, 234, 215, 90, 72, 122, 25, 60, 53, 54, 67, 209, 33, 89, 31, 151, 186, 131, 225, 15, 9, 176, 220, 184, 168, 35, 134, 173, 81, 152, 179, 97, 225, 122, 46, 168, 13, 142, 193, 147, 4, 1, 153, 24, 230, 194, 201, 222, 42, 227, 110, 143, 142, 19, 173, 219, 176, 123, 77, 160, 227, 137, 205, 57, 22, 206, 120, 74, 131, 45, 135, 157, 88, 253, 111, 240, 243, 207, 252, 199, 227, 192, 201, 178, 57, 172, 184, 134, 159, 130, 196, 158, 106, 211, 66, 44, 102, 88, 64, 77, 70, 239, 151, 182, 111, 234, 159, 250, 42, 69, 44, 187, 69, 197, 45, 204, 109, 62, 9, 71, 36, 215, 19, 136, 229, 189, 204, 251, 245, 38, 244, 159, 148, 134, 173, 56, 232, 158, 109, 244, 135, 135, 61, 8, 139, 63, 145, 175, 79, 206, 242, 58, 201, 81, 33, 105, 153, 207, 49, 202, 219, 244, 88, 65, 248, 140, 249, 16, 136, 128, 53, 43, 15, 100, 191, 25, 247, 98, 86, 103, 61, 121, 249, 8, 100, 123, 105, 56, 220, 61, 57, 89, 188, 186, 188, 102, 139, 61, 228, 118, 255, 51, 199, 129, 21, 77, 191, 39, 213, 41, 147, 155, 216, 59, 31, 161, 201, 157, 95, 85, 133, 195, 135, 27, 155, 228, 145, 44, 101, 161, 245, 233, 111, 190, 104, 102, 188, 103, 228, 145, 200, 170, 153, 180, 168, 143, 173, 163, 249, 219, 113, 100, 202, 142, 103, 102, 73, 44, 168, 241, 237, 235, 252, 46, 247, 241, 17, 70, 247, 131, 76, 255, 106, 204, 5, 247, 181, 96, 222, 168, 18, 183, 205, 207, 83, 104, 166, 133, 73, 150, 37, 112, 223, 117, 180, 79, 190, 105, 186, 23, 78, 120, 220, 143, 66, 138, 201, 132, 206, 174, 86, 38, 185, 211, 57, 144, 207, 116, 158, 181, 75, 225, 104, 222, 181, 99, 139, 239, 143, 202, 126, 213, 35, 242, 53, 203, 125, 119, 76, 152, 49, 62, 99, 174, 146, 101, 45, 214, 240, 229, 34, 105, 18, 238, 123, 25, 28, 238, 187, 156, 230, 114, 182, 254, 194, 115, 123, 39, 81, 45, 49, 20, 218, 93, 127, 16, 183, 252, 7, 30, 163, 200, 185, 39, 114, 138, 182, 50, 51, 34, 36, 24, 88, 180, 136, 73, 178, 186, 79, 93, 49, 123, 159, 109, 185, 163, 164, 48, 157, 239, 211, 11, 19, 138, 42, 237, 89, 51, 202, 143, 11, 56, 36, 122, 159, 25, 185, 6, 81, 6, 198, 98, 189, 153, 125, 59, 57, 236, 110, 37, 197, 185, 121, 250, 50, 56, 74, 41, 221, 158, 10, 136, 242, 40, 16, 85, 69, 239, 220, 93, 109, 194, 182, 155, 89, 205, 42, 238, 149, 25, 41, 172, 216, 92, 194, 55, 209, 226, 175, 157, 131, 134, 206, 159, 88, 203, 250, 30, 101, 5, 130, 241, 34, 76, 11, 126, 130, 192, 34, 36, 30, 227, 221, 136, 110, 42, 165, 248, 0, 239, 175, 207, 99, 239, 70, 32, 92, 206, 239, 128, 131, 212, 81, 185, 179, 153, 51, 146, 160, 66, 163, 178, 82, 167, 4, 185, 181, 22, 243, 237, 79, 213, 202, 42, 99, 65, 148, 117, 151, 65, 102, 240, 154, 198, 66, 67, 121, 86, 101, 232, 89, 254, 176, 84, 245, 112, 185, 6, 36, 151, 80, 214, 72, 247, 53, 29, 183, 129, 16, 39, 236, 13, 173, 16, 181, 231, 115, 84, 92, 44, 243, 129, 98, 56, 143, 208, 99, 114, 13, 185, 147, 170, 234, 238, 123, 30, 148, 134, 33, 247, 106, 216, 159, 128, 24, 46, 186, 18, 188, 131, 128, 112, 93, 254, 74, 103, 220, 24, 75, 75, 28, 149, 46, 12, 206, 69, 243, 188, 171, 45, 127, 184, 196, 31, 234, 210, 21, 221, 224, 254, 8, 113, 181, 91, 6, 253, 61, 79, 68, 25, 64, 148, 224, 196, 247, 212, 194, 6, 250, 195, 210, 101, 195, 130, 222, 219, 255, 29, 134, 34, 116, 67, 233, 216, 215, 2, 20, 67, 176, 81, 118, 112, 35, 86, 238, 62, 174, 39, 36, 43, 66, 161, 109, 11, 203, 135, 217, 52, 153, 12, 138, 188, 107, 0, 54, 209, 92, 108, 137, 254, 62, 144, 114, 41, 207, 100, 214, 37, 86, 117, 131, 175, 218, 127, 18, 6, 4, 41, 96, 218, 62, 67, 35, 139, 170, 215, 11, 86, 239, 196, 143, 243, 25, 194, 139, 115, 135, 222, 186, 25, 13, 176, 180, 75, 239, 100, 201, 26, 7, 169, 251, 36, 170, 224, 160, 65, 214, 64, 213, 114, 198, 29, 200, 113, 5, 177, 40, 231, 108, 229, 4, 88, 184, 191, 7, 250, 187, 215, 194, 146, 228, 17, 199, 44, 8, 3, 95, 132, 23, 225, 151, 14, 110, 167, 241, 74, 132, 5, 8, 187, 223, 205, 192, 21, 27, 93, 78, 175, 209, 166, 131, 164, 9, 239, 165, 224, 190, 203, 82, 229, 204, 101, 148, 243, 230, 33, 143, 63, 126, 181, 135, 96, 87, 127, 255, 85, 242, 27, 23, 147, 152, 149, 182, 89, 236, 141, 171, 33, 9, 36, 85, 81, 98, 115, 39, 198, 1, 5, 158, 75, 85, 224, 102, 29, 35, 62, 156, 106, 166, 182, 191, 88, 167, 65, 211, 214, 17, 222, 177, 233, 230, 247, 144, 160, 137, 198, 45, 207, 141, 63, 139, 143, 91, 79, 126, 89, 170, 66, 173, 248, 57, 103, 234, 99, 16, 91, 55, 169, 113, 156, 125, 135, 71, 52, 51, 228, 177, 231, 114, 131, 255, 226, 63, 241, 131, 42, 13, 95, 181, 92, 180, 192, 63, 107, 64, 5, 146, 19, 155, 189, 162, 146, 111, 105, 171, 145, 40, 201, 185, 153, 116, 203, 27, 248, 177, 1, 121, 94, 220, 21, 148, 28, 252, 141, 65, 33, 251, 88, 17, 27, 31, 246, 133, 222, 61, 191, 147, 18, 57, 202, 56, 223, 111, 8, 128, 190, 223, 106, 240, 68, 13, 245, 22, 53, 45, 196, 56, 208, 4, 93, 158, 121, 253, 152, 39, 72, 122, 238, 138, 198, 87, 25, 230, 140, 242, 196, 127, 148, 113, 238, 219, 184, 1, 177, 17, 164, 18, 133, 104, 130, 232, 71, 179, 110, 203, 163, 176, 224, 225, 55, 56, 184, 135, 21, 175, 98, 223, 207, 151, 62, 140, 155, 20, 117, 131, 89, 64, 130, 22, 231, 85, 194, 211, 227, 16, 182, 241, 153, 97, 30, 84, 163, 5, 22, 45, 31, 122, 197, 255, 87, 157, 114, 102, 147, 52, 151, 56, 7, 69, 101, 246, 220, 231, 13, 204, 152, 202, 247, 230, 121, 171, 34, 93, 17, 12, 177, 112, 88, 15, 15, 115, 208, 141, 81, 154, 209, 62, 252, 33, 143, 112, 113, 217, 64, 158, 236, 35, 241, 197, 2, 25, 206, 60, 194, 177, 131, 101, 217, 146, 40, 80, 64, 141, 127, 199, 123, 16, 191, 85, 202, 205, 57, 93, 107, 154, 4, 213, 248, 144, 2, 109, 135, 182, 186, 73, 190, 253, 2, 0, 40, 124, 194, 135, 57, 175, 214, 72, 31, 197, 62, 42, 54, 177, 136, 179, 233, 122, 100, 142, 102, 11, 229, 153, 204, 67, 197, 44, 166, 140, 223, 149, 5, 220, 203, 105, 34, 152, 195, 116, 35, 37, 72, 156, 71, 139, 145, 188, 252, 80, 149, 65, 39, 238, 120, 103, 24, 236, 7, 229, 147, 255, 150, 105, 31, 6, 154, 231, 53, 206, 96, 126, 246, 96, 7, 164, 128, 27, 151, 5, 45, 24, 96, 146, 166, 205, 144, 192, 128, 97, 5, 52, 63, 167, 129, 61, 56, 0, 251, 98, 5, 242, 47, 88, 208, 149, 63, 255, 137, 72, 53, 250, 141, 100, 88, 53, 119, 137, 19, 214, 125, 224, 158, 128, 125, 243, 60, 16, 235, 4, 127, 124, 61, 24, 215, 201, 56, 132, 103, 149, 40, 165, 185, 66, 171, 21, 142, 121, 140, 142, 142, 106, 66, 205, 183, 14, 18, 47, 195, 167, 251, 178, 154, 80, 137, 90, 196, 117, 27, 133, 198, 78, 56, 198, 125, 134, 73, 42, 83, 89, 27, 226, 252, 21, 239, 36, 55, 170, 197, 96, 229, 194, 239, 62, 218, 123, 148, 127, 158, 216, 102, 96, 211, 9, 165, 92, 18, 10, 233, 31, 218, 150, 93, 69, 248, 139, 84, 220, 108, 110, 196, 52, 80, 134, 33, 82, 221, 1, 127, 200, 138, 21, 248, 36, 243, 250, 181, 114, 197, 60, 6, 53, 146, 41, 28, 128, 50, 83, 175, 63, 215, 249, 131, 19, 186, 87, 1, 196, 127, 1, 15, 149, 45, 18, 182, 104, 171, 93, 159, 1, 119, 225, 95, 230, 133, 206, 196, 6, 52, 27, 12, 197, 165, 50, 112, 229, 58, 235, 216, 196, 106, 35, 225, 189, 106, 222, 23, 145, 103, 225, 253, 251, 54, 162, 169, 127, 67, 229, 44, 33, 89, 114, 145, 236, 102, 185, 238, 248, 55, 54, 10, 189, 28, 10, 34, 59, 46, 180, 219, 209, 140, 103, 220, 201, 76, 71, 96, 127, 51, 180, 250, 101, 183, 54, 94, 232, 191, 195, 34, 89, 183, 159, 88, 172, 38, 204, 35, 77, 194, 38, 158, 169, 204, 45, 129, 130, 162, 194, 77, 146, 126, 82, 88, 38, 144, 225, 48, 38, 153, 8, 36, 104, 4, 11, 178, 232, 160, 83, 59, 104, 162, 134, 137, 163, 48, 27, 38, 116, 46, 232, 123, 244, 1, 200, 35, 131, 163, 118, 145, 204, 0, 149, 22, 77, 245, 156, 119, 212, 9, 72, 5, 202, 156, 110, 184, 71, 231, 144, 168, 57, 243, 153, 144, 100, 252, 251, 200, 56, 96, 1, 157, 238, 193, 252, 235, 86, 202, 208, 2, 58, 213, 109, 41, 45, 182, 131, 168, 207, 57, 48, 95, 158, 33, 149, 44, 250, 56, 28, 137, 125, 112, 242, 117, 154, 163, 77, 163, 133, 68, 74, 64, 168, 194, 228, 35, 119, 98, 116, 26, 240, 83, 189, 34, 243, 137, 52, 185, 143, 147, 184, 125, 179, 174, 124, 99, 28, 101, 144, 194, 212, 236, 61, 116, 202, 167, 207, 221, 235, 68, 229, 232, 177, 246, 196, 186, 96, 181, 231, 230, 219, 149, 208, 53, 96, 141, 172, 138, 29, 78, 250, 184, 253, 210, 172, 116, 249, 204, 118, 186, 42, 47, 87, 164, 29, 6, 17, 178, 197, 248, 66, 120, 6, 13, 1, 1, 99, 11, 247, 190, 254, 54, 94, 82, 205, 145, 8, 54, 169, 233, 48, 165, 60, 146, 86, 10, 241, 224, 213, 56, 185, 29, 189, 79, 248, 88, 28, 193, 112, 128, 130, 187, 116, 69, 43, 4, 218, 147, 115, 25, 165, 69, 236, 91, 74, 135, 129, 28, 155, 116, 240, 189, 40, 161, 81, 189, 69, 47, 21, 9, 59, 3, 1, 51, 192, 128, 143, 66, 56, 73, 80, 15, 159, 31, 127, 109, 202, 149, 166, 36, 17, 231, 243, 61, 7, 131, 220, 230, 199, 64, 114, 127, 90, 194, 107, 20, 11, 227, 230, 107, 165, 187, 135, 104, 118, 70, 127, 18, 87, 194, 99, 59, 209, 150, 136, 237, 65, 159, 160, 123, 22, 243, 51, 149, 153, 226, 224, 76, 82, 109, 89, 91, 221, 117, 109, 80, 106, 182, 254, 192, 77, 107, 92, 190, 71, 72, 41, 27, 252, 83, 27, 106, 247, 162, 90, 190, 45, 107, 27, 248, 249, 147, 248, 3, 125, 0, 204, 113, 211, 135, 35, 215, 53, 77, 218, 141, 220, 121, 248, 76, 113, 0, 113, 33, 216, 217, 127, 141, 188, 5, 181, 196, 138, 109, 255, 62, 160, 17, 148, 137, 179, 176, 135, 32, 194, 220, 184, 49, 213, 21, 238, 181, 31, 150, 247, 104, 41, 188, 0, 238, 81, 7, 129, 170, 203, 139, 116, 81, 97, 176, 132, 57, 66, 90, 71, 99, 248, 220, 184, 111, 170, 218, 16, 2, 79, 18, 157, 250, 193, 181, 108, 19, 189, 156, 3, 166, 79, 96, 73, 1, 191, 51, 143, 84, 31, 151, 88, 243, 255, 203, 184, 126, 143, 250, 152, 12, 126, 1, 84, 5, 159, 234, 11, 120, 22, 80, 192, 73, 47, 216, 42, 6, 42, 153, 252, 178, 0, 127, 55, 101, 109, 10, 224, 24, 133, 175, 193, 69, 226, 100, 134, 161, 108, 210, 64, 156, 207, 107, 236, 233, 56, 235, 174, 115, 48, 236, 246, 148, 228, 163, 229, 173, 154, 19, 212, 170, 206, 173, 180, 205, 71, 92, 221, 165, 130, 72, 61, 40, 251, 116, 106, 230, 225, 16, 39, 229, 18, 106, 108, 215, 139, 71, 215, 82, 33, 75, 253, 106, 133, 107, 39, 86, 227, 103, 206, 140, 17, 194, 57, 52, 229, 142, 104, 4, 41, 88, 28, 112, 134, 50, 92, 145, 246, 251, 141, 255, 238, 134, 38, 128, 184, 192, 67, 43, 145, 146, 50, 128, 13, 50, 85, 121, 121, 28, 240, 237, 60, 41, 147, 124, 218, 149, 248, 236, 36, 125, 129, 140, 2, 239, 9, 26, 207, 229, 7, 187, 5, 121, 102, 190, 242, 189, 10, 223, 21, 176, 241, 243, 234, 17, 181, 10, 248, 123, 200, 44, 27, 13, 159, 68, 39, 158, 219, 15, 157, 130, 87, 244, 184, 33, 169, 116, 31, 184, 17, 6, 168, 208, 149, 17, 92, 253, 48, 78, 161, 222, 109, 246, 41, 212, 88, 137, 215, 120, 172, 151, 6, 221, 3, 208, 235, 233, 161, 185, 10, 143, 117, 71, 16, 37, 120, 10, 106, 8, 246, 176, 57, 52, 178, 203, 187, 151, 207, 16, 138, 114, 26, 228, 167, 255, 36, 3, 73, 48, 239, 32, 11, 31, 10, 238, 221, 138, 196, 25, 187, 137, 97, 189, 127, 144, 78, 12, 248, 245, 196, 161, 144, 52, 76, 181, 79, 31, 90, 42, 60, 148, 213, 168, 241, 108, 217, 47, 174, 219, 124, 250, 63, 148, 65, 181, 180, 128, 187, 172, 40, 150, 160, 189, 115, 45, 47, 250, 136, 47, 223, 78, 120, 129, 7, 255, 88, 185, 156, 76, 44, 216, 181, 150, 46, 67, 30, 82, 179, 114, 137, 44, 109, 101, 246, 124, 36, 27, 94, 46, 195, 163, 141, 36, 212, 91, 207, 178, 14, 134, 139, 7, 247, 175, 199, 42, 87, 30, 133, 126, 157, 253, 15, 14, 131, 189, 47, 201, 117, 70, 160, 121, 157, 107, 171, 185, 243, 197, 183, 92, 79, 86, 115, 173, 1, 10, 167, 198, 146, 174, 218, 46, 31, 47, 21, 7, 186, 239, 204, 36, 129, 105, 90, 148, 135, 10, 131, 129, 20, 130, 150, 90, 70, 229, 84, 170, 206, 117, 123, 52, 233, 218, 150, 154, 206, 238, 129, 225, 32, 186, 116, 147, 143, 57, 57, 32, 6, 37, 66, 248, 177, 96, 233, 98, 22, 251, 135, 191, 57, 19, 106, 9, 195, 228, 86, 163, 247, 86, 30, 198, 121, 188, 119, 36, 50, 24, 44, 159, 9, 126, 77, 117, 150, 241, 239, 38, 75, 127, 20, 56, 155, 221, 77, 135, 19, 186, 245, 146, 221, 91, 94, 16, 193, 163, 14, 99, 94, 233, 219, 0, 254, 60, 153, 179, 91, 30, 167, 163, 215, 4, 154, 59, 0, 58, 190, 242, 153, 253, 211, 33, 144, 187, 106, 98, 142, 44, 54, 205, 92, 219, 181, 188, 68, 196, 192, 59, 14, 199, 154, 220, 103, 242, 10, 152, 251, 8, 132, 169, 56, 178, 128, 93, 244, 145, 37, 232, 71, 33, 169, 105, 140, 40, 146, 208, 229, 58, 206, 109, 91, 151, 189, 87, 162, 242, 115, 125, 203, 152, 174, 210, 30, 37, 93, 196, 21, 253, 162, 138, 66, 241, 43, 166, 96, 211, 105, 7, 210, 38, 45, 199, 245, 172, 82, 174, 45, 126, 188, 121, 234, 150, 242, 185, 165, 125, 0, 72, 80, 72, 156, 186, 214, 223, 109, 109, 69, 6, 76, 135, 208, 163, 104, 204, 34, 21, 90, 225, 99, 179, 170, 38, 52, 58, 34, 135, 220, 50, 135, 196, 86, 225, 161, 253, 36, 152, 221, 223, 238, 95, 189, 175, 107, 34, 179, 189, 115, 164, 186, 62, 56, 226, 171, 111, 97, 149, 113, 147, 192, 172, 15, 205, 185, 129, 93, 29, 209, 166, 127, 188, 216, 203, 190, 143, 31, 154, 67, 36, 79, 149, 197, 101, 112, 22, 26, 98, 99, 176, 20, 29, 35, 33, 45, 107, 181, 200, 140, 201, 179, 113, 66, 35, 185, 254, 48, 142, 45, 147, 104, 186, 147, 167, 219, 72, 93, 61, 201, 25, 7, 153, 202, 72, 165, 249, 183, 168, 219, 22, 21, 150, 227, 76, 160, 24, 162, 202, 22, 69, 116, 246, 40, 21, 213, 6, 212, 146, 41, 51, 97, 60, 145, 31, 137, 65, 38, 190, 123, 190, 66, 60, 207, 96, 251, 97, 251, 158, 33, 184, 244, 49, 22, 121, 55, 235, 239, 85, 94, 72, 190, 34, 240, 1, 244, 19, 8, 86, 65, 122, 222, 155, 76, 17, 209, 48, 27, 249, 221, 125, 107, 117, 211, 91, 64, 233, 184, 222, 116, 226, 7, 62, 60, 5, 126, 73, 251, 129, 113, 203, 61, 166, 209, 118, 24, 35, 148, 129, 207, 135, 156, 212, 42, 232, 205, 6, 126, 112, 128, 153, 89, 36, 145, 229, 112, 147, 66, 6, 79, 19, 6, 27, 90, 135, 151, 45, 59, 94, 248, 214, 207, 154, 31, 172, 209, 244, 227, 9, 201, 192, 37, 125, 232, 177, 86, 231, 103, 181, 56, 243, 112, 28, 97, 64, 2, 139, 13, 186, 69, 205, 140, 94, 241, 240, 111, 74, 104, 195, 65, 66, 106, 71, 52, 122, 55, 85, 221, 9, 57, 111, 246, 51, 33, 234, 73, 32, 74, 231, 170, 68, 173, 125, 87, 130, 67, 65, 172, 58, 25, 84, 130, 133, 185, 166, 209, 203, 100, 227, 34, 43, 228, 206, 191, 93, 64, 191, 154, 46, 254, 41, 178, 63, 217, 170, 164, 19, 14, 58, 225, 54, 225, 146, 166, 104, 78, 61, 194, 46, 43, 99, 139, 24, 20, 45, 47, 105, 94, 243, 238, 111, 254, 38, 188, 200, 135, 49, 81, 198, 30, 239, 218, 176, 127, 66, 47, 238, 147, 95, 89, 7, 21, 127, 220, 38, 62, 151, 120, 50, 52, 8, 217, 106, 42, 136, 91, 127, 175, 151, 225, 14, 74, 198, 73, 102, 209, 164, 202, 217, 40, 127, 188, 140, 89, 194, 198, 89, 40, 113, 180, 52, 244, 22, 164, 124, 2, 76, 18, 173, 30, 196, 222, 75, 154, 145, 182, 1, 138, 26, 4, 84, 105, 23, 182, 102, 187, 43, 70, 134, 241, 124, 165, 237, 90, 0, 70, 210, 3, 158, 188, 176, 4, 3, 118, 161, 132, 89, 210, 106, 137, 103, 243, 125, 53, 142, 154, 19, 191, 40, 174, 190, 102, 124, 231, 107, 1, 23, 77, 75, 55, 199, 214, 154, 115, 204, 135, 11, 172, 187, 139, 208, 20, 57, 49, 201, 149, 206, 221, 47, 235, 66, 135, 48, 73, 10, 114, 7, 238, 111, 160, 175, 243, 183, 126, 61, 158, 66, 110, 166, 140, 162, 24, 120, 244, 249, 154, 226, 30, 59, 83, 154, 114, 168, 72, 247, 242, 136, 93, 76, 67, 97, 160, 77, 112, 130, 134, 143, 120, 55, 225, 13, 42, 242, 93, 68, 125, 48, 15, 97, 172, 190, 184, 142, 146, 208, 167, 246, 29, 224, 247, 41, 191, 144, 42, 107, 82, 30, 139, 245, 193, 50, 54, 192, 195, 222, 124, 226, 236, 193, 192, 0, 120, 239, 44, 214, 203, 211, 215, 110, 5, 209, 71, 10, 38, 149, 182, 190, 243, 15, 150, 228, 125, 27, 254, 210, 213, 243, 90, 249, 173, 128, 93, 195, 97, 16, 246, 165, 95, 27, 0, 39, 214, 80, 77, 194, 126, 79, 186, 85, 110, 220, 75, 151, 220, 47, 202, 138, 26, 84, 240, 14, 178, 138, 58, 155, 240, 184, 95, 61, 74, 158, 33, 241, 179, 11, 123, 210, 37, 160, 248, 10, 29, 27, 139, 85, 204, 124, 48, 241, 101, 41, 51, 158, 252, 156, 57, 25, 32, 151, 106, 174, 201, 112, 47, 109, 78, 210, 252, 236, 227, 179, 217, 69, 100, 196, 5, 110, 197, 199, 162, 253, 150, 201, 126, 113, 113, 236, 79, 188, 85, 191, 155, 112, 53, 194, 2, 221, 78, 120, 80, 37, 211, 176, 210, 116, 181, 6, 64, 1, 158, 198, 80, 178, 69, 68, 240, 202, 136, 178, 210, 29, 53, 17, 232, 243, 248, 197, 93, 75, 136, 20, 32, 35, 90, 12, 246, 80, 249, 72, 251, 14, 172, 223, 250, 68, 219, 167, 66, 107, 214, 228, 166, 248, 50, 78, 78, 32, 169, 216, 179, 6, 180, 222, 41, 160, 158, 51, 103, 227, 87, 58, 71, 188, 104, 86, 77, 25, 120, 148, 136, 137, 170, 7, 76, 36, 105, 77, 91, 230, 69, 171, 52, 97, 123, 215, 195, 182, 42, 25, 144, 178, 174, 24, 119, 51, 196, 73, 223, 84, 152, 136, 150, 10, 167, 131, 211, 4, 218, 37, 101, 214, 85, 222, 7, 224, 60, 245, 48, 87, 151, 207, 155, 195, 96, 159, 77, 126, 69, 196, 43, 134, 37, 52, 132, 252, 30, 162, 109, 243, 178, 39, 21, 235, 176, 253, 225, 134, 251, 50, 146, 216, 154, 46, 70, 230, 147, 6, 201, 37, 86, 91, 66, 157, 69, 137, 168, 52, 236, 2, 195, 225, 35, 97, 227, 122, 110, 81, 173, 118, 52, 184, 101, 60, 128, 239, 45, 43, 208, 184, 218, 174, 218, 8, 131, 147, 126, 32, 236, 17, 180, 165, 77, 81, 188, 84, 188, 128, 113, 6, 188, 0, 89, 162, 57, 53, 33, 215, 236, 45, 99, 124, 201, 170, 152, 138, 24, 95, 222, 204, 150, 240, 224, 221, 161, 71, 6, 32, 38, 115, 46, 83, 102, 87, 59, 0, 210, 221, 142, 27, 236, 224, 225, 109, 67, 35, 116, 10, 239, 161, 87, 163, 218, 43, 14, 26, 4, 140, 79, 74, 35, 62, 57, 140, 111, 180, 129, 116, 249, 211, 101, 252, 39, 105, 218, 29, 78, 194, 187, 230, 140, 111, 171, 213, 224, 207, 83, 148, 33, 235, 140, 57, 72, 55, 115, 144, 51, 115, 87, 99, 104, 210, 125, 171, 203, 30, 153, 76, 142, 173, 253, 26, 220, 19, 208, 75, 206, 2, 67, 107, 159, 96, 231, 67, 240, 22, 54, 248, 175, 68, 114, 119, 70, 0, 37, 236, 54, 130, 79, 49, 111, 172, 123, 97, 24, 70, 16, 65, 187, 81, 182, 49, 165, 238, 225, 3, 15, 76, 215, 248, 131, 150, 17, 112, 69, 3, 41, 6, 72, 6, 251, 197, 64, 96, 235, 197, 17, 254, 10, 205, 181, 95, 57, 36, 90, 215, 169, 114, 46, 212, 198, 248, 34, 217, 189, 146, 169, 51, 2, 127, 174, 180, 24, 150, 74, 245, 223, 249, 72, 147, 151, 185, 128, 153, 77, 129, 164, 112, 51, 88, 116, 161, 117, 116, 160, 194, 11, 151, 104, 114, 29, 34, 124, 59, 7, 233, 100, 216, 175, 33, 73, 24, 125, 1, 36, 99, 132, 249, 247, 142, 186, 197, 215, 97, 28, 139, 249, 116, 188, 232, 81, 138, 60, 12, 104, 36, 130, 203, 181, 188, 85, 38, 93, 250, 225, 246, 5, 188, 104, 77, 170, 118, 201, 89, 61, 61, 37, 63, 123, 215, 153, 37, 195, 186, 125, 83, 102, 165, 139, 235, 73, 74, 199, 126, 138, 191, 57, 70, 139, 135, 168, 92, 211, 69, 165, 248, 130, 3, 218, 54, 102, 240, 173, 45, 59, 134, 110, 87, 68, 145, 154, 253, 248, 212, 62, 207, 153, 165, 74, 253, 73, 194, 187, 24, 36, 158, 168, 118, 146, 193, 149, 128, 88, 238, 249, 171, 50, 75, 249, 233, 153, 230, 108, 241, 41, 243, 233, 212, 150, 253, 27, 188, 26, 23, 226, 82, 17, 253, 129, 241, 208, 173, 247, 20, 184, 207, 142, 142, 145, 102, 19, 238, 67, 14, 213, 145, 251, 65, 133, 235, 24, 40, 250, 82, 120, 90, 23, 48, 197, 217, 57, 101, 240, 58, 185, 14, 145, 101, 198, 189, 58, 10, 251, 203, 47, 53, 110, 65, 6, 114, 109, 6, 78, 61, 54, 230, 214, 146, 136, 39, 34, 207, 95, 80, 213, 22, 247, 59, 192, 181, 36, 43, 84, 68, 99, 231, 225, 59, 250, 72, 186, 160, 234, 59, 67, 198, 132, 33, 205, 180, 12, 193, 54, 235, 176, 95, 200, 34, 194, 147, 175, 189, 162, 188, 106, 156, 174, 141, 197, 199, 8, 149, 15, 59, 137, 94, 30, 160, 48, 5, 242, 180, 64, 6, 36, 8, 94, 162, 30, 199, 224, 178, 237, 129, 63, 48, 179, 2, 195, 70, 193, 115, 146, 17, 41, 183, 35, 100, 139, 251, 114, 127, 230, 255, 233, 205, 122, 232, 208, 29, 240, 84, 140, 54, 138, 228, 39, 245, 234, 25, 220, 146, 63, 58, 36, 33, 130, 135, 5, 99, 63, 232, 160, 143, 178, 191, 82, 133, 175, 242, 36, 150, 13, 29, 204, 167, 49, 224, 132, 169, 199, 17, 187, 151, 57, 201, 4, 44, 110, 225, 210, 126, 129, 200, 164, 201, 249, 141, 215, 82, 250, 29, 98, 217, 136, 187, 78, 151, 187, 87, 177, 168, 244, 36, 68, 49, 78, 119, 226, 181, 67, 14, 159, 17, 110, 25, 186, 1, 244, 206, 170, 155, 172, 196, 2, 138, 196, 219, 59, 32, 14, 80, 125, 137, 152, 24, 88, 228, 252, 33, 185, 212, 118, 157, 14, 247, 240, 39, 121, 27, 106, 130, 143, 44, 79, 75, 12, 228, 159, 107, 154, 94, 230, 211, 57, 245, 11, 38, 100, 95, 255, 87, 153, 182, 174, 55, 75, 146, 23, 242, 218, 44, 198, 128, 90, 250, 54, 227, 171, 211, 53, 86, 126, 64, 76, 227, 171, 10, 21, 22, 27, 222, 154, 230, 69, 131, 107, 174, 173, 182, 248, 71, 140, 86, 112, 50, 228, 86, 59, 146, 107, 163, 202, 213, 145, 18, 73, 37, 192, 220, 121, 72, 162, 90, 105, 100, 160, 161, 0, 254, 136, 132, 120, 140, 198, 214, 101, 126, 118, 173, 228, 36, 210, 35, 186, 11, 84, 1, 207, 13, 91, 75, 95, 237, 196, 201, 191, 78, 170, 169, 39, 165, 213, 14, 75, 110, 184, 143, 65, 37, 150, 118, 58, 123, 228, 198, 72, 250, 191, 255, 42, 6, 17, 152, 140, 239, 68, 196, 133, 2, 194, 209, 196, 173, 100, 215, 104, 222, 215, 251, 178, 191, 97, 187, 128, 5, 183, 77, 43, 95, 23, 93, 137, 46, 70, 219, 25, 11, 146, 113, 61, 68, 48, 67, 240, 188, 60, 5, 127, 113, 22, 196, 221, 170, 35, 218, 185, 8, 229, 61, 44, 122, 134, 132, 202, 141, 186, 225, 57, 223, 24, 209, 23, 104, 107, 228, 177, 154, 7, 166, 147, 201, 215, 194, 153, 152, 251, 100, 180, 60, 57, 153, 25, 47, 196, 127, 191, 94, 104, 233, 152, 166, 61, 216, 87, 132, 109, 76, 0, 19, 95, 128, 34, 219, 195, 195, 186, 1, 147, 158, 95, 141, 73, 235, 66, 8, 6, 50, 56, 100, 175, 10, 66, 164, 141, 92, 66, 13, 121, 197, 80, 148, 155, 183, 27, 59, 144, 240, 154, 246, 126, 180, 36, 145, 238, 143, 252, 49, 249, 96, 141, 86, 32, 138, 255, 227, 188, 206, 111, 157, 33, 99, 202, 221, 67, 123, 121, 251, 245, 95, 71, 93, 98, 213, 187, 40, 221, 99, 34, 253, 128, 24, 202, 102, 147, 148, 82, 213, 170, 22, 212, 172, 178, 156, 141, 219, 141, 233, 92, 156, 176, 196, 238, 92, 8, 86, 40, 22, 44, 56, 250, 70, 179, 101, 77, 53, 41, 216, 118, 55, 37, 187, 122, 133, 41, 124, 171, 72, 112, 113, 141, 41, 248, 135, 46, 126, 123, 19, 33, 89, 180, 99, 194, 238, 159, 82, 232, 7, 43, 42, 168, 41, 100, 162, 79, 174, 79, 250, 131, 233, 243, 140, 11, 44, 235, 61, 59, 144, 53, 100, 232, 104, 72, 208, 189, 84, 109, 121, 190, 229, 63, 36, 163, 36, 235, 141, 54, 65, 178, 140, 229, 115, 72, 210, 47, 38, 160, 225, 32, 4, 136, 94, 106, 117, 219, 168, 47, 11, 63, 167, 220, 215, 225, 149, 198, 7, 119, 134, 217, 222, 189, 41, 57, 178, 114, 87, 217, 52, 53, 231, 97, 4, 33, 173, 181, 10, 241, 112, 219, 220, 180, 22, 25, 225, 179, 9, 72, 193, 225, 165, 202, 179, 154, 195, 40, 156, 246, 95, 83, 215, 130, 212, 73, 50, 167, 38, 115, 87, 168, 49, 78, 155, 183, 244, 132, 84, 248, 87, 109, 153, 255, 11, 201, 183, 160, 59, 112, 225, 33, 137, 252, 218, 119, 79, 181, 87, 145, 153, 47, 133, 201, 231, 202, 161, 247, 103, 198, 192, 232, 101, 52, 116, 170, 35, 141, 235, 109, 150, 77, 171, 95, 9, 214, 141, 214, 129, 125, 66, 114, 220, 201, 56, 22, 160, 118, 31, 1, 147, 148, 9, 218, 78, 206, 29, 170, 40, 103, 128, 119, 72, 95, 66, 75, 213, 127, 116, 52, 179, 131, 25, 150, 75, 93, 146, 95, 92, 150, 233, 250, 199, 6, 149, 101, 176, 109, 147, 89, 77, 40, 111, 156, 54, 39, 146, 239, 129, 234, 162, 182, 210, 108, 87, 50, 181, 161, 156, 220, 88, 156, 247, 163, 57, 199, 117, 246, 209, 136, 238, 198, 54, 255, 36, 31, 222, 58, 172, 248, 59, 241, 158, 177, 58, 96, 32, 169, 160, 145, 74, 92, 31, 153, 73, 97, 222, 52, 248, 232, 140, 109, 74, 65, 26, 96, 122, 72, 104, 169, 228, 197, 32, 136, 81, 45, 80, 120, 48, 40, 152, 128, 162, 204, 40, 73, 29, 166, 183, 195, 142, 5, 106, 16, 76, 163, 196, 194, 87, 50, 224, 4, 173, 105, 178, 53, 169, 65, 32, 94, 54, 150, 225, 107, 120, 148, 149, 15, 228, 107, 211, 75, 249, 117, 138, 38, 33, 141, 164, 121, 136, 84, 23, 136, 0, 127, 231, 12, 36, 174, 164, 67, 237, 252, 129, 105, 57, 81, 66, 138, 135, 70, 169, 213, 88, 59, 111, 231, 118, 250, 76, 57, 182, 206, 67, 244, 109, 114, 137, 255, 104, 129, 39, 206, 179, 53, 54, 4, 91, 135, 80, 247, 104, 57, 220, 57, 167, 160, 127, 29, 10, 67, 236, 93, 126, 141, 73, 104, 85, 170, 183, 159, 44, 22, 227, 37, 182, 17, 50, 12, 140, 23, 236, 189, 103, 164, 194, 229, 255, 50, 177, 236, 128, 99, 161, 102, 174, 41, 237, 169, 199, 191, 197, 126, 161, 231, 6, 167, 20, 58, 46, 217, 64, 59, 35, 57, 187, 132, 118, 248, 96, 21, 255, 170, 85, 42, 90, 58, 183, 206, 138, 153, 44, 41, 227, 49, 11, 208, 172, 231, 4, 87, 214, 184, 128, 160, 112, 253, 219, 87, 190, 205, 94, 118, 218, 106, 197, 177, 108, 163, 135, 105, 72, 244, 12, 212, 199, 198, 111, 209, 195, 151, 228, 167, 194, 25, 112, 118, 127, 48, 81, 91, 12, 175, 8, 31, 75, 121, 164, 214, 109, 12, 86, 51, 210, 92, 193, 161, 142, 209, 182, 75, 4, 153, 233, 34, 236, 83, 228, 157, 110, 11, 29, 90, 146, 166, 29, 232, 94, 85, 139, 137, 204, 42, 236, 226, 213, 89, 169, 1, 244, 77, 102, 10, 247, 1, 184, 114, 136, 196, 131, 158, 249, 126, 172, 113, 81, 14, 79, 248, 221, 2, 107, 7, 161, 20, 210, 84, 230, 103, 142, 239, 179, 205, 17, 229, 121, 166, 67, 87, 120, 186, 187, 54, 157, 45, 110, 213, 143, 110, 160, 45, 242, 115, 139, 193, 168, 176, 174, 254, 110, 175, 176, 234, 105, 47, 16, 214, 197, 172, 195, 73, 240, 192, 129, 175, 131, 191, 43, 52, 87, 102, 113, 1, 242, 248, 26, 78, 222, 128, 248, 62, 188, 107, 245, 249, 160, 209, 96, 107, 163, 173, 185, 116, 150, 221, 62, 214, 219, 223, 230, 4, 190, 99, 9, 21, 22, 197, 172, 250, 101, 89, 22, 44, 220, 128, 174, 2, 175, 210, 130, 26, 70, 132, 149, 156, 108, 70, 54, 76, 202, 64, 107, 82, 216, 148, 178, 110, 175, 120, 111, 159, 46, 156, 75, 219, 86, 221, 147, 130, 89, 112, 9, 152, 89, 66, 18, 26, 153, 200, 126, 55, 219, 62, 13, 9, 165, 11, 155, 195, 147, 31, 101, 33, 142, 129, 172, 175, 26, 113, 215, 220, 203, 171, 161, 104, 55, 227, 230, 234, 145, 104, 51, 86, 204, 214, 149, 248, 208, 81, 147, 215, 243, 86, 237, 240, 213, 176, 192, 39, 156, 68, 63, 158, 81, 125, 7, 166, 179, 31, 175, 156, 28, 122, 184, 159, 159, 194, 212, 195, 17, 36, 220, 190, 170, 13, 0, 63, 109, 115, 239, 164, 50, 149, 3, 33, 33, 147, 184, 134, 219, 213, 204, 124, 242, 140, 33, 192, 9, 253, 133, 59, 102, 68, 68, 4, 28, 107, 68, 175, 61, 137, 252, 115, 208, 34, 96, 47, 88, 82, 192, 113, 98, 62, 91, 15, 7, 238, 115, 153, 27, 58, 228, 64, 62, 238, 243, 135, 218, 41, 218, 123, 226, 149, 174, 158, 52, 68, 78, 37, 168, 33, 75, 61, 221, 169, 224, 197, 205, 207, 205, 253, 208, 219, 170, 241, 0, 92, 0, 108, 188, 108, 91, 99, 211, 84, 171, 233, 201, 22, 130, 106, 59, 237, 196, 62, 155, 19, 94, 160, 3, 12, 3, 64, 232, 196, 32, 52, 132, 111, 18, 147, 126, 158, 194, 149, 68, 51, 23, 197, 76, 183, 98, 108, 172, 246, 153, 171, 100, 97, 120, 148, 139, 147, 90, 39, 215, 193, 69, 102, 21, 165, 114, 214, 228, 35, 36, 36, 209, 231, 2, 40, 155, 169, 85, 85, 1, 152, 245, 196, 136, 100, 226, 228, 191, 183, 116, 220, 138, 11, 84, 153, 23, 195, 81, 180, 82, 234, 186, 41, 142, 246, 205, 206, 30, 81, 57, 242, 189, 116, 26, 181, 94, 43, 66, 40, 224, 133, 223, 73, 217, 205, 209, 125, 86, 148, 81, 53, 243, 4, 187, 162, 7, 198, 121, 119, 211, 157, 41, 105, 134, 231, 111, 235, 37, 50, 237, 67, 206, 168, 250, 141, 125, 175, 154, 198, 21, 102, 113, 221, 86, 13, 172, 119, 153, 137, 31, 4, 54, 67, 178, 11, 246, 56, 106, 165, 165, 82, 79, 67, 31, 82, 145, 6, 116, 119, 33, 98, 160, 85, 185, 80, 47, 6, 152, 222, 65, 154, 20, 209, 138, 157, 14, 84, 209, 41, 116, 177, 51, 232, 255, 203, 131, 178, 232, 154, 194, 166, 155, 47, 75, 55, 203, 148, 92, 123, 230, 197, 148, 208, 194, 180, 108, 203, 240, 179, 24, 38, 123, 249, 147, 100, 0, 41, 226, 236, 155, 48, 68, 168, 168, 240, 241, 173, 204, 40, 11, 218, 234, 5, 109, 66, 150, 102, 160, 206, 253, 199, 33, 95, 187, 58, 66, 216, 135, 197, 113, 98, 58, 158, 188, 245, 174, 139, 228, 192, 217, 46, 111, 148, 25, 4, 122, 195, 172, 181, 71, 114, 87, 248, 128, 1, 76, 83, 229, 120, 118, 26, 43, 110, 124, 152, 191, 182, 213, 139, 229, 176, 3, 142, 56, 193, 253, 166, 229, 168, 212, 29, 101, 179, 188, 189, 113, 246, 73, 152, 105, 240, 221, 250, 154, 227, 26, 135, 11, 126, 206, 229, 157, 42, 152, 175, 207, 19, 144, 151, 138, 6, 17, 234, 130, 132, 25, 68, 127, 59, 209, 25, 203, 91, 32, 15, 163, 129, 12, 15, 140, 118, 202, 235, 142, 135, 187, 175, 33, 37, 109, 115, 17, 185, 128, 124, 175, 49, 242, 138, 148, 236, 121, 4, 207, 246, 187, 75, 40, 175, 30, 14, 231, 127, 214, 165, 24, 210, 46, 81, 170, 95, 111, 173, 127, 197, 151, 249, 194, 243, 111, 40, 108, 171, 50, 201, 73, 209, 98, 33, 87, 66, 227, 240, 8, 22, 211, 86, 137, 151, 95, 144, 167, 199, 170, 177, 229, 173, 93, 88, 66, 185, 72, 42, 35, 78, 232, 169, 56, 192, 26, 65, 111, 198, 151, 227, 115, 165, 114, 5, 91, 56, 193, 31, 78, 111, 173, 63, 210, 91, 148, 146, 92, 251, 208, 171, 60, 61, 44, 5, 66, 25, 253, 243, 195, 30, 211, 117, 220, 247, 50, 236, 62, 144, 182, 104, 112, 221, 186, 46, 95, 124, 207, 255, 12, 59, 38, 182, 191, 101, 227, 27, 96, 121, 188, 63, 114, 56, 30, 174, 68, 99, 217, 195, 210, 238, 47, 27, 130, 130, 145, 114, 123, 56, 243, 102, 242, 37, 232, 215, 96, 162, 139, 63, 114, 124, 197, 141, 107, 154, 229, 63, 228, 85, 79, 170, 33, 12, 12, 98, 26, 50, 36, 91, 170, 26, 229, 167, 32, 243, 197, 225, 144, 166, 222, 36, 124, 129, 68, 20, 99, 23, 157, 89, 60, 22, 54, 148, 67, 121, 77, 200, 75, 184, 169, 175, 192, 249, 30, 213, 209, 178, 162, 87, 38, 158, 156, 163, 55, 27, 71, 14, 81, 250, 239, 37, 47, 138, 61, 239, 238, 123, 63, 177, 214, 185, 11, 189, 222, 168, 171, 216, 57, 35, 170, 216, 43, 49, 119, 196, 58, 231, 117, 62, 251, 123, 139, 213, 66, 109, 145, 81, 133, 200, 25, 66, 170, 226, 114, 211, 228, 47, 60, 54, 31, 165, 210, 230, 149, 6, 43, 26, 139, 177, 148, 95, 40, 45, 80, 238, 186, 254, 120, 144, 214, 33, 202, 20, 208, 94, 102, 165, 207, 112, 174, 149, 89, 207, 120, 127, 246, 140, 117, 96, 245, 141, 162, 157, 189, 72, 128, 91, 10, 7, 224, 45, 155, 216, 88, 10, 165, 138, 19, 101, 203, 133, 10, 151, 150, 27, 186, 142, 197, 82, 237, 172, 139, 62, 150, 150, 19, 194, 209, 48, 125, 148, 167, 104, 179, 250, 169, 188, 223, 90, 13, 190, 242, 32, 219, 145, 213, 49, 146, 18, 164, 158, 166, 74, 238, 165, 28, 255, 182, 147, 23, 233, 245, 219, 50, 191, 228, 189, 212, 1, 249, 216, 155, 121, 129, 183, 28, 105, 215, 138, 167, 37, 150, 141, 29, 27, 102, 70, 165, 7, 229, 110, 40, 93, 150, 205, 79, 49, 253, 239, 29, 50, 92, 183, 30, 25, 200, 229, 0, 148, 150, 130, 90, 82, 224, 7, 221, 215, 78, 227, 251, 82, 51, 98, 143, 23, 38, 215, 83, 9, 64, 93, 167, 74, 125, 161, 93, 170, 96, 236, 138, 168, 248, 5, 98, 224, 53, 181, 206, 180, 35, 149, 71, 54, 101, 11, 64, 80, 221, 126, 69, 78, 152, 199, 200, 160, 120, 32, 242, 40, 10, 60, 163, 126, 22, 253, 185, 13, 229, 232, 24, 9, 173, 73, 181, 33, 39, 15, 203, 180, 19, 103, 104, 184, 223, 88, 107, 91, 100, 40, 74, 175, 134, 164, 201, 47, 6, 221, 111, 71, 171, 190, 221, 81, 57, 241, 14, 162, 212, 168, 195, 56, 46, 71, 175, 193, 147, 90, 145, 4, 63, 139, 186, 248, 169, 251, 190, 101, 27, 62, 87, 21, 250, 54, 193, 107, 246, 185, 53, 233, 164, 163, 170, 156, 203, 176, 123, 173, 24, 242, 241, 132, 2, 10, 206, 237, 10, 107, 81, 76, 186, 248, 187, 144, 223, 89, 151, 98, 8, 251, 129, 183, 113, 18, 8, 221, 59, 168, 36, 91, 17, 193, 62, 76, 134, 36, 4, 75, 69, 131, 109, 57, 78, 1, 41, 84, 233, 145, 147, 255, 159, 186, 50, 237, 181, 237, 182, 2, 114, 183, 14, 241, 110, 49, 20, 42, 73, 75, 51, 212, 26, 71, 204, 71, 62, 74, 84, 182, 238, 250, 64, 219, 234, 3, 235, 155, 30, 166, 215, 140, 107, 136, 255, 77, 75, 180, 21, 40, 1, 247, 159, 117, 96, 61, 207, 227, 82, 126, 109, 242, 239, 143, 70, 247, 185, 199, 76, 180, 14, 89, 26, 234, 7, 231, 87, 108, 234, 216, 34, 168, 86, 55, 63, 147, 7, 166, 122, 203, 235, 23, 143, 7, 64, 100, 223, 161, 187, 60, 152, 210, 188, 36, 36, 170, 244, 7, 235, 137, 179, 135, 38, 195, 113, 194, 135, 203, 144, 25, 135, 22, 180, 4, 31, 182, 247, 227, 136, 3, 110, 205, 57, 88, 151, 64, 84, 119, 201, 238, 105, 102, 125, 221, 238, 115, 82, 93, 91, 91, 195, 76, 87, 236, 215, 3, 220, 124, 71, 110, 188, 52, 90, 86, 185, 167, 132, 116, 31, 59, 228, 226, 28, 81, 206, 81, 200, 239, 162, 184, 207, 1, 65, 24, 175, 240, 20, 12, 159, 44, 138, 235, 78, 157, 13, 225, 232, 119, 58, 238, 6, 27, 81, 79, 21, 232, 159, 57, 35, 118, 83, 152, 24, 231, 132, 236, 113, 239, 111, 165, 133, 68, 32, 156, 250, 172, 16, 122, 55, 155, 9, 131, 3, 255, 33, 3, 88, 187, 103, 171, 171, 133, 131, 176, 212, 8, 42, 162, 89, 178, 47, 240, 169, 153, 25, 34, 53, 53, 213, 155, 239, 134, 66, 104, 244, 64, 81, 182, 168, 30, 219, 94, 103, 187, 140, 174, 25, 170, 55, 227, 182, 211, 123, 247, 2, 241, 5, 145, 248, 145, 22, 202, 128, 202, 7, 9, 21, 202, 148, 159, 33, 77, 186, 171, 21, 218, 252, 86, 43, 217, 123, 196, 71, 85, 166, 4, 44, 177, 201, 57, 161, 244, 41, 131, 75, 224, 38, 132, 56, 237, 235, 63, 253, 175, 42, 119, 191, 183, 240, 7, 76, 100, 43, 15, 151, 84, 21, 136, 194, 91, 146, 64, 79, 94, 224, 231, 252, 174, 191, 36, 43, 137, 103, 251, 134, 209, 162, 65, 214, 142, 223, 115, 237, 126, 90, 134, 233, 235, 49, 82, 55, 233, 18, 105, 12, 47, 208, 121, 12, 238, 155, 27, 98, 47, 23, 220, 12, 105, 195, 202, 114, 175, 34, 228, 94, 186, 68, 41, 209, 227, 200, 145, 131, 163, 25, 160, 62, 231, 220, 156, 161, 4, 44, 205, 140, 44, 206, 151, 55, 48, 243, 15, 122, 20, 76, 44, 241, 136, 232, 47, 189, 141, 96, 255, 213, 168, 33, 61, 55, 8, 106, 150, 168, 104, 176, 23, 253, 166, 255, 29, 202, 75, 145, 124, 34, 101, 149, 171, 105, 221, 173, 161, 75, 147, 249, 105, 46, 196, 127, 104, 229, 195, 211, 231, 255, 181, 218, 247, 107, 182, 26, 74, 146, 240, 17, 234, 0, 237, 1, 23, 107, 58, 99, 98, 86, 17, 11, 115, 121, 135, 107, 227, 183, 215, 152, 59, 148, 172, 116, 203, 92, 185, 150, 242, 25, 226, 242, 50, 37, 231, 228, 121, 127, 39, 75, 176, 15, 95, 38, 150, 117, 191, 35, 222, 45, 9, 188, 185, 207, 86, 54, 117, 51, 169, 250, 10, 245, 172, 27, 54, 107, 95, 53, 54, 11, 157, 146, 121, 108, 255, 140, 153, 223, 107, 176, 251, 96, 217, 92, 91, 170, 194, 105, 184, 55, 174, 126, 83, 143, 170, 75, 95, 7, 169, 233, 38, 16, 251, 205, 70, 104, 216, 57, 50, 155, 74, 144, 76, 63, 106, 158, 118, 168, 15, 44, 94, 144, 127, 69, 42, 194, 166, 163, 251, 14, 21, 135, 103, 131, 205, 71, 155, 59, 159, 46, 183, 146, 214, 208, 88, 47, 213, 158, 146, 52, 91, 169, 177, 244, 86, 235, 220, 123, 153, 56, 197, 179, 167, 214, 185, 45, 183, 12, 33, 121, 70, 215, 180, 241, 182, 131, 95, 48, 184, 148, 9, 125, 240, 12, 149, 50, 140, 46, 120, 18, 246, 160, 51, 56, 133, 92, 253, 102, 147, 119, 133, 176, 28, 173, 213, 71, 59, 112, 240, 37, 191, 114, 1, 54, 179, 2, 59, 129, 180, 55, 77, 21, 194, 163, 188, 78, 141, 245, 171, 11, 115, 161, 251, 227, 163, 23, 73, 3, 234, 56, 156, 3, 68, 78, 219, 220, 172, 115, 38, 200, 190, 102, 7, 136, 66, 141, 40, 201, 245, 95, 220, 129, 74, 45, 200, 195, 242, 78, 167, 126, 222, 120, 16, 80, 31, 153, 155, 50, 32, 84, 238, 216, 76, 176, 122, 82, 204, 145, 93, 112, 143, 0, 3, 194, 235, 184, 1, 241, 156, 106, 31, 106, 207, 128, 117, 39, 244, 25, 104, 21, 178, 176, 214, 173, 99, 45, 146, 95, 155, 40, 249, 158, 124, 8, 220, 244, 3, 5, 193, 92, 108, 239, 60, 88, 40, 116, 153, 13, 159, 67, 129, 20, 227, 44, 204, 192, 199, 104, 162, 122, 169, 72, 218, 168, 160, 56, 77, 203, 161, 244, 145, 20, 224, 144, 119, 245, 136, 93, 148, 42, 45, 14, 23, 32, 235, 108, 2, 178, 161, 210, 20, 64, 201, 226, 49, 40, 122, 243, 145, 81, 158, 25, 251, 100, 166, 37, 106, 230, 226, 222, 153, 108, 210, 249, 188, 153, 81, 69, 164, 226, 105, 127, 253, 55, 182, 224, 194, 2, 183, 140, 208, 203, 2, 148, 58, 158, 132, 104, 33, 228, 210, 242, 250, 131, 226, 119, 150, 178, 200, 94, 30, 157, 251, 110, 125, 179, 216, 74, 99, 65, 50, 121, 172, 16, 90, 167, 88, 74, 219, 191, 158, 9, 143, 128, 207, 229, 114, 31, 62, 169, 114, 113, 9, 190, 40, 237, 42, 154, 233, 193, 211, 46, 148, 177, 161, 109, 153, 0, 138, 109, 69, 8, 172, 85, 11, 101, 143, 217, 163, 221, 55, 5, 93, 225, 101, 132, 138, 237, 42, 231, 52, 169, 217, 133, 147, 137, 128, 204, 254, 144, 127, 254, 117, 169, 135, 27, 137, 152, 22, 117, 101, 115, 84, 24, 89, 73, 100, 31, 155, 208, 204, 7, 36, 105, 142, 216, 75, 240, 231, 91, 32, 125, 142, 220, 241, 157, 82, 87, 172, 236, 186, 61, 114, 168, 157, 88, 219, 171, 63, 38, 242, 51, 193, 199, 25, 237, 170, 74, 227, 96, 134, 42, 41, 196, 45, 239, 65, 222, 239, 189, 100, 117, 137, 242, 15, 77, 223, 97, 240, 29, 13, 121, 18, 54, 209, 179, 203, 39, 183, 84, 32, 239, 80, 15, 90, 119, 83, 96, 52, 7, 209, 227, 201, 130, 9, 60, 125, 242, 147, 43, 218, 244, 228, 241, 65, 179, 56, 202, 138, 38, 149, 86, 204, 69, 65, 115, 65, 137, 124, 215, 162, 93, 128, 201, 79, 159, 8, 59, 233, 125, 38, 15, 164, 199, 43, 109, 68, 219, 75, 125, 3, 245, 117, 21, 187, 124, 75, 231, 22, 172, 147, 177, 78, 39, 192, 160, 72, 250, 9, 215, 181, 77, 210, 171, 110, 125, 102, 184, 52, 56, 217, 164, 140, 86, 102, 130, 211, 138, 220, 77, 135, 11, 148, 200, 72, 190, 180, 205, 144, 165, 177, 98, 99, 125, 175, 218, 52, 65, 156, 160, 250, 45, 138, 120, 92, 20, 32, 22, 121, 107, 197, 247, 78, 199, 142, 170, 213, 123, 51, 127, 155, 43, 194, 154, 231, 230, 221, 121, 147, 64, 111, 3, 12, 171, 203, 203, 170, 116, 123, 60, 145, 145, 254, 101, 80, 216, 196, 23, 92, 148, 219, 138, 64, 208, 172, 113, 155, 25, 102, 92, 204, 170, 10, 36, 241, 174, 127, 214, 212, 207, 48, 91, 150, 206, 76, 26, 201, 143, 176, 70, 129, 176, 170, 215, 5, 181, 174, 14, 181, 253, 41, 160, 52, 71, 176, 213, 103, 245, 3, 130, 41, 173, 76, 137, 161, 168, 221, 192, 53, 229, 187, 185, 212, 187, 229, 243, 41, 19, 181, 80, 243, 182, 120, 10, 208, 133, 13, 22, 151, 203, 228, 160, 207, 17, 92, 214, 205, 144, 29, 29, 108, 155, 179, 72, 189, 76, 0, 155, 71, 72, 64, 87, 156, 180, 207, 239, 196, 112, 23, 200, 138, 41, 151, 104, 69, 97, 153, 190, 18, 179, 72, 26, 21, 91, 231, 205, 134, 223, 240, 12, 220, 18, 132, 250, 92, 103, 180, 177, 219, 253, 187, 188, 197, 126, 239, 156, 38, 7, 32, 129, 231, 246, 221, 186, 102, 138, 27, 81, 19, 16, 54, 48, 129, 216, 163, 2, 213, 249, 51, 176, 222, 255, 105, 90, 234, 132, 152, 49, 201, 81, 186, 250, 224, 183, 54, 245, 37, 190, 226, 188, 179, 35, 247, 179, 142, 105, 37, 100, 21, 244, 136, 207, 131, 236, 210, 206, 221, 205, 240, 59, 249, 49, 101, 228, 123, 139, 156, 29, 253, 207, 186, 226, 168, 241, 166, 240, 146, 209, 39, 115, 208, 102, 185, 15, 254, 72, 83, 114, 232, 22, 214, 221, 200, 59, 10, 160, 111, 211, 162, 59, 2, 17, 168, 88, 191, 65, 107, 173, 167, 94, 77, 164, 96, 100, 98, 184, 68, 123, 81, 139, 8, 210, 140, 73, 96, 119, 234, 59, 5, 36, 99, 30, 183, 118, 172, 236, 232, 243, 38, 14, 255, 99, 101, 100, 9, 203, 68, 0, 195, 193, 205, 58, 69, 74, 116, 196, 74, 229, 174, 17, 247, 115, 187, 82, 204, 164, 218, 81, 254, 187, 131, 25, 45, 117, 217, 102, 175, 20, 56, 167, 20, 91, 185, 46, 183, 119, 2, 128, 158, 153, 75, 2, 165, 29, 23, 1, 41, 204, 86, 216, 71, 229, 33, 82, 106, 43, 254, 204, 173, 172, 230, 175, 240, 29, 58, 12, 37, 131, 66, 79, 241, 142, 139, 245, 253, 244, 199, 120, 44, 14, 0, 70, 20, 207, 50, 38, 57, 130, 46, 161, 110, 206, 209, 30, 146, 219, 123, 168, 9, 243, 22, 151, 57, 76, 163, 238, 135, 131, 81, 5, 189, 119, 240, 237, 20, 24, 115, 128, 169, 26, 121, 131, 87, 106, 254, 124, 2, 74, 85, 134, 108, 227, 210, 251, 85, 211, 106, 34, 30, 234, 149, 164, 65, 134, 55, 53, 65, 20, 116, 195, 88, 158, 136, 151, 141, 90, 183, 41, 81, 189, 154, 166, 242, 181, 240, 101, 8, 210, 64, 77, 189, 252, 24, 42, 190, 76, 197, 83, 45, 148, 28, 213, 76, 207, 122, 160, 120, 234, 91, 229, 7, 63, 119, 225, 200, 194, 99, 29, 148, 188, 161, 125, 146, 156, 153, 227, 208, 109, 192, 82, 185, 255, 137, 187, 211, 151, 154, 63, 175, 38, 214, 39, 220, 192, 176, 8, 152, 18, 223, 229, 114, 113, 0, 107, 240, 178, 110, 84, 149, 11, 212, 233, 49, 15, 164, 232, 197, 105, 135, 250, 92, 135, 96, 237, 220, 88, 198, 68, 227, 171, 191, 169, 247, 99, 88, 46, 166, 46, 26, 209, 150, 162, 103, 77, 54, 27, 100, 238, 233, 249, 49, 138, 254, 86, 219, 52, 204, 60, 248, 93, 149, 164, 212, 141, 182, 194, 112, 26, 38, 155, 248, 252, 107, 131, 234, 122, 179, 125, 84, 125, 191, 225, 250, 111, 125, 244, 132, 43, 245, 40, 170, 2, 192, 81, 171, 68, 16, 67, 152, 172, 195, 249, 122, 76, 142, 7, 156, 31, 231, 137, 225, 250, 177, 248, 122, 179, 107, 51, 236, 30, 51, 34, 236, 15, 172, 217, 212, 221, 202, 227, 187, 67, 37, 222, 187, 114, 1, 90, 38, 46, 134, 6, 90, 195, 25, 15, 241, 201, 114, 105, 165, 105, 218, 25, 230, 122, 194, 47, 82, 207, 170, 189, 61, 130, 219, 62, 179, 112, 228, 86, 252, 103, 181, 7, 236, 96, 11, 0, 249, 247, 221, 74, 217, 43, 211, 228, 173, 126, 1, 190, 161, 103, 212, 126, 92, 71, 61, 187, 175, 53, 247, 60, 91, 81, 128, 223, 202, 9, 160, 109, 253, 202, 172, 95, 162, 126, 232, 69, 239, 92, 181, 48, 77, 234, 176, 127, 41, 215, 43, 176, 193, 13, 58, 173, 194, 228, 67, 230, 192, 73, 82, 113, 224, 211, 38, 48, 159, 46, 205, 26, 24, 213, 197, 1, 187, 226, 41, 55, 51, 192, 20, 221, 192, 112, 43, 102, 133, 170, 85, 123, 182, 5, 44, 109, 140, 117, 209, 25, 148, 2, 121, 79, 193, 166, 28, 213, 31, 78, 163, 231, 45, 69, 68, 213, 14, 102, 77, 28, 156, 163, 144, 170, 250, 16, 136, 73, 203, 181, 141, 102, 196, 163, 123, 212, 34, 209, 109, 155, 40, 171, 160, 222, 6, 143, 118, 219, 49, 170, 52, 171, 247, 145, 83, 66, 138, 234, 72, 13, 104, 245, 220, 32, 30, 236, 70, 195, 150, 158, 150, 229, 159, 191, 107, 99, 21, 118, 213, 169, 102, 15, 63, 13, 246, 59, 167, 99, 57, 111, 118, 11, 35, 198, 83, 104, 103, 45, 209, 221, 122, 235, 193, 208, 80, 211, 152, 55, 238, 65, 26, 90, 10, 6, 107, 60, 206, 64, 11, 42, 75, 16, 172, 140, 244, 62, 14, 68, 192, 95, 157, 250, 134, 39, 125, 251, 62, 101, 129, 140, 196, 55, 77, 141, 157, 146, 233, 215, 79, 163, 67, 231, 186, 112, 28, 102, 174, 243, 58, 55, 245, 24, 146, 113, 164, 156, 191, 226, 159, 232, 16, 219, 177, 138, 23, 56, 13, 96, 184, 22, 92, 152, 188, 40, 145, 92, 60, 118, 18, 243, 186, 84, 135, 19, 164, 77, 206, 148, 23, 171, 62, 98, 21, 64, 214, 2, 254, 84, 149, 66, 231, 194, 56, 94, 142, 201, 14, 45, 175, 180, 94, 22, 111, 60, 209, 48, 172, 135, 88, 44, 94, 217, 102, 133, 183, 76, 246, 141, 225, 177, 51, 127, 232, 76, 217, 149, 101, 46, 201, 229, 183, 19, 50, 54, 49, 89, 62, 105, 80, 42, 11, 164, 3, 222, 21, 4, 153, 21, 61, 137, 173, 1, 48, 233, 20, 30, 52, 126, 76, 236, 61, 138, 53, 142, 241, 158, 23, 112, 246, 216, 72, 217, 227, 190, 213, 185, 194, 218, 28, 244, 218, 135, 107, 214, 19, 56, 154, 132, 45, 130, 228, 87, 60, 198, 9, 55, 239, 215, 172, 190, 244, 118, 125, 197, 195, 177, 26, 244, 63, 165, 79, 56, 232, 100, 142, 104, 138, 243, 224, 197, 181, 120, 131, 161, 128, 232, 202, 102, 75, 24, 25, 80, 217, 240, 139, 230, 16, 113, 215, 191, 185, 58, 200, 122, 7, 61, 46, 24, 221, 255, 182, 38, 245, 56, 95, 179, 40, 243, 52, 11, 30, 183, 74, 95, 74, 137, 194, 126, 29, 118, 40, 18, 110, 139, 159, 158, 92, 248, 56, 35, 128, 121, 165, 120, 9, 109, 155, 160, 230, 244, 251, 207, 215, 109, 159, 38, 177, 81, 234, 27, 29, 228, 183, 224, 42, 170, 175, 105, 60, 172, 67, 244, 171, 197, 176, 28, 88, 126, 191, 194, 136, 120, 50, 72, 8, 145, 244, 119, 36, 198, 48, 139, 149, 17, 56, 173, 93, 54, 201, 74, 143, 134, 192, 192, 100, 203, 125, 176, 86, 154, 227, 50, 51, 69, 78, 45, 2, 251, 126, 130, 143, 255, 251, 19, 102, 5, 160, 217, 109, 38, 99, 227, 1, 56, 80, 0, 237, 225, 174, 138, 143, 155, 230, 101, 245, 42, 67, 81, 79, 79, 71, 53, 106, 97, 118, 135, 83, 102, 45, 118, 96, 104, 217, 195, 131, 149, 85, 46, 247, 121, 93, 114, 157, 118, 182] - ], - "iv": null, - "key": [160, 96, 207, 51, 23, 219, 98, 82, 235, 82, 211, 70, 120, 212, 209, 193, 184, 139, 111, 217, 153, 165, 61, 40, 206, 209, 57, 53, 224, 161, 205, 180], - "modeOfOperation": "ctr", - "plaintext": [ - [26, 76, 24, 117, 112, 151, 114, 155, 223, 94, 223, 216, 184, 246, 135, 170, 124, 24, 153, 196, 144, 230, 253, 86, 53, 244, 149, 167, 213, 36, 178, 205, 210, 228, 240, 89, 128, 28, 67, 168, 161, 245, 164, 245, 154, 119, 237, 64, 83, 118, 232, 14, 89, 198, 214, 79, 230, 65, 82, 233, 210, 53, 166, 21, 80, 23, 17, 92, 103, 0, 143, 201, 100, 223, 71, 117, 199, 95, 173, 207, 146, 71, 96, 53, 136, 4, 211, 35, 38, 26, 215, 119, 198, 199, 217, 175, 38, 129, 42, 94, 188, 93, 87, 213, 178, 199, 59, 247, 223, 18, 61, 48, 244, 110, 15, 20, 102, 195, 91, 52, 152, 44, 142, 166, 153, 110, 250, 241, 192, 151, 44, 51, 208, 59, 6, 235, 122, 116, 152, 96, 46, 153, 184, 211, 209, 61, 171, 136, 175, 93, 65, 226, 148, 36, 99, 22, 77, 52, 197, 6, 93, 12, 8, 74, 223, 22, 111, 161, 89, 114, 70, 71, 13, 142, 3, 36, 163, 236, 129, 89, 89, 36, 139, 201, 181, 243, 106, 94, 44, 244, 128, 119, 33, 149, 167, 241, 240, 71, 181, 123, 120, 125, 206, 20, 19, 248, 1, 249, 187, 34, 3, 103, 117, 100, 90, 202, 66, 39, 134, 30, 15, 221, 103, 117, 16, 227, 124, 230, 207, 107, 66, 132, 105, 198, 184, 103, 40, 124, 165, 221, 5, 219, 40, 234, 42, 166, 138, 238, 107, 205, 59, 102, 131, 218, 151, 234, 94, 252, 239, 130, 190, 126, 135, 251, 44, 3, 253, 59, 106, 22, 103, 191, 116, 57, 129, 40, 208, 55, 234, 62, 232, 1, 176, 209, 246, 250, 247, 182, 249, 138, 22, 199, 92, 245, 68, 45, 101, 147, 250, 254, 255, 126, 9, 246, 67, 196, 6, 84, 37, 242, 61, 139, 164, 140, 46, 225, 211, 127, 131, 218, 181, 227, 180, 53, 80, 59, 176, 223, 158, 177, 123, 113, 63, 130, 15, 172, 145, 71, 220, 112, 46, 28, 204, 244, 229, 215, 94, 194, 172, 44, 0, 71, 29, 154, 67, 71, 226, 231, 218, 219, 54, 105, 247, 137, 78, 33, 91, 246, 116, 184, 25, 32, 254, 232, 247, 186, 126, 124, 0, 129, 154, 55, 153, 199, 38, 195, 169, 192, 150, 63, 205, 181, 183, 67, 175, 110, 248, 67, 104, 211, 89, 65, 145, 219, 110, 105, 84, 204, 5, 40, 214, 109, 201, 122, 60, 202, 105, 214, 58, 247, 198, 250, 218, 123, 242, 72, 147, 10, 83, 249, 219, 54, 232, 181, 117, 220, 229, 125, 122, 10, 40, 3, 165, 231, 249, 111, 91, 173, 226, 41, 81, 93, 40, 152, 130, 222, 159, 34, 234, 218, 7, 237, 120, 15, 107, 201, 27, 245, 197, 101, 38, 85, 240, 180, 206, 113, 145, 221, 1, 220, 92, 240, 202, 47, 29, 191, 81, 172, 199, 74, 180, 130, 200, 146, 49, 236, 66, 145, 161, 87, 38, 15, 196, 146, 69, 58, 177, 164, 202, 200, 46, 64, 139, 215, 57, 98, 117, 40, 54, 156, 100, 205, 194, 155, 6, 86, 12, 195, 28, 104, 242, 7, 30, 204, 162, 193, 51, 48, 141, 165, 30, 227, 2, 210, 61, 53, 49, 93, 108, 47, 54, 131, 201, 226, 179, 151, 71, 18, 235, 188, 135, 107, 113, 173, 94, 255, 52, 113, 151, 60, 9, 96, 137, 146, 123, 6, 95, 133, 167, 160, 98, 99, 3, 52, 138, 45, 7, 205, 190, 161, 21, 76, 4, 75, 222, 121, 232, 244, 168, 67, 170, 80, 55, 147, 255, 137, 198, 79, 121, 229, 62, 82, 105, 44, 135, 208, 140, 91, 227, 87, 45, 234, 103, 118, 144, 242, 8, 192, 111, 12, 108, 17, 82, 40, 149, 139, 177, 28, 158, 13, 84, 163, 248, 120, 209, 246, 151, 106, 236, 222, 68, 42, 228, 95, 47, 148, 103, 150, 71, 230, 18, 251, 171, 50, 250, 126, 90, 59, 157, 3, 44, 53, 141, 90, 7, 222, 156, 29, 30, 160, 173, 213, 107, 82, 195, 0, 83, 98, 63, 206, 35, 165, 159, 236, 142, 25, 68, 184, 227, 190, 189, 129, 74, 213, 17, 43, 228, 149, 53, 69, 182, 43, 171, 39, 105, 9, 233, 133, 236, 89, 206, 193, 221, 100, 151, 205, 59, 83, 97, 17, 144, 89, 23, 125, 89, 207, 48, 240, 11, 1, 113, 254, 33, 242, 230, 232, 241, 242, 237, 202, 91, 204, 154, 206, 192, 47, 46, 113, 167, 216, 19, 66, 226, 15, 36, 134, 18, 87, 140, 48, 174, 73, 234, 29, 3, 248, 224, 26, 249, 79, 193, 95, 212, 230, 21, 152, 119, 111, 4, 140, 204, 247, 156, 157, 86, 35, 0, 14, 93, 17, 192, 231, 26, 52, 13, 224, 201, 153, 167, 49, 206, 130, 223, 145, 229, 22, 137, 131, 60, 175, 240, 51, 101, 78, 240, 182, 24, 24, 213, 104, 72, 208, 214, 83, 59, 219, 9, 180, 144, 68, 63, 7, 220, 71, 105, 95, 49, 137, 136, 210, 200, 207, 18, 134, 146, 210, 47, 16, 228, 225, 187, 40, 114, 102, 171, 251, 165, 90, 12, 204, 93, 86, 79, 11, 178, 219, 191, 129, 4, 224, 74, 235, 138, 107, 176, 139, 8, 233, 68, 70, 239, 126, 152, 209, 140, 246, 16, 252, 196, 188, 201, 222, 171, 253, 37, 70, 24, 219, 61, 74, 36, 172, 195, 114, 139, 63, 32, 88, 198, 152, 121, 121, 201, 33, 203, 51, 221, 144, 128, 74, 37, 103, 7, 82, 84, 185, 239, 2, 223, 71, 77, 62, 227, 36, 102, 225, 227, 144, 168, 53, 149, 228, 242, 48, 96, 64, 7, 52, 248, 148, 62, 73, 20, 29, 155, 164, 224, 151, 166, 206, 182, 179, 234, 211, 102, 162, 83, 76, 165, 1, 121, 188, 120, 139, 49, 82, 151, 215, 108, 18, 53, 35, 111, 232, 239, 168, 201, 19, 99, 183, 53, 75, 49, 83, 112, 52, 25, 221, 60, 106, 118, 49, 163, 212, 37, 166, 103, 23, 186, 190, 235, 1, 251, 219, 123, 54, 124, 239, 59, 234, 18, 24, 9, 0, 227, 217, 87, 139, 95, 196, 231, 61, 8, 223, 72, 53, 150, 43, 224, 155, 54, 75, 31, 105, 37, 248, 182, 117, 5, 52, 39, 130, 136, 136, 107, 61, 70, 23, 112, 61, 47, 115, 149, 88, 79, 20, 163, 22, 117, 22, 117, 152, 230, 231, 233, 129, 172, 138, 159, 112, 73, 169, 133, 176, 5, 207, 179, 29, 66, 32, 77, 85, 253, 168, 73, 87, 224, 109, 61, 214, 147, 25, 244, 210, 221, 112, 46, 17, 196, 27, 95, 139, 210, 47, 85, 212, 182, 34, 248, 129, 234, 10, 112, 15, 135, 118, 59, 104, 188, 37, 225, 168, 123, 172, 41, 111, 85, 6, 183, 133, 104, 230, 229, 94, 245, 63, 46, 168, 37, 34, 21, 35, 9, 58, 246, 231, 80, 205, 4, 54, 89, 81, 131, 40, 146, 69, 117, 164, 20, 100, 36, 174, 166, 103, 27, 166, 155, 112, 7, 64, 115, 203, 76, 10, 49, 18, 25, 186, 187, 196, 164, 37, 124, 98, 216, 102, 73, 16, 225, 241, 171, 188, 59, 251, 43, 171, 84, 85, 5, 63, 85, 3, 59, 217, 195, 242, 33, 107, 57, 236, 22, 229, 124, 238, 109, 246, 166, 31, 235, 180, 36, 113, 199, 57, 133, 130, 58, 254, 78, 106, 180, 115, 201, 198, 55, 79, 151, 49, 236, 66, 227, 234, 21, 229, 42, 130, 25, 186, 195, 4, 51, 60, 201, 167, 101, 82, 199, 211, 34, 88, 69, 148, 166, 181, 33, 72, 245, 253, 223, 97, 209, 185, 145, 160, 112, 119, 67, 205, 200, 125, 253, 170, 148, 217, 189, 91, 34, 53, 180, 224, 140, 214, 91, 171, 100, 228, 64, 236, 172, 97, 14, 0, 27, 124, 61, 37, 56, 180, 222, 27, 156, 84, 95, 28, 147, 110, 69, 70, 219, 245, 54, 88, 179, 31, 121, 158, 127, 21, 178, 34, 15, 254, 221, 202, 172, 23, 231, 73, 205, 148, 81, 228, 114, 98, 111, 254, 242, 232, 46, 199, 69, 110, 168, 135, 48, 140, 19, 204, 237, 23, 206, 6, 43, 21, 243, 189, 110, 11, 13, 108, 177, 24, 168, 122, 129, 62, 63, 103, 215, 175, 51, 29, 60, 199, 82, 151, 52, 5, 144, 149, 188, 193, 17, 181, 74, 125, 47, 251, 166, 103, 226, 167, 95, 126, 149, 193, 56, 64, 40, 205, 152, 252, 130, 20, 155, 34, 1, 104, 219, 181, 35, 144, 161, 189, 108, 77, 131, 142, 119, 154, 238, 198, 26, 18, 41, 217, 9, 160, 44, 214, 54, 16, 141, 125, 127, 225, 201, 83, 64, 226, 119, 60, 25, 194, 183, 246, 23, 53, 199, 73, 3, 79, 31, 51, 117, 217, 149, 12, 187, 61, 177, 52, 100, 17, 171, 242, 0, 47, 248, 7, 45, 9, 167, 45, 64, 96, 130, 26, 94, 3, 236, 222, 1, 222, 63, 132, 217, 194, 18, 202, 186, 199, 201, 187, 99, 15, 254, 228, 153, 68, 22, 116, 61, 167, 6, 14, 190, 202, 254, 193, 220, 86, 114, 252, 201, 17, 129, 217, 231, 140, 42, 211, 159, 1, 192, 223, 227, 67, 239, 182, 197, 97, 171, 59, 206, 145, 206, 46, 90, 159, 102, 52, 255, 249, 131, 122, 78, 71, 66, 83, 47, 151, 27, 37, 92, 188, 241, 26, 93, 154, 15, 58, 126, 241, 108, 95, 61, 248, 111, 32, 67, 110, 147, 96, 224, 20, 180, 7, 157, 136, 232, 251, 228, 74, 164, 88, 215, 116, 186, 27, 83, 250, 18, 244, 52, 175, 99, 172, 213, 4, 115, 196, 220, 191, 7, 206, 38, 75, 93, 119, 177, 182, 144, 17, 55, 128, 186, 17, 227, 137, 239, 99, 176, 130, 192, 56, 243, 246, 209, 168, 252, 189, 23, 103, 111, 236, 124, 149, 86, 230, 52, 175, 60, 130, 158, 244, 195, 230, 81, 235, 89, 65, 11, 169, 20, 174, 219, 42, 28, 32, 228, 49, 7, 110, 183, 66, 208, 28, 220, 7, 50, 162, 139, 217, 196, 242, 245, 3, 112, 73, 86, 223, 145, 151, 180, 30, 218, 207, 176, 168, 239, 200, 47, 76, 64, 139, 16, 122, 170, 184, 171, 207, 220, 40, 67, 197, 42, 10, 22, 180, 218, 243, 125, 102, 247, 253, 40, 104, 218, 196, 148, 223, 172, 95, 170, 255, 95, 153, 11, 184, 72, 114, 195, 249, 139, 189, 166, 66, 10, 0, 163, 130, 215, 165, 213, 11, 53, 18, 27, 228, 214, 19, 118, 1, 220, 155, 78, 73, 255, 179, 164, 160, 147, 243, 92, 121, 117, 76, 183, 56, 110, 102, 145, 61, 179, 59, 222, 102, 172, 33, 38, 229, 63, 189, 116, 44, 21, 184, 184, 85, 2, 164, 170, 6, 251, 197, 254, 80, 81, 131, 16, 36, 103, 202, 224, 36, 255, 18, 209, 205, 206, 7, 78, 230, 24, 13, 54, 61, 15, 16, 206, 107, 148, 188, 103, 252, 150, 101, 32, 12, 186, 45, 142, 153, 164, 37, 157, 133, 202, 180, 34, 130, 48, 160, 65, 153, 154, 249, 33, 163, 53, 202, 79, 165, 13, 103, 194, 236, 160, 139, 117, 35, 73, 232, 80, 246, 67, 97, 129, 101, 222, 100, 38, 6, 242, 166, 14, 87, 214, 137, 236, 117, 60, 94, 108, 169, 154, 253, 32, 240, 53, 172, 173, 173, 80, 45, 123, 27, 113, 120, 11, 135, 60, 30, 61, 196, 90, 33, 100, 228, 155, 211, 106, 154, 33, 15, 66, 2, 127, 47, 193, 119, 70, 86, 18, 195, 188, 180, 146, 170, 151, 204, 224, 35, 239, 135, 162, 149, 18, 23, 85, 72, 177, 68, 20, 233, 180, 40, 214, 85, 226, 224, 75, 130, 51, 17, 214, 67, 167, 250, 203, 194, 107, 20, 179, 242, 60, 82, 185, 42, 160, 118, 138, 127, 30, 189, 22, 207, 215, 162, 26, 131, 171, 22, 90, 198, 0, 143, 61, 218, 207, 71, 38, 112, 58, 163, 55, 147, 245, 152, 5, 91, 120, 239, 1, 218, 122, 255, 115, 255, 14, 169, 128, 101, 176, 31, 191, 245, 245, 114, 210, 74, 154, 72, 152, 0, 22, 125, 178, 82, 125, 119, 168, 47, 239, 192, 134, 63, 152, 144, 169, 31, 93, 253, 213, 41, 48, 184, 190, 161, 70, 242, 19, 229, 25, 203, 186, 94, 115, 246, 158, 138, 135, 177, 86, 16, 113, 245, 176, 23, 182, 139, 94, 83, 35, 28, 232, 19, 231, 97, 197, 64, 190, 88, 104, 30, 215, 41, 63, 113, 234, 186, 155, 197, 46, 141, 37, 39, 111, 42, 85, 143, 29, 46, 122, 186, 233, 15, 221, 151, 232, 27, 196, 52, 193, 31, 208, 240, 125, 162, 218, 70, 20, 96, 87, 30, 112, 241, 163, 110, 179, 140, 225, 197, 147, 58, 117, 145, 222, 137, 57, 26, 86, 117, 217, 240, 85, 215, 13, 148, 250, 65, 230, 204, 4, 146, 119, 44, 184, 204, 36, 21, 213, 247, 182, 204, 191, 0, 138, 68, 189, 35, 119, 216, 188, 59, 195, 38, 129, 76, 82, 58, 170, 32, 225, 210, 20, 98, 111, 122, 172, 251, 58, 145, 170, 249, 150, 20, 72, 97, 48, 176, 100, 178, 180, 153, 182, 6, 173, 222, 170, 234, 231, 197, 237, 65, 161, 47, 35, 125, 159, 123, 168, 68, 90, 106, 97, 248, 18, 49, 21, 150, 175, 86, 245, 147, 238, 219, 221, 20, 124, 39, 109, 95, 42, 122, 24, 25, 191, 33, 69, 2, 123, 225, 202, 87, 3, 43, 149, 205, 179, 75, 173, 139, 74, 24, 63, 216, 67, 159, 49, 208, 159, 251, 51, 25, 31, 139, 76, 154, 134, 16, 5, 132, 246, 84, 23, 68, 9, 171, 51, 52, 39, 218, 238, 57, 98, 85, 229, 106, 176, 84, 50, 214, 99, 249, 95, 199, 46, 220, 187, 39, 230, 161, 136, 232, 183, 125, 69, 153, 194, 174, 189, 37, 3, 36, 194, 101, 58, 125, 228, 46, 186, 197, 184, 149, 200, 244, 236, 101, 45, 253, 136, 161, 207, 50, 61, 123, 133, 248, 206, 125, 195, 102, 191, 147, 112, 211, 30, 185, 100, 182, 50, 206, 154, 55, 22, 56, 225, 9, 77, 11, 202, 29, 157, 103, 115, 228, 143, 246, 242, 202, 55, 209, 131, 198, 248, 161, 128, 127, 125, 136, 126, 90, 6, 222, 73, 131, 66, 128, 39, 31, 248, 229, 126, 243, 209, 236, 238, 170, 57, 253, 4, 255, 51, 8, 255, 197, 2, 80, 4, 118, 170, 181, 43, 84, 172, 47, 209, 106, 132, 96, 117, 129, 194, 160, 208, 233, 86, 205, 235, 201, 165, 82, 69, 36, 217, 236, 207, 123, 55, 84, 63, 78, 216, 51, 17, 43, 97, 73, 61, 155, 51, 98, 19, 110, 59, 252, 144, 29, 33, 106, 52, 58, 81, 29, 130, 103, 74, 34, 25, 49, 125, 208, 88, 199, 86, 179, 185, 127, 15, 197, 71, 173, 70, 182, 30, 1, 68, 187, 80, 46, 220, 52, 17, 90, 16, 102, 194, 40, 42, 226, 148, 104, 119, 204, 230, 115, 104, 123, 242, 250, 19, 83, 248, 223, 25, 108, 164, 125, 123, 49, 238, 73, 135, 181, 244, 115, 113, 151, 210, 75, 92, 19, 168, 70, 229, 172, 190, 71, 48, 28, 170, 215, 33, 171, 183, 3, 188, 36, 208, 180, 13, 64, 47, 232, 214, 37, 215, 146, 89, 173, 34, 99, 166, 89, 250, 162, 40, 166, 30, 92, 5, 80, 170, 32, 221, 14, 245, 240, 90, 78, 217, 92, 172, 176, 107, 101, 70, 250, 43, 166, 66, 95, 109, 32, 176, 96, 229, 97, 130, 96, 170, 164, 5, 235, 182, 241, 201, 210, 128, 15, 127, 131, 123, 179, 161, 197, 61, 179, 39, 245, 61, 21, 93, 88, 190, 233, 124, 46, 196, 45, 76, 217, 236, 34, 157, 224, 128, 49, 11, 124, 242, 7, 98, 149, 65, 56, 166, 89, 139, 249, 0, 149, 121, 30, 9, 141, 115, 190, 13, 183, 112, 78, 38, 214, 94, 144, 253, 236, 71, 151, 146, 108, 103, 131, 90, 219, 14, 93, 168, 22, 10, 156, 148, 48, 103, 175, 179, 108, 225, 152, 237, 81, 87, 106, 13, 181, 81, 71, 169, 223, 134, 153, 151, 72, 126, 59, 163, 15, 66, 114, 229, 52, 115, 159, 101, 170, 96, 61, 79, 205, 93, 192, 241, 219, 161, 193, 31, 189, 63, 181, 33, 210, 198, 75, 36, 65, 29, 80, 3, 55, 137, 100, 227, 32, 52, 11, 81, 232, 17, 65, 143, 180, 118, 117, 80, 42, 201, 8, 145, 84, 14, 220, 104, 53, 207, 77, 100, 26, 85, 79, 54, 198, 153, 217, 17, 197, 181, 100, 217, 86, 118, 253, 183, 101, 112, 158, 51, 116, 26, 216, 180, 180, 200, 111, 214, 48, 19, 225, 159, 132, 123, 70, 202, 96, 97, 158, 42, 141, 179, 39, 76, 97, 115, 40, 221, 236, 174, 151, 107, 48, 122, 147, 148, 42, 102, 255, 121, 192, 63, 78, 252, 15, 166, 77, 21, 215, 52, 253, 153, 73, 155, 125, 56, 218, 127, 54, 102, 36, 8, 80, 72, 233, 25, 65, 136, 85, 246, 25, 84, 154, 199, 39, 60, 249, 72, 7, 222, 136, 107, 47, 232, 211, 39, 32, 182, 164, 213, 254, 235, 158, 60, 74, 95, 2, 184, 173, 21, 167, 93, 30, 32, 207, 163, 111, 115, 30, 155, 209, 41, 112, 135, 65, 11, 145, 66, 251, 16, 198, 149, 168, 181, 92, 181, 212, 245, 11, 127, 91, 221, 146, 50, 67, 247, 15, 219, 51, 26, 199, 7, 29, 91, 29, 185, 183, 187, 109, 245, 224, 175, 226, 141, 28, 150, 252, 117, 27, 46, 134, 156, 208, 3, 191, 179, 95, 210, 128, 213, 51, 98, 63, 160, 117, 192, 20, 146, 185, 215, 102, 118, 122, 118, 153, 203, 141, 137, 207, 212, 68, 138, 63, 1, 190, 209, 240, 111, 201, 211, 169, 241, 230, 249, 34, 86, 166, 132, 23, 138, 16, 207, 29, 95, 206, 203, 37, 62, 170, 244, 112, 224, 116, 240, 182, 131, 200, 191, 12, 40, 160, 1, 129, 123, 164, 175, 222, 147, 121, 163, 197, 71, 19, 11, 98, 183, 129, 117, 101, 107, 156, 103, 174, 255, 143, 107, 70, 103, 180, 92, 9, 159, 74, 166, 80, 54, 159, 210, 120, 90, 234, 217, 114, 17, 27, 61, 143, 19, 251, 74, 162, 71, 247, 122, 171, 98, 111, 117, 96, 52, 94, 20, 84, 118, 94, 175, 248, 247, 142, 216, 16, 172, 76, 198, 109, 1, 229, 157, 157, 16, 117, 173, 145, 113, 168, 11, 56, 231, 76, 184, 66, 35, 10, 8, 205, 123, 14, 8, 70, 169, 101, 36, 207, 80, 216, 46, 36, 235, 60, 16, 108, 80, 49, 246, 158, 219, 181, 123, 163, 130, 148, 74, 31, 183, 4, 71, 225, 181, 199, 175, 13, 195, 88, 101, 102, 35, 205, 25, 127, 86, 167, 255, 107, 26, 63, 135, 136, 201, 106, 244, 207, 44, 20, 176, 136, 106, 55, 255, 55, 5, 71, 207, 3, 234, 107, 43, 30, 161, 110, 237, 161, 208, 92, 179, 10, 255, 171, 33, 211, 25, 159, 75, 58, 166, 237, 106, 132, 165, 138, 234, 25, 45, 186, 8, 9, 36, 120, 207, 48, 51, 86, 61, 17, 148, 100, 73, 117, 215, 189, 129, 186, 57, 135, 62, 88, 57, 190, 207, 38, 112, 72, 119, 121, 69, 141, 158, 94, 30, 30, 96, 244, 237, 190, 190, 37, 65, 234, 96, 28, 23, 16, 143, 155, 28, 90, 160, 153, 141, 62, 82, 66, 5, 187, 248, 21, 19, 58, 76, 227, 119, 177, 114, 222, 58, 183, 99, 55, 155, 179, 38, 53, 125, 104, 243, 46, 77, 58, 54, 225, 111, 8, 230, 248, 188, 187, 215, 254, 222, 37, 49, 204, 121, 103, 0, 232, 50, 163, 73, 232, 184, 175, 139, 27, 55, 54, 168, 13, 23, 121, 138, 54, 185, 183, 145, 192, 85, 225, 115, 127, 118, 11, 198, 123, 35, 24, 93, 45, 10, 59, 243, 183, 107, 160, 22, 172, 97, 147, 103, 3, 32, 104, 204, 121, 82, 64, 37, 62, 98, 87, 67, 234, 182, 33, 247, 69, 131, 249, 76, 216, 147, 5, 86, 148, 35, 128, 13, 178, 124, 75, 6, 54, 189, 240, 18, 183, 247, 5, 234, 146, 224, 140, 44, 241, 233, 34, 98, 147, 65, 169, 224, 76, 211, 141, 112, 165, 191, 252, 43, 20, 245, 84, 19, 215, 98, 201, 72, 103, 214, 134, 212, 71, 224, 202, 191, 183, 23, 202, 23, 90, 23, 221, 47, 38, 161, 253, 2, 83, 159, 83, 198, 156, 151, 129, 144, 175, 211, 9, 153, 26, 97, 108, 39, 49, 96, 244, 194, 217, 191, 124, 54, 183, 143, 192, 140, 51, 87, 80, 20, 174, 74, 46, 229, 78, 58, 119, 202, 124, 0, 94, 2, 141, 175, 44, 8, 127, 228, 103, 113, 203, 233, 93, 189, 54, 86, 124, 179, 51, 252, 87, 101, 252, 253, 90, 15, 224, 231, 171, 48, 175, 118, 91, 78, 60, 109, 71, 203, 79, 60, 177, 82, 89, 164, 108, 242, 77, 173, 122, 121, 100, 211, 154, 57, 39, 188, 35, 205, 55, 232, 233, 226, 119, 162, 244, 36, 31, 73, 187, 141, 110, 108, 208, 169, 117, 151, 212, 39, 123, 225, 241, 19, 195, 31, 167, 115, 23, 161, 221, 132, 77, 53, 58, 104, 36, 51, 57, 154, 54, 203, 59, 30, 83, 52, 200, 95, 240, 245, 35, 115, 177, 232, 66, 37, 47, 148, 129, 155, 155, 159, 229, 56, 75, 241, 40, 194, 227, 86, 50, 218, 48, 19, 153, 144, 91, 126, 188, 30, 88, 4, 98, 194, 133, 139, 38, 51, 189, 222, 107, 145, 97, 238, 197, 254, 233, 202, 96, 24, 73, 171, 170, 222, 38, 42, 63, 143, 130, 106, 16, 54, 13, 184, 0, 8, 169, 11, 250, 0, 183, 168, 141, 46, 185, 247, 34, 94, 227, 37, 79, 214, 231, 110, 156, 47, 187, 67, 33, 10, 46, 29, 58, 117, 80, 157, 186, 223, 233, 92, 70, 93, 183, 130, 94, 143, 183, 38, 66, 170, 43, 116, 246, 23, 124, 65, 164, 122, 118, 193, 114, 103, 51, 158, 78, 145, 229, 101, 56, 15, 149, 120, 60, 48, 3, 206, 16, 147, 239, 92, 196, 236, 198, 197, 54, 241, 46, 64, 121, 71, 230, 1, 149, 209, 113, 182, 186, 201, 189, 42, 251, 14, 88, 164, 39, 87, 198, 162, 48, 221, 128, 18, 205, 112, 251, 117, 82, 202, 57, 211, 252, 155, 136, 37, 165, 133, 219, 36, 40, 178, 249, 177, 79, 116, 140, 8, 18, 28, 165, 89, 249, 15, 122, 35, 220, 212, 229, 142, 196, 66, 74, 185, 97, 223, 112, 124, 127, 36, 185, 9, 0, 2, 133, 47, 237, 251, 148, 199, 16, 17, 82, 42, 254, 154, 84, 136, 214, 123, 101, 178, 246, 240, 223, 12, 37, 253, 214, 31, 127, 161, 205, 160, 228, 249, 232, 176, 145, 193, 104, 223, 76, 143, 217, 27, 131, 220, 20, 253, 74, 27, 33, 173, 226, 156, 197, 172, 153, 164, 206, 173, 31, 11, 240, 251, 246, 164, 197, 173, 95, 37, 27, 64, 11, 127, 174, 117, 237, 180, 189, 71, 141, 211, 146, 32, 242, 140, 59, 8, 136, 234, 215, 20, 7, 124, 229, 196, 179, 214, 55, 81, 133, 193, 184, 17, 151, 254, 98, 176, 71, 101, 141, 114, 37, 151, 251, 39, 166, 41, 54, 1, 67, 74, 185, 151, 218, 0, 174, 31, 238, 238, 57, 48, 70, 16, 50, 194, 124, 56, 248, 231, 163, 218, 29, 191, 136, 1, 97, 104, 246, 244, 129, 205, 113, 166, 129, 147, 82, 171, 21, 116, 181, 25, 187, 4, 226, 107, 6, 65, 238, 250, 38, 79, 230, 189, 195, 228, 129, 151, 87, 223, 68, 174, 243, 18, 78, 79, 121, 38, 217, 211, 228, 170, 217, 26, 128, 99, 246, 67, 66, 190, 168, 217, 9, 8, 102, 44, 187, 179, 171, 22, 187, 98, 188, 206, 44, 21, 42, 31, 69, 171, 174, 217, 72, 21, 9, 132, 151, 120, 231, 170, 195, 221, 143, 57, 173, 167, 220, 52, 37, 25, 151, 217, 118, 32, 50, 56, 97, 211, 2, 95, 52, 124, 222, 47, 214, 71, 135, 22, 143, 177, 89, 108, 85, 181, 251, 99, 50, 37, 225, 122, 10, 139, 248, 168, 61, 187, 93, 213, 124, 12, 166, 209, 48, 172, 236, 252, 193, 130, 17, 148, 224, 189, 72, 67, 194, 133, 79, 113, 241, 165, 154, 223, 173, 219, 170, 144, 83, 197, 110, 23, 201, 11, 19, 144, 77, 181, 221, 17, 117, 99, 72, 224, 156, 189, 203, 125, 218, 164, 94, 17, 68, 184, 181, 102, 56, 142, 67, 246, 26, 80, 130, 248, 77, 141, 12, 36, 24, 242, 13, 192, 170, 60, 242, 70, 168, 8, 82, 145, 155, 129, 239, 86, 120, 101, 119, 117, 180, 187, 58, 80, 227, 48, 66, 29, 40, 144, 248, 179, 117, 124, 48, 208, 218, 235, 139, 29, 69, 69, 140, 90, 200, 179, 80, 109, 25, 13, 213, 192, 180, 33, 187, 89, 132, 166, 14, 249, 137, 28, 49, 95, 70, 134, 205, 149, 159, 53, 222, 179, 253, 146, 33, 17, 142, 61, 108, 209, 208, 184, 227, 146, 70, 164, 239, 76, 19, 98, 192, 143, 3, 41, 220, 186, 246, 136, 48, 12, 253, 228, 119, 145, 86, 143, 165, 113, 188, 41, 219, 246, 108, 79, 20, 108, 84, 192, 74, 75, 77, 34, 86, 114, 241, 27, 112, 205, 223, 142, 13, 212, 224, 241, 143, 223, 29, 84, 70, 248, 145, 90, 23, 175, 242, 4, 189, 60, 195, 111, 82, 42, 167, 200, 88, 212, 69, 134, 27, 244, 149, 142, 28, 146, 217, 119, 219, 244, 173, 119, 176, 55, 17, 21, 50, 234, 252, 223, 48, 123, 112, 37, 26, 230, 53, 116, 153, 161, 55, 79, 178, 118, 213, 116, 208, 39, 96, 147, 5, 27, 70, 109, 143, 196, 57, 230, 55, 169, 161, 95, 13, 193, 18, 117, 223, 147, 2, 223, 99, 170, 68, 115, 72, 165, 53, 251, 189, 31, 252, 218, 96, 112, 51, 230, 223, 144, 16, 243, 127, 222, 108, 211, 84, 247, 60, 176, 245, 168, 196, 74, 39, 206, 25, 43, 89, 164, 142, 247, 122, 24, 153, 129, 206, 115, 128, 26, 17, 207, 162, 102, 178, 97, 38, 147, 62, 134, 33, 154, 43, 76, 113, 33, 149, 40, 19, 73, 217, 133, 10, 196, 251, 117, 159, 6, 82, 221, 189, 152, 118, 12, 71, 98, 186, 177, 196, 244, 113, 158, 87, 191, 104, 186, 76, 37, 86, 224, 121, 24, 159, 79, 246, 191, 200, 69, 187, 240, 209, 90, 53, 144, 128, 221, 187, 121, 23, 5, 118, 162, 170, 95, 167, 3, 54, 54, 211, 76, 179, 64, 61, 149, 218, 175, 232, 247, 166, 97, 170, 182, 6, 246, 82, 202, 108, 222, 30, 97, 0, 219, 50, 0, 206, 95, 106, 84, 168, 203, 169, 141, 217, 80, 157, 193, 13, 79, 145, 220, 234, 148, 102, 215, 159, 243, 144, 142, 79, 29, 250, 247, 228, 201, 110, 206, 98, 100, 222, 188, 76, 185, 113, 196, 121, 248, 186, 3, 243, 179, 101, 140, 225, 255, 49, 143, 202, 112, 213, 84, 161, 61, 88, 172, 157, 244, 91, 202, 240, 98, 1, 37, 200, 11, 79, 167, 152, 236, 84, 102, 228, 132, 181, 173, 108, 77, 165, 60, 10, 185, 174, 161, 170, 95, 13, 97, 247, 103, 32, 191, 242, 3, 244, 117, 227, 48, 39, 111, 58, 170, 114, 12, 25, 146, 35, 150, 218, 104, 174, 234, 202, 120, 233, 17, 121, 118, 41, 231, 175, 95, 248, 17, 214, 185, 9, 212, 177, 240, 98, 248, 47, 88, 35, 155, 98, 180, 110, 59, 86, 216, 125, 91, 49, 92, 116, 251, 98, 168, 243, 247, 135, 196, 201, 158, 72, 140, 116, 231, 106, 86, 169, 91, 0, 187, 216, 134, 204, 139, 253, 49, 48, 80, 98, 248, 8, 147, 94, 69, 108, 55, 74, 132, 207, 214, 69, 23, 50, 68, 6, 95, 177, 201, 223, 40, 136, 227, 51, 208, 158, 36, 132, 111, 112, 175, 133, 254, 94, 95, 168, 137, 23, 61, 77, 233, 115, 11, 24, 88, 239, 130, 162, 35, 56, 204, 80, 183, 31, 226, 33, 46, 36, 98, 76, 44, 86, 39, 226, 47, 141, 181, 169, 218, 194, 34, 91, 111, 205, 110, 133, 48, 118, 199, 60, 126, 85, 14, 255, 174, 95, 107, 235, 40, 121, 99, 156, 25, 93, 96, 53, 232, 220, 238, 181, 172, 17, 104, 32, 122, 97, 254, 135, 99, 129, 94, 100, 207, 8, 118, 207, 81, 32, 108, 53, 100, 56, 215, 18, 10, 51, 30, 159, 88, 161, 70, 89, 18, 240, 145, 11, 89, 197, 190, 25, 66, 98, 157, 216, 165, 200, 23, 238, 133, 80, 178, 28, 89, 84, 87, 255, 13, 164, 104, 146, 39, 241, 160, 252, 67, 93, 120, 66, 154, 187, 165, 218, 54, 90, 43, 66, 161, 213, 153, 105, 30, 18, 244, 33, 141, 118, 91, 230, 24, 108, 94, 114, 142, 65, 34, 67, 9, 50, 210, 38, 242, 173, 137, 226, 94, 245, 48, 229, 63, 177, 2, 238, 37, 171, 210, 91, 218, 68, 243, 255, 227, 38, 158, 249, 36, 161, 37, 233, 86, 71, 208, 241, 176, 116, 162, 205, 237, 138, 76, 165, 213, 194, 236, 191, 178, 1, 220, 230, 67, 226, 212, 182, 104, 37, 128, 1, 37, 230, 65, 162, 119, 8, 229, 204, 85, 207, 141, 67, 39, 228, 24, 54, 136, 145, 22, 245, 120, 110, 62, 108, 72, 76, 48, 69, 148, 196, 188, 239, 96, 210, 106, 74, 179, 112, 0, 98, 95, 99, 121, 151, 15, 123, 219, 107, 52, 85, 120, 40, 50, 144, 4, 98, 110, 24, 183, 161, 207, 227, 135, 207, 48, 177, 87, 0, 173, 243, 187, 87, 230, 121, 179, 22, 151, 239, 118, 182, 175, 214, 104, 120, 56, 99, 106, 20, 115, 8, 228, 223, 172, 93, 54, 20, 82, 134, 25, 231, 92, 109, 169, 84, 250, 247, 36, 252, 131, 187, 187, 111, 188, 91, 206, 134, 54, 37, 180, 233, 194, 243, 65, 34, 238, 47, 125, 140, 140, 26, 42, 48, 222, 152, 51, 117, 126, 117, 174, 188, 93, 129, 125, 155, 15, 224, 179, 98, 185, 98, 18, 150, 93, 210, 184, 32, 19, 238, 106, 172, 61, 193, 188, 190, 227, 235, 117, 161, 237, 109, 188, 32, 92, 97, 110, 166, 67, 61, 173, 100, 89, 84, 90, 113, 44, 151, 126, 189, 245, 233, 96, 144, 205, 28, 222, 217, 63, 191, 234, 158, 77, 147, 159, 149, 54, 137, 63, 21, 154, 30, 16, 245, 103, 171, 254, 6, 14, 219, 54, 186, 117, 30, 206, 212, 15, 219, 198, 227, 24, 228, 242, 223, 22, 247, 131, 60, 172, 68, 179, 44, 87, 20, 82, 253, 148, 219, 135, 107, 60, 46, 159, 153, 56, 64, 54, 49, 10, 121, 12, 151, 223, 209, 233, 214, 155, 207, 196, 225, 102, 40, 186, 20, 72, 60, 80, 179, 180, 37, 63, 59, 123, 30, 189, 44, 170, 72, 156, 231, 236, 69, 146, 12, 176, 82, 173, 6, 173, 71, 129, 126, 237, 24, 145, 147, 74, 221, 80, 240, 204, 124, 64, 196, 239, 110, 220, 64, 27, 194, 77, 211, 103, 150, 149, 194, 12, 30, 238, 170, 35, 40, 72, 133, 141, 153, 50, 177, 110, 218, 62, 133, 121, 74, 212, 83, 246, 50, 40, 32, 181, 89, 4, 242, 108, 217, 218, 246, 65, 19, 163, 169, 93, 142, 198, 21, 117, 210, 135, 24, 243, 212, 92, 162, 222, 198, 157, 215, 176, 140, 157, 42, 174, 193, 119, 193, 40, 117, 226, 43, 160, 107, 137, 87, 83, 121, 239, 214, 20, 134, 157, 9, 85, 39, 82, 138, 236, 20, 46, 95, 255, 197, 145, 135, 222, 38, 199, 146, 74, 8, 229, 122, 178, 194, 76, 177, 31, 18, 186, 228, 146, 113, 207, 236, 106, 32, 222, 167, 56, 1, 150, 152, 106, 142, 145, 219, 114, 107, 235, 200, 220, 4, 191, 1, 124, 194, 138, 235, 89, 147, 153, 75, 126, 190, 21, 184, 180, 78, 45, 53, 3, 62, 114, 37, 251, 113, 252, 180, 198, 201, 76, 81, 105, 246, 220, 66, 164, 111, 32, 141, 113, 82, 146, 15, 64, 207, 18, 113, 203, 219, 46, 63, 81, 46, 67, 237, 78, 202, 73, 212, 194, 76, 23, 86, 19, 236, 127, 90, 242, 148, 27, 200, 105, 210, 252, 99, 104, 180, 189, 208, 61, 39, 126, 201, 100, 190, 221, 94, 218, 123, 234, 208, 254, 231, 193, 151, 80, 34, 214, 86, 54, 94, 248, 239, 76, 234, 83, 88, 34, 23, 202, 157, 43, 6, 67, 186, 196, 252, 88, 76, 239, 149, 233, 75, 129, 37, 155, 181, 138, 208, 233, 185, 225, 180, 130, 224, 220, 72, 201, 93, 150, 12, 157, 77, 148, 201, 179, 67, 51, 57, 146, 74, 128, 101, 137, 82, 195, 11, 210, 132, 16, 193, 39, 55, 114, 81, 106, 143, 161, 128, 55, 8, 35, 223, 28, 170, 182, 235, 106, 112, 168, 131, 91, 87, 92, 190, 224, 18, 128, 3, 42, 181, 201, 122, 53, 29, 11, 132, 138, 48, 217, 106, 234, 207, 237, 232, 161, 19, 24, 57, 213, 28, 139, 152, 33, 153, 89, 192, 7, 27, 7, 34, 56, 131, 200, 214, 80, 158, 219, 80, 17, 95, 175, 191, 108, 166, 197, 125, 168, 178, 46, 25, 251, 17, 223, 157, 103, 242, 243, 19, 104, 121, 195, 244, 55, 140, 196, 155, 84, 176, 237, 153, 158, 177, 81, 30, 131, 113, 237, 169, 236, 87, 117, 218, 73, 106, 137, 76, 86, 175, 52, 106, 66, 225, 69, 217, 245, 43, 26, 112, 87, 134, 63, 89, 226, 201, 31, 237, 59, 16, 227, 6, 78, 121, 183, 238, 79, 31, 145, 174, 87, 191, 106, 109, 44, 136, 209, 26, 154, 219, 85, 62, 69, 34, 34, 153, 73, 0, 254, 136, 37, 200, 52, 72, 242, 255, 49, 23, 60, 139, 229, 146, 153, 153, 9, 209, 88, 195, 110, 13, 131, 105, 236, 95, 67, 190, 186, 60, 186, 134, 183, 180, 46, 139, 238, 108, 94, 29, 132, 80, 153, 41, 254, 233, 227, 60, 111, 220, 152, 158, 42, 166, 170, 6, 147, 170, 171, 37, 148, 217, 137, 168, 213, 188, 219, 245, 246, 227, 148, 59, 138, 68, 38, 64, 147, 84, 118, 135, 184, 187, 143, 53, 8, 124, 153, 12, 244, 97, 254, 49, 88, 146, 65, 99, 230, 82, 80, 56, 178, 150, 213, 161, 183, 223, 204, 141, 168, 222, 185, 81, 41, 22, 67, 114, 123, 119, 250, 205, 217, 78, 214, 70, 84, 216, 89, 124, 142, 164, 109, 154, 195, 136, 228, 239, 68, 205, 209, 43, 236, 4, 112, 91, 92, 53, 33, 142, 228, 0, 239, 250, 185, 105, 123, 93, 224, 193, 103, 127, 0, 153, 207, 160, 1, 3, 231, 198, 206, 95, 208, 36, 93, 151, 47, 50, 86, 220, 203, 95, 11, 32, 98, 193, 119, 188, 171, 115, 183, 29, 247, 64, 56, 157, 154, 65, 132, 129, 156, 150, 178, 18, 2, 254, 213, 67, 16, 204, 210, 86, 199, 161, 143, 130, 136, 135, 101, 87, 195, 170, 1, 110, 53, 13, 110, 148, 145, 85, 157, 199, 124, 131, 240, 73, 190, 55, 216, 14, 188, 128, 104, 37, 248, 169, 163, 191, 45, 101, 81, 134, 51, 227, 145, 29, 2, 95, 14, 37, 114, 153, 74, 227, 144, 169, 19, 14, 97, 242, 87, 51, 232, 48, 254, 78, 40, 34, 153, 151, 186, 93, 2, 169, 220, 164, 206, 189, 116, 185, 178, 183, 168, 181, 248, 249, 35, 42, 137, 136, 153, 222, 243, 26, 20, 69, 0, 13, 242, 140, 119, 181, 187, 201, 7, 137, 158, 22, 161, 167, 3, 227, 250, 68, 177, 41, 107, 195, 206, 6, 100, 47, 225, 155, 21, 106, 253, 71, 133, 146, 31, 209, 58, 185, 143, 253, 130, 168, 143, 235, 136, 112, 67, 123, 234, 113, 34, 51, 48, 161, 130, 213, 61, 124, 245, 69, 9, 154, 150, 231, 48, 31, 205, 40, 38, 54, 92, 180, 109, 121, 130, 187, 34, 97, 194, 16, 2, 53, 42, 26, 175, 242, 233, 29, 248, 216, 33, 184, 178, 165, 61, 147, 250, 236, 56, 164, 71, 211, 95, 195, 234, 181, 249, 131, 118, 218, 156, 94, 73, 120, 138, 241, 147, 62, 124, 93, 95, 168, 126, 199, 129, 188, 29, 23, 157, 201, 7, 215, 168, 128, 171, 128, 110, 76, 223, 157, 229, 35, 150, 145, 196, 222, 165, 104, 206, 250, 236, 249, 4, 194, 107, 224, 105, 91, 185, 76, 70, 104, 96, 104, 36, 243, 54, 187, 236, 240, 21, 66, 43, 109, 14, 122, 39, 92, 74, 154, 16, 63, 6, 45, 35, 98, 38, 17, 147, 132, 182, 67, 163, 60, 60, 97, 97, 143, 47, 19, 74, 244, 248, 125, 227, 84, 69, 94, 209, 235, 109, 113, 224, 254, 137, 82, 94, 175, 125, 107, 28, 244, 135, 43, 18, 12, 200, 51, 85, 8, 83, 229, 109, 238, 79, 79, 227, 108, 72, 7, 165, 235, 185, 116, 84, 123, 145, 140, 73, 85, 237, 186, 101, 137, 56, 68, 190, 162, 16, 51, 236, 170, 208, 8, 92, 251, 176, 103, 154, 68, 18, 214, 172, 92, 41, 188, 105, 226, 109, 221, 88, 224, 13, 15, 36, 216, 100, 80, 0, 172, 218, 45, 156, 154, 44, 4, 152, 199, 28, 146, 24, 3, 193, 117, 119, 42, 66, 58, 3, 0, 253, 235, 253, 102, 155, 179, 226, 82, 241, 208, 151, 23, 153, 94, 157, 130, 118, 156, 227, 95, 62, 235, 209, 179, 44, 71, 234, 120, 188, 228, 35, 79, 61, 121, 33, 11, 12, 134, 75, 117, 65, 97, 208, 37, 209, 191, 156, 2, 39, 245, 110, 59, 9, 41, 219, 17, 68, 101, 103, 155, 66, 75, 33, 65, 217, 120, 8, 222, 166, 244, 20, 113, 111, 89, 121, 103, 138, 11, 203, 208, 223, 223, 125, 115, 185, 93, 198, 176, 247, 227, 240, 135, 172, 168, 171, 85, 232, 95, 199, 163, 235, 182, 144, 110, 202, 226, 219, 121, 41, 223, 76, 186, 19, 184, 54, 246, 10, 217, 33, 28, 158, 156, 197, 157, 47, 10, 103, 58, 88, 134, 213, 155, 200, 84, 136, 112, 196, 45, 120, 230, 190, 187, 96, 95, 234, 73, 86, 60, 17, 82, 179, 107, 81, 224, 254, 134, 55, 123, 22, 106, 168, 101, 45, 172, 182, 84, 240, 223, 91, 134, 1, 53, 150, 196, 129, 230, 120, 101, 119, 99, 177, 28, 164, 178, 31, 91, 134, 176, 60, 234, 207, 122, 26, 110, 165, 172, 139, 124, 229, 154, 249, 12, 114, 45, 37, 113, 182, 183, 6, 55, 173, 179, 34, 187, 183, 121, 134, 106, 54, 97, 107, 125, 21, 179, 83, 3, 147, 73, 56, 187, 193, 171, 121, 40, 118, 66, 146, 52, 213, 1, 52, 68, 108, 244, 36, 23, 49, 62, 209, 14, 106, 64, 70, 84, 155, 141, 77, 32, 140, 183, 85, 181, 75, 46, 108, 131, 254, 14, 167, 236, 211, 52, 6, 24, 92, 50, 211, 237, 136, 180, 186, 154, 7, 212, 98, 59, 195, 83, 27, 26, 6, 161, 174, 194, 46, 75, 201, 100, 93, 136, 179, 52, 132, 208, 141, 184, 25, 31, 90, 4, 153, 23, 150, 197, 163, 244, 135, 255, 14, 121, 138, 100, 199, 130, 245, 240, 120, 234, 242, 98, 106, 235, 137, 52, 245, 185, 5, 149, 253, 22, 182, 126, 228, 150, 226, 94, 92, 184, 215, 166, 207, 106, 160, 15, 182, 89, 223, 221, 68, 126, 4, 31, 73, 184, 189, 241, 103, 172, 223, 243, 130, 211, 35, 145, 42, 33, 16, 122, 148, 231, 9, 42, 173, 152, 45, 15, 242, 231, 109, 137, 102, 48, 124, 200, 144, 220, 80, 45, 128, 247, 114, 124, 192, 8, 49, 31, 120, 230, 77, 137, 66, 245, 239, 53, 225, 178, 176, 108, 147, 207, 226, 120, 42, 24, 142, 221, 71, 229, 174, 212, 84, 80, 98, 45, 48, 253, 166, 160, 169, 69, 176, 93, 72, 178, 69, 79, 235, 17, 247, 136, 248, 106, 195, 15, 155, 135, 68, 226, 167, 1, 142, 106, 245, 178, 67, 151, 53, 162, 7, 118, 17, 158, 117, 190, 138, 89, 165, 193, 75, 244, 164, 109, 15, 57, 102, 79, 224, 77, 32, 84, 42, 241, 41, 177, 175, 31, 27, 166, 117, 131, 19, 182, 46, 188, 72, 215, 132, 47, 11, 47, 249, 219, 235, 101, 215, 92, 51, 206, 253, 248, 48, 216, 65, 85, 88, 133, 87, 123, 21, 244, 12, 26, 28, 107, 28, 116, 24, 214, 234, 65, 214, 102, 171, 7, 170, 14, 38, 131, 26, 209, 50, 201, 28, 149, 191, 115, 143, 97, 87, 253, 234, 193, 102, 94, 163, 12, 222, 134, 238, 83, 79, 140, 22, 190, 37, 138, 151, 154, 158, 115, 0, 139, 190, 180, 113, 62, 79, 168, 126, 213, 156, 44, 90, 67, 57, 242, 14, 194, 52, 170, 146, 105, 69, 172, 218, 224, 172, 180, 40, 254, 60, 215, 188, 24, 12, 139, 84, 89, 6, 7, 215, 81, 93, 19, 206, 125, 164, 127, 133, 242, 122, 111, 9, 101, 16, 169, 236, 244, 238, 234, 11, 188, 0, 174, 181, 31, 252, 180, 177, 229, 80, 2, 162, 92, 227, 61, 95, 182, 167, 205, 227, 255, 216, 126, 192, 56, 116, 59, 147, 36, 189, 80, 192, 94, 31, 168, 224, 72, 217, 22, 219, 106, 168, 146, 113, 50, 89, 125, 12, 167, 205, 118, 24, 202, 50, 223, 204, 46, 29, 112, 46, 179, 122, 182, 219, 14, 143, 74, 191, 12, 164, 196, 169, 154, 47, 35, 200, 146, 71, 10, 164, 126, 150, 109, 142, 17, 106, 176, 157, 165, 49, 5, 130, 44, 195, 9, 244, 137, 165, 46, 130, 89, 252, 10, 169, 21, 166, 157, 30, 254, 21, 90, 2, 96, 254, 172, 28, 128, 249, 176, 113, 96, 49, 126, 35, 32, 187, 145, 84, 167, 92, 147, 221, 177, 120, 8, 37, 99, 52, 32, 87, 211, 235, 33, 140, 156, 194, 250, 223, 236, 16, 122, 179, 72, 18, 81, 194, 207, 65, 148, 93, 238, 120, 248, 44, 10, 196, 42, 110, 37, 54, 77, 120, 89, 208, 136, 15, 35, 93, 130, 249, 90, 55, 195, 236, 220, 194, 113, 89, 212, 209, 37, 177, 28, 22, 160, 66, 188, 109, 247, 13, 170, 122, 98, 234, 197, 244, 194, 79, 167, 159, 68, 27, 152, 216, 216, 159, 236, 227, 57, 50, 145, 30, 217, 159, 74, 229, 104, 39, 131, 133, 128, 214, 2, 222, 142, 23, 42, 72, 165, 149, 110, 192, 46, 211, 171, 99, 11, 176, 39, 170, 207, 148, 94, 155, 20, 19, 76, 232, 49, 214, 166, 120, 18, 58, 99, 228, 54, 145, 133, 174, 233, 199, 147, 192, 255, 156, 189, 50, 246, 74, 71, 174, 89, 8, 189, 218, 129, 159, 50, 63, 205, 35, 154, 82, 25, 42, 29, 99, 84, 57, 15, 164, 30, 86, 126, 14, 61, 48, 154, 2, 11, 173, 187, 140, 170, 1, 125, 87, 93, 167, 196, 165, 113, 222, 27, 232, 56, 11, 212, 140, 202, 123, 156, 236, 139, 225, 49, 14, 58, 108, 192, 65, 13, 133, 181, 152, 204, 140, 8, 190, 152, 31, 74, 181, 231, 247, 41, 246, 140, 71, 204, 37, 230, 248, 215, 88, 20, 186, 75, 148, 82, 66, 72, 169, 228, 63, 203, 180, 243, 186, 20, 57, 74, 223, 60, 239, 103, 159, 240, 45, 27, 185, 163, 107, 170, 222, 86, 181, 181, 46, 78, 121, 181, 51, 36, 67, 18, 176, 252, 113, 96, 88, 200, 64, 62, 185, 111, 86, 108, 31, 115, 43, 81, 129, 57, 59, 55, 10, 244, 77, 4, 196, 1, 227, 151, 170, 251, 11, 52, 89, 115, 128, 80, 165, 132, 248, 24, 74, 80, 50, 128, 113, 199, 148, 245, 243, 163, 181, 221, 124, 124, 22, 99, 239, 94, 15, 68, 216, 192, 79, 64, 84, 155, 0, 12, 22, 221, 208, 138, 112, 67, 244, 211, 214, 212, 231, 57, 141, 183, 236, 135, 7, 72, 25, 67, 210, 36, 232, 3, 166, 171, 32, 205, 172, 57, 19, 119, 140, 42, 122, 50, 92, 146, 175, 234, 115, 218, 221, 99, 232, 145, 25, 32, 232, 27, 69, 124, 42, 93, 253, 18, 59, 211, 145, 221, 59, 195, 56, 15, 35, 26, 38, 198, 27, 90, 143, 238, 26, 19, 188, 209, 231, 214, 55, 89, 172, 254, 31, 250, 87, 47, 148, 41, 123, 24, 177, 201, 117, 143, 235, 44, 32, 208, 118, 10, 179, 153, 87, 151, 116, 171, 178, 92, 208, 135, 214, 241, 125, 136, 113, 10, 255, 175, 114, 0, 116, 89, 169, 19, 120, 197, 24, 74, 50, 83, 136, 254, 49, 115, 185, 34, 215, 113, 37, 58, 175, 212, 126, 100, 216, 213, 222, 56, 221, 174, 165, 156, 193, 80, 250, 169, 67, 130, 108, 147, 56, 247, 64, 171, 175, 186, 254, 181, 146, 205, 190, 167, 82, 94, 164, 12, 60, 212, 216, 115, 11, 27, 103, 162, 238, 12, 16, 29, 209, 154, 123, 135, 130, 116, 60, 33, 110, 208, 77, 85, 139, 75, 146, 235, 206, 24, 36, 51, 253, 39, 52, 4, 103, 142, 158, 98, 206, 34, 101, 208, 100, 215, 49, 156, 53, 71, 30, 0, 103, 113, 241, 49, 104, 74, 129, 134, 229, 31, 76, 220, 106, 165, 178, 123, 180, 97, 19, 253, 189, 186, 72, 200, 107, 96, 198, 58, 92, 85, 109, 74, 123, 32, 148, 4, 140, 16, 177, 180, 94, 150, 62, 107, 59, 14, 123, 201, 114, 39, 27, 106, 232, 55, 10, 5, 31, 39, 102, 155, 37, 171, 34, 91, 167, 146, 186, 184, 144, 187, 245, 233, 50, 106, 97, 19, 21, 120, 210, 10, 122, 121, 109, 114, 213, 163, 67, 126, 172, 226, 10, 99, 183, 195, 12, 73, 195, 231, 87, 99, 216, 226, 189, 205, 64, 124, 174, 160, 73, 159, 89, 120, 104, 150, 228, 102, 146, 192, 204, 104, 133, 26, 169, 71, 49, 20, 28, 242, 141, 221, 208, 108, 160, 132, 168, 254, 139, 216, 194, 179, 145, 15, 253, 218, 46, 95, 89, 63, 40, 172, 178, 216, 191, 250, 114, 165, 27, 137, 105, 154, 38, 53, 155, 156, 186, 235, 212, 77, 0, 144, 103, 160, 19, 184, 148, 42, 109, 236, 157, 253, 203, 5, 211, 25, 104, 48, 225, 121, 144, 27, 120, 62, 7, 25, 78, 42, 46, 7, 228, 27, 22, 110, 17, 51, 126, 197, 231, 9, 134, 112, 73, 207, 191, 227, 126, 12, 196, 142, 132, 19, 133, 231, 29, 25, 147, 198, 38, 111, 75, 60, 128, 92, 68, 127, 226, 44, 106, 37, 172, 81, 84, 235, 243, 158, 246, 128, 191, 35, 200, 154, 27, 204, 111, 96, 234, 77, 242, 64, 219, 79, 215, 72, 93, 221, 251, 130, 206, 210, 156, 232, 248, 241, 18, 238, 133, 182, 145, 216, 90, 247, 213, 132, 87, 25, 4, 108, 71, 1, 129, 164, 133, 140, 67, 53, 251, 90, 140, 17, 115, 6, 120, 2, 224, 54, 238, 60, 157, 203, 111, 152, 73, 24, 117, 112, 93, 110, 144, 52, 15, 242, 93, 101, 208, 154, 22, 95, 37, 109, 245, 6, 80, 218, 79, 175, 151, 71, 11, 192, 223, 133, 217, 71, 22, 28, 54, 209, 45, 229, 147, 207, 235, 86, 176, 159, 51, 173, 113, 208, 70, 125, 232, 104, 138, 35, 69, 104, 175, 188, 209, 98, 177, 81, 54, 37, 111, 121, 219, 148, 179, 218, 195, 41, 33, 249, 103, 208, 160, 156, 240, 48, 187, 58, 159, 101, 230, 36, 189, 134, 85, 136, 201, 12, 222, 43, 96, 234, 191, 137, 169, 17, 222, 95, 88, 156, 134, 221, 224, 18, 208, 18, 114, 86, 159, 51, 192, 250, 59, 103, 193, 221, 206, 80, 10, 90, 191, 0, 175, 254, 150, 206, 2, 35, 84, 180, 22, 91, 141, 227, 77, 205, 103, 222, 43, 110, 136, 97, 56, 201, 64, 46, 203, 44, 163, 249, 33, 229, 239, 208, 39, 209, 185, 133, 199, 21, 146, 81, 105, 220, 201, 150, 138, 174, 29, 18, 189, 218, 28, 94, 62, 85, 1, 41, 215, 109, 100, 28, 120, 51, 3, 236, 27, 195, 92, 221, 89, 0, 133, 58, 201, 140, 129, 187, 170, 131, 116, 89, 252, 67, 89, 162, 80, 238, 44, 156, 129, 98, 48, 138, 248, 161, 94, 1, 33, 133, 9, 187, 2, 218, 239, 250, 210, 91, 106, 229, 147, 86, 194, 197, 157, 59, 47, 214, 186, 124, 98, 172, 207, 237, 100, 15, 161, 16, 132, 190, 12, 186, 131, 140, 248, 179, 6, 165, 122, 118, 175, 250, 225, 30, 174, 5, 61, 131, 216, 91, 34, 7, 81, 75, 141, 61, 224, 171, 27, 12, 152, 112, 246, 253, 74, 17, 25, 243, 67, 64, 159, 107, 154, 2, 143, 234, 187, 215, 100, 198, 191, 138, 12, 186, 54, 33, 242, 157, 63, 13, 236, 25, 140, 76, 150, 193, 73, 207, 210, 111, 122, 13, 91, 140, 224, 153, 75, 36, 138, 18, 86, 104, 193, 25, 254, 159, 192, 37, 198, 31, 102, 219, 178, 26, 95, 188, 190, 213, 174, 158, 186, 222, 184, 96, 255, 229, 51, 126, 24, 173, 144, 43, 1, 79, 130, 144, 85, 74, 182, 160, 21, 96, 234, 200, 66, 171, 181, 58, 130, 61, 157, 202, 109, 222, 186, 251, 207, 197, 41, 137, 7, 223, 56, 209, 100, 39, 170, 194, 233, 248, 185, 220, 181, 132, 157, 227, 195, 121, 9, 210, 151, 27, 170, 81, 79, 154, 10, 44, 148, 88, 206, 199, 79, 210, 192, 123, 147, 94, 97, 138, 253, 221, 132, 125, 8, 12, 123, 165, 23, 110, 127, 177, 222, 246, 229, 97, 190, 148, 197, 85, 182, 92, 57, 119, 74, 119, 71, 18, 174, 144, 108, 73, 188, 206, 84, 185, 221, 64, 206, 221, 180, 22, 42, 96, 85, 68, 243, 27, 80, 25, 50, 12, 69, 169, 192, 54, 191, 190, 69, 72, 130, 209, 48, 153, 40, 90, 68, 105, 238, 54, 184, 173, 57, 221, 51, 82, 76, 90, 41, 78, 249, 54, 193, 63, 30, 188, 128, 135, 208, 13, 75, 120, 187, 141, 207, 43, 227, 62, 2, 78, 15, 146, 245, 42, 138, 158, 116, 154, 44, 82, 125, 36, 60, 94, 43, 1, 171, 75, 59, 194, 36, 163, 184, 236, 30, 242, 178, 209, 74, 61, 69, 114, 219, 165, 50, 83, 80, 219, 140, 253, 187, 212, 81, 142, 177, 7, 64, 146, 192, 48, 74, 253, 169, 195, 112, 14, 129, 4, 138, 165, 31, 76, 53, 97, 187, 190, 150, 159, 83, 182, 88, 211, 175, 64, 57, 193, 13, 134, 230, 31, 42, 229, 138, 32, 24, 83, 100, 57, 24, 22, 177, 220, 142, 91, 81, 73, 193, 61, 182, 234, 235, 17, 123, 68, 59, 246, 28, 199, 158, 51, 102, 187, 195, 78, 189, 34, 226, 65, 178, 43, 150, 253, 254, 156, 67, 164, 230, 54, 56, 211, 244, 196, 75, 192, 215, 212, 132, 118, 135, 253, 140, 186, 242, 194, 43, 50, 81, 218, 159, 49, 85, 249, 176, 56, 32, 205, 35, 245, 151, 228, 43, 122, 231, 58, 192, 5, 57, 92, 41, 128, 140, 50, 151, 80, 206, 221, 160, 57, 100, 230, 86, 156, 186, 71, 94, 54, 181, 75, 194, 176, 192, 145, 205, 241, 135, 125, 218, 225, 69, 67, 139, 210, 209, 219, 104, 106, 53, 136, 25, 15, 248, 158, 136, 204, 208, 3, 40, 84, 219, 132, 110, 89, 118, 230, 55, 141, 246, 18, 159, 76, 218, 250, 23, 174, 24, 51, 153, 245, 146, 56, 68, 192, 78, 181, 19, 51, 93, 1, 121, 10, 229, 195, 50, 64, 237, 58, 119, 155, 223, 53, 22, 230, 226, 139, 136, 134, 156, 57, 222, 56, 154, 221, 170, 107, 173, 113, 15, 44, 233, 162, 7, 84, 202, 60, 166, 147, 66, 108, 24, 185, 245, 39, 213, 52, 224, 245, 34, 43, 228, 31, 39, 80, 117, 73, 19, 204, 121, 234, 77, 102, 31, 142, 44, 229, 96, 90, 138, 127, 104, 217, 231, 139, 60, 219, 82, 166, 82, 244, 110, 219, 91, 101, 115, 166, 210, 32, 92, 55, 238, 140, 189, 91, 54, 177, 118, 226, 1, 172, 156, 20, 57, 128, 154, 194, 55, 153, 85, 177, 0, 61, 177, 186, 45, 3, 210, 6, 188, 250, 50, 117, 208, 200, 177, 229, 95, 10, 131, 237, 155, 56, 13, 198, 13, 154, 209, 85, 180, 245, 14, 102, 108, 142, 234, 108, 245, 98, 1, 122, 177, 233, 7, 218, 97, 130, 230, 164, 245, 7, 119, 183, 157, 72, 236, 193, 240, 35, 75, 56, 58, 37, 22, 209, 73, 201, 157, 44, 164, 105, 38, 237, 21, 18, 147, 85, 129, 58, 70, 52, 123, 162, 80, 248, 85, 45, 250, 140, 254, 203, 97, 209, 191, 200, 161, 195, 193, 250, 28, 209, 205, 127, 139, 99, 34, 8, 191, 120, 198, 99, 86, 7, 116, 158, 185, 90, 65, 219, 142, 45, 251, 153, 3, 13, 137, 141, 9, 205, 8, 35, 130, 186, 146, 238, 105, 130, 189, 143, 226, 5, 184, 74, 16, 240, 89, 184, 192, 73, 94, 225, 181, 255, 161, 88, 254, 70, 10, 230, 1, 176, 201, 207, 153, 121, 54, 43, 64, 63, 119, 43, 217, 86, 156, 121, 172, 143, 129, 9, 141, 74, 146, 88, 169, 41, 33, 180, 23, 87, 175, 119, 219, 130, 242, 200, 56, 144, 162, 240, 119, 88, 95, 86, 121, 171, 217, 220, 221, 61, 26, 196, 195, 146, 213, 145, 14, 85, 216, 217, 201, 222, 132, 128, 155, 145, 61, 102, 225, 100, 99, 77, 178, 133, 221, 205, 134, 194, 25, 215, 186, 16, 171, 91, 99, 47, 245, 200, 224, 99, 74, 47, 130, 238, 249, 55, 24, 138, 221, 189, 8, 87, 35, 240, 236, 102, 129, 30, 250, 222, 255, 162, 67, 124, 173, 161, 240, 19, 245, 19, 31, 247, 122, 152, 71, 145, 122, 161, 206, 139, 3, 213, 200, 96, 201, 14, 166, 37, 181, 57, 13, 187, 206, 84, 87, 247, 243, 98, 44, 51, 35, 69, 240, 220, 119, 221, 126, 51, 57, 153, 85, 43, 50, 91, 135, 98, 4, 109, 175, 117, 125, 188, 128, 61, 19, 155, 16, 189, 70, 161, 87, 83, 199, 173, 149, 140, 130, 14, 173, 108, 152, 62, 87, 217, 99, 182, 137, 149, 233, 208, 52, 101, 4, 41, 214, 144, 30, 49, 26, 135, 140, 52, 127, 249, 222, 120, 156, 45, 174, 153, 190, 223, 218, 145, 26, 73, 188, 73, 157, 38, 231, 121, 242, 31, 124, 192, 9, 103, 120, 175, 104, 5, 144, 227, 245, 157, 156, 67, 218, 184, 214, 35, 236, 35, 117, 251, 54, 104, 174, 30, 7, 103, 180, 176, 96, 223, 117, 214, 5, 124, 112, 203, 84, 13, 8, 129, 142, 149, 60, 108, 27, 30, 3, 95, 118, 112, 166, 201, 46, 60, 8, 227, 197, 233, 96, 22, 36, 16, 28, 255, 174, 233, 87, 74, 14, 74, 141, 47, 171, 133, 134, 193, 245, 60, 122, 48, 96, 239, 178, 230, 157, 45, 124, 116, 22, 75, 254, 56, 159, 211, 107, 105, 74, 202, 227, 48, 110, 181, 107, 28, 182, 19, 193, 249, 93, 23, 129, 30, 88, 15, 247, 195, 57, 139, 247, 111, 224, 102, 253, 212, 245, 78, 192, 241, 90, 237, 188, 64, 184, 140, 170, 134, 44, 133, 164, 40, 141, 211, 186, 138, 204, 128, 143, 35, 33, 211, 228, 120, 241, 124, 134, 38, 44, 251, 204, 227, 192, 94, 33, 233, 73, 255, 222, 150, 10, 32, 165, 225, 78, 190, 144, 122, 81, 236, 246, 202, 57, 14, 193, 38, 57, 179, 116, 174, 36, 135, 31, 24, 245, 15, 116, 50, 109, 54, 130, 91, 66, 99, 55, 83, 135, 70, 176, 118, 74, 19, 148, 193, 241, 14, 109, 91, 96, 145, 127, 54, 214, 4, 159, 210, 166, 136, 198, 114, 29, 91, 118, 146, 166, 70, 83, 147, 49, 142, 198, 107, 108, 135, 239, 88, 212, 48, 154, 159, 249, 8, 239, 139, 170, 106, 124, 63, 70, 113, 61, 191, 234, 205, 152, 252, 85, 152, 65, 254, 34, 127, 62, 137, 71, 52, 199, 251, 173, 173, 29, 4, 221, 9, 197, 118, 142, 29, 19, 197, 89, 148, 124, 157, 71, 185, 238, 110, 56, 231, 43, 78, 6, 131, 54, 49, 215, 96, 134, 251, 157, 211, 200, 124, 71, 106, 104, 113, 138, 92, 3, 120, 116, 48, 69, 33, 130, 252, 205, 176, 109, 237, 160, 54, 232, 124, 78, 213, 121, 120, 219, 173, 191, 63, 229, 81, 252, 135, 115, 229, 246, 54, 236, 189, 21, 47, 98, 125, 42, 159, 218, 146, 218, 185, 135, 51, 62, 160, 20, 216, 139, 189, 179, 9, 183, 8, 89, 168, 203, 88, 102, 5, 146, 240, 215, 143, 128, 210, 235, 37, 61, 146, 114, 8, 82, 167, 179, 115, 82, 161, 104, 82, 78, 120, 60, 150, 155, 144, 121, 104, 131, 170, 47, 204, 36, 146, 148, 182, 19, 94, 206, 35, 103, 131, 245, 44, 155, 150, 205, 32, 89, 102, 13, 106, 130, 219, 196, 32, 52, 110, 239, 21, 18, 157, 27, 217, 219, 227, 229, 104, 7, 152, 211, 191, 248, 33, 173, 127, 29, 198, 191, 154, 130, 177, 234, 247, 82, 110, 116, 201, 136, 232, 135, 117, 169, 16, 243, 50, 10, 206, 122, 130, 204, 219, 42, 104, 70, 252, 38, 183, 141, 253, 184, 3, 66, 39, 28, 197, 219, 184, 83, 190, 71, 222, 232, 36, 162, 32, 35, 4, 74, 99, 176, 50, 189, 13, 180, 193, 76, 98, 58, 249, 38, 21, 80, 73, 112, 22, 130, 109, 126, 151, 18, 226, 241, 195, 141, 170, 168, 173, 224, 186, 138, 50, 70, 74, 136, 39, 199, 2, 149, 235, 177, 180, 156, 222, 226, 19, 102, 224, 74, 58, 255, 50, 51, 131, 111, 98, 104, 136, 16, 9, 192, 174, 33, 75, 56, 227, 219, 54, 148, 16, 144, 187, 188, 188, 244, 86, 59, 180, 35, 31, 243, 97, 69, 28, 73, 81, 172, 159, 249, 79, 25, 47, 47, 34, 32, 125, 185, 75, 42, 130, 170, 196, 204, 80, 91, 26, 242, 248, 195, 108, 75, 212, 195, 182, 135, 7, 40, 19, 46, 35, 166, 33, 146, 243, 152, 185, 91, 73, 221, 119, 217, 233, 90, 52, 104, 148, 246, 222, 161, 49, 166, 30, 18, 40, 1, 21, 183, 67, 247, 109, 135, 107, 212, 113], - [89, 102, 88, 86, 250, 183, 77, 2, 127, 9, 100, 38, 134, 32, 202, 132, 240, 109, 106, 58, 197, 108, 86, 45, 62, 177, 229, 183, 84, 5, 189, 197, 220, 53, 81, 163, 172, 221, 57, 67, 169, 136, 229, 90, 252, 9, 122, 194, 212, 5, 221, 105, 27, 155, 75, 142, 163, 161, 58, 226, 45, 131, 116, 75, 195, 72, 154, 225, 5, 243, 21, 33, 83, 202, 176, 136, 246, 176, 181, 209, 63, 216, 93, 154, 116, 205, 107, 79, 187, 91, 61, 160, 172, 93, 212, 16, 151, 151, 79, 143, 52, 119, 230, 111, 251, 252, 133, 210, 227, 142, 240, 189, 207, 92, 144, 60, 42, 133, 78, 99, 136, 75, 149, 250, 238, 146, 177, 157, 91, 97, 48, 63, 194, 134, 97, 236, 104, 127, 48, 117, 131, 252, 247, 209, 221, 132, 106, 133, 78, 143, 133, 178, 57, 212, 252, 48, 239, 207, 133, 221, 80, 188, 138, 35, 154, 169, 164, 111, 182, 92, 83, 2, 148, 191, 139, 32, 175, 90, 91, 84, 84, 224, 211, 232, 134, 104, 111, 156, 186, 225, 30, 231, 101, 17, 131, 9, 104, 51, 60, 189, 1, 3, 101, 60, 77, 226, 181, 234, 19, 244, 62, 193, 74, 254, 127, 142, 39, 252, 243, 187, 95, 143, 135, 228, 175, 157, 226, 208, 193, 35, 47, 161, 184, 118, 188, 140, 135, 202, 49, 113, 167, 199, 13, 185, 245, 145, 238, 222, 116, 177, 144, 65, 156, 194, 244, 56, 26, 192, 111, 188, 133, 41, 207, 205, 120, 210, 40, 117, 4, 8, 19, 113, 26, 45, 231, 159, 22, 243, 145, 222, 93, 181, 156, 181, 21, 20, 242, 231, 85, 135, 233, 172, 246, 252, 60, 224, 202, 244, 194, 86, 255, 233, 67, 186, 19, 102, 60, 84, 56, 190, 15, 20, 60, 174, 238, 77, 26, 200, 135, 77, 255, 160, 13, 107, 126, 18, 174, 114, 168, 185, 196, 200, 153, 102, 227, 110, 13, 251, 221, 30, 40, 122, 181, 161, 90, 158, 41, 234, 237, 25, 59, 27, 88, 168, 1, 21, 188, 189, 172, 236, 60, 255, 76, 192, 156, 192, 88, 226, 87, 50, 33, 120, 190, 98, 145, 249, 139, 28, 255, 86, 254, 3, 52, 163, 251, 231, 134, 108, 46, 139, 205, 23, 76, 165, 124, 1, 35, 12, 255, 237, 231, 51, 167, 135, 17, 240, 32, 26, 156, 80, 79, 111, 91, 138, 176, 114, 58, 63, 23, 150, 204, 60, 99, 105, 248, 247, 66, 29, 74, 137, 135, 242, 242, 105, 90, 77, 32, 214, 1, 197, 205, 206, 93, 74, 223, 135, 32, 27, 122, 138, 76, 124, 120, 56, 53, 25, 224, 46, 124, 72, 228, 85, 198, 156, 93, 180, 179, 185, 227, 134, 19, 119, 234, 120, 148, 6, 2, 12, 74, 43, 106, 39, 92, 45, 12, 137, 114, 255, 33, 171, 9, 247, 133, 224, 35, 208, 121, 135, 133, 80, 26, 227, 137, 16, 85, 136, 247, 13, 24, 86, 227, 130, 191, 187, 234, 53, 244, 101, 120, 191, 254, 39, 204, 176, 110, 99, 145, 142, 208, 182, 86, 202, 73, 227, 203, 161, 125, 128, 35, 173, 54, 11, 89, 182, 93, 247, 86, 172, 208, 71, 162, 174, 129, 82, 253, 68, 208, 13, 119, 202, 216, 55, 180, 253, 217, 218, 15, 44, 193, 177, 151, 212, 87, 95, 123, 218, 36, 36, 45, 168, 242, 107, 222, 134, 168, 13, 249, 120, 121, 224, 196, 242, 64, 99, 238, 111, 247, 88, 159, 91, 143, 216, 232, 227, 191, 17, 49, 26, 125, 0, 241, 45, 126, 203, 39, 108, 133, 233, 144, 19, 241, 81, 254, 180, 109, 58, 189, 251, 205, 224, 65, 110, 96, 246, 235, 38, 179, 249, 146, 107, 36, 58, 178, 81, 164, 63, 202, 128, 101, 111, 188, 170, 195, 202, 250, 83, 133, 60, 253, 60, 152, 197, 1, 28, 193, 115, 89, 57, 66, 174, 92, 25, 208, 166, 204, 71, 124, 219, 5, 212, 235, 79, 96, 45, 132, 210, 28, 111, 42, 28, 110, 29, 110, 90, 176, 93, 60, 188, 167, 52, 129, 210, 197, 32, 162, 134, 154, 243, 125, 29, 252, 16, 254, 73, 219, 175, 189, 69, 131, 71, 141, 156, 113, 55, 96, 172, 54, 77, 215, 24, 140, 211, 77, 51, 242, 42, 16, 72, 110, 65, 72, 255, 207, 82, 70, 234, 157, 221, 137, 235, 80, 25, 252, 157, 42, 99, 182, 160, 189, 219, 34, 14, 160, 42, 157, 194, 216, 57, 0, 241, 143, 34, 233, 45, 10, 104, 110, 21, 57, 48, 156, 2, 11, 186, 146, 158, 98, 26, 246, 170, 128, 57, 129, 123, 203, 44, 207, 71, 98, 173, 114, 160, 248, 24, 70, 176, 202, 137, 26, 27, 110, 175, 188, 136, 213, 168, 16, 244, 226, 62, 11, 189, 95, 133, 163, 166, 225, 202, 91, 119, 71, 26, 38, 27, 109, 207, 2, 202, 246, 9, 155, 208, 228, 105, 174, 54, 150, 225, 116, 118, 172, 182, 83, 83, 144, 254, 94, 16, 134, 4, 72, 59, 153, 93, 20, 55, 177, 187, 128, 41, 47, 137, 46, 53, 210, 177, 234, 176, 75, 105, 83, 160, 252, 83, 196, 10, 177, 252, 112, 91, 75, 248, 187, 57, 114, 24, 63, 64, 251, 67, 64, 180, 35, 208, 199, 68, 4, 34, 99, 62, 103, 108, 114, 108, 229, 194, 13, 76, 114, 54, 236, 51, 68, 142, 71, 134, 113, 70, 155, 160, 32, 127, 148, 208, 103, 253, 65, 26, 139, 137, 247, 188, 143, 221, 194, 214, 255, 67, 45, 101, 158, 116, 78, 147, 108, 208, 32, 223, 115, 189, 12, 219, 167, 124, 9, 94, 29, 191, 158, 232, 224, 193, 24, 180, 240, 189, 140, 95, 66, 72, 130, 187, 163, 178, 34, 19, 217, 140, 174, 135, 87, 5, 229, 19, 24, 6, 80, 75, 242, 28, 128, 89, 21, 169, 48, 174, 9, 88, 164, 50, 79, 82, 35, 1, 224, 246, 70, 97, 108, 19, 55, 247, 77, 135, 194, 20, 229, 141, 187, 157, 135, 86, 9, 58, 139, 153, 15, 164, 104, 52, 240, 175, 183, 31, 210, 166, 137, 187, 65, 129, 74, 22, 161, 2, 139, 36, 132, 145, 138, 249, 52, 76, 89, 102, 242, 206, 60, 77, 133, 115, 244, 210, 12, 122, 114, 38, 52, 88, 222, 44, 152, 17, 215, 144, 251, 239, 240, 140, 3, 114, 2, 56, 81, 213, 11, 85, 236, 170, 123, 177, 232, 181, 71, 145, 240, 217, 44, 255, 55, 56, 169, 32, 6, 3, 178, 33, 198, 68, 244, 116, 102, 244, 221, 144, 236, 126, 146, 1, 146, 252, 168, 91, 97, 183, 74, 31, 22, 153, 5, 207, 95, 232, 71, 77, 137, 81, 4, 56, 74, 159, 7, 89, 220, 34, 50, 205, 156, 240, 135, 86, 142, 135, 75, 32, 66, 207, 82, 89, 250, 137, 210, 132, 140, 149, 35, 230, 9, 10, 179, 118, 71, 132, 196, 48, 95, 223, 109, 11, 83, 2, 159, 77, 190, 188, 27, 206, 114, 228, 222, 170, 224, 88, 76, 230, 125, 3, 157, 162, 95, 100, 47, 15, 134, 59, 57, 239, 251, 58, 214, 185, 93, 13, 173, 103, 37, 0, 239, 79, 248, 241, 215, 196, 178, 153, 169, 134, 213, 91, 93, 155, 69, 68, 215, 107, 142, 72, 95, 227, 27, 122, 109, 100, 51, 162, 181, 118, 5, 254, 111, 78, 215, 8, 245, 120, 121, 154, 70, 203, 122, 97, 163, 121, 166, 166, 95, 186, 64, 141, 86, 177, 154, 146, 1, 47, 21, 47, 72, 37, 35, 160, 253, 71, 48, 140, 4, 35, 118, 206, 199, 85, 225, 8, 38, 143, 220, 31, 1, 86, 234, 176, 254, 120, 48, 17, 23, 69, 34, 65, 170, 70, 43, 214, 146, 112, 237, 156, 121, 63, 176, 4, 74, 223, 236, 230, 174, 191, 88, 25, 179, 248, 92, 17, 204, 232, 180, 191, 8, 26, 88, 213, 139, 197, 52, 168, 58, 137, 23, 161, 10, 52, 208, 145, 122, 112, 142, 227, 30, 39, 162, 205, 114, 142, 89, 195, 192, 232, 11, 185, 116, 77, 96, 187, 111, 163, 79, 160, 105, 191, 105, 109, 180, 85, 231, 102, 229, 106, 139, 24, 150, 211, 186, 219, 81, 149, 109, 45, 4, 68, 61, 139, 89, 198, 244, 232, 13, 149, 14, 180, 106, 38, 251, 213, 106, 224, 9, 183, 78, 189, 215, 112, 18, 121, 28, 207, 73, 196, 134, 61, 123, 197, 167, 254, 172, 136, 145, 57, 176, 217, 53, 27, 248, 1, 157, 12, 219, 95, 178, 164, 98, 167, 245, 24, 250, 36, 133, 87, 60, 146, 164, 247, 203, 18, 3, 32, 241, 107, 157, 55, 179, 220, 150, 238, 174, 189, 36, 6, 25, 187, 79, 157, 111, 16, 250, 109, 108, 198, 73, 52, 104, 221, 11, 115, 228, 103, 118, 133, 182, 162, 238, 44, 173, 106, 165, 93, 114, 132, 139, 223, 176, 162, 126, 182, 167, 158, 118, 246, 252, 246, 203, 105, 10, 57, 37, 85, 126, 117, 182, 168, 156, 87, 46, 6, 241, 8, 117, 159, 147, 18, 19, 7, 249, 31, 9, 222, 91, 246, 13, 57, 129, 52, 238, 24, 57, 105, 170, 87, 187, 215, 184, 3, 176, 203, 232, 234, 158, 187, 207, 191, 181, 144, 207, 8, 62, 58, 110, 37, 134, 237, 27, 23, 182, 52, 199, 149, 165, 228, 137, 103, 15, 93, 166, 62, 197, 204, 190, 11, 176, 1, 213, 66, 147, 44, 246, 225, 116, 177, 32, 51, 188, 64, 186, 11, 3, 249, 90, 18, 49, 167, 146, 169, 84, 196, 185, 221, 70, 103, 116, 146, 153, 44, 156, 0, 32, 90, 48, 34, 159, 211, 191, 159, 27, 0, 119, 17, 74, 69, 86, 55, 159, 132, 90, 232, 224, 32, 199, 99, 154, 79, 49, 206, 15, 216, 86, 8, 124, 223, 170, 135, 39, 196, 166, 29, 230, 115, 29, 20, 20, 103, 14, 5, 161, 34, 180, 91, 65, 126, 63, 116, 38, 242, 87, 101, 70, 232, 247, 102, 243, 191, 15, 59, 155, 167, 172, 220, 105, 204, 233, 99, 23, 29, 56, 20, 172, 132, 254, 130, 64, 34, 137, 249, 49, 47, 12, 145, 31, 183, 24, 42, 98, 200, 95, 29, 64, 143, 184, 154, 35, 8, 80, 146, 107, 177, 110, 128, 78, 104, 121, 62, 218, 204, 215, 133, 129, 232, 51, 17, 95, 95, 73, 86, 28, 76, 76, 24, 64, 50, 55, 56, 253, 229, 95, 58, 204, 82, 148, 96, 93, 219, 71, 158, 46, 164, 11, 61, 164, 9, 20, 160, 58, 219, 187, 2, 181, 111, 245, 132, 78, 40, 40, 59, 211, 216, 181, 196, 178, 46, 2, 181, 115, 124, 217, 67, 171, 63, 56, 218, 108, 48, 115, 199, 142, 9, 34, 113, 57, 45, 255, 12, 115, 36, 23, 208, 242, 162, 188, 167, 153, 207, 87, 134, 89, 11, 63, 255, 10, 48, 255, 195, 164, 14, 180, 46, 249, 50, 247, 147, 115, 133, 69, 236, 149, 254, 145, 184, 245, 222, 208, 63, 30, 205, 43, 131, 111, 103, 251, 145, 54, 205, 123, 116, 4, 66, 112, 15, 34, 62, 191, 145, 95, 59, 154, 62, 73, 110, 172, 125, 157, 14, 79, 14, 193, 223, 251, 35, 14, 5, 180, 86, 228, 191, 117, 228, 102, 127, 139, 148, 233, 0, 247, 111, 44, 253, 103, 249, 150, 226, 155, 200, 191, 193, 167, 245, 119, 66, 94, 201, 203, 43, 31, 111, 185, 123, 62, 29, 61, 60, 117, 146, 245, 107, 112, 123, 21, 14, 174, 61, 153, 219, 242, 216, 127, 96, 121, 127, 255, 85, 155, 100, 30, 104, 131, 167, 208, 84, 222, 8, 14, 139, 47, 45, 142, 155, 246, 158, 41, 240, 179, 134, 109, 217, 115, 229, 252, 132, 173, 191, 6, 239, 37, 19, 200, 142, 164, 179, 161, 197, 31, 227, 134, 219, 222, 235, 212, 59, 163, 174, 119, 169, 177, 93, 27, 248, 73, 78, 67, 139, 120, 123, 216, 214, 39, 92, 189, 237, 159, 17, 147, 49, 185, 197, 104, 92, 239, 42, 134, 47, 79, 1, 232, 11, 129, 248, 63, 186, 246, 243, 246, 104, 84, 115, 9, 64, 211, 237, 3, 4, 153, 223, 173, 162, 193, 252, 187, 212, 15, 244, 54, 120, 54, 10, 112, 186, 207, 61, 137, 71, 202, 66, 57, 212, 48, 138, 9, 114, 91, 169, 158, 162, 54, 83, 182, 100, 81, 188, 35, 146, 47, 98, 205, 66, 50, 93, 212, 13, 130, 133, 6, 152, 162, 130, 130, 148, 202, 208, 122, 91, 150, 3, 108, 121, 74, 155, 114, 40, 152, 75, 164, 61, 129, 120, 151, 120, 166, 127, 161, 40, 165, 61, 89, 224, 166, 50, 117, 194, 172, 93, 238, 82, 233, 75, 212, 121, 103, 231, 179, 218, 253, 205, 183, 106, 63, 84, 193, 35, 208, 245, 33, 72, 124, 108, 57, 155, 168, 38, 43, 60, 8, 152, 137, 194, 208, 50, 228, 54, 147, 234, 212, 127, 157, 197, 45, 189, 14, 201, 126, 44, 124, 186, 249, 165, 125, 169, 47, 117, 15, 162, 193, 98, 228, 1, 156, 125, 107, 28, 232, 252, 123, 9, 211, 141, 156, 186, 177, 181, 247, 178, 52, 30, 242, 122, 9, 67, 247, 49, 90, 157, 42, 199, 36, 163, 171, 123, 129, 92, 167, 242, 85, 54, 167, 113, 1, 164, 186, 40, 10, 106, 51, 157, 191, 61, 227, 130, 57, 153, 20, 212, 142, 42, 156, 82, 166, 77, 19, 175, 211, 140, 32, 161, 36, 250, 74, 221, 55, 75, 2, 137, 76, 177, 47, 227, 176, 79, 50, 221, 116, 32, 210, 169, 55, 154, 175, 245, 59, 109, 99, 70, 249, 130, 77, 203, 83, 247, 81, 73, 77, 53, 17, 206, 195, 50, 157, 187, 26, 161, 182, 42, 203, 53, 7, 136, 219, 164, 99, 170, 122, 18, 139, 175, 69, 155, 69, 155, 211, 135, 63, 27, 93, 128, 173, 35, 130, 76, 4, 33, 57, 235, 43, 2, 78, 71, 3, 31, 172, 63, 82, 194, 58, 243, 71, 235, 236, 123, 195, 4, 107, 238, 172, 9, 98, 207, 231, 11, 238, 88, 80, 201, 192, 75, 64, 217, 130, 34, 106, 183, 18, 174, 163, 226, 15, 39, 180, 5, 34, 231, 100, 61, 170, 159, 70, 154, 254, 145, 134, 101, 192, 233, 93, 88, 197, 209, 170, 186, 213, 226, 243, 79, 3, 163, 102, 169, 196, 23, 98, 8, 78, 218, 195, 58, 189, 94, 193, 34, 178, 175, 215, 148, 101, 94, 74, 86, 180, 227, 234, 100, 108, 243, 99, 74, 73, 167, 241, 25, 195, 137, 162, 235, 10, 226, 35, 168, 206, 36, 252, 78, 141, 218, 23, 47, 45, 193, 32, 144, 198, 221, 167, 148, 234, 247, 212, 211, 234, 27, 75, 222, 100, 96, 227, 173, 184, 207, 190, 17, 70, 203, 251, 155, 139, 215, 44, 55, 10, 219, 248, 145, 49, 129, 62, 209, 66, 193, 62, 29, 0, 86, 198, 132, 189, 124, 158, 201, 59, 179, 162, 30, 94, 101, 88, 58, 222, 151, 237, 194, 141, 139, 74, 169, 30, 69, 118, 170, 76, 13, 115, 246, 77, 159, 9, 61, 112, 174, 36, 123, 131, 77, 52, 195, 227, 246, 223, 61, 12, 1, 118, 134, 149, 108, 254, 80, 76, 5, 164, 196, 60, 57, 90, 83, 111, 209, 247, 139, 0, 220, 107, 21, 32, 79, 224, 69, 183, 221, 188, 74, 39, 47, 91, 53, 225, 69, 87, 30, 253, 66, 25, 190, 181, 158, 146, 202, 151, 240, 169, 97, 70, 116, 200, 105, 108, 12, 213, 103, 149, 152, 238, 123, 167, 180, 100, 18, 55, 253, 20, 38, 127, 77, 210, 178, 111, 55, 100, 174, 120, 44, 157, 170, 77, 200, 184, 49, 103, 5, 70, 200, 154, 141, 132, 84, 58, 100, 205, 95, 147, 188, 1, 102, 228, 14, 91, 132, 62, 193, 90, 188, 77, 40, 219, 116, 97, 125, 164, 42, 114, 254, 236, 241, 27, 32, 57, 197, 104, 70, 5, 45, 187, 159, 205, 16, 253, 192, 35, 14, 145, 122, 186, 84, 105, 170, 125, 108, 196, 247, 221, 123, 136, 19, 239, 253, 22, 108, 31, 13, 182, 83, 246, 134, 92, 106, 20, 29, 226, 39, 44, 224, 158, 36, 201, 5, 126, 73, 244, 224, 214, 145, 241, 123, 4, 110, 47, 148, 129, 196, 206, 199, 235, 15, 33, 189, 243, 85, 134, 128, 147, 76, 93, 92, 60, 125, 215, 96, 43, 14, 89, 173, 112, 45, 55, 164, 209, 111, 171, 77, 84, 117, 58, 184, 186, 167, 102, 112, 136, 149, 242, 56, 61, 234, 54, 90, 145, 78, 240, 3, 63, 87, 53, 189, 8, 239, 95, 153, 8, 139, 0, 12, 47, 231, 186, 128, 230, 139, 160, 77, 3, 17, 17, 161, 221, 48, 16, 86, 109, 243, 162, 211, 217, 113, 9, 129, 141, 223, 167, 197, 185, 221, 55, 88, 141, 166, 10, 8, 116, 94, 154, 215, 215, 65, 90, 167, 183, 156, 197, 167, 85, 62, 140, 234, 214, 179, 224, 161, 130, 147, 209, 127, 14, 72, 117, 112, 85, 9, 73, 237, 45, 54, 130, 154, 179, 32, 254, 149, 99, 101, 4, 115, 44, 19, 171, 59, 117, 120, 69, 116, 132, 252, 254, 39, 177, 227, 112, 48, 132, 251, 191, 8, 195, 15, 235, 170, 205, 121, 51, 147, 174, 196, 153, 244, 186, 168, 1, 40, 234, 34, 199, 126, 148, 24, 237, 121, 145, 217, 106, 37, 177, 133, 215, 235, 58, 73, 235, 189, 203, 195, 138, 104, 52, 82, 143, 245, 99, 44, 59, 10, 67, 244, 204, 220, 52, 112, 18, 76, 176, 173, 60, 89, 76, 223, 6, 206, 59, 61, 136, 76, 236, 159, 10, 233, 34, 117, 80, 30, 196, 225, 33, 144, 174, 105, 13, 40, 235, 218, 133, 107, 11, 167, 129, 63, 176, 233, 75, 148, 27, 218, 51, 225, 162, 122, 253, 89, 202, 100, 67, 240, 203, 24, 117, 39, 99, 121, 172, 170, 44, 67, 200, 108, 54, 254, 11, 94, 219, 125, 237, 46, 107, 159, 149, 27, 197, 168, 43, 229, 68, 193, 76, 30, 253, 82, 42, 145, 17, 248, 110, 8, 26, 237, 100, 184, 219, 171, 23, 183, 195, 44, 14, 127, 233, 18, 7, 119, 232, 188, 0, 31, 11, 84, 196, 160, 193, 106, 144, 77, 39, 12, 190, 30, 166, 117, 218, 233, 147, 85, 210, 145, 204, 52, 157, 215, 164, 64, 67, 6, 255, 12, 230, 234, 183, 42, 153, 70, 255, 70, 117, 190, 218, 152, 50, 173, 50, 109, 99, 162, 193, 40, 119, 191, 140, 23, 174, 75, 67, 108, 206, 149, 86, 21, 3, 217, 173, 189, 245, 29, 86, 63, 104, 118, 7, 135, 24, 36, 77, 107, 233, 11, 167, 239, 33, 72, 39, 158, 207, 188, 44, 134, 144, 8, 171, 38, 56, 128, 159, 100, 200, 230, 48, 98, 125, 128, 255, 119, 166, 234, 255, 100, 2, 57, 39, 179, 181, 186, 241, 163, 110, 93, 243, 231, 232, 28, 109, 222, 97, 236, 175, 223, 5, 102, 137, 74, 6, 212, 15, 7, 101, 2, 42, 203, 60, 247, 160, 164, 252, 161, 225, 239, 237, 96, 170, 234, 219, 246, 50, 80, 100, 15, 130, 126, 139, 4, 126, 80, 94, 175, 84, 215, 177, 186, 218, 102, 64, 98, 219, 140, 209, 203, 94, 63, 26, 194, 76, 229, 187, 238, 179, 175, 109, 49, 39, 216, 104, 220, 55, 79, 122, 100, 127, 254, 82, 79, 176, 194, 231, 222, 98, 197, 246, 31, 229, 12, 13, 83, 202, 196, 0, 15, 188, 73, 41, 49, 177, 238, 127, 96, 24, 96, 204, 241, 139, 166, 158, 56, 247, 32, 151, 143, 211, 61, 11, 36, 116, 139, 147, 101, 36, 198, 200, 80, 64, 226, 100, 201, 54, 251, 204, 81, 138, 182, 241, 126, 91, 7, 59, 244, 3, 127, 230, 41, 136, 244, 13, 195, 161, 103, 4, 77, 65, 137, 68, 22, 184, 221, 92, 42, 183, 8, 47, 93, 191, 76, 90, 63, 232, 136, 117, 174, 110, 54, 61, 217, 178, 184, 141, 197, 0, 204, 185, 117, 77, 240, 43, 215, 35, 120, 18, 241, 229, 186, 233, 141, 1, 25, 18, 29, 187, 64, 120, 115, 82, 166, 72, 64, 142, 172, 185, 249, 18, 37, 190, 196, 254, 81, 49, 201, 118, 188, 246, 9, 189, 199, 24, 190, 90, 70, 41, 38, 2, 93, 92, 3, 165, 193, 92, 80, 128, 75, 20, 6, 160, 117, 198, 55, 226, 97, 173, 240, 121, 113, 21, 26, 27, 116, 219, 84, 0, 109, 103, 249, 201, 113, 7, 174, 238, 176, 109, 252, 245, 50, 232, 139, 132, 98, 9, 241, 255, 119, 183, 241, 65, 104, 143, 42, 176, 206, 198, 34, 203, 41, 111, 27, 69, 20, 18, 166, 157, 177, 121, 195, 194, 227, 32, 67, 156, 194, 25, 201, 71, 117, 245, 20, 148, 70, 211, 188, 48, 24, 253, 58, 213, 194, 187, 99, 86, 193, 164, 116, 11, 10, 233, 16, 250, 35, 162, 240, 33, 61, 215, 91, 233, 132, 214, 207, 69, 255, 78, 157, 142, 169, 135, 124, 152, 23, 216, 245, 105, 10, 161, 155, 205, 150, 183, 22, 27, 5, 59, 171, 66, 179, 124, 1, 120, 158, 21, 21, 73, 199, 157, 38, 165, 97, 198, 108, 174, 162, 228, 28, 116, 163, 57, 16, 64, 153, 47, 72, 121, 144, 163, 154, 232, 165, 155, 174, 77, 85, 129, 150, 97, 187, 86, 128, 243, 201, 202, 58, 222, 52, 84, 221, 107, 237, 72, 182, 118, 2, 139, 175, 158, 162, 62, 151, 135, 37, 115, 33, 83, 125, 21, 121, 184, 113, 254, 38, 221, 125, 18, 160, 115, 154, 20, 242, 11, 223, 169, 65, 24, 248, 80, 130, 197, 69, 167, 57, 11, 88, 42, 45, 26, 117, 217, 207, 137, 255, 35, 212, 126, 177, 168, 126, 81, 126, 41, 240, 167, 107, 112, 125, 221, 79, 217, 17, 238, 35, 239, 45, 237, 176, 96, 55, 143, 156, 209, 90, 238, 4, 234, 196, 241, 173, 9, 12, 4, 136, 195, 117, 158, 122, 66, 78, 170, 17, 88, 49, 48, 188, 125, 134, 189, 36, 143, 20, 172, 70, 87, 10, 59, 120, 193, 2, 28, 211, 216, 111, 115, 44, 14, 200, 66, 195, 189, 127, 15, 85, 72, 232, 148, 58, 134, 99, 237, 167, 59, 29, 156, 134, 4, 64, 146, 204, 136, 79, 3, 85, 108, 236, 8, 171, 205, 168, 195, 86, 150, 136, 195, 171, 41, 82, 140, 248, 6, 67, 123, 30, 220, 41, 147, 173, 220, 79, 202, 43, 254, 149, 183, 33, 81, 160, 219, 24, 220, 206, 145, 55, 231, 91, 156, 36, 108, 23, 79, 70, 56, 47, 230, 200, 162, 205, 213, 14, 106, 51, 114, 118, 89, 38, 84, 127, 19, 68, 178, 135, 19, 28, 47, 240, 44, 241, 234, 54, 198, 85, 243, 221, 3, 196, 102, 195, 35, 57, 209, 247, 164, 93, 241, 117, 137, 15, 24, 99, 127, 144, 13, 82, 78, 174, 60, 68, 110, 218, 91, 122, 235, 1, 164, 236, 249, 100, 210, 194, 13, 91, 118, 152, 247, 125, 68, 150, 246, 133, 220, 117, 102, 33, 200, 64, 175, 142, 248, 226, 167, 161, 219, 128, 191, 13, 64, 148, 170, 22, 53, 125, 131, 138, 214, 79, 37, 98, 83, 85, 217, 49, 156, 150, 46, 75, 125, 80, 13, 245, 56, 64, 90, 167, 199, 124, 193, 27, 175, 225, 187, 208, 88, 198, 141, 14, 244, 57, 241, 82, 232, 146, 222, 219, 210, 177, 216, 9, 240, 79, 168, 203, 86, 39, 89, 20, 186, 64, 135, 81, 145, 228, 88, 97, 244, 192, 3, 14, 68, 19, 11, 238, 105, 38, 246, 65, 161, 148, 119, 11, 253, 88, 208, 109, 96, 67, 107, 65, 219, 148, 172, 222, 252, 53, 220, 39, 99, 186, 169, 203, 102, 24, 144, 98, 235, 70, 107, 165, 1, 116, 14, 196, 192, 33, 61, 228, 96, 45, 125, 65, 51, 104, 185, 146, 178, 249, 5, 31, 196, 163, 84, 166, 210, 26, 239, 143, 111, 93, 172, 163, 160, 90, 56, 121, 243, 12, 165, 244, 31, 131, 177, 195, 63, 68, 213, 145, 207, 254, 193, 92, 65, 243, 179, 103, 96, 246, 217, 125, 194, 205, 240, 76, 34, 201, 150, 25, 243, 80, 228, 219, 254, 149, 249, 84, 180, 174, 70, 44, 205, 74, 18, 53, 172, 178, 205, 219, 193, 248, 6, 239, 105, 155, 157, 63, 120, 69, 19, 46, 28, 9, 62, 195, 55, 24, 182, 124, 154, 135, 166, 2, 107, 12, 33, 171, 72, 14, 103, 203, 111, 248, 121, 42, 107, 253, 247, 22, 132, 50, 99, 182, 4, 205, 44, 35, 28, 82, 152, 152, 19, 149, 130, 76, 39, 51, 154, 122, 209, 40, 223, 24, 148, 38, 225, 250, 133, 112, 255, 35, 101, 99, 133, 79, 147, 75, 11, 28, 41, 240, 41, 88, 219, 231, 57, 124, 187, 159, 112, 202, 12, 217, 106, 161, 172, 52, 76, 12, 110, 255, 168, 209, 192, 63, 146, 5, 154, 229, 128, 153, 70, 119, 76, 55, 43, 84, 29, 202, 194, 253, 8, 183, 159, 4, 11, 34, 106, 150, 182, 204, 226, 244, 222, 167, 205, 214, 104, 16, 39, 113, 236, 34, 83, 235, 159, 247, 216, 121, 65, 44, 170, 48, 10, 43, 135, 216, 47, 214, 206, 117, 209, 168, 121, 214, 126, 102, 10, 187, 232, 141, 2, 63, 121, 59, 136, 96, 96, 195, 179, 57, 154, 131, 237, 208, 241, 19, 40, 3, 143, 111, 185, 221, 37, 229, 160, 125, 249, 5, 62, 237, 194, 8, 87, 144, 106, 191, 107, 254, 11, 126, 142, 128, 40, 232, 18, 131, 25, 89, 134, 148, 55, 11, 76, 188, 103, 174, 91, 142, 244, 33, 218, 167, 120, 79, 193, 63, 243, 64, 101, 226, 102, 71, 28, 118, 204, 23, 109, 151, 236, 51, 65, 186, 107, 225, 233, 103, 129, 18, 84, 150, 156, 83, 181, 128, 76, 187, 235, 77, 111, 0, 191, 147, 189, 243, 135, 255, 20, 38, 128, 62, 162, 231, 208, 195, 62, 163, 74, 195, 111, 45, 53, 119, 98, 129, 129, 45, 244, 175, 153, 210, 108, 180, 34, 149, 196, 45, 61, 203, 167, 73, 96, 129, 46, 62, 132, 55, 168, 223, 146, 224, 135, 71, 1, 159, 113, 148, 173, 56, 185, 53, 127, 247, 62, 20, 170, 41, 23, 61, 207, 70, 187, 237, 242, 226, 129, 230, 5, 141, 232, 174, 248, 191, 197, 36, 122, 141, 14, 158, 66, 3, 63, 132, 219, 132, 65, 66, 158, 90, 10, 44, 107, 122, 201, 188, 66, 206, 183, 130, 218, 98, 231, 95, 121, 95, 31, 128, 151, 162, 30, 50, 177, 99, 50, 98, 200, 242, 42, 226, 61, 112, 60, 111, 171, 85, 111, 18, 18, 65, 253, 210, 187, 14, 4, 74, 184, 222, 102, 245, 103, 90, 244, 39, 45, 69, 67, 168, 85, 122, 222, 225, 32, 178, 165, 239, 138, 66, 191, 160, 91, 32, 47, 97, 162, 97, 109, 238, 195, 204, 151, 35, 179, 247, 178, 62, 214, 46, 126, 201, 32, 36, 22, 5, 237, 77, 47, 18, 84, 84, 57, 78, 25, 71, 129, 230, 110, 161, 47, 215, 40, 199, 169, 213, 5, 22, 0, 83, 137, 162, 40, 200, 184, 38, 51, 242, 20, 191, 154, 30, 134, 92, 233, 251, 103, 238, 202, 231, 27, 0, 22, 175, 38, 41, 175, 230, 238, 58, 162, 132, 21, 65, 126, 165, 125, 236, 234, 162, 202, 48, 131, 187, 237, 218, 68, 143, 248, 106, 219, 67, 119, 80, 219, 248, 185, 163, 148, 216, 156, 52, 177, 116, 239, 242, 170, 150, 240, 241, 118, 218, 230, 114, 159, 73, 159, 223, 212, 202, 176, 204, 129, 197, 6, 157, 78, 163, 237, 179, 159, 52, 66, 103, 201, 176, 233, 45, 122, 190, 171, 48, 16, 26, 104, 179, 150, 12, 48, 56, 166, 247, 167, 173, 219, 181, 204, 172, 9, 36, 222, 174, 28, 244, 78, 196, 179, 102, 131, 75, 43, 132, 31, 43, 108, 6, 137, 132, 200, 138, 219, 167, 162, 224, 40, 147, 76, 245, 230, 103, 44, 55, 117, 126, 181, 225, 6, 252, 163, 56, 160, 40, 141, 247, 216, 183, 12, 170, 12, 187, 204, 241, 228, 70, 29, 168, 171, 224, 176, 9, 236, 8, 139, 191, 162, 131, 132, 133, 52, 233, 62, 176, 249, 143, 69, 3, 10, 46, 114, 237, 213, 138, 218, 81, 114, 20, 69, 152, 230, 123, 27, 24, 57, 152, 90, 52, 253, 190, 128, 61, 196, 174, 3, 108, 141, 21, 173, 99, 171, 17, 204, 231, 1, 175, 85, 124, 57, 115, 210, 22, 228, 229, 95, 216, 149, 99, 36, 152, 3, 50, 35, 217, 127, 224, 208, 71, 193, 225, 197, 137, 184, 47, 191, 183, 126, 103, 219, 58, 45, 189, 6, 231, 69, 193, 16, 226, 167, 86, 77, 117, 58, 108, 223, 19, 110, 126, 244, 40, 229, 112, 168, 107, 71, 101, 74, 239, 78, 220, 164, 85, 7, 192, 230, 12, 161, 152, 57, 88, 159, 212, 231, 100, 173, 88, 190, 75, 212, 11, 124, 198, 19, 187, 160, 221, 25, 130, 120, 85, 121, 245, 118, 181, 68, 73, 218, 22, 222, 102, 56, 148, 21, 69, 179, 237, 67, 119, 155, 30, 85, 31, 127, 180, 53, 188, 189, 144, 157, 243, 18, 158, 14, 30, 222, 102, 75, 226, 227, 107, 224, 240, 9, 58, 45, 163, 85, 56, 31, 131, 87, 188, 44, 124, 197, 1, 175, 1, 84, 252, 66, 79, 12, 168, 63, 147, 165, 52, 85, 151, 54, 193, 191, 166, 74, 57, 0, 76, 63, 153, 128, 131, 242, 247, 62, 66, 25, 47, 93, 109, 178, 42, 109, 146, 81, 162, 192, 0, 206, 91, 16, 97, 191, 16, 149, 223, 218, 207, 7, 160, 91, 134, 45, 16, 216, 211, 37, 159, 59, 164, 37, 140, 239, 68, 226, 189, 175, 115, 105, 22, 23, 161, 206, 74, 159, 163, 109, 51, 71, 32, 143, 222, 188, 254, 114, 170, 88, 101, 7, 209, 21, 90, 148, 149, 117, 65, 236, 103, 243, 248, 252, 221, 138, 190, 43, 159, 215, 41, 119, 78, 0, 130, 145, 25, 78, 122, 161, 121, 57, 148, 1, 29, 38, 90, 195, 54, 10, 35, 159, 99, 29, 182, 240, 133, 200, 238, 190, 255, 249, 107, 248, 140, 148, 254, 37, 3, 45, 165, 171, 189, 252, 228, 229, 22, 250, 10, 193, 226, 16, 39, 27, 105, 214, 145, 161, 102, 10, 50, 247, 230, 26, 65, 223, 164, 46, 84, 101, 84, 230, 245, 178, 8, 35, 212, 42, 247, 130, 135, 234, 58, 159, 16, 3, 124, 213, 220, 169, 241, 168, 227, 107, 174, 54, 198, 104, 123, 175, 233, 137, 222, 148, 136, 234, 54, 63, 27, 255, 9, 112, 16, 27, 195, 52, 222, 249, 134, 84, 224, 71, 195, 103, 97, 143, 191, 90, 125, 98, 226, 53, 167, 173, 166, 117, 183, 113, 103, 92, 141, 175, 241, 215, 42, 122, 68, 13, 243, 99, 64, 143, 196, 106, 96, 67, 176, 242, 92, 230, 31, 104, 131, 235, 143, 154, 167, 68, 210, 22, 134, 168, 68, 106, 85, 100, 220, 122, 20, 55, 36, 34, 210, 82, 75, 22, 251, 132, 123, 183, 49, 29, 230, 2, 194, 27, 226, 79, 200, 98, 199, 200, 46, 2, 133, 237, 107, 62, 119, 251, 42, 217, 81, 151, 20, 78, 63, 116, 189, 1, 33, 213, 70, 116, 220, 82, 140, 246, 222, 134, 98, 157, 79, 86, 225, 189, 160, 185, 207, 236, 180, 57, 155, 206, 208, 73, 109, 233, 232, 19, 109, 226, 252, 234, 251, 100, 111, 87, 187, 186, 8, 124, 78, 82, 126, 80, 114, 98, 195, 12, 192, 226, 87, 223, 240, 135, 217, 128, 6, 108, 59, 53, 129, 26, 94, 230, 129, 180, 113, 215, 41, 237, 59, 196, 26, 222, 96, 11, 184, 192, 83, 227, 7, 116, 20, 59, 34, 78, 147, 244, 132, 192, 31, 105, 70, 25, 55, 1, 65, 41, 183, 180, 34, 93, 20, 153, 1, 8, 2, 16, 194, 12, 233, 24, 40, 235, 92, 153, 224, 168, 30, 108, 185, 220, 139, 94, 217, 116, 9, 172, 158, 125, 219, 79, 173, 40, 26, 27, 165, 159, 76, 31, 169, 218, 142, 62, 7, 218, 74, 46, 46, 246, 171, 60, 152, 224, 85, 4, 137, 52, 86, 197, 191, 38, 188, 252, 22, 84, 95, 31, 212, 167, 39, 46, 230, 41, 135, 86, 76, 221, 228, 60, 223, 116, 75, 212, 235, 92, 2, 242, 217, 99, 103, 79, 75, 110, 98, 223, 169, 87, 174, 59, 231, 163, 101, 160, 215, 44, 240, 115, 10, 235, 113, 13, 28, 214, 115, 252, 96, 151, 22, 81, 102, 168, 124, 236, 187, 158, 102, 146, 81, 10, 180, 199, 179, 232, 245, 145, 88, 6, 234, 152, 78, 122, 213, 106, 177, 96, 94, 42, 212, 218, 254, 41, 160, 63, 231, 79, 122, 11, 118, 30, 142, 200, 57, 243, 153, 220, 248, 21, 147, 251, 172, 7, 112, 76, 96, 200, 213, 146, 9, 51, 127, 135, 95, 202, 209, 203, 149, 178, 52, 15, 35, 24, 90, 64, 84, 158, 153, 10, 160, 94, 101, 57, 139, 217, 150, 99, 129, 240, 250, 17, 28, 104, 100, 6, 126, 72, 214, 3, 221, 185, 13, 228, 118, 106, 186, 241, 255, 43, 24, 122, 180, 108, 24, 125, 202, 198, 73, 90, 14, 199, 223, 188, 43, 254, 232, 215, 72, 183, 220, 94, 208, 59, 172, 101, 1, 51, 248, 48, 121, 126, 249, 251, 168, 139, 113, 16, 158, 204, 204, 189, 42, 145, 231, 104, 196, 212, 57, 151, 45, 90, 53, 151, 170, 19, 28, 41, 69, 181, 214, 125, 86, 35, 9, 95, 57, 138, 5, 136, 34, 223, 42, 67, 43, 63, 1, 123, 26, 200, 95, 190, 10, 189, 0, 251, 151, 157, 121, 113, 101, 94, 231, 97, 102, 229, 200, 252, 35, 136, 149, 200, 98, 205, 64, 213, 90, 175, 95, 17, 59, 142, 14, 83, 96, 53, 96, 209, 123, 231, 3, 91, 130, 93, 33, 232, 66, 66, 15, 212, 195, 47, 109, 253, 14, 77, 75, 174, 234, 4, 37, 246, 87, 87, 162, 144, 54, 179, 40, 161, 37, 17, 106, 172, 113, 110, 140, 199, 219, 42, 6, 210, 190, 52, 162, 65, 11, 116, 74, 72, 240, 215, 225, 188, 186, 140, 17, 62, 187, 150, 3, 216, 124, 16, 118, 213, 200, 184, 198, 20, 226, 125, 188, 112, 199, 248, 111, 214, 155, 95, 171, 164, 33, 15, 93, 172, 91, 216, 183, 92, 126, 83, 36, 202, 53, 96, 237, 43, 202, 195, 37, 6, 220, 55, 2, 242, 251, 156, 201, 178, 226, 60, 176, 119, 82, 172, 180, 98, 20, 168, 42, 9, 53, 102, 110, 161, 65, 74, 31, 164, 108, 133, 184, 255, 119, 17, 113, 186, 255, 192, 150, 202, 111, 180, 234, 195, 234, 203, 180, 242, 88, 187, 156, 166, 51, 253, 180, 240, 144, 109, 45, 206, 142, 102, 53, 32, 55, 25, 214, 241, 66, 120, 95, 115, 145, 9, 27, 126, 85, 43, 94, 58, 116, 31, 150, 205, 46, 117, 6, 104, 58, 39, 72, 170, 179, 118, 5, 95, 36, 163, 226, 211, 92, 196, 251, 151, 170, 88, 1, 142, 148, 207, 115, 20, 86, 120, 6, 18, 58, 97, 44, 206, 156, 128, 140, 154, 6, 244, 220, 21, 237, 138, 45, 83, 204, 99, 79, 144, 86, 31, 103, 144, 255, 23, 112, 198, 197, 172, 241, 44, 142, 48, 170, 175, 112, 224, 166, 55, 148, 35, 202, 208, 88, 131, 251, 164, 89, 35, 214, 245, 188, 147, 165, 18, 235, 154, 201, 208, 245, 230, 139, 51, 209, 107, 101, 151, 128, 247, 216, 58, 10, 125, 171, 47, 132, 168, 218, 7, 157, 253, 90, 132, 6, 64, 125, 239, 189, 169, 217, 57, 8, 175, 229, 117, 58, 10, 217, 155, 103, 211, 5, 96, 114, 187, 239, 146, 213, 213, 185, 35, 132, 223, 242, 186, 74, 149, 58, 137, 82, 10, 15, 14, 21, 150, 126, 247, 205, 143, 78, 131, 145, 53, 128, 147, 198, 75, 73, 239, 210, 140, 16, 208, 92, 249, 235, 134, 6, 204, 167, 48, 144, 76, 162, 180, 17, 118, 135, 72, 204, 95, 124, 135, 93, 246, 254, 177, 65, 34, 69, 178, 120, 71, 124, 6, 14, 37, 96, 102, 2, 102, 141, 53, 149, 81, 190, 26, 49, 123, 205, 26, 245, 234, 113, 151, 130, 105, 15, 163, 31, 14, 163, 88, 190, 41, 44, 243, 150, 247, 27, 109, 219, 47, 156, 153, 156, 74, 72, 178, 209, 12, 141, 244, 92, 103, 170, 51, 239, 51, 125, 146, 216, 22, 99, 140, 47, 211, 95, 206, 1, 228, 188, 18, 35, 157, 170, 6, 223, 201, 213, 37, 161, 239, 155, 65, 253, 146, 33, 223, 54, 234, 224, 11, 151, 71, 161, 1, 173, 190, 60, 78, 129, 53, 173, 252, 77, 252, 253, 168, 131, 16, 184, 171, 91, 243, 48, 246, 74, 243, 65, 38, 31, 192, 189, 118, 113, 210, 120, 19, 135, 153, 103, 75, 43, 69, 72, 96, 34, 167, 128, 174, 135, 243, 158, 148, 85, 137, 100, 87, 244, 58, 188, 143, 121, 24, 122, 214, 152, 74, 59, 242, 12, 252, 112, 59, 113, 200, 242, 219, 81, 184, 13, 175, 150, 65, 254, 245, 90, 109, 94, 244, 149, 114, 252, 108, 168, 230, 63, 182, 62, 245, 215, 172, 58, 120, 184, 127, 100, 161, 227, 41, 109, 1, 81, 195, 162, 116, 205, 233, 108, 214, 117, 205, 152, 225, 173, 74, 109, 135, 143, 166, 219, 180, 235, 248, 185, 243, 219, 55, 177, 81, 57, 107, 22, 28, 248, 242, 183, 158, 148, 22, 158, 88, 128, 114, 105, 241, 74, 178, 151, 136, 46, 193, 12, 249, 173, 53, 153, 160, 116, 32, 107, 13, 81, 75, 211, 64, 4, 111, 205, 99, 32, 46, 30, 6, 72, 116, 131, 223, 132, 144, 158, 161, 253, 174, 244, 171, 202, 77, 136, 76, 27, 47, 48, 222, 229, 51, 98, 131, 137, 240, 114, 234, 180, 100, 191, 117, 107, 28, 198, 165, 239, 96, 192, 73, 185, 41, 102, 11, 55, 179, 78, 161, 216, 5, 37, 231, 4, 152, 145, 216, 42, 168, 78, 142, 124, 251, 17, 34, 224, 204, 51, 185, 19, 6, 54, 165, 156, 172, 144, 254, 108, 168, 218, 119, 229, 192, 170, 45, 14, 122, 238, 80, 86, 103, 82, 133, 112, 215, 143, 200, 12, 35, 79, 146, 152, 191, 124, 64, 34, 195, 221, 227, 59, 132, 225, 224, 47, 48, 143, 50, 155, 148, 90, 30, 255, 74, 99, 120, 49, 21, 58, 171, 152, 36, 222, 221, 218, 246, 166, 59, 113, 236, 53, 85, 118, 172, 43, 92, 96, 182, 153, 194, 162, 227, 9, 89, 77, 115, 196, 142, 102, 181, 253, 122, 63, 185, 43, 78, 99, 228, 2, 129, 65, 13, 190, 191, 164, 145, 236, 245, 44, 198, 106, 32, 129, 84, 230, 15, 110, 245, 120, 63, 80, 14, 153, 228, 64, 205, 76, 196, 231, 185, 167, 216, 118, 163, 182, 91, 212, 154, 198, 17, 154, 200, 243, 12, 174, 161, 199, 1, 228, 190, 14, 49, 249, 122, 150, 124, 94, 176, 176, 171, 34, 223, 73, 247, 52, 181, 25, 170, 205, 53, 22, 254, 45, 235, 6, 113, 22, 138, 32, 133, 65, 95, 152, 193, 40, 149, 253, 174, 42, 172, 99, 150, 253, 210, 230, 198, 165, 214, 236, 198, 171, 255, 63, 22, 96, 81, 122, 144, 199, 237, 227, 246, 190, 71, 4, 239, 139, 179, 179, 91, 27, 250, 23, 141, 147, 73, 173, 208, 254, 122, 112, 74, 114, 100, 131, 229, 141, 24, 94, 149, 92, 126, 123, 183, 96, 6, 67, 69, 106, 52, 143, 106, 168, 179, 219, 121, 158, 183, 132, 180, 197, 195, 24, 176, 79, 152, 155, 215, 79, 23, 159, 218, 166, 127, 100, 135, 21, 208, 85, 197, 159, 169, 179, 246, 206, 87, 196, 226, 134, 76, 92, 204, 2, 107, 201, 231, 203, 181, 116, 76, 181, 128, 5, 66, 7, 147, 135, 27, 87, 247, 123, 103, 85, 46, 195, 175, 82, 173, 10, 205, 51, 51, 163, 233, 60, 228, 93, 206, 33, 121, 212, 4, 165, 36, 11, 24, 182, 230, 199, 7, 179, 118, 216, 26, 181, 64, 178, 161, 144, 173, 202, 217, 61, 191, 103, 121, 234, 225, 91, 1, 150, 153, 217, 179, 91, 8, 123, 243, 46, 11, 115, 232, 39, 25, 169, 114, 53, 52, 97, 18, 219, 161, 23, 190, 191, 36, 12, 167, 27, 188, 216, 20, 144, 220, 189, 149, 198, 226, 74, 190, 156, 116, 28, 77, 59, 13, 235, 59, 196, 213, 55, 248, 101, 126, 154, 105, 139, 94, 83, 90, 1, 222, 23, 107, 102, 178, 127, 177, 32, 78, 6, 199, 60, 64, 102, 80, 207, 100, 86, 218, 147, 129, 57, 13, 124, 160, 244, 20, 168, 183, 227, 38, 110, 65, 46, 164, 61, 236, 225, 183, 109, 107, 83, 249, 186, 255, 210, 126, 136, 205, 143, 135, 97, 39, 0, 94, 204, 53, 48, 129, 216, 34, 125, 231, 151, 67, 197, 145, 94, 7, 115, 160, 236, 191, 197, 43, 33, 213, 214, 240, 163, 237, 5, 97, 43, 23, 131, 147, 171, 94, 177, 113, 30, 120, 33, 229, 123, 70, 72, 43, 48, 189, 183, 54, 151, 8, 145, 114, 180, 112, 243, 94, 51, 167, 138, 254, 159, 239, 180, 44, 87, 59, 56, 207, 18, 206, 152, 51, 153, 243, 113, 48, 55, 134, 17, 61, 136, 39, 188, 59, 166, 59, 119, 136, 179, 153, 82, 167, 64, 74, 156, 245, 193, 251, 242, 187, 40, 147, 104, 52, 23, 166, 206, 86, 73, 45, 148, 77, 23, 248, 164, 149, 46, 119, 71, 178, 70, 40, 202, 179, 83, 99, 218, 122, 100, 123, 189, 62, 198, 204, 214, 216, 223, 109, 245, 180, 207, 109, 92, 185, 8, 66, 244, 254, 91, 121, 46, 49, 83, 208, 116, 25, 149, 87, 36, 223, 87, 5, 175, 214, 37, 17, 93, 167, 21, 184, 0, 83, 201, 104, 202, 186, 242, 105, 251, 173, 119, 82, 111, 250, 156, 67, 118, 177, 58, 102, 41, 147, 64, 85, 163, 136, 248, 247, 95, 13, 15, 65, 215, 16, 101, 104, 69, 5, 20, 212, 254, 132, 19, 52, 38, 250, 63, 33, 220, 29, 37, 229, 83, 4, 79, 209, 162, 93, 147, 128, 64, 119, 168, 62, 222, 240, 193, 135, 20, 63, 168, 234, 20, 56, 171, 142, 42, 99, 133, 135, 212, 105, 213, 240, 145, 134, 42, 179, 82, 4, 147, 135, 172, 62, 232, 3, 69, 18, 99, 144, 215, 184, 11, 222, 246, 236, 9, 167, 16, 242, 77, 237, 48, 13, 155, 79, 131, 241, 11, 44, 72, 195, 46, 84, 140, 172, 136, 207, 180, 31, 76, 152, 163, 102, 118, 131, 119, 202, 145, 155, 234, 102, 102, 211, 233, 91, 198, 76, 147, 201, 249, 61, 91, 8, 141, 124, 212, 234, 101, 153, 87, 180, 141, 29, 57, 83, 254, 129, 207, 179, 51, 249, 70, 209, 179, 173, 86, 37, 143, 36, 134, 78, 41, 99, 73, 241, 238, 232, 10, 235, 115, 120, 135, 86, 165, 82, 127, 43, 77, 199, 156, 103, 235, 35, 8, 179, 24, 132, 150, 62, 48, 220, 79, 8, 239, 105, 102, 238, 148, 24, 164, 193, 227, 96, 135, 71, 174, 202, 74, 161, 31, 140, 187, 54, 223, 216, 62, 22, 109, 48, 205, 54, 39, 216, 123, 99, 242, 72, 8, 134, 21, 233, 101, 146, 125, 158, 62, 197, 163, 209, 144, 255, 136, 233, 137, 119, 176, 98, 202, 240, 80, 220, 224, 224, 104, 44, 6, 246, 35, 183, 138, 167, 177, 114, 193, 48, 216, 50, 113, 64, 22, 189, 103, 250, 201, 246, 108, 229, 59, 222, 191, 130, 55, 221, 142, 15, 69, 143, 1, 28, 89, 144, 116, 124, 168, 73, 19, 163, 109, 92, 123, 208, 42, 192, 110, 158, 51, 125, 106, 32, 31, 172, 197, 130, 181, 7, 160, 194, 146, 16, 117, 107, 147, 52, 65, 193, 77, 24, 172, 21, 246, 147, 240, 26, 242, 111, 154, 215, 183, 173, 199, 197, 25, 108, 24, 140, 247, 101, 15, 170, 217, 62, 101, 85, 34, 249, 91, 98, 72, 14, 221, 203, 181, 190, 48, 126, 168, 47, 108, 40, 145, 141, 107, 30, 228, 51, 37, 100, 100, 233, 109, 17, 174, 44, 160, 36, 101, 47, 164, 19, 146, 191, 247, 2, 192, 191, 153, 151, 81, 33, 103, 211, 205, 24, 53, 14, 114, 159, 102, 47, 14, 139, 52, 50, 126, 24, 253, 169, 120, 69, 121, 230, 54, 27, 213, 9, 116, 173, 159, 49, 200, 240, 191, 202, 183, 221, 244, 82, 15, 41, 5, 227, 0, 24, 247, 227, 189, 41, 59, 60, 163, 207, 112, 76, 94, 57, 45, 200, 212, 238, 183, 68, 89, 60, 67, 90, 243, 208, 81, 164, 111, 184, 196, 227, 155, 129, 227, 190, 130, 46, 233, 68, 250, 209, 2, 15, 188, 254, 110, 238, 251, 4, 235, 241, 247, 20, 164, 184, 163, 194, 35, 52, 3, 229, 164, 192, 210, 254, 89, 222, 110, 138, 5, 252, 52, 167, 232, 20, 168, 8, 199, 58, 223, 111, 189, 29, 24, 44, 148, 186, 22, 204, 219, 46, 217, 32, 141, 35, 181, 70, 238, 180, 103, 247, 115, 38, 237, 178, 193, 104, 224, 214, 190, 108, 255, 151, 27, 156, 121, 251, 234, 227, 155, 90, 186, 87, 89, 88, 10, 56, 254, 152, 225, 197, 24, 193, 208, 101, 105, 245, 126, 54, 25, 159, 204, 68, 65, 56, 239, 102, 83, 113, 160, 79, 234, 155, 137, 190, 173, 108, 120, 141, 62, 136, 173, 23, 64, 31, 199, 204, 100, 22, 238, 95, 34, 5, 255, 245, 137, 161, 183, 29, 149, 176, 170, 156, 110, 172, 83, 159, 92, 212, 133, 144, 27, 170, 62, 235, 200, 236, 179, 45, 106, 138, 175, 74, 82, 119, 76, 66, 157, 33, 136, 6, 139, 9, 62, 49, 199, 216, 245, 16, 201, 251, 103, 83, 65, 46, 213, 12, 149, 169, 241, 245, 63, 211, 21, 8, 77, 33, 219, 191, 225, 132, 12, 72, 28, 190, 247, 213, 103, 27, 87, 113, 162, 206, 93, 156, 160, 150, 241, 141, 236, 164, 226, 64, 172, 234, 148, 236, 207, 3, 12, 52, 254, 75, 174, 61, 31, 15, 219, 137, 6, 173, 141, 63, 78, 36, 63, 173, 91, 157, 6, 156, 233, 255, 105, 228, 210, 23, 30, 190, 31, 159, 164, 84, 198, 184, 128, 67, 189, 43, 91, 4, 96, 188, 97, 233, 173, 77, 45, 100, 159, 156, 186, 20, 83, 47, 33, 19, 254, 137, 54, 233, 125, 238, 125, 250, 93, 244, 162, 20, 241, 156, 55, 1, 91, 36, 131, 119, 82, 238, 218, 177, 199, 192, 34, 71, 126, 199, 65, 223, 45, 247, 247, 160, 50, 202, 224, 161, 249, 47, 24, 222, 96, 30, 35, 149, 230, 243, 40, 205, 196, 27, 162, 193, 172, 197, 205, 168, 12, 17, 244, 202, 97, 137, 230, 21, 247, 147, 153, 29, 200, 89, 4, 38, 151, 217, 162, 138, 67, 193, 238, 10, 88, 49, 237, 184, 232, 123, 62, 144, 153, 77, 183, 38, 123, 93, 131, 153, 1, 235, 188, 225, 191, 211, 243, 39, 219, 45, 49, 119, 154, 30, 176, 15, 239, 39, 71, 158, 183, 239, 91, 206, 54, 52, 207, 80, 63, 47, 94, 203, 63, 143, 17, 27, 15, 93, 76, 227, 124, 136, 26, 224, 60, 58, 3, 16, 188, 52, 29, 63, 163, 97, 109, 204, 241, 87, 85, 195, 0, 184, 51, 88, 189, 166, 52, 85, 238, 51, 168, 155, 181, 175, 40, 150, 50, 118, 106, 195, 51, 155, 24, 189, 213, 128, 70, 198, 171, 114, 181, 246, 114, 213, 0, 53, 117, 168, 152, 54, 168, 5, 145, 95, 4, 172, 43, 232, 193, 235, 32, 216, 68, 59, 21, 62, 191, 102, 83, 19, 180, 178, 34, 62, 199, 248, 140, 127, 199, 179, 54, 36, 8, 48, 67, 251, 232, 182, 140, 103, 73, 184, 3, 6, 104, 251, 161, 51, 161, 25, 159, 61, 142, 14, 113, 181, 28, 231, 56, 178, 218, 41, 212, 165, 39, 105, 207, 45, 67, 120, 8, 115, 22, 243, 105, 14, 156, 146, 189, 184, 11, 125, 199, 156, 109, 72, 135, 155, 242, 7, 46, 167, 247, 47, 88, 146, 170, 227, 203, 51, 83, 174, 137, 160, 172, 71, 8, 19, 156, 35, 251, 82, 18, 174, 0, 65, 237, 69, 179, 195, 17, 33, 171, 185, 189, 68, 145, 94, 95, 30, 240, 43, 8, 188, 129, 15, 236, 119, 245, 53, 171, 175, 223, 99, 24, 44, 182, 10, 247, 115, 6, 183, 189, 160, 248, 199, 124, 90, 103, 41, 62, 96, 168, 94, 254, 51, 110, 71, 178, 86, 118, 245, 43, 249, 201, 144, 8, 152, 8, 183, 31, 123, 136, 69, 71, 210, 90, 62, 112, 206, 255, 135, 218, 226, 178, 248, 123, 21, 232, 82, 226, 248, 93, 19, 34, 175, 47, 155, 180, 82, 171, 194, 115, 209, 101, 46, 16, 66, 164, 249, 239, 76, 217, 43, 195, 159, 31, 104, 111, 252, 218, 241, 166, 252, 12, 38, 79, 125, 13, 102, 146, 73, 121, 120, 111, 188, 121, 87, 165, 121, 131, 193, 166, 136, 88, 249, 225, 202, 254, 65, 234, 154, 79, 45, 227, 23, 76, 232, 101, 87, 184, 212, 16, 77, 11, 56, 209, 191, 27, 171, 106, 42, 247, 3, 98, 0, 158, 115, 12, 136, 8, 71, 105, 183, 223, 82, 226, 8, 236, 218, 137, 56, 231, 62, 252, 85, 150, 14, 12, 47, 252, 1, 70, 8, 250, 60, 146, 45, 59, 195, 159, 104, 173, 67, 1, 145, 227, 192, 59, 145, 176, 75, 73, 148, 130, 7, 191, 5, 51, 186, 60, 139, 47, 215, 220, 89, 196, 8, 43, 25, 198, 127, 29, 70, 173, 30, 42, 27, 176, 171, 127, 81, 145, 223, 19, 232, 253, 58, 54, 211, 252, 59, 179, 117, 248, 207, 123, 187, 152, 191, 241, 119, 183, 47, 211, 43, 179, 15, 219, 236, 89, 242, 155, 78, 202, 208, 111, 204, 161, 125, 82, 153, 241, 163, 133, 181, 64, 223, 65, 255, 155, 79, 239, 70, 34, 181, 224, 157, 33, 104, 235, 173, 128, 118, 140, 227, 79, 131, 104, 241, 117, 116, 171, 192, 199, 98, 63, 166, 250, 2, 156, 170, 31, 123, 168, 135, 127, 18, 187, 109, 250, 208, 212, 121, 254, 27, 101, 186, 187, 193, 220, 64, 171, 129, 35, 91, 53, 222, 162, 205, 69, 24, 123, 29, 235, 29, 146, 204, 74, 221, 142, 201, 144, 18, 38, 58, 221, 162, 61, 69, 26, 152, 151, 77, 157, 14, 185, 190, 199, 172, 16, 82, 92, 179, 84, 74, 220, 81, 53, 231, 187, 81, 217, 251, 200, 128, 238, 242, 107, 133, 237, 74, 100, 215, 43, 162, 139, 69, 75, 81, 156, 100, 159, 200, 193, 245, 86, 32, 129, 95, 198, 16, 221, 252, 231, 182, 53, 111, 35, 239, 149, 83, 104, 203, 206, 169, 73, 94, 60, 68, 30, 167, 67, 95, 64, 44, 103, 89, 149, 37, 203, 41, 242, 199, 212, 212, 215, 34, 139, 11, 241, 157, 94, 64, 4, 190, 102, 64, 57, 53, 130, 149, 69, 1, 108, 101, 211, 36, 137, 69, 161, 238, 223, 133, 176, 169, 151, 128, 136, 26, 45, 127, 76, 213, 9, 113, 49, 132, 85, 111, 178, 83, 153, 182, 120, 80, 16, 48, 171, 230, 235, 96, 150, 181, 0, 218, 180, 222, 140, 239, 166, 221, 175, 76, 169, 153, 40, 61, 198, 13, 212, 14, 45, 58, 142, 103, 186, 228, 225, 177, 133, 5, 211, 96, 94, 194, 17, 145, 241, 231, 219, 6, 239, 155, 252, 41, 242, 98, 190, 154, 161, 242, 99, 60, 190, 191, 128, 117, 183, 252, 190, 200, 51, 141, 1, 59, 105, 9, 118, 188, 194, 140, 94, 227, 119, 182, 82, 55, 89, 43, 58, 210, 62, 120, 34, 80, 126, 225, 200, 191, 91, 11, 118, 198, 204, 122, 228, 87, 170, 171, 216, 111, 18, 164, 187, 211, 99, 186, 51, 32, 118, 22, 199, 244, 209, 24, 91, 208, 152, 167, 202, 220, 89, 122, 176, 220, 162, 150, 146, 62, 36, 45, 116, 125, 50, 55, 167, 109, 163, 222, 44, 63, 16, 171, 238, 68, 41, 180, 65, 201, 49, 130, 222, 86, 107, 160, 4, 212, 168, 211, 163, 41, 146, 212, 63, 211, 179, 36, 175, 118, 149, 65, 98, 151, 1, 31, 160, 193, 100, 76, 163, 164, 173, 131, 188, 185, 132, 60, 18, 156, 216, 67, 146, 98, 216, 205, 200, 96, 52, 62, 47, 213, 167, 23, 63, 98, 69, 215, 224, 117, 238, 136, 16, 39, 149, 195, 57, 148, 57, 153, 80, 98, 210, 17, 8, 38, 13, 123, 174, 125, 221, 50, 137, 43, 197, 157, 12, 30, 17, 199, 255, 94, 76, 160, 18, 222, 37, 104, 7, 68, 14, 30, 47, 31, 101, 249, 32, 59, 21, 126, 210, 115, 144, 207, 176, 84, 55, 100, 12, 141, 50, 179, 231, 171, 254, 185, 233, 9, 127, 53, 103, 200, 213, 76, 112, 221, 200, 125, 45, 33, 249, 63, 127, 86, 143, 150, 14, 81, 57, 181, 177, 155, 222, 156, 251, 166, 54, 94, 167, 46, 63, 152, 66, 17, 203, 226, 159, 69, 136, 251, 239, 176, 56, 2, 31, 160, 181, 30, 63, 166, 31, 95, 162, 123, 197, 117, 17, 131, 45, 46, 121, 232, 36, 236, 141, 147, 203, 74, 56, 85, 224, 210, 108, 12, 144, 67, 167, 56, 72, 14, 29, 70, 59, 171, 233, 88, 108, 192, 238, 254, 87, 158, 190, 161, 235, 63, 190, 65, 111, 6, 146, 102, 6, 56, 207, 150, 58, 216, 162, 188, 242, 125, 78, 79, 159, 40, 248, 105, 60, 255, 167, 220, 237, 151, 33, 220, 94, 201, 45, 45, 52, 237, 82, 98, 79, 10, 252, 111, 251, 224, 118, 108, 60, 189, 144, 123, 21, 83, 121, 197, 246, 115, 171, 171, 241, 79, 79, 28, 71, 0, 129, 131, 202, 125, 130, 111, 119, 218, 207, 0, 217, 118, 218, 10, 41, 230, 183, 171, 209, 1, 68, 207, 126, 226, 1, 172, 254, 182, 247, 51, 38, 188, 130, 23, 222, 253, 179, 148, 65, 136, 62, 232, 62, 37, 191, 158, 126, 206, 14, 164, 195, 72, 231, 16, 236, 228, 226, 21, 116, 252, 78, 79, 28, 177, 133, 175, 88, 57, 59, 114, 223, 7, 193, 34, 251, 220, 108, 154, 116, 253, 96, 169, 1, 173, 119, 4, 153, 46, 100, 69, 89, 33, 11, 185, 208, 189, 92, 165, 219, 178, 92, 60, 208, 225, 93, 37, 218, 127, 218, 40, 49, 142, 211, 221, 54, 96, 55, 7, 175, 72, 1, 153, 209, 144, 60, 202, 249, 134, 73, 205, 109, 124, 182, 32, 247, 150, 159, 152, 81, 189, 20, 8, 136, 240, 171, 109, 58, 71, 115, 210, 70, 93, 124, 34, 249, 31, 97, 34, 231, 1, 223, 156, 241, 81, 136, 18, 115, 217, 195, 133, 205, 105, 209, 177, 187, 240, 248, 218, 91, 156, 122, 49, 44, 170, 119, 31, 73, 215, 68, 112, 109, 74, 8, 120, 41, 155, 160, 245, 9, 51, 85, 186, 251, 155, 76, 8, 156, 206, 117, 17, 164, 166, 223, 50, 58, 107, 84, 67, 193, 89, 90, 249, 202, 229, 109, 252, 29, 201, 214, 174, 50, 50, 237, 216, 95, 158, 252, 20, 161, 113, 8, 36, 232, 203, 178, 11, 160, 44, 220, 24, 2, 25, 47, 19, 39, 114, 21, 30, 237, 98, 1, 85, 76, 189, 6, 139, 68, 162, 209, 97, 205, 176, 48, 58, 48, 116, 45, 52, 91, 125, 122, 10, 88, 215, 241, 215, 27, 117, 232, 15, 169, 5, 190, 14, 129, 80, 67, 5, 21, 172, 196, 20, 66, 184, 49, 66, 143, 105, 198, 213, 173, 119, 50, 208, 188, 178, 119, 87, 1, 58, 204, 129, 13, 131, 113, 165, 170, 14, 89, 160, 157, 152, 144, 12, 26, 237, 113, 91, 141, 47, 84, 15, 127, 54, 135, 120, 147, 188, 55, 16, 182, 134, 95, 58, 172, 250, 150, 153, 137, 148, 179, 29, 75, 37, 101, 38, 96, 243, 135, 114, 255, 199, 181, 48, 113, 111, 160, 127, 124, 194, 128, 171, 9, 50, 1, 42, 1, 179, 171, 190, 146, 219, 227, 201, 193, 193, 165, 177, 237, 176, 112, 218, 3, 190, 221, 205, 170, 44, 108, 36, 165, 183, 35, 69, 188, 8, 247, 123, 81, 248, 179, 34, 119, 175, 8, 28, 31, 168, 206, 16, 116, 60, 126, 177, 254, 10, 223, 28, 65, 176, 33, 94, 238, 19, 153, 5, 240, 176, 30, 56, 242, 100, 174, 63, 14, 40, 118, 161, 193, 232, 86, 132, 53, 90, 164, 39, 171, 197, 51, 16, 91, 28, 67, 68, 163, 137, 222, 3, 139, 167, 117, 93, 226, 137, 128, 232, 9, 218, 167, 196, 31, 215, 144, 6, 31, 149, 123, 80, 188, 32, 1, 126, 88, 71, 127, 116, 152, 96, 102, 139, 102, 185, 41, 103, 225, 102, 113, 20, 168, 177, 137, 247, 113, 171, 200, 159, 191, 110, 35, 145, 192, 195, 76, 68, 69, 216, 66, 26, 186, 129, 248, 85, 77, 171, 53, 109, 66, 143, 164, 192, 109, 117, 103, 187, 92, 81, 125, 91, 32, 60, 29, 83, 80, 33, 48, 115, 123, 52, 212, 15, 173, 21, 23, 43, 87, 83, 176, 189, 107, 4, 85, 9, 39, 199, 107, 60, 114, 156, 177, 189, 158, 200, 185, 209, 16, 157, 74, 155, 106, 88, 10, 193, 172, 103, 8, 241, 23, 95, 39, 134, 36, 248, 20, 9, 243, 45, 84, 169, 193, 136, 7, 250, 234, 213, 179, 141, 102, 158, 85, 198, 120, 162, 77, 194, 140, 70, 147, 86, 42, 193, 131, 166, 236, 111, 96, 26, 53, 35, 204, 19, 161, 37, 8, 126, 49, 224, 56, 231, 78, 216, 55, 211, 76, 128, 106, 9, 254, 5, 25, 135, 128, 241, 121, 203, 43, 25, 200, 89, 186, 49, 72, 67, 221, 187, 249, 96, 231, 16, 29, 100, 211, 233, 45, 85, 95, 52, 121, 174, 241, 240, 84, 169, 165, 139, 32, 235, 7, 129, 72, 94, 95, 85, 217, 23, 240, 87, 88, 143, 82, 171, 66, 121, 41, 216, 154, 9, 179, 27, 20, 195, 59, 145, 143, 37, 77, 88, 29, 82, 108, 8, 182, 187, 121, 53, 39, 157, 121, 51, 128, 136, 132], - [131, 53, 77, 220, 183, 219, 196, 48, 228, 139, 208, 41, 249, 16, 52, 44, 105, 172, 75, 161, 38, 128, 104, 214, 175, 218, 54, 235, 2, 169, 195, 95, 233, 47, 16, 3, 234, 126, 79, 248, 68, 130, 180, 79, 177, 212, 238, 27, 5, 200, 196, 79, 47, 177, 51, 217, 129, 176, 58, 133, 42, 143, 129, 182, 77, 94, 23, 218, 124, 183, 233, 23, 168, 116, 76, 157, 62, 201, 10, 34, 195, 85, 0, 100, 229, 115, 217, 183, 15, 252, 83, 31, 67, 202, 26, 35, 153, 149, 36, 214, 44, 99, 49, 67, 195, 87, 16, 250, 127, 94, 220, 27, 192, 63, 189, 251, 47, 218, 18, 39, 200, 134, 176, 57, 10, 79, 220, 131, 78, 1, 79, 189, 216, 123, 66, 237, 221, 137, 159, 99, 142, 219, 18, 62, 208, 110, 165, 49, 179, 162, 2, 78, 41, 190, 140, 175, 127, 135, 87, 196, 254, 204, 124, 199, 59, 135, 192, 39, 32, 240, 71, 148, 223, 10, 203, 210, 165, 61, 81, 247, 18, 51, 179, 85, 48, 123, 207, 152, 226, 93, 241, 255, 64, 229, 122, 179, 204, 169, 183, 206, 199, 55, 180, 249, 33, 93, 136, 96, 124, 125, 157, 76, 84, 148, 67, 68, 211, 109, 208, 3, 108, 249, 22, 11, 197, 105, 117, 53, 185, 102, 172, 78, 211, 175, 56, 190, 214, 55, 147, 243, 107, 237, 181, 249, 100, 163, 191, 198, 161, 125, 124, 110, 244, 174, 224, 191, 66, 7, 227, 107, 167, 145, 99, 46, 84, 209, 15, 167, 99, 152, 94, 227, 49, 189, 111, 37, 175, 54, 255, 193, 170, 107, 170, 55, 126, 180, 111, 138, 26, 234, 3, 97, 133, 114, 179, 0, 230, 39, 143, 187, 213, 195, 77, 191, 247, 66, 135, 182, 201, 118, 221, 159, 210, 182, 63, 48, 197, 97, 131, 65, 202, 17, 225, 80, 245, 235, 155, 62, 115, 98, 220, 4, 241, 160, 129, 118, 200, 81, 226, 153, 233, 141, 206, 227, 171, 101, 240, 209, 161, 229, 82, 154, 225, 150, 213, 250, 86, 164, 121, 70, 130, 169, 135, 189, 23, 54, 26, 140, 163, 135, 60, 229, 249, 198, 182, 194, 205, 54, 144, 139, 28, 69, 34, 101, 233, 204, 118, 18, 28, 11, 184, 194, 202, 143, 57, 18, 49, 73, 214, 216, 211, 197, 32, 2, 183, 217, 87, 201, 94, 19, 137, 33, 151, 113, 247, 29, 126, 253, 253, 190, 69, 44, 76, 118, 53, 42, 210, 3, 230, 225, 143, 122, 255, 67, 36, 123, 32, 112, 95, 251, 119, 144, 214, 222, 184, 207, 119, 210, 176, 249, 185, 107, 52, 169, 206, 54, 99, 123, 9, 8, 13, 255, 223, 155, 72, 39, 104, 202, 65, 176, 229, 100, 232, 98, 120, 152, 45, 46, 78, 234, 71, 92, 136, 91, 97, 170, 21, 208, 68, 163, 161, 239, 187, 7, 242, 69, 163, 55, 165, 174, 124, 215, 108, 103, 238, 207, 126, 180, 89, 203, 31, 48, 76, 11, 251, 9, 227, 220, 134, 148, 139, 129, 145, 247, 70, 242, 158, 92, 215, 138, 215, 35, 218, 57, 245, 123, 136, 149, 104, 102, 21, 251, 223, 70, 0, 140, 143, 86, 105, 127, 210, 16, 229, 243, 53, 208, 223, 39, 67, 188, 68, 130, 30, 224, 146, 229, 134, 212, 106, 9, 137, 52, 14, 172, 123, 74, 107, 215, 162, 226, 163, 57, 62, 174, 19, 245, 124, 162, 236, 99, 73, 189, 42, 6, 47, 78, 203, 237, 144, 131, 175, 35, 72, 58, 118, 232, 34, 123, 89, 14, 148, 219, 126, 26, 227, 208, 253, 101, 209, 7, 52, 79, 131, 78, 210, 169, 119, 64, 68, 31, 94, 56, 27, 166, 0, 71, 239, 174, 84, 252, 139, 64, 71, 201, 246, 195, 42, 207, 135, 49, 118, 24, 66, 97, 58, 193, 125, 153, 178, 199, 39, 127, 249, 32, 18, 176, 78, 188, 176, 230, 93, 192, 248, 94, 192, 217, 61, 222, 226, 58, 132, 74, 15, 61, 221, 40, 199, 214, 82, 72, 223, 72, 246, 101, 123, 4, 79, 137, 141, 221, 152, 100, 233, 83, 178, 116, 229, 246, 76, 21, 24, 172, 146, 108, 209, 199, 75, 23, 227, 162, 142, 31, 125, 98, 48, 103, 65, 75, 238, 10, 78, 134, 168, 56, 249, 24, 209, 72, 75, 101, 232, 167, 236, 255, 134, 80, 237, 208, 86, 133, 104, 132, 28, 86, 212, 140, 7, 215, 177, 70, 149, 216, 62, 168, 39, 96, 222, 7, 180, 160, 87, 150, 109, 212, 190, 79, 24, 203, 25, 100, 166, 33, 188, 50, 147, 220, 217, 150, 180, 107, 63, 242, 156, 140, 241, 95, 160, 35, 149, 178, 161, 147, 228, 140, 24, 91, 122, 57, 242, 138, 183, 223, 123, 7, 225, 202, 53, 221, 201, 235, 4, 202, 238, 135, 116, 153, 157, 116, 176, 218, 189, 254, 117, 124, 46, 240, 64, 116, 83, 84, 148, 130, 128, 136, 26, 176, 176, 5, 203, 165, 147, 203, 180, 245, 189, 67, 181, 26, 9, 9, 184, 244, 231, 59, 26, 178, 125, 143, 16, 229, 125, 186, 24, 241, 164, 244, 213, 139, 237, 30, 66, 7, 92, 103, 251, 191, 64, 129, 251, 78, 70, 19, 127, 215, 80, 200, 69, 81, 43, 163, 252, 158, 151, 11, 104, 190, 60, 145, 141, 201, 186, 163, 55, 39, 28, 132, 35, 163, 138, 162, 147, 111, 206, 70, 175, 151, 205, 181, 3, 83, 209, 31, 125, 131, 172, 198, 81, 144, 107, 205, 120, 80, 129, 118, 199, 51, 86, 165, 46, 198, 32, 87, 142, 104, 212, 19, 240, 188, 211, 123, 13, 89, 181, 229, 58, 69, 85, 134, 107, 161, 168, 217, 117, 244, 142, 2, 176, 134, 146, 215, 170, 44, 227, 166, 23, 161, 214, 152, 4, 76, 184, 138, 203, 229, 22, 161, 105, 46, 44, 16, 131, 219, 114, 131, 17, 29, 232, 39, 164, 35, 50, 201, 164, 255, 144, 23, 182, 214, 236, 165, 235, 63, 128, 5, 17, 135, 242, 154, 216, 243, 174, 107, 18, 34, 30, 40, 241, 95, 42, 14, 48, 169, 112, 30, 220, 197, 233, 196, 181, 172, 38, 112, 136, 69, 236, 35, 243, 26, 127, 114, 181, 197, 94, 110, 160, 75, 54, 38, 124, 121, 238, 109, 13, 172, 35, 115, 162, 139, 128, 2, 134, 207, 141, 44, 118, 47, 87, 59, 151, 235, 169, 154, 109, 213, 180, 160, 185, 17, 77, 48, 140, 169, 176, 157, 5, 178, 157, 14, 238, 168, 186, 145, 17, 7, 5, 142, 210, 124, 145, 126, 67, 26, 12, 43, 95, 28, 216, 30, 236, 212, 240, 135, 230, 28, 193, 33, 215, 121, 79, 110, 198, 131, 190, 35, 231, 181, 224, 145, 119, 167, 161, 84, 247, 228, 94, 133, 238, 92, 53, 7, 13, 79, 141, 10, 23, 109, 254, 201, 15, 225, 109, 185, 82, 223, 104, 42, 246, 23, 99, 206, 227, 205, 123, 85, 175, 247, 143, 68, 54, 161, 62, 141, 33, 164, 94, 86, 255, 233, 72, 175, 12, 250, 199, 188, 58, 152, 153, 219, 89, 169, 112, 209, 213, 213, 48, 112, 19, 179, 99, 109, 78, 99, 0, 56, 125, 22, 33, 197, 106, 153, 2, 9, 239, 158, 114, 231, 86, 103, 83, 54, 247, 4, 231, 196, 35, 140, 85, 254, 86, 80, 66, 47, 2, 193, 104, 52, 213, 202, 214, 130, 11, 180, 156, 207, 17, 243, 121, 174, 248, 247, 177, 79, 193, 227, 59, 203, 8, 185, 55, 112, 73, 60, 194, 125, 123, 165, 175, 246, 174, 38, 145, 190, 116, 21, 247, 161, 240, 17, 160, 73, 42, 234, 78, 183, 89, 217, 166, 27, 37, 186, 238, 23, 241, 48, 26, 15, 216, 218, 10, 112, 198, 85, 93, 196, 205, 0, 246, 1, 138, 29, 0, 221, 122, 111, 70, 122, 247, 150, 131, 58, 46, 191, 115, 247, 54, 85, 36, 94, 19, 79, 10, 44, 42, 187, 45, 162, 107, 38, 212, 49, 218, 122, 112, 248, 196, 4, 76, 47, 207, 81, 238, 219, 75, 162, 37, 137, 81, 226, 35, 161, 98, 39, 41, 50, 16, 217, 23, 182, 18, 17, 31, 148, 108, 8, 231, 234, 219, 107, 218, 45, 29, 53, 2, 147, 114, 67, 157, 181, 65, 199, 134, 164, 166, 181, 96, 66, 88, 25, 140, 214, 19, 99, 200, 41, 251, 226, 118, 140, 250, 224, 227, 74, 213, 246, 213, 168, 125, 200, 151, 105, 55, 253, 244, 111, 168, 25, 145, 37, 40, 54, 140, 118, 155, 65, 244, 20, 79, 53, 55, 221, 163, 41, 129, 126, 37, 37, 249, 56, 160, 94, 143, 152, 232, 145, 100, 172, 187, 166, 23, 166, 131, 54, 97, 181, 86, 72, 198, 31, 122, 39, 2, 120, 65, 140, 142, 103, 187, 35, 66, 124, 177, 151, 10, 205, 54, 141, 88, 152, 136, 41, 108, 54, 118, 68, 241, 46, 176, 216, 196, 25, 61, 26, 13, 63, 202, 186, 179, 111, 194, 207, 120, 122, 167, 158, 91, 36, 68, 159, 153, 236, 171, 232, 73, 195, 108, 178, 199, 85, 189, 18, 113, 89, 123, 193, 232, 64, 106, 223, 231, 241, 24, 146, 102, 138, 218, 163, 186, 244, 60, 142, 131, 18, 115, 205, 221, 173, 253, 242, 37, 99, 178, 65, 92, 252, 58, 149, 235, 34, 111, 228, 235, 195, 40, 212, 110, 34, 154, 74, 202, 21, 29, 198, 24, 126, 1, 94, 143, 10, 243, 154, 34, 163, 234, 18, 49, 1, 238, 112, 209, 20, 114, 199, 230, 50, 178, 145, 2, 66, 47, 91, 189, 219, 171, 41, 15, 29, 49, 29, 85, 165, 168, 173, 255, 94, 63, 116, 245, 80, 106, 133, 1, 186, 231, 200, 167, 170, 224, 202, 10, 151, 192, 210, 218, 242, 84, 116, 84, 2, 5, 24, 195, 91, 226, 153, 68, 120, 111, 131, 182, 22, 219, 130, 197, 188, 255, 197, 195, 216, 81, 161, 59, 84, 199, 182, 5, 113, 45, 145, 232, 244, 20, 67, 62, 84, 96, 121, 214, 149, 249, 31, 179, 137, 178, 78, 229, 242, 167, 246, 234, 19, 99, 236, 94, 60, 22, 19, 162, 89, 210, 187, 13, 12, 180, 209, 222, 57, 168, 111, 147, 253, 225, 134, 137, 59, 100, 45, 97, 119, 89, 120, 118, 32, 246, 218, 82, 107, 131, 211, 27, 122, 198, 241, 181, 100, 62, 117, 191, 222, 64, 227, 78, 203, 232, 246, 10, 207, 233, 170, 7, 137, 162, 42, 61, 59, 180, 159, 221, 131, 79, 187, 102, 83, 174, 31, 82, 243, 226, 93, 66, 135, 197, 40, 196, 211, 240, 10, 213, 176, 241, 222, 66, 48, 98, 214, 22, 24, 18, 239, 212, 245, 17, 99, 220, 148, 69, 40, 26, 138, 38, 55, 99, 24, 195, 160, 213, 96, 108, 80, 119, 42, 49, 64, 107, 124, 141, 55, 44, 7, 92, 122, 93, 184, 215, 112, 172, 142, 238, 252, 101, 41, 145, 148, 62, 217, 27, 36, 174, 58, 89, 118, 250, 5, 1, 119, 171, 80, 189, 58, 246, 36, 214, 66, 101, 130, 108, 102, 64, 183, 69, 166, 149, 147, 121, 178, 145, 103, 54, 242, 30, 184, 153, 8, 61, 46, 206, 78, 134, 68, 223, 150, 157, 125, 182, 116, 21, 135, 206, 9, 3, 98, 192, 110, 99, 201, 179, 87, 166, 95, 59, 120, 129, 117, 242, 246, 213, 223, 25, 220, 29, 227, 204, 127, 12, 113, 103, 2, 50, 189, 255, 194, 143, 173, 168, 126, 156, 118, 110, 2, 39, 12, 45, 130, 100, 171, 32, 84, 148, 19, 88, 205, 190, 188, 123, 205, 236, 201, 130, 242, 191, 6, 119, 184, 186, 141, 240, 149, 95, 28, 200, 181, 213, 194, 28, 166, 21, 49, 59, 57, 174, 168, 31, 105, 220, 169, 69, 163, 200, 59, 14, 197, 51, 221, 96, 96, 237, 2, 0, 171, 255, 25, 227, 242, 85, 55, 253, 176, 119, 252, 72, 131, 209, 141, 175, 234, 231, 26, 156, 131, 74, 185, 34, 22, 175, 23, 218, 207, 223, 77, 151, 8, 41, 36, 210, 21, 49, 202, 100, 60, 50, 78, 136, 18, 159, 5, 237, 249, 0, 13, 198, 114, 239, 245, 42, 101, 96, 230, 183, 80, 139, 235, 61, 80, 237, 226, 161, 174, 182, 19, 151, 118, 163, 248, 77, 120, 7, 29, 243, 0, 50, 216, 221, 231, 242, 155, 70, 165, 136, 12, 1, 225, 58, 130, 251, 103, 202, 2, 36, 226, 174, 199, 148, 211, 132, 57, 54, 73, 230, 137, 172, 237, 237, 73, 130, 211, 131, 172, 48, 112, 251, 118, 10, 163, 198, 149, 80, 40, 137, 80, 65, 37, 16, 202, 75, 187, 82, 97, 78, 213, 58, 231, 209, 31, 188, 247, 24, 96, 84, 255, 230, 15, 168, 94, 66, 156, 71, 11, 115, 243, 33, 127, 137, 174, 159, 106, 89, 78, 108, 250, 230, 12, 114, 158, 219, 46, 195, 98, 214, 109, 20, 60, 225, 128, 245, 200, 157, 138, 33, 117, 163, 63, 191, 182, 104, 123, 169, 45, 74, 227, 5, 172, 156, 68, 191, 227, 146, 35, 179, 127, 31, 49, 193, 88, 27, 176, 224, 109, 39, 39, 236, 181, 181, 170, 78, 17, 57, 191, 9, 124, 220, 205, 11, 155, 170, 185, 228, 34, 137, 105, 71, 218, 50, 17, 224, 36, 65, 121, 145, 25, 47, 86, 177, 36, 198, 52, 79, 84, 143, 106, 18, 93, 138, 237, 95, 58, 131, 64, 189, 103, 38, 181, 179, 105, 97, 51, 206, 199, 55, 245, 52, 33, 81, 121, 38, 47, 53, 227, 212, 114, 64, 74, 241, 253, 82, 148, 236, 121, 115, 227, 77, 90, 196, 197, 166, 95, 52, 178, 140, 203, 223, 196, 151, 29, 60, 34, 74, 89, 73, 19, 51, 86, 250, 203, 71, 5, 47, 107, 62, 114, 134, 87, 124, 179, 204, 38, 11, 126, 38, 190, 236, 197, 5, 192, 212, 209, 57, 73, 81, 30, 59, 225, 82, 207, 88, 40, 140, 176, 228, 142, 209, 109, 185, 16, 250, 252, 91, 137, 93, 37, 9, 198, 134, 208, 194, 78, 35, 230, 57, 126, 103, 170, 177, 52, 21, 11, 1, 5, 70, 41, 22, 34, 47, 11, 65, 147, 57, 25, 212, 47, 233, 245, 124, 203, 145, 218, 156, 150, 60, 212, 154, 144, 207, 209, 153, 245, 13, 19, 111, 166, 15, 213, 141, 64, 164, 7, 250, 61, 95, 170, 106, 189, 80, 89, 95, 206, 225, 100, 47, 228, 84, 206, 129, 251, 154, 166, 116, 186, 241, 140, 69, 250, 156, 239, 47, 77, 113, 85, 179, 231, 251, 238, 204, 55, 100, 219, 31, 150, 79, 116, 5, 194, 121, 75, 54, 20, 248, 249, 122, 87, 199, 177, 85, 23, 39, 108, 169, 229, 107, 130, 52, 154, 83, 198, 230, 54, 214, 112, 57, 71, 131, 181, 7, 121, 19, 227, 64, 162, 233, 139, 38, 156, 72, 130, 118, 231, 15, 100, 0, 5, 232, 168, 215, 140, 114, 146, 182, 137, 115, 9, 236, 170, 63, 251, 200, 174, 229, 177, 131, 253, 68, 179, 12, 174, 201, 153, 45, 79, 126, 128, 84, 134, 111, 249, 177, 136, 142, 64, 191, 27, 65, 21, 77, 103, 138, 255, 84, 176, 134, 85, 139, 108, 63, 187, 119, 103, 189, 8, 21, 172, 26, 164, 126, 230, 85, 38, 203, 93, 213, 77, 54, 158, 189, 119, 236, 243, 87, 79, 180, 99, 138, 120, 237, 26, 55, 152, 223, 190, 239, 8, 181, 60, 194, 47, 162, 253, 155, 168, 199, 212, 48, 186, 100, 134, 113, 4, 197, 195, 25, 217, 17, 217, 52, 209, 63, 150, 44, 252, 153, 165, 17, 48, 52, 218, 56, 140, 95, 166, 33, 69, 15, 146, 4, 220, 194, 198, 92, 41, 197, 54, 133, 140, 112, 22, 183, 129, 166, 28, 91, 38, 34, 245, 18, 230, 203, 121, 4, 105, 108, 212, 91, 127, 42, 251, 111, 90, 85, 97, 187, 15, 169, 38, 98, 78, 216, 6, 128, 13, 130, 58, 7, 9, 97, 239, 226, 213, 198, 250, 252, 60, 10, 191, 44, 8, 30, 160, 154, 96, 33, 61, 3, 71, 47, 18, 132, 241, 222, 53, 231, 15, 144, 223, 240, 73, 57, 155, 237, 112, 89, 130, 165, 12, 149, 104, 120, 3, 101, 165, 171, 196, 70, 142, 206, 61, 4, 116, 154, 237, 231, 71, 225, 72, 64, 249, 164, 249, 188, 17, 97, 72, 108, 2, 9, 44, 250, 86, 67, 222, 41, 1, 203, 228, 29, 251, 238, 189, 188, 76, 34, 101, 220, 144, 158, 64, 140, 240, 18, 219, 38, 112, 126, 255, 247, 41, 31, 150, 7, 88, 245, 14, 135, 135, 226, 247, 204, 130, 8, 136, 49, 241, 219, 15, 231, 214, 208, 253, 74, 205, 176, 85, 98, 0, 219, 134, 170, 238, 163, 14, 121, 121, 89, 238, 201, 89, 192, 103, 104, 146, 146, 255, 14, 130, 74, 80, 116, 25, 44, 5, 232, 229, 91, 176, 181, 134, 231, 10, 118, 87, 20, 255, 108, 170, 164, 177, 172, 244, 81, 7, 93, 76, 148, 211, 5, 232, 171, 142, 220, 232, 218, 248, 160, 80, 205, 32, 156, 100, 86, 170, 16, 221, 162, 246, 210, 1, 219, 85, 37, 176, 235, 239, 171, 253, 76, 84, 144, 130, 32, 111, 247, 30, 79, 189, 244, 70, 190, 147, 189, 54, 129, 215, 15, 221, 149, 87, 141, 236, 128, 166, 197, 220, 69, 62, 99, 241, 79, 255, 132, 57, 215, 36, 175, 121, 201, 137, 62, 90, 94, 94, 197, 2, 217, 162, 132, 132, 198, 210, 62, 178, 182, 159, 121, 215, 254, 50, 110, 190, 89, 20, 82, 12, 208, 154, 167, 242, 25, 159, 12, 69, 136, 128, 247, 249, 29, 197, 95, 51, 10, 129, 114, 52, 154, 97, 87, 160, 182, 88, 225, 218, 214, 9, 22, 121, 92, 175, 93, 148, 47, 139, 17, 66, 40, 204, 56, 235, 133, 216, 69, 166, 9, 113, 92, 121, 122, 7, 250, 37, 216, 174, 253, 202, 11, 228, 245, 128, 15, 114, 83, 175, 244, 190, 60, 157, 236, 127, 55, 31, 89, 171, 223, 103, 84, 148, 141, 142, 130, 119, 85, 164, 40, 201, 46, 193, 176, 23, 80, 87, 12, 76, 26, 105, 223, 133, 108, 183, 48, 226, 206, 15, 160, 199, 141, 148, 53, 167, 139, 231, 18, 208, 82, 178, 41, 176, 176, 121, 82, 208, 195, 99, 248, 134, 149, 32, 202, 249, 227, 79, 16, 230, 238, 160, 233, 170, 110, 122, 173, 154, 212, 206, 84, 163, 69, 85, 181, 209, 107, 105, 159, 57, 1, 229, 194, 24, 241, 55, 30, 151, 6, 133, 230, 80, 118, 94, 14, 133, 199, 49, 216, 181, 118, 201, 154, 236, 47, 48, 167, 196, 120, 27, 239, 121, 54, 253, 11, 186, 69, 90, 141, 130, 120, 191, 215, 241, 208, 172, 107, 79, 236, 182, 103, 244, 6, 211, 196, 21, 128, 229, 94, 246, 143, 119, 4, 175, 71, 72, 206, 128, 97, 14, 49, 88, 54, 182, 43, 112, 177, 120, 13, 253, 178, 198, 12, 209, 86, 154, 138, 27, 181, 247, 141, 23, 3, 133, 229, 203, 171, 36, 181, 37, 136, 44, 222, 168, 140, 59, 116, 161, 184, 17, 249, 16, 104, 73, 53, 235, 77, 12, 237, 65, 137, 156, 42, 4, 205, 30, 45, 58, 220, 232, 5, 253, 3, 155, 6, 71, 166, 68, 184, 244, 143, 34, 204, 140, 67, 53, 109, 250, 22, 210, 154, 147, 71, 214, 6, 52, 91, 35, 212, 191, 31, 110, 57, 135, 4, 150, 80, 212, 186, 251, 132, 63, 58, 190, 230, 8, 255, 18, 18, 45, 153, 135, 96, 66, 61, 14, 251, 77, 110, 165, 25, 89, 96, 162, 113, 190, 169, 253, 173, 136, 130, 223, 28, 47, 227, 154, 227, 228, 158, 229, 37, 25, 19, 145, 147, 93, 246, 98, 210, 137, 215, 90, 31, 142, 94, 182, 207, 53, 186, 48, 178, 223, 214, 41, 60, 157, 109, 105, 214, 76, 9, 234, 73, 21, 52, 140, 136, 162, 196, 158, 201, 101, 145, 117, 65, 57, 4, 131, 62, 15, 243, 100, 26, 77, 187, 72, 132, 209, 134, 68, 9, 182, 235, 74, 229, 74, 227, 154, 185, 112, 186, 140, 232, 185, 125, 46, 239, 229, 197, 193, 49, 79, 61, 195, 55, 60, 5, 41, 10, 221, 21, 203, 119, 34, 99, 2, 8, 149, 19, 211, 209, 147, 25, 17, 20, 58, 167, 142, 147, 123, 224, 180, 96, 123, 226, 223, 162, 3, 26, 71, 114, 241, 138, 41, 144, 14, 94, 40, 65, 34, 89, 66, 67, 28, 160, 156, 47, 180, 10, 7, 129, 159, 45, 252, 155, 86, 74, 101, 147, 166, 61, 48, 182, 51, 65, 193, 190, 77, 104, 227, 14, 234, 20, 175, 1, 236, 17, 238, 64, 34, 230, 89, 55, 161, 193, 168, 244, 201, 31, 237, 98, 128, 160, 226, 21, 152, 189, 30, 192, 48, 212, 63, 155, 53, 229, 248, 25, 88, 155, 116, 206, 168, 242, 43, 5, 70, 178, 229, 82, 44, 205, 229, 36, 76, 10, 67, 88, 205, 34, 99, 154, 151, 17, 155, 223, 65, 15, 60, 243, 25, 69, 65, 166, 91, 127, 204, 219, 242, 144, 254, 172, 187, 109, 126, 84, 198, 157, 15, 95, 251, 75, 133, 175, 239, 145, 144, 85, 23, 71, 15, 8, 231, 159, 43, 111, 199, 201, 72, 223, 36, 198, 73, 2, 9, 217, 60, 120, 218, 106, 211, 99, 183, 41, 236, 225, 115, 176, 180, 153, 105, 153, 117, 229, 184, 3, 176, 66, 48, 130, 240, 186, 161, 11, 38, 45, 218, 95, 66, 6, 9, 15, 157, 73, 122, 84, 195, 62, 46, 206, 164, 191, 101, 102, 250, 150, 34, 108, 105, 116, 31, 222, 191, 158, 45, 174, 69, 224, 114, 163, 113, 51, 203, 36, 99, 219, 24, 81, 125, 174, 169, 115, 231, 163, 55, 195, 161, 133, 255, 238, 191, 10, 35, 49, 89, 114, 141, 72, 147, 159, 119, 14, 14, 70, 58, 238, 172, 99, 105, 103, 134, 146, 76, 87, 163, 38, 0, 184, 113, 239, 21, 87, 116, 106, 147, 83, 45, 47, 25, 114, 50, 187, 153, 167, 92, 217, 173, 14, 233, 213, 202, 62, 201, 153, 39, 31, 103, 163, 189, 199, 148, 52, 31, 179, 37, 21, 91, 15, 161, 25, 200, 184, 176, 33, 116, 34, 110, 152, 118, 173, 233, 237, 122, 17, 77, 158, 23, 121, 235, 234, 111, 36, 246, 15, 216, 216, 51, 145, 35, 114, 226, 40, 147, 147, 30, 141, 231, 111, 14, 194, 17, 201, 57, 159, 121, 219, 202, 67, 176, 238, 94, 88, 66, 150, 214, 185, 24, 246, 69, 190, 213, 12, 195, 212, 193, 210, 251, 3, 1, 108, 253, 92, 200, 80, 251, 12, 115, 194, 253, 4, 182, 170, 174, 92, 95, 45, 192, 255, 49, 193, 110, 203, 175, 228, 12, 193, 123, 180, 204, 11, 179, 123, 7, 253, 209, 154, 23, 252, 39, 73, 203, 184, 227, 94, 37, 189, 27, 7, 2, 206, 72, 4, 95, 66, 73, 77, 20, 171, 2, 36, 182, 76, 159, 46, 9, 87, 172, 20, 152, 253, 160, 234, 10, 72, 131, 49, 157, 6, 88, 148, 41, 215, 221, 185, 67, 92, 114, 237, 153, 152, 107, 179, 176, 220, 70, 172, 90, 144, 122, 80, 33, 178, 235, 242, 167, 244, 162, 231, 133, 129, 28, 67, 248, 93, 42, 186, 105, 7, 91, 71, 52, 166, 136, 238, 32, 16, 167, 168, 117, 53, 90, 155, 152, 30, 0, 127, 149, 42, 169, 159, 253, 199, 51, 73, 133, 238, 12, 138, 207, 72, 55, 119, 230, 235, 226, 138, 29, 143, 157, 28, 1, 59, 77, 229, 175, 85, 69, 196, 68, 116, 200, 97, 222, 170, 83, 125, 177, 94, 237, 100, 212, 1, 94, 17, 154, 81, 176, 217, 4, 162, 170, 253, 9, 118, 234, 81, 98, 52, 117, 128, 185, 248, 196, 154, 232, 140, 203, 140, 70, 103, 23, 216, 28, 99, 14, 12, 115, 148, 102, 197, 26, 229, 255, 89, 194, 162, 135, 177, 16, 154, 238, 109, 243, 239, 77, 38, 150, 132, 162, 245, 33, 79, 157, 126, 238, 203, 182, 127, 162, 151, 178, 33, 71, 130, 229, 185, 45, 219, 16, 206, 206, 149, 67, 172, 141, 188, 206, 236, 183, 207, 121, 38, 243, 59, 27, 210, 176, 46, 73, 58, 235, 35, 189, 239, 93, 235, 47, 122, 195, 105, 107, 238, 165, 111, 1, 73, 233, 167, 205, 100, 3, 95, 94, 145, 221, 106, 147, 46, 36, 61, 51, 70, 196, 53, 214, 110, 53, 28, 114, 148, 10, 225, 252, 194, 144, 128, 140, 58, 0, 55, 187, 89, 88, 186, 48, 47, 98, 10, 175, 15, 42, 252, 81, 123, 130, 162, 81, 140, 49, 49, 99, 15, 206, 231, 236, 116, 42, 226, 55, 46, 255, 96, 74, 124, 70, 241, 143, 76, 239, 87, 33, 219, 106, 128, 67, 37, 203, 196, 159, 147, 120, 42, 144, 105, 180, 120, 38, 175, 22, 3, 186, 49, 81, 131, 34, 221, 220, 91, 196, 3, 69, 202, 9, 80, 93, 226, 100, 12, 234, 53, 33, 27, 151, 133, 236, 247, 73, 113, 169, 74, 61, 39, 121, 181, 29, 91, 2, 248, 200, 121, 244, 153, 81, 78, 38, 185, 70, 230, 138, 136, 217, 148, 154, 163, 128, 156, 219, 202, 212, 52, 73, 232, 60, 182, 99, 136, 64, 15, 195, 88, 148, 139, 179, 78, 190, 13, 120, 214, 194, 167, 231, 185, 179, 62, 89, 225, 224, 216, 254, 199, 90, 61, 12, 183, 164, 128, 190, 14, 237, 220, 53, 212, 227, 41, 139, 235, 34, 221, 191, 77, 61, 235, 125, 220, 27, 49, 42, 17, 38, 115, 38, 24, 48, 162, 46, 231, 75, 162, 38, 182, 89, 101, 35, 106, 193, 85, 97, 224, 79, 141, 241, 229, 227, 162, 191, 212, 130, 220, 121, 94, 28, 52, 147, 96, 158, 21, 187, 229, 196, 227, 212, 194, 189, 171, 240, 153, 232, 121, 243, 22, 129, 243, 232, 162, 165, 232, 209, 132, 135, 72, 98, 207, 195, 229, 29, 228, 112, 196, 85, 117, 40, 166, 223, 29, 153, 243, 16, 17, 222, 154, 86, 9, 161, 184, 242, 202, 123, 47, 47, 190, 33, 164, 239, 84, 194, 148, 4, 62, 171, 12, 123, 221, 28, 91, 24, 116, 243, 207, 87, 136, 228, 104, 218, 238, 225, 33, 150, 123, 194, 12, 198, 120, 67, 167, 243, 228, 31, 46, 157, 193, 190, 31, 34, 21, 190, 0, 16, 252, 9, 253, 144, 213, 14, 64, 99, 210, 151, 238, 211, 9, 157, 177, 111, 2, 67, 2, 136, 37, 12, 91, 147, 134, 45, 193, 50, 155, 97, 153, 107, 71, 121, 68, 139, 34, 171, 241, 49, 3, 232, 17, 118, 181, 142, 248, 57, 75, 90, 129, 153, 124, 206, 38, 108, 203, 95, 24, 100, 13, 29, 8, 14, 221, 197, 183, 82, 214, 125, 145, 229, 226, 200, 144, 127, 218, 225, 249, 177, 144, 248, 102, 114, 119, 25, 22, 189, 128, 29, 226, 172, 192, 244, 110, 125, 114, 200, 152, 42, 76, 88, 36, 226, 62, 141, 168, 140, 152, 77, 181, 200, 13, 190, 142, 73, 205, 166, 231, 153, 23, 37, 210, 237, 197, 125, 187, 21, 103, 218, 190, 16, 6, 122, 20, 128, 186, 12, 244, 66, 79, 187, 8, 246, 101, 106, 224, 150, 178, 201, 218, 226, 8, 55, 69, 28, 238, 119, 156, 23, 26, 169, 142, 70, 246, 194, 46, 213, 167, 252, 252, 188, 13, 113, 146, 210, 149, 69, 19, 147, 90, 240, 183, 32, 169, 244, 254, 114, 69, 83, 103, 24, 239, 52, 162, 173, 121, 108, 242, 135, 108, 67, 139, 4, 109, 60, 184, 69, 181, 42, 13, 159, 106, 170, 246, 34, 161, 235, 160, 67, 198, 17, 87, 214, 81, 94, 205, 50, 46, 37, 199, 146, 24, 162, 118, 23, 117, 28, 250, 56, 230, 109, 114, 41, 229, 89, 188, 21, 209, 16, 155, 211, 189, 189, 69, 65, 232, 233, 192, 169, 124, 225, 174, 102, 38, 56, 166, 56, 164, 242, 10, 87, 92, 50, 10, 196, 59, 204, 40, 182, 30, 10, 137, 32, 238, 35, 233, 164, 215, 91, 216, 62, 201, 143, 174, 135, 160, 162, 126, 252, 130, 159, 23, 220, 75, 197, 46, 28, 210, 3, 245, 152, 217, 167, 73, 215, 232, 244, 106, 122, 122, 246, 171, 76, 100, 53, 173, 32, 16, 248, 94, 64, 13, 109, 52, 123, 147, 106, 181, 80, 126, 166, 89, 243, 32, 50, 244, 123, 9, 132, 173, 246, 31, 0, 174, 44, 85, 233, 74, 214, 221, 129, 48, 75, 174, 56, 85, 249, 20, 79, 209, 249, 139, 36, 81, 16, 139, 82, 28, 24, 187, 22, 196, 115, 252, 90, 112, 237, 101, 251, 7, 42, 60, 253, 213, 92, 222, 85, 73, 51, 211, 237, 121, 17, 161, 203, 125, 108, 90, 76, 222, 37, 41, 206, 73, 167, 204, 32, 97, 87, 91, 14, 98, 126, 205, 40, 131, 0, 2, 38, 63, 68, 60, 131, 91, 38, 198, 177, 222, 188, 89, 23, 23, 169, 247, 230, 8, 97, 230, 58, 151, 238, 112, 23, 241, 169, 204, 125, 172, 106, 239, 137, 15, 169, 33, 121, 19, 29, 71, 245, 213, 177, 207, 14, 250, 140, 15, 112, 24, 25, 227, 8, 151, 86, 52, 71, 131, 44, 25, 112, 182, 193, 126, 178, 37, 183, 108, 80, 252, 195, 166, 230, 135, 48, 53, 215, 243, 105, 157, 133, 179, 253, 230, 243, 245, 252, 145, 152, 140, 205, 180, 146, 231, 138, 181, 48, 78, 204, 117, 152, 172, 77, 145, 216, 66, 200, 44, 170, 96, 149, 117, 154, 66, 179, 193, 230, 49, 133, 225, 163, 75, 36, 70, 62, 115, 75, 71, 15, 214, 245, 21, 38, 27, 99, 21, 162, 237, 6, 201, 219, 110, 172, 45, 141, 216, 76, 51, 9, 138, 110, 222, 80, 91, 101, 120, 64, 224, 1, 190, 143, 188, 149, 130, 30, 151, 38, 5, 43, 134, 217, 171, 156, 69, 156, 115, 216, 97, 111, 2, 118, 173, 165, 235, 93, 20, 187, 56, 156, 87, 244, 252, 241, 91, 75, 151, 124, 41, 189, 93, 39, 188, 3, 153, 173, 184, 204, 77, 78, 130, 74, 42, 45, 235, 191, 118, 86, 205, 55, 57, 205, 144, 165, 151, 114, 219, 153, 85, 183, 153, 61, 141, 152, 100, 197, 227, 209, 198, 130, 197, 31, 47, 118, 92, 103, 104, 197, 24, 209, 54, 70, 157, 69, 146, 224, 237, 115, 244, 13, 87, 228, 212, 192, 81, 191, 145, 139, 62, 191, 115, 197, 101, 193, 243, 180, 188, 197, 44, 45, 43, 16, 125, 21, 165, 129, 30, 210, 104, 215, 53, 212, 186, 156, 45, 233, 145, 29, 144, 149, 26, 39, 126, 87, 123, 124, 82, 118, 140, 117, 150, 142, 244, 162, 145, 240, 57, 168, 27, 159, 158, 30, 118, 205, 199, 130, 18, 203, 14, 186, 32, 90, 212, 52, 67, 225, 58, 206, 230, 107, 249, 142, 64, 99, 5, 208, 215, 218, 179, 85, 134, 206, 251, 177, 61, 222, 42, 227, 97, 209, 242, 169, 175, 138, 39, 46, 56, 188, 107, 154, 148, 187, 214, 172, 74, 83, 30, 100, 253, 239, 244, 39, 9, 82, 164, 82, 34, 56, 232, 78, 191, 152, 235, 114, 155, 70, 54, 241, 206, 117, 192, 202, 158, 21, 242, 39, 101, 245, 6, 93, 96, 74, 75, 232, 23, 234, 250, 131, 110, 167, 68, 251, 141, 191, 221, 19, 10, 228, 96, 70, 31, 61, 154, 102, 209, 229, 247, 49, 93, 56, 197, 69, 210, 251, 240, 245, 9, 180, 63, 121, 147, 248, 97, 118, 91, 51, 195, 244, 47, 246, 48, 206, 10, 110, 9, 195, 211, 219, 204, 81, 182, 58, 184, 230, 48, 247, 170, 169, 162, 15, 162, 201, 227, 5, 253, 248, 7, 181, 201, 1, 30, 126, 40, 77, 86, 222, 109, 208, 122, 208, 223, 27, 232, 92, 182, 87, 121, 184, 21, 70, 135, 108, 10, 154, 128, 162, 117, 160, 165, 71, 152, 155, 126, 244, 53, 168, 53, 21, 105, 90, 170, 248, 233, 31, 143, 166, 250, 24, 152, 16, 137, 184, 253, 95, 163, 131, 151, 146, 41, 65, 205, 90, 152, 244, 254, 200, 77, 81, 4, 6, 11, 232, 57, 29, 114, 246, 114, 29, 206, 26, 4, 31, 136, 35, 121, 118, 131, 169, 189, 64, 118, 50, 212, 111, 163, 152, 1, 186, 255, 233, 126, 172, 27, 12, 253, 255, 247, 14, 183, 39, 80, 148, 31, 114, 103, 107, 251, 249, 184, 27, 90, 129, 214, 166, 84, 109, 62, 160, 130, 99, 194, 194, 169, 199, 34, 64, 25, 86, 219, 10, 77, 48, 125, 137, 68, 220, 234, 26, 152, 177, 191, 247, 128, 143, 146, 246, 126, 87, 71, 35, 11, 10, 41, 210, 204, 51, 205, 90, 84, 229, 183, 73, 245, 205, 212, 229, 180, 3, 209, 247, 163, 171, 241, 118, 143, 90, 89, 217, 167, 115, 25, 47, 235, 15, 131, 169, 69, 247, 153, 128, 138, 79, 148, 192, 36, 93, 241, 55, 227, 23, 22, 26, 53, 49, 204, 255, 205, 24, 105, 121, 101, 78, 69, 191, 116, 196, 185, 52, 5, 184, 75, 162, 240, 198, 20, 238, 207, 251, 94, 41, 101, 224, 103, 50, 22, 184, 25, 164, 188, 159, 156, 111, 62, 148, 67, 167, 72, 189, 105, 51, 63, 218, 246, 194, 217, 81, 202, 100, 171, 4, 137, 209, 166, 185, 117, 189, 171, 128, 68, 106, 229, 241, 252, 68, 5, 218, 30, 113, 174, 181, 175, 233, 59, 33, 38, 178, 78, 177, 200, 211, 186, 119, 217, 217, 243, 201, 187, 80, 229, 163, 138, 128, 247, 169, 156, 254, 137, 154, 243, 92, 214, 223, 125, 160, 203, 45, 119, 0, 80, 75, 182, 17, 248, 141, 180, 242, 71, 74, 88, 170, 41, 99, 205, 114, 156, 253, 83, 233, 174, 25, 4, 189, 151, 31, 130, 214, 103, 45, 0, 54, 148, 55, 63, 195, 137, 31, 231, 136, 52, 83, 62, 25, 229, 191, 39, 167, 165, 140, 13, 32, 99, 82, 216, 249, 45, 100, 214, 124, 153, 138, 140, 113, 50, 47, 30, 86, 82, 250, 216, 201, 192, 148, 179, 42, 231, 230, 147, 151, 50, 221, 27, 242, 126, 211, 74, 163, 229, 64, 158, 161, 34, 118, 98, 138, 94, 66, 101, 147, 35, 78, 148, 156, 177, 213, 126, 141, 174, 223, 162, 250, 82, 124, 20, 41, 168, 229, 135, 214, 89, 205, 112, 155, 210, 87, 74, 85, 198, 182, 246, 142, 244, 102, 104, 117, 27, 5, 114, 238, 149, 147, 69, 111, 185, 117, 45, 151, 229, 236, 174, 138, 104, 175, 78, 181, 40, 49, 28, 23, 121, 144, 47, 58, 142, 214, 192, 20, 25, 205, 60, 202, 126, 106, 135, 249, 54, 209, 126, 60, 160, 107, 15, 154, 216, 27, 74, 181, 59, 255, 171, 6, 174, 2, 233, 153, 181, 195, 83, 236, 90, 59, 40, 142, 32, 11, 239, 243, 36, 89, 85, 217, 233, 145, 10, 180, 137, 8, 69, 238, 55, 117, 142, 82, 34, 72, 197, 226, 117, 101, 171, 224, 4, 223, 216, 137, 52, 196, 112, 128, 169, 136, 26, 99, 174, 245, 31, 190, 82, 172, 128, 220, 29, 32, 183, 21, 189, 10, 188, 55, 247, 219, 130, 21, 174, 236, 124, 50, 198, 156, 255, 21, 253, 224, 52, 220, 231, 116, 248, 172, 231, 183, 112, 13, 86, 42, 88, 111, 95, 46, 252, 54, 149, 93, 34, 130, 218, 171, 15, 146, 52, 94, 186, 252, 193, 99, 40, 91, 56, 131, 144, 142, 220, 106, 207, 113, 98, 218, 222, 58, 5, 108, 213, 244, 35, 159, 55, 136, 245, 182, 95, 221, 94, 9, 184, 228, 77, 252, 192, 31, 71, 248, 54, 154, 224, 142, 156, 232, 155, 14, 48, 133, 13, 60, 61, 95, 130, 67, 116, 191, 31, 83, 184, 91, 126, 97, 61, 219, 193, 84, 8, 68, 81, 78, 100, 89, 147, 110, 200, 83, 92, 64, 101, 59, 230, 240, 203, 73, 254, 147, 62, 158, 17, 72, 183, 239, 166, 186, 6, 117, 143, 188, 241, 139, 220, 46, 18, 20, 157, 111, 73, 130, 90, 35, 117, 18, 207, 61, 180, 196, 126, 30, 143, 16, 39, 65, 69, 46, 84, 31, 122, 87, 58, 21, 202, 113, 165, 38, 79, 77, 162, 170, 160, 130, 14, 153, 187, 152, 134, 181, 195, 31, 49, 2, 113, 55, 206, 12, 200, 87, 101, 104, 56, 127, 144, 223, 16, 128, 47, 162, 78, 14, 233, 180, 155, 236, 69, 218, 180, 173, 198, 96, 185, 209, 239, 136, 248, 253, 24, 69, 76, 78, 42, 243, 38, 43, 10, 98, 231, 202, 137, 84, 66, 104, 243, 209, 253, 51, 218, 167, 13, 98, 127, 55, 37, 70, 125, 220, 234, 161, 113, 4, 156, 58, 184, 56, 164, 245, 154, 208, 181, 195, 146, 213, 188, 86, 222, 61, 238, 150, 75, 209, 18, 201, 102, 1, 127, 59, 240, 96, 209, 119, 30, 208, 87, 200, 63, 1, 234, 155, 99, 98, 140, 27, 94, 255, 150, 251, 151, 112, 126, 35, 112, 73, 203, 200, 221, 170, 115, 219, 250, 18, 28, 212, 214, 162, 183, 52, 232, 20, 21, 41, 16, 47, 110, 86, 194, 138, 146, 132, 241, 16, 224, 167, 3, 78, 139, 147, 235, 61, 107, 195, 146, 57, 33, 35, 118, 69, 145, 88, 21, 52, 144, 210, 164, 151, 189, 33, 146, 174, 46, 101, 35, 6, 65, 17, 248, 142, 26, 203, 222, 34, 63, 227, 51, 167, 44, 95, 247, 4, 198, 238, 39, 217, 164, 18, 26, 37, 193, 196, 151, 242, 150, 109, 27, 18, 68, 57, 68, 134, 242, 131, 249, 241, 213, 146, 69, 185, 212, 253, 219, 117, 90, 152, 133, 95, 95, 19, 232, 127, 229, 66, 197, 32, 78, 81, 145, 56, 81, 191, 81, 202, 195, 130, 164, 170, 121, 35, 52, 56, 102, 132, 113, 18, 111, 8, 23, 92, 7, 26, 80, 240, 92, 106, 100, 253, 180, 233, 166, 81, 156, 97, 240, 173, 20, 178, 90, 198, 120, 186, 110, 159, 23, 132, 11, 31, 33, 242, 247, 131, 228, 165, 102, 37, 12, 123, 138, 198, 20, 137, 41, 216, 181, 138, 112, 218, 198, 195, 150, 102, 178, 177, 57, 191, 119, 135, 250, 178, 145, 132, 130, 36, 108, 223, 37, 206, 60, 16, 222, 113, 254, 90, 219, 53, 174, 25, 245, 31, 6, 24, 99, 204, 5, 66, 126, 18, 118, 247, 23, 83, 117, 232, 113, 169, 24, 240, 113, 34, 222, 118, 205, 255, 113, 213, 169, 23, 240, 241, 27, 222, 200, 102, 12, 231, 54, 10, 125, 179, 244, 22, 106, 189, 54, 205, 114, 113, 142, 93, 121, 102, 10, 78, 34, 173, 65, 202, 1, 125, 143, 207, 127, 70, 157, 81, 27, 213, 20, 150, 149, 133, 255, 145, 87, 221, 62, 90, 49, 171, 244, 107, 17, 124, 19, 96, 236, 253, 229, 254, 80, 147, 157, 250, 12, 165, 202, 43, 199, 95, 215, 162, 15, 21, 193, 74, 155, 239, 120, 150, 250, 126, 84, 43, 85, 182, 51, 32, 76, 244, 28, 114, 254, 252, 68, 78, 193, 186, 55, 6, 227, 185, 35, 134, 92, 225, 100, 28, 44, 204, 252, 185, 192, 9, 171, 123, 201, 185, 11, 83, 111, 165, 61, 43, 172, 165, 252, 73, 25, 19, 87, 21, 133, 227, 45, 252, 239, 177, 206, 15, 53, 243, 42, 9, 181, 91, 255, 86, 96, 32, 149, 79, 192, 109, 166, 159, 39, 118, 96, 160, 136, 219, 19, 245, 195, 60, 48, 60, 252, 129, 233, 97, 215, 112, 99, 125, 204, 21, 253, 111, 141, 84, 64, 188, 144, 4, 94, 191, 61, 74, 35, 185, 180, 214, 93, 173, 167, 214, 191, 141, 162, 65, 108, 236, 193, 72, 92, 134, 250, 233, 7, 81, 248, 171, 78, 96, 183, 249, 104, 26, 244, 37, 208, 26, 75, 191, 9, 208, 241, 246, 232, 80, 105, 157, 56, 227, 63, 251, 137, 222, 23, 14, 205, 242, 192, 80, 14, 234, 120, 201, 45, 252, 245, 144, 163, 128, 91, 40, 49, 53, 82, 114, 192, 89, 184, 25, 108, 182, 85, 138, 122, 86, 79, 172, 165, 32, 164, 38, 0, 114, 189, 164, 89, 37, 10, 209, 16, 160, 90, 81, 106, 43, 203, 218, 128, 143, 88, 14, 240, 118, 156, 24, 209, 102, 24, 213, 64, 185, 123, 100, 150, 20, 68, 2, 164, 198, 74, 142, 160, 201, 16, 160, 26, 251, 54, 61, 42, 61, 239, 77, 143, 193, 98, 226, 251, 12, 212, 142, 252, 179, 19, 128, 195, 71, 100, 11, 198, 33, 161, 204, 61, 90, 182, 39, 68, 184, 37, 42, 152, 252, 99, 94, 10, 230, 100, 68, 173, 12, 157, 82, 0, 151, 27, 201, 15, 154, 114, 245, 90, 243, 239, 111, 147, 20, 181, 189, 139, 172, 74, 221, 231, 143, 178, 174, 92, 142, 196, 86, 33, 68, 161, 46, 52, 125, 41, 192, 156, 151, 222, 211, 32, 203, 81, 53, 150, 48, 83, 8, 104, 176, 40, 59, 153, 65, 250, 112, 12, 136, 106, 64, 216, 52, 133, 143, 169, 196, 61, 57, 230, 96, 210, 234, 24, 201, 151, 232, 152, 35, 65, 176, 177, 62, 232, 198, 32, 71, 222, 231, 159, 232, 45, 149, 87, 27, 105, 78, 114, 143, 197, 204, 75, 38, 225, 106, 193, 73, 144, 174, 59, 181, 74, 130, 130, 210, 79, 167, 66, 40, 81, 191, 89, 108, 166, 112, 126, 115, 130, 144, 186, 76, 34, 179, 80, 35, 61, 37, 212, 25, 23, 242, 115, 253, 17, 226, 237, 7, 95, 223, 90, 186, 211, 148, 136, 83, 224, 177, 236, 220, 4, 182, 178, 148, 204, 92, 197, 190, 91, 100, 10, 161, 208, 71, 76, 142, 52, 61, 202, 131, 194, 46, 57, 48, 107, 220, 55, 138, 100, 73, 251, 229, 101, 218, 231, 5, 8, 35, 108, 168, 157, 126, 150, 46, 49, 129, 247, 210, 78, 67, 112, 66, 91, 26, 237, 141, 3, 146, 230, 59, 211, 103, 110, 111, 27, 18, 221, 209, 71, 74, 35, 51, 44, 47, 41, 35, 238, 8, 237, 13, 119, 178, 79, 153, 111, 18, 251, 118, 156, 127, 101, 0, 41, 223, 32, 184, 77, 185, 182, 215, 16, 147, 120, 218, 186, 1, 23, 57, 129, 216, 53, 160, 197, 134, 100, 169, 3, 89, 52, 242, 9, 158, 54, 212, 175, 59, 104, 195, 9, 156, 123, 13, 220, 121, 203, 1, 236, 225, 147, 233, 237, 58, 154, 197, 108, 100, 97, 177, 29, 177, 166, 86, 66, 170, 162, 181, 194, 237, 188, 231, 101, 154, 119, 254, 139, 243, 68, 177, 125, 141, 33, 52, 37, 27, 209, 69, 180, 118, 137, 14, 193, 143, 154, 91, 237, 165, 183, 113, 17, 194, 80, 116, 136, 2, 251, 237, 1, 190, 162, 194, 196, 83, 198, 106, 50, 75, 172, 171, 73, 64, 60, 133, 150, 176, 192, 129, 167, 152, 205, 180, 44, 53, 90, 50, 30, 9, 85, 205, 209, 10, 191, 150, 75, 214, 105, 65, 101, 108, 120, 78, 167, 37, 100, 174, 60, 75, 113, 106, 176, 211, 202, 209, 118, 202, 70, 152, 229, 195, 215, 164, 9, 198, 37, 8, 138, 249, 206, 169, 185, 156, 144, 35, 177, 171, 38, 141, 66, 47, 145, 226, 249, 31, 32, 147, 243, 192, 72, 170, 171, 43, 241, 85, 51, 186, 202, 75, 230, 72, 22, 168, 120, 179, 232, 210, 150, 94, 10, 235, 15, 17, 142, 102, 49, 138, 122, 85, 61, 133, 229, 142, 255, 198, 226, 112, 244, 208, 231, 3, 135, 137, 133, 239, 165, 41, 220, 31, 56, 109, 130, 56, 68, 71, 120, 46, 222, 83, 58, 90, 84, 92, 154, 246, 178, 177, 49, 89, 240, 204, 210, 55, 20, 127, 236, 247, 33, 250, 9, 232, 31, 107, 194, 9, 187, 40, 130, 183, 20, 219, 44, 79, 86, 96, 75, 200, 80, 191, 86, 211, 81, 244, 87, 75, 189, 52, 223, 54, 13, 74, 147, 71, 85, 192, 125, 209, 242, 203, 161, 53, 132, 226, 254, 232, 24, 149, 206, 59, 109, 48, 91, 112, 210, 95, 5, 5, 17, 154, 24, 70, 78, 194, 153, 57, 98, 89, 84, 194, 101, 218, 81, 94, 248, 45, 27, 99, 161, 231, 56, 105, 163, 132, 171, 230, 105, 91, 239, 134, 29, 17, 171, 150, 191, 90, 90, 199, 18, 213, 237, 74, 95, 94, 108, 130, 25, 81, 21, 41, 240, 209, 203, 143, 27, 82, 182, 1, 33, 40, 186, 175, 148, 215, 178, 157, 46, 22, 38, 39, 234, 165, 35, 32, 78, 187, 243, 47, 37, 103, 192, 123, 42, 246, 109, 109, 229, 49, 58, 161, 103, 106, 219, 87, 34, 138, 153, 231, 62, 214, 54, 237, 145, 0, 208, 110, 192, 196, 251, 20, 251, 11, 167, 36, 20, 187, 79, 137, 139, 54, 57, 38, 76, 118, 160, 101, 182, 24, 38, 115, 46, 52, 133, 205, 161, 188, 64, 43, 58, 44, 3, 214, 103, 131, 90, 124, 8, 105, 206, 75, 158, 178, 39, 117, 203, 3, 115, 236, 20, 123, 219, 229, 151, 155, 113, 177, 152, 183, 74, 89, 243, 167, 106, 62, 39, 166, 175, 50, 175, 68, 167, 16, 185, 30, 82, 14, 208, 218, 253, 9, 229, 181, 217, 46, 113, 129, 66, 92, 63, 32, 196, 229, 231, 174, 137, 144, 159, 41, 155, 203, 208, 127, 220, 74, 159, 101, 23, 249, 59, 159, 35, 104, 87, 224, 10, 237, 179, 3, 64, 246, 66, 129, 152, 191, 216, 5, 241, 242, 97, 14, 90, 193, 18, 65, 35, 217, 56, 125, 58, 213, 250, 186, 201, 226, 124, 146, 32, 174, 84, 134, 145, 87, 255, 77, 90, 146, 201, 232, 82, 202, 9, 18, 248, 102, 212, 89, 163, 236, 173, 134, 151, 151, 188, 59, 208, 234, 10, 223, 69, 192, 86, 35, 159, 235, 30, 29, 38, 87, 114, 136, 138, 78, 151, 117, 246, 90, 151, 120, 112, 211, 44, 23, 9, 199, 89, 127, 189, 174, 36, 48, 173, 133, 248, 111, 192, 73, 210, 75, 231, 49, 250, 245, 133, 51, 145, 26, 114, 175, 152, 20, 137, 40, 140, 164, 71, 185, 15, 126, 148, 241, 72, 155, 186, 70, 2, 73, 85, 133, 5, 29, 151, 79, 183, 75, 148, 240, 171, 168, 130, 190, 6, 171, 164, 243, 106, 248, 159, 34, 41, 200, 14, 43, 175, 5, 50, 186, 193, 135, 113, 149, 187, 45, 91, 13, 36, 248, 9, 146, 132, 220, 101, 40, 103, 21, 23, 49, 2, 94, 123, 216, 92, 28, 35, 21, 100, 117, 42, 138, 113, 122, 214, 139, 35, 216, 122, 214, 173, 155, 167, 231, 189, 199, 249, 58, 188, 244, 251, 235, 30, 97, 30, 67, 56, 55, 166, 167, 170, 41, 146, 163, 154, 143, 81, 66, 134, 147, 17, 230, 47, 97, 116, 236, 252, 202, 196, 106, 115, 27, 201, 237, 183, 144, 181, 134, 124, 222, 119, 7, 80, 28, 115, 114, 227, 170, 249, 229, 255, 112, 174, 212, 83, 231, 127, 175, 167, 55, 190, 80, 159, 193, 86, 147, 121, 60, 219, 119, 114, 63, 85, 170, 145, 12, 86, 45, 69, 164, 74, 135, 177, 168, 118, 73, 191, 92, 89, 65, 192, 218, 232, 255, 150, 150, 17, 110, 191, 195, 127, 190, 254, 15, 239, 253, 125, 45, 117, 194, 143, 167, 102, 162, 49, 213, 110, 244, 254, 26, 34, 199, 185, 53, 105, 234, 110, 96, 190, 60, 163, 94, 247, 118, 166, 110, 226, 62, 246, 227, 85, 157, 250, 249, 215, 233, 132, 167, 138, 29, 123, 247, 193, 164, 203, 254, 152, 52, 173, 163, 78, 223, 182, 138, 26, 11, 45, 6, 37, 71, 139, 32, 37, 105, 211, 62, 162, 222, 33, 117, 10, 193, 247, 59, 108, 222, 132, 90, 100, 165, 221, 192, 4, 53, 220, 170, 129, 12, 46, 128, 32, 10, 116, 15, 95, 22, 44, 84, 24, 177, 50, 150, 80, 190, 116, 179, 149, 187, 92, 251, 48, 209, 222, 246, 87, 78, 139, 62, 168, 188, 235, 204, 252, 59, 19, 105, 225, 167, 206, 88, 237, 213, 168, 94, 92, 171, 43, 88, 2, 203, 118, 17, 109, 55, 72, 3, 110, 96, 85, 87, 63, 230, 249, 203, 149, 43, 101, 82, 180, 145, 73, 129, 214, 133, 169, 39, 56, 148, 68, 201, 205, 187, 35, 94, 245, 167, 215, 92, 204, 99, 136, 142, 137, 85, 72, 18, 54, 154, 202, 104, 75, 34, 137, 151, 56, 183, 228, 35, 101, 69, 45, 72, 75, 185, 11, 225, 0, 47, 84, 64, 149, 108, 54, 85, 0, 35, 54, 119, 3, 232, 167, 186, 242, 86, 217, 239, 153, 67, 141, 134, 42, 140, 101, 173, 87, 205, 228, 236, 226, 173, 140, 71, 241, 236, 177, 106, 80, 8, 73, 139, 70, 205, 194, 154, 126, 188, 27, 138, 218, 25, 231, 58, 120, 85, 225, 11, 162, 229, 222, 96, 37, 54, 96, 157, 233, 98, 222, 170, 194, 11, 105, 247, 21, 143, 142, 106, 170, 29, 139, 250, 243, 145, 43, 39, 148, 142, 203, 161, 236, 38, 52, 27, 18, 9, 243, 151, 215, 169, 88, 101, 237, 242, 48, 125, 64, 83, 182, 47, 41, 188, 11, 82, 52, 60, 26, 140, 38, 242, 99, 70, 62, 251, 134, 115, 63, 110, 27, 23, 17, 248, 35, 172, 131, 151, 55, 249, 165, 173, 160, 164, 229, 183, 117, 114, 140, 250, 159, 231, 176, 38, 109, 219, 60, 237, 67, 55, 195, 42, 69, 69, 94, 128, 216, 46, 18, 144, 246, 148, 186, 190, 106, 216, 93, 84, 69, 157, 112, 45, 61, 127, 230, 204, 119, 45, 138, 159, 238, 169, 137, 157, 0, 11, 91, 116, 180, 178, 56, 221, 7, 16, 89, 70, 225, 198, 247, 139, 123, 39, 0, 159, 69, 94, 60, 221, 164, 27, 80, 246, 71, 134, 136, 168, 146, 55, 97, 64, 177, 26, 82, 30, 147, 186, 212, 136, 238, 220, 114, 188, 61, 200, 66, 202, 163, 108, 0, 67, 30, 112, 129, 230, 142, 156, 158, 86, 174, 38, 183, 196, 246, 164, 182, 145, 225, 131, 26, 174, 182, 205, 152, 66, 87, 145, 15, 22, 56, 226, 192, 75, 97, 89, 63, 19, 69, 236, 97, 66, 91, 66, 248, 231, 106, 91, 193, 77, 35, 214, 129, 149, 59, 134, 201, 235, 203, 86, 247, 156, 160, 5, 2, 128, 62, 38, 118, 66, 93, 218, 159, 33, 129, 212, 59, 105, 226, 51, 221, 196, 44, 223, 200, 32, 76, 3, 69, 19, 206, 57, 77, 86, 198, 142, 240, 176, 154, 32, 84, 190, 39, 234, 94, 141, 75, 21, 31, 173, 29, 144, 40, 37, 144, 73, 215, 35, 26, 163, 245, 201, 156, 176, 56, 91, 133, 155, 176, 119, 56, 112, 221, 174, 234, 173, 238, 188, 72, 39, 60, 161, 52, 7, 29, 147, 228, 158, 100, 64, 171, 167, 177, 66, 28, 161, 168, 177, 91, 230, 181, 236, 28, 207, 234, 237, 50, 212, 48, 180, 162, 97, 133, 20, 63, 194, 17, 251, 23, 248, 109, 159, 38, 98, 14, 53, 165, 136, 131, 222, 162, 48, 58, 34, 229, 233, 20, 101, 53, 226, 181, 97, 23, 48, 21, 63, 143, 120, 249, 93, 145, 141, 73, 143, 185, 74, 46, 133, 168, 214, 207, 47, 234, 26, 249, 27, 78, 24, 254, 176, 143, 150, 85, 165, 17, 76, 81, 173, 253, 191, 77, 65, 158, 250, 98, 221, 254, 42, 195, 61, 166, 29, 242, 93, 181, 216, 28, 91, 255, 114, 35, 63, 216, 242, 34, 87, 68, 64, 179, 68, 30, 6, 233, 209, 73, 231, 12, 131, 251, 104, 221, 39, 0, 63, 71, 253, 255, 170, 30, 192, 157, 217, 23, 25, 137, 214, 220, 238, 218, 42, 151, 13, 67, 45, 40, 220, 64, 199, 251, 137, 137, 7, 23, 122, 177, 171, 147, 28, 6, 209, 209, 209, 209, 27, 211, 57, 55, 10, 225, 114, 255, 73, 99, 167, 225, 139, 237, 229, 15, 66, 131, 228, 173, 59, 146, 176, 33, 218, 207, 24, 193, 205, 168, 61, 15, 146, 193, 101, 196, 253, 207, 150, 216, 232, 85, 17, 240, 153, 198, 103, 255, 166, 95, 135, 116, 34, 29, 226, 54, 204, 172, 55, 108, 37, 36, 187, 230, 51, 254, 58, 247, 4, 245, 42, 107, 23, 253, 183, 149, 21, 53, 225, 72, 213, 133, 172, 57, 156, 148, 226, 123, 157, 165, 216, 91, 46, 166, 178, 11, 254, 136, 166, 10, 24, 118, 130, 162, 199, 94, 168, 26, 206, 50, 41, 89, 205, 206, 108, 15, 67, 199, 94, 27, 226, 119, 48, 53, 206, 165, 231, 187, 188, 116, 222, 111, 177, 44, 80, 143, 225, 128, 246, 185, 41, 39, 79, 66, 198, 34, 253, 251, 18, 76, 157, 135, 250, 193, 186, 92, 109, 90, 78, 45, 60, 115, 111, 254, 64, 168, 200, 227, 166, 222, 34, 177, 247, 71, 186, 170, 100, 237, 184, 55, 90, 46, 248, 94, 115, 154, 67, 255, 240, 245, 73, 251, 77, 221, 240, 81, 134, 118, 81, 176, 152, 119, 46, 132, 234, 70, 18, 207, 14, 103, 192, 12, 138, 110, 129, 255, 129, 141, 235, 78, 67, 73, 118, 128, 174, 215, 3, 163, 255, 172, 236, 102, 253, 160, 168, 171, 174, 71, 164, 178, 115, 114, 148, 243, 243, 63, 206, 93, 211, 73, 137, 170, 182, 245, 128, 180, 101, 127, 217, 195, 132, 147, 228, 101, 252, 10, 31, 240, 245, 201, 255, 31, 48, 134, 198, 149, 116, 18, 200, 119, 100, 108, 14, 21, 233, 57, 178, 24, 194, 1, 177, 198, 3, 234, 43, 95, 156, 246, 146, 102, 169, 134, 249, 81, 185, 49, 159, 138, 56, 73, 173, 2, 17, 94, 89, 40, 135, 1, 214, 32, 56, 48, 241, 160, 187, 24, 191, 228, 118, 39, 201, 88, 12, 208, 201, 128, 97, 73, 162, 225, 185, 213, 10, 151, 246, 153, 249, 164, 151, 231, 195, 11, 110, 113, 187, 79, 162, 163, 55, 33, 149, 128, 0, 226, 22, 37, 159, 93, 223, 37, 92, 72, 219, 241, 43, 70, 34, 17, 20, 12, 41, 46, 103, 227, 63, 171, 55, 228, 228, 62, 51, 78, 211, 105, 105, 246, 41, 236, 57, 120, 102, 228, 106, 229, 178, 114, 112, 52, 60, 148, 234, 80, 190, 185, 5, 207, 224, 205, 36, 224, 167, 80, 37, 218, 230, 228, 166, 202, 212, 123, 208, 157, 73, 78, 239, 84, 189, 241, 3, 217, 47, 31, 154, 196, 88, 224, 239, 248, 254, 188, 192, 133, 153, 112, 171, 9, 20, 187, 53, 184, 214, 157, 246, 237, 80, 0, 22, 181, 4, 43, 147, 145, 87, 207, 156, 109, 138, 221, 188, 28, 236, 230, 167, 52, 51, 39, 183, 40, 166, 102, 54, 193, 210, 3, 108, 245, 51, 66, 169, 107, 103, 197, 137, 129, 153, 251, 114, 9, 110, 101, 232, 93, 144, 241, 56, 57, 177, 123, 205, 48, 30, 114, 224, 103, 82, 177, 196, 26, 23, 134, 25, 149, 92, 156, 218, 155, 105, 149, 132, 245, 14, 244, 43, 202, 114, 167, 72, 108, 221, 249, 203, 160, 136, 45, 142, 239, 97, 232, 27, 49, 232, 69, 167, 193, 34, 67, 178, 188, 4, 46, 166, 242, 101, 250, 140, 42, 84, 168, 44, 197, 251, 135, 58, 21, 99, 4, 130, 213, 252, 21, 179, 190, 21, 121, 252, 135, 60, 41, 200, 179, 74, 138, 203, 203, 241, 98, 117, 42, 173, 127, 148, 243, 165, 242, 106, 125, 181, 207, 85, 42, 232, 187, 126, 205, 156, 255, 166, 177, 117, 2, 68, 30, 169, 130, 70, 111, 56, 251, 216, 80, 126, 63, 234, 65, 99, 169, 132, 215, 19, 112, 33, 117, 99, 93, 249, 30, 170, 29, 151, 146, 119, 133, 226, 121, 61, 12, 118, 150, 99, 74, 220, 234, 106, 59, 13, 124, 35, 235, 10, 171, 239, 6, 108, 195, 75, 243, 200, 51, 15, 56, 157, 158, 192, 245, 20, 13, 145, 14, 42, 126, 208, 86, 30, 4, 135, 50, 176, 50, 73, 21, 70, 40, 101, 32, 138, 157, 152, 202, 171, 163, 97, 20, 194, 212, 66, 230, 165, 195, 243, 157, 109, 213, 223, 220, 227, 34, 236, 78, 52, 71, 217, 145, 206, 238, 158, 0, 49, 248, 135, 218, 50, 228, 45, 127, 255, 69, 229, 122, 178, 174, 127, 107, 114, 176, 14, 2, 70, 146, 198, 192, 62, 119, 200, 39, 38, 242, 29, 152, 158, 224, 81, 191, 169, 154, 93, 64, 246, 232, 99, 78, 143, 153, 83, 181, 61, 151, 131, 99, 67, 149, 170, 98, 177, 252, 127, 57, 77, 30, 177, 107, 59, 78, 207, 69, 61, 39, 198, 253, 21, 250, 184, 80, 213, 144, 197, 208, 33, 51, 79, 1, 158, 84, 132, 90, 166, 124, 71, 126, 104, 63, 215, 12, 76, 164, 230, 116, 160, 13, 66, 161, 227, 191, 204, 12, 76, 233, 20, 185, 98, 90, 25, 8, 125, 193, 16, 99, 95, 84, 9, 131, 121, 19, 248, 163, 33, 203, 216, 92, 173, 51, 128, 183, 69, 182, 71, 171, 206, 143, 72, 207, 9, 0, 139, 52, 253, 161, 23, 63, 240, 90, 120, 103, 187, 164, 202, 45, 207, 44, 120, 64, 92, 249, 198, 30, 208, 109, 19, 11, 70, 65, 135, 177, 20, 220, 82, 175, 138, 210, 65, 92, 174, 50, 54, 3, 150, 137, 37, 225, 10, 101, 80, 10, 49, 196, 126, 100, 137, 249, 76, 164, 69, 254, 73, 118, 157, 8, 73, 232, 197, 234, 41, 219, 193, 239, 35, 246, 51, 202, 172, 154, 186, 24, 169, 185, 195, 253, 36, 44, 14, 166, 8, 95, 107, 147, 235, 43, 66, 87, 57, 204, 220, 139, 36, 115, 201, 112, 26, 90, 35, 119, 16, 193, 0, 101, 109, 31, 113, 65, 106, 251, 61, 34, 92, 242, 177, 29, 247, 214, 239, 41, 70, 23, 250, 215, 165, 110, 116, 2, 50, 251, 28, 16, 159, 242, 224, 229, 179, 140, 150, 51, 106, 204, 27, 40, 245, 80, 28, 182, 107, 42, 95, 8, 166, 202, 125, 228, 203, 30, 205, 147, 250, 231, 27, 56, 10, 108, 191, 163, 203, 131, 39, 68, 118, 216, 3, 104, 86, 74, 153, 138, 68, 128, 92, 225, 15, 160, 101, 28, 51, 209, 147, 100, 169, 214, 42, 120, 185, 89, 197, 177, 177, 106, 180, 217, 71, 136, 106, 216, 168, 152, 62, 123, 226, 139, 208, 143, 83, 152, 14, 150, 10, 11, 136, 241, 49, 213, 180, 248, 103, 109, 76, 246, 174, 81, 233, 18, 57], - [122, 191, 80, 239, 118, 189, 252, 88, 192, 221, 81, 230, 99, 2, 183, 4, 186, 148, 2, 77, 243, 238, 82, 175, 83, 182, 108, 224, 25, 69, 75, 157, 65, 143, 109, 197, 193, 169, 177, 209, 247, 0, 155, 141, 21, 208, 21, 156, 103, 30, 73, 89, 150, 24, 13, 19, 83, 76, 110, 80, 30, 8, 245, 140, 94, 52, 103, 184, 224, 93, 52, 234, 135, 203, 228, 206, 65, 168, 158, 234, 178, 9, 71, 58, 204, 100, 165, 104, 246, 86, 204, 212, 84, 244, 105, 104, 48, 41, 56, 49, 162, 224, 255, 173, 57, 67, 102, 22, 234, 213, 112, 249, 222, 169, 61, 126, 17, 254, 154, 32, 227, 121, 169, 52, 170, 163, 207, 118, 144, 34, 54, 155, 36, 64, 67, 171, 30, 202, 103, 60, 187, 68, 183, 91, 168, 42, 244, 10, 49, 114, 170, 216, 213, 158, 191, 160, 110, 14, 243, 202, 127, 166, 238, 77, 124, 42, 170, 178, 162, 160, 172, 253, 161, 70, 66, 13, 100, 97, 157, 45, 40, 217, 84, 217, 159, 11, 141, 80, 90, 0, 161, 235, 110, 168, 81, 84, 78, 173, 188, 81, 108, 80, 156, 219, 142, 74, 22, 222, 60, 139, 124, 61, 218, 140, 24, 71, 95, 142, 1, 179, 211, 247, 249, 66, 18, 138, 209, 165, 234, 162, 127, 197, 221, 36, 192, 155, 141, 202, 156, 231, 4, 72, 33, 140, 144, 40, 145, 196, 56, 16, 227, 224, 175, 226, 197, 127, 211, 87, 123, 9, 6, 160, 151, 16, 201, 250, 47, 147, 136, 113, 116, 30, 179, 98, 84, 218, 233, 126, 176, 171, 197, 148, 240, 201, 178, 249, 222, 231, 46, 167, 160, 195, 2, 175, 29, 100, 29, 81, 34, 99, 240, 215, 85, 175, 221, 225, 229, 128, 234, 143, 222, 108, 183, 165, 71, 212, 254, 174, 3, 56, 72, 137, 141, 4, 173, 176, 219, 9, 112, 91, 184, 101, 36, 193, 225, 234, 167, 249, 220, 164, 175, 249, 101, 155, 135, 202, 153, 53, 200, 229, 213, 130, 134, 153, 68, 23, 184, 88, 71, 113, 177, 7, 120, 254, 78, 17, 231, 133, 52, 22, 198, 19, 202, 78, 248, 76, 34, 51, 66, 225, 168, 247, 208, 23, 231, 98, 91, 100, 32, 103, 160, 247, 32, 168, 10, 75, 21, 201, 202, 174, 227, 44, 149, 27, 202, 202, 200, 230, 89, 34, 50, 101, 205, 150, 154, 76, 203, 95, 238, 231, 1, 80, 67, 207, 57, 157, 148, 13, 130, 246, 156, 194, 188, 229, 35, 98, 127, 18, 154, 237, 215, 48, 59, 180, 75, 10, 138, 104, 72, 75, 77, 106, 43, 205, 23, 127, 166, 55, 133, 18, 248, 136, 152, 13, 35, 130, 107, 49, 142, 73, 18, 214, 150, 81, 142, 15, 129, 20, 141, 39, 0, 147, 3, 113, 54, 76, 186, 182, 89, 76, 158, 130, 179, 13, 137, 213, 14, 198, 48, 183, 186, 87, 5, 91, 98, 14, 83, 172, 84, 221, 155, 228, 24, 98, 0, 101, 37, 113, 190, 103, 238, 203, 51, 104, 122, 123, 96, 227, 95, 119, 96, 235, 53, 88, 62, 82, 99, 114, 38, 216, 227, 253, 251, 74, 67, 210, 16, 252, 153, 195, 21, 46, 75, 96, 213, 148, 108, 251, 173, 190, 237, 2, 142, 107, 135, 169, 42, 34, 113, 149, 101, 208, 64, 40, 154, 23, 130, 205, 87, 250, 28, 36, 16, 146, 27, 114, 202, 57, 112, 187, 139, 187, 95, 49, 140, 83, 162, 119, 189, 205, 68, 107, 114, 144, 123, 76, 208, 176, 201, 63, 15, 32, 205, 38, 206, 165, 181, 23, 243, 193, 228, 235, 167, 32, 32, 147, 86, 107, 91, 202, 240, 212, 170, 234, 235, 54, 179, 124, 229, 233, 31, 82, 109, 170, 177, 163, 141, 41, 55, 138, 173, 148, 238, 30, 200, 1, 156, 141, 236, 234, 61, 105, 53, 161, 200, 244, 225, 235, 51, 216, 63, 231, 116, 88, 25, 172, 240, 89, 182, 187, 89, 106, 251, 160, 83, 220, 36, 55, 26, 231, 167, 171, 193, 26, 113, 135, 245, 205, 31, 249, 236, 10, 96, 93, 202, 225, 30, 95, 10, 228, 255, 157, 115, 168, 248, 175, 152, 201, 44, 103, 4, 19, 115, 157, 105, 165, 121, 155, 15, 155, 249, 17, 11, 143, 221, 68, 223, 110, 129, 222, 248, 82, 14, 149, 31, 104, 38, 75, 242, 87, 15, 233, 235, 118, 173, 130, 167, 200, 158, 55, 204, 24, 90, 47, 41, 53, 138, 168, 137, 188, 185, 68, 173, 160, 93, 69, 3, 229, 49, 118, 220, 41, 53, 167, 226, 153, 101, 221, 41, 54, 51, 15, 207, 15, 62, 140, 254, 210, 45, 197, 75, 71, 210, 215, 81, 190, 226, 222, 73, 7, 170, 147, 35, 49, 104, 93, 155, 39, 189, 92, 141, 198, 80, 128, 136, 28, 209, 21, 185, 241, 134, 235, 78, 18, 51, 105, 18, 4, 82, 181, 37, 133, 233, 244, 140, 13, 124, 179, 30, 187, 84, 64, 10, 233, 126, 195, 161, 240, 92, 38, 69, 189, 5, 5, 142, 94, 226, 159, 70, 6, 172, 123, 166, 66, 116, 92, 231, 62, 107, 206, 196, 60, 64, 0, 106, 255, 99, 99, 191, 192, 248, 71, 197, 177, 14, 216, 178, 48, 170, 170, 210, 235, 4, 96, 162, 62, 92, 23, 171, 74, 93, 132, 44, 10, 61, 53, 171, 59, 200, 141, 154, 43, 145, 87, 134, 17, 46, 120, 137, 106, 6, 178, 138, 103, 248, 110, 22, 41, 140, 137, 94, 22, 13, 176, 216, 73, 182, 75, 224, 212, 38, 201, 22, 32, 44, 203, 127, 255, 179, 128, 192, 254, 240, 251, 28, 114, 28, 117, 63, 243, 91, 246, 215, 79, 192, 137, 170, 210, 35, 132, 225, 240, 35, 245, 226, 196, 98, 134, 179, 187, 236, 66, 164, 181, 69, 198, 90, 227, 192, 185, 123, 36, 206, 5, 79, 174, 108, 70, 88, 46, 19, 200, 148, 21, 252, 98, 176, 53, 33, 244, 165, 220, 46, 144, 50, 182, 250, 204, 54, 76, 246, 116, 108, 145, 162, 153, 136, 18, 34, 58, 59, 68, 62, 61, 227, 190, 97, 107, 157, 60, 39, 34, 1, 57, 253, 212, 207, 38, 14, 48, 28, 91, 135, 118, 95, 92, 231, 185, 36, 77, 41, 11, 246, 14, 142, 162, 184, 222, 163, 126, 47, 221, 53, 33, 213, 202, 248, 180, 40, 200, 85, 196, 156, 124, 182, 163, 240, 198, 224, 75, 87, 77, 230, 154, 33, 149, 91, 215, 127, 195, 77, 38, 49, 119, 14, 203, 188, 0, 223, 25, 173, 177, 163, 168, 176, 245, 42, 104, 14, 220, 117, 50, 103, 32, 15, 141, 78, 174, 51, 31, 77, 201, 122, 36, 160, 157, 238, 25, 49, 196, 96, 135, 130, 68, 252, 16, 89, 113, 200, 242, 92, 233, 158, 215, 150, 249, 26, 160, 95, 40, 155, 197, 177, 175, 136, 191, 99, 171, 35, 236, 43, 48, 230, 222, 117, 2, 220, 9, 215, 138, 16, 185, 229, 11, 151, 202, 233, 241, 100, 61, 181, 130, 250, 47, 38, 13, 28, 253, 14, 21, 84, 77, 223, 215, 199, 19, 117, 227, 181, 136, 23, 66, 189, 150, 68, 20, 34, 148, 1, 69, 174, 9, 38, 53, 37, 24, 12, 91, 174, 125, 230, 202, 23, 229, 149, 223, 101, 235, 17, 153, 95, 230, 71, 162, 138, 249, 37, 97, 8, 189, 82, 49, 6, 108, 235, 123, 118, 181, 92, 167, 0, 2, 123, 96, 120, 183, 173, 218, 138, 167, 224, 173, 2, 94, 203, 43, 240, 108, 206, 26, 235, 7, 27, 194, 214, 166, 114, 240, 187, 188, 191, 212, 155, 16, 74, 216, 249, 32, 16, 69, 89, 111, 179, 90, 137, 39, 41, 18, 250, 181, 154, 18, 127, 159, 207, 82, 25, 136, 221, 89, 48, 39, 17, 224, 223, 53, 72, 22, 90, 86, 98, 112, 249, 97, 177, 15, 90, 55, 101, 33, 183, 86, 15, 71, 198, 90, 99, 200, 213, 91, 239, 149, 100, 115, 217, 40, 21, 196, 108, 116, 57, 169, 126, 57, 62, 136, 252, 220, 225, 188, 237, 67, 233, 232, 113, 131, 61, 207, 216, 173, 186, 42, 82, 71, 11, 89, 12, 12, 33, 126, 96, 68, 35, 25, 173, 53, 58, 181, 42, 179, 145, 107, 80, 182, 139, 217, 247, 247, 208, 93, 92, 106, 17, 108, 27, 119, 149, 50, 209, 80, 39, 87, 247, 172, 230, 157, 95, 131, 204, 244, 13, 210, 238, 191, 208, 226, 217, 220, 215, 85, 155, 102, 211, 188, 56, 225, 130, 65, 221, 32, 212, 136, 196, 105, 209, 36, 147, 88, 31, 178, 180, 227, 221, 1, 59, 80, 115, 44, 232, 123, 28, 113, 141, 160, 117, 228, 253, 104, 45, 120, 168, 225, 119, 66, 148, 36, 138, 83, 133, 19, 52, 111, 88, 150, 79, 240, 152, 158, 117, 67, 159, 196, 47, 17, 73, 83, 12, 176, 219, 71, 28, 182, 17, 106, 247, 218, 85, 194, 153, 124, 155, 124, 104, 196, 204, 44, 228, 234, 211, 58, 135, 89, 184, 185, 64, 60, 37, 38, 230, 169, 13, 137, 225, 133, 240, 169, 233, 186, 16, 107, 235, 63, 45, 94, 106, 193, 30, 218, 13, 38, 140, 159, 188, 151, 159, 116, 182, 85, 254, 254, 195, 105, 87, 2, 154, 43, 113, 152, 56, 50, 223, 52, 39, 87, 79, 144, 124, 220, 193, 107, 130, 67, 120, 244, 210, 13, 14, 100, 104, 30, 110, 170, 169, 20, 170, 217, 192, 22, 79, 124, 149, 104, 206, 212, 84, 107, 25, 160, 139, 187, 148, 251, 124, 217, 131, 32, 194, 66, 193, 197, 117, 211, 53, 148, 20, 88, 41, 180, 217, 123, 44, 155, 100, 230, 187, 227, 8, 227, 202, 226, 30, 29, 55, 57, 135, 87, 171, 27, 220, 56, 55, 174, 153, 196, 141, 202, 18, 207, 103, 223, 225, 49, 61, 158, 40, 214, 220, 244, 186, 206, 135, 172, 33, 224, 179, 120, 195, 7, 184, 125, 93, 245, 112, 148, 243, 153, 155, 209, 161, 141, 57, 219, 219, 202, 83, 131, 149, 191, 187, 255, 151, 7, 238, 17, 192, 136, 207, 250, 74, 210, 209, 11, 43, 13, 50, 147, 228, 37, 76, 62, 60, 151, 233, 86, 6, 37, 112, 18, 212, 128, 73, 194, 200, 117, 0, 122, 58, 187, 80, 225, 195, 59, 253, 3, 67, 72, 215, 145, 175, 187, 191, 135, 25, 128, 62, 137, 52, 161, 66, 247, 254, 221, 169, 141, 195, 51, 148, 90, 133, 213, 250, 120, 99, 71, 168, 40, 13, 225, 74, 8, 60, 53, 150, 113, 135, 165, 191, 245, 153, 183, 70, 56, 166, 255, 205, 0, 175, 68, 196, 61, 131, 169, 25, 0, 178, 2, 109, 116, 235, 165, 72, 29, 92, 103, 119, 173, 22, 67, 191, 96, 132, 147, 218, 134, 155, 132, 105, 146, 119, 65, 246, 232, 21, 174, 117, 186, 15, 115, 120, 105, 80, 201, 185, 133, 83, 90, 163, 181, 213, 83, 146, 116, 208, 244, 194, 87, 26, 197, 70, 113, 129, 158, 93, 155, 73, 154, 245, 222, 209, 98, 89, 127, 118, 254, 234, 172, 142, 198, 146, 43, 215, 212, 56, 28, 138, 160, 247, 141, 216, 178, 98, 201, 74, 149, 234, 92, 29, 1, 34, 144, 255, 41, 197, 122, 78, 240, 121, 4, 39, 112, 143, 104, 6, 244, 209, 81, 180, 96, 130, 134, 28, 48, 11, 73, 97, 63, 198, 64, 212, 67, 163, 87, 210, 193, 138, 156, 97, 71, 214, 79, 142, 161, 94, 121, 161, 247, 112, 248, 173, 94, 171, 138, 1, 119, 76, 173, 167, 3, 251, 79, 196, 255, 18, 169, 177, 229, 240, 210, 16, 110, 245, 117, 234, 143, 131, 253, 79, 126, 246, 240, 35, 86, 142, 52, 211, 57, 72, 56, 88, 188, 248, 34, 254, 143, 209, 215, 157, 237, 237, 31, 96, 167, 135, 237, 52, 80, 75, 69, 103, 106, 112, 255, 154, 63, 201, 107, 32, 40, 226, 135, 150, 244, 248, 129, 217, 90, 56, 114, 166, 94, 117, 228, 245, 83, 116, 32, 73, 152, 62, 232, 65, 187, 16, 150, 109, 92, 214, 51, 143, 7, 117, 210, 173, 133, 231, 115, 113, 27, 221, 196, 219, 21, 159, 140, 142, 47, 209, 11, 81, 17, 136, 42, 143, 75, 25, 223, 60, 176, 92, 247, 205, 139, 69, 43, 97, 36, 144, 173, 63, 217, 188, 149, 112, 57, 254, 174, 89, 134, 42, 177, 30, 100, 175, 102, 199, 186, 119, 252, 233, 165, 17, 182, 6, 107, 90, 191, 113, 165, 14, 57, 206, 28, 187, 141, 182, 187, 122, 170, 226, 200, 154, 111, 64, 142, 76, 14, 170, 91, 90, 142, 232, 117, 25, 243, 84, 141, 18, 225, 109, 50, 136, 0, 20, 64, 30, 148, 63, 160, 78, 23, 204, 113, 116, 121, 250, 152, 49, 139, 68, 27, 4, 50, 95, 203, 248, 105, 79, 18, 219, 240, 169, 243, 97, 240, 18, 123, 118, 27, 216, 9, 195, 177, 208, 149, 168, 48, 95, 164, 133, 155, 245, 47, 9, 180, 251, 184, 171, 50, 48, 54, 114, 76, 191, 60, 205, 53, 159, 116, 135, 106, 8, 174, 143, 111, 43, 190, 158, 154, 103, 233, 235, 207, 174, 140, 78, 181, 174, 53, 74, 141, 33, 203, 108, 71, 235, 82, 117, 223, 16, 3, 102, 90, 176, 202, 23, 129, 74, 200, 157, 140, 4, 215, 222, 53, 167, 191, 118, 208, 151, 64, 19, 25, 187, 144, 3, 131, 201, 53, 179, 120, 248, 220, 214, 143, 195, 81, 213, 92, 220, 79, 229, 236, 137, 110, 41, 229, 168, 20, 58, 0, 101, 220, 59, 137, 26, 19, 20, 58, 62, 202, 143, 58, 48, 165, 90, 164, 174, 203, 154, 235, 109, 26, 206, 121, 11, 173, 169, 47, 90, 176, 186, 90, 161, 54, 74, 86, 151, 214, 218, 154, 236, 100, 35, 88, 161, 136, 242, 229, 120, 180, 253, 188, 255, 104, 15, 154, 172, 193, 237, 148, 25, 147, 3, 68, 185, 147, 81, 136, 210, 241, 24, 128, 8, 253, 147, 227, 25, 201, 147, 158, 55, 210, 209, 190, 59, 221, 39, 175, 225, 244, 224, 67, 143, 242, 67, 171, 77, 227, 129, 110, 147, 163, 208, 229, 249, 13, 91, 28, 44, 231, 85, 238, 128, 65, 187, 55, 200, 247, 167, 93, 86, 7, 228, 160, 92, 78, 90, 53, 128, 69, 120, 68, 158, 231, 124, 23, 145, 112, 246, 204, 170, 128, 191, 233, 115, 55, 133, 175, 183, 240, 30, 125, 13, 180, 79, 48, 191, 181, 53, 75, 25, 176, 67, 58, 30, 194, 109, 201, 195, 48, 89, 66, 179, 68, 128, 157, 161, 92, 20, 0, 150, 241, 91, 109, 17, 15, 174, 214, 73, 30, 48, 241, 228, 173, 70, 24, 114, 234, 26, 194, 200, 197, 47, 73, 183, 3, 95, 64, 212, 142, 22, 47, 9, 41, 154, 56, 81, 145, 126, 63, 192, 59, 55, 49, 12, 142, 217, 162, 212, 51, 74, 110, 194, 65, 97, 42, 36, 203, 7, 180, 10, 37, 74, 72, 189, 117, 178, 235, 169, 121, 188, 63, 85, 25, 66, 235, 89, 98, 163, 185, 197, 229, 189, 175, 8, 221, 71, 253, 75, 234, 237, 222, 147, 246, 104, 177, 33, 156, 9, 129, 141, 182, 20, 194, 123, 235, 77, 107, 150, 166, 253, 18, 252, 94, 85, 193, 174, 94, 150, 223, 250, 153, 93, 85, 200, 221, 149, 125, 160, 175, 3, 154, 210, 30, 120, 24, 55, 175, 44, 12, 248, 212, 165, 121, 113, 89, 95, 245, 172, 130, 139, 105, 207, 175, 186, 233, 100, 161, 5, 81, 47, 234, 112, 155, 6, 67, 203, 88, 103, 64, 61, 42, 227, 44, 70, 200, 102, 110, 247, 33, 116, 145, 147, 75, 104, 47, 171, 193, 100, 83, 98, 105, 236, 233, 246, 221, 250, 196, 213, 3, 43, 24, 202, 219, 95, 213, 87, 251, 90, 234, 50, 57, 30, 173, 215, 241, 111, 8, 70, 21, 41, 110, 55, 139, 172, 212, 120, 132, 21, 144, 139, 218, 55, 68, 210, 109, 52, 0, 178, 165, 131, 161, 117, 163, 156, 128, 150, 50, 85, 75, 65, 135, 203, 13, 229, 185, 206, 66, 242, 40, 183, 81, 129, 19, 42, 166, 147, 78, 85, 184, 242, 253, 193, 135, 249, 226, 72, 192, 219, 185, 220, 88, 138, 209, 153, 159, 168, 2, 33, 171, 64, 18, 196, 109, 158, 147, 54, 94, 38, 37, 89, 176, 42, 35, 165, 42, 207, 163, 254, 25, 224, 175, 31, 239, 98, 238, 170, 69, 180, 252, 115, 94, 49, 86, 154, 113, 246, 33, 46, 75, 75, 55, 87, 28, 125, 81, 50, 49, 178, 87, 98, 248, 247, 229, 13, 50, 167, 251, 55, 91, 178, 252, 244, 116, 29, 81, 60, 64, 135, 139, 98, 238, 23, 210, 124, 53, 0, 58, 247, 17, 232, 17, 121, 29, 203, 204, 172, 20, 39, 58, 114, 94, 106, 148, 213, 8, 212, 173, 242, 174, 81, 10, 30, 27, 123, 120, 61, 103, 150, 118, 226, 62, 137, 17, 123, 112, 164, 147, 179, 249, 42, 122, 45, 238, 25, 201, 170, 47, 203, 215, 177, 175, 124, 145, 75, 81, 56, 85, 131, 75, 48, 46, 173, 74, 86, 33, 220, 10, 44, 36, 222, 206, 74, 12, 4, 233, 8, 137, 84, 41, 243, 99, 190, 91, 82, 251, 1, 162, 238, 95, 217, 253, 134, 244, 75, 116, 246, 189, 81, 175, 40, 107, 29, 57, 127, 246, 48, 188, 142, 212, 160, 13, 120, 162, 28, 120, 165, 127, 200, 157, 138, 31, 135, 120, 235, 9, 80, 63, 49, 13, 183, 153, 92, 116, 220, 255, 144, 194, 108, 192, 172, 153, 151, 140, 197, 192, 70, 255, 114, 11, 168, 125, 86, 22, 60, 17, 173, 38, 183, 86, 125, 33, 170, 231, 159, 157, 68, 154, 136, 148, 154, 70, 40, 68, 29, 54, 106, 112, 142, 217, 14, 245, 55, 12, 237, 112, 153, 156, 72, 4, 40, 76, 128, 161, 172, 140, 211, 43, 151, 150, 241, 253, 19, 167, 48, 124, 138, 19, 214, 80, 12, 180, 156, 105, 157, 138, 118, 88, 39, 6, 132, 7, 112, 145, 213, 3, 117, 51, 24, 129, 51, 28, 130, 212, 113, 251, 76, 83, 61, 210, 96, 246, 36, 135, 10, 178, 63, 223, 67, 163, 201, 68, 97, 32, 104, 40, 184, 122, 19, 141, 188, 80, 235, 121, 127, 207, 1, 182, 204, 252, 232, 213, 64, 176, 180, 228, 51, 58, 224, 146, 95, 159, 106, 49, 143, 228, 155, 168, 98, 7, 243, 158, 121, 40, 88, 39, 136, 88, 206, 254, 135, 105, 167, 141, 177, 33, 129, 114, 206, 126, 100, 110, 176, 210, 123, 52, 19, 173, 178, 23, 147, 17, 6, 13, 141, 29, 207, 144, 199, 233, 20, 156, 46, 111, 180, 81, 122, 84, 143, 207, 64, 138, 27, 110, 108, 182, 44, 22, 75, 36, 9, 133, 130, 159, 56, 53, 154, 208, 84, 95, 107, 194, 131, 199, 225, 71, 137, 110, 162, 104, 147, 85, 253, 116, 160, 121, 125, 108, 233, 237, 253, 27, 49, 87, 188, 65, 116, 76, 192, 243, 74, 0, 28, 39, 193, 22, 225, 188, 168, 112, 240, 169, 104, 253, 191, 172, 69, 48, 33, 186, 29, 201, 71, 215, 249, 30, 249, 7, 68, 233, 42, 82, 160, 137, 244, 180, 61, 235, 24, 204, 113, 83, 244, 222, 20, 97, 88, 78, 219, 204, 44, 160, 2, 135, 40, 139, 147, 188, 163, 61, 120, 149, 30, 85, 156, 220, 173, 144, 3, 150, 222, 79, 239, 7, 141, 171, 121, 24, 88, 161, 120, 190, 47, 158, 51, 179, 72, 136, 62, 21, 94, 18, 245, 106, 240, 113, 52, 239, 114, 190, 142, 120, 204, 64, 83, 212, 192, 104, 224, 139, 5, 233, 133, 67, 180, 153, 49, 6, 211, 99, 23, 102, 148, 113, 163, 13, 97, 28, 22, 221, 111, 152, 44, 49, 207, 28, 81, 81, 173, 28, 205, 212, 105, 177, 57, 215, 115, 198, 49, 171, 248, 84, 252, 140, 232, 193, 152, 186, 167, 17, 234, 224, 225, 120, 96, 231, 139, 220, 26, 137, 104, 147, 99, 221, 156, 43, 7, 153, 90, 152, 187, 99, 103, 99, 119, 38, 235, 55, 233, 15, 81, 221, 253, 240, 220, 105, 130, 1, 224, 11, 238, 63, 155, 237, 8, 133, 224, 115, 212, 67, 2, 47, 191, 244, 87, 230, 108, 130, 224, 64, 37, 139, 121, 125, 5, 60, 54, 146, 218, 159, 51, 240, 93, 194, 208, 108, 47, 240, 226, 49, 219, 37, 49, 225, 195, 53, 194, 93, 87, 120, 100, 70, 14, 217, 170, 84, 123, 245, 21, 225, 25, 30, 24, 164, 203, 254, 38, 165, 189, 194, 179, 40, 56, 141, 34, 152, 126, 82, 242, 107, 207, 3, 23, 156, 244, 151, 25, 5, 77, 67, 136, 125, 199, 172, 136, 118, 230, 35, 40, 166, 112, 63, 37, 231, 244, 214, 3, 170, 27, 100, 45, 229, 211, 104, 124, 190, 83, 174, 16, 212, 121, 194, 94, 114, 27, 112, 49, 135, 218, 80, 20, 91, 180, 172, 204, 0, 143, 13, 33, 212, 35, 200, 72, 193, 91, 127, 142, 53, 81, 15, 82, 76, 216, 76, 20, 200, 83, 20, 198, 211, 16, 19, 121, 158, 159, 25, 245, 206, 119, 18, 238, 240, 219, 212, 9, 204, 27, 117, 6, 9, 112, 113, 118, 206, 160, 228, 4, 220, 237, 97, 18, 218, 166, 255, 124, 116, 96, 5, 242, 85, 5, 33, 33, 161, 149, 205, 24, 94, 47, 87, 134, 85, 226, 249, 249, 5, 227, 197, 223, 91, 128, 37, 145, 3, 96, 65, 74, 206, 160, 205, 17, 140, 49, 16, 124, 69, 229, 77, 147, 72, 195, 149, 211, 84, 148, 226, 162, 175, 93, 198, 251, 199, 132, 49, 167, 21, 89, 87, 205, 150, 41, 174, 160, 213, 125, 15, 15, 65, 96, 192, 67, 252, 206, 13, 103, 38, 154, 252, 72, 21, 156, 116, 67, 237, 172, 17, 108, 46, 200, 167, 4, 20, 190, 2, 62, 24, 188, 138, 137, 65, 223, 60, 175, 127, 5, 232, 205, 110, 122, 124, 42, 165, 128, 70, 229, 185, 170, 111, 202, 121, 244, 92, 171, 157, 138, 193, 245, 84, 75, 54, 39, 97, 4, 59, 209, 20, 218, 154, 67, 110, 234, 107, 114, 14, 141, 118, 141, 138, 138, 47, 119, 36, 141, 72, 25, 14, 177, 56, 43, 49, 180, 241, 114, 7, 147, 99, 214, 187, 57, 34, 226, 164, 120, 226, 222, 52, 116, 202, 181, 50, 85, 154, 29, 35, 109, 169, 3, 139, 175, 193, 131, 79, 80, 146, 136, 155, 47, 33, 196, 225, 189, 248, 228, 20, 187, 129, 70, 61, 72, 219, 224, 74, 177, 116, 127, 162, 5, 198, 39, 113, 176, 183, 223, 135, 54, 54, 218, 179, 112, 43, 190, 64, 39, 74, 135, 56, 200, 178, 87, 9, 51, 97, 186, 209, 101, 169, 64, 52, 31, 21, 137, 29, 238, 154, 107, 217, 59, 182, 253, 228, 200, 215, 119, 88, 232, 148, 113, 61, 51, 13, 154, 66, 32, 26, 105, 35, 212, 65, 0, 69, 26, 96, 231, 4, 164, 172, 255, 172, 249, 38, 4, 25, 122, 2, 156, 112, 7, 112, 169, 93, 31, 153, 45, 45, 135, 144, 37, 82, 19, 219, 242, 235, 49, 6, 44, 125, 86, 225, 78, 176, 86, 67, 9, 67, 51, 85, 140, 13, 234, 177, 235, 61, 1, 186, 132, 117, 132, 184, 184, 142, 230, 82, 216, 22, 143, 124, 32, 223, 67, 57, 26, 42, 242, 122, 66, 68, 167, 12, 69, 145, 117, 239, 210, 161, 126, 247, 154, 118, 227, 72, 251, 36, 7, 74, 103, 159, 103, 162, 191, 232, 0, 190, 34, 56, 228, 53, 66, 112, 109, 127, 70, 220, 53, 182, 216, 65, 195, 23, 100, 143, 113, 195, 185, 149, 15, 46, 94, 47, 106, 47, 75, 56, 190, 152, 113, 151, 131, 191, 32, 98, 130, 32, 68, 86, 174, 104, 130, 8, 241, 214, 34, 184, 220, 171, 129, 121, 62, 245, 113, 251, 95, 131, 215, 195, 27, 28, 57, 105, 41, 243, 113, 60, 128, 55, 14, 95, 24, 141, 67, 96, 254, 137, 70, 44, 31, 228, 119, 1, 70, 159, 203, 153, 145, 144, 120, 115, 45, 178, 225, 152, 151, 214, 131, 133, 29, 131, 96, 80, 163, 219, 209, 34, 166, 127, 187, 168, 202, 22, 207, 223, 174, 112, 218, 130, 99, 117, 44, 39, 108, 5, 193, 135, 251, 185, 50, 205, 170, 66, 192, 85, 145, 11, 31, 91, 165, 120, 196, 241, 202, 251, 10, 112, 211, 219, 140, 235, 65, 85, 38, 31, 234, 53, 152, 173, 149, 177, 44, 120, 204, 187, 41, 215, 20, 212, 169, 64, 208, 118, 7, 223, 34, 177, 51, 254, 45, 125, 50, 124, 103, 223, 15, 86, 151, 188, 127, 200, 98, 227, 167, 1, 107, 83, 10, 82, 184, 234, 216, 49, 83, 33, 238, 64, 197, 22, 119, 38, 182, 188, 206, 172, 93, 204, 14, 167, 72, 175, 218, 226, 52, 249, 169, 112, 40, 242, 129, 111, 186, 127, 50, 235, 242, 254, 196, 217, 93, 175, 35, 148, 119, 31, 157, 45, 137, 243, 139, 144, 134, 25, 145, 12, 105, 94, 5, 108, 232, 202, 179, 253, 149, 120, 141, 98, 36, 142, 129, 178, 67, 92, 246, 126, 31, 99, 204, 192, 213, 90, 185, 80, 4, 140, 47, 189, 66, 101, 38, 9, 143, 79, 84, 72, 65, 207, 25, 84, 203, 107, 174, 86, 20, 73, 129, 124, 141, 51, 122, 250, 223, 152, 214, 107, 72, 139, 161, 104, 194, 244, 103, 108, 156, 60, 149, 212, 38, 213, 99, 249, 128, 65, 226, 70, 104, 181, 65, 230, 241, 51, 89, 31, 134, 3, 142, 75, 30, 24, 245, 46, 152, 78, 113, 119, 175, 217, 242, 83, 172, 90, 114, 51, 7, 180, 10, 123, 231, 131, 40, 222, 33, 60, 17, 5, 178, 82, 196, 68, 243, 105, 45, 241, 166, 54, 25, 249, 144, 130, 245, 129, 222, 134, 192, 54, 68, 36, 248, 29, 146, 99, 172, 230, 191, 251, 152, 49, 47, 233, 129, 97, 164, 206, 180, 8, 92, 156, 214, 160, 213, 103, 167, 124, 23, 10, 160, 209, 8, 151, 239, 173, 103, 116, 131, 119, 118, 51, 181, 136, 190, 39, 40, 249, 106, 204, 108, 119, 155, 166, 198, 74, 213, 180, 225, 166, 160, 219, 112, 162, 250, 105, 46, 190, 192, 166, 38, 41, 111, 90, 219, 82, 189, 123, 18, 131, 2, 229, 193, 214, 150, 95, 251, 191, 67, 153, 209, 87, 65, 194, 71, 233, 131, 198, 129, 220, 54, 88, 48, 73, 151, 63, 230, 224, 0, 50, 134, 46, 238, 254, 89, 140, 32, 80, 112, 64, 36, 246, 184, 221, 164, 210, 54, 181, 163, 102, 153, 47, 116, 110, 166, 149, 224, 116, 200, 137, 104, 201, 159, 254, 177, 62, 62, 39, 133, 113, 37, 25, 173, 74, 92, 124, 65, 16, 221, 60, 4, 223, 249, 118, 0, 180, 233, 192, 52, 216, 30, 10, 11, 96, 88, 173, 1, 102, 64, 206, 130, 104, 25, 43, 129, 40, 154, 209, 33, 162, 242, 218, 44, 24, 210, 90, 119, 230, 158, 172, 200, 62, 124, 47, 140, 0, 192, 57, 156, 123, 139, 195, 200, 142, 43, 122, 228, 190, 214, 216, 207, 194, 94, 115, 183, 232, 232, 188, 135, 235, 123, 37, 60, 251, 53, 92, 95, 76, 120, 176, 158, 239, 176, 89, 242, 165, 59, 40, 255, 2, 108, 237, 42, 5, 173, 165, 90, 77, 17, 95, 82, 55, 240, 75, 35, 76, 1, 48, 245, 2, 82, 2, 229, 112, 53, 50, 217, 45, 137, 17, 129, 203, 164, 174, 193, 162, 189, 70, 81, 245, 207, 90, 65, 202, 24, 252, 77, 126, 127, 75, 115, 245, 177, 172, 28, 41, 218, 14, 32, 0, 51, 37, 78, 31, 0, 110, 49, 242, 183, 245, 202, 212, 58, 85, 203, 178, 185, 212, 198, 216, 151, 199, 116, 139, 247, 42, 231, 51, 236, 211, 52, 211, 99, 200, 219, 57, 101, 100, 154, 193, 13, 23, 198, 75, 152, 237, 53, 3, 70, 53, 154, 60, 153, 248, 25, 103, 107, 121, 137, 1, 81, 157, 23, 180, 214, 165, 70, 132, 48, 38, 233, 26, 252, 136, 71, 193, 129, 65, 190, 212, 168, 90, 157, 178, 134, 147, 60, 156, 185, 4, 187, 49, 37, 173, 164, 18, 129, 216, 207, 48, 186, 141, 72, 147, 181, 25, 171, 62, 183, 243, 14, 187, 28, 221, 213, 170, 174, 211, 66, 86, 251, 224, 62, 37, 236, 24, 28, 70, 22, 194, 14, 56, 109, 102, 178, 53, 3, 218, 248, 70, 68, 170, 27, 179, 106, 82, 210, 142, 242, 223, 8, 103, 215, 166, 137, 104, 136, 202, 47, 0, 151, 82, 176, 74, 113, 209, 61, 114, 92, 187, 107, 153, 19, 195, 125, 14, 166, 231, 107, 68, 68, 139, 184, 181, 6, 50, 176, 126, 7, 83, 61, 79, 79, 203, 45, 111, 241, 213, 75, 66, 250, 187, 69, 90, 148, 19, 225, 220, 211, 194, 104, 40, 60, 161, 228, 191, 18, 226, 38, 233, 228, 164, 235, 253, 120, 234, 228, 161, 119, 78, 242, 161, 46, 87, 78, 17, 115, 234, 196, 118, 147, 229, 118, 62, 250, 88, 246, 218, 65, 184, 110, 229, 81, 234, 148, 143, 201, 25, 89, 2, 229, 191, 19, 221, 170, 109, 143, 104, 124, 173, 79, 87, 157, 109, 54, 236, 185, 156, 141, 225, 116, 23, 208, 64, 37, 140, 84, 136, 0, 152, 12, 32, 201, 156, 149, 178, 121, 175, 242, 183, 198, 122, 17, 206, 137, 203, 208, 56, 164, 249, 175, 255, 193, 174, 123, 55, 160, 82, 107, 186, 103, 26, 84, 27, 27, 127, 55, 20, 245, 38, 196, 126, 173, 109, 234, 57, 68, 95, 124, 185, 129, 90, 93, 228, 228, 179, 190, 82, 172, 185, 22, 130, 114, 236, 207, 224, 211, 90, 149, 116, 42, 137, 254, 220, 58, 172, 230, 19, 136, 174, 207, 223, 5, 200, 156, 64, 15, 37, 69, 166, 145, 120, 154, 165, 229, 124, 188, 96, 61, 56, 3, 41, 138, 140, 55, 253, 82, 196, 234, 178, 38, 187, 171, 244, 114, 217, 149, 108, 151, 220, 106, 45, 59, 65, 84, 214, 183, 111, 17, 12, 42, 155, 95, 110, 173, 76, 65, 159, 156, 250, 138, 35, 228, 169, 168, 127, 205, 49, 82, 207, 108, 150, 69, 185, 214, 191, 160, 124, 58, 169, 18, 38, 7, 244, 218, 210, 186, 17, 47, 69, 116, 161, 88, 211, 252, 110, 177, 207, 120, 187, 139, 63, 216, 9, 8, 205, 224, 97, 101, 179, 164, 84, 211, 136, 112, 227, 161, 179, 222, 96, 152, 10, 53, 21, 29, 230, 77, 139, 8, 230, 95, 152, 153, 34, 187, 164, 116, 0, 165, 205, 166, 149, 236, 107, 216, 112, 173, 153, 98, 6, 201, 102, 121, 89, 166, 240, 112, 211, 123, 170, 202, 145, 107, 233, 76, 37, 119, 245, 220, 108, 183, 228, 127, 60, 130, 79, 80, 193, 119, 9, 144, 188, 1, 138, 234, 59, 239, 155, 25, 173, 172, 15, 50, 30, 90, 172, 55, 25, 25, 225, 148, 161, 97, 125, 236, 51, 101, 163, 174, 222, 144, 192, 174, 58, 73, 2, 83, 65, 55, 181, 21, 116, 229, 54, 196, 173, 59, 45, 57, 173, 182, 169, 194, 98, 198, 2, 116, 100, 109, 50, 141, 253, 79, 185, 255, 141, 168, 96, 51, 41, 106, 255, 252, 174, 45, 31, 197, 1, 222, 183, 50, 200, 108, 161, 197, 207, 0, 128, 252, 91, 147, 122, 180, 110, 113, 157, 59, 27, 177, 17, 226, 112, 42, 237, 84, 78, 77, 234, 25, 172, 104, 106, 243, 143, 170, 196, 61, 19, 172, 89, 227, 0, 251, 61, 140, 50, 55, 154, 82, 190, 162, 49, 227, 76, 111, 218, 23, 196, 227, 3, 151, 44, 107, 89, 80, 121, 94, 87, 112, 69, 246, 52, 237, 138, 192, 22, 152, 84, 239, 193, 233, 232, 155, 81, 133, 73, 120, 99, 194, 17, 67, 219, 126, 242, 98, 203, 254, 227, 173, 126, 98, 102, 158, 34, 21, 11, 178, 151, 158, 72, 53, 53, 94, 233, 8, 132, 134, 21, 178, 134, 173, 112, 167, 172, 198, 153, 180, 226, 126, 70, 45, 90, 134, 165, 133, 217, 119, 62, 245, 225, 8, 142, 220, 99, 87, 228, 183, 198, 8, 143, 253, 228, 109, 48, 159, 250, 133, 69, 241, 30, 113, 56, 121, 8, 22, 145, 117, 189, 190, 39, 186, 26, 221, 231, 6, 24, 249, 179, 117, 250, 68, 181, 165, 77, 43, 172, 216, 68, 63, 172, 239, 19, 240, 248, 87, 219, 44, 20, 142, 77, 186, 202, 73, 47, 87, 141, 196, 27, 104, 196, 59, 145, 3, 31, 140, 254, 198, 172, 77, 125, 193, 158, 155, 22, 15, 139, 42, 9, 87, 74, 55, 109, 191, 219, 103, 125, 104, 203, 99, 246, 152, 32, 114, 67, 53, 248, 200, 184, 63, 123, 0, 128, 179, 254, 214, 11, 64, 23, 100, 211, 15, 40, 220, 88, 126, 12, 253, 182, 18, 11, 208, 180, 55, 242, 151, 224, 5, 254, 35, 149, 246, 145, 5, 76, 192, 177, 213, 177, 70, 69, 12, 141, 251, 80, 113, 132, 134, 51, 183, 27, 153, 121, 185, 211, 174, 198, 86, 223, 25, 133, 193, 245, 17, 69, 113, 243, 76, 16, 197, 166, 89, 81, 95, 214, 253, 220, 56, 158, 235, 175, 181, 254, 224, 111, 226, 233, 107, 254, 236, 241, 249, 230, 116, 37, 110, 35, 110, 201, 75, 177, 12, 181, 252, 39, 151, 71, 190, 202, 172, 111, 244, 236, 230, 3, 145, 79, 159, 171, 70, 61, 86, 77, 41, 55, 4, 69, 215, 39, 232, 115, 218, 38, 66, 231, 147, 214, 224, 0, 235, 17, 13, 239, 232, 161, 8, 252, 53, 78, 1, 80, 198, 15, 191, 126, 64, 116, 31, 107, 174, 212, 248, 93, 122, 96, 194, 33, 76, 190, 210, 110, 161, 223, 213, 181, 223, 5, 92, 162, 161, 44, 0, 9, 72, 59, 62, 3, 34, 2, 148, 6, 191, 138, 116, 41, 13, 39, 133, 228, 246, 117, 120, 219, 177, 197, 107, 235, 25, 112, 166, 158, 190, 162, 18, 158, 73, 169, 199, 23, 30, 225, 169, 217, 197, 130, 251, 199, 98, 208, 255, 68, 32, 220, 56, 171, 142, 182, 204, 177, 237, 249, 147, 162, 63, 67, 206, 78, 205, 107, 110, 121, 82, 68, 93, 48, 38, 122, 90, 126, 39, 33, 34, 138, 245, 41, 248, 7, 172, 80, 136, 22, 161, 136, 11, 26, 33, 122, 140, 191, 147, 94, 142, 159, 220, 90, 225, 68, 210, 230, 159, 40, 97, 250, 16, 150, 207, 149, 161, 208, 19, 180, 6, 3, 205, 29, 110, 115, 99, 92, 251, 23, 135, 180, 54, 230, 7, 74, 137, 178, 39, 76, 218, 177, 226, 31, 209, 137, 210, 40, 189, 5, 40, 7, 79, 255, 238, 200, 53, 111, 13, 154, 109, 36, 23, 82, 43, 207, 106, 110, 20, 208, 106, 240, 240, 240, 21, 65, 230, 190, 89, 241, 202, 118, 151, 110, 17, 134, 80, 218, 190, 6, 245, 58, 213, 142, 76, 149, 181, 170, 21, 240, 186, 108, 137, 230, 29, 2, 7, 46, 12, 161, 205, 137, 31, 68, 157, 218, 228, 154, 148, 222, 128, 52, 186, 144, 124, 137, 34, 204, 0, 236, 130, 41, 234, 219, 162, 137, 46, 164, 19, 37, 13, 160, 153, 245, 99, 186, 84, 30, 128, 75, 1, 106, 70, 75, 65, 127, 31, 199, 85, 176, 15, 64, 24, 98, 131, 211, 158, 58, 155, 126, 85, 55, 247, 22, 138, 105, 170, 97, 145, 56, 234, 44, 149, 129, 156, 216, 226, 166, 96, 177, 159, 15, 9, 207, 44, 4, 160, 106, 122, 68, 245, 205, 42, 45, 173, 173, 162, 184, 134, 246, 105, 183, 101, 197, 64, 122, 217, 68, 79, 24, 107, 124, 8, 146, 183, 249, 42, 62, 2, 107, 193, 19, 158, 183, 45, 213, 151, 129, 191, 117, 26, 115, 245, 132, 91, 231, 41, 34, 56, 0, 178, 97, 104, 224, 147, 188, 201, 24, 190, 173, 202, 217, 248, 87, 231, 84, 152, 152, 15, 170, 120, 60, 6, 210, 204, 214, 109, 67, 253, 86, 195, 83, 77, 43, 242, 34, 54, 218, 45, 80, 56, 251, 142, 24, 71, 235, 250, 123, 75, 140, 142, 37, 201, 238, 16, 219, 131, 89, 29, 236, 45, 63, 63, 161, 106, 117, 187, 164, 244, 66, 2, 15, 12, 48, 167, 33, 72, 41, 15, 12, 63, 40, 26, 105, 121, 73, 149, 212, 58, 173, 163, 149, 123, 125, 212, 167, 13, 176, 245, 141, 247, 175, 72, 197, 130, 73, 25, 238, 9, 61, 13, 207, 253, 2, 199, 250, 98, 125, 64, 166, 65, 27, 172, 253, 158, 154, 32, 166, 2, 167, 72, 153, 75, 4, 85, 140, 78, 217, 18, 198, 171, 21, 136, 232, 99, 134, 221, 33, 108, 127, 223, 72, 34, 222, 95, 116, 247, 220, 143, 176, 92, 144, 153, 91, 171, 116, 5, 44, 23, 175, 103, 175, 149, 135, 166, 245, 243, 183, 49, 221, 151, 225, 240, 255, 145, 5, 54, 32, 99, 200, 29, 141, 249, 95, 183, 94, 117, 86, 196, 81, 179, 94, 180, 127, 249, 84, 79, 6, 153, 165, 159, 220, 169, 173, 37, 118, 155, 142, 187, 246, 187, 40, 199, 254, 6, 5, 228, 203, 4, 14, 140, 95, 52, 174, 159, 177, 8, 232, 212, 209, 65, 12, 30, 185, 173, 68, 99, 85, 102, 39, 226, 11, 37, 188, 28, 8, 58, 193, 11, 119, 219, 110, 247, 202, 84, 200, 112, 231, 144, 25, 18, 183, 190, 48, 169, 113, 126, 130, 157, 77, 240, 1, 212, 148, 128, 63, 19, 160, 138, 26, 231, 199, 120, 45, 40, 189, 245, 4, 117, 208, 158, 101, 31, 222, 69, 166, 62, 226, 45, 8, 78, 244, 96, 142, 187, 38, 174, 137, 42, 68, 154, 211, 160, 225, 34, 228, 63, 7, 113, 29, 14, 184, 32, 17, 1, 154, 87, 41, 143, 32, 94, 128, 156, 77, 105, 84, 84, 253, 185, 220, 25, 5, 186, 157, 251, 229, 140, 42, 136, 74, 6, 191, 165, 155, 210, 126, 232, 187, 61, 185, 61, 148, 9, 88, 52, 32, 241, 11, 39, 233, 247, 35, 169, 241, 78, 147, 194, 159, 129, 39, 124, 50, 176, 229, 68, 185, 157, 103, 12, 178, 215, 95, 39, 40, 141, 123, 202, 107, 117, 56, 228, 252, 101, 32, 73, 29, 121, 74, 241, 99, 164, 133, 178, 135, 201, 24, 26, 154, 105, 27, 155, 38, 49, 129, 12, 103, 154, 186, 69, 54, 89, 200, 213, 152, 160, 230, 165, 191, 251, 126, 124, 225, 112, 37, 154, 154, 171, 223, 186, 108, 124, 45, 120, 138, 10, 28, 239, 70, 143, 58, 142, 209, 118, 14, 151, 114, 15, 77, 121, 40, 191, 164, 233, 211, 89, 98, 75, 32, 48, 75, 44, 188, 40, 160, 38, 187, 56, 156, 98, 99, 2, 102, 209, 176, 247, 103, 179, 234, 146, 86, 133, 168, 177, 166, 250, 237, 39, 73, 89, 120, 105, 74, 210, 151, 252, 189, 65, 237, 135, 137, 24, 59, 209, 0, 189, 203, 45, 110, 220, 59, 168, 248, 242, 17, 33, 58, 233, 111, 240, 241, 98, 160, 111, 182, 113, 206, 175, 0, 175, 8, 139, 100, 8, 22, 124, 128, 190, 88, 24, 205, 158, 206, 105, 39, 55, 88, 144, 105, 242, 153, 122, 0, 202, 121, 223, 252, 120, 208, 170, 235, 179, 47, 136, 34, 56, 169, 253, 117, 183, 124, 100, 5, 90, 104, 113, 82, 11, 9, 228, 165, 110, 192, 6, 87, 133, 53, 64, 91, 11, 12, 207, 94, 115, 158, 106, 58, 117, 254, 97, 97, 190, 38, 175, 192, 175, 103, 106, 9, 30, 220, 75, 157, 38, 123, 17, 98, 169, 211, 51, 250, 173, 128, 40, 89, 220, 134, 216, 58, 92, 143, 209, 124, 145, 250, 48, 222, 88, 92, 3, 251, 102, 17, 179, 38, 47, 151, 109, 97, 2, 78, 237, 200, 76, 216, 225, 135, 243, 151, 92, 205, 211, 76, 212, 44, 47, 184, 84, 197, 10, 112, 243, 143, 83, 129, 148, 166, 169, 21, 147, 178, 236, 143, 148, 229, 167, 95, 128, 238, 185, 158, 243, 9, 177, 64, 199, 222, 195, 47, 98, 129, 34, 19, 48, 63, 90, 187, 120, 115, 86, 7, 106, 66, 245, 241, 145, 65, 164, 91, 116, 38, 226, 196, 121, 1, 189, 17, 42, 191, 215, 162, 11, 212, 253, 60, 3, 10, 20, 90, 47, 202, 67, 30, 176, 27, 137, 44, 235, 253, 112, 186, 47, 62, 220, 22, 93, 58, 61, 141, 214, 30, 3, 120, 188, 208, 45, 252, 78, 232, 135, 237, 85, 150, 243, 121, 183, 0, 173, 20, 197, 217, 174, 208, 86, 180, 89, 26, 141, 126, 15, 56, 198, 252, 17, 113, 115, 80, 105, 252, 6, 122, 80, 91, 83, 167, 8, 213, 26, 57, 111, 215, 134, 72, 96, 47, 212, 57, 72, 217, 34, 196, 3, 25, 227, 61, 183, 96, 81, 177, 203, 168, 254, 157, 75, 84, 125, 6, 101, 109, 141, 110, 148, 56, 11, 160, 30, 30, 42, 194, 245, 29, 54, 95, 152, 16, 189, 54, 149, 54, 232, 130, 236, 147, 137, 194, 195, 224, 151, 247, 14, 242, 248, 183, 19, 164, 201, 143, 189, 139, 119, 235, 189, 195, 80, 238, 21, 213, 121, 212, 161, 66, 96, 3, 114, 10, 83, 130, 255, 180, 104, 176, 217, 249, 97, 14, 73, 228, 90, 247, 245, 32, 138, 58, 176, 167, 156, 22, 41, 115, 131, 122, 6, 175, 250, 53, 40, 156, 90, 133, 217, 42, 244, 143, 128, 223, 39, 241, 95, 47, 20, 214, 108, 178, 233, 171, 38, 76, 135, 143, 182, 205, 232, 41, 69, 212, 116, 197, 143, 27, 181, 227, 132, 203, 47, 10, 48, 254, 66, 235, 244, 66, 44, 253, 134, 214, 213, 39, 149, 175, 136, 103, 135, 21, 222, 216, 250, 159, 227, 151, 81, 150, 40, 229, 232, 243, 165, 143, 200, 67, 82, 192, 62, 112, 202, 171, 38, 48, 162, 29, 39, 245, 88, 201, 240, 186, 153, 36, 21, 125, 86, 190, 139, 245, 247, 13, 135, 134, 163, 124, 50, 240, 37, 32, 67, 141, 229, 196, 159, 216, 103, 94, 113, 167, 130, 193, 60, 245, 154, 160, 8, 188, 109, 211, 242, 18, 65, 122, 116, 100, 34, 84, 184, 144, 229, 206, 107, 144, 126, 248, 124, 176, 79, 63, 136, 21, 100, 103, 193, 141, 100, 82, 134, 97, 201, 190, 41, 236, 149, 0, 32, 94, 195, 121, 69, 61, 92, 216, 56, 215, 38, 105, 154, 145, 121, 121, 40, 118, 117, 71, 64, 153, 138, 64, 70, 243, 82, 88, 38, 238, 172, 163, 4, 221, 131, 29, 201, 145, 15, 94, 221, 2, 37, 88, 124, 219, 221, 189, 31, 167, 185, 180, 219, 2, 141, 139, 81, 112, 248, 252, 39, 38, 44, 101, 63, 50, 7, 119, 70, 65, 75, 53, 13, 57, 177, 88, 253, 199, 97, 53, 83, 76, 54, 34, 187, 197, 85, 5, 102, 122, 144, 45, 28, 13, 192, 237, 74, 100, 157, 202, 8, 83, 231, 101, 26, 196, 185, 39, 2, 20, 164, 159, 9, 78, 154, 1, 20, 133, 207, 143, 110, 196, 184, 50, 39, 111, 143, 253, 102, 63, 170, 174, 236, 72, 122, 124, 138, 248, 152, 231, 115, 244, 92, 19, 129, 248, 211, 61, 173, 48, 184, 108, 138, 235, 24, 3, 81, 125, 127, 58, 246, 13, 178, 221, 201, 216, 112, 74, 46, 236, 84, 157, 244, 134, 4, 241, 71, 15, 150, 61, 215, 81, 102, 5, 51, 218, 84, 124, 130, 63, 148, 213, 246, 135, 177, 181, 244, 227, 114, 7, 20, 240, 202, 17, 5, 54, 101, 77, 217, 243, 96, 157, 161, 7, 220, 24, 56, 3, 15, 182, 112, 174, 130, 252, 70, 60, 181, 216, 15, 3, 136, 32, 166, 97, 20, 153, 93, 84, 112, 162, 66, 18, 199, 130, 192, 183, 117, 151, 52, 51, 218, 58, 71, 217, 0, 241, 61, 10, 105, 150, 146, 246, 85, 239, 242, 230, 211, 8, 212, 201, 20, 160, 24, 50, 35, 237, 83, 215, 41, 238, 108, 247, 1, 55, 212, 165, 170, 13, 114, 6, 14, 219, 55, 155, 203, 204, 144, 195, 85, 54, 183, 70, 240, 249, 119, 66, 38, 225, 40, 9, 32, 10, 206, 13, 59, 42, 14, 220, 144, 91, 214, 215, 172, 139, 21, 172, 254, 85, 175, 235, 153, 98, 242, 229, 175, 161, 116, 81, 160, 169, 29, 175, 226, 244, 231, 151, 114, 39, 23, 97, 200, 102, 114, 135, 210, 161, 67, 226, 11, 121, 73, 241, 36, 163, 13, 39, 124, 63, 167, 242, 42, 70, 204, 64, 191, 14, 3, 165, 10, 6, 137, 200, 123, 113, 134, 20, 201, 10, 89, 135, 45, 80, 176, 214, 122, 93, 115, 0, 254, 226, 181, 172, 81, 194, 143, 67, 86, 100, 190, 49, 6, 214, 233, 147, 49, 150, 109, 158, 92, 23, 181, 177, 92, 32, 183, 221, 192, 83, 129, 103, 174, 90, 181, 178, 112, 20, 110, 213, 68, 252, 46, 12, 193, 162, 59, 139, 156, 229, 8, 162, 77, 204, 25, 188, 107, 164, 19, 227, 55, 236, 132, 239, 81, 175, 164, 192, 175, 226, 59, 175, 40, 133, 246, 82, 24, 253, 170, 223, 87, 187, 192, 210, 229, 30, 162, 17, 135, 76, 216, 194, 208, 107, 69, 104, 154, 135, 3, 103, 5, 26, 170, 85, 37, 202, 3, 198, 75, 68, 211, 166, 153, 193, 225, 9, 126, 17, 168, 91, 84, 186, 245, 77, 2, 111, 11, 174, 193, 68, 171, 199, 3, 179, 115, 135, 167, 126, 4, 128, 131, 20, 163, 84, 70, 103, 130, 42, 108, 171, 134, 116, 6, 179, 113, 83, 83, 165, 76, 242, 241, 169, 128, 58, 224, 41, 108, 239, 52, 11, 73, 154, 58, 91, 119, 118, 198, 78, 10, 12, 50, 67, 130, 245, 23, 128, 133, 248, 73, 211, 12, 64, 39, 109, 241, 38, 80, 72, 109, 169, 144, 86, 121, 21, 167, 145, 235, 135, 38, 98, 226, 190, 127, 31, 179, 38, 12, 27, 80, 82, 156, 169, 10, 113, 240, 113, 246, 33, 143, 80, 90, 26, 214, 195, 46, 25, 255, 54, 162, 93, 32, 6, 174, 175, 245, 214, 102, 9, 50, 235, 33, 204, 232, 227, 114, 105, 43, 122, 234, 163, 198, 178, 6, 206, 193, 38, 90, 221, 175, 179, 224, 114, 54, 116, 199, 122, 49, 223, 102, 164, 60, 43, 114, 206, 138, 128, 174, 53, 66, 41, 253, 168, 94, 93, 99, 230, 242, 101, 22, 228, 124, 234, 184, 87, 0, 9, 51, 250, 140, 98, 65, 66, 98, 194, 107, 61, 209, 181, 105, 238, 129, 152, 12, 47, 244, 113, 248, 59, 123, 89, 175, 240, 182, 198, 180, 147, 213, 38, 51, 109, 166, 221, 20, 101, 103, 97, 9, 250, 241, 34, 39, 99, 192, 89, 198, 75, 56, 12, 200, 45, 96, 75, 179, 209, 120, 160, 141, 45, 127, 77, 55, 195, 0, 97, 249, 238, 141, 59, 238, 195, 17, 249, 216, 170, 163, 64, 1, 196, 152, 21, 71, 31, 22, 230, 81, 178, 246, 249, 19, 217, 71, 95, 131, 78, 120, 4, 173, 111, 118, 128, 253, 151, 7, 145, 75, 231, 165, 132, 42, 182, 249, 17, 128, 158, 22, 121, 164, 212, 211, 62, 205, 183, 201, 93, 216, 244, 85, 92, 245, 58, 90, 133, 70, 58, 36, 154, 88, 144, 42, 185, 67, 110, 216, 141, 15, 119, 232, 177, 174, 102, 35, 141, 201, 23, 254, 61, 254, 12, 70, 156, 37, 164, 115, 154, 99, 11, 36, 226, 7, 224, 168, 109, 54, 31, 197, 54, 3, 5, 169, 51, 100, 99, 112, 72, 241, 125, 188, 18, 15, 236, 145, 162, 251, 171, 142, 252, 30, 189, 206, 225, 111, 248, 248, 30, 53, 52, 185, 145, 222, 222, 239, 136, 113, 163, 98, 105, 150, 173, 184, 217, 24, 103, 168, 70, 110, 237, 35, 106, 254, 122, 46, 249, 162, 199, 21, 99, 192, 223, 250, 118, 82, 170, 129, 65, 12, 200, 97, 205, 86, 102, 26, 165, 136, 51, 93, 21, 30, 137, 211, 19, 99, 23, 136, 85, 168, 179, 58, 48, 43, 232, 224, 27, 75, 233, 110, 95, 40, 244, 33, 151, 22, 225, 189, 81, 61, 57, 249, 187, 142, 178, 98, 149, 233, 169, 51, 81, 191, 255, 239, 128, 45, 76, 158, 184, 168, 14, 225, 187, 180, 223, 122, 228, 197, 46, 14, 146, 137, 66, 54, 153, 115, 42, 244, 88, 98, 55, 198, 53, 0, 39, 54, 32, 206, 24, 1, 113, 229, 116, 196, 68, 194, 213, 113, 145, 228, 14, 13, 178, 50, 178, 39, 34, 16, 22, 6, 224, 114, 42, 119, 213, 89, 213, 53, 23, 190, 139, 80, 175, 195, 223, 50, 25, 39, 228, 33, 72, 222, 131, 121, 216, 115, 223, 1, 50, 71, 149, 104, 42, 24, 102, 17, 226, 189, 248, 146, 149, 247, 225, 232, 139, 255, 21, 176, 190, 91, 148, 245, 193, 192, 88, 255, 87, 144, 59, 15, 60, 209, 88, 131, 53, 92, 5, 69, 85, 163, 104, 169, 44, 206, 11, 151, 148, 35, 66, 88, 61, 206, 99, 226, 128, 24, 151, 12, 43, 98, 35, 3, 251, 206, 124, 104, 223, 244, 100, 215, 203, 220, 142, 107, 140, 48, 144, 164, 250, 246, 230, 241, 65, 164, 126, 70, 209, 25, 52, 156, 214, 101, 132, 133, 7, 61, 176, 20, 194, 247, 85, 197, 4, 245, 17, 61, 27, 0, 65, 29, 199, 216, 189, 74, 207, 45, 229, 86, 73, 35, 85, 186, 152, 24, 178, 20, 202, 16, 177, 126, 148, 226, 244, 111, 11, 70, 19, 131, 33, 85, 245, 174, 24, 106, 254, 99, 123, 39, 211, 253, 42, 100, 17, 3, 205, 42, 115, 154, 226, 25, 168, 227, 200, 112, 214, 212, 254, 71, 242, 6, 23, 41, 178, 152, 76, 144, 95, 54, 247, 161, 170, 168, 49, 218, 12, 171, 5, 232, 115, 163, 144, 165, 103, 54, 59, 144, 216, 159, 220, 62, 20, 106, 14, 137, 33, 143, 57, 199, 195, 37, 3, 215, 48, 135, 172, 233, 155, 56, 72, 207, 87, 93, 109, 222, 34, 15, 73, 23, 48, 239, 81, 248, 117, 57, 155, 156, 215, 100, 35, 103, 69, 112, 95, 219, 170, 91, 58, 222, 201, 196, 52, 21, 204, 160, 223, 58, 99, 61, 27, 177, 126, 51, 47, 184, 142, 255, 26, 207, 141, 239, 125, 170, 198, 74, 187, 220, 83, 15, 66, 251, 72, 243, 95, 241, 124, 204, 72, 24, 56, 196, 27, 24, 29, 229, 98, 144, 165, 83, 24, 121, 194, 165, 229, 151, 239, 53, 202, 92, 205, 56, 219, 8, 237, 64, 98, 2, 41, 16, 138, 5, 168, 127, 123, 129, 227, 245, 214, 253, 182, 126, 153, 165, 93, 98, 85, 227, 193, 91, 4, 128, 186, 87, 209, 93, 234, 27, 118, 156, 174, 206, 239, 231, 136, 122, 232, 166, 188, 113, 104, 239, 161, 239, 75, 219, 5, 180, 234, 118, 255, 136, 157, 14, 253, 7, 6, 19, 206, 215, 200, 9, 51, 168, 88, 80, 239, 244, 47, 24, 15, 93, 160, 115, 154, 45, 118, 64, 63, 83, 70, 74, 80, 180, 17, 39, 49, 97, 135, 133, 185, 6, 202, 98, 113, 29, 138, 92, 8, 76, 17, 193, 73, 170, 170, 112, 240, 59, 41, 127, 217, 159, 72, 191, 142, 77, 19, 59, 124, 150, 156, 79, 208, 212, 116, 122, 228, 226, 135, 194, 137, 117, 233, 134, 102, 149, 208, 232, 4, 169, 254, 66, 27, 66, 88, 133, 115, 85, 83, 150, 252, 79, 22, 8, 157, 23, 148, 153, 101, 61, 40, 131, 170, 100, 52, 27, 220, 78, 91, 191, 82, 143, 75, 49, 249, 189, 154, 50, 161, 61, 7, 159, 75, 88, 171, 139, 69, 86, 113, 246, 247, 63, 108, 151, 109, 253, 177, 23, 137, 150, 119, 79, 157, 235, 246, 20, 104, 79, 200, 146, 85, 182, 116, 54, 226, 102, 218, 155, 145, 42, 217, 125, 66, 224, 134, 143, 129, 41, 221, 118, 69, 237, 6, 157, 23, 117, 203, 2, 84, 100, 125, 214, 121, 38, 142, 171, 102, 209, 10, 6, 201, 54, 202, 243, 103, 139, 186, 19, 233, 176, 125, 55, 12, 95, 86, 69, 57, 141, 143, 227, 27, 2, 196, 57, 154, 8, 44, 172, 182, 250, 45, 217, 78, 226, 112, 238, 155, 207, 57, 140, 135, 84, 59, 152, 58, 32, 93, 111, 13, 79, 141, 56, 178, 173, 82, 79, 221, 236, 12, 0, 179, 248, 127, 181, 59, 190, 239, 19, 52, 107, 202, 58, 210, 237, 248, 123, 47, 186, 47, 17, 100, 141, 112, 28, 228, 44, 86, 34, 219, 45, 153, 182, 117, 74, 183, 144, 198, 118, 195, 116, 201, 208, 108, 167, 90, 68, 151, 160, 194, 50, 173, 21, 26, 213, 173, 223, 175, 121, 127, 170, 113, 27, 248, 146, 119, 42, 74, 161, 133, 185, 102, 99, 214, 68, 207, 43, 212, 214, 201, 211, 47, 163, 79, 31, 76, 74, 216, 60, 159, 36, 65, 229, 79, 10, 30, 123, 80, 108, 75, 13, 123, 241, 183, 137, 163, 99, 186, 46, 0, 241, 214, 116, 58, 182, 86, 202, 141, 78, 177, 204, 123, 33, 154, 20, 183, 191, 47, 122, 254, 13, 153, 42, 244, 243, 6, 41, 95, 40, 125, 55, 230, 189, 18, 43, 213, 33, 92, 158, 118, 238, 143, 97, 126, 83, 53, 206, 87, 99, 125, 114, 144, 251, 30, 25, 129, 205, 239, 214, 85, 130, 252, 226, 225, 207, 214, 15, 232, 80, 29, 40, 246, 229, 210, 228, 41, 177, 197, 251, 219, 0, 93, 163, 177, 161, 146, 88, 11, 237, 47, 120, 109, 136, 205, 53, 87, 217, 224, 142, 218, 129, 81, 67, 176, 14, 47, 208, 87, 95, 188, 147, 170, 16, 53, 110, 127, 161, 199, 209, 113, 138, 53, 178, 43, 173, 87, 133, 79, 51, 158, 230, 138, 176, 114, 170, 81, 68, 41, 112, 17, 51, 26, 215, 30, 119, 172, 76, 175, 123, 69, 126, 34, 160, 212, 14, 1, 17, 5, 148, 6, 226, 24, 12, 240, 126, 7, 86, 109, 101, 58, 168, 152, 2, 116, 131, 95, 23, 4, 98, 35, 54, 182, 203, 168, 30, 84, 207, 198, 37, 119, 2, 27, 107, 205, 163, 77, 111, 8, 219, 25, 244, 62, 158, 113, 227, 67, 164, 61, 121, 78, 129, 127, 252, 144, 0, 192, 103, 193, 34, 60, 98, 28, 107, 239, 137, 46, 204, 111, 10, 210, 174, 66, 81, 223, 91, 179, 145, 154, 199, 205, 160, 139, 158, 174, 51, 233, 186, 100, 148, 239, 76, 177, 184, 164, 43, 142, 40, 80, 166, 41, 75, 136, 116, 219, 84, 105, 99, 185, 71, 83, 27, 91, 103, 123, 231, 160, 55, 5, 164, 164, 129, 209, 229, 147, 22, 151, 162, 98, 193, 97, 195, 36, 163, 29, 114, 80, 102, 70, 155, 206, 254, 14, 84, 140, 250, 46, 99, 213, 128, 66, 131, 163, 85, 31, 51, 14, 179, 37, 153, 23, 203, 227, 252, 172, 23, 207, 122, 24, 143, 228, 202, 50, 109, 27, 222, 64, 65, 4, 92, 237, 116, 58, 28, 229, 114, 55, 144, 119, 170, 66, 140, 114, 179, 208, 204, 76, 211, 143, 191, 226, 49, 28, 149, 164, 142, 215, 155, 6, 9, 30, 105, 10, 34, 56, 231, 27, 123, 40, 32, 41, 171, 32, 166, 78, 56, 56, 163, 214, 33, 46, 246, 140, 161, 166, 185, 211, 163, 79, 192, 254, 27, 19, 82, 134, 32, 95, 47, 178, 131, 40, 31, 214, 208, 197, 24, 39, 153, 179, 12, 172, 178, 13, 244, 183, 198, 161, 148, 137, 183, 6, 151, 16, 12, 206, 73, 99, 179, 145, 195, 212, 98, 50, 147, 43, 246, 9, 198, 190, 26, 17, 21, 43, 74, 48, 183, 96, 243, 34, 13, 153, 19, 218, 202, 74, 169, 71, 16, 192, 17, 218, 210, 152, 230, 97, 252, 165, 241, 235, 181, 92, 24, 167, 40, 66, 248, 167, 174, 183, 66, 250, 166, 54, 60, 103, 111, 171, 72, 83, 193, 255, 61, 77, 161, 107, 76, 109, 221, 10, 213, 62, 147, 243, 105, 113, 252, 235, 9, 29, 26, 21, 151, 228, 219, 17, 136, 80, 130, 35, 8, 118, 118, 158, 166, 133, 238, 77, 58, 155, 148, 195, 141, 120, 18, 5, 141, 230, 177, 125, 241, 236, 98, 214, 188, 115, 16, 56, 213, 148, 161, 46, 216, 201, 142, 65, 76, 213, 238, 75, 187, 243, 226, 197, 179, 225, 52, 181, 227, 47, 193, 152, 220, 43, 61, 94, 95, 248, 125, 128, 22, 213, 85, 75, 233, 163, 171, 111, 247, 149, 75, 184, 201, 93, 104, 216, 223, 70, 212, 0, 110, 46, 138, 27, 22, 132, 156, 229, 186, 12, 1, 44, 122, 92, 234, 98, 16, 125, 37, 104, 224, 24, 18, 105, 244, 6, 247, 124, 117, 207, 246, 185, 215, 223, 16, 206, 160, 85, 2, 38, 175, 75, 65, 254, 122, 83, 114, 10, 173, 148, 251, 248, 54, 175, 195, 11, 251, 121, 170, 216, 31, 30, 110, 73, 93, 55, 122, 12, 118, 41, 139, 188, 68, 151, 118, 144, 203, 82, 79, 51, 149, 233, 117, 71, 199, 45, 121, 10, 244, 212, 74, 153, 28, 209, 197, 52, 231, 226, 255, 197, 61, 122, 50, 221, 221, 104, 42, 55, 108, 119, 200, 194, 212, 156, 60, 123, 203, 164, 19, 58, 80, 253, 147, 96, 138, 57, 105, 166, 183, 181, 146, 7, 181, 135, 246, 10, 40, 151, 227, 103, 104, 57, 92, 104, 168, 106, 213, 162, 72, 162, 94, 57, 84, 138, 124, 54, 160, 164, 34, 63, 168, 37, 88, 191, 220, 5, 204, 193, 209, 108, 12, 148, 226, 140, 174, 85, 235, 162, 86, 78, 238, 141, 170, 53, 153, 31, 15, 112, 47, 50, 139, 225, 242, 191, 165, 232, 187, 24, 205, 78, 188, 40, 141, 18, 254, 188, 29, 206, 123, 78, 94, 150, 252, 39, 249, 252, 81, 220, 47, 6, 35, 55, 88, 78, 113, 169, 252, 1, 92, 116, 122, 40, 51, 148, 56, 81, 227, 215, 229, 59, 78, 16, 93, 97, 168, 51, 49, 109, 56, 83, 156, 239, 11, 133, 165, 168, 47, 15, 43, 73, 249, 36, 93, 220, 203, 222, 79, 224, 77, 154, 147, 158, 62, 52, 117, 7, 249, 70, 123, 233, 99, 53, 156, 12], - [107, 54, 162, 221, 79, 169, 5, 55, 35, 56, 20, 146, 122, 72, 104, 48, 171, 146, 115, 75, 97, 174, 213, 71, 250, 93, 48, 96, 69, 80, 116, 231, 39, 78, 7, 183, 19, 193, 162, 65, 116, 240, 74, 30, 49, 222, 210, 34, 129, 112, 144, 57, 131, 39, 235, 80, 153, 42, 102, 148, 62, 196, 209, 66, 188, 107, 16, 93, 247, 72, 250, 230, 131, 199, 131, 164, 13, 144, 80, 89, 13, 156, 25, 35, 13, 254, 7, 143, 157, 54, 172, 9, 233, 150, 39, 187, 222, 188, 94, 173, 28, 190, 20, 215, 136, 204, 254, 82, 216, 147, 71, 241, 180, 57, 129, 87, 60, 72, 97, 188, 198, 101, 35, 201, 104, 173, 207, 10, 23, 162, 229, 85, 222, 139, 111, 215, 233, 85, 45, 187, 163, 186, 41, 113, 188, 217, 128, 20, 121, 62, 140, 170, 147, 99, 126, 69, 204, 83, 95, 43, 119, 76, 84, 80, 0, 215, 244, 105, 191, 176, 92, 135, 46, 244, 50, 106, 246, 45, 107, 43, 192, 95, 64, 185, 21, 86, 217, 238, 235, 40, 223, 168, 207, 156, 129, 244, 228, 152, 26, 215, 245, 58, 112, 130, 12, 188, 52, 231, 64, 82, 123, 10, 49, 151, 126, 25, 7, 249, 226, 120, 33, 250, 30, 80, 165, 203, 0, 157, 119, 62, 82, 231, 182, 47, 247, 81, 140, 232, 226, 66, 162, 76, 127, 231, 134, 117, 43, 4, 81, 26, 104, 161, 226, 3, 219, 54, 162, 158, 142, 116, 56, 198, 111, 61, 64, 126, 202, 237, 134, 22, 196, 215, 218, 62, 158, 75, 69, 42, 33, 124, 164, 195, 26, 8, 132, 87, 7, 194, 254, 129, 103, 66, 207, 37, 164, 146, 155, 131, 245, 12, 159, 82, 73, 6, 142, 137, 216, 154, 236, 120, 44, 44, 137, 18, 242, 143, 232, 247, 146, 66, 142, 150, 230, 252, 70, 81, 32, 253, 60, 10, 156, 151, 203, 79, 104, 114, 218, 184, 159, 56, 232, 195, 29, 156, 41, 187, 154, 233, 35, 161, 62, 139, 185, 195, 27, 71, 119, 103, 50, 128, 205, 216, 65, 10, 69, 21, 223, 21, 135, 83, 239, 212, 208, 42, 106, 241, 16, 9, 241, 186, 198, 129, 146, 125, 76, 203, 83, 196, 139, 179, 164, 165, 111, 11, 231, 220, 58, 175, 213, 222, 82, 148, 237, 196, 84, 67, 225, 147, 103, 73, 252, 244, 69, 240, 80, 247, 71, 88, 16, 148, 109, 239, 7, 27, 236, 17, 105, 159, 227, 10, 211, 240, 160, 208, 175, 77, 227, 168, 78, 140, 61, 67, 65, 167, 239, 180, 20, 91, 232, 163, 7, 25, 20, 118, 196, 233, 125, 42, 239, 13, 114, 213, 138, 147, 106, 175, 172, 89, 212, 21, 32, 190, 128, 246, 12, 170, 45, 181, 220, 234, 116, 45, 242, 252, 99, 96, 32, 22, 66, 65, 207, 84, 134, 116, 13, 112, 120, 42, 115, 40, 181, 150, 225, 144, 88, 201, 251, 50, 193, 238, 27, 18, 16, 254, 185, 234, 171, 146, 199, 159, 220, 152, 157, 145, 162, 83, 228, 98, 195, 115, 153, 253, 143, 136, 172, 192, 234, 28, 152, 151, 49, 203, 88, 188, 101, 124, 139, 217, 145, 120, 187, 131, 204, 46, 45, 101, 8, 180, 218, 113, 19, 139, 159, 156, 193, 54, 187, 60, 107, 24, 220, 234, 176, 178, 153, 193, 156, 121, 92, 217, 67, 221, 157, 215, 59, 0, 15, 138, 234, 192, 88, 141, 146, 15, 100, 2, 222, 192, 27, 246, 126, 58, 129, 114, 21, 170, 166, 41, 6, 198, 233, 102, 117, 191, 183, 140, 226, 152, 170, 77, 185, 121, 55, 84, 170, 5, 43, 151, 78, 52, 55, 48, 93, 41, 150, 220, 122, 204, 227, 200, 98, 150, 126, 207, 112, 130, 178, 254, 206, 62, 38, 178, 44, 247, 251, 17, 206, 107, 60, 9, 196, 158, 154, 29, 119, 15, 198, 231, 76, 9, 106, 244, 128, 22, 21, 255, 129, 85, 248, 225, 97, 189, 54, 144, 2, 192, 42, 157, 78, 81, 17, 230, 110, 52, 38, 122, 179, 209, 34, 75, 251, 181, 228, 76, 220, 156, 160, 28, 240, 23, 115, 154, 15, 135, 243, 204, 207, 125, 146, 98, 174, 176, 107, 120, 60, 170, 110, 251, 50, 122, 135, 93, 192, 188, 160, 16, 107, 186, 206, 3, 117, 157, 192, 87, 44, 238, 48, 57, 138, 32, 38, 246, 146, 80, 170, 84, 161, 58, 15, 180, 146, 126, 24, 128, 115, 14, 38, 12, 133, 75, 36, 56, 233, 29, 74, 43, 96, 104, 17, 123, 253, 152, 27, 48, 243, 240, 59, 57, 242, 245, 93, 147, 125, 122, 119, 139, 59, 3, 0, 106, 106, 38, 86, 127, 129, 1, 55, 176, 130, 144, 0, 82, 144, 178, 4, 37, 110, 95, 97, 214, 208, 29, 245, 67, 254, 213, 63, 232, 147, 89, 53, 239, 116, 248, 34, 253, 192, 30, 155, 13, 230, 122, 229, 236, 66, 213, 147, 130, 151, 194, 26, 48, 17, 197, 172, 70, 54, 137, 230, 229, 213, 170, 153, 156, 237, 137, 183, 97, 213, 36, 14, 248, 70, 225, 172, 79, 200, 16, 184, 98, 239, 153, 9, 64, 251, 253, 52, 167, 41, 1, 180, 124, 183, 99, 108, 97, 151, 52, 188, 55, 9, 245, 221, 15, 134, 231, 1, 134, 92, 232, 152, 195, 99, 42, 12, 188, 108, 43, 44, 238, 7, 220, 172, 31, 16, 97, 155, 249, 179, 17, 126, 167, 77, 193, 0, 159, 217, 120, 235, 1, 105, 23, 155, 196, 41, 18, 28, 249, 134, 177, 237, 48, 32, 70, 162, 110, 157, 39, 186, 143, 126, 156, 245, 205, 81, 41, 114, 75, 150, 88, 17, 237, 170, 87, 145, 135, 96, 170, 61, 206, 175, 19, 221, 201, 67, 2, 31, 199, 96, 223, 195, 20, 47, 181, 30, 231, 218, 183, 68, 36, 176, 197, 26, 154, 57, 50, 153, 135, 204, 247, 188, 229, 146, 196, 43, 190, 239, 193, 236, 212, 232, 216, 25, 2, 68, 18, 227, 59, 104, 68, 156, 8, 170, 75, 102, 180, 248, 29, 17, 118, 46, 247, 76, 76, 208, 15, 207, 171, 233, 90, 145, 146, 177, 97, 149, 110, 15, 34, 159, 246, 56, 165, 250, 174, 158, 169, 6, 20, 134, 74, 174, 29, 16, 1, 60, 8, 8, 90, 117, 92, 47, 112, 210, 150, 254, 6, 37, 139, 151, 11, 245, 188, 57, 198, 26, 126, 159, 56, 70, 137, 243, 66, 125, 33, 150, 147, 170, 138, 225, 202, 30, 21, 225, 23, 244, 186, 178, 213, 124, 79, 34, 38, 135, 176, 143, 108, 204, 28, 123, 210, 42, 244, 245, 203, 13, 101, 61, 198, 115, 128, 195, 130, 188, 160, 212, 199, 241, 49, 20, 92, 126, 90, 116, 6, 171, 71, 7, 228, 115, 183, 66, 6, 61, 47, 105, 145, 160, 152, 124, 109, 177, 33, 184, 30, 57, 171, 8, 93, 187, 209, 247, 81, 164, 72, 80, 8, 198, 128, 76, 26, 151, 82, 231, 198, 1, 72, 1, 147, 39, 185, 219, 206, 88, 96, 115, 75, 136, 117, 55, 1, 199, 234, 54, 14, 248, 79, 248, 181, 193, 74, 124, 18, 29, 40, 88, 33, 52, 138, 183, 226, 78, 207, 198, 109, 197, 43, 186, 166, 253, 103, 149, 180, 201, 118, 27, 229, 214, 217, 242, 139, 52, 198, 140, 132, 30, 210, 246, 178, 154, 144, 90, 32, 94, 56, 100, 38, 139, 35, 107, 98, 208, 102, 186, 95, 14, 100, 144, 233, 60, 162, 35, 141, 196, 18, 86, 81, 24, 57, 79, 130, 35, 185, 175, 120, 25, 239, 224, 81, 14, 55, 115, 121, 48, 23, 251, 59, 229, 45, 241, 139, 75, 141, 241, 182, 3, 249, 60, 175, 27, 180, 214, 170, 224, 171, 30, 6, 122, 98, 195, 44, 226, 136, 55, 47, 36, 82, 183, 206, 171, 201, 158, 61, 26, 12, 34, 243, 25, 150, 135, 9, 161, 248, 213, 67, 184, 195, 137, 223, 225, 43, 116, 167, 254, 176, 189, 165, 234, 177, 107, 170, 230, 213, 161, 8, 255, 183, 31, 131, 203, 6, 226, 120, 88, 86, 123, 157, 219, 208, 113, 122, 154, 194, 140, 211, 53, 207, 163, 57, 95, 141, 205, 77, 172, 20, 244, 181, 40, 77, 190, 1, 146, 169, 137, 240, 225, 122, 194, 119, 141, 163, 185, 67, 147, 5, 152, 184, 126, 43, 184, 101, 110, 169, 242, 3, 144, 112, 83, 108, 173, 254, 147, 84, 3, 234, 178, 215, 4, 164, 180, 188, 90, 221, 8, 83, 214, 57, 57, 48, 188, 170, 57, 81, 174, 167, 192, 209, 102, 145, 76, 172, 185, 119, 162, 102, 112, 76, 29, 130, 40, 103, 14, 255, 15, 53, 150, 80, 248, 10, 22, 146, 57, 45, 114, 76, 148, 46, 242, 142, 210, 255, 82, 220, 72, 212, 117, 152, 248, 153, 253, 141, 219, 236, 217, 162, 208, 27, 140, 100, 123, 138, 231, 156, 149, 189, 115, 110, 234, 199, 239, 249, 22, 17, 148, 105, 105, 156, 27, 106, 84, 198, 12, 51, 150, 196, 240, 142, 140, 208, 71, 150, 219, 42, 150, 79, 220, 230, 217, 112, 133, 239, 95, 207, 131, 226, 217, 50, 75, 91, 37, 227, 69, 116, 212, 253, 100, 46, 238, 27, 135, 87, 45, 28, 12, 74, 16, 179, 117, 86, 86, 34, 14, 181, 222, 136, 3, 28, 9, 70, 128, 114, 23, 252, 176, 165, 81, 116, 60, 143, 33, 133, 145, 61, 250, 20, 90, 2, 99, 131, 85, 16, 67, 248, 230, 97, 167, 205, 126, 40, 155, 15, 99, 224, 77, 246, 10, 123, 175, 130, 22, 178, 24, 232, 227, 77, 145, 88, 84, 216, 121, 2, 74, 16, 112, 177, 195, 35, 113, 135, 36, 224, 103, 179, 10, 59, 88, 65, 72, 30, 184, 160, 161, 93, 44, 33, 38, 189, 134, 54, 138, 193, 113, 218, 203, 240, 114, 89, 126, 131, 16, 230, 70, 92, 142, 101, 240, 91, 152, 131, 52, 171, 100, 239, 37, 59, 183, 37, 232, 208, 11, 245, 228, 151, 144, 80, 55, 177, 255, 107, 0, 138, 98, 178, 226, 147, 235, 86, 115, 42, 111, 143, 112, 242, 179, 234, 97, 79, 228, 175, 117, 28, 164, 83, 39, 163, 64, 66, 144, 32, 223, 123, 252, 134, 223, 79, 51, 193, 144, 3, 214, 79, 123, 153, 210, 27, 131, 144, 164, 87, 62, 52, 12, 100, 231, 101, 15, 19, 12, 250, 56, 100, 135, 194, 70, 106, 183, 86, 120, 183, 237, 84, 113, 52, 143, 236, 230, 59, 118, 66, 214, 99, 177, 41, 120, 98, 187, 88, 50, 247, 228, 199, 232, 36, 217, 4, 105, 184, 174, 43, 111, 24, 154, 89, 207, 177, 85, 231, 242, 111, 126, 89, 188, 9, 4, 79, 209, 157, 181, 84, 20, 174, 37, 254, 56, 52, 229, 90, 51, 170, 7, 177, 152, 167, 14, 29, 221, 31, 57, 252, 125, 86, 208, 210, 78, 129, 80, 50, 119, 217, 10, 188, 139, 98, 102, 49, 181, 84, 218, 59, 162, 116, 25, 62, 43, 129, 27, 168, 229, 83, 20, 149, 155, 53, 190, 216, 42, 14, 40, 43, 189, 185, 27, 198, 129, 215, 63, 2, 25, 208, 2, 242, 218, 179, 209, 227, 66, 178, 209, 228, 144, 164, 122, 214, 248, 40, 215, 199, 214, 163, 223, 231, 56, 184, 197, 168, 218, 176, 240, 82, 143, 249, 128, 152, 142, 179, 114, 209, 97, 29, 201, 62, 88, 126, 143, 116, 206, 180, 214, 57, 61, 236, 154, 163, 68, 108, 44, 213, 149, 216, 117, 195, 98, 228, 99, 224, 73, 184, 45, 111, 233, 207, 173, 102, 147, 54, 222, 17, 121, 159, 166, 215, 159, 240, 128, 93, 255, 230, 59, 104, 10, 184, 57, 30, 17, 232, 129, 30, 11, 240, 109, 135, 119, 208, 212, 83, 135, 100, 13, 255, 24, 147, 26, 236, 12, 226, 89, 223, 239, 74, 86, 201, 74, 38, 236, 43, 37, 251, 2, 180, 113, 12, 22, 6, 4, 239, 213, 36, 241, 114, 228, 1, 78, 110, 48, 20, 42, 82, 122, 228, 128, 51, 180, 28, 135, 39, 183, 185, 34, 107, 116, 76, 92, 37, 11, 175, 41, 198, 189, 57, 15, 54, 92, 20, 72, 96, 31, 136, 221, 8, 52, 174, 108, 10, 200, 87, 148, 118, 225, 205, 54, 245, 195, 127, 79, 221, 131, 200, 58, 246, 148, 225, 111, 2, 221, 122, 7, 57, 226, 219, 17, 235, 203, 60, 43, 85, 8, 213, 77, 126, 154, 241, 5, 188, 109, 217, 4, 46, 62, 74, 163, 173, 3, 93, 14, 43, 216, 39, 250, 170, 39, 252, 3, 146, 142, 190, 70, 142, 255, 252, 53, 41, 140, 12, 63, 94, 246, 200, 97, 185, 183, 211, 245, 49, 85, 83, 0, 120, 238, 174, 131, 33, 11, 114, 75, 4, 97, 126, 133, 146, 123, 235, 34, 133, 201, 197, 184, 98, 0, 3, 237, 221, 125, 96, 242, 200, 53, 93, 199, 41, 69, 64, 130, 88, 123, 57, 26, 181, 72, 192, 155, 254, 247, 52, 91, 58, 214, 107, 130, 51, 58, 250, 151, 155, 170, 31, 248, 217, 43, 151, 195, 226, 137, 32, 133, 204, 53, 19, 192, 45, 70, 189, 124, 142, 204, 19, 16, 170, 90, 112, 141, 236, 133, 237, 135, 104, 143, 101, 90, 247, 60, 233, 91, 63, 116, 134, 143, 66, 15, 229, 97, 165, 2, 52, 158, 68, 87, 247, 8, 95, 202, 7, 78, 127, 75, 20, 166, 136, 116, 42, 4, 192, 128, 254, 247, 90, 8, 88, 121, 130, 63, 151, 60, 254, 37, 28, 231, 138, 185, 176, 193, 58, 79, 52, 175, 25, 198, 162, 247, 120, 208, 190, 172, 191, 14, 211, 208, 127, 166, 172, 18, 15, 150, 148, 21, 171, 165, 52, 78, 115, 129, 113, 228, 143, 155, 42, 4, 11, 213, 13, 246, 117, 172, 182, 247, 241, 153, 80, 3, 245, 228, 44, 124, 201, 181, 246, 207, 216, 119, 108, 244, 92, 51, 235, 33, 92, 219, 229, 193, 158, 63, 85, 135, 145, 134, 71, 111, 188, 182, 111, 63, 211, 0, 76, 203, 135, 110, 199, 122, 147, 34, 161, 86, 113, 211, 66, 2, 65, 110, 170, 64, 215, 171, 236, 50, 236, 191, 76, 217, 23, 59, 126, 148, 190, 149, 77, 161, 209, 231, 215, 42, 21, 169, 74, 254, 21, 125, 150, 127, 165, 67, 223, 181, 22, 234, 98, 122, 104, 53, 134, 166, 204, 9, 14, 142, 62, 232, 212, 253, 202, 12, 184, 19, 28, 89, 67, 47, 142, 157, 54, 74, 143, 88, 34, 43, 166, 146, 245, 143, 253, 120, 160, 52, 180, 76, 27, 70, 154, 82, 63, 142, 3, 20, 165, 207, 19, 193, 81, 42, 236, 38, 118, 93, 252, 150, 243, 26, 20, 131, 1, 46, 109, 62, 7, 130, 160, 196, 181, 53, 197, 251, 170, 123, 41, 117, 81, 20, 233, 249, 33, 42, 27, 39, 253, 120, 78, 240, 72, 20, 143, 43, 120, 56, 151, 111, 81, 4, 24, 109, 57, 95, 87, 121, 173, 220, 9, 114, 239, 51, 221, 180, 186, 251, 235, 234, 227, 30, 136, 191, 22, 199, 112, 64, 93, 146, 139, 68, 242, 33, 93, 44, 170, 247, 244, 47, 179, 214, 21, 62, 10, 78, 69, 94, 92, 242, 171, 104, 250, 232, 13, 84, 132, 242, 193, 57, 59, 238, 170, 157, 250, 38, 20, 12, 229, 120, 146, 140, 13, 85, 186, 174, 205, 114, 238, 123, 135, 6, 174, 3, 166, 145, 23, 200, 81, 232, 217, 31, 102, 114, 205, 19, 68, 249, 50, 152, 94, 97, 140, 200, 97, 134, 14, 110, 116, 17, 23, 79, 127, 219, 165, 148, 50, 105, 227, 246, 220, 158, 244, 193, 83, 157, 6, 88, 185, 68, 109, 70, 38, 30, 125, 39, 158, 85, 113, 19, 130, 92, 182, 20, 103, 85, 133, 19, 148, 220, 162, 99, 225, 88, 218, 174, 2, 162, 67, 234, 93, 84, 212, 100, 172, 252, 255, 116, 86, 245, 35, 172, 28, 172, 253, 210, 216, 38, 24, 53, 127, 115, 174, 15, 177, 84, 96, 81, 21, 65, 217, 90, 12, 163, 66, 17, 0, 106, 161, 141, 100, 222, 173, 20, 72, 11, 180, 23, 79, 231, 176, 222, 22, 110, 126, 136, 40, 102, 222, 44, 205, 51, 184, 91, 221, 150, 133, 55, 39, 198, 57, 244, 241, 226, 117, 213, 151, 158, 201, 123, 19, 145, 141, 48, 122, 108, 222, 232, 253, 85, 37, 67, 25, 198, 202, 47, 45, 59, 182, 82, 253, 101, 215, 246, 94, 171, 98, 163, 203, 163, 89, 225, 184, 232, 34, 107, 110, 253, 98, 0, 181, 215, 87, 3, 33, 86, 86, 89, 203, 66, 14, 120, 219, 211, 150, 176, 106, 113, 126, 146, 191, 27, 214, 132, 229, 181, 87, 53, 103, 252, 152, 45, 169, 97, 227, 105, 252, 90, 245, 68, 44, 226, 25, 24, 191, 113, 206, 230, 59, 61, 195, 55, 109, 144, 148, 53, 34, 165, 8, 228, 126, 174, 167, 178, 187, 178, 65, 235, 19, 178, 229, 99, 105, 35, 96, 36, 68, 150, 164, 159, 196, 86, 254, 208, 127, 128, 212, 80, 224, 155, 30, 152, 249, 119, 234, 10, 129, 220, 117, 83, 203, 48, 130, 233, 130, 34, 92, 119, 2, 133, 138, 225, 210, 34, 158, 111, 173, 52, 248, 161, 247, 216, 69, 20, 255, 102, 199, 152, 236, 31, 121, 171, 53, 65, 66, 169, 205, 140, 94, 108, 210, 109, 142, 169, 118, 217, 9, 137, 40, 136, 143, 88, 5, 197, 31, 22, 70, 4, 168, 44, 151, 182, 95, 198, 255, 100, 147, 11, 133, 96, 30, 149, 194, 234, 36, 84, 244, 18, 212, 57, 222, 14, 164, 117, 244, 236, 172, 12, 106, 201, 230, 158, 64, 126, 190, 194, 209, 16, 194, 159, 87, 232, 151, 220, 162, 46, 113, 223, 187, 11, 131, 0, 153, 20, 165, 128, 227, 65, 113, 128, 174, 151, 44, 34, 202, 137, 28, 150, 10, 7, 24, 195, 23, 58, 143, 34, 174, 142, 127, 88, 241, 42, 85, 204, 67, 183, 74, 18, 75, 238, 32, 123, 105, 37, 218, 68, 252, 221, 184, 215, 104, 189, 58, 71, 119, 128, 151, 10, 127, 22, 252, 67, 255, 31, 236, 13, 143, 167, 39, 238, 91, 38, 28, 1, 171, 243, 213, 94, 16, 251, 47, 95, 203, 159, 84, 132, 201, 39, 121, 129, 107, 126, 235, 126, 22, 175, 63, 220, 214, 67, 19, 64, 245, 184, 205, 123, 132, 30, 172, 31, 23, 186, 44, 61, 208, 61, 216, 91, 126, 217, 105, 171, 72, 103, 164, 212, 90, 44, 84, 87, 181, 64, 91, 4, 88, 206, 211, 252, 70, 95, 242, 160, 78, 103, 116, 78, 193, 250, 111, 91, 36, 85, 48, 149, 14, 142, 183, 105, 88, 132, 102, 14, 120, 119, 44, 51, 46, 52, 200, 220, 41, 32, 16, 219, 203, 97, 42, 201, 140, 202, 137, 227, 160, 255, 113, 188, 200, 69, 173, 215, 68, 35, 137, 254, 206, 244, 147, 3, 89, 69, 89, 14, 204, 60, 150, 3, 54, 153, 44, 215, 141, 78, 46, 26, 60, 58, 236, 86, 185, 143, 59, 51, 127, 229, 179, 59, 9, 33, 72, 69, 86, 113, 124, 109, 75, 61, 156, 51, 69, 145, 137, 51, 85, 125, 166, 188, 245, 212, 236, 181, 98, 163, 16, 72, 52, 49, 71, 168, 170, 116, 54, 142, 62, 208, 87, 122, 29, 156, 103, 216, 224, 220, 52, 190, 79, 186, 83, 43, 205, 250, 1, 142, 2, 7, 194, 109, 170, 162, 98, 212, 151, 188, 110, 94, 55, 155, 145, 176, 120, 93, 70, 55, 236, 139, 43, 181, 100, 175, 159, 6, 251, 201, 84, 220, 191, 207, 64, 198, 120, 171, 95, 153, 115, 150, 147, 184, 189, 107, 194, 153, 5, 120, 86, 134, 20, 150, 133, 196, 149, 183, 156, 89, 224, 240, 216, 197, 45, 33, 45, 112, 7, 41, 193, 238, 36, 207, 239, 57, 58, 198, 21, 249, 129, 176, 8, 159, 12, 147, 217, 33, 23, 51, 51, 154, 215, 146, 248, 230, 112, 36, 153, 69, 112, 156, 133, 147, 213, 36, 135, 242, 45, 124, 159, 198, 54, 160, 31, 178, 67, 69, 146, 254, 149, 219, 76, 229, 207, 152, 17, 129, 11, 119, 6, 108, 74, 119, 96, 171, 41, 238, 16, 108, 104, 30, 24, 1, 112, 133, 71, 86, 144, 93, 241, 8, 82, 144, 93, 98, 81, 45, 178, 251, 31, 12, 27, 165, 35, 199, 182, 13, 171, 42, 28, 142, 83, 31, 39, 229, 186, 164, 59, 139, 56, 79, 185, 187, 254, 123, 47, 144, 120, 133, 115, 109, 237, 150, 32, 139, 87, 114, 252, 188, 222, 105, 202, 183, 185, 60, 108, 138, 161, 247, 203, 83, 133, 210, 162, 176, 224, 136, 45, 150, 247, 216, 19, 122, 146, 148, 221, 93, 97, 150, 5, 152, 30, 217, 249, 93, 51, 4, 163, 199, 19, 134, 177, 64, 71, 87, 71, 224, 104, 19, 98, 106, 213, 25, 167, 159, 91, 27, 125, 248, 157, 171, 91, 36, 74, 53, 156, 6, 206, 76, 52, 78, 69, 53, 221, 98, 140, 222, 238, 241, 88, 1, 237, 137, 52, 106, 191, 167, 144, 66, 24, 63, 124, 238, 249, 152, 1, 41, 243, 111, 157, 142, 235, 17, 207, 15, 103, 168, 1, 164, 213, 114, 90, 239, 181, 51, 249, 36, 127, 214, 58, 229, 157, 198, 147, 189, 0, 15, 138, 69, 146, 71, 123, 226, 16, 116, 140, 140, 232, 70, 171, 181, 234, 1, 153, 18, 74, 107, 69, 215, 197, 50, 90, 192, 21, 8, 243, 47, 139, 13, 76, 158, 31, 183, 109, 28, 70, 59, 252, 92, 186, 169, 8, 191, 126, 79, 133, 67, 105, 116, 196, 118, 137, 57, 225, 219, 102, 179, 4, 218, 42, 127, 44, 166, 26, 127, 156, 39, 17, 232, 254, 110, 32, 201, 231, 109, 231, 237, 131, 30, 190, 63, 237, 123, 138, 18, 14, 105, 74, 178, 125, 126, 83, 154, 221, 68, 158, 185, 137, 237, 247, 230, 59, 65, 61, 154, 160, 32, 188, 173, 50, 121, 253, 187, 57, 33, 52, 152, 51, 150, 9, 141, 9, 86, 253, 161, 121, 213, 242, 97, 4, 226, 92, 130, 249, 83, 109, 37, 56, 234, 235, 251, 12, 144, 9, 53, 140, 77, 29, 78, 159, 123, 184, 160, 25, 238, 167, 113, 21, 56, 164, 161, 191, 96, 197, 85, 118, 40, 74, 19, 195, 30, 200, 134, 156, 103, 31, 170, 100, 49, 180, 208, 134, 57, 21, 114, 245, 93, 217, 84, 31, 199, 17, 114, 115, 230, 105, 214, 219, 66, 53, 255, 8, 16, 70, 153, 23, 199, 51, 112, 89, 186, 121, 171, 126, 166, 21, 127, 154, 244, 171, 130, 211, 50, 140, 206, 204, 211, 167, 128, 168, 56, 77, 57, 98, 241, 174, 6, 225, 167, 87, 165, 187, 47, 153, 77, 73, 229, 45, 0, 14, 157, 202, 32, 153, 205, 142, 17, 125, 118, 114, 2, 47, 157, 198, 54, 247, 6, 202, 203, 68, 255, 103, 34, 17, 148, 234, 84, 34, 67, 194, 72, 220, 172, 12, 29, 81, 11, 51, 11, 40, 46, 230, 208, 214, 65, 4, 244, 252, 122, 136, 133, 255, 175, 87, 204, 10, 136, 160, 41, 67, 167, 85, 213, 37, 210, 14, 116, 179, 190, 45, 46, 52, 157, 3, 98, 222, 138, 101, 73, 111, 213, 9, 172, 56, 233, 82, 53, 56, 223, 40, 204, 239, 51, 1, 219, 127, 246, 123, 160, 56, 42, 69, 140, 36, 68, 36, 86, 60, 52, 172, 110, 191, 244, 62, 65, 191, 121, 216, 168, 33, 61, 230, 110, 107, 242, 239, 250, 202, 19, 77, 203, 175, 214, 165, 22, 147, 80, 67, 54, 27, 244, 155, 243, 152, 213, 241, 215, 158, 187, 199, 94, 238, 56, 207, 225, 22, 162, 86, 93, 247, 113, 174, 244, 102, 142, 252, 145, 35, 210, 118, 41, 171, 28, 204, 246, 115, 118, 110, 89, 76, 184, 31, 49, 12, 135, 228, 11, 132, 7, 157, 196, 19, 202, 171, 140, 34, 20, 233, 2, 110, 114, 166, 171, 249, 33, 88, 80, 181, 60, 50, 25, 60, 189, 189, 8, 156, 214, 35, 156, 135, 237, 104, 253, 213, 207, 92, 125, 63, 227, 48, 5, 171, 7, 177, 254, 127, 89, 159, 104, 132, 63, 147, 8, 195, 145, 3, 51, 195, 24, 213, 11, 196, 29, 238, 200, 55, 236, 39, 250, 218, 168, 148, 26, 179, 83, 231, 88, 82, 177, 37, 111, 129, 187, 127, 32, 78, 170, 71, 42, 168, 188, 37, 40, 58, 48, 52, 121, 35, 156, 163, 180, 54, 119, 102, 7, 0, 164, 210, 190, 204, 24, 67, 47, 20, 33, 39, 223, 238, 207, 37, 30, 156, 15, 130, 40, 63, 125, 254, 178, 198, 2, 164, 93, 207, 133, 68, 2, 199, 73, 25, 27, 216, 68, 36, 11, 125, 232, 131, 133, 32, 21, 238, 177, 104, 239, 145, 12, 217, 179, 16, 103, 16, 60, 59, 208, 9, 84, 238, 61, 86, 11, 213, 35, 185, 239, 67, 166, 90, 163, 148, 64, 145, 143, 235, 105, 144, 253, 5, 94, 19, 183, 230, 51, 103, 7, 255, 127, 71, 210, 156, 198, 36, 90, 28, 84, 36, 72, 133, 67, 127, 44, 232, 218, 107, 153, 65, 74, 83, 160, 228, 239, 57, 218, 7, 182, 45, 27, 194, 82, 94, 90, 137, 184, 66, 204, 252, 60, 164, 221, 60, 254, 89, 243, 210, 131, 118, 94, 250, 56, 75, 120, 29, 15, 208, 139, 212, 202, 22, 239, 109, 246, 237, 1, 22, 179, 218, 71, 43, 145, 136, 159, 115, 162, 250, 12, 250, 16, 116, 105, 170, 233, 53, 71, 66, 186, 107, 108, 115, 158, 136, 4, 82, 158, 3, 6, 233, 240, 101, 39, 98, 38, 133, 219, 173, 201, 171, 132, 157, 12, 213, 9, 199, 253, 184, 161, 203, 134, 112, 41, 122, 157, 224, 54, 152, 235, 86, 26, 45, 238, 93, 90, 242, 25, 243, 159, 239, 22, 251, 19, 92, 111, 67, 225, 4, 44, 85, 111, 164, 104, 75, 218, 19, 226, 144, 131, 136, 190, 92, 210, 49, 103, 179, 177, 74, 153, 227, 64, 165, 74, 194, 177, 83, 139, 217, 232, 70, 148, 121, 132, 178, 172, 84, 25, 54, 41, 231, 10, 4, 152, 120, 166, 96, 76, 25, 49, 223, 172, 223, 66, 109, 130, 218, 200, 124, 233, 149, 246, 24, 105, 244, 177, 4, 128, 154, 54, 49, 64, 31, 72, 121, 186, 170, 205, 18, 105, 191, 168, 159, 93, 57, 99, 93, 54, 124, 148, 117, 248, 192, 66, 110, 13, 36, 28, 155, 251, 197, 153, 87, 223, 17, 166, 7, 121, 208, 108, 126, 39, 118, 124, 233, 125, 63, 162, 180, 227, 28, 25, 92, 97, 148, 147, 27, 222, 255, 158, 142, 255, 204, 155, 19, 243, 220, 47, 37, 77, 217, 187, 195, 7, 187, 110, 191, 144, 111, 220, 173, 114, 17, 212, 73, 222, 185, 244, 155, 158, 146, 130, 163, 158, 109, 152, 245, 118, 81, 232, 39, 21, 219, 72, 133, 51, 51, 71, 33, 46, 124, 24, 146, 92, 213, 222, 141, 27, 151, 222, 148, 152, 45, 169, 79, 6, 39, 117, 122, 213, 134, 130, 141, 95, 169, 108, 144, 185, 28, 124, 170, 77, 90, 196, 46, 182, 70, 242, 167, 255, 81, 143, 129, 132, 131, 223, 61, 132, 236, 66, 61, 44, 250, 160, 241, 21, 113, 177, 201, 217, 61, 51, 61, 239, 81, 228, 112, 105, 80, 139, 187, 147, 235, 171, 37, 186, 80, 5, 142, 12, 195, 107, 123, 173, 49, 110, 110, 105, 105, 234, 51, 135, 81, 149, 148, 172, 208, 214, 52, 117, 47, 167, 62, 169, 59, 180, 109, 245, 63, 27, 120, 252, 177, 25, 133, 24, 52, 94, 64, 108, 196, 123, 246, 164, 112, 245, 112, 114, 174, 216, 37, 150, 141, 211, 66, 96, 71, 31, 243, 248, 206, 234, 120, 156, 197, 75, 168, 85, 6, 191, 138, 93, 54, 219, 249, 239, 14, 20, 43, 127, 161, 189, 3, 168, 52, 251, 200, 20, 173, 236, 126, 200, 217, 36, 131, 255, 15, 213, 239, 232, 235, 194, 205, 115, 118, 111, 151, 83, 234, 169, 118, 182, 211, 255, 180, 210, 71, 83, 85, 97, 100, 38, 70, 217, 192, 96, 59, 131, 185, 192, 125, 240, 205, 149, 159, 63, 141, 190, 220, 49, 137, 6, 46, 180, 226, 18, 85, 70, 85, 145, 25, 156, 80, 155, 82, 59, 0, 19, 217, 186, 41, 13, 141, 73, 71, 214, 104, 59, 194, 176, 61, 33, 247, 201, 99, 166, 49, 84, 239, 16, 16, 97, 231, 146, 37, 218, 202, 114, 122, 172, 91, 234, 38, 61, 100, 38, 191, 135, 97, 142, 208, 237, 150, 70, 185, 241, 164, 20, 100, 173, 207, 182, 105, 3, 141, 187, 182, 48, 115, 236, 196, 40, 144, 73, 120, 91, 46, 195, 169, 170, 85, 163, 86, 171, 37, 149, 183, 235, 224, 168, 57, 198, 145, 220, 65, 24, 209, 135, 246, 187, 77, 58, 32, 98, 113, 164, 164, 129, 155, 225, 112, 203, 160, 106, 101, 107, 182, 198, 114, 215, 9, 166, 186, 33, 181, 124, 78, 76, 25, 198, 64, 162, 22, 61, 18, 31, 46, 41, 85, 74, 122, 101, 131, 57, 174, 155, 252, 3, 132, 216, 50, 80, 115, 20, 148, 150, 46, 202, 204, 198, 229, 156, 133, 69, 24, 134, 33, 210, 3, 79, 197, 96, 216, 178, 176, 176, 79, 30, 96, 18, 213, 131, 149, 75, 255, 142, 178, 219, 165, 61, 184, 65, 99, 159, 89, 39, 74, 48, 91, 7, 28, 117, 200, 116, 174, 101, 32, 87, 190, 230, 50, 56, 205, 144, 155, 197, 55, 102, 150, 217, 78, 6, 55, 166, 244, 161, 2, 90, 202, 237, 46, 233, 53, 74, 224, 30, 72, 14, 38, 155, 48, 81, 144, 141, 199, 79, 129, 113, 2, 41, 219, 179, 111, 47, 247, 183, 132, 221, 150, 179, 249, 227, 29, 98, 96, 53, 127, 90, 183, 188, 130, 89, 20, 59, 24, 137, 186, 155, 69, 71, 49, 33, 32, 42, 26, 95, 237, 34, 38, 165, 179, 102, 78, 27, 80, 10, 204, 196, 252, 249, 36, 41, 83, 126, 209, 233, 8, 12, 243, 47, 146, 172, 139, 118, 67, 175, 179, 26, 225, 238, 252, 135, 168, 71, 141, 135, 41, 216, 121, 34, 95, 190, 126, 203, 193, 102, 39, 189, 255, 79, 228, 224, 47, 181, 37, 13, 67, 43, 144, 202, 215, 170, 214, 221, 83, 243, 255, 245, 217, 235, 235, 121, 156, 21, 3, 126, 43, 218, 19, 138, 243, 74, 60, 76, 13, 124, 119, 77, 30, 198, 32, 215, 6, 129, 157, 77, 41, 57, 121, 107, 33, 190, 138, 24, 84, 46, 218, 152, 158, 216, 247, 52, 75, 148, 243, 73, 248, 131, 150, 21, 202, 246, 136, 151, 128, 89, 187, 225, 33, 191, 88, 171, 71, 52, 174, 247, 206, 124, 87, 81, 236, 239, 8, 40, 58, 235, 38, 60, 82, 127, 5, 129, 78, 193, 180, 73, 195, 235, 71, 206, 225, 55, 0, 169, 166, 218, 171, 227, 223, 206, 244, 7, 175, 23, 47, 112, 74, 57, 187, 147, 73, 157, 208, 81, 52, 195, 202, 58, 30, 185, 255, 200, 142, 73, 35, 8, 81, 56, 83, 37, 37, 136, 159, 149, 191, 223, 43, 61, 83, 163, 188, 54, 73, 248, 53, 106, 100, 128, 73, 37, 58, 89, 143, 205, 2, 232, 59, 101, 133, 207, 239, 212, 70, 241, 228, 143, 119, 71, 223, 134, 183, 189, 99, 28, 69, 84, 17, 232, 51, 163, 107, 134, 242, 168, 214, 63, 149, 221, 72, 76, 131, 4, 40, 160, 160, 142, 88, 39, 202, 188, 25, 59, 6, 69, 68, 235, 36, 164, 101, 41, 240, 8, 52, 172, 184, 51, 89, 244, 162, 36, 254, 182, 203, 122, 123, 223, 105, 142, 172, 27, 106, 108, 112, 54, 67, 200, 198, 30, 190, 107, 229, 107, 116, 133, 7, 217, 136, 174, 81, 7, 36, 210, 34, 98, 192, 228, 57, 237, 12, 152, 108, 10, 63, 98, 93, 60, 93, 89, 31, 161, 253, 126, 96, 161, 151, 99, 216, 153, 238, 55, 92, 242, 64, 223, 48, 214, 125, 243, 189, 216, 70, 62, 67, 8, 56, 2, 81, 32, 81, 166, 147, 22, 232, 229, 22, 215, 51, 255, 126, 112, 147, 81, 236, 15, 123, 128, 74, 237, 9, 23, 100, 241, 249, 168, 189, 210, 79, 97, 146, 162, 21, 14, 62, 166, 105, 210, 73, 48, 237, 93, 27, 194, 180, 39, 210, 79, 36, 73, 5, 112, 20, 52, 116, 98, 28, 12, 134, 38, 122, 64, 255, 72, 195, 236, 121, 63, 100, 171, 200, 163, 200, 212, 127, 59, 223, 206, 164, 152, 74, 51, 170, 155, 239, 30, 211, 15, 246, 230, 196, 23, 11, 25, 90, 210, 182, 108, 47, 105, 178, 21, 206, 197, 21, 224, 179, 160, 222, 161, 218, 215, 26, 139, 64, 54, 248, 7, 42, 149, 241, 157, 69, 218, 213, 227, 163, 29, 120, 110, 97, 161, 246, 210, 164, 171, 11, 202, 219, 156, 50, 62, 225, 229, 97, 242, 96, 164, 185, 150, 71, 182, 205, 248, 97, 180, 163, 45, 70, 106, 226, 78, 183, 102, 196, 18, 228, 10, 57, 119, 151, 87, 99, 94, 160, 156, 240, 247, 116, 40, 147, 121, 162, 198, 114, 149, 66, 68, 130, 14, 171, 93, 78, 120, 103, 117, 189, 81, 160, 224, 248, 140, 13, 25, 53, 151, 184, 149, 231, 101, 153, 142, 166, 26, 174, 81, 79, 108, 65, 3, 216, 59, 189, 132, 237, 66, 120, 194, 207, 201, 213, 208, 90, 233, 229, 178, 210, 252, 120, 142, 62, 121, 117, 115, 12, 6, 209, 16, 135, 52, 147, 172, 11, 36, 212, 12, 157, 22, 8, 232, 20, 82, 178, 231, 99, 161, 230, 159, 114, 44, 56, 134, 149, 76, 109, 59, 241, 78, 182, 85, 18, 225, 67, 137, 97, 114, 187, 140, 217, 244, 108, 89, 115, 80, 161, 43, 83, 220, 9, 153, 246, 103, 111, 138, 80, 240, 252, 8, 234, 200, 72, 131, 21, 72, 179, 146, 50, 83, 18, 131, 145, 227, 113, 188, 11, 119, 143, 66, 217, 122, 95, 227, 242, 96, 26, 8, 193, 166, 242, 112, 179, 55, 126, 166, 39, 50, 233, 71, 135, 21, 188, 101, 67, 45, 241, 161, 157, 85, 40, 106, 1, 177, 118, 62, 249, 65, 134, 96, 189, 188, 116, 225, 114, 70, 46, 74, 240, 189, 111, 236, 41, 188, 85, 78, 209, 95, 179, 46, 123, 253, 155, 118, 203, 240, 120, 51, 212, 125, 212, 93, 58, 121, 22, 164, 159, 116, 52, 49, 171, 157, 205, 113, 145, 121, 10, 215, 125, 139, 251, 240, 58, 149, 70, 143, 100, 90, 58, 34, 185, 151, 103, 216, 229, 226, 183, 171, 107, 181, 252, 162, 79, 40, 56, 48, 117, 199, 134, 21, 244, 246, 178, 188, 71, 109, 27, 239, 81, 109, 169, 155, 54, 150, 132, 67, 48, 150, 183, 189, 175, 11, 177, 128, 61, 116, 42, 102, 168, 170, 96, 111, 238, 136, 252, 175, 238, 133, 72, 143, 190, 52, 126, 74, 227, 186, 39, 236, 173, 168, 144, 134, 118, 63, 59, 13, 83, 150, 17, 104, 14, 206, 92, 130, 226, 83, 193, 83, 190, 127, 202, 210, 239, 140, 176, 39, 4, 53, 182, 128, 89, 58, 198, 204, 126, 92, 54, 93, 151, 33, 131, 241, 185, 2, 13, 210, 75, 244, 51, 83, 219, 248, 238, 14, 249, 114, 16, 142, 129, 120, 208, 193, 43, 105, 80, 223, 41, 65, 138, 243, 153, 119, 41, 186, 128, 140, 231, 236, 204, 72, 210, 237, 169, 64, 117, 74, 241, 150, 62, 117, 183, 183, 138, 34, 195, 190, 238, 185, 29, 143, 77, 95, 112, 146, 80, 119, 157, 218, 153, 40, 15, 141, 178, 253, 99, 202, 67, 144, 139, 220, 173, 76, 77, 143, 217, 72, 168, 37, 158, 39, 182, 195, 106, 59, 133, 190, 73, 202, 209, 17, 93, 67, 110, 249, 15, 104, 183, 148, 239, 199, 97, 6, 131, 225, 163, 51, 176, 135, 104, 44, 157, 145, 150, 171, 48, 52, 226, 73, 175, 71, 20, 158, 213, 81, 71, 251, 45, 178, 183, 130, 66, 17, 240, 96, 224, 149, 132, 141, 161, 238, 176, 124, 89, 68, 110, 149, 168, 219, 216, 50, 180, 232, 173, 231, 22, 239, 181, 11, 254, 238, 80, 48, 233, 31, 225, 108, 168, 241, 155, 22, 145, 70, 38, 152, 247, 163, 36, 143, 179, 99, 115, 219, 55, 51, 231, 130, 145, 50, 12, 252, 193, 29, 140, 44, 192, 64, 206, 119, 51, 228, 173, 37, 15, 190, 180, 57, 148, 54, 131, 220, 84, 2, 124, 227, 232, 9, 14, 4, 129, 71, 97, 112, 179, 82, 132, 32, 116, 157, 202, 63, 22, 92, 216, 175, 10, 63, 158, 201, 26, 195, 99, 148, 86, 44, 66, 228, 64, 234, 160, 175, 41, 212, 66, 87, 141, 160, 92, 218, 147, 179, 202, 132, 32, 13, 253, 225, 145, 109, 65, 28, 109, 79, 35, 150, 95, 53, 102, 84, 82, 25, 199, 170, 228, 155, 193, 147, 16, 226, 240, 107, 100, 157, 10, 139, 21, 31, 253, 153, 11, 124, 204, 237, 71, 193, 155, 88, 234, 196, 82, 186, 21, 95, 12, 135, 34, 255, 231, 80, 149, 163, 151, 214, 203, 48, 173, 21, 12, 77, 223, 1, 237, 245, 30, 201, 0, 179, 50, 181, 217, 67, 120, 110, 58, 186, 153, 205, 16, 75, 102, 160, 224, 145, 220, 56, 74, 109, 173, 165, 155, 11, 85, 17, 99, 135, 43, 206, 163, 35, 202, 200, 103, 219, 76, 147, 91, 83, 198, 65, 96, 11, 137, 94, 91, 31, 132, 143, 209, 94, 143, 56, 155, 190, 183, 15, 223, 214, 110, 99, 58, 111, 185, 88, 156, 198, 211, 22, 50, 253, 80, 46, 113, 2, 245, 211, 130, 200, 228, 109, 145, 89, 203, 138, 121, 129, 145, 10, 107, 135, 2, 54, 213, 76, 132, 177, 116, 235, 181, 48, 246, 117, 175, 139, 252, 250, 45, 180, 83, 123, 245, 123, 5, 142, 89, 203, 106, 156, 156, 201, 35, 147, 187, 6, 136, 249, 241, 169, 227, 160, 237, 237, 150, 226, 225, 231, 173, 76, 120, 31, 242, 127, 219, 150, 94, 191, 49, 3, 114, 118, 185, 175, 92, 117, 139, 131, 35, 187, 88, 161, 171, 77, 207, 3, 191, 98, 153, 14, 148, 96, 81, 94, 171, 239, 179, 96, 14, 165, 155, 172, 138, 41, 104, 248, 227, 97, 171, 135, 235, 7, 217, 170, 156, 153, 205, 45, 5, 2, 144, 248, 9, 138, 101, 218, 253, 97, 35, 183, 35, 168, 139, 174, 55, 245, 45, 50, 253, 41, 42, 232, 65, 155, 130, 138, 153, 138, 36, 129, 230, 75, 6, 96, 84, 105, 215, 151, 203, 107, 24, 93, 213, 196, 77, 235, 18, 248, 157, 16, 165, 24, 151, 125, 118, 11, 156, 110, 9, 175, 144, 106, 24, 102, 42, 179, 148, 183, 159, 4, 8, 135, 132, 106, 135, 19, 11, 250, 127, 213, 231, 164, 76, 25, 218, 100, 6, 234, 131, 198, 191, 169, 15, 144, 167, 164, 58, 118, 231, 146, 37, 7, 151, 92, 229, 155, 110, 83, 106, 196, 81, 122, 158, 40, 242, 117, 210, 254, 35, 114, 139, 224, 15, 252, 119, 195, 189, 161, 54, 47, 128, 82, 99, 88, 217, 237, 139, 125, 112, 68, 30, 45, 222, 132, 49, 22, 203, 153, 211, 179, 162, 251, 63, 125, 140, 115, 14, 130, 157, 237, 112, 224, 171, 184, 51, 7, 173, 203, 52, 139, 62, 218, 171, 90, 53, 202, 115, 108, 48, 29, 120, 170, 141, 149, 240, 211, 192, 183, 6, 66, 247, 56, 237, 128, 68, 7, 95, 49, 214, 89, 101, 139, 255, 182, 73, 146, 169, 159, 15, 197, 83, 122, 113, 58, 23, 14, 92, 227, 33, 42, 228, 230, 8, 176, 248, 95, 162, 102, 47, 9, 180, 41, 227, 195, 131, 130, 10, 116, 245, 210, 160, 207, 4, 215, 239, 232, 83, 120, 140, 2, 108, 112, 8, 111, 244, 158, 236, 173, 187, 57, 122, 106, 150, 83, 135, 8, 16, 144, 188, 106, 29, 237, 177, 169, 121, 134, 65, 215, 142, 25, 242, 201, 14, 148, 37, 182, 142, 113, 48, 127, 18, 28, 175, 190, 122, 189, 152, 152, 107, 50, 138, 9, 82, 61, 121, 227, 142, 156, 125, 249, 245, 168, 155, 32, 119, 140, 37, 186, 95, 148, 255, 222, 56, 1, 16, 155, 80, 176, 251, 37, 4, 108, 179, 175, 171, 159, 51, 233, 48, 255, 230, 124, 139, 240, 137, 143, 115, 12, 60, 215, 75, 101, 82, 24, 103, 83, 150, 57, 79, 9, 193, 101, 61, 10, 42, 43, 136, 158, 2, 11, 49, 115, 186, 161, 169, 119, 130, 6, 133, 134, 203, 88, 23, 226, 16, 4, 102, 194, 232, 77, 9, 119, 194, 223, 231, 52, 152, 44, 37, 42, 231, 117, 53, 231, 122, 55, 216, 184, 87, 96, 43, 87, 206, 42, 145, 175, 210, 23, 171, 194, 12, 162, 15, 195, 198, 140, 27, 125, 211, 167, 111, 24, 177, 115, 143, 171, 99, 212, 116, 37, 202, 108, 73, 116, 11, 72, 248, 153, 57, 182, 75, 209, 41, 18, 169, 72, 96, 116, 156, 106, 72, 72, 194, 176, 62, 54, 51, 186, 149, 6, 155, 135, 94, 57, 46, 196, 129, 235, 49, 196, 138, 26, 91, 33, 20, 118, 254, 179, 193, 220, 35, 177, 87, 169, 98, 92, 242, 29, 151, 107, 70, 236, 212, 7, 217, 135, 144, 165, 171, 184, 186, 159, 32, 100, 120, 139, 149, 112, 22, 69, 207, 224, 119, 191, 133, 162, 227, 207, 30, 156, 239, 245, 48, 83, 162, 183, 53, 65, 146, 24, 131, 201, 206, 120, 227, 103, 51, 243, 94, 151, 79, 36, 83, 150, 79, 193, 94, 196, 94, 25, 203, 105, 194, 150, 222, 133, 170, 11, 39, 178, 245, 8, 121, 26, 56, 152, 70, 217, 196, 205, 75, 94, 96, 98, 169, 217, 242, 201, 243, 232, 169, 97, 45, 94, 236, 74, 53, 172, 34, 205, 235, 73, 46, 6, 39, 34, 133, 58, 213, 221, 86, 7, 65, 27, 115, 220, 173, 68, 207, 25, 186, 19, 26, 210, 236, 142, 144, 85, 119, 35, 74, 28, 197, 135, 252, 248, 48, 67, 56, 163, 93, 185, 246, 86, 112, 177, 77, 212, 34, 42, 168, 49, 249, 109, 198, 133, 162, 190, 46, 129, 91, 7, 44, 6, 14, 235, 166, 127, 253, 191, 37, 240, 103, 187, 250, 183, 221, 54, 14, 13, 229, 2, 217, 221, 74, 53, 30, 122, 68, 64, 60, 33, 61, 82, 170, 164, 179, 77, 231, 75, 130, 71, 96, 255, 128, 168, 141, 110, 99, 156, 105, 50, 107, 43, 38, 188, 198, 169, 75, 201, 189, 109, 158, 109, 206, 207, 98, 165, 189, 149, 97, 247, 19, 247, 13, 69, 98, 245, 133, 179, 44, 118, 69, 201, 189, 61, 20, 67, 26, 139, 55, 80, 2, 182, 230, 247, 217, 144, 211, 64, 185, 241, 127, 236, 113, 156, 207, 11, 42, 98, 223, 30, 97, 201, 141, 162, 120, 28, 11, 66, 241, 208, 46, 48, 35, 242, 11, 73, 13, 217, 35, 227, 5, 73, 244, 221, 184, 228, 180, 200, 255, 59, 54, 72, 189, 17, 104, 115, 187, 160, 48, 209, 117, 248, 224, 121, 82, 167, 234, 49, 100, 30, 204, 51, 26, 48, 171, 88, 47, 108, 193, 236, 128, 250, 58, 79, 9, 46, 229, 28, 150, 186, 124, 30, 193, 183, 79, 197, 113, 217, 93, 71, 152, 129, 135, 198, 0, 15, 223, 243, 136, 181, 174, 30, 72, 91, 78, 28, 132, 134, 220, 19, 13, 11, 5, 76, 39, 117, 212, 181, 40, 128, 128, 63, 218, 53, 118, 148, 228, 165, 70, 22, 230, 144, 156, 211, 168, 235, 175, 175, 124, 2, 196, 14, 228, 43, 64, 5, 155, 68, 131, 103, 18, 95, 174, 213, 170, 2, 242, 189, 205, 127, 45, 233, 95, 184, 239, 27, 47, 69, 126, 198, 133, 104, 62, 219, 0, 31, 106, 212, 159, 136, 141, 110, 6, 68, 160, 37, 77, 68, 103, 125, 69, 153, 132, 136, 252, 22, 147, 54, 165, 44, 14, 118, 246, 223, 180, 161, 213, 66, 14, 250, 191, 169, 11, 162, 0, 207, 142, 139, 49, 22, 79, 191, 14, 185, 145, 237, 32, 132, 192, 247, 63, 110, 222, 216, 113, 76, 86, 239, 37, 162, 60, 1, 104, 22, 179, 255, 122, 149, 151, 125, 205, 139, 19, 93, 90, 253, 97, 0, 118, 164, 221, 182, 111, 108, 108, 243, 251, 83, 16, 227, 188, 132, 206, 208, 189, 112, 7, 21, 183, 247, 135, 69, 39, 115, 249, 17, 203, 162, 216, 242, 129, 252, 128, 141, 26, 240, 151, 208, 197, 88, 68, 160, 154, 241, 70, 40, 97, 79, 227, 40, 71, 239, 138, 37, 224, 161, 151, 59, 32, 66, 190, 142, 60, 145, 54, 122, 61, 71, 208, 235, 168, 67, 3, 27, 69, 212, 223, 102, 77, 237, 186, 224, 214, 242, 89, 254, 210, 118, 224, 237, 223, 196, 156, 195, 58, 111, 252, 23, 204, 68, 95, 113, 130, 160, 184, 213, 72, 162, 28, 226, 216, 136, 55, 44, 208, 87, 122, 243, 85, 218, 103, 174, 99, 146, 145, 228, 224, 157, 57, 161, 74, 180, 234, 240, 225, 212, 17, 253, 42, 151, 128, 191, 197, 221, 240, 242, 234, 212, 46, 183, 204, 190, 73, 71, 156, 77, 165, 69, 113, 87, 148, 154, 165, 35, 206, 180, 245, 144, 224, 155, 178, 68, 224, 119, 17, 212, 236, 222, 255, 223, 171, 125, 40, 112, 124, 215, 87, 217, 145, 235, 110, 75, 1, 8, 168, 187, 24, 61, 151, 32, 176, 45, 141, 65, 156, 12, 45, 220, 39, 28, 209, 136, 234, 208, 68, 27, 82, 120, 124, 76, 157, 202, 112, 79, 49, 54, 174, 168, 202, 0, 188, 16, 186, 148, 7, 0, 106, 240, 152, 65, 238, 88, 244, 106, 165, 46, 155, 196, 15, 16, 83, 210, 104, 77, 62, 66, 116, 18, 240, 114, 10, 25, 133, 97, 102, 49, 245, 36, 253, 81, 237, 85, 229, 24, 20, 30, 123, 76, 190, 151, 213, 41, 24, 59, 24, 35, 50, 29, 29, 31, 146, 129, 163, 19, 231, 17, 118, 237, 79, 121, 108, 200, 151, 107, 117, 197, 227, 114, 13, 48, 204, 216, 173, 177, 45, 238, 50, 219, 48, 151, 192, 183, 77, 11, 244, 176, 235, 42, 36, 8, 229, 107, 83, 225, 240, 131, 66, 147, 7, 66, 126, 249, 88, 104, 49, 79, 61, 155, 227, 37, 44, 109, 208, 95, 239, 148, 137, 192, 129, 174, 13, 94, 110, 171, 108, 50, 173, 83, 133, 29, 184, 48, 191, 229, 197, 132, 179, 52, 70, 148, 48, 43, 253, 210, 199, 151, 131, 48, 17, 251, 144, 148, 211, 197, 157, 210, 76, 134, 248, 56, 244, 51, 126, 22, 76, 166, 108, 36, 239, 214, 168, 190, 117, 191, 92, 184, 63, 122, 119, 156, 26, 43, 243, 142, 57, 60, 133, 248, 21, 176, 38, 49, 163, 82, 166, 100, 251, 189, 247, 191, 56, 27, 32, 168, 170, 193, 129, 150, 168, 123, 33, 138, 211, 178, 87, 29, 62, 179, 206, 116, 129, 142, 124, 62, 235, 22, 197, 193, 203, 191, 13, 205, 111, 87, 18, 23, 246, 187, 104, 160, 78, 220, 142, 57, 97, 239, 161, 24, 128, 177, 192, 221, 235, 118, 25, 254, 164, 56, 220, 93, 213, 187, 132, 238, 33, 34, 136, 153, 141, 22, 66, 66, 228, 149, 111, 211, 176, 124, 215, 101, 131, 240, 246, 61, 160, 120, 249, 81, 228, 53, 177, 195, 38, 186, 76, 44, 45, 12, 149, 249, 254, 108, 68, 166, 118, 77, 243, 160, 172, 198, 68, 192, 131, 233, 125, 102, 221, 58, 88, 138, 24, 243, 68, 194, 209, 20, 35, 216, 21, 113, 243, 61, 222, 230, 18, 209, 88, 185, 204, 221, 168, 205, 106, 93, 154, 80, 110, 159, 70, 230, 82, 157, 0, 218, 166, 150, 178, 107, 225, 32, 254, 15, 109, 229, 149, 23, 146, 190, 191, 111, 19, 236, 240, 224, 248, 32, 38, 88, 153, 29, 133, 183, 160, 192, 229, 117, 219, 43, 248, 226, 22, 61, 7, 36, 191, 39, 114, 246, 229, 205, 169, 200, 56, 189, 208, 183, 65, 22, 101, 196, 84, 3, 183, 92, 218, 246, 125, 196, 246, 73, 209, 56, 27, 100, 62, 163, 247, 87, 56, 120, 48, 16, 112, 49, 94, 185, 139, 127, 198, 248, 166, 131, 76, 133, 243, 136, 172, 194, 14, 90, 252, 128, 209, 222, 128, 172, 87, 152, 141, 204, 16, 218, 215, 97, 155, 178, 19, 69, 98, 253, 66, 179, 238, 167, 114, 143, 134, 254, 182, 151, 80, 221, 157, 129, 87, 162, 69, 140, 12, 86, 75, 158, 45, 127, 61, 208, 46, 158, 139, 198, 228, 94, 97, 195, 217, 174, 161, 50, 167, 3, 13, 237, 166, 192, 48, 58, 240, 125, 202, 94, 247, 4, 152, 211, 60, 128, 56, 227, 216, 65, 237, 22, 125, 118, 230, 97, 20, 71, 214, 58, 242, 30, 166, 192, 124, 189, 148, 244, 2, 59, 71, 34, 26, 169, 74, 158, 203, 49, 5, 21, 49, 250, 61, 229, 234, 214, 194, 238, 193, 242, 229, 130, 237, 210, 59, 8, 207, 80, 240, 242, 97, 229, 121, 213, 115, 250, 131, 129, 69, 227, 2, 182, 94, 188, 239, 157, 104, 189, 57, 22, 26, 45, 97, 255, 153, 44, 156, 152, 58, 134, 23, 228, 62, 1, 65, 117, 91, 49, 30, 128, 241, 47, 156, 224, 125, 77, 32, 186, 104, 153, 226, 84, 157, 1, 65, 119, 22, 140, 85, 98, 118, 100, 106, 245, 223, 241, 83, 216, 176, 213, 221, 184, 49, 205, 97, 188, 107, 208, 103, 226, 187, 180, 228, 122, 163, 175, 68, 201, 175, 30, 177, 109, 100, 188, 30, 61, 219, 143, 39, 252, 209, 243, 208, 168, 20, 228, 137, 186, 54, 71, 186, 60, 92, 9, 53, 97, 137, 47, 254, 37, 243, 197, 142, 66, 155, 110, 18, 75, 191, 228, 71, 50, 19, 50, 137, 190, 54, 93, 131, 76, 152, 9, 226, 8, 238, 81, 26, 200, 38, 115, 143, 236, 22, 175, 134, 118, 222, 236, 202, 205, 164, 78, 33, 43, 86, 86, 167, 227, 99, 230, 67, 132, 63, 163, 226, 90, 93, 67, 13, 218, 245, 58, 111, 162, 14, 195, 124, 114, 172, 248, 145, 118, 101, 180, 242, 46, 35, 25, 79, 41, 85, 214, 84, 104, 19, 68, 154, 214, 129, 228, 99, 20, 45, 98, 87, 22, 150, 92, 105, 130, 247, 137, 35, 248, 96, 80, 118, 93, 176, 177, 63, 214, 241, 106, 147, 14, 17, 74, 48, 103, 11, 21, 227, 158, 10, 85, 104, 41, 225, 206, 250, 60, 156, 195, 220, 106, 14, 37, 144, 185, 187, 8, 162, 48, 51, 46, 49, 118, 209, 112, 199, 23, 3, 134, 174, 79, 220, 66, 47, 219, 190, 32, 150, 108, 113, 81, 92, 161, 162, 187, 67, 94, 186, 180, 146, 143, 43, 149, 0, 59, 86, 201, 46, 153, 1, 5, 84, 163, 130, 96, 202, 203, 75, 158, 86, 109, 149, 160, 183, 238, 34, 20, 14, 206, 230, 24, 198, 17, 127, 60, 12, 118, 8, 132, 52, 230, 251, 249, 149, 196, 51, 120, 26, 174, 89, 16, 138, 33, 121, 135, 137, 83, 49, 184, 142, 4, 170, 52, 64, 68, 10, 251, 44, 194, 38, 73, 53, 184, 13, 79, 248, 121, 249, 223, 108, 249, 137, 138, 119, 51, 222, 90, 237, 81, 63, 237, 161, 162, 237, 210, 48, 53, 236, 17, 122, 111, 46, 195, 77, 28, 62, 220, 179, 167, 25, 48, 193, 115, 31, 181, 139, 252, 37, 212, 183, 51, 40, 121, 165, 189, 245, 36, 250, 137, 6, 186, 255, 180, 152, 230, 90, 95, 227, 241, 167, 255, 212, 45, 95, 75, 71, 139, 212, 243, 1, 223, 171, 128, 173, 205, 169, 97, 16, 211, 26, 205, 149, 9, 206, 95, 200, 42, 201, 126, 213, 246, 115, 23, 189, 136, 183, 224, 142, 218, 236, 102, 5, 207, 254, 143, 183, 150, 169, 145, 189, 169, 232, 250, 119, 183, 16, 73, 86, 241, 69, 202, 155, 231, 102, 142, 162, 239, 187, 245, 224, 213, 138, 121, 233, 104, 50, 223, 134, 155, 204, 236, 70, 77, 27, 238, 94, 229, 222, 76, 102, 89, 141, 45, 106, 115, 248, 14, 234, 87, 166, 119, 83, 167, 227, 208, 9, 209, 254, 55, 191, 196, 29, 189, 103, 43, 236, 44, 203, 215, 83, 42, 143, 180, 125, 248, 186, 122, 156, 53, 140, 157, 13, 226, 55, 204, 195, 143, 154, 114, 61, 198, 255, 250, 39, 29, 17, 47, 243, 234, 235, 232, 179, 227, 252, 182, 33, 232, 150, 40, 234, 77, 14, 34, 233, 23, 158, 26, 236, 74, 113, 6, 92, 25, 103, 180, 168, 58, 209, 213, 8, 30, 74, 166, 227, 81, 52, 185, 101, 237, 191, 157, 89, 14, 238, 15, 206, 70, 167, 76, 250, 140, 77, 17, 231, 208, 234, 15, 119, 114, 56, 224, 50, 235, 95, 200, 172, 16, 75, 49, 157, 59, 137, 48, 56, 153, 51, 64, 96, 218, 18, 5, 23, 228, 226, 197, 66, 128, 68, 244, 206, 34, 2, 149, 39, 41, 195, 17, 83, 113, 132, 162, 154, 165, 173, 170, 210, 145, 62, 232, 79, 56, 49, 34, 188, 104, 142, 110, 55, 147, 5, 230, 97, 95, 16, 88, 135, 89, 135, 63, 67, 217, 77, 19, 8, 207, 11, 32, 149, 129, 252, 132, 255, 60, 238, 24, 131, 86, 32, 50, 167, 150, 136, 236, 90, 14, 212, 155, 165, 68, 114, 9, 18, 63, 182, 34, 215, 236, 223, 70, 214, 55, 232, 114, 246, 206, 193, 242, 254, 182, 177, 107, 40, 230, 68, 168, 97, 238, 18, 14, 160, 225, 200, 6, 34, 35, 83, 251, 114, 104, 189, 71, 109, 18, 232, 53, 145, 37, 86, 226, 152, 26, 4, 149, 186, 5, 30, 61, 62, 246, 39, 25, 236, 137, 130, 211, 34, 206, 95, 54, 178, 18, 244, 43, 15, 199, 81, 79, 102, 220, 232, 120, 156, 31, 105, 28, 185, 112, 204, 226, 109, 178, 198, 1, 184, 19, 194, 146, 21, 149, 254, 223, 27, 129, 112, 143, 9, 5, 157, 47, 58, 20, 10, 189, 136, 97, 122, 187, 17, 231, 200, 242, 60, 133, 55, 205, 45, 168, 178, 47, 152, 125, 242, 36, 49, 58, 128, 191, 147, 26, 96, 76, 168, 239, 205, 46, 67, 194, 113, 106, 194, 168, 229, 235, 188, 67, 228, 194, 154, 24, 128, 85, 166, 250, 80, 99, 59, 208, 97, 132, 179, 145, 83, 97, 170, 238, 185, 148, 66, 206, 170, 64, 3, 185, 165, 73, 30, 151, 165, 56, 108, 162, 191, 18, 203, 57, 251, 24, 160, 47, 86, 16, 144, 119, 58, 5, 242, 131, 117, 73, 60, 32, 158, 105, 32, 53, 162, 10, 103, 69, 229, 31, 223, 48, 134, 82, 197, 172, 167, 15, 179, 5, 50, 125, 253, 183, 231, 211, 78, 212, 110, 32, 140, 71, 58, 45, 179, 181, 72, 4, 29, 253, 89, 136, 137, 176, 181, 157, 175, 41, 51, 227, 33, 35, 242, 81, 127, 15, 18, 118, 211, 199, 47, 99, 19, 80, 88, 28, 203, 172, 83, 243, 78, 126, 202, 32, 225, 93, 180, 174, 130, 29, 61, 3, 6, 83, 202, 9, 172, 20, 88, 220, 191, 244, 188, 247, 127, 77, 85, 138, 138, 14, 156, 72, 134, 150, 48, 187, 99, 9, 31, 137, 100, 111, 252, 12, 103, 101, 154, 186, 187, 228, 107, 110, 46, 166, 173, 11, 143, 42, 255, 150, 213, 225, 146, 189, 111, 118, 95, 83, 236, 122, 63, 125, 153, 40, 169, 96, 202, 245, 93, 227, 120, 83, 166, 215, 40, 124, 30, 100, 165, 157, 76, 34, 252, 164, 200, 220, 226, 178, 50, 31, 230, 131, 236, 87, 80, 170, 138, 252, 191, 22, 65, 125, 132, 67, 120, 131, 246, 241, 195, 38, 55, 222, 239, 69, 42, 215, 103, 50, 169, 43, 153, 116, 105, 61, 214, 158, 79, 84, 10, 21, 78, 169, 182, 138, 112, 74, 125, 30, 193, 179, 67, 131, 125, 212, 161, 86, 159, 159, 161, 250, 251, 254, 144, 207, 32, 3, 9, 17, 225, 66, 225, 196, 255, 116, 96, 136, 144, 179, 119, 159, 211, 111, 47, 78, 184, 71, 12, 190, 54, 149, 232, 78, 31, 76, 151, 198, 154, 157, 56, 152, 88, 54, 247, 48, 148, 107, 180, 223, 15, 72, 126, 239, 40, 13, 204, 201, 187, 5, 196, 51, 31, 83, 8, 78, 123, 245, 34, 95, 49, 169, 136, 101, 252, 123, 235, 234, 135, 50, 190, 194, 236, 126, 150, 112, 190, 247, 93, 122, 41, 54, 208, 166, 33, 51, 98, 28, 254, 251, 2, 8, 125, 233, 118, 249, 18, 183, 208, 93, 253, 22, 34, 0, 240, 163, 40, 162, 224, 242, 203, 1, 28, 97, 230, 23, 137, 85, 149, 193, 140, 202, 86, 51, 196, 248, 106, 61, 69, 135, 253, 84, 204, 95, 101, 246, 208, 255, 9, 161, 224, 158, 146, 105, 128, 243, 118, 223, 250, 225, 16, 92, 39, 216, 10, 144, 85, 209, 127, 137, 140, 75, 149, 85, 201, 13, 197, 111, 196, 182, 174, 135, 103, 117, 128, 147, 149, 12, 10, 217, 120, 8, 147, 83, 164, 37, 221, 4, 1, 94, 193, 144, 14, 116, 21, 202, 206, 34, 222, 200, 46, 47, 7, 23, 110, 253, 54, 225, 215, 81, 247, 180, 27, 248, 203, 128, 253, 150, 130, 197, 33, 206, 242, 186, 75, 25, 68, 248, 102, 191, 194, 88, 142, 13, 169, 203, 71, 121, 8, 97, 116, 172, 24, 253, 19, 128, 43, 110, 249, 134, 216, 167, 12, 29, 149, 208, 29, 234, 189, 114, 9, 253, 154, 170, 44, 188, 155, 157, 121, 229, 119, 109, 212, 206, 24, 215, 151, 121, 141, 153, 102, 243, 80, 76, 137, 149, 175, 67, 248, 22, 128, 81, 115, 72, 110, 131, 24, 201, 103, 5, 156, 123, 112, 234, 20, 137, 243, 107, 48, 80, 94, 112, 149, 77, 61, 138, 148, 61, 169, 137, 75, 34, 21, 101, 155, 240, 78, 79, 87, 124, 171, 105, 35, 207, 150, 130, 162, 247, 144, 157, 167, 182, 231, 195, 128, 202, 40, 28, 175, 85, 157, 59, 12, 222, 215, 105, 198, 201, 13, 198, 156, 46, 6, 4, 142, 139, 161, 199, 90, 33, 162], - [57, 171, 66, 15, 161, 182, 55, 228, 9, 124, 113, 101, 71, 125, 189, 229, 113, 162, 125, 181, 212, 4, 201, 145, 255, 156, 247, 107, 61, 111, 12, 51, 78, 95, 58, 206, 59, 45, 254, 180, 19, 209, 158, 225, 152, 95, 39, 84, 183, 214, 62, 146, 149, 249, 172, 8, 170, 91, 124, 128, 162, 189, 90, 162, 6, 109, 101, 38, 105, 126, 115, 55, 114, 18, 60, 63, 146, 254, 14, 188, 104, 102, 19, 187, 107, 218, 202, 158, 164, 235, 61, 24, 255, 212, 32, 179, 226, 119, 76, 204, 160, 235, 148, 115, 233, 248, 178, 50, 60, 202, 145, 184, 222, 147, 14, 206, 74, 207, 14, 119, 219, 108, 169, 200, 194, 198, 93, 125, 223, 9, 142, 6, 184, 222, 120, 65, 5, 171, 80, 218, 100, 26, 138, 119, 56, 179, 15, 103, 244, 25, 193, 133, 166, 107, 7, 127, 209, 226, 89, 161, 196, 209, 119, 77, 108, 138, 171, 57, 63, 93, 198, 109, 19, 251, 63, 254, 13, 202, 62, 214, 156, 48, 113, 70, 220, 247, 97, 67, 38, 185, 5, 249, 87, 231, 200, 97, 37, 68, 86, 165, 136, 120, 225, 219, 124, 156, 196, 197, 155, 199, 117, 24, 78, 86, 203, 131, 121, 9, 215, 97, 164, 42, 60, 175, 104, 89, 43, 217, 139, 170, 12, 56, 52, 171, 180, 21, 23, 208, 164, 221, 210, 95, 62, 132, 232, 200, 70, 78, 229, 78, 77, 173, 136, 178, 125, 199, 222, 247, 75, 145, 12, 171, 73, 6, 8, 193, 91, 230, 103, 210, 48, 64, 231, 173, 94, 101, 60, 182, 156, 240, 236, 237, 71, 230, 224, 122, 246, 43, 199, 241, 92, 95, 120, 172, 113, 94, 9, 27, 189, 225, 127, 107, 13, 68, 58, 139, 221, 55, 24, 20, 239, 56, 192, 127, 3, 187, 140, 38, 215, 251, 21, 123, 58, 146, 243, 83, 169, 79, 31, 239, 208, 36, 130, 174, 166, 191, 95, 51, 44, 243, 167, 177, 151, 204, 26, 144, 189, 251, 31, 223, 201, 151, 172, 234, 180, 120, 175, 227, 142, 38, 113, 146, 4, 136, 140, 21, 188, 87, 48, 129, 35, 29, 248, 69, 64, 108, 122, 154, 149, 237, 62, 59, 94, 33, 100, 223, 88, 43, 244, 172, 139, 16, 44, 164, 133, 254, 249, 81, 158, 8, 181, 78, 80, 208, 140, 69, 193, 169, 133, 218, 222, 116, 176, 216, 234, 209, 113, 187, 37, 172, 202, 184, 59, 154, 41, 75, 66, 160, 17, 12, 99, 48, 66, 173, 218, 105, 110, 142, 122, 126, 91, 45, 166, 212, 207, 109, 115, 54, 182, 24, 222, 125, 7, 61, 48, 109, 229, 51, 228, 29, 123, 61, 105, 252, 132, 13, 156, 192, 221, 11, 138, 201, 234, 145, 211, 172, 142, 94, 147, 6, 165, 153, 85, 15, 39, 183, 94, 214, 91, 210, 78, 230, 169, 121, 133, 220, 177, 54, 145, 118, 73, 24, 208, 200, 188, 255, 166, 212, 166, 59, 36, 30, 111, 198, 134, 56, 59, 85, 163, 86, 69, 141, 91, 5, 145, 50, 77, 39, 190, 61, 188, 201, 143, 144, 228, 111, 155, 72, 226, 135, 85, 180, 67, 162, 147, 148, 32, 139, 79, 43, 116, 221, 11, 211, 194, 176, 33, 230, 209, 156, 130, 92, 243, 117, 96, 248, 117, 253, 185, 58, 123, 208, 187, 160, 218, 136, 14, 47, 100, 69, 80, 170, 33, 197, 43, 118, 177, 123, 115, 21, 207, 35, 123, 64, 147, 122, 52, 44, 92, 86, 216, 144, 229, 14, 232, 254, 33, 72, 68, 144, 198, 34, 55, 183, 29, 92, 99, 72, 118, 122, 199, 180, 15, 183, 150, 74, 207, 4, 88, 115, 112, 50, 184, 173, 126, 106, 155, 204, 53, 95, 123, 190, 22, 173, 191, 131, 59, 66, 253, 182, 187, 71, 136, 154, 33, 185, 112, 213, 19, 5, 82, 243, 178, 243, 13, 170, 169, 143, 33, 50, 240, 5, 51, 184, 165, 197, 162, 85, 4, 148, 5, 192, 8, 40, 103, 205, 26, 226, 158, 131, 137, 28, 24, 126, 115, 177, 151, 5, 157, 47, 99, 229, 188, 165, 153, 233, 50, 208, 94, 151, 38, 153, 151, 239, 51, 209, 105, 64, 119, 195, 74, 130, 33, 8, 189, 141, 90, 1, 87, 81, 201, 213, 179, 235, 105, 251, 135, 226, 77, 62, 9, 15, 194, 118, 138, 248, 164, 169, 88, 140, 17, 98, 20, 29, 0, 8, 163, 108, 70, 125, 119, 67, 12, 43, 114, 64, 99, 99, 45, 121, 37, 158, 240, 29, 44, 115, 251, 244, 174, 16, 243, 226, 47, 217, 132, 103, 19, 207, 227, 207, 242, 14, 128, 30, 168, 4, 95, 236, 250, 129, 190, 255, 221, 198, 177, 223, 93, 153, 244, 26, 254, 76, 160, 241, 1, 199, 236, 167, 195, 8, 123, 158, 42, 7, 192, 191, 215, 144, 216, 133, 148, 158, 209, 181, 222, 102, 30, 70, 91, 162, 70, 20, 165, 108, 206, 213, 99, 9, 30, 148, 5, 133, 121, 100, 205, 120, 167, 24, 101, 36, 188, 137, 239, 235, 215, 12, 208, 74, 219, 118, 197, 49, 192, 19, 61, 249, 140, 241, 51, 209, 164, 145, 102, 26, 184, 138, 17, 100, 102, 11, 91, 22, 79, 87, 156, 70, 218, 164, 252, 162, 8, 66, 199, 251, 190, 32, 219, 236, 138, 251, 20, 243, 117, 228, 142, 160, 59, 67, 47, 131, 238, 1, 200, 130, 48, 125, 53, 13, 139, 193, 221, 123, 14, 60, 254, 37, 25, 110, 39, 210, 214, 149, 168, 128, 244, 203, 45, 166, 82, 83, 221, 191, 23, 70, 221, 1, 104, 239, 126, 47, 65, 115, 174, 54, 94, 240, 240, 154, 137, 66, 223, 233, 237, 31, 46, 125, 132, 64, 147, 252, 34, 158, 45, 79, 149, 206, 19, 69, 235, 186, 13, 72, 68, 250, 178, 128, 80, 162, 39, 219, 252, 240, 208, 228, 149, 40, 155, 44, 235, 1, 73, 68, 115, 34, 161, 146, 126, 218, 143, 62, 115, 86, 113, 80, 136, 141, 178, 139, 45, 131, 219, 108, 139, 22, 67, 44, 225, 223, 198, 113, 229, 50, 109, 206, 83, 166, 91, 106, 2, 117, 227, 10, 11, 23, 166, 223, 26, 239, 68, 255, 91, 222, 32, 12, 43, 152, 82, 182, 158, 186, 35, 203, 212, 139, 123, 10, 115, 30, 212, 226, 125, 9, 3, 218, 59, 79, 6, 145, 148, 223, 140, 236, 192, 30, 211, 149, 220, 197, 20, 224, 139, 111, 155, 46, 189, 207, 91, 37, 194, 70, 33, 125, 56, 0, 248, 36, 53, 196, 238, 6, 174, 0, 101, 84, 11, 150, 230, 88, 28, 200, 147, 193, 141, 96, 184, 99, 223, 107, 188, 154, 168, 192, 63, 224, 24, 61, 96, 62, 73, 226, 99, 98, 190, 96, 119, 245, 141, 91, 102, 218, 147, 243, 9, 72, 199, 125, 35, 51, 50, 241, 48, 54, 247, 206, 198, 134, 182, 223, 210, 227, 128, 226, 108, 50, 192, 18, 91, 246, 79, 88, 23, 78, 110, 212, 177, 103, 65, 67, 245, 135, 108, 182, 148, 209, 100, 0, 155, 61, 236, 153, 216, 126, 67, 68, 30, 149, 70, 86, 16, 196, 148, 86, 3, 44, 222, 147, 33, 16, 86, 74, 240, 212, 104, 250, 135, 129, 84, 169, 114, 146, 113, 101, 202, 204, 167, 215, 12, 179, 55, 66, 233, 17, 80, 113, 88, 240, 1, 219, 60, 231, 153, 83, 219, 157, 150, 254, 177, 120, 98, 70, 163, 168, 253, 94, 21, 102, 230, 173, 38, 170, 126, 5, 209, 158, 25, 208, 194, 145, 175, 95, 87, 236, 212, 98, 63, 198, 163, 47, 85, 251, 136, 253, 195, 43, 119, 174, 52, 202, 95, 245, 178, 222, 186, 167, 239, 206, 17, 81, 252, 232, 220, 251, 83, 144, 42, 180, 53, 26, 72, 38, 248, 245, 121, 237, 187, 0, 6, 168, 190, 224, 149, 45, 72, 247, 183, 107, 10, 36, 17, 71, 201, 144, 68, 245, 128, 56, 244, 68, 214, 238, 99, 171, 89, 228, 49, 134, 222, 100, 23, 251, 42, 164, 67, 152, 163, 174, 61, 126, 110, 93, 70, 158, 40, 102, 195, 2, 21, 175, 63, 155, 30, 221, 61, 89, 61, 141, 125, 69, 109, 206, 26, 65, 152, 240, 236, 95, 25, 171, 252, 154, 30, 32, 209, 132, 242, 135, 9, 181, 187, 34, 110, 169, 168, 11, 17, 2, 57, 71, 126, 14, 180, 98, 218, 176, 38, 64, 53, 63, 65, 57, 84, 187, 144, 117, 84, 73, 182, 135, 227, 69, 185, 255, 232, 176, 158, 165, 124, 154, 109, 92, 71, 40, 254, 211, 187, 181, 18, 222, 78, 185, 97, 194, 75, 247, 99, 182, 207, 221, 234, 189, 28, 197, 14, 54, 94, 135, 237, 142, 13, 205, 62, 152, 81, 84, 197, 171, 32, 207, 77, 29, 132, 211, 172, 50, 39, 115, 99, 195, 94, 217, 135, 158, 94, 163, 164, 28, 30, 243, 115, 123, 76, 144, 159, 70, 212, 250, 252, 108, 117, 140, 222, 229, 141, 70, 251, 215, 143, 184, 35, 98, 28, 87, 254, 232, 107, 34, 114, 53, 41, 198, 65, 140, 129, 84, 139, 228, 95, 245, 236, 105, 89, 11, 90, 145, 147, 220, 151, 101, 4, 245, 214, 211, 116, 59, 30, 181, 63, 32, 111, 95, 74, 1, 174, 22, 102, 246, 247, 158, 24, 217, 18, 103, 190, 104, 160, 173, 203, 72, 31, 114, 9, 36, 56, 74, 172, 106, 107, 95, 119, 145, 4, 146, 111, 130, 122, 188, 184, 154, 241, 137, 94, 82, 37, 138, 183, 48, 139, 89, 80, 96, 203, 152, 208, 223, 24, 90, 4, 97, 95, 112, 43, 250, 102, 56, 76, 4, 32, 249, 116, 145, 44, 181, 90, 25, 34, 248, 110, 243, 145, 7, 202, 104, 25, 11, 239, 111, 97, 67, 46, 140, 243, 140, 209, 161, 81, 65, 15, 104, 243, 200, 224, 162, 139, 116, 114, 217, 46, 135, 217, 25, 76, 238, 239, 125, 109, 120, 101, 141, 44, 143, 113, 62, 218, 8, 25, 1, 149, 95, 37, 39, 137, 186, 12, 57, 97, 247, 225, 206, 83, 56, 194, 6, 11, 173, 96, 165, 121, 71, 91, 159, 77, 142, 111, 219, 92, 79, 52, 164, 97, 148, 131, 139, 42, 183, 72, 122, 155, 61, 162, 201, 170, 12, 216, 221, 128, 112, 98, 138, 120, 31, 17, 250, 65, 146, 217, 121, 92, 163, 167, 211, 180, 241, 239, 250, 199, 252, 241, 48, 31, 170, 78, 162, 32, 138, 189, 147, 161, 115, 119, 106, 52, 91, 5, 19, 36, 231, 162, 22, 0, 195, 245, 105, 81, 38, 35, 147, 248, 116, 84, 230, 196, 254, 177, 229, 235, 138, 111, 147, 122, 137, 90, 7, 39, 234, 11, 163, 119, 88, 235, 106, 85, 155, 43, 208, 247, 203, 87, 95, 18, 88, 111, 42, 173, 159, 219, 66, 201, 206, 54, 82, 30, 5, 108, 222, 61, 18, 105, 113, 190, 35, 131, 185, 233, 251, 94, 240, 192, 22, 102, 143, 17, 40, 6, 93, 218, 197, 210, 113, 150, 86, 244, 105, 149, 71, 54, 231, 187, 168, 221, 237, 99, 231, 20, 129, 195, 131, 32, 133, 100, 239, 201, 146, 225, 203, 162, 191, 212, 179, 229, 168, 133, 123, 180, 246, 119, 48, 86, 141, 35, 95, 118, 230, 2, 92, 195, 237, 241, 135, 196, 232, 123, 154, 153, 91, 255, 97, 216, 53, 53, 56, 23, 55, 185, 143, 230, 186, 12, 230, 13, 159, 219, 119, 8, 160, 227, 228, 16, 118, 83, 174, 6, 113, 121, 180, 36, 9, 161, 64, 187, 67, 110, 111, 29, 191, 149, 238, 132, 153, 118, 64, 152, 200, 223, 53, 70, 240, 250, 198, 187, 96, 0, 46, 254, 244, 226, 22, 146, 36, 47, 99, 46, 93, 255, 24, 3, 135, 233, 180, 1, 206, 220, 65, 115, 88, 180, 75, 83, 218, 50, 170, 179, 141, 54, 32, 32, 116, 135, 67, 245, 114, 106, 99, 1, 239, 156, 63, 13, 50, 190, 108, 249, 181, 49, 123, 235, 215, 15, 71, 157, 16, 57, 122, 113, 126, 111, 160, 34, 104, 109, 190, 158, 158, 159, 179, 138, 32, 166, 127, 105, 233, 65, 52, 211, 116, 3, 232, 124, 96, 121, 93, 255, 167, 227, 218, 245, 124, 212, 229, 218, 46, 203, 102, 213, 78, 138, 179, 183, 112, 254, 92, 80, 58, 133, 83, 161, 221, 72, 91, 124, 66, 162, 230, 165, 137, 31, 156, 30, 172, 77, 43, 234, 8, 241, 99, 116, 89, 88, 217, 95, 209, 167, 113, 121, 97, 221, 73, 199, 18, 185, 103, 242, 222, 249, 182, 201, 121, 58, 225, 118, 26, 74, 212, 37, 18, 42, 214, 140, 31, 179, 221, 200, 99, 59, 225, 179, 203, 185, 27, 9, 114, 164, 140, 107, 42, 31, 15, 171, 30, 211, 219, 14, 81, 32, 203, 11, 164, 12, 93, 65, 230, 87, 4, 166, 54, 252, 239, 79, 98, 5, 203, 169, 204, 230, 107, 131, 87, 198, 81, 83, 188, 232, 72, 221, 245, 134, 112, 141, 173, 198, 145, 207, 53, 171, 58, 223, 77, 227, 96, 244, 50, 202, 215, 105, 239, 41, 52, 143, 221, 107, 186, 8, 232, 200, 60, 43, 144, 30, 33, 7, 185, 60, 108, 25, 223, 24, 112, 157, 183, 37, 7, 150, 153, 213, 94, 162, 4, 17, 165, 10, 65, 75, 235, 247, 160, 31, 42, 101, 105, 71, 150, 232, 249, 163, 189, 222, 10, 158, 31, 182, 40, 211, 185, 24, 4, 211, 252, 133, 104, 47, 132, 228, 15, 38, 56, 137, 159, 43, 178, 63, 61, 224, 42, 67, 86, 2, 140, 71, 75, 233, 251, 224, 123, 21, 60, 123, 63, 94, 93, 42, 109, 65, 65, 51, 28, 189, 153, 166, 148, 198, 67, 64, 253, 168, 59, 248, 137, 60, 131, 183, 203, 190, 14, 94, 61, 178, 118, 30, 214, 68, 215, 124, 101, 135, 66, 241, 89, 8, 52, 57, 61, 185, 232, 64, 55, 113, 40, 231, 130, 77, 114, 11, 130, 179, 106, 80, 63, 188, 91, 131, 161, 155, 178, 184, 165, 18, 65, 86, 37, 191, 68, 22, 124, 104, 226, 67, 112, 168, 161, 75, 193, 83, 3, 135, 234, 82, 80, 49, 219, 185, 254, 215, 227, 38, 240, 147, 251, 131, 67, 242, 12, 75, 1, 104, 243, 236, 211, 101, 206, 103, 113, 130, 90, 250, 233, 27, 246, 135, 95, 20, 29, 243, 203, 166, 128, 208, 71, 136, 244, 51, 78, 143, 221, 150, 168, 7, 212, 6, 36, 40, 26, 28, 133, 119, 20, 101, 153, 244, 133, 67, 122, 86, 68, 85, 136, 178, 235, 53, 117, 17, 69, 220, 54, 166, 230, 99, 122, 220, 207, 235, 172, 13, 139, 25, 80, 60, 125, 99, 182, 23, 155, 179, 20, 25, 79, 237, 147, 71, 250, 89, 62, 28, 26, 97, 205, 119, 90, 211, 72, 229, 192, 108, 229, 146, 208, 138, 209, 61, 69, 221, 20, 185, 239, 19, 113, 51, 153, 171, 140, 28, 80, 118, 151, 16, 16, 39, 82, 250, 187, 37, 61, 143, 182, 97, 188, 45, 112, 223, 75, 241, 17, 130, 91, 73, 69, 225, 58, 12, 180, 183, 138, 176, 191, 54, 110, 99, 180, 26, 98, 117, 230, 117, 67, 209, 100, 160, 9, 132, 151, 161, 148, 69, 38, 135, 108, 150, 73, 30, 112, 247, 199, 20, 117, 184, 183, 233, 234, 183, 123, 214, 159, 73, 108, 32, 176, 209, 233, 172, 230, 212, 61, 229, 175, 139, 168, 95, 196, 76, 104, 114, 170, 213, 21, 88, 175, 247, 53, 249, 67, 19, 177, 160, 48, 225, 6, 152, 77, 118, 60, 108, 225, 24, 54, 244, 124, 141, 29, 46, 187, 105, 180, 252, 132, 213, 231, 56, 136, 8, 86, 126, 184, 108, 166, 103, 6, 215, 48, 85, 177, 151, 219, 47, 190, 249, 57, 221, 62, 60, 99, 56, 125, 19, 133, 78, 190, 105, 109, 121, 79, 254, 6, 129, 192, 138, 83, 212, 24, 137, 178, 237, 252, 156, 250, 15, 70, 165, 154, 112, 203, 119, 60, 254, 243, 151, 215, 143, 76, 45, 206, 173, 5, 158, 190, 55, 145, 12, 208, 231, 43, 80, 150, 225, 207, 88, 42, 10, 145, 19, 226, 154, 95, 136, 254, 45, 218, 154, 103, 93, 62, 22, 21, 202, 171, 236, 183, 40, 219, 104, 215, 85, 201, 111, 166, 130, 104, 169, 241, 122, 169, 4, 105, 136, 15, 23, 233, 211, 209, 170, 75, 199, 143, 38, 40, 172, 221, 14, 195, 65, 56, 79, 1, 123, 222, 8, 18, 38, 118, 73, 181, 223, 164, 177, 58, 157, 32, 236, 74, 68, 179, 204, 118, 142, 222, 21, 99, 44, 254, 75, 80, 249, 14, 168, 183, 149, 34, 103, 53, 180, 191, 161, 194, 51, 170, 93, 113, 72, 46, 18, 146, 215, 233, 90, 254, 167, 235, 113, 248, 246, 110, 36, 159, 172, 145, 235, 150, 218, 148, 183, 232, 99, 116, 90, 169, 7, 33, 75, 114, 6, 27, 47, 206, 166, 128, 251, 183, 246, 243, 166, 139, 71, 3, 88, 236, 111, 224, 87, 196, 78, 39, 85, 137, 216, 46, 172, 102, 22, 36, 15, 82, 144, 57, 149, 64, 128, 16, 133, 88, 131, 61, 86, 169, 16, 152, 69, 36, 8, 154, 117, 85, 244, 244, 190, 8, 123, 203, 167, 223, 113, 113, 220, 135, 125, 138, 161, 205, 244, 192, 166, 154, 240, 39, 13, 191, 194, 239, 83, 48, 159, 200, 29, 178, 147, 198, 121, 104, 32, 245, 94, 10, 34, 137, 161, 95, 39, 224, 115, 165, 67, 196, 79, 160, 75, 81, 201, 84, 76, 32, 68, 151, 222, 131, 62, 92, 51, 163, 20, 10, 36, 69, 52, 254, 7, 177, 237, 199, 168, 168, 38, 189, 56, 117, 142, 187, 22, 83, 250, 112, 23, 169, 156, 218, 44, 185, 65, 190, 43, 154, 25, 255, 234, 24, 82, 8, 196, 225, 15, 71, 145, 144, 9, 248, 49, 74, 179, 190, 47, 66, 169, 213, 112, 19, 43, 235, 136, 185, 128, 47, 250, 61, 168, 207, 216, 70, 175, 105, 236, 36, 105, 83, 54, 88, 201, 107, 0, 169, 197, 160, 117, 100, 245, 120, 88, 215, 22, 162, 7, 112, 148, 5, 218, 206, 99, 180, 114, 182, 171, 76, 18, 193, 53, 32, 59, 93, 199, 228, 11, 250, 148, 48, 99, 128, 255, 255, 26, 169, 35, 115, 6, 157, 46, 127, 250, 36, 59, 12, 243, 180, 46, 66, 132, 201, 245, 61, 43, 16, 111, 56, 14, 25, 132, 152, 15, 13, 152, 172, 241, 65, 69, 163, 129, 57, 198, 67, 10, 58, 119, 41, 118, 44, 55, 68, 112, 219, 20, 78, 73, 242, 138, 141, 134, 202, 49, 34, 185, 176, 181, 181, 78, 224, 68, 147, 45, 149, 231, 136, 64, 175, 76, 160, 196, 27, 81, 14, 206, 161, 165, 54, 227, 76, 143, 200, 106, 189, 55, 80, 48, 255, 102, 59, 6, 52, 196, 144, 226, 190, 191, 68, 147, 121, 62, 243, 56, 73, 172, 13, 126, 149, 106, 214, 28, 168, 39, 91, 247, 81, 33, 106, 165, 5, 123, 144, 117, 125, 50, 139, 114, 197, 196, 38, 53, 207, 74, 59, 70, 11, 117, 102, 18, 11, 93, 13, 83, 255, 203, 142, 73, 160, 122, 108, 95, 238, 32, 149, 0, 105, 114, 243, 162, 9, 128, 15, 110, 238, 34, 178, 240, 173, 37, 140, 6, 240, 37, 181, 236, 155, 92, 160, 184, 228, 20, 103, 201, 0, 156, 9, 31, 219, 193, 74, 222, 110, 240, 198, 22, 232, 112, 83, 155, 37, 223, 106, 196, 47, 51, 228, 226, 235, 6, 246, 112, 194, 106, 229, 81, 53, 58, 214, 216, 241, 156, 184, 37, 20, 145, 126, 146, 65, 177, 99, 214, 254, 58, 245, 127, 153, 54, 101, 197, 86, 113, 59, 108, 157, 66, 102, 120, 173, 64, 82, 244, 29, 143, 201, 246, 38, 239, 172, 105, 120, 145, 254, 114, 61, 227, 56, 71, 128, 77, 107, 65, 81, 210, 22, 176, 172, 102, 49, 32, 11, 141, 245, 168, 121, 250, 108, 33, 146, 57, 197, 82, 217, 179, 171, 14, 224, 222, 22, 56, 45, 66, 2, 73, 108, 78, 150, 158, 203, 48, 151, 22, 233, 209, 198, 113, 85, 151, 157, 17, 240, 238, 118, 218, 223, 0, 54, 251, 45, 2, 38, 54, 161, 55, 56, 173, 0, 132, 224, 61, 172, 32, 226, 140, 122, 96, 183, 227, 186, 176, 161, 203, 141, 112, 157, 142, 139, 146, 28, 113, 180, 89, 242, 218, 229, 84, 185, 105, 85, 198, 83, 108, 88, 53, 73, 85, 94, 152, 248, 208, 63, 241, 182, 92, 13, 242, 127, 221, 54, 8, 237, 226, 140, 89, 220, 248, 166, 153, 233, 40, 33, 235, 22, 27, 246, 112, 191, 161, 101, 111, 133, 60, 191, 43, 97, 133, 179, 102, 172, 123, 246, 127, 33, 41, 45, 12, 200, 114, 83, 143, 193, 137, 32, 208, 173, 154, 211, 108, 179, 243, 154, 28, 164, 178, 16, 27, 26, 1, 91, 148, 146, 150, 227, 22, 8, 185, 8, 195, 104, 67, 81, 166, 101, 128, 92, 208, 171, 12, 245, 118, 2, 90, 238, 204, 85, 122, 198, 215, 107, 23, 40, 145, 104, 164, 194, 15, 185, 155, 56, 182, 233, 180, 155, 91, 143, 239, 75, 78, 150, 44, 93, 146, 2, 244, 179, 57, 154, 28, 70, 92, 163, 10, 70, 128, 217, 148, 191, 204, 234, 20, 193, 216, 114, 128, 139, 104, 223, 233, 195, 254, 70, 120, 243, 96, 79, 88, 144, 118, 144, 246, 45, 242, 26, 165, 82, 61, 17, 117, 55, 168, 122, 150, 154, 62, 206, 169, 222, 122, 224, 171, 139, 162, 147, 227, 144, 107, 92, 52, 133, 115, 26, 176, 155, 251, 95, 48, 83, 235, 59, 141, 129, 147, 240, 170, 39, 198, 54, 237, 187, 109, 80, 55, 198, 192, 95, 51, 176, 7, 221, 175, 55, 160, 233, 47, 138, 35, 79, 251, 3, 175, 73, 243, 165, 35, 79, 68, 62, 55, 28, 34, 42, 77, 15, 8, 123, 136, 187, 100, 230, 76, 98, 202, 97, 161, 73, 11, 227, 128, 141, 93, 252, 131, 72, 251, 119, 11, 222, 155, 100, 118, 115, 164, 79, 88, 234, 141, 62, 172, 41, 42, 159, 128, 248, 57, 249, 161, 222, 151, 6, 249, 109, 170, 116, 197, 212, 46, 79, 129, 221, 124, 232, 175, 56, 67, 97, 68, 108, 172, 7, 133, 76, 14, 186, 244, 203, 169, 131, 97, 186, 98, 249, 6, 206, 1, 28, 175, 163, 135, 80, 241, 91, 41, 81, 140, 160, 61, 141, 96, 63, 229, 85, 157, 132, 249, 115, 17, 230, 147, 198, 130, 155, 161, 221, 11, 163, 130, 69, 24, 42, 232, 23, 180, 106, 118, 55, 232, 153, 135, 113, 80, 152, 193, 17, 81, 236, 250, 86, 53, 129, 172, 194, 252, 34, 178, 84, 153, 8, 116, 91, 145, 208, 0, 71, 108, 131, 143, 210, 215, 225, 66, 213, 39, 109, 39, 206, 235, 63, 239, 137, 118, 192, 112, 202, 147, 72, 26, 101, 223, 48, 192, 111, 235, 99, 178, 111, 155, 226, 37, 95, 142, 104, 69, 112, 43, 152, 32, 57, 150, 126, 218, 84, 52, 182, 235, 76, 177, 24, 70, 212, 113, 64, 252, 182, 160, 3, 159, 160, 171, 62, 95, 229, 33, 124, 89, 75, 111, 169, 104, 49, 158, 34, 49, 215, 61, 100, 197, 64, 16, 223, 196, 215, 181, 241, 1, 192, 241, 8, 126, 124, 132, 151, 107, 51, 57, 68, 42, 79, 15, 146, 242, 89, 24, 216, 74, 237, 142, 170, 101, 225, 186, 57, 207, 72, 15, 158, 142, 115, 114, 189, 150, 132, 159, 83, 199, 146, 11, 123, 75, 30, 36, 238, 215, 112, 104, 168, 2, 89, 53, 60, 188, 123, 226, 149, 110, 123, 61, 20, 241, 34, 208, 155, 176, 121, 74, 203, 2, 246, 65, 225, 90, 68, 116, 183, 127, 32, 43, 227, 221, 248, 202, 128, 239, 38, 145, 160, 10, 100, 104, 52, 250, 246, 231, 236, 2, 198, 207, 231, 221, 213, 198, 106, 140, 110, 230, 153, 156, 113, 241, 117, 107, 194, 69, 240, 35, 214, 198, 217, 147, 117, 134, 170, 83, 220, 162, 108, 3, 135, 134, 114, 77, 244, 190, 25, 98, 29, 157, 242, 54, 67, 182, 164, 252, 248, 13, 209, 231, 41, 119, 234, 63, 94, 123, 169, 5, 176, 197, 224, 185, 211, 70, 40, 196, 123, 252, 46, 185, 67, 90, 186, 142, 43, 10, 71, 19, 173, 1, 141, 134, 226, 126, 53, 42, 14, 26, 217, 177, 5, 100, 239, 183, 22, 168, 20, 62, 48, 142, 24, 91, 126, 194, 80, 41, 160, 175, 106, 116, 87, 73, 185, 147, 93, 54, 198, 252, 54, 180, 213, 84, 182, 177, 53, 7, 81, 67, 96, 137, 114, 84, 218, 245, 188, 115, 92, 228, 63, 148, 180, 122, 86, 206, 115, 136, 123, 139, 130, 73, 157, 118, 221, 100, 7, 169, 195, 101, 143, 230, 40, 221, 237, 195, 160, 24, 144, 173, 166, 0, 254, 169, 16, 57, 83, 133, 0, 217, 131, 201, 170, 106, 4, 175, 217, 250, 149, 16, 203, 130, 64, 76, 44, 230, 239, 214, 35, 41, 184, 223, 125, 55, 248, 184, 11, 248, 57, 93, 54, 146, 73, 219, 87, 250, 129, 84, 59, 47, 135, 140, 239, 51, 117, 97, 118, 122, 172, 99, 45, 5, 220, 186, 113, 12, 237, 152, 177, 28, 173, 181, 5, 87, 64, 251, 30, 41, 14, 30, 52, 251, 182, 169, 79, 80, 39, 144, 109, 164, 39, 159, 57, 139, 42, 224, 104, 83, 147, 213, 53, 157, 66, 85, 75, 111, 184, 85, 1, 84, 73, 11, 179, 230, 143, 16, 214, 147, 250, 53, 216, 171, 64, 158, 29, 94, 232, 50, 124, 45, 152, 157, 73, 204, 156, 3, 27, 181, 7, 166, 164, 92, 206, 32, 231, 121, 148, 134, 229, 180, 82, 193, 180, 87, 186, 168, 170, 144, 120, 243, 236, 209, 236, 48, 152, 121, 170, 175, 34, 97, 60, 7, 236, 179, 153, 127, 212, 66, 52, 190, 23, 122, 17, 110, 2, 37, 141, 249, 122, 172, 255, 77, 156, 74, 138, 188, 224, 87, 25, 11, 241, 222, 29, 80, 169, 209, 104, 2, 212, 160, 28, 123, 227, 61, 66, 139, 11, 247, 123, 232, 177, 230, 163, 59, 149, 150, 73, 179, 252, 107, 162, 61, 108, 3, 73, 70, 131, 191, 227, 101, 213, 30, 246, 222, 162, 150, 250, 6, 238, 169, 215, 85, 46, 202, 174, 25, 123, 125, 200, 108, 72, 215, 5, 99, 84, 252, 214, 118, 50, 146, 175, 42, 180, 88, 32, 191, 110, 78, 190, 73, 45, 81, 41, 163, 168, 140, 72, 27, 95, 51, 33, 125, 29, 184, 206, 238, 42, 8, 63, 123, 34, 168, 127, 143, 24, 76, 25, 116, 100, 35, 37, 78, 242, 243, 41, 147, 56, 242, 100, 216, 167, 217, 184, 99, 129, 96, 89, 90, 68, 108, 113, 9, 160, 7, 5, 79, 204, 226, 23, 194, 127, 125, 244, 149, 39, 46, 227, 26, 159, 77, 15, 60, 119, 30, 160, 40, 145, 116, 193, 169, 3, 164, 186, 113, 99, 73, 5, 243, 238, 47, 153, 218, 99, 176, 119, 70, 30, 44, 52, 200, 126, 32, 33, 28, 154, 5, 185, 131, 203, 47, 56, 127, 55, 151, 86, 3, 143, 66, 120, 238, 33, 184, 23, 27, 33, 180, 238, 203, 82, 218, 64, 9, 125, 0, 67, 182, 152, 255, 67, 33, 159, 158, 91, 139, 189, 241, 107, 24, 110, 46, 30, 193, 174, 134, 5, 168, 131, 144, 152, 216, 246, 197, 87, 207, 55, 26, 158, 179, 233, 35, 114, 57, 201, 234, 174, 254, 229, 93, 133, 9, 183, 170, 217, 2, 248, 209, 113, 70, 162, 81, 255, 168, 118, 208, 235, 138, 141, 37, 125, 99, 28, 82, 228, 159, 26, 40, 75, 67, 18, 203, 177, 162, 230, 225, 55, 218, 234, 239, 123, 39, 163, 84, 229, 226, 162, 159, 142, 134, 44, 204, 48, 141, 253, 201, 208, 79, 109, 209, 159, 8, 97, 139, 14, 70, 234, 207, 5, 91, 245, 38, 42, 196, 10, 52, 230, 167, 210, 205, 182, 117, 195, 29, 186, 67, 185, 197, 212, 16, 252, 35, 212, 93, 85, 68, 92, 130, 221, 140, 177, 16, 248, 8, 106, 112, 159, 139, 238, 223, 170, 245, 44, 155, 147, 136, 63, 110, 128, 162, 115, 208, 156, 79, 177, 95, 128, 216, 55, 251, 58, 101, 146, 102, 98, 227, 5, 28, 153, 110, 137, 121, 125, 82, 116, 233, 209, 28, 155, 222, 206, 95, 221, 249, 16, 81, 70, 183, 72, 249, 230, 36, 137, 197, 166, 173, 184, 222, 31, 147, 251, 159, 140, 103, 187, 125, 51, 198, 248, 87, 79, 67, 180, 14, 249, 183, 148, 51, 121, 111, 14, 27, 46, 13, 58, 186, 74, 242, 185, 123, 75, 201, 101, 43, 250, 28, 77, 67, 125, 168, 120, 215, 106, 17, 193, 43, 175, 242, 39, 74, 205, 111, 165, 139, 162, 61, 75, 240, 45, 27, 58, 199, 190, 175, 151, 26, 247, 76, 234, 169, 183, 245, 127, 220, 129, 48, 254, 94, 128, 107, 125, 180, 68, 96, 24, 103, 175, 144, 157, 231, 185, 34, 218, 153, 212, 49, 255, 222, 160, 93, 55, 83, 212, 13, 111, 152, 95, 175, 25, 97, 70, 74, 104, 53, 215, 209, 152, 57, 102, 105, 1, 218, 213, 239, 192, 81, 134, 21, 24, 107, 34, 105, 5, 145, 54, 17, 178, 37, 89, 248, 237, 226, 188, 229, 40, 216, 174, 58, 148, 204, 175, 100, 142, 142, 68, 39, 135, 4, 226, 62, 71, 176, 137, 21, 240, 237, 56, 10, 160, 107, 193, 124, 18, 94, 199, 179, 237, 211, 41, 148, 75, 3, 21, 108, 215, 27, 180, 8, 72, 85, 118, 250, 10, 178, 224, 132, 179, 122, 188, 65, 4, 138, 162, 148, 193, 88, 131, 145, 208, 94, 234, 72, 168, 251, 6, 143, 210, 14, 138, 168, 11, 85, 210, 227, 3, 209, 13, 160, 116, 40, 22, 118, 192, 246, 224, 164, 27, 5, 218, 128, 136, 217, 67, 90, 227, 103, 76, 219, 80, 94, 254, 203, 130, 24, 49, 236, 235, 225, 221, 52, 45, 31, 31, 226, 54, 211, 4, 227, 36, 233, 88, 23, 239, 108, 63, 90, 86, 104, 68, 158, 167, 84, 192, 196, 189, 215, 83, 241, 194, 223, 92, 41, 8, 122, 42, 151, 60, 203, 76, 128, 234, 123, 79, 155, 216, 210, 98, 103, 197, 3, 85, 28, 100, 29, 25, 20, 202, 223, 160, 210, 63, 248, 227, 83, 165, 138, 199, 99, 241, 220, 16, 90, 60, 42, 171, 247, 213, 40, 88, 51, 181, 153, 152, 9, 194, 218, 61, 78, 186, 133, 11, 105, 138, 5, 239, 172, 122, 154, 177, 47, 66, 178, 139, 161, 189, 63, 9, 105, 248, 0, 27, 165, 181, 79, 60, 251, 205, 12, 246, 231, 199, 32, 62, 234, 81, 218, 229, 42, 75, 37, 18, 57, 204, 53, 231, 55, 182, 145, 95, 226, 232, 169, 216, 21, 185, 167, 81, 141, 24, 46, 126, 23, 178, 115, 224, 175, 169, 84, 143, 146, 194, 150, 152, 77, 47, 182, 175, 95, 218, 17, 210, 122, 64, 3, 131, 62, 143, 141, 192, 197, 72, 8, 239, 82, 84, 205, 165, 184, 97, 255, 100, 50, 61, 213, 42, 19, 107, 118, 69, 246, 3, 67, 44, 66, 98, 34, 255, 201, 205, 59, 93, 128, 199, 148, 123, 251, 6, 37, 128, 138, 82, 62, 165, 32, 69, 147, 99, 221, 20, 102, 159, 204, 211, 119, 17, 199, 192, 70, 225, 35, 22, 196, 46, 231, 133, 183, 184, 96, 116, 140, 162, 237, 155, 183, 135, 7, 194, 57, 82, 131, 121, 93, 50, 19, 242, 170, 201, 113, 219, 223, 60, 208, 177, 71, 138, 154, 229, 171, 244, 192, 114, 109, 103, 120, 63, 88, 120, 209, 57, 128, 180, 122, 14, 224, 80, 89, 62, 73, 158, 50, 43, 148, 105, 64, 23, 37, 32, 159, 154, 158, 230, 158, 16, 116, 247, 21, 48, 137, 247, 69, 55, 60, 90, 32, 225, 158, 9, 235, 241, 229, 93, 157, 100, 236, 125, 156, 84, 126, 6, 80, 217, 70, 17, 1, 166, 4, 98, 217, 166, 106, 252, 160, 8, 54, 213, 35, 120, 10, 118, 99, 135, 139, 53, 6, 3, 119, 189, 158, 246, 151, 97, 132, 150, 140, 214, 230, 185, 76, 113, 77, 212, 197, 162, 249, 237, 33, 9, 46, 38, 192, 153, 41, 151, 175, 145, 166, 19, 63, 132, 11, 5, 68, 245, 89, 22, 220, 231, 232, 135, 220, 114, 2, 194, 88, 177, 39, 253, 195, 165, 140, 216, 186, 89, 23, 131, 253, 68, 146, 156, 135, 84, 84, 4, 30, 153, 151, 55, 3, 176, 121, 7, 97, 9, 44, 104, 71, 100, 26, 185, 187, 200, 175, 211, 14, 9, 222, 107, 79, 184, 230, 201, 151, 253, 35, 184, 7, 241, 50, 182, 37, 177, 183, 90, 100, 250, 87, 202, 180, 76, 28, 84, 11, 101, 255, 50, 180, 95, 89, 161, 9, 25, 55, 250, 96, 224, 109, 45, 147, 4, 160, 142, 99, 246, 182, 6, 18, 250, 251, 143, 97, 218, 206, 157, 106, 210, 222, 42, 110, 216, 136, 109, 165, 199, 232, 215, 158, 22, 88, 183, 8, 33, 111, 19, 60, 15, 83, 89, 79, 194, 77, 231, 63, 7, 210, 142, 233, 1, 179, 149, 137, 194, 170, 241, 90, 201, 94, 55, 185, 240, 223, 125, 238, 200, 178, 222, 186, 135, 87, 51, 148, 218, 223, 166, 144, 190, 58, 76, 17, 65, 184, 208, 247, 146, 159, 202, 242, 77, 105, 186, 241, 21, 211, 150, 225, 67, 164, 81, 255, 10, 82, 39, 241, 228, 234, 240, 22, 7, 196, 62, 25, 31, 77, 28, 50, 65, 51, 85, 160, 72, 236, 111, 127, 170, 236, 196, 147, 169, 241, 134, 191, 246, 156, 164, 17, 125, 176, 208, 223, 136, 112, 237, 57, 194, 126, 62, 85, 178, 174, 28, 27, 39, 99, 247, 220, 185, 199, 148, 198, 233, 47, 135, 87, 146, 91, 152, 61, 36, 97, 3, 253, 163, 115, 184, 217, 60, 245, 115, 48, 72, 48, 139, 185, 57, 163, 112, 100, 243, 232, 216, 140, 237, 33, 185, 111, 36, 165, 170, 252, 22, 99, 254, 50, 63, 157, 46, 151, 198, 17, 210, 6, 10, 76, 250, 150, 131, 41, 160, 107, 142, 251, 27, 171, 160, 204, 179, 233, 71, 100, 198, 122, 42, 177, 183, 103, 37, 10, 218, 140, 87, 41, 82, 150, 199, 83, 101, 32, 213, 95, 38, 46, 109, 118, 159, 179, 167, 138, 143, 111, 19, 99, 117, 162, 195, 95, 166, 253, 188, 119, 43, 51, 56, 247, 222, 248, 194, 14, 104, 9, 222, 120, 145, 108, 6, 152, 213, 241, 101, 148, 77, 205, 38, 51, 225, 7, 193, 140, 189, 23, 216, 142, 124, 3, 4, 62, 195, 194, 139, 156, 224, 35, 113, 152, 20, 36, 88, 149, 99, 124, 38, 84, 168, 136, 139, 132, 245, 100, 236, 218, 121, 215, 52, 221, 104, 3, 114, 12, 172, 18, 155, 146, 226, 126, 166, 109, 198, 131, 5, 221, 212, 6, 237, 67, 150, 163, 249, 7, 102, 206, 216, 209, 71, 234, 225, 20, 147, 129, 178, 84, 210, 226, 201, 135, 113, 225, 223, 3, 101, 204, 224, 85, 15, 30, 77, 100, 155, 207, 110, 15, 210, 76, 176, 156, 168, 160, 9, 185, 114, 3, 157, 79, 146, 13, 208, 3, 202, 26, 102, 141, 139, 7, 45, 86, 14, 117, 112, 203, 185, 63, 141, 132, 141, 65, 184, 19, 58, 238, 250, 41, 253, 176, 143, 149, 162, 140, 77, 127, 246, 251, 149, 144, 180, 209, 139, 57, 151, 174, 50, 158, 182, 175, 176, 250, 180, 95, 88, 143, 1, 56, 149, 223, 67, 67, 7, 0, 88, 84, 204, 36, 63, 117, 47, 167, 95, 124, 254, 51, 53, 96, 123, 43, 175, 203, 226, 229, 77, 155, 65, 90, 132, 179, 19, 203, 205, 139, 159, 42, 66, 233, 96, 102, 237, 8, 111, 239, 228, 167, 135, 56, 208, 214, 193, 95, 178, 223, 16, 6, 53, 97, 93, 193, 45, 126, 29, 244, 205, 131, 2, 212, 215, 88, 101, 134, 77, 219, 25, 44, 113, 134, 122, 66, 217, 29, 150, 73, 23, 240, 239, 176, 28, 153, 69, 29, 46, 103, 227, 85, 112, 68, 216, 31, 252, 114, 152, 37, 226, 178, 179, 169, 118, 2, 82, 55, 255, 241, 154, 53, 49, 237, 238, 1, 103, 9, 45, 15, 99, 46, 48, 187, 33, 102, 125, 135, 214, 200, 13, 80, 75, 80, 110, 30, 120, 232, 175, 66, 216, 78, 91, 105, 45, 221, 86, 22, 163, 18, 5, 193, 112, 99, 189, 142, 245, 35, 16, 155, 159, 220, 22, 141, 106, 77, 11, 24, 207, 223, 85, 41, 173, 116, 255, 95, 254, 193, 131, 19, 65, 216, 100, 34, 9, 123, 68, 142, 253, 4, 160, 24, 218, 51, 97, 213, 5, 9, 91, 227, 118, 218, 29, 94, 248, 135, 62, 86, 16, 235, 115, 101, 32, 131, 241, 148, 216, 110, 73, 189, 165, 220, 246, 11, 228, 20, 115, 247, 25, 200, 62, 57, 171, 36, 171, 55, 67, 101, 189, 44, 209, 80, 27, 210, 149, 138, 130, 102, 202, 25, 132, 32, 112, 62, 37, 17, 198, 201, 193, 167, 64, 45, 67, 113, 238, 101, 99, 61, 46, 108, 166, 163, 112, 188, 204, 60, 235, 4, 235, 18, 165, 194, 83, 190, 90, 196, 135, 120, 170, 115, 160, 48, 138, 35, 191, 80, 42, 129, 201, 35, 252, 156, 222, 46, 150, 239, 110, 125, 218, 187, 182, 62, 180, 49, 230, 142, 2, 172, 241, 240, 108, 60, 1, 183, 18, 157, 172, 1, 81, 208, 136, 82, 134, 90, 25, 79, 87, 116, 187, 97, 143, 157, 238, 71, 138, 254, 194, 247, 97, 217, 246, 213, 84, 83, 184, 15, 237, 195, 182, 132, 202, 67, 84, 43, 209, 251, 197, 7, 187, 109, 93, 120, 125, 56, 56, 245, 151, 23, 34, 252, 34, 114, 52, 211, 157, 25, 175, 28, 118, 65, 71, 241, 121, 109, 52, 106, 158, 245, 206, 138, 214, 180, 156, 254, 4, 130, 115, 169, 127, 45, 237, 208, 120, 3, 10, 117, 88, 24, 155, 59, 209, 186, 31, 123, 233, 2, 28, 51, 56, 240, 158, 112, 225, 187, 239, 214, 162, 35, 143, 206, 50, 152, 50, 30, 43, 13, 60, 144, 4, 161, 216, 58, 22, 110, 153, 48, 205, 46, 199, 182, 54, 197, 9, 101, 164, 209, 64, 59, 57, 185, 160, 142, 243, 30, 242, 227, 211, 29, 193, 126, 44, 92, 212, 94, 150, 147, 236, 61, 9, 26, 201, 59, 218, 194, 59, 26, 14, 215, 24, 238, 165, 59, 28, 116, 108, 35, 156, 227, 63, 53, 145, 127, 140, 116, 107, 33, 53, 238, 161, 176, 99, 127, 40, 200, 158, 235, 13, 110, 247, 237, 52, 206, 118, 131, 212, 39, 62, 186, 48, 42, 77, 131, 48, 129, 179, 106, 7, 126, 8, 183, 66, 80, 175, 145, 192, 54, 218, 244, 245, 69, 32, 233, 158, 108, 68, 209, 132, 244, 209, 95, 246, 103, 55, 98, 88, 53, 154, 124, 159, 1, 170, 150, 161, 173, 112, 53, 230, 201, 121, 242, 198, 107, 169, 158, 24, 107, 155, 90, 179, 175, 228, 8, 158, 66, 92, 119, 103, 114, 65, 151, 36, 108, 184, 52, 220, 48, 54, 54, 88, 60, 62, 206, 48, 59, 115, 16, 188, 254, 208, 75, 184, 234, 238, 29, 27, 220, 120, 166, 72, 58, 78, 194, 6, 53, 180, 160, 113, 43, 43, 105, 142, 168, 206, 204, 116, 15, 231, 219, 141, 188, 163, 83, 234, 183, 85, 127, 7, 23, 17, 10, 227, 156, 201, 129, 158, 78, 128, 92, 29, 109, 131, 166, 93, 72, 206, 98, 55, 244, 166, 147, 222, 94, 5, 134, 175, 84, 222, 61, 24, 152, 247, 129, 119, 175, 198, 190, 192, 135, 89, 153, 157, 92, 195, 36, 48, 46, 246, 82, 217, 254, 53, 208, 204, 221, 47, 194, 62, 116, 244, 229, 130, 171, 107, 204, 58, 4, 33, 132, 89, 58, 78, 103, 110, 20, 102, 70, 235, 194, 102, 5, 76, 144, 107, 57, 144, 66, 170, 116, 17, 95, 190, 135, 72, 139, 133, 219, 197, 61, 218, 8, 182, 215, 207, 135, 151, 181, 3, 13, 159, 17, 171, 8, 167, 119, 215, 97, 154, 167, 251, 54, 16, 134, 203, 238, 7, 50, 50, 55, 63, 152, 108, 203, 159, 223, 2, 126, 143, 176, 83, 86, 75, 160, 6, 159, 181, 198, 47, 203, 79, 153, 160, 191, 212, 216, 105, 212, 193, 149, 175, 94, 29, 237, 222, 4, 183, 12, 178, 188, 87, 107, 198, 95, 102, 106, 224, 127, 115, 106, 78, 134, 241, 35, 204, 159, 134, 61, 50, 4, 250, 18, 4, 192, 14, 174, 229, 213, 7, 195, 85, 60, 94, 1, 139, 97, 170, 177, 25, 240, 99, 247, 147, 158, 245, 5, 119, 76, 18, 32, 159, 12, 3, 82, 241, 90, 47, 140, 122, 42, 222, 230, 140, 146, 16, 136, 71, 180, 60, 15, 35, 61, 107, 68, 34, 103, 28, 1, 233, 53, 249, 77, 91, 17, 0, 79, 160, 137, 155, 23, 58, 194, 92, 243, 43, 22, 225, 6, 123, 62, 87, 152, 201, 111, 30, 161, 48, 201, 32, 126, 138, 254, 231, 14, 35, 57, 66, 81, 162, 15, 91, 125, 34, 61, 99, 242, 7, 90, 203, 160, 64, 140, 178, 65, 150, 190, 74, 22, 243, 17, 72, 29, 198, 141, 251, 26, 192, 202, 227, 96, 240, 58, 1, 138, 253, 54, 29, 119, 169, 35, 201, 1, 91, 87, 81, 114, 251, 112, 189, 170, 248, 14, 218, 147, 206, 67, 133, 236, 240, 252, 221, 11, 167, 115, 90, 29, 87, 177, 167, 42, 43, 133, 148, 189, 120, 241, 93, 220, 70, 201, 76, 52, 210, 237, 239, 222, 140, 10, 144, 169, 44, 54, 76, 40, 59, 18, 242, 111, 93, 66, 202, 194, 239, 222, 39, 148, 10, 42, 201, 161, 7, 171, 51, 240, 161, 65, 129, 98, 165, 181, 24, 61, 188, 220, 68, 88, 11, 4, 40, 201, 182, 116, 199, 82, 39, 83, 254, 53, 239, 123, 235, 26, 5, 220, 165, 63, 228, 250, 98, 229, 102, 192, 230, 157, 152, 215, 252, 68, 234, 70, 110, 9, 203, 134, 244, 171, 74, 10, 101, 208, 85, 24, 6, 104, 47, 18, 225, 159, 87, 92, 118, 130, 38, 184, 247, 234, 166, 110, 213, 44, 108, 140, 251, 72, 33, 240, 182, 3, 91, 35, 249, 245, 46, 185, 82, 153, 151, 211, 75, 149, 125, 166, 23, 28, 230, 19, 158, 234, 113, 30, 146, 200, 168, 203, 185, 239, 32, 180, 103, 54, 160, 78, 229, 77, 135, 28, 141, 124, 191, 34, 162, 220, 148, 190, 250, 63, 182, 197, 52, 1, 150, 35, 14, 87, 225, 112, 84, 94, 213, 202, 177, 214, 103, 130, 13, 167, 225, 147, 97, 27, 91, 124, 2, 227, 234, 173, 136, 68, 115, 99, 45, 216, 186, 84, 146, 111, 79, 134, 74, 178, 162, 198, 230, 122, 129, 153, 156, 21, 158, 249, 2, 178, 171, 57, 102, 135, 11, 255, 174, 254, 222, 204, 9, 125, 111, 92, 88, 46, 223, 43, 216, 64, 33, 202, 106, 115, 87, 225, 160, 248, 238, 26, 46, 127, 125, 59, 172, 84, 19, 177, 95, 153, 210, 181, 25, 142, 38, 184, 28, 68, 215, 55, 32, 106, 129, 81, 122, 20, 12, 213, 115, 193, 146, 162, 201, 235, 138, 118, 176, 235, 174, 123, 70, 8, 170, 147, 122, 225, 176, 0, 21, 114, 134, 203, 159, 50, 49, 42, 203, 58, 173, 27, 209, 16, 48, 146, 237, 208, 226, 206, 33, 18, 176, 71, 193, 189, 148, 77, 221, 193, 153, 133, 42, 197, 84, 170, 184, 93, 81, 101, 60, 147, 217, 100, 178, 105, 79, 136, 52, 186, 35, 92, 130, 1, 23, 113, 76, 58, 34, 160, 222, 237, 134, 46, 164, 244, 214, 207, 157, 255, 188, 99, 73, 169, 11, 179, 253, 135, 100, 15, 88, 200, 54, 147, 30, 142, 55, 150, 217, 144, 75, 37, 95, 122, 97, 72, 93, 145, 192, 164, 102, 215, 212, 217, 140, 223, 223, 160, 80, 129, 220, 12, 119, 170, 216, 118, 101, 228, 54, 14, 101, 156, 182, 75, 50, 169, 136, 86, 49, 22, 225, 52, 205, 46, 170, 12, 193, 48, 98, 84, 211, 124, 121, 95, 114, 179, 255, 44, 61, 51, 152, 213, 116, 182, 83, 131, 27, 61, 156, 65, 86, 72, 23, 5, 96, 215, 67, 86, 55, 97, 233, 11, 42, 55, 223, 168, 179, 89, 0, 183, 232, 153, 139, 68, 122, 150, 30, 37, 102, 180, 127, 19, 91, 48, 106, 214, 146, 97, 19, 150, 222, 3, 192, 105, 126, 221, 194, 4, 51, 127, 233, 225, 86, 219, 135, 45, 162, 38, 80, 181, 28, 229, 171, 94, 141, 11, 54, 17, 225, 191, 156, 30, 14, 179, 226, 106, 31, 87, 192, 253, 164, 234, 139, 215, 147, 59, 116, 116, 171, 193, 199, 235, 137, 186, 113, 158, 164, 108, 41, 8, 8, 180, 173, 192, 132, 210, 213, 93, 48, 171, 26, 211, 180, 219, 107, 217, 149, 183, 176, 197, 35, 55, 197, 53, 116, 150, 196, 50, 128, 59, 136, 217, 197, 185, 182, 197, 6, 105, 63, 159, 197, 71, 78, 154, 27, 149, 12, 31, 135, 135, 158, 191, 133, 231, 111, 82, 197, 236, 235, 34, 166, 111, 76, 33, 28, 43, 80, 121, 201, 220, 180, 99, 0, 192, 148, 93, 31, 224, 51, 97, 155, 254, 219, 45, 227, 209, 57, 224, 53, 234, 68, 10, 80, 131, 158, 223, 128, 177, 176, 193, 197, 11, 190, 115, 39, 64, 252, 243, 225, 57, 97, 168, 73, 70, 77, 39, 30, 64, 222, 208, 189, 245, 45, 119, 94, 222, 244, 197, 148, 98, 58, 241, 82, 160, 21, 115, 50, 232, 131, 23, 142, 3, 40, 170, 22, 222, 73, 57, 66, 211, 156, 66, 226, 88, 100, 245, 20, 10, 50, 199, 63, 159, 107, 213, 204, 41, 132, 251, 185, 77, 37, 30, 203, 110, 239, 219, 60, 21, 137, 64, 198, 82, 16, 174, 11, 102, 197, 240, 191, 99, 168, 143, 83, 129, 40, 36, 111, 14, 97, 5, 183, 38, 104, 30, 252, 213, 146, 189, 33, 41, 243, 234, 10, 73, 186, 36, 30, 210, 204, 210, 138, 44, 203, 112, 53, 228, 122, 38, 169, 209, 10, 48, 212, 118, 243, 17, 212, 152, 253, 64, 156, 208, 171, 79, 22, 15, 141, 86, 60, 160, 144, 151, 183, 118, 138, 57, 127, 74, 139, 233, 212, 100, 71, 110, 51, 64, 255, 200, 65, 87, 197, 129, 121, 111, 241, 152, 31, 137, 163, 48, 166, 7, 102, 239, 205, 198, 141, 219, 124, 7, 68, 63, 60, 17, 120, 157, 118, 19, 245, 27, 161, 109, 221, 138, 50, 195, 247, 13, 92, 206, 87, 210, 31, 112, 248, 130, 117, 21, 134, 70, 85, 193, 151, 58, 215, 86, 239, 97, 4, 192, 248, 240, 189, 231, 89, 172, 91, 171, 72, 183, 190, 54, 65, 130, 194, 125, 207, 97, 245, 179, 137, 56, 79, 249, 144, 116, 142, 74, 48, 96, 152, 28, 28, 168, 82, 205, 102, 188, 149, 161, 42, 71, 197, 1, 118, 70, 214, 99, 211, 11, 255, 168, 162, 47, 46, 157, 48, 84, 233, 207, 218, 149, 113, 199, 155, 63, 81, 187, 187, 75, 107, 144, 27, 235, 137, 124, 14, 98, 57, 123, 216, 142, 167, 138, 9, 193, 41, 174, 106, 145, 160, 168, 170, 142, 196, 39, 55, 241, 187, 243, 228, 208, 240, 232, 158, 11, 100, 127, 224, 0, 203, 183, 185, 66, 87, 145, 64, 116, 130, 155, 15, 245, 66, 131, 26, 41, 178, 111, 53, 168, 79, 140, 31, 21, 226, 105, 19, 69, 156, 20, 221, 158, 11, 14, 229, 156, 35, 124, 170, 74, 58, 204, 113, 52, 15, 94, 72, 220, 0, 114, 207, 120, 3, 19, 245, 2, 225, 77, 11, 235, 226, 215, 47, 201, 40, 38, 42, 35, 46, 192, 22, 119, 51, 81, 1, 98, 135, 47, 110, 128, 164, 176, 197, 239, 29, 60, 92, 27, 210, 58, 209, 27, 147, 85, 22, 239, 165, 96, 163, 37, 229, 88, 50, 32, 105, 223, 57, 143, 152, 89, 56, 108, 251, 72, 58, 177, 18, 194, 225, 236, 78, 198, 105, 105, 18, 251, 239, 208, 107, 57, 105, 158, 225, 48, 228, 205, 157, 20, 138, 246, 163, 89, 81, 218, 32, 202, 200, 238, 0, 12, 206, 213, 38, 71, 163, 154, 147, 125, 163, 254, 162, 28, 177, 120, 92, 183, 70, 229, 117, 149, 62, 145, 88, 85, 107, 247, 74, 145, 119, 11, 162, 218, 224, 44, 187, 111, 61, 193, 46, 139, 51, 170, 252, 149, 159, 163, 111, 224, 76, 160, 213, 173, 54, 33, 76, 132, 121, 159, 248, 192, 143, 60, 183, 85, 96, 14, 171, 86, 144, 210, 128, 88, 24, 142, 85, 141, 221, 63, 54, 229, 84, 18, 251, 40, 44, 165, 253, 112, 134, 40, 145, 140, 233, 87, 87, 97, 167, 234, 230, 44, 216, 132, 104, 142, 52, 150, 36, 40, 9, 81, 77, 206, 88, 4, 143, 69, 32, 45, 45, 79, 81, 237, 5, 174, 79, 71, 112, 125, 90, 160, 3, 253, 235, 125, 120, 126, 233, 158, 40, 106, 248, 80, 217, 89, 111, 61, 12, 72, 184, 152, 65, 155, 112, 146, 24, 160, 198, 183, 146, 29, 23, 8, 150, 148, 255, 186, 223, 0, 74, 19, 93, 50, 201, 173, 23, 84, 160, 138, 245, 186, 177, 138, 118, 254, 216, 53, 69, 159, 220, 57, 76, 65, 148, 108, 201, 67, 233, 94, 49, 237, 42, 57, 110, 184, 100, 252, 222, 5, 20, 92, 7, 90, 187, 200, 165, 10, 123, 1, 209, 86, 69, 139, 215, 51, 220, 108, 24, 142, 154, 253, 215, 249, 209, 108, 100, 158, 118, 74, 134, 69, 249, 235, 59, 232, 176, 228, 54, 127, 133, 77, 103, 157, 239, 248, 139, 120, 161, 120, 123, 58, 187, 219, 103, 249, 35, 106, 62, 44, 239, 113, 48, 161, 245, 115, 79, 92, 186, 145, 192, 159, 111, 216, 14, 42, 85, 15, 231, 21, 226, 202, 68, 14, 62, 113, 146, 73, 71, 211, 7, 16, 183, 230, 26, 82, 185, 222, 136, 208, 158, 181, 71, 107, 136, 6, 182, 254, 94, 227, 74, 136, 191, 247, 174, 6, 211, 155, 131, 121, 34, 147, 199, 45, 31, 251, 153, 202, 43, 242, 145, 74, 22, 16, 189, 154, 64, 223, 206, 226, 17, 208, 168, 195, 79, 198, 38, 137, 18, 205, 163, 31, 202, 0, 64, 227, 27, 175, 127, 244, 185, 193, 103, 138, 18, 38, 245, 87, 181, 72, 87, 143, 181, 161, 187, 181, 190, 94, 32, 153, 71, 159, 140, 12, 255, 104, 181, 220, 110, 22, 85, 155, 221, 94, 56, 66, 151, 197, 119, 221, 195, 246, 20, 91, 93, 246, 199, 99, 56, 234, 147, 221, 49, 201, 65, 45, 22, 82, 140, 171, 79, 233, 105, 51, 147, 116, 154, 47, 189, 75, 135, 239, 211, 55, 17, 45, 80, 217, 255, 202, 28, 204, 105, 187, 171, 124, 103, 102, 79, 35, 192, 138, 108, 45, 205, 231, 63, 137, 55, 5, 44, 36, 218, 46, 55, 23, 83, 31, 33, 98, 145, 17, 132, 222, 170, 145, 89, 23, 79, 222, 227, 248, 58, 233, 215, 96, 101, 237, 224, 57, 140, 54, 96, 241, 242, 142, 23, 108, 112, 60, 90, 206, 166, 80, 49, 182, 9, 232, 242, 199, 158, 122, 132, 144, 19, 163, 46, 52, 52, 82, 227, 248, 184, 11, 249, 4, 31, 171, 102, 150, 163, 18, 9, 142, 43, 192, 96, 166, 136, 131, 221, 137, 238, 205, 135, 135, 51, 61, 141, 30, 246, 69, 192, 151, 51, 95, 27, 21, 99, 36, 213, 220, 199, 143, 229, 187, 149, 212, 234, 67, 117, 129, 26, 238, 19, 178, 38, 119, 221, 158, 25, 15, 134, 213, 252, 54, 191, 201, 124, 156, 156, 64, 194, 195, 11, 74, 112, 199, 13, 103, 224, 90, 23, 27, 84, 199, 50, 143, 35, 55, 83, 20, 87, 139, 105, 126, 108, 130, 231, 188, 68, 236, 200, 230, 182, 92, 121, 70, 182, 53, 124, 190, 100, 244, 32, 60, 179, 179, 205, 136, 138, 74, 99, 182, 122, 20, 77, 61, 248, 76, 241, 124, 6, 129, 103, 64, 176, 45, 23, 35, 176, 94, 127, 157, 131, 151, 118, 147, 84, 123, 50, 223, 246, 227, 12, 84, 52, 229, 244, 102, 254, 134, 4, 137, 177, 186, 79, 173, 68, 22, 8, 237, 245, 199, 124, 170, 246, 152, 59, 116, 104, 94, 223, 89, 58, 163, 193, 75, 177, 220, 232, 34, 49, 70, 58, 16, 14, 126, 214, 214, 129, 213, 60, 102, 246, 78, 216, 17, 181, 64, 37, 68, 190, 196, 250, 117, 139, 46, 119, 190, 254, 129, 115, 7, 74, 22, 217, 17, 215, 250, 207, 27, 144, 225, 147, 243, 95, 149, 48, 212, 21, 39, 213, 139, 211, 54, 105, 90, 35, 30, 176, 248, 218, 233, 224, 29, 94, 12, 189, 127, 192, 234, 83, 204, 157, 12, 237, 55, 42, 251, 197, 152, 96, 123, 39, 183, 68, 159, 212, 96, 123, 193, 156, 19, 75, 224, 226, 208, 127, 110, 180, 39, 95, 185, 40, 134, 82, 36, 54, 108, 57, 92, 188, 169, 128, 207, 186, 17, 2, 94, 77, 48, 62, 168, 245, 155, 159, 58, 201, 239, 67, 80, 116, 239, 54, 207, 40, 168, 33, 72, 130, 234, 97, 165, 246, 186, 232, 1, 214, 47, 230, 202, 101, 81, 2, 26, 199, 8, 166, 104, 179, 195, 139, 77, 18, 136, 221, 127, 38, 178, 180, 32, 182, 70, 237, 11, 94, 101, 115, 127, 60, 83, 244, 200, 99, 68, 188, 17, 180, 117, 25, 213, 26, 253, 238, 95, 112, 179, 55, 63, 21, 216, 207, 254, 128, 6, 172, 88, 47, 74, 111, 52, 84, 21, 208, 250, 232, 110, 95, 136, 123, 190, 249, 87, 203, 166, 118, 22, 65, 143, 73, 162, 8, 119, 103, 136, 241, 20, 12, 100, 144, 226, 172, 81, 254, 135, 135, 150, 173, 198, 162, 49, 255, 221, 18, 204, 196, 246, 22, 165, 169, 30, 34, 82, 170, 60, 102, 9, 35, 180, 151, 251, 50, 173, 241, 226, 216, 119, 85, 207, 72, 106, 90, 134, 235, 46, 72, 34, 214, 239, 241, 12, 111, 16, 113, 19, 176, 19, 240, 141, 104, 17, 51, 128, 251, 47, 27, 179, 244, 24, 151, 228, 80, 188, 127, 254, 245, 20, 74, 146, 245, 202, 170, 136, 124, 14, 186, 201, 3, 51, 84, 111, 167, 165, 86, 3, 170, 91, 186, 222, 157, 218, 146, 214, 51, 146, 83, 117, 104, 242, 197, 53, 72, 144, 173, 241, 187, 159, 188, 193, 121, 87, 99, 123, 41, 211, 141, 87, 201, 77, 114, 10, 199, 3, 50, 234, 91, 250, 98, 101, 149, 217, 137, 59, 66, 100, 35, 74, 232, 102, 193, 51, 237, 181, 237, 227, 129, 255, 69, 173, 205, 203, 226, 19, 188, 129, 132, 201, 159, 132, 7, 168, 146, 142, 82, 27, 247, 58, 154, 5, 127, 99, 98, 143, 107, 145, 147, 148, 67, 217, 17, 92, 202, 109, 198, 246, 197, 181, 160, 26, 89, 167, 71, 32, 122, 58, 52, 132, 7, 2, 188, 131, 110, 95, 82, 58, 93, 231, 9, 154, 52, 233, 95, 236, 87, 252, 241, 115, 62, 150, 37, 253, 154, 245, 201, 165, 223, 91, 26, 95, 112, 11, 10, 249, 195, 122, 181, 206, 160, 186, 128, 182, 227, 228, 136, 28, 152, 87, 79, 204, 108, 76, 16, 162, 188, 221, 41, 202, 168, 32, 212, 22, 229, 248, 8, 155, 198, 121, 24, 167, 230, 6, 19, 188, 221, 72, 119, 172, 23, 205, 216, 49, 31, 134, 88, 69, 19, 96, 1, 105, 196, 122, 112, 215, 229, 199, 180, 36, 33, 42, 26, 121, 114, 31, 112, 232, 162, 79, 218, 149, 128, 253, 217, 187, 28, 29, 142, 187, 73, 118, 244, 51, 21, 90, 198, 225, 72, 225, 34, 58, 42, 166, 49, 157, 119, 208, 114, 238, 212, 151, 76, 146, 70, 221, 180, 60, 220, 52, 99, 183, 52, 52, 202, 2, 21, 72, 230, 49, 22, 5, 151, 105, 67, 153, 80, 227, 122, 74, 174, 156, 157, 95, 90, 19, 242, 123, 179, 182, 57, 248, 129, 77, 96, 231, 197, 93, 125, 110, 55, 80, 86, 23, 39, 168, 128, 97, 204, 36, 47, 83, 222, 94, 57, 4, 52, 163, 75, 97, 151, 52, 44, 96, 65, 70, 187, 218, 132, 200, 157, 95, 37, 102, 217, 114, 164, 73, 0, 197, 253, 31, 22, 181, 77, 211, 92, 68, 155, 168, 45, 17, 4, 40, 173, 53, 94, 49, 80, 142, 171, 0, 188, 61, 148, 159, 247, 146, 223, 134, 228, 78, 101, 221, 185, 254, 155, 112, 61, 109, 22, 34, 211, 105, 147, 94, 96, 50, 75, 105, 195, 174, 114, 80, 236, 73, 251, 238, 24, 216, 64, 46, 7, 184, 171, 3, 0, 89, 61, 133, 148, 6, 114, 172, 99, 38, 195, 50, 164, 156, 136, 154, 43, 54, 196, 217, 27, 226, 246, 22, 79, 100, 20, 72, 40, 154, 197, 207, 182, 84, 175, 218, 8, 250, 12, 184, 121, 84, 94, 244, 249, 169, 215, 21, 38, 176, 149, 170, 193, 155, 244, 57, 90, 46, 182, 159, 25, 232, 237, 115, 242, 42, 171, 12, 97, 105, 68, 252, 226, 249, 50, 239, 223, 149, 115, 87, 144, 147, 131, 183, 103, 129, 50, 73, 17, 220, 225, 67, 135, 17, 174, 162, 140, 89, 241, 6, 130, 97, 180, 4, 85, 55, 183, 116, 134, 65, 101, 235, 135, 135, 167, 136, 38, 190, 242, 247, 228, 217, 164, 42, 248, 108, 233, 179, 215, 43, 101, 210, 120, 76, 219, 44, 126, 201, 0, 117, 59, 143, 155, 44, 142, 14, 112, 245, 137, 204, 65, 126, 206, 242, 106, 66, 243, 234, 98, 214, 179, 196, 96, 178, 124, 48, 54, 2, 75, 190, 233, 148, 23, 87, 224, 68, 93, 148, 137, 30, 200, 117, 219, 23, 45, 4, 99, 171, 132, 166, 120, 4, 96, 113, 105, 251, 131, 104, 175, 58, 35, 86, 110, 104, 177, 96, 235, 120, 89, 69, 58, 183, 109, 113, 164, 101, 101, 213, 86, 201, 18, 189, 108, 2, 116, 119, 140, 251, 152, 139, 50, 255, 56, 163, 209, 57, 248], - [105, 10, 204, 16, 254, 3, 56, 185, 29, 220, 24, 86, 18, 153, 170, 195, 138, 96, 207, 146, 52, 234, 27, 88, 191, 144, 53, 151, 62, 231, 93, 185, 44, 186, 138, 160, 208, 145, 3, 72, 191, 206, 127, 18, 5, 118, 178, 190, 50, 36, 13, 154, 188, 243, 137, 31, 82, 138, 169, 215, 196, 4, 29, 138, 116, 118, 140, 104, 199, 126, 227, 172, 74, 45, 200, 105, 227, 228, 156, 129, 166, 97, 47, 211, 71, 24, 128, 146, 11, 104, 97, 166, 144, 168, 154, 196, 115, 15, 64, 107, 188, 4, 48, 214, 6, 238, 227, 65, 27, 21, 162, 144, 88, 240, 0, 154, 103, 97, 7, 145, 94, 168, 235, 241, 63, 178, 152, 92, 50, 48, 216, 52, 198, 183, 127, 143, 184, 121, 146, 193, 253, 247, 156, 155, 181, 136, 0, 62, 251, 7, 41, 214, 75, 166, 249, 80, 44, 103, 205, 240, 255, 218, 108, 103, 36, 242, 108, 7, 49, 151, 169, 23, 116, 16, 223, 141, 129, 5, 250, 209, 15, 134, 227, 119, 18, 56, 152, 182, 45, 79, 202, 77, 173, 222, 35, 148, 204, 29, 64, 100, 225, 153, 132, 75, 39, 225, 150, 130, 205, 216, 130, 162, 119, 77, 137, 147, 222, 175, 224, 115, 116, 231, 205, 48, 139, 179, 146, 64, 6, 211, 254, 181, 50, 73, 248, 243, 223, 65, 172, 175, 186, 15, 3, 55, 169, 149, 112, 60, 54, 58, 219, 216, 75, 86, 113, 201, 21, 94, 208, 92, 152, 93, 192, 61, 160, 76, 17, 74, 207, 116, 178, 74, 42, 116, 75, 85, 188, 90, 196, 165, 83, 167, 93, 1, 198, 114, 57, 135, 73, 154, 187, 255, 176, 238, 120, 107, 31, 222, 72, 135, 223, 235, 5, 219, 20, 189, 116, 55, 177, 214, 148, 122, 200, 98, 2, 21, 229, 246, 68, 44, 20, 46, 180, 58, 218, 39, 97, 163, 11, 209, 171, 208, 247, 242, 192, 88, 181, 134, 236, 64, 255, 167, 40, 42, 73, 158, 35, 67, 169, 117, 8, 102, 241, 136, 82, 144, 127, 164, 132, 205, 237, 180, 137, 20, 82, 66, 59, 65, 245, 168, 77, 62, 59, 138, 203, 116, 240, 175, 69, 247, 78, 204, 243, 210, 73, 201, 197, 163, 130, 226, 162, 199, 113, 30, 205, 22, 26, 26, 93, 180, 142, 5, 150, 31, 117, 48, 119, 236, 28, 124, 45, 37, 62, 213, 86, 69, 59, 29, 116, 107, 202, 22, 208, 184, 35, 20, 204, 94, 85, 163, 18, 152, 203, 125, 149, 96, 126, 26, 163, 78, 154, 248, 45, 99, 104, 185, 165, 115, 129, 190, 235, 252, 97, 163, 186, 254, 26, 189, 223, 45, 214, 113, 34, 186, 3, 155, 84, 41, 161, 37, 183, 89, 227, 181, 233, 203, 34, 116, 78, 26, 149, 241, 122, 153, 243, 25, 57, 49, 62, 14, 95, 104, 36, 134, 66, 90, 176, 13, 61, 118, 238, 119, 146, 248, 206, 132, 4, 46, 64, 196, 108, 118, 224, 108, 45, 181, 233, 34, 95, 86, 181, 163, 76, 115, 198, 193, 42, 5, 87, 202, 27, 111, 5, 95, 92, 160, 107, 143, 99, 238, 234, 112, 73, 221, 25, 76, 119, 90, 198, 122, 232, 39, 169, 216, 226, 199, 93, 192, 138, 192, 245, 190, 83, 244, 54, 61, 205, 83, 102, 103, 58, 107, 185, 134, 223, 125, 83, 253, 142, 101, 104, 223, 50, 241, 242, 76, 193, 170, 141, 248, 253, 0, 131, 95, 73, 10, 197, 250, 180, 216, 134, 212, 33, 168, 80, 95, 154, 252, 38, 86, 246, 16, 130, 70, 157, 229, 201, 75, 219, 209, 146, 64, 131, 188, 101, 22, 202, 33, 17, 0, 135, 105, 83, 133, 72, 39, 75, 141, 182, 203, 7, 238, 55, 100, 174, 120, 246, 246, 35, 150, 103, 63, 154, 194, 58, 142, 129, 167, 209, 1, 87, 194, 84, 131, 60, 8, 163, 222, 109, 151, 210, 178, 210, 61, 213, 214, 155, 170, 64, 252, 64, 28, 33, 174, 95, 108, 38, 40, 201, 42, 168, 113, 200, 161, 239, 60, 6, 96, 131, 112, 32, 170, 93, 241, 15, 253, 145, 31, 185, 70, 98, 78, 246, 19, 49, 7, 118, 86, 175, 216, 166, 133, 218, 4, 8, 238, 153, 46, 160, 254, 247, 142, 119, 102, 227, 28, 166, 27, 37, 198, 185, 246, 57, 251, 147, 157, 156, 254, 61, 234, 14, 231, 40, 28, 71, 50, 218, 225, 35, 115, 8, 23, 46, 107, 176, 138, 211, 175, 155, 136, 18, 13, 135, 96, 82, 193, 238, 227, 166, 14, 144, 7, 148, 35, 72, 186, 242, 195, 59, 249, 203, 229, 137, 31, 157, 135, 201, 244, 176, 176, 54, 194, 74, 100, 89, 216, 123, 27, 232, 53, 99, 237, 234, 66, 127, 75, 48, 159, 242, 154, 98, 214, 161, 127, 246, 145, 132, 196, 196, 82, 87, 97, 109, 39, 59, 57, 91, 67, 127, 85, 18, 245, 191, 44, 235, 228, 61, 120, 69, 118, 27, 130, 149, 217, 34, 173, 52, 16, 37, 81, 48, 1, 186, 21, 173, 135, 146, 148, 62, 89, 122, 141, 72, 35, 48, 178, 219, 215, 154, 28, 233, 254, 141, 90, 200, 88, 54, 18, 215, 32, 13, 20, 246, 152, 191, 203, 172, 48, 90, 224, 160, 179, 134, 65, 206, 254, 60, 177, 14, 117, 120, 10, 151, 71, 60, 3, 214, 110, 218, 78, 33, 67, 66, 140, 77, 52, 138, 27, 126, 172, 169, 168, 125, 222, 161, 79, 40, 83, 180, 12, 146, 178, 0, 73, 210, 204, 97, 11, 232, 27, 39, 201, 48, 201, 62, 217, 94, 255, 172, 212, 246, 76, 147, 80, 55, 192, 115, 181, 81, 11, 154, 245, 235, 145, 59, 112, 251, 182, 74, 55, 102, 11, 245, 140, 93, 226, 180, 134, 184, 240, 115, 165, 17, 161, 185, 232, 92, 50, 65, 9, 141, 129, 251, 239, 252, 181, 88, 1, 222, 106, 110, 184, 31, 132, 236, 113, 58, 180, 78, 216, 210, 216, 11, 35, 111, 89, 192, 60, 65, 145, 124, 150, 77, 174, 67, 17, 193, 253, 1, 193, 71, 236, 21, 166, 242, 174, 115, 203, 165, 246, 54, 170, 56, 91, 175, 242, 0, 139, 174, 209, 102, 176, 195, 80, 113, 62, 151, 126, 149, 129, 100, 96, 12, 76, 156, 247, 72, 149, 165, 94, 210, 66, 92, 104, 67, 118, 55, 154, 230, 133, 161, 169, 233, 235, 188, 34, 106, 36, 237, 27, 159, 110, 169, 226, 209, 130, 131, 86, 100, 125, 187, 235, 6, 232, 245, 121, 224, 45, 239, 173, 64, 35, 63, 25, 212, 154, 54, 190, 3, 248, 43, 69, 245, 232, 246, 228, 2, 25, 23, 239, 248, 23, 61, 176, 122, 249, 142, 57, 239, 37, 237, 187, 153, 183, 48, 224, 207, 14, 179, 48, 195, 128, 176, 175, 48, 85, 180, 195, 115, 145, 207, 121, 53, 83, 183, 146, 36, 216, 9, 146, 207, 191, 207, 205, 95, 250, 84, 130, 70, 52, 60, 229, 155, 56, 7, 69, 144, 247, 167, 162, 11, 32, 65, 6, 118, 69, 60, 203, 102, 29, 119, 137, 228, 46, 237, 42, 37, 133, 161, 138, 89, 189, 86, 51, 39, 154, 86, 61, 57, 131, 176, 84, 23, 238, 28, 62, 186, 212, 18, 27, 213, 207, 183, 70, 138, 31, 214, 112, 40, 209, 28, 93, 94, 204, 59, 185, 242, 20, 11, 237, 220, 129, 177, 226, 236, 114, 162, 97, 192, 237, 104, 210, 182, 126, 210, 64, 62, 190, 42, 25, 61, 21, 122, 180, 237, 6, 153, 211, 224, 152, 93, 131, 195, 199, 58, 80, 86, 206, 62, 138, 25, 121, 85, 72, 149, 26, 141, 182, 81, 214, 224, 55, 165, 108, 186, 201, 78, 239, 46, 102, 166, 15, 97, 235, 177, 210, 117, 116, 60, 191, 176, 226, 139, 38, 194, 131, 68, 48, 222, 241, 156, 56, 67, 200, 232, 143, 80, 120, 176, 120, 80, 63, 220, 147, 80, 160, 18, 100, 47, 21, 215, 191, 137, 219, 80, 204, 154, 22, 25, 226, 57, 108, 94, 219, 103, 153, 22, 107, 184, 59, 141, 93, 185, 19, 236, 63, 32, 85, 233, 182, 169, 149, 107, 195, 138, 139, 178, 34, 239, 72, 35, 165, 148, 248, 250, 179, 232, 105, 76, 255, 55, 171, 86, 147, 101, 119, 167, 141, 67, 183, 174, 177, 212, 170, 62, 98, 10, 212, 196, 37, 115, 11, 143, 254, 10, 84, 74, 131, 117, 219, 6, 50, 30, 150, 208, 128, 76, 32, 72, 129, 150, 129, 223, 107, 225, 221, 238, 151, 143, 0, 245, 92, 90, 26, 58, 220, 11, 5, 40, 135, 63, 3, 19, 198, 243, 118, 58, 88, 142, 162, 121, 13, 14, 24, 32, 85, 106, 230, 169, 244, 17, 205, 111, 62, 35, 123, 163, 59, 216, 7, 238, 82, 30, 43, 255, 161, 137, 177, 246, 100, 51, 214, 189, 198, 225, 71, 96, 62, 196, 11, 136, 216, 129, 144, 254, 5, 162, 208, 201, 94, 28, 174, 56, 125, 11, 116, 201, 252, 69, 79, 202, 81, 210, 106, 119, 206, 82, 231, 154, 8, 251, 208, 201, 230, 82, 211, 110, 175, 177, 230, 135, 170, 115, 3, 151, 216, 42, 236, 176, 35, 19, 103, 207, 66, 29, 56, 225, 1, 56, 200, 36, 203, 123, 174, 231, 198, 11, 131, 186, 181, 109, 247, 180, 123, 55, 244, 61, 90, 110, 235, 63, 106, 133, 161, 220, 163, 15, 165, 8, 248, 18, 167, 65, 29, 89, 155, 136, 206, 184, 172, 30, 197, 83, 131, 156, 249, 36, 54, 148, 181, 175, 51, 18, 149, 166, 190, 207, 192, 63, 138, 144, 117, 124, 45, 106, 204, 149, 222, 59, 126, 242, 24, 247, 29, 226, 207, 30, 109, 17, 119, 238, 112, 63, 147, 0, 201, 249, 242, 179, 54, 34, 203, 83, 45, 40, 38, 108, 32, 250, 155, 218, 188, 54, 3, 16, 207, 129, 232, 190, 133, 199, 115, 247, 74, 219, 139, 203, 226, 85, 121, 1, 113, 39, 239, 130, 62, 232, 142, 2, 83, 56, 175, 169, 170, 203, 140, 155, 227, 36, 150, 168, 36, 102, 220, 12, 99, 59, 207, 230, 173, 229, 162, 115, 206, 28, 233, 185, 143, 250, 183, 94, 126, 21, 182, 215, 63, 214, 91, 21, 197, 173, 4, 88, 201, 18, 64, 120, 74, 238, 126, 201, 242, 117, 44, 42, 185, 50, 81, 25, 15, 181, 148, 22, 242, 242, 8, 220, 50, 25, 0, 90, 77, 117, 13, 112, 124, 170, 212, 138, 158, 84, 92, 71, 7, 207, 133, 106, 61, 45, 159, 95, 161, 166, 98, 204, 14, 201, 37, 21, 50, 211, 89, 31, 185, 189, 22, 94, 149, 56, 142, 126, 0, 251, 76, 229, 182, 145, 225, 86, 25, 84, 108, 104, 26, 181, 7, 37, 191, 240, 38, 104, 184, 107, 191, 124, 11, 228, 211, 132, 14, 85, 237, 46, 91, 252, 63, 109, 162, 26, 157, 107, 203, 97, 251, 110, 136, 187, 213, 69, 127, 99, 181, 41, 48, 69, 45, 151, 90, 139, 76, 118, 196, 23, 7, 45, 111, 50, 191, 255, 164, 80, 113, 226, 255, 64, 55, 93, 116, 211, 35, 232, 131, 227, 60, 34, 177, 64, 139, 230, 34, 254, 193, 27, 233, 173, 253, 133, 158, 94, 41, 163, 96, 88, 155, 136, 206, 252, 43, 135, 155, 12, 248, 175, 52, 146, 101, 61, 132, 78, 157, 61, 77, 108, 252, 200, 57, 202, 67, 38, 76, 74, 28, 61, 108, 225, 157, 15, 230, 161, 252, 101, 242, 133, 12, 106, 115, 113, 116, 197, 144, 151, 173, 202, 145, 9, 221, 158, 229, 113, 22, 35, 55, 235, 201, 226, 88, 153, 221, 28, 156, 184, 31, 132, 252, 110, 169, 253, 145, 78, 116, 133, 73, 202, 40, 194, 179, 4, 197, 188, 218, 168, 121, 46, 107, 124, 163, 174, 184, 231, 145, 177, 137, 246, 122, 4, 93, 10, 182, 18, 106, 245, 156, 28, 236, 27, 128, 212, 105, 33, 222, 188, 130, 193, 185, 139, 136, 200, 115, 252, 121, 45, 112, 190, 148, 165, 126, 96, 143, 46, 218, 3, 109, 133, 22, 85, 192, 63, 33, 77, 199, 34, 29, 114, 61, 96, 241, 69, 248, 180, 63, 196, 139, 132, 136, 128, 9, 67, 221, 51, 245, 214, 146, 128, 103, 1, 27, 136, 17, 203, 68, 230, 103, 141, 74, 213, 179, 154, 232, 99, 183, 91, 91, 135, 183, 188, 89, 213, 99, 92, 100, 218, 184, 63, 189, 168, 214, 75, 105, 221, 163, 221, 14, 138, 206, 240, 201, 145, 115, 151, 228, 132, 251, 79, 159, 221, 13, 252, 40, 207, 250, 134, 130, 162, 136, 158, 0, 61, 23, 186, 20, 188, 38, 145, 32, 12, 231, 168, 117, 224, 169, 95, 171, 227, 15, 190, 53, 48, 218, 70, 29, 208, 194, 103, 199, 143, 196, 87, 197, 192, 226, 208, 143, 192, 128, 132, 170, 82, 175, 81, 26, 191, 4, 191, 185, 4, 72, 156, 242, 182, 46, 216, 197, 188, 242, 213, 154, 251, 42, 249, 0, 82, 80, 116, 142, 104, 157, 116, 99, 118, 222, 83, 12, 200, 112, 133, 96, 101, 78, 121, 86, 39, 25, 44, 15, 174, 185, 164, 193, 0, 247, 46, 79, 83, 49, 2, 224, 214, 27, 226, 35, 213, 175, 80, 41, 72, 71, 40, 199, 35, 49, 100, 41, 166, 200, 19, 74, 136, 39, 74, 167, 141, 112, 32, 246, 154, 223, 126, 126, 183, 226, 169, 119, 251, 95, 219, 121, 247, 74, 227, 15, 77, 231, 166, 234, 196, 39, 176, 116, 159, 65, 30, 31, 149, 148, 143, 138, 223, 147, 9, 119, 88, 203, 48, 195, 14, 57, 181, 70, 110, 243, 201, 174, 228, 205, 104, 86, 0, 218, 57, 140, 74, 171, 166, 7, 176, 230, 142, 27, 233, 165, 4, 215, 53, 140, 167, 192, 223, 238, 100, 148, 209, 103, 70, 208, 93, 109, 167, 229, 151, 124, 64, 209, 28, 33, 103, 186, 194, 140, 202, 63, 76, 119, 30, 164, 4, 143, 111, 152, 143, 238, 4, 165, 104, 248, 207, 103, 100, 74, 135, 154, 71, 215, 125, 168, 214, 162, 55, 206, 105, 68, 205, 142, 9, 212, 201, 97, 51, 234, 215, 44, 59, 200, 103, 4, 19, 9, 115, 203, 178, 31, 18, 214, 44, 151, 69, 73, 63, 136, 103, 98, 112, 190, 22, 110, 170, 25, 43, 15, 58, 25, 20, 177, 66, 66, 251, 113, 133, 162, 1, 5, 3, 22, 126, 105, 23, 121, 187, 5, 204, 65, 204, 125, 179, 154, 52, 204, 247, 167, 82, 8, 74, 149, 149, 67, 248, 164, 210, 111, 193, 222, 161, 66, 238, 121, 247, 214, 50, 55, 1, 97, 210, 23, 131, 39, 163, 91, 105, 76, 4, 180, 40, 166, 64, 167, 56, 132, 25, 83, 115, 89, 120, 196, 38, 32, 32, 180, 109, 89, 220, 157, 184, 70, 148, 111, 203, 107, 162, 64, 236, 92, 95, 208, 227, 122, 198, 155, 39, 20, 37, 19, 140, 234, 82, 237, 116, 87, 191, 44, 115, 156, 93, 201, 126, 175, 171, 26, 2, 29, 195, 179, 142, 184, 85, 144, 197, 51, 245, 221, 169, 127, 230, 148, 180, 50, 92, 197, 103, 53, 229, 30, 105, 85, 125, 216, 66, 224, 8, 229, 91, 98, 239, 180, 178, 202, 128, 112, 118, 233, 186, 200, 122, 244, 147, 112, 102, 179, 180, 115, 109, 17, 28, 172, 40, 197, 239, 140, 177, 211, 112, 14, 150, 67, 35, 243, 249, 189, 45, 34, 175, 40, 37, 66, 157, 86, 130, 232, 211, 110, 210, 241, 85, 19, 170, 166, 205, 8, 253, 225, 22, 128, 215, 125, 20, 16, 137, 66, 61, 101, 22, 231, 139, 15, 21, 203, 107, 117, 210, 165, 69, 107, 200, 9, 150, 150, 51, 251, 227, 16, 162, 132, 59, 50, 40, 151, 127, 117, 202, 133, 39, 132, 34, 99, 112, 33, 53, 248, 232, 112, 18, 12, 13, 55, 86, 91, 109, 219, 170, 112, 201, 17, 155, 146, 145, 245, 102, 20, 183, 77, 200, 141, 62, 95, 75, 211, 23, 46, 101, 18, 62, 7, 94, 44, 250, 184, 236, 38, 242, 219, 72, 159, 236, 202, 95, 20, 152, 190, 82, 112, 139, 158, 192, 121, 14, 70, 46, 13, 235, 87, 79, 160, 22, 113, 181, 211, 18, 194, 1, 9, 33, 173, 182, 6, 33, 232, 13, 21, 163, 69, 199, 32, 103, 208, 108, 112, 96, 110, 181, 47, 200, 110, 32, 66, 40, 230, 153, 34, 57, 115, 53, 201, 34, 140, 63, 165, 47, 40, 81, 70, 6, 225, 6, 219, 60, 237, 208, 127, 153, 92, 81, 68, 180, 84, 201, 210, 114, 181, 120, 243, 101, 26, 121, 234, 20, 200, 235, 172, 108, 179, 190, 173, 82, 99, 250, 96, 246, 149, 8, 212, 227, 193, 107, 208, 237, 63, 114, 169, 36, 238, 217, 172, 127, 2, 179, 116, 18, 237, 191, 42, 18, 45, 119, 30, 143, 93, 206, 17, 203, 163, 104, 67, 5, 136, 76, 148, 39, 76, 155, 164, 78, 34, 163, 243, 138, 19, 252, 68, 129, 233, 36, 125, 133, 210, 80, 145, 97, 120, 141, 64, 208, 251, 63, 195, 74, 43, 247, 154, 227, 166, 43, 201, 248, 168, 183, 49, 166, 58, 255, 105, 206, 124, 162, 116, 195, 61, 61, 127, 50, 176, 62, 206, 39, 175, 39, 26, 57, 194, 10, 15, 223, 150, 254, 84, 141, 204, 60, 186, 43, 52, 60, 208, 236, 2, 112, 18, 26, 164, 229, 96, 29, 168, 142, 141, 246, 250, 133, 146, 60, 72, 47, 109, 255, 234, 3, 66, 160, 203, 60, 18, 252, 152, 123, 71, 54, 186, 5, 225, 71, 25, 240, 58, 67, 136, 142, 148, 33, 149, 215, 89, 196, 56, 174, 82, 98, 26, 133, 4, 91, 121, 144, 194, 106, 173, 51, 98, 3, 219, 131, 107, 217, 47, 92, 19, 117, 160, 48, 14, 219, 48, 81, 30, 144, 146, 217, 30, 116, 96, 167, 125, 245, 132, 52, 36, 126, 19, 191, 30, 178, 53, 90, 82, 147, 210, 163, 6, 120, 208, 141, 194, 76, 12, 120, 141, 25, 145, 156, 229, 135, 67, 226, 178, 162, 33, 225, 215, 132, 181, 252, 62, 163, 210, 50, 6, 125, 185, 13, 174, 181, 103, 2, 47, 87, 121, 29, 120, 231, 106, 34, 109, 241, 50, 236, 24, 35, 195, 237, 245, 18, 149, 81, 36, 199, 81, 254, 59, 103, 234, 84, 163, 146, 63, 42, 203, 83, 182, 0, 43, 133, 49, 161, 52, 240, 245, 8, 94, 175, 164, 50, 27, 55, 96, 35, 23, 211, 70, 66, 57, 183, 233, 245, 113, 108, 200, 87, 187, 157, 99, 173, 103, 48, 23, 148, 48, 149, 194, 217, 160, 36, 114, 76, 98, 207, 67, 134, 184, 173, 230, 2, 42, 237, 4, 130, 207, 26, 50, 65, 125, 246, 11, 245, 9, 145, 142, 43, 48, 134, 25, 209, 123, 161, 58, 148, 111, 148, 155, 213, 255, 232, 33, 46, 74, 16, 211, 253, 14, 64, 32, 78, 240, 31, 186, 19, 175, 244, 189, 107, 129, 121, 255, 6, 40, 20, 49, 173, 142, 134, 9, 170, 230, 128, 89, 59, 126, 212, 71, 207, 175, 180, 77, 163, 151, 58, 173, 87, 168, 89, 100, 215, 178, 238, 9, 168, 216, 153, 175, 83, 16, 18, 104, 101, 112, 115, 249, 90, 204, 209, 217, 108, 60, 235, 168, 33, 161, 208, 81, 185, 78, 66, 166, 86, 198, 144, 20, 56, 35, 208, 46, 177, 129, 143, 83, 248, 186, 35, 216, 143, 99, 11, 217, 141, 85, 157, 125, 193, 206, 52, 60, 102, 48, 229, 142, 8, 100, 111, 154, 64, 196, 221, 159, 161, 186, 95, 241, 134, 213, 116, 154, 119, 35, 27, 19, 64, 223, 97, 175, 181, 24, 31, 73, 33, 1, 60, 181, 232, 163, 212, 99, 115, 49, 101, 4, 34, 39, 182, 50, 174, 245, 0, 61, 228, 160, 148, 74, 252, 129, 245, 145, 38, 106, 183, 99, 170, 18, 45, 198, 49, 212, 205, 93, 2, 252, 84, 18, 93, 129, 187, 15, 123, 68, 83, 35, 13, 188, 230, 104, 156, 94, 60, 67, 232, 63, 232, 99, 16, 32, 169, 47, 177, 239, 121, 12, 170, 173, 71, 98, 190, 243, 81, 157, 161, 22, 0, 101, 159, 43, 61, 189, 176, 113, 33, 42, 229, 111, 1, 236, 164, 14, 120, 116, 33, 182, 219, 245, 212, 206, 82, 193, 173, 162, 71, 6, 115, 137, 67, 210, 11, 193, 9, 92, 95, 33, 74, 61, 211, 193, 39, 113, 91, 245, 192, 246, 15, 220, 30, 135, 69, 226, 173, 231, 32, 146, 31, 124, 111, 219, 188, 179, 138, 53, 8, 61, 243, 43, 244, 175, 106, 221, 55, 128, 224, 27, 232, 11, 150, 75, 214, 166, 200, 126, 11, 50, 207, 198, 38, 120, 174, 85, 39, 247, 211, 237, 212, 28, 46, 136, 114, 139, 140, 248, 110, 172, 126, 126, 20, 88, 43, 227, 74, 67, 88, 227, 178, 94, 31, 131, 77, 219, 94, 165, 206, 99, 150, 242, 135, 8, 186, 206, 226, 27, 237, 147, 181, 239, 182, 236, 80, 68, 219, 249, 160, 135, 134, 91, 242, 231, 155, 55, 125, 228, 230, 215, 248, 36, 119, 5, 17, 7, 105, 203, 95, 171, 123, 34, 9, 216, 231, 99, 50, 154, 160, 6, 112, 201, 33, 26, 14, 44, 197, 149, 53, 55, 143, 22, 39, 248, 105, 143, 7, 235, 91, 15, 185, 58, 19, 107, 20, 139, 39, 30, 18, 54, 58, 171, 140, 215, 227, 91, 9, 73, 253, 178, 35, 144, 243, 234, 88, 207, 241, 147, 206, 12, 136, 231, 247, 151, 163, 179, 84, 64, 209, 133, 180, 165, 187, 58, 184, 78, 246, 13, 53, 46, 174, 44, 184, 112, 126, 237, 133, 63, 154, 131, 225, 138, 162, 28, 240, 203, 50, 40, 170, 146, 33, 6, 136, 56, 77, 133, 10, 94, 140, 71, 109, 117, 7, 131, 209, 234, 210, 123, 51, 141, 47, 46, 210, 81, 254, 134, 133, 253, 72, 75, 12, 35, 112, 85, 108, 52, 110, 165, 23, 125, 56, 29, 80, 59, 221, 219, 202, 155, 186, 232, 110, 213, 235, 104, 178, 223, 204, 50, 147, 169, 135, 238, 205, 19, 188, 142, 226, 82, 212, 247, 167, 189, 220, 62, 82, 167, 165, 33, 113, 108, 93, 108, 141, 28, 89, 43, 6, 200, 35, 228, 229, 116, 145, 215, 152, 112, 92, 14, 186, 3, 59, 222, 138, 157, 188, 18, 51, 63, 168, 7, 180, 229, 82, 245, 109, 110, 67, 120, 242, 158, 85, 122, 252, 172, 30, 129, 101, 247, 40, 191, 21, 22, 82, 207, 30, 144, 64, 22, 89, 164, 146, 176, 195, 207, 252, 106, 142, 225, 24, 149, 128, 40, 110, 147, 63, 96, 112, 251, 224, 33, 209, 125, 69, 135, 139, 111, 107, 55, 243, 35, 185, 232, 178, 51, 202, 87, 196, 71, 132, 74, 246, 184, 210, 251, 91, 121, 70, 253, 69, 121, 69, 217, 87, 247, 62, 235, 12, 130, 220, 117, 121, 93, 4, 94, 105, 134, 36, 164, 194, 193, 209, 249, 226, 60, 144, 16, 218, 85, 4, 224, 124, 85, 158, 6, 58, 53, 92, 115, 179, 238, 107, 97, 126, 16, 149, 203, 91, 215, 163, 180, 155, 21, 233, 241, 68, 147, 98, 238, 132, 129, 2, 11, 243, 47, 29, 179, 229, 194, 87, 24, 69, 196, 43, 126, 189, 160, 166, 205, 151, 99, 183, 39, 237, 250, 8, 252, 214, 76, 245, 219, 63, 174, 107, 102, 228, 54, 182, 188, 174, 117, 193, 72, 53, 126, 90, 219, 22, 207, 76, 132, 24, 55, 29, 52, 235, 19, 1, 44, 166, 37, 235, 131, 180, 250, 160, 249, 78, 30, 132, 6, 89, 73, 132, 113, 213, 127, 35, 235, 145, 93, 167, 62, 58, 197, 164, 31, 169, 218, 143, 156, 38, 56, 253, 51, 102, 41, 166, 116, 166, 166, 196, 152, 208, 110, 19, 57, 34, 48, 219, 217, 56, 87, 49, 129, 106, 150, 31, 205, 67, 225, 253, 226, 209, 152, 197, 252, 31, 141, 162, 91, 47, 115, 72, 24, 144, 138, 138, 78, 234, 89, 206, 160, 197, 104, 136, 101, 208, 225, 84, 142, 60, 154, 25, 64, 82, 104, 242, 179, 152, 255, 128, 112, 108, 73, 52, 131, 19, 216, 57, 58, 136, 77, 148, 54, 28, 119, 243, 14, 230, 100, 180, 250, 26, 54, 224, 39, 124, 234, 150, 7, 32, 125, 55, 234, 157, 248, 222, 75, 217, 16, 186, 211, 183, 107, 165, 38, 122, 173, 139, 69, 213, 226, 192, 62, 10, 88, 253, 219, 175, 227, 2, 204, 137, 117, 168, 128, 123, 149, 159, 58, 177, 40, 161, 255, 184, 180, 113, 135, 47, 95, 11, 103, 153, 74, 116, 209, 169, 244, 103, 167, 192, 44, 223, 183, 190, 194, 143, 163, 216, 236, 28, 153, 127, 66, 241, 248, 162, 68, 219, 34, 254, 108, 233, 6, 188, 126, 170, 133, 2, 209, 58, 237, 155, 227, 21, 97, 182, 222, 65, 68, 249, 174, 150, 216, 180, 183, 60, 82, 252, 97, 105, 28, 201, 30, 196, 79, 8, 23, 34, 187, 103, 33, 62, 59, 224, 149, 100, 63, 26, 10, 123, 176, 91, 140, 145, 182, 127, 54, 44, 2, 30, 101, 44, 100, 139, 188, 238, 77, 231, 5, 200, 168, 60, 104, 122, 23, 151, 201, 30, 160, 161, 198, 226, 20, 176, 142, 162, 38, 142, 36, 123, 168, 114, 166, 82, 187, 86, 211, 3, 106, 173, 142, 57, 213, 37, 150, 250, 224, 225, 230, 253, 94, 10, 34, 93, 13, 58, 35, 149, 188, 245, 107, 10, 207, 69, 248, 235, 169, 167, 78, 101, 116, 254, 28, 177, 23, 165, 169, 149, 42, 15, 50, 118, 222, 168, 242, 35, 211, 160, 139, 199, 116, 82, 196, 211, 192, 140, 83, 35, 90, 120, 161, 199, 177, 22, 162, 138, 57, 9, 91, 48, 44, 167, 248, 67, 188, 37, 81, 174, 80, 207, 114, 218, 198, 102, 233, 24, 21, 99, 197, 49, 115, 251, 248, 63, 147, 80, 117, 163, 30, 69, 232, 155, 66, 98, 141, 178, 100, 21, 85, 144, 77, 246, 172, 54, 157, 134, 101, 161, 147, 77, 105, 71, 121, 99, 178, 65, 225, 66, 197, 38, 93, 205, 120, 160, 234, 12, 173, 240, 58, 241, 84, 221, 40, 177, 147, 119, 130, 46, 157, 75, 240, 8, 105, 104, 144, 157, 137, 147, 46, 121, 143, 100, 52, 59, 178, 15, 30, 239, 188, 169, 154, 240, 136, 216, 168, 100, 206, 10, 183, 135, 222, 126, 86, 189, 109, 45, 31, 15, 86, 63, 163, 219, 253, 105, 154, 102, 26, 160, 239, 205, 16, 58, 173, 205, 246, 170, 159, 130, 105, 139, 138, 44, 144, 191, 207, 54, 122, 181, 225, 34, 23, 240, 87, 117, 161, 193, 191, 109, 251, 115, 23, 117, 12, 186, 110, 161, 54, 121, 8, 66, 233, 149, 84, 236, 183, 177, 252, 187, 83, 73, 209, 89, 83, 141, 255, 215, 193, 227, 153, 0, 73, 252, 118, 246, 109, 35, 156, 205, 225, 99, 128, 159, 32, 53, 213, 228, 248, 169, 43, 161, 239, 168, 90, 68, 191, 162, 41, 194, 222, 121, 156, 113, 46, 125, 220, 69, 241, 10, 248, 13, 83, 219, 210, 30, 246, 75, 147, 104, 242, 231, 4, 145, 167, 128, 208, 90, 136, 127, 96, 208, 109, 40, 58, 190, 248, 212, 80, 240, 184, 116, 26, 24, 202, 207, 243, 230, 173, 129, 163, 243, 173, 154, 149, 196, 212, 228, 36, 14, 177, 98, 153, 55, 168, 183, 222, 63, 69, 191, 14, 137, 124, 56, 21, 71, 79, 223, 238, 170, 84, 4, 220, 42, 252, 161, 63, 67, 161, 72, 66, 255, 24, 69, 14, 76, 140, 249, 169, 200, 103, 89, 165, 159, 128, 21, 158, 85, 171, 39, 40, 159, 76, 192, 185, 67, 162, 87, 239, 184, 165, 73, 156, 255, 134, 224, 184, 28, 225, 72, 192, 94, 1, 156, 142, 158, 193, 185, 140, 20, 36, 79, 86, 81, 30, 26, 251, 171, 102, 75, 170, 135, 254, 180, 174, 4, 115, 223, 71, 8, 24, 3, 47, 216, 42, 128, 80, 156, 10, 41, 251, 56, 12, 162, 195, 148, 251, 221, 206, 171, 116, 191, 134, 63, 99, 215, 101, 49, 129, 137, 229, 149, 135, 164, 177, 132, 85, 201, 69, 0, 224, 86, 20, 115, 55, 28, 79, 4, 153, 43, 102, 24, 29, 47, 92, 152, 183, 202, 158, 72, 155, 62, 232, 135, 107, 3, 205, 235, 41, 89, 133, 78, 0, 134, 213, 103, 103, 19, 201, 203, 246, 91, 240, 253, 26, 97, 211, 11, 111, 175, 4, 205, 6, 155, 175, 154, 255, 160, 104, 182, 174, 68, 181, 222, 232, 190, 75, 74, 68, 11, 20, 191, 186, 80, 160, 25, 65, 72, 187, 19, 49, 7, 52, 226, 169, 148, 90, 170, 133, 43, 123, 51, 8, 44, 10, 134, 115, 45, 214, 52, 30, 122, 5, 82, 86, 165, 108, 215, 211, 185, 82, 213, 115, 131, 11, 130, 57, 78, 5, 226, 164, 203, 104, 70, 51, 202, 104, 203, 135, 18, 228, 206, 166, 184, 71, 159, 223, 53, 101, 146, 92, 168, 163, 7, 100, 186, 143, 32, 69, 162, 102, 182, 114, 102, 97, 47, 203, 52, 59, 255, 226, 110, 159, 1, 46, 120, 78, 95, 37, 132, 106, 224, 7, 117, 152, 242, 123, 45, 238, 93, 119, 73, 139, 217, 160, 146, 87, 14, 212, 189, 195, 235, 109, 130, 186, 128, 192, 101, 65, 128, 75, 75, 84, 3, 174, 116, 32, 188, 105, 180, 32, 189, 187, 109, 33, 73, 157, 183, 36, 44, 40, 241, 225, 131, 172, 190, 26, 138, 191, 136, 66, 39, 238, 71, 48, 222, 175, 185, 152, 159, 53, 132, 89, 126, 7, 170, 254, 130, 130, 155, 175, 234, 187, 248, 121, 177, 121, 112, 170, 110, 54, 150, 66, 66, 23, 199, 34, 15, 41, 114, 187, 67, 131, 150, 218, 60, 128, 12, 75, 61, 159, 73, 231, 222, 191, 143, 159, 22, 118, 199, 24, 234, 107, 129, 209, 100, 143, 237, 61, 147, 27, 43, 112, 56, 97, 46, 84, 89, 194, 157, 100, 147, 197, 127, 10, 171, 166, 107, 5, 156, 48, 220, 247, 237, 201, 14, 190, 127, 10, 0, 30, 79, 150, 47, 195, 215, 233, 255, 44, 137, 169, 179, 5, 123, 151, 126, 128, 241, 119, 52, 174, 238, 227, 11, 143, 111, 180, 140, 19, 121, 155, 64, 192, 187, 37, 140, 133, 157, 217, 3, 28, 92, 34, 14, 236, 182, 168, 8, 13, 149, 47, 108, 76, 196, 24, 30, 165, 231, 54, 34, 56, 190, 10, 136, 11, 249, 122, 168, 22, 107, 104, 54, 156, 36, 202, 137, 99, 103, 114, 176, 61, 96, 185, 147, 17, 234, 122, 121, 134, 133, 109, 159, 117, 98, 95, 234, 214, 47, 42, 246, 109, 178, 215, 90, 152, 128, 251, 16, 141, 167, 239, 161, 123, 184, 140, 164, 117, 37, 94, 2, 221, 206, 151, 194, 7, 193, 188, 11, 185, 255, 200, 198, 57, 202, 138, 23, 228, 153, 211, 108, 219, 44, 216, 37, 96, 242, 177, 11, 87, 253, 192, 62, 89, 136, 53, 112, 66, 195, 199, 110, 54, 236, 32, 54, 237, 59, 29, 38, 126, 229, 98, 34, 232, 166, 46, 149, 66, 247, 18, 191, 246, 131, 23, 63, 123, 125, 5, 145, 60, 242, 249, 174, 62, 71, 169, 112, 69, 118, 224, 126, 187, 157, 177, 240, 216, 202, 8, 56, 185, 156, 191, 85, 169, 243, 36, 51, 231, 23, 199, 72, 21, 248, 50, 116, 57, 86, 12, 88, 131, 192, 28, 80, 172, 82, 237, 249, 221, 50, 138, 206, 88, 69, 47, 165, 167, 212, 209, 16, 94, 91, 189, 121, 209, 55, 215, 221, 252, 207, 44, 23, 184, 235, 244, 212, 67, 113, 15, 60, 174, 23, 133, 184, 113, 209, 9, 129, 116, 185, 157, 100, 90, 45, 189, 68, 101, 179, 138, 253, 84, 131, 160, 34, 50, 249, 1, 0, 64, 253, 177, 63, 47, 253, 55, 197, 107, 111, 13, 199, 89, 198, 91, 90, 223, 10, 234, 30, 88, 146, 108, 134, 214, 57, 248, 115, 180, 28, 199, 68, 182, 31, 7, 15, 97, 239, 26, 95, 184, 247, 76, 202, 29, 191, 38, 137, 206, 21, 174, 94, 149, 242, 22, 89, 57, 48, 240, 28, 195, 93, 77, 87, 111, 222, 43, 50, 241, 107, 20, 193, 141, 170, 33, 35, 25, 88, 103, 59, 31, 160, 132, 184, 29, 136, 78, 61, 156, 108, 32, 62, 198, 86, 0, 21, 129, 237, 37, 212, 252, 213, 3, 236, 52, 48, 69, 169, 155, 116, 136, 15, 41, 126, 243, 115, 247, 129, 199, 213, 29, 1, 144, 21, 165, 103, 95, 208, 75, 115, 233, 175, 230, 83, 44, 132, 74, 11, 144, 194, 222, 60, 179, 76, 48, 43, 231, 131, 100, 221, 164, 204, 192, 75, 215, 55, 73, 75, 113, 94, 167, 134, 67, 199, 130, 73, 26, 165, 93, 118, 138, 210, 18, 111, 220, 124, 147, 44, 218, 143, 193, 69, 249, 31, 241, 27, 66, 180, 83, 245, 13, 208, 94, 253, 42, 70, 170, 12, 29, 88, 25, 196, 81, 111, 100, 120, 3, 96, 25, 11, 253, 214, 144, 246, 181, 55, 251, 0, 225, 194, 151, 123, 169, 53, 88, 158, 123, 60, 108, 139, 173, 170, 40, 17, 64, 51, 57, 41, 105, 17, 90, 252, 16, 129, 238, 118, 250, 210, 113, 75, 137, 45, 238, 211, 35, 14, 127, 243, 193, 250, 6, 230, 129, 54, 64, 38, 143, 98, 144, 188, 226, 55, 119, 29, 59, 49, 235, 51, 201, 201, 160, 9, 36, 75, 208, 84, 111, 10, 4, 252, 219, 197, 184, 39, 201, 99, 188, 28, 45, 174, 180, 135, 66, 94, 63, 158, 214, 107, 251, 93, 168, 14, 52, 132, 33, 21, 195, 148, 245, 44, 23, 85, 22, 196, 170, 111, 44, 148, 138, 239, 162, 221, 123, 234, 91, 112, 36, 26, 243, 22, 223, 35, 164, 165, 176, 32, 55, 26, 218, 42, 130, 136, 54, 114, 126, 167, 134, 242, 183, 6, 121, 104, 113, 89, 232, 216, 61, 215, 248, 64, 216, 250, 55, 23, 221, 157, 224, 161, 166, 42, 122, 3, 7, 15, 168, 218, 36, 214, 215, 245, 148, 5, 13, 84, 116, 16, 127, 241, 22, 95, 5, 134, 237, 52, 124, 36, 105, 102, 28, 195, 191, 85, 105, 46, 162, 88, 51, 218, 72, 71, 217, 131, 56, 121, 16, 124, 249, 245, 160, 30, 187, 11, 9, 30, 64, 119, 231, 76, 102, 236, 107, 17, 77, 234, 97, 255, 149, 18, 241, 109, 45, 178, 196, 151, 196, 198, 46, 66, 222, 115, 147, 137, 10, 136, 89, 69, 157, 205, 246, 2, 29, 233, 53, 126, 25, 117, 239, 244, 127, 126, 28, 53, 31, 42, 181, 79, 212, 134, 9, 100, 219, 98, 7, 85, 9, 78, 227, 184, 166, 200, 187, 186, 30, 98, 129, 76, 82, 217, 24, 61, 114, 20, 54, 128, 208, 174, 138, 51, 43, 20, 211, 134, 92, 188, 97, 221, 156, 9, 255, 75, 30, 105, 215, 105, 188, 230, 93, 93, 23, 4, 150, 141, 90, 226, 248, 209, 59, 65, 123, 181, 199, 246, 102, 1, 43, 62, 143, 38, 20, 215, 209, 160, 211, 210, 230, 227, 1, 103, 249, 83, 226, 128, 43, 169, 121, 182, 106, 176, 10, 137, 129, 247, 230, 168, 70, 153, 199, 171, 78, 117, 10, 55, 116, 83, 128, 237, 79, 235, 189, 20, 154, 31, 126, 138, 121, 123, 28, 128, 242, 72, 178, 149, 100, 129, 134, 67, 160, 31, 38, 239, 237, 72, 80, 144, 192, 4, 65, 95, 94, 25, 57, 246, 205, 105, 248, 98, 213, 13, 91, 190, 122, 81, 193, 192, 18, 46, 36, 90, 222, 128, 92, 125, 73, 232, 33, 16, 47, 38, 117, 206, 12, 162, 58, 78, 105, 1, 44, 86, 63, 137, 59, 229, 106, 250, 67, 16, 32, 1, 255, 236, 176, 84, 147, 5, 156, 225, 40, 122, 237, 195, 253, 179, 115, 16, 178, 54, 153, 217, 130, 182, 93, 69, 88, 210, 7, 163, 175, 234, 190, 233, 16, 63, 130, 192, 29, 223, 229, 162, 172, 250, 243, 48, 121, 235, 19, 175, 72, 48, 64, 187, 17, 142, 122, 100, 149, 121, 41, 236, 245, 246, 105, 129, 41, 253, 194, 162, 69, 168, 190, 235, 187, 188, 16, 49, 246, 187, 9, 243, 74, 145, 254, 50, 91, 84, 255, 83, 169, 255, 143, 225, 153, 121, 65, 116, 173, 139, 177, 114, 182, 228, 159, 183, 16, 147, 214, 10, 41, 68, 255, 203, 182, 168, 33, 166, 78, 76, 171, 54, 10, 192, 22, 94, 31, 75, 35, 142, 175, 194, 240, 214, 147, 255, 12, 119, 8, 79, 112, 194, 225, 105, 38, 92, 90, 29, 104, 235, 250, 216, 252, 69, 171, 148, 104, 7, 165, 180, 208, 221, 155, 181, 217, 92, 215, 194, 82, 48, 156, 187, 249, 230, 205, 153, 202, 244, 149, 237, 180, 26, 49, 193, 188, 235, 74, 121, 127, 98, 57, 254, 196, 250, 204, 110, 251, 135, 194, 104, 230, 174, 211, 105, 90, 17, 33, 128, 195, 145, 60, 64, 39, 102, 95, 133, 91, 42, 210, 30, 69, 29, 188, 247, 57, 215, 197, 192, 184, 54, 105, 38, 7, 220, 166, 176, 146, 174, 146, 146, 99, 100, 237, 220, 193, 220, 3, 185, 229, 64, 56, 180, 206, 139, 16, 150, 0, 187, 106, 97, 231, 243, 33, 220, 165, 35, 30, 207, 31, 102, 125, 115, 167, 170, 87, 196, 112, 204, 187, 53, 126, 155, 162, 179, 192, 116, 32, 139, 208, 126, 225, 229, 189, 81, 206, 107, 252, 217, 200, 155, 17, 32, 16, 60, 40, 101, 129, 107, 146, 74, 186, 39, 201, 137, 23, 175, 180, 79, 66, 197, 163, 88, 33, 45, 7, 44, 61, 230, 211, 22, 116, 225, 134, 231, 200, 198, 134, 168, 216, 195, 110, 153, 253, 8, 159, 232, 137, 46, 67, 63, 117, 28, 144, 148, 181, 228, 174, 145, 95, 209, 137, 155, 233, 205, 7, 205, 172, 175, 91, 153, 48, 157, 54, 72, 13, 142, 121, 206, 71, 122, 22, 106, 155, 0, 56, 3, 230, 234, 226, 199, 66, 223, 111, 31, 187, 125, 251, 197, 110, 166, 148, 83, 120, 16, 212, 243, 45, 63, 205, 99, 225, 191, 196, 47, 251, 190, 197, 148, 74, 226, 155, 37, 231, 55, 67, 17, 72, 219, 214, 163, 173, 124, 33, 77, 50, 204, 108, 220, 11, 194, 75, 215, 18, 108, 192, 217, 246, 184, 223, 206, 173, 204, 163, 169, 240, 165, 52, 227, 200, 243, 175, 11, 200, 73, 230, 218, 159, 125, 190, 0, 205, 113, 111, 10, 63, 77, 194, 100, 131, 46, 31, 7, 21, 171, 166, 72, 128, 60, 172, 134, 21, 105, 139, 88, 93, 50, 163, 244, 52, 131, 187, 70, 113, 157, 74, 200, 249, 174, 139, 102, 52, 242, 137, 34, 229, 168, 132, 201, 216, 150, 177, 7, 177, 115, 44, 73, 123, 239, 0, 167, 34, 202, 127, 229, 223, 175, 178, 122, 125, 118, 255, 101, 21, 191, 62, 72, 44, 139, 198, 158, 48, 243, 76, 33, 251, 2, 222, 89, 224, 167, 87, 172, 174, 172, 186, 242, 162, 129, 225, 137, 250, 52, 164, 111, 195, 28, 194, 192, 24, 248, 56, 82, 231, 38, 99, 128, 17, 8, 89, 255, 189, 193, 13, 110, 159, 127, 35, 37, 49, 124, 240, 146, 74, 226, 141, 42, 143, 144, 208, 243, 151, 16, 39, 142, 74, 82, 2, 141, 131, 53, 130, 186, 113, 70, 159, 156, 166, 25, 135, 126, 114, 201, 63, 12, 239, 165, 252, 127, 220, 187, 248, 236, 116, 140, 87, 109, 169, 130, 192, 77, 158, 153, 151, 180, 5, 128, 30, 36, 118, 41, 114, 39, 77, 70, 172, 13, 48, 231, 58, 29, 145, 228, 86, 148, 56, 109, 180, 52, 101, 183, 88, 110, 171, 21, 113, 223, 90, 122, 133, 190, 40, 59, 156, 247, 107, 233, 81, 47, 199, 118, 195, 227, 228, 145, 192, 52, 65, 223, 233, 195, 32, 5, 80, 3, 224, 174, 204, 254, 252, 2, 165, 219, 101, 137, 121, 234, 100, 251, 188, 63, 48, 60, 42, 188, 224, 118, 148, 42, 157, 58, 98, 214, 183, 35, 154, 98, 3, 56, 88, 80, 19, 57, 255, 248, 86, 17, 65, 106, 142, 204, 103, 70, 4, 253, 230, 181, 76, 149, 143, 182, 225, 126, 217, 152, 162, 242, 161, 61, 131, 62, 115, 192, 91, 89, 71, 184, 17, 130, 119, 81, 62, 116, 52, 30, 240, 0, 145, 158, 196, 25, 60, 187, 111, 204, 252, 132, 29, 18, 162, 228, 17, 242, 143, 249, 146, 244, 3, 73, 152, 109, 94, 203, 145, 215, 29, 190, 206, 74, 174, 2, 112, 75, 180, 205, 200, 232, 175, 55, 162, 254, 214, 237, 204, 99, 166, 148, 211, 65, 23, 35, 167, 168, 25, 6, 186, 195, 235, 254, 169, 106, 1, 255, 149, 247, 139, 183, 53, 154, 3, 121, 109, 42, 244, 5, 75, 53, 32, 110, 175, 87, 54, 190, 8, 191, 169, 217, 20, 73, 146, 83, 11, 51, 72, 226, 224, 4, 112, 38, 88, 113, 141, 80, 100, 126, 170, 34, 130, 40, 196, 1, 199, 122, 33, 243, 62, 242, 192, 7, 8, 87, 29, 141, 238, 105, 154, 68, 9, 208, 95, 116, 67, 168, 119, 170, 50, 154, 6, 197, 9, 100, 39, 101, 135, 67, 15, 227, 210, 8, 75, 49, 22, 64, 111, 77, 46, 108, 81, 52, 66, 184, 152, 229, 80, 194, 183, 17, 145, 190, 254, 94, 108, 197, 80, 164, 169, 195, 127, 152, 42, 206, 112, 177, 132, 134, 74, 122, 180, 228, 192, 23, 111, 219, 127, 91, 51, 63, 148, 58, 9, 55, 205, 111, 76, 203, 220, 164, 163, 5, 107, 224, 55, 113, 15, 25, 253, 34, 5, 152, 183, 82, 88, 39, 186, 31, 128, 103, 128, 188, 18, 212, 191, 77, 95, 141, 75, 37, 0, 6, 134, 113, 113, 4, 171, 182, 56, 206, 232, 148, 244, 40, 71, 191, 73, 159, 158, 16, 165, 112, 4, 89, 230, 137, 54, 199, 30, 164, 109, 14, 46, 128, 184, 114, 50, 110, 179, 30, 222, 241, 143, 86, 162, 91, 155, 225, 213, 27, 68, 112, 56, 104, 101, 170, 10, 83, 132, 12, 64, 89, 50, 99, 145, 50, 183, 202, 58, 135, 149, 113, 34, 40, 232, 60, 77, 56, 76, 189, 143, 247, 198, 2, 95, 124, 18, 130, 225, 149, 232, 189, 180, 244, 234, 169, 206, 162, 142, 133, 31, 23, 107, 231, 53, 28, 212, 29, 234, 50, 84, 197, 235, 138, 8, 236, 151, 32, 200, 250, 172, 228, 11, 183, 98, 170, 94, 215, 244, 112, 159, 71, 132, 76, 240, 123, 172, 186, 211, 137, 52, 143, 155, 92, 107, 50, 214, 18, 222, 150, 18, 141, 218, 217, 69, 50, 199, 210, 35, 212, 145, 79, 93, 139, 238, 63, 230, 197, 86, 246, 183, 216, 80, 181, 69, 29, 17, 235, 172, 127, 244, 224, 147, 61, 254, 160, 190, 250, 65, 213, 153, 79, 164, 252, 233, 236, 197, 151, 203, 184, 68, 192, 38, 71, 204, 5, 180, 61, 250, 70, 85, 222, 69, 101, 190, 38, 58, 89, 28, 32, 65, 165, 229, 64, 41, 149, 28, 179, 114, 25, 20, 105, 228, 179, 181, 160, 165, 59, 239, 158, 24, 237, 160, 3, 182, 14, 125, 21, 35, 51, 240, 174, 49, 15, 110, 137, 220, 66, 188, 179, 7, 80, 84, 53, 208, 241, 204, 68, 117, 78, 189, 141, 209, 12, 252, 93, 151, 174, 4, 203, 220, 162, 222, 148, 55, 138, 117, 119, 177, 190, 149, 151, 90, 194, 122, 179, 254, 217, 199, 144, 203, 161, 78, 18, 247, 178, 144, 170, 71, 101, 51, 211, 27, 37, 77, 207, 212, 139, 228, 86, 230, 5, 90, 185, 140, 143, 233, 149, 243, 153, 107, 242, 230, 238, 169, 15, 89, 148, 158, 17, 202, 96, 164, 27, 194, 156, 186, 55, 76, 149, 246, 17, 78, 193, 163, 165, 219, 93, 245, 117, 164, 189, 211, 85, 17, 22, 48, 224, 238, 178, 143, 112, 158, 198, 191, 170, 25, 113, 41, 206, 83, 199, 96, 155, 198, 132, 223, 202, 68, 233, 248, 18, 3, 90, 22, 99, 89, 38, 21, 46, 8, 199, 230, 109, 196, 43, 224, 186, 77, 54, 54, 69, 255, 16, 22, 125, 53, 217, 45, 122, 144, 210, 178, 208, 102, 114, 29, 195, 158, 36, 238, 128, 245, 35, 212, 215, 172, 109, 161, 67, 185, 159, 151, 194, 63, 242, 35, 51, 101, 30, 178, 200, 151, 149, 218, 188, 202, 170, 161, 210, 110, 204, 62, 18, 39, 195, 223, 149, 177, 164, 64, 99, 45, 7, 101, 87, 224, 47, 247, 37, 31, 49, 150, 20, 135, 247, 156, 50, 120, 18, 42, 5, 123, 91, 110, 215, 45, 119, 29, 124, 47, 216, 242, 219, 191, 1, 115, 163, 234, 10, 168, 179, 149, 26, 50, 11, 248, 202, 252, 155, 115, 143, 12, 198, 232, 228, 47, 74, 92, 47, 142, 58, 142, 163, 39, 184, 160, 154, 111, 240, 156, 17, 8, 60, 63, 254, 25, 222, 154, 174, 131, 69, 219, 56, 188, 200, 31, 37, 0, 116, 169, 170, 197, 94, 72, 108, 107, 126, 101, 62, 153, 54, 241, 105, 79, 178, 148, 4, 1, 164, 72, 12, 231, 237, 209, 180, 128, 77, 208, 206, 61, 147, 235, 19, 104, 76, 198, 209, 203, 33, 217, 38, 40, 202, 15, 180, 195, 72, 141, 200, 111, 223, 111, 51, 115, 179, 102, 82, 142, 201, 77, 5, 143, 39, 65, 212, 131, 75, 146, 45, 69, 244, 109, 68, 22, 0, 0, 222, 193, 221, 65, 189, 3, 16, 179, 57, 222, 119, 181, 42, 246, 76, 234, 133, 203, 140, 7, 117, 227, 96, 214, 126, 13, 87, 195, 179, 244, 50, 154, 157, 184, 68, 226, 62, 221, 232, 75, 103, 165, 116, 39, 37, 157, 248, 81, 178, 249, 154, 24, 157, 88, 120, 135, 64, 174, 7, 67, 241, 236, 151, 207, 119, 158, 45, 222, 37, 74, 196, 49, 197, 42, 140, 11, 221, 148, 226, 69, 44, 155, 11, 128, 96, 244, 185, 103, 43, 12, 241, 85, 241, 145, 218, 213, 205, 117, 238, 243, 105, 59, 166, 1, 53, 194, 225, 188, 235, 103, 164, 53, 243, 97, 163, 30, 213, 0, 146, 198, 233, 173, 158, 87, 1, 233, 78, 102, 168, 12, 23, 79, 17, 66, 236, 88, 182, 2, 201, 75, 201, 134, 44, 99, 81, 31, 163, 203, 80, 216, 143, 38, 101, 7, 159, 208, 143, 132, 136, 248, 134, 214, 145, 200, 58, 238, 103, 69, 74, 232, 119, 131, 210, 17, 135, 242, 158, 187, 95, 88, 218, 243, 135, 173, 61, 97, 142, 5, 42, 207, 95, 2, 152, 160, 171, 141, 64, 221, 138, 148, 162, 116, 195, 161, 191, 37, 246, 178, 31, 242, 202, 182, 133, 183, 222, 108, 114, 74, 62, 44, 138, 163, 138, 224, 115, 11, 100, 160, 27, 28, 105, 145, 100, 239, 157, 184, 111, 134, 167, 76, 4, 129, 216, 141, 168, 159, 25, 61, 64, 42, 190, 224, 8, 190, 176, 15, 105, 163, 49, 209, 6, 7, 107, 228, 75, 237, 27, 215, 226, 155, 128, 92, 230, 90, 128, 200, 13, 29, 249, 63, 53, 155, 189, 6, 38, 125, 238, 92, 84, 7, 209, 160, 115, 152, 78, 24, 91, 252, 216, 186, 205, 110, 134, 56, 122, 183, 231, 194, 29, 167, 21, 94, 23, 247, 252, 48, 76, 20, 65, 135, 232, 32, 155, 205, 129, 172, 47, 205, 175, 118, 4, 123, 101, 25, 38, 242, 85, 165, 112, 90, 112, 177, 61, 120, 188, 38, 44, 21, 158, 173, 7, 122, 74, 247, 60, 130, 250, 110, 168, 235, 92, 39, 229, 198, 204, 102, 62, 253, 222, 253, 77, 104, 106, 158, 162, 155, 58, 162, 57, 223, 15, 153, 204, 32, 241, 210, 130, 158, 239, 159, 41, 100, 41, 172, 46, 108, 12, 95, 178, 55, 76, 123, 40, 91, 185, 153, 212, 148, 84, 59, 46, 40, 4, 162, 108, 244, 226, 185, 235, 65, 81, 103, 29, 71, 177, 175, 179, 135, 254, 141, 190, 162, 70, 93, 56, 16, 36, 153, 158, 79, 229, 98, 59, 249, 37, 174, 38, 56, 51, 49, 230, 230, 54, 70, 38, 32, 199, 174, 69, 197, 54, 234, 156, 177, 14, 113, 251, 145, 100, 117, 139, 193, 150, 109, 144, 108, 91, 155, 63, 3, 118, 253, 251, 7, 242, 146, 59, 193, 85, 74, 67, 214, 220, 212, 68, 215, 154, 29, 13, 129, 29, 63, 243, 106, 159, 100, 110, 198, 27, 5, 168, 194, 23, 148, 211, 237, 122, 119, 37, 104, 107, 126, 251, 230, 152, 78, 218, 39, 156, 36, 16, 152, 131, 79, 50, 172, 178, 98, 144, 221, 237, 224, 16, 211, 160, 111, 125, 65, 171, 183, 237, 137, 93, 96, 3, 143, 205, 59, 55, 206, 238, 106, 181, 157, 97, 114, 85, 131, 84, 57, 100, 74, 69, 97, 219, 200, 134, 103, 77, 129, 144, 132, 175, 85, 44, 89, 198, 104, 194, 66, 215, 37, 39, 216, 38, 156, 27, 161, 23, 122, 224, 138, 64, 130, 143, 67, 107, 52, 134, 152, 96, 19, 69, 72, 200, 89, 79, 104, 46, 30, 227, 69, 45, 59, 82, 104, 158, 128, 140, 66, 238, 55, 55, 47, 100, 7, 93, 147, 6, 102, 206, 208, 88, 161, 110, 115, 76, 53, 126, 9, 94, 90, 56, 50, 60, 13, 198, 6, 113, 242, 45, 115, 160, 108, 80, 63, 51, 79, 39, 234, 18, 95, 231, 208, 244, 129, 81, 91, 45, 104, 182, 51, 31, 173, 119, 99, 122, 70, 120, 233, 68, 72, 70, 53, 191, 223, 115, 75, 196, 51, 221, 238, 174, 122, 5, 104, 109, 178, 187, 96, 106, 248, 241, 234, 99, 234, 173, 40, 242, 194, 230, 126, 69, 0, 77, 241, 181, 243, 65, 29, 20, 2, 29, 95, 161, 225, 31, 20, 134, 79, 135, 229, 29, 232, 81, 19, 248, 186, 104, 2, 2, 24, 50, 16, 34, 111, 159, 116, 45, 212, 93, 254, 97, 210, 70, 37, 166, 211, 46, 10, 121, 123, 106, 227, 183, 5, 43, 154, 100, 22, 225, 78, 157, 219, 251, 194, 122, 183, 100, 25, 14, 88, 139, 198, 80, 172, 253, 102, 146, 164, 221, 50, 184, 236, 160, 204, 140, 103, 38, 103, 83, 61, 37, 164, 51, 63, 143, 20, 5, 109, 112, 163, 1, 121, 193, 178, 13, 141, 127, 149, 64, 239, 66, 249, 1, 160, 190, 228, 49, 115, 30, 157, 198, 38, 236, 57, 233, 247, 139, 96, 117, 251, 85, 117, 213, 131, 181, 148, 57, 226, 7, 136, 185, 119, 51, 208, 165, 190, 211, 74, 88, 61, 169, 80, 112, 28, 199, 142, 140, 184, 132, 239, 10, 9, 44, 174, 162, 246, 219, 27, 74, 54, 206, 176, 30, 232, 209, 116, 81, 186, 95, 102, 27, 34, 134, 212, 70, 48, 252, 167, 226, 251, 199, 37, 29, 5, 186, 43, 242, 255, 10, 163, 113, 19, 133, 207, 205, 202, 64, 20, 86, 2, 67, 206, 63, 14, 46, 98, 212, 192, 99, 111, 197, 155, 171, 242, 161, 248, 95, 148, 226, 145, 137, 238, 197, 112, 141, 210, 142, 61, 138, 188, 190, 160, 238, 148, 193, 248, 170, 150, 8, 232, 134, 190, 111, 166, 133, 166, 16, 45, 210, 167, 208, 184, 67, 189, 156, 36, 67, 29, 31, 32, 131, 214, 42, 124, 104, 116, 242, 246, 93, 220, 100, 90, 14, 91, 220, 77, 87, 254, 218, 168, 217, 245, 118, 119, 6, 237, 183, 115, 194, 234, 250, 132, 168, 91, 191, 238, 53, 7, 71, 54, 234, 143, 227, 107, 197, 6, 206, 215, 93, 150, 28, 9, 2, 46, 242, 200, 139, 48, 58, 10, 162, 65, 26, 187, 81, 74, 62, 63, 196, 107, 226, 114, 231, 64, 226, 160, 96, 185, 82, 131, 222, 238, 33, 171, 182, 145, 64, 11, 56, 191, 145, 33, 6, 13, 165, 32, 5, 39, 233, 74, 191, 160, 189, 234, 99, 199, 102, 76, 227, 249, 161, 95, 196, 47, 19, 115, 175, 131, 78, 175, 11, 17, 125, 105, 122, 14, 37, 128, 20, 187, 236, 190, 139, 129, 171, 52, 218, 54, 88, 56, 177, 184, 73, 165, 224, 206, 70, 53, 231, 78, 96, 176, 52, 254, 108, 41, 116, 17, 8, 90, 98, 109, 172, 2, 242, 2, 100, 46, 115, 199, 239, 31, 25, 165, 31, 220, 216, 73, 126, 107, 45, 9, 10, 172, 233, 80, 62, 144, 225, 34, 51, 176, 200, 197, 223, 163, 213, 111, 147, 167, 137, 223, 137, 54, 65, 96, 139, 100, 108, 63, 113, 48, 52, 248, 172, 57, 104, 243, 169, 240, 239, 37, 137, 210, 152, 204, 89, 149, 55, 188, 177, 212, 94, 7, 173, 204, 60, 234, 123, 151, 101, 141, 68, 3, 119, 213, 241, 55, 118, 73, 163, 248, 66, 146, 71, 54, 139, 226, 91, 205, 128, 190, 23, 179, 75, 46, 238, 118, 161, 24, 93, 132, 185, 112, 103, 159, 198, 84, 69, 72, 199, 24, 145, 234, 218, 152, 87, 21, 15, 246, 54, 126, 182, 131, 118, 232, 136, 60, 128, 232, 238, 187, 172, 118, 49, 212, 2, 195, 189, 107, 170, 146, 114, 133, 224, 88, 96, 96, 76, 179, 158, 163, 229, 24, 241, 151, 49, 120, 5, 201, 221, 173, 100, 167, 197, 238, 77, 99, 3, 221, 252, 136, 48, 204, 66, 212, 221, 150, 187, 93, 134, 255, 165, 153, 190, 86, 8, 200, 119, 151, 88, 254, 230, 162, 105, 42, 225, 65, 212, 15, 228, 111, 152, 84, 6, 160, 104, 208, 24, 88, 35, 54, 131, 108, 157, 153, 223, 214, 106, 71, 107, 117, 118, 157, 19, 61, 21, 167, 38, 249, 180, 76, 79, 44, 15, 57, 98, 144, 123, 68, 180, 180, 243, 113, 190, 161, 116, 236, 5, 38, 26, 252, 164, 135, 137, 190, 155, 40, 232, 252, 51, 109, 87, 89, 121, 130, 179, 168, 116, 23, 19, 12, 144, 39, 197, 6, 206, 66, 85, 181, 34, 60, 177, 157, 78, 179, 229, 183, 215, 191, 118, 140, 130, 250, 162, 133, 27, 65, 236, 71, 64, 63, 105, 200, 102, 103, 69, 136, 98, 71, 208, 200, 254, 64, 163, 40, 198, 44, 44, 18, 72, 36, 177, 183, 225, 167, 2, 132, 87, 13, 244, 9, 127, 64, 186, 212, 92, 146, 221, 57, 111, 114, 146, 125, 88, 209, 148, 170, 149, 58, 59, 187, 147, 172, 42, 89, 189, 131, 72, 109, 223, 58, 149, 199, 66, 155, 218, 187, 247, 47, 147, 40, 60, 112, 5, 164, 63, 69, 193, 119, 91, 151, 54, 248, 159, 126, 4, 49, 162, 238, 81, 132, 82, 29, 112, 215, 103, 247, 235, 104, 204, 213, 51, 185, 24, 52, 227, 236, 154, 99, 216, 26, 77, 240, 234, 203, 180, 109, 204, 185, 25, 180, 66, 173, 115, 89, 127, 194, 111, 184, 19, 249, 126, 111, 112, 254, 50, 163, 70, 177, 242, 170, 8, 75, 135, 6, 222, 75, 7, 149, 253, 32, 190, 179, 241, 216, 13, 1, 124, 251, 152, 238, 35, 202, 90, 216, 30, 75, 126, 12, 32, 71, 142, 67, 4, 33, 139, 26, 146, 131, 242, 167, 80, 244, 53, 39, 42, 121, 141, 124, 64, 88, 148, 64, 39, 29, 36, 80, 116, 134, 67, 24, 77, 87, 97, 231, 184, 42, 19, 147, 239, 45, 83, 209, 205, 13, 115, 194, 40, 71, 47, 186, 26, 201, 100, 218, 80, 164, 81, 211, 236, 163, 200, 170, 30, 124, 193, 19, 200, 173, 117, 47, 2, 194, 239, 142, 171, 163, 37, 221, 180, 161, 210, 212, 135, 233, 22, 73, 130, 174, 147, 244, 100, 153, 146, 211, 130, 235, 125, 138, 199, 167, 72, 27, 154, 185, 241, 44, 124, 248, 234, 82, 69, 221, 35, 216, 135, 191, 148, 65, 156, 118, 98, 41, 8, 115, 100, 211, 37, 219, 33, 141, 74, 129, 136, 23, 93, 211, 88, 40, 33, 3, 244, 202, 174, 180, 22, 42, 228, 222, 241, 246, 67, 196, 63, 131, 5, 145, 50, 60, 58, 158, 89, 184, 153, 8, 180, 190, 231, 156, 168, 146, 3, 30, 245, 173, 25, 199, 38, 154, 188, 35, 116, 137, 142, 50, 91, 65, 228, 240, 37, 111, 58, 32, 69, 28, 84, 43, 112, 224, 210, 123, 238, 15, 237, 78, 175, 118, 94, 157, 161, 10, 238, 146, 8, 81, 80, 222, 212, 228, 63, 37, 68, 221, 232, 242, 184, 17, 197, 141, 74, 23, 140, 194, 217, 194, 146, 83, 216, 25, 65, 146, 167, 68, 183, 8, 93, 29, 232, 111, 130, 54, 228, 28, 133, 92, 233, 83, 170, 15, 6, 203, 150, 64, 121, 149, 215, 95, 10, 131, 52, 105, 247, 0, 118, 113, 86, 68, 14, 168, 75, 60, 168, 155, 45, 162, 236, 39, 241, 64, 196, 228, 95, 176, 86, 100, 152, 112, 54, 37, 129, 47, 178, 180, 224, 91, 49, 41, 26, 57, 213, 72, 145, 192, 25, 129, 214, 133, 19, 87, 2, 52, 77, 44, 210, 126, 116, 28, 12, 57, 96, 17, 102, 216, 109, 178, 146, 16, 186, 133, 119, 29, 247, 238, 214, 227, 198, 32, 12, 57, 8, 155, 175, 19, 63, 18, 13, 179, 164, 180, 251, 248, 171, 159, 187, 27, 152, 195, 213, 58, 96, 43, 150, 239, 31, 79, 215, 211, 73, 140, 245, 36, 225, 47, 160, 214, 118, 86, 177, 135, 249, 185, 162, 57, 117, 181, 31, 254, 79, 66, 100, 100, 209, 155, 120, 5, 63, 51, 242, 211, 232, 93, 145, 251, 4, 238, 234, 54, 45, 248, 207, 242, 83, 172, 108, 161, 45, 116, 141, 89, 141, 101, 196, 84, 45, 130, 166, 240, 193, 149, 210, 70, 144, 94, 169, 186, 123, 196, 49, 84, 18, 125, 63, 95, 51, 246, 181, 40, 77, 244, 223, 57, 33, 43, 29, 140, 21, 218, 19, 48, 182, 61, 74, 138, 170, 214, 8, 90, 182, 54, 234, 36, 188, 232, 91, 142, 47, 42, 81, 73, 210, 115, 119, 4, 245, 213, 104, 221, 219, 51, 246, 77, 182, 122, 28, 81, 195, 53, 131, 248, 132, 239, 176, 85, 203, 184, 176, 69, 217, 207, 197, 214, 157, 246, 212, 80, 100, 61, 49, 104, 70, 14, 23, 50, 245, 123, 26, 51, 235, 123, 77, 20, 179, 20, 85, 33, 124, 222, 143, 74, 137, 77, 129, 180, 127, 178, 6, 39, 55, 236, 160, 75, 39, 204] - ], - "segmentSize": null - }, - { - "encrypted": [ - [10, 2, 221, 232, 213] - ], - "iv": [234, 243, 221, 102, 188, 160, 245, 24, 151, 245, 149, 158, 46, 133, 177, 179], - "key": [78, 86, 20, 211, 131, 56, 37, 48, 20, 138, 199, 193, 232, 249, 158, 48], - "modeOfOperation": "cfb", - "plaintext": [ - [192, 24, 26, 143, 162] - ], - "segmentSize": 1 - }, - { - "encrypted": [ - [44, 114, 205, 175, 42, 233, 170, 197, 16, 65], - [119, 226, 142, 13, 88, 205, 110, 143, 157, 175] - ], - "iv": [36, 103, 47, 177, 19, 198, 110, 111, 22, 218, 248, 81, 37, 103, 246, 137], - "key": [255, 21, 194, 207, 0, 91, 247, 241, 23, 5, 14, 63, 157, 182, 39, 160], - "modeOfOperation": "cfb", - "plaintext": [ - [105, 183, 37, 78, 54, 238, 15, 45, 58, 18], - [125, 200, 239, 127, 157, 204, 185, 147, 35, 139] - ], - "segmentSize": 2 - }, - { - "encrypted": [ - [139, 167, 181, 230, 242, 32, 91, 3, 80, 226, 203, 235, 33, 45, 58], - [211, 117, 40, 211, 233, 59, 216, 135, 255, 124, 207, 243, 112, 119, 238], - [121, 120, 201, 22, 16, 241, 34, 175, 105, 220, 159, 216, 31, 32, 7] - ], - "iv": [19, 52, 134, 44, 111, 50, 100, 155, 128, 139, 229, 250, 184, 108, 42, 157], - "key": [159, 236, 88, 63, 198, 98, 160, 134, 113, 165, 83, 139, 1, 186, 32, 217], - "modeOfOperation": "cfb", - "plaintext": [ - [249, 208, 52, 6, 172, 237, 121, 123, 59, 20, 99, 1, 140, 13, 129], - [131, 17, 90, 0, 213, 209, 72, 248, 120, 133, 30, 165, 84, 0, 2], - [112, 94, 234, 234, 119, 7, 213, 250, 55, 203, 238, 2, 158, 51, 60] - ], - "segmentSize": 3 - }, - { - "encrypted": [ - [34, 95, 165, 68, 191, 185, 49, 180, 202, 99, 31, 39, 57, 166, 228, 47, 160, 220, 105, 24], - [96, 241, 21, 6, 204, 207, 215, 125, 53, 73, 221, 121, 5, 30, 230, 192, 194, 254, 137, 197], - [76, 143, 247, 252, 110, 58, 64, 175, 78, 24, 143, 116, 227, 136, 170, 168, 91, 242, 42, 69], - [222, 206, 34, 45, 117, 31, 67, 139, 58, 58, 185, 173, 10, 41, 185, 52, 112, 74, 131, 205] - ], - "iv": [32, 2, 176, 109, 167, 57, 123, 142, 135, 155, 180, 151, 248, 159, 186, 76], - "key": [95, 43, 106, 13, 149, 179, 19, 15, 195, 147, 252, 129, 71, 85, 126, 55], - "modeOfOperation": "cfb", - "plaintext": [ - [80, 176, 49, 151, 119, 128, 171, 76, 234, 37, 101, 225, 164, 47, 88, 163, 199, 196, 243, 13], - [53, 246, 236, 7, 10, 159, 210, 70, 82, 207, 76, 94, 26, 208, 147, 76, 49, 57, 197, 11], - [211, 21, 174, 145, 251, 98, 65, 98, 84, 123, 131, 92, 106, 115, 31, 253, 135, 50, 70, 162], - [151, 7, 240, 221, 148, 73, 46, 104, 192, 77, 147, 88, 2, 194, 18, 5, 164, 213, 220, 13] - ], - "segmentSize": 4 - }, - { - "encrypted": [ - [242, 141, 31, 240, 157, 155, 33, 113, 239, 55, 220, 117, 175, 205, 172, 47, 112, 254, 62, 7, 207, 180, 134, 149, 152], - [224, 109, 150, 162, 94, 161, 93, 159, 39, 118, 39, 152, 250, 188, 39, 142, 78, 68, 5, 8, 190, 190, 152, 248, 238], - [151, 128, 232, 219, 174, 24, 139, 207, 153, 226, 103, 85, 165, 39, 255, 90, 178, 61, 67, 218, 200, 182, 24, 180, 228], - [49, 114, 133, 10, 236, 70, 35, 76, 243, 112, 143, 122, 220, 194, 170, 182, 212, 38, 36, 72, 53, 227, 227, 179, 162], - [241, 32, 51, 7, 78, 237, 15, 221, 82, 217, 180, 173, 35, 201, 228, 154, 133, 55, 86, 162, 166, 29, 10, 127, 245] - ], - "iv": [101, 4, 155, 140, 37, 167, 54, 13, 159, 238, 168, 30, 152, 243, 183, 124], - "key": [138, 40, 60, 243, 149, 5, 182, 255, 250, 209, 153, 118, 119, 227, 240, 195], - "modeOfOperation": "cfb", - "plaintext": [ - [231, 146, 221, 123, 75, 77, 71, 16, 169, 80, 233, 160, 46, 49, 188, 143, 164, 208, 173, 163, 199, 74, 39, 206, 110], - [248, 215, 140, 22, 184, 142, 46, 147, 226, 93, 16, 130, 169, 223, 73, 117, 171, 91, 24, 75, 100, 240, 102, 197, 178], - [109, 11, 25, 130, 123, 9, 62, 199, 155, 42, 220, 243, 238, 221, 126, 213, 34, 74, 134, 223, 132, 217, 192, 92, 87], - [41, 199, 39, 128, 21, 89, 254, 72, 6, 127, 101, 28, 1, 156, 7, 169, 120, 139, 235, 166, 56, 30, 64, 87, 186], - [220, 107, 240, 97, 91, 181, 134, 170, 46, 67, 106, 7, 156, 192, 148, 130, 129, 73, 41, 96, 171, 148, 226, 215, 99] - ], - "segmentSize": 5 - }, - { - "encrypted": [ - [71, 0, 93, 40, 63, 80, 127, 193, 83, 134, 10, 251, 102, 68, 141, 251, 28, 200, 117, 216, 137, 159, 3, 54, 68, 218, 129, 48, 218, 228], - [52, 207, 103, 204, 227, 114, 212, 214, 196, 92, 171, 186, 251, 177, 173, 39, 180, 123, 172, 207, 98, 56, 26, 128, 85, 164, 248, 89, 233, 166], - [38, 150, 63, 169, 20, 129, 251, 249, 110, 138, 130, 89, 104, 12, 239, 128, 171, 109, 73, 207, 206, 213, 140, 48, 138, 239, 49, 217, 178, 247], - [177, 50, 26, 3, 200, 223, 64, 242, 86, 33, 161, 137, 182, 103, 31, 247, 32, 182, 176, 0, 82, 204, 243, 223, 109, 109, 100, 86, 31, 223], - [212, 154, 251, 104, 168, 188, 144, 201, 59, 131, 99, 129, 253, 208, 17, 211, 99, 248, 41, 185, 140, 250, 135, 0, 117, 152, 184, 168, 28, 160], - [52, 100, 15, 171, 229, 148, 76, 252, 105, 194, 86, 116, 177, 62, 10, 125, 61, 39, 251, 137, 201, 168, 253, 64, 11, 80, 136, 20, 91, 42] - ], - "iv": [37, 238, 152, 185, 129, 245, 245, 196, 62, 242, 105, 233, 214, 135, 114, 94], - "key": [75, 86, 25, 233, 33, 23, 63, 169, 83, 98, 137, 227, 67, 226, 132, 26], - "modeOfOperation": "cfb", - "plaintext": [ - [116, 210, 117, 91, 191, 39, 122, 129, 115, 237, 22, 215, 209, 166, 211, 143, 20, 78, 113, 43, 86, 201, 67, 132, 164, 13, 193, 4, 77, 79], - [240, 102, 141, 201, 0, 45, 68, 154, 150, 60, 149, 92, 191, 152, 141, 92, 236, 79, 184, 123, 70, 233, 104, 248, 241, 19, 134, 201, 50, 121], - [152, 196, 160, 243, 154, 77, 209, 147, 220, 185, 137, 248, 41, 37, 232, 13, 95, 38, 186, 164, 95, 217, 14, 214, 133, 15, 102, 133, 240, 126], - [107, 36, 90, 54, 225, 58, 110, 41, 92, 25, 161, 221, 24, 98, 33, 231, 199, 70, 139, 36, 16, 15, 25, 232, 230, 21, 127, 154, 88, 19], - [195, 134, 20, 29, 102, 115, 247, 247, 197, 156, 101, 6, 36, 30, 164, 238, 163, 181, 239, 70, 152, 60, 84, 130, 53, 81, 98, 177, 19, 92], - [20, 232, 176, 166, 5, 233, 31, 118, 71, 88, 227, 174, 224, 117, 3, 227, 8, 200, 253, 119, 214, 255, 158, 42, 13, 43, 44, 76, 25, 44] - ], - "segmentSize": 6 - }, - { - "encrypted": [ - [144, 1, 184, 245, 21, 228, 47, 203, 99, 160, 11, 151, 119, 54, 224, 4, 115, 93, 43, 70, 116, 19, 115, 68, 145, 119, 22, 63, 28, 167, 116, 197, 237, 39, 242], - [192, 147, 108, 0, 177, 48, 229, 86, 216, 171, 10, 224, 154, 81, 69, 179, 16, 173, 218, 255, 10, 64, 87, 59, 64, 205, 160, 28, 92, 101, 192, 50, 40, 230, 137], - [165, 108, 110, 39, 218, 18, 143, 157, 62, 45, 230, 25, 207, 2, 234, 0, 226, 226, 210, 164, 169, 249, 102, 108, 113, 204, 60, 69, 39, 39, 128, 227, 228, 17, 169], - [58, 69, 231, 103, 57, 239, 134, 231, 173, 155, 19, 151, 76, 227, 239, 22, 190, 233, 141, 142, 191, 233, 198, 78, 58, 95, 152, 224, 137, 217, 228, 77, 1, 188, 67], - [192, 81, 233, 77, 110, 225, 205, 135, 206, 152, 28, 96, 9, 11, 239, 2, 21, 61, 175, 80, 113, 22, 235, 155, 197, 222, 192, 165, 207, 130, 59, 171, 210, 112, 75], - [210, 174, 228, 182, 216, 227, 25, 225, 248, 35, 114, 224, 43, 249, 82, 238, 128, 158, 223, 148, 164, 197, 50, 101, 4, 187, 229, 44, 230, 32, 9, 36, 142, 217, 104], - [55, 235, 95, 73, 229, 159, 189, 159, 178, 255, 177, 253, 72, 219, 177, 0, 35, 166, 29, 201, 107, 124, 55, 169, 79, 236, 114, 234, 23, 104, 20, 170, 29, 198, 138] - ], - "iv": [187, 204, 247, 158, 135, 194, 247, 120, 120, 106, 60, 2, 70, 235, 60, 182], - "key": [53, 13, 109, 167, 74, 44, 8, 37, 154, 67, 180, 16, 166, 160, 146, 121], - "modeOfOperation": "cfb", - "plaintext": [ - [104, 109, 143, 83, 101, 219, 113, 108, 20, 175, 182, 12, 117, 206, 221, 54, 250, 191, 254, 131, 136, 160, 95, 201, 198, 77, 170, 213, 147, 153, 238, 10, 173, 158, 248], - [236, 128, 52, 172, 88, 177, 22, 179, 129, 59, 156, 219, 30, 108, 249, 251, 99, 38, 55, 102, 19, 26, 187, 142, 13, 30, 182, 63, 226, 143, 33, 127, 185, 150, 213], - [44, 54, 174, 138, 140, 123, 91, 111, 107, 83, 59, 104, 93, 187, 148, 82, 120, 76, 14, 110, 124, 190, 17, 7, 108, 203, 39, 221, 143, 49, 214, 151, 112, 203, 8], - [240, 66, 88, 86, 172, 28, 113, 115, 188, 80, 41, 196, 154, 174, 1, 129, 121, 191, 32, 182, 149, 88, 4, 225, 38, 26, 169, 6, 92, 145, 188, 148, 116, 133, 99], - [240, 136, 99, 198, 171, 117, 213, 215, 21, 104, 214, 37, 140, 157, 52, 138, 201, 124, 208, 197, 164, 187, 161, 127, 17, 254, 132, 174, 98, 126, 191, 71, 141, 102, 223], - [158, 51, 15, 31, 40, 133, 106, 4, 94, 38, 115, 122, 192, 123, 109, 4, 16, 0, 143, 183, 197, 10, 111, 55, 209, 73, 12, 52, 13, 114, 216, 221, 222, 191, 113], - [251, 12, 0, 6, 125, 174, 86, 92, 137, 24, 50, 166, 117, 212, 54, 195, 102, 44, 81, 253, 184, 190, 211, 227, 38, 0, 172, 6, 188, 154, 64, 26, 20, 255, 129] - ], - "segmentSize": 7 - }, - { - "encrypted": [ - [222, 135, 232, 208, 210] - ], - "iv": [123, 32, 32, 30, 62, 144, 226, 88, 63, 216, 253, 103, 54, 103, 27, 98], - "key": [113, 86, 136, 7, 119, 64, 171, 103, 138, 57, 158, 199, 11, 111, 206, 102, 144, 181, 142, 174, 46, 183, 177, 44], - "modeOfOperation": "cfb", - "plaintext": [ - [126, 3, 225, 41, 235] - ], - "segmentSize": 1 - }, - { - "encrypted": [ - [249, 124, 111, 195, 101, 212, 190, 0, 255, 9], - [198, 234, 250, 103, 28, 38, 112, 112, 234, 114] - ], - "iv": [24, 177, 158, 35, 8, 225, 253, 210, 91, 218, 41, 184, 57, 120, 37, 151], - "key": [97, 144, 186, 130, 185, 176, 170, 164, 82, 78, 223, 110, 45, 176, 16, 20, 193, 240, 78, 25, 17, 136, 139, 176], - "modeOfOperation": "cfb", - "plaintext": [ - [79, 164, 202, 167, 3, 46, 88, 187, 121, 72], - [253, 95, 251, 227, 76, 47, 152, 176, 233, 38] - ], - "segmentSize": 2 - }, - { - "encrypted": [ - [176, 131, 35, 72, 21, 158, 11, 226, 100, 74, 167, 32, 184, 144, 114], - [34, 90, 46, 77, 32, 101, 21, 133, 81, 115, 60, 196, 100, 33, 70], - [67, 245, 63, 214, 63, 173, 62, 218, 213, 49, 226, 240, 165, 17, 17] - ], - "iv": [191, 48, 139, 102, 68, 115, 26, 156, 66, 192, 99, 4, 39, 130, 198, 50], - "key": [49, 148, 200, 33, 216, 194, 109, 7, 238, 71, 249, 200, 108, 214, 127, 144, 60, 110, 56, 205, 207, 78, 61, 61], - "modeOfOperation": "cfb", - "plaintext": [ - [112, 106, 208, 226, 60, 205, 166, 155, 190, 192, 247, 170, 124, 100, 32], - [58, 84, 104, 237, 239, 10, 145, 46, 135, 83, 50, 46, 226, 237, 50], - [192, 180, 158, 211, 136, 228, 4, 157, 68, 173, 11, 92, 117, 109, 76] - ], - "segmentSize": 3 - }, - { - "encrypted": [ - [232, 101, 165, 144, 208, 8, 122, 198, 138, 123, 4, 210, 149, 181, 131, 130, 40, 197, 55, 133], - [51, 237, 40, 191, 164, 198, 25, 184, 154, 193, 191, 233, 237, 217, 24, 179, 216, 128, 189, 253], - [29, 35, 37, 180, 204, 6, 221, 255, 55, 50, 45, 218, 127, 78, 249, 18, 72, 168, 87, 31], - [90, 170, 52, 211, 148, 238, 39, 18, 51, 4, 197, 53, 17, 110, 210, 13, 207, 99, 134, 30] - ], - "iv": [47, 188, 72, 211, 183, 139, 244, 143, 241, 186, 77, 40, 95, 4, 178, 102], - "key": [173, 192, 77, 67, 43, 135, 16, 30, 149, 195, 152, 119, 36, 153, 55, 223, 102, 223, 37, 245, 56, 206, 247, 104], - "modeOfOperation": "cfb", - "plaintext": [ - [228, 148, 77, 248, 170, 147, 181, 139, 31, 96, 74, 118, 5, 135, 20, 36, 100, 231, 196, 97], - [146, 77, 35, 67, 52, 29, 205, 118, 134, 246, 15, 250, 4, 6, 68, 211, 140, 218, 30, 39], - [78, 113, 120, 18, 88, 219, 5, 26, 18, 14, 219, 252, 123, 4, 220, 37, 89, 168, 207, 248], - [225, 91, 4, 238, 103, 200, 25, 217, 62, 27, 131, 193, 211, 222, 19, 132, 231, 221, 230, 234] - ], - "segmentSize": 4 - }, - { - "encrypted": [ - [210, 206, 98, 81, 4, 103, 76, 91, 107, 9, 110, 149, 13, 182, 124, 195, 100, 170, 78, 187, 175, 192, 64, 44, 48], - [173, 247, 172, 23, 98, 15, 167, 20, 150, 98, 183, 16, 58, 120, 210, 148, 93, 123, 201, 214, 117, 127, 115, 253, 209], - [78, 184, 19, 207, 104, 58, 158, 86, 147, 227, 23, 160, 215, 34, 22, 6, 120, 57, 142, 106, 78, 46, 43, 230, 233], - [71, 151, 253, 252, 75, 218, 56, 42, 70, 119, 161, 27, 86, 88, 70, 201, 197, 53, 113, 157, 165, 159, 121, 37, 112], - [101, 108, 250, 199, 127, 30, 235, 252, 223, 92, 134, 23, 39, 93, 152, 211, 143, 39, 204, 42, 229, 198, 129, 126, 88] - ], - "iv": [19, 11, 210, 195, 212, 203, 220, 65, 176, 0, 47, 215, 174, 21, 143, 185], - "key": [56, 100, 201, 8, 140, 63, 42, 128, 228, 158, 126, 113, 230, 147, 215, 43, 116, 246, 76, 223, 230, 174, 97, 118], - "modeOfOperation": "cfb", - "plaintext": [ - [248, 13, 149, 142, 122, 53, 22, 204, 53, 17, 35, 123, 192, 37, 93, 248, 224, 219, 110, 134, 155, 139, 33, 139, 248], - [115, 3, 235, 224, 152, 83, 195, 145, 203, 18, 66, 166, 166, 111, 172, 149, 102, 33, 159, 120, 227, 46, 15, 227, 69], - [214, 118, 230, 128, 39, 95, 52, 130, 102, 153, 121, 48, 52, 24, 137, 185, 12, 60, 248, 253, 113, 64, 197, 97, 145], - [13, 161, 197, 3, 182, 163, 222, 247, 170, 16, 29, 104, 233, 56, 94, 3, 117, 244, 212, 151, 40, 125, 58, 177, 237], - [117, 200, 89, 211, 158, 239, 122, 177, 220, 163, 63, 73, 248, 42, 165, 239, 227, 139, 108, 2, 46, 86, 39, 40, 50] - ], - "segmentSize": 5 - }, - { - "encrypted": [ - [163, 211, 141, 151, 113, 39, 125, 171, 38, 87, 34, 109, 46, 130, 161, 212, 9, 190, 117, 159, 219, 105, 54, 179, 250, 17, 57, 174, 214, 2], - [193, 85, 134, 11, 137, 218, 184, 233, 176, 253, 153, 129, 17, 50, 81, 148, 177, 13, 208, 193, 110, 34, 42, 114, 82, 33, 24, 128, 75, 175], - [52, 179, 78, 40, 215, 55, 76, 116, 218, 236, 200, 27, 104, 250, 16, 144, 38, 129, 78, 32, 239, 32, 135, 171, 246, 33, 19, 183, 144, 37], - [49, 121, 17, 27, 114, 201, 56, 50, 185, 1, 61, 94, 16, 11, 8, 199, 71, 213, 35, 215, 93, 39, 249, 225, 218, 33, 132, 183, 179, 251], - [60, 3, 231, 218, 223, 217, 128, 21, 63, 18, 21, 168, 250, 3, 246, 189, 157, 190, 66, 84, 124, 77, 176, 45, 232, 164, 252, 106, 185, 8], - [99, 198, 185, 72, 75, 161, 133, 15, 62, 162, 111, 202, 97, 126, 149, 245, 255, 14, 4, 27, 156, 91, 110, 143, 239, 24, 119, 87, 135, 224] - ], - "iv": [141, 209, 27, 18, 162, 125, 252, 61, 121, 208, 116, 122, 131, 66, 59, 62], - "key": [18, 74, 151, 193, 70, 210, 236, 147, 125, 79, 130, 87, 52, 4, 120, 245, 224, 111, 93, 240, 235, 156, 75, 44], - "modeOfOperation": "cfb", - "plaintext": [ - [12, 128, 174, 71, 51, 36, 0, 12, 160, 91, 143, 152, 11, 253, 221, 80, 68, 19, 162, 33, 186, 159, 212, 55, 93, 41, 18, 148, 61, 64], - [179, 12, 191, 35, 106, 215, 94, 87, 162, 122, 225, 74, 170, 141, 200, 61, 148, 5, 19, 145, 217, 119, 238, 51, 229, 35, 176, 135, 113, 32], - [169, 219, 169, 90, 197, 31, 252, 108, 207, 8, 114, 189, 102, 108, 197, 122, 186, 168, 177, 31, 246, 207, 86, 71, 232, 114, 6, 122, 222, 53], - [18, 36, 234, 169, 137, 29, 21, 72, 37, 236, 31, 23, 203, 11, 102, 194, 28, 66, 201, 125, 166, 179, 33, 77, 101, 143, 9, 216, 48, 83], - [172, 39, 178, 16, 12, 83, 239, 30, 2, 90, 133, 211, 76, 43, 13, 122, 236, 252, 103, 58, 0, 84, 122, 247, 46, 76, 75, 108, 161, 44], - [173, 80, 120, 22, 46, 211, 189, 247, 207, 246, 11, 138, 181, 37, 158, 245, 106, 82, 126, 191, 75, 253, 241, 173, 162, 116, 72, 155, 58, 127] - ], - "segmentSize": 6 - }, - { - "encrypted": [ - [83, 99, 61, 236, 98, 91, 72, 249, 164, 81, 64, 46, 107, 158, 28, 185, 193, 58, 212, 46, 191, 26, 121, 174, 135, 42, 113, 135, 209, 75, 182, 126, 173, 73, 112], - [170, 233, 246, 241, 88, 158, 238, 1, 221, 173, 91, 40, 57, 57, 54, 28, 111, 235, 20, 183, 254, 199, 40, 105, 98, 222, 170, 229, 170, 228, 159, 223, 0, 250, 239], - [97, 140, 244, 95, 134, 189, 153, 140, 111, 218, 3, 209, 144, 110, 59, 135, 78, 161, 20, 35, 180, 211, 240, 169, 88, 145, 87, 123, 68, 250, 12, 42, 87, 252, 31], - [181, 63, 30, 252, 13, 130, 231, 1, 210, 99, 66, 73, 43, 166, 91, 136, 104, 106, 121, 209, 182, 58, 172, 42, 254, 58, 229, 165, 96, 103, 9, 254, 225, 205, 2], - [183, 115, 1, 21, 4, 48, 1, 238, 134, 208, 169, 227, 137, 69, 105, 231, 236, 152, 211, 60, 7, 25, 19, 1, 45, 179, 117, 44, 24, 249, 146, 240, 54, 133, 74], - [1, 12, 175, 104, 86, 42, 44, 73, 119, 59, 160, 58, 230, 106, 155, 45, 18, 54, 141, 116, 2, 169, 30, 135, 133, 72, 115, 249, 23, 37, 107, 131, 253, 141, 181], - [127, 172, 124, 65, 187, 129, 178, 88, 90, 12, 211, 163, 78, 170, 239, 185, 74, 254, 196, 113, 36, 239, 110, 67, 87, 191, 188, 197, 177, 17, 143, 190, 239, 110, 205] - ], - "iv": [30, 96, 82, 5, 130, 17, 92, 115, 21, 58, 32, 121, 249, 135, 129, 136], - "key": [170, 207, 23, 43, 60, 195, 23, 233, 206, 200, 181, 248, 167, 237, 28, 163, 80, 187, 23, 183, 68, 120, 42, 5], - "modeOfOperation": "cfb", - "plaintext": [ - [75, 239, 222, 45, 117, 94, 147, 212, 73, 208, 39, 211, 127, 17, 130, 223, 57, 35, 27, 47, 77, 230, 70, 223, 19, 173, 85, 109, 135, 144, 246, 125, 151, 252, 182], - [79, 64, 189, 168, 208, 18, 195, 240, 26, 125, 166, 74, 53, 125, 218, 30, 152, 95, 118, 83, 132, 226, 83, 117, 46, 30, 216, 49, 5, 128, 248, 235, 247, 162, 118], - [152, 122, 82, 84, 190, 110, 44, 178, 160, 45, 244, 67, 190, 88, 119, 250, 197, 122, 106, 19, 245, 75, 170, 149, 195, 192, 32, 95, 49, 55, 20, 201, 37, 141, 133], - [229, 63, 223, 83, 32, 71, 234, 27, 33, 35, 217, 200, 245, 54, 3, 204, 102, 84, 45, 219, 218, 40, 138, 81, 86, 69, 245, 0, 226, 232, 142, 62, 204, 91, 49], - [244, 125, 0, 94, 81, 103, 94, 8, 41, 53, 11, 211, 139, 183, 76, 57, 153, 89, 13, 200, 245, 21, 225, 172, 55, 254, 140, 143, 29, 169, 247, 206, 58, 40, 170], - [130, 129, 33, 70, 113, 161, 243, 212, 139, 8, 56, 214, 105, 247, 192, 114, 73, 12, 93, 140, 185, 195, 192, 41, 63, 44, 78, 243, 52, 125, 48, 55, 50, 97, 241], - [65, 147, 35, 212, 226, 129, 137, 3, 2, 71, 132, 129, 61, 135, 102, 250, 251, 194, 133, 154, 61, 201, 164, 56, 239, 220, 35, 23, 106, 88, 189, 164, 22, 32, 22] - ], - "segmentSize": 7 - }, - { - "encrypted": [ - [218, 90, 143, 173, 46] - ], - "iv": [96, 236, 21, 126, 89, 172, 249, 225, 125, 199, 100, 195, 218, 158, 10, 120], - "key": [204, 203, 191, 165, 121, 29, 247, 180, 214, 29, 114, 50, 131, 98, 201, 61, 193, 109, 92, 41, 220, 37, 1, 82, 190, 102, 132, 5, 33, 199, 35, 123], - "modeOfOperation": "cfb", - "plaintext": [ - [144, 129, 145, 189, 120] - ], - "segmentSize": 1 - }, - { - "encrypted": [ - [151, 62, 228, 223, 244, 83, 229, 96, 105, 189], - [252, 123, 118, 109, 90, 49, 140, 145, 106, 141] - ], - "iv": [42, 138, 242, 229, 121, 197, 0, 178, 32, 157, 84, 72, 62, 63, 195, 198], - "key": [240, 8, 87, 167, 214, 62, 217, 13, 126, 29, 63, 29, 237, 120, 152, 197, 219, 94, 211, 7, 227, 73, 185, 99, 99, 126, 120, 158, 220, 42, 32, 26], - "modeOfOperation": "cfb", - "plaintext": [ - [146, 173, 12, 154, 126, 92, 246, 140, 224, 20], - [124, 146, 80, 179, 196, 128, 83, 3, 202, 19] - ], - "segmentSize": 2 - }, - { - "encrypted": [ - [232, 91, 215, 33, 3, 19, 13, 178, 163, 223, 117, 210, 226, 236, 37], - [224, 78, 191, 135, 219, 29, 36, 144, 147, 113, 220, 176, 204, 55, 232], - [39, 68, 32, 244, 204, 237, 39, 27, 150, 241, 71, 230, 5, 147, 191] - ], - "iv": [53, 190, 162, 131, 77, 9, 199, 9, 128, 223, 204, 238, 16, 228, 175, 210], - "key": [219, 84, 103, 126, 203, 32, 231, 156, 160, 126, 45, 227, 131, 253, 129, 135, 178, 110, 138, 46, 0, 131, 13, 66, 116, 21, 144, 93, 177, 44, 44, 207], - "modeOfOperation": "cfb", - "plaintext": [ - [169, 228, 231, 46, 231, 136, 74, 148, 167, 62, 39, 165, 55, 139, 225], - [210, 249, 62, 39, 223, 26, 234, 93, 111, 189, 71, 145, 37, 207, 244], - [15, 116, 89, 203, 81, 14, 22, 94, 60, 123, 243, 200, 19, 193, 153] - ], - "segmentSize": 3 - }, - { - "encrypted": [ - [240, 84, 252, 65, 172, 194, 207, 101, 149, 206, 111, 192, 76, 172, 119, 93, 194, 76, 22, 220], - [149, 247, 127, 118, 39, 24, 231, 158, 221, 175, 43, 124, 159, 253, 219, 196, 153, 211, 44, 143], - [109, 92, 140, 97, 86, 80, 31, 122, 236, 116, 137, 108, 159, 62, 255, 149, 172, 121, 137, 211], - [233, 60, 139, 137, 224, 18, 192, 190, 31, 197, 242, 129, 218, 219, 1, 77, 26, 250, 192, 147] - ], - "iv": [166, 245, 166, 15, 1, 59, 204, 194, 248, 45, 98, 76, 38, 101, 95, 195], - "key": [191, 145, 253, 19, 61, 227, 39, 136, 31, 26, 148, 145, 62, 236, 221, 25, 195, 192, 178, 3, 161, 19, 242, 164, 236, 215, 202, 188, 206, 77, 134, 61], - "modeOfOperation": "cfb", - "plaintext": [ - [73, 23, 167, 158, 130, 29, 205, 155, 235, 4, 237, 132, 201, 126, 213, 119, 225, 16, 249, 28], - [219, 239, 135, 50, 138, 77, 2, 123, 63, 6, 134, 181, 202, 174, 99, 246, 147, 66, 22, 153], - [237, 160, 28, 185, 66, 23, 48, 220, 248, 209, 54, 22, 83, 214, 137, 233, 95, 105, 90, 213], - [14, 155, 74, 143, 135, 224, 218, 35, 146, 100, 113, 178, 47, 150, 220, 14, 164, 251, 110, 155] - ], - "segmentSize": 4 - }, - { - "encrypted": [ - [154, 117, 178, 166, 176, 180, 111, 209, 14, 0, 176, 48, 170, 32, 83, 30, 57, 88, 35, 46, 68, 17, 144, 14, 239], - [72, 213, 215, 85, 230, 45, 145, 18, 41, 158, 100, 144, 254, 171, 86, 127, 185, 236, 154, 123, 161, 35, 229, 134, 121], - [154, 188, 162, 195, 14, 233, 82, 29, 79, 41, 154, 215, 225, 173, 85, 65, 222, 83, 200, 153, 21, 59, 29, 21, 103], - [22, 43, 45, 247, 126, 108, 51, 233, 17, 48, 150, 105, 181, 38, 94, 127, 176, 40, 238, 15, 33, 25, 164, 67, 150], - [112, 120, 189, 216, 119, 91, 230, 79, 66, 19, 115, 18, 108, 207, 8, 246, 3, 155, 174, 59, 170, 182, 81, 56, 232] - ], - "iv": [204, 88, 185, 6, 225, 94, 158, 148, 125, 52, 80, 240, 44, 39, 195, 46], - "key": [43, 185, 87, 1, 177, 116, 66, 175, 68, 134, 143, 108, 234, 45, 118, 33, 104, 26, 168, 81, 64, 146, 109, 16, 223, 41, 97, 167, 239, 47, 215, 72], - "modeOfOperation": "cfb", - "plaintext": [ - [89, 235, 69, 53, 128, 242, 157, 128, 142, 194, 91, 215, 230, 18, 62, 154, 48, 161, 138, 134, 226, 20, 214, 19, 52], - [29, 221, 244, 243, 215, 194, 16, 142, 198, 32, 255, 1, 254, 167, 142, 93, 246, 41, 231, 73, 88, 126, 48, 33, 242], - [208, 183, 186, 147, 234, 249, 34, 159, 10, 184, 72, 70, 177, 6, 233, 203, 251, 129, 104, 46, 95, 88, 84, 158, 130], - [86, 246, 239, 237, 103, 139, 15, 65, 142, 142, 179, 96, 36, 207, 204, 118, 209, 128, 36, 218, 30, 160, 3, 233, 143], - [71, 243, 150, 200, 210, 170, 205, 57, 22, 213, 228, 189, 215, 239, 53, 239, 162, 47, 12, 228, 94, 8, 124, 46, 120] - ], - "segmentSize": 5 - }, - { - "encrypted": [ - [21, 15, 108, 91, 107, 200, 9, 17, 236, 51, 128, 21, 205, 26, 148, 220, 123, 87, 147, 172, 253, 198, 226, 103, 247, 154, 44, 41, 10, 254], - [93, 190, 232, 67, 241, 238, 35, 249, 49, 144, 163, 38, 20, 71, 228, 14, 99, 191, 188, 159, 145, 63, 10, 87, 137, 42, 37, 111, 217, 51], - [135, 1, 71, 244, 44, 115, 39, 137, 22, 196, 14, 222, 69, 106, 41, 106, 118, 227, 223, 244, 241, 142, 35, 165, 16, 117, 6, 215, 149, 37], - [204, 171, 250, 177, 157, 252, 171, 186, 85, 93, 10, 236, 107, 175, 64, 106, 24, 18, 188, 235, 71, 118, 52, 178, 221, 206, 4, 134, 40, 0], - [226, 138, 101, 121, 97, 134, 86, 121, 189, 60, 140, 9, 53, 193, 141, 8, 65, 53, 252, 50, 26, 111, 253, 236, 75, 179, 80, 92, 121, 29], - [245, 127, 243, 48, 151, 124, 171, 83, 105, 222, 29, 211, 163, 148, 214, 147, 54, 110, 35, 60, 46, 97, 163, 29, 55, 205, 160, 81, 118, 106] - ], - "iv": [32, 108, 55, 136, 104, 201, 171, 129, 195, 116, 125, 9, 22, 49, 211, 56], - "key": [163, 205, 39, 217, 53, 164, 45, 242, 79, 82, 43, 7, 139, 119, 102, 20, 229, 62, 192, 138, 239, 5, 251, 83, 98, 137, 4, 188, 132, 232, 0, 39], - "modeOfOperation": "cfb", - "plaintext": [ - [63, 179, 172, 255, 224, 133, 204, 85, 169, 76, 200, 16, 128, 118, 197, 18, 101, 252, 248, 40, 240, 17, 199, 198, 63, 163, 136, 184, 178, 193], - [122, 112, 138, 173, 216, 125, 100, 237, 169, 90, 0, 141, 100, 64, 24, 7, 121, 38, 74, 165, 215, 115, 228, 177, 65, 221, 233, 4, 209, 36], - [111, 44, 224, 250, 14, 205, 245, 23, 137, 194, 220, 222, 58, 146, 72, 228, 33, 42, 146, 184, 205, 227, 186, 148, 159, 48, 107, 69, 60, 11], - [181, 44, 82, 144, 227, 67, 178, 81, 129, 97, 16, 89, 92, 69, 39, 8, 182, 187, 210, 204, 167, 70, 70, 95, 44, 233, 236, 53, 131, 182], - [46, 186, 39, 99, 219, 241, 26, 90, 69, 249, 32, 187, 142, 145, 228, 118, 79, 136, 34, 147, 219, 232, 29, 78, 67, 158, 247, 4, 122, 249], - [55, 180, 66, 68, 103, 234, 183, 76, 121, 12, 114, 225, 219, 8, 27, 171, 41, 40, 97, 94, 1, 73, 77, 202, 125, 129, 7, 153, 200, 83] - ], - "segmentSize": 6 - }, - { - "encrypted": [ - [88, 209, 94, 183, 47, 249, 211, 91, 228, 159, 87, 211, 180, 44, 6, 237, 49, 159, 178, 223, 66, 67, 73, 58, 247, 67, 61, 55, 250, 77, 143, 173, 18, 236, 9], - [15, 190, 239, 23, 2, 253, 215, 211, 97, 124, 20, 141, 65, 186, 36, 250, 140, 73, 185, 17, 142, 209, 129, 130, 25, 125, 108, 53, 94, 235, 219, 255, 122, 202, 140], - [73, 156, 198, 250, 115, 106, 247, 29, 128, 33, 250, 83, 174, 226, 35, 50, 231, 92, 67, 134, 186, 15, 85, 213, 74, 184, 176, 106, 201, 178, 44, 163, 2, 216, 74], - [70, 190, 188, 10, 245, 45, 246, 55, 134, 238, 172, 35, 181, 137, 239, 40, 30, 103, 97, 51, 72, 36, 193, 192, 59, 16, 108, 47, 102, 191, 85, 196, 76, 227, 1], - [208, 1, 127, 235, 197, 255, 61, 135, 225, 14, 179, 135, 154, 5, 252, 98, 36, 238, 126, 118, 98, 8, 193, 118, 253, 75, 64, 212, 21, 221, 61, 101, 244, 203, 215], - [6, 231, 90, 231, 75, 17, 253, 169, 103, 158, 189, 175, 130, 125, 154, 102, 197, 167, 103, 78, 242, 27, 40, 182, 66, 249, 34, 52, 104, 242, 91, 50, 176, 158, 25], - [25, 75, 156, 229, 167, 34, 51, 150, 63, 23, 135, 157, 198, 46, 215, 37, 246, 100, 78, 189, 16, 88, 82, 251, 160, 243, 50, 80, 135, 17, 35, 206, 214, 97, 77] - ], - "iv": [53, 34, 237, 194, 87, 193, 245, 36, 230, 180, 43, 221, 154, 164, 143, 116], - "key": [7, 31, 8, 166, 69, 134, 53, 255, 124, 96, 65, 96, 141, 29, 174, 252, 100, 138, 8, 176, 208, 198, 95, 83, 95, 233, 30, 96, 94, 77, 19, 155], - "modeOfOperation": "cfb", - "plaintext": [ - [196, 159, 224, 72, 250, 23, 59, 166, 66, 81, 4, 104, 254, 210, 55, 224, 250, 194, 63, 61, 4, 231, 71, 190, 2, 181, 32, 165, 1, 212, 92, 93, 238, 247, 206], - [160, 177, 60, 156, 133, 24, 253, 7, 53, 36, 196, 208, 75, 38, 185, 79, 215, 83, 102, 44, 16, 138, 69, 87, 38, 19, 96, 194, 173, 33, 23, 184, 59, 119, 244], - [225, 125, 111, 45, 103, 235, 145, 168, 115, 46, 36, 165, 177, 163, 221, 208, 75, 64, 179, 80, 21, 61, 124, 94, 230, 142, 98, 210, 206, 253, 180, 110, 0, 164, 127], - [10, 132, 102, 131, 110, 219, 104, 230, 209, 233, 14, 112, 243, 14, 120, 188, 231, 205, 146, 232, 172, 198, 114, 68, 141, 112, 223, 89, 56, 168, 162, 119, 236, 3, 82], - [20, 74, 71, 36, 45, 54, 194, 19, 238, 134, 57, 223, 176, 3, 87, 44, 101, 35, 26, 211, 99, 34, 216, 196, 190, 157, 51, 49, 207, 84, 97, 242, 103, 158, 111], - [5, 11, 103, 189, 65, 98, 144, 235, 196, 129, 149, 212, 252, 63, 104, 222, 35, 26, 31, 140, 155, 189, 13, 15, 55, 169, 120, 114, 170, 134, 231, 255, 46, 59, 253], - [63, 0, 66, 212, 90, 198, 218, 101, 92, 253, 246, 34, 218, 63, 81, 94, 121, 232, 82, 74, 241, 103, 136, 12, 100, 254, 100, 80, 40, 123, 44, 155, 47, 45, 222] - ], - "segmentSize": 7 - }, - { - "encrypted": [ - [] - ], - "iv": null, - "key": [99, 238, 11, 53, 19, 193, 106, 64, 219, 137, 89, 96, 80, 108, 125, 208], - "modeOfOperation": "ecb", - "plaintext": [ - [] - ], - "segmentSize": null - }, - { - "encrypted": [ - [2, 178, 244, 156, 126, 249, 132, 35, 217, 225, 120, 67, 132, 136, 22, 136], - [17, 32, 117, 87, 115, 89, 150, 240, 189, 187, 109, 136, 174, 236, 211, 150] - ], - "iv": null, - "key": [204, 125, 63, 199, 43, 225, 204, 175, 148, 246, 2, 202, 208, 194, 182, 121], - "modeOfOperation": "ecb", - "plaintext": [ - [201, 189, 83, 217, 121, 3, 223, 61, 181, 247, 211, 32, 134, 108, 248, 8], - [192, 193, 26, 171, 231, 182, 132, 63, 92, 252, 207, 112, 30, 46, 142, 189] - ], - "segmentSize": null - }, - { - "encrypted": [ - [193, 144, 251, 44, 29, 177, 117, 224, 176, 132, 141, 27, 218, 230, 168, 29], - [15, 207, 65, 73, 46, 162, 227, 181, 154, 139, 122, 105, 75, 196, 107, 231], - [3, 145, 39, 138, 112, 224, 96, 28, 182, 139, 182, 16, 138, 148, 95, 241] - ], - "iv": null, - "key": [171, 90, 174, 68, 15, 253, 93, 134, 159, 184, 122, 246, 250, 0, 197, 204], - "modeOfOperation": "ecb", - "plaintext": [ - [143, 122, 178, 65, 105, 148, 76, 209, 199, 17, 138, 70, 161, 92, 187, 247], - [154, 240, 213, 191, 63, 167, 249, 221, 17, 242, 194, 143, 43, 99, 205, 161], - [50, 95, 49, 141, 74, 92, 184, 194, 57, 1, 220, 73, 104, 168, 52, 123] - ], - "segmentSize": null - }, - { - "encrypted": [ - [147, 188, 134, 28, 222, 49, 82, 106, 130, 235, 25, 235, 157, 249, 66, 53, 73, 41, 56, 125, 107, 93, 145, 166, 111, 130, 24, 118, 166, 187, 84, 106], - [248, 175, 231, 5, 214, 189, 99, 117, 160, 133, 41, 53, 140, 52, 171, 103, 228, 201, 236, 156, 187, 25, 109, 15, 157, 77, 83, 70, 141, 90, 161, 144], - [138, 82, 154, 113, 251, 105, 12, 237, 68, 67, 11, 14, 80, 18, 114, 29, 188, 220, 130, 22, 169, 83, 129, 128, 119, 82, 4, 98, 167, 105, 171, 202], - [247, 65, 116, 151, 55, 66, 97, 203, 207, 131, 179, 83, 234, 27, 248, 86, 124, 220, 214, 208, 66, 253, 188, 244, 222, 75, 6, 20, 108, 208, 34, 42] - ], - "iv": null, - "key": [96, 50, 111, 132, 202, 113, 108, 148, 89, 109, 189, 26, 0, 229, 100, 222], - "modeOfOperation": "ecb", - "plaintext": [ - [103, 195, 37, 13, 12, 225, 26, 127, 248, 73, 13, 142, 255, 225, 37, 63, 214, 212, 153, 255, 238, 73, 41, 9, 169, 60, 222, 171, 223, 114, 205, 244], - [183, 75, 148, 197, 16, 139, 184, 193, 143, 11, 88, 128, 232, 153, 226, 136, 238, 208, 151, 54, 14, 202, 220, 44, 168, 194, 67, 127, 78, 43, 74, 152], - [38, 214, 55, 44, 94, 20, 209, 180, 245, 162, 71, 209, 85, 211, 239, 35, 117, 164, 182, 229, 223, 197, 98, 224, 200, 238, 194, 79, 16, 19, 73, 26], - [88, 95, 66, 100, 97, 11, 73, 49, 72, 182, 185, 134, 42, 114, 255, 144, 105, 147, 116, 41, 55, 102, 110, 180, 190, 192, 68, 171, 117, 62, 84, 129] - ], - "segmentSize": null - }, - { - "encrypted": [ - [2, 83, 159, 68, 33, 242, 205, 129, 226, 59, 184, 29, 62, 3, 5, 44, 1, 223, 12, 140, 66, 117, 162, 71, 126, 121, 233, 49, 10, 49, 16, 91, 214, 95, 217, 163, 202, 85, 171, 14, 248, 29, 137, 175, 219, 48, 214, 50], - [110, 187, 251, 193, 119, 210, 104, 128, 234, 178, 90, 63, 207, 60, 7, 108, 251, 108, 77, 140, 68, 162, 85, 19, 168, 227, 99, 251, 203, 49, 27, 17, 92, 22, 71, 201, 230, 111, 156, 23, 232, 192, 183, 241, 238, 26, 66, 222], - [145, 235, 141, 199, 134, 97, 142, 190, 154, 60, 44, 247, 224, 104, 37, 118, 80, 37, 28, 151, 91, 184, 76, 105, 30, 9, 47, 8, 11, 84, 162, 236, 138, 114, 182, 91, 24, 156, 70, 82, 56, 37, 190, 228, 14, 136, 209, 46], - [132, 157, 231, 244, 95, 172, 250, 111, 154, 163, 99, 10, 66, 136, 158, 101, 57, 108, 111, 105, 96, 235, 184, 115, 51, 225, 243, 136, 39, 224, 117, 162, 226, 143, 124, 64, 30, 46, 199, 159, 122, 218, 113, 91, 66, 126, 215, 94], - [48, 198, 186, 153, 224, 2, 199, 50, 117, 148, 35, 207, 15, 126, 238, 185, 100, 226, 131, 123, 172, 112, 80, 5, 247, 232, 32, 158, 39, 92, 238, 101, 178, 160, 38, 162, 6, 70, 71, 43, 221, 247, 248, 143, 27, 235, 225, 111] - ], - "iv": null, - "key": [7, 99, 249, 128, 242, 205, 72, 95, 63, 217, 110, 120, 40, 178, 190, 236], - "modeOfOperation": "ecb", - "plaintext": [ - [98, 8, 185, 171, 101, 138, 254, 80, 131, 166, 132, 125, 46, 177, 144, 137, 34, 46, 67, 212, 212, 231, 161, 87, 49, 66, 254, 41, 19, 26, 53, 213, 100, 249, 47, 239, 93, 205, 56, 255, 138, 230, 86, 35, 38, 218, 76, 203], - [18, 100, 243, 199, 151, 98, 254, 195, 7, 34, 156, 226, 225, 192, 204, 23, 90, 226, 71, 231, 144, 185, 184, 6, 219, 189, 175, 183, 203, 32, 94, 35, 247, 98, 161, 255, 250, 101, 230, 185, 239, 19, 73, 172, 58, 244, 184, 243], - [194, 221, 170, 27, 133, 146, 132, 89, 247, 231, 192, 5, 19, 231, 140, 230, 203, 5, 7, 6, 132, 136, 87, 217, 237, 229, 112, 218, 51, 162, 143, 207, 9, 205, 119, 164, 206, 155, 38, 164, 206, 242, 177, 37, 223, 95, 19, 175], - [142, 119, 6, 225, 207, 124, 247, 59, 124, 185, 60, 87, 167, 81, 145, 200, 190, 198, 233, 24, 75, 45, 215, 10, 82, 38, 34, 221, 139, 224, 10, 194, 225, 197, 6, 9, 1, 99, 82, 12, 60, 71, 250, 237, 70, 246, 76, 99], - [31, 154, 241, 10, 218, 5, 34, 24, 34, 89, 72, 171, 110, 247, 50, 66, 152, 159, 62, 17, 113, 190, 172, 16, 61, 213, 254, 211, 146, 202, 226, 62, 117, 140, 13, 122, 62, 100, 32, 64, 135, 223, 11, 172, 59, 54, 27, 173] - ], - "segmentSize": null - }, - { - "encrypted": [ - [204, 132, 11, 191, 222, 65, 25, 193, 224, 159, 198, 55, 53, 87, 64, 62, 255, 201, 40, 123, 215, 59, 16, 168, 173, 21, 12, 82, 243, 72, 131, 156, 62, 179, 85, 227, 252, 120, 165, 77, 23, 121, 172, 162, 185, 186, 46, 173, 68, 162, 125, 28, 110, 252, 118, 82, 141, 79, 134, 132, 54, 96, 157, 169], - [120, 12, 182, 217, 199, 138, 191, 237, 78, 26, 16, 253, 77, 187, 222, 61, 187, 22, 99, 7, 241, 105, 98, 134, 43, 137, 11, 177, 190, 225, 85, 247, 37, 210, 6, 248, 220, 48, 85, 222, 31, 162, 95, 234, 141, 221, 34, 2, 182, 35, 92, 158, 67, 149, 150, 137, 40, 223, 192, 9, 249, 114, 187, 0], - [212, 146, 241, 73, 154, 176, 202, 248, 169, 125, 48, 195, 195, 215, 150, 241, 14, 71, 245, 134, 216, 31, 92, 91, 77, 13, 184, 181, 237, 27, 234, 64, 83, 1, 195, 43, 171, 35, 107, 154, 9, 67, 177, 155, 202, 42, 237, 17, 172, 227, 183, 218, 252, 220, 89, 32, 49, 149, 44, 188, 167, 12, 215, 208], - [121, 28, 4, 12, 224, 12, 135, 108, 241, 210, 184, 124, 248, 213, 221, 169, 111, 207, 67, 50, 235, 239, 140, 102, 226, 163, 27, 216, 169, 73, 8, 236, 69, 227, 88, 232, 76, 34, 60, 92, 93, 169, 110, 18, 126, 19, 190, 198, 245, 28, 202, 215, 97, 134, 64, 27, 140, 16, 246, 88, 146, 203, 97, 118], - [218, 187, 112, 159, 103, 98, 135, 151, 127, 206, 179, 46, 49, 67, 95, 42, 16, 106, 192, 40, 150, 88, 17, 41, 189, 194, 156, 30, 159, 87, 131, 144, 225, 130, 37, 199, 7, 129, 101, 181, 243, 110, 111, 180, 132, 81, 227, 190, 4, 196, 67, 111, 19, 57, 126, 219, 204, 14, 81, 84, 237, 159, 217, 47], - [2, 140, 131, 253, 180, 254, 68, 186, 225, 197, 81, 254, 10, 72, 237, 173, 230, 54, 235, 198, 126, 117, 46, 63, 7, 210, 225, 92, 156, 87, 99, 232, 133, 147, 110, 225, 233, 44, 170, 144, 49, 106, 254, 130, 159, 240, 188, 127, 2, 195, 232, 93, 243, 190, 193, 35, 1, 33, 133, 183, 20, 8, 179, 140] - ], - "iv": null, - "key": [32, 189, 162, 103, 11, 100, 129, 181, 50, 26, 23, 42, 225, 165, 233, 94], - "modeOfOperation": "ecb", - "plaintext": [ - [76, 5, 230, 253, 131, 12, 143, 186, 119, 136, 105, 6, 11, 109, 122, 10, 89, 10, 117, 178, 174, 1, 22, 131, 173, 152, 39, 134, 123, 107, 60, 134, 162, 23, 2, 96, 38, 39, 95, 68, 89, 251, 32, 127, 110, 142, 247, 70, 40, 167, 69, 222, 245, 104, 230, 176, 36, 155, 145, 46, 80, 147, 55, 188], - [143, 78, 81, 45, 4, 190, 255, 30, 138, 67, 34, 178, 218, 136, 73, 215, 66, 249, 29, 59, 44, 215, 8, 34, 117, 2, 191, 164, 217, 140, 45, 6, 203, 231, 178, 220, 130, 4, 208, 135, 191, 184, 49, 59, 153, 7, 125, 85, 92, 90, 122, 64, 8, 22, 27, 168, 235, 171, 251, 96, 79, 119, 105, 124], - [104, 214, 37, 91, 130, 67, 248, 182, 127, 73, 251, 202, 133, 171, 96, 69, 89, 34, 100, 182, 178, 83, 229, 193, 153, 254, 225, 77, 5, 179, 193, 114, 147, 55, 223, 172, 101, 35, 252, 204, 254, 20, 83, 196, 15, 33, 86, 126, 195, 131, 206, 55, 189, 199, 167, 15, 28, 24, 94, 132, 103, 74, 50, 251], - [119, 162, 246, 124, 231, 163, 98, 219, 210, 154, 232, 25, 246, 218, 240, 197, 94, 132, 202, 54, 68, 234, 1, 211, 114, 145, 255, 166, 123, 190, 220, 78, 255, 178, 211, 68, 5, 121, 13, 19, 180, 251, 222, 105, 145, 145, 107, 144, 199, 124, 241, 220, 97, 183, 252, 22, 105, 87, 64, 214, 54, 46, 24, 179], - [198, 135, 253, 104, 62, 144, 220, 204, 204, 156, 212, 26, 80, 15, 173, 106, 145, 22, 220, 191, 83, 76, 99, 99, 72, 170, 154, 206, 207, 16, 125, 194, 235, 248, 31, 220, 88, 153, 251, 31, 219, 15, 201, 61, 196, 160, 189, 30, 98, 142, 117, 113, 149, 58, 50, 62, 22, 1, 17, 144, 248, 190, 220, 217], - [227, 117, 142, 9, 190, 51, 131, 156, 144, 100, 116, 241, 83, 215, 119, 32, 214, 59, 213, 115, 69, 166, 63, 189, 164, 169, 81, 47, 192, 69, 62, 11, 167, 130, 196, 146, 157, 87, 150, 210, 34, 144, 119, 87, 120, 118, 230, 141, 156, 1, 96, 24, 178, 29, 24, 1, 43, 15, 115, 205, 34, 172, 9, 169] - ], - "segmentSize": null - }, - { - "encrypted": [ - [226, 15, 50, 97, 227, 167, 89, 4, 182, 249, 174, 115, 105, 179, 223, 192, 107, 33, 241, 187, 98, 137, 126, 1, 65, 77, 231, 78, 1, 219, 39, 139, 62, 95, 77, 29, 132, 85, 191, 251, 88, 137, 117, 241, 45, 179, 172, 204, 2, 86, 48, 58, 127, 73, 87, 63, 245, 89, 72, 201, 121, 13, 4, 238], - [224, 89, 131, 146, 170, 106, 30, 50, 51, 240, 171, 236, 155, 192, 59, 135, 68, 110, 49, 27, 172, 227, 100, 72, 0, 31, 123, 234, 209, 219, 63, 26, 57, 239, 240, 118, 40, 251, 0, 109, 65, 232, 206, 120, 184, 141, 94, 132, 214, 99, 29, 66, 203, 212, 247, 128, 105, 2, 71, 166, 28, 246, 235, 102], - [184, 238, 155, 21, 98, 20, 65, 33, 73, 220, 119, 186, 176, 107, 163, 16, 6, 172, 235, 214, 119, 109, 82, 202, 25, 65, 210, 5, 215, 205, 179, 67, 157, 24, 128, 117, 197, 196, 94, 72, 220, 234, 228, 155, 57, 49, 114, 6, 17, 253, 136, 78, 254, 106, 44, 137, 0, 241, 218, 81, 175, 188, 83, 255], - [188, 31, 101, 0, 187, 116, 141, 246, 37, 150, 49, 83, 176, 51, 44, 215, 47, 95, 22, 25, 188, 52, 21, 244, 119, 172, 166, 97, 154, 83, 117, 144, 193, 148, 174, 200, 100, 63, 169, 203, 20, 42, 98, 106, 179, 170, 50, 73, 255, 50, 51, 110, 238, 226, 80, 18, 34, 84, 63, 167, 198, 201, 255, 125], - [71, 133, 55, 3, 195, 199, 42, 27, 216, 233, 201, 139, 33, 56, 68, 248, 200, 210, 196, 179, 169, 198, 114, 243, 70, 130, 254, 250, 41, 200, 234, 103, 34, 77, 134, 22, 110, 138, 105, 129, 72, 166, 118, 199, 239, 105, 176, 32, 165, 94, 5, 181, 102, 28, 15, 175, 26, 56, 99, 71, 178, 182, 248, 119], - [234, 248, 113, 187, 85, 143, 232, 0, 250, 255, 66, 53, 221, 72, 12, 57, 107, 200, 195, 99, 95, 160, 165, 21, 126, 67, 64, 137, 235, 167, 198, 181, 186, 39, 184, 9, 2, 172, 248, 8, 116, 178, 156, 30, 29, 107, 27, 164, 104, 19, 253, 131, 180, 62, 250, 186, 91, 251, 224, 179, 17, 235, 132, 98], - [55, 104, 53, 51, 119, 68, 141, 57, 95, 23, 178, 149, 91, 81, 120, 47, 22, 167, 72, 95, 182, 224, 34, 118, 9, 206, 116, 126, 125, 223, 152, 165, 89, 147, 78, 35, 105, 120, 22, 190, 175, 23, 172, 41, 249, 205, 100, 247, 192, 119, 58, 149, 9, 2, 48, 100, 185, 45, 135, 18, 46, 166, 224, 116] - ], - "iv": null, - "key": [39, 236, 86, 81, 95, 160, 210, 61, 143, 195, 70, 246, 176, 38, 124, 221], - "modeOfOperation": "ecb", - "plaintext": [ - [59, 26, 156, 163, 35, 14, 180, 14, 60, 159, 168, 225, 251, 84, 214, 17, 127, 34, 89, 21, 63, 106, 116, 118, 2, 240, 146, 241, 11, 104, 174, 145, 121, 159, 84, 155, 120, 178, 232, 241, 148, 75, 57, 88, 0, 242, 174, 161, 156, 59, 135, 43, 127, 182, 197, 88, 28, 255, 87, 55, 2, 90, 131, 150], - [223, 16, 250, 62, 139, 217, 199, 20, 162, 98, 150, 10, 23, 25, 104, 169, 33, 222, 126, 54, 81, 33, 239, 139, 136, 242, 39, 138, 105, 144, 174, 58, 125, 210, 21, 181, 0, 144, 253, 242, 203, 136, 121, 77, 29, 42, 35, 62, 17, 38, 38, 142, 115, 108, 209, 28, 125, 28, 112, 170, 255, 210, 27, 16], - [107, 169, 204, 254, 13, 219, 72, 108, 55, 112, 8, 132, 191, 192, 163, 194, 6, 1, 5, 20, 254, 189, 249, 97, 21, 89, 73, 22, 146, 173, 64, 186, 116, 170, 61, 142, 157, 59, 100, 147, 49, 158, 110, 115, 88, 250, 132, 125, 79, 50, 197, 173, 36, 22, 139, 109, 232, 74, 90, 229, 119, 43, 69, 243], - [81, 74, 67, 116, 36, 99, 199, 161, 113, 74, 31, 53, 172, 109, 140, 140, 218, 187, 62, 204, 191, 32, 90, 151, 165, 140, 3, 28, 115, 163, 84, 98, 12, 192, 90, 150, 39, 159, 42, 3, 240, 174, 213, 208, 163, 107, 37, 243, 38, 51, 232, 98, 213, 128, 100, 33, 25, 199, 80, 244, 78, 187, 237, 151], - [168, 230, 209, 13, 115, 210, 172, 8, 5, 12, 171, 209, 41, 160, 116, 29, 218, 127, 122, 223, 151, 38, 253, 125, 246, 67, 87, 220, 212, 138, 242, 25, 36, 148, 134, 186, 184, 34, 64, 187, 100, 121, 28, 223, 56, 135, 245, 122, 132, 56, 92, 138, 225, 8, 233, 185, 171, 196, 94, 151, 13, 112, 31, 28], - [134, 99, 249, 17, 179, 173, 193, 0, 29, 108, 117, 228, 251, 23, 214, 221, 105, 120, 187, 96, 144, 58, 65, 229, 98, 216, 245, 20, 76, 186, 105, 2, 26, 136, 26, 114, 57, 187, 188, 203, 164, 52, 85, 210, 152, 135, 40, 236, 237, 163, 15, 46, 120, 105, 64, 238, 46, 22, 31, 216, 74, 191, 47, 135], - [127, 194, 168, 140, 246, 151, 18, 4, 241, 246, 119, 119, 83, 202, 90, 61, 212, 253, 252, 221, 138, 74, 144, 2, 108, 61, 59, 234, 42, 70, 77, 53, 72, 171, 35, 165, 174, 253, 137, 0, 245, 130, 255, 140, 209, 196, 212, 1, 162, 71, 23, 64, 129, 250, 96, 9, 26, 20, 89, 185, 217, 126, 182, 214] - ], - "segmentSize": null - }, - { - "encrypted": [ - [] - ], - "iv": null, - "key": [132, 124, 48, 239, 33, 178, 80, 58, 102, 122, 222, 20, 127, 166, 42, 196, 82, 232, 115, 93, 52, 76, 161, 54], - "modeOfOperation": "ecb", - "plaintext": [ - [] - ], - "segmentSize": null - }, - { - "encrypted": [ - [119, 58, 54, 12, 55, 19, 29, 41, 242, 113, 172, 123, 43, 85, 148, 2], - [237, 96, 22, 69, 124, 131, 152, 62, 236, 48, 163, 11, 197, 130, 246, 147] - ], - "iv": null, - "key": [205, 201, 171, 222, 159, 202, 124, 31, 210, 25, 16, 155, 85, 28, 202, 232, 247, 131, 241, 225, 95, 89, 97, 143], - "modeOfOperation": "ecb", - "plaintext": [ - [231, 98, 158, 226, 151, 52, 17, 217, 23, 7, 40, 197, 10, 51, 51, 234], - [187, 238, 58, 27, 116, 133, 152, 109, 181, 95, 45, 85, 48, 139, 175, 254] - ], - "segmentSize": null - }, - { - "encrypted": [ - [208, 17, 45, 84, 28, 75, 73, 152, 8, 100, 33, 122, 10, 176, 55, 0], - [253, 185, 230, 145, 243, 104, 80, 165, 54, 219, 251, 178, 16, 228, 221, 59], - [218, 231, 110, 245, 67, 197, 225, 218, 16, 204, 114, 174, 171, 57, 224, 64] - ], - "iv": null, - "key": [101, 47, 95, 150, 243, 143, 233, 61, 30, 33, 55, 76, 227, 202, 250, 80, 227, 6, 140, 244, 68, 220, 2, 192], - "modeOfOperation": "ecb", - "plaintext": [ - [143, 76, 198, 79, 26, 67, 176, 105, 121, 64, 94, 90, 137, 32, 54, 154], - [137, 72, 32, 225, 243, 100, 61, 68, 1, 223, 216, 83, 217, 80, 135, 94], - [117, 54, 116, 22, 167, 203, 225, 104, 168, 238, 211, 147, 131, 147, 202, 83] - ], - "segmentSize": null - }, - { - "encrypted": [ - [239, 134, 112, 189, 126, 180, 98, 152, 186, 186, 92, 98, 62, 200, 72, 149, 183, 117, 62, 6, 47, 240, 211, 51, 146, 114, 226, 229, 7, 233, 221, 27], - [84, 155, 108, 220, 15, 177, 68, 183, 127, 142, 202, 75, 110, 106, 130, 153, 31, 103, 46, 159, 171, 60, 77, 103, 38, 66, 84, 114, 98, 218, 117, 232], - [121, 170, 210, 74, 168, 40, 3, 138, 69, 13, 46, 29, 71, 70, 32, 140, 229, 62, 80, 240, 166, 69, 189, 20, 94, 46, 184, 24, 175, 21, 235, 22], - [123, 237, 0, 54, 207, 150, 0, 198, 6, 12, 240, 252, 129, 237, 228, 101, 153, 236, 148, 47, 207, 58, 225, 78, 222, 53, 242, 151, 12, 254, 228, 217] - ], - "iv": null, - "key": [194, 244, 207, 2, 57, 224, 71, 13, 166, 59, 171, 9, 88, 18, 139, 152, 238, 77, 141, 56, 186, 246, 93, 183], - "modeOfOperation": "ecb", - "plaintext": [ - [11, 121, 217, 99, 105, 229, 33, 70, 14, 200, 209, 237, 179, 100, 207, 197, 219, 36, 138, 171, 210, 136, 107, 181, 12, 60, 191, 138, 179, 249, 147, 70], - [81, 35, 229, 239, 44, 3, 195, 92, 63, 198, 38, 70, 158, 211, 185, 10, 133, 34, 55, 173, 71, 81, 23, 152, 99, 65, 254, 30, 243, 126, 242, 173], - [62, 45, 42, 200, 25, 230, 168, 15, 59, 154, 31, 235, 170, 58, 109, 5, 242, 237, 97, 14, 0, 51, 59, 38, 219, 85, 124, 168, 200, 185, 128, 146], - [166, 183, 130, 8, 80, 33, 147, 137, 82, 201, 104, 71, 191, 34, 107, 81, 99, 38, 139, 254, 247, 126, 159, 244, 57, 2, 9, 48, 186, 161, 152, 226] - ], - "segmentSize": null - }, - { - "encrypted": [ - [52, 187, 93, 166, 46, 31, 184, 18, 249, 176, 32, 77, 233, 10, 127, 154, 173, 27, 240, 36, 250, 199, 69, 17, 116, 253, 242, 59, 239, 233, 120, 210, 99, 121, 54, 250, 49, 100, 102, 11, 79, 0, 53, 107, 93, 42, 45, 113], - [136, 172, 195, 232, 135, 113, 116, 195, 3, 253, 78, 168, 186, 109, 71, 6, 88, 126, 174, 247, 21, 252, 114, 73, 253, 123, 83, 9, 86, 113, 111, 161, 60, 163, 202, 84, 223, 166, 189, 193, 131, 173, 158, 110, 245, 199, 1, 214], - [150, 240, 154, 218, 137, 114, 56, 206, 5, 115, 99, 181, 17, 146, 147, 85, 141, 157, 184, 217, 254, 53, 150, 237, 127, 91, 134, 140, 106, 187, 5, 150, 175, 141, 144, 174, 22, 130, 97, 131, 217, 217, 173, 244, 12, 53, 70, 37], - [54, 244, 202, 41, 20, 25, 139, 48, 49, 12, 48, 144, 248, 93, 47, 129, 41, 243, 113, 232, 154, 55, 173, 73, 8, 47, 222, 191, 176, 10, 217, 238, 19, 77, 21, 228, 76, 211, 145, 1, 177, 83, 131, 55, 189, 130, 200, 64], - [65, 96, 52, 197, 59, 36, 149, 166, 28, 124, 28, 21, 208, 156, 10, 241, 99, 146, 94, 185, 172, 171, 208, 56, 204, 185, 43, 243, 57, 225, 127, 213, 239, 208, 43, 36, 18, 212, 93, 158, 186, 86, 34, 14, 201, 243, 215, 249] - ], - "iv": null, - "key": [79, 146, 60, 66, 194, 13, 131, 33, 224, 54, 80, 173, 100, 194, 106, 16, 184, 125, 156, 146, 17, 88, 171, 203], - "modeOfOperation": "ecb", - "plaintext": [ - [180, 0, 47, 126, 176, 25, 103, 37, 173, 186, 135, 228, 77, 179, 6, 121, 241, 139, 194, 176, 220, 14, 30, 193, 49, 223, 40, 145, 225, 137, 183, 78, 59, 105, 121, 17, 229, 61, 145, 112, 133, 194, 126, 54, 218, 42, 141, 118], - [250, 114, 89, 65, 82, 139, 41, 150, 79, 222, 65, 215, 233, 8, 210, 121, 252, 14, 11, 211, 127, 187, 77, 18, 142, 183, 78, 119, 231, 155, 174, 191, 41, 11, 67, 61, 254, 132, 73, 98, 220, 128, 161, 131, 203, 210, 173, 33], - [57, 142, 96, 213, 119, 234, 47, 124, 18, 184, 153, 211, 51, 254, 20, 90, 177, 213, 183, 188, 242, 103, 251, 28, 104, 12, 163, 149, 27, 114, 82, 87, 133, 101, 70, 170, 12, 25, 57, 175, 168, 122, 104, 13, 207, 70, 107, 131], - [211, 197, 223, 81, 165, 95, 127, 228, 211, 218, 108, 252, 29, 62, 54, 39, 222, 51, 211, 195, 0, 158, 202, 157, 123, 80, 87, 148, 223, 34, 106, 179, 180, 252, 142, 82, 81, 180, 145, 216, 166, 9, 123, 228, 127, 199, 7, 28], - [123, 65, 180, 237, 113, 28, 157, 174, 198, 225, 112, 217, 68, 110, 132, 184, 8, 127, 3, 185, 248, 86, 37, 191, 249, 149, 7, 49, 76, 46, 114, 91, 114, 161, 133, 47, 68, 109, 223, 214, 127, 252, 80, 141, 124, 143, 240, 236] - ], - "segmentSize": null - }, - { - "encrypted": [ - [224, 40, 71, 96, 18, 30, 156, 187, 177, 99, 223, 132, 197, 228, 0, 3, 78, 207, 47, 180, 94, 57, 255, 66, 37, 136, 79, 7, 193, 27, 62, 253, 169, 174, 238, 8, 196, 152, 62, 251, 234, 131, 24, 183, 14, 149, 64, 206, 22, 247, 1, 51, 40, 108, 66, 38, 219, 127, 19, 96, 122, 36, 163, 149], - [8, 191, 234, 130, 162, 65, 216, 254, 28, 173, 254, 103, 121, 38, 202, 224, 170, 188, 103, 213, 173, 126, 110, 58, 100, 210, 54, 168, 22, 228, 26, 33, 239, 34, 249, 245, 58, 126, 158, 150, 254, 52, 57, 231, 187, 130, 14, 22, 154, 56, 4, 41, 1, 32, 85, 253, 126, 125, 109, 115, 232, 228, 153, 223], - [244, 71, 131, 71, 159, 62, 136, 189, 130, 61, 104, 172, 48, 130, 177, 59, 93, 107, 168, 225, 54, 154, 63, 31, 110, 59, 4, 212, 79, 21, 133, 121, 115, 177, 184, 152, 82, 247, 96, 1, 55, 99, 1, 58, 40, 242, 248, 10, 154, 127, 38, 33, 30, 162, 228, 70, 180, 229, 111, 210, 71, 238, 58, 66], - [52, 39, 10, 147, 36, 16, 79, 6, 131, 112, 34, 29, 137, 211, 21, 102, 222, 203, 47, 97, 249, 38, 53, 27, 213, 172, 160, 36, 244, 45, 132, 162, 201, 40, 121, 33, 185, 135, 68, 152, 241, 44, 138, 255, 35, 193, 17, 218, 39, 172, 104, 90, 205, 22, 80, 210, 17, 12, 226, 183, 72, 24, 18, 34], - [234, 206, 178, 223, 162, 34, 117, 9, 106, 37, 45, 85, 102, 64, 175, 123, 177, 170, 239, 160, 11, 11, 235, 153, 171, 82, 63, 250, 176, 187, 221, 142, 59, 109, 126, 242, 88, 198, 200, 99, 98, 7, 154, 40, 42, 31, 158, 177, 146, 21, 203, 150, 138, 61, 156, 29, 208, 76, 216, 30, 103, 232, 155, 91], - [23, 176, 241, 164, 59, 116, 153, 75, 217, 123, 6, 223, 251, 166, 239, 98, 15, 57, 127, 145, 152, 137, 69, 194, 16, 138, 249, 37, 59, 178, 197, 151, 199, 215, 212, 237, 186, 236, 93, 253, 162, 131, 242, 29, 95, 219, 49, 78, 5, 160, 128, 117, 162, 233, 166, 101, 151, 200, 222, 230, 184, 13, 221, 86] - ], - "iv": null, - "key": [75, 85, 249, 140, 3, 27, 9, 74, 255, 13, 42, 120, 203, 166, 147, 198, 197, 54, 158, 53, 15, 244, 79, 6], - "modeOfOperation": "ecb", - "plaintext": [ - [57, 126, 239, 10, 108, 57, 221, 36, 67, 32, 75, 126, 51, 47, 173, 240, 98, 88, 99, 152, 3, 49, 98, 101, 164, 59, 150, 150, 87, 4, 77, 39, 1, 216, 129, 90, 252, 13, 214, 186, 154, 15, 253, 128, 7, 92, 127, 92, 181, 31, 137, 72, 145, 81, 135, 130, 18, 193, 25, 130, 233, 204, 208, 63], - [123, 192, 239, 95, 224, 207, 204, 87, 94, 56, 161, 172, 74, 199, 247, 164, 11, 187, 202, 254, 24, 117, 28, 1, 126, 125, 112, 219, 161, 34, 64, 32, 5, 169, 248, 163, 200, 38, 10, 238, 189, 78, 134, 250, 231, 236, 103, 173, 35, 96, 138, 143, 86, 196, 13, 82, 214, 202, 188, 206, 202, 84, 14, 244], - [191, 0, 58, 164, 1, 158, 246, 217, 18, 180, 47, 27, 87, 175, 169, 227, 239, 121, 163, 183, 144, 36, 120, 117, 185, 220, 83, 149, 123, 253, 40, 233, 12, 127, 147, 100, 14, 25, 1, 156, 18, 43, 177, 170, 228, 64, 79, 49, 254, 61, 230, 185, 226, 139, 241, 248, 218, 208, 128, 3, 155, 237, 54, 142], - [38, 194, 201, 41, 101, 168, 40, 24, 214, 233, 240, 29, 7, 56, 243, 223, 31, 194, 125, 183, 26, 124, 18, 234, 235, 201, 145, 49, 106, 133, 204, 37, 184, 48, 43, 4, 166, 159, 120, 3, 159, 141, 80, 87, 156, 241, 52, 250, 156, 7, 216, 17, 91, 185, 247, 150, 68, 231, 114, 135, 87, 182, 228, 236], - [102, 158, 110, 114, 220, 52, 242, 182, 132, 192, 18, 2, 34, 13, 66, 11, 13, 139, 2, 57, 141, 12, 77, 241, 226, 94, 133, 137, 152, 30, 106, 105, 65, 140, 46, 90, 176, 79, 208, 100, 240, 16, 213, 122, 89, 78, 141, 27, 37, 243, 67, 45, 191, 81, 56, 94, 217, 125, 25, 38, 146, 104, 144, 144], - [15, 246, 20, 235, 179, 92, 176, 115, 71, 40, 76, 119, 65, 6, 155, 239, 166, 122, 157, 87, 121, 212, 243, 99, 180, 239, 52, 51, 195, 243, 16, 225, 147, 127, 137, 195, 211, 84, 104, 182, 67, 185, 197, 28, 253, 17, 12, 251, 13, 130, 97, 75, 51, 137, 116, 131, 240, 47, 121, 1, 252, 212, 107, 146] - ], - "segmentSize": null - }, - { - "encrypted": [ - [162, 170, 167, 117, 49, 42, 71, 96, 198, 70, 116, 163, 205, 215, 33, 87, 56, 131, 177, 180, 118, 113, 151, 6, 140, 99, 216, 20, 218, 179, 246, 42, 8, 118, 222, 131, 132, 61, 245, 119, 69, 199, 37, 144, 103, 121, 200, 18, 221, 79, 14, 20, 168, 247, 141, 148, 24, 31, 74, 224, 247, 2, 104, 173], - [166, 177, 166, 101, 142, 141, 170, 175, 78, 212, 241, 125, 162, 74, 249, 228, 182, 11, 251, 110, 113, 192, 60, 217, 48, 75, 55, 51, 252, 207, 102, 34, 234, 171, 34, 255, 136, 237, 9, 181, 210, 223, 29, 41, 196, 72, 206, 129, 183, 189, 126, 130, 94, 107, 178, 237, 85, 167, 12, 59, 221, 61, 95, 43], - [204, 46, 152, 60, 185, 129, 18, 75, 124, 149, 122, 108, 183, 220, 88, 132, 255, 109, 148, 222, 98, 141, 14, 55, 88, 165, 176, 19, 152, 180, 71, 214, 81, 44, 23, 237, 196, 81, 80, 240, 42, 58, 159, 42, 31, 195, 109, 227, 93, 249, 227, 86, 134, 79, 106, 136, 145, 162, 89, 33, 179, 125, 7, 26], - [202, 118, 237, 148, 168, 8, 49, 182, 69, 62, 157, 203, 109, 112, 191, 172, 19, 11, 188, 148, 72, 133, 128, 193, 119, 124, 16, 137, 166, 5, 206, 19, 117, 52, 209, 33, 14, 122, 242, 243, 55, 49, 67, 76, 107, 53, 248, 76, 21, 1, 192, 212, 33, 25, 167, 181, 75, 166, 155, 35, 116, 198, 27, 3], - [103, 110, 148, 148, 148, 80, 29, 126, 201, 76, 125, 181, 116, 49, 224, 177, 176, 62, 10, 106, 225, 63, 90, 56, 93, 251, 61, 52, 161, 8, 178, 7, 55, 44, 120, 52, 108, 69, 91, 200, 115, 170, 17, 72, 159, 233, 84, 107, 161, 21, 226, 170, 43, 53, 109, 185, 103, 159, 242, 253, 191, 65, 61, 89], - [72, 98, 230, 176, 34, 118, 210, 202, 242, 237, 216, 227, 127, 14, 86, 131, 19, 164, 225, 76, 28, 5, 210, 205, 31, 155, 143, 27, 0, 190, 201, 245, 167, 137, 59, 62, 48, 2, 94, 236, 171, 118, 169, 8, 186, 135, 103, 25, 83, 9, 28, 235, 161, 161, 136, 142, 202, 225, 103, 149, 52, 8, 14, 149], - [143, 163, 116, 225, 42, 163, 118, 52, 195, 198, 27, 226, 55, 225, 168, 232, 225, 2, 139, 185, 97, 18, 230, 90, 0, 47, 89, 179, 37, 74, 239, 67, 132, 123, 131, 85, 139, 85, 107, 142, 228, 26, 8, 109, 77, 110, 206, 234, 226, 9, 235, 155, 203, 21, 56, 148, 130, 97, 245, 41, 65, 9, 123, 116] - ], - "iv": null, - "key": [140, 16, 205, 108, 202, 146, 39, 216, 97, 59, 5, 230, 8, 122, 4, 205, 66, 150, 109, 10, 185, 102, 3, 108], - "modeOfOperation": "ecb", - "plaintext": [ - [30, 173, 225, 117, 37, 91, 52, 115, 185, 168, 190, 80, 105, 201, 50, 227, 79, 147, 64, 46, 174, 217, 236, 102, 193, 119, 15, 194, 238, 42, 100, 239, 212, 86, 127, 178, 179, 41, 82, 96, 55, 143, 175, 199, 216, 231, 224, 107, 199, 34, 142, 96, 45, 74, 196, 242, 21, 216, 204, 202, 44, 33, 139, 181], - [190, 59, 145, 114, 35, 249, 48, 227, 97, 189, 50, 232, 179, 81, 213, 197, 132, 37, 155, 96, 108, 156, 114, 122, 172, 35, 143, 8, 176, 187, 103, 30, 11, 187, 184, 130, 126, 210, 250, 77, 221, 19, 184, 70, 207, 133, 9, 217, 249, 171, 239, 89, 117, 149, 252, 20, 107, 173, 218, 213, 41, 247, 138, 187], - [177, 232, 132, 204, 148, 196, 170, 88, 119, 248, 91, 40, 185, 3, 217, 6, 214, 125, 96, 50, 228, 208, 188, 71, 251, 41, 3, 168, 91, 233, 117, 175, 75, 16, 157, 145, 126, 64, 83, 85, 55, 102, 150, 196, 229, 116, 79, 125, 157, 151, 143, 183, 104, 43, 99, 205, 215, 250, 36, 205, 203, 68, 243, 225], - [102, 22, 133, 67, 147, 129, 19, 163, 5, 238, 102, 244, 249, 131, 136, 233, 34, 240, 175, 230, 19, 41, 236, 179, 57, 253, 191, 208, 93, 139, 150, 74, 213, 172, 14, 42, 240, 104, 241, 78, 226, 233, 184, 85, 208, 88, 118, 80, 90, 209, 225, 201, 104, 99, 185, 141, 197, 164, 2, 248, 26, 22, 54, 76], - [78, 180, 168, 42, 231, 49, 94, 221, 136, 176, 103, 209, 89, 167, 122, 140, 51, 31, 188, 209, 59, 109, 244, 174, 158, 94, 224, 38, 244, 81, 242, 142, 136, 218, 197, 192, 105, 39, 163, 10, 5, 234, 149, 19, 251, 173, 247, 45, 20, 198, 81, 186, 128, 62, 1, 212, 113, 200, 219, 136, 116, 76, 90, 120], - [177, 142, 236, 198, 212, 128, 92, 3, 224, 183, 54, 166, 112, 191, 4, 15, 200, 4, 247, 29, 35, 234, 3, 55, 20, 130, 235, 106, 85, 33, 11, 160, 3, 104, 142, 248, 73, 44, 162, 179, 36, 84, 120, 175, 48, 249, 163, 132, 247, 0, 232, 174, 48, 14, 118, 116, 199, 90, 63, 135, 205, 159, 140, 124], - [245, 189, 240, 76, 82, 62, 134, 155, 55, 132, 129, 221, 105, 6, 203, 32, 87, 219, 94, 80, 195, 201, 204, 175, 148, 118, 53, 172, 75, 163, 80, 136, 34, 51, 89, 11, 194, 4, 7, 0, 178, 97, 245, 157, 65, 12, 126, 206, 200, 115, 83, 143, 131, 63, 80, 75, 238, 158, 25, 235, 211, 184, 158, 139] - ], - "segmentSize": null - }, - { - "encrypted": [ - [] - ], - "iv": null, - "key": [74, 196, 109, 220, 93, 150, 110, 192, 33, 196, 18, 135, 56, 50, 134, 131, 184, 165, 59, 235, 167, 81, 105, 85, 221, 0, 249, 116, 197, 195, 86, 216], - "modeOfOperation": "ecb", - "plaintext": [ - [] - ], - "segmentSize": null - }, - { - "encrypted": [ - [245, 21, 127, 108, 26, 199, 50, 152, 114, 254, 58, 46, 117, 22, 110, 186], - [20, 202, 218, 104, 85, 251, 2, 80, 75, 250, 184, 164, 67, 61, 161, 140] - ], - "iv": null, - "key": [245, 19, 7, 110, 132, 129, 245, 55, 79, 204, 42, 198, 209, 250, 36, 198, 158, 211, 77, 217, 52, 77, 57, 146, 169, 29, 44, 227, 62, 218, 177, 240], - "modeOfOperation": "ecb", - "plaintext": [ - [113, 74, 40, 4, 35, 176, 33, 140, 204, 151, 78, 121, 144, 40, 208, 217], - [127, 92, 246, 104, 67, 37, 99, 170, 14, 166, 61, 29, 220, 73, 177, 131] - ], - "segmentSize": null - }, - { - "encrypted": [ - [192, 66, 50, 71, 183, 27, 4, 101, 98, 230, 195, 45, 92, 225, 99, 67], - [15, 82, 51, 228, 241, 188, 130, 192, 254, 240, 150, 230, 35, 207, 208, 156], - [214, 59, 44, 155, 245, 63, 240, 115, 187, 36, 209, 59, 243, 226, 12, 86] - ], - "iv": null, - "key": [52, 187, 98, 11, 101, 224, 1, 72, 39, 90, 164, 38, 28, 142, 188, 231, 95, 78, 41, 214, 56, 41, 209, 205, 175, 63, 19, 100, 49, 223, 27, 87], - "modeOfOperation": "ecb", - "plaintext": [ - [99, 46, 64, 119, 152, 77, 38, 200, 178, 220, 132, 154, 119, 163, 248, 0], - [206, 138, 243, 176, 177, 162, 187, 89, 40, 104, 34, 110, 196, 193, 131, 252], - [61, 54, 226, 220, 199, 128, 66, 35, 62, 45, 242, 142, 177, 27, 152, 151] - ], - "segmentSize": null - }, - { - "encrypted": [ - [207, 220, 194, 77, 177, 158, 163, 49, 79, 160, 224, 80, 85, 201, 57, 240, 158, 173, 214, 62, 22, 7, 55, 59, 191, 89, 74, 242, 250, 217, 28, 154], - [100, 42, 87, 210, 86, 140, 133, 230, 9, 112, 187, 215, 77, 230, 250, 172, 245, 81, 128, 240, 88, 19, 185, 227, 123, 10, 159, 2, 82, 93, 5, 85], - [215, 186, 134, 191, 234, 136, 66, 111, 132, 221, 250, 122, 103, 52, 75, 187, 161, 26, 134, 187, 165, 236, 19, 159, 106, 231, 227, 90, 18, 3, 118, 142], - [210, 162, 165, 17, 233, 77, 4, 137, 45, 20, 248, 115, 215, 23, 16, 29, 165, 185, 94, 49, 74, 216, 140, 242, 207, 69, 8, 57, 233, 241, 131, 173] - ], - "iv": null, - "key": [227, 70, 168, 116, 25, 190, 28, 80, 122, 185, 106, 30, 32, 206, 255, 221, 81, 168, 6, 93, 181, 248, 42, 213, 18, 155, 223, 201, 119, 160, 213, 125], - "modeOfOperation": "ecb", - "plaintext": [ - [70, 8, 193, 155, 216, 105, 3, 252, 255, 30, 8, 185, 148, 192, 111, 239, 198, 209, 249, 212, 167, 179, 12, 128, 250, 4, 11, 237, 35, 121, 231, 109], - [98, 214, 47, 195, 98, 58, 52, 236, 27, 4, 140, 58, 211, 44, 136, 211, 73, 1, 114, 174, 196, 103, 80, 73, 9, 81, 71, 164, 88, 115, 143, 171], - [111, 144, 112, 130, 15, 210, 101, 72, 216, 235, 107, 97, 239, 160, 97, 235, 138, 149, 1, 247, 252, 126, 32, 192, 146, 109, 33, 153, 241, 227, 190, 212], - [27, 3, 64, 137, 8, 143, 32, 227, 246, 238, 223, 20, 91, 22, 177, 151, 187, 153, 120, 21, 57, 149, 69, 244, 160, 216, 10, 170, 250, 185, 40, 99] - ], - "segmentSize": null - }, - { - "encrypted": [ - [38, 135, 18, 180, 185, 4, 96, 217, 183, 158, 234, 199, 234, 8, 137, 219, 154, 7, 29, 255, 118, 20, 23, 219, 153, 55, 29, 248, 165, 153, 179, 146, 216, 194, 60, 144, 215, 195, 135, 181, 16, 71, 238, 158, 17, 82, 237, 206], - [102, 110, 228, 164, 238, 160, 49, 106, 187, 231, 90, 0, 217, 252, 213, 10, 248, 93, 233, 202, 117, 85, 32, 113, 234, 132, 127, 147, 102, 53, 68, 61, 133, 39, 183, 5, 227, 12, 72, 114, 88, 3, 230, 60, 82, 228, 112, 51], - [147, 225, 201, 22, 112, 129, 41, 227, 122, 56, 229, 204, 101, 161, 91, 170, 215, 72, 240, 228, 49, 166, 146, 74, 191, 2, 228, 205, 115, 110, 182, 197, 201, 218, 162, 242, 144, 93, 35, 230, 85, 105, 51, 15, 203, 126, 216, 154], - [117, 1, 120, 118, 168, 243, 196, 70, 44, 203, 54, 14, 184, 144, 89, 25, 152, 106, 130, 102, 163, 35, 225, 211, 125, 93, 158, 242, 227, 4, 166, 102, 152, 215, 33, 82, 74, 182, 9, 196, 255, 9, 100, 65, 43, 137, 150, 237], - [74, 12, 23, 81, 112, 73, 225, 20, 80, 16, 66, 230, 175, 176, 25, 205, 211, 128, 166, 189, 56, 134, 45, 76, 237, 99, 50, 141, 37, 180, 113, 2, 203, 179, 215, 96, 55, 120, 243, 106, 106, 155, 32, 142, 23, 204, 31, 248] - ], - "iv": null, - "key": [214, 10, 129, 34, 247, 33, 45, 119, 220, 9, 161, 117, 80, 146, 227, 50, 204, 71, 252, 129, 54, 110, 121, 190, 0, 201, 48, 195, 18, 109, 140, 6], - "modeOfOperation": "ecb", - "plaintext": [ - [253, 17, 63, 61, 58, 80, 127, 165, 159, 228, 219, 245, 240, 174, 93, 73, 85, 43, 81, 234, 122, 237, 70, 155, 212, 41, 68, 37, 108, 34, 150, 239, 216, 62, 134, 56, 145, 231, 164, 200, 239, 187, 105, 233, 80, 131, 73, 56], - [141, 164, 166, 76, 180, 207, 230, 178, 133, 10, 78, 1, 89, 112, 88, 232, 0, 123, 124, 118, 127, 64, 113, 21, 129, 74, 162, 168, 168, 39, 96, 243, 206, 186, 206, 60, 13, 220, 18, 120, 73, 236, 232, 117, 172, 145, 244, 80], - [21, 191, 184, 29, 172, 45, 134, 153, 41, 58, 119, 237, 238, 115, 111, 145, 3, 61, 167, 73, 51, 41, 40, 25, 205, 35, 158, 172, 192, 227, 63, 52, 226, 181, 174, 169, 61, 83, 241, 186, 158, 57, 90, 160, 202, 19, 216, 45], - [13, 108, 49, 69, 13, 99, 64, 104, 151, 125, 236, 185, 199, 118, 19, 11, 103, 53, 129, 22, 20, 168, 226, 119, 36, 88, 69, 112, 103, 53, 77, 152, 127, 3, 22, 224, 213, 228, 108, 115, 151, 22, 226, 45, 104, 110, 126, 16], - [157, 135, 140, 42, 211, 121, 229, 249, 109, 149, 133, 206, 39, 88, 167, 156, 126, 226, 135, 172, 221, 14, 54, 98, 227, 98, 19, 212, 91, 201, 78, 112, 87, 197, 202, 108, 216, 136, 126, 38, 231, 96, 61, 70, 70, 237, 247, 112] - ], - "segmentSize": null - }, - { - "encrypted": [ - [125, 171, 208, 112, 29, 175, 14, 186, 183, 15, 61, 20, 175, 75, 59, 128, 57, 93, 165, 102, 30, 141, 52, 238, 208, 191, 201, 144, 168, 250, 165, 205, 235, 46, 133, 78, 40, 183, 98, 67, 219, 13, 133, 159, 110, 123, 248, 28, 91, 35, 165, 65, 135, 0, 111, 197, 137, 173, 169, 87, 153, 68, 28, 233], - [98, 160, 217, 70, 181, 37, 249, 120, 220, 172, 56, 181, 72, 144, 199, 243, 6, 164, 159, 202, 182, 65, 133, 220, 104, 35, 65, 76, 150, 233, 163, 150, 165, 27, 253, 194, 135, 173, 128, 95, 172, 230, 85, 143, 10, 168, 85, 19, 39, 96, 95, 240, 166, 90, 90, 181, 205, 137, 155, 37, 126, 113, 135, 213], - [166, 119, 62, 244, 7, 201, 106, 79, 120, 119, 112, 87, 67, 97, 26, 205, 63, 242, 44, 210, 217, 177, 221, 108, 156, 202, 12, 183, 206, 134, 254, 140, 244, 108, 86, 153, 203, 201, 175, 171, 146, 241, 210, 193, 178, 18, 4, 247, 211, 241, 25, 225, 83, 25, 165, 167, 143, 125, 229, 255, 84, 174, 212, 227], - [46, 140, 61, 131, 92, 213, 7, 237, 108, 226, 254, 125, 238, 187, 194, 107, 155, 190, 84, 10, 238, 106, 162, 164, 81, 167, 187, 162, 147, 215, 10, 31, 238, 34, 118, 129, 78, 42, 46, 15, 30, 5, 98, 168, 186, 184, 247, 150, 145, 226, 143, 154, 178, 42, 151, 53, 97, 47, 36, 144, 158, 123, 245, 220], - [223, 204, 30, 104, 66, 254, 173, 163, 116, 17, 72, 38, 112, 188, 69, 167, 186, 86, 238, 198, 124, 134, 108, 59, 7, 154, 226, 247, 192, 1, 130, 124, 86, 253, 15, 42, 213, 41, 102, 220, 5, 211, 139, 168, 212, 94, 243, 160, 253, 47, 12, 118, 20, 71, 35, 71, 164, 42, 115, 219, 219, 127, 194, 78], - [148, 171, 210, 246, 181, 132, 248, 211, 150, 221, 2, 65, 98, 246, 169, 86, 178, 162, 171, 209, 157, 229, 178, 149, 112, 57, 156, 62, 243, 152, 120, 24, 193, 221, 47, 210, 132, 151, 195, 253, 91, 118, 44, 62, 188, 103, 32, 211, 190, 159, 94, 35, 141, 115, 215, 88, 0, 121, 7, 113, 18, 130, 104, 248] - ], - "iv": null, - "key": [38, 151, 212, 135, 176, 26, 63, 111, 55, 29, 232, 237, 180, 108, 83, 119, 145, 45, 13, 66, 124, 33, 225, 49, 34, 132, 248, 136, 213, 131, 14, 17], - "modeOfOperation": "ecb", - "plaintext": [ - [29, 230, 22, 93, 165, 254, 88, 237, 64, 109, 246, 22, 53, 218, 19, 57, 110, 120, 196, 185, 204, 122, 76, 36, 251, 27, 199, 231, 115, 122, 161, 103, 92, 238, 109, 73, 187, 126, 27, 41, 64, 136, 39, 162, 223, 145, 101, 208, 177, 158, 37, 64, 51, 35, 222, 142, 15, 22, 21, 83, 168, 93, 17, 105], - [251, 198, 232, 27, 135, 95, 94, 16, 179, 87, 165, 114, 200, 1, 159, 181, 64, 17, 239, 84, 251, 224, 152, 238, 103, 161, 184, 49, 62, 195, 201, 182, 30, 69, 3, 230, 65, 176, 25, 120, 212, 130, 14, 82, 198, 89, 124, 252, 83, 65, 194, 50, 102, 38, 151, 104, 197, 160, 217, 227, 22, 184, 181, 50], - [161, 110, 154, 16, 80, 206, 149, 25, 41, 34, 219, 139, 51, 45, 86, 201, 22, 226, 124, 0, 26, 37, 254, 48, 62, 140, 212, 216, 91, 141, 229, 221, 142, 116, 5, 204, 129, 177, 33, 84, 134, 238, 11, 101, 183, 131, 108, 89, 218, 128, 15, 88, 114, 115, 134, 78, 195, 150, 16, 161, 23, 101, 25, 8], - [105, 53, 28, 53, 63, 41, 109, 107, 139, 116, 163, 203, 95, 198, 98, 116, 11, 174, 182, 168, 98, 98, 59, 92, 121, 57, 58, 18, 251, 44, 234, 119, 253, 186, 247, 36, 138, 28, 252, 226, 146, 107, 74, 232, 249, 4, 241, 64, 107, 156, 214, 96, 42, 127, 101, 221, 2, 70, 19, 216, 2, 70, 120, 92], - [110, 186, 184, 173, 17, 92, 219, 168, 22, 206, 227, 126, 30, 181, 11, 89, 130, 122, 248, 18, 132, 34, 140, 102, 8, 209, 76, 85, 117, 141, 220, 48, 32, 137, 4, 185, 133, 118, 12, 34, 63, 42, 47, 221, 26, 126, 58, 205, 169, 112, 17, 137, 191, 30, 194, 96, 180, 89, 58, 52, 182, 112, 105, 142], - [5, 104, 215, 13, 119, 85, 44, 195, 162, 255, 82, 113, 6, 168, 12, 252, 4, 255, 124, 4, 4, 8, 111, 203, 63, 145, 51, 91, 245, 105, 194, 193, 44, 230, 96, 164, 237, 154, 254, 183, 187, 50, 125, 156, 19, 124, 102, 92, 143, 9, 199, 103, 112, 109, 198, 79, 140, 1, 220, 37, 89, 164, 61, 102] - ], - "segmentSize": null - }, - { - "encrypted": [ - [150, 81, 143, 14, 30, 75, 182, 253, 249, 147, 14, 26, 245, 189, 222, 208, 187, 27, 189, 90, 194, 131, 222, 24, 55, 198, 77, 158, 98, 63, 219, 85, 3, 188, 167, 158, 212, 71, 227, 89, 43, 77, 239, 95, 203, 138, 0, 128, 242, 90, 121, 25, 118, 255, 8, 85, 21, 215, 222, 216, 220, 117, 199, 240], - [73, 219, 203, 4, 87, 251, 232, 161, 220, 1, 157, 232, 1, 38, 1, 229, 242, 82, 0, 190, 255, 169, 7, 196, 208, 73, 227, 24, 33, 253, 55, 83, 141, 100, 190, 70, 156, 41, 195, 24, 135, 244, 48, 72, 224, 88, 168, 106, 12, 234, 77, 133, 33, 181, 41, 162, 31, 62, 83, 128, 7, 102, 126, 163], - [56, 167, 70, 85, 215, 23, 222, 20, 176, 253, 99, 108, 50, 9, 199, 199, 209, 147, 108, 90, 243, 37, 86, 59, 225, 4, 100, 249, 5, 36, 169, 139, 161, 232, 233, 27, 36, 42, 44, 97, 253, 143, 99, 194, 111, 38, 157, 105, 175, 252, 164, 158, 217, 57, 167, 239, 99, 236, 221, 149, 99, 194, 200, 208], - [74, 145, 171, 150, 199, 75, 165, 162, 103, 190, 89, 255, 175, 70, 18, 16, 230, 244, 80, 165, 109, 84, 16, 37, 194, 11, 120, 35, 121, 148, 177, 161, 56, 142, 139, 38, 183, 10, 195, 181, 61, 161, 75, 254, 63, 195, 152, 94, 247, 75, 81, 102, 186, 3, 131, 144, 213, 69, 123, 140, 98, 189, 126, 90], - [55, 117, 166, 209, 92, 0, 191, 65, 100, 18, 241, 108, 124, 167, 195, 102, 69, 145, 220, 30, 11, 101, 39, 57, 251, 0, 107, 176, 39, 242, 164, 28, 165, 190, 175, 195, 46, 223, 237, 162, 133, 243, 246, 241, 116, 161, 131, 224, 130, 113, 23, 9, 201, 246, 9, 11, 190, 24, 119, 207, 142, 2, 103, 39], - [98, 118, 11, 255, 152, 110, 130, 18, 1, 66, 50, 161, 89, 219, 251, 202, 229, 49, 255, 194, 120, 177, 74, 77, 46, 218, 129, 16, 6, 17, 155, 221, 153, 61, 227, 119, 25, 83, 226, 231, 213, 158, 49, 216, 133, 106, 186, 12, 183, 193, 130, 252, 168, 249, 84, 26, 176, 224, 170, 140, 203, 110, 236, 236], - [207, 133, 119, 141, 160, 209, 214, 127, 146, 56, 167, 6, 248, 181, 25, 174, 124, 210, 106, 91, 146, 120, 122, 161, 148, 197, 243, 181, 201, 255, 172, 134, 178, 39, 135, 33, 213, 162, 251, 88, 157, 76, 221, 86, 251, 160, 105, 10, 207, 166, 40, 8, 77, 133, 252, 0, 64, 147, 67, 232, 199, 57, 66, 228] - ], - "iv": null, - "key": [48, 66, 117, 237, 40, 21, 255, 74, 113, 101, 103, 83, 224, 29, 198, 6, 105, 217, 157, 116, 66, 24, 75, 26, 102, 155, 123, 160, 87, 197, 219, 116], - "modeOfOperation": "ecb", - "plaintext": [ - [106, 51, 105, 190, 46, 17, 137, 167, 64, 60, 156, 31, 78, 243, 159, 222, 171, 83, 163, 242, 12, 16, 215, 9, 10, 158, 42, 124, 72, 64, 70, 13, 170, 247, 188, 193, 117, 96, 33, 223, 184, 234, 20, 108, 116, 98, 76, 18, 211, 137, 42, 76, 73, 4, 136, 76, 205, 161, 35, 214, 144, 195, 145, 49], - [140, 49, 38, 234, 5, 254, 36, 10, 201, 177, 69, 189, 74, 209, 22, 132, 205, 91, 67, 105, 12, 104, 235, 6, 53, 236, 214, 219, 47, 82, 20, 72, 106, 191, 155, 72, 107, 32, 231, 180, 160, 209, 29, 99, 199, 204, 195, 235, 233, 208, 72, 122, 6, 173, 86, 99, 36, 89, 115, 138, 174, 161, 43, 156], - [253, 235, 134, 71, 190, 36, 203, 178, 6, 145, 239, 41, 58, 150, 155, 241, 70, 149, 240, 226, 217, 102, 72, 24, 211, 52, 58, 132, 106, 150, 15, 154, 49, 53, 75, 99, 212, 20, 225, 139, 60, 179, 24, 24, 132, 190, 65, 175, 179, 135, 131, 30, 248, 202, 188, 181, 135, 93, 98, 252, 83, 122, 243, 101], - [9, 11, 223, 225, 212, 90, 128, 239, 161, 179, 69, 193, 177, 199, 185, 187, 160, 2, 189, 78, 220, 179, 26, 28, 128, 192, 214, 144, 79, 206, 10, 143, 179, 110, 46, 59, 64, 159, 85, 175, 3, 71, 129, 50, 69, 246, 103, 142, 55, 108, 175, 49, 39, 20, 2, 65, 36, 47, 41, 216, 241, 115, 78, 207], - [35, 60, 150, 236, 194, 209, 253, 141, 98, 194, 25, 216, 214, 216, 83, 83, 162, 205, 140, 213, 91, 209, 109, 246, 205, 197, 58, 41, 16, 68, 161, 58, 252, 129, 189, 166, 155, 37, 85, 201, 166, 125, 249, 79, 246, 216, 99, 49, 198, 166, 83, 127, 98, 20, 193, 128, 140, 119, 254, 12, 163, 20, 208, 84], - [117, 72, 173, 107, 78, 59, 150, 251, 142, 159, 98, 193, 113, 105, 32, 2, 252, 138, 38, 202, 116, 149, 178, 12, 235, 87, 217, 116, 115, 197, 6, 143, 141, 213, 130, 91, 68, 27, 35, 54, 109, 54, 196, 156, 19, 158, 64, 129, 164, 235, 172, 50, 151, 163, 157, 218, 78, 85, 101, 14, 217, 121, 205, 250], - [118, 255, 103, 128, 166, 122, 235, 99, 82, 221, 95, 6, 222, 24, 130, 100, 53, 85, 148, 46, 188, 39, 161, 169, 31, 198, 35, 137, 192, 138, 172, 175, 48, 67, 167, 25, 214, 137, 224, 225, 109, 251, 238, 149, 5, 61, 117, 142, 134, 79, 220, 207, 237, 198, 195, 89, 92, 19, 180, 112, 252, 204, 199, 35] - ], - "segmentSize": null - }, - { - "encrypted": [ - [204, 121, 46, 192, 112, 201, 9, 214, 29, 79, 35, 174, 232, 182, 89, 52] - ], - "iv": [78, 53, 6, 24, 69, 84, 245, 182, 150, 78, 127, 149, 208, 166, 241, 224], - "key": [156, 254, 114, 135, 172, 211, 219, 127, 96, 44, 230, 196, 215, 195, 197, 35], - "modeOfOperation": "ofb", - "plaintext": [ - [108, 237, 216, 229, 31, 202, 124, 25, 76, 95, 52, 191, 161, 96, 240, 184] - ], - "segmentSize": null - }, - { - "encrypted": [ - [13, 94, 64, 58, 60, 18, 161, 119, 230, 122, 16, 4, 239, 112, 82, 183], - [157, 2, 249, 113, 18, 14, 183, 20, 237, 16, 216, 106, 195, 40, 190, 0] - ], - "iv": [99, 64, 75, 154, 237, 86, 190, 171, 26, 130, 163, 162, 42, 100, 244, 17], - "key": [25, 13, 142, 21, 114, 43, 23, 68, 33, 217, 193, 250, 203, 250, 123, 247], - "modeOfOperation": "ofb", - "plaintext": [ - [143, 0, 113, 217, 121, 214, 249, 76, 181, 139, 252, 175, 244, 129, 108, 236], - [111, 185, 26, 48, 30, 205, 217, 223, 87, 249, 206, 10, 79, 66, 211, 47] - ], - "segmentSize": null - }, - { - "encrypted": [ - [208, 233, 254, 133, 79, 204, 254, 78, 19, 155, 107, 146, 82, 86, 151, 88], - [81, 221, 52, 117, 161, 130, 119, 215, 131, 161, 71, 74, 227, 83, 147, 210], - [94, 122, 220, 93, 173, 166, 1, 80, 65, 19, 155, 177, 50, 126, 239, 40] - ], - "iv": [72, 109, 173, 26, 155, 70, 171, 61, 11, 17, 194, 115, 140, 248, 225, 235], - "key": [187, 243, 155, 131, 0, 90, 23, 183, 99, 188, 20, 252, 107, 251, 46, 3], - "modeOfOperation": "ofb", - "plaintext": [ - [97, 2, 113, 25, 128, 160, 187, 148, 110, 135, 189, 92, 156, 170, 132, 132], - [126, 229, 126, 7, 84, 5, 8, 202, 229, 23, 199, 222, 16, 86, 204, 210], - [81, 145, 64, 168, 28, 247, 213, 117, 6, 106, 185, 115, 44, 78, 202, 81] - ], - "segmentSize": null - }, - { - "encrypted": [ - [212, 244, 187, 80, 185, 139, 27, 129, 31, 237, 10, 187, 179, 115, 36, 176], - [178, 177, 23, 247, 67, 241, 75, 109, 123, 169, 0, 117, 82, 160, 222, 207], - [213, 147, 238, 223, 62, 244, 155, 8, 115, 199, 114, 169, 28, 104, 173, 100], - [124, 205, 15, 9, 64, 167, 71, 193, 84, 55, 217, 188, 193, 69, 69, 73] - ], - "iv": [226, 70, 185, 65, 96, 19, 168, 194, 238, 110, 87, 118, 31, 103, 163, 60], - "key": [2, 204, 240, 249, 135, 182, 101, 79, 235, 6, 242, 207, 192, 33, 198, 157], - "modeOfOperation": "ofb", - "plaintext": [ - [232, 185, 128, 76, 254, 222, 242, 187, 195, 28, 215, 84, 51, 84, 33, 34], - [103, 36, 42, 154, 27, 168, 245, 134, 133, 108, 39, 78, 176, 142, 153, 211], - [225, 141, 117, 111, 41, 93, 102, 38, 132, 186, 181, 200, 207, 181, 168, 102], - [120, 169, 74, 82, 111, 135, 177, 221, 99, 90, 191, 114, 38, 37, 108, 83] - ], - "segmentSize": null - }, - { - "encrypted": [ - [68, 250, 140, 229, 174, 85, 198, 13, 98, 215, 167, 127, 71, 62, 150, 165], - [172, 224, 28, 90, 241, 130, 127, 36, 96, 110, 254, 206, 221, 77, 114, 65], - [94, 50, 181, 95, 177, 147, 143, 173, 208, 244, 186, 10, 255, 49, 31, 57], - [4, 208, 128, 18, 100, 135, 68, 79, 109, 194, 135, 111, 94, 58, 200, 3], - [173, 182, 204, 116, 110, 71, 98, 241, 93, 197, 95, 238, 79, 97, 242, 80] - ], - "iv": [209, 161, 116, 63, 79, 113, 75, 138, 188, 75, 4, 188, 158, 243, 15, 167], - "key": [17, 229, 209, 157, 199, 190, 150, 65, 111, 249, 212, 235, 152, 154, 129, 61], - "modeOfOperation": "ofb", - "plaintext": [ - [47, 95, 27, 118, 118, 243, 147, 187, 228, 14, 47, 225, 136, 31, 220, 203], - [114, 60, 233, 209, 15, 83, 100, 240, 28, 57, 168, 137, 133, 188, 129, 170], - [82, 20, 58, 95, 216, 106, 165, 127, 174, 14, 227, 254, 82, 131, 168, 67], - [165, 135, 178, 168, 106, 182, 235, 215, 147, 166, 195, 238, 206, 28, 165, 229], - [159, 24, 251, 84, 31, 210, 100, 48, 140, 251, 246, 116, 204, 77, 190, 163] - ], - "segmentSize": null - }, - { - "encrypted": [ - [23, 201, 172, 146, 25, 186, 36, 103, 118, 175, 25, 210, 60, 153, 212, 168], - [182, 173, 195, 34, 109, 179, 28, 159, 68, 77, 187, 195, 215, 143, 43, 144], - [223, 91, 166, 124, 65, 104, 196, 254, 19, 172, 27, 154, 93, 35, 196, 0], - [120, 146, 77, 76, 98, 212, 100, 103, 71, 120, 253, 109, 201, 193, 151, 101], - [77, 103, 75, 243, 221, 125, 134, 123, 153, 135, 205, 219, 43, 96, 195, 207], - [232, 135, 49, 27, 189, 95, 240, 54, 146, 181, 158, 16, 119, 213, 43, 156] - ], - "iv": [191, 214, 93, 243, 122, 249, 39, 97, 103, 86, 31, 254, 45, 49, 80, 47], - "key": [122, 83, 153, 20, 130, 242, 84, 157, 93, 64, 37, 194, 107, 166, 137, 3], - "modeOfOperation": "ofb", - "plaintext": [ - [215, 238, 252, 77, 182, 164, 204, 76, 238, 120, 255, 145, 5, 97, 183, 219], - [247, 203, 178, 211, 229, 171, 24, 16, 1, 15, 123, 203, 39, 177, 168, 102], - [91, 166, 82, 216, 42, 203, 201, 153, 106, 103, 66, 6, 15, 196, 4, 53], - [47, 169, 241, 190, 183, 2, 235, 192, 143, 235, 72, 213, 33, 36, 74, 202], - [229, 135, 180, 235, 139, 1, 31, 122, 208, 221, 197, 34, 219, 179, 31, 122], - [24, 165, 36, 100, 134, 138, 253, 103, 144, 81, 204, 210, 83, 154, 113, 67] - ], - "segmentSize": null - }, - { - "encrypted": [ - [133, 207, 211, 112, 126, 24, 42, 104, 73, 19, 246, 31, 208, 37, 52, 147], - [57, 174, 186, 122, 207, 113, 39, 161, 95, 127, 85, 144, 102, 148, 123, 60], - [197, 68, 11, 238, 238, 68, 63, 212, 127, 10, 35, 204, 252, 104, 137, 68], - [49, 183, 96, 109, 204, 204, 126, 163, 72, 132, 187, 139, 235, 196, 164, 55], - [221, 223, 79, 15, 177, 30, 133, 2, 255, 183, 93, 74, 18, 206, 68, 245], - [128, 62, 13, 202, 156, 2, 45, 232, 160, 17, 233, 160, 134, 161, 169, 128], - [71, 106, 190, 64, 88, 57, 155, 102, 214, 124, 183, 116, 192, 64, 80, 56] - ], - "iv": [204, 113, 46, 109, 128, 164, 123, 14, 27, 246, 48, 24, 39, 153, 43, 43], - "key": [217, 52, 151, 82, 57, 1, 117, 159, 57, 71, 222, 102, 43, 31, 226, 195], - "modeOfOperation": "ofb", - "plaintext": [ - [216, 198, 120, 34, 46, 28, 145, 52, 25, 186, 19, 94, 14, 202, 127, 197], - [205, 17, 15, 13, 24, 181, 59, 50, 192, 74, 228, 237, 162, 190, 235, 18], - [112, 78, 98, 23, 218, 105, 130, 123, 47, 202, 151, 126, 118, 152, 109, 24], - [157, 237, 201, 155, 126, 109, 188, 1, 171, 210, 44, 86, 216, 101, 241, 220], - [8, 134, 116, 195, 175, 98, 59, 200, 9, 247, 90, 127, 112, 170, 167, 245], - [236, 68, 129, 155, 15, 25, 30, 225, 1, 111, 213, 191, 91, 191, 135, 133], - [174, 126, 143, 91, 9, 87, 40, 223, 109, 185, 208, 231, 184, 66, 228, 158] - ], - "segmentSize": null - }, - { - "encrypted": [ - [17, 137, 114, 51, 85, 173, 91, 105, 195, 212, 1, 83, 98, 205, 251, 82] - ], - "iv": [196, 16, 169, 120, 185, 106, 157, 90, 232, 185, 215, 38, 180, 101, 222, 15], - "key": [11, 181, 18, 39, 79, 73, 228, 22, 128, 25, 233, 68, 232, 11, 15, 51, 10, 163, 134, 181, 48, 173, 136, 110], - "modeOfOperation": "ofb", - "plaintext": [ - [80, 78, 85, 91, 161, 11, 228, 214, 51, 255, 77, 138, 47, 105, 128, 123] - ], - "segmentSize": null - }, - { - "encrypted": [ - [27, 198, 101, 58, 75, 201, 17, 27, 167, 66, 87, 121, 78, 25, 190, 148], - [124, 165, 124, 7, 137, 154, 237, 51, 229, 213, 3, 227, 116, 7, 155, 35] - ], - "iv": [74, 247, 237, 201, 29, 180, 18, 204, 39, 24, 242, 58, 95, 129, 97, 173], - "key": [56, 33, 245, 166, 220, 254, 140, 0, 101, 247, 130, 214, 203, 188, 72, 32, 78, 181, 60, 151, 146, 241, 67, 90], - "modeOfOperation": "ofb", - "plaintext": [ - [116, 48, 250, 246, 90, 124, 178, 204, 238, 105, 136, 98, 141, 236, 164, 8], - [238, 145, 186, 37, 10, 231, 34, 108, 58, 83, 43, 175, 40, 167, 49, 118] - ], - "segmentSize": null - }, - { - "encrypted": [ - [193, 85, 41, 149, 64, 98, 214, 54, 96, 40, 93, 212, 57, 110, 129, 238], - [156, 238, 219, 133, 33, 236, 60, 46, 246, 24, 53, 163, 103, 165, 128, 123], - [200, 211, 244, 65, 194, 214, 216, 133, 139, 110, 23, 21, 159, 251, 93, 8] - ], - "iv": [89, 54, 137, 112, 64, 131, 180, 207, 209, 73, 206, 169, 131, 175, 243, 96], - "key": [57, 78, 135, 158, 231, 18, 178, 249, 162, 218, 103, 195, 78, 45, 57, 196, 149, 117, 155, 143, 152, 25, 199, 127], - "modeOfOperation": "ofb", - "plaintext": [ - [30, 182, 56, 81, 94, 83, 102, 211, 50, 120, 236, 15, 226, 172, 191, 222], - [2, 190, 147, 223, 63, 245, 183, 20, 232, 184, 144, 72, 27, 184, 76, 180], - [105, 150, 74, 139, 116, 153, 132, 164, 95, 196, 167, 184, 183, 1, 34, 81] - ], - "segmentSize": null - }, - { - "encrypted": [ - [5, 101, 59, 241, 113, 128, 67, 228, 106, 80, 225, 249, 127, 236, 114, 58], - [191, 178, 82, 187, 253, 11, 57, 99, 49, 164, 113, 252, 8, 183, 193, 22], - [137, 62, 123, 227, 156, 108, 26, 158, 134, 246, 134, 18, 227, 41, 11, 163], - [222, 164, 48, 44, 202, 173, 133, 120, 233, 105, 62, 1, 194, 176, 63, 86] - ], - "iv": [71, 73, 118, 2, 165, 214, 199, 97, 161, 127, 215, 55, 203, 152, 47, 132], - "key": [25, 1, 231, 253, 227, 160, 198, 194, 43, 146, 168, 72, 148, 112, 242, 246, 214, 156, 7, 22, 245, 39, 246, 196], - "modeOfOperation": "ofb", - "plaintext": [ - [23, 29, 134, 10, 228, 18, 66, 53, 191, 89, 168, 248, 29, 109, 183, 47], - [10, 230, 28, 64, 103, 217, 65, 155, 2, 219, 250, 104, 55, 205, 224, 99], - [220, 4, 49, 168, 212, 160, 41, 102, 6, 138, 9, 145, 150, 6, 111, 253], - [165, 213, 195, 31, 210, 88, 225, 71, 251, 190, 241, 20, 16, 195, 35, 193] - ], - "segmentSize": null - }, - { - "encrypted": [ - [9, 101, 79, 161, 153, 178, 93, 67, 230, 5, 125, 240, 25, 173, 202, 182], - [78, 19, 229, 112, 247, 242, 49, 175, 65, 233, 246, 243, 231, 238, 231, 5], - [8, 168, 167, 229, 47, 109, 203, 139, 241, 160, 195, 240, 106, 104, 114, 17], - [194, 53, 98, 183, 114, 195, 21, 149, 228, 87, 7, 158, 148, 22, 180, 42], - [6, 118, 139, 147, 181, 242, 129, 6, 210, 39, 90, 117, 234, 59, 25, 178] - ], - "iv": [121, 156, 116, 139, 166, 249, 225, 236, 70, 25, 18, 102, 163, 33, 146, 100], - "key": [33, 246, 70, 192, 38, 79, 246, 72, 189, 143, 110, 12, 47, 180, 145, 26, 80, 108, 100, 194, 75, 164, 158, 178], - "modeOfOperation": "ofb", - "plaintext": [ - [237, 73, 235, 31, 183, 181, 183, 254, 178, 109, 65, 7, 66, 137, 162, 31], - [186, 74, 0, 58, 249, 82, 5, 211, 14, 130, 157, 50, 215, 202, 63, 94], - [216, 88, 67, 212, 25, 98, 201, 58, 216, 140, 163, 123, 250, 11, 184, 105], - [205, 77, 158, 168, 82, 36, 0, 184, 248, 135, 99, 143, 242, 250, 151, 197], - [159, 139, 148, 156, 251, 233, 173, 33, 244, 227, 77, 238, 116, 145, 51, 126] - ], - "segmentSize": null - }, - { - "encrypted": [ - [249, 235, 87, 109, 54, 84, 39, 33, 2, 41, 180, 30, 188, 120, 230, 66], - [193, 0, 210, 231, 120, 245, 214, 80, 230, 215, 56, 130, 95, 208, 187, 52], - [134, 181, 107, 78, 96, 76, 213, 210, 0, 255, 43, 121, 129, 236, 187, 181], - [242, 171, 231, 130, 26, 27, 226, 229, 249, 222, 90, 205, 108, 96, 194, 50], - [160, 177, 235, 185, 197, 192, 14, 41, 225, 13, 87, 23, 237, 172, 217, 47], - [98, 2, 81, 230, 51, 69, 240, 61, 39, 57, 111, 129, 9, 68, 124, 146] - ], - "iv": [221, 237, 160, 251, 32, 180, 239, 199, 253, 29, 186, 66, 48, 52, 141, 79], - "key": [211, 3, 82, 203, 123, 27, 84, 89, 47, 231, 27, 129, 217, 135, 93, 139, 215, 242, 241, 80, 42, 167, 224, 155], - "modeOfOperation": "ofb", - "plaintext": [ - [146, 128, 36, 184, 51, 203, 188, 44, 31, 56, 74, 193, 240, 56, 197, 17], - [130, 3, 255, 37, 157, 153, 10, 16, 238, 112, 205, 72, 187, 130, 115, 130], - [27, 149, 254, 240, 126, 251, 246, 74, 29, 95, 98, 193, 50, 199, 49, 179], - [31, 191, 162, 145, 78, 0, 64, 211, 151, 182, 252, 63, 111, 26, 167, 36], - [225, 29, 206, 38, 62, 153, 199, 154, 222, 215, 217, 166, 10, 99, 241, 246], - [8, 2, 171, 168, 230, 100, 133, 80, 235, 0, 248, 142, 205, 170, 45, 184] - ], - "segmentSize": null - }, - { - "encrypted": [ - [143, 9, 106, 136, 234, 97, 46, 244, 227, 194, 41, 20, 106, 179, 190, 160], - [122, 122, 25, 124, 124, 79, 102, 226, 63, 203, 199, 58, 85, 203, 30, 5], - [12, 171, 185, 195, 136, 15, 46, 10, 89, 235, 138, 191, 188, 14, 237, 58], - [46, 173, 216, 33, 145, 73, 82, 221, 196, 199, 53, 247, 241, 61, 242, 33], - [66, 50, 243, 108, 136, 160, 189, 30, 145, 53, 156, 182, 21, 1, 244, 119], - [46, 103, 70, 184, 175, 196, 29, 83, 79, 224, 227, 68, 21, 26, 62, 57], - [172, 253, 244, 92, 58, 3, 223, 116, 210, 204, 121, 172, 84, 162, 89, 25] - ], - "iv": [198, 101, 70, 144, 188, 67, 190, 252, 78, 228, 3, 31, 84, 12, 77, 133], - "key": [156, 174, 177, 117, 44, 214, 202, 33, 109, 20, 130, 239, 229, 232, 201, 3, 216, 73, 126, 236, 181, 29, 69, 111], - "modeOfOperation": "ofb", - "plaintext": [ - [118, 133, 21, 72, 222, 75, 224, 173, 172, 93, 147, 96, 177, 205, 229, 22], - [8, 94, 34, 31, 70, 68, 0, 36, 8, 243, 175, 98, 76, 224, 28, 21], - [204, 62, 164, 104, 177, 121, 248, 222, 180, 31, 241, 195, 169, 187, 19, 61], - [101, 72, 93, 49, 193, 16, 234, 5, 24, 40, 114, 210, 98, 218, 9, 29], - [212, 130, 117, 211, 88, 255, 15, 49, 143, 83, 41, 225, 169, 123, 191, 111], - [243, 84, 101, 97, 70, 178, 44, 83, 165, 87, 56, 170, 134, 240, 232, 76], - [212, 205, 30, 123, 78, 119, 211, 175, 155, 253, 9, 228, 80, 139, 162, 107] - ], - "segmentSize": null - }, - { - "encrypted": [ - [82, 185, 59, 95, 68, 20, 40, 130, 152, 206, 83, 158, 205, 59, 52, 255] - ], - "iv": [89, 188, 27, 4, 184, 54, 179, 151, 251, 178, 61, 194, 223, 115, 243, 69], - "key": [45, 71, 20, 138, 184, 231, 203, 239, 130, 68, 226, 18, 47, 157, 179, 147, 20, 116, 208, 162, 217, 193, 142, 31, 51, 53, 118, 115, 112, 226, 89, 198], - "modeOfOperation": "ofb", - "plaintext": [ - [159, 152, 242, 133, 124, 71, 119, 218, 143, 202, 186, 45, 109, 35, 251, 191] - ], - "segmentSize": null - }, - { - "encrypted": [ - [246, 237, 107, 238, 121, 169, 138, 84, 76, 127, 63, 245, 155, 201, 83, 48], - [213, 133, 226, 54, 77, 105, 247, 36, 139, 117, 126, 157, 87, 124, 126, 85] - ], - "iv": [220, 210, 109, 142, 60, 61, 182, 237, 218, 163, 67, 161, 243, 119, 208, 59], - "key": [6, 48, 124, 220, 14, 147, 162, 29, 33, 235, 103, 14, 118, 238, 5, 210, 134, 98, 247, 71, 89, 111, 66, 179, 164, 76, 13, 170, 19, 252, 95, 62], - "modeOfOperation": "ofb", - "plaintext": [ - [252, 193, 188, 83, 108, 120, 54, 200, 36, 66, 192, 172, 74, 228, 141, 96], - [96, 28, 37, 160, 137, 234, 21, 93, 127, 50, 229, 254, 111, 231, 135, 204] - ], - "segmentSize": null - }, - { - "encrypted": [ - [115, 24, 205, 236, 211, 142, 62, 179, 120, 193, 24, 36, 204, 95, 121, 112], - [33, 220, 28, 64, 83, 83, 125, 147, 209, 102, 176, 89, 31, 184, 203, 19], - [34, 167, 240, 230, 186, 181, 171, 67, 69, 41, 27, 136, 210, 54, 63, 33] - ], - "iv": [20, 222, 239, 204, 184, 18, 142, 180, 95, 102, 22, 228, 112, 219, 193, 212], - "key": [14, 148, 222, 64, 135, 248, 172, 169, 47, 137, 106, 241, 86, 78, 34, 19, 188, 120, 128, 106, 231, 184, 66, 239, 68, 78, 171, 189, 57, 44, 159, 164], - "modeOfOperation": "ofb", - "plaintext": [ - [192, 26, 24, 109, 7, 73, 4, 200, 2, 159, 168, 43, 218, 85, 186, 87], - [100, 190, 39, 56, 15, 119, 192, 238, 36, 137, 252, 231, 32, 88, 69, 208], - [188, 154, 58, 232, 48, 98, 16, 18, 207, 44, 37, 85, 118, 143, 242, 245] - ], - "segmentSize": null - }, - { - "encrypted": [ - [254, 40, 198, 13, 39, 89, 84, 241, 84, 36, 110, 105, 74, 148, 210, 218], - [216, 93, 41, 121, 84, 195, 1, 20, 204, 208, 69, 21, 39, 16, 190, 80], - [195, 156, 51, 209, 10, 71, 3, 205, 196, 30, 210, 215, 186, 109, 113, 233], - [245, 64, 154, 0, 224, 188, 159, 248, 131, 136, 149, 69, 69, 36, 215, 178] - ], - "iv": [215, 202, 147, 4, 63, 3, 65, 199, 109, 173, 199, 24, 183, 60, 194, 203], - "key": [218, 211, 14, 117, 100, 43, 164, 159, 58, 147, 191, 86, 248, 98, 57, 247, 83, 172, 67, 22, 188, 93, 45, 122, 151, 153, 9, 213, 196, 217, 189, 164], - "modeOfOperation": "ofb", - "plaintext": [ - [82, 253, 125, 2, 153, 187, 175, 218, 98, 126, 155, 204, 42, 28, 180, 59], - [204, 228, 214, 27, 225, 149, 181, 12, 72, 75, 191, 235, 251, 248, 228, 4], - [15, 211, 129, 167, 118, 163, 154, 92, 212, 180, 215, 222, 83, 97, 37, 125], - [115, 6, 215, 45, 145, 243, 166, 195, 102, 16, 160, 140, 98, 184, 160, 54] - ], - "segmentSize": null - }, - { - "encrypted": [ - [142, 14, 164, 188, 249, 94, 42, 94, 45, 116, 81, 30, 142, 84, 158, 99], - [193, 181, 67, 178, 204, 190, 78, 138, 56, 133, 24, 203, 241, 106, 135, 114], - [161, 170, 33, 240, 205, 59, 83, 78, 133, 144, 60, 225, 109, 207, 29, 183], - [32, 183, 187, 89, 255, 160, 92, 96, 72, 199, 135, 98, 95, 197, 29, 250], - [123, 241, 63, 63, 242, 140, 119, 116, 135, 168, 78, 136, 23, 24, 22, 210] - ], - "iv": [53, 11, 54, 37, 84, 24, 117, 88, 241, 124, 94, 124, 152, 71, 26, 210], - "key": [44, 84, 68, 46, 250, 199, 41, 3, 201, 192, 206, 89, 215, 224, 50, 150, 112, 169, 179, 240, 44, 205, 230, 107, 140, 137, 202, 74, 186, 125, 193, 96], - "modeOfOperation": "ofb", - "plaintext": [ - [172, 198, 64, 152, 14, 149, 112, 185, 146, 3, 51, 108, 91, 70, 57, 37], - [248, 79, 228, 134, 246, 209, 134, 72, 8, 210, 109, 240, 185, 152, 144, 22], - [175, 103, 146, 251, 37, 157, 47, 112, 3, 34, 27, 237, 30, 187, 241, 219], - [200, 209, 215, 255, 80, 223, 200, 67, 100, 248, 180, 167, 92, 75, 64, 63], - [101, 121, 3, 144, 29, 106, 93, 230, 150, 217, 49, 139, 46, 176, 191, 119] - ], - "segmentSize": null - }, - { - "encrypted": [ - [195, 109, 238, 0, 15, 121, 99, 33, 1, 169, 36, 247, 219, 37, 42, 210], - [44, 20, 120, 152, 28, 254, 247, 36, 49, 187, 143, 20, 60, 94, 105, 84], - [240, 28, 18, 194, 189, 251, 196, 150, 41, 195, 222, 145, 185, 190, 42, 186], - [236, 88, 73, 136, 63, 78, 38, 147, 182, 60, 127, 33, 206, 216, 231, 149], - [78, 1, 121, 113, 197, 47, 92, 232, 149, 159, 113, 113, 71, 159, 93, 82], - [113, 162, 84, 157, 239, 126, 198, 172, 36, 120, 104, 21, 112, 103, 201, 25] - ], - "iv": [253, 52, 31, 220, 137, 223, 56, 101, 106, 246, 35, 101, 254, 136, 234, 249], - "key": [67, 232, 210, 136, 88, 118, 165, 124, 225, 25, 185, 61, 150, 127, 216, 204, 42, 246, 97, 166, 190, 234, 103, 244, 31, 249, 15, 219, 191, 153, 218, 181], - "modeOfOperation": "ofb", - "plaintext": [ - [251, 33, 228, 163, 129, 194, 107, 152, 6, 129, 45, 102, 187, 36, 115, 10], - [39, 91, 179, 20, 67, 245, 0, 67, 80, 171, 14, 77, 225, 181, 202, 44], - [25, 28, 69, 244, 76, 125, 196, 165, 38, 125, 217, 118, 129, 68, 24, 167], - [220, 28, 162, 228, 251, 144, 207, 58, 82, 220, 146, 142, 246, 101, 153, 105], - [209, 143, 103, 28, 71, 210, 123, 252, 144, 213, 26, 209, 15, 116, 236, 30], - [183, 105, 160, 43, 2, 86, 125, 41, 178, 100, 140, 226, 206, 5, 91, 34] - ], - "segmentSize": null - }, - { - "encrypted": [ - [102, 120, 144, 111, 163, 142, 232, 181, 54, 78, 254, 80, 28, 32, 114, 95], - [56, 110, 83, 76, 223, 54, 181, 42, 109, 188, 86, 183, 62, 142, 65, 28], - [184, 222, 9, 157, 232, 189, 205, 243, 128, 133, 64, 193, 74, 150, 66, 167], - [9, 232, 142, 196, 12, 188, 149, 54, 20, 225, 255, 139, 59, 47, 247, 129], - [138, 169, 136, 252, 109, 150, 171, 138, 130, 59, 247, 106, 47, 180, 54, 169], - [115, 233, 116, 89, 85, 136, 77, 64, 142, 71, 217, 167, 247, 245, 92, 17], - [214, 84, 51, 150, 41, 156, 120, 124, 107, 149, 237, 236, 3, 39, 149, 237] - ], - "iv": [96, 57, 241, 100, 243, 255, 2, 12, 30, 56, 55, 170, 124, 237, 90, 140], - "key": [47, 14, 147, 27, 148, 236, 77, 194, 211, 238, 107, 222, 110, 216, 41, 66, 180, 213, 55, 1, 248, 17, 194, 183, 68, 151, 113, 132, 42, 35, 76, 149], - "modeOfOperation": "ofb", - "plaintext": [ - [74, 223, 46, 118, 107, 31, 82, 89, 126, 187, 175, 214, 132, 245, 53, 41], - [23, 197, 37, 188, 106, 229, 14, 246, 252, 28, 199, 170, 174, 94, 132, 65], - [205, 166, 65, 70, 112, 52, 208, 201, 181, 104, 132, 70, 106, 43, 153, 125], - [164, 202, 118, 62, 72, 28, 255, 228, 228, 160, 145, 141, 246, 64, 138, 46], - [232, 58, 5, 35, 218, 242, 65, 118, 230, 25, 3, 50, 244, 111, 252, 142], - [249, 113, 129, 84, 252, 47, 76, 51, 105, 183, 250, 95, 243, 19, 240, 118], - [105, 242, 77, 244, 109, 226, 65, 187, 63, 11, 226, 214, 178, 210, 206, 201] - ], - "segmentSize": null - } -] diff --git a/truebit-implementation/node_modules/aes-js/test/test.html b/truebit-implementation/node_modules/aes-js/test/test.html deleted file mode 100644 index 348d45af..00000000 --- a/truebit-implementation/node_modules/aes-js/test/test.html +++ /dev/null @@ -1,104 +0,0 @@ - - -
- - - - diff --git a/truebit-implementation/node_modules/ajv/.tonic_example.js b/truebit-implementation/node_modules/ajv/.tonic_example.js deleted file mode 100644 index aa11812d..00000000 --- a/truebit-implementation/node_modules/ajv/.tonic_example.js +++ /dev/null @@ -1,20 +0,0 @@ -var Ajv = require('ajv'); -var ajv = new Ajv({allErrors: true}); - -var schema = { - "properties": { - "foo": { "type": "string" }, - "bar": { "type": "number", "maximum": 3 } - } -}; - -var validate = ajv.compile(schema); - -test({"foo": "abc", "bar": 2}); -test({"foo": 2, "bar": 4}); - -function test(data) { - var valid = validate(data); - if (valid) console.log('Valid!'); - else console.log('Invalid: ' + ajv.errorsText(validate.errors)); -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/ajv/LICENSE b/truebit-implementation/node_modules/ajv/LICENSE deleted file mode 100644 index 96ee7199..00000000 --- a/truebit-implementation/node_modules/ajv/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/ajv/README.md b/truebit-implementation/node_modules/ajv/README.md deleted file mode 100644 index 97dc4da6..00000000 --- a/truebit-implementation/node_modules/ajv/README.md +++ /dev/null @@ -1,1295 +0,0 @@ -Ajv logo - -# Ajv: Another JSON Schema Validator - -The fastest JSON Schema validator for Node.js and browser. Supports draft-04/06/07. - - -[![Build Status](https://travis-ci.org/epoberezkin/ajv.svg?branch=master)](https://travis-ci.org/epoberezkin/ajv) -[![npm](https://img.shields.io/npm/v/ajv.svg)](https://www.npmjs.com/package/ajv) -[![npm downloads](https://img.shields.io/npm/dm/ajv.svg)](https://www.npmjs.com/package/ajv) -[![Coverage Status](https://coveralls.io/repos/epoberezkin/ajv/badge.svg?branch=master&service=github)](https://coveralls.io/github/epoberezkin/ajv?branch=master) -[![Greenkeeper badge](https://badges.greenkeeper.io/epoberezkin/ajv.svg)](https://greenkeeper.io/) -[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv) - - -## Using version 6 - -[JSON Schema draft-07](http://json-schema.org/latest/json-schema-validation.html) is published. - -[Ajv version 6.0.0](https://github.com/epoberezkin/ajv/releases/tag/v6.0.0) that supports draft-07 is released. It may require either migrating your schemas or updating your code (to continue using draft-04 and v5 schemas, draft-06 schemas will be supported without changes). - -__Please note__: To use Ajv with draft-06 schemas you need to explicitly add the meta-schema to the validator instance: - -```javascript -ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json')); -``` - -To use Ajv with draft-04 schemas in addition to explicitly adding meta-schema you also need to use option schemaId: - -```javascript -var ajv = new Ajv({schemaId: 'id'}); -// If you want to use both draft-04 and draft-06/07 schemas: -// var ajv = new Ajv({schemaId: 'auto'}); -ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json')); -``` - - -## Contents - -- [Performance](#performance) -- [Features](#features) -- [Getting started](#getting-started) -- [Frequently Asked Questions](https://github.com/epoberezkin/ajv/blob/master/FAQ.md) -- [Using in browser](#using-in-browser) -- [Command line interface](#command-line-interface) -- Validation - - [Keywords](#validation-keywords) - - [Annotation keywords](#annotation-keywords) - - [Formats](#formats) - - [Combining schemas with $ref](#ref) - - [$data reference](#data-reference) - - NEW: [$merge and $patch keywords](#merge-and-patch-keywords) - - [Defining custom keywords](#defining-custom-keywords) - - [Asynchronous schema compilation](#asynchronous-schema-compilation) - - [Asynchronous validation](#asynchronous-validation) -- Modifying data during validation - - [Filtering data](#filtering-data) - - [Assigning defaults](#assigning-defaults) - - [Coercing data types](#coercing-data-types) -- API - - [Methods](#api) - - [Options](#options) - - [Validation errors](#validation-errors) -- [Plugins](#plugins) -- [Related packages](#related-packages) -- [Packages using Ajv](#some-packages-using-ajv) -- [Tests, Contributing, History, License](#tests) - - -## Performance - -Ajv generates code using [doT templates](https://github.com/olado/doT) to turn JSON Schemas into super-fast validation functions that are efficient for v8 optimization. - -Currently Ajv is the fastest and the most standard compliant validator according to these benchmarks: - -- [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark) - 50% faster than the second place -- [jsck benchmark](https://github.com/pandastrike/jsck#benchmarks) - 20-190% faster -- [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html) -- [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html) - - -Performance of different validators by [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark): - -[![performance](https://chart.googleapis.com/chart?chxt=x,y&cht=bhs&chco=76A4FB&chls=2.0&chbh=32,4,1&chs=600x416&chxl=-1:|djv|ajv|json-schema-validator-generator|jsen|is-my-json-valid|themis|z-schema|jsck|skeemas|json-schema-library|tv4&chd=t:100,98,72.1,66.8,50.1,15.1,6.1,3.8,1.2,0.7,0.2)](https://github.com/ebdrup/json-schema-benchmark/blob/master/README.md#performance) - - -## Features - -- Ajv implements full JSON Schema [draft-06/07](http://json-schema.org/) and draft-04 standards: - - all validation keywords (see [JSON Schema validation keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md)) - - full support of remote refs (remote schemas have to be added with `addSchema` or compiled to be available) - - support of circular references between schemas - - correct string lengths for strings with unicode pairs (can be turned off) - - [formats](#formats) defined by JSON Schema draft-07 standard and custom formats (can be turned off) - - [validates schemas against meta-schema](#api-validateschema) -- supports [browsers](#using-in-browser) and Node.js 0.10-8.x -- [asynchronous loading](#asynchronous-schema-compilation) of referenced schemas during compilation -- "All errors" validation mode with [option allErrors](#options) -- [error messages with parameters](#validation-errors) describing error reasons to allow creating custom error messages -- i18n error messages support with [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) package -- [filtering data](#filtering-data) from additional properties -- [assigning defaults](#assigning-defaults) to missing properties and items -- [coercing data](#coercing-data-types) to the types specified in `type` keywords -- [custom keywords](#defining-custom-keywords) -- draft-06/07 keywords `const`, `contains`, `propertyNames` and `if/then/else` -- draft-06 boolean schemas (`true`/`false` as a schema to always pass/fail). -- keywords `switch`, `patternRequired`, `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum` from [JSON Schema extension proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) with [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package -- [$data reference](#data-reference) to use values from the validated data as values for the schema keywords -- [asynchronous validation](#asynchronous-validation) of custom formats and keywords - -Currently Ajv is the only validator that passes all the tests from [JSON Schema Test Suite](https://github.com/json-schema/JSON-Schema-Test-Suite) (according to [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark), apart from the test that requires that `1.0` is not an integer that is impossible to satisfy in JavaScript). - - -## Install - -``` -npm install ajv -``` - - -## Getting started - -Try it in the Node.js REPL: https://tonicdev.com/npm/ajv - - -The fastest validation call: - -```javascript -var Ajv = require('ajv'); -var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true} -var validate = ajv.compile(schema); -var valid = validate(data); -if (!valid) console.log(validate.errors); -``` - -or with less code - -```javascript -// ... -var valid = ajv.validate(schema, data); -if (!valid) console.log(ajv.errors); -// ... -``` - -or - -```javascript -// ... -var valid = ajv.addSchema(schema, 'mySchema') - .validate('mySchema', data); -if (!valid) console.log(ajv.errorsText()); -// ... -``` - -See [API](#api) and [Options](#options) for more details. - -Ajv compiles schemas to functions and caches them in all cases (using schema serialized with [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) or a custom function as a key), so that the next time the same schema is used (not necessarily the same object instance) it won't be compiled again. - -The best performance is achieved when using compiled functions returned by `compile` or `getSchema` methods (there is no additional function call). - -__Please note__: every time a validation function or `ajv.validate` are called `errors` property is overwritten. You need to copy `errors` array reference to another variable if you want to use it later (e.g., in the callback). See [Validation errors](#validation-errors) - - -## Using in browser - -You can require Ajv directly from the code you browserify - in this case Ajv will be a part of your bundle. - -If you need to use Ajv in several bundles you can create a separate UMD bundle using `npm run bundle` script (thanks to [siddo420](https://github.com/siddo420)). - -Then you need to load Ajv in the browser: -```html - -``` - -This bundle can be used with different module systems; it creates global `Ajv` if no module system is found. - -The browser bundle is available on [cdnjs](https://cdnjs.com/libraries/ajv). - -Ajv is tested with these browsers: - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/epoberezkin.svg)](https://saucelabs.com/u/epoberezkin) - -__Please note__: some frameworks, e.g. Dojo, may redefine global require in such way that is not compatible with CommonJS module format. In such case Ajv bundle has to be loaded before the framework and then you can use global Ajv (see issue [#234](https://github.com/epoberezkin/ajv/issues/234)). - - -## Command line interface - -CLI is available as a separate npm package [ajv-cli](https://github.com/jessedc/ajv-cli). It supports: - -- compiling JSON Schemas to test their validity -- BETA: generating standalone module exporting a validation function to be used without Ajv (using [ajv-pack](https://github.com/epoberezkin/ajv-pack)) -- migrate schemas to draft-07 (using [json-schema-migrate](https://github.com/epoberezkin/json-schema-migrate)) -- validating data file(s) against JSON Schema -- testing expected validity of data against JSON Schema -- referenced schemas -- custom meta-schemas -- files in JSON and JavaScript format -- all Ajv options -- reporting changes in data after validation in [JSON-patch](https://tools.ietf.org/html/rfc6902) format - - -## Validation keywords - -Ajv supports all validation keywords from draft-07 of JSON Schema standard: - -- [type](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#type) -- [for numbers](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-numbers) - maximum, minimum, exclusiveMaximum, exclusiveMinimum, multipleOf -- [for strings](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-strings) - maxLength, minLength, pattern, format -- [for arrays](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-arrays) - maxItems, minItems, uniqueItems, items, additionalItems, [contains](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#contains) -- [for objects](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-objects) - maxProperties, minProperties, required, properties, patternProperties, additionalProperties, dependencies, [propertyNames](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#propertynames) -- [for all types](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#keywords-for-all-types) - enum, [const](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#const) -- [compound keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#compound-keywords) - not, oneOf, anyOf, allOf, [if/then/else](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#ifthenelse) - -With [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package Ajv also supports validation keywords from [JSON Schema extension proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) for JSON Schema standard: - -- [patternRequired](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#patternrequired-proposed) - like `required` but with patterns that some property should match. -- [formatMaximum, formatMinimum, formatExclusiveMaximum, formatExclusiveMinimum](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md#formatmaximum--formatminimum-and-exclusiveformatmaximum--exclusiveformatminimum-proposed) - setting limits for date, time, etc. - -See [JSON Schema validation keywords](https://github.com/epoberezkin/ajv/blob/master/KEYWORDS.md) for more details. - - -## Annotation keywords - -JSON Schema specification defines several annotation keywords that describe schema itself but do not perform any validation. - -- `title` and `description`: information about the data represented by that schema -- `$comment` (NEW in draft-07): information for developers. With option `$comment` Ajv logs or passes the comment string to the user-supplied function. See [Options](#options). -- `default`: a default value of the data instance, see [Assigning defaults](#assigning-defaults). -- `examples` (NEW in draft-07): an array of data instances. Ajv does not check the validity of these instances against the schema. -- `readOnly` and `writeOnly` (NEW in draft-07): marks data-instance as read-only or write-only in relation to the source of the data (database, api, etc.). -- `contentEncoding`: [RFC 2045](https://tools.ietf.org/html/rfc2045#section-6.1 ), e.g., "base64". -- `contentMediaType`: [RFC 2046](https://tools.ietf.org/html/rfc2046), e.g., "image/png". - -__Please note__: Ajv does not implement validation of the keywords `examples`, `contentEncoding` and `contentMediaType` but it reserves them. If you want to create a plugin that implements some of them, it should remove these keywords from the instance. - - -## Formats - -The following formats are supported for string validation with "format" keyword: - -- _date_: full-date according to [RFC3339](http://tools.ietf.org/html/rfc3339#section-5.6). -- _time_: time with optional time-zone. -- _date-time_: date-time from the same source (time-zone is mandatory). `date`, `time` and `date-time` validate ranges in `full` mode and only regexp in `fast` mode (see [options](#options)). -- _uri_: full URI. -- _uri-reference_: URI reference, including full and relative URIs. -- _uri-template_: URI template according to [RFC6570](https://tools.ietf.org/html/rfc6570) -- _url_: [URL record](https://url.spec.whatwg.org/#concept-url). -- _email_: email address. -- _hostname_: host name according to [RFC1034](http://tools.ietf.org/html/rfc1034#section-3.5). -- _ipv4_: IP address v4. -- _ipv6_: IP address v6. -- _regex_: tests whether a string is a valid regular expression by passing it to RegExp constructor. -- _uuid_: Universally Unique IDentifier according to [RFC4122](http://tools.ietf.org/html/rfc4122). -- _json-pointer_: JSON-pointer according to [RFC6901](https://tools.ietf.org/html/rfc6901). -- _relative-json-pointer_: relative JSON-pointer according to [this draft](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00). - -__Please note__: JSON Schema draft-07 also defines formats `iri`, `iri-reference`, `idn-hostname` and `idn-email` for URLs, hostnames and emails with international characters. Ajv does not implement these formats. If you create Ajv plugin that implements them please make a PR to mention this plugin here. - -There are two modes of format validation: `fast` and `full`. This mode affects formats `date`, `time`, `date-time`, `uri`, `uri-reference`, `email`, and `hostname`. See [Options](#options) for details. - -You can add additional formats and replace any of the formats above using [addFormat](#api-addformat) method. - -The option `unknownFormats` allows changing the default behaviour when an unknown format is encountered. In this case Ajv can either fail schema compilation (default) or ignore it (default in versions before 5.0.0). You also can whitelist specific format(s) to be ignored. See [Options](#options) for details. - -You can find patterns used for format validation and the sources that were used in [formats.js](https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js). - - -## Combining schemas with $ref - -You can structure your validation logic across multiple schema files and have schemas reference each other using `$ref` keyword. - -Example: - -```javascript -var schema = { - "$id": "http://example.com/schemas/schema.json", - "type": "object", - "properties": { - "foo": { "$ref": "defs.json#/definitions/int" }, - "bar": { "$ref": "defs.json#/definitions/str" } - } -}; - -var defsSchema = { - "$id": "http://example.com/schemas/defs.json", - "definitions": { - "int": { "type": "integer" }, - "str": { "type": "string" } - } -}; -``` - -Now to compile your schema you can either pass all schemas to Ajv instance: - -```javascript -var ajv = new Ajv({schemas: [schema, defsSchema]}); -var validate = ajv.getSchema('http://example.com/schemas/schema.json'); -``` - -or use `addSchema` method: - -```javascript -var ajv = new Ajv; -var validate = ajv.addSchema(defsSchema) - .compile(schema); -``` - -See [Options](#options) and [addSchema](#api) method. - -__Please note__: -- `$ref` is resolved as the uri-reference using schema $id as the base URI (see the example). -- References can be recursive (and mutually recursive) to implement the schemas for different data structures (such as linked lists, trees, graphs, etc.). -- You don't have to host your schema files at the URIs that you use as schema $id. These URIs are only used to identify the schemas, and according to JSON Schema specification validators should not expect to be able to download the schemas from these URIs. -- The actual location of the schema file in the file system is not used. -- You can pass the identifier of the schema as the second parameter of `addSchema` method or as a property name in `schemas` option. This identifier can be used instead of (or in addition to) schema $id. -- You cannot have the same $id (or the schema identifier) used for more than one schema - the exception will be thrown. -- You can implement dynamic resolution of the referenced schemas using `compileAsync` method. In this way you can store schemas in any system (files, web, database, etc.) and reference them without explicitly adding to Ajv instance. See [Asynchronous schema compilation](#asynchronous-schema-compilation). - - -## $data reference - -With `$data` option you can use values from the validated data as the values for the schema keywords. See [proposal](https://github.com/json-schema/json-schema/wiki/$data-(v5-proposal)) for more information about how it works. - -`$data` reference is supported in the keywords: const, enum, format, maximum/minimum, exclusiveMaximum / exclusiveMinimum, maxLength / minLength, maxItems / minItems, maxProperties / minProperties, formatMaximum / formatMinimum, formatExclusiveMaximum / formatExclusiveMinimum, multipleOf, pattern, required, uniqueItems. - -The value of "$data" should be a [JSON-pointer](https://tools.ietf.org/html/rfc6901) to the data (the root is always the top level data object, even if the $data reference is inside a referenced subschema) or a [relative JSON-pointer](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00) (it is relative to the current point in data; if the $data reference is inside a referenced subschema it cannot point to the data outside of the root level for this subschema). - -Examples. - -This schema requires that the value in property `smaller` is less or equal than the value in the property larger: - -```javascript -var ajv = new Ajv({$data: true}); - -var schema = { - "properties": { - "smaller": { - "type": "number", - "maximum": { "$data": "1/larger" } - }, - "larger": { "type": "number" } - } -}; - -var validData = { - smaller: 5, - larger: 7 -}; - -ajv.validate(schema, validData); // true -``` - -This schema requires that the properties have the same format as their field names: - -```javascript -var schema = { - "additionalProperties": { - "type": "string", - "format": { "$data": "0#" } - } -}; - -var validData = { - 'date-time': '1963-06-19T08:30:06.283185Z', - email: 'joe.bloggs@example.com' -} -``` - -`$data` reference is resolved safely - it won't throw even if some property is undefined. If `$data` resolves to `undefined` the validation succeeds (with the exclusion of `const` keyword). If `$data` resolves to incorrect type (e.g. not "number" for maximum keyword) the validation fails. - - -## $merge and $patch keywords - -With the package [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) you can use the keywords `$merge` and `$patch` that allow extending JSON Schemas with patches using formats [JSON Merge Patch (RFC 7396)](https://tools.ietf.org/html/rfc7396) and [JSON Patch (RFC 6902)](https://tools.ietf.org/html/rfc6902). - -To add keywords `$merge` and `$patch` to Ajv instance use this code: - -```javascript -require('ajv-merge-patch')(ajv); -``` - -Examples. - -Using `$merge`: - -```json -{ - "$merge": { - "source": { - "type": "object", - "properties": { "p": { "type": "string" } }, - "additionalProperties": false - }, - "with": { - "properties": { "q": { "type": "number" } } - } - } -} -``` - -Using `$patch`: - -```json -{ - "$patch": { - "source": { - "type": "object", - "properties": { "p": { "type": "string" } }, - "additionalProperties": false - }, - "with": [ - { "op": "add", "path": "/properties/q", "value": { "type": "number" } } - ] - } -} -``` - -The schemas above are equivalent to this schema: - -```json -{ - "type": "object", - "properties": { - "p": { "type": "string" }, - "q": { "type": "number" } - }, - "additionalProperties": false -} -``` - -The properties `source` and `with` in the keywords `$merge` and `$patch` can use absolute or relative `$ref` to point to other schemas previously added to the Ajv instance or to the fragments of the current schema. - -See the package [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) for more information. - - -## Defining custom keywords - -The advantages of using custom keywords are: - -- allow creating validation scenarios that cannot be expressed using JSON Schema -- simplify your schemas -- help bringing a bigger part of the validation logic to your schemas -- make your schemas more expressive, less verbose and closer to your application domain -- implement custom data processors that modify your data (`modifying` option MUST be used in keyword definition) and/or create side effects while the data is being validated - -If a keyword is used only for side-effects and its validation result is pre-defined, use option `valid: true/false` in keyword definition to simplify both generated code (no error handling in case of `valid: true`) and your keyword functions (no need to return any validation result). - -The concerns you have to be aware of when extending JSON Schema standard with custom keywords are the portability and understanding of your schemas. You will have to support these custom keywords on other platforms and to properly document these keywords so that everybody can understand them in your schemas. - -You can define custom keywords with [addKeyword](#api-addkeyword) method. Keywords are defined on the `ajv` instance level - new instances will not have previously defined keywords. - -Ajv allows defining keywords with: -- validation function -- compilation function -- macro function -- inline compilation function that should return code (as string) that will be inlined in the currently compiled schema. - -Example. `range` and `exclusiveRange` keywords using compiled schema: - -```javascript -ajv.addKeyword('range', { - type: 'number', - compile: function (sch, parentSchema) { - var min = sch[0]; - var max = sch[1]; - - return parentSchema.exclusiveRange === true - ? function (data) { return data > min && data < max; } - : function (data) { return data >= min && data <= max; } - } -}); - -var schema = { "range": [2, 4], "exclusiveRange": true }; -var validate = ajv.compile(schema); -console.log(validate(2.01)); // true -console.log(validate(3.99)); // true -console.log(validate(2)); // false -console.log(validate(4)); // false -``` - -Several custom keywords (typeof, instanceof, range and propertyNames) are defined in [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package - they can be used for your schemas and as a starting point for your own custom keywords. - -See [Defining custom keywords](https://github.com/epoberezkin/ajv/blob/master/CUSTOM.md) for more details. - - -## Asynchronous schema compilation - -During asynchronous compilation remote references are loaded using supplied function. See `compileAsync` [method](#api-compileAsync) and `loadSchema` [option](#options). - -Example: - -```javascript -var ajv = new Ajv({ loadSchema: loadSchema }); - -ajv.compileAsync(schema).then(function (validate) { - var valid = validate(data); - // ... -}); - -function loadSchema(uri) { - return request.json(uri).then(function (res) { - if (res.statusCode >= 400) - throw new Error('Loading error: ' + res.statusCode); - return res.body; - }); -} -``` - -__Please note__: [Option](#options) `missingRefs` should NOT be set to `"ignore"` or `"fail"` for asynchronous compilation to work. - - -## Asynchronous validation - -Example in Node.js REPL: https://tonicdev.com/esp/ajv-asynchronous-validation - -You can define custom formats and keywords that perform validation asynchronously by accessing database or some other service. You should add `async: true` in the keyword or format definition (see [addFormat](#api-addformat), [addKeyword](#api-addkeyword) and [Defining custom keywords](#defining-custom-keywords)). - -If your schema uses asynchronous formats/keywords or refers to some schema that contains them it should have `"$async": true` keyword so that Ajv can compile it correctly. If asynchronous format/keyword or reference to asynchronous schema is used in the schema without `$async` keyword Ajv will throw an exception during schema compilation. - -__Please note__: all asynchronous subschemas that are referenced from the current or other schemas should have `"$async": true` keyword as well, otherwise the schema compilation will fail. - -Validation function for an asynchronous custom format/keyword should return a promise that resolves with `true` or `false` (or rejects with `new Ajv.ValidationError(errors)` if you want to return custom errors from the keyword function). - -Ajv compiles asynchronous schemas to [es7 async functions](http://tc39.github.io/ecmascript-asyncawait/) that can optionally be transpiled with [nodent](https://github.com/MatAtBread/nodent). Async functions are supported in Node.js 7+ and all modern browsers. You can also supply any other transpiler as a function via `processCode` option. See [Options](#options). - -The compiled validation function has `$async: true` property (if the schema is asynchronous), so you can differentiate these functions if you are using both synchronous and asynchronous schemas. - -Validation result will be a promise that resolves with validated data or rejects with an exception `Ajv.ValidationError` that contains the array of validation errors in `errors` property. - - -Example: - -```javascript -var ajv = new Ajv; -// require('ajv-async')(ajv); - -ajv.addKeyword('idExists', { - async: true, - type: 'number', - validate: checkIdExists -}); - - -function checkIdExists(schema, data) { - return knex(schema.table) - .select('id') - .where('id', data) - .then(function (rows) { - return !!rows.length; // true if record is found - }); -} - -var schema = { - "$async": true, - "properties": { - "userId": { - "type": "integer", - "idExists": { "table": "users" } - }, - "postId": { - "type": "integer", - "idExists": { "table": "posts" } - } - } -}; - -var validate = ajv.compile(schema); - -validate({ userId: 1, postId: 19 }) -.then(function (data) { - console.log('Data is valid', data); // { userId: 1, postId: 19 } -}) -.catch(function (err) { - if (!(err instanceof Ajv.ValidationError)) throw err; - // data is invalid - console.log('Validation errors:', err.errors); -}); -``` - -### Using transpilers with asynchronous validation functions. - -[ajv-async](https://github.com/epoberezkin/ajv-async) uses [nodent](https://github.com/MatAtBread/nodent) to transpile async functions. To use another transpiler you should separately install it (or load its bundle in the browser). - - -#### Using nodent - -```javascript -var ajv = new Ajv; -require('ajv-async')(ajv); -// in the browser if you want to load ajv-async bundle separately you can: -// window.ajvAsync(ajv); -var validate = ajv.compile(schema); // transpiled es7 async function -validate(data).then(successFunc).catch(errorFunc); -``` - - -#### Using other transpilers - -```javascript -var ajv = new Ajv({ processCode: transpileFunc }); -var validate = ajv.compile(schema); // transpiled es7 async function -validate(data).then(successFunc).catch(errorFunc); -``` - -See [Options](#options). - - -## Filtering data - -With [option `removeAdditional`](#options) (added by [andyscott](https://github.com/andyscott)) you can filter data during the validation. - -This option modifies original data. - -Example: - -```javascript -var ajv = new Ajv({ removeAdditional: true }); -var schema = { - "additionalProperties": false, - "properties": { - "foo": { "type": "number" }, - "bar": { - "additionalProperties": { "type": "number" }, - "properties": { - "baz": { "type": "string" } - } - } - } -} - -var data = { - "foo": 0, - "additional1": 1, // will be removed; `additionalProperties` == false - "bar": { - "baz": "abc", - "additional2": 2 // will NOT be removed; `additionalProperties` != false - }, -} - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": 0, "bar": { "baz": "abc", "additional2": 2 } -``` - -If `removeAdditional` option in the example above were `"all"` then both `additional1` and `additional2` properties would have been removed. - -If the option were `"failing"` then property `additional1` would have been removed regardless of its value and property `additional2` would have been removed only if its value were failing the schema in the inner `additionalProperties` (so in the example above it would have stayed because it passes the schema, but any non-number would have been removed). - -__Please note__: If you use `removeAdditional` option with `additionalProperties` keyword inside `anyOf`/`oneOf` keywords your validation can fail with this schema, for example: - -```json -{ - "type": "object", - "oneOf": [ - { - "properties": { - "foo": { "type": "string" } - }, - "required": [ "foo" ], - "additionalProperties": false - }, - { - "properties": { - "bar": { "type": "integer" } - }, - "required": [ "bar" ], - "additionalProperties": false - } - ] -} -``` - -The intention of the schema above is to allow objects with either the string property "foo" or the integer property "bar", but not with both and not with any other properties. - -With the option `removeAdditional: true` the validation will pass for the object `{ "foo": "abc"}` but will fail for the object `{"bar": 1}`. It happens because while the first subschema in `oneOf` is validated, the property `bar` is removed because it is an additional property according to the standard (because it is not included in `properties` keyword in the same schema). - -While this behaviour is unexpected (issues [#129](https://github.com/epoberezkin/ajv/issues/129), [#134](https://github.com/epoberezkin/ajv/issues/134)), it is correct. To have the expected behaviour (both objects are allowed and additional properties are removed) the schema has to be refactored in this way: - -```json -{ - "type": "object", - "properties": { - "foo": { "type": "string" }, - "bar": { "type": "integer" } - }, - "additionalProperties": false, - "oneOf": [ - { "required": [ "foo" ] }, - { "required": [ "bar" ] } - ] -} -``` - -The schema above is also more efficient - it will compile into a faster function. - - -## Assigning defaults - -With [option `useDefaults`](#options) Ajv will assign values from `default` keyword in the schemas of `properties` and `items` (when it is the array of schemas) to the missing properties and items. - -This option modifies original data. - -__Please note__: by default the default value is inserted in the generated validation code as a literal (starting from v4.0), so the value inserted in the data will be the deep clone of the default in the schema. - -If you need to insert the default value in the data by reference pass the option `useDefaults: "shared"`. - -Inserting defaults by reference can be faster (in case you have an object in `default`) and it allows to have dynamic values in defaults, e.g. timestamp, without recompiling the schema. The side effect is that modifying the default value in any validated data instance will change the default in the schema and in other validated data instances. See example 3 below. - - -Example 1 (`default` in `properties`): - -```javascript -var ajv = new Ajv({ useDefaults: true }); -var schema = { - "type": "object", - "properties": { - "foo": { "type": "number" }, - "bar": { "type": "string", "default": "baz" } - }, - "required": [ "foo", "bar" ] -}; - -var data = { "foo": 1 }; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": 1, "bar": "baz" } -``` - -Example 2 (`default` in `items`): - -```javascript -var schema = { - "type": "array", - "items": [ - { "type": "number" }, - { "type": "string", "default": "foo" } - ] -} - -var data = [ 1 ]; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // [ 1, "foo" ] -``` - -Example 3 (inserting "defaults" by reference): - -```javascript -var ajv = new Ajv({ useDefaults: 'shared' }); - -var schema = { - properties: { - foo: { - default: { bar: 1 } - } - } -} - -var validate = ajv.compile(schema); - -var data = {}; -console.log(validate(data)); // true -console.log(data); // { foo: { bar: 1 } } - -data.foo.bar = 2; - -var data2 = {}; -console.log(validate(data2)); // true -console.log(data2); // { foo: { bar: 2 } } -``` - -`default` keywords in other cases are ignored: - -- not in `properties` or `items` subschemas -- in schemas inside `anyOf`, `oneOf` and `not` (see [#42](https://github.com/epoberezkin/ajv/issues/42)) -- in `if` subschema of `switch` keyword -- in schemas generated by custom macro keywords - - -## Coercing data types - -When you are validating user inputs all your data properties are usually strings. The option `coerceTypes` allows you to have your data types coerced to the types specified in your schema `type` keywords, both to pass the validation and to use the correctly typed data afterwards. - -This option modifies original data. - -__Please note__: if you pass a scalar value to the validating function its type will be coerced and it will pass the validation, but the value of the variable you pass won't be updated because scalars are passed by value. - - -Example 1: - -```javascript -var ajv = new Ajv({ coerceTypes: true }); -var schema = { - "type": "object", - "properties": { - "foo": { "type": "number" }, - "bar": { "type": "boolean" } - }, - "required": [ "foo", "bar" ] -}; - -var data = { "foo": "1", "bar": "false" }; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": 1, "bar": false } -``` - -Example 2 (array coercions): - -```javascript -var ajv = new Ajv({ coerceTypes: 'array' }); -var schema = { - "properties": { - "foo": { "type": "array", "items": { "type": "number" } }, - "bar": { "type": "boolean" } - } -}; - -var data = { "foo": "1", "bar": ["false"] }; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": [1], "bar": false } -``` - -The coercion rules, as you can see from the example, are different from JavaScript both to validate user input as expected and to have the coercion reversible (to correctly validate cases where different types are defined in subschemas of "anyOf" and other compound keywords). - -See [Coercion rules](https://github.com/epoberezkin/ajv/blob/master/COERCION.md) for details. - - -## API - -##### new Ajv(Object options) -> Object - -Create Ajv instance. - - -##### .compile(Object schema) -> Function<Object data> - -Generate validating function and cache the compiled schema for future use. - -Validating function returns a boolean value. This function has properties `errors` and `schema`. Errors encountered during the last validation are assigned to `errors` property (it is assigned `null` if there was no errors). `schema` property contains the reference to the original schema. - -The schema passed to this method will be validated against meta-schema unless `validateSchema` option is false. If schema is invalid, an error will be thrown. See [options](#options). - - -##### .compileAsync(Object schema [, Boolean meta] [, Function callback]) -> Promise - -Asynchronous version of `compile` method that loads missing remote schemas using asynchronous function in `options.loadSchema`. This function returns a Promise that resolves to a validation function. An optional callback passed to `compileAsync` will be called with 2 parameters: error (or null) and validating function. The returned promise will reject (and the callback will be called with an error) when: - -- missing schema can't be loaded (`loadSchema` returns a Promise that rejects). -- a schema containing a missing reference is loaded, but the reference cannot be resolved. -- schema (or some loaded/referenced schema) is invalid. - -The function compiles schema and loads the first missing schema (or meta-schema) until all missing schemas are loaded. - -You can asynchronously compile meta-schema by passing `true` as the second parameter. - -See example in [Asynchronous compilation](#asynchronous-schema-compilation). - - -##### .validate(Object schema|String key|String ref, data) -> Boolean - -Validate data using passed schema (it will be compiled and cached). - -Instead of the schema you can use the key that was previously passed to `addSchema`, the schema id if it was present in the schema or any previously resolved reference. - -Validation errors will be available in the `errors` property of Ajv instance (`null` if there were no errors). - -__Please note__: every time this method is called the errors are overwritten so you need to copy them to another variable if you want to use them later. - -If the schema is asynchronous (has `$async` keyword on the top level) this method returns a Promise. See [Asynchronous validation](#asynchronous-validation). - - -##### .addSchema(Array<Object>|Object schema [, String key]) -> Ajv - -Add schema(s) to validator instance. This method does not compile schemas (but it still validates them). Because of that dependencies can be added in any order and circular dependencies are supported. It also prevents unnecessary compilation of schemas that are containers for other schemas but not used as a whole. - -Array of schemas can be passed (schemas should have ids), the second parameter will be ignored. - -Key can be passed that can be used to reference the schema and will be used as the schema id if there is no id inside the schema. If the key is not passed, the schema id will be used as the key. - - -Once the schema is added, it (and all the references inside it) can be referenced in other schemas and used to validate data. - -Although `addSchema` does not compile schemas, explicit compilation is not required - the schema will be compiled when it is used first time. - -By default the schema is validated against meta-schema before it is added, and if the schema does not pass validation the exception is thrown. This behaviour is controlled by `validateSchema` option. - -__Please note__: Ajv uses the [method chaining syntax](https://en.wikipedia.org/wiki/Method_chaining) for all methods with the prefix `add*` and `remove*`. -This allows you to do nice things like the following. - -```javascript -var validate = new Ajv().addSchema(schema).addFormat(name, regex).getSchema(uri); -``` - -##### .addMetaSchema(Array<Object>|Object schema [, String key]) -> Ajv - -Adds meta schema(s) that can be used to validate other schemas. That function should be used instead of `addSchema` because there may be instance options that would compile a meta schema incorrectly (at the moment it is `removeAdditional` option). - -There is no need to explicitly add draft-07 meta schema (http://json-schema.org/draft-07/schema) - it is added by default, unless option `meta` is set to `false`. You only need to use it if you have a changed meta-schema that you want to use to validate your schemas. See `validateSchema`. - - -##### .validateSchema(Object schema) -> Boolean - -Validates schema. This method should be used to validate schemas rather than `validate` due to the inconsistency of `uri` format in JSON Schema standard. - -By default this method is called automatically when the schema is added, so you rarely need to use it directly. - -If schema doesn't have `$schema` property, it is validated against draft 6 meta-schema (option `meta` should not be false). - -If schema has `$schema` property, then the schema with this id (that should be previously added) is used to validate passed schema. - -Errors will be available at `ajv.errors`. - - -##### .getSchema(String key) -> Function<Object data> - -Retrieve compiled schema previously added with `addSchema` by the key passed to `addSchema` or by its full reference (id). The returned validating function has `schema` property with the reference to the original schema. - - -##### .removeSchema([Object schema|String key|String ref|RegExp pattern]) -> Ajv - -Remove added/cached schema. Even if schema is referenced by other schemas it can be safely removed as dependent schemas have local references. - -Schema can be removed using: -- key passed to `addSchema` -- it's full reference (id) -- RegExp that should match schema id or key (meta-schemas won't be removed) -- actual schema object that will be stable-stringified to remove schema from cache - -If no parameter is passed all schemas but meta-schemas will be removed and the cache will be cleared. - - -##### .addFormat(String name, String|RegExp|Function|Object format) -> Ajv - -Add custom format to validate strings or numbers. It can also be used to replace pre-defined formats for Ajv instance. - -Strings are converted to RegExp. - -Function should return validation result as `true` or `false`. - -If object is passed it should have properties `validate`, `compare` and `async`: - -- _validate_: a string, RegExp or a function as described above. -- _compare_: an optional comparison function that accepts two strings and compares them according to the format meaning. This function is used with keywords `formatMaximum`/`formatMinimum` (defined in [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) package). It should return `1` if the first value is bigger than the second value, `-1` if it is smaller and `0` if it is equal. -- _async_: an optional `true` value if `validate` is an asynchronous function; in this case it should return a promise that resolves with a value `true` or `false`. -- _type_: an optional type of data that the format applies to. It can be `"string"` (default) or `"number"` (see https://github.com/epoberezkin/ajv/issues/291#issuecomment-259923858). If the type of data is different, the validation will pass. - -Custom formats can be also added via `formats` option. - - -##### .addKeyword(String keyword, Object definition) -> Ajv - -Add custom validation keyword to Ajv instance. - -Keyword should be different from all standard JSON Schema keywords and different from previously defined keywords. There is no way to redefine keywords or to remove keyword definition from the instance. - -Keyword must start with a letter, `_` or `$`, and may continue with letters, numbers, `_`, `$`, or `-`. -It is recommended to use an application-specific prefix for keywords to avoid current and future name collisions. - -Example Keywords: -- `"xyz-example"`: valid, and uses prefix for the xyz project to avoid name collisions. -- `"example"`: valid, but not recommended as it could collide with future versions of JSON Schema etc. -- `"3-example"`: invalid as numbers are not allowed to be the first character in a keyword - -Keyword definition is an object with the following properties: - -- _type_: optional string or array of strings with data type(s) that the keyword applies to. If not present, the keyword will apply to all types. -- _validate_: validating function -- _compile_: compiling function -- _macro_: macro function -- _inline_: compiling function that returns code (as string) -- _schema_: an optional `false` value used with "validate" keyword to not pass schema -- _metaSchema_: an optional meta-schema for keyword schema -- _modifying_: `true` MUST be passed if keyword modifies data -- _valid_: pass `true`/`false` to pre-define validation result, the result returned from validation function will be ignored. This option cannot be used with macro keywords. -- _$data_: an optional `true` value to support [$data reference](#data-reference) as the value of custom keyword. The reference will be resolved at validation time. If the keyword has meta-schema it would be extended to allow $data and it will be used to validate the resolved value. Supporting $data reference requires that keyword has validating function (as the only option or in addition to compile, macro or inline function). -- _async_: an optional `true` value if the validation function is asynchronous (whether it is compiled or passed in _validate_ property); in this case it should return a promise that resolves with a value `true` or `false`. This option is ignored in case of "macro" and "inline" keywords. -- _errors_: an optional boolean indicating whether keyword returns errors. If this property is not set Ajv will determine if the errors were set in case of failed validation. - -_compile_, _macro_ and _inline_ are mutually exclusive, only one should be used at a time. _validate_ can be used separately or in addition to them to support $data reference. - -__Please note__: If the keyword is validating data type that is different from the type(s) in its definition, the validation function will not be called (and expanded macro will not be used), so there is no need to check for data type inside validation function or inside schema returned by macro function (unless you want to enforce a specific type and for some reason do not want to use a separate `type` keyword for that). In the same way as standard keywords work, if the keyword does not apply to the data type being validated, the validation of this keyword will succeed. - -See [Defining custom keywords](#defining-custom-keywords) for more details. - - -##### .getKeyword(String keyword) -> Object|Boolean - -Returns custom keyword definition, `true` for pre-defined keywords and `false` if the keyword is unknown. - - -##### .removeKeyword(String keyword) -> Ajv - -Removes custom or pre-defined keyword so you can redefine them. - -While this method can be used to extend pre-defined keywords, it can also be used to completely change their meaning - it may lead to unexpected results. - -__Please note__: schemas compiled before the keyword is removed will continue to work without changes. To recompile schemas use `removeSchema` method and compile them again. - - -##### .errorsText([Array<Object> errors [, Object options]]) -> String - -Returns the text with all errors in a String. - -Options can have properties `separator` (string used to separate errors, ", " by default) and `dataVar` (the variable name that dataPaths are prefixed with, "data" by default). - - -## Options - -Defaults: - -```javascript -{ - // validation and reporting options: - $data: false, - allErrors: false, - verbose: false, - $comment: false, // NEW in Ajv version 6.0 - jsonPointers: false, - uniqueItems: true, - unicode: true, - format: 'fast', - formats: {}, - unknownFormats: true, - schemas: {}, - logger: undefined, - // referenced schema options: - schemaId: '$id', - missingRefs: true, - extendRefs: 'ignore', // recommended 'fail' - loadSchema: undefined, // function(uri: string): Promise {} - // options to modify validated data: - removeAdditional: false, - useDefaults: false, - coerceTypes: false, - // asynchronous validation options: - transpile: undefined, // requires ajv-async package - // advanced options: - meta: true, - validateSchema: true, - addUsedSchema: true, - inlineRefs: true, - passContext: false, - loopRequired: Infinity, - ownProperties: false, - multipleOfPrecision: false, - errorDataPath: 'object', // deprecated - messages: true, - sourceCode: false, - processCode: undefined, // function (str: string): string {} - cache: new Cache, - serialize: undefined -} -``` - -##### Validation and reporting options - -- _$data_: support [$data references](#data-reference). Draft 6 meta-schema that is added by default will be extended to allow them. If you want to use another meta-schema you need to use $dataMetaSchema method to add support for $data reference. See [API](#api). -- _allErrors_: check all rules collecting all errors. Default is to return after the first error. -- _verbose_: include the reference to the part of the schema (`schema` and `parentSchema`) and validated data in errors (false by default). -- _$comment_ (NEW in Ajv version 6.0): log or pass the value of `$comment` keyword to a function. Option values: - - `false` (default): ignore $comment keyword. - - `true`: log the keyword value to console. - - function: pass the keyword value, its schema path and root schema to the specified function -- _jsonPointers_: set `dataPath` property of errors using [JSON Pointers](https://tools.ietf.org/html/rfc6901) instead of JavaScript property access notation. -- _uniqueItems_: validate `uniqueItems` keyword (true by default). -- _unicode_: calculate correct length of strings with unicode pairs (true by default). Pass `false` to use `.length` of strings that is faster, but gives "incorrect" lengths of strings with unicode pairs - each unicode pair is counted as two characters. -- _format_: formats validation mode ('fast' by default). Pass 'full' for more correct and slow validation or `false` not to validate formats at all. E.g., 25:00:00 and 2015/14/33 will be invalid time and date in 'full' mode but it will be valid in 'fast' mode. -- _formats_: an object with custom formats. Keys and values will be passed to `addFormat` method. -- _unknownFormats_: handling of unknown formats. Option values: - - `true` (default) - if an unknown format is encountered the exception is thrown during schema compilation. If `format` keyword value is [$data reference](#data-reference) and it is unknown the validation will fail. - - `[String]` - an array of unknown format names that will be ignored. This option can be used to allow usage of third party schemas with format(s) for which you don't have definitions, but still fail if another unknown format is used. If `format` keyword value is [$data reference](#data-reference) and it is not in this array the validation will fail. - - `"ignore"` - to log warning during schema compilation and always pass validation (the default behaviour in versions before 5.0.0). This option is not recommended, as it allows to mistype format name and it won't be validated without any error message. This behaviour is required by JSON Schema specification. -- _schemas_: an array or object of schemas that will be added to the instance. In case you pass the array the schemas must have IDs in them. When the object is passed the method `addSchema(value, key)` will be called for each schema in this object. -- _logger_: sets the logging method. Default is the global `console` object that should have methods `log`, `warn` and `error`. Option values: - - custom logger - it should have methods `log`, `warn` and `error`. If any of these methods is missing an exception will be thrown. - - `false` - logging is disabled. - - -##### Referenced schema options - -- _schemaId_: this option defines which keywords are used as schema URI. Option value: - - `"$id"` (default) - only use `$id` keyword as schema URI (as specified in JSON Schema draft-06/07), ignore `id` keyword (if it is present a warning will be logged). - - `"id"` - only use `id` keyword as schema URI (as specified in JSON Schema draft-04), ignore `$id` keyword (if it is present a warning will be logged). - - `"auto"` - use both `$id` and `id` keywords as schema URI. If both are present (in the same schema object) and different the exception will be thrown during schema compilation. -- _missingRefs_: handling of missing referenced schemas. Option values: - - `true` (default) - if the reference cannot be resolved during compilation the exception is thrown. The thrown error has properties `missingRef` (with hash fragment) and `missingSchema` (without it). Both properties are resolved relative to the current base id (usually schema id, unless it was substituted). - - `"ignore"` - to log error during compilation and always pass validation. - - `"fail"` - to log error and successfully compile schema but fail validation if this rule is checked. -- _extendRefs_: validation of other keywords when `$ref` is present in the schema. Option values: - - `"ignore"` (default) - when `$ref` is used other keywords are ignored (as per [JSON Reference](https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3) standard). A warning will be logged during the schema compilation. - - `"fail"` (recommended) - if other validation keywords are used together with `$ref` the exception will be thrown when the schema is compiled. This option is recommended to make sure schema has no keywords that are ignored, which can be confusing. - - `true` - validate all keywords in the schemas with `$ref` (the default behaviour in versions before 5.0.0). -- _loadSchema_: asynchronous function that will be used to load remote schemas when `compileAsync` [method](#api-compileAsync) is used and some reference is missing (option `missingRefs` should NOT be 'fail' or 'ignore'). This function should accept remote schema uri as a parameter and return a Promise that resolves to a schema. See example in [Asynchronous compilation](#asynchronous-schema-compilation). - - -##### Options to modify validated data - -- _removeAdditional_: remove additional properties - see example in [Filtering data](#filtering-data). This option is not used if schema is added with `addMetaSchema` method. Option values: - - `false` (default) - not to remove additional properties - - `"all"` - all additional properties are removed, regardless of `additionalProperties` keyword in schema (and no validation is made for them). - - `true` - only additional properties with `additionalProperties` keyword equal to `false` are removed. - - `"failing"` - additional properties that fail schema validation will be removed (where `additionalProperties` keyword is `false` or schema). -- _useDefaults_: replace missing properties and items with the values from corresponding `default` keywords. Default behaviour is to ignore `default` keywords. This option is not used if schema is added with `addMetaSchema` method. See examples in [Assigning defaults](#assigning-defaults). Option values: - - `false` (default) - do not use defaults - - `true` - insert defaults by value (safer and slower, object literal is used). - - `"shared"` - insert defaults by reference (faster). If the default is an object, it will be shared by all instances of validated data. If you modify the inserted default in the validated data, it will be modified in the schema as well. -- _coerceTypes_: change data type of data to match `type` keyword. See the example in [Coercing data types](#coercing-data-types) and [coercion rules](https://github.com/epoberezkin/ajv/blob/master/COERCION.md). Option values: - - `false` (default) - no type coercion. - - `true` - coerce scalar data types. - - `"array"` - in addition to coercions between scalar types, coerce scalar data to an array with one element and vice versa (as required by the schema). - - -##### Asynchronous validation options - -- _transpile_: Requires [ajv-async](https://github.com/epoberezkin/ajv-async) package. It determines whether Ajv transpiles compiled asynchronous validation function. Option values: - - `undefined` (default) - transpile with [nodent](https://github.com/MatAtBread/nodent) if async functions are not supported. - - `true` - always transpile with nodent. - - `false` - do not transpile; if async functions are not supported an exception will be thrown. - - -##### Advanced options - -- _meta_: add [meta-schema](http://json-schema.org/documentation.html) so it can be used by other schemas (true by default). If an object is passed, it will be used as the default meta-schema for schemas that have no `$schema` keyword. This default meta-schema MUST have `$schema` keyword. -- _validateSchema_: validate added/compiled schemas against meta-schema (true by default). `$schema` property in the schema can be http://json-schema.org/draft-07/schema or absent (draft-07 meta-schema will be used) or can be a reference to the schema previously added with `addMetaSchema` method. Option values: - - `true` (default) - if the validation fails, throw the exception. - - `"log"` - if the validation fails, log error. - - `false` - skip schema validation. -- _addUsedSchema_: by default methods `compile` and `validate` add schemas to the instance if they have `$id` (or `id`) property that doesn't start with "#". If `$id` is present and it is not unique the exception will be thrown. Set this option to `false` to skip adding schemas to the instance and the `$id` uniqueness check when these methods are used. This option does not affect `addSchema` method. -- _inlineRefs_: Affects compilation of referenced schemas. Option values: - - `true` (default) - the referenced schemas that don't have refs in them are inlined, regardless of their size - that substantially improves performance at the cost of the bigger size of compiled schema functions. - - `false` - to not inline referenced schemas (they will be compiled as separate functions). - - integer number - to limit the maximum number of keywords of the schema that will be inlined. -- _passContext_: pass validation context to custom keyword functions. If this option is `true` and you pass some context to the compiled validation function with `validate.call(context, data)`, the `context` will be available as `this` in your custom keywords. By default `this` is Ajv instance. -- _loopRequired_: by default `required` keyword is compiled into a single expression (or a sequence of statements in `allErrors` mode). In case of a very large number of properties in this keyword it may result in a very big validation function. Pass integer to set the number of properties above which `required` keyword will be validated in a loop - smaller validation function size but also worse performance. -- _ownProperties_: by default Ajv iterates over all enumerable object properties; when this option is `true` only own enumerable object properties (i.e. found directly on the object rather than on its prototype) are iterated. Contributed by @mbroadst. -- _multipleOfPrecision_: by default `multipleOf` keyword is validated by comparing the result of division with parseInt() of that result. It works for dividers that are bigger than 1. For small dividers such as 0.01 the result of the division is usually not integer (even when it should be integer, see issue [#84](https://github.com/epoberezkin/ajv/issues/84)). If you need to use fractional dividers set this option to some positive integer N to have `multipleOf` validated using this formula: `Math.abs(Math.round(division) - division) < 1e-N` (it is slower but allows for float arithmetics deviations). -- _errorDataPath_ (deprecated): set `dataPath` to point to 'object' (default) or to 'property' when validating keywords `required`, `additionalProperties` and `dependencies`. -- _messages_: Include human-readable messages in errors. `true` by default. `false` can be passed when custom messages are used (e.g. with [ajv-i18n](https://github.com/epoberezkin/ajv-i18n)). -- _sourceCode_: add `sourceCode` property to validating function (for debugging; this code can be different from the result of toString call). -- _processCode_: an optional function to process generated code before it is passed to Function constructor. It can be used to either beautify (the validating function is generated without line-breaks) or to transpile code. Starting from version 5.0.0 this option replaced options: - - `beautify` that formatted the generated function using [js-beautify](https://github.com/beautify-web/js-beautify). If you want to beautify the generated code pass `require('js-beautify').js_beautify`. - - `transpile` that transpiled asynchronous validation function. You can still use `transpile` option with [ajv-async](https://github.com/epoberezkin/ajv-async) package. See [Asynchronous validation](#asynchronous-validation) for more information. -- _cache_: an optional instance of cache to store compiled schemas using stable-stringified schema as a key. For example, set-associative cache [sacjs](https://github.com/epoberezkin/sacjs) can be used. If not passed then a simple hash is used which is good enough for the common use case (a limited number of statically defined schemas). Cache should have methods `put(key, value)`, `get(key)`, `del(key)` and `clear()`. -- _serialize_: an optional function to serialize schema to cache key. Pass `false` to use schema itself as a key (e.g., if WeakMap used as a cache). By default [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used. - - -## Validation errors - -In case of validation failure, Ajv assigns the array of errors to `errors` property of validation function (or to `errors` property of Ajv instance when `validate` or `validateSchema` methods were called). In case of [asynchronous validation](#asynchronous-validation), the returned promise is rejected with exception `Ajv.ValidationError` that has `errors` property. - - -### Error objects - -Each error is an object with the following properties: - -- _keyword_: validation keyword. -- _dataPath_: the path to the part of the data that was validated. By default `dataPath` uses JavaScript property access notation (e.g., `".prop[1].subProp"`). When the option `jsonPointers` is true (see [Options](#options)) `dataPath` will be set using JSON pointer standard (e.g., `"/prop/1/subProp"`). -- _schemaPath_: the path (JSON-pointer as a URI fragment) to the schema of the keyword that failed validation. -- _params_: the object with the additional information about error that can be used to create custom error messages (e.g., using [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) package). See below for parameters set by all keywords. -- _message_: the standard error message (can be excluded with option `messages` set to false). -- _schema_: the schema of the keyword (added with `verbose` option). -- _parentSchema_: the schema containing the keyword (added with `verbose` option) -- _data_: the data validated by the keyword (added with `verbose` option). - -__Please note__: `propertyNames` keyword schema validation errors have an additional property `propertyName`, `dataPath` points to the object. After schema validation for each property name, if it is invalid an additional error is added with the property `keyword` equal to `"propertyNames"`. - - -### Error parameters - -Properties of `params` object in errors depend on the keyword that failed validation. - -- `maxItems`, `minItems`, `maxLength`, `minLength`, `maxProperties`, `minProperties` - property `limit` (number, the schema of the keyword). -- `additionalItems` - property `limit` (the maximum number of allowed items in case when `items` keyword is an array of schemas and `additionalItems` is false). -- `additionalProperties` - property `additionalProperty` (the property not used in `properties` and `patternProperties` keywords). -- `dependencies` - properties: - - `property` (dependent property), - - `missingProperty` (required missing dependency - only the first one is reported currently) - - `deps` (required dependencies, comma separated list as a string), - - `depsCount` (the number of required dependencies). -- `format` - property `format` (the schema of the keyword). -- `maximum`, `minimum` - properties: - - `limit` (number, the schema of the keyword), - - `exclusive` (boolean, the schema of `exclusiveMaximum` or `exclusiveMinimum`), - - `comparison` (string, comparison operation to compare the data to the limit, with the data on the left and the limit on the right; can be "<", "<=", ">", ">=") -- `multipleOf` - property `multipleOf` (the schema of the keyword) -- `pattern` - property `pattern` (the schema of the keyword) -- `required` - property `missingProperty` (required property that is missing). -- `propertyNames` - property `propertyName` (an invalid property name). -- `patternRequired` (in ajv-keywords) - property `missingPattern` (required pattern that did not match any property). -- `type` - property `type` (required type(s), a string, can be a comma-separated list) -- `uniqueItems` - properties `i` and `j` (indices of duplicate items). -- `const` - property `allowedValue` pointing to the value (the schema of the keyword). -- `enum` - property `allowedValues` pointing to the array of values (the schema of the keyword). -- `$ref` - property `ref` with the referenced schema URI. -- `oneOf` - property `passingSchemas` (array of indices of passing schemas, null if no schema passes). -- custom keywords (in case keyword definition doesn't create errors) - property `keyword` (the keyword name). - - -## Plugins - -Ajv can be extended with plugins that add custom keywords, formats or functions to process generated code. When such plugin is published as npm package it is recommended that it follows these conventions: - -- it exports a function -- this function accepts ajv instance as the first parameter and returns the same instance to allow chaining -- this function can accept an optional configuration as the second parameter - -If you have published a useful plugin please submit a PR to add it to the next section. - - -## Related packages - -- [ajv-async](https://github.com/epoberezkin/ajv-async) - plugin to configure async validation mode -- [ajv-bsontype](https://github.com/BoLaMN/ajv-bsontype) - plugin to validate mongodb's bsonType formats -- [ajv-cli](https://github.com/jessedc/ajv-cli) - command line interface -- [ajv-errors](https://github.com/epoberezkin/ajv-errors) - plugin for custom error messages -- [ajv-i18n](https://github.com/epoberezkin/ajv-i18n) - internationalised error messages -- [ajv-istanbul](https://github.com/epoberezkin/ajv-istanbul) - plugin to instrument generated validation code to measure test coverage of your schemas -- [ajv-keywords](https://github.com/epoberezkin/ajv-keywords) - plugin with custom validation keywords (if/then/else, select, typeof, etc.) -- [ajv-merge-patch](https://github.com/epoberezkin/ajv-merge-patch) - plugin with keywords $merge and $patch -- [ajv-pack](https://github.com/epoberezkin/ajv-pack) - produces a compact module exporting validation functions - - -## Some packages using Ajv - -- [webpack](https://github.com/webpack/webpack) - a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser -- [jsonscript-js](https://github.com/JSONScript/jsonscript-js) - the interpreter for [JSONScript](http://www.jsonscript.org) - scripted processing of existing endpoints and services -- [osprey-method-handler](https://github.com/mulesoft-labs/osprey-method-handler) - Express middleware for validating requests and responses based on a RAML method object, used in [osprey](https://github.com/mulesoft/osprey) - validating API proxy generated from a RAML definition -- [har-validator](https://github.com/ahmadnassri/har-validator) - HTTP Archive (HAR) validator -- [jsoneditor](https://github.com/josdejong/jsoneditor) - a web-based tool to view, edit, format, and validate JSON http://jsoneditoronline.org -- [JSON Schema Lint](https://github.com/nickcmaynard/jsonschemalint) - a web tool to validate JSON/YAML document against a single JSON Schema http://jsonschemalint.com -- [objection](https://github.com/vincit/objection.js) - SQL-friendly ORM for Node.js -- [table](https://github.com/gajus/table) - formats data into a string table -- [ripple-lib](https://github.com/ripple/ripple-lib) - a JavaScript API for interacting with [Ripple](https://ripple.com) in Node.js and the browser -- [restbase](https://github.com/wikimedia/restbase) - distributed storage with REST API & dispatcher for backend services built to provide a low-latency & high-throughput API for Wikipedia / Wikimedia content -- [hippie-swagger](https://github.com/CacheControl/hippie-swagger) - [Hippie](https://github.com/vesln/hippie) wrapper that provides end to end API testing with swagger validation -- [react-form-controlled](https://github.com/seeden/react-form-controlled) - React controlled form components with validation -- [rabbitmq-schema](https://github.com/tjmehta/rabbitmq-schema) - a schema definition module for RabbitMQ graphs and messages -- [@query/schema](https://www.npmjs.com/package/@query/schema) - stream filtering with a URI-safe query syntax parsing to JSON Schema -- [chai-ajv-json-schema](https://github.com/peon374/chai-ajv-json-schema) - chai plugin to us JSON Schema with expect in mocha tests -- [grunt-jsonschema-ajv](https://github.com/SignpostMarv/grunt-jsonschema-ajv) - Grunt plugin for validating files against JSON Schema -- [extract-text-webpack-plugin](https://github.com/webpack-contrib/extract-text-webpack-plugin) - extract text from bundle into a file -- [electron-builder](https://github.com/electron-userland/electron-builder) - a solution to package and build a ready for distribution Electron app -- [addons-linter](https://github.com/mozilla/addons-linter) - Mozilla Add-ons Linter -- [gh-pages-generator](https://github.com/epoberezkin/gh-pages-generator) - multi-page site generator converting markdown files to GitHub pages -- [ESLint](https://github.com/eslint/eslint) - the pluggable linting utility for JavaScript and JSX - - -## Tests - -``` -npm install -git submodule update --init -npm test -``` - -## Contributing - -All validation functions are generated using doT templates in [dot](https://github.com/epoberezkin/ajv/tree/master/lib/dot) folder. Templates are precompiled so doT is not a run-time dependency. - -`npm run build` - compiles templates to [dotjs](https://github.com/epoberezkin/ajv/tree/master/lib/dotjs) folder. - -`npm run watch` - automatically compiles templates when files in dot folder change - -Please see [Contributing guidelines](https://github.com/epoberezkin/ajv/blob/master/CONTRIBUTING.md) - - -## Changes history - -See https://github.com/epoberezkin/ajv/releases - -__Please note__: [Changes in version 6.0.0](https://github.com/epoberezkin/ajv/releases/tag/v6.0.0). - -[Version 5.0.0](https://github.com/epoberezkin/ajv/releases/tag/5.0.0). - -[Version 4.0.0](https://github.com/epoberezkin/ajv/releases/tag/4.0.0). - -[Version 3.0.0](https://github.com/epoberezkin/ajv/releases/tag/3.0.0). - -[Version 2.0.0](https://github.com/epoberezkin/ajv/releases/tag/2.0.0). - - -## License - -[MIT](https://github.com/epoberezkin/ajv/blob/master/LICENSE) diff --git a/truebit-implementation/node_modules/ajv/dist/ajv.bundle.js b/truebit-implementation/node_modules/ajv/dist/ajv.bundle.js deleted file mode 100644 index 0f292936..00000000 --- a/truebit-implementation/node_modules/ajv/dist/ajv.bundle.js +++ /dev/null @@ -1,7030 +0,0 @@ -(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.Ajv = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; -// For the source: https://gist.github.com/dperini/729294 -// For test cases: https://mathiasbynens.be/demo/url-regex -// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. -// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu; -var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i; -var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; -var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; -var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; -var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; - - -module.exports = formats; - -function formats(mode) { - mode = mode == 'full' ? 'full' : 'fast'; - return util.copy(formats[mode]); -} - - -formats.fast = { - // date: http://tools.ietf.org/html/rfc3339#section-5.6 - date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, - // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 - time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i, - 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i, - // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js - uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i, - 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, - 'uri-template': URITEMPLATE, - url: URL, - // email (sources from jsen validator): - // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 - // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') - email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, - hostname: HOSTNAME, - // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - // uuid: http://tools.ietf.org/html/rfc4122 - uuid: UUID, - // JSON-pointer: https://tools.ietf.org/html/rfc6901 - // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -formats.full = { - date: date, - time: time, - 'date-time': date_time, - uri: uri, - 'uri-reference': URIREF, - 'uri-template': URITEMPLATE, - url: URL, - email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, - hostname: hostname, - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - uuid: UUID, - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -function isLeapYear(year) { - // https://tools.ietf.org/html/rfc3339#appendix-C - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); -} - - -function date(str) { - // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 - var matches = str.match(DATE); - if (!matches) return false; - - var year = +matches[1]; - var month = +matches[2]; - var day = +matches[3]; - - return month >= 1 && month <= 12 && day >= 1 && - day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); -} - - -function time(str, full) { - var matches = str.match(TIME); - if (!matches) return false; - - var hour = matches[1]; - var minute = matches[2]; - var second = matches[3]; - var timeZone = matches[5]; - return ((hour <= 23 && minute <= 59 && second <= 59) || - (hour == 23 && minute == 59 && second == 60)) && - (!full || timeZone); -} - - -var DATE_TIME_SEPARATOR = /t|\s/i; -function date_time(str) { - // http://tools.ietf.org/html/rfc3339#section-5.6 - var dateTime = str.split(DATE_TIME_SEPARATOR); - return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); -} - - -function hostname(str) { - // https://tools.ietf.org/html/rfc1034#section-3.5 - // https://tools.ietf.org/html/rfc1123#section-2 - return str.length <= 255 && HOSTNAME.test(str); -} - - -var NOT_URI_FRAGMENT = /\/|:/; -function uri(str) { - // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." - return NOT_URI_FRAGMENT.test(str) && URI.test(str); -} - - -var Z_ANCHOR = /[^\\]\\Z/; -function regex(str) { - if (Z_ANCHOR.test(str)) return false; - try { - new RegExp(str); - return true; - } catch(e) { - return false; - } -} - -},{"./util":10}],5:[function(require,module,exports){ -'use strict'; - -var resolve = require('./resolve') - , util = require('./util') - , errorClasses = require('./error_classes') - , stableStringify = require('fast-json-stable-stringify'); - -var validateGenerator = require('../dotjs/validate'); - -/** - * Functions below are used inside compiled validations function - */ - -var ucs2length = util.ucs2length; -var equal = require('fast-deep-equal'); - -// this error is thrown by async schemas to return validation errors via exception -var ValidationError = errorClasses.Validation; - -module.exports = compile; - - -/** - * Compiles schema to validation function - * @this Ajv - * @param {Object} schema schema object - * @param {Object} root object with information about the root schema for this schema - * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution - * @param {String} baseId base ID for IDs in the schema - * @return {Function} validation function - */ -function compile(schema, root, localRefs, baseId) { - /* jshint validthis: true, evil: true */ - /* eslint no-shadow: 0 */ - var self = this - , opts = this._opts - , refVal = [ undefined ] - , refs = {} - , patterns = [] - , patternsHash = {} - , defaults = [] - , defaultsHash = {} - , customRules = []; - - root = root || { schema: schema, refVal: refVal, refs: refs }; - - var c = checkCompiling.call(this, schema, root, baseId); - var compilation = this._compilations[c.index]; - if (c.compiling) return (compilation.callValidate = callValidate); - - var formats = this._formats; - var RULES = this.RULES; - - try { - var v = localCompile(schema, root, localRefs, baseId); - compilation.validate = v; - var cv = compilation.callValidate; - if (cv) { - cv.schema = v.schema; - cv.errors = null; - cv.refs = v.refs; - cv.refVal = v.refVal; - cv.root = v.root; - cv.$async = v.$async; - if (opts.sourceCode) cv.source = v.source; - } - return v; - } finally { - endCompiling.call(this, schema, root, baseId); - } - - /* @this {*} - custom context, see passContext option */ - function callValidate() { - /* jshint validthis: true */ - var validate = compilation.validate; - var result = validate.apply(this, arguments); - callValidate.errors = validate.errors; - return result; - } - - function localCompile(_schema, _root, localRefs, baseId) { - var isRoot = !_root || (_root && _root.schema == _schema); - if (_root.schema != root.schema) - return compile.call(self, _schema, _root, localRefs, baseId); - - var $async = _schema.$async === true; - - var sourceCode = validateGenerator({ - isTop: true, - schema: _schema, - isRoot: isRoot, - baseId: baseId, - root: _root, - schemaPath: '', - errSchemaPath: '#', - errorPath: '""', - MissingRefError: errorClasses.MissingRef, - RULES: RULES, - validate: validateGenerator, - util: util, - resolve: resolve, - resolveRef: resolveRef, - usePattern: usePattern, - useDefault: useDefault, - useCustomRule: useCustomRule, - opts: opts, - formats: formats, - logger: self.logger, - self: self - }); - - sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) - + vars(defaults, defaultCode) + vars(customRules, customRuleCode) - + sourceCode; - - if (opts.processCode) sourceCode = opts.processCode(sourceCode); - // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); - var validate; - try { - var makeValidate = new Function( - 'self', - 'RULES', - 'formats', - 'root', - 'refVal', - 'defaults', - 'customRules', - 'equal', - 'ucs2length', - 'ValidationError', - sourceCode - ); - - validate = makeValidate( - self, - RULES, - formats, - root, - refVal, - defaults, - customRules, - equal, - ucs2length, - ValidationError - ); - - refVal[0] = validate; - } catch(e) { - self.logger.error('Error compiling schema, function code:', sourceCode); - throw e; - } - - validate.schema = _schema; - validate.errors = null; - validate.refs = refs; - validate.refVal = refVal; - validate.root = isRoot ? validate : _root; - if ($async) validate.$async = true; - if (opts.sourceCode === true) { - validate.source = { - code: sourceCode, - patterns: patterns, - defaults: defaults - }; - } - - return validate; - } - - function resolveRef(baseId, ref, isRoot) { - ref = resolve.url(baseId, ref); - var refIndex = refs[ref]; - var _refVal, refCode; - if (refIndex !== undefined) { - _refVal = refVal[refIndex]; - refCode = 'refVal[' + refIndex + ']'; - return resolvedRef(_refVal, refCode); - } - if (!isRoot && root.refs) { - var rootRefId = root.refs[ref]; - if (rootRefId !== undefined) { - _refVal = root.refVal[rootRefId]; - refCode = addLocalRef(ref, _refVal); - return resolvedRef(_refVal, refCode); - } - } - - refCode = addLocalRef(ref); - var v = resolve.call(self, localCompile, root, ref); - if (v === undefined) { - var localSchema = localRefs && localRefs[ref]; - if (localSchema) { - v = resolve.inlineRef(localSchema, opts.inlineRefs) - ? localSchema - : compile.call(self, localSchema, root, localRefs, baseId); - } - } - - if (v === undefined) { - removeLocalRef(ref); - } else { - replaceLocalRef(ref, v); - return resolvedRef(v, refCode); - } - } - - function addLocalRef(ref, v) { - var refId = refVal.length; - refVal[refId] = v; - refs[ref] = refId; - return 'refVal' + refId; - } - - function removeLocalRef(ref) { - delete refs[ref]; - } - - function replaceLocalRef(ref, v) { - var refId = refs[ref]; - refVal[refId] = v; - } - - function resolvedRef(refVal, code) { - return typeof refVal == 'object' || typeof refVal == 'boolean' - ? { code: code, schema: refVal, inline: true } - : { code: code, $async: refVal && !!refVal.$async }; - } - - function usePattern(regexStr) { - var index = patternsHash[regexStr]; - if (index === undefined) { - index = patternsHash[regexStr] = patterns.length; - patterns[index] = regexStr; - } - return 'pattern' + index; - } - - function useDefault(value) { - switch (typeof value) { - case 'boolean': - case 'number': - return '' + value; - case 'string': - return util.toQuotedString(value); - case 'object': - if (value === null) return 'null'; - var valueStr = stableStringify(value); - var index = defaultsHash[valueStr]; - if (index === undefined) { - index = defaultsHash[valueStr] = defaults.length; - defaults[index] = value; - } - return 'default' + index; - } - } - - function useCustomRule(rule, schema, parentSchema, it) { - var validateSchema = rule.definition.validateSchema; - if (validateSchema && self._opts.validateSchema !== false) { - var valid = validateSchema(schema); - if (!valid) { - var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); - if (self._opts.validateSchema == 'log') self.logger.error(message); - else throw new Error(message); - } - } - - var compile = rule.definition.compile - , inline = rule.definition.inline - , macro = rule.definition.macro; - - var validate; - if (compile) { - validate = compile.call(self, schema, parentSchema, it); - } else if (macro) { - validate = macro.call(self, schema, parentSchema, it); - if (opts.validateSchema !== false) self.validateSchema(validate, true); - } else if (inline) { - validate = inline.call(self, it, rule.keyword, schema, parentSchema); - } else { - validate = rule.definition.validate; - if (!validate) return; - } - - if (validate === undefined) - throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); - - var index = customRules.length; - customRules[index] = validate; - - return { - code: 'customRule' + index, - validate: validate - }; - } -} - - -/** - * Checks if the schema is currently compiled - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) - */ -function checkCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var index = compIndex.call(this, schema, root, baseId); - if (index >= 0) return { index: index, compiling: true }; - index = this._compilations.length; - this._compilations[index] = { - schema: schema, - root: root, - baseId: baseId - }; - return { index: index, compiling: false }; -} - - -/** - * Removes the schema from the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - */ -function endCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var i = compIndex.call(this, schema, root, baseId); - if (i >= 0) this._compilations.splice(i, 1); -} - - -/** - * Index of schema compilation in the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Integer} compilation index - */ -function compIndex(schema, root, baseId) { - /* jshint validthis: true */ - for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { - // high surrogate, and there is a next character - value = str.charCodeAt(pos); - if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate - } - } - return length; -}; - -},{}],10:[function(require,module,exports){ -'use strict'; - - -module.exports = { - copy: copy, - checkDataType: checkDataType, - checkDataTypes: checkDataTypes, - coerceToTypes: coerceToTypes, - toHash: toHash, - getProperty: getProperty, - escapeQuotes: escapeQuotes, - equal: require('fast-deep-equal'), - ucs2length: require('./ucs2length'), - varOccurences: varOccurences, - varReplace: varReplace, - cleanUpCode: cleanUpCode, - finalCleanUpCode: finalCleanUpCode, - schemaHasRules: schemaHasRules, - schemaHasRulesExcept: schemaHasRulesExcept, - toQuotedString: toQuotedString, - getPathExpr: getPathExpr, - getPath: getPath, - getData: getData, - unescapeFragment: unescapeFragment, - unescapeJsonPointer: unescapeJsonPointer, - escapeFragment: escapeFragment, - escapeJsonPointer: escapeJsonPointer -}; - - -function copy(o, to) { - to = to || {}; - for (var key in o) to[key] = o[key]; - return to; -} - - -function checkDataType(dataType, data, negate) { - var EQUAL = negate ? ' !== ' : ' === ' - , AND = negate ? ' || ' : ' && ' - , OK = negate ? '!' : '' - , NOT = negate ? '' : '!'; - switch (dataType) { - case 'null': return data + EQUAL + 'null'; - case 'array': return OK + 'Array.isArray(' + data + ')'; - case 'object': return '(' + OK + data + AND + - 'typeof ' + data + EQUAL + '"object"' + AND + - NOT + 'Array.isArray(' + data + '))'; - case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + - NOT + '(' + data + ' % 1)' + - AND + data + EQUAL + data + ')'; - default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; - } -} - - -function checkDataTypes(dataTypes, data) { - switch (dataTypes.length) { - case 1: return checkDataType(dataTypes[0], data, true); - default: - var code = ''; - var types = toHash(dataTypes); - if (types.array && types.object) { - code = types.null ? '(': '(!' + data + ' || '; - code += 'typeof ' + data + ' !== "object")'; - delete types.null; - delete types.array; - delete types.object; - } - if (types.number) delete types.integer; - for (var t in types) - code += (code ? ' && ' : '' ) + checkDataType(t, data, true); - - return code; - } -} - - -var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); -function coerceToTypes(optionCoerceTypes, dataTypes) { - if (Array.isArray(dataTypes)) { - var types = []; - for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); - return paths[lvl - up]; - } - - if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); - data = 'data' + ((lvl - up) || ''); - if (!jsonPointer) return data; - } - - var expr = data; - var segments = jsonPointer.split('/'); - for (var i=0; i', - $notOp = $isMax ? '>' : '<', - $errorKeyword = undefined; - if ($isDataExcl) { - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), - $exclusive = 'exclusive' + $lvl, - $exclType = 'exclType' + $lvl, - $exclIsNumber = 'exclIsNumber' + $lvl, - $opExpr = 'op' + $lvl, - $opStr = '\' + ' + $opExpr + ' + \''; - out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; - $schemaValueExcl = 'schemaExcl' + $lvl; - out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; - var $errorKeyword = $exclusiveKeyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; - if ($schema === undefined) { - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaValueExcl; - $isData = $isDataExcl; - } - } else { - var $exclIsNumber = typeof $schemaExcl == 'number', - $opStr = $op; - if ($exclIsNumber && $isData) { - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; - } else { - if ($exclIsNumber && $schema === undefined) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaExcl; - $notOp += '='; - } else { - if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); - if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $notOp += '='; - } else { - $exclusive = false; - $opStr += '='; - } - } - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; - } - } - $errorKeyword = $errorKeyword || $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be ' + ($opStr) + ' '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],13:[function(require,module,exports){ -'use strict'; -module.exports = function generate__limitItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $op = $keyword == 'maxItems' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxItems') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],14:[function(require,module,exports){ -'use strict'; -module.exports = function generate__limitLength(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $op = $keyword == 'maxLength' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - if (it.opts.unicode === false) { - out += ' ' + ($data) + '.length '; - } else { - out += ' ucs2length(' + ($data) + ') '; - } - out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be '; - if ($keyword == 'maxLength') { - out += 'longer'; - } else { - out += 'shorter'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' characters\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],15:[function(require,module,exports){ -'use strict'; -module.exports = function generate__limitProperties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $op = $keyword == 'maxProperties' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxProperties') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' properties\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],16:[function(require,module,exports){ -'use strict'; -module.exports = function generate_allOf(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $allSchemasEmpty = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - $allSchemasEmpty = false; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($breakOnError) { - if ($allSchemasEmpty) { - out += ' if (true) { '; - } else { - out += ' ' + ($closingBraces.slice(0, -1)) + ' '; - } - } - out = it.util.cleanUpCode(out); - return out; -} - -},{}],17:[function(require,module,exports){ -'use strict'; -module.exports = function generate_anyOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $noEmptySchema = $schema.every(function($sch) { - return it.util.schemaHasRules($sch, it.RULES.all); - }); - if ($noEmptySchema) { - var $currentBaseId = $it.baseId; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; - $closingBraces += '}'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should match some schema in anyOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - out = it.util.cleanUpCode(out); - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} - -},{}],18:[function(require,module,exports){ -'use strict'; -module.exports = function generate_comment(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $comment = it.util.toQuotedString($schema); - if (it.opts.$comment === true) { - out += ' console.log(' + ($comment) + ');'; - } else if (typeof it.opts.$comment == 'function') { - out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);'; - } - return out; -} - -},{}],19:[function(require,module,exports){ -'use strict'; -module.exports = function generate_const(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!$isData) { - out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; - } - out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be equal to constant\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' }'; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],20:[function(require,module,exports){ -'use strict'; -module.exports = function generate_contains(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId, - $nonEmptySchema = it.util.schemaHasRules($schema, it.RULES.all); - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($nonEmptySchema) { - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (' + ($nextValid) + ') break; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; - } else { - out += ' if (' + ($data) + '.length == 0) {'; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should contain a valid item\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - if ($nonEmptySchema) { - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - } - if (it.opts.allErrors) { - out += ' } '; - } - out = it.util.cleanUpCode(out); - return out; -} - -},{}],21:[function(require,module,exports){ -'use strict'; -module.exports = function generate_custom(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $rule = this, - $definition = 'definition' + $lvl, - $rDef = $rule.definition, - $closingBraces = ''; - var $compile, $inline, $macro, $ruleValidate, $validateCode; - if ($isData && $rDef.$data) { - $validateCode = 'keywordValidate' + $lvl; - var $validateSchema = $rDef.validateSchema; - out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; - } else { - $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); - if (!$ruleValidate) return; - $schemaValue = 'validate.schema' + $schemaPath; - $validateCode = $ruleValidate.code; - $compile = $rDef.compile; - $inline = $rDef.inline; - $macro = $rDef.macro; - } - var $ruleErrs = $validateCode + '.errors', - $i = 'i' + $lvl, - $ruleErr = 'ruleErr' + $lvl, - $asyncKeyword = $rDef.async; - if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); - if (!($inline || $macro)) { - out += '' + ($ruleErrs) + ' = null;'; - } - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($isData && $rDef.$data) { - $closingBraces += '}'; - out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; - if ($validateSchema) { - $closingBraces += '}'; - out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; - } - } - if ($inline) { - if ($rDef.statements) { - out += ' ' + ($ruleValidate.validate) + ' '; - } else { - out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; - } - } else if ($macro) { - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - $it.schema = $ruleValidate.validate; - $it.schemaPath = ''; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($code); - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - out += ' ' + ($validateCode) + '.call( '; - if (it.opts.passContext) { - out += 'this'; - } else { - out += 'self'; - } - if ($compile || $rDef.schema === false) { - out += ' , ' + ($data) + ' '; - } else { - out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; - } - out += ' , (dataPath || \'\')'; - if (it.errorPath != '""') { - out += ' + ' + (it.errorPath); - } - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; - var def_callRuleValidate = out; - out = $$outStack.pop(); - if ($rDef.errors === false) { - out += ' ' + ($valid) + ' = '; - if ($asyncKeyword) { - out += 'await '; - } - out += '' + (def_callRuleValidate) + '; '; - } else { - if ($asyncKeyword) { - $ruleErrs = 'customErrors' + $lvl; - out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; - } else { - out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; - } - } - } - if ($rDef.modifying) { - out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; - } - out += '' + ($closingBraces); - if ($rDef.valid) { - if ($breakOnError) { - out += ' if (true) { '; - } - } else { - out += ' if ( '; - if ($rDef.valid === undefined) { - out += ' !'; - if ($macro) { - out += '' + ($nextValid); - } else { - out += '' + ($valid); - } - } else { - out += ' ' + (!$rDef.valid) + ' '; - } - out += ') { '; - $errorKeyword = $rule.keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - var def_customError = out; - out = $$outStack.pop(); - if ($inline) { - if ($rDef.errors) { - if ($rDef.errors != 'full') { - out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '= 0) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } else { - throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); - } - } - var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; - var $formatType = $isObject && $format.type || 'string'; - if ($isObject) { - var $async = $format.async === true; - $format = $format.validate; - } - if ($formatType != $ruleType) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } - if ($async) { - if (!it.async) throw new Error('async format in sync schema'); - var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; - out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { '; - } else { - out += ' if (! '; - var $formatRef = 'formats' + it.util.getProperty($schema); - if ($isObject) $formatRef += '.validate'; - if (typeof $format == 'function') { - out += ' ' + ($formatRef) + '(' + ($data) + ') '; - } else { - out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; - } - out += ') { '; - } - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match format "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],25:[function(require,module,exports){ -'use strict'; -module.exports = function generate_if(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - var $thenSch = it.schema['then'], - $elseSch = it.schema['else'], - $thenPresent = $thenSch !== undefined && it.util.schemaHasRules($thenSch, it.RULES.all), - $elsePresent = $elseSch !== undefined && it.util.schemaHasRules($elseSch, it.RULES.all), - $currentBaseId = $it.baseId; - if ($thenPresent || $elsePresent) { - var $ifClause; - $it.createErrors = false; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - $it.createErrors = true; - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - if ($thenPresent) { - out += ' if (' + ($nextValid) + ') { '; - $it.schema = it.schema['then']; - $it.schemaPath = it.schemaPath + '.then'; - $it.errSchemaPath = it.errSchemaPath + '/then'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'then\'; '; - } else { - $ifClause = '\'then\''; - } - out += ' } '; - if ($elsePresent) { - out += ' else { '; - } - } else { - out += ' if (!' + ($nextValid) + ') { '; - } - if ($elsePresent) { - $it.schema = it.schema['else']; - $it.schemaPath = it.schemaPath + '.else'; - $it.errSchemaPath = it.errSchemaPath + '/else'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'else\'; '; - } else { - $ifClause = '\'else\''; - } - out += ' } '; - } - out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - out = it.util.cleanUpCode(out); - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} - -},{}],26:[function(require,module,exports){ -'use strict'; - -//all requires must be explicit because browserify won't work with dynamic requires -module.exports = { - '$ref': require('./ref'), - allOf: require('./allOf'), - anyOf: require('./anyOf'), - '$comment': require('./comment'), - const: require('./const'), - contains: require('./contains'), - dependencies: require('./dependencies'), - 'enum': require('./enum'), - format: require('./format'), - 'if': require('./if'), - items: require('./items'), - maximum: require('./_limit'), - minimum: require('./_limit'), - maxItems: require('./_limitItems'), - minItems: require('./_limitItems'), - maxLength: require('./_limitLength'), - minLength: require('./_limitLength'), - maxProperties: require('./_limitProperties'), - minProperties: require('./_limitProperties'), - multipleOf: require('./multipleOf'), - not: require('./not'), - oneOf: require('./oneOf'), - pattern: require('./pattern'), - properties: require('./properties'), - propertyNames: require('./propertyNames'), - required: require('./required'), - uniqueItems: require('./uniqueItems'), - validate: require('./validate') -}; - -},{"./_limit":12,"./_limitItems":13,"./_limitLength":14,"./_limitProperties":15,"./allOf":16,"./anyOf":17,"./comment":18,"./const":19,"./contains":20,"./dependencies":22,"./enum":23,"./format":24,"./if":25,"./items":27,"./multipleOf":28,"./not":29,"./oneOf":30,"./pattern":31,"./properties":32,"./propertyNames":33,"./ref":34,"./required":35,"./uniqueItems":36,"./validate":37}],27:[function(require,module,exports){ -'use strict'; -module.exports = function generate_items(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId; - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if (Array.isArray($schema)) { - var $additionalItems = it.schema.additionalItems; - if ($additionalItems === false) { - out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - $closingBraces += '}'; - out += ' else { '; - } - } - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; - var $passData = $data + '[' + $i + ']'; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); - $it.dataPathArr[$dataNxt] = $i; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) { - $it.schema = $additionalItems; - $it.schemaPath = it.schemaPath + '.additionalItems'; - $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } else if (it.util.schemaHasRules($schema, it.RULES.all)) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' }'; - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - out = it.util.cleanUpCode(out); - return out; -} - -},{}],28:[function(require,module,exports){ -'use strict'; -module.exports = function generate_multipleOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - out += 'var division' + ($lvl) + ';if ('; - if ($isData) { - out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; - } - out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; - if (it.opts.multipleOfPrecision) { - out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; - } else { - out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; - } - out += ' ) '; - if ($isData) { - out += ' ) '; - } - out += ' ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be multiple of '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],29:[function(require,module,exports){ -'use strict'; -module.exports = function generate_not(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - if (it.util.schemaHasRules($schema, it.RULES.all)) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.createErrors = false; - var $allErrorsOption; - if ($it.opts.allErrors) { - $allErrorsOption = $it.opts.allErrors; - $it.opts.allErrors = false; - } - out += ' ' + (it.validate($it)) + ' '; - $it.createErrors = true; - if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (' + ($nextValid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - } else { - out += ' var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if ($breakOnError) { - out += ' if (false) { '; - } - } - return out; -} - -},{}],30:[function(require,module,exports){ -'use strict'; -module.exports = function generate_oneOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $prevValid = 'prevValid' + $lvl, - $passingSchemas = 'passingSchemas' + $lvl; - out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - } else { - out += ' var ' + ($nextValid) + ' = true; '; - } - if ($i) { - out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { '; - $closingBraces += '}'; - } - out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match exactly one schema in oneOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; - if (it.opts.allErrors) { - out += ' } '; - } - return out; -} - -},{}],31:[function(require,module,exports){ -'use strict'; -module.exports = function generate_pattern(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; - } - out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match pattern "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],32:[function(require,module,exports){ -'use strict'; -module.exports = function generate_properties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl; - var $schemaKeys = Object.keys($schema || {}), - $pProperties = it.schema.patternProperties || {}, - $pPropertyKeys = Object.keys($pProperties), - $aProperties = it.schema.additionalProperties, - $someProperties = $schemaKeys.length || $pPropertyKeys.length, - $noAdditional = $aProperties === false, - $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, - $removeAdditional = it.opts.removeAdditional, - $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - var $required = it.schema.required; - if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required); - out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined;'; - } - if ($checkAdditional) { - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - if ($someProperties) { - out += ' var isAdditional' + ($lvl) + ' = !(false '; - if ($schemaKeys.length) { - if ($schemaKeys.length > 8) { - out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') '; - } else { - var arr1 = $schemaKeys; - if (arr1) { - var $propertyKey, i1 = -1, - l1 = arr1.length - 1; - while (i1 < l1) { - $propertyKey = arr1[i1 += 1]; - out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; - } - } - } - } - if ($pPropertyKeys.length) { - var arr2 = $pPropertyKeys; - if (arr2) { - var $pProperty, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $pProperty = arr2[$i += 1]; - out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; - } - } - } - out += ' ); if (isAdditional' + ($lvl) + ') { '; - } - if ($removeAdditional == 'all') { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - var $currentErrorPath = it.errorPath; - var $additionalProperty = '\' + ' + $key + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - } - if ($noAdditional) { - if ($removeAdditional) { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - out += ' ' + ($nextValid) + ' = false; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalProperties'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is an invalid additional property'; - } else { - out += 'should NOT have additional properties'; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - out += ' break; '; - } - } - } else if ($additionalIsSchema) { - if ($removeAdditional == 'failing') { - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - } else { - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - } - } - it.errorPath = $currentErrorPath; - } - if ($someProperties) { - out += ' } '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - var $useDefaults = it.opts.useDefaults && !it.compositeRule; - if ($schemaKeys.length) { - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - var $prop = it.util.getProperty($propertyKey), - $passData = $data + $prop, - $hasDefault = $useDefaults && $sch.default !== undefined; - $it.schema = $sch; - $it.schemaPath = $schemaPath + $prop; - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); - $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); - $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - $code = it.util.varReplace($code, $nextData, $passData); - var $useData = $passData; - } else { - var $useData = $nextData; - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; - } - if ($hasDefault) { - out += ' ' + ($code) + ' '; - } else { - if ($requiredHash && $requiredHash[$propertyKey]) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = false; '; - var $currentErrorPath = it.errorPath, - $currErrSchemaPath = $errSchemaPath, - $missingProperty = it.util.escapeQuotes($propertyKey); - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - $errSchemaPath = it.errSchemaPath + '/required'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - it.errorPath = $currentErrorPath; - out += ' } else { '; - } else { - if ($breakOnError) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = true; } else { '; - } else { - out += ' if (' + ($useData) + ' !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ' ) { '; - } - } - out += ' ' + ($code) + ' } '; - } - } - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($pPropertyKeys.length) { - var arr4 = $pPropertyKeys; - if (arr4) { - var $pProperty, i4 = -1, - l4 = arr4.length - 1; - while (i4 < l4) { - $pProperty = arr4[i4 += 1]; - var $sch = $pProperties[$pProperty]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - $it.schema = $sch; - $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); - $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else ' + ($nextValid) + ' = true; '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - out = it.util.cleanUpCode(out); - return out; -} - -},{}],33:[function(require,module,exports){ -'use strict'; -module.exports = function generate_propertyNames(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - out += 'var ' + ($errs) + ' = errors;'; - if (it.util.schemaHasRules($schema, it.RULES.all)) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $i = 'i' + $lvl, - $invalidName = '\' + ' + $key + ' + \'', - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined; '; - } - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' var startErrs' + ($lvl) + ' = errors; '; - var $passData = $key; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '= it.opts.loopRequired, - $ownProperties = it.opts.ownProperties; - if ($breakOnError) { - out += ' var missing' + ($lvl) + '; '; - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - out += ' var ' + ($valid) + ' = true; '; - if ($isData) { - out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += '; if (!' + ($valid) + ') break; } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } else { - out += ' if ( '; - var arr2 = $required; - if (arr2) { - var $propertyKey, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $propertyKey = arr2[$i += 1]; - if ($i) { - out += ' || '; - } - var $prop = it.util.getProperty($propertyKey), - $useData = $data + $prop; - out += ' ( ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; - } - } - out += ') { '; - var $propertyPath = 'missing' + $lvl, - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } - } else { - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - if ($isData) { - out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; - if ($isData) { - out += ' } '; - } - } else { - var arr3 = $required; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $prop = it.util.getProperty($propertyKey), - $missingProperty = it.util.escapeQuotes($propertyKey), - $useData = $data + $prop; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; - } - } - } - } - it.errorPath = $currentErrorPath; - } else if ($breakOnError) { - out += ' if (true) {'; - } - return out; -} - -},{}],36:[function(require,module,exports){ -'use strict'; -module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (($schema || $isData) && it.opts.uniqueItems !== false) { - if ($isData) { - out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; - } - out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { '; - var $itemType = it.schema.items && it.schema.items.type, - $typeIsArray = Array.isArray($itemType); - if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) { - out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } '; - } else { - out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; '; - var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); - out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; '; - if ($typeIsArray) { - out += ' if (typeof item == \'string\') item = \'"\' + item; '; - } - out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } '; - } - out += ' } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} - -},{}],37:[function(require,module,exports){ -'use strict'; -module.exports = function generate_validate(it, $keyword, $ruleType) { - var out = ''; - var $async = it.schema.$async === true, - $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), - $id = it.self._getId(it.schema); - if (it.isTop) { - out += ' var validate = '; - if ($async) { - it.async = true; - out += 'async '; - } - out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; - if ($id && (it.opts.sourceCode || it.opts.processCode)) { - out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; - } - } - if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { - var $keyword = 'false schema'; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - if (it.schema === false) { - if (it.isTop) { - $breakOnError = true; - } else { - out += ' var ' + ($valid) + ' = false; '; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'boolean schema is false\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } else { - if (it.isTop) { - if ($async) { - out += ' return data; '; - } else { - out += ' validate.errors = null; return true; '; - } - } else { - out += ' var ' + ($valid) + ' = true; '; - } - } - if (it.isTop) { - out += ' }; return validate; '; - } - return out; - } - if (it.isTop) { - var $top = it.isTop, - $lvl = it.level = 0, - $dataLvl = it.dataLevel = 0, - $data = 'data'; - it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); - it.baseId = it.baseId || it.rootId; - delete it.isTop; - it.dataPathArr = [undefined]; - out += ' var vErrors = null; '; - out += ' var errors = 0; '; - out += ' if (rootData === undefined) rootData = data; '; - } else { - var $lvl = it.level, - $dataLvl = it.dataLevel, - $data = 'data' + ($dataLvl || ''); - if ($id) it.baseId = it.resolve.url(it.baseId, $id); - if ($async && !it.async) throw new Error('async schema in sync schema'); - out += ' var errs_' + ($lvl) + ' = errors;'; - } - var $valid = 'valid' + $lvl, - $breakOnError = !it.opts.allErrors, - $closingBraces1 = '', - $closingBraces2 = ''; - var $errorKeyword; - var $typeSchema = it.schema.type, - $typeIsArray = Array.isArray($typeSchema); - if ($typeIsArray && $typeSchema.length == 1) { - $typeSchema = $typeSchema[0]; - $typeIsArray = false; - } - if (it.schema.$ref && $refKeywords) { - if (it.opts.extendRefs == 'fail') { - throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); - } else if (it.opts.extendRefs !== true) { - $refKeywords = false; - it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); - } - } - if (it.schema.$comment && it.opts.$comment) { - out += ' ' + (it.RULES.all.$comment.code(it, '$comment')); - } - if ($typeSchema) { - if (it.opts.coerceTypes) { - var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); - } - var $rulesGroup = it.RULES.types[$typeSchema]; - if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type', - $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; - out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; - if ($coerceToTypes) { - var $dataType = 'dataType' + $lvl, - $coerced = 'coerced' + $lvl; - out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; - if (it.opts.coerceTypes == 'array') { - out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; - } - out += ' var ' + ($coerced) + ' = undefined; '; - var $bracesCoercion = ''; - var arr1 = $coerceToTypes; - if (arr1) { - var $type, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $type = arr1[$i += 1]; - if ($i) { - out += ' if (' + ($coerced) + ' === undefined) { '; - $bracesCoercion += '}'; - } - if (it.opts.coerceTypes == 'array' && $type != 'array') { - out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; - } - if ($type == 'string') { - out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; - } else if ($type == 'number' || $type == 'integer') { - out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; - if ($type == 'integer') { - out += ' && !(' + ($data) + ' % 1)'; - } - out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; - } else if ($type == 'boolean') { - out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; - } else if ($type == 'null') { - out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; - } else if (it.opts.coerceTypes == 'array' && $type == 'array') { - out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; - } - } - } - out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' ' + ($data) + ' = ' + ($coerced) + '; '; - if (!$dataLvl) { - out += 'if (' + ($parentData) + ' !== undefined)'; - } - out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } - out += ' } '; - } - } - if (it.schema.$ref && !$refKeywords) { - out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; - if ($breakOnError) { - out += ' } if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } else { - var arr2 = it.RULES; - if (arr2) { - var $rulesGroup, i2 = -1, - l2 = arr2.length - 1; - while (i2 < l2) { - $rulesGroup = arr2[i2 += 1]; - if ($shouldUseGroup($rulesGroup)) { - if ($rulesGroup.type) { - out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { '; - } - if (it.opts.useDefaults && !it.compositeRule) { - if ($rulesGroup.type == 'object' && it.schema.properties) { - var $schema = it.schema.properties, - $schemaKeys = Object.keys($schema); - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if ($sch.default !== undefined) { - var $passData = $data + it.util.getProperty($propertyKey); - out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { - var arr4 = it.schema.items; - if (arr4) { - var $sch, $i = -1, - l4 = arr4.length - 1; - while ($i < l4) { - $sch = arr4[$i += 1]; - if ($sch.default !== undefined) { - var $passData = $data + '[' + $i + ']'; - out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } - } - var arr5 = $rulesGroup.rules; - if (arr5) { - var $rule, i5 = -1, - l5 = arr5.length - 1; - while (i5 < l5) { - $rule = arr5[i5 += 1]; - if ($shouldUseRule($rule)) { - var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); - if ($code) { - out += ' ' + ($code) + ' '; - if ($breakOnError) { - $closingBraces1 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces1) + ' '; - $closingBraces1 = ''; - } - if ($rulesGroup.type) { - out += ' } '; - if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { - out += ' else { '; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - } - } - if ($breakOnError) { - out += ' if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces2) + ' '; - } - if ($top) { - if ($async) { - out += ' if (errors === 0) return data; '; - out += ' else throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; '; - out += ' return errors === 0; '; - } - out += ' }; return validate;'; - } else { - out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; - } - out = it.util.cleanUpCode(out); - if ($top) { - out = it.util.finalCleanUpCode(out, $async); - } - - function $shouldUseGroup($rulesGroup) { - var rules = $rulesGroup.rules; - for (var i = 0; i < rules.length; i++) - if ($shouldUseRule(rules[i])) return true; - } - - function $shouldUseRule($rule) { - return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); - } - - function $ruleImplementsSomeKeyword($rule) { - var impl = $rule.implements; - for (var i = 0; i < impl.length; i++) - if (it.schema[impl[i]] !== undefined) return true; - } - return out; -} - -},{}],38:[function(require,module,exports){ -'use strict'; - -var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; -var customRuleCode = require('./dotjs/custom'); - -module.exports = { - add: addKeyword, - get: getKeyword, - remove: removeKeyword -}; - -/** - * Define custom keyword - * @this Ajv - * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). - * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. - * @return {Ajv} this for method chaining - */ -function addKeyword(keyword, definition) { - /* jshint validthis: true */ - /* eslint no-shadow: 0 */ - var RULES = this.RULES; - - if (RULES.keywords[keyword]) - throw new Error('Keyword ' + keyword + ' is already defined'); - - if (!IDENTIFIER.test(keyword)) - throw new Error('Keyword ' + keyword + ' is not a valid identifier'); - - if (definition) { - if (definition.macro && definition.valid !== undefined) - throw new Error('"valid" option cannot be used with macro keywords'); - - var dataType = definition.type; - if (Array.isArray(dataType)) { - var i, len = dataType.length; - for (i=0; i 1) { - sets[0] = sets[0].slice(0, -1); - var xl = sets.length - 1; - for (var x = 1; x < xl; ++x) { - sets[x] = sets[x].slice(1, -1); - } - sets[xl] = sets[xl].slice(1); - return sets.join(''); - } else { - return sets[0]; - } -} -function subexp(str) { - return "(?:" + str + ")"; -} -function typeOf(o) { - return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase(); -} -function toUpperCase(str) { - return str.toUpperCase(); -} -function toArray(obj) { - return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : []; -} -function assign(target, source) { - var obj = target; - if (source) { - for (var key in source) { - obj[key] = source[key]; - } - } - return obj; -} - -function buildExps(isIRI) { - var ALPHA$$ = "[A-Za-z]", - CR$ = "[\\x0D]", - DIGIT$$ = "[0-9]", - DQUOTE$$ = "[\\x22]", - HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), - //case-insensitive - LF$$ = "[\\x0A]", - SP$$ = "[\\x20]", - PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), - //expanded - GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", - SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", - RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), - UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", - //subset, excludes bidi control characters - IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", - //subset - UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), - SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), - USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), - DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), - DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), - //relaxed parsing rules - IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), - H16$ = subexp(HEXDIG$$ + "{1,4}"), - LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), - IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), - // 6( h16 ":" ) ls32 - IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), - // "::" 5( h16 ":" ) ls32 - IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), - //[ h16 ] "::" 4( h16 ":" ) ls32 - IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), - //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), - //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), - //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), - //[ *4( h16 ":" ) h16 ] "::" ls32 - IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), - //[ *5( h16 ":" ) h16 ] "::" h16 - IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), - //[ *6( h16 ":" ) h16 ] "::" - IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), - ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), - //RFC 6874 - IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), - //RFC 6874 - IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), - //RFC 6874, with relaxed parsing rules - IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), - IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), - //RFC 6874 - REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), - HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), - PORT$ = subexp(DIGIT$$ + "*"), - AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), - PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), - SEGMENT$ = subexp(PCHAR$ + "*"), - SEGMENT_NZ$ = subexp(PCHAR$ + "+"), - SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), - PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), - PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), - //simplified - PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), - //simplified - PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), - //simplified - PATH_EMPTY$ = "(?!" + PCHAR$ + ")", - PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), - FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), - HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), - RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), - ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), - GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", - SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; - return { - NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), - NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), - NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), - ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), - UNRESERVED: new RegExp(UNRESERVED$$, "g"), - OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), - PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), - IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), - IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules - }; -} -var URI_PROTOCOL = buildExps(false); - -var IRI_PROTOCOL = buildExps(true); - -var slicedToArray = function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - return sliceIterator(arr, i); - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - }; -}(); - - - - - - - - - - - - - -var toConsumableArray = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } else { - return Array.from(arr); - } -}; - -/** Highest positive signed 32-bit float value */ - -var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -var base = 36; -var tMin = 1; -var tMax = 26; -var skew = 38; -var damp = 700; -var initialBias = 72; -var initialN = 128; // 0x80 -var delimiter = '-'; // '\x2D' - -/** Regular expressions */ -var regexPunycode = /^xn--/; -var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars -var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -var errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -var baseMinusTMin = base - tMin; -var floor = Math.floor; -var stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error$1(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, fn) { - var result = []; - var length = array.length; - while (length--) { - result[length] = fn(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ -function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - while (counter < length) { - var value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - var extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { - // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -var ucs2encode = function ucs2encode(array) { - return String.fromCodePoint.apply(String, toConsumableArray(array)); -}; - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -var basicToDigit = function basicToDigit(codePoint) { - if (codePoint - 0x30 < 0x0A) { - return codePoint - 0x16; - } - if (codePoint - 0x41 < 0x1A) { - return codePoint - 0x41; - } - if (codePoint - 0x61 < 0x1A) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -var digitToBasic = function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -var adapt = function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -var decode = function decode(input) { - // Don't use UCS-2. - var output = []; - var inputLength = input.length; - var i = 0; - var n = initialN; - var bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - var basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (var j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error$1('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{ - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - var oldi = i; - for (var w = 1, k = base;; /* no condition */k += base) { - - if (index >= inputLength) { - error$1('invalid-input'); - } - - var digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error$1('overflow'); - } - - i += digit * w; - var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - - if (digit < t) { - break; - } - - var baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error$1('overflow'); - } - - w *= baseMinusT; - } - - var out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error$1('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - } - - return String.fromCodePoint.apply(String, output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -var encode = function encode(input) { - var output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - var inputLength = input.length; - - // Initialize the state. - var n = initialN; - var delta = 0; - var bias = initialBias; - - // Handle the basic code points. - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _currentValue2 = _step.value; - - if (_currentValue2 < 0x80) { - output.push(stringFromCharCode(_currentValue2)); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - var basicLength = output.length; - var handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - var m = maxInt; - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var currentValue = _step2.value; - - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - var handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error$1('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var _currentValue = _step3.value; - - if (_currentValue < n && ++delta > maxInt) { - error$1('overflow'); - } - if (_currentValue == n) { - // Represent delta as a generalized variable-length integer. - var q = delta; - for (var k = base;; /* no condition */k += base) { - var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - if (q < t) { - break; - } - var qMinusT = q - t; - var baseMinusT = base - t; - output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - ++delta; - ++n; - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -var toUnicode = function toUnicode(input) { - return mapDomain(input, function (string) { - return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -var toASCII = function toASCII(input) { - return mapDomain(input, function (string) { - return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -var punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.1.0', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -/** - * URI.js - * - * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. - * @author Gary Court - * @see http://github.com/garycourt/uri-js - */ -/** - * Copyright 2011 Gary Court. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY GARY COURT ``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 GARY COURT 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. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of Gary Court. - */ -var SCHEMES = {}; -function pctEncChar(chr) { - var c = chr.charCodeAt(0); - var e = void 0; - if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase(); - return e; -} -function pctDecChars(str) { - var newStr = ""; - var i = 0; - var il = str.length; - while (i < il) { - var c = parseInt(str.substr(i + 1, 2), 16); - if (c < 128) { - newStr += String.fromCharCode(c); - i += 3; - } else if (c >= 194 && c < 224) { - if (il - i >= 6) { - var c2 = parseInt(str.substr(i + 4, 2), 16); - newStr += String.fromCharCode((c & 31) << 6 | c2 & 63); - } else { - newStr += str.substr(i, 6); - } - i += 6; - } else if (c >= 224) { - if (il - i >= 9) { - var _c = parseInt(str.substr(i + 4, 2), 16); - var c3 = parseInt(str.substr(i + 7, 2), 16); - newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63); - } else { - newStr += str.substr(i, 9); - } - i += 9; - } else { - newStr += str.substr(i, 3); - i += 3; - } - } - return newStr; -} -function _normalizeComponentEncoding(components, protocol) { - function decodeUnreserved(str) { - var decStr = pctDecChars(str); - return !decStr.match(protocol.UNRESERVED) ? str : decStr; - } - if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); - if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - return components; -} - -function _stripLeadingZeros(str) { - return str.replace(/^0*(.*)/, "$1") || "0"; -} -function _normalizeIPv4(host, protocol) { - var matches = host.match(protocol.IPV4ADDRESS) || []; - - var _matches = slicedToArray(matches, 2), - address = _matches[1]; - - if (address) { - return address.split(".").map(_stripLeadingZeros).join("."); - } else { - return host; - } -} -function _normalizeIPv6(host, protocol) { - var matches = host.match(protocol.IPV6ADDRESS) || []; - - var _matches2 = slicedToArray(matches, 3), - address = _matches2[1], - zone = _matches2[2]; - - if (address) { - var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(), - _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), - last = _address$toLowerCase$2[0], - first = _address$toLowerCase$2[1]; - - var firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; - var lastFields = last.split(":").map(_stripLeadingZeros); - var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); - var fieldCount = isLastFieldIPv4Address ? 7 : 8; - var lastFieldsStart = lastFields.length - fieldCount; - var fields = Array(fieldCount); - for (var x = 0; x < fieldCount; ++x) { - fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; - } - if (isLastFieldIPv4Address) { - fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); - } - var allZeroFields = fields.reduce(function (acc, field, index) { - if (!field || field === "0") { - var lastLongest = acc[acc.length - 1]; - if (lastLongest && lastLongest.index + lastLongest.length === index) { - lastLongest.length++; - } else { - acc.push({ index: index, length: 1 }); - } - } - return acc; - }, []); - var longestZeroFields = allZeroFields.sort(function (a, b) { - return b.length - a.length; - })[0]; - var newHost = void 0; - if (longestZeroFields && longestZeroFields.length > 1) { - var newFirst = fields.slice(0, longestZeroFields.index); - var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); - newHost = newFirst.join(":") + "::" + newLast.join(":"); - } else { - newHost = fields.join(":"); - } - if (zone) { - newHost += "%" + zone; - } - return newHost; - } else { - return host; - } -} -var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; -var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined; -function parse(uriString) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var components = {}; - var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; - if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; - var matches = uriString.match(URI_PARSE); - if (matches) { - if (NO_MATCH_IS_UNDEFINED) { - //store each component - components.scheme = matches[1]; - components.userinfo = matches[3]; - components.host = matches[4]; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = matches[7]; - components.fragment = matches[8]; - //fix port number - if (isNaN(components.port)) { - components.port = matches[5]; - } - } else { - //IE FIX for improper RegExp matching - //store each component - components.scheme = matches[1] || undefined; - components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined; - components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined; - components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined; - //fix port number - if (isNaN(components.port)) { - components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined; - } - } - if (components.host) { - //normalize IP hosts - components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); - } - //determine reference type - if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { - components.reference = "same-document"; - } else if (components.scheme === undefined) { - components.reference = "relative"; - } else if (components.fragment === undefined) { - components.reference = "absolute"; - } else { - components.reference = "uri"; - } - //check for reference errors - if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { - components.error = components.error || "URI is not a " + options.reference + " reference."; - } - //find scheme handler - var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //check if scheme can't handle IRIs - if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { - //if host component is a domain name - if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) { - //convert Unicode IDN -> ASCII IDN - try { - components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; - } - } - //convert IRI -> URI - _normalizeComponentEncoding(components, URI_PROTOCOL); - } else { - //normalize encodings - _normalizeComponentEncoding(components, protocol); - } - //perform scheme specific parsing - if (schemeHandler && schemeHandler.parse) { - schemeHandler.parse(components, options); - } - } else { - components.error = components.error || "URI can not be parsed."; - } - return components; -} - -function _recomposeAuthority(components, options) { - var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; - var uriTokens = []; - if (components.userinfo !== undefined) { - uriTokens.push(components.userinfo); - uriTokens.push("@"); - } - if (components.host !== undefined) { - //normalize IP hosts, add brackets and escape zone separator for IPv6 - uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) { - return "[" + $1 + ($2 ? "%25" + $2 : "") + "]"; - })); - } - if (typeof components.port === "number") { - uriTokens.push(":"); - uriTokens.push(components.port.toString(10)); - } - return uriTokens.length ? uriTokens.join("") : undefined; -} - -var RDS1 = /^\.\.?\//; -var RDS2 = /^\/\.(\/|$)/; -var RDS3 = /^\/\.\.(\/|$)/; -var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; -function removeDotSegments(input) { - var output = []; - while (input.length) { - if (input.match(RDS1)) { - input = input.replace(RDS1, ""); - } else if (input.match(RDS2)) { - input = input.replace(RDS2, "/"); - } else if (input.match(RDS3)) { - input = input.replace(RDS3, "/"); - output.pop(); - } else if (input === "." || input === "..") { - input = ""; - } else { - var im = input.match(RDS5); - if (im) { - var s = im[0]; - input = input.slice(s.length); - output.push(s); - } else { - throw new Error("Unexpected dot segment condition"); - } - } - } - return output.join(""); -} - -function serialize(components) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL; - var uriTokens = []; - //find scheme handler - var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //perform scheme specific serialization - if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); - if (components.host) { - //if host component is an IPv6 address - if (protocol.IPV6ADDRESS.test(components.host)) {} - //TODO: normalize IPv6 address as per RFC 5952 - - //if host component is a domain name - else if (options.domainHost || schemeHandler && schemeHandler.domainHost) { - //convert IDN via punycode - try { - components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - } - } - //normalize encoding - _normalizeComponentEncoding(components, protocol); - if (options.reference !== "suffix" && components.scheme) { - uriTokens.push(components.scheme); - uriTokens.push(":"); - } - var authority = _recomposeAuthority(components, options); - if (authority !== undefined) { - if (options.reference !== "suffix") { - uriTokens.push("//"); - } - uriTokens.push(authority); - if (components.path && components.path.charAt(0) !== "/") { - uriTokens.push("/"); - } - } - if (components.path !== undefined) { - var s = components.path; - if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { - s = removeDotSegments(s); - } - if (authority === undefined) { - s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" - } - uriTokens.push(s); - } - if (components.query !== undefined) { - uriTokens.push("?"); - uriTokens.push(components.query); - } - if (components.fragment !== undefined) { - uriTokens.push("#"); - uriTokens.push(components.fragment); - } - return uriTokens.join(""); //merge tokens into a string -} - -function resolveComponents(base, relative) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var skipNormalization = arguments[3]; - - var target = {}; - if (!skipNormalization) { - base = parse(serialize(base, options), options); //normalize base components - relative = parse(serialize(relative, options), options); //normalize relative components - } - options = options || {}; - if (!options.tolerant && relative.scheme) { - target.scheme = relative.scheme; - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (!relative.path) { - target.path = base.path; - if (relative.query !== undefined) { - target.query = relative.query; - } else { - target.query = base.query; - } - } else { - if (relative.path.charAt(0) === "/") { - target.path = removeDotSegments(relative.path); - } else { - if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { - target.path = "/" + relative.path; - } else if (!base.path) { - target.path = relative.path; - } else { - target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; - } - target.path = removeDotSegments(target.path); - } - target.query = relative.query; - } - //target.authority = base.authority; - target.userinfo = base.userinfo; - target.host = base.host; - target.port = base.port; - } - target.scheme = base.scheme; - } - target.fragment = relative.fragment; - return target; -} - -function resolve(baseURI, relativeURI, options) { - var schemelessOptions = assign({ scheme: 'null' }, options); - return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); -} - -function normalize(uri, options) { - if (typeof uri === "string") { - uri = serialize(parse(uri, options), options); - } else if (typeOf(uri) === "object") { - uri = parse(serialize(uri, options), options); - } - return uri; -} - -function equal(uriA, uriB, options) { - if (typeof uriA === "string") { - uriA = serialize(parse(uriA, options), options); - } else if (typeOf(uriA) === "object") { - uriA = serialize(uriA, options); - } - if (typeof uriB === "string") { - uriB = serialize(parse(uriB, options), options); - } else if (typeOf(uriB) === "object") { - uriB = serialize(uriB, options); - } - return uriA === uriB; -} - -function escapeComponent(str, options) { - return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar); -} - -function unescapeComponent(str, options) { - return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars); -} - -var handler = { - scheme: "http", - domainHost: true, - parse: function parse(components, options) { - //report missing host - if (!components.host) { - components.error = components.error || "HTTP URIs must have a host."; - } - return components; - }, - serialize: function serialize(components, options) { - //normalize the default port - if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { - components.port = undefined; - } - //normalize the empty path - if (!components.path) { - components.path = "/"; - } - //NOTE: We do not parse query strings for HTTP URIs - //as WWW Form Url Encoded query strings are part of the HTML4+ spec, - //and not the HTTP spec. - return components; - } -}; - -var handler$1 = { - scheme: "https", - domainHost: handler.domainHost, - parse: handler.parse, - serialize: handler.serialize -}; - -var O = {}; -var isIRI = true; -//RFC 3986 -var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; -var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive -var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded -//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = -//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) -//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext -//const VCHAR$$ = "[\\x21-\\x7E]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext -//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); -//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); -//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); -var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; -var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; -var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); -var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; -var UNRESERVED = new RegExp(UNRESERVED$$, "g"); -var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); -var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); -var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); -var NOT_HFVALUE = NOT_HFNAME; -function decodeUnreserved(str) { - var decStr = pctDecChars(str); - return !decStr.match(UNRESERVED) ? str : decStr; -} -var handler$2 = { - scheme: "mailto", - parse: function parse$$1(components, options) { - var mailtoComponents = components; - var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : []; - mailtoComponents.path = undefined; - if (mailtoComponents.query) { - var unknownHeaders = false; - var headers = {}; - var hfields = mailtoComponents.query.split("&"); - for (var x = 0, xl = hfields.length; x < xl; ++x) { - var hfield = hfields[x].split("="); - switch (hfield[0]) { - case "to": - var toAddrs = hfield[1].split(","); - for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) { - to.push(toAddrs[_x]); - } - break; - case "subject": - mailtoComponents.subject = unescapeComponent(hfield[1], options); - break; - case "body": - mailtoComponents.body = unescapeComponent(hfield[1], options); - break; - default: - unknownHeaders = true; - headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); - break; - } - } - if (unknownHeaders) mailtoComponents.headers = headers; - } - mailtoComponents.query = undefined; - for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) { - var addr = to[_x2].split("@"); - addr[0] = unescapeComponent(addr[0]); - if (!options.unicodeSupport) { - //convert Unicode IDN -> ASCII IDN - try { - addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); - } catch (e) { - mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; - } - } else { - addr[1] = unescapeComponent(addr[1], options).toLowerCase(); - } - to[_x2] = addr.join("@"); - } - return mailtoComponents; - }, - serialize: function serialize$$1(mailtoComponents, options) { - var components = mailtoComponents; - var to = toArray(mailtoComponents.to); - if (to) { - for (var x = 0, xl = to.length; x < xl; ++x) { - var toAddr = String(to[x]); - var atIdx = toAddr.lastIndexOf("@"); - var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); - var domain = toAddr.slice(atIdx + 1); - //convert IDN via punycode - try { - domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain); - } catch (e) { - components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - to[x] = localPart + "@" + domain; - } - components.path = to.join(","); - } - var headers = mailtoComponents.headers = mailtoComponents.headers || {}; - if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; - if (mailtoComponents.body) headers["body"] = mailtoComponents.body; - var fields = []; - for (var name in headers) { - if (headers[name] !== O[name]) { - fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); - } - } - if (fields.length) { - components.query = fields.join("&"); - } - return components; - } -}; - -var URN_PARSE = /^([^\:]+)\:(.*)/; -//RFC 2141 -var handler$3 = { - scheme: "urn", - parse: function parse$$1(components, options) { - var matches = components.path && components.path.match(URN_PARSE); - var urnComponents = components; - if (matches) { - var scheme = options.scheme || urnComponents.scheme || "urn"; - var nid = matches[1].toLowerCase(); - var nss = matches[2]; - var urnScheme = scheme + ":" + (options.nid || nid); - var schemeHandler = SCHEMES[urnScheme]; - urnComponents.nid = nid; - urnComponents.nss = nss; - urnComponents.path = undefined; - if (schemeHandler) { - urnComponents = schemeHandler.parse(urnComponents, options); - } - } else { - urnComponents.error = urnComponents.error || "URN can not be parsed."; - } - return urnComponents; - }, - serialize: function serialize$$1(urnComponents, options) { - var scheme = options.scheme || urnComponents.scheme || "urn"; - var nid = urnComponents.nid; - var urnScheme = scheme + ":" + (options.nid || nid); - var schemeHandler = SCHEMES[urnScheme]; - if (schemeHandler) { - urnComponents = schemeHandler.serialize(urnComponents, options); - } - var uriComponents = urnComponents; - var nss = urnComponents.nss; - uriComponents.path = (nid || options.nid) + ":" + nss; - return uriComponents; - } -}; - -var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; -//RFC 4122 -var handler$4 = { - scheme: "urn:uuid", - parse: function parse(urnComponents, options) { - var uuidComponents = urnComponents; - uuidComponents.uuid = uuidComponents.nss; - uuidComponents.nss = undefined; - if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { - uuidComponents.error = uuidComponents.error || "UUID is not valid."; - } - return uuidComponents; - }, - serialize: function serialize(uuidComponents, options) { - var urnComponents = uuidComponents; - //normalize UUID - urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); - return urnComponents; - } -}; - -SCHEMES[handler.scheme] = handler; -SCHEMES[handler$1.scheme] = handler$1; -SCHEMES[handler$2.scheme] = handler$2; -SCHEMES[handler$3.scheme] = handler$3; -SCHEMES[handler$4.scheme] = handler$4; - -exports.SCHEMES = SCHEMES; -exports.pctEncChar = pctEncChar; -exports.pctDecChars = pctDecChars; -exports.parse = parse; -exports.removeDotSegments = removeDotSegments; -exports.serialize = serialize; -exports.resolveComponents = resolveComponents; -exports.resolve = resolve; -exports.normalize = normalize; -exports.equal = equal; -exports.escapeComponent = escapeComponent; -exports.unescapeComponent = unescapeComponent; - -Object.defineProperty(exports, '__esModule', { value: true }); - -}))); - - -},{}],"ajv":[function(require,module,exports){ -'use strict'; - -var compileSchema = require('./compile') - , resolve = require('./compile/resolve') - , Cache = require('./cache') - , SchemaObject = require('./compile/schema_obj') - , stableStringify = require('fast-json-stable-stringify') - , formats = require('./compile/formats') - , rules = require('./compile/rules') - , $dataMetaSchema = require('./data') - , util = require('./compile/util'); - -module.exports = Ajv; - -Ajv.prototype.validate = validate; -Ajv.prototype.compile = compile; -Ajv.prototype.addSchema = addSchema; -Ajv.prototype.addMetaSchema = addMetaSchema; -Ajv.prototype.validateSchema = validateSchema; -Ajv.prototype.getSchema = getSchema; -Ajv.prototype.removeSchema = removeSchema; -Ajv.prototype.addFormat = addFormat; -Ajv.prototype.errorsText = errorsText; - -Ajv.prototype._addSchema = _addSchema; -Ajv.prototype._compile = _compile; - -Ajv.prototype.compileAsync = require('./compile/async'); -var customKeyword = require('./keyword'); -Ajv.prototype.addKeyword = customKeyword.add; -Ajv.prototype.getKeyword = customKeyword.get; -Ajv.prototype.removeKeyword = customKeyword.remove; - -var errorClasses = require('./compile/error_classes'); -Ajv.ValidationError = errorClasses.Validation; -Ajv.MissingRefError = errorClasses.MissingRef; -Ajv.$dataMetaSchema = $dataMetaSchema; - -var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; - -var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ]; -var META_SUPPORT_DATA = ['/properties']; - -/** - * Creates validator instance. - * Usage: `Ajv(opts)` - * @param {Object} opts optional options - * @return {Object} ajv instance - */ -function Ajv(opts) { - if (!(this instanceof Ajv)) return new Ajv(opts); - opts = this._opts = util.copy(opts) || {}; - setLogger(this); - this._schemas = {}; - this._refs = {}; - this._fragments = {}; - this._formats = formats(opts.format); - var schemaUriFormat = this._schemaUriFormat = this._formats['uri-reference']; - this._schemaUriFormatFunc = function (str) { return schemaUriFormat.test(str); }; - - this._cache = opts.cache || new Cache; - this._loadingSchemas = {}; - this._compilations = []; - this.RULES = rules(); - this._getId = chooseGetId(opts); - - opts.loopRequired = opts.loopRequired || Infinity; - if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; - if (opts.serialize === undefined) opts.serialize = stableStringify; - this._metaOpts = getMetaSchemaOptions(this); - - if (opts.formats) addInitialFormats(this); - addDraft6MetaSchema(this); - if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); - addInitialSchemas(this); -} - - - -/** - * Validate data using schema - * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize. - * @this Ajv - * @param {String|Object} schemaKeyRef key, ref or schema object - * @param {Any} data to be validated - * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). - */ -function validate(schemaKeyRef, data) { - var v; - if (typeof schemaKeyRef == 'string') { - v = this.getSchema(schemaKeyRef); - if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); - } else { - var schemaObj = this._addSchema(schemaKeyRef); - v = schemaObj.validate || this._compile(schemaObj); - } - - var valid = v(data); - if (v.$async !== true) this.errors = v.errors; - return valid; -} - - -/** - * Create validating function for passed schema. - * @this Ajv - * @param {Object} schema schema object - * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. - * @return {Function} validating function - */ -function compile(schema, _meta) { - var schemaObj = this._addSchema(schema, undefined, _meta); - return schemaObj.validate || this._compile(schemaObj); -} - - -/** - * Adds schema to the instance. - * @this Ajv - * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. - * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. - * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. - * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. - * @return {Ajv} this for method chaining - */ -function addSchema(schema, key, _skipValidation, _meta) { - if (Array.isArray(schema)){ - for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. - * @param {Object} options optional options with properties `separator` and `dataVar`. - * @return {String} human readable string with all errors descriptions - */ -function errorsText(errors, options) { - errors = errors || this.errors; - if (!errors) return 'No errors'; - options = options || {}; - var separator = options.separator === undefined ? ', ' : options.separator; - var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; - - var text = ''; - for (var i=0; i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,u=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,h=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,d=/^(?:\/(?:[^~/]|~0|~1)*)*$/,f=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,p=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function m(e){return a.copy(m[e="full"==e?"full":"fast"])}function v(e){var r=e.match(o);if(!r)return!1;var t,a=+r[2],s=+r[3];return 1<=a&&a<=12&&1<=s&&s<=(2!=a||((t=+r[1])%4!=0||t%100==0&&t%400!=0)?i[a]:29)}function g(e,r){var t=e.match(n);if(!t)return!1;var a=t[1],s=t[2],o=t[3];return(a<=23&&s<=59&&o<=59||23==a&&59==s&&60==o)&&(!r||t[5])}(r.exports=m).fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i,uri:/^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":f,"relative-json-pointer":p},m.full={date:v,time:g,"date-time":function(e){var r=e.split(y);return 2==r.length&&v(r[0])&&g(r[1],!0)},uri:function(e){return P.test(e)&&l.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:function(e){return e.length<=255&&s.test(e)},ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":f,"relative-json-pointer":p};var y=/t|\s/i;var P=/\/|:/;var E=/[^\\]\\Z/;function w(e){if(E.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},{"./util":10}],5:[function(e,r,t){"use strict";var $=e("./resolve"),D=e("./util"),j=e("./error_classes"),l=e("fast-json-stable-stringify"),O=e("../dotjs/validate"),I=D.ucs2length,A=e("fast-deep-equal"),C=j.Validation;function k(e,r,t){for(var a=0;a",y=f?">":"<",P=void 0;if(v){var E=e.util.getData(m.$data,i,e.dataPathArr),w="exclusive"+o,S="exclType"+o,b="exclIsNumber"+o,_="' + "+(R="op"+o)+" + '";s+=" var schemaExcl"+o+" = "+E+"; ";var F;P=p;(F=F||[]).push(s+=" var "+w+"; var "+S+" = typeof "+(E="schemaExcl"+o)+"; if ("+S+" != 'boolean' && "+S+" != 'undefined' && "+S+" != 'number') { "),s="",!1!==e.createErrors?(s+=" { keyword: '"+(P||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(s+=" , message: '"+p+" should be boolean' "),e.opts.verbose&&(s+=" , schema: validate.schema"+l+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var x=s;s=F.pop(),s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+x+"]); ":" validate.errors = ["+x+"]; return false; ":" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } else if ( ",d&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=" "+S+" == 'number' ? ( ("+w+" = "+a+" === undefined || "+E+" "+g+"= "+a+") ? "+h+" "+y+"= "+E+" : "+h+" "+y+" "+a+" ) : ( ("+w+" = "+E+" === true) ? "+h+" "+y+"= "+a+" : "+h+" "+y+" "+a+" ) || "+h+" !== "+h+") { var op"+o+" = "+w+" ? '"+g+"' : '"+g+"='; ",void 0===n&&(c=e.errSchemaPath+"/"+(P=p),a=E,d=v)}else{_=g;if((b="number"==typeof m)&&d){var R="'"+_+"'";s+=" if ( ",d&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=" ( "+a+" === undefined || "+m+" "+g+"= "+a+" ? "+h+" "+y+"= "+m+" : "+h+" "+y+" "+a+" ) || "+h+" !== "+h+") { "}else{b&&void 0===n?(w=!0,c=e.errSchemaPath+"/"+(P=p),a=m,y+="="):(b&&(a=Math[f?"min":"max"](m,n)),m===(!b||a)?(w=!0,c=e.errSchemaPath+"/"+(P=p),y+="="):(w=!1,_+="="));R="'"+_+"'";s+=" if ( ",d&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=" "+h+" "+y+" "+a+" || "+h+" !== "+h+") { "}}P=P||r,(F=F||[]).push(s),s="",!1!==e.createErrors?(s+=" { keyword: '"+(P||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { comparison: "+R+", limit: "+a+", exclusive: "+w+" } ",!1!==e.opts.messages&&(s+=" , message: 'should be "+_+" ",s+=d?"' + "+a:a+"'"),e.opts.verbose&&(s+=" , schema: ",s+=d?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";x=s;return s=F.pop(),s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+x+"]); ":" validate.errors = ["+x+"]; return false; ":" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } ",u&&(s+=" else { "),s}},{}],13:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,u=!e.opts.allErrors,h="data"+(i||""),d=e.opts.$data&&n&&n.$data;d?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n,s+="if ( ",d&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || ");var f=r,p=p||[];p.push(s+=" "+h+".length "+("maxItems"==r?">":"<")+" "+a+") { "),s="",!1!==e.createErrors?(s+=" { keyword: '"+(f||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+a+" } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT have ",s+="maxItems"==r?"more":"fewer",s+=" than ",s+=d?"' + "+a+" + '":""+n,s+=" items' "),e.opts.verbose&&(s+=" , schema: ",s+=d?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var m=s;return s=p.pop(),s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+="} ",u&&(s+=" else { "),s}},{}],14:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,u=!e.opts.allErrors,h="data"+(i||""),d=e.opts.$data&&n&&n.$data;d?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n,s+="if ( ",d&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || "),s+=!1===e.opts.unicode?" "+h+".length ":" ucs2length("+h+") ";var f=r,p=p||[];p.push(s+=" "+("maxLength"==r?">":"<")+" "+a+") { "),s="",!1!==e.createErrors?(s+=" { keyword: '"+(f||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+a+" } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT be ",s+="maxLength"==r?"longer":"shorter",s+=" than ",s+=d?"' + "+a+" + '":""+n,s+=" characters' "),e.opts.verbose&&(s+=" , schema: ",s+=d?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var m=s;return s=p.pop(),s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+="} ",u&&(s+=" else { "),s}},{}],15:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,u=!e.opts.allErrors,h="data"+(i||""),d=e.opts.$data&&n&&n.$data;d?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n,s+="if ( ",d&&(s+=" ("+a+" !== undefined && typeof "+a+" != 'number') || ");var f=r,p=p||[];p.push(s+=" Object.keys("+h+").length "+("maxProperties"==r?">":"<")+" "+a+") { "),s="",!1!==e.createErrors?(s+=" { keyword: '"+(f||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+a+" } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT have ",s+="maxProperties"==r?"more":"fewer",s+=" than ",s+=d?"' + "+a+" + '":""+n,s+=" properties' "),e.opts.verbose&&(s+=" , schema: ",s+=d?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var m=s;return s=p.pop(),s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+="} ",u&&(s+=" else { "),s}},{}],16:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a=" ",s=e.schema[r],o=e.schemaPath+e.util.getProperty(r),i=e.errSchemaPath+"/"+r,n=!e.opts.allErrors,l=e.util.copy(e),c="";l.level++;var u="valid"+l.level,h=l.baseId,d=!0,f=s;if(f)for(var p,m=-1,v=f.length-1;m "+x+") { ";var $=u+"["+x+"]";f.schema=F,f.schemaPath=n+"["+x+"]",f.errSchemaPath=l+"/"+x,f.errorPath=e.util.getPathExpr(e.errorPath,x,e.opts.jsonPointers,!0),f.dataPathArr[g]=x;var D=e.validate(f);f.baseId=P,e.util.varOccurences(D,y)<2?a+=" "+e.util.varReplace(D,y,$)+" ":a+=" var "+y+" = "+$+"; "+D+" ",a+=" } ",c&&(a+=" if ("+m+") { ",p+="}")}if("object"==typeof E&&e.util.schemaHasRules(E,e.RULES.all)){f.schema=E,f.schemaPath=e.schemaPath+".additionalItems",f.errSchemaPath=e.errSchemaPath+"/additionalItems",a+=" "+m+" = true; if ("+u+".length > "+i.length+") { for (var "+v+" = "+i.length+"; "+v+" < "+u+".length; "+v+"++) { ",f.errorPath=e.util.getPathExpr(e.errorPath,v,e.opts.jsonPointers,!0);$=u+"["+v+"]";f.dataPathArr[g]=v;D=e.validate(f);f.baseId=P,e.util.varOccurences(D,y)<2?a+=" "+e.util.varReplace(D,y,$)+" ":a+=" var "+y+" = "+$+"; "+D+" ",c&&(a+=" if (!"+m+") break; "),a+=" } } ",c&&(a+=" if ("+m+") { ",p+="}")}}else if(e.util.schemaHasRules(i,e.RULES.all)){f.schema=i,f.schemaPath=n,f.errSchemaPath=l,a+=" for (var "+v+" = 0; "+v+" < "+u+".length; "+v+"++) { ",f.errorPath=e.util.getPathExpr(e.errorPath,v,e.opts.jsonPointers,!0);$=u+"["+v+"]";f.dataPathArr[g]=v;D=e.validate(f);f.baseId=P,e.util.varOccurences(D,y)<2?a+=" "+e.util.varReplace(D,y,$)+" ":a+=" var "+y+" = "+$+"; "+D+" ",c&&(a+=" if (!"+m+") break; "),a+=" }"}return c&&(a+=" "+p+" if ("+d+" == errors) {"),a=e.util.cleanUpCode(a)}},{}],28:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a,s=" ",o=e.level,i=e.dataLevel,n=e.schema[r],l=e.schemaPath+e.util.getProperty(r),c=e.errSchemaPath+"/"+r,u=!e.opts.allErrors,h="data"+(i||""),d=e.opts.$data&&n&&n.$data;d?(s+=" var schema"+o+" = "+e.util.getData(n.$data,i,e.dataPathArr)+"; ",a="schema"+o):a=n,s+="var division"+o+";if (",d&&(s+=" "+a+" !== undefined && ( typeof "+a+" != 'number' || "),s+=" (division"+o+" = "+h+" / "+a+", ",s+=e.opts.multipleOfPrecision?" Math.abs(Math.round(division"+o+") - division"+o+") > 1e-"+e.opts.multipleOfPrecision+" ":" division"+o+" !== parseInt(division"+o+") ",s+=" ) ",d&&(s+=" ) ");var f=f||[];f.push(s+=" ) { "),s="",!1!==e.createErrors?(s+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { multipleOf: "+a+" } ",!1!==e.opts.messages&&(s+=" , message: 'should be multiple of ",s+=d?"' + "+a:a+"'"),e.opts.verbose&&(s+=" , schema: ",s+=d?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var p=s;return s=f.pop(),s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+="} ",u&&(s+=" else { "),s}},{}],29:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h="errs__"+s,d=e.util.copy(e);d.level++;var f="valid"+d.level;if(e.util.schemaHasRules(i,e.RULES.all)){d.schema=i,d.schemaPath=n,d.errSchemaPath=l,a+=" var "+h+" = errors; ";var p,m=e.compositeRule;e.compositeRule=d.compositeRule=!0,d.createErrors=!1,d.opts.allErrors&&(p=d.opts.allErrors,d.opts.allErrors=!1),a+=" "+e.validate(d)+" ",d.createErrors=!0,p&&(d.opts.allErrors=p),e.compositeRule=d.compositeRule=m;var v=v||[];v.push(a+=" if ("+f+") { "),a="",!1!==e.createErrors?(a+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: 'should NOT be valid' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ";var g=a;a=v.pop(),a+=!e.compositeRule&&c?e.async?" throw new ValidationError(["+g+"]); ":" validate.errors = ["+g+"]; return false; ":" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } ",e.opts.allErrors&&(a+=" } ")}else a+=" var err = ",!1!==e.createErrors?(a+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: 'should NOT be valid' "),e.opts.verbose&&(a+=" , schema: validate.schema"+n+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+u+" "),a+=" } "):a+=" {} ",a+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c&&(a+=" if (false) { ");return a}},{}],30:[function(e,r,t){"use strict";r.exports=function(e,r,t){var a=" ",s=e.level,o=e.dataLevel,i=e.schema[r],n=e.schemaPath+e.util.getProperty(r),l=e.errSchemaPath+"/"+r,c=!e.opts.allErrors,u="data"+(o||""),h="valid"+s,d="errs__"+s,f=e.util.copy(e),p="";f.level++;var m="valid"+f.level,v=f.baseId,g="prevValid"+s,y="passingSchemas"+s;a+="var "+d+" = errors , "+g+" = false , "+h+" = false , "+y+" = null; ";var P=e.compositeRule;e.compositeRule=f.compositeRule=!0;var E=i;if(E)for(var w,S=-1,b=E.length-1;S 1) { ";var p=e.schema.items&&e.schema.items.type,m=Array.isArray(p);if(!p||"object"==p||"array"==p||m&&(0<=p.indexOf("object")||0<=p.indexOf("array")))s+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+h+"[i], "+h+"[j])) { "+d+" = false; break outer; } } } ";else s+=" var itemIndices = {}, item; for (;i--;) { var item = "+h+"[i]; ",s+=" if ("+e.util["checkDataType"+(m?"s":"")](p,"item",!0)+") continue; ",m&&(s+=" if (typeof item == 'string') item = '\"' + item; "),s+=" if (typeof itemIndices[item] == 'number') { "+d+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ";s+=" } ",f&&(s+=" } ");var v=v||[];v.push(s+=" if (!"+d+") { "),s="",!1!==e.createErrors?(s+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(s+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(s+=" , schema: ",s+=f?"validate.schema"+l:""+n,s+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),s+=" } "):s+=" {} ";var g=s;s=v.pop(),s+=!e.compositeRule&&u?e.async?" throw new ValidationError(["+g+"]); ":" validate.errors = ["+g+"]; return false; ":" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",s+=" } ",u&&(s+=" else { ")}else u&&(s+=" if (true) { ");return s}},{}],37:[function(e,r,t){"use strict";r.exports=function(a,e,r){var t="",s=!0===a.schema.$async,o=a.util.schemaHasRulesExcept(a.schema,a.RULES.all,"$ref"),i=a.self._getId(a.schema);if(a.isTop&&(t+=" var validate = ",s&&(a.async=!0,t+="async "),t+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ",i&&(a.opts.sourceCode||a.opts.processCode)&&(t+=" /*# sourceURL="+i+" */ ")),"boolean"==typeof a.schema||!o&&!a.schema.$ref){var n=a.level,l=a.dataLevel,c=a.schema[e="false schema"],u=a.schemaPath+a.util.getProperty(e),h=a.errSchemaPath+"/"+e,d=!a.opts.allErrors,f="data"+(l||""),p="valid"+n;if(!1===a.schema){a.isTop?d=!0:t+=" var "+p+" = false; ",(K=K||[]).push(t),t="",!1!==a.createErrors?(t+=" { keyword: 'false schema' , dataPath: (dataPath || '') + "+a.errorPath+" , schemaPath: "+a.util.toQuotedString(h)+" , params: {} ",!1!==a.opts.messages&&(t+=" , message: 'boolean schema is false' "),a.opts.verbose&&(t+=" , schema: false , parentSchema: validate.schema"+a.schemaPath+" , data: "+f+" "),t+=" } "):t+=" {} ";var m=t;t=K.pop(),t+=!a.compositeRule&&d?a.async?" throw new ValidationError(["+m+"]); ":" validate.errors = ["+m+"]; return false; ":" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else t+=a.isTop?s?" return data; ":" validate.errors = null; return true; ":" var "+p+" = true; ";return a.isTop&&(t+=" }; return validate; "),t}if(a.isTop){var v=a.isTop;n=a.level=0,l=a.dataLevel=0,f="data";a.rootId=a.resolve.fullPath(a.self._getId(a.root.schema)),a.baseId=a.baseId||a.rootId,delete a.isTop,a.dataPathArr=[void 0],t+=" var vErrors = null; ",t+=" var errors = 0; ",t+=" if (rootData === undefined) rootData = data; "}else{n=a.level,f="data"+((l=a.dataLevel)||"");if(i&&(a.baseId=a.resolve.url(a.baseId,i)),s&&!a.async)throw new Error("async schema in sync schema");t+=" var errs_"+n+" = errors;"}p="valid"+n,d=!a.opts.allErrors;var g="",y="",P=a.schema.type,E=Array.isArray(P);if(E&&1==P.length&&(P=P[0],E=!1),a.schema.$ref&&o){if("fail"==a.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path "'+a.errSchemaPath+'" (see option extendRefs)');!0!==a.opts.extendRefs&&(o=!1,a.logger.warn('$ref: keywords ignored in schema at path "'+a.errSchemaPath+'"'))}if(a.schema.$comment&&a.opts.$comment&&(t+=" "+a.RULES.all.$comment.code(a,"$comment")),P){if(a.opts.coerceTypes)var w=a.util.coerceToTypes(a.opts.coerceTypes,P);var S=a.RULES.types[P];if(w||E||!0===S||S&&!J(S)){u=a.schemaPath+".type",h=a.errSchemaPath+"/type",u=a.schemaPath+".type",h=a.errSchemaPath+"/type";if(t+=" if ("+a.util[E?"checkDataTypes":"checkDataType"](P,f,!0)+") { ",w){var b="dataType"+n,_="coerced"+n;t+=" var "+b+" = typeof "+f+"; ","array"==a.opts.coerceTypes&&(t+=" if ("+b+" == 'object' && Array.isArray("+f+")) "+b+" = 'array'; "),t+=" var "+_+" = undefined; ";var F="",x=w;if(x)for(var R,$=-1,D=x.length-1;$= 0x80 (not a basic code point)","invalid-input":"Invalid input"},L=Math.floor,z=String.fromCharCode;function T(e){throw new RangeError(i[e])}function n(e,r){var t=e.split("@"),a="";return 1>1,e+=L(e/r);455L((A-s)/h))&&T("overflow"),s+=f*h;var p=d<=i?1:i+26<=d?26:d-i;if(fL(A/m)&&T("overflow"),h*=m}var v=t.length+1;i=U(s-u,v,0==u),L(s/v)>A-o&&T("overflow"),o+=L(s/v),s%=v,t.splice(s++,0,o)}return String.fromCodePoint.apply(String,t)},c=function(e){var r=[],t=(e=N(e)).length,a=128,s=0,o=72,i=!0,n=!1,l=void 0;try{for(var c,u=e[Symbol.iterator]();!(i=(c=u.next()).done);i=!0){var h=c.value;h<128&&r.push(z(h))}}catch(e){n=!0,l=e}finally{try{!i&&u.return&&u.return()}finally{if(n)throw l}}var d=r.length,f=d;for(d&&r.push("-");fL((A-s)/w)&&T("overflow"),s+=(p-a)*w,a=p;var S=!0,b=!1,_=void 0;try{for(var F,x=e[Symbol.iterator]();!(S=(F=x.next()).done);S=!0){var R=F.value;if(RA&&T("overflow"),R==a){for(var $=s,D=36;;D+=36){var j=D<=o?1:o+26<=D?26:D-o;if($>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function f(e){for(var r="",t=0,a=e.length;tA-Z\\x5E-\\x7E]",'[\\"\\\\]'),Z=new RegExp(M,"g"),G=new RegExp(K,"g"),Y=new RegExp(C("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',J),"g"),W=new RegExp(C("[^]",M,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),X=W;function ee(e){var r=f(e);return r.match(Z)?r:e}var re={scheme:"mailto",parse:function(e,r){var t=e,a=t.to=t.path?t.path.split(","):[];if(t.path=void 0,t.query){for(var s=!1,o={},i=t.query.split("&"),n=0,l=i.length;n; - /** - * Create validating function for passed schema. - * @param {object|Boolean} schema schema object - * @return {Function} validating function - */ - compile(schema: object | boolean): ValidateFunction; - /** - * Creates validating function for passed schema with asynchronous loading of missing schemas. - * `loadSchema` option should be a function that accepts schema uri and node-style callback. - * @this Ajv - * @param {object|Boolean} schema schema object - * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped - * @param {Function} callback optional node-style callback, it is always called with 2 parameters: error (or null) and validating function. - * @return {PromiseLike} validating function - */ - compileAsync(schema: object | boolean, meta?: Boolean, callback?: (err: Error, validate: ValidateFunction) => any): PromiseLike; - /** - * Adds schema to the instance. - * @param {object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. - * @param {string} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. - * @return {Ajv} this for method chaining - */ - addSchema(schema: Array | object, key?: string): Ajv; - /** - * Add schema that will be used to validate other schemas - * options in META_IGNORE_OPTIONS are alway set to false - * @param {object} schema schema object - * @param {string} key optional schema key - * @return {Ajv} this for method chaining - */ - addMetaSchema(schema: object, key?: string): Ajv; - /** - * Validate schema - * @param {object|Boolean} schema schema to validate - * @return {Boolean} true if schema is valid - */ - validateSchema(schema: object | boolean): boolean; - /** - * Get compiled schema from the instance by `key` or `ref`. - * @param {string} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id). - * @return {Function} schema validating function (with property `schema`). - */ - getSchema(keyRef: string): ValidateFunction; - /** - * Remove cached schema(s). - * If no parameter is passed all schemas but meta-schemas are removed. - * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. - * Even if schema is referenced by other schemas it still can be removed as other schemas have local references. - * @param {string|object|RegExp|Boolean} schemaKeyRef key, ref, pattern to match key/ref or schema object - * @return {Ajv} this for method chaining - */ - removeSchema(schemaKeyRef?: object | string | RegExp | boolean): Ajv; - /** - * Add custom format - * @param {string} name format name - * @param {string|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid) - * @return {Ajv} this for method chaining - */ - addFormat(name: string, format: FormatValidator | FormatDefinition): Ajv; - /** - * Define custom keyword - * @this Ajv - * @param {string} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords. - * @param {object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. - * @return {Ajv} this for method chaining - */ - addKeyword(keyword: string, definition: KeywordDefinition): Ajv; - /** - * Get keyword definition - * @this Ajv - * @param {string} keyword pre-defined or custom keyword. - * @return {object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise. - */ - getKeyword(keyword: string): object | boolean; - /** - * Remove keyword - * @this Ajv - * @param {string} keyword pre-defined or custom keyword. - * @return {Ajv} this for method chaining - */ - removeKeyword(keyword: string): Ajv; - /** - * Convert array of error message objects to string - * @param {Array} errors optional array of validation errors, if not passed errors from the instance are used. - * @param {object} options optional options with properties `separator` and `dataVar`. - * @return {string} human readable string with all errors descriptions - */ - errorsText(errors?: Array | null, options?: ErrorsTextOptions): string; - errors?: Array; - } - - interface CustomLogger { - log(...args: any[]): any; - warn(...args: any[]): any; - error(...args: any[]): any; - } - - interface ValidateFunction { - ( - data: any, - dataPath?: string, - parentData?: object | Array, - parentDataProperty?: string | number, - rootData?: object | Array - ): boolean | PromiseLike; - schema?: object | boolean; - errors?: null | Array; - refs?: object; - refVal?: Array; - root?: ValidateFunction | object; - $async?: true; - source?: object; - } - - interface Options { - $data?: boolean; - allErrors?: boolean; - verbose?: boolean; - jsonPointers?: boolean; - uniqueItems?: boolean; - unicode?: boolean; - format?: string; - formats?: object; - unknownFormats?: true | string[] | 'ignore'; - schemas?: Array | object; - schemaId?: '$id' | 'id' | 'auto'; - missingRefs?: true | 'ignore' | 'fail'; - extendRefs?: true | 'ignore' | 'fail'; - loadSchema?: (uri: string, cb?: (err: Error, schema: object) => void) => PromiseLike; - removeAdditional?: boolean | 'all' | 'failing'; - useDefaults?: boolean | 'shared'; - coerceTypes?: boolean | 'array'; - async?: boolean | string; - transpile?: string | ((code: string) => string); - meta?: boolean | object; - validateSchema?: boolean | 'log'; - addUsedSchema?: boolean; - inlineRefs?: boolean | number; - passContext?: boolean; - loopRequired?: number; - ownProperties?: boolean; - multipleOfPrecision?: boolean | number; - errorDataPath?: string, - messages?: boolean; - sourceCode?: boolean; - processCode?: (code: string) => string; - cache?: object; - logger?: CustomLogger | false - } - - type FormatValidator = string | RegExp | ((data: string) => boolean | PromiseLike); - type NumberFormatValidator = ((data: number) => boolean | PromiseLike); - - interface NumberFormatDefinition { - type: "number", - validate: NumberFormatValidator; - compare?: (data1: number, data2: number) => number; - async?: boolean; - } - - interface StringFormatDefinition { - type?: "string", - validate: FormatValidator; - compare?: (data1: string, data2: string) => number; - async?: boolean; - } - - type FormatDefinition = NumberFormatDefinition | StringFormatDefinition; - - interface KeywordDefinition { - type?: string | Array; - async?: boolean; - $data?: boolean; - errors?: boolean | string; - metaSchema?: object; - // schema: false makes validate not to expect schema (ValidateFunction) - schema?: boolean; - modifying?: boolean; - valid?: boolean; - // one and only one of the following properties should be present - validate?: SchemaValidateFunction | ValidateFunction; - compile?: (schema: any, parentSchema: object, it: CompilationContext) => ValidateFunction; - macro?: (schema: any, parentSchema: object, it: CompilationContext) => object | boolean; - inline?: (it: CompilationContext, keyword: string, schema: any, parentSchema: object) => string; - } - - interface CompilationContext { - level: number; - dataLevel: number; - schema: any; - schemaPath: string; - baseId: string; - async: boolean; - opts: Options; - formats: { - [index: string]: FormatDefinition | undefined; - }; - compositeRule: boolean; - validate: (schema: object) => boolean; - util: { - copy(obj: any, target?: any): any; - toHash(source: string[]): { [index: string]: true | undefined }; - equal(obj: any, target: any): boolean; - getProperty(str: string): string; - schemaHasRules(schema: object, rules: any): string; - escapeQuotes(str: string): string; - toQuotedString(str: string): string; - getData(jsonPointer: string, dataLevel: number, paths: string[]): string; - escapeJsonPointer(str: string): string; - unescapeJsonPointer(str: string): string; - escapeFragment(str: string): string; - unescapeFragment(str: string): string; - }; - self: Ajv; - } - - interface SchemaValidateFunction { - ( - schema: any, - data: any, - parentSchema?: object, - dataPath?: string, - parentData?: object | Array, - parentDataProperty?: string | number, - rootData?: object | Array - ): boolean | PromiseLike; - errors?: Array; - } - - interface ErrorsTextOptions { - separator?: string; - dataVar?: string; - } - - interface ErrorObject { - keyword: string; - dataPath: string; - schemaPath: string; - params: ErrorParameters; - // Added to validation errors of propertyNames keyword schema - propertyName?: string; - // Excluded if messages set to false. - message?: string; - // These are added with the `verbose` option. - schema?: any; - parentSchema?: object; - data?: any; - } - - type ErrorParameters = RefParams | LimitParams | AdditionalPropertiesParams | - DependenciesParams | FormatParams | ComparisonParams | - MultipleOfParams | PatternParams | RequiredParams | - TypeParams | UniqueItemsParams | CustomParams | - PatternRequiredParams | PropertyNamesParams | - IfParams | SwitchParams | NoParams | EnumParams; - - interface RefParams { - ref: string; - } - - interface LimitParams { - limit: number; - } - - interface AdditionalPropertiesParams { - additionalProperty: string; - } - - interface DependenciesParams { - property: string; - missingProperty: string; - depsCount: number; - deps: string; - } - - interface FormatParams { - format: string - } - - interface ComparisonParams { - comparison: string; - limit: number | string; - exclusive: boolean; - } - - interface MultipleOfParams { - multipleOf: number; - } - - interface PatternParams { - pattern: string; - } - - interface RequiredParams { - missingProperty: string; - } - - interface TypeParams { - type: string; - } - - interface UniqueItemsParams { - i: number; - j: number; - } - - interface CustomParams { - keyword: string; - } - - interface PatternRequiredParams { - missingPattern: string; - } - - interface PropertyNamesParams { - propertyName: string; - } - - interface IfParams { - failingKeyword: string; - } - - interface SwitchParams { - caseIndex: number; - } - - interface NoParams {} - - interface EnumParams { - allowedValues: Array; - } -} - -declare class ValidationError extends Error { - constructor(errors: Array); - - message: string; - errors: Array; - ajv: true; - validation: true; -} - -declare class MissingRefError extends Error { - constructor(baseId: string, ref: string, message?: string); - static message: (baseId: string, ref: string) => string; - - message: string; - missingRef: string; - missingSchema: string; -} - -export = ajv; diff --git a/truebit-implementation/node_modules/ajv/lib/ajv.js b/truebit-implementation/node_modules/ajv/lib/ajv.js deleted file mode 100644 index 4740eb6a..00000000 --- a/truebit-implementation/node_modules/ajv/lib/ajv.js +++ /dev/null @@ -1,503 +0,0 @@ -'use strict'; - -var compileSchema = require('./compile') - , resolve = require('./compile/resolve') - , Cache = require('./cache') - , SchemaObject = require('./compile/schema_obj') - , stableStringify = require('fast-json-stable-stringify') - , formats = require('./compile/formats') - , rules = require('./compile/rules') - , $dataMetaSchema = require('./data') - , util = require('./compile/util'); - -module.exports = Ajv; - -Ajv.prototype.validate = validate; -Ajv.prototype.compile = compile; -Ajv.prototype.addSchema = addSchema; -Ajv.prototype.addMetaSchema = addMetaSchema; -Ajv.prototype.validateSchema = validateSchema; -Ajv.prototype.getSchema = getSchema; -Ajv.prototype.removeSchema = removeSchema; -Ajv.prototype.addFormat = addFormat; -Ajv.prototype.errorsText = errorsText; - -Ajv.prototype._addSchema = _addSchema; -Ajv.prototype._compile = _compile; - -Ajv.prototype.compileAsync = require('./compile/async'); -var customKeyword = require('./keyword'); -Ajv.prototype.addKeyword = customKeyword.add; -Ajv.prototype.getKeyword = customKeyword.get; -Ajv.prototype.removeKeyword = customKeyword.remove; - -var errorClasses = require('./compile/error_classes'); -Ajv.ValidationError = errorClasses.Validation; -Ajv.MissingRefError = errorClasses.MissingRef; -Ajv.$dataMetaSchema = $dataMetaSchema; - -var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; - -var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes' ]; -var META_SUPPORT_DATA = ['/properties']; - -/** - * Creates validator instance. - * Usage: `Ajv(opts)` - * @param {Object} opts optional options - * @return {Object} ajv instance - */ -function Ajv(opts) { - if (!(this instanceof Ajv)) return new Ajv(opts); - opts = this._opts = util.copy(opts) || {}; - setLogger(this); - this._schemas = {}; - this._refs = {}; - this._fragments = {}; - this._formats = formats(opts.format); - var schemaUriFormat = this._schemaUriFormat = this._formats['uri-reference']; - this._schemaUriFormatFunc = function (str) { return schemaUriFormat.test(str); }; - - this._cache = opts.cache || new Cache; - this._loadingSchemas = {}; - this._compilations = []; - this.RULES = rules(); - this._getId = chooseGetId(opts); - - opts.loopRequired = opts.loopRequired || Infinity; - if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; - if (opts.serialize === undefined) opts.serialize = stableStringify; - this._metaOpts = getMetaSchemaOptions(this); - - if (opts.formats) addInitialFormats(this); - addDraft6MetaSchema(this); - if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); - addInitialSchemas(this); -} - - - -/** - * Validate data using schema - * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize. - * @this Ajv - * @param {String|Object} schemaKeyRef key, ref or schema object - * @param {Any} data to be validated - * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). - */ -function validate(schemaKeyRef, data) { - var v; - if (typeof schemaKeyRef == 'string') { - v = this.getSchema(schemaKeyRef); - if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); - } else { - var schemaObj = this._addSchema(schemaKeyRef); - v = schemaObj.validate || this._compile(schemaObj); - } - - var valid = v(data); - if (v.$async !== true) this.errors = v.errors; - return valid; -} - - -/** - * Create validating function for passed schema. - * @this Ajv - * @param {Object} schema schema object - * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. - * @return {Function} validating function - */ -function compile(schema, _meta) { - var schemaObj = this._addSchema(schema, undefined, _meta); - return schemaObj.validate || this._compile(schemaObj); -} - - -/** - * Adds schema to the instance. - * @this Ajv - * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. - * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. - * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. - * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. - * @return {Ajv} this for method chaining - */ -function addSchema(schema, key, _skipValidation, _meta) { - if (Array.isArray(schema)){ - for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. - * @param {Object} options optional options with properties `separator` and `dataVar`. - * @return {String} human readable string with all errors descriptions - */ -function errorsText(errors, options) { - errors = errors || this.errors; - if (!errors) return 'No errors'; - options = options || {}; - var separator = options.separator === undefined ? ', ' : options.separator; - var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; - - var text = ''; - for (var i=0; i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; -// For the source: https://gist.github.com/dperini/729294 -// For test cases: https://mathiasbynens.be/demo/url-regex -// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. -// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu; -var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i; -var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; -var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; -var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; -var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; - - -module.exports = formats; - -function formats(mode) { - mode = mode == 'full' ? 'full' : 'fast'; - return util.copy(formats[mode]); -} - - -formats.fast = { - // date: http://tools.ietf.org/html/rfc3339#section-5.6 - date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, - // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 - time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i, - 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i, - // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js - uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i, - 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, - 'uri-template': URITEMPLATE, - url: URL, - // email (sources from jsen validator): - // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 - // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') - email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, - hostname: HOSTNAME, - // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - // uuid: http://tools.ietf.org/html/rfc4122 - uuid: UUID, - // JSON-pointer: https://tools.ietf.org/html/rfc6901 - // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -formats.full = { - date: date, - time: time, - 'date-time': date_time, - uri: uri, - 'uri-reference': URIREF, - 'uri-template': URITEMPLATE, - url: URL, - email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, - hostname: hostname, - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - uuid: UUID, - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -function isLeapYear(year) { - // https://tools.ietf.org/html/rfc3339#appendix-C - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); -} - - -function date(str) { - // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 - var matches = str.match(DATE); - if (!matches) return false; - - var year = +matches[1]; - var month = +matches[2]; - var day = +matches[3]; - - return month >= 1 && month <= 12 && day >= 1 && - day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); -} - - -function time(str, full) { - var matches = str.match(TIME); - if (!matches) return false; - - var hour = matches[1]; - var minute = matches[2]; - var second = matches[3]; - var timeZone = matches[5]; - return ((hour <= 23 && minute <= 59 && second <= 59) || - (hour == 23 && minute == 59 && second == 60)) && - (!full || timeZone); -} - - -var DATE_TIME_SEPARATOR = /t|\s/i; -function date_time(str) { - // http://tools.ietf.org/html/rfc3339#section-5.6 - var dateTime = str.split(DATE_TIME_SEPARATOR); - return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); -} - - -function hostname(str) { - // https://tools.ietf.org/html/rfc1034#section-3.5 - // https://tools.ietf.org/html/rfc1123#section-2 - return str.length <= 255 && HOSTNAME.test(str); -} - - -var NOT_URI_FRAGMENT = /\/|:/; -function uri(str) { - // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." - return NOT_URI_FRAGMENT.test(str) && URI.test(str); -} - - -var Z_ANCHOR = /[^\\]\\Z/; -function regex(str) { - if (Z_ANCHOR.test(str)) return false; - try { - new RegExp(str); - return true; - } catch(e) { - return false; - } -} diff --git a/truebit-implementation/node_modules/ajv/lib/compile/index.js b/truebit-implementation/node_modules/ajv/lib/compile/index.js deleted file mode 100644 index 8e369db3..00000000 --- a/truebit-implementation/node_modules/ajv/lib/compile/index.js +++ /dev/null @@ -1,379 +0,0 @@ -'use strict'; - -var resolve = require('./resolve') - , util = require('./util') - , errorClasses = require('./error_classes') - , stableStringify = require('fast-json-stable-stringify'); - -var validateGenerator = require('../dotjs/validate'); - -/** - * Functions below are used inside compiled validations function - */ - -var ucs2length = util.ucs2length; -var equal = require('fast-deep-equal'); - -// this error is thrown by async schemas to return validation errors via exception -var ValidationError = errorClasses.Validation; - -module.exports = compile; - - -/** - * Compiles schema to validation function - * @this Ajv - * @param {Object} schema schema object - * @param {Object} root object with information about the root schema for this schema - * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution - * @param {String} baseId base ID for IDs in the schema - * @return {Function} validation function - */ -function compile(schema, root, localRefs, baseId) { - /* jshint validthis: true, evil: true */ - /* eslint no-shadow: 0 */ - var self = this - , opts = this._opts - , refVal = [ undefined ] - , refs = {} - , patterns = [] - , patternsHash = {} - , defaults = [] - , defaultsHash = {} - , customRules = []; - - root = root || { schema: schema, refVal: refVal, refs: refs }; - - var c = checkCompiling.call(this, schema, root, baseId); - var compilation = this._compilations[c.index]; - if (c.compiling) return (compilation.callValidate = callValidate); - - var formats = this._formats; - var RULES = this.RULES; - - try { - var v = localCompile(schema, root, localRefs, baseId); - compilation.validate = v; - var cv = compilation.callValidate; - if (cv) { - cv.schema = v.schema; - cv.errors = null; - cv.refs = v.refs; - cv.refVal = v.refVal; - cv.root = v.root; - cv.$async = v.$async; - if (opts.sourceCode) cv.source = v.source; - } - return v; - } finally { - endCompiling.call(this, schema, root, baseId); - } - - /* @this {*} - custom context, see passContext option */ - function callValidate() { - /* jshint validthis: true */ - var validate = compilation.validate; - var result = validate.apply(this, arguments); - callValidate.errors = validate.errors; - return result; - } - - function localCompile(_schema, _root, localRefs, baseId) { - var isRoot = !_root || (_root && _root.schema == _schema); - if (_root.schema != root.schema) - return compile.call(self, _schema, _root, localRefs, baseId); - - var $async = _schema.$async === true; - - var sourceCode = validateGenerator({ - isTop: true, - schema: _schema, - isRoot: isRoot, - baseId: baseId, - root: _root, - schemaPath: '', - errSchemaPath: '#', - errorPath: '""', - MissingRefError: errorClasses.MissingRef, - RULES: RULES, - validate: validateGenerator, - util: util, - resolve: resolve, - resolveRef: resolveRef, - usePattern: usePattern, - useDefault: useDefault, - useCustomRule: useCustomRule, - opts: opts, - formats: formats, - logger: self.logger, - self: self - }); - - sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) - + vars(defaults, defaultCode) + vars(customRules, customRuleCode) - + sourceCode; - - if (opts.processCode) sourceCode = opts.processCode(sourceCode); - // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); - var validate; - try { - var makeValidate = new Function( - 'self', - 'RULES', - 'formats', - 'root', - 'refVal', - 'defaults', - 'customRules', - 'equal', - 'ucs2length', - 'ValidationError', - sourceCode - ); - - validate = makeValidate( - self, - RULES, - formats, - root, - refVal, - defaults, - customRules, - equal, - ucs2length, - ValidationError - ); - - refVal[0] = validate; - } catch(e) { - self.logger.error('Error compiling schema, function code:', sourceCode); - throw e; - } - - validate.schema = _schema; - validate.errors = null; - validate.refs = refs; - validate.refVal = refVal; - validate.root = isRoot ? validate : _root; - if ($async) validate.$async = true; - if (opts.sourceCode === true) { - validate.source = { - code: sourceCode, - patterns: patterns, - defaults: defaults - }; - } - - return validate; - } - - function resolveRef(baseId, ref, isRoot) { - ref = resolve.url(baseId, ref); - var refIndex = refs[ref]; - var _refVal, refCode; - if (refIndex !== undefined) { - _refVal = refVal[refIndex]; - refCode = 'refVal[' + refIndex + ']'; - return resolvedRef(_refVal, refCode); - } - if (!isRoot && root.refs) { - var rootRefId = root.refs[ref]; - if (rootRefId !== undefined) { - _refVal = root.refVal[rootRefId]; - refCode = addLocalRef(ref, _refVal); - return resolvedRef(_refVal, refCode); - } - } - - refCode = addLocalRef(ref); - var v = resolve.call(self, localCompile, root, ref); - if (v === undefined) { - var localSchema = localRefs && localRefs[ref]; - if (localSchema) { - v = resolve.inlineRef(localSchema, opts.inlineRefs) - ? localSchema - : compile.call(self, localSchema, root, localRefs, baseId); - } - } - - if (v === undefined) { - removeLocalRef(ref); - } else { - replaceLocalRef(ref, v); - return resolvedRef(v, refCode); - } - } - - function addLocalRef(ref, v) { - var refId = refVal.length; - refVal[refId] = v; - refs[ref] = refId; - return 'refVal' + refId; - } - - function removeLocalRef(ref) { - delete refs[ref]; - } - - function replaceLocalRef(ref, v) { - var refId = refs[ref]; - refVal[refId] = v; - } - - function resolvedRef(refVal, code) { - return typeof refVal == 'object' || typeof refVal == 'boolean' - ? { code: code, schema: refVal, inline: true } - : { code: code, $async: refVal && !!refVal.$async }; - } - - function usePattern(regexStr) { - var index = patternsHash[regexStr]; - if (index === undefined) { - index = patternsHash[regexStr] = patterns.length; - patterns[index] = regexStr; - } - return 'pattern' + index; - } - - function useDefault(value) { - switch (typeof value) { - case 'boolean': - case 'number': - return '' + value; - case 'string': - return util.toQuotedString(value); - case 'object': - if (value === null) return 'null'; - var valueStr = stableStringify(value); - var index = defaultsHash[valueStr]; - if (index === undefined) { - index = defaultsHash[valueStr] = defaults.length; - defaults[index] = value; - } - return 'default' + index; - } - } - - function useCustomRule(rule, schema, parentSchema, it) { - var validateSchema = rule.definition.validateSchema; - if (validateSchema && self._opts.validateSchema !== false) { - var valid = validateSchema(schema); - if (!valid) { - var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); - if (self._opts.validateSchema == 'log') self.logger.error(message); - else throw new Error(message); - } - } - - var compile = rule.definition.compile - , inline = rule.definition.inline - , macro = rule.definition.macro; - - var validate; - if (compile) { - validate = compile.call(self, schema, parentSchema, it); - } else if (macro) { - validate = macro.call(self, schema, parentSchema, it); - if (opts.validateSchema !== false) self.validateSchema(validate, true); - } else if (inline) { - validate = inline.call(self, it, rule.keyword, schema, parentSchema); - } else { - validate = rule.definition.validate; - if (!validate) return; - } - - if (validate === undefined) - throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); - - var index = customRules.length; - customRules[index] = validate; - - return { - code: 'customRule' + index, - validate: validate - }; - } -} - - -/** - * Checks if the schema is currently compiled - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) - */ -function checkCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var index = compIndex.call(this, schema, root, baseId); - if (index >= 0) return { index: index, compiling: true }; - index = this._compilations.length; - this._compilations[index] = { - schema: schema, - root: root, - baseId: baseId - }; - return { index: index, compiling: false }; -} - - -/** - * Removes the schema from the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - */ -function endCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var i = compIndex.call(this, schema, root, baseId); - if (i >= 0) this._compilations.splice(i, 1); -} - - -/** - * Index of schema compilation in the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Integer} compilation index - */ -function compIndex(schema, root, baseId) { - /* jshint validthis: true */ - for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { - // high surrogate, and there is a next character - value = str.charCodeAt(pos); - if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate - } - } - return length; -}; diff --git a/truebit-implementation/node_modules/ajv/lib/compile/util.js b/truebit-implementation/node_modules/ajv/lib/compile/util.js deleted file mode 100644 index 263891c3..00000000 --- a/truebit-implementation/node_modules/ajv/lib/compile/util.js +++ /dev/null @@ -1,267 +0,0 @@ -'use strict'; - - -module.exports = { - copy: copy, - checkDataType: checkDataType, - checkDataTypes: checkDataTypes, - coerceToTypes: coerceToTypes, - toHash: toHash, - getProperty: getProperty, - escapeQuotes: escapeQuotes, - equal: require('fast-deep-equal'), - ucs2length: require('./ucs2length'), - varOccurences: varOccurences, - varReplace: varReplace, - cleanUpCode: cleanUpCode, - finalCleanUpCode: finalCleanUpCode, - schemaHasRules: schemaHasRules, - schemaHasRulesExcept: schemaHasRulesExcept, - toQuotedString: toQuotedString, - getPathExpr: getPathExpr, - getPath: getPath, - getData: getData, - unescapeFragment: unescapeFragment, - unescapeJsonPointer: unescapeJsonPointer, - escapeFragment: escapeFragment, - escapeJsonPointer: escapeJsonPointer -}; - - -function copy(o, to) { - to = to || {}; - for (var key in o) to[key] = o[key]; - return to; -} - - -function checkDataType(dataType, data, negate) { - var EQUAL = negate ? ' !== ' : ' === ' - , AND = negate ? ' || ' : ' && ' - , OK = negate ? '!' : '' - , NOT = negate ? '' : '!'; - switch (dataType) { - case 'null': return data + EQUAL + 'null'; - case 'array': return OK + 'Array.isArray(' + data + ')'; - case 'object': return '(' + OK + data + AND + - 'typeof ' + data + EQUAL + '"object"' + AND + - NOT + 'Array.isArray(' + data + '))'; - case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + - NOT + '(' + data + ' % 1)' + - AND + data + EQUAL + data + ')'; - default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; - } -} - - -function checkDataTypes(dataTypes, data) { - switch (dataTypes.length) { - case 1: return checkDataType(dataTypes[0], data, true); - default: - var code = ''; - var types = toHash(dataTypes); - if (types.array && types.object) { - code = types.null ? '(': '(!' + data + ' || '; - code += 'typeof ' + data + ' !== "object")'; - delete types.null; - delete types.array; - delete types.object; - } - if (types.number) delete types.integer; - for (var t in types) - code += (code ? ' && ' : '' ) + checkDataType(t, data, true); - - return code; - } -} - - -var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); -function coerceToTypes(optionCoerceTypes, dataTypes) { - if (Array.isArray(dataTypes)) { - var types = []; - for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); - return paths[lvl - up]; - } - - if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); - data = 'data' + ((lvl - up) || ''); - if (!jsonPointer) return data; - } - - var expr = data; - var segments = jsonPointer.split('/'); - for (var i=0; i' - , $notOp = $isMax ? '>' : '<' - , $errorKeyword = undefined; -}} - -{{? $isDataExcl }} - {{ - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr) - , $exclusive = 'exclusive' + $lvl - , $exclType = 'exclType' + $lvl - , $exclIsNumber = 'exclIsNumber' + $lvl - , $opExpr = 'op' + $lvl - , $opStr = '\' + ' + $opExpr + ' + \''; - }} - var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}}; - {{ $schemaValueExcl = 'schemaExcl' + $lvl; }} - - var {{=$exclusive}}; - var {{=$exclType}} = typeof {{=$schemaValueExcl}}; - if ({{=$exclType}} != 'boolean' && {{=$exclType}} != 'undefined' && {{=$exclType}} != 'number') { - {{ var $errorKeyword = $exclusiveKeyword; }} - {{# def.error:'_exclusiveLimit' }} - } else if ({{# def.$dataNotType:'number' }} - {{=$exclType}} == 'number' - ? ( - ({{=$exclusive}} = {{=$schemaValue}} === undefined || {{=$schemaValueExcl}} {{=$op}}= {{=$schemaValue}}) - ? {{=$data}} {{=$notOp}}= {{=$schemaValueExcl}} - : {{=$data}} {{=$notOp}} {{=$schemaValue}} - ) - : ( - ({{=$exclusive}} = {{=$schemaValueExcl}} === true) - ? {{=$data}} {{=$notOp}}= {{=$schemaValue}} - : {{=$data}} {{=$notOp}} {{=$schemaValue}} - ) - || {{=$data}} !== {{=$data}}) { - var op{{=$lvl}} = {{=$exclusive}} ? '{{=$op}}' : '{{=$op}}='; - {{ - if ($schema === undefined) { - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaValueExcl; - $isData = $isDataExcl; - } - }} -{{??}} - {{ - var $exclIsNumber = typeof $schemaExcl == 'number' - , $opStr = $op; /*used in error*/ - }} - - {{? $exclIsNumber && $isData }} - {{ var $opExpr = '\'' + $opStr + '\''; /*used in error*/ }} - if ({{# def.$dataNotType:'number' }} - ( {{=$schemaValue}} === undefined - || {{=$schemaExcl}} {{=$op}}= {{=$schemaValue}} - ? {{=$data}} {{=$notOp}}= {{=$schemaExcl}} - : {{=$data}} {{=$notOp}} {{=$schemaValue}} ) - || {{=$data}} !== {{=$data}}) { - {{??}} - {{ - if ($exclIsNumber && $schema === undefined) { - {{# def.setExclusiveLimit }} - $schemaValue = $schemaExcl; - $notOp += '='; - } else { - if ($exclIsNumber) - $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); - - if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { - {{# def.setExclusiveLimit }} - $notOp += '='; - } else { - $exclusive = false; - $opStr += '='; - } - } - - var $opExpr = '\'' + $opStr + '\''; /*used in error*/ - }} - - if ({{# def.$dataNotType:'number' }} - {{=$data}} {{=$notOp}} {{=$schemaValue}} - || {{=$data}} !== {{=$data}}) { - {{?}} -{{?}} - {{ $errorKeyword = $errorKeyword || $keyword; }} - {{# def.error:'_limit' }} - } {{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/_limitItems.jst b/truebit-implementation/node_modules/ajv/lib/dot/_limitItems.jst deleted file mode 100644 index a3e078e5..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/_limitItems.jst +++ /dev/null @@ -1,10 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ var $op = $keyword == 'maxItems' ? '>' : '<'; }} -if ({{# def.$dataNotType:'number' }} {{=$data}}.length {{=$op}} {{=$schemaValue}}) { - {{ var $errorKeyword = $keyword; }} - {{# def.error:'_limitItems' }} -} {{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/_limitLength.jst b/truebit-implementation/node_modules/ajv/lib/dot/_limitLength.jst deleted file mode 100644 index cfc8dbb0..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/_limitLength.jst +++ /dev/null @@ -1,10 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ var $op = $keyword == 'maxLength' ? '>' : '<'; }} -if ({{# def.$dataNotType:'number' }} {{# def.strLength }} {{=$op}} {{=$schemaValue}}) { - {{ var $errorKeyword = $keyword; }} - {{# def.error:'_limitLength' }} -} {{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/_limitProperties.jst b/truebit-implementation/node_modules/ajv/lib/dot/_limitProperties.jst deleted file mode 100644 index da7ea776..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/_limitProperties.jst +++ /dev/null @@ -1,10 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ var $op = $keyword == 'maxProperties' ? '>' : '<'; }} -if ({{# def.$dataNotType:'number' }} Object.keys({{=$data}}).length {{=$op}} {{=$schemaValue}}) { - {{ var $errorKeyword = $keyword; }} - {{# def.error:'_limitProperties' }} -} {{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/allOf.jst b/truebit-implementation/node_modules/ajv/lib/dot/allOf.jst deleted file mode 100644 index 4c283631..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/allOf.jst +++ /dev/null @@ -1,34 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{ - var $currentBaseId = $it.baseId - , $allSchemasEmpty = true; -}} - -{{~ $schema:$sch:$i }} - {{? {{# def.nonEmptySchema:$sch }} }} - {{ - $allSchemasEmpty = false; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - }} - - {{# def.insertSubschemaCode }} - - {{# def.ifResultValid }} - {{?}} -{{~}} - -{{? $breakOnError }} - {{? $allSchemasEmpty }} - if (true) { - {{??}} - {{= $closingBraces.slice(0,-1) }} - {{?}} -{{?}} - -{{# def.cleanUp }} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/anyOf.jst b/truebit-implementation/node_modules/ajv/lib/dot/anyOf.jst deleted file mode 100644 index 086cf2b3..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/anyOf.jst +++ /dev/null @@ -1,48 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{ - var $noEmptySchema = $schema.every(function($sch) { - return {{# def.nonEmptySchema:$sch }}; - }); -}} -{{? $noEmptySchema }} - {{ var $currentBaseId = $it.baseId; }} - var {{=$errs}} = errors; - var {{=$valid}} = false; - - {{# def.setCompositeRule }} - - {{~ $schema:$sch:$i }} - {{ - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - }} - - {{# def.insertSubschemaCode }} - - {{=$valid}} = {{=$valid}} || {{=$nextValid}}; - - if (!{{=$valid}}) { - {{ $closingBraces += '}'; }} - {{~}} - - {{# def.resetCompositeRule }} - - {{= $closingBraces }} - - if (!{{=$valid}}) { - {{# def.extraError:'anyOf' }} - } else { - {{# def.resetErrors }} - {{? it.opts.allErrors }} } {{?}} - - {{# def.cleanUp }} -{{??}} - {{? $breakOnError }} - if (true) { - {{?}} -{{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/coerce.def b/truebit-implementation/node_modules/ajv/lib/dot/coerce.def deleted file mode 100644 index 86e0e18a..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/coerce.def +++ /dev/null @@ -1,61 +0,0 @@ -{{## def.coerceType: - {{ - var $dataType = 'dataType' + $lvl - , $coerced = 'coerced' + $lvl; - }} - var {{=$dataType}} = typeof {{=$data}}; - {{? it.opts.coerceTypes == 'array'}} - if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array'; - {{?}} - - var {{=$coerced}} = undefined; - - {{ var $bracesCoercion = ''; }} - {{~ $coerceToTypes:$type:$i }} - {{? $i }} - if ({{=$coerced}} === undefined) { - {{ $bracesCoercion += '}'; }} - {{?}} - - {{? it.opts.coerceTypes == 'array' && $type != 'array' }} - if ({{=$dataType}} == 'array' && {{=$data}}.length == 1) { - {{=$coerced}} = {{=$data}} = {{=$data}}[0]; - {{=$dataType}} = typeof {{=$data}}; - /*if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array';*/ - } - {{?}} - - {{? $type == 'string' }} - if ({{=$dataType}} == 'number' || {{=$dataType}} == 'boolean') - {{=$coerced}} = '' + {{=$data}}; - else if ({{=$data}} === null) {{=$coerced}} = ''; - {{?? $type == 'number' || $type == 'integer' }} - if ({{=$dataType}} == 'boolean' || {{=$data}} === null - || ({{=$dataType}} == 'string' && {{=$data}} && {{=$data}} == +{{=$data}} - {{? $type == 'integer' }} && !({{=$data}} % 1){{?}})) - {{=$coerced}} = +{{=$data}}; - {{?? $type == 'boolean' }} - if ({{=$data}} === 'false' || {{=$data}} === 0 || {{=$data}} === null) - {{=$coerced}} = false; - else if ({{=$data}} === 'true' || {{=$data}} === 1) - {{=$coerced}} = true; - {{?? $type == 'null' }} - if ({{=$data}} === '' || {{=$data}} === 0 || {{=$data}} === false) - {{=$coerced}} = null; - {{?? it.opts.coerceTypes == 'array' && $type == 'array' }} - if ({{=$dataType}} == 'string' || {{=$dataType}} == 'number' || {{=$dataType}} == 'boolean' || {{=$data}} == null) - {{=$coerced}} = [{{=$data}}]; - {{?}} - {{~}} - - {{= $bracesCoercion }} - - if ({{=$coerced}} === undefined) { - {{# def.error:'type' }} - } else { - {{# def.setParentData }} - {{=$data}} = {{=$coerced}}; - {{? !$dataLvl }}if ({{=$parentData}} !== undefined){{?}} - {{=$parentData}}[{{=$parentDataProperty}}] = {{=$coerced}}; - } -#}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/comment.jst b/truebit-implementation/node_modules/ajv/lib/dot/comment.jst deleted file mode 100644 index f9591503..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/comment.jst +++ /dev/null @@ -1,9 +0,0 @@ -{{# def.definitions }} -{{# def.setupKeyword }} - -{{ var $comment = it.util.toQuotedString($schema); }} -{{? it.opts.$comment === true }} - console.log({{=$comment}}); -{{?? typeof it.opts.$comment == 'function' }} - self._opts.$comment({{=$comment}}, {{=it.util.toQuotedString($errSchemaPath)}}, validate.root.schema); -{{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/const.jst b/truebit-implementation/node_modules/ajv/lib/dot/const.jst deleted file mode 100644 index 2aa22980..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/const.jst +++ /dev/null @@ -1,11 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{? !$isData }} - var schema{{=$lvl}} = validate.schema{{=$schemaPath}}; -{{?}} -var {{=$valid}} = equal({{=$data}}, schema{{=$lvl}}); -{{# def.checkError:'const' }} -{{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/contains.jst b/truebit-implementation/node_modules/ajv/lib/dot/contains.jst deleted file mode 100644 index 925d2c84..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/contains.jst +++ /dev/null @@ -1,57 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{ - var $idx = 'i' + $lvl - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $currentBaseId = it.baseId - , $nonEmptySchema = {{# def.nonEmptySchema:$schema }}; -}} - -var {{=$errs}} = errors; -var {{=$valid}}; - -{{? $nonEmptySchema }} - {{# def.setCompositeRule }} - - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - - var {{=$nextValid}} = false; - - for (var {{=$idx}} = 0; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { - {{ - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - - if ({{=$nextValid}}) break; - } - - {{# def.resetCompositeRule }} - {{= $closingBraces }} - - if (!{{=$nextValid}}) { -{{??}} - if ({{=$data}}.length == 0) { -{{?}} - - {{# def.error:'contains' }} - } else { - {{? $nonEmptySchema }} - {{# def.resetErrors }} - {{?}} - {{? it.opts.allErrors }} } {{?}} - -{{# def.cleanUp }} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/custom.jst b/truebit-implementation/node_modules/ajv/lib/dot/custom.jst deleted file mode 100644 index d30588fb..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/custom.jst +++ /dev/null @@ -1,191 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ - var $rule = this - , $definition = 'definition' + $lvl - , $rDef = $rule.definition - , $closingBraces = ''; - var $validate = $rDef.validate; - var $compile, $inline, $macro, $ruleValidate, $validateCode; -}} - -{{? $isData && $rDef.$data }} - {{ - $validateCode = 'keywordValidate' + $lvl; - var $validateSchema = $rDef.validateSchema; - }} - var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition; - var {{=$validateCode}} = {{=$definition}}.validate; -{{??}} - {{ - $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); - if (!$ruleValidate) return; - $schemaValue = 'validate.schema' + $schemaPath; - $validateCode = $ruleValidate.code; - $compile = $rDef.compile; - $inline = $rDef.inline; - $macro = $rDef.macro; - }} -{{?}} - -{{ - var $ruleErrs = $validateCode + '.errors' - , $i = 'i' + $lvl - , $ruleErr = 'ruleErr' + $lvl - , $asyncKeyword = $rDef.async; - - if ($asyncKeyword && !it.async) - throw new Error('async keyword in sync schema'); -}} - - -{{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}} -var {{=$errs}} = errors; -var {{=$valid}}; - -{{## def.callRuleValidate: - {{=$validateCode}}.call( - {{? it.opts.passContext }}this{{??}}self{{?}} - {{? $compile || $rDef.schema === false }} - , {{=$data}} - {{??}} - , {{=$schemaValue}} - , {{=$data}} - , validate.schema{{=it.schemaPath}} - {{?}} - , {{# def.dataPath }} - {{# def.passParentData }} - , rootData - ) -#}} - -{{## def.extendErrors:_inline: - for (var {{=$i}}={{=$errs}}; {{=$i}}= 0 }} - {{# def.skipFormat }} - {{??}} - {{ throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); }} - {{?}} - {{?}} - {{ - var $isObject = typeof $format == 'object' - && !($format instanceof RegExp) - && $format.validate; - var $formatType = $isObject && $format.type || 'string'; - if ($isObject) { - var $async = $format.async === true; - $format = $format.validate; - } - }} - {{? $formatType != $ruleType }} - {{# def.skipFormat }} - {{?}} - {{? $async }} - {{ - if (!it.async) throw new Error('async format in sync schema'); - var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; - }} - if (!(await {{=$formatRef}}({{=$data}}))) { - {{??}} - if (!{{# def.checkFormat }}) { - {{?}} -{{?}} - {{# def.error:'format' }} - } {{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/if.jst b/truebit-implementation/node_modules/ajv/lib/dot/if.jst deleted file mode 100644 index 7ccc9b7f..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/if.jst +++ /dev/null @@ -1,75 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.validateIfClause:_clause: - {{ - $it.schema = it.schema['_clause']; - $it.schemaPath = it.schemaPath + '._clause'; - $it.errSchemaPath = it.errSchemaPath + '/_clause'; - }} - {{# def.insertSubschemaCode }} - {{=$valid}} = {{=$nextValid}}; - {{? $thenPresent && $elsePresent }} - {{ $ifClause = 'ifClause' + $lvl; }} - var {{=$ifClause}} = '_clause'; - {{??}} - {{ $ifClause = '\'_clause\''; }} - {{?}} -#}} - -{{ - var $thenSch = it.schema['then'] - , $elseSch = it.schema['else'] - , $thenPresent = $thenSch !== undefined && {{# def.nonEmptySchema:$thenSch }} - , $elsePresent = $elseSch !== undefined && {{# def.nonEmptySchema:$elseSch }} - , $currentBaseId = $it.baseId; -}} - -{{? $thenPresent || $elsePresent }} - {{ - var $ifClause; - $it.createErrors = false; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - var {{=$errs}} = errors; - var {{=$valid}} = true; - - {{# def.setCompositeRule }} - {{# def.insertSubschemaCode }} - {{ $it.createErrors = true; }} - {{# def.resetErrors }} - {{# def.resetCompositeRule }} - - {{? $thenPresent }} - if ({{=$nextValid}}) { - {{# def.validateIfClause:then }} - } - {{? $elsePresent }} - else { - {{?}} - {{??}} - if (!{{=$nextValid}}) { - {{?}} - - {{? $elsePresent }} - {{# def.validateIfClause:else }} - } - {{?}} - - if (!{{=$valid}}) { - {{# def.extraError:'if' }} - } - {{? $breakOnError }} else { {{?}} - - {{# def.cleanUp }} -{{??}} - {{? $breakOnError }} - if (true) { - {{?}} -{{?}} - diff --git a/truebit-implementation/node_modules/ajv/lib/dot/items.jst b/truebit-implementation/node_modules/ajv/lib/dot/items.jst deleted file mode 100644 index 8c0f5acb..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/items.jst +++ /dev/null @@ -1,100 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.validateItems:startFrom: - for (var {{=$idx}} = {{=startFrom}}; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { - {{ - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - - {{? $breakOnError }} - if (!{{=$nextValid}}) break; - {{?}} - } -#}} - -{{ - var $idx = 'i' + $lvl - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $currentBaseId = it.baseId; -}} - -var {{=$errs}} = errors; -var {{=$valid}}; - -{{? Array.isArray($schema) }} - {{ /* 'items' is an array of schemas */}} - {{ var $additionalItems = it.schema.additionalItems; }} - {{? $additionalItems === false }} - {{=$valid}} = {{=$data}}.length <= {{= $schema.length }}; - {{ - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalItems'; - }} - {{# def.checkError:'additionalItems' }} - {{ $errSchemaPath = $currErrSchemaPath; }} - {{# def.elseIfValid}} - {{?}} - - {{~ $schema:$sch:$i }} - {{? {{# def.nonEmptySchema:$sch }} }} - {{=$nextValid}} = true; - - if ({{=$data}}.length > {{=$i}}) { - {{ - var $passData = $data + '[' + $i + ']'; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); - $it.dataPathArr[$dataNxt] = $i; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - } - - {{# def.ifResultValid }} - {{?}} - {{~}} - - {{? typeof $additionalItems == 'object' && {{# def.nonEmptySchema:$additionalItems }} }} - {{ - $it.schema = $additionalItems; - $it.schemaPath = it.schemaPath + '.additionalItems'; - $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; - }} - {{=$nextValid}} = true; - - if ({{=$data}}.length > {{= $schema.length }}) { - {{# def.validateItems: $schema.length }} - } - - {{# def.ifResultValid }} - {{?}} - -{{?? {{# def.nonEmptySchema:$schema }} }} - {{ /* 'items' is a single schema */}} - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - {{# def.validateItems: 0 }} -{{?}} - -{{? $breakOnError }} - {{= $closingBraces }} - if ({{=$errs}} == errors) { -{{?}} - -{{# def.cleanUp }} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/missing.def b/truebit-implementation/node_modules/ajv/lib/dot/missing.def deleted file mode 100644 index a73b9f96..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/missing.def +++ /dev/null @@ -1,39 +0,0 @@ -{{## def.checkMissingProperty:_properties: - {{~ _properties:$propertyKey:$i }} - {{?$i}} || {{?}} - {{ - var $prop = it.util.getProperty($propertyKey) - , $useData = $data + $prop; - }} - ( ({{# def.noPropertyInData }}) && (missing{{=$lvl}} = {{= it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop) }}) ) - {{~}} -#}} - - -{{## def.errorMissingProperty:_error: - {{ - var $propertyPath = 'missing' + $lvl - , $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.opts.jsonPointers - ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) - : $currentErrorPath + ' + ' + $propertyPath; - } - }} - {{# def.error:_error }} -#}} - - -{{## def.allErrorsMissingProperty:_error: - {{ - var $prop = it.util.getProperty($propertyKey) - , $missingProperty = it.util.escapeQuotes($propertyKey) - , $useData = $data + $prop; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - }} - if ({{# def.noPropertyInData }}) { - {{# def.addError:_error }} - } -#}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/multipleOf.jst b/truebit-implementation/node_modules/ajv/lib/dot/multipleOf.jst deleted file mode 100644 index 5f8dd33b..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/multipleOf.jst +++ /dev/null @@ -1,20 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -var division{{=$lvl}}; -if ({{?$isData}} - {{=$schemaValue}} !== undefined && ( - typeof {{=$schemaValue}} != 'number' || - {{?}} - (division{{=$lvl}} = {{=$data}} / {{=$schemaValue}}, - {{? it.opts.multipleOfPrecision }} - Math.abs(Math.round(division{{=$lvl}}) - division{{=$lvl}}) > 1e-{{=it.opts.multipleOfPrecision}} - {{??}} - division{{=$lvl}} !== parseInt(division{{=$lvl}}) - {{?}} - ) - {{?$isData}} ) {{?}} ) { - {{# def.error:'multipleOf' }} -} {{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/not.jst b/truebit-implementation/node_modules/ajv/lib/dot/not.jst deleted file mode 100644 index e03185ae..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/not.jst +++ /dev/null @@ -1,43 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{? {{# def.nonEmptySchema:$schema }} }} - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - - var {{=$errs}} = errors; - - {{# def.setCompositeRule }} - - {{ - $it.createErrors = false; - var $allErrorsOption; - if ($it.opts.allErrors) { - $allErrorsOption = $it.opts.allErrors; - $it.opts.allErrors = false; - } - }} - {{= it.validate($it) }} - {{ - $it.createErrors = true; - if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; - }} - - {{# def.resetCompositeRule }} - - if ({{=$nextValid}}) { - {{# def.error:'not' }} - } else { - {{# def.resetErrors }} - {{? it.opts.allErrors }} } {{?}} -{{??}} - {{# def.addError:'not' }} - {{? $breakOnError}} - if (false) { - {{?}} -{{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/oneOf.jst b/truebit-implementation/node_modules/ajv/lib/dot/oneOf.jst deleted file mode 100644 index bcce2c6e..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/oneOf.jst +++ /dev/null @@ -1,54 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{ - var $currentBaseId = $it.baseId - , $prevValid = 'prevValid' + $lvl - , $passingSchemas = 'passingSchemas' + $lvl; -}} - -var {{=$errs}} = errors - , {{=$prevValid}} = false - , {{=$valid}} = false - , {{=$passingSchemas}} = null; - -{{# def.setCompositeRule }} - -{{~ $schema:$sch:$i }} - {{? {{# def.nonEmptySchema:$sch }} }} - {{ - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - }} - - {{# def.insertSubschemaCode }} - {{??}} - var {{=$nextValid}} = true; - {{?}} - - {{? $i }} - if ({{=$nextValid}} && {{=$prevValid}}) { - {{=$valid}} = false; - {{=$passingSchemas}} = [{{=$passingSchemas}}, {{=$i}}]; - } else { - {{ $closingBraces += '}'; }} - {{?}} - - if ({{=$nextValid}}) { - {{=$valid}} = {{=$prevValid}} = true; - {{=$passingSchemas}} = {{=$i}}; - } -{{~}} - -{{# def.resetCompositeRule }} - -{{= $closingBraces }} - -if (!{{=$valid}}) { - {{# def.extraError:'oneOf' }} -} else { - {{# def.resetErrors }} -{{? it.opts.allErrors }} } {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/pattern.jst b/truebit-implementation/node_modules/ajv/lib/dot/pattern.jst deleted file mode 100644 index 3a37ef6c..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/pattern.jst +++ /dev/null @@ -1,14 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ - var $regexp = $isData - ? '(new RegExp(' + $schemaValue + '))' - : it.usePattern($schema); -}} - -if ({{# def.$dataNotType:'string' }} !{{=$regexp}}.test({{=$data}}) ) { - {{# def.error:'pattern' }} -} {{? $breakOnError }} else { {{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/properties.jst b/truebit-implementation/node_modules/ajv/lib/dot/properties.jst deleted file mode 100644 index 862067e7..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/properties.jst +++ /dev/null @@ -1,244 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.validateAdditional: - {{ /* additionalProperties is schema */ - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty - ? it.errorPath - : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} -#}} - - -{{ - var $key = 'key' + $lvl - , $idx = 'idx' + $lvl - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $dataProperties = 'dataProperties' + $lvl; - - var $schemaKeys = Object.keys($schema || {}) - , $pProperties = it.schema.patternProperties || {} - , $pPropertyKeys = Object.keys($pProperties) - , $aProperties = it.schema.additionalProperties - , $someProperties = $schemaKeys.length || $pPropertyKeys.length - , $noAdditional = $aProperties === false - , $additionalIsSchema = typeof $aProperties == 'object' - && Object.keys($aProperties).length - , $removeAdditional = it.opts.removeAdditional - , $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional - , $ownProperties = it.opts.ownProperties - , $currentBaseId = it.baseId; - - var $required = it.schema.required; - if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) - var $requiredHash = it.util.toHash($required); -}} - - -var {{=$errs}} = errors; -var {{=$nextValid}} = true; -{{? $ownProperties }} - var {{=$dataProperties}} = undefined; -{{?}} - -{{? $checkAdditional }} - {{# def.iterateProperties }} - {{? $someProperties }} - var isAdditional{{=$lvl}} = !(false - {{? $schemaKeys.length }} - {{? $schemaKeys.length > 8 }} - || validate.schema{{=$schemaPath}}.hasOwnProperty({{=$key}}) - {{??}} - {{~ $schemaKeys:$propertyKey }} - || {{=$key}} == {{= it.util.toQuotedString($propertyKey) }} - {{~}} - {{?}} - {{?}} - {{? $pPropertyKeys.length }} - {{~ $pPropertyKeys:$pProperty:$i }} - || {{= it.usePattern($pProperty) }}.test({{=$key}}) - {{~}} - {{?}} - ); - - if (isAdditional{{=$lvl}}) { - {{?}} - {{? $removeAdditional == 'all' }} - delete {{=$data}}[{{=$key}}]; - {{??}} - {{ - var $currentErrorPath = it.errorPath; - var $additionalProperty = '\' + ' + $key + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - } - }} - {{? $noAdditional }} - {{? $removeAdditional }} - delete {{=$data}}[{{=$key}}]; - {{??}} - {{=$nextValid}} = false; - {{ - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalProperties'; - }} - {{# def.error:'additionalProperties' }} - {{ $errSchemaPath = $currErrSchemaPath; }} - {{? $breakOnError }} break; {{?}} - {{?}} - {{?? $additionalIsSchema }} - {{? $removeAdditional == 'failing' }} - var {{=$errs}} = errors; - {{# def.setCompositeRule }} - - {{# def.validateAdditional }} - - if (!{{=$nextValid}}) { - errors = {{=$errs}}; - if (validate.errors !== null) { - if (errors) validate.errors.length = errors; - else validate.errors = null; - } - delete {{=$data}}[{{=$key}}]; - } - - {{# def.resetCompositeRule }} - {{??}} - {{# def.validateAdditional }} - {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} - {{?}} - {{?}} - {{ it.errorPath = $currentErrorPath; }} - {{?}} - {{? $someProperties }} - } - {{?}} - } - - {{# def.ifResultValid }} -{{?}} - -{{ var $useDefaults = it.opts.useDefaults && !it.compositeRule; }} - -{{? $schemaKeys.length }} - {{~ $schemaKeys:$propertyKey }} - {{ var $sch = $schema[$propertyKey]; }} - - {{? {{# def.nonEmptySchema:$sch}} }} - {{ - var $prop = it.util.getProperty($propertyKey) - , $passData = $data + $prop - , $hasDefault = $useDefaults && $sch.default !== undefined; - $it.schema = $sch; - $it.schemaPath = $schemaPath + $prop; - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); - $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); - $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); - }} - - {{# def.generateSubschemaCode }} - - {{? {{# def.willOptimize }} }} - {{ - $code = {{# def._optimizeValidate }}; - var $useData = $passData; - }} - {{??}} - {{ var $useData = $nextData; }} - var {{=$nextData}} = {{=$passData}}; - {{?}} - - {{? $hasDefault }} - {{= $code }} - {{??}} - {{? $requiredHash && $requiredHash[$propertyKey] }} - if ({{# def.noPropertyInData }}) { - {{=$nextValid}} = false; - {{ - var $currentErrorPath = it.errorPath - , $currErrSchemaPath = $errSchemaPath - , $missingProperty = it.util.escapeQuotes($propertyKey); - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - $errSchemaPath = it.errSchemaPath + '/required'; - }} - {{# def.error:'required' }} - {{ $errSchemaPath = $currErrSchemaPath; }} - {{ it.errorPath = $currentErrorPath; }} - } else { - {{??}} - {{? $breakOnError }} - if ({{# def.noPropertyInData }}) { - {{=$nextValid}} = true; - } else { - {{??}} - if ({{=$useData}} !== undefined - {{? $ownProperties }} - && {{# def.isOwnProperty }} - {{?}} - ) { - {{?}} - {{?}} - - {{= $code }} - } - {{?}} {{ /* $hasDefault */ }} - {{?}} {{ /* def.nonEmptySchema */ }} - - {{# def.ifResultValid }} - {{~}} -{{?}} - -{{? $pPropertyKeys.length }} - {{~ $pPropertyKeys:$pProperty }} - {{ var $sch = $pProperties[$pProperty]; }} - - {{? {{# def.nonEmptySchema:$sch}} }} - {{ - $it.schema = $sch; - $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); - $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' - + it.util.escapeFragment($pProperty); - }} - - {{# def.iterateProperties }} - if ({{= it.usePattern($pProperty) }}.test({{=$key}})) { - {{ - $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - - {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} - } - {{? $breakOnError }} else {{=$nextValid}} = true; {{?}} - } - - {{# def.ifResultValid }} - {{?}} {{ /* def.nonEmptySchema */ }} - {{~}} -{{?}} - - -{{? $breakOnError }} - {{= $closingBraces }} - if ({{=$errs}} == errors) { -{{?}} - -{{# def.cleanUp }} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/propertyNames.jst b/truebit-implementation/node_modules/ajv/lib/dot/propertyNames.jst deleted file mode 100644 index ee52b215..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/propertyNames.jst +++ /dev/null @@ -1,54 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -var {{=$errs}} = errors; - -{{? {{# def.nonEmptySchema:$schema }} }} - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - - {{ - var $key = 'key' + $lvl - , $idx = 'idx' + $lvl - , $i = 'i' + $lvl - , $invalidName = '\' + ' + $key + ' + \'' - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $dataProperties = 'dataProperties' + $lvl - , $ownProperties = it.opts.ownProperties - , $currentBaseId = it.baseId; - }} - - {{? $ownProperties }} - var {{=$dataProperties}} = undefined; - {{?}} - {{# def.iterateProperties }} - var startErrs{{=$lvl}} = errors; - - {{ var $passData = $key; }} - {{# def.setCompositeRule }} - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - {{# def.resetCompositeRule }} - - if (!{{=$nextValid}}) { - for (var {{=$i}}=startErrs{{=$lvl}}; {{=$i}}= it.opts.loopRequired - , $ownProperties = it.opts.ownProperties; - }} - - {{? $breakOnError }} - var missing{{=$lvl}}; - {{? $loopRequired }} - {{# def.setupLoop }} - var {{=$valid}} = true; - - {{?$isData}}{{# def.check$dataIsArray }}{{?}} - - for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { - {{=$valid}} = {{=$data}}[{{=$vSchema}}[{{=$i}}]] !== undefined - {{? $ownProperties }} - && {{# def.isRequiredOwnProperty }} - {{?}}; - if (!{{=$valid}}) break; - } - - {{? $isData }} } {{?}} - - {{# def.checkError:'required' }} - else { - {{??}} - if ({{# def.checkMissingProperty:$required }}) { - {{# def.errorMissingProperty:'required' }} - } else { - {{?}} - {{??}} - {{? $loopRequired }} - {{# def.setupLoop }} - {{? $isData }} - if ({{=$vSchema}} && !Array.isArray({{=$vSchema}})) { - {{# def.addError:'required' }} - } else if ({{=$vSchema}} !== undefined) { - {{?}} - - for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { - if ({{=$data}}[{{=$vSchema}}[{{=$i}}]] === undefined - {{? $ownProperties }} - || !{{# def.isRequiredOwnProperty }} - {{?}}) { - {{# def.addError:'required' }} - } - } - - {{? $isData }} } {{?}} - {{??}} - {{~ $required:$propertyKey }} - {{# def.allErrorsMissingProperty:'required' }} - {{~}} - {{?}} - {{?}} - - {{ it.errorPath = $currentErrorPath; }} - -{{?? $breakOnError }} - if (true) { -{{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/uniqueItems.jst b/truebit-implementation/node_modules/ajv/lib/dot/uniqueItems.jst deleted file mode 100644 index 22f82f99..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/uniqueItems.jst +++ /dev/null @@ -1,62 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - - -{{? ($schema || $isData) && it.opts.uniqueItems !== false }} - {{? $isData }} - var {{=$valid}}; - if ({{=$schemaValue}} === false || {{=$schemaValue}} === undefined) - {{=$valid}} = true; - else if (typeof {{=$schemaValue}} != 'boolean') - {{=$valid}} = false; - else { - {{?}} - - var i = {{=$data}}.length - , {{=$valid}} = true - , j; - if (i > 1) { - {{ - var $itemType = it.schema.items && it.schema.items.type - , $typeIsArray = Array.isArray($itemType); - }} - {{? !$itemType || $itemType == 'object' || $itemType == 'array' || - ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0)) }} - outer: - for (;i--;) { - for (j = i; j--;) { - if (equal({{=$data}}[i], {{=$data}}[j])) { - {{=$valid}} = false; - break outer; - } - } - } - {{??}} - var itemIndices = {}, item; - for (;i--;) { - var item = {{=$data}}[i]; - {{ var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); }} - if ({{= it.util[$method]($itemType, 'item', true) }}) continue; - {{? $typeIsArray}} - if (typeof item == 'string') item = '"' + item; - {{?}} - if (typeof itemIndices[item] == 'number') { - {{=$valid}} = false; - j = itemIndices[item]; - break; - } - itemIndices[item] = i; - } - {{?}} - } - - {{? $isData }} } {{?}} - - if (!{{=$valid}}) { - {{# def.error:'uniqueItems' }} - } {{? $breakOnError }} else { {{?}} -{{??}} - {{? $breakOnError }} if (true) { {{?}} -{{?}} diff --git a/truebit-implementation/node_modules/ajv/lib/dot/validate.jst b/truebit-implementation/node_modules/ajv/lib/dot/validate.jst deleted file mode 100644 index 27393cf3..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dot/validate.jst +++ /dev/null @@ -1,255 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.defaults }} -{{# def.coerce }} - -{{ /** - * schema compilation (render) time: - * it = { schema, RULES, _validate, opts } - * it.validate - this template function, - * it is used recursively to generate code for subschemas - * - * runtime: - * "validate" is a variable name to which this function will be assigned - * validateRef etc. are defined in the parent scope in index.js - */ }} - -{{ - var $async = it.schema.$async === true - , $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref') - , $id = it.self._getId(it.schema); -}} - -{{? it.isTop }} - var validate = {{?$async}}{{it.async = true;}}async {{?}}function(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - {{? $id && (it.opts.sourceCode || it.opts.processCode) }} - {{= '/\*# sourceURL=' + $id + ' */' }} - {{?}} -{{?}} - -{{? typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref) }} - {{ var $keyword = 'false schema'; }} - {{# def.setupKeyword }} - {{? it.schema === false}} - {{? it.isTop}} - {{ $breakOnError = true; }} - {{??}} - var {{=$valid}} = false; - {{?}} - {{# def.error:'false schema' }} - {{??}} - {{? it.isTop}} - {{? $async }} - return data; - {{??}} - validate.errors = null; - return true; - {{?}} - {{??}} - var {{=$valid}} = true; - {{?}} - {{?}} - - {{? it.isTop}} - }; - return validate; - {{?}} - - {{ return out; }} -{{?}} - - -{{? it.isTop }} - {{ - var $top = it.isTop - , $lvl = it.level = 0 - , $dataLvl = it.dataLevel = 0 - , $data = 'data'; - it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); - it.baseId = it.baseId || it.rootId; - delete it.isTop; - - it.dataPathArr = [undefined]; - }} - - var vErrors = null; {{ /* don't edit, used in replace */ }} - var errors = 0; {{ /* don't edit, used in replace */ }} - if (rootData === undefined) rootData = data; {{ /* don't edit, used in replace */ }} -{{??}} - {{ - var $lvl = it.level - , $dataLvl = it.dataLevel - , $data = 'data' + ($dataLvl || ''); - - if ($id) it.baseId = it.resolve.url(it.baseId, $id); - - if ($async && !it.async) throw new Error('async schema in sync schema'); - }} - - var errs_{{=$lvl}} = errors; -{{?}} - -{{ - var $valid = 'valid' + $lvl - , $breakOnError = !it.opts.allErrors - , $closingBraces1 = '' - , $closingBraces2 = ''; - - var $errorKeyword; - var $typeSchema = it.schema.type - , $typeIsArray = Array.isArray($typeSchema); - - if ($typeIsArray && $typeSchema.length == 1) { - $typeSchema = $typeSchema[0]; - $typeIsArray = false; - } -}} - -{{## def.checkType: - {{ - var $schemaPath = it.schemaPath + '.type' - , $errSchemaPath = it.errSchemaPath + '/type' - , $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; - }} - - if ({{= it.util[$method]($typeSchema, $data, true) }}) { -#}} - -{{? it.schema.$ref && $refKeywords }} - {{? it.opts.extendRefs == 'fail' }} - {{ throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); }} - {{?? it.opts.extendRefs !== true }} - {{ - $refKeywords = false; - it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); - }} - {{?}} -{{?}} - -{{? it.schema.$comment && it.opts.$comment }} - {{= it.RULES.all.$comment.code(it, '$comment') }} -{{?}} - -{{? $typeSchema }} - {{? it.opts.coerceTypes }} - {{ var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); }} - {{?}} - - {{ var $rulesGroup = it.RULES.types[$typeSchema]; }} - {{? $coerceToTypes || $typeIsArray || $rulesGroup === true || - ($rulesGroup && !$shouldUseGroup($rulesGroup)) }} - {{ - var $schemaPath = it.schemaPath + '.type' - , $errSchemaPath = it.errSchemaPath + '/type'; - }} - {{# def.checkType }} - {{? $coerceToTypes }} - {{# def.coerceType }} - {{??}} - {{# def.error:'type' }} - {{?}} - } - {{?}} -{{?}} - - -{{? it.schema.$ref && !$refKeywords }} - {{= it.RULES.all.$ref.code(it, '$ref') }} - {{? $breakOnError }} - } - if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { - {{ $closingBraces2 += '}'; }} - {{?}} -{{??}} - {{~ it.RULES:$rulesGroup }} - {{? $shouldUseGroup($rulesGroup) }} - {{? $rulesGroup.type }} - if ({{= it.util.checkDataType($rulesGroup.type, $data) }}) { - {{?}} - {{? it.opts.useDefaults && !it.compositeRule }} - {{? $rulesGroup.type == 'object' && it.schema.properties }} - {{# def.defaultProperties }} - {{?? $rulesGroup.type == 'array' && Array.isArray(it.schema.items) }} - {{# def.defaultItems }} - {{?}} - {{?}} - {{~ $rulesGroup.rules:$rule }} - {{? $shouldUseRule($rule) }} - {{ var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); }} - {{? $code }} - {{= $code }} - {{? $breakOnError }} - {{ $closingBraces1 += '}'; }} - {{?}} - {{?}} - {{?}} - {{~}} - {{? $breakOnError }} - {{= $closingBraces1 }} - {{ $closingBraces1 = ''; }} - {{?}} - {{? $rulesGroup.type }} - } - {{? $typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes }} - else { - {{ - var $schemaPath = it.schemaPath + '.type' - , $errSchemaPath = it.errSchemaPath + '/type'; - }} - {{# def.error:'type' }} - } - {{?}} - {{?}} - - {{? $breakOnError }} - if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { - {{ $closingBraces2 += '}'; }} - {{?}} - {{?}} - {{~}} -{{?}} - -{{? $breakOnError }} {{= $closingBraces2 }} {{?}} - -{{? $top }} - {{? $async }} - if (errors === 0) return data; {{ /* don't edit, used in replace */ }} - else throw new ValidationError(vErrors); {{ /* don't edit, used in replace */ }} - {{??}} - validate.errors = vErrors; {{ /* don't edit, used in replace */ }} - return errors === 0; {{ /* don't edit, used in replace */ }} - {{?}} - }; - - return validate; -{{??}} - var {{=$valid}} = errors === errs_{{=$lvl}}; -{{?}} - -{{# def.cleanUp }} - -{{? $top }} - {{# def.finalCleanUp }} -{{?}} - -{{ - function $shouldUseGroup($rulesGroup) { - var rules = $rulesGroup.rules; - for (var i=0; i < rules.length; i++) - if ($shouldUseRule(rules[i])) - return true; - } - - function $shouldUseRule($rule) { - return it.schema[$rule.keyword] !== undefined || - ($rule.implements && $ruleImplementsSomeKeyword($rule)); - } - - function $ruleImplementsSomeKeyword($rule) { - var impl = $rule.implements; - for (var i=0; i < impl.length; i++) - if (it.schema[impl[i]] !== undefined) - return true; - } -}} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/README.md b/truebit-implementation/node_modules/ajv/lib/dotjs/README.md deleted file mode 100644 index 4d994846..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -These files are compiled dot templates from dot folder. - -Do NOT edit them directly, edit the templates and run `npm run build` from main ajv folder. diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/_limit.js b/truebit-implementation/node_modules/ajv/lib/dotjs/_limit.js deleted file mode 100644 index 20485c8d..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/_limit.js +++ /dev/null @@ -1,155 +0,0 @@ -'use strict'; -module.exports = function generate__limit(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $isMax = $keyword == 'maximum', - $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', - $schemaExcl = it.schema[$exclusiveKeyword], - $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, - $op = $isMax ? '<' : '>', - $notOp = $isMax ? '>' : '<', - $errorKeyword = undefined; - if ($isDataExcl) { - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), - $exclusive = 'exclusive' + $lvl, - $exclType = 'exclType' + $lvl, - $exclIsNumber = 'exclIsNumber' + $lvl, - $opExpr = 'op' + $lvl, - $opStr = '\' + ' + $opExpr + ' + \''; - out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; - $schemaValueExcl = 'schemaExcl' + $lvl; - out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; - var $errorKeyword = $exclusiveKeyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; - if ($schema === undefined) { - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaValueExcl; - $isData = $isDataExcl; - } - } else { - var $exclIsNumber = typeof $schemaExcl == 'number', - $opStr = $op; - if ($exclIsNumber && $isData) { - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; - } else { - if ($exclIsNumber && $schema === undefined) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaExcl; - $notOp += '='; - } else { - if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); - if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $notOp += '='; - } else { - $exclusive = false; - $opStr += '='; - } - } - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; - } - } - $errorKeyword = $errorKeyword || $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be ' + ($opStr) + ' '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/_limitItems.js b/truebit-implementation/node_modules/ajv/lib/dotjs/_limitItems.js deleted file mode 100644 index 2f6f6ce8..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/_limitItems.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; -module.exports = function generate__limitItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $op = $keyword == 'maxItems' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxItems') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/_limitLength.js b/truebit-implementation/node_modules/ajv/lib/dotjs/_limitLength.js deleted file mode 100644 index e6927f39..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/_limitLength.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; -module.exports = function generate__limitLength(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $op = $keyword == 'maxLength' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - if (it.opts.unicode === false) { - out += ' ' + ($data) + '.length '; - } else { - out += ' ucs2length(' + ($data) + ') '; - } - out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be '; - if ($keyword == 'maxLength') { - out += 'longer'; - } else { - out += 'shorter'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' characters\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/_limitProperties.js b/truebit-implementation/node_modules/ajv/lib/dotjs/_limitProperties.js deleted file mode 100644 index cd8c62a8..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/_limitProperties.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; -module.exports = function generate__limitProperties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $op = $keyword == 'maxProperties' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxProperties') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' properties\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/allOf.js b/truebit-implementation/node_modules/ajv/lib/dotjs/allOf.js deleted file mode 100644 index 5107b18c..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/allOf.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; -module.exports = function generate_allOf(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $allSchemasEmpty = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - $allSchemasEmpty = false; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($breakOnError) { - if ($allSchemasEmpty) { - out += ' if (true) { '; - } else { - out += ' ' + ($closingBraces.slice(0, -1)) + ' '; - } - } - out = it.util.cleanUpCode(out); - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/anyOf.js b/truebit-implementation/node_modules/ajv/lib/dotjs/anyOf.js deleted file mode 100644 index 994b0912..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/anyOf.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; -module.exports = function generate_anyOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $noEmptySchema = $schema.every(function($sch) { - return it.util.schemaHasRules($sch, it.RULES.all); - }); - if ($noEmptySchema) { - var $currentBaseId = $it.baseId; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; - $closingBraces += '}'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should match some schema in anyOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - out = it.util.cleanUpCode(out); - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/comment.js b/truebit-implementation/node_modules/ajv/lib/dotjs/comment.js deleted file mode 100644 index dd66bb8f..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/comment.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; -module.exports = function generate_comment(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $comment = it.util.toQuotedString($schema); - if (it.opts.$comment === true) { - out += ' console.log(' + ($comment) + ');'; - } else if (typeof it.opts.$comment == 'function') { - out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);'; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/const.js b/truebit-implementation/node_modules/ajv/lib/dotjs/const.js deleted file mode 100644 index acad86f7..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/const.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; -module.exports = function generate_const(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!$isData) { - out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; - } - out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be equal to constant\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' }'; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/contains.js b/truebit-implementation/node_modules/ajv/lib/dotjs/contains.js deleted file mode 100644 index 04c6e936..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/contains.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; -module.exports = function generate_contains(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId, - $nonEmptySchema = it.util.schemaHasRules($schema, it.RULES.all); - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($nonEmptySchema) { - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (' + ($nextValid) + ') break; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; - } else { - out += ' if (' + ($data) + '.length == 0) {'; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should contain a valid item\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - if ($nonEmptySchema) { - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - } - if (it.opts.allErrors) { - out += ' } '; - } - out = it.util.cleanUpCode(out); - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/custom.js b/truebit-implementation/node_modules/ajv/lib/dotjs/custom.js deleted file mode 100644 index 0623e244..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/custom.js +++ /dev/null @@ -1,226 +0,0 @@ -'use strict'; -module.exports = function generate_custom(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $rule = this, - $definition = 'definition' + $lvl, - $rDef = $rule.definition, - $closingBraces = ''; - var $compile, $inline, $macro, $ruleValidate, $validateCode; - if ($isData && $rDef.$data) { - $validateCode = 'keywordValidate' + $lvl; - var $validateSchema = $rDef.validateSchema; - out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; - } else { - $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); - if (!$ruleValidate) return; - $schemaValue = 'validate.schema' + $schemaPath; - $validateCode = $ruleValidate.code; - $compile = $rDef.compile; - $inline = $rDef.inline; - $macro = $rDef.macro; - } - var $ruleErrs = $validateCode + '.errors', - $i = 'i' + $lvl, - $ruleErr = 'ruleErr' + $lvl, - $asyncKeyword = $rDef.async; - if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); - if (!($inline || $macro)) { - out += '' + ($ruleErrs) + ' = null;'; - } - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($isData && $rDef.$data) { - $closingBraces += '}'; - out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; - if ($validateSchema) { - $closingBraces += '}'; - out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; - } - } - if ($inline) { - if ($rDef.statements) { - out += ' ' + ($ruleValidate.validate) + ' '; - } else { - out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; - } - } else if ($macro) { - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - $it.schema = $ruleValidate.validate; - $it.schemaPath = ''; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($code); - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - out += ' ' + ($validateCode) + '.call( '; - if (it.opts.passContext) { - out += 'this'; - } else { - out += 'self'; - } - if ($compile || $rDef.schema === false) { - out += ' , ' + ($data) + ' '; - } else { - out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; - } - out += ' , (dataPath || \'\')'; - if (it.errorPath != '""') { - out += ' + ' + (it.errorPath); - } - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; - var def_callRuleValidate = out; - out = $$outStack.pop(); - if ($rDef.errors === false) { - out += ' ' + ($valid) + ' = '; - if ($asyncKeyword) { - out += 'await '; - } - out += '' + (def_callRuleValidate) + '; '; - } else { - if ($asyncKeyword) { - $ruleErrs = 'customErrors' + $lvl; - out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; - } else { - out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; - } - } - } - if ($rDef.modifying) { - out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; - } - out += '' + ($closingBraces); - if ($rDef.valid) { - if ($breakOnError) { - out += ' if (true) { '; - } - } else { - out += ' if ( '; - if ($rDef.valid === undefined) { - out += ' !'; - if ($macro) { - out += '' + ($nextValid); - } else { - out += '' + ($valid); - } - } else { - out += ' ' + (!$rDef.valid) + ' '; - } - out += ') { '; - $errorKeyword = $rule.keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - var def_customError = out; - out = $$outStack.pop(); - if ($inline) { - if ($rDef.errors) { - if ($rDef.errors != 'full') { - out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '= 0) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } else { - throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); - } - } - var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; - var $formatType = $isObject && $format.type || 'string'; - if ($isObject) { - var $async = $format.async === true; - $format = $format.validate; - } - if ($formatType != $ruleType) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } - if ($async) { - if (!it.async) throw new Error('async format in sync schema'); - var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; - out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { '; - } else { - out += ' if (! '; - var $formatRef = 'formats' + it.util.getProperty($schema); - if ($isObject) $formatRef += '.validate'; - if (typeof $format == 'function') { - out += ' ' + ($formatRef) + '(' + ($data) + ') '; - } else { - out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; - } - out += ') { '; - } - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match format "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/if.js b/truebit-implementation/node_modules/ajv/lib/dotjs/if.js deleted file mode 100644 index 6f0ea644..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/if.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict'; -module.exports = function generate_if(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - var $thenSch = it.schema['then'], - $elseSch = it.schema['else'], - $thenPresent = $thenSch !== undefined && it.util.schemaHasRules($thenSch, it.RULES.all), - $elsePresent = $elseSch !== undefined && it.util.schemaHasRules($elseSch, it.RULES.all), - $currentBaseId = $it.baseId; - if ($thenPresent || $elsePresent) { - var $ifClause; - $it.createErrors = false; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - $it.createErrors = true; - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - if ($thenPresent) { - out += ' if (' + ($nextValid) + ') { '; - $it.schema = it.schema['then']; - $it.schemaPath = it.schemaPath + '.then'; - $it.errSchemaPath = it.errSchemaPath + '/then'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'then\'; '; - } else { - $ifClause = '\'then\''; - } - out += ' } '; - if ($elsePresent) { - out += ' else { '; - } - } else { - out += ' if (!' + ($nextValid) + ') { '; - } - if ($elsePresent) { - $it.schema = it.schema['else']; - $it.schemaPath = it.schemaPath + '.else'; - $it.errSchemaPath = it.errSchemaPath + '/else'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'else\'; '; - } else { - $ifClause = '\'else\''; - } - out += ' } '; - } - out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - out = it.util.cleanUpCode(out); - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/index.js b/truebit-implementation/node_modules/ajv/lib/dotjs/index.js deleted file mode 100644 index 2fb1b00e..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/index.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -//all requires must be explicit because browserify won't work with dynamic requires -module.exports = { - '$ref': require('./ref'), - allOf: require('./allOf'), - anyOf: require('./anyOf'), - '$comment': require('./comment'), - const: require('./const'), - contains: require('./contains'), - dependencies: require('./dependencies'), - 'enum': require('./enum'), - format: require('./format'), - 'if': require('./if'), - items: require('./items'), - maximum: require('./_limit'), - minimum: require('./_limit'), - maxItems: require('./_limitItems'), - minItems: require('./_limitItems'), - maxLength: require('./_limitLength'), - minLength: require('./_limitLength'), - maxProperties: require('./_limitProperties'), - minProperties: require('./_limitProperties'), - multipleOf: require('./multipleOf'), - not: require('./not'), - oneOf: require('./oneOf'), - pattern: require('./pattern'), - properties: require('./properties'), - propertyNames: require('./propertyNames'), - required: require('./required'), - uniqueItems: require('./uniqueItems'), - validate: require('./validate') -}; diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/items.js b/truebit-implementation/node_modules/ajv/lib/dotjs/items.js deleted file mode 100644 index 77be5e21..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/items.js +++ /dev/null @@ -1,140 +0,0 @@ -'use strict'; -module.exports = function generate_items(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId; - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if (Array.isArray($schema)) { - var $additionalItems = it.schema.additionalItems; - if ($additionalItems === false) { - out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - $closingBraces += '}'; - out += ' else { '; - } - } - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; - var $passData = $data + '[' + $i + ']'; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); - $it.dataPathArr[$dataNxt] = $i; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if (typeof $additionalItems == 'object' && it.util.schemaHasRules($additionalItems, it.RULES.all)) { - $it.schema = $additionalItems; - $it.schemaPath = it.schemaPath + '.additionalItems'; - $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } else if (it.util.schemaHasRules($schema, it.RULES.all)) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' }'; - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - out = it.util.cleanUpCode(out); - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/multipleOf.js b/truebit-implementation/node_modules/ajv/lib/dotjs/multipleOf.js deleted file mode 100644 index df5a3154..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/multipleOf.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; -module.exports = function generate_multipleOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - out += 'var division' + ($lvl) + ';if ('; - if ($isData) { - out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; - } - out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; - if (it.opts.multipleOfPrecision) { - out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; - } else { - out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; - } - out += ' ) '; - if ($isData) { - out += ' ) '; - } - out += ' ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be multiple of '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/not.js b/truebit-implementation/node_modules/ajv/lib/dotjs/not.js deleted file mode 100644 index 67add9f6..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/not.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; -module.exports = function generate_not(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - if (it.util.schemaHasRules($schema, it.RULES.all)) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.createErrors = false; - var $allErrorsOption; - if ($it.opts.allErrors) { - $allErrorsOption = $it.opts.allErrors; - $it.opts.allErrors = false; - } - out += ' ' + (it.validate($it)) + ' '; - $it.createErrors = true; - if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (' + ($nextValid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - } else { - out += ' var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if ($breakOnError) { - out += ' if (false) { '; - } - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/oneOf.js b/truebit-implementation/node_modules/ajv/lib/dotjs/oneOf.js deleted file mode 100644 index b6be6409..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/oneOf.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; -module.exports = function generate_oneOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $prevValid = 'prevValid' + $lvl, - $passingSchemas = 'passingSchemas' + $lvl; - out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - } else { - out += ' var ' + ($nextValid) + ' = true; '; - } - if ($i) { - out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { '; - $closingBraces += '}'; - } - out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match exactly one schema in oneOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; - if (it.opts.allErrors) { - out += ' } '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/pattern.js b/truebit-implementation/node_modules/ajv/lib/dotjs/pattern.js deleted file mode 100644 index 76b7794e..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/pattern.js +++ /dev/null @@ -1,74 +0,0 @@ -'use strict'; -module.exports = function generate_pattern(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; - } - out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match pattern "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/properties.js b/truebit-implementation/node_modules/ajv/lib/dotjs/properties.js deleted file mode 100644 index 409692fc..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/properties.js +++ /dev/null @@ -1,328 +0,0 @@ -'use strict'; -module.exports = function generate_properties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl; - var $schemaKeys = Object.keys($schema || {}), - $pProperties = it.schema.patternProperties || {}, - $pPropertyKeys = Object.keys($pProperties), - $aProperties = it.schema.additionalProperties, - $someProperties = $schemaKeys.length || $pPropertyKeys.length, - $noAdditional = $aProperties === false, - $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, - $removeAdditional = it.opts.removeAdditional, - $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - var $required = it.schema.required; - if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) var $requiredHash = it.util.toHash($required); - out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined;'; - } - if ($checkAdditional) { - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - if ($someProperties) { - out += ' var isAdditional' + ($lvl) + ' = !(false '; - if ($schemaKeys.length) { - if ($schemaKeys.length > 8) { - out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') '; - } else { - var arr1 = $schemaKeys; - if (arr1) { - var $propertyKey, i1 = -1, - l1 = arr1.length - 1; - while (i1 < l1) { - $propertyKey = arr1[i1 += 1]; - out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; - } - } - } - } - if ($pPropertyKeys.length) { - var arr2 = $pPropertyKeys; - if (arr2) { - var $pProperty, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $pProperty = arr2[$i += 1]; - out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; - } - } - } - out += ' ); if (isAdditional' + ($lvl) + ') { '; - } - if ($removeAdditional == 'all') { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - var $currentErrorPath = it.errorPath; - var $additionalProperty = '\' + ' + $key + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - } - if ($noAdditional) { - if ($removeAdditional) { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - out += ' ' + ($nextValid) + ' = false; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalProperties'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is an invalid additional property'; - } else { - out += 'should NOT have additional properties'; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - out += ' break; '; - } - } - } else if ($additionalIsSchema) { - if ($removeAdditional == 'failing') { - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - } else { - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - } - } - it.errorPath = $currentErrorPath; - } - if ($someProperties) { - out += ' } '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - var $useDefaults = it.opts.useDefaults && !it.compositeRule; - if ($schemaKeys.length) { - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - var $prop = it.util.getProperty($propertyKey), - $passData = $data + $prop, - $hasDefault = $useDefaults && $sch.default !== undefined; - $it.schema = $sch; - $it.schemaPath = $schemaPath + $prop; - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); - $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); - $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - $code = it.util.varReplace($code, $nextData, $passData); - var $useData = $passData; - } else { - var $useData = $nextData; - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; - } - if ($hasDefault) { - out += ' ' + ($code) + ' '; - } else { - if ($requiredHash && $requiredHash[$propertyKey]) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = false; '; - var $currentErrorPath = it.errorPath, - $currErrSchemaPath = $errSchemaPath, - $missingProperty = it.util.escapeQuotes($propertyKey); - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - $errSchemaPath = it.errSchemaPath + '/required'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - it.errorPath = $currentErrorPath; - out += ' } else { '; - } else { - if ($breakOnError) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = true; } else { '; - } else { - out += ' if (' + ($useData) + ' !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ' ) { '; - } - } - out += ' ' + ($code) + ' } '; - } - } - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($pPropertyKeys.length) { - var arr4 = $pPropertyKeys; - if (arr4) { - var $pProperty, i4 = -1, - l4 = arr4.length - 1; - while (i4 < l4) { - $pProperty = arr4[i4 += 1]; - var $sch = $pProperties[$pProperty]; - if (it.util.schemaHasRules($sch, it.RULES.all)) { - $it.schema = $sch; - $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); - $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else ' + ($nextValid) + ' = true; '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - out = it.util.cleanUpCode(out); - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/propertyNames.js b/truebit-implementation/node_modules/ajv/lib/dotjs/propertyNames.js deleted file mode 100644 index 547d5dd0..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/propertyNames.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; -module.exports = function generate_propertyNames(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - out += 'var ' + ($errs) + ' = errors;'; - if (it.util.schemaHasRules($schema, it.RULES.all)) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $i = 'i' + $lvl, - $invalidName = '\' + ' + $key + ' + \'', - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined; '; - } - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' var startErrs' + ($lvl) + ' = errors; '; - var $passData = $key; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '= it.opts.loopRequired, - $ownProperties = it.opts.ownProperties; - if ($breakOnError) { - out += ' var missing' + ($lvl) + '; '; - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - out += ' var ' + ($valid) + ' = true; '; - if ($isData) { - out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += '; if (!' + ($valid) + ') break; } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } else { - out += ' if ( '; - var arr2 = $required; - if (arr2) { - var $propertyKey, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $propertyKey = arr2[$i += 1]; - if ($i) { - out += ' || '; - } - var $prop = it.util.getProperty($propertyKey), - $useData = $data + $prop; - out += ' ( ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; - } - } - out += ') { '; - var $propertyPath = 'missing' + $lvl, - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } - } else { - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - if ($isData) { - out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; - if ($isData) { - out += ' } '; - } - } else { - var arr3 = $required; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $prop = it.util.getProperty($propertyKey), - $missingProperty = it.util.escapeQuotes($propertyKey), - $useData = $data + $prop; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; - } - } - } - } - it.errorPath = $currentErrorPath; - } else if ($breakOnError) { - out += ' if (true) {'; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/uniqueItems.js b/truebit-implementation/node_modules/ajv/lib/dotjs/uniqueItems.js deleted file mode 100644 index d2dedf5a..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/uniqueItems.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; -module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (($schema || $isData) && it.opts.uniqueItems !== false) { - if ($isData) { - out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; - } - out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { '; - var $itemType = it.schema.items && it.schema.items.type, - $typeIsArray = Array.isArray($itemType); - if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) { - out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } '; - } else { - out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; '; - var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); - out += ' if (' + (it.util[$method]($itemType, 'item', true)) + ') continue; '; - if ($typeIsArray) { - out += ' if (typeof item == \'string\') item = \'"\' + item; '; - } - out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } '; - } - out += ' } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/dotjs/validate.js b/truebit-implementation/node_modules/ajv/lib/dotjs/validate.js deleted file mode 100644 index 9f9e1ae4..00000000 --- a/truebit-implementation/node_modules/ajv/lib/dotjs/validate.js +++ /dev/null @@ -1,445 +0,0 @@ -'use strict'; -module.exports = function generate_validate(it, $keyword, $ruleType) { - var out = ''; - var $async = it.schema.$async === true, - $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), - $id = it.self._getId(it.schema); - if (it.isTop) { - out += ' var validate = '; - if ($async) { - it.async = true; - out += 'async '; - } - out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; - if ($id && (it.opts.sourceCode || it.opts.processCode)) { - out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; - } - } - if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { - var $keyword = 'false schema'; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - if (it.schema === false) { - if (it.isTop) { - $breakOnError = true; - } else { - out += ' var ' + ($valid) + ' = false; '; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'boolean schema is false\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } else { - if (it.isTop) { - if ($async) { - out += ' return data; '; - } else { - out += ' validate.errors = null; return true; '; - } - } else { - out += ' var ' + ($valid) + ' = true; '; - } - } - if (it.isTop) { - out += ' }; return validate; '; - } - return out; - } - if (it.isTop) { - var $top = it.isTop, - $lvl = it.level = 0, - $dataLvl = it.dataLevel = 0, - $data = 'data'; - it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); - it.baseId = it.baseId || it.rootId; - delete it.isTop; - it.dataPathArr = [undefined]; - out += ' var vErrors = null; '; - out += ' var errors = 0; '; - out += ' if (rootData === undefined) rootData = data; '; - } else { - var $lvl = it.level, - $dataLvl = it.dataLevel, - $data = 'data' + ($dataLvl || ''); - if ($id) it.baseId = it.resolve.url(it.baseId, $id); - if ($async && !it.async) throw new Error('async schema in sync schema'); - out += ' var errs_' + ($lvl) + ' = errors;'; - } - var $valid = 'valid' + $lvl, - $breakOnError = !it.opts.allErrors, - $closingBraces1 = '', - $closingBraces2 = ''; - var $errorKeyword; - var $typeSchema = it.schema.type, - $typeIsArray = Array.isArray($typeSchema); - if ($typeIsArray && $typeSchema.length == 1) { - $typeSchema = $typeSchema[0]; - $typeIsArray = false; - } - if (it.schema.$ref && $refKeywords) { - if (it.opts.extendRefs == 'fail') { - throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); - } else if (it.opts.extendRefs !== true) { - $refKeywords = false; - it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); - } - } - if (it.schema.$comment && it.opts.$comment) { - out += ' ' + (it.RULES.all.$comment.code(it, '$comment')); - } - if ($typeSchema) { - if (it.opts.coerceTypes) { - var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); - } - var $rulesGroup = it.RULES.types[$typeSchema]; - if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type', - $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; - out += ' if (' + (it.util[$method]($typeSchema, $data, true)) + ') { '; - if ($coerceToTypes) { - var $dataType = 'dataType' + $lvl, - $coerced = 'coerced' + $lvl; - out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; - if (it.opts.coerceTypes == 'array') { - out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; - } - out += ' var ' + ($coerced) + ' = undefined; '; - var $bracesCoercion = ''; - var arr1 = $coerceToTypes; - if (arr1) { - var $type, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $type = arr1[$i += 1]; - if ($i) { - out += ' if (' + ($coerced) + ' === undefined) { '; - $bracesCoercion += '}'; - } - if (it.opts.coerceTypes == 'array' && $type != 'array') { - out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; - } - if ($type == 'string') { - out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; - } else if ($type == 'number' || $type == 'integer') { - out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; - if ($type == 'integer') { - out += ' && !(' + ($data) + ' % 1)'; - } - out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; - } else if ($type == 'boolean') { - out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; - } else if ($type == 'null') { - out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; - } else if (it.opts.coerceTypes == 'array' && $type == 'array') { - out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; - } - } - } - out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' ' + ($data) + ' = ' + ($coerced) + '; '; - if (!$dataLvl) { - out += 'if (' + ($parentData) + ' !== undefined)'; - } - out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } - out += ' } '; - } - } - if (it.schema.$ref && !$refKeywords) { - out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; - if ($breakOnError) { - out += ' } if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } else { - var arr2 = it.RULES; - if (arr2) { - var $rulesGroup, i2 = -1, - l2 = arr2.length - 1; - while (i2 < l2) { - $rulesGroup = arr2[i2 += 1]; - if ($shouldUseGroup($rulesGroup)) { - if ($rulesGroup.type) { - out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data)) + ') { '; - } - if (it.opts.useDefaults && !it.compositeRule) { - if ($rulesGroup.type == 'object' && it.schema.properties) { - var $schema = it.schema.properties, - $schemaKeys = Object.keys($schema); - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if ($sch.default !== undefined) { - var $passData = $data + it.util.getProperty($propertyKey); - out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { - var arr4 = it.schema.items; - if (arr4) { - var $sch, $i = -1, - l4 = arr4.length - 1; - while ($i < l4) { - $sch = arr4[$i += 1]; - if ($sch.default !== undefined) { - var $passData = $data + '[' + $i + ']'; - out += ' if (' + ($passData) + ' === undefined) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } - } - var arr5 = $rulesGroup.rules; - if (arr5) { - var $rule, i5 = -1, - l5 = arr5.length - 1; - while (i5 < l5) { - $rule = arr5[i5 += 1]; - if ($shouldUseRule($rule)) { - var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); - if ($code) { - out += ' ' + ($code) + ' '; - if ($breakOnError) { - $closingBraces1 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces1) + ' '; - $closingBraces1 = ''; - } - if ($rulesGroup.type) { - out += ' } '; - if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { - out += ' else { '; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - } - } - if ($breakOnError) { - out += ' if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces2) + ' '; - } - if ($top) { - if ($async) { - out += ' if (errors === 0) return data; '; - out += ' else throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; '; - out += ' return errors === 0; '; - } - out += ' }; return validate;'; - } else { - out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; - } - out = it.util.cleanUpCode(out); - if ($top) { - out = it.util.finalCleanUpCode(out, $async); - } - - function $shouldUseGroup($rulesGroup) { - var rules = $rulesGroup.rules; - for (var i = 0; i < rules.length; i++) - if ($shouldUseRule(rules[i])) return true; - } - - function $shouldUseRule($rule) { - return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); - } - - function $ruleImplementsSomeKeyword($rule) { - var impl = $rule.implements; - for (var i = 0; i < impl.length; i++) - if (it.schema[impl[i]] !== undefined) return true; - } - return out; -} diff --git a/truebit-implementation/node_modules/ajv/lib/keyword.js b/truebit-implementation/node_modules/ajv/lib/keyword.js deleted file mode 100644 index 6ed84c10..00000000 --- a/truebit-implementation/node_modules/ajv/lib/keyword.js +++ /dev/null @@ -1,135 +0,0 @@ -'use strict'; - -var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; -var customRuleCode = require('./dotjs/custom'); - -module.exports = { - add: addKeyword, - get: getKeyword, - remove: removeKeyword -}; - -/** - * Define custom keyword - * @this Ajv - * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). - * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. - * @return {Ajv} this for method chaining - */ -function addKeyword(keyword, definition) { - /* jshint validthis: true */ - /* eslint no-shadow: 0 */ - var RULES = this.RULES; - - if (RULES.keywords[keyword]) - throw new Error('Keyword ' + keyword + ' is already defined'); - - if (!IDENTIFIER.test(keyword)) - throw new Error('Keyword ' + keyword + ' is not a valid identifier'); - - if (definition) { - if (definition.macro && definition.valid !== undefined) - throw new Error('"valid" option cannot be used with macro keywords'); - - var dataType = definition.type; - if (Array.isArray(dataType)) { - var i, len = dataType.length; - for (i=0; i ../ajv-dist/bower.json - cd ../ajv-dist - - if [[ `git status --porcelain` ]]; then - echo "Changes detected. Updating master branch..." - git add -A - git commit -m "updated by travis build #$TRAVIS_BUILD_NUMBER" - git push --quiet origin master > /dev/null 2>&1 - fi - - echo "Publishing tag..." - - git tag $TRAVIS_TAG - git push --tags > /dev/null 2>&1 - - echo "Done" -fi diff --git a/truebit-implementation/node_modules/ajv/scripts/travis-gh-pages b/truebit-implementation/node_modules/ajv/scripts/travis-gh-pages deleted file mode 100755 index 46ded161..00000000 --- a/truebit-implementation/node_modules/ajv/scripts/travis-gh-pages +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [[ "$TRAVIS_BRANCH" == "master" && "$TRAVIS_PULL_REQUEST" == "false" && $TRAVIS_JOB_NUMBER =~ ".3" ]]; then - git diff --name-only $TRAVIS_COMMIT_RANGE | grep -qE '\.md$|^LICENSE$|travis-gh-pages$' && { - rm -rf ../gh-pages - git clone -b gh-pages --single-branch https://${GITHUB_TOKEN}@github.com/epoberezkin/ajv.git ../gh-pages - mkdir -p ../gh-pages/_source - cp *.md ../gh-pages/_source - cp LICENSE ../gh-pages/_source - currentDir=$(pwd) - cd ../gh-pages - $currentDir/node_modules/.bin/gh-pages-generator - # remove logo from README - sed -i -E "s/]+ajv_logo[^>]+>//" index.md - git config user.email "$GIT_USER_EMAIL" - git config user.name "$GIT_USER_NAME" - git add . - git commit -am "updated by travis build #$TRAVIS_BUILD_NUMBER" - git push --quiet origin gh-pages > /dev/null 2>&1 - } -fi diff --git a/truebit-implementation/node_modules/any-promise/.jshintrc b/truebit-implementation/node_modules/any-promise/.jshintrc deleted file mode 100644 index 979105e9..00000000 --- a/truebit-implementation/node_modules/any-promise/.jshintrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "node":true, - "strict":true -} diff --git a/truebit-implementation/node_modules/any-promise/.npmignore b/truebit-implementation/node_modules/any-promise/.npmignore deleted file mode 100644 index 1354abc0..00000000 --- a/truebit-implementation/node_modules/any-promise/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.git* -test/ -test-browser/ -build/ -.travis.yml -*.swp -Makefile diff --git a/truebit-implementation/node_modules/any-promise/LICENSE b/truebit-implementation/node_modules/any-promise/LICENSE deleted file mode 100644 index 9187fe5d..00000000 --- a/truebit-implementation/node_modules/any-promise/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2014-2016 Kevin Beaty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/any-promise/README.md b/truebit-implementation/node_modules/any-promise/README.md deleted file mode 100644 index 174bea4a..00000000 --- a/truebit-implementation/node_modules/any-promise/README.md +++ /dev/null @@ -1,161 +0,0 @@ -## Any Promise - -[![Build Status](https://secure.travis-ci.org/kevinbeaty/any-promise.svg)](http://travis-ci.org/kevinbeaty/any-promise) - -Let your library support any ES 2015 (ES6) compatible `Promise` and leave the choice to application authors. The application can *optionally* register its preferred `Promise` implementation and it will be exported when requiring `any-promise` from library code. - -If no preference is registered, defaults to the global `Promise` for newer Node.js versions. The browser version defaults to the window `Promise`, so polyfill or register as necessary. - -### Usage with global Promise: - -Assuming the global `Promise` is the desired implementation: - -```bash -# Install any libraries depending on any-promise -$ npm install mz -``` - -The installed libraries will use global Promise by default. - -```js -// in library -var Promise = require('any-promise') // the global Promise - -function promiseReturningFunction(){ - return new Promise(function(resolve, reject){...}) -} -``` - -### Usage with registration: - -Assuming `bluebird` is the desired Promise implementation: - -```bash -# Install preferred promise library -$ npm install bluebird -# Install any-promise to allow registration -$ npm install any-promise -# Install any libraries you would like to use depending on any-promise -$ npm install mz -``` - -Register your preference in the application entry point before any other `require` of packages that load `any-promise`: - -```javascript -// top of application index.js or other entry point -require('any-promise/register/bluebird') - -// -or- Equivalent to above, but allows customization of Promise library -require('any-promise/register')('bluebird', {Promise: require('bluebird')}) -``` - -Now that the implementation is registered, you can use any package depending on `any-promise`: - - -```javascript -var fsp = require('mz/fs') // mz/fs will use registered bluebird promises -var Promise = require('any-promise') // the registered bluebird promise -``` - -It is safe to call `register` multiple times, but it must always be with the same implementation. - -Again, registration is *optional*. It should only be called by the application user if overriding the global `Promise` implementation is desired. - -### Optional Application Registration - -As an application author, you can *optionally* register a preferred `Promise` implementation on application startup (before any call to `require('any-promise')`: - -You must register your preference before any call to `require('any-promise')` (by you or required packages), and only one implementation can be registered. Typically, this registration would occur at the top of the application entry point. - - -#### Registration shortcuts - -If you are using a known `Promise` implementation, you can register your preference with a shortcut: - - -```js -require('any-promise/register/bluebird') -// -or- -import 'any-promise/register/q'; -``` - -Shortcut registration is the preferred registration method as it works in the browser and Node.js. It is also convenient for using with `import` and many test runners, that offer a `--require` flag: - -``` -$ ava --require=any-promise/register/bluebird test.js -``` - -Current known implementations include `bluebird`, `q`, `when`, `rsvp`, `es6-promise`, `promise`, `native-promise-only`, `pinkie`, `vow` and `lie`. If you are not using a known implementation, you can use another registration method described below. - - -#### Basic Registration - -As an alternative to registration shortcuts, you can call the `register` function with the preferred `Promise` implementation. The benefit of this approach is that a `Promise` library can be required by name without being a known implementation. This approach does NOT work in the browser. To use `any-promise` in the browser use either registration shortcuts or specify the `Promise` constructor using advanced registration (see below). - -```javascript -require('any-promise/register')('when') -// -or- require('any-promise/register')('any other ES6 compatible library (known or otherwise)') -``` - -This registration method will try to detect the `Promise` constructor from requiring the specified implementation. If you would like to specify your own constructor, see advanced registration. - - -#### Advanced Registration - -To use the browser version, you should either install a polyfill or explicitly register the `Promise` constructor: - -```javascript -require('any-promise/register')('bluebird', {Promise: require('bluebird')}) -``` - -This could also be used for registering a custom `Promise` implementation or subclass. - -Your preference will be registered globally, allowing a single registration even if multiple versions of `any-promise` are installed in the NPM dependency tree or are using multiple bundled JavaScript files in the browser. You can bypass this global registration in options: - - -```javascript -require('../register')('es6-promise', {Promise: require('es6-promise').Promise, global: false}) -``` - -### Library Usage - -To use any `Promise` constructor, simply require it: - -```javascript -var Promise = require('any-promise'); - -return Promise - .all([xf, f, init, coll]) - .then(fn); - - -return new Promise(function(resolve, reject){ - try { - resolve(item); - } catch(e){ - reject(e); - } -}); - -``` - -Except noted below, libraries using `any-promise` should only use [documented](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) functions as there is no guarantee which implementation will be chosen by the application author. Libraries should never call `register`, only the application user should call if desired. - - -#### Advanced Library Usage - -If your library needs to branch code based on the registered implementation, you can retrieve it using `var impl = require('any-promise/implementation')`, where `impl` will be the package name (`"bluebird"`, `"when"`, etc.) if registered, `"global.Promise"` if using the global version on Node.js, or `"window.Promise"` if using the browser version. You should always include a default case, as there is no guarantee what package may be registered. - - -### Support for old Node.js versions - -Node.js versions prior to `v0.12` may have contained buggy versions of the global `Promise`. For this reason, the global `Promise` is not loaded automatically for these old versions. If using `any-promise` in Node.js versions versions `<= v0.12`, the user should register a desired implementation. - -If an implementation is not registered, `any-promise` will attempt to discover an installed `Promise` implementation. If no implementation can be found, an error will be thrown on `require('any-promise')`. While the auto-discovery usually avoids errors, it is non-deterministic. It is recommended that the user always register a preferred implementation for older Node.js versions. - -This auto-discovery is only available for Node.jS versions prior to `v0.12`. Any newer versions will always default to the global `Promise` implementation. - -### Related - -- [any-observable](https://github.com/sindresorhus/any-observable) - `any-promise` for Observables. - diff --git a/truebit-implementation/node_modules/any-promise/implementation.d.ts b/truebit-implementation/node_modules/any-promise/implementation.d.ts deleted file mode 100644 index c331a56a..00000000 --- a/truebit-implementation/node_modules/any-promise/implementation.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare var implementation: string; - -export = implementation; diff --git a/truebit-implementation/node_modules/any-promise/implementation.js b/truebit-implementation/node_modules/any-promise/implementation.js deleted file mode 100644 index a45ae94d..00000000 --- a/truebit-implementation/node_modules/any-promise/implementation.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./register')().implementation diff --git a/truebit-implementation/node_modules/any-promise/index.d.ts b/truebit-implementation/node_modules/any-promise/index.d.ts deleted file mode 100644 index 9f646c5d..00000000 --- a/truebit-implementation/node_modules/any-promise/index.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -declare class Promise implements Promise.Thenable { - /** - * If you call resolve in the body of the callback passed to the constructor, - * your promise is fulfilled with result object passed to resolve. - * If you call reject your promise is rejected with the object passed to resolve. - * For consistency and debugging (eg stack traces), obj should be an instanceof Error. - * Any errors thrown in the constructor callback will be implicitly passed to reject(). - */ - constructor (callback: (resolve : (value?: R | Promise.Thenable) => void, reject: (error?: any) => void) => void); - - /** - * onFulfilled is called when/if "promise" resolves. onRejected is called when/if "promise" rejects. - * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called. - * Both callbacks have a single parameter , the fulfillment value or rejection reason. - * "then" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve. - * If an error is thrown in the callback, the returned promise rejects with that error. - * - * @param onFulfilled called when/if "promise" resolves - * @param onRejected called when/if "promise" rejects - */ - then (onFulfilled?: (value: R) => U | Promise.Thenable, onRejected?: (error: any) => U | Promise.Thenable): Promise; - then (onFulfilled?: (value: R) => U | Promise.Thenable, onRejected?: (error: any) => void): Promise; - - /** - * Sugar for promise.then(undefined, onRejected) - * - * @param onRejected called when/if "promise" rejects - */ - catch (onRejected?: (error: any) => U | Promise.Thenable): Promise; - - /** - * Make a new promise from the thenable. - * A thenable is promise-like in as far as it has a "then" method. - */ - static resolve (): Promise; - static resolve (value: R | Promise.Thenable): Promise; - - /** - * Make a promise that rejects to obj. For consistency and debugging (eg stack traces), obj should be an instanceof Error - */ - static reject (error: any): Promise; - - /** - * Make a promise that fulfills when every item in the array fulfills, and rejects if (and when) any item rejects. - * the array passed to all can be a mixture of promise-like objects and other objects. - * The fulfillment value is an array (in order) of fulfillment values. The rejection value is the first rejection value. - */ - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable, T4 | Promise.Thenable , T5 | Promise.Thenable, T6 | Promise.Thenable, T7 | Promise.Thenable, T8 | Promise.Thenable, T9 | Promise.Thenable, T10 | Promise.Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable, T4 | Promise.Thenable , T5 | Promise.Thenable, T6 | Promise.Thenable, T7 | Promise.Thenable, T8 | Promise.Thenable, T9 | Promise.Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable, T4 | Promise.Thenable , T5 | Promise.Thenable, T6 | Promise.Thenable, T7 | Promise.Thenable, T8 | Promise.Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable, T4 | Promise.Thenable , T5 | Promise.Thenable, T6 | Promise.Thenable, T7 | Promise.Thenable]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable, T4 | Promise.Thenable , T5 | Promise.Thenable, T6 | Promise.Thenable]): Promise<[T1, T2, T3, T4, T5, T6]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable, T4 | Promise.Thenable , T5 | Promise.Thenable]): Promise<[T1, T2, T3, T4, T5]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable, T4 | Promise.Thenable ]): Promise<[T1, T2, T3, T4]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable, T3 | Promise.Thenable]): Promise<[T1, T2, T3]>; - static all (values: [T1 | Promise.Thenable, T2 | Promise.Thenable]): Promise<[T1, T2]>; - static all (values: [T1 | Promise.Thenable]): Promise<[T1]>; - static all (values: Array>): Promise; - - /** - * Make a Promise that fulfills when any item fulfills, and rejects if any item rejects. - */ - static race (promises: (R | Promise.Thenable)[]): Promise; -} - -declare namespace Promise { - export interface Thenable { - then (onFulfilled?: (value: R) => U | Thenable, onRejected?: (error: any) => U | Thenable): Thenable; - then (onFulfilled?: (value: R) => U | Thenable, onRejected?: (error: any) => void): Thenable; - } -} - -export = Promise; diff --git a/truebit-implementation/node_modules/any-promise/index.js b/truebit-implementation/node_modules/any-promise/index.js deleted file mode 100644 index 74b85483..00000000 --- a/truebit-implementation/node_modules/any-promise/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./register')().Promise diff --git a/truebit-implementation/node_modules/any-promise/loader.js b/truebit-implementation/node_modules/any-promise/loader.js deleted file mode 100644 index e1649142..00000000 --- a/truebit-implementation/node_modules/any-promise/loader.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict" - // global key for user preferred registration -var REGISTRATION_KEY = '@@any-promise/REGISTRATION', - // Prior registration (preferred or detected) - registered = null - -/** - * Registers the given implementation. An implementation must - * be registered prior to any call to `require("any-promise")`, - * typically on application load. - * - * If called with no arguments, will return registration in - * following priority: - * - * For Node.js: - * - * 1. Previous registration - * 2. global.Promise if node.js version >= 0.12 - * 3. Auto detected promise based on first sucessful require of - * known promise libraries. Note this is a last resort, as the - * loaded library is non-deterministic. node.js >= 0.12 will - * always use global.Promise over this priority list. - * 4. Throws error. - * - * For Browser: - * - * 1. Previous registration - * 2. window.Promise - * 3. Throws error. - * - * Options: - * - * Promise: Desired Promise constructor - * global: Boolean - Should the registration be cached in a global variable to - * allow cross dependency/bundle registration? (default true) - */ -module.exports = function(root, loadImplementation){ - return function register(implementation, opts){ - implementation = implementation || null - opts = opts || {} - // global registration unless explicitly {global: false} in options (default true) - var registerGlobal = opts.global !== false; - - // load any previous global registration - if(registered === null && registerGlobal){ - registered = root[REGISTRATION_KEY] || null - } - - if(registered !== null - && implementation !== null - && registered.implementation !== implementation){ - // Throw error if attempting to redefine implementation - throw new Error('any-promise already defined as "'+registered.implementation+ - '". You can only register an implementation before the first '+ - ' call to require("any-promise") and an implementation cannot be changed') - } - - if(registered === null){ - // use provided implementation - if(implementation !== null && typeof opts.Promise !== 'undefined'){ - registered = { - Promise: opts.Promise, - implementation: implementation - } - } else { - // require implementation if implementation is specified but not provided - registered = loadImplementation(implementation) - } - - if(registerGlobal){ - // register preference globally in case multiple installations - root[REGISTRATION_KEY] = registered - } - } - - return registered - } -} diff --git a/truebit-implementation/node_modules/any-promise/optional.js b/truebit-implementation/node_modules/any-promise/optional.js deleted file mode 100644 index f3889420..00000000 --- a/truebit-implementation/node_modules/any-promise/optional.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -try { - module.exports = require('./register')().Promise || null -} catch(e) { - module.exports = null -} diff --git a/truebit-implementation/node_modules/any-promise/package.json b/truebit-implementation/node_modules/any-promise/package.json deleted file mode 100644 index d4a2af37..00000000 --- a/truebit-implementation/node_modules/any-promise/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "any-promise@^1.3.0", - "_id": "any-promise@1.3.0", - "_inBundle": false, - "_integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "_location": "/any-promise", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "any-promise@^1.3.0", - "name": "any-promise", - "escapedName": "any-promise", - "rawSpec": "^1.3.0", - "saveSpec": null, - "fetchSpec": "^1.3.0" - }, - "_requiredBy": [ - "/fs-promise", - "/mz", - "/thenify", - "/web3-core-promievent", - "/web3-eth-accounts" - ], - "_resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "_shasum": "abc6afeedcea52e809cdc0376aed3ce39635d17f", - "_spec": "any-promise@^1.3.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/fs-promise", - "author": { - "name": "Kevin Beaty" - }, - "browser": { - "./register.js": "./register-shim.js" - }, - "bugs": { - "url": "https://github.com/kevinbeaty/any-promise/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Resolve any installed ES6 compatible promise", - "devDependencies": { - "ava": "^0.14.0", - "bluebird": "^3.0.0", - "es6-promise": "^3.0.0", - "is-promise": "^2.0.0", - "lie": "^3.0.0", - "mocha": "^2.0.0", - "native-promise-only": "^0.8.0", - "phantomjs-prebuilt": "^2.0.0", - "pinkie": "^2.0.0", - "promise": "^7.0.0", - "q": "^1.0.0", - "rsvp": "^3.0.0", - "vow": "^0.4.0", - "when": "^3.0.0", - "zuul": "^3.0.0" - }, - "homepage": "http://github.com/kevinbeaty/any-promise", - "keywords": [ - "promise", - "es6" - ], - "license": "MIT", - "main": "index.js", - "name": "any-promise", - "repository": { - "type": "git", - "url": "git+https://github.com/kevinbeaty/any-promise.git" - }, - "scripts": { - "test": "ava" - }, - "typings": "index.d.ts", - "version": "1.3.0" -} diff --git a/truebit-implementation/node_modules/any-promise/register-shim.js b/truebit-implementation/node_modules/any-promise/register-shim.js deleted file mode 100644 index 9049405c..00000000 --- a/truebit-implementation/node_modules/any-promise/register-shim.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -module.exports = require('./loader')(window, loadImplementation) - -/** - * Browser specific loadImplementation. Always uses `window.Promise` - * - * To register a custom implementation, must register with `Promise` option. - */ -function loadImplementation(){ - if(typeof window.Promise === 'undefined'){ - throw new Error("any-promise browser requires a polyfill or explicit registration"+ - " e.g: require('any-promise/register/bluebird')") - } - return { - Promise: window.Promise, - implementation: 'window.Promise' - } -} diff --git a/truebit-implementation/node_modules/any-promise/register.d.ts b/truebit-implementation/node_modules/any-promise/register.d.ts deleted file mode 100644 index 97f2fc05..00000000 --- a/truebit-implementation/node_modules/any-promise/register.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import Promise = require('./index'); - -declare function register (module?: string, options?: register.Options): register.Register; - -declare namespace register { - export interface Register { - Promise: typeof Promise; - implementation: string; - } - - export interface Options { - Promise?: typeof Promise; - global?: boolean - } -} - -export = register; diff --git a/truebit-implementation/node_modules/any-promise/register.js b/truebit-implementation/node_modules/any-promise/register.js deleted file mode 100644 index 255c6e2f..00000000 --- a/truebit-implementation/node_modules/any-promise/register.js +++ /dev/null @@ -1,94 +0,0 @@ -"use strict" -module.exports = require('./loader')(global, loadImplementation); - -/** - * Node.js version of loadImplementation. - * - * Requires the given implementation and returns the registration - * containing {Promise, implementation} - * - * If implementation is undefined or global.Promise, loads it - * Otherwise uses require - */ -function loadImplementation(implementation){ - var impl = null - - if(shouldPreferGlobalPromise(implementation)){ - // if no implementation or env specified use global.Promise - impl = { - Promise: global.Promise, - implementation: 'global.Promise' - } - } else if(implementation){ - // if implementation specified, require it - var lib = require(implementation) - impl = { - Promise: lib.Promise || lib, - implementation: implementation - } - } else { - // try to auto detect implementation. This is non-deterministic - // and should prefer other branches, but this is our last chance - // to load something without throwing error - impl = tryAutoDetect() - } - - if(impl === null){ - throw new Error('Cannot find any-promise implementation nor'+ - ' global.Promise. You must install polyfill or call'+ - ' require("any-promise/register") with your preferred'+ - ' implementation, e.g. require("any-promise/register/bluebird")'+ - ' on application load prior to any require("any-promise").') - } - - return impl -} - -/** - * Determines if the global.Promise should be preferred if an implementation - * has not been registered. - */ -function shouldPreferGlobalPromise(implementation){ - if(implementation){ - return implementation === 'global.Promise' - } else if(typeof global.Promise !== 'undefined'){ - // Load global promise if implementation not specified - // Versions < 0.11 did not have global Promise - // Do not use for version < 0.12 as version 0.11 contained buggy versions - var version = (/v(\d+)\.(\d+)\.(\d+)/).exec(process.version) - return !(version && +version[1] == 0 && +version[2] < 12) - } - - // do not have global.Promise or another implementation was specified - return false -} - -/** - * Look for common libs as last resort there is no guarantee that - * this will return a desired implementation or even be deterministic. - * The priority is also nearly arbitrary. We are only doing this - * for older versions of Node.js <0.12 that do not have a reasonable - * global.Promise implementation and we the user has not registered - * the preference. This preserves the behavior of any-promise <= 0.1 - * and may be deprecated or removed in the future - */ -function tryAutoDetect(){ - var libs = [ - "es6-promise", - "promise", - "native-promise-only", - "bluebird", - "rsvp", - "when", - "q", - "pinkie", - "lie", - "vow"] - var i = 0, len = libs.length - for(; i < len; i++){ - try { - return loadImplementation(libs[i]) - } catch(e){} - } - return null -} diff --git a/truebit-implementation/node_modules/any-promise/register/bluebird.d.ts b/truebit-implementation/node_modules/any-promise/register/bluebird.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/bluebird.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/bluebird.js b/truebit-implementation/node_modules/any-promise/register/bluebird.js deleted file mode 100644 index de0f87eb..00000000 --- a/truebit-implementation/node_modules/any-promise/register/bluebird.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('bluebird', {Promise: require('bluebird')}) diff --git a/truebit-implementation/node_modules/any-promise/register/es6-promise.d.ts b/truebit-implementation/node_modules/any-promise/register/es6-promise.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/es6-promise.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/es6-promise.js b/truebit-implementation/node_modules/any-promise/register/es6-promise.js deleted file mode 100644 index 59bd55b7..00000000 --- a/truebit-implementation/node_modules/any-promise/register/es6-promise.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('es6-promise', {Promise: require('es6-promise').Promise}) diff --git a/truebit-implementation/node_modules/any-promise/register/lie.d.ts b/truebit-implementation/node_modules/any-promise/register/lie.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/lie.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/lie.js b/truebit-implementation/node_modules/any-promise/register/lie.js deleted file mode 100644 index 7d305ca4..00000000 --- a/truebit-implementation/node_modules/any-promise/register/lie.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('lie', {Promise: require('lie')}) diff --git a/truebit-implementation/node_modules/any-promise/register/native-promise-only.d.ts b/truebit-implementation/node_modules/any-promise/register/native-promise-only.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/native-promise-only.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/native-promise-only.js b/truebit-implementation/node_modules/any-promise/register/native-promise-only.js deleted file mode 100644 index 70a5a5e1..00000000 --- a/truebit-implementation/node_modules/any-promise/register/native-promise-only.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('native-promise-only', {Promise: require('native-promise-only')}) diff --git a/truebit-implementation/node_modules/any-promise/register/pinkie.d.ts b/truebit-implementation/node_modules/any-promise/register/pinkie.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/pinkie.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/pinkie.js b/truebit-implementation/node_modules/any-promise/register/pinkie.js deleted file mode 100644 index caaf98a5..00000000 --- a/truebit-implementation/node_modules/any-promise/register/pinkie.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('pinkie', {Promise: require('pinkie')}) diff --git a/truebit-implementation/node_modules/any-promise/register/promise.d.ts b/truebit-implementation/node_modules/any-promise/register/promise.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/promise.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/promise.js b/truebit-implementation/node_modules/any-promise/register/promise.js deleted file mode 100644 index 746620d4..00000000 --- a/truebit-implementation/node_modules/any-promise/register/promise.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('promise', {Promise: require('promise')}) diff --git a/truebit-implementation/node_modules/any-promise/register/q.d.ts b/truebit-implementation/node_modules/any-promise/register/q.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/q.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/q.js b/truebit-implementation/node_modules/any-promise/register/q.js deleted file mode 100644 index 0fc633a9..00000000 --- a/truebit-implementation/node_modules/any-promise/register/q.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('q', {Promise: require('q').Promise}) diff --git a/truebit-implementation/node_modules/any-promise/register/rsvp.d.ts b/truebit-implementation/node_modules/any-promise/register/rsvp.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/rsvp.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/rsvp.js b/truebit-implementation/node_modules/any-promise/register/rsvp.js deleted file mode 100644 index 02b13180..00000000 --- a/truebit-implementation/node_modules/any-promise/register/rsvp.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('rsvp', {Promise: require('rsvp').Promise}) diff --git a/truebit-implementation/node_modules/any-promise/register/vow.d.ts b/truebit-implementation/node_modules/any-promise/register/vow.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/vow.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/vow.js b/truebit-implementation/node_modules/any-promise/register/vow.js deleted file mode 100644 index 5b6868c4..00000000 --- a/truebit-implementation/node_modules/any-promise/register/vow.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('vow', {Promise: require('vow').Promise}) diff --git a/truebit-implementation/node_modules/any-promise/register/when.d.ts b/truebit-implementation/node_modules/any-promise/register/when.d.ts deleted file mode 100644 index 336ce12b..00000000 --- a/truebit-implementation/node_modules/any-promise/register/when.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {} diff --git a/truebit-implementation/node_modules/any-promise/register/when.js b/truebit-implementation/node_modules/any-promise/register/when.js deleted file mode 100644 index d91c13d3..00000000 --- a/truebit-implementation/node_modules/any-promise/register/when.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -require('../register')('when', {Promise: require('when').Promise}) diff --git a/truebit-implementation/node_modules/array-flatten/LICENSE b/truebit-implementation/node_modules/array-flatten/LICENSE deleted file mode 100644 index 983fbe8a..00000000 --- a/truebit-implementation/node_modules/array-flatten/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/array-flatten/README.md b/truebit-implementation/node_modules/array-flatten/README.md deleted file mode 100644 index 91fa5b63..00000000 --- a/truebit-implementation/node_modules/array-flatten/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Array Flatten - -[![NPM version][npm-image]][npm-url] -[![NPM downloads][downloads-image]][downloads-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] - -> Flatten an array of nested arrays into a single flat array. Accepts an optional depth. - -## Installation - -``` -npm install array-flatten --save -``` - -## Usage - -```javascript -var flatten = require('array-flatten') - -flatten([1, [2, [3, [4, [5], 6], 7], 8], 9]) -//=> [1, 2, 3, 4, 5, 6, 7, 8, 9] - -flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2) -//=> [1, 2, 3, [4, [5], 6], 7, 8, 9] - -(function () { - flatten(arguments) //=> [1, 2, 3] -})(1, [2, 3]) -``` - -## License - -MIT - -[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat -[npm-url]: https://npmjs.org/package/array-flatten -[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat -[downloads-url]: https://npmjs.org/package/array-flatten -[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat -[travis-url]: https://travis-ci.org/blakeembrey/array-flatten -[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat -[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master diff --git a/truebit-implementation/node_modules/array-flatten/array-flatten.js b/truebit-implementation/node_modules/array-flatten/array-flatten.js deleted file mode 100644 index 089117b3..00000000 --- a/truebit-implementation/node_modules/array-flatten/array-flatten.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict' - -/** - * Expose `arrayFlatten`. - */ -module.exports = arrayFlatten - -/** - * Recursive flatten function with depth. - * - * @param {Array} array - * @param {Array} result - * @param {Number} depth - * @return {Array} - */ -function flattenWithDepth (array, result, depth) { - for (var i = 0; i < array.length; i++) { - var value = array[i] - - if (depth > 0 && Array.isArray(value)) { - flattenWithDepth(value, result, depth - 1) - } else { - result.push(value) - } - } - - return result -} - -/** - * Recursive flatten function. Omitting depth is slightly faster. - * - * @param {Array} array - * @param {Array} result - * @return {Array} - */ -function flattenForever (array, result) { - for (var i = 0; i < array.length; i++) { - var value = array[i] - - if (Array.isArray(value)) { - flattenForever(value, result) - } else { - result.push(value) - } - } - - return result -} - -/** - * Flatten an array, with the ability to define a depth. - * - * @param {Array} array - * @param {Number} depth - * @return {Array} - */ -function arrayFlatten (array, depth) { - if (depth == null) { - return flattenForever(array, []) - } - - return flattenWithDepth(array, [], depth) -} diff --git a/truebit-implementation/node_modules/array-flatten/package.json b/truebit-implementation/node_modules/array-flatten/package.json deleted file mode 100644 index d0c7091e..00000000 --- a/truebit-implementation/node_modules/array-flatten/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "array-flatten@1.1.1", - "_id": "array-flatten@1.1.1", - "_inBundle": false, - "_integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "_location": "/array-flatten", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "array-flatten@1.1.1", - "name": "array-flatten", - "escapedName": "array-flatten", - "rawSpec": "1.1.1", - "saveSpec": null, - "fetchSpec": "1.1.1" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "_shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2", - "_spec": "array-flatten@1.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "Blake Embrey", - "email": "hello@blakeembrey.com", - "url": "http://blakeembrey.me" - }, - "bugs": { - "url": "https://github.com/blakeembrey/array-flatten/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Flatten an array of nested arrays into a single flat array", - "devDependencies": { - "istanbul": "^0.3.13", - "mocha": "^2.2.4", - "pre-commit": "^1.0.7", - "standard": "^3.7.3" - }, - "files": [ - "array-flatten.js", - "LICENSE" - ], - "homepage": "https://github.com/blakeembrey/array-flatten", - "keywords": [ - "array", - "flatten", - "arguments", - "depth" - ], - "license": "MIT", - "main": "array-flatten.js", - "name": "array-flatten", - "repository": { - "type": "git", - "url": "git://github.com/blakeembrey/array-flatten.git" - }, - "scripts": { - "test": "istanbul cover _mocha -- -R spec" - }, - "version": "1.1.1" -} diff --git a/truebit-implementation/node_modules/asn1.js/README.md b/truebit-implementation/node_modules/asn1.js/README.md deleted file mode 100644 index 0c571b80..00000000 --- a/truebit-implementation/node_modules/asn1.js/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# ASN1.js - -ASN.1 DER Encoder/Decoder and DSL. - -## Example - -Define model: - -```javascript -var asn = require('asn1.js'); - -var Human = asn.define('Human', function() { - this.seq().obj( - this.key('firstName').octstr(), - this.key('lastName').octstr(), - this.key('age').int(), - this.key('gender').enum({ 0: 'male', 1: 'female' }), - this.key('bio').seqof(Bio) - ); -}); - -var Bio = asn.define('Bio', function() { - this.seq().obj( - this.key('time').gentime(), - this.key('description').octstr() - ); -}); -``` - -Encode data: - -```javascript -var output = Human.encode({ - firstName: 'Thomas', - lastName: 'Anderson', - age: 28, - gender: 'male', - bio: [ - { - time: +new Date('31 March 1999'), - description: 'freedom of mind' - } - ] -}, 'der'); -``` - -Decode data: - -```javascript -var human = Human.decode(output, 'der'); -console.log(human); -/* -{ firstName: , - lastName: , - age: 28, - gender: 'male', - bio: - [ { time: 922820400000, - description: } ] } -*/ -``` - -### Partial decode - -Its possible to parse data without stopping on first error. In order to do it, -you should call: - -```javascript -var human = Human.decode(output, 'der', { partial: true }); -console.log(human); -/* -{ result: { ... }, - errors: [ ... ] } -*/ -``` - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2013. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1.js b/truebit-implementation/node_modules/asn1.js/lib/asn1.js deleted file mode 100644 index 02bbdc1d..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1.js +++ /dev/null @@ -1,9 +0,0 @@ -var asn1 = exports; - -asn1.bignum = require('bn.js'); - -asn1.define = require('./asn1/api').define; -asn1.base = require('./asn1/base'); -asn1.constants = require('./asn1/constants'); -asn1.decoders = require('./asn1/decoders'); -asn1.encoders = require('./asn1/encoders'); diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/api.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/api.js deleted file mode 100644 index 7c223cc9..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/api.js +++ /dev/null @@ -1,61 +0,0 @@ -var asn1 = require('../asn1'); -var inherits = require('inherits'); - -var api = exports; - -api.define = function define(name, body) { - return new Entity(name, body); -}; - -function Entity(name, body) { - this.name = name; - this.body = body; - - this.decoders = {}; - this.encoders = {}; -}; - -Entity.prototype._createNamed = function createNamed(base) { - var named; - try { - named = require('vm').runInThisContext( - '(function ' + this.name + '(entity) {\n' + - ' this._initNamed(entity);\n' + - '})' - ); - } catch (e) { - named = function (entity) { - this._initNamed(entity); - }; - } - inherits(named, base); - named.prototype._initNamed = function initnamed(entity) { - base.call(this, entity); - }; - - return new named(this); -}; - -Entity.prototype._getDecoder = function _getDecoder(enc) { - enc = enc || 'der'; - // Lazily create decoder - if (!this.decoders.hasOwnProperty(enc)) - this.decoders[enc] = this._createNamed(asn1.decoders[enc]); - return this.decoders[enc]; -}; - -Entity.prototype.decode = function decode(data, enc, options) { - return this._getDecoder(enc).decode(data, options); -}; - -Entity.prototype._getEncoder = function _getEncoder(enc) { - enc = enc || 'der'; - // Lazily create encoder - if (!this.encoders.hasOwnProperty(enc)) - this.encoders[enc] = this._createNamed(asn1.encoders[enc]); - return this.encoders[enc]; -}; - -Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { - return this._getEncoder(enc).encode(data, reporter); -}; diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/buffer.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/base/buffer.js deleted file mode 100644 index bc826e84..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/buffer.js +++ /dev/null @@ -1,116 +0,0 @@ -var inherits = require('inherits'); -var Reporter = require('../base').Reporter; -var Buffer = require('buffer').Buffer; - -function DecoderBuffer(base, options) { - Reporter.call(this, options); - if (!Buffer.isBuffer(base)) { - this.error('Input not Buffer'); - return; - } - - this.base = base; - this.offset = 0; - this.length = base.length; -} -inherits(DecoderBuffer, Reporter); -exports.DecoderBuffer = DecoderBuffer; - -DecoderBuffer.prototype.save = function save() { - return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; -}; - -DecoderBuffer.prototype.restore = function restore(save) { - // Return skipped data - var res = new DecoderBuffer(this.base); - res.offset = save.offset; - res.length = this.offset; - - this.offset = save.offset; - Reporter.prototype.restore.call(this, save.reporter); - - return res; -}; - -DecoderBuffer.prototype.isEmpty = function isEmpty() { - return this.offset === this.length; -}; - -DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { - if (this.offset + 1 <= this.length) - return this.base.readUInt8(this.offset++, true); - else - return this.error(fail || 'DecoderBuffer overrun'); -} - -DecoderBuffer.prototype.skip = function skip(bytes, fail) { - if (!(this.offset + bytes <= this.length)) - return this.error(fail || 'DecoderBuffer overrun'); - - var res = new DecoderBuffer(this.base); - - // Share reporter state - res._reporterState = this._reporterState; - - res.offset = this.offset; - res.length = this.offset + bytes; - this.offset += bytes; - return res; -} - -DecoderBuffer.prototype.raw = function raw(save) { - return this.base.slice(save ? save.offset : this.offset, this.length); -} - -function EncoderBuffer(value, reporter) { - if (Array.isArray(value)) { - this.length = 0; - this.value = value.map(function(item) { - if (!(item instanceof EncoderBuffer)) - item = new EncoderBuffer(item, reporter); - this.length += item.length; - return item; - }, this); - } else if (typeof value === 'number') { - if (!(0 <= value && value <= 0xff)) - return reporter.error('non-byte EncoderBuffer value'); - this.value = value; - this.length = 1; - } else if (typeof value === 'string') { - this.value = value; - this.length = Buffer.byteLength(value); - } else if (Buffer.isBuffer(value)) { - this.value = value; - this.length = value.length; - } else { - return reporter.error('Unsupported type: ' + typeof value); - } -} -exports.EncoderBuffer = EncoderBuffer; - -EncoderBuffer.prototype.join = function join(out, offset) { - if (!out) - out = new Buffer(this.length); - if (!offset) - offset = 0; - - if (this.length === 0) - return out; - - if (Array.isArray(this.value)) { - this.value.forEach(function(item) { - item.join(out, offset); - offset += item.length; - }); - } else { - if (typeof this.value === 'number') - out[offset] = this.value; - else if (typeof this.value === 'string') - out.write(this.value, offset); - else if (Buffer.isBuffer(this.value)) - this.value.copy(out, offset); - offset += this.length; - } - - return out; -}; diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/index.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/base/index.js deleted file mode 100644 index 935abde0..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/index.js +++ /dev/null @@ -1,6 +0,0 @@ -var base = exports; - -base.Reporter = require('./reporter').Reporter; -base.DecoderBuffer = require('./buffer').DecoderBuffer; -base.EncoderBuffer = require('./buffer').EncoderBuffer; -base.Node = require('./node'); diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/node.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/base/node.js deleted file mode 100644 index 539a832e..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/node.js +++ /dev/null @@ -1,634 +0,0 @@ -var Reporter = require('../base').Reporter; -var EncoderBuffer = require('../base').EncoderBuffer; -var DecoderBuffer = require('../base').DecoderBuffer; -var assert = require('minimalistic-assert'); - -// Supported tags -var tags = [ - 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', - 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', - 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', - 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' -]; - -// Public methods list -var methods = [ - 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', - 'any', 'contains' -].concat(tags); - -// Overrided methods list -var overrided = [ - '_peekTag', '_decodeTag', '_use', - '_decodeStr', '_decodeObjid', '_decodeTime', - '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', - - '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', - '_encodeNull', '_encodeInt', '_encodeBool' -]; - -function Node(enc, parent) { - var state = {}; - this._baseState = state; - - state.enc = enc; - - state.parent = parent || null; - state.children = null; - - // State - state.tag = null; - state.args = null; - state.reverseArgs = null; - state.choice = null; - state.optional = false; - state.any = false; - state.obj = false; - state.use = null; - state.useDecoder = null; - state.key = null; - state['default'] = null; - state.explicit = null; - state.implicit = null; - state.contains = null; - - // Should create new instance on each method - if (!state.parent) { - state.children = []; - this._wrap(); - } -} -module.exports = Node; - -var stateProps = [ - 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', - 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', - 'implicit', 'contains' -]; - -Node.prototype.clone = function clone() { - var state = this._baseState; - var cstate = {}; - stateProps.forEach(function(prop) { - cstate[prop] = state[prop]; - }); - var res = new this.constructor(cstate.parent); - res._baseState = cstate; - return res; -}; - -Node.prototype._wrap = function wrap() { - var state = this._baseState; - methods.forEach(function(method) { - this[method] = function _wrappedMethod() { - var clone = new this.constructor(this); - state.children.push(clone); - return clone[method].apply(clone, arguments); - }; - }, this); -}; - -Node.prototype._init = function init(body) { - var state = this._baseState; - - assert(state.parent === null); - body.call(this); - - // Filter children - state.children = state.children.filter(function(child) { - return child._baseState.parent === this; - }, this); - assert.equal(state.children.length, 1, 'Root node can have only one child'); -}; - -Node.prototype._useArgs = function useArgs(args) { - var state = this._baseState; - - // Filter children and args - var children = args.filter(function(arg) { - return arg instanceof this.constructor; - }, this); - args = args.filter(function(arg) { - return !(arg instanceof this.constructor); - }, this); - - if (children.length !== 0) { - assert(state.children === null); - state.children = children; - - // Replace parent to maintain backward link - children.forEach(function(child) { - child._baseState.parent = this; - }, this); - } - if (args.length !== 0) { - assert(state.args === null); - state.args = args; - state.reverseArgs = args.map(function(arg) { - if (typeof arg !== 'object' || arg.constructor !== Object) - return arg; - - var res = {}; - Object.keys(arg).forEach(function(key) { - if (key == (key | 0)) - key |= 0; - var value = arg[key]; - res[value] = key; - }); - return res; - }); - } -}; - -// -// Overrided methods -// - -overrided.forEach(function(method) { - Node.prototype[method] = function _overrided() { - var state = this._baseState; - throw new Error(method + ' not implemented for encoding: ' + state.enc); - }; -}); - -// -// Public methods -// - -tags.forEach(function(tag) { - Node.prototype[tag] = function _tagMethod() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - assert(state.tag === null); - state.tag = tag; - - this._useArgs(args); - - return this; - }; -}); - -Node.prototype.use = function use(item) { - assert(item); - var state = this._baseState; - - assert(state.use === null); - state.use = item; - - return this; -}; - -Node.prototype.optional = function optional() { - var state = this._baseState; - - state.optional = true; - - return this; -}; - -Node.prototype.def = function def(val) { - var state = this._baseState; - - assert(state['default'] === null); - state['default'] = val; - state.optional = true; - - return this; -}; - -Node.prototype.explicit = function explicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.explicit = num; - - return this; -}; - -Node.prototype.implicit = function implicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.implicit = num; - - return this; -}; - -Node.prototype.obj = function obj() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - state.obj = true; - - if (args.length !== 0) - this._useArgs(args); - - return this; -}; - -Node.prototype.key = function key(newKey) { - var state = this._baseState; - - assert(state.key === null); - state.key = newKey; - - return this; -}; - -Node.prototype.any = function any() { - var state = this._baseState; - - state.any = true; - - return this; -}; - -Node.prototype.choice = function choice(obj) { - var state = this._baseState; - - assert(state.choice === null); - state.choice = obj; - this._useArgs(Object.keys(obj).map(function(key) { - return obj[key]; - })); - - return this; -}; - -Node.prototype.contains = function contains(item) { - var state = this._baseState; - - assert(state.use === null); - state.contains = item; - - return this; -}; - -// -// Decoding -// - -Node.prototype._decode = function decode(input, options) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return input.wrapResult(state.children[0]._decode(input, options)); - - var result = state['default']; - var present = true; - - var prevKey = null; - if (state.key !== null) - prevKey = input.enterKey(state.key); - - // Check if tag is there - if (state.optional) { - var tag = null; - if (state.explicit !== null) - tag = state.explicit; - else if (state.implicit !== null) - tag = state.implicit; - else if (state.tag !== null) - tag = state.tag; - - if (tag === null && !state.any) { - // Trial and Error - var save = input.save(); - try { - if (state.choice === null) - this._decodeGeneric(state.tag, input, options); - else - this._decodeChoice(input, options); - present = true; - } catch (e) { - present = false; - } - input.restore(save); - } else { - present = this._peekTag(input, tag, state.any); - - if (input.isError(present)) - return present; - } - } - - // Push object on stack - var prevObj; - if (state.obj && present) - prevObj = input.enterObject(); - - if (present) { - // Unwrap explicit values - if (state.explicit !== null) { - var explicit = this._decodeTag(input, state.explicit); - if (input.isError(explicit)) - return explicit; - input = explicit; - } - - var start = input.offset; - - // Unwrap implicit and normal values - if (state.use === null && state.choice === null) { - if (state.any) - var save = input.save(); - var body = this._decodeTag( - input, - state.implicit !== null ? state.implicit : state.tag, - state.any - ); - if (input.isError(body)) - return body; - - if (state.any) - result = input.raw(save); - else - input = body; - } - - if (options && options.track && state.tag !== null) - options.track(input.path(), start, input.length, 'tagged'); - - if (options && options.track && state.tag !== null) - options.track(input.path(), input.offset, input.length, 'content'); - - // Select proper method for tag - if (state.any) - result = result; - else if (state.choice === null) - result = this._decodeGeneric(state.tag, input, options); - else - result = this._decodeChoice(input, options); - - if (input.isError(result)) - return result; - - // Decode children - if (!state.any && state.choice === null && state.children !== null) { - state.children.forEach(function decodeChildren(child) { - // NOTE: We are ignoring errors here, to let parser continue with other - // parts of encoded data - child._decode(input, options); - }); - } - - // Decode contained/encoded by schema, only in bit or octet strings - if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { - var data = new DecoderBuffer(result); - result = this._getUse(state.contains, input._reporterState.obj) - ._decode(data, options); - } - } - - // Pop object - if (state.obj && present) - result = input.leaveObject(prevObj); - - // Set key - if (state.key !== null && (result !== null || present === true)) - input.leaveKey(prevKey, state.key, result); - else if (prevKey !== null) - input.exitKey(prevKey); - - return result; -}; - -Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { - var state = this._baseState; - - if (tag === 'seq' || tag === 'set') - return null; - if (tag === 'seqof' || tag === 'setof') - return this._decodeList(input, tag, state.args[0], options); - else if (/str$/.test(tag)) - return this._decodeStr(input, tag, options); - else if (tag === 'objid' && state.args) - return this._decodeObjid(input, state.args[0], state.args[1], options); - else if (tag === 'objid') - return this._decodeObjid(input, null, null, options); - else if (tag === 'gentime' || tag === 'utctime') - return this._decodeTime(input, tag, options); - else if (tag === 'null_') - return this._decodeNull(input, options); - else if (tag === 'bool') - return this._decodeBool(input, options); - else if (tag === 'objDesc') - return this._decodeStr(input, tag, options); - else if (tag === 'int' || tag === 'enum') - return this._decodeInt(input, state.args && state.args[0], options); - - if (state.use !== null) { - return this._getUse(state.use, input._reporterState.obj) - ._decode(input, options); - } else { - return input.error('unknown tag: ' + tag); - } -}; - -Node.prototype._getUse = function _getUse(entity, obj) { - - var state = this._baseState; - // Create altered use decoder if implicit is set - state.useDecoder = this._use(entity, obj); - assert(state.useDecoder._baseState.parent === null); - state.useDecoder = state.useDecoder._baseState.children[0]; - if (state.implicit !== state.useDecoder._baseState.implicit) { - state.useDecoder = state.useDecoder.clone(); - state.useDecoder._baseState.implicit = state.implicit; - } - return state.useDecoder; -}; - -Node.prototype._decodeChoice = function decodeChoice(input, options) { - var state = this._baseState; - var result = null; - var match = false; - - Object.keys(state.choice).some(function(key) { - var save = input.save(); - var node = state.choice[key]; - try { - var value = node._decode(input, options); - if (input.isError(value)) - return false; - - result = { type: key, value: value }; - match = true; - } catch (e) { - input.restore(save); - return false; - } - return true; - }, this); - - if (!match) - return input.error('Choice not matched'); - - return result; -}; - -// -// Encoding -// - -Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { - return new EncoderBuffer(data, this.reporter); -}; - -Node.prototype._encode = function encode(data, reporter, parent) { - var state = this._baseState; - if (state['default'] !== null && state['default'] === data) - return; - - var result = this._encodeValue(data, reporter, parent); - if (result === undefined) - return; - - if (this._skipDefault(result, reporter, parent)) - return; - - return result; -}; - -Node.prototype._encodeValue = function encode(data, reporter, parent) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return state.children[0]._encode(data, reporter || new Reporter()); - - var result = null; - - // Set reporter to share it with a child class - this.reporter = reporter; - - // Check if data is there - if (state.optional && data === undefined) { - if (state['default'] !== null) - data = state['default'] - else - return; - } - - // Encode children first - var content = null; - var primitive = false; - if (state.any) { - // Anything that was given is translated to buffer - result = this._createEncoderBuffer(data); - } else if (state.choice) { - result = this._encodeChoice(data, reporter); - } else if (state.contains) { - content = this._getUse(state.contains, parent)._encode(data, reporter); - primitive = true; - } else if (state.children) { - content = state.children.map(function(child) { - if (child._baseState.tag === 'null_') - return child._encode(null, reporter, data); - - if (child._baseState.key === null) - return reporter.error('Child should have a key'); - var prevKey = reporter.enterKey(child._baseState.key); - - if (typeof data !== 'object') - return reporter.error('Child expected, but input is not object'); - - var res = child._encode(data[child._baseState.key], reporter, data); - reporter.leaveKey(prevKey); - - return res; - }, this).filter(function(child) { - return child; - }); - content = this._createEncoderBuffer(content); - } else { - if (state.tag === 'seqof' || state.tag === 'setof') { - // TODO(indutny): this should be thrown on DSL level - if (!(state.args && state.args.length === 1)) - return reporter.error('Too many args for : ' + state.tag); - - if (!Array.isArray(data)) - return reporter.error('seqof/setof, but data is not Array'); - - var child = this.clone(); - child._baseState.implicit = null; - content = this._createEncoderBuffer(data.map(function(item) { - var state = this._baseState; - - return this._getUse(state.args[0], data)._encode(item, reporter); - }, child)); - } else if (state.use !== null) { - result = this._getUse(state.use, parent)._encode(data, reporter); - } else { - content = this._encodePrimitive(state.tag, data); - primitive = true; - } - } - - // Encode data itself - var result; - if (!state.any && state.choice === null) { - var tag = state.implicit !== null ? state.implicit : state.tag; - var cls = state.implicit === null ? 'universal' : 'context'; - - if (tag === null) { - if (state.use === null) - reporter.error('Tag could be omitted only for .use()'); - } else { - if (state.use === null) - result = this._encodeComposite(tag, primitive, cls, content); - } - } - - // Wrap in explicit - if (state.explicit !== null) - result = this._encodeComposite(state.explicit, false, 'context', result); - - return result; -}; - -Node.prototype._encodeChoice = function encodeChoice(data, reporter) { - var state = this._baseState; - - var node = state.choice[data.type]; - if (!node) { - assert( - false, - data.type + ' not found in ' + - JSON.stringify(Object.keys(state.choice))); - } - return node._encode(data.value, reporter); -}; - -Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { - var state = this._baseState; - - if (/str$/.test(tag)) - return this._encodeStr(data, tag); - else if (tag === 'objid' && state.args) - return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); - else if (tag === 'objid') - return this._encodeObjid(data, null, null); - else if (tag === 'gentime' || tag === 'utctime') - return this._encodeTime(data, tag); - else if (tag === 'null_') - return this._encodeNull(); - else if (tag === 'int' || tag === 'enum') - return this._encodeInt(data, state.args && state.reverseArgs[0]); - else if (tag === 'bool') - return this._encodeBool(data); - else if (tag === 'objDesc') - return this._encodeStr(data, tag); - else - throw new Error('Unsupported tag: ' + tag); -}; - -Node.prototype._isNumstr = function isNumstr(str) { - return /^[0-9 ]*$/.test(str); -}; - -Node.prototype._isPrintstr = function isPrintstr(str) { - return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); -}; diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/reporter.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/base/reporter.js deleted file mode 100644 index ec8b8b82..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/base/reporter.js +++ /dev/null @@ -1,121 +0,0 @@ -var inherits = require('inherits'); - -function Reporter(options) { - this._reporterState = { - obj: null, - path: [], - options: options || {}, - errors: [] - }; -} -exports.Reporter = Reporter; - -Reporter.prototype.isError = function isError(obj) { - return obj instanceof ReporterError; -}; - -Reporter.prototype.save = function save() { - var state = this._reporterState; - - return { obj: state.obj, pathLen: state.path.length }; -}; - -Reporter.prototype.restore = function restore(data) { - var state = this._reporterState; - - state.obj = data.obj; - state.path = state.path.slice(0, data.pathLen); -}; - -Reporter.prototype.enterKey = function enterKey(key) { - return this._reporterState.path.push(key); -}; - -Reporter.prototype.exitKey = function exitKey(index) { - var state = this._reporterState; - - state.path = state.path.slice(0, index - 1); -}; - -Reporter.prototype.leaveKey = function leaveKey(index, key, value) { - var state = this._reporterState; - - this.exitKey(index); - if (state.obj !== null) - state.obj[key] = value; -}; - -Reporter.prototype.path = function path() { - return this._reporterState.path.join('/'); -}; - -Reporter.prototype.enterObject = function enterObject() { - var state = this._reporterState; - - var prev = state.obj; - state.obj = {}; - return prev; -}; - -Reporter.prototype.leaveObject = function leaveObject(prev) { - var state = this._reporterState; - - var now = state.obj; - state.obj = prev; - return now; -}; - -Reporter.prototype.error = function error(msg) { - var err; - var state = this._reporterState; - - var inherited = msg instanceof ReporterError; - if (inherited) { - err = msg; - } else { - err = new ReporterError(state.path.map(function(elem) { - return '[' + JSON.stringify(elem) + ']'; - }).join(''), msg.message || msg, msg.stack); - } - - if (!state.options.partial) - throw err; - - if (!inherited) - state.errors.push(err); - - return err; -}; - -Reporter.prototype.wrapResult = function wrapResult(result) { - var state = this._reporterState; - if (!state.options.partial) - return result; - - return { - result: this.isError(result) ? null : result, - errors: state.errors - }; -}; - -function ReporterError(path, msg) { - this.path = path; - this.rethrow(msg); -}; -inherits(ReporterError, Error); - -ReporterError.prototype.rethrow = function rethrow(msg) { - this.message = msg + ' at: ' + (this.path || '(shallow)'); - if (Error.captureStackTrace) - Error.captureStackTrace(this, ReporterError); - - if (!this.stack) { - try { - // IE only adds stack when thrown - throw new Error(this.message); - } catch (e) { - this.stack = e.stack; - } - } - return this; -}; diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/constants/der.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/constants/der.js deleted file mode 100644 index 907dd397..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/constants/der.js +++ /dev/null @@ -1,42 +0,0 @@ -var constants = require('../constants'); - -exports.tagClass = { - 0: 'universal', - 1: 'application', - 2: 'context', - 3: 'private' -}; -exports.tagClassByName = constants._reverse(exports.tagClass); - -exports.tag = { - 0x00: 'end', - 0x01: 'bool', - 0x02: 'int', - 0x03: 'bitstr', - 0x04: 'octstr', - 0x05: 'null_', - 0x06: 'objid', - 0x07: 'objDesc', - 0x08: 'external', - 0x09: 'real', - 0x0a: 'enum', - 0x0b: 'embed', - 0x0c: 'utf8str', - 0x0d: 'relativeOid', - 0x10: 'seq', - 0x11: 'set', - 0x12: 'numstr', - 0x13: 'printstr', - 0x14: 't61str', - 0x15: 'videostr', - 0x16: 'ia5str', - 0x17: 'utctime', - 0x18: 'gentime', - 0x19: 'graphstr', - 0x1a: 'iso646str', - 0x1b: 'genstr', - 0x1c: 'unistr', - 0x1d: 'charstr', - 0x1e: 'bmpstr' -}; -exports.tagByName = constants._reverse(exports.tag); diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/constants/index.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/constants/index.js deleted file mode 100644 index c44e3251..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/constants/index.js +++ /dev/null @@ -1,19 +0,0 @@ -var constants = exports; - -// Helper -constants._reverse = function reverse(map) { - var res = {}; - - Object.keys(map).forEach(function(key) { - // Convert key to integer if it is stringified - if ((key | 0) == key) - key = key | 0; - - var value = map[key]; - res[value] = key; - }); - - return res; -}; - -constants.der = require('./der'); diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/der.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/der.js deleted file mode 100644 index 79a60acc..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/der.js +++ /dev/null @@ -1,324 +0,0 @@ -var inherits = require('inherits'); - -var asn1 = require('../../asn1'); -var base = asn1.base; -var bignum = asn1.bignum; - -// Import DER constants -var der = asn1.constants.der; - -function DERDecoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -}; -module.exports = DERDecoder; - -DERDecoder.prototype.decode = function decode(data, options) { - if (!(data instanceof base.DecoderBuffer)) - data = new base.DecoderBuffer(data, options); - - return this.tree._decode(data, options); -}; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); - -DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { - if (buffer.isEmpty()) - return false; - - var state = buffer.save(); - var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - buffer.restore(state); - - return decodedTag.tag === tag || decodedTag.tagStr === tag || - (decodedTag.tagStr + 'of') === tag || any; -}; - -DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { - var decodedTag = derDecodeTag(buffer, - 'Failed to decode tag of "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - var len = derDecodeLen(buffer, - decodedTag.primitive, - 'Failed to get length of "' + tag + '"'); - - // Failure - if (buffer.isError(len)) - return len; - - if (!any && - decodedTag.tag !== tag && - decodedTag.tagStr !== tag && - decodedTag.tagStr + 'of' !== tag) { - return buffer.error('Failed to match tag: "' + tag + '"'); - } - - if (decodedTag.primitive || len !== null) - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); - - // Indefinite length... find END tag - var state = buffer.save(); - var res = this._skipUntilEnd( - buffer, - 'Failed to skip indefinite length body: "' + this.tag + '"'); - if (buffer.isError(res)) - return res; - - len = buffer.offset - state.offset; - buffer.restore(state); - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); -}; - -DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { - while (true) { - var tag = derDecodeTag(buffer, fail); - if (buffer.isError(tag)) - return tag; - var len = derDecodeLen(buffer, tag.primitive, fail); - if (buffer.isError(len)) - return len; - - var res; - if (tag.primitive || len !== null) - res = buffer.skip(len) - else - res = this._skipUntilEnd(buffer, fail); - - // Failure - if (buffer.isError(res)) - return res; - - if (tag.tagStr === 'end') - break; - } -}; - -DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, - options) { - var result = []; - while (!buffer.isEmpty()) { - var possibleEnd = this._peekTag(buffer, 'end'); - if (buffer.isError(possibleEnd)) - return possibleEnd; - - var res = decoder.decode(buffer, 'der', options); - if (buffer.isError(res) && possibleEnd) - break; - result.push(res); - } - return result; -}; - -DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { - if (tag === 'bitstr') { - var unused = buffer.readUInt8(); - if (buffer.isError(unused)) - return unused; - return { unused: unused, data: buffer.raw() }; - } else if (tag === 'bmpstr') { - var raw = buffer.raw(); - if (raw.length % 2 === 1) - return buffer.error('Decoding of string type: bmpstr length mismatch'); - - var str = ''; - for (var i = 0; i < raw.length / 2; i++) { - str += String.fromCharCode(raw.readUInt16BE(i * 2)); - } - return str; - } else if (tag === 'numstr') { - var numstr = buffer.raw().toString('ascii'); - if (!this._isNumstr(numstr)) { - return buffer.error('Decoding of string type: ' + - 'numstr unsupported characters'); - } - return numstr; - } else if (tag === 'octstr') { - return buffer.raw(); - } else if (tag === 'objDesc') { - return buffer.raw(); - } else if (tag === 'printstr') { - var printstr = buffer.raw().toString('ascii'); - if (!this._isPrintstr(printstr)) { - return buffer.error('Decoding of string type: ' + - 'printstr unsupported characters'); - } - return printstr; - } else if (/str$/.test(tag)) { - return buffer.raw().toString(); - } else { - return buffer.error('Decoding of string type: ' + tag + ' unsupported'); - } -}; - -DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { - var result; - var identifiers = []; - var ident = 0; - while (!buffer.isEmpty()) { - var subident = buffer.readUInt8(); - ident <<= 7; - ident |= subident & 0x7f; - if ((subident & 0x80) === 0) { - identifiers.push(ident); - ident = 0; - } - } - if (subident & 0x80) - identifiers.push(ident); - - var first = (identifiers[0] / 40) | 0; - var second = identifiers[0] % 40; - - if (relative) - result = identifiers; - else - result = [first, second].concat(identifiers.slice(1)); - - if (values) { - var tmp = values[result.join(' ')]; - if (tmp === undefined) - tmp = values[result.join('.')]; - if (tmp !== undefined) - result = tmp; - } - - return result; -}; - -DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { - var str = buffer.raw().toString(); - if (tag === 'gentime') { - var year = str.slice(0, 4) | 0; - var mon = str.slice(4, 6) | 0; - var day = str.slice(6, 8) | 0; - var hour = str.slice(8, 10) | 0; - var min = str.slice(10, 12) | 0; - var sec = str.slice(12, 14) | 0; - } else if (tag === 'utctime') { - var year = str.slice(0, 2) | 0; - var mon = str.slice(2, 4) | 0; - var day = str.slice(4, 6) | 0; - var hour = str.slice(6, 8) | 0; - var min = str.slice(8, 10) | 0; - var sec = str.slice(10, 12) | 0; - if (year < 70) - year = 2000 + year; - else - year = 1900 + year; - } else { - return buffer.error('Decoding ' + tag + ' time is not supported yet'); - } - - return Date.UTC(year, mon - 1, day, hour, min, sec, 0); -}; - -DERNode.prototype._decodeNull = function decodeNull(buffer) { - return null; -}; - -DERNode.prototype._decodeBool = function decodeBool(buffer) { - var res = buffer.readUInt8(); - if (buffer.isError(res)) - return res; - else - return res !== 0; -}; - -DERNode.prototype._decodeInt = function decodeInt(buffer, values) { - // Bigint, return as it is (assume big endian) - var raw = buffer.raw(); - var res = new bignum(raw); - - if (values) - res = values[res.toString(10)] || res; - - return res; -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getDecoder('der').tree; -}; - -// Utility methods - -function derDecodeTag(buf, fail) { - var tag = buf.readUInt8(fail); - if (buf.isError(tag)) - return tag; - - var cls = der.tagClass[tag >> 6]; - var primitive = (tag & 0x20) === 0; - - // Multi-octet tag - load - if ((tag & 0x1f) === 0x1f) { - var oct = tag; - tag = 0; - while ((oct & 0x80) === 0x80) { - oct = buf.readUInt8(fail); - if (buf.isError(oct)) - return oct; - - tag <<= 7; - tag |= oct & 0x7f; - } - } else { - tag &= 0x1f; - } - var tagStr = der.tag[tag]; - - return { - cls: cls, - primitive: primitive, - tag: tag, - tagStr: tagStr - }; -} - -function derDecodeLen(buf, primitive, fail) { - var len = buf.readUInt8(fail); - if (buf.isError(len)) - return len; - - // Indefinite form - if (!primitive && len === 0x80) - return null; - - // Definite form - if ((len & 0x80) === 0) { - // Short form - return len; - } - - // Long form - var num = len & 0x7f; - if (num > 4) - return buf.error('length octect is too long'); - - len = 0; - for (var i = 0; i < num; i++) { - len <<= 8; - var j = buf.readUInt8(fail); - if (buf.isError(j)) - return j; - len |= j; - } - - return len; -} diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/index.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/index.js deleted file mode 100644 index e2583aa8..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/index.js +++ /dev/null @@ -1,4 +0,0 @@ -var decoders = exports; - -decoders.der = require('./der'); -decoders.pem = require('./pem'); diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/pem.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/pem.js deleted file mode 100644 index 301059ca..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/decoders/pem.js +++ /dev/null @@ -1,49 +0,0 @@ -var inherits = require('inherits'); -var Buffer = require('buffer').Buffer; - -var DERDecoder = require('./der'); - -function PEMDecoder(entity) { - DERDecoder.call(this, entity); - this.enc = 'pem'; -}; -inherits(PEMDecoder, DERDecoder); -module.exports = PEMDecoder; - -PEMDecoder.prototype.decode = function decode(data, options) { - var lines = data.toString().split(/[\r\n]+/g); - - var label = options.label.toUpperCase(); - - var re = /^-----(BEGIN|END) ([^-]+)-----$/; - var start = -1; - var end = -1; - for (var i = 0; i < lines.length; i++) { - var match = lines[i].match(re); - if (match === null) - continue; - - if (match[2] !== label) - continue; - - if (start === -1) { - if (match[1] !== 'BEGIN') - break; - start = i; - } else { - if (match[1] !== 'END') - break; - end = i; - break; - } - } - if (start === -1 || end === -1) - throw new Error('PEM section not found for: ' + label); - - var base64 = lines.slice(start + 1, end).join(''); - // Remove excessive symbols - base64.replace(/[^a-z0-9\+\/=]+/gi, ''); - - var input = new Buffer(base64, 'base64'); - return DERDecoder.prototype.decode.call(this, input, options); -}; diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/der.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/der.js deleted file mode 100644 index 721f8022..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/der.js +++ /dev/null @@ -1,295 +0,0 @@ -var inherits = require('inherits'); -var Buffer = require('buffer').Buffer; - -var asn1 = require('../../asn1'); -var base = asn1.base; - -// Import DER constants -var der = asn1.constants.der; - -function DEREncoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -}; -module.exports = DEREncoder; - -DEREncoder.prototype.encode = function encode(data, reporter) { - return this.tree._encode(data, reporter).join(); -}; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); - -DERNode.prototype._encodeComposite = function encodeComposite(tag, - primitive, - cls, - content) { - var encodedTag = encodeTag(tag, primitive, cls, this.reporter); - - // Short form - if (content.length < 0x80) { - var header = new Buffer(2); - header[0] = encodedTag; - header[1] = content.length; - return this._createEncoderBuffer([ header, content ]); - } - - // Long form - // Count octets required to store length - var lenOctets = 1; - for (var i = content.length; i >= 0x100; i >>= 8) - lenOctets++; - - var header = new Buffer(1 + 1 + lenOctets); - header[0] = encodedTag; - header[1] = 0x80 | lenOctets; - - for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) - header[i] = j & 0xff; - - return this._createEncoderBuffer([ header, content ]); -}; - -DERNode.prototype._encodeStr = function encodeStr(str, tag) { - if (tag === 'bitstr') { - return this._createEncoderBuffer([ str.unused | 0, str.data ]); - } else if (tag === 'bmpstr') { - var buf = new Buffer(str.length * 2); - for (var i = 0; i < str.length; i++) { - buf.writeUInt16BE(str.charCodeAt(i), i * 2); - } - return this._createEncoderBuffer(buf); - } else if (tag === 'numstr') { - if (!this._isNumstr(str)) { - return this.reporter.error('Encoding of string type: numstr supports ' + - 'only digits and space'); - } - return this._createEncoderBuffer(str); - } else if (tag === 'printstr') { - if (!this._isPrintstr(str)) { - return this.reporter.error('Encoding of string type: printstr supports ' + - 'only latin upper and lower case letters, ' + - 'digits, space, apostrophe, left and rigth ' + - 'parenthesis, plus sign, comma, hyphen, ' + - 'dot, slash, colon, equal sign, ' + - 'question mark'); - } - return this._createEncoderBuffer(str); - } else if (/str$/.test(tag)) { - return this._createEncoderBuffer(str); - } else if (tag === 'objDesc') { - return this._createEncoderBuffer(str); - } else { - return this.reporter.error('Encoding of string type: ' + tag + - ' unsupported'); - } -}; - -DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { - if (typeof id === 'string') { - if (!values) - return this.reporter.error('string objid given, but no values map found'); - if (!values.hasOwnProperty(id)) - return this.reporter.error('objid not found in values map'); - id = values[id].split(/[\s\.]+/g); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } else if (Array.isArray(id)) { - id = id.slice(); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } - - if (!Array.isArray(id)) { - return this.reporter.error('objid() should be either array or string, ' + - 'got: ' + JSON.stringify(id)); - } - - if (!relative) { - if (id[1] >= 40) - return this.reporter.error('Second objid identifier OOB'); - id.splice(0, 2, id[0] * 40 + id[1]); - } - - // Count number of octets - var size = 0; - for (var i = 0; i < id.length; i++) { - var ident = id[i]; - for (size++; ident >= 0x80; ident >>= 7) - size++; - } - - var objid = new Buffer(size); - var offset = objid.length - 1; - for (var i = id.length - 1; i >= 0; i--) { - var ident = id[i]; - objid[offset--] = ident & 0x7f; - while ((ident >>= 7) > 0) - objid[offset--] = 0x80 | (ident & 0x7f); - } - - return this._createEncoderBuffer(objid); -}; - -function two(num) { - if (num < 10) - return '0' + num; - else - return num; -} - -DERNode.prototype._encodeTime = function encodeTime(time, tag) { - var str; - var date = new Date(time); - - if (tag === 'gentime') { - str = [ - two(date.getFullYear()), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else if (tag === 'utctime') { - str = [ - two(date.getFullYear() % 100), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else { - this.reporter.error('Encoding ' + tag + ' time is not supported yet'); - } - - return this._encodeStr(str, 'octstr'); -}; - -DERNode.prototype._encodeNull = function encodeNull() { - return this._createEncoderBuffer(''); -}; - -DERNode.prototype._encodeInt = function encodeInt(num, values) { - if (typeof num === 'string') { - if (!values) - return this.reporter.error('String int or enum given, but no values map'); - if (!values.hasOwnProperty(num)) { - return this.reporter.error('Values map doesn\'t contain: ' + - JSON.stringify(num)); - } - num = values[num]; - } - - // Bignum, assume big endian - if (typeof num !== 'number' && !Buffer.isBuffer(num)) { - var numArray = num.toArray(); - if (!num.sign && numArray[0] & 0x80) { - numArray.unshift(0); - } - num = new Buffer(numArray); - } - - if (Buffer.isBuffer(num)) { - var size = num.length; - if (num.length === 0) - size++; - - var out = new Buffer(size); - num.copy(out); - if (num.length === 0) - out[0] = 0 - return this._createEncoderBuffer(out); - } - - if (num < 0x80) - return this._createEncoderBuffer(num); - - if (num < 0x100) - return this._createEncoderBuffer([0, num]); - - var size = 1; - for (var i = num; i >= 0x100; i >>= 8) - size++; - - var out = new Array(size); - for (var i = out.length - 1; i >= 0; i--) { - out[i] = num & 0xff; - num >>= 8; - } - if(out[0] & 0x80) { - out.unshift(0); - } - - return this._createEncoderBuffer(new Buffer(out)); -}; - -DERNode.prototype._encodeBool = function encodeBool(value) { - return this._createEncoderBuffer(value ? 0xff : 0); -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getEncoder('der').tree; -}; - -DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { - var state = this._baseState; - var i; - if (state['default'] === null) - return false; - - var data = dataBuffer.join(); - if (state.defaultBuffer === undefined) - state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); - - if (data.length !== state.defaultBuffer.length) - return false; - - for (i=0; i < data.length; i++) - if (data[i] !== state.defaultBuffer[i]) - return false; - - return true; -}; - -// Utility methods - -function encodeTag(tag, primitive, cls, reporter) { - var res; - - if (tag === 'seqof') - tag = 'seq'; - else if (tag === 'setof') - tag = 'set'; - - if (der.tagByName.hasOwnProperty(tag)) - res = der.tagByName[tag]; - else if (typeof tag === 'number' && (tag | 0) === tag) - res = tag; - else - return reporter.error('Unknown tag: ' + tag); - - if (res >= 0x1f) - return reporter.error('Multi-octet tag encoding unsupported'); - - if (!primitive) - res |= 0x20; - - res |= (der.tagClassByName[cls || 'universal'] << 6); - - return res; -} diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/index.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/index.js deleted file mode 100644 index 6a5d29ec..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/index.js +++ /dev/null @@ -1,4 +0,0 @@ -var encoders = exports; - -encoders.der = require('./der'); -encoders.pem = require('./pem'); diff --git a/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/pem.js b/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/pem.js deleted file mode 100644 index 864271fa..00000000 --- a/truebit-implementation/node_modules/asn1.js/lib/asn1/encoders/pem.js +++ /dev/null @@ -1,21 +0,0 @@ -var inherits = require('inherits'); - -var DEREncoder = require('./der'); - -function PEMEncoder(entity) { - DEREncoder.call(this, entity); - this.enc = 'pem'; -}; -inherits(PEMEncoder, DEREncoder); -module.exports = PEMEncoder; - -PEMEncoder.prototype.encode = function encode(data, options) { - var buf = DEREncoder.prototype.encode.call(this, data); - - var p = buf.toString('base64'); - var out = [ '-----BEGIN ' + options.label + '-----' ]; - for (var i = 0; i < p.length; i += 64) - out.push(p.slice(i, i + 64)); - out.push('-----END ' + options.label + '-----'); - return out.join('\n'); -}; diff --git a/truebit-implementation/node_modules/asn1.js/package.json b/truebit-implementation/node_modules/asn1.js/package.json deleted file mode 100644 index 94dbcdc9..00000000 --- a/truebit-implementation/node_modules/asn1.js/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "asn1.js@^4.0.0", - "_id": "asn1.js@4.10.1", - "_inBundle": false, - "_integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "_location": "/asn1.js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "asn1.js@^4.0.0", - "name": "asn1.js", - "escapedName": "asn1.js", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/parse-asn1" - ], - "_resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "_shasum": "b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0", - "_spec": "asn1.js@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/parse-asn1", - "author": { - "name": "Fedor Indutny" - }, - "bugs": { - "url": "https://github.com/indutny/asn1.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "deprecated": false, - "description": "ASN.1 encoder and decoder", - "devDependencies": { - "mocha": "^2.3.4" - }, - "homepage": "https://github.com/indutny/asn1.js", - "keywords": [ - "asn.1", - "der" - ], - "license": "MIT", - "main": "lib/asn1.js", - "name": "asn1.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/asn1.js.git" - }, - "scripts": { - "test": "mocha --reporter spec test/*-test.js && cd rfc/2560 && npm i && npm test && cd ../../rfc/5280 && npm i && npm test" - }, - "version": "4.10.1" -} diff --git a/truebit-implementation/node_modules/asn1/LICENSE b/truebit-implementation/node_modules/asn1/LICENSE deleted file mode 100644 index 9b5dcdb7..00000000 --- a/truebit-implementation/node_modules/asn1/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Mark Cavage, All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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 diff --git a/truebit-implementation/node_modules/asn1/README.md b/truebit-implementation/node_modules/asn1/README.md deleted file mode 100644 index 2208210a..00000000 --- a/truebit-implementation/node_modules/asn1/README.md +++ /dev/null @@ -1,50 +0,0 @@ -node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. -Currently BER encoding is supported; at some point I'll likely have to do DER. - -## Usage - -Mostly, if you're *actually* needing to read and write ASN.1, you probably don't -need this readme to explain what and why. If you have no idea what ASN.1 is, -see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -The source is pretty much self-explanatory, and has read/write methods for the -common types out there. - -### Decoding - -The following reads an ASN.1 sequence with a boolean. - - var Ber = require('asn1').Ber; - - var reader = new Ber.Reader(Buffer.from([0x30, 0x03, 0x01, 0x01, 0xff])); - - reader.readSequence(); - console.log('Sequence len: ' + reader.length); - if (reader.peek() === Ber.Boolean) - console.log(reader.readBoolean()); - -### Encoding - -The following generates the same payload as above. - - var Ber = require('asn1').Ber; - - var writer = new Ber.Writer(); - - writer.startSequence(); - writer.writeBoolean(true); - writer.endSequence(); - - console.log(writer.buffer); - -## Installation - - npm install asn1 - -## License - -MIT. - -## Bugs - -See . diff --git a/truebit-implementation/node_modules/asn1/lib/ber/errors.js b/truebit-implementation/node_modules/asn1/lib/ber/errors.js deleted file mode 100644 index 4557b8ae..00000000 --- a/truebit-implementation/node_modules/asn1/lib/ber/errors.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - - -module.exports = { - - newInvalidAsn1Error: function (msg) { - var e = new Error(); - e.name = 'InvalidAsn1Error'; - e.message = msg || ''; - return e; - } - -}; diff --git a/truebit-implementation/node_modules/asn1/lib/ber/index.js b/truebit-implementation/node_modules/asn1/lib/ber/index.js deleted file mode 100644 index 387d1326..00000000 --- a/truebit-implementation/node_modules/asn1/lib/ber/index.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var errors = require('./errors'); -var types = require('./types'); - -var Reader = require('./reader'); -var Writer = require('./writer'); - - -// --- Exports - -module.exports = { - - Reader: Reader, - - Writer: Writer - -}; - -for (var t in types) { - if (types.hasOwnProperty(t)) - module.exports[t] = types[t]; -} -for (var e in errors) { - if (errors.hasOwnProperty(e)) - module.exports[e] = errors[e]; -} diff --git a/truebit-implementation/node_modules/asn1/lib/ber/reader.js b/truebit-implementation/node_modules/asn1/lib/ber/reader.js deleted file mode 100644 index 8a7e4ca0..00000000 --- a/truebit-implementation/node_modules/asn1/lib/ber/reader.js +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var assert = require('assert'); -var Buffer = require('safer-buffer').Buffer; - -var ASN1 = require('./types'); -var errors = require('./errors'); - - -// --- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - - - -// --- API - -function Reader(data) { - if (!data || !Buffer.isBuffer(data)) - throw new TypeError('data must be a node Buffer'); - - this._buf = data; - this._size = data.length; - - // These hold the "current" state - this._len = 0; - this._offset = 0; -} - -Object.defineProperty(Reader.prototype, 'length', { - enumerable: true, - get: function () { return (this._len); } -}); - -Object.defineProperty(Reader.prototype, 'offset', { - enumerable: true, - get: function () { return (this._offset); } -}); - -Object.defineProperty(Reader.prototype, 'remain', { - get: function () { return (this._size - this._offset); } -}); - -Object.defineProperty(Reader.prototype, 'buffer', { - get: function () { return (this._buf.slice(this._offset)); } -}); - - -/** - * Reads a single byte and advances offset; you can pass in `true` to make this - * a "peek" operation (i.e., get the byte, but don't advance the offset). - * - * @param {Boolean} peek true means don't move offset. - * @return {Number} the next byte, null if not enough data. - */ -Reader.prototype.readByte = function (peek) { - if (this._size - this._offset < 1) - return null; - - var b = this._buf[this._offset] & 0xff; - - if (!peek) - this._offset += 1; - - return b; -}; - - -Reader.prototype.peek = function () { - return this.readByte(true); -}; - - -/** - * Reads a (potentially) variable length off the BER buffer. This call is - * not really meant to be called directly, as callers have to manipulate - * the internal buffer afterwards. - * - * As a result of this call, you can call `Reader.length`, until the - * next thing called that does a readLength. - * - * @return {Number} the amount of offset to advance the buffer. - * @throws {InvalidAsn1Error} on bad ASN.1 - */ -Reader.prototype.readLength = function (offset) { - if (offset === undefined) - offset = this._offset; - - if (offset >= this._size) - return null; - - var lenB = this._buf[offset++] & 0xff; - if (lenB === null) - return null; - - if ((lenB & 0x80) === 0x80) { - lenB &= 0x7f; - - if (lenB === 0) - throw newInvalidAsn1Error('Indefinite length not supported'); - - if (lenB > 4) - throw newInvalidAsn1Error('encoding too long'); - - if (this._size - offset < lenB) - return null; - - this._len = 0; - for (var i = 0; i < lenB; i++) - this._len = (this._len << 8) + (this._buf[offset++] & 0xff); - - } else { - // Wasn't a variable length - this._len = lenB; - } - - return offset; -}; - - -/** - * Parses the next sequence in this BER buffer. - * - * To get the length of the sequence, call `Reader.length`. - * - * @return {Number} the sequence's tag. - */ -Reader.prototype.readSequence = function (tag) { - var seq = this.peek(); - if (seq === null) - return null; - if (tag !== undefined && tag !== seq) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + seq.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - this._offset = o; - return seq; -}; - - -Reader.prototype.readInt = function () { - return this._readTag(ASN1.Integer); -}; - - -Reader.prototype.readBoolean = function () { - return (this._readTag(ASN1.Boolean) === 0 ? false : true); -}; - - -Reader.prototype.readEnumeration = function () { - return this._readTag(ASN1.Enumeration); -}; - - -Reader.prototype.readString = function (tag, retbuf) { - if (!tag) - tag = ASN1.OctetString; - - var b = this.peek(); - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - - if (o === null) - return null; - - if (this.length > this._size - o) - return null; - - this._offset = o; - - if (this.length === 0) - return retbuf ? Buffer.alloc(0) : ''; - - var str = this._buf.slice(this._offset, this._offset + this.length); - this._offset += this.length; - - return retbuf ? str : str.toString('utf8'); -}; - -Reader.prototype.readOID = function (tag) { - if (!tag) - tag = ASN1.OID; - - var b = this.readString(tag, true); - if (b === null) - return null; - - var values = []; - var value = 0; - - for (var i = 0; i < b.length; i++) { - var byte = b[i] & 0xff; - - value <<= 7; - value += byte & 0x7f; - if ((byte & 0x80) === 0) { - values.push(value); - value = 0; - } - } - - value = values.shift(); - values.unshift(value % 40); - values.unshift((value / 40) >> 0); - - return values.join('.'); -}; - - -Reader.prototype._readTag = function (tag) { - assert.ok(tag !== undefined); - - var b = this.peek(); - - if (b === null) - return null; - - if (b !== tag) - throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + - ': got 0x' + b.toString(16)); - - var o = this.readLength(this._offset + 1); // stored in `length` - if (o === null) - return null; - - if (this.length > 4) - throw newInvalidAsn1Error('Integer too long: ' + this.length); - - if (this.length > this._size - o) - return null; - this._offset = o; - - var fb = this._buf[this._offset]; - var value = 0; - - for (var i = 0; i < this.length; i++) { - value <<= 8; - value |= (this._buf[this._offset++] & 0xff); - } - - if ((fb & 0x80) === 0x80 && i !== 4) - value -= (1 << (i * 8)); - - return value >> 0; -}; - - - -// --- Exported API - -module.exports = Reader; diff --git a/truebit-implementation/node_modules/asn1/lib/ber/types.js b/truebit-implementation/node_modules/asn1/lib/ber/types.js deleted file mode 100644 index 8aea0001..00000000 --- a/truebit-implementation/node_modules/asn1/lib/ber/types.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - - -module.exports = { - EOC: 0, - Boolean: 1, - Integer: 2, - BitString: 3, - OctetString: 4, - Null: 5, - OID: 6, - ObjectDescriptor: 7, - External: 8, - Real: 9, // float - Enumeration: 10, - PDV: 11, - Utf8String: 12, - RelativeOID: 13, - Sequence: 16, - Set: 17, - NumericString: 18, - PrintableString: 19, - T61String: 20, - VideotexString: 21, - IA5String: 22, - UTCTime: 23, - GeneralizedTime: 24, - GraphicString: 25, - VisibleString: 26, - GeneralString: 28, - UniversalString: 29, - CharacterString: 30, - BMPString: 31, - Constructor: 32, - Context: 128 -}; diff --git a/truebit-implementation/node_modules/asn1/lib/ber/writer.js b/truebit-implementation/node_modules/asn1/lib/ber/writer.js deleted file mode 100644 index 3515acf7..00000000 --- a/truebit-implementation/node_modules/asn1/lib/ber/writer.js +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -var assert = require('assert'); -var Buffer = require('safer-buffer').Buffer; -var ASN1 = require('./types'); -var errors = require('./errors'); - - -// --- Globals - -var newInvalidAsn1Error = errors.newInvalidAsn1Error; - -var DEFAULT_OPTS = { - size: 1024, - growthFactor: 8 -}; - - -// --- Helpers - -function merge(from, to) { - assert.ok(from); - assert.equal(typeof (from), 'object'); - assert.ok(to); - assert.equal(typeof (to), 'object'); - - var keys = Object.getOwnPropertyNames(from); - keys.forEach(function (key) { - if (to[key]) - return; - - var value = Object.getOwnPropertyDescriptor(from, key); - Object.defineProperty(to, key, value); - }); - - return to; -} - - - -// --- API - -function Writer(options) { - options = merge(DEFAULT_OPTS, options || {}); - - this._buf = Buffer.alloc(options.size || 1024); - this._size = this._buf.length; - this._offset = 0; - this._options = options; - - // A list of offsets in the buffer where we need to insert - // sequence tag/len pairs. - this._seq = []; -} - -Object.defineProperty(Writer.prototype, 'buffer', { - get: function () { - if (this._seq.length) - throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)'); - - return (this._buf.slice(0, this._offset)); - } -}); - -Writer.prototype.writeByte = function (b) { - if (typeof (b) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(1); - this._buf[this._offset++] = b; -}; - - -Writer.prototype.writeInt = function (i, tag) { - if (typeof (i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof (tag) !== 'number') - tag = ASN1.Integer; - - var sz = 4; - - while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) && - (sz > 1)) { - sz--; - i <<= 8; - } - - if (sz > 4) - throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff'); - - this._ensure(2 + sz); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = sz; - - while (sz-- > 0) { - this._buf[this._offset++] = ((i & 0xff000000) >>> 24); - i <<= 8; - } - -}; - - -Writer.prototype.writeNull = function () { - this.writeByte(ASN1.Null); - this.writeByte(0x00); -}; - - -Writer.prototype.writeEnumeration = function (i, tag) { - if (typeof (i) !== 'number') - throw new TypeError('argument must be a Number'); - if (typeof (tag) !== 'number') - tag = ASN1.Enumeration; - - return this.writeInt(i, tag); -}; - - -Writer.prototype.writeBoolean = function (b, tag) { - if (typeof (b) !== 'boolean') - throw new TypeError('argument must be a Boolean'); - if (typeof (tag) !== 'number') - tag = ASN1.Boolean; - - this._ensure(3); - this._buf[this._offset++] = tag; - this._buf[this._offset++] = 0x01; - this._buf[this._offset++] = b ? 0xff : 0x00; -}; - - -Writer.prototype.writeString = function (s, tag) { - if (typeof (s) !== 'string') - throw new TypeError('argument must be a string (was: ' + typeof (s) + ')'); - if (typeof (tag) !== 'number') - tag = ASN1.OctetString; - - var len = Buffer.byteLength(s); - this.writeByte(tag); - this.writeLength(len); - if (len) { - this._ensure(len); - this._buf.write(s, this._offset); - this._offset += len; - } -}; - - -Writer.prototype.writeBuffer = function (buf, tag) { - if (typeof (tag) !== 'number') - throw new TypeError('tag must be a number'); - if (!Buffer.isBuffer(buf)) - throw new TypeError('argument must be a buffer'); - - this.writeByte(tag); - this.writeLength(buf.length); - this._ensure(buf.length); - buf.copy(this._buf, this._offset, 0, buf.length); - this._offset += buf.length; -}; - - -Writer.prototype.writeStringArray = function (strings) { - if ((!strings instanceof Array)) - throw new TypeError('argument must be an Array[String]'); - - var self = this; - strings.forEach(function (s) { - self.writeString(s); - }); -}; - -// This is really to solve DER cases, but whatever for now -Writer.prototype.writeOID = function (s, tag) { - if (typeof (s) !== 'string') - throw new TypeError('argument must be a string'); - if (typeof (tag) !== 'number') - tag = ASN1.OID; - - if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) - throw new Error('argument is not a valid OID string'); - - function encodeOctet(bytes, octet) { - if (octet < 128) { - bytes.push(octet); - } else if (octet < 16384) { - bytes.push((octet >>> 7) | 0x80); - bytes.push(octet & 0x7F); - } else if (octet < 2097152) { - bytes.push((octet >>> 14) | 0x80); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else if (octet < 268435456) { - bytes.push((octet >>> 21) | 0x80); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } else { - bytes.push(((octet >>> 28) | 0x80) & 0xFF); - bytes.push(((octet >>> 21) | 0x80) & 0xFF); - bytes.push(((octet >>> 14) | 0x80) & 0xFF); - bytes.push(((octet >>> 7) | 0x80) & 0xFF); - bytes.push(octet & 0x7F); - } - } - - var tmp = s.split('.'); - var bytes = []; - bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); - tmp.slice(2).forEach(function (b) { - encodeOctet(bytes, parseInt(b, 10)); - }); - - var self = this; - this._ensure(2 + bytes.length); - this.writeByte(tag); - this.writeLength(bytes.length); - bytes.forEach(function (b) { - self.writeByte(b); - }); -}; - - -Writer.prototype.writeLength = function (len) { - if (typeof (len) !== 'number') - throw new TypeError('argument must be a Number'); - - this._ensure(4); - - if (len <= 0x7f) { - this._buf[this._offset++] = len; - } else if (len <= 0xff) { - this._buf[this._offset++] = 0x81; - this._buf[this._offset++] = len; - } else if (len <= 0xffff) { - this._buf[this._offset++] = 0x82; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else if (len <= 0xffffff) { - this._buf[this._offset++] = 0x83; - this._buf[this._offset++] = len >> 16; - this._buf[this._offset++] = len >> 8; - this._buf[this._offset++] = len; - } else { - throw newInvalidAsn1Error('Length too long (> 4 bytes)'); - } -}; - -Writer.prototype.startSequence = function (tag) { - if (typeof (tag) !== 'number') - tag = ASN1.Sequence | ASN1.Constructor; - - this.writeByte(tag); - this._seq.push(this._offset); - this._ensure(3); - this._offset += 3; -}; - - -Writer.prototype.endSequence = function () { - var seq = this._seq.pop(); - var start = seq + 3; - var len = this._offset - start; - - if (len <= 0x7f) { - this._shift(start, len, -2); - this._buf[seq] = len; - } else if (len <= 0xff) { - this._shift(start, len, -1); - this._buf[seq] = 0x81; - this._buf[seq + 1] = len; - } else if (len <= 0xffff) { - this._buf[seq] = 0x82; - this._buf[seq + 1] = len >> 8; - this._buf[seq + 2] = len; - } else if (len <= 0xffffff) { - this._shift(start, len, 1); - this._buf[seq] = 0x83; - this._buf[seq + 1] = len >> 16; - this._buf[seq + 2] = len >> 8; - this._buf[seq + 3] = len; - } else { - throw newInvalidAsn1Error('Sequence too long'); - } -}; - - -Writer.prototype._shift = function (start, len, shift) { - assert.ok(start !== undefined); - assert.ok(len !== undefined); - assert.ok(shift); - - this._buf.copy(this._buf, start + shift, start, start + len); - this._offset += shift; -}; - -Writer.prototype._ensure = function (len) { - assert.ok(len); - - if (this._size - this._offset < len) { - var sz = this._size * this._options.growthFactor; - if (sz - this._offset < len) - sz += len; - - var buf = Buffer.alloc(sz); - - this._buf.copy(buf, 0, 0, this._offset); - this._buf = buf; - this._size = sz; - } -}; - - - -// --- Exported API - -module.exports = Writer; diff --git a/truebit-implementation/node_modules/asn1/lib/index.js b/truebit-implementation/node_modules/asn1/lib/index.js deleted file mode 100644 index ede3ab23..00000000 --- a/truebit-implementation/node_modules/asn1/lib/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2011 Mark Cavage All rights reserved. - -// If you have no idea what ASN.1 or BER is, see this: -// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc - -var Ber = require('./ber/index'); - - - -// --- Exported API - -module.exports = { - - Ber: Ber, - - BerReader: Ber.Reader, - - BerWriter: Ber.Writer - -}; diff --git a/truebit-implementation/node_modules/asn1/package.json b/truebit-implementation/node_modules/asn1/package.json deleted file mode 100644 index 724c0979..00000000 --- a/truebit-implementation/node_modules/asn1/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "asn1@~0.2.3", - "_id": "asn1@0.2.4", - "_inBundle": false, - "_integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "_location": "/asn1", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "asn1@~0.2.3", - "name": "asn1", - "escapedName": "asn1", - "rawSpec": "~0.2.3", - "saveSpec": null, - "fetchSpec": "~0.2.3" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "_shasum": "8d2475dfab553bb33e77b54e59e880bb8ce23136", - "_spec": "asn1@~0.2.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/sshpk", - "author": { - "name": "Joyent", - "url": "joyent.com" - }, - "bugs": { - "url": "https://github.com/joyent/node-asn1/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - { - "name": "David Gwynne", - "email": "loki@animata.net" - }, - { - "name": "Yunong Xiao", - "email": "yunong@joyent.com" - }, - { - "name": "Alex Wilson", - "email": "alex.wilson@joyent.com" - } - ], - "dependencies": { - "safer-buffer": "~2.1.0" - }, - "deprecated": false, - "description": "Contains parsers and serializers for ASN.1 (currently BER only)", - "devDependencies": { - "eslint": "2.13.1", - "eslint-plugin-joyent": "~1.3.0", - "faucet": "0.0.1", - "istanbul": "^0.3.6", - "tape": "^3.5.0" - }, - "homepage": "https://github.com/joyent/node-asn1#readme", - "license": "MIT", - "main": "lib/index.js", - "name": "asn1", - "repository": { - "type": "git", - "url": "git://github.com/joyent/node-asn1.git" - }, - "scripts": { - "test": "tape ./test/ber/*.test.js" - }, - "version": "0.2.4" -} diff --git a/truebit-implementation/node_modules/assert-plus/AUTHORS b/truebit-implementation/node_modules/assert-plus/AUTHORS deleted file mode 100644 index 1923524f..00000000 --- a/truebit-implementation/node_modules/assert-plus/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -Dave Eddy -Fred Kuo -Lars-Magnus Skog -Mark Cavage -Patrick Mooney -Rob Gulewich diff --git a/truebit-implementation/node_modules/assert-plus/CHANGES.md b/truebit-implementation/node_modules/assert-plus/CHANGES.md deleted file mode 100644 index 57d92bfd..00000000 --- a/truebit-implementation/node_modules/assert-plus/CHANGES.md +++ /dev/null @@ -1,14 +0,0 @@ -# assert-plus Changelog - -## 1.0.0 - -- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input -- Add assert.finite check. Previous assert.number callers should use this if - they expect Infinity inputs to throw. - -## 0.2.0 - -- Fix `assert.object(null)` so it throws -- Fix optional/arrayOf exports for non-type-of asserts -- Add optiona/arrayOf exports for Stream/Date/Regex/uuid -- Add basic unit test coverage diff --git a/truebit-implementation/node_modules/assert-plus/README.md b/truebit-implementation/node_modules/assert-plus/README.md deleted file mode 100644 index ec200d16..00000000 --- a/truebit-implementation/node_modules/assert-plus/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# assert-plus - -This library is a super small wrapper over node's assert module that has two -things: (1) the ability to disable assertions with the environment variable -NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like -`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks -like this: - -```javascript - var assert = require('assert-plus'); - - function fooAccount(options, callback) { - assert.object(options, 'options'); - assert.number(options.id, 'options.id'); - assert.bool(options.isManager, 'options.isManager'); - assert.string(options.name, 'options.name'); - assert.arrayOfString(options.email, 'options.email'); - assert.func(callback, 'callback'); - - // Do stuff - callback(null, {}); - } -``` - -# API - -All methods that *aren't* part of node's core assert API are simply assumed to -take an argument, and then a string 'name' that's not a message; `AssertionError` -will be thrown if the assertion fails with a message like: - - AssertionError: foo (string) is required - at test (/home/mark/work/foo/foo.js:3:9) - at Object. (/home/mark/work/foo/foo.js:15:1) - at Module._compile (module.js:446:26) - at Object..js (module.js:464:10) - at Module.load (module.js:353:31) - at Function._load (module.js:311:12) - at Array.0 (module.js:484:10) - at EventEmitter._tickCallback (node.js:190:38) - -from: - -```javascript - function test(foo) { - assert.string(foo, 'foo'); - } -``` - -There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: - -```javascript - function test(foo) { - assert.arrayOfString(foo, 'foo'); - } -``` - -You can assert IFF an argument is not `undefined` (i.e., an optional arg): - -```javascript - assert.optionalString(foo, 'foo'); -``` - -Lastly, you can opt-out of assertion checking altogether by setting the -environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have -lots of assertions, and don't want to pay `typeof ()` taxes to v8 in -production. Be advised: The standard functions re-exported from `assert` are -also disabled in assert-plus if NDEBUG is specified. Using them directly from -the `assert` module avoids this behavior. - -The complete list of APIs is: - -* assert.array -* assert.bool -* assert.buffer -* assert.func -* assert.number -* assert.finite -* assert.object -* assert.string -* assert.stream -* assert.date -* assert.regexp -* assert.uuid -* assert.arrayOfArray -* assert.arrayOfBool -* assert.arrayOfBuffer -* assert.arrayOfFunc -* assert.arrayOfNumber -* assert.arrayOfFinite -* assert.arrayOfObject -* assert.arrayOfString -* assert.arrayOfStream -* assert.arrayOfDate -* assert.arrayOfRegexp -* assert.arrayOfUuid -* assert.optionalArray -* assert.optionalBool -* assert.optionalBuffer -* assert.optionalFunc -* assert.optionalNumber -* assert.optionalFinite -* assert.optionalObject -* assert.optionalString -* assert.optionalStream -* assert.optionalDate -* assert.optionalRegexp -* assert.optionalUuid -* assert.optionalArrayOfArray -* assert.optionalArrayOfBool -* assert.optionalArrayOfBuffer -* assert.optionalArrayOfFunc -* assert.optionalArrayOfNumber -* assert.optionalArrayOfFinite -* assert.optionalArrayOfObject -* assert.optionalArrayOfString -* assert.optionalArrayOfStream -* assert.optionalArrayOfDate -* assert.optionalArrayOfRegexp -* assert.optionalArrayOfUuid -* assert.AssertionError -* assert.fail -* assert.ok -* assert.equal -* assert.notEqual -* assert.deepEqual -* assert.notDeepEqual -* assert.strictEqual -* assert.notStrictEqual -* assert.throws -* assert.doesNotThrow -* assert.ifError - -# Installation - - npm install assert-plus - -## License - -The MIT License (MIT) -Copyright (c) 2012 Mark Cavage - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - -## Bugs - -See . diff --git a/truebit-implementation/node_modules/assert-plus/assert.js b/truebit-implementation/node_modules/assert-plus/assert.js deleted file mode 100644 index 26f944ee..00000000 --- a/truebit-implementation/node_modules/assert-plus/assert.js +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (c) 2012, Mark Cavage. All rights reserved. -// Copyright 2015 Joyent, Inc. - -var assert = require('assert'); -var Stream = require('stream').Stream; -var util = require('util'); - - -///--- Globals - -/* JSSTYLED */ -var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; - - -///--- Internal - -function _capitalize(str) { - return (str.charAt(0).toUpperCase() + str.slice(1)); -} - -function _toss(name, expected, oper, arg, actual) { - throw new assert.AssertionError({ - message: util.format('%s (%s) is required', name, expected), - actual: (actual === undefined) ? typeof (arg) : actual(arg), - expected: expected, - operator: oper || '===', - stackStartFunction: _toss.caller - }); -} - -function _getClass(arg) { - return (Object.prototype.toString.call(arg).slice(8, -1)); -} - -function noop() { - // Why even bother with asserts? -} - - -///--- Exports - -var types = { - bool: { - check: function (arg) { return typeof (arg) === 'boolean'; } - }, - func: { - check: function (arg) { return typeof (arg) === 'function'; } - }, - string: { - check: function (arg) { return typeof (arg) === 'string'; } - }, - object: { - check: function (arg) { - return typeof (arg) === 'object' && arg !== null; - } - }, - number: { - check: function (arg) { - return typeof (arg) === 'number' && !isNaN(arg); - } - }, - finite: { - check: function (arg) { - return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); - } - }, - buffer: { - check: function (arg) { return Buffer.isBuffer(arg); }, - operator: 'Buffer.isBuffer' - }, - array: { - check: function (arg) { return Array.isArray(arg); }, - operator: 'Array.isArray' - }, - stream: { - check: function (arg) { return arg instanceof Stream; }, - operator: 'instanceof', - actual: _getClass - }, - date: { - check: function (arg) { return arg instanceof Date; }, - operator: 'instanceof', - actual: _getClass - }, - regexp: { - check: function (arg) { return arg instanceof RegExp; }, - operator: 'instanceof', - actual: _getClass - }, - uuid: { - check: function (arg) { - return typeof (arg) === 'string' && UUID_REGEXP.test(arg); - }, - operator: 'isUUID' - } -}; - -function _setExports(ndebug) { - var keys = Object.keys(types); - var out; - - /* re-export standard assert */ - if (process.env.NODE_NDEBUG) { - out = noop; - } else { - out = function (arg, msg) { - if (!arg) { - _toss(msg, 'true', arg); - } - }; - } - - /* standard checks */ - keys.forEach(function (k) { - if (ndebug) { - out[k] = noop; - return; - } - var type = types[k]; - out[k] = function (arg, msg) { - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* optional checks */ - keys.forEach(function (k) { - var name = 'optional' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* arrayOf checks */ - keys.forEach(function (k) { - var name = 'arrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* optionalArrayOf checks */ - keys.forEach(function (k) { - var name = 'optionalArrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* re-export built-in assertions */ - Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - out[k] = assert[k]; - return; - } - if (ndebug) { - out[k] = noop; - return; - } - out[k] = assert[k]; - }); - - /* export ourselves (for unit tests _only_) */ - out._setExports = _setExports; - - return out; -} - -module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/truebit-implementation/node_modules/assert-plus/package.json b/truebit-implementation/node_modules/assert-plus/package.json deleted file mode 100644 index ec1488a5..00000000 --- a/truebit-implementation/node_modules/assert-plus/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "assert-plus@^1.0.0", - "_id": "assert-plus@1.0.0", - "_inBundle": false, - "_integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "_location": "/assert-plus", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "assert-plus@^1.0.0", - "name": "assert-plus", - "escapedName": "assert-plus", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/dashdash", - "/getpass", - "/http-signature", - "/jsprim", - "/sshpk", - "/verror" - ], - "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "_shasum": "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", - "_spec": "assert-plus@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/http-signature", - "author": { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - "bugs": { - "url": "https://github.com/mcavage/node-assert-plus/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Dave Eddy", - "email": "dave@daveeddy.com" - }, - { - "name": "Fred Kuo", - "email": "fred.kuo@joyent.com" - }, - { - "name": "Lars-Magnus Skog", - "email": "ralphtheninja@riseup.net" - }, - { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - { - "name": "Patrick Mooney", - "email": "pmooney@pfmooney.com" - }, - { - "name": "Rob Gulewich", - "email": "robert.gulewich@joyent.com" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Extra assertions on top of node's assert module", - "devDependencies": { - "faucet": "0.0.1", - "tape": "4.2.2" - }, - "engines": { - "node": ">=0.8" - }, - "homepage": "https://github.com/mcavage/node-assert-plus#readme", - "license": "MIT", - "main": "./assert.js", - "name": "assert-plus", - "optionalDependencies": {}, - "repository": { - "type": "git", - "url": "git+https://github.com/mcavage/node-assert-plus.git" - }, - "scripts": { - "test": "tape tests/*.js | ./node_modules/.bin/faucet" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/async-limiter/.travis.yml b/truebit-implementation/node_modules/async-limiter/.travis.yml deleted file mode 100644 index 6cf4a7ad..00000000 --- a/truebit-implementation/node_modules/async-limiter/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -node_js: - - "6" - - "node" -script: npm run travis -cache: - yarn: true diff --git a/truebit-implementation/node_modules/async-limiter/LICENSE b/truebit-implementation/node_modules/async-limiter/LICENSE deleted file mode 100644 index 9c91fb26..00000000 --- a/truebit-implementation/node_modules/async-limiter/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -The MIT License (MIT) -Copyright (c) 2017 Samuel Reed - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/async-limiter/coverage/coverage.json b/truebit-implementation/node_modules/async-limiter/coverage/coverage.json deleted file mode 100644 index 5b4a3584..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/samuelreed/git/forks/async-throttle/index.js":{"path":"/Users/samuelreed/git/forks/async-throttle/index.js","s":{"1":1,"2":7,"3":1,"4":6,"5":6,"6":6,"7":6,"8":6,"9":6,"10":1,"11":1,"12":3,"13":13,"14":13,"15":13,"16":1,"17":19,"18":1,"19":45,"20":6,"21":39,"22":13,"23":13,"24":13,"25":13,"26":39,"27":18,"28":6,"29":6,"30":1,"31":6,"32":6,"33":6,"34":1,"35":13,"36":13,"37":1},"b":{"1":[1,6],"2":[6,5],"3":[6,5],"4":[6,39],"5":[13,26],"6":[18,21],"7":[6,0]},"f":{"1":7,"2":3,"3":13,"4":19,"5":45,"6":6,"7":13},"fnMap":{"1":{"name":"Queue","line":3,"loc":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":24},"end":{"line":22,"column":41}}},"3":{"name":"(anonymous_3)","line":23,"loc":{"start":{"line":23,"column":28},"end":{"line":23,"column":39}}},"4":{"name":"(anonymous_4)","line":31,"loc":{"start":{"line":31,"column":7},"end":{"line":31,"column":18}}},"5":{"name":"(anonymous_5)","line":36,"loc":{"start":{"line":36,"column":23},"end":{"line":36,"column":34}}},"6":{"name":"(anonymous_6)","line":55,"loc":{"start":{"line":55,"column":25},"end":{"line":55,"column":38}}},"7":{"name":"done","line":62,"loc":{"start":{"line":62,"column":0},"end":{"line":62,"column":16}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":14,"column":1}},"2":{"start":{"line":4,"column":2},"end":{"line":6,"column":3}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":30}},"4":{"start":{"line":8,"column":2},"end":{"line":8,"column":26}},"5":{"start":{"line":9,"column":2},"end":{"line":9,"column":53}},"6":{"start":{"line":10,"column":2},"end":{"line":10,"column":19}},"7":{"start":{"line":11,"column":2},"end":{"line":11,"column":17}},"8":{"start":{"line":12,"column":2},"end":{"line":12,"column":16}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":31}},"10":{"start":{"line":16,"column":0},"end":{"line":20,"column":2}},"11":{"start":{"line":22,"column":0},"end":{"line":28,"column":3}},"12":{"start":{"line":23,"column":2},"end":{"line":27,"column":4}},"13":{"start":{"line":24,"column":4},"end":{"line":24,"column":75}},"14":{"start":{"line":25,"column":4},"end":{"line":25,"column":16}},"15":{"start":{"line":26,"column":4},"end":{"line":26,"column":24}},"16":{"start":{"line":30,"column":0},"end":{"line":34,"column":3}},"17":{"start":{"line":32,"column":4},"end":{"line":32,"column":43}},"18":{"start":{"line":36,"column":0},"end":{"line":53,"column":2}},"19":{"start":{"line":37,"column":2},"end":{"line":39,"column":3}},"20":{"start":{"line":38,"column":4},"end":{"line":38,"column":11}},"21":{"start":{"line":40,"column":2},"end":{"line":45,"column":3}},"22":{"start":{"line":41,"column":4},"end":{"line":41,"column":32}},"23":{"start":{"line":42,"column":4},"end":{"line":42,"column":19}},"24":{"start":{"line":43,"column":4},"end":{"line":43,"column":20}},"25":{"start":{"line":44,"column":4},"end":{"line":44,"column":16}},"26":{"start":{"line":47,"column":2},"end":{"line":52,"column":3}},"27":{"start":{"line":48,"column":4},"end":{"line":51,"column":5}},"28":{"start":{"line":49,"column":6},"end":{"line":49,"column":30}},"29":{"start":{"line":50,"column":6},"end":{"line":50,"column":27}},"30":{"start":{"line":55,"column":0},"end":{"line":60,"column":2}},"31":{"start":{"line":56,"column":2},"end":{"line":59,"column":3}},"32":{"start":{"line":57,"column":4},"end":{"line":57,"column":22}},"33":{"start":{"line":58,"column":4},"end":{"line":58,"column":16}},"34":{"start":{"line":62,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":63,"column":2},"end":{"line":63,"column":17}},"36":{"start":{"line":64,"column":2},"end":{"line":64,"column":14}},"37":{"start":{"line":67,"column":0},"end":{"line":67,"column":23}}},"branchMap":{"1":{"line":4,"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":4,"column":2}},{"start":{"line":4,"column":2},"end":{"line":4,"column":2}}]},"2":{"line":8,"type":"binary-expr","locations":[{"start":{"line":8,"column":12},"end":{"line":8,"column":19}},{"start":{"line":8,"column":23},"end":{"line":8,"column":25}}]},"3":{"line":9,"type":"binary-expr","locations":[{"start":{"line":9,"column":21},"end":{"line":9,"column":40}},{"start":{"line":9,"column":44},"end":{"line":9,"column":52}}]},"4":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":2},"end":{"line":37,"column":2}},{"start":{"line":37,"column":2},"end":{"line":37,"column":2}}]},"5":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":2},"end":{"line":40,"column":2}},{"start":{"line":40,"column":2},"end":{"line":40,"column":2}}]},"6":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":2},"end":{"line":47,"column":2}},{"start":{"line":47,"column":2},"end":{"line":47,"column":2}}]},"7":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":2},"end":{"line":56,"column":2}},{"start":{"line":56,"column":2},"end":{"line":56,"column":2}}]}}}} \ No newline at end of file diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html deleted file mode 100644 index 198882b4..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for async-throttle/ - - - - - - -
-

Code coverage report for async-throttle/

-

- Statements: 100% (37 / 37)      - Branches: 92.86% (13 / 14)      - Functions: 100% (7 / 7)      - Lines: 100% (37 / 37)      - Ignored: none      -

-
All files » async-throttle/
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
index.js100%(37 / 37)92.86%(13 / 14)100%(7 / 7)100%(37 / 37)
-
-
- - - - - - diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html deleted file mode 100644 index adc030fd..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - Code coverage report for async-throttle/index.js - - - - - - -
-

Code coverage report for async-throttle/index.js

-

- Statements: 100% (37 / 37)      - Branches: 92.86% (13 / 14)      - Functions: 100% (7 / 7)      - Lines: 100% (37 / 37)      - Ignored: none      -

-
All files » async-throttle/ » index.js
-
-
-

-
-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68  -  -1 -7 -1 -  -  -6 -6 -6 -6 -6 -6 -  -  -1 -  -  -  -  -  -1 -3 -13 -13 -13 -  -  -  -1 -  -19 -  -  -  -1 -45 -6 -  -39 -13 -13 -13 -13 -  -  -39 -18 -6 -6 -  -  -  -  -1 -6 -6 -6 -  -  -  -1 -13 -13 -  -  -1 - 
'use strict';
- 
-function Queue(options) {
-  if (!(this instanceof Queue)) {
-    return new Queue(options);
-  }
- 
-  options = options || {};
-  this.concurrency = options.concurrency || Infinity;
-  this.pending = 0;
-  this.jobs = [];
-  this.cbs = [];
-  this._done = done.bind(this);
-}
- 
-var arrayAddMethods = [
-  'push',
-  'unshift',
-  'splice'
-];
- 
-arrayAddMethods.forEach(function(method) {
-  Queue.prototype[method] = function() {
-    var methodResult = Array.prototype[method].apply(this.jobs, arguments);
-    this._run();
-    return methodResult;
-  };
-});
- 
-Object.defineProperty(Queue.prototype, 'length', {
-  get: function() {
-    return this.pending + this.jobs.length;
-  }
-});
- 
-Queue.prototype._run = function() {
-  if (this.pending === this.concurrency) {
-    return;
-  }
-  if (this.jobs.length) {
-    var job = this.jobs.shift();
-    this.pending++;
-    job(this._done);
-    this._run();
-  }
- 
-  if (this.pending === 0) {
-    while (this.cbs.length !== 0) {
-      var cb = this.cbs.pop();
-      process.nextTick(cb);
-    }
-  }
-};
- 
-Queue.prototype.onDone = function(cb) {
-  Eif (typeof cb === 'function') {
-    this.cbs.push(cb);
-    this._run();
-  }
-};
- 
-function done() {
-  this.pending--;
-  this._run();
-}
- 
-module.exports = Queue;
- 
- -
- - - - - - diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/base.css b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/base.css deleted file mode 100644 index a6a2f328..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/base.css +++ /dev/null @@ -1,182 +0,0 @@ -body, html { - margin:0; padding: 0; -} -body { - font-family: Helvetica Neue, Helvetica,Arial; - font-size: 10pt; -} -div.header, div.footer { - background: #eee; - padding: 1em; -} -div.header { - z-index: 100; - position: fixed; - top: 0; - border-bottom: 1px solid #666; - width: 100%; -} -div.footer { - border-top: 1px solid #666; -} -div.body { - margin-top: 10em; -} -div.meta { - font-size: 90%; - text-align: center; -} -h1, h2, h3 { - font-weight: normal; -} -h1 { - font-size: 12pt; -} -h2 { - font-size: 10pt; -} -pre { - font-family: Consolas, Menlo, Monaco, monospace; - margin: 0; - padding: 0; - line-height: 1.3; - font-size: 14px; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} - -div.path { font-size: 110%; } -div.path a:link, div.path a:visited { color: #000; } -table.coverage { border-collapse: collapse; margin:0; padding: 0 } - -table.coverage td { - margin: 0; - padding: 0; - color: #111; - vertical-align: top; -} -table.coverage td.line-count { - width: 50px; - text-align: right; - padding-right: 5px; -} -table.coverage td.line-coverage { - color: #777 !important; - text-align: right; - border-left: 1px solid #666; - border-right: 1px solid #666; -} - -table.coverage td.text { -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 40px; -} -table.coverage td span.cline-neutral { - background: #eee; -} -table.coverage td span.cline-yes { - background: #b5d592; - color: #999; -} -table.coverage td span.cline-no { - background: #fc8c84; -} - -.cstat-yes { color: #111; } -.cstat-no { background: #fc8c84; color: #111; } -.fstat-no { background: #ffc520; color: #111 !important; } -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -.missing-if-branch { - display: inline-block; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: black; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} - -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} - -.entity, .metric { font-weight: bold; } -.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; } -.metric small { font-size: 80%; font-weight: normal; color: #666; } - -div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; } -div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; } -div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; } -div.coverage-summary th.file { border-right: none !important; } -div.coverage-summary th.pic { border-left: none !important; text-align: right; } -div.coverage-summary th.pct { border-right: none !important; } -div.coverage-summary th.abs { border-left: none !important; text-align: right; } -div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; } -div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; } -div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; } -div.coverage-summary td.pic { min-width: 120px !important; } -div.coverage-summary a:link { text-decoration: none; color: #000; } -div.coverage-summary a:visited { text-decoration: none; color: #777; } -div.coverage-summary a:hover { text-decoration: underline; } -div.coverage-summary tfoot td { border-top: 1px solid #666; } - -div.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -div.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -div.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} - -.high { background: #b5d592 !important; } -.medium { background: #ffe87c !important; } -.low { background: #fc8c84 !important; } - -span.cover-fill, span.cover-empty { - display:inline-block; - border:1px solid #444; - background: white; - height: 12px; -} -span.cover-fill { - background: #ccc; - border-right: 1px solid #444; -} -span.cover-empty { - background: white; - border-left: none; -} -span.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/index.html b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/index.html deleted file mode 100644 index 782a1cff..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/index.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Code coverage report for All files - - - - - - -
-

Code coverage report for All files

-

- Statements: 100% (37 / 37)      - Branches: 92.86% (13 / 14)      - Functions: 100% (7 / 7)      - Lines: 100% (37 / 37)      - Ignored: none      -

-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
async-throttle/100%(37 / 37)92.86%(13 / 14)100%(7 / 7)100%(37 / 37)
-
-
- - - - - - diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/prettify.css b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7cd..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/prettify.js b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/prettify.js deleted file mode 100644 index ef51e038..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a6..00000000 Binary files a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png and /dev/null differ diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/sorter.js b/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/sorter.js deleted file mode 100644 index 6afb736c..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov-report/sorter.js +++ /dev/null @@ -1,156 +0,0 @@ -var addSorting = (function () { - "use strict"; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { return document.querySelector('.coverage-summary table'); } - // returns the thead element of the summary table - function getTableHeader() { return getTable().querySelector('thead tr'); } - // returns the tbody element of the summary table - function getTableBody() { return getTable().querySelector('tbody'); } - // returns the th element for nth column - function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - el = getNthColumn(i).querySelector('.sorter'); - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/truebit-implementation/node_modules/async-limiter/coverage/lcov.info b/truebit-implementation/node_modules/async-limiter/coverage/lcov.info deleted file mode 100644 index fbf36aab..00000000 --- a/truebit-implementation/node_modules/async-limiter/coverage/lcov.info +++ /dev/null @@ -1,74 +0,0 @@ -TN: -SF:/Users/samuelreed/git/forks/async-throttle/index.js -FN:3,Queue -FN:22,(anonymous_2) -FN:23,(anonymous_3) -FN:31,(anonymous_4) -FN:36,(anonymous_5) -FN:55,(anonymous_6) -FN:62,done -FNF:7 -FNH:7 -FNDA:7,Queue -FNDA:3,(anonymous_2) -FNDA:13,(anonymous_3) -FNDA:19,(anonymous_4) -FNDA:45,(anonymous_5) -FNDA:6,(anonymous_6) -FNDA:13,done -DA:3,1 -DA:4,7 -DA:5,1 -DA:8,6 -DA:9,6 -DA:10,6 -DA:11,6 -DA:12,6 -DA:13,6 -DA:16,1 -DA:22,1 -DA:23,3 -DA:24,13 -DA:25,13 -DA:26,13 -DA:30,1 -DA:32,19 -DA:36,1 -DA:37,45 -DA:38,6 -DA:40,39 -DA:41,13 -DA:42,13 -DA:43,13 -DA:44,13 -DA:47,39 -DA:48,18 -DA:49,6 -DA:50,6 -DA:55,1 -DA:56,6 -DA:57,6 -DA:58,6 -DA:62,1 -DA:63,13 -DA:64,13 -DA:67,1 -LF:37 -LH:37 -BRDA:4,1,0,1 -BRDA:4,1,1,6 -BRDA:8,2,0,6 -BRDA:8,2,1,5 -BRDA:9,3,0,6 -BRDA:9,3,1,5 -BRDA:37,4,0,6 -BRDA:37,4,1,39 -BRDA:40,5,0,13 -BRDA:40,5,1,26 -BRDA:47,6,0,18 -BRDA:47,6,1,21 -BRDA:56,7,0,6 -BRDA:56,7,1,0 -BRF:14 -BRH:13 -end_of_record diff --git a/truebit-implementation/node_modules/async-limiter/index.js b/truebit-implementation/node_modules/async-limiter/index.js deleted file mode 100644 index c9bd2f97..00000000 --- a/truebit-implementation/node_modules/async-limiter/index.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -function Queue(options) { - if (!(this instanceof Queue)) { - return new Queue(options); - } - - options = options || {}; - this.concurrency = options.concurrency || Infinity; - this.pending = 0; - this.jobs = []; - this.cbs = []; - this._done = done.bind(this); -} - -var arrayAddMethods = [ - 'push', - 'unshift', - 'splice' -]; - -arrayAddMethods.forEach(function(method) { - Queue.prototype[method] = function() { - var methodResult = Array.prototype[method].apply(this.jobs, arguments); - this._run(); - return methodResult; - }; -}); - -Object.defineProperty(Queue.prototype, 'length', { - get: function() { - return this.pending + this.jobs.length; - } -}); - -Queue.prototype._run = function() { - if (this.pending === this.concurrency) { - return; - } - if (this.jobs.length) { - var job = this.jobs.shift(); - this.pending++; - job(this._done); - this._run(); - } - - if (this.pending === 0) { - while (this.cbs.length !== 0) { - var cb = this.cbs.pop(); - process.nextTick(cb); - } - } -}; - -Queue.prototype.onDone = function(cb) { - if (typeof cb === 'function') { - this.cbs.push(cb); - this._run(); - } -}; - -function done() { - this.pending--; - this._run(); -} - -module.exports = Queue; diff --git a/truebit-implementation/node_modules/async-limiter/package.json b/truebit-implementation/node_modules/async-limiter/package.json deleted file mode 100644 index 0d1c63d0..00000000 --- a/truebit-implementation/node_modules/async-limiter/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "async-limiter@~1.0.0", - "_id": "async-limiter@1.0.0", - "_inBundle": false, - "_integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "_location": "/async-limiter", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "async-limiter@~1.0.0", - "name": "async-limiter", - "escapedName": "async-limiter", - "rawSpec": "~1.0.0", - "saveSpec": null, - "fetchSpec": "~1.0.0" - }, - "_requiredBy": [ - "/ws" - ], - "_resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "_shasum": "78faed8c3d074ab81f22b4e985d79e8738f720f8", - "_spec": "async-limiter@~1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ws", - "author": { - "name": "Samuel Reed" - }, - "bugs": { - "url": "https://github.com/strml/async-limiter/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "asynchronous function queue with adjustable concurrency", - "devDependencies": { - "coveralls": "^2.11.2", - "eslint": "^4.6.1", - "eslint-plugin-mocha": "^4.11.0", - "intelli-espower-loader": "^1.0.1", - "istanbul": "^0.3.2", - "mocha": "^3.5.2", - "power-assert": "^1.4.4" - }, - "homepage": "https://github.com/strml/async-limiter#readme", - "keywords": [ - "throttle", - "async", - "limiter", - "asynchronous", - "job", - "task", - "concurrency", - "concurrent" - ], - "license": "MIT", - "name": "async-limiter", - "repository": { - "type": "git", - "url": "git+https://github.com/strml/async-limiter.git" - }, - "scripts": { - "coverage": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls", - "example": "node example", - "lint": "eslint .", - "test": "mocha --R intelli-espower-loader test/", - "travis": "npm run lint && npm run coverage" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/async-limiter/readme.md b/truebit-implementation/node_modules/async-limiter/readme.md deleted file mode 100644 index dcf4932f..00000000 --- a/truebit-implementation/node_modules/async-limiter/readme.md +++ /dev/null @@ -1,132 +0,0 @@ -# Async-Limiter - -A module for limiting concurrent asynchronous actions in flight. Forked from [queue](https://github.com/jessetane/queue). - -[![npm](http://img.shields.io/npm/v/async-limiter.svg?style=flat-square)](http://www.npmjs.org/async-limiter) -[![tests](https://img.shields.io/travis/STRML/async-limiter.svg?style=flat-square&branch=master)](https://travis-ci.org/STRML/async-limiter) -[![coverage](https://img.shields.io/coveralls/STRML/async-limiter.svg?style=flat-square&branch=master)](https://coveralls.io/r/STRML/async-limiter) - -This module exports a class `Limiter` that implements some of the `Array` API. -Pass async functions (ones that accept a callback or return a promise) to an instance's additive array methods. - -## Motivation - -Certain functions, like `zlib`, have [undesirable behavior](https://github.com/nodejs/node/issues/8871#issuecomment-250915913) when -run at infinite concurrency. - -In this case, it is actually faster, and takes far less memory, to limit concurrency. - -This module should do the absolute minimum work necessary to queue up functions. PRs are welcome that would -make this module faster or lighter, but new functionality is not desired. - -Style should confirm to nodejs/node style. - -## Example - -``` javascript -var Limiter = require('async-limiter') - -var t = new Limiter({concurrency: 2}); -var results = [] - -// add jobs using the familiar Array API -t.push(function (cb) { - results.push('two') - cb() -}) - -t.push( - function (cb) { - results.push('four') - cb() - }, - function (cb) { - results.push('five') - cb() - } -) - -t.unshift(function (cb) { - results.push('one') - cb() -}) - -t.splice(2, 0, function (cb) { - results.push('three') - cb() -}) - -// Jobs run automatically. If you want a callback when all are done, -// call 'onDone()'. -t.onDone(function () { - console.log('all done:', results) -}) -``` - -## Zlib Example - -```js -const zlib = require('zlib'); -const Limiter = require('async-limiter'); - -const message = {some: "data"}; -const payload = new Buffer(JSON.stringify(message)); - -// Try with different concurrency values to see how this actually -// slows significantly with higher concurrency! -// -// 5: 1398.607ms -// 10: 1375.668ms -// Infinity: 4423.300ms -// -const t = new Limiter({concurrency: 5}); -function deflate(payload, cb) { - t.push(function(done) { - zlib.deflate(payload, function(err, buffer) { - done(); - cb(err, buffer); - }); - }); -} - -console.time('deflate'); -for(let i = 0; i < 30000; ++i) { - deflate(payload, function (err, buffer) {}); -} -q.onDone(function() { - console.timeEnd('deflate'); -}); -``` - -## Install - -`npm install async-limiter` - -## Test - -`npm test` - -## API - -### `var t = new Limiter([opts])` -Constructor. `opts` may contain inital values for: -* `q.concurrency` - -## Instance methods - -### `q.onDone(fn)` -`fn` will be called once and only once, when the queue is empty. - -## Instance methods mixed in from `Array` -Mozilla has docs on how these methods work [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array). -### `q.push(element1, ..., elementN)` -### `q.unshift(element1, ..., elementN)` -### `q.splice(index , howMany[, element1[, ...[, elementN]]])` - -## Properties -### `q.concurrency` -Max number of jobs the queue should process concurrently, defaults to `Infinity`. - -### `q.length` -Jobs pending + jobs to process (readonly). - diff --git a/truebit-implementation/node_modules/asynckit/LICENSE b/truebit-implementation/node_modules/asynckit/LICENSE deleted file mode 100644 index c9eca5dd..00000000 --- a/truebit-implementation/node_modules/asynckit/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Alex Indigo - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/asynckit/README.md b/truebit-implementation/node_modules/asynckit/README.md deleted file mode 100644 index ddcc7e6b..00000000 --- a/truebit-implementation/node_modules/asynckit/README.md +++ /dev/null @@ -1,233 +0,0 @@ -# asynckit [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit) - -Minimal async jobs utility library, with streams support. - -[![PhantomJS Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=browser&style=flat)](https://travis-ci.org/alexindigo/asynckit) -[![Linux Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=linux:0.12-6.x&style=flat)](https://travis-ci.org/alexindigo/asynckit) -[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/asynckit/v0.4.0.svg?label=windows:0.12-6.x&style=flat)](https://ci.appveyor.com/project/alexindigo/asynckit) - -[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/v0.4.0.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master) -[![Dependency Status](https://img.shields.io/david/alexindigo/asynckit/v0.4.0.svg?style=flat)](https://david-dm.org/alexindigo/asynckit) -[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/asynckit/badges/score.svg)](https://www.bithound.io/github/alexindigo/asynckit) - - - -AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects. -Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method. - -It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators. - -| compression | size | -| :----------------- | -------: | -| asynckit.js | 12.34 kB | -| asynckit.min.js | 4.11 kB | -| asynckit.min.js.gz | 1.47 kB | - - -## Install - -```sh -$ npm install --save asynckit -``` - -## Examples - -### Parallel Jobs - -Runs iterator over provided array in parallel. Stores output in the `result` array, -on the matching positions. In unlikely event of an error from one of the jobs, -will terminate rest of the active jobs (if abort function is provided) -and return error along with salvaged data to the main callback function. - -#### Input Array - -```javascript -var parallel = require('asynckit').parallel - , assert = require('assert') - ; - -var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] - , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] - , target = [] - ; - -parallel(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); -}); - -// async job accepts one element from the array -// and a callback function -function asyncJob(item, cb) -{ - // different delays (in ms) per item - var delay = item * 25; - - // pretend different jobs take different time to finish - // and not in consequential order - var timeoutId = setTimeout(function() { - target.push(item); - cb(null, item * 2); - }, delay); - - // allow to cancel "leftover" jobs upon error - // return function, invoking of which will abort this job - return clearTimeout.bind(null, timeoutId); -} -``` - -More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js). - -#### Input Object - -Also it supports named jobs, listed via object. - -```javascript -var parallel = require('asynckit/parallel') - , assert = require('assert') - ; - -var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } - , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } - , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] - , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ] - , target = [] - , keys = [] - ; - -parallel(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); - assert.deepEqual(keys, expectedKeys); -}); - -// supports full value, key, callback (shortcut) interface -function asyncJob(item, key, cb) -{ - // different delays (in ms) per item - var delay = item * 25; - - // pretend different jobs take different time to finish - // and not in consequential order - var timeoutId = setTimeout(function() { - keys.push(key); - target.push(item); - cb(null, item * 2); - }, delay); - - // allow to cancel "leftover" jobs upon error - // return function, invoking of which will abort this job - return clearTimeout.bind(null, timeoutId); -} -``` - -More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js). - -### Serial Jobs - -Runs iterator over provided array sequentially. Stores output in the `result` array, -on the matching positions. In unlikely event of an error from one of the jobs, -will not proceed to the rest of the items in the list -and return error along with salvaged data to the main callback function. - -#### Input Array - -```javascript -var serial = require('asynckit/serial') - , assert = require('assert') - ; - -var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] - , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] - , target = [] - ; - -serial(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); -}); - -// extended interface (item, key, callback) -// also supported for arrays -function asyncJob(item, key, cb) -{ - target.push(key); - - // it will be automatically made async - // even it iterator "returns" in the same event loop - cb(null, item * 2); -} -``` - -More examples could be found in [test/test-serial-array.js](test/test-serial-array.js). - -#### Input Object - -Also it supports named jobs, listed via object. - -```javascript -var serial = require('asynckit').serial - , assert = require('assert') - ; - -var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] - , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] - , target = [] - ; - -var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } - , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } - , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , target = [] - ; - - -serial(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); -}); - -// shortcut interface (item, callback) -// works for object as well as for the arrays -function asyncJob(item, cb) -{ - target.push(item); - - // it will be automatically made async - // even it iterator "returns" in the same event loop - cb(null, item * 2); -} -``` - -More examples could be found in [test/test-serial-object.js](test/test-serial-object.js). - -_Note: Since _object_ is an _unordered_ collection of properties, -it may produce unexpected results with sequential iterations. -Whenever order of the jobs' execution is important please use `serialOrdered` method._ - -### Ordered Serial Iterations - -TBD - -For example [compare-property](compare-property) package. - -### Streaming interface - -TBD - -## Want to Know More? - -More examples can be found in [test folder](test/). - -Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions. - -## License - -AsyncKit is licensed under the MIT license. diff --git a/truebit-implementation/node_modules/asynckit/bench.js b/truebit-implementation/node_modules/asynckit/bench.js deleted file mode 100644 index c612f1a5..00000000 --- a/truebit-implementation/node_modules/asynckit/bench.js +++ /dev/null @@ -1,76 +0,0 @@ -/* eslint no-console: "off" */ - -var asynckit = require('./') - , async = require('async') - , assert = require('assert') - , expected = 0 - ; - -var Benchmark = require('benchmark'); -var suite = new Benchmark.Suite; - -var source = []; -for (var z = 1; z < 100; z++) -{ - source.push(z); - expected += z; -} - -suite -// add tests - -.add('async.map', function(deferred) -{ - var total = 0; - - async.map(source, - function(i, cb) - { - setImmediate(function() - { - total += i; - cb(null, total); - }); - }, - function(err, result) - { - assert.ifError(err); - assert.equal(result[result.length - 1], expected); - deferred.resolve(); - }); -}, {'defer': true}) - - -.add('asynckit.parallel', function(deferred) -{ - var total = 0; - - asynckit.parallel(source, - function(i, cb) - { - setImmediate(function() - { - total += i; - cb(null, total); - }); - }, - function(err, result) - { - assert.ifError(err); - assert.equal(result[result.length - 1], expected); - deferred.resolve(); - }); -}, {'defer': true}) - - -// add listeners -.on('cycle', function(ev) -{ - console.log(String(ev.target)); -}) -.on('complete', function() -{ - console.log('Fastest is ' + this.filter('fastest').map('name')); -}) -// run async -.run({ 'async': true }); diff --git a/truebit-implementation/node_modules/asynckit/index.js b/truebit-implementation/node_modules/asynckit/index.js deleted file mode 100644 index 455f9454..00000000 --- a/truebit-implementation/node_modules/asynckit/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = -{ - parallel : require('./parallel.js'), - serial : require('./serial.js'), - serialOrdered : require('./serialOrdered.js') -}; diff --git a/truebit-implementation/node_modules/asynckit/lib/abort.js b/truebit-implementation/node_modules/asynckit/lib/abort.js deleted file mode 100644 index 114367e5..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/abort.js +++ /dev/null @@ -1,29 +0,0 @@ -// API -module.exports = abort; - -/** - * Aborts leftover active jobs - * - * @param {object} state - current state object - */ -function abort(state) -{ - Object.keys(state.jobs).forEach(clean.bind(state)); - - // reset leftover jobs - state.jobs = {}; -} - -/** - * Cleans up leftover job by invoking abort function for the provided job id - * - * @this state - * @param {string|number} key - job id to abort - */ -function clean(key) -{ - if (typeof this.jobs[key] == 'function') - { - this.jobs[key](); - } -} diff --git a/truebit-implementation/node_modules/asynckit/lib/async.js b/truebit-implementation/node_modules/asynckit/lib/async.js deleted file mode 100644 index 7f1288a4..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/async.js +++ /dev/null @@ -1,34 +0,0 @@ -var defer = require('./defer.js'); - -// API -module.exports = async; - -/** - * Runs provided callback asynchronously - * even if callback itself is not - * - * @param {function} callback - callback to invoke - * @returns {function} - augmented callback - */ -function async(callback) -{ - var isAsync = false; - - // check if async happened - defer(function() { isAsync = true; }); - - return function async_callback(err, result) - { - if (isAsync) - { - callback(err, result); - } - else - { - defer(function nextTick_callback() - { - callback(err, result); - }); - } - }; -} diff --git a/truebit-implementation/node_modules/asynckit/lib/defer.js b/truebit-implementation/node_modules/asynckit/lib/defer.js deleted file mode 100644 index b67110c7..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = defer; - -/** - * Runs provided function on next iteration of the event loop - * - * @param {function} fn - function to run - */ -function defer(fn) -{ - var nextTick = typeof setImmediate == 'function' - ? setImmediate - : ( - typeof process == 'object' && typeof process.nextTick == 'function' - ? process.nextTick - : null - ); - - if (nextTick) - { - nextTick(fn); - } - else - { - setTimeout(fn, 0); - } -} diff --git a/truebit-implementation/node_modules/asynckit/lib/iterate.js b/truebit-implementation/node_modules/asynckit/lib/iterate.js deleted file mode 100644 index 5d2839a5..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/iterate.js +++ /dev/null @@ -1,75 +0,0 @@ -var async = require('./async.js') - , abort = require('./abort.js') - ; - -// API -module.exports = iterate; - -/** - * Iterates over each job object - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {object} state - current job status - * @param {function} callback - invoked when all elements processed - */ -function iterate(list, iterator, state, callback) -{ - // store current index - var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; - - state.jobs[key] = runJob(iterator, key, list[key], function(error, output) - { - // don't repeat yourself - // skip secondary callbacks - if (!(key in state.jobs)) - { - return; - } - - // clean up jobs - delete state.jobs[key]; - - if (error) - { - // don't process rest of the results - // stop still active jobs - // and reset the list - abort(state); - } - else - { - state.results[key] = output; - } - - // return salvaged results - callback(error, state.results); - }); -} - -/** - * Runs iterator over provided job element - * - * @param {function} iterator - iterator to invoke - * @param {string|number} key - key/index of the element in the list of jobs - * @param {mixed} item - job description - * @param {function} callback - invoked after iterator is done with the job - * @returns {function|mixed} - job abort function or something else - */ -function runJob(iterator, key, item, callback) -{ - var aborter; - - // allow shortcut if iterator expects only two arguments - if (iterator.length == 2) - { - aborter = iterator(item, async(callback)); - } - // otherwise go with full three arguments - else - { - aborter = iterator(item, key, async(callback)); - } - - return aborter; -} diff --git a/truebit-implementation/node_modules/asynckit/lib/readable_asynckit.js b/truebit-implementation/node_modules/asynckit/lib/readable_asynckit.js deleted file mode 100644 index 78ad240f..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/readable_asynckit.js +++ /dev/null @@ -1,91 +0,0 @@ -var streamify = require('./streamify.js') - , defer = require('./defer.js') - ; - -// API -module.exports = ReadableAsyncKit; - -/** - * Base constructor for all streams - * used to hold properties/methods - */ -function ReadableAsyncKit() -{ - ReadableAsyncKit.super_.apply(this, arguments); - - // list of active jobs - this.jobs = {}; - - // add stream methods - this.destroy = destroy; - this._start = _start; - this._read = _read; -} - -/** - * Destroys readable stream, - * by aborting outstanding jobs - * - * @returns {void} - */ -function destroy() -{ - if (this.destroyed) - { - return; - } - - this.destroyed = true; - - if (typeof this.terminator == 'function') - { - this.terminator(); - } -} - -/** - * Starts provided jobs in async manner - * - * @private - */ -function _start() -{ - // first argument – runner function - var runner = arguments[0] - // take away first argument - , args = Array.prototype.slice.call(arguments, 1) - // second argument - input data - , input = args[0] - // last argument - result callback - , endCb = streamify.callback.call(this, args[args.length - 1]) - ; - - args[args.length - 1] = endCb; - // third argument - iterator - args[1] = streamify.iterator.call(this, args[1]); - - // allow time for proper setup - defer(function() - { - if (!this.destroyed) - { - this.terminator = runner.apply(null, args); - } - else - { - endCb(null, Array.isArray(input) ? [] : {}); - } - }.bind(this)); -} - - -/** - * Implement _read to comply with Readable streams - * Doesn't really make sense for flowing object mode - * - * @private - */ -function _read() -{ - -} diff --git a/truebit-implementation/node_modules/asynckit/lib/readable_parallel.js b/truebit-implementation/node_modules/asynckit/lib/readable_parallel.js deleted file mode 100644 index 5d2929f7..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/readable_parallel.js +++ /dev/null @@ -1,25 +0,0 @@ -var parallel = require('../parallel.js'); - -// API -module.exports = ReadableParallel; - -/** - * Streaming wrapper to `asynckit.parallel` - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {stream.Readable#} - */ -function ReadableParallel(list, iterator, callback) -{ - if (!(this instanceof ReadableParallel)) - { - return new ReadableParallel(list, iterator, callback); - } - - // turn on object mode - ReadableParallel.super_.call(this, {objectMode: true}); - - this._start(parallel, list, iterator, callback); -} diff --git a/truebit-implementation/node_modules/asynckit/lib/readable_serial.js b/truebit-implementation/node_modules/asynckit/lib/readable_serial.js deleted file mode 100644 index 78226982..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/readable_serial.js +++ /dev/null @@ -1,25 +0,0 @@ -var serial = require('../serial.js'); - -// API -module.exports = ReadableSerial; - -/** - * Streaming wrapper to `asynckit.serial` - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {stream.Readable#} - */ -function ReadableSerial(list, iterator, callback) -{ - if (!(this instanceof ReadableSerial)) - { - return new ReadableSerial(list, iterator, callback); - } - - // turn on object mode - ReadableSerial.super_.call(this, {objectMode: true}); - - this._start(serial, list, iterator, callback); -} diff --git a/truebit-implementation/node_modules/asynckit/lib/readable_serial_ordered.js b/truebit-implementation/node_modules/asynckit/lib/readable_serial_ordered.js deleted file mode 100644 index 3de89c47..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/readable_serial_ordered.js +++ /dev/null @@ -1,29 +0,0 @@ -var serialOrdered = require('../serialOrdered.js'); - -// API -module.exports = ReadableSerialOrdered; -// expose sort helpers -module.exports.ascending = serialOrdered.ascending; -module.exports.descending = serialOrdered.descending; - -/** - * Streaming wrapper to `asynckit.serialOrdered` - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} sortMethod - custom sort function - * @param {function} callback - invoked when all elements processed - * @returns {stream.Readable#} - */ -function ReadableSerialOrdered(list, iterator, sortMethod, callback) -{ - if (!(this instanceof ReadableSerialOrdered)) - { - return new ReadableSerialOrdered(list, iterator, sortMethod, callback); - } - - // turn on object mode - ReadableSerialOrdered.super_.call(this, {objectMode: true}); - - this._start(serialOrdered, list, iterator, sortMethod, callback); -} diff --git a/truebit-implementation/node_modules/asynckit/lib/state.js b/truebit-implementation/node_modules/asynckit/lib/state.js deleted file mode 100644 index cbea7ad8..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/state.js +++ /dev/null @@ -1,37 +0,0 @@ -// API -module.exports = state; - -/** - * Creates initial state object - * for iteration over list - * - * @param {array|object} list - list to iterate over - * @param {function|null} sortMethod - function to use for keys sort, - * or `null` to keep them as is - * @returns {object} - initial state object - */ -function state(list, sortMethod) -{ - var isNamedList = !Array.isArray(list) - , initState = - { - index : 0, - keyedList: isNamedList || sortMethod ? Object.keys(list) : null, - jobs : {}, - results : isNamedList ? {} : [], - size : isNamedList ? Object.keys(list).length : list.length - } - ; - - if (sortMethod) - { - // sort array keys based on it's values - // sort object's keys just on own merit - initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) - { - return sortMethod(list[a], list[b]); - }); - } - - return initState; -} diff --git a/truebit-implementation/node_modules/asynckit/lib/streamify.js b/truebit-implementation/node_modules/asynckit/lib/streamify.js deleted file mode 100644 index f56a1c92..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/streamify.js +++ /dev/null @@ -1,141 +0,0 @@ -var async = require('./async.js'); - -// API -module.exports = { - iterator: wrapIterator, - callback: wrapCallback -}; - -/** - * Wraps iterators with long signature - * - * @this ReadableAsyncKit# - * @param {function} iterator - function to wrap - * @returns {function} - wrapped function - */ -function wrapIterator(iterator) -{ - var stream = this; - - return function(item, key, cb) - { - var aborter - , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key)) - ; - - stream.jobs[key] = wrappedCb; - - // it's either shortcut (item, cb) - if (iterator.length == 2) - { - aborter = iterator(item, wrappedCb); - } - // or long format (item, key, cb) - else - { - aborter = iterator(item, key, wrappedCb); - } - - return aborter; - }; -} - -/** - * Wraps provided callback function - * allowing to execute snitch function before - * real callback - * - * @this ReadableAsyncKit# - * @param {function} callback - function to wrap - * @returns {function} - wrapped function - */ -function wrapCallback(callback) -{ - var stream = this; - - var wrapped = function(error, result) - { - return finisher.call(stream, error, result, callback); - }; - - return wrapped; -} - -/** - * Wraps provided iterator callback function - * makes sure snitch only called once, - * but passes secondary calls to the original callback - * - * @this ReadableAsyncKit# - * @param {function} callback - callback to wrap - * @param {number|string} key - iteration key - * @returns {function} wrapped callback - */ -function wrapIteratorCallback(callback, key) -{ - var stream = this; - - return function(error, output) - { - // don't repeat yourself - if (!(key in stream.jobs)) - { - callback(error, output); - return; - } - - // clean up jobs - delete stream.jobs[key]; - - return streamer.call(stream, error, {key: key, value: output}, callback); - }; -} - -/** - * Stream wrapper for iterator callback - * - * @this ReadableAsyncKit# - * @param {mixed} error - error response - * @param {mixed} output - iterator output - * @param {function} callback - callback that expects iterator results - */ -function streamer(error, output, callback) -{ - if (error && !this.error) - { - this.error = error; - this.pause(); - this.emit('error', error); - // send back value only, as expected - callback(error, output && output.value); - return; - } - - // stream stuff - this.push(output); - - // back to original track - // send back value only, as expected - callback(error, output && output.value); -} - -/** - * Stream wrapper for finishing callback - * - * @this ReadableAsyncKit# - * @param {mixed} error - error response - * @param {mixed} output - iterator output - * @param {function} callback - callback that expects final results - */ -function finisher(error, output, callback) -{ - // signal end of the stream - // only for successfully finished streams - if (!error) - { - this.push(null); - } - - // back to original track - callback(error, output); -} diff --git a/truebit-implementation/node_modules/asynckit/lib/terminator.js b/truebit-implementation/node_modules/asynckit/lib/terminator.js deleted file mode 100644 index d6eb9921..00000000 --- a/truebit-implementation/node_modules/asynckit/lib/terminator.js +++ /dev/null @@ -1,29 +0,0 @@ -var abort = require('./abort.js') - , async = require('./async.js') - ; - -// API -module.exports = terminator; - -/** - * Terminates jobs in the attached state context - * - * @this AsyncKitState# - * @param {function} callback - final callback to invoke after termination - */ -function terminator(callback) -{ - if (!Object.keys(this.jobs).length) - { - return; - } - - // fast forward iteration index - this.index = this.size; - - // abort jobs - abort(this); - - // send back results we have so far - async(callback)(null, this.results); -} diff --git a/truebit-implementation/node_modules/asynckit/package.json b/truebit-implementation/node_modules/asynckit/package.json deleted file mode 100644 index 1f1b1858..00000000 --- a/truebit-implementation/node_modules/asynckit/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "_from": "asynckit@^0.4.0", - "_id": "asynckit@0.4.0", - "_inBundle": false, - "_integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "_location": "/asynckit", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "asynckit@^0.4.0", - "name": "asynckit", - "escapedName": "asynckit", - "rawSpec": "^0.4.0", - "saveSpec": null, - "fetchSpec": "^0.4.0" - }, - "_requiredBy": [ - "/form-data" - ], - "_resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "_shasum": "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79", - "_spec": "asynckit@^0.4.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/form-data", - "author": { - "name": "Alex Indigo", - "email": "iam@alexindigo.com" - }, - "bugs": { - "url": "https://github.com/alexindigo/asynckit/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Minimal async jobs utility library, with streams support", - "devDependencies": { - "browserify": "^13.0.0", - "browserify-istanbul": "^2.0.0", - "coveralls": "^2.11.9", - "eslint": "^2.9.0", - "istanbul": "^0.4.3", - "obake": "^0.1.2", - "phantomjs-prebuilt": "^2.1.7", - "pre-commit": "^1.1.3", - "reamde": "^1.1.0", - "rimraf": "^2.5.2", - "size-table": "^0.2.0", - "tap-spec": "^4.1.1", - "tape": "^4.5.1" - }, - "homepage": "https://github.com/alexindigo/asynckit#readme", - "keywords": [ - "async", - "jobs", - "parallel", - "serial", - "iterator", - "array", - "object", - "stream", - "destroy", - "terminate", - "abort" - ], - "license": "MIT", - "main": "index.js", - "name": "asynckit", - "pre-commit": [ - "clean", - "lint", - "test", - "browser", - "report", - "size" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/alexindigo/asynckit.git" - }, - "scripts": { - "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec", - "clean": "rimraf coverage", - "debug": "tape test/test-*.js", - "lint": "eslint *.js lib/*.js test/*.js", - "report": "istanbul report", - "size": "browserify index.js | size-table asynckit", - "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec", - "win-test": "tape test/test-*.js" - }, - "version": "0.4.0" -} diff --git a/truebit-implementation/node_modules/asynckit/parallel.js b/truebit-implementation/node_modules/asynckit/parallel.js deleted file mode 100644 index 3c50344d..00000000 --- a/truebit-implementation/node_modules/asynckit/parallel.js +++ /dev/null @@ -1,43 +0,0 @@ -var iterate = require('./lib/iterate.js') - , initState = require('./lib/state.js') - , terminator = require('./lib/terminator.js') - ; - -// Public API -module.exports = parallel; - -/** - * Runs iterator over provided array elements in parallel - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {function} - jobs terminator - */ -function parallel(list, iterator, callback) -{ - var state = initState(list); - - while (state.index < (state['keyedList'] || list).length) - { - iterate(list, iterator, state, function(error, result) - { - if (error) - { - callback(error, result); - return; - } - - // looks like it's the last one - if (Object.keys(state.jobs).length === 0) - { - callback(null, state.results); - return; - } - }); - - state.index++; - } - - return terminator.bind(state, callback); -} diff --git a/truebit-implementation/node_modules/asynckit/serial.js b/truebit-implementation/node_modules/asynckit/serial.js deleted file mode 100644 index 6cd949a6..00000000 --- a/truebit-implementation/node_modules/asynckit/serial.js +++ /dev/null @@ -1,17 +0,0 @@ -var serialOrdered = require('./serialOrdered.js'); - -// Public API -module.exports = serial; - -/** - * Runs iterator over provided array elements in series - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {function} - jobs terminator - */ -function serial(list, iterator, callback) -{ - return serialOrdered(list, iterator, null, callback); -} diff --git a/truebit-implementation/node_modules/asynckit/serialOrdered.js b/truebit-implementation/node_modules/asynckit/serialOrdered.js deleted file mode 100644 index 607eafea..00000000 --- a/truebit-implementation/node_modules/asynckit/serialOrdered.js +++ /dev/null @@ -1,75 +0,0 @@ -var iterate = require('./lib/iterate.js') - , initState = require('./lib/state.js') - , terminator = require('./lib/terminator.js') - ; - -// Public API -module.exports = serialOrdered; -// sorting helpers -module.exports.ascending = ascending; -module.exports.descending = descending; - -/** - * Runs iterator over provided sorted array elements in series - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} sortMethod - custom sort function - * @param {function} callback - invoked when all elements processed - * @returns {function} - jobs terminator - */ -function serialOrdered(list, iterator, sortMethod, callback) -{ - var state = initState(list, sortMethod); - - iterate(list, iterator, state, function iteratorHandler(error, result) - { - if (error) - { - callback(error, result); - return; - } - - state.index++; - - // are we there yet? - if (state.index < (state['keyedList'] || list).length) - { - iterate(list, iterator, state, iteratorHandler); - return; - } - - // done here - callback(null, state.results); - }); - - return terminator.bind(state, callback); -} - -/* - * -- Sort methods - */ - -/** - * sort helper to sort array elements in ascending order - * - * @param {mixed} a - an item to compare - * @param {mixed} b - an item to compare - * @returns {number} - comparison result - */ -function ascending(a, b) -{ - return a < b ? -1 : a > b ? 1 : 0; -} - -/** - * sort helper to sort array elements in descending order - * - * @param {mixed} a - an item to compare - * @param {mixed} b - an item to compare - * @returns {number} - comparison result - */ -function descending(a, b) -{ - return -1 * ascending(a, b); -} diff --git a/truebit-implementation/node_modules/asynckit/stream.js b/truebit-implementation/node_modules/asynckit/stream.js deleted file mode 100644 index d43465f9..00000000 --- a/truebit-implementation/node_modules/asynckit/stream.js +++ /dev/null @@ -1,21 +0,0 @@ -var inherits = require('util').inherits - , Readable = require('stream').Readable - , ReadableAsyncKit = require('./lib/readable_asynckit.js') - , ReadableParallel = require('./lib/readable_parallel.js') - , ReadableSerial = require('./lib/readable_serial.js') - , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js') - ; - -// API -module.exports = -{ - parallel : ReadableParallel, - serial : ReadableSerial, - serialOrdered : ReadableSerialOrdered, -}; - -inherits(ReadableAsyncKit, Readable); - -inherits(ReadableParallel, ReadableAsyncKit); -inherits(ReadableSerial, ReadableAsyncKit); -inherits(ReadableSerialOrdered, ReadableAsyncKit); diff --git a/truebit-implementation/node_modules/aws-sign2/LICENSE b/truebit-implementation/node_modules/aws-sign2/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/truebit-implementation/node_modules/aws-sign2/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/truebit-implementation/node_modules/aws-sign2/README.md b/truebit-implementation/node_modules/aws-sign2/README.md deleted file mode 100644 index 763564e0..00000000 --- a/truebit-implementation/node_modules/aws-sign2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -aws-sign -======== - -AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module. diff --git a/truebit-implementation/node_modules/aws-sign2/index.js b/truebit-implementation/node_modules/aws-sign2/index.js deleted file mode 100644 index fb35f6db..00000000 --- a/truebit-implementation/node_modules/aws-sign2/index.js +++ /dev/null @@ -1,212 +0,0 @@ - -/*! - * Copyright 2010 LearnBoost - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Module dependencies. - */ - -var crypto = require('crypto') - , parse = require('url').parse - ; - -/** - * Valid keys. - */ - -var keys = - [ 'acl' - , 'location' - , 'logging' - , 'notification' - , 'partNumber' - , 'policy' - , 'requestPayment' - , 'torrent' - , 'uploadId' - , 'uploads' - , 'versionId' - , 'versioning' - , 'versions' - , 'website' - ] - -/** - * Return an "Authorization" header value with the given `options` - * in the form of "AWS :" - * - * @param {Object} options - * @return {String} - * @api private - */ - -function authorization (options) { - return 'AWS ' + options.key + ':' + sign(options) -} - -module.exports = authorization -module.exports.authorization = authorization - -/** - * Simple HMAC-SHA1 Wrapper - * - * @param {Object} options - * @return {String} - * @api private - */ - -function hmacSha1 (options) { - return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') -} - -module.exports.hmacSha1 = hmacSha1 - -/** - * Create a base64 sha1 HMAC for `options`. - * - * @param {Object} options - * @return {String} - * @api private - */ - -function sign (options) { - options.message = stringToSign(options) - return hmacSha1(options) -} -module.exports.sign = sign - -/** - * Create a base64 sha1 HMAC for `options`. - * - * Specifically to be used with S3 presigned URLs - * - * @param {Object} options - * @return {String} - * @api private - */ - -function signQuery (options) { - options.message = queryStringToSign(options) - return hmacSha1(options) -} -module.exports.signQuery= signQuery - -/** - * Return a string for sign() with the given `options`. - * - * Spec: - * - * \n - * \n - * \n - * \n - * [headers\n] - * - * - * @param {Object} options - * @return {String} - * @api private - */ - -function stringToSign (options) { - var headers = options.amazonHeaders || '' - if (headers) headers += '\n' - var r = - [ options.verb - , options.md5 - , options.contentType - , options.date ? options.date.toUTCString() : '' - , headers + options.resource - ] - return r.join('\n') -} -module.exports.stringToSign = stringToSign - -/** - * Return a string for sign() with the given `options`, but is meant exclusively - * for S3 presigned URLs - * - * Spec: - * - * \n - * - * - * @param {Object} options - * @return {String} - * @api private - */ - -function queryStringToSign (options){ - return 'GET\n\n\n' + options.date + '\n' + options.resource -} -module.exports.queryStringToSign = queryStringToSign - -/** - * Perform the following: - * - * - ignore non-amazon headers - * - lowercase fields - * - sort lexicographically - * - trim whitespace between ":" - * - join with newline - * - * @param {Object} headers - * @return {String} - * @api private - */ - -function canonicalizeHeaders (headers) { - var buf = [] - , fields = Object.keys(headers) - ; - for (var i = 0, len = fields.length; i < len; ++i) { - var field = fields[i] - , val = headers[field] - , field = field.toLowerCase() - ; - if (0 !== field.indexOf('x-amz')) continue - buf.push(field + ':' + val) - } - return buf.sort().join('\n') -} -module.exports.canonicalizeHeaders = canonicalizeHeaders - -/** - * Perform the following: - * - * - ignore non sub-resources - * - sort lexicographically - * - * @param {String} resource - * @return {String} - * @api private - */ - -function canonicalizeResource (resource) { - var url = parse(resource, true) - , path = url.pathname - , buf = [] - ; - - Object.keys(url.query).forEach(function(key){ - if (!~keys.indexOf(key)) return - var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) - buf.push(key + val) - }) - - return path + (buf.length ? '?' + buf.sort().join('&') : '') -} -module.exports.canonicalizeResource = canonicalizeResource diff --git a/truebit-implementation/node_modules/aws-sign2/package.json b/truebit-implementation/node_modules/aws-sign2/package.json deleted file mode 100644 index c1ccec21..00000000 --- a/truebit-implementation/node_modules/aws-sign2/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_from": "aws-sign2@~0.7.0", - "_id": "aws-sign2@0.7.0", - "_inBundle": false, - "_integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "_location": "/aws-sign2", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "aws-sign2@~0.7.0", - "name": "aws-sign2", - "escapedName": "aws-sign2", - "rawSpec": "~0.7.0", - "saveSpec": null, - "fetchSpec": "~0.7.0" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "_shasum": "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8", - "_spec": "aws-sign2@~0.7.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/aws-sign/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/mikeal/aws-sign#readme", - "license": "Apache-2.0", - "main": "index.js", - "name": "aws-sign2", - "optionalDependencies": {}, - "repository": { - "url": "git+https://github.com/mikeal/aws-sign.git" - }, - "version": "0.7.0" -} diff --git a/truebit-implementation/node_modules/aws4/.travis.yml b/truebit-implementation/node_modules/aws4/.travis.yml deleted file mode 100644 index 61d06340..00000000 --- a/truebit-implementation/node_modules/aws4/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "4.2" diff --git a/truebit-implementation/node_modules/aws4/LICENSE b/truebit-implementation/node_modules/aws4/LICENSE deleted file mode 100644 index 4f321e59..00000000 --- a/truebit-implementation/node_modules/aws4/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright 2013 Michael Hart (michael.hart.au@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/aws4/README.md b/truebit-implementation/node_modules/aws4/README.md deleted file mode 100644 index 6b002d02..00000000 --- a/truebit-implementation/node_modules/aws4/README.md +++ /dev/null @@ -1,523 +0,0 @@ -aws4 ----- - -[![Build Status](https://secure.travis-ci.org/mhart/aws4.png?branch=master)](http://travis-ci.org/mhart/aws4) - -A small utility to sign vanilla node.js http(s) request options using Amazon's -[AWS Signature Version 4](http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html). - -Can also be used [in the browser](./browser). - -This signature is supported by nearly all Amazon services, including -[S3](http://docs.aws.amazon.com/AmazonS3/latest/API/), -[EC2](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/), -[DynamoDB](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/API.html), -[Kinesis](http://docs.aws.amazon.com/kinesis/latest/APIReference/), -[Lambda](http://docs.aws.amazon.com/lambda/latest/dg/API_Reference.html), -[SQS](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/), -[SNS](http://docs.aws.amazon.com/sns/latest/api/), -[IAM](http://docs.aws.amazon.com/IAM/latest/APIReference/), -[STS](http://docs.aws.amazon.com/STS/latest/APIReference/), -[RDS](http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/), -[CloudWatch](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/), -[CloudWatch Logs](http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/), -[CodeDeploy](http://docs.aws.amazon.com/codedeploy/latest/APIReference/), -[CloudFront](http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/), -[CloudTrail](http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/), -[ElastiCache](http://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/), -[EMR](http://docs.aws.amazon.com/ElasticMapReduce/latest/API/), -[Glacier](http://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-api.html), -[CloudSearch](http://docs.aws.amazon.com/cloudsearch/latest/developerguide/APIReq.html), -[Elastic Load Balancing](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/), -[Elastic Transcoder](http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/api-reference.html), -[CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/), -[Elastic Beanstalk](http://docs.aws.amazon.com/elasticbeanstalk/latest/api/), -[Storage Gateway](http://docs.aws.amazon.com/storagegateway/latest/userguide/AWSStorageGatewayAPI.html), -[Data Pipeline](http://docs.aws.amazon.com/datapipeline/latest/APIReference/), -[Direct Connect](http://docs.aws.amazon.com/directconnect/latest/APIReference/), -[Redshift](http://docs.aws.amazon.com/redshift/latest/APIReference/), -[OpsWorks](http://docs.aws.amazon.com/opsworks/latest/APIReference/), -[SES](http://docs.aws.amazon.com/ses/latest/APIReference/), -[SWF](http://docs.aws.amazon.com/amazonswf/latest/apireference/), -[AutoScaling](http://docs.aws.amazon.com/AutoScaling/latest/APIReference/), -[Mobile Analytics](http://docs.aws.amazon.com/mobileanalytics/latest/ug/server-reference.html), -[Cognito Identity](http://docs.aws.amazon.com/cognitoidentity/latest/APIReference/), -[Cognito Sync](http://docs.aws.amazon.com/cognitosync/latest/APIReference/), -[Container Service](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/), -[AppStream](http://docs.aws.amazon.com/appstream/latest/developerguide/appstream-api-rest.html), -[Key Management Service](http://docs.aws.amazon.com/kms/latest/APIReference/), -[Config](http://docs.aws.amazon.com/config/latest/APIReference/), -[CloudHSM](http://docs.aws.amazon.com/cloudhsm/latest/dg/api-ref.html), -[Route53](http://docs.aws.amazon.com/Route53/latest/APIReference/requests-rest.html) and -[Route53 Domains](http://docs.aws.amazon.com/Route53/latest/APIReference/requests-rpc.html). - -Indeed, the only AWS services that *don't* support v4 as of 2014-12-30 are -[Import/Export](http://docs.aws.amazon.com/AWSImportExport/latest/DG/api-reference.html) and -[SimpleDB](http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/SDB_API.html) -(they only support [AWS Signature Version 2](https://github.com/mhart/aws2)). - -It also provides defaults for a number of core AWS headers and -request parameters, making it very easy to query AWS services, or -build out a fully-featured AWS library. - -Example -------- - -```javascript -var http = require('http'), - https = require('https'), - aws4 = require('aws4') - -// given an options object you could pass to http.request -var opts = {host: 'sqs.us-east-1.amazonaws.com', path: '/?Action=ListQueues'} - -// alternatively (as aws4 can infer the host): -opts = {service: 'sqs', region: 'us-east-1', path: '/?Action=ListQueues'} - -// alternatively (as us-east-1 is default): -opts = {service: 'sqs', path: '/?Action=ListQueues'} - -aws4.sign(opts) // assumes AWS credentials are available in process.env - -console.log(opts) -/* -{ - host: 'sqs.us-east-1.amazonaws.com', - path: '/?Action=ListQueues', - headers: { - Host: 'sqs.us-east-1.amazonaws.com', - 'X-Amz-Date': '20121226T061030Z', - Authorization: 'AWS4-HMAC-SHA256 Credential=ABCDEF/20121226/us-east-1/sqs/aws4_request, ...' - } -} -*/ - -// we can now use this to query AWS using the standard node.js http API -http.request(opts, function(res) { res.pipe(process.stdout) }).end() -/* - - -... -*/ -``` - -More options ------------- - -```javascript -// you can also pass AWS credentials in explicitly (otherwise taken from process.env) -aws4.sign(opts, {accessKeyId: '', secretAccessKey: ''}) - -// can also add the signature to query strings -aws4.sign({service: 's3', path: '/my-bucket?X-Amz-Expires=12345', signQuery: true}) - -// create a utility function to pipe to stdout (with https this time) -function request(o) { https.request(o, function(res) { res.pipe(process.stdout) }).end(o.body || '') } - -// aws4 can infer the HTTP method if a body is passed in -// method will be POST and Content-Type: 'application/x-www-form-urlencoded; charset=utf-8' -request(aws4.sign({service: 'iam', body: 'Action=ListGroups&Version=2010-05-08'})) -/* - -... -*/ - -// can specify any custom option or header as per usual -request(aws4.sign({ - service: 'dynamodb', - region: 'ap-southeast-2', - method: 'POST', - path: '/', - headers: { - 'Content-Type': 'application/x-amz-json-1.0', - 'X-Amz-Target': 'DynamoDB_20120810.ListTables' - }, - body: '{}' -})) -/* -{"TableNames":[]} -... -*/ - -// works with all other services that support Signature Version 4 - -request(aws4.sign({service: 's3', path: '/', signQuery: true})) -/* - -... -*/ - -request(aws4.sign({service: 'ec2', path: '/?Action=DescribeRegions&Version=2014-06-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'sns', path: '/?Action=ListTopics&Version=2010-03-31'})) -/* - -... -*/ - -request(aws4.sign({service: 'sts', path: '/?Action=GetSessionToken&Version=2011-06-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'cloudsearch', path: '/?Action=ListDomainNames&Version=2013-01-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'ses', path: '/?Action=ListIdentities&Version=2010-12-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'autoscaling', path: '/?Action=DescribeAutoScalingInstances&Version=2011-01-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticloadbalancing', path: '/?Action=DescribeLoadBalancers&Version=2012-06-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'cloudformation', path: '/?Action=ListStacks&Version=2010-05-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticbeanstalk', path: '/?Action=ListAvailableSolutionStacks&Version=2010-12-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'rds', path: '/?Action=DescribeDBInstances&Version=2012-09-17'})) -/* - -... -*/ - -request(aws4.sign({service: 'monitoring', path: '/?Action=ListMetrics&Version=2010-08-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'redshift', path: '/?Action=DescribeClusters&Version=2012-12-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'cloudfront', path: '/2014-05-31/distribution'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticache', path: '/?Action=DescribeCacheClusters&Version=2014-07-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticmapreduce', path: '/?Action=DescribeJobFlows&Version=2009-03-31'})) -/* - -... -*/ - -request(aws4.sign({service: 'route53', path: '/2013-04-01/hostedzone'})) -/* - -... -*/ - -request(aws4.sign({service: 'appstream', path: '/applications'})) -/* -{"_links":{"curie":[{"href":"http://docs.aws.amazon.com/appstream/latest/... -... -*/ - -request(aws4.sign({service: 'cognito-sync', path: '/identitypools'})) -/* -{"Count":0,"IdentityPoolUsages":[],"MaxResults":16,"NextToken":null} -... -*/ - -request(aws4.sign({service: 'elastictranscoder', path: '/2012-09-25/pipelines'})) -/* -{"NextPageToken":null,"Pipelines":[]} -... -*/ - -request(aws4.sign({service: 'lambda', path: '/2014-11-13/functions/'})) -/* -{"Functions":[],"NextMarker":null} -... -*/ - -request(aws4.sign({service: 'ecs', path: '/?Action=ListClusters&Version=2014-11-13'})) -/* - -... -*/ - -request(aws4.sign({service: 'glacier', path: '/-/vaults', headers: {'X-Amz-Glacier-Version': '2012-06-01'}})) -/* -{"Marker":null,"VaultList":[]} -... -*/ - -request(aws4.sign({service: 'storagegateway', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'StorageGateway_20120630.ListGateways' -}})) -/* -{"Gateways":[]} -... -*/ - -request(aws4.sign({service: 'datapipeline', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'DataPipeline.ListPipelines' -}})) -/* -{"hasMoreResults":false,"pipelineIdList":[]} -... -*/ - -request(aws4.sign({service: 'opsworks', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'OpsWorks_20130218.DescribeStacks' -}})) -/* -{"Stacks":[]} -... -*/ - -request(aws4.sign({service: 'route53domains', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'Route53Domains_v20140515.ListDomains' -}})) -/* -{"Domains":[]} -... -*/ - -request(aws4.sign({service: 'kinesis', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'Kinesis_20131202.ListStreams' -}})) -/* -{"HasMoreStreams":false,"StreamNames":[]} -... -*/ - -request(aws4.sign({service: 'cloudtrail', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'CloudTrail_20131101.DescribeTrails' -}})) -/* -{"trailList":[]} -... -*/ - -request(aws4.sign({service: 'logs', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'Logs_20140328.DescribeLogGroups' -}})) -/* -{"logGroups":[]} -... -*/ - -request(aws4.sign({service: 'codedeploy', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'CodeDeploy_20141006.ListApplications' -}})) -/* -{"applications":[]} -... -*/ - -request(aws4.sign({service: 'directconnect', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'OvertureService.DescribeConnections' -}})) -/* -{"connections":[]} -... -*/ - -request(aws4.sign({service: 'kms', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'TrentService.ListKeys' -}})) -/* -{"Keys":[],"Truncated":false} -... -*/ - -request(aws4.sign({service: 'config', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'StarlingDoveService.DescribeDeliveryChannels' -}})) -/* -{"DeliveryChannels":[]} -... -*/ - -request(aws4.sign({service: 'cloudhsm', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'CloudHsmFrontendService.ListAvailableZones' -}})) -/* -{"AZList":["us-east-1a","us-east-1b","us-east-1c"]} -... -*/ - -request(aws4.sign({ - service: 'swf', - body: '{"registrationStatus":"REGISTERED"}', - headers: { - 'Content-Type': 'application/x-amz-json-1.0', - 'X-Amz-Target': 'SimpleWorkflowService.ListDomains' - } -})) -/* -{"domainInfos":[]} -... -*/ - -request(aws4.sign({ - service: 'cognito-identity', - body: '{"MaxResults": 1}', - headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'AWSCognitoIdentityService.ListIdentityPools' - } -})) -/* -{"IdentityPools":[]} -... -*/ - -request(aws4.sign({ - service: 'mobileanalytics', - path: '/2014-06-05/events', - body: JSON.stringify({events:[{ - eventType: 'a', - timestamp: new Date().toISOString(), - session: {}, - }]}), - headers: { - 'Content-Type': 'application/json', - 'X-Amz-Client-Context': JSON.stringify({ - client: {client_id: 'a', app_title: 'a'}, - custom: {}, - env: {platform: 'a'}, - services: {}, - }), - } -})) -/* -(HTTP 202, empty response) -*/ - -// Generate CodeCommit Git access password -var signer = new aws4.RequestSigner({ - service: 'codecommit', - host: 'git-codecommit.us-east-1.amazonaws.com', - method: 'GIT', - path: '/v1/repos/MyAwesomeRepo', -}) -var password = signer.getDateTime() + 'Z' + signer.signature() -``` - -API ---- - -### aws4.sign(requestOptions, [credentials]) - -This calculates and populates the `Authorization` header of -`requestOptions`, and any other necessary AWS headers and/or request -options. Returns `requestOptions` as a convenience for chaining. - -`requestOptions` is an object holding the same options that the node.js -[http.request](http://nodejs.org/docs/latest/api/http.html#http_http_request_options_callback) -function takes. - -The following properties of `requestOptions` are used in the signing or -populated if they don't already exist: - -- `hostname` or `host` (will be determined from `service` and `region` if not given) -- `method` (will use `'GET'` if not given or `'POST'` if there is a `body`) -- `path` (will use `'/'` if not given) -- `body` (will use `''` if not given) -- `service` (will be calculated from `hostname` or `host` if not given) -- `region` (will be calculated from `hostname` or `host` or use `'us-east-1'` if not given) -- `headers['Host']` (will use `hostname` or `host` or be calculated if not given) -- `headers['Content-Type']` (will use `'application/x-www-form-urlencoded; charset=utf-8'` - if not given and there is a `body`) -- `headers['Date']` (used to calculate the signature date if given, otherwise `new Date` is used) - -Your AWS credentials (which can be found in your -[AWS console](https://portal.aws.amazon.com/gp/aws/securityCredentials)) -can be specified in one of two ways: - -- As the second argument, like this: - -```javascript -aws4.sign(requestOptions, { - secretAccessKey: "", - accessKeyId: "", - sessionToken: "" -}) -``` - -- From `process.env`, such as this: - -``` -export AWS_SECRET_ACCESS_KEY="" -export AWS_ACCESS_KEY_ID="" -export AWS_SESSION_TOKEN="" -``` - -(will also use `AWS_ACCESS_KEY` and `AWS_SECRET_KEY` if available) - -The `sessionToken` property and `AWS_SESSION_TOKEN` environment variable are optional for signing -with [IAM STS temporary credentials](http://docs.aws.amazon.com/STS/latest/UsingSTS/using-temp-creds.html). - -Installation ------------- - -With [npm](http://npmjs.org/) do: - -``` -npm install aws4 -``` - -Can also be used [in the browser](./browser). - -Thanks ------- - -Thanks to [@jed](https://github.com/jed) for his -[dynamo-client](https://github.com/jed/dynamo-client) lib where I first -committed and subsequently extracted this code. - -Also thanks to the -[official node.js AWS SDK](https://github.com/aws/aws-sdk-js) for giving -me a start on implementing the v4 signature. - diff --git a/truebit-implementation/node_modules/aws4/aws4.js b/truebit-implementation/node_modules/aws4/aws4.js deleted file mode 100644 index 124cd7ac..00000000 --- a/truebit-implementation/node_modules/aws4/aws4.js +++ /dev/null @@ -1,332 +0,0 @@ -var aws4 = exports, - url = require('url'), - querystring = require('querystring'), - crypto = require('crypto'), - lru = require('./lru'), - credentialsCache = lru(1000) - -// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html - -function hmac(key, string, encoding) { - return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding) -} - -function hash(string, encoding) { - return crypto.createHash('sha256').update(string, 'utf8').digest(encoding) -} - -// This function assumes the string has already been percent encoded -function encodeRfc3986(urlEncodedString) { - return urlEncodedString.replace(/[!'()*]/g, function(c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -// request: { path | body, [host], [method], [headers], [service], [region] } -// credentials: { accessKeyId, secretAccessKey, [sessionToken] } -function RequestSigner(request, credentials) { - - if (typeof request === 'string') request = url.parse(request) - - var headers = request.headers = (request.headers || {}), - hostParts = this.matchHost(request.hostname || request.host || headers.Host || headers.host) - - this.request = request - this.credentials = credentials || this.defaultCredentials() - - this.service = request.service || hostParts[0] || '' - this.region = request.region || hostParts[1] || 'us-east-1' - - // SES uses a different domain from the service name - if (this.service === 'email') this.service = 'ses' - - if (!request.method && request.body) - request.method = 'POST' - - if (!headers.Host && !headers.host) { - headers.Host = request.hostname || request.host || this.createHost() - - // If a port is specified explicitly, use it as is - if (request.port) - headers.Host += ':' + request.port - } - if (!request.hostname && !request.host) - request.hostname = headers.Host || headers.host - - this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT' -} - -RequestSigner.prototype.matchHost = function(host) { - var match = (host || '').match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com(\.cn)?$/) - var hostParts = (match || []).slice(1, 3) - - // ES's hostParts are sometimes the other way round, if the value that is expected - // to be region equals ‘es’ switch them back - // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com - if (hostParts[1] === 'es') - hostParts = hostParts.reverse() - - return hostParts -} - -// http://docs.aws.amazon.com/general/latest/gr/rande.html -RequestSigner.prototype.isSingleRegion = function() { - // Special case for S3 and SimpleDB in us-east-1 - if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true - - return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts'] - .indexOf(this.service) >= 0 -} - -RequestSigner.prototype.createHost = function() { - var region = this.isSingleRegion() ? '' : - (this.service === 's3' && this.region !== 'us-east-1' ? '-' : '.') + this.region, - service = this.service === 'ses' ? 'email' : this.service - return service + region + '.amazonaws.com' -} - -RequestSigner.prototype.prepareRequest = function() { - this.parsePath() - - var request = this.request, headers = request.headers, query - - if (request.signQuery) { - - this.parsedPath.query = query = this.parsedPath.query || {} - - if (this.credentials.sessionToken) - query['X-Amz-Security-Token'] = this.credentials.sessionToken - - if (this.service === 's3' && !query['X-Amz-Expires']) - query['X-Amz-Expires'] = 86400 - - if (query['X-Amz-Date']) - this.datetime = query['X-Amz-Date'] - else - query['X-Amz-Date'] = this.getDateTime() - - query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256' - query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString() - query['X-Amz-SignedHeaders'] = this.signedHeaders() - - } else { - - if (!request.doNotModifyHeaders && !this.isCodeCommitGit) { - if (request.body && !headers['Content-Type'] && !headers['content-type']) - headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8' - - if (request.body && !headers['Content-Length'] && !headers['content-length']) - headers['Content-Length'] = Buffer.byteLength(request.body) - - if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token']) - headers['X-Amz-Security-Token'] = this.credentials.sessionToken - - if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256']) - headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex') - - if (headers['X-Amz-Date'] || headers['x-amz-date']) - this.datetime = headers['X-Amz-Date'] || headers['x-amz-date'] - else - headers['X-Amz-Date'] = this.getDateTime() - } - - delete headers.Authorization - delete headers.authorization - } -} - -RequestSigner.prototype.sign = function() { - if (!this.parsedPath) this.prepareRequest() - - if (this.request.signQuery) { - this.parsedPath.query['X-Amz-Signature'] = this.signature() - } else { - this.request.headers.Authorization = this.authHeader() - } - - this.request.path = this.formatPath() - - return this.request -} - -RequestSigner.prototype.getDateTime = function() { - if (!this.datetime) { - var headers = this.request.headers, - date = new Date(headers.Date || headers.date || new Date) - - this.datetime = date.toISOString().replace(/[:\-]|\.\d{3}/g, '') - - // Remove the trailing 'Z' on the timestamp string for CodeCommit git access - if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1) - } - return this.datetime -} - -RequestSigner.prototype.getDate = function() { - return this.getDateTime().substr(0, 8) -} - -RequestSigner.prototype.authHeader = function() { - return [ - 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(), - 'SignedHeaders=' + this.signedHeaders(), - 'Signature=' + this.signature(), - ].join(', ') -} - -RequestSigner.prototype.signature = function() { - var date = this.getDate(), - cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(), - kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey) - if (!kCredentials) { - kDate = hmac('AWS4' + this.credentials.secretAccessKey, date) - kRegion = hmac(kDate, this.region) - kService = hmac(kRegion, this.service) - kCredentials = hmac(kService, 'aws4_request') - credentialsCache.set(cacheKey, kCredentials) - } - return hmac(kCredentials, this.stringToSign(), 'hex') -} - -RequestSigner.prototype.stringToSign = function() { - return [ - 'AWS4-HMAC-SHA256', - this.getDateTime(), - this.credentialString(), - hash(this.canonicalString(), 'hex'), - ].join('\n') -} - -RequestSigner.prototype.canonicalString = function() { - if (!this.parsedPath) this.prepareRequest() - - var pathStr = this.parsedPath.path, - query = this.parsedPath.query, - headers = this.request.headers, - queryStr = '', - normalizePath = this.service !== 's3', - decodePath = this.service === 's3' || this.request.doNotEncodePath, - decodeSlashesInPath = this.service === 's3', - firstValOnly = this.service === 's3', - bodyHash - - if (this.service === 's3' && this.request.signQuery) { - bodyHash = 'UNSIGNED-PAYLOAD' - } else if (this.isCodeCommitGit) { - bodyHash = '' - } else { - bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] || - hash(this.request.body || '', 'hex') - } - - if (query) { - queryStr = encodeRfc3986(querystring.stringify(Object.keys(query).sort().reduce(function(obj, key) { - if (!key) return obj - obj[key] = !Array.isArray(query[key]) ? query[key] : - (firstValOnly ? query[key][0] : query[key].slice().sort()) - return obj - }, {}))) - } - if (pathStr !== '/') { - if (normalizePath) pathStr = pathStr.replace(/\/{2,}/g, '/') - pathStr = pathStr.split('/').reduce(function(path, piece) { - if (normalizePath && piece === '..') { - path.pop() - } else if (!normalizePath || piece !== '.') { - if (decodePath) piece = decodeURIComponent(piece) - path.push(encodeRfc3986(encodeURIComponent(piece))) - } - return path - }, []).join('/') - if (pathStr[0] !== '/') pathStr = '/' + pathStr - if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/') - } - - return [ - this.request.method || 'GET', - pathStr, - queryStr, - this.canonicalHeaders() + '\n', - this.signedHeaders(), - bodyHash, - ].join('\n') -} - -RequestSigner.prototype.canonicalHeaders = function() { - var headers = this.request.headers - function trimAll(header) { - return header.toString().trim().replace(/\s+/g, ' ') - } - return Object.keys(headers) - .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 }) - .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) }) - .join('\n') -} - -RequestSigner.prototype.signedHeaders = function() { - return Object.keys(this.request.headers) - .map(function(key) { return key.toLowerCase() }) - .sort() - .join(';') -} - -RequestSigner.prototype.credentialString = function() { - return [ - this.getDate(), - this.region, - this.service, - 'aws4_request', - ].join('/') -} - -RequestSigner.prototype.defaultCredentials = function() { - var env = process.env - return { - accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY, - secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY, - sessionToken: env.AWS_SESSION_TOKEN, - } -} - -RequestSigner.prototype.parsePath = function() { - var path = this.request.path || '/', - queryIx = path.indexOf('?'), - query = null - - if (queryIx >= 0) { - query = querystring.parse(path.slice(queryIx + 1)) - path = path.slice(0, queryIx) - } - - // S3 doesn't always encode characters > 127 correctly and - // all services don't encode characters > 255 correctly - // So if there are non-reserved chars (and it's not already all % encoded), just encode them all - if (/[^0-9A-Za-z!'()*\-._~%/]/.test(path)) { - path = path.split('/').map(function(piece) { - return encodeURIComponent(decodeURIComponent(piece)) - }).join('/') - } - - this.parsedPath = { - path: path, - query: query, - } -} - -RequestSigner.prototype.formatPath = function() { - var path = this.parsedPath.path, - query = this.parsedPath.query - - if (!query) return path - - // Services don't support empty query string keys - if (query[''] != null) delete query[''] - - return path + '?' + encodeRfc3986(querystring.stringify(query)) -} - -aws4.RequestSigner = RequestSigner - -aws4.sign = function(request, credentials) { - return new RequestSigner(request, credentials).sign() -} diff --git a/truebit-implementation/node_modules/aws4/lru.js b/truebit-implementation/node_modules/aws4/lru.js deleted file mode 100644 index 333f66a4..00000000 --- a/truebit-implementation/node_modules/aws4/lru.js +++ /dev/null @@ -1,96 +0,0 @@ -module.exports = function(size) { - return new LruCache(size) -} - -function LruCache(size) { - this.capacity = size | 0 - this.map = Object.create(null) - this.list = new DoublyLinkedList() -} - -LruCache.prototype.get = function(key) { - var node = this.map[key] - if (node == null) return undefined - this.used(node) - return node.val -} - -LruCache.prototype.set = function(key, val) { - var node = this.map[key] - if (node != null) { - node.val = val - } else { - if (!this.capacity) this.prune() - if (!this.capacity) return false - node = new DoublyLinkedNode(key, val) - this.map[key] = node - this.capacity-- - } - this.used(node) - return true -} - -LruCache.prototype.used = function(node) { - this.list.moveToFront(node) -} - -LruCache.prototype.prune = function() { - var node = this.list.pop() - if (node != null) { - delete this.map[node.key] - this.capacity++ - } -} - - -function DoublyLinkedList() { - this.firstNode = null - this.lastNode = null -} - -DoublyLinkedList.prototype.moveToFront = function(node) { - if (this.firstNode == node) return - - this.remove(node) - - if (this.firstNode == null) { - this.firstNode = node - this.lastNode = node - node.prev = null - node.next = null - } else { - node.prev = null - node.next = this.firstNode - node.next.prev = node - this.firstNode = node - } -} - -DoublyLinkedList.prototype.pop = function() { - var lastNode = this.lastNode - if (lastNode != null) { - this.remove(lastNode) - } - return lastNode -} - -DoublyLinkedList.prototype.remove = function(node) { - if (this.firstNode == node) { - this.firstNode = node.next - } else if (node.prev != null) { - node.prev.next = node.next - } - if (this.lastNode == node) { - this.lastNode = node.prev - } else if (node.next != null) { - node.next.prev = node.prev - } -} - - -function DoublyLinkedNode(key, val) { - this.key = key - this.val = val - this.prev = null - this.next = null -} diff --git a/truebit-implementation/node_modules/aws4/package.json b/truebit-implementation/node_modules/aws4/package.json deleted file mode 100644 index 2c168208..00000000 --- a/truebit-implementation/node_modules/aws4/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_from": "aws4@^1.8.0", - "_id": "aws4@1.8.0", - "_inBundle": false, - "_integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "_location": "/aws4", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "aws4@^1.8.0", - "name": "aws4", - "escapedName": "aws4", - "rawSpec": "^1.8.0", - "saveSpec": null, - "fetchSpec": "^1.8.0" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "_shasum": "f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f", - "_spec": "aws4@^1.8.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Michael Hart", - "email": "michael.hart.au@gmail.com", - "url": "http://github.com/mhart" - }, - "bugs": { - "url": "https://github.com/mhart/aws4/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Signs and prepares requests using AWS Signature Version 4", - "devDependencies": { - "mocha": "^2.4.5", - "should": "^8.2.2" - }, - "homepage": "https://github.com/mhart/aws4#readme", - "keywords": [ - "amazon", - "aws", - "signature", - "s3", - "ec2", - "autoscaling", - "cloudformation", - "elasticloadbalancing", - "elb", - "elasticbeanstalk", - "cloudsearch", - "dynamodb", - "kinesis", - "lambda", - "glacier", - "sqs", - "sns", - "iam", - "sts", - "ses", - "swf", - "storagegateway", - "datapipeline", - "directconnect", - "redshift", - "opsworks", - "rds", - "monitoring", - "cloudtrail", - "cloudfront", - "codedeploy", - "elasticache", - "elasticmapreduce", - "elastictranscoder", - "emr", - "cloudwatch", - "mobileanalytics", - "cognitoidentity", - "cognitosync", - "cognito", - "containerservice", - "ecs", - "appstream", - "keymanagementservice", - "kms", - "config", - "cloudhsm", - "route53", - "route53domains", - "logs" - ], - "license": "MIT", - "main": "aws4.js", - "name": "aws4", - "repository": { - "type": "git", - "url": "git+https://github.com/mhart/aws4.git" - }, - "scripts": { - "test": "mocha ./test/fast.js ./test/slow.js -b -t 100s -R list" - }, - "version": "1.8.0" -} diff --git a/truebit-implementation/node_modules/balanced-match/.npmignore b/truebit-implementation/node_modules/balanced-match/.npmignore deleted file mode 100644 index ae5d8c36..00000000 --- a/truebit-implementation/node_modules/balanced-match/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -test -.gitignore -.travis.yml -Makefile -example.js diff --git a/truebit-implementation/node_modules/balanced-match/LICENSE.md b/truebit-implementation/node_modules/balanced-match/LICENSE.md deleted file mode 100644 index 2cdc8e41..00000000 --- a/truebit-implementation/node_modules/balanced-match/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/balanced-match/README.md b/truebit-implementation/node_modules/balanced-match/README.md deleted file mode 100644 index 08e918c0..00000000 --- a/truebit-implementation/node_modules/balanced-match/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# balanced-match - -Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! - -[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) -[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) - -[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) - -## Example - -Get the first matching pair of braces: - -```js -var balanced = require('balanced-match'); - -console.log(balanced('{', '}', 'pre{in{nested}}post')); -console.log(balanced('{', '}', 'pre{first}between{second}post')); -console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); -``` - -The matches are: - -```bash -$ node example.js -{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } -{ start: 3, - end: 9, - pre: 'pre', - body: 'first', - post: 'between{second}post' } -{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } -``` - -## API - -### var m = balanced(a, b, str) - -For the first non-nested matching pair of `a` and `b` in `str`, return an -object with those keys: - -* **start** the index of the first match of `a` -* **end** the index of the matching `b` -* **pre** the preamble, `a` and `b` not included -* **body** the match, `a` and `b` not included -* **post** the postscript, `a` and `b` not included - -If there's no match, `undefined` will be returned. - -If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. - -### var r = balanced.range(a, b, str) - -For the first non-nested matching pair of `a` and `b` in `str`, return an -array with indexes: `[ , ]`. - -If there's no match, `undefined` will be returned. - -If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. - -## Installation - -With [npm](https://npmjs.org) do: - -```bash -npm install balanced-match -``` - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/balanced-match/index.js b/truebit-implementation/node_modules/balanced-match/index.js deleted file mode 100644 index 1685a762..00000000 --- a/truebit-implementation/node_modules/balanced-match/index.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; -module.exports = balanced; -function balanced(a, b, str) { - if (a instanceof RegExp) a = maybeMatch(a, str); - if (b instanceof RegExp) b = maybeMatch(b, str); - - var r = range(a, b, str); - - return r && { - start: r[0], - end: r[1], - pre: str.slice(0, r[0]), - body: str.slice(r[0] + a.length, r[1]), - post: str.slice(r[1] + b.length) - }; -} - -function maybeMatch(reg, str) { - var m = str.match(reg); - return m ? m[0] : null; -} - -balanced.range = range; -function range(a, b, str) { - var begs, beg, left, right, result; - var ai = str.indexOf(a); - var bi = str.indexOf(b, ai + 1); - var i = ai; - - if (ai >= 0 && bi > 0) { - begs = []; - left = str.length; - - while (i >= 0 && !result) { - if (i == ai) { - begs.push(i); - ai = str.indexOf(a, i + 1); - } else if (begs.length == 1) { - result = [ begs.pop(), bi ]; - } else { - beg = begs.pop(); - if (beg < left) { - left = beg; - right = bi; - } - - bi = str.indexOf(b, i + 1); - } - - i = ai < bi && ai >= 0 ? ai : bi; - } - - if (begs.length) { - result = [ left, right ]; - } - } - - return result; -} diff --git a/truebit-implementation/node_modules/balanced-match/package.json b/truebit-implementation/node_modules/balanced-match/package.json deleted file mode 100644 index 951b8a6f..00000000 --- a/truebit-implementation/node_modules/balanced-match/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "balanced-match@^1.0.0", - "_id": "balanced-match@1.0.0", - "_inBundle": false, - "_integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "_location": "/balanced-match", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "balanced-match@^1.0.0", - "name": "balanced-match", - "escapedName": "balanced-match", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/brace-expansion" - ], - "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767", - "_spec": "balanced-match@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/brace-expansion", - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/balanced-match/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Match balanced character pairs, like \"{\" and \"}\"", - "devDependencies": { - "matcha": "^0.7.0", - "tape": "^4.6.0" - }, - "homepage": "https://github.com/juliangruber/balanced-match", - "keywords": [ - "match", - "regexp", - "test", - "balanced", - "parse" - ], - "license": "MIT", - "main": "index.js", - "name": "balanced-match", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/balanced-match.git" - }, - "scripts": { - "bench": "make bench", - "test": "make test" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "firefox/20..latest", - "firefox/nightly", - "chrome/25..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/base64-js/LICENSE b/truebit-implementation/node_modules/base64-js/LICENSE deleted file mode 100644 index 96d3f68a..00000000 --- a/truebit-implementation/node_modules/base64-js/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/base64-js/README.md b/truebit-implementation/node_modules/base64-js/README.md deleted file mode 100644 index 75325117..00000000 --- a/truebit-implementation/node_modules/base64-js/README.md +++ /dev/null @@ -1,34 +0,0 @@ -base64-js -========= - -`base64-js` does basic base64 encoding/decoding in pure JS. - -[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js) - -[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js) - -Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. - -Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. - -## install - -With [npm](https://npmjs.org) do: - -`npm install base64-js` and `var base64js = require('base64-js')` - -For use in web browsers do: - -`` - -## methods - -`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument. - -* `byteLength` - Takes a base64 string and returns length of byte array -* `toByteArray` - Takes a base64 string and returns a byte array -* `fromByteArray` - Takes a byte array and returns a base64 string - -## license - -MIT diff --git a/truebit-implementation/node_modules/base64-js/base64js.min.js b/truebit-implementation/node_modules/base64-js/base64js.min.js deleted file mode 100644 index 0c621d35..00000000 --- a/truebit-implementation/node_modules/base64-js/base64js.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(r){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=r()}else if(typeof define==="function"&&define.amd){define([],r)}else{var e;if(typeof window!=="undefined"){e=window}else if(typeof global!=="undefined"){e=global}else if(typeof self!=="undefined"){e=self}else{e=this}e.base64js=r()}})(function(){var r,e,n;return function(){function r(e,n,t){function o(f,i){if(!n[f]){if(!e[f]){var u="function"==typeof require&&require;if(!i&&u)return u(f,!0);if(a)return a(f,!0);var v=new Error("Cannot find module '"+f+"'");throw v.code="MODULE_NOT_FOUND",v}var d=n[f]={exports:{}};e[f][0].call(d.exports,function(r){var n=e[f][1][r];return o(n||r)},d,d.exports,r,e,n,t)}return n[f].exports}for(var a="function"==typeof require&&require,f=0;f0){throw new Error("Invalid string. Length must be a multiple of 4")}var n=r.indexOf("=");if(n===-1)n=e;var t=n===e?0:4-n%4;return[n,t]}function d(r){var e=v(r);var n=e[0];var t=e[1];return(n+t)*3/4-t}function c(r,e,n){return(e+n)*3/4-n}function h(r){var e;var n=v(r);var t=n[0];var f=n[1];var i=new a(c(r,t,f));var u=0;var d=f>0?t-4:t;for(var h=0;h>16&255;i[u++]=e>>8&255;i[u++]=e&255}if(f===2){e=o[r.charCodeAt(h)]<<2|o[r.charCodeAt(h+1)]>>4;i[u++]=e&255}if(f===1){e=o[r.charCodeAt(h)]<<10|o[r.charCodeAt(h+1)]<<4|o[r.charCodeAt(h+2)]>>2;i[u++]=e>>8&255;i[u++]=e&255}return i}function s(r){return t[r>>18&63]+t[r>>12&63]+t[r>>6&63]+t[r&63]}function l(r,e,n){var t;var o=[];for(var a=e;au?u:i+f))}if(o===1){e=r[n-1];a.push(t[e>>2]+t[e<<4&63]+"==")}else if(o===2){e=(r[n-2]<<8)+r[n-1];a.push(t[e>>10]+t[e>>4&63]+t[e<<2&63]+"=")}return a.join("")}},{}]},{},[])("/")}); diff --git a/truebit-implementation/node_modules/base64-js/index.js b/truebit-implementation/node_modules/base64-js/index.js deleted file mode 100644 index 44c67664..00000000 --- a/truebit-implementation/node_modules/base64-js/index.js +++ /dev/null @@ -1,151 +0,0 @@ -'use strict' - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -// Support decoding URL-safe base64 strings, as Node.js does. -// See: https://en.wikipedia.org/wiki/Base64#URL_applications -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function getLens (b64) { - var len = b64.length - - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) - - return [validLen, placeHoldersLen] -} - -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) - - var curByte = 0 - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - - for (var i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk( - uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) - )) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } - - return parts.join('') -} diff --git a/truebit-implementation/node_modules/base64-js/package.json b/truebit-implementation/node_modules/base64-js/package.json deleted file mode 100644 index b64a1534..00000000 --- a/truebit-implementation/node_modules/base64-js/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "_from": "base64-js@^1.0.2", - "_id": "base64-js@1.3.0", - "_inBundle": false, - "_integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "_location": "/base64-js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "base64-js@^1.0.2", - "name": "base64-js", - "escapedName": "base64-js", - "rawSpec": "^1.0.2", - "saveSpec": null, - "fetchSpec": "^1.0.2" - }, - "_requiredBy": [ - "/buffer" - ], - "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "_shasum": "cab1e6118f051095e58b5281aea8c1cd22bfc0e3", - "_spec": "base64-js@^1.0.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/buffer", - "author": { - "name": "T. Jameson Little", - "email": "t.jameson.little@gmail.com" - }, - "bugs": { - "url": "https://github.com/beatgammit/base64-js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Base64 encoding/decoding in pure JS", - "devDependencies": { - "benchmark": "^2.1.4", - "browserify": "^14.0.0", - "standard": "*", - "tape": "4.x", - "uglify-js": "^2.8.29" - }, - "files": [ - "test", - "index.js", - "base64js.min.js" - ], - "homepage": "https://github.com/beatgammit/base64-js", - "keywords": [ - "base64" - ], - "license": "MIT", - "main": "index.js", - "name": "base64-js", - "repository": { - "type": "git", - "url": "git://github.com/beatgammit/base64-js.git" - }, - "scripts": { - "build": "browserify -s base64js -r ./ | uglifyjs -m > base64js.min.js", - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "tape test/*.js" - }, - "version": "1.3.0" -} diff --git a/truebit-implementation/node_modules/base64-js/test/big-data.js b/truebit-implementation/node_modules/base64-js/test/big-data.js deleted file mode 100644 index 107e09ec..00000000 --- a/truebit-implementation/node_modules/base64-js/test/big-data.js +++ /dev/null @@ -1,25 +0,0 @@ -var test = require('tape') -var b64 = require('../') - -test('convert big data to base64', function (t) { - var b64str, arr, i, length - var big = new Uint8Array(64 * 1024 * 1024) - for (i = 0, length = big.length; i < length; ++i) { - big[i] = i % 256 - } - b64str = b64.fromByteArray(big) - arr = b64.toByteArray(b64str) - t.ok(equal(arr, big)) - t.equal(b64.byteLength(b64str), arr.length) - t.end() -}) - -function equal (a, b) { - var i - var length = a.length - if (length !== b.length) return false - for (i = 0; i < length; ++i) { - if (a[i] !== b[i]) return false - } - return true -} diff --git a/truebit-implementation/node_modules/base64-js/test/convert.js b/truebit-implementation/node_modules/base64-js/test/convert.js deleted file mode 100644 index 017a1332..00000000 --- a/truebit-implementation/node_modules/base64-js/test/convert.js +++ /dev/null @@ -1,88 +0,0 @@ -var test = require('tape') -var b64 = require('../') -var checks = [ - 'a', - 'aa', - 'aaa', - 'hi', - 'hi!', - 'hi!!', - 'sup', - 'sup?', - 'sup?!' -] - -test('convert to base64 and back', function (t) { - t.plan(checks.length * 2) - - for (var i = 0; i < checks.length; i++) { - var check = checks[i] - var b64Str, arr, str - - b64Str = b64.fromByteArray(map(check, function (char) { return char.charCodeAt(0) })) - - arr = b64.toByteArray(b64Str) - str = map(arr, function (byte) { return String.fromCharCode(byte) }).join('') - - t.equal(check, str, 'Checked ' + check) - t.equal(b64.byteLength(b64Str), arr.length, 'Checked length for ' + check) - } -}) - -var data = [ - [[0, 0, 0], 'AAAA'], - [[0, 0, 1], 'AAAB'], - [[0, 1, -1], 'AAH/'], - [[1, 1, 1], 'AQEB'], - [[0, -73, 23], 'ALcX'] -] - -test('convert known data to string', function (t) { - for (var i = 0; i < data.length; i++) { - var bytes = data[i][0] - var expected = data[i][1] - var actual = b64.fromByteArray(bytes) - t.equal(actual, expected, 'Ensure that ' + bytes + ' serialise to ' + expected) - } - t.end() -}) - -test('convert known data from string', function (t) { - for (var i = 0; i < data.length; i++) { - var expected = data[i][0] - var string = data[i][1] - var actual = b64.toByteArray(string) - t.ok(equal(actual, expected), 'Ensure that ' + string + ' deserialise to ' + expected) - var length = b64.byteLength(string) - t.equal(length, expected.length, 'Ensure that ' + string + ' has byte lentgh of ' + expected.length) - } - t.end() -}) - -function equal (a, b) { - var i - var length = a.length - if (length !== b.length) return false - for (i = 0; i < length; ++i) { - if ((a[i] & 0xFF) !== (b[i] & 0xFF)) return false - } - return true -} - -function map (arr, callback) { - var res = [] - var kValue, mappedValue - - for (var k = 0, len = arr.length; k < len; k++) { - if ((typeof arr === 'string' && !!arr.charAt(k))) { - kValue = arr.charAt(k) - mappedValue = callback(kValue, k, arr) - res[k] = mappedValue - } else if (typeof arr !== 'string' && k in arr) { - kValue = arr[k] - mappedValue = callback(kValue, k, arr) - res[k] = mappedValue - } - } - return res -} diff --git a/truebit-implementation/node_modules/base64-js/test/corrupt.js b/truebit-implementation/node_modules/base64-js/test/corrupt.js deleted file mode 100644 index 44c6e719..00000000 --- a/truebit-implementation/node_modules/base64-js/test/corrupt.js +++ /dev/null @@ -1,10 +0,0 @@ -var test = require('tape') -var b64 = require('../') - -test('padding bytes found inside base64 string', function (t) { - // See https://github.com/beatgammit/base64-js/issues/42 - var str = 'SQ==QU0=' - t.deepEqual(b64.toByteArray(str), new Uint8Array([73])) - t.equal(b64.byteLength(str), 1) - t.end() -}) diff --git a/truebit-implementation/node_modules/base64-js/test/url-safe.js b/truebit-implementation/node_modules/base64-js/test/url-safe.js deleted file mode 100644 index 4382e06c..00000000 --- a/truebit-implementation/node_modules/base64-js/test/url-safe.js +++ /dev/null @@ -1,24 +0,0 @@ -var test = require('tape') -var b64 = require('../') - -test('decode url-safe style base64 strings', function (t) { - var expected = [0xff, 0xff, 0xbe, 0xff, 0xef, 0xbf, 0xfb, 0xef, 0xff] - - var str = '//++/++/++//' - var actual = b64.toByteArray(str) - for (var i = 0; i < actual.length; i++) { - t.equal(actual[i], expected[i]) - } - - t.equal(b64.byteLength(str), actual.length) - - str = '__--_--_--__' - actual = b64.toByteArray(str) - for (i = 0; i < actual.length; i++) { - t.equal(actual[i], expected[i]) - } - - t.equal(b64.byteLength(str), actual.length) - - t.end() -}) diff --git a/truebit-implementation/node_modules/bcrypt-pbkdf/CONTRIBUTING.md b/truebit-implementation/node_modules/bcrypt-pbkdf/CONTRIBUTING.md deleted file mode 100644 index 401d34ed..00000000 --- a/truebit-implementation/node_modules/bcrypt-pbkdf/CONTRIBUTING.md +++ /dev/null @@ -1,13 +0,0 @@ -# Contributing - -This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new -changes. Anyone can submit changes. To get started, see the [cr.joyent.us user -guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). -This repo does not use GitHub pull requests. - -See the [Joyent Engineering -Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general -best practices expected in this repository. - -If you're changing something non-trivial or user-facing, you may want to submit -an issue first. diff --git a/truebit-implementation/node_modules/bcrypt-pbkdf/LICENSE b/truebit-implementation/node_modules/bcrypt-pbkdf/LICENSE deleted file mode 100644 index fc58d2ab..00000000 --- a/truebit-implementation/node_modules/bcrypt-pbkdf/LICENSE +++ /dev/null @@ -1,66 +0,0 @@ -The Blowfish portions are under the following license: - -Blowfish block cipher for OpenBSD -Copyright 1997 Niels Provos -All rights reserved. - -Implementation advice by David Mazieres . - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. 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. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - - - -The bcrypt_pbkdf portions are under the following license: - -Copyright (c) 2013 Ted Unangst - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -Performance improvements (Javascript-specific): - -Copyright 2016, Joyent Inc -Author: Alex Wilson - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/bcrypt-pbkdf/README.md b/truebit-implementation/node_modules/bcrypt-pbkdf/README.md deleted file mode 100644 index 7551f335..00000000 --- a/truebit-implementation/node_modules/bcrypt-pbkdf/README.md +++ /dev/null @@ -1,45 +0,0 @@ -Port of the OpenBSD `bcrypt_pbkdf` function to pure Javascript. `npm`-ified -version of [Devi Mandiri's port](https://github.com/devi/tmp/blob/master/js/bcrypt_pbkdf.js), -with some minor performance improvements. The code is copied verbatim (and -un-styled) from Devi's work. - -This product includes software developed by Niels Provos. - -## API - -### `bcrypt_pbkdf.pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds)` - -Derive a cryptographic key of arbitrary length from a given password and salt, -using the OpenBSD `bcrypt_pbkdf` function. This is a combination of Blowfish and -SHA-512. - -See [this article](http://www.tedunangst.com/flak/post/bcrypt-pbkdf) for -further information. - -Parameters: - - * `pass`, a Uint8Array of length `passlen` - * `passlen`, an integer Number - * `salt`, a Uint8Array of length `saltlen` - * `saltlen`, an integer Number - * `key`, a Uint8Array of length `keylen`, will be filled with output - * `keylen`, an integer Number - * `rounds`, an integer Number, number of rounds of the PBKDF to run - -### `bcrypt_pbkdf.hash(sha2pass, sha2salt, out)` - -Calculate a Blowfish hash, given SHA2-512 output of a password and salt. Used as -part of the inner round function in the PBKDF. - -Parameters: - - * `sha2pass`, a Uint8Array of length 64 - * `sha2salt`, a Uint8Array of length 64 - * `out`, a Uint8Array of length 32, will be filled with output - -## License - -This source form is a 1:1 port from the OpenBSD `blowfish.c` and `bcrypt_pbkdf.c`. -As a result, it retains the original copyright and license. The two files are -under slightly different (but compatible) licenses, and are here combined in -one file. For each of the full license texts see `LICENSE`. diff --git a/truebit-implementation/node_modules/bcrypt-pbkdf/index.js b/truebit-implementation/node_modules/bcrypt-pbkdf/index.js deleted file mode 100644 index b1b5ad4b..00000000 --- a/truebit-implementation/node_modules/bcrypt-pbkdf/index.js +++ /dev/null @@ -1,556 +0,0 @@ -'use strict'; - -var crypto_hash_sha512 = require('tweetnacl').lowlevel.crypto_hash; - -/* - * This file is a 1:1 port from the OpenBSD blowfish.c and bcrypt_pbkdf.c. As a - * result, it retains the original copyright and license. The two files are - * under slightly different (but compatible) licenses, and are here combined in - * one file. - * - * Credit for the actual porting work goes to: - * Devi Mandiri - */ - -/* - * The Blowfish portions are under the following license: - * - * Blowfish block cipher for OpenBSD - * Copyright 1997 Niels Provos - * All rights reserved. - * - * Implementation advice by David Mazieres . - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - -/* - * The bcrypt_pbkdf portions are under the following license: - * - * Copyright (c) 2013 Ted Unangst - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * Performance improvements (Javascript-specific): - * - * Copyright 2016, Joyent Inc - * Author: Alex Wilson - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -// Ported from OpenBSD bcrypt_pbkdf.c v1.9 - -var BLF_J = 0; - -var Blowfish = function() { - this.S = [ - new Uint32Array([ - 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, - 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, - 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, - 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, - 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, - 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, - 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, - 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, - 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, - 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, - 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, - 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, - 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, - 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, - 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, - 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, - 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, - 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, - 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, - 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, - 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, - 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, - 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, - 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, - 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, - 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, - 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, - 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, - 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, - 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, - 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, - 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, - 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, - 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, - 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, - 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, - 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, - 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, - 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, - 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, - 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, - 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, - 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, - 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, - 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, - 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, - 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, - 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, - 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, - 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, - 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, - 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, - 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, - 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, - 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, - 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, - 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, - 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, - 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, - 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, - 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, - 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, - 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, - 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a]), - new Uint32Array([ - 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, - 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, - 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, - 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, - 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, - 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, - 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, - 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, - 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, - 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, - 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, - 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, - 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, - 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, - 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, - 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, - 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, - 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, - 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, - 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, - 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, - 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, - 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, - 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, - 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, - 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, - 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, - 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, - 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, - 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, - 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, - 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, - 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, - 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, - 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, - 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, - 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, - 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, - 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, - 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, - 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, - 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, - 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, - 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, - 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, - 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, - 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, - 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, - 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, - 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, - 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, - 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, - 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, - 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, - 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, - 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, - 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, - 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, - 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, - 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, - 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, - 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, - 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, - 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7]), - new Uint32Array([ - 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, - 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, - 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, - 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, - 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, - 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, - 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, - 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, - 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, - 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, - 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, - 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, - 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, - 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, - 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, - 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, - 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, - 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, - 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, - 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, - 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, - 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, - 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, - 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, - 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, - 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, - 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, - 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, - 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, - 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, - 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, - 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, - 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, - 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, - 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, - 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, - 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, - 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, - 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, - 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, - 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, - 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, - 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, - 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, - 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, - 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, - 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, - 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, - 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, - 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, - 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, - 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, - 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, - 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, - 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, - 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, - 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, - 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, - 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, - 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, - 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, - 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, - 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, - 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0]), - new Uint32Array([ - 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, - 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, - 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, - 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, - 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, - 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, - 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, - 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, - 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, - 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, - 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, - 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, - 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, - 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, - 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, - 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, - 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, - 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, - 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, - 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, - 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, - 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, - 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, - 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, - 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, - 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, - 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, - 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, - 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, - 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, - 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, - 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, - 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, - 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, - 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, - 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, - 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, - 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, - 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, - 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, - 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, - 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, - 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, - 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, - 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, - 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, - 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, - 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, - 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, - 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, - 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, - 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, - 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, - 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, - 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, - 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, - 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, - 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, - 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, - 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, - 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, - 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, - 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, - 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6]) - ]; - this.P = new Uint32Array([ - 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, - 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, - 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, - 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, - 0x9216d5d9, 0x8979fb1b]); -}; - -function F(S, x8, i) { - return (((S[0][x8[i+3]] + - S[1][x8[i+2]]) ^ - S[2][x8[i+1]]) + - S[3][x8[i]]); -}; - -Blowfish.prototype.encipher = function(x, x8) { - if (x8 === undefined) { - x8 = new Uint8Array(x.buffer); - if (x.byteOffset !== 0) - x8 = x8.subarray(x.byteOffset); - } - x[0] ^= this.P[0]; - for (var i = 1; i < 16; i += 2) { - x[1] ^= F(this.S, x8, 0) ^ this.P[i]; - x[0] ^= F(this.S, x8, 4) ^ this.P[i+1]; - } - var t = x[0]; - x[0] = x[1] ^ this.P[17]; - x[1] = t; -}; - -Blowfish.prototype.decipher = function(x) { - var x8 = new Uint8Array(x.buffer); - if (x.byteOffset !== 0) - x8 = x8.subarray(x.byteOffset); - x[0] ^= this.P[17]; - for (var i = 16; i > 0; i -= 2) { - x[1] ^= F(this.S, x8, 0) ^ this.P[i]; - x[0] ^= F(this.S, x8, 4) ^ this.P[i-1]; - } - var t = x[0]; - x[0] = x[1] ^ this.P[0]; - x[1] = t; -}; - -function stream2word(data, databytes){ - var i, temp = 0; - for (i = 0; i < 4; i++, BLF_J++) { - if (BLF_J >= databytes) BLF_J = 0; - temp = (temp << 8) | data[BLF_J]; - } - return temp; -}; - -Blowfish.prototype.expand0state = function(key, keybytes) { - var d = new Uint32Array(2), i, k; - var d8 = new Uint8Array(d.buffer); - - for (i = 0, BLF_J = 0; i < 18; i++) { - this.P[i] ^= stream2word(key, keybytes); - } - BLF_J = 0; - - for (i = 0; i < 18; i += 2) { - this.encipher(d, d8); - this.P[i] = d[0]; - this.P[i+1] = d[1]; - } - - for (i = 0; i < 4; i++) { - for (k = 0; k < 256; k += 2) { - this.encipher(d, d8); - this.S[i][k] = d[0]; - this.S[i][k+1] = d[1]; - } - } -}; - -Blowfish.prototype.expandstate = function(data, databytes, key, keybytes) { - var d = new Uint32Array(2), i, k; - - for (i = 0, BLF_J = 0; i < 18; i++) { - this.P[i] ^= stream2word(key, keybytes); - } - - for (i = 0, BLF_J = 0; i < 18; i += 2) { - d[0] ^= stream2word(data, databytes); - d[1] ^= stream2word(data, databytes); - this.encipher(d); - this.P[i] = d[0]; - this.P[i+1] = d[1]; - } - - for (i = 0; i < 4; i++) { - for (k = 0; k < 256; k += 2) { - d[0] ^= stream2word(data, databytes); - d[1] ^= stream2word(data, databytes); - this.encipher(d); - this.S[i][k] = d[0]; - this.S[i][k+1] = d[1]; - } - } - BLF_J = 0; -}; - -Blowfish.prototype.enc = function(data, blocks) { - for (var i = 0; i < blocks; i++) { - this.encipher(data.subarray(i*2)); - } -}; - -Blowfish.prototype.dec = function(data, blocks) { - for (var i = 0; i < blocks; i++) { - this.decipher(data.subarray(i*2)); - } -}; - -var BCRYPT_BLOCKS = 8, - BCRYPT_HASHSIZE = 32; - -function bcrypt_hash(sha2pass, sha2salt, out) { - var state = new Blowfish(), - cdata = new Uint32Array(BCRYPT_BLOCKS), i, - ciphertext = new Uint8Array([79,120,121,99,104,114,111,109,97,116,105, - 99,66,108,111,119,102,105,115,104,83,119,97,116,68,121,110,97,109, - 105,116,101]); //"OxychromaticBlowfishSwatDynamite" - - state.expandstate(sha2salt, 64, sha2pass, 64); - for (i = 0; i < 64; i++) { - state.expand0state(sha2salt, 64); - state.expand0state(sha2pass, 64); - } - - for (i = 0; i < BCRYPT_BLOCKS; i++) - cdata[i] = stream2word(ciphertext, ciphertext.byteLength); - for (i = 0; i < 64; i++) - state.enc(cdata, cdata.byteLength / 8); - - for (i = 0; i < BCRYPT_BLOCKS; i++) { - out[4*i+3] = cdata[i] >>> 24; - out[4*i+2] = cdata[i] >>> 16; - out[4*i+1] = cdata[i] >>> 8; - out[4*i+0] = cdata[i]; - } -}; - -function bcrypt_pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds) { - var sha2pass = new Uint8Array(64), - sha2salt = new Uint8Array(64), - out = new Uint8Array(BCRYPT_HASHSIZE), - tmpout = new Uint8Array(BCRYPT_HASHSIZE), - countsalt = new Uint8Array(saltlen+4), - i, j, amt, stride, dest, count, - origkeylen = keylen; - - if (rounds < 1) - return -1; - if (passlen === 0 || saltlen === 0 || keylen === 0 || - keylen > (out.byteLength * out.byteLength) || saltlen > (1<<20)) - return -1; - - stride = Math.floor((keylen + out.byteLength - 1) / out.byteLength); - amt = Math.floor((keylen + stride - 1) / stride); - - for (i = 0; i < saltlen; i++) - countsalt[i] = salt[i]; - - crypto_hash_sha512(sha2pass, pass, passlen); - - for (count = 1; keylen > 0; count++) { - countsalt[saltlen+0] = count >>> 24; - countsalt[saltlen+1] = count >>> 16; - countsalt[saltlen+2] = count >>> 8; - countsalt[saltlen+3] = count; - - crypto_hash_sha512(sha2salt, countsalt, saltlen + 4); - bcrypt_hash(sha2pass, sha2salt, tmpout); - for (i = out.byteLength; i--;) - out[i] = tmpout[i]; - - for (i = 1; i < rounds; i++) { - crypto_hash_sha512(sha2salt, tmpout, tmpout.byteLength); - bcrypt_hash(sha2pass, sha2salt, tmpout); - for (j = 0; j < out.byteLength; j++) - out[j] ^= tmpout[j]; - } - - amt = Math.min(amt, keylen); - for (i = 0; i < amt; i++) { - dest = i * stride + (count - 1); - if (dest >= origkeylen) - break; - key[dest] = out[i]; - } - keylen -= i; - } - - return 0; -}; - -module.exports = { - BLOCKS: BCRYPT_BLOCKS, - HASHSIZE: BCRYPT_HASHSIZE, - hash: bcrypt_hash, - pbkdf: bcrypt_pbkdf -}; diff --git a/truebit-implementation/node_modules/bcrypt-pbkdf/package.json b/truebit-implementation/node_modules/bcrypt-pbkdf/package.json deleted file mode 100644 index 08d1ce99..00000000 --- a/truebit-implementation/node_modules/bcrypt-pbkdf/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "_from": "bcrypt-pbkdf@^1.0.0", - "_id": "bcrypt-pbkdf@1.0.2", - "_inBundle": false, - "_integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "_location": "/bcrypt-pbkdf", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "bcrypt-pbkdf@^1.0.0", - "name": "bcrypt-pbkdf", - "escapedName": "bcrypt-pbkdf", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "_shasum": "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e", - "_spec": "bcrypt-pbkdf@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/sshpk", - "bugs": { - "url": "https://github.com/joyent/node-bcrypt-pbkdf/issues" - }, - "bundleDependencies": false, - "dependencies": { - "tweetnacl": "^0.14.3" - }, - "deprecated": false, - "description": "Port of the OpenBSD bcrypt_pbkdf function to pure JS", - "devDependencies": {}, - "homepage": "https://github.com/joyent/node-bcrypt-pbkdf#readme", - "license": "BSD-3-Clause", - "main": "index.js", - "name": "bcrypt-pbkdf", - "repository": { - "type": "git", - "url": "git://github.com/joyent/node-bcrypt-pbkdf.git" - }, - "version": "1.0.2" -} diff --git a/truebit-implementation/node_modules/bl/.jshintrc b/truebit-implementation/node_modules/bl/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/truebit-implementation/node_modules/bl/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": false - , "passfail": false -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/bl/.travis.yml b/truebit-implementation/node_modules/bl/.travis.yml deleted file mode 100644 index 373bb4a7..00000000 --- a/truebit-implementation/node_modules/bl/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -sudo: false -language: node_js -node_js: - - '0.10' - - '0.12' - - '4' - - '6' - - '8' - - '9' -branches: - only: - - master -notifications: - email: - - rod@vagg.org - - matteo.collina@gmail.com diff --git a/truebit-implementation/node_modules/bl/LICENSE.md b/truebit-implementation/node_modules/bl/LICENSE.md deleted file mode 100644 index ff35a347..00000000 --- a/truebit-implementation/node_modules/bl/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2013-2016 bl contributors ----------------------------------- - -*bl contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/bl/README.md b/truebit-implementation/node_modules/bl/README.md deleted file mode 100644 index 9eebd88b..00000000 --- a/truebit-implementation/node_modules/bl/README.md +++ /dev/null @@ -1,208 +0,0 @@ -# bl *(BufferList)* - -[![Build Status](https://travis-ci.org/rvagg/bl.svg?branch=master)](https://travis-ci.org/rvagg/bl) - -**A Node.js Buffer list collector, reader and streamer thingy.** - -[![NPM](https://nodei.co/npm/bl.png?downloads=true&downloadRank=true)](https://nodei.co/npm/bl/) -[![NPM](https://nodei.co/npm-dl/bl.png?months=6&height=3)](https://nodei.co/npm/bl/) - -**bl** is a storage object for collections of Node Buffers, exposing them with the main Buffer readable API. Also works as a duplex stream so you can collect buffers from a stream that emits them and emit buffers to a stream that consumes them! - -The original buffers are kept intact and copies are only done as necessary. Any reads that require the use of a single original buffer will return a slice of that buffer only (which references the same memory as the original buffer). Reads that span buffers perform concatenation as required and return the results transparently. - -```js -const BufferList = require('bl') - -var bl = new BufferList() -bl.append(new Buffer('abcd')) -bl.append(new Buffer('efg')) -bl.append('hi') // bl will also accept & convert Strings -bl.append(new Buffer('j')) -bl.append(new Buffer([ 0x3, 0x4 ])) - -console.log(bl.length) // 12 - -console.log(bl.slice(0, 10).toString('ascii')) // 'abcdefghij' -console.log(bl.slice(3, 10).toString('ascii')) // 'defghij' -console.log(bl.slice(3, 6).toString('ascii')) // 'def' -console.log(bl.slice(3, 8).toString('ascii')) // 'defgh' -console.log(bl.slice(5, 10).toString('ascii')) // 'fghij' - -// or just use toString! -console.log(bl.toString()) // 'abcdefghij\u0003\u0004' -console.log(bl.toString('ascii', 3, 8)) // 'defgh' -console.log(bl.toString('ascii', 5, 10)) // 'fghij' - -// other standard Buffer readables -console.log(bl.readUInt16BE(10)) // 0x0304 -console.log(bl.readUInt16LE(10)) // 0x0403 -``` - -Give it a callback in the constructor and use it just like **[concat-stream](https://github.com/maxogden/node-concat-stream)**: - -```js -const bl = require('bl') - , fs = require('fs') - -fs.createReadStream('README.md') - .pipe(bl(function (err, data) { // note 'new' isn't strictly required - // `data` is a complete Buffer object containing the full data - console.log(data.toString()) - })) -``` - -Note that when you use the *callback* method like this, the resulting `data` parameter is a concatenation of all `Buffer` objects in the list. If you want to avoid the overhead of this concatenation (in cases of extreme performance consciousness), then avoid the *callback* method and just listen to `'end'` instead, like a standard Stream. - -Or to fetch a URL using [hyperquest](https://github.com/substack/hyperquest) (should work with [request](http://github.com/mikeal/request) and even plain Node http too!): -```js -const hyperquest = require('hyperquest') - , bl = require('bl') - , url = 'https://raw.github.com/rvagg/bl/master/README.md' - -hyperquest(url).pipe(bl(function (err, data) { - console.log(data.toString()) -})) -``` - -Or, use it as a readable stream to recompose a list of Buffers to an output source: - -```js -const BufferList = require('bl') - , fs = require('fs') - -var bl = new BufferList() -bl.append(new Buffer('abcd')) -bl.append(new Buffer('efg')) -bl.append(new Buffer('hi')) -bl.append(new Buffer('j')) - -bl.pipe(fs.createWriteStream('gibberish.txt')) -``` - -## API - - * new BufferList([ callback ]) - * bl.length - * bl.append(buffer) - * bl.get(index) - * bl.slice([ start[, end ] ]) - * bl.shallowSlice([ start[, end ] ]) - * bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) - * bl.duplicate() - * bl.consume(bytes) - * bl.toString([encoding, [ start, [ end ]]]) - * bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() - * Streams - --------------------------------------------------------- - -### new BufferList([ callback | Buffer | Buffer array | BufferList | BufferList array | String ]) -The constructor takes an optional callback, if supplied, the callback will be called with an error argument followed by a reference to the **bl** instance, when `bl.end()` is called (i.e. from a piped stream). This is a convenient method of collecting the entire contents of a stream, particularly when the stream is *chunky*, such as a network stream. - -Normally, no arguments are required for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` object. - -`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with: - -```js -var bl = require('bl') -var myinstance = bl() - -// equivalent to: - -var BufferList = require('bl') -var myinstance = new BufferList() -``` - --------------------------------------------------------- - -### bl.length -Get the length of the list in bytes. This is the sum of the lengths of all of the buffers contained in the list, minus any initial offset for a semi-consumed buffer at the beginning. Should accurately represent the total number of bytes that can be read from the list. - --------------------------------------------------------- - -### bl.append(Buffer | Buffer array | BufferList | BufferList array | String) -`append(buffer)` adds an additional buffer or BufferList to the internal list. `this` is returned so it can be chained. - --------------------------------------------------------- - -### bl.get(index) -`get()` will return the byte at the specified index. - --------------------------------------------------------- - -### bl.slice([ start, [ end ] ]) -`slice()` returns a new `Buffer` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively. - -If the requested range spans a single internal buffer then a slice of that buffer will be returned which shares the original memory range of that Buffer. If the range spans multiple buffers then copy operations will likely occur to give you a uniform Buffer. - --------------------------------------------------------- - -### bl.shallowSlice([ start, [ end ] ]) -`shallowSlice()` returns a new `BufferList` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively. - -No copies will be performed. All buffers in the result share memory with the original list. - --------------------------------------------------------- - -### bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) -`copy()` copies the content of the list in the `dest` buffer, starting from `destStart` and containing the bytes within the range specified with `srcStart` to `srcEnd`. `destStart`, `start` and `end` are optional and will default to the beginning of the `dest` buffer, and the beginning and end of the list respectively. - --------------------------------------------------------- - -### bl.duplicate() -`duplicate()` performs a **shallow-copy** of the list. The internal Buffers remains the same, so if you change the underlying Buffers, the change will be reflected in both the original and the duplicate. This method is needed if you want to call `consume()` or `pipe()` and still keep the original list.Example: - -```js -var bl = new BufferList() - -bl.append('hello') -bl.append(' world') -bl.append('\n') - -bl.duplicate().pipe(process.stdout, { end: false }) - -console.log(bl.toString()) -``` - --------------------------------------------------------- - -### bl.consume(bytes) -`consume()` will shift bytes *off the start of the list*. The number of bytes consumed don't need to line up with the sizes of the internal Buffers—initial offsets will be calculated accordingly in order to give you a consistent view of the data. - --------------------------------------------------------- - -### bl.toString([encoding, [ start, [ end ]]]) -`toString()` will return a string representation of the buffer. The optional `start` and `end` arguments are passed on to `slice()`, while the `encoding` is passed on to `toString()` of the resulting Buffer. See the [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end) documentation for more information. - --------------------------------------------------------- - -### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() - -All of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently. - -See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work. - --------------------------------------------------------- - -### Streams -**bl** is a Node **[Duplex Stream](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_duplex)**, so it can be read from and written to like a standard Node stream. You can also `pipe()` to and from a **bl** instance. - --------------------------------------------------------- - -## Contributors - -**bl** is brought to you by the following hackers: - - * [Rod Vagg](https://github.com/rvagg) - * [Matteo Collina](https://github.com/mcollina) - * [Jarett Cruger](https://github.com/jcrugzz) - -======= - - -## License & copyright - -Copyright (c) 2013-2016 bl contributors (listed above). - -bl is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/truebit-implementation/node_modules/bl/bl.js b/truebit-implementation/node_modules/bl/bl.js deleted file mode 100644 index db536f34..00000000 --- a/truebit-implementation/node_modules/bl/bl.js +++ /dev/null @@ -1,281 +0,0 @@ -var DuplexStream = require('readable-stream/duplex') - , util = require('util') - , Buffer = require('safe-buffer').Buffer - - -function BufferList (callback) { - if (!(this instanceof BufferList)) - return new BufferList(callback) - - this._bufs = [] - this.length = 0 - - if (typeof callback == 'function') { - this._callback = callback - - var piper = function piper (err) { - if (this._callback) { - this._callback(err) - this._callback = null - } - }.bind(this) - - this.on('pipe', function onPipe (src) { - src.on('error', piper) - }) - this.on('unpipe', function onUnpipe (src) { - src.removeListener('error', piper) - }) - } else { - this.append(callback) - } - - DuplexStream.call(this) -} - - -util.inherits(BufferList, DuplexStream) - - -BufferList.prototype._offset = function _offset (offset) { - var tot = 0, i = 0, _t - if (offset === 0) return [ 0, 0 ] - for (; i < this._bufs.length; i++) { - _t = tot + this._bufs[i].length - if (offset < _t || i == this._bufs.length - 1) - return [ i, offset - tot ] - tot = _t - } -} - - -BufferList.prototype.append = function append (buf) { - var i = 0 - - if (Buffer.isBuffer(buf)) { - this._appendBuffer(buf); - } else if (Array.isArray(buf)) { - for (; i < buf.length; i++) - this.append(buf[i]) - } else if (buf instanceof BufferList) { - // unwrap argument into individual BufferLists - for (; i < buf._bufs.length; i++) - this.append(buf._bufs[i]) - } else if (buf != null) { - // coerce number arguments to strings, since Buffer(number) does - // uninitialized memory allocation - if (typeof buf == 'number') - buf = buf.toString() - - this._appendBuffer(Buffer.from(buf)); - } - - return this -} - - -BufferList.prototype._appendBuffer = function appendBuffer (buf) { - this._bufs.push(buf) - this.length += buf.length -} - - -BufferList.prototype._write = function _write (buf, encoding, callback) { - this._appendBuffer(buf) - - if (typeof callback == 'function') - callback() -} - - -BufferList.prototype._read = function _read (size) { - if (!this.length) - return this.push(null) - - size = Math.min(size, this.length) - this.push(this.slice(0, size)) - this.consume(size) -} - - -BufferList.prototype.end = function end (chunk) { - DuplexStream.prototype.end.call(this, chunk) - - if (this._callback) { - this._callback(null, this.slice()) - this._callback = null - } -} - - -BufferList.prototype.get = function get (index) { - return this.slice(index, index + 1)[0] -} - - -BufferList.prototype.slice = function slice (start, end) { - if (typeof start == 'number' && start < 0) - start += this.length - if (typeof end == 'number' && end < 0) - end += this.length - return this.copy(null, 0, start, end) -} - - -BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) { - if (typeof srcStart != 'number' || srcStart < 0) - srcStart = 0 - if (typeof srcEnd != 'number' || srcEnd > this.length) - srcEnd = this.length - if (srcStart >= this.length) - return dst || Buffer.alloc(0) - if (srcEnd <= 0) - return dst || Buffer.alloc(0) - - var copy = !!dst - , off = this._offset(srcStart) - , len = srcEnd - srcStart - , bytes = len - , bufoff = (copy && dstStart) || 0 - , start = off[1] - , l - , i - - // copy/slice everything - if (srcStart === 0 && srcEnd == this.length) { - if (!copy) { // slice, but full concat if multiple buffers - return this._bufs.length === 1 - ? this._bufs[0] - : Buffer.concat(this._bufs, this.length) - } - - // copy, need to copy individual buffers - for (i = 0; i < this._bufs.length; i++) { - this._bufs[i].copy(dst, bufoff) - bufoff += this._bufs[i].length - } - - return dst - } - - // easy, cheap case where it's a subset of one of the buffers - if (bytes <= this._bufs[off[0]].length - start) { - return copy - ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) - : this._bufs[off[0]].slice(start, start + bytes) - } - - if (!copy) // a slice, we need something to copy in to - dst = Buffer.allocUnsafe(len) - - for (i = off[0]; i < this._bufs.length; i++) { - l = this._bufs[i].length - start - - if (bytes > l) { - this._bufs[i].copy(dst, bufoff, start) - } else { - this._bufs[i].copy(dst, bufoff, start, start + bytes) - break - } - - bufoff += l - bytes -= l - - if (start) - start = 0 - } - - return dst -} - -BufferList.prototype.shallowSlice = function shallowSlice (start, end) { - start = start || 0 - end = end || this.length - - if (start < 0) - start += this.length - if (end < 0) - end += this.length - - var startOffset = this._offset(start) - , endOffset = this._offset(end) - , buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1) - - if (endOffset[1] == 0) - buffers.pop() - else - buffers[buffers.length-1] = buffers[buffers.length-1].slice(0, endOffset[1]) - - if (startOffset[1] != 0) - buffers[0] = buffers[0].slice(startOffset[1]) - - return new BufferList(buffers) -} - -BufferList.prototype.toString = function toString (encoding, start, end) { - return this.slice(start, end).toString(encoding) -} - -BufferList.prototype.consume = function consume (bytes) { - while (this._bufs.length) { - if (bytes >= this._bufs[0].length) { - bytes -= this._bufs[0].length - this.length -= this._bufs[0].length - this._bufs.shift() - } else { - this._bufs[0] = this._bufs[0].slice(bytes) - this.length -= bytes - break - } - } - return this -} - - -BufferList.prototype.duplicate = function duplicate () { - var i = 0 - , copy = new BufferList() - - for (; i < this._bufs.length; i++) - copy.append(this._bufs[i]) - - return copy -} - - -BufferList.prototype.destroy = function destroy () { - this._bufs.length = 0 - this.length = 0 - this.push(null) -} - - -;(function () { - var methods = { - 'readDoubleBE' : 8 - , 'readDoubleLE' : 8 - , 'readFloatBE' : 4 - , 'readFloatLE' : 4 - , 'readInt32BE' : 4 - , 'readInt32LE' : 4 - , 'readUInt32BE' : 4 - , 'readUInt32LE' : 4 - , 'readInt16BE' : 2 - , 'readInt16LE' : 2 - , 'readUInt16BE' : 2 - , 'readUInt16LE' : 2 - , 'readInt8' : 1 - , 'readUInt8' : 1 - } - - for (var m in methods) { - (function (m) { - BufferList.prototype[m] = function (offset) { - return this.slice(offset, offset + methods[m])[m](0) - } - }(m)) - } -}()) - - -module.exports = BufferList diff --git a/truebit-implementation/node_modules/bl/package.json b/truebit-implementation/node_modules/bl/package.json deleted file mode 100644 index e739fec2..00000000 --- a/truebit-implementation/node_modules/bl/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "bl@^1.0.0", - "_id": "bl@1.2.2", - "_inBundle": false, - "_integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "_location": "/bl", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "bl@^1.0.0", - "name": "bl", - "escapedName": "bl", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/tar-stream" - ], - "_resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "_shasum": "a160911717103c07410cef63ef51b397c025af9c", - "_spec": "bl@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar-stream", - "authors": [ - "Rod Vagg (https://github.com/rvagg)", - "Matteo Collina (https://github.com/mcollina)", - "Jarett Cruger (https://github.com/jcrugzz)" - ], - "bugs": { - "url": "https://github.com/rvagg/bl/issues" - }, - "bundleDependencies": false, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "deprecated": false, - "description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!", - "devDependencies": { - "faucet": "0.0.1", - "hash_file": "~0.1.1", - "tape": "~4.9.0" - }, - "homepage": "https://github.com/rvagg/bl", - "keywords": [ - "buffer", - "buffers", - "stream", - "awesomesauce" - ], - "license": "MIT", - "main": "bl.js", - "name": "bl", - "repository": { - "type": "git", - "url": "git+https://github.com/rvagg/bl.git" - }, - "scripts": { - "test": "node test/test.js | faucet" - }, - "version": "1.2.2" -} diff --git a/truebit-implementation/node_modules/bl/test/test.js b/truebit-implementation/node_modules/bl/test/test.js deleted file mode 100644 index e1214877..00000000 --- a/truebit-implementation/node_modules/bl/test/test.js +++ /dev/null @@ -1,702 +0,0 @@ -var tape = require('tape') - , crypto = require('crypto') - , fs = require('fs') - , hash = require('hash_file') - , BufferList = require('../') - , Buffer = require('safe-buffer').Buffer - - , encodings = - ('hex utf8 utf-8 ascii binary base64' - + (process.browser ? '' : ' ucs2 ucs-2 utf16le utf-16le')).split(' ') - -tape('single bytes from single buffer', function (t) { - var bl = new BufferList() - bl.append(Buffer.from('abcd')) - - t.equal(bl.length, 4) - - t.equal(bl.get(0), 97) - t.equal(bl.get(1), 98) - t.equal(bl.get(2), 99) - t.equal(bl.get(3), 100) - - t.end() -}) - -tape('single bytes from multiple buffers', function (t) { - var bl = new BufferList() - bl.append(Buffer.from('abcd')) - bl.append(Buffer.from('efg')) - bl.append(Buffer.from('hi')) - bl.append(Buffer.from('j')) - - t.equal(bl.length, 10) - - t.equal(bl.get(0), 97) - t.equal(bl.get(1), 98) - t.equal(bl.get(2), 99) - t.equal(bl.get(3), 100) - t.equal(bl.get(4), 101) - t.equal(bl.get(5), 102) - t.equal(bl.get(6), 103) - t.equal(bl.get(7), 104) - t.equal(bl.get(8), 105) - t.equal(bl.get(9), 106) - t.end() -}) - -tape('multi bytes from single buffer', function (t) { - var bl = new BufferList() - bl.append(Buffer.from('abcd')) - - t.equal(bl.length, 4) - - t.equal(bl.slice(0, 4).toString('ascii'), 'abcd') - t.equal(bl.slice(0, 3).toString('ascii'), 'abc') - t.equal(bl.slice(1, 4).toString('ascii'), 'bcd') - t.equal(bl.slice(-4, -1).toString('ascii'), 'abc') - - t.end() -}) - -tape('multi bytes from single buffer (negative indexes)', function (t) { - var bl = new BufferList() - bl.append(Buffer.from('buffer')) - - t.equal(bl.length, 6) - - t.equal(bl.slice(-6, -1).toString('ascii'), 'buffe') - t.equal(bl.slice(-6, -2).toString('ascii'), 'buff') - t.equal(bl.slice(-5, -2).toString('ascii'), 'uff') - - t.end() -}) - -tape('multiple bytes from multiple buffers', function (t) { - var bl = new BufferList() - - bl.append(Buffer.from('abcd')) - bl.append(Buffer.from('efg')) - bl.append(Buffer.from('hi')) - bl.append(Buffer.from('j')) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') - t.equal(bl.slice(3, 6).toString('ascii'), 'def') - t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') - t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') - t.equal(bl.slice(-7, -4).toString('ascii'), 'def') - - t.end() -}) - -tape('multiple bytes from multiple buffer lists', function (t) { - var bl = new BufferList() - - bl.append(new BufferList([ Buffer.from('abcd'), Buffer.from('efg') ])) - bl.append(new BufferList([ Buffer.from('hi'), Buffer.from('j') ])) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - - t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') - t.equal(bl.slice(3, 6).toString('ascii'), 'def') - t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') - t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') - - t.end() -}) - -// same data as previous test, just using nested constructors -tape('multiple bytes from crazy nested buffer lists', function (t) { - var bl = new BufferList() - - bl.append(new BufferList([ - new BufferList([ - new BufferList(Buffer.from('abc')) - , Buffer.from('d') - , new BufferList(Buffer.from('efg')) - ]) - , new BufferList([ Buffer.from('hi') ]) - , new BufferList(Buffer.from('j')) - ])) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - - t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') - t.equal(bl.slice(3, 6).toString('ascii'), 'def') - t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') - t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') - - t.end() -}) - -tape('append accepts arrays of Buffers', function (t) { - var bl = new BufferList() - bl.append(Buffer.from('abc')) - bl.append([ Buffer.from('def') ]) - bl.append([ Buffer.from('ghi'), Buffer.from('jkl') ]) - bl.append([ Buffer.from('mnop'), Buffer.from('qrstu'), Buffer.from('vwxyz') ]) - t.equal(bl.length, 26) - t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') - t.end() -}) - -tape('append accepts arrays of BufferLists', function (t) { - var bl = new BufferList() - bl.append(Buffer.from('abc')) - bl.append([ new BufferList('def') ]) - bl.append(new BufferList([ Buffer.from('ghi'), new BufferList('jkl') ])) - bl.append([ Buffer.from('mnop'), new BufferList([ Buffer.from('qrstu'), Buffer.from('vwxyz') ]) ]) - t.equal(bl.length, 26) - t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') - t.end() -}) - -tape('append chainable', function (t) { - var bl = new BufferList() - t.ok(bl.append(Buffer.from('abcd')) === bl) - t.ok(bl.append([ Buffer.from('abcd') ]) === bl) - t.ok(bl.append(new BufferList(Buffer.from('abcd'))) === bl) - t.ok(bl.append([ new BufferList(Buffer.from('abcd')) ]) === bl) - t.end() -}) - -tape('append chainable (test results)', function (t) { - var bl = new BufferList('abc') - .append([ new BufferList('def') ]) - .append(new BufferList([ Buffer.from('ghi'), new BufferList('jkl') ])) - .append([ Buffer.from('mnop'), new BufferList([ Buffer.from('qrstu'), Buffer.from('vwxyz') ]) ]) - - t.equal(bl.length, 26) - t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') - t.end() -}) - -tape('consuming from multiple buffers', function (t) { - var bl = new BufferList() - - bl.append(Buffer.from('abcd')) - bl.append(Buffer.from('efg')) - bl.append(Buffer.from('hi')) - bl.append(Buffer.from('j')) - - t.equal(bl.length, 10) - - t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') - - bl.consume(3) - t.equal(bl.length, 7) - t.equal(bl.slice(0, 7).toString('ascii'), 'defghij') - - bl.consume(2) - t.equal(bl.length, 5) - t.equal(bl.slice(0, 5).toString('ascii'), 'fghij') - - bl.consume(1) - t.equal(bl.length, 4) - t.equal(bl.slice(0, 4).toString('ascii'), 'ghij') - - bl.consume(1) - t.equal(bl.length, 3) - t.equal(bl.slice(0, 3).toString('ascii'), 'hij') - - bl.consume(2) - t.equal(bl.length, 1) - t.equal(bl.slice(0, 1).toString('ascii'), 'j') - - t.end() -}) - -tape('complete consumption', function (t) { - var bl = new BufferList() - - bl.append(Buffer.from('a')) - bl.append(Buffer.from('b')) - - bl.consume(2) - - t.equal(bl.length, 0) - t.equal(bl._bufs.length, 0) - - t.end() -}) - -tape('test readUInt8 / readInt8', function (t) { - var buf1 = Buffer.alloc(1) - , buf2 = Buffer.alloc(3) - , buf3 = Buffer.alloc(3) - , bl = new BufferList() - - buf2[1] = 0x3 - buf2[2] = 0x4 - buf3[0] = 0x23 - buf3[1] = 0x42 - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readUInt8(2), 0x3) - t.equal(bl.readInt8(2), 0x3) - t.equal(bl.readUInt8(3), 0x4) - t.equal(bl.readInt8(3), 0x4) - t.equal(bl.readUInt8(4), 0x23) - t.equal(bl.readInt8(4), 0x23) - t.equal(bl.readUInt8(5), 0x42) - t.equal(bl.readInt8(5), 0x42) - t.end() -}) - -tape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) { - var buf1 = Buffer.alloc(1) - , buf2 = Buffer.alloc(3) - , buf3 = Buffer.alloc(3) - , bl = new BufferList() - - buf2[1] = 0x3 - buf2[2] = 0x4 - buf3[0] = 0x23 - buf3[1] = 0x42 - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readUInt16BE(2), 0x0304) - t.equal(bl.readUInt16LE(2), 0x0403) - t.equal(bl.readInt16BE(2), 0x0304) - t.equal(bl.readInt16LE(2), 0x0403) - t.equal(bl.readUInt16BE(3), 0x0423) - t.equal(bl.readUInt16LE(3), 0x2304) - t.equal(bl.readInt16BE(3), 0x0423) - t.equal(bl.readInt16LE(3), 0x2304) - t.equal(bl.readUInt16BE(4), 0x2342) - t.equal(bl.readUInt16LE(4), 0x4223) - t.equal(bl.readInt16BE(4), 0x2342) - t.equal(bl.readInt16LE(4), 0x4223) - t.end() -}) - -tape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) { - var buf1 = Buffer.alloc(1) - , buf2 = Buffer.alloc(3) - , buf3 = Buffer.alloc(3) - , bl = new BufferList() - - buf2[1] = 0x3 - buf2[2] = 0x4 - buf3[0] = 0x23 - buf3[1] = 0x42 - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readUInt32BE(2), 0x03042342) - t.equal(bl.readUInt32LE(2), 0x42230403) - t.equal(bl.readInt32BE(2), 0x03042342) - t.equal(bl.readInt32LE(2), 0x42230403) - t.end() -}) - -tape('test readFloatLE / readFloatBE', function (t) { - var buf1 = Buffer.alloc(1) - , buf2 = Buffer.alloc(3) - , buf3 = Buffer.alloc(3) - , bl = new BufferList() - - buf2[1] = 0x00 - buf2[2] = 0x00 - buf3[0] = 0x80 - buf3[1] = 0x3f - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readFloatLE(2), 0x01) - t.end() -}) - -tape('test readDoubleLE / readDoubleBE', function (t) { - var buf1 = Buffer.alloc(1) - , buf2 = Buffer.alloc(3) - , buf3 = Buffer.alloc(10) - , bl = new BufferList() - - buf2[1] = 0x55 - buf2[2] = 0x55 - buf3[0] = 0x55 - buf3[1] = 0x55 - buf3[2] = 0x55 - buf3[3] = 0x55 - buf3[4] = 0xd5 - buf3[5] = 0x3f - - bl.append(buf1) - bl.append(buf2) - bl.append(buf3) - - t.equal(bl.readDoubleLE(2), 0.3333333333333333) - t.end() -}) - -tape('test toString', function (t) { - var bl = new BufferList() - - bl.append(Buffer.from('abcd')) - bl.append(Buffer.from('efg')) - bl.append(Buffer.from('hi')) - bl.append(Buffer.from('j')) - - t.equal(bl.toString('ascii', 0, 10), 'abcdefghij') - t.equal(bl.toString('ascii', 3, 10), 'defghij') - t.equal(bl.toString('ascii', 3, 6), 'def') - t.equal(bl.toString('ascii', 3, 8), 'defgh') - t.equal(bl.toString('ascii', 5, 10), 'fghij') - - t.end() -}) - -tape('test toString encoding', function (t) { - var bl = new BufferList() - , b = Buffer.from('abcdefghij\xff\x00') - - bl.append(Buffer.from('abcd')) - bl.append(Buffer.from('efg')) - bl.append(Buffer.from('hi')) - bl.append(Buffer.from('j')) - bl.append(Buffer.from('\xff\x00')) - - encodings.forEach(function (enc) { - t.equal(bl.toString(enc), b.toString(enc), enc) - }) - - t.end() -}) - -!process.browser && tape('test stream', function (t) { - var random = crypto.randomBytes(65534) - , rndhash = hash(random, 'md5') - , md5sum = crypto.createHash('md5') - , bl = new BufferList(function (err, buf) { - t.ok(Buffer.isBuffer(buf)) - t.ok(err === null) - t.equal(rndhash, hash(bl.slice(), 'md5')) - t.equal(rndhash, hash(buf, 'md5')) - - bl.pipe(fs.createWriteStream('/tmp/bl_test_rnd_out.dat')) - .on('close', function () { - var s = fs.createReadStream('/tmp/bl_test_rnd_out.dat') - s.on('data', md5sum.update.bind(md5sum)) - s.on('end', function() { - t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!') - t.end() - }) - }) - - }) - - fs.writeFileSync('/tmp/bl_test_rnd.dat', random) - fs.createReadStream('/tmp/bl_test_rnd.dat').pipe(bl) -}) - -tape('instantiation with Buffer', function (t) { - var buf = crypto.randomBytes(1024) - , buf2 = crypto.randomBytes(1024) - , b = BufferList(buf) - - t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer') - b = BufferList([ buf, buf2 ]) - t.equal(b.slice().toString('hex'), Buffer.concat([ buf, buf2 ]).toString('hex'), 'same buffer') - t.end() -}) - -tape('test String appendage', function (t) { - var bl = new BufferList() - , b = Buffer.from('abcdefghij\xff\x00') - - bl.append('abcd') - bl.append('efg') - bl.append('hi') - bl.append('j') - bl.append('\xff\x00') - - encodings.forEach(function (enc) { - t.equal(bl.toString(enc), b.toString(enc)) - }) - - t.end() -}) - -tape('test Number appendage', function (t) { - var bl = new BufferList() - , b = Buffer.from('1234567890') - - bl.append(1234) - bl.append(567) - bl.append(89) - bl.append(0) - - encodings.forEach(function (enc) { - t.equal(bl.toString(enc), b.toString(enc)) - }) - - t.end() -}) - -tape('write nothing, should get empty buffer', function (t) { - t.plan(3) - BufferList(function (err, data) { - t.notOk(err, 'no error') - t.ok(Buffer.isBuffer(data), 'got a buffer') - t.equal(0, data.length, 'got a zero-length buffer') - t.end() - }).end() -}) - -tape('unicode string', function (t) { - t.plan(2) - var inp1 = '\u2600' - , inp2 = '\u2603' - , exp = inp1 + ' and ' + inp2 - , bl = BufferList() - bl.write(inp1) - bl.write(' and ') - bl.write(inp2) - t.equal(exp, bl.toString()) - t.equal(Buffer.from(exp).toString('hex'), bl.toString('hex')) -}) - -tape('should emit finish', function (t) { - var source = BufferList() - , dest = BufferList() - - source.write('hello') - source.pipe(dest) - - dest.on('finish', function () { - t.equal(dest.toString('utf8'), 'hello') - t.end() - }) -}) - -tape('basic copy', function (t) { - var buf = crypto.randomBytes(1024) - , buf2 = Buffer.alloc(1024) - , b = BufferList(buf) - - b.copy(buf2) - t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy after many appends', function (t) { - var buf = crypto.randomBytes(512) - , buf2 = Buffer.alloc(1024) - , b = BufferList(buf) - - b.append(buf) - b.copy(buf2) - t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy at a precise position', function (t) { - var buf = crypto.randomBytes(1004) - , buf2 = Buffer.alloc(1024) - , b = BufferList(buf) - - b.copy(buf2, 20) - t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer') - t.end() -}) - -tape('copy starting from a precise location', function (t) { - var buf = crypto.randomBytes(10) - , buf2 = Buffer.alloc(5) - , b = BufferList(buf) - - b.copy(buf2, 0, 5) - t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy in an interval', function (t) { - var rnd = crypto.randomBytes(10) - , b = BufferList(rnd) // put the random bytes there - , actual = Buffer.alloc(3) - , expected = Buffer.alloc(3) - - rnd.copy(expected, 0, 5, 8) - b.copy(actual, 0, 5, 8) - - t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer') - t.end() -}) - -tape('copy an interval between two buffers', function (t) { - var buf = crypto.randomBytes(10) - , buf2 = Buffer.alloc(10) - , b = BufferList(buf) - - b.append(buf) - b.copy(buf2, 0, 5, 15) - - t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer') - t.end() -}) - -tape('shallow slice across buffer boundaries', function (t) { - var bl = new BufferList(['First', 'Second', 'Third']) - - t.equal(bl.shallowSlice(3, 13).toString(), 'stSecondTh') - t.end() -}) - -tape('shallow slice within single buffer', function (t) { - t.plan(2) - var bl = new BufferList(['First', 'Second', 'Third']) - - t.equal(bl.shallowSlice(5, 10).toString(), 'Secon') - t.equal(bl.shallowSlice(7, 10).toString(), 'con') - t.end() -}) - -tape('shallow slice single buffer', function (t) { - t.plan(3) - var bl = new BufferList(['First', 'Second', 'Third']) - - t.equal(bl.shallowSlice(0, 5).toString(), 'First') - t.equal(bl.shallowSlice(5, 11).toString(), 'Second') - t.equal(bl.shallowSlice(11, 16).toString(), 'Third') -}) - -tape('shallow slice with negative or omitted indices', function (t) { - t.plan(4) - var bl = new BufferList(['First', 'Second', 'Third']) - - t.equal(bl.shallowSlice().toString(), 'FirstSecondThird') - t.equal(bl.shallowSlice(5).toString(), 'SecondThird') - t.equal(bl.shallowSlice(5, -3).toString(), 'SecondTh') - t.equal(bl.shallowSlice(-8).toString(), 'ondThird') -}) - -tape('shallow slice does not make a copy', function (t) { - t.plan(1) - var buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')] - var bl = (new BufferList(buffers)).shallowSlice(5, -3) - - buffers[1].fill('h') - buffers[2].fill('h') - - t.equal(bl.toString(), 'hhhhhhhh') -}) - -tape('duplicate', function (t) { - t.plan(2) - - var bl = new BufferList('abcdefghij\xff\x00') - , dup = bl.duplicate() - - t.equal(bl.prototype, dup.prototype) - t.equal(bl.toString('hex'), dup.toString('hex')) -}) - -tape('destroy no pipe', function (t) { - t.plan(2) - - var bl = new BufferList('alsdkfja;lsdkfja;lsdk') - bl.destroy() - - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) -}) - -!process.browser && tape('destroy with pipe before read end', function (t) { - t.plan(2) - - var bl = new BufferList() - fs.createReadStream(__dirname + '/test.js') - .pipe(bl) - - bl.destroy() - - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) - -}) - -!process.browser && tape('destroy with pipe before read end with race', function (t) { - t.plan(2) - - var bl = new BufferList() - fs.createReadStream(__dirname + '/test.js') - .pipe(bl) - - setTimeout(function () { - bl.destroy() - setTimeout(function () { - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) - }, 500) - }, 500) -}) - -!process.browser && tape('destroy with pipe after read end', function (t) { - t.plan(2) - - var bl = new BufferList() - fs.createReadStream(__dirname + '/test.js') - .on('end', onEnd) - .pipe(bl) - - function onEnd () { - bl.destroy() - - t.equal(bl._bufs.length, 0) - t.equal(bl.length, 0) - } -}) - -!process.browser && tape('destroy with pipe while writing to a destination', function (t) { - t.plan(4) - - var bl = new BufferList() - , ds = new BufferList() - - fs.createReadStream(__dirname + '/test.js') - .on('end', onEnd) - .pipe(bl) - - function onEnd () { - bl.pipe(ds) - - setTimeout(function () { - bl.destroy() - - t.equals(bl._bufs.length, 0) - t.equals(bl.length, 0) - - ds.destroy() - - t.equals(bl._bufs.length, 0) - t.equals(bl.length, 0) - - }, 100) - } -}) - -!process.browser && tape('handle error', function (t) { - t.plan(2) - fs.createReadStream('/does/not/exist').pipe(BufferList(function (err, data) { - t.ok(err instanceof Error, 'has error') - t.notOk(data, 'no data') - })) -}) diff --git a/truebit-implementation/node_modules/block-stream/LICENCE b/truebit-implementation/node_modules/block-stream/LICENCE deleted file mode 100644 index 74489e2e..00000000 --- a/truebit-implementation/node_modules/block-stream/LICENCE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) Isaac Z. Schlueter -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. 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. - -THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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. diff --git a/truebit-implementation/node_modules/block-stream/LICENSE b/truebit-implementation/node_modules/block-stream/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/truebit-implementation/node_modules/block-stream/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/block-stream/README.md b/truebit-implementation/node_modules/block-stream/README.md deleted file mode 100644 index c16e9c46..00000000 --- a/truebit-implementation/node_modules/block-stream/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# block-stream - -A stream of blocks. - -Write data into it, and it'll output data in buffer blocks the size you -specify, padding with zeroes if necessary. - -```javascript -var block = new BlockStream(512) -fs.createReadStream("some-file").pipe(block) -block.pipe(fs.createWriteStream("block-file")) -``` - -When `.end()` or `.flush()` is called, it'll pad the block with zeroes. diff --git a/truebit-implementation/node_modules/block-stream/block-stream.js b/truebit-implementation/node_modules/block-stream/block-stream.js deleted file mode 100644 index 008de035..00000000 --- a/truebit-implementation/node_modules/block-stream/block-stream.js +++ /dev/null @@ -1,209 +0,0 @@ -// write data to it, and it'll emit data in 512 byte blocks. -// if you .end() or .flush(), it'll emit whatever it's got, -// padded with nulls to 512 bytes. - -module.exports = BlockStream - -var Stream = require("stream").Stream - , inherits = require("inherits") - , assert = require("assert").ok - , debug = process.env.DEBUG ? console.error : function () {} - -function BlockStream (size, opt) { - this.writable = this.readable = true - this._opt = opt || {} - this._chunkSize = size || 512 - this._offset = 0 - this._buffer = [] - this._bufferLength = 0 - if (this._opt.nopad) this._zeroes = false - else { - this._zeroes = new Buffer(this._chunkSize) - for (var i = 0; i < this._chunkSize; i ++) { - this._zeroes[i] = 0 - } - } -} - -inherits(BlockStream, Stream) - -BlockStream.prototype.write = function (c) { - // debug(" BS write", c) - if (this._ended) throw new Error("BlockStream: write after end") - if (c && !Buffer.isBuffer(c)) c = new Buffer(c + "") - if (c.length) { - this._buffer.push(c) - this._bufferLength += c.length - } - // debug("pushed onto buffer", this._bufferLength) - if (this._bufferLength >= this._chunkSize) { - if (this._paused) { - // debug(" BS paused, return false, need drain") - this._needDrain = true - return false - } - this._emitChunk() - } - return true -} - -BlockStream.prototype.pause = function () { - // debug(" BS pausing") - this._paused = true -} - -BlockStream.prototype.resume = function () { - // debug(" BS resume") - this._paused = false - return this._emitChunk() -} - -BlockStream.prototype.end = function (chunk) { - // debug("end", chunk) - if (typeof chunk === "function") cb = chunk, chunk = null - if (chunk) this.write(chunk) - this._ended = true - this.flush() -} - -BlockStream.prototype.flush = function () { - this._emitChunk(true) -} - -BlockStream.prototype._emitChunk = function (flush) { - // debug("emitChunk flush=%j emitting=%j paused=%j", flush, this._emitting, this._paused) - - // emit a chunk - if (flush && this._zeroes) { - // debug(" BS push zeroes", this._bufferLength) - // push a chunk of zeroes - var padBytes = (this._bufferLength % this._chunkSize) - if (padBytes !== 0) padBytes = this._chunkSize - padBytes - if (padBytes > 0) { - // debug("padBytes", padBytes, this._zeroes.slice(0, padBytes)) - this._buffer.push(this._zeroes.slice(0, padBytes)) - this._bufferLength += padBytes - // debug(this._buffer[this._buffer.length - 1].length, this._bufferLength) - } - } - - if (this._emitting || this._paused) return - this._emitting = true - - // debug(" BS entering loops") - var bufferIndex = 0 - while (this._bufferLength >= this._chunkSize && - (flush || !this._paused)) { - // debug(" BS data emission loop", this._bufferLength) - - var out - , outOffset = 0 - , outHas = this._chunkSize - - while (outHas > 0 && (flush || !this._paused) ) { - // debug(" BS data inner emit loop", this._bufferLength) - var cur = this._buffer[bufferIndex] - , curHas = cur.length - this._offset - // debug("cur=", cur) - // debug("curHas=%j", curHas) - // If it's not big enough to fill the whole thing, then we'll need - // to copy multiple buffers into one. However, if it is big enough, - // then just slice out the part we want, to save unnecessary copying. - // Also, need to copy if we've already done some copying, since buffers - // can't be joined like cons strings. - if (out || curHas < outHas) { - out = out || new Buffer(this._chunkSize) - cur.copy(out, outOffset, - this._offset, this._offset + Math.min(curHas, outHas)) - } else if (cur.length === outHas && this._offset === 0) { - // shortcut -- cur is exactly long enough, and no offset. - out = cur - } else { - // slice out the piece of cur that we need. - out = cur.slice(this._offset, this._offset + outHas) - } - - if (curHas > outHas) { - // means that the current buffer couldn't be completely output - // update this._offset to reflect how much WAS written - this._offset += outHas - outHas = 0 - } else { - // output the entire current chunk. - // toss it away - outHas -= curHas - outOffset += curHas - bufferIndex ++ - this._offset = 0 - } - } - - this._bufferLength -= this._chunkSize - assert(out.length === this._chunkSize) - // debug("emitting data", out) - // debug(" BS emitting, paused=%j", this._paused, this._bufferLength) - this.emit("data", out) - out = null - } - // debug(" BS out of loops", this._bufferLength) - - // whatever is left, it's not enough to fill up a block, or we're paused - this._buffer = this._buffer.slice(bufferIndex) - if (this._paused) { - // debug(" BS paused, leaving", this._bufferLength) - this._needsDrain = true - this._emitting = false - return - } - - // if flushing, and not using null-padding, then need to emit the last - // chunk(s) sitting in the queue. We know that it's not enough to - // fill up a whole block, because otherwise it would have been emitted - // above, but there may be some offset. - var l = this._buffer.length - if (flush && !this._zeroes && l) { - if (l === 1) { - if (this._offset) { - this.emit("data", this._buffer[0].slice(this._offset)) - } else { - this.emit("data", this._buffer[0]) - } - } else { - var outHas = this._bufferLength - , out = new Buffer(outHas) - , outOffset = 0 - for (var i = 0; i < l; i ++) { - var cur = this._buffer[i] - , curHas = cur.length - this._offset - cur.copy(out, outOffset, this._offset) - this._offset = 0 - outOffset += curHas - this._bufferLength -= curHas - } - this.emit("data", out) - } - // truncate - this._buffer.length = 0 - this._bufferLength = 0 - this._offset = 0 - } - - // now either drained or ended - // debug("either draining, or ended", this._bufferLength, this._ended) - // means that we've flushed out all that we can so far. - if (this._needDrain) { - // debug("emitting drain", this._bufferLength) - this._needDrain = false - this.emit("drain") - } - - if ((this._bufferLength === 0) && this._ended && !this._endEmitted) { - // debug("emitting end", this._bufferLength) - this._endEmitted = true - this.emit("end") - } - - this._emitting = false - - // debug(" BS no longer emitting", flush, this._paused, this._emitting, this._bufferLength, this._chunkSize) -} diff --git a/truebit-implementation/node_modules/block-stream/package.json b/truebit-implementation/node_modules/block-stream/package.json deleted file mode 100644 index eba12d35..00000000 --- a/truebit-implementation/node_modules/block-stream/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_from": "block-stream@*", - "_id": "block-stream@0.0.9", - "_inBundle": false, - "_integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "_location": "/block-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "block-stream@*", - "name": "block-stream", - "escapedName": "block-stream", - "rawSpec": "*", - "saveSpec": null, - "fetchSpec": "*" - }, - "_requiredBy": [ - "/tar" - ], - "_resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "_shasum": "13ebfe778a03205cfe03751481ebb4b3300c126a", - "_spec": "block-stream@*", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/block-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "~2.0.0" - }, - "deprecated": false, - "description": "a stream of blocks", - "devDependencies": { - "tap": "^5.7.1" - }, - "engines": { - "node": "0.4 || >=0.5.8" - }, - "files": [ - "block-stream.js" - ], - "homepage": "https://github.com/isaacs/block-stream#readme", - "license": "ISC", - "main": "block-stream.js", - "name": "block-stream", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/block-stream.git" - }, - "scripts": { - "test": "tap test/*.js --cov" - }, - "version": "0.0.9" -} diff --git a/truebit-implementation/node_modules/bluebird/LICENSE b/truebit-implementation/node_modules/bluebird/LICENSE deleted file mode 100644 index b24e6350..00000000 --- a/truebit-implementation/node_modules/bluebird/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2018 Petka Antonov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/bluebird/README.md b/truebit-implementation/node_modules/bluebird/README.md deleted file mode 100644 index 0eb5b74a..00000000 --- a/truebit-implementation/node_modules/bluebird/README.md +++ /dev/null @@ -1,57 +0,0 @@ - - Promises/A+ logo - - - -[![Build Status](https://travis-ci.org/petkaantonov/bluebird.svg?branch=master)](https://travis-ci.org/petkaantonov/bluebird) -[![coverage-98%](https://img.shields.io/badge/coverage-98%25-brightgreen.svg?style=flat)](http://petkaantonov.github.io/bluebird/coverage/debug/index.html) - -**Got a question?** Join us on [stackoverflow](http://stackoverflow.com/questions/tagged/bluebird), the [mailing list](https://groups.google.com/forum/#!forum/bluebird-js) or chat on [IRC](https://webchat.freenode.net/?channels=#promises) - -# Introduction - -Bluebird is a fully featured promise library with focus on innovative features and performance - -See the [**bluebird website**](http://bluebirdjs.com/docs/getting-started.html) for further documentation, references and instructions. See the [**API reference**](http://bluebirdjs.com/docs/api-reference.html) here. - -For bluebird 2.x documentation and files, see the [2.x tree](https://github.com/petkaantonov/bluebird/tree/2.x). - -### Note - -Promises in Node.js 10 are significantly faster than before. Bluebird still includes a lot of features like cancellation, iteration methods and warnings that native promises don't. If you are using Bluebird for performance rather than for those - please consider giving native promises a shot and running the benchmarks yourself. - -# Questions and issues - -The [github issue tracker](https://github.com/petkaantonov/bluebird/issues) is **_only_** for bug reports and feature requests. Anything else, such as questions for help in using the library, should be posted in [StackOverflow](http://stackoverflow.com/questions/tagged/bluebird) under tags `promise` and `bluebird`. - - - -## Thanks - -Thanks to BrowserStack for providing us with a free account which lets us support old browsers like IE8. - -# License - -The MIT License (MIT) - -Copyright (c) 2013-2017 Petka Antonov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/bluebird/changelog.md b/truebit-implementation/node_modules/bluebird/changelog.md deleted file mode 100644 index 73b2eb6c..00000000 --- a/truebit-implementation/node_modules/bluebird/changelog.md +++ /dev/null @@ -1 +0,0 @@ -[http://bluebirdjs.com/docs/changelog.html](http://bluebirdjs.com/docs/changelog.html) diff --git a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.core.js b/truebit-implementation/node_modules/bluebird/js/browser/bluebird.core.js deleted file mode 100644 index 626406f5..00000000 --- a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.core.js +++ /dev/null @@ -1,3805 +0,0 @@ -/* @preserve - * The MIT License (MIT) - * - * Copyright (c) 2013-2018 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * 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. - * - */ -/** - * bluebird build version 3.5.3 - * Features enabled: core - * Features disabled: race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each -*/ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;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 _dereq_=="function"&&_dereq_;for(var o=0;o 0) { - _drainQueueStep(queue); - } -} - -function _drainQueueStep(queue) { - var fn = queue.shift(); - if (typeof fn !== "function") { - fn._settlePromises(); - } else { - var receiver = queue.shift(); - var arg = queue.shift(); - fn.call(receiver, arg); - } -} - -Async.prototype._drainQueues = function () { - _drainQueue(this._normalQueue); - this._reset(); - this._haveDrainedQueues = true; - _drainQueue(this._lateQueue); -}; - -Async.prototype._queueTick = function () { - if (!this._isTickUsed) { - this._isTickUsed = true; - this._schedule(this.drainQueues); - } -}; - -Async.prototype._reset = function () { - this._isTickUsed = false; -}; - -module.exports = Async; -module.exports.firstLineError = firstLineError; - -},{"./queue":17,"./schedule":18,"./util":21}],2:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { -var calledBind = false; -var rejectThis = function(_, e) { - this._reject(e); -}; - -var targetRejected = function(e, context) { - context.promiseRejectionQueued = true; - context.bindingPromise._then(rejectThis, rejectThis, null, this, e); -}; - -var bindingResolved = function(thisArg, context) { - if (((this._bitField & 50397184) === 0)) { - this._resolveCallback(context.target); - } -}; - -var bindingRejected = function(e, context) { - if (!context.promiseRejectionQueued) this._reject(e); -}; - -Promise.prototype.bind = function (thisArg) { - if (!calledBind) { - calledBind = true; - Promise.prototype._propagateFrom = debug.propagateFromFunction(); - Promise.prototype._boundValue = debug.boundValueFunction(); - } - var maybePromise = tryConvertToPromise(thisArg); - var ret = new Promise(INTERNAL); - ret._propagateFrom(this, 1); - var target = this._target(); - ret._setBoundTo(maybePromise); - if (maybePromise instanceof Promise) { - var context = { - promiseRejectionQueued: false, - promise: ret, - target: target, - bindingPromise: maybePromise - }; - target._then(INTERNAL, targetRejected, undefined, ret, context); - maybePromise._then( - bindingResolved, bindingRejected, undefined, ret, context); - ret._setOnCancel(maybePromise); - } else { - ret._resolveCallback(target); - } - return ret; -}; - -Promise.prototype._setBoundTo = function (obj) { - if (obj !== undefined) { - this._bitField = this._bitField | 2097152; - this._boundTo = obj; - } else { - this._bitField = this._bitField & (~2097152); - } -}; - -Promise.prototype._isBound = function () { - return (this._bitField & 2097152) === 2097152; -}; - -Promise.bind = function (thisArg, value) { - return Promise.resolve(value).bind(thisArg); -}; -}; - -},{}],3:[function(_dereq_,module,exports){ -"use strict"; -var old; -if (typeof Promise !== "undefined") old = Promise; -function noConflict() { - try { if (Promise === bluebird) Promise = old; } - catch (e) {} - return bluebird; -} -var bluebird = _dereq_("./promise")(); -bluebird.noConflict = noConflict; -module.exports = bluebird; - -},{"./promise":15}],4:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, PromiseArray, apiRejection, debug) { -var util = _dereq_("./util"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var async = Promise._async; - -Promise.prototype["break"] = Promise.prototype.cancel = function() { - if (!debug.cancellation()) return this._warn("cancellation is disabled"); - - var promise = this; - var child = promise; - while (promise._isCancellable()) { - if (!promise._cancelBy(child)) { - if (child._isFollowing()) { - child._followee().cancel(); - } else { - child._cancelBranched(); - } - break; - } - - var parent = promise._cancellationParent; - if (parent == null || !parent._isCancellable()) { - if (promise._isFollowing()) { - promise._followee().cancel(); - } else { - promise._cancelBranched(); - } - break; - } else { - if (promise._isFollowing()) promise._followee().cancel(); - promise._setWillBeCancelled(); - child = promise; - promise = parent; - } - } -}; - -Promise.prototype._branchHasCancelled = function() { - this._branchesRemainingToCancel--; -}; - -Promise.prototype._enoughBranchesHaveCancelled = function() { - return this._branchesRemainingToCancel === undefined || - this._branchesRemainingToCancel <= 0; -}; - -Promise.prototype._cancelBy = function(canceller) { - if (canceller === this) { - this._branchesRemainingToCancel = 0; - this._invokeOnCancel(); - return true; - } else { - this._branchHasCancelled(); - if (this._enoughBranchesHaveCancelled()) { - this._invokeOnCancel(); - return true; - } - } - return false; -}; - -Promise.prototype._cancelBranched = function() { - if (this._enoughBranchesHaveCancelled()) { - this._cancel(); - } -}; - -Promise.prototype._cancel = function() { - if (!this._isCancellable()) return; - this._setCancelled(); - async.invoke(this._cancelPromises, this, undefined); -}; - -Promise.prototype._cancelPromises = function() { - if (this._length() > 0) this._settlePromises(); -}; - -Promise.prototype._unsetOnCancel = function() { - this._onCancelField = undefined; -}; - -Promise.prototype._isCancellable = function() { - return this.isPending() && !this._isCancelled(); -}; - -Promise.prototype.isCancellable = function() { - return this.isPending() && !this.isCancelled(); -}; - -Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { - if (util.isArray(onCancelCallback)) { - for (var i = 0; i < onCancelCallback.length; ++i) { - this._doInvokeOnCancel(onCancelCallback[i], internalOnly); - } - } else if (onCancelCallback !== undefined) { - if (typeof onCancelCallback === "function") { - if (!internalOnly) { - var e = tryCatch(onCancelCallback).call(this._boundValue()); - if (e === errorObj) { - this._attachExtraTrace(e.e); - async.throwLater(e.e); - } - } - } else { - onCancelCallback._resultCancelled(this); - } - } -}; - -Promise.prototype._invokeOnCancel = function() { - var onCancelCallback = this._onCancel(); - this._unsetOnCancel(); - async.invoke(this._doInvokeOnCancel, this, onCancelCallback); -}; - -Promise.prototype._invokeInternalOnCancel = function() { - if (this._isCancellable()) { - this._doInvokeOnCancel(this._onCancel(), true); - this._unsetOnCancel(); - } -}; - -Promise.prototype._resultCancelled = function() { - this.cancel(); -}; - -}; - -},{"./util":21}],5:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(NEXT_FILTER) { -var util = _dereq_("./util"); -var getKeys = _dereq_("./es5").keys; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -function catchFilter(instances, cb, promise) { - return function(e) { - var boundTo = promise._boundValue(); - predicateLoop: for (var i = 0; i < instances.length; ++i) { - var item = instances[i]; - - if (item === Error || - (item != null && item.prototype instanceof Error)) { - if (e instanceof item) { - return tryCatch(cb).call(boundTo, e); - } - } else if (typeof item === "function") { - var matchesPredicate = tryCatch(item).call(boundTo, e); - if (matchesPredicate === errorObj) { - return matchesPredicate; - } else if (matchesPredicate) { - return tryCatch(cb).call(boundTo, e); - } - } else if (util.isObject(e)) { - var keys = getKeys(item); - for (var j = 0; j < keys.length; ++j) { - var key = keys[j]; - if (item[key] != e[key]) { - continue predicateLoop; - } - } - return tryCatch(cb).call(boundTo, e); - } - } - return NEXT_FILTER; - }; -} - -return catchFilter; -}; - -},{"./es5":10,"./util":21}],6:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -var longStackTraces = false; -var contextStack = []; - -Promise.prototype._promiseCreated = function() {}; -Promise.prototype._pushContext = function() {}; -Promise.prototype._popContext = function() {return null;}; -Promise._peekContext = Promise.prototype._peekContext = function() {}; - -function Context() { - this._trace = new Context.CapturedTrace(peekContext()); -} -Context.prototype._pushContext = function () { - if (this._trace !== undefined) { - this._trace._promiseCreated = null; - contextStack.push(this._trace); - } -}; - -Context.prototype._popContext = function () { - if (this._trace !== undefined) { - var trace = contextStack.pop(); - var ret = trace._promiseCreated; - trace._promiseCreated = null; - return ret; - } - return null; -}; - -function createContext() { - if (longStackTraces) return new Context(); -} - -function peekContext() { - var lastIndex = contextStack.length - 1; - if (lastIndex >= 0) { - return contextStack[lastIndex]; - } - return undefined; -} -Context.CapturedTrace = null; -Context.create = createContext; -Context.deactivateLongStackTraces = function() {}; -Context.activateLongStackTraces = function() { - var Promise_pushContext = Promise.prototype._pushContext; - var Promise_popContext = Promise.prototype._popContext; - var Promise_PeekContext = Promise._peekContext; - var Promise_peekContext = Promise.prototype._peekContext; - var Promise_promiseCreated = Promise.prototype._promiseCreated; - Context.deactivateLongStackTraces = function() { - Promise.prototype._pushContext = Promise_pushContext; - Promise.prototype._popContext = Promise_popContext; - Promise._peekContext = Promise_PeekContext; - Promise.prototype._peekContext = Promise_peekContext; - Promise.prototype._promiseCreated = Promise_promiseCreated; - longStackTraces = false; - }; - longStackTraces = true; - Promise.prototype._pushContext = Context.prototype._pushContext; - Promise.prototype._popContext = Context.prototype._popContext; - Promise._peekContext = Promise.prototype._peekContext = peekContext; - Promise.prototype._promiseCreated = function() { - var ctx = this._peekContext(); - if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; - }; -}; -return Context; -}; - -},{}],7:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, Context) { -var getDomain = Promise._getDomain; -var async = Promise._async; -var Warning = _dereq_("./errors").Warning; -var util = _dereq_("./util"); -var es5 = _dereq_("./es5"); -var canAttachTrace = util.canAttachTrace; -var unhandledRejectionHandled; -var possiblyUnhandledRejection; -var bluebirdFramePattern = - /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; -var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; -var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; -var stackFramePattern = null; -var formatStack = null; -var indentStackFrames = false; -var printWarning; -var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && - (true || - util.env("BLUEBIRD_DEBUG") || - util.env("NODE_ENV") === "development")); - -var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && - (debugging || util.env("BLUEBIRD_WARNINGS"))); - -var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && - (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); - -var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && - (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); - -Promise.prototype.suppressUnhandledRejections = function() { - var target = this._target(); - target._bitField = ((target._bitField & (~1048576)) | - 524288); -}; - -Promise.prototype._ensurePossibleRejectionHandled = function () { - if ((this._bitField & 524288) !== 0) return; - this._setRejectionIsUnhandled(); - var self = this; - setTimeout(function() { - self._notifyUnhandledRejection(); - }, 1); -}; - -Promise.prototype._notifyUnhandledRejectionIsHandled = function () { - fireRejectionEvent("rejectionHandled", - unhandledRejectionHandled, undefined, this); -}; - -Promise.prototype._setReturnedNonUndefined = function() { - this._bitField = this._bitField | 268435456; -}; - -Promise.prototype._returnedNonUndefined = function() { - return (this._bitField & 268435456) !== 0; -}; - -Promise.prototype._notifyUnhandledRejection = function () { - if (this._isRejectionUnhandled()) { - var reason = this._settledValue(); - this._setUnhandledRejectionIsNotified(); - fireRejectionEvent("unhandledRejection", - possiblyUnhandledRejection, reason, this); - } -}; - -Promise.prototype._setUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField | 262144; -}; - -Promise.prototype._unsetUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField & (~262144); -}; - -Promise.prototype._isUnhandledRejectionNotified = function () { - return (this._bitField & 262144) > 0; -}; - -Promise.prototype._setRejectionIsUnhandled = function () { - this._bitField = this._bitField | 1048576; -}; - -Promise.prototype._unsetRejectionIsUnhandled = function () { - this._bitField = this._bitField & (~1048576); - if (this._isUnhandledRejectionNotified()) { - this._unsetUnhandledRejectionIsNotified(); - this._notifyUnhandledRejectionIsHandled(); - } -}; - -Promise.prototype._isRejectionUnhandled = function () { - return (this._bitField & 1048576) > 0; -}; - -Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { - return warn(message, shouldUseOwnTrace, promise || this); -}; - -Promise.onPossiblyUnhandledRejection = function (fn) { - var domain = getDomain(); - possiblyUnhandledRejection = - typeof fn === "function" ? (domain === null ? - fn : util.domainBind(domain, fn)) - : undefined; -}; - -Promise.onUnhandledRejectionHandled = function (fn) { - var domain = getDomain(); - unhandledRejectionHandled = - typeof fn === "function" ? (domain === null ? - fn : util.domainBind(domain, fn)) - : undefined; -}; - -var disableLongStackTraces = function() {}; -Promise.longStackTraces = function () { - if (async.haveItemsQueued() && !config.longStackTraces) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - if (!config.longStackTraces && longStackTracesIsSupported()) { - var Promise_captureStackTrace = Promise.prototype._captureStackTrace; - var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; - var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace; - config.longStackTraces = true; - disableLongStackTraces = function() { - if (async.haveItemsQueued() && !config.longStackTraces) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - Promise.prototype._captureStackTrace = Promise_captureStackTrace; - Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; - Promise.prototype._dereferenceTrace = Promise_dereferenceTrace; - Context.deactivateLongStackTraces(); - async.enableTrampoline(); - config.longStackTraces = false; - }; - Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; - Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; - Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace; - Context.activateLongStackTraces(); - async.disableTrampolineIfNecessary(); - } -}; - -Promise.hasLongStackTraces = function () { - return config.longStackTraces && longStackTracesIsSupported(); -}; - -var fireDomEvent = (function() { - try { - if (typeof CustomEvent === "function") { - var event = new CustomEvent("CustomEvent"); - util.global.dispatchEvent(event); - return function(name, event) { - var eventData = { - detail: event, - cancelable: true - }; - es5.defineProperty( - eventData, "promise", {value: event.promise}); - es5.defineProperty(eventData, "reason", {value: event.reason}); - var domEvent = new CustomEvent(name.toLowerCase(), eventData); - return !util.global.dispatchEvent(domEvent); - }; - } else if (typeof Event === "function") { - var event = new Event("CustomEvent"); - util.global.dispatchEvent(event); - return function(name, event) { - var domEvent = new Event(name.toLowerCase(), { - cancelable: true - }); - domEvent.detail = event; - es5.defineProperty(domEvent, "promise", {value: event.promise}); - es5.defineProperty(domEvent, "reason", {value: event.reason}); - return !util.global.dispatchEvent(domEvent); - }; - } else { - var event = document.createEvent("CustomEvent"); - event.initCustomEvent("testingtheevent", false, true, {}); - util.global.dispatchEvent(event); - return function(name, event) { - var domEvent = document.createEvent("CustomEvent"); - domEvent.initCustomEvent(name.toLowerCase(), false, true, - event); - return !util.global.dispatchEvent(domEvent); - }; - } - } catch (e) {} - return function() { - return false; - }; -})(); - -var fireGlobalEvent = (function() { - if (util.isNode) { - return function() { - return process.emit.apply(process, arguments); - }; - } else { - if (!util.global) { - return function() { - return false; - }; - } - return function(name) { - var methodName = "on" + name.toLowerCase(); - var method = util.global[methodName]; - if (!method) return false; - method.apply(util.global, [].slice.call(arguments, 1)); - return true; - }; - } -})(); - -function generatePromiseLifecycleEventObject(name, promise) { - return {promise: promise}; -} - -var eventToObjectGenerator = { - promiseCreated: generatePromiseLifecycleEventObject, - promiseFulfilled: generatePromiseLifecycleEventObject, - promiseRejected: generatePromiseLifecycleEventObject, - promiseResolved: generatePromiseLifecycleEventObject, - promiseCancelled: generatePromiseLifecycleEventObject, - promiseChained: function(name, promise, child) { - return {promise: promise, child: child}; - }, - warning: function(name, warning) { - return {warning: warning}; - }, - unhandledRejection: function (name, reason, promise) { - return {reason: reason, promise: promise}; - }, - rejectionHandled: generatePromiseLifecycleEventObject -}; - -var activeFireEvent = function (name) { - var globalEventFired = false; - try { - globalEventFired = fireGlobalEvent.apply(null, arguments); - } catch (e) { - async.throwLater(e); - globalEventFired = true; - } - - var domEventFired = false; - try { - domEventFired = fireDomEvent(name, - eventToObjectGenerator[name].apply(null, arguments)); - } catch (e) { - async.throwLater(e); - domEventFired = true; - } - - return domEventFired || globalEventFired; -}; - -Promise.config = function(opts) { - opts = Object(opts); - if ("longStackTraces" in opts) { - if (opts.longStackTraces) { - Promise.longStackTraces(); - } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { - disableLongStackTraces(); - } - } - if ("warnings" in opts) { - var warningsOption = opts.warnings; - config.warnings = !!warningsOption; - wForgottenReturn = config.warnings; - - if (util.isObject(warningsOption)) { - if ("wForgottenReturn" in warningsOption) { - wForgottenReturn = !!warningsOption.wForgottenReturn; - } - } - } - if ("cancellation" in opts && opts.cancellation && !config.cancellation) { - if (async.haveItemsQueued()) { - throw new Error( - "cannot enable cancellation after promises are in use"); - } - Promise.prototype._clearCancellationData = - cancellationClearCancellationData; - Promise.prototype._propagateFrom = cancellationPropagateFrom; - Promise.prototype._onCancel = cancellationOnCancel; - Promise.prototype._setOnCancel = cancellationSetOnCancel; - Promise.prototype._attachCancellationCallback = - cancellationAttachCancellationCallback; - Promise.prototype._execute = cancellationExecute; - propagateFromFunction = cancellationPropagateFrom; - config.cancellation = true; - } - if ("monitoring" in opts) { - if (opts.monitoring && !config.monitoring) { - config.monitoring = true; - Promise.prototype._fireEvent = activeFireEvent; - } else if (!opts.monitoring && config.monitoring) { - config.monitoring = false; - Promise.prototype._fireEvent = defaultFireEvent; - } - } - return Promise; -}; - -function defaultFireEvent() { return false; } - -Promise.prototype._fireEvent = defaultFireEvent; -Promise.prototype._execute = function(executor, resolve, reject) { - try { - executor(resolve, reject); - } catch (e) { - return e; - } -}; -Promise.prototype._onCancel = function () {}; -Promise.prototype._setOnCancel = function (handler) { ; }; -Promise.prototype._attachCancellationCallback = function(onCancel) { - ; -}; -Promise.prototype._captureStackTrace = function () {}; -Promise.prototype._attachExtraTrace = function () {}; -Promise.prototype._dereferenceTrace = function () {}; -Promise.prototype._clearCancellationData = function() {}; -Promise.prototype._propagateFrom = function (parent, flags) { - ; - ; -}; - -function cancellationExecute(executor, resolve, reject) { - var promise = this; - try { - executor(resolve, reject, function(onCancel) { - if (typeof onCancel !== "function") { - throw new TypeError("onCancel must be a function, got: " + - util.toString(onCancel)); - } - promise._attachCancellationCallback(onCancel); - }); - } catch (e) { - return e; - } -} - -function cancellationAttachCancellationCallback(onCancel) { - if (!this._isCancellable()) return this; - - var previousOnCancel = this._onCancel(); - if (previousOnCancel !== undefined) { - if (util.isArray(previousOnCancel)) { - previousOnCancel.push(onCancel); - } else { - this._setOnCancel([previousOnCancel, onCancel]); - } - } else { - this._setOnCancel(onCancel); - } -} - -function cancellationOnCancel() { - return this._onCancelField; -} - -function cancellationSetOnCancel(onCancel) { - this._onCancelField = onCancel; -} - -function cancellationClearCancellationData() { - this._cancellationParent = undefined; - this._onCancelField = undefined; -} - -function cancellationPropagateFrom(parent, flags) { - if ((flags & 1) !== 0) { - this._cancellationParent = parent; - var branchesRemainingToCancel = parent._branchesRemainingToCancel; - if (branchesRemainingToCancel === undefined) { - branchesRemainingToCancel = 0; - } - parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; - } - if ((flags & 2) !== 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -} - -function bindingPropagateFrom(parent, flags) { - if ((flags & 2) !== 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -} -var propagateFromFunction = bindingPropagateFrom; - -function boundValueFunction() { - var ret = this._boundTo; - if (ret !== undefined) { - if (ret instanceof Promise) { - if (ret.isFulfilled()) { - return ret.value(); - } else { - return undefined; - } - } - } - return ret; -} - -function longStackTracesCaptureStackTrace() { - this._trace = new CapturedTrace(this._peekContext()); -} - -function longStackTracesAttachExtraTrace(error, ignoreSelf) { - if (canAttachTrace(error)) { - var trace = this._trace; - if (trace !== undefined) { - if (ignoreSelf) trace = trace._parent; - } - if (trace !== undefined) { - trace.attachExtraTrace(error); - } else if (!error.__stackCleaned__) { - var parsed = parseStackAndMessage(error); - util.notEnumerableProp(error, "stack", - parsed.message + "\n" + parsed.stack.join("\n")); - util.notEnumerableProp(error, "__stackCleaned__", true); - } - } -} - -function longStackTracesDereferenceTrace() { - this._trace = undefined; -} - -function checkForgottenReturns(returnValue, promiseCreated, name, promise, - parent) { - if (returnValue === undefined && promiseCreated !== null && - wForgottenReturn) { - if (parent !== undefined && parent._returnedNonUndefined()) return; - if ((promise._bitField & 65535) === 0) return; - - if (name) name = name + " "; - var handlerLine = ""; - var creatorLine = ""; - if (promiseCreated._trace) { - var traceLines = promiseCreated._trace.stack.split("\n"); - var stack = cleanStack(traceLines); - for (var i = stack.length - 1; i >= 0; --i) { - var line = stack[i]; - if (!nodeFramePattern.test(line)) { - var lineMatches = line.match(parseLinePattern); - if (lineMatches) { - handlerLine = "at " + lineMatches[1] + - ":" + lineMatches[2] + ":" + lineMatches[3] + " "; - } - break; - } - } - - if (stack.length > 0) { - var firstUserLine = stack[0]; - for (var i = 0; i < traceLines.length; ++i) { - - if (traceLines[i] === firstUserLine) { - if (i > 0) { - creatorLine = "\n" + traceLines[i - 1]; - } - break; - } - } - - } - } - var msg = "a promise was created in a " + name + - "handler " + handlerLine + "but was not returned from it, " + - "see http://goo.gl/rRqMUw" + - creatorLine; - promise._warn(msg, true, promiseCreated); - } -} - -function deprecated(name, replacement) { - var message = name + - " is deprecated and will be removed in a future version."; - if (replacement) message += " Use " + replacement + " instead."; - return warn(message); -} - -function warn(message, shouldUseOwnTrace, promise) { - if (!config.warnings) return; - var warning = new Warning(message); - var ctx; - if (shouldUseOwnTrace) { - promise._attachExtraTrace(warning); - } else if (config.longStackTraces && (ctx = Promise._peekContext())) { - ctx.attachExtraTrace(warning); - } else { - var parsed = parseStackAndMessage(warning); - warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); - } - - if (!activeFireEvent("warning", warning)) { - formatAndLogError(warning, "", true); - } -} - -function reconstructStack(message, stacks) { - for (var i = 0; i < stacks.length - 1; ++i) { - stacks[i].push("From previous event:"); - stacks[i] = stacks[i].join("\n"); - } - if (i < stacks.length) { - stacks[i] = stacks[i].join("\n"); - } - return message + "\n" + stacks.join("\n"); -} - -function removeDuplicateOrEmptyJumps(stacks) { - for (var i = 0; i < stacks.length; ++i) { - if (stacks[i].length === 0 || - ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { - stacks.splice(i, 1); - i--; - } - } -} - -function removeCommonRoots(stacks) { - var current = stacks[0]; - for (var i = 1; i < stacks.length; ++i) { - var prev = stacks[i]; - var currentLastIndex = current.length - 1; - var currentLastLine = current[currentLastIndex]; - var commonRootMeetPoint = -1; - - for (var j = prev.length - 1; j >= 0; --j) { - if (prev[j] === currentLastLine) { - commonRootMeetPoint = j; - break; - } - } - - for (var j = commonRootMeetPoint; j >= 0; --j) { - var line = prev[j]; - if (current[currentLastIndex] === line) { - current.pop(); - currentLastIndex--; - } else { - break; - } - } - current = prev; - } -} - -function cleanStack(stack) { - var ret = []; - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - var isTraceLine = " (No stack trace)" === line || - stackFramePattern.test(line); - var isInternalFrame = isTraceLine && shouldIgnore(line); - if (isTraceLine && !isInternalFrame) { - if (indentStackFrames && line.charAt(0) !== " ") { - line = " " + line; - } - ret.push(line); - } - } - return ret; -} - -function stackFramesAsArray(error) { - var stack = error.stack.replace(/\s+$/g, "").split("\n"); - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - if (" (No stack trace)" === line || stackFramePattern.test(line)) { - break; - } - } - if (i > 0 && error.name != "SyntaxError") { - stack = stack.slice(i); - } - return stack; -} - -function parseStackAndMessage(error) { - var stack = error.stack; - var message = error.toString(); - stack = typeof stack === "string" && stack.length > 0 - ? stackFramesAsArray(error) : [" (No stack trace)"]; - return { - message: message, - stack: error.name == "SyntaxError" ? stack : cleanStack(stack) - }; -} - -function formatAndLogError(error, title, isSoft) { - if (typeof console !== "undefined") { - var message; - if (util.isObject(error)) { - var stack = error.stack; - message = title + formatStack(stack, error); - } else { - message = title + String(error); - } - if (typeof printWarning === "function") { - printWarning(message, isSoft); - } else if (typeof console.log === "function" || - typeof console.log === "object") { - console.log(message); - } - } -} - -function fireRejectionEvent(name, localHandler, reason, promise) { - var localEventFired = false; - try { - if (typeof localHandler === "function") { - localEventFired = true; - if (name === "rejectionHandled") { - localHandler(promise); - } else { - localHandler(reason, promise); - } - } - } catch (e) { - async.throwLater(e); - } - - if (name === "unhandledRejection") { - if (!activeFireEvent(name, reason, promise) && !localEventFired) { - formatAndLogError(reason, "Unhandled rejection "); - } - } else { - activeFireEvent(name, promise); - } -} - -function formatNonError(obj) { - var str; - if (typeof obj === "function") { - str = "[function " + - (obj.name || "anonymous") + - "]"; - } else { - str = obj && typeof obj.toString === "function" - ? obj.toString() : util.toString(obj); - var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; - if (ruselessToString.test(str)) { - try { - var newStr = JSON.stringify(obj); - str = newStr; - } - catch(e) { - - } - } - if (str.length === 0) { - str = "(empty array)"; - } - } - return ("(<" + snip(str) + ">, no stack trace)"); -} - -function snip(str) { - var maxChars = 41; - if (str.length < maxChars) { - return str; - } - return str.substr(0, maxChars - 3) + "..."; -} - -function longStackTracesIsSupported() { - return typeof captureStackTrace === "function"; -} - -var shouldIgnore = function() { return false; }; -var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; -function parseLineInfo(line) { - var matches = line.match(parseLineInfoRegex); - if (matches) { - return { - fileName: matches[1], - line: parseInt(matches[2], 10) - }; - } -} - -function setBounds(firstLineError, lastLineError) { - if (!longStackTracesIsSupported()) return; - var firstStackLines = firstLineError.stack.split("\n"); - var lastStackLines = lastLineError.stack.split("\n"); - var firstIndex = -1; - var lastIndex = -1; - var firstFileName; - var lastFileName; - for (var i = 0; i < firstStackLines.length; ++i) { - var result = parseLineInfo(firstStackLines[i]); - if (result) { - firstFileName = result.fileName; - firstIndex = result.line; - break; - } - } - for (var i = 0; i < lastStackLines.length; ++i) { - var result = parseLineInfo(lastStackLines[i]); - if (result) { - lastFileName = result.fileName; - lastIndex = result.line; - break; - } - } - if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || - firstFileName !== lastFileName || firstIndex >= lastIndex) { - return; - } - - shouldIgnore = function(line) { - if (bluebirdFramePattern.test(line)) return true; - var info = parseLineInfo(line); - if (info) { - if (info.fileName === firstFileName && - (firstIndex <= info.line && info.line <= lastIndex)) { - return true; - } - } - return false; - }; -} - -function CapturedTrace(parent) { - this._parent = parent; - this._promisesCreated = 0; - var length = this._length = 1 + (parent === undefined ? 0 : parent._length); - captureStackTrace(this, CapturedTrace); - if (length > 32) this.uncycle(); -} -util.inherits(CapturedTrace, Error); -Context.CapturedTrace = CapturedTrace; - -CapturedTrace.prototype.uncycle = function() { - var length = this._length; - if (length < 2) return; - var nodes = []; - var stackToIndex = {}; - - for (var i = 0, node = this; node !== undefined; ++i) { - nodes.push(node); - node = node._parent; - } - length = this._length = i; - for (var i = length - 1; i >= 0; --i) { - var stack = nodes[i].stack; - if (stackToIndex[stack] === undefined) { - stackToIndex[stack] = i; - } - } - for (var i = 0; i < length; ++i) { - var currentStack = nodes[i].stack; - var index = stackToIndex[currentStack]; - if (index !== undefined && index !== i) { - if (index > 0) { - nodes[index - 1]._parent = undefined; - nodes[index - 1]._length = 1; - } - nodes[i]._parent = undefined; - nodes[i]._length = 1; - var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; - - if (index < length - 1) { - cycleEdgeNode._parent = nodes[index + 1]; - cycleEdgeNode._parent.uncycle(); - cycleEdgeNode._length = - cycleEdgeNode._parent._length + 1; - } else { - cycleEdgeNode._parent = undefined; - cycleEdgeNode._length = 1; - } - var currentChildLength = cycleEdgeNode._length + 1; - for (var j = i - 2; j >= 0; --j) { - nodes[j]._length = currentChildLength; - currentChildLength++; - } - return; - } - } -}; - -CapturedTrace.prototype.attachExtraTrace = function(error) { - if (error.__stackCleaned__) return; - this.uncycle(); - var parsed = parseStackAndMessage(error); - var message = parsed.message; - var stacks = [parsed.stack]; - - var trace = this; - while (trace !== undefined) { - stacks.push(cleanStack(trace.stack.split("\n"))); - trace = trace._parent; - } - removeCommonRoots(stacks); - removeDuplicateOrEmptyJumps(stacks); - util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); - util.notEnumerableProp(error, "__stackCleaned__", true); -}; - -var captureStackTrace = (function stackDetection() { - var v8stackFramePattern = /^\s*at\s*/; - var v8stackFormatter = function(stack, error) { - if (typeof stack === "string") return stack; - - if (error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - if (typeof Error.stackTraceLimit === "number" && - typeof Error.captureStackTrace === "function") { - Error.stackTraceLimit += 6; - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - var captureStackTrace = Error.captureStackTrace; - - shouldIgnore = function(line) { - return bluebirdFramePattern.test(line); - }; - return function(receiver, ignoreUntil) { - Error.stackTraceLimit += 6; - captureStackTrace(receiver, ignoreUntil); - Error.stackTraceLimit -= 6; - }; - } - var err = new Error(); - - if (typeof err.stack === "string" && - err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { - stackFramePattern = /@/; - formatStack = v8stackFormatter; - indentStackFrames = true; - return function captureStackTrace(o) { - o.stack = new Error().stack; - }; - } - - var hasStackAfterThrow; - try { throw new Error(); } - catch(e) { - hasStackAfterThrow = ("stack" in e); - } - if (!("stack" in err) && hasStackAfterThrow && - typeof Error.stackTraceLimit === "number") { - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - return function captureStackTrace(o) { - Error.stackTraceLimit += 6; - try { throw new Error(); } - catch(e) { o.stack = e.stack; } - Error.stackTraceLimit -= 6; - }; - } - - formatStack = function(stack, error) { - if (typeof stack === "string") return stack; - - if ((typeof error === "object" || - typeof error === "function") && - error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - return null; - -})([]); - -if (typeof console !== "undefined" && typeof console.warn !== "undefined") { - printWarning = function (message) { - console.warn(message); - }; - if (util.isNode && process.stderr.isTTY) { - printWarning = function(message, isSoft) { - var color = isSoft ? "\u001b[33m" : "\u001b[31m"; - console.warn(color + message + "\u001b[0m\n"); - }; - } else if (!util.isNode && typeof (new Error().stack) === "string") { - printWarning = function(message, isSoft) { - console.warn("%c" + message, - isSoft ? "color: darkorange" : "color: red"); - }; - } -} - -var config = { - warnings: warnings, - longStackTraces: false, - cancellation: false, - monitoring: false -}; - -if (longStackTraces) Promise.longStackTraces(); - -return { - longStackTraces: function() { - return config.longStackTraces; - }, - warnings: function() { - return config.warnings; - }, - cancellation: function() { - return config.cancellation; - }, - monitoring: function() { - return config.monitoring; - }, - propagateFromFunction: function() { - return propagateFromFunction; - }, - boundValueFunction: function() { - return boundValueFunction; - }, - checkForgottenReturns: checkForgottenReturns, - setBounds: setBounds, - warn: warn, - deprecated: deprecated, - CapturedTrace: CapturedTrace, - fireDomEvent: fireDomEvent, - fireGlobalEvent: fireGlobalEvent -}; -}; - -},{"./errors":9,"./es5":10,"./util":21}],8:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -function returner() { - return this.value; -} -function thrower() { - throw this.reason; -} - -Promise.prototype["return"] = -Promise.prototype.thenReturn = function (value) { - if (value instanceof Promise) value.suppressUnhandledRejections(); - return this._then( - returner, undefined, undefined, {value: value}, undefined); -}; - -Promise.prototype["throw"] = -Promise.prototype.thenThrow = function (reason) { - return this._then( - thrower, undefined, undefined, {reason: reason}, undefined); -}; - -Promise.prototype.catchThrow = function (reason) { - if (arguments.length <= 1) { - return this._then( - undefined, thrower, undefined, {reason: reason}, undefined); - } else { - var _reason = arguments[1]; - var handler = function() {throw _reason;}; - return this.caught(reason, handler); - } -}; - -Promise.prototype.catchReturn = function (value) { - if (arguments.length <= 1) { - if (value instanceof Promise) value.suppressUnhandledRejections(); - return this._then( - undefined, returner, undefined, {value: value}, undefined); - } else { - var _value = arguments[1]; - if (_value instanceof Promise) _value.suppressUnhandledRejections(); - var handler = function() {return _value;}; - return this.caught(value, handler); - } -}; -}; - -},{}],9:[function(_dereq_,module,exports){ -"use strict"; -var es5 = _dereq_("./es5"); -var Objectfreeze = es5.freeze; -var util = _dereq_("./util"); -var inherits = util.inherits; -var notEnumerableProp = util.notEnumerableProp; - -function subError(nameProperty, defaultMessage) { - function SubError(message) { - if (!(this instanceof SubError)) return new SubError(message); - notEnumerableProp(this, "message", - typeof message === "string" ? message : defaultMessage); - notEnumerableProp(this, "name", nameProperty); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } else { - Error.call(this); - } - } - inherits(SubError, Error); - return SubError; -} - -var _TypeError, _RangeError; -var Warning = subError("Warning", "warning"); -var CancellationError = subError("CancellationError", "cancellation error"); -var TimeoutError = subError("TimeoutError", "timeout error"); -var AggregateError = subError("AggregateError", "aggregate error"); -try { - _TypeError = TypeError; - _RangeError = RangeError; -} catch(e) { - _TypeError = subError("TypeError", "type error"); - _RangeError = subError("RangeError", "range error"); -} - -var methods = ("join pop push shift unshift slice filter forEach some " + - "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); - -for (var i = 0; i < methods.length; ++i) { - if (typeof Array.prototype[methods[i]] === "function") { - AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; - } -} - -es5.defineProperty(AggregateError.prototype, "length", { - value: 0, - configurable: false, - writable: true, - enumerable: true -}); -AggregateError.prototype["isOperational"] = true; -var level = 0; -AggregateError.prototype.toString = function() { - var indent = Array(level * 4 + 1).join(" "); - var ret = "\n" + indent + "AggregateError of:" + "\n"; - level++; - indent = Array(level * 4 + 1).join(" "); - for (var i = 0; i < this.length; ++i) { - var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; - var lines = str.split("\n"); - for (var j = 0; j < lines.length; ++j) { - lines[j] = indent + lines[j]; - } - str = lines.join("\n"); - ret += str + "\n"; - } - level--; - return ret; -}; - -function OperationalError(message) { - if (!(this instanceof OperationalError)) - return new OperationalError(message); - notEnumerableProp(this, "name", "OperationalError"); - notEnumerableProp(this, "message", message); - this.cause = message; - this["isOperational"] = true; - - if (message instanceof Error) { - notEnumerableProp(this, "message", message.message); - notEnumerableProp(this, "stack", message.stack); - } else if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - -} -inherits(OperationalError, Error); - -var errorTypes = Error["__BluebirdErrorTypes__"]; -if (!errorTypes) { - errorTypes = Objectfreeze({ - CancellationError: CancellationError, - TimeoutError: TimeoutError, - OperationalError: OperationalError, - RejectionError: OperationalError, - AggregateError: AggregateError - }); - es5.defineProperty(Error, "__BluebirdErrorTypes__", { - value: errorTypes, - writable: false, - enumerable: false, - configurable: false - }); -} - -module.exports = { - Error: Error, - TypeError: _TypeError, - RangeError: _RangeError, - CancellationError: errorTypes.CancellationError, - OperationalError: errorTypes.OperationalError, - TimeoutError: errorTypes.TimeoutError, - AggregateError: errorTypes.AggregateError, - Warning: Warning -}; - -},{"./es5":10,"./util":21}],10:[function(_dereq_,module,exports){ -var isES5 = (function(){ - "use strict"; - return this === undefined; -})(); - -if (isES5) { - module.exports = { - freeze: Object.freeze, - defineProperty: Object.defineProperty, - getDescriptor: Object.getOwnPropertyDescriptor, - keys: Object.keys, - names: Object.getOwnPropertyNames, - getPrototypeOf: Object.getPrototypeOf, - isArray: Array.isArray, - isES5: isES5, - propertyIsWritable: function(obj, prop) { - var descriptor = Object.getOwnPropertyDescriptor(obj, prop); - return !!(!descriptor || descriptor.writable || descriptor.set); - } - }; -} else { - var has = {}.hasOwnProperty; - var str = {}.toString; - var proto = {}.constructor.prototype; - - var ObjectKeys = function (o) { - var ret = []; - for (var key in o) { - if (has.call(o, key)) { - ret.push(key); - } - } - return ret; - }; - - var ObjectGetDescriptor = function(o, key) { - return {value: o[key]}; - }; - - var ObjectDefineProperty = function (o, key, desc) { - o[key] = desc.value; - return o; - }; - - var ObjectFreeze = function (obj) { - return obj; - }; - - var ObjectGetPrototypeOf = function (obj) { - try { - return Object(obj).constructor.prototype; - } - catch (e) { - return proto; - } - }; - - var ArrayIsArray = function (obj) { - try { - return str.call(obj) === "[object Array]"; - } - catch(e) { - return false; - } - }; - - module.exports = { - isArray: ArrayIsArray, - keys: ObjectKeys, - names: ObjectKeys, - defineProperty: ObjectDefineProperty, - getDescriptor: ObjectGetDescriptor, - freeze: ObjectFreeze, - getPrototypeOf: ObjectGetPrototypeOf, - isES5: isES5, - propertyIsWritable: function() { - return true; - } - }; -} - -},{}],11:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) { -var util = _dereq_("./util"); -var CancellationError = Promise.CancellationError; -var errorObj = util.errorObj; -var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); - -function PassThroughHandlerContext(promise, type, handler) { - this.promise = promise; - this.type = type; - this.handler = handler; - this.called = false; - this.cancelPromise = null; -} - -PassThroughHandlerContext.prototype.isFinallyHandler = function() { - return this.type === 0; -}; - -function FinallyHandlerCancelReaction(finallyHandler) { - this.finallyHandler = finallyHandler; -} - -FinallyHandlerCancelReaction.prototype._resultCancelled = function() { - checkCancel(this.finallyHandler); -}; - -function checkCancel(ctx, reason) { - if (ctx.cancelPromise != null) { - if (arguments.length > 1) { - ctx.cancelPromise._reject(reason); - } else { - ctx.cancelPromise._cancel(); - } - ctx.cancelPromise = null; - return true; - } - return false; -} - -function succeed() { - return finallyHandler.call(this, this.promise._target()._settledValue()); -} -function fail(reason) { - if (checkCancel(this, reason)) return; - errorObj.e = reason; - return errorObj; -} -function finallyHandler(reasonOrValue) { - var promise = this.promise; - var handler = this.handler; - - if (!this.called) { - this.called = true; - var ret = this.isFinallyHandler() - ? handler.call(promise._boundValue()) - : handler.call(promise._boundValue(), reasonOrValue); - if (ret === NEXT_FILTER) { - return ret; - } else if (ret !== undefined) { - promise._setReturnedNonUndefined(); - var maybePromise = tryConvertToPromise(ret, promise); - if (maybePromise instanceof Promise) { - if (this.cancelPromise != null) { - if (maybePromise._isCancelled()) { - var reason = - new CancellationError("late cancellation observer"); - promise._attachExtraTrace(reason); - errorObj.e = reason; - return errorObj; - } else if (maybePromise.isPending()) { - maybePromise._attachCancellationCallback( - new FinallyHandlerCancelReaction(this)); - } - } - return maybePromise._then( - succeed, fail, undefined, this, undefined); - } - } - } - - if (promise.isRejected()) { - checkCancel(this); - errorObj.e = reasonOrValue; - return errorObj; - } else { - checkCancel(this); - return reasonOrValue; - } -} - -Promise.prototype._passThrough = function(handler, type, success, fail) { - if (typeof handler !== "function") return this.then(); - return this._then(success, - fail, - undefined, - new PassThroughHandlerContext(this, type, handler), - undefined); -}; - -Promise.prototype.lastly = -Promise.prototype["finally"] = function (handler) { - return this._passThrough(handler, - 0, - finallyHandler, - finallyHandler); -}; - - -Promise.prototype.tap = function (handler) { - return this._passThrough(handler, 1, finallyHandler); -}; - -Promise.prototype.tapCatch = function (handlerOrPredicate) { - var len = arguments.length; - if(len === 1) { - return this._passThrough(handlerOrPredicate, - 1, - undefined, - finallyHandler); - } else { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (util.isObject(item)) { - catchInstances[j++] = item; - } else { - return Promise.reject(new TypeError( - "tapCatch statement predicate: " - + "expecting an object but got " + util.classString(item) - )); - } - } - catchInstances.length = j; - var handler = arguments[i]; - return this._passThrough(catchFilter(catchInstances, handler, this), - 1, - undefined, - finallyHandler); - } - -}; - -return PassThroughHandlerContext; -}; - -},{"./catch_filter":5,"./util":21}],12:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, - getDomain) { -var util = _dereq_("./util"); -var canEvaluate = util.canEvaluate; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var reject; - -if (!true) { -if (canEvaluate) { - var thenCallback = function(i) { - return new Function("value", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = value; \n\ - holder.checkFulfillment(this); \n\ - ".replace(/Index/g, i)); - }; - - var promiseSetter = function(i) { - return new Function("promise", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = promise; \n\ - ".replace(/Index/g, i)); - }; - - var generateHolderClass = function(total) { - var props = new Array(total); - for (var i = 0; i < props.length; ++i) { - props[i] = "this.p" + (i+1); - } - var assignment = props.join(" = ") + " = null;"; - var cancellationCode= "var promise;\n" + props.map(function(prop) { - return " \n\ - promise = " + prop + "; \n\ - if (promise instanceof Promise) { \n\ - promise.cancel(); \n\ - } \n\ - "; - }).join("\n"); - var passedArguments = props.join(", "); - var name = "Holder$" + total; - - - var code = "return function(tryCatch, errorObj, Promise, async) { \n\ - 'use strict'; \n\ - function [TheName](fn) { \n\ - [TheProperties] \n\ - this.fn = fn; \n\ - this.asyncNeeded = true; \n\ - this.now = 0; \n\ - } \n\ - \n\ - [TheName].prototype._callFunction = function(promise) { \n\ - promise._pushContext(); \n\ - var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ - promise._popContext(); \n\ - if (ret === errorObj) { \n\ - promise._rejectCallback(ret.e, false); \n\ - } else { \n\ - promise._resolveCallback(ret); \n\ - } \n\ - }; \n\ - \n\ - [TheName].prototype.checkFulfillment = function(promise) { \n\ - var now = ++this.now; \n\ - if (now === [TheTotal]) { \n\ - if (this.asyncNeeded) { \n\ - async.invoke(this._callFunction, this, promise); \n\ - } else { \n\ - this._callFunction(promise); \n\ - } \n\ - \n\ - } \n\ - }; \n\ - \n\ - [TheName].prototype._resultCancelled = function() { \n\ - [CancellationCode] \n\ - }; \n\ - \n\ - return [TheName]; \n\ - }(tryCatch, errorObj, Promise, async); \n\ - "; - - code = code.replace(/\[TheName\]/g, name) - .replace(/\[TheTotal\]/g, total) - .replace(/\[ThePassedArguments\]/g, passedArguments) - .replace(/\[TheProperties\]/g, assignment) - .replace(/\[CancellationCode\]/g, cancellationCode); - - return new Function("tryCatch", "errorObj", "Promise", "async", code) - (tryCatch, errorObj, Promise, async); - }; - - var holderClasses = []; - var thenCallbacks = []; - var promiseSetters = []; - - for (var i = 0; i < 8; ++i) { - holderClasses.push(generateHolderClass(i + 1)); - thenCallbacks.push(thenCallback(i + 1)); - promiseSetters.push(promiseSetter(i + 1)); - } - - reject = function (reason) { - this._reject(reason); - }; -}} - -Promise.join = function () { - var last = arguments.length - 1; - var fn; - if (last > 0 && typeof arguments[last] === "function") { - fn = arguments[last]; - if (!true) { - if (last <= 8 && canEvaluate) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var HolderClass = holderClasses[last - 1]; - var holder = new HolderClass(fn); - var callbacks = thenCallbacks; - - for (var i = 0; i < last; ++i) { - var maybePromise = tryConvertToPromise(arguments[i], ret); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - var bitField = maybePromise._bitField; - ; - if (((bitField & 50397184) === 0)) { - maybePromise._then(callbacks[i], reject, - undefined, ret, holder); - promiseSetters[i](maybePromise, holder); - holder.asyncNeeded = false; - } else if (((bitField & 33554432) !== 0)) { - callbacks[i].call(ret, - maybePromise._value(), holder); - } else if (((bitField & 16777216) !== 0)) { - ret._reject(maybePromise._reason()); - } else { - ret._cancel(); - } - } else { - callbacks[i].call(ret, maybePromise, holder); - } - } - - if (!ret._isFateSealed()) { - if (holder.asyncNeeded) { - var domain = getDomain(); - if (domain !== null) { - holder.fn = util.domainBind(domain, holder.fn); - } - } - ret._setAsyncGuaranteed(); - ret._setOnCancel(holder); - } - return ret; - } - } - } - var args = [].slice.call(arguments);; - if (fn) args.pop(); - var ret = new PromiseArray(args).promise(); - return fn !== undefined ? ret.spread(fn) : ret; -}; - -}; - -},{"./util":21}],13:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { -var util = _dereq_("./util"); -var tryCatch = util.tryCatch; - -Promise.method = function (fn) { - if (typeof fn !== "function") { - throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); - } - return function () { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value = tryCatch(fn).apply(this, arguments); - var promiseCreated = ret._popContext(); - debug.checkForgottenReturns( - value, promiseCreated, "Promise.method", ret); - ret._resolveFromSyncValue(value); - return ret; - }; -}; - -Promise.attempt = Promise["try"] = function (fn) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value; - if (arguments.length > 1) { - debug.deprecated("calling Promise.try with more than 1 argument"); - var arg = arguments[1]; - var ctx = arguments[2]; - value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) - : tryCatch(fn).call(ctx, arg); - } else { - value = tryCatch(fn)(); - } - var promiseCreated = ret._popContext(); - debug.checkForgottenReturns( - value, promiseCreated, "Promise.try", ret); - ret._resolveFromSyncValue(value); - return ret; -}; - -Promise.prototype._resolveFromSyncValue = function (value) { - if (value === util.errorObj) { - this._rejectCallback(value.e, false); - } else { - this._resolveCallback(value, true); - } -}; -}; - -},{"./util":21}],14:[function(_dereq_,module,exports){ -"use strict"; -var util = _dereq_("./util"); -var maybeWrapAsError = util.maybeWrapAsError; -var errors = _dereq_("./errors"); -var OperationalError = errors.OperationalError; -var es5 = _dereq_("./es5"); - -function isUntypedError(obj) { - return obj instanceof Error && - es5.getPrototypeOf(obj) === Error.prototype; -} - -var rErrorKey = /^(?:name|message|stack|cause)$/; -function wrapAsOperationalError(obj) { - var ret; - if (isUntypedError(obj)) { - ret = new OperationalError(obj); - ret.name = obj.name; - ret.message = obj.message; - ret.stack = obj.stack; - var keys = es5.keys(obj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (!rErrorKey.test(key)) { - ret[key] = obj[key]; - } - } - return ret; - } - util.markAsOriginatingFromRejection(obj); - return obj; -} - -function nodebackForPromise(promise, multiArgs) { - return function(err, value) { - if (promise === null) return; - if (err) { - var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); - promise._attachExtraTrace(wrapped); - promise._reject(wrapped); - } else if (!multiArgs) { - promise._fulfill(value); - } else { - var args = [].slice.call(arguments, 1);; - promise._fulfill(args); - } - promise = null; - }; -} - -module.exports = nodebackForPromise; - -},{"./errors":9,"./es5":10,"./util":21}],15:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function() { -var makeSelfResolutionError = function () { - return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); -}; -var reflectHandler = function() { - return new Promise.PromiseInspection(this._target()); -}; -var apiRejection = function(msg) { - return Promise.reject(new TypeError(msg)); -}; -function Proxyable() {} -var UNDEFINED_BINDING = {}; -var util = _dereq_("./util"); - -var getDomain; -if (util.isNode) { - getDomain = function() { - var ret = process.domain; - if (ret === undefined) ret = null; - return ret; - }; -} else { - getDomain = function() { - return null; - }; -} -util.notEnumerableProp(Promise, "_getDomain", getDomain); - -var es5 = _dereq_("./es5"); -var Async = _dereq_("./async"); -var async = new Async(); -es5.defineProperty(Promise, "_async", {value: async}); -var errors = _dereq_("./errors"); -var TypeError = Promise.TypeError = errors.TypeError; -Promise.RangeError = errors.RangeError; -var CancellationError = Promise.CancellationError = errors.CancellationError; -Promise.TimeoutError = errors.TimeoutError; -Promise.OperationalError = errors.OperationalError; -Promise.RejectionError = errors.OperationalError; -Promise.AggregateError = errors.AggregateError; -var INTERNAL = function(){}; -var APPLY = {}; -var NEXT_FILTER = {}; -var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL); -var PromiseArray = - _dereq_("./promise_array")(Promise, INTERNAL, - tryConvertToPromise, apiRejection, Proxyable); -var Context = _dereq_("./context")(Promise); - /*jshint unused:false*/ -var createContext = Context.create; -var debug = _dereq_("./debuggability")(Promise, Context); -var CapturedTrace = debug.CapturedTrace; -var PassThroughHandlerContext = - _dereq_("./finally")(Promise, tryConvertToPromise, NEXT_FILTER); -var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); -var nodebackForPromise = _dereq_("./nodeback"); -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; -function check(self, executor) { - if (self == null || self.constructor !== Promise) { - throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - if (typeof executor !== "function") { - throw new TypeError("expecting a function but got " + util.classString(executor)); - } - -} - -function Promise(executor) { - if (executor !== INTERNAL) { - check(this, executor); - } - this._bitField = 0; - this._fulfillmentHandler0 = undefined; - this._rejectionHandler0 = undefined; - this._promise0 = undefined; - this._receiver0 = undefined; - this._resolveFromExecutor(executor); - this._promiseCreated(); - this._fireEvent("promiseCreated", this); -} - -Promise.prototype.toString = function () { - return "[object Promise]"; -}; - -Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { - var len = arguments.length; - if (len > 1) { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (util.isObject(item)) { - catchInstances[j++] = item; - } else { - return apiRejection("Catch statement predicate: " + - "expecting an object but got " + util.classString(item)); - } - } - catchInstances.length = j; - fn = arguments[i]; - return this.then(undefined, catchFilter(catchInstances, fn, this)); - } - return this.then(undefined, fn); -}; - -Promise.prototype.reflect = function () { - return this._then(reflectHandler, - reflectHandler, undefined, this, undefined); -}; - -Promise.prototype.then = function (didFulfill, didReject) { - if (debug.warnings() && arguments.length > 0 && - typeof didFulfill !== "function" && - typeof didReject !== "function") { - var msg = ".then() only accepts functions but was passed: " + - util.classString(didFulfill); - if (arguments.length > 1) { - msg += ", " + util.classString(didReject); - } - this._warn(msg); - } - return this._then(didFulfill, didReject, undefined, undefined, undefined); -}; - -Promise.prototype.done = function (didFulfill, didReject) { - var promise = - this._then(didFulfill, didReject, undefined, undefined, undefined); - promise._setIsFinal(); -}; - -Promise.prototype.spread = function (fn) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - return this.all()._then(fn, undefined, undefined, APPLY, undefined); -}; - -Promise.prototype.toJSON = function () { - var ret = { - isFulfilled: false, - isRejected: false, - fulfillmentValue: undefined, - rejectionReason: undefined - }; - if (this.isFulfilled()) { - ret.fulfillmentValue = this.value(); - ret.isFulfilled = true; - } else if (this.isRejected()) { - ret.rejectionReason = this.reason(); - ret.isRejected = true; - } - return ret; -}; - -Promise.prototype.all = function () { - if (arguments.length > 0) { - this._warn(".all() was passed arguments but it does not take any"); - } - return new PromiseArray(this).promise(); -}; - -Promise.prototype.error = function (fn) { - return this.caught(util.originatesFromRejection, fn); -}; - -Promise.getNewLibraryCopy = module.exports; - -Promise.is = function (val) { - return val instanceof Promise; -}; - -Promise.fromNode = Promise.fromCallback = function(fn) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs - : false; - var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); - if (result === errorObj) { - ret._rejectCallback(result.e, true); - } - if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); - return ret; -}; - -Promise.all = function (promises) { - return new PromiseArray(promises).promise(); -}; - -Promise.cast = function (obj) { - var ret = tryConvertToPromise(obj); - if (!(ret instanceof Promise)) { - ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._setFulfilled(); - ret._rejectionHandler0 = obj; - } - return ret; -}; - -Promise.resolve = Promise.fulfilled = Promise.cast; - -Promise.reject = Promise.rejected = function (reason) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._rejectCallback(reason, true); - return ret; -}; - -Promise.setScheduler = function(fn) { - if (typeof fn !== "function") { - throw new TypeError("expecting a function but got " + util.classString(fn)); - } - return async.setScheduler(fn); -}; - -Promise.prototype._then = function ( - didFulfill, - didReject, - _, receiver, - internalData -) { - var haveInternalData = internalData !== undefined; - var promise = haveInternalData ? internalData : new Promise(INTERNAL); - var target = this._target(); - var bitField = target._bitField; - - if (!haveInternalData) { - promise._propagateFrom(this, 3); - promise._captureStackTrace(); - if (receiver === undefined && - ((this._bitField & 2097152) !== 0)) { - if (!((bitField & 50397184) === 0)) { - receiver = this._boundValue(); - } else { - receiver = target === this ? undefined : this._boundTo; - } - } - this._fireEvent("promiseChained", this, promise); - } - - var domain = getDomain(); - if (!((bitField & 50397184) === 0)) { - var handler, value, settler = target._settlePromiseCtx; - if (((bitField & 33554432) !== 0)) { - value = target._rejectionHandler0; - handler = didFulfill; - } else if (((bitField & 16777216) !== 0)) { - value = target._fulfillmentHandler0; - handler = didReject; - target._unsetRejectionIsUnhandled(); - } else { - settler = target._settlePromiseLateCancellationObserver; - value = new CancellationError("late cancellation observer"); - target._attachExtraTrace(value); - handler = didReject; - } - - async.invoke(settler, target, { - handler: domain === null ? handler - : (typeof handler === "function" && - util.domainBind(domain, handler)), - promise: promise, - receiver: receiver, - value: value - }); - } else { - target._addCallbacks(didFulfill, didReject, promise, receiver, domain); - } - - return promise; -}; - -Promise.prototype._length = function () { - return this._bitField & 65535; -}; - -Promise.prototype._isFateSealed = function () { - return (this._bitField & 117506048) !== 0; -}; - -Promise.prototype._isFollowing = function () { - return (this._bitField & 67108864) === 67108864; -}; - -Promise.prototype._setLength = function (len) { - this._bitField = (this._bitField & -65536) | - (len & 65535); -}; - -Promise.prototype._setFulfilled = function () { - this._bitField = this._bitField | 33554432; - this._fireEvent("promiseFulfilled", this); -}; - -Promise.prototype._setRejected = function () { - this._bitField = this._bitField | 16777216; - this._fireEvent("promiseRejected", this); -}; - -Promise.prototype._setFollowing = function () { - this._bitField = this._bitField | 67108864; - this._fireEvent("promiseResolved", this); -}; - -Promise.prototype._setIsFinal = function () { - this._bitField = this._bitField | 4194304; -}; - -Promise.prototype._isFinal = function () { - return (this._bitField & 4194304) > 0; -}; - -Promise.prototype._unsetCancelled = function() { - this._bitField = this._bitField & (~65536); -}; - -Promise.prototype._setCancelled = function() { - this._bitField = this._bitField | 65536; - this._fireEvent("promiseCancelled", this); -}; - -Promise.prototype._setWillBeCancelled = function() { - this._bitField = this._bitField | 8388608; -}; - -Promise.prototype._setAsyncGuaranteed = function() { - if (async.hasCustomScheduler()) return; - this._bitField = this._bitField | 134217728; -}; - -Promise.prototype._receiverAt = function (index) { - var ret = index === 0 ? this._receiver0 : this[ - index * 4 - 4 + 3]; - if (ret === UNDEFINED_BINDING) { - return undefined; - } else if (ret === undefined && this._isBound()) { - return this._boundValue(); - } - return ret; -}; - -Promise.prototype._promiseAt = function (index) { - return this[ - index * 4 - 4 + 2]; -}; - -Promise.prototype._fulfillmentHandlerAt = function (index) { - return this[ - index * 4 - 4 + 0]; -}; - -Promise.prototype._rejectionHandlerAt = function (index) { - return this[ - index * 4 - 4 + 1]; -}; - -Promise.prototype._boundValue = function() {}; - -Promise.prototype._migrateCallback0 = function (follower) { - var bitField = follower._bitField; - var fulfill = follower._fulfillmentHandler0; - var reject = follower._rejectionHandler0; - var promise = follower._promise0; - var receiver = follower._receiverAt(0); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, promise, receiver, null); -}; - -Promise.prototype._migrateCallbackAt = function (follower, index) { - var fulfill = follower._fulfillmentHandlerAt(index); - var reject = follower._rejectionHandlerAt(index); - var promise = follower._promiseAt(index); - var receiver = follower._receiverAt(index); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, promise, receiver, null); -}; - -Promise.prototype._addCallbacks = function ( - fulfill, - reject, - promise, - receiver, - domain -) { - var index = this._length(); - - if (index >= 65535 - 4) { - index = 0; - this._setLength(0); - } - - if (index === 0) { - this._promise0 = promise; - this._receiver0 = receiver; - if (typeof fulfill === "function") { - this._fulfillmentHandler0 = - domain === null ? fulfill : util.domainBind(domain, fulfill); - } - if (typeof reject === "function") { - this._rejectionHandler0 = - domain === null ? reject : util.domainBind(domain, reject); - } - } else { - var base = index * 4 - 4; - this[base + 2] = promise; - this[base + 3] = receiver; - if (typeof fulfill === "function") { - this[base + 0] = - domain === null ? fulfill : util.domainBind(domain, fulfill); - } - if (typeof reject === "function") { - this[base + 1] = - domain === null ? reject : util.domainBind(domain, reject); - } - } - this._setLength(index + 1); - return index; -}; - -Promise.prototype._proxy = function (proxyable, arg) { - this._addCallbacks(undefined, undefined, arg, proxyable, null); -}; - -Promise.prototype._resolveCallback = function(value, shouldBind) { - if (((this._bitField & 117506048) !== 0)) return; - if (value === this) - return this._rejectCallback(makeSelfResolutionError(), false); - var maybePromise = tryConvertToPromise(value, this); - if (!(maybePromise instanceof Promise)) return this._fulfill(value); - - if (shouldBind) this._propagateFrom(maybePromise, 2); - - var promise = maybePromise._target(); - - if (promise === this) { - this._reject(makeSelfResolutionError()); - return; - } - - var bitField = promise._bitField; - if (((bitField & 50397184) === 0)) { - var len = this._length(); - if (len > 0) promise._migrateCallback0(this); - for (var i = 1; i < len; ++i) { - promise._migrateCallbackAt(this, i); - } - this._setFollowing(); - this._setLength(0); - this._setFollowee(promise); - } else if (((bitField & 33554432) !== 0)) { - this._fulfill(promise._value()); - } else if (((bitField & 16777216) !== 0)) { - this._reject(promise._reason()); - } else { - var reason = new CancellationError("late cancellation observer"); - promise._attachExtraTrace(reason); - this._reject(reason); - } -}; - -Promise.prototype._rejectCallback = -function(reason, synchronous, ignoreNonErrorWarnings) { - var trace = util.ensureErrorObject(reason); - var hasStack = trace === reason; - if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { - var message = "a promise was rejected with a non-error: " + - util.classString(reason); - this._warn(message, true); - } - this._attachExtraTrace(trace, synchronous ? hasStack : false); - this._reject(reason); -}; - -Promise.prototype._resolveFromExecutor = function (executor) { - if (executor === INTERNAL) return; - var promise = this; - this._captureStackTrace(); - this._pushContext(); - var synchronous = true; - var r = this._execute(executor, function(value) { - promise._resolveCallback(value); - }, function (reason) { - promise._rejectCallback(reason, synchronous); - }); - synchronous = false; - this._popContext(); - - if (r !== undefined) { - promise._rejectCallback(r, true); - } -}; - -Promise.prototype._settlePromiseFromHandler = function ( - handler, receiver, value, promise -) { - var bitField = promise._bitField; - if (((bitField & 65536) !== 0)) return; - promise._pushContext(); - var x; - if (receiver === APPLY) { - if (!value || typeof value.length !== "number") { - x = errorObj; - x.e = new TypeError("cannot .spread() a non-array: " + - util.classString(value)); - } else { - x = tryCatch(handler).apply(this._boundValue(), value); - } - } else { - x = tryCatch(handler).call(receiver, value); - } - var promiseCreated = promise._popContext(); - bitField = promise._bitField; - if (((bitField & 65536) !== 0)) return; - - if (x === NEXT_FILTER) { - promise._reject(value); - } else if (x === errorObj) { - promise._rejectCallback(x.e, false); - } else { - debug.checkForgottenReturns(x, promiseCreated, "", promise, this); - promise._resolveCallback(x); - } -}; - -Promise.prototype._target = function() { - var ret = this; - while (ret._isFollowing()) ret = ret._followee(); - return ret; -}; - -Promise.prototype._followee = function() { - return this._rejectionHandler0; -}; - -Promise.prototype._setFollowee = function(promise) { - this._rejectionHandler0 = promise; -}; - -Promise.prototype._settlePromise = function(promise, handler, receiver, value) { - var isPromise = promise instanceof Promise; - var bitField = this._bitField; - var asyncGuaranteed = ((bitField & 134217728) !== 0); - if (((bitField & 65536) !== 0)) { - if (isPromise) promise._invokeInternalOnCancel(); - - if (receiver instanceof PassThroughHandlerContext && - receiver.isFinallyHandler()) { - receiver.cancelPromise = promise; - if (tryCatch(handler).call(receiver, value) === errorObj) { - promise._reject(errorObj.e); - } - } else if (handler === reflectHandler) { - promise._fulfill(reflectHandler.call(receiver)); - } else if (receiver instanceof Proxyable) { - receiver._promiseCancelled(promise); - } else if (isPromise || promise instanceof PromiseArray) { - promise._cancel(); - } else { - receiver.cancel(); - } - } else if (typeof handler === "function") { - if (!isPromise) { - handler.call(receiver, value, promise); - } else { - if (asyncGuaranteed) promise._setAsyncGuaranteed(); - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (receiver instanceof Proxyable) { - if (!receiver._isResolved()) { - if (((bitField & 33554432) !== 0)) { - receiver._promiseFulfilled(value, promise); - } else { - receiver._promiseRejected(value, promise); - } - } - } else if (isPromise) { - if (asyncGuaranteed) promise._setAsyncGuaranteed(); - if (((bitField & 33554432) !== 0)) { - promise._fulfill(value); - } else { - promise._reject(value); - } - } -}; - -Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { - var handler = ctx.handler; - var promise = ctx.promise; - var receiver = ctx.receiver; - var value = ctx.value; - if (typeof handler === "function") { - if (!(promise instanceof Promise)) { - handler.call(receiver, value, promise); - } else { - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (promise instanceof Promise) { - promise._reject(value); - } -}; - -Promise.prototype._settlePromiseCtx = function(ctx) { - this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); -}; - -Promise.prototype._settlePromise0 = function(handler, value, bitField) { - var promise = this._promise0; - var receiver = this._receiverAt(0); - this._promise0 = undefined; - this._receiver0 = undefined; - this._settlePromise(promise, handler, receiver, value); -}; - -Promise.prototype._clearCallbackDataAtIndex = function(index) { - var base = index * 4 - 4; - this[base + 2] = - this[base + 3] = - this[base + 0] = - this[base + 1] = undefined; -}; - -Promise.prototype._fulfill = function (value) { - var bitField = this._bitField; - if (((bitField & 117506048) >>> 16)) return; - if (value === this) { - var err = makeSelfResolutionError(); - this._attachExtraTrace(err); - return this._reject(err); - } - this._setFulfilled(); - this._rejectionHandler0 = value; - - if ((bitField & 65535) > 0) { - if (((bitField & 134217728) !== 0)) { - this._settlePromises(); - } else { - async.settlePromises(this); - } - this._dereferenceTrace(); - } -}; - -Promise.prototype._reject = function (reason) { - var bitField = this._bitField; - if (((bitField & 117506048) >>> 16)) return; - this._setRejected(); - this._fulfillmentHandler0 = reason; - - if (this._isFinal()) { - return async.fatalError(reason, util.isNode); - } - - if ((bitField & 65535) > 0) { - async.settlePromises(this); - } else { - this._ensurePossibleRejectionHandled(); - } -}; - -Promise.prototype._fulfillPromises = function (len, value) { - for (var i = 1; i < len; i++) { - var handler = this._fulfillmentHandlerAt(i); - var promise = this._promiseAt(i); - var receiver = this._receiverAt(i); - this._clearCallbackDataAtIndex(i); - this._settlePromise(promise, handler, receiver, value); - } -}; - -Promise.prototype._rejectPromises = function (len, reason) { - for (var i = 1; i < len; i++) { - var handler = this._rejectionHandlerAt(i); - var promise = this._promiseAt(i); - var receiver = this._receiverAt(i); - this._clearCallbackDataAtIndex(i); - this._settlePromise(promise, handler, receiver, reason); - } -}; - -Promise.prototype._settlePromises = function () { - var bitField = this._bitField; - var len = (bitField & 65535); - - if (len > 0) { - if (((bitField & 16842752) !== 0)) { - var reason = this._fulfillmentHandler0; - this._settlePromise0(this._rejectionHandler0, reason, bitField); - this._rejectPromises(len, reason); - } else { - var value = this._rejectionHandler0; - this._settlePromise0(this._fulfillmentHandler0, value, bitField); - this._fulfillPromises(len, value); - } - this._setLength(0); - } - this._clearCancellationData(); -}; - -Promise.prototype._settledValue = function() { - var bitField = this._bitField; - if (((bitField & 33554432) !== 0)) { - return this._rejectionHandler0; - } else if (((bitField & 16777216) !== 0)) { - return this._fulfillmentHandler0; - } -}; - -function deferResolve(v) {this.promise._resolveCallback(v);} -function deferReject(v) {this.promise._rejectCallback(v, false);} - -Promise.defer = Promise.pending = function() { - debug.deprecated("Promise.defer", "new Promise"); - var promise = new Promise(INTERNAL); - return { - promise: promise, - resolve: deferResolve, - reject: deferReject - }; -}; - -util.notEnumerableProp(Promise, - "_makeSelfResolutionError", - makeSelfResolutionError); - -_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, - debug); -_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); -_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug); -_dereq_("./direct_resolve")(Promise); -_dereq_("./synchronous_inspection")(Promise); -_dereq_("./join")( - Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); -Promise.Promise = Promise; -Promise.version = "3.5.3"; - - util.toFastProperties(Promise); - util.toFastProperties(Promise.prototype); - function fillTypes(value) { - var p = new Promise(INTERNAL); - p._fulfillmentHandler0 = value; - p._rejectionHandler0 = value; - p._promise0 = value; - p._receiver0 = value; - } - // Complete slack tracking, opt out of field-type tracking and - // stabilize map - fillTypes({a: 1}); - fillTypes({b: 2}); - fillTypes({c: 3}); - fillTypes(1); - fillTypes(function(){}); - fillTypes(undefined); - fillTypes(false); - fillTypes(new Promise(INTERNAL)); - debug.setBounds(Async.firstLineError, util.lastLineError); - return Promise; - -}; - -},{"./async":1,"./bind":2,"./cancel":4,"./catch_filter":5,"./context":6,"./debuggability":7,"./direct_resolve":8,"./errors":9,"./es5":10,"./finally":11,"./join":12,"./method":13,"./nodeback":14,"./promise_array":16,"./synchronous_inspection":19,"./thenables":20,"./util":21}],16:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, - apiRejection, Proxyable) { -var util = _dereq_("./util"); -var isArray = util.isArray; - -function toResolutionValue(val) { - switch(val) { - case -2: return []; - case -3: return {}; - case -6: return new Map(); - } -} - -function PromiseArray(values) { - var promise = this._promise = new Promise(INTERNAL); - if (values instanceof Promise) { - promise._propagateFrom(values, 3); - } - promise._setOnCancel(this); - this._values = values; - this._length = 0; - this._totalResolved = 0; - this._init(undefined, -2); -} -util.inherits(PromiseArray, Proxyable); - -PromiseArray.prototype.length = function () { - return this._length; -}; - -PromiseArray.prototype.promise = function () { - return this._promise; -}; - -PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { - var values = tryConvertToPromise(this._values, this._promise); - if (values instanceof Promise) { - values = values._target(); - var bitField = values._bitField; - ; - this._values = values; - - if (((bitField & 50397184) === 0)) { - this._promise._setAsyncGuaranteed(); - return values._then( - init, - this._reject, - undefined, - this, - resolveValueIfEmpty - ); - } else if (((bitField & 33554432) !== 0)) { - values = values._value(); - } else if (((bitField & 16777216) !== 0)) { - return this._reject(values._reason()); - } else { - return this._cancel(); - } - } - values = util.asArray(values); - if (values === null) { - var err = apiRejection( - "expecting an array or an iterable object but got " + util.classString(values)).reason(); - this._promise._rejectCallback(err, false); - return; - } - - if (values.length === 0) { - if (resolveValueIfEmpty === -5) { - this._resolveEmptyArray(); - } - else { - this._resolve(toResolutionValue(resolveValueIfEmpty)); - } - return; - } - this._iterate(values); -}; - -PromiseArray.prototype._iterate = function(values) { - var len = this.getActualLength(values.length); - this._length = len; - this._values = this.shouldCopyValues() ? new Array(len) : this._values; - var result = this._promise; - var isResolved = false; - var bitField = null; - for (var i = 0; i < len; ++i) { - var maybePromise = tryConvertToPromise(values[i], result); - - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - bitField = maybePromise._bitField; - } else { - bitField = null; - } - - if (isResolved) { - if (bitField !== null) { - maybePromise.suppressUnhandledRejections(); - } - } else if (bitField !== null) { - if (((bitField & 50397184) === 0)) { - maybePromise._proxy(this, i); - this._values[i] = maybePromise; - } else if (((bitField & 33554432) !== 0)) { - isResolved = this._promiseFulfilled(maybePromise._value(), i); - } else if (((bitField & 16777216) !== 0)) { - isResolved = this._promiseRejected(maybePromise._reason(), i); - } else { - isResolved = this._promiseCancelled(i); - } - } else { - isResolved = this._promiseFulfilled(maybePromise, i); - } - } - if (!isResolved) result._setAsyncGuaranteed(); -}; - -PromiseArray.prototype._isResolved = function () { - return this._values === null; -}; - -PromiseArray.prototype._resolve = function (value) { - this._values = null; - this._promise._fulfill(value); -}; - -PromiseArray.prototype._cancel = function() { - if (this._isResolved() || !this._promise._isCancellable()) return; - this._values = null; - this._promise._cancel(); -}; - -PromiseArray.prototype._reject = function (reason) { - this._values = null; - this._promise._rejectCallback(reason, false); -}; - -PromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - this._resolve(this._values); - return true; - } - return false; -}; - -PromiseArray.prototype._promiseCancelled = function() { - this._cancel(); - return true; -}; - -PromiseArray.prototype._promiseRejected = function (reason) { - this._totalResolved++; - this._reject(reason); - return true; -}; - -PromiseArray.prototype._resultCancelled = function() { - if (this._isResolved()) return; - var values = this._values; - this._cancel(); - if (values instanceof Promise) { - values.cancel(); - } else { - for (var i = 0; i < values.length; ++i) { - if (values[i] instanceof Promise) { - values[i].cancel(); - } - } - } -}; - -PromiseArray.prototype.shouldCopyValues = function () { - return true; -}; - -PromiseArray.prototype.getActualLength = function (len) { - return len; -}; - -return PromiseArray; -}; - -},{"./util":21}],17:[function(_dereq_,module,exports){ -"use strict"; -function arrayMove(src, srcIndex, dst, dstIndex, len) { - for (var j = 0; j < len; ++j) { - dst[j + dstIndex] = src[j + srcIndex]; - src[j + srcIndex] = void 0; - } -} - -function Queue(capacity) { - this._capacity = capacity; - this._length = 0; - this._front = 0; -} - -Queue.prototype._willBeOverCapacity = function (size) { - return this._capacity < size; -}; - -Queue.prototype._pushOne = function (arg) { - var length = this.length(); - this._checkCapacity(length + 1); - var i = (this._front + length) & (this._capacity - 1); - this[i] = arg; - this._length = length + 1; -}; - -Queue.prototype.push = function (fn, receiver, arg) { - var length = this.length() + 3; - if (this._willBeOverCapacity(length)) { - this._pushOne(fn); - this._pushOne(receiver); - this._pushOne(arg); - return; - } - var j = this._front + length - 3; - this._checkCapacity(length); - var wrapMask = this._capacity - 1; - this[(j + 0) & wrapMask] = fn; - this[(j + 1) & wrapMask] = receiver; - this[(j + 2) & wrapMask] = arg; - this._length = length; -}; - -Queue.prototype.shift = function () { - var front = this._front, - ret = this[front]; - - this[front] = undefined; - this._front = (front + 1) & (this._capacity - 1); - this._length--; - return ret; -}; - -Queue.prototype.length = function () { - return this._length; -}; - -Queue.prototype._checkCapacity = function (size) { - if (this._capacity < size) { - this._resizeTo(this._capacity << 1); - } -}; - -Queue.prototype._resizeTo = function (capacity) { - var oldCapacity = this._capacity; - this._capacity = capacity; - var front = this._front; - var length = this._length; - var moveItemsCount = (front + length) & (oldCapacity - 1); - arrayMove(this, 0, this, oldCapacity, moveItemsCount); -}; - -module.exports = Queue; - -},{}],18:[function(_dereq_,module,exports){ -"use strict"; -var util = _dereq_("./util"); -var schedule; -var noAsyncScheduler = function() { - throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); -}; -var NativePromise = util.getNativePromise(); -if (util.isNode && typeof MutationObserver === "undefined") { - var GlobalSetImmediate = global.setImmediate; - var ProcessNextTick = process.nextTick; - schedule = util.isRecentNode - ? function(fn) { GlobalSetImmediate.call(global, fn); } - : function(fn) { ProcessNextTick.call(process, fn); }; -} else if (typeof NativePromise === "function" && - typeof NativePromise.resolve === "function") { - var nativePromise = NativePromise.resolve(); - schedule = function(fn) { - nativePromise.then(fn); - }; -} else if ((typeof MutationObserver !== "undefined") && - !(typeof window !== "undefined" && - window.navigator && - (window.navigator.standalone || window.cordova))) { - schedule = (function() { - var div = document.createElement("div"); - var opts = {attributes: true}; - var toggleScheduled = false; - var div2 = document.createElement("div"); - var o2 = new MutationObserver(function() { - div.classList.toggle("foo"); - toggleScheduled = false; - }); - o2.observe(div2, opts); - - var scheduleToggle = function() { - if (toggleScheduled) return; - toggleScheduled = true; - div2.classList.toggle("foo"); - }; - - return function schedule(fn) { - var o = new MutationObserver(function() { - o.disconnect(); - fn(); - }); - o.observe(div, opts); - scheduleToggle(); - }; - })(); -} else if (typeof setImmediate !== "undefined") { - schedule = function (fn) { - setImmediate(fn); - }; -} else if (typeof setTimeout !== "undefined") { - schedule = function (fn) { - setTimeout(fn, 0); - }; -} else { - schedule = noAsyncScheduler; -} -module.exports = schedule; - -},{"./util":21}],19:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -function PromiseInspection(promise) { - if (promise !== undefined) { - promise = promise._target(); - this._bitField = promise._bitField; - this._settledValueField = promise._isFateSealed() - ? promise._settledValue() : undefined; - } - else { - this._bitField = 0; - this._settledValueField = undefined; - } -} - -PromiseInspection.prototype._settledValue = function() { - return this._settledValueField; -}; - -var value = PromiseInspection.prototype.value = function () { - if (!this.isFulfilled()) { - throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - return this._settledValue(); -}; - -var reason = PromiseInspection.prototype.error = -PromiseInspection.prototype.reason = function () { - if (!this.isRejected()) { - throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - return this._settledValue(); -}; - -var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { - return (this._bitField & 33554432) !== 0; -}; - -var isRejected = PromiseInspection.prototype.isRejected = function () { - return (this._bitField & 16777216) !== 0; -}; - -var isPending = PromiseInspection.prototype.isPending = function () { - return (this._bitField & 50397184) === 0; -}; - -var isResolved = PromiseInspection.prototype.isResolved = function () { - return (this._bitField & 50331648) !== 0; -}; - -PromiseInspection.prototype.isCancelled = function() { - return (this._bitField & 8454144) !== 0; -}; - -Promise.prototype.__isCancelled = function() { - return (this._bitField & 65536) === 65536; -}; - -Promise.prototype._isCancelled = function() { - return this._target().__isCancelled(); -}; - -Promise.prototype.isCancelled = function() { - return (this._target()._bitField & 8454144) !== 0; -}; - -Promise.prototype.isPending = function() { - return isPending.call(this._target()); -}; - -Promise.prototype.isRejected = function() { - return isRejected.call(this._target()); -}; - -Promise.prototype.isFulfilled = function() { - return isFulfilled.call(this._target()); -}; - -Promise.prototype.isResolved = function() { - return isResolved.call(this._target()); -}; - -Promise.prototype.value = function() { - return value.call(this._target()); -}; - -Promise.prototype.reason = function() { - var target = this._target(); - target._unsetRejectionIsUnhandled(); - return reason.call(target); -}; - -Promise.prototype._value = function() { - return this._settledValue(); -}; - -Promise.prototype._reason = function() { - this._unsetRejectionIsUnhandled(); - return this._settledValue(); -}; - -Promise.PromiseInspection = PromiseInspection; -}; - -},{}],20:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var util = _dereq_("./util"); -var errorObj = util.errorObj; -var isObject = util.isObject; - -function tryConvertToPromise(obj, context) { - if (isObject(obj)) { - if (obj instanceof Promise) return obj; - var then = getThen(obj); - if (then === errorObj) { - if (context) context._pushContext(); - var ret = Promise.reject(then.e); - if (context) context._popContext(); - return ret; - } else if (typeof then === "function") { - if (isAnyBluebirdPromise(obj)) { - var ret = new Promise(INTERNAL); - obj._then( - ret._fulfill, - ret._reject, - undefined, - ret, - null - ); - return ret; - } - return doThenable(obj, then, context); - } - } - return obj; -} - -function doGetThen(obj) { - return obj.then; -} - -function getThen(obj) { - try { - return doGetThen(obj); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} - -var hasProp = {}.hasOwnProperty; -function isAnyBluebirdPromise(obj) { - try { - return hasProp.call(obj, "_promise0"); - } catch (e) { - return false; - } -} - -function doThenable(x, then, context) { - var promise = new Promise(INTERNAL); - var ret = promise; - if (context) context._pushContext(); - promise._captureStackTrace(); - if (context) context._popContext(); - var synchronous = true; - var result = util.tryCatch(then).call(x, resolve, reject); - synchronous = false; - - if (promise && result === errorObj) { - promise._rejectCallback(result.e, true, true); - promise = null; - } - - function resolve(value) { - if (!promise) return; - promise._resolveCallback(value); - promise = null; - } - - function reject(reason) { - if (!promise) return; - promise._rejectCallback(reason, synchronous, true); - promise = null; - } - return ret; -} - -return tryConvertToPromise; -}; - -},{"./util":21}],21:[function(_dereq_,module,exports){ -"use strict"; -var es5 = _dereq_("./es5"); -var canEvaluate = typeof navigator == "undefined"; - -var errorObj = {e: {}}; -var tryCatchTarget; -var globalObject = typeof self !== "undefined" ? self : - typeof window !== "undefined" ? window : - typeof global !== "undefined" ? global : - this !== undefined ? this : null; - -function tryCatcher() { - try { - var target = tryCatchTarget; - tryCatchTarget = null; - return target.apply(this, arguments); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} -function tryCatch(fn) { - tryCatchTarget = fn; - return tryCatcher; -} - -var inherits = function(Child, Parent) { - var hasProp = {}.hasOwnProperty; - - function T() { - this.constructor = Child; - this.constructor$ = Parent; - for (var propertyName in Parent.prototype) { - if (hasProp.call(Parent.prototype, propertyName) && - propertyName.charAt(propertyName.length-1) !== "$" - ) { - this[propertyName + "$"] = Parent.prototype[propertyName]; - } - } - } - T.prototype = Parent.prototype; - Child.prototype = new T(); - return Child.prototype; -}; - - -function isPrimitive(val) { - return val == null || val === true || val === false || - typeof val === "string" || typeof val === "number"; - -} - -function isObject(value) { - return typeof value === "function" || - typeof value === "object" && value !== null; -} - -function maybeWrapAsError(maybeError) { - if (!isPrimitive(maybeError)) return maybeError; - - return new Error(safeToString(maybeError)); -} - -function withAppended(target, appendee) { - var len = target.length; - var ret = new Array(len + 1); - var i; - for (i = 0; i < len; ++i) { - ret[i] = target[i]; - } - ret[i] = appendee; - return ret; -} - -function getDataPropertyOrDefault(obj, key, defaultValue) { - if (es5.isES5) { - var desc = Object.getOwnPropertyDescriptor(obj, key); - - if (desc != null) { - return desc.get == null && desc.set == null - ? desc.value - : defaultValue; - } - } else { - return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; - } -} - -function notEnumerableProp(obj, name, value) { - if (isPrimitive(obj)) return obj; - var descriptor = { - value: value, - configurable: true, - enumerable: false, - writable: true - }; - es5.defineProperty(obj, name, descriptor); - return obj; -} - -function thrower(r) { - throw r; -} - -var inheritedDataKeys = (function() { - var excludedPrototypes = [ - Array.prototype, - Object.prototype, - Function.prototype - ]; - - var isExcludedProto = function(val) { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (excludedPrototypes[i] === val) { - return true; - } - } - return false; - }; - - if (es5.isES5) { - var getKeys = Object.getOwnPropertyNames; - return function(obj) { - var ret = []; - var visitedKeys = Object.create(null); - while (obj != null && !isExcludedProto(obj)) { - var keys; - try { - keys = getKeys(obj); - } catch (e) { - return ret; - } - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (visitedKeys[key]) continue; - visitedKeys[key] = true; - var desc = Object.getOwnPropertyDescriptor(obj, key); - if (desc != null && desc.get == null && desc.set == null) { - ret.push(key); - } - } - obj = es5.getPrototypeOf(obj); - } - return ret; - }; - } else { - var hasProp = {}.hasOwnProperty; - return function(obj) { - if (isExcludedProto(obj)) return []; - var ret = []; - - /*jshint forin:false */ - enumeration: for (var key in obj) { - if (hasProp.call(obj, key)) { - ret.push(key); - } else { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (hasProp.call(excludedPrototypes[i], key)) { - continue enumeration; - } - } - ret.push(key); - } - } - return ret; - }; - } - -})(); - -var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; -function isClass(fn) { - try { - if (typeof fn === "function") { - var keys = es5.names(fn.prototype); - - var hasMethods = es5.isES5 && keys.length > 1; - var hasMethodsOtherThanConstructor = keys.length > 0 && - !(keys.length === 1 && keys[0] === "constructor"); - var hasThisAssignmentAndStaticMethods = - thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; - - if (hasMethods || hasMethodsOtherThanConstructor || - hasThisAssignmentAndStaticMethods) { - return true; - } - } - return false; - } catch (e) { - return false; - } -} - -function toFastProperties(obj) { - /*jshint -W027,-W055,-W031*/ - function FakeConstructor() {} - FakeConstructor.prototype = obj; - var receiver = new FakeConstructor(); - function ic() { - return typeof receiver.foo; - } - ic(); - ic(); - return obj; - eval(obj); -} - -var rident = /^[a-z$_][a-z$_0-9]*$/i; -function isIdentifier(str) { - return rident.test(str); -} - -function filledRange(count, prefix, suffix) { - var ret = new Array(count); - for(var i = 0; i < count; ++i) { - ret[i] = prefix + i + suffix; - } - return ret; -} - -function safeToString(obj) { - try { - return obj + ""; - } catch (e) { - return "[no string representation]"; - } -} - -function isError(obj) { - return obj instanceof Error || - (obj !== null && - typeof obj === "object" && - typeof obj.message === "string" && - typeof obj.name === "string"); -} - -function markAsOriginatingFromRejection(e) { - try { - notEnumerableProp(e, "isOperational", true); - } - catch(ignore) {} -} - -function originatesFromRejection(e) { - if (e == null) return false; - return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || - e["isOperational"] === true); -} - -function canAttachTrace(obj) { - return isError(obj) && es5.propertyIsWritable(obj, "stack"); -} - -var ensureErrorObject = (function() { - if (!("stack" in new Error())) { - return function(value) { - if (canAttachTrace(value)) return value; - try {throw new Error(safeToString(value));} - catch(err) {return err;} - }; - } else { - return function(value) { - if (canAttachTrace(value)) return value; - return new Error(safeToString(value)); - }; - } -})(); - -function classString(obj) { - return {}.toString.call(obj); -} - -function copyDescriptors(from, to, filter) { - var keys = es5.names(from); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (filter(key)) { - try { - es5.defineProperty(to, key, es5.getDescriptor(from, key)); - } catch (ignore) {} - } - } -} - -var asArray = function(v) { - if (es5.isArray(v)) { - return v; - } - return null; -}; - -if (typeof Symbol !== "undefined" && Symbol.iterator) { - var ArrayFrom = typeof Array.from === "function" ? function(v) { - return Array.from(v); - } : function(v) { - var ret = []; - var it = v[Symbol.iterator](); - var itResult; - while (!((itResult = it.next()).done)) { - ret.push(itResult.value); - } - return ret; - }; - - asArray = function(v) { - if (es5.isArray(v)) { - return v; - } else if (v != null && typeof v[Symbol.iterator] === "function") { - return ArrayFrom(v); - } - return null; - }; -} - -var isNode = typeof process !== "undefined" && - classString(process).toLowerCase() === "[object process]"; - -var hasEnvVariables = typeof process !== "undefined" && - typeof process.env !== "undefined"; - -function env(key) { - return hasEnvVariables ? process.env[key] : undefined; -} - -function getNativePromise() { - if (typeof Promise === "function") { - try { - var promise = new Promise(function(){}); - if ({}.toString.call(promise) === "[object Promise]") { - return Promise; - } - } catch (e) {} - } -} - -function domainBind(self, cb) { - return self.bind(cb); -} - -var ret = { - isClass: isClass, - isIdentifier: isIdentifier, - inheritedDataKeys: inheritedDataKeys, - getDataPropertyOrDefault: getDataPropertyOrDefault, - thrower: thrower, - isArray: es5.isArray, - asArray: asArray, - notEnumerableProp: notEnumerableProp, - isPrimitive: isPrimitive, - isObject: isObject, - isError: isError, - canEvaluate: canEvaluate, - errorObj: errorObj, - tryCatch: tryCatch, - inherits: inherits, - withAppended: withAppended, - maybeWrapAsError: maybeWrapAsError, - toFastProperties: toFastProperties, - filledRange: filledRange, - toString: safeToString, - canAttachTrace: canAttachTrace, - ensureErrorObject: ensureErrorObject, - originatesFromRejection: originatesFromRejection, - markAsOriginatingFromRejection: markAsOriginatingFromRejection, - classString: classString, - copyDescriptors: copyDescriptors, - hasDevTools: typeof chrome !== "undefined" && chrome && - typeof chrome.loadTimes === "function", - isNode: isNode, - hasEnvVariables: hasEnvVariables, - env: env, - global: globalObject, - getNativePromise: getNativePromise, - domainBind: domainBind -}; -ret.isRecentNode = ret.isNode && (function() { - var version = process.versions.node.split(".").map(Number); - return (version[0] === 0 && version[1] > 10) || (version[0] > 0); -})(); - -if (ret.isNode) ret.toFastProperties(process); - -try {throw new Error(); } catch (e) {ret.lastLineError = e;} -module.exports = ret; - -},{"./es5":10}]},{},[3])(3) -}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.core.min.js b/truebit-implementation/node_modules/bluebird/js/browser/bluebird.core.min.js deleted file mode 100644 index 25fe9175..00000000 --- a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.core.min.js +++ /dev/null @@ -1,31 +0,0 @@ -/* @preserve - * The MIT License (MIT) - * - * Copyright (c) 2013-2018 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * 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. - * - */ -/** - * bluebird build version 3.5.3 - * Features enabled: core - * Features disabled: race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each -*/ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Promise=t()}}(function(){var t,e,n;return function r(t,e,n){function i(a,s){if(!e[a]){if(!t[a]){var c="function"==typeof _dereq_&&_dereq_;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var u=e[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return i(n?n:e)},u,u.exports,r,t,e,n)}return e[a].exports}for(var o="function"==typeof _dereq_&&_dereq_,a=0;a0;)c(t)}function c(t){var e=t.shift();if("function"!=typeof e)e._settlePromises();else{var n=t.shift(),r=t.shift();e.call(n,r)}}var l;try{throw new Error}catch(u){l=u}var p=t("./schedule"),f=t("./queue"),h=t("./util");r.prototype.setScheduler=function(t){var e=this._schedule;return this._schedule=t,this._customScheduler=!0,e},r.prototype.hasCustomScheduler=function(){return this._customScheduler},r.prototype.enableTrampoline=function(){this._trampolineEnabled=!0},r.prototype.disableTrampolineIfNecessary=function(){h.hasDevTools&&(this._trampolineEnabled=!1)},r.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},r.prototype.fatalError=function(t,e){e?(process.stderr.write("Fatal "+(t instanceof Error?t.stack:t)+"\n"),process.exit(2)):this.throwLater(t)},r.prototype.throwLater=function(t,e){if(1===arguments.length&&(e=t,t=function(){throw e}),"undefined"!=typeof setTimeout)setTimeout(function(){t(e)},0);else try{this._schedule(function(){t(e)})}catch(n){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")}},h.hasDevTools?(r.prototype.invokeLater=function(t,e,n){this._trampolineEnabled?i.call(this,t,e,n):this._schedule(function(){setTimeout(function(){t.call(e,n)},100)})},r.prototype.invoke=function(t,e,n){this._trampolineEnabled?o.call(this,t,e,n):this._schedule(function(){t.call(e,n)})},r.prototype.settlePromises=function(t){this._trampolineEnabled?a.call(this,t):this._schedule(function(){t._settlePromises()})}):(r.prototype.invokeLater=i,r.prototype.invoke=o,r.prototype.settlePromises=a),r.prototype._drainQueues=function(){s(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,s(this._lateQueue)},r.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},r.prototype._reset=function(){this._isTickUsed=!1},e.exports=r,e.exports.firstLineError=l},{"./queue":17,"./schedule":18,"./util":21}],2:[function(t,e,n){"use strict";e.exports=function(t,e,n,r){var i=!1,o=function(t,e){this._reject(e)},a=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(o,o,null,this,t)},s=function(t,e){0===(50397184&this._bitField)&&this._resolveCallback(e.target)},c=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(o){i||(i=!0,t.prototype._propagateFrom=r.propagateFromFunction(),t.prototype._boundValue=r.boundValueFunction());var l=n(o),u=new t(e);u._propagateFrom(this,1);var p=this._target();if(u._setBoundTo(l),l instanceof t){var f={promiseRejectionQueued:!1,promise:u,target:p,bindingPromise:l};p._then(e,a,void 0,u,f),l._then(s,c,void 0,u,f),u._setOnCancel(l)}else u._resolveCallback(p);return u},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=2097152|this._bitField,this._boundTo=t):this._bitField=-2097153&this._bitField},t.prototype._isBound=function(){return 2097152===(2097152&this._bitField)},t.bind=function(e,n){return t.resolve(n).bind(e)}}},{}],3:[function(t,e,n){"use strict";function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise")();o.noConflict=r,e.exports=o},{"./promise":15}],4:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util"),a=o.tryCatch,s=o.errorObj,c=e._async;e.prototype["break"]=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var t=this,e=t;t._isCancellable();){if(!t._cancelBy(e)){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}var n=t._cancellationParent;if(null==n||!n._isCancellable()){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}t._isFollowing()&&t._followee().cancel(),t._setWillBeCancelled(),e=t,t=n}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(t){return t===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),this._enoughBranchesHaveCancelled()?(this._invokeOnCancel(),!0):!1)},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this._isCancellable()&&(this._setCancelled(),c.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(t,e){if(o.isArray(t))for(var n=0;n=0?o[t]:void 0}var i=!1,o=[];return t.prototype._promiseCreated=function(){},t.prototype._pushContext=function(){},t.prototype._popContext=function(){return null},t._peekContext=t.prototype._peekContext=function(){},e.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,o.push(this._trace))},e.prototype._popContext=function(){if(void 0!==this._trace){var t=o.pop(),e=t._promiseCreated;return t._promiseCreated=null,e}return null},e.CapturedTrace=null,e.create=n,e.deactivateLongStackTraces=function(){},e.activateLongStackTraces=function(){var n=t.prototype._pushContext,o=t.prototype._popContext,a=t._peekContext,s=t.prototype._peekContext,c=t.prototype._promiseCreated;e.deactivateLongStackTraces=function(){t.prototype._pushContext=n,t.prototype._popContext=o,t._peekContext=a,t.prototype._peekContext=s,t.prototype._promiseCreated=c,i=!1},i=!0,t.prototype._pushContext=e.prototype._pushContext,t.prototype._popContext=e.prototype._popContext,t._peekContext=t.prototype._peekContext=r,t.prototype._promiseCreated=function(){var t=this._peekContext();t&&null==t._promiseCreated&&(t._promiseCreated=this)}},e}},{}],7:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,e){return{promise:e}}function i(){return!1}function o(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof t)throw new TypeError("onCancel must be a function, got: "+H.toString(t));r._attachCancellationCallback(t)})}catch(i){return i}}function a(t){if(!this._isCancellable())return this;var e=this._onCancel();void 0!==e?H.isArray(e)?e.push(t):this._setOnCancel([e,t]):this._setOnCancel(t)}function s(){return this._onCancelField}function c(t){this._onCancelField=t}function l(){this._cancellationParent=void 0,this._onCancelField=void 0}function u(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branchesRemainingToCancel;void 0===n&&(n=0),t._branchesRemainingToCancel=n+1}0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function p(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function f(){var t=this._boundTo;return void 0!==t&&t instanceof e?t.isFulfilled()?t.value():void 0:t}function h(){this._trace=new O(this._peekContext())}function _(t,e){if(V(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var r=k(t);H.notEnumerableProp(t,"stack",r.message+"\n"+r.stack.join("\n")),H.notEnumerableProp(t,"__stackCleaned__",!0)}}}function d(){this._trace=void 0}function v(t,e,n,r,i){if(void 0===t&&null!==e&&J){if(void 0!==i&&i._returnedNonUndefined())return;if(0===(65535&r._bitField))return;n&&(n+=" ");var o="",a="";if(e._trace){for(var s=e._trace.stack.split("\n"),c=w(s),l=c.length-1;l>=0;--l){var u=c[l];if(!q.test(u)){var p=u.match(G);p&&(o="at "+p[1]+":"+p[2]+":"+p[3]+" ");break}}if(c.length>0)for(var f=c[0],l=0;l0&&(a="\n"+s[l-1]);break}}var h="a promise was created in a "+n+"handler "+o+"but was not returned from it, see http://goo.gl/rRqMUw"+a;r._warn(h,!0,e)}}function y(t,e){var n=t+" is deprecated and will be removed in a future version.";return e&&(n+=" Use "+e+" instead."),g(n)}function g(t,n,r){if(st.warnings){var i,o=new I(t);if(n)r._attachExtraTrace(o);else if(st.longStackTraces&&(i=e._peekContext()))i.attachExtraTrace(o);else{var a=k(o);o.stack=a.message+"\n"+a.stack.join("\n")}nt("warning",o)||j(o,"",!0)}}function m(t,e){for(var n=0;n=0;--s)if(r[s]===o){a=s;break}for(var s=a;s>=0;--s){var c=r[s];if(e[i]!==c)break;e.pop(),i--}e=r}}function w(t){for(var e=[],n=0;n0&&"SyntaxError"!=t.name&&(e=e.slice(n)),e}function k(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&e.length>0?E(t):[" (No stack trace)"],{message:n,stack:"SyntaxError"==t.name?e:w(e)}}function j(t,e,n){if("undefined"!=typeof console){var r;if(H.isObject(t)){var i=t.stack;r=e+W(i,t)}else r=e+String(t);"function"==typeof L?L(r,n):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}}function F(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionHandled"===t?e(r):e(n,r))}catch(o){U.throwLater(o)}"unhandledRejection"===t?nt(t,n,r)||i||j(n,"Unhandled rejection "):nt(t,r)}function T(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t&&"function"==typeof t.toString?t.toString():H.toString(t);var n=/\[object [a-zA-Z0-9$_]+\]/;if(n.test(e))try{var r=JSON.stringify(t);e=r}catch(i){}0===e.length&&(e="(empty array)")}return"(<"+P(e)+">, no stack trace)"}function P(t){var e=41;return t.lengtha||0>s||!n||!r||n!==r||a>=s||(it=function(t){if(Q.test(t))return!0;var e=S(t);return e&&e.fileName===n&&a<=e.line&&e.line<=s?!0:!1})}}function O(t){this._parent=t,this._promisesCreated=0;var e=this._length=1+(void 0===t?0:t._length);at(this,O),e>32&&this.uncycle()}var A,N,L,B=e._getDomain,U=e._async,I=t("./errors").Warning,H=t("./util"),D=t("./es5"),V=H.canAttachTrace,Q=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,q=/\((?:timers\.js):\d+:\d+\)/,G=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,M=null,W=null,$=!1,z=!(0==H.env("BLUEBIRD_DEBUG")||!H.env("BLUEBIRD_DEBUG")&&"development"!==H.env("NODE_ENV")),X=!(0==H.env("BLUEBIRD_WARNINGS")||!z&&!H.env("BLUEBIRD_WARNINGS")),K=!(0==H.env("BLUEBIRD_LONG_STACK_TRACES")||!z&&!H.env("BLUEBIRD_LONG_STACK_TRACES")),J=0!=H.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(X||!!H.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var t=this._target();t._bitField=-1048577&t._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){if(0===(524288&this._bitField)){this._setRejectionIsUnhandled();var t=this;setTimeout(function(){t._notifyUnhandledRejection()},1)}},e.prototype._notifyUnhandledRejectionIsHandled=function(){F("rejectionHandled",A,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!==(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._settledValue();this._setUnhandledRejectionIsNotified(),F("unhandledRejection",N,t,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(t,e,n){return g(t,e,n||this)},e.onPossiblyUnhandledRejection=function(t){var e=B();N="function"==typeof t?null===e?t:H.domainBind(e,t):void 0},e.onUnhandledRejectionHandled=function(t){var e=B();A="function"==typeof t?null===e?t:H.domainBind(e,t):void 0};var Y=function(){};e.longStackTraces=function(){if(U.haveItemsQueued()&&!st.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!st.longStackTraces&&R()){var t=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace,i=e.prototype._dereferenceTrace;st.longStackTraces=!0,Y=function(){if(U.haveItemsQueued()&&!st.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=t,e.prototype._attachExtraTrace=r,e.prototype._dereferenceTrace=i,n.deactivateLongStackTraces(),U.enableTrampoline(),st.longStackTraces=!1},e.prototype._captureStackTrace=h,e.prototype._attachExtraTrace=_,e.prototype._dereferenceTrace=d,n.activateLongStackTraces(),U.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return st.longStackTraces&&R()};var Z=function(){try{if("function"==typeof CustomEvent){var t=new CustomEvent("CustomEvent");return H.global.dispatchEvent(t),function(t,e){var n={detail:e,cancelable:!0};D.defineProperty(n,"promise",{value:e.promise}),D.defineProperty(n,"reason",{value:e.reason});var r=new CustomEvent(t.toLowerCase(),n);return!H.global.dispatchEvent(r)}}if("function"==typeof Event){var t=new Event("CustomEvent");return H.global.dispatchEvent(t),function(t,e){var n=new Event(t.toLowerCase(),{cancelable:!0});return n.detail=e,D.defineProperty(n,"promise",{value:e.promise}),D.defineProperty(n,"reason",{value:e.reason}),!H.global.dispatchEvent(n)}}var t=document.createEvent("CustomEvent");return t.initCustomEvent("testingtheevent",!1,!0,{}),H.global.dispatchEvent(t),function(t,e){var n=document.createEvent("CustomEvent");return n.initCustomEvent(t.toLowerCase(),!1,!0,e),!H.global.dispatchEvent(n)}}catch(e){}return function(){return!1}}(),tt=function(){return H.isNode?function(){return process.emit.apply(process,arguments)}:H.global?function(t){var e="on"+t.toLowerCase(),n=H.global[e];return n?(n.apply(H.global,[].slice.call(arguments,1)),!0):!1}:function(){return!1}}(),et={promiseCreated:r,promiseFulfilled:r,promiseRejected:r,promiseResolved:r,promiseCancelled:r,promiseChained:function(t,e,n){return{promise:e,child:n}},warning:function(t,e){return{warning:e}},unhandledRejection:function(t,e,n){return{reason:e,promise:n}},rejectionHandled:r},nt=function(t){var e=!1;try{e=tt.apply(null,arguments)}catch(n){U.throwLater(n),e=!0}var r=!1;try{r=Z(t,et[t].apply(null,arguments))}catch(n){U.throwLater(n),r=!0}return r||e};e.config=function(t){if(t=Object(t),"longStackTraces"in t&&(t.longStackTraces?e.longStackTraces():!t.longStackTraces&&e.hasLongStackTraces()&&Y()),"warnings"in t){var n=t.warnings;st.warnings=!!n,J=st.warnings,H.isObject(n)&&"wForgottenReturn"in n&&(J=!!n.wForgottenReturn)}if("cancellation"in t&&t.cancellation&&!st.cancellation){if(U.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=l,e.prototype._propagateFrom=u,e.prototype._onCancel=s,e.prototype._setOnCancel=c,e.prototype._attachCancellationCallback=a,e.prototype._execute=o,rt=u,st.cancellation=!0}return"monitoring"in t&&(t.monitoring&&!st.monitoring?(st.monitoring=!0,e.prototype._fireEvent=nt):!t.monitoring&&st.monitoring&&(st.monitoring=!1,e.prototype._fireEvent=i)),e},e.prototype._fireEvent=i,e.prototype._execute=function(t,e,n){try{t(e,n)}catch(r){return r}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(t){},e.prototype._attachCancellationCallback=function(t){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._dereferenceTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(t,e){};var rt=p,it=function(){return!1},ot=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;H.inherits(O,Error),n.CapturedTrace=O,O.prototype.uncycle=function(){var t=this._length;if(!(2>t)){for(var e=[],n={},r=0,i=this;void 0!==i;++r)e.push(i),i=i._parent;t=this._length=r;for(var r=t-1;r>=0;--r){var o=e[r].stack;void 0===n[o]&&(n[o]=r)}for(var r=0;t>r;++r){var a=e[r].stack,s=n[a];if(void 0!==s&&s!==r){s>0&&(e[s-1]._parent=void 0,e[s-1]._length=1),e[r]._parent=void 0,e[r]._length=1;var c=r>0?e[r-1]:this;t-1>s?(c._parent=e[s+1],c._parent.uncycle(),c._length=c._parent._length+1):(c._parent=void 0,c._length=1);for(var l=c._length+1,u=r-2;u>=0;--u)e[u]._length=l,l++;return}}}},O.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var e=k(t),n=e.message,r=[e.stack],i=this;void 0!==i;)r.push(w(i.stack.split("\n"))),i=i._parent;C(r),b(r),H.notEnumerableProp(t,"stack",m(n,r)),H.notEnumerableProp(t,"__stackCleaned__",!0)}};var at=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():T(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,M=t,W=e;var n=Error.captureStackTrace;return it=function(t){return Q.test(t)},function(t,e){Error.stackTraceLimit+=6,n(t,e),Error.stackTraceLimit-=6}}var r=new Error;if("string"==typeof r.stack&&r.stack.split("\n")[0].indexOf("stackDetection@")>=0)return M=/@/,W=e,$=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(o){i="stack"in o}return"stack"in r||!i||"number"!=typeof Error.stackTraceLimit?(W=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?T(e):e.toString()},null):(M=t,W=e,function(t){Error.stackTraceLimit+=6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit-=6})}([]);"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(L=function(t){console.warn(t)},H.isNode&&process.stderr.isTTY?L=function(t,e){var n=e?"":"";console.warn(n+t+"\n")}:H.isNode||"string"!=typeof(new Error).stack||(L=function(t,e){console.warn("%c"+t,e?"color: darkorange":"color: red")}));var st={warnings:X,longStackTraces:!1,cancellation:!1,monitoring:!1};return K&&e.longStackTraces(),{longStackTraces:function(){return st.longStackTraces},warnings:function(){return st.warnings},cancellation:function(){return st.cancellation},monitoring:function(){return st.monitoring},propagateFromFunction:function(){return rt},boundValueFunction:function(){return f},checkForgottenReturns:v,setBounds:x,warn:g,deprecated:y,CapturedTrace:O,fireDomEvent:Z,fireGlobalEvent:tt}}},{"./errors":9,"./es5":10,"./util":21}],8:[function(t,e,n){"use strict";e.exports=function(t){function e(){return this.value}function n(){throw this.reason}t.prototype["return"]=t.prototype.thenReturn=function(n){return n instanceof t&&n.suppressUnhandledRejections(),this._then(e,void 0,void 0,{value:n},void 0)},t.prototype["throw"]=t.prototype.thenThrow=function(t){return this._then(n,void 0,void 0,{reason:t},void 0)},t.prototype.catchThrow=function(t){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:t},void 0);var e=arguments[1],r=function(){throw e};return this.caught(t,r)},t.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof t&&n.suppressUnhandledRejections(),this._then(void 0,e,void 0,{value:n},void 0);var r=arguments[1];r instanceof t&&r.suppressUnhandledRejections();var i=function(){return r};return this.caught(n,i)}}},{}],9:[function(t,e,n){"use strict";function r(t,e){function n(r){return this instanceof n?(p(this,"message","string"==typeof r?r:e),p(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new n(r)}return u(n,Error),n}function i(t){return this instanceof i?(p(this,"name","OperationalError"),p(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(p(this,"message",t.message),p(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,a,s=t("./es5"),c=s.freeze,l=t("./util"),u=l.inherits,p=l.notEnumerableProp,f=r("Warning","warning"),h=r("CancellationError","cancellation error"),_=r("TimeoutError","timeout error"),d=r("AggregateError","aggregate error");try{o=TypeError,a=RangeError}catch(v){o=r("TypeError","type error"),a=r("RangeError","range error")}for(var y="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),g=0;g1?t.cancelPromise._reject(e):t.cancelPromise._cancel(),t.cancelPromise=null,!0):!1}function s(){return l.call(this,this.promise._target()._settledValue())}function c(t){return a(this,t)?void 0:(f.e=t,f)}function l(t){var i=this.promise,l=this.handler;if(!this.called){this.called=!0;var u=this.isFinallyHandler()?l.call(i._boundValue()):l.call(i._boundValue(),t);if(u===r)return u;if(void 0!==u){i._setReturnedNonUndefined();var h=n(u,i);if(h instanceof e){if(null!=this.cancelPromise){if(h._isCancelled()){var _=new p("late cancellation observer");return i._attachExtraTrace(_),f.e=_,f}h.isPending()&&h._attachCancellationCallback(new o(this))}return h._then(s,c,void 0,this,void 0)}}}return i.isRejected()?(a(this),f.e=t,f):(a(this),t)}var u=t("./util"),p=e.CancellationError,f=u.errorObj,h=t("./catch_filter")(r);return i.prototype.isFinallyHandler=function(){return 0===this.type},o.prototype._resultCancelled=function(){a(this.finallyHandler)},e.prototype._passThrough=function(t,e,n,r){return"function"!=typeof t?this.then():this._then(n,r,void 0,new i(this,e,t),void 0)},e.prototype.lastly=e.prototype["finally"]=function(t){return this._passThrough(t,0,l,l)},e.prototype.tap=function(t){return this._passThrough(t,1,l)},e.prototype.tapCatch=function(t){var n=arguments.length;if(1===n)return this._passThrough(t,1,void 0,l);var r,i=new Array(n-1),o=0;for(r=0;n-1>r;++r){var a=arguments[r];if(!u.isObject(a))return e.reject(new TypeError("tapCatch statement predicate: expecting an object but got "+u.classString(a)));i[o++]=a}i.length=o;var s=arguments[r];return this._passThrough(h(i,s,this),1,void 0,l)},i}},{"./catch_filter":5,"./util":21}],12:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,a){var s=t("./util");s.canEvaluate,s.tryCatch,s.errorObj;e.join=function(){var t,e=arguments.length-1;if(e>0&&"function"==typeof arguments[e]){t=arguments[e];var r}var i=[].slice.call(arguments);t&&i.pop();var r=new n(i).promise();return void 0!==t?r.spread(t):r}}},{"./util":21}],13:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){var a=t("./util"),s=a.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+a.classString(t));return function(){var r=new e(n);r._captureStackTrace(),r._pushContext();var i=s(t).apply(this,arguments),a=r._popContext();return o.checkForgottenReturns(i,a,"Promise.method",r),r._resolveFromSyncValue(i),r}},e.attempt=e["try"]=function(t){if("function"!=typeof t)return i("expecting a function but got "+a.classString(t));var r=new e(n);r._captureStackTrace(),r._pushContext();var c;if(arguments.length>1){o.deprecated("calling Promise.try with more than 1 argument");var l=arguments[1],u=arguments[2];c=a.isArray(l)?s(t).apply(u,l):s(t).call(u,l)}else c=s(t)();var p=r._popContext();return o.checkForgottenReturns(c,p,"Promise.try",r),r._resolveFromSyncValue(c),r},e.prototype._resolveFromSyncValue=function(t){t===a.errorObj?this._rejectCallback(t.e,!1):this._resolveCallback(t,!0)}}},{"./util":21}],14:[function(t,e,n){"use strict";function r(t){return t instanceof Error&&u.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(r(t)){e=new l(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var n=u.keys(t),i=0;i1){var n,r=new Array(e-1),i=0;for(n=0;e-1>n;++n){var o=arguments[n];if(!h.isObject(o))return p("Catch statement predicate: expecting an object but got "+h.classString(o));r[i++]=o}return r.length=i,t=arguments[n],this.then(void 0,P(r,t,this))}return this.then(void 0,t)},i.prototype.reflect=function(){return this._then(u,u,void 0,this,void 0)},i.prototype.then=function(t,e){if(F.warnings()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){ -var n=".then() only accepts functions but was passed: "+h.classString(t);arguments.length>1&&(n+=", "+h.classString(e)),this._warn(n)}return this._then(t,e,void 0,void 0,void 0)},i.prototype.done=function(t,e){var n=this._then(t,e,void 0,void 0,void 0);n._setIsFinal()},i.prototype.spread=function(t){return"function"!=typeof t?p("expecting a function but got "+h.classString(t)):this.all()._then(t,void 0,void 0,C,void 0)},i.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},i.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new k(this).promise()},i.prototype.error=function(t){return this.caught(h.originatesFromRejection,t)},i.getNewLibraryCopy=e.exports,i.is=function(t){return t instanceof i},i.fromNode=i.fromCallback=function(t){var e=new i(b);e._captureStackTrace();var n=arguments.length>1?!!Object(arguments[1]).multiArgs:!1,r=x(t)(R(e,n));return r===S&&e._rejectCallback(r.e,!0),e._isFateSealed()||e._setAsyncGuaranteed(),e},i.all=function(t){return new k(t).promise()},i.cast=function(t){var e=E(t);return e instanceof i||(e=new i(b),e._captureStackTrace(),e._setFulfilled(),e._rejectionHandler0=t),e},i.resolve=i.fulfilled=i.cast,i.reject=i.rejected=function(t){var e=new i(b);return e._captureStackTrace(),e._rejectCallback(t,!0),e},i.setScheduler=function(t){if("function"!=typeof t)throw new g("expecting a function but got "+h.classString(t));return v.setScheduler(t)},i.prototype._then=function(t,e,n,r,o){var a=void 0!==o,s=a?o:new i(b),l=this._target(),u=l._bitField;a||(s._propagateFrom(this,3),s._captureStackTrace(),void 0===r&&0!==(2097152&this._bitField)&&(r=0!==(50397184&u)?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,s));var p=c();if(0!==(50397184&u)){var f,_,d=l._settlePromiseCtx;0!==(33554432&u)?(_=l._rejectionHandler0,f=t):0!==(16777216&u)?(_=l._fulfillmentHandler0,f=e,l._unsetRejectionIsUnhandled()):(d=l._settlePromiseLateCancellationObserver,_=new m("late cancellation observer"),l._attachExtraTrace(_),f=e),v.invoke(d,l,{handler:null===p?f:"function"==typeof f&&h.domainBind(p,f),promise:s,receiver:r,value:_})}else l._addCallbacks(t,e,s,r,p);return s},i.prototype._length=function(){return 65535&this._bitField},i.prototype._isFateSealed=function(){return 0!==(117506048&this._bitField)},i.prototype._isFollowing=function(){return 67108864===(67108864&this._bitField)},i.prototype._setLength=function(t){this._bitField=-65536&this._bitField|65535&t},i.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},i.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},i.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},i.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},i.prototype._isFinal=function(){return(4194304&this._bitField)>0},i.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},i.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},i.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},i.prototype._setAsyncGuaranteed=function(){v.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},i.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[4*t-4+3];return e===f?void 0:void 0===e&&this._isBound()?this._boundValue():e},i.prototype._promiseAt=function(t){return this[4*t-4+2]},i.prototype._fulfillmentHandlerAt=function(t){return this[4*t-4+0]},i.prototype._rejectionHandlerAt=function(t){return this[4*t-4+1]},i.prototype._boundValue=function(){},i.prototype._migrateCallback0=function(t){var e=(t._bitField,t._fulfillmentHandler0),n=t._rejectionHandler0,r=t._promise0,i=t._receiverAt(0);void 0===i&&(i=f),this._addCallbacks(e,n,r,i,null)},i.prototype._migrateCallbackAt=function(t,e){var n=t._fulfillmentHandlerAt(e),r=t._rejectionHandlerAt(e),i=t._promiseAt(e),o=t._receiverAt(e);void 0===o&&(o=f),this._addCallbacks(n,r,i,o,null)},i.prototype._addCallbacks=function(t,e,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof t&&(this._fulfillmentHandler0=null===i?t:h.domainBind(i,t)),"function"==typeof e&&(this._rejectionHandler0=null===i?e:h.domainBind(i,e));else{var a=4*o-4;this[a+2]=n,this[a+3]=r,"function"==typeof t&&(this[a+0]=null===i?t:h.domainBind(i,t)),"function"==typeof e&&(this[a+1]=null===i?e:h.domainBind(i,e))}return this._setLength(o+1),o},i.prototype._proxy=function(t,e){this._addCallbacks(void 0,void 0,e,t,null)},i.prototype._resolveCallback=function(t,e){if(0===(117506048&this._bitField)){if(t===this)return this._rejectCallback(l(),!1);var n=E(t,this);if(!(n instanceof i))return this._fulfill(t);e&&this._propagateFrom(n,2);var r=n._target();if(r===this)return void this._reject(l());var o=r._bitField;if(0===(50397184&o)){var a=this._length();a>0&&r._migrateCallback0(this);for(var s=1;a>s;++s)r._migrateCallbackAt(this,s);this._setFollowing(),this._setLength(0),this._setFollowee(r)}else if(0!==(33554432&o))this._fulfill(r._value());else if(0!==(16777216&o))this._reject(r._reason());else{var c=new m("late cancellation observer");r._attachExtraTrace(c),this._reject(c)}}},i.prototype._rejectCallback=function(t,e,n){var r=h.ensureErrorObject(t),i=r===t;if(!i&&!n&&F.warnings()){var o="a promise was rejected with a non-error: "+h.classString(t);this._warn(o,!0)}this._attachExtraTrace(r,e?i:!1),this._reject(t)},i.prototype._resolveFromExecutor=function(t){if(t!==b){var e=this;this._captureStackTrace(),this._pushContext();var n=!0,r=this._execute(t,function(t){e._resolveCallback(t)},function(t){e._rejectCallback(t,n)});n=!1,this._popContext(),void 0!==r&&e._rejectCallback(r,!0)}},i.prototype._settlePromiseFromHandler=function(t,e,n,r){var i=r._bitField;if(0===(65536&i)){r._pushContext();var o;e===C?n&&"number"==typeof n.length?o=x(t).apply(this._boundValue(),n):(o=S,o.e=new g("cannot .spread() a non-array: "+h.classString(n))):o=x(t).call(e,n);var a=r._popContext();i=r._bitField,0===(65536&i)&&(o===w?r._reject(n):o===S?r._rejectCallback(o.e,!1):(F.checkForgottenReturns(o,a,"",r,this),r._resolveCallback(o)))}},i.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},i.prototype._followee=function(){return this._rejectionHandler0},i.prototype._setFollowee=function(t){this._rejectionHandler0=t},i.prototype._settlePromise=function(t,e,r,o){var a=t instanceof i,s=this._bitField,c=0!==(134217728&s);0!==(65536&s)?(a&&t._invokeInternalOnCancel(),r instanceof T&&r.isFinallyHandler()?(r.cancelPromise=t,x(e).call(r,o)===S&&t._reject(S.e)):e===u?t._fulfill(u.call(r)):r instanceof n?r._promiseCancelled(t):a||t instanceof k?t._cancel():r.cancel()):"function"==typeof e?a?(c&&t._setAsyncGuaranteed(),this._settlePromiseFromHandler(e,r,o,t)):e.call(r,o,t):r instanceof n?r._isResolved()||(0!==(33554432&s)?r._promiseFulfilled(o,t):r._promiseRejected(o,t)):a&&(c&&t._setAsyncGuaranteed(),0!==(33554432&s)?t._fulfill(o):t._reject(o))},i.prototype._settlePromiseLateCancellationObserver=function(t){var e=t.handler,n=t.promise,r=t.receiver,o=t.value;"function"==typeof e?n instanceof i?this._settlePromiseFromHandler(e,r,o,n):e.call(r,o,n):n instanceof i&&n._reject(o)},i.prototype._settlePromiseCtx=function(t){this._settlePromise(t.promise,t.handler,t.receiver,t.value)},i.prototype._settlePromise0=function(t,e,n){var r=this._promise0,i=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,t,i,e)},i.prototype._clearCallbackDataAtIndex=function(t){var e=4*t-4;this[e+2]=this[e+3]=this[e+0]=this[e+1]=void 0},i.prototype._fulfill=function(t){var e=this._bitField;if(!((117506048&e)>>>16)){if(t===this){var n=l();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=t,(65535&e)>0&&(0!==(134217728&e)?this._settlePromises():v.settlePromises(this),this._dereferenceTrace())}},i.prototype._reject=function(t){var e=this._bitField;if(!((117506048&e)>>>16))return this._setRejected(),this._fulfillmentHandler0=t,this._isFinal()?v.fatalError(t,h.isNode):void((65535&e)>0?v.settlePromises(this):this._ensurePossibleRejectionHandled())},i.prototype._fulfillPromises=function(t,e){for(var n=1;t>n;n++){var r=this._fulfillmentHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._rejectPromises=function(t,e){for(var n=1;t>n;n++){var r=this._rejectionHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._settlePromises=function(){var t=this._bitField,e=65535&t;if(e>0){if(0!==(16842752&t)){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,t),this._rejectPromises(e,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,t),this._fulfillPromises(e,r)}this._setLength(0)}this._clearCancellationData()},i.prototype._settledValue=function(){var t=this._bitField;return 0!==(33554432&t)?this._rejectionHandler0:0!==(16777216&t)?this._fulfillmentHandler0:void 0},i.defer=i.pending=function(){F.deprecated("Promise.defer","new Promise");var t=new i(b);return{promise:t,resolve:o,reject:a}},h.notEnumerableProp(i,"_makeSelfResolutionError",l),t("./method")(i,b,E,p,F),t("./bind")(i,b,E,F),t("./cancel")(i,k,p,F),t("./direct_resolve")(i),t("./synchronous_inspection")(i),t("./join")(i,k,E,b,v,c),i.Promise=i,i.version="3.5.3",h.toFastProperties(i),h.toFastProperties(i.prototype),s({a:1}),s({b:2}),s({c:3}),s(1),s(function(){}),s(void 0),s(!1),s(new i(b)),F.setBounds(d.firstLineError,h.lastLineError),i}},{"./async":1,"./bind":2,"./cancel":4,"./catch_filter":5,"./context":6,"./debuggability":7,"./direct_resolve":8,"./errors":9,"./es5":10,"./finally":11,"./join":12,"./method":13,"./nodeback":14,"./promise_array":16,"./synchronous_inspection":19,"./thenables":20,"./util":21}],16:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){function a(t){switch(t){case-2:return[];case-3:return{};case-6:return new Map}}function s(t){var r=this._promise=new e(n);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var c=t("./util");c.isArray;return c.inherits(s,o),s.prototype.length=function(){return this._length},s.prototype.promise=function(){return this._promise},s.prototype._init=function l(t,n){var o=r(this._values,this._promise);if(o instanceof e){o=o._target();var s=o._bitField;if(this._values=o,0===(50397184&s))return this._promise._setAsyncGuaranteed(),o._then(l,this._reject,void 0,this,n);if(0===(33554432&s))return 0!==(16777216&s)?this._reject(o._reason()):this._cancel();o=o._value()}if(o=c.asArray(o),null===o){var u=i("expecting an array or an iterable object but got "+c.classString(o)).reason();return void this._promise._rejectCallback(u,!1)}return 0===o.length?void(-5===n?this._resolveEmptyArray():this._resolve(a(n))):void this._iterate(o)},s.prototype._iterate=function(t){var n=this.getActualLength(t.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,a=null,s=0;n>s;++s){var c=r(t[s],i);c instanceof e?(c=c._target(),a=c._bitField):a=null,o?null!==a&&c.suppressUnhandledRejections():null!==a?0===(50397184&a)?(c._proxy(this,s),this._values[s]=c):o=0!==(33554432&a)?this._promiseFulfilled(c._value(),s):0!==(16777216&a)?this._promiseRejected(c._reason(),s):this._promiseCancelled(s):o=this._promiseFulfilled(c,s)}o||i._setAsyncGuaranteed()},s.prototype._isResolved=function(){return null===this._values},s.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},s.prototype._cancel=function(){!this._isResolved()&&this._promise._isCancellable()&&(this._values=null,this._promise._cancel())},s.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1)},s.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},s.prototype._promiseCancelled=function(){return this._cancel(),!0},s.prototype._promiseRejected=function(t){return this._totalResolved++,this._reject(t),!0},s.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var n=0;no;++o)n[o+r]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacityn;++n)i[n]=t[n];return i[n]=e,i}function l(t,e,n){if(!F.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var r=Object.getOwnPropertyDescriptor(t,e);return null!=r?null==r.get&&null==r.set?r.value:n:void 0}function u(t,e,n){if(o(t))return t;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return F.defineProperty(t,e,r),t}function p(t){throw t}function f(t){try{if("function"==typeof t){var e=F.names(t.prototype),n=F.isES5&&e.length>1,r=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=A.test(t+"")&&F.names(t).length>0;if(n||r||i)return!0}return!1}catch(o){return!1}}function h(t){function e(){}function n(){return typeof r.foo}e.prototype=t;var r=new e;return n(),n(),t}function _(t){return N.test(t)}function d(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}function v(t){try{return t+""}catch(e){return"[no string representation]"}}function y(t){return t instanceof Error||null!==t&&"object"==typeof t&&"string"==typeof t.message&&"string"==typeof t.name}function g(t){try{u(t,"isOperational",!0)}catch(e){}}function m(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function b(t){return y(t)&&F.propertyIsWritable(t,"stack")}function C(t){return{}.toString.call(t)}function w(t,e,n){for(var r=F.names(t),i=0;i10||t[0]>0}(),D.isNode&&D.toFastProperties(process);try{throw new Error}catch(V){D.lastLineError=V}e.exports=D},{"./es5":10}]},{},[3])(3)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise); \ No newline at end of file diff --git a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.js b/truebit-implementation/node_modules/bluebird/js/browser/bluebird.js deleted file mode 100644 index 66c6c1c4..00000000 --- a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.js +++ /dev/null @@ -1,5647 +0,0 @@ -/* @preserve - * The MIT License (MIT) - * - * Copyright (c) 2013-2018 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * 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. - * - */ -/** - * bluebird build version 3.5.3 - * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each -*/ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;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 _dereq_=="function"&&_dereq_;for(var o=0;o 0) { - _drainQueueStep(queue); - } -} - -function _drainQueueStep(queue) { - var fn = queue.shift(); - if (typeof fn !== "function") { - fn._settlePromises(); - } else { - var receiver = queue.shift(); - var arg = queue.shift(); - fn.call(receiver, arg); - } -} - -Async.prototype._drainQueues = function () { - _drainQueue(this._normalQueue); - this._reset(); - this._haveDrainedQueues = true; - _drainQueue(this._lateQueue); -}; - -Async.prototype._queueTick = function () { - if (!this._isTickUsed) { - this._isTickUsed = true; - this._schedule(this.drainQueues); - } -}; - -Async.prototype._reset = function () { - this._isTickUsed = false; -}; - -module.exports = Async; -module.exports.firstLineError = firstLineError; - -},{"./queue":26,"./schedule":29,"./util":36}],3:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { -var calledBind = false; -var rejectThis = function(_, e) { - this._reject(e); -}; - -var targetRejected = function(e, context) { - context.promiseRejectionQueued = true; - context.bindingPromise._then(rejectThis, rejectThis, null, this, e); -}; - -var bindingResolved = function(thisArg, context) { - if (((this._bitField & 50397184) === 0)) { - this._resolveCallback(context.target); - } -}; - -var bindingRejected = function(e, context) { - if (!context.promiseRejectionQueued) this._reject(e); -}; - -Promise.prototype.bind = function (thisArg) { - if (!calledBind) { - calledBind = true; - Promise.prototype._propagateFrom = debug.propagateFromFunction(); - Promise.prototype._boundValue = debug.boundValueFunction(); - } - var maybePromise = tryConvertToPromise(thisArg); - var ret = new Promise(INTERNAL); - ret._propagateFrom(this, 1); - var target = this._target(); - ret._setBoundTo(maybePromise); - if (maybePromise instanceof Promise) { - var context = { - promiseRejectionQueued: false, - promise: ret, - target: target, - bindingPromise: maybePromise - }; - target._then(INTERNAL, targetRejected, undefined, ret, context); - maybePromise._then( - bindingResolved, bindingRejected, undefined, ret, context); - ret._setOnCancel(maybePromise); - } else { - ret._resolveCallback(target); - } - return ret; -}; - -Promise.prototype._setBoundTo = function (obj) { - if (obj !== undefined) { - this._bitField = this._bitField | 2097152; - this._boundTo = obj; - } else { - this._bitField = this._bitField & (~2097152); - } -}; - -Promise.prototype._isBound = function () { - return (this._bitField & 2097152) === 2097152; -}; - -Promise.bind = function (thisArg, value) { - return Promise.resolve(value).bind(thisArg); -}; -}; - -},{}],4:[function(_dereq_,module,exports){ -"use strict"; -var old; -if (typeof Promise !== "undefined") old = Promise; -function noConflict() { - try { if (Promise === bluebird) Promise = old; } - catch (e) {} - return bluebird; -} -var bluebird = _dereq_("./promise")(); -bluebird.noConflict = noConflict; -module.exports = bluebird; - -},{"./promise":22}],5:[function(_dereq_,module,exports){ -"use strict"; -var cr = Object.create; -if (cr) { - var callerCache = cr(null); - var getterCache = cr(null); - callerCache[" size"] = getterCache[" size"] = 0; -} - -module.exports = function(Promise) { -var util = _dereq_("./util"); -var canEvaluate = util.canEvaluate; -var isIdentifier = util.isIdentifier; - -var getMethodCaller; -var getGetter; -if (!true) { -var makeMethodCaller = function (methodName) { - return new Function("ensureMethod", " \n\ - return function(obj) { \n\ - 'use strict' \n\ - var len = this.length; \n\ - ensureMethod(obj, 'methodName'); \n\ - switch(len) { \n\ - case 1: return obj.methodName(this[0]); \n\ - case 2: return obj.methodName(this[0], this[1]); \n\ - case 3: return obj.methodName(this[0], this[1], this[2]); \n\ - case 0: return obj.methodName(); \n\ - default: \n\ - return obj.methodName.apply(obj, this); \n\ - } \n\ - }; \n\ - ".replace(/methodName/g, methodName))(ensureMethod); -}; - -var makeGetter = function (propertyName) { - return new Function("obj", " \n\ - 'use strict'; \n\ - return obj.propertyName; \n\ - ".replace("propertyName", propertyName)); -}; - -var getCompiled = function(name, compiler, cache) { - var ret = cache[name]; - if (typeof ret !== "function") { - if (!isIdentifier(name)) { - return null; - } - ret = compiler(name); - cache[name] = ret; - cache[" size"]++; - if (cache[" size"] > 512) { - var keys = Object.keys(cache); - for (var i = 0; i < 256; ++i) delete cache[keys[i]]; - cache[" size"] = keys.length - 256; - } - } - return ret; -}; - -getMethodCaller = function(name) { - return getCompiled(name, makeMethodCaller, callerCache); -}; - -getGetter = function(name) { - return getCompiled(name, makeGetter, getterCache); -}; -} - -function ensureMethod(obj, methodName) { - var fn; - if (obj != null) fn = obj[methodName]; - if (typeof fn !== "function") { - var message = "Object " + util.classString(obj) + " has no method '" + - util.toString(methodName) + "'"; - throw new Promise.TypeError(message); - } - return fn; -} - -function caller(obj) { - var methodName = this.pop(); - var fn = ensureMethod(obj, methodName); - return fn.apply(obj, this); -} -Promise.prototype.call = function (methodName) { - var args = [].slice.call(arguments, 1);; - if (!true) { - if (canEvaluate) { - var maybeCaller = getMethodCaller(methodName); - if (maybeCaller !== null) { - return this._then( - maybeCaller, undefined, undefined, args, undefined); - } - } - } - args.push(methodName); - return this._then(caller, undefined, undefined, args, undefined); -}; - -function namedGetter(obj) { - return obj[this]; -} -function indexedGetter(obj) { - var index = +this; - if (index < 0) index = Math.max(0, index + obj.length); - return obj[index]; -} -Promise.prototype.get = function (propertyName) { - var isIndex = (typeof propertyName === "number"); - var getter; - if (!isIndex) { - if (canEvaluate) { - var maybeGetter = getGetter(propertyName); - getter = maybeGetter !== null ? maybeGetter : namedGetter; - } else { - getter = namedGetter; - } - } else { - getter = indexedGetter; - } - return this._then(getter, undefined, undefined, propertyName, undefined); -}; -}; - -},{"./util":36}],6:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, PromiseArray, apiRejection, debug) { -var util = _dereq_("./util"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var async = Promise._async; - -Promise.prototype["break"] = Promise.prototype.cancel = function() { - if (!debug.cancellation()) return this._warn("cancellation is disabled"); - - var promise = this; - var child = promise; - while (promise._isCancellable()) { - if (!promise._cancelBy(child)) { - if (child._isFollowing()) { - child._followee().cancel(); - } else { - child._cancelBranched(); - } - break; - } - - var parent = promise._cancellationParent; - if (parent == null || !parent._isCancellable()) { - if (promise._isFollowing()) { - promise._followee().cancel(); - } else { - promise._cancelBranched(); - } - break; - } else { - if (promise._isFollowing()) promise._followee().cancel(); - promise._setWillBeCancelled(); - child = promise; - promise = parent; - } - } -}; - -Promise.prototype._branchHasCancelled = function() { - this._branchesRemainingToCancel--; -}; - -Promise.prototype._enoughBranchesHaveCancelled = function() { - return this._branchesRemainingToCancel === undefined || - this._branchesRemainingToCancel <= 0; -}; - -Promise.prototype._cancelBy = function(canceller) { - if (canceller === this) { - this._branchesRemainingToCancel = 0; - this._invokeOnCancel(); - return true; - } else { - this._branchHasCancelled(); - if (this._enoughBranchesHaveCancelled()) { - this._invokeOnCancel(); - return true; - } - } - return false; -}; - -Promise.prototype._cancelBranched = function() { - if (this._enoughBranchesHaveCancelled()) { - this._cancel(); - } -}; - -Promise.prototype._cancel = function() { - if (!this._isCancellable()) return; - this._setCancelled(); - async.invoke(this._cancelPromises, this, undefined); -}; - -Promise.prototype._cancelPromises = function() { - if (this._length() > 0) this._settlePromises(); -}; - -Promise.prototype._unsetOnCancel = function() { - this._onCancelField = undefined; -}; - -Promise.prototype._isCancellable = function() { - return this.isPending() && !this._isCancelled(); -}; - -Promise.prototype.isCancellable = function() { - return this.isPending() && !this.isCancelled(); -}; - -Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { - if (util.isArray(onCancelCallback)) { - for (var i = 0; i < onCancelCallback.length; ++i) { - this._doInvokeOnCancel(onCancelCallback[i], internalOnly); - } - } else if (onCancelCallback !== undefined) { - if (typeof onCancelCallback === "function") { - if (!internalOnly) { - var e = tryCatch(onCancelCallback).call(this._boundValue()); - if (e === errorObj) { - this._attachExtraTrace(e.e); - async.throwLater(e.e); - } - } - } else { - onCancelCallback._resultCancelled(this); - } - } -}; - -Promise.prototype._invokeOnCancel = function() { - var onCancelCallback = this._onCancel(); - this._unsetOnCancel(); - async.invoke(this._doInvokeOnCancel, this, onCancelCallback); -}; - -Promise.prototype._invokeInternalOnCancel = function() { - if (this._isCancellable()) { - this._doInvokeOnCancel(this._onCancel(), true); - this._unsetOnCancel(); - } -}; - -Promise.prototype._resultCancelled = function() { - this.cancel(); -}; - -}; - -},{"./util":36}],7:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(NEXT_FILTER) { -var util = _dereq_("./util"); -var getKeys = _dereq_("./es5").keys; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -function catchFilter(instances, cb, promise) { - return function(e) { - var boundTo = promise._boundValue(); - predicateLoop: for (var i = 0; i < instances.length; ++i) { - var item = instances[i]; - - if (item === Error || - (item != null && item.prototype instanceof Error)) { - if (e instanceof item) { - return tryCatch(cb).call(boundTo, e); - } - } else if (typeof item === "function") { - var matchesPredicate = tryCatch(item).call(boundTo, e); - if (matchesPredicate === errorObj) { - return matchesPredicate; - } else if (matchesPredicate) { - return tryCatch(cb).call(boundTo, e); - } - } else if (util.isObject(e)) { - var keys = getKeys(item); - for (var j = 0; j < keys.length; ++j) { - var key = keys[j]; - if (item[key] != e[key]) { - continue predicateLoop; - } - } - return tryCatch(cb).call(boundTo, e); - } - } - return NEXT_FILTER; - }; -} - -return catchFilter; -}; - -},{"./es5":13,"./util":36}],8:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -var longStackTraces = false; -var contextStack = []; - -Promise.prototype._promiseCreated = function() {}; -Promise.prototype._pushContext = function() {}; -Promise.prototype._popContext = function() {return null;}; -Promise._peekContext = Promise.prototype._peekContext = function() {}; - -function Context() { - this._trace = new Context.CapturedTrace(peekContext()); -} -Context.prototype._pushContext = function () { - if (this._trace !== undefined) { - this._trace._promiseCreated = null; - contextStack.push(this._trace); - } -}; - -Context.prototype._popContext = function () { - if (this._trace !== undefined) { - var trace = contextStack.pop(); - var ret = trace._promiseCreated; - trace._promiseCreated = null; - return ret; - } - return null; -}; - -function createContext() { - if (longStackTraces) return new Context(); -} - -function peekContext() { - var lastIndex = contextStack.length - 1; - if (lastIndex >= 0) { - return contextStack[lastIndex]; - } - return undefined; -} -Context.CapturedTrace = null; -Context.create = createContext; -Context.deactivateLongStackTraces = function() {}; -Context.activateLongStackTraces = function() { - var Promise_pushContext = Promise.prototype._pushContext; - var Promise_popContext = Promise.prototype._popContext; - var Promise_PeekContext = Promise._peekContext; - var Promise_peekContext = Promise.prototype._peekContext; - var Promise_promiseCreated = Promise.prototype._promiseCreated; - Context.deactivateLongStackTraces = function() { - Promise.prototype._pushContext = Promise_pushContext; - Promise.prototype._popContext = Promise_popContext; - Promise._peekContext = Promise_PeekContext; - Promise.prototype._peekContext = Promise_peekContext; - Promise.prototype._promiseCreated = Promise_promiseCreated; - longStackTraces = false; - }; - longStackTraces = true; - Promise.prototype._pushContext = Context.prototype._pushContext; - Promise.prototype._popContext = Context.prototype._popContext; - Promise._peekContext = Promise.prototype._peekContext = peekContext; - Promise.prototype._promiseCreated = function() { - var ctx = this._peekContext(); - if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; - }; -}; -return Context; -}; - -},{}],9:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, Context) { -var getDomain = Promise._getDomain; -var async = Promise._async; -var Warning = _dereq_("./errors").Warning; -var util = _dereq_("./util"); -var es5 = _dereq_("./es5"); -var canAttachTrace = util.canAttachTrace; -var unhandledRejectionHandled; -var possiblyUnhandledRejection; -var bluebirdFramePattern = - /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; -var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; -var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; -var stackFramePattern = null; -var formatStack = null; -var indentStackFrames = false; -var printWarning; -var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && - (true || - util.env("BLUEBIRD_DEBUG") || - util.env("NODE_ENV") === "development")); - -var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && - (debugging || util.env("BLUEBIRD_WARNINGS"))); - -var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && - (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); - -var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && - (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); - -Promise.prototype.suppressUnhandledRejections = function() { - var target = this._target(); - target._bitField = ((target._bitField & (~1048576)) | - 524288); -}; - -Promise.prototype._ensurePossibleRejectionHandled = function () { - if ((this._bitField & 524288) !== 0) return; - this._setRejectionIsUnhandled(); - var self = this; - setTimeout(function() { - self._notifyUnhandledRejection(); - }, 1); -}; - -Promise.prototype._notifyUnhandledRejectionIsHandled = function () { - fireRejectionEvent("rejectionHandled", - unhandledRejectionHandled, undefined, this); -}; - -Promise.prototype._setReturnedNonUndefined = function() { - this._bitField = this._bitField | 268435456; -}; - -Promise.prototype._returnedNonUndefined = function() { - return (this._bitField & 268435456) !== 0; -}; - -Promise.prototype._notifyUnhandledRejection = function () { - if (this._isRejectionUnhandled()) { - var reason = this._settledValue(); - this._setUnhandledRejectionIsNotified(); - fireRejectionEvent("unhandledRejection", - possiblyUnhandledRejection, reason, this); - } -}; - -Promise.prototype._setUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField | 262144; -}; - -Promise.prototype._unsetUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField & (~262144); -}; - -Promise.prototype._isUnhandledRejectionNotified = function () { - return (this._bitField & 262144) > 0; -}; - -Promise.prototype._setRejectionIsUnhandled = function () { - this._bitField = this._bitField | 1048576; -}; - -Promise.prototype._unsetRejectionIsUnhandled = function () { - this._bitField = this._bitField & (~1048576); - if (this._isUnhandledRejectionNotified()) { - this._unsetUnhandledRejectionIsNotified(); - this._notifyUnhandledRejectionIsHandled(); - } -}; - -Promise.prototype._isRejectionUnhandled = function () { - return (this._bitField & 1048576) > 0; -}; - -Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { - return warn(message, shouldUseOwnTrace, promise || this); -}; - -Promise.onPossiblyUnhandledRejection = function (fn) { - var domain = getDomain(); - possiblyUnhandledRejection = - typeof fn === "function" ? (domain === null ? - fn : util.domainBind(domain, fn)) - : undefined; -}; - -Promise.onUnhandledRejectionHandled = function (fn) { - var domain = getDomain(); - unhandledRejectionHandled = - typeof fn === "function" ? (domain === null ? - fn : util.domainBind(domain, fn)) - : undefined; -}; - -var disableLongStackTraces = function() {}; -Promise.longStackTraces = function () { - if (async.haveItemsQueued() && !config.longStackTraces) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - if (!config.longStackTraces && longStackTracesIsSupported()) { - var Promise_captureStackTrace = Promise.prototype._captureStackTrace; - var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; - var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace; - config.longStackTraces = true; - disableLongStackTraces = function() { - if (async.haveItemsQueued() && !config.longStackTraces) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - Promise.prototype._captureStackTrace = Promise_captureStackTrace; - Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; - Promise.prototype._dereferenceTrace = Promise_dereferenceTrace; - Context.deactivateLongStackTraces(); - async.enableTrampoline(); - config.longStackTraces = false; - }; - Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; - Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; - Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace; - Context.activateLongStackTraces(); - async.disableTrampolineIfNecessary(); - } -}; - -Promise.hasLongStackTraces = function () { - return config.longStackTraces && longStackTracesIsSupported(); -}; - -var fireDomEvent = (function() { - try { - if (typeof CustomEvent === "function") { - var event = new CustomEvent("CustomEvent"); - util.global.dispatchEvent(event); - return function(name, event) { - var eventData = { - detail: event, - cancelable: true - }; - es5.defineProperty( - eventData, "promise", {value: event.promise}); - es5.defineProperty(eventData, "reason", {value: event.reason}); - var domEvent = new CustomEvent(name.toLowerCase(), eventData); - return !util.global.dispatchEvent(domEvent); - }; - } else if (typeof Event === "function") { - var event = new Event("CustomEvent"); - util.global.dispatchEvent(event); - return function(name, event) { - var domEvent = new Event(name.toLowerCase(), { - cancelable: true - }); - domEvent.detail = event; - es5.defineProperty(domEvent, "promise", {value: event.promise}); - es5.defineProperty(domEvent, "reason", {value: event.reason}); - return !util.global.dispatchEvent(domEvent); - }; - } else { - var event = document.createEvent("CustomEvent"); - event.initCustomEvent("testingtheevent", false, true, {}); - util.global.dispatchEvent(event); - return function(name, event) { - var domEvent = document.createEvent("CustomEvent"); - domEvent.initCustomEvent(name.toLowerCase(), false, true, - event); - return !util.global.dispatchEvent(domEvent); - }; - } - } catch (e) {} - return function() { - return false; - }; -})(); - -var fireGlobalEvent = (function() { - if (util.isNode) { - return function() { - return process.emit.apply(process, arguments); - }; - } else { - if (!util.global) { - return function() { - return false; - }; - } - return function(name) { - var methodName = "on" + name.toLowerCase(); - var method = util.global[methodName]; - if (!method) return false; - method.apply(util.global, [].slice.call(arguments, 1)); - return true; - }; - } -})(); - -function generatePromiseLifecycleEventObject(name, promise) { - return {promise: promise}; -} - -var eventToObjectGenerator = { - promiseCreated: generatePromiseLifecycleEventObject, - promiseFulfilled: generatePromiseLifecycleEventObject, - promiseRejected: generatePromiseLifecycleEventObject, - promiseResolved: generatePromiseLifecycleEventObject, - promiseCancelled: generatePromiseLifecycleEventObject, - promiseChained: function(name, promise, child) { - return {promise: promise, child: child}; - }, - warning: function(name, warning) { - return {warning: warning}; - }, - unhandledRejection: function (name, reason, promise) { - return {reason: reason, promise: promise}; - }, - rejectionHandled: generatePromiseLifecycleEventObject -}; - -var activeFireEvent = function (name) { - var globalEventFired = false; - try { - globalEventFired = fireGlobalEvent.apply(null, arguments); - } catch (e) { - async.throwLater(e); - globalEventFired = true; - } - - var domEventFired = false; - try { - domEventFired = fireDomEvent(name, - eventToObjectGenerator[name].apply(null, arguments)); - } catch (e) { - async.throwLater(e); - domEventFired = true; - } - - return domEventFired || globalEventFired; -}; - -Promise.config = function(opts) { - opts = Object(opts); - if ("longStackTraces" in opts) { - if (opts.longStackTraces) { - Promise.longStackTraces(); - } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { - disableLongStackTraces(); - } - } - if ("warnings" in opts) { - var warningsOption = opts.warnings; - config.warnings = !!warningsOption; - wForgottenReturn = config.warnings; - - if (util.isObject(warningsOption)) { - if ("wForgottenReturn" in warningsOption) { - wForgottenReturn = !!warningsOption.wForgottenReturn; - } - } - } - if ("cancellation" in opts && opts.cancellation && !config.cancellation) { - if (async.haveItemsQueued()) { - throw new Error( - "cannot enable cancellation after promises are in use"); - } - Promise.prototype._clearCancellationData = - cancellationClearCancellationData; - Promise.prototype._propagateFrom = cancellationPropagateFrom; - Promise.prototype._onCancel = cancellationOnCancel; - Promise.prototype._setOnCancel = cancellationSetOnCancel; - Promise.prototype._attachCancellationCallback = - cancellationAttachCancellationCallback; - Promise.prototype._execute = cancellationExecute; - propagateFromFunction = cancellationPropagateFrom; - config.cancellation = true; - } - if ("monitoring" in opts) { - if (opts.monitoring && !config.monitoring) { - config.monitoring = true; - Promise.prototype._fireEvent = activeFireEvent; - } else if (!opts.monitoring && config.monitoring) { - config.monitoring = false; - Promise.prototype._fireEvent = defaultFireEvent; - } - } - return Promise; -}; - -function defaultFireEvent() { return false; } - -Promise.prototype._fireEvent = defaultFireEvent; -Promise.prototype._execute = function(executor, resolve, reject) { - try { - executor(resolve, reject); - } catch (e) { - return e; - } -}; -Promise.prototype._onCancel = function () {}; -Promise.prototype._setOnCancel = function (handler) { ; }; -Promise.prototype._attachCancellationCallback = function(onCancel) { - ; -}; -Promise.prototype._captureStackTrace = function () {}; -Promise.prototype._attachExtraTrace = function () {}; -Promise.prototype._dereferenceTrace = function () {}; -Promise.prototype._clearCancellationData = function() {}; -Promise.prototype._propagateFrom = function (parent, flags) { - ; - ; -}; - -function cancellationExecute(executor, resolve, reject) { - var promise = this; - try { - executor(resolve, reject, function(onCancel) { - if (typeof onCancel !== "function") { - throw new TypeError("onCancel must be a function, got: " + - util.toString(onCancel)); - } - promise._attachCancellationCallback(onCancel); - }); - } catch (e) { - return e; - } -} - -function cancellationAttachCancellationCallback(onCancel) { - if (!this._isCancellable()) return this; - - var previousOnCancel = this._onCancel(); - if (previousOnCancel !== undefined) { - if (util.isArray(previousOnCancel)) { - previousOnCancel.push(onCancel); - } else { - this._setOnCancel([previousOnCancel, onCancel]); - } - } else { - this._setOnCancel(onCancel); - } -} - -function cancellationOnCancel() { - return this._onCancelField; -} - -function cancellationSetOnCancel(onCancel) { - this._onCancelField = onCancel; -} - -function cancellationClearCancellationData() { - this._cancellationParent = undefined; - this._onCancelField = undefined; -} - -function cancellationPropagateFrom(parent, flags) { - if ((flags & 1) !== 0) { - this._cancellationParent = parent; - var branchesRemainingToCancel = parent._branchesRemainingToCancel; - if (branchesRemainingToCancel === undefined) { - branchesRemainingToCancel = 0; - } - parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; - } - if ((flags & 2) !== 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -} - -function bindingPropagateFrom(parent, flags) { - if ((flags & 2) !== 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -} -var propagateFromFunction = bindingPropagateFrom; - -function boundValueFunction() { - var ret = this._boundTo; - if (ret !== undefined) { - if (ret instanceof Promise) { - if (ret.isFulfilled()) { - return ret.value(); - } else { - return undefined; - } - } - } - return ret; -} - -function longStackTracesCaptureStackTrace() { - this._trace = new CapturedTrace(this._peekContext()); -} - -function longStackTracesAttachExtraTrace(error, ignoreSelf) { - if (canAttachTrace(error)) { - var trace = this._trace; - if (trace !== undefined) { - if (ignoreSelf) trace = trace._parent; - } - if (trace !== undefined) { - trace.attachExtraTrace(error); - } else if (!error.__stackCleaned__) { - var parsed = parseStackAndMessage(error); - util.notEnumerableProp(error, "stack", - parsed.message + "\n" + parsed.stack.join("\n")); - util.notEnumerableProp(error, "__stackCleaned__", true); - } - } -} - -function longStackTracesDereferenceTrace() { - this._trace = undefined; -} - -function checkForgottenReturns(returnValue, promiseCreated, name, promise, - parent) { - if (returnValue === undefined && promiseCreated !== null && - wForgottenReturn) { - if (parent !== undefined && parent._returnedNonUndefined()) return; - if ((promise._bitField & 65535) === 0) return; - - if (name) name = name + " "; - var handlerLine = ""; - var creatorLine = ""; - if (promiseCreated._trace) { - var traceLines = promiseCreated._trace.stack.split("\n"); - var stack = cleanStack(traceLines); - for (var i = stack.length - 1; i >= 0; --i) { - var line = stack[i]; - if (!nodeFramePattern.test(line)) { - var lineMatches = line.match(parseLinePattern); - if (lineMatches) { - handlerLine = "at " + lineMatches[1] + - ":" + lineMatches[2] + ":" + lineMatches[3] + " "; - } - break; - } - } - - if (stack.length > 0) { - var firstUserLine = stack[0]; - for (var i = 0; i < traceLines.length; ++i) { - - if (traceLines[i] === firstUserLine) { - if (i > 0) { - creatorLine = "\n" + traceLines[i - 1]; - } - break; - } - } - - } - } - var msg = "a promise was created in a " + name + - "handler " + handlerLine + "but was not returned from it, " + - "see http://goo.gl/rRqMUw" + - creatorLine; - promise._warn(msg, true, promiseCreated); - } -} - -function deprecated(name, replacement) { - var message = name + - " is deprecated and will be removed in a future version."; - if (replacement) message += " Use " + replacement + " instead."; - return warn(message); -} - -function warn(message, shouldUseOwnTrace, promise) { - if (!config.warnings) return; - var warning = new Warning(message); - var ctx; - if (shouldUseOwnTrace) { - promise._attachExtraTrace(warning); - } else if (config.longStackTraces && (ctx = Promise._peekContext())) { - ctx.attachExtraTrace(warning); - } else { - var parsed = parseStackAndMessage(warning); - warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); - } - - if (!activeFireEvent("warning", warning)) { - formatAndLogError(warning, "", true); - } -} - -function reconstructStack(message, stacks) { - for (var i = 0; i < stacks.length - 1; ++i) { - stacks[i].push("From previous event:"); - stacks[i] = stacks[i].join("\n"); - } - if (i < stacks.length) { - stacks[i] = stacks[i].join("\n"); - } - return message + "\n" + stacks.join("\n"); -} - -function removeDuplicateOrEmptyJumps(stacks) { - for (var i = 0; i < stacks.length; ++i) { - if (stacks[i].length === 0 || - ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { - stacks.splice(i, 1); - i--; - } - } -} - -function removeCommonRoots(stacks) { - var current = stacks[0]; - for (var i = 1; i < stacks.length; ++i) { - var prev = stacks[i]; - var currentLastIndex = current.length - 1; - var currentLastLine = current[currentLastIndex]; - var commonRootMeetPoint = -1; - - for (var j = prev.length - 1; j >= 0; --j) { - if (prev[j] === currentLastLine) { - commonRootMeetPoint = j; - break; - } - } - - for (var j = commonRootMeetPoint; j >= 0; --j) { - var line = prev[j]; - if (current[currentLastIndex] === line) { - current.pop(); - currentLastIndex--; - } else { - break; - } - } - current = prev; - } -} - -function cleanStack(stack) { - var ret = []; - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - var isTraceLine = " (No stack trace)" === line || - stackFramePattern.test(line); - var isInternalFrame = isTraceLine && shouldIgnore(line); - if (isTraceLine && !isInternalFrame) { - if (indentStackFrames && line.charAt(0) !== " ") { - line = " " + line; - } - ret.push(line); - } - } - return ret; -} - -function stackFramesAsArray(error) { - var stack = error.stack.replace(/\s+$/g, "").split("\n"); - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - if (" (No stack trace)" === line || stackFramePattern.test(line)) { - break; - } - } - if (i > 0 && error.name != "SyntaxError") { - stack = stack.slice(i); - } - return stack; -} - -function parseStackAndMessage(error) { - var stack = error.stack; - var message = error.toString(); - stack = typeof stack === "string" && stack.length > 0 - ? stackFramesAsArray(error) : [" (No stack trace)"]; - return { - message: message, - stack: error.name == "SyntaxError" ? stack : cleanStack(stack) - }; -} - -function formatAndLogError(error, title, isSoft) { - if (typeof console !== "undefined") { - var message; - if (util.isObject(error)) { - var stack = error.stack; - message = title + formatStack(stack, error); - } else { - message = title + String(error); - } - if (typeof printWarning === "function") { - printWarning(message, isSoft); - } else if (typeof console.log === "function" || - typeof console.log === "object") { - console.log(message); - } - } -} - -function fireRejectionEvent(name, localHandler, reason, promise) { - var localEventFired = false; - try { - if (typeof localHandler === "function") { - localEventFired = true; - if (name === "rejectionHandled") { - localHandler(promise); - } else { - localHandler(reason, promise); - } - } - } catch (e) { - async.throwLater(e); - } - - if (name === "unhandledRejection") { - if (!activeFireEvent(name, reason, promise) && !localEventFired) { - formatAndLogError(reason, "Unhandled rejection "); - } - } else { - activeFireEvent(name, promise); - } -} - -function formatNonError(obj) { - var str; - if (typeof obj === "function") { - str = "[function " + - (obj.name || "anonymous") + - "]"; - } else { - str = obj && typeof obj.toString === "function" - ? obj.toString() : util.toString(obj); - var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; - if (ruselessToString.test(str)) { - try { - var newStr = JSON.stringify(obj); - str = newStr; - } - catch(e) { - - } - } - if (str.length === 0) { - str = "(empty array)"; - } - } - return ("(<" + snip(str) + ">, no stack trace)"); -} - -function snip(str) { - var maxChars = 41; - if (str.length < maxChars) { - return str; - } - return str.substr(0, maxChars - 3) + "..."; -} - -function longStackTracesIsSupported() { - return typeof captureStackTrace === "function"; -} - -var shouldIgnore = function() { return false; }; -var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; -function parseLineInfo(line) { - var matches = line.match(parseLineInfoRegex); - if (matches) { - return { - fileName: matches[1], - line: parseInt(matches[2], 10) - }; - } -} - -function setBounds(firstLineError, lastLineError) { - if (!longStackTracesIsSupported()) return; - var firstStackLines = firstLineError.stack.split("\n"); - var lastStackLines = lastLineError.stack.split("\n"); - var firstIndex = -1; - var lastIndex = -1; - var firstFileName; - var lastFileName; - for (var i = 0; i < firstStackLines.length; ++i) { - var result = parseLineInfo(firstStackLines[i]); - if (result) { - firstFileName = result.fileName; - firstIndex = result.line; - break; - } - } - for (var i = 0; i < lastStackLines.length; ++i) { - var result = parseLineInfo(lastStackLines[i]); - if (result) { - lastFileName = result.fileName; - lastIndex = result.line; - break; - } - } - if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || - firstFileName !== lastFileName || firstIndex >= lastIndex) { - return; - } - - shouldIgnore = function(line) { - if (bluebirdFramePattern.test(line)) return true; - var info = parseLineInfo(line); - if (info) { - if (info.fileName === firstFileName && - (firstIndex <= info.line && info.line <= lastIndex)) { - return true; - } - } - return false; - }; -} - -function CapturedTrace(parent) { - this._parent = parent; - this._promisesCreated = 0; - var length = this._length = 1 + (parent === undefined ? 0 : parent._length); - captureStackTrace(this, CapturedTrace); - if (length > 32) this.uncycle(); -} -util.inherits(CapturedTrace, Error); -Context.CapturedTrace = CapturedTrace; - -CapturedTrace.prototype.uncycle = function() { - var length = this._length; - if (length < 2) return; - var nodes = []; - var stackToIndex = {}; - - for (var i = 0, node = this; node !== undefined; ++i) { - nodes.push(node); - node = node._parent; - } - length = this._length = i; - for (var i = length - 1; i >= 0; --i) { - var stack = nodes[i].stack; - if (stackToIndex[stack] === undefined) { - stackToIndex[stack] = i; - } - } - for (var i = 0; i < length; ++i) { - var currentStack = nodes[i].stack; - var index = stackToIndex[currentStack]; - if (index !== undefined && index !== i) { - if (index > 0) { - nodes[index - 1]._parent = undefined; - nodes[index - 1]._length = 1; - } - nodes[i]._parent = undefined; - nodes[i]._length = 1; - var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; - - if (index < length - 1) { - cycleEdgeNode._parent = nodes[index + 1]; - cycleEdgeNode._parent.uncycle(); - cycleEdgeNode._length = - cycleEdgeNode._parent._length + 1; - } else { - cycleEdgeNode._parent = undefined; - cycleEdgeNode._length = 1; - } - var currentChildLength = cycleEdgeNode._length + 1; - for (var j = i - 2; j >= 0; --j) { - nodes[j]._length = currentChildLength; - currentChildLength++; - } - return; - } - } -}; - -CapturedTrace.prototype.attachExtraTrace = function(error) { - if (error.__stackCleaned__) return; - this.uncycle(); - var parsed = parseStackAndMessage(error); - var message = parsed.message; - var stacks = [parsed.stack]; - - var trace = this; - while (trace !== undefined) { - stacks.push(cleanStack(trace.stack.split("\n"))); - trace = trace._parent; - } - removeCommonRoots(stacks); - removeDuplicateOrEmptyJumps(stacks); - util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); - util.notEnumerableProp(error, "__stackCleaned__", true); -}; - -var captureStackTrace = (function stackDetection() { - var v8stackFramePattern = /^\s*at\s*/; - var v8stackFormatter = function(stack, error) { - if (typeof stack === "string") return stack; - - if (error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - if (typeof Error.stackTraceLimit === "number" && - typeof Error.captureStackTrace === "function") { - Error.stackTraceLimit += 6; - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - var captureStackTrace = Error.captureStackTrace; - - shouldIgnore = function(line) { - return bluebirdFramePattern.test(line); - }; - return function(receiver, ignoreUntil) { - Error.stackTraceLimit += 6; - captureStackTrace(receiver, ignoreUntil); - Error.stackTraceLimit -= 6; - }; - } - var err = new Error(); - - if (typeof err.stack === "string" && - err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { - stackFramePattern = /@/; - formatStack = v8stackFormatter; - indentStackFrames = true; - return function captureStackTrace(o) { - o.stack = new Error().stack; - }; - } - - var hasStackAfterThrow; - try { throw new Error(); } - catch(e) { - hasStackAfterThrow = ("stack" in e); - } - if (!("stack" in err) && hasStackAfterThrow && - typeof Error.stackTraceLimit === "number") { - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - return function captureStackTrace(o) { - Error.stackTraceLimit += 6; - try { throw new Error(); } - catch(e) { o.stack = e.stack; } - Error.stackTraceLimit -= 6; - }; - } - - formatStack = function(stack, error) { - if (typeof stack === "string") return stack; - - if ((typeof error === "object" || - typeof error === "function") && - error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - return null; - -})([]); - -if (typeof console !== "undefined" && typeof console.warn !== "undefined") { - printWarning = function (message) { - console.warn(message); - }; - if (util.isNode && process.stderr.isTTY) { - printWarning = function(message, isSoft) { - var color = isSoft ? "\u001b[33m" : "\u001b[31m"; - console.warn(color + message + "\u001b[0m\n"); - }; - } else if (!util.isNode && typeof (new Error().stack) === "string") { - printWarning = function(message, isSoft) { - console.warn("%c" + message, - isSoft ? "color: darkorange" : "color: red"); - }; - } -} - -var config = { - warnings: warnings, - longStackTraces: false, - cancellation: false, - monitoring: false -}; - -if (longStackTraces) Promise.longStackTraces(); - -return { - longStackTraces: function() { - return config.longStackTraces; - }, - warnings: function() { - return config.warnings; - }, - cancellation: function() { - return config.cancellation; - }, - monitoring: function() { - return config.monitoring; - }, - propagateFromFunction: function() { - return propagateFromFunction; - }, - boundValueFunction: function() { - return boundValueFunction; - }, - checkForgottenReturns: checkForgottenReturns, - setBounds: setBounds, - warn: warn, - deprecated: deprecated, - CapturedTrace: CapturedTrace, - fireDomEvent: fireDomEvent, - fireGlobalEvent: fireGlobalEvent -}; -}; - -},{"./errors":12,"./es5":13,"./util":36}],10:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -function returner() { - return this.value; -} -function thrower() { - throw this.reason; -} - -Promise.prototype["return"] = -Promise.prototype.thenReturn = function (value) { - if (value instanceof Promise) value.suppressUnhandledRejections(); - return this._then( - returner, undefined, undefined, {value: value}, undefined); -}; - -Promise.prototype["throw"] = -Promise.prototype.thenThrow = function (reason) { - return this._then( - thrower, undefined, undefined, {reason: reason}, undefined); -}; - -Promise.prototype.catchThrow = function (reason) { - if (arguments.length <= 1) { - return this._then( - undefined, thrower, undefined, {reason: reason}, undefined); - } else { - var _reason = arguments[1]; - var handler = function() {throw _reason;}; - return this.caught(reason, handler); - } -}; - -Promise.prototype.catchReturn = function (value) { - if (arguments.length <= 1) { - if (value instanceof Promise) value.suppressUnhandledRejections(); - return this._then( - undefined, returner, undefined, {value: value}, undefined); - } else { - var _value = arguments[1]; - if (_value instanceof Promise) _value.suppressUnhandledRejections(); - var handler = function() {return _value;}; - return this.caught(value, handler); - } -}; -}; - -},{}],11:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseReduce = Promise.reduce; -var PromiseAll = Promise.all; - -function promiseAllThis() { - return PromiseAll(this); -} - -function PromiseMapSeries(promises, fn) { - return PromiseReduce(promises, fn, INTERNAL, INTERNAL); -} - -Promise.prototype.each = function (fn) { - return PromiseReduce(this, fn, INTERNAL, 0) - ._then(promiseAllThis, undefined, undefined, this, undefined); -}; - -Promise.prototype.mapSeries = function (fn) { - return PromiseReduce(this, fn, INTERNAL, INTERNAL); -}; - -Promise.each = function (promises, fn) { - return PromiseReduce(promises, fn, INTERNAL, 0) - ._then(promiseAllThis, undefined, undefined, promises, undefined); -}; - -Promise.mapSeries = PromiseMapSeries; -}; - - -},{}],12:[function(_dereq_,module,exports){ -"use strict"; -var es5 = _dereq_("./es5"); -var Objectfreeze = es5.freeze; -var util = _dereq_("./util"); -var inherits = util.inherits; -var notEnumerableProp = util.notEnumerableProp; - -function subError(nameProperty, defaultMessage) { - function SubError(message) { - if (!(this instanceof SubError)) return new SubError(message); - notEnumerableProp(this, "message", - typeof message === "string" ? message : defaultMessage); - notEnumerableProp(this, "name", nameProperty); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } else { - Error.call(this); - } - } - inherits(SubError, Error); - return SubError; -} - -var _TypeError, _RangeError; -var Warning = subError("Warning", "warning"); -var CancellationError = subError("CancellationError", "cancellation error"); -var TimeoutError = subError("TimeoutError", "timeout error"); -var AggregateError = subError("AggregateError", "aggregate error"); -try { - _TypeError = TypeError; - _RangeError = RangeError; -} catch(e) { - _TypeError = subError("TypeError", "type error"); - _RangeError = subError("RangeError", "range error"); -} - -var methods = ("join pop push shift unshift slice filter forEach some " + - "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); - -for (var i = 0; i < methods.length; ++i) { - if (typeof Array.prototype[methods[i]] === "function") { - AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; - } -} - -es5.defineProperty(AggregateError.prototype, "length", { - value: 0, - configurable: false, - writable: true, - enumerable: true -}); -AggregateError.prototype["isOperational"] = true; -var level = 0; -AggregateError.prototype.toString = function() { - var indent = Array(level * 4 + 1).join(" "); - var ret = "\n" + indent + "AggregateError of:" + "\n"; - level++; - indent = Array(level * 4 + 1).join(" "); - for (var i = 0; i < this.length; ++i) { - var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; - var lines = str.split("\n"); - for (var j = 0; j < lines.length; ++j) { - lines[j] = indent + lines[j]; - } - str = lines.join("\n"); - ret += str + "\n"; - } - level--; - return ret; -}; - -function OperationalError(message) { - if (!(this instanceof OperationalError)) - return new OperationalError(message); - notEnumerableProp(this, "name", "OperationalError"); - notEnumerableProp(this, "message", message); - this.cause = message; - this["isOperational"] = true; - - if (message instanceof Error) { - notEnumerableProp(this, "message", message.message); - notEnumerableProp(this, "stack", message.stack); - } else if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - -} -inherits(OperationalError, Error); - -var errorTypes = Error["__BluebirdErrorTypes__"]; -if (!errorTypes) { - errorTypes = Objectfreeze({ - CancellationError: CancellationError, - TimeoutError: TimeoutError, - OperationalError: OperationalError, - RejectionError: OperationalError, - AggregateError: AggregateError - }); - es5.defineProperty(Error, "__BluebirdErrorTypes__", { - value: errorTypes, - writable: false, - enumerable: false, - configurable: false - }); -} - -module.exports = { - Error: Error, - TypeError: _TypeError, - RangeError: _RangeError, - CancellationError: errorTypes.CancellationError, - OperationalError: errorTypes.OperationalError, - TimeoutError: errorTypes.TimeoutError, - AggregateError: errorTypes.AggregateError, - Warning: Warning -}; - -},{"./es5":13,"./util":36}],13:[function(_dereq_,module,exports){ -var isES5 = (function(){ - "use strict"; - return this === undefined; -})(); - -if (isES5) { - module.exports = { - freeze: Object.freeze, - defineProperty: Object.defineProperty, - getDescriptor: Object.getOwnPropertyDescriptor, - keys: Object.keys, - names: Object.getOwnPropertyNames, - getPrototypeOf: Object.getPrototypeOf, - isArray: Array.isArray, - isES5: isES5, - propertyIsWritable: function(obj, prop) { - var descriptor = Object.getOwnPropertyDescriptor(obj, prop); - return !!(!descriptor || descriptor.writable || descriptor.set); - } - }; -} else { - var has = {}.hasOwnProperty; - var str = {}.toString; - var proto = {}.constructor.prototype; - - var ObjectKeys = function (o) { - var ret = []; - for (var key in o) { - if (has.call(o, key)) { - ret.push(key); - } - } - return ret; - }; - - var ObjectGetDescriptor = function(o, key) { - return {value: o[key]}; - }; - - var ObjectDefineProperty = function (o, key, desc) { - o[key] = desc.value; - return o; - }; - - var ObjectFreeze = function (obj) { - return obj; - }; - - var ObjectGetPrototypeOf = function (obj) { - try { - return Object(obj).constructor.prototype; - } - catch (e) { - return proto; - } - }; - - var ArrayIsArray = function (obj) { - try { - return str.call(obj) === "[object Array]"; - } - catch(e) { - return false; - } - }; - - module.exports = { - isArray: ArrayIsArray, - keys: ObjectKeys, - names: ObjectKeys, - defineProperty: ObjectDefineProperty, - getDescriptor: ObjectGetDescriptor, - freeze: ObjectFreeze, - getPrototypeOf: ObjectGetPrototypeOf, - isES5: isES5, - propertyIsWritable: function() { - return true; - } - }; -} - -},{}],14:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseMap = Promise.map; - -Promise.prototype.filter = function (fn, options) { - return PromiseMap(this, fn, options, INTERNAL); -}; - -Promise.filter = function (promises, fn, options) { - return PromiseMap(promises, fn, options, INTERNAL); -}; -}; - -},{}],15:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) { -var util = _dereq_("./util"); -var CancellationError = Promise.CancellationError; -var errorObj = util.errorObj; -var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); - -function PassThroughHandlerContext(promise, type, handler) { - this.promise = promise; - this.type = type; - this.handler = handler; - this.called = false; - this.cancelPromise = null; -} - -PassThroughHandlerContext.prototype.isFinallyHandler = function() { - return this.type === 0; -}; - -function FinallyHandlerCancelReaction(finallyHandler) { - this.finallyHandler = finallyHandler; -} - -FinallyHandlerCancelReaction.prototype._resultCancelled = function() { - checkCancel(this.finallyHandler); -}; - -function checkCancel(ctx, reason) { - if (ctx.cancelPromise != null) { - if (arguments.length > 1) { - ctx.cancelPromise._reject(reason); - } else { - ctx.cancelPromise._cancel(); - } - ctx.cancelPromise = null; - return true; - } - return false; -} - -function succeed() { - return finallyHandler.call(this, this.promise._target()._settledValue()); -} -function fail(reason) { - if (checkCancel(this, reason)) return; - errorObj.e = reason; - return errorObj; -} -function finallyHandler(reasonOrValue) { - var promise = this.promise; - var handler = this.handler; - - if (!this.called) { - this.called = true; - var ret = this.isFinallyHandler() - ? handler.call(promise._boundValue()) - : handler.call(promise._boundValue(), reasonOrValue); - if (ret === NEXT_FILTER) { - return ret; - } else if (ret !== undefined) { - promise._setReturnedNonUndefined(); - var maybePromise = tryConvertToPromise(ret, promise); - if (maybePromise instanceof Promise) { - if (this.cancelPromise != null) { - if (maybePromise._isCancelled()) { - var reason = - new CancellationError("late cancellation observer"); - promise._attachExtraTrace(reason); - errorObj.e = reason; - return errorObj; - } else if (maybePromise.isPending()) { - maybePromise._attachCancellationCallback( - new FinallyHandlerCancelReaction(this)); - } - } - return maybePromise._then( - succeed, fail, undefined, this, undefined); - } - } - } - - if (promise.isRejected()) { - checkCancel(this); - errorObj.e = reasonOrValue; - return errorObj; - } else { - checkCancel(this); - return reasonOrValue; - } -} - -Promise.prototype._passThrough = function(handler, type, success, fail) { - if (typeof handler !== "function") return this.then(); - return this._then(success, - fail, - undefined, - new PassThroughHandlerContext(this, type, handler), - undefined); -}; - -Promise.prototype.lastly = -Promise.prototype["finally"] = function (handler) { - return this._passThrough(handler, - 0, - finallyHandler, - finallyHandler); -}; - - -Promise.prototype.tap = function (handler) { - return this._passThrough(handler, 1, finallyHandler); -}; - -Promise.prototype.tapCatch = function (handlerOrPredicate) { - var len = arguments.length; - if(len === 1) { - return this._passThrough(handlerOrPredicate, - 1, - undefined, - finallyHandler); - } else { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (util.isObject(item)) { - catchInstances[j++] = item; - } else { - return Promise.reject(new TypeError( - "tapCatch statement predicate: " - + "expecting an object but got " + util.classString(item) - )); - } - } - catchInstances.length = j; - var handler = arguments[i]; - return this._passThrough(catchFilter(catchInstances, handler, this), - 1, - undefined, - finallyHandler); - } - -}; - -return PassThroughHandlerContext; -}; - -},{"./catch_filter":7,"./util":36}],16:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, - apiRejection, - INTERNAL, - tryConvertToPromise, - Proxyable, - debug) { -var errors = _dereq_("./errors"); -var TypeError = errors.TypeError; -var util = _dereq_("./util"); -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; -var yieldHandlers = []; - -function promiseFromYieldHandler(value, yieldHandlers, traceParent) { - for (var i = 0; i < yieldHandlers.length; ++i) { - traceParent._pushContext(); - var result = tryCatch(yieldHandlers[i])(value); - traceParent._popContext(); - if (result === errorObj) { - traceParent._pushContext(); - var ret = Promise.reject(errorObj.e); - traceParent._popContext(); - return ret; - } - var maybePromise = tryConvertToPromise(result, traceParent); - if (maybePromise instanceof Promise) return maybePromise; - } - return null; -} - -function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { - if (debug.cancellation()) { - var internal = new Promise(INTERNAL); - var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); - this._promise = internal.lastly(function() { - return _finallyPromise; - }); - internal._captureStackTrace(); - internal._setOnCancel(this); - } else { - var promise = this._promise = new Promise(INTERNAL); - promise._captureStackTrace(); - } - this._stack = stack; - this._generatorFunction = generatorFunction; - this._receiver = receiver; - this._generator = undefined; - this._yieldHandlers = typeof yieldHandler === "function" - ? [yieldHandler].concat(yieldHandlers) - : yieldHandlers; - this._yieldedPromise = null; - this._cancellationPhase = false; -} -util.inherits(PromiseSpawn, Proxyable); - -PromiseSpawn.prototype._isResolved = function() { - return this._promise === null; -}; - -PromiseSpawn.prototype._cleanup = function() { - this._promise = this._generator = null; - if (debug.cancellation() && this._finallyPromise !== null) { - this._finallyPromise._fulfill(); - this._finallyPromise = null; - } -}; - -PromiseSpawn.prototype._promiseCancelled = function() { - if (this._isResolved()) return; - var implementsReturn = typeof this._generator["return"] !== "undefined"; - - var result; - if (!implementsReturn) { - var reason = new Promise.CancellationError( - "generator .return() sentinel"); - Promise.coroutine.returnSentinel = reason; - this._promise._attachExtraTrace(reason); - this._promise._pushContext(); - result = tryCatch(this._generator["throw"]).call(this._generator, - reason); - this._promise._popContext(); - } else { - this._promise._pushContext(); - result = tryCatch(this._generator["return"]).call(this._generator, - undefined); - this._promise._popContext(); - } - this._cancellationPhase = true; - this._yieldedPromise = null; - this._continue(result); -}; - -PromiseSpawn.prototype._promiseFulfilled = function(value) { - this._yieldedPromise = null; - this._promise._pushContext(); - var result = tryCatch(this._generator.next).call(this._generator, value); - this._promise._popContext(); - this._continue(result); -}; - -PromiseSpawn.prototype._promiseRejected = function(reason) { - this._yieldedPromise = null; - this._promise._attachExtraTrace(reason); - this._promise._pushContext(); - var result = tryCatch(this._generator["throw"]) - .call(this._generator, reason); - this._promise._popContext(); - this._continue(result); -}; - -PromiseSpawn.prototype._resultCancelled = function() { - if (this._yieldedPromise instanceof Promise) { - var promise = this._yieldedPromise; - this._yieldedPromise = null; - promise.cancel(); - } -}; - -PromiseSpawn.prototype.promise = function () { - return this._promise; -}; - -PromiseSpawn.prototype._run = function () { - this._generator = this._generatorFunction.call(this._receiver); - this._receiver = - this._generatorFunction = undefined; - this._promiseFulfilled(undefined); -}; - -PromiseSpawn.prototype._continue = function (result) { - var promise = this._promise; - if (result === errorObj) { - this._cleanup(); - if (this._cancellationPhase) { - return promise.cancel(); - } else { - return promise._rejectCallback(result.e, false); - } - } - - var value = result.value; - if (result.done === true) { - this._cleanup(); - if (this._cancellationPhase) { - return promise.cancel(); - } else { - return promise._resolveCallback(value); - } - } else { - var maybePromise = tryConvertToPromise(value, this._promise); - if (!(maybePromise instanceof Promise)) { - maybePromise = - promiseFromYieldHandler(maybePromise, - this._yieldHandlers, - this._promise); - if (maybePromise === null) { - this._promiseRejected( - new TypeError( - "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", String(value)) + - "From coroutine:\u000a" + - this._stack.split("\n").slice(1, -7).join("\n") - ) - ); - return; - } - } - maybePromise = maybePromise._target(); - var bitField = maybePromise._bitField; - ; - if (((bitField & 50397184) === 0)) { - this._yieldedPromise = maybePromise; - maybePromise._proxy(this, null); - } else if (((bitField & 33554432) !== 0)) { - Promise._async.invoke( - this._promiseFulfilled, this, maybePromise._value() - ); - } else if (((bitField & 16777216) !== 0)) { - Promise._async.invoke( - this._promiseRejected, this, maybePromise._reason() - ); - } else { - this._promiseCancelled(); - } - } -}; - -Promise.coroutine = function (generatorFunction, options) { - if (typeof generatorFunction !== "function") { - throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - var yieldHandler = Object(options).yieldHandler; - var PromiseSpawn$ = PromiseSpawn; - var stack = new Error().stack; - return function () { - var generator = generatorFunction.apply(this, arguments); - var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, - stack); - var ret = spawn.promise(); - spawn._generator = generator; - spawn._promiseFulfilled(undefined); - return ret; - }; -}; - -Promise.coroutine.addYieldHandler = function(fn) { - if (typeof fn !== "function") { - throw new TypeError("expecting a function but got " + util.classString(fn)); - } - yieldHandlers.push(fn); -}; - -Promise.spawn = function (generatorFunction) { - debug.deprecated("Promise.spawn()", "Promise.coroutine()"); - if (typeof generatorFunction !== "function") { - return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - var spawn = new PromiseSpawn(generatorFunction, this); - var ret = spawn.promise(); - spawn._run(Promise.spawn); - return ret; -}; -}; - -},{"./errors":12,"./util":36}],17:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, - getDomain) { -var util = _dereq_("./util"); -var canEvaluate = util.canEvaluate; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var reject; - -if (!true) { -if (canEvaluate) { - var thenCallback = function(i) { - return new Function("value", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = value; \n\ - holder.checkFulfillment(this); \n\ - ".replace(/Index/g, i)); - }; - - var promiseSetter = function(i) { - return new Function("promise", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = promise; \n\ - ".replace(/Index/g, i)); - }; - - var generateHolderClass = function(total) { - var props = new Array(total); - for (var i = 0; i < props.length; ++i) { - props[i] = "this.p" + (i+1); - } - var assignment = props.join(" = ") + " = null;"; - var cancellationCode= "var promise;\n" + props.map(function(prop) { - return " \n\ - promise = " + prop + "; \n\ - if (promise instanceof Promise) { \n\ - promise.cancel(); \n\ - } \n\ - "; - }).join("\n"); - var passedArguments = props.join(", "); - var name = "Holder$" + total; - - - var code = "return function(tryCatch, errorObj, Promise, async) { \n\ - 'use strict'; \n\ - function [TheName](fn) { \n\ - [TheProperties] \n\ - this.fn = fn; \n\ - this.asyncNeeded = true; \n\ - this.now = 0; \n\ - } \n\ - \n\ - [TheName].prototype._callFunction = function(promise) { \n\ - promise._pushContext(); \n\ - var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ - promise._popContext(); \n\ - if (ret === errorObj) { \n\ - promise._rejectCallback(ret.e, false); \n\ - } else { \n\ - promise._resolveCallback(ret); \n\ - } \n\ - }; \n\ - \n\ - [TheName].prototype.checkFulfillment = function(promise) { \n\ - var now = ++this.now; \n\ - if (now === [TheTotal]) { \n\ - if (this.asyncNeeded) { \n\ - async.invoke(this._callFunction, this, promise); \n\ - } else { \n\ - this._callFunction(promise); \n\ - } \n\ - \n\ - } \n\ - }; \n\ - \n\ - [TheName].prototype._resultCancelled = function() { \n\ - [CancellationCode] \n\ - }; \n\ - \n\ - return [TheName]; \n\ - }(tryCatch, errorObj, Promise, async); \n\ - "; - - code = code.replace(/\[TheName\]/g, name) - .replace(/\[TheTotal\]/g, total) - .replace(/\[ThePassedArguments\]/g, passedArguments) - .replace(/\[TheProperties\]/g, assignment) - .replace(/\[CancellationCode\]/g, cancellationCode); - - return new Function("tryCatch", "errorObj", "Promise", "async", code) - (tryCatch, errorObj, Promise, async); - }; - - var holderClasses = []; - var thenCallbacks = []; - var promiseSetters = []; - - for (var i = 0; i < 8; ++i) { - holderClasses.push(generateHolderClass(i + 1)); - thenCallbacks.push(thenCallback(i + 1)); - promiseSetters.push(promiseSetter(i + 1)); - } - - reject = function (reason) { - this._reject(reason); - }; -}} - -Promise.join = function () { - var last = arguments.length - 1; - var fn; - if (last > 0 && typeof arguments[last] === "function") { - fn = arguments[last]; - if (!true) { - if (last <= 8 && canEvaluate) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var HolderClass = holderClasses[last - 1]; - var holder = new HolderClass(fn); - var callbacks = thenCallbacks; - - for (var i = 0; i < last; ++i) { - var maybePromise = tryConvertToPromise(arguments[i], ret); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - var bitField = maybePromise._bitField; - ; - if (((bitField & 50397184) === 0)) { - maybePromise._then(callbacks[i], reject, - undefined, ret, holder); - promiseSetters[i](maybePromise, holder); - holder.asyncNeeded = false; - } else if (((bitField & 33554432) !== 0)) { - callbacks[i].call(ret, - maybePromise._value(), holder); - } else if (((bitField & 16777216) !== 0)) { - ret._reject(maybePromise._reason()); - } else { - ret._cancel(); - } - } else { - callbacks[i].call(ret, maybePromise, holder); - } - } - - if (!ret._isFateSealed()) { - if (holder.asyncNeeded) { - var domain = getDomain(); - if (domain !== null) { - holder.fn = util.domainBind(domain, holder.fn); - } - } - ret._setAsyncGuaranteed(); - ret._setOnCancel(holder); - } - return ret; - } - } - } - var args = [].slice.call(arguments);; - if (fn) args.pop(); - var ret = new PromiseArray(args).promise(); - return fn !== undefined ? ret.spread(fn) : ret; -}; - -}; - -},{"./util":36}],18:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL, - debug) { -var getDomain = Promise._getDomain; -var util = _dereq_("./util"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var async = Promise._async; - -function MappingPromiseArray(promises, fn, limit, _filter) { - this.constructor$(promises); - this._promise._captureStackTrace(); - var domain = getDomain(); - this._callback = domain === null ? fn : util.domainBind(domain, fn); - this._preservedValues = _filter === INTERNAL - ? new Array(this.length()) - : null; - this._limit = limit; - this._inFlight = 0; - this._queue = []; - async.invoke(this._asyncInit, this, undefined); -} -util.inherits(MappingPromiseArray, PromiseArray); - -MappingPromiseArray.prototype._asyncInit = function() { - this._init$(undefined, -2); -}; - -MappingPromiseArray.prototype._init = function () {}; - -MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { - var values = this._values; - var length = this.length(); - var preservedValues = this._preservedValues; - var limit = this._limit; - - if (index < 0) { - index = (index * -1) - 1; - values[index] = value; - if (limit >= 1) { - this._inFlight--; - this._drainQueue(); - if (this._isResolved()) return true; - } - } else { - if (limit >= 1 && this._inFlight >= limit) { - values[index] = value; - this._queue.push(index); - return false; - } - if (preservedValues !== null) preservedValues[index] = value; - - var promise = this._promise; - var callback = this._callback; - var receiver = promise._boundValue(); - promise._pushContext(); - var ret = tryCatch(callback).call(receiver, value, index, length); - var promiseCreated = promise._popContext(); - debug.checkForgottenReturns( - ret, - promiseCreated, - preservedValues !== null ? "Promise.filter" : "Promise.map", - promise - ); - if (ret === errorObj) { - this._reject(ret.e); - return true; - } - - var maybePromise = tryConvertToPromise(ret, this._promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - var bitField = maybePromise._bitField; - ; - if (((bitField & 50397184) === 0)) { - if (limit >= 1) this._inFlight++; - values[index] = maybePromise; - maybePromise._proxy(this, (index + 1) * -1); - return false; - } else if (((bitField & 33554432) !== 0)) { - ret = maybePromise._value(); - } else if (((bitField & 16777216) !== 0)) { - this._reject(maybePromise._reason()); - return true; - } else { - this._cancel(); - return true; - } - } - values[index] = ret; - } - var totalResolved = ++this._totalResolved; - if (totalResolved >= length) { - if (preservedValues !== null) { - this._filter(values, preservedValues); - } else { - this._resolve(values); - } - return true; - } - return false; -}; - -MappingPromiseArray.prototype._drainQueue = function () { - var queue = this._queue; - var limit = this._limit; - var values = this._values; - while (queue.length > 0 && this._inFlight < limit) { - if (this._isResolved()) return; - var index = queue.pop(); - this._promiseFulfilled(values[index], index); - } -}; - -MappingPromiseArray.prototype._filter = function (booleans, values) { - var len = values.length; - var ret = new Array(len); - var j = 0; - for (var i = 0; i < len; ++i) { - if (booleans[i]) ret[j++] = values[i]; - } - ret.length = j; - this._resolve(ret); -}; - -MappingPromiseArray.prototype.preservedValues = function () { - return this._preservedValues; -}; - -function map(promises, fn, options, _filter) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - - var limit = 0; - if (options !== undefined) { - if (typeof options === "object" && options !== null) { - if (typeof options.concurrency !== "number") { - return Promise.reject( - new TypeError("'concurrency' must be a number but it is " + - util.classString(options.concurrency))); - } - limit = options.concurrency; - } else { - return Promise.reject(new TypeError( - "options argument must be an object but it is " + - util.classString(options))); - } - } - limit = typeof limit === "number" && - isFinite(limit) && limit >= 1 ? limit : 0; - return new MappingPromiseArray(promises, fn, limit, _filter).promise(); -} - -Promise.prototype.map = function (fn, options) { - return map(this, fn, options, null); -}; - -Promise.map = function (promises, fn, options, _filter) { - return map(promises, fn, options, _filter); -}; - - -}; - -},{"./util":36}],19:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { -var util = _dereq_("./util"); -var tryCatch = util.tryCatch; - -Promise.method = function (fn) { - if (typeof fn !== "function") { - throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); - } - return function () { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value = tryCatch(fn).apply(this, arguments); - var promiseCreated = ret._popContext(); - debug.checkForgottenReturns( - value, promiseCreated, "Promise.method", ret); - ret._resolveFromSyncValue(value); - return ret; - }; -}; - -Promise.attempt = Promise["try"] = function (fn) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value; - if (arguments.length > 1) { - debug.deprecated("calling Promise.try with more than 1 argument"); - var arg = arguments[1]; - var ctx = arguments[2]; - value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) - : tryCatch(fn).call(ctx, arg); - } else { - value = tryCatch(fn)(); - } - var promiseCreated = ret._popContext(); - debug.checkForgottenReturns( - value, promiseCreated, "Promise.try", ret); - ret._resolveFromSyncValue(value); - return ret; -}; - -Promise.prototype._resolveFromSyncValue = function (value) { - if (value === util.errorObj) { - this._rejectCallback(value.e, false); - } else { - this._resolveCallback(value, true); - } -}; -}; - -},{"./util":36}],20:[function(_dereq_,module,exports){ -"use strict"; -var util = _dereq_("./util"); -var maybeWrapAsError = util.maybeWrapAsError; -var errors = _dereq_("./errors"); -var OperationalError = errors.OperationalError; -var es5 = _dereq_("./es5"); - -function isUntypedError(obj) { - return obj instanceof Error && - es5.getPrototypeOf(obj) === Error.prototype; -} - -var rErrorKey = /^(?:name|message|stack|cause)$/; -function wrapAsOperationalError(obj) { - var ret; - if (isUntypedError(obj)) { - ret = new OperationalError(obj); - ret.name = obj.name; - ret.message = obj.message; - ret.stack = obj.stack; - var keys = es5.keys(obj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (!rErrorKey.test(key)) { - ret[key] = obj[key]; - } - } - return ret; - } - util.markAsOriginatingFromRejection(obj); - return obj; -} - -function nodebackForPromise(promise, multiArgs) { - return function(err, value) { - if (promise === null) return; - if (err) { - var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); - promise._attachExtraTrace(wrapped); - promise._reject(wrapped); - } else if (!multiArgs) { - promise._fulfill(value); - } else { - var args = [].slice.call(arguments, 1);; - promise._fulfill(args); - } - promise = null; - }; -} - -module.exports = nodebackForPromise; - -},{"./errors":12,"./es5":13,"./util":36}],21:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -var util = _dereq_("./util"); -var async = Promise._async; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -function spreadAdapter(val, nodeback) { - var promise = this; - if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); - var ret = - tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -function successAdapter(val, nodeback) { - var promise = this; - var receiver = promise._boundValue(); - var ret = val === undefined - ? tryCatch(nodeback).call(receiver, null) - : tryCatch(nodeback).call(receiver, null, val); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} -function errorAdapter(reason, nodeback) { - var promise = this; - if (!reason) { - var newReason = new Error(reason + ""); - newReason.cause = reason; - reason = newReason; - } - var ret = tryCatch(nodeback).call(promise._boundValue(), reason); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, - options) { - if (typeof nodeback == "function") { - var adapter = successAdapter; - if (options !== undefined && Object(options).spread) { - adapter = spreadAdapter; - } - this._then( - adapter, - errorAdapter, - undefined, - this, - nodeback - ); - } - return this; -}; -}; - -},{"./util":36}],22:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function() { -var makeSelfResolutionError = function () { - return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); -}; -var reflectHandler = function() { - return new Promise.PromiseInspection(this._target()); -}; -var apiRejection = function(msg) { - return Promise.reject(new TypeError(msg)); -}; -function Proxyable() {} -var UNDEFINED_BINDING = {}; -var util = _dereq_("./util"); - -var getDomain; -if (util.isNode) { - getDomain = function() { - var ret = process.domain; - if (ret === undefined) ret = null; - return ret; - }; -} else { - getDomain = function() { - return null; - }; -} -util.notEnumerableProp(Promise, "_getDomain", getDomain); - -var es5 = _dereq_("./es5"); -var Async = _dereq_("./async"); -var async = new Async(); -es5.defineProperty(Promise, "_async", {value: async}); -var errors = _dereq_("./errors"); -var TypeError = Promise.TypeError = errors.TypeError; -Promise.RangeError = errors.RangeError; -var CancellationError = Promise.CancellationError = errors.CancellationError; -Promise.TimeoutError = errors.TimeoutError; -Promise.OperationalError = errors.OperationalError; -Promise.RejectionError = errors.OperationalError; -Promise.AggregateError = errors.AggregateError; -var INTERNAL = function(){}; -var APPLY = {}; -var NEXT_FILTER = {}; -var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL); -var PromiseArray = - _dereq_("./promise_array")(Promise, INTERNAL, - tryConvertToPromise, apiRejection, Proxyable); -var Context = _dereq_("./context")(Promise); - /*jshint unused:false*/ -var createContext = Context.create; -var debug = _dereq_("./debuggability")(Promise, Context); -var CapturedTrace = debug.CapturedTrace; -var PassThroughHandlerContext = - _dereq_("./finally")(Promise, tryConvertToPromise, NEXT_FILTER); -var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); -var nodebackForPromise = _dereq_("./nodeback"); -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; -function check(self, executor) { - if (self == null || self.constructor !== Promise) { - throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - if (typeof executor !== "function") { - throw new TypeError("expecting a function but got " + util.classString(executor)); - } - -} - -function Promise(executor) { - if (executor !== INTERNAL) { - check(this, executor); - } - this._bitField = 0; - this._fulfillmentHandler0 = undefined; - this._rejectionHandler0 = undefined; - this._promise0 = undefined; - this._receiver0 = undefined; - this._resolveFromExecutor(executor); - this._promiseCreated(); - this._fireEvent("promiseCreated", this); -} - -Promise.prototype.toString = function () { - return "[object Promise]"; -}; - -Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { - var len = arguments.length; - if (len > 1) { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (util.isObject(item)) { - catchInstances[j++] = item; - } else { - return apiRejection("Catch statement predicate: " + - "expecting an object but got " + util.classString(item)); - } - } - catchInstances.length = j; - fn = arguments[i]; - return this.then(undefined, catchFilter(catchInstances, fn, this)); - } - return this.then(undefined, fn); -}; - -Promise.prototype.reflect = function () { - return this._then(reflectHandler, - reflectHandler, undefined, this, undefined); -}; - -Promise.prototype.then = function (didFulfill, didReject) { - if (debug.warnings() && arguments.length > 0 && - typeof didFulfill !== "function" && - typeof didReject !== "function") { - var msg = ".then() only accepts functions but was passed: " + - util.classString(didFulfill); - if (arguments.length > 1) { - msg += ", " + util.classString(didReject); - } - this._warn(msg); - } - return this._then(didFulfill, didReject, undefined, undefined, undefined); -}; - -Promise.prototype.done = function (didFulfill, didReject) { - var promise = - this._then(didFulfill, didReject, undefined, undefined, undefined); - promise._setIsFinal(); -}; - -Promise.prototype.spread = function (fn) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - return this.all()._then(fn, undefined, undefined, APPLY, undefined); -}; - -Promise.prototype.toJSON = function () { - var ret = { - isFulfilled: false, - isRejected: false, - fulfillmentValue: undefined, - rejectionReason: undefined - }; - if (this.isFulfilled()) { - ret.fulfillmentValue = this.value(); - ret.isFulfilled = true; - } else if (this.isRejected()) { - ret.rejectionReason = this.reason(); - ret.isRejected = true; - } - return ret; -}; - -Promise.prototype.all = function () { - if (arguments.length > 0) { - this._warn(".all() was passed arguments but it does not take any"); - } - return new PromiseArray(this).promise(); -}; - -Promise.prototype.error = function (fn) { - return this.caught(util.originatesFromRejection, fn); -}; - -Promise.getNewLibraryCopy = module.exports; - -Promise.is = function (val) { - return val instanceof Promise; -}; - -Promise.fromNode = Promise.fromCallback = function(fn) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs - : false; - var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); - if (result === errorObj) { - ret._rejectCallback(result.e, true); - } - if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); - return ret; -}; - -Promise.all = function (promises) { - return new PromiseArray(promises).promise(); -}; - -Promise.cast = function (obj) { - var ret = tryConvertToPromise(obj); - if (!(ret instanceof Promise)) { - ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._setFulfilled(); - ret._rejectionHandler0 = obj; - } - return ret; -}; - -Promise.resolve = Promise.fulfilled = Promise.cast; - -Promise.reject = Promise.rejected = function (reason) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._rejectCallback(reason, true); - return ret; -}; - -Promise.setScheduler = function(fn) { - if (typeof fn !== "function") { - throw new TypeError("expecting a function but got " + util.classString(fn)); - } - return async.setScheduler(fn); -}; - -Promise.prototype._then = function ( - didFulfill, - didReject, - _, receiver, - internalData -) { - var haveInternalData = internalData !== undefined; - var promise = haveInternalData ? internalData : new Promise(INTERNAL); - var target = this._target(); - var bitField = target._bitField; - - if (!haveInternalData) { - promise._propagateFrom(this, 3); - promise._captureStackTrace(); - if (receiver === undefined && - ((this._bitField & 2097152) !== 0)) { - if (!((bitField & 50397184) === 0)) { - receiver = this._boundValue(); - } else { - receiver = target === this ? undefined : this._boundTo; - } - } - this._fireEvent("promiseChained", this, promise); - } - - var domain = getDomain(); - if (!((bitField & 50397184) === 0)) { - var handler, value, settler = target._settlePromiseCtx; - if (((bitField & 33554432) !== 0)) { - value = target._rejectionHandler0; - handler = didFulfill; - } else if (((bitField & 16777216) !== 0)) { - value = target._fulfillmentHandler0; - handler = didReject; - target._unsetRejectionIsUnhandled(); - } else { - settler = target._settlePromiseLateCancellationObserver; - value = new CancellationError("late cancellation observer"); - target._attachExtraTrace(value); - handler = didReject; - } - - async.invoke(settler, target, { - handler: domain === null ? handler - : (typeof handler === "function" && - util.domainBind(domain, handler)), - promise: promise, - receiver: receiver, - value: value - }); - } else { - target._addCallbacks(didFulfill, didReject, promise, receiver, domain); - } - - return promise; -}; - -Promise.prototype._length = function () { - return this._bitField & 65535; -}; - -Promise.prototype._isFateSealed = function () { - return (this._bitField & 117506048) !== 0; -}; - -Promise.prototype._isFollowing = function () { - return (this._bitField & 67108864) === 67108864; -}; - -Promise.prototype._setLength = function (len) { - this._bitField = (this._bitField & -65536) | - (len & 65535); -}; - -Promise.prototype._setFulfilled = function () { - this._bitField = this._bitField | 33554432; - this._fireEvent("promiseFulfilled", this); -}; - -Promise.prototype._setRejected = function () { - this._bitField = this._bitField | 16777216; - this._fireEvent("promiseRejected", this); -}; - -Promise.prototype._setFollowing = function () { - this._bitField = this._bitField | 67108864; - this._fireEvent("promiseResolved", this); -}; - -Promise.prototype._setIsFinal = function () { - this._bitField = this._bitField | 4194304; -}; - -Promise.prototype._isFinal = function () { - return (this._bitField & 4194304) > 0; -}; - -Promise.prototype._unsetCancelled = function() { - this._bitField = this._bitField & (~65536); -}; - -Promise.prototype._setCancelled = function() { - this._bitField = this._bitField | 65536; - this._fireEvent("promiseCancelled", this); -}; - -Promise.prototype._setWillBeCancelled = function() { - this._bitField = this._bitField | 8388608; -}; - -Promise.prototype._setAsyncGuaranteed = function() { - if (async.hasCustomScheduler()) return; - this._bitField = this._bitField | 134217728; -}; - -Promise.prototype._receiverAt = function (index) { - var ret = index === 0 ? this._receiver0 : this[ - index * 4 - 4 + 3]; - if (ret === UNDEFINED_BINDING) { - return undefined; - } else if (ret === undefined && this._isBound()) { - return this._boundValue(); - } - return ret; -}; - -Promise.prototype._promiseAt = function (index) { - return this[ - index * 4 - 4 + 2]; -}; - -Promise.prototype._fulfillmentHandlerAt = function (index) { - return this[ - index * 4 - 4 + 0]; -}; - -Promise.prototype._rejectionHandlerAt = function (index) { - return this[ - index * 4 - 4 + 1]; -}; - -Promise.prototype._boundValue = function() {}; - -Promise.prototype._migrateCallback0 = function (follower) { - var bitField = follower._bitField; - var fulfill = follower._fulfillmentHandler0; - var reject = follower._rejectionHandler0; - var promise = follower._promise0; - var receiver = follower._receiverAt(0); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, promise, receiver, null); -}; - -Promise.prototype._migrateCallbackAt = function (follower, index) { - var fulfill = follower._fulfillmentHandlerAt(index); - var reject = follower._rejectionHandlerAt(index); - var promise = follower._promiseAt(index); - var receiver = follower._receiverAt(index); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, promise, receiver, null); -}; - -Promise.prototype._addCallbacks = function ( - fulfill, - reject, - promise, - receiver, - domain -) { - var index = this._length(); - - if (index >= 65535 - 4) { - index = 0; - this._setLength(0); - } - - if (index === 0) { - this._promise0 = promise; - this._receiver0 = receiver; - if (typeof fulfill === "function") { - this._fulfillmentHandler0 = - domain === null ? fulfill : util.domainBind(domain, fulfill); - } - if (typeof reject === "function") { - this._rejectionHandler0 = - domain === null ? reject : util.domainBind(domain, reject); - } - } else { - var base = index * 4 - 4; - this[base + 2] = promise; - this[base + 3] = receiver; - if (typeof fulfill === "function") { - this[base + 0] = - domain === null ? fulfill : util.domainBind(domain, fulfill); - } - if (typeof reject === "function") { - this[base + 1] = - domain === null ? reject : util.domainBind(domain, reject); - } - } - this._setLength(index + 1); - return index; -}; - -Promise.prototype._proxy = function (proxyable, arg) { - this._addCallbacks(undefined, undefined, arg, proxyable, null); -}; - -Promise.prototype._resolveCallback = function(value, shouldBind) { - if (((this._bitField & 117506048) !== 0)) return; - if (value === this) - return this._rejectCallback(makeSelfResolutionError(), false); - var maybePromise = tryConvertToPromise(value, this); - if (!(maybePromise instanceof Promise)) return this._fulfill(value); - - if (shouldBind) this._propagateFrom(maybePromise, 2); - - var promise = maybePromise._target(); - - if (promise === this) { - this._reject(makeSelfResolutionError()); - return; - } - - var bitField = promise._bitField; - if (((bitField & 50397184) === 0)) { - var len = this._length(); - if (len > 0) promise._migrateCallback0(this); - for (var i = 1; i < len; ++i) { - promise._migrateCallbackAt(this, i); - } - this._setFollowing(); - this._setLength(0); - this._setFollowee(promise); - } else if (((bitField & 33554432) !== 0)) { - this._fulfill(promise._value()); - } else if (((bitField & 16777216) !== 0)) { - this._reject(promise._reason()); - } else { - var reason = new CancellationError("late cancellation observer"); - promise._attachExtraTrace(reason); - this._reject(reason); - } -}; - -Promise.prototype._rejectCallback = -function(reason, synchronous, ignoreNonErrorWarnings) { - var trace = util.ensureErrorObject(reason); - var hasStack = trace === reason; - if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { - var message = "a promise was rejected with a non-error: " + - util.classString(reason); - this._warn(message, true); - } - this._attachExtraTrace(trace, synchronous ? hasStack : false); - this._reject(reason); -}; - -Promise.prototype._resolveFromExecutor = function (executor) { - if (executor === INTERNAL) return; - var promise = this; - this._captureStackTrace(); - this._pushContext(); - var synchronous = true; - var r = this._execute(executor, function(value) { - promise._resolveCallback(value); - }, function (reason) { - promise._rejectCallback(reason, synchronous); - }); - synchronous = false; - this._popContext(); - - if (r !== undefined) { - promise._rejectCallback(r, true); - } -}; - -Promise.prototype._settlePromiseFromHandler = function ( - handler, receiver, value, promise -) { - var bitField = promise._bitField; - if (((bitField & 65536) !== 0)) return; - promise._pushContext(); - var x; - if (receiver === APPLY) { - if (!value || typeof value.length !== "number") { - x = errorObj; - x.e = new TypeError("cannot .spread() a non-array: " + - util.classString(value)); - } else { - x = tryCatch(handler).apply(this._boundValue(), value); - } - } else { - x = tryCatch(handler).call(receiver, value); - } - var promiseCreated = promise._popContext(); - bitField = promise._bitField; - if (((bitField & 65536) !== 0)) return; - - if (x === NEXT_FILTER) { - promise._reject(value); - } else if (x === errorObj) { - promise._rejectCallback(x.e, false); - } else { - debug.checkForgottenReturns(x, promiseCreated, "", promise, this); - promise._resolveCallback(x); - } -}; - -Promise.prototype._target = function() { - var ret = this; - while (ret._isFollowing()) ret = ret._followee(); - return ret; -}; - -Promise.prototype._followee = function() { - return this._rejectionHandler0; -}; - -Promise.prototype._setFollowee = function(promise) { - this._rejectionHandler0 = promise; -}; - -Promise.prototype._settlePromise = function(promise, handler, receiver, value) { - var isPromise = promise instanceof Promise; - var bitField = this._bitField; - var asyncGuaranteed = ((bitField & 134217728) !== 0); - if (((bitField & 65536) !== 0)) { - if (isPromise) promise._invokeInternalOnCancel(); - - if (receiver instanceof PassThroughHandlerContext && - receiver.isFinallyHandler()) { - receiver.cancelPromise = promise; - if (tryCatch(handler).call(receiver, value) === errorObj) { - promise._reject(errorObj.e); - } - } else if (handler === reflectHandler) { - promise._fulfill(reflectHandler.call(receiver)); - } else if (receiver instanceof Proxyable) { - receiver._promiseCancelled(promise); - } else if (isPromise || promise instanceof PromiseArray) { - promise._cancel(); - } else { - receiver.cancel(); - } - } else if (typeof handler === "function") { - if (!isPromise) { - handler.call(receiver, value, promise); - } else { - if (asyncGuaranteed) promise._setAsyncGuaranteed(); - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (receiver instanceof Proxyable) { - if (!receiver._isResolved()) { - if (((bitField & 33554432) !== 0)) { - receiver._promiseFulfilled(value, promise); - } else { - receiver._promiseRejected(value, promise); - } - } - } else if (isPromise) { - if (asyncGuaranteed) promise._setAsyncGuaranteed(); - if (((bitField & 33554432) !== 0)) { - promise._fulfill(value); - } else { - promise._reject(value); - } - } -}; - -Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { - var handler = ctx.handler; - var promise = ctx.promise; - var receiver = ctx.receiver; - var value = ctx.value; - if (typeof handler === "function") { - if (!(promise instanceof Promise)) { - handler.call(receiver, value, promise); - } else { - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (promise instanceof Promise) { - promise._reject(value); - } -}; - -Promise.prototype._settlePromiseCtx = function(ctx) { - this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); -}; - -Promise.prototype._settlePromise0 = function(handler, value, bitField) { - var promise = this._promise0; - var receiver = this._receiverAt(0); - this._promise0 = undefined; - this._receiver0 = undefined; - this._settlePromise(promise, handler, receiver, value); -}; - -Promise.prototype._clearCallbackDataAtIndex = function(index) { - var base = index * 4 - 4; - this[base + 2] = - this[base + 3] = - this[base + 0] = - this[base + 1] = undefined; -}; - -Promise.prototype._fulfill = function (value) { - var bitField = this._bitField; - if (((bitField & 117506048) >>> 16)) return; - if (value === this) { - var err = makeSelfResolutionError(); - this._attachExtraTrace(err); - return this._reject(err); - } - this._setFulfilled(); - this._rejectionHandler0 = value; - - if ((bitField & 65535) > 0) { - if (((bitField & 134217728) !== 0)) { - this._settlePromises(); - } else { - async.settlePromises(this); - } - this._dereferenceTrace(); - } -}; - -Promise.prototype._reject = function (reason) { - var bitField = this._bitField; - if (((bitField & 117506048) >>> 16)) return; - this._setRejected(); - this._fulfillmentHandler0 = reason; - - if (this._isFinal()) { - return async.fatalError(reason, util.isNode); - } - - if ((bitField & 65535) > 0) { - async.settlePromises(this); - } else { - this._ensurePossibleRejectionHandled(); - } -}; - -Promise.prototype._fulfillPromises = function (len, value) { - for (var i = 1; i < len; i++) { - var handler = this._fulfillmentHandlerAt(i); - var promise = this._promiseAt(i); - var receiver = this._receiverAt(i); - this._clearCallbackDataAtIndex(i); - this._settlePromise(promise, handler, receiver, value); - } -}; - -Promise.prototype._rejectPromises = function (len, reason) { - for (var i = 1; i < len; i++) { - var handler = this._rejectionHandlerAt(i); - var promise = this._promiseAt(i); - var receiver = this._receiverAt(i); - this._clearCallbackDataAtIndex(i); - this._settlePromise(promise, handler, receiver, reason); - } -}; - -Promise.prototype._settlePromises = function () { - var bitField = this._bitField; - var len = (bitField & 65535); - - if (len > 0) { - if (((bitField & 16842752) !== 0)) { - var reason = this._fulfillmentHandler0; - this._settlePromise0(this._rejectionHandler0, reason, bitField); - this._rejectPromises(len, reason); - } else { - var value = this._rejectionHandler0; - this._settlePromise0(this._fulfillmentHandler0, value, bitField); - this._fulfillPromises(len, value); - } - this._setLength(0); - } - this._clearCancellationData(); -}; - -Promise.prototype._settledValue = function() { - var bitField = this._bitField; - if (((bitField & 33554432) !== 0)) { - return this._rejectionHandler0; - } else if (((bitField & 16777216) !== 0)) { - return this._fulfillmentHandler0; - } -}; - -function deferResolve(v) {this.promise._resolveCallback(v);} -function deferReject(v) {this.promise._rejectCallback(v, false);} - -Promise.defer = Promise.pending = function() { - debug.deprecated("Promise.defer", "new Promise"); - var promise = new Promise(INTERNAL); - return { - promise: promise, - resolve: deferResolve, - reject: deferReject - }; -}; - -util.notEnumerableProp(Promise, - "_makeSelfResolutionError", - makeSelfResolutionError); - -_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, - debug); -_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); -_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug); -_dereq_("./direct_resolve")(Promise); -_dereq_("./synchronous_inspection")(Promise); -_dereq_("./join")( - Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); -Promise.Promise = Promise; -Promise.version = "3.5.3"; -_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); -_dereq_('./call_get.js')(Promise); -_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug); -_dereq_('./timers.js')(Promise, INTERNAL, debug); -_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug); -_dereq_('./nodeify.js')(Promise); -_dereq_('./promisify.js')(Promise, INTERNAL); -_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); -_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); -_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); -_dereq_('./settle.js')(Promise, PromiseArray, debug); -_dereq_('./some.js')(Promise, PromiseArray, apiRejection); -_dereq_('./filter.js')(Promise, INTERNAL); -_dereq_('./each.js')(Promise, INTERNAL); -_dereq_('./any.js')(Promise); - - util.toFastProperties(Promise); - util.toFastProperties(Promise.prototype); - function fillTypes(value) { - var p = new Promise(INTERNAL); - p._fulfillmentHandler0 = value; - p._rejectionHandler0 = value; - p._promise0 = value; - p._receiver0 = value; - } - // Complete slack tracking, opt out of field-type tracking and - // stabilize map - fillTypes({a: 1}); - fillTypes({b: 2}); - fillTypes({c: 3}); - fillTypes(1); - fillTypes(function(){}); - fillTypes(undefined); - fillTypes(false); - fillTypes(new Promise(INTERNAL)); - debug.setBounds(Async.firstLineError, util.lastLineError); - return Promise; - -}; - -},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, - apiRejection, Proxyable) { -var util = _dereq_("./util"); -var isArray = util.isArray; - -function toResolutionValue(val) { - switch(val) { - case -2: return []; - case -3: return {}; - case -6: return new Map(); - } -} - -function PromiseArray(values) { - var promise = this._promise = new Promise(INTERNAL); - if (values instanceof Promise) { - promise._propagateFrom(values, 3); - } - promise._setOnCancel(this); - this._values = values; - this._length = 0; - this._totalResolved = 0; - this._init(undefined, -2); -} -util.inherits(PromiseArray, Proxyable); - -PromiseArray.prototype.length = function () { - return this._length; -}; - -PromiseArray.prototype.promise = function () { - return this._promise; -}; - -PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { - var values = tryConvertToPromise(this._values, this._promise); - if (values instanceof Promise) { - values = values._target(); - var bitField = values._bitField; - ; - this._values = values; - - if (((bitField & 50397184) === 0)) { - this._promise._setAsyncGuaranteed(); - return values._then( - init, - this._reject, - undefined, - this, - resolveValueIfEmpty - ); - } else if (((bitField & 33554432) !== 0)) { - values = values._value(); - } else if (((bitField & 16777216) !== 0)) { - return this._reject(values._reason()); - } else { - return this._cancel(); - } - } - values = util.asArray(values); - if (values === null) { - var err = apiRejection( - "expecting an array or an iterable object but got " + util.classString(values)).reason(); - this._promise._rejectCallback(err, false); - return; - } - - if (values.length === 0) { - if (resolveValueIfEmpty === -5) { - this._resolveEmptyArray(); - } - else { - this._resolve(toResolutionValue(resolveValueIfEmpty)); - } - return; - } - this._iterate(values); -}; - -PromiseArray.prototype._iterate = function(values) { - var len = this.getActualLength(values.length); - this._length = len; - this._values = this.shouldCopyValues() ? new Array(len) : this._values; - var result = this._promise; - var isResolved = false; - var bitField = null; - for (var i = 0; i < len; ++i) { - var maybePromise = tryConvertToPromise(values[i], result); - - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - bitField = maybePromise._bitField; - } else { - bitField = null; - } - - if (isResolved) { - if (bitField !== null) { - maybePromise.suppressUnhandledRejections(); - } - } else if (bitField !== null) { - if (((bitField & 50397184) === 0)) { - maybePromise._proxy(this, i); - this._values[i] = maybePromise; - } else if (((bitField & 33554432) !== 0)) { - isResolved = this._promiseFulfilled(maybePromise._value(), i); - } else if (((bitField & 16777216) !== 0)) { - isResolved = this._promiseRejected(maybePromise._reason(), i); - } else { - isResolved = this._promiseCancelled(i); - } - } else { - isResolved = this._promiseFulfilled(maybePromise, i); - } - } - if (!isResolved) result._setAsyncGuaranteed(); -}; - -PromiseArray.prototype._isResolved = function () { - return this._values === null; -}; - -PromiseArray.prototype._resolve = function (value) { - this._values = null; - this._promise._fulfill(value); -}; - -PromiseArray.prototype._cancel = function() { - if (this._isResolved() || !this._promise._isCancellable()) return; - this._values = null; - this._promise._cancel(); -}; - -PromiseArray.prototype._reject = function (reason) { - this._values = null; - this._promise._rejectCallback(reason, false); -}; - -PromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - this._resolve(this._values); - return true; - } - return false; -}; - -PromiseArray.prototype._promiseCancelled = function() { - this._cancel(); - return true; -}; - -PromiseArray.prototype._promiseRejected = function (reason) { - this._totalResolved++; - this._reject(reason); - return true; -}; - -PromiseArray.prototype._resultCancelled = function() { - if (this._isResolved()) return; - var values = this._values; - this._cancel(); - if (values instanceof Promise) { - values.cancel(); - } else { - for (var i = 0; i < values.length; ++i) { - if (values[i] instanceof Promise) { - values[i].cancel(); - } - } - } -}; - -PromiseArray.prototype.shouldCopyValues = function () { - return true; -}; - -PromiseArray.prototype.getActualLength = function (len) { - return len; -}; - -return PromiseArray; -}; - -},{"./util":36}],24:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var THIS = {}; -var util = _dereq_("./util"); -var nodebackForPromise = _dereq_("./nodeback"); -var withAppended = util.withAppended; -var maybeWrapAsError = util.maybeWrapAsError; -var canEvaluate = util.canEvaluate; -var TypeError = _dereq_("./errors").TypeError; -var defaultSuffix = "Async"; -var defaultPromisified = {__isPromisified__: true}; -var noCopyProps = [ - "arity", "length", - "name", - "arguments", - "caller", - "callee", - "prototype", - "__isPromisified__" -]; -var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); - -var defaultFilter = function(name) { - return util.isIdentifier(name) && - name.charAt(0) !== "_" && - name !== "constructor"; -}; - -function propsFilter(key) { - return !noCopyPropsPattern.test(key); -} - -function isPromisified(fn) { - try { - return fn.__isPromisified__ === true; - } - catch (e) { - return false; - } -} - -function hasPromisified(obj, key, suffix) { - var val = util.getDataPropertyOrDefault(obj, key + suffix, - defaultPromisified); - return val ? isPromisified(val) : false; -} -function checkValid(ret, suffix, suffixRegexp) { - for (var i = 0; i < ret.length; i += 2) { - var key = ret[i]; - if (suffixRegexp.test(key)) { - var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); - for (var j = 0; j < ret.length; j += 2) { - if (ret[j] === keyWithoutAsyncSuffix) { - throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a" - .replace("%s", suffix)); - } - } - } - } -} - -function promisifiableMethods(obj, suffix, suffixRegexp, filter) { - var keys = util.inheritedDataKeys(obj); - var ret = []; - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var value = obj[key]; - var passesDefaultFilter = filter === defaultFilter - ? true : defaultFilter(key, value, obj); - if (typeof value === "function" && - !isPromisified(value) && - !hasPromisified(obj, key, suffix) && - filter(key, value, obj, passesDefaultFilter)) { - ret.push(key, value); - } - } - checkValid(ret, suffix, suffixRegexp); - return ret; -} - -var escapeIdentRegex = function(str) { - return str.replace(/([$])/, "\\$"); -}; - -var makeNodePromisifiedEval; -if (!true) { -var switchCaseArgumentOrder = function(likelyArgumentCount) { - var ret = [likelyArgumentCount]; - var min = Math.max(0, likelyArgumentCount - 1 - 3); - for(var i = likelyArgumentCount - 1; i >= min; --i) { - ret.push(i); - } - for(var i = likelyArgumentCount + 1; i <= 3; ++i) { - ret.push(i); - } - return ret; -}; - -var argumentSequence = function(argumentCount) { - return util.filledRange(argumentCount, "_arg", ""); -}; - -var parameterDeclaration = function(parameterCount) { - return util.filledRange( - Math.max(parameterCount, 3), "_arg", ""); -}; - -var parameterCount = function(fn) { - if (typeof fn.length === "number") { - return Math.max(Math.min(fn.length, 1023 + 1), 0); - } - return 0; -}; - -makeNodePromisifiedEval = -function(callback, receiver, originalName, fn, _, multiArgs) { - var newParameterCount = Math.max(0, parameterCount(fn) - 1); - var argumentOrder = switchCaseArgumentOrder(newParameterCount); - var shouldProxyThis = typeof callback === "string" || receiver === THIS; - - function generateCallForArgumentCount(count) { - var args = argumentSequence(count).join(", "); - var comma = count > 0 ? ", " : ""; - var ret; - if (shouldProxyThis) { - ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; - } else { - ret = receiver === undefined - ? "ret = callback({{args}}, nodeback); break;\n" - : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; - } - return ret.replace("{{args}}", args).replace(", ", comma); - } - - function generateArgumentSwitchCase() { - var ret = ""; - for (var i = 0; i < argumentOrder.length; ++i) { - ret += "case " + argumentOrder[i] +":" + - generateCallForArgumentCount(argumentOrder[i]); - } - - ret += " \n\ - default: \n\ - var args = new Array(len + 1); \n\ - var i = 0; \n\ - for (var i = 0; i < len; ++i) { \n\ - args[i] = arguments[i]; \n\ - } \n\ - args[i] = nodeback; \n\ - [CodeForCall] \n\ - break; \n\ - ".replace("[CodeForCall]", (shouldProxyThis - ? "ret = callback.apply(this, args);\n" - : "ret = callback.apply(receiver, args);\n")); - return ret; - } - - var getFunctionCode = typeof callback === "string" - ? ("this != null ? this['"+callback+"'] : fn") - : "fn"; - var body = "'use strict'; \n\ - var ret = function (Parameters) { \n\ - 'use strict'; \n\ - var len = arguments.length; \n\ - var promise = new Promise(INTERNAL); \n\ - promise._captureStackTrace(); \n\ - var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ - var ret; \n\ - var callback = tryCatch([GetFunctionCode]); \n\ - switch(len) { \n\ - [CodeForSwitchCase] \n\ - } \n\ - if (ret === errorObj) { \n\ - promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ - } \n\ - if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ - return promise; \n\ - }; \n\ - notEnumerableProp(ret, '__isPromisified__', true); \n\ - return ret; \n\ - ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) - .replace("[GetFunctionCode]", getFunctionCode); - body = body.replace("Parameters", parameterDeclaration(newParameterCount)); - return new Function("Promise", - "fn", - "receiver", - "withAppended", - "maybeWrapAsError", - "nodebackForPromise", - "tryCatch", - "errorObj", - "notEnumerableProp", - "INTERNAL", - body)( - Promise, - fn, - receiver, - withAppended, - maybeWrapAsError, - nodebackForPromise, - util.tryCatch, - util.errorObj, - util.notEnumerableProp, - INTERNAL); -}; -} - -function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { - var defaultThis = (function() {return this;})(); - var method = callback; - if (typeof method === "string") { - callback = fn; - } - function promisified() { - var _receiver = receiver; - if (receiver === THIS) _receiver = this; - var promise = new Promise(INTERNAL); - promise._captureStackTrace(); - var cb = typeof method === "string" && this !== defaultThis - ? this[method] : callback; - var fn = nodebackForPromise(promise, multiArgs); - try { - cb.apply(_receiver, withAppended(arguments, fn)); - } catch(e) { - promise._rejectCallback(maybeWrapAsError(e), true, true); - } - if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); - return promise; - } - util.notEnumerableProp(promisified, "__isPromisified__", true); - return promisified; -} - -var makeNodePromisified = canEvaluate - ? makeNodePromisifiedEval - : makeNodePromisifiedClosure; - -function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { - var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); - var methods = - promisifiableMethods(obj, suffix, suffixRegexp, filter); - - for (var i = 0, len = methods.length; i < len; i+= 2) { - var key = methods[i]; - var fn = methods[i+1]; - var promisifiedKey = key + suffix; - if (promisifier === makeNodePromisified) { - obj[promisifiedKey] = - makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); - } else { - var promisified = promisifier(fn, function() { - return makeNodePromisified(key, THIS, key, - fn, suffix, multiArgs); - }); - util.notEnumerableProp(promisified, "__isPromisified__", true); - obj[promisifiedKey] = promisified; - } - } - util.toFastProperties(obj); - return obj; -} - -function promisify(callback, receiver, multiArgs) { - return makeNodePromisified(callback, receiver, undefined, - callback, null, multiArgs); -} - -Promise.promisify = function (fn, options) { - if (typeof fn !== "function") { - throw new TypeError("expecting a function but got " + util.classString(fn)); - } - if (isPromisified(fn)) { - return fn; - } - options = Object(options); - var receiver = options.context === undefined ? THIS : options.context; - var multiArgs = !!options.multiArgs; - var ret = promisify(fn, receiver, multiArgs); - util.copyDescriptors(fn, ret, propsFilter); - return ret; -}; - -Promise.promisifyAll = function (target, options) { - if (typeof target !== "function" && typeof target !== "object") { - throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - options = Object(options); - var multiArgs = !!options.multiArgs; - var suffix = options.suffix; - if (typeof suffix !== "string") suffix = defaultSuffix; - var filter = options.filter; - if (typeof filter !== "function") filter = defaultFilter; - var promisifier = options.promisifier; - if (typeof promisifier !== "function") promisifier = makeNodePromisified; - - if (!util.isIdentifier(suffix)) { - throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - - var keys = util.inheritedDataKeys(target); - for (var i = 0; i < keys.length; ++i) { - var value = target[keys[i]]; - if (keys[i] !== "constructor" && - util.isClass(value)) { - promisifyAll(value.prototype, suffix, filter, promisifier, - multiArgs); - promisifyAll(value, suffix, filter, promisifier, multiArgs); - } - } - - return promisifyAll(target, suffix, filter, promisifier, multiArgs); -}; -}; - - -},{"./errors":12,"./nodeback":20,"./util":36}],25:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function( - Promise, PromiseArray, tryConvertToPromise, apiRejection) { -var util = _dereq_("./util"); -var isObject = util.isObject; -var es5 = _dereq_("./es5"); -var Es6Map; -if (typeof Map === "function") Es6Map = Map; - -var mapToEntries = (function() { - var index = 0; - var size = 0; - - function extractEntry(value, key) { - this[index] = value; - this[index + size] = key; - index++; - } - - return function mapToEntries(map) { - size = map.size; - index = 0; - var ret = new Array(map.size * 2); - map.forEach(extractEntry, ret); - return ret; - }; -})(); - -var entriesToMap = function(entries) { - var ret = new Es6Map(); - var length = entries.length / 2 | 0; - for (var i = 0; i < length; ++i) { - var key = entries[length + i]; - var value = entries[i]; - ret.set(key, value); - } - return ret; -}; - -function PropertiesPromiseArray(obj) { - var isMap = false; - var entries; - if (Es6Map !== undefined && obj instanceof Es6Map) { - entries = mapToEntries(obj); - isMap = true; - } else { - var keys = es5.keys(obj); - var len = keys.length; - entries = new Array(len * 2); - for (var i = 0; i < len; ++i) { - var key = keys[i]; - entries[i] = obj[key]; - entries[i + len] = key; - } - } - this.constructor$(entries); - this._isMap = isMap; - this._init$(undefined, isMap ? -6 : -3); -} -util.inherits(PropertiesPromiseArray, PromiseArray); - -PropertiesPromiseArray.prototype._init = function () {}; - -PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - var val; - if (this._isMap) { - val = entriesToMap(this._values); - } else { - val = {}; - var keyOffset = this.length(); - for (var i = 0, len = this.length(); i < len; ++i) { - val[this._values[i + keyOffset]] = this._values[i]; - } - } - this._resolve(val); - return true; - } - return false; -}; - -PropertiesPromiseArray.prototype.shouldCopyValues = function () { - return false; -}; - -PropertiesPromiseArray.prototype.getActualLength = function (len) { - return len >> 1; -}; - -function props(promises) { - var ret; - var castValue = tryConvertToPromise(promises); - - if (!isObject(castValue)) { - return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } else if (castValue instanceof Promise) { - ret = castValue._then( - Promise.props, undefined, undefined, undefined, undefined); - } else { - ret = new PropertiesPromiseArray(castValue).promise(); - } - - if (castValue instanceof Promise) { - ret._propagateFrom(castValue, 2); - } - return ret; -} - -Promise.prototype.props = function () { - return props(this); -}; - -Promise.props = function (promises) { - return props(promises); -}; -}; - -},{"./es5":13,"./util":36}],26:[function(_dereq_,module,exports){ -"use strict"; -function arrayMove(src, srcIndex, dst, dstIndex, len) { - for (var j = 0; j < len; ++j) { - dst[j + dstIndex] = src[j + srcIndex]; - src[j + srcIndex] = void 0; - } -} - -function Queue(capacity) { - this._capacity = capacity; - this._length = 0; - this._front = 0; -} - -Queue.prototype._willBeOverCapacity = function (size) { - return this._capacity < size; -}; - -Queue.prototype._pushOne = function (arg) { - var length = this.length(); - this._checkCapacity(length + 1); - var i = (this._front + length) & (this._capacity - 1); - this[i] = arg; - this._length = length + 1; -}; - -Queue.prototype.push = function (fn, receiver, arg) { - var length = this.length() + 3; - if (this._willBeOverCapacity(length)) { - this._pushOne(fn); - this._pushOne(receiver); - this._pushOne(arg); - return; - } - var j = this._front + length - 3; - this._checkCapacity(length); - var wrapMask = this._capacity - 1; - this[(j + 0) & wrapMask] = fn; - this[(j + 1) & wrapMask] = receiver; - this[(j + 2) & wrapMask] = arg; - this._length = length; -}; - -Queue.prototype.shift = function () { - var front = this._front, - ret = this[front]; - - this[front] = undefined; - this._front = (front + 1) & (this._capacity - 1); - this._length--; - return ret; -}; - -Queue.prototype.length = function () { - return this._length; -}; - -Queue.prototype._checkCapacity = function (size) { - if (this._capacity < size) { - this._resizeTo(this._capacity << 1); - } -}; - -Queue.prototype._resizeTo = function (capacity) { - var oldCapacity = this._capacity; - this._capacity = capacity; - var front = this._front; - var length = this._length; - var moveItemsCount = (front + length) & (oldCapacity - 1); - arrayMove(this, 0, this, oldCapacity, moveItemsCount); -}; - -module.exports = Queue; - -},{}],27:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function( - Promise, INTERNAL, tryConvertToPromise, apiRejection) { -var util = _dereq_("./util"); - -var raceLater = function (promise) { - return promise.then(function(array) { - return race(array, promise); - }); -}; - -function race(promises, parent) { - var maybePromise = tryConvertToPromise(promises); - - if (maybePromise instanceof Promise) { - return raceLater(maybePromise); - } else { - promises = util.asArray(promises); - if (promises === null) - return apiRejection("expecting an array or an iterable object but got " + util.classString(promises)); - } - - var ret = new Promise(INTERNAL); - if (parent !== undefined) { - ret._propagateFrom(parent, 3); - } - var fulfill = ret._fulfill; - var reject = ret._reject; - for (var i = 0, len = promises.length; i < len; ++i) { - var val = promises[i]; - - if (val === undefined && !(i in promises)) { - continue; - } - - Promise.cast(val)._then(fulfill, reject, undefined, ret, null); - } - return ret; -} - -Promise.race = function (promises) { - return race(promises, undefined); -}; - -Promise.prototype.race = function () { - return race(this, undefined); -}; - -}; - -},{"./util":36}],28:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL, - debug) { -var getDomain = Promise._getDomain; -var util = _dereq_("./util"); -var tryCatch = util.tryCatch; - -function ReductionPromiseArray(promises, fn, initialValue, _each) { - this.constructor$(promises); - var domain = getDomain(); - this._fn = domain === null ? fn : util.domainBind(domain, fn); - if (initialValue !== undefined) { - initialValue = Promise.resolve(initialValue); - initialValue._attachCancellationCallback(this); - } - this._initialValue = initialValue; - this._currentCancellable = null; - if(_each === INTERNAL) { - this._eachValues = Array(this._length); - } else if (_each === 0) { - this._eachValues = null; - } else { - this._eachValues = undefined; - } - this._promise._captureStackTrace(); - this._init$(undefined, -5); -} -util.inherits(ReductionPromiseArray, PromiseArray); - -ReductionPromiseArray.prototype._gotAccum = function(accum) { - if (this._eachValues !== undefined && - this._eachValues !== null && - accum !== INTERNAL) { - this._eachValues.push(accum); - } -}; - -ReductionPromiseArray.prototype._eachComplete = function(value) { - if (this._eachValues !== null) { - this._eachValues.push(value); - } - return this._eachValues; -}; - -ReductionPromiseArray.prototype._init = function() {}; - -ReductionPromiseArray.prototype._resolveEmptyArray = function() { - this._resolve(this._eachValues !== undefined ? this._eachValues - : this._initialValue); -}; - -ReductionPromiseArray.prototype.shouldCopyValues = function () { - return false; -}; - -ReductionPromiseArray.prototype._resolve = function(value) { - this._promise._resolveCallback(value); - this._values = null; -}; - -ReductionPromiseArray.prototype._resultCancelled = function(sender) { - if (sender === this._initialValue) return this._cancel(); - if (this._isResolved()) return; - this._resultCancelled$(); - if (this._currentCancellable instanceof Promise) { - this._currentCancellable.cancel(); - } - if (this._initialValue instanceof Promise) { - this._initialValue.cancel(); - } -}; - -ReductionPromiseArray.prototype._iterate = function (values) { - this._values = values; - var value; - var i; - var length = values.length; - if (this._initialValue !== undefined) { - value = this._initialValue; - i = 0; - } else { - value = Promise.resolve(values[0]); - i = 1; - } - - this._currentCancellable = value; - - if (!value.isRejected()) { - for (; i < length; ++i) { - var ctx = { - accum: null, - value: values[i], - index: i, - length: length, - array: this - }; - value = value._then(gotAccum, undefined, undefined, ctx, undefined); - } - } - - if (this._eachValues !== undefined) { - value = value - ._then(this._eachComplete, undefined, undefined, this, undefined); - } - value._then(completed, completed, undefined, value, this); -}; - -Promise.prototype.reduce = function (fn, initialValue) { - return reduce(this, fn, initialValue, null); -}; - -Promise.reduce = function (promises, fn, initialValue, _each) { - return reduce(promises, fn, initialValue, _each); -}; - -function completed(valueOrReason, array) { - if (this.isFulfilled()) { - array._resolve(valueOrReason); - } else { - array._reject(valueOrReason); - } -} - -function reduce(promises, fn, initialValue, _each) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - var array = new ReductionPromiseArray(promises, fn, initialValue, _each); - return array.promise(); -} - -function gotAccum(accum) { - this.accum = accum; - this.array._gotAccum(accum); - var value = tryConvertToPromise(this.value, this.array._promise); - if (value instanceof Promise) { - this.array._currentCancellable = value; - return value._then(gotValue, undefined, undefined, this, undefined); - } else { - return gotValue.call(this, value); - } -} - -function gotValue(value) { - var array = this.array; - var promise = array._promise; - var fn = tryCatch(array._fn); - promise._pushContext(); - var ret; - if (array._eachValues !== undefined) { - ret = fn.call(promise._boundValue(), value, this.index, this.length); - } else { - ret = fn.call(promise._boundValue(), - this.accum, value, this.index, this.length); - } - if (ret instanceof Promise) { - array._currentCancellable = ret; - } - var promiseCreated = promise._popContext(); - debug.checkForgottenReturns( - ret, - promiseCreated, - array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", - promise - ); - return ret; -} -}; - -},{"./util":36}],29:[function(_dereq_,module,exports){ -"use strict"; -var util = _dereq_("./util"); -var schedule; -var noAsyncScheduler = function() { - throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); -}; -var NativePromise = util.getNativePromise(); -if (util.isNode && typeof MutationObserver === "undefined") { - var GlobalSetImmediate = global.setImmediate; - var ProcessNextTick = process.nextTick; - schedule = util.isRecentNode - ? function(fn) { GlobalSetImmediate.call(global, fn); } - : function(fn) { ProcessNextTick.call(process, fn); }; -} else if (typeof NativePromise === "function" && - typeof NativePromise.resolve === "function") { - var nativePromise = NativePromise.resolve(); - schedule = function(fn) { - nativePromise.then(fn); - }; -} else if ((typeof MutationObserver !== "undefined") && - !(typeof window !== "undefined" && - window.navigator && - (window.navigator.standalone || window.cordova))) { - schedule = (function() { - var div = document.createElement("div"); - var opts = {attributes: true}; - var toggleScheduled = false; - var div2 = document.createElement("div"); - var o2 = new MutationObserver(function() { - div.classList.toggle("foo"); - toggleScheduled = false; - }); - o2.observe(div2, opts); - - var scheduleToggle = function() { - if (toggleScheduled) return; - toggleScheduled = true; - div2.classList.toggle("foo"); - }; - - return function schedule(fn) { - var o = new MutationObserver(function() { - o.disconnect(); - fn(); - }); - o.observe(div, opts); - scheduleToggle(); - }; - })(); -} else if (typeof setImmediate !== "undefined") { - schedule = function (fn) { - setImmediate(fn); - }; -} else if (typeof setTimeout !== "undefined") { - schedule = function (fn) { - setTimeout(fn, 0); - }; -} else { - schedule = noAsyncScheduler; -} -module.exports = schedule; - -},{"./util":36}],30:[function(_dereq_,module,exports){ -"use strict"; -module.exports = - function(Promise, PromiseArray, debug) { -var PromiseInspection = Promise.PromiseInspection; -var util = _dereq_("./util"); - -function SettledPromiseArray(values) { - this.constructor$(values); -} -util.inherits(SettledPromiseArray, PromiseArray); - -SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { - this._values[index] = inspection; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - this._resolve(this._values); - return true; - } - return false; -}; - -SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { - var ret = new PromiseInspection(); - ret._bitField = 33554432; - ret._settledValueField = value; - return this._promiseResolved(index, ret); -}; -SettledPromiseArray.prototype._promiseRejected = function (reason, index) { - var ret = new PromiseInspection(); - ret._bitField = 16777216; - ret._settledValueField = reason; - return this._promiseResolved(index, ret); -}; - -Promise.settle = function (promises) { - debug.deprecated(".settle()", ".reflect()"); - return new SettledPromiseArray(promises).promise(); -}; - -Promise.prototype.settle = function () { - return Promise.settle(this); -}; -}; - -},{"./util":36}],31:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, PromiseArray, apiRejection) { -var util = _dereq_("./util"); -var RangeError = _dereq_("./errors").RangeError; -var AggregateError = _dereq_("./errors").AggregateError; -var isArray = util.isArray; -var CANCELLATION = {}; - - -function SomePromiseArray(values) { - this.constructor$(values); - this._howMany = 0; - this._unwrap = false; - this._initialized = false; -} -util.inherits(SomePromiseArray, PromiseArray); - -SomePromiseArray.prototype._init = function () { - if (!this._initialized) { - return; - } - if (this._howMany === 0) { - this._resolve([]); - return; - } - this._init$(undefined, -5); - var isArrayResolved = isArray(this._values); - if (!this._isResolved() && - isArrayResolved && - this._howMany > this._canPossiblyFulfill()) { - this._reject(this._getRangeError(this.length())); - } -}; - -SomePromiseArray.prototype.init = function () { - this._initialized = true; - this._init(); -}; - -SomePromiseArray.prototype.setUnwrap = function () { - this._unwrap = true; -}; - -SomePromiseArray.prototype.howMany = function () { - return this._howMany; -}; - -SomePromiseArray.prototype.setHowMany = function (count) { - this._howMany = count; -}; - -SomePromiseArray.prototype._promiseFulfilled = function (value) { - this._addFulfilled(value); - if (this._fulfilled() === this.howMany()) { - this._values.length = this.howMany(); - if (this.howMany() === 1 && this._unwrap) { - this._resolve(this._values[0]); - } else { - this._resolve(this._values); - } - return true; - } - return false; - -}; -SomePromiseArray.prototype._promiseRejected = function (reason) { - this._addRejected(reason); - return this._checkOutcome(); -}; - -SomePromiseArray.prototype._promiseCancelled = function () { - if (this._values instanceof Promise || this._values == null) { - return this._cancel(); - } - this._addRejected(CANCELLATION); - return this._checkOutcome(); -}; - -SomePromiseArray.prototype._checkOutcome = function() { - if (this.howMany() > this._canPossiblyFulfill()) { - var e = new AggregateError(); - for (var i = this.length(); i < this._values.length; ++i) { - if (this._values[i] !== CANCELLATION) { - e.push(this._values[i]); - } - } - if (e.length > 0) { - this._reject(e); - } else { - this._cancel(); - } - return true; - } - return false; -}; - -SomePromiseArray.prototype._fulfilled = function () { - return this._totalResolved; -}; - -SomePromiseArray.prototype._rejected = function () { - return this._values.length - this.length(); -}; - -SomePromiseArray.prototype._addRejected = function (reason) { - this._values.push(reason); -}; - -SomePromiseArray.prototype._addFulfilled = function (value) { - this._values[this._totalResolved++] = value; -}; - -SomePromiseArray.prototype._canPossiblyFulfill = function () { - return this.length() - this._rejected(); -}; - -SomePromiseArray.prototype._getRangeError = function (count) { - var message = "Input array must contain at least " + - this._howMany + " items but contains only " + count + " items"; - return new RangeError(message); -}; - -SomePromiseArray.prototype._resolveEmptyArray = function () { - this._reject(this._getRangeError(0)); -}; - -function some(promises, howMany) { - if ((howMany | 0) !== howMany || howMany < 0) { - return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - var ret = new SomePromiseArray(promises); - var promise = ret.promise(); - ret.setHowMany(howMany); - ret.init(); - return promise; -} - -Promise.some = function (promises, howMany) { - return some(promises, howMany); -}; - -Promise.prototype.some = function (howMany) { - return some(this, howMany); -}; - -Promise._SomePromiseArray = SomePromiseArray; -}; - -},{"./errors":12,"./util":36}],32:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -function PromiseInspection(promise) { - if (promise !== undefined) { - promise = promise._target(); - this._bitField = promise._bitField; - this._settledValueField = promise._isFateSealed() - ? promise._settledValue() : undefined; - } - else { - this._bitField = 0; - this._settledValueField = undefined; - } -} - -PromiseInspection.prototype._settledValue = function() { - return this._settledValueField; -}; - -var value = PromiseInspection.prototype.value = function () { - if (!this.isFulfilled()) { - throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - return this._settledValue(); -}; - -var reason = PromiseInspection.prototype.error = -PromiseInspection.prototype.reason = function () { - if (!this.isRejected()) { - throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - return this._settledValue(); -}; - -var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { - return (this._bitField & 33554432) !== 0; -}; - -var isRejected = PromiseInspection.prototype.isRejected = function () { - return (this._bitField & 16777216) !== 0; -}; - -var isPending = PromiseInspection.prototype.isPending = function () { - return (this._bitField & 50397184) === 0; -}; - -var isResolved = PromiseInspection.prototype.isResolved = function () { - return (this._bitField & 50331648) !== 0; -}; - -PromiseInspection.prototype.isCancelled = function() { - return (this._bitField & 8454144) !== 0; -}; - -Promise.prototype.__isCancelled = function() { - return (this._bitField & 65536) === 65536; -}; - -Promise.prototype._isCancelled = function() { - return this._target().__isCancelled(); -}; - -Promise.prototype.isCancelled = function() { - return (this._target()._bitField & 8454144) !== 0; -}; - -Promise.prototype.isPending = function() { - return isPending.call(this._target()); -}; - -Promise.prototype.isRejected = function() { - return isRejected.call(this._target()); -}; - -Promise.prototype.isFulfilled = function() { - return isFulfilled.call(this._target()); -}; - -Promise.prototype.isResolved = function() { - return isResolved.call(this._target()); -}; - -Promise.prototype.value = function() { - return value.call(this._target()); -}; - -Promise.prototype.reason = function() { - var target = this._target(); - target._unsetRejectionIsUnhandled(); - return reason.call(target); -}; - -Promise.prototype._value = function() { - return this._settledValue(); -}; - -Promise.prototype._reason = function() { - this._unsetRejectionIsUnhandled(); - return this._settledValue(); -}; - -Promise.PromiseInspection = PromiseInspection; -}; - -},{}],33:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var util = _dereq_("./util"); -var errorObj = util.errorObj; -var isObject = util.isObject; - -function tryConvertToPromise(obj, context) { - if (isObject(obj)) { - if (obj instanceof Promise) return obj; - var then = getThen(obj); - if (then === errorObj) { - if (context) context._pushContext(); - var ret = Promise.reject(then.e); - if (context) context._popContext(); - return ret; - } else if (typeof then === "function") { - if (isAnyBluebirdPromise(obj)) { - var ret = new Promise(INTERNAL); - obj._then( - ret._fulfill, - ret._reject, - undefined, - ret, - null - ); - return ret; - } - return doThenable(obj, then, context); - } - } - return obj; -} - -function doGetThen(obj) { - return obj.then; -} - -function getThen(obj) { - try { - return doGetThen(obj); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} - -var hasProp = {}.hasOwnProperty; -function isAnyBluebirdPromise(obj) { - try { - return hasProp.call(obj, "_promise0"); - } catch (e) { - return false; - } -} - -function doThenable(x, then, context) { - var promise = new Promise(INTERNAL); - var ret = promise; - if (context) context._pushContext(); - promise._captureStackTrace(); - if (context) context._popContext(); - var synchronous = true; - var result = util.tryCatch(then).call(x, resolve, reject); - synchronous = false; - - if (promise && result === errorObj) { - promise._rejectCallback(result.e, true, true); - promise = null; - } - - function resolve(value) { - if (!promise) return; - promise._resolveCallback(value); - promise = null; - } - - function reject(reason) { - if (!promise) return; - promise._rejectCallback(reason, synchronous, true); - promise = null; - } - return ret; -} - -return tryConvertToPromise; -}; - -},{"./util":36}],34:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL, debug) { -var util = _dereq_("./util"); -var TimeoutError = Promise.TimeoutError; - -function HandleWrapper(handle) { - this.handle = handle; -} - -HandleWrapper.prototype._resultCancelled = function() { - clearTimeout(this.handle); -}; - -var afterValue = function(value) { return delay(+this).thenReturn(value); }; -var delay = Promise.delay = function (ms, value) { - var ret; - var handle; - if (value !== undefined) { - ret = Promise.resolve(value) - ._then(afterValue, null, null, ms, undefined); - if (debug.cancellation() && value instanceof Promise) { - ret._setOnCancel(value); - } - } else { - ret = new Promise(INTERNAL); - handle = setTimeout(function() { ret._fulfill(); }, +ms); - if (debug.cancellation()) { - ret._setOnCancel(new HandleWrapper(handle)); - } - ret._captureStackTrace(); - } - ret._setAsyncGuaranteed(); - return ret; -}; - -Promise.prototype.delay = function (ms) { - return delay(ms, this); -}; - -var afterTimeout = function (promise, message, parent) { - var err; - if (typeof message !== "string") { - if (message instanceof Error) { - err = message; - } else { - err = new TimeoutError("operation timed out"); - } - } else { - err = new TimeoutError(message); - } - util.markAsOriginatingFromRejection(err); - promise._attachExtraTrace(err); - promise._reject(err); - - if (parent != null) { - parent.cancel(); - } -}; - -function successClear(value) { - clearTimeout(this.handle); - return value; -} - -function failureClear(reason) { - clearTimeout(this.handle); - throw reason; -} - -Promise.prototype.timeout = function (ms, message) { - ms = +ms; - var ret, parent; - - var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { - if (ret.isPending()) { - afterTimeout(ret, message, parent); - } - }, ms)); - - if (debug.cancellation()) { - parent = this.then(); - ret = parent._then(successClear, failureClear, - undefined, handleWrapper, undefined); - ret._setOnCancel(handleWrapper); - } else { - ret = this._then(successClear, failureClear, - undefined, handleWrapper, undefined); - } - - return ret; -}; - -}; - -},{"./util":36}],35:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function (Promise, apiRejection, tryConvertToPromise, - createContext, INTERNAL, debug) { - var util = _dereq_("./util"); - var TypeError = _dereq_("./errors").TypeError; - var inherits = _dereq_("./util").inherits; - var errorObj = util.errorObj; - var tryCatch = util.tryCatch; - var NULL = {}; - - function thrower(e) { - setTimeout(function(){throw e;}, 0); - } - - function castPreservingDisposable(thenable) { - var maybePromise = tryConvertToPromise(thenable); - if (maybePromise !== thenable && - typeof thenable._isDisposable === "function" && - typeof thenable._getDisposer === "function" && - thenable._isDisposable()) { - maybePromise._setDisposable(thenable._getDisposer()); - } - return maybePromise; - } - function dispose(resources, inspection) { - var i = 0; - var len = resources.length; - var ret = new Promise(INTERNAL); - function iterator() { - if (i >= len) return ret._fulfill(); - var maybePromise = castPreservingDisposable(resources[i++]); - if (maybePromise instanceof Promise && - maybePromise._isDisposable()) { - try { - maybePromise = tryConvertToPromise( - maybePromise._getDisposer().tryDispose(inspection), - resources.promise); - } catch (e) { - return thrower(e); - } - if (maybePromise instanceof Promise) { - return maybePromise._then(iterator, thrower, - null, null, null); - } - } - iterator(); - } - iterator(); - return ret; - } - - function Disposer(data, promise, context) { - this._data = data; - this._promise = promise; - this._context = context; - } - - Disposer.prototype.data = function () { - return this._data; - }; - - Disposer.prototype.promise = function () { - return this._promise; - }; - - Disposer.prototype.resource = function () { - if (this.promise().isFulfilled()) { - return this.promise().value(); - } - return NULL; - }; - - Disposer.prototype.tryDispose = function(inspection) { - var resource = this.resource(); - var context = this._context; - if (context !== undefined) context._pushContext(); - var ret = resource !== NULL - ? this.doDispose(resource, inspection) : null; - if (context !== undefined) context._popContext(); - this._promise._unsetDisposable(); - this._data = null; - return ret; - }; - - Disposer.isDisposer = function (d) { - return (d != null && - typeof d.resource === "function" && - typeof d.tryDispose === "function"); - }; - - function FunctionDisposer(fn, promise, context) { - this.constructor$(fn, promise, context); - } - inherits(FunctionDisposer, Disposer); - - FunctionDisposer.prototype.doDispose = function (resource, inspection) { - var fn = this.data(); - return fn.call(resource, resource, inspection); - }; - - function maybeUnwrapDisposer(value) { - if (Disposer.isDisposer(value)) { - this.resources[this.index]._setDisposable(value); - return value.promise(); - } - return value; - } - - function ResourceList(length) { - this.length = length; - this.promise = null; - this[length-1] = null; - } - - ResourceList.prototype._resultCancelled = function() { - var len = this.length; - for (var i = 0; i < len; ++i) { - var item = this[i]; - if (item instanceof Promise) { - item.cancel(); - } - } - }; - - Promise.using = function () { - var len = arguments.length; - if (len < 2) return apiRejection( - "you must pass at least 2 arguments to Promise.using"); - var fn = arguments[len - 1]; - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - var input; - var spreadArgs = true; - if (len === 2 && Array.isArray(arguments[0])) { - input = arguments[0]; - len = input.length; - spreadArgs = false; - } else { - input = arguments; - len--; - } - var resources = new ResourceList(len); - for (var i = 0; i < len; ++i) { - var resource = input[i]; - if (Disposer.isDisposer(resource)) { - var disposer = resource; - resource = resource.promise(); - resource._setDisposable(disposer); - } else { - var maybePromise = tryConvertToPromise(resource); - if (maybePromise instanceof Promise) { - resource = - maybePromise._then(maybeUnwrapDisposer, null, null, { - resources: resources, - index: i - }, undefined); - } - } - resources[i] = resource; - } - - var reflectedResources = new Array(resources.length); - for (var i = 0; i < reflectedResources.length; ++i) { - reflectedResources[i] = Promise.resolve(resources[i]).reflect(); - } - - var resultPromise = Promise.all(reflectedResources) - .then(function(inspections) { - for (var i = 0; i < inspections.length; ++i) { - var inspection = inspections[i]; - if (inspection.isRejected()) { - errorObj.e = inspection.error(); - return errorObj; - } else if (!inspection.isFulfilled()) { - resultPromise.cancel(); - return; - } - inspections[i] = inspection.value(); - } - promise._pushContext(); - - fn = tryCatch(fn); - var ret = spreadArgs - ? fn.apply(undefined, inspections) : fn(inspections); - var promiseCreated = promise._popContext(); - debug.checkForgottenReturns( - ret, promiseCreated, "Promise.using", promise); - return ret; - }); - - var promise = resultPromise.lastly(function() { - var inspection = new Promise.PromiseInspection(resultPromise); - return dispose(resources, inspection); - }); - resources.promise = promise; - promise._setOnCancel(resources); - return promise; - }; - - Promise.prototype._setDisposable = function (disposer) { - this._bitField = this._bitField | 131072; - this._disposer = disposer; - }; - - Promise.prototype._isDisposable = function () { - return (this._bitField & 131072) > 0; - }; - - Promise.prototype._getDisposer = function () { - return this._disposer; - }; - - Promise.prototype._unsetDisposable = function () { - this._bitField = this._bitField & (~131072); - this._disposer = undefined; - }; - - Promise.prototype.disposer = function (fn) { - if (typeof fn === "function") { - return new FunctionDisposer(fn, this, createContext()); - } - throw new TypeError(); - }; - -}; - -},{"./errors":12,"./util":36}],36:[function(_dereq_,module,exports){ -"use strict"; -var es5 = _dereq_("./es5"); -var canEvaluate = typeof navigator == "undefined"; - -var errorObj = {e: {}}; -var tryCatchTarget; -var globalObject = typeof self !== "undefined" ? self : - typeof window !== "undefined" ? window : - typeof global !== "undefined" ? global : - this !== undefined ? this : null; - -function tryCatcher() { - try { - var target = tryCatchTarget; - tryCatchTarget = null; - return target.apply(this, arguments); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} -function tryCatch(fn) { - tryCatchTarget = fn; - return tryCatcher; -} - -var inherits = function(Child, Parent) { - var hasProp = {}.hasOwnProperty; - - function T() { - this.constructor = Child; - this.constructor$ = Parent; - for (var propertyName in Parent.prototype) { - if (hasProp.call(Parent.prototype, propertyName) && - propertyName.charAt(propertyName.length-1) !== "$" - ) { - this[propertyName + "$"] = Parent.prototype[propertyName]; - } - } - } - T.prototype = Parent.prototype; - Child.prototype = new T(); - return Child.prototype; -}; - - -function isPrimitive(val) { - return val == null || val === true || val === false || - typeof val === "string" || typeof val === "number"; - -} - -function isObject(value) { - return typeof value === "function" || - typeof value === "object" && value !== null; -} - -function maybeWrapAsError(maybeError) { - if (!isPrimitive(maybeError)) return maybeError; - - return new Error(safeToString(maybeError)); -} - -function withAppended(target, appendee) { - var len = target.length; - var ret = new Array(len + 1); - var i; - for (i = 0; i < len; ++i) { - ret[i] = target[i]; - } - ret[i] = appendee; - return ret; -} - -function getDataPropertyOrDefault(obj, key, defaultValue) { - if (es5.isES5) { - var desc = Object.getOwnPropertyDescriptor(obj, key); - - if (desc != null) { - return desc.get == null && desc.set == null - ? desc.value - : defaultValue; - } - } else { - return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; - } -} - -function notEnumerableProp(obj, name, value) { - if (isPrimitive(obj)) return obj; - var descriptor = { - value: value, - configurable: true, - enumerable: false, - writable: true - }; - es5.defineProperty(obj, name, descriptor); - return obj; -} - -function thrower(r) { - throw r; -} - -var inheritedDataKeys = (function() { - var excludedPrototypes = [ - Array.prototype, - Object.prototype, - Function.prototype - ]; - - var isExcludedProto = function(val) { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (excludedPrototypes[i] === val) { - return true; - } - } - return false; - }; - - if (es5.isES5) { - var getKeys = Object.getOwnPropertyNames; - return function(obj) { - var ret = []; - var visitedKeys = Object.create(null); - while (obj != null && !isExcludedProto(obj)) { - var keys; - try { - keys = getKeys(obj); - } catch (e) { - return ret; - } - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (visitedKeys[key]) continue; - visitedKeys[key] = true; - var desc = Object.getOwnPropertyDescriptor(obj, key); - if (desc != null && desc.get == null && desc.set == null) { - ret.push(key); - } - } - obj = es5.getPrototypeOf(obj); - } - return ret; - }; - } else { - var hasProp = {}.hasOwnProperty; - return function(obj) { - if (isExcludedProto(obj)) return []; - var ret = []; - - /*jshint forin:false */ - enumeration: for (var key in obj) { - if (hasProp.call(obj, key)) { - ret.push(key); - } else { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (hasProp.call(excludedPrototypes[i], key)) { - continue enumeration; - } - } - ret.push(key); - } - } - return ret; - }; - } - -})(); - -var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; -function isClass(fn) { - try { - if (typeof fn === "function") { - var keys = es5.names(fn.prototype); - - var hasMethods = es5.isES5 && keys.length > 1; - var hasMethodsOtherThanConstructor = keys.length > 0 && - !(keys.length === 1 && keys[0] === "constructor"); - var hasThisAssignmentAndStaticMethods = - thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; - - if (hasMethods || hasMethodsOtherThanConstructor || - hasThisAssignmentAndStaticMethods) { - return true; - } - } - return false; - } catch (e) { - return false; - } -} - -function toFastProperties(obj) { - /*jshint -W027,-W055,-W031*/ - function FakeConstructor() {} - FakeConstructor.prototype = obj; - var receiver = new FakeConstructor(); - function ic() { - return typeof receiver.foo; - } - ic(); - ic(); - return obj; - eval(obj); -} - -var rident = /^[a-z$_][a-z$_0-9]*$/i; -function isIdentifier(str) { - return rident.test(str); -} - -function filledRange(count, prefix, suffix) { - var ret = new Array(count); - for(var i = 0; i < count; ++i) { - ret[i] = prefix + i + suffix; - } - return ret; -} - -function safeToString(obj) { - try { - return obj + ""; - } catch (e) { - return "[no string representation]"; - } -} - -function isError(obj) { - return obj instanceof Error || - (obj !== null && - typeof obj === "object" && - typeof obj.message === "string" && - typeof obj.name === "string"); -} - -function markAsOriginatingFromRejection(e) { - try { - notEnumerableProp(e, "isOperational", true); - } - catch(ignore) {} -} - -function originatesFromRejection(e) { - if (e == null) return false; - return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || - e["isOperational"] === true); -} - -function canAttachTrace(obj) { - return isError(obj) && es5.propertyIsWritable(obj, "stack"); -} - -var ensureErrorObject = (function() { - if (!("stack" in new Error())) { - return function(value) { - if (canAttachTrace(value)) return value; - try {throw new Error(safeToString(value));} - catch(err) {return err;} - }; - } else { - return function(value) { - if (canAttachTrace(value)) return value; - return new Error(safeToString(value)); - }; - } -})(); - -function classString(obj) { - return {}.toString.call(obj); -} - -function copyDescriptors(from, to, filter) { - var keys = es5.names(from); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (filter(key)) { - try { - es5.defineProperty(to, key, es5.getDescriptor(from, key)); - } catch (ignore) {} - } - } -} - -var asArray = function(v) { - if (es5.isArray(v)) { - return v; - } - return null; -}; - -if (typeof Symbol !== "undefined" && Symbol.iterator) { - var ArrayFrom = typeof Array.from === "function" ? function(v) { - return Array.from(v); - } : function(v) { - var ret = []; - var it = v[Symbol.iterator](); - var itResult; - while (!((itResult = it.next()).done)) { - ret.push(itResult.value); - } - return ret; - }; - - asArray = function(v) { - if (es5.isArray(v)) { - return v; - } else if (v != null && typeof v[Symbol.iterator] === "function") { - return ArrayFrom(v); - } - return null; - }; -} - -var isNode = typeof process !== "undefined" && - classString(process).toLowerCase() === "[object process]"; - -var hasEnvVariables = typeof process !== "undefined" && - typeof process.env !== "undefined"; - -function env(key) { - return hasEnvVariables ? process.env[key] : undefined; -} - -function getNativePromise() { - if (typeof Promise === "function") { - try { - var promise = new Promise(function(){}); - if ({}.toString.call(promise) === "[object Promise]") { - return Promise; - } - } catch (e) {} - } -} - -function domainBind(self, cb) { - return self.bind(cb); -} - -var ret = { - isClass: isClass, - isIdentifier: isIdentifier, - inheritedDataKeys: inheritedDataKeys, - getDataPropertyOrDefault: getDataPropertyOrDefault, - thrower: thrower, - isArray: es5.isArray, - asArray: asArray, - notEnumerableProp: notEnumerableProp, - isPrimitive: isPrimitive, - isObject: isObject, - isError: isError, - canEvaluate: canEvaluate, - errorObj: errorObj, - tryCatch: tryCatch, - inherits: inherits, - withAppended: withAppended, - maybeWrapAsError: maybeWrapAsError, - toFastProperties: toFastProperties, - filledRange: filledRange, - toString: safeToString, - canAttachTrace: canAttachTrace, - ensureErrorObject: ensureErrorObject, - originatesFromRejection: originatesFromRejection, - markAsOriginatingFromRejection: markAsOriginatingFromRejection, - classString: classString, - copyDescriptors: copyDescriptors, - hasDevTools: typeof chrome !== "undefined" && chrome && - typeof chrome.loadTimes === "function", - isNode: isNode, - hasEnvVariables: hasEnvVariables, - env: env, - global: globalObject, - getNativePromise: getNativePromise, - domainBind: domainBind -}; -ret.isRecentNode = ret.isNode && (function() { - var version = process.versions.node.split(".").map(Number); - return (version[0] === 0 && version[1] > 10) || (version[0] > 0); -})(); - -if (ret.isNode) ret.toFastProperties(process); - -try {throw new Error(); } catch (e) {ret.lastLineError = e;} -module.exports = ret; - -},{"./es5":13}]},{},[4])(4) -}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.min.js b/truebit-implementation/node_modules/bluebird/js/browser/bluebird.min.js deleted file mode 100644 index 23bc16d5..00000000 --- a/truebit-implementation/node_modules/bluebird/js/browser/bluebird.min.js +++ /dev/null @@ -1,31 +0,0 @@ -/* @preserve - * The MIT License (MIT) - * - * Copyright (c) 2013-2018 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * 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. - * - */ -/** - * bluebird build version 3.5.3 - * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each -*/ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Promise=t()}}(function(){var t,e,n;return function r(t,e,n){function i(s,a){if(!e[s]){if(!t[s]){var c="function"==typeof _dereq_&&_dereq_;if(!a&&c)return c(s,!0);if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var u=e[s]={exports:{}};t[s][0].call(u.exports,function(e){var n=t[s][1][e];return i(n?n:e)},u,u.exports,r,t,e,n)}return e[s].exports}for(var o="function"==typeof _dereq_&&_dereq_,s=0;s0;)c(t)}function c(t){var e=t.shift();if("function"!=typeof e)e._settlePromises();else{var n=t.shift(),r=t.shift();e.call(n,r)}}var l;try{throw new Error}catch(u){l=u}var p=t("./schedule"),h=t("./queue"),f=t("./util");r.prototype.setScheduler=function(t){var e=this._schedule;return this._schedule=t,this._customScheduler=!0,e},r.prototype.hasCustomScheduler=function(){return this._customScheduler},r.prototype.enableTrampoline=function(){this._trampolineEnabled=!0},r.prototype.disableTrampolineIfNecessary=function(){f.hasDevTools&&(this._trampolineEnabled=!1)},r.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},r.prototype.fatalError=function(t,e){e?(process.stderr.write("Fatal "+(t instanceof Error?t.stack:t)+"\n"),process.exit(2)):this.throwLater(t)},r.prototype.throwLater=function(t,e){if(1===arguments.length&&(e=t,t=function(){throw e}),"undefined"!=typeof setTimeout)setTimeout(function(){t(e)},0);else try{this._schedule(function(){t(e)})}catch(n){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")}},f.hasDevTools?(r.prototype.invokeLater=function(t,e,n){this._trampolineEnabled?i.call(this,t,e,n):this._schedule(function(){setTimeout(function(){t.call(e,n)},100)})},r.prototype.invoke=function(t,e,n){this._trampolineEnabled?o.call(this,t,e,n):this._schedule(function(){t.call(e,n)})},r.prototype.settlePromises=function(t){this._trampolineEnabled?s.call(this,t):this._schedule(function(){t._settlePromises()})}):(r.prototype.invokeLater=i,r.prototype.invoke=o,r.prototype.settlePromises=s),r.prototype._drainQueues=function(){a(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,a(this._lateQueue)},r.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},r.prototype._reset=function(){this._isTickUsed=!1},e.exports=r,e.exports.firstLineError=l},{"./queue":26,"./schedule":29,"./util":36}],3:[function(t,e,n){"use strict";e.exports=function(t,e,n,r){var i=!1,o=function(t,e){this._reject(e)},s=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(o,o,null,this,t)},a=function(t,e){0===(50397184&this._bitField)&&this._resolveCallback(e.target)},c=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(o){i||(i=!0,t.prototype._propagateFrom=r.propagateFromFunction(),t.prototype._boundValue=r.boundValueFunction());var l=n(o),u=new t(e);u._propagateFrom(this,1);var p=this._target();if(u._setBoundTo(l),l instanceof t){var h={promiseRejectionQueued:!1,promise:u,target:p,bindingPromise:l};p._then(e,s,void 0,u,h),l._then(a,c,void 0,u,h),u._setOnCancel(l)}else u._resolveCallback(p);return u},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=2097152|this._bitField,this._boundTo=t):this._bitField=-2097153&this._bitField},t.prototype._isBound=function(){return 2097152===(2097152&this._bitField)},t.bind=function(e,n){return t.resolve(n).bind(e)}}},{}],4:[function(t,e,n){"use strict";function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise")();o.noConflict=r,e.exports=o},{"./promise":22}],5:[function(t,e,n){"use strict";var r=Object.create;if(r){var i=r(null),o=r(null);i[" size"]=o[" size"]=0}e.exports=function(e){function n(t,n){var r;if(null!=t&&(r=t[n]),"function"!=typeof r){var i="Object "+a.classString(t)+" has no method '"+a.toString(n)+"'";throw new e.TypeError(i)}return r}function r(t){var e=this.pop(),r=n(t,e);return r.apply(t,this)}function i(t){return t[this]}function o(t){var e=+this;return 0>e&&(e=Math.max(0,e+t.length)),t[e]}var s,a=t("./util"),c=a.canEvaluate;a.isIdentifier;e.prototype.call=function(t){var e=[].slice.call(arguments,1);return e.push(t),this._then(r,void 0,void 0,e,void 0)},e.prototype.get=function(t){var e,n="number"==typeof t;if(n)e=o;else if(c){var r=s(t);e=null!==r?r:i}else e=i;return this._then(e,void 0,void 0,t,void 0)}}},{"./util":36}],6:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util"),s=o.tryCatch,a=o.errorObj,c=e._async;e.prototype["break"]=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var t=this,e=t;t._isCancellable();){if(!t._cancelBy(e)){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}var n=t._cancellationParent;if(null==n||!n._isCancellable()){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}t._isFollowing()&&t._followee().cancel(),t._setWillBeCancelled(),e=t,t=n}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(t){return t===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),this._enoughBranchesHaveCancelled()?(this._invokeOnCancel(),!0):!1)},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this._isCancellable()&&(this._setCancelled(),c.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(t,e){if(o.isArray(t))for(var n=0;n=0?o[t]:void 0}var i=!1,o=[];return t.prototype._promiseCreated=function(){},t.prototype._pushContext=function(){},t.prototype._popContext=function(){return null},t._peekContext=t.prototype._peekContext=function(){},e.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,o.push(this._trace))},e.prototype._popContext=function(){if(void 0!==this._trace){var t=o.pop(),e=t._promiseCreated;return t._promiseCreated=null,e}return null},e.CapturedTrace=null,e.create=n,e.deactivateLongStackTraces=function(){},e.activateLongStackTraces=function(){var n=t.prototype._pushContext,o=t.prototype._popContext,s=t._peekContext,a=t.prototype._peekContext,c=t.prototype._promiseCreated;e.deactivateLongStackTraces=function(){t.prototype._pushContext=n,t.prototype._popContext=o,t._peekContext=s,t.prototype._peekContext=a,t.prototype._promiseCreated=c,i=!1},i=!0,t.prototype._pushContext=e.prototype._pushContext,t.prototype._popContext=e.prototype._popContext,t._peekContext=t.prototype._peekContext=r,t.prototype._promiseCreated=function(){var t=this._peekContext();t&&null==t._promiseCreated&&(t._promiseCreated=this)}},e}},{}],9:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,e){return{promise:e}}function i(){return!1}function o(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof t)throw new TypeError("onCancel must be a function, got: "+N.toString(t));r._attachCancellationCallback(t)})}catch(i){return i}}function s(t){if(!this._isCancellable())return this;var e=this._onCancel();void 0!==e?N.isArray(e)?e.push(t):this._setOnCancel([e,t]):this._setOnCancel(t)}function a(){return this._onCancelField}function c(t){this._onCancelField=t}function l(){this._cancellationParent=void 0,this._onCancelField=void 0}function u(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branchesRemainingToCancel;void 0===n&&(n=0),t._branchesRemainingToCancel=n+1}0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function p(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function h(){var t=this._boundTo;return void 0!==t&&t instanceof e?t.isFulfilled()?t.value():void 0:t}function f(){this._trace=new O(this._peekContext())}function _(t,e){if(U(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var r=E(t);N.notEnumerableProp(t,"stack",r.message+"\n"+r.stack.join("\n")),N.notEnumerableProp(t,"__stackCleaned__",!0)}}}function d(){this._trace=void 0}function v(t,e,n,r,i){if(void 0===t&&null!==e&&J){if(void 0!==i&&i._returnedNonUndefined())return;if(0===(65535&r._bitField))return;n&&(n+=" ");var o="",s="";if(e._trace){for(var a=e._trace.stack.split("\n"),c=C(a),l=c.length-1;l>=0;--l){var u=c[l];if(!q.test(u)){var p=u.match($);p&&(o="at "+p[1]+":"+p[2]+":"+p[3]+" ");break}}if(c.length>0)for(var h=c[0],l=0;l0&&(s="\n"+a[l-1]);break}}var f="a promise was created in a "+n+"handler "+o+"but was not returned from it, see http://goo.gl/rRqMUw"+s;r._warn(f,!0,e)}}function y(t,e){var n=t+" is deprecated and will be removed in a future version.";return e&&(n+=" Use "+e+" instead."),m(n)}function m(t,n,r){if(at.warnings){var i,o=new H(t);if(n)r._attachExtraTrace(o);else if(at.longStackTraces&&(i=e._peekContext()))i.attachExtraTrace(o);else{var s=E(o);o.stack=s.message+"\n"+s.stack.join("\n")}nt("warning",o)||k(o,"",!0)}}function g(t,e){for(var n=0;n=0;--a)if(r[a]===o){s=a;break}for(var a=s;a>=0;--a){var c=r[a];if(e[i]!==c)break;e.pop(),i--}e=r}}function C(t){for(var e=[],n=0;n0&&"SyntaxError"!=t.name&&(e=e.slice(n)),e}function E(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&e.length>0?j(t):[" (No stack trace)"],{message:n,stack:"SyntaxError"==t.name?e:C(e)}}function k(t,e,n){if("undefined"!=typeof console){var r;if(N.isObject(t)){var i=t.stack;r=e+G(i,t)}else r=e+String(t);"function"==typeof V?V(r,n):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}}function F(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionHandled"===t?e(r):e(n,r))}catch(o){L.throwLater(o)}"unhandledRejection"===t?nt(t,n,r)||i||k(n,"Unhandled rejection "):nt(t,r)}function T(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t&&"function"==typeof t.toString?t.toString():N.toString(t);var n=/\[object [a-zA-Z0-9$_]+\]/;if(n.test(e))try{var r=JSON.stringify(t);e=r}catch(i){}0===e.length&&(e="(empty array)")}return"(<"+x(e)+">, no stack trace)"}function x(t){var e=41;return t.lengths||0>a||!n||!r||n!==r||s>=a||(it=function(t){if(M.test(t))return!0;var e=R(t);return e&&e.fileName===n&&s<=e.line&&e.line<=a?!0:!1})}}function O(t){this._parent=t,this._promisesCreated=0;var e=this._length=1+(void 0===t?0:t._length);st(this,O),e>32&&this.uncycle()}var A,D,V,I=e._getDomain,L=e._async,H=t("./errors").Warning,N=t("./util"),B=t("./es5"),U=N.canAttachTrace,M=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,q=/\((?:timers\.js):\d+:\d+\)/,$=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,Q=null,G=null,z=!1,X=!(0==N.env("BLUEBIRD_DEBUG")||!N.env("BLUEBIRD_DEBUG")&&"development"!==N.env("NODE_ENV")),W=!(0==N.env("BLUEBIRD_WARNINGS")||!X&&!N.env("BLUEBIRD_WARNINGS")),K=!(0==N.env("BLUEBIRD_LONG_STACK_TRACES")||!X&&!N.env("BLUEBIRD_LONG_STACK_TRACES")),J=0!=N.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(W||!!N.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var t=this._target();t._bitField=-1048577&t._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){if(0===(524288&this._bitField)){this._setRejectionIsUnhandled();var t=this;setTimeout(function(){t._notifyUnhandledRejection()},1)}},e.prototype._notifyUnhandledRejectionIsHandled=function(){F("rejectionHandled",A,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!==(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._settledValue();this._setUnhandledRejectionIsNotified(),F("unhandledRejection",D,t,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(t,e,n){return m(t,e,n||this)},e.onPossiblyUnhandledRejection=function(t){var e=I();D="function"==typeof t?null===e?t:N.domainBind(e,t):void 0},e.onUnhandledRejectionHandled=function(t){var e=I();A="function"==typeof t?null===e?t:N.domainBind(e,t):void 0};var Y=function(){};e.longStackTraces=function(){if(L.haveItemsQueued()&&!at.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!at.longStackTraces&&P()){var t=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace,i=e.prototype._dereferenceTrace;at.longStackTraces=!0,Y=function(){if(L.haveItemsQueued()&&!at.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=t,e.prototype._attachExtraTrace=r,e.prototype._dereferenceTrace=i,n.deactivateLongStackTraces(),L.enableTrampoline(),at.longStackTraces=!1},e.prototype._captureStackTrace=f,e.prototype._attachExtraTrace=_,e.prototype._dereferenceTrace=d,n.activateLongStackTraces(),L.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return at.longStackTraces&&P()};var Z=function(){try{if("function"==typeof CustomEvent){var t=new CustomEvent("CustomEvent");return N.global.dispatchEvent(t),function(t,e){var n={detail:e,cancelable:!0};B.defineProperty(n,"promise",{value:e.promise}),B.defineProperty(n,"reason",{value:e.reason});var r=new CustomEvent(t.toLowerCase(),n);return!N.global.dispatchEvent(r)}}if("function"==typeof Event){var t=new Event("CustomEvent");return N.global.dispatchEvent(t),function(t,e){var n=new Event(t.toLowerCase(),{cancelable:!0});return n.detail=e,B.defineProperty(n,"promise",{value:e.promise}),B.defineProperty(n,"reason",{value:e.reason}),!N.global.dispatchEvent(n)}}var t=document.createEvent("CustomEvent");return t.initCustomEvent("testingtheevent",!1,!0,{}),N.global.dispatchEvent(t),function(t,e){var n=document.createEvent("CustomEvent");return n.initCustomEvent(t.toLowerCase(),!1,!0,e),!N.global.dispatchEvent(n)}}catch(e){}return function(){return!1}}(),tt=function(){return N.isNode?function(){return process.emit.apply(process,arguments)}:N.global?function(t){var e="on"+t.toLowerCase(),n=N.global[e];return n?(n.apply(N.global,[].slice.call(arguments,1)),!0):!1}:function(){return!1}}(),et={promiseCreated:r,promiseFulfilled:r,promiseRejected:r,promiseResolved:r,promiseCancelled:r,promiseChained:function(t,e,n){return{promise:e,child:n}},warning:function(t,e){return{warning:e}},unhandledRejection:function(t,e,n){return{reason:e,promise:n}},rejectionHandled:r},nt=function(t){var e=!1;try{e=tt.apply(null,arguments)}catch(n){L.throwLater(n),e=!0}var r=!1;try{r=Z(t,et[t].apply(null,arguments))}catch(n){L.throwLater(n),r=!0}return r||e};e.config=function(t){if(t=Object(t),"longStackTraces"in t&&(t.longStackTraces?e.longStackTraces():!t.longStackTraces&&e.hasLongStackTraces()&&Y()),"warnings"in t){var n=t.warnings;at.warnings=!!n,J=at.warnings,N.isObject(n)&&"wForgottenReturn"in n&&(J=!!n.wForgottenReturn)}if("cancellation"in t&&t.cancellation&&!at.cancellation){if(L.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=l,e.prototype._propagateFrom=u,e.prototype._onCancel=a,e.prototype._setOnCancel=c,e.prototype._attachCancellationCallback=s,e.prototype._execute=o,rt=u,at.cancellation=!0}return"monitoring"in t&&(t.monitoring&&!at.monitoring?(at.monitoring=!0,e.prototype._fireEvent=nt):!t.monitoring&&at.monitoring&&(at.monitoring=!1,e.prototype._fireEvent=i)),e},e.prototype._fireEvent=i,e.prototype._execute=function(t,e,n){try{t(e,n)}catch(r){return r}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(t){},e.prototype._attachCancellationCallback=function(t){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._dereferenceTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(t,e){};var rt=p,it=function(){return!1},ot=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;N.inherits(O,Error),n.CapturedTrace=O,O.prototype.uncycle=function(){var t=this._length;if(!(2>t)){for(var e=[],n={},r=0,i=this;void 0!==i;++r)e.push(i),i=i._parent;t=this._length=r;for(var r=t-1;r>=0;--r){var o=e[r].stack;void 0===n[o]&&(n[o]=r)}for(var r=0;t>r;++r){var s=e[r].stack,a=n[s];if(void 0!==a&&a!==r){a>0&&(e[a-1]._parent=void 0,e[a-1]._length=1),e[r]._parent=void 0,e[r]._length=1;var c=r>0?e[r-1]:this;t-1>a?(c._parent=e[a+1],c._parent.uncycle(),c._length=c._parent._length+1):(c._parent=void 0,c._length=1);for(var l=c._length+1,u=r-2;u>=0;--u)e[u]._length=l,l++;return}}}},O.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var e=E(t),n=e.message,r=[e.stack],i=this;void 0!==i;)r.push(C(i.stack.split("\n"))),i=i._parent;w(r),b(r),N.notEnumerableProp(t,"stack",g(n,r)),N.notEnumerableProp(t,"__stackCleaned__",!0)}};var st=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():T(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,Q=t,G=e;var n=Error.captureStackTrace;return it=function(t){return M.test(t)},function(t,e){Error.stackTraceLimit+=6,n(t,e),Error.stackTraceLimit-=6}}var r=new Error;if("string"==typeof r.stack&&r.stack.split("\n")[0].indexOf("stackDetection@")>=0)return Q=/@/,G=e,z=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(o){i="stack"in o}return"stack"in r||!i||"number"!=typeof Error.stackTraceLimit?(G=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?T(e):e.toString()},null):(Q=t,G=e,function(t){Error.stackTraceLimit+=6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit-=6})}([]);"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(V=function(t){console.warn(t)},N.isNode&&process.stderr.isTTY?V=function(t,e){var n=e?"":"";console.warn(n+t+"\n")}:N.isNode||"string"!=typeof(new Error).stack||(V=function(t,e){console.warn("%c"+t,e?"color: darkorange":"color: red")}));var at={warnings:W,longStackTraces:!1,cancellation:!1,monitoring:!1};return K&&e.longStackTraces(),{longStackTraces:function(){return at.longStackTraces},warnings:function(){return at.warnings},cancellation:function(){return at.cancellation},monitoring:function(){return at.monitoring},propagateFromFunction:function(){return rt},boundValueFunction:function(){return h},checkForgottenReturns:v,setBounds:S,warn:m,deprecated:y,CapturedTrace:O,fireDomEvent:Z,fireGlobalEvent:tt}}},{"./errors":12,"./es5":13,"./util":36}],10:[function(t,e,n){"use strict";e.exports=function(t){function e(){return this.value}function n(){throw this.reason}t.prototype["return"]=t.prototype.thenReturn=function(n){return n instanceof t&&n.suppressUnhandledRejections(),this._then(e,void 0,void 0,{value:n},void 0)},t.prototype["throw"]=t.prototype.thenThrow=function(t){return this._then(n,void 0,void 0,{reason:t},void 0)},t.prototype.catchThrow=function(t){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:t},void 0);var e=arguments[1],r=function(){throw e};return this.caught(t,r)},t.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof t&&n.suppressUnhandledRejections(),this._then(void 0,e,void 0,{value:n},void 0);var r=arguments[1];r instanceof t&&r.suppressUnhandledRejections();var i=function(){return r};return this.caught(n,i)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t,e){function n(){return o(this)}function r(t,n){return i(t,n,e,e)}var i=t.reduce,o=t.all;t.prototype.each=function(t){return i(this,t,e,0)._then(n,void 0,void 0,this,void 0)},t.prototype.mapSeries=function(t){return i(this,t,e,e)},t.each=function(t,r){return i(t,r,e,0)._then(n,void 0,void 0,t,void 0)},t.mapSeries=r}},{}],12:[function(t,e,n){"use strict";function r(t,e){function n(r){return this instanceof n?(p(this,"message","string"==typeof r?r:e),p(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new n(r)}return u(n,Error),n}function i(t){return this instanceof i?(p(this,"name","OperationalError"),p(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(p(this,"message",t.message),p(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,s,a=t("./es5"),c=a.freeze,l=t("./util"),u=l.inherits,p=l.notEnumerableProp,h=r("Warning","warning"),f=r("CancellationError","cancellation error"),_=r("TimeoutError","timeout error"),d=r("AggregateError","aggregate error");try{o=TypeError,s=RangeError}catch(v){o=r("TypeError","type error"),s=r("RangeError","range error")}for(var y="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),m=0;m1?t.cancelPromise._reject(e):t.cancelPromise._cancel(),t.cancelPromise=null,!0):!1}function a(){return l.call(this,this.promise._target()._settledValue())}function c(t){return s(this,t)?void 0:(h.e=t,h)}function l(t){var i=this.promise,l=this.handler;if(!this.called){this.called=!0;var u=this.isFinallyHandler()?l.call(i._boundValue()):l.call(i._boundValue(),t);if(u===r)return u;if(void 0!==u){i._setReturnedNonUndefined();var f=n(u,i);if(f instanceof e){if(null!=this.cancelPromise){if(f._isCancelled()){var _=new p("late cancellation observer");return i._attachExtraTrace(_),h.e=_,h}f.isPending()&&f._attachCancellationCallback(new o(this))}return f._then(a,c,void 0,this,void 0)}}}return i.isRejected()?(s(this),h.e=t,h):(s(this),t)}var u=t("./util"),p=e.CancellationError,h=u.errorObj,f=t("./catch_filter")(r);return i.prototype.isFinallyHandler=function(){return 0===this.type},o.prototype._resultCancelled=function(){s(this.finallyHandler)},e.prototype._passThrough=function(t,e,n,r){return"function"!=typeof t?this.then():this._then(n,r,void 0,new i(this,e,t),void 0)},e.prototype.lastly=e.prototype["finally"]=function(t){return this._passThrough(t,0,l,l)},e.prototype.tap=function(t){return this._passThrough(t,1,l)},e.prototype.tapCatch=function(t){var n=arguments.length;if(1===n)return this._passThrough(t,1,void 0,l);var r,i=new Array(n-1),o=0;for(r=0;n-1>r;++r){var s=arguments[r];if(!u.isObject(s))return e.reject(new TypeError("tapCatch statement predicate: expecting an object but got "+u.classString(s)));i[o++]=s}i.length=o;var a=arguments[r];return this._passThrough(f(i,a,this),1,void 0,l)},i}},{"./catch_filter":7,"./util":36}],16:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r){for(var o=0;o0&&"function"==typeof arguments[e]){t=arguments[e];var r}var i=[].slice.call(arguments);t&&i.pop();var r=new n(i).promise();return void 0!==t?r.spread(t):r}}},{"./util":36}],18:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,e,n,r){this.constructor$(t),this._promise._captureStackTrace();var i=l();this._callback=null===i?e:u.domainBind(i,e),this._preservedValues=r===o?new Array(this.length()):null,this._limit=n,this._inFlight=0,this._queue=[],f.invoke(this._asyncInit,this,void 0)}function c(t,n,i,o){if("function"!=typeof n)return r("expecting a function but got "+u.classString(n));var s=0;if(void 0!==i){if("object"!=typeof i||null===i)return e.reject(new TypeError("options argument must be an object but it is "+u.classString(i)));if("number"!=typeof i.concurrency)return e.reject(new TypeError("'concurrency' must be a number but it is "+u.classString(i.concurrency)));s=i.concurrency}return s="number"==typeof s&&isFinite(s)&&s>=1?s:0,new a(t,n,s,o).promise()}var l=e._getDomain,u=t("./util"),p=u.tryCatch,h=u.errorObj,f=e._async;u.inherits(a,n),a.prototype._asyncInit=function(){this._init$(void 0,-2)},a.prototype._init=function(){},a.prototype._promiseFulfilled=function(t,n){var r=this._values,o=this.length(),a=this._preservedValues,c=this._limit;if(0>n){if(n=-1*n-1,r[n]=t,c>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(c>=1&&this._inFlight>=c)return r[n]=t,this._queue.push(n),!1;null!==a&&(a[n]=t);var l=this._promise,u=this._callback,f=l._boundValue();l._pushContext();var _=p(u).call(f,t,n,o),d=l._popContext();if(s.checkForgottenReturns(_,d,null!==a?"Promise.filter":"Promise.map",l),_===h)return this._reject(_.e),!0;var v=i(_,this._promise);if(v instanceof e){v=v._target();var y=v._bitField;if(0===(50397184&y))return c>=1&&this._inFlight++,r[n]=v,v._proxy(this,-1*(n+1)),!1;if(0===(33554432&y))return 0!==(16777216&y)?(this._reject(v._reason()),!0):(this._cancel(),!0);_=v._value()}r[n]=_}var m=++this._totalResolved;return m>=o?(null!==a?this._filter(r,a):this._resolve(r),!0):!1},a.prototype._drainQueue=function(){for(var t=this._queue,e=this._limit,n=this._values;t.length>0&&this._inFlighto;++o)t[o]&&(r[i++]=e[o]);r.length=i,this._resolve(r)},a.prototype.preservedValues=function(){return this._preservedValues},e.prototype.map=function(t,e){return c(this,t,e,null)},e.map=function(t,e,n,r){return c(t,e,n,r)}}},{"./util":36}],19:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){var s=t("./util"),a=s.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+s.classString(t));return function(){var r=new e(n);r._captureStackTrace(),r._pushContext();var i=a(t).apply(this,arguments),s=r._popContext();return o.checkForgottenReturns(i,s,"Promise.method",r),r._resolveFromSyncValue(i),r}},e.attempt=e["try"]=function(t){if("function"!=typeof t)return i("expecting a function but got "+s.classString(t));var r=new e(n);r._captureStackTrace(),r._pushContext();var c;if(arguments.length>1){o.deprecated("calling Promise.try with more than 1 argument");var l=arguments[1],u=arguments[2];c=s.isArray(l)?a(t).apply(u,l):a(t).call(u,l)}else c=a(t)();var p=r._popContext();return o.checkForgottenReturns(c,p,"Promise.try",r),r._resolveFromSyncValue(c),r},e.prototype._resolveFromSyncValue=function(t){t===s.errorObj?this._rejectCallback(t.e,!1):this._resolveCallback(t,!0)}}},{"./util":36}],20:[function(t,e,n){"use strict";function r(t){return t instanceof Error&&u.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(r(t)){e=new l(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var n=u.keys(t),i=0;i1){var n,r=new Array(e-1),i=0;for(n=0;e-1>n;++n){var o=arguments[n];if(!f.isObject(o))return p("Catch statement predicate: expecting an object but got "+f.classString(o));r[i++]=o}return r.length=i,t=arguments[n],this.then(void 0,P(r,t,this))}return this.then(void 0,t)},i.prototype.reflect=function(){return this._then(u,u,void 0,this,void 0)},i.prototype.then=function(t,e){if(T.warnings()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){var n=".then() only accepts functions but was passed: "+f.classString(t);arguments.length>1&&(n+=", "+f.classString(e)),this._warn(n)}return this._then(t,e,void 0,void 0,void 0)},i.prototype.done=function(t,e){var n=this._then(t,e,void 0,void 0,void 0);n._setIsFinal()},i.prototype.spread=function(t){return"function"!=typeof t?p("expecting a function but got "+f.classString(t)):this.all()._then(t,void 0,void 0,w,void 0)},i.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},i.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new E(this).promise()},i.prototype.error=function(t){return this.caught(f.originatesFromRejection,t)},i.getNewLibraryCopy=e.exports,i.is=function(t){return t instanceof i},i.fromNode=i.fromCallback=function(t){var e=new i(b);e._captureStackTrace();var n=arguments.length>1?!!Object(arguments[1]).multiArgs:!1,r=O(t)(R(e,n));return r===S&&e._rejectCallback(r.e,!0),e._isFateSealed()||e._setAsyncGuaranteed(),e},i.all=function(t){return new E(t).promise()},i.cast=function(t){var e=j(t);return e instanceof i||(e=new i(b),e._captureStackTrace(),e._setFulfilled(),e._rejectionHandler0=t),e},i.resolve=i.fulfilled=i.cast,i.reject=i.rejected=function(t){var e=new i(b);return e._captureStackTrace(),e._rejectCallback(t,!0),e},i.setScheduler=function(t){if("function"!=typeof t)throw new m("expecting a function but got "+f.classString(t));return v.setScheduler(t)},i.prototype._then=function(t,e,n,r,o){var s=void 0!==o,a=s?o:new i(b),l=this._target(),u=l._bitField;s||(a._propagateFrom(this,3),a._captureStackTrace(),void 0===r&&0!==(2097152&this._bitField)&&(r=0!==(50397184&u)?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,a));var p=c();if(0!==(50397184&u)){var h,_,d=l._settlePromiseCtx;0!==(33554432&u)?(_=l._rejectionHandler0,h=t):0!==(16777216&u)?(_=l._fulfillmentHandler0,h=e,l._unsetRejectionIsUnhandled()):(d=l._settlePromiseLateCancellationObserver,_=new g("late cancellation observer"),l._attachExtraTrace(_),h=e),v.invoke(d,l,{handler:null===p?h:"function"==typeof h&&f.domainBind(p,h),promise:a,receiver:r,value:_})}else l._addCallbacks(t,e,a,r,p);return a},i.prototype._length=function(){return 65535&this._bitField},i.prototype._isFateSealed=function(){return 0!==(117506048&this._bitField)},i.prototype._isFollowing=function(){return 67108864===(67108864&this._bitField)},i.prototype._setLength=function(t){this._bitField=-65536&this._bitField|65535&t},i.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},i.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},i.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},i.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},i.prototype._isFinal=function(){return(4194304&this._bitField)>0},i.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},i.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},i.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},i.prototype._setAsyncGuaranteed=function(){v.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},i.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[4*t-4+3];return e===h?void 0:void 0===e&&this._isBound()?this._boundValue():e},i.prototype._promiseAt=function(t){return this[4*t-4+2]},i.prototype._fulfillmentHandlerAt=function(t){return this[4*t-4+0]},i.prototype._rejectionHandlerAt=function(t){return this[4*t-4+1]},i.prototype._boundValue=function(){},i.prototype._migrateCallback0=function(t){var e=(t._bitField,t._fulfillmentHandler0),n=t._rejectionHandler0,r=t._promise0,i=t._receiverAt(0);void 0===i&&(i=h),this._addCallbacks(e,n,r,i,null)},i.prototype._migrateCallbackAt=function(t,e){var n=t._fulfillmentHandlerAt(e),r=t._rejectionHandlerAt(e),i=t._promiseAt(e),o=t._receiverAt(e);void 0===o&&(o=h),this._addCallbacks(n,r,i,o,null)},i.prototype._addCallbacks=function(t,e,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof t&&(this._fulfillmentHandler0=null===i?t:f.domainBind(i,t)),"function"==typeof e&&(this._rejectionHandler0=null===i?e:f.domainBind(i,e));else{var s=4*o-4;this[s+2]=n,this[s+3]=r,"function"==typeof t&&(this[s+0]=null===i?t:f.domainBind(i,t)),"function"==typeof e&&(this[s+1]=null===i?e:f.domainBind(i,e))}return this._setLength(o+1),o},i.prototype._proxy=function(t,e){this._addCallbacks(void 0,void 0,e,t,null)},i.prototype._resolveCallback=function(t,e){if(0===(117506048&this._bitField)){if(t===this)return this._rejectCallback(l(),!1);var n=j(t,this);if(!(n instanceof i))return this._fulfill(t);e&&this._propagateFrom(n,2);var r=n._target();if(r===this)return void this._reject(l());var o=r._bitField;if(0===(50397184&o)){var s=this._length();s>0&&r._migrateCallback0(this);for(var a=1;s>a;++a)r._migrateCallbackAt(this,a);this._setFollowing(),this._setLength(0),this._setFollowee(r)}else if(0!==(33554432&o))this._fulfill(r._value());else if(0!==(16777216&o))this._reject(r._reason());else{var c=new g("late cancellation observer");r._attachExtraTrace(c),this._reject(c)}}},i.prototype._rejectCallback=function(t,e,n){var r=f.ensureErrorObject(t),i=r===t;if(!i&&!n&&T.warnings()){var o="a promise was rejected with a non-error: "+f.classString(t);this._warn(o,!0)}this._attachExtraTrace(r,e?i:!1),this._reject(t)},i.prototype._resolveFromExecutor=function(t){if(t!==b){var e=this;this._captureStackTrace(),this._pushContext();var n=!0,r=this._execute(t,function(t){e._resolveCallback(t)},function(t){e._rejectCallback(t,n)});n=!1,this._popContext(),void 0!==r&&e._rejectCallback(r,!0)}},i.prototype._settlePromiseFromHandler=function(t,e,n,r){var i=r._bitField;if(0===(65536&i)){r._pushContext();var o;e===w?n&&"number"==typeof n.length?o=O(t).apply(this._boundValue(),n):(o=S,o.e=new m("cannot .spread() a non-array: "+f.classString(n))):o=O(t).call(e,n);var s=r._popContext();i=r._bitField,0===(65536&i)&&(o===C?r._reject(n):o===S?r._rejectCallback(o.e,!1):(T.checkForgottenReturns(o,s,"",r,this),r._resolveCallback(o)))}},i.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},i.prototype._followee=function(){return this._rejectionHandler0},i.prototype._setFollowee=function(t){this._rejectionHandler0=t},i.prototype._settlePromise=function(t,e,r,o){var s=t instanceof i,a=this._bitField,c=0!==(134217728&a);0!==(65536&a)?(s&&t._invokeInternalOnCancel(),r instanceof x&&r.isFinallyHandler()?(r.cancelPromise=t,O(e).call(r,o)===S&&t._reject(S.e)):e===u?t._fulfill(u.call(r)):r instanceof n?r._promiseCancelled(t):s||t instanceof E?t._cancel():r.cancel()):"function"==typeof e?s?(c&&t._setAsyncGuaranteed(),this._settlePromiseFromHandler(e,r,o,t)):e.call(r,o,t):r instanceof n?r._isResolved()||(0!==(33554432&a)?r._promiseFulfilled(o,t):r._promiseRejected(o,t)):s&&(c&&t._setAsyncGuaranteed(),0!==(33554432&a)?t._fulfill(o):t._reject(o))},i.prototype._settlePromiseLateCancellationObserver=function(t){var e=t.handler,n=t.promise,r=t.receiver,o=t.value;"function"==typeof e?n instanceof i?this._settlePromiseFromHandler(e,r,o,n):e.call(r,o,n):n instanceof i&&n._reject(o)},i.prototype._settlePromiseCtx=function(t){this._settlePromise(t.promise,t.handler,t.receiver,t.value)},i.prototype._settlePromise0=function(t,e,n){var r=this._promise0,i=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,t,i,e)},i.prototype._clearCallbackDataAtIndex=function(t){var e=4*t-4;this[e+2]=this[e+3]=this[e+0]=this[e+1]=void 0},i.prototype._fulfill=function(t){var e=this._bitField;if(!((117506048&e)>>>16)){if(t===this){var n=l();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=t,(65535&e)>0&&(0!==(134217728&e)?this._settlePromises():v.settlePromises(this),this._dereferenceTrace())}},i.prototype._reject=function(t){var e=this._bitField;if(!((117506048&e)>>>16))return this._setRejected(),this._fulfillmentHandler0=t,this._isFinal()?v.fatalError(t,f.isNode):void((65535&e)>0?v.settlePromises(this):this._ensurePossibleRejectionHandled())},i.prototype._fulfillPromises=function(t,e){for(var n=1;t>n;n++){var r=this._fulfillmentHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._rejectPromises=function(t,e){for(var n=1;t>n;n++){var r=this._rejectionHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._settlePromises=function(){var t=this._bitField,e=65535&t;if(e>0){if(0!==(16842752&t)){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,t),this._rejectPromises(e,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,t),this._fulfillPromises(e,r)}this._setLength(0)}this._clearCancellationData()},i.prototype._settledValue=function(){var t=this._bitField;return 0!==(33554432&t)?this._rejectionHandler0:0!==(16777216&t)?this._fulfillmentHandler0:void 0},i.defer=i.pending=function(){T.deprecated("Promise.defer","new Promise");var t=new i(b);return{promise:t,resolve:o,reject:s}},f.notEnumerableProp(i,"_makeSelfResolutionError",l),t("./method")(i,b,j,p,T),t("./bind")(i,b,j,T),t("./cancel")(i,E,p,T),t("./direct_resolve")(i),t("./synchronous_inspection")(i),t("./join")(i,E,j,b,v,c),i.Promise=i,i.version="3.5.3",t("./map.js")(i,E,p,j,b,T),t("./call_get.js")(i),t("./using.js")(i,p,j,F,b,T),t("./timers.js")(i,b,T),t("./generators.js")(i,p,b,j,n,T),t("./nodeify.js")(i),t("./promisify.js")(i,b),t("./props.js")(i,E,j,p),t("./race.js")(i,b,j,p),t("./reduce.js")(i,E,p,j,b,T),t("./settle.js")(i,E,T),t("./some.js")(i,E,p),t("./filter.js")(i,b),t("./each.js")(i,b),t("./any.js")(i),f.toFastProperties(i),f.toFastProperties(i.prototype),a({a:1}),a({b:2}),a({c:3}),a(1),a(function(){}),a(void 0),a(!1),a(new i(b)),T.setBounds(d.firstLineError,f.lastLineError),i}},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){function s(t){switch(t){case-2:return[];case-3:return{};case-6:return new Map}}function a(t){var r=this._promise=new e(n);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var c=t("./util");c.isArray;return c.inherits(a,o),a.prototype.length=function(){return this._length},a.prototype.promise=function(){return this._promise},a.prototype._init=function l(t,n){var o=r(this._values,this._promise);if(o instanceof e){o=o._target();var a=o._bitField;if(this._values=o,0===(50397184&a))return this._promise._setAsyncGuaranteed(),o._then(l,this._reject,void 0,this,n);if(0===(33554432&a))return 0!==(16777216&a)?this._reject(o._reason()):this._cancel();o=o._value()}if(o=c.asArray(o),null===o){var u=i("expecting an array or an iterable object but got "+c.classString(o)).reason();return void this._promise._rejectCallback(u,!1)}return 0===o.length?void(-5===n?this._resolveEmptyArray():this._resolve(s(n))):void this._iterate(o)},a.prototype._iterate=function(t){var n=this.getActualLength(t.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,s=null,a=0;n>a;++a){var c=r(t[a],i);c instanceof e?(c=c._target(),s=c._bitField):s=null,o?null!==s&&c.suppressUnhandledRejections():null!==s?0===(50397184&s)?(c._proxy(this,a),this._values[a]=c):o=0!==(33554432&s)?this._promiseFulfilled(c._value(),a):0!==(16777216&s)?this._promiseRejected(c._reason(),a):this._promiseCancelled(a):o=this._promiseFulfilled(c,a)}o||i._setAsyncGuaranteed()},a.prototype._isResolved=function(){return null===this._values},a.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},a.prototype._cancel=function(){!this._isResolved()&&this._promise._isCancellable()&&(this._values=null,this._promise._cancel())},a.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1)},a.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},a.prototype._promiseCancelled=function(){return this._cancel(),!0},a.prototype._promiseRejected=function(t){return this._totalResolved++,this._reject(t),!0},a.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var n=0;nc;c+=2){var u=s[c],p=s[c+1],_=u+e;if(r===k)t[_]=k(u,h,u,p,e,i);else{var d=r(p,function(){return k(u,h,u,p,e,i)});f.notEnumerableProp(d,"__isPromisified__",!0),t[_]=d}}return f.toFastProperties(t),t}function u(t,e,n){return k(t,e,void 0,t,null,n)}var p,h={},f=t("./util"),_=t("./nodeback"),d=f.withAppended,v=f.maybeWrapAsError,y=f.canEvaluate,m=t("./errors").TypeError,g="Async",b={__isPromisified__:!0},w=["arity","length","name","arguments","caller","callee","prototype","__isPromisified__"],C=new RegExp("^(?:"+w.join("|")+")$"),j=function(t){return f.isIdentifier(t)&&"_"!==t.charAt(0)&&"constructor"!==t},E=function(t){return t.replace(/([$])/,"\\$")},k=y?p:c;e.promisify=function(t,e){if("function"!=typeof t)throw new m("expecting a function but got "+f.classString(t));if(i(t))return t;e=Object(e);var n=void 0===e.context?h:e.context,o=!!e.multiArgs,s=u(t,n,o);return f.copyDescriptors(t,s,r),s},e.promisifyAll=function(t,e){if("function"!=typeof t&&"object"!=typeof t)throw new m("the target of promisifyAll must be an object or a function\n\n See http://goo.gl/MqrFmX\n");e=Object(e);var n=!!e.multiArgs,r=e.suffix;"string"!=typeof r&&(r=g);var i=e.filter;"function"!=typeof i&&(i=j);var o=e.promisifier;if("function"!=typeof o&&(o=k),!f.isIdentifier(r))throw new RangeError("suffix must be a valid identifier\n\n See http://goo.gl/MqrFmX\n");for(var s=f.inheritedDataKeys(t),a=0;ao;++o){var s=r[o];e[o]=t[s],e[o+i]=s}}this.constructor$(e),this._isMap=n,this._init$(void 0,n?-6:-3)}function s(t){var n,s=r(t);return l(s)?(n=s instanceof e?s._then(e.props,void 0,void 0,void 0,void 0):new o(s).promise(),s instanceof e&&n._propagateFrom(s,2),n):i("cannot await properties of a non-object\n\n See http://goo.gl/MqrFmX\n")}var a,c=t("./util"),l=c.isObject,u=t("./es5");"function"==typeof Map&&(a=Map);var p=function(){function t(t,r){this[e]=t,this[e+n]=r,e++}var e=0,n=0;return function(r){n=r.size,e=0;var i=new Array(2*r.size);return r.forEach(t,i),i}}(),h=function(t){for(var e=new a,n=t.length/2|0,r=0;n>r;++r){var i=t[n+r],o=t[r];e.set(i,o)}return e};c.inherits(o,n),o.prototype._init=function(){},o.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;if(n>=this._length){var r;if(this._isMap)r=h(this._values);else{r={};for(var i=this.length(),o=0,s=this.length();s>o;++o)r[this._values[o+i]]=this._values[o]}return this._resolve(r),!0}return!1},o.prototype.shouldCopyValues=function(){return!1},o.prototype.getActualLength=function(t){return t>>1},e.prototype.props=function(){return s(this)},e.props=function(t){return s(t)}}},{"./es5":13,"./util":36}],26:[function(t,e,n){"use strict";function r(t,e,n,r,i){for(var o=0;i>o;++o)n[o+r]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacityh;++h){var _=t[h];(void 0!==_||h in t)&&e.cast(_)._then(u,p,void 0,l,null)}return l}var s=t("./util"),a=function(t){return t.then(function(e){return o(e,t)})};e.race=function(t){return o(t,void 0)},e.prototype.race=function(){return o(this,void 0)}}},{"./util":36}],28:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r,i){this.constructor$(t);var s=h();this._fn=null===s?n:f.domainBind(s,n),void 0!==r&&(r=e.resolve(r),r._attachCancellationCallback(this)),this._initialValue=r,this._currentCancellable=null,i===o?this._eachValues=Array(this._length):0===i?this._eachValues=null:this._eachValues=void 0,this._promise._captureStackTrace(),this._init$(void 0,-5)}function c(t,e){this.isFulfilled()?e._resolve(t):e._reject(t)}function l(t,e,n,i){if("function"!=typeof e)return r("expecting a function but got "+f.classString(e));var o=new a(t,e,n,i);return o.promise()}function u(t){this.accum=t,this.array._gotAccum(t);var n=i(this.value,this.array._promise);return n instanceof e?(this.array._currentCancellable=n,n._then(p,void 0,void 0,this,void 0)):p.call(this,n)}function p(t){var n=this.array,r=n._promise,i=_(n._fn);r._pushContext();var o;o=void 0!==n._eachValues?i.call(r._boundValue(),t,this.index,this.length):i.call(r._boundValue(),this.accum,t,this.index,this.length),o instanceof e&&(n._currentCancellable=o);var a=r._popContext();return s.checkForgottenReturns(o,a,void 0!==n._eachValues?"Promise.each":"Promise.reduce",r),o}var h=e._getDomain,f=t("./util"),_=f.tryCatch;f.inherits(a,n),a.prototype._gotAccum=function(t){void 0!==this._eachValues&&null!==this._eachValues&&t!==o&&this._eachValues.push(t)},a.prototype._eachComplete=function(t){return null!==this._eachValues&&this._eachValues.push(t),this._eachValues},a.prototype._init=function(){},a.prototype._resolveEmptyArray=function(){this._resolve(void 0!==this._eachValues?this._eachValues:this._initialValue)},a.prototype.shouldCopyValues=function(){return!1},a.prototype._resolve=function(t){this._promise._resolveCallback(t),this._values=null},a.prototype._resultCancelled=function(t){return t===this._initialValue?this._cancel():void(this._isResolved()||(this._resultCancelled$(),this._currentCancellable instanceof e&&this._currentCancellable.cancel(),this._initialValue instanceof e&&this._initialValue.cancel()))},a.prototype._iterate=function(t){this._values=t;var n,r,i=t.length;if(void 0!==this._initialValue?(n=this._initialValue,r=0):(n=e.resolve(t[0]),r=1),this._currentCancellable=n,!n.isRejected())for(;i>r;++r){var o={accum:null,value:t[r],index:r,length:i,array:this};n=n._then(u,void 0,void 0,o,void 0)}void 0!==this._eachValues&&(n=n._then(this._eachComplete,void 0,void 0,this,void 0)),n._then(c,c,void 0,n,this)},e.prototype.reduce=function(t,e){return l(this,t,e,null)},e.reduce=function(t,e,n,r){return l(t,e,n,r)}}},{"./util":36}],29:[function(t,e,n){"use strict";var r,i=t("./util"),o=function(){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")},s=i.getNativePromise();if(i.isNode&&"undefined"==typeof MutationObserver){var a=global.setImmediate,c=process.nextTick;r=i.isRecentNode?function(t){a.call(global,t)}:function(t){c.call(process,t)}}else if("function"==typeof s&&"function"==typeof s.resolve){var l=s.resolve();r=function(t){l.then(t)}}else r="undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&(window.navigator.standalone||window.cordova)?"undefined"!=typeof setImmediate?function(t){setImmediate(t)}:"undefined"!=typeof setTimeout?function(t){setTimeout(t,0)}:o:function(){var t=document.createElement("div"),e={attributes:!0},n=!1,r=document.createElement("div"),i=new MutationObserver(function(){t.classList.toggle("foo"),n=!1});i.observe(r,e);var o=function(){n||(n=!0,r.classList.toggle("foo"))};return function(n){var r=new MutationObserver(function(){r.disconnect(),n()});r.observe(t,e),o()}}();e.exports=r},{"./util":36}],30:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t)}var o=e.PromiseInspection,s=t("./util");s.inherits(i,n),i.prototype._promiseResolved=function(t,e){this._values[t]=e;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},i.prototype._promiseFulfilled=function(t,e){var n=new o;return n._bitField=33554432,n._settledValueField=t,this._promiseResolved(e,n)},i.prototype._promiseRejected=function(t,e){var n=new o;return n._bitField=16777216, -n._settledValueField=t,this._promiseResolved(e,n)},e.settle=function(t){return r.deprecated(".settle()",".reflect()"),new i(t).promise()},e.prototype.settle=function(){return e.settle(this)}}},{"./util":36}],31:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t),this._howMany=0,this._unwrap=!1,this._initialized=!1}function o(t,e){if((0|e)!==e||0>e)return r("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n");var n=new i(t),o=n.promise();return n.setHowMany(e),n.init(),o}var s=t("./util"),a=t("./errors").RangeError,c=t("./errors").AggregateError,l=s.isArray,u={};s.inherits(i,n),i.prototype._init=function(){if(this._initialized){if(0===this._howMany)return void this._resolve([]);this._init$(void 0,-5);var t=l(this._values);!this._isResolved()&&t&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}},i.prototype.init=function(){this._initialized=!0,this._init()},i.prototype.setUnwrap=function(){this._unwrap=!0},i.prototype.howMany=function(){return this._howMany},i.prototype.setHowMany=function(t){this._howMany=t},i.prototype._promiseFulfilled=function(t){return this._addFulfilled(t),this._fulfilled()===this.howMany()?(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0):!1},i.prototype._promiseRejected=function(t){return this._addRejected(t),this._checkOutcome()},i.prototype._promiseCancelled=function(){return this._values instanceof e||null==this._values?this._cancel():(this._addRejected(u),this._checkOutcome())},i.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var t=new c,e=this.length();e0?this._reject(t):this._cancel(),!0}return!1},i.prototype._fulfilled=function(){return this._totalResolved},i.prototype._rejected=function(){return this._values.length-this.length()},i.prototype._addRejected=function(t){this._values.push(t)},i.prototype._addFulfilled=function(t){this._values[this._totalResolved++]=t},i.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},i.prototype._getRangeError=function(t){var e="Input array must contain at least "+this._howMany+" items but contains only "+t+" items";return new a(e)},i.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},e.some=function(t,e){return o(t,e)},e.prototype.some=function(t){return o(this,t)},e._SomePromiseArray=i}},{"./errors":12,"./util":36}],32:[function(t,e,n){"use strict";e.exports=function(t){function e(t){void 0!==t?(t=t._target(),this._bitField=t._bitField,this._settledValueField=t._isFateSealed()?t._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}e.prototype._settledValue=function(){return this._settledValueField};var n=e.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},r=e.prototype.error=e.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},i=e.prototype.isFulfilled=function(){return 0!==(33554432&this._bitField)},o=e.prototype.isRejected=function(){return 0!==(16777216&this._bitField)},s=e.prototype.isPending=function(){return 0===(50397184&this._bitField)},a=e.prototype.isResolved=function(){return 0!==(50331648&this._bitField)};e.prototype.isCancelled=function(){return 0!==(8454144&this._bitField)},t.prototype.__isCancelled=function(){return 65536===(65536&this._bitField)},t.prototype._isCancelled=function(){return this._target().__isCancelled()},t.prototype.isCancelled=function(){return 0!==(8454144&this._target()._bitField)},t.prototype.isPending=function(){return s.call(this._target())},t.prototype.isRejected=function(){return o.call(this._target())},t.prototype.isFulfilled=function(){return i.call(this._target())},t.prototype.isResolved=function(){return a.call(this._target())},t.prototype.value=function(){return n.call(this._target())},t.prototype.reason=function(){var t=this._target();return t._unsetRejectionIsUnhandled(),r.call(t)},t.prototype._value=function(){return this._settledValue()},t.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},t.PromiseInspection=e}},{}],33:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,r){if(u(t)){if(t instanceof e)return t;var i=o(t);if(i===l){r&&r._pushContext();var c=e.reject(i.e);return r&&r._popContext(),c}if("function"==typeof i){if(s(t)){var c=new e(n);return t._then(c._fulfill,c._reject,void 0,c,null),c}return a(t,i,r)}}return t}function i(t){return t.then}function o(t){try{return i(t)}catch(e){return l.e=e,l}}function s(t){try{return p.call(t,"_promise0")}catch(e){return!1}}function a(t,r,i){function o(t){a&&(a._resolveCallback(t),a=null)}function s(t){a&&(a._rejectCallback(t,p,!0),a=null)}var a=new e(n),u=a;i&&i._pushContext(),a._captureStackTrace(),i&&i._popContext();var p=!0,h=c.tryCatch(r).call(t,o,s);return p=!1,a&&h===l&&(a._rejectCallback(h.e,!0,!0),a=null),u}var c=t("./util"),l=c.errorObj,u=c.isObject,p={}.hasOwnProperty;return r}},{"./util":36}],34:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.handle=t}function o(t){return clearTimeout(this.handle),t}function s(t){throw clearTimeout(this.handle),t}var a=t("./util"),c=e.TimeoutError;i.prototype._resultCancelled=function(){clearTimeout(this.handle)};var l=function(t){return u(+this).thenReturn(t)},u=e.delay=function(t,o){var s,a;return void 0!==o?(s=e.resolve(o)._then(l,null,null,t,void 0),r.cancellation()&&o instanceof e&&s._setOnCancel(o)):(s=new e(n),a=setTimeout(function(){s._fulfill()},+t),r.cancellation()&&s._setOnCancel(new i(a)),s._captureStackTrace()),s._setAsyncGuaranteed(),s};e.prototype.delay=function(t){return u(t,this)};var p=function(t,e,n){var r;r="string"!=typeof e?e instanceof Error?e:new c("operation timed out"):new c(e),a.markAsOriginatingFromRejection(r),t._attachExtraTrace(r),t._reject(r),null!=n&&n.cancel()};e.prototype.timeout=function(t,e){t=+t;var n,a,c=new i(setTimeout(function(){n.isPending()&&p(n,e,a)},t));return r.cancellation()?(a=this.then(),n=a._then(o,s,void 0,c,void 0),n._setOnCancel(c)):n=this._then(o,s,void 0,c,void 0),n}}},{"./util":36}],35:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t){setTimeout(function(){throw t},0)}function c(t){var e=r(t);return e!==t&&"function"==typeof t._isDisposable&&"function"==typeof t._getDisposer&&t._isDisposable()&&e._setDisposable(t._getDisposer()),e}function l(t,n){function i(){if(s>=l)return u._fulfill();var o=c(t[s++]);if(o instanceof e&&o._isDisposable()){try{o=r(o._getDisposer().tryDispose(n),t.promise)}catch(p){return a(p)}if(o instanceof e)return o._then(i,a,null,null,null)}i()}var s=0,l=t.length,u=new e(o);return i(),u}function u(t,e,n){this._data=t,this._promise=e,this._context=n}function p(t,e,n){this.constructor$(t,e,n)}function h(t){return u.isDisposer(t)?(this.resources[this.index]._setDisposable(t),t.promise()):t}function f(t){this.length=t,this.promise=null,this[t-1]=null}var _=t("./util"),d=t("./errors").TypeError,v=t("./util").inherits,y=_.errorObj,m=_.tryCatch,g={};u.prototype.data=function(){return this._data},u.prototype.promise=function(){return this._promise},u.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():g},u.prototype.tryDispose=function(t){var e=this.resource(),n=this._context;void 0!==n&&n._pushContext();var r=e!==g?this.doDispose(e,t):null;return void 0!==n&&n._popContext(),this._promise._unsetDisposable(),this._data=null,r},u.isDisposer=function(t){return null!=t&&"function"==typeof t.resource&&"function"==typeof t.tryDispose},v(p,u),p.prototype.doDispose=function(t,e){var n=this.data();return n.call(t,t,e)},f.prototype._resultCancelled=function(){for(var t=this.length,n=0;t>n;++n){var r=this[n];r instanceof e&&r.cancel()}},e.using=function(){var t=arguments.length;if(2>t)return n("you must pass at least 2 arguments to Promise.using");var i=arguments[t-1];if("function"!=typeof i)return n("expecting a function but got "+_.classString(i));var o,a=!0;2===t&&Array.isArray(arguments[0])?(o=arguments[0],t=o.length,a=!1):(o=arguments,t--);for(var c=new f(t),p=0;t>p;++p){var d=o[p];if(u.isDisposer(d)){var v=d;d=d.promise(),d._setDisposable(v)}else{var g=r(d);g instanceof e&&(d=g._then(h,null,null,{resources:c,index:p},void 0))}c[p]=d}for(var b=new Array(c.length),p=0;p0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},e.prototype.disposer=function(t){if("function"==typeof t)return new p(t,this,i());throw new d}}},{"./errors":12,"./util":36}],36:[function(t,e,n){"use strict";function r(){try{var t=P;return P=null,t.apply(this,arguments)}catch(e){return x.e=e,x}}function i(t){return P=t,r}function o(t){return null==t||t===!0||t===!1||"string"==typeof t||"number"==typeof t}function s(t){return"function"==typeof t||"object"==typeof t&&null!==t}function a(t){return o(t)?new Error(v(t)):t}function c(t,e){var n,r=t.length,i=new Array(r+1);for(n=0;r>n;++n)i[n]=t[n];return i[n]=e,i}function l(t,e,n){if(!F.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var r=Object.getOwnPropertyDescriptor(t,e);return null!=r?null==r.get&&null==r.set?r.value:n:void 0}function u(t,e,n){if(o(t))return t;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return F.defineProperty(t,e,r),t}function p(t){throw t}function h(t){try{if("function"==typeof t){var e=F.names(t.prototype),n=F.isES5&&e.length>1,r=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=A.test(t+"")&&F.names(t).length>0;if(n||r||i)return!0}return!1}catch(o){return!1}}function f(t){function e(){}function n(){return typeof r.foo}e.prototype=t;var r=new e;return n(),n(),t}function _(t){return D.test(t)}function d(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}function v(t){try{return t+""}catch(e){return"[no string representation]"}}function y(t){return t instanceof Error||null!==t&&"object"==typeof t&&"string"==typeof t.message&&"string"==typeof t.name}function m(t){try{u(t,"isOperational",!0)}catch(e){}}function g(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function b(t){return y(t)&&F.propertyIsWritable(t,"stack")}function w(t){return{}.toString.call(t)}function C(t,e,n){for(var r=F.names(t),i=0;i10||t[0]>0}(),B.isNode&&B.toFastProperties(process);try{throw new Error}catch(U){B.lastLineError=U}e.exports=B},{"./es5":13}]},{},[4])(4)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise); \ No newline at end of file diff --git a/truebit-implementation/node_modules/bluebird/js/release/any.js b/truebit-implementation/node_modules/bluebird/js/release/any.js deleted file mode 100644 index 05a6228e..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/any.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -var SomePromiseArray = Promise._SomePromiseArray; -function any(promises) { - var ret = new SomePromiseArray(promises); - var promise = ret.promise(); - ret.setHowMany(1); - ret.setUnwrap(); - ret.init(); - return promise; -} - -Promise.any = function (promises) { - return any(promises); -}; - -Promise.prototype.any = function () { - return any(this); -}; - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/assert.js b/truebit-implementation/node_modules/bluebird/js/release/assert.js deleted file mode 100644 index 4518231a..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/assert.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -module.exports = (function(){ -var AssertionError = (function() { - function AssertionError(a) { - this.constructor$(a); - this.message = a; - this.name = "AssertionError"; - } - AssertionError.prototype = new Error(); - AssertionError.prototype.constructor = AssertionError; - AssertionError.prototype.constructor$ = Error; - return AssertionError; -})(); - -function getParams(args) { - var params = []; - for (var i = 0; i < args.length; ++i) params.push("arg" + i); - return params; -} - -function nativeAssert(callName, args, expect) { - try { - var params = getParams(args); - var constructorArgs = params; - constructorArgs.push("return " + - callName + "("+ params.join(",") + ");"); - var fn = Function.apply(null, constructorArgs); - return fn.apply(null, args); - } catch (e) { - if (!(e instanceof SyntaxError)) { - throw e; - } else { - return expect; - } - } -} - -return function assert(boolExpr, message) { - if (boolExpr === true) return; - - if (typeof boolExpr === "string" && - boolExpr.charAt(0) === "%") { - var nativeCallName = boolExpr; - var $_len = arguments.length;var args = new Array(Math.max($_len - 2, 0)); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];}; - if (nativeAssert(nativeCallName, args, message) === message) return; - message = (nativeCallName + " !== " + message); - } - - var ret = new AssertionError(message); - if (Error.captureStackTrace) { - Error.captureStackTrace(ret, assert); - } - throw ret; -}; -})(); diff --git a/truebit-implementation/node_modules/bluebird/js/release/async.js b/truebit-implementation/node_modules/bluebird/js/release/async.js deleted file mode 100644 index 73cdc611..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/async.js +++ /dev/null @@ -1,165 +0,0 @@ -"use strict"; -var firstLineError; -try {throw new Error(); } catch (e) {firstLineError = e;} -var schedule = require("./schedule"); -var Queue = require("./queue"); -var util = require("./util"); - -function Async() { - this._customScheduler = false; - this._isTickUsed = false; - this._lateQueue = new Queue(16); - this._normalQueue = new Queue(16); - this._haveDrainedQueues = false; - this._trampolineEnabled = true; - var self = this; - this.drainQueues = function () { - self._drainQueues(); - }; - this._schedule = schedule; -} - -Async.prototype.setScheduler = function(fn) { - var prev = this._schedule; - this._schedule = fn; - this._customScheduler = true; - return prev; -}; - -Async.prototype.hasCustomScheduler = function() { - return this._customScheduler; -}; - -Async.prototype.enableTrampoline = function() { - this._trampolineEnabled = true; -}; - -Async.prototype.disableTrampolineIfNecessary = function() { - if (util.hasDevTools) { - this._trampolineEnabled = false; - } -}; - -Async.prototype.haveItemsQueued = function () { - return this._isTickUsed || this._haveDrainedQueues; -}; - - -Async.prototype.fatalError = function(e, isNode) { - if (isNode) { - process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) + - "\n"); - process.exit(2); - } else { - this.throwLater(e); - } -}; - -Async.prototype.throwLater = function(fn, arg) { - if (arguments.length === 1) { - arg = fn; - fn = function () { throw arg; }; - } - if (typeof setTimeout !== "undefined") { - setTimeout(function() { - fn(arg); - }, 0); - } else try { - this._schedule(function() { - fn(arg); - }); - } catch (e) { - throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } -}; - -function AsyncInvokeLater(fn, receiver, arg) { - this._lateQueue.push(fn, receiver, arg); - this._queueTick(); -} - -function AsyncInvoke(fn, receiver, arg) { - this._normalQueue.push(fn, receiver, arg); - this._queueTick(); -} - -function AsyncSettlePromises(promise) { - this._normalQueue._pushOne(promise); - this._queueTick(); -} - -if (!util.hasDevTools) { - Async.prototype.invokeLater = AsyncInvokeLater; - Async.prototype.invoke = AsyncInvoke; - Async.prototype.settlePromises = AsyncSettlePromises; -} else { - Async.prototype.invokeLater = function (fn, receiver, arg) { - if (this._trampolineEnabled) { - AsyncInvokeLater.call(this, fn, receiver, arg); - } else { - this._schedule(function() { - setTimeout(function() { - fn.call(receiver, arg); - }, 100); - }); - } - }; - - Async.prototype.invoke = function (fn, receiver, arg) { - if (this._trampolineEnabled) { - AsyncInvoke.call(this, fn, receiver, arg); - } else { - this._schedule(function() { - fn.call(receiver, arg); - }); - } - }; - - Async.prototype.settlePromises = function(promise) { - if (this._trampolineEnabled) { - AsyncSettlePromises.call(this, promise); - } else { - this._schedule(function() { - promise._settlePromises(); - }); - } - }; -} - -function _drainQueue(queue) { - while (queue.length() > 0) { - _drainQueueStep(queue); - } -} - -function _drainQueueStep(queue) { - var fn = queue.shift(); - if (typeof fn !== "function") { - fn._settlePromises(); - } else { - var receiver = queue.shift(); - var arg = queue.shift(); - fn.call(receiver, arg); - } -} - -Async.prototype._drainQueues = function () { - _drainQueue(this._normalQueue); - this._reset(); - this._haveDrainedQueues = true; - _drainQueue(this._lateQueue); -}; - -Async.prototype._queueTick = function () { - if (!this._isTickUsed) { - this._isTickUsed = true; - this._schedule(this.drainQueues); - } -}; - -Async.prototype._reset = function () { - this._isTickUsed = false; -}; - -module.exports = Async; -module.exports.firstLineError = firstLineError; diff --git a/truebit-implementation/node_modules/bluebird/js/release/bind.js b/truebit-implementation/node_modules/bluebird/js/release/bind.js deleted file mode 100644 index fc3379db..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/bind.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { -var calledBind = false; -var rejectThis = function(_, e) { - this._reject(e); -}; - -var targetRejected = function(e, context) { - context.promiseRejectionQueued = true; - context.bindingPromise._then(rejectThis, rejectThis, null, this, e); -}; - -var bindingResolved = function(thisArg, context) { - if (((this._bitField & 50397184) === 0)) { - this._resolveCallback(context.target); - } -}; - -var bindingRejected = function(e, context) { - if (!context.promiseRejectionQueued) this._reject(e); -}; - -Promise.prototype.bind = function (thisArg) { - if (!calledBind) { - calledBind = true; - Promise.prototype._propagateFrom = debug.propagateFromFunction(); - Promise.prototype._boundValue = debug.boundValueFunction(); - } - var maybePromise = tryConvertToPromise(thisArg); - var ret = new Promise(INTERNAL); - ret._propagateFrom(this, 1); - var target = this._target(); - ret._setBoundTo(maybePromise); - if (maybePromise instanceof Promise) { - var context = { - promiseRejectionQueued: false, - promise: ret, - target: target, - bindingPromise: maybePromise - }; - target._then(INTERNAL, targetRejected, undefined, ret, context); - maybePromise._then( - bindingResolved, bindingRejected, undefined, ret, context); - ret._setOnCancel(maybePromise); - } else { - ret._resolveCallback(target); - } - return ret; -}; - -Promise.prototype._setBoundTo = function (obj) { - if (obj !== undefined) { - this._bitField = this._bitField | 2097152; - this._boundTo = obj; - } else { - this._bitField = this._bitField & (~2097152); - } -}; - -Promise.prototype._isBound = function () { - return (this._bitField & 2097152) === 2097152; -}; - -Promise.bind = function (thisArg, value) { - return Promise.resolve(value).bind(thisArg); -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/bluebird.js b/truebit-implementation/node_modules/bluebird/js/release/bluebird.js deleted file mode 100644 index 1c36cf36..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/bluebird.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -var old; -if (typeof Promise !== "undefined") old = Promise; -function noConflict() { - try { if (Promise === bluebird) Promise = old; } - catch (e) {} - return bluebird; -} -var bluebird = require("./promise")(); -bluebird.noConflict = noConflict; -module.exports = bluebird; diff --git a/truebit-implementation/node_modules/bluebird/js/release/call_get.js b/truebit-implementation/node_modules/bluebird/js/release/call_get.js deleted file mode 100644 index 0ed7714a..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/call_get.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; -var cr = Object.create; -if (cr) { - var callerCache = cr(null); - var getterCache = cr(null); - callerCache[" size"] = getterCache[" size"] = 0; -} - -module.exports = function(Promise) { -var util = require("./util"); -var canEvaluate = util.canEvaluate; -var isIdentifier = util.isIdentifier; - -var getMethodCaller; -var getGetter; -if (!false) { -var makeMethodCaller = function (methodName) { - return new Function("ensureMethod", " \n\ - return function(obj) { \n\ - 'use strict' \n\ - var len = this.length; \n\ - ensureMethod(obj, 'methodName'); \n\ - switch(len) { \n\ - case 1: return obj.methodName(this[0]); \n\ - case 2: return obj.methodName(this[0], this[1]); \n\ - case 3: return obj.methodName(this[0], this[1], this[2]); \n\ - case 0: return obj.methodName(); \n\ - default: \n\ - return obj.methodName.apply(obj, this); \n\ - } \n\ - }; \n\ - ".replace(/methodName/g, methodName))(ensureMethod); -}; - -var makeGetter = function (propertyName) { - return new Function("obj", " \n\ - 'use strict'; \n\ - return obj.propertyName; \n\ - ".replace("propertyName", propertyName)); -}; - -var getCompiled = function(name, compiler, cache) { - var ret = cache[name]; - if (typeof ret !== "function") { - if (!isIdentifier(name)) { - return null; - } - ret = compiler(name); - cache[name] = ret; - cache[" size"]++; - if (cache[" size"] > 512) { - var keys = Object.keys(cache); - for (var i = 0; i < 256; ++i) delete cache[keys[i]]; - cache[" size"] = keys.length - 256; - } - } - return ret; -}; - -getMethodCaller = function(name) { - return getCompiled(name, makeMethodCaller, callerCache); -}; - -getGetter = function(name) { - return getCompiled(name, makeGetter, getterCache); -}; -} - -function ensureMethod(obj, methodName) { - var fn; - if (obj != null) fn = obj[methodName]; - if (typeof fn !== "function") { - var message = "Object " + util.classString(obj) + " has no method '" + - util.toString(methodName) + "'"; - throw new Promise.TypeError(message); - } - return fn; -} - -function caller(obj) { - var methodName = this.pop(); - var fn = ensureMethod(obj, methodName); - return fn.apply(obj, this); -} -Promise.prototype.call = function (methodName) { - var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}; - if (!false) { - if (canEvaluate) { - var maybeCaller = getMethodCaller(methodName); - if (maybeCaller !== null) { - return this._then( - maybeCaller, undefined, undefined, args, undefined); - } - } - } - args.push(methodName); - return this._then(caller, undefined, undefined, args, undefined); -}; - -function namedGetter(obj) { - return obj[this]; -} -function indexedGetter(obj) { - var index = +this; - if (index < 0) index = Math.max(0, index + obj.length); - return obj[index]; -} -Promise.prototype.get = function (propertyName) { - var isIndex = (typeof propertyName === "number"); - var getter; - if (!isIndex) { - if (canEvaluate) { - var maybeGetter = getGetter(propertyName); - getter = maybeGetter !== null ? maybeGetter : namedGetter; - } else { - getter = namedGetter; - } - } else { - getter = indexedGetter; - } - return this._then(getter, undefined, undefined, propertyName, undefined); -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/cancel.js b/truebit-implementation/node_modules/bluebird/js/release/cancel.js deleted file mode 100644 index 7a12415e..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/cancel.js +++ /dev/null @@ -1,129 +0,0 @@ -"use strict"; -module.exports = function(Promise, PromiseArray, apiRejection, debug) { -var util = require("./util"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var async = Promise._async; - -Promise.prototype["break"] = Promise.prototype.cancel = function() { - if (!debug.cancellation()) return this._warn("cancellation is disabled"); - - var promise = this; - var child = promise; - while (promise._isCancellable()) { - if (!promise._cancelBy(child)) { - if (child._isFollowing()) { - child._followee().cancel(); - } else { - child._cancelBranched(); - } - break; - } - - var parent = promise._cancellationParent; - if (parent == null || !parent._isCancellable()) { - if (promise._isFollowing()) { - promise._followee().cancel(); - } else { - promise._cancelBranched(); - } - break; - } else { - if (promise._isFollowing()) promise._followee().cancel(); - promise._setWillBeCancelled(); - child = promise; - promise = parent; - } - } -}; - -Promise.prototype._branchHasCancelled = function() { - this._branchesRemainingToCancel--; -}; - -Promise.prototype._enoughBranchesHaveCancelled = function() { - return this._branchesRemainingToCancel === undefined || - this._branchesRemainingToCancel <= 0; -}; - -Promise.prototype._cancelBy = function(canceller) { - if (canceller === this) { - this._branchesRemainingToCancel = 0; - this._invokeOnCancel(); - return true; - } else { - this._branchHasCancelled(); - if (this._enoughBranchesHaveCancelled()) { - this._invokeOnCancel(); - return true; - } - } - return false; -}; - -Promise.prototype._cancelBranched = function() { - if (this._enoughBranchesHaveCancelled()) { - this._cancel(); - } -}; - -Promise.prototype._cancel = function() { - if (!this._isCancellable()) return; - this._setCancelled(); - async.invoke(this._cancelPromises, this, undefined); -}; - -Promise.prototype._cancelPromises = function() { - if (this._length() > 0) this._settlePromises(); -}; - -Promise.prototype._unsetOnCancel = function() { - this._onCancelField = undefined; -}; - -Promise.prototype._isCancellable = function() { - return this.isPending() && !this._isCancelled(); -}; - -Promise.prototype.isCancellable = function() { - return this.isPending() && !this.isCancelled(); -}; - -Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { - if (util.isArray(onCancelCallback)) { - for (var i = 0; i < onCancelCallback.length; ++i) { - this._doInvokeOnCancel(onCancelCallback[i], internalOnly); - } - } else if (onCancelCallback !== undefined) { - if (typeof onCancelCallback === "function") { - if (!internalOnly) { - var e = tryCatch(onCancelCallback).call(this._boundValue()); - if (e === errorObj) { - this._attachExtraTrace(e.e); - async.throwLater(e.e); - } - } - } else { - onCancelCallback._resultCancelled(this); - } - } -}; - -Promise.prototype._invokeOnCancel = function() { - var onCancelCallback = this._onCancel(); - this._unsetOnCancel(); - async.invoke(this._doInvokeOnCancel, this, onCancelCallback); -}; - -Promise.prototype._invokeInternalOnCancel = function() { - if (this._isCancellable()) { - this._doInvokeOnCancel(this._onCancel(), true); - this._unsetOnCancel(); - } -}; - -Promise.prototype._resultCancelled = function() { - this.cancel(); -}; - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/catch_filter.js b/truebit-implementation/node_modules/bluebird/js/release/catch_filter.js deleted file mode 100644 index 0f24ce23..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/catch_filter.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -module.exports = function(NEXT_FILTER) { -var util = require("./util"); -var getKeys = require("./es5").keys; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -function catchFilter(instances, cb, promise) { - return function(e) { - var boundTo = promise._boundValue(); - predicateLoop: for (var i = 0; i < instances.length; ++i) { - var item = instances[i]; - - if (item === Error || - (item != null && item.prototype instanceof Error)) { - if (e instanceof item) { - return tryCatch(cb).call(boundTo, e); - } - } else if (typeof item === "function") { - var matchesPredicate = tryCatch(item).call(boundTo, e); - if (matchesPredicate === errorObj) { - return matchesPredicate; - } else if (matchesPredicate) { - return tryCatch(cb).call(boundTo, e); - } - } else if (util.isObject(e)) { - var keys = getKeys(item); - for (var j = 0; j < keys.length; ++j) { - var key = keys[j]; - if (item[key] != e[key]) { - continue predicateLoop; - } - } - return tryCatch(cb).call(boundTo, e); - } - } - return NEXT_FILTER; - }; -} - -return catchFilter; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/context.js b/truebit-implementation/node_modules/bluebird/js/release/context.js deleted file mode 100644 index c307414f..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/context.js +++ /dev/null @@ -1,69 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -var longStackTraces = false; -var contextStack = []; - -Promise.prototype._promiseCreated = function() {}; -Promise.prototype._pushContext = function() {}; -Promise.prototype._popContext = function() {return null;}; -Promise._peekContext = Promise.prototype._peekContext = function() {}; - -function Context() { - this._trace = new Context.CapturedTrace(peekContext()); -} -Context.prototype._pushContext = function () { - if (this._trace !== undefined) { - this._trace._promiseCreated = null; - contextStack.push(this._trace); - } -}; - -Context.prototype._popContext = function () { - if (this._trace !== undefined) { - var trace = contextStack.pop(); - var ret = trace._promiseCreated; - trace._promiseCreated = null; - return ret; - } - return null; -}; - -function createContext() { - if (longStackTraces) return new Context(); -} - -function peekContext() { - var lastIndex = contextStack.length - 1; - if (lastIndex >= 0) { - return contextStack[lastIndex]; - } - return undefined; -} -Context.CapturedTrace = null; -Context.create = createContext; -Context.deactivateLongStackTraces = function() {}; -Context.activateLongStackTraces = function() { - var Promise_pushContext = Promise.prototype._pushContext; - var Promise_popContext = Promise.prototype._popContext; - var Promise_PeekContext = Promise._peekContext; - var Promise_peekContext = Promise.prototype._peekContext; - var Promise_promiseCreated = Promise.prototype._promiseCreated; - Context.deactivateLongStackTraces = function() { - Promise.prototype._pushContext = Promise_pushContext; - Promise.prototype._popContext = Promise_popContext; - Promise._peekContext = Promise_PeekContext; - Promise.prototype._peekContext = Promise_peekContext; - Promise.prototype._promiseCreated = Promise_promiseCreated; - longStackTraces = false; - }; - longStackTraces = true; - Promise.prototype._pushContext = Context.prototype._pushContext; - Promise.prototype._popContext = Context.prototype._popContext; - Promise._peekContext = Promise.prototype._peekContext = peekContext; - Promise.prototype._promiseCreated = function() { - var ctx = this._peekContext(); - if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; - }; -}; -return Context; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/debuggability.js b/truebit-implementation/node_modules/bluebird/js/release/debuggability.js deleted file mode 100644 index 213d4ac6..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/debuggability.js +++ /dev/null @@ -1,934 +0,0 @@ -"use strict"; -module.exports = function(Promise, Context) { -var getDomain = Promise._getDomain; -var async = Promise._async; -var Warning = require("./errors").Warning; -var util = require("./util"); -var es5 = require("./es5"); -var canAttachTrace = util.canAttachTrace; -var unhandledRejectionHandled; -var possiblyUnhandledRejection; -var bluebirdFramePattern = - /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; -var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; -var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; -var stackFramePattern = null; -var formatStack = null; -var indentStackFrames = false; -var printWarning; -var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && - (false || - util.env("BLUEBIRD_DEBUG") || - util.env("NODE_ENV") === "development")); - -var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && - (debugging || util.env("BLUEBIRD_WARNINGS"))); - -var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && - (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); - -var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && - (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); - -Promise.prototype.suppressUnhandledRejections = function() { - var target = this._target(); - target._bitField = ((target._bitField & (~1048576)) | - 524288); -}; - -Promise.prototype._ensurePossibleRejectionHandled = function () { - if ((this._bitField & 524288) !== 0) return; - this._setRejectionIsUnhandled(); - var self = this; - setTimeout(function() { - self._notifyUnhandledRejection(); - }, 1); -}; - -Promise.prototype._notifyUnhandledRejectionIsHandled = function () { - fireRejectionEvent("rejectionHandled", - unhandledRejectionHandled, undefined, this); -}; - -Promise.prototype._setReturnedNonUndefined = function() { - this._bitField = this._bitField | 268435456; -}; - -Promise.prototype._returnedNonUndefined = function() { - return (this._bitField & 268435456) !== 0; -}; - -Promise.prototype._notifyUnhandledRejection = function () { - if (this._isRejectionUnhandled()) { - var reason = this._settledValue(); - this._setUnhandledRejectionIsNotified(); - fireRejectionEvent("unhandledRejection", - possiblyUnhandledRejection, reason, this); - } -}; - -Promise.prototype._setUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField | 262144; -}; - -Promise.prototype._unsetUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField & (~262144); -}; - -Promise.prototype._isUnhandledRejectionNotified = function () { - return (this._bitField & 262144) > 0; -}; - -Promise.prototype._setRejectionIsUnhandled = function () { - this._bitField = this._bitField | 1048576; -}; - -Promise.prototype._unsetRejectionIsUnhandled = function () { - this._bitField = this._bitField & (~1048576); - if (this._isUnhandledRejectionNotified()) { - this._unsetUnhandledRejectionIsNotified(); - this._notifyUnhandledRejectionIsHandled(); - } -}; - -Promise.prototype._isRejectionUnhandled = function () { - return (this._bitField & 1048576) > 0; -}; - -Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { - return warn(message, shouldUseOwnTrace, promise || this); -}; - -Promise.onPossiblyUnhandledRejection = function (fn) { - var domain = getDomain(); - possiblyUnhandledRejection = - typeof fn === "function" ? (domain === null ? - fn : util.domainBind(domain, fn)) - : undefined; -}; - -Promise.onUnhandledRejectionHandled = function (fn) { - var domain = getDomain(); - unhandledRejectionHandled = - typeof fn === "function" ? (domain === null ? - fn : util.domainBind(domain, fn)) - : undefined; -}; - -var disableLongStackTraces = function() {}; -Promise.longStackTraces = function () { - if (async.haveItemsQueued() && !config.longStackTraces) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - if (!config.longStackTraces && longStackTracesIsSupported()) { - var Promise_captureStackTrace = Promise.prototype._captureStackTrace; - var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; - var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace; - config.longStackTraces = true; - disableLongStackTraces = function() { - if (async.haveItemsQueued() && !config.longStackTraces) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - Promise.prototype._captureStackTrace = Promise_captureStackTrace; - Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; - Promise.prototype._dereferenceTrace = Promise_dereferenceTrace; - Context.deactivateLongStackTraces(); - async.enableTrampoline(); - config.longStackTraces = false; - }; - Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; - Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; - Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace; - Context.activateLongStackTraces(); - async.disableTrampolineIfNecessary(); - } -}; - -Promise.hasLongStackTraces = function () { - return config.longStackTraces && longStackTracesIsSupported(); -}; - -var fireDomEvent = (function() { - try { - if (typeof CustomEvent === "function") { - var event = new CustomEvent("CustomEvent"); - util.global.dispatchEvent(event); - return function(name, event) { - var eventData = { - detail: event, - cancelable: true - }; - es5.defineProperty( - eventData, "promise", {value: event.promise}); - es5.defineProperty(eventData, "reason", {value: event.reason}); - var domEvent = new CustomEvent(name.toLowerCase(), eventData); - return !util.global.dispatchEvent(domEvent); - }; - } else if (typeof Event === "function") { - var event = new Event("CustomEvent"); - util.global.dispatchEvent(event); - return function(name, event) { - var domEvent = new Event(name.toLowerCase(), { - cancelable: true - }); - domEvent.detail = event; - es5.defineProperty(domEvent, "promise", {value: event.promise}); - es5.defineProperty(domEvent, "reason", {value: event.reason}); - return !util.global.dispatchEvent(domEvent); - }; - } else { - var event = document.createEvent("CustomEvent"); - event.initCustomEvent("testingtheevent", false, true, {}); - util.global.dispatchEvent(event); - return function(name, event) { - var domEvent = document.createEvent("CustomEvent"); - domEvent.initCustomEvent(name.toLowerCase(), false, true, - event); - return !util.global.dispatchEvent(domEvent); - }; - } - } catch (e) {} - return function() { - return false; - }; -})(); - -var fireGlobalEvent = (function() { - if (util.isNode) { - return function() { - return process.emit.apply(process, arguments); - }; - } else { - if (!util.global) { - return function() { - return false; - }; - } - return function(name) { - var methodName = "on" + name.toLowerCase(); - var method = util.global[methodName]; - if (!method) return false; - method.apply(util.global, [].slice.call(arguments, 1)); - return true; - }; - } -})(); - -function generatePromiseLifecycleEventObject(name, promise) { - return {promise: promise}; -} - -var eventToObjectGenerator = { - promiseCreated: generatePromiseLifecycleEventObject, - promiseFulfilled: generatePromiseLifecycleEventObject, - promiseRejected: generatePromiseLifecycleEventObject, - promiseResolved: generatePromiseLifecycleEventObject, - promiseCancelled: generatePromiseLifecycleEventObject, - promiseChained: function(name, promise, child) { - return {promise: promise, child: child}; - }, - warning: function(name, warning) { - return {warning: warning}; - }, - unhandledRejection: function (name, reason, promise) { - return {reason: reason, promise: promise}; - }, - rejectionHandled: generatePromiseLifecycleEventObject -}; - -var activeFireEvent = function (name) { - var globalEventFired = false; - try { - globalEventFired = fireGlobalEvent.apply(null, arguments); - } catch (e) { - async.throwLater(e); - globalEventFired = true; - } - - var domEventFired = false; - try { - domEventFired = fireDomEvent(name, - eventToObjectGenerator[name].apply(null, arguments)); - } catch (e) { - async.throwLater(e); - domEventFired = true; - } - - return domEventFired || globalEventFired; -}; - -Promise.config = function(opts) { - opts = Object(opts); - if ("longStackTraces" in opts) { - if (opts.longStackTraces) { - Promise.longStackTraces(); - } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { - disableLongStackTraces(); - } - } - if ("warnings" in opts) { - var warningsOption = opts.warnings; - config.warnings = !!warningsOption; - wForgottenReturn = config.warnings; - - if (util.isObject(warningsOption)) { - if ("wForgottenReturn" in warningsOption) { - wForgottenReturn = !!warningsOption.wForgottenReturn; - } - } - } - if ("cancellation" in opts && opts.cancellation && !config.cancellation) { - if (async.haveItemsQueued()) { - throw new Error( - "cannot enable cancellation after promises are in use"); - } - Promise.prototype._clearCancellationData = - cancellationClearCancellationData; - Promise.prototype._propagateFrom = cancellationPropagateFrom; - Promise.prototype._onCancel = cancellationOnCancel; - Promise.prototype._setOnCancel = cancellationSetOnCancel; - Promise.prototype._attachCancellationCallback = - cancellationAttachCancellationCallback; - Promise.prototype._execute = cancellationExecute; - propagateFromFunction = cancellationPropagateFrom; - config.cancellation = true; - } - if ("monitoring" in opts) { - if (opts.monitoring && !config.monitoring) { - config.monitoring = true; - Promise.prototype._fireEvent = activeFireEvent; - } else if (!opts.monitoring && config.monitoring) { - config.monitoring = false; - Promise.prototype._fireEvent = defaultFireEvent; - } - } - return Promise; -}; - -function defaultFireEvent() { return false; } - -Promise.prototype._fireEvent = defaultFireEvent; -Promise.prototype._execute = function(executor, resolve, reject) { - try { - executor(resolve, reject); - } catch (e) { - return e; - } -}; -Promise.prototype._onCancel = function () {}; -Promise.prototype._setOnCancel = function (handler) { ; }; -Promise.prototype._attachCancellationCallback = function(onCancel) { - ; -}; -Promise.prototype._captureStackTrace = function () {}; -Promise.prototype._attachExtraTrace = function () {}; -Promise.prototype._dereferenceTrace = function () {}; -Promise.prototype._clearCancellationData = function() {}; -Promise.prototype._propagateFrom = function (parent, flags) { - ; - ; -}; - -function cancellationExecute(executor, resolve, reject) { - var promise = this; - try { - executor(resolve, reject, function(onCancel) { - if (typeof onCancel !== "function") { - throw new TypeError("onCancel must be a function, got: " + - util.toString(onCancel)); - } - promise._attachCancellationCallback(onCancel); - }); - } catch (e) { - return e; - } -} - -function cancellationAttachCancellationCallback(onCancel) { - if (!this._isCancellable()) return this; - - var previousOnCancel = this._onCancel(); - if (previousOnCancel !== undefined) { - if (util.isArray(previousOnCancel)) { - previousOnCancel.push(onCancel); - } else { - this._setOnCancel([previousOnCancel, onCancel]); - } - } else { - this._setOnCancel(onCancel); - } -} - -function cancellationOnCancel() { - return this._onCancelField; -} - -function cancellationSetOnCancel(onCancel) { - this._onCancelField = onCancel; -} - -function cancellationClearCancellationData() { - this._cancellationParent = undefined; - this._onCancelField = undefined; -} - -function cancellationPropagateFrom(parent, flags) { - if ((flags & 1) !== 0) { - this._cancellationParent = parent; - var branchesRemainingToCancel = parent._branchesRemainingToCancel; - if (branchesRemainingToCancel === undefined) { - branchesRemainingToCancel = 0; - } - parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; - } - if ((flags & 2) !== 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -} - -function bindingPropagateFrom(parent, flags) { - if ((flags & 2) !== 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -} -var propagateFromFunction = bindingPropagateFrom; - -function boundValueFunction() { - var ret = this._boundTo; - if (ret !== undefined) { - if (ret instanceof Promise) { - if (ret.isFulfilled()) { - return ret.value(); - } else { - return undefined; - } - } - } - return ret; -} - -function longStackTracesCaptureStackTrace() { - this._trace = new CapturedTrace(this._peekContext()); -} - -function longStackTracesAttachExtraTrace(error, ignoreSelf) { - if (canAttachTrace(error)) { - var trace = this._trace; - if (trace !== undefined) { - if (ignoreSelf) trace = trace._parent; - } - if (trace !== undefined) { - trace.attachExtraTrace(error); - } else if (!error.__stackCleaned__) { - var parsed = parseStackAndMessage(error); - util.notEnumerableProp(error, "stack", - parsed.message + "\n" + parsed.stack.join("\n")); - util.notEnumerableProp(error, "__stackCleaned__", true); - } - } -} - -function longStackTracesDereferenceTrace() { - this._trace = undefined; -} - -function checkForgottenReturns(returnValue, promiseCreated, name, promise, - parent) { - if (returnValue === undefined && promiseCreated !== null && - wForgottenReturn) { - if (parent !== undefined && parent._returnedNonUndefined()) return; - if ((promise._bitField & 65535) === 0) return; - - if (name) name = name + " "; - var handlerLine = ""; - var creatorLine = ""; - if (promiseCreated._trace) { - var traceLines = promiseCreated._trace.stack.split("\n"); - var stack = cleanStack(traceLines); - for (var i = stack.length - 1; i >= 0; --i) { - var line = stack[i]; - if (!nodeFramePattern.test(line)) { - var lineMatches = line.match(parseLinePattern); - if (lineMatches) { - handlerLine = "at " + lineMatches[1] + - ":" + lineMatches[2] + ":" + lineMatches[3] + " "; - } - break; - } - } - - if (stack.length > 0) { - var firstUserLine = stack[0]; - for (var i = 0; i < traceLines.length; ++i) { - - if (traceLines[i] === firstUserLine) { - if (i > 0) { - creatorLine = "\n" + traceLines[i - 1]; - } - break; - } - } - - } - } - var msg = "a promise was created in a " + name + - "handler " + handlerLine + "but was not returned from it, " + - "see http://goo.gl/rRqMUw" + - creatorLine; - promise._warn(msg, true, promiseCreated); - } -} - -function deprecated(name, replacement) { - var message = name + - " is deprecated and will be removed in a future version."; - if (replacement) message += " Use " + replacement + " instead."; - return warn(message); -} - -function warn(message, shouldUseOwnTrace, promise) { - if (!config.warnings) return; - var warning = new Warning(message); - var ctx; - if (shouldUseOwnTrace) { - promise._attachExtraTrace(warning); - } else if (config.longStackTraces && (ctx = Promise._peekContext())) { - ctx.attachExtraTrace(warning); - } else { - var parsed = parseStackAndMessage(warning); - warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); - } - - if (!activeFireEvent("warning", warning)) { - formatAndLogError(warning, "", true); - } -} - -function reconstructStack(message, stacks) { - for (var i = 0; i < stacks.length - 1; ++i) { - stacks[i].push("From previous event:"); - stacks[i] = stacks[i].join("\n"); - } - if (i < stacks.length) { - stacks[i] = stacks[i].join("\n"); - } - return message + "\n" + stacks.join("\n"); -} - -function removeDuplicateOrEmptyJumps(stacks) { - for (var i = 0; i < stacks.length; ++i) { - if (stacks[i].length === 0 || - ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { - stacks.splice(i, 1); - i--; - } - } -} - -function removeCommonRoots(stacks) { - var current = stacks[0]; - for (var i = 1; i < stacks.length; ++i) { - var prev = stacks[i]; - var currentLastIndex = current.length - 1; - var currentLastLine = current[currentLastIndex]; - var commonRootMeetPoint = -1; - - for (var j = prev.length - 1; j >= 0; --j) { - if (prev[j] === currentLastLine) { - commonRootMeetPoint = j; - break; - } - } - - for (var j = commonRootMeetPoint; j >= 0; --j) { - var line = prev[j]; - if (current[currentLastIndex] === line) { - current.pop(); - currentLastIndex--; - } else { - break; - } - } - current = prev; - } -} - -function cleanStack(stack) { - var ret = []; - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - var isTraceLine = " (No stack trace)" === line || - stackFramePattern.test(line); - var isInternalFrame = isTraceLine && shouldIgnore(line); - if (isTraceLine && !isInternalFrame) { - if (indentStackFrames && line.charAt(0) !== " ") { - line = " " + line; - } - ret.push(line); - } - } - return ret; -} - -function stackFramesAsArray(error) { - var stack = error.stack.replace(/\s+$/g, "").split("\n"); - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - if (" (No stack trace)" === line || stackFramePattern.test(line)) { - break; - } - } - if (i > 0 && error.name != "SyntaxError") { - stack = stack.slice(i); - } - return stack; -} - -function parseStackAndMessage(error) { - var stack = error.stack; - var message = error.toString(); - stack = typeof stack === "string" && stack.length > 0 - ? stackFramesAsArray(error) : [" (No stack trace)"]; - return { - message: message, - stack: error.name == "SyntaxError" ? stack : cleanStack(stack) - }; -} - -function formatAndLogError(error, title, isSoft) { - if (typeof console !== "undefined") { - var message; - if (util.isObject(error)) { - var stack = error.stack; - message = title + formatStack(stack, error); - } else { - message = title + String(error); - } - if (typeof printWarning === "function") { - printWarning(message, isSoft); - } else if (typeof console.log === "function" || - typeof console.log === "object") { - console.log(message); - } - } -} - -function fireRejectionEvent(name, localHandler, reason, promise) { - var localEventFired = false; - try { - if (typeof localHandler === "function") { - localEventFired = true; - if (name === "rejectionHandled") { - localHandler(promise); - } else { - localHandler(reason, promise); - } - } - } catch (e) { - async.throwLater(e); - } - - if (name === "unhandledRejection") { - if (!activeFireEvent(name, reason, promise) && !localEventFired) { - formatAndLogError(reason, "Unhandled rejection "); - } - } else { - activeFireEvent(name, promise); - } -} - -function formatNonError(obj) { - var str; - if (typeof obj === "function") { - str = "[function " + - (obj.name || "anonymous") + - "]"; - } else { - str = obj && typeof obj.toString === "function" - ? obj.toString() : util.toString(obj); - var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; - if (ruselessToString.test(str)) { - try { - var newStr = JSON.stringify(obj); - str = newStr; - } - catch(e) { - - } - } - if (str.length === 0) { - str = "(empty array)"; - } - } - return ("(<" + snip(str) + ">, no stack trace)"); -} - -function snip(str) { - var maxChars = 41; - if (str.length < maxChars) { - return str; - } - return str.substr(0, maxChars - 3) + "..."; -} - -function longStackTracesIsSupported() { - return typeof captureStackTrace === "function"; -} - -var shouldIgnore = function() { return false; }; -var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; -function parseLineInfo(line) { - var matches = line.match(parseLineInfoRegex); - if (matches) { - return { - fileName: matches[1], - line: parseInt(matches[2], 10) - }; - } -} - -function setBounds(firstLineError, lastLineError) { - if (!longStackTracesIsSupported()) return; - var firstStackLines = firstLineError.stack.split("\n"); - var lastStackLines = lastLineError.stack.split("\n"); - var firstIndex = -1; - var lastIndex = -1; - var firstFileName; - var lastFileName; - for (var i = 0; i < firstStackLines.length; ++i) { - var result = parseLineInfo(firstStackLines[i]); - if (result) { - firstFileName = result.fileName; - firstIndex = result.line; - break; - } - } - for (var i = 0; i < lastStackLines.length; ++i) { - var result = parseLineInfo(lastStackLines[i]); - if (result) { - lastFileName = result.fileName; - lastIndex = result.line; - break; - } - } - if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || - firstFileName !== lastFileName || firstIndex >= lastIndex) { - return; - } - - shouldIgnore = function(line) { - if (bluebirdFramePattern.test(line)) return true; - var info = parseLineInfo(line); - if (info) { - if (info.fileName === firstFileName && - (firstIndex <= info.line && info.line <= lastIndex)) { - return true; - } - } - return false; - }; -} - -function CapturedTrace(parent) { - this._parent = parent; - this._promisesCreated = 0; - var length = this._length = 1 + (parent === undefined ? 0 : parent._length); - captureStackTrace(this, CapturedTrace); - if (length > 32) this.uncycle(); -} -util.inherits(CapturedTrace, Error); -Context.CapturedTrace = CapturedTrace; - -CapturedTrace.prototype.uncycle = function() { - var length = this._length; - if (length < 2) return; - var nodes = []; - var stackToIndex = {}; - - for (var i = 0, node = this; node !== undefined; ++i) { - nodes.push(node); - node = node._parent; - } - length = this._length = i; - for (var i = length - 1; i >= 0; --i) { - var stack = nodes[i].stack; - if (stackToIndex[stack] === undefined) { - stackToIndex[stack] = i; - } - } - for (var i = 0; i < length; ++i) { - var currentStack = nodes[i].stack; - var index = stackToIndex[currentStack]; - if (index !== undefined && index !== i) { - if (index > 0) { - nodes[index - 1]._parent = undefined; - nodes[index - 1]._length = 1; - } - nodes[i]._parent = undefined; - nodes[i]._length = 1; - var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; - - if (index < length - 1) { - cycleEdgeNode._parent = nodes[index + 1]; - cycleEdgeNode._parent.uncycle(); - cycleEdgeNode._length = - cycleEdgeNode._parent._length + 1; - } else { - cycleEdgeNode._parent = undefined; - cycleEdgeNode._length = 1; - } - var currentChildLength = cycleEdgeNode._length + 1; - for (var j = i - 2; j >= 0; --j) { - nodes[j]._length = currentChildLength; - currentChildLength++; - } - return; - } - } -}; - -CapturedTrace.prototype.attachExtraTrace = function(error) { - if (error.__stackCleaned__) return; - this.uncycle(); - var parsed = parseStackAndMessage(error); - var message = parsed.message; - var stacks = [parsed.stack]; - - var trace = this; - while (trace !== undefined) { - stacks.push(cleanStack(trace.stack.split("\n"))); - trace = trace._parent; - } - removeCommonRoots(stacks); - removeDuplicateOrEmptyJumps(stacks); - util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); - util.notEnumerableProp(error, "__stackCleaned__", true); -}; - -var captureStackTrace = (function stackDetection() { - var v8stackFramePattern = /^\s*at\s*/; - var v8stackFormatter = function(stack, error) { - if (typeof stack === "string") return stack; - - if (error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - if (typeof Error.stackTraceLimit === "number" && - typeof Error.captureStackTrace === "function") { - Error.stackTraceLimit += 6; - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - var captureStackTrace = Error.captureStackTrace; - - shouldIgnore = function(line) { - return bluebirdFramePattern.test(line); - }; - return function(receiver, ignoreUntil) { - Error.stackTraceLimit += 6; - captureStackTrace(receiver, ignoreUntil); - Error.stackTraceLimit -= 6; - }; - } - var err = new Error(); - - if (typeof err.stack === "string" && - err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { - stackFramePattern = /@/; - formatStack = v8stackFormatter; - indentStackFrames = true; - return function captureStackTrace(o) { - o.stack = new Error().stack; - }; - } - - var hasStackAfterThrow; - try { throw new Error(); } - catch(e) { - hasStackAfterThrow = ("stack" in e); - } - if (!("stack" in err) && hasStackAfterThrow && - typeof Error.stackTraceLimit === "number") { - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - return function captureStackTrace(o) { - Error.stackTraceLimit += 6; - try { throw new Error(); } - catch(e) { o.stack = e.stack; } - Error.stackTraceLimit -= 6; - }; - } - - formatStack = function(stack, error) { - if (typeof stack === "string") return stack; - - if ((typeof error === "object" || - typeof error === "function") && - error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - return null; - -})([]); - -if (typeof console !== "undefined" && typeof console.warn !== "undefined") { - printWarning = function (message) { - console.warn(message); - }; - if (util.isNode && process.stderr.isTTY) { - printWarning = function(message, isSoft) { - var color = isSoft ? "\u001b[33m" : "\u001b[31m"; - console.warn(color + message + "\u001b[0m\n"); - }; - } else if (!util.isNode && typeof (new Error().stack) === "string") { - printWarning = function(message, isSoft) { - console.warn("%c" + message, - isSoft ? "color: darkorange" : "color: red"); - }; - } -} - -var config = { - warnings: warnings, - longStackTraces: false, - cancellation: false, - monitoring: false -}; - -if (longStackTraces) Promise.longStackTraces(); - -return { - longStackTraces: function() { - return config.longStackTraces; - }, - warnings: function() { - return config.warnings; - }, - cancellation: function() { - return config.cancellation; - }, - monitoring: function() { - return config.monitoring; - }, - propagateFromFunction: function() { - return propagateFromFunction; - }, - boundValueFunction: function() { - return boundValueFunction; - }, - checkForgottenReturns: checkForgottenReturns, - setBounds: setBounds, - warn: warn, - deprecated: deprecated, - CapturedTrace: CapturedTrace, - fireDomEvent: fireDomEvent, - fireGlobalEvent: fireGlobalEvent -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/direct_resolve.js b/truebit-implementation/node_modules/bluebird/js/release/direct_resolve.js deleted file mode 100644 index a8902982..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/direct_resolve.js +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -function returner() { - return this.value; -} -function thrower() { - throw this.reason; -} - -Promise.prototype["return"] = -Promise.prototype.thenReturn = function (value) { - if (value instanceof Promise) value.suppressUnhandledRejections(); - return this._then( - returner, undefined, undefined, {value: value}, undefined); -}; - -Promise.prototype["throw"] = -Promise.prototype.thenThrow = function (reason) { - return this._then( - thrower, undefined, undefined, {reason: reason}, undefined); -}; - -Promise.prototype.catchThrow = function (reason) { - if (arguments.length <= 1) { - return this._then( - undefined, thrower, undefined, {reason: reason}, undefined); - } else { - var _reason = arguments[1]; - var handler = function() {throw _reason;}; - return this.caught(reason, handler); - } -}; - -Promise.prototype.catchReturn = function (value) { - if (arguments.length <= 1) { - if (value instanceof Promise) value.suppressUnhandledRejections(); - return this._then( - undefined, returner, undefined, {value: value}, undefined); - } else { - var _value = arguments[1]; - if (_value instanceof Promise) _value.suppressUnhandledRejections(); - var handler = function() {return _value;}; - return this.caught(value, handler); - } -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/each.js b/truebit-implementation/node_modules/bluebird/js/release/each.js deleted file mode 100644 index e4f3d05b..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/each.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseReduce = Promise.reduce; -var PromiseAll = Promise.all; - -function promiseAllThis() { - return PromiseAll(this); -} - -function PromiseMapSeries(promises, fn) { - return PromiseReduce(promises, fn, INTERNAL, INTERNAL); -} - -Promise.prototype.each = function (fn) { - return PromiseReduce(this, fn, INTERNAL, 0) - ._then(promiseAllThis, undefined, undefined, this, undefined); -}; - -Promise.prototype.mapSeries = function (fn) { - return PromiseReduce(this, fn, INTERNAL, INTERNAL); -}; - -Promise.each = function (promises, fn) { - return PromiseReduce(promises, fn, INTERNAL, 0) - ._then(promiseAllThis, undefined, undefined, promises, undefined); -}; - -Promise.mapSeries = PromiseMapSeries; -}; - diff --git a/truebit-implementation/node_modules/bluebird/js/release/errors.js b/truebit-implementation/node_modules/bluebird/js/release/errors.js deleted file mode 100644 index f62f323e..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/errors.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; -var es5 = require("./es5"); -var Objectfreeze = es5.freeze; -var util = require("./util"); -var inherits = util.inherits; -var notEnumerableProp = util.notEnumerableProp; - -function subError(nameProperty, defaultMessage) { - function SubError(message) { - if (!(this instanceof SubError)) return new SubError(message); - notEnumerableProp(this, "message", - typeof message === "string" ? message : defaultMessage); - notEnumerableProp(this, "name", nameProperty); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } else { - Error.call(this); - } - } - inherits(SubError, Error); - return SubError; -} - -var _TypeError, _RangeError; -var Warning = subError("Warning", "warning"); -var CancellationError = subError("CancellationError", "cancellation error"); -var TimeoutError = subError("TimeoutError", "timeout error"); -var AggregateError = subError("AggregateError", "aggregate error"); -try { - _TypeError = TypeError; - _RangeError = RangeError; -} catch(e) { - _TypeError = subError("TypeError", "type error"); - _RangeError = subError("RangeError", "range error"); -} - -var methods = ("join pop push shift unshift slice filter forEach some " + - "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); - -for (var i = 0; i < methods.length; ++i) { - if (typeof Array.prototype[methods[i]] === "function") { - AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; - } -} - -es5.defineProperty(AggregateError.prototype, "length", { - value: 0, - configurable: false, - writable: true, - enumerable: true -}); -AggregateError.prototype["isOperational"] = true; -var level = 0; -AggregateError.prototype.toString = function() { - var indent = Array(level * 4 + 1).join(" "); - var ret = "\n" + indent + "AggregateError of:" + "\n"; - level++; - indent = Array(level * 4 + 1).join(" "); - for (var i = 0; i < this.length; ++i) { - var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; - var lines = str.split("\n"); - for (var j = 0; j < lines.length; ++j) { - lines[j] = indent + lines[j]; - } - str = lines.join("\n"); - ret += str + "\n"; - } - level--; - return ret; -}; - -function OperationalError(message) { - if (!(this instanceof OperationalError)) - return new OperationalError(message); - notEnumerableProp(this, "name", "OperationalError"); - notEnumerableProp(this, "message", message); - this.cause = message; - this["isOperational"] = true; - - if (message instanceof Error) { - notEnumerableProp(this, "message", message.message); - notEnumerableProp(this, "stack", message.stack); - } else if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - -} -inherits(OperationalError, Error); - -var errorTypes = Error["__BluebirdErrorTypes__"]; -if (!errorTypes) { - errorTypes = Objectfreeze({ - CancellationError: CancellationError, - TimeoutError: TimeoutError, - OperationalError: OperationalError, - RejectionError: OperationalError, - AggregateError: AggregateError - }); - es5.defineProperty(Error, "__BluebirdErrorTypes__", { - value: errorTypes, - writable: false, - enumerable: false, - configurable: false - }); -} - -module.exports = { - Error: Error, - TypeError: _TypeError, - RangeError: _RangeError, - CancellationError: errorTypes.CancellationError, - OperationalError: errorTypes.OperationalError, - TimeoutError: errorTypes.TimeoutError, - AggregateError: errorTypes.AggregateError, - Warning: Warning -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/es5.js b/truebit-implementation/node_modules/bluebird/js/release/es5.js deleted file mode 100644 index ea41d5a5..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/es5.js +++ /dev/null @@ -1,80 +0,0 @@ -var isES5 = (function(){ - "use strict"; - return this === undefined; -})(); - -if (isES5) { - module.exports = { - freeze: Object.freeze, - defineProperty: Object.defineProperty, - getDescriptor: Object.getOwnPropertyDescriptor, - keys: Object.keys, - names: Object.getOwnPropertyNames, - getPrototypeOf: Object.getPrototypeOf, - isArray: Array.isArray, - isES5: isES5, - propertyIsWritable: function(obj, prop) { - var descriptor = Object.getOwnPropertyDescriptor(obj, prop); - return !!(!descriptor || descriptor.writable || descriptor.set); - } - }; -} else { - var has = {}.hasOwnProperty; - var str = {}.toString; - var proto = {}.constructor.prototype; - - var ObjectKeys = function (o) { - var ret = []; - for (var key in o) { - if (has.call(o, key)) { - ret.push(key); - } - } - return ret; - }; - - var ObjectGetDescriptor = function(o, key) { - return {value: o[key]}; - }; - - var ObjectDefineProperty = function (o, key, desc) { - o[key] = desc.value; - return o; - }; - - var ObjectFreeze = function (obj) { - return obj; - }; - - var ObjectGetPrototypeOf = function (obj) { - try { - return Object(obj).constructor.prototype; - } - catch (e) { - return proto; - } - }; - - var ArrayIsArray = function (obj) { - try { - return str.call(obj) === "[object Array]"; - } - catch(e) { - return false; - } - }; - - module.exports = { - isArray: ArrayIsArray, - keys: ObjectKeys, - names: ObjectKeys, - defineProperty: ObjectDefineProperty, - getDescriptor: ObjectGetDescriptor, - freeze: ObjectFreeze, - getPrototypeOf: ObjectGetPrototypeOf, - isES5: isES5, - propertyIsWritable: function() { - return true; - } - }; -} diff --git a/truebit-implementation/node_modules/bluebird/js/release/filter.js b/truebit-implementation/node_modules/bluebird/js/release/filter.js deleted file mode 100644 index ed57bf01..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/filter.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseMap = Promise.map; - -Promise.prototype.filter = function (fn, options) { - return PromiseMap(this, fn, options, INTERNAL); -}; - -Promise.filter = function (promises, fn, options) { - return PromiseMap(promises, fn, options, INTERNAL); -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/finally.js b/truebit-implementation/node_modules/bluebird/js/release/finally.js deleted file mode 100644 index d57444be..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/finally.js +++ /dev/null @@ -1,146 +0,0 @@ -"use strict"; -module.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) { -var util = require("./util"); -var CancellationError = Promise.CancellationError; -var errorObj = util.errorObj; -var catchFilter = require("./catch_filter")(NEXT_FILTER); - -function PassThroughHandlerContext(promise, type, handler) { - this.promise = promise; - this.type = type; - this.handler = handler; - this.called = false; - this.cancelPromise = null; -} - -PassThroughHandlerContext.prototype.isFinallyHandler = function() { - return this.type === 0; -}; - -function FinallyHandlerCancelReaction(finallyHandler) { - this.finallyHandler = finallyHandler; -} - -FinallyHandlerCancelReaction.prototype._resultCancelled = function() { - checkCancel(this.finallyHandler); -}; - -function checkCancel(ctx, reason) { - if (ctx.cancelPromise != null) { - if (arguments.length > 1) { - ctx.cancelPromise._reject(reason); - } else { - ctx.cancelPromise._cancel(); - } - ctx.cancelPromise = null; - return true; - } - return false; -} - -function succeed() { - return finallyHandler.call(this, this.promise._target()._settledValue()); -} -function fail(reason) { - if (checkCancel(this, reason)) return; - errorObj.e = reason; - return errorObj; -} -function finallyHandler(reasonOrValue) { - var promise = this.promise; - var handler = this.handler; - - if (!this.called) { - this.called = true; - var ret = this.isFinallyHandler() - ? handler.call(promise._boundValue()) - : handler.call(promise._boundValue(), reasonOrValue); - if (ret === NEXT_FILTER) { - return ret; - } else if (ret !== undefined) { - promise._setReturnedNonUndefined(); - var maybePromise = tryConvertToPromise(ret, promise); - if (maybePromise instanceof Promise) { - if (this.cancelPromise != null) { - if (maybePromise._isCancelled()) { - var reason = - new CancellationError("late cancellation observer"); - promise._attachExtraTrace(reason); - errorObj.e = reason; - return errorObj; - } else if (maybePromise.isPending()) { - maybePromise._attachCancellationCallback( - new FinallyHandlerCancelReaction(this)); - } - } - return maybePromise._then( - succeed, fail, undefined, this, undefined); - } - } - } - - if (promise.isRejected()) { - checkCancel(this); - errorObj.e = reasonOrValue; - return errorObj; - } else { - checkCancel(this); - return reasonOrValue; - } -} - -Promise.prototype._passThrough = function(handler, type, success, fail) { - if (typeof handler !== "function") return this.then(); - return this._then(success, - fail, - undefined, - new PassThroughHandlerContext(this, type, handler), - undefined); -}; - -Promise.prototype.lastly = -Promise.prototype["finally"] = function (handler) { - return this._passThrough(handler, - 0, - finallyHandler, - finallyHandler); -}; - - -Promise.prototype.tap = function (handler) { - return this._passThrough(handler, 1, finallyHandler); -}; - -Promise.prototype.tapCatch = function (handlerOrPredicate) { - var len = arguments.length; - if(len === 1) { - return this._passThrough(handlerOrPredicate, - 1, - undefined, - finallyHandler); - } else { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (util.isObject(item)) { - catchInstances[j++] = item; - } else { - return Promise.reject(new TypeError( - "tapCatch statement predicate: " - + "expecting an object but got " + util.classString(item) - )); - } - } - catchInstances.length = j; - var handler = arguments[i]; - return this._passThrough(catchFilter(catchInstances, handler, this), - 1, - undefined, - finallyHandler); - } - -}; - -return PassThroughHandlerContext; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/generators.js b/truebit-implementation/node_modules/bluebird/js/release/generators.js deleted file mode 100644 index 500c280c..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/generators.js +++ /dev/null @@ -1,223 +0,0 @@ -"use strict"; -module.exports = function(Promise, - apiRejection, - INTERNAL, - tryConvertToPromise, - Proxyable, - debug) { -var errors = require("./errors"); -var TypeError = errors.TypeError; -var util = require("./util"); -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; -var yieldHandlers = []; - -function promiseFromYieldHandler(value, yieldHandlers, traceParent) { - for (var i = 0; i < yieldHandlers.length; ++i) { - traceParent._pushContext(); - var result = tryCatch(yieldHandlers[i])(value); - traceParent._popContext(); - if (result === errorObj) { - traceParent._pushContext(); - var ret = Promise.reject(errorObj.e); - traceParent._popContext(); - return ret; - } - var maybePromise = tryConvertToPromise(result, traceParent); - if (maybePromise instanceof Promise) return maybePromise; - } - return null; -} - -function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { - if (debug.cancellation()) { - var internal = new Promise(INTERNAL); - var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); - this._promise = internal.lastly(function() { - return _finallyPromise; - }); - internal._captureStackTrace(); - internal._setOnCancel(this); - } else { - var promise = this._promise = new Promise(INTERNAL); - promise._captureStackTrace(); - } - this._stack = stack; - this._generatorFunction = generatorFunction; - this._receiver = receiver; - this._generator = undefined; - this._yieldHandlers = typeof yieldHandler === "function" - ? [yieldHandler].concat(yieldHandlers) - : yieldHandlers; - this._yieldedPromise = null; - this._cancellationPhase = false; -} -util.inherits(PromiseSpawn, Proxyable); - -PromiseSpawn.prototype._isResolved = function() { - return this._promise === null; -}; - -PromiseSpawn.prototype._cleanup = function() { - this._promise = this._generator = null; - if (debug.cancellation() && this._finallyPromise !== null) { - this._finallyPromise._fulfill(); - this._finallyPromise = null; - } -}; - -PromiseSpawn.prototype._promiseCancelled = function() { - if (this._isResolved()) return; - var implementsReturn = typeof this._generator["return"] !== "undefined"; - - var result; - if (!implementsReturn) { - var reason = new Promise.CancellationError( - "generator .return() sentinel"); - Promise.coroutine.returnSentinel = reason; - this._promise._attachExtraTrace(reason); - this._promise._pushContext(); - result = tryCatch(this._generator["throw"]).call(this._generator, - reason); - this._promise._popContext(); - } else { - this._promise._pushContext(); - result = tryCatch(this._generator["return"]).call(this._generator, - undefined); - this._promise._popContext(); - } - this._cancellationPhase = true; - this._yieldedPromise = null; - this._continue(result); -}; - -PromiseSpawn.prototype._promiseFulfilled = function(value) { - this._yieldedPromise = null; - this._promise._pushContext(); - var result = tryCatch(this._generator.next).call(this._generator, value); - this._promise._popContext(); - this._continue(result); -}; - -PromiseSpawn.prototype._promiseRejected = function(reason) { - this._yieldedPromise = null; - this._promise._attachExtraTrace(reason); - this._promise._pushContext(); - var result = tryCatch(this._generator["throw"]) - .call(this._generator, reason); - this._promise._popContext(); - this._continue(result); -}; - -PromiseSpawn.prototype._resultCancelled = function() { - if (this._yieldedPromise instanceof Promise) { - var promise = this._yieldedPromise; - this._yieldedPromise = null; - promise.cancel(); - } -}; - -PromiseSpawn.prototype.promise = function () { - return this._promise; -}; - -PromiseSpawn.prototype._run = function () { - this._generator = this._generatorFunction.call(this._receiver); - this._receiver = - this._generatorFunction = undefined; - this._promiseFulfilled(undefined); -}; - -PromiseSpawn.prototype._continue = function (result) { - var promise = this._promise; - if (result === errorObj) { - this._cleanup(); - if (this._cancellationPhase) { - return promise.cancel(); - } else { - return promise._rejectCallback(result.e, false); - } - } - - var value = result.value; - if (result.done === true) { - this._cleanup(); - if (this._cancellationPhase) { - return promise.cancel(); - } else { - return promise._resolveCallback(value); - } - } else { - var maybePromise = tryConvertToPromise(value, this._promise); - if (!(maybePromise instanceof Promise)) { - maybePromise = - promiseFromYieldHandler(maybePromise, - this._yieldHandlers, - this._promise); - if (maybePromise === null) { - this._promiseRejected( - new TypeError( - "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", String(value)) + - "From coroutine:\u000a" + - this._stack.split("\n").slice(1, -7).join("\n") - ) - ); - return; - } - } - maybePromise = maybePromise._target(); - var bitField = maybePromise._bitField; - ; - if (((bitField & 50397184) === 0)) { - this._yieldedPromise = maybePromise; - maybePromise._proxy(this, null); - } else if (((bitField & 33554432) !== 0)) { - Promise._async.invoke( - this._promiseFulfilled, this, maybePromise._value() - ); - } else if (((bitField & 16777216) !== 0)) { - Promise._async.invoke( - this._promiseRejected, this, maybePromise._reason() - ); - } else { - this._promiseCancelled(); - } - } -}; - -Promise.coroutine = function (generatorFunction, options) { - if (typeof generatorFunction !== "function") { - throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - var yieldHandler = Object(options).yieldHandler; - var PromiseSpawn$ = PromiseSpawn; - var stack = new Error().stack; - return function () { - var generator = generatorFunction.apply(this, arguments); - var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, - stack); - var ret = spawn.promise(); - spawn._generator = generator; - spawn._promiseFulfilled(undefined); - return ret; - }; -}; - -Promise.coroutine.addYieldHandler = function(fn) { - if (typeof fn !== "function") { - throw new TypeError("expecting a function but got " + util.classString(fn)); - } - yieldHandlers.push(fn); -}; - -Promise.spawn = function (generatorFunction) { - debug.deprecated("Promise.spawn()", "Promise.coroutine()"); - if (typeof generatorFunction !== "function") { - return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - var spawn = new PromiseSpawn(generatorFunction, this); - var ret = spawn.promise(); - spawn._run(Promise.spawn); - return ret; -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/join.js b/truebit-implementation/node_modules/bluebird/js/release/join.js deleted file mode 100644 index 4945e3f7..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/join.js +++ /dev/null @@ -1,168 +0,0 @@ -"use strict"; -module.exports = -function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, - getDomain) { -var util = require("./util"); -var canEvaluate = util.canEvaluate; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var reject; - -if (!false) { -if (canEvaluate) { - var thenCallback = function(i) { - return new Function("value", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = value; \n\ - holder.checkFulfillment(this); \n\ - ".replace(/Index/g, i)); - }; - - var promiseSetter = function(i) { - return new Function("promise", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = promise; \n\ - ".replace(/Index/g, i)); - }; - - var generateHolderClass = function(total) { - var props = new Array(total); - for (var i = 0; i < props.length; ++i) { - props[i] = "this.p" + (i+1); - } - var assignment = props.join(" = ") + " = null;"; - var cancellationCode= "var promise;\n" + props.map(function(prop) { - return " \n\ - promise = " + prop + "; \n\ - if (promise instanceof Promise) { \n\ - promise.cancel(); \n\ - } \n\ - "; - }).join("\n"); - var passedArguments = props.join(", "); - var name = "Holder$" + total; - - - var code = "return function(tryCatch, errorObj, Promise, async) { \n\ - 'use strict'; \n\ - function [TheName](fn) { \n\ - [TheProperties] \n\ - this.fn = fn; \n\ - this.asyncNeeded = true; \n\ - this.now = 0; \n\ - } \n\ - \n\ - [TheName].prototype._callFunction = function(promise) { \n\ - promise._pushContext(); \n\ - var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ - promise._popContext(); \n\ - if (ret === errorObj) { \n\ - promise._rejectCallback(ret.e, false); \n\ - } else { \n\ - promise._resolveCallback(ret); \n\ - } \n\ - }; \n\ - \n\ - [TheName].prototype.checkFulfillment = function(promise) { \n\ - var now = ++this.now; \n\ - if (now === [TheTotal]) { \n\ - if (this.asyncNeeded) { \n\ - async.invoke(this._callFunction, this, promise); \n\ - } else { \n\ - this._callFunction(promise); \n\ - } \n\ - \n\ - } \n\ - }; \n\ - \n\ - [TheName].prototype._resultCancelled = function() { \n\ - [CancellationCode] \n\ - }; \n\ - \n\ - return [TheName]; \n\ - }(tryCatch, errorObj, Promise, async); \n\ - "; - - code = code.replace(/\[TheName\]/g, name) - .replace(/\[TheTotal\]/g, total) - .replace(/\[ThePassedArguments\]/g, passedArguments) - .replace(/\[TheProperties\]/g, assignment) - .replace(/\[CancellationCode\]/g, cancellationCode); - - return new Function("tryCatch", "errorObj", "Promise", "async", code) - (tryCatch, errorObj, Promise, async); - }; - - var holderClasses = []; - var thenCallbacks = []; - var promiseSetters = []; - - for (var i = 0; i < 8; ++i) { - holderClasses.push(generateHolderClass(i + 1)); - thenCallbacks.push(thenCallback(i + 1)); - promiseSetters.push(promiseSetter(i + 1)); - } - - reject = function (reason) { - this._reject(reason); - }; -}} - -Promise.join = function () { - var last = arguments.length - 1; - var fn; - if (last > 0 && typeof arguments[last] === "function") { - fn = arguments[last]; - if (!false) { - if (last <= 8 && canEvaluate) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var HolderClass = holderClasses[last - 1]; - var holder = new HolderClass(fn); - var callbacks = thenCallbacks; - - for (var i = 0; i < last; ++i) { - var maybePromise = tryConvertToPromise(arguments[i], ret); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - var bitField = maybePromise._bitField; - ; - if (((bitField & 50397184) === 0)) { - maybePromise._then(callbacks[i], reject, - undefined, ret, holder); - promiseSetters[i](maybePromise, holder); - holder.asyncNeeded = false; - } else if (((bitField & 33554432) !== 0)) { - callbacks[i].call(ret, - maybePromise._value(), holder); - } else if (((bitField & 16777216) !== 0)) { - ret._reject(maybePromise._reason()); - } else { - ret._cancel(); - } - } else { - callbacks[i].call(ret, maybePromise, holder); - } - } - - if (!ret._isFateSealed()) { - if (holder.asyncNeeded) { - var domain = getDomain(); - if (domain !== null) { - holder.fn = util.domainBind(domain, holder.fn); - } - } - ret._setAsyncGuaranteed(); - ret._setOnCancel(holder); - } - return ret; - } - } - } - var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}; - if (fn) args.pop(); - var ret = new PromiseArray(args).promise(); - return fn !== undefined ? ret.spread(fn) : ret; -}; - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/map.js b/truebit-implementation/node_modules/bluebird/js/release/map.js deleted file mode 100644 index 976f15ef..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/map.js +++ /dev/null @@ -1,168 +0,0 @@ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL, - debug) { -var getDomain = Promise._getDomain; -var util = require("./util"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var async = Promise._async; - -function MappingPromiseArray(promises, fn, limit, _filter) { - this.constructor$(promises); - this._promise._captureStackTrace(); - var domain = getDomain(); - this._callback = domain === null ? fn : util.domainBind(domain, fn); - this._preservedValues = _filter === INTERNAL - ? new Array(this.length()) - : null; - this._limit = limit; - this._inFlight = 0; - this._queue = []; - async.invoke(this._asyncInit, this, undefined); -} -util.inherits(MappingPromiseArray, PromiseArray); - -MappingPromiseArray.prototype._asyncInit = function() { - this._init$(undefined, -2); -}; - -MappingPromiseArray.prototype._init = function () {}; - -MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { - var values = this._values; - var length = this.length(); - var preservedValues = this._preservedValues; - var limit = this._limit; - - if (index < 0) { - index = (index * -1) - 1; - values[index] = value; - if (limit >= 1) { - this._inFlight--; - this._drainQueue(); - if (this._isResolved()) return true; - } - } else { - if (limit >= 1 && this._inFlight >= limit) { - values[index] = value; - this._queue.push(index); - return false; - } - if (preservedValues !== null) preservedValues[index] = value; - - var promise = this._promise; - var callback = this._callback; - var receiver = promise._boundValue(); - promise._pushContext(); - var ret = tryCatch(callback).call(receiver, value, index, length); - var promiseCreated = promise._popContext(); - debug.checkForgottenReturns( - ret, - promiseCreated, - preservedValues !== null ? "Promise.filter" : "Promise.map", - promise - ); - if (ret === errorObj) { - this._reject(ret.e); - return true; - } - - var maybePromise = tryConvertToPromise(ret, this._promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - var bitField = maybePromise._bitField; - ; - if (((bitField & 50397184) === 0)) { - if (limit >= 1) this._inFlight++; - values[index] = maybePromise; - maybePromise._proxy(this, (index + 1) * -1); - return false; - } else if (((bitField & 33554432) !== 0)) { - ret = maybePromise._value(); - } else if (((bitField & 16777216) !== 0)) { - this._reject(maybePromise._reason()); - return true; - } else { - this._cancel(); - return true; - } - } - values[index] = ret; - } - var totalResolved = ++this._totalResolved; - if (totalResolved >= length) { - if (preservedValues !== null) { - this._filter(values, preservedValues); - } else { - this._resolve(values); - } - return true; - } - return false; -}; - -MappingPromiseArray.prototype._drainQueue = function () { - var queue = this._queue; - var limit = this._limit; - var values = this._values; - while (queue.length > 0 && this._inFlight < limit) { - if (this._isResolved()) return; - var index = queue.pop(); - this._promiseFulfilled(values[index], index); - } -}; - -MappingPromiseArray.prototype._filter = function (booleans, values) { - var len = values.length; - var ret = new Array(len); - var j = 0; - for (var i = 0; i < len; ++i) { - if (booleans[i]) ret[j++] = values[i]; - } - ret.length = j; - this._resolve(ret); -}; - -MappingPromiseArray.prototype.preservedValues = function () { - return this._preservedValues; -}; - -function map(promises, fn, options, _filter) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - - var limit = 0; - if (options !== undefined) { - if (typeof options === "object" && options !== null) { - if (typeof options.concurrency !== "number") { - return Promise.reject( - new TypeError("'concurrency' must be a number but it is " + - util.classString(options.concurrency))); - } - limit = options.concurrency; - } else { - return Promise.reject(new TypeError( - "options argument must be an object but it is " + - util.classString(options))); - } - } - limit = typeof limit === "number" && - isFinite(limit) && limit >= 1 ? limit : 0; - return new MappingPromiseArray(promises, fn, limit, _filter).promise(); -} - -Promise.prototype.map = function (fn, options) { - return map(this, fn, options, null); -}; - -Promise.map = function (promises, fn, options, _filter) { - return map(promises, fn, options, _filter); -}; - - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/method.js b/truebit-implementation/node_modules/bluebird/js/release/method.js deleted file mode 100644 index ce9e4db7..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/method.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -module.exports = -function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { -var util = require("./util"); -var tryCatch = util.tryCatch; - -Promise.method = function (fn) { - if (typeof fn !== "function") { - throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); - } - return function () { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value = tryCatch(fn).apply(this, arguments); - var promiseCreated = ret._popContext(); - debug.checkForgottenReturns( - value, promiseCreated, "Promise.method", ret); - ret._resolveFromSyncValue(value); - return ret; - }; -}; - -Promise.attempt = Promise["try"] = function (fn) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value; - if (arguments.length > 1) { - debug.deprecated("calling Promise.try with more than 1 argument"); - var arg = arguments[1]; - var ctx = arguments[2]; - value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) - : tryCatch(fn).call(ctx, arg); - } else { - value = tryCatch(fn)(); - } - var promiseCreated = ret._popContext(); - debug.checkForgottenReturns( - value, promiseCreated, "Promise.try", ret); - ret._resolveFromSyncValue(value); - return ret; -}; - -Promise.prototype._resolveFromSyncValue = function (value) { - if (value === util.errorObj) { - this._rejectCallback(value.e, false); - } else { - this._resolveCallback(value, true); - } -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/nodeback.js b/truebit-implementation/node_modules/bluebird/js/release/nodeback.js deleted file mode 100644 index 71e69ebd..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/nodeback.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -var util = require("./util"); -var maybeWrapAsError = util.maybeWrapAsError; -var errors = require("./errors"); -var OperationalError = errors.OperationalError; -var es5 = require("./es5"); - -function isUntypedError(obj) { - return obj instanceof Error && - es5.getPrototypeOf(obj) === Error.prototype; -} - -var rErrorKey = /^(?:name|message|stack|cause)$/; -function wrapAsOperationalError(obj) { - var ret; - if (isUntypedError(obj)) { - ret = new OperationalError(obj); - ret.name = obj.name; - ret.message = obj.message; - ret.stack = obj.stack; - var keys = es5.keys(obj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (!rErrorKey.test(key)) { - ret[key] = obj[key]; - } - } - return ret; - } - util.markAsOriginatingFromRejection(obj); - return obj; -} - -function nodebackForPromise(promise, multiArgs) { - return function(err, value) { - if (promise === null) return; - if (err) { - var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); - promise._attachExtraTrace(wrapped); - promise._reject(wrapped); - } else if (!multiArgs) { - promise._fulfill(value); - } else { - var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}; - promise._fulfill(args); - } - promise = null; - }; -} - -module.exports = nodebackForPromise; diff --git a/truebit-implementation/node_modules/bluebird/js/release/nodeify.js b/truebit-implementation/node_modules/bluebird/js/release/nodeify.js deleted file mode 100644 index ce2b1900..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/nodeify.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -var util = require("./util"); -var async = Promise._async; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -function spreadAdapter(val, nodeback) { - var promise = this; - if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); - var ret = - tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -function successAdapter(val, nodeback) { - var promise = this; - var receiver = promise._boundValue(); - var ret = val === undefined - ? tryCatch(nodeback).call(receiver, null) - : tryCatch(nodeback).call(receiver, null, val); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} -function errorAdapter(reason, nodeback) { - var promise = this; - if (!reason) { - var newReason = new Error(reason + ""); - newReason.cause = reason; - reason = newReason; - } - var ret = tryCatch(nodeback).call(promise._boundValue(), reason); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, - options) { - if (typeof nodeback == "function") { - var adapter = successAdapter; - if (options !== undefined && Object(options).spread) { - adapter = spreadAdapter; - } - this._then( - adapter, - errorAdapter, - undefined, - this, - nodeback - ); - } - return this; -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/promise.js b/truebit-implementation/node_modules/bluebird/js/release/promise.js deleted file mode 100644 index f28d2f01..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/promise.js +++ /dev/null @@ -1,776 +0,0 @@ -"use strict"; -module.exports = function() { -var makeSelfResolutionError = function () { - return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); -}; -var reflectHandler = function() { - return new Promise.PromiseInspection(this._target()); -}; -var apiRejection = function(msg) { - return Promise.reject(new TypeError(msg)); -}; -function Proxyable() {} -var UNDEFINED_BINDING = {}; -var util = require("./util"); - -var getDomain; -if (util.isNode) { - getDomain = function() { - var ret = process.domain; - if (ret === undefined) ret = null; - return ret; - }; -} else { - getDomain = function() { - return null; - }; -} -util.notEnumerableProp(Promise, "_getDomain", getDomain); - -var es5 = require("./es5"); -var Async = require("./async"); -var async = new Async(); -es5.defineProperty(Promise, "_async", {value: async}); -var errors = require("./errors"); -var TypeError = Promise.TypeError = errors.TypeError; -Promise.RangeError = errors.RangeError; -var CancellationError = Promise.CancellationError = errors.CancellationError; -Promise.TimeoutError = errors.TimeoutError; -Promise.OperationalError = errors.OperationalError; -Promise.RejectionError = errors.OperationalError; -Promise.AggregateError = errors.AggregateError; -var INTERNAL = function(){}; -var APPLY = {}; -var NEXT_FILTER = {}; -var tryConvertToPromise = require("./thenables")(Promise, INTERNAL); -var PromiseArray = - require("./promise_array")(Promise, INTERNAL, - tryConvertToPromise, apiRejection, Proxyable); -var Context = require("./context")(Promise); - /*jshint unused:false*/ -var createContext = Context.create; -var debug = require("./debuggability")(Promise, Context); -var CapturedTrace = debug.CapturedTrace; -var PassThroughHandlerContext = - require("./finally")(Promise, tryConvertToPromise, NEXT_FILTER); -var catchFilter = require("./catch_filter")(NEXT_FILTER); -var nodebackForPromise = require("./nodeback"); -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; -function check(self, executor) { - if (self == null || self.constructor !== Promise) { - throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - if (typeof executor !== "function") { - throw new TypeError("expecting a function but got " + util.classString(executor)); - } - -} - -function Promise(executor) { - if (executor !== INTERNAL) { - check(this, executor); - } - this._bitField = 0; - this._fulfillmentHandler0 = undefined; - this._rejectionHandler0 = undefined; - this._promise0 = undefined; - this._receiver0 = undefined; - this._resolveFromExecutor(executor); - this._promiseCreated(); - this._fireEvent("promiseCreated", this); -} - -Promise.prototype.toString = function () { - return "[object Promise]"; -}; - -Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { - var len = arguments.length; - if (len > 1) { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (util.isObject(item)) { - catchInstances[j++] = item; - } else { - return apiRejection("Catch statement predicate: " + - "expecting an object but got " + util.classString(item)); - } - } - catchInstances.length = j; - fn = arguments[i]; - return this.then(undefined, catchFilter(catchInstances, fn, this)); - } - return this.then(undefined, fn); -}; - -Promise.prototype.reflect = function () { - return this._then(reflectHandler, - reflectHandler, undefined, this, undefined); -}; - -Promise.prototype.then = function (didFulfill, didReject) { - if (debug.warnings() && arguments.length > 0 && - typeof didFulfill !== "function" && - typeof didReject !== "function") { - var msg = ".then() only accepts functions but was passed: " + - util.classString(didFulfill); - if (arguments.length > 1) { - msg += ", " + util.classString(didReject); - } - this._warn(msg); - } - return this._then(didFulfill, didReject, undefined, undefined, undefined); -}; - -Promise.prototype.done = function (didFulfill, didReject) { - var promise = - this._then(didFulfill, didReject, undefined, undefined, undefined); - promise._setIsFinal(); -}; - -Promise.prototype.spread = function (fn) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - return this.all()._then(fn, undefined, undefined, APPLY, undefined); -}; - -Promise.prototype.toJSON = function () { - var ret = { - isFulfilled: false, - isRejected: false, - fulfillmentValue: undefined, - rejectionReason: undefined - }; - if (this.isFulfilled()) { - ret.fulfillmentValue = this.value(); - ret.isFulfilled = true; - } else if (this.isRejected()) { - ret.rejectionReason = this.reason(); - ret.isRejected = true; - } - return ret; -}; - -Promise.prototype.all = function () { - if (arguments.length > 0) { - this._warn(".all() was passed arguments but it does not take any"); - } - return new PromiseArray(this).promise(); -}; - -Promise.prototype.error = function (fn) { - return this.caught(util.originatesFromRejection, fn); -}; - -Promise.getNewLibraryCopy = module.exports; - -Promise.is = function (val) { - return val instanceof Promise; -}; - -Promise.fromNode = Promise.fromCallback = function(fn) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs - : false; - var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); - if (result === errorObj) { - ret._rejectCallback(result.e, true); - } - if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); - return ret; -}; - -Promise.all = function (promises) { - return new PromiseArray(promises).promise(); -}; - -Promise.cast = function (obj) { - var ret = tryConvertToPromise(obj); - if (!(ret instanceof Promise)) { - ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._setFulfilled(); - ret._rejectionHandler0 = obj; - } - return ret; -}; - -Promise.resolve = Promise.fulfilled = Promise.cast; - -Promise.reject = Promise.rejected = function (reason) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._rejectCallback(reason, true); - return ret; -}; - -Promise.setScheduler = function(fn) { - if (typeof fn !== "function") { - throw new TypeError("expecting a function but got " + util.classString(fn)); - } - return async.setScheduler(fn); -}; - -Promise.prototype._then = function ( - didFulfill, - didReject, - _, receiver, - internalData -) { - var haveInternalData = internalData !== undefined; - var promise = haveInternalData ? internalData : new Promise(INTERNAL); - var target = this._target(); - var bitField = target._bitField; - - if (!haveInternalData) { - promise._propagateFrom(this, 3); - promise._captureStackTrace(); - if (receiver === undefined && - ((this._bitField & 2097152) !== 0)) { - if (!((bitField & 50397184) === 0)) { - receiver = this._boundValue(); - } else { - receiver = target === this ? undefined : this._boundTo; - } - } - this._fireEvent("promiseChained", this, promise); - } - - var domain = getDomain(); - if (!((bitField & 50397184) === 0)) { - var handler, value, settler = target._settlePromiseCtx; - if (((bitField & 33554432) !== 0)) { - value = target._rejectionHandler0; - handler = didFulfill; - } else if (((bitField & 16777216) !== 0)) { - value = target._fulfillmentHandler0; - handler = didReject; - target._unsetRejectionIsUnhandled(); - } else { - settler = target._settlePromiseLateCancellationObserver; - value = new CancellationError("late cancellation observer"); - target._attachExtraTrace(value); - handler = didReject; - } - - async.invoke(settler, target, { - handler: domain === null ? handler - : (typeof handler === "function" && - util.domainBind(domain, handler)), - promise: promise, - receiver: receiver, - value: value - }); - } else { - target._addCallbacks(didFulfill, didReject, promise, receiver, domain); - } - - return promise; -}; - -Promise.prototype._length = function () { - return this._bitField & 65535; -}; - -Promise.prototype._isFateSealed = function () { - return (this._bitField & 117506048) !== 0; -}; - -Promise.prototype._isFollowing = function () { - return (this._bitField & 67108864) === 67108864; -}; - -Promise.prototype._setLength = function (len) { - this._bitField = (this._bitField & -65536) | - (len & 65535); -}; - -Promise.prototype._setFulfilled = function () { - this._bitField = this._bitField | 33554432; - this._fireEvent("promiseFulfilled", this); -}; - -Promise.prototype._setRejected = function () { - this._bitField = this._bitField | 16777216; - this._fireEvent("promiseRejected", this); -}; - -Promise.prototype._setFollowing = function () { - this._bitField = this._bitField | 67108864; - this._fireEvent("promiseResolved", this); -}; - -Promise.prototype._setIsFinal = function () { - this._bitField = this._bitField | 4194304; -}; - -Promise.prototype._isFinal = function () { - return (this._bitField & 4194304) > 0; -}; - -Promise.prototype._unsetCancelled = function() { - this._bitField = this._bitField & (~65536); -}; - -Promise.prototype._setCancelled = function() { - this._bitField = this._bitField | 65536; - this._fireEvent("promiseCancelled", this); -}; - -Promise.prototype._setWillBeCancelled = function() { - this._bitField = this._bitField | 8388608; -}; - -Promise.prototype._setAsyncGuaranteed = function() { - if (async.hasCustomScheduler()) return; - this._bitField = this._bitField | 134217728; -}; - -Promise.prototype._receiverAt = function (index) { - var ret = index === 0 ? this._receiver0 : this[ - index * 4 - 4 + 3]; - if (ret === UNDEFINED_BINDING) { - return undefined; - } else if (ret === undefined && this._isBound()) { - return this._boundValue(); - } - return ret; -}; - -Promise.prototype._promiseAt = function (index) { - return this[ - index * 4 - 4 + 2]; -}; - -Promise.prototype._fulfillmentHandlerAt = function (index) { - return this[ - index * 4 - 4 + 0]; -}; - -Promise.prototype._rejectionHandlerAt = function (index) { - return this[ - index * 4 - 4 + 1]; -}; - -Promise.prototype._boundValue = function() {}; - -Promise.prototype._migrateCallback0 = function (follower) { - var bitField = follower._bitField; - var fulfill = follower._fulfillmentHandler0; - var reject = follower._rejectionHandler0; - var promise = follower._promise0; - var receiver = follower._receiverAt(0); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, promise, receiver, null); -}; - -Promise.prototype._migrateCallbackAt = function (follower, index) { - var fulfill = follower._fulfillmentHandlerAt(index); - var reject = follower._rejectionHandlerAt(index); - var promise = follower._promiseAt(index); - var receiver = follower._receiverAt(index); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, promise, receiver, null); -}; - -Promise.prototype._addCallbacks = function ( - fulfill, - reject, - promise, - receiver, - domain -) { - var index = this._length(); - - if (index >= 65535 - 4) { - index = 0; - this._setLength(0); - } - - if (index === 0) { - this._promise0 = promise; - this._receiver0 = receiver; - if (typeof fulfill === "function") { - this._fulfillmentHandler0 = - domain === null ? fulfill : util.domainBind(domain, fulfill); - } - if (typeof reject === "function") { - this._rejectionHandler0 = - domain === null ? reject : util.domainBind(domain, reject); - } - } else { - var base = index * 4 - 4; - this[base + 2] = promise; - this[base + 3] = receiver; - if (typeof fulfill === "function") { - this[base + 0] = - domain === null ? fulfill : util.domainBind(domain, fulfill); - } - if (typeof reject === "function") { - this[base + 1] = - domain === null ? reject : util.domainBind(domain, reject); - } - } - this._setLength(index + 1); - return index; -}; - -Promise.prototype._proxy = function (proxyable, arg) { - this._addCallbacks(undefined, undefined, arg, proxyable, null); -}; - -Promise.prototype._resolveCallback = function(value, shouldBind) { - if (((this._bitField & 117506048) !== 0)) return; - if (value === this) - return this._rejectCallback(makeSelfResolutionError(), false); - var maybePromise = tryConvertToPromise(value, this); - if (!(maybePromise instanceof Promise)) return this._fulfill(value); - - if (shouldBind) this._propagateFrom(maybePromise, 2); - - var promise = maybePromise._target(); - - if (promise === this) { - this._reject(makeSelfResolutionError()); - return; - } - - var bitField = promise._bitField; - if (((bitField & 50397184) === 0)) { - var len = this._length(); - if (len > 0) promise._migrateCallback0(this); - for (var i = 1; i < len; ++i) { - promise._migrateCallbackAt(this, i); - } - this._setFollowing(); - this._setLength(0); - this._setFollowee(promise); - } else if (((bitField & 33554432) !== 0)) { - this._fulfill(promise._value()); - } else if (((bitField & 16777216) !== 0)) { - this._reject(promise._reason()); - } else { - var reason = new CancellationError("late cancellation observer"); - promise._attachExtraTrace(reason); - this._reject(reason); - } -}; - -Promise.prototype._rejectCallback = -function(reason, synchronous, ignoreNonErrorWarnings) { - var trace = util.ensureErrorObject(reason); - var hasStack = trace === reason; - if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { - var message = "a promise was rejected with a non-error: " + - util.classString(reason); - this._warn(message, true); - } - this._attachExtraTrace(trace, synchronous ? hasStack : false); - this._reject(reason); -}; - -Promise.prototype._resolveFromExecutor = function (executor) { - if (executor === INTERNAL) return; - var promise = this; - this._captureStackTrace(); - this._pushContext(); - var synchronous = true; - var r = this._execute(executor, function(value) { - promise._resolveCallback(value); - }, function (reason) { - promise._rejectCallback(reason, synchronous); - }); - synchronous = false; - this._popContext(); - - if (r !== undefined) { - promise._rejectCallback(r, true); - } -}; - -Promise.prototype._settlePromiseFromHandler = function ( - handler, receiver, value, promise -) { - var bitField = promise._bitField; - if (((bitField & 65536) !== 0)) return; - promise._pushContext(); - var x; - if (receiver === APPLY) { - if (!value || typeof value.length !== "number") { - x = errorObj; - x.e = new TypeError("cannot .spread() a non-array: " + - util.classString(value)); - } else { - x = tryCatch(handler).apply(this._boundValue(), value); - } - } else { - x = tryCatch(handler).call(receiver, value); - } - var promiseCreated = promise._popContext(); - bitField = promise._bitField; - if (((bitField & 65536) !== 0)) return; - - if (x === NEXT_FILTER) { - promise._reject(value); - } else if (x === errorObj) { - promise._rejectCallback(x.e, false); - } else { - debug.checkForgottenReturns(x, promiseCreated, "", promise, this); - promise._resolveCallback(x); - } -}; - -Promise.prototype._target = function() { - var ret = this; - while (ret._isFollowing()) ret = ret._followee(); - return ret; -}; - -Promise.prototype._followee = function() { - return this._rejectionHandler0; -}; - -Promise.prototype._setFollowee = function(promise) { - this._rejectionHandler0 = promise; -}; - -Promise.prototype._settlePromise = function(promise, handler, receiver, value) { - var isPromise = promise instanceof Promise; - var bitField = this._bitField; - var asyncGuaranteed = ((bitField & 134217728) !== 0); - if (((bitField & 65536) !== 0)) { - if (isPromise) promise._invokeInternalOnCancel(); - - if (receiver instanceof PassThroughHandlerContext && - receiver.isFinallyHandler()) { - receiver.cancelPromise = promise; - if (tryCatch(handler).call(receiver, value) === errorObj) { - promise._reject(errorObj.e); - } - } else if (handler === reflectHandler) { - promise._fulfill(reflectHandler.call(receiver)); - } else if (receiver instanceof Proxyable) { - receiver._promiseCancelled(promise); - } else if (isPromise || promise instanceof PromiseArray) { - promise._cancel(); - } else { - receiver.cancel(); - } - } else if (typeof handler === "function") { - if (!isPromise) { - handler.call(receiver, value, promise); - } else { - if (asyncGuaranteed) promise._setAsyncGuaranteed(); - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (receiver instanceof Proxyable) { - if (!receiver._isResolved()) { - if (((bitField & 33554432) !== 0)) { - receiver._promiseFulfilled(value, promise); - } else { - receiver._promiseRejected(value, promise); - } - } - } else if (isPromise) { - if (asyncGuaranteed) promise._setAsyncGuaranteed(); - if (((bitField & 33554432) !== 0)) { - promise._fulfill(value); - } else { - promise._reject(value); - } - } -}; - -Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { - var handler = ctx.handler; - var promise = ctx.promise; - var receiver = ctx.receiver; - var value = ctx.value; - if (typeof handler === "function") { - if (!(promise instanceof Promise)) { - handler.call(receiver, value, promise); - } else { - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (promise instanceof Promise) { - promise._reject(value); - } -}; - -Promise.prototype._settlePromiseCtx = function(ctx) { - this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); -}; - -Promise.prototype._settlePromise0 = function(handler, value, bitField) { - var promise = this._promise0; - var receiver = this._receiverAt(0); - this._promise0 = undefined; - this._receiver0 = undefined; - this._settlePromise(promise, handler, receiver, value); -}; - -Promise.prototype._clearCallbackDataAtIndex = function(index) { - var base = index * 4 - 4; - this[base + 2] = - this[base + 3] = - this[base + 0] = - this[base + 1] = undefined; -}; - -Promise.prototype._fulfill = function (value) { - var bitField = this._bitField; - if (((bitField & 117506048) >>> 16)) return; - if (value === this) { - var err = makeSelfResolutionError(); - this._attachExtraTrace(err); - return this._reject(err); - } - this._setFulfilled(); - this._rejectionHandler0 = value; - - if ((bitField & 65535) > 0) { - if (((bitField & 134217728) !== 0)) { - this._settlePromises(); - } else { - async.settlePromises(this); - } - this._dereferenceTrace(); - } -}; - -Promise.prototype._reject = function (reason) { - var bitField = this._bitField; - if (((bitField & 117506048) >>> 16)) return; - this._setRejected(); - this._fulfillmentHandler0 = reason; - - if (this._isFinal()) { - return async.fatalError(reason, util.isNode); - } - - if ((bitField & 65535) > 0) { - async.settlePromises(this); - } else { - this._ensurePossibleRejectionHandled(); - } -}; - -Promise.prototype._fulfillPromises = function (len, value) { - for (var i = 1; i < len; i++) { - var handler = this._fulfillmentHandlerAt(i); - var promise = this._promiseAt(i); - var receiver = this._receiverAt(i); - this._clearCallbackDataAtIndex(i); - this._settlePromise(promise, handler, receiver, value); - } -}; - -Promise.prototype._rejectPromises = function (len, reason) { - for (var i = 1; i < len; i++) { - var handler = this._rejectionHandlerAt(i); - var promise = this._promiseAt(i); - var receiver = this._receiverAt(i); - this._clearCallbackDataAtIndex(i); - this._settlePromise(promise, handler, receiver, reason); - } -}; - -Promise.prototype._settlePromises = function () { - var bitField = this._bitField; - var len = (bitField & 65535); - - if (len > 0) { - if (((bitField & 16842752) !== 0)) { - var reason = this._fulfillmentHandler0; - this._settlePromise0(this._rejectionHandler0, reason, bitField); - this._rejectPromises(len, reason); - } else { - var value = this._rejectionHandler0; - this._settlePromise0(this._fulfillmentHandler0, value, bitField); - this._fulfillPromises(len, value); - } - this._setLength(0); - } - this._clearCancellationData(); -}; - -Promise.prototype._settledValue = function() { - var bitField = this._bitField; - if (((bitField & 33554432) !== 0)) { - return this._rejectionHandler0; - } else if (((bitField & 16777216) !== 0)) { - return this._fulfillmentHandler0; - } -}; - -function deferResolve(v) {this.promise._resolveCallback(v);} -function deferReject(v) {this.promise._rejectCallback(v, false);} - -Promise.defer = Promise.pending = function() { - debug.deprecated("Promise.defer", "new Promise"); - var promise = new Promise(INTERNAL); - return { - promise: promise, - resolve: deferResolve, - reject: deferReject - }; -}; - -util.notEnumerableProp(Promise, - "_makeSelfResolutionError", - makeSelfResolutionError); - -require("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, - debug); -require("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); -require("./cancel")(Promise, PromiseArray, apiRejection, debug); -require("./direct_resolve")(Promise); -require("./synchronous_inspection")(Promise); -require("./join")( - Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); -Promise.Promise = Promise; -Promise.version = "3.5.3"; -require('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); -require('./call_get.js')(Promise); -require('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug); -require('./timers.js')(Promise, INTERNAL, debug); -require('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug); -require('./nodeify.js')(Promise); -require('./promisify.js')(Promise, INTERNAL); -require('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); -require('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); -require('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); -require('./settle.js')(Promise, PromiseArray, debug); -require('./some.js')(Promise, PromiseArray, apiRejection); -require('./filter.js')(Promise, INTERNAL); -require('./each.js')(Promise, INTERNAL); -require('./any.js')(Promise); - - util.toFastProperties(Promise); - util.toFastProperties(Promise.prototype); - function fillTypes(value) { - var p = new Promise(INTERNAL); - p._fulfillmentHandler0 = value; - p._rejectionHandler0 = value; - p._promise0 = value; - p._receiver0 = value; - } - // Complete slack tracking, opt out of field-type tracking and - // stabilize map - fillTypes({a: 1}); - fillTypes({b: 2}); - fillTypes({c: 3}); - fillTypes(1); - fillTypes(function(){}); - fillTypes(undefined); - fillTypes(false); - fillTypes(new Promise(INTERNAL)); - debug.setBounds(Async.firstLineError, util.lastLineError); - return Promise; - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/promise_array.js b/truebit-implementation/node_modules/bluebird/js/release/promise_array.js deleted file mode 100644 index 0fb303eb..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/promise_array.js +++ /dev/null @@ -1,185 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, - apiRejection, Proxyable) { -var util = require("./util"); -var isArray = util.isArray; - -function toResolutionValue(val) { - switch(val) { - case -2: return []; - case -3: return {}; - case -6: return new Map(); - } -} - -function PromiseArray(values) { - var promise = this._promise = new Promise(INTERNAL); - if (values instanceof Promise) { - promise._propagateFrom(values, 3); - } - promise._setOnCancel(this); - this._values = values; - this._length = 0; - this._totalResolved = 0; - this._init(undefined, -2); -} -util.inherits(PromiseArray, Proxyable); - -PromiseArray.prototype.length = function () { - return this._length; -}; - -PromiseArray.prototype.promise = function () { - return this._promise; -}; - -PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { - var values = tryConvertToPromise(this._values, this._promise); - if (values instanceof Promise) { - values = values._target(); - var bitField = values._bitField; - ; - this._values = values; - - if (((bitField & 50397184) === 0)) { - this._promise._setAsyncGuaranteed(); - return values._then( - init, - this._reject, - undefined, - this, - resolveValueIfEmpty - ); - } else if (((bitField & 33554432) !== 0)) { - values = values._value(); - } else if (((bitField & 16777216) !== 0)) { - return this._reject(values._reason()); - } else { - return this._cancel(); - } - } - values = util.asArray(values); - if (values === null) { - var err = apiRejection( - "expecting an array or an iterable object but got " + util.classString(values)).reason(); - this._promise._rejectCallback(err, false); - return; - } - - if (values.length === 0) { - if (resolveValueIfEmpty === -5) { - this._resolveEmptyArray(); - } - else { - this._resolve(toResolutionValue(resolveValueIfEmpty)); - } - return; - } - this._iterate(values); -}; - -PromiseArray.prototype._iterate = function(values) { - var len = this.getActualLength(values.length); - this._length = len; - this._values = this.shouldCopyValues() ? new Array(len) : this._values; - var result = this._promise; - var isResolved = false; - var bitField = null; - for (var i = 0; i < len; ++i) { - var maybePromise = tryConvertToPromise(values[i], result); - - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - bitField = maybePromise._bitField; - } else { - bitField = null; - } - - if (isResolved) { - if (bitField !== null) { - maybePromise.suppressUnhandledRejections(); - } - } else if (bitField !== null) { - if (((bitField & 50397184) === 0)) { - maybePromise._proxy(this, i); - this._values[i] = maybePromise; - } else if (((bitField & 33554432) !== 0)) { - isResolved = this._promiseFulfilled(maybePromise._value(), i); - } else if (((bitField & 16777216) !== 0)) { - isResolved = this._promiseRejected(maybePromise._reason(), i); - } else { - isResolved = this._promiseCancelled(i); - } - } else { - isResolved = this._promiseFulfilled(maybePromise, i); - } - } - if (!isResolved) result._setAsyncGuaranteed(); -}; - -PromiseArray.prototype._isResolved = function () { - return this._values === null; -}; - -PromiseArray.prototype._resolve = function (value) { - this._values = null; - this._promise._fulfill(value); -}; - -PromiseArray.prototype._cancel = function() { - if (this._isResolved() || !this._promise._isCancellable()) return; - this._values = null; - this._promise._cancel(); -}; - -PromiseArray.prototype._reject = function (reason) { - this._values = null; - this._promise._rejectCallback(reason, false); -}; - -PromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - this._resolve(this._values); - return true; - } - return false; -}; - -PromiseArray.prototype._promiseCancelled = function() { - this._cancel(); - return true; -}; - -PromiseArray.prototype._promiseRejected = function (reason) { - this._totalResolved++; - this._reject(reason); - return true; -}; - -PromiseArray.prototype._resultCancelled = function() { - if (this._isResolved()) return; - var values = this._values; - this._cancel(); - if (values instanceof Promise) { - values.cancel(); - } else { - for (var i = 0; i < values.length; ++i) { - if (values[i] instanceof Promise) { - values[i].cancel(); - } - } - } -}; - -PromiseArray.prototype.shouldCopyValues = function () { - return true; -}; - -PromiseArray.prototype.getActualLength = function (len) { - return len; -}; - -return PromiseArray; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/promisify.js b/truebit-implementation/node_modules/bluebird/js/release/promisify.js deleted file mode 100644 index aa98e5bd..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/promisify.js +++ /dev/null @@ -1,314 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var THIS = {}; -var util = require("./util"); -var nodebackForPromise = require("./nodeback"); -var withAppended = util.withAppended; -var maybeWrapAsError = util.maybeWrapAsError; -var canEvaluate = util.canEvaluate; -var TypeError = require("./errors").TypeError; -var defaultSuffix = "Async"; -var defaultPromisified = {__isPromisified__: true}; -var noCopyProps = [ - "arity", "length", - "name", - "arguments", - "caller", - "callee", - "prototype", - "__isPromisified__" -]; -var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); - -var defaultFilter = function(name) { - return util.isIdentifier(name) && - name.charAt(0) !== "_" && - name !== "constructor"; -}; - -function propsFilter(key) { - return !noCopyPropsPattern.test(key); -} - -function isPromisified(fn) { - try { - return fn.__isPromisified__ === true; - } - catch (e) { - return false; - } -} - -function hasPromisified(obj, key, suffix) { - var val = util.getDataPropertyOrDefault(obj, key + suffix, - defaultPromisified); - return val ? isPromisified(val) : false; -} -function checkValid(ret, suffix, suffixRegexp) { - for (var i = 0; i < ret.length; i += 2) { - var key = ret[i]; - if (suffixRegexp.test(key)) { - var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); - for (var j = 0; j < ret.length; j += 2) { - if (ret[j] === keyWithoutAsyncSuffix) { - throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a" - .replace("%s", suffix)); - } - } - } - } -} - -function promisifiableMethods(obj, suffix, suffixRegexp, filter) { - var keys = util.inheritedDataKeys(obj); - var ret = []; - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var value = obj[key]; - var passesDefaultFilter = filter === defaultFilter - ? true : defaultFilter(key, value, obj); - if (typeof value === "function" && - !isPromisified(value) && - !hasPromisified(obj, key, suffix) && - filter(key, value, obj, passesDefaultFilter)) { - ret.push(key, value); - } - } - checkValid(ret, suffix, suffixRegexp); - return ret; -} - -var escapeIdentRegex = function(str) { - return str.replace(/([$])/, "\\$"); -}; - -var makeNodePromisifiedEval; -if (!false) { -var switchCaseArgumentOrder = function(likelyArgumentCount) { - var ret = [likelyArgumentCount]; - var min = Math.max(0, likelyArgumentCount - 1 - 3); - for(var i = likelyArgumentCount - 1; i >= min; --i) { - ret.push(i); - } - for(var i = likelyArgumentCount + 1; i <= 3; ++i) { - ret.push(i); - } - return ret; -}; - -var argumentSequence = function(argumentCount) { - return util.filledRange(argumentCount, "_arg", ""); -}; - -var parameterDeclaration = function(parameterCount) { - return util.filledRange( - Math.max(parameterCount, 3), "_arg", ""); -}; - -var parameterCount = function(fn) { - if (typeof fn.length === "number") { - return Math.max(Math.min(fn.length, 1023 + 1), 0); - } - return 0; -}; - -makeNodePromisifiedEval = -function(callback, receiver, originalName, fn, _, multiArgs) { - var newParameterCount = Math.max(0, parameterCount(fn) - 1); - var argumentOrder = switchCaseArgumentOrder(newParameterCount); - var shouldProxyThis = typeof callback === "string" || receiver === THIS; - - function generateCallForArgumentCount(count) { - var args = argumentSequence(count).join(", "); - var comma = count > 0 ? ", " : ""; - var ret; - if (shouldProxyThis) { - ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; - } else { - ret = receiver === undefined - ? "ret = callback({{args}}, nodeback); break;\n" - : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; - } - return ret.replace("{{args}}", args).replace(", ", comma); - } - - function generateArgumentSwitchCase() { - var ret = ""; - for (var i = 0; i < argumentOrder.length; ++i) { - ret += "case " + argumentOrder[i] +":" + - generateCallForArgumentCount(argumentOrder[i]); - } - - ret += " \n\ - default: \n\ - var args = new Array(len + 1); \n\ - var i = 0; \n\ - for (var i = 0; i < len; ++i) { \n\ - args[i] = arguments[i]; \n\ - } \n\ - args[i] = nodeback; \n\ - [CodeForCall] \n\ - break; \n\ - ".replace("[CodeForCall]", (shouldProxyThis - ? "ret = callback.apply(this, args);\n" - : "ret = callback.apply(receiver, args);\n")); - return ret; - } - - var getFunctionCode = typeof callback === "string" - ? ("this != null ? this['"+callback+"'] : fn") - : "fn"; - var body = "'use strict'; \n\ - var ret = function (Parameters) { \n\ - 'use strict'; \n\ - var len = arguments.length; \n\ - var promise = new Promise(INTERNAL); \n\ - promise._captureStackTrace(); \n\ - var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ - var ret; \n\ - var callback = tryCatch([GetFunctionCode]); \n\ - switch(len) { \n\ - [CodeForSwitchCase] \n\ - } \n\ - if (ret === errorObj) { \n\ - promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ - } \n\ - if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ - return promise; \n\ - }; \n\ - notEnumerableProp(ret, '__isPromisified__', true); \n\ - return ret; \n\ - ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) - .replace("[GetFunctionCode]", getFunctionCode); - body = body.replace("Parameters", parameterDeclaration(newParameterCount)); - return new Function("Promise", - "fn", - "receiver", - "withAppended", - "maybeWrapAsError", - "nodebackForPromise", - "tryCatch", - "errorObj", - "notEnumerableProp", - "INTERNAL", - body)( - Promise, - fn, - receiver, - withAppended, - maybeWrapAsError, - nodebackForPromise, - util.tryCatch, - util.errorObj, - util.notEnumerableProp, - INTERNAL); -}; -} - -function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { - var defaultThis = (function() {return this;})(); - var method = callback; - if (typeof method === "string") { - callback = fn; - } - function promisified() { - var _receiver = receiver; - if (receiver === THIS) _receiver = this; - var promise = new Promise(INTERNAL); - promise._captureStackTrace(); - var cb = typeof method === "string" && this !== defaultThis - ? this[method] : callback; - var fn = nodebackForPromise(promise, multiArgs); - try { - cb.apply(_receiver, withAppended(arguments, fn)); - } catch(e) { - promise._rejectCallback(maybeWrapAsError(e), true, true); - } - if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); - return promise; - } - util.notEnumerableProp(promisified, "__isPromisified__", true); - return promisified; -} - -var makeNodePromisified = canEvaluate - ? makeNodePromisifiedEval - : makeNodePromisifiedClosure; - -function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { - var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); - var methods = - promisifiableMethods(obj, suffix, suffixRegexp, filter); - - for (var i = 0, len = methods.length; i < len; i+= 2) { - var key = methods[i]; - var fn = methods[i+1]; - var promisifiedKey = key + suffix; - if (promisifier === makeNodePromisified) { - obj[promisifiedKey] = - makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); - } else { - var promisified = promisifier(fn, function() { - return makeNodePromisified(key, THIS, key, - fn, suffix, multiArgs); - }); - util.notEnumerableProp(promisified, "__isPromisified__", true); - obj[promisifiedKey] = promisified; - } - } - util.toFastProperties(obj); - return obj; -} - -function promisify(callback, receiver, multiArgs) { - return makeNodePromisified(callback, receiver, undefined, - callback, null, multiArgs); -} - -Promise.promisify = function (fn, options) { - if (typeof fn !== "function") { - throw new TypeError("expecting a function but got " + util.classString(fn)); - } - if (isPromisified(fn)) { - return fn; - } - options = Object(options); - var receiver = options.context === undefined ? THIS : options.context; - var multiArgs = !!options.multiArgs; - var ret = promisify(fn, receiver, multiArgs); - util.copyDescriptors(fn, ret, propsFilter); - return ret; -}; - -Promise.promisifyAll = function (target, options) { - if (typeof target !== "function" && typeof target !== "object") { - throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - options = Object(options); - var multiArgs = !!options.multiArgs; - var suffix = options.suffix; - if (typeof suffix !== "string") suffix = defaultSuffix; - var filter = options.filter; - if (typeof filter !== "function") filter = defaultFilter; - var promisifier = options.promisifier; - if (typeof promisifier !== "function") promisifier = makeNodePromisified; - - if (!util.isIdentifier(suffix)) { - throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - - var keys = util.inheritedDataKeys(target); - for (var i = 0; i < keys.length; ++i) { - var value = target[keys[i]]; - if (keys[i] !== "constructor" && - util.isClass(value)) { - promisifyAll(value.prototype, suffix, filter, promisifier, - multiArgs); - promisifyAll(value, suffix, filter, promisifier, multiArgs); - } - } - - return promisifyAll(target, suffix, filter, promisifier, multiArgs); -}; -}; - diff --git a/truebit-implementation/node_modules/bluebird/js/release/props.js b/truebit-implementation/node_modules/bluebird/js/release/props.js deleted file mode 100644 index 6a34aaf5..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/props.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; -module.exports = function( - Promise, PromiseArray, tryConvertToPromise, apiRejection) { -var util = require("./util"); -var isObject = util.isObject; -var es5 = require("./es5"); -var Es6Map; -if (typeof Map === "function") Es6Map = Map; - -var mapToEntries = (function() { - var index = 0; - var size = 0; - - function extractEntry(value, key) { - this[index] = value; - this[index + size] = key; - index++; - } - - return function mapToEntries(map) { - size = map.size; - index = 0; - var ret = new Array(map.size * 2); - map.forEach(extractEntry, ret); - return ret; - }; -})(); - -var entriesToMap = function(entries) { - var ret = new Es6Map(); - var length = entries.length / 2 | 0; - for (var i = 0; i < length; ++i) { - var key = entries[length + i]; - var value = entries[i]; - ret.set(key, value); - } - return ret; -}; - -function PropertiesPromiseArray(obj) { - var isMap = false; - var entries; - if (Es6Map !== undefined && obj instanceof Es6Map) { - entries = mapToEntries(obj); - isMap = true; - } else { - var keys = es5.keys(obj); - var len = keys.length; - entries = new Array(len * 2); - for (var i = 0; i < len; ++i) { - var key = keys[i]; - entries[i] = obj[key]; - entries[i + len] = key; - } - } - this.constructor$(entries); - this._isMap = isMap; - this._init$(undefined, isMap ? -6 : -3); -} -util.inherits(PropertiesPromiseArray, PromiseArray); - -PropertiesPromiseArray.prototype._init = function () {}; - -PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - var val; - if (this._isMap) { - val = entriesToMap(this._values); - } else { - val = {}; - var keyOffset = this.length(); - for (var i = 0, len = this.length(); i < len; ++i) { - val[this._values[i + keyOffset]] = this._values[i]; - } - } - this._resolve(val); - return true; - } - return false; -}; - -PropertiesPromiseArray.prototype.shouldCopyValues = function () { - return false; -}; - -PropertiesPromiseArray.prototype.getActualLength = function (len) { - return len >> 1; -}; - -function props(promises) { - var ret; - var castValue = tryConvertToPromise(promises); - - if (!isObject(castValue)) { - return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } else if (castValue instanceof Promise) { - ret = castValue._then( - Promise.props, undefined, undefined, undefined, undefined); - } else { - ret = new PropertiesPromiseArray(castValue).promise(); - } - - if (castValue instanceof Promise) { - ret._propagateFrom(castValue, 2); - } - return ret; -} - -Promise.prototype.props = function () { - return props(this); -}; - -Promise.props = function (promises) { - return props(promises); -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/queue.js b/truebit-implementation/node_modules/bluebird/js/release/queue.js deleted file mode 100644 index ffd36fda..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/queue.js +++ /dev/null @@ -1,73 +0,0 @@ -"use strict"; -function arrayMove(src, srcIndex, dst, dstIndex, len) { - for (var j = 0; j < len; ++j) { - dst[j + dstIndex] = src[j + srcIndex]; - src[j + srcIndex] = void 0; - } -} - -function Queue(capacity) { - this._capacity = capacity; - this._length = 0; - this._front = 0; -} - -Queue.prototype._willBeOverCapacity = function (size) { - return this._capacity < size; -}; - -Queue.prototype._pushOne = function (arg) { - var length = this.length(); - this._checkCapacity(length + 1); - var i = (this._front + length) & (this._capacity - 1); - this[i] = arg; - this._length = length + 1; -}; - -Queue.prototype.push = function (fn, receiver, arg) { - var length = this.length() + 3; - if (this._willBeOverCapacity(length)) { - this._pushOne(fn); - this._pushOne(receiver); - this._pushOne(arg); - return; - } - var j = this._front + length - 3; - this._checkCapacity(length); - var wrapMask = this._capacity - 1; - this[(j + 0) & wrapMask] = fn; - this[(j + 1) & wrapMask] = receiver; - this[(j + 2) & wrapMask] = arg; - this._length = length; -}; - -Queue.prototype.shift = function () { - var front = this._front, - ret = this[front]; - - this[front] = undefined; - this._front = (front + 1) & (this._capacity - 1); - this._length--; - return ret; -}; - -Queue.prototype.length = function () { - return this._length; -}; - -Queue.prototype._checkCapacity = function (size) { - if (this._capacity < size) { - this._resizeTo(this._capacity << 1); - } -}; - -Queue.prototype._resizeTo = function (capacity) { - var oldCapacity = this._capacity; - this._capacity = capacity; - var front = this._front; - var length = this._length; - var moveItemsCount = (front + length) & (oldCapacity - 1); - arrayMove(this, 0, this, oldCapacity, moveItemsCount); -}; - -module.exports = Queue; diff --git a/truebit-implementation/node_modules/bluebird/js/release/race.js b/truebit-implementation/node_modules/bluebird/js/release/race.js deleted file mode 100644 index b862f46d..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/race.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -module.exports = function( - Promise, INTERNAL, tryConvertToPromise, apiRejection) { -var util = require("./util"); - -var raceLater = function (promise) { - return promise.then(function(array) { - return race(array, promise); - }); -}; - -function race(promises, parent) { - var maybePromise = tryConvertToPromise(promises); - - if (maybePromise instanceof Promise) { - return raceLater(maybePromise); - } else { - promises = util.asArray(promises); - if (promises === null) - return apiRejection("expecting an array or an iterable object but got " + util.classString(promises)); - } - - var ret = new Promise(INTERNAL); - if (parent !== undefined) { - ret._propagateFrom(parent, 3); - } - var fulfill = ret._fulfill; - var reject = ret._reject; - for (var i = 0, len = promises.length; i < len; ++i) { - var val = promises[i]; - - if (val === undefined && !(i in promises)) { - continue; - } - - Promise.cast(val)._then(fulfill, reject, undefined, ret, null); - } - return ret; -} - -Promise.race = function (promises) { - return race(promises, undefined); -}; - -Promise.prototype.race = function () { - return race(this, undefined); -}; - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/reduce.js b/truebit-implementation/node_modules/bluebird/js/release/reduce.js deleted file mode 100644 index 26e2b1a9..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/reduce.js +++ /dev/null @@ -1,172 +0,0 @@ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL, - debug) { -var getDomain = Promise._getDomain; -var util = require("./util"); -var tryCatch = util.tryCatch; - -function ReductionPromiseArray(promises, fn, initialValue, _each) { - this.constructor$(promises); - var domain = getDomain(); - this._fn = domain === null ? fn : util.domainBind(domain, fn); - if (initialValue !== undefined) { - initialValue = Promise.resolve(initialValue); - initialValue._attachCancellationCallback(this); - } - this._initialValue = initialValue; - this._currentCancellable = null; - if(_each === INTERNAL) { - this._eachValues = Array(this._length); - } else if (_each === 0) { - this._eachValues = null; - } else { - this._eachValues = undefined; - } - this._promise._captureStackTrace(); - this._init$(undefined, -5); -} -util.inherits(ReductionPromiseArray, PromiseArray); - -ReductionPromiseArray.prototype._gotAccum = function(accum) { - if (this._eachValues !== undefined && - this._eachValues !== null && - accum !== INTERNAL) { - this._eachValues.push(accum); - } -}; - -ReductionPromiseArray.prototype._eachComplete = function(value) { - if (this._eachValues !== null) { - this._eachValues.push(value); - } - return this._eachValues; -}; - -ReductionPromiseArray.prototype._init = function() {}; - -ReductionPromiseArray.prototype._resolveEmptyArray = function() { - this._resolve(this._eachValues !== undefined ? this._eachValues - : this._initialValue); -}; - -ReductionPromiseArray.prototype.shouldCopyValues = function () { - return false; -}; - -ReductionPromiseArray.prototype._resolve = function(value) { - this._promise._resolveCallback(value); - this._values = null; -}; - -ReductionPromiseArray.prototype._resultCancelled = function(sender) { - if (sender === this._initialValue) return this._cancel(); - if (this._isResolved()) return; - this._resultCancelled$(); - if (this._currentCancellable instanceof Promise) { - this._currentCancellable.cancel(); - } - if (this._initialValue instanceof Promise) { - this._initialValue.cancel(); - } -}; - -ReductionPromiseArray.prototype._iterate = function (values) { - this._values = values; - var value; - var i; - var length = values.length; - if (this._initialValue !== undefined) { - value = this._initialValue; - i = 0; - } else { - value = Promise.resolve(values[0]); - i = 1; - } - - this._currentCancellable = value; - - if (!value.isRejected()) { - for (; i < length; ++i) { - var ctx = { - accum: null, - value: values[i], - index: i, - length: length, - array: this - }; - value = value._then(gotAccum, undefined, undefined, ctx, undefined); - } - } - - if (this._eachValues !== undefined) { - value = value - ._then(this._eachComplete, undefined, undefined, this, undefined); - } - value._then(completed, completed, undefined, value, this); -}; - -Promise.prototype.reduce = function (fn, initialValue) { - return reduce(this, fn, initialValue, null); -}; - -Promise.reduce = function (promises, fn, initialValue, _each) { - return reduce(promises, fn, initialValue, _each); -}; - -function completed(valueOrReason, array) { - if (this.isFulfilled()) { - array._resolve(valueOrReason); - } else { - array._reject(valueOrReason); - } -} - -function reduce(promises, fn, initialValue, _each) { - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - var array = new ReductionPromiseArray(promises, fn, initialValue, _each); - return array.promise(); -} - -function gotAccum(accum) { - this.accum = accum; - this.array._gotAccum(accum); - var value = tryConvertToPromise(this.value, this.array._promise); - if (value instanceof Promise) { - this.array._currentCancellable = value; - return value._then(gotValue, undefined, undefined, this, undefined); - } else { - return gotValue.call(this, value); - } -} - -function gotValue(value) { - var array = this.array; - var promise = array._promise; - var fn = tryCatch(array._fn); - promise._pushContext(); - var ret; - if (array._eachValues !== undefined) { - ret = fn.call(promise._boundValue(), value, this.index, this.length); - } else { - ret = fn.call(promise._boundValue(), - this.accum, value, this.index, this.length); - } - if (ret instanceof Promise) { - array._currentCancellable = ret; - } - var promiseCreated = promise._popContext(); - debug.checkForgottenReturns( - ret, - promiseCreated, - array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", - promise - ); - return ret; -} -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/schedule.js b/truebit-implementation/node_modules/bluebird/js/release/schedule.js deleted file mode 100644 index f70df9fc..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/schedule.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; -var util = require("./util"); -var schedule; -var noAsyncScheduler = function() { - throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); -}; -var NativePromise = util.getNativePromise(); -if (util.isNode && typeof MutationObserver === "undefined") { - var GlobalSetImmediate = global.setImmediate; - var ProcessNextTick = process.nextTick; - schedule = util.isRecentNode - ? function(fn) { GlobalSetImmediate.call(global, fn); } - : function(fn) { ProcessNextTick.call(process, fn); }; -} else if (typeof NativePromise === "function" && - typeof NativePromise.resolve === "function") { - var nativePromise = NativePromise.resolve(); - schedule = function(fn) { - nativePromise.then(fn); - }; -} else if ((typeof MutationObserver !== "undefined") && - !(typeof window !== "undefined" && - window.navigator && - (window.navigator.standalone || window.cordova))) { - schedule = (function() { - var div = document.createElement("div"); - var opts = {attributes: true}; - var toggleScheduled = false; - var div2 = document.createElement("div"); - var o2 = new MutationObserver(function() { - div.classList.toggle("foo"); - toggleScheduled = false; - }); - o2.observe(div2, opts); - - var scheduleToggle = function() { - if (toggleScheduled) return; - toggleScheduled = true; - div2.classList.toggle("foo"); - }; - - return function schedule(fn) { - var o = new MutationObserver(function() { - o.disconnect(); - fn(); - }); - o.observe(div, opts); - scheduleToggle(); - }; - })(); -} else if (typeof setImmediate !== "undefined") { - schedule = function (fn) { - setImmediate(fn); - }; -} else if (typeof setTimeout !== "undefined") { - schedule = function (fn) { - setTimeout(fn, 0); - }; -} else { - schedule = noAsyncScheduler; -} -module.exports = schedule; diff --git a/truebit-implementation/node_modules/bluebird/js/release/settle.js b/truebit-implementation/node_modules/bluebird/js/release/settle.js deleted file mode 100644 index fade3a17..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/settle.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -module.exports = - function(Promise, PromiseArray, debug) { -var PromiseInspection = Promise.PromiseInspection; -var util = require("./util"); - -function SettledPromiseArray(values) { - this.constructor$(values); -} -util.inherits(SettledPromiseArray, PromiseArray); - -SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { - this._values[index] = inspection; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - this._resolve(this._values); - return true; - } - return false; -}; - -SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { - var ret = new PromiseInspection(); - ret._bitField = 33554432; - ret._settledValueField = value; - return this._promiseResolved(index, ret); -}; -SettledPromiseArray.prototype._promiseRejected = function (reason, index) { - var ret = new PromiseInspection(); - ret._bitField = 16777216; - ret._settledValueField = reason; - return this._promiseResolved(index, ret); -}; - -Promise.settle = function (promises) { - debug.deprecated(".settle()", ".reflect()"); - return new SettledPromiseArray(promises).promise(); -}; - -Promise.prototype.settle = function () { - return Promise.settle(this); -}; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/some.js b/truebit-implementation/node_modules/bluebird/js/release/some.js deleted file mode 100644 index 400d8520..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/some.js +++ /dev/null @@ -1,148 +0,0 @@ -"use strict"; -module.exports = -function(Promise, PromiseArray, apiRejection) { -var util = require("./util"); -var RangeError = require("./errors").RangeError; -var AggregateError = require("./errors").AggregateError; -var isArray = util.isArray; -var CANCELLATION = {}; - - -function SomePromiseArray(values) { - this.constructor$(values); - this._howMany = 0; - this._unwrap = false; - this._initialized = false; -} -util.inherits(SomePromiseArray, PromiseArray); - -SomePromiseArray.prototype._init = function () { - if (!this._initialized) { - return; - } - if (this._howMany === 0) { - this._resolve([]); - return; - } - this._init$(undefined, -5); - var isArrayResolved = isArray(this._values); - if (!this._isResolved() && - isArrayResolved && - this._howMany > this._canPossiblyFulfill()) { - this._reject(this._getRangeError(this.length())); - } -}; - -SomePromiseArray.prototype.init = function () { - this._initialized = true; - this._init(); -}; - -SomePromiseArray.prototype.setUnwrap = function () { - this._unwrap = true; -}; - -SomePromiseArray.prototype.howMany = function () { - return this._howMany; -}; - -SomePromiseArray.prototype.setHowMany = function (count) { - this._howMany = count; -}; - -SomePromiseArray.prototype._promiseFulfilled = function (value) { - this._addFulfilled(value); - if (this._fulfilled() === this.howMany()) { - this._values.length = this.howMany(); - if (this.howMany() === 1 && this._unwrap) { - this._resolve(this._values[0]); - } else { - this._resolve(this._values); - } - return true; - } - return false; - -}; -SomePromiseArray.prototype._promiseRejected = function (reason) { - this._addRejected(reason); - return this._checkOutcome(); -}; - -SomePromiseArray.prototype._promiseCancelled = function () { - if (this._values instanceof Promise || this._values == null) { - return this._cancel(); - } - this._addRejected(CANCELLATION); - return this._checkOutcome(); -}; - -SomePromiseArray.prototype._checkOutcome = function() { - if (this.howMany() > this._canPossiblyFulfill()) { - var e = new AggregateError(); - for (var i = this.length(); i < this._values.length; ++i) { - if (this._values[i] !== CANCELLATION) { - e.push(this._values[i]); - } - } - if (e.length > 0) { - this._reject(e); - } else { - this._cancel(); - } - return true; - } - return false; -}; - -SomePromiseArray.prototype._fulfilled = function () { - return this._totalResolved; -}; - -SomePromiseArray.prototype._rejected = function () { - return this._values.length - this.length(); -}; - -SomePromiseArray.prototype._addRejected = function (reason) { - this._values.push(reason); -}; - -SomePromiseArray.prototype._addFulfilled = function (value) { - this._values[this._totalResolved++] = value; -}; - -SomePromiseArray.prototype._canPossiblyFulfill = function () { - return this.length() - this._rejected(); -}; - -SomePromiseArray.prototype._getRangeError = function (count) { - var message = "Input array must contain at least " + - this._howMany + " items but contains only " + count + " items"; - return new RangeError(message); -}; - -SomePromiseArray.prototype._resolveEmptyArray = function () { - this._reject(this._getRangeError(0)); -}; - -function some(promises, howMany) { - if ((howMany | 0) !== howMany || howMany < 0) { - return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - var ret = new SomePromiseArray(promises); - var promise = ret.promise(); - ret.setHowMany(howMany); - ret.init(); - return promise; -} - -Promise.some = function (promises, howMany) { - return some(promises, howMany); -}; - -Promise.prototype.some = function (howMany) { - return some(this, howMany); -}; - -Promise._SomePromiseArray = SomePromiseArray; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/synchronous_inspection.js b/truebit-implementation/node_modules/bluebird/js/release/synchronous_inspection.js deleted file mode 100644 index 9c49d2e6..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/synchronous_inspection.js +++ /dev/null @@ -1,103 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -function PromiseInspection(promise) { - if (promise !== undefined) { - promise = promise._target(); - this._bitField = promise._bitField; - this._settledValueField = promise._isFateSealed() - ? promise._settledValue() : undefined; - } - else { - this._bitField = 0; - this._settledValueField = undefined; - } -} - -PromiseInspection.prototype._settledValue = function() { - return this._settledValueField; -}; - -var value = PromiseInspection.prototype.value = function () { - if (!this.isFulfilled()) { - throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - return this._settledValue(); -}; - -var reason = PromiseInspection.prototype.error = -PromiseInspection.prototype.reason = function () { - if (!this.isRejected()) { - throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); - } - return this._settledValue(); -}; - -var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { - return (this._bitField & 33554432) !== 0; -}; - -var isRejected = PromiseInspection.prototype.isRejected = function () { - return (this._bitField & 16777216) !== 0; -}; - -var isPending = PromiseInspection.prototype.isPending = function () { - return (this._bitField & 50397184) === 0; -}; - -var isResolved = PromiseInspection.prototype.isResolved = function () { - return (this._bitField & 50331648) !== 0; -}; - -PromiseInspection.prototype.isCancelled = function() { - return (this._bitField & 8454144) !== 0; -}; - -Promise.prototype.__isCancelled = function() { - return (this._bitField & 65536) === 65536; -}; - -Promise.prototype._isCancelled = function() { - return this._target().__isCancelled(); -}; - -Promise.prototype.isCancelled = function() { - return (this._target()._bitField & 8454144) !== 0; -}; - -Promise.prototype.isPending = function() { - return isPending.call(this._target()); -}; - -Promise.prototype.isRejected = function() { - return isRejected.call(this._target()); -}; - -Promise.prototype.isFulfilled = function() { - return isFulfilled.call(this._target()); -}; - -Promise.prototype.isResolved = function() { - return isResolved.call(this._target()); -}; - -Promise.prototype.value = function() { - return value.call(this._target()); -}; - -Promise.prototype.reason = function() { - var target = this._target(); - target._unsetRejectionIsUnhandled(); - return reason.call(target); -}; - -Promise.prototype._value = function() { - return this._settledValue(); -}; - -Promise.prototype._reason = function() { - this._unsetRejectionIsUnhandled(); - return this._settledValue(); -}; - -Promise.PromiseInspection = PromiseInspection; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/thenables.js b/truebit-implementation/node_modules/bluebird/js/release/thenables.js deleted file mode 100644 index d6ab9aa2..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/thenables.js +++ /dev/null @@ -1,86 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var util = require("./util"); -var errorObj = util.errorObj; -var isObject = util.isObject; - -function tryConvertToPromise(obj, context) { - if (isObject(obj)) { - if (obj instanceof Promise) return obj; - var then = getThen(obj); - if (then === errorObj) { - if (context) context._pushContext(); - var ret = Promise.reject(then.e); - if (context) context._popContext(); - return ret; - } else if (typeof then === "function") { - if (isAnyBluebirdPromise(obj)) { - var ret = new Promise(INTERNAL); - obj._then( - ret._fulfill, - ret._reject, - undefined, - ret, - null - ); - return ret; - } - return doThenable(obj, then, context); - } - } - return obj; -} - -function doGetThen(obj) { - return obj.then; -} - -function getThen(obj) { - try { - return doGetThen(obj); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} - -var hasProp = {}.hasOwnProperty; -function isAnyBluebirdPromise(obj) { - try { - return hasProp.call(obj, "_promise0"); - } catch (e) { - return false; - } -} - -function doThenable(x, then, context) { - var promise = new Promise(INTERNAL); - var ret = promise; - if (context) context._pushContext(); - promise._captureStackTrace(); - if (context) context._popContext(); - var synchronous = true; - var result = util.tryCatch(then).call(x, resolve, reject); - synchronous = false; - - if (promise && result === errorObj) { - promise._rejectCallback(result.e, true, true); - promise = null; - } - - function resolve(value) { - if (!promise) return; - promise._resolveCallback(value); - promise = null; - } - - function reject(reason) { - if (!promise) return; - promise._rejectCallback(reason, synchronous, true); - promise = null; - } - return ret; -} - -return tryConvertToPromise; -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/timers.js b/truebit-implementation/node_modules/bluebird/js/release/timers.js deleted file mode 100644 index cb8f1f42..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/timers.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL, debug) { -var util = require("./util"); -var TimeoutError = Promise.TimeoutError; - -function HandleWrapper(handle) { - this.handle = handle; -} - -HandleWrapper.prototype._resultCancelled = function() { - clearTimeout(this.handle); -}; - -var afterValue = function(value) { return delay(+this).thenReturn(value); }; -var delay = Promise.delay = function (ms, value) { - var ret; - var handle; - if (value !== undefined) { - ret = Promise.resolve(value) - ._then(afterValue, null, null, ms, undefined); - if (debug.cancellation() && value instanceof Promise) { - ret._setOnCancel(value); - } - } else { - ret = new Promise(INTERNAL); - handle = setTimeout(function() { ret._fulfill(); }, +ms); - if (debug.cancellation()) { - ret._setOnCancel(new HandleWrapper(handle)); - } - ret._captureStackTrace(); - } - ret._setAsyncGuaranteed(); - return ret; -}; - -Promise.prototype.delay = function (ms) { - return delay(ms, this); -}; - -var afterTimeout = function (promise, message, parent) { - var err; - if (typeof message !== "string") { - if (message instanceof Error) { - err = message; - } else { - err = new TimeoutError("operation timed out"); - } - } else { - err = new TimeoutError(message); - } - util.markAsOriginatingFromRejection(err); - promise._attachExtraTrace(err); - promise._reject(err); - - if (parent != null) { - parent.cancel(); - } -}; - -function successClear(value) { - clearTimeout(this.handle); - return value; -} - -function failureClear(reason) { - clearTimeout(this.handle); - throw reason; -} - -Promise.prototype.timeout = function (ms, message) { - ms = +ms; - var ret, parent; - - var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { - if (ret.isPending()) { - afterTimeout(ret, message, parent); - } - }, ms)); - - if (debug.cancellation()) { - parent = this.then(); - ret = parent._then(successClear, failureClear, - undefined, handleWrapper, undefined); - ret._setOnCancel(handleWrapper); - } else { - ret = this._then(successClear, failureClear, - undefined, handleWrapper, undefined); - } - - return ret; -}; - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/using.js b/truebit-implementation/node_modules/bluebird/js/release/using.js deleted file mode 100644 index 65de531c..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/using.js +++ /dev/null @@ -1,226 +0,0 @@ -"use strict"; -module.exports = function (Promise, apiRejection, tryConvertToPromise, - createContext, INTERNAL, debug) { - var util = require("./util"); - var TypeError = require("./errors").TypeError; - var inherits = require("./util").inherits; - var errorObj = util.errorObj; - var tryCatch = util.tryCatch; - var NULL = {}; - - function thrower(e) { - setTimeout(function(){throw e;}, 0); - } - - function castPreservingDisposable(thenable) { - var maybePromise = tryConvertToPromise(thenable); - if (maybePromise !== thenable && - typeof thenable._isDisposable === "function" && - typeof thenable._getDisposer === "function" && - thenable._isDisposable()) { - maybePromise._setDisposable(thenable._getDisposer()); - } - return maybePromise; - } - function dispose(resources, inspection) { - var i = 0; - var len = resources.length; - var ret = new Promise(INTERNAL); - function iterator() { - if (i >= len) return ret._fulfill(); - var maybePromise = castPreservingDisposable(resources[i++]); - if (maybePromise instanceof Promise && - maybePromise._isDisposable()) { - try { - maybePromise = tryConvertToPromise( - maybePromise._getDisposer().tryDispose(inspection), - resources.promise); - } catch (e) { - return thrower(e); - } - if (maybePromise instanceof Promise) { - return maybePromise._then(iterator, thrower, - null, null, null); - } - } - iterator(); - } - iterator(); - return ret; - } - - function Disposer(data, promise, context) { - this._data = data; - this._promise = promise; - this._context = context; - } - - Disposer.prototype.data = function () { - return this._data; - }; - - Disposer.prototype.promise = function () { - return this._promise; - }; - - Disposer.prototype.resource = function () { - if (this.promise().isFulfilled()) { - return this.promise().value(); - } - return NULL; - }; - - Disposer.prototype.tryDispose = function(inspection) { - var resource = this.resource(); - var context = this._context; - if (context !== undefined) context._pushContext(); - var ret = resource !== NULL - ? this.doDispose(resource, inspection) : null; - if (context !== undefined) context._popContext(); - this._promise._unsetDisposable(); - this._data = null; - return ret; - }; - - Disposer.isDisposer = function (d) { - return (d != null && - typeof d.resource === "function" && - typeof d.tryDispose === "function"); - }; - - function FunctionDisposer(fn, promise, context) { - this.constructor$(fn, promise, context); - } - inherits(FunctionDisposer, Disposer); - - FunctionDisposer.prototype.doDispose = function (resource, inspection) { - var fn = this.data(); - return fn.call(resource, resource, inspection); - }; - - function maybeUnwrapDisposer(value) { - if (Disposer.isDisposer(value)) { - this.resources[this.index]._setDisposable(value); - return value.promise(); - } - return value; - } - - function ResourceList(length) { - this.length = length; - this.promise = null; - this[length-1] = null; - } - - ResourceList.prototype._resultCancelled = function() { - var len = this.length; - for (var i = 0; i < len; ++i) { - var item = this[i]; - if (item instanceof Promise) { - item.cancel(); - } - } - }; - - Promise.using = function () { - var len = arguments.length; - if (len < 2) return apiRejection( - "you must pass at least 2 arguments to Promise.using"); - var fn = arguments[len - 1]; - if (typeof fn !== "function") { - return apiRejection("expecting a function but got " + util.classString(fn)); - } - var input; - var spreadArgs = true; - if (len === 2 && Array.isArray(arguments[0])) { - input = arguments[0]; - len = input.length; - spreadArgs = false; - } else { - input = arguments; - len--; - } - var resources = new ResourceList(len); - for (var i = 0; i < len; ++i) { - var resource = input[i]; - if (Disposer.isDisposer(resource)) { - var disposer = resource; - resource = resource.promise(); - resource._setDisposable(disposer); - } else { - var maybePromise = tryConvertToPromise(resource); - if (maybePromise instanceof Promise) { - resource = - maybePromise._then(maybeUnwrapDisposer, null, null, { - resources: resources, - index: i - }, undefined); - } - } - resources[i] = resource; - } - - var reflectedResources = new Array(resources.length); - for (var i = 0; i < reflectedResources.length; ++i) { - reflectedResources[i] = Promise.resolve(resources[i]).reflect(); - } - - var resultPromise = Promise.all(reflectedResources) - .then(function(inspections) { - for (var i = 0; i < inspections.length; ++i) { - var inspection = inspections[i]; - if (inspection.isRejected()) { - errorObj.e = inspection.error(); - return errorObj; - } else if (!inspection.isFulfilled()) { - resultPromise.cancel(); - return; - } - inspections[i] = inspection.value(); - } - promise._pushContext(); - - fn = tryCatch(fn); - var ret = spreadArgs - ? fn.apply(undefined, inspections) : fn(inspections); - var promiseCreated = promise._popContext(); - debug.checkForgottenReturns( - ret, promiseCreated, "Promise.using", promise); - return ret; - }); - - var promise = resultPromise.lastly(function() { - var inspection = new Promise.PromiseInspection(resultPromise); - return dispose(resources, inspection); - }); - resources.promise = promise; - promise._setOnCancel(resources); - return promise; - }; - - Promise.prototype._setDisposable = function (disposer) { - this._bitField = this._bitField | 131072; - this._disposer = disposer; - }; - - Promise.prototype._isDisposable = function () { - return (this._bitField & 131072) > 0; - }; - - Promise.prototype._getDisposer = function () { - return this._disposer; - }; - - Promise.prototype._unsetDisposable = function () { - this._bitField = this._bitField & (~131072); - this._disposer = undefined; - }; - - Promise.prototype.disposer = function (fn) { - if (typeof fn === "function") { - return new FunctionDisposer(fn, this, createContext()); - } - throw new TypeError(); - }; - -}; diff --git a/truebit-implementation/node_modules/bluebird/js/release/util.js b/truebit-implementation/node_modules/bluebird/js/release/util.js deleted file mode 100644 index c5617ee8..00000000 --- a/truebit-implementation/node_modules/bluebird/js/release/util.js +++ /dev/null @@ -1,384 +0,0 @@ -"use strict"; -var es5 = require("./es5"); -var canEvaluate = typeof navigator == "undefined"; - -var errorObj = {e: {}}; -var tryCatchTarget; -var globalObject = typeof self !== "undefined" ? self : - typeof window !== "undefined" ? window : - typeof global !== "undefined" ? global : - this !== undefined ? this : null; - -function tryCatcher() { - try { - var target = tryCatchTarget; - tryCatchTarget = null; - return target.apply(this, arguments); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} -function tryCatch(fn) { - tryCatchTarget = fn; - return tryCatcher; -} - -var inherits = function(Child, Parent) { - var hasProp = {}.hasOwnProperty; - - function T() { - this.constructor = Child; - this.constructor$ = Parent; - for (var propertyName in Parent.prototype) { - if (hasProp.call(Parent.prototype, propertyName) && - propertyName.charAt(propertyName.length-1) !== "$" - ) { - this[propertyName + "$"] = Parent.prototype[propertyName]; - } - } - } - T.prototype = Parent.prototype; - Child.prototype = new T(); - return Child.prototype; -}; - - -function isPrimitive(val) { - return val == null || val === true || val === false || - typeof val === "string" || typeof val === "number"; - -} - -function isObject(value) { - return typeof value === "function" || - typeof value === "object" && value !== null; -} - -function maybeWrapAsError(maybeError) { - if (!isPrimitive(maybeError)) return maybeError; - - return new Error(safeToString(maybeError)); -} - -function withAppended(target, appendee) { - var len = target.length; - var ret = new Array(len + 1); - var i; - for (i = 0; i < len; ++i) { - ret[i] = target[i]; - } - ret[i] = appendee; - return ret; -} - -function getDataPropertyOrDefault(obj, key, defaultValue) { - if (es5.isES5) { - var desc = Object.getOwnPropertyDescriptor(obj, key); - - if (desc != null) { - return desc.get == null && desc.set == null - ? desc.value - : defaultValue; - } - } else { - return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; - } -} - -function notEnumerableProp(obj, name, value) { - if (isPrimitive(obj)) return obj; - var descriptor = { - value: value, - configurable: true, - enumerable: false, - writable: true - }; - es5.defineProperty(obj, name, descriptor); - return obj; -} - -function thrower(r) { - throw r; -} - -var inheritedDataKeys = (function() { - var excludedPrototypes = [ - Array.prototype, - Object.prototype, - Function.prototype - ]; - - var isExcludedProto = function(val) { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (excludedPrototypes[i] === val) { - return true; - } - } - return false; - }; - - if (es5.isES5) { - var getKeys = Object.getOwnPropertyNames; - return function(obj) { - var ret = []; - var visitedKeys = Object.create(null); - while (obj != null && !isExcludedProto(obj)) { - var keys; - try { - keys = getKeys(obj); - } catch (e) { - return ret; - } - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (visitedKeys[key]) continue; - visitedKeys[key] = true; - var desc = Object.getOwnPropertyDescriptor(obj, key); - if (desc != null && desc.get == null && desc.set == null) { - ret.push(key); - } - } - obj = es5.getPrototypeOf(obj); - } - return ret; - }; - } else { - var hasProp = {}.hasOwnProperty; - return function(obj) { - if (isExcludedProto(obj)) return []; - var ret = []; - - /*jshint forin:false */ - enumeration: for (var key in obj) { - if (hasProp.call(obj, key)) { - ret.push(key); - } else { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (hasProp.call(excludedPrototypes[i], key)) { - continue enumeration; - } - } - ret.push(key); - } - } - return ret; - }; - } - -})(); - -var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; -function isClass(fn) { - try { - if (typeof fn === "function") { - var keys = es5.names(fn.prototype); - - var hasMethods = es5.isES5 && keys.length > 1; - var hasMethodsOtherThanConstructor = keys.length > 0 && - !(keys.length === 1 && keys[0] === "constructor"); - var hasThisAssignmentAndStaticMethods = - thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; - - if (hasMethods || hasMethodsOtherThanConstructor || - hasThisAssignmentAndStaticMethods) { - return true; - } - } - return false; - } catch (e) { - return false; - } -} - -function toFastProperties(obj) { - /*jshint -W027,-W055,-W031*/ - function FakeConstructor() {} - FakeConstructor.prototype = obj; - var receiver = new FakeConstructor(); - function ic() { - return typeof receiver.foo; - } - ic(); - ic(); - return obj; - eval(obj); -} - -var rident = /^[a-z$_][a-z$_0-9]*$/i; -function isIdentifier(str) { - return rident.test(str); -} - -function filledRange(count, prefix, suffix) { - var ret = new Array(count); - for(var i = 0; i < count; ++i) { - ret[i] = prefix + i + suffix; - } - return ret; -} - -function safeToString(obj) { - try { - return obj + ""; - } catch (e) { - return "[no string representation]"; - } -} - -function isError(obj) { - return obj instanceof Error || - (obj !== null && - typeof obj === "object" && - typeof obj.message === "string" && - typeof obj.name === "string"); -} - -function markAsOriginatingFromRejection(e) { - try { - notEnumerableProp(e, "isOperational", true); - } - catch(ignore) {} -} - -function originatesFromRejection(e) { - if (e == null) return false; - return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || - e["isOperational"] === true); -} - -function canAttachTrace(obj) { - return isError(obj) && es5.propertyIsWritable(obj, "stack"); -} - -var ensureErrorObject = (function() { - if (!("stack" in new Error())) { - return function(value) { - if (canAttachTrace(value)) return value; - try {throw new Error(safeToString(value));} - catch(err) {return err;} - }; - } else { - return function(value) { - if (canAttachTrace(value)) return value; - return new Error(safeToString(value)); - }; - } -})(); - -function classString(obj) { - return {}.toString.call(obj); -} - -function copyDescriptors(from, to, filter) { - var keys = es5.names(from); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (filter(key)) { - try { - es5.defineProperty(to, key, es5.getDescriptor(from, key)); - } catch (ignore) {} - } - } -} - -var asArray = function(v) { - if (es5.isArray(v)) { - return v; - } - return null; -}; - -if (typeof Symbol !== "undefined" && Symbol.iterator) { - var ArrayFrom = typeof Array.from === "function" ? function(v) { - return Array.from(v); - } : function(v) { - var ret = []; - var it = v[Symbol.iterator](); - var itResult; - while (!((itResult = it.next()).done)) { - ret.push(itResult.value); - } - return ret; - }; - - asArray = function(v) { - if (es5.isArray(v)) { - return v; - } else if (v != null && typeof v[Symbol.iterator] === "function") { - return ArrayFrom(v); - } - return null; - }; -} - -var isNode = typeof process !== "undefined" && - classString(process).toLowerCase() === "[object process]"; - -var hasEnvVariables = typeof process !== "undefined" && - typeof process.env !== "undefined"; - -function env(key) { - return hasEnvVariables ? process.env[key] : undefined; -} - -function getNativePromise() { - if (typeof Promise === "function") { - try { - var promise = new Promise(function(){}); - if ({}.toString.call(promise) === "[object Promise]") { - return Promise; - } - } catch (e) {} - } -} - -function domainBind(self, cb) { - return self.bind(cb); -} - -var ret = { - isClass: isClass, - isIdentifier: isIdentifier, - inheritedDataKeys: inheritedDataKeys, - getDataPropertyOrDefault: getDataPropertyOrDefault, - thrower: thrower, - isArray: es5.isArray, - asArray: asArray, - notEnumerableProp: notEnumerableProp, - isPrimitive: isPrimitive, - isObject: isObject, - isError: isError, - canEvaluate: canEvaluate, - errorObj: errorObj, - tryCatch: tryCatch, - inherits: inherits, - withAppended: withAppended, - maybeWrapAsError: maybeWrapAsError, - toFastProperties: toFastProperties, - filledRange: filledRange, - toString: safeToString, - canAttachTrace: canAttachTrace, - ensureErrorObject: ensureErrorObject, - originatesFromRejection: originatesFromRejection, - markAsOriginatingFromRejection: markAsOriginatingFromRejection, - classString: classString, - copyDescriptors: copyDescriptors, - hasDevTools: typeof chrome !== "undefined" && chrome && - typeof chrome.loadTimes === "function", - isNode: isNode, - hasEnvVariables: hasEnvVariables, - env: env, - global: globalObject, - getNativePromise: getNativePromise, - domainBind: domainBind -}; -ret.isRecentNode = ret.isNode && (function() { - var version = process.versions.node.split(".").map(Number); - return (version[0] === 0 && version[1] > 10) || (version[0] > 0); -})(); - -if (ret.isNode) ret.toFastProperties(process); - -try {throw new Error(); } catch (e) {ret.lastLineError = e;} -module.exports = ret; diff --git a/truebit-implementation/node_modules/bluebird/package.json b/truebit-implementation/node_modules/bluebird/package.json deleted file mode 100644 index 9363e4b2..00000000 --- a/truebit-implementation/node_modules/bluebird/package.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "_from": "bluebird@^3.5.0", - "_id": "bluebird@3.5.3", - "_inBundle": false, - "_integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "_location": "/bluebird", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "bluebird@^3.5.0", - "name": "bluebird", - "escapedName": "bluebird", - "rawSpec": "^3.5.0", - "saveSpec": null, - "fetchSpec": "^3.5.0" - }, - "_requiredBy": [ - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "_shasum": "7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7", - "_spec": "bluebird@^3.5.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Petka Antonov", - "email": "petka_antonov@hotmail.com", - "url": "http://github.com/petkaantonov/" - }, - "browser": "./js/browser/bluebird.js", - "bugs": { - "url": "http://github.com/petkaantonov/bluebird/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Full featured Promises/A+ implementation with exceptionally good performance", - "devDependencies": { - "acorn": "^6.0.2", - "acorn-walk": "^6.1.0", - "baconjs": "^0.7.43", - "bluebird": "^2.9.2", - "body-parser": "^1.10.2", - "browserify": "^8.1.1", - "cli-table": "~0.3.1", - "co": "^4.2.0", - "cross-spawn": "^0.2.3", - "glob": "^4.3.2", - "grunt-saucelabs": "~8.4.1", - "highland": "^2.3.0", - "istanbul": "^0.3.5", - "jshint": "^2.6.0", - "jshint-stylish": "~0.2.0", - "kefir": "^2.4.1", - "mkdirp": "~0.5.0", - "mocha": "~2.1", - "open": "~0.0.5", - "optimist": "~0.6.1", - "rimraf": "~2.2.6", - "rx": "^2.3.25", - "serve-static": "^1.7.1", - "sinon": "~1.7.3", - "uglify-js": "~2.4.16" - }, - "files": [ - "js/browser", - "js/release", - "LICENSE" - ], - "homepage": "https://github.com/petkaantonov/bluebird", - "keywords": [ - "promise", - "performance", - "promises", - "promises-a", - "promises-aplus", - "async", - "await", - "deferred", - "deferreds", - "future", - "flow control", - "dsl", - "fluent interface" - ], - "license": "MIT", - "main": "./js/release/bluebird.js", - "name": "bluebird", - "repository": { - "type": "git", - "url": "git://github.com/petkaantonov/bluebird.git" - }, - "scripts": { - "generate-browser-core": "node tools/build.js --features=core --no-debug --release --zalgo --browser --minify && mv js/browser/bluebird.js js/browser/bluebird.core.js && mv js/browser/bluebird.min.js js/browser/bluebird.core.min.js", - "generate-browser-full": "node tools/build.js --no-clean --no-debug --release --browser --minify", - "istanbul": "istanbul", - "lint": "node scripts/jshint.js", - "prepublish": "npm run generate-browser-core && npm run generate-browser-full", - "test": "node --expose-gc tools/test.js" - }, - "version": "3.5.3", - "webpack": "./js/release/bluebird.js" -} diff --git a/truebit-implementation/node_modules/bn.js/.npmignore b/truebit-implementation/node_modules/bn.js/.npmignore deleted file mode 100644 index 057bda2b..00000000 --- a/truebit-implementation/node_modules/bn.js/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -benchmarks/ -coverage/ -test/ -node_modules/ -npm-debug.log -1.js -logo.png -.travis.yml diff --git a/truebit-implementation/node_modules/bn.js/README.md b/truebit-implementation/node_modules/bn.js/README.md deleted file mode 100644 index 370f06d2..00000000 --- a/truebit-implementation/node_modules/bn.js/README.md +++ /dev/null @@ -1,221 +0,0 @@ -# bn.js - -> BigNum in pure javascript - -[![Build Status](https://secure.travis-ci.org/indutny/bn.js.png)](http://travis-ci.org/indutny/bn.js) - -## Install -`npm install --save bn.js` - -## Usage - -```js -const BN = require('bn.js'); - -var a = new BN('dead', 16); -var b = new BN('101010', 2); - -var res = a.add(b); -console.log(res.toString(10)); // 57047 -``` - -**Note**: decimals are not supported in this library. - -## Notation - -### Prefixes - -There are several prefixes to instructions that affect the way the work. Here -is the list of them in the order of appearance in the function name: - -* `i` - perform operation in-place, storing the result in the host object (on - which the method was invoked). Might be used to avoid number allocation costs -* `u` - unsigned, ignore the sign of operands when performing operation, or - always return positive value. Second case applies to reduction operations - like `mod()`. In such cases if the result will be negative - modulo will be - added to the result to make it positive - -### Postfixes - -The only available postfix at the moment is: - -* `n` - which means that the argument of the function must be a plain JavaScript - Number. Decimals are not supported. - -### Examples - -* `a.iadd(b)` - perform addition on `a` and `b`, storing the result in `a` -* `a.umod(b)` - reduce `a` modulo `b`, returning positive value -* `a.iushln(13)` - shift bits of `a` left by 13 - -## Instructions - -Prefixes/postfixes are put in parens at the of the line. `endian` - could be -either `le` (little-endian) or `be` (big-endian). - -### Utilities - -* `a.clone()` - clone number -* `a.toString(base, length)` - convert to base-string and pad with zeroes -* `a.toNumber()` - convert to Javascript Number (limited to 53 bits) -* `a.toJSON()` - convert to JSON compatible hex string (alias of `toString(16)`) -* `a.toArray(endian, length)` - convert to byte `Array`, and optionally zero - pad to length, throwing if already exceeding -* `a.toArrayLike(type, endian, length)` - convert to an instance of `type`, - which must behave like an `Array` -* `a.toBuffer(endian, length)` - convert to Node.js Buffer (if available). For - compatibility with browserify and similar tools, use this instead: - `a.toArrayLike(Buffer, endian, length)` -* `a.bitLength()` - get number of bits occupied -* `a.zeroBits()` - return number of less-significant consequent zero bits - (example: `1010000` has 4 zero bits) -* `a.byteLength()` - return number of bytes occupied -* `a.isNeg()` - true if the number is negative -* `a.isEven()` - no comments -* `a.isOdd()` - no comments -* `a.isZero()` - no comments -* `a.cmp(b)` - compare numbers and return `-1` (a `<` b), `0` (a `==` b), or `1` (a `>` b) - depending on the comparison result (`ucmp`, `cmpn`) -* `a.lt(b)` - `a` less than `b` (`n`) -* `a.lte(b)` - `a` less than or equals `b` (`n`) -* `a.gt(b)` - `a` greater than `b` (`n`) -* `a.gte(b)` - `a` greater than or equals `b` (`n`) -* `a.eq(b)` - `a` equals `b` (`n`) -* `a.toTwos(width)` - convert to two's complement representation, where `width` is bit width -* `a.fromTwos(width)` - convert from two's complement representation, where `width` is the bit width -* `BN.isBN(object)` - returns true if the supplied `object` is a BN.js instance - -### Arithmetics - -* `a.neg()` - negate sign (`i`) -* `a.abs()` - absolute value (`i`) -* `a.add(b)` - addition (`i`, `n`, `in`) -* `a.sub(b)` - subtraction (`i`, `n`, `in`) -* `a.mul(b)` - multiply (`i`, `n`, `in`) -* `a.sqr()` - square (`i`) -* `a.pow(b)` - raise `a` to the power of `b` -* `a.div(b)` - divide (`divn`, `idivn`) -* `a.mod(b)` - reduct (`u`, `n`) (but no `umodn`) -* `a.divRound(b)` - rounded division - -### Bit operations - -* `a.or(b)` - or (`i`, `u`, `iu`) -* `a.and(b)` - and (`i`, `u`, `iu`, `andln`) (NOTE: `andln` is going to be replaced - with `andn` in future) -* `a.xor(b)` - xor (`i`, `u`, `iu`) -* `a.setn(b)` - set specified bit to `1` -* `a.shln(b)` - shift left (`i`, `u`, `iu`) -* `a.shrn(b)` - shift right (`i`, `u`, `iu`) -* `a.testn(b)` - test if specified bit is set -* `a.maskn(b)` - clear bits with indexes higher or equal to `b` (`i`) -* `a.bincn(b)` - add `1 << b` to the number -* `a.notn(w)` - not (for the width specified by `w`) (`i`) - -### Reduction - -* `a.gcd(b)` - GCD -* `a.egcd(b)` - Extended GCD results (`{ a: ..., b: ..., gcd: ... }`) -* `a.invm(b)` - inverse `a` modulo `b` - -## Fast reduction - -When doing lots of reductions using the same modulo, it might be beneficial to -use some tricks: like [Montgomery multiplication][0], or using special algorithm -for [Mersenne Prime][1]. - -### Reduction context - -To enable this tricks one should create a reduction context: - -```js -var red = BN.red(num); -``` -where `num` is just a BN instance. - -Or: - -```js -var red = BN.red(primeName); -``` - -Where `primeName` is either of these [Mersenne Primes][1]: - -* `'k256'` -* `'p224'` -* `'p192'` -* `'p25519'` - -Or: - -```js -var red = BN.mont(num); -``` - -To reduce numbers with [Montgomery trick][0]. `.mont()` is generally faster than -`.red(num)`, but slower than `BN.red(primeName)`. - -### Converting numbers - -Before performing anything in reduction context - numbers should be converted -to it. Usually, this means that one should: - -* Convert inputs to reducted ones -* Operate on them in reduction context -* Convert outputs back from the reduction context - -Here is how one may convert numbers to `red`: - -```js -var redA = a.toRed(red); -``` -Where `red` is a reduction context created using instructions above - -Here is how to convert them back: - -```js -var a = redA.fromRed(); -``` - -### Red instructions - -Most of the instructions from the very start of this readme have their -counterparts in red context: - -* `a.redAdd(b)`, `a.redIAdd(b)` -* `a.redSub(b)`, `a.redISub(b)` -* `a.redShl(num)` -* `a.redMul(b)`, `a.redIMul(b)` -* `a.redSqr()`, `a.redISqr()` -* `a.redSqrt()` - square root modulo reduction context's prime -* `a.redInvm()` - modular inverse of the number -* `a.redNeg()` -* `a.redPow(b)` - modular exponentiation - -## LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2015. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. - -[0]: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication -[1]: https://en.wikipedia.org/wiki/Mersenne_prime diff --git a/truebit-implementation/node_modules/bn.js/lib/bn.js b/truebit-implementation/node_modules/bn.js/lib/bn.js deleted file mode 100644 index b5901454..00000000 --- a/truebit-implementation/node_modules/bn.js/lib/bn.js +++ /dev/null @@ -1,3427 +0,0 @@ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buffer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); diff --git a/truebit-implementation/node_modules/bn.js/package.json b/truebit-implementation/node_modules/bn.js/package.json deleted file mode 100644 index 7c675573..00000000 --- a/truebit-implementation/node_modules/bn.js/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "bn.js@^4.11.6", - "_id": "bn.js@4.11.8", - "_inBundle": false, - "_integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "_location": "/bn.js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "bn.js@^4.11.6", - "name": "bn.js", - "escapedName": "bn.js", - "rawSpec": "^4.11.6", - "saveSpec": null, - "fetchSpec": "^4.11.6" - }, - "_requiredBy": [ - "/asn1.js", - "/browserify-rsa", - "/browserify-sign", - "/create-ecdh", - "/diffie-hellman", - "/elliptic", - "/eth-lib", - "/ethers", - "/ethers/elliptic", - "/miller-rabin", - "/public-encrypt", - "/web3-eth-accounts/eth-lib" - ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "_shasum": "2cde09eb5ee341f484746bb0309b3253b1b1442f", - "_spec": "bn.js@^4.11.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/eth-lib", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "browser": { - "buffer": false - }, - "bugs": { - "url": "https://github.com/indutny/bn.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Big number implementation in pure javascript", - "devDependencies": { - "istanbul": "^0.3.5", - "mocha": "^2.1.0", - "semistandard": "^7.0.4" - }, - "homepage": "https://github.com/indutny/bn.js", - "keywords": [ - "BN", - "BigNum", - "Big number", - "Modulo", - "Montgomery" - ], - "license": "MIT", - "main": "lib/bn.js", - "name": "bn.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/bn.js.git" - }, - "scripts": { - "lint": "semistandard", - "test": "npm run lint && npm run unit", - "unit": "mocha --reporter=spec test/*-test.js" - }, - "version": "4.11.8" -} diff --git a/truebit-implementation/node_modules/bn.js/util/genCombMulTo.js b/truebit-implementation/node_modules/bn.js/util/genCombMulTo.js deleted file mode 100644 index 8b456c7c..00000000 --- a/truebit-implementation/node_modules/bn.js/util/genCombMulTo.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -// NOTE: This could be potentionally used to generate loop-less multiplications -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('var w' + k + ' = c;'); - src.push('c = 0;'); - for (var j = minJ; j <= maxJ; j++) { - i = k - j; - - src.push('lo = Math.imul(al' + i + ', bl' + j + ');'); - src.push('mid = Math.imul(al' + i + ', bh' + j + ');'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = Math.imul(ah' + i + ', bh' + j + ');'); - - src.push('w' + k + ' = (w' + k + ' + lo) | 0;'); - src.push('w' + k + ' = (w' + k + ' + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (c + hi) | 0;'); - src.push('c = (c + (mid >>> 13)) | 0;'); - src.push('c = (c + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/bn.js/util/genCombMulTo10.js b/truebit-implementation/node_modules/bn.js/util/genCombMulTo10.js deleted file mode 100644 index cf2e6e80..00000000 --- a/truebit-implementation/node_modules/bn.js/util/genCombMulTo10.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');'); - src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');'); - src.push( - 'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;'); - src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');'); - - for (var j = minJ + 1; j <= maxJ; j++) { - i = k - j; - - src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;'); - } - - src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/body-parser/HISTORY.md b/truebit-implementation/node_modules/body-parser/HISTORY.md deleted file mode 100644 index d8152ccb..00000000 --- a/truebit-implementation/node_modules/body-parser/HISTORY.md +++ /dev/null @@ -1,588 +0,0 @@ -1.18.3 / 2018-05-14 -=================== - - * Fix stack trace for strict json parse error - * deps: depd@~1.1.2 - - perf: remove argument reassignment - * deps: http-errors@~1.6.3 - - deps: depd@~1.1.2 - - deps: setprototypeof@1.1.0 - - deps: statuses@'>= 1.3.1 < 2' - * deps: iconv-lite@0.4.23 - - Fix loading encoding with year appended - - Fix deprecation warnings on Node.js 10+ - * deps: qs@6.5.2 - * deps: raw-body@2.3.3 - - deps: http-errors@1.6.3 - - deps: iconv-lite@0.4.23 - * deps: type-is@~1.6.16 - - deps: mime-types@~2.1.18 - -1.18.2 / 2017-09-22 -=================== - - * deps: debug@2.6.9 - * perf: remove argument reassignment - -1.18.1 / 2017-09-12 -=================== - - * deps: content-type@~1.0.4 - - perf: remove argument reassignment - - perf: skip parameter parsing when no parameters - * deps: iconv-lite@0.4.19 - - Fix ISO-8859-1 regression - - Update Windows-1255 - * deps: qs@6.5.1 - - Fix parsing & compacting very deep objects - * deps: raw-body@2.3.2 - - deps: iconv-lite@0.4.19 - -1.18.0 / 2017-09-08 -=================== - - * Fix JSON strict violation error to match native parse error - * Include the `body` property on verify errors - * Include the `type` property on all generated errors - * Use `http-errors` to set status code on errors - * deps: bytes@3.0.0 - * deps: debug@2.6.8 - * deps: depd@~1.1.1 - - Remove unnecessary `Buffer` loading - * deps: http-errors@~1.6.2 - - deps: depd@1.1.1 - * deps: iconv-lite@0.4.18 - - Add support for React Native - - Add a warning if not loaded as utf-8 - - Fix CESU-8 decoding in Node.js 8 - - Improve speed of ISO-8859-1 encoding - * deps: qs@6.5.0 - * deps: raw-body@2.3.1 - - Use `http-errors` for standard emitted errors - - deps: bytes@3.0.0 - - deps: iconv-lite@0.4.18 - - perf: skip buffer decoding on overage chunk - * perf: prevent internal `throw` when missing charset - -1.17.2 / 2017-05-17 -=================== - - * deps: debug@2.6.7 - - Fix `DEBUG_MAX_ARRAY_LENGTH` - - deps: ms@2.0.0 - * deps: type-is@~1.6.15 - - deps: mime-types@~2.1.15 - -1.17.1 / 2017-03-06 -=================== - - * deps: qs@6.4.0 - - Fix regression parsing keys starting with `[` - -1.17.0 / 2017-03-01 -=================== - - * deps: http-errors@~1.6.1 - - Make `message` property enumerable for `HttpError`s - - deps: setprototypeof@1.0.3 - * deps: qs@6.3.1 - - Fix compacting nested arrays - -1.16.1 / 2017-02-10 -=================== - - * deps: debug@2.6.1 - - Fix deprecation messages in WebStorm and other editors - - Undeprecate `DEBUG_FD` set to `1` or `2` - -1.16.0 / 2017-01-17 -=================== - - * deps: debug@2.6.0 - - Allow colors in workers - - Deprecated `DEBUG_FD` environment variable - - Fix error when running under React Native - - Use same color for same namespace - - deps: ms@0.7.2 - * deps: http-errors@~1.5.1 - - deps: inherits@2.0.3 - - deps: setprototypeof@1.0.2 - - deps: statuses@'>= 1.3.1 < 2' - * deps: iconv-lite@0.4.15 - - Added encoding MS-31J - - Added encoding MS-932 - - Added encoding MS-936 - - Added encoding MS-949 - - Added encoding MS-950 - - Fix GBK/GB18030 handling of Euro character - * deps: qs@6.2.1 - - Fix array parsing from skipping empty values - * deps: raw-body@~2.2.0 - - deps: iconv-lite@0.4.15 - * deps: type-is@~1.6.14 - - deps: mime-types@~2.1.13 - -1.15.2 / 2016-06-19 -=================== - - * deps: bytes@2.4.0 - * deps: content-type@~1.0.2 - - perf: enable strict mode - * deps: http-errors@~1.5.0 - - Use `setprototypeof` module to replace `__proto__` setting - - deps: statuses@'>= 1.3.0 < 2' - - perf: enable strict mode - * deps: qs@6.2.0 - * deps: raw-body@~2.1.7 - - deps: bytes@2.4.0 - - perf: remove double-cleanup on happy path - * deps: type-is@~1.6.13 - - deps: mime-types@~2.1.11 - -1.15.1 / 2016-05-05 -=================== - - * deps: bytes@2.3.0 - - Drop partial bytes on all parsed units - - Fix parsing byte string that looks like hex - * deps: raw-body@~2.1.6 - - deps: bytes@2.3.0 - * deps: type-is@~1.6.12 - - deps: mime-types@~2.1.10 - -1.15.0 / 2016-02-10 -=================== - - * deps: http-errors@~1.4.0 - - Add `HttpError` export, for `err instanceof createError.HttpError` - - deps: inherits@2.0.1 - - deps: statuses@'>= 1.2.1 < 2' - * deps: qs@6.1.0 - * deps: type-is@~1.6.11 - - deps: mime-types@~2.1.9 - -1.14.2 / 2015-12-16 -=================== - - * deps: bytes@2.2.0 - * deps: iconv-lite@0.4.13 - * deps: qs@5.2.0 - * deps: raw-body@~2.1.5 - - deps: bytes@2.2.0 - - deps: iconv-lite@0.4.13 - * deps: type-is@~1.6.10 - - deps: mime-types@~2.1.8 - -1.14.1 / 2015-09-27 -=================== - - * Fix issue where invalid charset results in 400 when `verify` used - * deps: iconv-lite@0.4.12 - - Fix CESU-8 decoding in Node.js 4.x - * deps: raw-body@~2.1.4 - - Fix masking critical errors from `iconv-lite` - - deps: iconv-lite@0.4.12 - * deps: type-is@~1.6.9 - - deps: mime-types@~2.1.7 - -1.14.0 / 2015-09-16 -=================== - - * Fix JSON strict parse error to match syntax errors - * Provide static `require` analysis in `urlencoded` parser - * deps: depd@~1.1.0 - - Support web browser loading - * deps: qs@5.1.0 - * deps: raw-body@~2.1.3 - - Fix sync callback when attaching data listener causes sync read - * deps: type-is@~1.6.8 - - Fix type error when given invalid type to match against - - deps: mime-types@~2.1.6 - -1.13.3 / 2015-07-31 -=================== - - * deps: type-is@~1.6.6 - - deps: mime-types@~2.1.4 - -1.13.2 / 2015-07-05 -=================== - - * deps: iconv-lite@0.4.11 - * deps: qs@4.0.0 - - Fix dropping parameters like `hasOwnProperty` - - Fix user-visible incompatibilities from 3.1.0 - - Fix various parsing edge cases - * deps: raw-body@~2.1.2 - - Fix error stack traces to skip `makeError` - - deps: iconv-lite@0.4.11 - * deps: type-is@~1.6.4 - - deps: mime-types@~2.1.2 - - perf: enable strict mode - - perf: remove argument reassignment - -1.13.1 / 2015-06-16 -=================== - - * deps: qs@2.4.2 - - Downgraded from 3.1.0 because of user-visible incompatibilities - -1.13.0 / 2015-06-14 -=================== - - * Add `statusCode` property on `Error`s, in addition to `status` - * Change `type` default to `application/json` for JSON parser - * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser - * Provide static `require` analysis - * Use the `http-errors` module to generate errors - * deps: bytes@2.1.0 - - Slight optimizations - * deps: iconv-lite@0.4.10 - - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails - - Leading BOM is now removed when decoding - * deps: on-finished@~2.3.0 - - Add defined behavior for HTTP `CONNECT` requests - - Add defined behavior for HTTP `Upgrade` requests - - deps: ee-first@1.1.1 - * deps: qs@3.1.0 - - Fix dropping parameters like `hasOwnProperty` - - Fix various parsing edge cases - - Parsed object now has `null` prototype - * deps: raw-body@~2.1.1 - - Use `unpipe` module for unpiping requests - - deps: iconv-lite@0.4.10 - * deps: type-is@~1.6.3 - - deps: mime-types@~2.1.1 - - perf: reduce try block size - - perf: remove bitwise operations - * perf: enable strict mode - * perf: remove argument reassignment - * perf: remove delete call - -1.12.4 / 2015-05-10 -=================== - - * deps: debug@~2.2.0 - * deps: qs@2.4.2 - - Fix allowing parameters like `constructor` - * deps: on-finished@~2.2.1 - * deps: raw-body@~2.0.1 - - Fix a false-positive when unpiping in Node.js 0.8 - - deps: bytes@2.0.1 - * deps: type-is@~1.6.2 - - deps: mime-types@~2.0.11 - -1.12.3 / 2015-04-15 -=================== - - * Slight efficiency improvement when not debugging - * deps: depd@~1.0.1 - * deps: iconv-lite@0.4.8 - - Add encoding alias UNICODE-1-1-UTF-7 - * deps: raw-body@1.3.4 - - Fix hanging callback if request aborts during read - - deps: iconv-lite@0.4.8 - -1.12.2 / 2015-03-16 -=================== - - * deps: qs@2.4.1 - - Fix error when parameter `hasOwnProperty` is present - -1.12.1 / 2015-03-15 -=================== - - * deps: debug@~2.1.3 - - Fix high intensity foreground color for bold - - deps: ms@0.7.0 - * deps: type-is@~1.6.1 - - deps: mime-types@~2.0.10 - -1.12.0 / 2015-02-13 -=================== - - * add `debug` messages - * accept a function for the `type` option - * use `content-type` to parse `Content-Type` headers - * deps: iconv-lite@0.4.7 - - Gracefully support enumerables on `Object.prototype` - * deps: raw-body@1.3.3 - - deps: iconv-lite@0.4.7 - * deps: type-is@~1.6.0 - - fix argument reassignment - - fix false-positives in `hasBody` `Transfer-Encoding` check - - support wildcard for both type and subtype (`*/*`) - - deps: mime-types@~2.0.9 - -1.11.0 / 2015-01-30 -=================== - - * make internal `extended: true` depth limit infinity - * deps: type-is@~1.5.6 - - deps: mime-types@~2.0.8 - -1.10.2 / 2015-01-20 -=================== - - * deps: iconv-lite@0.4.6 - - Fix rare aliases of single-byte encodings - * deps: raw-body@1.3.2 - - deps: iconv-lite@0.4.6 - -1.10.1 / 2015-01-01 -=================== - - * deps: on-finished@~2.2.0 - * deps: type-is@~1.5.5 - - deps: mime-types@~2.0.7 - -1.10.0 / 2014-12-02 -=================== - - * make internal `extended: true` array limit dynamic - -1.9.3 / 2014-11-21 -================== - - * deps: iconv-lite@0.4.5 - - Fix Windows-31J and X-SJIS encoding support - * deps: qs@2.3.3 - - Fix `arrayLimit` behavior - * deps: raw-body@1.3.1 - - deps: iconv-lite@0.4.5 - * deps: type-is@~1.5.3 - - deps: mime-types@~2.0.3 - -1.9.2 / 2014-10-27 -================== - - * deps: qs@2.3.2 - - Fix parsing of mixed objects and values - -1.9.1 / 2014-10-22 -================== - - * deps: on-finished@~2.1.1 - - Fix handling of pipelined requests - * deps: qs@2.3.0 - - Fix parsing of mixed implicit and explicit arrays - * deps: type-is@~1.5.2 - - deps: mime-types@~2.0.2 - -1.9.0 / 2014-09-24 -================== - - * include the charset in "unsupported charset" error message - * include the encoding in "unsupported content encoding" error message - * deps: depd@~1.0.0 - -1.8.4 / 2014-09-23 -================== - - * fix content encoding to be case-insensitive - -1.8.3 / 2014-09-19 -================== - - * deps: qs@2.2.4 - - Fix issue with object keys starting with numbers truncated - -1.8.2 / 2014-09-15 -================== - - * deps: depd@0.4.5 - -1.8.1 / 2014-09-07 -================== - - * deps: media-typer@0.3.0 - * deps: type-is@~1.5.1 - -1.8.0 / 2014-09-05 -================== - - * make empty-body-handling consistent between chunked requests - - empty `json` produces `{}` - - empty `raw` produces `new Buffer(0)` - - empty `text` produces `''` - - empty `urlencoded` produces `{}` - * deps: qs@2.2.3 - - Fix issue where first empty value in array is discarded - * deps: type-is@~1.5.0 - - fix `hasbody` to be true for `content-length: 0` - -1.7.0 / 2014-09-01 -================== - - * add `parameterLimit` option to `urlencoded` parser - * change `urlencoded` extended array limit to 100 - * respond with 413 when over `parameterLimit` in `urlencoded` - -1.6.7 / 2014-08-29 -================== - - * deps: qs@2.2.2 - - Remove unnecessary cloning - -1.6.6 / 2014-08-27 -================== - - * deps: qs@2.2.0 - - Array parsing fix - - Performance improvements - -1.6.5 / 2014-08-16 -================== - - * deps: on-finished@2.1.0 - -1.6.4 / 2014-08-14 -================== - - * deps: qs@1.2.2 - -1.6.3 / 2014-08-10 -================== - - * deps: qs@1.2.1 - -1.6.2 / 2014-08-07 -================== - - * deps: qs@1.2.0 - - Fix parsing array of objects - -1.6.1 / 2014-08-06 -================== - - * deps: qs@1.1.0 - - Accept urlencoded square brackets - - Accept empty values in implicit array notation - -1.6.0 / 2014-08-05 -================== - - * deps: qs@1.0.2 - - Complete rewrite - - Limits array length to 20 - - Limits object depth to 5 - - Limits parameters to 1,000 - -1.5.2 / 2014-07-27 -================== - - * deps: depd@0.4.4 - - Work-around v8 generating empty stack traces - -1.5.1 / 2014-07-26 -================== - - * deps: depd@0.4.3 - - Fix exception when global `Error.stackTraceLimit` is too low - -1.5.0 / 2014-07-20 -================== - - * deps: depd@0.4.2 - - Add `TRACE_DEPRECATION` environment variable - - Remove non-standard grey color from color output - - Support `--no-deprecation` argument - - Support `--trace-deprecation` argument - * deps: iconv-lite@0.4.4 - - Added encoding UTF-7 - * deps: raw-body@1.3.0 - - deps: iconv-lite@0.4.4 - - Added encoding UTF-7 - - Fix `Cannot switch to old mode now` error on Node.js 0.10+ - * deps: type-is@~1.3.2 - -1.4.3 / 2014-06-19 -================== - - * deps: type-is@1.3.1 - - fix global variable leak - -1.4.2 / 2014-06-19 -================== - - * deps: type-is@1.3.0 - - improve type parsing - -1.4.1 / 2014-06-19 -================== - - * fix urlencoded extended deprecation message - -1.4.0 / 2014-06-19 -================== - - * add `text` parser - * add `raw` parser - * check accepted charset in content-type (accepts utf-8) - * check accepted encoding in content-encoding (accepts identity) - * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed - * deprecate `urlencoded()` without provided `extended` option - * lazy-load urlencoded parsers - * parsers split into files for reduced mem usage - * support gzip and deflate bodies - - set `inflate: false` to turn off - * deps: raw-body@1.2.2 - - Support all encodings from `iconv-lite` - -1.3.1 / 2014-06-11 -================== - - * deps: type-is@1.2.1 - - Switch dependency from mime to mime-types@1.0.0 - -1.3.0 / 2014-05-31 -================== - - * add `extended` option to urlencoded parser - -1.2.2 / 2014-05-27 -================== - - * deps: raw-body@1.1.6 - - assert stream encoding on node.js 0.8 - - assert stream encoding on node.js < 0.10.6 - - deps: bytes@1 - -1.2.1 / 2014-05-26 -================== - - * invoke `next(err)` after request fully read - - prevents hung responses and socket hang ups - -1.2.0 / 2014-05-11 -================== - - * add `verify` option - * deps: type-is@1.2.0 - - support suffix matching - -1.1.2 / 2014-05-11 -================== - - * improve json parser speed - -1.1.1 / 2014-05-11 -================== - - * fix repeated limit parsing with every request - -1.1.0 / 2014-05-10 -================== - - * add `type` option - * deps: pin for safety and consistency - -1.0.2 / 2014-04-14 -================== - - * use `type-is` module - -1.0.1 / 2014-03-20 -================== - - * lower default limits to 100kb diff --git a/truebit-implementation/node_modules/body-parser/LICENSE b/truebit-implementation/node_modules/body-parser/LICENSE deleted file mode 100644 index 386b7b69..00000000 --- a/truebit-implementation/node_modules/body-parser/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/body-parser/README.md b/truebit-implementation/node_modules/body-parser/README.md deleted file mode 100644 index d9138bc7..00000000 --- a/truebit-implementation/node_modules/body-parser/README.md +++ /dev/null @@ -1,445 +0,0 @@ -# body-parser - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Node.js body parsing middleware. - -Parse incoming request bodies in a middleware before your handlers, available -under the `req.body` property. - -**Note** As `req.body`'s shape is based on user-controlled input, all -properties and values in this object are untrusted and should be validated -before trusting. For example, `req.body.foo.toString()` may fail in multiple -ways, for example the `foo` property may not be there or may not be a string, -and `toString` may not be a function and instead a string or other user input. - -[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/). - -_This does not handle multipart bodies_, due to their complex and typically -large nature. For multipart bodies, you may be interested in the following -modules: - - * [busboy](https://www.npmjs.org/package/busboy#readme) and - [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme) - * [multiparty](https://www.npmjs.org/package/multiparty#readme) and - [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme) - * [formidable](https://www.npmjs.org/package/formidable#readme) - * [multer](https://www.npmjs.org/package/multer#readme) - -This module provides the following parsers: - - * [JSON body parser](#bodyparserjsonoptions) - * [Raw body parser](#bodyparserrawoptions) - * [Text body parser](#bodyparsertextoptions) - * [URL-encoded form body parser](#bodyparserurlencodedoptions) - -Other body parsers you might be interested in: - -- [body](https://www.npmjs.org/package/body#readme) -- [co-body](https://www.npmjs.org/package/co-body#readme) - -## Installation - -```sh -$ npm install body-parser -``` - -## API - - - -```js -var bodyParser = require('body-parser') -``` - -The `bodyParser` object exposes various factories to create middlewares. All -middlewares will populate the `req.body` property with the parsed body when -the `Content-Type` request header matches the `type` option, or an empty -object (`{}`) if there was no body to parse, the `Content-Type` was not matched, -or an error occurred. - -The various errors returned by this module are described in the -[errors section](#errors). - -### bodyParser.json([options]) - -Returns middleware that only parses `json` and only looks at requests where -the `Content-Type` header matches the `type` option. This parser accepts any -Unicode encoding of the body and supports automatic inflation of `gzip` and -`deflate` encodings. - -A new `body` object containing the parsed data is populated on the `request` -object after the middleware (i.e. `req.body`). - -#### Options - -The `json` function takes an optional `options` object that may contain any of -the following keys: - -##### inflate - -When set to `true`, then deflated (compressed) bodies will be inflated; when -`false`, deflated bodies are rejected. Defaults to `true`. - -##### limit - -Controls the maximum request body size. If this is a number, then the value -specifies the number of bytes; if it is a string, the value is passed to the -[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults -to `'100kb'`. - -##### reviver - -The `reviver` option is passed directly to `JSON.parse` as the second -argument. You can find more information on this argument -[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter). - -##### strict - -When set to `true`, will only accept arrays and objects; when `false` will -accept anything `JSON.parse` accepts. Defaults to `true`. - -##### type - -The `type` option is used to determine what media type the middleware will -parse. This option can be a string, array of strings, or a function. If not a -function, `type` option is passed directly to the -[type-is](https://www.npmjs.org/package/type-is#readme) library and this can -be an extension name (like `json`), a mime type (like `application/json`), or -a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type` -option is called as `fn(req)` and the request is parsed if it returns a truthy -value. Defaults to `application/json`. - -##### verify - -The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, -where `buf` is a `Buffer` of the raw request body and `encoding` is the -encoding of the request. The parsing can be aborted by throwing an error. - -### bodyParser.raw([options]) - -Returns middleware that parses all bodies as a `Buffer` and only looks at -requests where the `Content-Type` header matches the `type` option. This -parser supports automatic inflation of `gzip` and `deflate` encodings. - -A new `body` object containing the parsed data is populated on the `request` -object after the middleware (i.e. `req.body`). This will be a `Buffer` object -of the body. - -#### Options - -The `raw` function takes an optional `options` object that may contain any of -the following keys: - -##### inflate - -When set to `true`, then deflated (compressed) bodies will be inflated; when -`false`, deflated bodies are rejected. Defaults to `true`. - -##### limit - -Controls the maximum request body size. If this is a number, then the value -specifies the number of bytes; if it is a string, the value is passed to the -[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults -to `'100kb'`. - -##### type - -The `type` option is used to determine what media type the middleware will -parse. This option can be a string, array of strings, or a function. -If not a function, `type` option is passed directly to the -[type-is](https://www.npmjs.org/package/type-is#readme) library and this -can be an extension name (like `bin`), a mime type (like -`application/octet-stream`), or a mime type with a wildcard (like `*/*` or -`application/*`). If a function, the `type` option is called as `fn(req)` -and the request is parsed if it returns a truthy value. Defaults to -`application/octet-stream`. - -##### verify - -The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, -where `buf` is a `Buffer` of the raw request body and `encoding` is the -encoding of the request. The parsing can be aborted by throwing an error. - -### bodyParser.text([options]) - -Returns middleware that parses all bodies as a string and only looks at -requests where the `Content-Type` header matches the `type` option. This -parser supports automatic inflation of `gzip` and `deflate` encodings. - -A new `body` string containing the parsed data is populated on the `request` -object after the middleware (i.e. `req.body`). This will be a string of the -body. - -#### Options - -The `text` function takes an optional `options` object that may contain any of -the following keys: - -##### defaultCharset - -Specify the default character set for the text content if the charset is not -specified in the `Content-Type` header of the request. Defaults to `utf-8`. - -##### inflate - -When set to `true`, then deflated (compressed) bodies will be inflated; when -`false`, deflated bodies are rejected. Defaults to `true`. - -##### limit - -Controls the maximum request body size. If this is a number, then the value -specifies the number of bytes; if it is a string, the value is passed to the -[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults -to `'100kb'`. - -##### type - -The `type` option is used to determine what media type the middleware will -parse. This option can be a string, array of strings, or a function. If not -a function, `type` option is passed directly to the -[type-is](https://www.npmjs.org/package/type-is#readme) library and this can -be an extension name (like `txt`), a mime type (like `text/plain`), or a mime -type with a wildcard (like `*/*` or `text/*`). If a function, the `type` -option is called as `fn(req)` and the request is parsed if it returns a -truthy value. Defaults to `text/plain`. - -##### verify - -The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, -where `buf` is a `Buffer` of the raw request body and `encoding` is the -encoding of the request. The parsing can be aborted by throwing an error. - -### bodyParser.urlencoded([options]) - -Returns middleware that only parses `urlencoded` bodies and only looks at -requests where the `Content-Type` header matches the `type` option. This -parser accepts only UTF-8 encoding of the body and supports automatic -inflation of `gzip` and `deflate` encodings. - -A new `body` object containing the parsed data is populated on the `request` -object after the middleware (i.e. `req.body`). This object will contain -key-value pairs, where the value can be a string or array (when `extended` is -`false`), or any type (when `extended` is `true`). - -#### Options - -The `urlencoded` function takes an optional `options` object that may contain -any of the following keys: - -##### extended - -The `extended` option allows to choose between parsing the URL-encoded data -with the `querystring` library (when `false`) or the `qs` library (when -`true`). The "extended" syntax allows for rich objects and arrays to be -encoded into the URL-encoded format, allowing for a JSON-like experience -with URL-encoded. For more information, please -[see the qs library](https://www.npmjs.org/package/qs#readme). - -Defaults to `true`, but using the default has been deprecated. Please -research into the difference between `qs` and `querystring` and choose the -appropriate setting. - -##### inflate - -When set to `true`, then deflated (compressed) bodies will be inflated; when -`false`, deflated bodies are rejected. Defaults to `true`. - -##### limit - -Controls the maximum request body size. If this is a number, then the value -specifies the number of bytes; if it is a string, the value is passed to the -[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults -to `'100kb'`. - -##### parameterLimit - -The `parameterLimit` option controls the maximum number of parameters that -are allowed in the URL-encoded data. If a request contains more parameters -than this value, a 413 will be returned to the client. Defaults to `1000`. - -##### type - -The `type` option is used to determine what media type the middleware will -parse. This option can be a string, array of strings, or a function. If not -a function, `type` option is passed directly to the -[type-is](https://www.npmjs.org/package/type-is#readme) library and this can -be an extension name (like `urlencoded`), a mime type (like -`application/x-www-form-urlencoded`), or a mime type with a wildcard (like -`*/x-www-form-urlencoded`). If a function, the `type` option is called as -`fn(req)` and the request is parsed if it returns a truthy value. Defaults -to `application/x-www-form-urlencoded`. - -##### verify - -The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, -where `buf` is a `Buffer` of the raw request body and `encoding` is the -encoding of the request. The parsing can be aborted by throwing an error. - -## Errors - -The middlewares provided by this module create errors depending on the error -condition during parsing. The errors will typically have a `status`/`statusCode` -property that contains the suggested HTTP response code, an `expose` property -to determine if the `message` property should be displayed to the client, a -`type` property to determine the type of error without matching against the -`message`, and a `body` property containing the read body, if available. - -The following are the common errors emitted, though any error can come through -for various reasons. - -### content encoding unsupported - -This error will occur when the request had a `Content-Encoding` header that -contained an encoding but the "inflation" option was set to `false`. The -`status` property is set to `415`, the `type` property is set to -`'encoding.unsupported'`, and the `charset` property will be set to the -encoding that is unsupported. - -### request aborted - -This error will occur when the request is aborted by the client before reading -the body has finished. The `received` property will be set to the number of -bytes received before the request was aborted and the `expected` property is -set to the number of expected bytes. The `status` property is set to `400` -and `type` property is set to `'request.aborted'`. - -### request entity too large - -This error will occur when the request body's size is larger than the "limit" -option. The `limit` property will be set to the byte limit and the `length` -property will be set to the request body's length. The `status` property is -set to `413` and the `type` property is set to `'entity.too.large'`. - -### request size did not match content length - -This error will occur when the request's length did not match the length from -the `Content-Length` header. This typically occurs when the request is malformed, -typically when the `Content-Length` header was calculated based on characters -instead of bytes. The `status` property is set to `400` and the `type` property -is set to `'request.size.invalid'`. - -### stream encoding should not be set - -This error will occur when something called the `req.setEncoding` method prior -to this middleware. This module operates directly on bytes only and you cannot -call `req.setEncoding` when using this module. The `status` property is set to -`500` and the `type` property is set to `'stream.encoding.set'`. - -### too many parameters - -This error will occur when the content of the request exceeds the configured -`parameterLimit` for the `urlencoded` parser. The `status` property is set to -`413` and the `type` property is set to `'parameters.too.many'`. - -### unsupported charset "BOGUS" - -This error will occur when the request had a charset parameter in the -`Content-Type` header, but the `iconv-lite` module does not support it OR the -parser does not support it. The charset is contained in the message as well -as in the `charset` property. The `status` property is set to `415`, the -`type` property is set to `'charset.unsupported'`, and the `charset` property -is set to the charset that is unsupported. - -### unsupported content encoding "bogus" - -This error will occur when the request had a `Content-Encoding` header that -contained an unsupported encoding. The encoding is contained in the message -as well as in the `encoding` property. The `status` property is set to `415`, -the `type` property is set to `'encoding.unsupported'`, and the `encoding` -property is set to the encoding that is unsupported. - -## Examples - -### Express/Connect top-level generic - -This example demonstrates adding a generic JSON and URL-encoded parser as a -top-level middleware, which will parse the bodies of all incoming requests. -This is the simplest setup. - -```js -var express = require('express') -var bodyParser = require('body-parser') - -var app = express() - -// parse application/x-www-form-urlencoded -app.use(bodyParser.urlencoded({ extended: false })) - -// parse application/json -app.use(bodyParser.json()) - -app.use(function (req, res) { - res.setHeader('Content-Type', 'text/plain') - res.write('you posted:\n') - res.end(JSON.stringify(req.body, null, 2)) -}) -``` - -### Express route-specific - -This example demonstrates adding body parsers specifically to the routes that -need them. In general, this is the most recommended way to use body-parser with -Express. - -```js -var express = require('express') -var bodyParser = require('body-parser') - -var app = express() - -// create application/json parser -var jsonParser = bodyParser.json() - -// create application/x-www-form-urlencoded parser -var urlencodedParser = bodyParser.urlencoded({ extended: false }) - -// POST /login gets urlencoded bodies -app.post('/login', urlencodedParser, function (req, res) { - if (!req.body) return res.sendStatus(400) - res.send('welcome, ' + req.body.username) -}) - -// POST /api/users gets JSON bodies -app.post('/api/users', jsonParser, function (req, res) { - if (!req.body) return res.sendStatus(400) - // create user in req.body -}) -``` - -### Change accepted type for parsers - -All the parsers accept a `type` option which allows you to change the -`Content-Type` that the middleware will parse. - -```js -var express = require('express') -var bodyParser = require('body-parser') - -var app = express() - -// parse various different custom JSON types as JSON -app.use(bodyParser.json({ type: 'application/*+json' })) - -// parse some custom thing into a Buffer -app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) - -// parse an HTML body into a string -app.use(bodyParser.text({ type: 'text/html' })) -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/body-parser.svg -[npm-url]: https://npmjs.org/package/body-parser -[travis-image]: https://img.shields.io/travis/expressjs/body-parser/master.svg -[travis-url]: https://travis-ci.org/expressjs/body-parser -[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg -[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master -[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg -[downloads-url]: https://npmjs.org/package/body-parser diff --git a/truebit-implementation/node_modules/body-parser/index.js b/truebit-implementation/node_modules/body-parser/index.js deleted file mode 100644 index 93c3a1ff..00000000 --- a/truebit-implementation/node_modules/body-parser/index.js +++ /dev/null @@ -1,157 +0,0 @@ -/*! - * body-parser - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var deprecate = require('depd')('body-parser') - -/** - * Cache of loaded parsers. - * @private - */ - -var parsers = Object.create(null) - -/** - * @typedef Parsers - * @type {function} - * @property {function} json - * @property {function} raw - * @property {function} text - * @property {function} urlencoded - */ - -/** - * Module exports. - * @type {Parsers} - */ - -exports = module.exports = deprecate.function(bodyParser, - 'bodyParser: use individual json/urlencoded middlewares') - -/** - * JSON parser. - * @public - */ - -Object.defineProperty(exports, 'json', { - configurable: true, - enumerable: true, - get: createParserGetter('json') -}) - -/** - * Raw parser. - * @public - */ - -Object.defineProperty(exports, 'raw', { - configurable: true, - enumerable: true, - get: createParserGetter('raw') -}) - -/** - * Text parser. - * @public - */ - -Object.defineProperty(exports, 'text', { - configurable: true, - enumerable: true, - get: createParserGetter('text') -}) - -/** - * URL-encoded parser. - * @public - */ - -Object.defineProperty(exports, 'urlencoded', { - configurable: true, - enumerable: true, - get: createParserGetter('urlencoded') -}) - -/** - * Create a middleware to parse json and urlencoded bodies. - * - * @param {object} [options] - * @return {function} - * @deprecated - * @public - */ - -function bodyParser (options) { - var opts = {} - - // exclude type option - if (options) { - for (var prop in options) { - if (prop !== 'type') { - opts[prop] = options[prop] - } - } - } - - var _urlencoded = exports.urlencoded(opts) - var _json = exports.json(opts) - - return function bodyParser (req, res, next) { - _json(req, res, function (err) { - if (err) return next(err) - _urlencoded(req, res, next) - }) - } -} - -/** - * Create a getter for loading a parser. - * @private - */ - -function createParserGetter (name) { - return function get () { - return loadParser(name) - } -} - -/** - * Load a parser module. - * @private - */ - -function loadParser (parserName) { - var parser = parsers[parserName] - - if (parser !== undefined) { - return parser - } - - // this uses a switch for static require analysis - switch (parserName) { - case 'json': - parser = require('./lib/types/json') - break - case 'raw': - parser = require('./lib/types/raw') - break - case 'text': - parser = require('./lib/types/text') - break - case 'urlencoded': - parser = require('./lib/types/urlencoded') - break - } - - // store to prevent invoking require() - return (parsers[parserName] = parser) -} diff --git a/truebit-implementation/node_modules/body-parser/lib/read.js b/truebit-implementation/node_modules/body-parser/lib/read.js deleted file mode 100644 index c1026095..00000000 --- a/truebit-implementation/node_modules/body-parser/lib/read.js +++ /dev/null @@ -1,181 +0,0 @@ -/*! - * body-parser - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var createError = require('http-errors') -var getBody = require('raw-body') -var iconv = require('iconv-lite') -var onFinished = require('on-finished') -var zlib = require('zlib') - -/** - * Module exports. - */ - -module.exports = read - -/** - * Read a request into a buffer and parse. - * - * @param {object} req - * @param {object} res - * @param {function} next - * @param {function} parse - * @param {function} debug - * @param {object} options - * @private - */ - -function read (req, res, next, parse, debug, options) { - var length - var opts = options - var stream - - // flag as parsed - req._body = true - - // read options - var encoding = opts.encoding !== null - ? opts.encoding - : null - var verify = opts.verify - - try { - // get the content stream - stream = contentstream(req, debug, opts.inflate) - length = stream.length - stream.length = undefined - } catch (err) { - return next(err) - } - - // set raw-body options - opts.length = length - opts.encoding = verify - ? null - : encoding - - // assert charset is supported - if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { - return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { - charset: encoding.toLowerCase(), - type: 'charset.unsupported' - })) - } - - // read body - debug('read body') - getBody(stream, opts, function (error, body) { - if (error) { - var _error - - if (error.type === 'encoding.unsupported') { - // echo back charset - _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { - charset: encoding.toLowerCase(), - type: 'charset.unsupported' - }) - } else { - // set status code on error - _error = createError(400, error) - } - - // read off entire request - stream.resume() - onFinished(req, function onfinished () { - next(createError(400, _error)) - }) - return - } - - // verify - if (verify) { - try { - debug('verify body') - verify(req, res, body, encoding) - } catch (err) { - next(createError(403, err, { - body: body, - type: err.type || 'entity.verify.failed' - })) - return - } - } - - // parse - var str = body - try { - debug('parse body') - str = typeof body !== 'string' && encoding !== null - ? iconv.decode(body, encoding) - : body - req.body = parse(str) - } catch (err) { - next(createError(400, err, { - body: str, - type: err.type || 'entity.parse.failed' - })) - return - } - - next() - }) -} - -/** - * Get the content stream of the request. - * - * @param {object} req - * @param {function} debug - * @param {boolean} [inflate=true] - * @return {object} - * @api private - */ - -function contentstream (req, debug, inflate) { - var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase() - var length = req.headers['content-length'] - var stream - - debug('content-encoding "%s"', encoding) - - if (inflate === false && encoding !== 'identity') { - throw createError(415, 'content encoding unsupported', { - encoding: encoding, - type: 'encoding.unsupported' - }) - } - - switch (encoding) { - case 'deflate': - stream = zlib.createInflate() - debug('inflate body') - req.pipe(stream) - break - case 'gzip': - stream = zlib.createGunzip() - debug('gunzip body') - req.pipe(stream) - break - case 'identity': - stream = req - stream.length = length - break - default: - throw createError(415, 'unsupported content encoding "' + encoding + '"', { - encoding: encoding, - type: 'encoding.unsupported' - }) - } - - return stream -} diff --git a/truebit-implementation/node_modules/body-parser/lib/types/json.js b/truebit-implementation/node_modules/body-parser/lib/types/json.js deleted file mode 100644 index 2971dc14..00000000 --- a/truebit-implementation/node_modules/body-parser/lib/types/json.js +++ /dev/null @@ -1,230 +0,0 @@ -/*! - * body-parser - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var bytes = require('bytes') -var contentType = require('content-type') -var createError = require('http-errors') -var debug = require('debug')('body-parser:json') -var read = require('../read') -var typeis = require('type-is') - -/** - * Module exports. - */ - -module.exports = json - -/** - * RegExp to match the first non-space in a string. - * - * Allowed whitespace is defined in RFC 7159: - * - * ws = *( - * %x20 / ; Space - * %x09 / ; Horizontal tab - * %x0A / ; Line feed or New line - * %x0D ) ; Carriage return - */ - -var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex - -/** - * Create a middleware to parse JSON bodies. - * - * @param {object} [options] - * @return {function} - * @public - */ - -function json (options) { - var opts = options || {} - - var limit = typeof opts.limit !== 'number' - ? bytes.parse(opts.limit || '100kb') - : opts.limit - var inflate = opts.inflate !== false - var reviver = opts.reviver - var strict = opts.strict !== false - var type = opts.type || 'application/json' - var verify = opts.verify || false - - if (verify !== false && typeof verify !== 'function') { - throw new TypeError('option verify must be function') - } - - // create the appropriate type checking function - var shouldParse = typeof type !== 'function' - ? typeChecker(type) - : type - - function parse (body) { - if (body.length === 0) { - // special-case empty json body, as it's a common client-side mistake - // TODO: maybe make this configurable or part of "strict" option - return {} - } - - if (strict) { - var first = firstchar(body) - - if (first !== '{' && first !== '[') { - debug('strict violation') - throw createStrictSyntaxError(body, first) - } - } - - try { - debug('parse json') - return JSON.parse(body, reviver) - } catch (e) { - throw normalizeJsonSyntaxError(e, { - message: e.message, - stack: e.stack - }) - } - } - - return function jsonParser (req, res, next) { - if (req._body) { - debug('body already parsed') - next() - return - } - - req.body = req.body || {} - - // skip requests without bodies - if (!typeis.hasBody(req)) { - debug('skip empty body') - next() - return - } - - debug('content-type %j', req.headers['content-type']) - - // determine if request should be parsed - if (!shouldParse(req)) { - debug('skip parsing') - next() - return - } - - // assert charset per RFC 7159 sec 8.1 - var charset = getCharset(req) || 'utf-8' - if (charset.substr(0, 4) !== 'utf-') { - debug('invalid charset') - next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { - charset: charset, - type: 'charset.unsupported' - })) - return - } - - // read - read(req, res, next, parse, debug, { - encoding: charset, - inflate: inflate, - limit: limit, - verify: verify - }) - } -} - -/** - * Create strict violation syntax error matching native error. - * - * @param {string} str - * @param {string} char - * @return {Error} - * @private - */ - -function createStrictSyntaxError (str, char) { - var index = str.indexOf(char) - var partial = str.substring(0, index) + '#' - - try { - JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') - } catch (e) { - return normalizeJsonSyntaxError(e, { - message: e.message.replace('#', char), - stack: e.stack - }) - } -} - -/** - * Get the first non-whitespace character in a string. - * - * @param {string} str - * @return {function} - * @private - */ - -function firstchar (str) { - return FIRST_CHAR_REGEXP.exec(str)[1] -} - -/** - * Get the charset of a request. - * - * @param {object} req - * @api private - */ - -function getCharset (req) { - try { - return (contentType.parse(req).parameters.charset || '').toLowerCase() - } catch (e) { - return undefined - } -} - -/** - * Normalize a SyntaxError for JSON.parse. - * - * @param {SyntaxError} error - * @param {object} obj - * @return {SyntaxError} - */ - -function normalizeJsonSyntaxError (error, obj) { - var keys = Object.getOwnPropertyNames(error) - - for (var i = 0; i < keys.length; i++) { - var key = keys[i] - if (key !== 'stack' && key !== 'message') { - delete error[key] - } - } - - // replace stack before message for Node.js 0.10 and below - error.stack = obj.stack.replace(error.message, obj.message) - error.message = obj.message - - return error -} - -/** - * Get the simple type checker. - * - * @param {string} type - * @return {function} - */ - -function typeChecker (type) { - return function checkType (req) { - return Boolean(typeis(req, type)) - } -} diff --git a/truebit-implementation/node_modules/body-parser/lib/types/raw.js b/truebit-implementation/node_modules/body-parser/lib/types/raw.js deleted file mode 100644 index f5d1b674..00000000 --- a/truebit-implementation/node_modules/body-parser/lib/types/raw.js +++ /dev/null @@ -1,101 +0,0 @@ -/*! - * body-parser - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - */ - -var bytes = require('bytes') -var debug = require('debug')('body-parser:raw') -var read = require('../read') -var typeis = require('type-is') - -/** - * Module exports. - */ - -module.exports = raw - -/** - * Create a middleware to parse raw bodies. - * - * @param {object} [options] - * @return {function} - * @api public - */ - -function raw (options) { - var opts = options || {} - - var inflate = opts.inflate !== false - var limit = typeof opts.limit !== 'number' - ? bytes.parse(opts.limit || '100kb') - : opts.limit - var type = opts.type || 'application/octet-stream' - var verify = opts.verify || false - - if (verify !== false && typeof verify !== 'function') { - throw new TypeError('option verify must be function') - } - - // create the appropriate type checking function - var shouldParse = typeof type !== 'function' - ? typeChecker(type) - : type - - function parse (buf) { - return buf - } - - return function rawParser (req, res, next) { - if (req._body) { - debug('body already parsed') - next() - return - } - - req.body = req.body || {} - - // skip requests without bodies - if (!typeis.hasBody(req)) { - debug('skip empty body') - next() - return - } - - debug('content-type %j', req.headers['content-type']) - - // determine if request should be parsed - if (!shouldParse(req)) { - debug('skip parsing') - next() - return - } - - // read - read(req, res, next, parse, debug, { - encoding: null, - inflate: inflate, - limit: limit, - verify: verify - }) - } -} - -/** - * Get the simple type checker. - * - * @param {string} type - * @return {function} - */ - -function typeChecker (type) { - return function checkType (req) { - return Boolean(typeis(req, type)) - } -} diff --git a/truebit-implementation/node_modules/body-parser/lib/types/text.js b/truebit-implementation/node_modules/body-parser/lib/types/text.js deleted file mode 100644 index 083a0090..00000000 --- a/truebit-implementation/node_modules/body-parser/lib/types/text.js +++ /dev/null @@ -1,121 +0,0 @@ -/*! - * body-parser - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - */ - -var bytes = require('bytes') -var contentType = require('content-type') -var debug = require('debug')('body-parser:text') -var read = require('../read') -var typeis = require('type-is') - -/** - * Module exports. - */ - -module.exports = text - -/** - * Create a middleware to parse text bodies. - * - * @param {object} [options] - * @return {function} - * @api public - */ - -function text (options) { - var opts = options || {} - - var defaultCharset = opts.defaultCharset || 'utf-8' - var inflate = opts.inflate !== false - var limit = typeof opts.limit !== 'number' - ? bytes.parse(opts.limit || '100kb') - : opts.limit - var type = opts.type || 'text/plain' - var verify = opts.verify || false - - if (verify !== false && typeof verify !== 'function') { - throw new TypeError('option verify must be function') - } - - // create the appropriate type checking function - var shouldParse = typeof type !== 'function' - ? typeChecker(type) - : type - - function parse (buf) { - return buf - } - - return function textParser (req, res, next) { - if (req._body) { - debug('body already parsed') - next() - return - } - - req.body = req.body || {} - - // skip requests without bodies - if (!typeis.hasBody(req)) { - debug('skip empty body') - next() - return - } - - debug('content-type %j', req.headers['content-type']) - - // determine if request should be parsed - if (!shouldParse(req)) { - debug('skip parsing') - next() - return - } - - // get charset - var charset = getCharset(req) || defaultCharset - - // read - read(req, res, next, parse, debug, { - encoding: charset, - inflate: inflate, - limit: limit, - verify: verify - }) - } -} - -/** - * Get the charset of a request. - * - * @param {object} req - * @api private - */ - -function getCharset (req) { - try { - return (contentType.parse(req).parameters.charset || '').toLowerCase() - } catch (e) { - return undefined - } -} - -/** - * Get the simple type checker. - * - * @param {string} type - * @return {function} - */ - -function typeChecker (type) { - return function checkType (req) { - return Boolean(typeis(req, type)) - } -} diff --git a/truebit-implementation/node_modules/body-parser/lib/types/urlencoded.js b/truebit-implementation/node_modules/body-parser/lib/types/urlencoded.js deleted file mode 100644 index 5ccda218..00000000 --- a/truebit-implementation/node_modules/body-parser/lib/types/urlencoded.js +++ /dev/null @@ -1,284 +0,0 @@ -/*! - * body-parser - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var bytes = require('bytes') -var contentType = require('content-type') -var createError = require('http-errors') -var debug = require('debug')('body-parser:urlencoded') -var deprecate = require('depd')('body-parser') -var read = require('../read') -var typeis = require('type-is') - -/** - * Module exports. - */ - -module.exports = urlencoded - -/** - * Cache of parser modules. - */ - -var parsers = Object.create(null) - -/** - * Create a middleware to parse urlencoded bodies. - * - * @param {object} [options] - * @return {function} - * @public - */ - -function urlencoded (options) { - var opts = options || {} - - // notice because option default will flip in next major - if (opts.extended === undefined) { - deprecate('undefined extended: provide extended option') - } - - var extended = opts.extended !== false - var inflate = opts.inflate !== false - var limit = typeof opts.limit !== 'number' - ? bytes.parse(opts.limit || '100kb') - : opts.limit - var type = opts.type || 'application/x-www-form-urlencoded' - var verify = opts.verify || false - - if (verify !== false && typeof verify !== 'function') { - throw new TypeError('option verify must be function') - } - - // create the appropriate query parser - var queryparse = extended - ? extendedparser(opts) - : simpleparser(opts) - - // create the appropriate type checking function - var shouldParse = typeof type !== 'function' - ? typeChecker(type) - : type - - function parse (body) { - return body.length - ? queryparse(body) - : {} - } - - return function urlencodedParser (req, res, next) { - if (req._body) { - debug('body already parsed') - next() - return - } - - req.body = req.body || {} - - // skip requests without bodies - if (!typeis.hasBody(req)) { - debug('skip empty body') - next() - return - } - - debug('content-type %j', req.headers['content-type']) - - // determine if request should be parsed - if (!shouldParse(req)) { - debug('skip parsing') - next() - return - } - - // assert charset - var charset = getCharset(req) || 'utf-8' - if (charset !== 'utf-8') { - debug('invalid charset') - next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { - charset: charset, - type: 'charset.unsupported' - })) - return - } - - // read - read(req, res, next, parse, debug, { - debug: debug, - encoding: charset, - inflate: inflate, - limit: limit, - verify: verify - }) - } -} - -/** - * Get the extended query parser. - * - * @param {object} options - */ - -function extendedparser (options) { - var parameterLimit = options.parameterLimit !== undefined - ? options.parameterLimit - : 1000 - var parse = parser('qs') - - if (isNaN(parameterLimit) || parameterLimit < 1) { - throw new TypeError('option parameterLimit must be a positive number') - } - - if (isFinite(parameterLimit)) { - parameterLimit = parameterLimit | 0 - } - - return function queryparse (body) { - var paramCount = parameterCount(body, parameterLimit) - - if (paramCount === undefined) { - debug('too many parameters') - throw createError(413, 'too many parameters', { - type: 'parameters.too.many' - }) - } - - var arrayLimit = Math.max(100, paramCount) - - debug('parse extended urlencoding') - return parse(body, { - allowPrototypes: true, - arrayLimit: arrayLimit, - depth: Infinity, - parameterLimit: parameterLimit - }) - } -} - -/** - * Get the charset of a request. - * - * @param {object} req - * @api private - */ - -function getCharset (req) { - try { - return (contentType.parse(req).parameters.charset || '').toLowerCase() - } catch (e) { - return undefined - } -} - -/** - * Count the number of parameters, stopping once limit reached - * - * @param {string} body - * @param {number} limit - * @api private - */ - -function parameterCount (body, limit) { - var count = 0 - var index = 0 - - while ((index = body.indexOf('&', index)) !== -1) { - count++ - index++ - - if (count === limit) { - return undefined - } - } - - return count -} - -/** - * Get parser for module name dynamically. - * - * @param {string} name - * @return {function} - * @api private - */ - -function parser (name) { - var mod = parsers[name] - - if (mod !== undefined) { - return mod.parse - } - - // this uses a switch for static require analysis - switch (name) { - case 'qs': - mod = require('qs') - break - case 'querystring': - mod = require('querystring') - break - } - - // store to prevent invoking require() - parsers[name] = mod - - return mod.parse -} - -/** - * Get the simple query parser. - * - * @param {object} options - */ - -function simpleparser (options) { - var parameterLimit = options.parameterLimit !== undefined - ? options.parameterLimit - : 1000 - var parse = parser('querystring') - - if (isNaN(parameterLimit) || parameterLimit < 1) { - throw new TypeError('option parameterLimit must be a positive number') - } - - if (isFinite(parameterLimit)) { - parameterLimit = parameterLimit | 0 - } - - return function queryparse (body) { - var paramCount = parameterCount(body, parameterLimit) - - if (paramCount === undefined) { - debug('too many parameters') - throw createError(413, 'too many parameters', { - type: 'parameters.too.many' - }) - } - - debug('parse urlencoding') - return parse(body, undefined, undefined, {maxKeys: parameterLimit}) - } -} - -/** - * Get the simple type checker. - * - * @param {string} type - * @return {function} - */ - -function typeChecker (type) { - return function checkType (req) { - return Boolean(typeis(req, type)) - } -} diff --git a/truebit-implementation/node_modules/body-parser/package.json b/truebit-implementation/node_modules/body-parser/package.json deleted file mode 100644 index 1f03bba3..00000000 --- a/truebit-implementation/node_modules/body-parser/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_from": "body-parser@^1.16.0", - "_id": "body-parser@1.18.3", - "_inBundle": false, - "_integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "_location": "/body-parser", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "body-parser@^1.16.0", - "name": "body-parser", - "escapedName": "body-parser", - "rawSpec": "^1.16.0", - "saveSpec": null, - "fetchSpec": "^1.16.0" - }, - "_requiredBy": [ - "/express", - "/servify" - ], - "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "_shasum": "5b292198ffdd553b3a0f20ded0592b956955c8b4", - "_spec": "body-parser@^1.16.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/servify", - "bugs": { - "url": "https://github.com/expressjs/body-parser/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "dependencies": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "deprecated": false, - "description": "Node.js body parsing middleware", - "devDependencies": { - "eslint": "4.19.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.11.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.7.0", - "eslint-plugin-standard": "3.1.0", - "istanbul": "0.4.5", - "methods": "1.1.2", - "mocha": "2.5.3", - "safe-buffer": "5.1.2", - "supertest": "1.1.0" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "lib/", - "LICENSE", - "HISTORY.md", - "index.js" - ], - "homepage": "https://github.com/expressjs/body-parser#readme", - "license": "MIT", - "name": "body-parser", - "repository": { - "type": "git", - "url": "git+https://github.com/expressjs/body-parser.git" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/" - }, - "version": "1.18.3" -} diff --git a/truebit-implementation/node_modules/brace-expansion/LICENSE b/truebit-implementation/node_modules/brace-expansion/LICENSE deleted file mode 100644 index de322667..00000000 --- a/truebit-implementation/node_modules/brace-expansion/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/brace-expansion/README.md b/truebit-implementation/node_modules/brace-expansion/README.md deleted file mode 100644 index 6b4e0e16..00000000 --- a/truebit-implementation/node_modules/brace-expansion/README.md +++ /dev/null @@ -1,129 +0,0 @@ -# brace-expansion - -[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), -as known from sh/bash, in JavaScript. - -[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) -[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) -[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) - -[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) - -## Example - -```js -var expand = require('brace-expansion'); - -expand('file-{a,b,c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('-v{,,}') -// => ['-v', '-v', '-v'] - -expand('file{0..2}.jpg') -// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] - -expand('file-{a..c}.jpg') -// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] - -expand('file{2..0}.jpg') -// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] - -expand('file{0..4..2}.jpg') -// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] - -expand('file-{a..e..2}.jpg') -// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] - -expand('file{00..10..5}.jpg') -// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] - -expand('{{A..C},{a..c}}') -// => ['A', 'B', 'C', 'a', 'b', 'c'] - -expand('ppp{,config,oe{,conf}}') -// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] -``` - -## API - -```js -var expand = require('brace-expansion'); -``` - -### var expanded = expand(str) - -Return an array of all possible and valid expansions of `str`. If none are -found, `[str]` is returned. - -Valid expansions are: - -```js -/^(.*,)+(.+)?$/ -// {a,b,...} -``` - -A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -A numeric sequence from `x` to `y` inclusive, with optional increment. -If `x` or `y` start with a leading `0`, all the numbers will be padded -to have equal length. Negative numbers and backwards iteration work too. - -```js -/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ -// {x..y[..incr]} -``` - -An alphabetic sequence from `x` to `y` inclusive, with optional increment. -`x` and `y` must be exactly one character, and if given, `incr` must be a -number. - -For compatibility reasons, the string `${` is not eligible for brace expansion. - -## Installation - -With [npm](https://npmjs.org) do: - -```bash -npm install brace-expansion -``` - -## Contributors - -- [Julian Gruber](https://github.com/juliangruber) -- [Isaac Z. Schlueter](https://github.com/isaacs) - -## Sponsors - -This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! - -Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/brace-expansion/index.js b/truebit-implementation/node_modules/brace-expansion/index.js deleted file mode 100644 index 0478be81..00000000 --- a/truebit-implementation/node_modules/brace-expansion/index.js +++ /dev/null @@ -1,201 +0,0 @@ -var concatMap = require('concat-map'); -var balanced = require('balanced-match'); - -module.exports = expandTop; - -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; - -function numeric(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} - -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} - -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} - - -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; - - var parts = []; - var m = balanced('{', '}', str); - - if (!m) - return str.split(','); - - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); - - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } - - parts.push.apply(parts, p); - - return parts; -} - -function expandTop(str) { - if (!str) - return []; - - // I don't know why Bash 4.3 does this, but it does. - // Anything starting with {} will have the first two bytes preserved - // but *only* at the top level, so {},a}b will not expand to anything, - // but a{},b}c will be expanded to [a}c,abc]. - // One could argue that this is a bug in Bash, but since the goal of - // this module is to match Bash's rules, we escape a leading {} - if (str.substr(0, 2) === '{}') { - str = '\\{\\}' + str.substr(2); - } - - return expand(escapeBraces(str), true).map(unescapeBraces); -} - -function identity(e) { - return e; -} - -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} - -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; -} - -function expand(str, isTop) { - var expansions = []; - - var m = balanced('{', '}', str); - if (!m || /\$$/.test(m.pre)) return [str]; - - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = m.body.indexOf(',') >= 0; - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*\}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); - } - return [str]; - } - - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0], false).map(embrace); - if (n.length === 1) { - var post = m.post.length - ? expand(m.post, false) - : ['']; - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. - - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand(m.post, false) - : ['']; - - var N; - - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length) - var incr = n.length == 3 - ? Math.abs(numeric(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - - N = []; - - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = concatMap(n, function(el) { return expand(el, false) }); - } - - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - var expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) - expansions.push(expansion); - } - } - - return expansions; -} - diff --git a/truebit-implementation/node_modules/brace-expansion/package.json b/truebit-implementation/node_modules/brace-expansion/package.json deleted file mode 100644 index 8a17a840..00000000 --- a/truebit-implementation/node_modules/brace-expansion/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "brace-expansion@^1.1.7", - "_id": "brace-expansion@1.1.11", - "_inBundle": false, - "_integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "_location": "/brace-expansion", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "brace-expansion@^1.1.7", - "name": "brace-expansion", - "escapedName": "brace-expansion", - "rawSpec": "^1.1.7", - "saveSpec": null, - "fetchSpec": "^1.1.7" - }, - "_requiredBy": [ - "/minimatch" - ], - "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "_shasum": "3c7fcbf529d87226f3d2f52b966ff5271eb441dd", - "_spec": "brace-expansion@^1.1.7", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/minimatch", - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/brace-expansion/issues" - }, - "bundleDependencies": false, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - }, - "deprecated": false, - "description": "Brace expansion as known from sh/bash", - "devDependencies": { - "matcha": "^0.7.0", - "tape": "^4.6.0" - }, - "homepage": "https://github.com/juliangruber/brace-expansion", - "keywords": [], - "license": "MIT", - "main": "index.js", - "name": "brace-expansion", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/brace-expansion.git" - }, - "scripts": { - "bench": "matcha test/perf/bench.js", - "gentest": "bash test/generate.sh", - "test": "tape test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "firefox/20..latest", - "firefox/nightly", - "chrome/25..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - }, - "version": "1.1.11" -} diff --git a/truebit-implementation/node_modules/brorand/.npmignore b/truebit-implementation/node_modules/brorand/.npmignore deleted file mode 100644 index 1ca95717..00000000 --- a/truebit-implementation/node_modules/brorand/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log diff --git a/truebit-implementation/node_modules/brorand/README.md b/truebit-implementation/node_modules/brorand/README.md deleted file mode 100644 index f80437d1..00000000 --- a/truebit-implementation/node_modules/brorand/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Brorand - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2014. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/brorand/index.js b/truebit-implementation/node_modules/brorand/index.js deleted file mode 100644 index 9a0fff4d..00000000 --- a/truebit-implementation/node_modules/brorand/index.js +++ /dev/null @@ -1,65 +0,0 @@ -var r; - -module.exports = function rand(len) { - if (!r) - r = new Rand(null); - - return r.generate(len); -}; - -function Rand(rand) { - this.rand = rand; -} -module.exports.Rand = Rand; - -Rand.prototype.generate = function generate(len) { - return this._rand(len); -}; - -// Emulate crypto API using randy -Rand.prototype._rand = function _rand(n) { - if (this.rand.getBytes) - return this.rand.getBytes(n); - - var res = new Uint8Array(n); - for (var i = 0; i < res.length; i++) - res[i] = this.rand.getByte(); - return res; -}; - -if (typeof self === 'object') { - if (self.crypto && self.crypto.getRandomValues) { - // Modern browsers - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.crypto.getRandomValues(arr); - return arr; - }; - } else if (self.msCrypto && self.msCrypto.getRandomValues) { - // IE - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.msCrypto.getRandomValues(arr); - return arr; - }; - - // Safari's WebWorkers do not have `crypto` - } else if (typeof window === 'object') { - // Old junk - Rand.prototype._rand = function() { - throw new Error('Not implemented yet'); - }; - } -} else { - // Node.js or Web worker with no crypto support - try { - var crypto = require('crypto'); - if (typeof crypto.randomBytes !== 'function') - throw new Error('Not supported'); - - Rand.prototype._rand = function _rand(n) { - return crypto.randomBytes(n); - }; - } catch (e) { - } -} diff --git a/truebit-implementation/node_modules/brorand/package.json b/truebit-implementation/node_modules/brorand/package.json deleted file mode 100644 index d474488d..00000000 --- a/truebit-implementation/node_modules/brorand/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "brorand@^1.0.1", - "_id": "brorand@1.1.0", - "_inBundle": false, - "_integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "_location": "/brorand", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "brorand@^1.0.1", - "name": "brorand", - "escapedName": "brorand", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/elliptic", - "/ethers/elliptic", - "/miller-rabin" - ], - "_resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "_shasum": "12c25efe40a45e3c323eb8675a0a0ce57b22371f", - "_spec": "brorand@^1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/elliptic", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "browser": { - "crypto": false - }, - "bugs": { - "url": "https://github.com/indutny/brorand/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Random number generator for browsers and node.js", - "devDependencies": { - "mocha": "^2.0.1" - }, - "homepage": "https://github.com/indutny/brorand", - "keywords": [ - "Random", - "RNG", - "browser", - "crypto" - ], - "license": "MIT", - "main": "index.js", - "name": "brorand", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/brorand.git" - }, - "scripts": { - "test": "mocha --reporter=spec test/**/*-test.js" - }, - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/brorand/test/api-test.js b/truebit-implementation/node_modules/brorand/test/api-test.js deleted file mode 100644 index b6c876d3..00000000 --- a/truebit-implementation/node_modules/brorand/test/api-test.js +++ /dev/null @@ -1,8 +0,0 @@ -var brorand = require('../'); -var assert = require('assert'); - -describe('Brorand', function() { - it('should generate random numbers', function() { - assert.equal(brorand(100).length, 100); - }); -}); diff --git a/truebit-implementation/node_modules/browserify-aes/.travis.yml b/truebit-implementation/node_modules/browserify-aes/.travis.yml deleted file mode 100644 index ccbb2b75..00000000 --- a/truebit-implementation/node_modules/browserify-aes/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -node_js: - - "4" - - "5" - - "6" - - "7" - - "8" -matrix: - include: - - node_js: "7" - env: TEST_SUITE=standard -env: - - TEST_SUITE=unit -script: npm run-script $TEST_SUITE diff --git a/truebit-implementation/node_modules/browserify-aes/LICENSE b/truebit-implementation/node_modules/browserify-aes/LICENSE deleted file mode 100644 index c6e36b5f..00000000 --- a/truebit-implementation/node_modules/browserify-aes/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2017 browserify-aes contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/browserify-aes/README.md b/truebit-implementation/node_modules/browserify-aes/README.md deleted file mode 100644 index 34fb309f..00000000 --- a/truebit-implementation/node_modules/browserify-aes/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# browserify-aes -[![Build Status](https://travis-ci.org/crypto-browserify/browserify-aes.svg)](https://travis-ci.org/crypto-browserify/browserify-aes) - -Node style aes for use in the browser. -Implements: - - - createCipher - - createCipheriv - - createDecipher - - createDecipheriv - - getCiphers - -In node.js, the `crypto` implementation is used, in browsers it falls back to a pure JavaScript implementation. - -Much of this library has been taken from the aes implementation in [triplesec](https://github.com/keybase/triplesec), a partial derivation of [crypto-js](https://code.google.com/p/crypto-js/). - -`EVP_BytesToKey` is a straight up port of the same function from OpenSSL as there is literally no documenation on it beyond it using 'undocumented extensions' for longer keys. - -## LICENSE [MIT](LICENSE) diff --git a/truebit-implementation/node_modules/browserify-aes/aes.js b/truebit-implementation/node_modules/browserify-aes/aes.js deleted file mode 100644 index ca32ab70..00000000 --- a/truebit-implementation/node_modules/browserify-aes/aes.js +++ /dev/null @@ -1,228 +0,0 @@ -// based on the aes implimentation in triple sec -// https://github.com/keybase/triplesec -// which is in turn based on the one from crypto-js -// https://code.google.com/p/crypto-js/ - -var Buffer = require('safe-buffer').Buffer - -function asUInt32Array (buf) { - if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) - - var len = (buf.length / 4) | 0 - var out = new Array(len) - - for (var i = 0; i < len; i++) { - out[i] = buf.readUInt32BE(i * 4) - } - - return out -} - -function scrubVec (v) { - for (var i = 0; i < v.length; v++) { - v[i] = 0 - } -} - -function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { - var SUB_MIX0 = SUB_MIX[0] - var SUB_MIX1 = SUB_MIX[1] - var SUB_MIX2 = SUB_MIX[2] - var SUB_MIX3 = SUB_MIX[3] - - var s0 = M[0] ^ keySchedule[0] - var s1 = M[1] ^ keySchedule[1] - var s2 = M[2] ^ keySchedule[2] - var s3 = M[3] ^ keySchedule[3] - var t0, t1, t2, t3 - var ksRow = 4 - - for (var round = 1; round < nRounds; round++) { - t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] - t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] - t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] - t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] - s0 = t0 - s1 = t1 - s2 = t2 - s3 = t3 - } - - t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] - t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] - t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] - t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] - t0 = t0 >>> 0 - t1 = t1 >>> 0 - t2 = t2 >>> 0 - t3 = t3 >>> 0 - - return [t0, t1, t2, t3] -} - -// AES constants -var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] -var G = (function () { - // Compute double table - var d = new Array(256) - for (var j = 0; j < 256; j++) { - if (j < 128) { - d[j] = j << 1 - } else { - d[j] = (j << 1) ^ 0x11b - } - } - - var SBOX = [] - var INV_SBOX = [] - var SUB_MIX = [[], [], [], []] - var INV_SUB_MIX = [[], [], [], []] - - // Walk GF(2^8) - var x = 0 - var xi = 0 - for (var i = 0; i < 256; ++i) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 - SBOX[x] = sx - INV_SBOX[sx] = x - - // Compute multiplication - var x2 = d[x] - var x4 = d[x2] - var x8 = d[x4] - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100) - SUB_MIX[0][x] = (t << 24) | (t >>> 8) - SUB_MIX[1][x] = (t << 16) | (t >>> 16) - SUB_MIX[2][x] = (t << 8) | (t >>> 24) - SUB_MIX[3][x] = t - - // Compute inv sub bytes, inv mix columns tables - t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) - INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) - INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) - INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) - INV_SUB_MIX[3][sx] = t - - if (x === 0) { - x = xi = 1 - } else { - x = x2 ^ d[d[d[x8 ^ x2]]] - xi ^= d[d[xi]] - } - } - - return { - SBOX: SBOX, - INV_SBOX: INV_SBOX, - SUB_MIX: SUB_MIX, - INV_SUB_MIX: INV_SUB_MIX - } -})() - -function AES (key) { - this._key = asUInt32Array(key) - this._reset() -} - -AES.blockSize = 4 * 4 -AES.keySize = 256 / 8 -AES.prototype.blockSize = AES.blockSize -AES.prototype.keySize = AES.keySize -AES.prototype._reset = function () { - var keyWords = this._key - var keySize = keyWords.length - var nRounds = keySize + 6 - var ksRows = (nRounds + 1) * 4 - - var keySchedule = [] - for (var k = 0; k < keySize; k++) { - keySchedule[k] = keyWords[k] - } - - for (k = keySize; k < ksRows; k++) { - var t = keySchedule[k - 1] - - if (k % keySize === 0) { - t = (t << 8) | (t >>> 24) - t = - (G.SBOX[t >>> 24] << 24) | - (G.SBOX[(t >>> 16) & 0xff] << 16) | - (G.SBOX[(t >>> 8) & 0xff] << 8) | - (G.SBOX[t & 0xff]) - - t ^= RCON[(k / keySize) | 0] << 24 - } else if (keySize > 6 && k % keySize === 4) { - t = - (G.SBOX[t >>> 24] << 24) | - (G.SBOX[(t >>> 16) & 0xff] << 16) | - (G.SBOX[(t >>> 8) & 0xff] << 8) | - (G.SBOX[t & 0xff]) - } - - keySchedule[k] = keySchedule[k - keySize] ^ t - } - - var invKeySchedule = [] - for (var ik = 0; ik < ksRows; ik++) { - var ksR = ksRows - ik - var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] - - if (ik < 4 || ksR <= 4) { - invKeySchedule[ik] = tt - } else { - invKeySchedule[ik] = - G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ - G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ - G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ - G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] - } - } - - this._nRounds = nRounds - this._keySchedule = keySchedule - this._invKeySchedule = invKeySchedule -} - -AES.prototype.encryptBlockRaw = function (M) { - M = asUInt32Array(M) - return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) -} - -AES.prototype.encryptBlock = function (M) { - var out = this.encryptBlockRaw(M) - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[1], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[3], 12) - return buf -} - -AES.prototype.decryptBlock = function (M) { - M = asUInt32Array(M) - - // swap - var m1 = M[1] - M[1] = M[3] - M[3] = m1 - - var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[3], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[1], 12) - return buf -} - -AES.prototype.scrub = function () { - scrubVec(this._keySchedule) - scrubVec(this._invKeySchedule) - scrubVec(this._key) -} - -module.exports.AES = AES diff --git a/truebit-implementation/node_modules/browserify-aes/authCipher.js b/truebit-implementation/node_modules/browserify-aes/authCipher.js deleted file mode 100644 index c6e8a76c..00000000 --- a/truebit-implementation/node_modules/browserify-aes/authCipher.js +++ /dev/null @@ -1,117 +0,0 @@ -var aes = require('./aes') -var Buffer = require('safe-buffer').Buffer -var Transform = require('cipher-base') -var inherits = require('inherits') -var GHASH = require('./ghash') -var xor = require('buffer-xor') -var incr32 = require('./incr32') - -function xorTest (a, b) { - var out = 0 - if (a.length !== b.length) out++ - - var len = Math.min(a.length, b.length) - for (var i = 0; i < len; ++i) { - out += (a[i] ^ b[i]) - } - - return out -} - -function calcIv (self, iv, ck) { - if (iv.length === 12) { - self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) - return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) - } - var ghash = new GHASH(ck) - var len = iv.length - var toPad = len % 16 - ghash.update(iv) - if (toPad) { - toPad = 16 - toPad - ghash.update(Buffer.alloc(toPad, 0)) - } - ghash.update(Buffer.alloc(8, 0)) - var ivBits = len * 8 - var tail = Buffer.alloc(8) - tail.writeUIntBE(ivBits, 0, 8) - ghash.update(tail) - self._finID = ghash.state - var out = Buffer.from(self._finID) - incr32(out) - return out -} -function StreamCipher (mode, key, iv, decrypt) { - Transform.call(this) - - var h = Buffer.alloc(4, 0) - - this._cipher = new aes.AES(key) - var ck = this._cipher.encryptBlock(h) - this._ghash = new GHASH(ck) - iv = calcIv(this, iv, ck) - - this._prev = Buffer.from(iv) - this._cache = Buffer.allocUnsafe(0) - this._secCache = Buffer.allocUnsafe(0) - this._decrypt = decrypt - this._alen = 0 - this._len = 0 - this._mode = mode - - this._authTag = null - this._called = false -} - -inherits(StreamCipher, Transform) - -StreamCipher.prototype._update = function (chunk) { - if (!this._called && this._alen) { - var rump = 16 - (this._alen % 16) - if (rump < 16) { - rump = Buffer.alloc(rump, 0) - this._ghash.update(rump) - } - } - - this._called = true - var out = this._mode.encrypt(this, chunk) - if (this._decrypt) { - this._ghash.update(chunk) - } else { - this._ghash.update(out) - } - this._len += chunk.length - return out -} - -StreamCipher.prototype._final = function () { - if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') - - var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) - if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') - - this._authTag = tag - this._cipher.scrub() -} - -StreamCipher.prototype.getAuthTag = function getAuthTag () { - if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') - - return this._authTag -} - -StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { - if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') - - this._authTag = tag -} - -StreamCipher.prototype.setAAD = function setAAD (buf) { - if (this._called) throw new Error('Attempting to set AAD in unsupported state') - - this._ghash.update(buf) - this._alen += buf.length -} - -module.exports = StreamCipher diff --git a/truebit-implementation/node_modules/browserify-aes/browser.js b/truebit-implementation/node_modules/browserify-aes/browser.js deleted file mode 100644 index d47a5f69..00000000 --- a/truebit-implementation/node_modules/browserify-aes/browser.js +++ /dev/null @@ -1,13 +0,0 @@ -var ciphers = require('./encrypter') -var deciphers = require('./decrypter') -var modes = require('./modes/list.json') - -function getCiphers () { - return Object.keys(modes) -} - -exports.createCipher = exports.Cipher = ciphers.createCipher -exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv -exports.createDecipher = exports.Decipher = deciphers.createDecipher -exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv -exports.listCiphers = exports.getCiphers = getCiphers diff --git a/truebit-implementation/node_modules/browserify-aes/decrypter.js b/truebit-implementation/node_modules/browserify-aes/decrypter.js deleted file mode 100644 index 740b2e6f..00000000 --- a/truebit-implementation/node_modules/browserify-aes/decrypter.js +++ /dev/null @@ -1,124 +0,0 @@ -var AuthCipher = require('./authCipher') -var Buffer = require('safe-buffer').Buffer -var MODES = require('./modes') -var StreamCipher = require('./streamCipher') -var Transform = require('cipher-base') -var aes = require('./aes') -var ebtk = require('evp_bytestokey') -var inherits = require('inherits') - -function Decipher (mode, key, iv) { - Transform.call(this) - - this._cache = new Splitter() - this._last = void 0 - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._mode = mode - this._autopadding = true -} - -inherits(Decipher, Transform) - -Decipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - while ((chunk = this._cache.get(this._autopadding))) { - thing = this._mode.decrypt(this, chunk) - out.push(thing) - } - return Buffer.concat(out) -} - -Decipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - return unpad(this._mode.decrypt(this, chunk)) - } else if (chunk) { - throw new Error('data not multiple of block length') - } -} - -Decipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} - -function Splitter () { - this.cache = Buffer.allocUnsafe(0) -} - -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function (autoPadding) { - var out - if (autoPadding) { - if (this.cache.length > 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } else { - if (this.cache.length >= 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } - - return null -} - -Splitter.prototype.flush = function () { - if (this.cache.length) return this.cache -} - -function unpad (last) { - var padded = last[15] - if (padded < 1 || padded > 16) { - throw new Error('unable to decrypt data') - } - var i = -1 - while (++i < padded) { - if (last[(i + (16 - padded))] !== padded) { - throw new Error('unable to decrypt data') - } - } - if (padded === 16) return - - return last.slice(0, 16 - padded) -} - -function createDecipheriv (suite, password, iv) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - if (typeof iv === 'string') iv = Buffer.from(iv) - if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) - - if (typeof password === 'string') password = Buffer.from(password) - if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) - - if (config.type === 'stream') { - return new StreamCipher(config.module, password, iv, true) - } else if (config.type === 'auth') { - return new AuthCipher(config.module, password, iv, true) - } - - return new Decipher(config.module, password, iv) -} - -function createDecipher (suite, password) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - var keys = ebtk(password, false, config.key, config.iv) - return createDecipheriv(suite, keys.key, keys.iv) -} - -exports.createDecipher = createDecipher -exports.createDecipheriv = createDecipheriv diff --git a/truebit-implementation/node_modules/browserify-aes/encrypter.js b/truebit-implementation/node_modules/browserify-aes/encrypter.js deleted file mode 100644 index 0c4c58bc..00000000 --- a/truebit-implementation/node_modules/browserify-aes/encrypter.js +++ /dev/null @@ -1,114 +0,0 @@ -var MODES = require('./modes') -var AuthCipher = require('./authCipher') -var Buffer = require('safe-buffer').Buffer -var StreamCipher = require('./streamCipher') -var Transform = require('cipher-base') -var aes = require('./aes') -var ebtk = require('evp_bytestokey') -var inherits = require('inherits') - -function Cipher (mode, key, iv) { - Transform.call(this) - - this._cache = new Splitter() - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._mode = mode - this._autopadding = true -} - -inherits(Cipher, Transform) - -Cipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - - while ((chunk = this._cache.get())) { - thing = this._mode.encrypt(this, chunk) - out.push(thing) - } - - return Buffer.concat(out) -} - -var PADDING = Buffer.alloc(16, 0x10) - -Cipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - chunk = this._mode.encrypt(this, chunk) - this._cipher.scrub() - return chunk - } - - if (!chunk.equals(PADDING)) { - this._cipher.scrub() - throw new Error('data not multiple of block length') - } -} - -Cipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} - -function Splitter () { - this.cache = Buffer.allocUnsafe(0) -} - -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function () { - if (this.cache.length > 15) { - var out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - return null -} - -Splitter.prototype.flush = function () { - var len = 16 - this.cache.length - var padBuff = Buffer.allocUnsafe(len) - - var i = -1 - while (++i < len) { - padBuff.writeUInt8(len, i) - } - - return Buffer.concat([this.cache, padBuff]) -} - -function createCipheriv (suite, password, iv) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - if (typeof password === 'string') password = Buffer.from(password) - if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) - - if (typeof iv === 'string') iv = Buffer.from(iv) - if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) - - if (config.type === 'stream') { - return new StreamCipher(config.module, password, iv) - } else if (config.type === 'auth') { - return new AuthCipher(config.module, password, iv) - } - - return new Cipher(config.module, password, iv) -} - -function createCipher (suite, password) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - var keys = ebtk(password, false, config.key, config.iv) - return createCipheriv(suite, keys.key, keys.iv) -} - -exports.createCipheriv = createCipheriv -exports.createCipher = createCipher diff --git a/truebit-implementation/node_modules/browserify-aes/ghash.js b/truebit-implementation/node_modules/browserify-aes/ghash.js deleted file mode 100644 index 26bfeddd..00000000 --- a/truebit-implementation/node_modules/browserify-aes/ghash.js +++ /dev/null @@ -1,89 +0,0 @@ -var Buffer = require('safe-buffer').Buffer -var ZEROES = Buffer.alloc(16, 0) - -function toArray (buf) { - return [ - buf.readUInt32BE(0), - buf.readUInt32BE(4), - buf.readUInt32BE(8), - buf.readUInt32BE(12) - ] -} - -function fromArray (out) { - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0] >>> 0, 0) - buf.writeUInt32BE(out[1] >>> 0, 4) - buf.writeUInt32BE(out[2] >>> 0, 8) - buf.writeUInt32BE(out[3] >>> 0, 12) - return buf -} - -function GHASH (key) { - this.h = key - this.state = Buffer.alloc(16, 0) - this.cache = Buffer.allocUnsafe(0) -} - -// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html -// by Juho Vähä-Herttua -GHASH.prototype.ghash = function (block) { - var i = -1 - while (++i < block.length) { - this.state[i] ^= block[i] - } - this._multiply() -} - -GHASH.prototype._multiply = function () { - var Vi = toArray(this.h) - var Zi = [0, 0, 0, 0] - var j, xi, lsbVi - var i = -1 - while (++i < 128) { - xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 - if (xi) { - // Z_i+1 = Z_i ^ V_i - Zi[0] ^= Vi[0] - Zi[1] ^= Vi[1] - Zi[2] ^= Vi[2] - Zi[3] ^= Vi[3] - } - - // Store the value of LSB(V_i) - lsbVi = (Vi[3] & 1) !== 0 - - // V_i+1 = V_i >> 1 - for (j = 3; j > 0; j--) { - Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) - } - Vi[0] = Vi[0] >>> 1 - - // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R - if (lsbVi) { - Vi[0] = Vi[0] ^ (0xe1 << 24) - } - } - this.state = fromArray(Zi) -} - -GHASH.prototype.update = function (buf) { - this.cache = Buffer.concat([this.cache, buf]) - var chunk - while (this.cache.length >= 16) { - chunk = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - this.ghash(chunk) - } -} - -GHASH.prototype.final = function (abl, bl) { - if (this.cache.length) { - this.ghash(Buffer.concat([this.cache, ZEROES], 16)) - } - - this.ghash(fromArray([0, abl, 0, bl])) - return this.state -} - -module.exports = GHASH diff --git a/truebit-implementation/node_modules/browserify-aes/incr32.js b/truebit-implementation/node_modules/browserify-aes/incr32.js deleted file mode 100644 index c1a90893..00000000 --- a/truebit-implementation/node_modules/browserify-aes/incr32.js +++ /dev/null @@ -1,15 +0,0 @@ -function incr32 (iv) { - var len = iv.length - var item - while (len--) { - item = iv.readUInt8(len) - if (item === 255) { - iv.writeUInt8(0, len) - } else { - item++ - iv.writeUInt8(item, len) - break - } - } -} -module.exports = incr32 diff --git a/truebit-implementation/node_modules/browserify-aes/index.js b/truebit-implementation/node_modules/browserify-aes/index.js deleted file mode 100644 index 58fa883f..00000000 --- a/truebit-implementation/node_modules/browserify-aes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var crypto = require('crypto') - -exports.createCipher = exports.Cipher = crypto.createCipher -exports.createCipheriv = exports.Cipheriv = crypto.createCipheriv -exports.createDecipher = exports.Decipher = crypto.createDecipher -exports.createDecipheriv = exports.Decipheriv = crypto.createDecipheriv -exports.listCiphers = exports.getCiphers = crypto.getCiphers diff --git a/truebit-implementation/node_modules/browserify-aes/modes/cbc.js b/truebit-implementation/node_modules/browserify-aes/modes/cbc.js deleted file mode 100644 index b133e406..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/cbc.js +++ /dev/null @@ -1,17 +0,0 @@ -var xor = require('buffer-xor') - -exports.encrypt = function (self, block) { - var data = xor(block, self._prev) - - self._prev = self._cipher.encryptBlock(data) - return self._prev -} - -exports.decrypt = function (self, block) { - var pad = self._prev - - self._prev = block - var out = self._cipher.decryptBlock(block) - - return xor(out, pad) -} diff --git a/truebit-implementation/node_modules/browserify-aes/modes/cfb.js b/truebit-implementation/node_modules/browserify-aes/modes/cfb.js deleted file mode 100644 index 03b2ee9c..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/cfb.js +++ /dev/null @@ -1,33 +0,0 @@ -var Buffer = require('safe-buffer').Buffer -var xor = require('buffer-xor') - -function encryptStart (self, data, decrypt) { - var len = data.length - var out = xor(data, self._cache) - self._cache = self._cache.slice(len) - self._prev = Buffer.concat([self._prev, decrypt ? data : out]) - return out -} - -exports.encrypt = function (self, data, decrypt) { - var out = Buffer.allocUnsafe(0) - var len - - while (data.length) { - if (self._cache.length === 0) { - self._cache = self._cipher.encryptBlock(self._prev) - self._prev = Buffer.allocUnsafe(0) - } - - if (self._cache.length <= data.length) { - len = self._cache.length - out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) - data = data.slice(len) - } else { - out = Buffer.concat([out, encryptStart(self, data, decrypt)]) - break - } - } - - return out -} diff --git a/truebit-implementation/node_modules/browserify-aes/modes/cfb1.js b/truebit-implementation/node_modules/browserify-aes/modes/cfb1.js deleted file mode 100644 index 0ed13663..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/cfb1.js +++ /dev/null @@ -1,42 +0,0 @@ -var Buffer = require('safe-buffer').Buffer - -function encryptByte (self, byteParam, decrypt) { - var pad - var i = -1 - var len = 8 - var out = 0 - var bit, value - while (++i < len) { - pad = self._cipher.encryptBlock(self._prev) - bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 - value = pad[0] ^ bit - out += ((value & 0x80) >> (i % 8)) - self._prev = shiftIn(self._prev, decrypt ? bit : value) - } - return out -} - -function shiftIn (buffer, value) { - var len = buffer.length - var i = -1 - var out = Buffer.allocUnsafe(buffer.length) - buffer = Buffer.concat([buffer, Buffer.from([value])]) - - while (++i < len) { - out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) - } - - return out -} - -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = Buffer.allocUnsafe(len) - var i = -1 - - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - - return out -} diff --git a/truebit-implementation/node_modules/browserify-aes/modes/cfb8.js b/truebit-implementation/node_modules/browserify-aes/modes/cfb8.js deleted file mode 100644 index c0708f95..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/cfb8.js +++ /dev/null @@ -1,25 +0,0 @@ -var Buffer = require('safe-buffer').Buffer - -function encryptByte (self, byteParam, decrypt) { - var pad = self._cipher.encryptBlock(self._prev) - var out = pad[0] ^ byteParam - - self._prev = Buffer.concat([ - self._prev.slice(1), - Buffer.from([decrypt ? byteParam : out]) - ]) - - return out -} - -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = Buffer.allocUnsafe(len) - var i = -1 - - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - - return out -} diff --git a/truebit-implementation/node_modules/browserify-aes/modes/ctr.js b/truebit-implementation/node_modules/browserify-aes/modes/ctr.js deleted file mode 100644 index e68f13c2..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/ctr.js +++ /dev/null @@ -1,30 +0,0 @@ -var xor = require('buffer-xor') -var Buffer = require('safe-buffer').Buffer -var incr32 = require('../incr32') - -function getBlock (self) { - var out = self._cipher.encryptBlockRaw(self._prev) - incr32(self._prev) - return out -} - -var blockSize = 16 -exports.encrypt = function (self, chunk) { - var chunkNum = Math.ceil(chunk.length / blockSize) - var start = self._cache.length - self._cache = Buffer.concat([ - self._cache, - Buffer.allocUnsafe(chunkNum * blockSize) - ]) - for (var i = 0; i < chunkNum; i++) { - var out = getBlock(self) - var offset = start + i * blockSize - self._cache.writeUInt32BE(out[0], offset + 0) - self._cache.writeUInt32BE(out[1], offset + 4) - self._cache.writeUInt32BE(out[2], offset + 8) - self._cache.writeUInt32BE(out[3], offset + 12) - } - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} diff --git a/truebit-implementation/node_modules/browserify-aes/modes/ecb.js b/truebit-implementation/node_modules/browserify-aes/modes/ecb.js deleted file mode 100644 index 49dfb1e2..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/ecb.js +++ /dev/null @@ -1,7 +0,0 @@ -exports.encrypt = function (self, block) { - return self._cipher.encryptBlock(block) -} - -exports.decrypt = function (self, block) { - return self._cipher.decryptBlock(block) -} diff --git a/truebit-implementation/node_modules/browserify-aes/modes/index.js b/truebit-implementation/node_modules/browserify-aes/modes/index.js deleted file mode 100644 index 767d6cb9..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/index.js +++ /dev/null @@ -1,18 +0,0 @@ -var modeModules = { - ECB: require('./ecb'), - CBC: require('./cbc'), - CFB: require('./cfb'), - CFB8: require('./cfb8'), - CFB1: require('./cfb1'), - OFB: require('./ofb'), - CTR: require('./ctr'), - GCM: require('./ctr') -} - -var modes = require('./list.json') - -for (var key in modes) { - modes[key].module = modeModules[modes[key].mode] -} - -module.exports = modes diff --git a/truebit-implementation/node_modules/browserify-aes/modes/list.json b/truebit-implementation/node_modules/browserify-aes/modes/list.json deleted file mode 100644 index 33de25bd..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/list.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "aes-128-ecb": { - "cipher": "AES", - "key": 128, - "iv": 0, - "mode": "ECB", - "type": "block" - }, - "aes-192-ecb": { - "cipher": "AES", - "key": 192, - "iv": 0, - "mode": "ECB", - "type": "block" - }, - "aes-256-ecb": { - "cipher": "AES", - "key": 256, - "iv": 0, - "mode": "ECB", - "type": "block" - }, - "aes-128-cbc": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes-192-cbc": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes-256-cbc": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes128": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes192": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes256": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CBC", - "type": "block" - }, - "aes-128-cfb": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CFB", - "type": "stream" - }, - "aes-192-cfb": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CFB", - "type": "stream" - }, - "aes-256-cfb": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CFB", - "type": "stream" - }, - "aes-128-cfb8": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CFB8", - "type": "stream" - }, - "aes-192-cfb8": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CFB8", - "type": "stream" - }, - "aes-256-cfb8": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CFB8", - "type": "stream" - }, - "aes-128-cfb1": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CFB1", - "type": "stream" - }, - "aes-192-cfb1": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CFB1", - "type": "stream" - }, - "aes-256-cfb1": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CFB1", - "type": "stream" - }, - "aes-128-ofb": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "OFB", - "type": "stream" - }, - "aes-192-ofb": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "OFB", - "type": "stream" - }, - "aes-256-ofb": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "OFB", - "type": "stream" - }, - "aes-128-ctr": { - "cipher": "AES", - "key": 128, - "iv": 16, - "mode": "CTR", - "type": "stream" - }, - "aes-192-ctr": { - "cipher": "AES", - "key": 192, - "iv": 16, - "mode": "CTR", - "type": "stream" - }, - "aes-256-ctr": { - "cipher": "AES", - "key": 256, - "iv": 16, - "mode": "CTR", - "type": "stream" - }, - "aes-128-gcm": { - "cipher": "AES", - "key": 128, - "iv": 12, - "mode": "GCM", - "type": "auth" - }, - "aes-192-gcm": { - "cipher": "AES", - "key": 192, - "iv": 12, - "mode": "GCM", - "type": "auth" - }, - "aes-256-gcm": { - "cipher": "AES", - "key": 256, - "iv": 12, - "mode": "GCM", - "type": "auth" - } -} diff --git a/truebit-implementation/node_modules/browserify-aes/modes/ofb.js b/truebit-implementation/node_modules/browserify-aes/modes/ofb.js deleted file mode 100644 index bd875589..00000000 --- a/truebit-implementation/node_modules/browserify-aes/modes/ofb.js +++ /dev/null @@ -1,16 +0,0 @@ -var xor = require('buffer-xor') - -function getBlock (self) { - self._prev = self._cipher.encryptBlock(self._prev) - return self._prev -} - -exports.encrypt = function (self, chunk) { - while (self._cache.length < chunk.length) { - self._cache = Buffer.concat([self._cache, getBlock(self)]) - } - - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} diff --git a/truebit-implementation/node_modules/browserify-aes/package.json b/truebit-implementation/node_modules/browserify-aes/package.json deleted file mode 100644 index b436ccbf..00000000 --- a/truebit-implementation/node_modules/browserify-aes/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "browserify-aes@^1.0.4", - "_id": "browserify-aes@1.2.0", - "_inBundle": false, - "_integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "_location": "/browserify-aes", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "browserify-aes@^1.0.4", - "name": "browserify-aes", - "escapedName": "browserify-aes", - "rawSpec": "^1.0.4", - "saveSpec": null, - "fetchSpec": "^1.0.4" - }, - "_requiredBy": [ - "/browserify-cipher", - "/parse-asn1" - ], - "_resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "_shasum": "326734642f403dabc3003209853bb70ad428ef48", - "_spec": "browserify-aes@^1.0.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/browserify-cipher", - "author": "", - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/browserify-aes/issues" - }, - "bundleDependencies": false, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "deprecated": false, - "description": "aes, for browserify", - "devDependencies": { - "standard": "^9.0.0", - "tap-spec": "^4.1.1", - "tape": "^4.6.3" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/crypto-browserify/browserify-aes", - "keywords": [ - "aes", - "crypto", - "browserify" - ], - "license": "MIT", - "main": "index.js", - "name": "browserify-aes", - "repository": { - "type": "git", - "url": "git://github.com/crypto-browserify/browserify-aes.git" - }, - "scripts": { - "standard": "standard", - "test": "npm run standard && npm run unit", - "unit": "node test/index.js | tspec" - }, - "version": "1.2.0" -} diff --git a/truebit-implementation/node_modules/browserify-aes/streamCipher.js b/truebit-implementation/node_modules/browserify-aes/streamCipher.js deleted file mode 100644 index 1877fa09..00000000 --- a/truebit-implementation/node_modules/browserify-aes/streamCipher.js +++ /dev/null @@ -1,27 +0,0 @@ -var aes = require('./aes') -var Buffer = require('safe-buffer').Buffer -var Transform = require('cipher-base') -var inherits = require('inherits') - -function StreamCipher (mode, key, iv, decrypt) { - Transform.call(this) - - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._cache = Buffer.allocUnsafe(0) - this._secCache = Buffer.allocUnsafe(0) - this._decrypt = decrypt - this._mode = mode -} - -inherits(StreamCipher, Transform) - -StreamCipher.prototype._update = function (chunk) { - return this._mode.encrypt(this, chunk, this._decrypt) -} - -StreamCipher.prototype._final = function () { - this._cipher.scrub() -} - -module.exports = StreamCipher diff --git a/truebit-implementation/node_modules/browserify-cipher/.travis.yml b/truebit-implementation/node_modules/browserify-cipher/.travis.yml deleted file mode 100644 index ad7554ba..00000000 --- a/truebit-implementation/node_modules/browserify-cipher/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -sudo: false -language: node_js -node_js: - - "4" - - "5" - - "6" - - "7" -matrix: - include: - - node_js: "7" - env: TEST_SUITE=standard -env: - - TEST_SUITE=unit -script: npm run-script $TEST_SUITE diff --git a/truebit-implementation/node_modules/browserify-cipher/LICENSE b/truebit-implementation/node_modules/browserify-cipher/LICENSE deleted file mode 100644 index a49f0626..00000000 --- a/truebit-implementation/node_modules/browserify-cipher/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2017 Calvin Metcalf & contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/browserify-cipher/README.md b/truebit-implementation/node_modules/browserify-cipher/README.md deleted file mode 100644 index 3c0b1576..00000000 --- a/truebit-implementation/node_modules/browserify-cipher/README.md +++ /dev/null @@ -1,7 +0,0 @@ -browserify-cipher -=== - -[![Build Status](https://travis-ci.org/crypto-browserify/browserify-cipher.svg)](https://travis-ci.org/crypto-browserify/browserify-cipher) - -Provides createCipher, createDecipher, createCipheriv, createDecipheriv and -getCiphers for the browserify. Includes AES and DES ciphers. diff --git a/truebit-implementation/node_modules/browserify-cipher/browser.js b/truebit-implementation/node_modules/browserify-cipher/browser.js deleted file mode 100644 index 444825b2..00000000 --- a/truebit-implementation/node_modules/browserify-cipher/browser.js +++ /dev/null @@ -1,67 +0,0 @@ -var DES = require('browserify-des') -var aes = require('browserify-aes/browser') -var aesModes = require('browserify-aes/modes') -var desModes = require('browserify-des/modes') -var ebtk = require('evp_bytestokey') - -function createCipher (suite, password) { - suite = suite.toLowerCase() - - var keyLen, ivLen - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') - } - - var keys = ebtk(password, false, keyLen, ivLen) - return createCipheriv(suite, keys.key, keys.iv) -} - -function createDecipher (suite, password) { - suite = suite.toLowerCase() - - var keyLen, ivLen - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') - } - - var keys = ebtk(password, false, keyLen, ivLen) - return createDecipheriv(suite, keys.key, keys.iv) -} - -function createCipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) - if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) - - throw new TypeError('invalid suite type') -} - -function createDecipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) - if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) - - throw new TypeError('invalid suite type') -} - -function getCiphers () { - return Object.keys(desModes).concat(aes.getCiphers()) -} - -exports.createCipher = exports.Cipher = createCipher -exports.createCipheriv = exports.Cipheriv = createCipheriv -exports.createDecipher = exports.Decipher = createDecipher -exports.createDecipheriv = exports.Decipheriv = createDecipheriv -exports.listCiphers = exports.getCiphers = getCiphers diff --git a/truebit-implementation/node_modules/browserify-cipher/index.js b/truebit-implementation/node_modules/browserify-cipher/index.js deleted file mode 100644 index 58fa883f..00000000 --- a/truebit-implementation/node_modules/browserify-cipher/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var crypto = require('crypto') - -exports.createCipher = exports.Cipher = crypto.createCipher -exports.createCipheriv = exports.Cipheriv = crypto.createCipheriv -exports.createDecipher = exports.Decipher = crypto.createDecipher -exports.createDecipheriv = exports.Decipheriv = crypto.createDecipheriv -exports.listCiphers = exports.getCiphers = crypto.getCiphers diff --git a/truebit-implementation/node_modules/browserify-cipher/package.json b/truebit-implementation/node_modules/browserify-cipher/package.json deleted file mode 100644 index 8a981e5a..00000000 --- a/truebit-implementation/node_modules/browserify-cipher/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "browserify-cipher@^1.0.0", - "_id": "browserify-cipher@1.0.1", - "_inBundle": false, - "_integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "_location": "/browserify-cipher", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "browserify-cipher@^1.0.0", - "name": "browserify-cipher", - "escapedName": "browserify-cipher", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/crypto-browserify" - ], - "_resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "_shasum": "8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0", - "_spec": "browserify-cipher@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": { - "name": "Calvin Metcalf", - "email": "calvin.metcalf@gmail.com" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/browserify-cipher/issues" - }, - "bundleDependencies": false, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - }, - "deprecated": false, - "description": "ciphers for the browser", - "devDependencies": { - "standard": "^10.0.2", - "tap-spec": "^4.1.0", - "tape": "^4.2.0" - }, - "homepage": "https://github.com/crypto-browserify/browserify-cipher#readme", - "license": "MIT", - "main": "index.js", - "name": "browserify-cipher", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/crypto-browserify/browserify-cipher.git" - }, - "scripts": { - "test": "standard && node test.js | tspec" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/browserify-cipher/test.js b/truebit-implementation/node_modules/browserify-cipher/test.js deleted file mode 100644 index d4beaa0f..00000000 --- a/truebit-implementation/node_modules/browserify-cipher/test.js +++ /dev/null @@ -1,55 +0,0 @@ -var test = require('tape') -var crypto = require('crypto') -var desModes = require('browserify-des/modes') -var aesModes = require('browserify-aes/modes') -var ourCrypto = require('./browser') - -function runIvTest (mode, keyLen, ivLen) { - test('mode: ' + mode, function (t) { - var i = 0 - while (++i < 10) { - run(i) - } - function run (i) { - t.test('run: ' + i, function (t) { - t.plan(2) - var key = crypto.randomBytes(keyLen) - var iv = crypto.randomBytes(ivLen) - var text = crypto.randomBytes(200) - var ourEncrypt - try { - ourEncrypt = ourCrypto.createCipheriv(mode, key, iv) - } catch (e) { - t.notOk(e, e.stack) - } - var nodeEncrypt - try { - nodeEncrypt = crypto.createCipheriv(mode, key, iv) - } catch (e) { - t.notOk(e, e.stack) - } - var ourCipherText = Buffer.concat([ourEncrypt.update(text), ourEncrypt.final()]) - var authTag - if (mode.slice(-3) === 'gcm') { - authTag = ourEncrypt.getAuthTag() - } - var nodeCipherText = Buffer.concat([nodeEncrypt.update(text), nodeEncrypt.final()]) - t.equals(nodeCipherText.toString('hex'), ourCipherText.toString('hex')) - var ourDecrypt = ourCrypto.createDecipheriv(mode, key, iv) - if (mode.slice(-3) === 'gcm') { - ourDecrypt.setAuthTag(authTag) - } - var plainText = Buffer.concat([ourDecrypt.update(ourCipherText), ourDecrypt.final()]) - t.equals(text.toString('hex'), plainText.toString('hex')) - }) - } - }) -} -Object.keys(aesModes).forEach(function (modeName) { - var mode = aesModes[modeName] - runIvTest(modeName, mode.key / 8, mode.iv) -}) -Object.keys(desModes).forEach(function (modeName) { - var mode = desModes[modeName] - runIvTest(modeName, mode.key, mode.iv) -}) diff --git a/truebit-implementation/node_modules/browserify-des/.travis.yml b/truebit-implementation/node_modules/browserify-des/.travis.yml deleted file mode 100644 index a9657837..00000000 --- a/truebit-implementation/node_modules/browserify-des/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.12" - - "4" - - "6" - - "10" diff --git a/truebit-implementation/node_modules/browserify-des/index.js b/truebit-implementation/node_modules/browserify-des/index.js deleted file mode 100644 index f6943674..00000000 --- a/truebit-implementation/node_modules/browserify-des/index.js +++ /dev/null @@ -1,50 +0,0 @@ -var CipherBase = require('cipher-base') -var des = require('des.js') -var inherits = require('inherits') -var Buffer = require('safe-buffer').Buffer - -var modes = { - 'des-ede3-cbc': des.CBC.instantiate(des.EDE), - 'des-ede3': des.EDE, - 'des-ede-cbc': des.CBC.instantiate(des.EDE), - 'des-ede': des.EDE, - 'des-cbc': des.CBC.instantiate(des.DES), - 'des-ecb': des.DES -} -modes.des = modes['des-cbc'] -modes.des3 = modes['des-ede3-cbc'] -module.exports = DES -inherits(DES, CipherBase) -function DES (opts) { - CipherBase.call(this) - var modeName = opts.mode.toLowerCase() - var mode = modes[modeName] - var type - if (opts.decrypt) { - type = 'decrypt' - } else { - type = 'encrypt' - } - var key = opts.key - if (!Buffer.isBuffer(key)) { - key = Buffer.from(key) - } - if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { - key = Buffer.concat([key, key.slice(0, 8)]) - } - var iv = opts.iv - if (!Buffer.isBuffer(iv)) { - iv = Buffer.from(iv) - } - this._des = mode.create({ - key: key, - iv: iv, - type: type - }) -} -DES.prototype._update = function (data) { - return Buffer.from(this._des.update(data)) -} -DES.prototype._final = function () { - return Buffer.from(this._des.final()) -} diff --git a/truebit-implementation/node_modules/browserify-des/license b/truebit-implementation/node_modules/browserify-des/license deleted file mode 100644 index 798de7dd..00000000 --- a/truebit-implementation/node_modules/browserify-des/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2017 Calvin Metcalf, Fedor Indutny & contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/browserify-des/modes.js b/truebit-implementation/node_modules/browserify-des/modes.js deleted file mode 100644 index 72f308de..00000000 --- a/truebit-implementation/node_modules/browserify-des/modes.js +++ /dev/null @@ -1,24 +0,0 @@ -exports['des-ecb'] = { - key: 8, - iv: 0 -} -exports['des-cbc'] = exports.des = { - key: 8, - iv: 8 -} -exports['des-ede3-cbc'] = exports.des3 = { - key: 24, - iv: 8 -} -exports['des-ede3'] = { - key: 24, - iv: 0 -} -exports['des-ede-cbc'] = { - key: 16, - iv: 8 -} -exports['des-ede'] = { - key: 16, - iv: 0 -} diff --git a/truebit-implementation/node_modules/browserify-des/package.json b/truebit-implementation/node_modules/browserify-des/package.json deleted file mode 100644 index a07e11ef..00000000 --- a/truebit-implementation/node_modules/browserify-des/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "browserify-des@^1.0.0", - "_id": "browserify-des@1.0.2", - "_inBundle": false, - "_integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "_location": "/browserify-des", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "browserify-des@^1.0.0", - "name": "browserify-des", - "escapedName": "browserify-des", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/browserify-cipher" - ], - "_resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "_shasum": "3af4f1f59839403572f1c66204375f7a7f703e9c", - "_spec": "browserify-des@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/browserify-cipher", - "author": { - "name": "Calvin Metcalf", - "email": "calvin.metcalf@gmail.com" - }, - "bugs": { - "url": "https://github.com/crypto-browserify/browserify-des/issues" - }, - "bundleDependencies": false, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "deprecated": false, - "description": "browserify-des ===", - "devDependencies": { - "standard": "^5.3.1", - "tap-spec": "^4.1.0", - "tape": "^4.2.0" - }, - "homepage": "https://github.com/crypto-browserify/browserify-des#readme", - "license": "MIT", - "main": "index.js", - "name": "browserify-des", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/browserify-des.git" - }, - "scripts": { - "test": "standard && node test.js | tspec" - }, - "version": "1.0.2" -} diff --git a/truebit-implementation/node_modules/browserify-des/readme.md b/truebit-implementation/node_modules/browserify-des/readme.md deleted file mode 100644 index b9b469d3..00000000 --- a/truebit-implementation/node_modules/browserify-des/readme.md +++ /dev/null @@ -1,6 +0,0 @@ -browserify-des -=== - -[![Build Status](https://travis-ci.org/crypto-browserify/browserify-des.svg)](https://travis-ci.org/crypto-browserify/browserify-des) - -DES for browserify diff --git a/truebit-implementation/node_modules/browserify-des/test.js b/truebit-implementation/node_modules/browserify-des/test.js deleted file mode 100644 index 07292624..00000000 --- a/truebit-implementation/node_modules/browserify-des/test.js +++ /dev/null @@ -1,81 +0,0 @@ -var test = require('tape') -var DES = require('./') -var modes = require('./modes') -var crypto = require('crypto') - -Object.keys(modes).forEach(function (mode) { - test(mode, function (t) { - var i = 0 - while (++i < 10) { - runOnce(i) - } - function runOnce (i) { - t.test('run: ' + i, function (t) { - t.plan(2) - var key = crypto.randomBytes(modes[mode].key) - var iv = crypto.randomBytes(modes[mode].iv) - var text = crypto.randomBytes(200) - var ourEncrypt - try { - ourEncrypt = new DES({ - mode: mode, - key: key, - iv: iv - }) - } catch (e) { - t.notOk(e, e.stack) - } - var nodeEncrypt - try { - nodeEncrypt = crypto.createCipheriv(mode, key, iv) - } catch (e) { - t.notOk(e, e.stack) - } - var ourCipherText = Buffer.concat([ourEncrypt.update(text), ourEncrypt.final()]) - var nodeCipherText = Buffer.concat([nodeEncrypt.update(text), nodeEncrypt.final()]) - t.equals(nodeCipherText.toString('hex'), ourCipherText.toString('hex')) - var ourDecrypt = new DES({ - mode: mode, - key: key, - iv: iv, - decrypt: true - }) - var plainText = Buffer.concat([ourDecrypt.update(ourCipherText), ourDecrypt.final()]) - t.equals(text.toString('hex'), plainText.toString('hex')) - }) - t.test('run text: ' + i, function (t) { - t.plan(2) - var key = crypto.randomBytes(32).toString('base64').slice(0, modes[mode].key) - var iv = crypto.randomBytes(32).toString('base64').slice(0, modes[mode].iv) - var text = crypto.randomBytes(200) - var ourEncrypt - try { - ourEncrypt = new DES({ - mode: mode, - key: key, - iv: iv - }) - } catch (e) { - t.notOk(e, e.stack) - } - var nodeEncrypt - try { - nodeEncrypt = crypto.createCipheriv(mode, key, iv) - } catch (e) { - t.notOk(e, e.stack) - } - var ourCipherText = Buffer.concat([ourEncrypt.update(text), ourEncrypt.final()]) - var nodeCipherText = Buffer.concat([nodeEncrypt.update(text), nodeEncrypt.final()]) - t.equals(nodeCipherText.toString('hex'), ourCipherText.toString('hex')) - var ourDecrypt = new DES({ - mode: mode, - key: key, - iv: iv, - decrypt: true - }) - var plainText = Buffer.concat([ourDecrypt.update(ourCipherText), ourDecrypt.final()]) - t.equals(text.toString('hex'), plainText.toString('hex')) - }) - } - }) -}) diff --git a/truebit-implementation/node_modules/browserify-rsa/.travis.yml b/truebit-implementation/node_modules/browserify-rsa/.travis.yml deleted file mode 100644 index 20229620..00000000 --- a/truebit-implementation/node_modules/browserify-rsa/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.11" \ No newline at end of file diff --git a/truebit-implementation/node_modules/browserify-rsa/LICENSE b/truebit-implementation/node_modules/browserify-rsa/LICENSE deleted file mode 100644 index f6d285c0..00000000 --- a/truebit-implementation/node_modules/browserify-rsa/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015 Calvin Metcalf & contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/browserify-rsa/index.js b/truebit-implementation/node_modules/browserify-rsa/index.js deleted file mode 100644 index 2b301cdb..00000000 --- a/truebit-implementation/node_modules/browserify-rsa/index.js +++ /dev/null @@ -1,40 +0,0 @@ -var bn = require('bn.js'); -var randomBytes = require('randombytes'); -module.exports = crt; -function blind(priv) { - var r = getr(priv); - var blinder = r.toRed(bn.mont(priv.modulus)) - .redPow(new bn(priv.publicExponent)).fromRed(); - return { - blinder: blinder, - unblinder:r.invm(priv.modulus) - }; -} -function crt(msg, priv) { - var blinds = blind(priv); - var len = priv.modulus.byteLength(); - var mod = bn.mont(priv.modulus); - var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); - var c1 = blinded.toRed(bn.mont(priv.prime1)); - var c2 = blinded.toRed(bn.mont(priv.prime2)); - var qinv = priv.coefficient; - var p = priv.prime1; - var q = priv.prime2; - var m1 = c1.redPow(priv.exponent1); - var m2 = c2.redPow(priv.exponent2); - m1 = m1.fromRed(); - m2 = m2.fromRed(); - var h = m1.isub(m2).imul(qinv).umod(p); - h.imul(q); - m2.iadd(h); - return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); -} -crt.getr = getr; -function getr(priv) { - var len = priv.modulus.byteLength(); - var r = new bn(randomBytes(len)); - while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { - r = new bn(randomBytes(len)); - } - return r; -} diff --git a/truebit-implementation/node_modules/browserify-rsa/package.json b/truebit-implementation/node_modules/browserify-rsa/package.json deleted file mode 100644 index 8a5c11b0..00000000 --- a/truebit-implementation/node_modules/browserify-rsa/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "_from": "browserify-rsa@^4.0.0", - "_id": "browserify-rsa@4.0.1", - "_inBundle": false, - "_integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "_location": "/browserify-rsa", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "browserify-rsa@^4.0.0", - "name": "browserify-rsa", - "escapedName": "browserify-rsa", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/browserify-sign", - "/public-encrypt" - ], - "_resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "_shasum": "21e0abfaf6f2029cf2fafb133567a701d4135524", - "_spec": "browserify-rsa@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/browserify-sign", - "author": "", - "bugs": { - "url": "https://github.com/crypto-browserify/browserify-rsa/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "deprecated": false, - "description": "RSA for browserify", - "devDependencies": { - "parse-asn1": "^5.0.0", - "tap-spec": "^2.1.2", - "tape": "^3.0.3" - }, - "homepage": "https://github.com/crypto-browserify/browserify-rsa#readme", - "license": "MIT", - "main": "index.js", - "name": "browserify-rsa", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/crypto-browserify/browserify-rsa.git" - }, - "scripts": { - "test": "node test.js | tspec" - }, - "version": "4.0.1" -} diff --git a/truebit-implementation/node_modules/browserify-rsa/readme.md b/truebit-implementation/node_modules/browserify-rsa/readme.md deleted file mode 100644 index 370fd95e..00000000 --- a/truebit-implementation/node_modules/browserify-rsa/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -browserify-rsa -==== -[![Build Status](https://travis-ci.org/crypto-browserify/browserify-rsa.svg)](https://travis-ci.org/crypto-browserify/browserify-rsa) - -RSA private decryption/signing using chinese remainder and blinding. - -API -==== - -Give it a message as a buffer and a private key (as decoded by https://www.npmjs.com/package/parse-asn1) and it returns encrypted data as a buffer. diff --git a/truebit-implementation/node_modules/browserify-rsa/test.js b/truebit-implementation/node_modules/browserify-rsa/test.js deleted file mode 100644 index 3d79a6d3..00000000 --- a/truebit-implementation/node_modules/browserify-rsa/test.js +++ /dev/null @@ -1,53 +0,0 @@ -var keys = [ - new Buffer('2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d494943647749424144414e42676b71686b6947397730424151454641415343416d457767674a6441674541416f4742414b756c55545a3842317163635a38630a44585247535930386757384b764c6c63787878474334675a484e543343425546386e3552344b453330615a79595a2f727473515a7530356a755a4a78614a30710a6d62653735646c5135642b586339424d586551672f4d70545a773554414e374f4964475959704642652b31504c5a367745666a6b59724d714d55636671324c710a68544c64416276424a6e755263595a4c716d42654f51384654724b7241674d4241414543675945416e6b485262455055332f57495353517250333669794362320a532f53425a774b6b7a6d764372427844576850654473777039632f324a593736724e57664c7a793869586755473857557a76486a653631516833676d42634b650a62556154476c34567938486131594241446f3552665272646d3046453474766776752f546b7146717042425a7765753534323835686b357a6c47376e2f4437590a646e4e58557075354d6c4e623578336757306b43515144554c2f2f637763585578592f6576614a50346a53652b5a7745515a6f2b7a58524c695055756c426f560a6177323843564d757864677771416f315831494b65665065556166375251753867434b61526e704775457558416b45417a785a54664d6d766d435544496577340a35476b36624b3236355851576468636769713235346c7042474f596d446a397943453779412b7a6d415351774d73585464514f6931684f434579725875534a350a632b2b4544514a4146683357726e7a6f455042797559584d6d45543874534652574d51357670674e716833686148523562346755433268786169756e43424e4c0a315270565939416f55694479774763472f5350683933436e4b42336e69774a42414b503741747369665a6756587469697a4234614d5468546a565961535a727a0a44304b6739447548796c706b4443686d467537375447724e55516741567559746668622f6252626c56612f4630684a3465514854334a554351425654363874620a4f6752556b30615039744333303231564e383258362b6b6c6f7753514e386f425058382b546644575355696c702f2b6a3234486b792b5a3239446f3779522f520a7175746e4c39324376426c564c56343d0a2d2d2d2d2d454e442050524956415445204b45592d2d2d2d2d0a', 'hex'), - new Buffer('2d2d2d2d2d424547494e205253412050524956415445204b45592d2d2d2d2d0a4d4949435641494241414a2f4f77737762466f2f757943386c7447662f794131412b6756354947646e4167506255534933477a624843412b782b544c472f744c0a76625277337231736d7070592f6a6b6b70695657314572534d754e307569787035676237385a39724831587057623557576770335761592f3945484d6a4d644f0a6b512f394c565a7652766c2f4d2f4669366f77502b712b616d4a493142456a454359666268474c33726d6c5664713471586334305177494441514142416e38490a565a3042506f414f68794633334b464d4878793872323866735667784a5559674d334e715167647634664661774359586a684a7a3964755535594a47464a474a0a57554765486c6b7959466c70693466336d377459374a61776d51555742304d4e536f4b48493363674458342f7466424e386e692b634f3065536f5235637a42590a4573414842553437703161774e46414877642b5a457576394834526d4d6e37703237397251547470416b4148334e7173322f7672524632635a554e34664958660a347848735142427955617947713861334a305547615346577636387a54554b466865727239755a6f744e70374e4a346a425869415277307138646f63585547310a416b4148676d4f4b486f4f5274416d696b71706d46454a5a4f7473584d614c43496d3445737a506f356369596f4c4d42635669743039416469516c74375a4a4c0a445930327376553162306167435a39376b446b6d48446b58416b414361384d394a454c7544732f502f76494759446b4d566174494666573662574630326546470a746157774d71436353457357766277307871597433346a5552704e62436a6d4379515677596641772f2b544c68503964416b414677526a64776a77333771706a0a646467316d4e697533376237737746786d6b694d4f585a5278614e4e736662353641313452704e337a6f6233516447557962476f644d494b5446626d552f6c750a436a71417861664a416b41473279663652576277464957664d7974375759436830566147424363677935373441696e566965456f335a5a7946664336332b786d0a33756f614e7934694c6f4a763447436a7155427a335a666356614f2f444457470a2d2d2d2d2d454e44205253412050524956415445204b45592d2d2d2d2d0a', 'hex'), - new Buffer('2d2d2d2d2d424547494e205253412050524956415445204b45592d2d2d2d2d0a4d4949456a77494241414b422f6779376d6a615767506546645659445a5752434139424e69763370506230657332372b464b593068737a4c614f7734374578430a744157704473483438545841667948425977424c67756179666b344c4749757078622b43474d62526f337845703043626659314a62793236543976476a5243310a666f484444554a4738347561526279487161663469367a74346756522b786c4145496a6b614641414b38634f6f58415431435671474c4c6c6a554363684c38500a6a61486a2f7972695a2f53377264776c49334c6e41427877776d4c726d522f7637315774706d4f2f614e47384e2b31706f2b5177616768546b79513539452f5a0a7641754f6b4657486f6b32712f523650594161326a645a397a696d3046714f502b6e6b5161454452624246426d4271547635664647666b32577341664b662f520a47302f5646642b5a654d353235315465547658483639356e6c53476175566c3941674d42414145436766344c725748592f6c35346f7554685a577676627275670a70667a36734a583267396c3779586d576c455773504543566f2f375355627059467074364f5a7939397a53672b494b624771574b6664686f4b725477495674430a4c30595a304e6c6d646e414e53497a30726f785147375a786b4c352b764853772f506d443978345577662b437a38684154436d4e42763171633630646b7975570a34434c71653732716154695657526f4f316961675167684e634c6f6f36765379363545784c614344545068613779753276773468465a705769456a57346478660a7246644c696978353242433836596c416c784d452f724c6738494a5676696c62796f39615764586d784f6155544c527636506b4644312f6756647738563951720a534c4e39466c4b326b6b6a695830647a6f6962765a7733744d6e74337979644178305838372b734d5256616843316270336b56507a3448793045575834514a2f0a504d33317647697549546b324e43643531445874314c746e324f503546614a536d4361456a6830586b5534716f7559796a585774384275364254436c327675610a466730556a6939432b496b504c6d61554d624d494f7761546b386357714c74685378734c6537304a354f6b477267664b554d2f772b4248483150742f506a7a6a0a432b2b6c306b6946614f5644566141563947704c504c43426f4b2f50433952622f72784d4d6f43434e774a2f4e5a756564496e793277334c4d69693737682f540a7a53766572674e47686a5936526e7661386c4c584a36646c726b6350417970733367577778716a344e5230542b474d3062445550564c62374d303758563753580a7637564a476d35324a625247774d3173732b72385854544e656d65476b2b5752784737546774734d715947584c66423851786b2f66352f4d63633030546c38750a7758464e7366784a786d7436416273547233673336774a2f49684f6e69627a3941642b6e63686c426e4e3351655733434b48717a61523138766f717674566d320a6b4a66484b31357072482f7353476d786d6945476772434a545a78744462614e434f372f56426a6e4b756455554968434177734c747571302f7a7562397641640a384731736366497076357161534e7a6d4b6f5838624f77417276725336775037794b726354737557496c484438724a5649374945446e516f5470354738664b310a68774a2f4d4968384d35763072356455594576366f494a5747636c65364148314a6d73503557496166677137325a32323838704863434648774e59384467394a0a3736517377564c6e556850546c6d6d33454f4f50474574616d32694144357230416679746c62346c624e6f51736a32737a65584f4e4458422b366f7565616a680a564e454c55723848635350356c677a525a6a4a57366146497a6a394c44526d516e55414f6a475358564f517445774a2f4d43515a374e2f763464494b654452410a3864385545785a332b674748756d7a697a7447524a30745172795a483250616b50354937562b316c377145556e4a3263336d462b65317634314570394c4376680a627a72504b773964786831386734622b37624d707357506e7372614b6836697078633761614f615a5630447867657a347a635a753050316f6c4f30634e334b4d0a6e784a305064733352386241684e43446453324a5a61527035513d3d0a2d2d2d2d2d454e44205253412050524956415445204b45592d2d2d2d2d0a', 'hex') -]; -var parseKey = require('parse-asn1'); -var privs = keys.map(parseKey); -var crt = require('./'); -var crypto = require('crypto'); -var test = require('tape'); -var constants = require('constants'); -var bn = require('bn.js'); -function testIt(priv, run) { - test('r is coprime with n ' + (run + 1), function (t) { - var len = 30; - t.plan(len); - var i = 0; - while(i++ < len) { - var r = crt.getr(priv); - t.equals(r.gcd(priv.modulus).toString(), '1', 'are coprime run ' + i); - } - }); -} -privs.forEach(testIt); - -function testMessage(key, run) { - var len = 40; - var i = 0; - while (len--) { - test('round trip key ' + (run + 1) + ' run ' + (++i), function (t) { - t.plan(1); - var priv = parseKey(key); - var len = priv.modulus.byteLength(); - var r = new bn(crypto.randomBytes(len)); - while (r.cmp(priv.modulus) >= 0) { - r = new bn(crypto.randomBytes(len)); - } - var buf = new Buffer(r.toArray()); - if (buf.byteLength < priv.modulus.byteLength()) { - var tmp = new Buffer(priv.modulus.byteLength() - buf.byteLength); - tmp.fill(0); - buf = Buffer.concat([tmp, buf]); - } - var nodeEncrypt = crypto.privateDecrypt({ - padding: constants.RSA_NO_PADDING, - key: key - }, buf).toString('hex'); - var myEncrypt = crt(buf, priv).toString('hex'); - t.equals(myEncrypt, nodeEncrypt, 'equal encrypts'); - }); - } -} -keys.forEach(testMessage); diff --git a/truebit-implementation/node_modules/browserify-sha3/.travis.yml b/truebit-implementation/node_modules/browserify-sha3/.travis.yml deleted file mode 100644 index de0175cc..00000000 --- a/truebit-implementation/node_modules/browserify-sha3/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.12" diff --git a/truebit-implementation/node_modules/browserify-sha3/README.md b/truebit-implementation/node_modules/browserify-sha3/README.md deleted file mode 100644 index 70b435f4..00000000 --- a/truebit-implementation/node_modules/browserify-sha3/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# browserify-sha3 [![Build Status](https://travis-ci.org/wanderer/browserify-sha3.svg)](https://travis-ci.org/wanderer/browserify-sha3) -[node-sha3](https://github.com/phusion/node-sha3) compatability for browserify diff --git a/truebit-implementation/node_modules/browserify-sha3/benchmark/index.js b/truebit-implementation/node_modules/browserify-sha3/benchmark/index.js deleted file mode 100644 index 26ff352f..00000000 --- a/truebit-implementation/node_modules/browserify-sha3/benchmark/index.js +++ /dev/null @@ -1,35 +0,0 @@ -var Benchmark = require('benchmark') -var SHA3 = require('sha3'); -var jsSha3 = require('js-sha3') -var cryptojsSha3 = require('crypto-js/sha3'); -var encHex = require("crypto-js/enc-hex"); -var crypto = require('crypto') - -var suite = new Benchmark.Suite; - -// add tests -suite.add('node sha3', function() { - var d = new SHA3.SHA3Hash() - d.update(crypto.randomBytes(64)) - d.digest('hex') - -}) -.add('cryptojs', function() { - var data = encHex.parse(crypto.randomBytes(64).toString('hex')) - cryptojsSha3(data, { - outputLength: 512 - }).toString(); -}) -.add('js-sha3', function(){ - jsSha3.sha3_512(crypto.randomBytes(64)); -}) - -// add listeners -.on('cycle', function(event) { - console.log(String(event.target)); -}) -.on('complete', function() { - console.log('Fastest is ' + this.filter('fastest').pluck('name')); -}) -// run async -.run({ 'async': true }); diff --git a/truebit-implementation/node_modules/browserify-sha3/benchmark/package.json b/truebit-implementation/node_modules/browserify-sha3/benchmark/package.json deleted file mode 100644 index 989d096b..00000000 --- a/truebit-implementation/node_modules/browserify-sha3/benchmark/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "benchmark": "^1.0.0", - "crypto-js": "^3.1.5", - "js-sha3": "^0.3.1" - } -} diff --git a/truebit-implementation/node_modules/browserify-sha3/index.js b/truebit-implementation/node_modules/browserify-sha3/index.js deleted file mode 100644 index 8e8cdff0..00000000 --- a/truebit-implementation/node_modules/browserify-sha3/index.js +++ /dev/null @@ -1,34 +0,0 @@ -const Sha3 = require('js-sha3') - -const hashLengths = [ 224, 256, 384, 512 ] - -var hash = function (bitcount) { - if (bitcount !== undefined && hashLengths.indexOf(bitcount) == -1) - throw new Error('Unsupported hash length') - this.content = [] - this.bitcount = bitcount ? 'keccak_' + bitcount : 'keccak_512' -} - -hash.prototype.update = function (i) { - if (Buffer.isBuffer(i)) - this.content.push(i) - else if (typeof i === 'string') - this.content.push(new Buffer(i)) - else - throw new Error('Unsupported argument to update') - return this -} - -hash.prototype.digest = function (encoding) { - var result = Sha3[this.bitcount](Buffer.concat(this.content)) - if (encoding === 'hex') - return result - else if (encoding === 'binary' || encoding === undefined) - return new Buffer(result, 'hex').toString('binary') - else - throw new Error('Unsupported encoding for digest: ' + encoding) -} - -module.exports = { - SHA3Hash: hash -} diff --git a/truebit-implementation/node_modules/browserify-sha3/package.json b/truebit-implementation/node_modules/browserify-sha3/package.json deleted file mode 100644 index a7207499..00000000 --- a/truebit-implementation/node_modules/browserify-sha3/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "browserify-sha3@^0.0.1", - "_id": "browserify-sha3@0.0.1", - "_inBundle": false, - "_integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", - "_location": "/browserify-sha3", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "browserify-sha3@^0.0.1", - "name": "browserify-sha3", - "escapedName": "browserify-sha3", - "rawSpec": "^0.0.1", - "saveSpec": null, - "fetchSpec": "^0.0.1" - }, - "_requiredBy": [ - "/keccakjs" - ], - "_resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", - "_shasum": "3ff34a3006ef15c0fb3567e541b91a2340123d11", - "_spec": "browserify-sha3@^0.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/keccakjs", - "author": { - "name": "mjbecze", - "email": "mjbecze@gmail.com" - }, - "bugs": { - "url": "https://github.com/wanderer/browserify-sha3/issues" - }, - "bundleDependencies": false, - "dependencies": { - "js-sha3": "^0.3.1" - }, - "deprecated": false, - "description": "node-sha3 compatability for browserify", - "devDependencies": { - "sha3": "^1.1.0", - "tape": "^4.0.1" - }, - "homepage": "https://github.com/wanderer/browserify-sha3#readme", - "keywords": [ - "sha3", - "browserify" - ], - "license": "MIT", - "main": "index.js", - "name": "browserify-sha3", - "repository": { - "type": "git", - "url": "git+https://github.com/wanderer/browserify-sha3.git" - }, - "scripts": { - "test": "node ./tests" - }, - "version": "0.0.1" -} diff --git a/truebit-implementation/node_modules/browserify-sha3/tests/index.js b/truebit-implementation/node_modules/browserify-sha3/tests/index.js deleted file mode 100644 index 0e8fdafa..00000000 --- a/truebit-implementation/node_modules/browserify-sha3/tests/index.js +++ /dev/null @@ -1,54 +0,0 @@ -var SHA3 = require('sha3') -var BSHA3 = require('../index.js') -var tape = require('tape') -var crypto = require('crypto') - -tape('basic test', function (t) { - t.plan(2) - // Generate 512-bit digest. - var d = new SHA3.SHA3Hash() - d.update('foo') - - // Generate 512-bit digest. - var bd = new BSHA3.SHA3Hash() - bd.update('foo') - t.equal(d.digest('hex'), bd.digest('hex')) - - // Generate 224-bit digest. - var d = new SHA3.SHA3Hash(224) - d.update('foo') - - // Generate 224-bit digest. - var bd = new BSHA3.SHA3Hash(224) - bd.update('foo') - t.equal(d.digest('hex'), bd.digest('hex')) -}) - -tape('encoding', function (t) { - t.plan(1) - - // Generate 224-bit digest. - var d = new SHA3.SHA3Hash(224) - d.update('foo') - - // Generate 224-bit digest. - var bd = new BSHA3.SHA3Hash(224) - bd.update('foo') - t.equal(d.digest().toString(), bd.digest().toString()) -}) - -tape('random test', function (t) { - t.plan(10) - - for (var i = 0; i < 10; i++) { - var data = crypto.randomBytes(32) - // Generate 512-bit digest. - var d = new SHA3.SHA3Hash() - d.update(data) - - // Generate 512-bit digest. - var bd = new BSHA3.SHA3Hash() - bd.update(data) - t.equal(d.digest('hex'), bd.digest('hex')) - } -}) diff --git a/truebit-implementation/node_modules/browserify-sign/LICENSE b/truebit-implementation/node_modules/browserify-sign/LICENSE deleted file mode 100644 index 870bcf1f..00000000 --- a/truebit-implementation/node_modules/browserify-sign/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2014-2015 Calvin Metcalf and browserify-sign contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/browserify-sign/README.md b/truebit-implementation/node_modules/browserify-sign/README.md deleted file mode 100644 index 0a9f43d5..00000000 --- a/truebit-implementation/node_modules/browserify-sign/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# browserify-sign - -[![NPM Package](https://img.shields.io/npm/v/browserify-sign.svg?style=flat-square)](https://www.npmjs.org/package/browserify-sign) -[![Build Status](https://img.shields.io/travis/crypto-browserify/browserify-sign.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/browserify-sign) -[![Dependency status](https://img.shields.io/david/crypto-browserify/browserify-sign.svg?style=flat-square)](https://david-dm.org/crypto-browserify/browserify-sign#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -A package to duplicate the functionality of node's crypto public key functions, much of this is based on [Fedor Indutny's](https://github.com/indutny) work on [indutny/tls.js](https://github.com/indutny/tls.js). - -## LICENSE - -ISC diff --git a/truebit-implementation/node_modules/browserify-sign/algos.js b/truebit-implementation/node_modules/browserify-sign/algos.js deleted file mode 100644 index dff5b78a..00000000 --- a/truebit-implementation/node_modules/browserify-sign/algos.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./browser/algorithms.json') diff --git a/truebit-implementation/node_modules/browserify-sign/browser/algorithms.json b/truebit-implementation/node_modules/browserify-sign/browser/algorithms.json deleted file mode 100644 index 39324a3f..00000000 --- a/truebit-implementation/node_modules/browserify-sign/browser/algorithms.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "sha224WithRSAEncryption": { - "sign": "rsa", - "hash": "sha224", - "id": "302d300d06096086480165030402040500041c" - }, - "RSA-SHA224": { - "sign": "ecdsa/rsa", - "hash": "sha224", - "id": "302d300d06096086480165030402040500041c" - }, - "sha256WithRSAEncryption": { - "sign": "rsa", - "hash": "sha256", - "id": "3031300d060960864801650304020105000420" - }, - "RSA-SHA256": { - "sign": "ecdsa/rsa", - "hash": "sha256", - "id": "3031300d060960864801650304020105000420" - }, - "sha384WithRSAEncryption": { - "sign": "rsa", - "hash": "sha384", - "id": "3041300d060960864801650304020205000430" - }, - "RSA-SHA384": { - "sign": "ecdsa/rsa", - "hash": "sha384", - "id": "3041300d060960864801650304020205000430" - }, - "sha512WithRSAEncryption": { - "sign": "rsa", - "hash": "sha512", - "id": "3051300d060960864801650304020305000440" - }, - "RSA-SHA512": { - "sign": "ecdsa/rsa", - "hash": "sha512", - "id": "3051300d060960864801650304020305000440" - }, - "RSA-SHA1": { - "sign": "rsa", - "hash": "sha1", - "id": "3021300906052b0e03021a05000414" - }, - "ecdsa-with-SHA1": { - "sign": "ecdsa", - "hash": "sha1", - "id": "" - }, - "sha256": { - "sign": "ecdsa", - "hash": "sha256", - "id": "" - }, - "sha224": { - "sign": "ecdsa", - "hash": "sha224", - "id": "" - }, - "sha384": { - "sign": "ecdsa", - "hash": "sha384", - "id": "" - }, - "sha512": { - "sign": "ecdsa", - "hash": "sha512", - "id": "" - }, - "DSA-SHA": { - "sign": "dsa", - "hash": "sha1", - "id": "" - }, - "DSA-SHA1": { - "sign": "dsa", - "hash": "sha1", - "id": "" - }, - "DSA": { - "sign": "dsa", - "hash": "sha1", - "id": "" - }, - "DSA-WITH-SHA224": { - "sign": "dsa", - "hash": "sha224", - "id": "" - }, - "DSA-SHA224": { - "sign": "dsa", - "hash": "sha224", - "id": "" - }, - "DSA-WITH-SHA256": { - "sign": "dsa", - "hash": "sha256", - "id": "" - }, - "DSA-SHA256": { - "sign": "dsa", - "hash": "sha256", - "id": "" - }, - "DSA-WITH-SHA384": { - "sign": "dsa", - "hash": "sha384", - "id": "" - }, - "DSA-SHA384": { - "sign": "dsa", - "hash": "sha384", - "id": "" - }, - "DSA-WITH-SHA512": { - "sign": "dsa", - "hash": "sha512", - "id": "" - }, - "DSA-SHA512": { - "sign": "dsa", - "hash": "sha512", - "id": "" - }, - "DSA-RIPEMD160": { - "sign": "dsa", - "hash": "rmd160", - "id": "" - }, - "ripemd160WithRSA": { - "sign": "rsa", - "hash": "rmd160", - "id": "3021300906052b2403020105000414" - }, - "RSA-RIPEMD160": { - "sign": "rsa", - "hash": "rmd160", - "id": "3021300906052b2403020105000414" - }, - "md5WithRSAEncryption": { - "sign": "rsa", - "hash": "md5", - "id": "3020300c06082a864886f70d020505000410" - }, - "RSA-MD5": { - "sign": "rsa", - "hash": "md5", - "id": "3020300c06082a864886f70d020505000410" - } -} diff --git a/truebit-implementation/node_modules/browserify-sign/browser/curves.json b/truebit-implementation/node_modules/browserify-sign/browser/curves.json deleted file mode 100644 index 8a713cf7..00000000 --- a/truebit-implementation/node_modules/browserify-sign/browser/curves.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "1.3.132.0.10": "secp256k1", - "1.3.132.0.33": "p224", - "1.2.840.10045.3.1.1": "p192", - "1.2.840.10045.3.1.7": "p256", - "1.3.132.0.34": "p384", - "1.3.132.0.35": "p521" -} diff --git a/truebit-implementation/node_modules/browserify-sign/browser/index.js b/truebit-implementation/node_modules/browserify-sign/browser/index.js deleted file mode 100644 index eef91fbb..00000000 --- a/truebit-implementation/node_modules/browserify-sign/browser/index.js +++ /dev/null @@ -1,91 +0,0 @@ -var createHash = require('create-hash') -var stream = require('stream') -var inherits = require('inherits') -var sign = require('./sign') -var verify = require('./verify') - -var algorithms = require('./algorithms.json') -Object.keys(algorithms).forEach(function (key) { - algorithms[key].id = new Buffer(algorithms[key].id, 'hex') - algorithms[key.toLowerCase()] = algorithms[key] -}) - -function Sign (algorithm) { - stream.Writable.call(this) - - var data = algorithms[algorithm] - if (!data) throw new Error('Unknown message digest') - - this._hashType = data.hash - this._hash = createHash(data.hash) - this._tag = data.id - this._signType = data.sign -} -inherits(Sign, stream.Writable) - -Sign.prototype._write = function _write (data, _, done) { - this._hash.update(data) - done() -} - -Sign.prototype.update = function update (data, enc) { - if (typeof data === 'string') data = new Buffer(data, enc) - - this._hash.update(data) - return this -} - -Sign.prototype.sign = function signMethod (key, enc) { - this.end() - var hash = this._hash.digest() - var sig = sign(hash, key, this._hashType, this._signType, this._tag) - - return enc ? sig.toString(enc) : sig -} - -function Verify (algorithm) { - stream.Writable.call(this) - - var data = algorithms[algorithm] - if (!data) throw new Error('Unknown message digest') - - this._hash = createHash(data.hash) - this._tag = data.id - this._signType = data.sign -} -inherits(Verify, stream.Writable) - -Verify.prototype._write = function _write (data, _, done) { - this._hash.update(data) - done() -} - -Verify.prototype.update = function update (data, enc) { - if (typeof data === 'string') data = new Buffer(data, enc) - - this._hash.update(data) - return this -} - -Verify.prototype.verify = function verifyMethod (key, sig, enc) { - if (typeof sig === 'string') sig = new Buffer(sig, enc) - - this.end() - var hash = this._hash.digest() - return verify(sig, hash, key, this._signType, this._tag) -} - -function createSign (algorithm) { - return new Sign(algorithm) -} - -function createVerify (algorithm) { - return new Verify(algorithm) -} - -module.exports = { - Sign: createSign, - Verify: createVerify, - createSign: createSign, - createVerify: createVerify -} diff --git a/truebit-implementation/node_modules/browserify-sign/browser/sign.js b/truebit-implementation/node_modules/browserify-sign/browser/sign.js deleted file mode 100644 index d2be0d26..00000000 --- a/truebit-implementation/node_modules/browserify-sign/browser/sign.js +++ /dev/null @@ -1,145 +0,0 @@ -// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var createHmac = require('create-hmac') -var crt = require('browserify-rsa') -var EC = require('elliptic').ec -var BN = require('bn.js') -var parseKeys = require('parse-asn1') -var curves = require('./curves.json') - -function sign (hash, key, hashType, signType, tag) { - var priv = parseKeys(key) - if (priv.curve) { - // rsa keys can be interpreted as ecdsa ones in openssl - if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') - return ecSign(hash, priv) - } else if (priv.type === 'dsa') { - if (signType !== 'dsa') throw new Error('wrong private key type') - return dsaSign(hash, priv, hashType) - } else { - if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') - } - hash = Buffer.concat([tag, hash]) - var len = priv.modulus.byteLength() - var pad = [ 0, 1 ] - while (hash.length + pad.length + 1 < len) pad.push(0xff) - pad.push(0x00) - var i = -1 - while (++i < hash.length) pad.push(hash[i]) - - var out = crt(pad, priv) - return out -} - -function ecSign (hash, priv) { - var curveId = curves[priv.curve.join('.')] - if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')) - - var curve = new EC(curveId) - var key = curve.keyFromPrivate(priv.privateKey) - var out = key.sign(hash) - - return new Buffer(out.toDER()) -} - -function dsaSign (hash, priv, algo) { - var x = priv.params.priv_key - var p = priv.params.p - var q = priv.params.q - var g = priv.params.g - var r = new BN(0) - var k - var H = bits2int(hash, q).mod(q) - var s = false - var kv = getKey(x, q, hash, algo) - while (s === false) { - k = makeKey(q, kv, algo) - r = makeR(g, k, p, q) - s = k.invm(q).imul(H.add(x.mul(r))).mod(q) - if (s.cmpn(0) === 0) { - s = false - r = new BN(0) - } - } - return toDER(r, s) -} - -function toDER (r, s) { - r = r.toArray() - s = s.toArray() - - // Pad values - if (r[0] & 0x80) r = [ 0 ].concat(r) - if (s[0] & 0x80) s = [ 0 ].concat(s) - - var total = r.length + s.length + 4 - var res = [ 0x30, total, 0x02, r.length ] - res = res.concat(r, [ 0x02, s.length ], s) - return new Buffer(res) -} - -function getKey (x, q, hash, algo) { - x = new Buffer(x.toArray()) - if (x.length < q.byteLength()) { - var zeros = new Buffer(q.byteLength() - x.length) - zeros.fill(0) - x = Buffer.concat([ zeros, x ]) - } - var hlen = hash.length - var hbits = bits2octets(hash, q) - var v = new Buffer(hlen) - v.fill(1) - var k = new Buffer(hlen) - k.fill(0) - k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest() - v = createHmac(algo, k).update(v).digest() - k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest() - v = createHmac(algo, k).update(v).digest() - return { k: k, v: v } -} - -function bits2int (obits, q) { - var bits = new BN(obits) - var shift = (obits.length << 3) - q.bitLength() - if (shift > 0) bits.ishrn(shift) - return bits -} - -function bits2octets (bits, q) { - bits = bits2int(bits, q) - bits = bits.mod(q) - var out = new Buffer(bits.toArray()) - if (out.length < q.byteLength()) { - var zeros = new Buffer(q.byteLength() - out.length) - zeros.fill(0) - out = Buffer.concat([ zeros, out ]) - } - return out -} - -function makeKey (q, kv, algo) { - var t - var k - - do { - t = new Buffer(0) - - while (t.length * 8 < q.bitLength()) { - kv.v = createHmac(algo, kv.k).update(kv.v).digest() - t = Buffer.concat([ t, kv.v ]) - } - - k = bits2int(t, q) - kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest() - kv.v = createHmac(algo, kv.k).update(kv.v).digest() - } while (k.cmp(q) !== -1) - - return k -} - -function makeR (g, k, p, q) { - return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) -} - -module.exports = sign -module.exports.getKey = getKey -module.exports.makeKey = makeKey diff --git a/truebit-implementation/node_modules/browserify-sign/browser/verify.js b/truebit-implementation/node_modules/browserify-sign/browser/verify.js deleted file mode 100644 index 4c24091f..00000000 --- a/truebit-implementation/node_modules/browserify-sign/browser/verify.js +++ /dev/null @@ -1,83 +0,0 @@ -// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var BN = require('bn.js') -var EC = require('elliptic').ec -var parseKeys = require('parse-asn1') -var curves = require('./curves.json') - -function verify (sig, hash, key, signType, tag) { - var pub = parseKeys(key) - if (pub.type === 'ec') { - // rsa keys can be interpreted as ecdsa ones in openssl - if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') - return ecVerify(sig, hash, pub) - } else if (pub.type === 'dsa') { - if (signType !== 'dsa') throw new Error('wrong public key type') - return dsaVerify(sig, hash, pub) - } else { - if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') - } - hash = Buffer.concat([tag, hash]) - var len = pub.modulus.byteLength() - var pad = [ 1 ] - var padNum = 0 - while (hash.length + pad.length + 2 < len) { - pad.push(0xff) - padNum++ - } - pad.push(0x00) - var i = -1 - while (++i < hash.length) { - pad.push(hash[i]) - } - pad = new Buffer(pad) - var red = BN.mont(pub.modulus) - sig = new BN(sig).toRed(red) - - sig = sig.redPow(new BN(pub.publicExponent)) - sig = new Buffer(sig.fromRed().toArray()) - var out = padNum < 8 ? 1 : 0 - len = Math.min(sig.length, pad.length) - if (sig.length !== pad.length) out = 1 - - i = -1 - while (++i < len) out |= sig[i] ^ pad[i] - return out === 0 -} - -function ecVerify (sig, hash, pub) { - var curveId = curves[pub.data.algorithm.curve.join('.')] - if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) - - var curve = new EC(curveId) - var pubkey = pub.data.subjectPrivateKey.data - - return curve.verify(hash, sig, pubkey) -} - -function dsaVerify (sig, hash, pub) { - var p = pub.data.p - var q = pub.data.q - var g = pub.data.g - var y = pub.data.pub_key - var unpacked = parseKeys.signature.decode(sig, 'der') - var s = unpacked.s - var r = unpacked.r - checkValue(s, q) - checkValue(r, q) - var montp = BN.mont(p) - var w = s.invm(q) - var v = g.toRed(montp) - .redPow(new BN(hash).mul(w).mod(q)) - .fromRed() - .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) - .mod(p) - .mod(q) - return v.cmp(r) === 0 -} - -function checkValue (b, q) { - if (b.cmpn(0) <= 0) throw new Error('invalid sig') - if (b.cmp(q) >= q) throw new Error('invalid sig') -} - -module.exports = verify diff --git a/truebit-implementation/node_modules/browserify-sign/index.js b/truebit-implementation/node_modules/browserify-sign/index.js deleted file mode 100644 index dafa0bc3..00000000 --- a/truebit-implementation/node_modules/browserify-sign/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var crypto = require('crypto') - -exports.createSign = crypto.createSign -exports.Sign = crypto.Sign - -exports.createVerify = crypto.createVerify -exports.Verify = crypto.Verify diff --git a/truebit-implementation/node_modules/browserify-sign/package.json b/truebit-implementation/node_modules/browserify-sign/package.json deleted file mode 100644 index 572bdd19..00000000 --- a/truebit-implementation/node_modules/browserify-sign/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "browserify-sign@^4.0.0", - "_id": "browserify-sign@4.0.4", - "_inBundle": false, - "_integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "_location": "/browserify-sign", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "browserify-sign@^4.0.0", - "name": "browserify-sign", - "escapedName": "browserify-sign", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/crypto-browserify" - ], - "_resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "_shasum": "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298", - "_spec": "browserify-sign@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "browser": "browser/index.js", - "bugs": { - "url": "https://github.com/crypto-browserify/browserify-sign/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - }, - "deprecated": false, - "description": "adds node crypto signing for browsers", - "devDependencies": { - "nyc": "^6.1.1", - "standard": "^6.0.8", - "tape": "^4.5.1" - }, - "files": [ - "browser", - "index.js", - "algos.js" - ], - "homepage": "https://github.com/crypto-browserify/browserify-sign#readme", - "license": "ISC", - "main": "index.js", - "name": "browserify-sign", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/browserify-sign.git" - }, - "scripts": { - "coverage": "nyc npm run unit", - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "tape test/*.js" - }, - "version": "4.0.4" -} diff --git a/truebit-implementation/node_modules/buffer-alloc-unsafe/index.js b/truebit-implementation/node_modules/buffer-alloc-unsafe/index.js deleted file mode 100644 index 0bd335ff..00000000 --- a/truebit-implementation/node_modules/buffer-alloc-unsafe/index.js +++ /dev/null @@ -1,17 +0,0 @@ -function allocUnsafe (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') - } - - if (size < 0) { - throw new RangeError('"size" argument must not be negative') - } - - if (Buffer.allocUnsafe) { - return Buffer.allocUnsafe(size) - } else { - return new Buffer(size) - } -} - -module.exports = allocUnsafe diff --git a/truebit-implementation/node_modules/buffer-alloc-unsafe/package.json b/truebit-implementation/node_modules/buffer-alloc-unsafe/package.json deleted file mode 100644 index fa0a9381..00000000 --- a/truebit-implementation/node_modules/buffer-alloc-unsafe/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "_from": "buffer-alloc-unsafe@^1.1.0", - "_id": "buffer-alloc-unsafe@1.1.0", - "_inBundle": false, - "_integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "_location": "/buffer-alloc-unsafe", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer-alloc-unsafe@^1.1.0", - "name": "buffer-alloc-unsafe", - "escapedName": "buffer-alloc-unsafe", - "rawSpec": "^1.1.0", - "saveSpec": null, - "fetchSpec": "^1.1.0" - }, - "_requiredBy": [ - "/buffer-alloc" - ], - "_resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "_shasum": "bd7dc26ae2972d0eda253be061dba992349c19f0", - "_spec": "buffer-alloc-unsafe@^1.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/buffer-alloc", - "bugs": { - "url": "https://github.com/LinusU/buffer-alloc-unsafe/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`.", - "devDependencies": { - "standard": "^7.1.2" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/LinusU/buffer-alloc-unsafe#readme", - "keywords": [ - "allocUnsafe", - "allocate", - "buffer allocUnsafe", - "buffer unsafe allocate", - "buffer", - "ponyfill", - "unsafe allocate" - ], - "license": "MIT", - "name": "buffer-alloc-unsafe", - "repository": { - "type": "git", - "url": "git+https://github.com/LinusU/buffer-alloc-unsafe.git" - }, - "scripts": { - "test": "standard && node test" - }, - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/buffer-alloc-unsafe/readme.md b/truebit-implementation/node_modules/buffer-alloc-unsafe/readme.md deleted file mode 100644 index 8725ecf6..00000000 --- a/truebit-implementation/node_modules/buffer-alloc-unsafe/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -# Buffer Alloc Unsafe - -A [ponyfill](https://ponyfill.com) for `Buffer.allocUnsafe`. - -Works as Node.js: `v7.0.0`
-Works on Node.js: `v0.10.0` - -## Installation - -```sh -npm install --save buffer-alloc-unsafe -``` - -## Usage - -```js -const allocUnsafe = require('buffer-alloc-unsafe') - -console.log(allocUnsafe(10)) -//=> - -console.log(allocUnsafe(10)) -//=> - -console.log(allocUnsafe(10)) -//=> - -allocUnsafe(-10) -//=> RangeError: "size" argument must not be negative -``` - -## API - -### allocUnsafe(size) - -- `size` <Integer> The desired length of the new `Buffer` - -Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must be -less than or equal to the value of `buffer.kMaxLength` and greater than or equal -to zero. Otherwise, a `RangeError` is thrown. - -## See also - -- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc` -- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill` -- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from` diff --git a/truebit-implementation/node_modules/buffer-alloc/index.js b/truebit-implementation/node_modules/buffer-alloc/index.js deleted file mode 100644 index fe658606..00000000 --- a/truebit-implementation/node_modules/buffer-alloc/index.js +++ /dev/null @@ -1,32 +0,0 @@ -var bufferFill = require('buffer-fill') -var allocUnsafe = require('buffer-alloc-unsafe') - -module.exports = function alloc (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') - } - - if (size < 0) { - throw new RangeError('"size" argument must not be negative') - } - - if (Buffer.alloc) { - return Buffer.alloc(size, fill, encoding) - } - - var buffer = allocUnsafe(size) - - if (size === 0) { - return buffer - } - - if (fill === undefined) { - return bufferFill(buffer, 0) - } - - if (typeof encoding !== 'string') { - encoding = undefined - } - - return bufferFill(buffer, fill, encoding) -} diff --git a/truebit-implementation/node_modules/buffer-alloc/package.json b/truebit-implementation/node_modules/buffer-alloc/package.json deleted file mode 100644 index 9905ef04..00000000 --- a/truebit-implementation/node_modules/buffer-alloc/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "buffer-alloc@^1.2.0", - "_id": "buffer-alloc@1.2.0", - "_inBundle": false, - "_integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "_location": "/buffer-alloc", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer-alloc@^1.2.0", - "name": "buffer-alloc", - "escapedName": "buffer-alloc", - "rawSpec": "^1.2.0", - "saveSpec": null, - "fetchSpec": "^1.2.0" - }, - "_requiredBy": [ - "/tar-stream" - ], - "_resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "_shasum": "890dd90d923a873e08e10e5fd51a57e5b7cce0ec", - "_spec": "buffer-alloc@^1.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar-stream", - "bugs": { - "url": "https://github.com/LinusU/buffer-alloc/issues" - }, - "bundleDependencies": false, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - }, - "deprecated": false, - "description": "A [ponyfill](https://ponyfill.com) for `Buffer.alloc`.", - "devDependencies": { - "standard": "^7.1.2" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/LinusU/buffer-alloc#readme", - "keywords": [ - "alloc", - "allocate", - "buffer alloc", - "buffer allocate", - "buffer" - ], - "license": "MIT", - "name": "buffer-alloc", - "repository": { - "type": "git", - "url": "git+https://github.com/LinusU/buffer-alloc.git" - }, - "scripts": { - "test": "standard && node test" - }, - "version": "1.2.0" -} diff --git a/truebit-implementation/node_modules/buffer-alloc/readme.md b/truebit-implementation/node_modules/buffer-alloc/readme.md deleted file mode 100644 index 80c7d7bb..00000000 --- a/truebit-implementation/node_modules/buffer-alloc/readme.md +++ /dev/null @@ -1,43 +0,0 @@ -# Buffer Alloc - -A [ponyfill](https://ponyfill.com) for `Buffer.alloc`. - -Works as Node.js: `v7.0.0`
-Works on Node.js: `v0.10.0` - -## Installation - -```sh -npm install --save buffer-alloc -``` - -## Usage - -```js -const alloc = require('buffer-alloc') - -console.log(alloc(4)) -//=> - -console.log(alloc(6, 0x41)) -//=> - -console.log(alloc(10, 'linus', 'utf8')) -//=> -``` - -## API - -### alloc(size[, fill[, encoding]]) - -- `size` <Integer> The desired length of the new `Buffer` -- `fill` <String> | <Buffer> | <Integer> A value to pre-fill the new `Buffer` with. **Default:** `0` -- `encoding` <String> If `fill` is a string, this is its encoding. **Default:** `'utf8'` - -Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the `Buffer` will be zero-filled. - -## See also - -- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe` -- [buffer-fill](https://github.com/LinusU/buffer-fill) A ponyfill for `Buffer.fill` -- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from` diff --git a/truebit-implementation/node_modules/buffer-crc32/LICENSE b/truebit-implementation/node_modules/buffer-crc32/LICENSE deleted file mode 100644 index 4cef10eb..00000000 --- a/truebit-implementation/node_modules/buffer-crc32/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -The MIT License - -Copyright (c) 2013 Brian J. Brennan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/buffer-crc32/README.md b/truebit-implementation/node_modules/buffer-crc32/README.md deleted file mode 100644 index 0d9d8b83..00000000 --- a/truebit-implementation/node_modules/buffer-crc32/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# buffer-crc32 - -[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) - -crc32 that works with binary data and fancy character sets, outputs -buffer, signed or unsigned data and has tests. - -Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix - -# install -``` -npm install buffer-crc32 -``` - -# example -```js -var crc32 = require('buffer-crc32'); -// works with buffers -var buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) -crc32(buf) // -> - -// has convenience methods for getting signed or unsigned ints -crc32.signed(buf) // -> -1805997238 -crc32.unsigned(buf) // -> 2488970058 - -// will cast to buffer if given a string, so you can -// directly use foreign characters safely -crc32('自動販売機') // -> - -// and works in append mode too -var partialCrc = crc32('hey'); -var partialCrc = crc32(' ', partialCrc); -var partialCrc = crc32('sup', partialCrc); -var partialCrc = crc32(' ', partialCrc); -var finalCrc = crc32('bros', partialCrc); // -> -``` - -# tests -This was tested against the output of zlib's crc32 method. You can run -the tests with`npm test` (requires tap) - -# see also -https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also -supports buffer inputs and return unsigned ints (thanks @tjholowaychuk). - -# license -MIT/X11 diff --git a/truebit-implementation/node_modules/buffer-crc32/index.js b/truebit-implementation/node_modules/buffer-crc32/index.js deleted file mode 100644 index 6727dd39..00000000 --- a/truebit-implementation/node_modules/buffer-crc32/index.js +++ /dev/null @@ -1,111 +0,0 @@ -var Buffer = require('buffer').Buffer; - -var CRC_TABLE = [ - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d -]; - -if (typeof Int32Array !== 'undefined') { - CRC_TABLE = new Int32Array(CRC_TABLE); -} - -function ensureBuffer(input) { - if (Buffer.isBuffer(input)) { - return input; - } - - var hasNewBufferAPI = - typeof Buffer.alloc === "function" && - typeof Buffer.from === "function"; - - if (typeof input === "number") { - return hasNewBufferAPI ? Buffer.alloc(input) : new Buffer(input); - } - else if (typeof input === "string") { - return hasNewBufferAPI ? Buffer.from(input) : new Buffer(input); - } - else { - throw new Error("input must be buffer, number, or string, received " + - typeof input); - } -} - -function bufferizeInt(num) { - var tmp = ensureBuffer(4); - tmp.writeInt32BE(num, 0); - return tmp; -} - -function _crc32(buf, previous) { - buf = ensureBuffer(buf); - if (Buffer.isBuffer(previous)) { - previous = previous.readUInt32BE(0); - } - var crc = ~~previous ^ -1; - for (var n = 0; n < buf.length; n++) { - crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8); - } - return (crc ^ -1); -} - -function crc32() { - return bufferizeInt(_crc32.apply(null, arguments)); -} -crc32.signed = function () { - return _crc32.apply(null, arguments); -}; -crc32.unsigned = function () { - return _crc32.apply(null, arguments) >>> 0; -}; - -module.exports = crc32; diff --git a/truebit-implementation/node_modules/buffer-crc32/package.json b/truebit-implementation/node_modules/buffer-crc32/package.json deleted file mode 100644 index e2a99469..00000000 --- a/truebit-implementation/node_modules/buffer-crc32/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "buffer-crc32@~0.2.3", - "_id": "buffer-crc32@0.2.13", - "_inBundle": false, - "_integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "_location": "/buffer-crc32", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer-crc32@~0.2.3", - "name": "buffer-crc32", - "escapedName": "buffer-crc32", - "rawSpec": "~0.2.3", - "saveSpec": null, - "fetchSpec": "~0.2.3" - }, - "_requiredBy": [ - "/yauzl" - ], - "_resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "_shasum": "0d333e3f00eac50aa1454abd30ef8c2a5d9a7242", - "_spec": "buffer-crc32@~0.2.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/yauzl", - "author": { - "name": "Brian J. Brennan", - "email": "brianloveswords@gmail.com" - }, - "bugs": { - "url": "https://github.com/brianloveswords/buffer-crc32/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Vladimir Kuznetsov" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "A pure javascript CRC32 algorithm that plays nice with binary data", - "devDependencies": { - "tap": "~0.2.5" - }, - "engines": { - "node": "*" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/brianloveswords/buffer-crc32", - "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/brianloveswords/buffer-crc32/raw/master/LICENSE" - } - ], - "main": "index.js", - "name": "buffer-crc32", - "optionalDependencies": {}, - "repository": { - "type": "git", - "url": "git://github.com/brianloveswords/buffer-crc32.git" - }, - "scripts": { - "test": "tap tests/*.test.js" - }, - "version": "0.2.13" -} diff --git a/truebit-implementation/node_modules/buffer-fill/index.js b/truebit-implementation/node_modules/buffer-fill/index.js deleted file mode 100644 index 428a9e1f..00000000 --- a/truebit-implementation/node_modules/buffer-fill/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/* Node.js 6.4.0 and up has full support */ -var hasFullSupport = (function () { - try { - if (!Buffer.isEncoding('latin1')) { - return false - } - - var buf = Buffer.alloc ? Buffer.alloc(4) : new Buffer(4) - - buf.fill('ab', 'ucs2') - - return (buf.toString('hex') === '61006200') - } catch (_) { - return false - } -}()) - -function isSingleByte (val) { - return (val.length === 1 && val.charCodeAt(0) < 256) -} - -function fillWithNumber (buffer, val, start, end) { - if (start < 0 || end > buffer.length) { - throw new RangeError('Out of range index') - } - - start = start >>> 0 - end = end === undefined ? buffer.length : end >>> 0 - - if (end > start) { - buffer.fill(val, start, end) - } - - return buffer -} - -function fillWithBuffer (buffer, val, start, end) { - if (start < 0 || end > buffer.length) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return buffer - } - - start = start >>> 0 - end = end === undefined ? buffer.length : end >>> 0 - - var pos = start - var len = val.length - while (pos <= (end - len)) { - val.copy(buffer, pos) - pos += len - } - - if (pos !== end) { - val.copy(buffer, pos, 0, end - pos) - } - - return buffer -} - -function fill (buffer, val, start, end, encoding) { - if (hasFullSupport) { - return buffer.fill(val, start, end, encoding) - } - - if (typeof val === 'number') { - return fillWithNumber(buffer, val, start, end) - } - - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = buffer.length - } else if (typeof end === 'string') { - encoding = end - end = buffer.length - } - - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - - if (encoding === 'latin1') { - encoding = 'binary' - } - - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - - if (val === '') { - return fillWithNumber(buffer, 0, start, end) - } - - if (isSingleByte(val)) { - return fillWithNumber(buffer, val.charCodeAt(0), start, end) - } - - val = new Buffer(val, encoding) - } - - if (Buffer.isBuffer(val)) { - return fillWithBuffer(buffer, val, start, end) - } - - // Other values (e.g. undefined, boolean, object) results in zero-fill - return fillWithNumber(buffer, 0, start, end) -} - -module.exports = fill diff --git a/truebit-implementation/node_modules/buffer-fill/package.json b/truebit-implementation/node_modules/buffer-fill/package.json deleted file mode 100644 index f9ae8b0b..00000000 --- a/truebit-implementation/node_modules/buffer-fill/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "_from": "buffer-fill@^1.0.0", - "_id": "buffer-fill@1.0.0", - "_inBundle": false, - "_integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "_location": "/buffer-fill", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer-fill@^1.0.0", - "name": "buffer-fill", - "escapedName": "buffer-fill", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/buffer-alloc" - ], - "_resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "_shasum": "f8f78b76789888ef39f205cd637f68e702122b2c", - "_spec": "buffer-fill@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/buffer-alloc", - "bugs": { - "url": "https://github.com/LinusU/buffer-fill/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A [ponyfill](https://ponyfill.com) for `Buffer.fill`.", - "devDependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "standard": "^7.1.2" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/LinusU/buffer-fill#readme", - "license": "MIT", - "name": "buffer-fill", - "repository": { - "type": "git", - "url": "git+https://github.com/LinusU/buffer-fill.git" - }, - "scripts": { - "test": "standard && node test" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/buffer-fill/readme.md b/truebit-implementation/node_modules/buffer-fill/readme.md deleted file mode 100644 index ac307383..00000000 --- a/truebit-implementation/node_modules/buffer-fill/readme.md +++ /dev/null @@ -1,54 +0,0 @@ -# Buffer Fill - -A [ponyfill](https://ponyfill.com) for `Buffer.fill`. - -Works as Node.js: `v6.4.0`
-Works on Node.js: `v0.10.0` - -## Installation - -```sh -npm install --save buffer-fill -``` - -## Usage - -```js -const fill = require('buffer-fill') -const buf = Buffer.allocUnsafe(5) - -console.log(buf.fill(8)) -//=> - -console.log(buf.fill(9, 2, 4)) -//=> - -console.log(buf.fill('linus', 'latin1')) -//=> - -console.log(buf.fill('\u0222')) -//=> -``` - -## API - -### fill(buf, value[, offset[, end]][, encoding]) - -- `value` <String> | <Buffer> | <Integer> The value to fill `buf` with -- `offset` <Integer> Where to start filling `buf`. **Default:** `0` -- `end` <Integer> Where to stop filling `buf` (not inclusive). **Default:** `buf.length` -- `encoding` <String> If `value` is a string, this is its encoding. **Default:** `'utf8'` -- Return: <Buffer> A reference to `buf` - -Fills `buf` with the specified `value`. If the `offset` and `end` are not given, -the entire `buf` will be filled. This is meant to be a small simplification to -allow the creation and filling of a `Buffer` to be done on a single line. - -If the final write of a `fill()` operation falls on a multi-byte character, then -only the first bytes of that character that fit into `buf` are written. - -## See also - -- [buffer-alloc-unsafe](https://github.com/LinusU/buffer-alloc-unsafe) A ponyfill for `Buffer.allocUnsafe` -- [buffer-alloc](https://github.com/LinusU/buffer-alloc) A ponyfill for `Buffer.alloc` -- [buffer-from](https://github.com/LinusU/buffer-from) A ponyfill for `Buffer.from` diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/.editorconfig b/truebit-implementation/node_modules/buffer-to-arraybuffer/.editorconfig deleted file mode 100644 index 7727cd6c..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/.editorconfig +++ /dev/null @@ -1,23 +0,0 @@ -# EditorConfig is awesome: http://EditorConfig.org - -# top-most EditorConfig file -root = true - -[*] -# use line feed -end_of_line = lf - -# ensure file ends with a newline when saving -insert_final_newline = true - -# soft tabs -indent_style = space - -# number of columns used for each indentation level -indent_size = 2 - -# remove any whitespace characters preceding newline characters -trim_trailing_whitespace = true - -# character set -charset = utf-8 diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/.gitattributes b/truebit-implementation/node_modules/buffer-to-arraybuffer/.gitattributes deleted file mode 100644 index 4c4ff8ca..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Convert line endings to LF (Line Feed) -* text=auto \ No newline at end of file diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/.npmignore b/truebit-implementation/node_modules/buffer-to-arraybuffer/.npmignore deleted file mode 100644 index 403e74f5..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/.npmignore +++ /dev/null @@ -1,103 +0,0 @@ -//this will affect all the git repos -git config --global core.excludesfile ~/.gitignore - - -//update files since .ignore won't if already tracked -git rm --cached - -# Compiled source # -################### -*.com -*.class -*.dll -*.exe -*.o -*.so - -# Packages # -############ -# it's better to unpack these files and commit the raw source -# git has its own built in compression methods -*.7z -*.dmg -*.gz -*.iso -*.jar -*.rar -*.tar -*.zip - -# Logs and databases # -###################### -*.log -*.sql -*.sqlite - -# OS generated files # -###################### -.DS_Store -.DS_Store? -._* -.Spotlight-V100 -.Trashes -# Icon? -ehthumbs.db -Thumbs.db -.cache -.project -.settings -.tmproj -*.esproj -nbproject - -# Numerous always-ignore extensions # -##################################### -*.diff -*.err -*.orig -*.rej -*.swn -*.swo -*.swp -*.vi -*~ -*.sass-cache -*.grunt -*.tmp - -# Dreamweaver added files # -########################### -_notes -dwsync.xml - -# Komodo # -########################### -*.komodoproject -.komodotools - -# Node # -##################### -node_modules - -# Bower # -##################### -bower_components - -# Folders to ignore # -##################### -.hg -.svn -.CVS -intermediate -publish -.idea -.graphics -_test -_archive -uploads -tmp - -# Vim files to ignore # -####################### -.VimballRecord -.netrwhist diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/CHANGELOG.md b/truebit-implementation/node_modules/buffer-to-arraybuffer/CHANGELOG.md deleted file mode 100644 index 819fd752..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/CHANGELOG.md +++ /dev/null @@ -1,2 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/LICENSE.md b/truebit-implementation/node_modules/buffer-to-arraybuffer/LICENSE.md deleted file mode 100644 index aae38a6e..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT license - -Copyright (C) 2014 Miguel Mota - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/README.md b/truebit-implementation/node_modules/buffer-to-arraybuffer/README.md deleted file mode 100644 index dbcaa608..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# buffer-to-arraybuffer - -> Convert Buffer to ArrayBuffer - -# Install - -```bash -npm install buffer-to-arraybuffer -``` - -# Usage - -```javascript -var bufferToArrayBuffer = require('buffer-to-arraybuffer'); - -var b = new Buffer(12); -b.write('abc', 0); - -var ab = bufferToArrayBuffer(b); -String.fromCharCode.apply(null, new Uint8Array(ab)); // 'abc' -``` - -NOTE: If you only target node `v4.3+`, you can simply just do: - -```javascript -new Buffer([12]).buffer -``` - -# License - -MIT diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/bower.json b/truebit-implementation/node_modules/buffer-to-arraybuffer/bower.json deleted file mode 100644 index d1d19ac7..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/bower.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "buffer-to-arraybuffer", - "main": "buffer-to-arraybuffer.js", - "version": "0.0.4", - "homepage": "https://github.com/miguelmota/buffer-to-arraybuffer", - "authors": [ - "Miguel Mota " - ], - "description": "Convert Buffer to ArrayBuffer", - "keywords": [ - "buffer", - "array" - ], - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "license": "MIT" -} diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/buffer-to-arraybuffer.js b/truebit-implementation/node_modules/buffer-to-arraybuffer/buffer-to-arraybuffer.js deleted file mode 100644 index d79d1a2c..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/buffer-to-arraybuffer.js +++ /dev/null @@ -1,31 +0,0 @@ -(function(root) { - var isArrayBufferSupported = (new Buffer(0)).buffer instanceof ArrayBuffer; - - var bufferToArrayBuffer = isArrayBufferSupported ? bufferToArrayBufferSlice : bufferToArrayBufferCycle; - - function bufferToArrayBufferSlice(buffer) { - return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); - } - - function bufferToArrayBufferCycle(buffer) { - var ab = new ArrayBuffer(buffer.length); - var view = new Uint8Array(ab); - for (var i = 0; i < buffer.length; ++i) { - view[i] = buffer[i]; - } - return ab; - } - - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = bufferToArrayBuffer; - } - exports.bufferToArrayBuffer = bufferToArrayBuffer; - } else if (typeof define === 'function' && define.amd) { - define([], function() { - return bufferToArrayBuffer; - }); - } else { - root.bufferToArrayBuffer = bufferToArrayBuffer; - } -})(this); diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/package.json b/truebit-implementation/node_modules/buffer-to-arraybuffer/package.json deleted file mode 100644 index e266407b..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "buffer-to-arraybuffer@^0.0.5", - "_id": "buffer-to-arraybuffer@0.0.5", - "_inBundle": false, - "_integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=", - "_location": "/buffer-to-arraybuffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer-to-arraybuffer@^0.0.5", - "name": "buffer-to-arraybuffer", - "escapedName": "buffer-to-arraybuffer", - "rawSpec": "^0.0.5", - "saveSpec": null, - "fetchSpec": "^0.0.5" - }, - "_requiredBy": [ - "/xhr-request" - ], - "_resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "_shasum": "6064a40fa76eb43c723aba9ef8f6e1216d10511a", - "_spec": "buffer-to-arraybuffer@^0.0.5", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/xhr-request", - "author": { - "name": "Miguel Mota", - "email": "hello@miguelmota.com", - "url": "http://www.miguelmota.com/" - }, - "bugs": { - "url": "https://github.com/miguelmota/buffer-to-arraybuffer/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Convert Buffer to ArrayBuffer", - "devDependencies": { - "tape": "^4.7.0" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/miguelmota/buffer-to-arraybuffer", - "keywords": [ - "buffer", - "array" - ], - "license": "MIT", - "main": "buffer-to-arraybuffer.js", - "name": "buffer-to-arraybuffer", - "repository": { - "type": "git", - "url": "git+https://github.com/miguelmota/buffer-to-arraybuffer.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "version": "0.0.5" -} diff --git a/truebit-implementation/node_modules/buffer-to-arraybuffer/test/buffer-to-arraybuffer.js b/truebit-implementation/node_modules/buffer-to-arraybuffer/test/buffer-to-arraybuffer.js deleted file mode 100644 index 76c74c1c..00000000 --- a/truebit-implementation/node_modules/buffer-to-arraybuffer/test/buffer-to-arraybuffer.js +++ /dev/null @@ -1,33 +0,0 @@ -var test = require('tape'); -var bufferToArrayBuffer = require('../buffer-to-arraybuffer'); - -function bufferEqual(a, b) { - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) return false; - } - return true; -} - -function arrayBufferToString(b) { - return String.fromCharCode.apply(null, new Uint8Array(b)); -} - -test('bufferToArrayBuffer', function (t) { - t.plan(2); - - var str = 'abc'; - - var b = new Buffer(str.length); - b.write(str, 0); - - var ab = new ArrayBuffer(str.length); - var v = new DataView(ab); - str.split('').forEach(function(s, i) { - v.setUint8(i, s.charCodeAt(0)); - }); - - var cab = bufferToArrayBuffer(b); - - t.strictEqual(bufferEqual(cab, b), true); - t.equal(arrayBufferToString(cab), str); -}); diff --git a/truebit-implementation/node_modules/buffer-xor/.npmignore b/truebit-implementation/node_modules/buffer-xor/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/truebit-implementation/node_modules/buffer-xor/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/truebit-implementation/node_modules/buffer-xor/.travis.yml b/truebit-implementation/node_modules/buffer-xor/.travis.yml deleted file mode 100644 index d9f695b7..00000000 --- a/truebit-implementation/node_modules/buffer-xor/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -before_install: - - "npm install npm -g" -node_js: - - "0.12" -env: - - TEST_SUITE=standard - - TEST_SUITE=unit -script: "npm run-script $TEST_SUITE" diff --git a/truebit-implementation/node_modules/buffer-xor/LICENSE b/truebit-implementation/node_modules/buffer-xor/LICENSE deleted file mode 100644 index bba52181..00000000 --- a/truebit-implementation/node_modules/buffer-xor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Daniel Cousens - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/buffer-xor/README.md b/truebit-implementation/node_modules/buffer-xor/README.md deleted file mode 100644 index 007f0582..00000000 --- a/truebit-implementation/node_modules/buffer-xor/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# buffer-xor - -[![TRAVIS](https://secure.travis-ci.org/crypto-browserify/buffer-xor.png)](http://travis-ci.org/crypto-browserify/buffer-xor) -[![NPM](http://img.shields.io/npm/v/buffer-xor.svg)](https://www.npmjs.org/package/buffer-xor) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -A simple module for bitwise-xor on buffers. - - -## Examples - -``` javascript -var xor = require("buffer-xor") -var a = new Buffer('00ff0f', 'hex') -var b = new Buffer('f0f0', 'hex') - -console.log(xor(a, b)) -// => -``` - - -Or for those seeking those few extra cycles, perform the operation in place: - -``` javascript -var xorInplace = require("buffer-xor/inplace") -var a = new Buffer('00ff0f', 'hex') -var b = new Buffer('f0f0', 'hex') - -console.log(xorInplace(a, b)) -// => -// NOTE: xorInplace will return the shorter slice of its parameters - -// See that a has been mutated -console.log(a) -// => -``` - - -## License [MIT](LICENSE) - diff --git a/truebit-implementation/node_modules/buffer-xor/index.js b/truebit-implementation/node_modules/buffer-xor/index.js deleted file mode 100644 index 85ee6f63..00000000 --- a/truebit-implementation/node_modules/buffer-xor/index.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = function xor (a, b) { - var length = Math.min(a.length, b.length) - var buffer = new Buffer(length) - - for (var i = 0; i < length; ++i) { - buffer[i] = a[i] ^ b[i] - } - - return buffer -} diff --git a/truebit-implementation/node_modules/buffer-xor/inline.js b/truebit-implementation/node_modules/buffer-xor/inline.js deleted file mode 100644 index 87975703..00000000 --- a/truebit-implementation/node_modules/buffer-xor/inline.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./inplace') diff --git a/truebit-implementation/node_modules/buffer-xor/inplace.js b/truebit-implementation/node_modules/buffer-xor/inplace.js deleted file mode 100644 index d71c172c..00000000 --- a/truebit-implementation/node_modules/buffer-xor/inplace.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = function xorInplace (a, b) { - var length = Math.min(a.length, b.length) - - for (var i = 0; i < length; ++i) { - a[i] = a[i] ^ b[i] - } - - return a.slice(0, length) -} diff --git a/truebit-implementation/node_modules/buffer-xor/package.json b/truebit-implementation/node_modules/buffer-xor/package.json deleted file mode 100644 index cd31f01a..00000000 --- a/truebit-implementation/node_modules/buffer-xor/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "buffer-xor@^1.0.3", - "_id": "buffer-xor@1.0.3", - "_inBundle": false, - "_integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "_location": "/buffer-xor", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer-xor@^1.0.3", - "name": "buffer-xor", - "escapedName": "buffer-xor", - "rawSpec": "^1.0.3", - "saveSpec": null, - "fetchSpec": "^1.0.3" - }, - "_requiredBy": [ - "/browserify-aes" - ], - "_resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "_shasum": "26e61ed1422fb70dd42e6e36729ed51d855fe8d9", - "_spec": "buffer-xor@^1.0.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/browserify-aes", - "author": { - "name": "Daniel Cousens" - }, - "bugs": { - "url": "https://github.com/crypto-browserify/buffer-xor/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A simple module for bitwise-xor on buffers", - "devDependencies": { - "mocha": "*", - "standard": "*" - }, - "homepage": "https://github.com/crypto-browserify/buffer-xor", - "keywords": [ - "bits", - "bitwise", - "buffer", - "buffer-xor", - "crypto", - "inline", - "math", - "memory", - "performance", - "xor" - ], - "license": "MIT", - "main": "index.js", - "name": "buffer-xor", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/buffer-xor.git" - }, - "scripts": { - "standard": "standard", - "test": "npm run-script unit", - "unit": "mocha" - }, - "version": "1.0.3" -} diff --git a/truebit-implementation/node_modules/buffer-xor/test/fixtures.json b/truebit-implementation/node_modules/buffer-xor/test/fixtures.json deleted file mode 100644 index 6f3431ef..00000000 --- a/truebit-implementation/node_modules/buffer-xor/test/fixtures.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "a": "000f", - "b": "f0ff", - "expected": "f0f0" - }, - { - "a": "000f0f", - "b": "f0ff", - "mutated": "f0f00f", - "expected": "f0f0" - }, - { - "a": "000f", - "b": "f0ffff", - "expected": "f0f0" - }, - { - "a": "000000", - "b": "000000", - "expected": "000000" - } -] diff --git a/truebit-implementation/node_modules/buffer-xor/test/index.js b/truebit-implementation/node_modules/buffer-xor/test/index.js deleted file mode 100644 index 06eacab4..00000000 --- a/truebit-implementation/node_modules/buffer-xor/test/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/* global describe, it */ - -var assert = require('assert') -var xor = require('../') -var xorInplace = require('../inplace') -var fixtures = require('./fixtures') - -describe('xor', function () { - fixtures.forEach(function (f) { - it('returns ' + f.expected + ' for ' + f.a + '/' + f.b, function () { - var a = new Buffer(f.a, 'hex') - var b = new Buffer(f.b, 'hex') - var actual = xor(a, b) - - assert.equal(actual.toString('hex'), f.expected) - - // a/b unchanged - assert.equal(a.toString('hex'), f.a) - assert.equal(b.toString('hex'), f.b) - }) - }) -}) - -describe('xor/inplace', function () { - fixtures.forEach(function (f) { - it('returns ' + f.expected + ' for ' + f.a + '/' + f.b, function () { - var a = new Buffer(f.a, 'hex') - var b = new Buffer(f.b, 'hex') - var actual = xorInplace(a, b) - - assert.equal(actual.toString('hex'), f.expected) - - // a mutated, b unchanged - assert.equal(a.toString('hex'), f.mutated || f.expected) - assert.equal(b.toString('hex'), f.b) - }) - }) -}) diff --git a/truebit-implementation/node_modules/buffer/AUTHORS.md b/truebit-implementation/node_modules/buffer/AUTHORS.md deleted file mode 100644 index 2aa07bfd..00000000 --- a/truebit-implementation/node_modules/buffer/AUTHORS.md +++ /dev/null @@ -1,55 +0,0 @@ -# Authors - -#### Ordered by first contribution. - -- Romain Beauxis (toots@rastageeks.org) -- Tobias Koppers (tobias.koppers@googlemail.com) -- Janus (ysangkok@gmail.com) -- Rainer Dreyer (rdrey1@gmail.com) -- Tõnis Tiigi (tonistiigi@gmail.com) -- James Halliday (mail@substack.net) -- Michael Williamson (mike@zwobble.org) -- elliottcable (github@elliottcable.name) -- rafael (rvalle@livelens.net) -- Andrew Kelley (superjoe30@gmail.com) -- Andreas Madsen (amwebdk@gmail.com) -- Mike Brevoort (mike.brevoort@pearson.com) -- Brian White (mscdex@mscdex.net) -- Feross Aboukhadijeh (feross@feross.org) -- Ruben Verborgh (ruben@verborgh.org) -- eliang (eliang.cs@gmail.com) -- Jesse Tane (jesse.tane@gmail.com) -- Alfonso Boza (alfonso@cloud.com) -- Mathias Buus (mathiasbuus@gmail.com) -- Devon Govett (devongovett@gmail.com) -- Daniel Cousens (github@dcousens.com) -- Joseph Dykstra (josephdykstra@gmail.com) -- Parsha Pourkhomami (parshap+git@gmail.com) -- Damjan Košir (damjan.kosir@gmail.com) -- daverayment (dave.rayment@gmail.com) -- kawanet (u-suke@kawa.net) -- Linus Unnebäck (linus@folkdatorn.se) -- Nolan Lawson (nolan.lawson@gmail.com) -- Calvin Metcalf (calvin.metcalf@gmail.com) -- Koki Takahashi (hakatasiloving@gmail.com) -- Guy Bedford (guybedford@gmail.com) -- Jan Schär (jscissr@gmail.com) -- RaulTsc (tomescu.raul@gmail.com) -- Matthieu Monsch (monsch@alum.mit.edu) -- Dan Ehrenberg (littledan@chromium.org) -- Kirill Fomichev (fanatid@ya.ru) -- Yusuke Kawasaki (u-suke@kawa.net) -- DC (dcposch@dcpos.ch) -- John-David Dalton (john.david.dalton@gmail.com) -- adventure-yunfei (adventure030@gmail.com) -- Emil Bay (github@tixz.dk) -- Sam Sudar (sudar.sam@gmail.com) -- Volker Mische (volker.mische@gmail.com) -- David Walton (support@geekstocks.com) -- Сковорода Никита Андреевич (chalkerx@gmail.com) -- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com) -- ukstv (sergey.ukustov@machinomy.com) -- ranbochen (ranbochen@qq.com) -- Vladimir Borovik (bobahbdb@gmail.com) - -#### Generated by bin/update-authors.sh. diff --git a/truebit-implementation/node_modules/buffer/LICENSE b/truebit-implementation/node_modules/buffer/LICENSE deleted file mode 100644 index d6bf75dc..00000000 --- a/truebit-implementation/node_modules/buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh, and other contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/buffer/README.md b/truebit-implementation/node_modules/buffer/README.md deleted file mode 100644 index a2d9f87c..00000000 --- a/truebit-implementation/node_modules/buffer/README.md +++ /dev/null @@ -1,409 +0,0 @@ -# buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/buffer/master.svg -[travis-url]: https://travis-ci.org/feross/buffer -[npm-image]: https://img.shields.io/npm/v/buffer.svg -[npm-url]: https://npmjs.org/package/buffer -[downloads-image]: https://img.shields.io/npm/dm/buffer.svg -[downloads-url]: https://npmjs.org/package/buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -#### The buffer module from [node.js](https://nodejs.org/), for the browser. - -[![saucelabs][saucelabs-image]][saucelabs-url] - -[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg -[saucelabs-url]: https://saucelabs.com/u/buffer - -With [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module. - -The goal is to provide an API that is 100% identical to -[node's Buffer API](https://nodejs.org/api/buffer.html). Read the -[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, -instance methods, and class methods that are supported. - -## features - -- Manipulate binary data like a boss, in all browsers! -- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`) -- Extremely small bundle size (**6.75KB minified + gzipped**, 51.9KB with comments) -- Excellent browser support (Chrome, Firefox, Edge, Safari 9+, IE 11, iOS 9+, Android, etc.) -- Preserves Node API exactly, with one minor difference (see below) -- Square-bracket `buf[4]` notation works! -- Does not modify any browser prototypes or put anything on `window` -- Comprehensive test suite (including all buffer tests from node.js core) - - -## install - -To use this module directly (without browserify), install it: - -```bash -npm install buffer -``` - -This module was previously called **native-buffer-browserify**, but please use **buffer** -from now on. - -A standalone bundle is available [here](https://wzrd.in/standalone/buffer), for non-browserify users. - - -## usage - -The module's API is identical to node's `Buffer` API. Read the -[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, -instance methods, and class methods that are supported. - -As mentioned above, `require('buffer')` or use the `Buffer` global with -[browserify](http://browserify.org) and this module will automatically be included -in your bundle. Almost any npm module will work in the browser, even if it assumes that -the node `Buffer` API will be available. - -To depend on this module explicitly (without browserify), require it like this: - -```js -var Buffer = require('buffer/').Buffer // note: the trailing slash is important! -``` - -To require this module explicitly, use `require('buffer/')` which tells the node.js module -lookup algorithm (also used by browserify) to use the **npm module** named `buffer` -instead of the **node.js core** module named `buffer`! - - -## how does it work? - -The Buffer constructor returns instances of `Uint8Array` that have their prototype -changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of `Uint8Array`, -so the returned instances will have all the node `Buffer` methods and the -`Uint8Array` methods. Square bracket notation works as expected -- it returns a -single octet. - -The `Uint8Array` prototype remains unmodified. - - -## tracking the latest node api - -This module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer -API is considered **stable** in the -[node stability index](https://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index), -so it is unlikely that there will ever be breaking changes. -Nonetheless, when/if the Buffer API changes in node, this module's API will change -accordingly. - -## related packages - -- [`buffer-reverse`](https://www.npmjs.com/package/buffer-reverse) - Reverse a buffer -- [`buffer-xor`](https://www.npmjs.com/package/buffer-xor) - Bitwise xor a buffer -- [`is-buffer`](https://www.npmjs.com/package/is-buffer) - Determine if an object is a Buffer without including the whole `Buffer` package - -## conversion packages - -### convert typed array to buffer - -Use [`typedarray-to-buffer`](https://www.npmjs.com/package/typedarray-to-buffer) to convert any kind of typed array to a `Buffer`. Does not perform a copy, so it's super fast. - -### convert buffer to typed array - -`Buffer` is a subclass of `Uint8Array` (which is a typed array). So there is no need to explicitly convert to typed array. Just use the buffer as a `Uint8Array`. - -### convert blob to buffer - -Use [`blob-to-buffer`](https://www.npmjs.com/package/blob-to-buffer) to convert a `Blob` to a `Buffer`. - -### convert buffer to blob - -To convert a `Buffer` to a `Blob`, use the `Blob` constructor: - -```js -var blob = new Blob([ buffer ]) -``` - -Optionally, specify a mimetype: - -```js -var blob = new Blob([ buffer ], { type: 'text/html' }) -``` - -### convert arraybuffer to buffer - -To convert an `ArrayBuffer` to a `Buffer`, use the `Buffer.from` function. Does not perform a copy, so it's super fast. - -```js -var buffer = Buffer.from(arrayBuffer) -``` - -### convert buffer to arraybuffer - -To convert a `Buffer` to an `ArrayBuffer`, use the `.buffer` property (which is present on all `Uint8Array` objects): - -```js -var arrayBuffer = buffer.buffer.slice( - buffer.byteOffset, buffer.byteOffset + buffer.byteLength -) -``` - -Alternatively, use the [`to-arraybuffer`](https://www.npmjs.com/package/to-arraybuffer) module. - -## performance - -See perf tests in `/perf`. - -`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a -sanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will -always be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module, -which is included to compare against. - -NOTE: Performance has improved since these benchmarks were taken. PR welcome to update the README. - -### Chrome 38 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ | -| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | | -| | | | | -| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | | -| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | | -| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | | -| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ | -| | | | | -| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | | -| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | | -| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ | -| | | | | -| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ | -| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | | -| | | | | -| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ | -| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | | -| | | | | -| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ | -| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | | -| | | | | -| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | | -| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | | -| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ | - - -### Firefox 33 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | | -| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ | -| | | | | -| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | | -| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | | -| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | | -| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ | -| | | | | -| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | | -| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | | -| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ | -| | | | | -| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | | -| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ | -| | | | | -| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | | -| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ | -| | | | | -| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ | -| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | | -| | | | | -| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | | -| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | | -| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ | - -### Safari 8 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ | -| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | | -| | | | | -| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | | -| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | | -| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | | -| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ | -| | | | | -| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | | -| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | | -| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ | -| | | | | -| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | | -| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ | -| | | | | -| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | | -| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ | -| | | | | -| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | | -| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ | -| | | | | -| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | | -| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | | -| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ | - - -### Node 0.11.14 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | | -| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ | -| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | | -| | | | | -| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | | -| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ | -| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | | -| | | | | -| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | | -| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ | -| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | | -| | | | | -| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | | -| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ | -| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | | -| | | | | -| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | | -| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | | -| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | | -| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ | -| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | | -| | | | | -| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ | -| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | | -| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | | -| | | | | -| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ | -| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | | -| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | | -| | | | | -| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | | -| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | | -| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ | -| | | | | -| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | | -| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ | -| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | | -| | | | | -| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | | -| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ | -| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | | - -### iojs 1.8.1 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | | -| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | | -| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ | -| | | | | -| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | | -| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | | -| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | | -| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | | -| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | | -| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ | -| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | | -| | | | | -| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | | -| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | | -| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | | -| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ | -| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | | -| | | | | -| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ | -| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | | -| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | | -| | | | | -| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ | -| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | | -| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | | -| | | | | -| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | | -| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | | -| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ | -| | | | | -| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | | -| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | | -| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | | -| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ | -| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | | -| | | | | - -## Testing the project - -First, install the project: - - npm install - -Then, to run tests in Node.js, run: - - npm run test-node - -To test locally in a browser, you can run: - - npm run test-browser-es5-local # For ES5 browsers that don't support ES6 - npm run test-browser-es6-local # For ES6 compliant browsers - -This will print out a URL that you can then open in a browser to run the tests, using [airtap](https://www.npmjs.com/package/airtap). - -To run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run: - - npm test - -This is what's run in Travis, to check against various browsers. The list of browsers is kept in the `bin/airtap-es5.yml` and `bin/airtap-es6.yml` files. - -## JavaScript Standard Style - -This module uses [JavaScript Standard Style](https://github.com/feross/standard). - -[![JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -To test that the code conforms to the style, `npm install` and run: - - ./node_modules/.bin/standard - -## credit - -This was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify). - - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis. diff --git a/truebit-implementation/node_modules/buffer/index.d.ts b/truebit-implementation/node_modules/buffer/index.d.ts deleted file mode 100644 index 623a6613..00000000 --- a/truebit-implementation/node_modules/buffer/index.d.ts +++ /dev/null @@ -1,185 +0,0 @@ -export class Buffer extends Uint8Array { - length: number - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): { type: 'Buffer', data: any[] }; - equals(otherBuffer: Buffer): boolean; - compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - */ - constructor (str: string, encoding?: string); - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - */ - constructor (size: number); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: Uint8Array); - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - */ - constructor (arrayBuffer: ArrayBuffer); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: any[]); - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - */ - constructor (buffer: Buffer); - prototype: Buffer; - /** - * Allocates a new Buffer using an {array} of octets. - * - * @param array - */ - static from(array: any[]): Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() - * @param byteOffset - * @param length - */ - static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Copies the passed {buffer} data onto a new Buffer instance. - * - * @param buffer - */ - static from(buffer: Buffer): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - * - * @param str - */ - static from(str: string, encoding?: string): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - static isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - static isEncoding(encoding: string): boolean; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - static byteLength(string: string, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - static concat(list: Buffer[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - static compare(buf1: Buffer, buf2: Buffer): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafeSlow(size: number): Buffer; -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/buffer/index.js b/truebit-implementation/node_modules/buffer/index.js deleted file mode 100644 index c1719db5..00000000 --- a/truebit-implementation/node_modules/buffer/index.js +++ /dev/null @@ -1,1777 +0,0 @@ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -var K_MAX_LENGTH = 0x7fffffff -exports.kMaxLength = K_MAX_LENGTH - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Print warning and recommend using `buffer` v4.x which has an Object - * implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * We report that the browser does not support typed arrays if the are not subclassable - * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` - * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support - * for __proto__ and has a buggy typed array implementation. - */ -Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() - -if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && - typeof console.error === 'function') { - console.error( - 'This browser lacks typed array (Uint8Array) support which is required by ' + - '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' - ) -} - -function typedArraySupport () { - // Can typed array instances can be augmented? - try { - var arr = new Uint8Array(1) - arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } } - return arr.foo() === 42 - } catch (e) { - return false - } -} - -Object.defineProperty(Buffer.prototype, 'parent', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.buffer - } -}) - -Object.defineProperty(Buffer.prototype, 'offset', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.byteOffset - } -}) - -function createBuffer (length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('The value "' + length + '" is invalid for option "size"') - } - // Return an augmented `Uint8Array` instance - var buf = new Uint8Array(length) - buf.__proto__ = Buffer.prototype - return buf -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new TypeError( - 'The "string" argument must be of type string. Received type number' - ) - } - return allocUnsafe(arg) - } - return from(arg, encodingOrOffset, length) -} - -// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 -if (typeof Symbol !== 'undefined' && Symbol.species != null && - Buffer[Symbol.species] === Buffer) { - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true, - enumerable: false, - writable: false - }) -} - -Buffer.poolSize = 8192 // not used by this implementation - -function from (value, encodingOrOffset, length) { - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) - } - - if (ArrayBuffer.isView(value)) { - return fromArrayLike(value) - } - - if (value == null) { - throw TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) - } - - if (isInstance(value, ArrayBuffer) || - (value && isInstance(value.buffer, ArrayBuffer))) { - return fromArrayBuffer(value, encodingOrOffset, length) - } - - if (typeof value === 'number') { - throw new TypeError( - 'The "value" argument must not be of type number. Received type number' - ) - } - - var valueOf = value.valueOf && value.valueOf() - if (valueOf != null && valueOf !== value) { - return Buffer.from(valueOf, encodingOrOffset, length) - } - - var b = fromObject(value) - if (b) return b - - if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && - typeof value[Symbol.toPrimitive] === 'function') { - return Buffer.from( - value[Symbol.toPrimitive]('string'), encodingOrOffset, length - ) - } - - throw new TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length) -} - -// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: -// https://github.com/feross/buffer/pull/148 -Buffer.prototype.__proto__ = Uint8Array.prototype -Buffer.__proto__ = Uint8Array - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be of type number') - } else if (size < 0) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } -} - -function alloc (size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(size).fill(fill, encoding) - : createBuffer(size).fill(fill) - } - return createBuffer(size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(size, fill, encoding) -} - -function allocUnsafe (size) { - assertSize(size) - return createBuffer(size < 0 ? 0 : checked(size) | 0) -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(size) -} - -function fromString (string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - - var length = byteLength(string, encoding) | 0 - var buf = createBuffer(length) - - var actual = buf.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - buf = buf.slice(0, actual) - } - - return buf -} - -function fromArrayLike (array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - var buf = createBuffer(length) - for (var i = 0; i < length; i += 1) { - buf[i] = array[i] & 255 - } - return buf -} - -function fromArrayBuffer (array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('"offset" is outside of buffer bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('"length" is outside of buffer bounds') - } - - var buf - if (byteOffset === undefined && length === undefined) { - buf = new Uint8Array(array) - } else if (length === undefined) { - buf = new Uint8Array(array, byteOffset) - } else { - buf = new Uint8Array(array, byteOffset, length) - } - - // Return an augmented `Uint8Array` instance - buf.__proto__ = Buffer.prototype - return buf -} - -function fromObject (obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - var buf = createBuffer(len) - - if (buf.length === 0) { - return buf - } - - obj.copy(buf, 0, 0, len) - return buf - } - - if (obj.length !== undefined) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0) - } - return fromArrayLike(obj) - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data) - } -} - -function checked (length) { - // Note: cannot use `length < K_MAX_LENGTH` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= K_MAX_LENGTH) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return b != null && b._isBuffer === true && - b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false -} - -Buffer.compare = function compare (a, b) { - if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) - if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError( - 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' - ) - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (isInstance(buf, Uint8Array)) { - buf = Buffer.from(buf) - } - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { - return string.byteLength - } - if (typeof string !== 'string') { - throw new TypeError( - 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + - 'Received type ' + typeof string - ) - } - - var len = string.length - var mustMatch = (arguments.length > 2 && arguments[2] === true) - if (!mustMatch && len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) { - return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 - } - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) -// to detect a Buffer instance. It's not possible to use `instanceof Buffer` -// reliably in a browserify context because there could be multiple different -// copies of the 'buffer' package in use. This method works even for Buffer -// instances that were created from another copy of the `buffer` package. -// See: https://github.com/feross/buffer/issues/154 -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - var length = this.length - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.toLocaleString = Buffer.prototype.toString - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() - if (this.length > max) str += ' ... ' - return '' -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (isInstance(target, Uint8Array)) { - target = Buffer.from(target, target.offset, target.byteLength) - } - if (!Buffer.isBuffer(target)) { - throw new TypeError( - 'The "target" argument must be one of type Buffer or Uint8Array. ' + - 'Received type ' + (typeof target) - ) - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) - - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (numberIsNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - var strLen = string.length - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (numberIsNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset >>> 0 - if (isFinite(length)) { - length = length >>> 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf = this.subarray(start, end) - // Return an augmented `Uint8Array` instance - newBuf.__proto__ = Buffer.prototype - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('Index out of range') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - - if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { - // Use built-in when available, missing from IE11 - this.copyWithin(targetStart, start, end) - } else if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (var i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, end), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if ((encoding === 'utf8' && code < 128) || - encoding === 'latin1') { - // Fast path: If `val` fits into a single byte, use that numeric value. - val = code - } - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - var bytes = Buffer.isBuffer(val) - ? val - : Buffer.from(val, encoding) - var len = bytes.length - if (len === 0) { - throw new TypeError('The value "' + val + - '" is invalid for argument "value"') - } - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node takes equal signs as end of the Base64 encoding - str = str.split('=')[0] - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = str.trim().replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass -// the `instanceof` check but they should be treated as of that type. -// See: https://github.com/feross/buffer/issues/166 -function isInstance (obj, type) { - return obj instanceof type || - (obj != null && obj.constructor != null && obj.constructor.name != null && - obj.constructor.name === type.name) -} -function numberIsNaN (obj) { - // For IE11 support - return obj !== obj // eslint-disable-line no-self-compare -} diff --git a/truebit-implementation/node_modules/buffer/package.json b/truebit-implementation/node_modules/buffer/package.json deleted file mode 100644 index 51fce8b1..00000000 --- a/truebit-implementation/node_modules/buffer/package.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "_from": "buffer@^5.0.5", - "_id": "buffer@5.2.1", - "_inBundle": false, - "_integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "_location": "/buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer@^5.0.5", - "name": "buffer", - "escapedName": "buffer", - "rawSpec": "^5.0.5", - "saveSpec": null, - "fetchSpec": "^5.0.5" - }, - "_requiredBy": [ - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "_shasum": "dd57fa0f109ac59c602479044dca7b8b3d0b71d6", - "_spec": "buffer@^5.0.5", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "http://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/buffer/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Romain Beauxis", - "email": "toots@rastageeks.org" - }, - { - "name": "James Halliday", - "email": "mail@substack.net" - } - ], - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - }, - "deprecated": false, - "description": "Node.js Buffer API, for the browser", - "devDependencies": { - "airtap": "0.1.0", - "benchmark": "^2.0.0", - "browserify": "^16.1.0", - "concat-stream": "^1.4.7", - "hyperquest": "^2.0.0", - "is-buffer": "^2.0.0", - "is-nan": "^1.0.1", - "split": "^1.0.0", - "standard": "*", - "tape": "^4.0.0", - "through2": "^2.0.0", - "uglify-js": "^3.4.5" - }, - "homepage": "https://github.com/feross/buffer", - "jspm": { - "map": { - "./index.js": { - "node": "@node/buffer" - } - } - }, - "keywords": [ - "arraybuffer", - "browser", - "browserify", - "buffer", - "compatible", - "dataview", - "uint8array" - ], - "license": "MIT", - "main": "index.js", - "name": "buffer", - "repository": { - "type": "git", - "url": "git://github.com/feross/buffer.git" - }, - "scripts": { - "perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html", - "perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js", - "size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c", - "test": "standard && node ./bin/test.js", - "test-browser-es5": "airtap -- test/*.js", - "test-browser-es5-local": "airtap --local -- test/*.js", - "test-browser-es6": "airtap -- test/*.js test/node/*.js", - "test-browser-es6-local": "airtap --local -- test/*.js test/node/*.js", - "test-node": "tape test/*.js test/node/*.js", - "update-authors": "./bin/update-authors.sh" - }, - "standard": { - "ignore": [ - "test/node/**/*.js", - "test/common.js", - "test/_polyfill.js", - "perf/**/*.js" - ] - }, - "types": "index.d.ts", - "version": "5.2.1" -} diff --git a/truebit-implementation/node_modules/bytes/History.md b/truebit-implementation/node_modules/bytes/History.md deleted file mode 100644 index 13d463ab..00000000 --- a/truebit-implementation/node_modules/bytes/History.md +++ /dev/null @@ -1,82 +0,0 @@ -3.0.0 / 2017-08-31 -================== - - * Change "kB" to "KB" in format output - * Remove support for Node.js 0.6 - * Remove support for ComponentJS - -2.5.0 / 2017-03-24 -================== - - * Add option "unit" - -2.4.0 / 2016-06-01 -================== - - * Add option "unitSeparator" - -2.3.0 / 2016-02-15 -================== - - * Drop partial bytes on all parsed units - * Fix non-finite numbers to `.format` to return `null` - * Fix parsing byte string that looks like hex - * perf: hoist regular expressions - -2.2.0 / 2015-11-13 -================== - - * add option "decimalPlaces" - * add option "fixedDecimals" - -2.1.0 / 2015-05-21 -================== - - * add `.format` export - * add `.parse` export - -2.0.2 / 2015-05-20 -================== - - * remove map recreation - * remove unnecessary object construction - -2.0.1 / 2015-05-07 -================== - - * fix browserify require - * remove node.extend dependency - -2.0.0 / 2015-04-12 -================== - - * add option "case" - * add option "thousandsSeparator" - * return "null" on invalid parse input - * support proper round-trip: bytes(bytes(num)) === num - * units no longer case sensitive when parsing - -1.0.0 / 2014-05-05 -================== - - * add negative support. fixes #6 - -0.3.0 / 2014-03-19 -================== - - * added terabyte support - -0.2.1 / 2013-04-01 -================== - - * add .component - -0.2.0 / 2012-10-28 -================== - - * bytes(200).should.eql('200b') - -0.1.0 / 2012-07-04 -================== - - * add bytes to string conversion [yields] diff --git a/truebit-implementation/node_modules/bytes/LICENSE b/truebit-implementation/node_modules/bytes/LICENSE deleted file mode 100644 index 63e95a96..00000000 --- a/truebit-implementation/node_modules/bytes/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2014 TJ Holowaychuk -Copyright (c) 2015 Jed Watson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/bytes/Readme.md b/truebit-implementation/node_modules/bytes/Readme.md deleted file mode 100644 index 9b53745d..00000000 --- a/truebit-implementation/node_modules/bytes/Readme.md +++ /dev/null @@ -1,125 +0,0 @@ -# Bytes utility - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa. - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```bash -$ npm install bytes -``` - -## Usage - -```js -var bytes = require('bytes'); -``` - -#### bytes.format(number value, [options]): string|null - -Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is - rounded. - -**Arguments** - -| Name | Type | Description | -|---------|----------|--------------------| -| value | `number` | Value in bytes | -| options | `Object` | Conversion options | - -**Options** - -| Property | Type | Description | -|-------------------|--------|-----------------------------------------------------------------------------------------| -| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. | -| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` | -| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `.`... Default value to `''`. | -| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). | -| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. | - -**Returns** - -| Name | Type | Description | -|---------|------------------|-------------------------------------------------| -| results | `string`|`null` | Return null upon error. String value otherwise. | - -**Example** - -```js -bytes(1024); -// output: '1KB' - -bytes(1000); -// output: '1000B' - -bytes(1000, {thousandsSeparator: ' '}); -// output: '1 000B' - -bytes(1024 * 1.7, {decimalPlaces: 0}); -// output: '2KB' - -bytes(1024, {unitSeparator: ' '}); -// output: '1 KB' - -``` - -#### bytes.parse(string|number value): number|null - -Parse the string value into an integer in bytes. If no unit is given, or `value` -is a number, it is assumed the value is in bytes. - -Supported units and abbreviations are as follows and are case-insensitive: - - * `b` for bytes - * `kb` for kilobytes - * `mb` for megabytes - * `gb` for gigabytes - * `tb` for terabytes - -The units are in powers of two, not ten. This means 1kb = 1024b according to this parser. - -**Arguments** - -| Name | Type | Description | -|---------------|--------|--------------------| -| value | `string`|`number` | String to parse, or number in bytes. | - -**Returns** - -| Name | Type | Description | -|---------|-------------|-------------------------| -| results | `number`|`null` | Return null upon error. Value in bytes otherwise. | - -**Example** - -```js -bytes('1KB'); -// output: 1024 - -bytes('1024'); -// output: 1024 - -bytes(1024); -// output: 1024 -``` - -## License - -[MIT](LICENSE) - -[downloads-image]: https://img.shields.io/npm/dm/bytes.svg -[downloads-url]: https://npmjs.org/package/bytes -[npm-image]: https://img.shields.io/npm/v/bytes.svg -[npm-url]: https://npmjs.org/package/bytes -[travis-image]: https://img.shields.io/travis/visionmedia/bytes.js/master.svg -[travis-url]: https://travis-ci.org/visionmedia/bytes.js -[coveralls-image]: https://img.shields.io/coveralls/visionmedia/bytes.js/master.svg -[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master diff --git a/truebit-implementation/node_modules/bytes/index.js b/truebit-implementation/node_modules/bytes/index.js deleted file mode 100644 index 1e39afd1..00000000 --- a/truebit-implementation/node_modules/bytes/index.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * bytes - * Copyright(c) 2012-2014 TJ Holowaychuk - * Copyright(c) 2015 Jed Watson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = bytes; -module.exports.format = format; -module.exports.parse = parse; - -/** - * Module variables. - * @private - */ - -var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; - -var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; - -var map = { - b: 1, - kb: 1 << 10, - mb: 1 << 20, - gb: 1 << 30, - tb: ((1 << 30) * 1024) -}; - -var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i; - -/** - * Convert the given value in bytes into a string or parse to string to an integer in bytes. - * - * @param {string|number} value - * @param {{ - * case: [string], - * decimalPlaces: [number] - * fixedDecimals: [boolean] - * thousandsSeparator: [string] - * unitSeparator: [string] - * }} [options] bytes options. - * - * @returns {string|number|null} - */ - -function bytes(value, options) { - if (typeof value === 'string') { - return parse(value); - } - - if (typeof value === 'number') { - return format(value, options); - } - - return null; -} - -/** - * Format the given value in bytes into a string. - * - * If the value is negative, it is kept as such. If it is a float, - * it is rounded. - * - * @param {number} value - * @param {object} [options] - * @param {number} [options.decimalPlaces=2] - * @param {number} [options.fixedDecimals=false] - * @param {string} [options.thousandsSeparator=] - * @param {string} [options.unit=] - * @param {string} [options.unitSeparator=] - * - * @returns {string|null} - * @public - */ - -function format(value, options) { - if (!Number.isFinite(value)) { - return null; - } - - var mag = Math.abs(value); - var thousandsSeparator = (options && options.thousandsSeparator) || ''; - var unitSeparator = (options && options.unitSeparator) || ''; - var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; - var fixedDecimals = Boolean(options && options.fixedDecimals); - var unit = (options && options.unit) || ''; - - if (!unit || !map[unit.toLowerCase()]) { - if (mag >= map.tb) { - unit = 'TB'; - } else if (mag >= map.gb) { - unit = 'GB'; - } else if (mag >= map.mb) { - unit = 'MB'; - } else if (mag >= map.kb) { - unit = 'KB'; - } else { - unit = 'B'; - } - } - - var val = value / map[unit.toLowerCase()]; - var str = val.toFixed(decimalPlaces); - - if (!fixedDecimals) { - str = str.replace(formatDecimalsRegExp, '$1'); - } - - if (thousandsSeparator) { - str = str.replace(formatThousandsRegExp, thousandsSeparator); - } - - return str + unitSeparator + unit; -} - -/** - * Parse the string value into an integer in bytes. - * - * If no unit is given, it is assumed the value is in bytes. - * - * @param {number|string} val - * - * @returns {number|null} - * @public - */ - -function parse(val) { - if (typeof val === 'number' && !isNaN(val)) { - return val; - } - - if (typeof val !== 'string') { - return null; - } - - // Test if the string passed is valid - var results = parseRegExp.exec(val); - var floatValue; - var unit = 'b'; - - if (!results) { - // Nothing could be extracted from the given string - floatValue = parseInt(val, 10); - unit = 'b' - } else { - // Retrieve the value and the unit - floatValue = parseFloat(results[1]); - unit = results[4].toLowerCase(); - } - - return Math.floor(map[unit] * floatValue); -} diff --git a/truebit-implementation/node_modules/bytes/package.json b/truebit-implementation/node_modules/bytes/package.json deleted file mode 100644 index 76dfd824..00000000 --- a/truebit-implementation/node_modules/bytes/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_from": "bytes@3.0.0", - "_id": "bytes@3.0.0", - "_inBundle": false, - "_integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "_location": "/bytes", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "bytes@3.0.0", - "name": "bytes", - "escapedName": "bytes", - "rawSpec": "3.0.0", - "saveSpec": null, - "fetchSpec": "3.0.0" - }, - "_requiredBy": [ - "/body-parser", - "/raw-body" - ], - "_resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "_shasum": "d32815404d689699f85a4ea4fa8755dd13a96048", - "_spec": "bytes@3.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "bugs": { - "url": "https://github.com/visionmedia/bytes.js/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jed Watson", - "email": "jed.watson@me.com" - }, - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "deprecated": false, - "description": "Utility to parse a string bytes to bytes and vice-versa", - "devDependencies": { - "mocha": "2.5.3", - "nyc": "10.3.2" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "History.md", - "LICENSE", - "Readme.md", - "index.js" - ], - "homepage": "https://github.com/visionmedia/bytes.js#readme", - "keywords": [ - "byte", - "bytes", - "utility", - "parse", - "parser", - "convert", - "converter" - ], - "license": "MIT", - "name": "bytes", - "repository": { - "type": "git", - "url": "git+https://github.com/visionmedia/bytes.js.git" - }, - "scripts": { - "test": "mocha --check-leaks --reporter spec", - "test-ci": "nyc --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" - }, - "version": "3.0.0" -} diff --git a/truebit-implementation/node_modules/caseless/LICENSE b/truebit-implementation/node_modules/caseless/LICENSE deleted file mode 100644 index 61789f4a..00000000 --- a/truebit-implementation/node_modules/caseless/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: -You must give any other recipients of the Work or Derivative Works a copy of this License; and -You must cause any modified files to carry prominent notices stating that You changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/truebit-implementation/node_modules/caseless/README.md b/truebit-implementation/node_modules/caseless/README.md deleted file mode 100644 index e5077a21..00000000 --- a/truebit-implementation/node_modules/caseless/README.md +++ /dev/null @@ -1,45 +0,0 @@ -## Caseless -- wrap an object to set and get property with caseless semantics but also preserve caseing. - -This library is incredibly useful when working with HTTP headers. It allows you to get/set/check for headers in a caseless manner while also preserving the caseing of headers the first time they are set. - -## Usage - -```javascript -var headers = {} - , c = caseless(headers) - ; -c.set('a-Header', 'asdf') -c.get('a-header') === 'asdf' -``` - -## has(key) - -Has takes a name and if it finds a matching header will return that header name with the preserved caseing it was set with. - -```javascript -c.has('a-header') === 'a-Header' -``` - -## set(key, value[, clobber=true]) - -Set is fairly straight forward except that if the header exists and clobber is disabled it will add `','+value` to the existing header. - -```javascript -c.set('a-Header', 'fdas') -c.set('a-HEADER', 'more', false) -c.get('a-header') === 'fdsa,more' -``` - -## swap(key) - -Swaps the casing of a header with the new one that is passed in. - -```javascript -var headers = {} - , c = caseless(headers) - ; -c.set('a-Header', 'fdas') -c.swap('a-HEADER') -c.has('a-header') === 'a-HEADER' -headers === {'a-HEADER': 'fdas'} -``` diff --git a/truebit-implementation/node_modules/caseless/index.js b/truebit-implementation/node_modules/caseless/index.js deleted file mode 100644 index b194734e..00000000 --- a/truebit-implementation/node_modules/caseless/index.js +++ /dev/null @@ -1,67 +0,0 @@ -function Caseless (dict) { - this.dict = dict || {} -} -Caseless.prototype.set = function (name, value, clobber) { - if (typeof name === 'object') { - for (var i in name) { - this.set(i, name[i], value) - } - } else { - if (typeof clobber === 'undefined') clobber = true - var has = this.has(name) - - if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value - else this.dict[has || name] = value - return has - } -} -Caseless.prototype.has = function (name) { - var keys = Object.keys(this.dict) - , name = name.toLowerCase() - ; - for (var i=0;i - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/combined-stream/Readme.md b/truebit-implementation/node_modules/combined-stream/Readme.md deleted file mode 100644 index 9e367b5b..00000000 --- a/truebit-implementation/node_modules/combined-stream/Readme.md +++ /dev/null @@ -1,138 +0,0 @@ -# combined-stream - -A stream that emits multiple other streams one after another. - -**NB** Currently `combined-stream` works with streams version 1 only. There is ongoing effort to switch this library to streams version 2. Any help is welcome. :) Meanwhile you can explore other libraries that provide streams2 support with more or less compatibility with `combined-stream`. - -- [combined-stream2](https://www.npmjs.com/package/combined-stream2): A drop-in streams2-compatible replacement for the combined-stream module. - -- [multistream](https://www.npmjs.com/package/multistream): A stream that emits multiple other streams one after another. - -## Installation - -``` bash -npm install combined-stream -``` - -## Usage - -Here is a simple example that shows how you can use combined-stream to combine -two files into one: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -While the example above works great, it will pause all source streams until -they are needed. If you don't want that to happen, you can set `pauseStreams` -to `false`: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create({pauseStreams: false}); -combinedStream.append(fs.createReadStream('file1.txt')); -combinedStream.append(fs.createReadStream('file2.txt')); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -However, what if you don't have all the source streams yet, or you don't want -to allocate the resources (file descriptors, memory, etc.) for them right away? -Well, in that case you can simply provide a callback that supplies the stream -by calling a `next()` function: - -``` javascript -var CombinedStream = require('combined-stream'); -var fs = require('fs'); - -var combinedStream = CombinedStream.create(); -combinedStream.append(function(next) { - next(fs.createReadStream('file1.txt')); -}); -combinedStream.append(function(next) { - next(fs.createReadStream('file2.txt')); -}); - -combinedStream.pipe(fs.createWriteStream('combined.txt')); -``` - -## API - -### CombinedStream.create([options]) - -Returns a new combined stream object. Available options are: - -* `maxDataSize` -* `pauseStreams` - -The effect of those options is described below. - -### combinedStream.pauseStreams = `true` - -Whether to apply back pressure to the underlaying streams. If set to `false`, -the underlaying streams will never be paused. If set to `true`, the -underlaying streams will be paused right after being appended, as well as when -`delayedStream.pipe()` wants to throttle. - -### combinedStream.maxDataSize = `2 * 1024 * 1024` - -The maximum amount of bytes (or characters) to buffer for all source streams. -If this value is exceeded, `combinedStream` emits an `'error'` event. - -### combinedStream.dataSize = `0` - -The amount of bytes (or characters) currently buffered by `combinedStream`. - -### combinedStream.append(stream) - -Appends the given `stream` to the combinedStream object. If `pauseStreams` is -set to `true, this stream will also be paused right away. - -`streams` can also be a function that takes one parameter called `next`. `next` -is a function that must be invoked in order to provide the `next` stream, see -example above. - -Regardless of how the `stream` is appended, combined-stream always attaches an -`'error'` listener to it, so you don't have to do that manually. - -Special case: `stream` can also be a String or Buffer. - -### combinedStream.write(data) - -You should not call this, `combinedStream` takes care of piping the appended -streams into itself for you. - -### combinedStream.resume() - -Causes `combinedStream` to start drain the streams it manages. The function is -idempotent, and also emits a `'resume'` event each time which usually goes to -the stream that is currently being drained. - -### combinedStream.pause(); - -If `combinedStream.pauseStreams` is set to `false`, this does nothing. -Otherwise a `'pause'` event is emitted, this goes to the stream that is -currently being drained, so you can use it to apply back pressure. - -### combinedStream.end(); - -Sets `combinedStream.writable` to false, emits an `'end'` event, and removes -all streams from the queue. - -### combinedStream.destroy(); - -Same as `combinedStream.end()`, except it emits a `'close'` event instead of -`'end'`. - -## License - -combined-stream is licensed under the MIT license. diff --git a/truebit-implementation/node_modules/combined-stream/lib/combined_stream.js b/truebit-implementation/node_modules/combined-stream/lib/combined_stream.js deleted file mode 100644 index 809b3c2e..00000000 --- a/truebit-implementation/node_modules/combined-stream/lib/combined_stream.js +++ /dev/null @@ -1,189 +0,0 @@ -var util = require('util'); -var Stream = require('stream').Stream; -var DelayedStream = require('delayed-stream'); -var defer = require('./defer.js'); - -module.exports = CombinedStream; -function CombinedStream() { - this.writable = false; - this.readable = true; - this.dataSize = 0; - this.maxDataSize = 2 * 1024 * 1024; - this.pauseStreams = true; - - this._released = false; - this._streams = []; - this._currentStream = null; -} -util.inherits(CombinedStream, Stream); - -CombinedStream.create = function(options) { - var combinedStream = new this(); - - options = options || {}; - for (var option in options) { - combinedStream[option] = options[option]; - } - - return combinedStream; -}; - -CombinedStream.isStreamLike = function(stream) { - return (typeof stream !== 'function') - && (typeof stream !== 'string') - && (typeof stream !== 'boolean') - && (typeof stream !== 'number') - && (!Buffer.isBuffer(stream)); -}; - -CombinedStream.prototype.append = function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - - if (isStreamLike) { - if (!(stream instanceof DelayedStream)) { - var newStream = DelayedStream.create(stream, { - maxDataSize: Infinity, - pauseStream: this.pauseStreams, - }); - stream.on('data', this._checkDataSize.bind(this)); - stream = newStream; - } - - this._handleErrors(stream); - - if (this.pauseStreams) { - stream.pause(); - } - } - - this._streams.push(stream); - return this; -}; - -CombinedStream.prototype.pipe = function(dest, options) { - Stream.prototype.pipe.call(this, dest, options); - this.resume(); - return dest; -}; - -CombinedStream.prototype._getNext = function() { - this._currentStream = null; - var stream = this._streams.shift(); - - - if (typeof stream == 'undefined') { - this.end(); - return; - } - - if (typeof stream !== 'function') { - this._pipeNext(stream); - return; - } - - var getStream = stream; - getStream(function(stream) { - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('data', this._checkDataSize.bind(this)); - this._handleErrors(stream); - } - - defer(this._pipeNext.bind(this, stream)); - }.bind(this)); -}; - -CombinedStream.prototype._pipeNext = function(stream) { - this._currentStream = stream; - - var isStreamLike = CombinedStream.isStreamLike(stream); - if (isStreamLike) { - stream.on('end', this._getNext.bind(this)); - stream.pipe(this, {end: false}); - return; - } - - var value = stream; - this.write(value); - this._getNext(); -}; - -CombinedStream.prototype._handleErrors = function(stream) { - var self = this; - stream.on('error', function(err) { - self._emitError(err); - }); -}; - -CombinedStream.prototype.write = function(data) { - this.emit('data', data); -}; - -CombinedStream.prototype.pause = function() { - if (!this.pauseStreams) { - return; - } - - if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause(); - this.emit('pause'); -}; - -CombinedStream.prototype.resume = function() { - if (!this._released) { - this._released = true; - this.writable = true; - this._getNext(); - } - - if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume(); - this.emit('resume'); -}; - -CombinedStream.prototype.end = function() { - this._reset(); - this.emit('end'); -}; - -CombinedStream.prototype.destroy = function() { - this._reset(); - this.emit('close'); -}; - -CombinedStream.prototype._reset = function() { - this.writable = false; - this._streams = []; - this._currentStream = null; -}; - -CombinedStream.prototype._checkDataSize = function() { - this._updateDataSize(); - if (this.dataSize <= this.maxDataSize) { - return; - } - - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'; - this._emitError(new Error(message)); -}; - -CombinedStream.prototype._updateDataSize = function() { - this.dataSize = 0; - - var self = this; - this._streams.forEach(function(stream) { - if (!stream.dataSize) { - return; - } - - self.dataSize += stream.dataSize; - }); - - if (this._currentStream && this._currentStream.dataSize) { - this.dataSize += this._currentStream.dataSize; - } -}; - -CombinedStream.prototype._emitError = function(err) { - this._reset(); - this.emit('error', err); -}; diff --git a/truebit-implementation/node_modules/combined-stream/lib/defer.js b/truebit-implementation/node_modules/combined-stream/lib/defer.js deleted file mode 100644 index b67110c7..00000000 --- a/truebit-implementation/node_modules/combined-stream/lib/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = defer; - -/** - * Runs provided function on next iteration of the event loop - * - * @param {function} fn - function to run - */ -function defer(fn) -{ - var nextTick = typeof setImmediate == 'function' - ? setImmediate - : ( - typeof process == 'object' && typeof process.nextTick == 'function' - ? process.nextTick - : null - ); - - if (nextTick) - { - nextTick(fn); - } - else - { - setTimeout(fn, 0); - } -} diff --git a/truebit-implementation/node_modules/combined-stream/package.json b/truebit-implementation/node_modules/combined-stream/package.json deleted file mode 100644 index cd9b6fba..00000000 --- a/truebit-implementation/node_modules/combined-stream/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "combined-stream@~1.0.6", - "_id": "combined-stream@1.0.7", - "_inBundle": false, - "_integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "_location": "/combined-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "combined-stream@~1.0.6", - "name": "combined-stream", - "escapedName": "combined-stream", - "rawSpec": "~1.0.6", - "saveSpec": null, - "fetchSpec": "~1.0.6" - }, - "_requiredBy": [ - "/form-data", - "/request" - ], - "_resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "_shasum": "2d1d24317afb8abe95d6d2c0b07b57813539d828", - "_spec": "combined-stream@~1.0.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "bugs": { - "url": "https://github.com/felixge/node-combined-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "deprecated": false, - "description": "A stream that emits multiple other streams one after another.", - "devDependencies": { - "far": "~0.0.7" - }, - "engines": { - "node": ">= 0.8" - }, - "homepage": "https://github.com/felixge/node-combined-stream", - "license": "MIT", - "main": "./lib/combined_stream", - "name": "combined-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-combined-stream.git" - }, - "scripts": { - "test": "node test/run.js" - }, - "version": "1.0.7" -} diff --git a/truebit-implementation/node_modules/commander/History.md b/truebit-implementation/node_modules/commander/History.md deleted file mode 100644 index 7b8b2c49..00000000 --- a/truebit-implementation/node_modules/commander/History.md +++ /dev/null @@ -1,256 +0,0 @@ - -2.8.1 / 2015-04-22 -================== - - * Back out `support multiline description` Close #396 #397 - - - -2.8.0 / 2015-04-07 -================== - - * Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee - * Fix bug in Git-style sub-commands #372 @zhiyelee - * Allow commands to be hidden from help #383 @tonylukasavage - * When git-style sub-commands are in use, yet none are called, display help #382 @claylo - * Add ability to specify arguments syntax for top-level command #258 @rrthomas - * Support multiline descriptions #208 @zxqfox - -2.7.1 / 2015-03-11 -================== - - * Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367. - -2.7.0 / 2015-03-09 -================== - - * Fix git-style bug when installed globally. Close #335 #349 @zhiyelee - * Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage - * Add support for camelCase on `opts()`. Close #353 @nkzawa - * Add node.js 0.12 and io.js to travis.yml - * Allow RegEx options. #337 @palanik - * Fixes exit code when sub-command failing. Close #260 #332 @pirelenito - * git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee - -2.6.0 / 2014-12-30 -================== - - * added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee - * Add application description to the help msg. Close #112 @dalssoft - -2.5.1 / 2014-12-15 -================== - - * fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee - -2.5.0 / 2014-10-24 -================== - - * add support for variadic arguments. Closes #277 @whitlockjc - -2.4.0 / 2014-10-17 -================== - - * fixed a bug on executing the coercion function of subcommands option. Closes #270 - * added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage - * added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage - * fixed a bug on subcommand name. Closes #248 @jonathandelgado - * fixed function normalize doesn’t honor option terminator. Closes #216 @abbr - -2.3.0 / 2014-07-16 -================== - - * add command alias'. Closes PR #210 - * fix: Typos. Closes #99 - * fix: Unused fs module. Closes #217 - -2.2.0 / 2014-03-29 -================== - - * add passing of previous option value - * fix: support subcommands on windows. Closes #142 - * Now the defaultValue passed as the second argument of the coercion function. - -2.1.0 / 2013-11-21 -================== - - * add: allow cflag style option params, unit test, fixes #174 - -2.0.0 / 2013-07-18 -================== - - * remove input methods (.prompt, .confirm, etc) - -1.3.2 / 2013-07-18 -================== - - * add support for sub-commands to co-exist with the original command - -1.3.1 / 2013-07-18 -================== - - * add quick .runningCommand hack so you can opt-out of other logic when running a sub command - -1.3.0 / 2013-07-09 -================== - - * add EACCES error handling - * fix sub-command --help - -1.2.0 / 2013-06-13 -================== - - * allow "-" hyphen as an option argument - * support for RegExp coercion - -1.1.1 / 2012-11-20 -================== - - * add more sub-command padding - * fix .usage() when args are present. Closes #106 - -1.1.0 / 2012-11-16 -================== - - * add git-style executable subcommand support. Closes #94 - -1.0.5 / 2012-10-09 -================== - - * fix `--name` clobbering. Closes #92 - * fix examples/help. Closes #89 - -1.0.4 / 2012-09-03 -================== - - * add `outputHelp()` method. - -1.0.3 / 2012-08-30 -================== - - * remove invalid .version() defaulting - -1.0.2 / 2012-08-24 -================== - - * add `--foo=bar` support [arv] - * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus] - -1.0.1 / 2012-08-03 -================== - - * fix issue #56 - * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) - -1.0.0 / 2012-07-05 -================== - - * add support for optional option descriptions - * add defaulting of `.version()` to package.json's version - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/commander/LICENSE b/truebit-implementation/node_modules/commander/LICENSE deleted file mode 100644 index 10f997ab..00000000 --- a/truebit-implementation/node_modules/commander/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/commander/Readme.md b/truebit-implementation/node_modules/commander/Readme.md deleted file mode 100644 index af58e22c..00000000 --- a/truebit-implementation/node_modules/commander/Readme.md +++ /dev/null @@ -1,342 +0,0 @@ -# Commander.js - - -[![Build Status](https://api.travis-ci.org/tj/commander.js.svg)](http://travis-ci.org/tj/commander.js) -[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander) -[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://www.npmjs.org/package/commander) -[![Join the chat at https://gitter.im/tj/commander.js](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/tj/commander.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/tj/commander). - [API documentation](http://tj.github.com/commander.js/) - - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq-sauce', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineapple'); -if (program.bbqSauce) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -function collect(val, memo) { - memo.push(val); - return memo; -} - -function increaseVerbosity(v, total) { - return total + 1; -} - -program - .version('0.0.1') - .usage('[options] ') - .option('-i, --integer ', 'An integer argument', parseInt) - .option('-f, --float ', 'A float argument', parseFloat) - .option('-r, --range ..', 'A range', range) - .option('-l, --list ', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .option('-c, --collect [value]', 'A repeatable value', collect, []) - .option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0) - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' collect: %j', program.collect); -console.log(' verbosity: %j', program.verbose); -console.log(' args: %j', program.args); -``` - -## Regular Expression -```js -program - .version('0.0.1') - .option('-s --size ', 'Pizza size', /^(large|medium|small)$/i, 'medium') - .option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i) - .parse(process.argv); - -console.log(' size: %j', program.size); -console.log(' drink: %j', program.drink); -``` - -## Variadic arguments - - The last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to - append `...` to the argument name. Here is an example: - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .command('rmdir [otherDirs...]') - .action(function (dir, otherDirs) { - console.log('rmdir %s', dir); - if (otherDirs) { - otherDirs.forEach(function (oDir) { - console.log('rmdir %s', oDir); - }); - } - }); - -program.parse(process.argv); -``` - - An `Array` is used for the value of a variadic argument. This applies to `program.args` as well as the argument passed - to your action as demonstrated above. - -## Specify the argument syntax - -```js -#!/usr/bin/env node - -var program = require('../'); - -program - .version('0.0.1') - .arguments(' [env]') - .action(function (cmd, env) { - cmdValue = cmd; - envValue = env; - }); - -program.parse(process.argv); - -if (typeof cmdValue === 'undefined') { - console.error('no command given!'); - process.exit(1); -} -console.log('command:', cmdValue); -console.log('environment:', envValue || "no environment given"); -``` - -## Git-style sub-commands - -```js -// file: ./examples/pm -var program = require('..'); - -program - .version('0.0.1') - .command('install [name]', 'install one or more packages') - .command('search [query]', 'search with optional query') - .command('list', 'list packages installed') - .parse(process.argv); -``` - -When `.command()` is invoked with a description argument, no `.action(callback)` should be called to handle sub-commands, otherwise there will be an error. This tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools. -The commander will try to search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-command`, like `pm-install`, `pm-search`. - -If the program is designed to be installed globally, make sure the executables have proper modes, like `755`. - -### `--harmony` - -You can enable `--harmony` option in two ways: -* Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. Note some os version don’t support this pattern. -* Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - An application for pizzas ordering - - Options: - - -h, --help output usage information - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineapple - -b, --bbq Add bbq sauce - -c, --cheese Add the specified type of cheese [marble] - -C, --no-cheese You do not want any cheese - -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .outputHelp() - -Output help information without exiting. - -If you want to display help by default (e.g. if no command was provided), you can use something like: - -```js -var program = require('commander'); - -program - .version('0.0.1') - .command('getstream [url]', 'get stream URL') - .parse(process.argv); - - if (!process.argv.slice(2).length) { - program.outputHelp(); - } -``` - -## .help() - - Output help information and exit immediately. - -## Examples - -```js -var program = require('commander'); - -program - .version('0.0.1') - .option('-C, --chdir ', 'change the working directory') - .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - .option('-T, --no-tests', 'ignore test hook') - -program - .command('setup [env]') - .description('run setup commands for all envs') - .option("-s, --setup_mode [mode]", "Which setup mode to use") - .action(function(env, options){ - var mode = options.setup_mode || "normal"; - env = env || 'all'; - console.log('setup for %s env(s) with %s mode', env, mode); - }); - -program - .command('exec ') - .alias('ex') - .description('execute the given remote cmd') - .option("-e, --exec_mode ", "Which exec mode to use") - .action(function(cmd, options){ - console.log('exec "%s" using %s mode', cmd, options.exec_mode); - }).on('--help', function() { - console.log(' Examples:'); - console.log(); - console.log(' $ deploy exec sequential'); - console.log(' $ deploy exec async'); - console.log(); - }); - -program - .command('*') - .action(function(env){ - console.log('deploying "%s"', env); - }); - -program.parse(process.argv); -``` - -More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory. - -## License - -MIT - diff --git a/truebit-implementation/node_modules/commander/index.js b/truebit-implementation/node_modules/commander/index.js deleted file mode 100644 index 87769656..00000000 --- a/truebit-implementation/node_modules/commander/index.js +++ /dev/null @@ -1,1103 +0,0 @@ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter; -var spawn = require('child_process').spawn; -var readlink = require('graceful-readlink').readlinkSync; -var path = require('path'); -var dirname = path.dirname; -var basename = path.basename; -var fs = require('fs'); - -/** - * Expose the root command. - */ - -exports = module.exports = new Command(); - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description || ''; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function() { - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg) { - return arg == this.short || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this._execs = []; - this._allowUnknownOption = false; - this._args = []; - this._name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir ', 'change the working directory') - * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function() { - * console.log('setup'); - * }); - * - * program - * .command('exec ') - * .description('run the given remote command') - * .action(function(cmd) { - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('teardown [otherDirs...]') - * .description('run teardown commands') - * .action(function(dir, otherDirs) { - * console.log('dir "%s"', dir); - * if (otherDirs) { - * otherDirs.forEach(function (oDir) { - * console.log('dir "%s"', oDir); - * }); - * } - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env) { - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @param {String} [desc] for git-style sub-commands - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name, desc, opts) { - opts = opts || {}; - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - - if (desc) { - cmd.description(desc); - this.executables = true; - this._execs[cmd._name] = true; - } - - cmd._noHelp = !!opts.noHelp; - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - - if (desc) return this; - return cmd; -}; - -/** - * Define argument syntax for the top-level command. - * - * @api public - */ - -Command.prototype.arguments = function (desc) { - return this.parseExpectedArgs(desc.split(/ +/)); -} - -/** - * Add an implicit `help [cmd]` subcommand - * which invokes `--help` for the given command. - * - * @api private - */ - -Command.prototype.addImplicitHelpCommand = function() { - this.command('help [cmd]', 'display help for [cmd]'); -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args) { - if (!args.length) return; - var self = this; - args.forEach(function(arg) { - var argDetails = { - required: false, - name: '', - variadic: false - }; - - switch (arg[0]) { - case '<': - argDetails.required = true; - argDetails.name = arg.slice(1, -1); - break; - case '[': - argDetails.name = arg.slice(1, -1); - break; - } - - if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') { - argDetails.variadic = true; - argDetails.name = argDetails.name.slice(0, -3); - } - if (argDetails.name) { - self._args.push(argDetails); - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function() { - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn) { - var self = this; - var listener = function(args, unknown) { - // Parse any so-far unknown options - args = args || []; - unknown = unknown || []; - - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - // Leftover arguments need to be pushed back. Fixes issue #56 - if (parsed.args.length) args = parsed.args.concat(args); - - self._args.forEach(function(arg, i) { - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } else if (arg.variadic) { - if (i !== self._args.length - 1) { - self.variadicArgNotLast(arg.name); - } - - args[i] = args.splice(i); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self._args.length) { - args[self._args.length] = self; - } else { - args.push(self); - } - - fn.apply(self, args); - }; - var parent = this.parent || this; - var name = parent === this ? '*' : this._name; - parent.on(name, listener); - if (this._alias) parent.on(this._alias, listener); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to true - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => false - * - * // required argument - * program.option('-C, --chdir ', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue) { - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if (typeof fn != 'function') { - if (fn instanceof RegExp) { - var regex = fn; - fn = function(val, def) { - var m = regex.exec(val); - return m ? m[0] : def; - } - } - else { - defaultValue = fn; - fn = null; - } - } - - // preassign default value only for --no-*, [optional], or - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val) { - // coercion - if (null !== val && fn) val = fn(val, undefined === self[name] - ? defaultValue - : self[name]); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Allow unknown options on the command line. - * - * @param {Boolean} arg if `true` or omitted, no error will be thrown - * for unknown options. - * @api public - */ -Command.prototype.allowUnknownOption = function(arg) { - this._allowUnknownOption = arguments.length === 0 || arg; - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv) { - // implicit help - if (this.executables) this.addImplicitHelpCommand(); - - // store raw args - this.rawArgs = argv; - - // guess name - this._name = this._name || basename(argv[1], '.js'); - - // github-style sub-commands with no sub-command - if (this.executables && argv.length < 3) { - // this user needs help - argv.push('--help'); - } - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - var args = this.args = parsed.args; - - var result = this.parseArgs(this.args, parsed.unknown); - - // executable sub-commands - var name = result.args[0]; - if (this._execs[name] && typeof this._execs[name] != "function") { - return this.executeSubCommand(argv, args, parsed.unknown); - } - - return result; -}; - -/** - * Execute a sub-command executable. - * - * @param {Array} argv - * @param {Array} args - * @param {Array} unknown - * @api private - */ - -Command.prototype.executeSubCommand = function(argv, args, unknown) { - args = args.concat(unknown); - - if (!args.length) this.help(); - if ('help' == args[0] && 1 == args.length) this.help(); - - // --help - if ('help' == args[0]) { - args[0] = args[1]; - args[1] = '--help'; - } - - // executable - var f = argv[1]; - // name of the subcommand, link `pm-install` - var bin = basename(f, '.js') + '-' + args[0]; - - - // In case of globally installed, get the base dir where executable - // subcommand file should be located at - var baseDir - , link = readlink(f); - - // when symbolink is relative path - if (link !== f && link.charAt(0) !== '/') { - link = path.join(dirname(f), link) - } - baseDir = dirname(link); - - // prefer local `./` to bin in the $PATH - var localBin = path.join(baseDir, bin); - - // whether bin file is a js script with explicit `.js` extension - var isExplicitJS = false; - if (exists(localBin + '.js')) { - bin = localBin + '.js'; - isExplicitJS = true; - } else if (exists(localBin)) { - bin = localBin; - } - - args = args.slice(1); - - var proc; - if (process.platform !== 'win32') { - if (isExplicitJS) { - args.unshift(localBin); - // add executable arguments to spawn - args = (process.execArgv || []).concat(args); - - proc = spawn('node', args, { stdio: 'inherit', customFds: [0, 1, 2] }); - } else { - proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] }); - } - } else { - args.unshift(localBin); - proc = spawn(process.execPath, args, { stdio: 'inherit'}); - } - - proc.on('close', process.exit.bind(process)); - proc.on('error', function(err) { - if (err.code == "ENOENT") { - console.error('\n %s(1) does not exist, try --help\n', bin); - } else if (err.code == "EACCES") { - console.error('\n %s(1) not executable. try chmod or run with root\n', bin); - } - process.exit(1); - }); - - this.runningCommand = proc; -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * This also normalizes equal sign and splits "--abc=def" into "--abc def". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args) { - var ret = [] - , arg - , lastOpt - , index; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (i > 0) { - lastOpt = this.optionFor(args[i-1]); - } - - if (arg === '--') { - // Honor option terminator - ret = ret.concat(args.slice(i)); - break; - } else if (lastOpt && lastOpt.required) { - ret.push(arg); - } else if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c) { - ret.push('-' + c); - }); - } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) { - ret.push(arg.slice(0, index), arg.slice(index + 1)); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown) { - var name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg) { - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv) { - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || ('-' == arg[0] && '-' != arg)) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Return an object containing options as key-value pairs - * - * @return {Object} - * @api public - */ -Command.prototype.opts = function() { - var result = {} - , len = this.options.length; - - for (var i = 0 ; i < len; i++) { - var key = camelcase(this.options[i].name()); - result[key] = key === 'version' ? this._version : this[key]; - } - return result; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name) { - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag) { - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag) { - if (this._allowUnknownOption) return; - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - -/** - * Variadic argument with `name` is not the last argument as required. - * - * @param {String} name - * @api private - */ - -Command.prototype.variadicArgNotLast = function(name) { - console.error(); - console.error(" error: variadic arguments must be last `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags) { - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function() { - process.stdout.write(str + '\n'); - process.exit(0); - }); - return this; -}; - -/** - * Set the description to `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str) { - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set an alias for the command - * - * @param {String} alias - * @return {String|Command} - * @api public - */ - -Command.prototype.alias = function(alias) { - if (0 == arguments.length) return this._alias; - this._alias = alias; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str) { - var args = this._args.map(function(arg) { - return humanReadableArgName(arg); - }); - - var usage = '[options]' - + (this.commands.length ? ' [command]' : '') - + (this._args.length ? ' ' + args.join(' ') : ''); - - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Get the name of the command - * - * @param {String} name - * @return {String|Command} - * @api public - */ - -Command.prototype.name = function() { - return this._name; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function() { - return this.options.reduce(function(max, option) { - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function() { - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option) { - return pad(option.flags, width) + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function() { - if (!this.commands.length) return ''; - - var commands = this.commands.filter(function(cmd) { - return !cmd._noHelp; - }).map(function(cmd) { - var args = cmd._args.map(function(arg) { - return humanReadableArgName(arg); - }).join(' '); - - return [ - cmd._name - + (cmd._alias - ? '|' + cmd._alias - : '') - + (cmd.options.length - ? ' [options]' - : '') - + ' ' + args - , cmd.description() - ]; - }); - - var width = commands.reduce(function(max, command) { - return Math.max(max, command[0].length); - }, 0); - - return [ - '' - , ' Commands:' - , '' - , commands.map(function(cmd) { - return pad(cmd[0], width) + ' ' + cmd[1]; - }).join('\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function() { - var desc = []; - if (this._description) { - desc = [ - ' ' + this._description - , '' - ]; - } - - var cmdName = this._name; - if (this._alias) { - cmdName = cmdName + '|' + this._alias; - } - var usage = [ - '' - ,' Usage: ' + cmdName + ' ' + this.usage() - , '' - ]; - - var cmds = []; - var commandHelp = this.commandHelp(); - if (commandHelp) cmds = [commandHelp]; - - var options = [ - ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ]; - - return usage - .concat(cmds) - .concat(desc) - .concat(options) - .join('\n'); -}; - -/** - * Output help information for this command - * - * @api public - */ - -Command.prototype.outputHelp = function() { - process.stdout.write(this.helpInformation()); - this.emit('--help'); -}; - -/** - * Output help information and exit. - * - * @api public - */ - -Command.prototype.help = function() { - this.outputHelp(); - process.exit(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word) { - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - cmd.outputHelp(); - process.exit(0); - } - } -} - -/** - * Takes an argument an returns its human readable equivalent for help usage. - * - * @param {Object} arg - * @return {String} - * @api private - */ - -function humanReadableArgName(arg) { - var nameOutput = arg.name + (arg.variadic === true ? '...' : ''); - - return arg.required - ? '<' + nameOutput + '>' - : '[' + nameOutput + ']' -} - -// for versions before node v0.8 when there weren't `fs.existsSync` -function exists(file) { - try { - if (fs.statSync(file).isFile()) { - return true; - } - } catch (e) { - return false; - } -} - diff --git a/truebit-implementation/node_modules/commander/package.json b/truebit-implementation/node_modules/commander/package.json deleted file mode 100644 index 70edcef8..00000000 --- a/truebit-implementation/node_modules/commander/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "commander@~2.8.1", - "_id": "commander@2.8.1", - "_inBundle": false, - "_integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "_location": "/commander", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "commander@~2.8.1", - "name": "commander", - "escapedName": "commander", - "rawSpec": "~2.8.1", - "saveSpec": null, - "fetchSpec": "~2.8.1" - }, - "_requiredBy": [ - "/seek-bzip", - "/tar.gz" - ], - "_resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "_shasum": "06be367febfda0c330aa1e2a072d3dc9762425d4", - "_spec": "commander@~2.8.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/seek-bzip", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "bugs": { - "url": "https://github.com/tj/commander.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "deprecated": false, - "description": "the complete solution for node.js command-line programs", - "devDependencies": { - "should": ">= 0.0.1", - "sinon": ">= 1.14.1" - }, - "engines": { - "node": ">= 0.6.x" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/tj/commander.js#readme", - "keywords": [ - "command", - "option", - "parser" - ], - "license": "MIT", - "main": "index", - "name": "commander", - "repository": { - "type": "git", - "url": "git+https://github.com/tj/commander.js.git" - }, - "scripts": { - "test": "make test" - }, - "version": "2.8.1" -} diff --git a/truebit-implementation/node_modules/concat-map/.travis.yml b/truebit-implementation/node_modules/concat-map/.travis.yml deleted file mode 100644 index f1d0f13c..00000000 --- a/truebit-implementation/node_modules/concat-map/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/truebit-implementation/node_modules/concat-map/LICENSE b/truebit-implementation/node_modules/concat-map/LICENSE deleted file mode 100644 index ee27ba4b..00000000 --- a/truebit-implementation/node_modules/concat-map/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/concat-map/README.markdown b/truebit-implementation/node_modules/concat-map/README.markdown deleted file mode 100644 index 408f70a1..00000000 --- a/truebit-implementation/node_modules/concat-map/README.markdown +++ /dev/null @@ -1,62 +0,0 @@ -concat-map -========== - -Concatenative mapdashery. - -[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) - -[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) - -example -======= - -``` js -var concatMap = require('concat-map'); -var xs = [ 1, 2, 3, 4, 5, 6 ]; -var ys = concatMap(xs, function (x) { - return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; -}); -console.dir(ys); -``` - -*** - -``` -[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] -``` - -methods -======= - -``` js -var concatMap = require('concat-map') -``` - -concatMap(xs, fn) ------------------ - -Return an array of concatenated elements by calling `fn(x, i)` for each element -`x` and each index `i` in the array `xs`. - -When `fn(x, i)` returns an array, its result will be concatenated with the -result array. If `fn(x, i)` returns anything else, that value will be pushed -onto the end of the result array. - -install -======= - -With [npm](http://npmjs.org) do: - -``` -npm install concat-map -``` - -license -======= - -MIT - -notes -===== - -This module was written while sitting high above the ground in a tree. diff --git a/truebit-implementation/node_modules/concat-map/example/map.js b/truebit-implementation/node_modules/concat-map/example/map.js deleted file mode 100644 index 33656217..00000000 --- a/truebit-implementation/node_modules/concat-map/example/map.js +++ /dev/null @@ -1,6 +0,0 @@ -var concatMap = require('../'); -var xs = [ 1, 2, 3, 4, 5, 6 ]; -var ys = concatMap(xs, function (x) { - return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; -}); -console.dir(ys); diff --git a/truebit-implementation/node_modules/concat-map/index.js b/truebit-implementation/node_modules/concat-map/index.js deleted file mode 100644 index b29a7812..00000000 --- a/truebit-implementation/node_modules/concat-map/index.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = function (xs, fn) { - var res = []; - for (var i = 0; i < xs.length; i++) { - var x = fn(xs[i], i); - if (isArray(x)) res.push.apply(res, x); - else res.push(x); - } - return res; -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; diff --git a/truebit-implementation/node_modules/concat-map/package.json b/truebit-implementation/node_modules/concat-map/package.json deleted file mode 100644 index 9bfdfddf..00000000 --- a/truebit-implementation/node_modules/concat-map/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_from": "concat-map@0.0.1", - "_id": "concat-map@0.0.1", - "_inBundle": false, - "_integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "_location": "/concat-map", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "concat-map@0.0.1", - "name": "concat-map", - "escapedName": "concat-map", - "rawSpec": "0.0.1", - "saveSpec": null, - "fetchSpec": "0.0.1" - }, - "_requiredBy": [ - "/brace-expansion" - ], - "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", - "_spec": "concat-map@0.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/brace-expansion", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/node-concat-map/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "concatenative mapdashery", - "devDependencies": { - "tape": "~2.4.0" - }, - "directories": { - "example": "example", - "test": "test" - }, - "homepage": "https://github.com/substack/node-concat-map#readme", - "keywords": [ - "concat", - "concatMap", - "map", - "functional", - "higher-order" - ], - "license": "MIT", - "main": "index.js", - "name": "concat-map", - "repository": { - "type": "git", - "url": "git://github.com/substack/node-concat-map.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": { - "ie": [ - 6, - 7, - 8, - 9 - ], - "ff": [ - 3.5, - 10, - 15 - ], - "chrome": [ - 10, - 22 - ], - "safari": [ - 5.1 - ], - "opera": [ - 12 - ] - } - }, - "version": "0.0.1" -} diff --git a/truebit-implementation/node_modules/concat-map/test/map.js b/truebit-implementation/node_modules/concat-map/test/map.js deleted file mode 100644 index fdbd7022..00000000 --- a/truebit-implementation/node_modules/concat-map/test/map.js +++ /dev/null @@ -1,39 +0,0 @@ -var concatMap = require('../'); -var test = require('tape'); - -test('empty or not', function (t) { - var xs = [ 1, 2, 3, 4, 5, 6 ]; - var ixes = []; - var ys = concatMap(xs, function (x, ix) { - ixes.push(ix); - return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; - }); - t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); - t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); - t.end(); -}); - -test('always something', function (t) { - var xs = [ 'a', 'b', 'c', 'd' ]; - var ys = concatMap(xs, function (x) { - return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; - }); - t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); - t.end(); -}); - -test('scalars', function (t) { - var xs = [ 'a', 'b', 'c', 'd' ]; - var ys = concatMap(xs, function (x) { - return x === 'b' ? [ 'B', 'B', 'B' ] : x; - }); - t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); - t.end(); -}); - -test('undefs', function (t) { - var xs = [ 'a', 'b', 'c', 'd' ]; - var ys = concatMap(xs, function () {}); - t.same(ys, [ undefined, undefined, undefined, undefined ]); - t.end(); -}); diff --git a/truebit-implementation/node_modules/content-disposition/HISTORY.md b/truebit-implementation/node_modules/content-disposition/HISTORY.md deleted file mode 100644 index 53849b61..00000000 --- a/truebit-implementation/node_modules/content-disposition/HISTORY.md +++ /dev/null @@ -1,50 +0,0 @@ -0.5.2 / 2016-12-08 -================== - - * Fix `parse` to accept any linear whitespace character - -0.5.1 / 2016-01-17 -================== - - * perf: enable strict mode - -0.5.0 / 2014-10-11 -================== - - * Add `parse` function - -0.4.0 / 2014-09-21 -================== - - * Expand non-Unicode `filename` to the full ISO-8859-1 charset - -0.3.0 / 2014-09-20 -================== - - * Add `fallback` option - * Add `type` option - -0.2.0 / 2014-09-19 -================== - - * Reduce ambiguity of file names with hex escape in buggy browsers - -0.1.2 / 2014-09-19 -================== - - * Fix periodic invalid Unicode filename header - -0.1.1 / 2014-09-19 -================== - - * Fix invalid characters appearing in `filename*` parameter - -0.1.0 / 2014-09-18 -================== - - * Make the `filename` argument optional - -0.0.0 / 2014-09-18 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/content-disposition/LICENSE b/truebit-implementation/node_modules/content-disposition/LICENSE deleted file mode 100644 index b7dce6cf..00000000 --- a/truebit-implementation/node_modules/content-disposition/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/content-disposition/README.md b/truebit-implementation/node_modules/content-disposition/README.md deleted file mode 100644 index 992d19a6..00000000 --- a/truebit-implementation/node_modules/content-disposition/README.md +++ /dev/null @@ -1,141 +0,0 @@ -# content-disposition - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Create and parse HTTP `Content-Disposition` header - -## Installation - -```sh -$ npm install content-disposition -``` - -## API - -```js -var contentDisposition = require('content-disposition') -``` - -### contentDisposition(filename, options) - -Create an attachment `Content-Disposition` header value using the given file name, -if supplied. The `filename` is optional and if no file name is desired, but you -want to specify `options`, set `filename` to `undefined`. - -```js -res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf')) -``` - -**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this -header through a means different from `setHeader` in Node.js, you'll want to specify -the `'binary'` encoding in Node.js. - -#### Options - -`contentDisposition` accepts these properties in the options object. - -##### fallback - -If the `filename` option is outside ISO-8859-1, then the file name is actually -stored in a supplemental field for clients that support Unicode file names and -a ISO-8859-1 version of the file name is automatically generated. - -This specifies the ISO-8859-1 file name to override the automatic generation or -disables the generation all together, defaults to `true`. - - - A string will specify the ISO-8859-1 file name to use in place of automatic - generation. - - `false` will disable including a ISO-8859-1 file name and only include the - Unicode version (unless the file name is already ISO-8859-1). - - `true` will enable automatic generation if the file name is outside ISO-8859-1. - -If the `filename` option is ISO-8859-1 and this option is specified and has a -different value, then the `filename` option is encoded in the extended field -and this set as the fallback field, even though they are both ISO-8859-1. - -##### type - -Specifies the disposition type, defaults to `"attachment"`. This can also be -`"inline"`, or any other value (all values except inline are treated like -`attachment`, but can convey additional information if both parties agree to -it). The type is normalized to lower-case. - -### contentDisposition.parse(string) - -```js -var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'); -``` - -Parse a `Content-Disposition` header string. This automatically handles extended -("Unicode") parameters by decoding them and providing them under the standard -parameter name. This will return an object with the following properties (examples -are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'`): - - - `type`: The disposition type (always lower case). Example: `'attachment'` - - - `parameters`: An object of the parameters in the disposition (name of parameter - always lower case and extended versions replace non-extended versions). Example: - `{filename: "€ rates.txt"}` - -## Examples - -### Send a file for download - -```js -var contentDisposition = require('content-disposition') -var destroy = require('destroy') -var http = require('http') -var onFinished = require('on-finished') - -var filePath = '/path/to/public/plans.pdf' - -http.createServer(function onRequest(req, res) { - // set headers - res.setHeader('Content-Type', 'application/pdf') - res.setHeader('Content-Disposition', contentDisposition(filePath)) - - // send file - var stream = fs.createReadStream(filePath) - stream.pipe(res) - onFinished(res, function (err) { - destroy(stream) - }) -}) -``` - -## Testing - -```sh -$ npm test -``` - -## References - -- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616] -- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987] -- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266] -- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231] - -[rfc-2616]: https://tools.ietf.org/html/rfc2616 -[rfc-5987]: https://tools.ietf.org/html/rfc5987 -[rfc-6266]: https://tools.ietf.org/html/rfc6266 -[tc-2231]: http://greenbytes.de/tech/tc2231/ - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/content-disposition.svg?style=flat -[npm-url]: https://npmjs.org/package/content-disposition -[node-version-image]: https://img.shields.io/node/v/content-disposition.svg?style=flat -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/content-disposition.svg?style=flat -[travis-url]: https://travis-ci.org/jshttp/content-disposition -[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg?style=flat -[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master -[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg?style=flat -[downloads-url]: https://npmjs.org/package/content-disposition diff --git a/truebit-implementation/node_modules/content-disposition/index.js b/truebit-implementation/node_modules/content-disposition/index.js deleted file mode 100644 index 88a0d0a2..00000000 --- a/truebit-implementation/node_modules/content-disposition/index.js +++ /dev/null @@ -1,445 +0,0 @@ -/*! - * content-disposition - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - */ - -module.exports = contentDisposition -module.exports.parse = parse - -/** - * Module dependencies. - */ - -var basename = require('path').basename - -/** - * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%") - */ - -var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex - -/** - * RegExp to match percent encoding escape. - */ - -var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/ -var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g - -/** - * RegExp to match non-latin1 characters. - */ - -var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g - -/** - * RegExp to match quoted-pair in RFC 2616 - * - * quoted-pair = "\" CHAR - * CHAR = - */ - -var QESC_REGEXP = /\\([\u0000-\u007f])/g - -/** - * RegExp to match chars that must be quoted-pair in RFC 2616 - */ - -var QUOTE_REGEXP = /([\\"])/g - -/** - * RegExp for various RFC 2616 grammar - * - * parameter = token "=" ( token | quoted-string ) - * token = 1* - * separators = "(" | ")" | "<" | ">" | "@" - * | "," | ";" | ":" | "\" | <"> - * | "/" | "[" | "]" | "?" | "=" - * | "{" | "}" | SP | HT - * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) - * qdtext = > - * quoted-pair = "\" CHAR - * CHAR = - * TEXT = - * LWS = [CRLF] 1*( SP | HT ) - * CRLF = CR LF - * CR = - * LF = - * SP = - * HT = - * CTL = - * OCTET = - */ - -var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex -var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/ -var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/ - -/** - * RegExp for various RFC 5987 grammar - * - * ext-value = charset "'" [ language ] "'" value-chars - * charset = "UTF-8" / "ISO-8859-1" / mime-charset - * mime-charset = 1*mime-charsetc - * mime-charsetc = ALPHA / DIGIT - * / "!" / "#" / "$" / "%" / "&" - * / "+" / "-" / "^" / "_" / "`" - * / "{" / "}" / "~" - * language = ( 2*3ALPHA [ extlang ] ) - * / 4ALPHA - * / 5*8ALPHA - * extlang = *3( "-" 3ALPHA ) - * value-chars = *( pct-encoded / attr-char ) - * pct-encoded = "%" HEXDIG HEXDIG - * attr-char = ALPHA / DIGIT - * / "!" / "#" / "$" / "&" / "+" / "-" / "." - * / "^" / "_" / "`" / "|" / "~" - */ - -var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/ - -/** - * RegExp for various RFC 6266 grammar - * - * disposition-type = "inline" | "attachment" | disp-ext-type - * disp-ext-type = token - * disposition-parm = filename-parm | disp-ext-parm - * filename-parm = "filename" "=" value - * | "filename*" "=" ext-value - * disp-ext-parm = token "=" value - * | ext-token "=" ext-value - * ext-token = - */ - -var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex - -/** - * Create an attachment Content-Disposition header. - * - * @param {string} [filename] - * @param {object} [options] - * @param {string} [options.type=attachment] - * @param {string|boolean} [options.fallback=true] - * @return {string} - * @api public - */ - -function contentDisposition (filename, options) { - var opts = options || {} - - // get type - var type = opts.type || 'attachment' - - // get parameters - var params = createparams(filename, opts.fallback) - - // format into string - return format(new ContentDisposition(type, params)) -} - -/** - * Create parameters object from filename and fallback. - * - * @param {string} [filename] - * @param {string|boolean} [fallback=true] - * @return {object} - * @api private - */ - -function createparams (filename, fallback) { - if (filename === undefined) { - return - } - - var params = {} - - if (typeof filename !== 'string') { - throw new TypeError('filename must be a string') - } - - // fallback defaults to true - if (fallback === undefined) { - fallback = true - } - - if (typeof fallback !== 'string' && typeof fallback !== 'boolean') { - throw new TypeError('fallback must be a string or boolean') - } - - if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) { - throw new TypeError('fallback must be ISO-8859-1 string') - } - - // restrict to file base name - var name = basename(filename) - - // determine if name is suitable for quoted string - var isQuotedString = TEXT_REGEXP.test(name) - - // generate fallback name - var fallbackName = typeof fallback !== 'string' - ? fallback && getlatin1(name) - : basename(fallback) - var hasFallback = typeof fallbackName === 'string' && fallbackName !== name - - // set extended filename parameter - if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) { - params['filename*'] = name - } - - // set filename parameter - if (isQuotedString || hasFallback) { - params.filename = hasFallback - ? fallbackName - : name - } - - return params -} - -/** - * Format object to Content-Disposition header. - * - * @param {object} obj - * @param {string} obj.type - * @param {object} [obj.parameters] - * @return {string} - * @api private - */ - -function format (obj) { - var parameters = obj.parameters - var type = obj.type - - if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) { - throw new TypeError('invalid type') - } - - // start with normalized type - var string = String(type).toLowerCase() - - // append parameters - if (parameters && typeof parameters === 'object') { - var param - var params = Object.keys(parameters).sort() - - for (var i = 0; i < params.length; i++) { - param = params[i] - - var val = param.substr(-1) === '*' - ? ustring(parameters[param]) - : qstring(parameters[param]) - - string += '; ' + param + '=' + val - } - } - - return string -} - -/** - * Decode a RFC 6987 field value (gracefully). - * - * @param {string} str - * @return {string} - * @api private - */ - -function decodefield (str) { - var match = EXT_VALUE_REGEXP.exec(str) - - if (!match) { - throw new TypeError('invalid extended field value') - } - - var charset = match[1].toLowerCase() - var encoded = match[2] - var value - - // to binary string - var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode) - - switch (charset) { - case 'iso-8859-1': - value = getlatin1(binary) - break - case 'utf-8': - value = new Buffer(binary, 'binary').toString('utf8') - break - default: - throw new TypeError('unsupported charset in extended field') - } - - return value -} - -/** - * Get ISO-8859-1 version of string. - * - * @param {string} val - * @return {string} - * @api private - */ - -function getlatin1 (val) { - // simple Unicode -> ISO-8859-1 transformation - return String(val).replace(NON_LATIN1_REGEXP, '?') -} - -/** - * Parse Content-Disposition header string. - * - * @param {string} string - * @return {object} - * @api private - */ - -function parse (string) { - if (!string || typeof string !== 'string') { - throw new TypeError('argument string is required') - } - - var match = DISPOSITION_TYPE_REGEXP.exec(string) - - if (!match) { - throw new TypeError('invalid type format') - } - - // normalize type - var index = match[0].length - var type = match[1].toLowerCase() - - var key - var names = [] - var params = {} - var value - - // calculate index to start at - index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';' - ? index - 1 - : index - - // match parameters - while ((match = PARAM_REGEXP.exec(string))) { - if (match.index !== index) { - throw new TypeError('invalid parameter format') - } - - index += match[0].length - key = match[1].toLowerCase() - value = match[2] - - if (names.indexOf(key) !== -1) { - throw new TypeError('invalid duplicate parameter') - } - - names.push(key) - - if (key.indexOf('*') + 1 === key.length) { - // decode extended value - key = key.slice(0, -1) - value = decodefield(value) - - // overwrite existing value - params[key] = value - continue - } - - if (typeof params[key] === 'string') { - continue - } - - if (value[0] === '"') { - // remove quotes and escapes - value = value - .substr(1, value.length - 2) - .replace(QESC_REGEXP, '$1') - } - - params[key] = value - } - - if (index !== -1 && index !== string.length) { - throw new TypeError('invalid parameter format') - } - - return new ContentDisposition(type, params) -} - -/** - * Percent decode a single character. - * - * @param {string} str - * @param {string} hex - * @return {string} - * @api private - */ - -function pdecode (str, hex) { - return String.fromCharCode(parseInt(hex, 16)) -} - -/** - * Percent encode a single character. - * - * @param {string} char - * @return {string} - * @api private - */ - -function pencode (char) { - var hex = String(char) - .charCodeAt(0) - .toString(16) - .toUpperCase() - return hex.length === 1 - ? '%0' + hex - : '%' + hex -} - -/** - * Quote a string for HTTP. - * - * @param {string} val - * @return {string} - * @api private - */ - -function qstring (val) { - var str = String(val) - - return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' -} - -/** - * Encode a Unicode string for HTTP (RFC 5987). - * - * @param {string} val - * @return {string} - * @api private - */ - -function ustring (val) { - var str = String(val) - - // percent encode as UTF-8 - var encoded = encodeURIComponent(str) - .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode) - - return 'UTF-8\'\'' + encoded -} - -/** - * Class for parsed Content-Disposition header for v8 optimization - */ - -function ContentDisposition (type, parameters) { - this.type = type - this.parameters = parameters -} diff --git a/truebit-implementation/node_modules/content-disposition/package.json b/truebit-implementation/node_modules/content-disposition/package.json deleted file mode 100644 index 92d66d90..00000000 --- a/truebit-implementation/node_modules/content-disposition/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "content-disposition@0.5.2", - "_id": "content-disposition@0.5.2", - "_inBundle": false, - "_integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "_location": "/content-disposition", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "content-disposition@0.5.2", - "name": "content-disposition", - "escapedName": "content-disposition", - "rawSpec": "0.5.2", - "saveSpec": null, - "fetchSpec": "0.5.2" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "_shasum": "0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4", - "_spec": "content-disposition@0.5.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "bugs": { - "url": "https://github.com/jshttp/content-disposition/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], - "deprecated": false, - "description": "Create and parse Content-Disposition header", - "devDependencies": { - "eslint": "3.11.1", - "eslint-config-standard": "6.2.1", - "eslint-plugin-promise": "3.3.0", - "eslint-plugin-standard": "2.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/content-disposition#readme", - "keywords": [ - "content-disposition", - "http", - "rfc6266", - "res" - ], - "license": "MIT", - "name": "content-disposition", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/content-disposition.git" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "0.5.2" -} diff --git a/truebit-implementation/node_modules/content-type/HISTORY.md b/truebit-implementation/node_modules/content-type/HISTORY.md deleted file mode 100644 index 8f5cb703..00000000 --- a/truebit-implementation/node_modules/content-type/HISTORY.md +++ /dev/null @@ -1,24 +0,0 @@ -1.0.4 / 2017-09-11 -================== - - * perf: skip parameter parsing when no parameters - -1.0.3 / 2017-09-10 -================== - - * perf: remove argument reassignment - -1.0.2 / 2016-05-09 -================== - - * perf: enable strict mode - -1.0.1 / 2015-02-13 -================== - - * Improve missing `Content-Type` header error message - -1.0.0 / 2015-02-01 -================== - - * Initial implementation, derived from `media-typer@0.3.0` diff --git a/truebit-implementation/node_modules/content-type/LICENSE b/truebit-implementation/node_modules/content-type/LICENSE deleted file mode 100644 index 34b1a2de..00000000 --- a/truebit-implementation/node_modules/content-type/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/content-type/README.md b/truebit-implementation/node_modules/content-type/README.md deleted file mode 100644 index 3ed67413..00000000 --- a/truebit-implementation/node_modules/content-type/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# content-type - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Create and parse HTTP Content-Type header according to RFC 7231 - -## Installation - -```sh -$ npm install content-type -``` - -## API - -```js -var contentType = require('content-type') -``` - -### contentType.parse(string) - -```js -var obj = contentType.parse('image/svg+xml; charset=utf-8') -``` - -Parse a content type string. This will return an object with the following -properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`): - - - `type`: The media type (the type and subtype, always lower case). - Example: `'image/svg+xml'` - - - `parameters`: An object of the parameters in the media type (name of parameter - always lower case). Example: `{charset: 'utf-8'}` - -Throws a `TypeError` if the string is missing or invalid. - -### contentType.parse(req) - -```js -var obj = contentType.parse(req) -``` - -Parse the `content-type` header from the given `req`. Short-cut for -`contentType.parse(req.headers['content-type'])`. - -Throws a `TypeError` if the `Content-Type` header is missing or invalid. - -### contentType.parse(res) - -```js -var obj = contentType.parse(res) -``` - -Parse the `content-type` header set on the given `res`. Short-cut for -`contentType.parse(res.getHeader('content-type'))`. - -Throws a `TypeError` if the `Content-Type` header is missing or invalid. - -### contentType.format(obj) - -```js -var str = contentType.format({type: 'image/svg+xml'}) -``` - -Format an object into a content type string. This will return a string of the -content type for the given object with the following properties (examples are -shown that produce the string `'image/svg+xml; charset=utf-8'`): - - - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'` - - - `parameters`: An object of the parameters in the media type (name of the - parameter will be lower-cased). Example: `{charset: 'utf-8'}` - -Throws a `TypeError` if the object contains an invalid type or parameter names. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/content-type.svg -[npm-url]: https://npmjs.org/package/content-type -[node-version-image]: https://img.shields.io/node/v/content-type.svg -[node-version-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg -[travis-url]: https://travis-ci.org/jshttp/content-type -[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/content-type -[downloads-image]: https://img.shields.io/npm/dm/content-type.svg -[downloads-url]: https://npmjs.org/package/content-type diff --git a/truebit-implementation/node_modules/content-type/index.js b/truebit-implementation/node_modules/content-type/index.js deleted file mode 100644 index 6ce03f20..00000000 --- a/truebit-implementation/node_modules/content-type/index.js +++ /dev/null @@ -1,222 +0,0 @@ -/*! - * content-type - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1 - * - * parameter = token "=" ( token / quoted-string ) - * token = 1*tchar - * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" - * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" - * / DIGIT / ALPHA - * ; any VCHAR, except delimiters - * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE - * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text - * obs-text = %x80-FF - * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) - */ -var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g -var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ -var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ - -/** - * RegExp to match quoted-pair in RFC 7230 sec 3.2.6 - * - * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) - * obs-text = %x80-FF - */ -var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g - -/** - * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6 - */ -var QUOTE_REGEXP = /([\\"])/g - -/** - * RegExp to match type in RFC 7231 sec 3.1.1.1 - * - * media-type = type "/" subtype - * type = token - * subtype = token - */ -var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ - -/** - * Module exports. - * @public - */ - -exports.format = format -exports.parse = parse - -/** - * Format object to media type. - * - * @param {object} obj - * @return {string} - * @public - */ - -function format (obj) { - if (!obj || typeof obj !== 'object') { - throw new TypeError('argument obj is required') - } - - var parameters = obj.parameters - var type = obj.type - - if (!type || !TYPE_REGEXP.test(type)) { - throw new TypeError('invalid type') - } - - var string = type - - // append parameters - if (parameters && typeof parameters === 'object') { - var param - var params = Object.keys(parameters).sort() - - for (var i = 0; i < params.length; i++) { - param = params[i] - - if (!TOKEN_REGEXP.test(param)) { - throw new TypeError('invalid parameter name') - } - - string += '; ' + param + '=' + qstring(parameters[param]) - } - } - - return string -} - -/** - * Parse media type to object. - * - * @param {string|object} string - * @return {Object} - * @public - */ - -function parse (string) { - if (!string) { - throw new TypeError('argument string is required') - } - - // support req/res-like objects as argument - var header = typeof string === 'object' - ? getcontenttype(string) - : string - - if (typeof header !== 'string') { - throw new TypeError('argument string is required to be a string') - } - - var index = header.indexOf(';') - var type = index !== -1 - ? header.substr(0, index).trim() - : header.trim() - - if (!TYPE_REGEXP.test(type)) { - throw new TypeError('invalid media type') - } - - var obj = new ContentType(type.toLowerCase()) - - // parse parameters - if (index !== -1) { - var key - var match - var value - - PARAM_REGEXP.lastIndex = index - - while ((match = PARAM_REGEXP.exec(header))) { - if (match.index !== index) { - throw new TypeError('invalid parameter format') - } - - index += match[0].length - key = match[1].toLowerCase() - value = match[2] - - if (value[0] === '"') { - // remove quotes and escapes - value = value - .substr(1, value.length - 2) - .replace(QESC_REGEXP, '$1') - } - - obj.parameters[key] = value - } - - if (index !== header.length) { - throw new TypeError('invalid parameter format') - } - } - - return obj -} - -/** - * Get content-type from req/res objects. - * - * @param {object} - * @return {Object} - * @private - */ - -function getcontenttype (obj) { - var header - - if (typeof obj.getHeader === 'function') { - // res-like - header = obj.getHeader('content-type') - } else if (typeof obj.headers === 'object') { - // req-like - header = obj.headers && obj.headers['content-type'] - } - - if (typeof header !== 'string') { - throw new TypeError('content-type header is missing from object') - } - - return header -} - -/** - * Quote a string if necessary. - * - * @param {string} val - * @return {string} - * @private - */ - -function qstring (val) { - var str = String(val) - - // no need to quote tokens - if (TOKEN_REGEXP.test(str)) { - return str - } - - if (str.length > 0 && !TEXT_REGEXP.test(str)) { - throw new TypeError('invalid parameter value') - } - - return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' -} - -/** - * Class to represent a content type. - * @private - */ -function ContentType (type) { - this.parameters = Object.create(null) - this.type = type -} diff --git a/truebit-implementation/node_modules/content-type/package.json b/truebit-implementation/node_modules/content-type/package.json deleted file mode 100644 index 92e1f710..00000000 --- a/truebit-implementation/node_modules/content-type/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "content-type@~1.0.4", - "_id": "content-type@1.0.4", - "_inBundle": false, - "_integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "_location": "/content-type", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "content-type@~1.0.4", - "name": "content-type", - "escapedName": "content-type", - "rawSpec": "~1.0.4", - "saveSpec": null, - "fetchSpec": "~1.0.4" - }, - "_requiredBy": [ - "/body-parser", - "/express" - ], - "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "_shasum": "e138cc75e040c727b1966fe5e5f8c9aee256fe3b", - "_spec": "content-type@~1.0.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "author": { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - "bugs": { - "url": "https://github.com/jshttp/content-type/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Create and parse HTTP Content-Type header", - "devDependencies": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.7.0", - "eslint-plugin-node": "5.1.1", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "~1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/content-type#readme", - "keywords": [ - "content-type", - "http", - "req", - "res", - "rfc7231" - ], - "license": "MIT", - "name": "content-type", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/content-type.git" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" - }, - "version": "1.0.4" -} diff --git a/truebit-implementation/node_modules/cookie-signature/.npmignore b/truebit-implementation/node_modules/cookie-signature/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/truebit-implementation/node_modules/cookie-signature/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/truebit-implementation/node_modules/cookie-signature/History.md b/truebit-implementation/node_modules/cookie-signature/History.md deleted file mode 100644 index 78513cc3..00000000 --- a/truebit-implementation/node_modules/cookie-signature/History.md +++ /dev/null @@ -1,38 +0,0 @@ -1.0.6 / 2015-02-03 -================== - -* use `npm test` instead of `make test` to run tests -* clearer assertion messages when checking input - - -1.0.5 / 2014-09-05 -================== - -* add license to package.json - -1.0.4 / 2014-06-25 -================== - - * corrected avoidance of timing attacks (thanks @tenbits!) - -1.0.3 / 2014-01-28 -================== - - * [incorrect] fix for timing attacks - -1.0.2 / 2014-01-28 -================== - - * fix missing repository warning - * fix typo in test - -1.0.1 / 2013-04-15 -================== - - * Revert "Changed underlying HMAC algo. to sha512." - * Revert "Fix for timing attacks on MAC verification." - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/cookie-signature/Readme.md b/truebit-implementation/node_modules/cookie-signature/Readme.md deleted file mode 100644 index 2559e841..00000000 --- a/truebit-implementation/node_modules/cookie-signature/Readme.md +++ /dev/null @@ -1,42 +0,0 @@ - -# cookie-signature - - Sign and unsign cookies. - -## Example - -```js -var cookie = require('cookie-signature'); - -var val = cookie.sign('hello', 'tobiiscool'); -val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); - -var val = cookie.sign('hello', 'tobiiscool'); -cookie.unsign(val, 'tobiiscool').should.equal('hello'); -cookie.unsign(val, 'luna').should.be.false; -``` - -## License - -(The MIT License) - -Copyright (c) 2012 LearnBoost <tj@learnboost.com> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/cookie-signature/index.js b/truebit-implementation/node_modules/cookie-signature/index.js deleted file mode 100644 index b8c9463a..00000000 --- a/truebit-implementation/node_modules/cookie-signature/index.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Module dependencies. - */ - -var crypto = require('crypto'); - -/** - * Sign the given `val` with `secret`. - * - * @param {String} val - * @param {String} secret - * @return {String} - * @api private - */ - -exports.sign = function(val, secret){ - if ('string' != typeof val) throw new TypeError("Cookie value must be provided as a string."); - if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); - return val + '.' + crypto - .createHmac('sha256', secret) - .update(val) - .digest('base64') - .replace(/\=+$/, ''); -}; - -/** - * Unsign and decode the given `val` with `secret`, - * returning `false` if the signature is invalid. - * - * @param {String} val - * @param {String} secret - * @return {String|Boolean} - * @api private - */ - -exports.unsign = function(val, secret){ - if ('string' != typeof val) throw new TypeError("Signed cookie string must be provided."); - if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); - var str = val.slice(0, val.lastIndexOf('.')) - , mac = exports.sign(str, secret); - - return sha1(mac) == sha1(val) ? str : false; -}; - -/** - * Private - */ - -function sha1(str){ - return crypto.createHash('sha1').update(str).digest('hex'); -} diff --git a/truebit-implementation/node_modules/cookie-signature/package.json b/truebit-implementation/node_modules/cookie-signature/package.json deleted file mode 100644 index 083b4717..00000000 --- a/truebit-implementation/node_modules/cookie-signature/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "_from": "cookie-signature@1.0.6", - "_id": "cookie-signature@1.0.6", - "_inBundle": false, - "_integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "_location": "/cookie-signature", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "cookie-signature@1.0.6", - "name": "cookie-signature", - "escapedName": "cookie-signature", - "rawSpec": "1.0.6", - "saveSpec": null, - "fetchSpec": "1.0.6" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "_shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c", - "_spec": "cookie-signature@1.0.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@learnboost.com" - }, - "bugs": { - "url": "https://github.com/visionmedia/node-cookie-signature/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Sign and unsign cookies", - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "homepage": "https://github.com/visionmedia/node-cookie-signature#readme", - "keywords": [ - "cookie", - "sign", - "unsign" - ], - "license": "MIT", - "main": "index", - "name": "cookie-signature", - "repository": { - "type": "git", - "url": "git+https://github.com/visionmedia/node-cookie-signature.git" - }, - "scripts": { - "test": "mocha --require should --reporter spec" - }, - "version": "1.0.6" -} diff --git a/truebit-implementation/node_modules/cookie/HISTORY.md b/truebit-implementation/node_modules/cookie/HISTORY.md deleted file mode 100644 index 5bd64854..00000000 --- a/truebit-implementation/node_modules/cookie/HISTORY.md +++ /dev/null @@ -1,118 +0,0 @@ -0.3.1 / 2016-05-26 -================== - - * Fix `sameSite: true` to work with draft-7 clients - - `true` now sends `SameSite=Strict` instead of `SameSite` - -0.3.0 / 2016-05-26 -================== - - * Add `sameSite` option - - Replaces `firstPartyOnly` option, never implemented by browsers - * Improve error message when `encode` is not a function - * Improve error message when `expires` is not a `Date` - -0.2.4 / 2016-05-20 -================== - - * perf: enable strict mode - * perf: use for loop in parse - * perf: use string concatination for serialization - -0.2.3 / 2015-10-25 -================== - - * Fix cookie `Max-Age` to never be a floating point number - -0.2.2 / 2015-09-17 -================== - - * Fix regression when setting empty cookie value - - Ease the new restriction, which is just basic header-level validation - * Fix typo in invalid value errors - -0.2.1 / 2015-09-17 -================== - - * Throw on invalid values provided to `serialize` - - Ensures the resulting string is a valid HTTP header value - -0.2.0 / 2015-08-13 -================== - - * Add `firstPartyOnly` option - * Throw better error for invalid argument to parse - * perf: hoist regular expression - -0.1.5 / 2015-09-17 -================== - - * Fix regression when setting empty cookie value - - Ease the new restriction, which is just basic header-level validation - * Fix typo in invalid value errors - -0.1.4 / 2015-09-17 -================== - - * Throw better error for invalid argument to parse - * Throw on invalid values provided to `serialize` - - Ensures the resulting string is a valid HTTP header value - -0.1.3 / 2015-05-19 -================== - - * Reduce the scope of try-catch deopt - * Remove argument reassignments - -0.1.2 / 2014-04-16 -================== - - * Remove unnecessary files from npm package - -0.1.1 / 2014-02-23 -================== - - * Fix bad parse when cookie value contained a comma - * Fix support for `maxAge` of `0` - -0.1.0 / 2013-05-01 -================== - - * Add `decode` option - * Add `encode` option - -0.0.6 / 2013-04-08 -================== - - * Ignore cookie parts missing `=` - -0.0.5 / 2012-10-29 -================== - - * Return raw cookie value if value unescape errors - -0.0.4 / 2012-06-21 -================== - - * Use encode/decodeURIComponent for cookie encoding/decoding - - Improve server/client interoperability - -0.0.3 / 2012-06-06 -================== - - * Only escape special characters per the cookie RFC - -0.0.2 / 2012-06-01 -================== - - * Fix `maxAge` option to not throw error - -0.0.1 / 2012-05-28 -================== - - * Add more tests - -0.0.0 / 2012-05-28 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/cookie/LICENSE b/truebit-implementation/node_modules/cookie/LICENSE deleted file mode 100644 index 058b6b4e..00000000 --- a/truebit-implementation/node_modules/cookie/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2014 Roman Shtylman -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/cookie/README.md b/truebit-implementation/node_modules/cookie/README.md deleted file mode 100644 index db0d0782..00000000 --- a/truebit-implementation/node_modules/cookie/README.md +++ /dev/null @@ -1,220 +0,0 @@ -# cookie - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Basic HTTP cookie parser and serializer for HTTP servers. - -## Installation - -```sh -$ npm install cookie -``` - -## API - -```js -var cookie = require('cookie'); -``` - -### cookie.parse(str, options) - -Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs. -The `str` argument is the string representing a `Cookie` header value and `options` is an -optional object containing additional parsing options. - -```js -var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2'); -// { foo: 'bar', equation: 'E=mc^2' } -``` - -#### Options - -`cookie.parse` accepts these properties in the options object. - -##### decode - -Specifies a function that will be used to decode a cookie's value. Since the value of a cookie -has a limited character set (and must be a simple string), this function can be used to decode -a previously-encoded cookie value into a JavaScript string or other object. - -The default function is the global `decodeURIComponent`, which will decode any URL-encoded -sequences into their byte representations. - -**note** if an error is thrown from this function, the original, non-decoded cookie value will -be returned as the cookie's value. - -### cookie.serialize(name, value, options) - -Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the -name for the cookie, the `value` argument is the value to set the cookie to, and the `options` -argument is an optional object containing additional serialization options. - -```js -var setCookie = cookie.serialize('foo', 'bar'); -// foo=bar -``` - -#### Options - -`cookie.serialize` accepts these properties in the options object. - -##### domain - -Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6266-5.2.3]. By default, no -domain is set, and most clients will consider the cookie to apply to only the current domain. - -##### encode - -Specifies a function that will be used to encode a cookie's value. Since value of a cookie -has a limited character set (and must be a simple string), this function can be used to encode -a value into a string suited for a cookie's value. - -The default function is the global `ecodeURIComponent`, which will encode a JavaScript string -into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range. - -##### expires - -Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6266-5.2.1]. -By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and -will delete it on a condition like exiting a web browser application. - -**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and -`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this, -so if both are set, they should point to the same date and time. - -##### httpOnly - -Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6266-5.2.6]. When truthy, -the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set. - -**note** be careful when setting this to `true`, as compliant clients will not allow client-side -JavaScript to see the cookie in `document.cookie`. - -##### maxAge - -Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6266-5.2.2]. -The given number will be converted to an integer by rounding down. By default, no maximum age is set. - -**note** the [cookie storage model specification][rfc-6266-5.3] states that if both `expires` and -`magAge` are set, then `maxAge` takes precedence, but it is possiblke not all clients by obey this, -so if both are set, they should point to the same date and time. - -##### path - -Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6266-5.2.4]. By default, the path -is considered the ["default path"][rfc-6266-5.1.4]. By default, no maximum age is set, and most -clients will consider this a "non-persistent cookie" and will delete it on a condition like exiting -a web browser application. - -##### sameSite - -Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][draft-west-first-party-cookies-07]. - - - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement. - - `false` will not set the `SameSite` attribute. - - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement. - - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement. - -More information about the different enforcement levels can be found in the specification -https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-4.1.1 - -**note** This is an attribute that has not yet been fully standardized, and may change in the future. -This also means many clients may ignore this attribute until they understand it. - -##### secure - -Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6266-5.2.5]. When truthy, -the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set. - -**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to -the server in the future if the browser does not have an HTTPS connection. - -## Example - -The following example uses this module in conjunction with the Node.js core HTTP server -to prompt a user for their name and display it back on future visits. - -```js -var cookie = require('cookie'); -var escapeHtml = require('escape-html'); -var http = require('http'); -var url = require('url'); - -function onRequest(req, res) { - // Parse the query string - var query = url.parse(req.url, true, true).query; - - if (query && query.name) { - // Set a new cookie with the name - res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), { - httpOnly: true, - maxAge: 60 * 60 * 24 * 7 // 1 week - })); - - // Redirect back after setting cookie - res.statusCode = 302; - res.setHeader('Location', req.headers.referer || '/'); - res.end(); - return; - } - - // Parse the cookies on the request - var cookies = cookie.parse(req.headers.cookie || ''); - - // Get the visitor name set in the cookie - var name = cookies.name; - - res.setHeader('Content-Type', 'text/html; charset=UTF-8'); - - if (name) { - res.write('

Welcome back, ' + escapeHtml(name) + '!

'); - } else { - res.write('

Hello, new visitor!

'); - } - - res.write('
'); - res.write(' '); - res.end(' values - * - * @param {string} str - * @param {object} [options] - * @return {object} - * @public - */ - -function parse(str, options) { - if (typeof str !== 'string') { - throw new TypeError('argument str must be a string'); - } - - var obj = {} - var opt = options || {}; - var pairs = str.split(pairSplitRegExp); - var dec = opt.decode || decode; - - for (var i = 0; i < pairs.length; i++) { - var pair = pairs[i]; - var eq_idx = pair.indexOf('='); - - // skip things that don't look like key=value - if (eq_idx < 0) { - continue; - } - - var key = pair.substr(0, eq_idx).trim() - var val = pair.substr(++eq_idx, pair.length).trim(); - - // quoted values - if ('"' == val[0]) { - val = val.slice(1, -1); - } - - // only assign once - if (undefined == obj[key]) { - obj[key] = tryDecode(val, dec); - } - } - - return obj; -} - -/** - * Serialize data into a cookie header. - * - * Serialize the a name value pair into a cookie string suitable for - * http headers. An optional options object specified cookie parameters. - * - * serialize('foo', 'bar', { httpOnly: true }) - * => "foo=bar; httpOnly" - * - * @param {string} name - * @param {string} val - * @param {object} [options] - * @return {string} - * @public - */ - -function serialize(name, val, options) { - var opt = options || {}; - var enc = opt.encode || encode; - - if (typeof enc !== 'function') { - throw new TypeError('option encode is invalid'); - } - - if (!fieldContentRegExp.test(name)) { - throw new TypeError('argument name is invalid'); - } - - var value = enc(val); - - if (value && !fieldContentRegExp.test(value)) { - throw new TypeError('argument val is invalid'); - } - - var str = name + '=' + value; - - if (null != opt.maxAge) { - var maxAge = opt.maxAge - 0; - if (isNaN(maxAge)) throw new Error('maxAge should be a Number'); - str += '; Max-Age=' + Math.floor(maxAge); - } - - if (opt.domain) { - if (!fieldContentRegExp.test(opt.domain)) { - throw new TypeError('option domain is invalid'); - } - - str += '; Domain=' + opt.domain; - } - - if (opt.path) { - if (!fieldContentRegExp.test(opt.path)) { - throw new TypeError('option path is invalid'); - } - - str += '; Path=' + opt.path; - } - - if (opt.expires) { - if (typeof opt.expires.toUTCString !== 'function') { - throw new TypeError('option expires is invalid'); - } - - str += '; Expires=' + opt.expires.toUTCString(); - } - - if (opt.httpOnly) { - str += '; HttpOnly'; - } - - if (opt.secure) { - str += '; Secure'; - } - - if (opt.sameSite) { - var sameSite = typeof opt.sameSite === 'string' - ? opt.sameSite.toLowerCase() : opt.sameSite; - - switch (sameSite) { - case true: - str += '; SameSite=Strict'; - break; - case 'lax': - str += '; SameSite=Lax'; - break; - case 'strict': - str += '; SameSite=Strict'; - break; - default: - throw new TypeError('option sameSite is invalid'); - } - } - - return str; -} - -/** - * Try decoding a string using a decoding function. - * - * @param {string} str - * @param {function} decode - * @private - */ - -function tryDecode(str, decode) { - try { - return decode(str); - } catch (e) { - return str; - } -} diff --git a/truebit-implementation/node_modules/cookie/package.json b/truebit-implementation/node_modules/cookie/package.json deleted file mode 100644 index d185f574..00000000 --- a/truebit-implementation/node_modules/cookie/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "cookie@0.3.1", - "_id": "cookie@0.3.1", - "_inBundle": false, - "_integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "_location": "/cookie", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "cookie@0.3.1", - "name": "cookie", - "escapedName": "cookie", - "rawSpec": "0.3.1", - "saveSpec": null, - "fetchSpec": "0.3.1" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "_shasum": "e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb", - "_spec": "cookie@0.3.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "Roman Shtylman", - "email": "shtylman@gmail.com" - }, - "bugs": { - "url": "https://github.com/jshttp/cookie/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], - "deprecated": false, - "description": "HTTP server cookie parsing and serialization", - "devDependencies": { - "istanbul": "0.4.3", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/cookie#readme", - "keywords": [ - "cookie", - "cookies" - ], - "license": "MIT", - "name": "cookie", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/cookie.git" - }, - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" - }, - "version": "0.3.1" -} diff --git a/truebit-implementation/node_modules/cookiejar/LICENSE b/truebit-implementation/node_modules/cookiejar/LICENSE deleted file mode 100644 index 58a23ece..00000000 --- a/truebit-implementation/node_modules/cookiejar/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -The MIT License (MIT) -Copyright (c) 2013 Bradley Meck - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/cookiejar/cookiejar.js b/truebit-implementation/node_modules/cookiejar/cookiejar.js deleted file mode 100644 index d5969e44..00000000 --- a/truebit-implementation/node_modules/cookiejar/cookiejar.js +++ /dev/null @@ -1,276 +0,0 @@ -/* jshint node: true */ -(function () { - "use strict"; - - function CookieAccessInfo(domain, path, secure, script) { - if (this instanceof CookieAccessInfo) { - this.domain = domain || undefined; - this.path = path || "/"; - this.secure = !!secure; - this.script = !!script; - return this; - } - return new CookieAccessInfo(domain, path, secure, script); - } - CookieAccessInfo.All = Object.freeze(Object.create(null)); - exports.CookieAccessInfo = CookieAccessInfo; - - function Cookie(cookiestr, request_domain, request_path) { - if (cookiestr instanceof Cookie) { - return cookiestr; - } - if (this instanceof Cookie) { - this.name = null; - this.value = null; - this.expiration_date = Infinity; - this.path = String(request_path || "/"); - this.explicit_path = false; - this.domain = request_domain || null; - this.explicit_domain = false; - this.secure = false; //how to define default? - this.noscript = false; //httponly - if (cookiestr) { - this.parse(cookiestr, request_domain, request_path); - } - return this; - } - return new Cookie(cookiestr, request_domain, request_path); - } - exports.Cookie = Cookie; - - Cookie.prototype.toString = function toString() { - var str = [this.name + "=" + this.value]; - if (this.expiration_date !== Infinity) { - str.push("expires=" + (new Date(this.expiration_date)).toGMTString()); - } - if (this.domain) { - str.push("domain=" + this.domain); - } - if (this.path) { - str.push("path=" + this.path); - } - if (this.secure) { - str.push("secure"); - } - if (this.noscript) { - str.push("httponly"); - } - return str.join("; "); - }; - - Cookie.prototype.toValueString = function toValueString() { - return this.name + "=" + this.value; - }; - - var cookie_str_splitter = /[:](?=\s*[a-zA-Z0-9_\-]+\s*[=])/g; - Cookie.prototype.parse = function parse(str, request_domain, request_path) { - if (this instanceof Cookie) { - var parts = str.split(";").filter(function (value) { - return !!value; - }); - var i; - - var pair = parts[0].match(/([^=]+)=([\s\S]*)/); - if (!pair) { - console.warn("Invalid cookie header encountered. Header: '"+str+"'"); - return; - } - - var key = pair[1]; - var value = pair[2]; - if ( typeof key !== 'string' || key.length === 0 || typeof value !== 'string' ) { - console.warn("Unable to extract values from cookie header. Cookie: '"+str+"'"); - return; - } - - this.name = key; - this.value = value; - - for (i = 1; i < parts.length; i += 1) { - pair = parts[i].match(/([^=]+)(?:=([\s\S]*))?/); - key = pair[1].trim().toLowerCase(); - value = pair[2]; - switch (key) { - case "httponly": - this.noscript = true; - break; - case "expires": - this.expiration_date = value ? - Number(Date.parse(value)) : - Infinity; - break; - case "path": - this.path = value ? - value.trim() : - ""; - this.explicit_path = true; - break; - case "domain": - this.domain = value ? - value.trim() : - ""; - this.explicit_domain = !!this.domain; - break; - case "secure": - this.secure = true; - break; - } - } - - if (!this.explicit_path) { - this.path = request_path || "/"; - } - if (!this.explicit_domain) { - this.domain = request_domain; - } - - return this; - } - return new Cookie().parse(str, request_domain, request_path); - }; - - Cookie.prototype.matches = function matches(access_info) { - if (access_info === CookieAccessInfo.All) { - return true; - } - if (this.noscript && access_info.script || - this.secure && !access_info.secure || - !this.collidesWith(access_info)) { - return false; - } - return true; - }; - - Cookie.prototype.collidesWith = function collidesWith(access_info) { - if ((this.path && !access_info.path) || (this.domain && !access_info.domain)) { - return false; - } - if (this.path && access_info.path.indexOf(this.path) !== 0) { - return false; - } - if (this.explicit_path && access_info.path.indexOf( this.path ) !== 0) { - return false; - } - var access_domain = access_info.domain && access_info.domain.replace(/^[\.]/,''); - var cookie_domain = this.domain && this.domain.replace(/^[\.]/,''); - if (cookie_domain === access_domain) { - return true; - } - if (cookie_domain) { - if (!this.explicit_domain) { - return false; // we already checked if the domains were exactly the same - } - var wildcard = access_domain.indexOf(cookie_domain); - if (wildcard === -1 || wildcard !== access_domain.length - cookie_domain.length) { - return false; - } - return true; - } - return true; - }; - - function CookieJar() { - var cookies, cookies_list, collidable_cookie; - if (this instanceof CookieJar) { - cookies = Object.create(null); //name: [Cookie] - - this.setCookie = function setCookie(cookie, request_domain, request_path) { - var remove, i; - cookie = new Cookie(cookie, request_domain, request_path); - //Delete the cookie if the set is past the current time - remove = cookie.expiration_date <= Date.now(); - if (cookies[cookie.name] !== undefined) { - cookies_list = cookies[cookie.name]; - for (i = 0; i < cookies_list.length; i += 1) { - collidable_cookie = cookies_list[i]; - if (collidable_cookie.collidesWith(cookie)) { - if (remove) { - cookies_list.splice(i, 1); - if (cookies_list.length === 0) { - delete cookies[cookie.name]; - } - return false; - } - cookies_list[i] = cookie; - return cookie; - } - } - if (remove) { - return false; - } - cookies_list.push(cookie); - return cookie; - } - if (remove) { - return false; - } - cookies[cookie.name] = [cookie]; - return cookies[cookie.name]; - }; - //returns a cookie - this.getCookie = function getCookie(cookie_name, access_info) { - var cookie, i; - cookies_list = cookies[cookie_name]; - if (!cookies_list) { - return; - } - for (i = 0; i < cookies_list.length; i += 1) { - cookie = cookies_list[i]; - if (cookie.expiration_date <= Date.now()) { - if (cookies_list.length === 0) { - delete cookies[cookie.name]; - } - continue; - } - - if (cookie.matches(access_info)) { - return cookie; - } - } - }; - //returns a list of cookies - this.getCookies = function getCookies(access_info) { - var matches = [], cookie_name, cookie; - for (cookie_name in cookies) { - cookie = this.getCookie(cookie_name, access_info); - if (cookie) { - matches.push(cookie); - } - } - matches.toString = function toString() { - return matches.join(":"); - }; - matches.toValueString = function toValueString() { - return matches.map(function (c) { - return c.toValueString(); - }).join(';'); - }; - return matches; - }; - - return this; - } - return new CookieJar(); - } - exports.CookieJar = CookieJar; - - //returns list of cookies that were set correctly. Cookies that are expired and removed are not returned. - CookieJar.prototype.setCookies = function setCookies(cookies, request_domain, request_path) { - cookies = Array.isArray(cookies) ? - cookies : - cookies.split(cookie_str_splitter); - var successful = [], - i, - cookie; - cookies = cookies.map(function(item){ - return new Cookie(item, request_domain, request_path); - }); - for (i = 0; i < cookies.length; i += 1) { - cookie = cookies[i]; - if (this.setCookie(cookie, request_domain, request_path)) { - successful.push(cookie); - } - } - return successful; - }; -}()); diff --git a/truebit-implementation/node_modules/cookiejar/package.json b/truebit-implementation/node_modules/cookiejar/package.json deleted file mode 100644 index 2bf1de94..00000000 --- a/truebit-implementation/node_modules/cookiejar/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "_from": "cookiejar@^2.1.1", - "_id": "cookiejar@2.1.2", - "_inBundle": false, - "_integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "_location": "/cookiejar", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "cookiejar@^2.1.1", - "name": "cookiejar", - "escapedName": "cookiejar", - "rawSpec": "^2.1.1", - "saveSpec": null, - "fetchSpec": "^2.1.1" - }, - "_requiredBy": [ - "/xhr2-cookies" - ], - "_resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "_shasum": "dd8a235530752f988f9a0844f3fc589e3111125c", - "_spec": "cookiejar@^2.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/xhr2-cookies", - "author": { - "name": "bradleymeck" - }, - "bugs": { - "url": "https://github.com/bmeck/node-cookiejar/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "simple persistent cookiejar system", - "devDependencies": { - "jshint": "^2.9.4" - }, - "files": [ - "cookiejar.js" - ], - "homepage": "https://github.com/bmeck/node-cookiejar#readme", - "jshintConfig": { - "node": true - }, - "license": "MIT", - "main": "cookiejar.js", - "name": "cookiejar", - "repository": { - "type": "git", - "url": "git+https://github.com/bmeck/node-cookiejar.git" - }, - "scripts": { - "test": "node tests/test.js" - }, - "version": "2.1.2" -} diff --git a/truebit-implementation/node_modules/cookiejar/readme.md b/truebit-implementation/node_modules/cookiejar/readme.md deleted file mode 100644 index 71a9f233..00000000 --- a/truebit-implementation/node_modules/cookiejar/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# CookieJar - -[![NPM version](http://img.shields.io/npm/v/cookiejar.svg)](https://www.npmjs.org/package/cookiejar) -[![devDependency Status](https://david-dm.org/bmeck/node-cookiejar/dev-status.svg)](https://david-dm.org/bmeck/node-cookiejar?type=dev) - -Simple robust cookie library - -## Exports - -### CookieAccessInfo(domain,path,secure,script) - -class to determine matching qualities of a cookie - -##### Properties - -* String domain - domain to match -* String path - path to match -* Boolean secure - access is secure (ssl generally) -* Boolean script - access is from a script - - -### Cookie(cookiestr_or_cookie, request_domain, request_path) - -It turns input into a Cookie (singleton if given a Cookie), -the `request_domain` argument is used to default the domain if it is not explicit in the cookie string, -the `request_path` argument is used to set the path if it is not explicit in a cookie String. - -Explicit domains/paths will cascade, implied domains/paths must *exactly* match (see http://en.wikipedia.org/wiki/HTTP_cookie#Domain_and_Pat). - -##### Properties - -* String name - name of the cookie -* String value - string associated with the cookie -* String domain - domain to match (on a cookie a '.' at the start means a wildcard matching anything ending in the rest) -* Boolean explicit_domain - if the domain was explicitly set via the cookie string -* String path - base path to match (matches any path starting with this '/' is root) -* Boolean explicit_path - if the path was explicitly set via the cookie string -* Boolean noscript - if it should be kept from scripts -* Boolean secure - should it only be transmitted over secure means -* Number expiration_date - number of millis since 1970 at which this should be removed - -##### Methods - -* `String toString()` - the __set-cookie:__ string for this cookie -* `String toValueString()` - the __cookie:__ string for this cookie -* `Cookie parse(cookiestr, request_domain, request_path)` - parses the string onto this cookie or a new one if called directly -* `Boolean matches(access_info)` - returns true if the access_info allows retrieval of this cookie -* `Boolean collidesWith(cookie)` - returns true if the cookies cannot exist in the same space (domain and path match) - - -### CookieJar() - -class to hold numerous cookies from multiple domains correctly - -##### Methods - -* `Cookie setCookie(cookie, request_domain, request_path)` - modify (or add if not already-existing) a cookie to the jar -* `Cookie[] setCookies(cookiestr_or_list, request_domain, request_path)` - modify (or add if not already-existing) a large number of cookies to the jar -* `Cookie getCookie(cookie_name,access_info)` - get a cookie with the name and access_info matching -* `Cookie[] getCookies(access_info)` - grab all cookies matching this access_info diff --git a/truebit-implementation/node_modules/core-util-is/LICENSE b/truebit-implementation/node_modules/core-util-is/LICENSE deleted file mode 100644 index d8d7f943..00000000 --- a/truebit-implementation/node_modules/core-util-is/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/core-util-is/README.md b/truebit-implementation/node_modules/core-util-is/README.md deleted file mode 100644 index 5a76b414..00000000 --- a/truebit-implementation/node_modules/core-util-is/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# core-util-is - -The `util.is*` functions introduced in Node v0.12. diff --git a/truebit-implementation/node_modules/core-util-is/float.patch b/truebit-implementation/node_modules/core-util-is/float.patch deleted file mode 100644 index a06d5c05..00000000 --- a/truebit-implementation/node_modules/core-util-is/float.patch +++ /dev/null @@ -1,604 +0,0 @@ -diff --git a/lib/util.js b/lib/util.js -index a03e874..9074e8e 100644 ---- a/lib/util.js -+++ b/lib/util.js -@@ -19,430 +19,6 @@ - // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - // USE OR OTHER DEALINGS IN THE SOFTWARE. - --var formatRegExp = /%[sdj%]/g; --exports.format = function(f) { -- if (!isString(f)) { -- var objects = []; -- for (var i = 0; i < arguments.length; i++) { -- objects.push(inspect(arguments[i])); -- } -- return objects.join(' '); -- } -- -- var i = 1; -- var args = arguments; -- var len = args.length; -- var str = String(f).replace(formatRegExp, function(x) { -- if (x === '%%') return '%'; -- if (i >= len) return x; -- switch (x) { -- case '%s': return String(args[i++]); -- case '%d': return Number(args[i++]); -- case '%j': -- try { -- return JSON.stringify(args[i++]); -- } catch (_) { -- return '[Circular]'; -- } -- default: -- return x; -- } -- }); -- for (var x = args[i]; i < len; x = args[++i]) { -- if (isNull(x) || !isObject(x)) { -- str += ' ' + x; -- } else { -- str += ' ' + inspect(x); -- } -- } -- return str; --}; -- -- --// Mark that a method should not be used. --// Returns a modified function which warns once by default. --// If --no-deprecation is set, then it is a no-op. --exports.deprecate = function(fn, msg) { -- // Allow for deprecating things in the process of starting up. -- if (isUndefined(global.process)) { -- return function() { -- return exports.deprecate(fn, msg).apply(this, arguments); -- }; -- } -- -- if (process.noDeprecation === true) { -- return fn; -- } -- -- var warned = false; -- function deprecated() { -- if (!warned) { -- if (process.throwDeprecation) { -- throw new Error(msg); -- } else if (process.traceDeprecation) { -- console.trace(msg); -- } else { -- console.error(msg); -- } -- warned = true; -- } -- return fn.apply(this, arguments); -- } -- -- return deprecated; --}; -- -- --var debugs = {}; --var debugEnviron; --exports.debuglog = function(set) { -- if (isUndefined(debugEnviron)) -- debugEnviron = process.env.NODE_DEBUG || ''; -- set = set.toUpperCase(); -- if (!debugs[set]) { -- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { -- var pid = process.pid; -- debugs[set] = function() { -- var msg = exports.format.apply(exports, arguments); -- console.error('%s %d: %s', set, pid, msg); -- }; -- } else { -- debugs[set] = function() {}; -- } -- } -- return debugs[set]; --}; -- -- --/** -- * Echos the value of a value. Trys to print the value out -- * in the best way possible given the different types. -- * -- * @param {Object} obj The object to print out. -- * @param {Object} opts Optional options object that alters the output. -- */ --/* legacy: obj, showHidden, depth, colors*/ --function inspect(obj, opts) { -- // default options -- var ctx = { -- seen: [], -- stylize: stylizeNoColor -- }; -- // legacy... -- if (arguments.length >= 3) ctx.depth = arguments[2]; -- if (arguments.length >= 4) ctx.colors = arguments[3]; -- if (isBoolean(opts)) { -- // legacy... -- ctx.showHidden = opts; -- } else if (opts) { -- // got an "options" object -- exports._extend(ctx, opts); -- } -- // set default options -- if (isUndefined(ctx.showHidden)) ctx.showHidden = false; -- if (isUndefined(ctx.depth)) ctx.depth = 2; -- if (isUndefined(ctx.colors)) ctx.colors = false; -- if (isUndefined(ctx.customInspect)) ctx.customInspect = true; -- if (ctx.colors) ctx.stylize = stylizeWithColor; -- return formatValue(ctx, obj, ctx.depth); --} --exports.inspect = inspect; -- -- --// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics --inspect.colors = { -- 'bold' : [1, 22], -- 'italic' : [3, 23], -- 'underline' : [4, 24], -- 'inverse' : [7, 27], -- 'white' : [37, 39], -- 'grey' : [90, 39], -- 'black' : [30, 39], -- 'blue' : [34, 39], -- 'cyan' : [36, 39], -- 'green' : [32, 39], -- 'magenta' : [35, 39], -- 'red' : [31, 39], -- 'yellow' : [33, 39] --}; -- --// Don't use 'blue' not visible on cmd.exe --inspect.styles = { -- 'special': 'cyan', -- 'number': 'yellow', -- 'boolean': 'yellow', -- 'undefined': 'grey', -- 'null': 'bold', -- 'string': 'green', -- 'date': 'magenta', -- // "name": intentionally not styling -- 'regexp': 'red' --}; -- -- --function stylizeWithColor(str, styleType) { -- var style = inspect.styles[styleType]; -- -- if (style) { -- return '\u001b[' + inspect.colors[style][0] + 'm' + str + -- '\u001b[' + inspect.colors[style][1] + 'm'; -- } else { -- return str; -- } --} -- -- --function stylizeNoColor(str, styleType) { -- return str; --} -- -- --function arrayToHash(array) { -- var hash = {}; -- -- array.forEach(function(val, idx) { -- hash[val] = true; -- }); -- -- return hash; --} -- -- --function formatValue(ctx, value, recurseTimes) { -- // Provide a hook for user-specified inspect functions. -- // Check that value is an object with an inspect function on it -- if (ctx.customInspect && -- value && -- isFunction(value.inspect) && -- // Filter out the util module, it's inspect function is special -- value.inspect !== exports.inspect && -- // Also filter out any prototype objects using the circular check. -- !(value.constructor && value.constructor.prototype === value)) { -- var ret = value.inspect(recurseTimes, ctx); -- if (!isString(ret)) { -- ret = formatValue(ctx, ret, recurseTimes); -- } -- return ret; -- } -- -- // Primitive types cannot have properties -- var primitive = formatPrimitive(ctx, value); -- if (primitive) { -- return primitive; -- } -- -- // Look up the keys of the object. -- var keys = Object.keys(value); -- var visibleKeys = arrayToHash(keys); -- -- if (ctx.showHidden) { -- keys = Object.getOwnPropertyNames(value); -- } -- -- // Some type of object without properties can be shortcutted. -- if (keys.length === 0) { -- if (isFunction(value)) { -- var name = value.name ? ': ' + value.name : ''; -- return ctx.stylize('[Function' + name + ']', 'special'); -- } -- if (isRegExp(value)) { -- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); -- } -- if (isDate(value)) { -- return ctx.stylize(Date.prototype.toString.call(value), 'date'); -- } -- if (isError(value)) { -- return formatError(value); -- } -- } -- -- var base = '', array = false, braces = ['{', '}']; -- -- // Make Array say that they are Array -- if (isArray(value)) { -- array = true; -- braces = ['[', ']']; -- } -- -- // Make functions say that they are functions -- if (isFunction(value)) { -- var n = value.name ? ': ' + value.name : ''; -- base = ' [Function' + n + ']'; -- } -- -- // Make RegExps say that they are RegExps -- if (isRegExp(value)) { -- base = ' ' + RegExp.prototype.toString.call(value); -- } -- -- // Make dates with properties first say the date -- if (isDate(value)) { -- base = ' ' + Date.prototype.toUTCString.call(value); -- } -- -- // Make error with message first say the error -- if (isError(value)) { -- base = ' ' + formatError(value); -- } -- -- if (keys.length === 0 && (!array || value.length == 0)) { -- return braces[0] + base + braces[1]; -- } -- -- if (recurseTimes < 0) { -- if (isRegExp(value)) { -- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); -- } else { -- return ctx.stylize('[Object]', 'special'); -- } -- } -- -- ctx.seen.push(value); -- -- var output; -- if (array) { -- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); -- } else { -- output = keys.map(function(key) { -- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); -- }); -- } -- -- ctx.seen.pop(); -- -- return reduceToSingleString(output, base, braces); --} -- -- --function formatPrimitive(ctx, value) { -- if (isUndefined(value)) -- return ctx.stylize('undefined', 'undefined'); -- if (isString(value)) { -- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') -- .replace(/'/g, "\\'") -- .replace(/\\"/g, '"') + '\''; -- return ctx.stylize(simple, 'string'); -- } -- if (isNumber(value)) { -- // Format -0 as '-0'. Strict equality won't distinguish 0 from -0, -- // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 . -- if (value === 0 && 1 / value < 0) -- return ctx.stylize('-0', 'number'); -- return ctx.stylize('' + value, 'number'); -- } -- if (isBoolean(value)) -- return ctx.stylize('' + value, 'boolean'); -- // For some reason typeof null is "object", so special case here. -- if (isNull(value)) -- return ctx.stylize('null', 'null'); --} -- -- --function formatError(value) { -- return '[' + Error.prototype.toString.call(value) + ']'; --} -- -- --function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { -- var output = []; -- for (var i = 0, l = value.length; i < l; ++i) { -- if (hasOwnProperty(value, String(i))) { -- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, -- String(i), true)); -- } else { -- output.push(''); -- } -- } -- keys.forEach(function(key) { -- if (!key.match(/^\d+$/)) { -- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, -- key, true)); -- } -- }); -- return output; --} -- -- --function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { -- var name, str, desc; -- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; -- if (desc.get) { -- if (desc.set) { -- str = ctx.stylize('[Getter/Setter]', 'special'); -- } else { -- str = ctx.stylize('[Getter]', 'special'); -- } -- } else { -- if (desc.set) { -- str = ctx.stylize('[Setter]', 'special'); -- } -- } -- if (!hasOwnProperty(visibleKeys, key)) { -- name = '[' + key + ']'; -- } -- if (!str) { -- if (ctx.seen.indexOf(desc.value) < 0) { -- if (isNull(recurseTimes)) { -- str = formatValue(ctx, desc.value, null); -- } else { -- str = formatValue(ctx, desc.value, recurseTimes - 1); -- } -- if (str.indexOf('\n') > -1) { -- if (array) { -- str = str.split('\n').map(function(line) { -- return ' ' + line; -- }).join('\n').substr(2); -- } else { -- str = '\n' + str.split('\n').map(function(line) { -- return ' ' + line; -- }).join('\n'); -- } -- } -- } else { -- str = ctx.stylize('[Circular]', 'special'); -- } -- } -- if (isUndefined(name)) { -- if (array && key.match(/^\d+$/)) { -- return str; -- } -- name = JSON.stringify('' + key); -- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { -- name = name.substr(1, name.length - 2); -- name = ctx.stylize(name, 'name'); -- } else { -- name = name.replace(/'/g, "\\'") -- .replace(/\\"/g, '"') -- .replace(/(^"|"$)/g, "'"); -- name = ctx.stylize(name, 'string'); -- } -- } -- -- return name + ': ' + str; --} -- -- --function reduceToSingleString(output, base, braces) { -- var numLinesEst = 0; -- var length = output.reduce(function(prev, cur) { -- numLinesEst++; -- if (cur.indexOf('\n') >= 0) numLinesEst++; -- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; -- }, 0); -- -- if (length > 60) { -- return braces[0] + -- (base === '' ? '' : base + '\n ') + -- ' ' + -- output.join(',\n ') + -- ' ' + -- braces[1]; -- } -- -- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; --} -- -- - // NOTE: These type checking functions intentionally don't use `instanceof` - // because it is fragile and can be easily faked with `Object.create()`. - function isArray(ar) { -@@ -522,166 +98,10 @@ function isPrimitive(arg) { - exports.isPrimitive = isPrimitive; - - function isBuffer(arg) { -- return arg instanceof Buffer; -+ return Buffer.isBuffer(arg); - } - exports.isBuffer = isBuffer; - - function objectToString(o) { - return Object.prototype.toString.call(o); --} -- -- --function pad(n) { -- return n < 10 ? '0' + n.toString(10) : n.toString(10); --} -- -- --var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', -- 'Oct', 'Nov', 'Dec']; -- --// 26 Feb 16:19:34 --function timestamp() { -- var d = new Date(); -- var time = [pad(d.getHours()), -- pad(d.getMinutes()), -- pad(d.getSeconds())].join(':'); -- return [d.getDate(), months[d.getMonth()], time].join(' '); --} -- -- --// log is just a thin wrapper to console.log that prepends a timestamp --exports.log = function() { -- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); --}; -- -- --/** -- * Inherit the prototype methods from one constructor into another. -- * -- * The Function.prototype.inherits from lang.js rewritten as a standalone -- * function (not on Function.prototype). NOTE: If this file is to be loaded -- * during bootstrapping this function needs to be rewritten using some native -- * functions as prototype setup using normal JavaScript does not work as -- * expected during bootstrapping (see mirror.js in r114903). -- * -- * @param {function} ctor Constructor function which needs to inherit the -- * prototype. -- * @param {function} superCtor Constructor function to inherit prototype from. -- */ --exports.inherits = function(ctor, superCtor) { -- ctor.super_ = superCtor; -- ctor.prototype = Object.create(superCtor.prototype, { -- constructor: { -- value: ctor, -- enumerable: false, -- writable: true, -- configurable: true -- } -- }); --}; -- --exports._extend = function(origin, add) { -- // Don't do anything if add isn't an object -- if (!add || !isObject(add)) return origin; -- -- var keys = Object.keys(add); -- var i = keys.length; -- while (i--) { -- origin[keys[i]] = add[keys[i]]; -- } -- return origin; --}; -- --function hasOwnProperty(obj, prop) { -- return Object.prototype.hasOwnProperty.call(obj, prop); --} -- -- --// Deprecated old stuff. -- --exports.p = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- console.error(exports.inspect(arguments[i])); -- } --}, 'util.p: Use console.error() instead'); -- -- --exports.exec = exports.deprecate(function() { -- return require('child_process').exec.apply(this, arguments); --}, 'util.exec is now called `child_process.exec`.'); -- -- --exports.print = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stdout.write(String(arguments[i])); -- } --}, 'util.print: Use console.log instead'); -- -- --exports.puts = exports.deprecate(function() { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stdout.write(arguments[i] + '\n'); -- } --}, 'util.puts: Use console.log instead'); -- -- --exports.debug = exports.deprecate(function(x) { -- process.stderr.write('DEBUG: ' + x + '\n'); --}, 'util.debug: Use console.error instead'); -- -- --exports.error = exports.deprecate(function(x) { -- for (var i = 0, len = arguments.length; i < len; ++i) { -- process.stderr.write(arguments[i] + '\n'); -- } --}, 'util.error: Use console.error instead'); -- -- --exports.pump = exports.deprecate(function(readStream, writeStream, callback) { -- var callbackCalled = false; -- -- function call(a, b, c) { -- if (callback && !callbackCalled) { -- callback(a, b, c); -- callbackCalled = true; -- } -- } -- -- readStream.addListener('data', function(chunk) { -- if (writeStream.write(chunk) === false) readStream.pause(); -- }); -- -- writeStream.addListener('drain', function() { -- readStream.resume(); -- }); -- -- readStream.addListener('end', function() { -- writeStream.end(); -- }); -- -- readStream.addListener('close', function() { -- call(); -- }); -- -- readStream.addListener('error', function(err) { -- writeStream.end(); -- call(err); -- }); -- -- writeStream.addListener('error', function(err) { -- readStream.destroy(); -- call(err); -- }); --}, 'util.pump(): Use readableStream.pipe() instead'); -- -- --var uv; --exports._errnoException = function(err, syscall) { -- if (isUndefined(uv)) uv = process.binding('uv'); -- var errname = uv.errname(err); -- var e = new Error(syscall + ' ' + errname); -- e.code = errname; -- e.errno = errname; -- e.syscall = syscall; -- return e; --}; -+} \ No newline at end of file diff --git a/truebit-implementation/node_modules/core-util-is/lib/util.js b/truebit-implementation/node_modules/core-util-is/lib/util.js deleted file mode 100644 index ff4c851c..00000000 --- a/truebit-implementation/node_modules/core-util-is/lib/util.js +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. - -function isArray(arg) { - if (Array.isArray) { - return Array.isArray(arg); - } - return objectToString(arg) === '[object Array]'; -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = Buffer.isBuffer; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} diff --git a/truebit-implementation/node_modules/core-util-is/package.json b/truebit-implementation/node_modules/core-util-is/package.json deleted file mode 100644 index b5345747..00000000 --- a/truebit-implementation/node_modules/core-util-is/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "core-util-is@~1.0.0", - "_id": "core-util-is@1.0.2", - "_inBundle": false, - "_integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "_location": "/core-util-is", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "core-util-is@~1.0.0", - "name": "core-util-is", - "escapedName": "core-util-is", - "rawSpec": "~1.0.0", - "saveSpec": null, - "fetchSpec": "~1.0.0" - }, - "_requiredBy": [ - "/readable-stream", - "/verror" - ], - "_resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "_shasum": "b5fd54220aa2bc5ab57aab7140c940754503c1a7", - "_spec": "core-util-is@~1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/readable-stream", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/core-util-is/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "The `util.is*` functions introduced in Node v0.12.", - "devDependencies": { - "tap": "^2.3.0" - }, - "homepage": "https://github.com/isaacs/core-util-is#readme", - "keywords": [ - "util", - "isBuffer", - "isArray", - "isNumber", - "isString", - "isRegExp", - "isThis", - "isThat", - "polyfill" - ], - "license": "MIT", - "main": "lib/util.js", - "name": "core-util-is", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/core-util-is.git" - }, - "scripts": { - "test": "tap test.js" - }, - "version": "1.0.2" -} diff --git a/truebit-implementation/node_modules/core-util-is/test.js b/truebit-implementation/node_modules/core-util-is/test.js deleted file mode 100644 index 1a490c65..00000000 --- a/truebit-implementation/node_modules/core-util-is/test.js +++ /dev/null @@ -1,68 +0,0 @@ -var assert = require('tap'); - -var t = require('./lib/util'); - -assert.equal(t.isArray([]), true); -assert.equal(t.isArray({}), false); - -assert.equal(t.isBoolean(null), false); -assert.equal(t.isBoolean(true), true); -assert.equal(t.isBoolean(false), true); - -assert.equal(t.isNull(null), true); -assert.equal(t.isNull(undefined), false); -assert.equal(t.isNull(false), false); -assert.equal(t.isNull(), false); - -assert.equal(t.isNullOrUndefined(null), true); -assert.equal(t.isNullOrUndefined(undefined), true); -assert.equal(t.isNullOrUndefined(false), false); -assert.equal(t.isNullOrUndefined(), true); - -assert.equal(t.isNumber(null), false); -assert.equal(t.isNumber('1'), false); -assert.equal(t.isNumber(1), true); - -assert.equal(t.isString(null), false); -assert.equal(t.isString('1'), true); -assert.equal(t.isString(1), false); - -assert.equal(t.isSymbol(null), false); -assert.equal(t.isSymbol('1'), false); -assert.equal(t.isSymbol(1), false); -assert.equal(t.isSymbol(Symbol()), true); - -assert.equal(t.isUndefined(null), false); -assert.equal(t.isUndefined(undefined), true); -assert.equal(t.isUndefined(false), false); -assert.equal(t.isUndefined(), true); - -assert.equal(t.isRegExp(null), false); -assert.equal(t.isRegExp('1'), false); -assert.equal(t.isRegExp(new RegExp()), true); - -assert.equal(t.isObject({}), true); -assert.equal(t.isObject([]), true); -assert.equal(t.isObject(new RegExp()), true); -assert.equal(t.isObject(new Date()), true); - -assert.equal(t.isDate(null), false); -assert.equal(t.isDate('1'), false); -assert.equal(t.isDate(new Date()), true); - -assert.equal(t.isError(null), false); -assert.equal(t.isError({ err: true }), false); -assert.equal(t.isError(new Error()), true); - -assert.equal(t.isFunction(null), false); -assert.equal(t.isFunction({ }), false); -assert.equal(t.isFunction(function() {}), true); - -assert.equal(t.isPrimitive(null), true); -assert.equal(t.isPrimitive(''), true); -assert.equal(t.isPrimitive(0), true); -assert.equal(t.isPrimitive(new Date()), false); - -assert.equal(t.isBuffer(null), false); -assert.equal(t.isBuffer({}), false); -assert.equal(t.isBuffer(new Buffer(0)), true); diff --git a/truebit-implementation/node_modules/cors/CONTRIBUTING.md b/truebit-implementation/node_modules/cors/CONTRIBUTING.md deleted file mode 100644 index 591b09a1..00000000 --- a/truebit-implementation/node_modules/cors/CONTRIBUTING.md +++ /dev/null @@ -1,33 +0,0 @@ -# contributing to `cors` - -CORS is a node.js package for providing a [connect](http://www.senchalabs.org/connect/)/[express](http://expressjs.com/) middleware that can be used to enable [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) with various options. Learn more about the project in [the README](README.md). - -## The CORS Spec - -[http://www.w3.org/TR/cors/](http://www.w3.org/TR/cors/) - -## Pull Requests Welcome - -* Include `'use strict';` in every javascript file. -* 2 space indentation. -* Please run the testing steps below before submitting. - -## Testing - -```bash -$ npm install -$ npm test -``` - -## Interactive Testing Harness - -[http://node-cors-client.herokuapp.com](http://node-cors-client.herokuapp.com) - -Related git repositories: - -* [https://github.com/TroyGoode/node-cors-server](https://github.com/TroyGoode/node-cors-server) -* [https://github.com/TroyGoode/node-cors-client](https://github.com/TroyGoode/node-cors-client) - -## License - -[MIT License](http://www.opensource.org/licenses/mit-license.php) diff --git a/truebit-implementation/node_modules/cors/HISTORY.md b/truebit-implementation/node_modules/cors/HISTORY.md deleted file mode 100644 index 5762bce9..00000000 --- a/truebit-implementation/node_modules/cors/HISTORY.md +++ /dev/null @@ -1,58 +0,0 @@ -2.8.5 / 2018-11-04 -================== - - * Fix setting `maxAge` option to `0` - -2.8.4 / 2017-07-12 -================== - - * Work-around Safari bug in default pre-flight response - -2.8.3 / 2017-03-29 -================== - - * Fix error when options delegate missing `methods` option - -2.8.2 / 2017-03-28 -================== - - * Fix error when frozen options are passed - * Send "Vary: Origin" when using regular expressions - * Send "Vary: Access-Control-Request-Headers" when dynamic `allowedHeaders` - -2.8.1 / 2016-09-08 -================== - -This release only changed documentation. - -2.8.0 / 2016-08-23 -================== - - * Add `optionsSuccessStatus` option - -2.7.2 / 2016-08-23 -================== - - * Fix error when Node.js running in strict mode - -2.7.1 / 2015-05-28 -================== - - * Move module into expressjs organization - -2.7.0 / 2015-05-28 -================== - - * Allow array of matching condition as `origin` option - * Allow regular expression as `origin` option - -2.6.1 / 2015-05-28 -================== - - * Update `license` in package.json - -2.6.0 / 2015-04-27 -================== - - * Add `preflightContinue` option - * Fix "Vary: Origin" header added for "*" diff --git a/truebit-implementation/node_modules/cors/LICENSE b/truebit-implementation/node_modules/cors/LICENSE deleted file mode 100644 index fd10c843..00000000 --- a/truebit-implementation/node_modules/cors/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2013 Troy Goode - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/cors/README.md b/truebit-implementation/node_modules/cors/README.md deleted file mode 100644 index 732b847e..00000000 --- a/truebit-implementation/node_modules/cors/README.md +++ /dev/null @@ -1,243 +0,0 @@ -# cors - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -CORS is a node.js package for providing a [Connect](http://www.senchalabs.org/connect/)/[Express](http://expressjs.com/) middleware that can be used to enable [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) with various options. - -**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)** - -* [Installation](#installation) -* [Usage](#usage) - * [Simple Usage](#simple-usage-enable-all-cors-requests) - * [Enable CORS for a Single Route](#enable-cors-for-a-single-route) - * [Configuring CORS](#configuring-cors) - * [Configuring CORS Asynchronously](#configuring-cors-asynchronously) - * [Enabling CORS Pre-Flight](#enabling-cors-pre-flight) -* [Configuration Options](#configuration-options) -* [Demo](#demo) -* [License](#license) -* [Author](#author) - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install cors -``` - -## Usage - -### Simple Usage (Enable *All* CORS Requests) - -```javascript -var express = require('express') -var cors = require('cors') -var app = express() - -app.use(cors()) - -app.get('/products/:id', function (req, res, next) { - res.json({msg: 'This is CORS-enabled for all origins!'}) -}) - -app.listen(80, function () { - console.log('CORS-enabled web server listening on port 80') -}) -``` - -### Enable CORS for a Single Route - -```javascript -var express = require('express') -var cors = require('cors') -var app = express() - -app.get('/products/:id', cors(), function (req, res, next) { - res.json({msg: 'This is CORS-enabled for a Single Route'}) -}) - -app.listen(80, function () { - console.log('CORS-enabled web server listening on port 80') -}) -``` - -### Configuring CORS - -```javascript -var express = require('express') -var cors = require('cors') -var app = express() - -var corsOptions = { - origin: 'http://example.com', - optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204 -} - -app.get('/products/:id', cors(corsOptions), function (req, res, next) { - res.json({msg: 'This is CORS-enabled for only example.com.'}) -}) - -app.listen(80, function () { - console.log('CORS-enabled web server listening on port 80') -}) -``` - -### Configuring CORS w/ Dynamic Origin - -```javascript -var express = require('express') -var cors = require('cors') -var app = express() - -var whitelist = ['http://example1.com', 'http://example2.com'] -var corsOptions = { - origin: function (origin, callback) { - if (whitelist.indexOf(origin) !== -1) { - callback(null, true) - } else { - callback(new Error('Not allowed by CORS')) - } - } -} - -app.get('/products/:id', cors(corsOptions), function (req, res, next) { - res.json({msg: 'This is CORS-enabled for a whitelisted domain.'}) -}) - -app.listen(80, function () { - console.log('CORS-enabled web server listening on port 80') -}) -``` - -If you do not want to block REST tools or server-to-server requests, -add a `!origin` check in the origin function like so: - -```javascript -var corsOptions = { - origin: function (origin, callback) { - if (whitelist.indexOf(origin) !== -1 || !origin) { - callback(null, true) - } else { - callback(new Error('Not allowed by CORS')) - } - } -} -``` - -### Enabling CORS Pre-Flight - -Certain CORS requests are considered 'complex' and require an initial -`OPTIONS` request (called the "pre-flight request"). An example of a -'complex' CORS request is one that uses an HTTP verb other than -GET/HEAD/POST (such as DELETE) or that uses custom headers. To enable -pre-flighting, you must add a new OPTIONS handler for the route you want -to support: - -```javascript -var express = require('express') -var cors = require('cors') -var app = express() - -app.options('/products/:id', cors()) // enable pre-flight request for DELETE request -app.del('/products/:id', cors(), function (req, res, next) { - res.json({msg: 'This is CORS-enabled for all origins!'}) -}) - -app.listen(80, function () { - console.log('CORS-enabled web server listening on port 80') -}) -``` - -You can also enable pre-flight across-the-board like so: - -```javascript -app.options('*', cors()) // include before other routes -``` - -### Configuring CORS Asynchronously - -```javascript -var express = require('express') -var cors = require('cors') -var app = express() - -var whitelist = ['http://example1.com', 'http://example2.com'] -var corsOptionsDelegate = function (req, callback) { - var corsOptions; - if (whitelist.indexOf(req.header('Origin')) !== -1) { - corsOptions = { origin: true } // reflect (enable) the requested origin in the CORS response - } else { - corsOptions = { origin: false } // disable CORS for this request - } - callback(null, corsOptions) // callback expects two parameters: error and options -} - -app.get('/products/:id', cors(corsOptionsDelegate), function (req, res, next) { - res.json({msg: 'This is CORS-enabled for a whitelisted domain.'}) -}) - -app.listen(80, function () { - console.log('CORS-enabled web server listening on port 80') -}) -``` - -## Configuration Options - -* `origin`: Configures the **Access-Control-Allow-Origin** CORS header. Possible values: - - `Boolean` - set `origin` to `true` to reflect the [request origin](http://tools.ietf.org/html/draft-abarth-origin-09), as defined by `req.header('Origin')`, or set it to `false` to disable CORS. - - `String` - set `origin` to a specific origin. For example if you set it to `"http://example.com"` only requests from "http://example.com" will be allowed. - - `RegExp` - set `origin` to a regular expression pattern which will be used to test the request origin. If it's a match, the request origin will be reflected. For example the pattern `/example\.com$/` will reflect any request that is coming from an origin ending with "example.com". - - `Array` - set `origin` to an array of valid origins. Each origin can be a `String` or a `RegExp`. For example `["http://example1.com", /\.example2\.com$/]` will accept any request from "http://example1.com" or from a subdomain of "example2.com". - - `Function` - set `origin` to a function implementing some custom logic. The function takes the request origin as the first parameter and a callback (which expects the signature `err [object], allow [bool]`) as the second. -* `methods`: Configures the **Access-Control-Allow-Methods** CORS header. Expects a comma-delimited string (ex: 'GET,PUT,POST') or an array (ex: `['GET', 'PUT', 'POST']`). -* `allowedHeaders`: Configures the **Access-Control-Allow-Headers** CORS header. Expects a comma-delimited string (ex: 'Content-Type,Authorization') or an array (ex: `['Content-Type', 'Authorization']`). If not specified, defaults to reflecting the headers specified in the request's **Access-Control-Request-Headers** header. -* `exposedHeaders`: Configures the **Access-Control-Expose-Headers** CORS header. Expects a comma-delimited string (ex: 'Content-Range,X-Content-Range') or an array (ex: `['Content-Range', 'X-Content-Range']`). If not specified, no custom headers are exposed. -* `credentials`: Configures the **Access-Control-Allow-Credentials** CORS header. Set to `true` to pass the header, otherwise it is omitted. -* `maxAge`: Configures the **Access-Control-Max-Age** CORS header. Set to an integer to pass the header, otherwise it is omitted. -* `preflightContinue`: Pass the CORS preflight response to the next handler. -* `optionsSuccessStatus`: Provides a status code to use for successful `OPTIONS` requests, since some legacy browsers (IE11, various SmartTVs) choke on `204`. - -The default configuration is the equivalent of: - -```json -{ - "origin": "*", - "methods": "GET,HEAD,PUT,PATCH,POST,DELETE", - "preflightContinue": false, - "optionsSuccessStatus": 204 -} -``` - -For details on the effect of each CORS header, read [this](http://www.html5rocks.com/en/tutorials/cors/) article on HTML5 Rocks. - -## Demo - -A demo that illustrates CORS working (and not working) using jQuery is available here: [http://node-cors-client.herokuapp.com/](http://node-cors-client.herokuapp.com/) - -Code for that demo can be found here: - -* Client: [https://github.com/TroyGoode/node-cors-client](https://github.com/TroyGoode/node-cors-client) -* Server: [https://github.com/TroyGoode/node-cors-server](https://github.com/TroyGoode/node-cors-server) - -## License - -[MIT License](http://www.opensource.org/licenses/mit-license.php) - -## Author - -[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com)) - -[coveralls-image]: https://img.shields.io/coveralls/expressjs/cors/master.svg -[coveralls-url]: https://coveralls.io/r/expressjs/cors?branch=master -[downloads-image]: https://img.shields.io/npm/dm/cors.svg -[downloads-url]: https://npmjs.org/package/cors -[npm-image]: https://img.shields.io/npm/v/cors.svg -[npm-url]: https://npmjs.org/package/cors -[travis-image]: https://img.shields.io/travis/expressjs/cors/master.svg -[travis-url]: https://travis-ci.org/expressjs/cors diff --git a/truebit-implementation/node_modules/cors/lib/index.js b/truebit-implementation/node_modules/cors/lib/index.js deleted file mode 100644 index 5475aecd..00000000 --- a/truebit-implementation/node_modules/cors/lib/index.js +++ /dev/null @@ -1,238 +0,0 @@ -(function () { - - 'use strict'; - - var assign = require('object-assign'); - var vary = require('vary'); - - var defaults = { - origin: '*', - methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', - preflightContinue: false, - optionsSuccessStatus: 204 - }; - - function isString(s) { - return typeof s === 'string' || s instanceof String; - } - - function isOriginAllowed(origin, allowedOrigin) { - if (Array.isArray(allowedOrigin)) { - for (var i = 0; i < allowedOrigin.length; ++i) { - if (isOriginAllowed(origin, allowedOrigin[i])) { - return true; - } - } - return false; - } else if (isString(allowedOrigin)) { - return origin === allowedOrigin; - } else if (allowedOrigin instanceof RegExp) { - return allowedOrigin.test(origin); - } else { - return !!allowedOrigin; - } - } - - function configureOrigin(options, req) { - var requestOrigin = req.headers.origin, - headers = [], - isAllowed; - - if (!options.origin || options.origin === '*') { - // allow any origin - headers.push([{ - key: 'Access-Control-Allow-Origin', - value: '*' - }]); - } else if (isString(options.origin)) { - // fixed origin - headers.push([{ - key: 'Access-Control-Allow-Origin', - value: options.origin - }]); - headers.push([{ - key: 'Vary', - value: 'Origin' - }]); - } else { - isAllowed = isOriginAllowed(requestOrigin, options.origin); - // reflect origin - headers.push([{ - key: 'Access-Control-Allow-Origin', - value: isAllowed ? requestOrigin : false - }]); - headers.push([{ - key: 'Vary', - value: 'Origin' - }]); - } - - return headers; - } - - function configureMethods(options) { - var methods = options.methods; - if (methods.join) { - methods = options.methods.join(','); // .methods is an array, so turn it into a string - } - return { - key: 'Access-Control-Allow-Methods', - value: methods - }; - } - - function configureCredentials(options) { - if (options.credentials === true) { - return { - key: 'Access-Control-Allow-Credentials', - value: 'true' - }; - } - return null; - } - - function configureAllowedHeaders(options, req) { - var allowedHeaders = options.allowedHeaders || options.headers; - var headers = []; - - if (!allowedHeaders) { - allowedHeaders = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers - headers.push([{ - key: 'Vary', - value: 'Access-Control-Request-Headers' - }]); - } else if (allowedHeaders.join) { - allowedHeaders = allowedHeaders.join(','); // .headers is an array, so turn it into a string - } - if (allowedHeaders && allowedHeaders.length) { - headers.push([{ - key: 'Access-Control-Allow-Headers', - value: allowedHeaders - }]); - } - - return headers; - } - - function configureExposedHeaders(options) { - var headers = options.exposedHeaders; - if (!headers) { - return null; - } else if (headers.join) { - headers = headers.join(','); // .headers is an array, so turn it into a string - } - if (headers && headers.length) { - return { - key: 'Access-Control-Expose-Headers', - value: headers - }; - } - return null; - } - - function configureMaxAge(options) { - var maxAge = (typeof options.maxAge === 'number' || options.maxAge) && options.maxAge.toString() - if (maxAge && maxAge.length) { - return { - key: 'Access-Control-Max-Age', - value: maxAge - }; - } - return null; - } - - function applyHeaders(headers, res) { - for (var i = 0, n = headers.length; i < n; i++) { - var header = headers[i]; - if (header) { - if (Array.isArray(header)) { - applyHeaders(header, res); - } else if (header.key === 'Vary' && header.value) { - vary(res, header.value); - } else if (header.value) { - res.setHeader(header.key, header.value); - } - } - } - } - - function cors(options, req, res, next) { - var headers = [], - method = req.method && req.method.toUpperCase && req.method.toUpperCase(); - - if (method === 'OPTIONS') { - // preflight - headers.push(configureOrigin(options, req)); - headers.push(configureCredentials(options, req)); - headers.push(configureMethods(options, req)); - headers.push(configureAllowedHeaders(options, req)); - headers.push(configureMaxAge(options, req)); - headers.push(configureExposedHeaders(options, req)); - applyHeaders(headers, res); - - if (options.preflightContinue) { - next(); - } else { - // Safari (and potentially other browsers) need content-length 0, - // for 204 or they just hang waiting for a body - res.statusCode = options.optionsSuccessStatus; - res.setHeader('Content-Length', '0'); - res.end(); - } - } else { - // actual response - headers.push(configureOrigin(options, req)); - headers.push(configureCredentials(options, req)); - headers.push(configureExposedHeaders(options, req)); - applyHeaders(headers, res); - next(); - } - } - - function middlewareWrapper(o) { - // if options are static (either via defaults or custom options passed in), wrap in a function - var optionsCallback = null; - if (typeof o === 'function') { - optionsCallback = o; - } else { - optionsCallback = function (req, cb) { - cb(null, o); - }; - } - - return function corsMiddleware(req, res, next) { - optionsCallback(req, function (err, options) { - if (err) { - next(err); - } else { - var corsOptions = assign({}, defaults, options); - var originCallback = null; - if (corsOptions.origin && typeof corsOptions.origin === 'function') { - originCallback = corsOptions.origin; - } else if (corsOptions.origin) { - originCallback = function (origin, cb) { - cb(null, corsOptions.origin); - }; - } - - if (originCallback) { - originCallback(req.headers.origin, function (err2, origin) { - if (err2 || !origin) { - next(err2); - } else { - corsOptions.origin = origin; - cors(corsOptions, req, res, next); - } - }); - } else { - next(); - } - } - }); - }; - } - - // can pass either an options hash, an options delegate, or nothing - module.exports = middlewareWrapper; - -}()); diff --git a/truebit-implementation/node_modules/cors/package.json b/truebit-implementation/node_modules/cors/package.json deleted file mode 100644 index 968d2e19..00000000 --- a/truebit-implementation/node_modules/cors/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "cors@^2.8.1", - "_id": "cors@2.8.5", - "_inBundle": false, - "_integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "_location": "/cors", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "cors@^2.8.1", - "name": "cors", - "escapedName": "cors", - "rawSpec": "^2.8.1", - "saveSpec": null, - "fetchSpec": "^2.8.1" - }, - "_requiredBy": [ - "/servify" - ], - "_resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "_shasum": "eac11da51592dd86b9f06f6e7ac293b3df875d29", - "_spec": "cors@^2.8.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/servify", - "author": { - "name": "Troy Goode", - "email": "troygoode@gmail.com", - "url": "https://github.com/troygoode/" - }, - "bugs": { - "url": "https://github.com/expressjs/cors/issues" - }, - "bundleDependencies": false, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "deprecated": false, - "description": "Node.js CORS middleware", - "devDependencies": { - "after": "0.8.2", - "eslint": "2.13.1", - "express": "4.16.3", - "mocha": "5.2.0", - "nyc": "13.1.0", - "supertest": "3.3.0" - }, - "engines": { - "node": ">= 0.10" - }, - "files": [ - "lib/index.js", - "CONTRIBUTING.md", - "HISTORY.md", - "LICENSE", - "README.md" - ], - "homepage": "https://github.com/expressjs/cors#readme", - "keywords": [ - "cors", - "express", - "connect", - "middleware" - ], - "license": "MIT", - "main": "./lib/index.js", - "name": "cors", - "repository": { - "type": "git", - "url": "git+https://github.com/expressjs/cors.git" - }, - "scripts": { - "lint": "eslint lib test", - "test": "npm run lint && nyc --reporter=html --reporter=text mocha --require test/support/env" - }, - "version": "2.8.5" -} diff --git a/truebit-implementation/node_modules/create-ecdh/.travis.yml b/truebit-implementation/node_modules/create-ecdh/.travis.yml deleted file mode 100644 index 4ceadcbe..00000000 --- a/truebit-implementation/node_modules/create-ecdh/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -sudo: false -node_js: - - 6 - - 8 - - 9 - - 10 diff --git a/truebit-implementation/node_modules/create-ecdh/LICENSE b/truebit-implementation/node_modules/create-ecdh/LICENSE deleted file mode 100644 index 58b3e845..00000000 --- a/truebit-implementation/node_modules/create-ecdh/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2017 createECDH contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/create-ecdh/browser.js b/truebit-implementation/node_modules/create-ecdh/browser.js deleted file mode 100644 index 3613b451..00000000 --- a/truebit-implementation/node_modules/create-ecdh/browser.js +++ /dev/null @@ -1,124 +0,0 @@ -var elliptic = require('elliptic') -var BN = require('bn.js') - -module.exports = function createECDH (curve) { - return new ECDH(curve) -} - -var aliases = { - secp256k1: { - name: 'secp256k1', - byteLength: 32 - }, - secp224r1: { - name: 'p224', - byteLength: 28 - }, - prime256v1: { - name: 'p256', - byteLength: 32 - }, - prime192v1: { - name: 'p192', - byteLength: 24 - }, - ed25519: { - name: 'ed25519', - byteLength: 32 - }, - secp384r1: { - name: 'p384', - byteLength: 48 - }, - secp521r1: { - name: 'p521', - byteLength: 66 - } -} - -aliases.p224 = aliases.secp224r1 -aliases.p256 = aliases.secp256r1 = aliases.prime256v1 -aliases.p192 = aliases.secp192r1 = aliases.prime192v1 -aliases.p384 = aliases.secp384r1 -aliases.p521 = aliases.secp521r1 - -function ECDH (curve) { - this.curveType = aliases[curve] - if (!this.curveType) { - this.curveType = { - name: curve - } - } - this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap - this.keys = void 0 -} - -ECDH.prototype.generateKeys = function (enc, format) { - this.keys = this.curve.genKeyPair() - return this.getPublicKey(enc, format) -} - -ECDH.prototype.computeSecret = function (other, inenc, enc) { - inenc = inenc || 'utf8' - if (!Buffer.isBuffer(other)) { - other = new Buffer(other, inenc) - } - var otherPub = this.curve.keyFromPublic(other).getPublic() - var out = otherPub.mul(this.keys.getPrivate()).getX() - return formatReturnValue(out, enc, this.curveType.byteLength) -} - -ECDH.prototype.getPublicKey = function (enc, format) { - var key = this.keys.getPublic(format === 'compressed', true) - if (format === 'hybrid') { - if (key[key.length - 1] % 2) { - key[0] = 7 - } else { - key[0] = 6 - } - } - return formatReturnValue(key, enc) -} - -ECDH.prototype.getPrivateKey = function (enc) { - return formatReturnValue(this.keys.getPrivate(), enc) -} - -ECDH.prototype.setPublicKey = function (pub, enc) { - enc = enc || 'utf8' - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc) - } - this.keys._importPublic(pub) - return this -} - -ECDH.prototype.setPrivateKey = function (priv, enc) { - enc = enc || 'utf8' - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc) - } - - var _priv = new BN(priv) - _priv = _priv.toString(16) - this.keys = this.curve.genKeyPair() - this.keys._importPrivate(_priv) - return this -} - -function formatReturnValue (bn, enc, len) { - if (!Array.isArray(bn)) { - bn = bn.toArray() - } - var buf = new Buffer(bn) - if (len && buf.length < len) { - var zeros = new Buffer(len - buf.length) - zeros.fill(0) - buf = Buffer.concat([zeros, buf]) - } - if (!enc) { - return buf - } else { - return buf.toString(enc) - } -} diff --git a/truebit-implementation/node_modules/create-ecdh/index.js b/truebit-implementation/node_modules/create-ecdh/index.js deleted file mode 100644 index 841d085e..00000000 --- a/truebit-implementation/node_modules/create-ecdh/index.js +++ /dev/null @@ -1,3 +0,0 @@ -var createECDH = require('crypto').createECDH - -module.exports = createECDH || require('./browser') diff --git a/truebit-implementation/node_modules/create-ecdh/package.json b/truebit-implementation/node_modules/create-ecdh/package.json deleted file mode 100644 index 8ebbacaf..00000000 --- a/truebit-implementation/node_modules/create-ecdh/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "create-ecdh@^4.0.0", - "_id": "create-ecdh@4.0.3", - "_inBundle": false, - "_integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "_location": "/create-ecdh", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "create-ecdh@^4.0.0", - "name": "create-ecdh", - "escapedName": "create-ecdh", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/crypto-browserify" - ], - "_resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "_shasum": "c9111b6f33045c4697f144787f9254cdc77c45ff", - "_spec": "create-ecdh@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": { - "name": "Calvin Metcalf" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/createECDH/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - }, - "deprecated": false, - "description": "createECDH but browserifiable", - "devDependencies": { - "standard": "^5.4.1", - "tap-spec": "^1.0.1", - "tape": "^3.0.1" - }, - "homepage": "https://github.com/crypto-browserify/createECDH", - "keywords": [ - "diffie", - "hellman", - "diffiehellman", - "ECDH" - ], - "license": "MIT", - "main": "index.js", - "name": "create-ecdh", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/createECDH.git" - }, - "scripts": { - "test": "standard && node test.js | tspec" - }, - "version": "4.0.3" -} diff --git a/truebit-implementation/node_modules/create-ecdh/readme.md b/truebit-implementation/node_modules/create-ecdh/readme.md deleted file mode 100644 index 7e5ce47b..00000000 --- a/truebit-implementation/node_modules/create-ecdh/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -createECDH [![Build Status](https://travis-ci.org/crypto-browserify/createECDH.svg)](https://travis-ci.org/crypto-browserify/createECDH) -==== - -In io.js or node >= 0.11 this module is just a shortcut to crypto.createECDH. In node <= 0.11 or the browser this is a pure JavaScript implimentation, more specifically a wrapper around [elliptic](https://github.com/indutny/elliptic), to give it the same API as node. `secp256k1`, `secp224r1` (aka p224), `prime256v1` (aka p256, secp256r1), `prime192v1` (aka p192, secp192r1), `secp384r1` (aka p384), `secp521r1` (aka p521) curves all work in both this library and node (though only the highlighted name will work in node). diff --git a/truebit-implementation/node_modules/create-hash/.travis.yml b/truebit-implementation/node_modules/create-hash/.travis.yml deleted file mode 100644 index da59431d..00000000 --- a/truebit-implementation/node_modules/create-hash/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -sudo: false -language: node_js -before_install: - - "npm install npm -g" -node_js: - - "4" - - "5" - - "6" - - "7" -env: - matrix: - - TEST_SUITE=unit -matrix: - include: - - node_js: "7" - env: TEST_SUITE=standard -script: npm run $TEST_SUITE diff --git a/truebit-implementation/node_modules/create-hash/LICENSE b/truebit-implementation/node_modules/create-hash/LICENSE deleted file mode 100644 index f06007ae..00000000 --- a/truebit-implementation/node_modules/create-hash/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 crypto-browserify contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/create-hash/README.md b/truebit-implementation/node_modules/create-hash/README.md deleted file mode 100644 index bad028d3..00000000 --- a/truebit-implementation/node_modules/create-hash/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# create-hash - -[![Build Status](https://travis-ci.org/crypto-browserify/createHash.svg)](https://travis-ci.org/crypto-browserify/createHash) - -Node style hashes for use in the browser, with native hash functions in node. - -API is the same as hashes in node: -```js -var createHash = require('create-hash') -var hash = createHash('sha224') -hash.update('synchronous write') // optional encoding parameter -hash.digest() // synchronously get result with optional encoding parameter - -hash.write('write to it as a stream') -hash.end() // remember it's a stream -hash.read() // only if you ended it as a stream though -``` - -To get the JavaScript version even in node do `require('create-hash/browser')` diff --git a/truebit-implementation/node_modules/create-hash/browser.js b/truebit-implementation/node_modules/create-hash/browser.js deleted file mode 100644 index 01841bb9..00000000 --- a/truebit-implementation/node_modules/create-hash/browser.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict' -var inherits = require('inherits') -var MD5 = require('md5.js') -var RIPEMD160 = require('ripemd160') -var sha = require('sha.js') -var Base = require('cipher-base') - -function Hash (hash) { - Base.call(this, 'digest') - - this._hash = hash -} - -inherits(Hash, Base) - -Hash.prototype._update = function (data) { - this._hash.update(data) -} - -Hash.prototype._final = function () { - return this._hash.digest() -} - -module.exports = function createHash (alg) { - alg = alg.toLowerCase() - if (alg === 'md5') return new MD5() - if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() - - return new Hash(sha(alg)) -} diff --git a/truebit-implementation/node_modules/create-hash/index.js b/truebit-implementation/node_modules/create-hash/index.js deleted file mode 100644 index 658f6a02..00000000 --- a/truebit-implementation/node_modules/create-hash/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('crypto').createHash diff --git a/truebit-implementation/node_modules/create-hash/md5.js b/truebit-implementation/node_modules/create-hash/md5.js deleted file mode 100644 index 3643ee29..00000000 --- a/truebit-implementation/node_modules/create-hash/md5.js +++ /dev/null @@ -1,5 +0,0 @@ -var MD5 = require('md5.js') - -module.exports = function (buffer) { - return new MD5().update(buffer).digest() -} diff --git a/truebit-implementation/node_modules/create-hash/package.json b/truebit-implementation/node_modules/create-hash/package.json deleted file mode 100644 index b2126a47..00000000 --- a/truebit-implementation/node_modules/create-hash/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "create-hash@^1.1.0", - "_id": "create-hash@1.2.0", - "_inBundle": false, - "_integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "_location": "/create-hash", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "create-hash@^1.1.0", - "name": "create-hash", - "escapedName": "create-hash", - "rawSpec": "^1.1.0", - "saveSpec": null, - "fetchSpec": "^1.1.0" - }, - "_requiredBy": [ - "/browserify-aes", - "/browserify-sign", - "/create-hmac", - "/crypto-browserify", - "/parse-asn1", - "/pbkdf2", - "/public-encrypt" - ], - "_resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "_shasum": "889078af11a63756bcfb59bd221996be3a9ef196", - "_spec": "create-hash@^1.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": "", - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/createHash/issues" - }, - "bundleDependencies": false, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - }, - "deprecated": false, - "description": "create hashes for browserify", - "devDependencies": { - "hash-test-vectors": "^1.3.2", - "safe-buffer": "^5.0.1", - "standard": "^10.0.2", - "tap-spec": "^2.1.2", - "tape": "^4.6.3" - }, - "homepage": "https://github.com/crypto-browserify/createHash", - "keywords": [ - "crypto" - ], - "license": "MIT", - "main": "index.js", - "name": "create-hash", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/crypto-browserify/createHash.git" - }, - "scripts": { - "standard": "standard", - "test": "npm run-script standard && npm run-script unit", - "unit": "node test.js | tspec" - }, - "version": "1.2.0" -} diff --git a/truebit-implementation/node_modules/create-hash/test.js b/truebit-implementation/node_modules/create-hash/test.js deleted file mode 100644 index 7c98f9fc..00000000 --- a/truebit-implementation/node_modules/create-hash/test.js +++ /dev/null @@ -1,41 +0,0 @@ -var test = require('tape') - -var Buffer = require('safe-buffer').Buffer -var algorithms = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160', 'ripemd160'] -var encodings = ['hex', 'base64'] // ignore binary -var vectors = require('hash-test-vectors') -vectors.forEach(function (vector) { - vector.ripemd160 = vector.rmd160 -}) -var createHash = require('./browser') - -algorithms.forEach(function (algorithm) { - test('test ' + algorithm + ' against test vectors', function (t) { - vectors.forEach(function (obj, i) { - var input = Buffer.from(obj.input, 'base64') - var node = obj[algorithm] - var js = createHash(algorithm).update(input).digest('hex') - t.equal(js, node, algorithm + '(testVector[' + i + ']) == ' + node) - }) - - encodings.forEach(function (encoding) { - vectors.forEach(function (obj, i) { - var input = Buffer.from(obj.input, 'base64').toString(encoding) - var node = obj[algorithm] - var js = createHash(algorithm).update(input, encoding).digest('hex') - t.equal(js, node, algorithm + '(testVector[' + i + '], ' + encoding + ') == ' + node) - }) - }) - - vectors.forEach(function (obj, i) { - var input = Buffer.from(obj.input, 'base64') - var node = obj[algorithm] - var hash = createHash(algorithm) - hash.end(input) - var js = hash.read().toString('hex') - t.equal(js, node, algorithm + '(testVector[' + i + ']) == ' + node) - }) - - t.end() - }) -}) diff --git a/truebit-implementation/node_modules/create-hmac/LICENSE b/truebit-implementation/node_modules/create-hmac/LICENSE deleted file mode 100644 index f06007ae..00000000 --- a/truebit-implementation/node_modules/create-hmac/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 crypto-browserify contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/create-hmac/README.md b/truebit-implementation/node_modules/create-hmac/README.md deleted file mode 100644 index e8de47f8..00000000 --- a/truebit-implementation/node_modules/create-hmac/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# create-hmac - -[![NPM Package](https://img.shields.io/npm/v/create-hmac.svg?style=flat-square)](https://www.npmjs.org/package/create-hmac) -[![Build Status](https://img.shields.io/travis/crypto-browserify/createHmac.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/createHmac) -[![Dependency status](https://img.shields.io/david/crypto-browserify/createHmac.svg?style=flat-square)](https://david-dm.org/crypto-browserify/createHmac#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -Node style HMACs for use in the browser, with native HMAC functions in node. API is the same as HMACs in node: - -```js -var createHmac = require('create-hmac') -var hmac = createHmac('sha224', Buffer.from('secret key')) -hmac.update('synchronous write') //optional encoding parameter -hmac.digest() // synchronously get result with optional encoding parameter - -hmac.write('write to it as a stream') -hmac.end() //remember it's a stream -hmac.read() //only if you ended it as a stream though -``` diff --git a/truebit-implementation/node_modules/create-hmac/browser.js b/truebit-implementation/node_modules/create-hmac/browser.js deleted file mode 100644 index a5c9b61e..00000000 --- a/truebit-implementation/node_modules/create-hmac/browser.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict' -var inherits = require('inherits') -var Legacy = require('./legacy') -var Base = require('cipher-base') -var Buffer = require('safe-buffer').Buffer -var md5 = require('create-hash/md5') -var RIPEMD160 = require('ripemd160') - -var sha = require('sha.js') - -var ZEROS = Buffer.alloc(128) - -function Hmac (alg, key) { - Base.call(this, 'digest') - if (typeof key === 'string') { - key = Buffer.from(key) - } - - var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 - - this._alg = alg - this._key = key - if (key.length > blocksize) { - var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) - key = hash.update(key).digest() - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } - - var ipad = this._ipad = Buffer.allocUnsafe(blocksize) - var opad = this._opad = Buffer.allocUnsafe(blocksize) - - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } - this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) - this._hash.update(ipad) -} - -inherits(Hmac, Base) - -Hmac.prototype._update = function (data) { - this._hash.update(data) -} - -Hmac.prototype._final = function () { - var h = this._hash.digest() - var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) - return hash.update(this._opad).update(h).digest() -} - -module.exports = function createHmac (alg, key) { - alg = alg.toLowerCase() - if (alg === 'rmd160' || alg === 'ripemd160') { - return new Hmac('rmd160', key) - } - if (alg === 'md5') { - return new Legacy(md5, key) - } - return new Hmac(alg, key) -} diff --git a/truebit-implementation/node_modules/create-hmac/index.js b/truebit-implementation/node_modules/create-hmac/index.js deleted file mode 100644 index ec8c4f72..00000000 --- a/truebit-implementation/node_modules/create-hmac/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('crypto').createHmac diff --git a/truebit-implementation/node_modules/create-hmac/legacy.js b/truebit-implementation/node_modules/create-hmac/legacy.js deleted file mode 100644 index 5039c2a7..00000000 --- a/truebit-implementation/node_modules/create-hmac/legacy.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict' -var inherits = require('inherits') -var Buffer = require('safe-buffer').Buffer - -var Base = require('cipher-base') - -var ZEROS = Buffer.alloc(128) -var blocksize = 64 - -function Hmac (alg, key) { - Base.call(this, 'digest') - if (typeof key === 'string') { - key = Buffer.from(key) - } - - this._alg = alg - this._key = key - - if (key.length > blocksize) { - key = alg(key) - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } - - var ipad = this._ipad = Buffer.allocUnsafe(blocksize) - var opad = this._opad = Buffer.allocUnsafe(blocksize) - - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } - - this._hash = [ipad] -} - -inherits(Hmac, Base) - -Hmac.prototype._update = function (data) { - this._hash.push(data) -} - -Hmac.prototype._final = function () { - var h = this._alg(Buffer.concat(this._hash)) - return this._alg(Buffer.concat([this._opad, h])) -} -module.exports = Hmac diff --git a/truebit-implementation/node_modules/create-hmac/package.json b/truebit-implementation/node_modules/create-hmac/package.json deleted file mode 100644 index 4ca7f197..00000000 --- a/truebit-implementation/node_modules/create-hmac/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "_from": "create-hmac@^1.1.0", - "_id": "create-hmac@1.1.7", - "_inBundle": false, - "_integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "_location": "/create-hmac", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "create-hmac@^1.1.0", - "name": "create-hmac", - "escapedName": "create-hmac", - "rawSpec": "^1.1.0", - "saveSpec": null, - "fetchSpec": "^1.1.0" - }, - "_requiredBy": [ - "/browserify-sign", - "/crypto-browserify", - "/pbkdf2" - ], - "_resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "_shasum": "69170c78b3ab957147b2b8b04572e47ead2243ff", - "_spec": "create-hmac@^1.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": "", - "browser": "./browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/createHmac/issues" - }, - "bundleDependencies": false, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "deprecated": false, - "description": "node style hmacs in the browser", - "devDependencies": { - "hash-test-vectors": "^1.3.2", - "standard": "^5.3.1", - "tap-spec": "^2.1.2", - "tape": "^3.0.3" - }, - "files": [ - "browser.js", - "index.js", - "legacy.js" - ], - "homepage": "https://github.com/crypto-browserify/createHmac", - "keywords": [ - "crypto", - "hmac" - ], - "license": "MIT", - "main": "index.js", - "name": "create-hmac", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/createHmac.git" - }, - "scripts": { - "standard": "standard", - "test": "npm run-script standard && npm run-script unit", - "unit": "node test.js | tspec" - }, - "version": "1.1.7" -} diff --git a/truebit-implementation/node_modules/crypto-browserify/.travis.yml b/truebit-implementation/node_modules/crypto-browserify/.travis.yml deleted file mode 100644 index 5ad8439a..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -sudo: false -language: node_js -matrix: - include: - - node_js: '0.11' - env: TEST_SUITE=unit - - node_js: '0.12' - env: TEST_SUITE=unit - - node_js: '4' - env: TEST_SUITE=unit - - node_js: '4' - env: TEST_SUITE=standard - - node_js: '4' - env: TEST_SUITE=browser BROWSER_NAME=ie BROWSER_VERSION="10..latest" - - node_js: '4' - env: TEST_SUITE=browser BROWSER_NAME=chrome BROWSER_VERSION="-2..beta" - - node_js: '4' - env: TEST_SUITE=browser BROWSER_NAME=firefox BROWSER_VERSION="-2..latest" - - node_js: '4' - env: TEST_SUITE=browser BROWSER_NAME=safari BROWSER_VERSION="7..latest" - - node_js: '4' - env: TEST_SUITE=browser BROWSER_NAME=android BROWSER_VERSION="5.0..latest" -script: "npm run-script $TEST_SUITE" -env: - global: - - secure: YHNUDQmx/WiW3gmDcRCfb6KLDeio7Mr5tqPY2kHPdZlBSytsQjNk75ytM4U6Cu8Uk8iEIoj/aFlxiVMpJNA8J4QSUyW/YkbVaIz0+1oywoV0Ht8aRBfZ1jvXfX6789+1Q9c4xaMkYYbJpXSh9JcirsiwmqWd4+IDd7hcESodsDQ= - - secure: Nhj5yejKZxUbtHGZta+GjYWqXGaOZB7ainTkOuGcpXM+OwwjeDpYlTBrwS90Q7hqens7KXVzQM09aDbadpsDCsOo1nyaEigMtomAorZ1UC1CpEoVz1ZuikF9bEhb+/7M9pzuL1fX+Ke9Dx4mPPeb8sf/2SrAu1RqXkSwZV/duAc= diff --git a/truebit-implementation/node_modules/crypto-browserify/.zuul.yml b/truebit-implementation/node_modules/crypto-browserify/.zuul.yml deleted file mode 100644 index 96d9cfbd..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/.zuul.yml +++ /dev/null @@ -1 +0,0 @@ -ui: tape diff --git a/truebit-implementation/node_modules/crypto-browserify/LICENSE b/truebit-implementation/node_modules/crypto-browserify/LICENSE deleted file mode 100644 index 8abb57d6..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2013 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/crypto-browserify/README.md b/truebit-implementation/node_modules/crypto-browserify/README.md deleted file mode 100644 index 1b9cf3b0..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# crypto-browserify - -A port of node's `crypto` module to the browser. - -[![Build Status](https://travis-ci.org/crypto-browserify/crypto-browserify.svg?branch=master)](https://travis-ci.org/crypto-browserify/crypto-browserify) -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) -[![Sauce Test Status](https://saucelabs.com/browser-matrix/crypto-browserify.svg)](https://saucelabs.com/u/crypto-browserify) - -The goal of this module is to reimplement node's crypto module, -in pure javascript so that it can run in the browser. - -Here is the subset that is currently implemented: - -* createHash (sha1, sha224, sha256, sha384, sha512, md5, rmd160) -* createHmac (sha1, sha224, sha256, sha384, sha512, md5, rmd160) -* pbkdf2 -* pbkdf2Sync -* randomBytes -* pseudoRandomBytes -* createCipher (aes) -* createDecipher (aes) -* createDiffieHellman -* createSign (rsa, ecdsa) -* createVerify (rsa, ecdsa) -* createECDH (secp256k1) -* publicEncrypt/privateDecrypt (rsa) -* privateEncrypt/publicDecrypt (rsa) - -## todo - -these features from node's `crypto` are still unimplemented. - -* createCredentials - -## contributions - -If you are interested in writing a feature, please implement as a new module, -which will be incorporated into crypto-browserify as a dependency. - -All deps must be compatible with node's crypto -(generate example inputs and outputs with node, -and save base64 strings inside JSON, so that tests can run in the browser. -see [sha.js](https://github.com/dominictarr/sha.js) - -Crypto is _extra serious_ so please do not hesitate to review the code, -and post comments if you do. - -## License - -MIT diff --git a/truebit-implementation/node_modules/crypto-browserify/example/bundle.js b/truebit-implementation/node_modules/crypto-browserify/example/bundle.js deleted file mode 100644 index 02698cc7..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/example/bundle.js +++ /dev/null @@ -1,637 +0,0 @@ -var require = function (file, cwd) { - var resolved = require.resolve(file, cwd || '/'); - var mod = require.modules[resolved]; - if (!mod) throw new Error( - 'Failed to resolve module ' + file + ', tried ' + resolved - ); - var res = mod._cached ? mod._cached : mod(); - return res; -} - -require.paths = []; -require.modules = {}; -require.extensions = [".js",".coffee"]; - -require._core = { - 'assert': true, - 'events': true, - 'fs': true, - 'path': true, - 'vm': true -}; - -require.resolve = (function () { - return function (x, cwd) { - if (!cwd) cwd = '/'; - - if (require._core[x]) return x; - var path = require.modules.path(); - cwd = path.resolve('/', cwd); - var y = cwd || '/'; - - if (x.match(/^(?:\.\.?\/|\/)/)) { - var m = loadAsFileSync(path.resolve(y, x)) - || loadAsDirectorySync(path.resolve(y, x)); - if (m) return m; - } - - var n = loadNodeModulesSync(x, y); - if (n) return n; - - throw new Error("Cannot find module '" + x + "'"); - - function loadAsFileSync (x) { - if (require.modules[x]) { - return x; - } - - for (var i = 0; i < require.extensions.length; i++) { - var ext = require.extensions[i]; - if (require.modules[x + ext]) return x + ext; - } - } - - function loadAsDirectorySync (x) { - x = x.replace(/\/+$/, ''); - var pkgfile = x + '/package.json'; - if (require.modules[pkgfile]) { - var pkg = require.modules[pkgfile](); - var b = pkg.browserify; - if (typeof b === 'object' && b.main) { - var m = loadAsFileSync(path.resolve(x, b.main)); - if (m) return m; - } - else if (typeof b === 'string') { - var m = loadAsFileSync(path.resolve(x, b)); - if (m) return m; - } - else if (pkg.main) { - var m = loadAsFileSync(path.resolve(x, pkg.main)); - if (m) return m; - } - } - - return loadAsFileSync(x + '/index'); - } - - function loadNodeModulesSync (x, start) { - var dirs = nodeModulesPathsSync(start); - for (var i = 0; i < dirs.length; i++) { - var dir = dirs[i]; - var m = loadAsFileSync(dir + '/' + x); - if (m) return m; - var n = loadAsDirectorySync(dir + '/' + x); - if (n) return n; - } - - var m = loadAsFileSync(x); - if (m) return m; - } - - function nodeModulesPathsSync (start) { - var parts; - if (start === '/') parts = [ '' ]; - else parts = path.normalize(start).split('/'); - - var dirs = []; - for (var i = parts.length - 1; i >= 0; i--) { - if (parts[i] === 'node_modules') continue; - var dir = parts.slice(0, i + 1).join('/') + '/node_modules'; - dirs.push(dir); - } - - return dirs; - } - }; -})(); - -require.alias = function (from, to) { - var path = require.modules.path(); - var res = null; - try { - res = require.resolve(from + '/package.json', '/'); - } - catch (err) { - res = require.resolve(from, '/'); - } - var basedir = path.dirname(res); - - var keys = (Object.keys || function (obj) { - var res = []; - for (var key in obj) res.push(key) - return res; - })(require.modules); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (key.slice(0, basedir.length + 1) === basedir + '/') { - var f = key.slice(basedir.length); - require.modules[to + f] = require.modules[basedir + f]; - } - else if (key === basedir) { - require.modules[to] = require.modules[basedir]; - } - } -}; - -require.define = function (filename, fn) { - var dirname = require._core[filename] - ? '' - : require.modules.path().dirname(filename) - ; - - var require_ = function (file) { - return require(file, dirname) - }; - require_.resolve = function (name) { - return require.resolve(name, dirname); - }; - require_.modules = require.modules; - require_.define = require.define; - var module_ = { exports : {} }; - - require.modules[filename] = function () { - require.modules[filename]._cached = module_.exports; - fn.call( - module_.exports, - require_, - module_, - module_.exports, - dirname, - filename - ); - require.modules[filename]._cached = module_.exports; - return module_.exports; - }; -}; - -if (typeof process === 'undefined') process = {}; - -if (!process.nextTick) process.nextTick = (function () { - var queue = []; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; - - if (canPost) { - window.addEventListener('message', function (ev) { - if (ev.source === window && ev.data === 'browserify-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } - } - }, true); - } - - return function (fn) { - if (canPost) { - queue.push(fn); - window.postMessage('browserify-tick', '*'); - } - else setTimeout(fn, 0); - }; -})(); - -if (!process.title) process.title = 'browser'; - -if (!process.binding) process.binding = function (name) { - if (name === 'evals') return require('vm') - else throw new Error('No such module') -}; - -if (!process.cwd) process.cwd = function () { return '.' }; - -if (!process.env) process.env = {}; -if (!process.argv) process.argv = []; - -require.define("path", function (require, module, exports, __dirname, __filename) { -function filter (xs, fn) { - var res = []; - for (var i = 0; i < xs.length; i++) { - if (fn(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length; i >= 0; i--) { - var last = parts[i]; - if (last == '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; -} - -// Regex to split a filename into [*, dir, basename, ext] -// posix version -var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { -var resolvedPath = '', - resolvedAbsolute = false; - -for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) - ? arguments[i] - : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string' || !path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; -} - -// At this point the path should be resolved to a full absolute path, but -// handle relative paths to be safe (might happen when process.cwd() fails) - -// Normalize the path -resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -exports.normalize = function(path) { -var isAbsolute = path.charAt(0) === '/', - trailingSlash = path.slice(-1) === '/'; - -// Normalize the path -path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - return p && typeof p === 'string'; - }).join('/')); -}; - - -exports.dirname = function(path) { - var dir = splitPathRe.exec(path)[1] || ''; - var isWindows = false; - if (!dir) { - // No dirname - return '.'; - } else if (dir.length === 1 || - (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) { - // It is just a slash or a drive letter with a slash - return dir; - } else { - // It is a full dirname, strip trailing slash - return dir.substring(0, dir.length - 1); - } -}; - - -exports.basename = function(path, ext) { - var f = splitPathRe.exec(path)[2] || ''; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPathRe.exec(path)[3] || ''; -}; - -}); - -require.define("crypto", function (require, module, exports, __dirname, __filename) { -module.exports = require("crypto-browserify") -}); - -require.define("/node_modules/crypto-browserify/package.json", function (require, module, exports, __dirname, __filename) { -module.exports = {} -}); - -require.define("/node_modules/crypto-browserify/index.js", function (require, module, exports, __dirname, __filename) { -var sha = require('./sha') - -var algorithms = { - sha1: { - hex: sha.hex_sha1, - binary: sha.b64_sha1, - ascii: sha.str_sha1 - } -} - -function error () { - var m = [].slice.call(arguments).join(' ') - throw new Error([ - m, - 'we accept pull requests', - 'http://github.com/dominictarr/crypto-browserify' - ].join('\n')) -} - -exports.createHash = function (alg) { - alg = alg || 'sha1' - if(!algorithms[alg]) - error('algorithm:', alg, 'is not yet supported') - var s = '' - _alg = algorithms[alg] - return { - update: function (data) { - s += data - return this - }, - digest: function (enc) { - enc = enc || 'binary' - var fn - if(!(fn = _alg[enc])) - error('encoding:', enc , 'is not yet supported for algorithm', alg) - var r = fn(s) - s = null //not meant to use the hash after you've called digest. - return r - } - } -} -// the least I can do is make error messages for the rest of the node.js/crypto api. -;['createCredentials' -, 'createHmac' -, 'createCypher' -, 'createCypheriv' -, 'createDecipher' -, 'createDecipheriv' -, 'createSign' -, 'createVerify' -, 'createDeffieHellman', -, 'pbkdf2', -, 'randomBytes' ].forEach(function (name) { - exports[name] = function () { - error('sorry,', name, 'is not implemented yet') - } -}) - -}); - -require.define("/node_modules/crypto-browserify/sha.js", function (require, module, exports, __dirname, __filename) { -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined - * in FIPS PUB 180-1 - * Version 2.1a Copyright Paul Johnston 2000 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for details. - */ - -exports.hex_sha1 = hex_sha1; -exports.b64_sha1 = b64_sha1; -exports.str_sha1 = str_sha1; -exports.hex_hmac_sha1 = hex_hmac_sha1; -exports.b64_hmac_sha1 = b64_hmac_sha1; -exports.str_hmac_sha1 = str_hmac_sha1; - -/* - * Configurable variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - */ -var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ -var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ -var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ - -/* - * These are the functions you'll usually want to call - * They take string arguments and return either hex or base-64 encoded strings - */ -function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));} -function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));} -function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));} -function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));} -function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));} -function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));} - -/* - * Perform a simple self-test to see if the VM is working - */ -function sha1_vm_test() -{ - return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d"; -} - -/* - * Calculate the SHA-1 of an array of big-endian words, and a bit length - */ -function core_sha1(x, len) -{ - /* append padding */ - x[len >> 5] |= 0x80 << (24 - len % 32); - x[((len + 64 >> 9) << 4) + 15] = len; - - var w = Array(80); - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - var e = -1009589776; - - for(var i = 0; i < x.length; i += 16) - { - var olda = a; - var oldb = b; - var oldc = c; - var oldd = d; - var olde = e; - - for(var j = 0; j < 80; j++) - { - if(j < 16) w[j] = x[i + j]; - else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); - var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), - safe_add(safe_add(e, w[j]), sha1_kt(j))); - e = d; - d = c; - c = rol(b, 30); - b = a; - a = t; - } - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - e = safe_add(e, olde); - } - return Array(a, b, c, d, e); - -} - -/* - * Perform the appropriate triplet combination function for the current - * iteration - */ -function sha1_ft(t, b, c, d) -{ - if(t < 20) return (b & c) | ((~b) & d); - if(t < 40) return b ^ c ^ d; - if(t < 60) return (b & c) | (b & d) | (c & d); - return b ^ c ^ d; -} - -/* - * Determine the appropriate additive constant for the current iteration - */ -function sha1_kt(t) -{ - return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : - (t < 60) ? -1894007588 : -899497514; -} - -/* - * Calculate the HMAC-SHA1 of a key and some data - */ -function core_hmac_sha1(key, data) -{ - var bkey = str2binb(key); - if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz); - - var ipad = Array(16), opad = Array(16); - for(var i = 0; i < 16; i++) - { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz); - return core_sha1(opad.concat(hash), 512 + 160); -} - -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ -function safe_add(x, y) -{ - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); -} - -/* - * Bitwise rotate a 32-bit number to the left. - */ -function rol(num, cnt) -{ - return (num << cnt) | (num >>> (32 - cnt)); -} - -/* - * Convert an 8-bit or 16-bit string to an array of big-endian words - * In 8-bit function, characters >255 have their hi-byte silently ignored. - */ -function str2binb(str) -{ - var bin = Array(); - var mask = (1 << chrsz) - 1; - for(var i = 0; i < str.length * chrsz; i += chrsz) - bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32); - return bin; -} - -/* - * Convert an array of big-endian words to a string - */ -function binb2str(bin) -{ - var str = ""; - var mask = (1 << chrsz) - 1; - for(var i = 0; i < bin.length * 32; i += chrsz) - str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask); - return str; -} - -/* - * Convert an array of big-endian words to a hex string. - */ -function binb2hex(binarray) -{ - var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; - var str = ""; - for(var i = 0; i < binarray.length * 4; i++) - { - str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + - hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); - } - return str; -} - -/* - * Convert an array of big-endian words to a base-64 string - */ -function binb2b64(binarray) -{ - var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var str = ""; - for(var i = 0; i < binarray.length * 4; i += 3) - { - var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16) - | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) - | ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF); - for(var j = 0; j < 4; j++) - { - if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; - else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); - } - } - return str; -} - - -}); - -require.define("/test.js", function (require, module, exports, __dirname, __filename) { - var crypto = require('crypto') -var abc = crypto.createHash('sha1').update('abc').digest('hex') -console.log(abc) -//require('hello').inlineCall().call2() - -}); -require("/test.js"); diff --git a/truebit-implementation/node_modules/crypto-browserify/example/index.html b/truebit-implementation/node_modules/crypto-browserify/example/index.html deleted file mode 100644 index 9d55c6d7..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/example/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - -
-  require('crypto').createHash('sha1').update('abc').digest('hex') == ''
-  
- - - diff --git a/truebit-implementation/node_modules/crypto-browserify/example/test.js b/truebit-implementation/node_modules/crypto-browserify/example/test.js deleted file mode 100644 index 0b76c015..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/example/test.js +++ /dev/null @@ -1,4 +0,0 @@ -var crypto = require('crypto') -var abc = crypto.createHash('sha1').update('abc').digest('hex') -console.log(abc) -// require('hello').inlineCall().call2() diff --git a/truebit-implementation/node_modules/crypto-browserify/index.js b/truebit-implementation/node_modules/crypto-browserify/index.js deleted file mode 100644 index b6d4d24e..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/index.js +++ /dev/null @@ -1,97 +0,0 @@ -'use strict' - -exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') -exports.createHash = exports.Hash = require('create-hash') -exports.createHmac = exports.Hmac = require('create-hmac') - -var algos = require('browserify-sign/algos') -var algoKeys = Object.keys(algos) -var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) -exports.getHashes = function () { - return hashes -} - -var p = require('pbkdf2') -exports.pbkdf2 = p.pbkdf2 -exports.pbkdf2Sync = p.pbkdf2Sync - -var aes = require('browserify-cipher') - -exports.Cipher = aes.Cipher -exports.createCipher = aes.createCipher -exports.Cipheriv = aes.Cipheriv -exports.createCipheriv = aes.createCipheriv -exports.Decipher = aes.Decipher -exports.createDecipher = aes.createDecipher -exports.Decipheriv = aes.Decipheriv -exports.createDecipheriv = aes.createDecipheriv -exports.getCiphers = aes.getCiphers -exports.listCiphers = aes.listCiphers - -var dh = require('diffie-hellman') - -exports.DiffieHellmanGroup = dh.DiffieHellmanGroup -exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup -exports.getDiffieHellman = dh.getDiffieHellman -exports.createDiffieHellman = dh.createDiffieHellman -exports.DiffieHellman = dh.DiffieHellman - -var sign = require('browserify-sign') - -exports.createSign = sign.createSign -exports.Sign = sign.Sign -exports.createVerify = sign.createVerify -exports.Verify = sign.Verify - -exports.createECDH = require('create-ecdh') - -var publicEncrypt = require('public-encrypt') - -exports.publicEncrypt = publicEncrypt.publicEncrypt -exports.privateEncrypt = publicEncrypt.privateEncrypt -exports.publicDecrypt = publicEncrypt.publicDecrypt -exports.privateDecrypt = publicEncrypt.privateDecrypt - -// the least I can do is make error messages for the rest of the node.js/crypto api. -// ;[ -// 'createCredentials' -// ].forEach(function (name) { -// exports[name] = function () { -// throw new Error([ -// 'sorry, ' + name + ' is not implemented yet', -// 'we accept pull requests', -// 'https://github.com/crypto-browserify/crypto-browserify' -// ].join('\n')) -// } -// }) - -var rf = require('randomfill') - -exports.randomFill = rf.randomFill -exports.randomFillSync = rf.randomFillSync - -exports.createCredentials = function () { - throw new Error([ - 'sorry, createCredentials is not implemented yet', - 'we accept pull requests', - 'https://github.com/crypto-browserify/crypto-browserify' - ].join('\n')) -} - -exports.constants = { - 'DH_CHECK_P_NOT_SAFE_PRIME': 2, - 'DH_CHECK_P_NOT_PRIME': 1, - 'DH_UNABLE_TO_CHECK_GENERATOR': 4, - 'DH_NOT_SUITABLE_GENERATOR': 8, - 'NPN_ENABLED': 1, - 'ALPN_ENABLED': 1, - 'RSA_PKCS1_PADDING': 1, - 'RSA_SSLV23_PADDING': 2, - 'RSA_NO_PADDING': 3, - 'RSA_PKCS1_OAEP_PADDING': 4, - 'RSA_X931_PADDING': 5, - 'RSA_PKCS1_PSS_PADDING': 6, - 'POINT_CONVERSION_COMPRESSED': 2, - 'POINT_CONVERSION_UNCOMPRESSED': 4, - 'POINT_CONVERSION_HYBRID': 6 -} diff --git a/truebit-implementation/node_modules/crypto-browserify/package.json b/truebit-implementation/node_modules/crypto-browserify/package.json deleted file mode 100644 index e4050490..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "crypto-browserify@3.12.0", - "_id": "crypto-browserify@3.12.0", - "_inBundle": false, - "_integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "_location": "/crypto-browserify", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "crypto-browserify@3.12.0", - "name": "crypto-browserify", - "escapedName": "crypto-browserify", - "rawSpec": "3.12.0", - "saveSpec": null, - "fetchSpec": "3.12.0" - }, - "_requiredBy": [ - "/web3-eth-accounts" - ], - "_resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "_shasum": "396cf9f3137f03e4b8e532c58f698254e00f80ec", - "_spec": "crypto-browserify@3.12.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth-accounts", - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "browser": { - "crypto": false - }, - "bugs": { - "url": "https://github.com/crypto-browserify/crypto-browserify/issues" - }, - "bundleDependencies": false, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "deprecated": false, - "description": "implementation of crypto for the browser", - "devDependencies": { - "hash-test-vectors": "~1.3.2", - "pseudorandombytes": "^2.0.0", - "safe-buffer": "^5.1.1", - "standard": "^5.0.2", - "tape": "~2.3.2", - "zuul": "^3.6.0" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/crypto-browserify/crypto-browserify", - "license": "MIT", - "name": "crypto-browserify", - "optionalDependencies": {}, - "repository": { - "type": "git", - "url": "git://github.com/crypto-browserify/crypto-browserify.git" - }, - "scripts": { - "browser": "zuul --browser-version $BROWSER_VERSION --browser-name $BROWSER_NAME -- test/index.js", - "standard": "standard", - "test": "npm run standard && npm run unit", - "unit": "node test/" - }, - "version": "3.12.0" -} diff --git a/truebit-implementation/node_modules/crypto-browserify/test/aes.js b/truebit-implementation/node_modules/crypto-browserify/test/aes.js deleted file mode 100644 index 916a0192..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/aes.js +++ /dev/null @@ -1,49 +0,0 @@ -var test = require('tape') -var crypto = require('browserify-cipher/browser') -var randomBytes = require('pseudorandombytes') - -function runIt (i) { - crypto.listCiphers().forEach(function (cipher) { - test('run: ' + i, function (t) { - t.test('ciphers: ' + cipher, function (t) { - t.plan(1) - var data = randomBytes(562) - var password = randomBytes(20) - var crypter = crypto.createCipher(cipher, password) - var decrypter = crypto.createDecipher(cipher, password) - var out = [] - out.push(decrypter.update(crypter.update(data))) - out.push(decrypter.update(crypter.final())) - if (cipher.indexOf('gcm') > -1) { - decrypter.setAuthTag(crypter.getAuthTag()) - } - out.push(decrypter.final()) - t.equals(data.toString('hex'), Buffer.concat(out).toString('hex')) - }) - }) - }) - if (i < 4) { - setTimeout(runIt, 0, i + 1) - } -} -runIt(1) -test('getCiphers', function (t) { - t.plan(1) - t.ok(crypto.getCiphers().length, 'get ciphers returns an array') -}) - -test('through crypto browserify works', function (t) { - t.plan(2) - var crypto = require('../') - var cipher = 'aes-128-ctr' - var data = randomBytes(562) - var password = randomBytes(20) - var crypter = crypto.createCipher(cipher, password) - var decrypter = crypto.createDecipher(cipher, password) - var out = [] - out.push(decrypter.update(crypter.update(data))) - out.push(decrypter.update(crypter.final())) - out.push(decrypter.final()) - t.equals(data.toString('hex'), Buffer.concat(out).toString('hex')) - t.ok(crypto.getCiphers().length, 'get ciphers returns an array') -}) diff --git a/truebit-implementation/node_modules/crypto-browserify/test/create-hash.js b/truebit-implementation/node_modules/crypto-browserify/test/create-hash.js deleted file mode 100644 index 33532fd7..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/create-hash.js +++ /dev/null @@ -1,50 +0,0 @@ -var test = require('tape') - -var algorithms = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'] -var encodings = ['hex', 'base64'] // FIXME: test binary -var vectors = require('hash-test-vectors') - -testLib('createHash in crypto-browserify', require('../').createHash) -testLib('create-hash/browser', require('create-hash/browser')) - -function testLib (name, createHash) { - algorithms.forEach(function (algorithm) { - runTest(name, createHash, algorithm) - }) -} -function runTest (name, createHash, algorithm) { - test(name + ' test ' + algorithm + ' against test vectors', function (t) { - run(0) - function run (i) { - if (i >= vectors.length) { - return t.end() - } - var obj = vectors[i] - - var input = new Buffer(obj.input, 'base64') - var node = obj[algorithm] - var js = createHash(algorithm).update(input).digest('hex') - if (js !== node) { - t.equal(js, node, algorithm + '(testVector[' + i + ']) == ' + node) - } - - encodings.forEach(function (encoding) { - var input = new Buffer(obj.input, 'base64').toString(encoding) - var node = obj[algorithm] - var js = createHash(algorithm).update(input, encoding).digest('hex') - if (js !== node) { - t.equal(js, node, algorithm + '(testVector[' + i + '], ' + encoding + ') == ' + node) - } - }) - input = new Buffer(obj.input, 'base64') - node = obj[algorithm] - var hash = createHash(algorithm) - hash.end(input) - js = hash.read().toString('hex') - if (js !== node) { - t.equal(js, node, algorithm + '(testVector[' + i + ']) == ' + node) - } - setTimeout(run, 0, i + 1) - } - }) -} diff --git a/truebit-implementation/node_modules/crypto-browserify/test/create-hmac.js b/truebit-implementation/node_modules/crypto-browserify/test/create-hmac.js deleted file mode 100644 index 08488ab7..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/create-hmac.js +++ /dev/null @@ -1,50 +0,0 @@ -var test = require('tape') - -var algorithms = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'] -var vectors = require('hash-test-vectors/hmac') -testLib('createHmac in crypto-browserify', require('../').createHmac) -testLib('create-hmac/browser', require('create-hmac/browser')) - -function testLib (name, createHmac) { - algorithms.forEach(function (alg) { - test(name + ' hmac(' + alg + ')', function (t) { - run(0) - function run (i) { - if (i >= vectors.length) { - return t.end() - } - var input = vectors[i] - var output = createHmac(alg, new Buffer(input.key, 'hex')) - .update(input.data, 'hex').digest() - - output = input.truncate ? output.slice(0, input.truncate) : output - output = output.toString('hex') - if (output !== input[alg]) { - t.equal(output, input[alg]) - } - setTimeout(run, 0, i + 1) - } - }) - - test('hmac(' + alg + ')', function (t) { - run(0) - function run (i) { - if (i >= vectors.length) { - return t.end() - } - var input = vectors[i] - var hmac = createHmac(alg, new Buffer(input.key, 'hex')) - - hmac.end(input.data, 'hex') - var output = hmac.read() - - output = input.truncate ? output.slice(0, input.truncate) : output - output = output.toString('hex') - if (output !== input[alg]) { - t.equal(output, input[alg]) - } - setTimeout(run, 0, i + 1) - } - }) - }) -} diff --git a/truebit-implementation/node_modules/crypto-browserify/test/dh.js b/truebit-implementation/node_modules/crypto-browserify/test/dh.js deleted file mode 100644 index 61fd0744..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/dh.js +++ /dev/null @@ -1,49 +0,0 @@ -var test = require('tape') -var crypto = require('diffie-hellman/browser') - -test('diffie-hellman mod groups', function (t) { - [ - 'modp1', 'modp2', 'modp5', 'modp14', 'modp15', 'modp16' - ].forEach(function (mod) { - t.test(mod, function (t) { - t.plan(3) - var dh1 = crypto.getDiffieHellman(mod) - var p1 = dh1.getPrime().toString('hex') - dh1.generateKeys() - var dh2 = crypto.getDiffieHellman(mod) - var p2 = dh2.getPrime().toString('hex') - dh2.generateKeys() - t.equals(p1, p2, 'equal primes') - var pubk1 = dh1.getPublicKey() - var pubk2 = dh2.getPublicKey() - t.notEquals(pubk1, pubk2, 'diff public keys') - var pub1 = dh1.computeSecret(pubk2).toString('hex') - var pub2 = dh2.computeSecret(dh1.getPublicKey()).toString('hex') - t.equals(pub1, pub2, 'equal secrets') - }) - }) -}) - -test('diffie-hellman key lengths', function (t) { - [ - 64, 65, 192 - ].forEach(function (len) { - t.test('' + len, function (t) { - t.plan(3) - var dh2 = crypto.createDiffieHellman(len) - var prime2 = dh2.getPrime() - var p2 = prime2.toString('hex') - var dh1 = crypto.createDiffieHellman(prime2) - var p1 = dh1.getPrime().toString('hex') - dh1.generateKeys() - dh2.generateKeys() - t.equals(p1, p2, 'equal primes') - var pubk1 = dh1.getPublicKey() - var pubk2 = dh2.getPublicKey() - t.notEquals(pubk1, pubk2, 'diff public keys') - var pub1 = dh1.computeSecret(pubk2).toString('hex') - var pub2 = dh2.computeSecret(dh1.getPublicKey()).toString('hex') - t.equals(pub1, pub2, 'equal secrets') - }) - }) -}) diff --git a/truebit-implementation/node_modules/crypto-browserify/test/ecdh.js b/truebit-implementation/node_modules/crypto-browserify/test/ecdh.js deleted file mode 100644 index 86b5aed5..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/ecdh.js +++ /dev/null @@ -1,61 +0,0 @@ -var mods = [ - 'secp256k1', - 'secp224r1', - 'prime256v1', - 'prime192v1' -] -var test = require('tape') -var _crypto = require('../') -var createECDH1 = _crypto.createECDH -var createECDH2 = require('create-ecdh/browser') - -mods.forEach(function (mod) { - test('createECDH: ' + mod + ' uncompressed', function (t) { - t.plan(2) - var dh1 = createECDH1(mod) - dh1.generateKeys() - var dh2 = createECDH2(mod) - dh2.generateKeys() - var pubk1 = dh1.getPublicKey() - var pubk2 = dh2.getPublicKey() - t.notEquals(pubk1.toString('hex'), pubk2.toString('hex'), 'diff public keys') - var pub1 = dh1.computeSecret(pubk2).toString('hex') - var pub2 = dh2.computeSecret(pubk1).toString('hex') - t.equals(pub1, pub2, 'equal secrets') - }) - - test('createECDH: ' + mod + ' compressed', function (t) { - t.plan(2) - var dh1 = createECDH1(mod) - dh1.generateKeys() - var dh2 = createECDH2(mod) - dh2.generateKeys() - var pubk1 = dh1.getPublicKey(null, 'compressed') - var pubk2 = dh2.getPublicKey(null, 'compressed') - t.notEquals(pubk1.toString('hex'), pubk2.toString('hex'), 'diff public keys') - var pub1 = dh1.computeSecret(pubk2).toString('hex') - var pub2 = dh2.computeSecret(pubk1).toString('hex') - t.equals(pub1, pub2, 'equal secrets') - }) - - test('createECDH: ' + mod + ' set stuff', function (t) { - t.plan(5) - var dh1 = createECDH1(mod) - var dh2 = createECDH2(mod) - dh1.generateKeys() - dh2.generateKeys() - dh1.setPrivateKey(dh2.getPrivateKey()) - dh1.setPublicKey(dh2.getPublicKey()) - var priv1 = dh1.getPrivateKey('hex') - var priv2 = dh2.getPrivateKey('hex') - t.equals(priv1, priv2, 'same private key') - var pubk1 = dh1.getPublicKey() - var pubk2 = dh2.getPublicKey() - t.equals(pubk1.toString('hex'), pubk2.toString('hex'), 'same public keys, uncompressed') - t.equals(dh1.getPublicKey('hex', 'compressed'), dh2.getPublicKey('hex', 'compressed'), 'same public keys compressed') - t.equals(dh1.getPublicKey('hex', 'hybrid'), dh2.getPublicKey('hex', 'hybrid'), 'same public keys hybrid') - var pub1 = dh1.computeSecret(pubk2).toString('hex') - var pub2 = dh2.computeSecret(pubk1).toString('hex') - t.equals(pub1, pub2, 'equal secrets') - }) -}) diff --git a/truebit-implementation/node_modules/crypto-browserify/test/index.js b/truebit-implementation/node_modules/crypto-browserify/test/index.js deleted file mode 100644 index 2ac70944..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/index.js +++ /dev/null @@ -1,19 +0,0 @@ - -require('./create-hash') -require('./create-hmac') -if (!process.browser) { - require('./dh') -} - -require('./pbkdf2') -try { - require('randombytes')(8) - require('./ecdh') - require('./public-encrypt') - require('./random-bytes') - require('./sign') - require('./random-fill') -} catch (e) { - console.log('no secure rng avaiable') -} -require('./aes') diff --git a/truebit-implementation/node_modules/crypto-browserify/test/node/dh.js b/truebit-implementation/node_modules/crypto-browserify/test/node/dh.js deleted file mode 100644 index 0b3aa710..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/node/dh.js +++ /dev/null @@ -1,51 +0,0 @@ -var test = require('tape') -var cryptoB = require('../../') -var crypto = require('crypto') - -test('diffie-hellman mod groups', function (t) { - [ - 'modp1', 'modp2', 'modp5', 'modp14', 'modp15', 'modp16' - ].forEach(function (mod) { - t.test(mod, function (t) { - t.plan(3) - var dh1 = cryptoB.getDiffieHellman(mod) - var p1 = dh1.getPrime().toString('hex') - dh1.generateKeys() - - var dh2 = crypto.getDiffieHellman(mod) - var p2 = dh2.getPrime().toString('hex') - dh2.generateKeys() - t.equals(p1, p2, 'equal primes') - var pubk1 = dh1.getPublicKey() - var pubk2 = dh2.getPublicKey() - t.notEquals(pubk1, pubk2, 'diff public keys') - var pub1 = dh1.computeSecret(pubk2).toString('hex') - var pub2 = dh2.computeSecret(pubk1).toString('hex') - t.equals(pub1, pub2, 'equal secrets') - }) - }) -}) - -test('diffie-hellman key lengths', function (t) { - [ - 64, 65, 192 - ].forEach(function (len) { - t.test('' + len, function (t) { - t.plan(3) - var dh2 = cryptoB.createDiffieHellman(len) - var prime2 = dh2.getPrime() - var p2 = prime2.toString('hex') - var dh1 = crypto.createDiffieHellman(prime2) - var p1 = dh1.getPrime().toString('hex') - dh1.generateKeys() - dh2.generateKeys() - t.equals(p1, p2, 'equal primes') - var pubk1 = dh1.getPublicKey() - var pubk2 = dh2.getPublicKey() - t.notEquals(pubk1, pubk2, 'diff public keys') - var pub1 = dh1.computeSecret(pubk2).toString('hex') - var pub2 = dh2.computeSecret(dh1.getPublicKey()).toString('hex') - t.equals(pub1, pub2, 'equal secrets') - }) - }) -}) diff --git a/truebit-implementation/node_modules/crypto-browserify/test/pbkdf2.js b/truebit-implementation/node_modules/crypto-browserify/test/pbkdf2.js deleted file mode 100644 index 084014ee..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/pbkdf2.js +++ /dev/null @@ -1,21 +0,0 @@ -var tape = require('tape') -var crypto = require('pbkdf2/browser') - -var vectors = require('hash-test-vectors/pbkdf2') - -tape('pbkdf2', function (t) { - vectors.forEach(function (input) { - // skip inputs that will take way too long - if (input.iterations > 10000) return - - var key = crypto.pbkdf2Sync(input.password, input.salt, input.iterations, input.length) - - if (key.toString('hex') !== input.sha1) { - console.log(input) - } - - t.equal(key.toString('hex'), input.sha1) - }) - - t.end() -}) diff --git a/truebit-implementation/node_modules/crypto-browserify/test/public-encrypt.js b/truebit-implementation/node_modules/crypto-browserify/test/public-encrypt.js deleted file mode 100644 index edb435c9..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/public-encrypt.js +++ /dev/null @@ -1,36 +0,0 @@ -var test = require('tape') -var crypto1 = require('../') -var rsa = { - 'private': '2d2d2d2d2d424547494e205253412050524956415445204b45592d2d2d2d2d0a4d4949456a77494241414b422f6779376d6a615767506546645659445a5752434139424e69763370506230657332372b464b593068737a4c614f7734374578430a744157704473483438545841667948425977424c67756179666b344c4749757078622b43474d62526f337845703043626659314a62793236543976476a5243310a666f484444554a4738347561526279487161663469367a74346756522b786c4145496a6b614641414b38634f6f58415431435671474c4c6c6a554363684c38500a6a61486a2f7972695a2f53377264776c49334c6e41427877776d4c726d522f7637315774706d4f2f614e47384e2b31706f2b5177616768546b79513539452f5a0a7641754f6b4657486f6b32712f523650594161326a645a397a696d3046714f502b6e6b5161454452624246426d4271547635664647666b32577341664b662f520a47302f5646642b5a654d353235315465547658483639356e6c53476175566c3941674d42414145436766344c725748592f6c35346f7554685a577676627275670a70667a36734a583267396c3779586d576c455773504543566f2f375355627059467074364f5a7939397a53672b494b624771574b6664686f4b725477495674430a4c30595a304e6c6d646e414e53497a30726f785147375a786b4c352b764853772f506d443978345577662b437a38684154436d4e42763171633630646b7975570a34434c71653732716154695657526f4f316961675167684e634c6f6f36765379363545784c614344545068613779753276773468465a705769456a57346478660a7246644c696978353242433836596c416c784d452f724c6738494a5676696c62796f39615764586d784f6155544c527636506b4644312f6756647738563951720a534c4e39466c4b326b6b6a695830647a6f6962765a7733744d6e74337979644178305838372b734d5256616843316270336b56507a3448793045575834514a2f0a504d33317647697549546b324e43643531445874314c746e324f503546614a536d4361456a6830586b5534716f7559796a585774384275364254436c327675610a466730556a6939432b496b504c6d61554d624d494f7761546b386357714c74685378734c6537304a354f6b477267664b554d2f772b4248483150742f506a7a6a0a432b2b6c306b6946614f5644566141563947704c504c43426f4b2f50433952622f72784d4d6f43434e774a2f4e5a756564496e793277334c4d69693737682f540a7a53766572674e47686a5936526e7661386c4c584a36646c726b6350417970733367577778716a344e5230542b474d3062445550564c62374d303758563753580a7637564a476d35324a625247774d3173732b72385854544e656d65476b2b5752784737546774734d715947584c66423851786b2f66352f4d63633030546c38750a7758464e7366784a786d7436416273547233673336774a2f49684f6e69627a3941642b6e63686c426e4e3351655733434b48717a61523138766f717674566d320a6b4a66484b31357072482f7353476d786d6945476772434a545a78744462614e434f372f56426a6e4b756455554968434177734c747571302f7a7562397641640a384731736366497076357161534e7a6d4b6f5838624f77417276725336775037794b726354737557496c484438724a5649374945446e516f5470354738664b310a68774a2f4d4968384d35763072356455594576366f494a5747636c65364148314a6d73503557496166677137325a32323838704863434648774e59384467394a0a3736517377564c6e556850546c6d6d33454f4f50474574616d32694144357230416679746c62346c624e6f51736a32737a65584f4e4458422b366f7565616a680a564e454c55723848635350356c677a525a6a4a57366146497a6a394c44526d516e55414f6a475358564f517445774a2f4d43515a374e2f763464494b654452410a3864385545785a332b674748756d7a697a7447524a30745172795a483250616b50354937562b316c377145556e4a3263336d462b65317634314570394c4376680a627a72504b773964786831386734622b37624d707357506e7372614b6836697078633761614f615a5630447867657a347a635a753050316f6c4f30634e334b4d0a6e784a305064733352386241684e43446453324a5a61527035513d3d0a2d2d2d2d2d454e44205253412050524956415445204b45592d2d2d2d2d0a', - 'public': '2d2d2d2d2d424547494e20525341205055424c4943204b45592d2d2d2d2d0a4d49494242674b422f6779376d6a615767506546645659445a5752434139424e69763370506230657332372b464b593068737a4c614f773437457843744157700a4473483438545841667948425977424c67756179666b344c4749757078622b43474d62526f337845703043626659314a62793236543976476a524331666f48440a44554a4738347561526279487161663469367a74346756522b786c4145496a6b614641414b38634f6f58415431435671474c4c6c6a554363684c38506a61486a0a2f7972695a2f53377264776c49334c6e41427877776d4c726d522f7637315774706d4f2f614e47384e2b31706f2b5177616768546b79513539452f5a7641754f0a6b4657486f6b32712f523650594161326a645a397a696d3046714f502b6e6b5161454452624246426d4271547635664647666b32577341664b662f5247302f560a46642b5a654d353235315465547658483639356e6c53476175566c3941674d424141453d0a2d2d2d2d2d454e4420525341205055424c4943204b45592d2d2d2d2d0a' -} -var crypto2 = require('public-encrypt/browser') -rsa.private = new Buffer(rsa.private, 'hex') -rsa.public = new Buffer(rsa.public, 'hex') -var encrypted = '0bcd6462ad7a563be2d42b0b73e0b0a163886304e7723b025f97605144fe1781e84acdc4031327d6bccd67fe13183e8fbdc8c5fe947b49d011ce3ebb08b11e83b87a77328ca57ee77cfdc78743b0749366643d7a21b2abcd4aa32dee9832938445540ee3007b7a70191c8dc9ff2ad76fe8dfaa5362d9d2c4b31a67b816d7b7970a293cb95bf3437a301bedb9f431b7075aa2f9df77b4385bea2a37982beda467260b384a58258b5eb4e36a0e0bf7dff83589636f5f97bf542084f0f76868c9f3f989a27fee5b8cd2bfee0bae1eae958df7c3184e5a40fda101196214f371606feca4330b221f30577804bbd4f61578a84e85dcd298849f509e630d275280' - -test('publicEncrypt/privateDecrypt', function (t) { - t.test('can decrypt', function (t) { - t.plan(2) - // note encryption is ranomized so can't test to see if they encrypt the same - t.equals(crypto1.privateDecrypt(rsa.private, new Buffer(encrypted, 'hex')).toString(), 'hello there I am a nice message', 'decrypt it properly') - t.equals(crypto2.privateDecrypt(rsa.private, new Buffer(encrypted, 'hex')).toString(), 'hello there I am a nice message', 'decrypt it properly') - }) - t.test('can round trip', function (t) { - t.plan(2) - var msg = 'this is a message' - // note encryption is ranomized so can't test to see if they encrypt the same - t.equals(crypto1.privateDecrypt(rsa.private, crypto2.publicEncrypt(rsa.public, new Buffer(msg))).toString(), msg, 'round trip it') - t.equals(crypto2.privateDecrypt(rsa.private, crypto1.publicEncrypt(rsa.public, new Buffer(msg))).toString(), msg, 'round trip it') - }) -}) - -test('privateEncrypt/publicDecrypt', function (t) { - t.test('can round trip', function (t) { - t.plan(2) - var msg = 'this is a message' - // note encryption is ranomized so can't test to see if they encrypt the same - t.equals(crypto1.publicDecrypt(rsa.public, crypto2.privateEncrypt(rsa.private, new Buffer(msg))).toString(), msg, 'round trip it') - t.equals(crypto2.publicDecrypt(rsa.public, crypto1.privateEncrypt(rsa.private, new Buffer(msg))).toString(), msg, 'round trip it') - }) -}) diff --git a/truebit-implementation/node_modules/crypto-browserify/test/random-bytes.js b/truebit-implementation/node_modules/crypto-browserify/test/random-bytes.js deleted file mode 100644 index 398af24a..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/random-bytes.js +++ /dev/null @@ -1,60 +0,0 @@ -var test = require('tape') -var crypto = require('../') - -var randomBytesFunctions = { - randomBytes: require('randombytes'), - pseudoRandomBytes: crypto.pseudoRandomBytes -} - -for (var randomBytesName in randomBytesFunctions) { - // Both randomBytes and pseudoRandomBytes should provide the same interface - var randomBytes = randomBytesFunctions[randomBytesName] - - test('get error message', function (t) { - try { - var b = randomBytes(10) - t.ok(Buffer.isBuffer(b)) - t.end() - } catch (err) { - t.ok(/not supported/.test(err.message), '"not supported" is in error message') - t.end() - } - }) - - test(randomBytesName, function (t) { - t.plan(5) - t.equal(randomBytes(10).length, 10) - t.ok(Buffer.isBuffer(randomBytes(10))) - randomBytes(10, function (ex, bytes) { - t.error(ex) - t.equal(bytes.length, 10) - t.ok(Buffer.isBuffer(bytes)) - t.end() - }) - }) - - test(randomBytesName + ' seem random', function (t) { - var L = 1000 - var b = randomBytes(L) - - var mean = [].reduce.call(b, function (a, b) { return a + b }, 0) / L - - // test that the random numbers are plausably random. - // Math.random() will pass this, but this will catch - // terrible mistakes such as this blunder: - // https://github.com/dominictarr/crypto-browserify/commit/3267955e1df7edd1680e52aeede9a89506ed2464#commitcomment-7916835 - - // this doesn't check that the bytes are in a random *order* - // but it's better than nothing. - - var expected = 256 / 2 - var smean = Math.sqrt(mean) - - // console.log doesn't work right on testling, *grumble grumble* - console.log(JSON.stringify([expected - smean, mean, expected + smean])) - t.ok(mean < expected + smean) - t.ok(mean > expected - smean) - - t.end() - }) -} diff --git a/truebit-implementation/node_modules/crypto-browserify/test/random-fill.js b/truebit-implementation/node_modules/crypto-browserify/test/random-fill.js deleted file mode 100644 index 63c885ad..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/random-fill.js +++ /dev/null @@ -1,53 +0,0 @@ -var test = require('tape') -var crypto = require('../') -var Buffer = require('safe-buffer').Buffer - -test('get error message', function (t) { - try { - var b = crypto.randomFillSync(Buffer.alloc(10)) - t.ok(Buffer.isBuffer(b)) - t.end() - } catch (err) { - t.ok(/not supported/.test(err.message), '"not supported" is in error message') - t.end() - } -}) - -test('randomfill', function (t) { - t.plan(5) - t.equal(crypto.randomFillSync(Buffer.alloc(10)).length, 10) - t.ok(Buffer.isBuffer(crypto.randomFillSync(Buffer.alloc(10)))) - crypto.randomFill(Buffer.alloc(10), function (ex, bytes) { - t.error(ex) - t.equal(bytes.length, 10) - t.ok(Buffer.isBuffer(bytes)) - t.end() - }) -}) - -test('seems random', function (t) { - var L = 1000 - var b = crypto.randomFillSync(Buffer.alloc(L)) - - var mean = [].reduce.call(b, function (a, b) { - return a + b - }, 0) / L - - // test that the random numbers are plausably random. - // Math.random() will pass this, but this will catch - // terrible mistakes such as this blunder: - // https://github.com/dominictarr/crypto-browserify/commit/3267955e1df7edd1680e52aeede9a89506ed2464#commitcomment-7916835 - - // this doesn't check that the bytes are in a random *order* - // but it's better than nothing. - - var expected = 256 / 2 - var smean = Math.sqrt(mean) - - // console.log doesn't work right on testling, *grumble grumble* - console.log(JSON.stringify([expected - smean, mean, expected + smean])) - t.ok(mean < expected + smean) - t.ok(mean > expected - smean) - - t.end() -}) diff --git a/truebit-implementation/node_modules/crypto-browserify/test/sign.js b/truebit-implementation/node_modules/crypto-browserify/test/sign.js deleted file mode 100644 index 7d67685c..00000000 --- a/truebit-implementation/node_modules/crypto-browserify/test/sign.js +++ /dev/null @@ -1,59 +0,0 @@ -var test = require('tape') -var nodeCrypto = require('../') -var ourCrypto = require('browserify-sign/browser') - -var rsa = { - 'private': '2d2d2d2d2d424547494e205253412050524956415445204b45592d2d2d2d2d0a4d4949456a77494241414b422f6779376d6a615767506546645659445a5752434139424e69763370506230657332372b464b593068737a4c614f7734374578430a744157704473483438545841667948425977424c67756179666b344c4749757078622b43474d62526f337845703043626659314a62793236543976476a5243310a666f484444554a4738347561526279487161663469367a74346756522b786c4145496a6b614641414b38634f6f58415431435671474c4c6c6a554363684c38500a6a61486a2f7972695a2f53377264776c49334c6e41427877776d4c726d522f7637315774706d4f2f614e47384e2b31706f2b5177616768546b79513539452f5a0a7641754f6b4657486f6b32712f523650594161326a645a397a696d3046714f502b6e6b5161454452624246426d4271547635664647666b32577341664b662f520a47302f5646642b5a654d353235315465547658483639356e6c53476175566c3941674d42414145436766344c725748592f6c35346f7554685a577676627275670a70667a36734a583267396c3779586d576c455773504543566f2f375355627059467074364f5a7939397a53672b494b624771574b6664686f4b725477495674430a4c30595a304e6c6d646e414e53497a30726f785147375a786b4c352b764853772f506d443978345577662b437a38684154436d4e42763171633630646b7975570a34434c71653732716154695657526f4f316961675167684e634c6f6f36765379363545784c614344545068613779753276773468465a705769456a57346478660a7246644c696978353242433836596c416c784d452f724c6738494a5676696c62796f39615764586d784f6155544c527636506b4644312f6756647738563951720a534c4e39466c4b326b6b6a695830647a6f6962765a7733744d6e74337979644178305838372b734d5256616843316270336b56507a3448793045575834514a2f0a504d33317647697549546b324e43643531445874314c746e324f503546614a536d4361456a6830586b5534716f7559796a585774384275364254436c327675610a466730556a6939432b496b504c6d61554d624d494f7761546b386357714c74685378734c6537304a354f6b477267664b554d2f772b4248483150742f506a7a6a0a432b2b6c306b6946614f5644566141563947704c504c43426f4b2f50433952622f72784d4d6f43434e774a2f4e5a756564496e793277334c4d69693737682f540a7a53766572674e47686a5936526e7661386c4c584a36646c726b6350417970733367577778716a344e5230542b474d3062445550564c62374d303758563753580a7637564a476d35324a625247774d3173732b72385854544e656d65476b2b5752784737546774734d715947584c66423851786b2f66352f4d63633030546c38750a7758464e7366784a786d7436416273547233673336774a2f49684f6e69627a3941642b6e63686c426e4e3351655733434b48717a61523138766f717674566d320a6b4a66484b31357072482f7353476d786d6945476772434a545a78744462614e434f372f56426a6e4b756455554968434177734c747571302f7a7562397641640a384731736366497076357161534e7a6d4b6f5838624f77417276725336775037794b726354737557496c484438724a5649374945446e516f5470354738664b310a68774a2f4d4968384d35763072356455594576366f494a5747636c65364148314a6d73503557496166677137325a32323838704863434648774e59384467394a0a3736517377564c6e556850546c6d6d33454f4f50474574616d32694144357230416679746c62346c624e6f51736a32737a65584f4e4458422b366f7565616a680a564e454c55723848635350356c677a525a6a4a57366146497a6a394c44526d516e55414f6a475358564f517445774a2f4d43515a374e2f763464494b654452410a3864385545785a332b674748756d7a697a7447524a30745172795a483250616b50354937562b316c377145556e4a3263336d462b65317634314570394c4376680a627a72504b773964786831386734622b37624d707357506e7372614b6836697078633761614f615a5630447867657a347a635a753050316f6c4f30634e334b4d0a6e784a305064733352386241684e43446453324a5a61527035513d3d0a2d2d2d2d2d454e44205253412050524956415445204b45592d2d2d2d2d0a', - 'public': '2d2d2d2d2d424547494e20525341205055424c4943204b45592d2d2d2d2d0a4d49494242674b422f6779376d6a615767506546645659445a5752434139424e69763370506230657332372b464b593068737a4c614f773437457843744157700a4473483438545841667948425977424c67756179666b344c4749757078622b43474d62526f337845703043626659314a62793236543976476a524331666f48440a44554a4738347561526279487161663469367a74346756522b786c4145496a6b614641414b38634f6f58415431435671474c4c6c6a554363684c38506a61486a0a2f7972695a2f53377264776c49334c6e41427877776d4c726d522f7637315774706d4f2f614e47384e2b31706f2b5177616768546b79513539452f5a7641754f0a6b4657486f6b32712f523650594161326a645a397a696d3046714f502b6e6b5161454452624246426d4271547635664647666b32577341664b662f5247302f560a46642b5a654d353235315465547658483639356e6c53476175566c3941674d424141453d0a2d2d2d2d2d454e4420525341205055424c4943204b45592d2d2d2d2d0a' -} - -var ec = { - 'private': '2d2d2d2d2d424547494e2045432050524956415445204b45592d2d2d2d2d0a4d485143415145454944463658763853762f2f77475557442b6337383070704772553051645a5743417a78415150515838722f756f416347425375424241414b0a6f55514451674145495a656f7744796c6c73344b2f7766426a4f313862596f37674778386e595152696a6134652f71454d696b4f484a616937676565557265550a7235586b792f4178377332644774656773504e7350674765354d705176673d3d0a2d2d2d2d2d454e442045432050524956415445204b45592d2d2d2d2d0a', - 'public': '2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f4451674145495a656f7744796c6c73344b2f7766426a4f313862596f37674778386e5951520a696a6134652f71454d696b4f484a616937676565557265557235586b792f4178377332644774656773504e7350674765354d705176673d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a' -} - -rsa.private = new Buffer(rsa.private, 'hex') -rsa.public = new Buffer(rsa.public, 'hex') -ec.private = new Buffer(ec.private, 'hex') -ec.public = new Buffer(ec.public, 'hex') - -function testit (keys, message, scheme) { - var pub = keys.public - var priv = keys.private - test(message.toString(), function (t) { - t.test('js sign and verify', function (t) { - t.plan(t) - var mySign = ourCrypto.createSign(scheme) - var mySig = mySign.update(message).sign(priv) - var myVer = ourCrypto.createVerify(scheme) - t.ok(myVer.update(message).verify(pub, mySig), 'validates') - }) - - t.test('node sign and verify', function (t) { - t.plan(t) - var mySign = nodeCrypto.createSign(scheme) - var mySig = mySign.update(message).sign(priv) - var myVer = nodeCrypto.createVerify(scheme) - t.ok(myVer.update(message).verify(pub, mySig), 'validates') - }) - - t.test('node sign and js verify', function (t) { - t.plan(t) - var mySign = nodeCrypto.createSign(scheme) - var mySig = mySign.update(message).sign(priv) - var myVer = ourCrypto.createVerify(scheme) - t.ok(myVer.update(message).verify(pub, mySig), 'validates') - }) - - t.test('js sign and node verify', function (t) { - t.plan(t) - var mySign = ourCrypto.createSign(scheme) - var mySig = mySign.update(message).sign(priv) - var myVer = nodeCrypto.createVerify(scheme) - t.ok(myVer.update(message).verify(pub, mySig), 'validates') - }) - }) -} - -testit(rsa, new Buffer('rsa with sha256'), 'RSA-SHA256') -testit(ec, new Buffer('ec with sha1'), 'ecdsa-with-SHA1') diff --git a/truebit-implementation/node_modules/dashdash/CHANGES.md b/truebit-implementation/node_modules/dashdash/CHANGES.md deleted file mode 100644 index d7c8f4eb..00000000 --- a/truebit-implementation/node_modules/dashdash/CHANGES.md +++ /dev/null @@ -1,364 +0,0 @@ -# node-dashdash changelog - -## not yet released - -(nothing yet) - -## 1.14.1 - -- [issue #30] Change the output used by dashdash's Bash completion support to - indicate "there are no completions for this argument" to cope with different - sorting rules on different Bash/platforms. For example: - - $ triton -v -p test2 package get # before - ##-no -tritonpackage- completions-## - - $ triton -v -p test2 package get # after - ##-no-completion- -results-## - -## 1.14.0 - -- New `synopsisFromOpt(
@trentmick -for updates to node-dashdash. - -# Install - - npm install dashdash - - -# Usage - -```javascript -var dashdash = require('dashdash'); - -// Specify the options. Minimally `name` (or `names`) and `type` -// must be given for each. -var options = [ - { - // `names` or a single `name`. First element is the `opts.KEY`. - names: ['help', 'h'], - // See "Option specs" below for types. - type: 'bool', - help: 'Print this help and exit.' - } -]; - -// Shortcut form. As called it infers `process.argv`. See below for -// the longer form to use methods like `.help()` on the Parser object. -var opts = dashdash.parse({options: options}); - -console.log("opts:", opts); -console.log("args:", opts._args); -``` - - -# Longer Example - -A more realistic [starter script "foo.js"](./examples/foo.js) is as follows. -This also shows using `parser.help()` for formatted option help. - -```javascript -var dashdash = require('./lib/dashdash'); - -var options = [ - { - name: 'version', - type: 'bool', - help: 'Print tool version and exit.' - }, - { - names: ['help', 'h'], - type: 'bool', - help: 'Print this help and exit.' - }, - { - names: ['verbose', 'v'], - type: 'arrayOfBool', - help: 'Verbose output. Use multiple times for more verbose.' - }, - { - names: ['file', 'f'], - type: 'string', - help: 'File to process', - helpArg: 'FILE' - } -]; - -var parser = dashdash.createParser({options: options}); -try { - var opts = parser.parse(process.argv); -} catch (e) { - console.error('foo: error: %s', e.message); - process.exit(1); -} - -console.log("# opts:", opts); -console.log("# args:", opts._args); - -// Use `parser.help()` for formatted options help. -if (opts.help) { - var help = parser.help({includeEnv: true}).trimRight(); - console.log('usage: node foo.js [OPTIONS]\n' - + 'options:\n' - + help); - process.exit(0); -} - -// ... -``` - - -Some example output from this script (foo.js): - -``` -$ node foo.js -h -# opts: { help: true, - _order: [ { name: 'help', value: true, from: 'argv' } ], - _args: [] } -# args: [] -usage: node foo.js [OPTIONS] -options: - --version Print tool version and exit. - -h, --help Print this help and exit. - -v, --verbose Verbose output. Use multiple times for more verbose. - -f FILE, --file=FILE File to process - -$ node foo.js -v -# opts: { verbose: [ true ], - _order: [ { name: 'verbose', value: true, from: 'argv' } ], - _args: [] } -# args: [] - -$ node foo.js --version arg1 -# opts: { version: true, - _order: [ { name: 'version', value: true, from: 'argv' } ], - _args: [ 'arg1' ] } -# args: [ 'arg1' ] - -$ node foo.js -f bar.txt -# opts: { file: 'bar.txt', - _order: [ { name: 'file', value: 'bar.txt', from: 'argv' } ], - _args: [] } -# args: [] - -$ node foo.js -vvv --file=blah -# opts: { verbose: [ true, true, true ], - file: 'blah', - _order: - [ { name: 'verbose', value: true, from: 'argv' }, - { name: 'verbose', value: true, from: 'argv' }, - { name: 'verbose', value: true, from: 'argv' }, - { name: 'file', value: 'blah', from: 'argv' } ], - _args: [] } -# args: [] -``` - - -See the ["examples"](examples/) dir for a number of starter examples using -some of dashdash's features. - - -# Environment variable integration - -If you want to allow environment variables to specify options to your tool, -dashdash makes this easy. We can change the 'verbose' option in the example -above to include an 'env' field: - -```javascript - { - names: ['verbose', 'v'], - type: 'arrayOfBool', - env: 'FOO_VERBOSE', // <--- add this line - help: 'Verbose output. Use multiple times for more verbose.' - }, -``` - -then the **"FOO_VERBOSE" environment variable** can be used to set this -option: - -```shell -$ FOO_VERBOSE=1 node foo.js -# opts: { verbose: [ true ], - _order: [ { name: 'verbose', value: true, from: 'env' } ], - _args: [] } -# args: [] -``` - -Boolean options will interpret the empty string as unset, '0' as false -and anything else as true. - -```shell -$ FOO_VERBOSE= node examples/foo.js # not set -# opts: { _order: [], _args: [] } -# args: [] - -$ FOO_VERBOSE=0 node examples/foo.js # '0' is false -# opts: { verbose: [ false ], - _order: [ { key: 'verbose', value: false, from: 'env' } ], - _args: [] } -# args: [] - -$ FOO_VERBOSE=1 node examples/foo.js # true -# opts: { verbose: [ true ], - _order: [ { key: 'verbose', value: true, from: 'env' } ], - _args: [] } -# args: [] - -$ FOO_VERBOSE=boogabooga node examples/foo.js # true -# opts: { verbose: [ true ], - _order: [ { key: 'verbose', value: true, from: 'env' } ], - _args: [] } -# args: [] -``` - -Non-booleans can be used as well. Strings: - -```shell -$ FOO_FILE=data.txt node examples/foo.js -# opts: { file: 'data.txt', - _order: [ { key: 'file', value: 'data.txt', from: 'env' } ], - _args: [] } -# args: [] -``` - -Numbers: - -```shell -$ FOO_TIMEOUT=5000 node examples/foo.js -# opts: { timeout: 5000, - _order: [ { key: 'timeout', value: 5000, from: 'env' } ], - _args: [] } -# args: [] - -$ FOO_TIMEOUT=blarg node examples/foo.js -foo: error: arg for "FOO_TIMEOUT" is not a positive integer: "blarg" -``` - -With the `includeEnv: true` config to `parser.help()` the environment -variable can also be included in **help output**: - - usage: node foo.js [OPTIONS] - options: - --version Print tool version and exit. - -h, --help Print this help and exit. - -v, --verbose Verbose output. Use multiple times for more verbose. - Environment: FOO_VERBOSE=1 - -f FILE, --file=FILE File to process - - -# Bash completion - -Dashdash provides a simple way to create a Bash completion file that you -can place in your "bash_completion.d" directory -- sometimes that is -"/usr/local/etc/bash_completion.d/"). Features: - -- Support for short and long opts -- Support for knowing which options take arguments -- Support for subcommands (e.g. 'git log ' to show just options for the - log subcommand). See - [node-cmdln](https://github.com/trentm/node-cmdln#bash-completion) for - how to integrate that. -- Does the right thing with "--" to stop options. -- Custom optarg and arg types for custom completions. - -Dashdash will return bash completion file content given a parser instance: - - var parser = dashdash.createParser({options: options}); - console.log( parser.bashCompletion({name: 'mycli'}) ); - -or directly from a `options` array of options specs: - - var code = dashdash.bashCompletionFromOptions({ - name: 'mycli', - options: OPTIONS - }); - -Write that content to "/usr/local/etc/bash_completion.d/mycli" and you will -have Bash completions for `mycli`. Alternatively you can write it to -any file (e.g. "~/.bashrc") and source it. - -You could add a `--completion` hidden option to your tool that emits the -completion content and document for your users to call that to install -Bash completions. - -See [examples/ddcompletion.js](examples/ddcompletion.js) for a complete -example, including how one can define bash functions for completion of custom -option types. Also see [node-cmdln](https://github.com/trentm/node-cmdln) for -how it uses this for Bash completion for full multi-subcommand tools. - -- TODO: document specExtra -- TODO: document includeHidden -- TODO: document custom types, `function complete\_FOO` guide, completionType -- TODO: document argtypes - - -# Parser config - -Parser construction (i.e. `dashdash.createParser(CONFIG)`) takes the -following fields: - -- `options` (Array of option specs). Required. See the - [Option specs](#option-specs) section below. - -- `interspersed` (Boolean). Optional. Default is true. If true this allows - interspersed arguments and options. I.e.: - - node ./tool.js -v arg1 arg2 -h # '-h' is after interspersed args - - Set it to false to have '-h' **not** get parsed as an option in the above - example. - -- `allowUnknown` (Boolean). Optional. Default is false. If false, this causes - unknown arguments to throw an error. I.e.: - - node ./tool.js -v arg1 --afe8asefksjefhas - - Set it to true to treat the unknown option as a positional - argument. - - **Caveat**: When a shortopt group, such as `-xaz` contains a mix of - known and unknown options, the *entire* group is passed through - unmolested as a positional argument. - - Consider if you have a known short option `-a`, and parse the - following command line: - - node ./tool.js -xaz - - where `-x` and `-z` are unknown. There are multiple ways to - interpret this: - - 1. `-x` takes a value: `{x: 'az'}` - 2. `-x` and `-z` are both booleans: `{x:true,a:true,z:true}` - - Since dashdash does not know what `-x` and `-z` are, it can't know - if you'd prefer to receive `{a:true,_args:['-x','-z']}` or - `{x:'az'}`, or `{_args:['-xaz']}`. Leaving the positional arg unprocessed - is the easiest mistake for the user to recover from. - - -# Option specs - -Example using all fields (required fields are noted): - -```javascript -{ - names: ['file', 'f'], // Required (one of `names` or `name`). - type: 'string', // Required. - completionType: 'filename', - env: 'MYTOOL_FILE', - help: 'Config file to load before running "mytool"', - helpArg: 'PATH', - helpWrap: false, - default: path.resolve(process.env.HOME, '.mytoolrc') -} -``` - -Each option spec in the `options` array must/can have the following fields: - -- `name` (String) or `names` (Array). Required. These give the option name - and aliases. The first name (if more than one given) is the key for the - parsed `opts` object. - -- `type` (String). Required. One of: - - - bool - - string - - number - - integer - - positiveInteger - - date (epoch seconds, e.g. 1396031701, or ISO 8601 format - `YYYY-MM-DD[THH:MM:SS[.sss][Z]]`, e.g. "2014-03-28T18:35:01.489Z") - - arrayOfBool - - arrayOfString - - arrayOfNumber - - arrayOfInteger - - arrayOfPositiveInteger - - arrayOfDate - - FWIW, these names attempt to match with asserts on - [assert-plus](https://github.com/mcavage/node-assert-plus). - You can add your own custom option types with `dashdash.addOptionType`. - See below. - -- `completionType` (String). Optional. This is used for [Bash - completion](#bash-completion) for an option argument. If not specified, - then the value of `type` is used. Any string may be specified, but only the - following values have meaning: - - - `none`: Provide no completions. - - `file`: Bash's default completion (i.e. `complete -o default`), which - includes filenames. - - *Any string FOO for which a `function complete_FOO` Bash function is - defined.* This is for custom completions for a given tool. Typically - these custom functions are provided in the `specExtra` argument to - `dashdash.bashCompletionFromOptions()`. See - ["examples/ddcompletion.js"](examples/ddcompletion.js) for an example. - -- `env` (String or Array of String). Optional. An environment variable name - (or names) that can be used as a fallback for this option. For example, - given a "foo.js" like this: - - var options = [{names: ['dry-run', 'n'], env: 'FOO_DRY_RUN'}]; - var opts = dashdash.parse({options: options}); - - Both `node foo.js --dry-run` and `FOO_DRY_RUN=1 node foo.js` would result - in `opts.dry_run = true`. - - An environment variable is only used as a fallback, i.e. it is ignored if - the associated option is given in `argv`. - -- `help` (String). Optional. Used for `parser.help()` output. - -- `helpArg` (String). Optional. Used in help output as the placeholder for - the option argument, e.g. the "PATH" in: - - ... - -f PATH, --file=PATH File to process - ... - -- `helpWrap` (Boolean). Optional, default true. Set this to `false` to have - that option's `help` *not* be text wrapped in `.help()` output. - -- `default`. Optional. A default value used for this option, if the - option isn't specified in argv. - -- `hidden` (Boolean). Optional, default false. If true, help output will not - include this option. See also the `includeHidden` option to - `bashCompletionFromOptions()` for [Bash completion](#bash-completion). - - -# Option group headings - -You can add headings between option specs in the `options` array. To do so, -simply add an object with only a `group` property -- the string to print as -the heading for the subsequent options in the array. For example: - -```javascript -var options = [ - { - group: 'Armament Options' - }, - { - names: [ 'weapon', 'w' ], - type: 'string' - }, - { - group: 'General Options' - }, - { - names: [ 'help', 'h' ], - type: 'bool' - } -]; -... -``` - -Note: You can use an empty string, `{group: ''}`, to get a blank line in help -output between groups of options. - - -# Help config - -The `parser.help(...)` function is configurable as follows: - - Options: - Armament Options: - ^^ -w WEAPON, --weapon=WEAPON Weapon with which to crush. One of: | - / sword, spear, maul | - / General Options: | - / -h, --help Print this help and exit. | - / ^^^^ ^ | - \ `-- indent `-- helpCol maxCol ---' - `-- headingIndent - -- `indent` (Number or String). Default 4. Set to a number (for that many - spaces) or a string for the literal indent. -- `headingIndent` (Number or String). Default half length of `indent`. Set to - a number (for that many spaces) or a string for the literal indent. This - indent applies to group heading lines, between normal option lines. -- `nameSort` (String). Default is 'length'. By default the names are - sorted to put the short opts first (i.e. '-h, --help' preferred - to '--help, -h'). Set to 'none' to not do this sorting. -- `maxCol` (Number). Default 80. Note that reflow is just done on whitespace - so a long token in the option help can overflow maxCol. -- `helpCol` (Number). If not set a reasonable value will be determined - between `minHelpCol` and `maxHelpCol`. -- `minHelpCol` (Number). Default 20. -- `maxHelpCol` (Number). Default 40. -- `helpWrap` (Boolean). Default true. Set to `false` to have option `help` - strings *not* be textwrapped to the helpCol..maxCol range. -- `includeEnv` (Boolean). Default false. If the option has associated - environment variables (via the `env` option spec attribute), then - append mentioned of those envvars to the help string. -- `includeDefault` (Boolean). Default false. If the option has a default value - (via the `default` option spec attribute, or a default on the option's type), - then a "Default: VALUE" string will be appended to the help string. - - -# Custom option types - -Dashdash includes a good starter set of option types that it will parse for -you. However, you can add your own via: - - var dashdash = require('dashdash'); - dashdash.addOptionType({ - name: '...', - takesArg: true, - helpArg: '...', - parseArg: function (option, optstr, arg) { - ... - }, - array: false, // optional - arrayFlatten: false, // optional - default: ..., // optional - completionType: ... // optional - }); - -For example, a simple option type that accepts 'yes', 'y', 'no' or 'n' as -a boolean argument would look like: - - var dashdash = require('dashdash'); - - function parseYesNo(option, optstr, arg) { - var argLower = arg.toLowerCase() - if (~['yes', 'y'].indexOf(argLower)) { - return true; - } else if (~['no', 'n'].indexOf(argLower)) { - return false; - } else { - throw new Error(format( - 'arg for "%s" is not "yes" or "no": "%s"', - optstr, arg)); - } - } - - dashdash.addOptionType({ - name: 'yesno' - takesArg: true, - helpArg: '', - parseArg: parseYesNo - }); - - var options = { - {names: ['answer', 'a'], type: 'yesno'} - }; - var opts = dashdash.parse({options: options}); - -See "examples/custom-option-\*.js" for other examples. -See the `addOptionType` block comment in "lib/dashdash.js" for more details. -Please let me know [with an -issue](https://github.com/trentm/node-dashdash/issues/new) if you write a -generally useful one. - - - -# Why - -Why another node.js option parsing lib? - -- `nopt` really is just for "tools like npm". Implicit opts (e.g. '--no-foo' - works for every '--foo'). Can't disable abbreviated opts. Can't do multiple - usages of same opt, e.g. '-vvv' (I think). Can't do grouped short opts. - -- `optimist` has surprise interpretation of options (at least to me). - Implicit opts mean ambiguities and poor error handling for fat-fingering. - `process.exit` calls makes it hard to use as a libary. - -- `optparse` Incomplete docs. Is this an attempted clone of Python's `optparse`. - Not clear. Some divergence. `parser.on("name", ...)` API is weird. - -- `argparse` Dep on underscore. No thanks just for option processing. - `find lib | wc -l` -> `26`. Overkill. - Argparse is a bit different anyway. Not sure I want that. - -- `posix-getopt` No type validation. Though that isn't a killer. AFAIK can't - have a long opt without a short alias. I.e. no `getopt_long` semantics. - Also, no whizbang features like generated help output. - -- ["commander.js"](https://github.com/visionmedia/commander.js): I wrote - [a critique](http://trentm.com/2014/01/a-critique-of-commander-for-nodejs.html) - a while back. It seems fine, but last I checked had - [an outstanding bug](https://github.com/visionmedia/commander.js/pull/121) - that would prevent me from using it. - - -# License - -MIT. See LICENSE.txt. diff --git a/truebit-implementation/node_modules/dashdash/etc/dashdash.bash_completion.in b/truebit-implementation/node_modules/dashdash/etc/dashdash.bash_completion.in deleted file mode 100644 index dc333096..00000000 --- a/truebit-implementation/node_modules/dashdash/etc/dashdash.bash_completion.in +++ /dev/null @@ -1,389 +0,0 @@ -#!/bin/bash -# -# Bash completion generated for '{{name}}' at {{date}}. -# -# The original template lives here: -# https://github.com/trentm/node-dashdash/blob/master/etc/dashdash.bash_completion.in -# - -# -# Copyright 2016 Trent Mick -# Copyright 2016 Joyent, Inc. -# -# -# A generic Bash completion driver script. -# -# This is meant to provide a re-usable chunk of Bash to use for -# "etc/bash_completion.d/" files for individual tools. Only the "Configuration" -# section with tool-specific info need differ. Features: -# -# - support for short and long opts -# - support for knowing which options take arguments -# - support for subcommands (e.g. 'git log ' to show just options for the -# log subcommand) -# - does the right thing with "--" to stop options -# - custom optarg and arg types for custom completions -# - (TODO) support for shells other than Bash (tcsh, zsh, fish?, etc.) -# -# -# Examples/design: -# -# 1. Bash "default" completion. By default Bash's 'complete -o default' is -# enabled. That means when there are no completions (e.g. if no opts match -# the current word), then you'll get Bash's default completion. Most notably -# that means you get filename completion. E.g.: -# $ tool ./ -# $ tool READ -# -# 2. all opts and subcmds: -# $ tool -# $ tool -v # assuming '-v' doesn't take an arg -# $ tool - # matching opts -# $ git lo # matching subcmds -# -# Long opt completions are given *without* the '=', i.e. we prefer space -# separated because that's easier for good completions. -# -# 3. long opt arg with '=' -# $ tool --file= -# $ tool --file=./d -# We maintain the "--file=" prefix. Limitation: With the attached prefix -# the 'complete -o filenames' doesn't know to do dirname '/' suffixing. Meh. -# -# 4. envvars: -# $ tool $ -# $ tool $P -# Limitation: Currently only getting exported vars, so we miss "PS1" and -# others. -# -# 5. Defer to other completion in a subshell: -# $ tool --file $(cat ./ -# We get this from 'complete -o default ...'. -# -# 6. Custom completion types from a provided bash function. -# $ tool --profile # complete available "profiles" -# -# -# Dev Notes: -# - compgen notes, from http://unix.stackexchange.com/questions/151118/understand-compgen-builtin-command -# - https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html -# - - -# Debugging this completion: -# 1. Uncomment the "_{{name}}_log_file=..." line. -# 2. 'tail -f /var/tmp/dashdash-completion.log' in one terminal. -# 3. Re-source this bash completion file. -#_{{name}}_log=/var/tmp/dashdash-completion.log - -function _{{name}}_completer { - - # ---- cmd definition - - {{spec}} - - - # ---- locals - - declare -a argv - - - # ---- support functions - - function trace { - [[ -n "$_{{name}}_log" ]] && echo "$*" >&2 - } - - function _dashdash_complete { - local idx context - idx=$1 - context=$2 - - local shortopts longopts optargs subcmds allsubcmds argtypes - shortopts="$(eval "echo \${cmd${context}_shortopts}")" - longopts="$(eval "echo \${cmd${context}_longopts}")" - optargs="$(eval "echo \${cmd${context}_optargs}")" - subcmds="$(eval "echo \${cmd${context}_subcmds}")" - allsubcmds="$(eval "echo \${cmd${context}_allsubcmds}")" - IFS=', ' read -r -a argtypes <<< "$(eval "echo \${cmd${context}_argtypes}")" - - trace "" - trace "_dashdash_complete(idx=$idx, context=$context)" - trace " shortopts: $shortopts" - trace " longopts: $longopts" - trace " optargs: $optargs" - trace " subcmds: $subcmds" - trace " allsubcmds: $allsubcmds" - - # Get 'state' of option parsing at this COMP_POINT. - # Copying "dashdash.js#parse()" behaviour here. - local state= - local nargs=0 - local i=$idx - local argtype - local optname - local prefix - local word - local dashdashseen= - while [[ $i -lt $len && $i -le $COMP_CWORD ]]; do - argtype= - optname= - prefix= - word= - - arg=${argv[$i]} - trace " consider argv[$i]: '$arg'" - - if [[ "$arg" == "--" && $i -lt $COMP_CWORD ]]; then - trace " dashdash seen" - dashdashseen=yes - state=arg - word=$arg - elif [[ -z "$dashdashseen" && "${arg:0:2}" == "--" ]]; then - arg=${arg:2} - if [[ "$arg" == *"="* ]]; then - optname=${arg%%=*} - val=${arg##*=} - trace " long opt: optname='$optname' val='$val'" - state=arg - argtype=$(echo "$optargs" | awk -F "-$optname=" '{print $2}' | cut -d' ' -f1) - word=$val - prefix="--$optname=" - else - optname=$arg - val= - trace " long opt: optname='$optname'" - state=longopt - word=--$optname - - if [[ "$optargs" == *"-$optname="* && $i -lt $COMP_CWORD ]]; then - i=$(( $i + 1 )) - state=arg - argtype=$(echo "$optargs" | awk -F "-$optname=" '{print $2}' | cut -d' ' -f1) - word=${argv[$i]} - trace " takes arg (consume argv[$i], word='$word')" - fi - fi - elif [[ -z "$dashdashseen" && "${arg:0:1}" == "-" ]]; then - trace " short opt group" - state=shortopt - word=$arg - - local j=1 - while [[ $j -lt ${#arg} ]]; do - optname=${arg:$j:1} - trace " consider index $j: optname '$optname'" - - if [[ "$optargs" == *"-$optname="* ]]; then - argtype=$(echo "$optargs" | awk -F "-$optname=" '{print $2}' | cut -d' ' -f1) - if [[ $(( $j + 1 )) -lt ${#arg} ]]; then - state=arg - word=${arg:$(( $j + 1 ))} - trace " takes arg (rest of this arg, word='$word', argtype='$argtype')" - elif [[ $i -lt $COMP_CWORD ]]; then - state=arg - i=$(( $i + 1 )) - word=${argv[$i]} - trace " takes arg (word='$word', argtype='$argtype')" - fi - break - fi - - j=$(( $j + 1 )) - done - elif [[ $i -lt $COMP_CWORD && -n "$arg" ]] && $(echo "$allsubcmds" | grep -w "$arg" >/dev/null); then - trace " complete subcmd: recurse _dashdash_complete" - _dashdash_complete $(( $i + 1 )) "${context}__${arg/-/_}" - return - else - trace " not an opt or a complete subcmd" - state=arg - word=$arg - nargs=$(( $nargs + 1 )) - if [[ ${#argtypes[@]} -gt 0 ]]; then - argtype="${argtypes[$(( $nargs - 1 ))]}" - if [[ -z "$argtype" ]]; then - # If we have more args than argtypes, we use the - # last type. - argtype="${argtypes[@]: -1:1}" - fi - fi - fi - - trace " state=$state prefix='$prefix' word='$word'" - i=$(( $i + 1 )) - done - - trace " parsed: state=$state optname='$optname' argtype='$argtype' prefix='$prefix' word='$word' dashdashseen=$dashdashseen" - local compgen_opts= - if [[ -n "$prefix" ]]; then - compgen_opts="$compgen_opts -P $prefix" - fi - - case $state in - shortopt) - compgen $compgen_opts -W "$shortopts $longopts" -- "$word" - ;; - longopt) - compgen $compgen_opts -W "$longopts" -- "$word" - ;; - arg) - # If we don't know what completion to do, then emit nothing. We - # expect that we are running with: - # complete -o default ... - # where "default" means: "Use Readline's default completion if - # the compspec generates no matches." This gives us the good filename - # completion, completion in subshells/backticks. - # - # We cannot support an argtype="directory" because - # compgen -S '/' -A directory -- "$word" - # doesn't give a satisfying result. It doesn't stop at the trailing '/' - # so you cannot descend into dirs. - if [[ "${word:0:1}" == '$' ]]; then - # By default, Bash will complete '$' to all envvars. Apparently - # 'complete -o default' does *not* give us that. The following - # gets *close* to the same completions: '-A export' misses envvars - # like "PS1". - trace " completing envvars" - compgen $compgen_opts -P '$' -A export -- "${word:1}" - elif [[ -z "$argtype" ]]; then - # Only include opts in completions if $word is not empty. - # This is to avoid completing the leading '-', which foils - # using 'default' completion. - if [[ -n "$dashdashseen" ]]; then - trace " completing subcmds, if any (no argtype, dashdash seen)" - compgen $compgen_opts -W "$subcmds" -- "$word" - elif [[ -z "$word" ]]; then - trace " completing subcmds, if any (no argtype, empty word)" - compgen $compgen_opts -W "$subcmds" -- "$word" - else - trace " completing opts & subcmds (no argtype)" - compgen $compgen_opts -W "$shortopts $longopts $subcmds" -- "$word" - fi - elif [[ $argtype == "none" ]]; then - # We want *no* completions, i.e. some way to get the active - # 'complete -o default' to not do filename completion. - trace " completing 'none' (hack to imply no completions)" - echo "##-no-completion- -results-##" - elif [[ $argtype == "file" ]]; then - # 'complete -o default' gives the best filename completion, at least - # on Mac. - trace " completing 'file' (let 'complete -o default' handle it)" - echo "" - elif ! type complete_$argtype 2>/dev/null >/dev/null; then - trace " completing '$argtype' (fallback to default b/c complete_$argtype is unknown)" - echo "" - else - trace " completing custom '$argtype'" - completions=$(complete_$argtype "$word") - if [[ -z "$completions" ]]; then - trace " no custom '$argtype' completions" - # These are in ascii and "dictionary" order so they sort - # correctly. - echo "##-no-completion- -results-##" - else - echo $completions - fi - fi - ;; - *) - trace " unknown state: $state" - ;; - esac - } - - - trace "" - trace "-- $(date)" - #trace "\$IFS: '$IFS'" - #trace "\$@: '$@'" - #trace "COMP_WORDBREAKS: '$COMP_WORDBREAKS'" - trace "COMP_CWORD: '$COMP_CWORD'" - trace "COMP_LINE: '$COMP_LINE'" - trace "COMP_POINT: $COMP_POINT" - - # Guard against negative COMP_CWORD. This is a Bash bug at least on - # Mac 10.10.4's bash. See - # . - if [[ $COMP_CWORD -lt 0 ]]; then - trace "abort on negative COMP_CWORD" - exit 1; - fi - - # I don't know how to do array manip on argv vars, - # so copy over to argv array to work on them. - shift # the leading '--' - i=0 - len=$# - while [[ $# -gt 0 ]]; do - argv[$i]=$1 - shift; - i=$(( $i + 1 )) - done - trace "argv: '${argv[@]}'" - trace "argv[COMP_CWORD-1]: '${argv[$(( $COMP_CWORD - 1 ))]}'" - trace "argv[COMP_CWORD]: '${argv[$COMP_CWORD]}'" - trace "argv len: '$len'" - - _dashdash_complete 1 "" -} - - -# ---- mainline - -# Note: This if-block to help work with 'compdef' and 'compctl' is -# adapted from 'npm completion'. -if type complete &>/dev/null; then - function _{{name}}_completion { - local _log_file=/dev/null - [[ -z "$_{{name}}_log" ]] || _log_file="$_{{name}}_log" - COMPREPLY=($(COMP_CWORD="$COMP_CWORD" \ - COMP_LINE="$COMP_LINE" \ - COMP_POINT="$COMP_POINT" \ - _{{name}}_completer -- "${COMP_WORDS[@]}" \ - 2>$_log_file)) || return $? - } - complete -o default -F _{{name}}_completion {{name}} -elif type compdef &>/dev/null; then - function _{{name}}_completion { - local _log_file=/dev/null - [[ -z "$_{{name}}_log" ]] || _log_file="$_{{name}}_log" - compadd -- $(COMP_CWORD=$((CURRENT-1)) \ - COMP_LINE=$BUFFER \ - COMP_POINT=0 \ - _{{name}}_completer -- "${words[@]}" \ - 2>$_log_file) - } - compdef _{{name}}_completion {{name}} -elif type compctl &>/dev/null; then - function _{{name}}_completion { - local cword line point words si - read -Ac words - read -cn cword - let cword-=1 - read -l line - read -ln point - local _log_file=/dev/null - [[ -z "$_{{name}}_log" ]] || _log_file="$_{{name}}_log" - reply=($(COMP_CWORD="$cword" \ - COMP_LINE="$line" \ - COMP_POINT="$point" \ - _{{name}}_completer -- "${words[@]}" \ - 2>$_log_file)) || return $? - } - compctl -K _{{name}}_completion {{name}} -fi - - -## -## This is a Bash completion file for the '{{name}}' command. You can install -## with either: -## -## cp FILE /usr/local/etc/bash_completion.d/{{name}} # Mac -## cp FILE /etc/bash_completion.d/{{name}} # Linux -## -## or: -## -## cp FILE > ~/.{{name}}.completion -## echo "source ~/.{{name}}.completion" >> ~/.bashrc -## \ No newline at end of file diff --git a/truebit-implementation/node_modules/dashdash/lib/dashdash.js b/truebit-implementation/node_modules/dashdash/lib/dashdash.js deleted file mode 100644 index adb6f13b..00000000 --- a/truebit-implementation/node_modules/dashdash/lib/dashdash.js +++ /dev/null @@ -1,1055 +0,0 @@ -/** - * dashdash - A light, featureful and explicit option parsing library for - * node.js. - */ -// vim: set ts=4 sts=4 sw=4 et: - -var assert = require('assert-plus'); -var format = require('util').format; -var fs = require('fs'); -var path = require('path'); - - -var DEBUG = true; -if (DEBUG) { - var debug = console.warn; -} else { - var debug = function () {}; -} - - - -// ---- internal support stuff - -// Replace {{variable}} in `s` with the template data in `d`. -function renderTemplate(s, d) { - return s.replace(/{{([a-zA-Z]+)}}/g, function (match, key) { - return d.hasOwnProperty(key) ? d[key] : match; - }); -} - -/** - * Return a shallow copy of the given object; - */ -function shallowCopy(obj) { - if (!obj) { - return (obj); - } - var copy = {}; - Object.keys(obj).forEach(function (k) { - copy[k] = obj[k]; - }); - return (copy); -} - - -function space(n) { - var s = ''; - for (var i = 0; i < n; i++) { - s += ' '; - } - return s; -} - - -function makeIndent(arg, deflen, name) { - if (arg === null || arg === undefined) - return space(deflen); - else if (typeof (arg) === 'number') - return space(arg); - else if (typeof (arg) === 'string') - return arg; - else - assert.fail('invalid "' + name + '": not a string or number: ' + arg); -} - - -/** - * Return an array of lines wrapping the given text to the given width. - * This splits on whitespace. Single tokens longer than `width` are not - * broken up. - */ -function textwrap(s, width) { - var words = s.trim().split(/\s+/); - var lines = []; - var line = ''; - words.forEach(function (w) { - var newLength = line.length + w.length; - if (line.length > 0) - newLength += 1; - if (newLength > width) { - lines.push(line); - line = ''; - } - if (line.length > 0) - line += ' '; - line += w; - }); - lines.push(line); - return lines; -} - - -/** - * Transform an option name to a "key" that is used as the field - * on the `opts` object returned from `.parse()`. - * - * Transformations: - * - '-' -> '_': This allow one to use hyphen in option names (common) - * but not have to do silly things like `opt["dry-run"]` to access the - * parsed results. - */ -function optionKeyFromName(name) { - return name.replace(/-/g, '_'); -} - - - -// ---- Option types - -function parseBool(option, optstr, arg) { - return Boolean(arg); -} - -function parseString(option, optstr, arg) { - assert.string(arg, 'arg'); - return arg; -} - -function parseNumber(option, optstr, arg) { - assert.string(arg, 'arg'); - var num = Number(arg); - if (isNaN(num)) { - throw new Error(format('arg for "%s" is not a number: "%s"', - optstr, arg)); - } - return num; -} - -function parseInteger(option, optstr, arg) { - assert.string(arg, 'arg'); - var num = Number(arg); - if (!/^[0-9-]+$/.test(arg) || isNaN(num)) { - throw new Error(format('arg for "%s" is not an integer: "%s"', - optstr, arg)); - } - return num; -} - -function parsePositiveInteger(option, optstr, arg) { - assert.string(arg, 'arg'); - var num = Number(arg); - if (!/^[0-9]+$/.test(arg) || isNaN(num) || num === 0) { - throw new Error(format('arg for "%s" is not a positive integer: "%s"', - optstr, arg)); - } - return num; -} - -/** - * Supported date args: - * - epoch second times (e.g. 1396031701) - * - ISO 8601 format: YYYY-MM-DD[THH:MM:SS[.sss][Z]] - * 2014-03-28T18:35:01.489Z - * 2014-03-28T18:35:01.489 - * 2014-03-28T18:35:01Z - * 2014-03-28T18:35:01 - * 2014-03-28 - */ -function parseDate(option, optstr, arg) { - assert.string(arg, 'arg'); - var date; - if (/^\d+$/.test(arg)) { - // epoch seconds - date = new Date(Number(arg) * 1000); - /* JSSTYLED */ - } else if (/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?Z?)?$/i.test(arg)) { - // ISO 8601 format - date = new Date(arg); - } else { - throw new Error(format('arg for "%s" is not a valid date format: "%s"', - optstr, arg)); - } - if (date.toString() === 'Invalid Date') { - throw new Error(format('arg for "%s" is an invalid date: "%s"', - optstr, arg)); - } - return date; -} - -var optionTypes = { - bool: { - takesArg: false, - parseArg: parseBool - }, - string: { - takesArg: true, - helpArg: 'ARG', - parseArg: parseString - }, - number: { - takesArg: true, - helpArg: 'NUM', - parseArg: parseNumber - }, - integer: { - takesArg: true, - helpArg: 'INT', - parseArg: parseInteger - }, - positiveInteger: { - takesArg: true, - helpArg: 'INT', - parseArg: parsePositiveInteger - }, - date: { - takesArg: true, - helpArg: 'DATE', - parseArg: parseDate - }, - arrayOfBool: { - takesArg: false, - array: true, - parseArg: parseBool - }, - arrayOfString: { - takesArg: true, - helpArg: 'ARG', - array: true, - parseArg: parseString - }, - arrayOfNumber: { - takesArg: true, - helpArg: 'NUM', - array: true, - parseArg: parseNumber - }, - arrayOfInteger: { - takesArg: true, - helpArg: 'INT', - array: true, - parseArg: parseInteger - }, - arrayOfPositiveInteger: { - takesArg: true, - helpArg: 'INT', - array: true, - parseArg: parsePositiveInteger - }, - arrayOfDate: { - takesArg: true, - helpArg: 'INT', - array: true, - parseArg: parseDate - }, -}; - - - -// ---- Parser - -/** - * Parser constructor. - * - * @param config {Object} The parser configuration - * - options {Array} Array of option specs. See the README for how to - * specify each option spec. - * - allowUnknown {Boolean} Default false. Whether to throw on unknown - * options. If false, then unknown args are included in the _args array. - * - interspersed {Boolean} Default true. Whether to allow interspersed - * arguments (non-options) and options. E.g.: - * node tool.js arg1 arg2 -v - * '-v' is after some args here. If `interspersed: false` then '-v' - * would not be parsed out. Note that regardless of `interspersed` - * the presence of '--' will stop option parsing, as all good - * option parsers should. - */ -function Parser(config) { - assert.object(config, 'config'); - assert.arrayOfObject(config.options, 'config.options'); - assert.optionalBool(config.interspersed, 'config.interspersed'); - var self = this; - - // Allow interspersed arguments (true by default). - this.interspersed = (config.interspersed !== undefined - ? config.interspersed : true); - - // Don't allow unknown flags (true by default). - this.allowUnknown = (config.allowUnknown !== undefined - ? config.allowUnknown : false); - - this.options = config.options.map(function (o) { return shallowCopy(o); }); - this.optionFromName = {}; - this.optionFromEnv = {}; - for (var i = 0; i < this.options.length; i++) { - var o = this.options[i]; - if (o.group !== undefined && o.group !== null) { - assert.optionalString(o.group, - format('config.options.%d.group', i)); - continue; - } - assert.ok(optionTypes[o.type], - format('invalid config.options.%d.type: "%s" in %j', - i, o.type, o)); - assert.optionalString(o.name, format('config.options.%d.name', i)); - assert.optionalArrayOfString(o.names, - format('config.options.%d.names', i)); - assert.ok((o.name || o.names) && !(o.name && o.names), - format('exactly one of "name" or "names" required: %j', o)); - assert.optionalString(o.help, format('config.options.%d.help', i)); - var env = o.env || []; - if (typeof (env) === 'string') { - env = [env]; - } - assert.optionalArrayOfString(env, format('config.options.%d.env', i)); - assert.optionalString(o.helpGroup, - format('config.options.%d.helpGroup', i)); - assert.optionalBool(o.helpWrap, - format('config.options.%d.helpWrap', i)); - assert.optionalBool(o.hidden, format('config.options.%d.hidden', i)); - - if (o.name) { - o.names = [o.name]; - } else { - assert.string(o.names[0], - format('config.options.%d.names is empty', i)); - } - o.key = optionKeyFromName(o.names[0]); - o.names.forEach(function (n) { - if (self.optionFromName[n]) { - throw new Error(format( - 'option name collision: "%s" used in %j and %j', - n, self.optionFromName[n], o)); - } - self.optionFromName[n] = o; - }); - env.forEach(function (n) { - if (self.optionFromEnv[n]) { - throw new Error(format( - 'option env collision: "%s" used in %j and %j', - n, self.optionFromEnv[n], o)); - } - self.optionFromEnv[n] = o; - }); - } -} - -Parser.prototype.optionTakesArg = function optionTakesArg(option) { - return optionTypes[option.type].takesArg; -}; - -/** - * Parse options from the given argv. - * - * @param inputs {Object} Optional. - * - argv {Array} Optional. The argv to parse. Defaults to - * `process.argv`. - * - slice {Number} The index into argv at which options/args begin. - * Default is 2, as appropriate for `process.argv`. - * - env {Object} Optional. The env to use for 'env' entries in the - * option specs. Defaults to `process.env`. - * @returns {Object} Parsed `opts`. It has special keys `_args` (the - * remaining args from `argv`) and `_order` (gives the order that - * options were specified). - */ -Parser.prototype.parse = function parse(inputs) { - var self = this; - - // Old API was `parse([argv, [slice]])` - if (Array.isArray(arguments[0])) { - inputs = {argv: arguments[0], slice: arguments[1]}; - } - - assert.optionalObject(inputs, 'inputs'); - if (!inputs) { - inputs = {}; - } - assert.optionalArrayOfString(inputs.argv, 'inputs.argv'); - //assert.optionalNumber(slice, 'slice'); - var argv = inputs.argv || process.argv; - var slice = inputs.slice !== undefined ? inputs.slice : 2; - var args = argv.slice(slice); - var env = inputs.env || process.env; - var opts = {}; - var _order = []; - - function addOpt(option, optstr, key, val, from) { - var type = optionTypes[option.type]; - var parsedVal = type.parseArg(option, optstr, val); - if (type.array) { - if (!opts[key]) { - opts[key] = []; - } - if (type.arrayFlatten && Array.isArray(parsedVal)) { - for (var i = 0; i < parsedVal.length; i++) { - opts[key].push(parsedVal[i]); - } - } else { - opts[key].push(parsedVal); - } - } else { - opts[key] = parsedVal; - } - var item = { key: key, value: parsedVal, from: from }; - _order.push(item); - } - - // Parse args. - var _args = []; - var i = 0; - outer: while (i < args.length) { - var arg = args[i]; - - // End of options marker. - if (arg === '--') { - i++; - break; - - // Long option - } else if (arg.slice(0, 2) === '--') { - var name = arg.slice(2); - var val = null; - var idx = name.indexOf('='); - if (idx !== -1) { - val = name.slice(idx + 1); - name = name.slice(0, idx); - } - var option = this.optionFromName[name]; - if (!option) { - if (!this.allowUnknown) - throw new Error(format('unknown option: "--%s"', name)); - else if (this.interspersed) - _args.push(arg); - else - break outer; - } else { - var takesArg = this.optionTakesArg(option); - if (val !== null && !takesArg) { - throw new Error(format('argument given to "--%s" option ' - + 'that does not take one: "%s"', name, arg)); - } - if (!takesArg) { - addOpt(option, '--'+name, option.key, true, 'argv'); - } else if (val !== null) { - addOpt(option, '--'+name, option.key, val, 'argv'); - } else if (i + 1 >= args.length) { - throw new Error(format('do not have enough args for "--%s" ' - + 'option', name)); - } else { - addOpt(option, '--'+name, option.key, args[i + 1], 'argv'); - i++; - } - } - - // Short option - } else if (arg[0] === '-' && arg.length > 1) { - var j = 1; - var allFound = true; - while (j < arg.length) { - var name = arg[j]; - var option = this.optionFromName[name]; - if (!option) { - allFound = false; - if (this.allowUnknown) { - if (this.interspersed) { - _args.push(arg); - break; - } else - break outer; - } else if (arg.length > 2) { - throw new Error(format( - 'unknown option: "-%s" in "%s" group', - name, arg)); - } else { - throw new Error(format('unknown option: "-%s"', name)); - } - } else if (this.optionTakesArg(option)) { - break; - } - j++; - } - - j = 1; - while (allFound && j < arg.length) { - var name = arg[j]; - var val = arg.slice(j + 1); // option val if it takes an arg - var option = this.optionFromName[name]; - var takesArg = this.optionTakesArg(option); - if (!takesArg) { - addOpt(option, '-'+name, option.key, true, 'argv'); - } else if (val) { - addOpt(option, '-'+name, option.key, val, 'argv'); - break; - } else { - if (i + 1 >= args.length) { - throw new Error(format('do not have enough args ' - + 'for "-%s" option', name)); - } - addOpt(option, '-'+name, option.key, args[i + 1], 'argv'); - i++; - break; - } - j++; - } - - // An interspersed arg - } else if (this.interspersed) { - _args.push(arg); - - // An arg and interspersed args are not allowed, so done options. - } else { - break outer; - } - i++; - } - _args = _args.concat(args.slice(i)); - - // Parse environment. - Object.keys(this.optionFromEnv).forEach(function (envname) { - var val = env[envname]; - if (val === undefined) - return; - var option = self.optionFromEnv[envname]; - if (opts[option.key] !== undefined) - return; - var takesArg = self.optionTakesArg(option); - if (takesArg) { - addOpt(option, envname, option.key, val, 'env'); - } else if (val !== '') { - // Boolean envvar handling: - // - VAR= not set (as if the VAR was not set) - // - VAR=0 false - // - anything else true - addOpt(option, envname, option.key, (val !== '0'), 'env'); - } - }); - - // Apply default values. - this.options.forEach(function (o) { - if (opts[o.key] === undefined) { - if (o.default !== undefined) { - opts[o.key] = o.default; - } else if (o.type && optionTypes[o.type].default !== undefined) { - opts[o.key] = optionTypes[o.type].default; - } - } - }); - - opts._order = _order; - opts._args = _args; - return opts; -}; - - -/** - * Return help output for the current options. - * - * E.g.: if the current options are: - * [{names: ['help', 'h'], type: 'bool', help: 'Show help and exit.'}] - * then this would return: - * ' -h, --help Show help and exit.\n' - * - * @param config {Object} Config for controlling the option help output. - * - indent {Number|String} Default 4. An indent/prefix to use for - * each option line. - * - nameSort {String} Default is 'length'. By default the names are - * sorted to put the short opts first (i.e. '-h, --help' preferred - * to '--help, -h'). Set to 'none' to not do this sorting. - * - maxCol {Number} Default 80. Note that long tokens in a help string - * can go past this. - * - helpCol {Number} Set to specify a specific column at which - * option help will be aligned. By default this is determined - * automatically. - * - minHelpCol {Number} Default 20. - * - maxHelpCol {Number} Default 40. - * - includeEnv {Boolean} Default false. If true, a note stating the `env` - * envvar (if specified for this option) will be appended to the help - * output. - * - includeDefault {Boolean} Default false. If true, a note stating - * the `default` for this option, if any, will be appended to the help - * output. - * - helpWrap {Boolean} Default true. Wrap help text in helpCol..maxCol - * bounds. - * @returns {String} - */ -Parser.prototype.help = function help(config) { - config = config || {}; - assert.object(config, 'config'); - - var indent = makeIndent(config.indent, 4, 'config.indent'); - var headingIndent = makeIndent(config.headingIndent, - Math.round(indent.length / 2), 'config.headingIndent'); - - assert.optionalString(config.nameSort, 'config.nameSort'); - var nameSort = config.nameSort || 'length'; - assert.ok(~['length', 'none'].indexOf(nameSort), - 'invalid "config.nameSort"'); - assert.optionalNumber(config.maxCol, 'config.maxCol'); - assert.optionalNumber(config.maxHelpCol, 'config.maxHelpCol'); - assert.optionalNumber(config.minHelpCol, 'config.minHelpCol'); - assert.optionalNumber(config.helpCol, 'config.helpCol'); - assert.optionalBool(config.includeEnv, 'config.includeEnv'); - assert.optionalBool(config.includeDefault, 'config.includeDefault'); - assert.optionalBool(config.helpWrap, 'config.helpWrap'); - var maxCol = config.maxCol || 80; - var minHelpCol = config.minHelpCol || 20; - var maxHelpCol = config.maxHelpCol || 40; - - var lines = []; - var maxWidth = 0; - this.options.forEach(function (o) { - if (o.hidden) { - return; - } - if (o.group !== undefined && o.group !== null) { - // We deal with groups in the next pass - lines.push(null); - return; - } - var type = optionTypes[o.type]; - var arg = o.helpArg || type.helpArg || 'ARG'; - var line = ''; - var names = o.names.slice(); - if (nameSort === 'length') { - names.sort(function (a, b) { - if (a.length < b.length) - return -1; - else if (b.length < a.length) - return 1; - else - return 0; - }) - } - names.forEach(function (name, i) { - if (i > 0) - line += ', '; - if (name.length === 1) { - line += '-' + name - if (type.takesArg) - line += ' ' + arg; - } else { - line += '--' + name - if (type.takesArg) - line += '=' + arg; - } - }); - maxWidth = Math.max(maxWidth, line.length); - lines.push(line); - }); - - // Add help strings. - var helpCol = config.helpCol; - if (!helpCol) { - helpCol = maxWidth + indent.length + 2; - helpCol = Math.min(Math.max(helpCol, minHelpCol), maxHelpCol); - } - var i = -1; - this.options.forEach(function (o) { - if (o.hidden) { - return; - } - i++; - - if (o.group !== undefined && o.group !== null) { - if (o.group === '') { - // Support a empty string "group" to have a blank line between - // sets of options. - lines[i] = ''; - } else { - // Render the group heading with the heading-specific indent. - lines[i] = (i === 0 ? '' : '\n') + headingIndent + - o.group + ':'; - } - return; - } - - var helpDefault; - if (config.includeDefault) { - if (o.default !== undefined) { - helpDefault = format('Default: %j', o.default); - } else if (o.type && optionTypes[o.type].default !== undefined) { - helpDefault = format('Default: %j', - optionTypes[o.type].default); - } - } - - var line = lines[i] = indent + lines[i]; - if (!o.help && !(config.includeEnv && o.env) && !helpDefault) { - return; - } - var n = helpCol - line.length; - if (n >= 0) { - line += space(n); - } else { - line += '\n' + space(helpCol); - } - - var helpEnv = ''; - if (o.env && o.env.length && config.includeEnv) { - helpEnv += 'Environment: '; - var type = optionTypes[o.type]; - var arg = o.helpArg || type.helpArg || 'ARG'; - var envs = (Array.isArray(o.env) ? o.env : [o.env]).map( - function (e) { - if (type.takesArg) { - return e + '=' + arg; - } else { - return e + '=1'; - } - } - ); - helpEnv += envs.join(', '); - } - var help = (o.help || '').trim(); - if (o.helpWrap !== false && config.helpWrap !== false) { - // Wrap help description normally. - if (help.length && !~'.!?"\''.indexOf(help.slice(-1))) { - help += '.'; - } - if (help.length) { - help += ' '; - } - help += helpEnv; - if (helpDefault) { - if (helpEnv) { - help += '. '; - } - help += helpDefault; - } - line += textwrap(help, maxCol - helpCol).join( - '\n' + space(helpCol)); - } else { - // Do not wrap help description, but indent newlines appropriately. - var helpLines = help.split('\n').filter( - function (ln) { return ln.length }); - if (helpEnv !== '') { - helpLines.push(helpEnv); - } - if (helpDefault) { - helpLines.push(helpDefault); - } - line += helpLines.join('\n' + space(helpCol)); - } - - lines[i] = line; - }); - - var rv = ''; - if (lines.length > 0) { - rv = lines.join('\n') + '\n'; - } - return rv; -}; - - -/** - * Return a string suitable for a Bash completion file for this tool. - * - * @param args.name {String} The tool name. - * @param args.specExtra {String} Optional. Extra Bash code content to add - * to the end of the "spec". Typically this is used to append Bash - * "complete_TYPE" functions for custom option types. See - * "examples/ddcompletion.js" for an example. - * @param args.argtypes {Array} Optional. Array of completion types for - * positional args (i.e. non-options). E.g. - * argtypes = ['fruit', 'veggie', 'file'] - * will result in completion of fruits for the first arg, veggies for the - * second, and filenames for the third and subsequent positional args. - * If not given, positional args will use Bash's 'default' completion. - * See `specExtra` for providing Bash `complete_TYPE` functions, e.g. - * `complete_fruit` and `complete_veggie` in this example. - */ -Parser.prototype.bashCompletion = function bashCompletion(args) { - assert.object(args, 'args'); - assert.string(args.name, 'args.name'); - assert.optionalString(args.specExtra, 'args.specExtra'); - assert.optionalArrayOfString(args.argtypes, 'args.argtypes'); - - return bashCompletionFromOptions({ - name: args.name, - specExtra: args.specExtra, - argtypes: args.argtypes, - options: this.options - }); -}; - - -// ---- Bash completion - -const BASH_COMPLETION_TEMPLATE_PATH = path.join( - __dirname, '../etc/dashdash.bash_completion.in'); - -/** - * Return the Bash completion "spec" (the string value for the "{{spec}}" - * var in the "dashdash.bash_completion.in" template) for this tool. - * - * The "spec" is Bash code that defines the CLI options and subcmds for - * the template's completion code. It looks something like this: - * - * local cmd_shortopts="-J ..." - * local cmd_longopts="--help ..." - * local cmd_optargs="-p=tritonprofile ..." - * - * @param args.options {Array} The array of dashdash option specs. - * @param args.context {String} Optional. A context string for the "local cmd*" - * vars in the spec. By default it is the empty string. When used to - * scope for completion on a *sub-command* (e.g. for "git log" on a "git" - * tool), then it would have a value (e.g. "__log"). See - * Bash completion for details. - * @param opts.includeHidden {Boolean} Optional. Default false. By default - * hidden options and subcmds are "excluded". Here excluded means they - * won't be offered as a completion, but if used, their argument type - * will be completed. "Hidden" options and subcmds are ones with the - * `hidden: true` attribute to exclude them from default help output. - * @param args.argtypes {Array} Optional. Array of completion types for - * positional args (i.e. non-options). E.g. - * argtypes = ['fruit', 'veggie', 'file'] - * will result in completion of fruits for the first arg, veggies for the - * second, and filenames for the third and subsequent positional args. - * If not given, positional args will use Bash's 'default' completion. - * See `specExtra` for providing Bash `complete_TYPE` functions, e.g. - * `complete_fruit` and `complete_veggie` in this example. - */ -function bashCompletionSpecFromOptions(args) { - assert.object(args, 'args'); - assert.object(args.options, 'args.options'); - assert.optionalString(args.context, 'args.context'); - assert.optionalBool(args.includeHidden, 'args.includeHidden'); - assert.optionalArrayOfString(args.argtypes, 'args.argtypes'); - - var context = args.context || ''; - var includeHidden = (args.includeHidden === undefined - ? false : args.includeHidden); - - var spec = []; - var shortopts = []; - var longopts = []; - var optargs = []; - (args.options || []).forEach(function (o) { - if (o.group !== undefined && o.group !== null) { - // Skip group headers. - return; - } - - var optNames = o.names || [o.name]; - var optType = getOptionType(o.type); - if (optType.takesArg) { - var completionType = o.completionType || - optType.completionType || o.type; - optNames.forEach(function (optName) { - if (optName.length === 1) { - if (includeHidden || !o.hidden) { - shortopts.push('-' + optName); - } - // Include even hidden options in `optargs` so that bash - // completion of its arg still works. - optargs.push('-' + optName + '=' + completionType); - } else { - if (includeHidden || !o.hidden) { - longopts.push('--' + optName); - } - optargs.push('--' + optName + '=' + completionType); - } - }); - } else { - optNames.forEach(function (optName) { - if (includeHidden || !o.hidden) { - if (optName.length === 1) { - shortopts.push('-' + optName); - } else { - longopts.push('--' + optName); - } - } - }); - } - }); - - spec.push(format('local cmd%s_shortopts="%s"', - context, shortopts.sort().join(' '))); - spec.push(format('local cmd%s_longopts="%s"', - context, longopts.sort().join(' '))); - spec.push(format('local cmd%s_optargs="%s"', - context, optargs.sort().join(' '))); - if (args.argtypes) { - spec.push(format('local cmd%s_argtypes="%s"', - context, args.argtypes.join(' '))); - } - return spec.join('\n'); -} - - -/** - * Return a string suitable for a Bash completion file for this tool. - * - * @param args.name {String} The tool name. - * @param args.options {Array} The array of dashdash option specs. - * @param args.specExtra {String} Optional. Extra Bash code content to add - * to the end of the "spec". Typically this is used to append Bash - * "complete_TYPE" functions for custom option types. See - * "examples/ddcompletion.js" for an example. - * @param args.argtypes {Array} Optional. Array of completion types for - * positional args (i.e. non-options). E.g. - * argtypes = ['fruit', 'veggie', 'file'] - * will result in completion of fruits for the first arg, veggies for the - * second, and filenames for the third and subsequent positional args. - * If not given, positional args will use Bash's 'default' completion. - * See `specExtra` for providing Bash `complete_TYPE` functions, e.g. - * `complete_fruit` and `complete_veggie` in this example. - */ -function bashCompletionFromOptions(args) { - assert.object(args, 'args'); - assert.object(args.options, 'args.options'); - assert.string(args.name, 'args.name'); - assert.optionalString(args.specExtra, 'args.specExtra'); - assert.optionalArrayOfString(args.argtypes, 'args.argtypes'); - - // Gather template data. - var data = { - name: args.name, - date: new Date(), - spec: bashCompletionSpecFromOptions({ - options: args.options, - argtypes: args.argtypes - }), - }; - if (args.specExtra) { - data.spec += '\n\n' + args.specExtra; - } - - // Render template. - var template = fs.readFileSync(BASH_COMPLETION_TEMPLATE_PATH, 'utf8'); - return renderTemplate(template, data); -} - - - -// ---- exports - -function createParser(config) { - return new Parser(config); -} - -/** - * Parse argv with the given options. - * - * @param config {Object} A merge of all the available fields from - * `dashdash.Parser` and `dashdash.Parser.parse`: options, interspersed, - * argv, env, slice. - */ -function parse(config) { - assert.object(config, 'config'); - assert.optionalArrayOfString(config.argv, 'config.argv'); - assert.optionalObject(config.env, 'config.env'); - var config = shallowCopy(config); - var argv = config.argv; - delete config.argv; - var env = config.env; - delete config.env; - - var parser = new Parser(config); - return parser.parse({argv: argv, env: env}); -} - - -/** - * Add a new option type. - * - * @params optionType {Object}: - * - name {String} Required. - * - takesArg {Boolean} Required. Whether this type of option takes an - * argument on process.argv. Typically this is true for all but the - * "bool" type. - * - helpArg {String} Required iff `takesArg === true`. The string to - * show in generated help for options of this type. - * - parseArg {Function} Require. `function (option, optstr, arg)` parser - * that takes a string argument and returns an instance of the - * appropriate type, or throws an error if the arg is invalid. - * - array {Boolean} Optional. Set to true if this is an 'arrayOf' type - * that collects multiple usages of the option in process.argv and - * puts results in an array. - * - arrayFlatten {Boolean} Optional. XXX - * - default Optional. Default value for options of this type, if no - * default is specified in the option type usage. - */ -function addOptionType(optionType) { - assert.object(optionType, 'optionType'); - assert.string(optionType.name, 'optionType.name'); - assert.bool(optionType.takesArg, 'optionType.takesArg'); - if (optionType.takesArg) { - assert.string(optionType.helpArg, 'optionType.helpArg'); - } - assert.func(optionType.parseArg, 'optionType.parseArg'); - assert.optionalBool(optionType.array, 'optionType.array'); - assert.optionalBool(optionType.arrayFlatten, 'optionType.arrayFlatten'); - - optionTypes[optionType.name] = { - takesArg: optionType.takesArg, - helpArg: optionType.helpArg, - parseArg: optionType.parseArg, - array: optionType.array, - arrayFlatten: optionType.arrayFlatten, - default: optionType.default - } -} - - -function getOptionType(name) { - assert.string(name, 'name'); - return optionTypes[name]; -} - - -/** - * Return a synopsis string for the given option spec. - * - * Examples: - * > synopsisFromOpt({names: ['help', 'h'], type: 'bool'}); - * '[ --help | -h ]' - * > synopsisFromOpt({name: 'file', type: 'string', helpArg: 'FILE'}); - * '[ --file=FILE ]' - */ -function synopsisFromOpt(o) { - assert.object(o, 'o'); - - if (o.hasOwnProperty('group')) { - return null; - } - var names = o.names || [o.name]; - // `type` here could be undefined if, for example, the command has a - // dashdash option spec with a bogus 'type'. - var type = getOptionType(o.type); - var helpArg = o.helpArg || (type && type.helpArg) || 'ARG'; - var parts = []; - names.forEach(function (name) { - var part = (name.length === 1 ? '-' : '--') + name; - if (type && type.takesArg) { - part += (name.length === 1 ? ' ' + helpArg : '=' + helpArg); - } - parts.push(part); - }); - return ('[ ' + parts.join(' | ') + ' ]'); -}; - - -module.exports = { - createParser: createParser, - Parser: Parser, - parse: parse, - addOptionType: addOptionType, - getOptionType: getOptionType, - synopsisFromOpt: synopsisFromOpt, - - // Bash completion-related exports - BASH_COMPLETION_TEMPLATE_PATH: BASH_COMPLETION_TEMPLATE_PATH, - bashCompletionFromOptions: bashCompletionFromOptions, - bashCompletionSpecFromOptions: bashCompletionSpecFromOptions, - - // Export the parseFoo parsers because they might be useful as primitives - // for custom option types. - parseBool: parseBool, - parseString: parseString, - parseNumber: parseNumber, - parseInteger: parseInteger, - parsePositiveInteger: parsePositiveInteger, - parseDate: parseDate -}; diff --git a/truebit-implementation/node_modules/dashdash/package.json b/truebit-implementation/node_modules/dashdash/package.json deleted file mode 100644 index e8759d1c..00000000 --- a/truebit-implementation/node_modules/dashdash/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "_from": "dashdash@^1.12.0", - "_id": "dashdash@1.14.1", - "_inBundle": false, - "_integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "_location": "/dashdash", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "dashdash@^1.12.0", - "name": "dashdash", - "escapedName": "dashdash", - "rawSpec": "^1.12.0", - "saveSpec": null, - "fetchSpec": "^1.12.0" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "_shasum": "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0", - "_spec": "dashdash@^1.12.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/sshpk", - "author": { - "name": "Trent Mick", - "email": "trentm@gmail.com", - "url": "http://trentm.com" - }, - "bugs": { - "url": "https://github.com/trentm/node-dashdash/issues" - }, - "bundleDependencies": false, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "deprecated": false, - "description": "A light, featureful and explicit option parsing library.", - "devDependencies": { - "nodeunit": "0.9.x" - }, - "engines": { - "node": ">=0.10" - }, - "homepage": "https://github.com/trentm/node-dashdash#readme", - "keywords": [ - "option", - "parser", - "parsing", - "cli", - "command", - "args", - "bash", - "completion" - ], - "license": "MIT", - "main": "./lib/dashdash.js", - "name": "dashdash", - "repository": { - "type": "git", - "url": "git://github.com/trentm/node-dashdash.git" - }, - "scripts": { - "test": "nodeunit test/*.test.js" - }, - "version": "1.14.1" -} diff --git a/truebit-implementation/node_modules/debug/.coveralls.yml b/truebit-implementation/node_modules/debug/.coveralls.yml deleted file mode 100644 index 20a70685..00000000 --- a/truebit-implementation/node_modules/debug/.coveralls.yml +++ /dev/null @@ -1 +0,0 @@ -repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve diff --git a/truebit-implementation/node_modules/debug/.eslintrc b/truebit-implementation/node_modules/debug/.eslintrc deleted file mode 100644 index 8a37ae2c..00000000 --- a/truebit-implementation/node_modules/debug/.eslintrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "env": { - "browser": true, - "node": true - }, - "rules": { - "no-console": 0, - "no-empty": [1, { "allowEmptyCatch": true }] - }, - "extends": "eslint:recommended" -} diff --git a/truebit-implementation/node_modules/debug/.npmignore b/truebit-implementation/node_modules/debug/.npmignore deleted file mode 100644 index 5f60eecc..00000000 --- a/truebit-implementation/node_modules/debug/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -support -test -examples -example -*.sock -dist -yarn.lock -coverage -bower.json diff --git a/truebit-implementation/node_modules/debug/.travis.yml b/truebit-implementation/node_modules/debug/.travis.yml deleted file mode 100644 index 6c6090c3..00000000 --- a/truebit-implementation/node_modules/debug/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ - -language: node_js -node_js: - - "6" - - "5" - - "4" - -install: - - make node_modules - -script: - - make lint - - make test - - make coveralls diff --git a/truebit-implementation/node_modules/debug/CHANGELOG.md b/truebit-implementation/node_modules/debug/CHANGELOG.md deleted file mode 100644 index eadaa189..00000000 --- a/truebit-implementation/node_modules/debug/CHANGELOG.md +++ /dev/null @@ -1,362 +0,0 @@ - -2.6.9 / 2017-09-22 -================== - - * remove ReDoS regexp in %o formatter (#504) - -2.6.8 / 2017-05-18 -================== - - * Fix: Check for undefined on browser globals (#462, @marbemac) - -2.6.7 / 2017-05-16 -================== - - * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) - * Fix: Inline extend function in node implementation (#452, @dougwilson) - * Docs: Fix typo (#455, @msasad) - -2.6.5 / 2017-04-27 -================== - - * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) - * Misc: clean up browser reference checks (#447, @thebigredgeek) - * Misc: add npm-debug.log to .gitignore (@thebigredgeek) - - -2.6.4 / 2017-04-20 -================== - - * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) - * Chore: ignore bower.json in npm installations. (#437, @joaovieira) - * Misc: update "ms" to v0.7.3 (@tootallnate) - -2.6.3 / 2017-03-13 -================== - - * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) - * Docs: Changelog fix (@thebigredgeek) - -2.6.2 / 2017-03-10 -================== - - * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) - * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) - * Docs: Add Slackin invite badge (@tootallnate) - -2.6.1 / 2017-02-10 -================== - - * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error - * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) - * Fix: IE8 "Expected identifier" error (#414, @vgoma) - * Fix: Namespaces would not disable once enabled (#409, @musikov) - -2.6.0 / 2016-12-28 -================== - - * Fix: added better null pointer checks for browser useColors (@thebigredgeek) - * Improvement: removed explicit `window.debug` export (#404, @tootallnate) - * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) - -2.5.2 / 2016-12-25 -================== - - * Fix: reference error on window within webworkers (#393, @KlausTrainer) - * Docs: fixed README typo (#391, @lurch) - * Docs: added notice about v3 api discussion (@thebigredgeek) - -2.5.1 / 2016-12-20 -================== - - * Fix: babel-core compatibility - -2.5.0 / 2016-12-20 -================== - - * Fix: wrong reference in bower file (@thebigredgeek) - * Fix: webworker compatibility (@thebigredgeek) - * Fix: output formatting issue (#388, @kribblo) - * Fix: babel-loader compatibility (#383, @escwald) - * Misc: removed built asset from repo and publications (@thebigredgeek) - * Misc: moved source files to /src (#378, @yamikuronue) - * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) - * Test: coveralls integration (#378, @yamikuronue) - * Docs: simplified language in the opening paragraph (#373, @yamikuronue) - -2.4.5 / 2016-12-17 -================== - - * Fix: `navigator` undefined in Rhino (#376, @jochenberger) - * Fix: custom log function (#379, @hsiliev) - * Improvement: bit of cleanup + linting fixes (@thebigredgeek) - * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) - * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) - -2.4.4 / 2016-12-14 -================== - - * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) - -2.4.3 / 2016-12-14 -================== - - * Fix: navigation.userAgent error for react native (#364, @escwald) - -2.4.2 / 2016-12-14 -================== - - * Fix: browser colors (#367, @tootallnate) - * Misc: travis ci integration (@thebigredgeek) - * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) - -2.4.1 / 2016-12-13 -================== - - * Fix: typo that broke the package (#356) - -2.4.0 / 2016-12-13 -================== - - * Fix: bower.json references unbuilt src entry point (#342, @justmatt) - * Fix: revert "handle regex special characters" (@tootallnate) - * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) - * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) - * Improvement: allow colors in workers (#335, @botverse) - * Improvement: use same color for same namespace. (#338, @lchenay) - -2.3.3 / 2016-11-09 -================== - - * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) - * Fix: Returning `localStorage` saved values (#331, Levi Thomason) - * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) - -2.3.2 / 2016-11-09 -================== - - * Fix: be super-safe in index.js as well (@TooTallNate) - * Fix: should check whether process exists (Tom Newby) - -2.3.1 / 2016-11-09 -================== - - * Fix: Added electron compatibility (#324, @paulcbetts) - * Improvement: Added performance optimizations (@tootallnate) - * Readme: Corrected PowerShell environment variable example (#252, @gimre) - * Misc: Removed yarn lock file from source control (#321, @fengmk2) - -2.3.0 / 2016-11-07 -================== - - * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) - * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) - * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) - * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) - * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) - * Package: Update "ms" to 0.7.2 (#315, @DevSide) - * Package: removed superfluous version property from bower.json (#207 @kkirsche) - * Readme: fix USE_COLORS to DEBUG_COLORS - * Readme: Doc fixes for format string sugar (#269, @mlucool) - * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) - * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) - * Readme: better docs for browser support (#224, @matthewmueller) - * Tooling: Added yarn integration for development (#317, @thebigredgeek) - * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) - * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) - * Misc: Updated contributors (@thebigredgeek) - -2.2.0 / 2015-05-09 -================== - - * package: update "ms" to v0.7.1 (#202, @dougwilson) - * README: add logging to file example (#193, @DanielOchoa) - * README: fixed a typo (#191, @amir-s) - * browser: expose `storage` (#190, @stephenmathieson) - * Makefile: add a `distclean` target (#189, @stephenmathieson) - -2.1.3 / 2015-03-13 -================== - - * Updated stdout/stderr example (#186) - * Updated example/stdout.js to match debug current behaviour - * Renamed example/stderr.js to stdout.js - * Update Readme.md (#184) - * replace high intensity foreground color for bold (#182, #183) - -2.1.2 / 2015-03-01 -================== - - * dist: recompile - * update "ms" to v0.7.0 - * package: update "browserify" to v9.0.3 - * component: fix "ms.js" repo location - * changed bower package name - * updated documentation about using debug in a browser - * fix: security error on safari (#167, #168, @yields) - -2.1.1 / 2014-12-29 -================== - - * browser: use `typeof` to check for `console` existence - * browser: check for `console.log` truthiness (fix IE 8/9) - * browser: add support for Chrome apps - * Readme: added Windows usage remarks - * Add `bower.json` to properly support bower install - -2.1.0 / 2014-10-15 -================== - - * node: implement `DEBUG_FD` env variable support - * package: update "browserify" to v6.1.0 - * package: add "license" field to package.json (#135, @panuhorsmalahti) - -2.0.0 / 2014-09-01 -================== - - * package: update "browserify" to v5.11.0 - * node: use stderr rather than stdout for logging (#29, @stephenmathieson) - -1.0.4 / 2014-07-15 -================== - - * dist: recompile - * example: remove `console.info()` log usage - * example: add "Content-Type" UTF-8 header to browser example - * browser: place %c marker after the space character - * browser: reset the "content" color via `color: inherit` - * browser: add colors support for Firefox >= v31 - * debug: prefer an instance `log()` function over the global one (#119) - * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) - -1.0.3 / 2014-07-09 -================== - - * Add support for multiple wildcards in namespaces (#122, @seegno) - * browser: fix lint - -1.0.2 / 2014-06-10 -================== - - * browser: update color palette (#113, @gscottolson) - * common: make console logging function configurable (#108, @timoxley) - * node: fix %o colors on old node <= 0.8.x - * Makefile: find node path using shell/which (#109, @timoxley) - -1.0.1 / 2014-06-06 -================== - - * browser: use `removeItem()` to clear localStorage - * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) - * package: add "contributors" section - * node: fix comment typo - * README: list authors - -1.0.0 / 2014-06-04 -================== - - * make ms diff be global, not be scope - * debug: ignore empty strings in enable() - * node: make DEBUG_COLORS able to disable coloring - * *: export the `colors` array - * npmignore: don't publish the `dist` dir - * Makefile: refactor to use browserify - * package: add "browserify" as a dev dependency - * Readme: add Web Inspector Colors section - * node: reset terminal color for the debug content - * node: map "%o" to `util.inspect()` - * browser: map "%j" to `JSON.stringify()` - * debug: add custom "formatters" - * debug: use "ms" module for humanizing the diff - * Readme: add "bash" syntax highlighting - * browser: add Firebug color support - * browser: add colors for WebKit browsers - * node: apply log to `console` - * rewrite: abstract common logic for Node & browsers - * add .jshintrc file - -0.8.1 / 2014-04-14 -================== - - * package: re-add the "component" section - -0.8.0 / 2014-03-30 -================== - - * add `enable()` method for nodejs. Closes #27 - * change from stderr to stdout - * remove unnecessary index.js file - -0.7.4 / 2013-11-13 -================== - - * remove "browserify" key from package.json (fixes something in browserify) - -0.7.3 / 2013-10-30 -================== - - * fix: catch localStorage security error when cookies are blocked (Chrome) - * add debug(err) support. Closes #46 - * add .browser prop to package.json. Closes #42 - -0.7.2 / 2013-02-06 -================== - - * fix package.json - * fix: Mobile Safari (private mode) is broken with debug - * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript - -0.7.1 / 2013-02-05 -================== - - * add repository URL to package.json - * add DEBUG_COLORED to force colored output - * add browserify support - * fix component. Closes #24 - -0.7.0 / 2012-05-04 -================== - - * Added .component to package.json - * Added debug.component.js build - -0.6.0 / 2012-03-16 -================== - - * Added support for "-" prefix in DEBUG [Vinay Pulim] - * Added `.enabled` flag to the node version [TooTallNate] - -0.5.0 / 2012-02-02 -================== - - * Added: humanize diffs. Closes #8 - * Added `debug.disable()` to the CS variant - * Removed padding. Closes #10 - * Fixed: persist client-side variant again. Closes #9 - -0.4.0 / 2012-02-01 -================== - - * Added browser variant support for older browsers [TooTallNate] - * Added `debug.enable('project:*')` to browser variant [TooTallNate] - * Added padding to diff (moved it to the right) - -0.3.0 / 2012-01-26 -================== - - * Added millisecond diff when isatty, otherwise UTC string - -0.2.0 / 2012-01-22 -================== - - * Added wildcard support - -0.1.0 / 2011-12-02 -================== - - * Added: remove colors unless stderr isatty [TooTallNate] - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/debug/LICENSE b/truebit-implementation/node_modules/debug/LICENSE deleted file mode 100644 index 658c933d..00000000 --- a/truebit-implementation/node_modules/debug/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/debug/Makefile b/truebit-implementation/node_modules/debug/Makefile deleted file mode 100644 index 584da8bf..00000000 --- a/truebit-implementation/node_modules/debug/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 -THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) -THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) - -# BIN directory -BIN := $(THIS_DIR)/node_modules/.bin - -# Path -PATH := node_modules/.bin:$(PATH) -SHELL := /bin/bash - -# applications -NODE ?= $(shell which node) -YARN ?= $(shell which yarn) -PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) -BROWSERIFY ?= $(NODE) $(BIN)/browserify - -.FORCE: - -install: node_modules - -node_modules: package.json - @NODE_ENV= $(PKG) install - @touch node_modules - -lint: .FORCE - eslint browser.js debug.js index.js node.js - -test-node: .FORCE - istanbul cover node_modules/mocha/bin/_mocha -- test/**.js - -test-browser: .FORCE - mkdir -p dist - - @$(BROWSERIFY) \ - --standalone debug \ - . > dist/debug.js - - karma start --single-run - rimraf dist - -test: .FORCE - concurrently \ - "make test-node" \ - "make test-browser" - -coveralls: - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js - -.PHONY: all install clean distclean diff --git a/truebit-implementation/node_modules/debug/README.md b/truebit-implementation/node_modules/debug/README.md deleted file mode 100644 index f67be6b3..00000000 --- a/truebit-implementation/node_modules/debug/README.md +++ /dev/null @@ -1,312 +0,0 @@ -# debug -[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) -[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) - - - -A tiny node.js debugging utility modelled after node core's debugging technique. - -**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)** - -## Installation - -```bash -$ npm install debug -``` - -## Usage - -`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. - -Example _app.js_: - -```js -var debug = require('debug')('http') - , http = require('http') - , name = 'My App'; - -// fake app - -debug('booting %s', name); - -http.createServer(function(req, res){ - debug(req.method + ' ' + req.url); - res.end('hello\n'); -}).listen(3000, function(){ - debug('listening'); -}); - -// fake worker of some kind - -require('./worker'); -``` - -Example _worker.js_: - -```js -var debug = require('debug')('worker'); - -setInterval(function(){ - debug('doing some work'); -}, 1000); -``` - - The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples: - - ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png) - - ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png) - -#### Windows note - - On Windows the environment variable is set using the `set` command. - - ```cmd - set DEBUG=*,-not_this - ``` - - Note that PowerShell uses different syntax to set environment variables. - - ```cmd - $env:DEBUG = "*,-not_this" - ``` - -Then, run the program to be debugged as usual. - -## Millisecond diff - - When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. - - ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png) - - When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below: - - ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png) - -## Conventions - - If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". - -## Wildcards - - The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. - - You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:". - -## Environment Variables - - When running through Node.js, you can set a few environment variables that will - change the behavior of the debug logging: - -| Name | Purpose | -|-----------|-------------------------------------------------| -| `DEBUG` | Enables/disables specific debugging namespaces. | -| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | -| `DEBUG_DEPTH` | Object inspection depth. | -| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | - - - __Note:__ The environment variables beginning with `DEBUG_` end up being - converted into an Options object that gets used with `%o`/`%O` formatters. - See the Node.js documentation for - [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) - for the complete list. - -## Formatters - - - Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters: - -| Formatter | Representation | -|-----------|----------------| -| `%O` | Pretty-print an Object on multiple lines. | -| `%o` | Pretty-print an Object all on a single line. | -| `%s` | String. | -| `%d` | Number (both integer and float). | -| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | -| `%%` | Single percent sign ('%'). This does not consume an argument. | - -### Custom formatters - - You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like: - -```js -const createDebug = require('debug') -createDebug.formatters.h = (v) => { - return v.toString('hex') -} - -// …elsewhere -const debug = createDebug('foo') -debug('this is hex: %h', new Buffer('hello world')) -// foo this is hex: 68656c6c6f20776f726c6421 +0ms -``` - -## Browser support - You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), - or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), - if you don't want to build it yourself. - - Debug's enable state is currently persisted by `localStorage`. - Consider the situation shown below where you have `worker:a` and `worker:b`, - and wish to debug both. You can enable this using `localStorage.debug`: - -```js -localStorage.debug = 'worker:*' -``` - -And then refresh the page. - -```js -a = debug('worker:a'); -b = debug('worker:b'); - -setInterval(function(){ - a('doing some work'); -}, 1000); - -setInterval(function(){ - b('doing some work'); -}, 1200); -``` - -#### Web Inspector Colors - - Colors are also enabled on "Web Inspectors" that understand the `%c` formatting - option. These are WebKit web inspectors, Firefox ([since version - 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) - and the Firebug plugin for Firefox (any version). - - Colored output looks something like: - - ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) - - -## Output streams - - By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: - -Example _stdout.js_: - -```js -var debug = require('debug'); -var error = debug('app:error'); - -// by default stderr is used -error('goes to stderr!'); - -var log = debug('app:log'); -// set this namespace to log via console.log -log.log = console.log.bind(console); // don't forget to bind to console! -log('goes to stdout'); -error('still goes to stderr!'); - -// set all output to go via console.info -// overrides all per-namespace log settings -debug.log = console.info.bind(console); -error('now goes to stdout via console.info'); -log('still goes to stdout, but via console.info now'); -``` - - -## Authors - - - TJ Holowaychuk - - Nathan Rajlich - - Andrew Rhyne - -## Backers - -Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## Sponsors - -Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## License - -(The MIT License) - -Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/debug/component.json b/truebit-implementation/node_modules/debug/component.json deleted file mode 100644 index 9de26410..00000000 --- a/truebit-implementation/node_modules/debug/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "debug", - "repo": "visionmedia/debug", - "description": "small debugging utility", - "version": "2.6.9", - "keywords": [ - "debug", - "log", - "debugger" - ], - "main": "src/browser.js", - "scripts": [ - "src/browser.js", - "src/debug.js" - ], - "dependencies": { - "rauchg/ms.js": "0.7.1" - } -} diff --git a/truebit-implementation/node_modules/debug/karma.conf.js b/truebit-implementation/node_modules/debug/karma.conf.js deleted file mode 100644 index 103a82d1..00000000 --- a/truebit-implementation/node_modules/debug/karma.conf.js +++ /dev/null @@ -1,70 +0,0 @@ -// Karma configuration -// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC) - -module.exports = function(config) { - config.set({ - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha', 'chai', 'sinon'], - - - // list of files / patterns to load in the browser - files: [ - 'dist/debug.js', - 'test/*spec.js' - ], - - - // list of files to exclude - exclude: [ - 'src/node.js' - ], - - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - }, - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress'], - - - // web server port - port: 9876, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['PhantomJS'], - - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: false, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity - }) -} diff --git a/truebit-implementation/node_modules/debug/node.js b/truebit-implementation/node_modules/debug/node.js deleted file mode 100644 index 7fc36fe6..00000000 --- a/truebit-implementation/node_modules/debug/node.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./src/node'); diff --git a/truebit-implementation/node_modules/debug/package.json b/truebit-implementation/node_modules/debug/package.json deleted file mode 100644 index a890b26d..00000000 --- a/truebit-implementation/node_modules/debug/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_from": "debug@2.6.9", - "_id": "debug@2.6.9", - "_inBundle": false, - "_integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "_location": "/debug", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "debug@2.6.9", - "name": "debug", - "escapedName": "debug", - "rawSpec": "2.6.9", - "saveSpec": null, - "fetchSpec": "2.6.9" - }, - "_requiredBy": [ - "/body-parser", - "/express", - "/finalhandler", - "/send", - "/websocket" - ], - "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "_shasum": "5d128515df134ff327e90a4c93f4e077a536341f", - "_spec": "debug@2.6.9", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "browser": "./src/browser.js", - "bugs": { - "url": "https://github.com/visionmedia/debug/issues" - }, - "bundleDependencies": false, - "component": { - "scripts": { - "debug/index.js": "browser.js", - "debug/debug.js": "debug.js" - } - }, - "contributors": [ - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io" - }, - { - "name": "Andrew Rhyne", - "email": "rhyneandrew@gmail.com" - } - ], - "dependencies": { - "ms": "2.0.0" - }, - "deprecated": false, - "description": "small debugging utility", - "devDependencies": { - "browserify": "9.0.3", - "chai": "^3.5.0", - "concurrently": "^3.1.0", - "coveralls": "^2.11.15", - "eslint": "^3.12.1", - "istanbul": "^0.4.5", - "karma": "^1.3.0", - "karma-chai": "^0.1.0", - "karma-mocha": "^1.3.0", - "karma-phantomjs-launcher": "^1.0.2", - "karma-sinon": "^1.0.5", - "mocha": "^3.2.0", - "mocha-lcov-reporter": "^1.2.0", - "rimraf": "^2.5.4", - "sinon": "^1.17.6", - "sinon-chai": "^2.8.0" - }, - "homepage": "https://github.com/visionmedia/debug#readme", - "keywords": [ - "debug", - "log", - "debugger" - ], - "license": "MIT", - "main": "./src/index.js", - "name": "debug", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/debug.git" - }, - "version": "2.6.9" -} diff --git a/truebit-implementation/node_modules/debug/src/browser.js b/truebit-implementation/node_modules/debug/src/browser.js deleted file mode 100644 index 71069249..00000000 --- a/truebit-implementation/node_modules/debug/src/browser.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * This is the web browser implementation of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = require('./debug'); -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = 'undefined' != typeof chrome - && 'undefined' != typeof chrome.storage - ? chrome.storage.local - : localstorage(); - -/** - * Colors. - */ - -exports.colors = [ - 'lightseagreen', - 'forestgreen', - 'goldenrod', - 'dodgerblue', - 'darkorchid', - 'crimson' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { - return true; - } - - // is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} - -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - -exports.formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (err) { - return '[UnexpectedJSONParseError]: ' + err.message; - } -}; - - -/** - * Colorize log arguments if enabled. - * - * @api public - */ - -function formatArgs(args) { - var useColors = this.useColors; - - args[0] = (useColors ? '%c' : '') - + this.namespace - + (useColors ? ' %c' : ' ') - + args[0] - + (useColors ? '%c ' : ' ') - + '+' + exports.humanize(this.diff); - - if (!useColors) return; - - var c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit') - - // the final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - var index = 0; - var lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, function(match) { - if ('%%' === match) return; - index++; - if ('%c' === match) { - // we only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); -} - -/** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". - * - * @api public - */ - -function log() { - // this hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return 'object' === typeof console - && console.log - && Function.prototype.apply.call(console.log, console, arguments); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - -function save(namespaces) { - try { - if (null == namespaces) { - exports.storage.removeItem('debug'); - } else { - exports.storage.debug = namespaces; - } - } catch(e) {} -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - var r; - try { - r = exports.storage.debug; - } catch(e) {} - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; -} - -/** - * Enable namespaces listed in `localStorage.debug` initially. - */ - -exports.enable(load()); - -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - -function localstorage() { - try { - return window.localStorage; - } catch (e) {} -} diff --git a/truebit-implementation/node_modules/debug/src/debug.js b/truebit-implementation/node_modules/debug/src/debug.js deleted file mode 100644 index 6a5e3fc9..00000000 --- a/truebit-implementation/node_modules/debug/src/debug.js +++ /dev/null @@ -1,202 +0,0 @@ - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; -exports.coerce = coerce; -exports.disable = disable; -exports.enable = enable; -exports.enabled = enabled; -exports.humanize = require('ms'); - -/** - * The currently active debug mode names, and names to skip. - */ - -exports.names = []; -exports.skips = []; - -/** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - -exports.formatters = {}; - -/** - * Previous log timestamp. - */ - -var prevTime; - -/** - * Select a color. - * @param {String} namespace - * @return {Number} - * @api private - */ - -function selectColor(namespace) { - var hash = 0, i; - - for (i in namespace) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return exports.colors[Math.abs(hash) % exports.colors.length]; -} - -/** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - -function createDebug(namespace) { - - function debug() { - // disabled? - if (!debug.enabled) return; - - var self = debug; - - // set `diff` timestamp - var curr = +new Date(); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - // turn the `arguments` into a proper Array - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - - args[0] = exports.coerce(args[0]); - - if ('string' !== typeof args[0]) { - // anything else let's inspect with %O - args.unshift('%O'); - } - - // apply any `formatters` transformations - var index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { - // if we encounter an escaped % then don't increase the array index - if (match === '%%') return match; - index++; - var formatter = exports.formatters[format]; - if ('function' === typeof formatter) { - var val = args[index]; - match = formatter.call(self, val); - - // now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // apply env-specific formatting (colors, etc.) - exports.formatArgs.call(self, args); - - var logFn = debug.log || exports.log || console.log.bind(console); - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.enabled = exports.enabled(namespace); - debug.useColors = exports.useColors(); - debug.color = selectColor(namespace); - - // env-specific initialization logic for debug instances - if ('function' === typeof exports.init) { - exports.init(debug); - } - - return debug; -} - -/** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - -function enable(namespaces) { - exports.save(namespaces); - - exports.names = []; - exports.skips = []; - - var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - var len = split.length; - - for (var i = 0; i < len; i++) { - if (!split[i]) continue; // ignore empty strings - namespaces = split[i].replace(/\*/g, '.*?'); - if (namespaces[0] === '-') { - exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - exports.names.push(new RegExp('^' + namespaces + '$')); - } - } -} - -/** - * Disable debug output. - * - * @api public - */ - -function disable() { - exports.enable(''); -} - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -function enabled(name) { - var i, len; - for (i = 0, len = exports.skips.length; i < len; i++) { - if (exports.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = exports.names.length; i < len; i++) { - if (exports.names[i].test(name)) { - return true; - } - } - return false; -} - -/** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} diff --git a/truebit-implementation/node_modules/debug/src/index.js b/truebit-implementation/node_modules/debug/src/index.js deleted file mode 100644 index e12cf4d5..00000000 --- a/truebit-implementation/node_modules/debug/src/index.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Detect Electron renderer process, which is node, but we should - * treat as a browser. - */ - -if (typeof process !== 'undefined' && process.type === 'renderer') { - module.exports = require('./browser.js'); -} else { - module.exports = require('./node.js'); -} diff --git a/truebit-implementation/node_modules/debug/src/inspector-log.js b/truebit-implementation/node_modules/debug/src/inspector-log.js deleted file mode 100644 index 60ea6c04..00000000 --- a/truebit-implementation/node_modules/debug/src/inspector-log.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = inspectorLog; - -// black hole -const nullStream = new (require('stream').Writable)(); -nullStream._write = () => {}; - -/** - * Outputs a `console.log()` to the Node.js Inspector console *only*. - */ -function inspectorLog() { - const stdout = console._stdout; - console._stdout = nullStream; - console.log.apply(console, arguments); - console._stdout = stdout; -} diff --git a/truebit-implementation/node_modules/debug/src/node.js b/truebit-implementation/node_modules/debug/src/node.js deleted file mode 100644 index b15109c9..00000000 --- a/truebit-implementation/node_modules/debug/src/node.js +++ /dev/null @@ -1,248 +0,0 @@ -/** - * Module dependencies. - */ - -var tty = require('tty'); -var util = require('util'); - -/** - * This is the Node.js implementation of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = require('./debug'); -exports.init = init; -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; - -/** - * Colors. - */ - -exports.colors = [6, 2, 3, 4, 5, 1]; - -/** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js - */ - -exports.inspectOpts = Object.keys(process.env).filter(function (key) { - return /^debug_/i.test(key); -}).reduce(function (obj, key) { - // camel-case - var prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); - - // coerce string value into JS value - var val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) val = true; - else if (/^(no|off|false|disabled)$/i.test(val)) val = false; - else if (val === 'null') val = null; - else val = Number(val); - - obj[prop] = val; - return obj; -}, {}); - -/** - * The file descriptor to write the `debug()` calls to. - * Set the `DEBUG_FD` env variable to override with another value. i.e.: - * - * $ DEBUG_FD=3 node script.js 3>debug.log - */ - -var fd = parseInt(process.env.DEBUG_FD, 10) || 2; - -if (1 !== fd && 2 !== fd) { - util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() -} - -var stream = 1 === fd ? process.stdout : - 2 === fd ? process.stderr : - createWritableStdioStream(fd); - -/** - * Is stdout a TTY? Colored output is enabled when `true`. - */ - -function useColors() { - return 'colors' in exports.inspectOpts - ? Boolean(exports.inspectOpts.colors) - : tty.isatty(fd); -} - -/** - * Map %o to `util.inspect()`, all on a single line. - */ - -exports.formatters.o = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .split('\n').map(function(str) { - return str.trim() - }).join(' '); -}; - -/** - * Map %o to `util.inspect()`, allowing multiple lines if needed. - */ - -exports.formatters.O = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); -}; - -/** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - -function formatArgs(args) { - var name = this.namespace; - var useColors = this.useColors; - - if (useColors) { - var c = this.color; - var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; - - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); - } else { - args[0] = new Date().toUTCString() - + ' ' + name + ' ' + args[0]; - } -} - -/** - * Invokes `util.format()` with the specified arguments and writes to `stream`. - */ - -function log() { - return stream.write(util.format.apply(util, arguments) + '\n'); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - -function save(namespaces) { - if (null == namespaces) { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } else { - process.env.DEBUG = namespaces; - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - return process.env.DEBUG; -} - -/** - * Copied from `node/src/node.js`. - * - * XXX: It's lame that node doesn't expose this API out-of-the-box. It also - * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. - */ - -function createWritableStdioStream (fd) { - var stream; - var tty_wrap = process.binding('tty_wrap'); - - // Note stream._type is used for test-module-load-list.js - - switch (tty_wrap.guessHandleType(fd)) { - case 'TTY': - stream = new tty.WriteStream(fd); - stream._type = 'tty'; - - // Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - case 'FILE': - var fs = require('fs'); - stream = new fs.SyncWriteStream(fd, { autoClose: false }); - stream._type = 'fs'; - break; - - case 'PIPE': - case 'TCP': - var net = require('net'); - stream = new net.Socket({ - fd: fd, - readable: false, - writable: true - }); - - // FIXME Should probably have an option in net.Socket to create a - // stream from an existing fd which is writable only. But for now - // we'll just add this hack and set the `readable` member to false. - // Test: ./node test/fixtures/echo.js < /etc/passwd - stream.readable = false; - stream.read = null; - stream._type = 'pipe'; - - // FIXME Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - default: - // Probably an error on in uv_guess_handle() - throw new Error('Implement me. Unknown stream file type!'); - } - - // For supporting legacy API we put the FD here. - stream.fd = fd; - - stream._isStdio = true; - - return stream; -} - -/** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ - -function init (debug) { - debug.inspectOpts = {}; - - var keys = Object.keys(exports.inspectOpts); - for (var i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } -} - -/** - * Enable namespaces listed in `process.env.DEBUG` initially. - */ - -exports.enable(load()); diff --git a/truebit-implementation/node_modules/decode-uri-component/index.js b/truebit-implementation/node_modules/decode-uri-component/index.js deleted file mode 100644 index 691499b0..00000000 --- a/truebit-implementation/node_modules/decode-uri-component/index.js +++ /dev/null @@ -1,94 +0,0 @@ -'use strict'; -var token = '%[a-f0-9]{2}'; -var singleMatcher = new RegExp(token, 'gi'); -var multiMatcher = new RegExp('(' + token + ')+', 'gi'); - -function decodeComponents(components, split) { - try { - // Try to decode the entire string first - return decodeURIComponent(components.join('')); - } catch (err) { - // Do nothing - } - - if (components.length === 1) { - return components; - } - - split = split || 1; - - // Split the array in 2 parts - var left = components.slice(0, split); - var right = components.slice(split); - - return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right)); -} - -function decode(input) { - try { - return decodeURIComponent(input); - } catch (err) { - var tokens = input.match(singleMatcher); - - for (var i = 1; i < tokens.length; i++) { - input = decodeComponents(tokens, i).join(''); - - tokens = input.match(singleMatcher); - } - - return input; - } -} - -function customDecodeURIComponent(input) { - // Keep track of all the replacements and prefill the map with the `BOM` - var replaceMap = { - '%FE%FF': '\uFFFD\uFFFD', - '%FF%FE': '\uFFFD\uFFFD' - }; - - var match = multiMatcher.exec(input); - while (match) { - try { - // Decode as big chunks as possible - replaceMap[match[0]] = decodeURIComponent(match[0]); - } catch (err) { - var result = decode(match[0]); - - if (result !== match[0]) { - replaceMap[match[0]] = result; - } - } - - match = multiMatcher.exec(input); - } - - // Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else - replaceMap['%C2'] = '\uFFFD'; - - var entries = Object.keys(replaceMap); - - for (var i = 0; i < entries.length; i++) { - // Replace all decoded components - var key = entries[i]; - input = input.replace(new RegExp(key, 'g'), replaceMap[key]); - } - - return input; -} - -module.exports = function (encodedURI) { - if (typeof encodedURI !== 'string') { - throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`'); - } - - try { - encodedURI = encodedURI.replace(/\+/g, ' '); - - // Try the built in decoder first - return decodeURIComponent(encodedURI); - } catch (err) { - // Fallback to a more advanced decoder - return customDecodeURIComponent(encodedURI); - } -}; diff --git a/truebit-implementation/node_modules/decode-uri-component/license b/truebit-implementation/node_modules/decode-uri-component/license deleted file mode 100644 index 78b08554..00000000 --- a/truebit-implementation/node_modules/decode-uri-component/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sam Verschueren (github.com/SamVerschueren) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decode-uri-component/package.json b/truebit-implementation/node_modules/decode-uri-component/package.json deleted file mode 100644 index f375a8d5..00000000 --- a/truebit-implementation/node_modules/decode-uri-component/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "decode-uri-component@^0.2.0", - "_id": "decode-uri-component@0.2.0", - "_inBundle": false, - "_integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "_location": "/decode-uri-component", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "decode-uri-component@^0.2.0", - "name": "decode-uri-component", - "escapedName": "decode-uri-component", - "rawSpec": "^0.2.0", - "saveSpec": null, - "fetchSpec": "^0.2.0" - }, - "_requiredBy": [ - "/query-string" - ], - "_resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "_shasum": "eb3913333458775cb84cd1a1fae062106bb87545", - "_spec": "decode-uri-component@^0.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/query-string", - "author": { - "name": "Sam Verschueren", - "email": "sam.verschueren@gmail.com", - "url": "github.com/SamVerschueren" - }, - "bugs": { - "url": "https://github.com/SamVerschueren/decode-uri-component/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A better decodeURIComponent", - "devDependencies": { - "ava": "^0.17.0", - "coveralls": "^2.13.1", - "nyc": "^10.3.2", - "xo": "^0.16.0" - }, - "engines": { - "node": ">=0.10" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/SamVerschueren/decode-uri-component#readme", - "keywords": [ - "decode", - "uri", - "component", - "decodeuricomponent", - "components", - "decoder", - "url" - ], - "license": "MIT", - "name": "decode-uri-component", - "repository": { - "type": "git", - "url": "git+https://github.com/SamVerschueren/decode-uri-component.git" - }, - "scripts": { - "coveralls": "nyc report --reporter=text-lcov | coveralls", - "test": "xo && nyc ava" - }, - "version": "0.2.0" -} diff --git a/truebit-implementation/node_modules/decode-uri-component/readme.md b/truebit-implementation/node_modules/decode-uri-component/readme.md deleted file mode 100644 index 795c87ff..00000000 --- a/truebit-implementation/node_modules/decode-uri-component/readme.md +++ /dev/null @@ -1,70 +0,0 @@ -# decode-uri-component - -[![Build Status](https://travis-ci.org/SamVerschueren/decode-uri-component.svg?branch=master)](https://travis-ci.org/SamVerschueren/decode-uri-component) [![Coverage Status](https://coveralls.io/repos/SamVerschueren/decode-uri-component/badge.svg?branch=master&service=github)](https://coveralls.io/github/SamVerschueren/decode-uri-component?branch=master) - -> A better [decodeURIComponent](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent) - - -## Why? - -- Decodes `+` to a space. -- Converts the [BOM](https://en.wikipedia.org/wiki/Byte_order_mark) to a [replacement character](https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character) `�`. -- Does not throw with invalid encoded input. -- Decodes as much of the string as possible. - - -## Install - -``` -$ npm install --save decode-uri-component -``` - - -## Usage - -```js -const decodeUriComponent = require('decode-uri-component'); - -decodeUriComponent('%25'); -//=> '%' - -decodeUriComponent('%'); -//=> '%' - -decodeUriComponent('st%C3%A5le'); -//=> 'ståle' - -decodeUriComponent('%st%C3%A5le%'); -//=> '%ståle%' - -decodeUriComponent('%%7Bst%C3%A5le%7D%'); -//=> '%{ståle}%' - -decodeUriComponent('%7B%ab%%7C%de%%7D'); -//=> '{%ab%|%de%}' - -decodeUriComponent('%FE%FF'); -//=> '\uFFFD\uFFFD' - -decodeUriComponent('%C2'); -//=> '\uFFFD' - -decodeUriComponent('%C2%B5'); -//=> 'µ' -``` - - -## API - -### decodeUriComponent(encodedURI) - -#### encodedURI - -Type: `string` - -An encoded component of a Uniform Resource Identifier. - - -## License - -MIT © [Sam Verschueren](https://github.com/SamVerschueren) diff --git a/truebit-implementation/node_modules/decompress-response/index.js b/truebit-implementation/node_modules/decompress-response/index.js deleted file mode 100644 index d8acd4a3..00000000 --- a/truebit-implementation/node_modules/decompress-response/index.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; -const PassThrough = require('stream').PassThrough; -const zlib = require('zlib'); -const mimicResponse = require('mimic-response'); - -module.exports = response => { - // TODO: Use Array#includes when targeting Node.js 6 - if (['gzip', 'deflate'].indexOf(response.headers['content-encoding']) === -1) { - return response; - } - - const unzip = zlib.createUnzip(); - const stream = new PassThrough(); - - mimicResponse(response, stream); - - unzip.on('error', err => { - if (err.code === 'Z_BUF_ERROR') { - stream.end(); - return; - } - - stream.emit('error', err); - }); - - response.pipe(unzip).pipe(stream); - - return stream; -}; diff --git a/truebit-implementation/node_modules/decompress-response/license b/truebit-implementation/node_modules/decompress-response/license deleted file mode 100644 index 32a16ce3..00000000 --- a/truebit-implementation/node_modules/decompress-response/license +++ /dev/null @@ -1,21 +0,0 @@ -`The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-response/package.json b/truebit-implementation/node_modules/decompress-response/package.json deleted file mode 100644 index cd85fcae..00000000 --- a/truebit-implementation/node_modules/decompress-response/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_from": "decompress-response@^3.2.0", - "_id": "decompress-response@3.3.0", - "_inBundle": false, - "_integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "_location": "/decompress-response", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "decompress-response@^3.2.0", - "name": "decompress-response", - "escapedName": "decompress-response", - "rawSpec": "^3.2.0", - "saveSpec": null, - "fetchSpec": "^3.2.0" - }, - "_requiredBy": [ - "/got", - "/simple-get" - ], - "_resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "_shasum": "80a4dd323748384bfa248083622aedec982adff3", - "_spec": "decompress-response@^3.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "bugs": { - "url": "https://github.com/sindresorhus/decompress-response/issues" - }, - "bundleDependencies": false, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "deprecated": false, - "description": "Decompress a HTTP response if needed", - "devDependencies": { - "ava": "*", - "get-stream": "^3.0.0", - "pify": "^3.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/decompress-response#readme", - "keywords": [ - "decompress", - "response", - "http", - "https", - "zlib", - "gzip", - "zip", - "deflate", - "unzip", - "ungzip", - "incoming", - "message", - "stream", - "compressed" - ], - "license": "MIT", - "maintainers": [ - { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - { - "name": "Vsevolod Strukchinsky", - "email": "floatdrop@gmail.com", - "url": "github.com/floatdrop" - } - ], - "name": "decompress-response", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/decompress-response.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "3.3.0" -} diff --git a/truebit-implementation/node_modules/decompress-response/readme.md b/truebit-implementation/node_modules/decompress-response/readme.md deleted file mode 100644 index 1b98767f..00000000 --- a/truebit-implementation/node_modules/decompress-response/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# decompress-response [![Build Status](https://travis-ci.org/sindresorhus/decompress-response.svg?branch=master)](https://travis-ci.org/sindresorhus/decompress-response) - -> Decompress a HTTP response if needed - -Decompresses the [response](https://nodejs.org/api/http.html#http_class_http_incomingmessage) from [`http.request`](https://nodejs.org/api/http.html#http_http_request_options_callback) if it's gzipped or deflated, otherwise just passes it through. - -Used by [`got`](https://github.com/sindresorhus/got). - - -## Install - -``` -$ npm install decompress-response -``` - - -## Usage - -```js -const http = require('http'); -const decompressResponse = require('decompress-response'); - -http.get('http://sindresorhus.com', response => { - response = decompressResponse(response); -}); -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/decompress-tar/index.js b/truebit-implementation/node_modules/decompress-tar/index.js deleted file mode 100644 index 721b48cc..00000000 --- a/truebit-implementation/node_modules/decompress-tar/index.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; -const fileType = require('file-type'); -const isStream = require('is-stream'); -const tarStream = require('tar-stream'); - -module.exports = () => input => { - if (!Buffer.isBuffer(input) && !isStream(input)) { - return Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`)); - } - - if (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'tar')) { - return Promise.resolve([]); - } - - const extract = tarStream.extract(); - const files = []; - - extract.on('entry', (header, stream, cb) => { - const chunk = []; - - stream.on('data', data => chunk.push(data)); - stream.on('end', () => { - const file = { - data: Buffer.concat(chunk), - mode: header.mode, - mtime: header.mtime, - path: header.name, - type: header.type - }; - - if (header.type === 'symlink' || header.type === 'link') { - file.linkname = header.linkname; - } - - files.push(file); - cb(); - }); - }); - - const promise = new Promise((resolve, reject) => { - if (!Buffer.isBuffer(input)) { - input.on('error', reject); - } - - extract.on('finish', () => resolve(files)); - extract.on('error', reject); - }); - - extract.then = promise.then.bind(promise); - extract.catch = promise.catch.bind(promise); - - if (Buffer.isBuffer(input)) { - extract.end(input); - } else { - input.pipe(extract); - } - - return extract; -}; diff --git a/truebit-implementation/node_modules/decompress-tar/license b/truebit-implementation/node_modules/decompress-tar/license deleted file mode 100644 index db6bc32c..00000000 --- a/truebit-implementation/node_modules/decompress-tar/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Kevin Mårtensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-tar/package.json b/truebit-implementation/node_modules/decompress-tar/package.json deleted file mode 100644 index c57e50c7..00000000 --- a/truebit-implementation/node_modules/decompress-tar/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "_from": "decompress-tar@^4.0.0", - "_id": "decompress-tar@4.1.1", - "_inBundle": false, - "_integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "_location": "/decompress-tar", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "decompress-tar@^4.0.0", - "name": "decompress-tar", - "escapedName": "decompress-tar", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/decompress", - "/decompress-tarbz2", - "/decompress-targz" - ], - "_resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "_shasum": "718cbd3fcb16209716e70a26b84e7ba4592e5af1", - "_spec": "decompress-tar@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress", - "author": { - "name": "Kevin Mårtensson", - "email": "kevinmartensson@gmail.com", - "url": "https://github.com/kevva" - }, - "bugs": { - "url": "https://github.com/kevva/decompress-tar/issues" - }, - "bundleDependencies": false, - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "deprecated": false, - "description": "decompress tar plugin", - "devDependencies": { - "ava": "*", - "is-jpg": "^1.0.0", - "pify": "^3.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/kevva/decompress-tar#readme", - "keywords": [ - "decompress", - "decompressplugin", - "extract", - "tar" - ], - "license": "MIT", - "name": "decompress-tar", - "repository": { - "type": "git", - "url": "git+https://github.com/kevva/decompress-tar.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "4.1.1" -} diff --git a/truebit-implementation/node_modules/decompress-tar/readme.md b/truebit-implementation/node_modules/decompress-tar/readme.md deleted file mode 100644 index 92730439..00000000 --- a/truebit-implementation/node_modules/decompress-tar/readme.md +++ /dev/null @@ -1,44 +0,0 @@ -# decompress-tar [![Build Status](https://travis-ci.org/kevva/decompress-tar.svg?branch=master)](https://travis-ci.org/kevva/decompress-tar) - -> tar decompress plugin - - -## Install - -``` -$ npm install decompress-tar -``` - - -## Usage - -```js -const decompress = require('decompress'); -const decompressTar = require('decompress-tar'); - -decompress('unicorn.tar', 'dist', { - plugins: [ - decompressTar() - ] -}).then(() => { - console.log('Files decompressed'); -}); -``` - - -## API - -### decompressTar()(input) - -Returns both a Promise for a Buffer and a [Duplex stream](https://nodejs.org/api/stream.html#stream_class_stream_duplex). - -#### input - -Type: `Buffer` `Stream` - -Buffer or stream to decompress. - - -## License - -MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/truebit-implementation/node_modules/decompress-tarbz2/index.js b/truebit-implementation/node_modules/decompress-tarbz2/index.js deleted file mode 100644 index 9ce7c41b..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; -const decompressTar = require('decompress-tar'); -const fileType = require('file-type'); -const isStream = require('is-stream'); -const seekBzip = require('seek-bzip'); -const unbzip2Stream = require('unbzip2-stream'); - -module.exports = () => input => { - if (!Buffer.isBuffer(input) && !isStream(input)) { - return Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`)); - } - - if (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'bz2')) { - return Promise.resolve([]); - } - - if (Buffer.isBuffer(input)) { - return decompressTar()(seekBzip.decode(input)); - } - - return decompressTar()(input.pipe(unbzip2Stream())); -}; diff --git a/truebit-implementation/node_modules/decompress-tarbz2/license b/truebit-implementation/node_modules/decompress-tarbz2/license deleted file mode 100644 index db6bc32c..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Kevin Mårtensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/index.js b/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/index.js deleted file mode 100644 index 347cfa3f..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/index.js +++ /dev/null @@ -1,599 +0,0 @@ -'use strict'; -const toBytes = s => Array.from(s).map(c => c.charCodeAt(0)); -const xpiZipFilename = toBytes('META-INF/mozilla.rsa'); -const oxmlContentTypes = toBytes('[Content_Types].xml'); -const oxmlRels = toBytes('_rels/.rels'); - -module.exports = input => { - const buf = new Uint8Array(input); - - if (!(buf && buf.length > 1)) { - return null; - } - - const check = (header, opts) => { - opts = Object.assign({ - offset: 0 - }, opts); - - for (let i = 0; i < header.length; i++) { - // If a bitmask is set - if (opts.mask) { - // If header doesn't equal `buf` with bits masked off - if (header[i] !== (opts.mask[i] & buf[i + opts.offset])) { - return false; - } - } else if (header[i] !== buf[i + opts.offset]) { - return false; - } - } - - return true; - }; - - if (check([0xFF, 0xD8, 0xFF])) { - return { - ext: 'jpg', - mime: 'image/jpeg' - }; - } - - if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) { - return { - ext: 'png', - mime: 'image/png' - }; - } - - if (check([0x47, 0x49, 0x46])) { - return { - ext: 'gif', - mime: 'image/gif' - }; - } - - if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) { - return { - ext: 'webp', - mime: 'image/webp' - }; - } - - if (check([0x46, 0x4C, 0x49, 0x46])) { - return { - ext: 'flif', - mime: 'image/flif' - }; - } - - // Needs to be before `tif` check - if ( - (check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) && - check([0x43, 0x52], {offset: 8}) - ) { - return { - ext: 'cr2', - mime: 'image/x-canon-cr2' - }; - } - - if ( - check([0x49, 0x49, 0x2A, 0x0]) || - check([0x4D, 0x4D, 0x0, 0x2A]) - ) { - return { - ext: 'tif', - mime: 'image/tiff' - }; - } - - if (check([0x42, 0x4D])) { - return { - ext: 'bmp', - mime: 'image/bmp' - }; - } - - if (check([0x49, 0x49, 0xBC])) { - return { - ext: 'jxr', - mime: 'image/vnd.ms-photo' - }; - } - - if (check([0x38, 0x42, 0x50, 0x53])) { - return { - ext: 'psd', - mime: 'image/vnd.adobe.photoshop' - }; - } - - // Zip-based file formats - // Need to be before the `zip` check - if (check([0x50, 0x4B, 0x3, 0x4])) { - if ( - check([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30}) - ) { - return { - ext: 'epub', - mime: 'application/epub+zip' - }; - } - - // Assumes signed `.xpi` from addons.mozilla.org - if (check(xpiZipFilename, {offset: 30})) { - return { - ext: 'xpi', - mime: 'application/x-xpinstall' - }; - } - - // https://github.com/file/file/blob/master/magic/Magdir/msooxml - if (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) { - const sliced = buf.subarray(4, 4 + 2000); - const nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4); - const header2Pos = nextZipHeaderIndex(sliced); - - if (header2Pos !== -1) { - const slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000); - const header3Pos = nextZipHeaderIndex(slicedAgain); - - if (header3Pos !== -1) { - const offset = 8 + header2Pos + header3Pos + 30; - - if (check(toBytes('word/'), {offset})) { - return { - ext: 'docx', - mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' - }; - } - - if (check(toBytes('ppt/'), {offset})) { - return { - ext: 'pptx', - mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' - }; - } - - if (check(toBytes('xl/'), {offset})) { - return { - ext: 'xlsx', - mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' - }; - } - } - } - } - } - - if ( - check([0x50, 0x4B]) && - (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && - (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8) - ) { - return { - ext: 'zip', - mime: 'application/zip' - }; - } - - if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) { - return { - ext: 'tar', - mime: 'application/x-tar' - }; - } - - if ( - check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) && - (buf[6] === 0x0 || buf[6] === 0x1) - ) { - return { - ext: 'rar', - mime: 'application/x-rar-compressed' - }; - } - - if (check([0x1F, 0x8B, 0x8])) { - return { - ext: 'gz', - mime: 'application/gzip' - }; - } - - if (check([0x42, 0x5A, 0x68])) { - return { - ext: 'bz2', - mime: 'application/x-bzip2' - }; - } - - if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) { - return { - ext: '7z', - mime: 'application/x-7z-compressed' - }; - } - - if (check([0x78, 0x01])) { - return { - ext: 'dmg', - mime: 'application/x-apple-diskimage' - }; - } - - if (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5 - ( - check([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) && - ( - check([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41 - check([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42 - check([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM - check([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2 - check([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4 - check([0x4D, 0x34, 0x56], {offset: 8}) || // M4V - check([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH - ) - )) { - return { - ext: 'mp4', - mime: 'video/mp4' - }; - } - - if (check([0x4D, 0x54, 0x68, 0x64])) { - return { - ext: 'mid', - mime: 'audio/midi' - }; - } - - // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska - if (check([0x1A, 0x45, 0xDF, 0xA3])) { - const sliced = buf.subarray(4, 4 + 4096); - const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82); - - if (idPos !== -1) { - const docTypePos = idPos + 3; - const findDocType = type => Array.from(type).every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0)); - - if (findDocType('matroska')) { - return { - ext: 'mkv', - mime: 'video/x-matroska' - }; - } - - if (findDocType('webm')) { - return { - ext: 'webm', - mime: 'video/webm' - }; - } - } - } - - if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) || - check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || - check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) || - check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG - check([0x77, 0x69, 0x64, 0x65], {offset: 4})) { - return { - ext: 'mov', - mime: 'video/quicktime' - }; - } - - if ( - check([0x52, 0x49, 0x46, 0x46]) && - check([0x41, 0x56, 0x49], {offset: 8}) - ) { - return { - ext: 'avi', - mime: 'video/x-msvideo' - }; - } - - if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) { - return { - ext: 'wmv', - mime: 'video/x-ms-wmv' - }; - } - - if (check([0x0, 0x0, 0x1, 0xBA])) { - return { - ext: 'mpg', - mime: 'video/mpeg' - }; - } - - // Check for MP3 header at different starting offsets - for (let start = 0; start < 2 && start < (buf.length - 16); start++) { - if ( - check([0x49, 0x44, 0x33], {offset: start}) || // ID3 header - check([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header - ) { - return { - ext: 'mp3', - mime: 'audio/mpeg' - }; - } - } - - if ( - check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) || - check([0x4D, 0x34, 0x41, 0x20]) - ) { - return { - ext: 'm4a', - mime: 'audio/m4a' - }; - } - - // Needs to be before `ogg` check - if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) { - return { - ext: 'opus', - mime: 'audio/opus' - }; - } - - if (check([0x4F, 0x67, 0x67, 0x53])) { - return { - ext: 'ogg', - mime: 'audio/ogg' - }; - } - - if (check([0x66, 0x4C, 0x61, 0x43])) { - return { - ext: 'flac', - mime: 'audio/x-flac' - }; - } - - if ( - check([0x52, 0x49, 0x46, 0x46]) && - check([0x57, 0x41, 0x56, 0x45], {offset: 8}) - ) { - return { - ext: 'wav', - mime: 'audio/x-wav' - }; - } - - if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) { - return { - ext: 'amr', - mime: 'audio/amr' - }; - } - - if (check([0x25, 0x50, 0x44, 0x46])) { - return { - ext: 'pdf', - mime: 'application/pdf' - }; - } - - if (check([0x4D, 0x5A])) { - return { - ext: 'exe', - mime: 'application/x-msdownload' - }; - } - - if ( - (buf[0] === 0x43 || buf[0] === 0x46) && - check([0x57, 0x53], {offset: 1}) - ) { - return { - ext: 'swf', - mime: 'application/x-shockwave-flash' - }; - } - - if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) { - return { - ext: 'rtf', - mime: 'application/rtf' - }; - } - - if (check([0x00, 0x61, 0x73, 0x6D])) { - return { - ext: 'wasm', - mime: 'application/wasm' - }; - } - - if ( - check([0x77, 0x4F, 0x46, 0x46]) && - ( - check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || - check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) - ) - ) { - return { - ext: 'woff', - mime: 'font/woff' - }; - } - - if ( - check([0x77, 0x4F, 0x46, 0x32]) && - ( - check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || - check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) - ) - ) { - return { - ext: 'woff2', - mime: 'font/woff2' - }; - } - - if ( - check([0x4C, 0x50], {offset: 34}) && - ( - check([0x00, 0x00, 0x01], {offset: 8}) || - check([0x01, 0x00, 0x02], {offset: 8}) || - check([0x02, 0x00, 0x02], {offset: 8}) - ) - ) { - return { - ext: 'eot', - mime: 'application/octet-stream' - }; - } - - if (check([0x00, 0x01, 0x00, 0x00, 0x00])) { - return { - ext: 'ttf', - mime: 'font/ttf' - }; - } - - if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) { - return { - ext: 'otf', - mime: 'font/otf' - }; - } - - if (check([0x00, 0x00, 0x01, 0x00])) { - return { - ext: 'ico', - mime: 'image/x-icon' - }; - } - - if (check([0x46, 0x4C, 0x56, 0x01])) { - return { - ext: 'flv', - mime: 'video/x-flv' - }; - } - - if (check([0x25, 0x21])) { - return { - ext: 'ps', - mime: 'application/postscript' - }; - } - - if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) { - return { - ext: 'xz', - mime: 'application/x-xz' - }; - } - - if (check([0x53, 0x51, 0x4C, 0x69])) { - return { - ext: 'sqlite', - mime: 'application/x-sqlite3' - }; - } - - if (check([0x4E, 0x45, 0x53, 0x1A])) { - return { - ext: 'nes', - mime: 'application/x-nintendo-nes-rom' - }; - } - - if (check([0x43, 0x72, 0x32, 0x34])) { - return { - ext: 'crx', - mime: 'application/x-google-chrome-extension' - }; - } - - if ( - check([0x4D, 0x53, 0x43, 0x46]) || - check([0x49, 0x53, 0x63, 0x28]) - ) { - return { - ext: 'cab', - mime: 'application/vnd.ms-cab-compressed' - }; - } - - // Needs to be before `ar` check - if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) { - return { - ext: 'deb', - mime: 'application/x-deb' - }; - } - - if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) { - return { - ext: 'ar', - mime: 'application/x-unix-archive' - }; - } - - if (check([0xED, 0xAB, 0xEE, 0xDB])) { - return { - ext: 'rpm', - mime: 'application/x-rpm' - }; - } - - if ( - check([0x1F, 0xA0]) || - check([0x1F, 0x9D]) - ) { - return { - ext: 'Z', - mime: 'application/x-compress' - }; - } - - if (check([0x4C, 0x5A, 0x49, 0x50])) { - return { - ext: 'lz', - mime: 'application/x-lzip' - }; - } - - if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) { - return { - ext: 'msi', - mime: 'application/x-msi' - }; - } - - if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) { - return { - ext: 'mxf', - mime: 'application/mxf' - }; - } - - if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) { - return { - ext: 'mts', - mime: 'video/mp2t' - }; - } - - if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) { - return { - ext: 'blend', - mime: 'application/x-blender' - }; - } - - if (check([0x42, 0x50, 0x47, 0xFB])) { - return { - ext: 'bpg', - mime: 'image/bpg' - }; - } - - return null; -}; diff --git a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/license b/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/license deleted file mode 100644 index e7af2f77..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/package.json b/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/package.json deleted file mode 100644 index 7aa23dda..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/package.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "_from": "file-type@^6.1.0", - "_id": "file-type@6.2.0", - "_inBundle": false, - "_integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "_location": "/decompress-tarbz2/file-type", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "file-type@^6.1.0", - "name": "file-type", - "escapedName": "file-type", - "rawSpec": "^6.1.0", - "saveSpec": null, - "fetchSpec": "^6.1.0" - }, - "_requiredBy": [ - "/decompress-tarbz2" - ], - "_resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "_shasum": "e50cd75d356ffed4e306dc4f5bcf52a79903a919", - "_spec": "file-type@^6.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-tarbz2", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/file-type/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Detect the file type of a Buffer/Uint8Array", - "devDependencies": { - "ava": "*", - "read-chunk": "^2.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/file-type#readme", - "keywords": [ - "mime", - "file", - "type", - "archive", - "image", - "img", - "pic", - "picture", - "flash", - "photo", - "video", - "detect", - "check", - "is", - "exif", - "exe", - "binary", - "buffer", - "uint8array", - "jpg", - "png", - "gif", - "webp", - "flif", - "cr2", - "tif", - "bmp", - "jxr", - "psd", - "zip", - "tar", - "rar", - "gz", - "bz2", - "7z", - "dmg", - "mp4", - "m4v", - "mid", - "mkv", - "webm", - "mov", - "avi", - "mpg", - "mp3", - "m4a", - "ogg", - "opus", - "flac", - "wav", - "amr", - "pdf", - "epub", - "swf", - "rtf", - "woff", - "woff2", - "eot", - "ttf", - "otf", - "ico", - "flv", - "ps", - "xz", - "sqlite", - "xpi", - "cab", - "deb", - "ar", - "rpm", - "Z", - "lz", - "msi", - "mxf", - "mts", - "wasm", - "webassembly", - "blend", - "bpg", - "docx", - "pptx", - "xlsx" - ], - "license": "MIT", - "name": "file-type", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/file-type.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "6.2.0" -} diff --git a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/readme.md b/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/readme.md deleted file mode 100644 index 0cc734f3..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/node_modules/file-type/readme.md +++ /dev/null @@ -1,165 +0,0 @@ -# file-type [![Build Status](https://travis-ci.org/sindresorhus/file-type.svg?branch=master)](https://travis-ci.org/sindresorhus/file-type) - -> Detect the file type of a Buffer/Uint8Array - -The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. - - -## Install - -``` -$ npm install file-type -``` - - -## Usage - -##### Node.js - -```js -const readChunk = require('read-chunk'); -const fileType = require('file-type'); -const buffer = readChunk.sync('unicorn.png', 0, 4100); - -fileType(buffer); -//=> {ext: 'png', mime: 'image/png'} -``` - -Or from a remote location: - -```js -const http = require('http'); -const fileType = require('file-type'); -const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif'; - -http.get(url, res => { - res.once('data', chunk => { - res.destroy(); - console.log(fileType(chunk)); - //=> {ext: 'gif', mime: 'image/gif'} - }); -}); -``` - -##### Browser - -```js -const xhr = new XMLHttpRequest(); -xhr.open('GET', 'unicorn.png'); -xhr.responseType = 'arraybuffer'; - -xhr.onload = () => { - fileType(new Uint8Array(this.response)); - //=> {ext: 'png', mime: 'image/png'} -}; - -xhr.send(); -``` - - -## API - -### fileType(input) - -Returns an `Object` with: - -- `ext` - One of the [supported file types](#supported-file-types) -- `mime` - The [MIME type](http://en.wikipedia.org/wiki/Internet_media_type) - -Or `null` when no match. - -#### input - -Type: `Buffer` `Uint8Array` - -It only needs the first 4100 bytes. - - -## Supported file types - -- [`jpg`](https://en.wikipedia.org/wiki/JPEG) -- [`png`](https://en.wikipedia.org/wiki/Portable_Network_Graphics) -- [`gif`](https://en.wikipedia.org/wiki/GIF) -- [`webp`](https://en.wikipedia.org/wiki/WebP) -- [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format) -- [`cr2`](http://fileinfo.com/extension/cr2) -- [`tif`](https://en.wikipedia.org/wiki/Tagged_Image_File_Format) -- [`bmp`](https://en.wikipedia.org/wiki/BMP_file_format) -- [`jxr`](https://en.wikipedia.org/wiki/JPEG_XR) -- [`psd`](https://en.wikipedia.org/wiki/Adobe_Photoshop#File_format) -- [`zip`](https://en.wikipedia.org/wiki/Zip_(file_format)) -- [`tar`](https://en.wikipedia.org/wiki/Tar_(computing)#File_format) -- [`rar`](https://en.wikipedia.org/wiki/RAR_(file_format)) -- [`gz`](https://en.wikipedia.org/wiki/Gzip) -- [`bz2`](https://en.wikipedia.org/wiki/Bzip2) -- [`7z`](https://en.wikipedia.org/wiki/7z) -- [`dmg`](https://en.wikipedia.org/wiki/Apple_Disk_Image) -- [`mp4`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#Filename_extensions) -- [`m4v`](https://en.wikipedia.org/wiki/M4V) -- [`mid`](https://en.wikipedia.org/wiki/MIDI) -- [`mkv`](https://en.wikipedia.org/wiki/Matroska) -- [`webm`](https://en.wikipedia.org/wiki/WebM) -- [`mov`](https://en.wikipedia.org/wiki/QuickTime_File_Format) -- [`avi`](https://en.wikipedia.org/wiki/Audio_Video_Interleave) -- [`wmv`](https://en.wikipedia.org/wiki/Windows_Media_Video) -- [`mpg`](https://en.wikipedia.org/wiki/MPEG-1) -- [`mp3`](https://en.wikipedia.org/wiki/MP3) -- [`m4a`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#.MP4_versus_.M4A) -- [`ogg`](https://en.wikipedia.org/wiki/Ogg) -- [`opus`](https://en.wikipedia.org/wiki/Opus_(audio_format)) -- [`flac`](https://en.wikipedia.org/wiki/FLAC) -- [`wav`](https://en.wikipedia.org/wiki/WAV) -- [`amr`](https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec) -- [`pdf`](https://en.wikipedia.org/wiki/Portable_Document_Format) -- [`epub`](https://en.wikipedia.org/wiki/EPUB) -- [`exe`](https://en.wikipedia.org/wiki/.exe) -- [`swf`](https://en.wikipedia.org/wiki/SWF) -- [`rtf`](https://en.wikipedia.org/wiki/Rich_Text_Format) -- [`woff`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) -- [`woff2`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) -- [`eot`](https://en.wikipedia.org/wiki/Embedded_OpenType) -- [`ttf`](https://en.wikipedia.org/wiki/TrueType) -- [`otf`](https://en.wikipedia.org/wiki/OpenType) -- [`ico`](https://en.wikipedia.org/wiki/ICO_(file_format)) -- [`flv`](https://en.wikipedia.org/wiki/Flash_Video) -- [`ps`](https://en.wikipedia.org/wiki/Postscript) -- [`xz`](https://en.wikipedia.org/wiki/Xz) -- [`sqlite`](https://www.sqlite.org/fileformat2.html) -- [`nes`](http://fileinfo.com/extension/nes) -- [`crx`](https://developer.chrome.com/extensions/crx) -- [`xpi`](https://en.wikipedia.org/wiki/XPInstall) -- [`cab`](https://en.wikipedia.org/wiki/Cabinet_(file_format)) -- [`deb`](https://en.wikipedia.org/wiki/Deb_(file_format)) -- [`ar`](https://en.wikipedia.org/wiki/Ar_(Unix)) -- [`rpm`](http://fileinfo.com/extension/rpm) -- [`Z`](http://fileinfo.com/extension/z) -- [`lz`](https://en.wikipedia.org/wiki/Lzip) -- [`msi`](https://en.wikipedia.org/wiki/Windows_Installer) -- [`mxf`](https://en.wikipedia.org/wiki/Material_Exchange_Format) -- [`mts`](https://en.wikipedia.org/wiki/.m2ts) -- [`wasm`](https://en.wikipedia.org/wiki/WebAssembly) -- [`blend`](https://wiki.blender.org/index.php/Dev:Source/Architecture/File_Format) -- [`bpg`](https://bellard.org/bpg/) -- [`docx`](https://en.wikipedia.org/wiki/Office_Open_XML) -- [`pptx`](https://en.wikipedia.org/wiki/Office_Open_XML) -- [`xlsx`](https://en.wikipedia.org/wiki/Office_Open_XML) - -*SVG isn't included as it requires the whole file to be read, but you can get it [here](https://github.com/sindresorhus/is-svg).* - -*Pull request welcome for additional commonly used file types.* - - -## Related - -- [file-type-cli](https://github.com/sindresorhus/file-type-cli) - CLI for this module - - -## Created by - -- [Sindre Sorhus](https://github.com/sindresorhus) -- [Mikael Finstad](https://github.com/mifi) - - -## License - -MIT diff --git a/truebit-implementation/node_modules/decompress-tarbz2/package.json b/truebit-implementation/node_modules/decompress-tarbz2/package.json deleted file mode 100644 index 4fc00b2b..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "decompress-tarbz2@^4.0.0", - "_id": "decompress-tarbz2@4.1.1", - "_inBundle": false, - "_integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "_location": "/decompress-tarbz2", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "decompress-tarbz2@^4.0.0", - "name": "decompress-tarbz2", - "escapedName": "decompress-tarbz2", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/decompress" - ], - "_resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "_shasum": "3082a5b880ea4043816349f378b56c516be1a39b", - "_spec": "decompress-tarbz2@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress", - "author": { - "name": "Kevin Mårtensson", - "email": "kevinmartensson@gmail.com", - "url": "github.com/kevva" - }, - "bugs": { - "url": "https://github.com/kevva/decompress-tarbz2/issues" - }, - "bundleDependencies": false, - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "deprecated": false, - "description": "decompress tar.bz2 plugin", - "devDependencies": { - "ava": "*", - "is-jpg": "^1.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/kevva/decompress-tarbz2#readme", - "keywords": [ - "bz2", - "decompress", - "decompressplugin", - "extract", - "tar", - "tar.bz2", - "tarbz2" - ], - "license": "MIT", - "name": "decompress-tarbz2", - "repository": { - "type": "git", - "url": "git+https://github.com/kevva/decompress-tarbz2.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "4.1.1" -} diff --git a/truebit-implementation/node_modules/decompress-tarbz2/readme.md b/truebit-implementation/node_modules/decompress-tarbz2/readme.md deleted file mode 100644 index 6fa0727b..00000000 --- a/truebit-implementation/node_modules/decompress-tarbz2/readme.md +++ /dev/null @@ -1,44 +0,0 @@ -# decompress-tarbz2 [![Build Status](https://travis-ci.org/kevva/decompress-tarbz2.svg?branch=master)](https://travis-ci.org/kevva/decompress-tarbz2) - -> tar.bz2 decompress plugin - - -## Install - -``` -$ npm install decompress-tarbz2 -``` - - -## Usage - -```js -const decompress = require('decompress'); -const decompressTarbz = require('decompress-tarbz2'); - -decompress('unicorn.tar.gz', 'dist', { - plugins: [ - decompressTarbz() - ] -}).then(() => { - console.log('Files decompressed'); -}); -``` - - -## API - -### decompressTarbz()(input) - -Returns both a `Promise` for a `Buffer` and a [`Duplex stream`](https://nodejs.org/api/stream.html#stream_class_stream_duplex). - -#### input - -Type: `Buffer` `Stream` - -Buffer to decompress. - - -## License - -MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/truebit-implementation/node_modules/decompress-targz/index.js b/truebit-implementation/node_modules/decompress-targz/index.js deleted file mode 100644 index d67769c1..00000000 --- a/truebit-implementation/node_modules/decompress-targz/index.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; -const zlib = require('zlib'); -const decompressTar = require('decompress-tar'); -const fileType = require('file-type'); -const isStream = require('is-stream'); - -module.exports = () => input => { - if (!Buffer.isBuffer(input) && !isStream(input)) { - return Promise.reject(new TypeError(`Expected a Buffer or Stream, got ${typeof input}`)); - } - - if (Buffer.isBuffer(input) && (!fileType(input) || fileType(input).ext !== 'gz')) { - return Promise.resolve([]); - } - - const unzip = zlib.createGunzip(); - const result = decompressTar()(unzip); - - if (Buffer.isBuffer(input)) { - unzip.end(input); - } else { - input.pipe(unzip); - } - - return result; -}; diff --git a/truebit-implementation/node_modules/decompress-targz/license b/truebit-implementation/node_modules/decompress-targz/license deleted file mode 100644 index db6bc32c..00000000 --- a/truebit-implementation/node_modules/decompress-targz/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Kevin Mårtensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-targz/package.json b/truebit-implementation/node_modules/decompress-targz/package.json deleted file mode 100644 index 102e7e68..00000000 --- a/truebit-implementation/node_modules/decompress-targz/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "decompress-targz@^4.0.0", - "_id": "decompress-targz@4.1.1", - "_inBundle": false, - "_integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "_location": "/decompress-targz", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "decompress-targz@^4.0.0", - "name": "decompress-targz", - "escapedName": "decompress-targz", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/decompress" - ], - "_resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "_shasum": "c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee", - "_spec": "decompress-targz@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress", - "author": { - "name": "Kevin Mårtensson", - "email": "kevinmartensson@gmail.com", - "url": "https://github.com/kevva" - }, - "bugs": { - "url": "https://github.com/kevva/decompress-targz/issues" - }, - "bundleDependencies": false, - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "deprecated": false, - "description": "decompress tar.gz plugin", - "devDependencies": { - "ava": "*", - "is-jpg": "^1.0.0", - "pify": "^3.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/kevva/decompress-targz#readme", - "keywords": [ - "decompress", - "decompressplugin", - "extract", - "tar.gz", - "targz" - ], - "license": "MIT", - "name": "decompress-targz", - "repository": { - "type": "git", - "url": "git+https://github.com/kevva/decompress-targz.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "4.1.1" -} diff --git a/truebit-implementation/node_modules/decompress-targz/readme.md b/truebit-implementation/node_modules/decompress-targz/readme.md deleted file mode 100644 index a05c8f9d..00000000 --- a/truebit-implementation/node_modules/decompress-targz/readme.md +++ /dev/null @@ -1,44 +0,0 @@ -# decompress-targz [![Build Status](https://travis-ci.org/kevva/decompress-targz.svg?branch=master)](https://travis-ci.org/kevva/decompress-targz) - -> tar.gz decompress plugin - - -## Install - -``` -$ npm install decompress-targz -``` - - -## Usage - -```js -const decompress = require('decompress'); -const decompressTargz = require('decompress-targz'); - -decompress('unicorn.tar.gz', 'dist', { - plugins: [ - decompressTargz() - ] -}).then(() => { - console.log('Files decompressed'); -}); -``` - - -## API - -### decompressTargz()(input) - -Returns both a Promise for a Buffer and a [Duplex stream](https://nodejs.org/api/stream.html#stream_class_stream_duplex). - -#### input - -Type: `Buffer` `Stream` - -Buffer or stream to decompress. - - -## License - -MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/truebit-implementation/node_modules/decompress-unzip/index.js b/truebit-implementation/node_modules/decompress-unzip/index.js deleted file mode 100644 index 3c1f9431..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/index.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict'; -const fileType = require('file-type'); -const getStream = require('get-stream'); -const pify = require('pify'); -const yauzl = require('yauzl'); - -const getType = (entry, mode) => { - const IFMT = 61440; - const IFDIR = 16384; - const IFLNK = 40960; - const madeBy = entry.versionMadeBy >> 8; - - if ((mode & IFMT) === IFLNK) { - return 'symlink'; - } - - if ((mode & IFMT) === IFDIR || (madeBy === 0 && entry.externalFileAttributes === 16)) { - return 'directory'; - } - - return 'file'; -}; - -const extractEntry = (entry, zip) => { - const file = { - mode: (entry.externalFileAttributes >> 16) & 0xFFFF, - mtime: entry.getLastModDate(), - path: entry.fileName - }; - - file.type = getType(entry, file.mode); - - if (file.mode === 0 && file.type === 'directory') { - file.mode = 493; - } - - if (file.mode === 0) { - file.mode = 420; - } - - return pify(zip.openReadStream.bind(zip))(entry) - .then(getStream.buffer) - .then(buf => { - file.data = buf; - - if (file.type === 'symlink') { - file.linkname = buf.toString(); - } - - return file; - }) - .catch(err => { - zip.close(); - throw err; - }); -}; - -const extractFile = zip => new Promise((resolve, reject) => { - const files = []; - - zip.readEntry(); - - zip.on('entry', entry => { - extractEntry(entry, zip) - .catch(reject) - .then(file => { - files.push(file); - zip.readEntry(); - }); - }); - - zip.on('error', reject); - zip.on('end', () => resolve(files)); -}); - -module.exports = () => buf => { - if (!Buffer.isBuffer(buf)) { - return Promise.reject(new TypeError(`Expected a Buffer, got ${typeof buf}`)); - } - - if (!fileType(buf) || fileType(buf).ext !== 'zip') { - return Promise.resolve([]); - } - - return pify(yauzl.fromBuffer)(buf, {lazyEntries: true}).then(extractFile); -}; diff --git a/truebit-implementation/node_modules/decompress-unzip/license b/truebit-implementation/node_modules/decompress-unzip/license deleted file mode 100644 index a8ecbbe9..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Kevin Mårtensson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/index.js b/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/index.js deleted file mode 100644 index f498c10b..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/index.js +++ /dev/null @@ -1,452 +0,0 @@ -'use strict'; -module.exports = function (buf) { - if (!(buf && buf.length > 1)) { - return null; - } - - if (buf[0] === 0xFF && buf[1] === 0xD8 && buf[2] === 0xFF) { - return { - ext: 'jpg', - mime: 'image/jpeg' - }; - } - - if (buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4E && buf[3] === 0x47) { - return { - ext: 'png', - mime: 'image/png' - }; - } - - if (buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46) { - return { - ext: 'gif', - mime: 'image/gif' - }; - } - - if (buf[8] === 0x57 && buf[9] === 0x45 && buf[10] === 0x42 && buf[11] === 0x50) { - return { - ext: 'webp', - mime: 'image/webp' - }; - } - - if (buf[0] === 0x46 && buf[1] === 0x4C && buf[2] === 0x49 && buf[3] === 0x46) { - return { - ext: 'flif', - mime: 'image/flif' - }; - } - - // needs to be before `tif` check - if (((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) && buf[8] === 0x43 && buf[9] === 0x52) { - return { - ext: 'cr2', - mime: 'image/x-canon-cr2' - }; - } - - if ((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) { - return { - ext: 'tif', - mime: 'image/tiff' - }; - } - - if (buf[0] === 0x42 && buf[1] === 0x4D) { - return { - ext: 'bmp', - mime: 'image/bmp' - }; - } - - if (buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0xBC) { - return { - ext: 'jxr', - mime: 'image/vnd.ms-photo' - }; - } - - if (buf[0] === 0x38 && buf[1] === 0x42 && buf[2] === 0x50 && buf[3] === 0x53) { - return { - ext: 'psd', - mime: 'image/vnd.adobe.photoshop' - }; - } - - // needs to be before `zip` check - if (buf[0] === 0x50 && buf[1] === 0x4B && buf[2] === 0x3 && buf[3] === 0x4 && buf[30] === 0x6D && buf[31] === 0x69 && buf[32] === 0x6D && buf[33] === 0x65 && buf[34] === 0x74 && buf[35] === 0x79 && buf[36] === 0x70 && buf[37] === 0x65 && buf[38] === 0x61 && buf[39] === 0x70 && buf[40] === 0x70 && buf[41] === 0x6C && buf[42] === 0x69 && buf[43] === 0x63 && buf[44] === 0x61 && buf[45] === 0x74 && buf[46] === 0x69 && buf[47] === 0x6F && buf[48] === 0x6E && buf[49] === 0x2F && buf[50] === 0x65 && buf[51] === 0x70 && buf[52] === 0x75 && buf[53] === 0x62 && buf[54] === 0x2B && buf[55] === 0x7A && buf[56] === 0x69 && buf[57] === 0x70) { - return { - ext: 'epub', - mime: 'application/epub+zip' - }; - } - - // needs to be before `zip` check - // assumes signed .xpi from addons.mozilla.org - if (buf[0] === 0x50 && buf[1] === 0x4B && buf[2] === 0x3 && buf[3] === 0x4 && buf[30] === 0x4D && buf[31] === 0x45 && buf[32] === 0x54 && buf[33] === 0x41 && buf[34] === 0x2D && buf[35] === 0x49 && buf[36] === 0x4E && buf[37] === 0x46 && buf[38] === 0x2F && buf[39] === 0x6D && buf[40] === 0x6F && buf[41] === 0x7A && buf[42] === 0x69 && buf[43] === 0x6C && buf[44] === 0x6C && buf[45] === 0x61 && buf[46] === 0x2E && buf[47] === 0x72 && buf[48] === 0x73 && buf[49] === 0x61) { - return { - ext: 'xpi', - mime: 'application/x-xpinstall' - }; - } - - if (buf[0] === 0x50 && buf[1] === 0x4B && (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)) { - return { - ext: 'zip', - mime: 'application/zip' - }; - } - - if (buf[257] === 0x75 && buf[258] === 0x73 && buf[259] === 0x74 && buf[260] === 0x61 && buf[261] === 0x72) { - return { - ext: 'tar', - mime: 'application/x-tar' - }; - } - - if (buf[0] === 0x52 && buf[1] === 0x61 && buf[2] === 0x72 && buf[3] === 0x21 && buf[4] === 0x1A && buf[5] === 0x7 && (buf[6] === 0x0 || buf[6] === 0x1)) { - return { - ext: 'rar', - mime: 'application/x-rar-compressed' - }; - } - - if (buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x8) { - return { - ext: 'gz', - mime: 'application/gzip' - }; - } - - if (buf[0] === 0x42 && buf[1] === 0x5A && buf[2] === 0x68) { - return { - ext: 'bz2', - mime: 'application/x-bzip2' - }; - } - - if (buf[0] === 0x37 && buf[1] === 0x7A && buf[2] === 0xBC && buf[3] === 0xAF && buf[4] === 0x27 && buf[5] === 0x1C) { - return { - ext: '7z', - mime: 'application/x-7z-compressed' - }; - } - - if (buf[0] === 0x78 && buf[1] === 0x01) { - return { - ext: 'dmg', - mime: 'application/x-apple-diskimage' - }; - } - - if ( - (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && (buf[3] === 0x18 || buf[3] === 0x20) && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) || - (buf[0] === 0x33 && buf[1] === 0x67 && buf[2] === 0x70 && buf[3] === 0x35) || - (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x6D && buf[9] === 0x70 && buf[10] === 0x34 && buf[11] === 0x32 && buf[16] === 0x6D && buf[17] === 0x70 && buf[18] === 0x34 && buf[19] === 0x31 && buf[20] === 0x6D && buf[21] === 0x70 && buf[22] === 0x34 && buf[23] === 0x32 && buf[24] === 0x69 && buf[25] === 0x73 && buf[26] === 0x6F && buf[27] === 0x6D) || - (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x69 && buf[9] === 0x73 && buf[10] === 0x6F && buf[11] === 0x6D) || - (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1c && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x6D && buf[9] === 0x70 && buf[10] === 0x34 && buf[11] === 0x32 && buf[12] === 0x0 && buf[13] === 0x0 && buf[14] === 0x0 && buf[15] === 0x0) - ) { - return { - ext: 'mp4', - mime: 'video/mp4' - }; - } - - if ((buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x56)) { - return { - ext: 'm4v', - mime: 'video/x-m4v' - }; - } - - if (buf[0] === 0x4D && buf[1] === 0x54 && buf[2] === 0x68 && buf[3] === 0x64) { - return { - ext: 'mid', - mime: 'audio/midi' - }; - } - - // needs to be before the `webm` check - if (buf[31] === 0x6D && buf[32] === 0x61 && buf[33] === 0x74 && buf[34] === 0x72 && buf[35] === 0x6f && buf[36] === 0x73 && buf[37] === 0x6B && buf[38] === 0x61) { - return { - ext: 'mkv', - mime: 'video/x-matroska' - }; - } - - if (buf[0] === 0x1A && buf[1] === 0x45 && buf[2] === 0xDF && buf[3] === 0xA3) { - return { - ext: 'webm', - mime: 'video/webm' - }; - } - - if (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x14 && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) { - return { - ext: 'mov', - mime: 'video/quicktime' - }; - } - - if (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x41 && buf[9] === 0x56 && buf[10] === 0x49) { - return { - ext: 'avi', - mime: 'video/x-msvideo' - }; - } - - if (buf[0] === 0x30 && buf[1] === 0x26 && buf[2] === 0xB2 && buf[3] === 0x75 && buf[4] === 0x8E && buf[5] === 0x66 && buf[6] === 0xCF && buf[7] === 0x11 && buf[8] === 0xA6 && buf[9] === 0xD9) { - return { - ext: 'wmv', - mime: 'video/x-ms-wmv' - }; - } - - if (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x1 && buf[3].toString(16)[0] === 'b') { - return { - ext: 'mpg', - mime: 'video/mpeg' - }; - } - - if ((buf[0] === 0x49 && buf[1] === 0x44 && buf[2] === 0x33) || (buf[0] === 0xFF && buf[1] === 0xfb)) { - return { - ext: 'mp3', - mime: 'audio/mpeg' - }; - } - - if ((buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x41) || (buf[0] === 0x4D && buf[1] === 0x34 && buf[2] === 0x41 && buf[3] === 0x20)) { - return { - ext: 'm4a', - mime: 'audio/m4a' - }; - } - - // needs to be before `ogg` check - if (buf[28] === 0x4F && buf[29] === 0x70 && buf[30] === 0x75 && buf[31] === 0x73 && buf[32] === 0x48 && buf[33] === 0x65 && buf[34] === 0x61 && buf[35] === 0x64) { - return { - ext: 'opus', - mime: 'audio/opus' - }; - } - - if (buf[0] === 0x4F && buf[1] === 0x67 && buf[2] === 0x67 && buf[3] === 0x53) { - return { - ext: 'ogg', - mime: 'audio/ogg' - }; - } - - if (buf[0] === 0x66 && buf[1] === 0x4C && buf[2] === 0x61 && buf[3] === 0x43) { - return { - ext: 'flac', - mime: 'audio/x-flac' - }; - } - - if (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x57 && buf[9] === 0x41 && buf[10] === 0x56 && buf[11] === 0x45) { - return { - ext: 'wav', - mime: 'audio/x-wav' - }; - } - - if (buf[0] === 0x23 && buf[1] === 0x21 && buf[2] === 0x41 && buf[3] === 0x4D && buf[4] === 0x52 && buf[5] === 0x0A) { - return { - ext: 'amr', - mime: 'audio/amr' - }; - } - - if (buf[0] === 0x25 && buf[1] === 0x50 && buf[2] === 0x44 && buf[3] === 0x46) { - return { - ext: 'pdf', - mime: 'application/pdf' - }; - } - - if (buf[0] === 0x4D && buf[1] === 0x5A) { - return { - ext: 'exe', - mime: 'application/x-msdownload' - }; - } - - if ((buf[0] === 0x43 || buf[0] === 0x46) && buf[1] === 0x57 && buf[2] === 0x53) { - return { - ext: 'swf', - mime: 'application/x-shockwave-flash' - }; - } - - if (buf[0] === 0x7B && buf[1] === 0x5C && buf[2] === 0x72 && buf[3] === 0x74 && buf[4] === 0x66) { - return { - ext: 'rtf', - mime: 'application/rtf' - }; - } - - if ( - (buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x46) && - ( - (buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) || - (buf[4] === 0x4F && buf[5] === 0x54 && buf[6] === 0x54 && buf[7] === 0x4F) - ) - ) { - return { - ext: 'woff', - mime: 'application/font-woff' - }; - } - - if ( - (buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x32) && - ( - (buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) || - (buf[4] === 0x4F && buf[5] === 0x54 && buf[6] === 0x54 && buf[7] === 0x4F) - ) - ) { - return { - ext: 'woff2', - mime: 'application/font-woff' - }; - } - - if ( - (buf[34] === 0x4C && buf[35] === 0x50) && - ( - (buf[8] === 0x00 && buf[9] === 0x00 && buf[10] === 0x01) || - (buf[8] === 0x01 && buf[9] === 0x00 && buf[10] === 0x02) || - (buf[8] === 0x02 && buf[9] === 0x00 && buf[10] === 0x02) - ) - ) { - return { - ext: 'eot', - mime: 'application/octet-stream' - }; - } - - if (buf[0] === 0x00 && buf[1] === 0x01 && buf[2] === 0x00 && buf[3] === 0x00 && buf[4] === 0x00) { - return { - ext: 'ttf', - mime: 'application/font-sfnt' - }; - } - - if (buf[0] === 0x4F && buf[1] === 0x54 && buf[2] === 0x54 && buf[3] === 0x4F && buf[4] === 0x00) { - return { - ext: 'otf', - mime: 'application/font-sfnt' - }; - } - - if (buf[0] === 0x00 && buf[1] === 0x00 && buf[2] === 0x01 && buf[3] === 0x00) { - return { - ext: 'ico', - mime: 'image/x-icon' - }; - } - - if (buf[0] === 0x46 && buf[1] === 0x4C && buf[2] === 0x56 && buf[3] === 0x01) { - return { - ext: 'flv', - mime: 'video/x-flv' - }; - } - - if (buf[0] === 0x25 && buf[1] === 0x21) { - return { - ext: 'ps', - mime: 'application/postscript' - }; - } - - if (buf[0] === 0xFD && buf[1] === 0x37 && buf[2] === 0x7A && buf[3] === 0x58 && buf[4] === 0x5A && buf[5] === 0x00) { - return { - ext: 'xz', - mime: 'application/x-xz' - }; - } - - if (buf[0] === 0x53 && buf[1] === 0x51 && buf[2] === 0x4C && buf[3] === 0x69) { - return { - ext: 'sqlite', - mime: 'application/x-sqlite3' - }; - } - - if (buf[0] === 0x4E && buf[1] === 0x45 && buf[2] === 0x53 && buf[3] === 0x1A) { - return { - ext: 'nes', - mime: 'application/x-nintendo-nes-rom' - }; - } - - if (buf[0] === 0x43 && buf[1] === 0x72 && buf[2] === 0x32 && buf[3] === 0x34) { - return { - ext: 'crx', - mime: 'application/x-google-chrome-extension' - }; - } - - if ( - (buf[0] === 0x4D && buf[1] === 0x53 && buf[2] === 0x43 && buf[3] === 0x46) || - (buf[0] === 0x49 && buf[1] === 0x53 && buf[2] === 0x63 && buf[3] === 0x28) - ) { - return { - ext: 'cab', - mime: 'application/vnd.ms-cab-compressed' - }; - } - - // needs to be before `ar` check - if (buf[0] === 0x21 && buf[1] === 0x3C && buf[2] === 0x61 && buf[3] === 0x72 && buf[4] === 0x63 && buf[5] === 0x68 && buf[6] === 0x3E && buf[7] === 0x0A && buf[8] === 0x64 && buf[9] === 0x65 && buf[10] === 0x62 && buf[11] === 0x69 && buf[12] === 0x61 && buf[13] === 0x6E && buf[14] === 0x2D && buf[15] === 0x62 && buf[16] === 0x69 && buf[17] === 0x6E && buf[18] === 0x61 && buf[19] === 0x72 && buf[20] === 0x79) { - return { - ext: 'deb', - mime: 'application/x-deb' - }; - } - - if (buf[0] === 0x21 && buf[1] === 0x3C && buf[2] === 0x61 && buf[3] === 0x72 && buf[4] === 0x63 && buf[5] === 0x68 && buf[6] === 0x3E) { - return { - ext: 'ar', - mime: 'application/x-unix-archive' - }; - } - - if (buf[0] === 0xED && buf[1] === 0xAB && buf[2] === 0xEE && buf[3] === 0xDB) { - return { - ext: 'rpm', - mime: 'application/x-rpm' - }; - } - - if ( - (buf[0] === 0x1F && buf[1] === 0xA0) || - (buf[0] === 0x1F && buf[1] === 0x9D) - ) { - return { - ext: 'Z', - mime: 'application/x-compress' - }; - } - - if (buf[0] === 0x4C && buf[1] === 0x5A && buf[2] === 0x49 && buf[3] === 0x50) { - return { - ext: 'lz', - mime: 'application/x-lzip' - }; - } - - if (buf[0] === 0xD0 && buf[1] === 0xCF && buf[2] === 0x11 && buf[3] === 0xE0 && buf[4] === 0xA1 && buf[5] === 0xB1 && buf[6] === 0x1A && buf[7] === 0xE1) { - return { - ext: 'msi', - mime: 'application/x-msi' - }; - } - - return null; -}; diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/license b/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/package.json b/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/package.json deleted file mode 100644 index 4aa642b8..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/package.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "_from": "file-type@^3.8.0", - "_id": "file-type@3.9.0", - "_inBundle": false, - "_integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "_location": "/decompress-unzip/file-type", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "file-type@^3.8.0", - "name": "file-type", - "escapedName": "file-type", - "rawSpec": "^3.8.0", - "saveSpec": null, - "fetchSpec": "^3.8.0" - }, - "_requiredBy": [ - "/decompress-unzip" - ], - "_resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "_shasum": "257a078384d1db8087bc449d107d52a52672b9e9", - "_spec": "file-type@^3.8.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-unzip", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/file-type/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Detect the file type of a Buffer/Uint8Array", - "devDependencies": { - "ava": "*", - "read-chunk": "^2.0.0", - "xo": "*" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/file-type#readme", - "keywords": [ - "mime", - "file", - "type", - "archive", - "image", - "img", - "pic", - "picture", - "flash", - "photo", - "video", - "type", - "detect", - "check", - "is", - "exif", - "exe", - "binary", - "buffer", - "uint8array", - "jpg", - "png", - "gif", - "webp", - "flif", - "cr2", - "tif", - "bmp", - "jxr", - "psd", - "zip", - "tar", - "rar", - "gz", - "bz2", - "7z", - "dmg", - "mp4", - "m4v", - "mid", - "mkv", - "webm", - "mov", - "avi", - "mpg", - "mp3", - "m4a", - "ogg", - "opus", - "flac", - "wav", - "amr", - "pdf", - "epub", - "exe", - "swf", - "rtf", - "woff", - "woff2", - "eot", - "ttf", - "otf", - "ico", - "flv", - "ps", - "xz", - "sqlite", - "xpi", - "cab", - "deb", - "ar", - "rpm", - "Z", - "lz", - "msi" - ], - "license": "MIT", - "name": "file-type", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/file-type.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "3.9.0" -} diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/readme.md b/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/readme.md deleted file mode 100644 index 32ecf09d..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/file-type/readme.md +++ /dev/null @@ -1,149 +0,0 @@ -# file-type [![Build Status](https://travis-ci.org/sindresorhus/file-type.svg?branch=master)](https://travis-ci.org/sindresorhus/file-type) - -> Detect the file type of a Buffer/Uint8Array - -The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. - - -## Install - -``` -$ npm install --save file-type -``` - - -## Usage - -##### Node.js - -```js -const readChunk = require('read-chunk'); // npm install read-chunk -const fileType = require('file-type'); -const buffer = readChunk.sync('unicorn.png', 0, 262); - -fileType(buffer); -//=> {ext: 'png', mime: 'image/png'} -``` - -or from a remote location: - -```js -const http = require('http'); -const fileType = require('file-type'); -const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif'; - -http.get(url, res => { - res.once('data', chunk => { - res.destroy(); - console.log(fileType(chunk)); - //=> {ext: 'gif', mime: 'image/gif'} - }); -}); -``` - -##### Browser - -```js -const xhr = new XMLHttpRequest(); -xhr.open('GET', 'unicorn.png'); -xhr.responseType = 'arraybuffer'; - -xhr.onload = () => { - fileType(new Uint8Array(this.response)); - //=> {ext: 'png', mime: 'image/png'} -}; - -xhr.send(); -``` - - -## API - -### fileType(buffer) - -Returns an `Object` (or `null` when no match) with: - -- `ext` - one of the [supported file types](#supported-file-types) -- `mime` - the [MIME type](http://en.wikipedia.org/wiki/Internet_media_type) - -#### buffer - -Type: `Buffer` `Uint8Array` - -It only needs the first 262 bytes. - - -## Supported file types - -- [`jpg`](https://en.wikipedia.org/wiki/JPEG) -- [`png`](https://en.wikipedia.org/wiki/Portable_Network_Graphics) -- [`gif`](https://en.wikipedia.org/wiki/GIF) -- [`webp`](https://en.wikipedia.org/wiki/WebP) -- [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format) -- [`cr2`](http://fileinfo.com/extension/cr2) -- [`tif`](https://en.wikipedia.org/wiki/Tagged_Image_File_Format) -- [`bmp`](https://en.wikipedia.org/wiki/BMP_file_format) -- [`jxr`](https://en.wikipedia.org/wiki/JPEG_XR) -- [`psd`](https://en.wikipedia.org/wiki/Adobe_Photoshop#File_format) -- [`zip`](https://en.wikipedia.org/wiki/Zip_(file_format)) -- [`tar`](https://en.wikipedia.org/wiki/Tar_(computing)#File_format) -- [`rar`](https://en.wikipedia.org/wiki/RAR_(file_format)) -- [`gz`](https://en.wikipedia.org/wiki/Gzip) -- [`bz2`](https://en.wikipedia.org/wiki/Bzip2) -- [`7z`](https://en.wikipedia.org/wiki/7z) -- [`dmg`](https://en.wikipedia.org/wiki/Apple_Disk_Image) -- [`mp4`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#Filename_extensions) -- [`m4v`](https://en.wikipedia.org/wiki/M4V) -- [`mid`](https://en.wikipedia.org/wiki/MIDI) -- [`mkv`](https://en.wikipedia.org/wiki/Matroska) -- [`webm`](https://en.wikipedia.org/wiki/WebM) -- [`mov`](https://en.wikipedia.org/wiki/QuickTime_File_Format) -- [`avi`](https://en.wikipedia.org/wiki/Audio_Video_Interleave) -- [`wmv`](https://en.wikipedia.org/wiki/Windows_Media_Video) -- [`mpg`](https://en.wikipedia.org/wiki/MPEG-1) -- [`mp3`](https://en.wikipedia.org/wiki/MP3) -- [`m4a`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#.MP4_versus_.M4A) -- [`ogg`](https://en.wikipedia.org/wiki/Ogg) -- [`opus`](https://en.wikipedia.org/wiki/Opus_(audio_format)) -- [`flac`](https://en.wikipedia.org/wiki/FLAC) -- [`wav`](https://en.wikipedia.org/wiki/WAV) -- [`amr`](https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec) -- [`pdf`](https://en.wikipedia.org/wiki/Portable_Document_Format) -- [`epub`](https://en.wikipedia.org/wiki/EPUB) -- [`exe`](https://en.wikipedia.org/wiki/.exe) -- [`swf`](https://en.wikipedia.org/wiki/SWF) -- [`rtf`](https://en.wikipedia.org/wiki/Rich_Text_Format) -- [`woff`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) -- [`woff2`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) -- [`eot`](https://en.wikipedia.org/wiki/Embedded_OpenType) -- [`ttf`](https://en.wikipedia.org/wiki/TrueType) -- [`otf`](https://en.wikipedia.org/wiki/OpenType) -- [`ico`](https://en.wikipedia.org/wiki/ICO_(file_format)) -- [`flv`](https://en.wikipedia.org/wiki/Flash_Video) -- [`ps`](https://en.wikipedia.org/wiki/Postscript) -- [`xz`](https://en.wikipedia.org/wiki/Xz) -- [`sqlite`](https://www.sqlite.org/fileformat2.html) -- [`nes`](http://fileinfo.com/extension/nes) -- [`crx`](https://developer.chrome.com/extensions/crx) -- [`xpi`](https://en.wikipedia.org/wiki/XPInstall) -- [`cab`](https://en.wikipedia.org/wiki/Cabinet_(file_format)) -- [`deb`](https://en.wikipedia.org/wiki/Deb_(file_format)) -- [`ar`](https://en.wikipedia.org/wiki/Ar_(Unix)) -- [`rpm`](http://fileinfo.com/extension/rpm) -- [`Z`](http://fileinfo.com/extension/z) -- [`lz`](https://en.wikipedia.org/wiki/Lzip) -- [`msi`](https://en.wikipedia.org/wiki/Windows_Installer) - -*SVG isn't included as it requires the whole file to be read, but you can get it [here](https://github.com/sindresorhus/is-svg).* - -*PR welcome for additional commonly used file types.* - - -## Related - -- [file-type-cli](https://github.com/sindresorhus/file-type-cli) - CLI for this module - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/buffer-stream.js b/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/buffer-stream.js deleted file mode 100644 index cc834c4d..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/buffer-stream.js +++ /dev/null @@ -1,54 +0,0 @@ -var PassThrough = require('stream').PassThrough; -var objectAssign = require('object-assign'); - -module.exports = function (opts) { - opts = objectAssign({}, opts); - - var array = opts.array; - var encoding = opts.encoding; - - var buffer = encoding === 'buffer'; - var objectMode = false; - - if (array) { - objectMode = !(encoding || buffer); - } else { - encoding = encoding || 'utf8'; - } - - if (buffer) { - encoding = null; - } - - var len = 0; - var ret = []; - - var stream = new PassThrough({objectMode: objectMode}); - - if (encoding) { - stream.setEncoding(encoding); - } - - stream.on('data', function (chunk) { - ret.push(chunk); - - if (objectMode) { - len = ret.length; - } else { - len += chunk.length; - } - }); - - stream.getBufferedValue = function () { - if (array) { - return ret; - } - return buffer ? Buffer.concat(ret, len) : ret.join(''); - }; - - stream.getBufferedLength = function () { - return len; - }; - - return stream; -}; diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/index.js b/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/index.js deleted file mode 100644 index aa60cf03..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/index.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; -var Promise = require('pinkie-promise'); -var objectAssign = require('object-assign'); -var bufferStream = require('./buffer-stream'); - -function getStream(inputStream, opts) { - if (!inputStream) { - return Promise.reject(new Error('Expected a stream')); - } - - opts = objectAssign({maxBuffer: Infinity}, opts); - var maxBuffer = opts.maxBuffer; - var stream; - var clean; - - var p = new Promise(function (resolve, reject) { - stream = bufferStream(opts); - inputStream.once('error', error); - inputStream.pipe(stream); - - stream.on('data', function () { - if (stream.getBufferedLength() > maxBuffer) { - reject(new Error('maxBuffer exceeded')); - } - }); - stream.once('error', error); - stream.on('end', resolve); - - clean = function () { - // some streams doesn't implement the stream.Readable interface correctly - if (inputStream.unpipe) { - inputStream.unpipe(stream); - } - }; - - function error(err) { - if (err) { // null check - err.bufferedData = stream.getBufferedValue(); - } - reject(err); - } - }); - - p.then(clean, clean); - - return p.then(function () { - return stream.getBufferedValue(); - }); -} - -module.exports = getStream; - -module.exports.buffer = function (stream, opts) { - return getStream(stream, objectAssign({}, opts, {encoding: 'buffer'})); -}; - -module.exports.array = function (stream, opts) { - return getStream(stream, objectAssign({}, opts, {array: true})); -}; diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/license b/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/package.json b/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/package.json deleted file mode 100644 index 3ca3a02c..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "get-stream@^2.2.0", - "_id": "get-stream@2.3.1", - "_inBundle": false, - "_integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "_location": "/decompress-unzip/get-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "get-stream@^2.2.0", - "name": "get-stream", - "escapedName": "get-stream", - "rawSpec": "^2.2.0", - "saveSpec": null, - "fetchSpec": "^2.2.0" - }, - "_requiredBy": [ - "/decompress-unzip" - ], - "_resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "_shasum": "5f38f93f346009666ee0150a054167f91bdd95de", - "_spec": "get-stream@^2.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-unzip", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/get-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, - "deprecated": false, - "description": "Get a stream as a string, buffer, or array", - "devDependencies": { - "ava": "*", - "buffer-equals": "^1.0.3", - "into-stream": "^2.0.1", - "xo": "*" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "buffer-stream.js" - ], - "homepage": "https://github.com/sindresorhus/get-stream#readme", - "keywords": [ - "get", - "stream", - "promise", - "concat", - "string", - "str", - "text", - "buffer", - "read", - "data", - "readable", - "readablestream", - "array", - "object", - "obj" - ], - "license": "MIT", - "name": "get-stream", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/get-stream.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "2.3.1" -} diff --git a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/readme.md b/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/readme.md deleted file mode 100644 index a74866bb..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream/readme.md +++ /dev/null @@ -1,115 +0,0 @@ -# get-stream [![Build Status](https://travis-ci.org/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/get-stream) - -> Get a stream as a string, buffer, or array - - -## Install - -``` -$ npm install --save get-stream -``` - - -## Usage - -```js -const fs = require('fs'); -const getStream = require('get-stream'); -const stream = fs.createReadStream('unicorn.txt'); - -getStream(stream).then(str => { - console.log(str); - /* - ,,))))))));, - __)))))))))))))), - \|/ -\(((((''''((((((((. - -*-==//////(('' . `)))))), - /|\ ))| o ;-. '((((( ,(, - ( `| / ) ;))))' ,_))^;(~ - | | | ,))((((_ _____------~~~-. %,;(;(>';'~ - o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ - ; ''''```` `: `:::|\,__,%% );`'; ~ - | _ ) / `:|`----' `-' - ______/\/~ | / / - /~;;.____/;;' / ___--,-( `;;;/ - / // _;______;'------~~~~~ /;;/\ / - // | | / ; \;;,\ - (<_ | ; /',/-----' _> - \_| ||_ //~;~~~~~~~~~ - `\_| (,~~ - \~\ - ~~ - */ -}); -``` - - -## API - -The methods returns a promise that is resolved when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. - -### getStream(stream, [options]) - -Get the `stream` as a string. - -#### options - -##### encoding - -Type: `string`
-Default: `utf8` - -[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. - -##### maxBuffer - -Type: `number`
-Default: `Infinity` - -Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected. - -### getStream.buffer(stream, [options]) - -Get the `stream` as a buffer. - -It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. - -### getStream.array(stream, [options]) - -Get the `stream` as an array of values. - -It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: - -- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). - -- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. - -- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. - - -## Errors - -If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error. - -```js -getStream(streamThatErrorsAtTheEnd('unicorn')) - .catch(err => console.log(err.bufferedData)); -// unicorn -``` - - -## FAQ - -### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)? - -This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package. - - -## Related - -- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/decompress-unzip/package.json b/truebit-implementation/node_modules/decompress-unzip/package.json deleted file mode 100644 index aa068a5c..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "decompress-unzip@^4.0.1", - "_id": "decompress-unzip@4.0.1", - "_inBundle": false, - "_integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "_location": "/decompress-unzip", - "_phantomChildren": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - }, - "_requested": { - "type": "range", - "registry": true, - "raw": "decompress-unzip@^4.0.1", - "name": "decompress-unzip", - "escapedName": "decompress-unzip", - "rawSpec": "^4.0.1", - "saveSpec": null, - "fetchSpec": "^4.0.1" - }, - "_requiredBy": [ - "/decompress" - ], - "_resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "_shasum": "deaaccdfd14aeaf85578f733ae8210f9b4848f69", - "_spec": "decompress-unzip@^4.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress", - "author": { - "name": "Kevin Mårtensson", - "email": "kevinmartensson@gmail.com", - "url": "https://github.com/kevva" - }, - "bugs": { - "url": "https://github.com/kevva/decompress-unzip/issues" - }, - "bundleDependencies": false, - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "deprecated": false, - "description": "decompress zip plugin", - "devDependencies": { - "ava": "*", - "is-jpg": "^1.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/kevva/decompress-unzip#readme", - "keywords": [ - "decompress", - "decompressplugin", - "extract", - "zip" - ], - "license": "MIT", - "name": "decompress-unzip", - "repository": { - "type": "git", - "url": "git+https://github.com/kevva/decompress-unzip.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "4.0.1", - "xo": { - "esnext": true - } -} diff --git a/truebit-implementation/node_modules/decompress-unzip/readme.md b/truebit-implementation/node_modules/decompress-unzip/readme.md deleted file mode 100644 index b03f25f9..00000000 --- a/truebit-implementation/node_modules/decompress-unzip/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# decompress-unzip [![Build Status](https://travis-ci.org/kevva/decompress-unzip.svg?branch=master)](https://travis-ci.org/kevva/decompress-unzip) - -> zip decompress plugin - - -## Install - -``` -$ npm install --save decompress-unzip -``` - - -## Usage - -```js -const decompress = require('decompress'); -const decompressUnzip = require('decompress-unzip'); - -decompress('unicorn.zip', 'dist', { - plugins: [ - decompressUnzip() - ] -}).then(() => { - console.log('Files decompressed'); -}); -``` - - -## API - -### decompressUnzip()(buf) - -#### buf - -Type: `Buffer` - -Buffer to decompress. - - -## License - -MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/truebit-implementation/node_modules/decompress/index.js b/truebit-implementation/node_modules/decompress/index.js deleted file mode 100644 index 9193ebdb..00000000 --- a/truebit-implementation/node_modules/decompress/index.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; -const path = require('path'); -const fs = require('graceful-fs'); -const decompressTar = require('decompress-tar'); -const decompressTarbz2 = require('decompress-tarbz2'); -const decompressTargz = require('decompress-targz'); -const decompressUnzip = require('decompress-unzip'); -const makeDir = require('make-dir'); -const pify = require('pify'); -const stripDirs = require('strip-dirs'); - -const fsP = pify(fs); - -const runPlugins = (input, opts) => { - if (opts.plugins.length === 0) { - return Promise.resolve([]); - } - - return Promise.all(opts.plugins.map(x => x(input, opts))).then(files => files.reduce((a, b) => a.concat(b))); -}; - -const extractFile = (input, output, opts) => runPlugins(input, opts).then(files => { - if (opts.strip > 0) { - files = files - .map(x => { - x.path = stripDirs(x.path, opts.strip); - return x; - }) - .filter(x => x.path !== '.'); - } - - if (typeof opts.filter === 'function') { - files = files.filter(opts.filter); - } - - if (typeof opts.map === 'function') { - files = files.map(opts.map); - } - - if (!output) { - return files; - } - - return Promise.all(files.map(x => { - const dest = path.join(output, x.path); - const mode = x.mode & ~process.umask(); - const now = new Date(); - - if (x.type === 'directory') { - return makeDir(dest) - .then(() => fsP.utimes(dest, now, x.mtime)) - .then(() => x); - } - - return makeDir(path.dirname(dest)) - .then(() => { - if (x.type === 'link') { - return fsP.link(x.linkname, dest); - } - - if (x.type === 'symlink' && process.platform === 'win32') { - return fsP.link(x.linkname, dest); - } - - if (x.type === 'symlink') { - return fsP.symlink(x.linkname, dest); - } - - return fsP.writeFile(dest, x.data, {mode}); - }) - .then(() => x.type === 'file' && fsP.utimes(dest, now, x.mtime)) - .then(() => x); - })); -}); - -module.exports = (input, output, opts) => { - if (typeof input !== 'string' && !Buffer.isBuffer(input)) { - return Promise.reject(new TypeError('Input file required')); - } - - if (typeof output === 'object') { - opts = output; - output = null; - } - - opts = Object.assign({plugins: [ - decompressTar(), - decompressTarbz2(), - decompressTargz(), - decompressUnzip() - ]}, opts); - - const read = typeof input === 'string' ? fsP.readFile(input) : Promise.resolve(input); - - return read.then(buf => extractFile(buf, output, opts)); -}; diff --git a/truebit-implementation/node_modules/decompress/license b/truebit-implementation/node_modules/decompress/license deleted file mode 100644 index a8ecbbe9..00000000 --- a/truebit-implementation/node_modules/decompress/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Kevin Mårtensson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/decompress/package.json b/truebit-implementation/node_modules/decompress/package.json deleted file mode 100644 index 54ef5d72..00000000 --- a/truebit-implementation/node_modules/decompress/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "decompress@^4.0.0", - "_id": "decompress@4.2.0", - "_inBundle": false, - "_integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "_location": "/decompress", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "decompress@^4.0.0", - "name": "decompress", - "escapedName": "decompress", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "_shasum": "7aedd85427e5a92dacfe55674a7c505e96d01f9d", - "_spec": "decompress@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Kevin Mårtensson", - "email": "kevinmartensson@gmail.com", - "url": "github.com/kevva" - }, - "bugs": { - "url": "https://github.com/kevva/decompress/issues" - }, - "bundleDependencies": false, - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "deprecated": false, - "description": "Extracting archives made easy", - "devDependencies": { - "ava": "*", - "is-jpg": "^1.0.0", - "path-exists": "^3.0.0", - "pify": "^2.3.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/kevva/decompress#readme", - "keywords": [ - "bz2", - "bzip2", - "decompress", - "extract", - "tar", - "tar.bz", - "tar.gz", - "zip", - "unzip" - ], - "license": "MIT", - "name": "decompress", - "repository": { - "type": "git", - "url": "git+https://github.com/kevva/decompress.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "4.2.0" -} diff --git a/truebit-implementation/node_modules/decompress/readme.md b/truebit-implementation/node_modules/decompress/readme.md deleted file mode 100644 index 38554192..00000000 --- a/truebit-implementation/node_modules/decompress/readme.md +++ /dev/null @@ -1,103 +0,0 @@ -# decompress [![Build Status](https://travis-ci.org/kevva/decompress.svg?branch=master)](https://travis-ci.org/kevva/decompress) - -> Extracting archives made easy - -*See [decompress-cli](https://github.com/kevva/decompress-cli) for the command-line version.* - -## Install - -``` -$ npm install --save decompress -``` - - -## Usage - -```js -const decompress = require('decompress'); - -decompress('unicorn.zip', 'dist').then(files => { - console.log('done!'); -}); -``` - - -## API - -### decompress(input, [output], [options]) - -Returns a Promise for an array of files in the following format: - -```js -{ - data: Buffer, - mode: Number, - mtime: String, - path: String, - type: String -} -``` - -#### input - -Type: `string` `Buffer` - -File to decompress. - -#### output - -Type: `string` - -Output directory. - -#### options - -##### filter - -Type: `Function` - -Filter out files before extracting. E.g: - -```js -decompress('unicorn.zip', 'dist', { - filter: file => path.extname(file.path) !== '.exe' -}).then(files => { - console.log('done!'); -}); -``` - -##### map - -Type: `Function` - -Map files before extracting: E.g: - -```js -decompress('unicorn.zip', 'dist', { - map: file => { - file.path = `unicorn-${file.path}`; - return file; - } -}).then(files => { - console.log('done!'); -}); -``` - -##### plugins - -Type: `Array`
-Default: `[decompressTar(), decompressTarbz2(), decompressTargz(), decompressUnzip()]` - -Array of [plugins](https://www.npmjs.com/browse/keyword/decompressplugin) to use. - -##### strip - -Type: `number`
-Default: `0` - -Remove leading directory components from extracted files. - - -## License - -MIT © [Kevin Mårtensson](https://github.com/kevva) diff --git a/truebit-implementation/node_modules/delayed-stream/.npmignore b/truebit-implementation/node_modules/delayed-stream/.npmignore deleted file mode 100644 index 9daeafb9..00000000 --- a/truebit-implementation/node_modules/delayed-stream/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/truebit-implementation/node_modules/delayed-stream/License b/truebit-implementation/node_modules/delayed-stream/License deleted file mode 100644 index 4804b7ab..00000000 --- a/truebit-implementation/node_modules/delayed-stream/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Debuggable Limited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/delayed-stream/Makefile b/truebit-implementation/node_modules/delayed-stream/Makefile deleted file mode 100644 index b4ff85a3..00000000 --- a/truebit-implementation/node_modules/delayed-stream/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -.PHONY: test - diff --git a/truebit-implementation/node_modules/delayed-stream/Readme.md b/truebit-implementation/node_modules/delayed-stream/Readme.md deleted file mode 100644 index aca36f9f..00000000 --- a/truebit-implementation/node_modules/delayed-stream/Readme.md +++ /dev/null @@ -1,141 +0,0 @@ -# delayed-stream - -Buffers events from a stream until you are ready to handle them. - -## Installation - -``` bash -npm install delayed-stream -``` - -## Usage - -The following example shows how to write a http echo server that delays its -response by 1000 ms. - -``` javascript -var DelayedStream = require('delayed-stream'); -var http = require('http'); - -http.createServer(function(req, res) { - var delayed = DelayedStream.create(req); - - setTimeout(function() { - res.writeHead(200); - delayed.pipe(res); - }, 1000); -}); -``` - -If you are not using `Stream#pipe`, you can also manually release the buffered -events by calling `delayedStream.resume()`: - -``` javascript -var delayed = DelayedStream.create(req); - -setTimeout(function() { - // Emit all buffered events and resume underlaying source - delayed.resume(); -}, 1000); -``` - -## Implementation - -In order to use this meta stream properly, here are a few things you should -know about the implementation. - -### Event Buffering / Proxying - -All events of the `source` stream are hijacked by overwriting the `source.emit` -method. Until node implements a catch-all event listener, this is the only way. - -However, delayed-stream still continues to emit all events it captures on the -`source`, regardless of whether you have released the delayed stream yet or -not. - -Upon creation, delayed-stream captures all `source` events and stores them in -an internal event buffer. Once `delayedStream.release()` is called, all -buffered events are emitted on the `delayedStream`, and the event buffer is -cleared. After that, delayed-stream merely acts as a proxy for the underlaying -source. - -### Error handling - -Error events on `source` are buffered / proxied just like any other events. -However, `delayedStream.create` attaches a no-op `'error'` listener to the -`source`. This way you only have to handle errors on the `delayedStream` -object, rather than in two places. - -### Buffer limits - -delayed-stream provides a `maxDataSize` property that can be used to limit -the amount of data being buffered. In order to protect you from bad `source` -streams that don't react to `source.pause()`, this feature is enabled by -default. - -## API - -### DelayedStream.create(source, [options]) - -Returns a new `delayedStream`. Available options are: - -* `pauseStream` -* `maxDataSize` - -The description for those properties can be found below. - -### delayedStream.source - -The `source` stream managed by this object. This is useful if you are -passing your `delayedStream` around, and you still want to access properties -on the `source` object. - -### delayedStream.pauseStream = true - -Whether to pause the underlaying `source` when calling -`DelayedStream.create()`. Modifying this property afterwards has no effect. - -### delayedStream.maxDataSize = 1024 * 1024 - -The amount of data to buffer before emitting an `error`. - -If the underlaying source is emitting `Buffer` objects, the `maxDataSize` -refers to bytes. - -If the underlaying source is emitting JavaScript strings, the size refers to -characters. - -If you know what you are doing, you can set this property to `Infinity` to -disable this feature. You can also modify this property during runtime. - -### delayedStream.dataSize = 0 - -The amount of data buffered so far. - -### delayedStream.readable - -An ECMA5 getter that returns the value of `source.readable`. - -### delayedStream.resume() - -If the `delayedStream` has not been released so far, `delayedStream.release()` -is called. - -In either case, `source.resume()` is called. - -### delayedStream.pause() - -Calls `source.pause()`. - -### delayedStream.pipe(dest) - -Calls `delayedStream.resume()` and then proxies the arguments to `source.pipe`. - -### delayedStream.release() - -Emits and clears all events that have been buffered up so far. This does not -resume the underlaying source, use `delayedStream.resume()` instead. - -## License - -delayed-stream is licensed under the MIT license. diff --git a/truebit-implementation/node_modules/delayed-stream/lib/delayed_stream.js b/truebit-implementation/node_modules/delayed-stream/lib/delayed_stream.js deleted file mode 100644 index b38fc85f..00000000 --- a/truebit-implementation/node_modules/delayed-stream/lib/delayed_stream.js +++ /dev/null @@ -1,107 +0,0 @@ -var Stream = require('stream').Stream; -var util = require('util'); - -module.exports = DelayedStream; -function DelayedStream() { - this.source = null; - this.dataSize = 0; - this.maxDataSize = 1024 * 1024; - this.pauseStream = true; - - this._maxDataSizeExceeded = false; - this._released = false; - this._bufferedEvents = []; -} -util.inherits(DelayedStream, Stream); - -DelayedStream.create = function(source, options) { - var delayedStream = new this(); - - options = options || {}; - for (var option in options) { - delayedStream[option] = options[option]; - } - - delayedStream.source = source; - - var realEmit = source.emit; - source.emit = function() { - delayedStream._handleEmit(arguments); - return realEmit.apply(source, arguments); - }; - - source.on('error', function() {}); - if (delayedStream.pauseStream) { - source.pause(); - } - - return delayedStream; -}; - -Object.defineProperty(DelayedStream.prototype, 'readable', { - configurable: true, - enumerable: true, - get: function() { - return this.source.readable; - } -}); - -DelayedStream.prototype.setEncoding = function() { - return this.source.setEncoding.apply(this.source, arguments); -}; - -DelayedStream.prototype.resume = function() { - if (!this._released) { - this.release(); - } - - this.source.resume(); -}; - -DelayedStream.prototype.pause = function() { - this.source.pause(); -}; - -DelayedStream.prototype.release = function() { - this._released = true; - - this._bufferedEvents.forEach(function(args) { - this.emit.apply(this, args); - }.bind(this)); - this._bufferedEvents = []; -}; - -DelayedStream.prototype.pipe = function() { - var r = Stream.prototype.pipe.apply(this, arguments); - this.resume(); - return r; -}; - -DelayedStream.prototype._handleEmit = function(args) { - if (this._released) { - this.emit.apply(this, args); - return; - } - - if (args[0] === 'data') { - this.dataSize += args[1].length; - this._checkIfMaxDataSizeExceeded(); - } - - this._bufferedEvents.push(args); -}; - -DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { - if (this._maxDataSizeExceeded) { - return; - } - - if (this.dataSize <= this.maxDataSize) { - return; - } - - this._maxDataSizeExceeded = true; - var message = - 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' - this.emit('error', new Error(message)); -}; diff --git a/truebit-implementation/node_modules/delayed-stream/package.json b/truebit-implementation/node_modules/delayed-stream/package.json deleted file mode 100644 index 877a8a62..00000000 --- a/truebit-implementation/node_modules/delayed-stream/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "delayed-stream@~1.0.0", - "_id": "delayed-stream@1.0.0", - "_inBundle": false, - "_integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "_location": "/delayed-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "delayed-stream@~1.0.0", - "name": "delayed-stream", - "escapedName": "delayed-stream", - "rawSpec": "~1.0.0", - "saveSpec": null, - "fetchSpec": "~1.0.0" - }, - "_requiredBy": [ - "/combined-stream" - ], - "_resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "_shasum": "df3ae199acadfb7d440aaae0b29e2272b24ec619", - "_spec": "delayed-stream@~1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/combined-stream", - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "bugs": { - "url": "https://github.com/felixge/node-delayed-stream/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Mike Atkins", - "email": "apeherder@gmail.com" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Buffers events from a stream until you are ready to handle them.", - "devDependencies": { - "fake": "0.2.0", - "far": "0.0.1" - }, - "engines": { - "node": ">=0.4.0" - }, - "homepage": "https://github.com/felixge/node-delayed-stream", - "license": "MIT", - "main": "./lib/delayed_stream", - "name": "delayed-stream", - "repository": { - "type": "git", - "url": "git://github.com/felixge/node-delayed-stream.git" - }, - "scripts": { - "test": "make test" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/depd/History.md b/truebit-implementation/node_modules/depd/History.md deleted file mode 100644 index 507ecb8d..00000000 --- a/truebit-implementation/node_modules/depd/History.md +++ /dev/null @@ -1,96 +0,0 @@ -1.1.2 / 2018-01-11 -================== - - * perf: remove argument reassignment - * Support Node.js 0.6 to 9.x - -1.1.1 / 2017-07-27 -================== - - * Remove unnecessary `Buffer` loading - * Support Node.js 0.6 to 8.x - -1.1.0 / 2015-09-14 -================== - - * Enable strict mode in more places - * Support io.js 3.x - * Support io.js 2.x - * Support web browser loading - - Requires bundler like Browserify or webpack - -1.0.1 / 2015-04-07 -================== - - * Fix `TypeError`s when under `'use strict'` code - * Fix useless type name on auto-generated messages - * Support io.js 1.x - * Support Node.js 0.12 - -1.0.0 / 2014-09-17 -================== - - * No changes - -0.4.5 / 2014-09-09 -================== - - * Improve call speed to functions using the function wrapper - * Support Node.js 0.6 - -0.4.4 / 2014-07-27 -================== - - * Work-around v8 generating empty stack traces - -0.4.3 / 2014-07-26 -================== - - * Fix exception when global `Error.stackTraceLimit` is too low - -0.4.2 / 2014-07-19 -================== - - * Correct call site for wrapped functions and properties - -0.4.1 / 2014-07-19 -================== - - * Improve automatic message generation for function properties - -0.4.0 / 2014-07-19 -================== - - * Add `TRACE_DEPRECATION` environment variable - * Remove non-standard grey color from color output - * Support `--no-deprecation` argument - * Support `--trace-deprecation` argument - * Support `deprecate.property(fn, prop, message)` - -0.3.0 / 2014-06-16 -================== - - * Add `NO_DEPRECATION` environment variable - -0.2.0 / 2014-06-15 -================== - - * Add `deprecate.property(obj, prop, message)` - * Remove `supports-color` dependency for node.js 0.8 - -0.1.0 / 2014-06-15 -================== - - * Add `deprecate.function(fn, message)` - * Add `process.on('deprecation', fn)` emitter - * Automatically generate message when omitted from `deprecate()` - -0.0.1 / 2014-06-15 -================== - - * Fix warning for dynamic calls at singe call site - -0.0.0 / 2014-06-15 -================== - - * Initial implementation diff --git a/truebit-implementation/node_modules/depd/LICENSE b/truebit-implementation/node_modules/depd/LICENSE deleted file mode 100644 index 84441fbb..00000000 --- a/truebit-implementation/node_modules/depd/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/depd/Readme.md b/truebit-implementation/node_modules/depd/Readme.md deleted file mode 100644 index 77906702..00000000 --- a/truebit-implementation/node_modules/depd/Readme.md +++ /dev/null @@ -1,280 +0,0 @@ -# depd - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Linux Build][travis-image]][travis-url] -[![Windows Build][appveyor-image]][appveyor-url] -[![Coverage Status][coveralls-image]][coveralls-url] - -Deprecate all the things - -> With great modules comes great responsibility; mark things deprecated! - -## Install - -This module is installed directly using `npm`: - -```sh -$ npm install depd -``` - -This module can also be bundled with systems like -[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/), -though by default this module will alter it's API to no longer display or -track deprecations. - -## API - - - -```js -var deprecate = require('depd')('my-module') -``` - -This library allows you to display deprecation messages to your users. -This library goes above and beyond with deprecation warnings by -introspection of the call stack (but only the bits that it is interested -in). - -Instead of just warning on the first invocation of a deprecated -function and never again, this module will warn on the first invocation -of a deprecated function per unique call site, making it ideal to alert -users of all deprecated uses across the code base, rather than just -whatever happens to execute first. - -The deprecation warnings from this module also include the file and line -information for the call into the module that the deprecated function was -in. - -**NOTE** this library has a similar interface to the `debug` module, and -this module uses the calling file to get the boundary for the call stacks, -so you should always create a new `deprecate` object in each file and not -within some central file. - -### depd(namespace) - -Create a new deprecate function that uses the given namespace name in the -messages and will display the call site prior to the stack entering the -file this function was called from. It is highly suggested you use the -name of your module as the namespace. - -### deprecate(message) - -Call this function from deprecated code to display a deprecation message. -This message will appear once per unique caller site. Caller site is the -first call site in the stack in a different file from the caller of this -function. - -If the message is omitted, a message is generated for you based on the site -of the `deprecate()` call and will display the name of the function called, -similar to the name displayed in a stack trace. - -### deprecate.function(fn, message) - -Call this function to wrap a given function in a deprecation message on any -call to the function. An optional message can be supplied to provide a custom -message. - -### deprecate.property(obj, prop, message) - -Call this function to wrap a given property on object in a deprecation message -on any accessing or setting of the property. An optional message can be supplied -to provide a custom message. - -The method must be called on the object where the property belongs (not -inherited from the prototype). - -If the property is a data descriptor, it will be converted to an accessor -descriptor in order to display the deprecation message. - -### process.on('deprecation', fn) - -This module will allow easy capturing of deprecation errors by emitting the -errors as the type "deprecation" on the global `process`. If there are no -listeners for this type, the errors are written to STDERR as normal, but if -there are any listeners, nothing will be written to STDERR and instead only -emitted. From there, you can write the errors in a different format or to a -logging source. - -The error represents the deprecation and is emitted only once with the same -rules as writing to STDERR. The error has the following properties: - - - `message` - This is the message given by the library - - `name` - This is always `'DeprecationError'` - - `namespace` - This is the namespace the deprecation came from - - `stack` - This is the stack of the call to the deprecated thing - -Example `error.stack` output: - -``` -DeprecationError: my-cool-module deprecated oldfunction - at Object. ([eval]-wrapper:6:22) - at Module._compile (module.js:456:26) - at evalScript (node.js:532:25) - at startup (node.js:80:7) - at node.js:902:3 -``` - -### process.env.NO_DEPRECATION - -As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` -is provided as a quick solution to silencing deprecation warnings from being -output. The format of this is similar to that of `DEBUG`: - -```sh -$ NO_DEPRECATION=my-module,othermod node app.js -``` - -This will suppress deprecations from being output for "my-module" and "othermod". -The value is a list of comma-separated namespaces. To suppress every warning -across all namespaces, use the value `*` for a namespace. - -Providing the argument `--no-deprecation` to the `node` executable will suppress -all deprecations (only available in Node.js 0.8 or higher). - -**NOTE** This will not suppress the deperecations given to any "deprecation" -event listeners, just the output to STDERR. - -### process.env.TRACE_DEPRECATION - -As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION` -is provided as a solution to getting more detailed location information in deprecation -warnings by including the entire stack trace. The format of this is the same as -`NO_DEPRECATION`: - -```sh -$ TRACE_DEPRECATION=my-module,othermod node app.js -``` - -This will include stack traces for deprecations being output for "my-module" and -"othermod". The value is a list of comma-separated namespaces. To trace every -warning across all namespaces, use the value `*` for a namespace. - -Providing the argument `--trace-deprecation` to the `node` executable will trace -all deprecations (only available in Node.js 0.8 or higher). - -**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`. - -## Display - -![message](files/message.png) - -When a user calls a function in your library that you mark deprecated, they -will see the following written to STDERR (in the given colors, similar colors -and layout to the `debug` module): - -``` -bright cyan bright yellow -| | reset cyan -| | | | -▼ ▼ ▼ ▼ -my-cool-module deprecated oldfunction [eval]-wrapper:6:22 -▲ ▲ ▲ ▲ -| | | | -namespace | | location of mycoolmod.oldfunction() call - | deprecation message - the word "deprecated" -``` - -If the user redirects their STDERR to a file or somewhere that does not support -colors, they see (similar layout to the `debug` module): - -``` -Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 -▲ ▲ ▲ ▲ ▲ -| | | | | -timestamp of message namespace | | location of mycoolmod.oldfunction() call - | deprecation message - the word "deprecated" -``` - -## Examples - -### Deprecating all calls to a function - -This will display a deprecated message about "oldfunction" being deprecated -from "my-module" on STDERR. - -```js -var deprecate = require('depd')('my-cool-module') - -// message automatically derived from function name -// Object.oldfunction -exports.oldfunction = deprecate.function(function oldfunction () { - // all calls to function are deprecated -}) - -// specific message -exports.oldfunction = deprecate.function(function () { - // all calls to function are deprecated -}, 'oldfunction') -``` - -### Conditionally deprecating a function call - -This will display a deprecated message about "weirdfunction" being deprecated -from "my-module" on STDERR when called with less than 2 arguments. - -```js -var deprecate = require('depd')('my-cool-module') - -exports.weirdfunction = function () { - if (arguments.length < 2) { - // calls with 0 or 1 args are deprecated - deprecate('weirdfunction args < 2') - } -} -``` - -When calling `deprecate` as a function, the warning is counted per call site -within your own module, so you can display different deprecations depending -on different situations and the users will still get all the warnings: - -```js -var deprecate = require('depd')('my-cool-module') - -exports.weirdfunction = function () { - if (arguments.length < 2) { - // calls with 0 or 1 args are deprecated - deprecate('weirdfunction args < 2') - } else if (typeof arguments[0] !== 'string') { - // calls with non-string first argument are deprecated - deprecate('weirdfunction non-string first arg') - } -} -``` - -### Deprecating property access - -This will display a deprecated message about "oldprop" being deprecated -from "my-module" on STDERR when accessed. A deprecation will be displayed -when setting the value and when getting the value. - -```js -var deprecate = require('depd')('my-cool-module') - -exports.oldprop = 'something' - -// message automatically derives from property name -deprecate.property(exports, 'oldprop') - -// explicit message -deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') -``` - -## License - -[MIT](LICENSE) - -[npm-version-image]: https://img.shields.io/npm/v/depd.svg -[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg -[npm-url]: https://npmjs.org/package/depd -[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux -[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows -[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd -[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg -[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master -[node-image]: https://img.shields.io/node/v/depd.svg -[node-url]: https://nodejs.org/en/download/ diff --git a/truebit-implementation/node_modules/depd/index.js b/truebit-implementation/node_modules/depd/index.js deleted file mode 100644 index d758d3c8..00000000 --- a/truebit-implementation/node_modules/depd/index.js +++ /dev/null @@ -1,522 +0,0 @@ -/*! - * depd - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var callSiteToString = require('./lib/compat').callSiteToString -var eventListenerCount = require('./lib/compat').eventListenerCount -var relative = require('path').relative - -/** - * Module exports. - */ - -module.exports = depd - -/** - * Get the path to base files on. - */ - -var basePath = process.cwd() - -/** - * Determine if namespace is contained in the string. - */ - -function containsNamespace (str, namespace) { - var vals = str.split(/[ ,]+/) - var ns = String(namespace).toLowerCase() - - for (var i = 0; i < vals.length; i++) { - var val = vals[i] - - // namespace contained - if (val && (val === '*' || val.toLowerCase() === ns)) { - return true - } - } - - return false -} - -/** - * Convert a data descriptor to accessor descriptor. - */ - -function convertDataDescriptorToAccessor (obj, prop, message) { - var descriptor = Object.getOwnPropertyDescriptor(obj, prop) - var value = descriptor.value - - descriptor.get = function getter () { return value } - - if (descriptor.writable) { - descriptor.set = function setter (val) { return (value = val) } - } - - delete descriptor.value - delete descriptor.writable - - Object.defineProperty(obj, prop, descriptor) - - return descriptor -} - -/** - * Create arguments string to keep arity. - */ - -function createArgumentsString (arity) { - var str = '' - - for (var i = 0; i < arity; i++) { - str += ', arg' + i - } - - return str.substr(2) -} - -/** - * Create stack string from stack. - */ - -function createStackString (stack) { - var str = this.name + ': ' + this.namespace - - if (this.message) { - str += ' deprecated ' + this.message - } - - for (var i = 0; i < stack.length; i++) { - str += '\n at ' + callSiteToString(stack[i]) - } - - return str -} - -/** - * Create deprecate for namespace in caller. - */ - -function depd (namespace) { - if (!namespace) { - throw new TypeError('argument namespace is required') - } - - var stack = getStack() - var site = callSiteLocation(stack[1]) - var file = site[0] - - function deprecate (message) { - // call to self as log - log.call(deprecate, message) - } - - deprecate._file = file - deprecate._ignored = isignored(namespace) - deprecate._namespace = namespace - deprecate._traced = istraced(namespace) - deprecate._warned = Object.create(null) - - deprecate.function = wrapfunction - deprecate.property = wrapproperty - - return deprecate -} - -/** - * Determine if namespace is ignored. - */ - -function isignored (namespace) { - /* istanbul ignore next: tested in a child processs */ - if (process.noDeprecation) { - // --no-deprecation support - return true - } - - var str = process.env.NO_DEPRECATION || '' - - // namespace ignored - return containsNamespace(str, namespace) -} - -/** - * Determine if namespace is traced. - */ - -function istraced (namespace) { - /* istanbul ignore next: tested in a child processs */ - if (process.traceDeprecation) { - // --trace-deprecation support - return true - } - - var str = process.env.TRACE_DEPRECATION || '' - - // namespace traced - return containsNamespace(str, namespace) -} - -/** - * Display deprecation message. - */ - -function log (message, site) { - var haslisteners = eventListenerCount(process, 'deprecation') !== 0 - - // abort early if no destination - if (!haslisteners && this._ignored) { - return - } - - var caller - var callFile - var callSite - var depSite - var i = 0 - var seen = false - var stack = getStack() - var file = this._file - - if (site) { - // provided site - depSite = site - callSite = callSiteLocation(stack[1]) - callSite.name = depSite.name - file = callSite[0] - } else { - // get call site - i = 2 - depSite = callSiteLocation(stack[i]) - callSite = depSite - } - - // get caller of deprecated thing in relation to file - for (; i < stack.length; i++) { - caller = callSiteLocation(stack[i]) - callFile = caller[0] - - if (callFile === file) { - seen = true - } else if (callFile === this._file) { - file = this._file - } else if (seen) { - break - } - } - - var key = caller - ? depSite.join(':') + '__' + caller.join(':') - : undefined - - if (key !== undefined && key in this._warned) { - // already warned - return - } - - this._warned[key] = true - - // generate automatic message from call site - var msg = message - if (!msg) { - msg = callSite === depSite || !callSite.name - ? defaultMessage(depSite) - : defaultMessage(callSite) - } - - // emit deprecation if listeners exist - if (haslisteners) { - var err = DeprecationError(this._namespace, msg, stack.slice(i)) - process.emit('deprecation', err) - return - } - - // format and write message - var format = process.stderr.isTTY - ? formatColor - : formatPlain - var output = format.call(this, msg, caller, stack.slice(i)) - process.stderr.write(output + '\n', 'utf8') -} - -/** - * Get call site location as array. - */ - -function callSiteLocation (callSite) { - var file = callSite.getFileName() || '' - var line = callSite.getLineNumber() - var colm = callSite.getColumnNumber() - - if (callSite.isEval()) { - file = callSite.getEvalOrigin() + ', ' + file - } - - var site = [file, line, colm] - - site.callSite = callSite - site.name = callSite.getFunctionName() - - return site -} - -/** - * Generate a default message from the site. - */ - -function defaultMessage (site) { - var callSite = site.callSite - var funcName = site.name - - // make useful anonymous name - if (!funcName) { - funcName = '' - } - - var context = callSite.getThis() - var typeName = context && callSite.getTypeName() - - // ignore useless type name - if (typeName === 'Object') { - typeName = undefined - } - - // make useful type name - if (typeName === 'Function') { - typeName = context.name || typeName - } - - return typeName && callSite.getMethodName() - ? typeName + '.' + funcName - : funcName -} - -/** - * Format deprecation message without color. - */ - -function formatPlain (msg, caller, stack) { - var timestamp = new Date().toUTCString() - - var formatted = timestamp + - ' ' + this._namespace + - ' deprecated ' + msg - - // add stack trace - if (this._traced) { - for (var i = 0; i < stack.length; i++) { - formatted += '\n at ' + callSiteToString(stack[i]) - } - - return formatted - } - - if (caller) { - formatted += ' at ' + formatLocation(caller) - } - - return formatted -} - -/** - * Format deprecation message with color. - */ - -function formatColor (msg, caller, stack) { - var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan - ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow - ' \x1b[0m' + msg + '\x1b[39m' // reset - - // add stack trace - if (this._traced) { - for (var i = 0; i < stack.length; i++) { - formatted += '\n \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan - } - - return formatted - } - - if (caller) { - formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan - } - - return formatted -} - -/** - * Format call site location. - */ - -function formatLocation (callSite) { - return relative(basePath, callSite[0]) + - ':' + callSite[1] + - ':' + callSite[2] -} - -/** - * Get the stack as array of call sites. - */ - -function getStack () { - var limit = Error.stackTraceLimit - var obj = {} - var prep = Error.prepareStackTrace - - Error.prepareStackTrace = prepareObjectStackTrace - Error.stackTraceLimit = Math.max(10, limit) - - // capture the stack - Error.captureStackTrace(obj) - - // slice this function off the top - var stack = obj.stack.slice(1) - - Error.prepareStackTrace = prep - Error.stackTraceLimit = limit - - return stack -} - -/** - * Capture call site stack from v8. - */ - -function prepareObjectStackTrace (obj, stack) { - return stack -} - -/** - * Return a wrapped function in a deprecation message. - */ - -function wrapfunction (fn, message) { - if (typeof fn !== 'function') { - throw new TypeError('argument fn must be a function') - } - - var args = createArgumentsString(fn.length) - var deprecate = this // eslint-disable-line no-unused-vars - var stack = getStack() - var site = callSiteLocation(stack[1]) - - site.name = fn.name - - // eslint-disable-next-line no-eval - var deprecatedfn = eval('(function (' + args + ') {\n' + - '"use strict"\n' + - 'log.call(deprecate, message, site)\n' + - 'return fn.apply(this, arguments)\n' + - '})') - - return deprecatedfn -} - -/** - * Wrap property in a deprecation message. - */ - -function wrapproperty (obj, prop, message) { - if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { - throw new TypeError('argument obj must be object') - } - - var descriptor = Object.getOwnPropertyDescriptor(obj, prop) - - if (!descriptor) { - throw new TypeError('must call property on owner object') - } - - if (!descriptor.configurable) { - throw new TypeError('property must be configurable') - } - - var deprecate = this - var stack = getStack() - var site = callSiteLocation(stack[1]) - - // set site name - site.name = prop - - // convert data descriptor - if ('value' in descriptor) { - descriptor = convertDataDescriptorToAccessor(obj, prop, message) - } - - var get = descriptor.get - var set = descriptor.set - - // wrap getter - if (typeof get === 'function') { - descriptor.get = function getter () { - log.call(deprecate, message, site) - return get.apply(this, arguments) - } - } - - // wrap setter - if (typeof set === 'function') { - descriptor.set = function setter () { - log.call(deprecate, message, site) - return set.apply(this, arguments) - } - } - - Object.defineProperty(obj, prop, descriptor) -} - -/** - * Create DeprecationError for deprecation - */ - -function DeprecationError (namespace, message, stack) { - var error = new Error() - var stackString - - Object.defineProperty(error, 'constructor', { - value: DeprecationError - }) - - Object.defineProperty(error, 'message', { - configurable: true, - enumerable: false, - value: message, - writable: true - }) - - Object.defineProperty(error, 'name', { - enumerable: false, - configurable: true, - value: 'DeprecationError', - writable: true - }) - - Object.defineProperty(error, 'namespace', { - configurable: true, - enumerable: false, - value: namespace, - writable: true - }) - - Object.defineProperty(error, 'stack', { - configurable: true, - enumerable: false, - get: function () { - if (stackString !== undefined) { - return stackString - } - - // prepare stack trace - return (stackString = createStackString.call(this, stack)) - }, - set: function setter (val) { - stackString = val - } - }) - - return error -} diff --git a/truebit-implementation/node_modules/depd/lib/browser/index.js b/truebit-implementation/node_modules/depd/lib/browser/index.js deleted file mode 100644 index 6be45cc2..00000000 --- a/truebit-implementation/node_modules/depd/lib/browser/index.js +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * depd - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = depd - -/** - * Create deprecate for namespace in caller. - */ - -function depd (namespace) { - if (!namespace) { - throw new TypeError('argument namespace is required') - } - - function deprecate (message) { - // no-op in browser - } - - deprecate._file = undefined - deprecate._ignored = true - deprecate._namespace = namespace - deprecate._traced = false - deprecate._warned = Object.create(null) - - deprecate.function = wrapfunction - deprecate.property = wrapproperty - - return deprecate -} - -/** - * Return a wrapped function in a deprecation message. - * - * This is a no-op version of the wrapper, which does nothing but call - * validation. - */ - -function wrapfunction (fn, message) { - if (typeof fn !== 'function') { - throw new TypeError('argument fn must be a function') - } - - return fn -} - -/** - * Wrap property in a deprecation message. - * - * This is a no-op version of the wrapper, which does nothing but call - * validation. - */ - -function wrapproperty (obj, prop, message) { - if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { - throw new TypeError('argument obj must be object') - } - - var descriptor = Object.getOwnPropertyDescriptor(obj, prop) - - if (!descriptor) { - throw new TypeError('must call property on owner object') - } - - if (!descriptor.configurable) { - throw new TypeError('property must be configurable') - } -} diff --git a/truebit-implementation/node_modules/depd/lib/compat/callsite-tostring.js b/truebit-implementation/node_modules/depd/lib/compat/callsite-tostring.js deleted file mode 100644 index 73186dc6..00000000 --- a/truebit-implementation/node_modules/depd/lib/compat/callsite-tostring.js +++ /dev/null @@ -1,103 +0,0 @@ -/*! - * depd - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - */ - -module.exports = callSiteToString - -/** - * Format a CallSite file location to a string. - */ - -function callSiteFileLocation (callSite) { - var fileName - var fileLocation = '' - - if (callSite.isNative()) { - fileLocation = 'native' - } else if (callSite.isEval()) { - fileName = callSite.getScriptNameOrSourceURL() - if (!fileName) { - fileLocation = callSite.getEvalOrigin() - } - } else { - fileName = callSite.getFileName() - } - - if (fileName) { - fileLocation += fileName - - var lineNumber = callSite.getLineNumber() - if (lineNumber != null) { - fileLocation += ':' + lineNumber - - var columnNumber = callSite.getColumnNumber() - if (columnNumber) { - fileLocation += ':' + columnNumber - } - } - } - - return fileLocation || 'unknown source' -} - -/** - * Format a CallSite to a string. - */ - -function callSiteToString (callSite) { - var addSuffix = true - var fileLocation = callSiteFileLocation(callSite) - var functionName = callSite.getFunctionName() - var isConstructor = callSite.isConstructor() - var isMethodCall = !(callSite.isToplevel() || isConstructor) - var line = '' - - if (isMethodCall) { - var methodName = callSite.getMethodName() - var typeName = getConstructorName(callSite) - - if (functionName) { - if (typeName && functionName.indexOf(typeName) !== 0) { - line += typeName + '.' - } - - line += functionName - - if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { - line += ' [as ' + methodName + ']' - } - } else { - line += typeName + '.' + (methodName || '') - } - } else if (isConstructor) { - line += 'new ' + (functionName || '') - } else if (functionName) { - line += functionName - } else { - addSuffix = false - line += fileLocation - } - - if (addSuffix) { - line += ' (' + fileLocation + ')' - } - - return line -} - -/** - * Get constructor name of reviver. - */ - -function getConstructorName (obj) { - var receiver = obj.receiver - return (receiver.constructor && receiver.constructor.name) || null -} diff --git a/truebit-implementation/node_modules/depd/lib/compat/event-listener-count.js b/truebit-implementation/node_modules/depd/lib/compat/event-listener-count.js deleted file mode 100644 index 3a8925d1..00000000 --- a/truebit-implementation/node_modules/depd/lib/compat/event-listener-count.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * depd - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = eventListenerCount - -/** - * Get the count of listeners on an event emitter of a specific type. - */ - -function eventListenerCount (emitter, type) { - return emitter.listeners(type).length -} diff --git a/truebit-implementation/node_modules/depd/lib/compat/index.js b/truebit-implementation/node_modules/depd/lib/compat/index.js deleted file mode 100644 index 955b3336..00000000 --- a/truebit-implementation/node_modules/depd/lib/compat/index.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! - * depd - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var EventEmitter = require('events').EventEmitter - -/** - * Module exports. - * @public - */ - -lazyProperty(module.exports, 'callSiteToString', function callSiteToString () { - var limit = Error.stackTraceLimit - var obj = {} - var prep = Error.prepareStackTrace - - function prepareObjectStackTrace (obj, stack) { - return stack - } - - Error.prepareStackTrace = prepareObjectStackTrace - Error.stackTraceLimit = 2 - - // capture the stack - Error.captureStackTrace(obj) - - // slice the stack - var stack = obj.stack.slice() - - Error.prepareStackTrace = prep - Error.stackTraceLimit = limit - - return stack[0].toString ? toString : require('./callsite-tostring') -}) - -lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () { - return EventEmitter.listenerCount || require('./event-listener-count') -}) - -/** - * Define a lazy property. - */ - -function lazyProperty (obj, prop, getter) { - function get () { - var val = getter() - - Object.defineProperty(obj, prop, { - configurable: true, - enumerable: true, - value: val - }) - - return val - } - - Object.defineProperty(obj, prop, { - configurable: true, - enumerable: true, - get: get - }) -} - -/** - * Call toString() on the obj - */ - -function toString (obj) { - return obj.toString() -} diff --git a/truebit-implementation/node_modules/depd/package.json b/truebit-implementation/node_modules/depd/package.json deleted file mode 100644 index 6edafa5f..00000000 --- a/truebit-implementation/node_modules/depd/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "depd@~1.1.2", - "_id": "depd@1.1.2", - "_inBundle": false, - "_integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "_location": "/depd", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "depd@~1.1.2", - "name": "depd", - "escapedName": "depd", - "rawSpec": "~1.1.2", - "saveSpec": null, - "fetchSpec": "~1.1.2" - }, - "_requiredBy": [ - "/body-parser", - "/express", - "/http-errors", - "/send" - ], - "_resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "_shasum": "9bcd52e14c097763e749b274c4346ed2e560b5a9", - "_spec": "depd@~1.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "author": { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - "browser": "lib/browser/index.js", - "bugs": { - "url": "https://github.com/dougwilson/nodejs-depd/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Deprecate all the things", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "2.1.4", - "eslint": "3.19.0", - "eslint-config-standard": "7.1.0", - "eslint-plugin-markdown": "1.0.0-beta.7", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "~1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "lib/", - "History.md", - "LICENSE", - "index.js", - "Readme.md" - ], - "homepage": "https://github.com/dougwilson/nodejs-depd#readme", - "keywords": [ - "deprecate", - "deprecated" - ], - "license": "MIT", - "name": "depd", - "repository": { - "type": "git", - "url": "git+https://github.com/dougwilson/nodejs-depd.git" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --no-exit test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/" - }, - "version": "1.1.2" -} diff --git a/truebit-implementation/node_modules/des.js/.jscsrc b/truebit-implementation/node_modules/des.js/.jscsrc deleted file mode 100644 index dbaae205..00000000 --- a/truebit-implementation/node_modules/des.js/.jscsrc +++ /dev/null @@ -1,46 +0,0 @@ -{ - "disallowKeywordsOnNewLine": [ "else" ], - "disallowMixedSpacesAndTabs": true, - "disallowMultipleLineStrings": true, - "disallowMultipleVarDecl": true, - "disallowNewlineBeforeBlockStatements": true, - "disallowQuotedKeysInObjects": true, - "disallowSpaceAfterObjectKeys": true, - "disallowSpaceAfterPrefixUnaryOperators": true, - "disallowSpaceBeforePostfixUnaryOperators": true, - "disallowSpacesInCallExpression": true, - "disallowTrailingComma": true, - "disallowTrailingWhitespace": true, - "disallowYodaConditions": true, - - "requireCommaBeforeLineBreak": true, - "requireOperatorBeforeLineBreak": true, - "requireSpaceAfterBinaryOperators": true, - "requireSpaceAfterKeywords": [ "if", "for", "while", "else", "try", "catch" ], - "requireSpaceAfterLineComment": true, - "requireSpaceBeforeBinaryOperators": true, - "requireSpaceBeforeBlockStatements": true, - "requireSpaceBeforeKeywords": [ "else", "catch" ], - "requireSpaceBeforeObjectValues": true, - "requireSpaceBetweenArguments": true, - "requireSpacesInAnonymousFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInFunctionDeclaration": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInConditionalExpression": true, - "requireSpacesInForStatement": true, - "requireSpacesInsideArrayBrackets": "all", - "requireSpacesInsideObjectBrackets": "all", - "requireDotNotation": true, - - "maximumLineLength": 80, - "validateIndentation": 2, - "validateLineBreaks": "LF", - "validateParameterSeparator": ", ", - "validateQuoteMarks": "'" -} diff --git a/truebit-implementation/node_modules/des.js/.jshintrc b/truebit-implementation/node_modules/des.js/.jshintrc deleted file mode 100644 index 7e973902..00000000 --- a/truebit-implementation/node_modules/des.js/.jshintrc +++ /dev/null @@ -1,89 +0,0 @@ -{ - // JSHint Default Configuration File (as on JSHint website) - // See http://jshint.com/docs/ for more details - - "maxerr" : 50, // {int} Maximum error before stopping - - // Enforcing - "bitwise" : false, // true: Prohibit bitwise operators (&, |, ^, etc.) - "camelcase" : false, // true: Identifiers must be in camelCase - "curly" : false, // true: Require {} for every new block or scope - "eqeqeq" : true, // true: Require triple equals (===) for comparison - "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty() - "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc. - "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` - "indent" : 2, // {int} Number of spaces to use for indentation - "latedef" : true, // true: Require variables/functions to be defined before being used - "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()` - "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` - "noempty" : false, // true: Prohibit use of empty blocks - "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters. - "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment) - "plusplus" : false, // true: Prohibit use of `++` & `--` - "quotmark" : "single", // Quotation mark consistency: - // false : do nothing (default) - // true : ensure whatever is used is consistent - // "single" : require single quotes - // "double" : require double quotes - "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) - "unused" : true, // true: Require all defined variables be used - "strict" : true, // true: Requires all functions run in ES5 Strict Mode - "maxparams" : false, // {int} Max number of formal params allowed per function - "maxdepth" : 3, // {int} Max depth of nested blocks (within functions) - "maxstatements" : false, // {int} Max number statements per function - "maxcomplexity" : false, // {int} Max cyclomatic complexity per function - "maxlen" : false, // {int} Max number of characters per line - - // Relaxing - "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons) - "boss" : false, // true: Tolerate assignments where comparisons would be expected - "debug" : false, // true: Allow debugger statements e.g. browser breakpoints. - "eqnull" : false, // true: Tolerate use of `== null` - "es5" : false, // true: Allow ES5 syntax (ex: getters and setters) - "esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`) - "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) - // (ex: `for each`, multiple try/catch, function expression…) - "evil" : false, // true: Tolerate use of `eval` and `new Function()` - "expr" : false, // true: Tolerate `ExpressionStatement` as Programs - "funcscope" : false, // true: Tolerate defining variables inside control statements - "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') - "iterator" : false, // true: Tolerate using the `__iterator__` property - "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block - "laxbreak" : false, // true: Tolerate possibly unsafe line breakings - "laxcomma" : false, // true: Tolerate comma-first style coding - "loopfunc" : false, // true: Tolerate functions being defined in loops - "multistr" : false, // true: Tolerate multi-line strings - "noyield" : false, // true: Tolerate generator functions with no yield statement in them. - "notypeof" : false, // true: Tolerate invalid typeof operator values - "proto" : false, // true: Tolerate using the `__proto__` property - "scripturl" : false, // true: Tolerate script-targeted URLs - "shadow" : true, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` - "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation - "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` - "validthis" : false, // true: Tolerate using this in a non-constructor function - - // Environments - "browser" : true, // Web Browser (window, document, etc) - "browserify" : true, // Browserify (node.js code in the browser) - "couch" : false, // CouchDB - "devel" : true, // Development/debugging (alert, confirm, etc) - "dojo" : false, // Dojo Toolkit - "jasmine" : false, // Jasmine - "jquery" : false, // jQuery - "mocha" : true, // Mocha - "mootools" : false, // MooTools - "node" : true, // Node.js - "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) - "prototypejs" : false, // Prototype and Scriptaculous - "qunit" : false, // QUnit - "rhino" : false, // Rhino - "shelljs" : false, // ShellJS - "worker" : false, // Web Workers - "wsh" : false, // Windows Scripting Host - "yui" : false, // Yahoo User Interface - - // Custom Globals - "globals" : { - "module": true - } // additional predefined global variables -} diff --git a/truebit-implementation/node_modules/des.js/.npmignore b/truebit-implementation/node_modules/des.js/.npmignore deleted file mode 100644 index 1ca95717..00000000 --- a/truebit-implementation/node_modules/des.js/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log diff --git a/truebit-implementation/node_modules/des.js/README.md b/truebit-implementation/node_modules/des.js/README.md deleted file mode 100644 index 976de33b..00000000 --- a/truebit-implementation/node_modules/des.js/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# DES.js - -## LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2015. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/des.js/lib/des.js b/truebit-implementation/node_modules/des.js/lib/des.js deleted file mode 100644 index 2fd04a6d..00000000 --- a/truebit-implementation/node_modules/des.js/lib/des.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -exports.utils = require('./des/utils'); -exports.Cipher = require('./des/cipher'); -exports.DES = require('./des/des'); -exports.CBC = require('./des/cbc'); -exports.EDE = require('./des/ede'); diff --git a/truebit-implementation/node_modules/des.js/lib/des/cbc.js b/truebit-implementation/node_modules/des.js/lib/des/cbc.js deleted file mode 100644 index 208ea313..00000000 --- a/truebit-implementation/node_modules/des.js/lib/des/cbc.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -var proto = {}; - -function CBCState(iv) { - assert.equal(iv.length, 8, 'Invalid IV length'); - - this.iv = new Array(8); - for (var i = 0; i < this.iv.length; i++) - this.iv[i] = iv[i]; -} - -function instantiate(Base) { - function CBC(options) { - Base.call(this, options); - this._cbcInit(); - } - inherits(CBC, Base); - - var keys = Object.keys(proto); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - CBC.prototype[key] = proto[key]; - } - - CBC.create = function create(options) { - return new CBC(options); - }; - - return CBC; -} - -exports.instantiate = instantiate; - -proto._cbcInit = function _cbcInit() { - var state = new CBCState(this.options.iv); - this._cbcState = state; -}; - -proto._update = function _update(inp, inOff, out, outOff) { - var state = this._cbcState; - var superProto = this.constructor.super_.prototype; - - var iv = state.iv; - if (this.type === 'encrypt') { - for (var i = 0; i < this.blockSize; i++) - iv[i] ^= inp[inOff + i]; - - superProto._update.call(this, iv, 0, out, outOff); - - for (var i = 0; i < this.blockSize; i++) - iv[i] = out[outOff + i]; - } else { - superProto._update.call(this, inp, inOff, out, outOff); - - for (var i = 0; i < this.blockSize; i++) - out[outOff + i] ^= iv[i]; - - for (var i = 0; i < this.blockSize; i++) - iv[i] = inp[inOff + i]; - } -}; diff --git a/truebit-implementation/node_modules/des.js/lib/des/cipher.js b/truebit-implementation/node_modules/des.js/lib/des/cipher.js deleted file mode 100644 index d0090b4c..00000000 --- a/truebit-implementation/node_modules/des.js/lib/des/cipher.js +++ /dev/null @@ -1,141 +0,0 @@ -'use strict'; - -var assert = require('minimalistic-assert'); - -function Cipher(options) { - this.options = options; - - this.type = this.options.type; - this.blockSize = 8; - this._init(); - - this.buffer = new Array(this.blockSize); - this.bufferOff = 0; -} -module.exports = Cipher; - -Cipher.prototype._init = function _init() { - // Might be overrided -}; - -Cipher.prototype.update = function update(data) { - if (data.length === 0) - return []; - - if (this.type === 'decrypt') - return this._updateDecrypt(data); - else - return this._updateEncrypt(data); -}; - -Cipher.prototype._buffer = function _buffer(data, off) { - // Append data to buffer - var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); - for (var i = 0; i < min; i++) - this.buffer[this.bufferOff + i] = data[off + i]; - this.bufferOff += min; - - // Shift next - return min; -}; - -Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { - this._update(this.buffer, 0, out, off); - this.bufferOff = 0; - return this.blockSize; -}; - -Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { - var inputOff = 0; - var outputOff = 0; - - var count = ((this.bufferOff + data.length) / this.blockSize) | 0; - var out = new Array(count * this.blockSize); - - if (this.bufferOff !== 0) { - inputOff += this._buffer(data, inputOff); - - if (this.bufferOff === this.buffer.length) - outputOff += this._flushBuffer(out, outputOff); - } - - // Write blocks - var max = data.length - ((data.length - inputOff) % this.blockSize); - for (; inputOff < max; inputOff += this.blockSize) { - this._update(data, inputOff, out, outputOff); - outputOff += this.blockSize; - } - - // Queue rest - for (; inputOff < data.length; inputOff++, this.bufferOff++) - this.buffer[this.bufferOff] = data[inputOff]; - - return out; -}; - -Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { - var inputOff = 0; - var outputOff = 0; - - var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; - var out = new Array(count * this.blockSize); - - // TODO(indutny): optimize it, this is far from optimal - for (; count > 0; count--) { - inputOff += this._buffer(data, inputOff); - outputOff += this._flushBuffer(out, outputOff); - } - - // Buffer rest of the input - inputOff += this._buffer(data, inputOff); - - return out; -}; - -Cipher.prototype.final = function final(buffer) { - var first; - if (buffer) - first = this.update(buffer); - - var last; - if (this.type === 'encrypt') - last = this._finalEncrypt(); - else - last = this._finalDecrypt(); - - if (first) - return first.concat(last); - else - return last; -}; - -Cipher.prototype._pad = function _pad(buffer, off) { - if (off === 0) - return false; - - while (off < buffer.length) - buffer[off++] = 0; - - return true; -}; - -Cipher.prototype._finalEncrypt = function _finalEncrypt() { - if (!this._pad(this.buffer, this.bufferOff)) - return []; - - var out = new Array(this.blockSize); - this._update(this.buffer, 0, out, 0); - return out; -}; - -Cipher.prototype._unpad = function _unpad(buffer) { - return buffer; -}; - -Cipher.prototype._finalDecrypt = function _finalDecrypt() { - assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); - var out = new Array(this.blockSize); - this._flushBuffer(out, 0); - - return this._unpad(out); -}; diff --git a/truebit-implementation/node_modules/des.js/lib/des/des.js b/truebit-implementation/node_modules/des.js/lib/des/des.js deleted file mode 100644 index b64a6d1b..00000000 --- a/truebit-implementation/node_modules/des.js/lib/des/des.js +++ /dev/null @@ -1,143 +0,0 @@ -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -var des = require('../des'); -var utils = des.utils; -var Cipher = des.Cipher; - -function DESState() { - this.tmp = new Array(2); - this.keys = null; -} - -function DES(options) { - Cipher.call(this, options); - - var state = new DESState(); - this._desState = state; - - this.deriveKeys(state, options.key); -} -inherits(DES, Cipher); -module.exports = DES; - -DES.create = function create(options) { - return new DES(options); -}; - -var shiftTable = [ - 1, 1, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 1 -]; - -DES.prototype.deriveKeys = function deriveKeys(state, key) { - state.keys = new Array(16 * 2); - - assert.equal(key.length, this.blockSize, 'Invalid key length'); - - var kL = utils.readUInt32BE(key, 0); - var kR = utils.readUInt32BE(key, 4); - - utils.pc1(kL, kR, state.tmp, 0); - kL = state.tmp[0]; - kR = state.tmp[1]; - for (var i = 0; i < state.keys.length; i += 2) { - var shift = shiftTable[i >>> 1]; - kL = utils.r28shl(kL, shift); - kR = utils.r28shl(kR, shift); - utils.pc2(kL, kR, state.keys, i); - } -}; - -DES.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._desState; - - var l = utils.readUInt32BE(inp, inOff); - var r = utils.readUInt32BE(inp, inOff + 4); - - // Initial Permutation - utils.ip(l, r, state.tmp, 0); - l = state.tmp[0]; - r = state.tmp[1]; - - if (this.type === 'encrypt') - this._encrypt(state, l, r, state.tmp, 0); - else - this._decrypt(state, l, r, state.tmp, 0); - - l = state.tmp[0]; - r = state.tmp[1]; - - utils.writeUInt32BE(out, l, outOff); - utils.writeUInt32BE(out, r, outOff + 4); -}; - -DES.prototype._pad = function _pad(buffer, off) { - var value = buffer.length - off; - for (var i = off; i < buffer.length; i++) - buffer[i] = value; - - return true; -}; - -DES.prototype._unpad = function _unpad(buffer) { - var pad = buffer[buffer.length - 1]; - for (var i = buffer.length - pad; i < buffer.length; i++) - assert.equal(buffer[i], pad); - - return buffer.slice(0, buffer.length - pad); -}; - -DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { - var l = lStart; - var r = rStart; - - // Apply f() x16 times - for (var i = 0; i < state.keys.length; i += 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - - // f(r, k) - utils.expand(r, state.tmp, 0); - - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); - - var t = r; - r = (l ^ f) >>> 0; - l = t; - } - - // Reverse Initial Permutation - utils.rip(r, l, out, off); -}; - -DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { - var l = rStart; - var r = lStart; - - // Apply f() x16 times - for (var i = state.keys.length - 2; i >= 0; i -= 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - - // f(r, k) - utils.expand(l, state.tmp, 0); - - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); - - var t = l; - l = (r ^ f) >>> 0; - r = t; - } - - // Reverse Initial Permutation - utils.rip(l, r, out, off); -}; diff --git a/truebit-implementation/node_modules/des.js/lib/des/ede.js b/truebit-implementation/node_modules/des.js/lib/des/ede.js deleted file mode 100644 index cefc4a5c..00000000 --- a/truebit-implementation/node_modules/des.js/lib/des/ede.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -var des = require('../des'); -var Cipher = des.Cipher; -var DES = des.DES; - -function EDEState(type, key) { - assert.equal(key.length, 24, 'Invalid key length'); - - var k1 = key.slice(0, 8); - var k2 = key.slice(8, 16); - var k3 = key.slice(16, 24); - - if (type === 'encrypt') { - this.ciphers = [ - DES.create({ type: 'encrypt', key: k1 }), - DES.create({ type: 'decrypt', key: k2 }), - DES.create({ type: 'encrypt', key: k3 }) - ]; - } else { - this.ciphers = [ - DES.create({ type: 'decrypt', key: k3 }), - DES.create({ type: 'encrypt', key: k2 }), - DES.create({ type: 'decrypt', key: k1 }) - ]; - } -} - -function EDE(options) { - Cipher.call(this, options); - - var state = new EDEState(this.type, this.options.key); - this._edeState = state; -} -inherits(EDE, Cipher); - -module.exports = EDE; - -EDE.create = function create(options) { - return new EDE(options); -}; - -EDE.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._edeState; - - state.ciphers[0]._update(inp, inOff, out, outOff); - state.ciphers[1]._update(out, outOff, out, outOff); - state.ciphers[2]._update(out, outOff, out, outOff); -}; - -EDE.prototype._pad = DES.prototype._pad; -EDE.prototype._unpad = DES.prototype._unpad; diff --git a/truebit-implementation/node_modules/des.js/lib/des/utils.js b/truebit-implementation/node_modules/des.js/lib/des/utils.js deleted file mode 100644 index 08a5ccd9..00000000 --- a/truebit-implementation/node_modules/des.js/lib/des/utils.js +++ /dev/null @@ -1,256 +0,0 @@ -'use strict'; - -exports.readUInt32BE = function readUInt32BE(bytes, off) { - var res = (bytes[0 + off] << 24) | - (bytes[1 + off] << 16) | - (bytes[2 + off] << 8) | - bytes[3 + off]; - return res >>> 0; -}; - -exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { - bytes[0 + off] = value >>> 24; - bytes[1 + off] = (value >>> 16) & 0xff; - bytes[2 + off] = (value >>> 8) & 0xff; - bytes[3 + off] = value & 0xff; -}; - -exports.ip = function ip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; - } - } - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; - } - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.rip = function rip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 0; i < 4; i++) { - for (var j = 24; j >= 0; j -= 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; - } - } - for (var i = 4; i < 8; i++) { - for (var j = 24; j >= 0; j -= 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.pc1 = function pc1(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - // 7, 15, 23, 31, 39, 47, 55, 63 - // 6, 14, 22, 30, 39, 47, 55, 63 - // 5, 13, 21, 29, 39, 47, 55, 63 - // 4, 12, 20, 28 - for (var i = 7; i >= 5; i--) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >> (j + i)) & 1; - } - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - - // 1, 9, 17, 25, 33, 41, 49, 57 - // 2, 10, 18, 26, 34, 42, 50, 58 - // 3, 11, 19, 27, 35, 43, 51, 59 - // 36, 44, 52, 60 - for (var i = 1; i <= 3; i++) { - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inR >> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; - } - } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.r28shl = function r28shl(num, shift) { - return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); -}; - -var pc2table = [ - // inL => outL - 14, 11, 17, 4, 27, 23, 25, 0, - 13, 22, 7, 18, 5, 9, 16, 24, - 2, 20, 12, 21, 1, 8, 15, 26, - - // inR => outR - 15, 4, 25, 19, 9, 1, 26, 16, - 5, 11, 23, 8, 12, 7, 17, 0, - 22, 3, 10, 14, 6, 20, 27, 24 -]; - -exports.pc2 = function pc2(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - var len = pc2table.length >>> 1; - for (var i = 0; i < len; i++) { - outL <<= 1; - outL |= (inL >>> pc2table[i]) & 0x1; - } - for (var i = len; i < pc2table.length; i++) { - outR <<= 1; - outR |= (inR >>> pc2table[i]) & 0x1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.expand = function expand(r, out, off) { - var outL = 0; - var outR = 0; - - outL = ((r & 1) << 5) | (r >>> 27); - for (var i = 23; i >= 15; i -= 4) { - outL <<= 6; - outL |= (r >>> i) & 0x3f; - } - for (var i = 11; i >= 3; i -= 4) { - outR |= (r >>> i) & 0x3f; - outR <<= 6; - } - outR |= ((r & 0x1f) << 1) | (r >>> 31); - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -var sTable = [ - 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, - 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, - 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, - 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, - - 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, - 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, - 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, - 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, - - 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, - 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, - 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, - 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, - - 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, - 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, - 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, - 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, - - 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, - 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, - 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, - 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, - - 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, - 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, - 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, - 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, - - 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, - 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, - 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, - 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, - - 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, - 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, - 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, - 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 -]; - -exports.substitute = function substitute(inL, inR) { - var out = 0; - for (var i = 0; i < 4; i++) { - var b = (inL >>> (18 - i * 6)) & 0x3f; - var sb = sTable[i * 0x40 + b]; - - out <<= 4; - out |= sb; - } - for (var i = 0; i < 4; i++) { - var b = (inR >>> (18 - i * 6)) & 0x3f; - var sb = sTable[4 * 0x40 + i * 0x40 + b]; - - out <<= 4; - out |= sb; - } - return out >>> 0; -}; - -var permuteTable = [ - 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, - 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 -]; - -exports.permute = function permute(num) { - var out = 0; - for (var i = 0; i < permuteTable.length; i++) { - out <<= 1; - out |= (num >>> permuteTable[i]) & 0x1; - } - return out >>> 0; -}; - -exports.padSplit = function padSplit(num, size, group) { - var str = num.toString(2); - while (str.length < size) - str = '0' + str; - - var out = []; - for (var i = 0; i < size; i += group) - out.push(str.slice(i, i + group)); - return out.join(' '); -}; diff --git a/truebit-implementation/node_modules/des.js/package.json b/truebit-implementation/node_modules/des.js/package.json deleted file mode 100644 index 549fcde0..00000000 --- a/truebit-implementation/node_modules/des.js/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "des.js@^1.0.0", - "_id": "des.js@1.0.0", - "_inBundle": false, - "_integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "_location": "/des.js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "des.js@^1.0.0", - "name": "des.js", - "escapedName": "des.js", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/browserify-des" - ], - "_resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "_shasum": "c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc", - "_spec": "des.js@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/browserify-des", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/des.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "deprecated": false, - "description": "DES implementation", - "devDependencies": { - "jscs": "^2.1.1", - "jshint": "^2.8.0", - "mocha": "^2.3.0" - }, - "homepage": "https://github.com/indutny/des.js#readme", - "keywords": [ - "DES", - "3DES", - "EDE", - "CBC" - ], - "license": "MIT", - "main": "lib/des.js", - "name": "des.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/des.js.git" - }, - "scripts": { - "test": "mocha --reporter=spec test/*-test.js && jscs lib/*.js lib/**/*.js test/*.js && jshint lib/*.js lib/**/*.js" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/des.js/test/cbc-test.js b/truebit-implementation/node_modules/des.js/test/cbc-test.js deleted file mode 100644 index d07881c1..00000000 --- a/truebit-implementation/node_modules/des.js/test/cbc-test.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; - -var assert = require('assert'); -var crypto = require('crypto'); -var Buffer = require('buffer').Buffer; - -var des = require('../'); - -var fixtures = require('./fixtures'); -var bin = fixtures.bin; - -describe('DES-CBC', function() { - var CBC = des.CBC.instantiate(des.DES); - - describe('encryption/decryption', function() { - var vectors = [ - { - key: '133457799bbcdff1', - iv: '0102030405060708', - input: '0123456789abcdef' - }, - { - key: '0000000000000000', - iv: 'ffffffffffffffff', - input: '0000000000000000' - }, - { - key: 'a3a3a3a3b3b3b3b3', - iv: 'cdcdcdcdcdcdcdcd', - input: 'cccccccccccccccc' - }, - { - key: 'deadbeefabbadead', - iv: 'a0da0da0da0da0da', - input: '0102030405060708090a' - }, - { - key: 'aabbccddeeff0011', - iv: 'fefefefefefefefe', - input: '0102030405060708090a0102030405060708090a0102030405060708090a' + - '0102030405060708090a0102030405060607080a0102030405060708090a' - } - ]; - - vectors.forEach(function(vec, i) { - it('should encrypt vector ' + i, function() { - var key = new Buffer(vec.key, 'hex'); - var iv = new Buffer(vec.iv, 'hex'); - var input = new Buffer(vec.input, 'hex'); - - var enc = CBC.create({ - type: 'encrypt', - key: key, - iv: iv - }); - var out = new Buffer(enc.update(input).concat(enc.final())); - - var cipher = crypto.createCipheriv('des-cbc', key, iv); - var expected = Buffer.concat([ cipher.update(input), cipher.final() ]); - - assert.deepEqual(out, expected); - - var dec = CBC.create({ - type: 'decrypt', - key: key, - iv: iv - }); - assert.deepEqual(new Buffer(dec.update(out).concat(dec.final())), - input); - }); - }); - }); -}); diff --git a/truebit-implementation/node_modules/des.js/test/des-test.js b/truebit-implementation/node_modules/des.js/test/des-test.js deleted file mode 100644 index b6a5ee84..00000000 --- a/truebit-implementation/node_modules/des.js/test/des-test.js +++ /dev/null @@ -1,139 +0,0 @@ -'use strict'; - -var assert = require('assert'); -var crypto = require('crypto'); -var Buffer = require('buffer').Buffer; - -var des = require('../'); - -var fixtures = require('./fixtures'); -var bin = fixtures.bin; - -describe('DES', function() { - describe('Key Derivation', function() { - it('should derive proper keys', function() { - var d = des.DES.create({ - type: 'encrypt', - key: [ 0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1 ] - }); - - var expected = [ - '000110 110000 001011 101111', - '111111 000111 000001 110010', - '011110 011010 111011 011001', - '110110 111100 100111 100101', - '010101 011111 110010 001010', - '010000 101100 111110 011001', - '011100 101010 110111 010110', - '110110 110011 010100 011101', - '011111 001110 110000 000111', - '111010 110101 001110 101000', - '011000 111010 010100 111110', - '010100 000111 101100 101111', - '111011 001000 010010 110111', - '111101 100001 100010 111100', - '111101 111000 101000 111010', - '110000 010011 101111 111011', - '111000 001101 101111 101011', - '111011 011110 011110 000001', - '101100 011111 001101 000111', - '101110 100100 011001 001111', - '001000 010101 111111 010011', - '110111 101101 001110 000110', - '011101 010111 000111 110101', - '100101 000110 011111 101001', - '100101 111100 010111 010001', - '111110 101011 101001 000001', - '010111 110100 001110 110111', - '111100 101110 011100 111010', - '101111 111001 000110 001101', - '001111 010011 111100 001010', - '110010 110011 110110 001011', - '000011 100001 011111 110101' - ]; - - expected = expected.map(fixtures.bin); - assert.deepEqual(d._desState.keys, expected); - }); - }); - - describe('encryption/decryption', function() { - var vectors = [ - { - key: '133457799bbcdff1', - input: '0123456789abcdef' - }, - { - key: '0000000000000000', - input: '0000000000000000' - }, - { - key: 'a3a3a3a3b3b3b3b3', - input: 'cccccccccccccccc' - }, - { - key: 'deadbeefabbadead', - input: '0102030405060708090a' - }, - { - key: 'aabbccddeeff0011', - input: '0102030405060708090a0102030405060708090a0102030405060708090a' + - '0102030405060708090a0102030405060607080a0102030405060708090a' - } - ]; - - vectors.forEach(function(vec, i) { - it('should encrypt vector ' + i, function() { - var key = new Buffer(vec.key, 'hex'); - var input = new Buffer(vec.input, 'hex'); - - var enc = des.DES.create({ - type: 'encrypt', - key: key - }); - var dec = des.DES.create({ - type: 'decrypt', - key: key - }); - var out = new Buffer(enc.update(input).concat(enc.final())); - - var cipher = crypto.createCipheriv('des-ecb', key, new Buffer(0)); - var expected = Buffer.concat([ cipher.update(input), cipher.final() ]); - - assert.deepEqual(out, expected); - - assert.deepEqual(new Buffer(dec.update(out).concat(dec.final())), - input); - }); - }); - - it('should buffer during encryption/decryption', function() { - var key = new Buffer('0102030405060708', 'hex'); - var chunk = new Buffer('01020304050607', 'hex'); - var count = 257; - var expected = new Buffer( - new Array(count + 1).join('01020304050607'), 'hex'); - - var enc = des.DES.create({ - type: 'encrypt', - key: key - }); - var cipher = []; - for (var i = 0; i < count; i++) - cipher = cipher.concat(enc.update(chunk)); - cipher = cipher.concat(enc.final()); - - var dec = des.DES.create({ - type: 'decrypt', - key: key - }); - var out = []; - for (var i = 0; i < count; i++) - out = out.concat(dec.update(cipher.slice(i * 7, (i + 1) * 7))); - out = out.concat(dec.final(cipher.slice(i * 7))); - - out = new Buffer(out); - assert.deepEqual(out, expected); - }); - }); -}); diff --git a/truebit-implementation/node_modules/des.js/test/ede-test.js b/truebit-implementation/node_modules/des.js/test/ede-test.js deleted file mode 100644 index 116a76a8..00000000 --- a/truebit-implementation/node_modules/des.js/test/ede-test.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; - -var assert = require('assert'); -var crypto = require('crypto'); -var Buffer = require('buffer').Buffer; - -var des = require('../'); - -var fixtures = require('./fixtures'); -var bin = fixtures.bin; - -describe('DES-EDE-CBC', function() { - var CBC = des.CBC.instantiate(des.EDE); - - describe('encryption/decryption', function() { - var vectors = [ - { - key: new Array(4).join('133457799bbcdff1'), - iv: '0102030405060708', - input: '0123456789abcdef' - }, - { - key: new Array(4).join('0000000000000000'), - iv: 'ffffffffffffffff', - input: '0000000000000000' - }, - { - key: new Array(4).join('a3a3a3a3b3b3b3b3'), - iv: 'cdcdcdcdcdcdcdcd', - input: 'cccccccccccccccc' - }, - { - key: new Array(4).join('deadbeefabbadead'), - iv: 'a0da0da0da0da0da', - input: '0102030405060708090a' - }, - { - key: 'aabbccddeeff0011' + '1111222233334444' + 'ffffeeeeddddcccc', - iv: 'fefefefefefefefe', - input: '0102030405060708090a0102030405060708090a0102030405060708090a' + - '0102030405060708090a0102030405060607080a0102030405060708090a' - } - ]; - - vectors.forEach(function(vec, i) { - it('should encrypt vector ' + i, function() { - var key = new Buffer(vec.key, 'hex'); - var iv = new Buffer(vec.iv, 'hex'); - var input = new Buffer(vec.input, 'hex'); - - var enc = CBC.create({ - type: 'encrypt', - key: key, - iv: iv - }); - var out = new Buffer(enc.update(input).concat(enc.final())); - - var cipher = crypto.createCipheriv('des-ede3-cbc', key, iv); - var expected = Buffer.concat([ cipher.update(input), cipher.final() ]); - - assert.deepEqual(out, expected); - - var dec = CBC.create({ - type: 'decrypt', - key: key, - iv: iv - }); - assert.deepEqual(new Buffer(dec.update(out).concat(dec.final())), - input); - }); - }); - }); -}); diff --git a/truebit-implementation/node_modules/des.js/test/fixtures.js b/truebit-implementation/node_modules/des.js/test/fixtures.js deleted file mode 100644 index fe8ccd8b..00000000 --- a/truebit-implementation/node_modules/des.js/test/fixtures.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -exports.bin = function bin(str) { - return parseInt(str.replace(/[^01]/g, ''), 2); -} diff --git a/truebit-implementation/node_modules/des.js/test/utils-test.js b/truebit-implementation/node_modules/des.js/test/utils-test.js deleted file mode 100644 index 4c576de0..00000000 --- a/truebit-implementation/node_modules/des.js/test/utils-test.js +++ /dev/null @@ -1,169 +0,0 @@ -'use strict'; - -var assert = require('assert'); - -var des = require('../'); -var utils = des.utils; - -var fixtures = require('./fixtures'); -var bin = fixtures.bin; - -describe('utils', function() { - describe('IP', function() { - it('should permute properly', function() { - var out = new Array(2); - var inp = [ - bin('00000001 00100011 01000101 01100111'), - bin('10001001 10101011 11001101 11101111') - ]; - - utils.ip(inp[0], inp[1], out, 0); - - var expected = [ - bin('11001100 00000000 11001100 11111111'), - bin('11110000 10101010 11110000 10101010') - ]; - - assert.deepEqual(out, expected); - }); - - it('should rev-permute properly', function() { - var out = new Array(2); - var inp = [ - bin('11001100 00000000 11001100 11111111'), - bin('11110000 10101010 11110000 10101010') - ]; - - utils.rip(inp[0], inp[1], out, 0); - - var expected = [ - bin('00000001 00100011 01000101 01100111'), - bin('10001001 10101011 11001101 11101111') - ]; - - assert.deepEqual(out, expected); - }); - }); - - describe('PC1', function() { - it('should permute properly', function() { - var out = new Array(2); - var inp = [ - bin('00010011 00110100 01010111 01111001'), - bin('10011011 10111100 11011111 11110001') - ]; - - utils.pc1(inp[0], inp[1], out, 0); - - var expected = [ - bin('1111000 0110011 0010101 0101111'), - bin('0101010 1011001 1001111 0001111') - ]; - - assert.deepEqual(out, expected); - }); - }); - - describe('r28shl', function() { - it('should shl properly', function() { - assert.equal(utils.r28shl(bin('1111000011001100101010101111'), 1), - bin('1110000110011001010101011111')); - - assert.equal(utils.r28shl(bin('0101010101100110011110001111'), 1), - bin('1010101011001100111100011110')); - - assert.equal(utils.r28shl(bin('1111000011001100101010101111'), 4), - bin('0000110011001010101011111111')); - - assert.equal(utils.r28shl(bin('0101010101100110011110001111'), 4), - bin('0101011001100111100011110101')); - }); - }); - - describe('PC2', function() { - it('should permute properly', function() { - var out = new Array(2); - var inp = [ - bin('1110000 1100110 0101010 1011111'), - bin('1010101 0110011 0011110 0011110') - ]; - - utils.pc2(inp[0], inp[1], out, 0); - - var expected = [ - bin('000110 110000 001011 101111'), - bin('111111 000111 000001 110010') - ]; - - assert.deepEqual(out, expected); - }); - }); - - describe('readUInt32BE', function() { - it('should read number properly', function() { - var a = [ 0xde, 0xad, 0xbe, 0xef ]; - var o = utils.readUInt32BE(a, 0); - assert.equal(o, 0xdeadbeef); - }); - }); - - describe('writeUInt32BE', function() { - it('should read number properly', function() { - var a = [ 0, 0, 0, 0 ]; - utils.writeUInt32BE(a, 0xdeadbeef, 0); - var expected = [ 0xde, 0xad, 0xbe, 0xef ]; - assert.deepEqual(a, expected); - }); - }); - - describe('expand', function() { - it('should expand', function() { - var out = [ 0, 0 ]; - utils.expand(bin('1111 0000 1010 1010 1111 0000 1010 1010'), out, 0); - var expected = [ - bin('011110 100001 010101 010101'), - bin('011110 100001 010101 010101') - ]; - assert.deepEqual(out, expected); - }); - - it('should expand with low 1', function() { - var out = [ 0, 0 ]; - utils.expand(bin('1111 0000 1010 1010 1111 0000 1010 1011'), out, 0); - var expected = [ - bin('111110 100001 010101 010101'), - bin('011110 100001 010101 010111') - ]; - assert.deepEqual(out, expected); - }); - - it('should expand with low 1', function() { - var out = [ 0, 0 ]; - utils.expand(bin('10100010 01011100 00001011 11110100'), out, 0); - var expected = [ - bin('010100 000100 001011 111000'), - bin('000001 010111 111110 101001') - ]; - assert.deepEqual(out, expected); - }); - }); - - describe('substitute', function() { - it('should substitute', function() { - var input = [ - bin('011000 010001 011110 111010'), - bin('100001 100110 010100 100111') - ]; - var output = utils.substitute(input[0], input[1]); - assert.equal(output, bin('0101 1100 1000 0010 1011 0101 1001 0111')); - }); - }); - - describe('permute', function() { - it('should permute', function() { - var output = utils.permute( - bin('0101 1100 1000 0010 1011 0101 1001 0111')); - assert.equal(output, bin('0010 0011 0100 1010 1010 1001 1011 1011')); - }); - }); -}); diff --git a/truebit-implementation/node_modules/destroy/LICENSE b/truebit-implementation/node_modules/destroy/LICENSE deleted file mode 100644 index a7ae8ee9..00000000 --- a/truebit-implementation/node_modules/destroy/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/destroy/README.md b/truebit-implementation/node_modules/destroy/README.md deleted file mode 100644 index 6474bc3c..00000000 --- a/truebit-implementation/node_modules/destroy/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# Destroy - -[![NPM version][npm-image]][npm-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] -[![Gittip][gittip-image]][gittip-url] - -Destroy a stream. - -This module is meant to ensure a stream gets destroyed, handling different APIs -and Node.js bugs. - -## API - -```js -var destroy = require('destroy') -``` - -### destroy(stream) - -Destroy the given stream. In most cases, this is identical to a simple -`stream.destroy()` call. The rules are as follows for a given stream: - - 1. If the `stream` is an instance of `ReadStream`, then call `stream.destroy()` - and add a listener to the `open` event to call `stream.close()` if it is - fired. This is for a Node.js bug that will leak a file descriptor if - `.destroy()` is called before `open`. - 2. If the `stream` is not an instance of `Stream`, then nothing happens. - 3. If the `stream` has a `.destroy()` method, then call it. - -The function returns the `stream` passed in as the argument. - -## Example - -```js -var destroy = require('destroy') - -var fs = require('fs') -var stream = fs.createReadStream('package.json') - -// ... and later -destroy(stream) -``` - -[npm-image]: https://img.shields.io/npm/v/destroy.svg?style=flat-square -[npm-url]: https://npmjs.org/package/destroy -[github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square -[github-url]: https://github.com/stream-utils/destroy/tags -[travis-image]: https://img.shields.io/travis/stream-utils/destroy.svg?style=flat-square -[travis-url]: https://travis-ci.org/stream-utils/destroy -[coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square -[coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master -[license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square -[license-url]: LICENSE.md -[downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square -[downloads-url]: https://npmjs.org/package/destroy -[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square -[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/truebit-implementation/node_modules/destroy/index.js b/truebit-implementation/node_modules/destroy/index.js deleted file mode 100644 index 6da2d26e..00000000 --- a/truebit-implementation/node_modules/destroy/index.js +++ /dev/null @@ -1,75 +0,0 @@ -/*! - * destroy - * Copyright(c) 2014 Jonathan Ong - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var ReadStream = require('fs').ReadStream -var Stream = require('stream') - -/** - * Module exports. - * @public - */ - -module.exports = destroy - -/** - * Destroy a stream. - * - * @param {object} stream - * @public - */ - -function destroy(stream) { - if (stream instanceof ReadStream) { - return destroyReadStream(stream) - } - - if (!(stream instanceof Stream)) { - return stream - } - - if (typeof stream.destroy === 'function') { - stream.destroy() - } - - return stream -} - -/** - * Destroy a ReadStream. - * - * @param {object} stream - * @private - */ - -function destroyReadStream(stream) { - stream.destroy() - - if (typeof stream.close === 'function') { - // node.js core bug work-around - stream.on('open', onOpenClose) - } - - return stream -} - -/** - * On open handler to close stream. - * @private - */ - -function onOpenClose() { - if (typeof this.fd === 'number') { - // actually close down the fd - this.close() - } -} diff --git a/truebit-implementation/node_modules/destroy/package.json b/truebit-implementation/node_modules/destroy/package.json deleted file mode 100644 index 7ad49497..00000000 --- a/truebit-implementation/node_modules/destroy/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "destroy@~1.0.4", - "_id": "destroy@1.0.4", - "_inBundle": false, - "_integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "_location": "/destroy", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "destroy@~1.0.4", - "name": "destroy", - "escapedName": "destroy", - "rawSpec": "~1.0.4", - "saveSpec": null, - "fetchSpec": "~1.0.4" - }, - "_requiredBy": [ - "/send" - ], - "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "_shasum": "978857442c44749e4206613e37946205826abd80", - "_spec": "destroy@~1.0.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/send", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/stream-utils/destroy/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], - "deprecated": false, - "description": "destroy a stream if possible", - "devDependencies": { - "istanbul": "0.4.2", - "mocha": "2.3.4" - }, - "files": [ - "index.js", - "LICENSE" - ], - "homepage": "https://github.com/stream-utils/destroy#readme", - "keywords": [ - "stream", - "streams", - "destroy", - "cleanup", - "leak", - "fd" - ], - "license": "MIT", - "name": "destroy", - "repository": { - "type": "git", - "url": "git+https://github.com/stream-utils/destroy.git" - }, - "scripts": { - "test": "mocha --reporter spec", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" - }, - "version": "1.0.4" -} diff --git a/truebit-implementation/node_modules/diffie-hellman/.travis.yml b/truebit-implementation/node_modules/diffie-hellman/.travis.yml deleted file mode 100644 index 0dda2731..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.12" - - "1" - - "2" - - "3" - - "4" -sudo: false diff --git a/truebit-implementation/node_modules/diffie-hellman/LICENSE b/truebit-implementation/node_modules/diffie-hellman/LICENSE deleted file mode 100644 index c9ddc0fe..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2017 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/diffie-hellman/browser.js b/truebit-implementation/node_modules/diffie-hellman/browser.js deleted file mode 100644 index d4be92bb..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/browser.js +++ /dev/null @@ -1,42 +0,0 @@ -var generatePrime = require('./lib/generatePrime') -var primes = require('./lib/primes.json') - -var DH = require('./lib/dh') - -function getDiffieHellman (mod) { - var prime = new Buffer(primes[mod].prime, 'hex') - var gen = new Buffer(primes[mod].gen, 'hex') - - return new DH(prime, gen) -} - -var ENCODINGS = { - 'binary': true, 'hex': true, 'base64': true -} - -function createDiffieHellman (prime, enc, generator, genc) { - if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { - return createDiffieHellman(prime, 'binary', enc, generator) - } - - enc = enc || 'binary' - genc = genc || 'binary' - generator = generator || new Buffer([2]) - - if (!Buffer.isBuffer(generator)) { - generator = new Buffer(generator, genc) - } - - if (typeof prime === 'number') { - return new DH(generatePrime(prime, generator), generator, true) - } - - if (!Buffer.isBuffer(prime)) { - prime = new Buffer(prime, enc) - } - - return new DH(prime, generator, true) -} - -exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman -exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman diff --git a/truebit-implementation/node_modules/diffie-hellman/index.js b/truebit-implementation/node_modules/diffie-hellman/index.js deleted file mode 100644 index ab7c40fe..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/index.js +++ /dev/null @@ -1,10 +0,0 @@ -var crypto = require('crypto') - -// getDiffieHellman -exports.DiffieHellmanGroup = crypto.DiffieHellmanGroup -exports.createDiffieHellmanGroup = crypto.createDiffieHellmanGroup -exports.getDiffieHellman = crypto.getDiffieHellman - -// createDiffieHellman -exports.createDiffieHellman = crypto.createDiffieHellman -exports.DiffieHellman = crypto.DiffieHellman diff --git a/truebit-implementation/node_modules/diffie-hellman/lib/dh.js b/truebit-implementation/node_modules/diffie-hellman/lib/dh.js deleted file mode 100644 index 0650f65d..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/lib/dh.js +++ /dev/null @@ -1,164 +0,0 @@ -var BN = require('bn.js'); -var MillerRabin = require('miller-rabin'); -var millerRabin = new MillerRabin(); -var TWENTYFOUR = new BN(24); -var ELEVEN = new BN(11); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var primes = require('./generatePrime'); -var randomBytes = require('randombytes'); -module.exports = DH; - -function setPublicKey(pub, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc); - } - this._pub = new BN(pub); - return this; -} - -function setPrivateKey(priv, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc); - } - this._priv = new BN(priv); - return this; -} - -var primeCache = {}; -function checkPrime(prime, generator) { - var gen = generator.toString('hex'); - var hex = [gen, prime.toString(16)].join('_'); - if (hex in primeCache) { - return primeCache[hex]; - } - var error = 0; - - if (prime.isEven() || - !primes.simpleSieve || - !primes.fermatTest(prime) || - !millerRabin.test(prime)) { - //not a prime so +1 - error += 1; - - if (gen === '02' || gen === '05') { - // we'd be able to check the generator - // it would fail so +8 - error += 8; - } else { - //we wouldn't be able to test the generator - // so +4 - error += 4; - } - primeCache[hex] = error; - return error; - } - if (!millerRabin.test(prime.shrn(1))) { - //not a safe prime - error += 2; - } - var rem; - switch (gen) { - case '02': - if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { - // unsuidable generator - error += 8; - } - break; - case '05': - rem = prime.mod(TEN); - if (rem.cmp(THREE) && rem.cmp(SEVEN)) { - // prime mod 10 needs to equal 3 or 7 - error += 8; - } - break; - default: - error += 4; - } - primeCache[hex] = error; - return error; -} - -function DH(prime, generator, malleable) { - this.setGenerator(generator); - this.__prime = new BN(prime); - this._prime = BN.mont(this.__prime); - this._primeLen = prime.length; - this._pub = undefined; - this._priv = undefined; - this._primeCode = undefined; - if (malleable) { - this.setPublicKey = setPublicKey; - this.setPrivateKey = setPrivateKey; - } else { - this._primeCode = 8; - } -} -Object.defineProperty(DH.prototype, 'verifyError', { - enumerable: true, - get: function () { - if (typeof this._primeCode !== 'number') { - this._primeCode = checkPrime(this.__prime, this.__gen); - } - return this._primeCode; - } -}); -DH.prototype.generateKeys = function () { - if (!this._priv) { - this._priv = new BN(randomBytes(this._primeLen)); - } - this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); - return this.getPublicKey(); -}; - -DH.prototype.computeSecret = function (other) { - other = new BN(other); - other = other.toRed(this._prime); - var secret = other.redPow(this._priv).fromRed(); - var out = new Buffer(secret.toArray()); - var prime = this.getPrime(); - if (out.length < prime.length) { - var front = new Buffer(prime.length - out.length); - front.fill(0); - out = Buffer.concat([front, out]); - } - return out; -}; - -DH.prototype.getPublicKey = function getPublicKey(enc) { - return formatReturnValue(this._pub, enc); -}; - -DH.prototype.getPrivateKey = function getPrivateKey(enc) { - return formatReturnValue(this._priv, enc); -}; - -DH.prototype.getPrime = function (enc) { - return formatReturnValue(this.__prime, enc); -}; - -DH.prototype.getGenerator = function (enc) { - return formatReturnValue(this._gen, enc); -}; - -DH.prototype.setGenerator = function (gen, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(gen)) { - gen = new Buffer(gen, enc); - } - this.__gen = gen; - this._gen = new BN(gen); - return this; -}; - -function formatReturnValue(bn, enc) { - var buf = new Buffer(bn.toArray()); - if (!enc) { - return buf; - } else { - return buf.toString(enc); - } -} diff --git a/truebit-implementation/node_modules/diffie-hellman/lib/generatePrime.js b/truebit-implementation/node_modules/diffie-hellman/lib/generatePrime.js deleted file mode 100644 index 32e053cf..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/lib/generatePrime.js +++ /dev/null @@ -1,105 +0,0 @@ -var randomBytes = require('randombytes'); -module.exports = findPrime; -findPrime.simpleSieve = simpleSieve; -findPrime.fermatTest = fermatTest; -var BN = require('bn.js'); -var TWENTYFOUR = new BN(24); -var MillerRabin = require('miller-rabin'); -var millerRabin = new MillerRabin(); -var ONE = new BN(1); -var TWO = new BN(2); -var FIVE = new BN(5); -var SIXTEEN = new BN(16); -var EIGHT = new BN(8); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var ELEVEN = new BN(11); -var FOUR = new BN(4); -var TWELVE = new BN(12); -var primes = null; - -function _getPrimes() { - if (primes !== null) - return primes; - - var limit = 0x100000; - var res = []; - res[0] = 2; - for (var i = 1, k = 3; k < limit; k += 2) { - var sqrt = Math.ceil(Math.sqrt(k)); - for (var j = 0; j < i && res[j] <= sqrt; j++) - if (k % res[j] === 0) - break; - - if (i !== j && res[j] <= sqrt) - continue; - - res[i++] = k; - } - primes = res; - return res; -} - -function simpleSieve(p) { - var primes = _getPrimes(); - - for (var i = 0; i < primes.length; i++) - if (p.modn(primes[i]) === 0) { - if (p.cmpn(primes[i]) === 0) { - return true; - } else { - return false; - } - } - - return true; -} - -function fermatTest(p) { - var red = BN.mont(p); - return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; -} - -function findPrime(bits, gen) { - if (bits < 16) { - // this is what openssl does - if (gen === 2 || gen === 5) { - return new BN([0x8c, 0x7b]); - } else { - return new BN([0x8c, 0x27]); - } - } - gen = new BN(gen); - - var num, n2; - - while (true) { - num = new BN(randomBytes(Math.ceil(bits / 8))); - while (num.bitLength() > bits) { - num.ishrn(1); - } - if (num.isEven()) { - num.iadd(ONE); - } - if (!num.testn(1)) { - num.iadd(TWO); - } - if (!gen.cmp(TWO)) { - while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { - num.iadd(FOUR); - } - } else if (!gen.cmp(FIVE)) { - while (num.mod(TEN).cmp(THREE)) { - num.iadd(FOUR); - } - } - n2 = num.shrn(1); - if (simpleSieve(n2) && simpleSieve(num) && - fermatTest(n2) && fermatTest(num) && - millerRabin.test(n2) && millerRabin.test(num)) { - return num; - } - } - -} diff --git a/truebit-implementation/node_modules/diffie-hellman/lib/primes.json b/truebit-implementation/node_modules/diffie-hellman/lib/primes.json deleted file mode 100644 index 9fef6c96..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/lib/primes.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "modp1": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" - }, - "modp2": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" - }, - "modp5": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" - }, - "modp14": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" - }, - "modp15": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" - }, - "modp16": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" - }, - "modp17": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" - }, - "modp18": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" - } -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/diffie-hellman/package.json b/truebit-implementation/node_modules/diffie-hellman/package.json deleted file mode 100644 index 15bf2524..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "diffie-hellman@^5.0.0", - "_id": "diffie-hellman@5.0.3", - "_inBundle": false, - "_integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "_location": "/diffie-hellman", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "diffie-hellman@^5.0.0", - "name": "diffie-hellman", - "escapedName": "diffie-hellman", - "rawSpec": "^5.0.0", - "saveSpec": null, - "fetchSpec": "^5.0.0" - }, - "_requiredBy": [ - "/crypto-browserify" - ], - "_resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "_shasum": "40e8ee98f55a2149607146921c63e1ae5f3d2875", - "_spec": "diffie-hellman@^5.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": { - "name": "Calvin Metcalf" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/diffie-hellman/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "deprecated": false, - "description": "pure js diffie-hellman", - "devDependencies": { - "tap-spec": "^1.0.1", - "tape": "^3.0.1" - }, - "homepage": "https://github.com/crypto-browserify/diffie-hellman", - "keywords": [ - "diffie", - "hellman", - "diffiehellman", - "dh" - ], - "license": "MIT", - "main": "index.js", - "name": "diffie-hellman", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/diffie-hellman.git" - }, - "scripts": { - "test": "node test.js | tspec" - }, - "version": "5.0.3" -} diff --git a/truebit-implementation/node_modules/diffie-hellman/readme.md b/truebit-implementation/node_modules/diffie-hellman/readme.md deleted file mode 100644 index afba499d..00000000 --- a/truebit-implementation/node_modules/diffie-hellman/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -diffie hellman [![Build Status](https://travis-ci.org/crypto-browserify/diffie-hellman.svg)](https://travis-ci.org/crypto-browserify/diffie-hellman) -==== - -pure js diffie-hellman, same api as node, most hard parts thanks to [bn.js](https://www.npmjs.org/package/bn.js) by [@indutny](https://github.com/indutny). In node just returns an object with `crypto.createDiffieHellman` and `crypto.getDiffieHellman` in the browser returns a shim. To require the pure JavaScript one in node `require('diffie-hellman/browser');`; \ No newline at end of file diff --git a/truebit-implementation/node_modules/dom-walk/.npmignore b/truebit-implementation/node_modules/dom-walk/.npmignore deleted file mode 100644 index 062c11e8..00000000 --- a/truebit-implementation/node_modules/dom-walk/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -*.err \ No newline at end of file diff --git a/truebit-implementation/node_modules/dom-walk/LICENCE b/truebit-implementation/node_modules/dom-walk/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/truebit-implementation/node_modules/dom-walk/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/dom-walk/Makefile b/truebit-implementation/node_modules/dom-walk/Makefile deleted file mode 100644 index 132d3a3d..00000000 --- a/truebit-implementation/node_modules/dom-walk/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -run: - ./node_modules/.bin/browserify-server --cwd example \ No newline at end of file diff --git a/truebit-implementation/node_modules/dom-walk/README.md b/truebit-implementation/node_modules/dom-walk/README.md deleted file mode 100644 index 9e33dd15..00000000 --- a/truebit-implementation/node_modules/dom-walk/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# dom-walk - -iteratively walk a DOM node - -## Example - -``` js -var walk = require("dom-walk") - -walk(document.body.childNodes, function (node) { - console.log("node", node) -}) -``` - -## Installation - -`npm install dom-walk` - -## Contributors - - - Raynos - -## MIT Licenced \ No newline at end of file diff --git a/truebit-implementation/node_modules/dom-walk/example/index.js b/truebit-implementation/node_modules/dom-walk/example/index.js deleted file mode 100644 index 1824012d..00000000 --- a/truebit-implementation/node_modules/dom-walk/example/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var walk = require("../index") - -walk(document.body.childNodes, function (node) { - console.log("node", node) -}) \ No newline at end of file diff --git a/truebit-implementation/node_modules/dom-walk/example/static/bundle.js b/truebit-implementation/node_modules/dom-walk/example/static/bundle.js deleted file mode 100644 index d11a2888..00000000 --- a/truebit-implementation/node_modules/dom-walk/example/static/bundle.js +++ /dev/null @@ -1,211 +0,0 @@ -(function(){var require = function (file, cwd) { - var resolved = require.resolve(file, cwd || '/'); - var mod = require.modules[resolved]; - if (!mod) throw new Error( - 'Failed to resolve module ' + file + ', tried ' + resolved - ); - var cached = require.cache[resolved]; - var res = cached? cached.exports : mod(); - return res; -}; - -require.paths = []; -require.modules = {}; -require.cache = {}; -require.extensions = [".js",".coffee"]; - -require._core = { - 'assert': true, - 'events': true, - 'fs': true, - 'path': true, - 'vm': true -}; - -require.resolve = (function () { - return function (x, cwd) { - if (!cwd) cwd = '/'; - - if (require._core[x]) return x; - var path = require.modules.path(); - cwd = path.resolve('/', cwd); - var y = cwd || '/'; - - if (x.match(/^(?:\.\.?\/|\/)/)) { - var m = loadAsFileSync(path.resolve(y, x)) - || loadAsDirectorySync(path.resolve(y, x)); - if (m) return m; - } - - var n = loadNodeModulesSync(x, y); - if (n) return n; - - throw new Error("Cannot find module '" + x + "'"); - - function loadAsFileSync (x) { - x = path.normalize(x); - if (require.modules[x]) { - return x; - } - - for (var i = 0; i < require.extensions.length; i++) { - var ext = require.extensions[i]; - if (require.modules[x + ext]) return x + ext; - } - } - - function loadAsDirectorySync (x) { - x = x.replace(/\/+$/, ''); - var pkgfile = path.normalize(x + '/package.json'); - if (require.modules[pkgfile]) { - var pkg = require.modules[pkgfile](); - var b = pkg.browserify; - if (typeof b === 'object' && b.main) { - var m = loadAsFileSync(path.resolve(x, b.main)); - if (m) return m; - } - else if (typeof b === 'string') { - var m = loadAsFileSync(path.resolve(x, b)); - if (m) return m; - } - else if (pkg.main) { - var m = loadAsFileSync(path.resolve(x, pkg.main)); - if (m) return m; - } - } - - return loadAsFileSync(x + '/index'); - } - - function loadNodeModulesSync (x, start) { - var dirs = nodeModulesPathsSync(start); - for (var i = 0; i < dirs.length; i++) { - var dir = dirs[i]; - var m = loadAsFileSync(dir + '/' + x); - if (m) return m; - var n = loadAsDirectorySync(dir + '/' + x); - if (n) return n; - } - - var m = loadAsFileSync(x); - if (m) return m; - } - - function nodeModulesPathsSync (start) { - var parts; - if (start === '/') parts = [ '' ]; - else parts = path.normalize(start).split('/'); - - var dirs = []; - for (var i = parts.length - 1; i >= 0; i--) { - if (parts[i] === 'node_modules') continue; - var dir = parts.slice(0, i + 1).join('/') + '/node_modules'; - dirs.push(dir); - } - - return dirs; - } - }; -})(); - -require.alias = function (from, to) { - var path = require.modules.path(); - var res = null; - try { - res = require.resolve(from + '/package.json', '/'); - } - catch (err) { - res = require.resolve(from, '/'); - } - var basedir = path.dirname(res); - - var keys = (Object.keys || function (obj) { - var res = []; - for (var key in obj) res.push(key); - return res; - })(require.modules); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (key.slice(0, basedir.length + 1) === basedir + '/') { - var f = key.slice(basedir.length); - require.modules[to + f] = require.modules[basedir + f]; - } - else if (key === basedir) { - require.modules[to] = require.modules[basedir]; - } - } -}; - -(function () { - var process = {}; - - require.define = function (filename, fn) { - if (require.modules.__browserify_process) { - process = require.modules.__browserify_process(); - } - - var dirname = require._core[filename] - ? '' - : require.modules.path().dirname(filename) - ; - - var require_ = function (file) { - var requiredModule = require(file, dirname); - var cached = require.cache[require.resolve(file, dirname)]; - - if (cached && cached.parent === null) { - cached.parent = module_; - } - - return requiredModule; - }; - require_.resolve = function (name) { - return require.resolve(name, dirname); - }; - require_.modules = require.modules; - require_.define = require.define; - require_.cache = require.cache; - var module_ = { - id : filename, - filename: filename, - exports : {}, - loaded : false, - parent: null - }; - - require.modules[filename] = function () { - require.cache[filename] = module_; - fn.call( - module_.exports, - require_, - module_, - module_.exports, - dirname, - filename, - process - ); - module_.loaded = true; - return module_.exports; - }; - }; -})(); - - -require.define("path",Function(['require','module','exports','__dirname','__filename','process'],"function filter (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (fn(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length; i >= 0; i--) {\n var last = parts[i];\n if (last == '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Regex to split a filename into [*, dir, basename, ext]\n// posix version\nvar splitPathRe = /^(.+\\/(?!$)|\\/)?((?:.+?)?(\\.[^.]*)?)$/;\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\nvar resolvedPath = '',\n resolvedAbsolute = false;\n\nfor (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0)\n ? arguments[i]\n : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string' || !path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n}\n\n// At this point the path should be resolved to a full absolute path, but\n// handle relative paths to be safe (might happen when process.cwd() fails)\n\n// Normalize the path\nresolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\nvar isAbsolute = path.charAt(0) === '/',\n trailingSlash = path.slice(-1) === '/';\n\n// Normalize the path\npath = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n \n return (isAbsolute ? '/' : '') + path;\n};\n\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n return p && typeof p === 'string';\n }).join('/'));\n};\n\n\nexports.dirname = function(path) {\n var dir = splitPathRe.exec(path)[1] || '';\n var isWindows = false;\n if (!dir) {\n // No dirname\n return '.';\n } else if (dir.length === 1 ||\n (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) {\n // It is just a slash or a drive letter with a slash\n return dir;\n } else {\n // It is a full dirname, strip trailing slash\n return dir.substring(0, dir.length - 1);\n }\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPathRe.exec(path)[2] || '';\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPathRe.exec(path)[3] || '';\n};\n\n//@ sourceURL=path")); - -require.define("__browserify_process",Function(['require','module','exports','__dirname','__filename','process'],"var process = module.exports = {};\n\nprocess.nextTick = (function () {\n var queue = [];\n var canPost = typeof window !== 'undefined'\n && window.postMessage && window.addEventListener\n ;\n \n if (canPost) {\n window.addEventListener('message', function (ev) {\n if (ev.source === window && ev.data === 'browserify-tick') {\n ev.stopPropagation();\n if (queue.length > 0) {\n var fn = queue.shift();\n fn();\n }\n }\n }, true);\n }\n \n return function (fn) {\n if (canPost) {\n queue.push(fn);\n window.postMessage('browserify-tick', '*');\n }\n else setTimeout(fn, 0);\n };\n})();\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\n\nprocess.binding = function (name) {\n if (name === 'evals') return (require)('vm')\n else throw new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n process.cwd = function () { return cwd };\n process.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n//@ sourceURL=__browserify_process")); - -require.define("vm",Function(['require','module','exports','__dirname','__filename','process'],"module.exports = require(\"vm-browserify\")\n//@ sourceURL=vm")); - -require.define("/node_modules/vm-browserify/package.json",Function(['require','module','exports','__dirname','__filename','process'],"module.exports = {\"main\":\"index.js\"}\n//@ sourceURL=/node_modules/vm-browserify/package.json")); - -require.define("/node_modules/vm-browserify/index.js",Function(['require','module','exports','__dirname','__filename','process'],"var Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInNewContext = function (context) {\n if (!context) context = {};\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n \n if (!win.eval && win.execScript) {\n // win.eval() magically appears when this is called in IE:\n win.execScript('null');\n }\n \n var res = win.eval(this.code);\n \n forEach(Object_keys(win), function (key) {\n context[key] = win[key];\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInContext = function (context) {\n // seems to be just runInNewContext on magical context objects which are\n // otherwise indistinguishable from objects except plain old objects\n // for the parameter segfaults node\n return this.runInNewContext(context);\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n // not really sure what this one does\n // seems to just make a shallow copy\n var copy = {};\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\n};\n\n//@ sourceURL=/node_modules/vm-browserify/index.js")); - -require.define("/package.json",Function(['require','module','exports','__dirname','__filename','process'],"module.exports = {\"main\":\"index\"}\n//@ sourceURL=/package.json")); - -require.define("/index.js",Function(['require','module','exports','__dirname','__filename','process'],"var slice = Array.prototype.slice\n\nmodule.exports = iterativelyWalk\n\nfunction iterativelyWalk(nodes, cb) {\n nodes = slice.call(nodes)\n\n while(nodes.length) {\n var node = nodes.shift(),\n ret = cb(node)\n\n if (ret) {\n return ret\n }\n\n if (node.childNodes.length) {\n nodes = slice.call(node.childNodes).concat(nodes)\n }\n }\n}\n//@ sourceURL=/index.js")); - -require.define("/example/index.js",Function(['require','module','exports','__dirname','__filename','process'],"var walk = require(\"../index\")\n\nwalk(document.body.childNodes, function (node) {\n console.log(\"node\", node)\n})\n//@ sourceURL=/example/index.js")); -require("/example/index.js"); -})(); diff --git a/truebit-implementation/node_modules/dom-walk/example/static/index.html b/truebit-implementation/node_modules/dom-walk/example/static/index.html deleted file mode 100644 index 825e1e2c..00000000 --- a/truebit-implementation/node_modules/dom-walk/example/static/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - Your title - - - - - - - - - \ No newline at end of file diff --git a/truebit-implementation/node_modules/dom-walk/index.js b/truebit-implementation/node_modules/dom-walk/index.js deleted file mode 100644 index 9c2402d4..00000000 --- a/truebit-implementation/node_modules/dom-walk/index.js +++ /dev/null @@ -1,24 +0,0 @@ -var slice = Array.prototype.slice - -module.exports = iterativelyWalk - -function iterativelyWalk(nodes, cb) { - if (!('length' in nodes)) { - nodes = [nodes] - } - - nodes = slice.call(nodes) - - while(nodes.length) { - var node = nodes.shift(), - ret = cb(node) - - if (ret) { - return ret - } - - if (node.childNodes && node.childNodes.length) { - nodes = slice.call(node.childNodes).concat(nodes) - } - } -} diff --git a/truebit-implementation/node_modules/dom-walk/package.json b/truebit-implementation/node_modules/dom-walk/package.json deleted file mode 100644 index 267d87b9..00000000 --- a/truebit-implementation/node_modules/dom-walk/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "dom-walk@^0.1.0", - "_id": "dom-walk@0.1.1", - "_inBundle": false, - "_integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "_location": "/dom-walk", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "dom-walk@^0.1.0", - "name": "dom-walk", - "escapedName": "dom-walk", - "rawSpec": "^0.1.0", - "saveSpec": null, - "fetchSpec": "^0.1.0" - }, - "_requiredBy": [ - "/min-document" - ], - "_resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "_shasum": "672226dc74c8f799ad35307df936aba11acd6018", - "_spec": "dom-walk@^0.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/min-document", - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "bugs": { - "url": "https://github.com/Raynos/dom-walk/issues", - "email": "raynos2@gmail.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jake Verbaten" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "iteratively walk a DOM node", - "devDependencies": { - "browserify-server": "~0.5.6" - }, - "homepage": "https://github.com/Raynos/dom-walk", - "keywords": [], - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/dom-walk/raw/master/LICENSE" - } - ], - "main": "index", - "name": "dom-walk", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/dom-walk.git" - }, - "scripts": {}, - "version": "0.1.1" -} diff --git a/truebit-implementation/node_modules/duplexer3/LICENSE.md b/truebit-implementation/node_modules/duplexer3/LICENSE.md deleted file mode 100644 index 547189a6..00000000 --- a/truebit-implementation/node_modules/duplexer3/LICENSE.md +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2013, Deoxxa Development -====================================== -All rights reserved. --------------------- - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. 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. -3. Neither the name of Deoxxa Development nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY DEOXXA DEVELOPMENT ''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 DEOXXA DEVELOPMENT 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. diff --git a/truebit-implementation/node_modules/duplexer3/README.md b/truebit-implementation/node_modules/duplexer3/README.md deleted file mode 100644 index 9f95ddf5..00000000 --- a/truebit-implementation/node_modules/duplexer3/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# duplexer3 [![Build Status](https://travis-ci.org/floatdrop/duplexer3.svg?branch=master)](https://travis-ci.org/floatdrop/duplexer3) [![Coverage Status](https://coveralls.io/repos/floatdrop/duplexer3/badge.svg?branch=master&service=github)](https://coveralls.io/github/floatdrop/duplexer3?branch=master) - -Like [duplexer2](https://github.com/deoxxa/duplexer2) but using Streams3 without readable-stream dependency - -```javascript -var stream = require("stream"); - -var duplexer3 = require("duplexer3"); - -var writable = new stream.Writable({objectMode: true}), - readable = new stream.Readable({objectMode: true}); - -writable._write = function _write(input, encoding, done) { - if (readable.push(input)) { - return done(); - } else { - readable.once("drain", done); - } -}; - -readable._read = function _read(n) { - // no-op -}; - -// simulate the readable thing closing after a bit -writable.once("finish", function() { - setTimeout(function() { - readable.push(null); - }, 500); -}); - -var duplex = duplexer3(writable, readable); - -duplex.on("data", function(e) { - console.log("got data", JSON.stringify(e)); -}); - -duplex.on("finish", function() { - console.log("got finish event"); -}); - -duplex.on("end", function() { - console.log("got end event"); -}); - -duplex.write("oh, hi there", function() { - console.log("finished writing"); -}); - -duplex.end(function() { - console.log("finished ending"); -}); -``` - -``` -got data "oh, hi there" -finished writing -got finish event -finished ending -got end event -``` - -## Overview - -This is a reimplementation of [duplexer](https://www.npmjs.com/package/duplexer) using the -Streams3 API which is standard in Node as of v4. Everything largely -works the same. - - - -## Installation - -[Available via `npm`](https://docs.npmjs.com/cli/install): - -``` -$ npm i duplexer3 -``` - -## API - -### duplexer3 - -Creates a new `DuplexWrapper` object, which is the actual class that implements -most of the fun stuff. All that fun stuff is hidden. DON'T LOOK. - -```javascript -duplexer3([options], writable, readable) -``` - -```javascript -const duplex = duplexer3(new stream.Writable(), new stream.Readable()); -``` - -Arguments - -* __options__ - an object specifying the regular `stream.Duplex` options, as - well as the properties described below. -* __writable__ - a writable stream -* __readable__ - a readable stream - -Options - -* __bubbleErrors__ - a boolean value that specifies whether to bubble errors - from the underlying readable/writable streams. Default is `true`. - - -## License - -3-clause BSD. [A copy](./LICENSE) is included with the source. - -## Contact - -* GitHub ([deoxxa](http://github.com/deoxxa)) -* Twitter ([@deoxxa](http://twitter.com/deoxxa)) -* Email ([deoxxa@fknsrs.biz](mailto:deoxxa@fknsrs.biz)) diff --git a/truebit-implementation/node_modules/duplexer3/index.js b/truebit-implementation/node_modules/duplexer3/index.js deleted file mode 100644 index 1339ffc5..00000000 --- a/truebit-implementation/node_modules/duplexer3/index.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; - -var stream = require("stream"); - -function DuplexWrapper(options, writable, readable) { - if (typeof readable === "undefined") { - readable = writable; - writable = options; - options = null; - } - - stream.Duplex.call(this, options); - - if (typeof readable.read !== "function") { - readable = (new stream.Readable(options)).wrap(readable); - } - - this._writable = writable; - this._readable = readable; - this._waiting = false; - - var self = this; - - writable.once("finish", function() { - self.end(); - }); - - this.once("finish", function() { - writable.end(); - }); - - readable.on("readable", function() { - if (self._waiting) { - self._waiting = false; - self._read(); - } - }); - - readable.once("end", function() { - self.push(null); - }); - - if (!options || typeof options.bubbleErrors === "undefined" || options.bubbleErrors) { - writable.on("error", function(err) { - self.emit("error", err); - }); - - readable.on("error", function(err) { - self.emit("error", err); - }); - } -} - -DuplexWrapper.prototype = Object.create(stream.Duplex.prototype, {constructor: {value: DuplexWrapper}}); - -DuplexWrapper.prototype._write = function _write(input, encoding, done) { - this._writable.write(input, encoding, done); -}; - -DuplexWrapper.prototype._read = function _read() { - var buf; - var reads = 0; - while ((buf = this._readable.read()) !== null) { - this.push(buf); - reads++; - } - if (reads === 0) { - this._waiting = true; - } -}; - -module.exports = function duplex2(options, writable, readable) { - return new DuplexWrapper(options, writable, readable); -}; - -module.exports.DuplexWrapper = DuplexWrapper; diff --git a/truebit-implementation/node_modules/duplexer3/package.json b/truebit-implementation/node_modules/duplexer3/package.json deleted file mode 100644 index 39b04260..00000000 --- a/truebit-implementation/node_modules/duplexer3/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "duplexer3@^0.1.4", - "_id": "duplexer3@0.1.4", - "_inBundle": false, - "_integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "_location": "/duplexer3", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "duplexer3@^0.1.4", - "name": "duplexer3", - "escapedName": "duplexer3", - "rawSpec": "^0.1.4", - "saveSpec": null, - "fetchSpec": "^0.1.4" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "_shasum": "ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2", - "_spec": "duplexer3@^0.1.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Conrad Pankoff", - "email": "deoxxa@fknsrs.biz", - "url": "http://www.fknsrs.biz/" - }, - "bugs": { - "url": "https://github.com/floatdrop/duplexer3/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Like duplexer but using streams3", - "devDependencies": { - "mocha": "^2.2.5" - }, - "engine": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/floatdrop/duplexer3#readme", - "keywords": [ - "duplex", - "duplexer", - "stream", - "stream3", - "join", - "combine" - ], - "license": "BSD-3-Clause", - "name": "duplexer3", - "repository": { - "type": "git", - "url": "git+https://github.com/floatdrop/duplexer3.git" - }, - "scripts": { - "test": "mocha -R tap" - }, - "version": "0.1.4" -} diff --git a/truebit-implementation/node_modules/ecc-jsbn/LICENSE b/truebit-implementation/node_modules/ecc-jsbn/LICENSE deleted file mode 100755 index f668fefc..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Jeremie Miller - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/ecc-jsbn/README.md b/truebit-implementation/node_modules/ecc-jsbn/README.md deleted file mode 100755 index b5d0b9de..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/README.md +++ /dev/null @@ -1,8 +0,0 @@ -ecc-jsbn -======== - -ECC package based on [jsbn](https://github.com/andyperlitch/jsbn) from [Tom Wu](http://www-cs-students.stanford.edu/~tjw/). - -This is a subset of the same interface as the [node compiled module](https://github.com/quartzjer/ecc), but works in the browser too. - -Also uses point compression now from [https://github.com/kaielvin](https://github.com/kaielvin/jsbn-ec-point-compression). diff --git a/truebit-implementation/node_modules/ecc-jsbn/index.js b/truebit-implementation/node_modules/ecc-jsbn/index.js deleted file mode 100755 index fb19a1d6..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/index.js +++ /dev/null @@ -1,58 +0,0 @@ -var crypto = require("crypto"); -var BigInteger = require("jsbn").BigInteger; -var ECPointFp = require("./lib/ec.js").ECPointFp; -var Buffer = require("safer-buffer").Buffer; -exports.ECCurves = require("./lib/sec.js"); - -// zero prepad -function unstupid(hex,len) -{ - return (hex.length >= len) ? hex : unstupid("0"+hex,len); -} - -exports.ECKey = function(curve, key, isPublic) -{ - var priv; - var c = curve(); - var n = c.getN(); - var bytes = Math.floor(n.bitLength()/8); - - if(key) - { - if(isPublic) - { - var curve = c.getCurve(); -// var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format -// var y = key.slice(bytes+1); -// this.P = new ECPointFp(curve, -// curve.fromBigInteger(new BigInteger(x.toString("hex"), 16)), -// curve.fromBigInteger(new BigInteger(y.toString("hex"), 16))); - this.P = curve.decodePointHex(key.toString("hex")); - }else{ - if(key.length != bytes) return false; - priv = new BigInteger(key.toString("hex"), 16); - } - }else{ - var n1 = n.subtract(BigInteger.ONE); - var r = new BigInteger(crypto.randomBytes(n.bitLength())); - priv = r.mod(n1).add(BigInteger.ONE); - this.P = c.getG().multiply(priv); - } - if(this.P) - { -// var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2); -// this.PublicKey = Buffer.from("04"+pubhex,"hex"); - this.PublicKey = Buffer.from(c.getCurve().encodeCompressedPointHex(this.P),"hex"); - } - if(priv) - { - this.PrivateKey = Buffer.from(unstupid(priv.toString(16),bytes*2),"hex"); - this.deriveSharedSecret = function(key) - { - if(!key || !key.P) return false; - var S = key.P.multiply(priv); - return Buffer.from(unstupid(S.getX().toBigInteger().toString(16),bytes*2),"hex"); - } - } -} - diff --git a/truebit-implementation/node_modules/ecc-jsbn/lib/LICENSE-jsbn b/truebit-implementation/node_modules/ecc-jsbn/lib/LICENSE-jsbn deleted file mode 100755 index 24502a9c..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/lib/LICENSE-jsbn +++ /dev/null @@ -1,40 +0,0 @@ -Licensing ---------- - -This software is covered under the following copyright: - -/* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - -Address all questions regarding this license to: - - Tom Wu - tjw@cs.Stanford.EDU diff --git a/truebit-implementation/node_modules/ecc-jsbn/lib/ec.js b/truebit-implementation/node_modules/ecc-jsbn/lib/ec.js deleted file mode 100755 index 3852671e..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/lib/ec.js +++ /dev/null @@ -1,561 +0,0 @@ -// Basic Javascript Elliptic Curve implementation -// Ported loosely from BouncyCastle's Java EC code -// Only Fp curves implemented for now - -// Requires jsbn.js and jsbn2.js -var BigInteger = require('jsbn').BigInteger -var Barrett = BigInteger.prototype.Barrett - -// ---------------- -// ECFieldElementFp - -// constructor -function ECFieldElementFp(q,x) { - this.x = x; - // TODO if(x.compareTo(q) >= 0) error - this.q = q; -} - -function feFpEquals(other) { - if(other == this) return true; - return (this.q.equals(other.q) && this.x.equals(other.x)); -} - -function feFpToBigInteger() { - return this.x; -} - -function feFpNegate() { - return new ECFieldElementFp(this.q, this.x.negate().mod(this.q)); -} - -function feFpAdd(b) { - return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q)); -} - -function feFpSubtract(b) { - return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q)); -} - -function feFpMultiply(b) { - return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q)); -} - -function feFpSquare() { - return new ECFieldElementFp(this.q, this.x.square().mod(this.q)); -} - -function feFpDivide(b) { - return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q)); -} - -ECFieldElementFp.prototype.equals = feFpEquals; -ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger; -ECFieldElementFp.prototype.negate = feFpNegate; -ECFieldElementFp.prototype.add = feFpAdd; -ECFieldElementFp.prototype.subtract = feFpSubtract; -ECFieldElementFp.prototype.multiply = feFpMultiply; -ECFieldElementFp.prototype.square = feFpSquare; -ECFieldElementFp.prototype.divide = feFpDivide; - -// ---------------- -// ECPointFp - -// constructor -function ECPointFp(curve,x,y,z) { - this.curve = curve; - this.x = x; - this.y = y; - // Projective coordinates: either zinv == null or z * zinv == 1 - // z and zinv are just BigIntegers, not fieldElements - if(z == null) { - this.z = BigInteger.ONE; - } - else { - this.z = z; - } - this.zinv = null; - //TODO: compression flag -} - -function pointFpGetX() { - if(this.zinv == null) { - this.zinv = this.z.modInverse(this.curve.q); - } - var r = this.x.toBigInteger().multiply(this.zinv); - this.curve.reduce(r); - return this.curve.fromBigInteger(r); -} - -function pointFpGetY() { - if(this.zinv == null) { - this.zinv = this.z.modInverse(this.curve.q); - } - var r = this.y.toBigInteger().multiply(this.zinv); - this.curve.reduce(r); - return this.curve.fromBigInteger(r); -} - -function pointFpEquals(other) { - if(other == this) return true; - if(this.isInfinity()) return other.isInfinity(); - if(other.isInfinity()) return this.isInfinity(); - var u, v; - // u = Y2 * Z1 - Y1 * Z2 - u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q); - if(!u.equals(BigInteger.ZERO)) return false; - // v = X2 * Z1 - X1 * Z2 - v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q); - return v.equals(BigInteger.ZERO); -} - -function pointFpIsInfinity() { - if((this.x == null) && (this.y == null)) return true; - return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO); -} - -function pointFpNegate() { - return new ECPointFp(this.curve, this.x, this.y.negate(), this.z); -} - -function pointFpAdd(b) { - if(this.isInfinity()) return b; - if(b.isInfinity()) return this; - - // u = Y2 * Z1 - Y1 * Z2 - var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q); - // v = X2 * Z1 - X1 * Z2 - var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q); - - if(BigInteger.ZERO.equals(v)) { - if(BigInteger.ZERO.equals(u)) { - return this.twice(); // this == b, so double - } - return this.curve.getInfinity(); // this = -b, so infinity - } - - var THREE = new BigInteger("3"); - var x1 = this.x.toBigInteger(); - var y1 = this.y.toBigInteger(); - var x2 = b.x.toBigInteger(); - var y2 = b.y.toBigInteger(); - - var v2 = v.square(); - var v3 = v2.multiply(v); - var x1v2 = x1.multiply(v2); - var zu2 = u.square().multiply(this.z); - - // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3) - var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q); - // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3 - 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.q); - // z3 = v^3 * z1 * z2 - var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q); - - return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); -} - -function pointFpTwice() { - if(this.isInfinity()) return this; - if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity(); - - // TODO: optimized handling of constants - var THREE = new BigInteger("3"); - var x1 = this.x.toBigInteger(); - var y1 = this.y.toBigInteger(); - - var y1z1 = y1.multiply(this.z); - var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q); - var a = this.curve.a.toBigInteger(); - - // w = 3 * x1^2 + a * z1^2 - var w = x1.square().multiply(THREE); - if(!BigInteger.ZERO.equals(a)) { - w = w.add(this.z.square().multiply(a)); - } - w = w.mod(this.curve.q); - //this.curve.reduce(w); - // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1) - var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q); - // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3 - var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q); - // z3 = 8 * (y1 * z1)^3 - var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q); - - return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); -} - -// Simple NAF (Non-Adjacent Form) multiplication algorithm -// TODO: modularize the multiplication algorithm -function pointFpMultiply(k) { - if(this.isInfinity()) return this; - if(k.signum() == 0) return this.curve.getInfinity(); - - var e = k; - var h = e.multiply(new BigInteger("3")); - - var neg = this.negate(); - var R = this; - - var i; - for(i = h.bitLength() - 2; i > 0; --i) { - R = R.twice(); - - var hBit = h.testBit(i); - var eBit = e.testBit(i); - - if (hBit != eBit) { - R = R.add(hBit ? this : neg); - } - } - - return R; -} - -// Compute this*j + x*k (simultaneous multiplication) -function pointFpMultiplyTwo(j,x,k) { - var i; - if(j.bitLength() > k.bitLength()) - i = j.bitLength() - 1; - else - i = k.bitLength() - 1; - - var R = this.curve.getInfinity(); - var both = this.add(x); - while(i >= 0) { - R = R.twice(); - if(j.testBit(i)) { - if(k.testBit(i)) { - R = R.add(both); - } - else { - R = R.add(this); - } - } - else { - if(k.testBit(i)) { - R = R.add(x); - } - } - --i; - } - - return R; -} - -ECPointFp.prototype.getX = pointFpGetX; -ECPointFp.prototype.getY = pointFpGetY; -ECPointFp.prototype.equals = pointFpEquals; -ECPointFp.prototype.isInfinity = pointFpIsInfinity; -ECPointFp.prototype.negate = pointFpNegate; -ECPointFp.prototype.add = pointFpAdd; -ECPointFp.prototype.twice = pointFpTwice; -ECPointFp.prototype.multiply = pointFpMultiply; -ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo; - -// ---------------- -// ECCurveFp - -// constructor -function ECCurveFp(q,a,b) { - this.q = q; - this.a = this.fromBigInteger(a); - this.b = this.fromBigInteger(b); - this.infinity = new ECPointFp(this, null, null); - this.reducer = new Barrett(this.q); -} - -function curveFpGetQ() { - return this.q; -} - -function curveFpGetA() { - return this.a; -} - -function curveFpGetB() { - return this.b; -} - -function curveFpEquals(other) { - if(other == this) return true; - return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b)); -} - -function curveFpGetInfinity() { - return this.infinity; -} - -function curveFpFromBigInteger(x) { - return new ECFieldElementFp(this.q, x); -} - -function curveReduce(x) { - this.reducer.reduce(x); -} - -// for now, work with hex strings because they're easier in JS -function curveFpDecodePointHex(s) { - switch(parseInt(s.substr(0,2), 16)) { // first byte - case 0: - return this.infinity; - case 2: - case 3: - // point compression not supported yet - return null; - case 4: - case 6: - case 7: - var len = (s.length - 2) / 2; - var xHex = s.substr(2, len); - var yHex = s.substr(len+2, len); - - return new ECPointFp(this, - this.fromBigInteger(new BigInteger(xHex, 16)), - this.fromBigInteger(new BigInteger(yHex, 16))); - - default: // unsupported - return null; - } -} - -function curveFpEncodePointHex(p) { - if (p.isInfinity()) return "00"; - var xHex = p.getX().toBigInteger().toString(16); - var yHex = p.getY().toBigInteger().toString(16); - var oLen = this.getQ().toString(16).length; - if ((oLen % 2) != 0) oLen++; - while (xHex.length < oLen) { - xHex = "0" + xHex; - } - while (yHex.length < oLen) { - yHex = "0" + yHex; - } - return "04" + xHex + yHex; -} - -ECCurveFp.prototype.getQ = curveFpGetQ; -ECCurveFp.prototype.getA = curveFpGetA; -ECCurveFp.prototype.getB = curveFpGetB; -ECCurveFp.prototype.equals = curveFpEquals; -ECCurveFp.prototype.getInfinity = curveFpGetInfinity; -ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger; -ECCurveFp.prototype.reduce = curveReduce; -//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex; -ECCurveFp.prototype.encodePointHex = curveFpEncodePointHex; - -// from: https://github.com/kaielvin/jsbn-ec-point-compression -ECCurveFp.prototype.decodePointHex = function(s) -{ - var yIsEven; - switch(parseInt(s.substr(0,2), 16)) { // first byte - case 0: - return this.infinity; - case 2: - yIsEven = false; - case 3: - if(yIsEven == undefined) yIsEven = true; - var len = s.length - 2; - var xHex = s.substr(2, len); - var x = this.fromBigInteger(new BigInteger(xHex,16)); - var alpha = x.multiply(x.square().add(this.getA())).add(this.getB()); - var beta = alpha.sqrt(); - - if (beta == null) throw "Invalid point compression"; - - var betaValue = beta.toBigInteger(); - if (betaValue.testBit(0) != yIsEven) - { - // Use the other root - beta = this.fromBigInteger(this.getQ().subtract(betaValue)); - } - return new ECPointFp(this,x,beta); - case 4: - case 6: - case 7: - var len = (s.length - 2) / 2; - var xHex = s.substr(2, len); - var yHex = s.substr(len+2, len); - - return new ECPointFp(this, - this.fromBigInteger(new BigInteger(xHex, 16)), - this.fromBigInteger(new BigInteger(yHex, 16))); - - default: // unsupported - return null; - } -} -ECCurveFp.prototype.encodeCompressedPointHex = function(p) -{ - if (p.isInfinity()) return "00"; - var xHex = p.getX().toBigInteger().toString(16); - var oLen = this.getQ().toString(16).length; - if ((oLen % 2) != 0) oLen++; - while (xHex.length < oLen) - xHex = "0" + xHex; - var yPrefix; - if(p.getY().toBigInteger().isEven()) yPrefix = "02"; - else yPrefix = "03"; - - return yPrefix + xHex; -} - - -ECFieldElementFp.prototype.getR = function() -{ - if(this.r != undefined) return this.r; - - this.r = null; - var bitLength = this.q.bitLength(); - if (bitLength > 128) - { - var firstWord = this.q.shiftRight(bitLength - 64); - if (firstWord.intValue() == -1) - { - this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q); - } - } - return this.r; -} -ECFieldElementFp.prototype.modMult = function(x1,x2) -{ - return this.modReduce(x1.multiply(x2)); -} -ECFieldElementFp.prototype.modReduce = function(x) -{ - if (this.getR() != null) - { - var qLen = q.bitLength(); - while (x.bitLength() > (qLen + 1)) - { - var u = x.shiftRight(qLen); - var v = x.subtract(u.shiftLeft(qLen)); - if (!this.getR().equals(BigInteger.ONE)) - { - u = u.multiply(this.getR()); - } - x = u.add(v); - } - while (x.compareTo(q) >= 0) - { - x = x.subtract(q); - } - } - else - { - x = x.mod(q); - } - return x; -} -ECFieldElementFp.prototype.sqrt = function() -{ - if (!this.q.testBit(0)) throw "unsupported"; - - // p mod 4 == 3 - if (this.q.testBit(1)) - { - var z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q)); - return z.square().equals(this) ? z : null; - } - - // p mod 4 == 1 - var qMinusOne = this.q.subtract(BigInteger.ONE); - - var legendreExponent = qMinusOne.shiftRight(1); - if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE))) - { - return null; - } - - var u = qMinusOne.shiftRight(2); - var k = u.shiftLeft(1).add(BigInteger.ONE); - - var Q = this.x; - var fourQ = modDouble(modDouble(Q)); - - var U, V; - do - { - var P; - do - { - P = new BigInteger(this.q.bitLength(), new SecureRandom()); - } - while (P.compareTo(this.q) >= 0 - || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne))); - - var result = this.lucasSequence(P, Q, k); - U = result[0]; - V = result[1]; - - if (this.modMult(V, V).equals(fourQ)) - { - // Integer division by 2, mod q - if (V.testBit(0)) - { - V = V.add(q); - } - - V = V.shiftRight(1); - - return new ECFieldElementFp(q,V); - } - } - while (U.equals(BigInteger.ONE) || U.equals(qMinusOne)); - - return null; -} -ECFieldElementFp.prototype.lucasSequence = function(P,Q,k) -{ - var n = k.bitLength(); - var s = k.getLowestSetBit(); - - var Uh = BigInteger.ONE; - var Vl = BigInteger.TWO; - var Vh = P; - var Ql = BigInteger.ONE; - var Qh = BigInteger.ONE; - - for (var j = n - 1; j >= s + 1; --j) - { - Ql = this.modMult(Ql, Qh); - - if (k.testBit(j)) - { - Qh = this.modMult(Ql, Q); - Uh = this.modMult(Uh, Vh); - Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); - Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1))); - } - else - { - Qh = Ql; - Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql)); - Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); - Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1))); - } - } - - Ql = this.modMult(Ql, Qh); - Qh = this.modMult(Ql, Q); - Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql)); - Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); - Ql = this.modMult(Ql, Qh); - - for (var j = 1; j <= s; ++j) - { - Uh = this.modMult(Uh, Vl); - Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1))); - Ql = this.modMult(Ql, Ql); - } - - return [ Uh, Vl ]; -} - -var exports = { - ECCurveFp: ECCurveFp, - ECPointFp: ECPointFp, - ECFieldElementFp: ECFieldElementFp -} - -module.exports = exports diff --git a/truebit-implementation/node_modules/ecc-jsbn/lib/sec.js b/truebit-implementation/node_modules/ecc-jsbn/lib/sec.js deleted file mode 100755 index 5eec8179..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/lib/sec.js +++ /dev/null @@ -1,170 +0,0 @@ -// Named EC curves - -// Requires ec.js, jsbn.js, and jsbn2.js -var BigInteger = require('jsbn').BigInteger -var ECCurveFp = require('./ec.js').ECCurveFp - - -// ---------------- -// X9ECParameters - -// constructor -function X9ECParameters(curve,g,n,h) { - this.curve = curve; - this.g = g; - this.n = n; - this.h = h; -} - -function x9getCurve() { - return this.curve; -} - -function x9getG() { - return this.g; -} - -function x9getN() { - return this.n; -} - -function x9getH() { - return this.h; -} - -X9ECParameters.prototype.getCurve = x9getCurve; -X9ECParameters.prototype.getG = x9getG; -X9ECParameters.prototype.getN = x9getN; -X9ECParameters.prototype.getH = x9getH; - -// ---------------- -// SECNamedCurves - -function fromHex(s) { return new BigInteger(s, 16); } - -function secp128r1() { - // p = 2^128 - 2^97 - 1 - var p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); - var a = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"); - var b = fromHex("E87579C11079F43DD824993C2CEE5ED3"); - //byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679"); - var n = fromHex("FFFFFFFE0000000075A30D1B9038A115"); - var h = BigInteger.ONE; - var curve = new ECCurveFp(p, a, b); - var G = curve.decodePointHex("04" - + "161FF7528B899B2D0C28607CA52C5B86" - + "CF5AC8395BAFEB13C02DA292DDED7A83"); - return new X9ECParameters(curve, G, n, h); -} - -function secp160k1() { - // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 - var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); - var a = BigInteger.ZERO; - var b = fromHex("7"); - //byte[] S = null; - var n = fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3"); - var h = BigInteger.ONE; - var curve = new ECCurveFp(p, a, b); - var G = curve.decodePointHex("04" - + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB" - + "938CF935318FDCED6BC28286531733C3F03C4FEE"); - return new X9ECParameters(curve, G, n, h); -} - -function secp160r1() { - // p = 2^160 - 2^31 - 1 - var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"); - var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"); - var b = fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"); - //byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345"); - var n = fromHex("0100000000000000000001F4C8F927AED3CA752257"); - var h = BigInteger.ONE; - var curve = new ECCurveFp(p, a, b); - var G = curve.decodePointHex("04" - + "4A96B5688EF573284664698968C38BB913CBFC82" - + "23A628553168947D59DCC912042351377AC5FB32"); - return new X9ECParameters(curve, G, n, h); -} - -function secp192k1() { - // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1 - var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"); - var a = BigInteger.ZERO; - var b = fromHex("3"); - //byte[] S = null; - var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"); - var h = BigInteger.ONE; - var curve = new ECCurveFp(p, a, b); - var G = curve.decodePointHex("04" - + "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D" - + "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"); - return new X9ECParameters(curve, G, n, h); -} - -function secp192r1() { - // p = 2^192 - 2^64 - 1 - var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"); - var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"); - var b = fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"); - //byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5"); - var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"); - var h = BigInteger.ONE; - var curve = new ECCurveFp(p, a, b); - var G = curve.decodePointHex("04" - + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012" - + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811"); - return new X9ECParameters(curve, G, n, h); -} - -function secp224r1() { - // p = 2^224 - 2^96 + 1 - var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"); - var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"); - var b = fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"); - //byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); - var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"); - var h = BigInteger.ONE; - var curve = new ECCurveFp(p, a, b); - var G = curve.decodePointHex("04" - + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21" - + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"); - return new X9ECParameters(curve, G, n, h); -} - -function secp256r1() { - // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1 - var p = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"); - var a = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"); - var b = fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"); - //byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90"); - var n = fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"); - var h = BigInteger.ONE; - var curve = new ECCurveFp(p, a, b); - var G = curve.decodePointHex("04" - + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" - + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"); - return new X9ECParameters(curve, G, n, h); -} - -// TODO: make this into a proper hashtable -function getSECCurveByName(name) { - if(name == "secp128r1") return secp128r1(); - if(name == "secp160k1") return secp160k1(); - if(name == "secp160r1") return secp160r1(); - if(name == "secp192k1") return secp192k1(); - if(name == "secp192r1") return secp192r1(); - if(name == "secp224r1") return secp224r1(); - if(name == "secp256r1") return secp256r1(); - return null; -} - -module.exports = { - "secp128r1":secp128r1, - "secp160k1":secp160k1, - "secp160r1":secp160r1, - "secp192k1":secp192k1, - "secp192r1":secp192r1, - "secp224r1":secp224r1, - "secp256r1":secp256r1 -} diff --git a/truebit-implementation/node_modules/ecc-jsbn/package.json b/truebit-implementation/node_modules/ecc-jsbn/package.json deleted file mode 100755 index 343a1773..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "_from": "ecc-jsbn@~0.1.1", - "_id": "ecc-jsbn@0.1.2", - "_inBundle": false, - "_integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "_location": "/ecc-jsbn", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ecc-jsbn@~0.1.1", - "name": "ecc-jsbn", - "escapedName": "ecc-jsbn", - "rawSpec": "~0.1.1", - "saveSpec": null, - "fetchSpec": "~0.1.1" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "_shasum": "3a83a904e54353287874c564b7549386849a98c9", - "_spec": "ecc-jsbn@~0.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/sshpk", - "author": { - "name": "Jeremie Miller", - "email": "jeremie@jabber.org", - "url": "http://jeremie.com/" - }, - "bugs": { - "url": "https://github.com/quartzjer/ecc-jsbn/issues" - }, - "bundleDependencies": false, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - }, - "deprecated": false, - "description": "ECC JS code based on JSBN", - "homepage": "https://github.com/quartzjer/ecc-jsbn", - "keywords": [ - "jsbn", - "ecc", - "browserify" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "name": "Jeremie Miller", - "email": "jeremie@jabber.org", - "url": "http://jeremie.com/" - }, - { - "name": "Ryan Bennett", - "url": "https://github.com/rynomad" - } - ], - "name": "ecc-jsbn", - "repository": { - "type": "git", - "url": "git+https://github.com/quartzjer/ecc-jsbn.git" - }, - "version": "0.1.2" -} diff --git a/truebit-implementation/node_modules/ecc-jsbn/test.js b/truebit-implementation/node_modules/ecc-jsbn/test.js deleted file mode 100755 index bd52abfd..00000000 --- a/truebit-implementation/node_modules/ecc-jsbn/test.js +++ /dev/null @@ -1,14 +0,0 @@ -var ecc = require("./index.js"); -var key1 = new ecc.ECKey(ecc.ECCurves.secp160r1); -var key2 = new ecc.ECKey(ecc.ECCurves.secp160r1); -console.log(key1.deriveSharedSecret(key2)); -var key3 = new ecc.ECKey(ecc.ECCurves.secp160r1,key1.PrivateKey); -var key4 = new ecc.ECKey(ecc.ECCurves.secp160r1,key2.PublicKey,true); -console.log(key3.deriveSharedSecret(key4)); - -var key1 = new ecc.ECKey(ecc.ECCurves.secp256r1); -var key2 = new ecc.ECKey(ecc.ECCurves.secp256r1); -console.log(key1.deriveSharedSecret(key2)); -var key3 = new ecc.ECKey(ecc.ECCurves.secp256r1,key1.PrivateKey); -var key4 = new ecc.ECKey(ecc.ECCurves.secp256r1,key2.PublicKey,true); -console.log(key3.deriveSharedSecret(key4)); diff --git a/truebit-implementation/node_modules/ee-first/LICENSE b/truebit-implementation/node_modules/ee-first/LICENSE deleted file mode 100644 index a7ae8ee9..00000000 --- a/truebit-implementation/node_modules/ee-first/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/ee-first/README.md b/truebit-implementation/node_modules/ee-first/README.md deleted file mode 100644 index cbd2478b..00000000 --- a/truebit-implementation/node_modules/ee-first/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# EE First - -[![NPM version][npm-image]][npm-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] -[![Gittip][gittip-image]][gittip-url] - -Get the first event in a set of event emitters and event pairs, -then clean up after itself. - -## Install - -```sh -$ npm install ee-first -``` - -## API - -```js -var first = require('ee-first') -``` - -### first(arr, listener) - -Invoke `listener` on the first event from the list specified in `arr`. `arr` is -an array of arrays, with each array in the format `[ee, ...event]`. `listener` -will be called only once, the first time any of the given events are emitted. If -`error` is one of the listened events, then if that fires first, the `listener` -will be given the `err` argument. - -The `listener` is invoked as `listener(err, ee, event, args)`, where `err` is the -first argument emitted from an `error` event, if applicable; `ee` is the event -emitter that fired; `event` is the string event name that fired; and `args` is an -array of the arguments that were emitted on the event. - -```js -var ee1 = new EventEmitter() -var ee2 = new EventEmitter() - -first([ - [ee1, 'close', 'end', 'error'], - [ee2, 'error'] -], function (err, ee, event, args) { - // listener invoked -}) -``` - -#### .cancel() - -The group of listeners can be cancelled before being invoked and have all the event -listeners removed from the underlying event emitters. - -```js -var thunk = first([ - [ee1, 'close', 'end', 'error'], - [ee2, 'error'] -], function (err, ee, event, args) { - // listener invoked -}) - -// cancel and clean up -thunk.cancel() -``` - -[npm-image]: https://img.shields.io/npm/v/ee-first.svg?style=flat-square -[npm-url]: https://npmjs.org/package/ee-first -[github-tag]: http://img.shields.io/github/tag/jonathanong/ee-first.svg?style=flat-square -[github-url]: https://github.com/jonathanong/ee-first/tags -[travis-image]: https://img.shields.io/travis/jonathanong/ee-first.svg?style=flat-square -[travis-url]: https://travis-ci.org/jonathanong/ee-first -[coveralls-image]: https://img.shields.io/coveralls/jonathanong/ee-first.svg?style=flat-square -[coveralls-url]: https://coveralls.io/r/jonathanong/ee-first?branch=master -[license-image]: http://img.shields.io/npm/l/ee-first.svg?style=flat-square -[license-url]: LICENSE.md -[downloads-image]: http://img.shields.io/npm/dm/ee-first.svg?style=flat-square -[downloads-url]: https://npmjs.org/package/ee-first -[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square -[gittip-url]: https://www.gittip.com/jonathanong/ diff --git a/truebit-implementation/node_modules/ee-first/index.js b/truebit-implementation/node_modules/ee-first/index.js deleted file mode 100644 index 501287cd..00000000 --- a/truebit-implementation/node_modules/ee-first/index.js +++ /dev/null @@ -1,95 +0,0 @@ -/*! - * ee-first - * Copyright(c) 2014 Jonathan Ong - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = first - -/** - * Get the first event in a set of event emitters and event pairs. - * - * @param {array} stuff - * @param {function} done - * @public - */ - -function first(stuff, done) { - if (!Array.isArray(stuff)) - throw new TypeError('arg must be an array of [ee, events...] arrays') - - var cleanups = [] - - for (var i = 0; i < stuff.length; i++) { - var arr = stuff[i] - - if (!Array.isArray(arr) || arr.length < 2) - throw new TypeError('each array member must be [ee, events...]') - - var ee = arr[0] - - for (var j = 1; j < arr.length; j++) { - var event = arr[j] - var fn = listener(event, callback) - - // listen to the event - ee.on(event, fn) - // push this listener to the list of cleanups - cleanups.push({ - ee: ee, - event: event, - fn: fn, - }) - } - } - - function callback() { - cleanup() - done.apply(null, arguments) - } - - function cleanup() { - var x - for (var i = 0; i < cleanups.length; i++) { - x = cleanups[i] - x.ee.removeListener(x.event, x.fn) - } - } - - function thunk(fn) { - done = fn - } - - thunk.cancel = cleanup - - return thunk -} - -/** - * Create the event listener. - * @private - */ - -function listener(event, done) { - return function onevent(arg1) { - var args = new Array(arguments.length) - var ee = this - var err = event === 'error' - ? arg1 - : null - - // copy args to prevent arguments escaping scope - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - - done(err, ee, event, args) - } -} diff --git a/truebit-implementation/node_modules/ee-first/package.json b/truebit-implementation/node_modules/ee-first/package.json deleted file mode 100644 index e5a3eb51..00000000 --- a/truebit-implementation/node_modules/ee-first/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "ee-first@1.1.1", - "_id": "ee-first@1.1.1", - "_inBundle": false, - "_integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "_location": "/ee-first", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "ee-first@1.1.1", - "name": "ee-first", - "escapedName": "ee-first", - "rawSpec": "1.1.1", - "saveSpec": null, - "fetchSpec": "1.1.1" - }, - "_requiredBy": [ - "/on-finished" - ], - "_resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "_shasum": "590c61156b0ae2f4f0255732a158b266bc56b21d", - "_spec": "ee-first@1.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/on-finished", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/jonathanong/ee-first/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], - "deprecated": false, - "description": "return the first event in a set of ee/event pairs", - "devDependencies": { - "istanbul": "0.3.9", - "mocha": "2.2.5" - }, - "files": [ - "index.js", - "LICENSE" - ], - "homepage": "https://github.com/jonathanong/ee-first#readme", - "license": "MIT", - "name": "ee-first", - "repository": { - "type": "git", - "url": "git+https://github.com/jonathanong/ee-first.git" - }, - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.1.1" -} diff --git a/truebit-implementation/node_modules/elliptic/README.md b/truebit-implementation/node_modules/elliptic/README.md deleted file mode 100644 index 96219e55..00000000 --- a/truebit-implementation/node_modules/elliptic/README.md +++ /dev/null @@ -1,238 +0,0 @@ -# Elliptic [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic) [![Coverage Status](https://coveralls.io/repos/indutny/elliptic/badge.svg?branch=master&service=github)](https://coveralls.io/github/indutny/elliptic?branch=master) [![Code Climate](https://codeclimate.com/github/indutny/elliptic/badges/gpa.svg)](https://codeclimate.com/github/indutny/elliptic) - -[![Saucelabs Test Status](https://saucelabs.com/browser-matrix/gh-indutny-elliptic.svg)](https://saucelabs.com/u/gh-indutny-elliptic) - -Fast elliptic-curve cryptography in a plain javascript implementation. - -NOTE: Please take a look at http://safecurves.cr.yp.to/ before choosing a curve -for your cryptography operations. - -## Incentive - -ECC is much slower than regular RSA cryptography, the JS implementations are -even more slower. - -## Benchmarks - -```bash -$ node benchmarks/index.js -Benchmarking: sign -elliptic#sign x 262 ops/sec ±0.51% (177 runs sampled) -eccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled) ------------------------- -Fastest is elliptic#sign -======================== -Benchmarking: verify -elliptic#verify x 113 ops/sec ±0.50% (166 runs sampled) -eccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled) ------------------------- -Fastest is elliptic#verify -======================== -Benchmarking: gen -elliptic#gen x 294 ops/sec ±0.43% (176 runs sampled) -eccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled) ------------------------- -Fastest is elliptic#gen -======================== -Benchmarking: ecdh -elliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled) ------------------------- -Fastest is elliptic#ecdh -======================== -``` - -## API - -### ECDSA - -```javascript -var EC = require('elliptic').ec; - -// Create and initialize EC context -// (better do it once and reuse it) -var ec = new EC('secp256k1'); - -// Generate keys -var key = ec.genKeyPair(); - -// Sign the message's hash (input must be an array, or a hex-string) -var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; -var signature = key.sign(msgHash); - -// Export DER encoded signature in Array -var derSign = signature.toDER(); - -// Verify signature -console.log(key.verify(msgHash, derSign)); - -// CHECK WITH NO PRIVATE KEY - -var pubPoint = key.getPublic(); -var x = pubPoint.getX(); -var y = pubPoint.getY(); - -// Public Key MUST be either: -// 1) '04' + hex string of x + hex string of y; or -// 2) object with two hex string properties (x and y); or -// 3) object with two buffer properties (x and y) -var pub = pubPoint.encode('hex'); // case 1 -var pub = { x: x.toString('hex'), y: y.toString('hex') }; // case 2 -var pub = { x: x.toBuffer(), y: y.toBuffer() }; // case 3 -var pub = { x: x.toArrayLike(Buffer), y: y.toArrayLike(Buffer) }; // case 3 - -// Import public key -var key = ec.keyFromPublic(pub, 'hex'); - -// Signature MUST be either: -// 1) DER-encoded signature as hex-string; or -// 2) DER-encoded signature as buffer; or -// 3) object with two hex-string properties (r and s); or -// 4) object with two buffer properties (r and s) - -var signature = '3046022100...'; // case 1 -var signature = new Buffer('...'); // case 2 -var signature = { r: 'b1fc...', s: '9c42...' }; // case 3 - -// Verify signature -console.log(key.verify(msgHash, signature)); -``` - -### EdDSA - -```javascript -var EdDSA = require('elliptic').eddsa; - -// Create and initialize EdDSA context -// (better do it once and reuse it) -var ec = new EdDSA('ed25519'); - -// Create key pair from secret -var key = ec.keyFromSecret('693e3c...'); // hex string, array or Buffer - -// Sign the message's hash (input must be an array, or a hex-string) -var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; -var signature = key.sign(msgHash).toHex(); - -// Verify signature -console.log(key.verify(msgHash, signature)); - -// CHECK WITH NO PRIVATE KEY - -// Import public key -var pub = '0a1af638...'; -var key = ec.keyFromPublic(pub, 'hex'); - -// Verify signature -var signature = '70bed1...'; -console.log(key.verify(msgHash, signature)); -``` - -### ECDH - -```javascript -var EC = require('elliptic').ec; -var ec = new EC('curve25519'); - -// Generate keys -var key1 = ec.genKeyPair(); -var key2 = ec.genKeyPair(); - -var shared1 = key1.derive(key2.getPublic()); -var shared2 = key2.derive(key1.getPublic()); - -console.log('Both shared secrets are BN instances'); -console.log(shared1.toString(16)); -console.log(shared2.toString(16)); -``` - -three and more members: -```javascript -var EC = require('elliptic').ec; -var ec = new EC('curve25519'); - -var A = ec.genKeyPair(); -var B = ec.genKeyPair(); -var C = ec.genKeyPair(); - -var AB = A.getPublic().mul(B.getPrivate()) -var BC = B.getPublic().mul(C.getPrivate()) -var CA = C.getPublic().mul(A.getPrivate()) - -var ABC = AB.mul(C.getPrivate()) -var BCA = BC.mul(A.getPrivate()) -var CAB = CA.mul(B.getPrivate()) - -console.log(ABC.getX().toString(16)) -console.log(BCA.getX().toString(16)) -console.log(CAB.getX().toString(16)) -``` - -NOTE: `.derive()` returns a [BN][1] instance. - -## Supported curves - -Elliptic.js support following curve types: - -* Short Weierstrass -* Montgomery -* Edwards -* Twisted Edwards - -Following curve 'presets' are embedded into the library: - -* `secp256k1` -* `p192` -* `p224` -* `p256` -* `p384` -* `p521` -* `curve25519` -* `ed25519` - -NOTE: That `curve25519` could not be used for ECDSA, use `ed25519` instead. - -### Implementation details - -ECDSA is using deterministic `k` value generation as per [RFC6979][0]. Most of -the curve operations are performed on non-affine coordinates (either projective -or extended), various windowing techniques are used for different cases. - -All operations are performed in reduction context using [bn.js][1], hashing is -provided by [hash.js][2] - -### Related projects - -* [eccrypto][3]: isomorphic implementation of ECDSA, ECDH and ECIES for both - browserify and node (uses `elliptic` for browser and [secp256k1-node][4] for - node) - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2014. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. - -[0]: http://tools.ietf.org/html/rfc6979 -[1]: https://github.com/indutny/bn.js -[2]: https://github.com/indutny/hash.js -[3]: https://github.com/bitchan/eccrypto -[4]: https://github.com/wanderer/secp256k1-node diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic.js b/truebit-implementation/node_modules/elliptic/lib/elliptic.js deleted file mode 100644 index dfe2fe7d..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var elliptic = exports; - -elliptic.version = require('../package.json').version; -elliptic.utils = require('./elliptic/utils'); -elliptic.rand = require('brorand'); -elliptic.curve = require('./elliptic/curve'); -elliptic.curves = require('./elliptic/curves'); - -// Protocols -elliptic.ec = require('./elliptic/ec'); -elliptic.eddsa = require('./elliptic/eddsa'); diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/base.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/base.js deleted file mode 100644 index 3af82396..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/base.js +++ /dev/null @@ -1,375 +0,0 @@ -'use strict'; - -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var getNAF = utils.getNAF; -var getJSF = utils.getJSF; -var assert = utils.assert; - -function BaseCurve(type, conf) { - this.type = type; - this.p = new BN(conf.p, 16); - - // Use Montgomery, when there is no fast reduction for the prime - this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); - - // Useful for many curves - this.zero = new BN(0).toRed(this.red); - this.one = new BN(1).toRed(this.red); - this.two = new BN(2).toRed(this.red); - - // Curve configuration, optional - this.n = conf.n && new BN(conf.n, 16); - this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); - - // Temporary arrays - this._wnafT1 = new Array(4); - this._wnafT2 = new Array(4); - this._wnafT3 = new Array(4); - this._wnafT4 = new Array(4); - - // Generalized Greg Maxwell's trick - var adjustCount = this.n && this.p.div(this.n); - if (!adjustCount || adjustCount.cmpn(100) > 0) { - this.redN = null; - } else { - this._maxwellTrick = true; - this.redN = this.n.toRed(this.red); - } -} -module.exports = BaseCurve; - -BaseCurve.prototype.point = function point() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype.validate = function validate() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { - assert(p.precomputed); - var doubles = p._getDoubles(); - - var naf = getNAF(k, 1); - var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); - I /= 3; - - // Translate into more windowed form - var repr = []; - for (var j = 0; j < naf.length; j += doubles.step) { - var nafW = 0; - for (var k = j + doubles.step - 1; k >= j; k--) - nafW = (nafW << 1) + naf[k]; - repr.push(nafW); - } - - var a = this.jpoint(null, null, null); - var b = this.jpoint(null, null, null); - for (var i = I; i > 0; i--) { - for (var j = 0; j < repr.length; j++) { - var nafW = repr[j]; - if (nafW === i) - b = b.mixedAdd(doubles.points[j]); - else if (nafW === -i) - b = b.mixedAdd(doubles.points[j].neg()); - } - a = a.add(b); - } - return a.toP(); -}; - -BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { - var w = 4; - - // Precompute window - var nafPoints = p._getNAFPoints(w); - w = nafPoints.wnd; - var wnd = nafPoints.points; - - // Get NAF form - var naf = getNAF(k, w); - - // Add `this`*(N+1) for every w-NAF index - var acc = this.jpoint(null, null, null); - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var k = 0; i >= 0 && naf[i] === 0; i--) - k++; - if (i >= 0) - k++; - acc = acc.dblp(k); - - if (i < 0) - break; - var z = naf[i]; - assert(z !== 0); - if (p.type === 'affine') { - // J +- P - if (z > 0) - acc = acc.mixedAdd(wnd[(z - 1) >> 1]); - else - acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); - } else { - // J +- J - if (z > 0) - acc = acc.add(wnd[(z - 1) >> 1]); - else - acc = acc.add(wnd[(-z - 1) >> 1].neg()); - } - } - return p.type === 'affine' ? acc.toP() : acc; -}; - -BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, - points, - coeffs, - len, - jacobianResult) { - var wndWidth = this._wnafT1; - var wnd = this._wnafT2; - var naf = this._wnafT3; - - // Fill all arrays - var max = 0; - for (var i = 0; i < len; i++) { - var p = points[i]; - var nafPoints = p._getNAFPoints(defW); - wndWidth[i] = nafPoints.wnd; - wnd[i] = nafPoints.points; - } - - // Comb small window NAFs - for (var i = len - 1; i >= 1; i -= 2) { - var a = i - 1; - var b = i; - if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { - naf[a] = getNAF(coeffs[a], wndWidth[a]); - naf[b] = getNAF(coeffs[b], wndWidth[b]); - max = Math.max(naf[a].length, max); - max = Math.max(naf[b].length, max); - continue; - } - - var comb = [ - points[a], /* 1 */ - null, /* 3 */ - null, /* 5 */ - points[b] /* 7 */ - ]; - - // Try to avoid Projective points, if possible - if (points[a].y.cmp(points[b].y) === 0) { - comb[1] = points[a].add(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].add(points[b].neg()); - } else { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } - - var index = [ - -3, /* -1 -1 */ - -1, /* -1 0 */ - -5, /* -1 1 */ - -7, /* 0 -1 */ - 0, /* 0 0 */ - 7, /* 0 1 */ - 5, /* 1 -1 */ - 1, /* 1 0 */ - 3 /* 1 1 */ - ]; - - var jsf = getJSF(coeffs[a], coeffs[b]); - max = Math.max(jsf[0].length, max); - naf[a] = new Array(max); - naf[b] = new Array(max); - for (var j = 0; j < max; j++) { - var ja = jsf[0][j] | 0; - var jb = jsf[1][j] | 0; - - naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; - naf[b][j] = 0; - wnd[a] = comb; - } - } - - var acc = this.jpoint(null, null, null); - var tmp = this._wnafT4; - for (var i = max; i >= 0; i--) { - var k = 0; - - while (i >= 0) { - var zero = true; - for (var j = 0; j < len; j++) { - tmp[j] = naf[j][i] | 0; - if (tmp[j] !== 0) - zero = false; - } - if (!zero) - break; - k++; - i--; - } - if (i >= 0) - k++; - acc = acc.dblp(k); - if (i < 0) - break; - - for (var j = 0; j < len; j++) { - var z = tmp[j]; - var p; - if (z === 0) - continue; - else if (z > 0) - p = wnd[j][(z - 1) >> 1]; - else if (z < 0) - p = wnd[j][(-z - 1) >> 1].neg(); - - if (p.type === 'affine') - acc = acc.mixedAdd(p); - else - acc = acc.add(p); - } - } - // Zeroify references - for (var i = 0; i < len; i++) - wnd[i] = null; - - if (jacobianResult) - return acc; - else - return acc.toP(); -}; - -function BasePoint(curve, type) { - this.curve = curve; - this.type = type; - this.precomputed = null; -} -BaseCurve.BasePoint = BasePoint; - -BasePoint.prototype.eq = function eq(/*other*/) { - throw new Error('Not implemented'); -}; - -BasePoint.prototype.validate = function validate() { - return this.curve.validate(this); -}; - -BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - bytes = utils.toArray(bytes, enc); - - var len = this.p.byteLength(); - - // uncompressed, hybrid-odd, hybrid-even - if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && - bytes.length - 1 === 2 * len) { - if (bytes[0] === 0x06) - assert(bytes[bytes.length - 1] % 2 === 0); - else if (bytes[0] === 0x07) - assert(bytes[bytes.length - 1] % 2 === 1); - - var res = this.point(bytes.slice(1, 1 + len), - bytes.slice(1 + len, 1 + 2 * len)); - - return res; - } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && - bytes.length - 1 === len) { - return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); - } - throw new Error('Unknown point format'); -}; - -BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { - return this.encode(enc, true); -}; - -BasePoint.prototype._encode = function _encode(compact) { - var len = this.curve.p.byteLength(); - var x = this.getX().toArray('be', len); - - if (compact) - return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); - - return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; -}; - -BasePoint.prototype.encode = function encode(enc, compact) { - return utils.encode(this._encode(compact), enc); -}; - -BasePoint.prototype.precompute = function precompute(power) { - if (this.precomputed) - return this; - - var precomputed = { - doubles: null, - naf: null, - beta: null - }; - precomputed.naf = this._getNAFPoints(8); - precomputed.doubles = this._getDoubles(4, power); - precomputed.beta = this._getBeta(); - this.precomputed = precomputed; - - return this; -}; - -BasePoint.prototype._hasDoubles = function _hasDoubles(k) { - if (!this.precomputed) - return false; - - var doubles = this.precomputed.doubles; - if (!doubles) - return false; - - return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); -}; - -BasePoint.prototype._getDoubles = function _getDoubles(step, power) { - if (this.precomputed && this.precomputed.doubles) - return this.precomputed.doubles; - - var doubles = [ this ]; - var acc = this; - for (var i = 0; i < power; i += step) { - for (var j = 0; j < step; j++) - acc = acc.dbl(); - doubles.push(acc); - } - return { - step: step, - points: doubles - }; -}; - -BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { - if (this.precomputed && this.precomputed.naf) - return this.precomputed.naf; - - var res = [ this ]; - var max = (1 << wnd) - 1; - var dbl = max === 1 ? null : this.dbl(); - for (var i = 1; i < max; i++) - res[i] = res[i - 1].add(dbl); - return { - wnd: wnd, - points: res - }; -}; - -BasePoint.prototype._getBeta = function _getBeta() { - return null; -}; - -BasePoint.prototype.dblp = function dblp(k) { - var r = this; - for (var i = 0; i < k; i++) - r = r.dbl(); - return r; -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/edwards.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/edwards.js deleted file mode 100644 index a8965eae..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/edwards.js +++ /dev/null @@ -1,433 +0,0 @@ -'use strict'; - -var curve = require('../curve'); -var elliptic = require('../../elliptic'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; - -var assert = elliptic.utils.assert; - -function EdwardsCurve(conf) { - // NOTE: Important as we are creating point in Base.call() - this.twisted = (conf.a | 0) !== 1; - this.mOneA = this.twisted && (conf.a | 0) === -1; - this.extended = this.mOneA; - - Base.call(this, 'edwards', conf); - - this.a = new BN(conf.a, 16).umod(this.red.m); - this.a = this.a.toRed(this.red); - this.c = new BN(conf.c, 16).toRed(this.red); - this.c2 = this.c.redSqr(); - this.d = new BN(conf.d, 16).toRed(this.red); - this.dd = this.d.redAdd(this.d); - - assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); - this.oneC = (conf.c | 0) === 1; -} -inherits(EdwardsCurve, Base); -module.exports = EdwardsCurve; - -EdwardsCurve.prototype._mulA = function _mulA(num) { - if (this.mOneA) - return num.redNeg(); - else - return this.a.redMul(num); -}; - -EdwardsCurve.prototype._mulC = function _mulC(num) { - if (this.oneC) - return num; - else - return this.c.redMul(num); -}; - -// Just for compatibility with Short curve -EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { - return this.point(x, y, z, t); -}; - -EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var x2 = x.redSqr(); - var rhs = this.c2.redSub(this.a.redMul(x2)); - var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); - - var y2 = rhs.redMul(lhs.redInvm()); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { - y = new BN(y, 16); - if (!y.red) - y = y.toRed(this.red); - - // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) - var y2 = y.redSqr(); - var lhs = y2.redSub(this.c2); - var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); - var x2 = lhs.redMul(rhs.redInvm()); - - if (x2.cmp(this.zero) === 0) { - if (odd) - throw new Error('invalid point'); - else - return this.point(this.zero, y); - } - - var x = x2.redSqrt(); - if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - if (x.fromRed().isOdd() !== odd) - x = x.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.validate = function validate(point) { - if (point.isInfinity()) - return true; - - // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) - point.normalize(); - - var x2 = point.x.redSqr(); - var y2 = point.y.redSqr(); - var lhs = x2.redMul(this.a).redAdd(y2); - var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); - - return lhs.cmp(rhs) === 0; -}; - -function Point(curve, x, y, z, t) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && y === null && z === null) { - this.x = this.curve.zero; - this.y = this.curve.one; - this.z = this.curve.one; - this.t = this.curve.zero; - this.zOne = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = z ? new BN(z, 16) : this.curve.one; - this.t = t && new BN(t, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - if (this.t && !this.t.red) - this.t = this.t.toRed(this.curve.red); - this.zOne = this.z === this.curve.one; - - // Use extended coordinates - if (this.curve.extended && !this.t) { - this.t = this.x.redMul(this.y); - if (!this.zOne) - this.t = this.t.redMul(this.z.redInvm()); - } - } -} -inherits(Point, Base.BasePoint); - -EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -EdwardsCurve.prototype.point = function point(x, y, z, t) { - return new Point(this, x, y, z, t); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1], obj[2]); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.x.cmpn(0) === 0 && - (this.y.cmp(this.z) === 0 || - (this.zOne && this.y.cmp(this.curve.c) === 0)); -}; - -Point.prototype._extDbl = function _extDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #doubling-dbl-2008-hwcd - // 4M + 4S - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = 2 * Z1^2 - var c = this.z.redSqr(); - c = c.redIAdd(c); - // D = a * A - var d = this.curve._mulA(a); - // E = (X1 + Y1)^2 - A - B - var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); - // G = D + B - var g = d.redAdd(b); - // F = G - C - var f = g.redSub(c); - // H = D - B - var h = d.redSub(b); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projDbl = function _projDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #doubling-dbl-2008-bbjlp - // #doubling-dbl-2007-bl - // and others - // Generally 3M + 4S or 2M + 4S - - // B = (X1 + Y1)^2 - var b = this.x.redAdd(this.y).redSqr(); - // C = X1^2 - var c = this.x.redSqr(); - // D = Y1^2 - var d = this.y.redSqr(); - - var nx; - var ny; - var nz; - if (this.curve.twisted) { - // E = a * C - var e = this.curve._mulA(c); - // F = E + D - var f = e.redAdd(d); - if (this.zOne) { - // X3 = (B - C - D) * (F - 2) - nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F^2 - 2 * F - nz = f.redSqr().redSub(f).redSub(f); - } else { - // H = Z1^2 - var h = this.z.redSqr(); - // J = F - 2 * H - var j = f.redSub(h).redISub(h); - // X3 = (B-C-D)*J - nx = b.redSub(c).redISub(d).redMul(j); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F * J - nz = f.redMul(j); - } - } else { - // E = C + D - var e = c.redAdd(d); - // H = (c * Z1)^2 - var h = this.curve._mulC(this.z).redSqr(); - // J = E - 2 * H - var j = e.redSub(h).redSub(h); - // X3 = c * (B - E) * J - nx = this.curve._mulC(b.redISub(e)).redMul(j); - // Y3 = c * E * (C - D) - ny = this.curve._mulC(e).redMul(c.redISub(d)); - // Z3 = E * J - nz = e.redMul(j); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - // Double in extended coordinates - if (this.curve.extended) - return this._extDbl(); - else - return this._projDbl(); -}; - -Point.prototype._extAdd = function _extAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #addition-add-2008-hwcd-3 - // 8M - - // A = (Y1 - X1) * (Y2 - X2) - var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); - // B = (Y1 + X1) * (Y2 + X2) - var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); - // C = T1 * k * T2 - var c = this.t.redMul(this.curve.dd).redMul(p.t); - // D = Z1 * 2 * Z2 - var d = this.z.redMul(p.z.redAdd(p.z)); - // E = B - A - var e = b.redSub(a); - // F = D - C - var f = d.redSub(c); - // G = D + C - var g = d.redAdd(c); - // H = B + A - var h = b.redAdd(a); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projAdd = function _projAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #addition-add-2008-bbjlp - // #addition-add-2007-bl - // 10M + 1S - - // A = Z1 * Z2 - var a = this.z.redMul(p.z); - // B = A^2 - var b = a.redSqr(); - // C = X1 * X2 - var c = this.x.redMul(p.x); - // D = Y1 * Y2 - var d = this.y.redMul(p.y); - // E = d * C * D - var e = this.curve.d.redMul(c).redMul(d); - // F = B - E - var f = b.redSub(e); - // G = B + E - var g = b.redAdd(e); - // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) - var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); - var nx = a.redMul(f).redMul(tmp); - var ny; - var nz; - if (this.curve.twisted) { - // Y3 = A * G * (D - a * C) - ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); - // Z3 = F * G - nz = f.redMul(g); - } else { - // Y3 = A * G * (D - C) - ny = a.redMul(g).redMul(d.redSub(c)); - // Z3 = c * F * G - nz = this.curve._mulC(f).redMul(g); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.add = function add(p) { - if (this.isInfinity()) - return p; - if (p.isInfinity()) - return this; - - if (this.curve.extended) - return this._extAdd(p); - else - return this._projAdd(p); -}; - -Point.prototype.mul = function mul(k) { - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); -}; - -Point.prototype.normalize = function normalize() { - if (this.zOne) - return this; - - // Normalize coordinates - var zi = this.z.redInvm(); - this.x = this.x.redMul(zi); - this.y = this.y.redMul(zi); - if (this.t) - this.t = this.t.redMul(zi); - this.z = this.curve.one; - this.zOne = true; - return this; -}; - -Point.prototype.neg = function neg() { - return this.curve.point(this.x.redNeg(), - this.y, - this.z, - this.t && this.t.redNeg()); -}; - -Point.prototype.getX = function getX() { - this.normalize(); - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - this.normalize(); - return this.y.fromRed(); -}; - -Point.prototype.eq = function eq(other) { - return this === other || - this.getX().cmp(other.getX()) === 0 && - this.getY().cmp(other.getY()) === 0; -}; - -Point.prototype.eqXToP = function eqXToP(x) { - var rx = x.toRed(this.curve.red).redMul(this.z); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(this.z); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -// Compatibility with BaseCurve -Point.prototype.toP = Point.prototype.normalize; -Point.prototype.mixedAdd = Point.prototype.add; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/index.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/index.js deleted file mode 100644 index c589281d..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/index.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var curve = exports; - -curve.base = require('./base'); -curve.short = require('./short'); -curve.mont = require('./mont'); -curve.edwards = require('./edwards'); diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/mont.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/mont.js deleted file mode 100644 index 0ddea33e..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/mont.js +++ /dev/null @@ -1,180 +0,0 @@ -'use strict'; - -var curve = require('../curve'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; - -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; - -function MontCurve(conf) { - Base.call(this, 'mont', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.i4 = new BN(4).toRed(this.red).redInvm(); - this.two = new BN(2).toRed(this.red); - this.a24 = this.i4.redMul(this.a.redAdd(this.two)); -} -inherits(MontCurve, Base); -module.exports = MontCurve; - -MontCurve.prototype.validate = function validate(point) { - var x = point.normalize().x; - var x2 = x.redSqr(); - var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); - var y = rhs.redSqrt(); - - return y.redSqr().cmp(rhs) === 0; -}; - -function Point(curve, x, z) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && z === null) { - this.x = this.curve.one; - this.z = this.curve.zero; - } else { - this.x = new BN(x, 16); - this.z = new BN(z, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - } -} -inherits(Point, Base.BasePoint); - -MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - return this.point(utils.toArray(bytes, enc), 1); -}; - -MontCurve.prototype.point = function point(x, z) { - return new Point(this, x, z); -}; - -MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -Point.prototype.precompute = function precompute() { - // No-op -}; - -Point.prototype._encode = function _encode() { - return this.getX().toArray('be', this.curve.p.byteLength()); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1] || curve.one); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - -Point.prototype.dbl = function dbl() { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 - // 2M + 2S + 4A - - // A = X1 + Z1 - var a = this.x.redAdd(this.z); - // AA = A^2 - var aa = a.redSqr(); - // B = X1 - Z1 - var b = this.x.redSub(this.z); - // BB = B^2 - var bb = b.redSqr(); - // C = AA - BB - var c = aa.redSub(bb); - // X3 = AA * BB - var nx = aa.redMul(bb); - // Z3 = C * (BB + A24 * C) - var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); - return this.curve.point(nx, nz); -}; - -Point.prototype.add = function add() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.diffAdd = function diffAdd(p, diff) { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 - // 4M + 2S + 6A - - // A = X2 + Z2 - var a = this.x.redAdd(this.z); - // B = X2 - Z2 - var b = this.x.redSub(this.z); - // C = X3 + Z3 - var c = p.x.redAdd(p.z); - // D = X3 - Z3 - var d = p.x.redSub(p.z); - // DA = D * A - var da = d.redMul(a); - // CB = C * B - var cb = c.redMul(b); - // X5 = Z1 * (DA + CB)^2 - var nx = diff.z.redMul(da.redAdd(cb).redSqr()); - // Z5 = X1 * (DA - CB)^2 - var nz = diff.x.redMul(da.redISub(cb).redSqr()); - return this.curve.point(nx, nz); -}; - -Point.prototype.mul = function mul(k) { - var t = k.clone(); - var a = this; // (N / 2) * Q + Q - var b = this.curve.point(null, null); // (N / 2) * Q - var c = this; // Q - - for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) - bits.push(t.andln(1)); - - for (var i = bits.length - 1; i >= 0; i--) { - if (bits[i] === 0) { - // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q - a = a.diffAdd(b, c); - // N * Q = 2 * ((N / 2) * Q + Q)) - b = b.dbl(); - } else { - // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) - b = a.diffAdd(b, c); - // N * Q + Q = 2 * ((N / 2) * Q + Q) - a = a.dbl(); - } - } - return b; -}; - -Point.prototype.mulAdd = function mulAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.jumlAdd = function jumlAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.eq = function eq(other) { - return this.getX().cmp(other.getX()) === 0; -}; - -Point.prototype.normalize = function normalize() { - this.x = this.x.redMul(this.z.redInvm()); - this.z = this.curve.one; - return this; -}; - -Point.prototype.getX = function getX() { - // Normalize coordinates - this.normalize(); - - return this.x.fromRed(); -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/short.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/short.js deleted file mode 100644 index 5a0e8603..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/curve/short.js +++ /dev/null @@ -1,937 +0,0 @@ -'use strict'; - -var curve = require('../curve'); -var elliptic = require('../../elliptic'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; - -var assert = elliptic.utils.assert; - -function ShortCurve(conf) { - Base.call(this, 'short', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.tinv = this.two.redInvm(); - - this.zeroA = this.a.fromRed().cmpn(0) === 0; - this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; - - // If the curve is endomorphic, precalculate beta and lambda - this.endo = this._getEndomorphism(conf); - this._endoWnafT1 = new Array(4); - this._endoWnafT2 = new Array(4); -} -inherits(ShortCurve, Base); -module.exports = ShortCurve; - -ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { - // No efficient endomorphism - if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) - return; - - // Compute beta and lambda, that lambda * P = (beta * Px; Py) - var beta; - var lambda; - if (conf.beta) { - beta = new BN(conf.beta, 16).toRed(this.red); - } else { - var betas = this._getEndoRoots(this.p); - // Choose the smallest beta - beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; - beta = beta.toRed(this.red); - } - if (conf.lambda) { - lambda = new BN(conf.lambda, 16); - } else { - // Choose the lambda that is matching selected beta - var lambdas = this._getEndoRoots(this.n); - if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { - lambda = lambdas[0]; - } else { - lambda = lambdas[1]; - assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); - } - } - - // Get basis vectors, used for balanced length-two representation - var basis; - if (conf.basis) { - basis = conf.basis.map(function(vec) { - return { - a: new BN(vec.a, 16), - b: new BN(vec.b, 16) - }; - }); - } else { - basis = this._getEndoBasis(lambda); - } - - return { - beta: beta, - lambda: lambda, - basis: basis - }; -}; - -ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { - // Find roots of for x^2 + x + 1 in F - // Root = (-1 +- Sqrt(-3)) / 2 - // - var red = num === this.p ? this.red : BN.mont(num); - var tinv = new BN(2).toRed(red).redInvm(); - var ntinv = tinv.redNeg(); - - var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); - - var l1 = ntinv.redAdd(s).fromRed(); - var l2 = ntinv.redSub(s).fromRed(); - return [ l1, l2 ]; -}; - -ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { - // aprxSqrt >= sqrt(this.n) - var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); - - // 3.74 - // Run EGCD, until r(L + 1) < aprxSqrt - var u = lambda; - var v = this.n.clone(); - var x1 = new BN(1); - var y1 = new BN(0); - var x2 = new BN(0); - var y2 = new BN(1); - - // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) - var a0; - var b0; - // First vector - var a1; - var b1; - // Second vector - var a2; - var b2; - - var prevR; - var i = 0; - var r; - var x; - while (u.cmpn(0) !== 0) { - var q = v.div(u); - r = v.sub(q.mul(u)); - x = x2.sub(q.mul(x1)); - var y = y2.sub(q.mul(y1)); - - if (!a1 && r.cmp(aprxSqrt) < 0) { - a0 = prevR.neg(); - b0 = x1; - a1 = r.neg(); - b1 = x; - } else if (a1 && ++i === 2) { - break; - } - prevR = r; - - v = u; - u = r; - x2 = x1; - x1 = x; - y2 = y1; - y1 = y; - } - a2 = r.neg(); - b2 = x; - - var len1 = a1.sqr().add(b1.sqr()); - var len2 = a2.sqr().add(b2.sqr()); - if (len2.cmp(len1) >= 0) { - a2 = a0; - b2 = b0; - } - - // Normalize signs - if (a1.negative) { - a1 = a1.neg(); - b1 = b1.neg(); - } - if (a2.negative) { - a2 = a2.neg(); - b2 = b2.neg(); - } - - return [ - { a: a1, b: b1 }, - { a: a2, b: b2 } - ]; -}; - -ShortCurve.prototype._endoSplit = function _endoSplit(k) { - var basis = this.endo.basis; - var v1 = basis[0]; - var v2 = basis[1]; - - var c1 = v2.b.mul(k).divRound(this.n); - var c2 = v1.b.neg().mul(k).divRound(this.n); - - var p1 = c1.mul(v1.a); - var p2 = c2.mul(v2.a); - var q1 = c1.mul(v1.b); - var q2 = c2.mul(v2.b); - - // Calculate answer - var k1 = k.sub(p1).sub(p2); - var k2 = q1.add(q2).neg(); - return { k1: k1, k2: k2 }; -}; - -ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - // XXX Is there any way to tell if the number is odd without converting it - // to non-red form? - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -ShortCurve.prototype.validate = function validate(point) { - if (point.inf) - return true; - - var x = point.x; - var y = point.y; - - var ax = this.a.redMul(x); - var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); - return y.redSqr().redISub(rhs).cmpn(0) === 0; -}; - -ShortCurve.prototype._endoWnafMulAdd = - function _endoWnafMulAdd(points, coeffs, jacobianResult) { - var npoints = this._endoWnafT1; - var ncoeffs = this._endoWnafT2; - for (var i = 0; i < points.length; i++) { - var split = this._endoSplit(coeffs[i]); - var p = points[i]; - var beta = p._getBeta(); - - if (split.k1.negative) { - split.k1.ineg(); - p = p.neg(true); - } - if (split.k2.negative) { - split.k2.ineg(); - beta = beta.neg(true); - } - - npoints[i * 2] = p; - npoints[i * 2 + 1] = beta; - ncoeffs[i * 2] = split.k1; - ncoeffs[i * 2 + 1] = split.k2; - } - var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); - - // Clean-up references to points and coefficients - for (var j = 0; j < i * 2; j++) { - npoints[j] = null; - ncoeffs[j] = null; - } - return res; -}; - -function Point(curve, x, y, isRed) { - Base.BasePoint.call(this, curve, 'affine'); - if (x === null && y === null) { - this.x = null; - this.y = null; - this.inf = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - // Force redgomery representation when loading from JSON - if (isRed) { - this.x.forceRed(this.curve.red); - this.y.forceRed(this.curve.red); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - this.inf = false; - } -} -inherits(Point, Base.BasePoint); - -ShortCurve.prototype.point = function point(x, y, isRed) { - return new Point(this, x, y, isRed); -}; - -ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { - return Point.fromJSON(this, obj, red); -}; - -Point.prototype._getBeta = function _getBeta() { - if (!this.curve.endo) - return; - - var pre = this.precomputed; - if (pre && pre.beta) - return pre.beta; - - var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); - if (pre) { - var curve = this.curve; - var endoMul = function(p) { - return curve.point(p.x.redMul(curve.endo.beta), p.y); - }; - pre.beta = beta; - beta.precomputed = { - beta: null, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(endoMul) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(endoMul) - } - }; - } - return beta; -}; - -Point.prototype.toJSON = function toJSON() { - if (!this.precomputed) - return [ this.x, this.y ]; - - return [ this.x, this.y, this.precomputed && { - doubles: this.precomputed.doubles && { - step: this.precomputed.doubles.step, - points: this.precomputed.doubles.points.slice(1) - }, - naf: this.precomputed.naf && { - wnd: this.precomputed.naf.wnd, - points: this.precomputed.naf.points.slice(1) - } - } ]; -}; - -Point.fromJSON = function fromJSON(curve, obj, red) { - if (typeof obj === 'string') - obj = JSON.parse(obj); - var res = curve.point(obj[0], obj[1], red); - if (!obj[2]) - return res; - - function obj2point(obj) { - return curve.point(obj[0], obj[1], red); - } - - var pre = obj[2]; - res.precomputed = { - beta: null, - doubles: pre.doubles && { - step: pre.doubles.step, - points: [ res ].concat(pre.doubles.points.map(obj2point)) - }, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: [ res ].concat(pre.naf.points.map(obj2point)) - } - }; - return res; -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - return this.inf; -}; - -Point.prototype.add = function add(p) { - // O + P = P - if (this.inf) - return p; - - // P + O = P - if (p.inf) - return this; - - // P + P = 2P - if (this.eq(p)) - return this.dbl(); - - // P + (-P) = O - if (this.neg().eq(p)) - return this.curve.point(null, null); - - // P + Q = O - if (this.x.cmp(p.x) === 0) - return this.curve.point(null, null); - - var c = this.y.redSub(p.y); - if (c.cmpn(0) !== 0) - c = c.redMul(this.x.redSub(p.x).redInvm()); - var nx = c.redSqr().redISub(this.x).redISub(p.x); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.dbl = function dbl() { - if (this.inf) - return this; - - // 2P = O - var ys1 = this.y.redAdd(this.y); - if (ys1.cmpn(0) === 0) - return this.curve.point(null, null); - - var a = this.curve.a; - - var x2 = this.x.redSqr(); - var dyinv = ys1.redInvm(); - var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); - - var nx = c.redSqr().redISub(this.x.redAdd(this.x)); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.getX = function getX() { - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - return this.y.fromRed(); -}; - -Point.prototype.mul = function mul(k) { - k = new BN(k, 16); - - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else if (this.curve.endo) - return this.curve._endoWnafMulAdd([ this ], [ k ]); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs, true); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2, true); -}; - -Point.prototype.eq = function eq(p) { - return this === p || - this.inf === p.inf && - (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); -}; - -Point.prototype.neg = function neg(_precompute) { - if (this.inf) - return this; - - var res = this.curve.point(this.x, this.y.redNeg()); - if (_precompute && this.precomputed) { - var pre = this.precomputed; - var negate = function(p) { - return p.neg(); - }; - res.precomputed = { - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(negate) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(negate) - } - }; - } - return res; -}; - -Point.prototype.toJ = function toJ() { - if (this.inf) - return this.curve.jpoint(null, null, null); - - var res = this.curve.jpoint(this.x, this.y, this.curve.one); - return res; -}; - -function JPoint(curve, x, y, z) { - Base.BasePoint.call(this, curve, 'jacobian'); - if (x === null && y === null && z === null) { - this.x = this.curve.one; - this.y = this.curve.one; - this.z = new BN(0); - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = new BN(z, 16); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - - this.zOne = this.z === this.curve.one; -} -inherits(JPoint, Base.BasePoint); - -ShortCurve.prototype.jpoint = function jpoint(x, y, z) { - return new JPoint(this, x, y, z); -}; - -JPoint.prototype.toP = function toP() { - if (this.isInfinity()) - return this.curve.point(null, null); - - var zinv = this.z.redInvm(); - var zinv2 = zinv.redSqr(); - var ax = this.x.redMul(zinv2); - var ay = this.y.redMul(zinv2).redMul(zinv); - - return this.curve.point(ax, ay); -}; - -JPoint.prototype.neg = function neg() { - return this.curve.jpoint(this.x, this.y.redNeg(), this.z); -}; - -JPoint.prototype.add = function add(p) { - // O + P = P - if (this.isInfinity()) - return p; - - // P + O = P - if (p.isInfinity()) - return this; - - // 12M + 4S + 7A - var pz2 = p.z.redSqr(); - var z2 = this.z.redSqr(); - var u1 = this.x.redMul(pz2); - var u2 = p.x.redMul(z2); - var s1 = this.y.redMul(pz2.redMul(p.z)); - var s2 = p.y.redMul(z2.redMul(this.z)); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(p.z).redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mixedAdd = function mixedAdd(p) { - // O + P = P - if (this.isInfinity()) - return p.toJ(); - - // P + O = P - if (p.isInfinity()) - return this; - - // 8M + 3S + 7A - var z2 = this.z.redSqr(); - var u1 = this.x; - var u2 = p.x.redMul(z2); - var s1 = this.y; - var s2 = p.y.redMul(z2).redMul(this.z); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.dblp = function dblp(pow) { - if (pow === 0) - return this; - if (this.isInfinity()) - return this; - if (!pow) - return this.dbl(); - - if (this.curve.zeroA || this.curve.threeA) { - var r = this; - for (var i = 0; i < pow; i++) - r = r.dbl(); - return r; - } - - // 1M + 2S + 1A + N * (4S + 5M + 8A) - // N = 1 => 6M + 6S + 9A - var a = this.curve.a; - var tinv = this.curve.tinv; - - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - // Reuse results - var jyd = jy.redAdd(jy); - for (var i = 0; i < pow; i++) { - var jx2 = jx.redSqr(); - var jyd2 = jyd.redSqr(); - var jyd4 = jyd2.redSqr(); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var t1 = jx.redMul(jyd2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - var dny = c.redMul(t2); - dny = dny.redIAdd(dny).redISub(jyd4); - var nz = jyd.redMul(jz); - if (i + 1 < pow) - jz4 = jz4.redMul(jyd4); - - jx = nx; - jz = nz; - jyd = dny; - } - - return this.curve.jpoint(jx, jyd.redMul(tinv), jz); -}; - -JPoint.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - if (this.curve.zeroA) - return this._zeroDbl(); - else if (this.curve.threeA) - return this._threeDbl(); - else - return this._dbl(); -}; - -JPoint.prototype._zeroDbl = function _zeroDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 14A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s); - - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-dbl-2009-l - // 2M + 5S + 13A - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = B^2 - var c = b.redSqr(); - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); - d = d.redIAdd(d); - // E = 3 * A - var e = a.redAdd(a).redIAdd(a); - // F = E^2 - var f = e.redSqr(); - - // 8 * C - var c8 = c.redIAdd(c); - c8 = c8.redIAdd(c8); - c8 = c8.redIAdd(c8); - - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d); - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8); - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z); - nz = nz.redIAdd(nz); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._threeDbl = function _threeDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 15A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a - var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); - // T = M^2 - 2 * S - var t = m.redSqr().redISub(s).redISub(s); - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2 * Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b - // 3M + 5S - - // delta = Z1^2 - var delta = this.z.redSqr(); - // gamma = Y1^2 - var gamma = this.y.redSqr(); - // beta = X1 * gamma - var beta = this.x.redMul(gamma); - // alpha = 3 * (X1 - delta) * (X1 + delta) - var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); - alpha = alpha.redAdd(alpha).redIAdd(alpha); - // X3 = alpha^2 - 8 * beta - var beta4 = beta.redIAdd(beta); - beta4 = beta4.redIAdd(beta4); - var beta8 = beta4.redAdd(beta4); - nx = alpha.redSqr().redISub(beta8); - // Z3 = (Y1 + Z1)^2 - gamma - delta - nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); - // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 - var ggamma8 = gamma.redSqr(); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._dbl = function _dbl() { - var a = this.curve.a; - - // 4M + 6S + 10A - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - var jx2 = jx.redSqr(); - var jy2 = jy.redSqr(); - - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var jxd4 = jx.redAdd(jx); - jxd4 = jxd4.redIAdd(jxd4); - var t1 = jxd4.redMul(jy2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - - var jyd8 = jy2.redSqr(); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - var ny = c.redMul(t2).redISub(jyd8); - var nz = jy.redAdd(jy).redMul(jz); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.trpl = function trpl() { - if (!this.curve.zeroA) - return this.dbl().add(this); - - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl - // 5M + 10S + ... - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // ZZ = Z1^2 - var zz = this.z.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // M = 3 * XX + a * ZZ2; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // MM = M^2 - var mm = m.redSqr(); - // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM - var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - e = e.redIAdd(e); - e = e.redAdd(e).redIAdd(e); - e = e.redISub(mm); - // EE = E^2 - var ee = e.redSqr(); - // T = 16*YYYY - var t = yyyy.redIAdd(yyyy); - t = t.redIAdd(t); - t = t.redIAdd(t); - t = t.redIAdd(t); - // U = (M + E)^2 - MM - EE - T - var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); - // X3 = 4 * (X1 * EE - 4 * YY * U) - var yyu4 = yy.redMul(u); - yyu4 = yyu4.redIAdd(yyu4); - yyu4 = yyu4.redIAdd(yyu4); - var nx = this.x.redMul(ee).redISub(yyu4); - nx = nx.redIAdd(nx); - nx = nx.redIAdd(nx); - // Y3 = 8 * Y1 * (U * (T - U) - E * EE) - var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - // Z3 = (Z1 + E)^2 - ZZ - EE - var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mul = function mul(k, kbase) { - k = new BN(k, kbase); - - return this.curve._wnafMul(this, k); -}; - -JPoint.prototype.eq = function eq(p) { - if (p.type === 'affine') - return this.eq(p.toJ()); - - if (this === p) - return true; - - // x1 * z2^2 == x2 * z1^2 - var z2 = this.z.redSqr(); - var pz2 = p.z.redSqr(); - if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) - return false; - - // y1 * z2^3 == y2 * z1^3 - var z3 = z2.redMul(this.z); - var pz3 = pz2.redMul(p.z); - return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; -}; - -JPoint.prototype.eqXToP = function eqXToP(x) { - var zs = this.z.redSqr(); - var rx = x.toRed(this.curve.red).redMul(zs); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(zs); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -JPoint.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -JPoint.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/curves.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/curves.js deleted file mode 100644 index 0614c007..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/curves.js +++ /dev/null @@ -1,205 +0,0 @@ -'use strict'; - -var curves = exports; - -var hash = require('hash.js'); -var elliptic = require('../elliptic'); - -var assert = elliptic.utils.assert; - -function PresetCurve(options) { - if (options.type === 'short') - this.curve = new elliptic.curve.short(options); - else if (options.type === 'edwards') - this.curve = new elliptic.curve.edwards(options); - else - this.curve = new elliptic.curve.mont(options); - this.g = this.curve.g; - this.n = this.curve.n; - this.hash = options.hash; - - assert(this.g.validate(), 'Invalid curve'); - assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); -} -curves.PresetCurve = PresetCurve; - -function defineCurve(name, options) { - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - get: function() { - var curve = new PresetCurve(options); - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - value: curve - }); - return curve; - } - }); -} - -defineCurve('p192', { - type: 'short', - prime: 'p192', - p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', - b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', - n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', - hash: hash.sha256, - gRed: false, - g: [ - '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', - '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' - ] -}); - -defineCurve('p224', { - type: 'short', - prime: 'p224', - p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', - b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', - n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', - hash: hash.sha256, - gRed: false, - g: [ - 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', - 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' - ] -}); - -defineCurve('p256', { - type: 'short', - prime: null, - p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', - a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', - b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', - n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', - hash: hash.sha256, - gRed: false, - g: [ - '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' - ] -}); - -defineCurve('p384', { - type: 'short', - prime: null, - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 ffffffff', - a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 fffffffc', - b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + - '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', - n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + - 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', - hash: hash.sha384, - gRed: false, - g: [ - 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + - '5502f25d bf55296c 3a545e38 72760ab7', - '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' - ] -}); - -defineCurve('p521', { - type: 'short', - prime: null, - p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff', - a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff fffffffc', - b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + - '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + - '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', - n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + - 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', - hash: hash.sha512, - gRed: false, - g: [ - '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + - '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + - 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', - '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + - '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + - '3fad0761 353c7086 a272c240 88be9476 9fd16650' - ] -}); - -defineCurve('curve25519', { - type: 'mont', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '76d06', - b: '1', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '9' - ] -}); - -defineCurve('ed25519', { - type: 'edwards', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '-1', - c: '1', - // -121665 * (121666^(-1)) (mod P) - d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', - - // 4/5 - '6666666666666666666666666666666666666666666666666666666666666658' - ] -}); - -var pre; -try { - pre = require('./precomputed/secp256k1'); -} catch (e) { - pre = undefined; -} - -defineCurve('secp256k1', { - type: 'short', - prime: 'k256', - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', - a: '0', - b: '7', - n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', - h: '1', - hash: hash.sha256, - - // Precomputed endomorphism - beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', - lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', - basis: [ - { - a: '3086d221a7d46bcde86c90e49284eb15', - b: '-e4437ed6010e88286f547fa90abfe4c3' - }, - { - a: '114ca50f7a8e2f3f657c1108d9d44cfd8', - b: '3086d221a7d46bcde86c90e49284eb15' - } - ], - - gRed: false, - g: [ - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', - pre - ] -}); diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/index.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/index.js deleted file mode 100644 index 012fa771..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/index.js +++ /dev/null @@ -1,240 +0,0 @@ -'use strict'; - -var BN = require('bn.js'); -var HmacDRBG = require('hmac-drbg'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; - -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EC(options) { - if (!(this instanceof EC)) - return new EC(options); - - // Shortcut `elliptic.ec(curve-name)` - if (typeof options === 'string') { - assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); - - options = elliptic.curves[options]; - } - - // Shortcut for `elliptic.ec(elliptic.curves.curveName)` - if (options instanceof elliptic.curves.PresetCurve) - options = { curve: options }; - - this.curve = options.curve.curve; - this.n = this.curve.n; - this.nh = this.n.ushrn(1); - this.g = this.curve.g; - - // Point on curve - this.g = options.curve.g; - this.g.precompute(options.curve.n.bitLength() + 1); - - // Hash for function for DRBG - this.hash = options.hash || options.curve.hash; -} -module.exports = EC; - -EC.prototype.keyPair = function keyPair(options) { - return new KeyPair(this, options); -}; - -EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { - return KeyPair.fromPrivate(this, priv, enc); -}; - -EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { - return KeyPair.fromPublic(this, pub, enc); -}; - -EC.prototype.genKeyPair = function genKeyPair(options) { - if (!options) - options = {}; - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - pers: options.pers, - persEnc: options.persEnc || 'utf8', - entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), - entropyEnc: options.entropy && options.entropyEnc || 'utf8', - nonce: this.n.toArray() - }); - - var bytes = this.n.byteLength(); - var ns2 = this.n.sub(new BN(2)); - do { - var priv = new BN(drbg.generate(bytes)); - if (priv.cmp(ns2) > 0) - continue; - - priv.iaddn(1); - return this.keyFromPrivate(priv); - } while (true); -}; - -EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { - var delta = msg.byteLength() * 8 - this.n.bitLength(); - if (delta > 0) - msg = msg.ushrn(delta); - if (!truncOnly && msg.cmp(this.n) >= 0) - return msg.sub(this.n); - else - return msg; -}; - -EC.prototype.sign = function sign(msg, key, enc, options) { - if (typeof enc === 'object') { - options = enc; - enc = null; - } - if (!options) - options = {}; - - key = this.keyFromPrivate(key, enc); - msg = this._truncateToN(new BN(msg, 16)); - - // Zero-extend key to provide enough entropy - var bytes = this.n.byteLength(); - var bkey = key.getPrivate().toArray('be', bytes); - - // Zero-extend nonce to have the same byte size as N - var nonce = msg.toArray('be', bytes); - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - entropy: bkey, - nonce: nonce, - pers: options.pers, - persEnc: options.persEnc || 'utf8' - }); - - // Number of bytes to generate - var ns1 = this.n.sub(new BN(1)); - - for (var iter = 0; true; iter++) { - var k = options.k ? - options.k(iter) : - new BN(drbg.generate(this.n.byteLength())); - k = this._truncateToN(k, true); - if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) - continue; - - var kp = this.g.mul(k); - if (kp.isInfinity()) - continue; - - var kpX = kp.getX(); - var r = kpX.umod(this.n); - if (r.cmpn(0) === 0) - continue; - - var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); - s = s.umod(this.n); - if (s.cmpn(0) === 0) - continue; - - var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | - (kpX.cmp(r) !== 0 ? 2 : 0); - - // Use complement of `s`, if it is > `n / 2` - if (options.canonical && s.cmp(this.nh) > 0) { - s = this.n.sub(s); - recoveryParam ^= 1; - } - - return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); - } -}; - -EC.prototype.verify = function verify(msg, signature, key, enc) { - msg = this._truncateToN(new BN(msg, 16)); - key = this.keyFromPublic(key, enc); - signature = new Signature(signature, 'hex'); - - // Perform primitive values validation - var r = signature.r; - var s = signature.s; - if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) - return false; - if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) - return false; - - // Validate signature - var sinv = s.invm(this.n); - var u1 = sinv.mul(msg).umod(this.n); - var u2 = sinv.mul(r).umod(this.n); - - if (!this.curve._maxwellTrick) { - var p = this.g.mulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - return p.getX().umod(this.n).cmp(r) === 0; - } - - // NOTE: Greg Maxwell's trick, inspired by: - // https://git.io/vad3K - - var p = this.g.jmulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - // Compare `p.x` of Jacobian point with `r`, - // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the - // inverse of `p.z^2` - return p.eqXToP(r); -}; - -EC.prototype.recoverPubKey = function(msg, signature, j, enc) { - assert((3 & j) === j, 'The recovery param is more than two bits'); - signature = new Signature(signature, enc); - - var n = this.n; - var e = new BN(msg); - var r = signature.r; - var s = signature.s; - - // A set LSB signifies that the y-coordinate is odd - var isYOdd = j & 1; - var isSecondKey = j >> 1; - if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) - throw new Error('Unable to find sencond key candinate'); - - // 1.1. Let x = r + jn. - if (isSecondKey) - r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); - else - r = this.curve.pointFromX(r, isYOdd); - - var rInv = signature.r.invm(n); - var s1 = n.sub(e).mul(rInv).umod(n); - var s2 = s.mul(rInv).umod(n); - - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - return this.g.mulAdd(s1, r, s2); -}; - -EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { - signature = new Signature(signature, enc); - if (signature.recoveryParam !== null) - return signature.recoveryParam; - - for (var i = 0; i < 4; i++) { - var Qprime; - try { - Qprime = this.recoverPubKey(e, signature, i); - } catch (e) { - continue; - } - - if (Qprime.eq(Q)) - return i; - } - throw new Error('Unable to find valid recovery factor'); -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/key.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/key.js deleted file mode 100644 index e0f44832..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/key.js +++ /dev/null @@ -1,119 +0,0 @@ -'use strict'; - -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; - -function KeyPair(ec, options) { - this.ec = ec; - this.priv = null; - this.pub = null; - - // KeyPair(ec, { priv: ..., pub: ... }) - if (options.priv) - this._importPrivate(options.priv, options.privEnc); - if (options.pub) - this._importPublic(options.pub, options.pubEnc); -} -module.exports = KeyPair; - -KeyPair.fromPublic = function fromPublic(ec, pub, enc) { - if (pub instanceof KeyPair) - return pub; - - return new KeyPair(ec, { - pub: pub, - pubEnc: enc - }); -}; - -KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { - if (priv instanceof KeyPair) - return priv; - - return new KeyPair(ec, { - priv: priv, - privEnc: enc - }); -}; - -KeyPair.prototype.validate = function validate() { - var pub = this.getPublic(); - - if (pub.isInfinity()) - return { result: false, reason: 'Invalid public key' }; - if (!pub.validate()) - return { result: false, reason: 'Public key is not a point' }; - if (!pub.mul(this.ec.curve.n).isInfinity()) - return { result: false, reason: 'Public key * N != O' }; - - return { result: true, reason: null }; -}; - -KeyPair.prototype.getPublic = function getPublic(compact, enc) { - // compact is optional argument - if (typeof compact === 'string') { - enc = compact; - compact = null; - } - - if (!this.pub) - this.pub = this.ec.g.mul(this.priv); - - if (!enc) - return this.pub; - - return this.pub.encode(enc, compact); -}; - -KeyPair.prototype.getPrivate = function getPrivate(enc) { - if (enc === 'hex') - return this.priv.toString(16, 2); - else - return this.priv; -}; - -KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { - this.priv = new BN(key, enc || 16); - - // Ensure that the priv won't be bigger than n, otherwise we may fail - // in fixed multiplication method - this.priv = this.priv.umod(this.ec.curve.n); -}; - -KeyPair.prototype._importPublic = function _importPublic(key, enc) { - if (key.x || key.y) { - // Montgomery points only have an `x` coordinate. - // Weierstrass/Edwards points on the other hand have both `x` and - // `y` coordinates. - if (this.ec.curve.type === 'mont') { - assert(key.x, 'Need x coordinate'); - } else if (this.ec.curve.type === 'short' || - this.ec.curve.type === 'edwards') { - assert(key.x && key.y, 'Need both x and y coordinate'); - } - this.pub = this.ec.curve.point(key.x, key.y); - return; - } - this.pub = this.ec.curve.decodePoint(key, enc); -}; - -// ECDH -KeyPair.prototype.derive = function derive(pub) { - return pub.mul(this.priv).getX(); -}; - -// ECDSA -KeyPair.prototype.sign = function sign(msg, enc, options) { - return this.ec.sign(msg, this, enc, options); -}; - -KeyPair.prototype.verify = function verify(msg, signature) { - return this.ec.verify(msg, signature, this); -}; - -KeyPair.prototype.inspect = function inspect() { - return ''; -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/signature.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/signature.js deleted file mode 100644 index 165b179a..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/ec/signature.js +++ /dev/null @@ -1,135 +0,0 @@ -'use strict'; - -var BN = require('bn.js'); - -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; - -function Signature(options, enc) { - if (options instanceof Signature) - return options; - - if (this._importDER(options, enc)) - return; - - assert(options.r && options.s, 'Signature without r or s'); - this.r = new BN(options.r, 16); - this.s = new BN(options.s, 16); - if (options.recoveryParam === undefined) - this.recoveryParam = null; - else - this.recoveryParam = options.recoveryParam; -} -module.exports = Signature; - -function Position() { - this.place = 0; -} - -function getLength(buf, p) { - var initial = buf[p.place++]; - if (!(initial & 0x80)) { - return initial; - } - var octetLen = initial & 0xf; - var val = 0; - for (var i = 0, off = p.place; i < octetLen; i++, off++) { - val <<= 8; - val |= buf[off]; - } - p.place = off; - return val; -} - -function rmPadding(buf) { - var i = 0; - var len = buf.length - 1; - while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { - i++; - } - if (i === 0) { - return buf; - } - return buf.slice(i); -} - -Signature.prototype._importDER = function _importDER(data, enc) { - data = utils.toArray(data, enc); - var p = new Position(); - if (data[p.place++] !== 0x30) { - return false; - } - var len = getLength(data, p); - if ((len + p.place) !== data.length) { - return false; - } - if (data[p.place++] !== 0x02) { - return false; - } - var rlen = getLength(data, p); - var r = data.slice(p.place, rlen + p.place); - p.place += rlen; - if (data[p.place++] !== 0x02) { - return false; - } - var slen = getLength(data, p); - if (data.length !== slen + p.place) { - return false; - } - var s = data.slice(p.place, slen + p.place); - if (r[0] === 0 && (r[1] & 0x80)) { - r = r.slice(1); - } - if (s[0] === 0 && (s[1] & 0x80)) { - s = s.slice(1); - } - - this.r = new BN(r); - this.s = new BN(s); - this.recoveryParam = null; - - return true; -}; - -function constructLength(arr, len) { - if (len < 0x80) { - arr.push(len); - return; - } - var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); - arr.push(octets | 0x80); - while (--octets) { - arr.push((len >>> (octets << 3)) & 0xff); - } - arr.push(len); -} - -Signature.prototype.toDER = function toDER(enc) { - var r = this.r.toArray(); - var s = this.s.toArray(); - - // Pad values - if (r[0] & 0x80) - r = [ 0 ].concat(r); - // Pad values - if (s[0] & 0x80) - s = [ 0 ].concat(s); - - r = rmPadding(r); - s = rmPadding(s); - - while (!s[0] && !(s[1] & 0x80)) { - s = s.slice(1); - } - var arr = [ 0x02 ]; - constructLength(arr, r.length); - arr = arr.concat(r); - arr.push(0x02); - constructLength(arr, s.length); - var backHalf = arr.concat(s); - var res = [ 0x30 ]; - constructLength(res, backHalf.length); - res = res.concat(backHalf); - return utils.encode(res, enc); -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/index.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/index.js deleted file mode 100644 index b218a160..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/index.js +++ /dev/null @@ -1,118 +0,0 @@ -'use strict'; - -var hash = require('hash.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EDDSA(curve) { - assert(curve === 'ed25519', 'only tested with ed25519 so far'); - - if (!(this instanceof EDDSA)) - return new EDDSA(curve); - - var curve = elliptic.curves[curve].curve; - this.curve = curve; - this.g = curve.g; - this.g.precompute(curve.n.bitLength() + 1); - - this.pointClass = curve.point().constructor; - this.encodingLength = Math.ceil(curve.n.bitLength() / 8); - this.hash = hash.sha512; -} - -module.exports = EDDSA; - -/** -* @param {Array|String} message - message bytes -* @param {Array|String|KeyPair} secret - secret bytes or a keypair -* @returns {Signature} - signature -*/ -EDDSA.prototype.sign = function sign(message, secret) { - message = parseBytes(message); - var key = this.keyFromSecret(secret); - var r = this.hashInt(key.messagePrefix(), message); - var R = this.g.mul(r); - var Rencoded = this.encodePoint(R); - var s_ = this.hashInt(Rencoded, key.pubBytes(), message) - .mul(key.priv()); - var S = r.add(s_).umod(this.curve.n); - return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); -}; - -/** -* @param {Array} message - message bytes -* @param {Array|String|Signature} sig - sig bytes -* @param {Array|String|Point|KeyPair} pub - public key -* @returns {Boolean} - true if public key matches sig of message -*/ -EDDSA.prototype.verify = function verify(message, sig, pub) { - message = parseBytes(message); - sig = this.makeSignature(sig); - var key = this.keyFromPublic(pub); - var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); - var SG = this.g.mul(sig.S()); - var RplusAh = sig.R().add(key.pub().mul(h)); - return RplusAh.eq(SG); -}; - -EDDSA.prototype.hashInt = function hashInt() { - var hash = this.hash(); - for (var i = 0; i < arguments.length; i++) - hash.update(arguments[i]); - return utils.intFromLE(hash.digest()).umod(this.curve.n); -}; - -EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { - return KeyPair.fromPublic(this, pub); -}; - -EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { - return KeyPair.fromSecret(this, secret); -}; - -EDDSA.prototype.makeSignature = function makeSignature(sig) { - if (sig instanceof Signature) - return sig; - return new Signature(this, sig); -}; - -/** -* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 -* -* EDDSA defines methods for encoding and decoding points and integers. These are -* helper convenience methods, that pass along to utility functions implied -* parameters. -* -*/ -EDDSA.prototype.encodePoint = function encodePoint(point) { - var enc = point.getY().toArray('le', this.encodingLength); - enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; - return enc; -}; - -EDDSA.prototype.decodePoint = function decodePoint(bytes) { - bytes = utils.parseBytes(bytes); - - var lastIx = bytes.length - 1; - var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); - var xIsOdd = (bytes[lastIx] & 0x80) !== 0; - - var y = utils.intFromLE(normed); - return this.curve.pointFromY(y, xIsOdd); -}; - -EDDSA.prototype.encodeInt = function encodeInt(num) { - return num.toArray('le', this.encodingLength); -}; - -EDDSA.prototype.decodeInt = function decodeInt(bytes) { - return utils.intFromLE(bytes); -}; - -EDDSA.prototype.isPoint = function isPoint(val) { - return val instanceof this.pointClass; -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/key.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/key.js deleted file mode 100644 index 5d5e1427..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/key.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; - -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var cachedProperty = utils.cachedProperty; - -/** -* @param {EDDSA} eddsa - instance -* @param {Object} params - public/private key parameters -* -* @param {Array} [params.secret] - secret seed bytes -* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) -* @param {Array} [params.pub] - public key point encoded as bytes -* -*/ -function KeyPair(eddsa, params) { - this.eddsa = eddsa; - this._secret = parseBytes(params.secret); - if (eddsa.isPoint(params.pub)) - this._pub = params.pub; - else - this._pubBytes = parseBytes(params.pub); -} - -KeyPair.fromPublic = function fromPublic(eddsa, pub) { - if (pub instanceof KeyPair) - return pub; - return new KeyPair(eddsa, { pub: pub }); -}; - -KeyPair.fromSecret = function fromSecret(eddsa, secret) { - if (secret instanceof KeyPair) - return secret; - return new KeyPair(eddsa, { secret: secret }); -}; - -KeyPair.prototype.secret = function secret() { - return this._secret; -}; - -cachedProperty(KeyPair, 'pubBytes', function pubBytes() { - return this.eddsa.encodePoint(this.pub()); -}); - -cachedProperty(KeyPair, 'pub', function pub() { - if (this._pubBytes) - return this.eddsa.decodePoint(this._pubBytes); - return this.eddsa.g.mul(this.priv()); -}); - -cachedProperty(KeyPair, 'privBytes', function privBytes() { - var eddsa = this.eddsa; - var hash = this.hash(); - var lastIx = eddsa.encodingLength - 1; - - var a = hash.slice(0, eddsa.encodingLength); - a[0] &= 248; - a[lastIx] &= 127; - a[lastIx] |= 64; - - return a; -}); - -cachedProperty(KeyPair, 'priv', function priv() { - return this.eddsa.decodeInt(this.privBytes()); -}); - -cachedProperty(KeyPair, 'hash', function hash() { - return this.eddsa.hash().update(this.secret()).digest(); -}); - -cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { - return this.hash().slice(this.eddsa.encodingLength); -}); - -KeyPair.prototype.sign = function sign(message) { - assert(this._secret, 'KeyPair can only verify'); - return this.eddsa.sign(message, this); -}; - -KeyPair.prototype.verify = function verify(message, sig) { - return this.eddsa.verify(message, sig, this); -}; - -KeyPair.prototype.getSecret = function getSecret(enc) { - assert(this._secret, 'KeyPair is public only'); - return utils.encode(this.secret(), enc); -}; - -KeyPair.prototype.getPublic = function getPublic(enc) { - return utils.encode(this.pubBytes(), enc); -}; - -module.exports = KeyPair; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/signature.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/signature.js deleted file mode 100644 index e944e815..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/eddsa/signature.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; -var cachedProperty = utils.cachedProperty; -var parseBytes = utils.parseBytes; - -/** -* @param {EDDSA} eddsa - eddsa instance -* @param {Array|Object} sig - -* @param {Array|Point} [sig.R] - R point as Point or bytes -* @param {Array|bn} [sig.S] - S scalar as bn or bytes -* @param {Array} [sig.Rencoded] - R point encoded -* @param {Array} [sig.Sencoded] - S scalar encoded -*/ -function Signature(eddsa, sig) { - this.eddsa = eddsa; - - if (typeof sig !== 'object') - sig = parseBytes(sig); - - if (Array.isArray(sig)) { - sig = { - R: sig.slice(0, eddsa.encodingLength), - S: sig.slice(eddsa.encodingLength) - }; - } - - assert(sig.R && sig.S, 'Signature without R or S'); - - if (eddsa.isPoint(sig.R)) - this._R = sig.R; - if (sig.S instanceof BN) - this._S = sig.S; - - this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; - this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; -} - -cachedProperty(Signature, 'S', function S() { - return this.eddsa.decodeInt(this.Sencoded()); -}); - -cachedProperty(Signature, 'R', function R() { - return this.eddsa.decodePoint(this.Rencoded()); -}); - -cachedProperty(Signature, 'Rencoded', function Rencoded() { - return this.eddsa.encodePoint(this.R()); -}); - -cachedProperty(Signature, 'Sencoded', function Sencoded() { - return this.eddsa.encodeInt(this.S()); -}); - -Signature.prototype.toBytes = function toBytes() { - return this.Rencoded().concat(this.Sencoded()); -}; - -Signature.prototype.toHex = function toHex() { - return utils.encode(this.toBytes(), 'hex').toUpperCase(); -}; - -module.exports = Signature; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js deleted file mode 100644 index e4c91e54..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js +++ /dev/null @@ -1,780 +0,0 @@ -module.exports = { - doubles: { - step: 4, - points: [ - [ - 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', - 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' - ], - [ - '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', - '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' - ], - [ - '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', - 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' - ], - [ - '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', - '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' - ], - [ - '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', - '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' - ], - [ - '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', - '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' - ], - [ - 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', - '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' - ], - [ - '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', - 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' - ], - [ - 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', - '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' - ], - [ - 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', - 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' - ], - [ - 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', - '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' - ], - [ - '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', - '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' - ], - [ - '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', - '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' - ], - [ - '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', - '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' - ], - [ - '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', - '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' - ], - [ - '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', - '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' - ], - [ - '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', - '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' - ], - [ - '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', - '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' - ], - [ - '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', - 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' - ], - [ - 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', - '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' - ], - [ - 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', - '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' - ], - [ - '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', - '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' - ], - [ - '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', - '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' - ], - [ - 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', - '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' - ], - [ - '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', - 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' - ], - [ - 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', - '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' - ], - [ - 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', - 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' - ], - [ - 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', - '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' - ], - [ - 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', - 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' - ], - [ - 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', - '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' - ], - [ - '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', - 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' - ], - [ - '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', - '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' - ], - [ - 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', - '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' - ], - [ - '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', - 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' - ], - [ - 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', - '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' - ], - [ - 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', - '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' - ], - [ - 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', - 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' - ], - [ - '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', - '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' - ], - [ - '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', - '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' - ], - [ - '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', - 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' - ], - [ - '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', - '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' - ], - [ - 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', - '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' - ], - [ - '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', - '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' - ], - [ - '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', - 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' - ], - [ - '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', - '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' - ], - [ - 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', - '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' - ], - [ - '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', - 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' - ], - [ - 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', - 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' - ], - [ - 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', - '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' - ], - [ - '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', - 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' - ], - [ - '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', - 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' - ], - [ - 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', - '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' - ], - [ - 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', - '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' - ], - [ - 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', - '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' - ], - [ - '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', - 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' - ], - [ - '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', - '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' - ], - [ - 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', - 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' - ], - [ - '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', - 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' - ], - [ - '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', - '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' - ], - [ - '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', - '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' - ], - [ - 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', - 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' - ], - [ - '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', - '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' - ], - [ - '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', - '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' - ], - [ - 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', - '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' - ], - [ - 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', - 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' - ] - ] - }, - naf: { - wnd: 7, - points: [ - [ - 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', - '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' - ], - [ - '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', - 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' - ], - [ - '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', - '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' - ], - [ - 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', - 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' - ], - [ - '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', - 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' - ], - [ - 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', - 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' - ], - [ - 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', - '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' - ], - [ - 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', - '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' - ], - [ - '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', - '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' - ], - [ - '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', - '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' - ], - [ - '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', - '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' - ], - [ - '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', - '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' - ], - [ - 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', - 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' - ], - [ - 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', - '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' - ], - [ - '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', - 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' - ], - [ - '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', - 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' - ], - [ - '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', - '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' - ], - [ - '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', - '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' - ], - [ - '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', - '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' - ], - [ - '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', - 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' - ], - [ - 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', - 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' - ], - [ - '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', - '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' - ], - [ - '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', - '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' - ], - [ - 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', - 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' - ], - [ - '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', - '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' - ], - [ - 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', - 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' - ], - [ - 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', - 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' - ], - [ - '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', - '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' - ], - [ - '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', - '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' - ], - [ - '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', - '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' - ], - [ - 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', - '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' - ], - [ - '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', - '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' - ], - [ - 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', - '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' - ], - [ - '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', - 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' - ], - [ - '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', - 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' - ], - [ - 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', - 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' - ], - [ - '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', - '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' - ], - [ - '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', - 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' - ], - [ - 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', - 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' - ], - [ - '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', - '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' - ], - [ - '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', - 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' - ], - [ - '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', - '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' - ], - [ - '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', - 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' - ], - [ - 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', - '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' - ], - [ - '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', - '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' - ], - [ - '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', - 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' - ], - [ - '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', - 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' - ], - [ - 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', - 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' - ], - [ - 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', - 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' - ], - [ - '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', - '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' - ], - [ - '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', - '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' - ], - [ - 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', - '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' - ], - [ - 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', - 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' - ], - [ - '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', - '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' - ], - [ - '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', - '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' - ], - [ - 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', - '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' - ], - [ - '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', - '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' - ], - [ - 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', - 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' - ], - [ - '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', - 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' - ], - [ - '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', - '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' - ], - [ - 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', - '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' - ], - [ - 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', - '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' - ], - [ - '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', - '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' - ], - [ - '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', - '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' - ], - [ - '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', - 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' - ], - [ - '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', - 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' - ], - [ - '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', - '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' - ], - [ - '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', - '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' - ], - [ - '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', - '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' - ], - [ - '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', - 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' - ], - [ - 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', - 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' - ], - [ - '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', - 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' - ], - [ - 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', - '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' - ], - [ - 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', - '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' - ], - [ - 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', - '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' - ], - [ - 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', - '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' - ], - [ - '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', - 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' - ], - [ - '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', - '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' - ], - [ - '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', - 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' - ], - [ - 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', - 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' - ], - [ - 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', - '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' - ], - [ - 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', - 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' - ], - [ - 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', - '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' - ], - [ - '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', - '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' - ], - [ - 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', - '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' - ], - [ - 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', - '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' - ], - [ - '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', - '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' - ], - [ - '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', - 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' - ], - [ - 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', - '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' - ], - [ - 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', - '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' - ], - [ - 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', - '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' - ], - [ - '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', - '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' - ], - [ - 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', - 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' - ], - [ - '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', - 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' - ], - [ - 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', - 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' - ], - [ - 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', - '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' - ], - [ - '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', - 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' - ], - [ - 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', - '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' - ], - [ - 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', - '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' - ], - [ - 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', - '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' - ], - [ - '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', - 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' - ], - [ - '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', - 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' - ], - [ - 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', - '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' - ], - [ - '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', - 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' - ], - [ - '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', - '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' - ], - [ - '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', - 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' - ], - [ - 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', - 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' - ], - [ - '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', - 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' - ], - [ - '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', - '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' - ], - [ - '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', - 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' - ], - [ - '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', - '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' - ], - [ - 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', - 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' - ], - [ - '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', - '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' - ], - [ - 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', - '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' - ], - [ - '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', - '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' - ], - [ - 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', - 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' - ], - [ - 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', - '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' - ], - [ - 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', - 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' - ], - [ - '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', - 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' - ], - [ - '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', - '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' - ], - [ - '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', - 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' - ], - [ - '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', - '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' - ], - [ - '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', - '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' - ], - [ - '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', - 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' - ], - [ - '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', - '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' - ], - [ - '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', - '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' - ], - [ - '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', - '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' - ] - ] - } -}; diff --git a/truebit-implementation/node_modules/elliptic/lib/elliptic/utils.js b/truebit-implementation/node_modules/elliptic/lib/elliptic/utils.js deleted file mode 100644 index 98273814..00000000 --- a/truebit-implementation/node_modules/elliptic/lib/elliptic/utils.js +++ /dev/null @@ -1,120 +0,0 @@ -'use strict'; - -var utils = exports; -var BN = require('bn.js'); -var minAssert = require('minimalistic-assert'); -var minUtils = require('minimalistic-crypto-utils'); - -utils.assert = minAssert; -utils.toArray = minUtils.toArray; -utils.zero2 = minUtils.zero2; -utils.toHex = minUtils.toHex; -utils.encode = minUtils.encode; - -// Represent num in a w-NAF form -function getNAF(num, w) { - var naf = []; - var ws = 1 << (w + 1); - var k = num.clone(); - while (k.cmpn(1) >= 0) { - var z; - if (k.isOdd()) { - var mod = k.andln(ws - 1); - if (mod > (ws >> 1) - 1) - z = (ws >> 1) - mod; - else - z = mod; - k.isubn(z); - } else { - z = 0; - } - naf.push(z); - - // Optimization, shift by word if possible - var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; - for (var i = 1; i < shift; i++) - naf.push(0); - k.iushrn(shift); - } - - return naf; -} -utils.getNAF = getNAF; - -// Represent k1, k2 in a Joint Sparse Form -function getJSF(k1, k2) { - var jsf = [ - [], - [] - ]; - - k1 = k1.clone(); - k2 = k2.clone(); - var d1 = 0; - var d2 = 0; - while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { - - // First phase - var m14 = (k1.andln(3) + d1) & 3; - var m24 = (k2.andln(3) + d2) & 3; - if (m14 === 3) - m14 = -1; - if (m24 === 3) - m24 = -1; - var u1; - if ((m14 & 1) === 0) { - u1 = 0; - } else { - var m8 = (k1.andln(7) + d1) & 7; - if ((m8 === 3 || m8 === 5) && m24 === 2) - u1 = -m14; - else - u1 = m14; - } - jsf[0].push(u1); - - var u2; - if ((m24 & 1) === 0) { - u2 = 0; - } else { - var m8 = (k2.andln(7) + d2) & 7; - if ((m8 === 3 || m8 === 5) && m14 === 2) - u2 = -m24; - else - u2 = m24; - } - jsf[1].push(u2); - - // Second phase - if (2 * d1 === u1 + 1) - d1 = 1 - d1; - if (2 * d2 === u2 + 1) - d2 = 1 - d2; - k1.iushrn(1); - k2.iushrn(1); - } - - return jsf; -} -utils.getJSF = getJSF; - -function cachedProperty(obj, name, computer) { - var key = '_' + name; - obj.prototype[name] = function cachedProperty() { - return this[key] !== undefined ? this[key] : - this[key] = computer.call(this); - }; -} -utils.cachedProperty = cachedProperty; - -function parseBytes(bytes) { - return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : - bytes; -} -utils.parseBytes = parseBytes; - -function intFromLE(bytes) { - return new BN(bytes, 'hex', 'le'); -} -utils.intFromLE = intFromLE; - diff --git a/truebit-implementation/node_modules/elliptic/package.json b/truebit-implementation/node_modules/elliptic/package.json deleted file mode 100644 index cdd2988c..00000000 --- a/truebit-implementation/node_modules/elliptic/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_from": "elliptic@^6.4.0", - "_id": "elliptic@6.4.1", - "_inBundle": false, - "_integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "_location": "/elliptic", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "elliptic@^6.4.0", - "name": "elliptic", - "escapedName": "elliptic", - "rawSpec": "^6.4.0", - "saveSpec": null, - "fetchSpec": "^6.4.0" - }, - "_requiredBy": [ - "/browserify-sign", - "/create-ecdh", - "/eth-lib", - "/web3-eth-accounts/eth-lib" - ], - "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "_shasum": "c2d0b7776911b86722c632c3c06c60f2f819939a", - "_spec": "elliptic@^6.4.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/eth-lib", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/elliptic/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "deprecated": false, - "description": "EC cryptography", - "devDependencies": { - "brfs": "^1.4.3", - "coveralls": "^2.11.3", - "grunt": "^0.4.5", - "grunt-browserify": "^5.0.0", - "grunt-cli": "^1.2.0", - "grunt-contrib-connect": "^1.0.0", - "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-uglify": "^1.0.1", - "grunt-mocha-istanbul": "^3.0.1", - "grunt-saucelabs": "^8.6.2", - "istanbul": "^0.4.2", - "jscs": "^2.9.0", - "jshint": "^2.6.0", - "mocha": "^2.1.0" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/indutny/elliptic", - "keywords": [ - "EC", - "Elliptic", - "curve", - "Cryptography" - ], - "license": "MIT", - "main": "lib/elliptic.js", - "name": "elliptic", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/elliptic.git" - }, - "scripts": { - "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", - "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", - "lint": "npm run jscs && npm run jshint", - "test": "npm run lint && npm run unit", - "unit": "istanbul test _mocha --reporter=spec test/index.js", - "version": "grunt dist && git add dist/" - }, - "version": "6.4.1" -} diff --git a/truebit-implementation/node_modules/encodeurl/HISTORY.md b/truebit-implementation/node_modules/encodeurl/HISTORY.md deleted file mode 100644 index 41313b2b..00000000 --- a/truebit-implementation/node_modules/encodeurl/HISTORY.md +++ /dev/null @@ -1,14 +0,0 @@ -1.0.2 / 2018-01-21 -================== - - * Fix encoding `%` as last character - -1.0.1 / 2016-06-09 -================== - - * Fix encoding unpaired surrogates at start/end of string - -1.0.0 / 2016-06-08 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/encodeurl/LICENSE b/truebit-implementation/node_modules/encodeurl/LICENSE deleted file mode 100644 index 8812229b..00000000 --- a/truebit-implementation/node_modules/encodeurl/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/encodeurl/README.md b/truebit-implementation/node_modules/encodeurl/README.md deleted file mode 100644 index 127c5a0d..00000000 --- a/truebit-implementation/node_modules/encodeurl/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# encodeurl - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Encode a URL to a percent-encoded form, excluding already-encoded sequences - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install encodeurl -``` - -## API - -```js -var encodeUrl = require('encodeurl') -``` - -### encodeUrl(url) - -Encode a URL to a percent-encoded form, excluding already-encoded sequences. - -This function will take an already-encoded URL and encode all the non-URL -code points (as UTF-8 byte sequences). This function will not encode the -"%" character unless it is not part of a valid sequence (`%20` will be -left as-is, but `%foo` will be encoded as `%25foo`). - -This encode is meant to be "safe" and does not throw errors. It will try as -hard as it can to properly encode the given URL, including replacing any raw, -unpaired surrogate pairs with the Unicode replacement character prior to -encoding. - -This function is _similar_ to the intrinsic function `encodeURI`, except it -will not encode the `%` character if that is part of a valid sequence, will -not encode `[` and `]` (for IPv6 hostnames) and will replace raw, unpaired -surrogate pairs with the Unicode replacement character (instead of throwing). - -## Examples - -### Encode a URL containing user-controled data - -```js -var encodeUrl = require('encodeurl') -var escapeHtml = require('escape-html') - -http.createServer(function onRequest (req, res) { - // get encoded form of inbound url - var url = encodeUrl(req.url) - - // create html message - var body = '

Location ' + escapeHtml(url) + ' not found

' - - // send a 404 - res.statusCode = 404 - res.setHeader('Content-Type', 'text/html; charset=UTF-8') - res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) - res.end(body, 'utf-8') -}) -``` - -### Encode a URL for use in a header field - -```js -var encodeUrl = require('encodeurl') -var escapeHtml = require('escape-html') -var url = require('url') - -http.createServer(function onRequest (req, res) { - // parse inbound url - var href = url.parse(req) - - // set new host for redirect - href.host = 'localhost' - href.protocol = 'https:' - href.slashes = true - - // create location header - var location = encodeUrl(url.format(href)) - - // create html message - var body = '

Redirecting to new site: ' + escapeHtml(location) + '

' - - // send a 301 - res.statusCode = 301 - res.setHeader('Content-Type', 'text/html; charset=UTF-8') - res.setHeader('Content-Length', String(Buffer.byteLength(body, 'utf-8'))) - res.setHeader('Location', location) - res.end(body, 'utf-8') -}) -``` - -## Testing - -```sh -$ npm test -$ npm run lint -``` - -## References - -- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax][rfc-3986] -- [WHATWG URL Living Standard][whatwg-url] - -[rfc-3986]: https://tools.ietf.org/html/rfc3986 -[whatwg-url]: https://url.spec.whatwg.org/ - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/encodeurl.svg -[npm-url]: https://npmjs.org/package/encodeurl -[node-version-image]: https://img.shields.io/node/v/encodeurl.svg -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/pillarjs/encodeurl.svg -[travis-url]: https://travis-ci.org/pillarjs/encodeurl -[coveralls-image]: https://img.shields.io/coveralls/pillarjs/encodeurl.svg -[coveralls-url]: https://coveralls.io/r/pillarjs/encodeurl?branch=master -[downloads-image]: https://img.shields.io/npm/dm/encodeurl.svg -[downloads-url]: https://npmjs.org/package/encodeurl diff --git a/truebit-implementation/node_modules/encodeurl/index.js b/truebit-implementation/node_modules/encodeurl/index.js deleted file mode 100644 index fc4906c6..00000000 --- a/truebit-implementation/node_modules/encodeurl/index.js +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * encodeurl - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = encodeUrl - -/** - * RegExp to match non-URL code points, *after* encoding (i.e. not including "%") - * and including invalid escape sequences. - * @private - */ - -var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g - -/** - * RegExp to match unmatched surrogate pair. - * @private - */ - -var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g - -/** - * String to replace unmatched surrogate pair with. - * @private - */ - -var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2' - -/** - * Encode a URL to a percent-encoded form, excluding already-encoded sequences. - * - * This function will take an already-encoded URL and encode all the non-URL - * code points. This function will not encode the "%" character unless it is - * not part of a valid sequence (`%20` will be left as-is, but `%foo` will - * be encoded as `%25foo`). - * - * This encode is meant to be "safe" and does not throw errors. It will try as - * hard as it can to properly encode the given URL, including replacing any raw, - * unpaired surrogate pairs with the Unicode replacement character prior to - * encoding. - * - * @param {string} url - * @return {string} - * @public - */ - -function encodeUrl (url) { - return String(url) - .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE) - .replace(ENCODE_CHARS_REGEXP, encodeURI) -} diff --git a/truebit-implementation/node_modules/encodeurl/package.json b/truebit-implementation/node_modules/encodeurl/package.json deleted file mode 100644 index 9174d90d..00000000 --- a/truebit-implementation/node_modules/encodeurl/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "encodeurl@~1.0.2", - "_id": "encodeurl@1.0.2", - "_inBundle": false, - "_integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "_location": "/encodeurl", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "encodeurl@~1.0.2", - "name": "encodeurl", - "escapedName": "encodeurl", - "rawSpec": "~1.0.2", - "saveSpec": null, - "fetchSpec": "~1.0.2" - }, - "_requiredBy": [ - "/express", - "/finalhandler", - "/send", - "/serve-static" - ], - "_resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "_shasum": "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59", - "_spec": "encodeurl@~1.0.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "bugs": { - "url": "https://github.com/pillarjs/encodeurl/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], - "deprecated": false, - "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences", - "devDependencies": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.8.0", - "eslint-plugin-node": "5.2.1", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "2.5.3" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "homepage": "https://github.com/pillarjs/encodeurl#readme", - "keywords": [ - "encode", - "encodeurl", - "url" - ], - "license": "MIT", - "name": "encodeurl", - "repository": { - "type": "git", - "url": "git+https://github.com/pillarjs/encodeurl.git" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.0.2" -} diff --git a/truebit-implementation/node_modules/end-of-stream/LICENSE b/truebit-implementation/node_modules/end-of-stream/LICENSE deleted file mode 100644 index 757562ec..00000000 --- a/truebit-implementation/node_modules/end-of-stream/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/end-of-stream/README.md b/truebit-implementation/node_modules/end-of-stream/README.md deleted file mode 100644 index f2560c93..00000000 --- a/truebit-implementation/node_modules/end-of-stream/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# end-of-stream - -A node module that calls a callback when a readable/writable/duplex stream has completed or failed. - - npm install end-of-stream - -## Usage - -Simply pass a stream and a callback to the `eos`. -Both legacy streams, streams2 and stream3 are supported. - -``` js -var eos = require('end-of-stream'); - -eos(readableStream, function(err) { - // this will be set to the stream instance - if (err) return console.log('stream had an error or closed early'); - console.log('stream has ended', this === readableStream); -}); - -eos(writableStream, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has finished', this === writableStream); -}); - -eos(duplexStream, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has ended and finished', this === duplexStream); -}); - -eos(duplexStream, {readable:false}, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has finished but might still be readable'); -}); - -eos(duplexStream, {writable:false}, function(err) { - if (err) return console.log('stream had an error or closed early'); - console.log('stream has ended but might still be writable'); -}); - -eos(readableStream, {error:false}, function(err) { - // do not treat emit('error', err) as a end-of-stream -}); -``` - -## License - -MIT - -## Related - -`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/truebit-implementation/node_modules/end-of-stream/index.js b/truebit-implementation/node_modules/end-of-stream/index.js deleted file mode 100644 index be426c22..00000000 --- a/truebit-implementation/node_modules/end-of-stream/index.js +++ /dev/null @@ -1,87 +0,0 @@ -var once = require('once'); - -var noop = function() {}; - -var isRequest = function(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -}; - -var isChildProcess = function(stream) { - return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 -}; - -var eos = function(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - - callback = once(callback || noop); - - var ws = stream._writableState; - var rs = stream._readableState; - var readable = opts.readable || (opts.readable !== false && stream.readable); - var writable = opts.writable || (opts.writable !== false && stream.writable); - - var onlegacyfinish = function() { - if (!stream.writable) onfinish(); - }; - - var onfinish = function() { - writable = false; - if (!readable) callback.call(stream); - }; - - var onend = function() { - readable = false; - if (!writable) callback.call(stream); - }; - - var onexit = function(exitCode) { - callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); - }; - - var onerror = function(err) { - callback.call(stream, err); - }; - - var onclose = function() { - if (readable && !(rs && rs.ended)) return callback.call(stream, new Error('premature close')); - if (writable && !(ws && ws.ended)) return callback.call(stream, new Error('premature close')); - }; - - var onrequest = function() { - stream.req.on('finish', onfinish); - }; - - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest(); - else stream.on('request', onrequest); - } else if (writable && !ws) { // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - - if (isChildProcess(stream)) stream.on('exit', onexit); - - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - - return function() { - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('exit', onexit); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -}; - -module.exports = eos; diff --git a/truebit-implementation/node_modules/end-of-stream/package.json b/truebit-implementation/node_modules/end-of-stream/package.json deleted file mode 100644 index e8ff0efe..00000000 --- a/truebit-implementation/node_modules/end-of-stream/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "end-of-stream@^1.0.0", - "_id": "end-of-stream@1.4.1", - "_inBundle": false, - "_integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "_location": "/end-of-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "end-of-stream@^1.0.0", - "name": "end-of-stream", - "escapedName": "end-of-stream", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/tar-stream" - ], - "_resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "_shasum": "ed29634d19baba463b6ce6b80a37213eab71ec43", - "_spec": "end-of-stream@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar-stream", - "author": { - "name": "Mathias Buus", - "email": "mathiasbuus@gmail.com" - }, - "bugs": { - "url": "https://github.com/mafintosh/end-of-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "once": "^1.4.0" - }, - "deprecated": false, - "description": "Call a callback when a readable/writable/duplex stream has completed or failed.", - "files": [ - "index.js" - ], - "homepage": "https://github.com/mafintosh/end-of-stream", - "keywords": [ - "stream", - "streams", - "callback", - "finish", - "close", - "end", - "wait" - ], - "license": "MIT", - "main": "index.js", - "name": "end-of-stream", - "repository": { - "type": "git", - "url": "git://github.com/mafintosh/end-of-stream.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.4.1" -} diff --git a/truebit-implementation/node_modules/escape-html/LICENSE b/truebit-implementation/node_modules/escape-html/LICENSE deleted file mode 100644 index 2e70de97..00000000 --- a/truebit-implementation/node_modules/escape-html/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2013 TJ Holowaychuk -Copyright (c) 2015 Andreas Lubbe -Copyright (c) 2015 Tiancheng "Timothy" Gu - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/escape-html/Readme.md b/truebit-implementation/node_modules/escape-html/Readme.md deleted file mode 100644 index 653d9eaa..00000000 --- a/truebit-implementation/node_modules/escape-html/Readme.md +++ /dev/null @@ -1,43 +0,0 @@ - -# escape-html - - Escape string for use in HTML - -## Example - -```js -var escape = require('escape-html'); -var html = escape('foo & bar'); -// -> foo & bar -``` - -## Benchmark - -``` -$ npm run-script bench - -> escape-html@1.0.3 bench nodejs-escape-html -> node benchmark/index.js - - - http_parser@1.0 - node@0.10.33 - v8@3.14.5.9 - ares@1.9.0-DEV - uv@0.10.29 - zlib@1.2.3 - modules@11 - openssl@1.0.1j - - 1 test completed. - 2 tests completed. - 3 tests completed. - - no special characters x 19,435,271 ops/sec ±0.85% (187 runs sampled) - single special character x 6,132,421 ops/sec ±0.67% (194 runs sampled) - many special characters x 3,175,826 ops/sec ±0.65% (193 runs sampled) -``` - -## License - - MIT \ No newline at end of file diff --git a/truebit-implementation/node_modules/escape-html/index.js b/truebit-implementation/node_modules/escape-html/index.js deleted file mode 100644 index bf9e226f..00000000 --- a/truebit-implementation/node_modules/escape-html/index.js +++ /dev/null @@ -1,78 +0,0 @@ -/*! - * escape-html - * Copyright(c) 2012-2013 TJ Holowaychuk - * Copyright(c) 2015 Andreas Lubbe - * Copyright(c) 2015 Tiancheng "Timothy" Gu - * MIT Licensed - */ - -'use strict'; - -/** - * Module variables. - * @private - */ - -var matchHtmlRegExp = /["'&<>]/; - -/** - * Module exports. - * @public - */ - -module.exports = escapeHtml; - -/** - * Escape special characters in the given string of html. - * - * @param {string} string The string to escape for inserting into HTML - * @return {string} - * @public - */ - -function escapeHtml(string) { - var str = '' + string; - var match = matchHtmlRegExp.exec(str); - - if (!match) { - return str; - } - - var escape; - var html = ''; - var index = 0; - var lastIndex = 0; - - for (index = match.index; index < str.length; index++) { - switch (str.charCodeAt(index)) { - case 34: // " - escape = '"'; - break; - case 38: // & - escape = '&'; - break; - case 39: // ' - escape = '''; - break; - case 60: // < - escape = '<'; - break; - case 62: // > - escape = '>'; - break; - default: - continue; - } - - if (lastIndex !== index) { - html += str.substring(lastIndex, index); - } - - lastIndex = index + 1; - html += escape; - } - - return lastIndex !== index - ? html + str.substring(lastIndex, index) - : html; -} diff --git a/truebit-implementation/node_modules/escape-html/package.json b/truebit-implementation/node_modules/escape-html/package.json deleted file mode 100644 index e1b89787..00000000 --- a/truebit-implementation/node_modules/escape-html/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "escape-html@~1.0.3", - "_id": "escape-html@1.0.3", - "_inBundle": false, - "_integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "_location": "/escape-html", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "escape-html@~1.0.3", - "name": "escape-html", - "escapedName": "escape-html", - "rawSpec": "~1.0.3", - "saveSpec": null, - "fetchSpec": "~1.0.3" - }, - "_requiredBy": [ - "/express", - "/finalhandler", - "/send", - "/serve-static" - ], - "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "_shasum": "0258eae4d3d0c0974de1c169188ef0051d1d1988", - "_spec": "escape-html@~1.0.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "bugs": { - "url": "https://github.com/component/escape-html/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Escape string for use in HTML", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "1.0.0" - }, - "files": [ - "LICENSE", - "Readme.md", - "index.js" - ], - "homepage": "https://github.com/component/escape-html#readme", - "keywords": [ - "escape", - "html", - "utility" - ], - "license": "MIT", - "name": "escape-html", - "repository": { - "type": "git", - "url": "git+https://github.com/component/escape-html.git" - }, - "scripts": { - "bench": "node benchmark/index.js" - }, - "version": "1.0.3" -} diff --git a/truebit-implementation/node_modules/etag/HISTORY.md b/truebit-implementation/node_modules/etag/HISTORY.md deleted file mode 100644 index 222b293d..00000000 --- a/truebit-implementation/node_modules/etag/HISTORY.md +++ /dev/null @@ -1,83 +0,0 @@ -1.8.1 / 2017-09-12 -================== - - * perf: replace regular expression with substring - -1.8.0 / 2017-02-18 -================== - - * Use SHA1 instead of MD5 for ETag hashing - - Improves performance for larger entities - - Works with FIPS 140-2 OpenSSL configuration - -1.7.0 / 2015-06-08 -================== - - * Always include entity length in ETags for hash length extensions - * Generate non-Stats ETags using MD5 only (no longer CRC32) - * Improve stat performance by removing hashing - * Remove base64 padding in ETags to shorten - * Use MD5 instead of MD4 in weak ETags over 1KB - -1.6.0 / 2015-05-10 -================== - - * Improve support for JXcore - * Remove requirement of `atime` in the stats object - * Support "fake" stats objects in environments without `fs` - -1.5.1 / 2014-11-19 -================== - - * deps: crc@3.2.1 - - Minor fixes - -1.5.0 / 2014-10-14 -================== - - * Improve string performance - * Slightly improve speed for weak ETags over 1KB - -1.4.0 / 2014-09-21 -================== - - * Support "fake" stats objects - * Support Node.js 0.6 - -1.3.1 / 2014-09-14 -================== - - * Use the (new and improved) `crc` for crc32 - -1.3.0 / 2014-08-29 -================== - - * Default strings to strong ETags - * Improve speed for weak ETags over 1KB - -1.2.1 / 2014-08-29 -================== - - * Use the (much faster) `buffer-crc32` for crc32 - -1.2.0 / 2014-08-24 -================== - - * Add support for file stat objects - -1.1.0 / 2014-08-24 -================== - - * Add fast-path for empty entity - * Add weak ETag generation - * Shrink size of generated ETags - -1.0.1 / 2014-08-24 -================== - - * Fix behavior of string containing Unicode - -1.0.0 / 2014-05-18 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/etag/LICENSE b/truebit-implementation/node_modules/etag/LICENSE deleted file mode 100644 index cab251c2..00000000 --- a/truebit-implementation/node_modules/etag/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/etag/README.md b/truebit-implementation/node_modules/etag/README.md deleted file mode 100644 index 09c2169e..00000000 --- a/truebit-implementation/node_modules/etag/README.md +++ /dev/null @@ -1,159 +0,0 @@ -# etag - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Create simple HTTP ETags - -This module generates HTTP ETags (as defined in RFC 7232) for use in -HTTP responses. - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install etag -``` - -## API - - - -```js -var etag = require('etag') -``` - -### etag(entity, [options]) - -Generate a strong ETag for the given entity. This should be the complete -body of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By -default, a strong ETag is generated except for `fs.Stats`, which will -generate a weak ETag (this can be overwritten by `options.weak`). - - - -```js -res.setHeader('ETag', etag(body)) -``` - -#### Options - -`etag` accepts these properties in the options object. - -##### weak - -Specifies if the generated ETag will include the weak validator mark (that -is, the leading `W/`). The actual entity tag is the same. The default value -is `false`, unless the `entity` is `fs.Stats`, in which case it is `true`. - -## Testing - -```sh -$ npm test -``` - -## Benchmark - -```bash -$ npm run-script bench - -> etag@1.8.1 bench nodejs-etag -> node benchmark/index.js - - http_parser@2.7.0 - node@6.11.1 - v8@5.1.281.103 - uv@1.11.0 - zlib@1.2.11 - ares@1.10.1-DEV - icu@58.2 - modules@48 - openssl@1.0.2k - -> node benchmark/body0-100b.js - - 100B body - - 4 tests completed. - - buffer - strong x 258,647 ops/sec ±1.07% (180 runs sampled) - buffer - weak x 263,812 ops/sec ±0.61% (184 runs sampled) - string - strong x 259,955 ops/sec ±1.19% (185 runs sampled) - string - weak x 264,356 ops/sec ±1.09% (184 runs sampled) - -> node benchmark/body1-1kb.js - - 1KB body - - 4 tests completed. - - buffer - strong x 189,018 ops/sec ±1.12% (182 runs sampled) - buffer - weak x 190,586 ops/sec ±0.81% (186 runs sampled) - string - strong x 144,272 ops/sec ±0.96% (188 runs sampled) - string - weak x 145,380 ops/sec ±1.43% (187 runs sampled) - -> node benchmark/body2-5kb.js - - 5KB body - - 4 tests completed. - - buffer - strong x 92,435 ops/sec ±0.42% (188 runs sampled) - buffer - weak x 92,373 ops/sec ±0.58% (189 runs sampled) - string - strong x 48,850 ops/sec ±0.56% (186 runs sampled) - string - weak x 49,380 ops/sec ±0.56% (190 runs sampled) - -> node benchmark/body3-10kb.js - - 10KB body - - 4 tests completed. - - buffer - strong x 55,989 ops/sec ±0.93% (188 runs sampled) - buffer - weak x 56,148 ops/sec ±0.55% (190 runs sampled) - string - strong x 27,345 ops/sec ±0.43% (188 runs sampled) - string - weak x 27,496 ops/sec ±0.45% (190 runs sampled) - -> node benchmark/body4-100kb.js - - 100KB body - - 4 tests completed. - - buffer - strong x 7,083 ops/sec ±0.22% (190 runs sampled) - buffer - weak x 7,115 ops/sec ±0.26% (191 runs sampled) - string - strong x 3,068 ops/sec ±0.34% (190 runs sampled) - string - weak x 3,096 ops/sec ±0.35% (190 runs sampled) - -> node benchmark/stats.js - - stat - - 4 tests completed. - - real - strong x 871,642 ops/sec ±0.34% (189 runs sampled) - real - weak x 867,613 ops/sec ±0.39% (190 runs sampled) - fake - strong x 401,051 ops/sec ±0.40% (189 runs sampled) - fake - weak x 400,100 ops/sec ±0.47% (188 runs sampled) -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/etag.svg -[npm-url]: https://npmjs.org/package/etag -[node-version-image]: https://img.shields.io/node/v/etag.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/etag/master.svg -[travis-url]: https://travis-ci.org/jshttp/etag -[coveralls-image]: https://img.shields.io/coveralls/jshttp/etag/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/etag?branch=master -[downloads-image]: https://img.shields.io/npm/dm/etag.svg -[downloads-url]: https://npmjs.org/package/etag diff --git a/truebit-implementation/node_modules/etag/index.js b/truebit-implementation/node_modules/etag/index.js deleted file mode 100644 index 2a585c91..00000000 --- a/truebit-implementation/node_modules/etag/index.js +++ /dev/null @@ -1,131 +0,0 @@ -/*! - * etag - * Copyright(c) 2014-2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = etag - -/** - * Module dependencies. - * @private - */ - -var crypto = require('crypto') -var Stats = require('fs').Stats - -/** - * Module variables. - * @private - */ - -var toString = Object.prototype.toString - -/** - * Generate an entity tag. - * - * @param {Buffer|string} entity - * @return {string} - * @private - */ - -function entitytag (entity) { - if (entity.length === 0) { - // fast-path empty - return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"' - } - - // compute hash of entity - var hash = crypto - .createHash('sha1') - .update(entity, 'utf8') - .digest('base64') - .substring(0, 27) - - // compute length of entity - var len = typeof entity === 'string' - ? Buffer.byteLength(entity, 'utf8') - : entity.length - - return '"' + len.toString(16) + '-' + hash + '"' -} - -/** - * Create a simple ETag. - * - * @param {string|Buffer|Stats} entity - * @param {object} [options] - * @param {boolean} [options.weak] - * @return {String} - * @public - */ - -function etag (entity, options) { - if (entity == null) { - throw new TypeError('argument entity is required') - } - - // support fs.Stats object - var isStats = isstats(entity) - var weak = options && typeof options.weak === 'boolean' - ? options.weak - : isStats - - // validate argument - if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) { - throw new TypeError('argument entity must be string, Buffer, or fs.Stats') - } - - // generate entity tag - var tag = isStats - ? stattag(entity) - : entitytag(entity) - - return weak - ? 'W/' + tag - : tag -} - -/** - * Determine if object is a Stats object. - * - * @param {object} obj - * @return {boolean} - * @api private - */ - -function isstats (obj) { - // genuine fs.Stats - if (typeof Stats === 'function' && obj instanceof Stats) { - return true - } - - // quack quack - return obj && typeof obj === 'object' && - 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' && - 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' && - 'ino' in obj && typeof obj.ino === 'number' && - 'size' in obj && typeof obj.size === 'number' -} - -/** - * Generate a tag for a stat. - * - * @param {object} stat - * @return {string} - * @private - */ - -function stattag (stat) { - var mtime = stat.mtime.getTime().toString(16) - var size = stat.size.toString(16) - - return '"' + size + '-' + mtime + '"' -} diff --git a/truebit-implementation/node_modules/etag/package.json b/truebit-implementation/node_modules/etag/package.json deleted file mode 100644 index 46161ab4..00000000 --- a/truebit-implementation/node_modules/etag/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_from": "etag@~1.8.1", - "_id": "etag@1.8.1", - "_inBundle": false, - "_integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "_location": "/etag", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "etag@~1.8.1", - "name": "etag", - "escapedName": "etag", - "rawSpec": "~1.8.1", - "saveSpec": null, - "fetchSpec": "~1.8.1" - }, - "_requiredBy": [ - "/express", - "/send" - ], - "_resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "_shasum": "41ae2eeb65efa62268aebfea83ac7d79299b0887", - "_spec": "etag@~1.8.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "bugs": { - "url": "https://github.com/jshttp/etag/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "David Björklund", - "email": "david.bjorklund@gmail.com" - } - ], - "deprecated": false, - "description": "Create simple HTTP ETags", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "2.1.4", - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.7.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "5.1.1", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5", - "safe-buffer": "5.1.1", - "seedrandom": "2.4.3" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/etag#readme", - "keywords": [ - "etag", - "http", - "res" - ], - "license": "MIT", - "name": "etag", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/etag.git" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.8.1" -} diff --git a/truebit-implementation/node_modules/eth-contract-class/.eslintrc b/truebit-implementation/node_modules/eth-contract-class/.eslintrc deleted file mode 100644 index ab7ddee9..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/.eslintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "airbnb", - "rules": { - "jsx-a11y/href-no-hash": "off", - "jsx-a11y/anchor-is-valid": ["warn", { "aspects": ["invalidHref"] }] - } -} diff --git a/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/built.bin b/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/built.bin deleted file mode 100644 index e69de29b..00000000 diff --git a/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/cache.properties b/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index b5d3f5bb..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Thu Oct 12 07:56:22 PDT 2017 -gradle.version=3.4.1 diff --git a/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/cache.properties.lock b/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/cache.properties.lock deleted file mode 100644 index 40fdece9..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/.gradle/buildOutputCleanup/cache.properties.lock +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-contract-class/.npmignore b/truebit-implementation/node_modules/eth-contract-class/.npmignore deleted file mode 100644 index b467c377..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -src -.babelrc diff --git a/truebit-implementation/node_modules/eth-contract-class/README.md b/truebit-implementation/node_modules/eth-contract-class/README.md deleted file mode 100644 index 8d6bbf89..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/README.md +++ /dev/null @@ -1 +0,0 @@ -# eth-class diff --git a/truebit-implementation/node_modules/eth-contract-class/lib/generateClass.js b/truebit-implementation/node_modules/eth-contract-class/lib/generateClass.js deleted file mode 100644 index 9f82c2d8..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/lib/generateClass.js +++ /dev/null @@ -1,177 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _web3CorePromievent = require('web3-core-promievent'); - -var _web3CorePromievent2 = _interopRequireDefault(_web3CorePromievent); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function checkWeb3(web3) { - if (typeof web3.version !== 'string' || !web3.version.startsWith('1.')) { - throw new Error('web3 version 1.x is required'); - } -} - -var validOptKeys = ['from', 'to', 'gasPrice', 'gas', 'value', 'data', 'nonce']; -var filterOpts = function filterOpts(opts) { - var validOpts = {}; - - validOptKeys.forEach(function (key) { - validOpts[key] = opts[key]; - }); - - return validOpts; -}; - -var estimateGas = function estimateGas(web3, method, opts) { - if (opts.$noEstimateGas) return Promise.resolve(4700000); - if (opts.$gas || opts.gas) return Promise.resolve(opts.$gas || opts.gas); - - return method.estimateGas(filterOpts(opts)) - // eslint-disable-next-line no-confusing-arrow - .then(function (gas) { - return opts.$extraGas ? gas + opts.$extraGas : Math.floor(gas * 1.1); - }); -}; - -// if constant method, executes a call, otherwise, estimates gas and executes send -var execute = function execute(web3, txObject, opts, cb) { - var _method = txObject._method; - - - if (_method.constant) return txObject.call(filterOpts(opts)); - - // we need to create a new PromiEvent here b/c estimateGas returns a regular promise - // however on a 'send' we want to return a PromiEvent - var defer = new _web3CorePromievent2.default(); - var relayEvent = function relayEvent(event) { - return function () { - var _defer$eventEmitter; - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return (_defer$eventEmitter = defer.eventEmitter).emit.apply(_defer$eventEmitter, [event].concat(args)); - }; - }; - - estimateGas(web3, txObject, opts).then(function (gas) { - // 21272 is min gas to work in testrpc - var filteredOpts = Object.assign({}, filterOpts(opts), { gas: gas < 21272 ? 21272 : gas }); - return cb ? txObject.send(filteredOpts, cb) : txObject.send(filteredOpts) - // relay all events to our promiEvent - .on('transactionHash', relayEvent('transactionHash')).on('confirmation', relayEvent('confirmation')).on('receipt', relayEvent('receipt')).on('error', relayEvent('error')); - }).then(defer.resolve).catch(defer.reject); - - return defer.eventEmitter; -}; - -var methodWrapper = function methodWrapper(web3, method) { - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { - args[_key2 - 2] = arguments[_key2]; - } - - var cb = void 0; - var opts = {}; - - if (typeof args[args.length - 1] === 'function') cb = args.pop(); - if (_typeof(args[args.length - 1]) === 'object' && !Array.isArray(args[args.length - 1])) opts = args.pop(); - - var txObject = method.apply(undefined, args); - - return execute(web3, txObject, opts, cb); -}; - -exports.default = function (abi, bytecode) { - var C = function C(web3, address) { - var _this = this; - - checkWeb3(web3); - - this.$web3 = web3; - this.$address = address; - this.$contract = new web3.eth.Contract(abi, address); - this.$abi = abi; - this.$byteCode = bytecode; - - Object.keys(this.$contract.methods).filter(function (key) { - return !key.startsWith('0x'); - }).forEach(function (key) { - _this[key] = function () { - for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - return methodWrapper.apply(undefined, [web3, _this.$contract.methods[key]].concat(args)); - }; - }); - - // set default from address - web3.eth.getAccounts().then(function (accounts) { - _this.$contract.options.from = accounts.length > 0 ? accounts[0] : undefined; - }); - }; - - C.new = function (web3) { - for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - args[_key4 - 1] = arguments[_key4]; - } - - var opts = {}; - if (args && args.length > 0 && _typeof(args[args.length - 1]) === 'object') { - opts = args.pop(); - } - - var deploy = new web3.eth.Contract(abi).deploy({ - data: bytecode, - arguments: args - }); - - var getAccount = function getAccount() { - if (opts.from) return Promise.resolve(opts.from); - - return web3.eth.getAccounts() - // eslint-disable-next-line no-confusing-arrow - .then(function (accounts) { - return accounts.length > 0 ? accounts[0] : undefined; - }); - }; - - // we need to create a new PromiEvent here b/c getAccount returns a regular promise - // however on a 'deploy' we want to return a PromiEvent - var defer = new _web3CorePromievent2.default(); - var relayEvent = function relayEvent(event) { - return function () { - var _defer$eventEmitter2; - - for (var _len5 = arguments.length, params = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - params[_key5] = arguments[_key5]; - } - - return (_defer$eventEmitter2 = defer.eventEmitter).emit.apply(_defer$eventEmitter2, [event].concat(params)); - }; - }; - - getAccount().then(function (account) { - return Object.assign(opts, { from: account }); - }).then(function () { - return execute(web3, deploy, opts) - // relay all events to our promiEvent - .on('transactionHash', relayEvent('transactionHash')).on('confirmation', relayEvent('confirmation')).on('receipt', relayEvent('receipt')).on('error', relayEvent('error')); - }).then(function (contract) { - return new C(web3, contract.options.address); - }).then(defer.resolve).catch(defer.reject); - - return defer.eventEmitter; - }; - - return C; -}; -//# sourceMappingURL=generateClass.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-contract-class/lib/generateClass.js.map b/truebit-implementation/node_modules/eth-contract-class/lib/generateClass.js.map deleted file mode 100644 index c76e9001..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/lib/generateClass.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/generateClass.js"],"names":["checkWeb3","web3","version","startsWith","Error","validOptKeys","filterOpts","opts","validOpts","forEach","key","estimateGas","method","$noEstimateGas","Promise","resolve","$gas","gas","then","$extraGas","Math","floor","execute","txObject","cb","_method","constant","call","defer","relayEvent","args","eventEmitter","emit","event","filteredOpts","Object","assign","send","on","catch","reject","methodWrapper","length","pop","Array","isArray","abi","bytecode","C","address","$web3","$address","$contract","eth","Contract","$abi","$byteCode","keys","methods","filter","getAccounts","accounts","options","from","undefined","new","deploy","data","arguments","getAccount","params","account","contract"],"mappings":";;;;;;;;AAAA;;;;;;AAEA,SAASA,SAAT,CAAmBC,IAAnB,EAAyB;AACvB,MAAI,OAAOA,KAAKC,OAAZ,KAAwB,QAAxB,IAAoC,CAACD,KAAKC,OAAL,CAAaC,UAAb,CAAwB,IAAxB,CAAzC,EAAwE;AACtE,UAAM,IAAIC,KAAJ,CAAU,8BAAV,CAAN;AACD;AACF;;AAED,IAAMC,eAAe,CAAC,MAAD,EAAS,IAAT,EAAe,UAAf,EAA2B,KAA3B,EAAkC,OAAlC,EAA2C,MAA3C,EAAmD,OAAnD,CAArB;AACA,IAAMC,aAAa,SAAbA,UAAa,CAACC,IAAD,EAAU;AAC3B,MAAMC,YAAY,EAAlB;;AAEAH,eAAaI,OAAb,CAAqB,UAACC,GAAD,EAAS;AAC5BF,cAAUE,GAAV,IAAiBH,KAAKG,GAAL,CAAjB;AACD,GAFD;;AAIA,SAAOF,SAAP;AACD,CARD;;AAUA,IAAMG,cAAc,SAAdA,WAAc,CAACV,IAAD,EAAOW,MAAP,EAAeL,IAAf,EAAwB;AAC1C,MAAIA,KAAKM,cAAT,EAAyB,OAAOC,QAAQC,OAAR,CAAgB,OAAhB,CAAP;AACzB,MAAIR,KAAKS,IAAL,IAAaT,KAAKU,GAAtB,EAA2B,OAAOH,QAAQC,OAAR,CAAgBR,KAAKS,IAAL,IAAaT,KAAKU,GAAlC,CAAP;;AAE3B,SAAOL,OAAOD,WAAP,CAAmBL,WAAWC,IAAX,CAAnB;AACL;AADK,GAEJW,IAFI,CAEC;AAAA,WAAOX,KAAKY,SAAL,GAAiBF,MAAMV,KAAKY,SAA5B,GAAwCC,KAAKC,KAAL,CAAWJ,MAAM,GAAjB,CAA/C;AAAA,GAFD,CAAP;AAGD,CAPD;;AASA;AACA,IAAMK,UAAU,SAAVA,OAAU,CAACrB,IAAD,EAAOsB,QAAP,EAAiBhB,IAAjB,EAAuBiB,EAAvB,EAA8B;AAAA,MACpCC,OADoC,GACxBF,QADwB,CACpCE,OADoC;;;AAG5C,MAAIA,QAAQC,QAAZ,EAAsB,OAAOH,SAASI,IAAT,CAAcrB,WAAWC,IAAX,CAAd,CAAP;;AAEtB;AACA;AACA,MAAMqB,QAAQ,kCAAd;AACA,MAAMC,aAAa,SAAbA,UAAa;AAAA,WAAS;AAAA;;AAAA,wCAAIC,IAAJ;AAAIA,YAAJ;AAAA;;AAAA,aAAa,6BAAMC,YAAN,EAAmBC,IAAnB,6BAAwBC,KAAxB,SAAkCH,IAAlC,EAAb;AAAA,KAAT;AAAA,GAAnB;;AAEAnB,cAAYV,IAAZ,EAAkBsB,QAAlB,EAA4BhB,IAA5B,EACGW,IADH,CACQ,UAACD,GAAD,EAAS;AACb;AACA,QAAMiB,eAAeC,OAAOC,MAAP,CAAc,EAAd,EAAkB9B,WAAWC,IAAX,CAAlB,EAAoC,EAAEU,KAAMA,MAAM,KAAP,GAAgB,KAAhB,GAAwBA,GAA/B,EAApC,CAArB;AACA,WAAQO,EAAD,GAAOD,SAASc,IAAT,CAAcH,YAAd,EAA4BV,EAA5B,CAAP,GAAyCD,SAASc,IAAT,CAAcH,YAAd;AAC9C;AAD8C,KAE7CI,EAF6C,CAE1C,iBAF0C,EAEvBT,WAAW,iBAAX,CAFuB,EAG7CS,EAH6C,CAG1C,cAH0C,EAG1BT,WAAW,cAAX,CAH0B,EAI7CS,EAJ6C,CAI1C,SAJ0C,EAI/BT,WAAW,SAAX,CAJ+B,EAK7CS,EAL6C,CAK1C,OAL0C,EAKjCT,WAAW,OAAX,CALiC,CAAhD;AAMD,GAVH,EAWGX,IAXH,CAWQU,MAAMb,OAXd,EAYGwB,KAZH,CAYSX,MAAMY,MAZf;;AAcA,SAAOZ,MAAMG,YAAb;AACD,CAzBD;;AA2BA,IAAMU,gBAAgB,SAAhBA,aAAgB,CAACxC,IAAD,EAAOW,MAAP,EAA2B;AAAA,qCAATkB,IAAS;AAATA,QAAS;AAAA;;AAC/C,MAAIN,WAAJ;AACA,MAAIjB,OAAO,EAAX;;AAEA,MAAI,OAAOuB,KAAKA,KAAKY,MAAL,GAAc,CAAnB,CAAP,KAAiC,UAArC,EAAiDlB,KAAKM,KAAKa,GAAL,EAAL;AACjD,MAAI,QAAOb,KAAKA,KAAKY,MAAL,GAAc,CAAnB,CAAP,MAAiC,QAAjC,IAA6C,CAACE,MAAMC,OAAN,CAAcf,KAAKA,KAAKY,MAAL,GAAc,CAAnB,CAAd,CAAlD,EAAwFnC,OAAOuB,KAAKa,GAAL,EAAP;;AAExF,MAAMpB,WAAWX,wBAAUkB,IAAV,CAAjB;;AAEA,SAAOR,QAAQrB,IAAR,EAAcsB,QAAd,EAAwBhB,IAAxB,EAA8BiB,EAA9B,CAAP;AACD,CAVD;;kBAae,UAACsB,GAAD,EAAMC,QAAN,EAAmB;AAChC,MAAMC,IAAI,SAASA,CAAT,CAAW/C,IAAX,EAAiBgD,OAAjB,EAA0B;AAAA;;AAClCjD,cAAUC,IAAV;;AAEA,SAAKiD,KAAL,GAAajD,IAAb;AACA,SAAKkD,QAAL,GAAgBF,OAAhB;AACA,SAAKG,SAAL,GAAiB,IAAInD,KAAKoD,GAAL,CAASC,QAAb,CAAsBR,GAAtB,EAA2BG,OAA3B,CAAjB;AACA,SAAKM,IAAL,GAAYT,GAAZ;AACA,SAAKU,SAAL,GAAiBT,QAAjB;;AAGAZ,WAAOsB,IAAP,CAAY,KAAKL,SAAL,CAAeM,OAA3B,EACGC,MADH,CACU;AAAA,aAAO,CAACjD,IAAIP,UAAJ,CAAe,IAAf,CAAR;AAAA,KADV,EAEGM,OAFH,CAEW,UAACC,GAAD,EAAS;AAChB,YAAKA,GAAL,IAAY;AAAA,2CAAIoB,IAAJ;AAAIA,cAAJ;AAAA;;AAAA,eAAaW,gCAAcxC,IAAd,EAAoB,MAAKmD,SAAL,CAAeM,OAAf,CAAuBhD,GAAvB,CAApB,SAAoDoB,IAApD,EAAb;AAAA,OAAZ;AACD,KAJH;;AAMI;AACJ7B,SAAKoD,GAAL,CAASO,WAAT,GACG1C,IADH,CACQ,UAAC2C,QAAD,EAAc;AAClB,YAAKT,SAAL,CAAeU,OAAf,CAAuBC,IAAvB,GAA+BF,SAASnB,MAAT,GAAkB,CAAnB,GAAwBmB,SAAS,CAAT,CAAxB,GAAsCG,SAApE;AACD,KAHH;AAID,GArBD;;AAuBAhB,IAAEiB,GAAF,GAAQ,UAAUhE,IAAV,EAAyB;AAAA,uCAAN6B,IAAM;AAANA,UAAM;AAAA;;AAC/B,QAAIvB,OAAO,EAAX;AACA,QAAIuB,QAAQA,KAAKY,MAAL,GAAc,CAAtB,IAA2B,QAAOZ,KAAKA,KAAKY,MAAL,GAAc,CAAnB,CAAP,MAAiC,QAAhE,EAA0E;AACxEnC,aAAOuB,KAAKa,GAAL,EAAP;AACD;;AAED,QAAMuB,SAAS,IAAIjE,KAAKoD,GAAL,CAASC,QAAb,CAAsBR,GAAtB,EACZoB,MADY,CACL;AACNC,YAAMpB,QADA;AAENqB,iBAAWtC;AAFL,KADK,CAAf;;AAMA,QAAMuC,aAAa,SAAbA,UAAa,GAAM;AACvB,UAAI9D,KAAKwD,IAAT,EAAe,OAAOjD,QAAQC,OAAR,CAAgBR,KAAKwD,IAArB,CAAP;;AAEf,aAAO9D,KAAKoD,GAAL,CAASO,WAAT;AACL;AADK,OAEJ1C,IAFI,CAEC;AAAA,eAAa2C,SAASnB,MAAT,GAAkB,CAAnB,GAAwBmB,SAAS,CAAT,CAAxB,GAAsCG,SAAlD;AAAA,OAFD,CAAP;AAGD,KAND;;AAQA;AACA;AACA,QAAMpC,QAAQ,kCAAd;AACA,QAAMC,aAAa,SAAbA,UAAa;AAAA,aAAS;AAAA;;AAAA,2CAAIyC,MAAJ;AAAIA,gBAAJ;AAAA;;AAAA,eAAe,8BAAMvC,YAAN,EAAmBC,IAAnB,8BAAwBC,KAAxB,SAAkCqC,MAAlC,EAAf;AAAA,OAAT;AAAA,KAAnB;;AAEAD,iBACGnD,IADH,CACQ;AAAA,aAAWiB,OAAOC,MAAP,CAAc7B,IAAd,EAAoB,EAAEwD,MAAMQ,OAAR,EAApB,CAAX;AAAA,KADR,EAEGrD,IAFH,CAEQ;AAAA,aAAMI,QAAQrB,IAAR,EAAciE,MAAd,EAAsB3D,IAAtB;AACN;AADM,OAEL+B,EAFK,CAEF,iBAFE,EAEiBT,WAAW,iBAAX,CAFjB,EAGLS,EAHK,CAGF,cAHE,EAGcT,WAAW,cAAX,CAHd,EAILS,EAJK,CAIF,SAJE,EAIST,WAAW,SAAX,CAJT,EAKLS,EALK,CAKF,OALE,EAKOT,WAAW,OAAX,CALP,CAAN;AAAA,KAFR,EASGX,IATH,CASQ;AAAA,aAAY,IAAI8B,CAAJ,CAAM/C,IAAN,EAAYuE,SAASV,OAAT,CAAiBb,OAA7B,CAAZ;AAAA,KATR,EAUG/B,IAVH,CAUQU,MAAMb,OAVd,EAWGwB,KAXH,CAWSX,MAAMY,MAXf;;AAaA,WAAOZ,MAAMG,YAAb;AACD,GAvCD;;AAyCA,SAAOiB,CAAP;AACD,C","file":"generateClass.js","sourcesContent":["import Web3PromiEvent from 'web3-core-promievent';\n\nfunction checkWeb3(web3) {\n if (typeof web3.version !== 'string' || !web3.version.startsWith('1.')) {\n throw new Error('web3 version 1.x is required');\n }\n}\n\nconst validOptKeys = ['from', 'to', 'gasPrice', 'gas', 'value', 'data', 'nonce'];\nconst filterOpts = (opts) => {\n const validOpts = {};\n\n validOptKeys.forEach((key) => {\n validOpts[key] = opts[key];\n });\n\n return validOpts;\n};\n\nconst estimateGas = (web3, method, opts) => {\n if (opts.$noEstimateGas) return Promise.resolve(4700000);\n if (opts.$gas || opts.gas) return Promise.resolve(opts.$gas || opts.gas);\n\n return method.estimateGas(filterOpts(opts))\n // eslint-disable-next-line no-confusing-arrow\n .then(gas => opts.$extraGas ? gas + opts.$extraGas : Math.floor(gas * 1.1));\n};\n\n// if constant method, executes a call, otherwise, estimates gas and executes send\nconst execute = (web3, txObject, opts, cb) => {\n const { _method } = txObject;\n\n if (_method.constant) return txObject.call(filterOpts(opts));\n\n // we need to create a new PromiEvent here b/c estimateGas returns a regular promise\n // however on a 'send' we want to return a PromiEvent\n const defer = new Web3PromiEvent();\n const relayEvent = event => (...args) => defer.eventEmitter.emit(event, ...args);\n\n estimateGas(web3, txObject, opts)\n .then((gas) => {\n // 21272 is min gas to work in testrpc\n const filteredOpts = Object.assign({}, filterOpts(opts), { gas: (gas < 21272) ? 21272 : gas });\n return (cb) ? txObject.send(filteredOpts, cb) : txObject.send(filteredOpts)\n // relay all events to our promiEvent\n .on('transactionHash', relayEvent('transactionHash'))\n .on('confirmation', relayEvent('confirmation'))\n .on('receipt', relayEvent('receipt'))\n .on('error', relayEvent('error'));\n })\n .then(defer.resolve)\n .catch(defer.reject);\n\n return defer.eventEmitter;\n};\n\nconst methodWrapper = (web3, method, ...args) => {\n let cb;\n let opts = {};\n\n if (typeof args[args.length - 1] === 'function') cb = args.pop();\n if (typeof args[args.length - 1] === 'object' && !Array.isArray(args[args.length - 1])) opts = args.pop();\n\n const txObject = method(...args);\n\n return execute(web3, txObject, opts, cb);\n};\n\n\nexport default (abi, bytecode) => {\n const C = function C(web3, address) {\n checkWeb3(web3);\n\n this.$web3 = web3;\n this.$address = address;\n this.$contract = new web3.eth.Contract(abi, address);\n this.$abi = abi;\n this.$byteCode = bytecode;\n\n\n Object.keys(this.$contract.methods)\n .filter(key => !key.startsWith('0x'))\n .forEach((key) => {\n this[key] = (...args) => methodWrapper(web3, this.$contract.methods[key], ...args);\n });\n\n // set default from address\n web3.eth.getAccounts()\n .then((accounts) => {\n this.$contract.options.from = (accounts.length > 0) ? accounts[0] : undefined;\n });\n };\n\n C.new = function (web3, ...args) {\n let opts = {};\n if (args && args.length > 0 && typeof args[args.length - 1] === 'object') {\n opts = args.pop();\n }\n\n const deploy = new web3.eth.Contract(abi)\n .deploy({\n data: bytecode,\n arguments: args,\n });\n\n const getAccount = () => {\n if (opts.from) return Promise.resolve(opts.from);\n\n return web3.eth.getAccounts()\n // eslint-disable-next-line no-confusing-arrow\n .then(accounts => (accounts.length > 0) ? accounts[0] : undefined);\n };\n\n // we need to create a new PromiEvent here b/c getAccount returns a regular promise\n // however on a 'deploy' we want to return a PromiEvent\n const defer = new Web3PromiEvent();\n const relayEvent = event => (...params) => defer.eventEmitter.emit(event, ...params);\n\n getAccount()\n .then(account => Object.assign(opts, { from: account }))\n .then(() => execute(web3, deploy, opts)\n // relay all events to our promiEvent\n .on('transactionHash', relayEvent('transactionHash'))\n .on('confirmation', relayEvent('confirmation'))\n .on('receipt', relayEvent('receipt'))\n .on('error', relayEvent('error')),\n )\n .then(contract => new C(web3, contract.options.address))\n .then(defer.resolve)\n .catch(defer.reject);\n\n return defer.eventEmitter;\n };\n\n return C;\n};\n"]} \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-contract-class/package.json b/truebit-implementation/node_modules/eth-contract-class/package.json deleted file mode 100644 index 8146b063..00000000 --- a/truebit-implementation/node_modules/eth-contract-class/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "eth-contract-class@0.0.6", - "_id": "eth-contract-class@0.0.6", - "_inBundle": false, - "_integrity": "sha1-OYuJUhScx0fLlZ+otdSAKIx6i84=", - "_location": "/eth-contract-class", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "eth-contract-class@0.0.6", - "name": "eth-contract-class", - "escapedName": "eth-contract-class", - "rawSpec": "0.0.6", - "saveSpec": null, - "fetchSpec": "0.0.6" - }, - "_requiredBy": [ - "/minimetoken" - ], - "_resolved": "https://registry.npmjs.org/eth-contract-class/-/eth-contract-class-0.0.6.tgz", - "_shasum": "398b8952149cc747cb959fa8b5d480288c7a8bce", - "_spec": "eth-contract-class@0.0.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/minimetoken", - "author": { - "name": "perissology" - }, - "bugs": { - "url": "https://github.com/Giveth/eth-contract-class/issues" - }, - "bundleDependencies": false, - "dependencies": { - "web3-core-promievent": "^1.0.0-beta.21" - }, - "deprecated": false, - "description": "generate js wrapper class around an ethereum contract", - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-preset-env": "^1.6.0" - }, - "directories": { - "lib": "lib" - }, - "homepage": "https://github.com/Giveth/eth-contract-class#readme", - "keywords": [ - "ethereum" - ], - "license": "GPL-3.0", - "main": "lib/generateClass.js", - "name": "eth-contract-class", - "repository": { - "type": "git", - "url": "git+https://github.com/Giveth/eth-contract-class.git" - }, - "scripts": { - "compile": "babel --source-maps -d lib/ src/", - "prepublish": "npm run compile", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "0.0.6" -} diff --git a/truebit-implementation/node_modules/eth-ens-namehash/.npmignore b/truebit-implementation/node_modules/eth-ens-namehash/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/truebit-implementation/node_modules/eth-ens-namehash/README.md b/truebit-implementation/node_modules/eth-ens-namehash/README.md deleted file mode 100644 index 0233e05f..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Eth ENS Namehash [![CircleCI](https://circleci.com/gh/danfinlay/eth-ens-namehash.svg?style=svg)](https://circleci.com/gh/danfinlay/eth-ens-namehash) - -A javascript library for generating Ethereum Name Service (ENS) namehashes per [spec](https://github.com/ethereum/EIPs/issues/137). - -[Available on NPM](https://www.npmjs.com/package/eth-ens-namehash) - -## Installation - -`npm install eth-ens-namehash -S` - -## Usage - -```javascript -var namehash = require('eth-ens-namehash') -var hash = namehash.hash('foo.eth') -// '0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f' - -// Also supports normalizing strings to ENS compatibility: -var input = getUserInput() -var normalized = namehash.normalize(input) -``` - -## Security Warning - -ENS Supports UTF-8 characters, and so many duplicate names are possible. For example: - -- faceboоk.eth -- facebook.eth - -The first one has non-ascii chars. (control+F on this page and search for facebook, only the second one will match). - -namehash.normalize() doesn't automagically remap those, and so other precautions should be taken to avoid user phishing. - -## Development - -This module supports advanced JavaScript syntax, but exports an ES5-compatible module. To re-build the exported module after making changes, run `npm run bundle` (must have [browserify](http://browserify.org/) installed). - diff --git a/truebit-implementation/node_modules/eth-ens-namehash/circle.yml b/truebit-implementation/node_modules/eth-ens-namehash/circle.yml deleted file mode 100644 index a958cc9b..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/circle.yml +++ /dev/null @@ -1,4 +0,0 @@ -machine: - node: - version: 6.0.0 - diff --git a/truebit-implementation/node_modules/eth-ens-namehash/dist/index.js b/truebit-implementation/node_modules/eth-ens-namehash/dist/index.js deleted file mode 100644 index e8b3ab22..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/dist/index.js +++ /dev/null @@ -1,4048 +0,0 @@ -(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 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 -} - -function byteLength (b64) { - // base64 is 4/3 + up to two characters of the original data - return (b64.length * 3 / 4) - placeHoldersCount(b64) -} - -function toByteArray (b64) { - var i, l, tmp, placeHolders, arr - var len = b64.length - placeHolders = placeHoldersCount(b64) - - arr = new Arr((len * 3 / 4) - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? len - 4 : len - - var L = 0 - - for (i = 0; i < l; i += 4) { - tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] - arr[L++] = (tmp >> 16) & 0xFF - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - if (placeHolders === 2) { - tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[L++] = tmp & 0xFF - } else if (placeHolders === 1) { - tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var output = '' - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - output += lookup[tmp >> 2] - output += lookup[(tmp << 4) & 0x3F] - output += '==' - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) - output += lookup[tmp >> 10] - output += lookup[(tmp >> 4) & 0x3F] - output += lookup[(tmp << 2) & 0x3F] - output += '=' - } - - parts.push(output) - - return parts.join('') -} - -},{}],2:[function(require,module,exports){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -var K_MAX_LENGTH = 0x7fffffff -exports.kMaxLength = K_MAX_LENGTH - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Print warning and recommend using `buffer` v4.x which has an Object - * implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * We report that the browser does not support typed arrays if the are not subclassable - * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` - * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support - * for __proto__ and has a buggy typed array implementation. - */ -Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() - -if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && - typeof console.error === 'function') { - console.error( - 'This browser lacks typed array (Uint8Array) support which is required by ' + - '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' - ) -} - -function typedArraySupport () { - // Can typed array instances can be augmented? - try { - var arr = new Uint8Array(1) - arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} - return arr.foo() === 42 - } catch (e) { - return false - } -} - -function createBuffer (length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('Invalid typed array length') - } - // Return an augmented `Uint8Array` instance - var buf = new Uint8Array(length) - buf.__proto__ = Buffer.prototype - return buf -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new Error( - 'If encoding is specified then the first argument must be a string' - ) - } - return allocUnsafe(arg) - } - return from(arg, encodingOrOffset, length) -} - -// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 -if (typeof Symbol !== 'undefined' && Symbol.species && - Buffer[Symbol.species] === Buffer) { - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true, - enumerable: false, - writable: false - }) -} - -Buffer.poolSize = 8192 // not used by this implementation - -function from (value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number') - } - - if (isArrayBuffer(value)) { - return fromArrayBuffer(value, encodingOrOffset, length) - } - - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) - } - - return fromObject(value) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length) -} - -// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: -// https://github.com/feross/buffer/pull/148 -Buffer.prototype.__proto__ = Uint8Array.prototype -Buffer.__proto__ = Uint8Array - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') - } else if (size < 0) { - throw new RangeError('"size" argument must not be negative') - } -} - -function alloc (size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(size).fill(fill, encoding) - : createBuffer(size).fill(fill) - } - return createBuffer(size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(size, fill, encoding) -} - -function allocUnsafe (size) { - assertSize(size) - return createBuffer(size < 0 ? 0 : checked(size) | 0) -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(size) -} - -function fromString (string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding') - } - - var length = byteLength(string, encoding) | 0 - var buf = createBuffer(length) - - var actual = buf.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - buf = buf.slice(0, actual) - } - - return buf -} - -function fromArrayLike (array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - var buf = createBuffer(length) - for (var i = 0; i < length; i += 1) { - buf[i] = array[i] & 255 - } - return buf -} - -function fromArrayBuffer (array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('\'offset\' is out of bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('\'length\' is out of bounds') - } - - var buf - if (byteOffset === undefined && length === undefined) { - buf = new Uint8Array(array) - } else if (length === undefined) { - buf = new Uint8Array(array, byteOffset) - } else { - buf = new Uint8Array(array, byteOffset, length) - } - - // Return an augmented `Uint8Array` instance - buf.__proto__ = Buffer.prototype - return buf -} - -function fromObject (obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - var buf = createBuffer(len) - - if (buf.length === 0) { - return buf - } - - obj.copy(buf, 0, 0, len) - return buf - } - - if (obj) { - if (isArrayBufferView(obj) || 'length' in obj) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0) - } - return fromArrayLike(obj) - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data) - } - } - - throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') -} - -function checked (length) { - // Note: cannot use `length < K_MAX_LENGTH` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= K_MAX_LENGTH) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return b != null && b._isBuffer === true -} - -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (isArrayBufferView(string) || isArrayBuffer(string)) { - return string.byteLength - } - if (typeof string !== 'string') { - string = '' + string - } - - var len = string.length - if (len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - case undefined: - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) -// to detect a Buffer instance. It's not possible to use `instanceof Buffer` -// reliably in a browserify context because there could be multiple different -// copies of the 'buffer' package in use. This method works even for Buffer -// instances that were created from another copy of the `buffer` package. -// See: https://github.com/feross/buffer/issues/154 -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - var length = this.length - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } - return '' -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (!Buffer.isBuffer(target)) { - throw new TypeError('Argument must be a Buffer') - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) - - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (numberIsNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (numberIsNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset >>> 0 - if (isFinite(length)) { - length = length >>> 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf = this.subarray(start, end) - // Return an augmented `Uint8Array` instance - newBuf.__proto__ = Buffer.prototype - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000) { - // ascending copy from start - for (i = 0; i < len; ++i) { - target[i + targetStart] = this[i + start] - } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, start + len), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if (code < 256) { - val = code - } - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - var bytes = Buffer.isBuffer(val) - ? val - : new Buffer(val, encoding) - var len = bytes.length - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = str.trim().replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check -// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166 -function isArrayBuffer (obj) { - return obj instanceof ArrayBuffer || - (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' && - typeof obj.byteLength === 'number') -} - -// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView` -function isArrayBufferView (obj) { - return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj) -} - -function numberIsNaN (obj) { - return obj !== obj // eslint-disable-line no-self-compare -} - -},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - -},{}],4:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // 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 - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // 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. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],5:[function(require,module,exports){ -(function (global){ -/*! https://mths.be/punycode v1.4.1 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.4.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define('punycode', function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],6:[function(require,module,exports){ -(function (Buffer){ -var sha3 = require('js-sha3').keccak_256 -var uts46 = require('idna-uts46-hx') - -function namehash (inputName) { - // Reject empty names: - var node = '' - for (var i = 0; i < 32; i++) { - node += '00' - } - - name = normalize(inputName) - - if (name) { - var labels = name.split('.') - - for(var i = labels.length - 1; i >= 0; i--) { - var labelSha = sha3(labels[i]) - node = sha3(new Buffer(node + labelSha, 'hex')) - } - } - - return '0x' + node -} - -function normalize(name) { - return name ? uts46.toUnicode(name, {useStd3ASCII: true, transitional: false}) : name -} - -exports.hash = namehash -exports.normalize = normalize - -}).call(this,require("buffer").Buffer) -},{"buffer":2,"idna-uts46-hx":8,"js-sha3":9}],7:[function(require,module,exports){ -/* This file is generated from the Unicode IDNA table, using - the build-unicode-tables.py script. Please edit that - script instead of this file. */ - -/* istanbul ignore next */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define([], function () { return factory(); }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.uts46_map = factory(); - } -}(this, function () { -var blocks = [ - new Uint32Array([2157250,2157314,2157378,2157442,2157506,2157570,2157634,0,2157698,2157762,2157826,2157890,2157954,0,2158018,0]), - new Uint32Array([2179041,6291456,2179073,6291456,2179105,6291456,2179137,6291456,2179169,6291456,2179201,6291456,2179233,6291456,2179265,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([0,2113729,2197345,2197377,2113825,2197409,2197441,2113921,2197473,2114017,2197505,2197537,2197569,2197601,2197633,2197665]), - new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,23068672,23068672,23068672,0,0,0,0,23068672]), - new Uint32Array([14680064,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064]), - new Uint32Array([2196001,2196033,2196065,2196097,2196129,2196161,2196193,2196225,2196257,2196289,2196321,2196353,2196385,2196417,2196449,2196481]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,6291456,0,0,0,0,0]), - new Uint32Array([2097281,2105921,2097729,2106081,0,2097601,2162337,2106017,2133281,2097505,2105889,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([2177025,6291456,2177057,6291456,2177089,6291456,2177121,6291456,2177153,6291456,2177185,6291456,2177217,6291456,2177249,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,0,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456]), - new Uint32Array([2134435,2134531,2134627,2134723,2134723,2134819,2134819,2134915,2134915,2135011,2105987,2135107,2135203,2135299,2131587,2135395]), - new Uint32Array([0,0,0,0,0,0,0,6291456,2168673,2169249,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2147906,2147970,2148034,2148098,2148162,2148226,2148290,2148354,2147906,2147970,2148034,2148098,2148162,2148226,2148290,2148354]), - new Uint32Array([2125219,2125315,2152834,2152898,2125411,2152962,2153026,2125506,2125507,2125603,2153090,2153154,2153218,2153282,2153346,2105348]), - new Uint32Array([2203393,6291456,2203425,6291456,2203457,6291456,2203489,6291456,6291456,6291456,6291456,2203521,6291456,2181281,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,6291456,2145538,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,6291456]), - new Uint32Array([2139426,2160834,2160898,2160962,2134242,2161026,2161090,2161154,2161218,2161282,2161346,2161410,2138658,2161474,2161538,2134722]), - new Uint32Array([2119939,2124930,2125026,2106658,2125218,2128962,2129058,2129154,2129250,2129346,2129442,2108866,2108770,2150466,2150530,2150594]), - new Uint32Array([2201601,6291456,2201633,6291456,2201665,6291456,2201697,6291456,2201729,6291456,2201761,6291456,2201793,6291456,2201825,6291456]), - new Uint32Array([2193537,2193569,2193601,2193633,2193665,2193697,2193729,2193761,2193793,2193825,2193857,2193889,2193921,2193953,2193985,2194017]), - new Uint32Array([6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2190561,6291456,2190593,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2190625,6291456,2190657,6291456,23068672]), - new Uint32Array([2215905,2215937,2215969,2216001,2216033,2216065,2216097,2216129,2216161,2216193,2216225,2216257,2105441,2216289,2216321,2216353]), - new Uint32Array([23068672,18884130,23068672,23068672,23068672,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2191233,2191265,2191297,2191329,2191361,2191393,2191425,2117377,2191457,2191489,2191521,2191553,2191585,2191617,2191649,2117953]), - new Uint32Array([2132227,2132323,2132419,2132419,2132515,2132515,2132611,2132707,2132707,2132803,2132899,2132899,2132995,2132995,2133091,2133187]), - new Uint32Array([0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,0,0]), - new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,10609889,10610785,10609921,10610817,2222241]), - new Uint32Array([6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0]), - new Uint32Array([2219969,2157121,2157441,2157505,2157889,2157953,2220001,2158465,2158529,10575617,2156994,2157058,2129923,2130019,2157122,2157186]), - new Uint32Array([6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2185249,6291456,2185281,6291456,2185313,6291456,2185345,6291456,2185377,6291456,2185409,6291456,2185441,6291456,2185473,6291456]), - new Uint32Array([0,0,0,0,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,0,0,23068672,23068672,23068672,6291456,0]), - new Uint32Array([2183361,6291456,2183393,6291456,2183425,6291456,2183457,6291456,2183489,6291456,2183521,6291456,2183553,6291456,2183585,6291456]), - new Uint32Array([2192161,2192193,2192225,2192257,2192289,2192321,2192353,2192385,2192417,2192449,2192481,2192513,2192545,2192577,2192609,2192641]), - new Uint32Array([2212001,2212033,2212065,2212097,2212129,2212161,2212193,2212225,2212257,2212289,2212321,2212353,2212385,2212417,2212449,2207265]), - new Uint32Array([2249825,2249857,2249889,2249921,2249954,2250018,2250082,2250145,2250177,2250209,2250241,2250274,2250337,2250370,2250433,2250465]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2147905,2147969,2148033,2148097,2148161,2148225,2148289,2148353]), - new Uint32Array([10485857,6291456,2197217,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,23068672,23068672]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2180353,2180385,2144033,2180417,2180449,2180481,2180513,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,10610209,10610465,10610241,10610753,10609857]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0,0]), - new Uint32Array([2223842,2223906,2223970,2224034,2224098,2224162,2224226,2224290,2224354,2224418,2224482,2224546,2224610,2224674,2224738,2224802]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([23068672,23068672,23068672,18923650,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,18923714,23068672,23068672]), - new Uint32Array([2126179,2125538,2126275,2126371,2126467,2125634,2126563,2105603,2105604,2125346,2126659,2126755,2126851,2098179,2098181,2098182]), - new Uint32Array([2227426,2227490,2227554,2227618,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2192353,2240642,2240642,2240705,2240737,2240737,2240769,2240802,2240866,2240929,2240961,2240993,2241025,2241057,2241089,2241121]), - new Uint32Array([6291456,2170881,2170913,2170945,6291456,2170977,6291456,2171009,2171041,6291456,6291456,6291456,2171073,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2132226,2132514,2163586,2132610,2160386,2133090,2133186,2160450,2160514,2160578,2133570,2106178,2160642,2133858,2160706,2160770]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10532162,10532226,10532290,10532354,10532418,10532482,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672]), - new Uint32Array([2098209,2108353,2108193,2108481,2170241,2111713,2105473,2105569,2105601,2112289,2112481,2098305,2108321,0,0,0]), - new Uint32Array([2209121,2209153,2209185,2209217,2209249,2209281,2209313,2209345,2209377,2209409,2209441,2209473,2207265,2209505,2209537,2209569]), - new Uint32Array([2189025,6291456,2189057,6291456,2189089,6291456,2189121,6291456,2189153,6291456,2189185,6291456,2189217,6291456,2189249,6291456]), - new Uint32Array([2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2165764,2140004]), - new Uint32Array([2215105,6291456,2215137,6291456,6291456,2215169,2215201,6291456,6291456,6291456,2215233,2215265,2215297,2215329,2215361,2215393]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,23068672,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([10505091,10505187,10505283,10505379,10505475,10505571,10505667,10505763,10505859,10505955,10506051,10506147,10506243,10506339,10506435,10506531]), - new Uint32Array([2229730,2229794,2229858,2229922,2229986,2230050,2230114,2230178,2230242,2230306,2230370,2230434,2230498,2230562,2230626,2230690]), - new Uint32Array([2105505,2098241,2108353,2108417,2105825,0,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177]), - new Uint32Array([6291456,6291456,6291456,6291456,10502115,10502178,10502211,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]), - new Uint32Array([2190305,6291456,2190337,6291456,2190369,6291456,2190401,6291456,2190433,6291456,2190465,6291456,2190497,6291456,2190529,6291456]), - new Uint32Array([2173793,2173985,2174017,6291456,2173761,2173697,6291456,2174689,6291456,2174017,2174721,6291456,6291456,2174753,2174785,2174817]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2099521,2099105,2120705,2098369,2120801,2103361,2097985,2098433,2121377,2121473,2099169,2099873,2098401,2099393,2152609,2100033]), - new Uint32Array([2132898,2163842,2163906,2133282,2132034,2131938,2137410,2132802,2132706,2164866,2133282,2160578,2165186,2165186,6291456,6291456]), - new Uint32Array([10500003,10500099,10500195,10500291,10500387,10500483,10500579,10500675,10500771,10500867,10500963,10501059,10501155,10501251,10501347,10501443]), - new Uint32Array([2163458,2130978,2131074,2131266,2131362,2163522,2160130,2132066,2131010,2131106,2106018,2131618,2131298,2132034,2131938,2137410]), - new Uint32Array([2212961,2116993,2212993,2213025,2213057,2213089,2213121,2213153,2213185,2213217,2213249,2209633,2213281,2213313,2213345,2213377]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2113729,2113825,2113921,2114017,2114113,2114209,2114305,2114401,2114497,2114593,2114689,2114785,2114881,2114977,2115073,2115169]), - new Uint32Array([2238177,2238209,2238241,2238273,2238305,2238337,2238337,2217537,2238369,2238401,2238433,2238465,2215649,2238497,2238529,2238561]), - new Uint32Array([2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905]), - new Uint32Array([6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,0]), - new Uint32Array([6291456,0,6291456,2145026,0,6291456,2145090,0,6291456,6291456,0,0,23068672,0,23068672,23068672]), - new Uint32Array([2099233,2122017,2200673,2098113,2121537,2103201,2200705,2104033,2121857,2121953,2122401,2099649,2099969,2123009,2100129,2100289]), - new Uint32Array([6291456,23068672,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0]), - new Uint32Array([2187681,2187713,2187745,2187777,2187809,2187841,2187873,2187905,2187937,2187969,2188001,2188033,2188065,2188097,2188129,2188161]), - new Uint32Array([0,10554498,10554562,10554626,10554690,10554754,10554818,10554882,10554946,10555010,10555074,6291456,6291456,0,0,0]), - new Uint32Array([2235170,2235234,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0]), - new Uint32Array([2181153,6291456,2188897,6291456,6291456,2188929,6291456,6291456,6291456,6291456,6291456,6291456,2111905,2100865,2188961,2188993]), - new Uint32Array([2100833,2100897,0,0,2101569,2101697,2101825,2101953,2102081,2102209,10575617,2187041,10502177,10489601,10489697,2112289]), - new Uint32Array([6291456,2172833,6291456,2172865,2172897,2172929,2172961,6291456,2172993,6291456,2173025,6291456,2173057,6291456,2173089,6291456]), - new Uint32Array([6291456,0,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,2190721]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,6291456,6291456]), - new Uint32Array([2184993,6291456,2185025,6291456,2185057,6291456,2185089,6291456,2185121,6291456,2185153,6291456,2185185,6291456,2185217,6291456]), - new Uint32Array([2115265,2115361,2115457,2115553,2115649,2115745,2115841,2115937,2116033,2116129,2116225,2116321,2150658,2150722,2200225,6291456]), - new Uint32Array([2168321,6291456,2168353,6291456,2168385,6291456,2168417,6291456,2168449,6291456,2168481,6291456,2168513,6291456,2168545,6291456]), - new Uint32Array([23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,0,6291456,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,2186625,0,0,6291456,6291456,2186657,2186689,2186721,2173505,0,10496067,10496163,10496259]), - new Uint32Array([2178785,6291456,2178817,6291456,2178849,6291456,2178881,6291456,2178913,6291456,2178945,6291456,2178977,6291456,2179009,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0]), - new Uint32Array([2097152,0,0,0,2097152,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,2197857,2197889,2197921,2197953,2197985,2198017,0,0,2198049,2198081,2198113,2198145,2198177,2198209]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2098209,2167297,2111137,6291456]), - new Uint32Array([2171393,6291456,2171425,6291456,2171457,6291456,2171489,6291456,2171521,6291456,2171553,6291456,2171585,6291456,2171617,6291456]), - new Uint32Array([2206753,2206785,2195457,2206817,2206849,2206881,2206913,2197153,2197153,2206945,2117857,2206977,2207009,2207041,2207073,2207105]), - new Uint32Array([0,0,0,0,0,0,0,23068672,0,0,0,0,2144834,2144898,0,2144962]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672]), - new Uint32Array([2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,0,2105505,2098241]), - new Uint32Array([6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,2202049,6291456,2202081,6291456,2202113,6291456,2202145,6291456,2202177,6291456,2202209,6291456,2202241,6291456]), - new Uint32Array([10501155,10501251,10501347,10501443,10501539,10501635,10501731,10501827,10501923,10502019,2141731,2105505,2098177,2155586,2166530,0]), - new Uint32Array([2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441]), - new Uint32Array([2146882,2146946,2147010,2147074,2147138,2147202,2147266,2147330,2146882,2146946,2147010,2147074,2147138,2147202,2147266,2147330]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([10502307,10502403,10502499,10502595,10502691,10502787,10502883,10502979,10503075,10503171,10503267,10503363,10503459,10503555,10503651,10503747]), - new Uint32Array([2179937,2179969,2180001,2180033,2156545,2180065,2156577,2180097,2180129,2180161,2180193,2180225,2180257,2180289,2156737,2180321]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,0,0,0,6291456,0,0,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0]), - new Uint32Array([2227682,2227746,2227810,2227874,2227938,2228002,2228066,2228130,2228194,2228258,2228322,2228386,2228450,2228514,2228578,2228642]), - new Uint32Array([2105601,2169121,2108193,2170049,2181025,2181057,2112481,2108321,2108289,2181089,2170497,2100865,2181121,2173601,2173633,2173665]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2180641,6291456,6291456,6291456]), - new Uint32Array([0,6291456,6291456,6291456,0,6291456,0,6291456,0,0,6291456,6291456,0,6291456,6291456,6291456]), - new Uint32Array([2178273,6291456,2178305,6291456,2178337,6291456,2178369,6291456,2178401,6291456,2178433,6291456,2178465,6291456,2178497,6291456]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456]), - new Uint32Array([2237377,2237409,2236225,2237441,2237473,2217441,2215521,2215553,2217473,2237505,2237537,2209697,2237569,2215585,2237601,2237633]), - new Uint32Array([2221985,2165601,2165601,2165665,2165665,2222017,2222017,2165729,2165729,2158913,2158913,2158913,2158913,2097281,2097281,2105921]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2149634,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2176897,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,2176929,6291456,2176961,6291456,2176993,6291456]), - new Uint32Array([2172641,6291456,2172673,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2172705,2172737,6291456,2172769,2172801,6291456]), - new Uint32Array([2099173,2104196,2121667,2099395,2121763,2152258,2152322,2098946,2152386,2121859,2121955,2099333,2122051,2104324,2099493,2122147]), - new Uint32Array([6291456,6291456,6291456,2145794,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,2145858,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,0,0,6291456,0]), - new Uint32Array([0,2105921,2097729,0,2097377,0,0,2106017,0,2097505,2105889,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2239074,2239138,2239201,2239233,2239265,2239297,2239329,2239361,0,2239393,2239425,2239425,2239458,2239521,2239553,2209569]), - new Uint32Array([14680064,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,6291456,23068672]), - new Uint32Array([2108321,2108289,2113153,2098209,2180897,2180929,2180961,2111137,2098241,2108353,2170241,2170273,2180993,2105825,6291456,2105473]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2146114,6291456,6291456,6291456,0,0,0]), - new Uint32Array([2105921,2105921,2105921,2222049,2222049,2130977,2130977,2130977,2130977,2160065,2160065,2160065,2160065,2097729,2097729,2097729]), - new Uint32Array([2218145,2214785,2207937,2218177,2218209,2192993,2210113,2212769,2218241,2218273,2216129,2218305,2216161,2218337,2218369,2218401]), - new Uint32Array([0,0,0,2156546,2156610,2156674,2156738,2156802,0,0,0,0,0,2156866,23068672,2156930]), - new Uint32Array([23068672,23068672,23068672,0,0,0,0,23068672,23068672,0,0,23068672,23068672,23068672,0,0]), - new Uint32Array([2213409,2213441,2213473,2213505,2213537,2213569,2213601,2213633,2213665,2195681,2213697,2213729,2213761,2213793,2213825,2213857]), - new Uint32Array([2100033,2099233,2122017,2200673,2098113,2121537,2103201,2200705,2104033,2121857,2121953,2122401,2099649,2099969,2123009,2100129]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2201857,6291456,2201889,6291456,2201921,6291456,2201953,6291456,2201985,6291456,2202017,6291456,2176193,2176257,23068672,23068672]), - new Uint32Array([6291456,6291456,23068672,23068672,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2188193,2188225,2188257,2188289,2188321,2188353,2188385,2188417,2188449,2188481,2188513,2188545,2188577,2188609,2188641,0]), - new Uint32Array([10554529,2221089,0,10502113,10562017,10537921,10538049,2221121,2221153,0,0,0,0,0,0,0]), - new Uint32Array([2213889,2213921,2213953,2213985,2214017,2214049,2214081,2194177,2214113,2214145,2214177,2214209,2214241,2214273,2214305,2214337]), - new Uint32Array([2166978,2167042,2099169,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2180545,6291456,6291456,6291456]), - new Uint32Array([10518915,10519011,10519107,10519203,2162242,2162306,2159554,2162370,2159362,2159618,2105922,2162434,2159746,2162498,2159810,2159874]), - new Uint32Array([2161730,2161794,2135586,2161858,2161922,2137186,2131810,2160290,2135170,2161986,2137954,2162050,2162114,2162178,10518723,10518819]), - new Uint32Array([10506627,10506723,10506819,10506915,10507011,10507107,10507203,10507299,10507395,10507491,10507587,10507683,10507779,10507875,10507971,10508067]), - new Uint32Array([6291456,23068672,23068672,23068672,0,23068672,23068672,0,0,0,0,0,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0]), - new Uint32Array([2175873,2175905,2175937,2175969,2176001,2176033,2176065,2176097,2176129,2176161,2176193,2176225,2176257,2176289,2176321,2176353]), - new Uint32Array([2140006,2140198,2140390,2140582,2140774,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,23068672,23068672,23068672]), - new Uint32Array([2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241]), - new Uint32Array([0,23068672,0,0,0,0,0,0,0,2145154,2145218,2145282,6291456,0,2145346,0]), - new Uint32Array([0,0,0,0,10531458,10495395,2148545,2143201,2173473,2148865,2173505,0,2173537,0,2173569,2149121]), - new Uint32Array([10537282,10495683,2148738,2148802,2148866,0,6291456,2148930,2186593,2173473,2148737,2148865,2148802,10495779,10495875,10495971]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2215425,2215457,2215489,2215521,2215553,2215585,2215617,2215649,2215681,2215713,2215745,2215777,2192033,2215809,2215841,2215873]), - new Uint32Array([2242049,2242081,2242113,2242145,2242177,2242209,2242241,2242273,2215937,2242305,2242338,2242401,2242433,2242465,2242497,2216001]), - new Uint32Array([10554529,2221089,0,0,10562017,10502113,10538049,10537921,2221185,10489601,10489697,10609889,10609921,2141729,2141793,10610273]), - new Uint32Array([2141923,2142019,2142115,2142211,2142307,2142403,2142499,2142595,2142691,0,0,0,0,0,0,0]), - new Uint32Array([0,2221185,2221217,10609857,10609857,10489601,10489697,10609889,10609921,2141729,2141793,2221345,2221377,2221409,2221441,2187105]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,18923970,23068672,23068672,23068672,0,6291456,6291456]), - new Uint32Array([2183105,6291456,2183137,6291456,2183169,6291456,2183201,6291456,2183233,6291456,2183265,6291456,2183297,6291456,2183329,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([2134434,2134818,2097666,2097186,2097474,2097698,2105986,2131586,2132450,2131874,2131778,2135970,2135778,2161602,2136162,2161666]), - new Uint32Array([2236865,2236897,2236930,2236993,2237025,2235681,2237058,2237121,2237153,2237185,2237217,2217281,2237250,2191233,2237313,2237345]), - new Uint32Array([2190049,6291456,2190081,6291456,2190113,6291456,2190145,6291456,2190177,6291456,2190209,6291456,2190241,6291456,2190273,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2101922,2102050,2102178,2102306,10498755,10498851,10498947,10499043,10499139,10499235,10499331,10499427,10499523,10489604,10489732,10489860]), - new Uint32Array([2166914,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2181601,2170561,2181633,2181665,2170753,2181697,2172897,2170881,2181729,2170913,2172929,2113441,2181761,2181793,2171009,2173761]), - new Uint32Array([0,2105921,2097729,2106081,0,2097601,2162337,2106017,2133281,2097505,0,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([2248001,2248033,2248066,2248130,2248193,2248226,2248289,2248322,2248385,2248417,2216673,2248450,2248514,2248577,2248610,2248673]), - new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,0,0,0]), - new Uint32Array([2169729,6291456,2169761,6291456,2169793,6291456,2169825,6291456,2169857,2169889,6291456,2169921,6291456,2143329,6291456,2098305]), - new Uint32Array([2162178,2163202,2163266,2135170,2136226,2161986,2137954,2159426,2159490,2163330,2159554,2163394,2159682,2139522,2136450,2159746]), - new Uint32Array([2173953,2173985,0,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2174209,2174241,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,4271169,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2174273]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,6291456,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,2190785,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2189793,6291456,2189825,6291456,2189857,6291456,2189889,6291456,2189921,6291456,2189953,6291456,2189985,6291456,2190017,6291456]), - new Uint32Array([2105601,2112289,2108193,2112481,2112577,0,2098305,2108321,2108289,2100865,2113153,2108481,2113345,0,2098209,2111137]), - new Uint32Array([2172129,6291456,2172161,6291456,2172193,6291456,2172225,6291456,2172257,6291456,2172289,6291456,2172321,6291456,2172353,6291456]), - new Uint32Array([2214753,6291456,2214785,6291456,6291456,2214817,2214849,2214881,2214913,2214945,2214977,2215009,2215041,2215073,2194401,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([0,0,0,0,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([10610305,10610337,10575617,2221761,10610401,10610433,10502177,0,10610465,10610497,10610529,10610561,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,23068672,0,0,0,0,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2187105,2187137,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2199393,2199425,2199457,2199489,2199521,2199553,2199585,2199617,2199649,2199681,2199713,2199745,2199777,2199809,2199841,0]), - new Uint32Array([2217249,2217281,2217313,2217345,2217377,2217409,2217441,2217473,2215617,2217505,2217537,2217569,2214753,2217601,2217633,2217665]), - new Uint32Array([2170273,2170305,6291456,2170337,2170369,6291456,2170401,2170433,2170465,6291456,6291456,6291456,2170497,2170529,6291456,2170561]), - new Uint32Array([2188673,6291456,2188705,2188737,2188769,6291456,6291456,2188801,6291456,2188833,6291456,2188865,6291456,2180929,2181505,2180897]), - new Uint32Array([10489988,10490116,10490244,10490372,10490500,10490628,10490756,10490884,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2147393,2147457,2147521,2147585,2147649,2147713,2147777,2147841]), - new Uint32Array([23068672,23068672,0,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2241153,2241185,2241217,2215809,2241250,2241313,2241345,2241377,2217921,2241377,2241409,2215873,2241441,2241473,2241505,2241537]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2220417,2220417,2220449,2220449,2220481,2220481,2220513,2220513,2220545,2220545,2220577,2220577,2220609,2220609,2220641,2220641]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,2144002,0,6291456,6291456,0,0,6291456,6291456,6291456]), - new Uint32Array([2167105,2167137,2167169,2167201,2167233,2167265,2167297,2167329,2167361,2167393,2167425,2167457,2167489,2167521,2167553,2167585]), - new Uint32Array([10575521,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]), - new Uint32Array([2234146,2234210,2234274,2234338,2234402,2234466,2234530,2234594,2234658,2234722,2234786,2234850,2234914,2234978,2235042,2235106]), - new Uint32Array([0,0,0,0,0,0,0,2180577,0,0,0,0,0,2180609,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,0,0,6291456,6291456]), - new Uint32Array([2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2242529,2242561,2242593,2242625,2242657,2242689,2242721,2242753,2207937,2218177,2242785,2242817,2242849,2242882,2242945,2242977]), - new Uint32Array([2118049,2105345,2118241,2105441,2118433,2118529,2118625,2118721,2118817,2200257,2200289,2191809,2200321,2200353,2200385,2200417]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([2185505,6291456,2185537,6291456,2185569,6291456,2185601,6291456,2185633,6291456,2185665,6291456,2185697,6291456,2185729,6291456]), - new Uint32Array([2231970,2232034,2232098,2232162,2232226,2232290,2232354,2232418,2232482,2232546,2232610,2232674,2232738,2232802,2232866,2232930]), - new Uint32Array([2218625,2246402,2246466,2246530,2246594,2246657,2246689,2246689,2218657,2219681,2246721,2246753,2246785,2246818,2246881,2208481]), - new Uint32Array([2197025,2197057,2197089,2197121,2197153,2197185,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2219137,2216961,2219169,2219201,2219233,2219265,2219297,2217025,2215041,2219329,2217057,2219361,2217089,2219393,2197153,2219426]), - new Uint32Array([23068672,23068672,23068672,0,0,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713]), - new Uint32Array([2243522,2243585,2243617,2243649,2243681,2210113,2243713,2243746,2243810,2243874,2243937,2243970,2244033,2244065,2244097,2244129]), - new Uint32Array([2178017,6291456,2178049,6291456,2178081,6291456,2178113,6291456,2178145,6291456,2178177,6291456,2178209,6291456,2178241,6291456]), - new Uint32Array([10553858,2165314,10518722,6291456,10518818,0,10518914,2130690,10519010,2130786,10519106,2130882,10519202,2165378,10554050,2165506]), - new Uint32Array([0,0,2135491,2135587,2135683,2135779,2135875,2135971,2135971,2136067,2136163,2136259,2136355,2136355,2136451,2136547]), - new Uint32Array([23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2220033,2220033,2220065,2220065,2220065,2220065,2220097,2220097,2220097,2220097,2220129,2220129,2220129,2220129,2220161,2220161]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2100897,2100898,2100899,2150018,2100865,2100866,2100867,2100868,2150082,2108481,2109858,2109859,2105569,2105505,2098241,2105601]), - new Uint32Array([2097217,2097505,2097505,2097505,2097505,2165570,2165570,2165634,2165634,2165698,2165698,2097858,2097858,0,0,2097152]), - new Uint32Array([23068672,6291456,23068672,23068672,23068672,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,23068672,23068672]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([10503843,10503939,10504035,10504131,10504227,10504323,10504419,10504515,10504611,10504707,10504803,10504899,10504995,10491140,10491268,0]), - new Uint32Array([2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2134145,2097153,2134241,2105953,2132705,2130977,2160065,2131297,2162049,2133089,2160577,2133857,2235297,2220769,2235329,2235361]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2222401,2222433,2222465,10531394,2222497,2222529,2222561,0,2222593,2222625,2222657,2222689,2222721,2222753,2222785,0]), - new Uint32Array([2184481,6291456,2184513,6291456,2184545,6291456,2184577,6291456,2184609,6291456,2184641,6291456,2184673,6291456,2184705,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2105570,2156034,2126947,2156098,2153666,2127043,2127139,2156162,0,2127235,2156226,2156290,2156354,2156418,2127331,2127427]), - new Uint32Array([2215905,2207041,2153185,2241569,2241601,2241633,2241665,2241697,2241730,2241793,2241825,2241857,2241889,2241921,2241954,2242017]), - new Uint32Array([2203777,6291456,2203809,6291456,2203841,6291456,2203873,6291456,2203905,6291456,2173121,2180993,2181249,2203937,2181313,0]), - new Uint32Array([2168577,6291456,2168609,6291456,2168641,6291456,2168673,6291456,2168705,6291456,2168737,6291456,2168769,6291456,2168801,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,23068672,23068672,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,0,0]), - new Uint32Array([2210113,2195521,2210145,2210177,2210209,2210241,2210273,2210305,2210337,2210369,2210401,2210433,2210465,2210497,2210529,2210561]), - new Uint32Array([6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([2228706,2228770,2228834,2228898,2228962,2229026,2229090,2229154,2229218,2229282,2229346,2229410,2229474,2229538,2229602,2229666]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,18874368,18874368,18874368,0,0]), - new Uint32Array([2133089,2133281,2133281,2133281,2133281,2160577,2160577,2160577,2160577,2097441,2097441,2097441,2097441,2133857,2133857,2133857]), - new Uint32Array([6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089]), - new Uint32Array([2178529,6291456,2178561,6291456,2178593,6291456,2178625,6291456,2178657,6291456,2178689,6291456,2178721,6291456,2178753,6291456]), - new Uint32Array([2221025,2221025,2221057,2221057,2159329,2159329,2159329,2159329,2097217,2097217,2158914,2158914,2158978,2158978,2159042,2159042]), - new Uint32Array([2208161,2208193,2208225,2208257,2194433,2208289,2208321,2208353,2208385,2208417,2208449,2208481,2208513,2208545,2208577,2208609]), - new Uint32Array([2169217,6291456,2169249,6291456,2169281,6291456,2169313,6291456,2169345,6291456,2169377,6291456,2169409,6291456,2169441,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([2133187,2133283,2133283,2133379,2133475,2133571,2133667,2133667,2133763,2133859,2133955,2134051,2134147,2134147,2134243,2134339]), - new Uint32Array([2197697,2114113,2114209,2197729,2197761,2114305,2197793,2114401,2114497,2197825,2114593,2114689,2114785,2114881,2114977,0]), - new Uint32Array([2193089,2193121,2193153,2193185,2117665,2117569,2193217,2193249,2193281,2193313,2193345,2193377,2193409,2193441,2193473,2193505]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2184225,6291456,2184257,6291456,2184289,6291456,2184321,6291456,2184353,6291456,2184385,6291456,2184417,6291456,2184449,6291456]), - new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2100833,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2098657,2098049,2200737,2123489,2123681,2200769,2098625,2100321,2098145,2100449,2098017,2098753,2200801,2200833,2200865,0]), - new Uint32Array([23068672,23068672,23068672,0,0,0,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,0,2098241,2108353,2108417,2105825,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2181153,2105505,2181185,2167617,2180993]), - new Uint32Array([2160002,2160066,2160130,2160194,2160258,2132066,2131010,2131106,2106018,2131618,2160322,2131298,2132034,2131938,2137410,2132226]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,6291456]), - new Uint32Array([2183617,6291456,2183649,6291456,2183681,6291456,2183713,6291456,2183745,6291456,2183777,6291456,2183809,6291456,2183841,6291456]), - new Uint32Array([0,6291456,6291456,0,6291456,0,0,6291456,6291456,0,6291456,0,0,6291456,0,0]), - new Uint32Array([2250977,2251009,2251041,2251073,2195009,2251106,2251169,2251201,2251233,2251265,2251297,2251330,2251394,2251457,2251489,2251521]), - new Uint32Array([2205729,2205761,2205793,2205825,2205857,2205889,2205921,2205953,2205985,2206017,2206049,2206081,2206113,2206145,2206177,2206209]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2143170,2168993,6291456,2169025,6291456,2169057,6291456,2169089,6291456,2143234,2169121,6291456,2169153,6291456,2169185,6291456]), - new Uint32Array([23068672,23068672,2190689,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2248706,2248769,2248801,2248833,2248865,2248897,2248929,2248962,2249026,2249090,2249154,2240705,2249217,2249249,2249281,2249313]), - new Uint32Array([10485857,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10495394,6291456,2098209,6291456,6291456,2097152,6291456,10531394]), - new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([14680064,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2173985,2173953,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889]), - new Uint32Array([6291456,2186977,6291456,6291456,6291456,6291456,6291456,10537858,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2209601,2209633,2209665,2209697,2209729,2209761,2209793,2209825,2209857,2209889,2209921,2209953,2209985,2210017,2210049,2210081]), - new Uint32Array([10501539,10501635,10501731,10501827,10501923,10502019,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905]), - new Uint32Array([2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2194561,2194593,2194625,2119777,2119873,2194657,2194689,2194721,2194753,2194785,2194817,2194849,2194881,2194913,2194945,2194977]), - new Uint32Array([2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569]), - new Uint32Array([2222818,2222882,2222946,2223010,2223074,2223138,2223202,2223266,2223330,2223394,2223458,2223522,2223586,2223650,2223714,2223778]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672]), - new Uint32Array([0,2179553,2179585,2179617,2179649,2144001,2179681,2179713,2179745,2179777,2179809,2156705,2179841,2156833,2179873,2179905]), - new Uint32Array([6291456,23068672,6291456,2145602,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,6291456,0,0]), - new Uint32Array([2196513,2196545,2196577,2196609,2196641,2196673,2196705,2196737,2196769,2196801,2196833,2196865,2196897,2196929,2196961,2196993]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2177281,6291456,2177313,6291456,2177345,6291456,2177377,6291456,2177409,6291456,2177441,6291456,2177473,6291456,2177505,6291456]), - new Uint32Array([2187137,2221473,2221505,2221537,2221569,6291456,6291456,10610209,10610241,10537986,10537986,10537986,10537986,10609857,10609857,10609857]), - new Uint32Array([2243009,2243041,2216033,2243074,2243137,2243169,2243201,2219617,2243233,2243265,2243297,2243329,2243362,2243425,2243457,2243489]), - new Uint32Array([10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,2097152,4194304,4194304,0,0]), - new Uint32Array([2143042,6291456,2143106,2143106,2168833,6291456,2168865,6291456,6291456,2168897,6291456,2168929,6291456,2168961,6291456,2143170]), - new Uint32Array([6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2204193,2204225,2204257,2204289,2204321,2204353,2204385,2204417,2204449,2204481,2204513,2204545,2204577,2204609,2204641,2204673]), - new Uint32Array([2202753,6291456,2202785,6291456,2202817,6291456,2202849,6291456,2202881,6291456,2202913,6291456,2202945,6291456,2202977,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321]), - new Uint32Array([2147394,2147458,2147522,2147586,2147650,2147714,2147778,2147842,2147394,2147458,2147522,2147586,2147650,2147714,2147778,2147842]), - new Uint32Array([2253313,2253346,2253409,2253441,2253473,2253505,2253537,2253569,2253601,2253634,2219393,2253697,2253729,2253761,2253793,2253825]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([2162562,2162626,2131362,2162690,2159938,2160002,2162754,2162818,2160130,2162882,2160194,2160258,2160834,2160898,2161026,2161090]), - new Uint32Array([2175361,2175393,2175425,2175457,2175489,2175521,2175553,2175585,2175617,2175649,2175681,2175713,2175745,2175777,2175809,2175841]), - new Uint32Array([2253858,2253921,2253954,2254018,2254082,2196737,2254145,2196865,2254177,2254209,2254241,2254273,2197025,2254306,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2202113,2204129,2188705,2204161]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953]), - new Uint32Array([2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209]), - new Uint32Array([2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,0,2108417,0,2111713,2100897,2111905]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0]), - new Uint32Array([2175425,2175489,2175809,2175905,2175937,2175937,2176193,2176417,2180865,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,2143298,2143298,2143298,2143362,2143362,2143362,2143426,2143426,2143426,2171105,6291456,2171137]), - new Uint32Array([2120162,2120258,2151618,2151682,2151746,2151810,2151874,2151938,2152002,2120035,2120131,2120227,2152066,2120323,2152130,2120419]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2195361,2142433,2236065,2236097,2236129,2236161,2118241,2117473,2236193,2236225,2236257,2236289,0,0,0,0]), - new Uint32Array([2189281,6291456,2189313,6291456,2189345,6291456,2189377,6291456,2189409,6291456,2189441,6291456,2189473,6291456,2189505,6291456]), - new Uint32Array([6291456,6291456,2145922,6291456,6291456,6291456,6291456,2145986,6291456,6291456,6291456,6291456,2146050,6291456,6291456,6291456]), - new Uint32Array([2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,10502113,10562017,10610401,10502177,10610433,10538049]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,2186401,0,2186433,0,2186465,0,2186497]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,23068672,23068672,23068672]), - new Uint32Array([0,0,2198241,2198273,2198305,2198337,2198369,2198401,0,0,2198433,2198465,2198497,0,0,0]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,6291456,0,23068672,23068672,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]), - new Uint32Array([0,2105921,2097729,0,2097377,0,0,2106017,2133281,2097505,2105889,0,2097697,2135777,2097633,2097441]), - new Uint32Array([2197889,2197921,2197953,2197985,2198017,2198049,2198081,2198113,2198145,2198177,2198209,2198241,2198273,2198305,2198337,2198369]), - new Uint32Array([2132514,2132610,2160386,2133090,2133186,2160450,2160514,2133282,2160578,2133570,2106178,2160642,2133858,2160706,2160770,2134146]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,23068672,6291456,23068672,23068672,6291456,23068672,0,0,0,0,0,0,0,0]), - new Uint32Array([2184737,6291456,2184769,6291456,2184801,6291456,2184833,6291456,2184865,6291456,2184897,6291456,2184929,6291456,2184961,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,2186753,6291456,6291456,6291456,6291456,2186785,2186817,2186849,2173569,2186881,10496355,10495395,10575521]), - new Uint32Array([0,0,2097729,0,0,0,0,2106017,0,2097505,0,2097185,0,2135777,2097633,2097441]), - new Uint32Array([2189537,6291456,2189569,6291456,2189601,6291456,2189633,6291456,2189665,6291456,2189697,6291456,2189729,6291456,2189761,6291456]), - new Uint32Array([2202497,6291456,2202529,6291456,2202561,6291456,2202593,6291456,2202625,6291456,2202657,6291456,2202689,6291456,2202721,6291456]), - new Uint32Array([2245217,2218369,2245249,2245282,2245345,2245377,2245410,2245474,2245537,2245569,2245601,2245633,2245665,2245665,2245697,2245729]), - new Uint32Array([6291456,0,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,0,0,0,0,0,0,23068672,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,6291456,23068672,6291456,23068672,6291456,6291456,6291456,6291456,23068672,23068672]), - new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2097281,2105921,2097729,2106081,2097377,2097601,2162337,2106017,2133281,2097505,0,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([2176641,6291456,2176673,6291456,2176705,6291456,2176737,6291456,2176769,6291456,2176801,6291456,2176833,6291456,2176865,6291456]), - new Uint32Array([2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953,2174369,2174369,0,0,2100833,2100737]), - new Uint32Array([2116513,2190817,2190849,2190881,2190913,2190945,2116609,2190977,2191009,2191041,2191073,2117185,2191105,2191137,2191169,2191201]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456]), - new Uint32Array([0,0,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456]), - new Uint32Array([2167617,2167649,2167681,2167713,2167745,2167777,2167809,6291456,2167841,2167873,2167905,2167937,2167969,2168001,2168033,4240130]), - new Uint32Array([2165122,2163970,2164034,2164098,2164162,2164226,2164290,2164354,2164418,2164482,2164546,2133122,2134562,2132162,2132834,2136866]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2186209,2186241,2186273,2186305,2186337,2186369,0,0]), - new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([0,0,23068672,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456]), - new Uint32Array([0,10537921,10610689,10610273,10610497,10610529,10610305,10610721,10489601,10489697,10610337,10575617,10554529,2221761,2197217,10496577]), - new Uint32Array([2105473,2105569,2105601,2112289,0,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441]), - new Uint32Array([2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481]), - new Uint32Array([2125346,2153410,2153474,2127394,2153538,2153602,2153666,2153730,2105507,2105476,2153794,2153858,2153922,2153986,2154050,2105794]), - new Uint32Array([2200449,2119681,2200481,2153313,2199873,2199905,2199937,2200513,2200545,2200577,2200609,2119105,2119201,2119297,2119393,2119489]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2175777,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2222273,2197217,2221473,2221505,2221089,2222305,2200865,2099681,2104481,2222337,2099905,2120737,2222369,2103713,2100225,2098785]), - new Uint32Array([2201377,6291456,2201409,6291456,2201441,6291456,2201473,6291456,2201505,6291456,2201537,6291456,2201569,6291456,6291456,23068672]), - new Uint32Array([2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793]), - new Uint32Array([2200897,6291456,2200929,6291456,2200961,6291456,2200993,6291456,2201025,6291456,2180865,6291456,2201057,6291456,2201089,6291456]), - new Uint32Array([0,0,0,0,0,23068672,23068672,0,6291456,6291456,6291456,0,0,0,0,0]), - new Uint32Array([2161154,2161410,2138658,2161474,2161538,2097666,2097186,2097474,2162946,2132450,2163010,2163074,2136162,2163138,2161666,2161730]), - new Uint32Array([2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953]), - new Uint32Array([0,0,0,0,0,0,23068672,23068672,0,0,0,0,2145410,2145474,0,6291456]), - new Uint32Array([2244161,2216065,2212769,2244193,2244225,2244257,2244290,2244353,2244385,2244417,2244449,2218273,2244481,2244514,2244577,2244609]), - new Uint32Array([2125730,2125699,2125795,2125891,2125987,2154114,2154178,2154242,2154306,2154370,2154434,2154498,2126082,2126178,2126274,2126083]), - new Uint32Array([2237665,2237697,2237697,2237697,2237730,2237793,2237825,2237857,2237890,2237953,2237985,2238017,2238049,2238081,2238113,2238145]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2150146,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,0,0,23068672,23068672,23068672,0,0]), - new Uint32Array([2214369,2238593,2238625,2238657,2238689,2238721,2238753,2238785,2238817,2238850,2238913,2238945,2238977,2235457,2239009,2239041]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([2252066,2252130,2252193,2252225,2252257,2252290,2252353,2252385,2252417,2252449,2252481,2252513,2252545,2252578,2252641,2252673]), - new Uint32Array([2197697,2114113,2114209,2197729,2197761,2114305,2197793,2114401,2114497,2197825,2114593,2114689,2114785,2114881,2114977,2197857]), - new Uint32Array([2224866,2224930,2224994,2225058,2225122,2225186,2225250,2225314,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2219490,2219554,2219617,2219649,2219681,2219714,2219778,2219842,2219905,2219937,0,0,0,0,0,0]), - new Uint32Array([6291456,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]), - new Uint32Array([2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289]), - new Uint32Array([2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953,2148481,2173601,2173633,2173665]), - new Uint32Array([2220161,2220161,2220193,2220193,2220193,2220193,2220225,2220225,2220225,2220225,2220257,2220257,2220257,2220257,2220289,2220289]), - new Uint32Array([2192673,2192705,2192737,2192769,2192801,2192833,2192865,2118049,2192897,2117473,2117761,2192929,2192961,2192993,2193025,2193057]), - new Uint32Array([2179297,6291456,2179329,6291456,2179361,6291456,2179393,6291456,2179425,6291456,2179457,6291456,2179489,6291456,2179521,6291456]), - new Uint32Array([6291456,6291456,6291456,23068672,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2235745,2235777,2193633,2235809,2235841,2235873,2235905,2235937,2235969,2116513,2116705,2236001,2200513,2199905,2200545,2236033]), - new Uint32Array([2113153,2108481,2113345,2113441,2232993,2233025,0,0,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761]), - new Uint32Array([2170593,6291456,2170625,6291456,2170657,6291456,2170689,2170721,6291456,2170753,6291456,6291456,2170785,6291456,2170817,2170849]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2166786,2166850,0,0,0,0]), - new Uint32Array([23068672,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,10575617,2187041,10502177,10489601,10489697,0]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2134562,2132162,2132834,2136866,2136482,2164610,2164674,2164738,2164802,2132802,2132706,2164866,2132898,2164930,2164994,2165058]), - new Uint32Array([6291456,6291456,2098337,2101441,10531458,2153473,6291456,6291456,10531522,2100737,2108193,6291456,2106499,2106595,2106691,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2233122,2233186,2233250,2233314,2233378,2233442,2233506,2233570,2233634,2233698,2233762,2233826,2233890,2233954,2234018,2234082]), - new Uint32Array([23068672,6291456,23068672,23068672,23068672,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2205217,2205249,2205281,2205313,2205345,2205377,2205409,2205441,2205473,2205505,2205537,2205569,2205601,2205633,2205665,2205697]), - new Uint32Array([6291456,0,6291456,0,0,0,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]), - new Uint32Array([2173601,2173761,2174081,2173569,2174241,2174113,2173953,6291456,2174305,6291456,2174337,6291456,2174369,6291456,2174401,6291456]), - new Uint32Array([6291456,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2152450,2152514,2099653,2104452,2099813,2122243,2099973,2152578,2122339,2122435,2122531,2122627,2122723,2104580,2122819,2152642]), - new Uint32Array([2236385,2236417,2236449,2236482,2236545,2215425,2236577,2236609,2236641,2236673,2215457,2236705,2236737,2236770,2215489,2236833]), - new Uint32Array([2163394,2159746,2163458,2131362,2163522,2160130,2163778,2132226,2163842,2132898,2163906,2161410,2138658,2097666,2136162,2163650]), - new Uint32Array([2218721,2246913,2246946,2216385,2247010,2247074,2215009,2247137,2247169,2216481,2247201,2247233,2247266,2247330,2247330,0]), - new Uint32Array([2129730,2129762,2129858,2129731,2129827,2156482,2156482,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,0,0,0,0,6291456,0,0]), - new Uint32Array([2203969,2204001,2181377,2204033,2204065,6291456,2204097,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([2169473,6291456,2169505,6291456,2169537,6291456,2169569,6291456,2169601,6291456,2169633,6291456,2169665,6291456,2169697,6291456]), - new Uint32Array([2141542,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2220801,2220801,2220801,2220801,2220833,2220833,2220865,2220865,2220865,2220865,2220897,2220897,2220897,2220897,2139873,2139873]), - new Uint32Array([0,0,0,0,0,23068672,23068672,0,0,0,0,0,0,0,6291456,0]), - new Uint32Array([2214849,2218433,2218465,2218497,2218529,2218561,2214881,2218593,2218625,2218657,2218689,2218721,2218753,2216545,2218785,2218817]), - new Uint32Array([23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,6291456]), - new Uint32Array([2136482,2164610,2164674,2164738,2164802,2132802,2132706,2164866,2132898,2164930,2164994,2165058,2165122,2132802,2132706,2164866]), - new Uint32Array([2207649,2207681,2207713,2207745,2207777,2207809,2207841,2207873,2207905,2207937,2207969,2208001,2208033,2208065,2208097,2208129]), - new Uint32Array([2123683,2105092,2152706,2123779,2105220,2152770,2100453,2098755,2123906,2124002,2124098,2124194,2124290,2124386,2124482,2124578]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,6291456,0,0,0,0,0,0,0,10485857]), - new Uint32Array([6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([10508163,10508259,10508355,10508451,2200129,2200161,2192737,2200193,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2203553,6291456,2203585,6291456,6291456,6291456,2203617,6291456,2203649,6291456,2203681,6291456,2203713,6291456,2203745,6291456]), - new Uint32Array([18884449,18884065,23068672,18884417,18884034,18921185,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,18874368]), - new Uint32Array([2247393,2247426,2247489,2247521,2247553,2247586,2247649,2247681,2247713,2247745,2247777,2247810,2247873,2247905,2247937,2247969]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672]), - new Uint32Array([2134145,2097153,2134241,0,2132705,2130977,2160065,2131297,0,2133089,2160577,2133857,2235297,0,2235329,0]), - new Uint32Array([2182593,6291456,2182625,6291456,2182657,6291456,2182689,6291456,2182721,6291456,2182753,6291456,2182785,6291456,2182817,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2102402,2102403,6291456,2110050]), - new Uint32Array([2149890,2108323,2149954,6291456,2113441,6291456,2149057,6291456,2113441,6291456,2105473,2167265,2111137,2105505,6291456,2108353]), - new Uint32Array([2219105,2219137,2195233,2251554,2251617,2251649,2251681,2251713,2251746,2251810,2251873,2251905,2251937,2251970,2252033,2219169]), - new Uint32Array([2203009,6291456,2203041,6291456,2203073,6291456,2203105,6291456,2203137,6291456,2203169,6291456,2203201,6291456,2203233,6291456]), - new Uint32Array([2128195,2128291,2128387,2128483,2128579,2128675,2128771,2128867,2128963,2129059,2129155,2129251,2129347,2129443,2129539,2129635]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2140964,2141156,2140966,2141158,2141350]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2225378,2225442,2225506,2225570,2225634,2225698,2225762,2225826,2225890,2225954,2226018,2226082,2226146,2226210,2226274,2226338]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417]), - new Uint32Array([2108353,2108417,0,2105601,2108193,2157121,2157313,2157377,2157441,2100897,6291456,2108419,2173953,2173633,2173633,2173953]), - new Uint32Array([2111713,2173121,2111905,2098177,2173153,2173185,2173217,2113153,2113345,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,2190753]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,2197249,6291456,2117377,2197281,2197313,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,0,0,0,0,0,0,23068672,0,0,0,0,0,6291456,6291456,6291456]), - new Uint32Array([2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0]), - new Uint32Array([0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,23068672,23068672,23068672]), - new Uint32Array([2173281,6291456,2173313,6291456,2173345,6291456,2173377,6291456,0,0,10532546,6291456,6291456,6291456,10562017,2173441]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0]), - new Uint32Array([23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2159426,2159490,2159554,2159362,2159618,2159682,2139522,2136450,2159746,2159810,2159874,2130978,2131074,2131266,2131362,2159938]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2203233,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2203265,6291456,2203297,6291456,2203329,2203361,6291456]), - new Uint32Array([6291456,6291456,2148418,2148482,2148546,0,6291456,2148610,2186529,2186561,2148417,2148545,2148482,10495778,2143969,10495778]), - new Uint32Array([2134146,2139426,2160962,2134242,2161218,2161282,2161346,2161410,2138658,2134722,2134434,2134818,2097666,2097346,2097698,2105986]), - new Uint32Array([2198881,2198913,2198945,2198977,2199009,2199041,2199073,2199105,2199137,2199169,2199201,2199233,2199265,2199297,2199329,2199361]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([10610561,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]), - new Uint32Array([2183873,6291456,2183905,6291456,2183937,6291456,2183969,6291456,2184001,6291456,2184033,6291456,2184065,6291456,2184097,6291456]), - new Uint32Array([2244642,2244706,2244769,2244801,2218305,2244833,2244865,2244897,2244929,2244961,2244993,2245026,2245089,2245122,2245185,0]), - new Uint32Array([6291456,6291456,2116513,2116609,2116705,2116801,2199873,2199905,2199937,2199969,2190913,2200001,2200033,2200065,2200097,2191009]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2180673,2180705,2180737,2180769,2180801,2180833,0,0]), - new Uint32Array([2098081,2099521,2099105,2120705,2098369,2120801,2103361,2097985,2098433,2121377,2121473,2099169,2099873,2098401,2099393,2152609]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2150402]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,2145666,2145730,6291456,6291456]), - new Uint32Array([2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665]), - new Uint32Array([2187073,6291456,6291456,6291456,6291456,2098241,2098241,2108353,2100897,2111905,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2102404,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,2100612,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10485857]), - new Uint32Array([2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889]), - new Uint32Array([2217697,2217729,2217761,2217793,2217825,2217857,2217889,2217921,2217953,2215873,2217985,2215905,2218017,2218049,2218081,2218113]), - new Uint32Array([2211233,2218849,2216673,2218881,2218913,2218945,2218977,2219009,2216833,2219041,2215137,2219073,2216865,2209505,2219105,2216897]), - new Uint32Array([2240097,2240129,2240161,2240193,2240225,2240257,2240289,2240321,2240353,2240386,2240449,2240481,2240513,2240545,2207905,2240578]), - new Uint32Array([6291456,6291456,2202273,6291456,2202305,6291456,2202337,6291456,2202369,6291456,2202401,6291456,2202433,6291456,2202465,6291456]), - new Uint32Array([0,23068672,23068672,18923394,23068672,18923458,18923522,18884099,18923586,18884195,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2201121,6291456,2201153,6291456,2201185,6291456,2201217,6291456,2201249,6291456,2201281,6291456,2201313,6291456,2201345,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456]), - new Uint32Array([2211041,2211073,2211105,2211137,2211169,2211201,2211233,2211265,2211297,2211329,2211361,2211393,2211425,2211457,2211489,2211521]), - new Uint32Array([2181825,6291456,2181857,6291456,2181889,6291456,2181921,6291456,2181953,6291456,2181985,6291456,2182017,6291456,2182049,6291456]), - new Uint32Array([2162337,2097633,2097633,2097633,2097633,2132705,2132705,2132705,2132705,2097153,2097153,2097153,2097153,2133089,2133089,2133089]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,2148545,6291456,2173473,6291456,2148865,6291456,2173505,6291456,2173537,6291456,2173569,6291456,2149121,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2207137,2207169,2207201,2207233,2207265,2207297,2207329,2207361,2207393,2207425,2207457,2207489,2207521,2207553,2207585,2207617]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,6291456,0,23068672,23068672,0,0,0,0,0,0]), - new Uint32Array([2198401,2198433,2198465,2198497,0,2198529,2198561,2198593,2198625,2198657,2198689,2198721,2198753,2198785,2198817,2198849]), - new Uint32Array([2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0,0]), - new Uint32Array([2216385,2118721,2216417,2216449,2216481,2216513,2216545,2211233,2216577,2216609,2216641,2216673,2216705,2216737,2216737,2216769]), - new Uint32Array([2216801,2216833,2216865,2216897,2216929,2216961,2216993,2215169,2217025,2217057,2217089,2217121,2217154,2217217,0,0]), - new Uint32Array([2210593,2191809,2210625,2210657,2210689,2210721,2210753,2210785,2210817,2210849,2191297,2210881,2210913,2210945,2210977,2211009]), - new Uint32Array([0,0,2105825,0,0,2111905,2105473,0,0,2112289,2108193,2112481,2112577,0,2098305,2108321]), - new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,2097153,2134241,0,2132705,0,0,2131297,0,2133089,0,2133857,0,2220769,0,2235361]), - new Uint32Array([14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,6291456,6291456,14680064]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([2171873,6291456,2171905,6291456,2171937,6291456,2171969,6291456,2172001,6291456,2172033,6291456,2172065,6291456,2172097,6291456]), - new Uint32Array([2220929,2220929,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2133857,2134145,2134145,2134145,2134145,2134241,2134241,2134241,2134241,2105889,2105889,2105889,2105889,2097185,2097185,2097185]), - new Uint32Array([2173697,2173761,2173793,2174113,2173985,2173953,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,10499619,10499715,10499811,10499907]), - new Uint32Array([0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,0,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,2144322,2144386,2144450,2144514,2144578,2144642,2144706,2144770]), - new Uint32Array([23068672,23068672,23068672,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456]), - new Uint32Array([2113153,2108481,2113345,2113441,2098209,2111137,0,2098241,2108353,2108417,2105825,0,0,2111905,2105473,2105569]), - new Uint32Array([2236321,2236353,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2152194,2121283,2103684,2103812,2097986,2098533,2097990,2098693,2098595,2098853,2099013,2103940,2121379,2121475,2121571,2104068]), - new Uint32Array([2206241,2206273,2206305,2206337,2206369,2206401,2206433,2206465,2206497,2206529,2206561,2206593,2206625,2206657,2206689,2206721]), - new Uint32Array([6291456,6291456,6291456,6291456,16777216,16777216,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,23068672,23068672,10538818,10538882,6291456,6291456,2150338]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2214369,2214401,2214433,2214465,2214497,2214529,2214561,2214593,2194977,2214625,2195073,2214657,2214689,2214721,6291456,6291456]), - new Uint32Array([2097152,2097152,2097152,2097152,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2182081,6291456,2182113,6291456,2182145,6291456,2182177,6291456,2182209,6291456,2182241,6291456,2182273,6291456,2182305,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2146881,2146945,2147009,2147073,2147137,2147201,2147265,2147329]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,23068672,23068672]), - new Uint32Array([0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2122915,2123011,2123107,2104708,2123203,2123299,2123395,2100133,2104836,2100290,2100293,2104962,2104964,2098052,2123491,2123587]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([6291456,2171169,6291456,2171201,6291456,2171233,6291456,2171265,6291456,2171297,6291456,2171329,6291456,6291456,2171361,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,2148994,2149058,2149122,0,6291456,2149186,2186945,2173537,2148993,2149121,2149058,10531458,10496066,0]), - new Uint32Array([2195009,2195041,2195073,2195105,2195137,2195169,2195201,2195233,2195265,2195297,2195329,2195361,2195393,2195425,2195457,2195489]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,0,0,6291456,6291456]), - new Uint32Array([2182849,6291456,2182881,6291456,2182913,6291456,2182945,6291456,2182977,6291456,2183009,6291456,2183041,6291456,2183073,6291456]), - new Uint32Array([2211553,2210081,2211585,2211617,2211649,2211681,2211713,2211745,2211777,2211809,2209569,2211841,2211873,2211905,2211937,2211969]), - new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2166594,2127298,2166658,2142978,2141827,2166722]), - new Uint32Array([2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2185761,2185793,2185825,2185857,2185889,2185921,0,0]), - new Uint32Array([6291456,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,6291456]), - new Uint32Array([0,0,0,2220961,2220961,2220961,2220961,2144193,2144193,2159201,2159201,2159265,2159265,2144194,2220993,2220993]), - new Uint32Array([2192641,2235393,2235425,2152257,2116609,2235457,2235489,2200065,2235521,2235553,2235585,2212449,2235617,2235649,2235681,2235713]), - new Uint32Array([2194049,2194081,2194113,2194145,2194177,2194209,2194241,2194273,2194305,2194337,2194369,2194401,2194433,2194465,2194497,2194529]), - new Uint32Array([2196673,2208641,2208673,2208705,2208737,2208769,2208801,2208833,2208865,2208897,2208929,2208961,2208993,2209025,2209057,2209089]), - new Uint32Array([2191681,2191713,2191745,2191777,2153281,2191809,2191841,2191873,2191905,2191937,2191969,2192001,2192033,2192065,2192097,2192129]), - new Uint32Array([2230946,2231010,2231074,2231138,2231202,2231266,2231330,2231394,2231458,2231522,2231586,2231650,2231714,2231778,2231842,2231906]), - new Uint32Array([14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2185953,2185985,2186017,2186049,2186081,2186113,2186145,2186177]), - new Uint32Array([2139811,2139907,2097284,2105860,2105988,2106116,2106244,2097444,2097604,2097155,10485778,10486344,2106372,6291456,0,0]), - new Uint32Array([2110051,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2172385,6291456,2172417,6291456,2172449,6291456,2172481,6291456,2172513,6291456,2172545,6291456,2172577,6291456,2172609,6291456]), - new Uint32Array([0,0,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2249345,2249377,2249409,2249441,2249473,2249505,2249537,2249570,2210209,2249633,2249665,2249697,2249729,2249761,2249793,2216769]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([2187169,2187201,2187233,2187265,2187297,2187329,2187361,2187393,2187425,2187457,2187489,2187521,2187553,2187585,2187617,2187649]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,0,6291456,6291456,0,0,0,6291456,6291456,6291456,0,0,0,6291456,6291456]), - new Uint32Array([2182337,6291456,2182369,6291456,2182401,6291456,2182433,6291456,2182465,6291456,2182497,6291456,2182529,6291456,2182561,6291456]), - new Uint32Array([2138179,2138275,2138371,2138467,2134243,2134435,2138563,2138659,2138755,2138851,2138947,2139043,2138947,2138755,2139139,2139235]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([0,0,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2250498,2250562,2250625,2250657,2208321,2250689,2250721,2250753,2250785,2250817,2250849,2218945,2250881,2250913,2250945,0]), - new Uint32Array([2170369,2105569,2098305,2108481,2173249,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]), - new Uint32Array([2100897,2111905,2105473,2105569,2105601,0,2108193,0,0,0,2098305,2108321,2108289,2100865,2113153,2108481]), - new Uint32Array([2100897,2100897,2105569,2105569,6291456,2112289,2149826,6291456,6291456,2112481,2112577,2098177,2098177,2098177,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,6291456,6291456,6291456]), - new Uint32Array([6291456,2169953,2169985,6291456,2170017,6291456,2170049,2170081,6291456,2170113,2170145,2170177,6291456,6291456,2170209,2170241]), - new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2220641,2220641,2220673,2220673,2220673,2220673,2220705,2220705,2220705,2220705,2220737,2220737,2220737,2220737,2220769,2220769]), - new Uint32Array([2127650,2127746,2127842,2127938,2128034,2128130,2128226,2128322,2128418,2127523,2127619,2127715,2127811,2127907,2128003,2128099]), - new Uint32Array([2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177]), - new Uint32Array([0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2204705,2204737,2204769,2204801,2204833,2204865,2204897,2204929,2204961,2204993,2205025,2205057,2205089,2205121,2205153,2205185]), - new Uint32Array([2176385,6291456,2176417,6291456,2176449,6291456,2176481,6291456,2176513,6291456,2176545,6291456,2176577,6291456,2176609,6291456]), - new Uint32Array([2195521,2195553,2195585,2195617,2195649,2195681,2117857,2195713,2195745,2195777,2195809,2195841,2195873,2195905,2195937,2195969]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456]), - new Uint32Array([2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113]), - new Uint32Array([2131586,2132450,2135970,2135778,2161602,2136162,2163650,2161794,2135586,2163714,2137186,2131810,2160290,2135170,2097506,2159554]), - new Uint32Array([2134145,2097153,2134241,2105953,2132705,2130977,2160065,2131297,2162049,2133089,2160577,2133857,0,0,0,0]), - new Uint32Array([2116513,2116609,2116705,2116801,2116897,2116993,2117089,2117185,2117281,2117377,2117473,2117569,2117665,2117761,2117857,2117953]), - new Uint32Array([2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100802,2101154,2101282,2101410,2101538,2101666,2101794]), - new Uint32Array([2100289,2098657,2098049,2200737,2123489,2123681,2200769,2098625,2100321,2098145,2100449,2098017,2098753,2098977,2150241,2150305]), - new Uint32Array([6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,2109955,6291456,6291456,0,0,0,0]), - new Uint32Array([18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,0,0]), - new Uint32Array([2130979,2131075,2131075,2131171,2131267,2131363,2131459,2131555,2131651,2131651,2131747,2131843,2131939,2132035,2132131,2132227]), - new Uint32Array([0,2177793,6291456,2177825,6291456,2177857,6291456,2177889,6291456,2177921,6291456,2177953,6291456,2177985,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2113345,0,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289]), - new Uint32Array([2136643,2136739,2136835,2136931,2137027,2137123,2137219,2137315,2137411,2137507,2137603,2137699,2137795,2137891,2137987,2138083]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([2174433,6291456,2174465,6291456,2174497,6291456,2174529,6291456,2174561,6291456,2174593,6291456,2174625,6291456,2174657,6291456]), - new Uint32Array([0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441]), - new Uint32Array([10496547,10496643,2105505,2149698,6291456,10496739,10496835,2170273,6291456,2149762,2105825,2111713,2111713,2111713,2111713,2168673]), - new Uint32Array([6291456,2143490,2143490,2143490,2171649,6291456,2171681,2171713,2171745,6291456,2171777,6291456,2171809,6291456,2171841,6291456]), - new Uint32Array([2159106,2159106,2159170,2159170,2159234,2159234,2159298,2159298,2159298,2159362,2159362,2159362,2106401,2106401,2106401,2106401]), - new Uint32Array([2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137]), - new Uint32Array([2108417,2181217,2181249,2181281,2170433,2170401,2181313,2181345,2181377,2181409,2181441,2181473,2181505,2181537,2170529,2181569]), - new Uint32Array([2218433,2245761,2245793,2245825,2245857,2245890,2245953,2245986,2209665,2246050,2246113,2246146,2246210,2246274,2246337,2246369]), - new Uint32Array([2230754,2230818,2230882,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2184129,6291456,2184161,6291456,2184193,6291456,6291456,6291456,6291456,6291456,2146818,2183361,6291456,6291456,2142978,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2135170,2097506,2130691,2130787,2130883,2163970,2164034,2164098,2164162,2164226,2164290,2164354,2164418,2164482,2164546,2133122]), - new Uint32Array([2108515,2108611,2100740,2108707,2108803,2108899,2108995,2109091,2109187,2109283,2109379,2109475,2109571,2109667,2109763,2100738]), - new Uint32Array([2102788,2102916,2103044,2120515,2103172,2120611,2120707,2098373,2103300,2120803,2120899,2120995,2103428,2103556,2121091,2121187]), - new Uint32Array([2158082,2158146,0,2158210,2158274,0,2158338,2158402,2158466,2129922,2158530,2158594,2158658,2158722,2158786,2158850]), - new Uint32Array([10499619,10499715,10499811,10499907,10500003,10500099,10500195,10500291,10500387,10500483,10500579,10500675,10500771,10500867,10500963,10501059]), - new Uint32Array([2239585,2239618,2239681,2239713,0,2191969,2239745,2239777,2192033,2239809,2239841,2239874,2239937,2239970,2240033,2240065]), - new Uint32Array([2252705,2252738,2252801,2252833,2252865,2252897,2252930,2252994,2253057,2253089,2253121,2253154,2253217,2253250,2219361,2219361]), - new Uint32Array([2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,10538050,10538114,10538178,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2226402,2226466,2226530,2226594,2226658,2226722,2226786,2226850,2226914,2226978,2227042,2227106,2227170,2227234,2227298,2227362]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,2144066,2144130,2144194,2144258,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([2124674,2124770,2123875,2123971,2124067,2124163,2124259,2124355,2124451,2124547,2124643,2124739,2124835,2124931,2125027,2125123]), - new Uint32Array([2168065,6291456,2168097,6291456,2168129,6291456,2168161,6291456,2168193,6291456,2168225,6291456,2168257,6291456,2168289,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,2100610,2100611,6291456,2107842,2107843,6291456,6291456,6291456,6291456,10537922,6291456,10537986,6291456]), - new Uint32Array([2174849,2174881,2174913,2174945,2174977,2175009,2175041,2175073,2175105,2175137,2175169,2175201,2175233,2175265,2175297,2175329]), - new Uint32Array([2154562,2154626,2154690,2154754,2141858,2154818,2154882,2127298,2154946,2127298,2155010,2155074,2155138,2155202,2155266,2155202]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0]), - new Uint32Array([2200641,2150786,2150850,2150914,2150978,2151042,2106562,2151106,2150562,2151170,2151234,2151298,2151362,2151426,2151490,2151554]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,6291456,6291456]), - new Uint32Array([2220289,2220289,2220321,2220321,2220321,2220321,2220353,2220353,2220353,2220353,2220385,2220385,2220385,2220385,2220417,2220417]), - new Uint32Array([2155330,2155394,0,2155458,2155522,2155586,2105732,0,2155650,2155714,2155778,2125314,2155842,2155906,2126274,2155970]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,23068672,23068672,6291456,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0]), - new Uint32Array([2097729,2106017,2106017,2106017,2106017,2131297,2131297,2131297,2131297,2106081,2106081,2162049,2162049,2105953,2105953,2162337]), - new Uint32Array([2097185,2097697,2097697,2097697,2097697,2135777,2135777,2135777,2135777,2097377,2097377,2097377,2097377,2097601,2097601,2097217]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23068672]), - new Uint32Array([2139331,2139427,2139523,2139043,2133571,2132611,2139619,2139715,0,0,0,0,0,0,0,0]), - new Uint32Array([2174113,2174145,2100897,2098177,2108289,2100865,2173601,2173633,2173985,2174113,2174145,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,23068672,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,18923778,23068672,23068672,23068672,23068672,18923842,23068672,23068672,23068672,23068672,18923906,23068672,23068672,23068672]), - new Uint32Array([2134145,2097153,2134241,0,2132705,2130977,2160065,2131297,0,2133089,0,2133857,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2177537,6291456,2177569,6291456,2177601,6291456,2177633,6291456,2177665,6291456,2177697,6291456,2177729,6291456,2177761,6291456]), - new Uint32Array([2212481,2212513,2212545,2212577,2197121,2212609,2212641,2212673,2212705,2212737,2212769,2212801,2212833,2212865,2212897,2212929]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2098241,2108353,2170209,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,6291456,2108193,2172417,2112481,2098177]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), -]; -var blockIdxes = new Uint16Array([616,616,565,147,161,411,330,2,131,131,328,454,241,408,86,86,696,113,285,350,325,301,473,214,639,232,447,64,369,598,124,672,567,223,621,154,107,86,86,86,86,86,86,505,86,68,634,86,218,218,218,218,486,218,218,513,188,608,216,86,217,463,668,85,700,360,184,86,86,86,647,402,153,10,346,718,662,260,145,298,117,1,443,342,138,54,563,86,240,572,218,70,387,86,118,460,641,602,86,86,306,218,86,692,86,86,86,86,86,162,707,86,458,26,86,218,638,86,86,86,86,86,65,449,86,86,306,183,86,58,391,667,86,157,131,131,131,131,86,433,131,406,31,218,247,86,86,693,218,581,351,86,438,295,69,462,45,126,173,650,14,295,69,97,168,187,641,78,523,390,69,108,287,664,173,219,83,295,69,108,431,426,173,694,412,115,628,52,257,398,641,118,501,121,69,579,151,423,173,620,464,121,69,382,151,476,173,27,53,121,86,594,578,226,173,86,632,130,86,96,228,268,641,622,563,86,86,21,148,650,131,131,321,43,144,343,381,531,131,131,178,20,86,399,156,375,164,541,30,60,715,198,92,118,131,131,86,86,306,407,86,280,457,196,488,358,131,131,244,86,86,143,86,86,86,86,86,667,563,86,86,86,86,86,86,86,86,86,86,86,86,86,336,363,86,86,336,86,86,380,678,67,86,86,86,678,86,86,86,512,86,307,86,708,86,86,86,86,86,528,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,563,307,86,86,86,86,86,104,450,337,86,720,86,32,450,397,86,86,86,587,218,558,708,708,293,708,86,86,86,86,86,694,205,86,8,86,86,86,86,549,86,667,697,697,679,86,458,460,86,86,650,86,708,543,86,86,86,245,86,86,86,140,218,127,708,708,458,197,131,131,131,131,500,86,86,483,251,86,306,510,515,86,722,86,86,86,65,201,86,86,483,580,470,86,86,86,368,131,131,131,694,114,110,555,86,86,123,721,163,142,713,418,86,317,675,209,218,218,218,371,545,592,629,490,603,199,46,320,525,680,310,279,388,111,42,252,593,607,235,617,410,377,50,548,135,356,17,520,189,116,392,600,349,332,482,699,690,535,119,106,451,71,152,667,131,218,218,265,671,637,492,504,533,683,269,269,658,86,86,86,86,86,86,86,86,86,491,619,86,86,6,86,86,86,86,86,86,86,86,86,86,86,229,86,86,86,86,86,86,86,86,86,86,86,86,667,86,86,171,131,118,131,656,206,234,571,89,334,670,246,311,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,534,86,86,86,86,86,86,82,86,86,86,86,86,430,86,86,86,86,86,86,86,86,86,599,86,324,86,470,69,640,264,131,626,101,174,86,86,667,233,105,73,374,394,221,204,84,28,326,86,86,471,86,86,86,109,573,86,171,200,200,200,200,218,218,86,86,86,86,460,131,131,131,86,506,86,86,86,86,86,220,404,34,614,47,442,305,25,612,338,601,648,7,344,255,131,131,51,86,312,507,563,86,86,86,86,588,86,86,86,86,86,530,511,86,458,3,435,384,556,522,230,527,86,118,86,86,717,86,137,273,79,181,484,23,93,112,655,249,417,703,370,87,98,313,684,585,155,465,596,481,695,18,416,428,61,701,706,282,643,495,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,307,86,86,86,171,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,650,131,422,542,420,263,24,172,86,86,86,86,86,566,86,86,132,540,395,353,494,519,19,485,284,472,131,131,131,16,714,86,211,708,86,86,86,694,698,86,86,483,704,708,218,272,86,86,120,86,159,478,86,307,247,86,86,663,597,459,627,667,86,86,277,455,39,302,86,250,86,86,86,271,99,452,306,281,329,400,200,86,86,362,549,352,646,461,323,586,86,86,4,708,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,717,86,518,86,86,650,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,125,554,480,300,613,72,333,288,561,544,604,48,719,91,169,176,590,224,76,191,29,559,560,231,537,166,477,538,256,437,131,131,469,167,40,0,685,266,441,705,239,642,475,568,640,610,299,673,517,318,385,22,202,180,179,359,424,215,90,66,521,653,467,682,453,409,479,88,131,661,35,303,15,262,666,630,712,131,131,618,659,175,218,195,347,193,227,261,150,165,709,546,294,569,710,270,413,376,524,55,242,38,419,529,170,657,3,304,122,379,278,131,651,86,67,576,458,458,131,131,86,86,86,86,86,86,86,118,309,86,86,547,86,86,86,86,667,650,664,131,131,86,86,56,131,131,131,131,131,131,131,131,86,307,86,86,86,664,238,650,86,86,717,86,118,86,86,315,86,59,86,86,574,549,131,131,340,57,436,86,86,86,86,86,86,458,708,499,691,62,86,650,86,86,694,86,86,86,319,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,86,549,694,131,131,131,131,131,131,131,131,131,77,86,86,139,86,502,86,86,86,667,595,131,131,131,86,12,86,13,86,609,131,131,131,131,86,86,86,625,86,669,86,86,182,129,86,5,694,104,86,86,86,86,131,131,86,86,386,171,86,86,86,345,86,324,86,589,86,213,36,131,131,131,131,131,86,86,86,86,104,131,131,131,141,290,80,677,86,86,86,267,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,667,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,515,86,86,33,136,669,86,711,515,86,86,550,640,86,104,708,515,86,159,372,717,86,86,444,515,86,86,663,37,86,563,460,86,390,624,702,131,131,131,131,389,59,708,86,86,341,208,708,635,295,69,108,431,508,100,190,131,131,131,131,131,131,131,131,86,86,86,649,516,660,131,131,86,86,86,218,631,708,131,131,131,131,131,131,131,131,131,131,86,86,341,575,238,514,131,131,86,86,86,218,291,708,307,131,86,86,306,367,708,131,131,131,86,378,697,86,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,615,253,86,86,86,292,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,104,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,69,86,341,553,549,86,307,86,86,645,275,455,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,708,131,131,131,131,131,131,86,86,86,86,86,86,667,460,86,86,86,86,86,86,86,86,86,86,86,86,717,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,667,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,104,86,667,459,131,131,131,131,131,131,86,458,225,86,86,86,516,549,11,390,405,86,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,460,44,218,197,711,515,131,131,131,131,664,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,307,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,308,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,118,307,104,286,591,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,86,86,681,86,86,75,185,314,582,86,358,496,474,86,104,131,86,86,86,86,146,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,171,86,640,131,131,131,131,131,131,131,131,246,503,689,339,674,81,258,415,439,128,562,366,414,246,503,689,583,222,557,316,636,665,186,355,95,670,246,503,689,339,674,557,258,415,439,186,355,95,670,246,503,689,446,644,536,652,331,532,335,440,274,421,297,570,74,425,364,425,606,552,403,509,134,365,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,218,218,218,498,218,218,577,627,551,497,572,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,553,354,236,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,296,455,131,131,456,243,103,86,41,459,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,9,276,158,716,393,564,383,489,401,654,210,654,131,131,131,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,650,86,86,86,86,86,86,717,667,563,563,563,86,549,102,686,133,246,605,86,448,86,86,207,307,131,131,131,641,86,177,611,445,373,194,584,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,308,307,171,86,86,86,86,86,86,86,717,86,86,86,86,86,460,131,131,650,86,86,86,694,708,86,86,694,86,458,131,131,131,131,131,131,667,694,289,650,667,131,131,86,640,131,131,664,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,460,86,86,86,86,86,86,86,86,86,86,86,86,86,458,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,466,203,149,429,94,432,160,687,539,63,237,283,192,248,348,259,427,526,396,676,254,468,487,212,327,623,49,633,322,493,434,688,357,361,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131]); -var mappingStr = "صلى الله عليه وسلمجل جلالهキロメートルrad∕s2エスクードキログラムキロワットグラムトンクルゼイロサンチームパーセントピアストルファラッドブッシェルヘクタールマンションミリバールレントゲン′′′′1⁄10viii(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫(오전)(오후)アパートアルファアンペアイニングエーカーカラットカロリーキュリーギルダークローネサイクルシリングバーレルフィートポイントマイクロミクロンメガトンリットルルーブル株式会社kcalm∕s2c∕kgاكبرمحمدصلعمرسولریال1⁄41⁄23⁄4 ̈́ྲཱྀླཱྀ ̈͂ ̓̀ ̓́ ̓͂ ̔̀ ̔́ ̔͂ ̈̀‵‵‵a/ca/sc/oc/utelfax1⁄71⁄91⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83⁄85⁄87⁄8xii0⁄3∮∮∮(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)::====(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)pte10月11月12月ergltdアールインチウォンオンスオームカイリガロンガンマギニーケースコルナコーポセンチダースノットハイツパーツピクルフランペニヒヘルツペンスページベータボルトポンドホールホーンマイルマッハマルクヤードヤールユアンルピー10点11点12点13点14点15点16点17点18点19点20点21点22点23点24点hpabardm2dm3khzmhzghzthzmm2cm2km2mm3cm3km3kpampagpalogmilmolppmv∕ma∕m10日11日12日13日14日15日16日17日18日19日20日21日22日23日24日25日26日27日28日29日30日31日galffifflשּׁשּׂ ٌّ ٍّ َّ ُّ ِّ ّٰـَّـُّـِّتجمتحجتحمتخمتمجتمحتمخجمححميحمىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمىفخمقمحقمملحملحيلحىلججلخملمحمحجمحيمجحمجممخممجخهمجهممنحمنحىنجمنجىنمينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمينحيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلے𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱𝅘𝅥𝅲𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯〔s〕ppv〔本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕 ̄ ́ ̧ssi̇ijl·ʼndžljnjdz ̆ ̇ ̊ ̨ ̃ ̋ ιեւاٴوٴۇٴيٴक़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀླྀྒྷྜྷྡྷྦྷྫྷྐྵaʾἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧιὰιαιάιᾶι ͂ὴιηιήιῆιὼιωιώιῶι ̳!! ̅???!!?rs°c°fnosmtmivix⫝̸ ゙ ゚よりコト333435참고주의363738394042444546474849503月4月5月6月7月8月9月hgevギガデシドルナノピコビルペソホンリラレムdaauovpciu平成昭和大正明治naμakakbmbgbpfnfμfμgmgμlmldlklfmnmμmpsnsμsmsnvμvkvpwnwμwmwkwkωmωbqcccddbgyhainkkktlnlxphprsrsvwbstմնմեմիվնմխיִײַשׁשׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּתּוֹבֿכֿפֿאלئائەئوئۇئۆئۈئېئىئجئحئمئيبجبمبىبيتىتيثجثمثىثيخحضجضمطحظمغجفجفحفىفيقحقىقيكاكجكحكخكلكىكينخنىنيهجهىهييىذٰرٰىٰئرئزئنبزبنترتزتنثرثزثنمانرنزننيريزئخئهبهتهصخنههٰثهسهشهطىطيعىعيغىغيسىسيشىشيصىصيضىضيشخشرسرصرضراً ًـًـّ ْـْلآلألإ𝅗𝅥0,1,2,3,4,5,6,7,8,9,wzhvsdwcmcmddjほかココàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįĵķĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷÿźżɓƃƅɔƈɖɗƌǝəɛƒɠɣɩɨƙɯɲɵơƣƥʀƨʃƭʈưʊʋƴƶʒƹƽǎǐǒǔǖǘǚǜǟǡǣǥǧǩǫǭǯǵƕƿǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟƞȣȥȧȩȫȭȯȱȳⱥȼƚⱦɂƀʉʌɇɉɋɍɏɦɹɻʁʕͱͳʹͷ;ϳέίόύβγδεζθκλνξοπρστυφχψϊϋϗϙϛϝϟϡϣϥϧϩϫϭϯϸϻͻͼͽѐёђѓєѕіїјљњћќѝўџабвгдежзийклмнопрстуфхцчшщъыьэюяѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯաբգդզէըթժլծկհձղճյշոչպջռստրցփքօֆ་ⴧⴭნᏰᏱᏲᏳᏴᏵꙋɐɑᴂɜᴖᴗᴝᴥɒɕɟɡɥɪᵻʝɭᶅʟɱɰɳɴɸʂƫᴜʐʑḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿἐἑἒἓἔἕἰἱἲἳἴἵἶἷὀὁὂὃὄὅὑὓὕὗᾰᾱὲΐῐῑὶΰῠῡὺῥ`ὸ‐+−∑〈〉ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞⱡɫᵽɽⱨⱪⱬⱳⱶȿɀⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳬⳮⳳⵡ母龟丨丶丿乙亅亠人儿入冂冖冫几凵刀力勹匕匚匸卜卩厂厶又口囗士夂夊夕女子宀寸小尢尸屮山巛工己巾干幺广廴廾弋弓彐彡彳心戈戶手支攴文斗斤方无曰欠止歹殳毋比毛氏气爪父爻爿片牙牛犬玄玉瓜瓦甘生用田疋疒癶白皮皿目矛矢石示禸禾穴立竹米糸缶网羊羽老而耒耳聿肉臣臼舌舛舟艮色艸虍虫血行衣襾見角言谷豆豕豸貝赤走足身車辛辰辵邑酉釆里長門阜隶隹雨靑非面革韋韭音頁風飛食首香馬骨高髟鬥鬯鬲鬼魚鳥鹵鹿麥麻黃黍黑黹黽鼎鼓鼠鼻齊齒龍龜龠.〒卄卅ᄁᆪᆬᆭᄄᆰᆱᆲᆳᆴᆵᄚᄈᄡᄊ짜ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵᄔᄕᇇᇈᇌᇎᇓᇗᇙᄜᇝᇟᄝᄞᄠᄢᄣᄧᄩᄫᄬᄭᄮᄯᄲᄶᅀᅇᅌᇱᇲᅗᅘᅙᆄᆅᆈᆑᆒᆔᆞᆡ上中下甲丙丁天地問幼箏우秘男適優印注項写左右医宗夜テヌモヨヰヱヲꙁꙃꙅꙇꙉꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛꜣꜥꜧꜩꜫꜭꜯꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝺꝼᵹꝿꞁꞃꞅꞇꞌꞑꞓꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩɬʞʇꭓꞵꞷꬷꭒᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯ豈更賈滑串句契喇奈懶癩羅蘿螺裸邏樂洛烙珞落酪駱亂卵欄爛蘭鸞嵐濫藍襤拉臘蠟廊朗浪狼郎來冷勞擄櫓爐盧蘆虜路露魯鷺碌祿綠菉錄論壟弄籠聾牢磊賂雷壘屢樓淚漏累縷陋勒肋凜凌稜綾菱陵讀拏諾丹寧怒率異北磻便復不泌數索參塞省葉說殺沈拾若掠略亮兩凉梁糧良諒量勵呂廬旅濾礪閭驪麗黎曆歷轢年憐戀撚漣煉璉秊練聯輦蓮連鍊列劣咽烈裂廉念捻殮簾獵令囹嶺怜玲瑩羚聆鈴零靈領例禮醴隸惡了僚寮尿料燎療蓼遼暈阮劉杻柳流溜琉留硫紐類戮陸倫崙淪輪律慄栗隆利吏履易李梨泥理痢罹裏裡離匿溺吝燐璘藺隣鱗麟林淋臨笠粒狀炙識什茶刺切度拓糖宅洞暴輻降廓兀嗀塚晴凞猪益礼神祥福靖精蘒諸逸都飯飼館鶴郞隷侮僧免勉勤卑喝嘆器塀墨層悔慨憎懲敏既暑梅海渚漢煮爫琢碑祉祈祐祖禍禎穀突節縉繁署者臭艹著褐視謁謹賓贈辶難響頻恵𤋮舘並况全侀充冀勇勺啕喙嗢墳奄奔婢嬨廒廙彩徭惘慎愈慠戴揄搜摒敖望杖滛滋瀞瞧爵犯瑱甆画瘝瘟盛直睊着磌窱类絛缾荒華蝹襁覆調請諭變輸遲醙鉶陼韛頋鬒𢡊𢡄𣏕㮝䀘䀹𥉉𥳐𧻓齃龎עםٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھۓڭۋۅۉ、〖〗—–_{}【】《》「」『』[]#&*-<>\\$%@ءؤة\"'^|~⦅⦆・ゥャ¢£¬¦¥₩│←↑→↓■○𐐨𐐩𐐪𐐫𐐬𐐭𐐮𐐯𐐰𐐱𐐲𐐳𐐴𐐵𐐶𐐷𐐸𐐹𐐺𐐻𐐼𐐽𐐾𐐿𐑀𐑁𐑂𐑃𐑄𐑅𐑆𐑇𐑈𐑉𐑊𐑋𐑌𐑍𐑎𐑏𐓘𐓙𐓚𐓛𐓜𐓝𐓞𐓟𐓠𐓡𐓢𐓣𐓤𐓥𐓦𐓧𐓨𐓩𐓪𐓫𐓬𐓭𐓮𐓯𐓰𐓱𐓲𐓳𐓴𐓵𐓶𐓷𐓸𐓹𐓺𐓻𐳀𐳁𐳂𐳃𐳄𐳅𐳆𐳇𐳈𐳉𐳊𐳋𐳌𐳍𐳎𐳏𐳐𐳑𐳒𐳓𐳔𐳕𐳖𐳗𐳘𐳙𐳚𐳛𐳜𐳝𐳞𐳟𐳠𐳡𐳢𐳣𐳤𐳥𐳦𐳧𐳨𐳩𐳪𐳫𐳬𐳭𐳮𐳯𐳰𐳱𐳲𑣀𑣁𑣂𑣃𑣄𑣅𑣆𑣇𑣈𑣉𑣊𑣋𑣌𑣍𑣎𑣏𑣐𑣑𑣒𑣓𑣔𑣕𑣖𑣗𑣘𑣙𑣚𑣛𑣜𑣝𑣞𑣟ıȷ∇∂𞤢𞤣𞤤𞤥𞤦𞤧𞤨𞤩𞤪𞤫𞤬𞤭𞤮𞤯𞤰𞤱𞤲𞤳𞤴𞤵𞤶𞤷𞤸𞤹𞤺𞤻𞤼𞤽𞤾𞤿𞥀𞥁𞥂𞥃ٮڡٯ字双多解交映無前後再新初終販声吹演投捕遊指禁空合満申割営配得可丽丸乁𠄢你侻倂偺備像㒞𠘺兔兤具𠔜㒹內𠕋冗冤仌冬𩇟刃㓟刻剆剷㔕包匆卉博即卽卿𠨬灰及叟𠭣叫叱吆咞吸呈周咢哶唐啓啣善喫喳嗂圖圗噑噴壮城埴堍型堲報墬𡓤売壷夆夢奢𡚨𡛪姬娛娧姘婦㛮嬈嬾𡧈寃寘寳𡬘寿将㞁屠峀岍𡷤嵃𡷦嵮嵫嵼巡巢㠯巽帨帽幩㡢𢆃㡼庰庳庶𪎒𢌱舁弢㣇𣊸𦇚形彫㣣徚忍志忹悁㤺㤜𢛔惇慈慌慺憲憤憯懞戛扝抱拔捐𢬌挽拼捨掃揤𢯱搢揅掩㨮摩摾撝摷㩬敬𣀊旣書晉㬙㬈㫤冒冕最暜肭䏙朡杞杓𣏃㭉柺枅桒𣑭梎栟椔楂榣槪檨𣚣櫛㰘次𣢧歔㱎歲殟殻𣪍𡴋𣫺汎𣲼沿泍汧洖派浩浸涅𣴞洴港湮㴳滇𣻑淹潮𣽞𣾎濆瀹瀛㶖灊災灷炭𠔥煅𤉣熜爨牐𤘈犀犕𤜵𤠔獺王㺬玥㺸瑇瑜璅瓊㼛甤𤰶甾𤲒𢆟瘐𤾡𤾸𥁄㿼䀈𥃳𥃲𥄙𥄳眞真瞋䁆䂖𥐝硎䃣𥘦𥚚𥛅秫䄯穊穏𥥼𥪧䈂𥮫篆築䈧𥲀糒䊠糨糣紀𥾆絣䌁緇縂繅䌴𦈨𦉇䍙𦋙罺𦌾羕翺𦓚𦔣聠𦖨聰𣍟䏕育脃䐋脾媵𦞧𦞵𣎓𣎜舄辞䑫芑芋芝劳花芳芽苦𦬼茝荣莭茣莽菧荓菊菌菜𦰶𦵫𦳕䔫蓱蓳蔖𧏊蕤𦼬䕝䕡𦾱𧃒䕫虐虧虩蚩蚈蜎蛢蜨蝫螆蟡蠁䗹衠𧙧裗裞䘵裺㒻𧢮𧥦䚾䛇誠𧲨貫賁贛起𧼯𠠄跋趼跰𠣞軔𨗒𨗭邔郱鄑𨜮鄛鈸鋗鋘鉼鏹鐕𨯺開䦕閷𨵷䧦雃嶲霣𩅅𩈚䩮䩶韠𩐊䪲𩒖頩𩖶飢䬳餩馧駂駾䯎𩬰鱀鳽䳎䳭鵧𪃎䳸𪄅𪈎𪊑䵖黾鼅鼏鼖𪘀"; - -function mapChar(codePoint) { - if (codePoint >= 0x30000) { - // High planes are special cased. - if (codePoint >= 0xE0100 && codePoint <= 0xE01EF) - return 18874368; - return 0; - } - return blocks[blockIdxes[codePoint >> 4]][codePoint & 15]; -} - -return { - mapStr: mappingStr, - mapChar: mapChar -}; -})); - -},{}],8:[function(require,module,exports){ -(function(root, factory) { - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define(['punycode', './idna-map'], function(punycode, idna_map) { - return factory(punycode, idna_map); - }); - } - else if (typeof exports === 'object') { - module.exports = factory(require('punycode'), require('./idna-map')); - } - else { - root.uts46 = factory(root.punycode, root.idna_map); - } -}(this, function(punycode, idna_map) { - - function mapLabel(label, useStd3ASCII, transitional) { - var mapped = []; - var chars = punycode.ucs2.decode(label); - for (var i = 0; i < chars.length; i++) { - var cp = chars[i]; - var ch = punycode.ucs2.encode([chars[i]]); - var composite = idna_map.mapChar(cp); - var flags = (composite >> 23); - var kind = (composite >> 21) & 3; - var index = (composite >> 5) & 0xffff; - var length = composite & 0x1f; - var value = idna_map.mapStr.substr(index, length); - if (kind === 0 || (useStd3ASCII && (flags & 1))) { - throw new Error("Illegal char " + ch); - } - else if (kind === 1) { - mapped.push(value); - } - else if (kind === 2) { - mapped.push(transitional ? value : ch); - } - /* istanbul ignore next */ - else if (kind === 3) { - mapped.push(ch); - } - } - - var newLabel = mapped.join("").normalize("NFC"); - return newLabel; - } - - function process(domain, transitional, useStd3ASCII) { - /* istanbul ignore if */ - if (useStd3ASCII === undefined) - useStd3ASCII = false; - var mappedIDNA = mapLabel(domain, useStd3ASCII, transitional); - - // Step 3. Break - var labels = mappedIDNA.split("."); - - // Step 4. Convert/Validate - labels = labels.map(function(label) { - if (label.startsWith("xn--")) { - label = punycode.decode(label.substring(4)); - validateLabel(label, useStd3ASCII, false); - } - else { - validateLabel(label, useStd3ASCII, transitional); - } - return label; - }); - - return labels.join("."); - } - - function validateLabel(label, useStd3ASCII, transitional) { - // 2. The label must not contain a U+002D HYPHEN-MINUS character in both the - // third position and fourth positions. - if (label[2] === '-' && label[3] === '-') - throw new Error("Failed to validate " + label); - - // 3. The label must neither begin nor end with a U+002D HYPHEN-MINUS - // character. - if (label.startsWith('-') || label.endsWith('-')) - throw new Error("Failed to validate " + label); - - // 4. The label must not contain a U+002E ( . ) FULL STOP. - // this should nerver happen as label is chunked internally by this character - /* istanbul ignore if */ - if (label.includes('.')) - throw new Error("Failed to validate " + label); - - if (mapLabel(label, useStd3ASCII, transitional) !== label) - throw new Error("Failed to validate " + label); - - // 5. The label must not begin with a combining mark, that is: - // General_Category=Mark. - var ch = label.codePointAt(0); - if (idna_map.mapChar(ch) & (0x2 << 23)) - throw new Error("Label contains illegal character: " + ch); - } - - function toAscii(domain, options) { - if (options === undefined) - options = {}; - var transitional = 'transitional' in options ? options.transitional : true; - var useStd3ASCII = 'useStd3ASCII' in options ? options.useStd3ASCII : false; - var verifyDnsLength = 'verifyDnsLength' in options ? options.verifyDnsLength : false; - var labels = process(domain, transitional, useStd3ASCII).split('.'); - var asciiLabels = labels.map(punycode.toASCII); - var asciiString = asciiLabels.join('.'); - var i; - if (verifyDnsLength) { - if (asciiString.length < 1 || asciiString.length > 253) { - throw new Error("DNS name has wrong length: " + asciiString); - } - for (i = 0; i < asciiLabels.length; i++) {//for .. of replacement - var label = asciiLabels[i]; - if (label.length < 1 || label.length > 63) - throw new Error("DNS label has wrong length: " + label); - } - } - return asciiString; - } - - function toUnicode(domain, options) { - if (options === undefined) - options = {}; - var useStd3ASCII = 'useStd3ASCII' in options ? options.useStd3ASCII : false; - return process(domain, false, useStd3ASCII); - } - - return { - toUnicode: toUnicode, - toAscii: toAscii, - }; -})); - -},{"./idna-map":7,"punycode":5}],9:[function(require,module,exports){ -(function (process,global){ -/** - * [js-sha3]{@link https://github.com/emn178/js-sha3} - * - * @version 0.5.7 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2015-2016 - * @license MIT - */ -/*jslint bitwise: true */ -(function () { - 'use strict'; - - var root = typeof window === 'object' ? window : {}; - var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node; - if (NODE_JS) { - root = global; - } - var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports; - var HEX_CHARS = '0123456789abcdef'.split(''); - var SHAKE_PADDING = [31, 7936, 2031616, 520093696]; - var KECCAK_PADDING = [1, 256, 65536, 16777216]; - var PADDING = [6, 1536, 393216, 100663296]; - var SHIFT = [0, 8, 16, 24]; - var RC = [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]; - var BITS = [224, 256, 384, 512]; - var SHAKE_BITS = [128, 256]; - var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array']; - - var createOutputMethod = function (bits, padding, outputType) { - return function (message) { - return new Keccak(bits, padding, bits).update(message)[outputType](); - }; - }; - - var createShakeOutputMethod = function (bits, padding, outputType) { - return function (message, outputBits) { - return new Keccak(bits, padding, outputBits).update(message)[outputType](); - }; - }; - - var createMethod = function (bits, padding) { - var method = createOutputMethod(bits, padding, 'hex'); - method.create = function () { - return new Keccak(bits, padding, bits); - }; - method.update = function (message) { - return method.create().update(message); - }; - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method[type] = createOutputMethod(bits, padding, type); - } - return method; - }; - - var createShakeMethod = function (bits, padding) { - var method = createShakeOutputMethod(bits, padding, 'hex'); - method.create = function (outputBits) { - return new Keccak(bits, padding, outputBits); - }; - method.update = function (message, outputBits) { - return method.create(outputBits).update(message); - }; - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method[type] = createShakeOutputMethod(bits, padding, type); - } - return method; - }; - - var algorithms = [ - {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod}, - {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod}, - {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod} - ]; - - var methods = {}, methodNames = []; - - for (var i = 0; i < algorithms.length; ++i) { - var algorithm = algorithms[i]; - var bits = algorithm.bits; - for (var j = 0; j < bits.length; ++j) { - var methodName = algorithm.name +'_' + bits[j]; - methodNames.push(methodName); - methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding); - } - } - - function Keccak(bits, padding, outputBits) { - this.blocks = []; - this.s = []; - this.padding = padding; - this.outputBits = outputBits; - this.reset = true; - this.block = 0; - this.start = 0; - this.blockCount = (1600 - (bits << 1)) >> 5; - this.byteCount = this.blockCount << 2; - this.outputBlocks = outputBits >> 5; - this.extraBytes = (outputBits & 31) >> 3; - - for (var i = 0; i < 50; ++i) { - this.s[i] = 0; - } - } - - Keccak.prototype.update = function (message) { - var notString = typeof message !== 'string'; - if (notString && message.constructor === ArrayBuffer) { - message = new Uint8Array(message); - } - var length = message.length, blocks = this.blocks, byteCount = this.byteCount, - blockCount = this.blockCount, index = 0, s = this.s, i, code; - - while (index < length) { - if (this.reset) { - this.reset = false; - blocks[0] = this.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (notString) { - for (i = this.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = this.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - this.lastByteIndex = i; - if (i >= byteCount) { - this.start = i - byteCount; - this.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - this.reset = true; - } else { - this.start = i; - } - } - return this; - }; - - Keccak.prototype.finalize = function () { - var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s; - blocks[i >> 2] |= this.padding[i & 3]; - if (this.lastByteIndex === this.byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - }; - - Keccak.prototype.toString = Keccak.prototype.hex = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var hex = '', block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + - HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + - HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + - HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - if (extraBytes) { - block = s[i]; - if (extraBytes > 0) { - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F]; - } - if (extraBytes > 1) { - hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F]; - } - if (extraBytes > 2) { - hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F]; - } - } - return hex; - }; - - Keccak.prototype.arrayBuffer = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var bytes = this.outputBits >> 3; - var buffer; - if (extraBytes) { - buffer = new ArrayBuffer((outputBlocks + 1) << 2); - } else { - buffer = new ArrayBuffer(bytes); - } - var array = new Uint32Array(buffer); - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - array[j] = s[i]; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - array[i] = s[i]; - buffer = buffer.slice(0, bytes); - } - return buffer; - }; - - Keccak.prototype.buffer = Keccak.prototype.arrayBuffer; - - Keccak.prototype.digest = Keccak.prototype.array = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var array = [], offset, block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - offset = j << 2; - block = s[i]; - array[offset] = block & 0xFF; - array[offset + 1] = (block >> 8) & 0xFF; - array[offset + 2] = (block >> 16) & 0xFF; - array[offset + 3] = (block >> 24) & 0xFF; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - offset = j << 2; - block = s[i]; - if (extraBytes > 0) { - array[offset] = block & 0xFF; - } - if (extraBytes > 1) { - array[offset + 1] = (block >> 8) & 0xFF; - } - if (extraBytes > 2) { - array[offset + 2] = (block >> 16) & 0xFF; - } - } - return array; - }; - - var f = function (s) { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } - }; - - if (COMMON_JS) { - module.exports = methods; - } else { - for (var i = 0; i < methodNames.length; ++i) { - root[methodNames[i]] = methods[methodNames[i]]; - } - } -})(); - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":4}]},{},[6]); diff --git a/truebit-implementation/node_modules/eth-ens-namehash/index.js b/truebit-implementation/node_modules/eth-ens-namehash/index.js deleted file mode 100644 index 939e751f..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/index.js +++ /dev/null @@ -1,30 +0,0 @@ -var sha3 = require('js-sha3').keccak_256 -var uts46 = require('idna-uts46-hx') - -function namehash (inputName) { - // Reject empty names: - var node = '' - for (var i = 0; i < 32; i++) { - node += '00' - } - - name = normalize(inputName) - - if (name) { - var labels = name.split('.') - - for(var i = labels.length - 1; i >= 0; i--) { - var labelSha = sha3(labels[i]) - node = sha3(new Buffer(node + labelSha, 'hex')) - } - } - - return '0x' + node -} - -function normalize(name) { - return name ? uts46.toUnicode(name, {useStd3ASCII: true, transitional: false}) : name -} - -exports.hash = namehash -exports.normalize = normalize diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.covignore b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.covignore deleted file mode 100644 index c5e24465..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.covignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules/ -/tests/ diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.npmignore b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.npmignore deleted file mode 100644 index c2635c12..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -/node_modules/ -/covreporter/ -/my_test/ diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.travis.yml b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.travis.yml deleted file mode 100644 index 4036a6f5..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - "0.12.15" - - "4.5" - - "6.5.0" -before_install: - - npm install coveralls - - npm install mocha-lcov-reporter -script: npm run-script coveralls -branches: - only: - - master diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/CHANGELOG.md b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/CHANGELOG.md deleted file mode 100644 index 7159ef30..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/CHANGELOG.md +++ /dev/null @@ -1,74 +0,0 @@ -# Change Log - -## v0.5.7 / 2016-12-30 -### Fixed -- ArrayBuffer detection in old browsers. - -## v0.5.6 / 2016-12-29 -### Fixed -- ArrayBuffer dosen't work in Webpack. - -## v0.5.5 / 2016-09-26 -### Added -- TypeScript support. -- ArrayBuffer method. -### Deprecated -- Buffer method. - -## v0.5.4 / 2016-09-12 -### Fixed -- CommonJS detection. - -## v0.5.3 / 2016-09-08 -### Added -- Some missing files to npm package. - -## v0.5.2 / 2016-06-06 -### Fixed -- Shake output incorrect in the special length. - -## v0.5.1 / 2015-10-27 -### Fixed -- Version in package.json and bower.json. - -## v0.5.0 / 2015-09-23 -### Added -- Hash object with create/update interface. - -## v0.4.1 / 2015-09-18 -### Added -- Integer array output. -### Fixed -- Shake output incorrect when it's greater than 1088. - -## v0.4.0 / 2015-09-17 -### Added -- ArrayBuffer output. -- Shake alogirthms. - -## v0.3.1 / 2015-05-22 -### Fixed -- Some bugs. - -## v0.3.0 / 2015-05-21 -### Added -- Integer array input. -- ArrayBuffer input. - -## v0.2.0 / 2015-04-04 -### Added -- NIST's May 2014 SHA-3 version. -### Changed -- Rename original methods to keccak. - -## v0.1.2 / 2015-02-27 -### Changed -- Improve performance. - -## v0.1.1 / 2015-02-26 -### Changed -- Improve performance. - -## v0.1.0 / 2015-02-23 -### Added -- First version implementation. diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/LICENSE.txt b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/LICENSE.txt deleted file mode 100644 index 5b6aafa7..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright 2015-2016 Chen, Yi-Cyuan - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/README.md b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/README.md deleted file mode 100644 index 78948343..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/README.md +++ /dev/null @@ -1,225 +0,0 @@ -# js-sha3 - -[![Build Status](https://travis-ci.org/emn178/js-sha3.svg?branch=master)](https://travis-ci.org/emn178/js-sha3) -[![Coverage Status](https://coveralls.io/repos/emn178/js-sha3/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-sha3?branch=master) -[![NPM](https://nodei.co/npm/js-sha3.png?stars&downloads)](https://nodei.co/npm/js-sha3/) - -A simple SHA-3 / Keccak / Shake hash function for JavaScript supports UTF-8 encoding. - -## Notice -* Sha3 methods has been renamed to keccak since v0.2.0. It means that sha3 methods of v0.1.x are equal to keccak methods of v0.2.x and later. -* `buffer` method is deprecated. This maybe confuse with Buffer in node.js. Please use `arrayBuffer` instead. - -## Demo -[SHA3-512 Online](http://emn178.github.io/online-tools/sha3_512.html) -[SHA3-384 Online](http://emn178.github.io/online-tools/sha3_384.html) -[SHA3-256 Online](http://emn178.github.io/online-tools/sha3_256.html) -[SHA3-224 Online](http://emn178.github.io/online-tools/sha3_224.html) -[Keccak-512 Online](http://emn178.github.io/online-tools/keccak_512.html) -[Keccak-384 Online](http://emn178.github.io/online-tools/keccak_384.html) -[Keccak-256 Online](http://emn178.github.io/online-tools/keccak_256.html) -[Keccak-224 Online](http://emn178.github.io/online-tools/keccak_224.html) -[Shake-128 Online](http://emn178.github.io/online-tools/shake_128.html) -[Shake-256 Online](http://emn178.github.io/online-tools/shake_256.html) - -## Download -[Compress](https://raw.github.com/emn178/js-sha3/master/build/sha3.min.js) -[Uncompress](https://raw.github.com/emn178/js-sha3/master/src/sha3.js) - -## Installation -You can also install js-sha3 by using Bower. - - bower install js-sha3 - -For node.js, you can use this command to install: - - npm install js-sha3 - -## Usage -You could use like this: -```JavaScript -sha3_512('Message to hash'); -sha3_384('Message to hash'); -sha3_256('Message to hash'); -sha3_224('Message to hash'); -keccak_512('Message to hash'); -keccak_384('Message to hash'); -keccak_256('Message to hash'); -keccak_224('Message to hash'); -shake_128('Message to hash', 256); -shake_256('Message to hash', 512); - -// Support ArrayBuffer output -var buffer = keccak_224.buffer('Message to hash'); - -// Support Array output -var buffer = keccak_224.array('Message to hash'); - -// update hash -sha3_512.update('Message ').update('to ').update('hash').hex(); -// specify shake output bits at first update -shake_128.update('Message ', 256).update('to ').update('hash').hex(); - -// or to use create -var hash = sha3_512.create(); -hash.update('...'); -hash.update('...'); -hash.hex(); - -// specify shake output bits when creating -var hash = shake_128.create(256); -hash.update('...'); -hash.update('...'); -hash.hex(); -``` -If you use node.js, you should require the module first: -```JavaScript -sha3_512 = require('js-sha3').sha3_512; -sha3_384 = require('js-sha3').sha3_384; -sha3_256 = require('js-sha3').sha3_256; -sha3_224 = require('js-sha3').sha3_224; -keccak_512 = require('js-sha3').keccak_512; -keccak_384 = require('js-sha3').keccak_384; -keccak_256 = require('js-sha3').keccak_256; -keccak_224 = require('js-sha3').keccak_224; -shake_128 = require('js-sha3').shake_128; -shake_256 = require('js-sha3').shake_256; -``` -If you use TypeScript, you can import like this: -```TypeScript -import { sha3_512 } from 'js-sha3'; -``` - -## Example -Code -```JavaScript -sha3_512(''); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -sha3_512('The quick brown fox jumps over the lazy dog'); -// 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 - -sha3_512('The quick brown fox jumps over the lazy dog.'); -// 18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8 - -sha3_384(''); -// 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 - -sha3_384('The quick brown fox jumps over the lazy dog'); -// 7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41 - -sha3_384('The quick brown fox jumps over the lazy dog.'); -// 1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9 - -sha3_256(''); -// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a - -sha3_256('The quick brown fox jumps over the lazy dog'); -// 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 - -sha3_256('The quick brown fox jumps over the lazy dog.'); -// a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d - -sha3_224(''); -// 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 - -sha3_224('The quick brown fox jumps over the lazy dog'); -// d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795 - -sha3_224('The quick brown fox jumps over the lazy dog.'); -// 2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0 - -keccak_512(''); -// 0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e - -keccak_512('The quick brown fox jumps over the lazy dog'); -// d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609 - -keccak_512('The quick brown fox jumps over the lazy dog.'); -// ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760 - -keccak_384(''); -// 2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff - -keccak_384('The quick brown fox jumps over the lazy dog'); -// 283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3 - -keccak_384('The quick brown fox jumps over the lazy dog.'); -// 9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b - -keccak_256(''); -// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 - -keccak_256('The quick brown fox jumps over the lazy dog'); -// 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 - -keccak_256('The quick brown fox jumps over the lazy dog.'); -// 578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d - -keccak_224(''); -// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd - -keccak_224('The quick brown fox jumps over the lazy dog'); -// 310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe - -keccak_224('The quick brown fox jumps over the lazy dog.'); -// c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab - -shake_128('', 256); -// 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 - -shake_256('', 512); -// 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be -``` -It also supports UTF-8 encoding: - -Code -```JavaScript -sha3_512('中文'); -// 059bbe2efc50cc30e4d8ec5a96be697e2108fcbf9193e1296192eddabc13b143c0120d059399a13d0d42651efe23a6c1ce2d1efb576c5b207fa2516050505af7 - -sha3_384('中文'); -// 9fb5b99e3c546f2738dcd50a14e9aef9c313800c1bf8cf76bc9b2c3a23307841364c5a2d0794702662c5796fb72f5432 - -sha3_256('中文'); -// ac5305da3d18be1aed44aa7c70ea548da243a59a5fd546f489348fd5718fb1a0 - -sha3_224('中文'); -// 106d169e10b61c2a2a05554d3e631ec94467f8316640f29545d163ee - -keccak_512('中文'); -// 2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524 - -keccak_384('中文'); -// 743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c - -keccak_256('中文'); -// 70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee - -keccak_224('中文'); -// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd -``` - -It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` input: - -Code -```JavaScript -sha3_512([]); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -sha3_512(new Uint8Array([])); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -// ... -``` - -## Benchmark -[UTF8](http://jsperf.com/sha3/5) -[ASCII](http://jsperf.com/sha3/4) - -## License -The project is released under the [MIT license](http://www.opensource.org/licenses/MIT). - -## Contact -The project's website is located at https://github.com/emn178/js-sha3 -Author: Chen, Yi-Cyuan (emn178@gmail.com) diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/bower.json b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/bower.json deleted file mode 100644 index 8610c3d0..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "js-sha3", - "version": "0.5.7", - "main": ["src/sha3.js"], - "ignore": [ - "samples", - "tests" - ] -} diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/build/sha3.min.js b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/build/sha3.min.js deleted file mode 100644 index ea09f97a..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/build/sha3.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * [js-sha3]{@link https://github.com/emn178/js-sha3} - * - * @version 0.5.7 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2015-2016 - * @license MIT - */ -!function(){"use strict";function t(t,e,r){this.blocks=[],this.s=[],this.padding=e,this.outputBits=r,this.reset=!0,this.block=0,this.start=0,this.blockCount=1600-(t<<1)>>5,this.byteCount=this.blockCount<<2,this.outputBlocks=r>>5,this.extraBytes=(31&r)>>3;for(var o=0;50>o;++o)this.s[o]=0}var e="object"==typeof window?window:{},r=!e.JS_SHA3_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;r&&(e=global);for(var o=!e.JS_SHA3_NO_COMMON_JS&&"object"==typeof module&&module.exports,s="0123456789abcdef".split(""),i=[31,7936,2031616,520093696],n=[1,256,65536,16777216],a=[6,1536,393216,100663296],u=[0,8,16,24],h=[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],f=[224,256,384,512],c=[128,256],p=["hex","buffer","arrayBuffer","array"],l=function(e,r,o){return function(s){return new t(e,r,e).update(s)[o]()}},d=function(e,r,o){return function(s,i){return new t(e,r,i).update(s)[o]()}},y=function(e,r){var o=l(e,r,"hex");o.create=function(){return new t(e,r,e)},o.update=function(t){return o.create().update(t)};for(var s=0;sh;){if(this.reset)for(this.reset=!1,i[0]=this.block,r=1;a+1>r;++r)i[r]=0;if(e)for(r=this.start;s>h&&n>r;++h)i[r>>2]|=t[h]<h&&n>r;++h)o=t.charCodeAt(h),128>o?i[r>>2]|=o<o?(i[r>>2]|=(192|o>>6)<>2]|=(128|63&o)<o||o>=57344?(i[r>>2]|=(224|o>>12)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<>2]|=(240|o>>18)<>2]|=(128|o>>12&63)<>2]|=(128|o>>6&63)<>2]|=(128|63&o)<=n){for(this.start=r-n,this.block=i[a],r=0;a>r;++r)f[r]^=i[r];A(f),this.reset=!0}else this.start=r}return this},t.prototype.finalize=function(){var t=this.blocks,e=this.lastByteIndex,r=this.blockCount,o=this.s;if(t[e>>2]|=this.padding[3&e],this.lastByteIndex===this.byteCount)for(t[0]=t[r],e=1;r+1>e;++e)t[e]=0;for(t[r-1]|=2147483648,e=0;r>e;++e)o[e]^=t[e];A(o)},t.prototype.toString=t.prototype.hex=function(){this.finalize();for(var t,e=this.blockCount,r=this.s,o=this.outputBlocks,i=this.extraBytes,n=0,a=0,u="";o>a;){for(n=0;e>n&&o>a;++n,++a)t=r[n],u+=s[t>>4&15]+s[15&t]+s[t>>12&15]+s[t>>8&15]+s[t>>20&15]+s[t>>16&15]+s[t>>28&15]+s[t>>24&15];a%e===0&&(A(r),n=0)}return i&&(t=r[n],i>0&&(u+=s[t>>4&15]+s[15&t]),i>1&&(u+=s[t>>12&15]+s[t>>8&15]),i>2&&(u+=s[t>>20&15]+s[t>>16&15])),u},t.prototype.arrayBuffer=function(){this.finalize();var t,e=this.blockCount,r=this.s,o=this.outputBlocks,s=this.extraBytes,i=0,n=0,a=this.outputBits>>3;t=new ArrayBuffer(s?o+1<<2:a);for(var u=new Uint32Array(t);o>n;){for(i=0;e>i&&o>n;++i,++n)u[n]=r[i];n%e===0&&A(r)}return s&&(u[i]=r[i],t=t.slice(0,a)),t},t.prototype.buffer=t.prototype.arrayBuffer,t.prototype.digest=t.prototype.array=function(){this.finalize();for(var t,e,r=this.blockCount,o=this.s,s=this.outputBlocks,i=this.extraBytes,n=0,a=0,u=[];s>a;){for(n=0;r>n&&s>a;++n,++a)t=a<<2,e=o[n],u[t]=255&e,u[t+1]=e>>8&255,u[t+2]=e>>16&255,u[t+3]=e>>24&255;a%r===0&&A(o)}return i&&(t=a<<2,e=o[n],i>0&&(u[t]=255&e),i>1&&(u[t+1]=e>>8&255),i>2&&(u[t+2]=e>>16&255)),u};var A=function(t){var e,r,o,s,i,n,a,u,f,c,p,l,d,y,b,v,k,B,g,x,C,w,_,A,m,S,M,O,z,J,N,j,I,H,U,D,E,q,F,G,K,L,P,Q,R,T,V,W,X,Y,Z,$,tt,et,rt,ot,st,it,nt,at,ut,ht,ft;for(o=0;48>o;o+=2)s=t[0]^t[10]^t[20]^t[30]^t[40],i=t[1]^t[11]^t[21]^t[31]^t[41],n=t[2]^t[12]^t[22]^t[32]^t[42],a=t[3]^t[13]^t[23]^t[33]^t[43],u=t[4]^t[14]^t[24]^t[34]^t[44],f=t[5]^t[15]^t[25]^t[35]^t[45],c=t[6]^t[16]^t[26]^t[36]^t[46],p=t[7]^t[17]^t[27]^t[37]^t[47],l=t[8]^t[18]^t[28]^t[38]^t[48],d=t[9]^t[19]^t[29]^t[39]^t[49],e=l^(n<<1|a>>>31),r=d^(a<<1|n>>>31),t[0]^=e,t[1]^=r,t[10]^=e,t[11]^=r,t[20]^=e,t[21]^=r,t[30]^=e,t[31]^=r,t[40]^=e,t[41]^=r,e=s^(u<<1|f>>>31),r=i^(f<<1|u>>>31),t[2]^=e,t[3]^=r,t[12]^=e,t[13]^=r,t[22]^=e,t[23]^=r,t[32]^=e,t[33]^=r,t[42]^=e,t[43]^=r,e=n^(c<<1|p>>>31),r=a^(p<<1|c>>>31),t[4]^=e,t[5]^=r,t[14]^=e,t[15]^=r,t[24]^=e,t[25]^=r,t[34]^=e,t[35]^=r,t[44]^=e,t[45]^=r,e=u^(l<<1|d>>>31),r=f^(d<<1|l>>>31),t[6]^=e,t[7]^=r,t[16]^=e,t[17]^=r,t[26]^=e,t[27]^=r,t[36]^=e,t[37]^=r,t[46]^=e,t[47]^=r,e=c^(s<<1|i>>>31),r=p^(i<<1|s>>>31),t[8]^=e,t[9]^=r,t[18]^=e,t[19]^=r,t[28]^=e,t[29]^=r,t[38]^=e,t[39]^=r,t[48]^=e,t[49]^=r,y=t[0],b=t[1],T=t[11]<<4|t[10]>>>28,V=t[10]<<4|t[11]>>>28,O=t[20]<<3|t[21]>>>29,z=t[21]<<3|t[20]>>>29,at=t[31]<<9|t[30]>>>23,ut=t[30]<<9|t[31]>>>23,L=t[40]<<18|t[41]>>>14,P=t[41]<<18|t[40]>>>14,H=t[2]<<1|t[3]>>>31,U=t[3]<<1|t[2]>>>31,v=t[13]<<12|t[12]>>>20,k=t[12]<<12|t[13]>>>20,W=t[22]<<10|t[23]>>>22,X=t[23]<<10|t[22]>>>22,J=t[33]<<13|t[32]>>>19,N=t[32]<<13|t[33]>>>19,ht=t[42]<<2|t[43]>>>30,ft=t[43]<<2|t[42]>>>30,et=t[5]<<30|t[4]>>>2,rt=t[4]<<30|t[5]>>>2,D=t[14]<<6|t[15]>>>26,E=t[15]<<6|t[14]>>>26,B=t[25]<<11|t[24]>>>21,g=t[24]<<11|t[25]>>>21,Y=t[34]<<15|t[35]>>>17,Z=t[35]<<15|t[34]>>>17,j=t[45]<<29|t[44]>>>3,I=t[44]<<29|t[45]>>>3,A=t[6]<<28|t[7]>>>4,m=t[7]<<28|t[6]>>>4,ot=t[17]<<23|t[16]>>>9,st=t[16]<<23|t[17]>>>9,q=t[26]<<25|t[27]>>>7,F=t[27]<<25|t[26]>>>7,x=t[36]<<21|t[37]>>>11,C=t[37]<<21|t[36]>>>11,$=t[47]<<24|t[46]>>>8,tt=t[46]<<24|t[47]>>>8,Q=t[8]<<27|t[9]>>>5,R=t[9]<<27|t[8]>>>5,S=t[18]<<20|t[19]>>>12,M=t[19]<<20|t[18]>>>12,it=t[29]<<7|t[28]>>>25,nt=t[28]<<7|t[29]>>>25,G=t[38]<<8|t[39]>>>24,K=t[39]<<8|t[38]>>>24,w=t[48]<<14|t[49]>>>18,_=t[49]<<14|t[48]>>>18,t[0]=y^~v&B,t[1]=b^~k&g,t[10]=A^~S&O,t[11]=m^~M&z,t[20]=H^~D&q,t[21]=U^~E&F,t[30]=Q^~T&W,t[31]=R^~V&X,t[40]=et^~ot&it,t[41]=rt^~st&nt,t[2]=v^~B&x,t[3]=k^~g&C,t[12]=S^~O&J,t[13]=M^~z&N,t[22]=D^~q&G,t[23]=E^~F&K,t[32]=T^~W&Y,t[33]=V^~X&Z,t[42]=ot^~it&at,t[43]=st^~nt&ut,t[4]=B^~x&w,t[5]=g^~C&_,t[14]=O^~J&j,t[15]=z^~N&I,t[24]=q^~G&L,t[25]=F^~K&P,t[34]=W^~Y&$,t[35]=X^~Z&tt,t[44]=it^~at&ht,t[45]=nt^~ut&ft,t[6]=x^~w&y,t[7]=C^~_&b,t[16]=J^~j&A,t[17]=N^~I&m,t[26]=G^~L&H,t[27]=K^~P&U,t[36]=Y^~$&Q,t[37]=Z^~tt&R,t[46]=at^~ht&et,t[47]=ut^~ft&rt,t[8]=w^~y&v,t[9]=_^~b&k,t[18]=j^~A&S,t[19]=I^~m&M,t[28]=L^~H&D,t[29]=P^~U&E,t[38]=$^~Q&T,t[39]=tt^~R&V,t[48]=ht^~et&ot,t[49]=ft^~rt&st,t[0]^=h[o],t[1]^=h[o+1]};if(o)module.exports=k;else for(var g=0;g> 5; - this.byteCount = this.blockCount << 2; - this.outputBlocks = outputBits >> 5; - this.extraBytes = (outputBits & 31) >> 3; - - for (var i = 0; i < 50; ++i) { - this.s[i] = 0; - } - } - - Keccak.prototype.update = function (message) { - var notString = typeof message !== 'string'; - if (notString && message.constructor === ArrayBuffer) { - message = new Uint8Array(message); - } - var length = message.length, blocks = this.blocks, byteCount = this.byteCount, - blockCount = this.blockCount, index = 0, s = this.s, i, code; - - while (index < length) { - if (this.reset) { - this.reset = false; - blocks[0] = this.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (notString) { - for (i = this.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = this.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - this.lastByteIndex = i; - if (i >= byteCount) { - this.start = i - byteCount; - this.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - this.reset = true; - } else { - this.start = i; - } - } - return this; - }; - - Keccak.prototype.finalize = function () { - var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s; - blocks[i >> 2] |= this.padding[i & 3]; - if (this.lastByteIndex === this.byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - }; - - Keccak.prototype.toString = Keccak.prototype.hex = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var hex = '', block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + - HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + - HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + - HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - if (extraBytes) { - block = s[i]; - if (extraBytes > 0) { - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F]; - } - if (extraBytes > 1) { - hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F]; - } - if (extraBytes > 2) { - hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F]; - } - } - return hex; - }; - - Keccak.prototype.arrayBuffer = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var bytes = this.outputBits >> 3; - var buffer; - if (extraBytes) { - buffer = new ArrayBuffer((outputBlocks + 1) << 2); - } else { - buffer = new ArrayBuffer(bytes); - } - var array = new Uint32Array(buffer); - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - array[j] = s[i]; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - array[i] = s[i]; - buffer = buffer.slice(0, bytes); - } - return buffer; - }; - - Keccak.prototype.buffer = Keccak.prototype.arrayBuffer; - - Keccak.prototype.digest = Keccak.prototype.array = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var array = [], offset, block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - offset = j << 2; - block = s[i]; - array[offset] = block & 0xFF; - array[offset + 1] = (block >> 8) & 0xFF; - array[offset + 2] = (block >> 16) & 0xFF; - array[offset + 3] = (block >> 24) & 0xFF; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - offset = j << 2; - block = s[i]; - if (extraBytes > 0) { - array[offset] = block & 0xFF; - } - if (extraBytes > 1) { - array[offset + 1] = (block >> 8) & 0xFF; - } - if (extraBytes > 2) { - array[offset + 2] = (block >> 16) & 0xFF; - } - } - return array; - }; - - var f = function (s) { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } - }; - - if (COMMON_JS) { - module.exports = methods; - } else { - for (var i = 0; i < methodNames.length; ++i) { - root[methodNames[i]] = methods[methodNames[i]]; - } - } -})(); diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/index.html b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/index.html deleted file mode 100644 index 7f462905..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - SHA3 - - - - - - -
- - - - - - diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/node-test.js b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/node-test.js deleted file mode 100644 index 864f9b28..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/node-test.js +++ /dev/null @@ -1,60 +0,0 @@ -expect = require('expect.js'); - -// Node.js env -var sha3 = require('../src/sha3.js'); -keccak_512 = sha3.keccak_512; -keccak_384 = sha3.keccak_384; -keccak_256 = sha3.keccak_256; -keccak_224 = sha3.keccak_224; -sha3_512 = sha3.sha3_512; -sha3_384 = sha3.sha3_384; -sha3_256 = sha3.sha3_256; -sha3_224 = sha3.sha3_224; -shake_128 = sha3.shake_128; -shake_256 = sha3.shake_256; -require('./test.js'); -require('./test-shake.js'); - -delete require.cache[require.resolve('../src/sha3.js')]; -delete require.cache[require.resolve('./test.js')]; -delete require.cache[require.resolve('./test-shake.js')]; - -// Webpack browser env -JS_SHA3_NO_NODE_JS = true; -window = global; -expect = require('expect.js'); -var sha3 = require('../src/sha3.js'); -keccak_512 = sha3.keccak_512; -keccak_384 = sha3.keccak_384; -keccak_256 = sha3.keccak_256; -keccak_224 = sha3.keccak_224; -sha3_512 = sha3.sha3_512; -sha3_384 = sha3.sha3_384; -sha3_256 = sha3.sha3_256; -sha3_224 = sha3.sha3_224; -shake_128 = sha3.shake_128; -shake_256 = sha3.shake_256; -require('./test.js'); -require('./test-shake.js'); - -delete require.cache[require.resolve('../src/sha3.js')]; -delete require.cache[require.resolve('./test.js')]; -delete require.cache[require.resolve('./test-shake.js')]; -sha3_512 = null; -sha3_384 = null; -sha3_256 = null; -sha3_224 = null; -keccak_512 = null; -keccak_384 = null; -keccak_256 = null; -keccak_224 = null; -shake_128 = null; -shake_256 = null; - -// browser env -JS_SHA3_NO_NODE_JS = true; -JS_SHA3_NO_COMMON_JS = true; -window = global; -require('../src/sha3.js'); -require('./test.js'); -require('./test-shake.js'); diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/test-shake.js b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/test-shake.js deleted file mode 100644 index dbdb910b..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/test-shake.js +++ /dev/null @@ -1,106 +0,0 @@ -(function (shake_256, shake_128) { - describe('#shake_128', function () { - context('with 256 output', function () { - it('should be equal', function () { - expect(shake_128('', 256)).to.be('7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26'); - expect(shake_128('The quick brown fox jumps over the lazy dog', 256)).to.be('f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e'); - expect(shake_128('The quick brown fox jumps over the lazy dof', 256)).to.be('853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c'); - }); - }); - - context('with 8 output', function () { - it('should be equal', function () { - expect(shake_128('', 8)).to.be('7f'); - expect(shake_128('The quick brown fox jumps over the lazy dog', 8)).to.be('f4'); - expect(shake_128('The quick brown fox jumps over the lazy dof', 8)).to.be('85'); - }); - }); - - context('with 1368 output', function () { - it('should be equal', function () { - expect(shake_128('AAA', 1368)).to.be('15e0fe495a05b74f9fd3eaa8a898a623488220dcbf9ba2f12d23d278b7cecfa4a5e4b8d0fccb0fdbc9e51cd0b4344a32a83f0ba40a514a7b86a77c854c61b836192849da9214c43c4f8bc09ec7a76af92b2fc56e4952024be65b1a47835e0bc014733b24d0e31197ca648f831caebbfd8a5b237ae6bdc9d6cc803a2c5e57dd9346eecf972bd85450f18a413dc6239982e1eb6e0c6df856385c9597d0320edb40b6fe60a74f07524015ad36'); - expect(shake_128('AAA', 1376)).to.be('15e0fe495a05b74f9fd3eaa8a898a623488220dcbf9ba2f12d23d278b7cecfa4a5e4b8d0fccb0fdbc9e51cd0b4344a32a83f0ba40a514a7b86a77c854c61b836192849da9214c43c4f8bc09ec7a76af92b2fc56e4952024be65b1a47835e0bc014733b24d0e31197ca648f831caebbfd8a5b237ae6bdc9d6cc803a2c5e57dd9346eecf972bd85450f18a413dc6239982e1eb6e0c6df856385c9597d0320edb40b6fe60a74f07524015ad36b6'); - }); - }); - - context('with more output', function () { - it('should be equal', function () { - expect(shake_128('', 16)).to.be('7f9c'); - expect(shake_128('', 24)).to.be('7f9c2b'); - expect(shake_128.array('', 16)).to.eql([0x7f, 0x9c]); - expect(shake_128.array('', 24)).to.eql([0x7f, 0x9c, 0x2b]); - }); - }); - - context('with 8 output ArrayBuffer', function () { - it('should be equal', function () { - expect(shake_128.buffer('', 8).toHexString()).to.be('7f'); - expect(shake_128.buffer('The quick brown fox jumps over the lazy dog', 8).toHexString()).to.be('f4'); - expect(shake_128.buffer('The quick brown fox jumps over the lazy dof', 8).toHexString()).to.be('85'); - }); - }); - - context('#update', function () { - it('should be equal', function () { - expect(shake_128.update('', 256).hex()).to.be('7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26'); - expect(shake_128.update('The quick brown fox ', 256).update('jumps over the lazy dog').hex()).to.be('f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e'); - }); - }); - }); - - describe('#shake_256', function () { - context('with 512 output', function () { - it('should be equal', function () { - expect(shake_256('', 512)).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be'); - }); - }); - context('with 8 output', function () { - it('should be equal', function () { - expect(shake_256('', 8)).to.be('46'); - }); - }); - - context('with 1112 output', function () { - it('should be equal', function () { - expect(shake_256('AAA', 1112)).to.be('419614c8b247ee5e9f4a540f7aaa5ca5b44b119f47ab7f494c05095ae5a61ab6b62c84b8b27888813ce8a4d4dab3ed7617c6bab643aa01bb1b113e6d48c3e1eeb73e96f96ffaf12e0c36b190404982b856087acfcb467535e17152e5c15a4d62a18a15d8fe434b3a7274362b0d46b627df1e011a1d037e161d5b540df7ebadab351fb730904daa9a4f40fd'); - expect(shake_256('AAA', 1120)).to.be('419614c8b247ee5e9f4a540f7aaa5ca5b44b119f47ab7f494c05095ae5a61ab6b62c84b8b27888813ce8a4d4dab3ed7617c6bab643aa01bb1b113e6d48c3e1eeb73e96f96ffaf12e0c36b190404982b856087acfcb467535e17152e5c15a4d62a18a15d8fe434b3a7274362b0d46b627df1e011a1d037e161d5b540df7ebadab351fb730904daa9a4f40fdb5'); - }); - }); - - context('with 4100 output', function () { - it('should be equal', function () { - // https://raw.githubusercontent.com/gvanas/KeccakCodePackage/master/TestVectors/ShortMsgKAT_SHAKE256.txt - // Len = 0, Msg = 00 - expect(shake_256('', 4100)).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957692cc7edd0b45ae3dc07223c8e92937bef84bc0eab862853349ec75546f58fb7c2775c38462c5010d846c185c15111e595522a6bcd16cf86f3d122109e3b1fdd943b6aec468a2d621a7c06c6a957c62b54dafc3be87567d677231395f6147293b68ceab7a9e0c58d864e8efde4e1b9a46cbe854713672f5caaae314ed9083dab4b099f8e300f01b8650f1f4b1d8fcf3f3cb53fb8e9eb2ea203bdc970f50ae55428a91f7f53ac266b28419c3778a15fd248d339ede785fb7f5a1aaa96d313eacc890936c173cdcd0fab882c45755feb3aed96d477ff96390bf9a66d1368b208e21f7c10d04a3dbd4e360633e5db4b602601c14cea737db3dcf722632cc77851cbdde2aaf0a33a07b373445df490cc8fc1e4160ff118378f11f0477de055a81a9eda57a4a2cfb0c83929d310912f729ec6cfa36c6ac6a75837143045d791cc85eff5b21932f23861bcf23a52b5da67eaf7baae0f5fb1369db78f3ac45f8c4ac5671d85735cdddb09d2b1e34a1fc066ff4a162cb263d6541274ae2fcc865f618abe27c124cd8b074ccd516301b91875824d09958f341ef274bdab0bae316339894304e35877b0c28a9b1fd166c796b9cc258a064a8f57e27f2a'); - - // Len = 2040 - // Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 - expect(shake_256([0x3A,0x3A,0x81,0x9C,0x48,0xEF,0xDE,0x2A,0xD9,0x14,0xFB,0xF0,0x0E,0x18,0xAB,0x6B,0xC4,0xF1,0x45,0x13,0xAB,0x27,0xD0,0xC1,0x78,0xA1,0x88,0xB6,0x14,0x31,0xE7,0xF5,0x62,0x3C,0xB6,0x6B,0x23,0x34,0x67,0x75,0xD3,0x86,0xB5,0x0E,0x98,0x2C,0x49,0x3A,0xDB,0xBF,0xC5,0x4B,0x9A,0x3C,0xD3,0x83,0x38,0x23,0x36,0xA1,0xA0,0xB2,0x15,0x0A,0x15,0x35,0x8F,0x33,0x6D,0x03,0xAE,0x18,0xF6,0x66,0xC7,0x57,0x3D,0x55,0xC4,0xFD,0x18,0x1C,0x29,0xE6,0xCC,0xFD,0xE6,0x3E,0xA3,0x5F,0x0A,0xDF,0x58,0x85,0xCF,0xC0,0xA3,0xD8,0x4A,0x2B,0x2E,0x4D,0xD2,0x44,0x96,0xDB,0x78,0x9E,0x66,0x31,0x70,0xCE,0xF7,0x47,0x98,0xAA,0x1B,0xBC,0xD4,0x57,0x4E,0xA0,0xBB,0xA4,0x04,0x89,0xD7,0x64,0xB2,0xF8,0x3A,0xAD,0xC6,0x6B,0x14,0x8B,0x4A,0x0C,0xD9,0x52,0x46,0xC1,0x27,0xD5,0x87,0x1C,0x4F,0x11,0x41,0x86,0x90,0xA5,0xDD,0xF0,0x12,0x46,0xA0,0xC8,0x0A,0x43,0xC7,0x00,0x88,0xB6,0x18,0x36,0x39,0xDC,0xFD,0xA4,0x12,0x5B,0xD1,0x13,0xA8,0xF4,0x9E,0xE2,0x3E,0xD3,0x06,0xFA,0xAC,0x57,0x6C,0x3F,0xB0,0xC1,0xE2,0x56,0x67,0x1D,0x81,0x7F,0xC2,0x53,0x4A,0x52,0xF5,0xB4,0x39,0xF7,0x2E,0x42,0x4D,0xE3,0x76,0xF4,0xC5,0x65,0xCC,0xA8,0x23,0x07,0xDD,0x9E,0xF7,0x6D,0xA5,0xB7,0xC4,0xEB,0x7E,0x08,0x51,0x72,0xE3,0x28,0x80,0x7C,0x02,0xD0,0x11,0xFF,0xBF,0x33,0x78,0x53,0x78,0xD7,0x9D,0xC2,0x66,0xF6,0xA5,0xBE,0x6B,0xB0,0xE4,0xA9,0x2E,0xCE,0xEB,0xAE,0xB1], 4100)).to.be('8a5199b4a7e133e264a86202720655894d48cff344a928cf8347f48379cef347dfc5bcffab99b27b1f89aa2735e23d30088ffa03b9edb02b9635470ab9f1038985d55f9ca774572dd006470ea65145469609f9fa0831bf1ffd842dc24acade27bd9816e3b5bf2876cb112232a0eb4475f1dff9f5c713d9ffd4ccb89ae5607fe35731df06317949eef646e9591cf3be53add6b7dd2b6096e2b3fb06e662ec8b2d77422daad9463cd155204acdbd38e319613f39f99b6dfb35ca9365160066db19835888c2241ff9a731a4acbb5663727aac34a401247fbaa7499e7d5ee5b69d31025e63d04c35c798bca1262d5673a9cf0930b5ad89bd485599dc184528da4790f088ebd170b635d9581632d2ff90db79665ced430089af13c9f21f6d443a818064f17aec9e9c5457001fa8dc6afbadbe3138f388d89d0e6f22f66671255b210754ed63d81dce75ce8f189b534e6d6b3539aa51e837c42df9df59c71e6171cd4902fe1bdc73fb1775b5c754a1ed4ea7f3105fc543ee0418dad256f3f6118ea77114a16c15355b42877a1db2a7df0e155ae1d8670abcec3450f4e2eec9838f895423ef63d261138baaf5d9f104cb5a957aea06c0b9b8c78b0d441796dc0350ddeabb78a33b6f1f9e68ede3d1805c7b7e2cfd54e0fad62f0d8ca67a775dc4546af9096f2edb221db42843d65327861282dc946a0ba01a11863ab2d1dfd16e3973d4'); - }); - }); - - context('with 4100 output ArrayBuffer', function () { - it('should be equal', function () { - // https://raw.githubusercontent.com/gvanas/KeccakCodePackage/master/TestVectors/ShortMsgKAT_SHAKE256.txt - // Len = 0, Msg = 00 - expect(shake_256.buffer('', 4100).toHexString()).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957692cc7edd0b45ae3dc07223c8e92937bef84bc0eab862853349ec75546f58fb7c2775c38462c5010d846c185c15111e595522a6bcd16cf86f3d122109e3b1fdd943b6aec468a2d621a7c06c6a957c62b54dafc3be87567d677231395f6147293b68ceab7a9e0c58d864e8efde4e1b9a46cbe854713672f5caaae314ed9083dab4b099f8e300f01b8650f1f4b1d8fcf3f3cb53fb8e9eb2ea203bdc970f50ae55428a91f7f53ac266b28419c3778a15fd248d339ede785fb7f5a1aaa96d313eacc890936c173cdcd0fab882c45755feb3aed96d477ff96390bf9a66d1368b208e21f7c10d04a3dbd4e360633e5db4b602601c14cea737db3dcf722632cc77851cbdde2aaf0a33a07b373445df490cc8fc1e4160ff118378f11f0477de055a81a9eda57a4a2cfb0c83929d310912f729ec6cfa36c6ac6a75837143045d791cc85eff5b21932f23861bcf23a52b5da67eaf7baae0f5fb1369db78f3ac45f8c4ac5671d85735cdddb09d2b1e34a1fc066ff4a162cb263d6541274ae2fcc865f618abe27c124cd8b074ccd516301b91875824d09958f341ef274bdab0bae316339894304e35877b0c28a9b1fd166c796b9cc258a064a8f57e27f2a'); - - // Len = 2040 - // Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 - expect(shake_256.buffer([0x3A,0x3A,0x81,0x9C,0x48,0xEF,0xDE,0x2A,0xD9,0x14,0xFB,0xF0,0x0E,0x18,0xAB,0x6B,0xC4,0xF1,0x45,0x13,0xAB,0x27,0xD0,0xC1,0x78,0xA1,0x88,0xB6,0x14,0x31,0xE7,0xF5,0x62,0x3C,0xB6,0x6B,0x23,0x34,0x67,0x75,0xD3,0x86,0xB5,0x0E,0x98,0x2C,0x49,0x3A,0xDB,0xBF,0xC5,0x4B,0x9A,0x3C,0xD3,0x83,0x38,0x23,0x36,0xA1,0xA0,0xB2,0x15,0x0A,0x15,0x35,0x8F,0x33,0x6D,0x03,0xAE,0x18,0xF6,0x66,0xC7,0x57,0x3D,0x55,0xC4,0xFD,0x18,0x1C,0x29,0xE6,0xCC,0xFD,0xE6,0x3E,0xA3,0x5F,0x0A,0xDF,0x58,0x85,0xCF,0xC0,0xA3,0xD8,0x4A,0x2B,0x2E,0x4D,0xD2,0x44,0x96,0xDB,0x78,0x9E,0x66,0x31,0x70,0xCE,0xF7,0x47,0x98,0xAA,0x1B,0xBC,0xD4,0x57,0x4E,0xA0,0xBB,0xA4,0x04,0x89,0xD7,0x64,0xB2,0xF8,0x3A,0xAD,0xC6,0x6B,0x14,0x8B,0x4A,0x0C,0xD9,0x52,0x46,0xC1,0x27,0xD5,0x87,0x1C,0x4F,0x11,0x41,0x86,0x90,0xA5,0xDD,0xF0,0x12,0x46,0xA0,0xC8,0x0A,0x43,0xC7,0x00,0x88,0xB6,0x18,0x36,0x39,0xDC,0xFD,0xA4,0x12,0x5B,0xD1,0x13,0xA8,0xF4,0x9E,0xE2,0x3E,0xD3,0x06,0xFA,0xAC,0x57,0x6C,0x3F,0xB0,0xC1,0xE2,0x56,0x67,0x1D,0x81,0x7F,0xC2,0x53,0x4A,0x52,0xF5,0xB4,0x39,0xF7,0x2E,0x42,0x4D,0xE3,0x76,0xF4,0xC5,0x65,0xCC,0xA8,0x23,0x07,0xDD,0x9E,0xF7,0x6D,0xA5,0xB7,0xC4,0xEB,0x7E,0x08,0x51,0x72,0xE3,0x28,0x80,0x7C,0x02,0xD0,0x11,0xFF,0xBF,0x33,0x78,0x53,0x78,0xD7,0x9D,0xC2,0x66,0xF6,0xA5,0xBE,0x6B,0xB0,0xE4,0xA9,0x2E,0xCE,0xEB,0xAE,0xB1], 4100).toHexString()).to.be('8a5199b4a7e133e264a86202720655894d48cff344a928cf8347f48379cef347dfc5bcffab99b27b1f89aa2735e23d30088ffa03b9edb02b9635470ab9f1038985d55f9ca774572dd006470ea65145469609f9fa0831bf1ffd842dc24acade27bd9816e3b5bf2876cb112232a0eb4475f1dff9f5c713d9ffd4ccb89ae5607fe35731df06317949eef646e9591cf3be53add6b7dd2b6096e2b3fb06e662ec8b2d77422daad9463cd155204acdbd38e319613f39f99b6dfb35ca9365160066db19835888c2241ff9a731a4acbb5663727aac34a401247fbaa7499e7d5ee5b69d31025e63d04c35c798bca1262d5673a9cf0930b5ad89bd485599dc184528da4790f088ebd170b635d9581632d2ff90db79665ced430089af13c9f21f6d443a818064f17aec9e9c5457001fa8dc6afbadbe3138f388d89d0e6f22f66671255b210754ed63d81dce75ce8f189b534e6d6b3539aa51e837c42df9df59c71e6171cd4902fe1bdc73fb1775b5c754a1ed4ea7f3105fc543ee0418dad256f3f6118ea77114a16c15355b42877a1db2a7df0e155ae1d8670abcec3450f4e2eec9838f895423ef63d261138baaf5d9f104cb5a957aea06c0b9b8c78b0d441796dc0350ddeabb78a33b6f1f9e68ede3d1805c7b7e2cfd54e0fad62f0d8ca67a775dc4546af9096f2edb221db42843d65327861282dc946a0ba01a11863ab2d1dfd16e3973d4'); - }); - }); - - context('with 4100 output Array', function () { - it('should be equal', function () { - // https://raw.githubusercontent.com/gvanas/KeccakCodePackage/master/TestVectors/ShortMsgKAT_SHAKE256.txt - // Len = 0, Msg = 00 - expect(shake_256.array('', 4100).toHexString()).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957692cc7edd0b45ae3dc07223c8e92937bef84bc0eab862853349ec75546f58fb7c2775c38462c5010d846c185c15111e595522a6bcd16cf86f3d122109e3b1fdd943b6aec468a2d621a7c06c6a957c62b54dafc3be87567d677231395f6147293b68ceab7a9e0c58d864e8efde4e1b9a46cbe854713672f5caaae314ed9083dab4b099f8e300f01b8650f1f4b1d8fcf3f3cb53fb8e9eb2ea203bdc970f50ae55428a91f7f53ac266b28419c3778a15fd248d339ede785fb7f5a1aaa96d313eacc890936c173cdcd0fab882c45755feb3aed96d477ff96390bf9a66d1368b208e21f7c10d04a3dbd4e360633e5db4b602601c14cea737db3dcf722632cc77851cbdde2aaf0a33a07b373445df490cc8fc1e4160ff118378f11f0477de055a81a9eda57a4a2cfb0c83929d310912f729ec6cfa36c6ac6a75837143045d791cc85eff5b21932f23861bcf23a52b5da67eaf7baae0f5fb1369db78f3ac45f8c4ac5671d85735cdddb09d2b1e34a1fc066ff4a162cb263d6541274ae2fcc865f618abe27c124cd8b074ccd516301b91875824d09958f341ef274bdab0bae316339894304e35877b0c28a9b1fd166c796b9cc258a064a8f57e27f2a'); - - // Len = 2040 - // Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 - expect(shake_256.array([0x3A,0x3A,0x81,0x9C,0x48,0xEF,0xDE,0x2A,0xD9,0x14,0xFB,0xF0,0x0E,0x18,0xAB,0x6B,0xC4,0xF1,0x45,0x13,0xAB,0x27,0xD0,0xC1,0x78,0xA1,0x88,0xB6,0x14,0x31,0xE7,0xF5,0x62,0x3C,0xB6,0x6B,0x23,0x34,0x67,0x75,0xD3,0x86,0xB5,0x0E,0x98,0x2C,0x49,0x3A,0xDB,0xBF,0xC5,0x4B,0x9A,0x3C,0xD3,0x83,0x38,0x23,0x36,0xA1,0xA0,0xB2,0x15,0x0A,0x15,0x35,0x8F,0x33,0x6D,0x03,0xAE,0x18,0xF6,0x66,0xC7,0x57,0x3D,0x55,0xC4,0xFD,0x18,0x1C,0x29,0xE6,0xCC,0xFD,0xE6,0x3E,0xA3,0x5F,0x0A,0xDF,0x58,0x85,0xCF,0xC0,0xA3,0xD8,0x4A,0x2B,0x2E,0x4D,0xD2,0x44,0x96,0xDB,0x78,0x9E,0x66,0x31,0x70,0xCE,0xF7,0x47,0x98,0xAA,0x1B,0xBC,0xD4,0x57,0x4E,0xA0,0xBB,0xA4,0x04,0x89,0xD7,0x64,0xB2,0xF8,0x3A,0xAD,0xC6,0x6B,0x14,0x8B,0x4A,0x0C,0xD9,0x52,0x46,0xC1,0x27,0xD5,0x87,0x1C,0x4F,0x11,0x41,0x86,0x90,0xA5,0xDD,0xF0,0x12,0x46,0xA0,0xC8,0x0A,0x43,0xC7,0x00,0x88,0xB6,0x18,0x36,0x39,0xDC,0xFD,0xA4,0x12,0x5B,0xD1,0x13,0xA8,0xF4,0x9E,0xE2,0x3E,0xD3,0x06,0xFA,0xAC,0x57,0x6C,0x3F,0xB0,0xC1,0xE2,0x56,0x67,0x1D,0x81,0x7F,0xC2,0x53,0x4A,0x52,0xF5,0xB4,0x39,0xF7,0x2E,0x42,0x4D,0xE3,0x76,0xF4,0xC5,0x65,0xCC,0xA8,0x23,0x07,0xDD,0x9E,0xF7,0x6D,0xA5,0xB7,0xC4,0xEB,0x7E,0x08,0x51,0x72,0xE3,0x28,0x80,0x7C,0x02,0xD0,0x11,0xFF,0xBF,0x33,0x78,0x53,0x78,0xD7,0x9D,0xC2,0x66,0xF6,0xA5,0xBE,0x6B,0xB0,0xE4,0xA9,0x2E,0xCE,0xEB,0xAE,0xB1], 4100).toHexString()).to.be('8a5199b4a7e133e264a86202720655894d48cff344a928cf8347f48379cef347dfc5bcffab99b27b1f89aa2735e23d30088ffa03b9edb02b9635470ab9f1038985d55f9ca774572dd006470ea65145469609f9fa0831bf1ffd842dc24acade27bd9816e3b5bf2876cb112232a0eb4475f1dff9f5c713d9ffd4ccb89ae5607fe35731df06317949eef646e9591cf3be53add6b7dd2b6096e2b3fb06e662ec8b2d77422daad9463cd155204acdbd38e319613f39f99b6dfb35ca9365160066db19835888c2241ff9a731a4acbb5663727aac34a401247fbaa7499e7d5ee5b69d31025e63d04c35c798bca1262d5673a9cf0930b5ad89bd485599dc184528da4790f088ebd170b635d9581632d2ff90db79665ced430089af13c9f21f6d443a818064f17aec9e9c5457001fa8dc6afbadbe3138f388d89d0e6f22f66671255b210754ed63d81dce75ce8f189b534e6d6b3539aa51e837c42df9df59c71e6171cd4902fe1bdc73fb1775b5c754a1ed4ea7f3105fc543ee0418dad256f3f6118ea77114a16c15355b42877a1db2a7df0e155ae1d8670abcec3450f4e2eec9838f895423ef63d261138baaf5d9f104cb5a957aea06c0b9b8c78b0d441796dc0350ddeabb78a33b6f1f9e68ede3d1805c7b7e2cfd54e0fad62f0d8ca67a775dc4546af9096f2edb221db42843d65327861282dc946a0ba01a11863ab2d1dfd16e3973d4'); - }); - }); - }); -})(shake_256, shake_128); diff --git a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/test.js b/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/test.js deleted file mode 100644 index 47940be0..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/node_modules/js-sha3/tests/test.js +++ /dev/null @@ -1,316 +0,0 @@ -(function (sha3_512, sha3_384, sha3_256, sha3_224, keccak_512, keccak_384, keccak_256, keccak_224) { - Array.prototype.toHexString = ArrayBuffer.prototype.toHexString = function () { - var array = new Uint8Array(this); - var hex = ''; - for (var i = 0; i < array.length; ++i) { - var c = array[i].toString('16'); - hex += c.length == 1 ? '0' + c : c; - } - return hex; - }; - - function runTestCases(methods, testCases) { - methods.forEach(function (method) { - describe('#' + method.name, function () { - var methodTestCases = testCases[method.name]; - for (var testCaseName in methodTestCases) { - (function (testCaseName) { - var testCase = methodTestCases[testCaseName]; - context('when ' + testCaseName, function () { - for (var hash in testCase) { - (function (message, hash) { - it('should be equal', function () { - expect(method.call(message)).to.be(hash); - }); - })(testCase[hash], hash); - } - }); - })(testCaseName); - } - }); - }); - } - - var methods = [ - { - name: 'sha3_512', - call: sha3_512 - }, - { - name: 'sha3_384', - call: sha3_384 - }, - { - name: 'sha3_256', - call: sha3_256 - }, - { - name: 'sha3_224', - call: sha3_224 - }, - { - name: 'keccak_512', - call: keccak_512 - }, - { - name: 'keccak_384', - call: keccak_384 - }, - { - name: 'keccak_256', - call: keccak_256 - }, - { - name: 'keccak_224', - call: keccak_224 - } - ]; - - var testCases = { - sha3_512: { - 'ascii': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': '', - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': 'The quick brown fox jumps over the lazy dog', - '18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '4f8bcf3a60d3ee56a0bd405c3e6bb37dac44b6781c41bf76c91a5d8e621d472b7b13b8806d88914af3d97585df996363ebe17566d5dfeb6f4884a7949ba8263d': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '059bbe2efc50cc30e4d8ec5a96be697e2108fcbf9193e1296192eddabc13b143c0120d059399a13d0d42651efe23a6c1ce2d1efb576c5b207fa2516050505af7': '中文', - '35dfaf82d2ce4be79393dc90e327b4dd15b1c150d8a30f59d8d1b42ca4fc3c87f50b77da36acccf9dc76494d07fc57cfcc9470e627c38f95bce4deab311b87e0': 'aécio', - '33ef254289f36527c93cd203ef1973aec1eff7475c23fa842c3092b0d30965d13b0805c61d0aa92c51245c56bfe26978c35c00f26eb558a043982043ee8b178c': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'accb127bb24b0ffbb7550dc637222d2f78538a8a186c98bc5efdad685b9b396639f34148bf0b94ed470f0e9c3665dc3b4c1cb321bacd32dd317a646295e073d9': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '5b70eaad083f1b86fd535b6812e02f5f2876a4bd8b43aede8d62ae71bb1743ebd919dc41be56d73ba45b67b2876ff215d0575788560e7b0c92b879f8a2fc3111': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - }, - 'special length': { - 'bce9da5b408846edd5bec9f26c2dee9bd835215c3f2b3876197067d87bc4d1af0cd97f94fda59761a0d804fe82383be2c6c4886fbb82e005fcf899449029f221' :'012345678901234567890123456789012345678901234567890123456789012345678901', - '8bdcb85e6b52c29fafac0d3daf65492f2e3499e066da1a095a65eb1144849a26b2790a8b39c2a7fb747456f749391d953841a61cb13289f9806f04981c180a86' :'01234567890123456789012345678901234567890123456789012345678901234567890' - }, - 'Array': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': [], - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': [84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103] - }, - 'Uint8Array': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': new Uint8Array([]), - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]) - }, - 'ArrayBuffer': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': new ArrayBuffer(0), - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]).buffer - } - }, - sha3_384: { - 'ascii': { - '0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004': '', - '7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41': 'The quick brown fox jumps over the lazy dog', - '1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'ca6b121a6060bc85de05e5a8d70577838fad2481b092c8263d6f7bcbe5148740f0c7f9c4dc27061339570496956aaef6': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '9fb5b99e3c546f2738dcd50a14e9aef9c313800c1bf8cf76bc9b2c3a23307841364c5a2d0794702662c5796fb72f5432': '中文', - '70b447f1bd5ce5a4753ccf7a3697eca0315954774374bc1042aff19582ccc32d5067f7da6c2bea9d6d344e11924cbe72': 'aécio', - '7add8d544b0a7cf188b54b1697a046f77e49d5f292e7ffe56feeed90a500b0bf026b9b68892888a1bafb9f8cb89ed874': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '7d0f80fe5c79a04a2a37a30a440e0cc068eb78fe6c3182246ede29645c144b5d33c44607cb2c3111ba77ffc66107f1cd': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'e344b95c6a961a27793eff00fa5103ef78b4180fe41c93fc60a31aff49b3b5e95a92c84fda9a6c80fa403b7df58db59f': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - sha3_256: { - 'ascii': { - 'a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a': '', - '69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04': 'The quick brown fox jumps over the lazy dog', - 'a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'fa198893674a0bf9fb35980504e8cefb250aabd2311a37e5d2205f07fb023d36': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - 'ac5305da3d18be1aed44aa7c70ea548da243a59a5fd546f489348fd5718fb1a0': '中文', - '65c756408eb6c35a1ffa2d7e09711bdc9f0b28716b1376223844a2b4c52b6718': 'aécio', - 'babe9afc555b0311700dfb0b5b6296d49347b3d770480baedfcdc47a4aea6e82': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '4b2f36e4320b86e6ead0ad001e47e6d9e7fcf0044cd5a5fd65490a633c0372a4': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '558a7f843b1ac5e7a8bbef90357876bcce0612992d0dfa2907e95521612f507f': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - sha3_224: { - 'ascii': { - '6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7': '', - 'd15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795': 'The quick brown fox jumps over the lazy dog', - '2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '06885009a28e43e15bf1af718561ad211515a27b542eabc36764a0ca': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '106d169e10b61c2a2a05554d3e631ec94467f8316640f29545d163ee': '中文', - 'b16bad54608dc01864a5d7510d4c19b09f3a0f39cfc4ba1e53aa952a': 'aécio', - 'f59253c41cb87e5cd953311656716cb5b64dbafc9e8155f0dd68123c': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '135c13deb71fdf6fb77b52b720c43ddd6ce7467f9147a74248557114': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'bd05581e02445c53e05aad2014f6a3819d77a9dff918b8c6bf60bd06': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_512: { - 'ascii': { - '0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e': '', - 'd135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609': 'The quick brown fox jumps over the lazy dog', - 'ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '10dcbf6389980ce3594547939bbc685363d28adbd6a05bc4abd7fc62e7693a1f6e33569fed5a380bfecb56ae811d25939b95823f39bb0f16a08740629d066d43': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524': '中文', - 'c452ec93e83d4795fcab62a76eed0d88f2231a995ce108ac8f130246f87c4a11cb18a2c1a688a5695906a6f863e71bbe8997c6610319ab97f12d2e5bf0afe458': 'aécio', - '8a2d72022ce19d989dbe6a0017faccbf5dc2e22c162d1c5eb168864d32dd1a71e1b4782652c148cf6ca47b77a72c96fff682e72bdfef0566d4b7cca3c9ccc59d': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '6a67c28aa1946ca1be8382b861aac4aaf20052f495db9b6902d13adfa603eaba5d169f8896b86d461b2949283eb98e503c3f0640188ea7d6731526fc06568d37': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'd04ff5b0e85e9968be2a4d4e133c15c7ccee7497198bb651599a97d11d00bca6048d329ab75aa454566cd532648fa1cb4551985d9d645de9fa43a311a9ee8e4d': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_384: { - 'ascii': { - '2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff': '', - '283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3': 'The quick brown fox jumps over the lazy dog', - '9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'e7ec8976b4d96e43f50ae8ecdcf2d97a56236e6406e8dd00efd0d9abe885659db58a2f4b138a4ecfb1bd0052f6569516': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c': '中文', - '08990555e131af8597687614309da4c5053ce866f348544da0a0c2c78c2cc79680ebb57cfbe238286e78ea133a037897': 'aécio', - '2a80f59abf3111f38a35a3daa25123b495f90e9736bd300e35911d19abdd8806498c581333f198ccbbf2252b57c2925d': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'a3b043a2f69e4326a05d478fa4c8aa2bd7612453d775af37665a0b96ef2207cdc74c50cdba1629796a5136fe77300b05': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '66414c090cc3fe9c396d313cbaa100aefd335e851838b29382568b7f57357ada7c54b8fa8c17f859945bba88b2c2e332': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_256: { - 'ascii': { - 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470': '', - '4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15': 'The quick brown fox jumps over the lazy dog', - '578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'af20018353ffb50d507f1555580f5272eca7fdab4f8295db4b1a9ad832c93f6d': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee': '中文', - 'd7d569202f04daf90432810d6163112b2695d7820da979327ebd894efb0276dc': 'aécio', - '16a7cc7a58444cbf7e939611910ddc82e7cba65a99d3e8e08cfcda53180a2180': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'd1021d2d4c5c7e88098c40f422af68493b4b64c913cbd68220bf5e6127c37a88': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'ffabf9bba2127c4928d360c9905cb4911f0ec21b9c3b89f3b242bccc68389e36': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_224: { - 'ascii': { - 'f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd': '', - '310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe': 'The quick brown fox jumps over the lazy dog', - 'c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '8dd58b706e3a08ec4f1f202af39295b38c355a39b23308ade7218a21': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '7bc2a0b6e7e0a055a61e4f731e2944b560f41ff98967dcbf4bbf77a5': '中文', - '66f3db76bf8cb35726cb278bac412d187c3484ab2083dc50ef5ffb55': 'aécio', - '3bfa94845726f4cd5cf17d19b5eacac17b3694790e13a76d5c81c7c2': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'd59eef8f394ef7d96967bb0bde578785c033f7f0a21913d6ba41ed1b': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '27123a2a3860d1041d4769778c4b078732bf4300f7e1c56536ab2644': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - } - }; - - runTestCases(methods, testCases); - - describe('sha3_512', function () { - context('#arrayBuffer', function () { - it('should be equal', function () { - expect(sha3_512.arrayBuffer('').toHexString()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - expect(sha3_512.buffer('').toHexString()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - }); - }); - - context('#hex', function () { - it('should be equal', function () { - expect(sha3_512.hex('')).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - }); - }); - - context('#update', function () { - it('should be equal', function () { - expect(sha3_512.update('').hex()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - expect(sha3_512.update('The quick brown fox ').update('jumps over the lazy dog').hex()).to.be('01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450'); - }); - }); - - context('#create', function () { - it('should be equal', function () { - var bytes = [84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]; - var hash = sha3_512.create(); - for (var i = 0; i < bytes.length; ++i) { - hash.update([bytes[i]]); - } - expect(hash.hex()).to.be('01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450'); - }); - }); - }); - - describe('#keccak_512', function () { - context('when special length', function () { - it('should be equal', function () { - expect(keccak_512('012345678901234567890123456789012345678901234567890123456789012345678901')).to.be('90b1d032c3bf06dcc78a46fe52054bab1250600224bfc6dfbfb40a7877c55e89bb982799a2edf198568a4166f6736678b45e76b12fac813cfdf0a76714e5eae8'); - expect(keccak_512('01234567890123456789012345678901234567890123456789012345678901234567890')).to.be('3173e7abc754a0b2909410d78986428a9183e996864af02f421d273d9fa1b4e4a5b14e2998b20767712f53a01ff8f6ae2c3e71e51e2c0f24257b03e6da09eb77'); - }); - }); - - context('when Array', function () { - it('should be equal', function () { - expect(keccak_512([])).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - expect(keccak_512([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103])).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609'); - }); - }); - - context('when Uint8Array', function () { - it('should be equal', function () { - expect(keccak_512(new Uint8Array([]))).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - expect(keccak_512(new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]))).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609'); - }); - }); - - context('when ArrayBuffer', function () { - it('should be equal', function () { - expect(keccak_512(new ArrayBuffer(0))).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - }); - }); - - context('when output ArrayBuffer', function () { - it('should be equal', function () { - expect(keccak_512.arrayBuffer('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - expect(keccak_512.buffer('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - }); - }); - - context('when output Array', function () { - it('should be equal', function () { - expect(keccak_512.array('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - }); - }); - }); -})(sha3_512, sha3_384, sha3_256, sha3_224, keccak_512, keccak_384, keccak_256, keccak_224); diff --git a/truebit-implementation/node_modules/eth-ens-namehash/package.json b/truebit-implementation/node_modules/eth-ens-namehash/package.json deleted file mode 100644 index f7b5a826..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "eth-ens-namehash@2.0.8", - "_id": "eth-ens-namehash@2.0.8", - "_inBundle": false, - "_integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "_location": "/eth-ens-namehash", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "eth-ens-namehash@2.0.8", - "name": "eth-ens-namehash", - "escapedName": "eth-ens-namehash", - "rawSpec": "2.0.8", - "saveSpec": null, - "fetchSpec": "2.0.8" - }, - "_requiredBy": [ - "/web3-eth-ens" - ], - "_resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "_shasum": "229ac46eca86d52e0c991e7cb2aef83ff0f68bcf", - "_spec": "eth-ens-namehash@2.0.8", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth-ens", - "author": { - "name": "Dan Finlay", - "email": "dan@danfinlay.com" - }, - "bugs": { - "url": "https://github.com/danfinlay/eth-ens-namehash/issues" - }, - "bundleDependencies": false, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "deprecated": false, - "description": "A simple module for generating ENS namehashes per spec https://github.com/ethereum/EIPs/issues/137", - "devDependencies": { - "babel-preset-es2015": "^6.24.1", - "babel-preset-stage-0": "^6.24.1", - "browserify": "^14.0.0", - "tape": "^4.6.3" - }, - "homepage": "https://github.com/danfinlay/eth-ens-namehash#readme", - "keywords": [ - "Ethereum", - "ENS" - ], - "license": "ISC", - "main": "index.js", - "name": "eth-ens-namehash", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/danfinlay/eth-ens-namehash.git" - }, - "scripts": { - "bundle": "browserify index.js -o dist/index.js", - "test": "node test" - }, - "version": "2.0.8" -} diff --git a/truebit-implementation/node_modules/eth-ens-namehash/test/index.js b/truebit-implementation/node_modules/eth-ens-namehash/test/index.js deleted file mode 100644 index 6d93725e..00000000 --- a/truebit-implementation/node_modules/eth-ens-namehash/test/index.js +++ /dev/null @@ -1,44 +0,0 @@ -const test = require('tape') -const namehash = require('../') - -// Test results specified in original ENS Proposal: -// https://github.com/ethereum/EIPs/issues/137 - -test('empty name', (t) => { - t.plan(1) - const input = '' - const expected = '0x0000000000000000000000000000000000000000000000000000000000000000' - const output = namehash.hash(input) - t.equal(output, expected) -}) - -test('empty param', (t) => { - t.plan(1) - const expected = '0x0000000000000000000000000000000000000000000000000000000000000000' - const output = namehash.hash() - t.equal(output, expected) -}) - -test('TLD eth', (t) => { - t.plan(1) - const input = 'eth' - const expected = '0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae' - const output = namehash.hash(input) - t.equal(output, expected) -}) - -test('foo.eth', (t) => { - t.plan(1) - const input = 'foo.eth' - const expected = '0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f' - const output = namehash.hash(input) - t.equal(output, expected) -}) - -test('normalize', (t) => { - t.plan(1) - const input = 'foo.eth' - const expected = 'foo.eth' - const output = namehash.normalize(input) - t.equal(output, expected) -}) diff --git a/truebit-implementation/node_modules/eth-lib/.babelrc b/truebit-implementation/node_modules/eth-lib/.babelrc deleted file mode 100644 index 7fb34931..00000000 --- a/truebit-implementation/node_modules/eth-lib/.babelrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "presets": [ - ["es2015", { "modules": false }] - ] -} diff --git a/truebit-implementation/node_modules/eth-lib/.npmignore b/truebit-implementation/node_modules/eth-lib/.npmignore deleted file mode 100644 index 7e202889..00000000 --- a/truebit-implementation/node_modules/eth-lib/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -tmp/ -.DS_Store diff --git a/truebit-implementation/node_modules/eth-lib/README.md b/truebit-implementation/node_modules/eth-lib/README.md deleted file mode 100644 index 60746ebc..00000000 --- a/truebit-implementation/node_modules/eth-lib/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Eth-Lib - -Lightweight Ethereum libraries. This is a temporary repository which will be used as the basis of an implementation on Idris (or similar). diff --git a/truebit-implementation/node_modules/eth-lib/lib/account.js b/truebit-implementation/node_modules/eth-lib/lib/account.js deleted file mode 100644 index 5719e526..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/account.js +++ /dev/null @@ -1,104 +0,0 @@ -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var Bytes = require("./bytes"); -var Nat = require("./nat"); -var elliptic = require("elliptic"); -var rlp = require("./rlp"); -var secp256k1 = new elliptic.ec("secp256k1"); // eslint-disable-line - -var _require = require("./hash"), - keccak256 = _require.keccak256, - keccak256s = _require.keccak256s; - -var create = function create(entropy) { - var innerHex = keccak256(Bytes.concat(Bytes.random(32), entropy || Bytes.random(32))); - var middleHex = Bytes.concat(Bytes.concat(Bytes.random(32), innerHex), Bytes.random(32)); - var outerHex = keccak256(middleHex); - return fromPrivate(outerHex); -}; - -var toChecksum = function toChecksum(address) { - var addressHash = keccak256s(address.slice(2)); - var checksumAddress = "0x"; - for (var i = 0; i < 40; i++) { - checksumAddress += parseInt(addressHash[i + 2], 16) > 7 ? address[i + 2].toUpperCase() : address[i + 2]; - }return checksumAddress; -}; - -var fromPrivate = function fromPrivate(privateKey) { - var buffer = new Buffer(privateKey.slice(2), "hex"); - var ecKey = secp256k1.keyFromPrivate(buffer); - var publicKey = "0x" + ecKey.getPublic(false, 'hex').slice(2); - var publicHash = keccak256(publicKey); - var address = toChecksum("0x" + publicHash.slice(-40)); - return { - address: address, - privateKey: privateKey - }; -}; - -var encodeSignature = function encodeSignature(_ref) { - var _ref2 = _slicedToArray(_ref, 3), - v = _ref2[0], - r = _ref2[1], - s = _ref2[2]; - - return Bytes.flatten([r, s, v]); -}; - -var decodeSignature = function decodeSignature(hex) { - return [Bytes.slice(64, 65, hex), Bytes.slice(0, 32, hex), Bytes.slice(32, 64, hex)]; -}; - -var makeSign = function makeSign(addToV) { - return function (hash, privateKey) { - var signature = secp256k1.keyFromPrivate(new Buffer(privateKey.slice(2), "hex")).sign(new Buffer(hash.slice(2), "hex"), { canonical: true }); - return encodeSignature([Bytes.pad(1, Bytes.fromNumber(addToV + signature.recoveryParam)), Bytes.pad(32, Bytes.fromNat("0x" + signature.r.toString(16))), Bytes.pad(32, Bytes.fromNat("0x" + signature.s.toString(16)))]); - }; -}; - -var sign = makeSign(27); // v=27|28 instead of 0|1... - -var recover = function recover(hash, signature) { - var vals = decodeSignature(signature); - var vrs = { v: Bytes.toNumber(vals[0]), r: vals[1].slice(2), s: vals[2].slice(2) }; - var ecPublicKey = secp256k1.recoverPubKey(new Buffer(hash.slice(2), "hex"), vrs, vrs.v < 2 ? vrs.v : 1 - vrs.v % 2); // because odd vals mean v=0... sadly that means v=0 means v=1... I hate that - var publicKey = "0x" + ecPublicKey.encode("hex", false).slice(2); - var publicHash = keccak256(publicKey); - var address = toChecksum("0x" + publicHash.slice(-40)); - return address; -}; - -var transactionSigningData = function transactionSigningData(tx) { - return rlp.encode([Bytes.fromNat(tx.nonce), Bytes.fromNat(tx.gasPrice), Bytes.fromNat(tx.gas), tx.to.toLowerCase(), Bytes.fromNat(tx.value), tx.data, Bytes.fromNat(tx.chainId || "0x1"), "0x", "0x"]); -}; - -var signTransaction = function signTransaction(tx, privateKey) { - var signingData = transactionSigningData(tx); - var signature = makeSign(Nat.toNumber(tx.chainId || "0x1") * 2 + 35)(keccak256(signingData), privateKey); - var rawTransaction = rlp.decode(signingData).slice(0, 6).concat(decodeSignature(signature)); - return rlp.encode(rawTransaction); -}; - -var recoverTransaction = function recoverTransaction(rawTransaction) { - var values = rlp.decode(rawTransaction); - var signature = encodeSignature(values.slice(6, 9)); - var recovery = Bytes.toNumber(values[6]); - var extraData = recovery < 35 ? [] : [Bytes.fromNumber(recovery - 35 >> 1), "0x", "0x"]; - var signingData = values.slice(0, 6).concat(extraData); - var signingDataHex = rlp.encode(signingData); - return recover(keccak256(signingDataHex), signature); -}; - -module.exports = { - create: create, - toChecksum: toChecksum, - fromPrivate: fromPrivate, - sign: sign, - recover: recover, - signTransaction: signTransaction, - recoverTransaction: recoverTransaction, - transactionSigningData: transactionSigningData, - encodeSignature: encodeSignature, - decodeSignature: decodeSignature -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/api.js b/truebit-implementation/node_modules/eth-lib/lib/api.js deleted file mode 100644 index c18223b4..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/api.js +++ /dev/null @@ -1,242 +0,0 @@ -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var Api = function Api(provider) { - var Nat = require("./nat"); - var Map = require("./map"); - var Bytes = require("./bytes"); - var keccak256s = require("./hash").keccak256s; - var send = function send(method) { - return function () { - for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) { - params[_key] = arguments[_key]; - } - - return new Promise(function (resolve, reject) { - return provider.send(method, params, function (err, result) { - return err ? reject(err) : resolve(result); - }); - }); - }; - }; - - // TODO check inputs - // TODO move to proper file - var encodeABI = function encodeABI(type, value) { - if (type === "bytes") { - var length = Bytes.length(value); - var nextMul32 = (((length - 1) / 32 | 0) + 1) * 32; - var lengthEncoded = encodeABI("uint256", Nat.fromNumber(length)).data; - var bytesEncoded = Bytes.padRight(nextMul32, value); - return { data: Bytes.concat(lengthEncoded, bytesEncoded), dynamic: true }; - } else if (type === "uint256" || type === "bytes32") { - return { data: Bytes.pad(32, value), dynamic: false }; - } else { - throw "Eth-lib can't encode ABI type " + type + " yet."; - } - }; - - var sendTransaction = send("eth_sendTransaction"); - var sendRawTransaction = send("eth_sendRawTransaction"); - var getTransactionReceipt = send("eth_getTransactionReceipt"); - var compileSolidity = send("eth_compileSolidity"); - var call = send("eth_call"); - var getBalance = send("eth_getBalance"); - var accounts = send("eth_accounts"); - - var removeEmptyTo = function removeEmptyTo(tx) { - return tx.to === "" || tx.to === "0x" ? Map.remove("to")(tx) : tx; - }; - - var waitTransactionReceipt = getTransactionReceipt; // TODO: implement correctly - - var addTransactionDefaults = function addTransactionDefaults(tx) { - return ( - // Get basic defaults - Promise.all([tx.chainId || send("net_version")(), tx.gasPrice || send("eth_gasPrice")(), tx.nonce || send("eth_getTransactionCount")(tx.from, "latest"), tx.value || "0x0", tx.data || "0x"]) - // Add them to tx - .then(function (_ref) { - var _ref2 = _slicedToArray(_ref, 5), - chainId = _ref2[0], - gasPrice = _ref2[1], - nonce = _ref2[2], - value = _ref2[3], - data = _ref2[4]; - - return Map.merge(tx)({ chainId: Nat.fromNumber(chainId), gasPrice: gasPrice, nonce: nonce, value: value, data: data }); - }).then(function (tx) { - // Add gas default by estimating - if (!tx.gas) { - var estimateTx = {}; - estimateTx.from = tx.from; - if (tx.to !== "" && tx.to !== "0x") estimateTx.to = tx.to; - estimateTx.value = tx.value; - estimateTx.nonce = tx.nonce; - estimateTx.data = tx.data; - return send("eth_estimateGas")(estimateTx).then(function (usedGas) { - return Map.merge(tx)({ gas: Nat.div(Nat.mul(usedGas, "0x6"), "0x5") }); - }); - } else { - return Promise.resolve(tx); - } - }) - ); - }; - - var sendTransactionWithDefaults = function sendTransactionWithDefaults(tx) { - return addTransactionDefaults(tx).then(function (tx) { - return sendTransaction(removeEmptyTo(tx)); - }); - }; - - var callWithDefaults = function callWithDefaults(tx, block) { - return addTransactionDefaults(tx).then(function (tx) { - return call(removeEmptyTo(tx), block || "latest"); - }); - }; - - var callMethodData = function callMethodData(method) { - return function () { - for (var _len2 = arguments.length, params = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - params[_key2] = arguments[_key2]; - } - - var methodSig = method.name + "(" + method.inputs.map(function (i) { - return i.type; - }).join(",") + ")"; - var methodHash = keccak256s(methodSig).slice(0, 10); - var encodedParams = params.map(function (param, i) { - return encodeABI(method.inputs[i].type, param); - }); - var headBlock = "0x"; - var dataBlock = "0x"; - for (var i = 0; i < encodedParams.length; ++i) { - if (encodedParams[i].dynamic) { - var dataLoc = encodedParams.length * 32 + Bytes.length(dataBlock); - headBlock = Bytes.concat(headBlock, Bytes.pad(32, Nat.fromNumber(dataLoc))); - dataBlock = Bytes.concat(dataBlock, encodedParams[i].data); - } else { - headBlock = Bytes.concat(headBlock, encodedParams[i].data); - } - } - return Bytes.flatten([methodHash, headBlock, dataBlock]); - }; - }; - - // Address, Address, ContractInterface -> Contract - var contract = function contract(from, address, contractInterface) { - var contract = {}; - contract._address = address; - contract._from = from; - contract.broadcast = {}; - contractInterface.forEach(function (method) { - if (method && method.name) { - var _call = function _call(type, value) { - return function () { - var transaction = { - from: from, - to: address, - value: value, - data: callMethodData(method).apply(undefined, arguments) - }; - return type === "data" ? Promise.resolve(transaction) : method.constant ? callWithDefaults(transaction) : sendTransactionWithDefaults(transaction).then(type === "receipt" ? waitTransactionReceipt : function (x) { - return x; - }); - }; - }; - contract[method.name] = _call("receipt", "0x0"); - if (!method.constant) { - contract[method.name + "_data"] = _call("data", "0x0"); - contract[method.name + "_pay"] = function (value) { - return function () { - return _call("receipt", value).apply(undefined, arguments); - }; - }; - contract[method.name + "_pay_txHash"] = function (value) { - return function () { - return _call("txHash", value).apply(undefined, arguments); - }; - }; - contract[method.name + "_txHash"] = _call("txHash", "0x0"); - } - } - }); - return contract; - }; - - // Address, Bytecode -> TxHash - var deployBytecode_txHash = function deployBytecode_txHash(from, code) { - return sendTransactionWithDefaults({ from: from, data: code, to: "" }); - }; - - // Address, Bytecode -> Receipt - var deployBytecode = function deployBytecode(from, code) { - return deployBytecode_txHash(from, code).then(waitTransactionReceipt); - }; - - // Address, Bytecode, ContractInterface - var deployBytecodeContract = function deployBytecodeContract(from, code, contractInterface) { - return deployBytecode(from, code).then(function (receipt) { - return contract(from, receipt.contractAddress, contractInterface); - }); - }; - - // Address, String, Address -> Contract - var solidityContract = function solidityContract(from, source, at) { - return compileSolidity(source).then(function (_ref3) { - var abiDefinition = _ref3.info.abiDefinition; - return contract(from, at, abiDefinition); - }); - }; - - // Address, String -> TxHash - var deploySolidity_txHash = function deploySolidity_txHash(from, source) { - return compileSolidity(source).then(function (_ref4) { - var code = _ref4.code; - return deployBytecode_txHash(from, code); - }); - }; - - // Address, String -> Receipt - var deploySolidity = function deploySolidity(from, source) { - return deploySolidity_txHash(from, source).then(waitTransactionReceipt); - }; - - // Address, String -> Contract - var deploySolidityContract = function deploySolidityContract(from, source) { - return compileSolidity(source).then(function (_ref5) { - var code = _ref5.code, - abiDefinition = _ref5.info.abiDefinition; - return deployBytecodeContract(from, code, abiDefinition); - }); - }; - - return { - send: send, - - sendTransaction: sendTransaction, - sendRawTransaction: sendRawTransaction, - getTransactionReceipt: getTransactionReceipt, - call: call, - getBalance: getBalance, - accounts: accounts, - - waitTransactionReceipt: waitTransactionReceipt, - addTransactionDefaults: addTransactionDefaults, - sendTransactionWithDefaults: sendTransactionWithDefaults, - callWithDefaults: callWithDefaults, - callMethodData: callMethodData, - - contract: contract, - deployBytecode_txHash: deployBytecode_txHash, - deployBytecode: deployBytecode, - deployBytecodeContract: deployBytecodeContract, - - compileSolidity: compileSolidity, - solidityContract: solidityContract, - deploySolidity_txHash: deploySolidity_txHash, - deploySolidity: deploySolidity, - deploySolidityContract: deploySolidityContract - }; -}; - -module.exports = Api; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/array.js b/truebit-implementation/node_modules/eth-lib/lib/array.js deleted file mode 100644 index 99e69c76..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/array.js +++ /dev/null @@ -1,40 +0,0 @@ -var generate = function generate(num, fn) { - var a = []; - for (var i = 0; i < num; ++i) { - a.push(fn(i)); - }return a; -}; - -var replicate = function replicate(num, val) { - return generate(num, function () { - return val; - }); -}; - -var concat = function concat(a, b) { - return a.concat(b); -}; - -var flatten = function flatten(a) { - var r = []; - for (var j = 0, J = a.length; j < J; ++j) { - for (var i = 0, I = a[j].length; i < I; ++i) { - r.push(a[j][i]); - } - }return r; -}; - -var chunksOf = function chunksOf(n, a) { - var b = []; - for (var i = 0, l = a.length; i < l; i += n) { - b.push(a.slice(i, i + n)); - }return b; -}; - -module.exports = { - generate: generate, - replicate: replicate, - concat: concat, - flatten: flatten, - chunksOf: chunksOf -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/bytes.js b/truebit-implementation/node_modules/eth-lib/lib/bytes.js deleted file mode 100644 index 4ca0b978..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/bytes.js +++ /dev/null @@ -1,188 +0,0 @@ -var A = require("./array.js"); - -var at = function at(bytes, index) { - return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16); -}; - -var random = function random(bytes) { - var rnd = void 0; - if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (typeof require !== "undefined") rnd = require("c" + "rypto").randomBytes(bytes);else throw "Safe random numbers not available."; - var hex = "0x"; - for (var i = 0; i < bytes; ++i) { - hex += ("00" + rnd[i].toString(16)).slice(-2); - }return hex; -}; - -var length = function length(a) { - return (a.length - 2) / 2; -}; - -var flatten = function flatten(a) { - return "0x" + a.reduce(function (r, s) { - return r + s.slice(2); - }, ""); -}; - -var slice = function slice(i, j, bs) { - return "0x" + bs.slice(i * 2 + 2, j * 2 + 2); -}; - -var reverse = function reverse(hex) { - var rev = "0x"; - for (var i = 0, l = length(hex); i < l; ++i) { - rev += hex.slice((l - i) * 2, (l - i + 1) * 2); - } - return rev; -}; - -var pad = function pad(l, hex) { - return hex.length === l * 2 + 2 ? hex : pad(l, "0x" + "0" + hex.slice(2)); -}; - -var padRight = function padRight(l, hex) { - return hex.length === l * 2 + 2 ? hex : padRight(l, hex + "0"); -}; - -var toArray = function toArray(hex) { - var arr = []; - for (var i = 2, l = hex.length; i < l; i += 2) { - arr.push(parseInt(hex.slice(i, i + 2), 16)); - }return arr; -}; - -var fromArray = function fromArray(arr) { - var hex = "0x"; - for (var i = 0, l = arr.length; i < l; ++i) { - var b = arr[i]; - hex += (b < 16 ? "0" : "") + b.toString(16); - } - return hex; -}; - -var toUint8Array = function toUint8Array(hex) { - return new Uint8Array(toArray(hex)); -}; - -var fromUint8Array = function fromUint8Array(arr) { - return fromArray([].slice.call(arr, 0)); -}; - -var fromNumber = function fromNumber(num) { - var hex = num.toString(16); - return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex; -}; - -var toNumber = function toNumber(hex) { - return parseInt(hex.slice(2), 16); -}; - -var concat = function concat(a, b) { - return a.concat(b.slice(2)); -}; - -var fromNat = function fromNat(bn) { - return bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2); -}; - -var toNat = function toNat(bn) { - return bn[2] === "0" ? "0x" + bn.slice(3) : bn; -}; - -var fromAscii = function fromAscii(ascii) { - var hex = "0x"; - for (var i = 0; i < ascii.length; ++i) { - hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2); - }return hex; -}; - -var toAscii = function toAscii(hex) { - var ascii = ""; - for (var i = 2; i < hex.length; i += 2) { - ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16)); - }return ascii; -}; - -// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330 -var fromString = function fromString(s) { - var makeByte = function makeByte(uint8) { - var b = uint8.toString(16); - return b.length < 2 ? "0" + b : b; - }; - var bytes = "0x"; - for (var ci = 0; ci != s.length; ci++) { - var c = s.charCodeAt(ci); - if (c < 128) { - bytes += makeByte(c); - continue; - } - if (c < 2048) { - bytes += makeByte(c >> 6 | 192); - } else { - if (c > 0xd7ff && c < 0xdc00) { - if (++ci == s.length) return null; - var c2 = s.charCodeAt(ci); - if (c2 < 0xdc00 || c2 > 0xdfff) return null; - c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); - bytes += makeByte(c >> 18 | 240); - bytes += makeByte(c >> 12 & 63 | 128); - } else { - // c <= 0xffff - bytes += makeByte(c >> 12 | 224); - } - bytes += makeByte(c >> 6 & 63 | 128); - } - bytes += makeByte(c & 63 | 128); - } - return bytes; -}; - -var toString = function toString(bytes) { - var s = ''; - var i = 0; - var l = length(bytes); - while (i < l) { - var c = at(bytes, i++); - if (c > 127) { - if (c > 191 && c < 224) { - if (i >= l) return null; - c = (c & 31) << 6 | at(bytes, i) & 63; - } else if (c > 223 && c < 240) { - if (i + 1 >= l) return null; - c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63; - } else if (c > 239 && c < 248) { - if (i + 2 >= l) return null; - c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63; - } else return null; - ++i; - } - if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) { - c -= 0x10000; - s += String.fromCharCode(c >> 10 | 0xd800); - s += String.fromCharCode(c & 0x3FF | 0xdc00); - } else return null; - } - return s; -}; - -module.exports = { - random: random, - length: length, - concat: concat, - flatten: flatten, - slice: slice, - reverse: reverse, - pad: pad, - padRight: padRight, - fromAscii: fromAscii, - toAscii: toAscii, - fromString: fromString, - toString: toString, - fromNumber: fromNumber, - toNumber: toNumber, - fromNat: fromNat, - toNat: toNat, - fromArray: fromArray, - toArray: toArray, - fromUint8Array: fromUint8Array, - toUint8Array: toUint8Array -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/desubits.js b/truebit-implementation/node_modules/eth-lib/lib/desubits.js deleted file mode 100644 index 6ddf8173..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/desubits.js +++ /dev/null @@ -1,58 +0,0 @@ -var Bytes = require("./bytes"); - -var inis = "pbtdkgxjfvlrmnsz".split(""); - -var mids = "auie".split(""); - -var back = [inis, mids].map(function (chars) { - var map = {}; - for (var i = 0; i < chars.length; ++i) { - map[chars[i]] = i; - }return map; -}); - -var syllableFromB64 = function syllableFromB64(b64) { - var ini = b64 >>> 2 & 15; - var mid = b64 >>> 0 & 3; - return inis[ini] + mids[mid]; -}; - -var syllableToB64 = function syllableToB64(syllable) { - var ini = back[0][syllable[0]]; - var mid = back[1][syllable[1]]; - return ini * 4 + mid; -}; - -var b64sFromBytes = function b64sFromBytes(bytes) { - //BoooooBoooooBoooooBooooo - //BoooooooBoooooooBooooooo - var b64s = [], - b64 = void 0; - for (var i = 0, l = Math.ceil(bytes.length * 8 / 6); i < l; ++i) { - var j = i / 8 * 6 | 0; - b64s.push(i % 4 === 0 ? bytes[j + 0] / 4 | 0 : i % 4 === 1 ? bytes[j + 0] % 4 * 16 + (bytes[j + 1] / 16 | 0) : i % 4 === 2 ? bytes[j + 0] % 16 * 4 + (bytes[j + 1] / 64 | 0) : bytes[j + 0] % 64 * 1); - } - return b64s; -}; - -var b64sToBytes = function b64sToBytes(b64s) { - var bytes = []; - for (var i = 0, l = Math.floor(b64s.length * 6 / 8); i < l; ++i) { - var j = i / 6 * 8 | 0; - bytes.push(i % 3 === 0 ? b64s[j + 0] % 64 * 4 + (b64s[j + 1] / 16 | 0) : i % 3 === 1 ? b64s[j + 0] % 16 * 16 + (b64s[j + 1] / 4 | 0) : b64s[j + 0] % 4 * 64 + (b64s[j + 1] / 1 | 0)); - } - return bytes; -}; - -var fromBytes = function fromBytes(bytes) { - return b64sFromBytes(Bytes.toArray(bytes)).map(syllableFromB64).join(""); -}; - -var toBytes = function toBytes(syllables) { - return Bytes.fromArray(b64sToBytes(syllables.match(/\w\w/g).map(syllableToB64))); -}; - -module.exports = { - fromBytes: fromBytes, - toBytes: toBytes -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/fn.js b/truebit-implementation/node_modules/eth-lib/lib/fn.js deleted file mode 100644 index 342bc43c..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/fn.js +++ /dev/null @@ -1,10 +0,0 @@ -var times = function times(n, f, x) { - for (var i = 0; i < n; ++i) { - x = f(x); - } - return x; -}; - -module.exports = { - times: times -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/hash.js b/truebit-implementation/node_modules/eth-lib/lib/hash.js deleted file mode 100644 index 66fa73de..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/hash.js +++ /dev/null @@ -1,339 +0,0 @@ -// This was ported from https://github.com/emn178/js-sha3, with some minor -// modifications and pruning. It is licensed under MIT: -// -// Copyright 2015-2016 Chen, Yi-Cyuan -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// 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. - -var HEX_CHARS = '0123456789abcdef'.split(''); -var KECCAK_PADDING = [1, 256, 65536, 16777216]; -var SHIFT = [0, 8, 16, 24]; -var RC = [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]; - -var Keccak = function Keccak(bits) { - return { - blocks: [], - reset: true, - block: 0, - start: 0, - blockCount: 1600 - (bits << 1) >> 5, - outputBlocks: bits >> 5, - s: function (s) { - return [].concat(s, s, s, s, s); - }([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) - }; -}; - -var update = function update(state, message) { - var length = message.length, - blocks = state.blocks, - byteCount = state.blockCount << 2, - blockCount = state.blockCount, - outputBlocks = state.outputBlocks, - s = state.s, - index = 0, - i, - code; - - // update - while (index < length) { - if (state.reset) { - state.reset = false; - blocks[0] = state.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (typeof message !== "string") { - for (i = state.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = state.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); - blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } - } - } - state.lastByteIndex = i; - if (i >= byteCount) { - state.start = i - byteCount; - state.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - state.reset = true; - } else { - state.start = i; - } - } - - // finalize - i = state.lastByteIndex; - blocks[i >> 2] |= KECCAK_PADDING[i & 3]; - if (state.lastByteIndex === byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - - // toString - var hex = '', - i = 0, - j = 0, - block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - return "0x" + hex; -}; - -var f = function f(s) { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ (c2 << 1 | c3 >>> 31); - l = c9 ^ (c3 << 1 | c2 >>> 31); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ (c4 << 1 | c5 >>> 31); - l = c1 ^ (c5 << 1 | c4 >>> 31); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ (c6 << 1 | c7 >>> 31); - l = c3 ^ (c7 << 1 | c6 >>> 31); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ (c8 << 1 | c9 >>> 31); - l = c5 ^ (c9 << 1 | c8 >>> 31); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ (c0 << 1 | c1 >>> 31); - l = c7 ^ (c1 << 1 | c0 >>> 31); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = s[11] << 4 | s[10] >>> 28; - b33 = s[10] << 4 | s[11] >>> 28; - b14 = s[20] << 3 | s[21] >>> 29; - b15 = s[21] << 3 | s[20] >>> 29; - b46 = s[31] << 9 | s[30] >>> 23; - b47 = s[30] << 9 | s[31] >>> 23; - b28 = s[40] << 18 | s[41] >>> 14; - b29 = s[41] << 18 | s[40] >>> 14; - b20 = s[2] << 1 | s[3] >>> 31; - b21 = s[3] << 1 | s[2] >>> 31; - b2 = s[13] << 12 | s[12] >>> 20; - b3 = s[12] << 12 | s[13] >>> 20; - b34 = s[22] << 10 | s[23] >>> 22; - b35 = s[23] << 10 | s[22] >>> 22; - b16 = s[33] << 13 | s[32] >>> 19; - b17 = s[32] << 13 | s[33] >>> 19; - b48 = s[42] << 2 | s[43] >>> 30; - b49 = s[43] << 2 | s[42] >>> 30; - b40 = s[5] << 30 | s[4] >>> 2; - b41 = s[4] << 30 | s[5] >>> 2; - b22 = s[14] << 6 | s[15] >>> 26; - b23 = s[15] << 6 | s[14] >>> 26; - b4 = s[25] << 11 | s[24] >>> 21; - b5 = s[24] << 11 | s[25] >>> 21; - b36 = s[34] << 15 | s[35] >>> 17; - b37 = s[35] << 15 | s[34] >>> 17; - b18 = s[45] << 29 | s[44] >>> 3; - b19 = s[44] << 29 | s[45] >>> 3; - b10 = s[6] << 28 | s[7] >>> 4; - b11 = s[7] << 28 | s[6] >>> 4; - b42 = s[17] << 23 | s[16] >>> 9; - b43 = s[16] << 23 | s[17] >>> 9; - b24 = s[26] << 25 | s[27] >>> 7; - b25 = s[27] << 25 | s[26] >>> 7; - b6 = s[36] << 21 | s[37] >>> 11; - b7 = s[37] << 21 | s[36] >>> 11; - b38 = s[47] << 24 | s[46] >>> 8; - b39 = s[46] << 24 | s[47] >>> 8; - b30 = s[8] << 27 | s[9] >>> 5; - b31 = s[9] << 27 | s[8] >>> 5; - b12 = s[18] << 20 | s[19] >>> 12; - b13 = s[19] << 20 | s[18] >>> 12; - b44 = s[29] << 7 | s[28] >>> 25; - b45 = s[28] << 7 | s[29] >>> 25; - b26 = s[38] << 8 | s[39] >>> 24; - b27 = s[39] << 8 | s[38] >>> 24; - b8 = s[48] << 14 | s[49] >>> 18; - b9 = s[49] << 14 | s[48] >>> 18; - - s[0] = b0 ^ ~b2 & b4; - s[1] = b1 ^ ~b3 & b5; - s[10] = b10 ^ ~b12 & b14; - s[11] = b11 ^ ~b13 & b15; - s[20] = b20 ^ ~b22 & b24; - s[21] = b21 ^ ~b23 & b25; - s[30] = b30 ^ ~b32 & b34; - s[31] = b31 ^ ~b33 & b35; - s[40] = b40 ^ ~b42 & b44; - s[41] = b41 ^ ~b43 & b45; - s[2] = b2 ^ ~b4 & b6; - s[3] = b3 ^ ~b5 & b7; - s[12] = b12 ^ ~b14 & b16; - s[13] = b13 ^ ~b15 & b17; - s[22] = b22 ^ ~b24 & b26; - s[23] = b23 ^ ~b25 & b27; - s[32] = b32 ^ ~b34 & b36; - s[33] = b33 ^ ~b35 & b37; - s[42] = b42 ^ ~b44 & b46; - s[43] = b43 ^ ~b45 & b47; - s[4] = b4 ^ ~b6 & b8; - s[5] = b5 ^ ~b7 & b9; - s[14] = b14 ^ ~b16 & b18; - s[15] = b15 ^ ~b17 & b19; - s[24] = b24 ^ ~b26 & b28; - s[25] = b25 ^ ~b27 & b29; - s[34] = b34 ^ ~b36 & b38; - s[35] = b35 ^ ~b37 & b39; - s[44] = b44 ^ ~b46 & b48; - s[45] = b45 ^ ~b47 & b49; - s[6] = b6 ^ ~b8 & b0; - s[7] = b7 ^ ~b9 & b1; - s[16] = b16 ^ ~b18 & b10; - s[17] = b17 ^ ~b19 & b11; - s[26] = b26 ^ ~b28 & b20; - s[27] = b27 ^ ~b29 & b21; - s[36] = b36 ^ ~b38 & b30; - s[37] = b37 ^ ~b39 & b31; - s[46] = b46 ^ ~b48 & b40; - s[47] = b47 ^ ~b49 & b41; - s[8] = b8 ^ ~b0 & b2; - s[9] = b9 ^ ~b1 & b3; - s[18] = b18 ^ ~b10 & b12; - s[19] = b19 ^ ~b11 & b13; - s[28] = b28 ^ ~b20 & b22; - s[29] = b29 ^ ~b21 & b23; - s[38] = b38 ^ ~b30 & b32; - s[39] = b39 ^ ~b31 & b33; - s[48] = b48 ^ ~b40 & b42; - s[49] = b49 ^ ~b41 & b43; - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } -}; - -var keccak = function keccak(bits) { - return function (str) { - var msg; - if (str.slice(0, 2) === "0x") { - msg = []; - for (var i = 2, l = str.length; i < l; i += 2) { - msg.push(parseInt(str.slice(i, i + 2), 16)); - } - } else { - msg = str; - } - return update(Keccak(bits, bits), msg); - }; -}; - -module.exports = { - keccak256: keccak(256), - keccak512: keccak(512), - keccak256s: keccak(256), - keccak512s: keccak(512) -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/index.js b/truebit-implementation/node_modules/eth-lib/lib/index.js deleted file mode 100644 index fa9fa63f..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/index.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - Account: require("./account.js"), - Nat: require("./nat.js"), - Bytes: require("./bytes.js"), - Hash: require("./hash.js"), - RLP: require("./rlp.js"), - Api: require("./api.js"), - Provider: require("./provider.js"), - Desubits: require("./desubits.js"), - Passphrase: require("./passphrase.js") -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/map.js b/truebit-implementation/node_modules/eth-lib/lib/map.js deleted file mode 100644 index c67c4974..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/map.js +++ /dev/null @@ -1,24 +0,0 @@ -var merge = function merge(a) { - return function (b) { - var c = {}; - for (var key in a) { - c[key] = a[key]; - }for (var _key in b) { - c[_key] = b[_key]; - }return c; - }; -}; - -var remove = function remove(removeKey) { - return function (a) { - var b = {}; - for (var key in a) { - if (key !== removeKey) b[key] = a[key]; - }return b; - }; -}; - -module.exports = { - merge: merge, - remove: remove -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/nat.js b/truebit-implementation/node_modules/eth-lib/lib/nat.js deleted file mode 100644 index 9f2fa2f6..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/nat.js +++ /dev/null @@ -1,64 +0,0 @@ -var BN = require("bn.js"); -var Bytes = require("./bytes"); - -var fromBN = function fromBN(bn) { - return "0x" + bn.toString("hex"); -}; - -var toBN = function toBN(str) { - return new BN(str.slice(2), 16); -}; - -var fromString = function fromString(str) { - var bn = "0x" + (str.slice(0, 2) === "0x" ? new BN(str.slice(2), 16) : new BN(str, 10)).toString("hex"); - return bn === "0x0" ? "0x" : bn; -}; - -var toEther = function toEther(wei) { - return toNumber(div(wei, fromString("10000000000"))) / 100000000; -}; - -var fromEther = function fromEther(eth) { - return mul(fromNumber(Math.floor(eth * 100000000)), fromString("10000000000")); -}; - -var toString = function toString(a) { - return toBN(a).toString(10); -}; - -var fromNumber = function fromNumber(a) { - return typeof a === "string" ? /^0x/.test(a) ? a : "0x" + a : "0x" + new BN(a).toString("hex"); -}; - -var toNumber = function toNumber(a) { - return toBN(a).toNumber(); -}; - -var toUint256 = function toUint256(a) { - return Bytes.pad(32, a); -}; - -var bin = function bin(method) { - return function (a, b) { - return fromBN(toBN(a)[method](toBN(b))); - }; -}; - -var add = bin("add"); -var mul = bin("mul"); -var div = bin("div"); -var sub = bin("sub"); - -module.exports = { - toString: toString, - fromString: fromString, - toNumber: toNumber, - fromNumber: fromNumber, - toEther: toEther, - fromEther: fromEther, - toUint256: toUint256, - add: add, - mul: mul, - div: div, - sub: sub -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/passphrase.js b/truebit-implementation/node_modules/eth-lib/lib/passphrase.js deleted file mode 100644 index b164fd38..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/passphrase.js +++ /dev/null @@ -1,52 +0,0 @@ -var Hash = require("./hash"); -var Bytes = require("./bytes"); -var Desubits = require("./desubits"); - -// Bytes -> Bytes -var bytesAddChecksum = function bytesAddChecksum(bytes) { - var hash = Hash.keccak256(bytes); - var sum = Bytes.slice(0, 1, hash); - return Bytes.concat(bytes, sum); -}; - -// Bytes -> Bool -var bytesChecksum = function bytesChecksum(bytes) { - var length = Bytes.length(bytes); - var prefix = Bytes.slice(0, length - 1, bytes); - return bytesAddChecksum(prefix) === bytes; -}; - -// () ~> Passphrase -var create = function create() { - var bytes = bytesAddChecksum(Bytes.random(11)); - var seed = Desubits.fromBytes(bytes); - var passphrase = seed.replace(/([a-z]{8})/g, "$1 "); - return passphrase; -}; - -// Passphrase -> Bytes -var toBytes = function toBytes(passphrase) { - var seed = passphrase.replace(/ /g, ""); - var bytes = Desubits.toBytes(passphrase); - return bytes; -}; - -// Passphrase -> Bool -var checksum = function checksum(passphrase) { - return bytesChecksum(toBytes(passphrase)); -}; - -// Passphrase -> Bytes -var toMasterKey = function toMasterKey(passphrase) { - var hash = Hash.keccak256; - var bytes = toBytes(passphrase); - for (var i = 0, l = Math.pow(2, 12); i < l; ++i) { - bytes = hash(bytes); - }return bytes; -}; - -module.exports = { - create: create, - checksum: checksum, - toMasterKey: toMasterKey -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/provider.js b/truebit-implementation/node_modules/eth-lib/lib/provider.js deleted file mode 100644 index fe599186..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/provider.js +++ /dev/null @@ -1,110 +0,0 @@ -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var njsp = require("nano-json-stream-parser"); -var request = require("xhr-request-promise"); - -var EthereumProvider = function EthereumProvider(url, intercept) { - intercept = intercept || function () {}; - - var api = {}; - var onResponse = {}; - var callbacks = {}; - var nextId = 0; - var send = void 0; - - var makeSender = function makeSender(send) { - var P = function P(fn) { - return function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return new Promise(function (resolve, reject) { - return fn.apply(undefined, _toConsumableArray(args.concat(function (err, res) { - return err ? reject(err) : resolve(res); - }))); - }); - }; - }; - var sender = function sender(intercept) { - return function (method, params, callback) { - var intercepted = intercept(method, params, P(sender(function () {}))); - if (intercepted) { - intercepted.then(function (response) { - return callback(null, response); - }); - } else { - send(method, params, callback); - } - }; - }; - return sender(intercept); - }; - - var parseResponse = njsp(function (json) { - onResponse[json.id] && onResponse[json.id](null, json.result); - }); - - var genPayload = function genPayload(method, params) { - return { - jsonrpc: "2.0", - id: ++nextId, - method: method, - params: params - }; - }; - - api.on = function (name, callback) { - callbacks[name] = callback; - }; - - if (/^ws/.test(url)) { - var WebSocket = require("w" + "s"); - var ws = new WebSocket(url); - api.send = makeSender(function (method, params, callback) { - var intercepted = intercept(method, params, P(send(function () {}))); - if (intercepted) { - intercepted.then(function (response) { - return callback(null, response); - }); - } else { - var payload = genPayload(method, params); - onResponse[payload.id] = callback; - ws.send(JSON.stringify(payload)); - } - }); - ws.on("message", parseResponse); - ws.on("open", function () { - return callbacks.connect && callbacks.connect(eth); - }); - ws.on("close", function () { - return callbacks.disconnect && callbacks.disconnect(); - }); - } else if (/^http/.test(url)) { - api.send = makeSender(function (method, params, callback) { - request(url, { - method: "POST", - contentType: "application/json-rpc", - body: JSON.stringify(genPayload(method, params)) }).then(function (answer) { - var resp = JSON.parse(answer); - if (resp.error) { - callback(resp.error.message); - } else { - callback(null, resp.result); - } - }).catch(function (err) { - return callback("Couldn't connect to Ethereum node."); - }); - }); - - setTimeout(function () { - callbacks.connect && callbacks.connect(); - }, 1); - } else { - throw "IPC not supported yet."; - } - - return api; -}; - -module.exports = EthereumProvider; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/rlp.js b/truebit-implementation/node_modules/eth-lib/lib/rlp.js deleted file mode 100644 index 4d5b27df..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/rlp.js +++ /dev/null @@ -1,73 +0,0 @@ -// The RLP format -// Serialization and deserialization for the BytesTree type, under the following grammar: -// | First byte | Meaning | -// | ---------- | -------------------------------------------------------------------------- | -// | 0 to 127 | HEX(leaf) | -// | 128 to 183 | HEX(length_of_leaf + 128) + HEX(leaf) | -// | 184 to 191 | HEX(length_of_length_of_leaf + 128 + 55) + HEX(length_of_leaf) + HEX(leaf) | -// | 192 to 247 | HEX(length_of_node + 192) + HEX(node) | -// | 248 to 255 | HEX(length_of_length_of_node + 128 + 55) + HEX(length_of_node) + HEX(node) | - -var encode = function encode(tree) { - var padEven = function padEven(str) { - return str.length % 2 === 0 ? str : "0" + str; - }; - - var uint = function uint(num) { - return padEven(num.toString(16)); - }; - - var length = function length(len, add) { - return len < 56 ? uint(add + len) : uint(add + uint(len).length / 2 + 55) + uint(len); - }; - - var dataTree = function dataTree(tree) { - if (typeof tree === "string") { - var hex = tree.slice(2); - var pre = hex.length != 2 || hex >= "80" ? length(hex.length / 2, 128) : ""; - return pre + hex; - } else { - var _hex = tree.map(dataTree).join(""); - var _pre = length(_hex.length / 2, 192); - return _pre + _hex; - } - }; - - return "0x" + dataTree(tree); -}; - -var decode = function decode(hex) { - var i = 2; - - var parseTree = function parseTree() { - if (i >= hex.length) throw ""; - var head = hex.slice(i, i + 2); - return head < "80" ? (i += 2, "0x" + head) : head < "c0" ? parseHex() : parseList(); - }; - - var parseLength = function parseLength() { - var len = parseInt(hex.slice(i, i += 2), 16) % 64; - return len < 56 ? len : parseInt(hex.slice(i, i += (len - 55) * 2), 16); - }; - - var parseHex = function parseHex() { - var len = parseLength(); - return "0x" + hex.slice(i, i += len * 2); - }; - - var parseList = function parseList() { - var lim = parseLength() * 2 + i; - var list = []; - while (i < lim) { - list.push(parseTree()); - }return list; - }; - - try { - return parseTree(); - } catch (e) { - return []; - } -}; - -module.exports = { encode: encode, decode: decode }; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/lib/types.js b/truebit-implementation/node_modules/eth-lib/lib/types.js deleted file mode 100644 index 93082d1a..00000000 --- a/truebit-implementation/node_modules/eth-lib/lib/types.js +++ /dev/null @@ -1,95 +0,0 @@ -var F = require("forall"); -var A = require("./array"); -var B = require("./bytes"); -var Account = require("./account"); - -F.Bytes = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by an even number of low-case hex chars (i.e., `0123456789abcdef`)", - rand: function rand() { - return "0x" + A.generate((Math.random() * 16 | 0) * 2, function () { - return (Math.random() * 16 | 0).toString(16); - }).join(""); - }, - test: function test(value) { - return typeof value === "string" && /^0x([0-9a-f][0-9a-f])*$/.test(value); - } -}).__name("Bytes").__desc("any arbitrary data"); - -F.NBytes = function (bytes) { - return F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by " + bytes * 2 + " low-case hex chars (i.e., `0123456789abcdef`)", - test: function test(value) { - return F.Bytes.test(value) && value.length === bytes * 2 + 2; - }, - rand: function rand() { - return "0x" + A.generate(bytes * 2, function () { - return (Math.random() * 16 | 0).toString(16); - }).join(""); - } - }).__name("NBytes(" + bytes + ")").__desc("any arbitrary data of exactly " + bytes + "-byte" + (bytes > 1 ? "s" : "")); -}; - -F.Nat = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by at least one low-case hex char different from 0, followed by any number of low-case hex chars (i.e., `0123456789abcdef`)", - test: function test(value) { - return typeof value === "string" && /^0x[1-9a-f]([0-9a-f])*$/.test(value); - }, - rand: function rand() { - return "0x" + (Math.random() * Math.pow(2, 50) | 0).toString(16); - } -}).__name("Nat").__desc("an arbitrarily long non-negative integer number"); - -F.Address = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by 40 hex chars (i.e., `0123456789abcdefABCDEF`), with the nth hex being uppercase iff the nth hex of the keccak256 of the lowercase address in ASCII is > 7", - test: function test(address) { - return (/^(0x)?[0-9a-f]{40}$/i.test(address) && Account.toChecksum(address.toLowerCase()) === address - ); - }, - rand: function rand() { - return F.Account.rand().address; - } -}).__name("Address").__desc("an Ethereum public address"); - -F.Hash = F(F.Type, { - form: F.NBytes(32).form, - test: F.NBytes(32).test, - rand: F.NBytes(32).rand -}).__name("Hash").__desc("a Keccak-256 hash"); - -F.PrivateKey = F(F.Type, { - form: F.NBytes(32).form, - test: F.NBytes(32).test, - rand: F.NBytes(32).rand -}).__name("PrivateKey").__desc("an Ethereum private key"); - -F.Account = function () { - var base = F.Struct({ - address: F.Address, - privateKey: F.PrivateKey - }); - return F(F.Type, { - form: base.form, - test: base.test, - rand: function rand() { - return Account.create(""); - } - }); -}().__name("Account").__desc("an Ethereum account"); - -F.BytesTree = F(F.Type, { - form: "either " + F.Bytes.form + ", or a tree of nested JavaScript Arrays of BytesTrees", - test: function test(value) { - return F.Bytes.test(value) || value instanceof Array && value.reduce(function (r, v) { - return F.BytesTree.test(v) && r; - }, true); - }, - rand: function rand() { - var list = []; - while (Math.random() < 0.8) { - if (Math.random() < 0.8) list.push(F.Bytes.rand());else list.push(F.BytesTree.rand()); - } - return list; - } -}).__name("BytesTree").__desc("a tree of arbitrary binary data"); - -module.exports = F; \ No newline at end of file diff --git a/truebit-implementation/node_modules/eth-lib/mesh-node.js b/truebit-implementation/node_modules/eth-lib/mesh-node.js deleted file mode 100644 index 5d16666f..00000000 --- a/truebit-implementation/node_modules/eth-lib/mesh-node.js +++ /dev/null @@ -1,70 +0,0 @@ -// Creates a simple, HTTP-based -const servify = require("servify"); -const array = require("./array"); - -const server = (port, config) => { - const stablePeerCount = config.stablePeerCount || 8; - const requestPeerAmount = config.requestPeerAmount || 3; - const pingPeerDelay = config.pingPeerDelay || 10000; - - let peers = []; - let peerByUrl = {}; - const Peer = url => { - if (peerByUrl[url]) { - return peerByUrl[url]; - } - let lastPing = 0; - let lastPong = 0; - const rpc = servify.at(url); - const rpcProxy = new Proxy({ - get: function(target, method) { - return function() { - return rpc[method].apply(this, arguments).then(result => { - lastPong = Date.now(); - return result; - }); - } - } - }); - const tick = () => { - if (Date.now() - lastPing > pingPeerDelay) { - - } - }; - return { - url: url, - rpc: rpcProxy, - }; - }; - - const getRandomPeers = (amount) => - array.generate(amount, () => state.peers[Math.random() * state.peers.length | 0]); - - const findNewPeers = (neighborAmount, requestedAmount) => - Promise - .all(getRandomPeers(neighborAmount).map(peer => peer.rpc.getRandomPeers(requestedAmount))) - .then(newPeers => ; - - let state = { - peers: config.peerUrls.map(Peer), - isPeer: config.peerUrls.reduce((isPeer, url) => (isPeer[url] = 1, isPeer), {}); - }; - - return servify.api(8097, { - registerPeer: (url) => { - if (!isPeer[url]) { - return servify.at(url).ping().then(pong => { - if (pong === "pong") { - isPeer[url] = 1; - peers.push(Peer(url)); - } - }); - } - return "OK"; - }, - getRandomPeers: amount => getRandomPeers(amount).map(peer => peer.url), - ping: () => "pong" - - }); -}; - diff --git a/truebit-implementation/node_modules/eth-lib/package.json b/truebit-implementation/node_modules/eth-lib/package.json deleted file mode 100644 index 99e37479..00000000 --- a/truebit-implementation/node_modules/eth-lib/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "eth-lib@^0.1.26", - "_id": "eth-lib@0.1.27", - "_inBundle": false, - "_integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "_location": "/eth-lib", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "eth-lib@^0.1.26", - "name": "eth-lib", - "escapedName": "eth-lib", - "rawSpec": "^0.1.26", - "saveSpec": null, - "fetchSpec": "^0.1.26" - }, - "_requiredBy": [ - "/swarm-js", - "/web3-utils" - ], - "_resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "_shasum": "f0b0fd144f865d2d6bf8257a40004f2e75ca1dd6", - "_spec": "eth-lib@^0.1.26", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Victor Maia" - }, - "bugs": { - "url": "https://github.com/maiavictor/eth-lib/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "deprecated": false, - "description": "Lightweight Ethereum libraries", - "devDependencies": { - "babel-cli": "^6.24.1", - "babel-preset-es2015": "^6.24.1", - "ethjs-account": "^0.1.1", - "ethjs-signer": "^0.1.1", - "forall": "^0.1.1", - "rlp": "^2.0.0" - }, - "homepage": "https://github.com/maiavictor/eth-lib#readme", - "keywords": [ - "ethereum" - ], - "license": "MIT", - "main": "lib/index.js", - "name": "eth-lib", - "repository": { - "type": "git", - "url": "git+https://github.com/maiavictor/eth-lib.git" - }, - "scripts": { - "babel": "babel src --out-dir=lib", - "test": "mocha test/test.js" - }, - "version": "0.1.27" -} diff --git a/truebit-implementation/node_modules/eth-lib/src/account.js b/truebit-implementation/node_modules/eth-lib/src/account.js deleted file mode 100644 index 3d005f08..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/account.js +++ /dev/null @@ -1,105 +0,0 @@ -const Bytes = require("./bytes"); -const Nat = require("./nat"); -const elliptic = require("elliptic"); -const rlp = require("./rlp"); -const secp256k1 = new (elliptic.ec)("secp256k1"); // eslint-disable-line -const {keccak256, keccak256s} = require("./hash"); - -const create = entropy => { - const innerHex = keccak256(Bytes.concat(Bytes.random(32), entropy || Bytes.random(32))); - const middleHex = Bytes.concat(Bytes.concat(Bytes.random(32), innerHex), Bytes.random(32)); - const outerHex = keccak256(middleHex); - return fromPrivate(outerHex); -} - -const toChecksum = address => { - const addressHash = keccak256s(address.slice(2)); - let checksumAddress = "0x"; - for (let i = 0; i < 40; i++) - checksumAddress += parseInt(addressHash[i + 2], 16) > 7 - ? address[i + 2].toUpperCase() - : address[i + 2]; - return checksumAddress; -} - -const fromPrivate = privateKey => { - const buffer = new Buffer(privateKey.slice(2), "hex"); - const ecKey = secp256k1.keyFromPrivate(buffer); - const publicKey = "0x" + ecKey.getPublic(false, 'hex').slice(2); - const publicHash = keccak256(publicKey); - const address = toChecksum("0x" + publicHash.slice(-40)); - return { - address: address, - privateKey: privateKey - } -} - -const encodeSignature = ([v, r, s]) => - Bytes.flatten([r,s,v]); - -const decodeSignature = (hex) => - [Bytes.slice(64,65,hex), Bytes.slice(0,32,hex), Bytes.slice(32,64,hex)]; - -const makeSign = addToV => (hash, privateKey) => { - const signature = secp256k1 - .keyFromPrivate(new Buffer(privateKey.slice(2), "hex")) - .sign(new Buffer(hash.slice(2), "hex"), {canonical: true}); - return encodeSignature([ - Bytes.pad(1, Bytes.fromNumber(addToV + signature.recoveryParam)), - Bytes.pad(32, Bytes.fromNat("0x" + signature.r.toString(16))), - Bytes.pad(32, Bytes.fromNat("0x" + signature.s.toString(16)))]); -} - -const sign = makeSign(27); // v=27|28 instead of 0|1... - -const recover = (hash, signature) => { - const vals = decodeSignature(signature); - const vrs = {v: Bytes.toNumber(vals[0]), r:vals[1].slice(2), s:vals[2].slice(2)}; - const ecPublicKey = secp256k1.recoverPubKey(new Buffer(hash.slice(2), "hex"), vrs, vrs.v < 2 ? vrs.v : 1 - (vrs.v % 2)); // because odd vals mean v=0... sadly that means v=0 means v=1... I hate that - const publicKey = "0x" + ecPublicKey.encode("hex", false).slice(2); - const publicHash = keccak256(publicKey); - const address = toChecksum("0x" + publicHash.slice(-40)); - return address; -} - -const transactionSigningData = tx => - rlp.encode([ - Bytes.fromNat(tx.nonce), - Bytes.fromNat(tx.gasPrice), - Bytes.fromNat(tx.gas), - tx.to.toLowerCase(), - Bytes.fromNat(tx.value), - tx.data, - Bytes.fromNat(tx.chainId || "0x1"), - "0x", - "0x"]); - -const signTransaction = (tx, privateKey) => { - const signingData = transactionSigningData(tx); - const signature = makeSign(Nat.toNumber(tx.chainId || "0x1") * 2 + 35)(keccak256(signingData), privateKey); - const rawTransaction = rlp.decode(signingData).slice(0,6).concat(decodeSignature(signature)); - return rlp.encode(rawTransaction); -} - -const recoverTransaction = (rawTransaction) => { - const values = rlp.decode(rawTransaction); - const signature = encodeSignature(values.slice(6,9)); - const recovery = Bytes.toNumber(values[6]); - const extraData = recovery < 35 ? [] : [Bytes.fromNumber((recovery - 35) >> 1), "0x", "0x"] - const signingData = values.slice(0,6).concat(extraData); - const signingDataHex = rlp.encode(signingData); - return recover(keccak256(signingDataHex), signature); -} - -module.exports = { - create, - toChecksum, - fromPrivate, - sign, - recover, - signTransaction, - recoverTransaction, - transactionSigningData, - encodeSignature, - decodeSignature -} diff --git a/truebit-implementation/node_modules/eth-lib/src/api.js b/truebit-implementation/node_modules/eth-lib/src/api.js deleted file mode 100644 index 971c72aa..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/api.js +++ /dev/null @@ -1,195 +0,0 @@ -const Api = provider => { - const Nat = require("./nat"); - const Map = require("./map"); - const Bytes = require("./bytes"); - const keccak256s = require("./hash").keccak256s; - const send = method => (...params) => - new Promise((resolve,reject) => - provider.send(method, params, (err, result) => - err ? reject(err) : resolve(result))); - - // TODO check inputs - // TODO move to proper file - const encodeABI = (type, value) => { - if (type === "bytes") { - const length = Bytes.length(value); - const nextMul32 = (((length - 1) / 32 | 0) + 1) * 32; - const lengthEncoded = encodeABI("uint256", Nat.fromNumber(length)).data; - const bytesEncoded = Bytes.padRight(nextMul32, value); - return {data: Bytes.concat(lengthEncoded, bytesEncoded), dynamic: true}; - } else if (type === "uint256" || type === "bytes32") { - return {data: Bytes.pad(32, value), dynamic: false}; - } else { - throw "Eth-lib can't encode ABI type " + type + " yet."; - } - } - - const sendTransaction = send("eth_sendTransaction"); - const sendRawTransaction = send("eth_sendRawTransaction"); - const getTransactionReceipt = send("eth_getTransactionReceipt"); - const compileSolidity = send("eth_compileSolidity"); - const call = send("eth_call"); - const getBalance = send("eth_getBalance"); - const accounts = send("eth_accounts"); - - const removeEmptyTo = tx => - tx.to === "" || tx.to === "0x" ? Map.remove("to")(tx) : tx; - - const waitTransactionReceipt = getTransactionReceipt; // TODO: implement correctly - - const addTransactionDefaults = tx => - // Get basic defaults - Promise.all([ - tx.chainId || send("net_version")(), - tx.gasPrice || send("eth_gasPrice")(), - tx.nonce || send("eth_getTransactionCount")(tx.from,"latest"), - tx.value || "0x0", - tx.data || "0x"]) - // Add them to tx - .then(([chainId, gasPrice, nonce, value, data]) => { - return Map.merge(tx)({chainId: Nat.fromNumber(chainId), gasPrice, nonce, value, data}); - }) - .then(tx => { - // Add gas default by estimating - if (!tx.gas) { - let estimateTx = {}; - estimateTx.from = tx.from; - if (tx.to !== "" && tx.to !== "0x") - estimateTx.to = tx.to; - estimateTx.value = tx.value; - estimateTx.nonce = tx.nonce; - estimateTx.data = tx.data; - return send("eth_estimateGas")(estimateTx) - .then(usedGas => { - return Map.merge(tx)({gas: Nat.div(Nat.mul(usedGas,"0x6"),"0x5")}); - }); - } else { - return Promise.resolve(tx); - } - }); - - const sendTransactionWithDefaults = tx => - addTransactionDefaults(tx) - .then(tx => sendTransaction(removeEmptyTo(tx))); - - const callWithDefaults = (tx, block) => - addTransactionDefaults(tx) - .then(tx => call(removeEmptyTo(tx), block || "latest")); - - const callMethodData = method => (...params) => { - const methodSig = method.name + "(" + method.inputs.map(i => i.type).join(",") + ")"; - const methodHash = keccak256s(methodSig).slice(0,10); - let encodedParams = params.map((param,i) => encodeABI(method.inputs[i].type, param)); - var headBlock = "0x"; - let dataBlock = "0x"; - for (var i = 0; i < encodedParams.length; ++i) { - if (encodedParams[i].dynamic) { - var dataLoc = encodedParams.length * 32 + Bytes.length(dataBlock); - headBlock = Bytes.concat(headBlock, Bytes.pad(32, Nat.fromNumber(dataLoc))); - dataBlock = Bytes.concat(dataBlock, encodedParams[i].data); - } else { - headBlock = Bytes.concat(headBlock, encodedParams[i].data); - } - } - return Bytes.flatten([methodHash, headBlock, dataBlock]); - } - - // Address, Address, ContractInterface -> Contract - const contract = (from, address, contractInterface) => { - let contract = {}; - contract._address = address; - contract._from = from; - contract.broadcast = {}; - contractInterface.forEach(method => { - if (method && method.name) { - const call = (type, value) => (...params) => { - const transaction = { - from: from, - to: address, - value: value, - data: callMethodData(method)(...params) - }; - return type === "data" - ? Promise.resolve(transaction) - : method.constant - ? callWithDefaults(transaction) - : sendTransactionWithDefaults(transaction) - .then(type === "receipt" ? waitTransactionReceipt : (x => x)); - }; - contract[method.name] = call("receipt", "0x0"); - if (!method.constant) { - contract[method.name+"_data"] = call("data", "0x0"); - contract[method.name+"_pay"] = value => (...params) => call("receipt", value)(...params); - contract[method.name+"_pay_txHash"] = value => (...params) => call("txHash", value)(...params); - contract[method.name+"_txHash"] = call("txHash", "0x0"); - } - } - }); - return contract; - } - - // Address, Bytecode -> TxHash - const deployBytecode_txHash = (from, code) => - sendTransactionWithDefaults({from: from, data: code, to: ""}); - - // Address, Bytecode -> Receipt - const deployBytecode = (from, code) => - deployBytecode_txHash(from,code) - .then(waitTransactionReceipt); - - // Address, Bytecode, ContractInterface - const deployBytecodeContract = (from, code, contractInterface) => - deployBytecode(from, code) - .then(receipt => contract(from, receipt.contractAddress, contractInterface)); - - // Address, String, Address -> Contract - const solidityContract = (from, source, at) => - compileSolidity(source) - .then(({info:{abiDefinition}}) => contract(from, at, abiDefinition)); - - // Address, String -> TxHash - const deploySolidity_txHash = (from, source) => - compileSolidity(source) - .then(({code}) => deployBytecode_txHash(from, code)); - - // Address, String -> Receipt - const deploySolidity = (from, source) => - deploySolidity_txHash(from, source) - .then(waitTransactionReceipt); - - // Address, String -> Contract - const deploySolidityContract = (from, source) => - compileSolidity(source) - .then(({code, info:{abiDefinition}}) => - deployBytecodeContract(from, code, abiDefinition)); - - return { - send, - - sendTransaction, - sendRawTransaction, - getTransactionReceipt, - call, - getBalance, - accounts, - - waitTransactionReceipt, - addTransactionDefaults, - sendTransactionWithDefaults, - callWithDefaults, - callMethodData, - - contract, - deployBytecode_txHash, - deployBytecode, - deployBytecodeContract, - - compileSolidity, - solidityContract, - deploySolidity_txHash, - deploySolidity, - deploySolidityContract - } -} - -module.exports = Api; diff --git a/truebit-implementation/node_modules/eth-lib/src/array.js b/truebit-implementation/node_modules/eth-lib/src/array.js deleted file mode 100644 index c6945a57..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/array.js +++ /dev/null @@ -1,35 +0,0 @@ -const generate = (num, fn) => { - let a = []; - for (var i = 0; i < num; ++i) - a.push(fn(i)); - return a; -}; - -const replicate = (num, val) => - generate(num, () => val); - -const concat = (a, b) => - a.concat(b); - -const flatten = (a) => { - let r = []; - for (let j = 0, J = a.length; j < J; ++j) - for (let i = 0, I = a[j].length; i < I; ++i) - r.push(a[j][i]); - return r; -} - -const chunksOf = (n,a) => { - let b = []; - for (let i = 0, l = a.length; i < l; i += n) - b.push(a.slice(i, i + n)); - return b; -} - -module.exports = { - generate, - replicate, - concat, - flatten, - chunksOf -} diff --git a/truebit-implementation/node_modules/eth-lib/src/bytes.js b/truebit-implementation/node_modules/eth-lib/src/bytes.js deleted file mode 100644 index 857da70e..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/bytes.js +++ /dev/null @@ -1,179 +0,0 @@ -const A = require("./array.js"); - -const at = (bytes, index) => - parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16); - -const random = bytes => { - let rnd; - if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) - rnd = window.crypto.getRandomValues(new Uint8Array(bytes)); - else if (typeof require !== "undefined") - rnd = require("c" + "rypto").randomBytes(bytes); - else - throw "Safe random numbers not available."; - let hex = "0x"; - for (let i = 0; i < bytes; ++i) - hex += ("00" + rnd[i].toString(16)).slice(-2); - return hex; -}; - -const length = a => - (a.length - 2) / 2; - -const flatten = (a) => - "0x" + a.reduce((r,s) => r + s.slice(2), ""); - -const slice = (i,j,bs) => - "0x" + bs.slice(i*2+2,j*2+2); - -const reverse = hex => { - let rev = "0x"; - for (let i = 0, l = length(hex); i < l; ++i) { - rev += hex.slice((l-i)*2, (l-i+1)*2); - } - return rev; -} - -const pad = (l,hex) => - hex.length === l*2+2 ? hex : pad(l,"0x"+"0"+hex.slice(2)); - -const padRight = (l,hex) => - hex.length === l*2+2 ? hex : padRight(l,hex+"0"); - -const toArray = hex => { - let arr = []; - for (let i = 2, l = hex.length; i < l; i += 2) - arr.push(parseInt(hex.slice(i, i + 2), 16)); - return arr; -} - -const fromArray = arr => { - let hex = "0x"; - for (let i = 0, l = arr.length; i < l; ++i) { - let b = arr[i]; - hex += (b < 16 ? "0" : "") + b.toString(16); - } - return hex; -} - -const toUint8Array = hex => - new Uint8Array(toArray(hex)); - -const fromUint8Array = arr => - fromArray([].slice.call(arr, 0)); - -const fromNumber = num => { - let hex = num.toString(16); - return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex ; -}; - -const toNumber = hex => - parseInt(hex.slice(2), 16); - -const concat = (a, b) => - a.concat(b.slice(2)); - -const fromNat = bn => - bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2); - -const toNat = bn => - bn[2] === "0" ? "0x" + bn.slice(3) : bn; - -const fromAscii = ascii => { - let hex = "0x"; - for (let i = 0; i < ascii.length; ++i) - hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2); - return hex; -}; - -const toAscii = hex => { - let ascii = ""; - for (let i = 2; i < hex.length; i += 2) - ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16)); - return ascii; -}; - -// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330 -const fromString = s => { - const makeByte = uint8 => { - const b = uint8.toString(16); - return b.length < 2 ? "0" + b : b; - }; - let bytes = "0x"; - for (let ci = 0; ci != s.length; ci++) { - let c = s.charCodeAt(ci); - if (c < 128) { - bytes += makeByte(c); - continue; - } - if (c < 2048) { - bytes += makeByte(c >> 6 | 192); - } else { - if (c > 0xd7ff && c < 0xdc00) { - if (++ci == s.length) return null; - let c2 = s.charCodeAt(ci); - if (c2 < 0xdc00 || c2 > 0xdfff) return null; - c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); - bytes += makeByte(c >> 18 | 240); - bytes += makeByte(c>> 12 & 63 | 128); - } else { // c <= 0xffff - bytes += makeByte(c >> 12 | 224); - } - bytes += makeByte(c >> 6 & 63 | 128); - } - bytes += makeByte(c & 63 | 128); - } - return bytes; -}; - -const toString = (bytes) => { - let s = ''; - let i = 0; - let l = length(bytes); - while (i < l) { - let c = at(bytes, i++); - if (c > 127) { - if (c > 191 && c < 224) { - if (i >= l) return null; - c = (c & 31) << 6 | at(bytes, i) & 63; - } else if (c > 223 && c < 240) { - if (i + 1 >= l) return null; - c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63; - } else if (c > 239 && c < 248) { - if (i+2 >= l) return null; - c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63; - } else return null; - ++i; - } - if (c <= 0xffff) s += String.fromCharCode(c); - else if (c <= 0x10ffff) { - c -= 0x10000; - s += String.fromCharCode(c >> 10 | 0xd800) - s += String.fromCharCode(c & 0x3FF | 0xdc00) - } else return null; - } - return s; -}; - -module.exports = { - random, - length, - concat, - flatten, - slice, - reverse, - pad, - padRight, - fromAscii, - toAscii, - fromString, - toString, - fromNumber, - toNumber, - fromNat, - toNat, - fromArray, - toArray, - fromUint8Array, - toUint8Array -} diff --git a/truebit-implementation/node_modules/eth-lib/src/desubits.js b/truebit-implementation/node_modules/eth-lib/src/desubits.js deleted file mode 100644 index 88734ba3..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/desubits.js +++ /dev/null @@ -1,62 +0,0 @@ -const Bytes = require("./bytes"); - -const inis = "pbtdkgxjfvlrmnsz".split(""); - -const mids = "auie".split(""); - -const back = [inis,mids].map(chars => { - let map = {}; - for (let i = 0; i < chars.length; ++i) - map[chars[i]] = i; - return map; -}); - -const syllableFromB64 = b64 => { - const ini = (b64 >>> 2) & 15; - const mid = (b64 >>> 0) & 3; - return inis[ini] + mids[mid]; -} - -const syllableToB64 = syllable => { - const ini = back[0][syllable[0]]; - const mid = back[1][syllable[1]]; - return ini * 4 + mid; -} - -const b64sFromBytes = bytes => { - //BoooooBoooooBoooooBooooo - //BoooooooBoooooooBooooooo - let b64s = [], b64; - for (let i = 0, l = Math.ceil(bytes.length * 8 / 6); i < l; ++i) { - let j = i / 8 * 6 | 0; - b64s.push - ( i % 4 === 0 ? (bytes[j+0] / 4 | 0) - : i % 4 === 1 ? bytes[j+0] % 4 * 16 + (bytes[j+1] / 16 | 0) - : i % 4 === 2 ? bytes[j+0] % 16 * 4 + (bytes[j+1] / 64 | 0) - : bytes[j+0] % 64 * 1); - } - return b64s; -} - -const b64sToBytes = b64s => { - let bytes = []; - for (let i = 0, l = Math.floor(b64s.length * 6 / 8); i < l; ++i) { - let j = i / 6 * 8 | 0; - bytes.push - ( i % 3 === 0 ? b64s[j+0] % 64 * 4 + (b64s[j+1] / 16 | 0) - : i % 3 === 1 ? b64s[j+0] % 16 * 16 + (b64s[j+1] / 4 | 0) - : b64s[j+0] % 4 * 64 + (b64s[j+1] / 1 | 0)); - } - return bytes; -} - -const fromBytes = bytes => - b64sFromBytes(Bytes.toArray(bytes)).map(syllableFromB64).join(""); - -const toBytes = syllables => - Bytes.fromArray(b64sToBytes(syllables.match(/\w\w/g).map(syllableToB64))); - -module.exports = { - fromBytes, - toBytes -} diff --git a/truebit-implementation/node_modules/eth-lib/src/fn.js b/truebit-implementation/node_modules/eth-lib/src/fn.js deleted file mode 100644 index 15114dc2..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/fn.js +++ /dev/null @@ -1,10 +0,0 @@ -const times = (n, f, x) => { - for (let i = 0; i < n; ++i) { - x = f(x); - } - return x; -} - -module.exports = { - times -} diff --git a/truebit-implementation/node_modules/eth-lib/src/hash.js b/truebit-implementation/node_modules/eth-lib/src/hash.js deleted file mode 100644 index e11b94bb..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/hash.js +++ /dev/null @@ -1,340 +0,0 @@ -// This was ported from https://github.com/emn178/js-sha3, with some minor -// modifications and pruning. It is licensed under MIT: -// -// Copyright 2015-2016 Chen, Yi-Cyuan -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// 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. - -const HEX_CHARS = '0123456789abcdef'.split(''); -const KECCAK_PADDING = [1, 256, 65536, 16777216]; -const SHIFT = [0, 8, 16, 24]; -const RC = [ - 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]; - -const Keccak = (bits) => ({ - blocks: [], - reset: true, - block: 0, - start: 0, - blockCount: (1600 - (bits << 1)) >> 5, - outputBlocks: bits >> 5, - s: (s=>[].concat(s,s,s,s,s))([0,0,0,0,0,0,0,0,0,0]) -}); - -const update = (state, message) => { - var length = message.length, - blocks = state.blocks, - byteCount = state.blockCount << 2, - blockCount = state.blockCount, - outputBlocks = state.outputBlocks, - s = state.s, - index = 0, - i, - code; - - // update - while (index < length) { - if (state.reset) { - state.reset = false; - blocks[0] = state.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (typeof message !== "string") { - for (i = state.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = state.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - state.lastByteIndex = i; - if (i >= byteCount) { - state.start = i - byteCount; - state.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - state.reset = true; - } else { - state.start = i; - } - } - - // finalize - i = state.lastByteIndex; - blocks[i >> 2] |= KECCAK_PADDING[i & 3]; - if (state.lastByteIndex === byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - - // toString - var hex = '', i = 0, j = 0, block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + - HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + - HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + - HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - return "0x" + hex; -} - -const f = s => { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } -} - -const keccak = bits => str => { - var msg; - if (str.slice(0,2) === "0x") { - msg = []; - for (var i = 2, l = str.length; i < l; i += 2) - msg.push(parseInt(str.slice(i,i+2), 16)); - } else { - msg = str; - } - return update(Keccak(bits, bits), msg); -} - -module.exports = { - keccak256: keccak(256), - keccak512: keccak(512), - keccak256s: keccak(256), - keccak512s: keccak(512), -} diff --git a/truebit-implementation/node_modules/eth-lib/src/index.js b/truebit-implementation/node_modules/eth-lib/src/index.js deleted file mode 100644 index 53fa10ce..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/index.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - Account: require("./account.js"), - Nat: require("./nat.js"), - Bytes: require("./bytes.js"), - Hash: require("./hash.js"), - RLP: require("./rlp.js"), - Api: require("./api.js"), - Provider: require("./provider.js"), - Desubits: require("./desubits.js"), - Passphrase: require("./passphrase.js") -} diff --git a/truebit-implementation/node_modules/eth-lib/src/map.js b/truebit-implementation/node_modules/eth-lib/src/map.js deleted file mode 100644 index e5d805ae..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/map.js +++ /dev/null @@ -1,21 +0,0 @@ -const merge = a => b => { - let c = {}; - for (let key in a) - c[key] = a[key]; - for (let key in b) - c[key] = b[key]; - return c; -} - -const remove = removeKey => a => { - let b = {}; - for (let key in a) - if (key !== removeKey) - b[key] = a[key]; - return b; -} - -module.exports = { - merge, - remove -} diff --git a/truebit-implementation/node_modules/eth-lib/src/nat.js b/truebit-implementation/node_modules/eth-lib/src/nat.js deleted file mode 100644 index 1cfc02ea..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/nat.js +++ /dev/null @@ -1,57 +0,0 @@ -const BN = require("bn.js"); -const Bytes = require("./bytes"); - -const fromBN = bn => - "0x" + bn.toString("hex"); - -const toBN = str => - new BN(str.slice(2), 16); - -const fromString = str => { - const bn = "0x" + (str.slice(0,2) === "0x" - ? new BN(str.slice(2), 16) - : new BN(str, 10)).toString("hex"); - return bn === "0x0" ? "0x" : bn; -} - -const toEther = wei => - toNumber(div(wei, fromString("10000000000"))) / 100000000; - -const fromEther = eth => - mul(fromNumber(Math.floor(eth * 100000000)), fromString("10000000000")); - -const toString = a => - toBN(a).toString(10); - -const fromNumber = a => - typeof a === "string" - ? (/^0x/.test(a) ? a : "0x" + a) - : "0x" + new BN(a).toString("hex"); - -const toNumber = a => - toBN(a).toNumber(); - -const toUint256 = a => - Bytes.pad(32, a); - -const bin = method => (a, b) => - fromBN(toBN(a)[method](toBN(b))); - -const add = bin("add"); -const mul = bin("mul"); -const div = bin("div"); -const sub = bin("sub"); - -module.exports = { - toString, - fromString, - toNumber, - fromNumber, - toEther, - fromEther, - toUint256, - add, - mul, - div, - sub -} diff --git a/truebit-implementation/node_modules/eth-lib/src/passphrase.js b/truebit-implementation/node_modules/eth-lib/src/passphrase.js deleted file mode 100644 index bd112352..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/passphrase.js +++ /dev/null @@ -1,51 +0,0 @@ -const Hash = require("./hash"); -const Bytes = require("./bytes"); -const Desubits = require("./desubits"); - -// Bytes -> Bytes -const bytesAddChecksum = (bytes) => { - const hash = Hash.keccak256(bytes); - const sum = Bytes.slice(0, 1, hash); - return Bytes.concat(bytes, sum); -}; - -// Bytes -> Bool -const bytesChecksum = (bytes) => { - const length = Bytes.length(bytes); - const prefix = Bytes.slice(0, length - 1, bytes); - return bytesAddChecksum(prefix) === bytes; -}; - -// () ~> Passphrase -const create = () => { - const bytes = bytesAddChecksum(Bytes.random(11)); - const seed = Desubits.fromBytes(bytes); - const passphrase = seed.replace(/([a-z]{8})/g, "$1 "); - return passphrase; -}; - -// Passphrase -> Bytes -const toBytes = (passphrase) => { - const seed = passphrase.replace(/ /g, ""); - const bytes = Desubits.toBytes(passphrase); - return bytes; -}; - -// Passphrase -> Bool -const checksum = (passphrase) => - bytesChecksum(toBytes(passphrase)); - -// Passphrase -> Bytes -const toMasterKey = (passphrase) => { - let hash = Hash.keccak256; - let bytes = toBytes(passphrase); - for (let i = 0, l = Math.pow(2,12); i < l; ++i) - bytes = hash(bytes); - return bytes; -} - -module.exports = { - create, - checksum, - toMasterKey -} diff --git a/truebit-implementation/node_modules/eth-lib/src/provider.js b/truebit-implementation/node_modules/eth-lib/src/provider.js deleted file mode 100644 index 80490907..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/provider.js +++ /dev/null @@ -1,87 +0,0 @@ -const njsp = require("nano-json-stream-parser"); -const request = require("xhr-request-promise"); - -const EthereumProvider = (url, intercept) => { - intercept = intercept || (() => {}); - - let api = {}; - let onResponse = {}; - let callbacks = {}; - let nextId = 0; - let send; - - const makeSender = send => { - const P = fn => (...args) => new Promise((resolve, reject) => - fn(...args.concat((err,res) => err ? reject(err) : resolve(res)))); - const sender = intercept => (method, params, callback) => { - const intercepted = intercept(method, params, P(sender(() => {}))); - if (intercepted) { - intercepted.then(response => callback(null, response)); - } else { - send(method, params, callback); - } - } - return sender(intercept); - }; - - const parseResponse = njsp(json => { - onResponse[json.id] && onResponse[json.id](null, json.result); - }); - - const genPayload = (method, params) => ({ - jsonrpc: "2.0", - id: ++nextId, - method: method, - params: params - }); - - api.on = (name, callback) => { - callbacks[name] = callback; - } - - if (/^ws/.test(url)) { - const WebSocket = require("w"+"s"); - const ws = new WebSocket(url); - api.send = makeSender((method, params, callback) => { - const intercepted = intercept(method, params, P(send(() => {}))); - if (intercepted) { - intercepted.then(response => callback(null, response)); - } else { - const payload = genPayload(method, params); - onResponse[payload.id] = callback; - ws.send(JSON.stringify(payload)); - } - }); - ws.on("message", parseResponse); - ws.on("open", () => callbacks.connect && callbacks.connect(eth)); - ws.on("close", () => callbacks.disconnect && callbacks.disconnect()); - - } else if (/^http/.test(url)) { - api.send = makeSender((method, params, callback) => { - request(url, { - method: "POST", - contentType: "application/json-rpc", - body: JSON.stringify(genPayload(method,params))}) - .then(answer => { - var resp = JSON.parse(answer); - if (resp.error) { - callback(resp.error.message); - } else { - callback(null, resp.result) - } - }) - .catch(err => callback("Couldn't connect to Ethereum node.")); - }); - - setTimeout(() => { - callbacks.connect && callbacks.connect(); - }, 1); - - } else { - throw "IPC not supported yet."; - } - - return api; -}; - -module.exports = EthereumProvider; diff --git a/truebit-implementation/node_modules/eth-lib/src/rlp.js b/truebit-implementation/node_modules/eth-lib/src/rlp.js deleted file mode 100644 index 9c42de64..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/rlp.js +++ /dev/null @@ -1,72 +0,0 @@ -// The RLP format -// Serialization and deserialization for the BytesTree type, under the following grammar: -// | First byte | Meaning | -// | ---------- | -------------------------------------------------------------------------- | -// | 0 to 127 | HEX(leaf) | -// | 128 to 183 | HEX(length_of_leaf + 128) + HEX(leaf) | -// | 184 to 191 | HEX(length_of_length_of_leaf + 128 + 55) + HEX(length_of_leaf) + HEX(leaf) | -// | 192 to 247 | HEX(length_of_node + 192) + HEX(node) | -// | 248 to 255 | HEX(length_of_length_of_node + 128 + 55) + HEX(length_of_node) + HEX(node) | - -const encode = tree => { - const padEven = str => - str.length % 2 === 0 ? str : "0" + str; - - const uint = num => - padEven(num.toString(16)) - - const length = (len, add) => - len < 56 ? uint(add + len) : uint(add + uint(len).length / 2 + 55) + uint(len); - - const dataTree = tree => { - if (typeof tree === "string") { - const hex = tree.slice(2); - const pre = hex.length != 2 || hex >= "80" ? length(hex.length / 2, 128) : ""; - return pre + hex; - } else { - const hex = tree.map(dataTree).join(""); - const pre = length(hex.length / 2, 192) - return pre + hex; - } - } - - return "0x" + dataTree(tree); -}; - -const decode = hex => { - let i = 2; - - const parseTree = () => { - if (i >= hex.length) throw ""; - const head = hex.slice(i,i+2); - return head < "80" ? (i+=2, "0x" + head) - : head < "c0" ? parseHex() - : parseList(); - } - - const parseLength = () => { - const len = parseInt(hex.slice(i,i+=2), 16) % 64; - return len < 56 ? len : parseInt(hex.slice(i, i += (len - 55) * 2), 16); - } - - const parseHex = () => { - const len = parseLength(); - return "0x" + hex.slice(i, i += len * 2); - } - - const parseList = () => { - const lim = parseLength() * 2 + i; - let list = []; - while (i < lim) - list.push(parseTree()); - return list; - } - - try { - return parseTree(); - } catch (e) { - return []; - } -}; - -module.exports = {encode, decode}; diff --git a/truebit-implementation/node_modules/eth-lib/src/types.js b/truebit-implementation/node_modules/eth-lib/src/types.js deleted file mode 100644 index fa1a0f31..00000000 --- a/truebit-implementation/node_modules/eth-lib/src/types.js +++ /dev/null @@ -1,83 +0,0 @@ -const F = require("forall"); -const A = require("./array"); -const B = require("./bytes"); -const Account = require("./account"); - -F.Bytes = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by an even number of low-case hex chars (i.e., `0123456789abcdef`)", - rand: () => "0x" + A.generate((Math.random() * 16 | 0) * 2, () => (Math.random() * 16 | 0).toString(16)).join(""), - test: value => typeof value === "string" && /^0x([0-9a-f][0-9a-f])*$/.test(value), -}).__name("Bytes").__desc("any arbitrary data"); - -F.NBytes = bytes => F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by " + (bytes * 2) + " low-case hex chars (i.e., `0123456789abcdef`)", - test: value => F.Bytes.test(value) && value.length === (bytes * 2 + 2), - rand: () => "0x" + A.generate(bytes * 2, () => (Math.random() * 16 | 0).toString(16)).join("") -}) -.__name("NBytes(" + bytes + ")") -.__desc("any arbitrary data of exactly " + bytes + "-byte" + (bytes > 1 ? "s" : "")); - -F.Nat = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by at least one low-case hex char different from 0, followed by any number of low-case hex chars (i.e., `0123456789abcdef`)", - test: value => typeof value === "string" && /^0x[1-9a-f]([0-9a-f])*$/.test(value), - rand: () => "0x" + (Math.random() * Math.pow(2,50) | 0).toString(16) -}) -.__name("Nat") -.__desc("an arbitrarily long non-negative integer number"); - -F.Address = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by 40 hex chars (i.e., `0123456789abcdefABCDEF`), with the nth hex being uppercase iff the nth hex of the keccak256 of the lowercase address in ASCII is > 7", - test: address => /^(0x)?[0-9a-f]{40}$/i.test(address) && Account.toChecksum(address.toLowerCase()) === address, - rand: () => F.Account.rand().address -}) -.__name("Address") -.__desc("an Ethereum public address"); - -F.Hash = F(F.Type, { - form: F.NBytes(32).form, - test: F.NBytes(32).test, - rand: F.NBytes(32).rand -}) -.__name("Hash") -.__desc("a Keccak-256 hash"); - -F.PrivateKey = F(F.Type, { - form: F.NBytes(32).form, - test: F.NBytes(32).test, - rand: F.NBytes(32).rand -}) -.__name("PrivateKey") -.__desc("an Ethereum private key"); - -F.Account = (() => { - const base = F.Struct({ - address: F.Address, - privateKey: F.PrivateKey, - }); - return F(F.Type, { - form: base.form, - test: base.test, - rand: () => Account.create("") - }); -})() -.__name("Account") -.__desc("an Ethereum account"); - -F.BytesTree = F(F.Type, { - form: "either " + F.Bytes.form + ", or a tree of nested JavaScript Arrays of BytesTrees", - test: value => F.Bytes.test(value) || value instanceof Array && value.reduce((r,v) => F.BytesTree.test(v) && r, true), - rand: () => { - let list = []; - while (Math.random() < 0.8) { - if (Math.random() < 0.8) - list.push(F.Bytes.rand()); - else - list.push(F.BytesTree.rand()); - } - return list; - } -}) -.__name("BytesTree") -.__desc("a tree of arbitrary binary data"); - -module.exports = F; diff --git a/truebit-implementation/node_modules/eth-lib/test/lib/benchmark.js b/truebit-implementation/node_modules/eth-lib/test/lib/benchmark.js deleted file mode 100644 index 1dcf9bd3..00000000 --- a/truebit-implementation/node_modules/eth-lib/test/lib/benchmark.js +++ /dev/null @@ -1,18 +0,0 @@ -const rnd = require("./randomData.js"); -const rlp = require("./../../src/rlp.js"); -const ref = {rlp: require("rlp")}; -const cps = f => { - for (var t = Date.now(), i = 0; Date.now() - t < 1000; ++i) - f(); - return i; -}; - -let dataTrees = []; -for (let i = 0; i < 64; ++i) - dataTrees.push(rnd.dataTree()); -console.log("Benchmarking Eth-Lib's RLP implementation vs the one on NPM."); -const liteCps = cps(() => dataTrees.map((dt) => rlp.decode(rlp.encode(dt)))); -const npmCps = cps(() => dataTrees.map((dt) => ref.rlp.decode(ref.rlp.encode(dt)))); -console.log("- Eth-Lib: " + liteCps + " calls per second."); -console.log("- Reference: " + npmCps + " calls per second."); -console.log("- Eth-Lib is: " + (liteCps / npmCps).toFixed(2) + " " + (liteCps > npmCps ? "faster" : "slower") + " than reference."); diff --git a/truebit-implementation/node_modules/eth-lib/test/lib/randomData.js b/truebit-implementation/node_modules/eth-lib/test/lib/randomData.js deleted file mode 100644 index b2082d85..00000000 --- a/truebit-implementation/node_modules/eth-lib/test/lib/randomData.js +++ /dev/null @@ -1,24 +0,0 @@ -// () ~> HexString -const hexString = () => { - let str = ""; - while (Math.random() < 0.95) - str = str + ("00" + (Math.random() * 256 | 0).toString(16)).slice(-2); - return "0x" + str; -} - -// () ~> DataTree -const dataTree = () => { - let list = []; - while (Math.random() < 0.8) { - if (Math.random() < 0.8) - list.push(hexString()); - else - list.push(dataTree()); - } - return list; -} - -module.exports = { - hexString, - dataTree -} diff --git a/truebit-implementation/node_modules/eth-lib/test/test.js b/truebit-implementation/node_modules/eth-lib/test/test.js deleted file mode 100644 index c97dd658..00000000 --- a/truebit-implementation/node_modules/eth-lib/test/test.js +++ /dev/null @@ -1,141 +0,0 @@ -const assert = require("assert"); -const rnd = require("./lib/randomData.js"); -const rlp = require("./../src/rlp.js"); -const ref = {rlp: require("rlp")}; -const F = require("./../src/types.js"); -const Nat = require("./../src/Nat.js"); -const Account = require("./../src/account.js"); -const keccak256 = require("./../src/hash.js").keccak256; -const ethjs = { - signer: require("ethjs-signer"), - account: require("ethjs-account")}; - -describe("RLP", () => { - it("Must operate identically to reference implementation", () => { - // Builds a test set of 256 random dataTrees + 2 default - let dataTrees = []; - dataTrees.push(["0x00112233", "0x00", "0x44", "0x55", "0xf0", "0xff", ["0x66"], ["0x77", "0x88"], "0x", "0x", "0x99aabb"]); - dataTrees.push("0x00112233445566778899aabbccddeeff"); - for (let i = 0; i < 256; ++i) - dataTrees.push(rnd.dataTree()); - - // Tests if they encode and decode identically to the reference implementation - dataTrees.forEach(dataTree => { - const refEnc = "0x" + ref.rlp.encode(dataTree).toString("hex"); - const impEnc = rlp.encode(dataTree); - const impDec = rlp.decode(impEnc); - try { - assert(refEnc === impEnc); - assert(JSON.stringify(impDec) === JSON.stringify(dataTree)); - } catch (e) { - console.log(JSON.stringify(dataTree, null, 2)); - } - }); - }); - it("Obeys law: `decode(encode(tree)) == tree`", () => { - F.forall([F.BytesTree], tree => JSON.stringify(rlp.decode(rlp.encode(tree))) === JSON.stringify(tree)); - }); -}); - -describe("account", function () { - it("must recover the same address that signed", () => { - F.forall([F.Account, F.Bytes], (acc, msg) => - Account.recover(keccak256(msg), Account.sign(keccak256(msg), acc.privateKey, 0)) === acc.address, - 32); - }); - - it("must match the generated address with EthJS-account", () => { - F.forall([F.NBytes(32)], pvt => { - const ethfpAcc = Account.fromPrivate(pvt); - const ethjsAcc = ethjs.account.privateToAccount(pvt); - return ethfpAcc.address === ethjsAcc.address; - }, 128); - }); - - it("must match expected values for complex pre-determined tests", () => { - const accounts = [ - { - "address": '0x9d8A62f656a8d1615C1294fd71e9CFb3E4855A4F', - "publicKey": '0x4bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a', - "privateKey": '0x4646464646464646464646464646464646464646464646464646464646464646', - "transactions": [ - { - "object": { - "nonce": Nat.fromString("9"), - "gasPrice": Nat.fromString("20000000000"), - "gas": Nat.fromString("21000"), - "to": '0x3535353535353535353535353535353535353535', - "value": Nat.fromString("1000000000000000000"), - "data": "0x" - }, - "signature": "0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83" - }, - ] - }, - { - "address": '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - "publicKey": '0x4646ae5047316b4230d0086c8acec687f00b1cd9d1dc634f6cb358ac0a9a8ffffe77b4dd0a4bfb95851f3b7355c781dd60f8418fc8a65d14907aff47c903a559', - "privateKey": '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', - "transactions": [ - { - "object": { - "nonce": Nat.fromString("0"), - "gasPrice": Nat.fromString("230000000000"), - "gas": Nat.fromString("21000"), - "to": '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - "value": Nat.fromString("1000000000000000000"), - "data": "0x0123abcd" - }, - "signature": "0xf8708085358d117c0082520894fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a032dbcf46a64b9892df24d8b961d2a52fd66b1dabd3a0d96940fd6795c01d8711a01b86df9475de7451554557d87b69456e3fa95aa5375584bf63d1ffd647a225d9", - "oldSignature": "0xf8708085358d117c0082520894fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd1ba04e289b471dd4469d5080ce3726b8359d5b0c649e012bbbdde53f9b6580ad21a2a0333663ea96846c112f3878705c8c24a763d1fbf8f97c174d26e350c7ef0d7263" - }, - ] - } - ]; - - // For each account - accounts.forEach(function (correctAccount, i) { - - // Generates an address from this account's private key - const testAccount = Account.fromPrivate(correctAccount.privateKey); - - // Generated address must match - assert(testAccount.address === correctAccount.address); - - // For each transaction on this account - correctAccount.transactions.forEach(function (transaction) { - - // Signs it, uing post-EIP 155 scheme - const signature = Account.signTransaction( - transaction.object, - correctAccount.privateKey); - - // Checks if the signature is as expected - assert(transaction.signature === signature); - - //// Checks if we can recover the right address - const recoveredAddress = Account.recoverTransaction(signature); - assert(recoveredAddress === testAccount.address); - - //// If the test also provides a pre-EIP 155 signature - if (transaction.oldSignature) { - - let txObj = {}; - for (let key in transaction.object) - txObj[key] = transaction.object[key].replace(/^0x$/,"0x0"); - - //Signs it, using pre-EIP 155 scheme (using the ethjs-signer lib) - const oldSignature = ethjs.signer.sign(txObj, correctAccount.privateKey); - - //// Checks if the signature is as expected - assert(transaction.oldSignature === oldSignature); - - //// Checks if we can recover the right address from old sigs (using web3) - const recoveredAddress = Account.recoverTransaction(oldSignature); - assert(recoveredAddress === testAccount.address); - } - }); - }); - }); -}); - diff --git a/truebit-implementation/node_modules/ethers/.eslintrc.js b/truebit-implementation/node_modules/ethers/.eslintrc.js deleted file mode 100644 index 4b9c621e..00000000 --- a/truebit-implementation/node_modules/ethers/.eslintrc.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = { - "env": { - "browser": true, - "commonjs": true, - "node": true - }, - "extends": [ -// "eslint:recommended", -// "plugin:promise/recommended" - ], - "parserOptions": { - "ecmaVersion": 5 - }, - "plugins": [ - "promise" - ], - "rules": { - "promise/always-return": "error", - "promise/no-return-wrap": "error", - "promise/param-names": "error", - "promise/catch-or-return": "error", - "promise/no-native": "off", -// "promise/no-nesting": "warn", - "promise/no-promise-in-callback": "warn", - "promise/no-callback-in-promise": "warn", -// "promise/avoid-new": "warn", - "promise/no-new-statics": "error", - "promise/no-return-in-finally": "warn", - "promise/valid-params": "warn" - } -}; diff --git a/truebit-implementation/node_modules/ethers/.travis.yml b/truebit-implementation/node_modules/ethers/.travis.yml deleted file mode 100644 index b246496e..00000000 --- a/truebit-implementation/node_modules/ethers/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: node_js - -node_js: - - "6" - - "10" - -# - "8" - -env: - - RUN_PHANTOMJS=0 - - RUN_PHANTOMJS=1 - -matrix: - exclude: - - node_js: "6" - env: RUN_PHANTOMJS=1 - - node_js: "8" - env: RUN_PHANTOMJS=1 diff --git a/truebit-implementation/node_modules/ethers/CODE_OF_CONDUCT.md b/truebit-implementation/node_modules/ethers/CODE_OF_CONDUCT.md deleted file mode 100644 index 2df30bfe..00000000 --- a/truebit-implementation/node_modules/ethers/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at support@ethers.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/truebit-implementation/node_modules/ethers/LICENSE b/truebit-implementation/node_modules/ethers/LICENSE deleted file mode 100644 index 2c58757c..00000000 --- a/truebit-implementation/node_modules/ethers/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Richard Moore - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/ethers/README.md b/truebit-implementation/node_modules/ethers/README.md deleted file mode 100644 index 235048e3..00000000 --- a/truebit-implementation/node_modules/ethers/README.md +++ /dev/null @@ -1,88 +0,0 @@ -ethers.js -========= - -[![npm version](https://badge.fury.io/js/ethers.svg)](https://badge.fury.io/js/ethers) - -Complete Ethereum wallet implementation and utilities in JavaScript (and TypeScript). - -**Features:** - -- Keep your private keys in your client, **safe** and sound -- Import and export **JSON wallets** (Geth, Parity and crowdsale) and brain wallets -- Import and export BIP 39 **mnemonic phrases** (12 word backup phrases) and **HD Wallets** (English, Italian, Japanese, Korean, Simplified Chinese, Traditional Chinese; more coming soon) -- Meta-classes create JavaScript objects from any contract ABI -- Connect to Ethereum nodes over [JSON-RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC), [INFURA](https://infura.io), [Etherscan](https://etherscan.io), or [MetaMask](https://metamask.io) -- ENS names are first-class citizens; they can be used anywhere an Ethereum addresses can be -- **Tiny** (~84kb compressed; 270kb uncompressed) -- **Complete** functionality for all your Ethereum needs -- Extensive [documentation](https://docs.ethers.io/ethers.js/html/) -- Large collection of test cases which are maintained and added to -- Fully TypeScript ready, with definition files and full TypeScript source -- **MIT License** (including ALL dependencies); completely open source to do with as you please - - -Installing ----------- - -To use in a browser: - -```html - -``` - -To use in [node.js](https://nodejs.org/): - -``` -/Users/ethers/my-app> npm install --save ethers -``` - - -Documentation -------------- - -Browse the [API Documentation](https://docs.ethers.io/ethers.js/html/) online. - -Documentation is generated using [Sphinx](http://www.sphinx-doc.org) and can be browsed locally from the /docs/build/html directory. - - -Hacking and Contributing ------------------------- - -The JavaScript code is now generated from TypeScript, so make sure you modify the -TypeScript and compile it, rather than modifying the JavaScript directly. To start -auto-compiling the TypeScript code, you may use: - -``` -/home/ethers> npm run auto-build -``` - -A very important part of ethers is its exhaustive test cases, so before making any -bug fix, please add a test case that fails prior to the fix, and succeeds after the -fix. All regression tests must pass. - -Pull requests are always welcome, but please keep a few points in mind: - -- Compatibility-breaking changes will not be accepted; they may be considered for the next major version -- Security is important; adding dependencies require fairly convincing arguments -- The library aims to be lean, so keep an eye on the `dist/ethers.min.js` filesize before and after your changes -- Add test cases for both expected and unexpected input -- Any new features need to be supported by us (issues, documentation, testing), so anything that is overly complicated or specific may not be accepted - -If in doubt, please start an issue, and we can have a nice public discussion. :) - - -Donations ---------- - -I do this because I love it, but if you want to buy me a coffee, I won't say no. **:o)** - -Ethereum: `0xEA517D5a070e6705Cc5467858681Ed953d285Eb9` - - -License -------- - -Completely MIT Licensed. Including ALL dependencies. diff --git a/truebit-implementation/node_modules/ethers/_version.js b/truebit-implementation/node_modules/ethers/_version.js deleted file mode 100644 index 3e9e8010..00000000 --- a/truebit-implementation/node_modules/ethers/_version.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = "4.0.0-beta.0"; diff --git a/truebit-implementation/node_modules/ethers/contracts/contract.js b/truebit-implementation/node_modules/ethers/contracts/contract.js deleted file mode 100644 index a866b911..00000000 --- a/truebit-implementation/node_modules/ethers/contracts/contract.js +++ /dev/null @@ -1,507 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var interface_1 = require("./interface"); -var abi_coder_1 = require("../utils/abi-coder"); -var address_1 = require("../utils/address"); -var bignumber_1 = require("../utils/bignumber"); -var bytes_1 = require("../utils/bytes"); -var properties_1 = require("../utils/properties"); -var web_1 = require("../utils/web"); -var types_1 = require("../utils/types"); -var errors = __importStar(require("../utils/errors")); -var allowedTransactionKeys = { - data: true, from: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true -}; -// Recursively replaces ENS names with promises to resolve the name and -// stalls until all promises have returned -// @TODO: Expand this to resolve any promises too -function resolveAddresses(provider, value, paramType) { - if (Array.isArray(paramType)) { - var promises = []; - paramType.forEach(function (paramType, index) { - var v = null; - if (Array.isArray(value)) { - v = value[index]; - } - else { - v = value[paramType.name]; - } - promises.push(resolveAddresses(provider, v, paramType)); - }); - return Promise.all(promises); - } - if (paramType.type === 'address') { - return provider.resolveName(value); - } - if (paramType.components) { - return resolveAddresses(provider, value, paramType.components); - } - return Promise.resolve(value); -} -function runMethod(contract, functionName, estimateOnly) { - var method = contract.interface.functions[functionName]; - return function () { - var params = []; - for (var _i = 0; _i < arguments.length; _i++) { - params[_i] = arguments[_i]; - } - var tx = {}; - // If 1 extra parameter was passed in, it contains overrides - if (params.length === method.inputs.length + 1 && typeof (params[params.length - 1]) === 'object') { - tx = properties_1.shallowCopy(params.pop()); - // Check for unexpected keys (e.g. using "gas" instead of "gasLimit") - for (var key in tx) { - if (!allowedTransactionKeys[key]) { - throw new Error('unknown transaction override ' + key); - } - } - } - if (params.length != method.inputs.length) { - throw new Error('incorrect number of arguments'); - } - // Check overrides make sense - ['data', 'to'].forEach(function (key) { - if (tx[key] != null) { - errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key }); - } - }); - // Send to the contract address - tx.to = contract.addressPromise; - return resolveAddresses(contract.provider, params, method.inputs).then(function (params) { - tx.data = method.encode(params); - if (method.type === 'call') { - // Call (constant functions) always cost 0 ether - if (estimateOnly) { - return Promise.resolve(bignumber_1.ConstantZero); - } - if (!contract.provider) { - errors.throwError('call (constant functions) require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'call' }); - } - // Check overrides make sense - ['gasLimit', 'gasPrice', 'value'].forEach(function (key) { - if (tx[key] != null) { - throw new Error('call cannot override ' + key); - } - }); - if (tx.from == null && contract.signer) { - tx.from = contract.signer.getAddress(); - } - return contract.provider.call(tx).then(function (value) { - if ((bytes_1.hexDataLength(value) % 32) === 4 && bytes_1.hexDataSlice(value, 0, 4) === '0x08c379a0') { - var reason = abi_coder_1.defaultAbiCoder.decode(['string'], bytes_1.hexDataSlice(value, 4)); - errors.throwError('call revert exception', errors.CALL_EXCEPTION, { - address: contract.address, - args: params, - method: method.signature, - errorSignature: 'Error(string)', - errorArgs: [reason], - reason: reason, - transaction: tx - }); - } - try { - var result = method.decode(value); - if (method.outputs.length === 1) { - result = result[0]; - } - return result; - } - catch (error) { - if (value === '0x' && method.outputs.length > 0) { - errors.throwError('call exception', errors.CALL_EXCEPTION, { - address: contract.address, - method: method.signature, - args: params - }); - } - throw error; - } - }); - } - else if (method.type === 'transaction') { - // Only computing the transaction estimate - if (estimateOnly) { - if (!contract.provider) { - errors.throwError('estimate gas require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'estimateGas' }); - } - if (tx.from == null && contract.signer) { - tx.from = contract.signer.getAddress(); - } - return contract.provider.estimateGas(tx); - } - if (!contract.signer) { - errors.throwError('sending a transaction require a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' }); - } - // Make sure they aren't overriding something they shouldn't - if (tx.from != null) { - errors.throwError('cannot override from in a transaction', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' }); - } - return contract.signer.sendTransaction(tx); - } - throw new Error('invalid type - ' + method.type); - return null; - }); - }; -} -function getEventTag(filter) { - return (filter.address || '') + (filter.topics ? filter.topics.join(':') : ''); -} -var Contract = /** @class */ (function () { - // https://github.com/Microsoft/TypeScript/issues/5453 - // Once this issue is resolved (there are open PR) we can do this nicer - // by making addressOrName default to null for 2 operand calls. :) - function Contract(addressOrName, contractInterface, signerOrProvider) { - var _this = this; - errors.checkNew(this, Contract); - // @TODO: Maybe still check the addressOrName looks like a valid address or name? - //address = getAddress(address); - if (contractInterface instanceof interface_1.Interface) { - properties_1.defineReadOnly(this, 'interface', contractInterface); - } - else { - properties_1.defineReadOnly(this, 'interface', new interface_1.Interface(contractInterface)); - } - if (signerOrProvider instanceof types_1.Signer) { - properties_1.defineReadOnly(this, 'provider', signerOrProvider.provider); - properties_1.defineReadOnly(this, 'signer', signerOrProvider); - } - else if (signerOrProvider instanceof types_1.MinimalProvider) { - properties_1.defineReadOnly(this, 'provider', signerOrProvider); - properties_1.defineReadOnly(this, 'signer', null); - } - else { - errors.throwError('invalid signer or provider', errors.INVALID_ARGUMENT, { arg: 'signerOrProvider', value: signerOrProvider }); - } - properties_1.defineReadOnly(this, 'estimate', {}); - properties_1.defineReadOnly(this, 'functions', {}); - properties_1.defineReadOnly(this, 'filters', {}); - Object.keys(this.interface.events).forEach(function (eventName) { - var event = _this.interface.events[eventName]; - properties_1.defineReadOnly(_this.filters, eventName, function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return { - address: _this.address, - topics: event.encodeTopics(args) - }; - }); - }); - // Not connected to an on-chain instance, so do not connect functions and events - if (!addressOrName) { - properties_1.defineReadOnly(this, 'address', null); - properties_1.defineReadOnly(this, 'addressPromise', Promise.resolve(null)); - return; - } - this._events = []; - properties_1.defineReadOnly(this, 'address', addressOrName); - if (this.provider) { - properties_1.defineReadOnly(this, 'addressPromise', this.provider.resolveName(addressOrName).then(function (address) { - if (address == null) { - throw new Error('name not found'); - } - return address; - }).catch(function (error) { - console.log('ERROR: Cannot find Contract - ' + addressOrName); - throw error; - })); - } - else { - try { - properties_1.defineReadOnly(this, 'addressPromise', Promise.resolve(address_1.getAddress(addressOrName))); - } - catch (error) { - errors.throwError('provider is required to use non-address contract address', errors.INVALID_ARGUMENT, { argument: 'addressOrName', value: addressOrName }); - } - } - Object.keys(this.interface.functions).forEach(function (name) { - var run = runMethod(_this, name, false); - if (_this[name] == null) { - properties_1.defineReadOnly(_this, name, run); - } - else { - console.log('WARNING: Multiple definitions for ' + name); - } - if (_this.functions[name] == null) { - properties_1.defineReadOnly(_this.functions, name, run); - properties_1.defineReadOnly(_this.estimate, name, runMethod(_this, name, true)); - } - }); - } - // @TODO: Allow timeout? - Contract.prototype.deployed = function () { - var _this = this; - // If we were just deployed, we know the transaction we should occur in - if (this.deployTransaction) { - return this.deployTransaction.wait().then(function () { - return _this; - }); - } - // Otherwise, poll for our code to be deployed - return web_1.poll(function () { - return _this.provider.getCode(_this.address).then(function (code) { - if (code === '0x') { - return undefined; - } - return _this; - }); - }, { onceBlock: this.provider }); - }; - // @TODO: - // estimateFallback(overrides?: TransactionRequest): Promise - // @TODO: - // estimateDeploy(bytecode: string, ...args): Promise - Contract.prototype.fallback = function (overrides) { - if (!this.signer) { - errors.throwError('sending a transaction require a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction(fallback)' }); - } - var tx = properties_1.shallowCopy(overrides || {}); - ['from', 'to'].forEach(function (key) { - if (tx[key] == null) { - return; - } - errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key }); - }); - tx.to = this.addressPromise; - return this.signer.sendTransaction(tx); - }; - // Reconnect to a different signer or provider - Contract.prototype.connect = function (signerOrProvider) { - return new Contract(this.address, this.interface, signerOrProvider); - }; - // Re-attach to a different on=chain instance of this contract - Contract.prototype.attach = function (addressOrName) { - return new Contract(addressOrName, this.interface, this.signer || this.provider); - }; - // Deploy the contract with the bytecode, resolving to the deployed address. - // Use contract.deployTransaction.wait() to wait until the contract has - // been mined. - Contract.prototype.deploy = function (bytecode) { - var _this = this; - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (this.signer == null) { - throw new Error('missing signer'); // @TODO: errors.throwError - } - // A lot of common tools do not prefix bytecode with a 0x - if (typeof (bytecode) === 'string' && bytecode.match(/^[0-9a-f]*$/i) && (bytecode.length % 2) == 0) { - bytecode = '0x' + bytecode; - } - if (!bytes_1.isHexString(bytecode)) { - errors.throwError('bytecode must be a valid hex string', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode }); - } - if ((bytecode.length % 2) !== 0) { - errors.throwError('bytecode must be valid data (even length)', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode }); - } - var tx = {}; - if (args.length === this.interface.deployFunction.inputs.length + 1) { - tx = properties_1.shallowCopy(args.pop()); - for (var key in tx) { - if (!allowedTransactionKeys[key]) { - throw new Error('unknown transaction override ' + key); - } - } - } - ['data', 'from', 'to'].forEach(function (key) { - if (tx[key] == null) { - return; - } - errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key }); - }); - tx.data = this.interface.deployFunction.encode(bytecode, args); - errors.checkArgumentCount(args.length, this.interface.deployFunction.inputs.length, 'in Contract constructor'); - // @TODO: overrides of args.length = this.interface.deployFunction.inputs.length + 1 - return this.signer.sendTransaction(tx).then(function (tx) { - var contract = new Contract(address_1.getContractAddress(tx), _this.interface, _this.signer || _this.provider); - properties_1.defineReadOnly(contract, 'deployTransaction', tx); - return contract; - }); - }; - Contract.prototype._getEventFilter = function (eventName) { - var _this = this; - if (typeof (eventName) === 'string') { - // Listen for any event - if (eventName === '*') { - return { - decode: function (log) { - return [_this.interface.parseLog(log)]; - }, - eventTag: '*', - filter: { address: this.address }, - }; - } - // Normalize the eventName - if (eventName.indexOf('(') !== -1) { - eventName = abi_coder_1.formatSignature(abi_coder_1.parseSignature('event ' + eventName)); - } - var event_1 = this.interface.events[eventName]; - if (!event_1) { - errors.throwError('unknown event - ' + eventName, errors.INVALID_ARGUMENT, { argumnet: 'eventName', value: eventName }); - } - var filter_1 = { - address: this.address, - topics: [event_1.topic] - }; - return { - decode: function (log) { - return event_1.decode(log.data, log.topics); - }, - event: event_1, - eventTag: getEventTag(filter_1), - filter: filter_1 - }; - } - var filter = { - address: this.address - }; - // Find the matching event in the ABI; if none, we still allow filtering - // since it may be a filter for an otherwise unknown event - var event = null; - if (eventName.topics && eventName.topics[0]) { - filter.topics = eventName.topics; - for (var name in this.interface.events) { - if (name.indexOf('(') === -1) { - continue; - } - var e = this.interface.events[name]; - if (e.topic === eventName.topics[0].toLowerCase()) { - event = e; - break; - } - } - } - return { - decode: function (log) { - if (event) { - return event.decode(log.data, log.topics); - } - return [log]; - }, - event: event, - eventTag: getEventTag(filter), - filter: filter - }; - }; - Contract.prototype._addEventListener = function (eventFilter, listener, once) { - var _this = this; - if (!this.provider) { - errors.throwError('events require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'once' }); - } - var wrappedListener = function (log) { - var decoded = Array.prototype.slice.call(eventFilter.decode(log)); - var event = properties_1.jsonCopy(log); - event.args = decoded; - event.decode = eventFilter.event.decode; - event.event = eventFilter.event.name; - event.eventSignature = eventFilter.event.signature; - event.removeListener = function () { _this.removeListener(eventFilter.filter, listener); }; - event.getBlock = function () { return _this.provider.getBlock(log.blockHash); }; - event.getTransaction = function () { return _this.provider.getTransactionReceipt(log.transactionHash); }; - event.getTransactionReceipt = function () { return _this.provider.getTransactionReceipt(log.transactionHash); }; - decoded.push(event); - _this.emit.apply(_this, [eventFilter.filter].concat(decoded)); - }; - this.provider.on(eventFilter.filter, wrappedListener); - this._events.push({ eventFilter: eventFilter, listener: listener, wrappedListener: wrappedListener, once: once }); - }; - Contract.prototype.on = function (event, listener) { - this._addEventListener(this._getEventFilter(event), listener, false); - return this; - }; - Contract.prototype.once = function (event, listener) { - this._addEventListener(this._getEventFilter(event), listener, true); - return this; - }; - Contract.prototype.addEventLisener = function (eventName, listener) { - return this.on(eventName, listener); - }; - Contract.prototype.emit = function (eventName) { - var _this = this; - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (!this.provider) { - return false; - } - var result = false; - var eventFilter = this._getEventFilter(eventName); - this._events = this._events.filter(function (event) { - if (event.eventFilter.eventTag !== eventFilter.eventTag) { - return true; - } - setTimeout(function () { - event.listener.apply(_this, args); - }, 0); - result = true; - return !(event.once); - }); - return result; - }; - Contract.prototype.listenerCount = function (eventName) { - if (!this.provider) { - return 0; - } - var eventFilter = this._getEventFilter(eventName); - return this._events.filter(function (event) { - return event.eventFilter.eventTag === eventFilter.eventTag; - }).length; - }; - Contract.prototype.listeners = function (eventName) { - if (!this.provider) { - return []; - } - var eventFilter = this._getEventFilter(eventName); - return this._events.filter(function (event) { - return event.eventFilter.eventTag === eventFilter.eventTag; - }).map(function (event) { return event.listener; }); - }; - Contract.prototype.removeAllListeners = function (eventName) { - if (!this.provider) { - return this; - } - var eventFilter = this._getEventFilter(eventName); - this._events = this._events.filter(function (event) { - return event.eventFilter.eventTag !== eventFilter.eventTag; - }); - return this; - }; - Contract.prototype.removeListener = function (eventName, listener) { - var _this = this; - if (!this.provider) { - return this; - } - var found = false; - var eventFilter = this._getEventFilter(eventName); - this._events = this._events.filter(function (event) { - // Make sure this event and listener match - if (event.eventFilter.eventTag !== eventFilter.eventTag) { - return true; - } - if (event.listener !== listener) { - return true; - } - _this.provider.removeListener(event.eventFilter.filter, event.wrappedListener); - // Already found a matching event in a previous loop - if (found) { - return true; - } - // REmove this event (returning false filters us out) - found = true; - return false; - }); - return this; - }; - return Contract; -}()); -exports.Contract = Contract; diff --git a/truebit-implementation/node_modules/ethers/contracts/index.js b/truebit-implementation/node_modules/ethers/contracts/index.js deleted file mode 100644 index 0fdbe64d..00000000 --- a/truebit-implementation/node_modules/ethers/contracts/index.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var contract_1 = require("./contract"); -exports.Contract = contract_1.Contract; -var interface_1 = require("./interface"); -exports.Interface = interface_1.Interface; diff --git a/truebit-implementation/node_modules/ethers/contracts/interface.js b/truebit-implementation/node_modules/ethers/contracts/interface.js deleted file mode 100644 index fb07d1ad..00000000 --- a/truebit-implementation/node_modules/ethers/contracts/interface.js +++ /dev/null @@ -1,377 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI -var address_1 = require("../utils/address"); -var abi_coder_1 = require("../utils/abi-coder"); -var bignumber_1 = require("../utils/bignumber"); -var bytes_1 = require("../utils/bytes"); -var hash_1 = require("../utils/hash"); -var keccak256_1 = require("../utils/keccak256"); -var properties_1 = require("../utils/properties"); -var types_1 = require("../utils/types"); -var errors = __importStar(require("../utils/errors")); -var Indexed = /** @class */ (function (_super) { - __extends(Indexed, _super); - function Indexed(hash) { - var _this = _super.call(this) || this; - properties_1.defineReadOnly(_this, 'hash', hash); - return _this; - } - return Indexed; -}(types_1.Indexed)); -var Description = /** @class */ (function () { - function Description(info) { - for (var key in info) { - var value = info[key]; - if (value != null && typeof (value) === 'object') { - properties_1.defineFrozen(this, key, info[key]); - } - else { - properties_1.defineReadOnly(this, key, info[key]); - } - } - } - return Description; -}()); -var DeployDescription = /** @class */ (function (_super) { - __extends(DeployDescription, _super); - function DeployDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - DeployDescription.prototype.encode = function (bytecode, params) { - if (!bytes_1.isHexString(bytecode)) { - errors.throwError('invalid contract bytecode', errors.INVALID_ARGUMENT, { - arg: 'bytecode', - value: bytecode - }); - } - errors.checkArgumentCount(params.length, this.inputs.length, 'in Interface constructor'); - try { - return (bytecode + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2)); - } - catch (error) { - errors.throwError('invalid constructor argument', errors.INVALID_ARGUMENT, { - arg: error.arg, - reason: error.reason, - value: error.value - }); - } - return null; - }; - return DeployDescription; -}(Description)); -var FunctionDescription = /** @class */ (function (_super) { - __extends(FunctionDescription, _super); - function FunctionDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - FunctionDescription.prototype.encode = function (params) { - errors.checkArgumentCount(params.length, this.inputs.length, 'in interface function ' + this.name); - try { - return this.sighash + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2); - } - catch (error) { - errors.throwError('invalid input argument', errors.INVALID_ARGUMENT, { - arg: error.arg, - reason: error.reason, - value: error.value - }); - } - return null; - }; - FunctionDescription.prototype.decode = function (data) { - try { - return abi_coder_1.defaultAbiCoder.decode(this.outputs, bytes_1.arrayify(data)); - } - catch (error) { - errors.throwError('invalid data for function output', errors.INVALID_ARGUMENT, { - arg: 'data', - errorArg: error.arg, - errorValue: error.value, - value: data, - reason: error.reason - }); - } - }; - return FunctionDescription; -}(Description)); -var Result = /** @class */ (function (_super) { - __extends(Result, _super); - function Result() { - return _super !== null && _super.apply(this, arguments) || this; - } - return Result; -}(Description)); -var EventDescription = /** @class */ (function (_super) { - __extends(EventDescription, _super); - function EventDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - EventDescription.prototype.encodeTopics = function (params) { - var _this = this; - if (params.length > this.inputs.length) { - errors.throwError('too many arguments for ' + this.name, errors.UNEXPECTED_ARGUMENT, { maxCount: params.length, expectedCount: this.inputs.length }); - } - var topics = []; - if (!this.anonymous) { - topics.push(this.topic); - } - params.forEach(function (arg, index) { - if (arg === null) { - topics.push(null); - return; - } - var param = _this.inputs[index]; - if (!param.indexed) { - errors.throwError('cannot filter non-indexed parameters; must be null', errors.INVALID_ARGUMENT, { argument: (param.name || index), value: arg }); - } - if (param.type === 'string') { - topics.push(hash_1.id(arg)); - } - else if (param.type === 'bytes') { - topics.push(keccak256_1.keccak256(arg)); - } - else if (param.type.indexOf('[') !== -1 || param.type.substring(0, 5) === 'tuple') { - errors.throwError('filtering with tuples or arrays not implemented yet; bug us on GitHub', errors.NOT_IMPLEMENTED, { operation: 'filter(array|tuple)' }); - } - else { - if (param.type === 'address') { - address_1.getAddress(arg); - } - topics.push(bytes_1.hexZeroPad(bytes_1.hexlify(arg), 32).toLowerCase()); - } - }); - // Trim off trailing nulls - while (topics.length && topics[topics.length - 1] === null) { - topics.pop(); - } - return topics; - }; - EventDescription.prototype.decode = function (data, topics) { - // Strip the signature off of non-anonymous topics - if (topics != null && !this.anonymous) { - topics = topics.slice(1); - } - var inputIndexed = []; - var inputNonIndexed = []; - var inputDynamic = []; - this.inputs.forEach(function (param, index) { - if (param.indexed) { - if (param.type === 'string' || param.type === 'bytes' || param.type.indexOf('[') >= 0 || param.type.substring(0, 5) === 'tuple') { - inputIndexed.push({ type: 'bytes32', name: (param.name || '') }); - inputDynamic.push(true); - } - else { - inputIndexed.push(param); - inputDynamic.push(false); - } - } - else { - inputNonIndexed.push(param); - inputDynamic.push(false); - } - }); - if (topics != null) { - var resultIndexed = abi_coder_1.defaultAbiCoder.decode(inputIndexed, bytes_1.concat(topics)); - } - var resultNonIndexed = abi_coder_1.defaultAbiCoder.decode(inputNonIndexed, bytes_1.arrayify(data)); - var result = new Result({}); - var nonIndexedIndex = 0, indexedIndex = 0; - this.inputs.forEach(function (input, index) { - if (input.indexed) { - if (topics == null) { - result[index] = new Indexed(null); - } - else if (inputDynamic[index]) { - result[index] = new Indexed(resultIndexed[indexedIndex++]); - } - else { - result[index] = resultIndexed[indexedIndex++]; - } - } - else { - result[index] = resultNonIndexed[nonIndexedIndex++]; - } - if (input.name) { - result[input.name] = result[index]; - } - }); - result.length = this.inputs.length; - return result; - }; - return EventDescription; -}(Description)); -var TransactionDescription = /** @class */ (function (_super) { - __extends(TransactionDescription, _super); - function TransactionDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - return TransactionDescription; -}(Description)); -var LogDescription = /** @class */ (function (_super) { - __extends(LogDescription, _super); - function LogDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - return LogDescription; -}(Description)); -function addMethod(method) { - switch (method.type) { - case 'constructor': { - var description = new DeployDescription({ - inputs: method.inputs, - payable: (method.payable == null || !!method.payable) - }); - if (!this.deployFunction) { - this.deployFunction = description; - } - break; - } - case 'function': { - var signature = abi_coder_1.formatSignature(method).replace(/tuple/g, ''); - var sighash = hash_1.id(signature).substring(0, 10); - var description = new FunctionDescription({ - inputs: method.inputs, - outputs: method.outputs, - payable: (method.payable == null || !!method.payable), - type: ((method.constant) ? 'call' : 'transaction'), - signature: signature, - sighash: sighash, - }); - // Expose the first (and hopefully unique named function - if (method.name && this.functions[method.name] == null) { - properties_1.defineReadOnly(this.functions, method.name, description); - } - // Expose all methods by their signature, for overloaded functions - if (this.functions[description.signature] == null) { - properties_1.defineReadOnly(this.functions, description.signature, description); - } - break; - } - case 'event': { - var signature = abi_coder_1.formatSignature(method).replace(/tuple/g, ''); - var description = new EventDescription({ - name: method.name, - signature: signature, - inputs: method.inputs, - topic: hash_1.id(signature), - anonymous: (!!method.anonymous) - }); - // Expose the first (and hopefully unique) event name - if (method.name && this.events[method.name] == null) { - properties_1.defineReadOnly(this.events, method.name, description); - } - // Expose all events by their signature, for overloaded functions - if (this.events[description.signature] == null) { - properties_1.defineReadOnly(this.events, description.signature, description); - } - break; - } - case 'fallback': - // Nothing to do for fallback - break; - default: - console.log('WARNING: unsupported ABI type - ' + method.type); - break; - } -} -var Interface = /** @class */ (function () { - function Interface(abi) { - errors.checkNew(this, Interface); - if (typeof (abi) === 'string') { - try { - abi = JSON.parse(abi); - } - catch (error) { - errors.throwError('could not parse ABI JSON', errors.INVALID_ARGUMENT, { - arg: 'abi', - errorMessage: error.message, - value: abi - }); - } - if (!Array.isArray(abi)) { - errors.throwError('invalid abi', errors.INVALID_ARGUMENT, { arg: 'abi', value: abi }); - return null; - } - } - properties_1.defineReadOnly(this, 'functions', {}); - properties_1.defineReadOnly(this, 'events', {}); - // Convert any supported ABI format into a standard ABI format - var _abi = []; - abi.forEach(function (fragment) { - if (typeof (fragment) === 'string') { - fragment = abi_coder_1.parseSignature(fragment); - } - // @TODO: We should probable do some validation; create abiCoder.formatSignature for checking - _abi.push(fragment); - }); - properties_1.defineFrozen(this, 'abi', _abi); - _abi.forEach(addMethod, this); - // If there wasn't a constructor, create the default constructor - if (!this.deployFunction) { - addMethod.call(this, { type: 'constructor', inputs: [] }); - } - } - Interface.prototype.parseTransaction = function (tx) { - var sighash = tx.data.substring(0, 10).toLowerCase(); - for (var name in this.functions) { - if (name.indexOf('(') === -1) { - continue; - } - var func = this.functions[name]; - if (func.sighash === sighash) { - var result = abi_coder_1.defaultAbiCoder.decode(func.inputs, '0x' + tx.data.substring(10)); - return new TransactionDescription({ - args: result, - decode: func.decode, - name: name, - signature: func.signature, - sighash: func.sighash, - value: bignumber_1.bigNumberify(tx.value || 0), - }); - } - } - return null; - }; - Interface.prototype.parseLog = function (log) { - for (var name in this.events) { - if (name.indexOf('(') === -1) { - continue; - } - var event = this.events[name]; - if (event.anonymous) { - continue; - } - if (event.topic !== log.topics[0]) { - continue; - } - // @TODO: If anonymous, and the only method, and the input count matches, should we parse and return it? - return new LogDescription({ - name: event.name, - signature: event.signature, - topic: event.topic, - values: event.decode(log.data, log.topics) - }); - } - return null; - }; - return Interface; -}()); -exports.Interface = Interface; diff --git a/truebit-implementation/node_modules/ethers/dist/demo/index.html b/truebit-implementation/node_modules/ethers/dist/demo/index.html deleted file mode 100644 index 0c1652dd..00000000 --- a/truebit-implementation/node_modules/ethers/dist/demo/index.html +++ /dev/null @@ -1,474 +0,0 @@ - - - Ethereum Wallet - - - -
-
-

Ethereum Wallet Tool

-
-

Load JSON Wallet

-

- If you have a JSON wallet file from geth or from the initial Ethereum - crowd sale, you can decrypt it here. No information is shared with any - server. -

- - - - - - - - - - - - - -
JSON Wallet:
Drop JSON wallet file here
Password:
-
Unlock JSON Wallet
-
- -
-

Mnemonic Phrase Wallet

-

- If you have a 12 word mnemonic phrase, you can generate your wallet here. - No information is shared with any server. -

- - - - - - - - - - - - - -
Mnemonic Phrase:
Path:
-
Derive Wallet
-
- -
-

Raw Private Key

-

-

- - - - - - - - - -
Private Key:
-
Load Raw Private Key
-
- -
-

Disclaimer:

-

- This is beta software, with no warranty. Use at your own risk. -

-
-
- - - - - - - - diff --git a/truebit-implementation/node_modules/ethers/dist/demo/style.css b/truebit-implementation/node_modules/ethers/dist/demo/style.css deleted file mode 100644 index 8f66d5c8..00000000 --- a/truebit-implementation/node_modules/ethers/dist/demo/style.css +++ /dev/null @@ -1,199 +0,0 @@ -body { - background-color: #eee; - font-family: sans-serif; - font-size: 18px; - margin: 0; -} - -.centerer { - margin-left: 50%; - min-height: 100%; -} - -.centered:before { - box-shadow: -10px 0 15px -10px #999 inset; - content: " "; - height: 100%; - left: -10px; - position: absolute; - top: 0; - width: 10px; -} - -.centered:after { - box-shadow: 10px 0 15px -10px #999 inset; - content: " "; - height: 100%; - right: -10px; - position: absolute; - top: 0; - width: 10px; -} - -.centered { - background-color: #fff; - border-left: 1px solid #888; - border-right: 1px solid #888; - dbox-shadow: -1px 0 15px 0 #999; - margin-left: -370px; - min-height: 100%; - padding: 20px; - position: relative; - width: 700px; -} - -.hidden { - display: none; -} - -p { - text-align: justify; - margin-bottom: 30px; -} -th { - text-align: left; - padding: 0 15px 15px 0; -} -td { - padding: 0 15px 15px 0; -} - -input[type=text] { - border: 1px solid #555; - font-size: 16px; - padding: 10px; - width: 501px; -} - -input[type=password] { - border: 1px solid #555; - font-size: 16px; - padding: 10px; - width: 501px; -} - -input[type=file] { - dbackground: #fff; - border: 1px solid #555; - cursor: pointer; - font-size: 16px; - opacity: 0; - padding: 10px; - position: relative; - dvisibility: hidden; - width: 501px; -} - -input[type=text].readonly { - border: 1px solid #ccc; - color: #888; -} - -.file { - border: 1px solid green; - color: #444; - font-size: 12px; - line-height: 16px; - margin-top: 2px; - padding: 13px 10px 12px; - position: absolute; - text-align: center; - width: 478px; -} - -.file.highlight { - box-shadow: 0px 0px 5px #888; -} - -.clearfix { - clear: both; -} - -.option { - border: 1px solid #999; - box-sizing: border-box; - cursor: pointer; - float: left; - font-size: 16px; - opacity: 0.3; - padding: 10px; - margin-right: 20px; - text-align: center; - transition: opacity 0.1s linear; - width: 110px; -} - -.option span { - font-size: 0.8em; - opacity: 0.5; -} - -.option.selected { - opacity: 1; -} - -.option:hover { - box-shadow: 0px 0px 5px #888; - opacity: 1; -} - -table { - margin-bottom: 40px; -} - -div.activity { - font-family: monospace; - margin-bottom: 40px; -} - -div.activity a { - display: block; - text-decoration: none; -} - -.username { - color: #888; - font-size: 14px; -} - -.submit { - border: 1px solid #555; - box-shadow: 0px 0px 5px #888; - cursor: pointer; - font-size: 16px; - padding: 10px; - text-align: center; - transition: opacity 0.1s linear; - width: 480px; -} - -.submit:hover { - border: 1px solid #999; - box-shadow: 0px 0px 5px #aaa; -} - -.submit:active { - box-shadow: none; -} - -.submit.disable { - box-shadow: none; - opacity: 0.5; -} - -.submit.disable:hover { - border: 1px solid #555; - box-shadow: none; -} - -.submit.disable:active { - box-shadow: none; -} - -.left { - float: left; -} - -.right { - float: right; -} diff --git a/truebit-implementation/node_modules/ethers/dist/ethers.d.ts b/truebit-implementation/node_modules/ethers/dist/ethers.d.ts deleted file mode 100644 index 5ef3219b..00000000 --- a/truebit-implementation/node_modules/ethers/dist/ethers.d.ts +++ /dev/null @@ -1,866 +0,0 @@ -// Generated by dts-bundle v0.7.3 - -declare module 'ethers' { - import * as ethers from 'ethers/ethers'; - export { ethers }; - export * from "ethers/ethers"; -} - -declare module 'ethers/ethers' { - import { platform } from 'ethers/utils/shims'; - import { Contract, Interface } from 'ethers/contracts'; - import * as providers from 'ethers/providers'; - import * as utils from 'ethers/utils'; - import { HDNode, SigningKey, Wallet } from 'ethers/wallet'; - import * as wordlists from 'ethers/wordlists'; - import * as types from 'ethers/utils/types'; - import * as errors from 'ethers/utils/errors'; - import { version } from 'ethers/_version'; - const constants: { - AddressZero: string; - HashZero: string; - NegativeOne: utils.types.BigNumber; - Zero: utils.types.BigNumber; - One: utils.types.BigNumber; - Two: utils.types.BigNumber; - WeiPerEther: utils.types.BigNumber; - }; - export { Wallet, HDNode, SigningKey, Contract, Interface, providers, types, errors, constants, utils, wordlists, platform, version }; -} - -declare module 'ethers/utils/shims' { - export const platform = "node"; -} - -declare module 'ethers/contracts' { - import { Contract } from 'ethers/contracts/contract'; - import { Interface } from 'ethers/contracts/interface'; - export { Contract, Interface }; -} - -declare module 'ethers/providers' { - import { Provider } from 'ethers/providers/provider'; - import { EtherscanProvider } from 'ethers/providers/etherscan-provider'; - import { FallbackProvider } from 'ethers/providers/fallback-provider'; - import { IpcProvider } from 'ethers/providers/ipc-provider'; - import { InfuraProvider } from 'ethers/providers/infura-provider'; - import { JsonRpcProvider, JsonRpcSigner } from 'ethers/providers/json-rpc-provider'; - import { Web3Provider } from 'ethers/providers/web3-provider'; - import { Network } from 'ethers/utils/types'; - function getDefaultProvider(network?: Network | string): Provider; - export { Provider, getDefaultProvider, FallbackProvider, EtherscanProvider, InfuraProvider, JsonRpcProvider, Web3Provider, IpcProvider, JsonRpcSigner }; -} - -declare module 'ethers/utils' { - import { getAddress, getContractAddress, getIcapAddress } from 'ethers/utils/address'; - import { AbiCoder, defaultAbiCoder, formatSignature, formatParamType, parseSignature, parseParamType } from 'ethers/utils/abi-coder'; - import * as base64 from 'ethers/utils/base64'; - import { bigNumberify } from 'ethers/utils/bignumber'; - import { arrayify, concat, hexDataSlice, hexDataLength, hexlify, hexStripZeros, hexZeroPad, joinSignature, padZeros, splitSignature, stripZeros } from 'ethers/utils/bytes'; - import { hashMessage, id, namehash } from 'ethers/utils/hash'; - import { getJsonWalletAddress } from 'ethers/utils/json-wallet'; - import { keccak256 } from 'ethers/utils/keccak256'; - import { sha256 } from 'ethers/utils/sha2'; - import { keccak256 as solidityKeccak256, pack as solidityPack, sha256 as soliditySha256 } from 'ethers/utils/solidity'; - import { randomBytes } from 'ethers/utils/random-bytes'; - import { getNetwork } from 'ethers/utils/networks'; - import { defineFrozen, defineReadOnly, resolveProperties, shallowCopy } from 'ethers/utils/properties'; - import * as RLP from 'ethers/utils/rlp'; - import { verifyMessage } from 'ethers/utils/secp256k1'; - import { parse as parseTransaction, serialize as serializeTransaction } from 'ethers/utils/transaction'; - import { toUtf8Bytes, toUtf8String } from 'ethers/utils/utf8'; - import { formatEther, parseEther, formatUnits, parseUnits } from 'ethers/utils/units'; - import { fetchJson } from 'ethers/utils/web'; - import * as types from 'ethers/utils/types'; - import * as errors from 'ethers/utils/errors'; - const etherSymbol = "\u039E"; - const constants: { - AddressZero: string; - HashZero: string; - NegativeOne: types.BigNumber; - Zero: types.BigNumber; - One: types.BigNumber; - Two: types.BigNumber; - WeiPerEther: types.BigNumber; - }; - export { AbiCoder, defaultAbiCoder, formatSignature, formatParamType, parseSignature, parseParamType, constants, types, RLP, fetchJson, getNetwork, defineReadOnly, defineFrozen, resolveProperties, shallowCopy, etherSymbol, arrayify, concat, padZeros, stripZeros, base64, bigNumberify, hexlify, hexStripZeros, hexZeroPad, hexDataLength, hexDataSlice, toUtf8Bytes, toUtf8String, hashMessage, namehash, id, getAddress, getIcapAddress, getContractAddress, formatEther, parseEther, formatUnits, parseUnits, keccak256, sha256, randomBytes, solidityPack, solidityKeccak256, soliditySha256, splitSignature, joinSignature, parseTransaction, serializeTransaction, getJsonWalletAddress, verifyMessage, errors }; -} - -declare module 'ethers/wallet' { - import { Wallet } from 'ethers/wallet/wallet'; - import * as HDNode from 'ethers/wallet/hdnode'; - import { SigningKey } from 'ethers/wallet/signing-key'; - export { HDNode, SigningKey, Wallet }; -} - -declare module 'ethers/wordlists' { - import { Wordlist } from 'ethers/wordlists/wordlist'; - const en: Wordlist; - const ko: Wordlist; - const it: Wordlist; - const ja: Wordlist; - const zh: Wordlist; - const zh_cn: Wordlist; - const zh_tw: Wordlist; - export { en, it, ja, ko, zh, zh_cn, zh_tw }; -} - -declare module 'ethers/utils/types' { - export type Arrayish = string | ArrayLike; - export abstract class BigNumber { - abstract fromTwos(value: number): BigNumber; - abstract toTwos(value: number): BigNumber; - abstract add(other: BigNumberish): BigNumber; - abstract sub(other: BigNumberish): BigNumber; - abstract div(other: BigNumberish): BigNumber; - abstract mul(other: BigNumberish): BigNumber; - abstract mod(other: BigNumberish): BigNumber; - abstract pow(other: BigNumberish): BigNumber; - abstract maskn(value: number): BigNumber; - abstract eq(other: BigNumberish): boolean; - abstract lt(other: BigNumberish): boolean; - abstract lte(other: BigNumberish): boolean; - abstract gt(other: BigNumberish): boolean; - abstract gte(other: BigNumberish): boolean; - abstract isZero(): boolean; - abstract toNumber(): number; - abstract toString(): string; - abstract toHexString(): string; - } - export type BigNumberish = BigNumber | string | number | Arrayish; - export type ConnectionInfo = { - url: string; - user?: string; - password?: string; - allowInsecure?: boolean; - }; - export interface OnceBlockable { - once(eventName: "block", handler: () => void): void; - } - export type PollOptions = { - timeout?: number; - floor?: number; - ceiling?: number; - interval?: number; - onceBlock?: OnceBlockable; - }; - export type SupportedAlgorithms = 'sha256' | 'sha512'; - export interface Signature { - r: string; - s: string; - recoveryParam?: number; - v?: number; - } - export type Network = { - name: string; - chainId: number; - ensAddress?: string; - }; - export type Networkish = Network | string | number; - export type CoerceFunc = (type: string, value: any) => any; - export type ParamType = { - name?: string; - type: string; - indexed?: boolean; - components?: Array; - }; - export type EventFragment = { - type: string; - name: string; - anonymous: boolean; - inputs: Array; - }; - export type FunctionFragment = { - type: string; - name: string; - constant: boolean; - inputs: Array; - outputs: Array; - payable: boolean; - stateMutability: string; - }; - export type UnsignedTransaction = { - to?: string; - nonce?: number; - gasLimit?: BigNumberish; - gasPrice?: BigNumberish; - data?: Arrayish; - value?: BigNumberish; - chainId?: number; - }; - export interface Transaction { - hash?: string; - to?: string; - from?: string; - nonce: number; - gasLimit: BigNumber; - gasPrice: BigNumber; - data: string; - value: BigNumber; - chainId: number; - r?: string; - s?: string; - v?: number; - } - export type BlockTag = string | number; - export interface Block { - hash: string; - parentHash: string; - number: number; - timestamp: number; - nonce: string; - difficulty: number; - gasLimit: BigNumber; - gasUsed: BigNumber; - miner: string; - extraData: string; - transactions: Array; - } - export type Filter = { - fromBlock?: BlockTag; - toBlock?: BlockTag; - address?: string; - topics?: Array>; - }; - export interface Log { - blockNumber?: number; - blockHash?: string; - transactionIndex?: number; - removed?: boolean; - transactionLogIndex?: number; - address: string; - data: string; - topics: Array; - transactionHash?: string; - logIndex?: number; - } - export interface TransactionReceipt { - contractAddress?: string; - transactionIndex?: number; - root?: string; - gasUsed?: BigNumber; - logsBloom?: string; - blockHash?: string; - transactionHash?: string; - logs?: Array; - blockNumber?: number; - cumulativeGasUsed?: BigNumber; - byzantium: boolean; - status?: number; - } - export type TransactionRequest = { - to?: string | Promise; - from?: string | Promise; - nonce?: number | string | Promise; - gasLimit?: BigNumberish | Promise; - gasPrice?: BigNumberish | Promise; - data?: Arrayish | Promise; - value?: BigNumberish | Promise; - chainId?: number | Promise; - }; - export interface TransactionResponse extends Transaction { - blockNumber?: number; - blockHash?: string; - timestamp?: number; - from: string; - raw?: string; - wait: (timeout?: number) => Promise; - } - export abstract class Indexed { - readonly hash: string; - } - export interface DeployDescription { - readonly inputs: Array; - readonly payable: boolean; - encode(bytecode: string, params: Array): string; - } - export interface FunctionDescription { - readonly type: "call" | "transaction"; - readonly name: string; - readonly signature: string; - readonly sighash: string; - readonly inputs: Array; - readonly outputs: Array; - readonly payable: boolean; - encode(params: Array): string; - decode(data: string): any; - } - export interface EventDescription { - readonly name: string; - readonly signature: string; - readonly inputs: Array; - readonly anonymous: boolean; - readonly topic: string; - encodeTopics(params: Array): Array; - decode(data: string, topics?: Array): any; - } - export interface LogDescription { - readonly name: string; - readonly signature: string; - readonly topic: string; - readonly values: Array; - } - export interface TransactionDescription { - readonly name: string; - readonly args: Array; - readonly signature: string; - readonly sighash: string; - readonly decode: (data: string) => any; - readonly value: BigNumber; - } - export type ContractFunction = (...params: Array) => Promise; - export type EventFilter = { - address?: string; - topics?: Array; - }; - export interface Event extends Log { - args: Array; - decode: (data: string, topics?: Array) => any; - event: string; - eventSignature: string; - removeListener: () => void; - getBlock: () => Promise; - getTransaction: () => Promise; - getTransactionReceipt: () => Promise; - } - export type EventType = string | Array | Filter; - export type Listener = (...args: Array) => void; - /** - * Provider - * - * Note: We use an abstract class so we can use instanceof to determine if an - * object is a Provider. - */ - export abstract class MinimalProvider implements OnceBlockable { - abstract getNetwork(): Promise; - abstract getBlockNumber(): Promise; - abstract getGasPrice(): Promise; - abstract getBalance(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise; - abstract getTransactionCount(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise; - abstract getCode(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise; - abstract getStorageAt(addressOrName: string | Promise, position: BigNumberish | Promise, blockTag?: BlockTag | Promise): Promise; - abstract sendTransaction(signedTransaction: string | Promise): Promise; - abstract call(transaction: TransactionRequest): Promise; - abstract estimateGas(transaction: TransactionRequest): Promise; - abstract getBlock(blockHashOrBlockTag: BlockTag | string | Promise): Promise; - abstract getTransaction(transactionHash: string): Promise; - abstract getTransactionReceipt(transactionHash: string): Promise; - abstract getLogs(filter: Filter): Promise>; - abstract resolveName(name: string | Promise): Promise; - abstract lookupAddress(address: string | Promise): Promise; - abstract on(eventName: EventType, listener: Listener): MinimalProvider; - abstract once(eventName: EventType, listener: Listener): MinimalProvider; - abstract listenerCount(eventName?: EventType): number; - abstract listeners(eventName: EventType): Array; - abstract removeAllListeners(eventName: EventType): MinimalProvider; - abstract removeListener(eventName: EventType, listener: Listener): MinimalProvider; - abstract waitForTransaction(transactionHash: string, timeout?: number): Promise; - } - export type AsyncProvider = { - isMetaMask?: boolean; - host?: string; - path?: string; - sendAsync: (request: any, callback: (error: any, response: any) => void) => void; - }; - export type ProgressCallback = (percent: number) => void; - export type EncryptOptions = { - iv?: Arrayish; - entropy?: Arrayish; - mnemonic?: string; - path?: string; - client?: string; - salt?: Arrayish; - uuid?: string; - scrypt?: { - N?: number; - r?: number; - p?: number; - }; - }; - /** - * Signer - * - * Note: We use an abstract class so we can use instanceof to determine if an - * object is a Signer. - */ - export abstract class Signer { - provider?: MinimalProvider; - abstract getAddress(): Promise; - abstract signMessage(message: Arrayish | string): Promise; - abstract sendTransaction(transaction: TransactionRequest): Promise; - } - export abstract class HDNode { - readonly privateKey: string; - readonly publicKey: string; - readonly mnemonic: string; - readonly path: string; - readonly chainCode: string; - readonly index: number; - readonly depth: number; - abstract derivePath(path: string): HDNode; - } - export interface Wordlist { - locale: string; - getWord(index: number): string; - getWordIndex(word: string): number; - split(mnemonic: string): Array; - join(words: Array): string; - } -} - -declare module 'ethers/utils/errors' { - export const UNKNOWN_ERROR = "UNKNOWN_ERROR"; - export const NOT_IMPLEMENTED = "NOT_IMPLEMENTED"; - export const MISSING_NEW = "MISSING_NEW"; - export const CALL_EXCEPTION = "CALL_EXCEPTION"; - export const INVALID_ARGUMENT = "INVALID_ARGUMENT"; - export const MISSING_ARGUMENT = "MISSING_ARGUMENT"; - export const UNEXPECTED_ARGUMENT = "UNEXPECTED_ARGUMENT"; - export const NUMERIC_FAULT = "NUMERIC_FAULT"; - export const UNSUPPORTED_OPERATION = "UNSUPPORTED_OPERATION"; - export function throwError(message: string, code: string, params: any): never; - export function checkNew(self: any, kind: any): void; - export function checkArgumentCount(count: number, expectedCount: number, suffix?: string): void; - export function setCensorship(censorship: boolean, permanent?: boolean): void; -} - -declare module 'ethers/_version' { - export const version = "4.0.0-beta.0"; -} - -declare module 'ethers/contracts/contract' { - import { Interface } from 'ethers/contracts/interface'; - import { Signer, MinimalProvider, BigNumber, ContractFunction, EventFilter, ParamType, Listener, TransactionRequest, TransactionResponse } from 'ethers/utils/types'; - interface Bucket { - [name: string]: T; - } - export class Contract { - readonly address: string; - readonly interface: Interface; - readonly signer: Signer; - readonly provider: MinimalProvider; - readonly estimate: Bucket<(...params: Array) => Promise>; - readonly functions: Bucket; - readonly filters: Bucket<(...params: Array) => EventFilter>; - readonly [name: string]: ContractFunction | any; - readonly addressPromise: Promise; - readonly deployTransaction: TransactionResponse; - constructor(addressOrName: string, contractInterface: Array | string | Interface, signerOrProvider: Signer | MinimalProvider); - deployed(): Promise; - fallback(overrides?: TransactionRequest): Promise; - connect(signerOrProvider: Signer | MinimalProvider): Contract; - attach(addressOrName: string): Contract; - deploy(bytecode: string, ...args: Array): Promise; - on(event: EventFilter | string, listener: Listener): Contract; - once(event: EventFilter | string, listener: Listener): Contract; - addEventLisener(eventName: EventFilter | string, listener: Listener): Contract; - emit(eventName: EventFilter | string, ...args: Array): boolean; - listenerCount(eventName?: EventFilter | string): number; - listeners(eventName: EventFilter | string): Array; - removeAllListeners(eventName: EventFilter | string): Contract; - removeListener(eventName: any, listener: Listener): Contract; - } - export {}; -} - -declare module 'ethers/contracts/interface' { - import { BigNumberish, DeployDescription as _DeployDescription, EventDescription as _EventDescription, FunctionDescription as _FunctionDescription, LogDescription as _LogDescription, TransactionDescription as _TransactionDescription, EventFragment, FunctionFragment, ParamType } from 'ethers/utils/types'; - export class Interface { - readonly abi: Array; - readonly functions: { - [name: string]: _FunctionDescription; - }; - readonly events: { - [name: string]: _EventDescription; - }; - readonly deployFunction: _DeployDescription; - constructor(abi: Array | string); - parseTransaction(tx: { - data: string; - value?: BigNumberish; - }): _TransactionDescription; - parseLog(log: { - topics: Array; - data: string; - }): _LogDescription; - } -} - -declare module 'ethers/providers/provider' { - import { BigNumber, BigNumberish, Block, BlockTag, EventType, Filter, Listener, Log, MinimalProvider, Network, Networkish, Transaction, TransactionReceipt, TransactionRequest, TransactionResponse } from 'ethers/utils/types'; - export class Provider extends MinimalProvider { - protected _emitted: any; - /** - * ready - * - * A Promise that resolves only once the provider is ready. - * - * Sub-classes that call the super with a network without a chainId - * MUST set this. Standard named networks have a known chainId. - * - */ - protected ready: Promise; - constructor(network: Networkish | Promise); - resetEventsBlock(blockNumber: number): void; - readonly network: Network; - getNetwork(): Promise; - readonly blockNumber: number; - polling: boolean; - pollingInterval: number; - waitForTransaction(transactionHash: string, timeout?: number): Promise; - getBlockNumber(): Promise; - getGasPrice(): Promise; - getBalance(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise; - getTransactionCount(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise; - getCode(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise; - getStorageAt(addressOrName: string | Promise, position: BigNumberish | Promise, blockTag?: BlockTag | Promise): Promise; - sendTransaction(signedTransaction: string | Promise): Promise; - _wrapTransaction(tx: Transaction, hash?: string): TransactionResponse; - call(transaction: TransactionRequest): Promise; - estimateGas(transaction: TransactionRequest): Promise; - getBlock(blockHashOrBlockTag: BlockTag | string | Promise): Promise; - getTransaction(transactionHash: string): Promise; - getTransactionReceipt(transactionHash: string): Promise; - getLogs(filter: Filter): Promise>; - getEtherPrice(): Promise; - resolveName(name: string | Promise): Promise; - lookupAddress(address: string | Promise): Promise; - static checkTransactionResponse(transaction: any): TransactionResponse; - doPoll(): void; - perform(method: string, params: any): Promise; - protected _startPending(): void; - protected _stopPending(): void; - on(eventName: EventType, listener: Listener): Provider; - once(eventName: EventType, listener: Listener): Provider; - addEventListener(eventName: EventType, listener: Listener): Provider; - emit(eventName: EventType, ...args: Array): boolean; - listenerCount(eventName?: EventType): number; - listeners(eventName: EventType): Array; - removeAllListeners(eventName: EventType): Provider; - removeListener(eventName: EventType, listener: Listener): Provider; - } -} - -declare module 'ethers/providers/etherscan-provider' { - import { Provider } from 'ethers/providers/provider'; - import { BlockTag, Networkish, TransactionResponse } from 'ethers/utils/types'; - export class EtherscanProvider extends Provider { - readonly baseUrl: string; - readonly apiKey: string; - constructor(network?: Networkish, apiKey?: string); - perform(method: string, params: any): Promise; - getHistory(addressOrName: string | Promise, startBlock?: BlockTag, endBlock?: BlockTag): Promise>; - } -} - -declare module 'ethers/providers/fallback-provider' { - import { Provider } from 'ethers/providers/provider'; - export class FallbackProvider extends Provider { - constructor(providers: Array); - readonly providers: Array; - perform(method: string, params: any): any; - } -} - -declare module 'ethers/providers/ipc-provider' { - import { JsonRpcProvider } from 'ethers/providers/json-rpc-provider'; - import { Networkish } from 'ethers/utils/types'; - export class IpcProvider extends JsonRpcProvider { - readonly path: string; - constructor(path: string, network?: Networkish); - send(method: string, params: any): Promise; - } -} - -declare module 'ethers/providers/infura-provider' { - import { JsonRpcProvider, JsonRpcSigner } from 'ethers/providers/json-rpc-provider'; - import { Networkish } from 'ethers/utils/types'; - export class InfuraProvider extends JsonRpcProvider { - readonly apiAccessToken: string; - constructor(network?: Networkish, apiAccessToken?: string); - protected _startPending(): void; - getSigner(address?: string): JsonRpcSigner; - listAccounts(): Promise>; - } -} - -declare module 'ethers/providers/json-rpc-provider' { - import { Provider } from 'ethers/providers/provider'; - import { Arrayish, BigNumber, BlockTag, ConnectionInfo, Networkish, Signer, TransactionRequest, TransactionResponse } from 'ethers/utils/types'; - export class JsonRpcSigner extends Signer { - readonly provider: JsonRpcProvider; - constructor(provider: JsonRpcProvider, address?: string); - readonly address: string; - getAddress(): Promise; - getBalance(blockTag?: BlockTag): Promise; - getTransactionCount(blockTag?: BlockTag): Promise; - sendTransaction(transaction: TransactionRequest): Promise; - signMessage(message: Arrayish | string): Promise; - unlock(password: string): Promise; - } - export class JsonRpcProvider extends Provider { - readonly connection: ConnectionInfo; - constructor(url?: ConnectionInfo | string, network?: Networkish); - getSigner(address?: string): JsonRpcSigner; - listAccounts(): Promise>; - send(method: string, params: any): Promise; - perform(method: string, params: any): Promise; - protected _startPending(): void; - protected _stopPending(): void; - static hexlifyTransaction(transaction: TransactionRequest): any; - } -} - -declare module 'ethers/providers/web3-provider' { - import { JsonRpcProvider } from 'ethers/providers/json-rpc-provider'; - import { AsyncProvider, Networkish } from 'ethers/utils/types'; - export class Web3Provider extends JsonRpcProvider { - readonly _web3Provider: AsyncProvider; - constructor(web3Provider: AsyncProvider, network?: Networkish); - send(method: string, params: any): Promise; - } -} - -declare module 'ethers/utils/address' { - import { Arrayish, BigNumber } from 'ethers/utils/types'; - export function getAddress(address: string): string; - export function getIcapAddress(address: string): string; - export function getContractAddress(transaction: { - from: string; - nonce: Arrayish | BigNumber | number; - }): string; -} - -declare module 'ethers/utils/abi-coder' { - import { Arrayish, CoerceFunc, EventFragment, FunctionFragment, ParamType } from 'ethers/utils/types'; - export const defaultCoerceFunc: CoerceFunc; - export function parseParamType(type: string): ParamType; - export function formatParamType(paramType: ParamType): string; - export function formatSignature(fragment: EventFragment | FunctionFragment): string; - export function parseSignature(fragment: string): EventFragment | FunctionFragment; - export class AbiCoder { - readonly coerceFunc: CoerceFunc; - constructor(coerceFunc?: CoerceFunc); - encode(types: Array, values: Array): string; - decode(types: Array, data: Arrayish): Array; - } - export const defaultAbiCoder: AbiCoder; -} - -declare module 'ethers/utils/base64' { - import { Arrayish } from 'ethers/utils/types'; - export function decode(textData: string): Uint8Array; - export function encode(data: Arrayish): string; -} - -declare module 'ethers/utils/bignumber' { - import { BigNumber as _BigNumber, BigNumberish } from 'ethers/utils/types'; - export function bigNumberify(value: BigNumberish): _BigNumber; - export const ConstantNegativeOne: _BigNumber; - export const ConstantZero: _BigNumber; - export const ConstantOne: _BigNumber; - export const ConstantTwo: _BigNumber; - export const ConstantWeiPerEther: _BigNumber; -} - -declare module 'ethers/utils/bytes' { - /** - * Conversion Utilities - * - */ - import { Arrayish, BigNumber, Signature } from 'ethers/utils/types'; - export const AddressZero = "0x0000000000000000000000000000000000000000"; - export const HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000"; - export function isArrayish(value: any): boolean; - export function arrayify(value: Arrayish | BigNumber): Uint8Array; - export function concat(objects: Array): Uint8Array; - export function stripZeros(value: Arrayish): Uint8Array; - export function padZeros(value: Arrayish, length: number): Uint8Array; - export function isHexString(value: any, length?: number): boolean; - export function hexlify(value: Arrayish | BigNumber | number): string; - export function hexDataLength(data: string): number; - export function hexDataSlice(data: string, offset: number, length?: number): string; - export function hexStripZeros(value: string): string; - export function hexZeroPad(value: string, length: number): string; - export function splitSignature(signature: Arrayish | Signature): Signature; - export function joinSignature(signature: Signature): string; -} - -declare module 'ethers/utils/hash' { - import { Arrayish } from 'ethers/utils/types'; - export function namehash(name: string): string; - export function id(text: string): string; - export function hashMessage(message: Arrayish | string): string; -} - -declare module 'ethers/utils/json-wallet' { - export function isCrowdsaleWallet(json: string): boolean; - export function isSecretStorageWallet(json: string): boolean; - export function getJsonWalletAddress(json: string): string; -} - -declare module 'ethers/utils/keccak256' { - import { Arrayish } from 'ethers/utils/types'; - export function keccak256(data: Arrayish): string; -} - -declare module 'ethers/utils/sha2' { - import { Arrayish } from 'ethers/utils/types'; - export function sha256(data: Arrayish): string; - export function sha512(data: Arrayish): string; -} - -declare module 'ethers/utils/solidity' { - export function pack(types: Array, values: Array): string; - export function keccak256(types: Array, values: Array): string; - export function sha256(types: Array, values: Array): string; -} - -declare module 'ethers/utils/random-bytes' { - export function randomBytes(length: number): Uint8Array; -} - -declare module 'ethers/utils/networks' { - import { Network, Networkish } from 'ethers/utils/types'; - /** - * getNetwork - * - * Converts a named common networks or chain ID (network ID) to a Network - * and verifies a network is a valid Network.. - */ - export function getNetwork(network: Networkish): Network; -} - -declare module 'ethers/utils/properties' { - export function defineReadOnly(object: any, name: string, value: any): void; - export function defineFrozen(object: any, name: string, value: any): void; - export function resolveProperties(object: any): Promise; - export function shallowCopy(object: any): any; - export function jsonCopy(object: any): any; -} - -declare module 'ethers/utils/rlp' { - import { Arrayish } from 'ethers/utils/types'; - export function encode(object: any): string; - export function decode(data: Arrayish): any; -} - -declare module 'ethers/utils/secp256k1' { - import { Arrayish, Signature } from 'ethers/utils/types'; - export class KeyPair { - readonly privateKey: string; - readonly publicKey: string; - readonly compressedPublicKey: string; - readonly publicKeyBytes: Uint8Array; - constructor(privateKey: Arrayish); - sign(digest: Arrayish): Signature; - } - export function recoverPublicKey(digest: Arrayish, signature: Signature): string; - export function computePublicKey(key: Arrayish, compressed?: boolean): string; - export function recoverAddress(digest: Arrayish, signature: Signature): string; - export function computeAddress(key: string): string; - export function verifyMessage(message: Arrayish | string, signature: Signature | string): string; - export const N: string; -} - -declare module 'ethers/utils/transaction' { - import { Arrayish, Signature, Transaction, UnsignedTransaction } from 'ethers/utils/types'; - export function serialize(transaction: UnsignedTransaction, signature?: Arrayish | Signature): string; - export function parse(rawTransaction: Arrayish): Transaction; -} - -declare module 'ethers/utils/utf8' { - import { Arrayish } from 'ethers/utils/types'; - export enum UnicodeNormalizationForm { - current = "", - NFC = "NFC", - NFD = "NFD", - NFKC = "NFKC", - NFKD = "NFKD" - } - export function toUtf8Bytes(str: string, form?: UnicodeNormalizationForm): Uint8Array; - export function toUtf8String(bytes: Arrayish): string; -} - -declare module 'ethers/utils/units' { - import { BigNumber, BigNumberish } from 'ethers/utils/types'; - export function formatUnits(value: BigNumberish, unitType?: string | number, options?: any): string; - export function parseUnits(value: string, unitType?: string | number): BigNumber; - export function formatEther(wei: BigNumberish, options: any): string; - export function parseEther(ether: string): BigNumber; -} - -declare module 'ethers/utils/web' { - import { ConnectionInfo, PollOptions } from 'ethers/utils/types'; - export function fetchJson(connection: string | ConnectionInfo, json: string, processFunc: (value: any) => any): Promise; - export function poll(func: () => Promise, options?: PollOptions): Promise; -} - -declare module 'ethers/wallet/wallet' { - import { SigningKey } from 'ethers/wallet/signing-key'; - import { Arrayish, BigNumber, BlockTag, HDNode, MinimalProvider, ProgressCallback, Signer, TransactionRequest, TransactionResponse, Wordlist } from 'ethers/utils/types'; - export class Wallet extends Signer { - readonly provider: MinimalProvider; - constructor(privateKey: SigningKey | HDNode | Arrayish, provider?: MinimalProvider); - readonly address: string; - readonly mnemonic: string; - readonly path: string; - readonly privateKey: string; - /** - * Create a new instance of this Wallet connected to provider. - */ - connect(provider: MinimalProvider): Wallet; - getAddress(): Promise; - sign(transaction: TransactionRequest): Promise; - signMessage(message: Arrayish | string): Promise; - getBalance(blockTag?: BlockTag): Promise; - getTransactionCount(blockTag?: BlockTag): Promise; - sendTransaction(transaction: TransactionRequest): Promise; - encrypt(password: Arrayish | string, options: any, progressCallback: ProgressCallback): Promise; - /** - * Static methods to create Wallet instances. - */ - static createRandom(options?: any): Wallet; - static fromEncryptedJson(json: string, password: Arrayish, progressCallback: ProgressCallback): Promise; - static fromMnemonic(mnemonic: string, path?: string, wordlist?: Wordlist): Wallet; - } -} - -declare module 'ethers/wallet/hdnode' { - import { Arrayish, HDNode as _HDNode, Wordlist } from 'ethers/utils/types'; - export const defaultPath = "m/44'/60'/0'/0/0"; - export function fromMnemonic(mnemonic: string, wordlist?: Wordlist): _HDNode; - export function fromSeed(seed: Arrayish): _HDNode; - export function mnemonicToSeed(mnemonic: string, password?: string): string; - export function mnemonicToEntropy(mnemonic: string, wordlist?: Wordlist): string; - export function entropyToMnemonic(entropy: Arrayish, wordlist?: Wordlist): string; - export function isValidMnemonic(mnemonic: string, wordlist?: Wordlist): boolean; -} - -declare module 'ethers/wallet/signing-key' { - import { Arrayish, HDNode, Signature } from 'ethers/utils/types'; - export class SigningKey { - readonly privateKey: string; - readonly publicKey: string; - readonly address: string; - readonly mnemonic: string; - readonly path: string; - constructor(privateKey: Arrayish | HDNode); - signDigest(digest: Arrayish): Signature; - } -} - -declare module 'ethers/wordlists/wordlist' { - import { Wordlist as _Wordlist } from 'ethers/utils/types'; - export function check(wordlist: _Wordlist): string; - export abstract class Wordlist implements _Wordlist { - locale: string; - constructor(locale: string); - abstract getWord(index: number): string; - abstract getWordIndex(word: string): number; - split(mnemonic: string): Array; - join(words: Array): string; - } - export function register(lang: Wordlist, name?: string): void; -} - diff --git a/truebit-implementation/node_modules/ethers/dist/ethers.d.ts.map b/truebit-implementation/node_modules/ethers/dist/ethers.d.ts.map deleted file mode 100644 index 95d509f5..00000000 --- a/truebit-implementation/node_modules/ethers/dist/ethers.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["src.ts/utils/keccak256.ts","src.ts/utils/properties.ts","src.ts/utils/errors.ts","src.ts/utils/secp256k1.ts","src.ts/utils/bytes.ts","src.ts/utils/bignumber.ts","src.ts/utils/rlp.ts","src.ts/utils/address.ts","src.ts/utils/utf8.ts","src.ts/utils/abi-coder.ts","src.ts/contracts/interface.ts","src.ts/wordlists/wordlist.ts","src.ts/wordlists/lang-en.ts","src.ts/utils/pbkdf2.ts","src.ts/utils/hmac.ts","src.ts/utils/sha2.ts","src.ts/wallet/hdnode.ts","src.ts/utils/random-bytes.ts","src.ts/wallet/signing-key.ts","src.ts/wallet/secret-storage.ts","src.ts/utils/hash.ts","src.ts/utils/transaction.ts","src.ts/wallet/wallet.ts","src.ts/providers/networks.ts","src.ts/providers/provider.ts","src.ts/contracts/contract.ts","src.ts/contracts/index.ts","src.ts/utils/base64.ts","src.ts/utils/web.ts","src.ts/providers/etherscan-provider.ts","src.ts/providers/fallback-provider.ts","src.ts/providers/json-rpc-provider.ts","src.ts/providers/ipc-provider.ts","src.ts/providers/infura-provider.ts","src.ts/providers/web3-provider.ts","src.ts/providers/index.ts","src.ts/utils/solidity.ts","src.ts/utils/units.ts","src.ts/utils/index.ts","src.ts/wallet/index.ts","src.ts/index.ts","src.ts/wordlists/lang-ja.ts","src.ts/wordlists/lang-ko.ts","src.ts/wordlists/lang-it.ts","src.ts/wordlists/lang-zh.ts","src.ts/wordlists/index.ts","src.ts/utils/shims.ts"],"names":[],"mappings":";IAIA,OAAO,EAAY,QAAQ,EAAE,oBAAgB;IAE7C,MAAM,oBAAoB,MAAM,QAAQ,GAAG,MAAM,CAEhD;;;ICND,MAAM,yBAAyB,QAAQ,GAAG,EAAE,MAAM,MAAM,EAAE,OAAO,GAAG,GAAG,IAAI,CAM1E;IAED,MAAM,uBAAuB,QAAQ,GAAG,EAAE,MAAM,MAAM,EAAE,OAAO,GAAG,GAAG,IAAI,CAMxE;IAED,MAAM,4BAA4B,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAoB3D;IAED,MAAM,sBAAsB,QAAQ,GAAG,GAAG,GAAG,CAI5C;IAED,MAAM,mBAAmB,QAAQ,GAAG,GAAG,GAAG,CAEzC;;;IC7CD,MAAM,CAAC,MAAM,aAAa,kBAAkB,CAAC;IAG7C,MAAM,CAAC,MAAM,eAAe,oBAAoB,CAAC;IAIjD,MAAM,CAAC,MAAM,WAAW,gBAAgB,CAAC;IAGzC,MAAM,CAAC,MAAM,cAAc,mBAAmB,CAAC;IAW/C,MAAM,CAAC,MAAM,gBAAgB,qBAAqB,CAAC;IAMnD,MAAM,CAAC,MAAM,gBAAgB,qBAAqB,CAAC;IAKnD,MAAM,CAAC,MAAM,mBAAmB,wBAAwB,CAAC;IAKzD,MAAM,CAAC,MAAM,aAAa,kBAAkB,CAAC;IAK7C,MAAM,CAAC,MAAM,qBAAqB,0BAA0B,CAAC;IAG7D,MAAM,qBAAqB,SAAS,MAAM,EAAE,MAAM,MAAM,EAAE,QAAQ,GAAG,GAAG,KAAK,CA2B5E;IAED,MAAM,mBAAmB,MAAM,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,CAInD;;;IC3ED,OAAO,EAAY,QAAQ,EAAuB,oBAAgB;IAMlE,MAAM,CAAC,MAAM,CAAC,QAA8B,CAAC;IAE7C,MAAM,WAAW,SAAS;QACtB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,CAAC,CAAC,EAAE,MAAM,CAAC;KACd;IAED,MAAM;QAEF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAE5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QAErC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC;oBAExB,YAAY,QAAQ;QAShC,IAAI,CAAC,QAAQ,QAAQ,GAAG,SAAS;KAWpC;IAED,MAAM,2BAA2B,QAAQ,QAAQ,EAAE,WAAW,SAAS,GAAG,MAAM,CAM/E;IAED,MAAM,2BAA2B,KAAK,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAsB5E;IAED,MAAM,yBAAyB,QAAQ,QAAQ,EAAE,WAAW,SAAS,GAAG,MAAM,CAE7E;IAED,MAAM,yBAAyB,KAAK,MAAM,GAAG,MAAM,CAIlD;;;IC5FD;;;OAGG;IAEH,OAAO,EAAE,SAAS,EAAE,wBAAoB;IACxC,OAAO,EAAE,SAAS,EAAE,wBAAoB;IAMxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAkBlD,MAAM,qBAAqB,OAAO,GAAG,GAAG,OAAO,CAa9C;IAED,MAAM,mBAAmB,OAAO,QAAQ,GAAG,SAAS,GAAG,UAAU,CAuChE;IAED,MAAM,iBAAiB,SAAS,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,CAiB3D;IAED,MAAM,qBAAqB,OAAO,QAAQ,GAAG,UAAU,CAetD;IAED,MAAM,mBAAmB,OAAO,QAAQ,EAAE,QAAQ,MAAM,GAAG,UAAU,CAQpE;IAGD,MAAM,sBAAsB,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAMhE;IAID,MAAM,kBAAkB,OAAO,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAqDpE;IAED,MAAM,wBAAwB,MAAM,MAAM,UAKzC;IAED,MAAM,uBAAuB,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAclF;IAED,MAAM,wBAAwB,OAAO,MAAM,GAAG,MAAM,CAQnD;IAED,MAAM,qBAAqB,OAAO,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,CAShE;IAED,MAAM,yBAAyB,WAAW,QAAQ,GAAG,SAAS,CAiB7D;IAED,MAAM,wBAAwB,WAAW,SAAS,GAAG,MAAM,CAM1D;;;IC/PD,OAAO,EAAE,QAAQ,EAAoC,oBAAgB;IAQrE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAUlE,MAAM;QACF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;oBAEhB,OAAO,YAAY;QAqC/B,QAAQ,CAAC,OAAO,MAAM,GAAG,SAAS;QAIlC,MAAM,CAAC,OAAO,MAAM,GAAG,SAAS;QAIhC,GAAG,CAAC,OAAO,YAAY,GAAG,SAAS;QAInC,GAAG,CAAC,OAAO,YAAY,GAAG,SAAS;QAInC,GAAG,CAAC,OAAO,YAAY,GAAG,SAAS;QAQnC,GAAG,CAAC,OAAO,YAAY,GAAG,SAAS;QAInC,GAAG,CAAC,OAAO,YAAY,GAAG,SAAS;QAInC,GAAG,CAAC,OAAO,YAAY,GAAG,SAAS;QAInC,KAAK,CAAC,OAAO,MAAM,GAAG,SAAS;QAI/B,EAAE,CAAC,OAAO,YAAY,GAAG,OAAO;QAIhC,EAAE,CAAC,OAAO,YAAY,GAAG,OAAO;QAIhC,GAAG,CAAC,OAAO,YAAY,GAAG,OAAO;QAIjC,EAAE,CAAC,OAAO,YAAY,GAAG,OAAO;QAIhC,GAAG,CAAC,OAAO,YAAY,GAAG,OAAO;QAIjC,MAAM,IAAI,OAAO;QAIjB,QAAQ,IAAI,MAAM;QASlB,QAAQ,IAAI,MAAM;QAIlB,WAAW,IAAI,MAAM;KAKxB;IAED,MAAM,sBAAsB,OAAO,GAAG,GAAG,OAAO,CAE/C;IAED,MAAM,uBAAuB,OAAO,YAAY,GAAG,SAAS,CAG3D;IAED,MAAM,CAAC,MAAM,mBAAmB,EAAE,SAA4B,CAAC;IAC/D,MAAM,CAAC,MAAM,YAAY,EAAE,SAA2B,CAAC;IACvD,MAAM,CAAC,MAAM,WAAW,EAAE,SAA2B,CAAC;IACtD,MAAM,CAAC,MAAM,WAAW,EAAE,SAA2B,CAAC;IACtD,MAAM,CAAC,MAAM,mBAAmB,EAAE,SAA+C,CAAC;;;ICpKlF,OAAO,EAAY,QAAQ,EAAW,oBAAgB;IAsDtD,MAAM,iBAAiB,QAAQ,GAAG,GAAG,MAAM,CAE1C;IA4ED,MAAM,iBAAiB,MAAM,QAAQ,GAAG,GAAG,CAO1C;;;ICzID,OAAO,EAAE,SAAS,EAAE,wBAAoB;IACxC,OAAO,EAAY,QAAQ,EAAuB,oBAAgB;IA0ElE,MAAM,qBAAqB,SAAS,MAAM,GAAG,MAAM,CAoClD;IAED,MAAM,yBAAyB,SAAS,MAAM,GAAG,MAAM,CAItD;IAGD,MAAM,6BAA6B,aAAa;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;KAAE,UAQrG;;;ICnID,OAAO,EAAY,QAAQ,EAAE,oBAAgB;IAE7C,MAAM,MAAM,wBAAwB;QAChC,OAAO,KAAM;QACb,GAAG,QAAa;QAChB,GAAG,QAAa;QAChB,IAAI,SAAa;QACjB,IAAI,SAAa;KACpB;IAGD,MAAM,sBAAsB,KAAK,MAAM,EAAE,OAAM,wBAA2D,GAAG,UAAU,CA8BtH;IAID,MAAM,uBAAuB,OAAO,QAAQ,GAAG,MAAM,CA0EpD;;;ICnHD,OAAO,EAAY,QAAQ,EAA6B,oBAAgB;IAWxE,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IAC3D,MAAM,MAAM,SAAS,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC;IAEpG,MAAM,CAAC,MAAM,iBAAiB,EAAE,UAI/B,CAAA;IA0JD,MAAM,MAAM,aAAa,GAAG;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAC;QAEb,SAAS,EAAE,OAAO,CAAC;QAEnB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;KAC5B,CAAC;IAEF,MAAM,MAAM,gBAAgB,GAAG;QAC3B,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAC;QAEb,QAAQ,EAAE,OAAO,CAAC;QAElB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACzB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAE1B,OAAO,EAAE,OAAO,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;IAwGF,MAAM,yBAAyB,MAAM,MAAM,GAAG,SAAS,CAEtD;IAED,MAAM,yBAAyB,UAAU,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAkBjF;IAomBD,MAAM;QACF,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;oBACpB,UAAU,CAAC,EAAE,UAAU;QAOnC,MAAM,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM;QA6BpE,MAAM,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,MAAM,QAAQ,GAAG,GAAG;KAkBhE;IAED,MAAM,CAAC,MAAM,eAAe,EAAE,QAAyB,CAAC;;;IC99BxD,OAAO,EAAmB,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAkB,wBAA2B;IACjH,OAAO,EAAE,SAAS,EAAgB,YAAY,EAAE,wBAA2B;IAqC3E,MAAM;QACF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;oBACV,MAAM,GAAG;KAUxB;IAGD,MAAM,cAAe,SAAQ,WAAW;QACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACzB;IAED,MAAM,wBAAyB,SAAQ,WAAW;QAC9C,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAE1B,MAAM,CAAC,UAAU,MAAM,EAAE,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM;KAmCvD;IAED,MAAM,0BAA2B,SAAQ,WAAW;QAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAEzB,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAE1B,MAAM,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM;QA4BlC,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG;KAa5B;IAOD,MAAM,uBAAwB,SAAQ,WAAW;QAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAE3B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAEvB,MAAM,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG;KAyDpD;IAED,4BAA6B,SAAQ,WAAW;QAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;QACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;KAC7B;IAED,oBAAqB,SAAQ,WAAW;QACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;KAC9B;IA6FD,MAAM;QACF,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,GAAG,gBAAgB,CAAC,CAAC;QACtD,QAAQ,CAAC,SAAS,EAAE;YAAE,CAAE,IAAI,EAAE,MAAM,GAAI,mBAAmB,CAAA;SAAE,CAAC;QAC9D,QAAQ,CAAC,MAAM,EAAE;YAAE,CAAE,IAAI,EAAE,MAAM,GAAI,gBAAgB,CAAA;SAAE,CAAC;QACxD,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC;oBAE/B,KAAK,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM;QA2CnD,gBAAgB,CAAC,IAAI;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,YAAY,CAAA;SAAE,GAAG,sBAAsB;QAsBpF,QAAQ,CAAC,KAAK;YAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,GAAG,cAAc;KAoBxE;;;IClaD,MAAM,CAAC,QAAQ;QACX,MAAM,EAAE,MAAM,CAAC;oBAEH,QAAQ,MAAM;QAI1B,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;QACvC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;QAG3C,KAAK,CAAC,UAAU,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAKtC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM;KAGrC;IAED,MAAM,mBAAmB,MAAM,QAAQ,GAAG,IAAI,CAK7C;;;IC9BD,OAAO,EAAY,QAAQ,EAAE,2BAAmB;IAYhD,YAAa,SAAQ,QAAQ;;QAKzB,OAAO,CAAC,OAAO,MAAM,GAAG,MAAM;QAK9B,YAAY,CAAC,MAAM,MAAM,GAAG,MAAM;KAIrC;IAED,MAAM,MAAM,QAAe,CAAC;IAG5B,OAAO,EAAE,MAAM,EAAE,CAAC;;;IC7BlB,OAAO,EAAY,QAAQ,EAAE,oBAAgB;IAM7C,MAAM,iBAAiB,UAAU,QAAQ,EAAE,MAAM,QAAQ,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM,EAAE,eAAe,MAAM,GAAG,UAAU,CAEhI;;;ICRD,OAAO,EAAY,QAAQ,EAAE,oBAAgB;IAI7C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAGtD,MAAM,sBAAsB,WAAW,mBAAmB,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,GAAG,UAAU,CAMrG;;;ICbD,OAAO,EAAY,QAAQ,EAAE,oBAAgB;IAE7C,MAAM,iBAAiB,MAAM,QAAQ,GAAG,MAAM,CAE7C;IAED,MAAM,iBAAiB,MAAM,QAAQ,GAAG,MAAM,CAE7C;;;ICHD,OAAO,EAAE,QAAQ,EAAE,2BAA8B;IAEjD,OAAO,EAAY,QAAQ,EAAW,oBAAuB;IA0B7D,MAAM,CAAC,MAAM,WAAW,qBAAqB,CAAC;IAE9C,MAAM;QACF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;QAElC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAE3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAEvB;;;;;;WAMG;oBACS,YAAY,QAAQ,EAAE,WAAW,UAAU,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,UAAU,MAAM,EAAE,MAAM,MAAM;QAiBrH,OAAO,CAAC,OAAO;QAuCf,UAAU,CAAC,MAAM,MAAM,GAAG,MAAM;KA2BnC;IAWD,MAAM,uBAAuB,UAAU,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAK1E;IAED,MAAM,mBAAmB,MAAM,QAAQ,GAAG,MAAM,CAE/C;IAED,MAAM,yBAAyB,UAAU,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1E;IAED,MAAM,4BAA4B,UAAU,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAkC/E;IAED,MAAM,4BAA4B,SAAS,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CA2ChF;IAED,MAAM,0BAA0B,UAAU,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAM9E;;;IC9PD,MAAM,sBAAsB,QAAQ,MAAM,GAAG,UAAU,CAEtD;;;ICCD,OAAO,EAAY,QAAQ,EAAW,oBAAuB;IAC7D,OAAO,EAAE,MAAM,EAAE,sBAAiB;IAGlC,OAAO,EAA+C,SAAS,EAAE,wBAA2B;IAI5F,MAAM;QAEF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAEzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;oBAEtB,YAAY,QAAQ,GAAG,MAAM;QAsCzC,UAAU,CAAC,QAAQ,QAAQ,GAAG,SAAS;KAG1C;IAED,MAAM,yBAAyB,QAAQ,QAAQ,EAAE,WAAW,SAAS,GAAG,MAAM,CAE7E;IAED,MAAM,yBAAyB,KAAK,MAAM,GAAG,MAAM,CAIlD;;;ICxED,OAAO,EAAY,QAAQ,EAAmB,oBAAuB;IAOrE,OAAO,EAAE,UAAU,EAAE,2BAAsB;IAI3C,MAAM,WAAW,gBAAgB;QAC7B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1B;IAkDD,MAAM,4BAA4B,MAAM,MAAM,GAAG,OAAO,CAMvD;IAED,MAAM,wBAAwB,MAAM,MAAM,GAAG,OAAO,CAWnD;IAID,MAAM,2BAA2B,MAAM,MAAM,EAAE,UAAU,QAAQ,GAAG,MAAM,GAAG,UAAU,CAuCtF;IAGD,MAAM,kBAAkB,MAAM,MAAM,EAAE,UAAU,QAAQ,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyJlH;IAED,MAAM,MAAM,cAAc,GAAG;QAC1B,EAAE,CAAC,EAAE,QAAQ,CAAC;QACd,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE;YACL,CAAC,CAAC,EAAE,MAAM,CAAC;YACX,CAAC,CAAC,EAAE,MAAM,CAAC;YACX,CAAC,CAAC,EAAE,MAAM,CAAC;SACd,CAAA;KACH,CAAA;IAED,MAAM,kBAAkB,YAAY,QAAQ,GAAG,UAAU,EAAE,UAAU,QAAQ,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmKtK;;;ICldD,OAAO,EAAE,QAAQ,EAAmB,oBAAgB;IAQpD,MAAM,mBAAmB,MAAM,MAAM,GAAG,MAAM,CAqB7C;IAGD,MAAM,aAAa,MAAM,MAAM,GAAG,MAAM,CAEvC;IAED,MAAM,sBAAsB,SAAS,QAAQ,GAAG,MAAM,GAAG,MAAM,CAO9D;;;IC3CD,OAAO,EAAE,SAAS,EAAgB,YAAY,EAAe,wBAAoB;IACjF,OAAO,EAAY,QAAQ,EAAoC,oBAAgB;IAE/E,OAAO,EAAkB,SAAS,EAAE,wBAAoB;IAGxD,MAAM,MAAM,mBAAmB,GAAG;QAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;QAExB,IAAI,CAAC,EAAE,QAAQ,CAAC;QAChB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAA;IAGD,MAAM,WAAW,WAAW;QACxB,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QAEd,QAAQ,EAAE,SAAS,CAAC;QACpB,QAAQ,EAAE,SAAS,CAAC;QAEpB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,SAAS,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAEhB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;KACd;IAuBD,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,QAAQ,KAAK,SAAS,CAAC;IAE7D,MAAM,eAAe,aAAa,mBAAmB,EAAE,YAAY,cAAc,GAAG,MAAM,CAoEzF;IAED,MAAM,gBAAgB,gBAAgB,QAAQ,GAAG,WAAW,CAmD3D;;;ICtLD,OAAO,EAAgD,MAAM,EAAE,sBAAiB;IAEhF,OAAO,EAAE,gBAAgB,EAAE,8BAAyB;IACpD,OAAO,EAAkB,UAAU,EAAE,2BAAsB;IAE3D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,2BAA8B;IACpG,OAAO,EAAE,QAAQ,EAAE,2BAA8B;IAEjD,OAAO,EAAE,SAAS,EAAE,wBAA2B;IAC/C,OAAO,EAAY,QAAQ,EAAkC,oBAAuB;IASpF,MAAM,CAAC,QAAQ;QACX,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAEpB,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;QAEtC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACrE,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;KAC1F;IAGD,MAAM,aAAc,SAAQ,MAAM;QAE9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;oBAE5B,YAAY,UAAU,GAAG,MAAM,GAAG,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;iBAcvE,OAAO,EAAI,MAAM;iBAEjB,QAAQ,EAAI,MAAM;iBAClB,IAAI,EAAI,MAAM;iBAEd,UAAU,EAAI,MAAM;QAGxB;;WAEG;QACH,OAAO,CAAC,UAAU,QAAQ,GAAG,MAAM;QAKnC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;QAI7B,IAAI,CAAC,aAAa,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;QAOtD,WAAW,CAAC,SAAS,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAKxD,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;QAKnD,mBAAmB,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAKzD,eAAe,CAAC,aAAa,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QAgC9E,OAAO,CAAC,UAAU,QAAQ,GAAG,MAAM,EAAE,SAAS,GAAG,EAAE,kBAAkB,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;QA2BvG;;WAEG;QACH,MAAM,CAAC,YAAY,CAAC,SAAS,GAAG,GAAG,MAAM;QAazC,MAAM,CAAC,iBAAiB,CAAC,MAAM,MAAM,EAAE,UAAU,QAAQ,EAAE,kBAAkB,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;QAoC/G,MAAM,CAAC,YAAY,CAAC,UAAU,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM;QAMjF;;WAEG;QACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,MAAM,GAAG,OAAO;QAK/C;;WAEG;QACH,MAAM,CAAC,aAAa,CAAC,SAAS,QAAQ,GAAG,MAAM,EAAE,WAAW,MAAM,GAAG,MAAM;KAkB9E;;;IC1OD,MAAM,MAAM,OAAO,GAAG;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAA;IAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IA4CnD;;;;;OAKG;IACH,MAAM,qBAAqB,SAAS,UAAU,GAAG,OAAO,CAqDvD;;;IC7GD,OAAO,EAAE,MAAM,EAAE,sBAAyB;IAG1C,OAAO,EAAE,SAAS,EAAgB,YAAY,EAAE,wBAA2B;IAC3E,OAAO,EAAE,QAAQ,EAA+F,oBAAuB;IAIvI,OAAO,EAAc,OAAO,EAAE,UAAU,EAAE,2BAAmB;IAE7D,OAAO,EAAsD,cAAc,EAAE,WAAW,EAAE,0BAA6B;IAQvH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAEvC,MAAM,WAAW,KAAK;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QAEf,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QAEnB,QAAQ,EAAE,SAAS,CAAC;QACpB,OAAO,EAAE,SAAS,CAAC;QAEnB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAElB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC/B;IAED,MAAM,MAAM,kBAAkB,GAAG;QAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAEnD,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAChD,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAEhD,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;KACtC,CAAA;IAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;QAEpD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QAGnB,IAAI,EAAE,MAAM,CAAC;QAGb,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;KAC3D;IAED,MAAM,WAAW,kBAAkB;QAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,SAAS,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,SAAS,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAA;KAClB;IAED,MAAM,MAAM,MAAM,GAAG;QACjB,SAAS,CAAC,EAAE,QAAQ,CAAC;QACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;KACtB,CAAA;IAGD,MAAM,WAAW,GAAG;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAE1B,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAE7B,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB;IAED,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAgLrD,MAAM,mCAAmC,aAAa,GAAG,GAAG,mBAAmB,CAmE9E;IA6ND,MAAM,qBAAsB,SAAQ,MAAM;QACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC5B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;QAEpC,OAAO,CAAC,eAAe,CAAkB;oBAE7B,SAAS,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,cAAc,EAAE,UAAU,QAAQ;QAQ7F,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;QAI7B,WAAW,CAAC,SAAS,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAIxD,eAAe,CAAC,aAAa,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;KA+BjF;IAED,MAAM;QACF,OAAO,CAAC,QAAQ,CAAU;QAG1B,OAAO,CAAC,OAAO,CAAM;QACrB,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC;QAExB,OAAO,CAAC,gBAAgB,CAAS;QACjC,OAAO,CAAC,OAAO,CAAM;QAErB,OAAO,CAAC,gBAAgB,CAAS;QAGjC,OAAO,CAAC,SAAS,CAAM;QAGvB;;;;;;;;WAQG;QACH,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAEtB,SAAS,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;QAqClD,OAAO,CAAC,OAAO;QA0Ef,gBAAgB,CAAC,aAAa,MAAM,GAAG,IAAI;iBAKvC,OAAO,EAAI,OAAO;QAItB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;iBAI1B,WAAW,EAAI,MAAM;QAKrB,OAAO,EAAI,OAAO;QAgBlB,eAAe,EAAI,MAAM;QAoB7B,kBAAkB,CAAC,iBAAiB,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;QAqB3F,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;QAUjC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;QASjC,UAAU,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QAahH,mBAAmB,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAatH,OAAO,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAa1G,YAAY,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAiB/J,eAAe,CAAC,mBAAmB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;QA0B1F,IAAI,CAAC,aAAa,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;QActD,WAAW,CAAC,aAAa,kBAAkB;QAmB3C,QAAQ,CAAC,qBAAqB,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAsC7F,cAAc,CAAC,iBAAiB,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;QAgBrE,qBAAqB,CAAC,iBAAiB,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAgB3E,OAAO,CAAC,QAAQ,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAa5C,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;QAUhC,aAAa,CAAC,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QAenF,YAAY,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QA0B3C,WAAW,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAmC5D,aAAa,CAAC,SAAS,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QA+CjE,MAAM,IAAI,IAAI;QAGd,OAAO,CAAC,QAAQ,MAAM,EAAE,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAKlD,aAAa,IAAI,IAAI;QAIrB,YAAY,IAAI,IAAI;QAGpB,EAAE,CAAC,WAAW,GAAG,EAAE,UAAU,QAAQ,GAAG,QAAQ;QAUhD,IAAI,CAAC,WAAW,GAAG,EAAE,UAAU,QAAQ,GAAG,QAAQ;QAUlD,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO;QAmClD,aAAa,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,MAAM;QActC,SAAS,CAAC,WAAW,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;QAU1C,kBAAkB,CAAC,WAAW,GAAG,GAAG,QAAQ;QAO5C,cAAc,CAAC,WAAW,GAAG,EAAE,UAAU,QAAQ,GAAG,QAAQ;KAkB/D;;;IC5xCD,OAAO,EAAoB,SAAS,EAAE,4BAAoB;IAE1D,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,2BAA8B;IAC1F,OAAO,EAAE,MAAM,EAAE,sBAAyB;IAK1C,OAAO,EAAE,SAAS,EAAE,wBAA2B;IAC/C,OAAO,EAAE,SAAS,EAAgB,wBAA2B;IAkK7D,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7E,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACvE,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAE5D,UAAU,MAAM,CAAC,CAAC;QACd,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;KACrB;IAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnD,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC;IACzE,MAAM;QACF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;QAE9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAE5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAEvC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAGzC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;QAEhD,OAAO,CAAC,QAAQ,CAAgB;oBAMpB,eAAe,MAAM,EAAE,mBAAmB,WAAW,EAAE,kBAAkB,MAAM,GAAG,QAAQ;QAwHlG,OAAO,EAEW,aAAa;QAInC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QAiBtE,OAAO,CAAC,kBAAkB,MAAM,GAAG,QAAQ,GAAG,QAAQ;QAOtD,MAAM,CAAC,UAAU,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;KA2BnE;;;IC5XD,OAAO,EAAE,QAAQ,EAAE,2BAAmB;IACtC,OAAO,EAAE,SAAS,EAAE,4BAAoB;IAExC,OAAO,EACH,QAAQ,EACR,SAAS,EACZ,CAAA;;;ICND,OAAO,EAAY,QAAQ,EAAE,oBAAgB;IAS7C,MAAM,iBAAiB,UAAU,MAAM,GAAG,UAAU,CAEnD;IAED,MAAM,iBAAiB,MAAM,QAAQ,GAAG,MAAM,CAE7C;;;ICZD,MAAM,MAAM,cAAc,GAAG;QACzB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,OAAO,CAAA;KAC1B,CAAC;IAIF,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IAI9C,MAAM,oBAAoB,YAAY,MAAM,GAAG,cAAc,EAAE,MAAM,MAAM,EAAE,aAAa,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAsGnH;;;ICvHD,OAAO,EAAE,QAAQ,EAA4B,QAAQ,EAAsB,mBAAmB,EAAE,2BAAmB;IACnH,OAAO,EAAE,UAAU,EAAE,2BAAmB;IAkExC,MAAM,wBAAyB,SAAQ,QAAQ;QAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;oBACZ,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM;QA8BjD,OAAO,CAAC,QAAQ,MAAM,EAAE,QAAQ,GAAG;QAyJnC,UAAU,CAAC,eAAe,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;KAiCvI;;;IC5RD,OAAO,EAAE,QAAQ,EAAE,2BAAmB;IAyCtC,MAAM,uBAAwB,SAAQ,QAAQ;QAC1C,OAAO,CAAC,UAAU,CAAkB;oBAExB,WAAW,KAAK,CAAC,QAAQ,CAAC;iBA0BlC,SAAS,EAAI,KAAK,CAAC,QAAQ,CAAC;QAKhC,OAAO,CAAC,QAAQ,MAAM,EAAE,QAAQ,GAAG,GAAG,GAAG;KAuB5C;;;ICjGD,OAAO,EAAuB,UAAU,EAAE,2BAAmB;IAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,2BAAmB;IACzF,OAAO,EAAE,MAAM,EAAE,sBAAyB;IAG1C,OAAO,EAAE,SAAS,EAAE,wBAA2B;IAC/C,OAAO,EAAE,QAAQ,EAA0B,oBAAuB;IAGlE,OAAO,EAAE,cAAc,EAAa,kBAAqB;IA6BzD,MAAM,6BAA6B,aAAa,kBAAkB,GAAG,GAAG,CAiBvE;IAOD,MAAM,oBAAqB,SAAQ,MAAM;QACrC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAS;oBAEb,UAAU,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM;iBAYnD,OAAO,EAAI,MAAM;QAOrB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;QAa7B,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;QAInD,mBAAmB,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAIzD,eAAe,CAAC,aAAa,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QAe9E,WAAW,CAAC,SAAS,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QASxD,MAAM,CAAC,UAAU,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;KAO7C;IAED,MAAM,sBAAuB,SAAQ,QAAQ;QACzC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;QAEpC,OAAO,CAAC,cAAc,CAAkB;oBAE5B,GAAG,CAAC,EAAE,cAAc,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU;QA4C/D,SAAS,CAAC,SAAS,MAAM,GAAG,aAAa;QAIzC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAMtC,IAAI,CAAC,QAAQ,MAAM,EAAE,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAW/C,OAAO,CAAC,QAAQ,MAAM,EAAE,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAyDlD,aAAa,IAAI,IAAI;QAuCrB,YAAY,IAAI,IAAI;KAGvB;;;ICrTD,OAAO,EAAE,eAAe,EAAE,oCAA4B;IACtD,OAAO,EAAE,UAAU,EAAE,2BAAmB;IAMxC,MAAM,kBAAmB,SAAQ,eAAe;QAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;oBAEV,MAAM,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU;QAa9C,IAAI,CAAC,QAAQ,MAAM,EAAE,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;KAsClD;;;IC9DD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,oCAA4B;IACrE,OAAO,EAAc,UAAU,EAAE,2BAAmB;IAMpD,MAAM,qBAAsB,SAAQ,eAAe;QAC/C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;oBAEpB,OAAO,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM;QA2BzD,aAAa,IAAI,IAAI;QAIrB,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa;QAS1C,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAGzC;;;ICrDD,OAAO,EAAE,UAAU,EAAE,2BAAmB;IACxC,OAAO,EAAE,eAAe,EAAE,oCAA4B;IAatD,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAE3D,MAAM,MAAM,aAAa,GAAG;QACxB,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;KACxD,CAAA;IAED,MAAM,mBAAoB,SAAQ,eAAe;QAC7C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;oBAE1B,cAAc,aAAa,EAAE,OAAO,CAAC,EAAE,UAAU;QAmB7D,IAAI,CAAC,QAAQ,MAAM,EAAE,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;KAoClD;;;ICjFD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,2BAAmB;IAEtD,OAAO,EAAE,OAAO,EAAE,2BAAmB;IAErC,OAAO,EAAE,iBAAiB,EAAE,qCAA6B;IACzD,OAAO,EAAE,gBAAgB,EAAE,oCAA4B;IACvD,OAAO,EAAE,WAAW,EAAE,+BAAuB;IAC7C,OAAO,EAAE,cAAc,EAAE,kCAA0B;IACnD,OAAO,EAAE,eAAe,EAAE,oCAA4B;IACtD,OAAO,EAAE,YAAY,EAAE,gCAAwB;IAE/C,4BAA4B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,gBAAgB,CAKxE;IAED,OAAO,EACH,QAAQ,EACR,kBAAkB,EAElB,cAAc,EAEd,gBAAgB,EAEhB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,YAAY,EAEZ,WAAW,EACd,CAAC;;;ICuCF,MAAM,eAAe,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,KAAK,CAAC,GAAG,CAAC,UAO5D;IAED,MAAM,oBAAoB,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,KAAK,CAAC,GAAG,CAAC,UAEjE;IAED,MAAM,iBAAiB,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,KAAK,CAAC,GAAG,CAAC,UAE9D;;;ICtFD,OAAO,EAAE,SAAS,EAAgB,YAAY,EAAqC,wBAAoB;IAgEvG,MAAM,sBAAsB,OAAO,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,CAsClG;IAED,MAAM,qBAAqB,OAAO,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiD/E;IAED,MAAM,sBAAsB,KAAK,YAAY,EAAE,SAAS,GAAG,GAAG,MAAM,CAEnE;IAED,MAAM,qBAAqB,OAAO,MAAM,GAAG,SAAS,CAEnD;;;IC9JD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAkB;IAC3E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAoB;IACxF,OAAO,KAAK,MAAM,qBAAiB;IACnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAoB;IACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,oBAAgB;IACzG,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,mBAAe;IACnD,OAAO,EAAE,SAAS,EAAE,wBAAoB;IACxC,OAAO,EAAE,MAAM,EAAE,mBAAe;IAChC,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,IAAI,cAAc,EAAE,uBAAmB;IAC5G,OAAO,EAAE,WAAW,EAAE,2BAAuB;IAC7C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,yBAAqB;IAC5F,OAAO,KAAK,GAAG,kBAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAe;IACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,oBAAgB;IAC3E,OAAO,EAAE,SAAS,EAAE,kBAAc;IAClC,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,0BAAsB;IAE1D,OAAO,KAAK,MAAM,qBAAiB;IAMnC,MAAM,WAAW,WAAW,CAAC;IAE7B,OAAO,EACH,QAAQ,EACR,eAAe,EACf,cAAc,EACd,cAAc,EAEd,GAAG,EAEH,SAAS,EAET,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,WAAW,EAEX,WAAW,EAEX,QAAQ,EAER,MAAM,EACN,QAAQ,EACR,UAAU,EAEV,MAAM,EAEN,YAAY,EACZ,SAAS,EAET,OAAO,EAEP,WAAW,EACX,YAAY,EAEZ,WAAW,EACX,QAAQ,EACR,EAAE,EAEF,UAAU,EACV,cAAc,EACd,kBAAkB,EAElB,WAAW,EACX,UAAU,EAEV,WAAW,EACX,UAAU,EAEV,SAAS,EACT,MAAM,EAEN,WAAW,EAEX,YAAY,EACZ,iBAAiB,EACjB,cAAc,EAEd,cAAc,EACd,aAAa,EAEb,gBAAgB,EAEhB,MAAM,EACT,CAAA;;;IC1FD,OAAO,EAAE,MAAM,EAAE,sBAAiB;IAClC,OAAO,KAAK,MAAM,sBAAiB;IACnC,OAAO,EAAE,UAAU,EAAE,2BAAsB;IAE3C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;;;ICHtC,OAAO,eAAe,CAAC;IAEvB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,wBAAoB;IAClD,OAAO,KAAK,SAAS,wBAAoB;IACzC,OAAO,KAAK,MAAM,qBAAuB;IACzC,OAAO,EAAE,UAAU,EAAE,2BAA6B;IAClD,OAAO,KAAK,KAAK,oBAAgB;IACjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAiB;IAKtD,MAAM,OAAO,UAAU,CAAC;IAExB,OAAO,EACH,MAAM,EAEN,MAAM,EACN,UAAU,EAEV,QAAQ,EACR,SAAS,EAET,UAAU,EACV,SAAS,EAET,MAAM,EACN,KAAK,EAEL,OAAO,EACV,CAAC;;;;;;;;;;;IAEF,wBAeC;;;ICjDD,OAAO,EAAY,QAAQ,EAAE,2BAAmB;IAyGhD,YAAa,SAAQ,QAAQ;;QAKzB,OAAO,CAAC,OAAO,MAAM,GAAG,MAAM;QAK9B,YAAY,CAAC,MAAM,MAAM,GAAG,MAAM;QAKlC,KAAK,CAAC,UAAU,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAOtC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM;KAGrC;IAED,MAAM,MAAM,QAAe,CAAC;IAG5B,OAAO,EAAE,MAAM,EAAE,CAAC;;;ICvIlB,OAAO,EAAY,QAAQ,EAAE,2BAAmB;IAmDhD,YAAa,SAAQ,QAAQ;;QAKzB,OAAO,CAAC,OAAO,MAAM,GAAG,MAAM;QAK9B,YAAY,CAAC,MAAM,MAAM,GAAG,MAAM;KAIrC;IAED,MAAM,MAAM,QAAe,CAAC;IAG5B,OAAO,EAAE,MAAM,EAAE,CAAA;;;ICtEjB,OAAO,EAAY,QAAQ,EAAE,2BAAmB;IAWhD,YAAa,SAAQ,QAAQ;;QAKzB,OAAO,CAAC,OAAO,MAAM,GAAG,MAAM;QAK9B,YAAY,CAAC,MAAM,MAAM,GAAG,MAAM;KAIrC;IAED,MAAM,MAAM,QAAe,CAAC;IAG5B,OAAO,EAAE,MAAM,EAAE,CAAA;;;IC9BjB,OAAO,EAAY,QAAQ,EAAE,2BAAmB;IAiChD,YAAa,SAAQ,QAAQ;QACzB,OAAO,CAAC,QAAQ,CAAQ;oBACZ,SAAS,MAAM;QAK3B,OAAO,CAAC,OAAO,MAAM,GAAG,MAAM;QAI9B,YAAY,CAAC,MAAM,MAAM,GAAG,MAAM;QAIlC,KAAK,CAAC,UAAU,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;KAIzC;IAED,MAAM,QAAQ,QAAmB,CAAC;IAGlC,MAAM,QAAQ,QAAmB,CAAC;IAyBlC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;;;IClF9B,OAAO,EAAE,QAAQ,EAAE,2BAAmB;IAEtC,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,0BAAkB;IACzC,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,0BAAkB;IACzC,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,0BAAkB;IACzC,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,0BAAkB;IACzC,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,0BAAkB;IAEjE,MAAM,EAAE,EAAE,QAAgB,CAAC;IAE3B,OAAO,EACH,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EACnC,CAAA","file":"ethers.d.ts","sourcesContent":["'use strict';\n\nimport sha3 = require('js-sha3');\n\nimport { arrayify, Arrayish } from './bytes';\n\nexport function keccak256(data: Arrayish): string {\n return '0x' + sha3.keccak_256(arrayify(data));\n}\n\n//export default keccak256;\n","'use strict';\n\nexport function defineReadOnly(object: any, name: string, value: any): void {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n\nexport function defineFrozen(object: any, name: string, value: any): void {\n var frozen = JSON.stringify(value);\n Object.defineProperty(object, name, {\n enumerable: true,\n get: function() { return JSON.parse(frozen); }\n });\n}\n\nexport function resolveProperties(object: any): Promise {\n let result: any = {};\n\n let promises: Array> = [];\n Object.keys(object).forEach((key) => {\n let value = object[key];\n if (value instanceof Promise) {\n promises.push(\n value.then((value) => {\n result[key] = value;\n })\n );\n } else {\n result[key] = value;\n }\n });\n\n return Promise.all(promises).then(() => {\n return result;\n });\n}\n\nexport function shallowCopy(object: any): any {\n let result: any = {};\n for (var key in object) { result[key] = object[key]; }\n return result;\n}\n\nexport function jsonCopy(object: any): any {\n return JSON.parse(JSON.stringify(object));\n}\n","'use strict';\n\n// Unknown Error\nexport const UNKNOWN_ERROR = 'UNKNOWN_ERROR';\n\n// Not implemented\nexport const NOT_IMPLEMENTED = 'NOT_IMPLEMENTED';\n\n// Missing new operator to an object\n// - name: The name of the class\nexport const MISSING_NEW = 'MISSING_NEW';\n\n// Call exception\nexport const CALL_EXCEPTION = 'CALL_EXCEPTION';\n\n// Response from a server was invalid\n// - response: The body of the response\n//'BAD_RESPONSE',\n\n// Invalid argument (e.g. type) to a function:\n// - arg: The argument name that was invalid\n// - value: The value of the argument\n// - type: The type of the argument\n// - expected: What was expected\nexport const INVALID_ARGUMENT = 'INVALID_ARGUMENT';\n\n// Missing argument to a function:\n// - arg: The argument name that is required\n// - count: The number of arguments received\n// - expectedCount: The number of arguments expected\nexport const MISSING_ARGUMENT = 'MISSING_ARGUMENT';\n\n// Too many arguments\n// - count: The number of arguments received\n// - expectedCount: The number of arguments expected\nexport const UNEXPECTED_ARGUMENT = 'UNEXPECTED_ARGUMENT';\n\n// Numeric Fault\n// - operation: the operation being executed\n// - fault: the reason this faulted\nexport const NUMERIC_FAULT = 'NUMERIC_FAULT';\n\n\n// Unsupported operation\n// - operation\nexport const UNSUPPORTED_OPERATION = 'UNSUPPORTED_OPERATION';\n\n// @TODO: Enum\nexport function throwError(message: string, code: string, params: any): never {\n if (!code) { code = UNKNOWN_ERROR; }\n if (!params) { params = {}; }\n\n var messageDetails: Array = [];\n Object.keys(params).forEach(function(key) {\n try {\n messageDetails.push(key + '=' + JSON.stringify(params[key]));\n } catch (error) {\n messageDetails.push(key + '=' + JSON.stringify(params[key].toString()));\n }\n });\n var reason = message;\n if (messageDetails.length) {\n message += ' (' + messageDetails.join(', ') + ')';\n }\n\n// @TODO: Any??\n var error: any = new Error(message);\n error.reason = reason;\n error.code = code\n\n Object.keys(params).forEach(function(key) {\n error[key] = params[key];\n });\n\n throw error;\n}\n\nexport function checkNew(self: any, kind: any): void {\n if (!(self instanceof kind)) {\n throwError('missing new', MISSING_NEW, { name: kind.name });\n }\n}\n\n","'use strict';\n\nimport * as elliptic from 'elliptic';\nconst curve = new elliptic.ec('secp256k1');\n\nimport { getAddress } from './address';\nimport { arrayify, Arrayish, hexlify, hexZeroPad } from './bytes';\nimport { keccak256 } from './keccak256';\nimport { defineReadOnly } from './properties';\n\nimport * as errors from './errors';\n\nexport const N = '0x' + curve.n.toString(16);\n\nexport interface Signature {\n r: string;\n s: string;\n recoveryParam: number;\n v?: number;\n}\n\nexport class KeyPair {\n\n readonly privateKey: string;\n\n readonly publicKey: string;\n readonly compressedPublicKey: string;\n\n readonly publicKeyBytes: Uint8Array;\n\n constructor(privateKey: Arrayish) {\n let keyPair = curve.keyFromPrivate(arrayify(privateKey));\n\n defineReadOnly(this, 'privateKey', hexlify(keyPair.priv.toArray('be', 32)));\n defineReadOnly(this, 'publicKey', '0x' + keyPair.getPublic(false, 'hex'));\n defineReadOnly(this, 'compressedPublicKey', '0x' + keyPair.getPublic(true, 'hex'));\n defineReadOnly(this, 'publicKeyBytes', keyPair.getPublic().encode(null, true));\n }\n\n sign(digest: Arrayish): Signature {\n let keyPair = curve.keyFromPrivate(arrayify(this.privateKey));\n let signature = keyPair.sign(arrayify(digest), {canonical: true});\n return {\n recoveryParam: signature.recoveryParam,\n r: hexZeroPad('0x' + signature.r.toString(16), 32),\n s: hexZeroPad('0x' + signature.s.toString(16), 32),\n v: 27 + signature.recoveryParam\n }\n\n }\n}\n\nexport function recoverPublicKey(digest: Arrayish, signature: Signature): string {\n let sig = {\n r: arrayify(signature.r),\n s: arrayify(signature.s)\n };\n return '0x' + curve.recoverPubKey(arrayify(digest), sig, signature.recoveryParam).encode('hex', false);\n}\n\nexport function computePublicKey(key: Arrayish, compressed?: boolean): string {\n\n let bytes = arrayify(key);\n\n if (bytes.length === 32) {\n let keyPair: KeyPair = new KeyPair(bytes);\n if (compressed) {\n return keyPair.compressedPublicKey;\n }\n return keyPair.publicKey;\n\n } else if (bytes.length === 33) {\n if (compressed) { return hexlify(bytes); }\n return '0x' + curve.keyFromPublic(bytes).getPublic(false, 'hex');\n\n } else if (bytes.length === 65) {\n if (!compressed) { return hexlify(bytes); }\n return '0x' + curve.keyFromPublic(bytes).getPublic(true, 'hex');\n }\n\n errors.throwError('invalid public or private key', errors.INVALID_ARGUMENT, { arg: 'key', value: '[REDACTED]' });\n return null;\n}\n\nexport function recoverAddress(digest: Arrayish, signature: Signature): string {\n return computeAddress(recoverPublicKey(digest, signature));\n}\n\nexport function computeAddress(key: string): string {\n // Strip off the leading \"0x04\"\n let publicKey = '0x' + computePublicKey(key).slice(4);\n return getAddress('0x' + keccak256(publicKey).substring(26));\n}\n\n","/**\n * Conversion Utilities\n *\n */\n\nimport { BigNumber } from './bignumber';\nimport { Signature } from './secp256k1';\n\nimport errors = require('./errors');\n\n\n\nexport type Arrayish = string | ArrayLike;\n\n\nfunction isBigNumber(value: any): value is BigNumber {\n return !!value._bn;\n}\n\nfunction addSlice(array: Uint8Array): Uint8Array {\n if (array.slice) { return array; }\n\n array.slice = function() {\n var args = Array.prototype.slice.call(arguments);\n return new Uint8Array(Array.prototype.slice.apply(array, args));\n }\n\n return array;\n}\n\nexport function isArrayish(value: any): boolean {\n if (!value || parseInt(String(value.length)) != value.length || typeof(value) === 'string') {\n return false;\n }\n\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n if (v < 0 || v >= 256 || parseInt(String(v)) != v) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function arrayify(value: Arrayish | BigNumber): Uint8Array {\n if (value == null) {\n errors.throwError('cannot convert null value to array', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n if (isBigNumber(value)) {\n value = value.toHexString();\n }\n\n if (typeof(value) === 'string') {\n let match = value.match(/^(0x)?[0-9a-fA-F]*$/);\n\n if (!match) {\n errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n if (match[1] !== '0x') {\n errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n value = value.substring(2);\n if (value.length % 2) { value = '0' + value; }\n\n var result = [];\n for (var i = 0; i < value.length; i += 2) {\n result.push(parseInt(value.substr(i, 2), 16));\n }\n\n return addSlice(new Uint8Array(result));\n\n } else if (typeof(value) === 'string') {\n }\n\n if (isArrayish(value)) {\n return addSlice(new Uint8Array(value));\n }\n\n errors.throwError('invalid arrayify value', null, { arg: 'value', value: value, type: typeof(value) });\n return null;\n}\n\nexport function concat(objects: Array): Uint8Array {\n var arrays = [];\n var length = 0;\n for (var i = 0; i < objects.length; i++) {\n var object = arrayify(objects[i])\n arrays.push(object);\n length += object.length;\n }\n\n var result = new Uint8Array(length);\n var offset = 0;\n for (var i = 0; i < arrays.length; i++) {\n result.set(arrays[i], offset);\n offset += arrays[i].length;\n }\n\n return addSlice(result);\n}\n\nexport function stripZeros(value: Arrayish): Uint8Array {\n let result: Uint8Array = arrayify(value);\n\n if (result.length === 0) { return result; }\n\n // Find the first non-zero entry\n var start = 0;\n while (result[start] === 0) { start++ }\n\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n\n return result;\n}\n\nexport function padZeros(value: Arrayish, length: number): Uint8Array {\n value = arrayify(value);\n\n if (length < value.length) { throw new Error('cannot pad'); }\n\n var result = new Uint8Array(length);\n result.set(value, length - value.length);\n return addSlice(result);\n}\n\n\nexport function isHexString(value: any, length?: number): boolean {\n if (typeof(value) !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false\n }\n if (length && value.length !== 2 + 2 * length) { return false; }\n return true;\n}\n\nconst HexCharacters: string = '0123456789abcdef';\n\nexport function hexlify(value: Arrayish | BigNumber | number): string {\n\n if (isBigNumber(value)) {\n return value.toHexString();\n }\n\n if (typeof(value) === 'number') {\n if (value < 0) {\n errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n var hex = '';\n while (value) {\n hex = HexCharacters[value & 0x0f] + hex;\n value = Math.floor(value / 16);\n }\n\n if (hex.length) {\n if (hex.length % 2) { hex = '0' + hex; }\n return '0x' + hex;\n }\n\n return '0x00';\n }\n\n if (typeof(value) === 'string') {\n let match = value.match(/^(0x)?[0-9a-fA-F]*$/);\n\n if (!match) {\n errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n if (match[1] !== '0x') {\n errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n if (value.length % 2) {\n value = '0x0' + value.substring(2);\n }\n return value;\n }\n\n if (isArrayish(value)) {\n var result = [];\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n result.push(HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]);\n }\n return '0x' + result.join('');\n }\n\n errors.throwError('invalid hexlify value', null, { arg: 'value', value: value });\n return 'never';\n}\n\nexport function hexDataLength(data: string) {\n if (!isHexString(data) || (data.length % 2) !== 0) {\n return null;\n }\n return (data.length - 2) / 2;\n}\n\nexport function hexDataSlice(data: string, offset: number, length?: number): string {\n if (!isHexString(data)) {\n errors.throwError('invalid hex data', errors.INVALID_ARGUMENT, { arg: 'value', value: data });\n }\n if ((data.length % 2) !== 0) {\n errors.throwError('hex data length must be even', errors.INVALID_ARGUMENT, { arg: 'value', value: data });\n }\n offset = 2 + 2 * offset;\n\n if (length != null) {\n return '0x' + data.substring(offset, offset + 2 * length);\n }\n\n return '0x' + data.substring(offset);\n}\n\nexport function hexStripZeros(value: string): string {\n if (!isHexString(value)) {\n errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n while (value.length > 3 && value.substring(0, 3) === '0x0') {\n value = '0x' + value.substring(3);\n }\n return value;\n}\n\nexport function hexZeroPad(value: string, length: number): string {\n if (!isHexString(value)) {\n errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n while (value.length < 2 * length + 2) {\n value = '0x0' + value.substring(2);\n }\n return value;\n}\n\nexport function splitSignature(signature: Arrayish): Signature {\n let bytes: Uint8Array = arrayify(signature);\n if (bytes.length !== 65) {\n throw new Error('invalid signature');\n }\n\n var v = bytes[64];\n if (v !== 27 && v !== 28) {\n v = 27 + (v % 2);\n }\n\n return {\n r: hexlify(bytes.slice(0, 32)),\n s: hexlify(bytes.slice(32, 64)),\n recoveryParam: (v - 27),\n v: v\n }\n}\n\nexport function joinSignature(signature: Signature): string {\n return hexlify(concat([\n hexZeroPad(signature.r, 32),\n hexZeroPad(signature.s, 32),\n (signature.recoveryParam ? '0x1c': '0x1b')\n ]));\n}\n\n","'use strict';\n\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardles.\n *\n */\n\nimport BN from 'bn.js';\n\nimport { Arrayish, hexlify, isArrayish, isHexString } from './bytes';\nimport { defineReadOnly } from './properties';\nimport * as errors from '../utils/errors';\n\nfunction _isBigNumber(value: any): value is BigNumber {\n return isBigNumber(value);\n}\n\nexport type BigNumberish = BigNumber | string | number | Arrayish;\n\nfunction fromBN(bn: BN.BN) {\n let value = bn.toString(16);\n if (value[0] === '-') {\n return new BigNumber(\"-0x\" + value.substring(1));\n }\n return new BigNumber('0x' + value);\n}\n\nexport class BigNumber {\n private readonly _bn: BN.BN;\n\n constructor(value: BigNumberish) {\n errors.checkNew(this, BigNumber);\n\n if (typeof(value) === 'string') {\n if (isHexString(value)) {\n if (value == '0x') { value = '0x0'; }\n defineReadOnly(this, '_bn', new BN.BN(value.substring(2), 16));\n\n } else if (value[0] === '-' && isHexString(value.substring(1))) {\n defineReadOnly(this, '_bn', (new BN.BN(value.substring(3), 16)).mul(ConstantNegativeOne._bn));\n\n } else if (value.match(/^-?[0-9]*$/)) {\n if (value == '') { value = '0'; }\n defineReadOnly(this, '_bn', new BN.BN(value));\n }\n\n } else if (typeof(value) === 'number') {\n if (parseInt(String(value)) !== value) {\n errors.throwError('underflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'underflow', value: value, outputValue: parseInt(String(value)) });\n }\n try {\n defineReadOnly(this, '_bn', new BN.BN(value));\n } catch (error) {\n errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });\n }\n\n } else if (_isBigNumber(value)) {\n defineReadOnly(this, '_bn', value._bn);\n\n } else if (isArrayish(value)) {\n defineReadOnly(this, '_bn', new BN.BN(hexlify(value).substring(2), 16));\n\n } else {\n errors.throwError('invalid BigNumber value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n }\n\n fromTwos(value: number): BigNumber {\n return fromBN(this._bn.fromTwos(value));\n }\n\n toTwos(value: number): BigNumber {\n return fromBN(this._bn.toTwos(value));\n }\n\n add(other: BigNumberish): BigNumber {\n return fromBN(this._bn.add(bigNumberify(other)._bn));\n }\n\n sub(other: BigNumberish): BigNumber {\n return fromBN(this._bn.sub(bigNumberify(other)._bn));\n }\n\n div(other: BigNumberish): BigNumber {\n let o: BigNumber = bigNumberify(other);\n if (o.isZero()) {\n errors.throwError('division by zero', errors.NUMERIC_FAULT, { operation: 'divide', fault: 'division by zero' });\n }\n return fromBN(this._bn.div(o._bn));\n }\n\n mul(other: BigNumberish): BigNumber {\n return fromBN(this._bn.mul(bigNumberify(other)._bn));\n }\n\n mod(other: BigNumberish): BigNumber {\n return fromBN(this._bn.mod(bigNumberify(other)._bn));\n }\n\n pow(other: BigNumberish): BigNumber {\n return fromBN(this._bn.pow(bigNumberify(other)._bn));\n }\n\n maskn(value: number): BigNumber {\n return fromBN(this._bn.maskn(value));\n }\n\n eq(other: BigNumberish): boolean {\n return this._bn.eq(bigNumberify(other)._bn);\n }\n\n lt(other: BigNumberish): boolean {\n return this._bn.lt(bigNumberify(other)._bn);\n }\n\n lte(other: BigNumberish): boolean {\n return this._bn.lte(bigNumberify(other)._bn);\n }\n\n gt(other: BigNumberish): boolean {\n return this._bn.gt(bigNumberify(other)._bn);\n }\n\n gte(other: BigNumberish): boolean {\n return this._bn.gte(bigNumberify(other)._bn);\n }\n\n isZero(): boolean {\n return this._bn.isZero();\n }\n\n toNumber(): number {\n try {\n return this._bn.toNumber();\n } catch (error) {\n errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });\n }\n return null;\n }\n\n toString(): string {\n return this._bn.toString(10);\n }\n\n toHexString(): string {\n var hex = this._bn.toString(16);\n if (hex.length % 2) { hex = '0' + hex; }\n return '0x' + hex;\n }\n}\n\nexport function isBigNumber(value: any): boolean {\n return (value._bn && value._bn.mod);\n}\n\nexport function bigNumberify(value: BigNumberish): BigNumber {\n if (_isBigNumber(value)) { return value; }\n return new BigNumber(value);\n}\n\nexport const ConstantNegativeOne: BigNumber = bigNumberify(-1);\nexport const ConstantZero: BigNumber = bigNumberify(0);\nexport const ConstantOne: BigNumber = bigNumberify(1);\nexport const ConstantTwo: BigNumber = bigNumberify(2);\nexport const ConstantWeiPerEther: BigNumber = bigNumberify('1000000000000000000');\n","//See: https://github.com/ethereum/wiki/wiki/RLP\n\n\nimport { arrayify, Arrayish, hexlify } from './bytes';\n\nfunction arrayifyInteger(value: number): Array {\n var result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\n\nfunction unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {\n var result = 0;\n for (var i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\n\nfunction _encode(object: Array | string): Array {\n if (Array.isArray(object)) {\n var payload: Array = [];\n object.forEach(function(child) {\n payload = payload.concat(_encode(child));\n });\n\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length)\n return payload;\n }\n\n var length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n\n return length.concat(payload);\n\n }\n\n let data: Array = Array.prototype.slice.call(arrayify(object));\n\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n\n } else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n\n var length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n\n return length.concat(data);\n}\n\nexport function encode(object: any): string {\n return hexlify(_encode(object));\n}\n\ntype Decoded = {\n result: any;\n consumed: number;\n};\n\nfunction _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {\n var result = [];\n\n while (childOffset < offset + 1 + length) {\n var decoded = _decode(data, childOffset);\n\n result.push(decoded.result);\n\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n throw new Error('invalid rlp');\n }\n }\n\n return {consumed: (1 + length), result: result};\n}\n\n// returns { consumed: number, result: Object }\nfunction _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {\n if (data.length === 0) { throw new Error('invalid rlp data'); }\n\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n var lengthLength = data[offset] - 0xf7;\n if (offset + 1 + lengthLength > data.length) {\n throw new Error('too short');\n }\n\n var length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n throw new Error('to short');\n }\n\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n\n } else if (data[offset] >= 0xc0) {\n var length = data[offset] - 0xc0;\n if (offset + 1 + length > data.length) {\n throw new Error('invalid rlp data');\n }\n\n return _decodeChildren(data, offset, offset + 1, length);\n\n } else if (data[offset] >= 0xb8) {\n var lengthLength = data[offset] - 0xb7;\n if (offset + 1 + lengthLength > data.length) {\n throw new Error('invalid rlp data');\n }\n\n var length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n throw new Error('invalid rlp data');\n }\n\n var result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result }\n\n } else if (data[offset] >= 0x80) {\n var length = data[offset] - 0x80;\n if (offset + 1 + length > data.length) {\n throw new Error('invlaid rlp data');\n }\n\n var result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result }\n }\n return { consumed: 1, result: hexlify(data[offset]) };\n}\n\nexport function decode(data: Arrayish): any {\n let bytes = arrayify(data);\n var decoded = _decode(bytes, 0);\n if (decoded.consumed !== bytes.length) {\n throw new Error('invalid rlp data');\n }\n return decoded.result;\n}\n\n","'use strict';\n\n// We use this for base 36 maths\nimport BN from 'bn.js';\n\nimport { BigNumber } from './bignumber';\nimport { arrayify, Arrayish, stripZeros, hexlify } from './bytes';\nimport { keccak256 } from './keccak256';\nimport { encode } from './rlp';\n\nimport errors = require('./errors');\n\n\nfunction getChecksumAddress(address: string): string {\n if (typeof(address) !== 'string' || !address.match(/^0x[0-9A-Fa-f]{40}$/)) {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n\n address = address.toLowerCase();\n\n let chars = address.substring(2).split('');\n\n let hashed = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n hashed[i] = chars[i].charCodeAt(0);\n }\n hashed = arrayify(keccak256(hashed));\n\n for (var i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return '0x' + chars.join('');\n}\n\n// Shims for environments that are missing some required constants and functions\nvar MAX_SAFE_INTEGER: number = 0x1fffffffffffff;\n\nfunction log10(x: number): number {\n if (Math.log10) { return Math.log10(x); }\n return Math.log(x) / Math.LN10;\n}\n\n\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n\n// Create lookup table\nvar ibanLookup: { [character: string]: string } = {};\nfor (var i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }\nfor (var i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }\n\n// How many decimal digits can we process? (for 64-bit float, this is 15)\nvar safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\n\nfunction ibanChecksum(address: string): string {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + '00';\n\n var expanded = '';\n address.split('').forEach(function(c) {\n expanded += ibanLookup[c];\n });\n\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits){\n var block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n\n var checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) { checksum = '0' + checksum; }\n\n return checksum;\n};\n\nexport function getAddress(address: string): string {\n var result = null;\n\n if (typeof(address) !== 'string') {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n\n // Missing the 0x prefix\n if (address.substring(0, 2) !== '0x') { address = '0x' + address; }\n\n result = getChecksumAddress(address);\n\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n errors.throwError('bad address checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n\n // Maybe ICAP? (we only support direct mode)\n } else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n errors.throwError('bad icap checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n\n result = (new BN.BN(address.substring(4), 36)).toString(16);\n while (result.length < 40) { result = '0' + result; }\n result = getChecksumAddress('0x' + result);\n\n } else {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n\n return result;\n}\n\nexport function getIcapAddress(address: string): string {\n var base36 = (new BN.BN(getAddress(address).substring(2), 16)).toString(36).toUpperCase();\n while (base36.length < 30) { base36 = '0' + base36; }\n return 'XE' + ibanChecksum('XE00' + base36) + base36;\n}\n\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getContractAddress(transaction: { from: string, nonce: Arrayish | BigNumber | number }) {\n if (!transaction.from) { throw new Error('missing from address'); }\n var nonce = transaction.nonce;\n\n return getAddress('0x' + keccak256(encode([\n getAddress(transaction.from),\n stripZeros(hexlify(nonce))\n ])).substring(26));\n}\n\n","'use strict';\n\nimport { arrayify, Arrayish } from './bytes';\n\nexport enum UnicodeNormalizationForm {\n current = '',\n NFC = 'NFC',\n NFD = 'NFD',\n NFKC = 'NFKC',\n NFKD = 'NFKD'\n};\n\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Uint8Array {\n\n if (form != UnicodeNormalizationForm.current) {\n str = str.normalize(form);\n }\n\n var result = [];\n var offset = 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c < 128) {\n result[offset++] = c;\n } else if (c < 2048) {\n result[offset++] = (c >> 6) | 192;\n result[offset++] = (c & 63) | 128;\n } else if (((c & 0xFC00) == 0xD800) && (i + 1) < str.length && ((str.charCodeAt(i + 1) & 0xFC00) == 0xDC00)) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);\n result[offset++] = (c >> 18) | 240;\n result[offset++] = ((c >> 12) & 63) | 128;\n result[offset++] = ((c >> 6) & 63) | 128;\n result[offset++] = (c & 63) | 128;\n } else {\n result[offset++] = (c >> 12) | 224;\n result[offset++] = ((c >> 6) & 63) | 128;\n result[offset++] = (c & 63) | 128;\n }\n }\n\n return arrayify(result);\n};\n\n\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nexport function toUtf8String(bytes: Arrayish): string {\n bytes = arrayify(bytes);\n\n var result = '';\n var i = 0;\n\n // Invalid bytes are ignored\n while(i < bytes.length) {\n var c = bytes[i++];\n if (c >> 7 == 0) {\n // 0xxx xxxx\n result += String.fromCharCode(c);\n continue;\n }\n\n // Invalid starting byte\n if (c >> 6 == 0x02) { continue; }\n\n // Multibyte; how many bytes left for thus character?\n var extraLength = null;\n if (c >> 5 == 0x06) {\n extraLength = 1;\n } else if (c >> 4 == 0x0e) {\n extraLength = 2;\n } else if (c >> 3 == 0x1e) {\n extraLength = 3;\n } else if (c >> 2 == 0x3e) {\n extraLength = 4;\n } else if (c >> 1 == 0x7e) {\n extraLength = 5;\n } else {\n continue;\n }\n\n // Do we have enough bytes in our data?\n if (i + extraLength > bytes.length) {\n\n // If there is an invalid unprocessed byte, try to continue\n for (; i < bytes.length; i++) {\n if (bytes[i] >> 6 != 0x02) { break; }\n }\n if (i != bytes.length) continue;\n\n // All leftover bytes are valid.\n return result;\n }\n\n // Remove the UTF-8 prefix from the char (res)\n var res = c & ((1 << (8 - extraLength - 1)) - 1);\n\n var count;\n for (count = 0; count < extraLength; count++) {\n var nextChar = bytes[i++];\n\n // Is the char valid multibyte part?\n if (nextChar >> 6 != 0x02) {break;};\n res = (res << 6) | (nextChar & 0x3f);\n }\n\n if (count != extraLength) {\n i--;\n continue;\n }\n\n if (res <= 0xffff) {\n result += String.fromCharCode(res);\n continue;\n }\n\n res -= 0x10000;\n result += String.fromCharCode(((res >> 10) & 0x3ff) + 0xd800, (res & 0x3ff) + 0xdc00);\n }\n\n return result;\n}\n\n","'use strict';\n\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n\nimport { getAddress } from './address';\nimport { bigNumberify, BigNumberish } from './bignumber';\nimport { arrayify, Arrayish, concat, hexlify, padZeros } from './bytes';\nimport { toUtf8Bytes, toUtf8String } from './utf8';\nimport { defineReadOnly, jsonCopy } from './properties';\n\nimport * as errors from './errors';\n\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nconst paramTypeArray = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\n\n// @TODO: Add enum for param types\nexport type CoerceFunc = (type: string, value: any) => any;\nexport type ParamType = { name?: string, type: string, indexed?: boolean, components?: Array };\n\nexport const defaultCoerceFunc: CoerceFunc = function(type: string, value: any): any {\n var match = type.match(paramTypeNumber)\n if (match && parseInt(match[2]) <= 48) { return value.toNumber(); }\n return value;\n}\n\n\n///////////////////////////////////\n// Parsing for Solidity Signatures\n\nconst regexParen = new RegExp(\"^([^)(]*)\\\\((.*)\\\\)([^)(]*)$\");\nconst regexIdentifier = new RegExp(\"^[A-Za-z_][A-Za-z0-9_]*$\");\n\nfunction verifyType(type: string): string {\n\n // These need to be transformed to their full description\n if (type.match(/^uint($|[^1-9])/)) {\n type = 'uint256' + type.substring(4);\n } else if (type.match(/^int($|[^1-9])/)) {\n type = 'int256' + type.substring(3);\n }\n\n return type;\n}\n\ntype ParseState = {\n allowArray?: boolean,\n allowName?: boolean,\n allowParams?: boolean,\n allowType?: boolean,\n readArray?: boolean,\n};\n\ntype ParseNode = {\n parent?: any,\n type?: string,\n name?: string,\n state?: ParseState,\n indexed?: boolean,\n components?: Array\n};\n\n\nfunction parseParam(param: string, allowIndexed?: boolean): ParamType {\n function throwError(i: number) {\n throw new Error('unexpected character \"' + param[i] + '\" at position ' + i + ' in \"' + param + '\"');\n }\n\n var parent: ParseNode = { type: '', name: '', state: { allowType: true } };\n var node = parent;\n\n for (var i = 0; i < param.length; i++) {\n var c = param[i];\n switch (c) {\n case '(':\n if (!node.state.allowParams) { throwError(i); }\n node.state.allowType = false;\n node.type = verifyType(node.type);\n node.components = [ { type: '', name: '', parent: node, state: { allowType: true } } ];\n node = node.components[0];\n break;\n\n case ')':\n delete node.state;\n node.type = verifyType(node.type);\n\n var child = node;\n node = node.parent;\n if (!node) { throwError(i); }\n delete child.parent;\n node.state.allowParams = false;\n node.state.allowName = true;\n node.state.allowArray = true;\n break;\n\n case ',':\n delete node.state;\n node.type = verifyType(node.type);\n\n var sibling: ParseNode = { type: '', name: '', parent: node.parent, state: { allowType: true } };\n node.parent.components.push(sibling);\n delete node.parent;\n node = sibling;\n break;\n\n // Hit a space...\n case ' ':\n\n // If reading type, the type is done and may read a param or name\n if (node.state.allowType) {\n if (node.type !== '') {\n node.type = verifyType(node.type);\n delete node.state.allowType;\n node.state.allowName = true;\n node.state.allowParams = true;\n }\n }\n\n // If reading name, the name is done\n if (node.state.allowName) {\n if (node.name !== '') {\n if (allowIndexed && node.name === 'indexed') {\n node.indexed = true;\n node.name = '';\n } else {\n node.state.allowName = false;\n }\n }\n }\n\n break;\n\n case '[':\n if (!node.state.allowArray) { throwError(i); }\n\n node.type += c;\n\n node.state.allowArray = false;\n node.state.allowName = false;\n node.state.readArray = true;\n break;\n\n case ']':\n if (!node.state.readArray) { throwError(i); }\n\n node.type += c;\n\n node.state.readArray = false;\n node.state.allowArray = true;\n node.state.allowName = true;\n break;\n\n default:\n if (node.state.allowType) {\n node.type += c;\n node.state.allowParams = true;\n node.state.allowArray = true;\n } else if (node.state.allowName) {\n node.name += c;\n delete node.state.allowArray;\n } else if (node.state.readArray) {\n node.type += c;\n } else {\n throwError(i);\n }\n }\n }\n\n if (node.parent) { throw new Error(\"unexpected eof\"); }\n\n delete parent.state;\n parent.type = verifyType(parent.type);\n\n return (parent);\n}\n\n// @TODO: should this just be a combined Fragment?\n\nexport type EventFragment = {\n type: string\n name: string,\n\n anonymous: boolean,\n\n inputs: Array,\n};\n\nexport type FunctionFragment = {\n type: string\n name: string,\n\n constant: boolean,\n\n inputs: Array,\n outputs: Array,\n\n payable: boolean,\n stateMutability: string,\n};\n\n// @TODO: Better return type\nfunction parseSignatureEvent(fragment: string): EventFragment {\n\n var abi: EventFragment = {\n anonymous: false,\n inputs: [],\n name: '',\n type: 'event'\n }\n\n var match = fragment.match(regexParen);\n if (!match) { throw new Error('invalid event: ' + fragment); }\n\n abi.name = match[1].trim();\n\n splitNesting(match[2]).forEach(function(param) {\n param = parseParam(param, true);\n param.indexed = !!param.indexed;\n abi.inputs.push(param);\n });\n\n match[3].split(' ').forEach(function(modifier) {\n switch(modifier) {\n case 'anonymous':\n abi.anonymous = true;\n break;\n case '':\n break;\n default:\n console.log('unknown modifier: ' + modifier);\n }\n });\n\n if (abi.name && !abi.name.match(regexIdentifier)) {\n throw new Error('invalid identifier: \"' + abi.name + '\"');\n }\n\n return abi;\n}\n\nfunction parseSignatureFunction(fragment: string): FunctionFragment {\n var abi: FunctionFragment = {\n constant: false,\n inputs: [],\n name: '',\n outputs: [],\n payable: false,\n stateMutability: null,\n type: 'function'\n };\n\n var comps = fragment.split(' returns ');\n var left = comps[0].match(regexParen);\n if (!left) { throw new Error('invalid signature'); }\n\n abi.name = left[1].trim();\n if (!abi.name.match(regexIdentifier)) {\n throw new Error('invalid identifier: \"' + left[1] + '\"');\n }\n\n splitNesting(left[2]).forEach(function(param) {\n abi.inputs.push(parseParam(param));\n });\n\n left[3].split(' ').forEach(function(modifier) {\n switch (modifier) {\n case 'constant':\n abi.constant = true;\n break;\n case 'payable':\n abi.payable = true;\n break;\n case 'pure':\n abi.constant = true;\n abi.stateMutability = 'pure';\n break;\n case 'view':\n abi.constant = true;\n abi.stateMutability = 'view';\n break;\n case '':\n break;\n default:\n console.log('unknown modifier: ' + modifier);\n }\n });\n\n // We have outputs\n if (comps.length > 1) {\n var right = comps[1].match(regexParen);\n if (right[1].trim() != '' || right[3].trim() != '') {\n throw new Error('unexpected tokens');\n }\n\n splitNesting(right[2]).forEach(function(param) {\n abi.outputs.push(parseParam(param));\n });\n }\n\n return abi;\n}\n\nexport function parseParamType(type: string): ParamType {\n return parseParam(type, true);\n}\n\nexport function parseSignature(fragment: string): EventFragment | FunctionFragment {\n if(typeof(fragment) === 'string') {\n // Make sure the \"returns\" is surrounded by a space and all whitespace is exactly one space\n fragment = fragment.replace(/\\(/g, ' (').replace(/\\)/g, ') ').replace(/\\s+/g, ' ');\n fragment = fragment.trim();\n\n if (fragment.substring(0, 6) === 'event ') {\n return parseSignatureEvent(fragment.substring(6).trim());\n\n } else {\n if (fragment.substring(0, 9) === 'function ') {\n fragment = fragment.substring(9);\n }\n return parseSignatureFunction(fragment.trim());\n }\n }\n\n throw new Error('unknown signature');\n}\n\n\n///////////////////////////////////\n// Coders\n\ntype DecodedResult = { consumed: number, value: any };\nabstract class Coder {\n readonly coerceFunc: CoerceFunc;\n readonly name: string;\n readonly type: string;\n readonly localName: string;\n readonly dynamic: boolean;\n constructor(coerceFunc: CoerceFunc, name: string, type: string, localName: string, dynamic: boolean) {\n this.coerceFunc = coerceFunc;\n this.name = name;\n this.type = type;\n this.localName = localName;\n this.dynamic = dynamic;\n }\n\n abstract encode(value: any): Uint8Array;\n abstract decode(data: Uint8Array, offset: number): DecodedResult;\n}\n\nclass CoderNull extends Coder {\n constructor(coerceFunc: CoerceFunc, localName: string) {\n super(coerceFunc, 'null', '', localName, false);\n }\n\n encode(value: any): Uint8Array {\n return arrayify([]);\n }\n\n decode(data: Uint8Array, offset: number): DecodedResult {\n if (offset > data.length) { throw new Error('invalid null'); }\n return {\n consumed: 0,\n value: this.coerceFunc('null', undefined)\n }\n }\n}\n\nclass CoderNumber extends Coder {\n readonly size: number;\n readonly signed: boolean;\n constructor(coerceFunc: CoerceFunc, size: number, signed: boolean, localName: string) {\n const name = ((signed ? 'int': 'uint') + (size * 8));\n super(coerceFunc, name, name, localName, false);\n\n this.size = size;\n this.signed = signed;\n }\n\n encode(value: BigNumberish): Uint8Array {\n try {\n let v = bigNumberify(value);\n v = v.toTwos(this.size * 8).maskn(this.size * 8);\n //value = value.toTwos(size * 8).maskn(size * 8);\n if (this.signed) {\n v = v.fromTwos(this.size * 8).toTwos(256);\n }\n return padZeros(arrayify(v), 32);\n\n } catch (error) {\n errors.throwError('invalid number value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof(value),\n value: value\n });\n }\n return null;\n }\n\n decode(data: Uint8Array, offset: number): DecodedResult {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for ' + this.name + ' type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: hexlify(data.slice(offset, offset + 32))\n });\n }\n var junkLength = 32 - this.size;\n var value = bigNumberify(data.slice(offset + junkLength, offset + 32));\n if (this.signed) {\n value = value.fromTwos(this.size * 8);\n } else {\n value = value.maskn(this.size * 8);\n }\n\n return {\n consumed: 32,\n value: this.coerceFunc(this.name, value),\n }\n }\n}\nvar uint256Coder = new CoderNumber(function(type: string, value: any) { return value; }, 32, false, 'none');\n\nclass CoderBoolean extends Coder {\n constructor(coerceFunc: CoerceFunc, localName: string) {\n super(coerceFunc, 'bool', 'bool', localName, false);\n }\n\n encode(value: boolean): Uint8Array {\n return uint256Coder.encode(!!value ? 1: 0);\n }\n\n decode(data: Uint8Array, offset: number): DecodedResult {\n try {\n var result = uint256Coder.decode(data, offset);\n } catch (error) {\n if (error.reason === 'insufficient data for uint256 type') {\n errors.throwError('insufficient data for boolean type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'boolean',\n value: error.value\n });\n }\n throw error;\n }\n return {\n consumed: result.consumed,\n value: this.coerceFunc('bool', !result.value.isZero())\n }\n }\n}\n\nclass CoderFixedBytes extends Coder {\n readonly length: number;\n constructor(coerceFunc: CoerceFunc, length: number, localName: string) {\n const name = ('bytes' + length);\n super(coerceFunc, name, name, localName, false);\n this.length = length;\n }\n\n encode(value: Arrayish): Uint8Array {\n var result = new Uint8Array(32);\n\n try {\n let data = arrayify(value);\n if (data.length > 32) { throw new Error(); }\n result.set(data);\n } catch (error) {\n errors.throwError('invalid ' + this.name + ' value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof(value),\n value: (error.value || value)\n });\n }\n\n return result;\n }\n\n decode(data: Uint8Array, offset: number): DecodedResult {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for ' + name + ' type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: hexlify(data.slice(offset, offset + 32))\n });\n }\n\n return {\n consumed: 32,\n value: this.coerceFunc(this.name, hexlify(data.slice(offset, offset + this.length)))\n }\n }\n}\n\nclass CoderAddress extends Coder {\n constructor(coerceFunc: CoerceFunc, localName: string) {\n super(coerceFunc, 'address', 'address', localName, false);\n }\n encode(value: string): Uint8Array {\n let result = new Uint8Array(32);\n try {\n result.set(arrayify(getAddress(value)), 12);\n } catch (error) {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof(value),\n value: value\n });\n }\n return result;\n }\n decode(data: Uint8Array, offset: number): DecodedResult {\n if (data.length < offset + 32) {\n errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'address',\n value: hexlify(data.slice(offset, offset + 32))\n });\n }\n return {\n consumed: 32,\n value: this.coerceFunc('address', getAddress(hexlify(data.slice(offset + 12, offset + 32))))\n }\n }\n}\n\nfunction _encodeDynamicBytes(value: Uint8Array): Uint8Array {\n var dataLength = 32 * Math.ceil(value.length / 32);\n var padding = new Uint8Array(dataLength - value.length);\n\n return concat([\n uint256Coder.encode(value.length),\n value,\n padding\n ]);\n}\n\nfunction _decodeDynamicBytes(data: Uint8Array, offset: number, localName: string): DecodedResult {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for dynamicBytes length', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: hexlify(data.slice(offset, offset + 32))\n });\n }\n\n var length = uint256Coder.decode(data, offset).value;\n try {\n length = length.toNumber();\n } catch (error) {\n errors.throwError('dynamic bytes count too large', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: length.toString()\n });\n }\n\n if (data.length < offset + 32 + length) {\n errors.throwError('insufficient data for dynamicBytes type', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: hexlify(data.slice(offset, offset + 32 + length))\n });\n }\n\n return {\n consumed: 32 + 32 * Math.ceil(length / 32),\n value: data.slice(offset + 32, offset + 32 + length),\n }\n}\n\nclass CoderDynamicBytes extends Coder {\n constructor(coerceFunc: CoerceFunc, localName: string) {\n super(coerceFunc, 'bytes', 'bytes', localName, true);\n }\n encode(value: Arrayish): Uint8Array {\n try {\n return _encodeDynamicBytes(arrayify(value));\n } catch (error) {\n errors.throwError('invalid bytes value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof(value),\n value: error.value\n });\n }\n return null;\n }\n\n decode(data: Uint8Array, offset: number): DecodedResult {\n var result = _decodeDynamicBytes(data, offset, this.localName);\n result.value = this.coerceFunc('bytes', hexlify(result.value));\n return result;\n }\n}\n\nclass CoderString extends Coder {\n constructor(coerceFunc: CoerceFunc, localName: string) {\n super(coerceFunc, 'string', 'string', localName, true);\n }\n\n encode(value: string): Uint8Array {\n if (typeof(value) !== 'string') {\n errors.throwError('invalid string value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof(value),\n value: value\n });\n }\n return _encodeDynamicBytes(toUtf8Bytes(value));\n }\n\n decode(data: Uint8Array, offset: number): DecodedResult {\n var result = _decodeDynamicBytes(data, offset, this.localName);\n result.value = this.coerceFunc('string', toUtf8String(result.value));\n return result;\n }\n}\n\nfunction alignSize(size: number): number {\n return 32 * Math.ceil(size / 32);\n}\n\nfunction pack(coders: Array, values: Array): Uint8Array {\n\n if (Array.isArray(values)) {\n // do nothing\n\n } else if (values && typeof(values) === 'object') {\n var arrayValues: Array = [];\n coders.forEach(function(coder) {\n arrayValues.push((values)[coder.localName]);\n });\n values = arrayValues;\n\n } else {\n errors.throwError('invalid tuple value', errors.INVALID_ARGUMENT, {\n coderType: 'tuple',\n type: typeof(values),\n value: values\n });\n }\n\n if (coders.length !== values.length) {\n errors.throwError('types/value length mismatch', errors.INVALID_ARGUMENT, {\n coderType: 'tuple',\n value: values\n });\n }\n\n var parts: Array<{ dynamic: boolean, value: any }> = [];\n\n coders.forEach(function(coder, index) {\n parts.push({ dynamic: coder.dynamic, value: coder.encode(values[index]) });\n });\n\n var staticSize = 0, dynamicSize = 0;\n parts.forEach(function(part) {\n if (part.dynamic) {\n staticSize += 32;\n dynamicSize += alignSize(part.value.length);\n } else {\n staticSize += alignSize(part.value.length);\n }\n });\n\n var offset = 0, dynamicOffset = staticSize;\n var data = new Uint8Array(staticSize + dynamicSize);\n\n parts.forEach(function(part) {\n if (part.dynamic) {\n //uint256Coder.encode(dynamicOffset).copy(data, offset);\n data.set(uint256Coder.encode(dynamicOffset), offset);\n offset += 32;\n\n //part.value.copy(data, dynamicOffset); @TODO\n data.set(part.value, dynamicOffset);\n dynamicOffset += alignSize(part.value.length);\n } else {\n //part.value.copy(data, offset); @TODO\n data.set(part.value, offset);\n offset += alignSize(part.value.length);\n }\n });\n\n return data;\n}\n\nfunction unpack(coders: Array, data: Uint8Array, offset: number): DecodedResult {\n var baseOffset = offset;\n var consumed = 0;\n var value: any = [];\n coders.forEach(function(coder) {\n if (coder.dynamic) {\n var dynamicOffset = uint256Coder.decode(data, offset);\n var result = coder.decode(data, baseOffset + dynamicOffset.value.toNumber());\n // The dynamic part is leap-frogged somewhere else; doesn't count towards size\n result.consumed = dynamicOffset.consumed;\n } else {\n var result = coder.decode(data, offset);\n }\n\n if (result.value != undefined) {\n value.push(result.value);\n }\n\n offset += result.consumed;\n consumed += result.consumed;\n });\n\n coders.forEach(function(coder: Coder, index: number) {\n let name: string = coder.localName;\n if (!name) { return; }\n\n if (name === 'length') { name = '_length'; }\n\n if (value[name] != null) { return; }\n\n value[name] = value[index];\n });\n\n return {\n value: value,\n consumed: consumed\n }\n}\n\nclass CoderArray extends Coder {\n readonly coder: Coder;\n readonly length: number;\n constructor(coerceFunc: CoerceFunc, coder: Coder, length: number, localName: string) {\n const type = (coder.type + '[' + (length >= 0 ? length: '') + ']');\n const dynamic = (length === -1 || coder.dynamic);\n super(coerceFunc, 'array', type, localName, dynamic);\n\n this.coder = coder;\n this.length = length;\n }\n\n encode(value: Array): Uint8Array {\n if (!Array.isArray(value)) {\n errors.throwError('expected array value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n type: typeof(value),\n value: value\n });\n }\n\n var count = this.length;\n\n var result = new Uint8Array(0);\n if (count === -1) {\n count = value.length;\n result = uint256Coder.encode(count);\n }\n\n if (count !== value.length) {\n errors.throwError('array value length mismatch', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n count: value.length,\n expectedCount: count,\n value: value\n });\n }\n\n var coders = [];\n for (var i = 0; i < value.length; i++) { coders.push(this.coder); }\n\n return concat([result, pack(coders, value)]);\n }\n\n decode(data: Uint8Array, offset: number) {\n // @TODO:\n //if (data.length < offset + length * 32) { throw new Error('invalid array'); }\n\n var consumed = 0;\n\n var count = this.length;\n\n if (count === -1) {\n try {\n var decodedLength = uint256Coder.decode(data, offset);\n } catch (error) {\n errors.throwError('insufficient data for dynamic array length', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n value: error.value\n });\n }\n try {\n count = decodedLength.value.toNumber();\n } catch (error) {\n errors.throwError('array count too large', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n value: decodedLength.value.toString()\n });\n }\n consumed += decodedLength.consumed;\n offset += decodedLength.consumed;\n }\n\n var coders = [];\n for (var i = 0; i < count; i++) { coders.push(this.coder); }\n\n var result = unpack(coders, data, offset);\n result.consumed += consumed;\n result.value = this.coerceFunc(this.type, result.value);\n return result;\n }\n}\n\nclass CoderTuple extends Coder {\n readonly coders: Array;\n constructor(coerceFunc: CoerceFunc, coders: Array, localName: string) {\n var dynamic = false;\n var types: Array = [];\n coders.forEach(function(coder) {\n if (coder.dynamic) { dynamic = true; }\n types.push(coder.type);\n });\n var type = ('tuple(' + types.join(',') + ')');\n\n super(coerceFunc, 'tuple', type, localName, dynamic);\n this.coders = coders;\n }\n encode(value: Array): Uint8Array {\n return pack(this.coders, value);\n }\n decode(data: Uint8Array, offset: number): DecodedResult {\n var result = unpack(this.coders, data, offset);\n result.value = this.coerceFunc(this.type, result.value);\n return result;\n }\n}\n/*\nfunction getTypes(coders) {\n var type = coderTuple(coders).type;\n return type.substring(6, type.length - 1);\n}\n*/\nfunction splitNesting(value: string): Array {\n var result = [];\n var accum = '';\n var depth = 0;\n for (var offset = 0; offset < value.length; offset++) {\n var c = value[offset];\n if (c === ',' && depth === 0) {\n result.push(accum);\n accum = '';\n } else {\n accum += c;\n if (c === '(') {\n depth++;\n } else if (c === ')') {\n depth--;\n if (depth === -1) {\n throw new Error('unbalanced parenthsis');\n }\n }\n }\n }\n result.push(accum);\n\n return result;\n}\n\n// @TODO: Is there a way to return \"class\"?\nconst paramTypeSimple: { [key: string]: any } = {\n address: CoderAddress,\n bool: CoderBoolean,\n string: CoderString,\n bytes: CoderDynamicBytes,\n};\n\nfunction getTupleParamCoder(coerceFunc: CoerceFunc, components: Array, localName: string): CoderTuple {\n if (!components) { components = []; }\n var coders: Array = [];\n components.forEach(function(component) {\n coders.push(getParamCoder(coerceFunc, component));\n });\n\n return new CoderTuple(coerceFunc, coders, localName);\n}\n\nfunction getParamCoder(coerceFunc: CoerceFunc, param: ParamType): Coder {\n var coder = paramTypeSimple[param.type];\n if (coder) { return new coder(coerceFunc, param.name); }\n var match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n errors.throwError('invalid ' + match[1] + ' bit length', errors.INVALID_ARGUMENT, {\n arg: 'param',\n value: param\n });\n }\n return new CoderNumber(coerceFunc, size / 8, (match[1] === 'int'), param.name);\n }\n\n var match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n errors.throwError('invalid bytes length', errors.INVALID_ARGUMENT, {\n arg: 'param',\n value: param\n });\n }\n return new CoderFixedBytes(coerceFunc, size, param.name);\n }\n\n var match = param.type.match(paramTypeArray);\n if (match) {\n let size = parseInt(match[2] || \"-1\");\n param.type = match[1];\n return new CoderArray(coerceFunc, getParamCoder(coerceFunc, param), size, param.name);\n }\n\n if (param.type.substring(0, 5) === 'tuple') {\n return getTupleParamCoder(coerceFunc, param.components, param.name);\n }\n\n if (param.type === '') {\n return new CoderNull(coerceFunc, param.name);\n }\n\n errors.throwError('invalid type', errors.INVALID_ARGUMENT, {\n arg: 'type',\n value: param.type\n });\n\n return null;\n}\n\n\nexport class AbiCoder {\n readonly coerceFunc: CoerceFunc;\n constructor(coerceFunc?: CoerceFunc) {\n errors.checkNew(this, AbiCoder);\n\n if (!coerceFunc) { coerceFunc = defaultCoerceFunc; }\n defineReadOnly(this, 'coerceFunc', coerceFunc);\n }\n\n encode(types: Array, values: Array): string {\n\n if (types.length !== values.length) {\n errors.throwError('types/values length mismatch', errors.INVALID_ARGUMENT, {\n count: { types: types.length, values: values.length },\n value: { types: types, values: values }\n });\n }\n\n var coders: Array = [];\n types.forEach(function(type) {\n // Convert types to type objects\n // - \"uint foo\" => { type: \"uint\", name: \"foo\" }\n // - \"tuple(uint, uint)\" => { type: \"tuple\", components: [ { type: \"uint\" }, { type: \"uint\" }, ] }\n\n let typeObject: ParamType = null;\n if (typeof(type) === 'string') {\n typeObject = parseParam(type);\n } else {\n typeObject = jsonCopy(type);\n }\n\n coders.push(getParamCoder(this.coerceFunc, typeObject));\n\n }, this);\n\n return hexlify(new CoderTuple(this.coerceFunc, coders, '_').encode(values));\n }\n\n decode(types: Array, data: Arrayish): any {\n\n var coders: Array = [];\n types.forEach(function(type) {\n\n // See encode for details\n let typeObject: ParamType = null;\n if (typeof(type) === 'string') {\n typeObject = parseParam(type);\n } else {\n typeObject = jsonCopy(type);\n }\n\n coders.push(getParamCoder(this.coerceFunc, typeObject));\n }, this);\n\n return new CoderTuple(this.coerceFunc, coders, '_').decode(arrayify(data), 0).value;\n }\n}\n\nexport const defaultAbiCoder: AbiCoder = new AbiCoder();\n","'use strict';\n\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n\nimport { defaultAbiCoder, EventFragment, FunctionFragment, ParamType, parseSignature } from '../utils/abi-coder';\nimport { BigNumber, bigNumberify, BigNumberish } from '../utils/bignumber';\nimport { arrayify, concat, isHexString } from '../utils/bytes';\nimport { keccak256 } from '../utils/keccak256';\nimport { toUtf8Bytes } from '../utils/utf8';\nimport { defineReadOnly, defineFrozen } from '../utils/properties';\n\nimport * as errors from '../utils/errors';\n\n// @TODO: Replace with a new abiCode.formatSignature method\nfunction parseParams(params: Array): { names: Array, types: Array } {\n var names: Array = [];\n var types: Array = [];\n\n params.forEach(function(param) {\n if (param.components != null) {\n if (param.type.substring(0, 5) !== 'tuple') {\n throw new Error('internal error; report on GitHub');\n }\n var suffix = '';\n var arrayBracket = param.type.indexOf('[');\n if (arrayBracket >= 0) { suffix = param.type.substring(arrayBracket); }\n\n var result = parseParams(param.components);\n names.push({ name: (param.name || null), names: result.names });\n types.push('tuple(' + result.types.join(',') + ')' + suffix)\n } else {\n names.push(param.name || null);\n types.push(param.type);\n }\n });\n\n return {\n names: names,\n types: types\n }\n}\n\nexport class Description {\n readonly type: string;\n constructor(info: any) {\n for (var key in info) {\n let value = info[key];\n if (value != null && typeof(value) === 'object') {\n defineFrozen(this, key, info[key]);\n } else {\n defineReadOnly(this, key, info[key]);\n }\n }\n }\n}\n\n// @TOOD: Make this a description\nexport class Indexed extends Description {\n readonly hash: string;\n}\n\nexport class DeployDescription extends Description {\n readonly inputs: Array;\n readonly payable: boolean;\n\n encode(bytecode: string, params: Array): string {\n if (!isHexString(bytecode)) {\n errors.throwError('invalid contract bytecode', errors.INVALID_ARGUMENT, {\n arg: 'bytecode',\n type: typeof(bytecode),\n value: bytecode\n });\n }\n\n if (params.length < this.inputs.length) {\n errors.throwError('missing constructor argument', errors.MISSING_ARGUMENT, {\n arg: (this.inputs[params.length].name || 'unknown'),\n count: params.length,\n expectedCount: this.inputs.length\n });\n\n } else if (params.length > this.inputs.length) {\n errors.throwError('too many constructor arguments', errors.UNEXPECTED_ARGUMENT, {\n count: params.length,\n expectedCount: this.inputs.length\n });\n }\n\n try {\n return (bytecode + defaultAbiCoder.encode(this.inputs, params).substring(2));\n } catch (error) {\n errors.throwError('invalid constructor argument', errors.INVALID_ARGUMENT, {\n arg: error.arg,\n reason: error.reason,\n value: error.value\n });\n }\n\n return null;\n }\n}\n\nexport class FunctionDescription extends Description {\n readonly name: string;\n readonly signature: string;\n readonly sighash: string;\n\n readonly inputs: Array;\n readonly outputs: Array;\n readonly payable: boolean;\n\n encode(params: Array): string {\n if (params.length < this.inputs.length) {\n errors.throwError('missing input argument', errors.MISSING_ARGUMENT, {\n arg: (this.inputs[params.length].name || 'unknown'),\n count: params.length,\n expectedCount: this.inputs.length,\n name: this.name\n });\n } else if (params.length > this.inputs.length) {\n errors.throwError('too many input arguments', errors.UNEXPECTED_ARGUMENT, {\n count: params.length,\n expectedCount: this.inputs.length\n });\n }\n\n try {\n return this.sighash + defaultAbiCoder.encode(this.inputs, params).substring(2);\n } catch (error) {\n errors.throwError('invalid input argument', errors.INVALID_ARGUMENT, {\n arg: error.arg,\n reason: error.reason,\n value: error.value\n });\n }\n\n return null;\n }\n\n decode(data: string): any {\n try {\n return defaultAbiCoder.decode(this.outputs, arrayify(data));\n } catch(error) {\n errors.throwError('invalid data for function output', errors.INVALID_ARGUMENT, {\n arg: 'data',\n errorArg: error.arg,\n errorValue: error.value,\n value: data,\n reason: error.reason\n });\n }\n }\n}\n\nclass Result extends Description {\n [key: string]: any;\n [key: number]: any;\n}\n\nexport class EventDescription extends Description {\n readonly name: string;\n readonly signature: string;\n\n readonly inputs: Array;\n readonly anonymous: boolean;\n readonly topic: string;\n\n decode(data: string, topics?: Array): any {\n // Strip the signature off of non-anonymous topics\n if (topics != null && !this.anonymous) { topics = topics.slice(1); }\n\n let inputIndexed: Array = [];\n let inputNonIndexed: Array = [];\n let inputDynamic: Array = [];\n this.inputs.forEach(function(param, index) {\n\n if (param.indexed) {\n if (param.type === 'string' || param.type === 'bytes' || param.type.indexOf('[') >= 0 || param.type.substring(0, 5) === 'tuple') {\n inputIndexed.push({ type: 'bytes32', name: (param.name || '')});\n inputDynamic.push(true);\n } else {\n inputIndexed.push(param);\n inputDynamic.push(false);\n }\n } else {\n inputNonIndexed.push(param);\n inputDynamic.push(false);\n }\n });\n\n if (topics != null) {\n var resultIndexed = defaultAbiCoder.decode(\n inputIndexed,\n concat(topics)\n );\n }\n\n var resultNonIndexed = defaultAbiCoder.decode(\n inputNonIndexed,\n arrayify(data)\n );\n\n var result = new Result({});\n var nonIndexedIndex = 0, indexedIndex = 0;\n this.inputs.forEach(function(input, index) {\n if (input.indexed) {\n if (topics == null) {\n result[index] = new Indexed({ type: 'indexed', hash: null });\n\n } else if (inputDynamic[index]) {\n result[index] = new Indexed({ type: 'indexed', hash: resultIndexed[indexedIndex++] });\n } else {\n result[index] = resultIndexed[indexedIndex++];\n }\n } else {\n result[index] = resultNonIndexed[nonIndexedIndex++];\n }\n if (input.name) { result[input.name] = result[index]; }\n });\n\n result.length = this.inputs.length;\n\n return result;\n }\n}\n\nclass TransactionDescription extends Description {\n readonly name: string;\n readonly args: Array;\n readonly signature: string;\n readonly sighash: string;\n readonly decode: (data: string) => any;\n readonly value: BigNumber;\n}\n\nclass LogDescription extends Description {\n readonly name: string;\n readonly signature: string;\n readonly topic: string;\n readonly values: Array\n}\n\n\nfunction addMethod(method: any): void {\n switch (method.type) {\n case 'constructor': {\n let description = new DeployDescription({\n inputs: method.inputs,\n payable: (method.payable == null || !!method.payable),\n type: 'deploy'\n });\n\n if (!this.deployFunction) { this.deployFunction = description; }\n\n break;\n }\n\n case 'function': {\n // @TODO: See event\n let signature = '(' + parseParams(method.inputs).types.join(',') + ')';\n signature = signature.replace(/tuple/g, '');\n signature = method.name + signature;\n\n let sighash = keccak256(toUtf8Bytes(signature)).substring(0, 10);\n\n let description = new FunctionDescription({\n inputs: method.inputs,\n outputs: method.outputs,\n\n payable: (method.payable == null || !!method.payable),\n type: ((method.constant) ? 'call': 'transaction'),\n\n signature: signature,\n sighash: sighash,\n });\n\n // Expose the first (and hopefully unique named function\n if (method.name && this.functions[method.name] == null) {\n defineReadOnly(this.functions, method.name, description);\n }\n\n // Expose all methods by their signature, for overloaded functions\n if (this.functions[description.signature] == null) {\n defineReadOnly(this.functions, description.signature, description);\n }\n\n break;\n }\n\n case 'event': {\n // @TODO: method.params instead? As well? Different fomrat?\n //let inputParams = parseParams(method.inputs);\n\n // @TODO: Don't use parseParams (create new function in ABI, formatSignature)\n let signature = '(' + parseParams(method.inputs).types.join(',') + ')';\n signature = signature.replace(/tuple/g, '');\n signature = method.name + signature;\n\n let description = new EventDescription({\n name: method.name,\n signature: signature,\n\n inputs: method.inputs,\n topic: keccak256(toUtf8Bytes(signature)),\n anonymous: (!!method.anonymous),\n\n type: 'event'\n });\n\n // Expose the first (and hopefully unique) event name\n if (method.name && this.events[method.name] == null) {\n defineReadOnly(this.events, method.name, description);\n }\n\n // Expose all events by their signature, for overloaded functions\n if (this.events[description.signature] == null) {\n defineReadOnly(this.events, description.signature, description);\n }\n\n break;\n }\n\n\n case 'fallback':\n // Nothing to do for fallback\n break;\n\n default:\n console.log('WARNING: unsupported ABI type - ' + method.type);\n break;\n }\n}\n\nexport class Interface {\n readonly abi: Array;\n readonly functions: { [ name: string ]: FunctionDescription };\n readonly events: { [ name: string ]: EventDescription };\n readonly deployFunction: DeployDescription;\n\n constructor(abi: Array | string) {\n errors.checkNew(this, Interface);\n\n if (typeof(abi) === 'string') {\n try {\n abi = JSON.parse(abi);\n } catch (error) {\n errors.throwError('could not parse ABI JSON', errors.INVALID_ARGUMENT, {\n arg: 'abi',\n errorMessage: error.message,\n value: abi\n });\n }\n\n if (!Array.isArray(abi)) {\n errors.throwError('invalid abi', errors.INVALID_ARGUMENT, { arg: 'abi', value: abi });\n return null;\n }\n }\n\n defineReadOnly(this, 'functions', { });\n defineReadOnly(this, 'events', { });\n\n // Convert any supported ABI format into a standard ABI format\n let _abi: Array = [];\n abi.forEach((fragment) => {\n if (typeof(fragment) === 'string') {\n fragment = parseSignature(fragment);\n }\n // @TODO: We should probable do some validation; create abiCoder.formatSignature for checking\n _abi.push(fragment);\n });\n\n defineFrozen(this, 'abi', _abi);\n\n _abi.forEach(addMethod, this);\n\n // If there wasn't a constructor, create the default constructor\n if (!this.deployFunction) {\n addMethod.call(this, {type: 'constructor', inputs: []});\n }\n }\n\n parseTransaction(tx: { data: string, value?: BigNumberish }): TransactionDescription {\n var sighash = tx.data.substring(0, 10).toLowerCase();\n for (var name in this.functions) {\n if (name.indexOf('(') === -1) { continue; }\n var func = this.functions[name];\n if (func.sighash === sighash) {\n var result = defaultAbiCoder.decode(func.inputs, '0x' + tx.data.substring(10));\n return new TransactionDescription({\n args: result,\n decode: func.decode,\n name: name,\n signature: func.signature,\n sighash: func.sighash,\n type: 'transaction',\n value: bigNumberify(tx.value || 0),\n });\n }\n }\n\n return null;\n }\n\n parseLog(log: { topics: Array, data: string}): LogDescription {\n for (var name in this.events) {\n if (name.indexOf('(') === -1) { continue; }\n var event = this.events[name];\n if (event.anonymous) { continue; }\n if (event.topic !== log.topics[0]) { continue; }\n\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse and return it?\n\n return new LogDescription({\n name: event.name,\n signature: event.signature,\n topic: event.topic,\n type: 'log',\n values: event.decode(log.data, log.topics)\n });\n }\n\n return null;\n }\n}\n","\n// This gets overriddenby gulp during bip39-XX\nvar exportWordlist = false;\n\nimport { defineReadOnly } from '../utils/properties';\n\nexport abstract class Wordlist {\n locale: string;\n\n constructor(locale: string) {\n defineReadOnly(this, 'locale', locale);\n }\n\n abstract getWord(index: number): string;\n abstract getWordIndex(word: string): number;\n\n // Subclasses may override this\n split(mnemonic: string): Array {\n return mnemonic.toLowerCase().split(/ +/g)\n }\n\n // Subclasses may override this\n join(words: Array): string {\n return words.join(' ');\n }\n}\n\nexport function register(lang: Wordlist): void {\n if (exportWordlist) {\n if (!(global).wordlists) { defineReadOnly(global, 'wordlists', { }); }\n defineReadOnly((global).wordlists, lang.locale, lang);\n }\n}\n","'use strict';\n\nimport { register, Wordlist } from './wordlist';\n\nconst words = \"AbandonAbilityAbleAboutAboveAbsentAbsorbAbstractAbsurdAbuseAccessAccidentAccountAccuseAchieveAcidAcousticAcquireAcrossActActionActorActressActualAdaptAddAddictAddressAdjustAdmitAdultAdvanceAdviceAerobicAffairAffordAfraidAgainAgeAgentAgreeAheadAimAirAirportAisleAlarmAlbumAlcoholAlertAlienAllAlleyAllowAlmostAloneAlphaAlreadyAlsoAlterAlwaysAmateurAmazingAmongAmountAmusedAnalystAnchorAncientAngerAngleAngryAnimalAnkleAnnounceAnnualAnotherAnswerAntennaAntiqueAnxietyAnyApartApologyAppearAppleApproveAprilArchArcticAreaArenaArgueArmArmedArmorArmyAroundArrangeArrestArriveArrowArtArtefactArtistArtworkAskAspectAssaultAssetAssistAssumeAsthmaAthleteAtomAttackAttendAttitudeAttractAuctionAuditAugustAuntAuthorAutoAutumnAverageAvocadoAvoidAwakeAwareAwayAwesomeAwfulAwkwardAxisBabyBachelorBaconBadgeBagBalanceBalconyBallBambooBananaBannerBarBarelyBargainBarrelBaseBasicBasketBattleBeachBeanBeautyBecauseBecomeBeefBeforeBeginBehaveBehindBelieveBelowBeltBenchBenefitBestBetrayBetterBetweenBeyondBicycleBidBikeBindBiologyBirdBirthBitterBlackBladeBlameBlanketBlastBleakBlessBlindBloodBlossomBlouseBlueBlurBlushBoardBoatBodyBoilBombBoneBonusBookBoostBorderBoringBorrowBossBottomBounceBoxBoyBracketBrainBrandBrassBraveBreadBreezeBrickBridgeBriefBrightBringBriskBroccoliBrokenBronzeBroomBrotherBrownBrushBubbleBuddyBudgetBuffaloBuildBulbBulkBulletBundleBunkerBurdenBurgerBurstBusBusinessBusyButterBuyerBuzzCabbageCabinCableCactusCageCakeCallCalmCameraCampCanCanalCancelCandyCannonCanoeCanvasCanyonCapableCapitalCaptainCarCarbonCardCargoCarpetCarryCartCaseCashCasinoCastleCasualCatCatalogCatchCategoryCattleCaughtCauseCautionCaveCeilingCeleryCementCensusCenturyCerealCertainChairChalkChampionChangeChaosChapterChargeChaseChatCheapCheckCheeseChefCherryChestChickenChiefChildChimneyChoiceChooseChronicChuckleChunkChurnCigarCinnamonCircleCitizenCityCivilClaimClapClarifyClawClayCleanClerkCleverClickClientCliffClimbClinicClipClockClogCloseClothCloudClownClubClumpClusterClutchCoachCoastCoconutCodeCoffeeCoilCoinCollectColorColumnCombineComeComfortComicCommonCompanyConcertConductConfirmCongressConnectConsiderControlConvinceCookCoolCopperCopyCoralCoreCornCorrectCostCottonCouchCountryCoupleCourseCousinCoverCoyoteCrackCradleCraftCramCraneCrashCraterCrawlCrazyCreamCreditCreekCrewCricketCrimeCrispCriticCropCrossCrouchCrowdCrucialCruelCruiseCrumbleCrunchCrushCryCrystalCubeCultureCupCupboardCuriousCurrentCurtainCurveCushionCustomCuteCycleDadDamageDampDanceDangerDaringDashDaughterDawnDayDealDebateDebrisDecadeDecemberDecideDeclineDecorateDecreaseDeerDefenseDefineDefyDegreeDelayDeliverDemandDemiseDenialDentistDenyDepartDependDepositDepthDeputyDeriveDescribeDesertDesignDeskDespairDestroyDetailDetectDevelopDeviceDevoteDiagramDialDiamondDiaryDiceDieselDietDifferDigitalDignityDilemmaDinnerDinosaurDirectDirtDisagreeDiscoverDiseaseDishDismissDisorderDisplayDistanceDivertDivideDivorceDizzyDoctorDocumentDogDollDolphinDomainDonateDonkeyDonorDoorDoseDoubleDoveDraftDragonDramaDrasticDrawDreamDressDriftDrillDrinkDripDriveDropDrumDryDuckDumbDuneDuringDustDutchDutyDwarfDynamicEagerEagleEarlyEarnEarthEasilyEastEasyEchoEcologyEconomyEdgeEditEducateEffortEggEightEitherElbowElderElectricElegantElementElephantElevatorEliteElseEmbarkEmbodyEmbraceEmergeEmotionEmployEmpowerEmptyEnableEnactEndEndlessEndorseEnemyEnergyEnforceEngageEngineEnhanceEnjoyEnlistEnoughEnrichEnrollEnsureEnterEntireEntryEnvelopeEpisodeEqualEquipEraEraseErodeErosionErrorEruptEscapeEssayEssenceEstateEternalEthicsEvidenceEvilEvokeEvolveExactExampleExcessExchangeExciteExcludeExcuseExecuteExerciseExhaustExhibitExileExistExitExoticExpandExpectExpireExplainExposeExpressExtendExtraEyeEyebrowFabricFaceFacultyFadeFaintFaithFallFalseFameFamilyFamousFanFancyFantasyFarmFashionFatFatalFatherFatigueFaultFavoriteFeatureFebruaryFederalFeeFeedFeelFemaleFenceFestivalFetchFeverFewFiberFictionFieldFigureFileFilmFilterFinalFindFineFingerFinishFireFirmFirstFiscalFishFitFitnessFixFlagFlameFlashFlatFlavorFleeFlightFlipFloatFlockFloorFlowerFluidFlushFlyFoamFocusFogFoilFoldFollowFoodFootForceForestForgetForkFortuneForumForwardFossilFosterFoundFoxFragileFrameFrequentFreshFriendFringeFrogFrontFrostFrownFrozenFruitFuelFunFunnyFurnaceFuryFutureGadgetGainGalaxyGalleryGameGapGarageGarbageGardenGarlicGarmentGasGaspGateGatherGaugeGazeGeneralGeniusGenreGentleGenuineGestureGhostGiantGiftGiggleGingerGiraffeGirlGiveGladGlanceGlareGlassGlideGlimpseGlobeGloomGloryGloveGlowGlueGoatGoddessGoldGoodGooseGorillaGospelGossipGovernGownGrabGraceGrainGrantGrapeGrassGravityGreatGreenGridGriefGritGroceryGroupGrowGruntGuardGuessGuideGuiltGuitarGunGymHabitHairHalfHammerHamsterHandHappyHarborHardHarshHarvestHatHaveHawkHazardHeadHealthHeartHeavyHedgehogHeightHelloHelmetHelpHenHeroHiddenHighHillHintHipHireHistoryHobbyHockeyHoldHoleHolidayHollowHomeHoneyHoodHopeHornHorrorHorseHospitalHostHotelHourHoverHubHugeHumanHumbleHumorHundredHungryHuntHurdleHurryHurtHusbandHybridIceIconIdeaIdentifyIdleIgnoreIllIllegalIllnessImageImitateImmenseImmuneImpactImposeImproveImpulseInchIncludeIncomeIncreaseIndexIndicateIndoorIndustryInfantInflictInformInhaleInheritInitialInjectInjuryInmateInnerInnocentInputInquiryInsaneInsectInsideInspireInstallIntactInterestIntoInvestInviteInvolveIronIslandIsolateIssueItemIvoryJacketJaguarJarJazzJealousJeansJellyJewelJobJoinJokeJourneyJoyJudgeJuiceJumpJungleJuniorJunkJustKangarooKeenKeepKetchupKeyKickKidKidneyKindKingdomKissKitKitchenKiteKittenKiwiKneeKnifeKnockKnowLabLabelLaborLadderLadyLakeLampLanguageLaptopLargeLaterLatinLaughLaundryLavaLawLawnLawsuitLayerLazyLeaderLeafLearnLeaveLectureLeftLegLegalLegendLeisureLemonLendLengthLensLeopardLessonLetterLevelLiarLibertyLibraryLicenseLifeLiftLightLikeLimbLimitLinkLionLiquidListLittleLiveLizardLoadLoanLobsterLocalLockLogicLonelyLongLoopLotteryLoudLoungeLoveLoyalLuckyLuggageLumberLunarLunchLuxuryLyricsMachineMadMagicMagnetMaidMailMainMajorMakeMammalManManageMandateMangoMansionManualMapleMarbleMarchMarginMarineMarketMarriageMaskMassMasterMatchMaterialMathMatrixMatterMaximumMazeMeadowMeanMeasureMeatMechanicMedalMediaMelodyMeltMemberMemoryMentionMenuMercyMergeMeritMerryMeshMessageMetalMethodMiddleMidnightMilkMillionMimicMindMinimumMinorMinuteMiracleMirrorMiseryMissMistakeMixMixedMixtureMobileModelModifyMomMomentMonitorMonkeyMonsterMonthMoonMoralMoreMorningMosquitoMotherMotionMotorMountainMouseMoveMovieMuchMuffinMuleMultiplyMuscleMuseumMushroomMusicMustMutualMyselfMysteryMythNaiveNameNapkinNarrowNastyNationNatureNearNeckNeedNegativeNeglectNeitherNephewNerveNestNetNetworkNeutralNeverNewsNextNiceNightNobleNoiseNomineeNoodleNormalNorthNoseNotableNoteNothingNoticeNovelNowNuclearNumberNurseNutOakObeyObjectObligeObscureObserveObtainObviousOccurOceanOctoberOdorOffOfferOfficeOftenOilOkayOldOliveOlympicOmitOnceOneOnionOnlineOnlyOpenOperaOpinionOpposeOptionOrangeOrbitOrchardOrderOrdinaryOrganOrientOriginalOrphanOstrichOtherOutdoorOuterOutputOutsideOvalOvenOverOwnOwnerOxygenOysterOzonePactPaddlePagePairPalacePalmPandaPanelPanicPantherPaperParadeParentParkParrotPartyPassPatchPathPatientPatrolPatternPausePavePaymentPeacePeanutPearPeasantPelicanPenPenaltyPencilPeoplePepperPerfectPermitPersonPetPhonePhotoPhrasePhysicalPianoPicnicPicturePiecePigPigeonPillPilotPinkPioneerPipePistolPitchPizzaPlacePlanetPlasticPlatePlayPleasePledgePluckPlugPlungePoemPoetPointPolarPolePolicePondPonyPoolPopularPortionPositionPossiblePostPotatoPotteryPovertyPowderPowerPracticePraisePredictPreferPreparePresentPrettyPreventPricePridePrimaryPrintPriorityPrisonPrivatePrizeProblemProcessProduceProfitProgramProjectPromoteProofPropertyProsperProtectProudProvidePublicPuddingPullPulpPulsePumpkinPunchPupilPuppyPurchasePurityPurposePursePushPutPuzzlePyramidQualityQuantumQuarterQuestionQuickQuitQuizQuoteRabbitRaccoonRaceRackRadarRadioRailRainRaiseRallyRampRanchRandomRangeRapidRareRateRatherRavenRawRazorReadyRealReasonRebelRebuildRecallReceiveRecipeRecordRecycleReduceReflectReformRefuseRegionRegretRegularRejectRelaxReleaseReliefRelyRemainRememberRemindRemoveRenderRenewRentReopenRepairRepeatReplaceReportRequireRescueResembleResistResourceResponseResultRetireRetreatReturnReunionRevealReviewRewardRhythmRibRibbonRiceRichRideRidgeRifleRightRigidRingRiotRippleRiskRitualRivalRiverRoadRoastRobotRobustRocketRomanceRoofRookieRoomRoseRotateRoughRoundRouteRoyalRubberRudeRugRuleRunRunwayRuralSadSaddleSadnessSafeSailSaladSalmonSalonSaltSaluteSameSampleSandSatisfySatoshiSauceSausageSaveSayScaleScanScareScatterSceneSchemeSchoolScienceScissorsScorpionScoutScrapScreenScriptScrubSeaSearchSeasonSeatSecondSecretSectionSecuritySeedSeekSegmentSelectSellSeminarSeniorSenseSentenceSeriesServiceSessionSettleSetupSevenShadowShaftShallowShareShedShellSheriffShieldShiftShineShipShiverShockShoeShootShopShortShoulderShoveShrimpShrugShuffleShySiblingSickSideSiegeSightSignSilentSilkSillySilverSimilarSimpleSinceSingSirenSisterSituateSixSizeSkateSketchSkiSkillSkinSkirtSkullSlabSlamSleepSlenderSliceSlideSlightSlimSloganSlotSlowSlushSmallSmartSmileSmokeSmoothSnackSnakeSnapSniffSnowSoapSoccerSocialSockSodaSoftSolarSoldierSolidSolutionSolveSomeoneSongSoonSorrySortSoulSoundSoupSourceSouthSpaceSpareSpatialSpawnSpeakSpecialSpeedSpellSpendSphereSpiceSpiderSpikeSpinSpiritSplitSpoilSponsorSpoonSportSpotSpraySpreadSpringSpySquareSqueezeSquirrelStableStadiumStaffStageStairsStampStandStartStateStaySteakSteelStemStepStereoStickStillStingStockStomachStoneStoolStoryStoveStrategyStreetStrikeStrongStruggleStudentStuffStumbleStyleSubjectSubmitSubwaySuccessSuchSuddenSufferSugarSuggestSuitSummerSunSunnySunsetSuperSupplySupremeSureSurfaceSurgeSurpriseSurroundSurveySuspectSustainSwallowSwampSwapSwarmSwearSweetSwiftSwimSwingSwitchSwordSymbolSymptomSyrupSystemTableTackleTagTailTalentTalkTankTapeTargetTaskTasteTattooTaxiTeachTeamTellTenTenantTennisTentTermTestTextThankThatThemeThenTheoryThereTheyThingThisThoughtThreeThriveThrowThumbThunderTicketTideTigerTiltTimberTimeTinyTipTiredTissueTitleToastTobaccoTodayToddlerToeTogetherToiletTokenTomatoTomorrowToneTongueTonightToolToothTopTopicToppleTorchTornadoTortoiseTossTotalTouristTowardTowerTownToyTrackTradeTrafficTragicTrainTransferTrapTrashTravelTrayTreatTreeTrendTrialTribeTrickTriggerTrimTripTrophyTroubleTruckTrueTrulyTrumpetTrustTruthTryTubeTuitionTumbleTunaTunnelTurkeyTurnTurtleTwelveTwentyTwiceTwinTwistTwoTypeTypicalUglyUmbrellaUnableUnawareUncleUncoverUnderUndoUnfairUnfoldUnhappyUniformUniqueUnitUniverseUnknownUnlockUntilUnusualUnveilUpdateUpgradeUpholdUponUpperUpsetUrbanUrgeUsageUseUsedUsefulUselessUsualUtilityVacantVacuumVagueValidValleyValveVanVanishVaporVariousVastVaultVehicleVelvetVendorVentureVenueVerbVerifyVersionVeryVesselVeteranViableVibrantViciousVictoryVideoViewVillageVintageViolinVirtualVirusVisaVisitVisualVitalVividVocalVoiceVoidVolcanoVolumeVoteVoyageWageWagonWaitWalkWallWalnutWantWarfareWarmWarriorWashWaspWasteWaterWaveWayWealthWeaponWearWeaselWeatherWebWeddingWeekendWeirdWelcomeWestWetWhaleWhatWheatWheelWhenWhereWhipWhisperWideWidthWifeWildWillWinWindowWineWingWinkWinnerWinterWireWisdomWiseWishWitnessWolfWomanWonderWoodWoolWordWorkWorldWorryWorthWrapWreckWrestleWristWriteWrongYardYearYellowYouYoungYouthZebraZeroZoneZoo\";\n\nlet wordlist: Array = null;\n\n\nfunction loadWords(): void {\n if (wordlist != null) { return; }\n wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' ');\n}\n\nclass LangEn extends Wordlist {\n constructor() {\n super('en');\n }\n\n getWord(index: number): string {\n loadWords();\n return wordlist[index];\n }\n\n getWordIndex(word: string): number {\n loadWords();\n return wordlist.indexOf(word);\n }\n}\n\nconst langEn = new LangEn();\nregister(langEn);\n\nexport { langEn };\n","'use strict';\n\nimport { pbkdf2Sync as _pbkdf2 } from 'crypto';\n\nimport { arrayify, Arrayish } from './bytes';\n\nfunction bufferify(value: Arrayish): Buffer {\n return new Buffer(arrayify(value));\n}\n\nexport function pbkdf2(password: Arrayish, salt: Arrayish, iterations: number, keylen: number, hashAlgorithm: string): Uint8Array {\n return arrayify(_pbkdf2(bufferify(password), bufferify(salt), iterations, keylen, hashAlgorithm));\n}\n","'use strict';\n\nimport { createHmac } from 'crypto';\n\nimport { arrayify, Arrayish } from './bytes';\n\nimport * as errors from './errors';\n\nexport type SupportedAlgorithms = 'sha256' | 'sha512';\n\nconst supportedAlgorithms = { sha256: true, sha512: true };\nexport function computeHmac(algorithm: SupportedAlgorithms, key: Arrayish, data: Arrayish): Uint8Array {\n if (!supportedAlgorithms[algorithm]) {\n errors.throwError('unsupported algorithm ' + algorithm, errors.UNSUPPORTED_OPERATION, { operation: 'hmac', algorithm: algorithm });\n }\n //return arrayify(_hmac(_hash[algorithm], arrayify(key)).update(arrayify(data)).digest());\n return arrayify(createHmac(algorithm, new Buffer(arrayify(key))).update(new Buffer(arrayify(data))).digest());\n}\n\n","'use strict';\n\nimport hash from 'hash.js';\n\nimport { arrayify, Arrayish } from './bytes';\n\nexport function sha256(data: Arrayish): string {\n return '0x' + (hash.sha256().update(arrayify(data)).digest('hex'));\n}\n\nexport function sha512(data: Arrayish): string {\n return '0x' + (hash.sha512().update(arrayify(data)).digest('hex'));\n}\n","'use strict';\n\n// See: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\n// See: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\n\n// The English language word list.\n// For additional word lists, please see /src.tc/wordlists/\nimport { langEn } from '../wordlists/lang-en';\n\nimport { Wordlist } from '../wordlists/wordlist';\n\nimport { arrayify, Arrayish, hexlify } from '../utils/bytes';\nimport { bigNumberify } from '../utils/bignumber';\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '../utils/utf8';\nimport { pbkdf2 } from '../utils/pbkdf2';\nimport { computeHmac } from '../utils/hmac';\nimport { defineReadOnly } from '../utils/properties';\nimport { KeyPair, N } from '../utils/secp256k1';\nimport { sha256 } from '../utils/sha2';\n\nimport * as errors from '../utils/errors';\n\n// \"Bitcoin seed\"\nvar MasterSecret = toUtf8Bytes('Bitcoin seed');\n\nvar HardenedBit = 0x80000000;\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n return ((1 << bits) - 1) << (8 - bits);\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n return (1 << bits) - 1;\n}\n\nexport const defaultPath = \"m/44'/60'/0'/0/0\";\n\nexport class HDNode {\n private readonly keyPair: KeyPair;\n\n readonly privateKey: string;\n readonly publicKey: string;\n\n readonly mnemonic: string;\n readonly path: string;\n\n readonly chainCode: string;\n\n readonly index: number;\n readonly depth: number;\n\n /**\n * This constructor should not be called directly.\n *\n * Please use:\n * - fromMnemonic\n * - fromSeed\n */\n constructor(privateKey: Arrayish, chainCode: Uint8Array, index: number, depth: number, mnemonic: string, path: string) {\n errors.checkNew(this, HDNode);\n\n defineReadOnly(this, 'keyPair', new KeyPair(privateKey));\n\n defineReadOnly(this, 'privateKey', this.keyPair.privateKey);\n defineReadOnly(this, 'publicKey', this.keyPair.compressedPublicKey);\n\n defineReadOnly(this, 'chainCode', hexlify(chainCode));\n\n defineReadOnly(this, 'index', index);\n defineReadOnly(this, 'depth', depth);\n\n defineReadOnly(this, 'mnemonic', mnemonic);\n defineReadOnly(this, 'path', path);\n }\n\n private _derive(index: number): HDNode {\n\n // Public parent key -> public child key\n if (!this.privateKey) {\n if (index >= HardenedBit) { throw new Error('cannot derive child of neutered node'); }\n throw new Error('not implemented');\n }\n\n var data = new Uint8Array(37);\n\n // Base path\n var mnemonic = this.mnemonic;\n var path = this.path;\n if (path) { path += '/' + index; }\n\n if (index & HardenedBit) {\n // Data = 0x00 || ser_256(k_par)\n data.set(arrayify(this.privateKey), 1);\n\n // Hardened path\n if (path) { path += \"'\"; }\n\n } else {\n // Data = ser_p(point(k_par))\n data.set(this.keyPair.publicKeyBytes);\n }\n\n // Data += ser_32(i)\n for (var i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); }\n\n var I = computeHmac('sha512', this.chainCode, data);\n var IL = bigNumberify(I.slice(0, 32));\n var IR = I.slice(32);\n\n var ki = IL.add(this.keyPair.privateKey).mod(N);\n\n return new HDNode(arrayify(ki), IR, index, this.depth + 1, mnemonic, path);\n }\n\n derivePath(path: string): HDNode {\n var components = path.split('/');\n\n if (components.length === 0 || (components[0] === 'm' && this.depth !== 0)) {\n throw new Error('invalid path');\n }\n\n if (components[0] === 'm') { components.shift(); }\n\n var result: HDNode = this;\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n var index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) { throw new Error('invalid path index - ' + component); }\n result = result._derive(HardenedBit + index);\n } else if (component.match(/^[0-9]+$/)) {\n var index = parseInt(component);\n if (index >= HardenedBit) { throw new Error('invalid path index - ' + component); }\n result = result._derive(index);\n } else {\n throw new Error('invlaid path component - ' + component);\n }\n }\n\n return result;\n }\n}\n\nfunction _fromSeed(seed: Arrayish, mnemonic: string): HDNode {\n let seedArray: Uint8Array = arrayify(seed);\n if (seedArray.length < 16 || seedArray.length > 64) { throw new Error('invalid seed'); }\n\n var I: Uint8Array = arrayify(computeHmac('sha512', MasterSecret, seedArray));\n\n return new HDNode(I.slice(0, 32), I.slice(32), 0, 0, mnemonic, 'm');\n}\n\nexport function fromMnemonic(mnemonic: string, wordlist?: Wordlist): HDNode {\n // Check that the checksum s valid (will throw an error)\n mnemonicToEntropy(mnemonic, wordlist);\n\n return _fromSeed(mnemonicToSeed(mnemonic), mnemonic);\n}\n\nexport function fromSeed(seed: Arrayish): HDNode {\n return _fromSeed(seed, null);\n}\n\nexport function mnemonicToSeed(mnemonic: string, password?: string): string {\n if (!password) { password = ''; }\n\n var salt = toUtf8Bytes('mnemonic' + password, UnicodeNormalizationForm.NFKD);\n\n return hexlify(pbkdf2(toUtf8Bytes(mnemonic, UnicodeNormalizationForm.NFKD), salt, 2048, 64, 'sha512'));\n}\n\nexport function mnemonicToEntropy(mnemonic: string, wordlist?: Wordlist): string {\n if (!wordlist) { wordlist = langEn; }\n\n var words = wordlist.split(mnemonic);\n if ((words.length % 3) !== 0) { throw new Error('invalid mnemonic'); }\n\n var entropy = arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n\n var offset = 0;\n for (var i = 0; i < words.length; i++) {\n var index = wordlist.getWordIndex(words[i].normalize('NFKD'));\n if (index === -1) { throw new Error('invalid mnemonic'); }\n\n for (var bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n\n var entropyBits = 32 * words.length / 3;\n\n var checksumBits = words.length / 3;\n var checksumMask = getUpperMask(checksumBits);\n\n var checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0];\n checksum &= checksumMask;\n\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n throw new Error('invalid checksum');\n }\n\n return hexlify(entropy.slice(0, entropyBits / 8));\n}\n\nexport function entropyToMnemonic(entropy: Arrayish, wordlist?: Wordlist): string {\n entropy = arrayify(entropy);\n\n if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) {\n throw new Error('invalid entropy');\n }\n\n var indices: Array = [ 0 ];\n\n var remainingBits = 11;\n for (var i = 0; i < entropy.length; i++) {\n\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n\n remainingBits -= 8;\n\n // This byte will complete an 11-bit index\n } else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n remainingBits += 3;\n }\n }\n\n // Compute the checksum bits\n var checksum = arrayify(sha256(entropy))[0];\n var checksumBits = entropy.length / 4;\n checksum &= getUpperMask(checksumBits);\n\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n\n if (!wordlist) { wordlist = langEn; }\n\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\n}\n\nexport function isValidMnemonic(mnemonic: string, wordlist?: Wordlist): boolean {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n return true;\n } catch (error) { }\n return false;\n}\n\n","'use strict';\n\nimport { arrayify } from './bytes';\n\nimport { randomBytes as _randomBytes } from 'crypto';\n\nexport function randomBytes(length: number): Uint8Array {\n return arrayify(_randomBytes(length));\n}\n\n","'use strict';\n\n/**\n * SigningKey\n *\n *\n */\n\nimport { getAddress } from '../utils/address';\nimport { arrayify, Arrayish, hexlify } from '../utils/bytes';\nimport { HDNode } from './hdnode';\nimport { keccak256 } from '../utils/keccak256';\nimport { defineReadOnly } from '../utils/properties';\nimport { computePublicKey, KeyPair, recoverPublicKey, Signature } from '../utils/secp256k1';\n\nimport errors = require('../utils/errors');\n\nexport class SigningKey {\n\n readonly privateKey: string;\n readonly publicKey: string;\n readonly address: string;\n\n readonly mnemonic: string;\n readonly path: string;\n\n private readonly keyPair: KeyPair;\n\n constructor(privateKey: Arrayish | HDNode) {\n errors.checkNew(this, SigningKey);\n\n let privateKeyBytes = null;\n\n if (privateKey instanceof HDNode) {\n defineReadOnly(this, 'mnemonic', privateKey.mnemonic);\n defineReadOnly(this, 'path', privateKey.path);\n privateKeyBytes = arrayify(privateKey.privateKey);\n } else {\n // A lot of common tools do not prefix private keys with a 0x\n if (typeof(privateKey) === 'string' && privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) {\n privateKey = '0x' + privateKey;\n }\n privateKeyBytes = arrayify(privateKey);\n }\n\n try {\n if (privateKeyBytes.length !== 32) {\n errors.throwError('exactly 32 bytes required', errors.INVALID_ARGUMENT, { value: privateKey });\n }\n } catch(error) {\n var params: any = { arg: 'privateKey', reason: error.reason, value: '[REDACTED]' }\n if (error.value) {\n if(typeof(error.value.length) === 'number') {\n params.length = error.value.length;\n }\n params.type = typeof(error.value);\n }\n errors.throwError('invalid private key', error.code, params);\n }\n\n defineReadOnly(this, 'privateKey', hexlify(privateKeyBytes));\n defineReadOnly(this, 'keyPair', new KeyPair(privateKeyBytes));\n defineReadOnly(this, 'publicKey', this.keyPair.publicKey);\n defineReadOnly(this, 'address', computeAddress(this.keyPair.publicKey));\n }\n\n signDigest(digest: Arrayish): Signature {\n return this.keyPair.sign(digest);\n }\n}\n\nexport function recoverAddress(digest: Arrayish, signature: Signature): string {\n return computeAddress(recoverPublicKey(digest, signature));\n}\n\nexport function computeAddress(key: string): string {\n // Strip off the leading \"0x04\"\n let publicKey = '0x' + computePublicKey(key).slice(4);\n return getAddress('0x' + keccak256(publicKey).substring(26));\n}\n","'use strict';\n\nimport aes from 'aes-js';\nimport scrypt from 'scrypt-js';\nimport uuid from 'uuid';\n\nimport { getAddress } from '../utils/address';\nimport { arrayify, Arrayish, concat, hexlify } from '../utils/bytes';\n\nimport { pbkdf2 } from '../utils/pbkdf2';\nimport { keccak256 } from '../utils/keccak256';\nimport { toUtf8Bytes, UnicodeNormalizationForm } from '../utils/utf8';\nimport { randomBytes } from '../utils/random-bytes';\n\nimport { SigningKey } from './signing-key';\nimport * as HDNode from './hdnode';\n\n\nexport interface ProgressCallback {\n (percent: number): void\n}\n\nfunction looseArrayify(hexString: string): Uint8Array {\n if (typeof(hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return arrayify(hexString);\n}\n\nfunction zpad(value: String | number, length: number): String {\n value = String(value);\n while (value.length < length) { value = '0' + value; }\n return value;\n}\n\nfunction getPassword(password: Arrayish): Uint8Array {\n if (typeof(password) === 'string') {\n return toUtf8Bytes(password, UnicodeNormalizationForm.NFKC);\n }\n return arrayify(password);\n}\n\n// Search an Object and its children recursively, caselessly.\nfunction searchPath(object: any, path: string): string {\n var currentChild = object;\n\n var comps = path.toLowerCase().split('/');\n for (var i = 0; i < comps.length; i++) {\n\n // Search for a child object with a case-insensitive matching key\n var matchingChild = null;\n for (var key in currentChild) {\n if (key.toLowerCase() === comps[i]) {\n matchingChild = currentChild[key];\n break;\n }\n }\n\n // Didn't find one. :'(\n if (matchingChild === null) {\n return null;\n }\n\n // Now check this child...\n currentChild = matchingChild;\n }\n\n return currentChild;\n}\n\nexport function isCrowdsaleWallet(json: string): boolean {\n try {\n var data = JSON.parse(json);\n } catch (error) { return false; }\n\n return (data.encseed && data.ethaddr);\n}\n\nexport function isValidWallet(json: string): boolean {\n try {\n var data = JSON.parse(json);\n } catch (error) { return false; }\n\n if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) {\n return false;\n }\n\n // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff\n return true;\n}\n\n// @TODO: Make a type for string or arrayish\n// See: https://github.com/ethereum/pyethsaletool\nexport function decryptCrowdsale(json: string, password: Arrayish | string): SigningKey {\n var data = JSON.parse(json);\n\n password = getPassword(password);\n\n // Ethereum Address\n var ethaddr = getAddress(searchPath(data, 'ethaddr'));\n\n // Encrypted Seed\n var encseed = looseArrayify(searchPath(data, 'encseed'));\n if (!encseed || (encseed.length % 16) !== 0) {\n throw new Error('invalid encseed');\n }\n\n let key = pbkdf2(password, password, 2000, 32, 'sha256').slice(0, 16);\n\n var iv = encseed.slice(0, 16);\n var encryptedSeed = encseed.slice(16);\n\n // Decrypt the seed\n var aesCbc = new aes.ModeOfOperation.cbc(key, iv);\n var seed = arrayify(aesCbc.decrypt(encryptedSeed));\n seed = aes.padding.pkcs7.strip(seed);\n\n // This wallet format is weird... Convert the binary encoded hex to a string.\n var seedHex = '';\n for (var i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n\n var seedHexBytes = toUtf8Bytes(seedHex);\n\n var signingKey = new SigningKey(keccak256(seedHexBytes));\n\n if (signingKey.address !== ethaddr) {\n throw new Error('corrupt crowdsale wallet');\n }\n\n return signingKey;\n}\n\n//@TODO: string or arrayish\nexport function decrypt(json: string, password: Arrayish, progressCallback?: ProgressCallback): Promise {\n var data = JSON.parse(json);\n\n let passwordBytes = getPassword(password);\n\n var decrypt = function(key: Uint8Array, ciphertext: Uint8Array): Uint8Array {\n var cipher = searchPath(data, 'crypto/cipher');\n if (cipher === 'aes-128-ctr') {\n var iv = looseArrayify(searchPath(data, 'crypto/cipherparams/iv'))\n var counter = new aes.Counter(iv);\n\n var aesCtr = new aes.ModeOfOperation.ctr(key, counter);\n\n return arrayify(aesCtr.decrypt(ciphertext));\n }\n\n return null;\n };\n\n var computeMAC = function(derivedHalf: Uint8Array, ciphertext: Uint8Array) {\n return keccak256(concat([derivedHalf, ciphertext]));\n }\n\n var getSigningKey = function(key: Uint8Array, reject: (error?: Error) => void) {\n var ciphertext = looseArrayify(searchPath(data, 'crypto/ciphertext'));\n\n var computedMAC = hexlify(computeMAC(key.slice(16, 32), ciphertext)).substring(2);\n if (computedMAC !== searchPath(data, 'crypto/mac').toLowerCase()) {\n reject(new Error('invalid password'));\n return null;\n }\n\n var privateKey = decrypt(key.slice(0, 16), ciphertext);\n var mnemonicKey = key.slice(32, 64);\n\n if (!privateKey) {\n reject(new Error('unsupported cipher'));\n return null;\n }\n\n var signingKey = new SigningKey(privateKey);\n if (signingKey.address !== getAddress(data.address)) {\n reject(new Error('address mismatch'));\n return null;\n }\n\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n if (searchPath(data, 'x-ethers/version') === '0.1') {\n var mnemonicCiphertext = looseArrayify(searchPath(data, 'x-ethers/mnemonicCiphertext'));\n var mnemonicIv = looseArrayify(searchPath(data, 'x-ethers/mnemonicCounter'));\n\n var mnemonicCounter = new aes.Counter(mnemonicIv);\n var mnemonicAesCtr = new aes.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\n\n var path = searchPath(data, 'x-ethers/path') || HDNode.defaultPath;\n\n var entropy = arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext));\n var mnemonic = HDNode.entropyToMnemonic(entropy);\n\n var node = HDNode.fromMnemonic(mnemonic).derivePath(path);\n if (node.privateKey != hexlify(privateKey)) {\n reject(new Error('mnemonic mismatch'));\n return null;\n }\n\n signingKey = new SigningKey(node);\n }\n\n return signingKey;\n }\n\n\n return new Promise(function(resolve, reject) {\n var kdf = searchPath(data, 'crypto/kdf');\n if (kdf && typeof(kdf) === 'string') {\n if (kdf.toLowerCase() === 'scrypt') {\n var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt'));\n var N = parseInt(searchPath(data, 'crypto/kdfparams/n'));\n var r = parseInt(searchPath(data, 'crypto/kdfparams/r'));\n var p = parseInt(searchPath(data, 'crypto/kdfparams/p'));\n if (!N || !r || !p) {\n reject(new Error('unsupported key-derivation function parameters'));\n return;\n }\n\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n reject(new Error('unsupported key-derivation function parameter value for N'));\n return;\n }\n\n var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen'));\n if (dkLen !== 32) {\n reject( new Error('unsupported key-derivation derived-key length'));\n return;\n }\n\n scrypt(passwordBytes, salt, N, r, p, 64, function(error, progress, key) {\n if (error) {\n error.progress = progress;\n reject(error);\n\n } else if (key) {\n key = arrayify(key);\n\n var signingKey = getSigningKey(key, reject);\n if (!signingKey) { return; }\n\n if (progressCallback) { progressCallback(1); }\n resolve(signingKey);\n\n } else if (progressCallback) {\n return progressCallback(progress);\n }\n });\n\n } else if (kdf.toLowerCase() === 'pbkdf2') {\n var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt'));\n\n var prfFunc = null;\n var prf = searchPath(data, 'crypto/kdfparams/prf');\n if (prf === 'hmac-sha256') {\n prfFunc = 'sha256';\n } else if (prf === 'hmac-sha512') {\n prfFunc = 'sha512';\n } else {\n reject(new Error('unsupported prf'));\n return;\n }\n\n var c = parseInt(searchPath(data, 'crypto/kdfparams/c'));\n\n var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen'));\n if (dkLen !== 32) {\n reject( new Error('unsupported key-derivation derived-key length'));\n return;\n }\n\n var key = pbkdf2(passwordBytes, salt, c, dkLen, prfFunc);\n\n var signingKey = getSigningKey(key, reject);\n if (!signingKey) { return; }\n\n resolve(signingKey);\n\n } else {\n reject(new Error('unsupported key-derivation function'));\n }\n\n } else {\n reject(new Error('unsupported key-derivation function'));\n }\n });\n}\n\nexport type EncryptOptions = {\n iv?: Arrayish;\n entropy?: Arrayish;\n mnemonic?: string;\n path?: string;\n client?: string;\n salt?: Arrayish;\n uuid?: string;\n scrypt?: {\n N?: number;\n r?: number;\n p?: number;\n }\n}\n\nexport function encrypt(privateKey: Arrayish | SigningKey, password: Arrayish | string, options?: EncryptOptions, progressCallback?: ProgressCallback): Promise {\n\n // the options are optional, so adjust the call as needed\n if (typeof(options) === 'function' && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) { options = {}; }\n\n // Check the private key\n let privateKeyBytes: Uint8Array = null;\n if (privateKey instanceof SigningKey) {\n privateKeyBytes = arrayify(privateKey.privateKey);\n } else {\n privateKeyBytes = arrayify(privateKey);\n }\n if (privateKeyBytes.length !== 32) { throw new Error('invalid private key'); }\n\n let passwordBytes = getPassword(password);\n\n let entropy: Uint8Array = null\n\n if (options.entropy) {\n entropy = arrayify(options.entropy);\n }\n\n if (options.mnemonic) {\n if (entropy) {\n if (HDNode.entropyToMnemonic(entropy) !== options.mnemonic) {\n throw new Error('entropy and mnemonic mismatch');\n }\n } else {\n entropy = arrayify(HDNode.mnemonicToEntropy(options.mnemonic));\n }\n }\n\n var path: string = options.path;\n if (entropy && !path) {\n path = HDNode.defaultPath;\n }\n\n var client = options.client;\n if (!client) { client = \"ethers.js\"; }\n\n // Check/generate the salt\n let salt: Uint8Array = null;\n if (options.salt) {\n salt = arrayify(options.salt);\n } else {\n salt = randomBytes(32);;\n }\n\n // Override initialization vector\n let iv: Uint8Array = null;\n if (options.iv) {\n iv = arrayify(options.iv);\n if (iv.length !== 16) { throw new Error('invalid iv'); }\n } else {\n iv = randomBytes(16);\n }\n\n // Override the uuid\n var uuidRandom: Uint8Array = null;\n if (options.uuid) {\n uuidRandom = arrayify(options.uuid);\n if (uuidRandom.length !== 16) { throw new Error('invalid uuid'); }\n } else {\n uuidRandom = randomBytes(16);\n }\n\n // Override the scrypt password-based key derivation function parameters\n var N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) { N = options.scrypt.N; }\n if (options.scrypt.r) { r = options.scrypt.r; }\n if (options.scrypt.p) { p = options.scrypt.p; }\n }\n\n return new Promise(function(resolve, reject) {\n\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n scrypt(passwordBytes, salt, N, r, p, 64, function(error, progress, key) {\n if (error) {\n error.progress = progress;\n reject(error);\n\n } else if (key) {\n key = arrayify(key);\n\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n var derivedKey = key.slice(0, 16);\n var macPrefix = key.slice(16, 32);\n\n // This will be used to encrypt the mnemonic phrase (if any)\n var mnemonicKey = key.slice(32, 64);\n\n // Get the address for this private key\n var address = (new SigningKey(privateKeyBytes)).address;\n\n // Encrypt the private key\n var counter = new aes.Counter(iv);\n var aesCtr = new aes.ModeOfOperation.ctr(derivedKey, counter);\n var ciphertext = arrayify(aesCtr.encrypt(privateKeyBytes));\n\n // Compute the message authentication code, used to check the password\n var mac = keccak256(concat([macPrefix, ciphertext]))\n\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n var data: { [key: string]: any } = {\n address: address.substring(2).toLowerCase(),\n id: uuid.v4({ random: uuidRandom }),\n version: 3,\n Crypto: {\n cipher: 'aes-128-ctr',\n cipherparams: {\n iv: hexlify(iv).substring(2),\n },\n ciphertext: hexlify(ciphertext).substring(2),\n kdf: 'scrypt',\n kdfparams: {\n salt: hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (entropy) {\n var mnemonicIv = randomBytes(16);\n var mnemonicCounter = new aes.Counter(mnemonicIv);\n var mnemonicAesCtr = new aes.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\n var mnemonicCiphertext = arrayify(mnemonicAesCtr.encrypt(entropy));\n var now = new Date();\n var timestamp = (now.getUTCFullYear() + '-' +\n zpad(now.getUTCMonth() + 1, 2) + '-' +\n zpad(now.getUTCDate(), 2) + 'T' +\n zpad(now.getUTCHours(), 2) + '-' +\n zpad(now.getUTCMinutes(), 2) + '-' +\n zpad(now.getUTCSeconds(), 2) + '.0Z'\n );\n data['x-ethers'] = {\n client: client,\n gethFilename: ('UTC--' + timestamp + '--' + data.address),\n mnemonicCounter: hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n\n if (progressCallback) { progressCallback(1); }\n resolve(JSON.stringify(data));\n\n } else if (progressCallback) {\n return progressCallback(progress);\n }\n });\n });\n}\n\n","'use strict';\n\nimport { Arrayish, concat, hexlify } from './bytes';\nimport { toUtf8Bytes } from './utf8';\nimport { keccak256 } from './keccak256';\n\nvar Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\nvar Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nvar UseSTD3ASCIIRules = new RegExp(\"^[a-z0-9.-]*$\");\n\nexport function namehash(name: string): string {\n name = name.toLowerCase();\n\n // Supporting the full UTF-8 space requires additional (and large)\n // libraries, so for now we simply do not support them.\n // It should be fairly easy in the future to support systems with\n // String.normalize, but that is future work.\n if (!name.match(UseSTD3ASCIIRules)) {\n throw new Error('contains invalid UseSTD3ASCIIRules characters');\n }\n\n var result: string | Uint8Array = Zeros;\n while (name.length) {\n var partition = name.match(Partition);\n var label = toUtf8Bytes(partition[3]);\n result = keccak256(concat([result, keccak256(label)]));\n\n name = partition[2] || '';\n }\n\n return hexlify(result);\n}\n\n\nexport function id(text: string): string {\n return keccak256(toUtf8Bytes(text));\n}\n\nexport function hashMessage(message: Arrayish | string): string {\n var payload = concat([\n toUtf8Bytes('\\x19Ethereum Signed Message:\\n'),\n toUtf8Bytes(String(message.length)),\n ((typeof(message) === 'string') ? toUtf8Bytes(message): message)\n ]);\n return keccak256(payload);\n}\n\n","\nimport { getAddress } from './address';\nimport { BigNumber, bigNumberify, BigNumberish,ConstantZero } from './bignumber';\nimport { arrayify, Arrayish, hexlify, hexZeroPad, stripZeros, } from './bytes';\nimport { keccak256 } from './keccak256';\nimport { recoverAddress, Signature } from './secp256k1';\nimport * as RLP from './rlp';\n\nexport type UnsignedTransaction = {\n to?: string;\n nonce?: number;\n\n gasLimit?: BigNumberish;\n gasPrice?: BigNumberish;\n\n data?: Arrayish;\n value?: BigNumberish;\n chainId?: number;\n}\n\n\nexport interface Transaction {\n hash?: string;\n\n to?: string;\n from?: string;\n nonce: number;\n\n gasLimit: BigNumber;\n gasPrice: BigNumber;\n\n data: string;\n value: BigNumber;\n chainId: number;\n\n r?: string;\n s?: string;\n v?: number;\n}\n\n\nfunction handleAddress(value: string): string {\n if (value === '0x') { return null; }\n return getAddress(value);\n}\n\nfunction handleNumber(value: string): BigNumber {\n if (value === '0x') { return ConstantZero; }\n return bigNumberify(value);\n}\n\nvar transactionFields = [\n { name: 'nonce', maxLength: 32 },\n { name: 'gasPrice', maxLength: 32 },\n { name: 'gasLimit', maxLength: 32 },\n { name: 'to', length: 20 },\n { name: 'value', maxLength: 32 },\n { name: 'data' },\n];\n\n\nexport type SignDigestFunc = (digest: Arrayish) => Signature;\n\nexport function sign(transaction: UnsignedTransaction, signDigest: SignDigestFunc): string {\n\n var raw: Array = [];\n\n transactionFields.forEach(function(fieldInfo) {\n let value = (transaction)[fieldInfo.name] || ([]);\n value = arrayify(hexlify(value));\n\n // Fixed-width field\n if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) {\n let error: any = new Error('invalid ' + fieldInfo.name);\n error.reason = 'wrong length';\n error.value = value;\n throw error;\n }\n\n // Variable-width (with a maximum)\n if (fieldInfo.maxLength) {\n value = stripZeros(value);\n if (value.length > fieldInfo.maxLength) {\n let error: any = new Error('invalid ' + fieldInfo.name);\n error.reason = 'too long';\n error.value = value;\n throw error;\n }\n }\n\n raw.push(hexlify(value));\n });\n\n // @TOOD:\n /*\n // Requesting an unsigned transation\n if (!signDigest) {\n let v = 27 + signature.recoveryParam\n if (transaction.chainId) {\n v += transaction.chainId * 2 + 8;\n }\n //raw.push(hexlify(transaction.chainId));\n raw.push(hexlify(v));\n raw.push('0x');\n raw.push('0x');\n }\n */\n\n if (transaction.chainId) {\n raw.push(hexlify(transaction.chainId));\n raw.push('0x');\n raw.push('0x');\n }\n\n var digest = keccak256(RLP.encode(raw));\n\n var signature = signDigest(digest);\n\n var v = 27 + signature.recoveryParam\n if (transaction.chainId) {\n raw.pop();\n raw.pop();\n raw.pop();\n v += transaction.chainId * 2 + 8;\n }\n\n raw.push(hexlify(v));\n raw.push(stripZeros(arrayify(signature.r)));\n raw.push(stripZeros(arrayify(signature.s)));\n\n return RLP.encode(raw);\n}\n\nexport function parse(rawTransaction: Arrayish): Transaction {\n var signedTransaction = RLP.decode(rawTransaction);\n if (signedTransaction.length !== 9) { throw new Error('invalid transaction'); }\n\n let tx: Transaction = {\n nonce: handleNumber(signedTransaction[0]).toNumber(),\n gasPrice: handleNumber(signedTransaction[1]),\n gasLimit: handleNumber(signedTransaction[2]),\n to: handleAddress(signedTransaction[3]),\n value: handleNumber(signedTransaction[4]),\n data: signedTransaction[5],\n chainId: 0\n };\n\n var v = arrayify(signedTransaction[6]);\n var r = arrayify(signedTransaction[7]);\n var s = arrayify(signedTransaction[8]);\n\n if (v.length >= 1 && r.length >= 1 && r.length <= 32 && s.length >= 1 && s.length <= 32) {\n tx.v = bigNumberify(v).toNumber();\n tx.r = hexZeroPad(signedTransaction[7], 32);\n tx.s = hexZeroPad(signedTransaction[8], 32);\n\n var chainId = (tx.v - 35) / 2;\n if (chainId < 0) { chainId = 0; }\n chainId = Math.floor(chainId);\n\n tx.chainId = chainId;\n\n var recoveryParam = tx.v - 27;\n\n let raw = signedTransaction.slice(0, 6);\n\n if (chainId) {\n raw.push(hexlify(chainId));\n raw.push('0x');\n raw.push('0x');\n recoveryParam -= chainId * 2 + 8;\n }\n\n var digest = keccak256(RLP.encode(raw));\n try {\n tx.from = recoverAddress(digest, { r: hexlify(r), s: hexlify(s), recoveryParam: recoveryParam });\n } catch (error) {\n console.log(error);\n }\n\n tx.hash = keccak256(rawTransaction);\n }\n\n return tx;\n}\n","'use strict';\n\nimport { defaultPath, entropyToMnemonic, fromMnemonic, HDNode } from './hdnode';\nimport * as secretStorage from './secret-storage';\nimport { ProgressCallback } from './secret-storage';\nimport { recoverAddress, SigningKey } from './signing-key';\n\nimport { BlockTag, Provider, TransactionRequest, TransactionResponse } from '../providers/provider';\nimport { Wordlist } from '../wordlists/wordlist';\n\nimport { BigNumber } from '../utils/bignumber';\nimport { arrayify, Arrayish, concat, hexlify, joinSignature } from '../utils/bytes';\nimport { hashMessage } from '../utils/hash';\nimport { keccak256 } from '../utils/keccak256';\nimport { defineReadOnly, resolveProperties, shallowCopy } from '../utils/properties';\nimport { randomBytes } from '../utils/random-bytes';\nimport { sign as signTransaction } from '../utils/transaction';\n\nimport * as errors from '../utils/errors';\n\nexport abstract class Signer {\n provider?: Provider;\n\n abstract getAddress(): Promise\n\n abstract signMessage(transaction: Arrayish | string): Promise;\n abstract sendTransaction(transaction: TransactionRequest): Promise;\n}\n\n\nexport class Wallet extends Signer {\n\n readonly provider: Provider;\n\n private readonly signingKey: SigningKey;\n\n constructor(privateKey: SigningKey | HDNode | Arrayish, provider?: Provider) {\n super();\n errors.checkNew(this, Wallet);\n\n // Make sure we have a valid signing key\n if (privateKey instanceof SigningKey) {\n defineReadOnly(this, 'signingKey', privateKey);\n } else {\n defineReadOnly(this, 'signingKey', new SigningKey(privateKey));\n }\n\n defineReadOnly(this, 'provider', provider);\n }\n\n get address(): string { return this.signingKey.address; }\n\n get mnemonic(): string { return this.signingKey.mnemonic; }\n get path(): string { return this.signingKey.mnemonic; }\n\n get privateKey(): string { return this.signingKey.privateKey; }\n\n\n /**\n * Create a new instance of this Wallet connected to provider.\n */\n connect(provider: Provider): Wallet {\n return new Wallet(this.signingKey, provider);\n }\n\n\n getAddress(): Promise {\n return Promise.resolve(this.address);\n }\n\n sign(transaction: TransactionRequest): Promise {\n\n return resolveProperties(transaction).then((tx) => {\n return signTransaction(tx, this.signingKey.signDigest.bind(this.signingKey));\n });\n }\n\n signMessage(message: Arrayish | string): Promise {\n return Promise.resolve(joinSignature(this.signingKey.signDigest(hashMessage(message))));\n }\n\n\n getBalance(blockTag?: BlockTag): Promise {\n if (!this.provider) { throw new Error('missing provider'); }\n return this.provider.getBalance(this.address, blockTag);\n }\n\n getTransactionCount(blockTag?: BlockTag): Promise {\n if (!this.provider) { throw new Error('missing provider'); }\n return this.provider.getTransactionCount(this.address, blockTag);\n }\n\n sendTransaction(transaction: TransactionRequest): Promise {\n if (!this.provider) { throw new Error('missing provider'); }\n\n if (!transaction || typeof(transaction) !== 'object') {\n throw new Error('invalid transaction object');\n }\n\n var tx = shallowCopy(transaction);\n\n if (tx.to != null) {\n tx.to = this.provider.resolveName(tx.to);\n }\n\n if (tx.gasLimit == null) {\n tx.gasLimit = this.provider.estimateGas(tx);\n }\n\n if (tx.gasPrice == null) {\n tx.gasPrice = this.provider.getGasPrice();\n }\n\n if (tx.nonce == null) {\n tx.nonce = this.getTransactionCount();\n }\n\n if (tx.chainId == null) {\n tx.chainId = this.provider.getNetwork().then((network) => network.chainId);\n }\n\n return this.provider.sendTransaction(this.sign(tx));\n }\n\n encrypt(password: Arrayish | string, options: any, progressCallback: ProgressCallback): Promise {\n if (typeof(options) === 'function' && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n\n if (progressCallback && typeof(progressCallback) !== 'function') {\n throw new Error('invalid callback');\n }\n\n if (!options) { options = {}; }\n\n if (this.mnemonic) {\n // Make sure we don't accidentally bubble the mnemonic up the call-stack\n var safeOptions: any = {};\n for (var key in options) { safeOptions[key] = options[key]; }\n options = safeOptions;\n\n // Set the mnemonic and path\n options.mnemonic = this.mnemonic;\n options.path = this.path\n }\n\n return secretStorage.encrypt(this.privateKey, password, options, progressCallback);\n }\n\n\n /**\n * Static methods to create Wallet instances.\n */\n static createRandom(options: any): Wallet {\n var entropy: Uint8Array = randomBytes(16);\n\n if (!options) { options = { }; }\n\n if (options.extraEntropy) {\n entropy = arrayify(keccak256(concat([entropy, options.extraEntropy])).substring(0, 34));\n }\n\n var mnemonic = entropyToMnemonic(entropy, options.locale);\n return Wallet.fromMnemonic(mnemonic, options.path, options.locale);\n }\n\n static fromEncryptedJson(json: string, password: Arrayish, progressCallback: ProgressCallback): Promise {\n if (progressCallback && typeof(progressCallback) !== 'function') {\n throw new Error('invalid callback');\n }\n\n return new Promise(function(resolve, reject) {\n\n if (secretStorage.isCrowdsaleWallet(json)) {\n try {\n var privateKey = secretStorage.decryptCrowdsale(json, password);\n resolve(new Wallet(privateKey));\n } catch (error) {\n reject(error);\n }\n\n } else if (secretStorage.isValidWallet(json)) {\n\n secretStorage.decrypt(json, password, progressCallback).then(function(signingKey) {\n var wallet = new Wallet(signingKey);\n /*\n if (signingKey.mnemonic && signingKey.path) {\n wallet.mnemonic = signingKey.mnemonic;\n wallet.path = signingKey.path;\n }\n */\n resolve(wallet);\n }, function(error) {\n reject(error);\n });\n\n } else {\n reject('invalid wallet JSON');\n }\n });\n }\n\n static fromMnemonic(mnemonic: string, path?: string, wordlist?: Wordlist): Wallet {\n if (!path) { path = defaultPath; }\n return new Wallet(fromMnemonic(mnemonic, wordlist).derivePath(path));\n }\n\n\n /**\n * Determine if this is an encryped JSON wallet.\n */\n static isEncryptedWallet(json: string): boolean {\n return (secretStorage.isValidWallet(json) || secretStorage.isCrowdsaleWallet(json));\n }\n\n\n /**\n * Verify a signed message, returning the address of the signer.\n */\n static verifyMessage(message: Arrayish | string, signature: string): string {\n signature = hexlify(signature);\n if (signature.length != 132) { throw new Error('invalid signature'); }\n var digest = hashMessage(message);\n\n var recoveryParam = parseInt(signature.substring(130), 16);\n if (recoveryParam >= 27) { recoveryParam -= 27; }\n if (recoveryParam < 0) { throw new Error('invalid signature'); }\n\n return recoverAddress(\n digest,\n {\n r: signature.substring(0, 66),\n s: '0x' + signature.substring(66, 130),\n recoveryParam: recoveryParam\n }\n );\n }\n}\n","'use strict';\n\nimport * as errors from '../utils/errors';\n\nexport type Network = {\n name: string,\n chainId: number,\n ensAddress?: string,\n}\n\nexport type Networkish = Network | string | number;\n\n\nconst homestead = {\n chainId: 1,\n ensAddress: \"0x314159265dd8dbb310642f98f50c066173c1259b\",\n name: \"homestead\"\n};\n\nconst ropsten = {\n chainId: 3,\n ensAddress: \"0x112234455c3a32fd11230c42e7bccd4a84e02010\",\n name: \"ropsten\"\n};\n\nconst networks: { [name: string]: { chainId: number, ensAddress?: string } } = {\n unspecified: {\n chainId: 0\n },\n\n homestead: homestead,\n mainnet: homestead,\n\n morden: {\n chainId: 2\n },\n\n ropsten: ropsten,\n testnet: ropsten,\n\n rinkeby: {\n chainId: 4,\n ensAddress: \"0xe7410170f87102DF0055eB195163A03B7F2Bff4A\"\n },\n\n kovan: {\n chainId: 42\n },\n\n classic: {\n chainId: 61\n }\n}\n\n/**\n * getNetwork\n *\n * Converts a named common networks or chain ID (network ID) to a Network\n * and verifies a network is a valid Network..\n */\nexport function getNetwork(network: Networkish): Network {\n // No network (null) or unspecified (chainId = 0)\n if (!network) { return null; }\n\n if (typeof(network) === 'number') {\n for (var name in networks) {\n let n = networks[name];\n if (n.chainId === network) {\n return {\n name: name,\n chainId: n.chainId,\n ensAddress: n.ensAddress\n };\n }\n }\n\n return {\n chainId: network,\n name: 'unknown'\n };\n }\n\n if (typeof(network) === 'string') {\n let n = networks[network];\n if (n == null) { return null; }\n return {\n name: network,\n chainId: n.chainId,\n ensAddress: n.ensAddress\n };\n }\n\n let n = networks[network.name];\n\n // Not a standard network; check that it is a valid network in general\n if (!n) {\n if (typeof(n.chainId) !== 'number') {\n errors.throwError('invalid network chainId', errors.INVALID_ARGUMENT, { name: 'network', value: network });\n }\n return network;\n }\n\n // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)\n if (network.chainId !== 0 && network.chainId !== n.chainId) {\n errors.throwError('network chainId mismatch', errors.INVALID_ARGUMENT, { name: 'network', value: network });\n }\n\n // Standard Network\n return {\n name: network.name,\n chainId: n.chainId,\n ensAddress: n.ensAddress\n };\n}\n","'use strict';\n\n//import inherits = require('inherits');\n\nimport { Signer } from '../wallet/wallet';\n\nimport { getAddress, getContractAddress } from '../utils/address';\nimport { BigNumber, bigNumberify, BigNumberish } from '../utils/bignumber';\nimport { Arrayish, hexDataLength, hexDataSlice, hexlify, hexStripZeros, isHexString, joinSignature, stripZeros } from '../utils/bytes';\nimport { toUtf8String } from '../utils/utf8';\nimport { decode as rlpDecode, encode as rlpEncode } from '../utils/rlp';\nimport { hashMessage, namehash } from '../utils/hash';\nimport { getNetwork, Network, Networkish } from './networks';\nimport { defineReadOnly, resolveProperties, shallowCopy } from '../utils/properties';\nimport { parse as parseTransaction, sign as signTransaction, SignDigestFunc, Transaction } from '../utils/transaction';\n\nimport * as errors from '../utils/errors';\n\n\n//////////////////////////////\n// Exported Types\n\nexport type BlockTag = string | number;\n\nexport interface Block {\n hash: string;\n parentHash: string;\n number: number;\n\n timestamp: number;\n nonce: string;\n difficulty: number;\n\n gasLimit: BigNumber;\n gasUsed: BigNumber;\n\n miner: string;\n extraData: string;\n\n transactions: Array;\n}\n\nexport type TransactionRequest = {\n to?: string | Promise,\n from?: string | Promise,\n nonce?: number | string | Promise,\n\n gasLimit?: BigNumberish | Promise,\n gasPrice?: BigNumberish | Promise,\n\n data?: Arrayish | Promise,\n value?: BigNumberish | Promise,\n chainId?: number | Promise,\n}\n\nexport interface TransactionResponse extends Transaction {\n // Only if a transaction has been mined\n blockNumber?: number,\n blockHash?: string,\n timestamp?: number,\n\n // Not optional (as it is in Transaction)\n from: string;\n\n // This function waits until the transaction has been mined\n wait: (timeout?: number) => Promise\n};\n\nexport interface TransactionReceipt {\n contractAddress?: string,\n transactionIndex?: number,\n root?: string,\n gasUsed?: BigNumber,\n logsBloom?: string,\n blockHash?: string,\n transactionHash?: string,\n logs?: Array,\n blockNumber?: number,\n cumulativeGasUsed?: BigNumber,\n byzantium: boolean,\n status?: number // @TOOD: Check 0 or 1?\n};\n\nexport type Filter = {\n fromBlock?: BlockTag,\n toBlock?: BlockTag,\n address?: string,\n topics?: Array\n}\n\n// @TODO: Some of these are not options; force them?\nexport interface Log {\n blockNumber?: number;\n blockHash?: string;\n transactionIndex?: number;\n\n removed?: boolean;\n\n transactionLogIndex?: number,\n\n address: string;\n data?: string;\n\n topics?: Array;\n\n transactionHash?: string;\n logIndex?: number;\n}\n\nexport type Listener = (...args: Array) => void;\n\n//////////////////////////////\n// Request and Response Checking\n\n// @TODO: not any?\nfunction check(format: any, object: any): any {\n var result: any = {};\n for (var key in format) {\n try {\n var value = format[key](object[key]);\n if (value !== undefined) { result[key] = value; }\n } catch (error) {\n error.checkKey = key;\n error.checkValue = object[key];\n throw error;\n }\n }\n return result;\n}\n\ntype CheckFunc = (value: any) => any;\n\nfunction allowNull(check: CheckFunc, nullValue?: any): CheckFunc {\n return (function(value: any) {\n if (value == null) { return nullValue; }\n return check(value);\n });\n}\n\nfunction allowFalsish(check: CheckFunc, replaceValue: any): CheckFunc {\n return (function(value) {\n if (!value) { return replaceValue; }\n return check(value);\n });\n}\n\nfunction arrayOf(check: CheckFunc): CheckFunc {\n return (function(array: any): Array {\n if (!Array.isArray(array)) { throw new Error('not an array'); }\n\n var result: any = [];\n\n array.forEach(function(value) {\n result.push(check(value));\n });\n\n return result;\n });\n}\n\nfunction checkHash(hash: any): string {\n if (typeof(hash) === 'string' && hexDataLength(hash) === 32) {\n return hash;\n }\n errors.throwError('invalid hash', errors.INVALID_ARGUMENT, { arg: 'hash', value: hash });\n return null;\n}\n\nfunction checkNumber(number: any): number {\n return bigNumberify(number).toNumber();\n}\n\n// Returns the difficulty as a number, or if too large (i.e. PoA network) null\nfunction checkDifficulty(value: BigNumberish): number {\n let v = bigNumberify(value);\n\n try {\n return v.toNumber();\n } catch (error) { }\n\n return null;\n}\n\nfunction checkBoolean(value: any): boolean {\n if (typeof(value) === 'boolean') { return value; }\n if (typeof(value) === 'string') {\n if (value === 'true') { return true; }\n if (value === 'false') { return false; }\n }\n throw new Error('invaid boolean - ' + value);\n}\n\nfunction checkUint256(uint256: string): string {\n if (!isHexString(uint256)) {\n throw new Error('invalid uint256');\n }\n while (uint256.length < 66) {\n uint256 = '0x0' + uint256.substring(2);\n }\n return uint256;\n}\n\n/*\nfunction checkString(string) {\n if (typeof(string) !== 'string') { throw new Error('invalid string'); }\n return string;\n}\n*/\n\nfunction checkBlockTag(blockTag: BlockTag): string {\n if (blockTag == null) { return 'latest'; }\n\n if (blockTag === 'earliest') { return '0x0'; }\n\n if (blockTag === 'latest' || blockTag === 'pending') {\n return blockTag;\n }\n\n if (typeof(blockTag) === 'number') {\n return hexStripZeros(hexlify(blockTag));\n }\n\n if (isHexString(blockTag)) { return hexStripZeros(blockTag); }\n\n throw new Error('invalid blockTag');\n}\n\nvar formatBlock = {\n hash: checkHash,\n parentHash: checkHash,\n number: checkNumber,\n\n timestamp: checkNumber,\n nonce: allowNull(hexlify),\n difficulty: checkDifficulty,\n\n gasLimit: bigNumberify,\n gasUsed: bigNumberify,\n\n miner: getAddress,\n extraData: hexlify,\n\n //transactions: allowNull(arrayOf(checkTransaction)),\n transactions: allowNull(arrayOf(checkHash)),\n\n //transactionRoot: checkHash,\n //stateRoot: checkHash,\n //sha3Uncles: checkHash,\n\n //logsBloom: hexlify,\n};\n\nfunction checkBlock(block: any): Block {\n if (block.author != null && block.miner == null) {\n block.miner = block.author;\n }\n return check(formatBlock, block);\n}\n\n\nvar formatTransaction = {\n hash: checkHash,\n\n blockHash: allowNull(checkHash, null),\n blockNumber: allowNull(checkNumber, null),\n transactionIndex: allowNull(checkNumber, null),\n\n from: getAddress,\n\n gasPrice: bigNumberify,\n gasLimit: bigNumberify,\n to: allowNull(getAddress, null),\n value: bigNumberify,\n nonce: checkNumber,\n data: hexlify,\n\n r: allowNull(checkUint256),\n s: allowNull(checkUint256),\n v: allowNull(checkNumber),\n\n creates: allowNull(getAddress, null),\n\n raw: allowNull(hexlify),\n};\n\nexport function checkTransactionResponse(transaction: any): TransactionResponse {\n\n // Rename gas to gasLimit\n if (transaction.gas != null && transaction.gasLimit == null) {\n transaction.gasLimit = transaction.gas;\n }\n\n // Some clients (TestRPC) do strange things like return 0x0 for the\n // 0 address; correct this to be a real address\n if (transaction.to && bigNumberify(transaction.to).isZero()) {\n transaction.to = '0x0000000000000000000000000000000000000000';\n }\n\n // Rename input to data\n if (transaction.input != null && transaction.data == null) {\n transaction.data = transaction.input;\n }\n\n // If to and creates are empty, populate the creates from the transaction\n if (transaction.to == null && transaction.creates == null) {\n transaction.creates = getContractAddress(transaction);\n }\n\n if (!transaction.raw) {\n // Very loose providers (e.g. TestRPC) don't provide a signature or raw\n if (transaction.v && transaction.r && transaction.s) {\n var raw = [\n stripZeros(hexlify(transaction.nonce)),\n stripZeros(hexlify(transaction.gasPrice)),\n stripZeros(hexlify(transaction.gasLimit)),\n (transaction.to || \"0x\"),\n stripZeros(hexlify(transaction.value || '0x')),\n hexlify(transaction.data || '0x'),\n stripZeros(hexlify(transaction.v || '0x')),\n stripZeros(hexlify(transaction.r)),\n stripZeros(hexlify(transaction.s)),\n ];\n\n transaction.raw = rlpEncode(raw);\n }\n }\n\n\n var result = check(formatTransaction, transaction);\n\n var networkId = transaction.networkId;\n\n if (isHexString(networkId)) {\n networkId = bigNumberify(networkId).toNumber();\n }\n\n if (typeof(networkId) !== 'number' && result.v != null) {\n networkId = (result.v - 35) / 2;\n if (networkId < 0) { networkId = 0; }\n networkId = parseInt(networkId);\n }\n\n if (typeof(networkId) !== 'number') { networkId = 0; }\n\n result.networkId = networkId;\n \n // 0x0000... should actually be null\n if (result.blockHash && result.blockHash.replace(/0/g, '') === 'x') {\n result.blockHash = null;\n }\n\n return result;\n}\n\nvar formatTransactionRequest = {\n from: allowNull(getAddress),\n nonce: allowNull(checkNumber),\n gasLimit: allowNull(bigNumberify),\n gasPrice: allowNull(bigNumberify),\n to: allowNull(getAddress),\n value: allowNull(bigNumberify),\n data: allowNull(hexlify),\n};\n\nfunction checkTransactionRequest(transaction: any): any {\n return check(formatTransactionRequest, transaction);\n}\n\nvar formatTransactionReceiptLog = {\n transactionLogIndex: allowNull(checkNumber),\n transactionIndex: checkNumber,\n blockNumber: checkNumber,\n transactionHash: checkHash,\n address: getAddress,\n topics: arrayOf(checkHash),\n data: hexlify,\n logIndex: checkNumber,\n blockHash: checkHash,\n};\n\nfunction checkTransactionReceiptLog(log: any): any {\n return check(formatTransactionReceiptLog, log);\n}\n\nvar formatTransactionReceipt = {\n contractAddress: allowNull(getAddress, null),\n transactionIndex: checkNumber,\n root: allowNull(checkHash),\n gasUsed: bigNumberify,\n logsBloom: allowNull(hexlify),\n blockHash: checkHash,\n transactionHash: checkHash,\n logs: arrayOf(checkTransactionReceiptLog),\n blockNumber: checkNumber,\n cumulativeGasUsed: bigNumberify,\n status: allowNull(checkNumber)\n};\n\nfunction checkTransactionReceipt(transactionReceipt: any): TransactionReceipt {\n //var status = transactionReceipt.status;\n //var root = transactionReceipt.root;\n\n var result: TransactionReceipt = check(formatTransactionReceipt, transactionReceipt);\n result.logs.forEach(function(entry, index) {\n if (entry.transactionLogIndex == null) {\n entry.transactionLogIndex = index;\n }\n });\n if (transactionReceipt.status != null) {\n result.byzantium = true;\n }\n return result;\n}\n\nfunction checkTopics(topics: any): any {\n if (Array.isArray(topics)) {\n topics.forEach(function(topic) {\n checkTopics(topic);\n });\n\n } else if (topics != null) {\n checkHash(topics);\n }\n\n return topics;\n}\n\nvar formatFilter = {\n fromBlock: allowNull(checkBlockTag, undefined),\n toBlock: allowNull(checkBlockTag, undefined),\n address: allowNull(getAddress, undefined),\n topics: allowNull(checkTopics, undefined),\n};\n\nfunction checkFilter(filter: any): any {\n return check(formatFilter, filter);\n}\n\nvar formatLog = {\n blockNumber: allowNull(checkNumber),\n blockHash: allowNull(checkHash),\n transactionIndex: checkNumber,\n\n removed: allowNull(checkBoolean),\n\n address: getAddress,\n data: allowFalsish(hexlify, '0x'),\n\n topics: arrayOf(checkHash),\n\n transactionHash: checkHash,\n logIndex: checkNumber,\n}\n\nfunction checkLog(log: any): any {\n return check(formatLog, log);\n}\n\n//////////////////////////////\n// Defer Promises\n\ntype AllowNullFunc = () => boolean;\ntype ExecuteFunc = () => Promise\nfunction stallPromise(allowNullFunc: AllowNullFunc, executeFunc: ExecuteFunc): Promise {\n return new Promise(function(resolve, reject) {\n var attempt = 0;\n function check() {\n executeFunc().then(function(result) {\n // If we have a result, or are allowed null then we're done\n if (result || allowNullFunc()) {\n resolve(result);\n\n // Otherwise, exponential back-off (up to 10s) our next request\n } else {\n attempt++;\n var timeout = 500 + 250 * parseInt(String(Math.random() * (1 << attempt)));\n if (timeout > 10000) { timeout = 10000; }\n setTimeout(check, timeout);\n }\n }, function(error) {\n reject(error);\n });\n }\n check();\n });\n}\n\n//////////////////////////////\n// Event Serializeing\n\nfunction recurse(object: any, convertFunc: (object: any) => any): any {\n if (Array.isArray(object)) {\n var result: any = [];\n object.forEach(function(object) {\n result.push(recurse(object, convertFunc));\n });\n return result;\n }\n return convertFunc(object);\n}\n\nfunction getEventString(object: any): string {\n try {\n return 'address:' + getAddress(object);\n } catch (error) { }\n\n if (object === 'block' || object === 'pending' || object === 'error') {\n return object;\n\n } else if (hexDataLength(object) === 32) {\n return 'tx:' + object;\n\n } else if (Array.isArray(object)) {\n // Replace null in the structure with '0x'\n let stringified: any = recurse(object, function(object: any) {\n if (object == null) { object = '0x'; }\n return object;\n });\n\n try {\n return 'topic:' + rlpEncode(stringified);\n } catch (error) {\n console.log(error);\n }\n }\n try {\n throw new Error();\n } catch(e) {\n console.log(e.stack);\n }\n\n throw new Error('invalid event - ' + object);\n}\n\nfunction parseEventString(event: string): { type: string, address?: string, hash?: string, topic?: any } {\n if (event.substring(0, 3) === 'tx:') {\n return { type: 'transaction', hash: event.substring(3) };\n\n } else if (event === 'block' || event === 'pending' || event === 'error') {\n return { type: event };\n\n } else if (event.substring(0, 8) === 'address:') {\n return { type: 'address', address: event.substring(8) };\n\n } else if (event.substring(0, 6) === 'topic:') {\n try {\n let object = recurse(rlpDecode(event.substring(6)), function(object: any) {\n if (object === '0x') { object = null; }\n return object;\n });\n return { type: 'topic', topic: object };\n } catch (error) {\n console.log(error);\n }\n }\n\n throw new Error('invalid event string');\n}\n//////////////////////////////\n// Provider Object\n\n\n/* @TODO:\ntype Event = {\n eventName: string,\n listener: any, // @TODO: Function any: any\n type: string,\n}\n*/\n\n// @TODO: Perhaps allow a SignDigestAsyncFunc?\n\n// Enable a simple signing function and provider to provide a full Signer\nexport class ProviderSigner extends Signer {\n readonly provider: Provider;\n readonly signDigest: SignDigestFunc;\n\n private _addressPromise: Promise;\n\n constructor(address: string | Promise, signDigest: SignDigestFunc, provider: Provider) {\n super();\n errors.checkNew(this, ProviderSigner);\n defineReadOnly(this, '_addressPromise', Promise.resolve(address));\n defineReadOnly(this, 'signDigest', signDigest);\n defineReadOnly(this, 'provider', provider);\n }\n\n getAddress(): Promise {\n return this._addressPromise;\n }\n\n signMessage(message: Arrayish | string): Promise {\n return Promise.resolve(joinSignature(this.signDigest(hashMessage(message))));\n }\n\n sendTransaction(transaction: TransactionRequest): Promise {\n transaction = shallowCopy(transaction);\n\n if (transaction.chainId == null) {\n transaction.chainId = this.provider.getNetwork().then((network) => {\n return network.chainId;\n });\n }\n\n if (transaction.from == null) {\n transaction.from = this.getAddress();\n }\n\n if (transaction.gasLimit == null) {\n transaction.gasLimit = this.provider.estimateGas(transaction);\n }\n\n if (transaction.gasPrice == null) {\n transaction.gasPrice = this.provider.getGasPrice();\n }\n\n return resolveProperties(transaction).then((tx) => {\n let signedTx = signTransaction(tx, this.signDigest);\n return this._addressPromise.then((address) => {\n if (parseTransaction(signedTx).from !== address) {\n errors.throwError('signing address does not match expected address', errors.UNKNOWN_ERROR, { address: parseTransaction(signedTx).from, expectedAddress: address, signedTransaction: signedTx });\n }\n return this.provider.sendTransaction(signedTx);\n });\n });\n }\n}\n\nexport class Provider {\n private _network: Network;\n\n // string => Event\n private _events: any;\n protected _emitted: any;\n\n private _pollingInterval: number;\n private _poller: any; // @TODO: what does TypeScript thing setInterval returns?\n\n private _lastBlockNumber: number;\n\n // string => BigNumber\n private _balances: any;\n\n\n /**\n * ready\n *\n * A Promise that resolves only once the provider is ready.\n *\n * Sub-classes that call the super with a network without a chainId\n * MUST set this. Standard named networks have a known chainId.\n *\n */\n protected ready: Promise;\n\n constructor(network: Networkish | Promise) {\n errors.checkNew(this, Provider);\n\n if (network instanceof Promise) {\n defineReadOnly(this, 'ready', network.then((network) => {\n defineReadOnly(this, '_network', network);\n return network;\n }));\n\n } else {\n let knownNetwork = getNetwork((network == null) ? 'homestead': network);\n if (knownNetwork) {\n defineReadOnly(this, '_network', knownNetwork);\n defineReadOnly(this, 'ready', Promise.resolve(this._network));\n\n } else {\n errors.throwError('invalid network', errors.INVALID_ARGUMENT, { arg: 'network', value: network });\n }\n }\n\n this._lastBlockNumber = -2;\n\n // Balances being watched for changes\n this._balances = {};\n\n // Events being listened to\n this._events = {};\n\n this._pollingInterval = 4000;\n\n // We use this to track recent emitted events; for example, if we emit a \"block\" of 100\n // and we get a `getBlock(100)` request which would result in null, we should retry\n // until we get a response. This provides devs with a consistent view. Similarly for\n // transaction hashes.\n this._emitted = { block: this._lastBlockNumber };\n }\n\n private _doPoll(): void {\n this.getBlockNumber().then((blockNumber) => {\n\n // If the block hasn't changed, meh.\n if (blockNumber === this._lastBlockNumber) { return; }\n\n if (this._lastBlockNumber === -2) { this._lastBlockNumber = blockNumber - 1; }\n\n // Notify all listener for each block that has passed\n for (var i = this._lastBlockNumber + 1; i <= blockNumber; i++) {\n if (this._emitted.block < i) {\n this._emitted.block = i;\n\n // Evict any transaction hashes or block hashes over 12 blocks\n // old, since they should not return null anyways\n Object.keys(this._emitted).forEach((key) => {\n if (key === 'block') { return; }\n\n if (this._emitted[key] > i + 12) {\n delete this._emitted[key];\n }\n });\n }\n this.emit('block', i);\n }\n\n // Sweep balances and remove addresses we no longer have events for\n var newBalances: any = {};\n\n // Find all transaction hashes we are waiting on\n Object.keys(this._events).forEach((eventName) => {\n var event = parseEventString(eventName);\n\n if (event.type === 'transaction') {\n this.getTransaction(event.hash).then((transaction) => {\n if (!transaction || transaction.blockNumber == null) { return; }\n this._emitted['t:' + transaction.hash.toLowerCase()] = transaction.blockNumber;\n this.emit(event.hash, transaction);\n });\n\n } else if (event.type === 'address') {\n if (this._balances[event.address]) {\n newBalances[event.address] = this._balances[event.address];\n }\n this.getBalance(event.address, 'latest').then(function(balance) {\n var lastBalance = this._balances[event.address];\n if (lastBalance && balance.eq(lastBalance)) { return; }\n this._balances[event.address] = balance;\n this.emit(event.address, balance);\n });\n\n } else if (event.type === 'topic') {\n this.getLogs({\n fromBlock: this._lastBlockNumber + 1,\n toBlock: blockNumber,\n topics: event.topic\n }).then((logs) => {\n if (logs.length === 0) { return; }\n logs.forEach((log) => {\n this._emitted['b:' + log.blockHash.toLowerCase()] = log.blockNumber;\n this._emitted['t:' + log.transactionHash.toLowerCase()] = log.blockNumber;\n this.emit(event.topic, log);\n });\n });\n }\n });\n\n this._lastBlockNumber = blockNumber;\n\n this._balances = newBalances;\n });\n this.doPoll();\n }\n\n resetEventsBlock(blockNumber: number): void {\n this._lastBlockNumber = this.blockNumber;\n this._doPoll();\n }\n\n get network(): Network {\n return this._network;\n }\n\n getNetwork(): Promise {\n return this.ready;\n }\n\n get blockNumber(): number {\n if (this._lastBlockNumber < 0) { return null; }\n return this._lastBlockNumber;\n }\n\n get polling(): boolean {\n return (this._poller != null);\n }\n\n set polling(value: boolean) {\n setTimeout(() => {\n if (value && !this._poller) {\n this._poller = setInterval(this._doPoll.bind(this), this.pollingInterval);\n\n } else if (!value && this._poller) {\n clearInterval(this._poller);\n this._poller = null;\n }\n }, 0);\n }\n\n get pollingInterval(): number {\n return this._pollingInterval;\n }\n\n set pollingInterval(value: number) {\n if (typeof(value) !== 'number' || value <= 0 || parseInt(String(value)) != value) {\n throw new Error('invalid polling interval');\n }\n\n this._pollingInterval = value;\n\n if (this._poller) {\n clearInterval(this._poller);\n this._poller = setInterval(() => { this._doPoll() }, this._pollingInterval);\n }\n }\n\n // @TODO: Add .poller which must be an event emitter with a 'start', 'stop' and 'block' event;\n // this will be used once we move to the WebSocket or other alternatives to polling\n\n waitForTransaction(transactionHash: string, timeout?: number): Promise {\n var self = this;\n return new Promise(function(resolve, reject) {\n var timer: any = null;\n\n function complete(transaction: TransactionResponse) {\n if (timer) { clearTimeout(timer); }\n resolve(transaction);\n }\n\n self.once(transactionHash, complete);\n\n if (typeof(timeout) === 'number' && timeout > 0) {\n timer = setTimeout(function() {\n self.removeListener(transactionHash, complete);\n reject(new Error('timeout'));\n }, timeout);\n }\n });\n }\n\n getBlockNumber(): Promise {\n return this.ready.then(() => {\n return this.perform('getBlockNumber', { }).then((result) => {\n var value = parseInt(result);\n if (value != result) { throw new Error('invalid response - getBlockNumber'); }\n return value;\n });\n });\n }\n\n getGasPrice(): Promise {\n return this.ready.then(() => {\n return this.perform('getGasPrice', { }).then((result) => {\n return bigNumberify(result);\n });\n });\n }\n\n\n getBalance(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise {\n return this.ready.then(() => {\n return resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(({ addressOrName, blockTag }) => {\n return this.resolveName(addressOrName).then((address) => {\n var params = { address: address, blockTag: checkBlockTag(blockTag) };\n return this.perform('getBalance', params).then((result) => {\n return bigNumberify(result);\n });\n });\n });\n });\n }\n\n getTransactionCount(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise {\n return this.ready.then(() => {\n return resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(({ addressOrName, blockTag }) => {\n return this.resolveName(addressOrName).then((address) => {\n var params = { address: address, blockTag: checkBlockTag(blockTag) };\n return this.perform('getTransactionCount', params).then((result) => {\n return bigNumberify(result).toNumber();\n });\n });\n });\n });\n }\n\n getCode(addressOrName: string | Promise, blockTag?: BlockTag | Promise): Promise {\n return this.ready.then(() => {\n return resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(({ addressOrName, blockTag }) => {\n return this.resolveName(addressOrName).then((address) => {\n var params = {address: address, blockTag: checkBlockTag(blockTag)};\n return this.perform('getCode', params).then((result) => {\n return hexlify(result);\n });\n });\n });\n });\n }\n\n getStorageAt(addressOrName: string | Promise, position: BigNumberish | Promise, blockTag?: BlockTag | Promise): Promise {\n return this.ready.then(() => {\n return resolveProperties({ addressOrName: addressOrName, position: position, blockTag: blockTag }).then(({ addressOrName, position, blockTag }) => {\n return this.resolveName(addressOrName).then((address) => {\n var params = {\n address: address,\n blockTag: checkBlockTag(blockTag),\n position: hexStripZeros(hexlify(position)),\n };\n return this.perform('getStorageAt', params).then((result) => {\n return hexlify(result);\n });\n });\n });\n });\n }\n\n sendTransaction(signedTransaction: string | Promise): Promise {\n return this.ready.then(() => {\n return resolveProperties({ signedTransaction: signedTransaction }).then(({ signedTransaction }) => {\n var params = { signedTransaction: hexlify(signedTransaction) };\n return this.perform('sendTransaction', params).then((hash) => {\n if (hexDataLength(hash) !== 32) { throw new Error('invalid response - sendTransaction'); }\n\n // A signed transaction always has a from (and we add wait below)\n var tx = parseTransaction(signedTransaction);\n\n // Check the hash we expect is the same as the hash the server reported\n if (tx.hash !== hash) {\n errors.throwError('Transaction hash mismatch from Proivder.sendTransaction.', errors.UNKNOWN_ERROR, { expectedHash: tx.hash, returnedHash: hash });\n }\n this._emitted['t:' + tx.hash.toLowerCase()] = 'pending';\n tx.wait = (timeout?: number) => {\n return this.waitForTransaction(hash, timeout);\n };\n\n return tx;\n });\n });\n });\n }\n\n\n call(transaction: TransactionRequest): Promise {\n let tx: TransactionRequest = shallowCopy(transaction);\n return this.ready.then(() => {\n return resolveProperties(tx).then((tx) => {\n return this._resolveNames(tx, [ 'to', 'from' ]).then((tx) => {\n var params = { transaction: checkTransactionRequest(tx) };\n return this.perform('call', params).then((result) => {\n return hexlify(result);\n });\n });\n });\n });\n }\n\n estimateGas(transaction: TransactionRequest) {\n let tx: TransactionRequest = {\n to: transaction.to,\n from: transaction.from,\n data: transaction.data\n };\n\n return this.ready.then(() => {\n return resolveProperties(tx).then((tx) => {\n return this._resolveNames(tx, [ 'to', 'from' ]).then((tx) => {\n var params = { transaction: checkTransactionRequest(tx) };\n return this.perform('estimateGas', params).then((result) => {\n return bigNumberify(result);\n });\n });\n });\n });\n }\n\n getBlock(blockHashOrBlockTag: BlockTag | string | Promise): Promise {\n return this.ready.then(() => {\n return resolveProperties({ blockHashOrBlockTag: blockHashOrBlockTag }).then(({ blockHashOrBlockTag }) => {\n try {\n var blockHash = hexlify(blockHashOrBlockTag);\n if (hexDataLength(blockHash) === 32) {\n return stallPromise(() => {\n return (this._emitted['b:' + blockHash.toLowerCase()] == null);\n }, () => {\n return this.perform('getBlock', {blockHash: blockHash}).then((block) => {\n if (block == null) { return null; }\n return checkBlock(block);\n });\n });\n }\n } catch (error) { }\n\n try {\n var blockTag = checkBlockTag(blockHashOrBlockTag);\n return stallPromise(() => {\n if (isHexString(blockTag)) {\n var blockNumber = parseInt(blockTag.substring(2), 16);\n return blockNumber > this._emitted.block;\n }\n return true;\n }, () => {\n return this.perform('getBlock', { blockTag: blockTag }).then((block) => {\n if (block == null) { return null; }\n return checkBlock(block);\n });\n });\n } catch (error) { }\n\n throw new Error('invalid block hash or block tag');\n });\n });\n }\n\n getTransaction(transactionHash: string): Promise {\n return this.ready.then(() => {\n return resolveProperties({ transactionHash: transactionHash }).then(({ transactionHash }) => {\n var params = { transactionHash: checkHash(transactionHash) };\n return stallPromise(() => {\n return (this._emitted['t:' + transactionHash.toLowerCase()] == null);\n }, () => {\n return this.perform('getTransaction', params).then((result) => {\n if (result != null) { result = checkTransactionResponse(result); }\n return result;\n });\n });\n });\n });\n }\n\n getTransactionReceipt(transactionHash: string): Promise {\n return this.ready.then(() => {\n return resolveProperties({ transactionHash: transactionHash }).then(({ transactionHash }) => {\n var params = { transactionHash: checkHash(transactionHash) };\n return stallPromise(() => {\n return (this._emitted['t:' + transactionHash.toLowerCase()] == null);\n }, () => {\n return this.perform('getTransactionReceipt', params).then((result) => {\n if (result != null) { result = checkTransactionReceipt(result); }\n return result;\n });\n });\n });\n });\n }\n\n getLogs(filter: Filter): Promise>{\n return this.ready.then(() => {\n return resolveProperties(filter).then((filter) => {\n return this._resolveNames(filter, ['address']).then((filter) => {\n var params = { filter: checkFilter(filter) };\n return this.perform('getLogs', params).then((result) => {\n return arrayOf(checkLog)(result);\n });\n });\n });\n });\n }\n\n getEtherPrice(): Promise {\n return this.ready.then(() => {\n return this.perform('getEtherPrice', {}).then((result) => {\n // @TODO: Check valid float\n return result;\n });\n });\n }\n\n // @TODO: Could probably use resolveProperties instead?\n _resolveNames(object: any, keys: Array): Promise<{ [key: string]: string }> {\n var promises: Array> = [];\n\n var result: { [key: string ]: string } = shallowCopy(object);\n\n keys.forEach(function(key) {\n if (result[key] === undefined) { return; }\n promises.push(this.resolveName(result[key]).then((address: string) => {\n result[key] = address;\n }));\n }, this);\n\n return Promise.all(promises).then(function() { return result; });\n }\n\n _getResolver(name: string): Promise {\n // Get the resolver from the blockchain\n return this.getNetwork().then((network) => {\n\n // No ENS...\n if (!network.ensAddress) {\n errors.throwError(\n 'network does support ENS',\n errors.UNSUPPORTED_OPERATION,\n { operation: 'ENS', network: network.name }\n );\n }\n\n // keccak256('resolver(bytes32)')\n var data = '0x0178b8bf' + namehash(name).substring(2);\n var transaction = { to: network.ensAddress, data: data };\n\n return this.call(transaction).then((data) => {\n\n // extract the address from the data\n if (hexDataLength(data) !== 32) { return null; }\n return getAddress(hexDataSlice(data, 12));\n });\n });\n }\n\n resolveName(name: string | Promise): Promise {\n\n // If it is a promise, resolve it then recurse\n if (name instanceof Promise) {\n return name.then((addressOrName) => {\n return this.resolveName(addressOrName);\n });\n }\n\n // If it is already an address, nothing to resolve\n try {\n return Promise.resolve(getAddress(name));\n } catch (error) { }\n\n var self = this;\n\n var nodeHash = namehash(name);\n\n // Get the addr from the resovler\n return this._getResolver(name).then(function(resolverAddress) {\n\n // keccak256('addr(bytes32)')\n var data = '0x3b3b57de' + nodeHash.substring(2);\n var transaction = { to: resolverAddress, data: data };\n return self.call(transaction);\n\n // extract the address from the data\n }).then(function(data) {\n if (hexDataLength(data) !== 32) { return null; }\n var address = getAddress(hexDataSlice(data, 12));\n if (address === '0x0000000000000000000000000000000000000000') { return null; }\n return address;\n });\n }\n\n lookupAddress(address: string | Promise): Promise {\n if (address instanceof Promise) {\n return address.then((address) => {\n return this.lookupAddress(address);\n });\n }\n\n address = getAddress(address);\n\n var name = address.substring(2) + '.addr.reverse'\n var nodehash = namehash(name);\n\n var self = this;\n\n return this._getResolver(name).then(function(resolverAddress) {\n if (!resolverAddress) { return null; }\n\n // keccak('name(bytes32)')\n var data = '0x691f3431' + nodehash.substring(2);\n var transaction = { to: resolverAddress, data: data };\n return self.call(transaction);\n\n }).then(function(data) {\n // Strip off the \"0x\"\n data = data.substring(2);\n\n // Strip off the dynamic string pointer (0x20)\n if (data.length < 64) { return null; }\n data = data.substring(64);\n\n if (data.length < 64) { return null; }\n var length = bigNumberify('0x' + data.substring(0, 64)).toNumber();\n data = data.substring(64);\n\n if (2 * length > data.length) { return null; }\n\n var name = toUtf8String('0x' + data.substring(0, 2 * length));\n\n // Make sure the reverse record matches the foward record\n return self.resolveName(name).then(function(addr) {\n if (addr != address) { return null; }\n return name;\n });\n\n });\n }\n\n doPoll(): void {\n }\n\n perform(method: string, params: any): Promise {\n errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method });\n return null;\n }\n\n _startPending(): void {\n console.log('WARNING: this provider does not support pending events');\n }\n\n _stopPending(): void {\n }\n\n on(eventName: any, listener: Listener): Provider {\n var key = getEventString(eventName);\n if (!this._events[key]) { this._events[key] = []; }\n this._events[key].push({eventName: eventName, listener: listener, type: 'on'});\n if (key === 'pending') { this._startPending(); }\n this.polling = true;\n\n return this;\n }\n\n once(eventName: any, listener: Listener): Provider {\n var key = getEventString(eventName);\n if (!this._events[key]) { this._events[key] = []; }\n this._events[key].push({eventName: eventName, listener: listener, type: 'once'});\n if (key === 'pending') { this._startPending(); }\n this.polling = true;\n\n return this;\n }\n\n emit(eventName: any, ...args: Array): boolean {\n let result = false;\n\n var key = getEventString(eventName);\n\n //var args = Array.prototype.slice.call(arguments, 1);\n var listeners = this._events[key];\n if (!listeners) { return result; }\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n if (listener.type === 'once') {\n listeners.splice(i, 1);\n i--;\n }\n\n try {\n listener.listener.apply(this, args);\n result = true;\n } catch (error) {\n console.log('Event Listener Error: ' + error.message);\n }\n }\n\n if (listeners.length === 0) {\n delete this._events[key];\n if (key === 'pending') { this._stopPending(); }\n }\n\n if (this.listenerCount() === 0) { this.polling = false; }\n\n return result;\n }\n\n // @TODO: type EventName\n listenerCount(eventName?: any): number {\n if (!eventName) {\n var result = 0;\n for (var key in this._events) {\n result += this._events[key].length;\n }\n return result;\n }\n\n var listeners = this._events[getEventString(eventName)];\n if (!listeners) { return 0; }\n return listeners.length;\n }\n\n listeners(eventName: any): Array {\n var listeners = this._events[getEventString(eventName)];\n if (!listeners) { return []; }\n var result = [];\n for (var i = 0; i < listeners.length; i++) {\n result.push(listeners[i].listener);\n }\n return result;\n }\n\n removeAllListeners(eventName: any): Provider {\n delete this._events[getEventString(eventName)];\n if (this.listenerCount() === 0) { this.polling = false; }\n\n return this;\n }\n\n removeListener(eventName: any, listener: Listener): Provider {\n var eventNameString = getEventString(eventName);\n var listeners = this._events[eventNameString];\n if (!listeners) { return this; }\n\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].listener === listener) {\n listeners.splice(i, 1);\n break;\n }\n }\n\n if (listeners.length === 0) {\n this.removeAllListeners(eventName);\n }\n\n return this;\n }\n}\n\n/*\nfunction inheritable(parent) {\n return function(child) {\n inherits(child, parent);\n defineProperty(child, 'inherits', inheritable(child));\n }\n}\n\ndefineProperty(Provider, 'inherits', inheritable(Provider));\n*/\n/*\nfunction(child) {\n inherits(child, Provider);\n child.inherits = function(grandchild) {\n inherits(grandchild, child)\n }\n});\n*/\n","'use strict';\n\nimport { EventDescription, Interface } from './interface';\n\nimport { Provider, TransactionRequest, TransactionResponse } from '../providers/provider';\nimport { Signer } from '../wallet/wallet';\n\nimport { defaultAbiCoder } from '../utils/abi-coder';\nimport { getContractAddress } from '../utils/address';\nimport { hexDataLength, hexDataSlice, isHexString } from '../utils/bytes';\nimport { ParamType } from '../utils/abi-coder';\nimport { BigNumber, ConstantZero } from '../utils/bignumber';\nimport { defineReadOnly, shallowCopy } from '../utils/properties';\n\nimport * as errors from '../utils/errors';\n\nvar allowedTransactionKeys: { [ key: string ]: boolean } = {\n data: true, from: true, gasLimit: true, gasPrice:true, nonce: true, to: true, value: true\n}\n\n// Recursively replaces ENS names with promises to resolve the name and\n// stalls until all promises have returned\n// @TODO: Expand this to resolve any promises too\nfunction resolveAddresses(provider: Provider, value: any, paramType: ParamType | Array): Promise {\n if (Array.isArray(paramType)) {\n var promises: Array> = [];\n paramType.forEach((paramType, index) => {\n var v = null;\n if (Array.isArray(value)) {\n v = value[index];\n } else {\n v = value[paramType.name];\n }\n promises.push(resolveAddresses(provider, v, paramType));\n });\n return Promise.all(promises);\n }\n\n if (paramType.type === 'address') {\n return provider.resolveName(value);\n }\n\n if (paramType.components) {\n return resolveAddresses(provider, value, paramType.components);\n }\n\n return Promise.resolve(value);\n}\n\n\ntype RunFunction = (...params: Array) => Promise;\n\nfunction runMethod(contract: Contract, functionName: string, estimateOnly: boolean): RunFunction {\n let method = contract.interface.functions[functionName];\n return function(...params): Promise {\n var tx: any = {}\n\n // If 1 extra parameter was passed in, it contains overrides\n if (params.length === method.inputs.length + 1 && typeof(params[params.length - 1]) === 'object') {\n tx = shallowCopy(params.pop());\n\n // Check for unexpected keys (e.g. using \"gas\" instead of \"gasLimit\")\n for (var key in tx) {\n if (!allowedTransactionKeys[key]) {\n throw new Error('unknown transaction override ' + key);\n }\n }\n }\n\n if (params.length != method.inputs.length) {\n throw new Error('incorrect number of arguments');\n }\n\n // Check overrides make sense\n ['data', 'to'].forEach(function(key) {\n if (tx[key] != null) {\n errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key })\n }\n });\n\n // Send to the contract address\n tx.to = contract.addressPromise;\n\n return resolveAddresses(contract.provider, params, method.inputs).then((params) => {\n tx.data = method.encode(params);\n if (method.type === 'call') {\n\n // Call (constant functions) always cost 0 ether\n if (estimateOnly) {\n return Promise.resolve(ConstantZero);\n }\n\n if (!contract.provider) {\n errors.throwError('call (constant functions) require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'call' })\n }\n\n // Check overrides make sense\n ['gasLimit', 'gasPrice', 'value'].forEach(function(key) {\n if (tx[key] != null) {\n throw new Error('call cannot override ' + key) ;\n }\n });\n\n if (tx.from == null && contract.signer) {\n tx.from = contract.signer.getAddress()\n }\n\n return contract.provider.call(tx).then((value) => {\n\n if ((hexDataLength(value) % 32) === 4 && hexDataSlice(value, 0, 4) === '0x08c379a0') {\n let reason = defaultAbiCoder.decode([ 'string' ], hexDataSlice(value, 4));\n errors.throwError('call revert exception', errors.CALL_EXCEPTION, {\n address: contract.address,\n method: method.signature,\n args: params,\n errorSignature: 'Error(string)',\n errorArgs: [ reason ],\n reason: reason\n });\n }\n\n try {\n let result = method.decode(value);\n if (method.outputs.length === 1) {\n result = result[0];\n }\n return result;\n\n } catch (error) {\n if (value === '0x' && method.outputs.length > 0) {\n errors.throwError('call exception', errors.CALL_EXCEPTION, {\n address: contract.address,\n method: method.signature,\n args: params\n });\n }\n throw error;\n }\n });\n\n } else if (method.type === 'transaction') {\n\n // Only computing the transaction estimate\n if (estimateOnly) {\n if (!contract.provider) {\n errors.throwError('estimate gas require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'estimateGas' })\n }\n\n if (tx.from == null && contract.signer) {\n tx.from = contract.signer.getAddress()\n }\n\n return contract.provider.estimateGas(tx);\n }\n\n if (!contract.signer) {\n errors.throwError('sending a transaction require a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' })\n }\n\n // Make sure they aren't overriding something they shouldn't\n if (tx.from != null) {\n errors.throwError('cannot override from in a transaction', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' })\n }\n\n return contract.signer.sendTransaction(tx);\n }\n\n throw new Error('invalid type - ' + method.type);\n return null;\n });\n }\n}\n\nexport type ContractEstimate = (...params: Array) => Promise;\nexport type ContractFunction = (...params: Array) => Promise;\nexport type ContractEvent = (...params: Array) => void;\n\ninterface Bucket {\n [name: string]: T;\n}\n\nexport type ErrorCallback = (error: Error) => void;\nexport type Contractish = Array | Interface | string;\nexport class Contract {\n readonly address: string;\n readonly interface: Interface;\n\n readonly signer: Signer;\n readonly provider: Provider;\n\n readonly estimate: Bucket;\n readonly functions: Bucket;\n readonly events: Bucket;\n\n readonly addressPromise: Promise;\n\n // This is only set if the contract was created with a call to deploy\n readonly deployTransaction: TransactionResponse;\n\n private _onerror: ErrorCallback;\n\n // https://github.com/Microsoft/TypeScript/issues/5453\n // Once this issue is resolved (there are open PR) we can do this nicer\n // by making addressOrName default to null for 2 operand calls. :)\n\n constructor(addressOrName: string, contractInterface: Contractish, signerOrProvider: Signer | Provider) {\n errors.checkNew(this, Contract);\n\n // @TODO: Maybe still check the addressOrName looks like a valid address or name?\n //address = getAddress(address);\n if (contractInterface instanceof Interface) {\n defineReadOnly(this, 'interface', contractInterface);\n } else {\n defineReadOnly(this, 'interface', new Interface(contractInterface));\n }\n\n if (signerOrProvider instanceof Signer) {\n defineReadOnly(this, 'provider', signerOrProvider.provider);\n defineReadOnly(this, 'signer', signerOrProvider);\n } else if (signerOrProvider instanceof Provider) {\n defineReadOnly(this, 'provider', signerOrProvider);\n defineReadOnly(this, 'signer', null);\n } else {\n errors.throwError('invalid signer or provider', errors.INVALID_ARGUMENT, { arg: 'signerOrProvider', value: signerOrProvider });\n }\n\n defineReadOnly(this, 'estimate', { });\n defineReadOnly(this, 'events', { });\n defineReadOnly(this, 'functions', { });\n\n // Not connected to an on-chain instance, so do not connect functions and events\n if (!addressOrName) {\n defineReadOnly(this, 'address', null);\n defineReadOnly(this, 'addressPromise', Promise.resolve(null));\n return;\n }\n\n defineReadOnly(this, 'address', addressOrName);\n defineReadOnly(this, 'addressPromise', this.provider.resolveName(addressOrName));\n\n Object.keys(this.interface.functions).forEach((name) => {\n var run = runMethod(this, name, false);\n\n if ((this)[name] == null) {\n defineReadOnly(this, name, run);\n } else {\n console.log('WARNING: Multiple definitions for ' + name);\n }\n\n if (this.functions[name] == null) {\n defineReadOnly(this.functions, name, run);\n defineReadOnly(this.estimate, name, runMethod(this, name, true));\n }\n });\n\n Object.keys(this.interface.events).forEach((eventName) => {\n let eventInfo: EventDescription = this.interface.events[eventName];\n\n type Callback = (...args: Array) => void;\n let eventCallback: Callback = null;\n\n let contract = this;\n function handleEvent(log: any): void {\n contract.addressPromise.then((address) => {\n // Not meant for us (the topics just has the same name)\n if (address != log.address) { return; }\n\n try {\n let result = eventInfo.decode(log.data, log.topics);\n\n // Some useful things to have with the log\n log.args = result;\n log.event = eventName;\n log.decode = eventInfo.decode;\n log.removeListener = function() {\n contract.provider.removeListener([ eventInfo.topic ], handleEvent);\n }\n\n log.getBlock = function() { return contract.provider.getBlock(log.blockHash);; }\n log.getTransaction = function() { return contract.provider.getTransaction(log.transactionHash); }\n log.getTransactionReceipt = function() { return contract.provider.getTransactionReceipt(log.transactionHash); }\n log.eventSignature = eventInfo.signature;\n\n eventCallback.apply(log, Array.prototype.slice.call(result));\n } catch (error) {\n console.log(error);\n let onerror = contract._onerror;\n if (onerror) { setTimeout(() => { onerror(error); }); }\n }\n });\n }\n\n var property = {\n enumerable: true,\n get: function() {\n return eventCallback;\n },\n set: function(value: Callback) {\n if (!value) { value = null; }\n\n if (!contract.provider) {\n errors.throwError('events require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'events' })\n }\n\n if (!value && eventCallback) {\n contract.provider.removeListener([ eventInfo.topic ], handleEvent);\n\n } else if (value && !eventCallback) {\n contract.provider.on([ eventInfo.topic ], handleEvent);\n }\n\n eventCallback = value;\n }\n };\n\n var propertyName = 'on' + eventName.toLowerCase();\n if ((this)[propertyName] == null) {\n Object.defineProperty(this, propertyName, property);\n }\n\n Object.defineProperty(this.events, eventName, property);\n\n }, this);\n }\n\n get onerror() { return this._onerror; }\n\n set onerror(callback: ErrorCallback) {\n this._onerror = callback;\n }\n\n fallback(overrides?: TransactionRequest): Promise {\n if (!this.signer) {\n errors.throwError('sending a transaction require a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction(fallback)' })\n }\n\n var tx: TransactionRequest = shallowCopy(overrides || {});\n\n ['from', 'to'].forEach(function(key) {\n if (tx.to == null) { return; }\n errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key })\n });\n\n tx.to = this.addressPromise;\n return this.signer.sendTransaction(tx);\n }\n\n // Reconnect to a different signer or provider\n connect(signerOrProvider: Signer | Provider): Contract {\n return new Contract(this.address, this.interface, signerOrProvider);\n }\n\n // Deploy the contract with the bytecode, resolving to the deployed address.\n // Use contract.deployTransaction.wait() to wait until the contract has\n // been mined.\n deploy(bytecode: string, ...args: Array): Promise {\n if (this.signer == null) {\n throw new Error('missing signer'); // @TODO: errors.throwError\n }\n\n // A lot of common tools do not prefix bytecode with a 0x\n if (typeof(bytecode) === 'string' && bytecode.match(/^[0-9a-f]*$/i) && (bytecode.length % 2) == 0) {\n bytecode = '0x' + bytecode;\n }\n\n if (!isHexString(bytecode)) {\n errors.throwError('bytecode must be a valid hex string', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode });\n }\n\n if ((bytecode.length % 2) !== 0) {\n errors.throwError('bytecode must be valid data (even length)', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode });\n }\n\n // @TODO: overrides of args.length = this.interface.deployFunction.inputs.length + 1\n return this.signer.sendTransaction({\n data: this.interface.deployFunction.encode(bytecode, args)\n }).then((tx) => {\n let contract = new Contract(getContractAddress(tx), this.interface, this.signer || this.provider);\n defineReadOnly(contract, 'deployTransaction', tx);\n return contract;\n });\n }\n}\n","'use strict';\n\nimport { Contract } from './contract';\nimport { Interface } from './interface';\n\nexport {\n Contract,\n Interface\n}\n\n","'use strict';\n\nimport { arrayify, Arrayish } from './bytes';\n\ndeclare class Buffer implements ArrayLike {\n constructor(data: any, encoding?: string);\n toString(encoding?: string): any;\n [key: number]: number;\n length: number;\n}\n\nexport function decode(textData: string): Uint8Array {\n return arrayify(new Uint8Array(new Buffer(textData, 'base64')));\n};\n\nexport function encode(data: Arrayish): string {\n return new Buffer(arrayify(data)).toString('base64');\n}\n","\nimport { XMLHttpRequest } from 'xmlhttprequest';\nimport { toUtf8Bytes } from './utf8';\nimport { encode as base64Encode } from './base64';\n\nexport type ConnectionInfo = {\n url: string,\n user?: string,\n password?: string,\n allowInsecure?: boolean\n};\n\nimport * as errors from './errors';\n\nexport type ProcessFunc = (value: any) => any;\n\ntype Header = { key: string, value: string };\n\nexport function fetchJson(connection: string | ConnectionInfo, json: string, processFunc: ProcessFunc): Promise {\n let headers: Array
= [ ];\n\n let url: string = null;\n\n if (typeof(connection) === 'string') {\n url = connection;\n\n } else if (typeof(connection) === 'object') {\n if (connection.url == null) {\n errors.throwError('missing URL', errors.MISSING_ARGUMENT, { arg: 'url' });\n }\n\n url = connection.url;\n\n if (connection.user != null && connection.password != null) {\n if (url.substring(0, 6) !== 'https:' && connection.allowInsecure !== true) {\n errors.throwError(\n 'basic authentication requires a secure https url', \n errors.INVALID_ARGUMENT,\n { arg: 'url', url: url, user: connection.user, password: '[REDACTED]' }\n );\n }\n\n var authorization = connection.user + ':' + connection.password;\n headers.push({\n key: 'Authorization',\n value: 'Basic ' + base64Encode(toUtf8Bytes(authorization))\n });\n }\n }\n\n return new Promise(function(resolve, reject) {\n var request = new XMLHttpRequest();\n\n if (json) {\n request.open('POST', url, true);\n headers.push({ key: 'Content-Type', value: 'application/json' });\n } else {\n request.open('GET', url, true);\n }\n\n headers.forEach(function(header) {\n request.setRequestHeader(header.key, header.value);\n });\n\n request.onreadystatechange = function() {\n if (request.readyState !== 4) { return; }\n\n try {\n var result = JSON.parse(request.responseText);\n } catch (error) {\n // @TODO: not any!\n var jsonError: any = new Error('invalid json response');\n jsonError.orginialError = error;\n jsonError.responseText = request.responseText;\n jsonError.url = url;\n reject(jsonError);\n return;\n }\n\n if (processFunc) {\n try {\n result = processFunc(result);\n } catch (error) {\n error.url = url;\n error.body = json;\n error.responseText = request.responseText;\n reject(error);\n return;\n }\n }\n\n if (request.status != 200) {\n // @TODO: not any!\n var error: any = new Error('invalid response - ' + request.status);\n error.statusCode = request.status;\n reject(error);\n return;\n }\n\n resolve(result);\n };\n\n request.onerror = function(error) {\n reject(error);\n }\n\n try {\n if (json) {\n request.send(json);\n } else {\n request.send();\n }\n\n } catch (error) {\n // @TODO: not any!\n var connectionError: any = new Error('connection error');\n connectionError.error = error;\n reject(connectionError);\n }\n });\n}\n\n","\nimport { BlockTag, checkTransactionResponse, Provider, TransactionRequest, TransactionResponse } from './provider';\nimport { Networkish } from './networks';\n\nimport { hexlify, hexStripZeros } from '../utils/bytes';\nimport { defineReadOnly } from '../utils/properties';\nimport { fetchJson } from '../utils/web';\n\nimport * as errors from '../utils/errors';\n\n// The transaction has already been sanitized by the calls in Provider\nfunction getTransactionString(transaction: TransactionRequest): string {\n var result = [];\n for (var key in transaction) {\n if ((transaction)[key] == null) { continue; }\n var value = hexlify((transaction)[key]);\n if (({ gasLimit: true, gasPrice: true, nonce: true, value: true })[key]) {\n value = hexStripZeros(value);\n }\n result.push(key + '=' + value);\n }\n return result.join('&');\n}\n\nfunction getResult(result: { status?: number, message?: string, result?: any }): any {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === 'No records found' || result.message === 'No transactions found')) {\n return result.result;\n }\n\n if (result.status != 1 || result.message != 'OK') {\n // @TODO: not any\n var error: any = new Error('invalid response');\n error.result = JSON.stringify(result);\n throw error;\n }\n\n return result.result;\n}\n\nfunction getJsonResult(result: { jsonrpc: string, result?: any, error?: { code?: number, data?: any, message?: string} } ): any {\n if (result.jsonrpc != '2.0') {\n // @TODO: not any\n let error: any = new Error('invalid response');\n error.result = JSON.stringify(result);\n throw error;\n }\n\n if (result.error) {\n // @TODO: not any\n let error: any = new Error(result.error.message || 'unknown error');\n if (result.error.code) { error.code = result.error.code; }\n if (result.error.data) { error.data = result.error.data; }\n throw error;\n }\n\n return result.result;\n}\n\n// The blockTag was normalized as a string by the Provider pre-perform operations\nfunction checkLogTag(blockTag: string): number | \"latest\" {\n if (blockTag === 'pending') { throw new Error('pending not supported'); }\n if (blockTag === 'latest') { return blockTag; }\n\n return parseInt(blockTag.substring(2), 16);\n}\n\n\nexport class EtherscanProvider extends Provider{\n readonly baseUrl: string;\n readonly apiKey: string;\n constructor(network?: Networkish, apiKey?: string) {\n super(network);\n errors.checkNew(this, EtherscanProvider);\n\n let name = 'invalid';\n if (this.network) { name = this.network.name; }\n\n let baseUrl = null;\n switch(name) {\n case 'homestead':\n baseUrl = 'https://api.etherscan.io';\n break;\n case 'ropsten':\n baseUrl = 'https://api-ropsten.etherscan.io';\n break;\n case 'rinkeby':\n baseUrl = 'https://api-rinkeby.etherscan.io';\n break;\n case 'kovan':\n baseUrl = 'https://api-kovan.etherscan.io';\n break;\n default:\n throw new Error('unsupported network');\n }\n\n defineReadOnly(this, 'baseUrl', baseUrl);\n defineReadOnly(this, 'apiKey', apiKey);\n }\n\n\n perform(method: string, params: any) {\n //if (!params) { params = {}; }\n\n var url = this.baseUrl;\n\n let apiKey = '';\n if (this.apiKey) { apiKey += '&apikey=' + this.apiKey; }\n\n switch (method) {\n case 'getBlockNumber':\n url += '/api?module=proxy&action=eth_blockNumber' + apiKey;\n return fetchJson(url, null, getJsonResult);\n\n case 'getGasPrice':\n url += '/api?module=proxy&action=eth_gasPrice' + apiKey;\n return fetchJson(url, null, getJsonResult);\n\n case 'getBalance':\n // Returns base-10 result\n url += '/api?module=account&action=balance&address=' + params.address;\n url += '&tag=' + params.blockTag + apiKey;\n return fetchJson(url, null, getResult);\n\n case 'getTransactionCount':\n url += '/api?module=proxy&action=eth_getTransactionCount&address=' + params.address;\n url += '&tag=' + params.blockTag + apiKey;\n return fetchJson(url, null, getJsonResult);\n\n\n case 'getCode':\n url += '/api?module=proxy&action=eth_getCode&address=' + params.address;\n url += '&tag=' + params.blockTag + apiKey;\n return fetchJson(url, null, getJsonResult);\n\n case 'getStorageAt':\n url += '/api?module=proxy&action=eth_getStorageAt&address=' + params.address;\n url += '&position=' + params.position;\n url += '&tag=' + params.blockTag + apiKey;\n return fetchJson(url, null, getJsonResult);\n\n\n case 'sendTransaction':\n url += '/api?module=proxy&action=eth_sendRawTransaction&hex=' + params.signedTransaction;\n url += apiKey;\n return fetchJson(url, null, getJsonResult);\n\n\n case 'getBlock':\n if (params.blockTag) {\n url += '/api?module=proxy&action=eth_getBlockByNumber&tag=' + params.blockTag;\n url += '&boolean=false';\n url += apiKey;\n return fetchJson(url, null, getJsonResult);\n }\n throw new Error('getBlock by blockHash not implmeneted');\n\n case 'getTransaction':\n url += '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + params.transactionHash;\n url += apiKey;\n return fetchJson(url, null, getJsonResult);\n\n case 'getTransactionReceipt':\n url += '/api?module=proxy&action=eth_getTransactionReceipt&txhash=' + params.transactionHash;\n url += apiKey;\n return fetchJson(url, null, getJsonResult);\n\n\n case 'call':\n var transaction = getTransactionString(params.transaction);\n if (transaction) { transaction = '&' + transaction; }\n url += '/api?module=proxy&action=eth_call' + transaction;\n url += apiKey;\n return fetchJson(url, null, getJsonResult);\n\n case 'estimateGas':\n var transaction = getTransactionString(params.transaction);\n if (transaction) { transaction = '&' + transaction; }\n url += '/api?module=proxy&action=eth_estimateGas&' + transaction;\n url += apiKey;\n return fetchJson(url, null, getJsonResult);\n\n case 'getLogs':\n url += '/api?module=logs&action=getLogs';\n try {\n if (params.filter.fromBlock) {\n url += '&fromBlock=' + checkLogTag(params.filter.fromBlock);\n }\n\n if (params.filter.toBlock) {\n url += '&toBlock=' + checkLogTag(params.filter.toBlock);\n }\n\n if (params.filter.address) {\n url += '&address=' + params.filter.address;\n }\n\n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n throw new Error('unsupported topic format');\n }\n var topic0 = params.filter.topics[0];\n if (typeof(topic0) !== 'string' || topic0.length !== 66) {\n throw new Error('unsupported topic0 format');\n }\n url += '&topic0=' + topic0;\n }\n } catch (error) {\n return Promise.reject(error);\n }\n\n url += apiKey;\n\n var self = this;\n return fetchJson(url, null, getResult).then(function(logs: Array) {\n var txs: { [hash: string]: string } = {};\n\n var seq = Promise.resolve();\n logs.forEach(function(log) {\n seq = seq.then(function() {\n if (log.blockHash != null) { return null; }\n log.blockHash = txs[log.transactionHash];\n if (log.blockHash == null) {\n return self.getTransaction(log.transactionHash).then(function(tx) {\n txs[log.transactionHash] = tx.blockHash;\n log.blockHash = tx.blockHash;\n });\n }\n return null;\n });\n });\n\n return seq.then(function() {\n return logs;\n });\n });\n\n case 'getEtherPrice':\n if (this.network.name !== 'homestead') { return Promise.resolve(0.0); }\n url += '/api?module=stats&action=ethprice';\n url += apiKey;\n return fetchJson(url, null, getResult).then(function(result) {\n return parseFloat(result.ethusd);\n });\n\n default:\n break;\n }\n\n return super.perform(method, params);\n }\n\n // @TODO: Allow startBlock and endBlock to be Promises\n getHistory(addressOrName: string | Promise, startBlock?: BlockTag, endBlock?: BlockTag): Promise> {\n\n let url = this.baseUrl;\n\n let apiKey = '';\n if (this.apiKey) { apiKey += '&apikey=' + this.apiKey; }\n\n if (startBlock == null) { startBlock = 0; }\n if (endBlock == null) { endBlock = 99999999; }\n\n return this.resolveName(addressOrName).then((address) => {\n url += '/api?module=account&action=txlist&address=' + address;\n url += '&startblock=' + startBlock;\n url += '&endblock=' + endBlock;\n url += '&sort=asc' + apiKey;\n\n return fetchJson(url, null, getResult).then((result: Array) => {\n var output: Array = [];\n result.forEach((tx) => {\n ['contractAddress', 'to'].forEach(function(key) {\n if (tx[key] == '') { delete tx[key]; }\n });\n if (tx.creates == null && tx.contractAddress != null) {\n tx.creates = tx.contractAddress;\n }\n let item = checkTransactionResponse(tx);\n if (tx.timeStamp) { item.timestamp = parseInt(tx.timeStamp); }\n output.push(item);\n });\n return output;\n });\n });\n }\n}\n","'use strict';\n\nimport { Network } from './networks';\nimport { Provider } from './provider';\n\nimport * as errors from '../utils/errors';\n\n// Returns:\n// - true is all networks match\n// - false if any network is null\n// - throws if any 2 networks do not match\nfunction checkNetworks(networks: Array): boolean {\n var result = true;\n\n let check: Network = null;\n networks.forEach((network) => {\n\n // Null\n if (network == null) {\n result = false;\n return;\n }\n\n // Have nothing to compre to yet\n if (check == null) {\n check = network;\n return;\n }\n\n // Matches!\n if (check.name === network.name &&\n check.chainId === network.chainId &&\n check.ensAddress === network.ensAddress) { return; }\n\n errors.throwError(\n 'provider mismatch',\n errors.INVALID_ARGUMENT,\n { arg: 'providers', networks: networks }\n );\n });\n\n return result;\n}\n\nexport class FallbackProvider extends Provider {\n private _providers: Array;\n\n constructor(providers: Array) {\n\n if (providers.length === 0) { throw new Error('no providers'); }\n\n // All networks are ready, we can know the network for certain\n let ready = checkNetworks(providers.map((p) => p.network));\n if (ready) {\n super(providers[0].network);\n\n } else {\n // The network won't be known until all child providers know\n let ready = Promise.all(providers.map((p) => p.getNetwork())).then((networks) => {\n if (!checkNetworks(networks)) {\n errors.throwError('getNetwork returned null', errors.UNKNOWN_ERROR, { })\n }\n return networks[0];\n });\n\n super(ready);\n }\n errors.checkNew(this, FallbackProvider);\n\n // Preserve a copy, so we don't get mutated\n this._providers = providers.slice(0);\n }\n\n get providers(): Array {\n // Return a copy, so we don't get mutated\n return this._providers.slice(0);\n }\n\n perform(method: string, params: any): any {\n // Creates a copy of the providers array\n var providers = this.providers;\n\n return new Promise((resolve, reject) => {\n var firstError: Error = null;\n function next() {\n if (!providers.length) {\n reject(firstError);\n return;\n }\n\n var provider = providers.shift();\n provider.perform(method, params).then(function(result) {\n resolve(result);\n }, function (error) {\n if (!firstError) { firstError = error; }\n next();\n });\n }\n next();\n });\n }\n}\n\n","'use strict';\n\n// See: https://github.com/ethereum/wiki/wiki/JSON-RPC\n\nimport { getNetwork, Network, Networkish } from './networks';\nimport { BlockTag, Provider, TransactionRequest, TransactionResponse } from './provider';\nimport { Signer } from '../wallet/wallet';\n\nimport { getAddress } from '../utils/address';\nimport { BigNumber } from '../utils/bignumber';\nimport { Arrayish, hexlify, hexStripZeros } from '../utils/bytes';\nimport { defineReadOnly, resolveProperties } from '../utils/properties';\nimport { toUtf8Bytes } from '../utils/utf8';\nimport { ConnectionInfo, fetchJson } from '../utils/web';\n\nimport * as errors from '../utils/errors';\n\nfunction timer(timeout: number): Promise {\n return new Promise(function(resolve) {\n setTimeout(function() {\n resolve();\n }, timeout);\n });\n}\n\nfunction getResult(payload: { error?: { code?: number, data?: any, message?: string }, result?: any }): any {\n if (payload.error) {\n // @TODO: not any\n var error: any = new Error(payload.error.message);\n error.code = payload.error.code;\n error.data = payload.error.data;\n throw error;\n }\n\n return payload.result;\n}\n\n// Convert an ethers.js transaction into a JSON-RPC transaction\n// - gasLimit => gas\n// - All values hexlified\n// - All numeric values zero-striped\n// @TODO: Not any, a dictionary of string to strings\nexport function hexlifyTransaction(transaction: TransactionRequest): any {\n var result: any = {};\n\n // Some nodes (INFURA ropsten; INFURA mainnet is fine) don't like extra zeros.\n ['gasLimit', 'gasPrice', 'nonce', 'value'].forEach(function(key) {\n if ((transaction)[key] == null) { return; }\n let value = hexStripZeros(hexlify((transaction)[key]));\n if (key === 'gasLimit') { key = 'gas'; }\n result[key] = value;\n });\n\n ['from', 'to', 'data'].forEach(function(key) {\n if ((transaction)[key] == null) { return; }\n result[key] = hexlify((transaction)[key]);\n });\n\n return result;\n}\n\nfunction getLowerCase(value: string): string {\n if (value) { return value.toLowerCase(); }\n return value;\n}\n\nexport class JsonRpcSigner extends Signer {\n readonly provider: JsonRpcProvider;\n private _address: string;\n\n constructor(provider: JsonRpcProvider, address?: string) {\n super();\n errors.checkNew(this, JsonRpcSigner);\n\n defineReadOnly(this, 'provider', provider);\n\n // Statically attach to a given address\n if (address) {\n defineReadOnly(this, '_address', address);\n }\n }\n\n get address(): string {\n if (!this._address) {\n errors.throwError('no sync sync address available; use getAddress', errors.UNSUPPORTED_OPERATION, { operation: 'address' });\n }\n return this._address\n }\n\n getAddress(): Promise {\n if (this._address) {\n return Promise.resolve(this._address);\n }\n\n return this.provider.send('eth_accounts', []).then((accounts) => {\n if (accounts.length === 0) {\n errors.throwError('no accounts', errors.UNSUPPORTED_OPERATION, { operation: 'getAddress' });\n }\n return getAddress(accounts[0]);\n });\n }\n\n getBalance(blockTag?: BlockTag): Promise {\n return this.provider.getBalance(this.getAddress(), blockTag);\n }\n\n getTransactionCount(blockTag?: BlockTag): Promise {\n return this.provider.getTransactionCount(this.getAddress(), blockTag);\n }\n\n sendTransaction(transaction: TransactionRequest): Promise {\n let tx = hexlifyTransaction(transaction);\n\n if (tx.from == null) {\n tx.from = this.getAddress().then((address) => {\n if (!address) { return null; }\n return address.toLowerCase();\n });\n }\n\n return resolveProperties(tx).then((tx) => {\n return this.provider.send('eth_sendTransaction', [ transaction ]);\n });\n }\n\n signMessage(message: Arrayish | string): Promise {\n var data = ((typeof(message) === 'string') ? toUtf8Bytes(message): message);\n return this.getAddress().then((address) => {\n\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n return this.provider.send('eth_sign', [ address.toLowerCase(), hexlify(data) ]);\n });\n }\n\n unlock(password: string): Promise {\n var provider = this.provider;\n\n return this.getAddress().then(function(address) {\n return provider.send('personal_unlockAccount', [ address.toLowerCase(), password, null ]);\n });\n }\n}\n\nexport class JsonRpcProvider extends Provider {\n readonly connection: ConnectionInfo;\n\n private _pendingFilter: Promise;\n\n constructor(url?: ConnectionInfo | string, network?: Networkish) {\n\n // One parameter, but it is a network name, so swap it with the URL\n if (typeof(url) === 'string') {\n if (network === null && getNetwork(url)) {\n network = url;\n url = null;\n }\n }\n\n if (network) {\n // The network has been specified explicitly, we can use it\n super(network);\n\n } else {\n\n // The network is unknown, query the JSON-RPC for it\n let ready: Promise = new Promise((resolve, reject) => {\n setTimeout(() => {\n this.send('net_version', [ ]).then((result) => {\n let chainId = parseInt(result);\n\n resolve(getNetwork(chainId));\n });\n });\n });\n super(ready);\n }\n\n errors.checkNew(this, JsonRpcProvider);\n\n // Default URL\n if (!url) { url = 'http://localhost:8545'; }\n\n if (typeof(url) === 'string') {\n this.connection = {\n url: url\n };\n } else {\n this.connection = url;\n }\n\n }\n\n getSigner(address: string): JsonRpcSigner {\n return new JsonRpcSigner(this, address);\n }\n\n listAccounts(): Promise> {\n return this.send('eth_accounts', []).then((accounts: Array) => {\n return accounts.map((a) => getAddress(a));\n });\n }\n\n send(method: string, params: any): Promise {\n var request = {\n method: method,\n params: params,\n id: 42,\n jsonrpc: \"2.0\"\n };\n\n return fetchJson(this.connection, JSON.stringify(request), getResult);\n }\n\n perform(method: string, params: any): Promise {\n switch (method) {\n case 'getBlockNumber':\n return this.send('eth_blockNumber', []);\n\n case 'getGasPrice':\n return this.send('eth_gasPrice', []);\n\n case 'getBalance':\n return this.send('eth_getBalance', [ getLowerCase(params.address), params.blockTag ]);\n\n case 'getTransactionCount':\n return this.send('eth_getTransactionCount', [ getLowerCase(params.address), params.blockTag ]);\n\n case 'getCode':\n return this.send('eth_getCode', [ getLowerCase(params.address), params.blockTag ]);\n\n case 'getStorageAt':\n return this.send('eth_getStorageAt', [ getLowerCase(params.address), params.position, params.blockTag ]);\n\n case 'sendTransaction':\n return this.send('eth_sendRawTransaction', [ params.signedTransaction ]);\n\n case 'getBlock':\n if (params.blockTag) {\n return this.send('eth_getBlockByNumber', [ params.blockTag, false ]);\n } else if (params.blockHash) {\n return this.send('eth_getBlockByHash', [ params.blockHash, false ]);\n }\n return Promise.reject(new Error('invalid block tag or block hash'));\n\n case 'getTransaction':\n return this.send('eth_getTransactionByHash', [ params.transactionHash ]);\n\n case 'getTransactionReceipt':\n return this.send('eth_getTransactionReceipt', [ params.transactionHash ]);\n\n case 'call':\n return this.send('eth_call', [ hexlifyTransaction(params.transaction), 'latest' ]);\n\n case 'estimateGas':\n return this.send('eth_estimateGas', [ hexlifyTransaction(params.transaction) ]);\n\n case 'getLogs':\n if (params.filter && params.filter.address != null) {\n params.filter.address = getLowerCase(params.filter.address);\n }\n return this.send('eth_getLogs', [ params.filter ]);\n\n default:\n break;\n }\n\n errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method });\n return null;\n }\n\n _startPending(): void {\n if (this._pendingFilter != null) { return; }\n var self = this;\n\n var pendingFilter: Promise = this.send('eth_newPendingTransactionFilter', []);\n this._pendingFilter = pendingFilter;\n\n pendingFilter.then(function(filterId) {\n function poll() {\n self.send('eth_getFilterChanges', [ filterId ]).then(function(hashes: Array) {\n if (self._pendingFilter != pendingFilter) { return null; }\n\n var seq = Promise.resolve();\n hashes.forEach(function(hash) {\n self._emitted['t:' + hash.toLowerCase()] = 'pending';\n seq = seq.then(function() {\n return self.getTransaction(hash).then(function(tx) {\n self.emit('pending', tx);\n });\n });\n });\n\n return seq.then(function() {\n return timer(1000);\n });\n }).then(function() {\n if (self._pendingFilter != pendingFilter) {\n self.send('eth_uninstallFilter', [ filterId ]);\n return;\n }\n setTimeout(function() { poll(); }, 0);\n });\n }\n poll();\n\n return filterId;\n });\n }\n\n _stopPending(): void {\n this._pendingFilter = null;\n }\n}\n","\nimport net from 'net';\n\nimport { JsonRpcProvider } from './json-rpc-provider';\nimport { Networkish } from './networks';\n\nimport { defineReadOnly } from '../utils/properties';\n\nimport * as errors from '../utils/errors';\n\nexport class IpcProvider extends JsonRpcProvider {\n readonly path: string;\n\n constructor(path: string, network?: Networkish) {\n if (path == null) {\n errors.throwError('missing path', errors.MISSING_ARGUMENT, { arg: 'path' });\n }\n\n super('ipc://' + path, network);\n errors.checkNew(this, IpcProvider);\n\n defineReadOnly(this, 'path', path);\n }\n\n // @TODO: Create a connection to the IPC path and use filters instead of polling for block\n\n send(method: string, params: any): Promise {\n // This method is very simple right now. We create a new socket\n // connection each time, which may be slower, but the main\n // advantage we are aiming for now is security. This simplifies\n // multiplexing requests (since we do not need to multiplex).\n\n var payload = JSON.stringify({\n method: method,\n params: params,\n id: 42,\n jsonrpc: \"2.0\"\n });\n\n return new Promise((resolve, reject) => {\n var stream = net.connect(this.path);\n stream.on('data', function(data) {\n try {\n resolve(JSON.parse(data.toString('utf8')).result);\n // @TODO: Better pull apart the error\n stream.destroy();\n } catch (error) {\n reject(error);\n stream.destroy();\n }\n });\n\n stream.on('end', function() {\n stream.destroy();\n });\n\n stream.on('error', function(error) {\n reject(error);\n stream.destroy();\n });\n stream.write(payload);\n stream.end();\n });\n }\n}\n","'use strict';\n\nimport { JsonRpcProvider, JsonRpcSigner } from './json-rpc-provider';\nimport { getNetwork, Networkish } from './networks';\n\nimport { defineReadOnly } from '../utils/properties';\n\nimport * as errors from '../utils/errors';\n\nexport class InfuraProvider extends JsonRpcProvider {\n readonly apiAccessToken: string;\n\n constructor(network?: Networkish, apiAccessToken?: string) {\n network = getNetwork((network == null) ? 'homestead': network);\n\n var host = null;\n switch(network.name) {\n case 'homestead':\n host = 'mainnet.infura.io';\n break;\n case 'ropsten':\n host = 'ropsten.infura.io';\n break;\n case 'rinkeby':\n host = 'rinkeby.infura.io';\n break;\n case 'kovan':\n host = 'kovan.infura.io';\n break;\n default:\n throw new Error('unsupported network');\n }\n\n super('https://' + host + '/' + (apiAccessToken || ''), network);\n errors.checkNew(this, InfuraProvider);\n\n defineReadOnly(this, 'apiAccessToken', apiAccessToken || null);\n }\n\n _startPending(): void {\n console.log('WARNING: INFURA does not support pending filters');\n }\n\n getSigner(address?: string): JsonRpcSigner {\n errors.throwError(\n 'INFURA does not support signing',\n errors.UNSUPPORTED_OPERATION,\n { operation: 'getSigner' }\n );\n return null;\n }\n\n listAccounts(): Promise> {\n return Promise.resolve([]);\n }\n}\n","'use strict';\n\nimport { Networkish } from './networks';\nimport { JsonRpcProvider } from './json-rpc-provider';\n\nimport { defineReadOnly } from '../utils/properties';\n\nimport * as errors from '../utils/errors';\n\n/*\n@TODO\nutils.defineProperty(Web3Signer, 'onchange', {\n\n});\n*/\n\nexport type Callback = (error: any, response: any) => void;\n\nexport type AsyncProvider = {\n isMetaMask: boolean;\n host?: string;\n path?: string;\n sendAsync: (request: any, callback: Callback) => void\n}\n\nexport class Web3Provider extends JsonRpcProvider {\n readonly _web3Provider: AsyncProvider;\n\n constructor(web3Provider: AsyncProvider, network?: Networkish) {\n\n if (!web3Provider || !web3Provider.sendAsync) {\n errors.throwError(\n 'invalid web3Provider',\n errors.INVALID_ARGUMENT,\n { arg: 'web3Provider', value: web3Provider }\n );\n }\n\n // HTTP has a host; IPC has a path.\n var url = web3Provider.host || web3Provider.path || 'unknown';\n\n super(url, network);\n errors.checkNew(this, Web3Provider);\n\n defineReadOnly(this, '_web3Provider', web3Provider);\n }\n\n send(method: string, params: any): Promise {\n\n // Metamask complains about eth_sign (and on some versions hangs)\n if (method == 'eth_sign' && this._web3Provider.isMetaMask) {\n // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign\n method = 'personal_sign';\n params = [ params[1], params[0] ];\n }\n\n return new Promise((resolve, reject) => {\n var request = {\n method: method,\n params: params,\n id: 42,\n jsonrpc: \"2.0\"\n };\n\n this._web3Provider.sendAsync(request, function(error, result) {\n if (error) {\n reject(error);\n return;\n }\n\n if (result.error) {\n // @TODO: not any\n var error: any = new Error(result.error.message);\n error.code = result.error.code;\n error.data = result.error.data;\n reject(error);\n return;\n }\n\n resolve(result.result);\n });\n });\n }\n}\n","'use strict';\n\nimport { Provider, ProviderSigner } from './provider';\n\nimport { Network } from './networks';\n\nimport { EtherscanProvider } from './etherscan-provider';\nimport { FallbackProvider } from './fallback-provider';\nimport { IpcProvider } from './ipc-provider';\nimport { InfuraProvider } from './infura-provider';\nimport { JsonRpcProvider } from './json-rpc-provider';\nimport { Web3Provider } from './web3-provider';\n\nfunction getDefaultProvider(network?: Network | string): FallbackProvider {\n return new FallbackProvider([\n new InfuraProvider(network),\n new EtherscanProvider(network),\n ]);\n}\n\nexport {\n Provider,\n getDefaultProvider,\n\n ProviderSigner,\n\n FallbackProvider,\n\n EtherscanProvider,\n InfuraProvider,\n JsonRpcProvider,\n Web3Provider,\n\n IpcProvider\n};\n","'use strict';\n\nimport { bigNumberify } from './bignumber';\nimport { arrayify, concat, hexlify, padZeros} from './bytes';\nimport { toUtf8Bytes } from './utf8';\n\nimport { keccak256 as hashKeccak256 } from './keccak256';\nimport { sha256 as hashSha256 } from './sha2';\n\nvar regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nvar regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nvar regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\n\nvar Zeros = '0000000000000000000000000000000000000000000000000000000000000000';\n\nfunction _pack(type: string, value: any, isArray?: boolean): Uint8Array {\n switch(type) {\n case 'address':\n if (isArray) { return padZeros(value, 32); }\n return arrayify(value);\n case 'string':\n return toUtf8Bytes(value);\n case 'bytes':\n return arrayify(value);\n case 'bool':\n value = (value ? '0x01': '0x00');\n if (isArray) { return padZeros(value, 32); }\n return arrayify(value);\n }\n\n var match = type.match(regexNumber);\n if (match) {\n //var signed = (match[1] === 'int')\n let size = parseInt(match[2] || \"256\")\n if ((size % 8 != 0) || size === 0 || size > 256) {\n throw new Error('invalid number type - ' + type);\n }\n\n if (isArray) { size = 256; }\n\n value = bigNumberify(value).toTwos(size);\n\n return padZeros(value, size / 8);\n }\n\n match = type.match(regexBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (String(size) != match[1] || size === 0 || size > 32) {\n throw new Error('invalid number type - ' + type);\n }\n if (arrayify(value).byteLength !== size) { throw new Error('invalid value for ' + type); }\n if (isArray) { return arrayify((value + Zeros).substring(0, 66)); }\n return value;\n }\n\n match = type.match(regexArray);\n if (match && Array.isArray(value)) {\n var baseType = match[1];\n var count = parseInt(match[2] || String(value.length));\n if (count != value.length) { throw new Error('invalid value for ' + type); }\n var result: Array = [];\n value.forEach(function(value) {\n result.push(_pack(baseType, value, true));\n });\n return concat(result);\n }\n\n throw new Error('unknown type - ' + type);\n}\n\n// @TODO: Array Enum\n\nexport function pack(types: Array, values: Array) {\n if (types.length != values.length) { throw new Error('type/value count mismatch'); }\n var tight: Array = [];\n types.forEach(function(type, index) {\n tight.push(_pack(type, values[index]));\n });\n return hexlify(concat(tight));\n}\n\nexport function keccak256(types: Array, values: Array) {\n return hashKeccak256(pack(types, values));\n}\n\nexport function sha256(types: Array, values: Array) {\n return hashSha256(pack(types, values));\n}\n","'use strict';\n\nimport { BigNumber, bigNumberify, BigNumberish, ConstantZero, ConstantNegativeOne } from './bignumber';\n\nimport * as errors from './errors';\n\nconst names = [\n 'wei',\n 'kwei',\n 'Mwei',\n 'Gwei',\n 'szabo',\n 'finny',\n 'ether',\n];\n\ntype UnitInfo = {\n decimals: number;\n tenPower: BigNumber;\n};\n\nvar unitInfos: { [key: string]: UnitInfo } = {};\n\nfunction _getUnitInfo(value: string): UnitInfo {\n return {\n decimals: value.length - 1,\n tenPower: bigNumberify(value)\n };\n}\n\n// Build cache of common units\n(function() {\n\n // Cache the common units\n let value = '1';\n names.forEach(function(name) {\n let info = _getUnitInfo(value);\n unitInfos[name.toLowerCase()] = info;\n unitInfos[String(info.decimals)] = info;\n value += '000';\n });\n})();\n\nfunction getUnitInfo(name: string | number): UnitInfo {\n\n // Try the cache\n var info = unitInfos[String(name).toLowerCase()];\n\n if (!info && typeof(name) === 'number' && parseInt(String(name)) == name && name >= 0 && name <= 256) {\n var value = '1';\n for (var i = 0; i < name; i++) { value += '0'; }\n info = _getUnitInfo(value);\n }\n\n // Make sure we got something\n if (!info) {\n errors.throwError(\n 'invalid unitType',\n errors.INVALID_ARGUMENT,\n { arg: 'name', value: name }\n );\n }\n\n return info;\n}\n\nexport function formatUnits(value: BigNumberish, unitType?: string | number, options?: any): string {\n /*\n if (typeof(unitType) === 'object' && !options) {\n options = unitType;\n unitType = undefined;\n }\n if (unitType == null) { unitType = 18; }\n */\n\n if (!options) { options = {}; }\n\n var unitInfo = getUnitInfo(unitType);\n\n // Make sure wei is a big number (convert as necessary)\n value = bigNumberify(value);\n\n var negative = value.lt(ConstantZero);\n if (negative) { value = value.mul(ConstantNegativeOne); }\n\n var fraction = value.mod(unitInfo.tenPower).toString();\n while (fraction.length < unitInfo.decimals) { fraction = '0' + fraction; }\n\n // Strip off trailing zeros (but keep one if would otherwise be bare decimal point)\n if (!options.pad) {\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\n }\n\n var whole = value.div(unitInfo.tenPower).toString();\n\n if (options.commify) {\n whole = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\n }\n\n value = whole + '.' + fraction;\n\n if (negative) { value = '-' + value; }\n\n return value;\n}\n\nexport function parseUnits(value: string, unitType?: string | number): BigNumber {\n if (unitType == null) { unitType = 18; }\n var unitInfo = getUnitInfo(unitType);\n\n if (typeof(value) !== 'string' || !value.match(/^-?[0-9.,]+$/)) {\n errors.throwError('invalid decimal value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n // Remove commas\n var value = value.replace(/,/g,'');\n\n // Is it negative?\n var negative = (value.substring(0, 1) === '-');\n if (negative) { value = value.substring(1); }\n\n if (value === '.') {\n errors.throwError('missing value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n // Split it into a whole and fractional part\n let comps = value.split('.');\n if (comps.length > 2) {\n errors.throwError('too many decimal points', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n\n let whole = comps[0], fraction = comps[1];\n if (!whole) { whole = '0'; }\n if (!fraction) { fraction = '0'; }\n\n // Prevent underflow\n if (fraction.length > unitInfo.decimals) {\n errors.throwError(\n 'underflow occurred',\n errors.NUMERIC_FAULT,\n { operation: 'division', fault: \"underflow\" }\n );\n }\n\n // Fully pad the string with zeros to get to wei\n while (fraction.length < unitInfo.decimals) { fraction += '0'; }\n\n let wholeValue = bigNumberify(whole);\n let fractionValue = bigNumberify(fraction);\n\n let wei = (wholeValue.mul(unitInfo.tenPower)).add(fractionValue);\n\n if (negative) { wei = wei.mul(ConstantNegativeOne); }\n\n return wei;\n}\n\nexport function formatEther(wei: BigNumberish, options: any): string {\n return formatUnits(wei, 18, options);\n}\n\nexport function parseEther(ether: string): BigNumber {\n return parseUnits(ether, 18);\n}\n\n","'use strict';\n\n// This is SUPER useful, but adds 140kb (even zipped, adds 40kb)\n//var unorm = require('unorm');\n\nimport { getAddress, getContractAddress, getIcapAddress } from './address';\nimport { AbiCoder, defaultAbiCoder, parseSignature, parseParamType } from './abi-coder';\nimport * as base64 from './base64';\nimport { BigNumber, bigNumberify } from './bignumber';\nimport { arrayify, concat, hexlify, joinSignature, padZeros, splitSignature, stripZeros } from './bytes';\nimport { hashMessage, id, namehash } from './hash';\nimport { keccak256 } from './keccak256';\nimport { sha256 } from './sha2';\nimport { keccak256 as solidityKeccak256, pack as solidityPack, sha256 as soliditySha256 } from './solidity';\nimport { randomBytes } from './random-bytes';\nimport { defineFrozen, defineReadOnly, resolveProperties, shallowCopy } from './properties';\nimport * as RLP from './rlp';\nimport { toUtf8Bytes, toUtf8String } from './utf8';\nimport { formatEther, parseEther, formatUnits, parseUnits } from './units';\nimport { fetchJson } from './web';\nimport { parse as parseTransaction } from './transaction';\n\nimport * as errors from './errors';\n\n// NFKD (decomposed)\n//const etherSymbol = '\\uD835\\uDF63';\n\n// NFKC (composed)\nconst etherSymbol = '\\u039e';\n\nexport {\n AbiCoder,\n defaultAbiCoder,\n parseSignature,\n parseParamType,\n\n RLP,\n\n fetchJson,\n\n defineReadOnly,\n defineFrozen,\n resolveProperties,\n shallowCopy,\n\n etherSymbol,\n\n arrayify,\n\n concat,\n padZeros,\n stripZeros,\n\n base64,\n\n bigNumberify,\n BigNumber,\n\n hexlify,\n\n toUtf8Bytes,\n toUtf8String,\n\n hashMessage,\n namehash,\n id,\n\n getAddress,\n getIcapAddress,\n getContractAddress,\n\n formatEther,\n parseEther,\n\n formatUnits,\n parseUnits,\n\n keccak256,\n sha256,\n\n randomBytes,\n\n solidityPack,\n solidityKeccak256,\n soliditySha256,\n\n splitSignature,\n joinSignature,\n\n parseTransaction,\n\n errors\n}\n","'use strict';\n\nimport { Wallet } from './wallet';\nimport * as HDNode from './hdnode';\nimport { SigningKey } from './signing-key';\n\nexport { HDNode, SigningKey, Wallet };\n\n/*\n\n// Exporting\nexport = {\n HDNode: HDNode,\n Wallet: Wallet,\n\n SigningKey: SigningKey\n};\n\n// Default TypeScript\nexport default exporting;\n\n// Node exports\ndeclare var module: any;\n(module).exports = exporting;\n*/\n","'use strict';\n\n// This is empty in node, and used by browserify to inject extra goodies\nimport './utils/shims';\n\nimport { Contract, Interface } from './contracts';\nimport * as providers from './providers';\nimport * as errors from './utils/errors';\nimport { getNetwork } from './providers/networks';\nimport * as utils from './utils';\nimport { HDNode, SigningKey, Wallet } from './wallet';\n\n// @TODO:\n//import info from '../package.json';\nconsole.log(\"@TODO: Get version\");\nconst version = \"4.0.0\";\n\nexport {\n Wallet,\n\n HDNode,\n SigningKey,\n\n Contract,\n Interface,\n\n getNetwork,\n providers,\n\n errors,\n utils,\n\n version\n};\n\nexport default {\n Wallet: Wallet,\n\n HDNode: HDNode,\n SigningKey: SigningKey,\n\n Contract: Contract,\n Interface: Interface,\n\n providers: providers,\n\n errors: errors,\n utils: utils,\n\n// version: version,\n}\n","\nimport { register, Wordlist } from './wordlist';\n\nimport { toUtf8String } from '../utils/utf8';\n\nimport * as errors from '../utils/errors';\n\nconst data = [\n\n // 4-kana words\n 'AQRASRAGBAGUAIRAHBAghAURAdBAdcAnoAMEAFBAFCBKFBQRBSFBCXBCDBCHBGFBEQBpBBpQBIkBHNBeOBgFBVCBhBBhNBmOBmRBiHBiFBUFBZDBvFBsXBkFBlcBjYBwDBMBBTBBTRBWBBWXXaQXaRXQWXSRXCFXYBXpHXOQXHRXhRXuRXmXXbRXlXXwDXTRXrCXWQXWGaBWaKcaYgasFadQalmaMBacAKaRKKBKKXKKjKQRKDRKCYKCRKIDKeVKHcKlXKjHKrYNAHNBWNaRNKcNIBNIONmXNsXNdXNnBNMBNRBNrXNWDNWMNFOQABQAHQBrQXBQXFQaRQKXQKDQKOQKFQNBQNDQQgQCXQCDQGBQGDQGdQYXQpBQpQQpHQLXQHuQgBQhBQhCQuFQmXQiDQUFQZDQsFQdRQkHQbRQlOQlmQPDQjDQwXQMBQMDQcFQTBQTHQrDDXQDNFDGBDGQDGRDpFDhFDmXDZXDbRDMYDRdDTRDrXSAhSBCSBrSGQSEQSHBSVRShYShkSyQSuFSiBSdcSoESocSlmSMBSFBSFKSFNSFdSFcCByCaRCKcCSBCSRCCrCGbCEHCYXCpBCpQCIBCIHCeNCgBCgFCVECVcCmkCmwCZXCZFCdRClOClmClFCjDCjdCnXCwBCwXCcRCFQCFjGXhGNhGDEGDMGCDGCHGIFGgBGVXGVEGVRGmXGsXGdYGoSGbRGnXGwXGwDGWRGFNGFLGFOGFdGFkEABEBDEBFEXOEaBEKSENBENDEYXEIgEIkEgBEgQEgHEhFEudEuFEiBEiHEiFEZDEvBEsXEsFEdXEdREkFEbBEbRElFEPCEfkEFNYAEYAhYBNYQdYDXYSRYCEYYoYgQYgRYuRYmCYZTYdBYbEYlXYjQYRbYWRpKXpQopQnpSFpCXpIBpISphNpdBpdRpbRpcZpFBpFNpFDpFopFrLADLBuLXQLXcLaFLCXLEhLpBLpFLHXLeVLhILdHLdRLoDLbRLrXIABIBQIBCIBsIBoIBMIBRIXaIaRIKYIKRINBINuICDIGBIIDIIkIgRIxFIyQIiHIdRIbYIbRIlHIwRIMYIcRIRVITRIFBIFNIFQOABOAFOBQOaFONBONMOQFOSFOCDOGBOEQOpBOLXOIBOIFOgQOgFOyQOycOmXOsXOdIOkHOMEOMkOWWHBNHXNHXWHNXHDuHDRHSuHSRHHoHhkHmRHdRHkQHlcHlRHwBHWcgAEgAggAkgBNgBQgBEgXOgYcgLXgHjgyQgiBgsFgdagMYgWSgFQgFEVBTVXEVKBVKNVKDVKYVKRVNBVNYVDBVDxVSBVSRVCjVGNVLXVIFVhBVhcVsXVdRVbRVlRhBYhKYhDYhGShxWhmNhdahdkhbRhjohMXhTRxAXxXSxKBxNBxEQxeNxeQxhXxsFxdbxlHxjcxFBxFNxFQxFOxFoyNYyYoybcyMYuBQuBRuBruDMuCouHBudQukkuoBulVuMXuFEmCYmCRmpRmeDmiMmjdmTFmFQiADiBOiaRiKRiNBiNRiSFiGkiGFiERipRiLFiIFihYibHijBijEiMXiWBiFBiFCUBQUXFUaRUNDUNcUNRUNFUDBUSHUCDUGBUGFUEqULNULoUIRUeEUeYUgBUhFUuRUiFUsXUdFUkHUbBUjSUjYUwXUMDUcHURdUTBUrBUrXUrQZAFZXZZaRZKFZNBZQFZCXZGBZYdZpBZLDZIFZHXZHNZeQZVRZVFZmXZiBZvFZdFZkFZbHZbFZwXZcCZcRZRBvBQvBGvBLvBWvCovMYsAFsBDsaRsKFsNFsDrsSHsSFsCXsCRsEBsEHsEfspBsLBsLDsIgsIRseGsbRsFBsFQsFSdNBdSRdCVdGHdYDdHcdVbdySduDdsXdlRdwXdWYdWcdWRkBMkXOkaRkNIkNFkSFkCFkYBkpRkeNkgBkhVkmXksFklVkMBkWDkFNoBNoaQoaFoNBoNXoNaoNEoSRoEroYXoYCoYbopRopFomXojkowXorFbBEbEIbdBbjYlaRlDElMXlFDjKjjSRjGBjYBjYkjpRjLXjIBjOFjeVjbRjwBnXQnSHnpFnLXnINnMBnTRwXBwXNwXYwNFwQFwSBwGFwLXwLDweNwgBwuHwjDwnXMBXMpFMIBMeNMTHcaQcNBcDHcSFcCXcpBcLXcLDcgFcuFcnXcwXccDcTQcrFTQErXNrCHrpFrgFrbFrTHrFcWNYWNbWEHWMXWTR',\n\n // 5-kana words\n 'ABGHABIJAEAVAYJQALZJAIaRAHNXAHdcAHbRAZJMAZJRAZTRAdVJAklmAbcNAjdRAMnRAMWYAWpRAWgRAFgBAFhBAFdcBNJBBNJDBQKBBQhcBQlmBDEJBYJkBYJTBpNBBpJFBIJBBIJDBIcABOKXBOEJBOVJBOiJBOZJBepBBeLXBeIFBegBBgGJBVJXBuocBiJRBUJQBlXVBlITBwNFBMYVBcqXBTlmBWNFBWiJBWnRBFGHBFwXXKGJXNJBXNZJXDTTXSHSXSVRXSlHXCJDXGQJXEhXXYQJXYbRXOfXXeNcXVJFXhQJXhEJXdTRXjdXXMhBXcQTXRGBXTEBXTnQXFCXXFOFXFgFaBaFaBNJaBCJaBpBaBwXaNJKaNJDaQIBaDpRaEPDaHMFamDJalEJaMZJaFaFaFNBaFQJaFLDaFVHKBCYKBEBKBHDKXaFKXGdKXEJKXpHKXIBKXZDKXwXKKwLKNacKNYJKNJoKNWcKDGdKDTRKChXKGaRKGhBKGbRKEBTKEaRKEPTKLMDKLWRKOHDKVJcKdBcKlIBKlOPKFSBKFEPKFpFNBNJNJBQNBGHNBEPNBHXNBgFNBVXNBZDNBsXNBwXNNaRNNJDNNJENNJkNDCJNDVDNGJRNJiDNZJNNsCJNJFNNFSBNFCXNFEPNFLXNFIFQJBFQCaRQJEQQLJDQLJFQIaRQOqXQHaFQHHQQVJXQVJDQhNJQmEIQZJFQsJXQJrFQWbRDJABDBYJDXNFDXCXDXLXDXZDDXsJDQqXDSJFDJCXDEPkDEqXDYmQDpSJDOCkDOGQDHEIDVJDDuDuDWEBDJFgSBNDSBSFSBGHSBIBSBTQSKVYSJQNSJQiSJCXSEqXSJYVSIiJSOMYSHAHSHaQSeCFSepQSegBSHdHSHrFShSJSJuHSJUFSkNRSrSrSWEBSFaHSJFQSFCXSFGDSFYXSFODSFgBSFVXSFhBSFxFSFkFSFbBSFMFCADdCJXBCXaFCXKFCXNFCXCXCXGBCXEJCXYBCXLDCXIBCXOPCXHXCXgBCXhBCXiBCXlDCXcHCJNBCJNFCDCJCDGBCDVXCDhBCDiDCDJdCCmNCpJFCIaRCOqXCHCHCHZJCViJCuCuCmddCJiFCdNBCdHhClEJCnUJCreSCWlgCWTRCFBFCFNBCFYBCFVFCFhFCFdSCFTBCFWDGBNBGBQFGJBCGBEqGBpBGBgQGNBEGNJYGNkOGNJRGDUFGJpQGHaBGJeNGJeEGVBlGVKjGiJDGvJHGsVJGkEBGMIJGWjNGFBFGFCXGFGBGFYXGFpBGFMFEASJEAWpEJNFECJVEIXSEIQJEOqXEOcFEeNcEHEJEHlFEJgFEhlmEmDJEmZJEiMBEUqXEoSREPBFEPXFEPKFEPSFEPEFEPpFEPLXEPIBEJPdEPcFEPTBEJnXEqlHEMpREFCXEFODEFcFYASJYJAFYBaBYBVXYXpFYDhBYCJBYJGFYYbRYeNcYJeVYiIJYZJcYvJgYvJRYJsXYsJFYMYMYreVpBNHpBEJpBwXpQxFpYEJpeNDpJeDpeSFpeCHpHUJpHbBpHcHpmUJpiiJpUJrpsJuplITpFaBpFQqpFGBpFEfpFYBpFpBpFLJpFIDpFgBpFVXpFyQpFuFpFlFpFjDpFnXpFwXpJFMpFTBLXCJLXEFLXhFLXUJLXbFLalmLNJBLSJQLCLCLGJBLLDJLHaFLeNFLeSHLeCXLepFLhaRLZsJLsJDLsJrLocaLlLlLMdbLFNBLFSBLFEHLFkFIBBFIBXFIBaQIBKXIBSFIBpHIBLXIBgBIBhBIBuHIBmXIBiFIBZXIBvFIBbFIBjQIBwXIBWFIKTRIQUJIDGFICjQIYSRIINXIJeCIVaRImEkIZJFIvJRIsJXIdCJIJoRIbBQIjYBIcqXITFVIreVIFKFIFSFIFCJIFGFIFLDIFIBIJFOIFgBIFVXIJFhIFxFIFmXIFdHIFbBIJFrIJFWOBGBOQfXOOKjOUqXOfXBOqXEOcqXORVJOFIBOFlDHBIOHXiFHNTRHCJXHIaRHHJDHHEJHVbRHZJYHbIBHRsJHRkDHWlmgBKFgBSBgBCDgBGHgBpBgBIBgBVJgBuBgBvFgKDTgQVXgDUJgGSJgOqXgmUMgZIJgTUJgWIEgFBFgFNBgFDJgFSFgFGBgFYXgJFOgFgQgFVXgFhBgFbHgJFWVJABVQKcVDgFVOfXVeDFVhaRVmGdViJYVMaRVFNHhBNDhBCXhBEqhBpFhBLXhNJBhSJRheVXhhKEhxlmhZIJhdBQhkIJhbMNhMUJhMZJxNJgxQUJxDEkxDdFxSJRxplmxeSBxeCXxeGFxeYXxepQxegBxWVcxFEQxFLXxFIBxFgBxFxDxFZtxFdcxFbBxFwXyDJXyDlcuASJuDJpuDIBuCpJuGSJuIJFueEFuZIJusJXudWEuoIBuWGJuFBcuFKEuFNFuFQFuFDJuFGJuFVJuFUtuFdHuFTBmBYJmNJYmQhkmLJDmLJomIdXmiJYmvJRmsJRmklmmMBymMuCmclmmcnQiJABiJBNiJBDiBSFiBCJiBEFiBYBiBpFiBLXiBTHiJNciDEfiCZJiECJiJEqiOkHiHKFieNDiHJQieQcieDHieSFieCXieGFieEFieIHiegFihUJixNoioNXiFaBiFKFiFNDiFEPiFYXitFOitFHiFgBiFVEiFmXiFitiFbBiFMFiFrFUCXQUIoQUIJcUHQJUeCEUHwXUUJDUUqXUdWcUcqXUrnQUFNDUFSHUFCFUFEfUFLXUtFOZBXOZXSBZXpFZXVXZEQJZEJkZpDJZOqXZeNHZeCDZUqXZFBQZFEHZFLXvBAFvBKFvBCXvBEPvBpHvBIDvBgFvBuHvQNJvFNFvFGBvFIBvJFcsXCDsXLXsXsXsXlFsXcHsQqXsJQFsEqXseIFsFEHsFjDdBxOdNpRdNJRdEJbdpJRdhZJdnSJdrjNdFNJdFQHdFhNkNJDkYaRkHNRkHSRkVbRkuMRkjSJkcqDoSJFoEiJoYZJoOfXohEBoMGQocqXbBAFbBXFbBaFbBNDbBGBbBLXbBTBbBWDbGJYbIJHbFQqbFpQlDgQlOrFlVJRjGEBjZJRnXvJnXbBnEfHnOPDngJRnxfXnUJWwXEJwNpJwDpBwEfXwrEBMDCJMDGHMDIJMLJDcQGDcQpHcqXccqNFcqCXcFCJRBSBRBGBRBEJRBpQTBNFTBQJTBpBTBVXTFABTFSBTFCFTFGBTFMDrXCJrXLDrDNJrEfHrFQJrFitWNjdWNTR',\n\n // 6-kana words\n 'AKLJMANOPFASNJIAEJWXAYJNRAIIbRAIcdaAeEfDAgidRAdjNYAMYEJAMIbRAFNJBAFpJFBBIJYBDZJFBSiJhBGdEBBEJfXBEJqXBEJWRBpaUJBLXrXBIYJMBOcfXBeEfFBestXBjNJRBcDJOBFEqXXNvJRXDMBhXCJNYXOAWpXONJWXHDEBXeIaRXhYJDXZJSJXMDJOXcASJXFVJXaBQqXaBZJFasXdQaFSJQaFEfXaFpJHaFOqXKBNSRKXvJBKQJhXKEJQJKEJGFKINJBKIJjNKgJNSKVElmKVhEBKiJGFKlBgJKjnUJKwsJYKMFIJKFNJDKFIJFKFOfXNJBSFNJBCXNBpJFNJBvQNJBMBNJLJXNJOqXNJeCXNJeGFNdsJCNbTKFNwXUJQNFEPQDiJcQDMSJQSFpBQGMQJQJeOcQyCJEQUJEBQJFBrQFEJqDXDJFDJXpBDJXIMDGiJhDIJGRDJeYcDHrDJDVXgFDkAWpDkIgRDjDEqDMvJRDJFNFDJFIBSKclmSJQOFSJQVHSJQjDSJGJBSJGJFSECJoSHEJqSJHTBSJVJDSViJYSZJNBSJsJDSFSJFSFEfXSJFLXCBUJVCJXSBCJXpBCXVJXCJXsXCJXdFCJNJHCLIJgCHiJFCVNJMChCJhCUHEJCsJTRCJdYcCoQJCCFEfXCFIJgCFUJxCFstFGJBaQGJBIDGQJqXGYJNRGJHKFGeQqDGHEJFGJeLXGHIiJGHdBlGUJEBGkIJTGFQPDGJFEqEAGegEJIJBEJVJXEhQJTEiJNcEJZJFEJoEqEjDEqEPDsXEPGJBEPOqXEPeQFEfDiDEJfEFEfepQEfMiJEqXNBEqDIDEqeSFEqVJXEMvJRYXNJDYXEJHYKVJcYYJEBYJeEcYJUqXYFpJFYFstXpAZJMpBSJFpNBNFpeQPDpHLJDpHIJFpHgJFpeitFpHZJFpJFADpFSJFpJFCJpFOqXpFitBpJFZJLXIJFLIJgRLVNJWLVHJMLwNpJLFGJBLFLJDLFOqXLJFUJIBDJXIBGJBIJBYQIJBIBIBOqXIBcqDIEGJFILNJTIIJEBIOiJhIJeNBIJeIBIhiJIIWoTRIJFAHIJFpBIJFuHIFUtFIJFTHOSBYJOEcqXOHEJqOvBpFOkVJrObBVJOncqDOcNJkHhNJRHuHJuHdMhBgBUqXgBsJXgONJBgHNJDgHHJQgJeitgHsJXgJyNagyDJBgZJDrgsVJQgkEJNgkjSJgJFAHgFCJDgFZtMVJXNFVXQfXVJXDJVXoQJVQVJQVDEfXVDvJHVEqNFVeQfXVHpJFVHxfXVVJSRVVmaRVlIJOhCXVJhHjYkhxCJVhWVUJhWiJcxBNJIxeEqDxfXBFxcFEPxFSJFxFYJXyBDQJydaUJyFOPDuYCJYuLvJRuHLJXuZJLDuFOPDuFZJHuFcqXmKHJdmCQJcmOsVJiJAGFitLCFieOfXiestXiZJMEikNJQirXzFiFQqXiFIJFiFZJFiFvtFUHpJFUteIcUteOcUVCJkUhdHcUbEJEUJqXQUMNJhURjYkUFitFZDGJHZJIxDZJVJXZJFDJZJFpQvBNJBvBSJFvJxBrseQqDsVFVJdFLJDkEJNBkmNJYkFLJDoQJOPoGsJRoEAHBoEJfFbBQqDbBZJHbFVJXlFIJBjYIrXjeitcjjCEBjWMNBwXQfXwXOaFwDsJXwCJTRwrCZJMDNJQcDDJFcqDOPRYiJFTBsJXTQIJBTFEfXTFLJDrXEJFrEJXMrFZJFWEJdEWYTlm',\n\n // 7-kana words\n 'ABCDEFACNJTRAMBDJdAcNJVXBLNJEBXSIdWRXErNJkXYDJMBXZJCJaXMNJaYKKVJKcKDEJqXKDcNJhKVJrNYKbgJVXKFVJSBNBYBwDNJeQfXNJeEqXNhGJWENJFiJRQlIJbEQJfXxDQqXcfXQFNDEJQFwXUJDYcnUJDJIBgQDIUJTRDJFEqDSJQSJFSJQIJFSOPeZtSJFZJHCJXQfXCTDEqFGJBSJFGJBOfXGJBcqXGJHNJDGJRLiJEJfXEqEJFEJPEFpBEJYJBZJFYBwXUJYiJMEBYJZJyTYTONJXpQMFXFpeGIDdpJFstXpJFcPDLBVSJRLHQJqXLJFZJFIJBNJDIJBUqXIBkFDJIJEJPTIYJGWRIJeQPDIJeEfHIJFsJXOqGDSFHXEJqXgJCsJCgGQJqXgdQYJEgFMFNBgJFcqDVJwXUJVJFZJchIgJCCxOEJqXxOwXUJyDJBVRuscisciJBiJBieUtqXiJFDJkiFsJXQUGEZJcUJFsJXZtXIrXZDZJDrZJFNJDZJFstXvJFQqXvJFCJEsJXQJqkhkNGBbDJdTRbYJMEBlDwXUJMEFiJFcfXNJDRcNJWMTBLJXC',\n\n // 8-kana words\n 'BraFUtHBFSJFdbNBLJXVJQoYJNEBSJBEJfHSJHwXUJCJdAZJMGjaFVJXEJPNJBlEJfFiJFpFbFEJqIJBVJCrIBdHiJhOPFChvJVJZJNJWxGFNIFLueIBQJqUHEJfUFstOZJDrlXEASJRlXVJXSFwVJNJWD',\n\n // 9-kana words\n 'QJEJNNJDQJEJIBSFQJEJxegBQJEJfHEPSJBmXEJFSJCDEJqXLXNJFQqXIcQsFNJFIFEJqXUJgFsJXIJBUJEJfHNFvJxEqXNJnXUJFQqD',\n\n // 10-kana words\n 'IJBEJqXZJ'\n];\n\n// Maps each character into its kana value (the index)\nconst mapping = \"~~AzB~X~a~KN~Q~D~S~C~G~E~Y~p~L~I~O~eH~g~V~hxyumi~~U~~Z~~v~~s~~dkoblPjfnqwMcRTr~W~~~F~~~~~Jt\"\n\nlet words: Array = null;\n\nfunction loadWords() {\n if (words !== null) { return; }\n words = [];\n\n // Transforms for normalizing (sort is a not quite UTF-8)\n var transform: { [key: string]: string | boolean } = {};\n\n // Delete the diacritic marks\n transform[toUtf8String([227, 130, 154])] = false;\n transform[toUtf8String([227, 130, 153])] = false;\n\n // Some simple transforms that sort out most of the order\n transform[toUtf8String([227, 130, 133])] = toUtf8String([227, 130, 134]);\n transform[toUtf8String([227, 129, 163])] = toUtf8String([227, 129, 164]);\n transform[toUtf8String([227, 130, 131])] = toUtf8String([227, 130, 132]);\n transform[toUtf8String([227, 130, 135])] = toUtf8String([227, 130, 136]);\n\n\n // Normalize words using the transform\n function normalize(word: string) {\n var result = '';\n for (var i = 0; i < word.length; i++) {\n let kana = word[i];\n var target = transform[kana];\n if (target === false) { continue; }\n if (target) { kana = target; }\n result += kana;\n }\n return result;\n }\n\n // Sort how the Japanese list is sorted\n function sortJapanese(a: string, b: string) {\n a = normalize(a);\n b = normalize(b);\n if (a < b) { return -1; }\n if (a > b) { return 1; }\n return 0;\n }\n\n // Load all the words\n for (let length = 3; length <= 9; length++) {\n let d = data[length - 3];\n for (let offset = 0; offset < d.length; offset += length) {\n let word = [];\n for (let i = 0; i < length; i++) {\n let k = mapping.indexOf(d[offset + i]);\n word.push(227);\n word.push((k & 0x40) ? 130: 129);\n word.push((k & 0x3f) + 128);\n }\n words.push(toUtf8String(word));\n }\n }\n words.sort(sortJapanese);\n\n // For some reason kyoku and kiyoku are flipped; we'll just manually fix it\n let kyoku = words[442];\n words[442] = words[443];\n words[443] = kyoku;\n}\n\n/*\nvar fs = require('fs');\nfs.readFileSync('lang-ja.txt').toString().split('\\x0a').forEach(function(d, i) {\n if (d !== words[i]) { console.log(d, words[i], i, toUtf8Bytes(d)); }\n});\n*/\n\n\nclass LangJa extends Wordlist {\n constructor() {\n super('ja');\n }\n\n getWord(index: number): string {\n loadWords();\n return words[index];\n }\n\n getWordIndex(word: string): number {\n loadWords();\n return words.indexOf(word);\n }\n\n split(mnemonic: string): Array {\n if (!mnemonic.normalize) {\n errors.throwError('Japanese is unsupported on this platform; missing String.prototype.normalize', errors.UNSUPPORTED_OPERATION, { operation: 'String.prototype.normalize' });\n }\n return mnemonic.split(/(?:\\u3000| )+/g);\n }\n\n join(words: Array): string {\n return words.join('\\u3000');\n }\n}\n\nconst langJa = new LangJa();\nregister(langJa);\n\nexport { langJa };\n\n","\nimport { register, Wordlist } from './wordlist';\n\nimport { toUtf8String } from '../utils/utf8';\n\nconst data = [\n 'OYAa',\n 'ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@HgLnrHgMT8HgMX8HgMboHgOnrHgQToHgRg3HgoHgHgrCbHgrFnHgrLVHgvAcHgvAfHnAloHnCTrHnCnvHnGTrHnGZ8HnGnvHnJT8HnLf8HnLkvHnMg8HnRTrITvFUITvFnJTAXrJTCV8JTFT3JTFT8JTFn4JTGgvJTHT8JTJT8JTJXvJTJl3JTJnvJTLX4JTLf8JTLhvJTMT8JTMXrJTMnrJTObrJTQT8JTSlvJT8DUJT8FkJT8MTJT8OXJT8OgJT8QUJT8RfJUHZoJXFT4JXFlrJXGZ8JXGnrJXLV8JXLgvJXMXoJXMX3JXNboJXPlvJXoJTJXoLkJXrAXJXrHUJXrJgJXvJTJXvOnJX4KnJYAl3JYJT8JYLhvJYQToJYrQXJY6NUJbAl3JbCZrJbDloJbGT8JbGgrJbJXvJbJboJbLf8JbLhrJbLl3JbMnvJbRg8JbSZ8JboDbJbrCZJbrSUJb3KnJb8LnJfRn8JgAXrJgCZrJgDTrJgGZrJgGZ8JgHToJgJT8JgJXoJgJgvJgLX4JgLZ3JgLZ8JgLn4JgMgrJgMn4JgOgvJgPX6JgRnvJgSToJgoCZJgoJbJgoMYJgrJXJgrJgJgrLjJg6MTJlCn3JlGgvJlJl8Jl4AnJl8FnJl8HgJnAToJnATrJnAbvJnDUoJnGnrJnJXrJnJXvJnLhvJnLnrJnLnvJnMToJnMT8JnMXvJnMX3JnMg8JnMlrJnMn4JnOX8JnST4JnSX3JnoAgJnoAnJnoJTJnoObJnrAbJnrAkJnrHnJnrJTJnrJYJnrOYJnrScJnvCUJnvFaJnvJgJnvJnJnvOYJnvQUJnvRUJn3FnJn3JTKnFl3KnLT6LTDlvLTMnoLTOn3LTRl3LTSb4LTSlrLToAnLToJgLTrAULTrAcLTrCULTrHgLTrMgLT3JnLULnrLUMX8LUoJgLVATrLVDTrLVLb8LVoJgLV8MgLV8RTLXDg3LXFlrLXrCnLXrLXLX3GTLX4GgLX4OYLZAXrLZAcrLZAgrLZAhrLZDXyLZDlrLZFbrLZFl3LZJX6LZJX8LZLc8LZLnrLZSU8LZoJTLZoJnLZrAgLZrAnLZrJYLZrLULZrMgLZrSkLZvAnLZvGULZvJeLZvOTLZ3FZLZ4JXLZ8STLZ8ScLaAT3LaAl3LaHT8LaJTrLaJT8LaJXrLaJgvLaJl4LaLVoLaMXrLaMXvLaMX8LbClvLbFToLbHlrLbJn4LbLZ3LbLhvLbMXrLbMnoLbvSULcLnrLc8HnLc8MTLdrMnLeAgoLeOgvLeOn3LfAl3LfLnvLfMl3LfOX8Lf8AnLf8JXLf8LXLgJTrLgJXrLgJl8LgMX8LgRZrLhCToLhrAbLhrFULhrJXLhvJYLjHTrLjHX4LjJX8LjLhrLjSX3LjSZ4LkFX4LkGZ8LkGgvLkJTrLkMXoLkSToLkSU8LkSZ8LkoOYLl3FfLl3MgLmAZrLmCbrLmGgrLmHboLmJnoLmJn3LmLfoLmLhrLmSToLnAX6LnAb6LnCZ3LnCb3LnDTvLnDb8LnFl3LnGnrLnHZvLnHgvLnITvLnJT8LnJX8LnJlvLnLf8LnLg6LnLhvLnLnoLnMXrLnMg8LnQlvLnSbrLnrAgLnrAnLnrDbLnrFkLnrJdLnrMULnrOYLnrSTLnvAnLnvDULnvHgLnvOYLnvOnLn3GgLn4DULn4JTLn4JnMTAZoMTAloMTDb8MTFT8MTJnoMTJnrMTLZrMTLhrMTLkvMTMX8MTRTrMToATMTrDnMTrOnMT3JnMT4MnMT8FUMT8FaMT8FlMT8GTMT8GbMT8GnMT8HnMT8JTMT8JbMT8OTMUCl8MUJTrMUJU8MUMX8MURTrMUSToMXAX6MXAb6MXCZoMXFXrMXHXrMXLgvMXOgoMXrAUMXrAnMXrHgMXrJYMXrJnMXrMTMXrMgMXrOYMXrSZMXrSgMXvDUMXvOTMX3JgMX3OTMX4JnMX8DbMX8FnMX8HbMX8HgMX8HnMX8LbMX8MnMX8OnMYAb8MYGboMYHTvMYHX4MYLTrMYLnvMYMToMYOgvMYRg3MYSTrMbAToMbAXrMbAl3MbAn8MbGZ8MbJT8MbJXrMbMXvMbMX8MbMnoMbrMUMb8AfMb8FbMb8FkMcJXoMeLnrMgFl3MgGTvMgGXoMgGgrMgGnrMgHT8MgHZrMgJnoMgLnrMgLnvMgMT8MgQUoMgrHnMgvAnMg8HgMg8JYMg8LfMloJnMl8ATMl8AXMl8JYMnAToMnAT4MnAZ8MnAl3MnAl4MnCl8MnHT8MnHg8MnJnoMnLZoMnLhrMnMXoMnMX3MnMnrMnOgvMnrFbMnrFfMnrFnMnrNTMnvJXNTMl8OTCT3OTFV8OTFn3OTHZvOTJXrOTOl3OT3ATOT3JUOT3LZOT3LeOT3MbOT8ATOT8AbOT8AgOT8MbOUCXvOUMX3OXHXvOXLl3OXrMUOXvDbOX6NUOX8JbOYFZoOYLbrOYLkoOYMg8OYSX3ObHTrObHT4ObJgrObLhrObMX3ObOX8Ob8FnOeAlrOeJT8OeJXrOeJnrOeLToOeMb8OgJXoOgLXoOgMnrOgOXrOgOloOgoAgOgoJbOgoMYOgoSTOg8AbOjLX4OjMnoOjSV8OnLVoOnrAgOn3DUPXQlrPXvFXPbvFTPdAT3PlFn3PnvFbQTLn4QToAgQToMTQULV8QURg8QUoJnQXCXvQbFbrQb8AaQb8AcQb8FbQb8MYQb8ScQeAlrQeLhrQjAn3QlFXoQloJgQloSnRTLnvRTrGURTrJTRUJZrRUoJlRUrQnRZrLmRZrMnRZrSnRZ8ATRZ8JbRZ8ScRbMT8RbST3RfGZrRfMX8RfMgrRfSZrRnAbrRnGT8RnvJgRnvLfRnvMTRn8AaSTClvSTJgrSTOXrSTRg3STRnvSToAcSToAfSToAnSToHnSToLjSToMTSTrAaSTrEUST3BYST8AgST8LmSUAZvSUAgrSUDT4SUDT8SUGgvSUJXoSUJXvSULTrSU8JTSU8LjSV8AnSV8JgSXFToSXLf8SYvAnSZrDUSZrMUSZrMnSZ8HgSZ8JTSZ8JgSZ8MYSZ8QUSaQUoSbCT3SbHToSbQYvSbSl4SboJnSbvFbSb8HbSb8JgSb8OTScGZrScHgrScJTvScMT8ScSToScoHbScrMTScvAnSeAZrSeAcrSeHboSeJUoSeLhrSeMT8SeMXrSe6JgSgHTrSkJnoSkLnvSk8CUSlFl3SlrSnSl8GnSmAboSmGT8SmJU8',\n 'ATLnDlATrAZoATrJX4ATrMT8ATrMX4ATrRTrATvDl8ATvJUoATvMl8AT3AToAT3MX8AT8CT3AT8DT8AT8HZrAT8HgoAUAgFnAUCTFnAXoMX8AXrAT8AXrGgvAXrJXvAXrOgoAXvLl3AZvAgoAZvFbrAZvJXoAZvJl8AZvJn3AZvMX8AZvSbrAZ8FZoAZ8LZ8AZ8MU8AZ8OTvAZ8SV8AZ8SX3AbAgFZAboJnoAbvGboAb8ATrAb8AZoAb8AgrAb8Al4Ab8Db8Ab8JnoAb8LX4Ab8LZrAb8LhrAb8MT8Ab8OUoAb8Qb8Ab8ST8AcrAUoAcrAc8AcrCZ3AcrFT3AcrFZrAcrJl4AcrJn3AcrMX3AcrOTvAc8AZ8Ac8MT8AfAcJXAgoFn4AgoGgvAgoGnrAgoLc8AgoMXoAgrLnrAkrSZ8AlFXCTAloHboAlrHbrAlrLhrAlrLkoAl3CZrAl3LUoAl3LZrAnrAl4AnrMT8An3HT4BT3IToBX4MnvBb!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6',\n 'ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv',\n 'AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo',\n 'AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg',\n 'HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb',\n 'AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl'\n]\n\nvar codes = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'\n\nfunction getHangul(code: number): string {\n if (code >= 40) {\n code = code + 168 - 40;\n } else if (code >= 19) {\n code = code + 97 - 19;\n }\n\n return toUtf8String([ 225, (code >> 6) + 132, (code & 0x3f) + 128]);\n}\n\nlet wordlist: Array = null;\n\nfunction loadWords(): void {\n if (wordlist != null) { return; }\n\n wordlist = [];\n\n data.forEach((data, length) => {\n length += 4;\n for (let i = 0; i < data.length; i += length) {\n let word = '';\n for (let j = 0; j < length; j++) {\n word += getHangul(codes.indexOf(data[i + j]));\n }\n wordlist.push(word)\n }\n });\n\n wordlist.sort();\n}\nloadWords();\n\n\n\nclass LangKo extends Wordlist {\n constructor() {\n super('ko');\n }\n\n getWord(index: number): string {\n loadWords();\n return wordlist[index];\n }\n\n getWordIndex(word: string): number {\n loadWords();\n return wordlist.indexOf(word);\n }\n}\n\nconst langKo = new LangKo();\nregister(langKo);\n\nexport { langKo }\n","\nimport { register, Wordlist } from './wordlist';\n\nconst words = \"AbacoAbbaglioAbbinatoAbeteAbissoAbolireAbrasivoAbrogatoAccadereAccennoAccusatoAcetoneAchilleAcidoAcquaAcreAcrilicoAcrobataAcutoAdagioAddebitoAddomeAdeguatoAderireAdipeAdottareAdulareAffabileAffettoAffissoAffrantoAforismaAfosoAfricanoAgaveAgenteAgevoleAggancioAgireAgitareAgonismoAgricoloAgrumetoAguzzoAlabardaAlatoAlbatroAlberatoAlboAlbumeAlceAlcolicoAlettoneAlfaAlgebraAlianteAlibiAlimentoAllagatoAllegroAllievoAllodolaAllusivoAlmenoAlogenoAlpacaAlpestreAltalenaAlternoAlticcioAltroveAlunnoAlveoloAlzareAmalgamaAmanitaAmarenaAmbitoAmbratoAmebaAmericaAmetistaAmicoAmmassoAmmendaAmmirareAmmonitoAmoreAmpioAmpliareAmuletoAnacardoAnagrafeAnalistaAnarchiaAnatraAncaAncellaAncoraAndareAndreaAnelloAngeloAngolareAngustoAnimaAnnegareAnnidatoAnnoAnnuncioAnonimoAnticipoAnziApaticoAperturaApodeApparireAppetitoAppoggioApprodoAppuntoAprileArabicaArachideAragostaAraldicaArancioAraturaArazzoArbitroArchivioArditoArenileArgentoArgineArgutoAriaArmoniaArneseArredatoArringaArrostoArsenicoArsoArteficeArzilloAsciuttoAscoltoAsepsiAsetticoAsfaltoAsinoAsolaAspiratoAsproAssaggioAsseAssolutoAssurdoAstaAstenutoAsticeAstrattoAtavicoAteismoAtomicoAtonoAttesaAttivareAttornoAttritoAttualeAusilioAustriaAutistaAutonomoAutunnoAvanzatoAvereAvvenireAvvisoAvvolgereAzioneAzotoAzzimoAzzurroBabeleBaccanoBacinoBacoBadessaBadilataBagnatoBaitaBalconeBaldoBalenaBallataBalzanoBambinoBandireBaraondaBarbaroBarcaBaritonoBarlumeBaroccoBasilicoBassoBatostaBattutoBauleBavaBavosaBeccoBeffaBelgioBelvaBendaBenevoleBenignoBenzinaBereBerlinaBetaBibitaBiciBidoneBifidoBigaBilanciaBimboBinocoloBiologoBipedeBipolareBirbanteBirraBiscottoBisestoBisnonnoBisonteBisturiBizzarroBlandoBlattaBollitoBonificoBordoBoscoBotanicoBottinoBozzoloBraccioBradipoBramaBrancaBravuraBretellaBrevettoBrezzaBrigliaBrillanteBrindareBroccoloBrodoBronzinaBrulloBrunoBubboneBucaBudinoBuffoneBuioBulboBuonoBurloneBurrascaBussolaBustaCadettoCaducoCalamaroCalcoloCalesseCalibroCalmoCaloriaCambusaCamerataCamiciaCamminoCamolaCampaleCanapaCandelaCaneCaninoCanottoCantinaCapaceCapelloCapitoloCapogiroCapperoCapraCapsulaCarapaceCarcassaCardoCarismaCarovanaCarrettoCartolinaCasaccioCascataCasermaCasoCassoneCastelloCasualeCatastaCatenaCatrameCautoCavilloCedibileCedrataCefaloCelebreCellulareCenaCenoneCentesimoCeramicaCercareCertoCerumeCervelloCesoiaCespoCetoChelaChiaroChiccaChiedereChimeraChinaChirurgoChitarraCiaoCiclismoCifrareCignoCilindroCiottoloCircaCirrosiCitricoCittadinoCiuffoCivettaCivileClassicoClinicaCloroCoccoCodardoCodiceCoerenteCognomeCollareColmatoColoreColposoColtivatoColzaComaCometaCommandoComodoComputerComuneConcisoCondurreConfermaCongelareConiugeConnessoConoscereConsumoContinuoConvegnoCopertoCopioneCoppiaCopricapoCorazzaCordataCoricatoCorniceCorollaCorpoCorredoCorsiaCorteseCosmicoCostanteCotturaCovatoCratereCravattaCreatoCredereCremosoCrescitaCretaCricetoCrinaleCrisiCriticoCroceCronacaCrostataCrucialeCruscaCucireCuculoCuginoCullatoCupolaCuratoreCursoreCurvoCuscinoCustodeDadoDainoDalmataDamerinoDanielaDannosoDanzareDatatoDavantiDavveroDebuttoDecennioDecisoDeclinoDecolloDecretoDedicatoDefinitoDeformeDegnoDelegareDelfinoDelirioDeltaDemenzaDenotatoDentroDepositoDerapataDerivareDerogaDescrittoDesertoDesiderioDesumereDetersivoDevotoDiametroDicembreDiedroDifesoDiffusoDigerireDigitaleDiluvioDinamicoDinnanziDipintoDiplomaDipoloDiradareDireDirottoDirupoDisagioDiscretoDisfareDisgeloDispostoDistanzaDisumanoDitoDivanoDiveltoDividereDivoratoDobloneDocenteDoganaleDogmaDolceDomatoDomenicaDominareDondoloDonoDormireDoteDottoreDovutoDozzinaDragoDruidoDubbioDubitareDucaleDunaDuomoDupliceDuraturoEbanoEccessoEccoEclissiEconomiaEderaEdicolaEdileEditoriaEducareEgemoniaEgliEgoismoEgregioElaboratoElargireEleganteElencatoElettoElevareElficoElicaElmoElsaElusoEmanatoEmblemaEmessoEmiroEmotivoEmozioneEmpiricoEmuloEndemicoEnduroEnergiaEnfasiEnotecaEntrareEnzimaEpatiteEpilogoEpisodioEpocaleEppureEquatoreErarioErbaErbosoEredeEremitaErigereErmeticoEroeErosivoErranteEsagonoEsameEsanimeEsaudireEscaEsempioEsercitoEsibitoEsigenteEsistereEsitoEsofagoEsortatoEsosoEspansoEspressoEssenzaEssoEstesoEstimareEstoniaEstrosoEsultareEtilicoEtnicoEtruscoEttoEuclideoEuropaEvasoEvidenzaEvitatoEvolutoEvvivaFabbricaFaccendaFachiroFalcoFamigliaFanaleFanfaraFangoFantasmaFareFarfallaFarinosoFarmacoFasciaFastosoFasulloFaticareFatoFavolosoFebbreFecolaFedeFegatoFelpaFeltroFemminaFendereFenomenoFermentoFerroFertileFessuraFestivoFettaFeudoFiabaFiduciaFifaFiguratoFiloFinanzaFinestraFinireFioreFiscaleFisicoFiumeFlaconeFlamencoFleboFlemmaFloridoFluenteFluoroFobicoFocacciaFocosoFoderatoFoglioFolataFolcloreFolgoreFondenteFoneticoFoniaFontanaForbitoForchettaForestaFormicaFornaioForoFortezzaForzareFosfatoFossoFracassoFranaFrassinoFratelloFreccettaFrenataFrescoFrigoFrollinoFrondeFrugaleFruttaFucilataFucsiaFuggenteFulmineFulvoFumanteFumettoFumosoFuneFunzioneFuocoFurboFurgoneFuroreFusoFutileGabbianoGaffeGalateoGallinaGaloppoGamberoGammaGaranziaGarboGarofanoGarzoneGasdottoGasolioGastricoGattoGaudioGazeboGazzellaGecoGelatinaGelsoGemelloGemmatoGeneGenitoreGennaioGenotipoGergoGhepardoGhiaccioGhisaGialloGildaGineproGiocareGioielloGiornoGioveGiratoGironeGittataGiudizioGiuratoGiustoGlobuloGlutineGnomoGobbaGolfGomitoGommoneGonfioGonnaGovernoGracileGradoGraficoGrammoGrandeGrattareGravosoGraziaGrecaGreggeGrifoneGrigioGrinzaGrottaGruppoGuadagnoGuaioGuantoGuardareGufoGuidareIbernatoIconaIdenticoIdillioIdoloIdraIdricoIdrogenoIgieneIgnaroIgnoratoIlareIllesoIllogicoIlludereImballoImbevutoImboccoImbutoImmaneImmersoImmolatoImpaccoImpetoImpiegoImportoImprontaInalareInarcareInattivoIncantoIncendioInchinoIncisivoInclusoIncontroIncrocioIncuboIndagineIndiaIndoleIneditoInfattiInfilareInflittoIngaggioIngegnoIngleseIngordoIngrossoInnescoInodoreInoltrareInondatoInsanoInsettoInsiemeInsonniaInsulinaIntasatoInteroIntonacoIntuitoInumidireInvalidoInveceInvitoIperboleIpnoticoIpotesiIppicaIrideIrlandaIronicoIrrigatoIrrorareIsolatoIsotopoIstericoIstitutoIstriceItaliaIterareLabbroLabirintoLaccaLaceratoLacrimaLacunaLaddoveLagoLampoLancettaLanternaLardosoLargaLaringeLastraLatenzaLatinoLattugaLavagnaLavoroLegaleLeggeroLemboLentezzaLenzaLeoneLepreLesivoLessatoLestoLetteraleLevaLevigatoLiberoLidoLievitoLillaLimaturaLimitareLimpidoLineareLinguaLiquidoLiraLiricaLiscaLiteLitigioLivreaLocandaLodeLogicaLombareLondraLongevoLoquaceLorenzoLotoLotteriaLuceLucidatoLumacaLuminosoLungoLupoLuppoloLusingaLussoLuttoMacabroMacchinaMaceroMacinatoMadamaMagicoMagliaMagneteMagroMaiolicaMalafedeMalgradoMalintesoMalsanoMaltoMalumoreManaManciaMandorlaMangiareManifestoMannaroManovraMansardaMantideManubrioMappaMaratonaMarcireMarettaMarmoMarsupioMascheraMassaiaMastinoMaterassoMatricolaMattoneMaturoMazurcaMeandroMeccanicoMecenateMedesimoMeditareMegaMelassaMelisMelodiaMeningeMenoMensolaMercurioMerendaMerloMeschinoMeseMessereMestoloMetalloMetodoMettereMiagolareMicaMicelioMicheleMicroboMidolloMieleMiglioreMilanoMiliteMimosaMineraleMiniMinoreMirinoMirtilloMiscelaMissivaMistoMisurareMitezzaMitigareMitraMittenteMnemonicoModelloModificaModuloMoganoMogioMoleMolossoMonasteroMoncoMondinaMonetarioMonileMonotonoMonsoneMontatoMonvisoMoraMordereMorsicatoMostroMotivatoMotosegaMottoMovenzaMovimentoMozzoMuccaMucosaMuffaMughettoMugnaioMulattoMulinelloMultiploMummiaMuntoMuovereMuraleMusaMuscoloMusicaMutevoleMutoNababboNaftaNanometroNarcisoNariceNarratoNascereNastrareNaturaleNauticaNaviglioNebulosaNecrosiNegativoNegozioNemmenoNeofitaNerettoNervoNessunoNettunoNeutraleNeveNevroticoNicchiaNinfaNitidoNobileNocivoNodoNomeNominaNordicoNormaleNorvegeseNostranoNotareNotiziaNotturnoNovellaNucleoNullaNumeroNuovoNutrireNuvolaNuzialeOasiObbedireObbligoObeliscoOblioOboloObsoletoOccasioneOcchioOccidenteOccorrereOccultareOcraOculatoOdiernoOdorareOffertaOffrireOffuscatoOggettoOggiOgnunoOlandeseOlfattoOliatoOlivaOlogrammaOltreOmaggioOmbelicoOmbraOmegaOmissioneOndosoOnereOniceOnnivoroOnorevoleOntaOperatoOpinioneOppostoOracoloOrafoOrdineOrecchinoOreficeOrfanoOrganicoOrigineOrizzonteOrmaOrmeggioOrnativoOrologioOrrendoOrribileOrtensiaOrticaOrzataOrzoOsareOscurareOsmosiOspedaleOspiteOssaOssidareOstacoloOsteOtiteOtreOttagonoOttimoOttobreOvaleOvestOvinoOviparoOvocitoOvunqueOvviareOzioPacchettoPacePacificoPadellaPadronePaesePagaPaginaPalazzinaPalesarePallidoPaloPaludePandoroPannelloPaoloPaonazzoPapricaParabolaParcellaParerePargoloPariParlatoParolaPartireParvenzaParzialePassivoPasticcaPataccaPatologiaPattumePavonePeccatoPedalarePedonalePeggioPelosoPenarePendicePenisolaPennutoPenombraPensarePentolaPepePepitaPerbenePercorsoPerdonatoPerforarePergamenaPeriodoPermessoPernoPerplessoPersuasoPertugioPervasoPesatorePesistaPesoPestiferoPetaloPettinePetulantePezzoPiacerePiantaPiattinoPiccinoPicozzaPiegaPietraPifferoPigiamaPigolioPigroPilaPiliferoPillolaPilotaPimpantePinetaPinnaPinoloPioggiaPiomboPiramidePireticoPiritePirolisiPitonePizzicoPlaceboPlanarePlasmaPlatanoPlenarioPochezzaPoderosoPodismoPoesiaPoggiarePolentaPoligonoPollicePolmonitePolpettaPolsoPoltronaPolverePomicePomodoroPontePopolosoPorfidoPorosoPorporaPorrePortataPosaPositivoPossessoPostulatoPotassioPoterePranzoPrassiPraticaPreclusoPredicaPrefissoPregiatoPrelievoPremerePrenotarePreparatoPresenzaPretestoPrevalsoPrimaPrincipePrivatoProblemaProcuraProdurreProfumoProgettoProlungaPromessaPronomePropostaProrogaProtesoProvaPrudentePrugnaPruritoPsichePubblicoPudicaPugilatoPugnoPulcePulitoPulsantePuntarePupazzoPupillaPuroQuadroQualcosaQuasiQuerelaQuotaRaccoltoRaddoppioRadicaleRadunatoRafficaRagazzoRagioneRagnoRamarroRamingoRamoRandagioRantolareRapatoRapinaRappresoRasaturaRaschiatoRasenteRassegnaRastrelloRataRavvedutoRealeRecepireRecintoReclutaReconditoRecuperoRedditoRedimereRegalatoRegistroRegolaRegressoRelazioneRemareRemotoRennaReplicaReprimereReputareResaResidenteResponsoRestauroReteRetinaRetoricaRettificaRevocatoRiassuntoRibadireRibelleRibrezzoRicaricaRiccoRicevereRiciclatoRicordoRicredutoRidicoloRidurreRifasareRiflessoRiformaRifugioRigareRigettatoRighelloRilassatoRilevatoRimanereRimbalzoRimedioRimorchioRinascitaRincaroRinforzoRinnovoRinomatoRinsavitoRintoccoRinunciaRinvenireRiparatoRipetutoRipienoRiportareRipresaRipulireRisataRischioRiservaRisibileRisoRispettoRistoroRisultatoRisvoltoRitardoRitegnoRitmicoRitrovoRiunioneRivaRiversoRivincitaRivoltoRizomaRobaRoboticoRobustoRocciaRocoRodaggioRodereRoditoreRogitoRollioRomanticoRompereRonzioRosolareRospoRotanteRotondoRotulaRovescioRubizzoRubricaRugaRullinoRumineRumorosoRuoloRupeRussareRusticoSabatoSabbiareSabotatoSagomaSalassoSaldaturaSalgemmaSalivareSalmoneSaloneSaltareSalutoSalvoSapereSapidoSaporitoSaracenoSarcasmoSartoSassosoSatelliteSatiraSatolloSaturnoSavanaSavioSaziatoSbadiglioSbalzoSbancatoSbarraSbattereSbavareSbendareSbirciareSbloccatoSbocciatoSbrinareSbruffoneSbuffareScabrosoScadenzaScalaScambiareScandaloScapolaScarsoScatenareScavatoSceltoScenicoScettroSchedaSchienaSciarpaScienzaScindereScippoSciroppoScivoloSclerareScodellaScolpitoScompartoSconfortoScoprireScortaScossoneScozzeseScribaScrollareScrutinioScuderiaScultoreScuolaScuroScusareSdebitareSdoganareSeccaturaSecondoSedanoSeggiolaSegnalatoSegregatoSeguitoSelciatoSelettivoSellaSelvaggioSemaforoSembrareSemeSeminatoSempreSensoSentireSepoltoSequenzaSerataSerbatoSerenoSerioSerpenteSerraglioServireSestinaSetolaSettimanaSfaceloSfaldareSfamatoSfarzosoSfaticatoSferaSfidaSfilatoSfingeSfocatoSfoderareSfogoSfoltireSforzatoSfrattoSfruttatoSfuggitoSfumareSfusoSgabelloSgarbatoSgonfiareSgorbioSgrassatoSguardoSibiloSiccomeSierraSiglaSignoreSilenzioSillabaSimboloSimpaticoSimulatoSinfoniaSingoloSinistroSinoSintesiSinusoideSiparioSismaSistoleSituatoSlittaSlogaturaSlovenoSmarritoSmemoratoSmentitoSmeraldoSmilzoSmontareSmottatoSmussatoSnellireSnervatoSnodoSobbalzoSobrioSoccorsoSocialeSodaleSoffittoSognoSoldatoSolenneSolidoSollazzoSoloSolubileSolventeSomaticoSommaSondaSonettoSonniferoSopireSoppesoSopraSorgereSorpassoSorrisoSorsoSorteggioSorvolatoSospiroSostaSottileSpadaSpallaSpargereSpatolaSpaventoSpazzolaSpecieSpedireSpegnereSpelaturaSperanzaSpessoreSpettraleSpezzatoSpiaSpigolosoSpillatoSpinosoSpiraleSplendidoSportivoSposoSprangaSprecareSpronatoSpruzzoSpuntinoSquilloSradicareSrotolatoStabileStaccoStaffaStagnareStampatoStantioStarnutoStaseraStatutoSteloSteppaSterzoStilettoStimaStirpeStivaleStizzosoStonatoStoricoStrappoStregatoStriduloStrozzareStruttoStuccareStufoStupendoSubentroSuccosoSudoreSuggeritoSugoSultanoSuonareSuperboSupportoSurgelatoSurrogatoSussurroSuturaSvagareSvedeseSveglioSvelareSvenutoSveziaSviluppoSvistaSvizzeraSvoltaSvuotareTabaccoTabulatoTacciareTaciturnoTaleTalismanoTamponeTanninoTaraTardivoTargatoTariffaTarpareTartarugaTastoTatticoTavernaTavolataTazzaTecaTecnicoTelefonoTemerarioTempoTemutoTendoneTeneroTensioneTentacoloTeoremaTermeTerrazzoTerzettoTesiTesseratoTestatoTetroTettoiaTifareTigellaTimbroTintoTipicoTipografoTiraggioTiroTitanioTitoloTitubanteTizioTizzoneToccareTollerareToltoTombolaTomoTonfoTonsillaTopazioTopologiaToppaTorbaTornareTorroneTortoraToscanoTossireTostaturaTotanoTraboccoTracheaTrafilaTragediaTralcioTramontoTransitoTrapanoTrarreTraslocoTrattatoTraveTrecciaTremolioTrespoloTributoTrichecoTrifoglioTrilloTrinceaTrioTristezzaTrituratoTrivellaTrombaTronoTroppoTrottolaTrovareTruccatoTubaturaTuffatoTulipanoTumultoTunisiaTurbareTurchinoTutaTutelaUbicatoUccelloUccisoreUdireUditivoUffaUfficioUgualeUlisseUltimatoUmanoUmileUmorismoUncinettoUngereUnghereseUnicornoUnificatoUnisonoUnitarioUnteUovoUpupaUraganoUrgenzaUrloUsanzaUsatoUscitoUsignoloUsuraioUtensileUtilizzoUtopiaVacanteVaccinatoVagabondoVagliatoValangaValgoValicoVallettaValorosoValutareValvolaVampataVangareVanitosoVanoVantaggioVanveraVaporeVaranoVarcatoVarianteVascaVedettaVedovaVedutoVegetaleVeicoloVelcroVelinaVellutoVeloceVenatoVendemmiaVentoVeraceVerbaleVergognaVerificaVeroVerrucaVerticaleVescicaVessilloVestaleVeteranoVetrinaVetustoViandanteVibranteVicendaVichingoVicinanzaVidimareVigiliaVignetoVigoreVileVillanoViminiVincitoreViolaViperaVirgolaVirologoVirulentoViscosoVisioneVispoVissutoVisuraVitaVitelloVittimaVivandaVividoViziareVoceVogaVolatileVolereVolpeVoragineVulcanoZampognaZannaZappatoZatteraZavorraZefiroZelanteZeloZenzeroZerbinoZibettoZincoZirconeZittoZollaZoticoZuccheroZufoloZuluZuppa\";\n\nlet wordlist: Array = null;\n\nfunction loadWords(): void {\n if (wordlist != null) { return; }\n wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' ');\n}\n\nclass LangIt extends Wordlist {\n constructor() {\n super('it');\n }\n\n getWord(index: number): string {\n loadWords();\n return wordlist[index];\n }\n\n getWordIndex(word: string): number {\n loadWords();\n return wordlist.indexOf(word);\n }\n}\n\nconst langIt = new LangIt();\nregister(langIt);\n\nexport { langIt }\n","\nimport { register, Wordlist } from './wordlist';\n\nimport { defineReadOnly } from '../utils/properties';\nimport { toUtf8String } from '../utils/utf8';\n\nconst data = \"}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN } = {\n cn: [],\n tw: []\n}\n\nvar codes = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar style = \"~!@#$%^&*_-=[]{}|;:,.()<>?\"\n\nlet deltaOffset = 0;\nfor (var i = 0; i < 2048; i++) {\n let s = style.indexOf(data[i * 3]);\n let bytes = [\n 228 + (s >> 2),\n 128 + codes.indexOf(data[i * 3 + 1]),\n 128 + codes.indexOf(data[i * 3 + 2]),\n ];\n words.cn.push(toUtf8String(bytes));\n\n let common = s % 4;\n for (let i = common; i < 3; i++) {\n bytes[i] = codes.indexOf(deltaData[deltaOffset++]) + ((i == 0) ? 228: 128);\n }\n words.tw.push(toUtf8String(bytes));\n}\n\nclass LangZh extends Wordlist {\n private _country: string\n constructor(country: string) {\n super('zh_' + country);\n defineReadOnly(this, '_country', country);\n }\n\n getWord(index: number): string {\n return words[this._country][index];\n }\n\n getWordIndex(word: string): number {\n return words[this._country].indexOf(word);\n }\n\n split(mnemonic: string): Array {\n mnemonic = mnemonic.replace(/(?:\\u3000| )+/g, '');\n return mnemonic.split('');\n }\n}\n\nconst langZhCn = new LangZh('cn');\nregister(langZhCn);\n\nconst langZhTw = new LangZh('tw');\nregister(langZhTw);\n\n//var count = 0;\n//var fs = require('fs');\n//fs.readFileSync('wordlists/lang-zh.txt').toString().split('\\x0a').forEach(function(d, i) {\n// let word = langZhCn.getWord(i);\n// if (d !== word) {\n// console.log(d, word, i, toUtf8Bytes(d));\n// count++;\n// }\n//});\n//console.log(count);\n\n//var count = 0;\n//var fs = require('fs');\n//fs.readFileSync('wordlists/lang-zh_tw.txt').toString().split('\\x0a').forEach(function(d, i) {\n// let word = langZhTw.getWord(i);\n// if (d !== word) {\n// console.log(d, word, i, toUtf8Bytes(d));\n// count++;\n// }\n//});\n//console.log(count);\n\nexport { langZhCn, langZhTw };\n","\nimport { Wordlist } from './wordlist';\n\nimport { langJa as ja } from './lang-ja';\nimport { langKo as ko } from './lang-ko';\nimport { langIt as it } from './lang-it';\nimport { langEn as en } from './lang-en';\nimport { langZhCn as zh_cn, langZhTw as zh_tw } from './lang-zh';\n\nconst zh: Wordlist = zh_cn;\n\nexport {\n en, it, ja, ko, zh, zh_cn, zh_tw\n}\n","/* no shims for node */\n"]} \ No newline at end of file diff --git a/truebit-implementation/node_modules/ethers/dist/ethers.js b/truebit-implementation/node_modules/ethers/dist/ethers.js deleted file mode 100644 index a1fcdd5d..00000000 --- a/truebit-implementation/node_modules/ethers/dist/ethers.js +++ /dev/null @@ -1,15927 +0,0 @@ -(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.ethers = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 255) { - return false; - } - } - - return true; - } - - function coerceArray(arg, copy) { - - // ArrayBuffer view - if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') { - - if (copy) { - if (arg.slice) { - arg = arg.slice(); - } else { - arg = Array.prototype.slice.call(arg); - } - } - - return arg; - } - - // It's an array; check it is a valid representation of a byte - if (Array.isArray(arg)) { - if (!checkInts(arg)) { - throw new Error('Array contains invalid value: ' + arg); - } - - return new Uint8Array(arg); - } - - // Something else, but behaves like an array (maybe a Buffer? Arguments?) - if (checkInt(arg.length) && checkInts(arg)) { - return new Uint8Array(arg); - } - - throw new Error('unsupported array-like object'); - } - - function createArray(length) { - return new Uint8Array(length); - } - - function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) { - if (sourceStart != null || sourceEnd != null) { - if (sourceArray.slice) { - sourceArray = sourceArray.slice(sourceStart, sourceEnd); - } else { - sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd); - } - } - targetArray.set(sourceArray, targetStart); - } - - - - var convertUtf8 = (function() { - function toBytes(text) { - var result = [], i = 0; - text = encodeURI(text); - while (i < text.length) { - var c = text.charCodeAt(i++); - - // if it is a % sign, encode the following 2 bytes as a hex value - if (c === 37) { - result.push(parseInt(text.substr(i, 2), 16)) - i += 2; - - // otherwise, just the actual byte - } else { - result.push(c) - } - } - - return coerceArray(result); - } - - function fromBytes(bytes) { - var result = [], i = 0; - - while (i < bytes.length) { - var c = bytes[i]; - - if (c < 128) { - result.push(String.fromCharCode(c)); - i++; - } else if (c > 191 && c < 224) { - result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f))); - i += 2; - } else { - result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))); - i += 3; - } - } - - return result.join(''); - } - - return { - toBytes: toBytes, - fromBytes: fromBytes, - } - })(); - - var convertHex = (function() { - function toBytes(text) { - var result = []; - for (var i = 0; i < text.length; i += 2) { - result.push(parseInt(text.substr(i, 2), 16)); - } - - return result; - } - - // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html - var Hex = '0123456789abcdef'; - - function fromBytes(bytes) { - var result = []; - for (var i = 0; i < bytes.length; i++) { - var v = bytes[i]; - result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]); - } - return result.join(''); - } - - return { - toBytes: toBytes, - fromBytes: fromBytes, - } - })(); - - - // Number of rounds by keysize - var numberOfRounds = {16: 10, 24: 12, 32: 14} - - // Round constant words - var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; - - // S-box and Inverse S-box (S is for Substitution) - var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; - var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; - - // Transformations for encryption - var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; - var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; - var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; - var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; - - // Transformations for decryption - var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; - var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; - var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; - var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; - - // Transformations for decryption key expansion - var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; - var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; - var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; - var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; - - function convertToInt32(bytes) { - var result = []; - for (var i = 0; i < bytes.length; i += 4) { - result.push( - (bytes[i ] << 24) | - (bytes[i + 1] << 16) | - (bytes[i + 2] << 8) | - bytes[i + 3] - ); - } - return result; - } - - var AES = function(key) { - if (!(this instanceof AES)) { - throw Error('AES must be instanitated with `new`'); - } - - Object.defineProperty(this, 'key', { - value: coerceArray(key, true) - }); - - this._prepare(); - } - - - AES.prototype._prepare = function() { - - var rounds = numberOfRounds[this.key.length]; - if (rounds == null) { - throw new Error('invalid key size (must be 16, 24 or 32 bytes)'); - } - - // encryption round keys - this._Ke = []; - - // decryption round keys - this._Kd = []; - - for (var i = 0; i <= rounds; i++) { - this._Ke.push([0, 0, 0, 0]); - this._Kd.push([0, 0, 0, 0]); - } - - var roundKeyCount = (rounds + 1) * 4; - var KC = this.key.length / 4; - - // convert the key into ints - var tk = convertToInt32(this.key); - - // copy values into round key arrays - var index; - for (var i = 0; i < KC; i++) { - index = i >> 2; - this._Ke[index][i % 4] = tk[i]; - this._Kd[rounds - index][i % 4] = tk[i]; - } - - // key expansion (fips-197 section 5.2) - var rconpointer = 0; - var t = KC, tt; - while (t < roundKeyCount) { - tt = tk[KC - 1]; - tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ - (S[(tt >> 8) & 0xFF] << 16) ^ - (S[ tt & 0xFF] << 8) ^ - S[(tt >> 24) & 0xFF] ^ - (rcon[rconpointer] << 24)); - rconpointer += 1; - - // key expansion (for non-256 bit) - if (KC != 8) { - for (var i = 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - - // key expansion for 256-bit keys is "slightly different" (fips-197) - } else { - for (var i = 1; i < (KC / 2); i++) { - tk[i] ^= tk[i - 1]; - } - tt = tk[(KC / 2) - 1]; - - tk[KC / 2] ^= (S[ tt & 0xFF] ^ - (S[(tt >> 8) & 0xFF] << 8) ^ - (S[(tt >> 16) & 0xFF] << 16) ^ - (S[(tt >> 24) & 0xFF] << 24)); - - for (var i = (KC / 2) + 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - } - - // copy values into round key arrays - var i = 0, r, c; - while (i < KC && t < roundKeyCount) { - r = t >> 2; - c = t % 4; - this._Ke[r][c] = tk[i]; - this._Kd[rounds - r][c] = tk[i++]; - t++; - } - } - - // inverse-cipher-ify the decryption round key (fips-197 section 5.3) - for (var r = 1; r < rounds; r++) { - for (var c = 0; c < 4; c++) { - tt = this._Kd[r][c]; - this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^ - U2[(tt >> 16) & 0xFF] ^ - U3[(tt >> 8) & 0xFF] ^ - U4[ tt & 0xFF]); - } - } - } - - AES.prototype.encrypt = function(plaintext) { - if (plaintext.length != 16) { - throw new Error('invalid plaintext size (must be 16 bytes)'); - } - - var rounds = this._Ke.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(plaintext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Ke[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T1[(t[ i ] >> 24) & 0xff] ^ - T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ - T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T4[ t[(i + 3) % 4] & 0xff] ^ - this._Ke[r][i]); - } - t = a.slice(); - } - - // the last round is special - var result = createArray(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Ke[rounds][i]; - result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - AES.prototype.decrypt = function(ciphertext) { - if (ciphertext.length != 16) { - throw new Error('invalid ciphertext size (must be 16 bytes)'); - } - - var rounds = this._Kd.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(ciphertext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Kd[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T5[(t[ i ] >> 24) & 0xff] ^ - T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ - T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T8[ t[(i + 1) % 4] & 0xff] ^ - this._Kd[r][i]); - } - t = a.slice(); - } - - // the last round is special - var result = createArray(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Kd[rounds][i]; - result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - - /** - * Mode Of Operation - Electonic Codebook (ECB) - */ - var ModeOfOperationECB = function(key) { - if (!(this instanceof ModeOfOperationECB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Electronic Code Block"; - this.name = "ecb"; - - this._aes = new AES(key); - } - - ModeOfOperationECB.prototype.encrypt = function(plaintext) { - plaintext = coerceArray(plaintext); - - if ((plaintext.length % 16) !== 0) { - throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); - } - - var ciphertext = createArray(plaintext.length); - var block = createArray(16); - - for (var i = 0; i < plaintext.length; i += 16) { - copyArray(plaintext, block, 0, i, i + 16); - block = this._aes.encrypt(block); - copyArray(block, ciphertext, i); - } - - return ciphertext; - } - - ModeOfOperationECB.prototype.decrypt = function(ciphertext) { - ciphertext = coerceArray(ciphertext); - - if ((ciphertext.length % 16) !== 0) { - throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); - } - - var plaintext = createArray(ciphertext.length); - var block = createArray(16); - - for (var i = 0; i < ciphertext.length; i += 16) { - copyArray(ciphertext, block, 0, i, i + 16); - block = this._aes.decrypt(block); - copyArray(block, plaintext, i); - } - - return plaintext; - } - - - /** - * Mode Of Operation - Cipher Block Chaining (CBC) - */ - var ModeOfOperationCBC = function(key, iv) { - if (!(this instanceof ModeOfOperationCBC)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Cipher Block Chaining"; - this.name = "cbc"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 bytes)'); - } - - this._lastCipherblock = coerceArray(iv, true); - - this._aes = new AES(key); - } - - ModeOfOperationCBC.prototype.encrypt = function(plaintext) { - plaintext = coerceArray(plaintext); - - if ((plaintext.length % 16) !== 0) { - throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); - } - - var ciphertext = createArray(plaintext.length); - var block = createArray(16); - - for (var i = 0; i < plaintext.length; i += 16) { - copyArray(plaintext, block, 0, i, i + 16); - - for (var j = 0; j < 16; j++) { - block[j] ^= this._lastCipherblock[j]; - } - - this._lastCipherblock = this._aes.encrypt(block); - copyArray(this._lastCipherblock, ciphertext, i); - } - - return ciphertext; - } - - ModeOfOperationCBC.prototype.decrypt = function(ciphertext) { - ciphertext = coerceArray(ciphertext); - - if ((ciphertext.length % 16) !== 0) { - throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); - } - - var plaintext = createArray(ciphertext.length); - var block = createArray(16); - - for (var i = 0; i < ciphertext.length; i += 16) { - copyArray(ciphertext, block, 0, i, i + 16); - block = this._aes.decrypt(block); - - for (var j = 0; j < 16; j++) { - plaintext[i + j] = block[j] ^ this._lastCipherblock[j]; - } - - copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16); - } - - return plaintext; - } - - - /** - * Mode Of Operation - Cipher Feedback (CFB) - */ - var ModeOfOperationCFB = function(key, iv, segmentSize) { - if (!(this instanceof ModeOfOperationCFB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Cipher Feedback"; - this.name = "cfb"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 size)'); - } - - if (!segmentSize) { segmentSize = 1; } - - this.segmentSize = segmentSize; - - this._shiftRegister = coerceArray(iv, true); - - this._aes = new AES(key); - } - - ModeOfOperationCFB.prototype.encrypt = function(plaintext) { - if ((plaintext.length % this.segmentSize) != 0) { - throw new Error('invalid plaintext size (must be segmentSize bytes)'); - } - - var encrypted = coerceArray(plaintext, true); - - var xorSegment; - for (var i = 0; i < encrypted.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - for (var j = 0; j < this.segmentSize; j++) { - encrypted[i + j] ^= xorSegment[j]; - } - - // Shift the register - copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); - copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return encrypted; - } - - ModeOfOperationCFB.prototype.decrypt = function(ciphertext) { - if ((ciphertext.length % this.segmentSize) != 0) { - throw new Error('invalid ciphertext size (must be segmentSize bytes)'); - } - - var plaintext = coerceArray(ciphertext, true); - - var xorSegment; - for (var i = 0; i < plaintext.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - - for (var j = 0; j < this.segmentSize; j++) { - plaintext[i + j] ^= xorSegment[j]; - } - - // Shift the register - copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); - copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return plaintext; - } - - /** - * Mode Of Operation - Output Feedback (OFB) - */ - var ModeOfOperationOFB = function(key, iv) { - if (!(this instanceof ModeOfOperationOFB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Output Feedback"; - this.name = "ofb"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 bytes)'); - } - - this._lastPrecipher = coerceArray(iv, true); - this._lastPrecipherIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationOFB.prototype.encrypt = function(plaintext) { - var encrypted = coerceArray(plaintext, true); - - for (var i = 0; i < encrypted.length; i++) { - if (this._lastPrecipherIndex === 16) { - this._lastPrecipher = this._aes.encrypt(this._lastPrecipher); - this._lastPrecipherIndex = 0; - } - encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt; - - - /** - * Counter object for CTR common mode of operation - */ - var Counter = function(initialValue) { - if (!(this instanceof Counter)) { - throw Error('Counter must be instanitated with `new`'); - } - - // We allow 0, but anything false-ish uses the default 1 - if (initialValue !== 0 && !initialValue) { initialValue = 1; } - - if (typeof(initialValue) === 'number') { - this._counter = createArray(16); - this.setValue(initialValue); - - } else { - this.setBytes(initialValue); - } - } - - Counter.prototype.setValue = function(value) { - if (typeof(value) !== 'number' || parseInt(value) != value) { - throw new Error('invalid counter value (must be an integer)'); - } - - for (var index = 15; index >= 0; --index) { - this._counter[index] = value % 256; - value = value >> 8; - } - } - - Counter.prototype.setBytes = function(bytes) { - bytes = coerceArray(bytes, true); - - if (bytes.length != 16) { - throw new Error('invalid counter bytes size (must be 16 bytes)'); - } - - this._counter = bytes; - }; - - Counter.prototype.increment = function() { - for (var i = 15; i >= 0; i--) { - if (this._counter[i] === 255) { - this._counter[i] = 0; - } else { - this._counter[i]++; - break; - } - } - } - - - /** - * Mode Of Operation - Counter (CTR) - */ - var ModeOfOperationCTR = function(key, counter) { - if (!(this instanceof ModeOfOperationCTR)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Counter"; - this.name = "ctr"; - - if (!(counter instanceof Counter)) { - counter = new Counter(counter) - } - - this._counter = counter; - - this._remainingCounter = null; - this._remainingCounterIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationCTR.prototype.encrypt = function(plaintext) { - var encrypted = coerceArray(plaintext, true); - - for (var i = 0; i < encrypted.length; i++) { - if (this._remainingCounterIndex === 16) { - this._remainingCounter = this._aes.encrypt(this._counter._counter); - this._remainingCounterIndex = 0; - this._counter.increment(); - } - encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt; - - - /////////////////////// - // Padding - - // See:https://tools.ietf.org/html/rfc2315 - function pkcs7pad(data) { - data = coerceArray(data, true); - var padder = 16 - (data.length % 16); - var result = createArray(data.length + padder); - copyArray(data, result); - for (var i = data.length; i < result.length; i++) { - result[i] = padder; - } - return result; - } - - function pkcs7strip(data) { - data = coerceArray(data, true); - if (data.length < 16) { throw new Error('PKCS#7 invalid length'); } - - var padder = data[data.length - 1]; - if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); } - - var length = data.length - padder; - for (var i = 0; i < padder; i++) { - if (data[length + i] !== padder) { - throw new Error('PKCS#7 invalid padding byte'); - } - } - - var result = createArray(length); - copyArray(data, result, 0, 0, length); - return result; - } - - /////////////////////// - // Exporting - - - // The block cipher - var aesjs = { - AES: AES, - Counter: Counter, - - ModeOfOperation: { - ecb: ModeOfOperationECB, - cbc: ModeOfOperationCBC, - cfb: ModeOfOperationCFB, - ofb: ModeOfOperationOFB, - ctr: ModeOfOperationCTR - }, - - utils: { - hex: convertHex, - utf8: convertUtf8 - }, - - padding: { - pkcs7: { - pad: pkcs7pad, - strip: pkcs7strip - } - }, - - _arrayTest: { - coerceArray: coerceArray, - createArray: createArray, - copyArray: copyArray, - } - }; - - - // node.js - if (typeof exports !== 'undefined') { - module.exports = aesjs - - // RequireJS/AMD - // http://www.requirejs.org/docs/api.html - // https://github.com/amdjs/amdjs-api/wiki/AMD - } else if (typeof(define) === 'function' && define.amd) { - define(aesjs); - - // Web Browsers - } else { - - // If there was an existing library at "aesjs" make sure it's still available - if (root.aesjs) { - aesjs._aesjs = root.aesjs; - } - - root.aesjs = aesjs; - } - - -})(this); - -},{}],2:[function(require,module,exports){ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buffer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); - -},{"buffer":4}],3:[function(require,module,exports){ -var randomBytes = require('../../src.ts/utils').randomBytes; module.exports = function(length) { return randomBytes(length); }; -},{"../../src.ts/utils":66}],4:[function(require,module,exports){ - -},{}],5:[function(require,module,exports){ -'use strict'; - -var elliptic = exports; - -elliptic.version = require('../package.json').version; -elliptic.utils = require('./elliptic/utils'); -elliptic.rand = require('brorand'); -elliptic.hmacDRBG = require('./elliptic/hmac-drbg'); -elliptic.curve = require('./elliptic/curve'); -elliptic.curves = require('./elliptic/curves'); - -// Protocols -elliptic.ec = require('./elliptic/ec'); -elliptic.eddsa = require('./elliptic/eddsa'); - -},{"../package.json":19,"./elliptic/curve":8,"./elliptic/curves":11,"./elliptic/ec":12,"./elliptic/eddsa":15,"./elliptic/hmac-drbg":16,"./elliptic/utils":18,"brorand":3}],6:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var getNAF = utils.getNAF; -var getJSF = utils.getJSF; -var assert = utils.assert; - -function BaseCurve(type, conf) { - this.type = type; - this.p = new BN(conf.p, 16); - - // Use Montgomery, when there is no fast reduction for the prime - this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); - - // Useful for many curves - this.zero = new BN(0).toRed(this.red); - this.one = new BN(1).toRed(this.red); - this.two = new BN(2).toRed(this.red); - - // Curve configuration, optional - this.n = conf.n && new BN(conf.n, 16); - this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); - - // Temporary arrays - this._wnafT1 = new Array(4); - this._wnafT2 = new Array(4); - this._wnafT3 = new Array(4); - this._wnafT4 = new Array(4); - - // Generalized Greg Maxwell's trick - var adjustCount = this.n && this.p.div(this.n); - if (!adjustCount || adjustCount.cmpn(100) > 0) { - this.redN = null; - } else { - this._maxwellTrick = true; - this.redN = this.n.toRed(this.red); - } -} -module.exports = BaseCurve; - -BaseCurve.prototype.point = function point() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype.validate = function validate() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { - assert(p.precomputed); - var doubles = p._getDoubles(); - - var naf = getNAF(k, 1); - var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); - I /= 3; - - // Translate into more windowed form - var repr = []; - for (var j = 0; j < naf.length; j += doubles.step) { - var nafW = 0; - for (var k = j + doubles.step - 1; k >= j; k--) - nafW = (nafW << 1) + naf[k]; - repr.push(nafW); - } - - var a = this.jpoint(null, null, null); - var b = this.jpoint(null, null, null); - for (var i = I; i > 0; i--) { - for (var j = 0; j < repr.length; j++) { - var nafW = repr[j]; - if (nafW === i) - b = b.mixedAdd(doubles.points[j]); - else if (nafW === -i) - b = b.mixedAdd(doubles.points[j].neg()); - } - a = a.add(b); - } - return a.toP(); -}; - -BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { - var w = 4; - - // Precompute window - var nafPoints = p._getNAFPoints(w); - w = nafPoints.wnd; - var wnd = nafPoints.points; - - // Get NAF form - var naf = getNAF(k, w); - - // Add `this`*(N+1) for every w-NAF index - var acc = this.jpoint(null, null, null); - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var k = 0; i >= 0 && naf[i] === 0; i--) - k++; - if (i >= 0) - k++; - acc = acc.dblp(k); - - if (i < 0) - break; - var z = naf[i]; - assert(z !== 0); - if (p.type === 'affine') { - // J +- P - if (z > 0) - acc = acc.mixedAdd(wnd[(z - 1) >> 1]); - else - acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); - } else { - // J +- J - if (z > 0) - acc = acc.add(wnd[(z - 1) >> 1]); - else - acc = acc.add(wnd[(-z - 1) >> 1].neg()); - } - } - return p.type === 'affine' ? acc.toP() : acc; -}; - -BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, - points, - coeffs, - len, - jacobianResult) { - var wndWidth = this._wnafT1; - var wnd = this._wnafT2; - var naf = this._wnafT3; - - // Fill all arrays - var max = 0; - for (var i = 0; i < len; i++) { - var p = points[i]; - var nafPoints = p._getNAFPoints(defW); - wndWidth[i] = nafPoints.wnd; - wnd[i] = nafPoints.points; - } - - // Comb small window NAFs - for (var i = len - 1; i >= 1; i -= 2) { - var a = i - 1; - var b = i; - if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { - naf[a] = getNAF(coeffs[a], wndWidth[a]); - naf[b] = getNAF(coeffs[b], wndWidth[b]); - max = Math.max(naf[a].length, max); - max = Math.max(naf[b].length, max); - continue; - } - - var comb = [ - points[a], /* 1 */ - null, /* 3 */ - null, /* 5 */ - points[b] /* 7 */ - ]; - - // Try to avoid Projective points, if possible - if (points[a].y.cmp(points[b].y) === 0) { - comb[1] = points[a].add(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].add(points[b].neg()); - } else { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } - - var index = [ - -3, /* -1 -1 */ - -1, /* -1 0 */ - -5, /* -1 1 */ - -7, /* 0 -1 */ - 0, /* 0 0 */ - 7, /* 0 1 */ - 5, /* 1 -1 */ - 1, /* 1 0 */ - 3 /* 1 1 */ - ]; - - var jsf = getJSF(coeffs[a], coeffs[b]); - max = Math.max(jsf[0].length, max); - naf[a] = new Array(max); - naf[b] = new Array(max); - for (var j = 0; j < max; j++) { - var ja = jsf[0][j] | 0; - var jb = jsf[1][j] | 0; - - naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; - naf[b][j] = 0; - wnd[a] = comb; - } - } - - var acc = this.jpoint(null, null, null); - var tmp = this._wnafT4; - for (var i = max; i >= 0; i--) { - var k = 0; - - while (i >= 0) { - var zero = true; - for (var j = 0; j < len; j++) { - tmp[j] = naf[j][i] | 0; - if (tmp[j] !== 0) - zero = false; - } - if (!zero) - break; - k++; - i--; - } - if (i >= 0) - k++; - acc = acc.dblp(k); - if (i < 0) - break; - - for (var j = 0; j < len; j++) { - var z = tmp[j]; - var p; - if (z === 0) - continue; - else if (z > 0) - p = wnd[j][(z - 1) >> 1]; - else if (z < 0) - p = wnd[j][(-z - 1) >> 1].neg(); - - if (p.type === 'affine') - acc = acc.mixedAdd(p); - else - acc = acc.add(p); - } - } - // Zeroify references - for (var i = 0; i < len; i++) - wnd[i] = null; - - if (jacobianResult) - return acc; - else - return acc.toP(); -}; - -function BasePoint(curve, type) { - this.curve = curve; - this.type = type; - this.precomputed = null; -} -BaseCurve.BasePoint = BasePoint; - -BasePoint.prototype.eq = function eq(/*other*/) { - throw new Error('Not implemented'); -}; - -BasePoint.prototype.validate = function validate() { - return this.curve.validate(this); -}; - -BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - bytes = utils.toArray(bytes, enc); - - var len = this.p.byteLength(); - - // uncompressed, hybrid-odd, hybrid-even - if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && - bytes.length - 1 === 2 * len) { - if (bytes[0] === 0x06) - assert(bytes[bytes.length - 1] % 2 === 0); - else if (bytes[0] === 0x07) - assert(bytes[bytes.length - 1] % 2 === 1); - - var res = this.point(bytes.slice(1, 1 + len), - bytes.slice(1 + len, 1 + 2 * len)); - - return res; - } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && - bytes.length - 1 === len) { - return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); - } - throw new Error('Unknown point format'); -}; - -BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { - return this.encode(enc, true); -}; - -BasePoint.prototype._encode = function _encode(compact) { - var len = this.curve.p.byteLength(); - var x = this.getX().toArray('be', len); - - if (compact) - return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); - - return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; -}; - -BasePoint.prototype.encode = function encode(enc, compact) { - return utils.encode(this._encode(compact), enc); -}; - -BasePoint.prototype.precompute = function precompute(power) { - if (this.precomputed) - return this; - - var precomputed = { - doubles: null, - naf: null, - beta: null - }; - precomputed.naf = this._getNAFPoints(8); - precomputed.doubles = this._getDoubles(4, power); - precomputed.beta = this._getBeta(); - this.precomputed = precomputed; - - return this; -}; - -BasePoint.prototype._hasDoubles = function _hasDoubles(k) { - if (!this.precomputed) - return false; - - var doubles = this.precomputed.doubles; - if (!doubles) - return false; - - return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); -}; - -BasePoint.prototype._getDoubles = function _getDoubles(step, power) { - if (this.precomputed && this.precomputed.doubles) - return this.precomputed.doubles; - - var doubles = [ this ]; - var acc = this; - for (var i = 0; i < power; i += step) { - for (var j = 0; j < step; j++) - acc = acc.dbl(); - doubles.push(acc); - } - return { - step: step, - points: doubles - }; -}; - -BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { - if (this.precomputed && this.precomputed.naf) - return this.precomputed.naf; - - var res = [ this ]; - var max = (1 << wnd) - 1; - var dbl = max === 1 ? null : this.dbl(); - for (var i = 1; i < max; i++) - res[i] = res[i - 1].add(dbl); - return { - wnd: wnd, - points: res - }; -}; - -BasePoint.prototype._getBeta = function _getBeta() { - return null; -}; - -BasePoint.prototype.dblp = function dblp(k) { - var r = this; - for (var i = 0; i < k; i++) - r = r.dbl(); - return r; -}; - -},{"../../elliptic":5,"bn.js":2}],7:[function(require,module,exports){ -module.exports = {}; -},{}],8:[function(require,module,exports){ -'use strict'; - -var curve = exports; - -curve.base = require('./base'); -curve.short = require('./short'); -curve.mont = require('./mont'); -curve.edwards = require('./edwards'); - -},{"./base":6,"./edwards":7,"./mont":9,"./short":10}],9:[function(require,module,exports){ -arguments[4][7][0].apply(exports,arguments) -},{"dup":7}],10:[function(require,module,exports){ -'use strict'; - -var curve = require('../curve'); -var elliptic = require('../../elliptic'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; - -var assert = elliptic.utils.assert; - -function ShortCurve(conf) { - Base.call(this, 'short', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.tinv = this.two.redInvm(); - - this.zeroA = this.a.fromRed().cmpn(0) === 0; - this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; - - // If the curve is endomorphic, precalculate beta and lambda - this.endo = this._getEndomorphism(conf); - this._endoWnafT1 = new Array(4); - this._endoWnafT2 = new Array(4); -} -inherits(ShortCurve, Base); -module.exports = ShortCurve; - -ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { - // No efficient endomorphism - if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) - return; - - // Compute beta and lambda, that lambda * P = (beta * Px; Py) - var beta; - var lambda; - if (conf.beta) { - beta = new BN(conf.beta, 16).toRed(this.red); - } else { - var betas = this._getEndoRoots(this.p); - // Choose the smallest beta - beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; - beta = beta.toRed(this.red); - } - if (conf.lambda) { - lambda = new BN(conf.lambda, 16); - } else { - // Choose the lambda that is matching selected beta - var lambdas = this._getEndoRoots(this.n); - if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { - lambda = lambdas[0]; - } else { - lambda = lambdas[1]; - assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); - } - } - - // Get basis vectors, used for balanced length-two representation - var basis; - if (conf.basis) { - basis = conf.basis.map(function(vec) { - return { - a: new BN(vec.a, 16), - b: new BN(vec.b, 16) - }; - }); - } else { - basis = this._getEndoBasis(lambda); - } - - return { - beta: beta, - lambda: lambda, - basis: basis - }; -}; - -ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { - // Find roots of for x^2 + x + 1 in F - // Root = (-1 +- Sqrt(-3)) / 2 - // - var red = num === this.p ? this.red : BN.mont(num); - var tinv = new BN(2).toRed(red).redInvm(); - var ntinv = tinv.redNeg(); - - var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); - - var l1 = ntinv.redAdd(s).fromRed(); - var l2 = ntinv.redSub(s).fromRed(); - return [ l1, l2 ]; -}; - -ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { - // aprxSqrt >= sqrt(this.n) - var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); - - // 3.74 - // Run EGCD, until r(L + 1) < aprxSqrt - var u = lambda; - var v = this.n.clone(); - var x1 = new BN(1); - var y1 = new BN(0); - var x2 = new BN(0); - var y2 = new BN(1); - - // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) - var a0; - var b0; - // First vector - var a1; - var b1; - // Second vector - var a2; - var b2; - - var prevR; - var i = 0; - var r; - var x; - while (u.cmpn(0) !== 0) { - var q = v.div(u); - r = v.sub(q.mul(u)); - x = x2.sub(q.mul(x1)); - var y = y2.sub(q.mul(y1)); - - if (!a1 && r.cmp(aprxSqrt) < 0) { - a0 = prevR.neg(); - b0 = x1; - a1 = r.neg(); - b1 = x; - } else if (a1 && ++i === 2) { - break; - } - prevR = r; - - v = u; - u = r; - x2 = x1; - x1 = x; - y2 = y1; - y1 = y; - } - a2 = r.neg(); - b2 = x; - - var len1 = a1.sqr().add(b1.sqr()); - var len2 = a2.sqr().add(b2.sqr()); - if (len2.cmp(len1) >= 0) { - a2 = a0; - b2 = b0; - } - - // Normalize signs - if (a1.negative) { - a1 = a1.neg(); - b1 = b1.neg(); - } - if (a2.negative) { - a2 = a2.neg(); - b2 = b2.neg(); - } - - return [ - { a: a1, b: b1 }, - { a: a2, b: b2 } - ]; -}; - -ShortCurve.prototype._endoSplit = function _endoSplit(k) { - var basis = this.endo.basis; - var v1 = basis[0]; - var v2 = basis[1]; - - var c1 = v2.b.mul(k).divRound(this.n); - var c2 = v1.b.neg().mul(k).divRound(this.n); - - var p1 = c1.mul(v1.a); - var p2 = c2.mul(v2.a); - var q1 = c1.mul(v1.b); - var q2 = c2.mul(v2.b); - - // Calculate answer - var k1 = k.sub(p1).sub(p2); - var k2 = q1.add(q2).neg(); - return { k1: k1, k2: k2 }; -}; - -ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - // XXX Is there any way to tell if the number is odd without converting it - // to non-red form? - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -ShortCurve.prototype.validate = function validate(point) { - if (point.inf) - return true; - - var x = point.x; - var y = point.y; - - var ax = this.a.redMul(x); - var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); - return y.redSqr().redISub(rhs).cmpn(0) === 0; -}; - -ShortCurve.prototype._endoWnafMulAdd = - function _endoWnafMulAdd(points, coeffs, jacobianResult) { - var npoints = this._endoWnafT1; - var ncoeffs = this._endoWnafT2; - for (var i = 0; i < points.length; i++) { - var split = this._endoSplit(coeffs[i]); - var p = points[i]; - var beta = p._getBeta(); - - if (split.k1.negative) { - split.k1.ineg(); - p = p.neg(true); - } - if (split.k2.negative) { - split.k2.ineg(); - beta = beta.neg(true); - } - - npoints[i * 2] = p; - npoints[i * 2 + 1] = beta; - ncoeffs[i * 2] = split.k1; - ncoeffs[i * 2 + 1] = split.k2; - } - var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); - - // Clean-up references to points and coefficients - for (var j = 0; j < i * 2; j++) { - npoints[j] = null; - ncoeffs[j] = null; - } - return res; -}; - -function Point(curve, x, y, isRed) { - Base.BasePoint.call(this, curve, 'affine'); - if (x === null && y === null) { - this.x = null; - this.y = null; - this.inf = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - // Force redgomery representation when loading from JSON - if (isRed) { - this.x.forceRed(this.curve.red); - this.y.forceRed(this.curve.red); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - this.inf = false; - } -} -inherits(Point, Base.BasePoint); - -ShortCurve.prototype.point = function point(x, y, isRed) { - return new Point(this, x, y, isRed); -}; - -ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { - return Point.fromJSON(this, obj, red); -}; - -Point.prototype._getBeta = function _getBeta() { - if (!this.curve.endo) - return; - - var pre = this.precomputed; - if (pre && pre.beta) - return pre.beta; - - var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); - if (pre) { - var curve = this.curve; - var endoMul = function(p) { - return curve.point(p.x.redMul(curve.endo.beta), p.y); - }; - pre.beta = beta; - beta.precomputed = { - beta: null, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(endoMul) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(endoMul) - } - }; - } - return beta; -}; - -Point.prototype.toJSON = function toJSON() { - if (!this.precomputed) - return [ this.x, this.y ]; - - return [ this.x, this.y, this.precomputed && { - doubles: this.precomputed.doubles && { - step: this.precomputed.doubles.step, - points: this.precomputed.doubles.points.slice(1) - }, - naf: this.precomputed.naf && { - wnd: this.precomputed.naf.wnd, - points: this.precomputed.naf.points.slice(1) - } - } ]; -}; - -Point.fromJSON = function fromJSON(curve, obj, red) { - if (typeof obj === 'string') - obj = JSON.parse(obj); - var res = curve.point(obj[0], obj[1], red); - if (!obj[2]) - return res; - - function obj2point(obj) { - return curve.point(obj[0], obj[1], red); - } - - var pre = obj[2]; - res.precomputed = { - beta: null, - doubles: pre.doubles && { - step: pre.doubles.step, - points: [ res ].concat(pre.doubles.points.map(obj2point)) - }, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: [ res ].concat(pre.naf.points.map(obj2point)) - } - }; - return res; -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - return this.inf; -}; - -Point.prototype.add = function add(p) { - // O + P = P - if (this.inf) - return p; - - // P + O = P - if (p.inf) - return this; - - // P + P = 2P - if (this.eq(p)) - return this.dbl(); - - // P + (-P) = O - if (this.neg().eq(p)) - return this.curve.point(null, null); - - // P + Q = O - if (this.x.cmp(p.x) === 0) - return this.curve.point(null, null); - - var c = this.y.redSub(p.y); - if (c.cmpn(0) !== 0) - c = c.redMul(this.x.redSub(p.x).redInvm()); - var nx = c.redSqr().redISub(this.x).redISub(p.x); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.dbl = function dbl() { - if (this.inf) - return this; - - // 2P = O - var ys1 = this.y.redAdd(this.y); - if (ys1.cmpn(0) === 0) - return this.curve.point(null, null); - - var a = this.curve.a; - - var x2 = this.x.redSqr(); - var dyinv = ys1.redInvm(); - var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); - - var nx = c.redSqr().redISub(this.x.redAdd(this.x)); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.getX = function getX() { - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - return this.y.fromRed(); -}; - -Point.prototype.mul = function mul(k) { - k = new BN(k, 16); - - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else if (this.curve.endo) - return this.curve._endoWnafMulAdd([ this ], [ k ]); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs, true); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2, true); -}; - -Point.prototype.eq = function eq(p) { - return this === p || - this.inf === p.inf && - (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); -}; - -Point.prototype.neg = function neg(_precompute) { - if (this.inf) - return this; - - var res = this.curve.point(this.x, this.y.redNeg()); - if (_precompute && this.precomputed) { - var pre = this.precomputed; - var negate = function(p) { - return p.neg(); - }; - res.precomputed = { - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(negate) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(negate) - } - }; - } - return res; -}; - -Point.prototype.toJ = function toJ() { - if (this.inf) - return this.curve.jpoint(null, null, null); - - var res = this.curve.jpoint(this.x, this.y, this.curve.one); - return res; -}; - -function JPoint(curve, x, y, z) { - Base.BasePoint.call(this, curve, 'jacobian'); - if (x === null && y === null && z === null) { - this.x = this.curve.one; - this.y = this.curve.one; - this.z = new BN(0); - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = new BN(z, 16); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - - this.zOne = this.z === this.curve.one; -} -inherits(JPoint, Base.BasePoint); - -ShortCurve.prototype.jpoint = function jpoint(x, y, z) { - return new JPoint(this, x, y, z); -}; - -JPoint.prototype.toP = function toP() { - if (this.isInfinity()) - return this.curve.point(null, null); - - var zinv = this.z.redInvm(); - var zinv2 = zinv.redSqr(); - var ax = this.x.redMul(zinv2); - var ay = this.y.redMul(zinv2).redMul(zinv); - - return this.curve.point(ax, ay); -}; - -JPoint.prototype.neg = function neg() { - return this.curve.jpoint(this.x, this.y.redNeg(), this.z); -}; - -JPoint.prototype.add = function add(p) { - // O + P = P - if (this.isInfinity()) - return p; - - // P + O = P - if (p.isInfinity()) - return this; - - // 12M + 4S + 7A - var pz2 = p.z.redSqr(); - var z2 = this.z.redSqr(); - var u1 = this.x.redMul(pz2); - var u2 = p.x.redMul(z2); - var s1 = this.y.redMul(pz2.redMul(p.z)); - var s2 = p.y.redMul(z2.redMul(this.z)); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(p.z).redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mixedAdd = function mixedAdd(p) { - // O + P = P - if (this.isInfinity()) - return p.toJ(); - - // P + O = P - if (p.isInfinity()) - return this; - - // 8M + 3S + 7A - var z2 = this.z.redSqr(); - var u1 = this.x; - var u2 = p.x.redMul(z2); - var s1 = this.y; - var s2 = p.y.redMul(z2).redMul(this.z); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.dblp = function dblp(pow) { - if (pow === 0) - return this; - if (this.isInfinity()) - return this; - if (!pow) - return this.dbl(); - - if (this.curve.zeroA || this.curve.threeA) { - var r = this; - for (var i = 0; i < pow; i++) - r = r.dbl(); - return r; - } - - // 1M + 2S + 1A + N * (4S + 5M + 8A) - // N = 1 => 6M + 6S + 9A - var a = this.curve.a; - var tinv = this.curve.tinv; - - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - // Reuse results - var jyd = jy.redAdd(jy); - for (var i = 0; i < pow; i++) { - var jx2 = jx.redSqr(); - var jyd2 = jyd.redSqr(); - var jyd4 = jyd2.redSqr(); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var t1 = jx.redMul(jyd2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - var dny = c.redMul(t2); - dny = dny.redIAdd(dny).redISub(jyd4); - var nz = jyd.redMul(jz); - if (i + 1 < pow) - jz4 = jz4.redMul(jyd4); - - jx = nx; - jz = nz; - jyd = dny; - } - - return this.curve.jpoint(jx, jyd.redMul(tinv), jz); -}; - -JPoint.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - if (this.curve.zeroA) - return this._zeroDbl(); - else if (this.curve.threeA) - return this._threeDbl(); - else - return this._dbl(); -}; - -JPoint.prototype._zeroDbl = function _zeroDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 14A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s); - - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-dbl-2009-l - // 2M + 5S + 13A - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = B^2 - var c = b.redSqr(); - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); - d = d.redIAdd(d); - // E = 3 * A - var e = a.redAdd(a).redIAdd(a); - // F = E^2 - var f = e.redSqr(); - - // 8 * C - var c8 = c.redIAdd(c); - c8 = c8.redIAdd(c8); - c8 = c8.redIAdd(c8); - - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d); - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8); - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z); - nz = nz.redIAdd(nz); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._threeDbl = function _threeDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 15A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a - var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); - // T = M^2 - 2 * S - var t = m.redSqr().redISub(s).redISub(s); - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2 * Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b - // 3M + 5S - - // delta = Z1^2 - var delta = this.z.redSqr(); - // gamma = Y1^2 - var gamma = this.y.redSqr(); - // beta = X1 * gamma - var beta = this.x.redMul(gamma); - // alpha = 3 * (X1 - delta) * (X1 + delta) - var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); - alpha = alpha.redAdd(alpha).redIAdd(alpha); - // X3 = alpha^2 - 8 * beta - var beta4 = beta.redIAdd(beta); - beta4 = beta4.redIAdd(beta4); - var beta8 = beta4.redAdd(beta4); - nx = alpha.redSqr().redISub(beta8); - // Z3 = (Y1 + Z1)^2 - gamma - delta - nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); - // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 - var ggamma8 = gamma.redSqr(); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._dbl = function _dbl() { - var a = this.curve.a; - - // 4M + 6S + 10A - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - var jx2 = jx.redSqr(); - var jy2 = jy.redSqr(); - - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var jxd4 = jx.redAdd(jx); - jxd4 = jxd4.redIAdd(jxd4); - var t1 = jxd4.redMul(jy2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - - var jyd8 = jy2.redSqr(); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - var ny = c.redMul(t2).redISub(jyd8); - var nz = jy.redAdd(jy).redMul(jz); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.trpl = function trpl() { - if (!this.curve.zeroA) - return this.dbl().add(this); - - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl - // 5M + 10S + ... - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // ZZ = Z1^2 - var zz = this.z.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // M = 3 * XX + a * ZZ2; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // MM = M^2 - var mm = m.redSqr(); - // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM - var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - e = e.redIAdd(e); - e = e.redAdd(e).redIAdd(e); - e = e.redISub(mm); - // EE = E^2 - var ee = e.redSqr(); - // T = 16*YYYY - var t = yyyy.redIAdd(yyyy); - t = t.redIAdd(t); - t = t.redIAdd(t); - t = t.redIAdd(t); - // U = (M + E)^2 - MM - EE - T - var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); - // X3 = 4 * (X1 * EE - 4 * YY * U) - var yyu4 = yy.redMul(u); - yyu4 = yyu4.redIAdd(yyu4); - yyu4 = yyu4.redIAdd(yyu4); - var nx = this.x.redMul(ee).redISub(yyu4); - nx = nx.redIAdd(nx); - nx = nx.redIAdd(nx); - // Y3 = 8 * Y1 * (U * (T - U) - E * EE) - var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - // Z3 = (Z1 + E)^2 - ZZ - EE - var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mul = function mul(k, kbase) { - k = new BN(k, kbase); - - return this.curve._wnafMul(this, k); -}; - -JPoint.prototype.eq = function eq(p) { - if (p.type === 'affine') - return this.eq(p.toJ()); - - if (this === p) - return true; - - // x1 * z2^2 == x2 * z1^2 - var z2 = this.z.redSqr(); - var pz2 = p.z.redSqr(); - if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) - return false; - - // y1 * z2^3 == y2 * z1^3 - var z3 = z2.redMul(this.z); - var pz3 = pz2.redMul(p.z); - return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; -}; - -JPoint.prototype.eqXToP = function eqXToP(x) { - var zs = this.z.redSqr(); - var rx = x.toRed(this.curve.red).redMul(zs); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(zs); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } - return false; -}; - -JPoint.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -JPoint.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - -},{"../../elliptic":5,"../curve":8,"bn.js":2,"inherits":32}],11:[function(require,module,exports){ -'use strict'; - -var curves = exports; - -var hash = require('hash.js'); -var elliptic = require('../elliptic'); - -var assert = elliptic.utils.assert; - -function PresetCurve(options) { - if (options.type === 'short') - this.curve = new elliptic.curve.short(options); - else if (options.type === 'edwards') - this.curve = new elliptic.curve.edwards(options); - else - this.curve = new elliptic.curve.mont(options); - this.g = this.curve.g; - this.n = this.curve.n; - this.hash = options.hash; - - assert(this.g.validate(), 'Invalid curve'); - assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); -} -curves.PresetCurve = PresetCurve; - -function defineCurve(name, options) { - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - get: function() { - var curve = new PresetCurve(options); - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - value: curve - }); - return curve; - } - }); -} - -defineCurve('p192', { - type: 'short', - prime: 'p192', - p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', - b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', - n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', - hash: hash.sha256, - gRed: false, - g: [ - '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', - '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' - ] -}); - -defineCurve('p224', { - type: 'short', - prime: 'p224', - p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', - b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', - n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', - hash: hash.sha256, - gRed: false, - g: [ - 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', - 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' - ] -}); - -defineCurve('p256', { - type: 'short', - prime: null, - p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', - a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', - b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', - n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', - hash: hash.sha256, - gRed: false, - g: [ - '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' - ] -}); - -defineCurve('p384', { - type: 'short', - prime: null, - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 ffffffff', - a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 fffffffc', - b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + - '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', - n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + - 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', - hash: hash.sha384, - gRed: false, - g: [ - 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + - '5502f25d bf55296c 3a545e38 72760ab7', - '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' - ] -}); - -defineCurve('p521', { - type: 'short', - prime: null, - p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff', - a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff fffffffc', - b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + - '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + - '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', - n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + - 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', - hash: hash.sha512, - gRed: false, - g: [ - '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + - '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + - 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', - '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + - '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + - '3fad0761 353c7086 a272c240 88be9476 9fd16650' - ] -}); - -defineCurve('curve25519', { - type: 'mont', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '76d06', - b: '1', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '9' - ] -}); - -defineCurve('ed25519', { - type: 'edwards', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '-1', - c: '1', - // -121665 * (121666^(-1)) (mod P) - d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', - - // 4/5 - '6666666666666666666666666666666666666666666666666666666666666658' - ] -}); - -var pre; -try { - pre = require('./precomputed/secp256k1'); -} catch (e) { - pre = undefined; -} - -defineCurve('secp256k1', { - type: 'short', - prime: 'k256', - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', - a: '0', - b: '7', - n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', - h: '1', - hash: hash.sha256, - - // Precomputed endomorphism - beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', - lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', - basis: [ - { - a: '3086d221a7d46bcde86c90e49284eb15', - b: '-e4437ed6010e88286f547fa90abfe4c3' - }, - { - a: '114ca50f7a8e2f3f657c1108d9d44cfd8', - b: '3086d221a7d46bcde86c90e49284eb15' - } - ], - - gRed: false, - g: [ - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', - pre - ] -}); - -},{"../elliptic":5,"./precomputed/secp256k1":17,"hash.js":20}],12:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; - -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EC(options) { - if (!(this instanceof EC)) - return new EC(options); - - // Shortcut `elliptic.ec(curve-name)` - if (typeof options === 'string') { - assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); - - options = elliptic.curves[options]; - } - - // Shortcut for `elliptic.ec(elliptic.curves.curveName)` - if (options instanceof elliptic.curves.PresetCurve) - options = { curve: options }; - - this.curve = options.curve.curve; - this.n = this.curve.n; - this.nh = this.n.ushrn(1); - this.g = this.curve.g; - - // Point on curve - this.g = options.curve.g; - this.g.precompute(options.curve.n.bitLength() + 1); - - // Hash for function for DRBG - this.hash = options.hash || options.curve.hash; -} -module.exports = EC; - -EC.prototype.keyPair = function keyPair(options) { - return new KeyPair(this, options); -}; - -EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { - return KeyPair.fromPrivate(this, priv, enc); -}; - -EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { - return KeyPair.fromPublic(this, pub, enc); -}; - -EC.prototype.genKeyPair = function genKeyPair(options) { - if (!options) - options = {}; - - // Instantiate Hmac_DRBG - var drbg = new elliptic.hmacDRBG({ - hash: this.hash, - pers: options.pers, - entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), - nonce: this.n.toArray() - }); - - var bytes = this.n.byteLength(); - var ns2 = this.n.sub(new BN(2)); - do { - var priv = new BN(drbg.generate(bytes)); - if (priv.cmp(ns2) > 0) - continue; - - priv.iaddn(1); - return this.keyFromPrivate(priv); - } while (true); -}; - -EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { - var delta = msg.byteLength() * 8 - this.n.bitLength(); - if (delta > 0) - msg = msg.ushrn(delta); - if (!truncOnly && msg.cmp(this.n) >= 0) - return msg.sub(this.n); - else - return msg; -}; - -EC.prototype.sign = function sign(msg, key, enc, options) { - if (typeof enc === 'object') { - options = enc; - enc = null; - } - if (!options) - options = {}; - - key = this.keyFromPrivate(key, enc); - msg = this._truncateToN(new BN(msg, 16)); - - // Zero-extend key to provide enough entropy - var bytes = this.n.byteLength(); - var bkey = key.getPrivate().toArray('be', bytes); - - // Zero-extend nonce to have the same byte size as N - var nonce = msg.toArray('be', bytes); - - // Instantiate Hmac_DRBG - var drbg = new elliptic.hmacDRBG({ - hash: this.hash, - entropy: bkey, - nonce: nonce, - pers: options.pers, - persEnc: options.persEnc - }); - - // Number of bytes to generate - var ns1 = this.n.sub(new BN(1)); - - for (var iter = 0; true; iter++) { - var k = options.k ? - options.k(iter) : - new BN(drbg.generate(this.n.byteLength())); - k = this._truncateToN(k, true); - if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) - continue; - - var kp = this.g.mul(k); - if (kp.isInfinity()) - continue; - - var kpX = kp.getX(); - var r = kpX.umod(this.n); - if (r.cmpn(0) === 0) - continue; - - var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); - s = s.umod(this.n); - if (s.cmpn(0) === 0) - continue; - - var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | - (kpX.cmp(r) !== 0 ? 2 : 0); - - // Use complement of `s`, if it is > `n / 2` - if (options.canonical && s.cmp(this.nh) > 0) { - s = this.n.sub(s); - recoveryParam ^= 1; - } - - return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); - } -}; - -EC.prototype.verify = function verify(msg, signature, key, enc) { - msg = this._truncateToN(new BN(msg, 16)); - key = this.keyFromPublic(key, enc); - signature = new Signature(signature, 'hex'); - - // Perform primitive values validation - var r = signature.r; - var s = signature.s; - if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) - return false; - if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) - return false; - - // Validate signature - var sinv = s.invm(this.n); - var u1 = sinv.mul(msg).umod(this.n); - var u2 = sinv.mul(r).umod(this.n); - - if (!this.curve._maxwellTrick) { - var p = this.g.mulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - return p.getX().umod(this.n).cmp(r) === 0; - } - - // NOTE: Greg Maxwell's trick, inspired by: - // https://git.io/vad3K - - var p = this.g.jmulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - // Compare `p.x` of Jacobian point with `r`, - // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the - // inverse of `p.z^2` - return p.eqXToP(r); -}; - -EC.prototype.recoverPubKey = function(msg, signature, j, enc) { - assert((3 & j) === j, 'The recovery param is more than two bits'); - signature = new Signature(signature, enc); - - var n = this.n; - var e = new BN(msg); - var r = signature.r; - var s = signature.s; - - // A set LSB signifies that the y-coordinate is odd - var isYOdd = j & 1; - var isSecondKey = j >> 1; - if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) - throw new Error('Unable to find sencond key candinate'); - - // 1.1. Let x = r + jn. - if (isSecondKey) - r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); - else - r = this.curve.pointFromX(r, isYOdd); - - var rInv = signature.r.invm(n); - var s1 = n.sub(e).mul(rInv).umod(n); - var s2 = s.mul(rInv).umod(n); - - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - return this.g.mulAdd(s1, r, s2); -}; - -EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { - signature = new Signature(signature, enc); - if (signature.recoveryParam !== null) - return signature.recoveryParam; - - for (var i = 0; i < 4; i++) { - var Qprime; - try { - Qprime = this.recoverPubKey(e, signature, i); - } catch (e) { - continue; - } - - if (Qprime.eq(Q)) - return i; - } - throw new Error('Unable to find valid recovery factor'); -}; - -},{"../../elliptic":5,"./key":13,"./signature":14,"bn.js":2}],13:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; - -function KeyPair(ec, options) { - this.ec = ec; - this.priv = null; - this.pub = null; - - // KeyPair(ec, { priv: ..., pub: ... }) - if (options.priv) - this._importPrivate(options.priv, options.privEnc); - if (options.pub) - this._importPublic(options.pub, options.pubEnc); -} -module.exports = KeyPair; - -KeyPair.fromPublic = function fromPublic(ec, pub, enc) { - if (pub instanceof KeyPair) - return pub; - - return new KeyPair(ec, { - pub: pub, - pubEnc: enc - }); -}; - -KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { - if (priv instanceof KeyPair) - return priv; - - return new KeyPair(ec, { - priv: priv, - privEnc: enc - }); -}; - -KeyPair.prototype.validate = function validate() { - var pub = this.getPublic(); - - if (pub.isInfinity()) - return { result: false, reason: 'Invalid public key' }; - if (!pub.validate()) - return { result: false, reason: 'Public key is not a point' }; - if (!pub.mul(this.ec.curve.n).isInfinity()) - return { result: false, reason: 'Public key * N != O' }; - - return { result: true, reason: null }; -}; - -KeyPair.prototype.getPublic = function getPublic(compact, enc) { - // compact is optional argument - if (typeof compact === 'string') { - enc = compact; - compact = null; - } - - if (!this.pub) - this.pub = this.ec.g.mul(this.priv); - - if (!enc) - return this.pub; - - return this.pub.encode(enc, compact); -}; - -KeyPair.prototype.getPrivate = function getPrivate(enc) { - if (enc === 'hex') - return this.priv.toString(16, 2); - else - return this.priv; -}; - -KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { - this.priv = new BN(key, enc || 16); - - // Ensure that the priv won't be bigger than n, otherwise we may fail - // in fixed multiplication method - this.priv = this.priv.umod(this.ec.curve.n); -}; - -KeyPair.prototype._importPublic = function _importPublic(key, enc) { - if (key.x || key.y) { - // Montgomery points only have an `x` coordinate. - // Weierstrass/Edwards points on the other hand have both `x` and - // `y` coordinates. - if (this.ec.curve.type === 'mont') { - assert(key.x, 'Need x coordinate'); - } else if (this.ec.curve.type === 'short' || - this.ec.curve.type === 'edwards') { - assert(key.x && key.y, 'Need both x and y coordinate'); - } - this.pub = this.ec.curve.point(key.x, key.y); - return; - } - this.pub = this.ec.curve.decodePoint(key, enc); -}; - -// ECDH -KeyPair.prototype.derive = function derive(pub) { - return pub.mul(this.priv).getX(); -}; - -// ECDSA -KeyPair.prototype.sign = function sign(msg, enc, options) { - return this.ec.sign(msg, this, enc, options); -}; - -KeyPair.prototype.verify = function verify(msg, signature) { - return this.ec.verify(msg, signature, this); -}; - -KeyPair.prototype.inspect = function inspect() { - return ''; -}; - -},{"../../elliptic":5,"bn.js":2}],14:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); - -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; - -function Signature(options, enc) { - if (options instanceof Signature) - return options; - - if (this._importDER(options, enc)) - return; - - assert(options.r && options.s, 'Signature without r or s'); - this.r = new BN(options.r, 16); - this.s = new BN(options.s, 16); - if (options.recoveryParam === undefined) - this.recoveryParam = null; - else - this.recoveryParam = options.recoveryParam; -} -module.exports = Signature; - -function Position() { - this.place = 0; -} - -function getLength(buf, p) { - var initial = buf[p.place++]; - if (!(initial & 0x80)) { - return initial; - } - var octetLen = initial & 0xf; - var val = 0; - for (var i = 0, off = p.place; i < octetLen; i++, off++) { - val <<= 8; - val |= buf[off]; - } - p.place = off; - return val; -} - -function rmPadding(buf) { - var i = 0; - var len = buf.length - 1; - while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { - i++; - } - if (i === 0) { - return buf; - } - return buf.slice(i); -} - -Signature.prototype._importDER = function _importDER(data, enc) { - data = utils.toArray(data, enc); - var p = new Position(); - if (data[p.place++] !== 0x30) { - return false; - } - var len = getLength(data, p); - if ((len + p.place) !== data.length) { - return false; - } - if (data[p.place++] !== 0x02) { - return false; - } - var rlen = getLength(data, p); - var r = data.slice(p.place, rlen + p.place); - p.place += rlen; - if (data[p.place++] !== 0x02) { - return false; - } - var slen = getLength(data, p); - if (data.length !== slen + p.place) { - return false; - } - var s = data.slice(p.place, slen + p.place); - if (r[0] === 0 && (r[1] & 0x80)) { - r = r.slice(1); - } - if (s[0] === 0 && (s[1] & 0x80)) { - s = s.slice(1); - } - - this.r = new BN(r); - this.s = new BN(s); - this.recoveryParam = null; - - return true; -}; - -function constructLength(arr, len) { - if (len < 0x80) { - arr.push(len); - return; - } - var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); - arr.push(octets | 0x80); - while (--octets) { - arr.push((len >>> (octets << 3)) & 0xff); - } - arr.push(len); -} - -Signature.prototype.toDER = function toDER(enc) { - var r = this.r.toArray(); - var s = this.s.toArray(); - - // Pad values - if (r[0] & 0x80) - r = [ 0 ].concat(r); - // Pad values - if (s[0] & 0x80) - s = [ 0 ].concat(s); - - r = rmPadding(r); - s = rmPadding(s); - - while (!s[0] && !(s[1] & 0x80)) { - s = s.slice(1); - } - var arr = [ 0x02 ]; - constructLength(arr, r.length); - arr = arr.concat(r); - arr.push(0x02); - constructLength(arr, s.length); - var backHalf = arr.concat(s); - var res = [ 0x30 ]; - constructLength(res, backHalf.length); - res = res.concat(backHalf); - return utils.encode(res, enc); -}; - -},{"../../elliptic":5,"bn.js":2}],15:[function(require,module,exports){ -arguments[4][7][0].apply(exports,arguments) -},{"dup":7}],16:[function(require,module,exports){ -'use strict'; - -var hash = require('hash.js'); -var elliptic = require('../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; - -function HmacDRBG(options) { - if (!(this instanceof HmacDRBG)) - return new HmacDRBG(options); - this.hash = options.hash; - this.predResist = !!options.predResist; - - this.outLen = this.hash.outSize; - this.minEntropy = options.minEntropy || this.hash.hmacStrength; - - this.reseed = null; - this.reseedInterval = null; - this.K = null; - this.V = null; - - var entropy = utils.toArray(options.entropy, options.entropyEnc); - var nonce = utils.toArray(options.nonce, options.nonceEnc); - var pers = utils.toArray(options.pers, options.persEnc); - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - this._init(entropy, nonce, pers); -} -module.exports = HmacDRBG; - -HmacDRBG.prototype._init = function init(entropy, nonce, pers) { - var seed = entropy.concat(nonce).concat(pers); - - this.K = new Array(this.outLen / 8); - this.V = new Array(this.outLen / 8); - for (var i = 0; i < this.V.length; i++) { - this.K[i] = 0x00; - this.V[i] = 0x01; - } - - this._update(seed); - this.reseed = 1; - this.reseedInterval = 0x1000000000000; // 2^48 -}; - -HmacDRBG.prototype._hmac = function hmac() { - return new hash.hmac(this.hash, this.K); -}; - -HmacDRBG.prototype._update = function update(seed) { - var kmac = this._hmac() - .update(this.V) - .update([ 0x00 ]); - if (seed) - kmac = kmac.update(seed); - this.K = kmac.digest(); - this.V = this._hmac().update(this.V).digest(); - if (!seed) - return; - - this.K = this._hmac() - .update(this.V) - .update([ 0x01 ]) - .update(seed) - .digest(); - this.V = this._hmac().update(this.V).digest(); -}; - -HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { - // Optional entropy enc - if (typeof entropyEnc !== 'string') { - addEnc = add; - add = entropyEnc; - entropyEnc = null; - } - - entropy = utils.toBuffer(entropy, entropyEnc); - add = utils.toBuffer(add, addEnc); - - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - - this._update(entropy.concat(add || [])); - this.reseed = 1; -}; - -HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { - if (this.reseed > this.reseedInterval) - throw new Error('Reseed is required'); - - // Optional encoding - if (typeof enc !== 'string') { - addEnc = add; - add = enc; - enc = null; - } - - // Optional additional data - if (add) { - add = utils.toArray(add, addEnc); - this._update(add); - } - - var temp = []; - while (temp.length < len) { - this.V = this._hmac().update(this.V).digest(); - temp = temp.concat(this.V); - } - - var res = temp.slice(0, len); - this._update(add); - this.reseed++; - return utils.encode(res, enc); -}; - -},{"../elliptic":5,"hash.js":20}],17:[function(require,module,exports){ -module.exports = undefined; -},{}],18:[function(require,module,exports){ -'use strict'; - -var utils = exports; -var BN = require('bn.js'); - -utils.assert = function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -}; - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg !== 'string') { - for (var i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - return res; - } - if (!enc) { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); - } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (var i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } - return res; -} -utils.toArray = toArray; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -utils.zero2 = zero2; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -utils.toHex = toHex; - -utils.encode = function encode(arr, enc) { - if (enc === 'hex') - return toHex(arr); - else - return arr; -}; - -// Represent num in a w-NAF form -function getNAF(num, w) { - var naf = []; - var ws = 1 << (w + 1); - var k = num.clone(); - while (k.cmpn(1) >= 0) { - var z; - if (k.isOdd()) { - var mod = k.andln(ws - 1); - if (mod > (ws >> 1) - 1) - z = (ws >> 1) - mod; - else - z = mod; - k.isubn(z); - } else { - z = 0; - } - naf.push(z); - - // Optimization, shift by word if possible - var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; - for (var i = 1; i < shift; i++) - naf.push(0); - k.iushrn(shift); - } - - return naf; -} -utils.getNAF = getNAF; - -// Represent k1, k2 in a Joint Sparse Form -function getJSF(k1, k2) { - var jsf = [ - [], - [] - ]; - - k1 = k1.clone(); - k2 = k2.clone(); - var d1 = 0; - var d2 = 0; - while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { - - // First phase - var m14 = (k1.andln(3) + d1) & 3; - var m24 = (k2.andln(3) + d2) & 3; - if (m14 === 3) - m14 = -1; - if (m24 === 3) - m24 = -1; - var u1; - if ((m14 & 1) === 0) { - u1 = 0; - } else { - var m8 = (k1.andln(7) + d1) & 7; - if ((m8 === 3 || m8 === 5) && m24 === 2) - u1 = -m14; - else - u1 = m14; - } - jsf[0].push(u1); - - var u2; - if ((m24 & 1) === 0) { - u2 = 0; - } else { - var m8 = (k2.andln(7) + d2) & 7; - if ((m8 === 3 || m8 === 5) && m14 === 2) - u2 = -m24; - else - u2 = m24; - } - jsf[1].push(u2); - - // Second phase - if (2 * d1 === u1 + 1) - d1 = 1 - d1; - if (2 * d2 === u2 + 1) - d2 = 1 - d2; - k1.iushrn(1); - k2.iushrn(1); - } - - return jsf; -} -utils.getJSF = getJSF; - -function cachedProperty(obj, name, computer) { - var key = '_' + name; - obj.prototype[name] = function cachedProperty() { - return this[key] !== undefined ? this[key] : - this[key] = computer.call(this); - }; -} -utils.cachedProperty = cachedProperty; - -function parseBytes(bytes) { - return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : - bytes; -} -utils.parseBytes = parseBytes; - -function intFromLE(bytes) { - return new BN(bytes, 'hex', 'le'); -} -utils.intFromLE = intFromLE; - - -},{"bn.js":2}],19:[function(require,module,exports){ -module.exports={"version":"6.3.3"} -},{}],20:[function(require,module,exports){ -var hash = exports; - -hash.utils = require('./hash/utils'); -hash.common = require('./hash/common'); -hash.sha = require('./hash/sha'); -hash.ripemd = require('./hash/ripemd'); -hash.hmac = require('./hash/hmac'); - -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; - -},{"./hash/common":21,"./hash/hmac":22,"./hash/ripemd":23,"./hash/sha":24,"./hash/utils":31}],21:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; - - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; - -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; - - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; - - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; - - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); - } - - return this; -}; - -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); - - return this._digest(enc); -}; - -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; - - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; - - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - - for (t = 8; t < this.padLength; t++) - res[i++] = 0; - } - - return res; -}; - -},{"./utils":31,"minimalistic-assert":34}],22:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; - - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; - -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); - - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); - - for (i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); - - // 0x36 ^ 0x5c = 0x6a - for (i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; - -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; -}; - -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; - -},{"./utils":31,"minimalistic-assert":34}],23:[function(require,module,exports){ -module.exports = {ripemd160: null} -},{}],24:[function(require,module,exports){ -'use strict'; - -exports.sha1 = require('./sha/1'); -exports.sha224 = require('./sha/224'); -exports.sha256 = require('./sha/256'); -exports.sha384 = require('./sha/384'); -exports.sha512 = require('./sha/512'); - -},{"./sha/1":25,"./sha/224":26,"./sha/256":27,"./sha/384":28,"./sha/512":29}],25:[function(require,module,exports){ -arguments[4][7][0].apply(exports,arguments) -},{"dup":7}],26:[function(require,module,exports){ -arguments[4][7][0].apply(exports,arguments) -},{"dup":7}],27:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); -var assert = require('minimalistic-assert'); - -var sum32 = utils.sum32; -var sum32_4 = utils.sum32_4; -var sum32_5 = utils.sum32_5; -var ch32 = shaCommon.ch32; -var maj32 = shaCommon.maj32; -var s0_256 = shaCommon.s0_256; -var s1_256 = shaCommon.s1_256; -var g0_256 = shaCommon.g0_256; -var g1_256 = shaCommon.g1_256; - -var BlockHash = common.BlockHash; - -var sha256_K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; - -function SHA256() { - if (!(this instanceof SHA256)) - return new SHA256(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - this.k = sha256_K; - this.W = new Array(64); -} -utils.inherits(SHA256, BlockHash); -module.exports = SHA256; - -SHA256.blockSize = 512; -SHA256.outSize = 256; -SHA256.hmacStrength = 192; -SHA256.padLength = 64; - -SHA256.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - for (; i < W.length; i++) - W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - var f = this.h[5]; - var g = this.h[6]; - var h = this.h[7]; - - assert(this.k.length === W.length); - for (i = 0; i < W.length; i++) { - var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); - var T2 = sum32(s0_256(a), maj32(a, b, c)); - h = g; - g = f; - f = e; - e = sum32(d, T1); - d = c; - c = b; - b = a; - a = sum32(T1, T2); - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); - this.h[5] = sum32(this.h[5], f); - this.h[6] = sum32(this.h[6], g); - this.h[7] = sum32(this.h[7], h); -}; - -SHA256.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -},{"../common":21,"../utils":31,"./common":30,"minimalistic-assert":34}],28:[function(require,module,exports){ -arguments[4][7][0].apply(exports,arguments) -},{"dup":7}],29:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var assert = require('minimalistic-assert'); - -var rotr64_hi = utils.rotr64_hi; -var rotr64_lo = utils.rotr64_lo; -var shr64_hi = utils.shr64_hi; -var shr64_lo = utils.shr64_lo; -var sum64 = utils.sum64; -var sum64_hi = utils.sum64_hi; -var sum64_lo = utils.sum64_lo; -var sum64_4_hi = utils.sum64_4_hi; -var sum64_4_lo = utils.sum64_4_lo; -var sum64_5_hi = utils.sum64_5_hi; -var sum64_5_lo = utils.sum64_5_lo; - -var BlockHash = common.BlockHash; - -var sha512_K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; - -function SHA512() { - if (!(this instanceof SHA512)) - return new SHA512(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xf3bcc908, - 0xbb67ae85, 0x84caa73b, - 0x3c6ef372, 0xfe94f82b, - 0xa54ff53a, 0x5f1d36f1, - 0x510e527f, 0xade682d1, - 0x9b05688c, 0x2b3e6c1f, - 0x1f83d9ab, 0xfb41bd6b, - 0x5be0cd19, 0x137e2179 ]; - this.k = sha512_K; - this.W = new Array(160); -} -utils.inherits(SHA512, BlockHash); -module.exports = SHA512; - -SHA512.blockSize = 1024; -SHA512.outSize = 512; -SHA512.hmacStrength = 192; -SHA512.padLength = 128; - -SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { - var W = this.W; - - // 32 x 32bit words - for (var i = 0; i < 32; i++) - W[i] = msg[start + i]; - for (; i < W.length; i += 2) { - var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 - var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); - var c1_hi = W[i - 14]; // i - 7 - var c1_lo = W[i - 13]; - var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 - var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); - var c3_hi = W[i - 32]; // i - 16 - var c3_lo = W[i - 31]; - - W[i] = sum64_4_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - W[i + 1] = sum64_4_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - } -}; - -SHA512.prototype._update = function _update(msg, start) { - this._prepareBlock(msg, start); - - var W = this.W; - - var ah = this.h[0]; - var al = this.h[1]; - var bh = this.h[2]; - var bl = this.h[3]; - var ch = this.h[4]; - var cl = this.h[5]; - var dh = this.h[6]; - var dl = this.h[7]; - var eh = this.h[8]; - var el = this.h[9]; - var fh = this.h[10]; - var fl = this.h[11]; - var gh = this.h[12]; - var gl = this.h[13]; - var hh = this.h[14]; - var hl = this.h[15]; - - assert(this.k.length === W.length); - for (var i = 0; i < W.length; i += 2) { - var c0_hi = hh; - var c0_lo = hl; - var c1_hi = s1_512_hi(eh, el); - var c1_lo = s1_512_lo(eh, el); - var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); - var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); - var c3_hi = this.k[i]; - var c3_lo = this.k[i + 1]; - var c4_hi = W[i]; - var c4_lo = W[i + 1]; - - var T1_hi = sum64_5_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - var T1_lo = sum64_5_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - - c0_hi = s0_512_hi(ah, al); - c0_lo = s0_512_lo(ah, al); - c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); - c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); - - var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); - var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - - hh = gh; - hl = gl; - - gh = fh; - gl = fl; - - fh = eh; - fl = el; - - eh = sum64_hi(dh, dl, T1_hi, T1_lo); - el = sum64_lo(dl, dl, T1_hi, T1_lo); - - dh = ch; - dl = cl; - - ch = bh; - cl = bl; - - bh = ah; - bl = al; - - ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); - al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); - } - - sum64(this.h, 0, ah, al); - sum64(this.h, 2, bh, bl); - sum64(this.h, 4, ch, cl); - sum64(this.h, 6, dh, dl); - sum64(this.h, 8, eh, el); - sum64(this.h, 10, fh, fl); - sum64(this.h, 12, gh, gl); - sum64(this.h, 14, hh, hl); -}; - -SHA512.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -function ch64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ ((~xh) & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function ch64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ ((~xl) & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 28); - var c1_hi = rotr64_hi(xl, xh, 2); // 34 - var c2_hi = rotr64_hi(xl, xh, 7); // 39 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 28); - var c1_lo = rotr64_lo(xl, xh, 2); // 34 - var c2_lo = rotr64_lo(xl, xh, 7); // 39 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 14); - var c1_hi = rotr64_hi(xh, xl, 18); - var c2_hi = rotr64_hi(xl, xh, 9); // 41 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 14); - var c1_lo = rotr64_lo(xh, xl, 18); - var c2_lo = rotr64_lo(xl, xh, 9); // 41 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 1); - var c1_hi = rotr64_hi(xh, xl, 8); - var c2_hi = shr64_hi(xh, xl, 7); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 1); - var c1_lo = rotr64_lo(xh, xl, 8); - var c2_lo = shr64_lo(xh, xl, 7); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 19); - var c1_hi = rotr64_hi(xl, xh, 29); // 61 - var c2_hi = shr64_hi(xh, xl, 6); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 19); - var c1_lo = rotr64_lo(xl, xh, 29); // 61 - var c2_lo = shr64_lo(xh, xl, 6); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -},{"../common":21,"../utils":31,"minimalistic-assert":34}],30:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var rotr32 = utils.rotr32; - -function ft_1(s, x, y, z) { - if (s === 0) - return ch32(x, y, z); - if (s === 1 || s === 3) - return p32(x, y, z); - if (s === 2) - return maj32(x, y, z); -} -exports.ft_1 = ft_1; - -function ch32(x, y, z) { - return (x & y) ^ ((~x) & z); -} -exports.ch32 = ch32; - -function maj32(x, y, z) { - return (x & y) ^ (x & z) ^ (y & z); -} -exports.maj32 = maj32; - -function p32(x, y, z) { - return x ^ y ^ z; -} -exports.p32 = p32; - -function s0_256(x) { - return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); -} -exports.s0_256 = s0_256; - -function s1_256(x) { - return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); -} -exports.s1_256 = s1_256; - -function g0_256(x) { - return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); -} -exports.g0_256 = g0_256; - -function g1_256(x) { - return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); -} -exports.g1_256 = g1_256; - -},{"../utils":31}],31:[function(require,module,exports){ -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -exports.inherits = inherits; - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg === 'string') { - if (!enc) { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); - } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } - } else { - for (i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - } - return res; -} -exports.toArray = toArray; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -exports.toHex = toHex; - -function htonl(w) { - var res = (w >>> 24) | - ((w >>> 8) & 0xff00) | - ((w << 8) & 0xff0000) | - ((w & 0xff) << 24); - return res >>> 0; -} -exports.htonl = htonl; - -function toHex32(msg, endian) { - var res = ''; - for (var i = 0; i < msg.length; i++) { - var w = msg[i]; - if (endian === 'little') - w = htonl(w); - res += zero8(w.toString(16)); - } - return res; -} -exports.toHex32 = toHex32; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -exports.zero2 = zero2; - -function zero8(word) { - if (word.length === 7) - return '0' + word; - else if (word.length === 6) - return '00' + word; - else if (word.length === 5) - return '000' + word; - else if (word.length === 4) - return '0000' + word; - else if (word.length === 3) - return '00000' + word; - else if (word.length === 2) - return '000000' + word; - else if (word.length === 1) - return '0000000' + word; - else - return word; -} -exports.zero8 = zero8; - -function join32(msg, start, end, endian) { - var len = end - start; - assert(len % 4 === 0); - var res = new Array(len / 4); - for (var i = 0, k = start; i < res.length; i++, k += 4) { - var w; - if (endian === 'big') - w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; - else - w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; - res[i] = w >>> 0; - } - return res; -} -exports.join32 = join32; - -function split32(msg, endian) { - var res = new Array(msg.length * 4); - for (var i = 0, k = 0; i < msg.length; i++, k += 4) { - var m = msg[i]; - if (endian === 'big') { - res[k] = m >>> 24; - res[k + 1] = (m >>> 16) & 0xff; - res[k + 2] = (m >>> 8) & 0xff; - res[k + 3] = m & 0xff; - } else { - res[k + 3] = m >>> 24; - res[k + 2] = (m >>> 16) & 0xff; - res[k + 1] = (m >>> 8) & 0xff; - res[k] = m & 0xff; - } - } - return res; -} -exports.split32 = split32; - -function rotr32(w, b) { - return (w >>> b) | (w << (32 - b)); -} -exports.rotr32 = rotr32; - -function rotl32(w, b) { - return (w << b) | (w >>> (32 - b)); -} -exports.rotl32 = rotl32; - -function sum32(a, b) { - return (a + b) >>> 0; -} -exports.sum32 = sum32; - -function sum32_3(a, b, c) { - return (a + b + c) >>> 0; -} -exports.sum32_3 = sum32_3; - -function sum32_4(a, b, c, d) { - return (a + b + c + d) >>> 0; -} -exports.sum32_4 = sum32_4; - -function sum32_5(a, b, c, d, e) { - return (a + b + c + d + e) >>> 0; -} -exports.sum32_5 = sum32_5; - -function sum64(buf, pos, ah, al) { - var bh = buf[pos]; - var bl = buf[pos + 1]; - - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - buf[pos] = hi >>> 0; - buf[pos + 1] = lo; -} -exports.sum64 = sum64; - -function sum64_hi(ah, al, bh, bl) { - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - return hi >>> 0; -} -exports.sum64_hi = sum64_hi; - -function sum64_lo(ah, al, bh, bl) { - var lo = al + bl; - return lo >>> 0; -} -exports.sum64_lo = sum64_lo; - -function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - - var hi = ah + bh + ch + dh + carry; - return hi >>> 0; -} -exports.sum64_4_hi = sum64_4_hi; - -function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { - var lo = al + bl + cl + dl; - return lo >>> 0; -} -exports.sum64_4_lo = sum64_4_lo; - -function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - lo = (lo + el) >>> 0; - carry += lo < el ? 1 : 0; - - var hi = ah + bh + ch + dh + eh + carry; - return hi >>> 0; -} -exports.sum64_5_hi = sum64_5_hi; - -function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var lo = al + bl + cl + dl + el; - - return lo >>> 0; -} -exports.sum64_5_lo = sum64_5_lo; - -function rotr64_hi(ah, al, num) { - var r = (al << (32 - num)) | (ah >>> num); - return r >>> 0; -} -exports.rotr64_hi = rotr64_hi; - -function rotr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.rotr64_lo = rotr64_lo; - -function shr64_hi(ah, al, num) { - return ah >>> num; -} -exports.shr64_hi = shr64_hi; - -function shr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.shr64_lo = shr64_lo; - -},{"inherits":32,"minimalistic-assert":34}],32:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],33:[function(require,module,exports){ -(function (process,global){ -/** - * [js-sha3]{@link https://github.com/emn178/js-sha3} - * - * @version 0.5.7 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2015-2016 - * @license MIT - */ -/*jslint bitwise: true */ -(function () { - 'use strict'; - - var root = typeof window === 'object' ? window : {}; - var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node; - if (NODE_JS) { - root = global; - } - var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports; - var HEX_CHARS = '0123456789abcdef'.split(''); - var SHAKE_PADDING = [31, 7936, 2031616, 520093696]; - var KECCAK_PADDING = [1, 256, 65536, 16777216]; - var PADDING = [6, 1536, 393216, 100663296]; - var SHIFT = [0, 8, 16, 24]; - var RC = [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]; - var BITS = [224, 256, 384, 512]; - var SHAKE_BITS = [128, 256]; - var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array']; - - var createOutputMethod = function (bits, padding, outputType) { - return function (message) { - return new Keccak(bits, padding, bits).update(message)[outputType](); - }; - }; - - var createShakeOutputMethod = function (bits, padding, outputType) { - return function (message, outputBits) { - return new Keccak(bits, padding, outputBits).update(message)[outputType](); - }; - }; - - var createMethod = function (bits, padding) { - var method = createOutputMethod(bits, padding, 'hex'); - method.create = function () { - return new Keccak(bits, padding, bits); - }; - method.update = function (message) { - return method.create().update(message); - }; - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method[type] = createOutputMethod(bits, padding, type); - } - return method; - }; - - var createShakeMethod = function (bits, padding) { - var method = createShakeOutputMethod(bits, padding, 'hex'); - method.create = function (outputBits) { - return new Keccak(bits, padding, outputBits); - }; - method.update = function (message, outputBits) { - return method.create(outputBits).update(message); - }; - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method[type] = createShakeOutputMethod(bits, padding, type); - } - return method; - }; - - var algorithms = [ - {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod}, - {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod}, - {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod} - ]; - - var methods = {}, methodNames = []; - - for (var i = 0; i < algorithms.length; ++i) { - var algorithm = algorithms[i]; - var bits = algorithm.bits; - for (var j = 0; j < bits.length; ++j) { - var methodName = algorithm.name +'_' + bits[j]; - methodNames.push(methodName); - methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding); - } - } - - function Keccak(bits, padding, outputBits) { - this.blocks = []; - this.s = []; - this.padding = padding; - this.outputBits = outputBits; - this.reset = true; - this.block = 0; - this.start = 0; - this.blockCount = (1600 - (bits << 1)) >> 5; - this.byteCount = this.blockCount << 2; - this.outputBlocks = outputBits >> 5; - this.extraBytes = (outputBits & 31) >> 3; - - for (var i = 0; i < 50; ++i) { - this.s[i] = 0; - } - } - - Keccak.prototype.update = function (message) { - var notString = typeof message !== 'string'; - if (notString && message.constructor === ArrayBuffer) { - message = new Uint8Array(message); - } - var length = message.length, blocks = this.blocks, byteCount = this.byteCount, - blockCount = this.blockCount, index = 0, s = this.s, i, code; - - while (index < length) { - if (this.reset) { - this.reset = false; - blocks[0] = this.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (notString) { - for (i = this.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = this.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - this.lastByteIndex = i; - if (i >= byteCount) { - this.start = i - byteCount; - this.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - this.reset = true; - } else { - this.start = i; - } - } - return this; - }; - - Keccak.prototype.finalize = function () { - var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s; - blocks[i >> 2] |= this.padding[i & 3]; - if (this.lastByteIndex === this.byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - }; - - Keccak.prototype.toString = Keccak.prototype.hex = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var hex = '', block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + - HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + - HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + - HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - if (extraBytes) { - block = s[i]; - if (extraBytes > 0) { - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F]; - } - if (extraBytes > 1) { - hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F]; - } - if (extraBytes > 2) { - hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F]; - } - } - return hex; - }; - - Keccak.prototype.arrayBuffer = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var bytes = this.outputBits >> 3; - var buffer; - if (extraBytes) { - buffer = new ArrayBuffer((outputBlocks + 1) << 2); - } else { - buffer = new ArrayBuffer(bytes); - } - var array = new Uint32Array(buffer); - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - array[j] = s[i]; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - array[i] = s[i]; - buffer = buffer.slice(0, bytes); - } - return buffer; - }; - - Keccak.prototype.buffer = Keccak.prototype.arrayBuffer; - - Keccak.prototype.digest = Keccak.prototype.array = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var array = [], offset, block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - offset = j << 2; - block = s[i]; - array[offset] = block & 0xFF; - array[offset + 1] = (block >> 8) & 0xFF; - array[offset + 2] = (block >> 16) & 0xFF; - array[offset + 3] = (block >> 24) & 0xFF; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - offset = j << 2; - block = s[i]; - if (extraBytes > 0) { - array[offset] = block & 0xFF; - } - if (extraBytes > 1) { - array[offset + 1] = (block >> 8) & 0xFF; - } - if (extraBytes > 2) { - array[offset + 2] = (block >> 16) & 0xFF; - } - } - return array; - }; - - var f = function (s) { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } - }; - - if (COMMON_JS) { - module.exports = methods; - } else { - for (var i = 0; i < methodNames.length; ++i) { - root[methodNames[i]] = methods[methodNames[i]]; - } - } -})(); - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":35}],34:[function(require,module,exports){ -module.exports = assert; - -function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -} - -assert.equal = function assertEqual(l, r, msg) { - if (l != r) - throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); -}; - -},{}],35:[function(require,module,exports){ -module.exports = { }; -},{}],36:[function(require,module,exports){ -(function (setImmediate){ -"use strict"; - -(function(root) { - var MAX_VALUE = 0x7fffffff; - - // The SHA256 and PBKDF2 implementation are from scrypt-async-js: - // See: https://github.com/dchest/scrypt-async-js - function SHA256(m) { - var K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, - 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, - 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, - 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, - 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, - 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, - 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, - 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, - 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, - 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - ]; - - var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a; - var h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; - var w = new Array(64); - - function blocks(p) { - var off = 0, len = p.length; - while (len >= 64) { - var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2; - - for (i = 0; i < 16; i++) { - j = off + i*4; - w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) | - ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff); - } - - for (i = 16; i < 64; i++) { - u = w[i-2]; - t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10); - - u = w[i-15]; - t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3); - - w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0; - } - - for (i = 0; i < 64; i++) { - t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^ - ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) + - ((h + ((K[i] + w[i]) | 0)) | 0)) | 0; - - t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^ - ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - h0 = (h0 + a) | 0; - h1 = (h1 + b) | 0; - h2 = (h2 + c) | 0; - h3 = (h3 + d) | 0; - h4 = (h4 + e) | 0; - h5 = (h5 + f) | 0; - h6 = (h6 + g) | 0; - h7 = (h7 + h) | 0; - - off += 64; - len -= 64; - } - } - - blocks(m); - - var i, bytesLeft = m.length % 64, - bitLenHi = (m.length / 0x20000000) | 0, - bitLenLo = m.length << 3, - numZeros = (bytesLeft < 56) ? 56 : 120, - p = m.slice(m.length - bytesLeft, m.length); - - p.push(0x80); - for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); } - p.push((bitLenHi>>>24) & 0xff); - p.push((bitLenHi>>>16) & 0xff); - p.push((bitLenHi>>>8) & 0xff); - p.push((bitLenHi>>>0) & 0xff); - p.push((bitLenLo>>>24) & 0xff); - p.push((bitLenLo>>>16) & 0xff); - p.push((bitLenLo>>>8) & 0xff); - p.push((bitLenLo>>>0) & 0xff); - - blocks(p); - - return [ - (h0>>>24) & 0xff, (h0>>>16) & 0xff, (h0>>>8) & 0xff, (h0>>>0) & 0xff, - (h1>>>24) & 0xff, (h1>>>16) & 0xff, (h1>>>8) & 0xff, (h1>>>0) & 0xff, - (h2>>>24) & 0xff, (h2>>>16) & 0xff, (h2>>>8) & 0xff, (h2>>>0) & 0xff, - (h3>>>24) & 0xff, (h3>>>16) & 0xff, (h3>>>8) & 0xff, (h3>>>0) & 0xff, - (h4>>>24) & 0xff, (h4>>>16) & 0xff, (h4>>>8) & 0xff, (h4>>>0) & 0xff, - (h5>>>24) & 0xff, (h5>>>16) & 0xff, (h5>>>8) & 0xff, (h5>>>0) & 0xff, - (h6>>>24) & 0xff, (h6>>>16) & 0xff, (h6>>>8) & 0xff, (h6>>>0) & 0xff, - (h7>>>24) & 0xff, (h7>>>16) & 0xff, (h7>>>8) & 0xff, (h7>>>0) & 0xff - ]; - } - - function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) { - // compress password if it's longer than hash block length - password = password.length <= 64 ? password : SHA256(password); - - var i; - var innerLen = 64 + salt.length + 4; - var inner = new Array(innerLen); - var outerKey = new Array(64); - var dk = []; - - // inner = (password ^ ipad) || salt || counter - for (i = 0; i < 64; i++) inner[i] = 0x36; - for (i = 0; i < password.length; i++) inner[i] ^= password[i]; - for (i = 0; i < salt.length; i++) inner[64+i] = salt[i]; - for (i = innerLen - 4; i < innerLen; i++) inner[i] = 0; - - // outerKey = password ^ opad - for (i = 0; i < 64; i++) outerKey[i] = 0x5c; - for (i = 0; i < password.length; i++) outerKey[i] ^= password[i]; - - // increments counter inside inner - function incrementCounter() { - for (var i = innerLen-1; i >= innerLen-4; i--) { - inner[i]++; - if (inner[i] <= 0xff) return; - inner[i] = 0; - } - } - - // output blocks = SHA256(outerKey || SHA256(inner)) ... - while (dkLen >= 32) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner)))); - dkLen -= 32; - } - if (dkLen > 0) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen)); - } - - return dk; - } - - // The following is an adaptation of scryptsy - // See: https://www.npmjs.com/package/scryptsy - function blockmix_salsa8(BY, Yi, r, x, _X) { - var i; - - arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16); - for (i = 0; i < 2 * r; i++) { - blockxor(BY, i * 16, _X, 16); - salsa20_8(_X, x); - arraycopy(_X, 0, BY, Yi + (i * 16), 16); - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16); - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16); - } - } - - function R(a, b) { - return (a << b) | (a >>> (32 - b)); - } - - function salsa20_8(B, x) { - arraycopy(B, 0, x, 0, 16); - - for (var i = 8; i > 0; i -= 2) { - x[ 4] ^= R(x[ 0] + x[12], 7); - x[ 8] ^= R(x[ 4] + x[ 0], 9); - x[12] ^= R(x[ 8] + x[ 4], 13); - x[ 0] ^= R(x[12] + x[ 8], 18); - x[ 9] ^= R(x[ 5] + x[ 1], 7); - x[13] ^= R(x[ 9] + x[ 5], 9); - x[ 1] ^= R(x[13] + x[ 9], 13); - x[ 5] ^= R(x[ 1] + x[13], 18); - x[14] ^= R(x[10] + x[ 6], 7); - x[ 2] ^= R(x[14] + x[10], 9); - x[ 6] ^= R(x[ 2] + x[14], 13); - x[10] ^= R(x[ 6] + x[ 2], 18); - x[ 3] ^= R(x[15] + x[11], 7); - x[ 7] ^= R(x[ 3] + x[15], 9); - x[11] ^= R(x[ 7] + x[ 3], 13); - x[15] ^= R(x[11] + x[ 7], 18); - x[ 1] ^= R(x[ 0] + x[ 3], 7); - x[ 2] ^= R(x[ 1] + x[ 0], 9); - x[ 3] ^= R(x[ 2] + x[ 1], 13); - x[ 0] ^= R(x[ 3] + x[ 2], 18); - x[ 6] ^= R(x[ 5] + x[ 4], 7); - x[ 7] ^= R(x[ 6] + x[ 5], 9); - x[ 4] ^= R(x[ 7] + x[ 6], 13); - x[ 5] ^= R(x[ 4] + x[ 7], 18); - x[11] ^= R(x[10] + x[ 9], 7); - x[ 8] ^= R(x[11] + x[10], 9); - x[ 9] ^= R(x[ 8] + x[11], 13); - x[10] ^= R(x[ 9] + x[ 8], 18); - x[12] ^= R(x[15] + x[14], 7); - x[13] ^= R(x[12] + x[15], 9); - x[14] ^= R(x[13] + x[12], 13); - x[15] ^= R(x[14] + x[13], 18); - } - - for (i = 0; i < 16; ++i) { - B[i] += x[i]; - } - } - - // naive approach... going back to loop unrolling may yield additional performance - function blockxor(S, Si, D, len) { - for (var i = 0; i < len; i++) { - D[i] ^= S[Si + i] - } - } - - function arraycopy(src, srcPos, dest, destPos, length) { - while (length--) { - dest[destPos++] = src[srcPos++]; - } - } - - function checkBufferish(o) { - if (!o || typeof(o.length) !== 'number') { - return false; - } - for (var i = 0; i < o.length; i++) { - if (typeof(o[i]) !== 'number') { return false; } - - var v = parseInt(o[i]); - if (v != o[i] || v < 0 || v >= 256) { - return false; - } - } - return true; - } - - function ensureInteger(value, name) { - var intValue = parseInt(value); - if (value != intValue) { throw new Error('invalid ' + name); } - return intValue; - } - - // N = Cpu cost, r = Memory cost, p = parallelization cost - // callback(error, progress, key) - function scrypt(password, salt, N, r, p, dkLen, callback) { - - if (!callback) { throw new Error('missing callback'); } - - N = ensureInteger(N, 'N'); - r = ensureInteger(r, 'r'); - p = ensureInteger(p, 'p'); - - dkLen = ensureInteger(dkLen, 'dkLen'); - - if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); } - - if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); } - if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); } - - if (!checkBufferish(password)) { - throw new Error('password must be an array or buffer'); - } - - if (!checkBufferish(salt)) { - throw new Error('salt must be an array or buffer'); - } - - var b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r); - var B = new Uint32Array(p * 32 * r) - for (var i = 0; i < B.length; i++) { - var j = i * 4; - B[i] = ((b[j + 3] & 0xff) << 24) | - ((b[j + 2] & 0xff) << 16) | - ((b[j + 1] & 0xff) << 8) | - ((b[j + 0] & 0xff) << 0); - } - - var XY = new Uint32Array(64 * r); - var V = new Uint32Array(32 * r * N); - - var Yi = 32 * r; - - // scratch space - var x = new Uint32Array(16); // salsa20_8 - var _X = new Uint32Array(16); // blockmix_salsa8 - - var totalOps = p * N * 2; - var currentOp = 0; - var lastPercent10 = null; - - // Set this to true to abandon the scrypt on the next step - var stop = false; - - // State information - var state = 0; - var i0 = 0, i1; - var Bi; - - // How many blockmix_salsa8 can we do per step? - var limit = parseInt(1000 / r); - - // Trick from scrypt-async; if there is a setImmediate shim in place, use it - var nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout; - - // This is really all I changed; making scryptsy a state machine so we occasionally - // stop and give other evnts on the evnt loop a chance to run. ~RicMoo - var incrementalSMix = function() { - if (stop) { - return callback(new Error('cancelled'), currentOp / totalOps); - } - - switch (state) { - case 0: - // for (var i = 0; i < p; i++)... - Bi = i0 * 32 * r; - - arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1 - - state = 1; // Move to ROMix 2 - i1 = 0; - - // Fall through - - case 1: - - // Run up to 1000 steps of the first inner smix loop - var steps = N - i1; - if (steps > limit) { steps = limit; } - for (var i = 0; i < steps; i++) { // ROMix - 2 - arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3 - blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4 - } - - // for (var i = 0; i < N; i++) - i1 += steps; - currentOp += steps; - - // Call the callback with the progress (optionally stopping us) - var percent10 = parseInt(1000 * currentOp / totalOps); - if (percent10 !== lastPercent10) { - stop = callback(null, currentOp / totalOps); - if (stop) { break; } - lastPercent10 = percent10; - } - - if (i1 < N) { - break; - } - - i1 = 0; // Move to ROMix 6 - state = 2; - - // Fall through - - case 2: - - // Run up to 1000 steps of the second inner smix loop - var steps = N - i1; - if (steps > limit) { steps = limit; } - for (var i = 0; i < steps; i++) { // ROMix - 6 - var offset = (2 * r - 1) * 16; // ROMix - 7 - var j = XY[offset] & (N - 1); - blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner) - blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer) - } - - // for (var i = 0; i < N; i++)... - i1 += steps; - currentOp += steps; - - // Call the callback with the progress (optionally stopping us) - var percent10 = parseInt(1000 * currentOp / totalOps); - if (percent10 !== lastPercent10) { - stop = callback(null, currentOp / totalOps); - if (stop) { break; } - lastPercent10 = percent10; - } - - if (i1 < N) { - break; - } - - arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10 - - // for (var i = 0; i < p; i++)... - i0++; - if (i0 < p) { - state = 0; - break; - } - - b = []; - for (var i = 0; i < B.length; i++) { - b.push((B[i] >> 0) & 0xff); - b.push((B[i] >> 8) & 0xff); - b.push((B[i] >> 16) & 0xff); - b.push((B[i] >> 24) & 0xff); - } - - var derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen); - - // Done; don't break (which would reschedule) - return callback(null, 1.0, derivedKey); - } - - // Schedule the next steps - nextTick(incrementalSMix); - } - - // Bootstrap the incremental smix - incrementalSMix(); - } - - // node.js - if (typeof(exports) !== 'undefined') { - module.exports = scrypt; - - // RequireJS/AMD - // http://www.requirejs.org/docs/api.html - // https://github.com/amdjs/amdjs-api/wiki/AMD - } else if (typeof(define) === 'function' && define.amd) { - define(scrypt); - - // Web Browsers - } else if (root) { - - // If there was an existing library "scrypt", make sure it is still available - if (root.scrypt) { - root._scrypt = root.scrypt; - } - - root.scrypt = scrypt; - } - -})(this); - -}).call(this,require("timers").setImmediate) -},{"timers":38}],37:[function(require,module,exports){ -(function (process,global){ -(function (global, undefined) { - "use strict"; - - if (global.setImmediate) { - return; - } - - var nextHandle = 1; // Spec says greater than zero - var tasksByHandle = {}; - var currentlyRunningATask = false; - var doc = global.document; - var setImmediate; - - function addFromSetImmediateArguments(args) { - tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args); - return nextHandle++; - } - - // This function accepts the same arguments as setImmediate, but - // returns a function that requires no arguments. - function partiallyApplied(handler) { - var args = [].slice.call(arguments, 1); - return function() { - if (typeof handler === "function") { - handler.apply(undefined, args); - } else { - (new Function("" + handler))(); - } - }; - } - - function runIfPresent(handle) { - // From the spec: "Wait until any invocations of this algorithm started before this one have completed." - // So if we're currently running a task, we'll need to delay this invocation. - if (currentlyRunningATask) { - // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a - // "too much recursion" error. - setTimeout(partiallyApplied(runIfPresent, handle), 0); - } else { - var task = tasksByHandle[handle]; - if (task) { - currentlyRunningATask = true; - try { - task(); - } finally { - clearImmediate(handle); - currentlyRunningATask = false; - } - } - } - } - - function clearImmediate(handle) { - delete tasksByHandle[handle]; - } - - function installNextTickImplementation() { - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - process.nextTick(partiallyApplied(runIfPresent, handle)); - return handle; - }; - } - - function canUsePostMessage() { - // The test against `importScripts` prevents this implementation from being installed inside a web worker, - // where `global.postMessage` means something completely different and can't be used for this purpose. - if (global.postMessage && !global.importScripts) { - var postMessageIsAsynchronous = true; - var oldOnMessage = global.onmessage; - global.onmessage = function() { - postMessageIsAsynchronous = false; - }; - global.postMessage("", "*"); - global.onmessage = oldOnMessage; - return postMessageIsAsynchronous; - } - } - - function installPostMessageImplementation() { - // Installs an event handler on `global` for the `message` event: see - // * https://developer.mozilla.org/en/DOM/window.postMessage - // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages - - var messagePrefix = "setImmediate$" + Math.random() + "$"; - var onGlobalMessage = function(event) { - if (event.source === global && - typeof event.data === "string" && - event.data.indexOf(messagePrefix) === 0) { - runIfPresent(+event.data.slice(messagePrefix.length)); - } - }; - - if (global.addEventListener) { - global.addEventListener("message", onGlobalMessage, false); - } else { - global.attachEvent("onmessage", onGlobalMessage); - } - - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - global.postMessage(messagePrefix + handle, "*"); - return handle; - }; - } - - function installMessageChannelImplementation() { - var channel = new MessageChannel(); - channel.port1.onmessage = function(event) { - var handle = event.data; - runIfPresent(handle); - }; - - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - channel.port2.postMessage(handle); - return handle; - }; - } - - function installReadyStateChangeImplementation() { - var html = doc.documentElement; - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - // Create a - - - - -
- - - - - - diff --git a/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/node-test.js b/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/node-test.js deleted file mode 100644 index 864f9b28..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/node-test.js +++ /dev/null @@ -1,60 +0,0 @@ -expect = require('expect.js'); - -// Node.js env -var sha3 = require('../src/sha3.js'); -keccak_512 = sha3.keccak_512; -keccak_384 = sha3.keccak_384; -keccak_256 = sha3.keccak_256; -keccak_224 = sha3.keccak_224; -sha3_512 = sha3.sha3_512; -sha3_384 = sha3.sha3_384; -sha3_256 = sha3.sha3_256; -sha3_224 = sha3.sha3_224; -shake_128 = sha3.shake_128; -shake_256 = sha3.shake_256; -require('./test.js'); -require('./test-shake.js'); - -delete require.cache[require.resolve('../src/sha3.js')]; -delete require.cache[require.resolve('./test.js')]; -delete require.cache[require.resolve('./test-shake.js')]; - -// Webpack browser env -JS_SHA3_NO_NODE_JS = true; -window = global; -expect = require('expect.js'); -var sha3 = require('../src/sha3.js'); -keccak_512 = sha3.keccak_512; -keccak_384 = sha3.keccak_384; -keccak_256 = sha3.keccak_256; -keccak_224 = sha3.keccak_224; -sha3_512 = sha3.sha3_512; -sha3_384 = sha3.sha3_384; -sha3_256 = sha3.sha3_256; -sha3_224 = sha3.sha3_224; -shake_128 = sha3.shake_128; -shake_256 = sha3.shake_256; -require('./test.js'); -require('./test-shake.js'); - -delete require.cache[require.resolve('../src/sha3.js')]; -delete require.cache[require.resolve('./test.js')]; -delete require.cache[require.resolve('./test-shake.js')]; -sha3_512 = null; -sha3_384 = null; -sha3_256 = null; -sha3_224 = null; -keccak_512 = null; -keccak_384 = null; -keccak_256 = null; -keccak_224 = null; -shake_128 = null; -shake_256 = null; - -// browser env -JS_SHA3_NO_NODE_JS = true; -JS_SHA3_NO_COMMON_JS = true; -window = global; -require('../src/sha3.js'); -require('./test.js'); -require('./test-shake.js'); diff --git a/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/test-shake.js b/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/test-shake.js deleted file mode 100644 index dbdb910b..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/test-shake.js +++ /dev/null @@ -1,106 +0,0 @@ -(function (shake_256, shake_128) { - describe('#shake_128', function () { - context('with 256 output', function () { - it('should be equal', function () { - expect(shake_128('', 256)).to.be('7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26'); - expect(shake_128('The quick brown fox jumps over the lazy dog', 256)).to.be('f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e'); - expect(shake_128('The quick brown fox jumps over the lazy dof', 256)).to.be('853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c'); - }); - }); - - context('with 8 output', function () { - it('should be equal', function () { - expect(shake_128('', 8)).to.be('7f'); - expect(shake_128('The quick brown fox jumps over the lazy dog', 8)).to.be('f4'); - expect(shake_128('The quick brown fox jumps over the lazy dof', 8)).to.be('85'); - }); - }); - - context('with 1368 output', function () { - it('should be equal', function () { - expect(shake_128('AAA', 1368)).to.be('15e0fe495a05b74f9fd3eaa8a898a623488220dcbf9ba2f12d23d278b7cecfa4a5e4b8d0fccb0fdbc9e51cd0b4344a32a83f0ba40a514a7b86a77c854c61b836192849da9214c43c4f8bc09ec7a76af92b2fc56e4952024be65b1a47835e0bc014733b24d0e31197ca648f831caebbfd8a5b237ae6bdc9d6cc803a2c5e57dd9346eecf972bd85450f18a413dc6239982e1eb6e0c6df856385c9597d0320edb40b6fe60a74f07524015ad36'); - expect(shake_128('AAA', 1376)).to.be('15e0fe495a05b74f9fd3eaa8a898a623488220dcbf9ba2f12d23d278b7cecfa4a5e4b8d0fccb0fdbc9e51cd0b4344a32a83f0ba40a514a7b86a77c854c61b836192849da9214c43c4f8bc09ec7a76af92b2fc56e4952024be65b1a47835e0bc014733b24d0e31197ca648f831caebbfd8a5b237ae6bdc9d6cc803a2c5e57dd9346eecf972bd85450f18a413dc6239982e1eb6e0c6df856385c9597d0320edb40b6fe60a74f07524015ad36b6'); - }); - }); - - context('with more output', function () { - it('should be equal', function () { - expect(shake_128('', 16)).to.be('7f9c'); - expect(shake_128('', 24)).to.be('7f9c2b'); - expect(shake_128.array('', 16)).to.eql([0x7f, 0x9c]); - expect(shake_128.array('', 24)).to.eql([0x7f, 0x9c, 0x2b]); - }); - }); - - context('with 8 output ArrayBuffer', function () { - it('should be equal', function () { - expect(shake_128.buffer('', 8).toHexString()).to.be('7f'); - expect(shake_128.buffer('The quick brown fox jumps over the lazy dog', 8).toHexString()).to.be('f4'); - expect(shake_128.buffer('The quick brown fox jumps over the lazy dof', 8).toHexString()).to.be('85'); - }); - }); - - context('#update', function () { - it('should be equal', function () { - expect(shake_128.update('', 256).hex()).to.be('7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26'); - expect(shake_128.update('The quick brown fox ', 256).update('jumps over the lazy dog').hex()).to.be('f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e'); - }); - }); - }); - - describe('#shake_256', function () { - context('with 512 output', function () { - it('should be equal', function () { - expect(shake_256('', 512)).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be'); - }); - }); - context('with 8 output', function () { - it('should be equal', function () { - expect(shake_256('', 8)).to.be('46'); - }); - }); - - context('with 1112 output', function () { - it('should be equal', function () { - expect(shake_256('AAA', 1112)).to.be('419614c8b247ee5e9f4a540f7aaa5ca5b44b119f47ab7f494c05095ae5a61ab6b62c84b8b27888813ce8a4d4dab3ed7617c6bab643aa01bb1b113e6d48c3e1eeb73e96f96ffaf12e0c36b190404982b856087acfcb467535e17152e5c15a4d62a18a15d8fe434b3a7274362b0d46b627df1e011a1d037e161d5b540df7ebadab351fb730904daa9a4f40fd'); - expect(shake_256('AAA', 1120)).to.be('419614c8b247ee5e9f4a540f7aaa5ca5b44b119f47ab7f494c05095ae5a61ab6b62c84b8b27888813ce8a4d4dab3ed7617c6bab643aa01bb1b113e6d48c3e1eeb73e96f96ffaf12e0c36b190404982b856087acfcb467535e17152e5c15a4d62a18a15d8fe434b3a7274362b0d46b627df1e011a1d037e161d5b540df7ebadab351fb730904daa9a4f40fdb5'); - }); - }); - - context('with 4100 output', function () { - it('should be equal', function () { - // https://raw.githubusercontent.com/gvanas/KeccakCodePackage/master/TestVectors/ShortMsgKAT_SHAKE256.txt - // Len = 0, Msg = 00 - expect(shake_256('', 4100)).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957692cc7edd0b45ae3dc07223c8e92937bef84bc0eab862853349ec75546f58fb7c2775c38462c5010d846c185c15111e595522a6bcd16cf86f3d122109e3b1fdd943b6aec468a2d621a7c06c6a957c62b54dafc3be87567d677231395f6147293b68ceab7a9e0c58d864e8efde4e1b9a46cbe854713672f5caaae314ed9083dab4b099f8e300f01b8650f1f4b1d8fcf3f3cb53fb8e9eb2ea203bdc970f50ae55428a91f7f53ac266b28419c3778a15fd248d339ede785fb7f5a1aaa96d313eacc890936c173cdcd0fab882c45755feb3aed96d477ff96390bf9a66d1368b208e21f7c10d04a3dbd4e360633e5db4b602601c14cea737db3dcf722632cc77851cbdde2aaf0a33a07b373445df490cc8fc1e4160ff118378f11f0477de055a81a9eda57a4a2cfb0c83929d310912f729ec6cfa36c6ac6a75837143045d791cc85eff5b21932f23861bcf23a52b5da67eaf7baae0f5fb1369db78f3ac45f8c4ac5671d85735cdddb09d2b1e34a1fc066ff4a162cb263d6541274ae2fcc865f618abe27c124cd8b074ccd516301b91875824d09958f341ef274bdab0bae316339894304e35877b0c28a9b1fd166c796b9cc258a064a8f57e27f2a'); - - // Len = 2040 - // Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 - expect(shake_256([0x3A,0x3A,0x81,0x9C,0x48,0xEF,0xDE,0x2A,0xD9,0x14,0xFB,0xF0,0x0E,0x18,0xAB,0x6B,0xC4,0xF1,0x45,0x13,0xAB,0x27,0xD0,0xC1,0x78,0xA1,0x88,0xB6,0x14,0x31,0xE7,0xF5,0x62,0x3C,0xB6,0x6B,0x23,0x34,0x67,0x75,0xD3,0x86,0xB5,0x0E,0x98,0x2C,0x49,0x3A,0xDB,0xBF,0xC5,0x4B,0x9A,0x3C,0xD3,0x83,0x38,0x23,0x36,0xA1,0xA0,0xB2,0x15,0x0A,0x15,0x35,0x8F,0x33,0x6D,0x03,0xAE,0x18,0xF6,0x66,0xC7,0x57,0x3D,0x55,0xC4,0xFD,0x18,0x1C,0x29,0xE6,0xCC,0xFD,0xE6,0x3E,0xA3,0x5F,0x0A,0xDF,0x58,0x85,0xCF,0xC0,0xA3,0xD8,0x4A,0x2B,0x2E,0x4D,0xD2,0x44,0x96,0xDB,0x78,0x9E,0x66,0x31,0x70,0xCE,0xF7,0x47,0x98,0xAA,0x1B,0xBC,0xD4,0x57,0x4E,0xA0,0xBB,0xA4,0x04,0x89,0xD7,0x64,0xB2,0xF8,0x3A,0xAD,0xC6,0x6B,0x14,0x8B,0x4A,0x0C,0xD9,0x52,0x46,0xC1,0x27,0xD5,0x87,0x1C,0x4F,0x11,0x41,0x86,0x90,0xA5,0xDD,0xF0,0x12,0x46,0xA0,0xC8,0x0A,0x43,0xC7,0x00,0x88,0xB6,0x18,0x36,0x39,0xDC,0xFD,0xA4,0x12,0x5B,0xD1,0x13,0xA8,0xF4,0x9E,0xE2,0x3E,0xD3,0x06,0xFA,0xAC,0x57,0x6C,0x3F,0xB0,0xC1,0xE2,0x56,0x67,0x1D,0x81,0x7F,0xC2,0x53,0x4A,0x52,0xF5,0xB4,0x39,0xF7,0x2E,0x42,0x4D,0xE3,0x76,0xF4,0xC5,0x65,0xCC,0xA8,0x23,0x07,0xDD,0x9E,0xF7,0x6D,0xA5,0xB7,0xC4,0xEB,0x7E,0x08,0x51,0x72,0xE3,0x28,0x80,0x7C,0x02,0xD0,0x11,0xFF,0xBF,0x33,0x78,0x53,0x78,0xD7,0x9D,0xC2,0x66,0xF6,0xA5,0xBE,0x6B,0xB0,0xE4,0xA9,0x2E,0xCE,0xEB,0xAE,0xB1], 4100)).to.be('8a5199b4a7e133e264a86202720655894d48cff344a928cf8347f48379cef347dfc5bcffab99b27b1f89aa2735e23d30088ffa03b9edb02b9635470ab9f1038985d55f9ca774572dd006470ea65145469609f9fa0831bf1ffd842dc24acade27bd9816e3b5bf2876cb112232a0eb4475f1dff9f5c713d9ffd4ccb89ae5607fe35731df06317949eef646e9591cf3be53add6b7dd2b6096e2b3fb06e662ec8b2d77422daad9463cd155204acdbd38e319613f39f99b6dfb35ca9365160066db19835888c2241ff9a731a4acbb5663727aac34a401247fbaa7499e7d5ee5b69d31025e63d04c35c798bca1262d5673a9cf0930b5ad89bd485599dc184528da4790f088ebd170b635d9581632d2ff90db79665ced430089af13c9f21f6d443a818064f17aec9e9c5457001fa8dc6afbadbe3138f388d89d0e6f22f66671255b210754ed63d81dce75ce8f189b534e6d6b3539aa51e837c42df9df59c71e6171cd4902fe1bdc73fb1775b5c754a1ed4ea7f3105fc543ee0418dad256f3f6118ea77114a16c15355b42877a1db2a7df0e155ae1d8670abcec3450f4e2eec9838f895423ef63d261138baaf5d9f104cb5a957aea06c0b9b8c78b0d441796dc0350ddeabb78a33b6f1f9e68ede3d1805c7b7e2cfd54e0fad62f0d8ca67a775dc4546af9096f2edb221db42843d65327861282dc946a0ba01a11863ab2d1dfd16e3973d4'); - }); - }); - - context('with 4100 output ArrayBuffer', function () { - it('should be equal', function () { - // https://raw.githubusercontent.com/gvanas/KeccakCodePackage/master/TestVectors/ShortMsgKAT_SHAKE256.txt - // Len = 0, Msg = 00 - expect(shake_256.buffer('', 4100).toHexString()).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957692cc7edd0b45ae3dc07223c8e92937bef84bc0eab862853349ec75546f58fb7c2775c38462c5010d846c185c15111e595522a6bcd16cf86f3d122109e3b1fdd943b6aec468a2d621a7c06c6a957c62b54dafc3be87567d677231395f6147293b68ceab7a9e0c58d864e8efde4e1b9a46cbe854713672f5caaae314ed9083dab4b099f8e300f01b8650f1f4b1d8fcf3f3cb53fb8e9eb2ea203bdc970f50ae55428a91f7f53ac266b28419c3778a15fd248d339ede785fb7f5a1aaa96d313eacc890936c173cdcd0fab882c45755feb3aed96d477ff96390bf9a66d1368b208e21f7c10d04a3dbd4e360633e5db4b602601c14cea737db3dcf722632cc77851cbdde2aaf0a33a07b373445df490cc8fc1e4160ff118378f11f0477de055a81a9eda57a4a2cfb0c83929d310912f729ec6cfa36c6ac6a75837143045d791cc85eff5b21932f23861bcf23a52b5da67eaf7baae0f5fb1369db78f3ac45f8c4ac5671d85735cdddb09d2b1e34a1fc066ff4a162cb263d6541274ae2fcc865f618abe27c124cd8b074ccd516301b91875824d09958f341ef274bdab0bae316339894304e35877b0c28a9b1fd166c796b9cc258a064a8f57e27f2a'); - - // Len = 2040 - // Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 - expect(shake_256.buffer([0x3A,0x3A,0x81,0x9C,0x48,0xEF,0xDE,0x2A,0xD9,0x14,0xFB,0xF0,0x0E,0x18,0xAB,0x6B,0xC4,0xF1,0x45,0x13,0xAB,0x27,0xD0,0xC1,0x78,0xA1,0x88,0xB6,0x14,0x31,0xE7,0xF5,0x62,0x3C,0xB6,0x6B,0x23,0x34,0x67,0x75,0xD3,0x86,0xB5,0x0E,0x98,0x2C,0x49,0x3A,0xDB,0xBF,0xC5,0x4B,0x9A,0x3C,0xD3,0x83,0x38,0x23,0x36,0xA1,0xA0,0xB2,0x15,0x0A,0x15,0x35,0x8F,0x33,0x6D,0x03,0xAE,0x18,0xF6,0x66,0xC7,0x57,0x3D,0x55,0xC4,0xFD,0x18,0x1C,0x29,0xE6,0xCC,0xFD,0xE6,0x3E,0xA3,0x5F,0x0A,0xDF,0x58,0x85,0xCF,0xC0,0xA3,0xD8,0x4A,0x2B,0x2E,0x4D,0xD2,0x44,0x96,0xDB,0x78,0x9E,0x66,0x31,0x70,0xCE,0xF7,0x47,0x98,0xAA,0x1B,0xBC,0xD4,0x57,0x4E,0xA0,0xBB,0xA4,0x04,0x89,0xD7,0x64,0xB2,0xF8,0x3A,0xAD,0xC6,0x6B,0x14,0x8B,0x4A,0x0C,0xD9,0x52,0x46,0xC1,0x27,0xD5,0x87,0x1C,0x4F,0x11,0x41,0x86,0x90,0xA5,0xDD,0xF0,0x12,0x46,0xA0,0xC8,0x0A,0x43,0xC7,0x00,0x88,0xB6,0x18,0x36,0x39,0xDC,0xFD,0xA4,0x12,0x5B,0xD1,0x13,0xA8,0xF4,0x9E,0xE2,0x3E,0xD3,0x06,0xFA,0xAC,0x57,0x6C,0x3F,0xB0,0xC1,0xE2,0x56,0x67,0x1D,0x81,0x7F,0xC2,0x53,0x4A,0x52,0xF5,0xB4,0x39,0xF7,0x2E,0x42,0x4D,0xE3,0x76,0xF4,0xC5,0x65,0xCC,0xA8,0x23,0x07,0xDD,0x9E,0xF7,0x6D,0xA5,0xB7,0xC4,0xEB,0x7E,0x08,0x51,0x72,0xE3,0x28,0x80,0x7C,0x02,0xD0,0x11,0xFF,0xBF,0x33,0x78,0x53,0x78,0xD7,0x9D,0xC2,0x66,0xF6,0xA5,0xBE,0x6B,0xB0,0xE4,0xA9,0x2E,0xCE,0xEB,0xAE,0xB1], 4100).toHexString()).to.be('8a5199b4a7e133e264a86202720655894d48cff344a928cf8347f48379cef347dfc5bcffab99b27b1f89aa2735e23d30088ffa03b9edb02b9635470ab9f1038985d55f9ca774572dd006470ea65145469609f9fa0831bf1ffd842dc24acade27bd9816e3b5bf2876cb112232a0eb4475f1dff9f5c713d9ffd4ccb89ae5607fe35731df06317949eef646e9591cf3be53add6b7dd2b6096e2b3fb06e662ec8b2d77422daad9463cd155204acdbd38e319613f39f99b6dfb35ca9365160066db19835888c2241ff9a731a4acbb5663727aac34a401247fbaa7499e7d5ee5b69d31025e63d04c35c798bca1262d5673a9cf0930b5ad89bd485599dc184528da4790f088ebd170b635d9581632d2ff90db79665ced430089af13c9f21f6d443a818064f17aec9e9c5457001fa8dc6afbadbe3138f388d89d0e6f22f66671255b210754ed63d81dce75ce8f189b534e6d6b3539aa51e837c42df9df59c71e6171cd4902fe1bdc73fb1775b5c754a1ed4ea7f3105fc543ee0418dad256f3f6118ea77114a16c15355b42877a1db2a7df0e155ae1d8670abcec3450f4e2eec9838f895423ef63d261138baaf5d9f104cb5a957aea06c0b9b8c78b0d441796dc0350ddeabb78a33b6f1f9e68ede3d1805c7b7e2cfd54e0fad62f0d8ca67a775dc4546af9096f2edb221db42843d65327861282dc946a0ba01a11863ab2d1dfd16e3973d4'); - }); - }); - - context('with 4100 output Array', function () { - it('should be equal', function () { - // https://raw.githubusercontent.com/gvanas/KeccakCodePackage/master/TestVectors/ShortMsgKAT_SHAKE256.txt - // Len = 0, Msg = 00 - expect(shake_256.array('', 4100).toHexString()).to.be('46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be141e96616fb13957692cc7edd0b45ae3dc07223c8e92937bef84bc0eab862853349ec75546f58fb7c2775c38462c5010d846c185c15111e595522a6bcd16cf86f3d122109e3b1fdd943b6aec468a2d621a7c06c6a957c62b54dafc3be87567d677231395f6147293b68ceab7a9e0c58d864e8efde4e1b9a46cbe854713672f5caaae314ed9083dab4b099f8e300f01b8650f1f4b1d8fcf3f3cb53fb8e9eb2ea203bdc970f50ae55428a91f7f53ac266b28419c3778a15fd248d339ede785fb7f5a1aaa96d313eacc890936c173cdcd0fab882c45755feb3aed96d477ff96390bf9a66d1368b208e21f7c10d04a3dbd4e360633e5db4b602601c14cea737db3dcf722632cc77851cbdde2aaf0a33a07b373445df490cc8fc1e4160ff118378f11f0477de055a81a9eda57a4a2cfb0c83929d310912f729ec6cfa36c6ac6a75837143045d791cc85eff5b21932f23861bcf23a52b5da67eaf7baae0f5fb1369db78f3ac45f8c4ac5671d85735cdddb09d2b1e34a1fc066ff4a162cb263d6541274ae2fcc865f618abe27c124cd8b074ccd516301b91875824d09958f341ef274bdab0bae316339894304e35877b0c28a9b1fd166c796b9cc258a064a8f57e27f2a'); - - // Len = 2040 - // Msg = 3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1 - expect(shake_256.array([0x3A,0x3A,0x81,0x9C,0x48,0xEF,0xDE,0x2A,0xD9,0x14,0xFB,0xF0,0x0E,0x18,0xAB,0x6B,0xC4,0xF1,0x45,0x13,0xAB,0x27,0xD0,0xC1,0x78,0xA1,0x88,0xB6,0x14,0x31,0xE7,0xF5,0x62,0x3C,0xB6,0x6B,0x23,0x34,0x67,0x75,0xD3,0x86,0xB5,0x0E,0x98,0x2C,0x49,0x3A,0xDB,0xBF,0xC5,0x4B,0x9A,0x3C,0xD3,0x83,0x38,0x23,0x36,0xA1,0xA0,0xB2,0x15,0x0A,0x15,0x35,0x8F,0x33,0x6D,0x03,0xAE,0x18,0xF6,0x66,0xC7,0x57,0x3D,0x55,0xC4,0xFD,0x18,0x1C,0x29,0xE6,0xCC,0xFD,0xE6,0x3E,0xA3,0x5F,0x0A,0xDF,0x58,0x85,0xCF,0xC0,0xA3,0xD8,0x4A,0x2B,0x2E,0x4D,0xD2,0x44,0x96,0xDB,0x78,0x9E,0x66,0x31,0x70,0xCE,0xF7,0x47,0x98,0xAA,0x1B,0xBC,0xD4,0x57,0x4E,0xA0,0xBB,0xA4,0x04,0x89,0xD7,0x64,0xB2,0xF8,0x3A,0xAD,0xC6,0x6B,0x14,0x8B,0x4A,0x0C,0xD9,0x52,0x46,0xC1,0x27,0xD5,0x87,0x1C,0x4F,0x11,0x41,0x86,0x90,0xA5,0xDD,0xF0,0x12,0x46,0xA0,0xC8,0x0A,0x43,0xC7,0x00,0x88,0xB6,0x18,0x36,0x39,0xDC,0xFD,0xA4,0x12,0x5B,0xD1,0x13,0xA8,0xF4,0x9E,0xE2,0x3E,0xD3,0x06,0xFA,0xAC,0x57,0x6C,0x3F,0xB0,0xC1,0xE2,0x56,0x67,0x1D,0x81,0x7F,0xC2,0x53,0x4A,0x52,0xF5,0xB4,0x39,0xF7,0x2E,0x42,0x4D,0xE3,0x76,0xF4,0xC5,0x65,0xCC,0xA8,0x23,0x07,0xDD,0x9E,0xF7,0x6D,0xA5,0xB7,0xC4,0xEB,0x7E,0x08,0x51,0x72,0xE3,0x28,0x80,0x7C,0x02,0xD0,0x11,0xFF,0xBF,0x33,0x78,0x53,0x78,0xD7,0x9D,0xC2,0x66,0xF6,0xA5,0xBE,0x6B,0xB0,0xE4,0xA9,0x2E,0xCE,0xEB,0xAE,0xB1], 4100).toHexString()).to.be('8a5199b4a7e133e264a86202720655894d48cff344a928cf8347f48379cef347dfc5bcffab99b27b1f89aa2735e23d30088ffa03b9edb02b9635470ab9f1038985d55f9ca774572dd006470ea65145469609f9fa0831bf1ffd842dc24acade27bd9816e3b5bf2876cb112232a0eb4475f1dff9f5c713d9ffd4ccb89ae5607fe35731df06317949eef646e9591cf3be53add6b7dd2b6096e2b3fb06e662ec8b2d77422daad9463cd155204acdbd38e319613f39f99b6dfb35ca9365160066db19835888c2241ff9a731a4acbb5663727aac34a401247fbaa7499e7d5ee5b69d31025e63d04c35c798bca1262d5673a9cf0930b5ad89bd485599dc184528da4790f088ebd170b635d9581632d2ff90db79665ced430089af13c9f21f6d443a818064f17aec9e9c5457001fa8dc6afbadbe3138f388d89d0e6f22f66671255b210754ed63d81dce75ce8f189b534e6d6b3539aa51e837c42df9df59c71e6171cd4902fe1bdc73fb1775b5c754a1ed4ea7f3105fc543ee0418dad256f3f6118ea77114a16c15355b42877a1db2a7df0e155ae1d8670abcec3450f4e2eec9838f895423ef63d261138baaf5d9f104cb5a957aea06c0b9b8c78b0d441796dc0350ddeabb78a33b6f1f9e68ede3d1805c7b7e2cfd54e0fad62f0d8ca67a775dc4546af9096f2edb221db42843d65327861282dc946a0ba01a11863ab2d1dfd16e3973d4'); - }); - }); - }); -})(shake_256, shake_128); diff --git a/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/test.js b/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/test.js deleted file mode 100644 index 47940be0..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/js-sha3/tests/test.js +++ /dev/null @@ -1,316 +0,0 @@ -(function (sha3_512, sha3_384, sha3_256, sha3_224, keccak_512, keccak_384, keccak_256, keccak_224) { - Array.prototype.toHexString = ArrayBuffer.prototype.toHexString = function () { - var array = new Uint8Array(this); - var hex = ''; - for (var i = 0; i < array.length; ++i) { - var c = array[i].toString('16'); - hex += c.length == 1 ? '0' + c : c; - } - return hex; - }; - - function runTestCases(methods, testCases) { - methods.forEach(function (method) { - describe('#' + method.name, function () { - var methodTestCases = testCases[method.name]; - for (var testCaseName in methodTestCases) { - (function (testCaseName) { - var testCase = methodTestCases[testCaseName]; - context('when ' + testCaseName, function () { - for (var hash in testCase) { - (function (message, hash) { - it('should be equal', function () { - expect(method.call(message)).to.be(hash); - }); - })(testCase[hash], hash); - } - }); - })(testCaseName); - } - }); - }); - } - - var methods = [ - { - name: 'sha3_512', - call: sha3_512 - }, - { - name: 'sha3_384', - call: sha3_384 - }, - { - name: 'sha3_256', - call: sha3_256 - }, - { - name: 'sha3_224', - call: sha3_224 - }, - { - name: 'keccak_512', - call: keccak_512 - }, - { - name: 'keccak_384', - call: keccak_384 - }, - { - name: 'keccak_256', - call: keccak_256 - }, - { - name: 'keccak_224', - call: keccak_224 - } - ]; - - var testCases = { - sha3_512: { - 'ascii': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': '', - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': 'The quick brown fox jumps over the lazy dog', - '18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '4f8bcf3a60d3ee56a0bd405c3e6bb37dac44b6781c41bf76c91a5d8e621d472b7b13b8806d88914af3d97585df996363ebe17566d5dfeb6f4884a7949ba8263d': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '059bbe2efc50cc30e4d8ec5a96be697e2108fcbf9193e1296192eddabc13b143c0120d059399a13d0d42651efe23a6c1ce2d1efb576c5b207fa2516050505af7': '中文', - '35dfaf82d2ce4be79393dc90e327b4dd15b1c150d8a30f59d8d1b42ca4fc3c87f50b77da36acccf9dc76494d07fc57cfcc9470e627c38f95bce4deab311b87e0': 'aécio', - '33ef254289f36527c93cd203ef1973aec1eff7475c23fa842c3092b0d30965d13b0805c61d0aa92c51245c56bfe26978c35c00f26eb558a043982043ee8b178c': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'accb127bb24b0ffbb7550dc637222d2f78538a8a186c98bc5efdad685b9b396639f34148bf0b94ed470f0e9c3665dc3b4c1cb321bacd32dd317a646295e073d9': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '5b70eaad083f1b86fd535b6812e02f5f2876a4bd8b43aede8d62ae71bb1743ebd919dc41be56d73ba45b67b2876ff215d0575788560e7b0c92b879f8a2fc3111': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - }, - 'special length': { - 'bce9da5b408846edd5bec9f26c2dee9bd835215c3f2b3876197067d87bc4d1af0cd97f94fda59761a0d804fe82383be2c6c4886fbb82e005fcf899449029f221' :'012345678901234567890123456789012345678901234567890123456789012345678901', - '8bdcb85e6b52c29fafac0d3daf65492f2e3499e066da1a095a65eb1144849a26b2790a8b39c2a7fb747456f749391d953841a61cb13289f9806f04981c180a86' :'01234567890123456789012345678901234567890123456789012345678901234567890' - }, - 'Array': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': [], - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': [84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103] - }, - 'Uint8Array': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': new Uint8Array([]), - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]) - }, - 'ArrayBuffer': { - 'a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26': new ArrayBuffer(0), - '01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450': new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]).buffer - } - }, - sha3_384: { - 'ascii': { - '0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004': '', - '7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41': 'The quick brown fox jumps over the lazy dog', - '1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'ca6b121a6060bc85de05e5a8d70577838fad2481b092c8263d6f7bcbe5148740f0c7f9c4dc27061339570496956aaef6': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '9fb5b99e3c546f2738dcd50a14e9aef9c313800c1bf8cf76bc9b2c3a23307841364c5a2d0794702662c5796fb72f5432': '中文', - '70b447f1bd5ce5a4753ccf7a3697eca0315954774374bc1042aff19582ccc32d5067f7da6c2bea9d6d344e11924cbe72': 'aécio', - '7add8d544b0a7cf188b54b1697a046f77e49d5f292e7ffe56feeed90a500b0bf026b9b68892888a1bafb9f8cb89ed874': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '7d0f80fe5c79a04a2a37a30a440e0cc068eb78fe6c3182246ede29645c144b5d33c44607cb2c3111ba77ffc66107f1cd': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'e344b95c6a961a27793eff00fa5103ef78b4180fe41c93fc60a31aff49b3b5e95a92c84fda9a6c80fa403b7df58db59f': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - sha3_256: { - 'ascii': { - 'a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a': '', - '69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04': 'The quick brown fox jumps over the lazy dog', - 'a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'fa198893674a0bf9fb35980504e8cefb250aabd2311a37e5d2205f07fb023d36': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - 'ac5305da3d18be1aed44aa7c70ea548da243a59a5fd546f489348fd5718fb1a0': '中文', - '65c756408eb6c35a1ffa2d7e09711bdc9f0b28716b1376223844a2b4c52b6718': 'aécio', - 'babe9afc555b0311700dfb0b5b6296d49347b3d770480baedfcdc47a4aea6e82': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '4b2f36e4320b86e6ead0ad001e47e6d9e7fcf0044cd5a5fd65490a633c0372a4': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '558a7f843b1ac5e7a8bbef90357876bcce0612992d0dfa2907e95521612f507f': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - sha3_224: { - 'ascii': { - '6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7': '', - 'd15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795': 'The quick brown fox jumps over the lazy dog', - '2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '06885009a28e43e15bf1af718561ad211515a27b542eabc36764a0ca': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '106d169e10b61c2a2a05554d3e631ec94467f8316640f29545d163ee': '中文', - 'b16bad54608dc01864a5d7510d4c19b09f3a0f39cfc4ba1e53aa952a': 'aécio', - 'f59253c41cb87e5cd953311656716cb5b64dbafc9e8155f0dd68123c': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '135c13deb71fdf6fb77b52b720c43ddd6ce7467f9147a74248557114': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'bd05581e02445c53e05aad2014f6a3819d77a9dff918b8c6bf60bd06': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_512: { - 'ascii': { - '0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e': '', - 'd135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609': 'The quick brown fox jumps over the lazy dog', - 'ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '10dcbf6389980ce3594547939bbc685363d28adbd6a05bc4abd7fc62e7693a1f6e33569fed5a380bfecb56ae811d25939b95823f39bb0f16a08740629d066d43': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524': '中文', - 'c452ec93e83d4795fcab62a76eed0d88f2231a995ce108ac8f130246f87c4a11cb18a2c1a688a5695906a6f863e71bbe8997c6610319ab97f12d2e5bf0afe458': 'aécio', - '8a2d72022ce19d989dbe6a0017faccbf5dc2e22c162d1c5eb168864d32dd1a71e1b4782652c148cf6ca47b77a72c96fff682e72bdfef0566d4b7cca3c9ccc59d': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - '6a67c28aa1946ca1be8382b861aac4aaf20052f495db9b6902d13adfa603eaba5d169f8896b86d461b2949283eb98e503c3f0640188ea7d6731526fc06568d37': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'd04ff5b0e85e9968be2a4d4e133c15c7ccee7497198bb651599a97d11d00bca6048d329ab75aa454566cd532648fa1cb4551985d9d645de9fa43a311a9ee8e4d': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_384: { - 'ascii': { - '2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff': '', - '283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3': 'The quick brown fox jumps over the lazy dog', - '9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'e7ec8976b4d96e43f50ae8ecdcf2d97a56236e6406e8dd00efd0d9abe885659db58a2f4b138a4ecfb1bd0052f6569516': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c': '中文', - '08990555e131af8597687614309da4c5053ce866f348544da0a0c2c78c2cc79680ebb57cfbe238286e78ea133a037897': 'aécio', - '2a80f59abf3111f38a35a3daa25123b495f90e9736bd300e35911d19abdd8806498c581333f198ccbbf2252b57c2925d': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'a3b043a2f69e4326a05d478fa4c8aa2bd7612453d775af37665a0b96ef2207cdc74c50cdba1629796a5136fe77300b05': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '66414c090cc3fe9c396d313cbaa100aefd335e851838b29382568b7f57357ada7c54b8fa8c17f859945bba88b2c2e332': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_256: { - 'ascii': { - 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470': '', - '4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15': 'The quick brown fox jumps over the lazy dog', - '578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - 'af20018353ffb50d507f1555580f5272eca7fdab4f8295db4b1a9ad832c93f6d': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee': '中文', - 'd7d569202f04daf90432810d6163112b2695d7820da979327ebd894efb0276dc': 'aécio', - '16a7cc7a58444cbf7e939611910ddc82e7cba65a99d3e8e08cfcda53180a2180': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'd1021d2d4c5c7e88098c40f422af68493b4b64c913cbd68220bf5e6127c37a88': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - 'ffabf9bba2127c4928d360c9905cb4911f0ec21b9c3b89f3b242bccc68389e36': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - }, - keccak_224: { - 'ascii': { - 'f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd': '', - '310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe': 'The quick brown fox jumps over the lazy dog', - 'c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab': 'The quick brown fox jumps over the lazy dog.' - }, - 'ascii more than 128 bytes': { - '8dd58b706e3a08ec4f1f202af39295b38c355a39b23308ade7218a21': 'The MD5 message-digest algorithm is a widely used cryptographic hash function producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32 digit hexadecimal number. MD5 has been utilized in a wide variety of cryptographic applications, and is also commonly used to verify data integrity.' - }, - 'UTF-8': { - '7bc2a0b6e7e0a055a61e4f731e2944b560f41ff98967dcbf4bbf77a5': '中文', - '66f3db76bf8cb35726cb278bac412d187c3484ab2083dc50ef5ffb55': 'aécio', - '3bfa94845726f4cd5cf17d19b5eacac17b3694790e13a76d5c81c7c2': '𠜎' - }, - 'UTF-8 more than 128 bytes': { - 'd59eef8f394ef7d96967bb0bde578785c033f7f0a21913d6ba41ed1b': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一', - '27123a2a3860d1041d4769778c4b078732bf4300f7e1c56536ab2644': '訊息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前電腦領域用於確保資訊傳輸完整一致而廣泛使用的雜湊演算法之一(又譯雜湊演算法、摘要演算法等),主流程式語言普遍已有MD5的實作。' - } - } - }; - - runTestCases(methods, testCases); - - describe('sha3_512', function () { - context('#arrayBuffer', function () { - it('should be equal', function () { - expect(sha3_512.arrayBuffer('').toHexString()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - expect(sha3_512.buffer('').toHexString()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - }); - }); - - context('#hex', function () { - it('should be equal', function () { - expect(sha3_512.hex('')).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - }); - }); - - context('#update', function () { - it('should be equal', function () { - expect(sha3_512.update('').hex()).to.be('a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26'); - expect(sha3_512.update('The quick brown fox ').update('jumps over the lazy dog').hex()).to.be('01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450'); - }); - }); - - context('#create', function () { - it('should be equal', function () { - var bytes = [84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]; - var hash = sha3_512.create(); - for (var i = 0; i < bytes.length; ++i) { - hash.update([bytes[i]]); - } - expect(hash.hex()).to.be('01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450'); - }); - }); - }); - - describe('#keccak_512', function () { - context('when special length', function () { - it('should be equal', function () { - expect(keccak_512('012345678901234567890123456789012345678901234567890123456789012345678901')).to.be('90b1d032c3bf06dcc78a46fe52054bab1250600224bfc6dfbfb40a7877c55e89bb982799a2edf198568a4166f6736678b45e76b12fac813cfdf0a76714e5eae8'); - expect(keccak_512('01234567890123456789012345678901234567890123456789012345678901234567890')).to.be('3173e7abc754a0b2909410d78986428a9183e996864af02f421d273d9fa1b4e4a5b14e2998b20767712f53a01ff8f6ae2c3e71e51e2c0f24257b03e6da09eb77'); - }); - }); - - context('when Array', function () { - it('should be equal', function () { - expect(keccak_512([])).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - expect(keccak_512([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103])).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609'); - }); - }); - - context('when Uint8Array', function () { - it('should be equal', function () { - expect(keccak_512(new Uint8Array([]))).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - expect(keccak_512(new Uint8Array([84, 104, 101, 32, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 32, 106, 117, 109, 112, 115, 32, 111, 118, 101, 114, 32, 116, 104, 101, 32, 108, 97, 122, 121, 32, 100, 111, 103]))).to.be('d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609'); - }); - }); - - context('when ArrayBuffer', function () { - it('should be equal', function () { - expect(keccak_512(new ArrayBuffer(0))).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - }); - }); - - context('when output ArrayBuffer', function () { - it('should be equal', function () { - expect(keccak_512.arrayBuffer('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - expect(keccak_512.buffer('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - }); - }); - - context('when output Array', function () { - it('should be equal', function () { - expect(keccak_512.array('').toHexString()).to.be('0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e'); - }); - }); - }); -})(sha3_512, sha3_384, sha3_256, sha3_224, keccak_512, keccak_384, keccak_256, keccak_224); diff --git a/truebit-implementation/node_modules/ethers/node_modules/setimmediate/LICENSE.txt b/truebit-implementation/node_modules/ethers/node_modules/setimmediate/LICENSE.txt deleted file mode 100644 index 32b20de6..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/setimmediate/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic Denicola - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/ethers/node_modules/setimmediate/README.md b/truebit-implementation/node_modules/ethers/node_modules/setimmediate/README.md deleted file mode 100644 index ad0f68d0..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/setimmediate/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# setImmediate.js -**A YuzuJS production** - -## Introduction - -**setImmediate.js** is a highly cross-browser implementation of the `setImmediate` and `clearImmediate` APIs, [proposed][spec] by Microsoft to the Web Performance Working Group. `setImmediate` allows scripts to yield to the browser, executing a given operation asynchronously, in a manner that is typically more efficient and consumes less power than the usual `setTimeout(..., 0)` pattern. - -setImmediate.js runs at “full speed” in the following browsers and environments, using various clever tricks: - - * Internet Explorer 6+ - * Firefox 3+ - * WebKit - * Opera 9.5+ - * Node.js - * Web workers in browsers that support `MessageChannel`, which I can't find solid info on. - -In all other browsers we fall back to using `setTimeout`, so it's always safe to use. - -## Macrotasks and Microtasks - -The `setImmediate` API, as specified, gives you access to the environment's [task queue][], sometimes known as its "macrotask" queue. This is crucially different from the [microtask queue][] used by web features such as `MutationObserver`, language features such as promises and `Object.observe`, and Node.js features such as `process.nextTick`. Each go-around of the macrotask queue yields back to the event loop once all queued tasks have been processed, even if the macrotask itself queued more macrotasks. Whereas, the microtask queue will continue executing any queued microtasks until it is exhausted. - -In practice, what this means is that if you call `setImmediate` inside of another task queued with `setImmediate`, you will yield back to the event loop and any I/O or rendering tasks that need to take place between those calls, instead of executing the queued task as soon as possible. - -If you are looking specifically to yield as part of a render loop, consider using [`requestAnimationFrame`][raf]; if you are looking solely for the control-flow ordering effects, use a microtask solution such as [asap][]. - -## The Tricks - -### `process.nextTick` - -In Node.js versions below 0.9, `setImmediate` is not available, but [`process.nextTick`][nextTick] is—and in those versions, `process.nextTick` uses macrotask semantics. So, we use it to shim support for a global `setImmediate`. - -In Node.js 0.9 and above, `process.nextTick` moved to microtask semantics, but `setImmediate` was introduced with macrotask semantics, so there's no need to polyfill anything. - -Note that we check for *actual* Node.js environments, not emulated ones like those produced by browserify or similar. Such emulated environments often already include a `process.nextTick` shim that's not as browser-compatible as setImmediate.js. - -### `postMessage` - -In Firefox 3+, Internet Explorer 9+, all modern WebKit browsers, and Opera 9.5+, [`postMessage`][postMessage] is available and provides a good way to queue tasks on the event loop. It's quite the abuse, using a cross-document messaging protocol within the same document simply to get access to the event loop task queue, but until there are native implementations, this is the best option. - -Note that Internet Explorer 8 includes a synchronous version of `postMessage`. We detect this, or any other such synchronous implementation, and fall back to another trick. - -### `MessageChannel` - -Unfortunately, `postMessage` has completely different semantics inside web workers, and so cannot be used there. So we turn to [`MessageChannel`][MessageChannel], which has worse browser support, but does work inside a web worker. - -### ` -``` - -Or in node.js: - -``` -npm install uuid -``` - -```javascript -var uuid = require('uuid'); - -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -cd benchmark/ -npm install -node benchmark.js -``` - -For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/README.md b/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/bench.gnu b/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/bench.sh b/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/benchmark-native.c b/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include -#include -#include -#include - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/benchmark.js b/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/package.json b/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/package.json deleted file mode 100644 index 94e0b593..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/benchmark/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "benchmark-uuid", - "private": true, - "description": "Benchmarks for node-uuid", - "dependencies": { - "uuid": "1.4.1", - "uuid-js": "0.7.4" - } -} diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/misc/compare.js b/truebit-implementation/node_modules/ethers/node_modules/uuid/misc/compare.js deleted file mode 100644 index 3de34151..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/misc/compare.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../'), - uuidjs = require('uuid-js'), - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/misc/perf.js b/truebit-implementation/node_modules/ethers/node_modules/uuid/misc/perf.js deleted file mode 100644 index bdc9eb46..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/misc/perf.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -var log = console.log; - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/package.json b/truebit-implementation/node_modules/ethers/node_modules/uuid/package.json deleted file mode 100644 index c3171e2c..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "uuid@2.0.1", - "_id": "uuid@2.0.1", - "_inBundle": false, - "_integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", - "_location": "/ethers/uuid", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "uuid@2.0.1", - "name": "uuid", - "escapedName": "uuid", - "rawSpec": "2.0.1", - "saveSpec": null, - "fetchSpec": "2.0.1" - }, - "_requiredBy": [ - "/ethers" - ], - "_resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "_shasum": "c2a30dedb3e535d72ccf82e343941a50ba8533ac", - "_spec": "uuid@2.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ethers", - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "browser": { - "./rng.js": "./rng-browser.js" - }, - "bugs": { - "url": "https://github.com/shtylman/node-uuid/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - }, - { - "name": "Vincent Voyer", - "email": "vincent@zeroload.net" - } - ], - "deprecated": false, - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "devDependencies": { - "mocha": "1.8.0" - }, - "homepage": "https://github.com/shtylman/node-uuid#readme", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "main": "./uuid.js", - "name": "uuid", - "repository": { - "type": "git", - "url": "git+https://github.com/shtylman/node-uuid.git" - }, - "scripts": { - "test": "mocha test/test.js" - }, - "testling": { - "browsers": [ - "ie6..latest", - "firefox/3.6..latest", - "chrome/22..latest", - "safari/5.1..latest" - ], - "harness": "mocha-tdd", - "files": "test/*.js" - }, - "version": "2.0.1" -} diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/rng-browser.js b/truebit-implementation/node_modules/ethers/node_modules/uuid/rng-browser.js deleted file mode 100644 index 57b58d4b..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/rng-browser.js +++ /dev/null @@ -1,31 +0,0 @@ - -var rng; - -if (global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; -} - -if (!rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; -} - -module.exports = rng; - diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/rng.js b/truebit-implementation/node_modules/ethers/node_modules/uuid/rng.js deleted file mode 100644 index 3977f798..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/rng.js +++ /dev/null @@ -1,4 +0,0 @@ -var rb = require('crypto').randomBytes; -module.exports = function() { - return rb(16); -}; diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/test/mocha.opts b/truebit-implementation/node_modules/ethers/node_modules/uuid/test/mocha.opts deleted file mode 100644 index e2bfcc5a..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/test/test.js b/truebit-implementation/node_modules/ethers/node_modules/uuid/test/test.js deleted file mode 100644 index 4c9872ff..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/test/test.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - test(name, function() { - // avoid .map for older browsers - for (var i=0 ; i 10k ids created in 1ms', function() { - // Verify throw if too many ids created - var thrown = false; - try { - uuid.v1({msecs: TIME, nsecs: 10000}); - } catch (e) { - thrown = true; - } - assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); -}); - -test('clock regression by msec', function() { - // Verify clock regression bumps clockseq - var uidt = uuid.v1({msecs: TIME}); - var uidtb = uuid.v1({msecs: TIME - 1}); - assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' - ); -}); - -test('clock regression by nsec', function() { - // Verify clock regression bumps clockseq - var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); - var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); - assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' - ); -}); - -test('explicit options product expected id', function() { - // Verify explicit options produce expected id - var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] - }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); -}); - -test('ids spanning 1ms boundary are 100ns apart', function() { - // Verify adjacent ids across a msec boundary are 1 time unit apart - var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); - var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - - var before = u0.split('-')[0], after = u1.split('-')[0]; - var dt = parseInt(after, 16) - parseInt(before, 16); - assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); -}); - -test('parse/unparse', function() { - var id = '00112233445566778899aabbccddeeff'; - assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); - assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); -}); - diff --git a/truebit-implementation/node_modules/ethers/node_modules/uuid/uuid.js b/truebit-implementation/node_modules/ethers/node_modules/uuid/uuid.js deleted file mode 100644 index be5bfede..00000000 --- a/truebit-implementation/node_modules/ethers/node_modules/uuid/uuid.js +++ /dev/null @@ -1,183 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -// Unique ID creation requires a high quality random # generator. We feature -// detect to determine the best RNG source, normalizing to a function that -// returns 128-bits of randomness, since that's what's usually required -var _rng = require('./rng'); - -// Maps for number <-> hex string conversion -var _byteToHex = []; -var _hexToByte = {}; -for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; -} - -// **`parse()` - Parse a UUID into it's component bytes** -function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; -} - -// **`unparse()` - Convert UUID byte array (ala parse()) into a string** -function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; -} - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -// random #'s we need to init node and clockseq -var _seedBytes = _rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - -// Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); -} - -// **`v4()` - Generate random UUID** - -// See https://github.com/broofa/node-uuid for API details -function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); -} - -// Export public API -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; -uuid.parse = parse; -uuid.unparse = unparse; - -module.exports = uuid; diff --git a/truebit-implementation/node_modules/ethers/package.json b/truebit-implementation/node_modules/ethers/package.json deleted file mode 100644 index a0c72f19..00000000 --- a/truebit-implementation/node_modules/ethers/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_from": "ethers@4.0.0-beta.1", - "_id": "ethers@4.0.0-beta.1", - "_inBundle": false, - "_integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", - "_location": "/ethers", - "_phantomChildren": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - }, - "_requested": { - "type": "version", - "registry": true, - "raw": "ethers@4.0.0-beta.1", - "name": "ethers", - "escapedName": "ethers", - "rawSpec": "4.0.0-beta.1", - "saveSpec": null, - "fetchSpec": "4.0.0-beta.1" - }, - "_requiredBy": [ - "/web3-eth-abi" - ], - "_resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "_shasum": "0648268b83e0e91a961b1af971c662cdf8cbab6d", - "_spec": "ethers@4.0.0-beta.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth-abi", - "author": { - "name": "Richard Moore", - "email": "me@ricmoo.com" - }, - "browser": { - "fs": "./tests/browser-fs.js", - "zlib": "browserify-zlib", - "./src.ts/providers/ipc-provider.ts": "./src.browser/empty.ts", - "./src.ts/utils/base64.ts": "./src.browser/base64.ts", - "./src.ts/utils/hmac.ts": "./src.browser/hmac.ts", - "./src.ts/utils/pbkdf2.ts": "./src.browser/pbkdf2.ts", - "./src.ts/utils/random-bytes.ts": "./src.browser/random-bytes.ts", - "./src.ts/utils/shims.ts": "./src.browser/shims.ts", - "xmlhttprequest": "./src.browser/xmlhttprequest.ts" - }, - "bugs": { - "url": "https://github.com/ethers-io/ethers.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "deprecated": false, - "description": "Ethereum wallet library.", - "devDependencies": { - "browserify": "^16.2.2", - "browserify-zlib": "^0.2.0", - "dts-bundle": "^0.7.3", - "eslint": "^5.0.1", - "eslint-plugin-promise": "^3.8.0", - "ethereumjs-tx": "^1.3.5", - "ethereumjs-util": "^5.2.0", - "gulp": "^3.9.1", - "gulp-cli": "^2.0.1", - "gulp-sourcemaps": "^2.6.4", - "gulp-typescript": "^5.0.0-alpha.1", - "gulp-uglify": "^3.0.0", - "mocha": "^3.2.0", - "mocha-phantomjs-core": "2.1.2", - "solc": "0.4.20", - "tsify": "^4.0.0", - "tslint": "^5.10.0", - "typescript": "^2.9.1", - "vinyl-buffer": "^1.0.1", - "vinyl-source-stream": "^2.0.0", - "web3": "0.20.6" - }, - "homepage": "https://github.com/ethers-io/ethers.js#readme", - "keywords": [ - "ethereum", - "library", - "wallet" - ], - "license": "MIT", - "main": "./index.js", - "name": "ethers", - "repository": { - "type": "git", - "url": "git://github.com/ethers-io/ethers.js.git" - }, - "scripts": { - "auto-build": "npm run build -- -w", - "build": "npm run dist-version && tsc -p ./tsconfig.json", - "dist": "npm run dist-version && npm run build && gulp default minified && npm run dist-types", - "dist-bip39": "gulp bip39-it bip39-ja bip39-ko bip39-zh", - "dist-types": "gulp temp-types && dts-bundle --name ethers --main .tmp/index.d.ts --out ../dist/ethers.d.ts", - "dist-version": "node -e \"let v = require('./package.json').version; require('fs').writeFileSync('./src.ts/_version.ts', 'export const version = \\\"' + v +'\\\";\\n')\"", - "eslint": "eslint index.js contracts/*.js providers/*.js utils/*.js wallet/*.js wordlists/*.js", - "test": "if [ \"$RUN_PHANTOMJS\" = \"1\" ]; then npm run-script test-phantomjs; else npm run-script test-node; fi", - "test-node": "mocha tests/test-*.js", - "test-phantomjs": "gulp minified tests && phantomjs --web-security=false ./node_modules/mocha-phantomjs-core/mocha-phantomjs-core.js ./tests/test.html", - "version": "npm dist" - }, - "types": "./dist/ethers.d.ts", - "version": "4.0.0-beta.1" -} diff --git a/truebit-implementation/node_modules/ethers/providers/etherscan-provider.js b/truebit-implementation/node_modules/ethers/providers/etherscan-provider.js deleted file mode 100644 index 4d2efca9..00000000 --- a/truebit-implementation/node_modules/ethers/providers/etherscan-provider.js +++ /dev/null @@ -1,288 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var provider_1 = require("./provider"); -var bytes_1 = require("../utils/bytes"); -var properties_1 = require("../utils/properties"); -var web_1 = require("../utils/web"); -var errors = __importStar(require("../utils/errors")); -// The transaction has already been sanitized by the calls in Provider -function getTransactionString(transaction) { - var result = []; - for (var key in transaction) { - if (transaction[key] == null) { - continue; - } - var value = bytes_1.hexlify(transaction[key]); - if ({ gasLimit: true, gasPrice: true, nonce: true, value: true }[key]) { - value = bytes_1.hexStripZeros(value); - } - result.push(key + '=' + value); - } - return result.join('&'); -} -function getResult(result) { - // getLogs, getHistory have weird success responses - if (result.status == 0 && (result.message === 'No records found' || result.message === 'No transactions found')) { - return result.result; - } - if (result.status != 1 || result.message != 'OK') { - // @TODO: not any - var error = new Error('invalid response'); - error.result = JSON.stringify(result); - throw error; - } - return result.result; -} -function getJsonResult(result) { - if (result.jsonrpc != '2.0') { - // @TODO: not any - var error = new Error('invalid response'); - error.result = JSON.stringify(result); - throw error; - } - if (result.error) { - // @TODO: not any - var error = new Error(result.error.message || 'unknown error'); - if (result.error.code) { - error.code = result.error.code; - } - if (result.error.data) { - error.data = result.error.data; - } - throw error; - } - return result.result; -} -// The blockTag was normalized as a string by the Provider pre-perform operations -function checkLogTag(blockTag) { - if (blockTag === 'pending') { - throw new Error('pending not supported'); - } - if (blockTag === 'latest') { - return blockTag; - } - return parseInt(blockTag.substring(2), 16); -} -var EtherscanProvider = /** @class */ (function (_super) { - __extends(EtherscanProvider, _super); - function EtherscanProvider(network, apiKey) { - var _this = _super.call(this, network) || this; - errors.checkNew(_this, EtherscanProvider); - var name = 'invalid'; - if (_this.network) { - name = _this.network.name; - } - var baseUrl = null; - switch (name) { - case 'homestead': - baseUrl = 'https://api.etherscan.io'; - break; - case 'ropsten': - baseUrl = 'https://api-ropsten.etherscan.io'; - break; - case 'rinkeby': - baseUrl = 'https://api-rinkeby.etherscan.io'; - break; - case 'kovan': - baseUrl = 'https://api-kovan.etherscan.io'; - break; - default: - throw new Error('unsupported network'); - } - properties_1.defineReadOnly(_this, 'baseUrl', baseUrl); - properties_1.defineReadOnly(_this, 'apiKey', apiKey); - return _this; - } - EtherscanProvider.prototype.perform = function (method, params) { - //if (!params) { params = {}; } - var url = this.baseUrl; - var apiKey = ''; - if (this.apiKey) { - apiKey += '&apikey=' + this.apiKey; - } - switch (method) { - case 'getBlockNumber': - url += '/api?module=proxy&action=eth_blockNumber' + apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'getGasPrice': - url += '/api?module=proxy&action=eth_gasPrice' + apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'getBalance': - // Returns base-10 result - url += '/api?module=account&action=balance&address=' + params.address; - url += '&tag=' + params.blockTag + apiKey; - return web_1.fetchJson(url, null, getResult); - case 'getTransactionCount': - url += '/api?module=proxy&action=eth_getTransactionCount&address=' + params.address; - url += '&tag=' + params.blockTag + apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'getCode': - url += '/api?module=proxy&action=eth_getCode&address=' + params.address; - url += '&tag=' + params.blockTag + apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'getStorageAt': - url += '/api?module=proxy&action=eth_getStorageAt&address=' + params.address; - url += '&position=' + params.position; - url += '&tag=' + params.blockTag + apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'sendTransaction': - url += '/api?module=proxy&action=eth_sendRawTransaction&hex=' + params.signedTransaction; - url += apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'getBlock': - if (params.blockTag) { - url += '/api?module=proxy&action=eth_getBlockByNumber&tag=' + params.blockTag; - url += '&boolean=false'; - url += apiKey; - return web_1.fetchJson(url, null, getJsonResult); - } - throw new Error('getBlock by blockHash not implmeneted'); - case 'getTransaction': - url += '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + params.transactionHash; - url += apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'getTransactionReceipt': - url += '/api?module=proxy&action=eth_getTransactionReceipt&txhash=' + params.transactionHash; - url += apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'call': - var transaction = getTransactionString(params.transaction); - if (transaction) { - transaction = '&' + transaction; - } - url += '/api?module=proxy&action=eth_call' + transaction; - url += apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'estimateGas': - var transaction = getTransactionString(params.transaction); - if (transaction) { - transaction = '&' + transaction; - } - url += '/api?module=proxy&action=eth_estimateGas&' + transaction; - url += apiKey; - return web_1.fetchJson(url, null, getJsonResult); - case 'getLogs': - url += '/api?module=logs&action=getLogs'; - try { - if (params.filter.fromBlock) { - url += '&fromBlock=' + checkLogTag(params.filter.fromBlock); - } - if (params.filter.toBlock) { - url += '&toBlock=' + checkLogTag(params.filter.toBlock); - } - if (params.filter.address) { - url += '&address=' + params.filter.address; - } - // @TODO: We can handle slightly more complicated logs using the logs API - if (params.filter.topics && params.filter.topics.length > 0) { - if (params.filter.topics.length > 1) { - throw new Error('unsupported topic format'); - } - var topic0 = params.filter.topics[0]; - if (typeof (topic0) !== 'string' || topic0.length !== 66) { - throw new Error('unsupported topic0 format'); - } - url += '&topic0=' + topic0; - } - } - catch (error) { - return Promise.reject(error); - } - url += apiKey; - var self = this; - return web_1.fetchJson(url, null, getResult).then(function (logs) { - var txs = {}; - var seq = Promise.resolve(); - logs.forEach(function (log) { - seq = seq.then(function () { - if (log.blockHash != null) { - return null; - } - log.blockHash = txs[log.transactionHash]; - if (log.blockHash == null) { - return self.getTransaction(log.transactionHash).then(function (tx) { - txs[log.transactionHash] = tx.blockHash; - log.blockHash = tx.blockHash; - return null; - }); - } - return null; - }); - }); - return seq.then(function () { - return logs; - }); - }); - case 'getEtherPrice': - if (this.network.name !== 'homestead') { - return Promise.resolve(0.0); - } - url += '/api?module=stats&action=ethprice'; - url += apiKey; - return web_1.fetchJson(url, null, getResult).then(function (result) { - return parseFloat(result.ethusd); - }); - default: - break; - } - return _super.prototype.perform.call(this, method, params); - }; - // @TODO: Allow startBlock and endBlock to be Promises - EtherscanProvider.prototype.getHistory = function (addressOrName, startBlock, endBlock) { - var url = this.baseUrl; - var apiKey = ''; - if (this.apiKey) { - apiKey += '&apikey=' + this.apiKey; - } - if (startBlock == null) { - startBlock = 0; - } - if (endBlock == null) { - endBlock = 99999999; - } - return this.resolveName(addressOrName).then(function (address) { - url += '/api?module=account&action=txlist&address=' + address; - url += '&startblock=' + startBlock; - url += '&endblock=' + endBlock; - url += '&sort=asc' + apiKey; - return web_1.fetchJson(url, null, getResult).then(function (result) { - var output = []; - result.forEach(function (tx) { - ['contractAddress', 'to'].forEach(function (key) { - if (tx[key] == '') { - delete tx[key]; - } - }); - if (tx.creates == null && tx.contractAddress != null) { - tx.creates = tx.contractAddress; - } - var item = provider_1.Provider.checkTransactionResponse(tx); - if (tx.timeStamp) { - item.timestamp = parseInt(tx.timeStamp); - } - output.push(item); - }); - return output; - }); - }); - }; - return EtherscanProvider; -}(provider_1.Provider)); -exports.EtherscanProvider = EtherscanProvider; diff --git a/truebit-implementation/node_modules/ethers/providers/fallback-provider.js b/truebit-implementation/node_modules/ethers/providers/fallback-provider.js deleted file mode 100644 index 86a3a5d8..00000000 --- a/truebit-implementation/node_modules/ethers/providers/fallback-provider.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var provider_1 = require("./provider"); -var errors = __importStar(require("../utils/errors")); -// Returns: -// - true is all networks match -// - false if any network is null -// - throws if any 2 networks do not match -function checkNetworks(networks) { - var result = true; - var check = null; - networks.forEach(function (network) { - // Null - if (network == null) { - result = false; - return; - } - // Have nothing to compre to yet - if (check == null) { - check = network; - return; - } - // Matches! - if (check.name === network.name && - check.chainId === network.chainId && - check.ensAddress === network.ensAddress) { - return; - } - errors.throwError('provider mismatch', errors.INVALID_ARGUMENT, { arg: 'networks', value: networks }); - }); - return result; -} -var FallbackProvider = /** @class */ (function (_super) { - __extends(FallbackProvider, _super); - function FallbackProvider(providers) { - var _this = this; - if (providers.length === 0) { - throw new Error('no providers'); - } - // All networks are ready, we can know the network for certain - var ready = checkNetworks(providers.map(function (p) { return p.network; })); - if (ready) { - _this = _super.call(this, providers[0].network) || this; - } - else { - // The network won't be known until all child providers know - var ready_1 = Promise.all(providers.map(function (p) { return p.getNetwork(); })).then(function (networks) { - if (!checkNetworks(networks)) { - errors.throwError('getNetwork returned null', errors.UNKNOWN_ERROR, {}); - } - return networks[0]; - }); - _this = _super.call(this, ready_1) || this; - } - errors.checkNew(_this, FallbackProvider); - // Preserve a copy, so we don't get mutated - _this._providers = providers.slice(0); - return _this; - } - Object.defineProperty(FallbackProvider.prototype, "providers", { - get: function () { - // Return a copy, so we don't get mutated - return this._providers.slice(0); - }, - enumerable: true, - configurable: true - }); - FallbackProvider.prototype.perform = function (method, params) { - // Creates a copy of the providers array - var providers = this.providers; - return new Promise(function (resolve, reject) { - var firstError = null; - function next() { - if (!providers.length) { - reject(firstError); - return; - } - var provider = providers.shift(); - provider.perform(method, params).then(function (result) { - return resolve(result); - }).catch(function (error) { - if (!firstError) { - firstError = error; - } - setTimeout(next, 0); - }); - } - next(); - }); - }; - return FallbackProvider; -}(provider_1.Provider)); -exports.FallbackProvider = FallbackProvider; diff --git a/truebit-implementation/node_modules/ethers/providers/index.js b/truebit-implementation/node_modules/ethers/providers/index.js deleted file mode 100644 index 0cdff676..00000000 --- a/truebit-implementation/node_modules/ethers/providers/index.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var provider_1 = require("./provider"); -exports.Provider = provider_1.Provider; -var etherscan_provider_1 = require("./etherscan-provider"); -exports.EtherscanProvider = etherscan_provider_1.EtherscanProvider; -var fallback_provider_1 = require("./fallback-provider"); -exports.FallbackProvider = fallback_provider_1.FallbackProvider; -var ipc_provider_1 = require("./ipc-provider"); -exports.IpcProvider = ipc_provider_1.IpcProvider; -var infura_provider_1 = require("./infura-provider"); -exports.InfuraProvider = infura_provider_1.InfuraProvider; -var json_rpc_provider_1 = require("./json-rpc-provider"); -exports.JsonRpcProvider = json_rpc_provider_1.JsonRpcProvider; -exports.JsonRpcSigner = json_rpc_provider_1.JsonRpcSigner; -var web3_provider_1 = require("./web3-provider"); -exports.Web3Provider = web3_provider_1.Web3Provider; -function getDefaultProvider(network) { - return new fallback_provider_1.FallbackProvider([ - new infura_provider_1.InfuraProvider(network), - new etherscan_provider_1.EtherscanProvider(network), - ]); -} -exports.getDefaultProvider = getDefaultProvider; diff --git a/truebit-implementation/node_modules/ethers/providers/infura-provider.js b/truebit-implementation/node_modules/ethers/providers/infura-provider.js deleted file mode 100644 index 34695f8e..00000000 --- a/truebit-implementation/node_modules/ethers/providers/infura-provider.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var json_rpc_provider_1 = require("./json-rpc-provider"); -var networks_1 = require("../utils/networks"); -var properties_1 = require("../utils/properties"); -var errors = __importStar(require("../utils/errors")); -var InfuraProvider = /** @class */ (function (_super) { - __extends(InfuraProvider, _super); - function InfuraProvider(network, apiAccessToken) { - var _this = this; - network = networks_1.getNetwork((network == null) ? 'homestead' : network); - var host = null; - switch (network.name) { - case 'homestead': - host = 'mainnet.infura.io'; - break; - case 'ropsten': - host = 'ropsten.infura.io'; - break; - case 'rinkeby': - host = 'rinkeby.infura.io'; - break; - case 'kovan': - host = 'kovan.infura.io'; - break; - default: - throw new Error('unsupported network'); - } - _this = _super.call(this, 'https://' + host + '/' + (apiAccessToken || ''), network) || this; - errors.checkNew(_this, InfuraProvider); - properties_1.defineReadOnly(_this, 'apiAccessToken', apiAccessToken || null); - return _this; - } - InfuraProvider.prototype._startPending = function () { - console.log('WARNING: INFURA does not support pending filters'); - }; - InfuraProvider.prototype.getSigner = function (address) { - errors.throwError('INFURA does not support signing', errors.UNSUPPORTED_OPERATION, { operation: 'getSigner' }); - return null; - }; - InfuraProvider.prototype.listAccounts = function () { - return Promise.resolve([]); - }; - return InfuraProvider; -}(json_rpc_provider_1.JsonRpcProvider)); -exports.InfuraProvider = InfuraProvider; diff --git a/truebit-implementation/node_modules/ethers/providers/ipc-provider.js b/truebit-implementation/node_modules/ethers/providers/ipc-provider.js deleted file mode 100644 index 072cca22..00000000 --- a/truebit-implementation/node_modules/ethers/providers/ipc-provider.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var net_1 = __importDefault(require("net")); -var json_rpc_provider_1 = require("./json-rpc-provider"); -var properties_1 = require("../utils/properties"); -var errors = __importStar(require("../utils/errors")); -var IpcProvider = /** @class */ (function (_super) { - __extends(IpcProvider, _super); - function IpcProvider(path, network) { - var _this = this; - if (path == null) { - errors.throwError('missing path', errors.MISSING_ARGUMENT, { arg: 'path' }); - } - _this = _super.call(this, 'ipc://' + path, network) || this; - errors.checkNew(_this, IpcProvider); - properties_1.defineReadOnly(_this, 'path', path); - return _this; - } - // @TODO: Create a connection to the IPC path and use filters instead of polling for block - IpcProvider.prototype.send = function (method, params) { - // This method is very simple right now. We create a new socket - // connection each time, which may be slower, but the main - // advantage we are aiming for now is security. This simplifies - // multiplexing requests (since we do not need to multiplex). - var _this = this; - var payload = JSON.stringify({ - method: method, - params: params, - id: 42, - jsonrpc: "2.0" - }); - return new Promise(function (resolve, reject) { - var stream = net_1.default.connect(_this.path); - stream.on('data', function (data) { - try { - resolve(JSON.parse(data.toString('utf8')).result); - // @TODO: Better pull apart the error - stream.destroy(); - } - catch (error) { - reject(error); - stream.destroy(); - } - }); - stream.on('end', function () { - stream.destroy(); - }); - stream.on('error', function (error) { - reject(error); - stream.destroy(); - }); - stream.write(payload); - stream.end(); - }); - }; - return IpcProvider; -}(json_rpc_provider_1.JsonRpcProvider)); -exports.IpcProvider = IpcProvider; diff --git a/truebit-implementation/node_modules/ethers/providers/json-rpc-provider.js b/truebit-implementation/node_modules/ethers/providers/json-rpc-provider.js deleted file mode 100644 index 4e54dd61..00000000 --- a/truebit-implementation/node_modules/ethers/providers/json-rpc-provider.js +++ /dev/null @@ -1,310 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// See: https://github.com/ethereum/wiki/wiki/JSON-RPC -var provider_1 = require("./provider"); -var address_1 = require("../utils/address"); -var bytes_1 = require("../utils/bytes"); -var networks_1 = require("../utils/networks"); -var properties_1 = require("../utils/properties"); -var utf8_1 = require("../utils/utf8"); -var web_1 = require("../utils/web"); -var types_1 = require("../utils/types"); -var errors = __importStar(require("../utils/errors")); -function timer(timeout) { - return new Promise(function (resolve) { - setTimeout(function () { - resolve(); - }, timeout); - }); -} -function getResult(payload) { - if (payload.error) { - // @TODO: not any - var error = new Error(payload.error.message); - error.code = payload.error.code; - error.data = payload.error.data; - throw error; - } - return payload.result; -} -function getLowerCase(value) { - if (value) { - return value.toLowerCase(); - } - return value; -} -var JsonRpcSigner = /** @class */ (function (_super) { - __extends(JsonRpcSigner, _super); - function JsonRpcSigner(provider, address) { - var _this = _super.call(this) || this; - errors.checkNew(_this, JsonRpcSigner); - properties_1.defineReadOnly(_this, 'provider', provider); - // Statically attach to a given address - if (address) { - properties_1.defineReadOnly(_this, '_address', address); - } - return _this; - } - Object.defineProperty(JsonRpcSigner.prototype, "address", { - get: function () { - if (!this._address) { - errors.throwError('no sync sync address available; use getAddress', errors.UNSUPPORTED_OPERATION, { operation: 'address' }); - } - return this._address; - }, - enumerable: true, - configurable: true - }); - JsonRpcSigner.prototype.getAddress = function () { - if (this._address) { - return Promise.resolve(this._address); - } - return this.provider.send('eth_accounts', []).then(function (accounts) { - if (accounts.length === 0) { - errors.throwError('no accounts', errors.UNSUPPORTED_OPERATION, { operation: 'getAddress' }); - } - return address_1.getAddress(accounts[0]); - }); - }; - JsonRpcSigner.prototype.getBalance = function (blockTag) { - return this.provider.getBalance(this.getAddress(), blockTag); - }; - JsonRpcSigner.prototype.getTransactionCount = function (blockTag) { - return this.provider.getTransactionCount(this.getAddress(), blockTag); - }; - JsonRpcSigner.prototype.sendTransaction = function (transaction) { - var _this = this; - var tx = properties_1.shallowCopy(transaction); - if (tx.from == null) { - tx.from = this.getAddress().then(function (address) { - if (!address) { - return null; - } - return address.toLowerCase(); - }); - } - return properties_1.resolveProperties(tx).then(function (tx) { - tx = JsonRpcProvider.hexlifyTransaction(tx); - return _this.provider.send('eth_sendTransaction', [tx]).then(function (hash) { - return web_1.poll(function () { - return _this.provider.getTransaction(hash).then(function (tx) { - if (tx === null) { - return undefined; - } - return _this.provider._wrapTransaction(tx, hash); - }); - }, { onceBlock: _this.provider }).catch(function (error) { - error.transactionHash = hash; - throw error; - }); - }); - }); - }; - JsonRpcSigner.prototype.signMessage = function (message) { - var _this = this; - var data = ((typeof (message) === 'string') ? utf8_1.toUtf8Bytes(message) : message); - return this.getAddress().then(function (address) { - // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign - return _this.provider.send('eth_sign', [address.toLowerCase(), bytes_1.hexlify(data)]); - }); - }; - JsonRpcSigner.prototype.unlock = function (password) { - var provider = this.provider; - return this.getAddress().then(function (address) { - return provider.send('personal_unlockAccount', [address.toLowerCase(), password, null]); - }); - }; - return JsonRpcSigner; -}(types_1.Signer)); -exports.JsonRpcSigner = JsonRpcSigner; -var JsonRpcProvider = /** @class */ (function (_super) { - __extends(JsonRpcProvider, _super); - function JsonRpcProvider(url, network) { - var _this = this; - // One parameter, but it is a network name, so swap it with the URL - if (typeof (url) === 'string') { - if (network === null && networks_1.getNetwork(url)) { - network = url; - url = null; - } - } - if (network) { - // The network has been specified explicitly, we can use it - _this = _super.call(this, network) || this; - } - else { - // The network is unknown, query the JSON-RPC for it - var ready = new Promise(function (resolve, reject) { - setTimeout(function () { - _this.send('net_version', []).then(function (result) { - return resolve(networks_1.getNetwork(parseInt(result))); - }).catch(function (error) { - reject(error); - }); - }); - }); - _this = _super.call(this, ready) || this; - } - errors.checkNew(_this, JsonRpcProvider); - // Default URL - if (!url) { - url = 'http://localhost:8545'; - } - if (typeof (url) === 'string') { - _this.connection = { - url: url - }; - } - else { - _this.connection = url; - } - return _this; - } - JsonRpcProvider.prototype.getSigner = function (address) { - return new JsonRpcSigner(this, address); - }; - JsonRpcProvider.prototype.listAccounts = function () { - return this.send('eth_accounts', []).then(function (accounts) { - return accounts.map(function (a) { return address_1.getAddress(a); }); - }); - }; - JsonRpcProvider.prototype.send = function (method, params) { - var request = { - method: method, - params: params, - id: 42, - jsonrpc: "2.0" - }; - return web_1.fetchJson(this.connection, JSON.stringify(request), getResult); - }; - JsonRpcProvider.prototype.perform = function (method, params) { - switch (method) { - case 'getBlockNumber': - return this.send('eth_blockNumber', []); - case 'getGasPrice': - return this.send('eth_gasPrice', []); - case 'getBalance': - return this.send('eth_getBalance', [getLowerCase(params.address), params.blockTag]); - case 'getTransactionCount': - return this.send('eth_getTransactionCount', [getLowerCase(params.address), params.blockTag]); - case 'getCode': - return this.send('eth_getCode', [getLowerCase(params.address), params.blockTag]); - case 'getStorageAt': - return this.send('eth_getStorageAt', [getLowerCase(params.address), params.position, params.blockTag]); - case 'sendTransaction': - return this.send('eth_sendRawTransaction', [params.signedTransaction]); - case 'getBlock': - if (params.blockTag) { - return this.send('eth_getBlockByNumber', [params.blockTag, false]); - } - else if (params.blockHash) { - return this.send('eth_getBlockByHash', [params.blockHash, false]); - } - return Promise.reject(new Error('invalid block tag or block hash')); - case 'getTransaction': - return this.send('eth_getTransactionByHash', [params.transactionHash]); - case 'getTransactionReceipt': - return this.send('eth_getTransactionReceipt', [params.transactionHash]); - case 'call': - return this.send('eth_call', [JsonRpcProvider.hexlifyTransaction(params.transaction), 'latest']); - case 'estimateGas': - return this.send('eth_estimateGas', [JsonRpcProvider.hexlifyTransaction(params.transaction)]); - case 'getLogs': - if (params.filter && params.filter.address != null) { - params.filter.address = getLowerCase(params.filter.address); - } - return this.send('eth_getLogs', [params.filter]); - default: - break; - } - errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method }); - return null; - }; - JsonRpcProvider.prototype._startPending = function () { - if (this._pendingFilter != null) { - return; - } - var self = this; - var pendingFilter = this.send('eth_newPendingTransactionFilter', []); - this._pendingFilter = pendingFilter; - pendingFilter.then(function (filterId) { - function poll() { - self.send('eth_getFilterChanges', [filterId]).then(function (hashes) { - if (self._pendingFilter != pendingFilter) { - return null; - } - var seq = Promise.resolve(); - hashes.forEach(function (hash) { - self._emitted['t:' + hash.toLowerCase()] = 'pending'; - seq = seq.then(function () { - return self.getTransaction(hash).then(function (tx) { - self.emit('pending', tx); - return null; - }); - }); - }); - return seq.then(function () { - return timer(1000); - }); - }).then(function () { - if (self._pendingFilter != pendingFilter) { - self.send('eth_uninstallFilter', [filterId]); - return; - } - setTimeout(function () { poll(); }, 0); - return null; - }).catch(function (error) { }); - } - poll(); - return filterId; - }).catch(function (error) { }); - }; - JsonRpcProvider.prototype._stopPending = function () { - this._pendingFilter = null; - }; - // Convert an ethers.js transaction into a JSON-RPC transaction - // - gasLimit => gas - // - All values hexlified - // - All numeric values zero-striped - // @TODO: Not any, a dictionary of string to strings - JsonRpcProvider.hexlifyTransaction = function (transaction) { - var result = {}; - // Some nodes (INFURA ropsten; INFURA mainnet is fine) don't like extra zeros. - ['gasLimit', 'gasPrice', 'nonce', 'value'].forEach(function (key) { - if (transaction[key] == null) { - return; - } - var value = bytes_1.hexStripZeros(bytes_1.hexlify(transaction[key])); - if (key === 'gasLimit') { - key = 'gas'; - } - result[key] = value; - }); - ['from', 'to', 'data'].forEach(function (key) { - if (transaction[key] == null) { - return; - } - result[key] = bytes_1.hexlify(transaction[key]); - }); - return result; - }; - return JsonRpcProvider; -}(provider_1.Provider)); -exports.JsonRpcProvider = JsonRpcProvider; diff --git a/truebit-implementation/node_modules/ethers/providers/provider.js b/truebit-implementation/node_modules/ethers/providers/provider.js deleted file mode 100644 index 535ef673..00000000 --- a/truebit-implementation/node_modules/ethers/providers/provider.js +++ /dev/null @@ -1,1081 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var address_1 = require("../utils/address"); -var bignumber_1 = require("../utils/bignumber"); -var bytes_1 = require("../utils/bytes"); -var hash_1 = require("../utils/hash"); -var networks_1 = require("../utils/networks"); -var properties_1 = require("../utils/properties"); -var rlp_1 = require("../utils/rlp"); -var transaction_1 = require("../utils/transaction"); -var utf8_1 = require("../utils/utf8"); -var web_1 = require("../utils/web"); -var types_1 = require("../utils/types"); -var errors = __importStar(require("../utils/errors")); -////////////////////////////// -// Request and Response Checking -// @TODO: not any? -function check(format, object) { - var result = {}; - for (var key in format) { - try { - var value = format[key](object[key]); - if (value !== undefined) { - result[key] = value; - } - } - catch (error) { - error.checkKey = key; - error.checkValue = object[key]; - throw error; - } - } - return result; -} -function allowNull(check, nullValue) { - return (function (value) { - if (value == null) { - return nullValue; - } - return check(value); - }); -} -function allowFalsish(check, replaceValue) { - return (function (value) { - if (!value) { - return replaceValue; - } - return check(value); - }); -} -function arrayOf(check) { - return (function (array) { - if (!Array.isArray(array)) { - throw new Error('not an array'); - } - var result = []; - array.forEach(function (value) { - result.push(check(value)); - }); - return result; - }); -} -function checkHash(hash) { - if (typeof (hash) === 'string' && bytes_1.hexDataLength(hash) === 32) { - return hash.toLowerCase(); - } - errors.throwError('invalid hash', errors.INVALID_ARGUMENT, { arg: 'hash', value: hash }); - return null; -} -function checkNumber(number) { - return bignumber_1.bigNumberify(number).toNumber(); -} -// Returns the difficulty as a number, or if too large (i.e. PoA network) null -function checkDifficulty(value) { - var v = bignumber_1.bigNumberify(value); - try { - return v.toNumber(); - } - catch (error) { } - return null; -} -function checkBoolean(value) { - if (typeof (value) === 'boolean') { - return value; - } - if (typeof (value) === 'string') { - if (value === 'true') { - return true; - } - if (value === 'false') { - return false; - } - } - throw new Error('invaid boolean - ' + value); -} -function checkUint256(uint256) { - if (!bytes_1.isHexString(uint256)) { - throw new Error('invalid uint256'); - } - while (uint256.length < 66) { - uint256 = '0x0' + uint256.substring(2); - } - return uint256; -} -/* -function checkString(string) { - if (typeof(string) !== 'string') { throw new Error('invalid string'); } - return string; -} -*/ -function checkBlockTag(blockTag) { - if (blockTag == null) { - return 'latest'; - } - if (blockTag === 'earliest') { - return '0x0'; - } - if (blockTag === 'latest' || blockTag === 'pending') { - return blockTag; - } - if (typeof (blockTag) === 'number') { - return bytes_1.hexStripZeros(bytes_1.hexlify(blockTag)); - } - if (bytes_1.isHexString(blockTag)) { - return bytes_1.hexStripZeros(blockTag); - } - throw new Error('invalid blockTag'); -} -var formatBlock = { - hash: checkHash, - parentHash: checkHash, - number: checkNumber, - timestamp: checkNumber, - nonce: allowNull(bytes_1.hexlify), - difficulty: checkDifficulty, - gasLimit: bignumber_1.bigNumberify, - gasUsed: bignumber_1.bigNumberify, - miner: address_1.getAddress, - extraData: bytes_1.hexlify, - //transactions: allowNull(arrayOf(checkTransaction)), - transactions: allowNull(arrayOf(checkHash)), -}; -function checkBlock(block) { - if (block.author != null && block.miner == null) { - block.miner = block.author; - } - return check(formatBlock, block); -} -var formatTransaction = { - hash: checkHash, - blockHash: allowNull(checkHash, null), - blockNumber: allowNull(checkNumber, null), - transactionIndex: allowNull(checkNumber, null), - from: address_1.getAddress, - gasPrice: bignumber_1.bigNumberify, - gasLimit: bignumber_1.bigNumberify, - to: allowNull(address_1.getAddress, null), - value: bignumber_1.bigNumberify, - nonce: checkNumber, - data: bytes_1.hexlify, - r: allowNull(checkUint256), - s: allowNull(checkUint256), - v: allowNull(checkNumber), - creates: allowNull(address_1.getAddress, null), - raw: allowNull(bytes_1.hexlify), -}; -function checkTransactionResponse(transaction) { - // Rename gas to gasLimit - if (transaction.gas != null && transaction.gasLimit == null) { - transaction.gasLimit = transaction.gas; - } - // Some clients (TestRPC) do strange things like return 0x0 for the - // 0 address; correct this to be a real address - if (transaction.to && bignumber_1.bigNumberify(transaction.to).isZero()) { - transaction.to = '0x0000000000000000000000000000000000000000'; - } - // Rename input to data - if (transaction.input != null && transaction.data == null) { - transaction.data = transaction.input; - } - // If to and creates are empty, populate the creates from the transaction - if (transaction.to == null && transaction.creates == null) { - transaction.creates = address_1.getContractAddress(transaction); - } - // @TODO: use transaction.serialize? Have to add support for including v, r, and s... - if (!transaction.raw) { - // Very loose providers (e.g. TestRPC) don't provide a signature or raw - if (transaction.v && transaction.r && transaction.s) { - var raw = [ - bytes_1.stripZeros(bytes_1.hexlify(transaction.nonce)), - bytes_1.stripZeros(bytes_1.hexlify(transaction.gasPrice)), - bytes_1.stripZeros(bytes_1.hexlify(transaction.gasLimit)), - (transaction.to || "0x"), - bytes_1.stripZeros(bytes_1.hexlify(transaction.value || '0x')), - bytes_1.hexlify(transaction.data || '0x'), - bytes_1.stripZeros(bytes_1.hexlify(transaction.v || '0x')), - bytes_1.stripZeros(bytes_1.hexlify(transaction.r)), - bytes_1.stripZeros(bytes_1.hexlify(transaction.s)), - ]; - transaction.raw = rlp_1.encode(raw); - } - } - var result = check(formatTransaction, transaction); - var networkId = transaction.networkId; - if (bytes_1.isHexString(networkId)) { - networkId = bignumber_1.bigNumberify(networkId).toNumber(); - } - if (typeof (networkId) !== 'number' && result.v != null) { - networkId = (result.v - 35) / 2; - if (networkId < 0) { - networkId = 0; - } - networkId = parseInt(networkId); - } - if (typeof (networkId) !== 'number') { - networkId = 0; - } - result.networkId = networkId; - // 0x0000... should actually be null - if (result.blockHash && result.blockHash.replace(/0/g, '') === 'x') { - result.blockHash = null; - } - return result; -} -var formatTransactionRequest = { - from: allowNull(address_1.getAddress), - nonce: allowNull(checkNumber), - gasLimit: allowNull(bignumber_1.bigNumberify), - gasPrice: allowNull(bignumber_1.bigNumberify), - to: allowNull(address_1.getAddress), - value: allowNull(bignumber_1.bigNumberify), - data: allowNull(bytes_1.hexlify), -}; -function checkTransactionRequest(transaction) { - return check(formatTransactionRequest, transaction); -} -var formatTransactionReceiptLog = { - transactionLogIndex: allowNull(checkNumber), - transactionIndex: checkNumber, - blockNumber: checkNumber, - transactionHash: checkHash, - address: address_1.getAddress, - topics: arrayOf(checkHash), - data: bytes_1.hexlify, - logIndex: checkNumber, - blockHash: checkHash, -}; -function checkTransactionReceiptLog(log) { - return check(formatTransactionReceiptLog, log); -} -var formatTransactionReceipt = { - contractAddress: allowNull(address_1.getAddress, null), - transactionIndex: checkNumber, - root: allowNull(checkHash), - gasUsed: bignumber_1.bigNumberify, - logsBloom: allowNull(bytes_1.hexlify), - blockHash: checkHash, - transactionHash: checkHash, - logs: arrayOf(checkTransactionReceiptLog), - blockNumber: checkNumber, - cumulativeGasUsed: bignumber_1.bigNumberify, - status: allowNull(checkNumber) -}; -function checkTransactionReceipt(transactionReceipt) { - //var status = transactionReceipt.status; - //var root = transactionReceipt.root; - var result = check(formatTransactionReceipt, transactionReceipt); - result.logs.forEach(function (entry, index) { - if (entry.transactionLogIndex == null) { - entry.transactionLogIndex = index; - } - }); - if (transactionReceipt.status != null) { - result.byzantium = true; - } - return result; -} -function checkTopics(topics) { - if (Array.isArray(topics)) { - topics.forEach(function (topic) { - checkTopics(topic); - }); - } - else if (topics != null) { - checkHash(topics); - } - return topics; -} -var formatFilter = { - fromBlock: allowNull(checkBlockTag, undefined), - toBlock: allowNull(checkBlockTag, undefined), - address: allowNull(address_1.getAddress, undefined), - topics: allowNull(checkTopics, undefined), -}; -function checkFilter(filter) { - return check(formatFilter, filter); -} -var formatLog = { - blockNumber: allowNull(checkNumber), - blockHash: allowNull(checkHash), - transactionIndex: checkNumber, - removed: allowNull(checkBoolean), - address: address_1.getAddress, - data: allowFalsish(bytes_1.hexlify, '0x'), - topics: arrayOf(checkHash), - transactionHash: checkHash, - logIndex: checkNumber, -}; -function checkLog(log) { - return check(formatLog, log); -} -////////////////////////////// -// Event Serializeing -function serializeTopics(topics) { - return topics.map(function (topic) { - if (typeof (topic) === 'string') { - return topic; - } - else if (Array.isArray(topic)) { - topic.forEach(function (topic) { - if (topic !== null && bytes_1.hexDataLength(topic) !== 32) { - errors.throwError('invalid topic', errors.INVALID_ARGUMENT, { argument: 'topic', value: topic }); - } - }); - return topic.join(','); - } - return errors.throwError('invalid topic value', errors.INVALID_ARGUMENT, { argument: 'topic', value: topic }); - }).join('&'); -} -function deserializeTopics(data) { - return data.split(/&/g).map(function (topic) { - var comps = topic.split(','); - if (comps.length === 1) { - if (comps[0] === '') { - return null; - } - return topic; - } - return comps; - }); -} -function getEventTag(eventName) { - if (typeof (eventName) === 'string') { - if (bytes_1.hexDataLength(eventName) === 20) { - return 'address:' + address_1.getAddress(eventName); - } - eventName = eventName.toLowerCase(); - if (eventName === 'block' || eventName === 'pending' || eventName === 'error') { - return eventName; - } - else if (bytes_1.hexDataLength(eventName) === 32) { - return 'tx:' + eventName; - } - } - else if (Array.isArray(eventName)) { - return 'filter::' + serializeTopics(eventName); - } - else if (eventName && typeof (eventName) === 'object') { - return 'filter:' + (eventName.address || '') + ':' + serializeTopics(eventName.topics || []); - } - throw new Error('invalid event - ' + eventName); -} -var Provider = /** @class */ (function (_super) { - __extends(Provider, _super); - function Provider(network) { - var _this = _super.call(this) || this; - errors.checkNew(_this, Provider); - if (network instanceof Promise) { - properties_1.defineReadOnly(_this, 'ready', network.then(function (network) { - properties_1.defineReadOnly(_this, '_network', network); - return network; - })); - } - else { - var knownNetwork = networks_1.getNetwork((network == null) ? 'homestead' : network); - if (knownNetwork) { - properties_1.defineReadOnly(_this, '_network', knownNetwork); - properties_1.defineReadOnly(_this, 'ready', Promise.resolve(_this._network)); - } - else { - errors.throwError('invalid network', errors.INVALID_ARGUMENT, { arg: 'network', value: network }); - } - } - _this._lastBlockNumber = -2; - // Balances being watched for changes - _this._balances = {}; - // Events being listened to - _this._events = []; - _this._pollingInterval = 4000; - // We use this to track recent emitted events; for example, if we emit a "block" of 100 - // and we get a `getBlock(100)` request which would result in null, we should retry - // until we get a response. This provides devs with a consistent view. Similarly for - // transaction hashes. - _this._emitted = { block: _this._lastBlockNumber }; - return _this; - } - Provider.prototype._doPoll = function () { - var _this = this; - this.getBlockNumber().then(function (blockNumber) { - // If the block hasn't changed, meh. - if (blockNumber === _this._lastBlockNumber) { - return; - } - if (_this._lastBlockNumber === -2) { - _this._lastBlockNumber = blockNumber - 1; - } - // Notify all listener for each block that has passed - for (var i = _this._lastBlockNumber + 1; i <= blockNumber; i++) { - if (_this._emitted.block < i) { - _this._emitted.block = i; - // Evict any transaction hashes or block hashes over 12 blocks - // old, since they should not return null anyways - Object.keys(_this._emitted).forEach(function (key) { - if (key === 'block') { - return; - } - if (_this._emitted[key] > i + 12) { - delete _this._emitted[key]; - } - }); - } - _this.emit('block', i); - } - // Sweep balances and remove addresses we no longer have events for - var newBalances = {}; - // Find all transaction hashes we are waiting on - _this._events.forEach(function (event) { - var comps = event.tag.split(':'); - switch (comps[0]) { - case 'tx': { - var hash_2 = comps[1]; - _this.getTransactionReceipt(hash_2).then(function (receipt) { - if (!receipt || receipt.blockNumber == null) { - return null; - } - _this._emitted['t:' + hash_2] = receipt.blockNumber; - _this.emit(hash_2, receipt); - return null; - }).catch(function (error) { _this.emit('error', error); }); - break; - } - case 'address': { - var address_2 = comps[1]; - if (_this._balances[address_2]) { - newBalances[address_2] = _this._balances[address_2]; - } - _this.getBalance(address_2, 'latest').then(function (balance) { - var lastBalance = this._balances[address_2]; - if (lastBalance && balance.eq(lastBalance)) { - return; - } - this._balances[address_2] = balance; - this.emit(address_2, balance); - return null; - }).catch(function (error) { _this.emit('error', error); }); - break; - } - case 'filter': { - var address = comps[1]; - var topics = deserializeTopics(comps[2]); - var filter_1 = { - address: address, - fromBlock: _this._lastBlockNumber + 1, - toBlock: blockNumber, - topics: topics - }; - _this.getLogs(filter_1).then(function (logs) { - if (logs.length === 0) { - return; - } - logs.forEach(function (log) { - _this._emitted['b:' + log.blockHash] = log.blockNumber; - _this._emitted['t:' + log.transactionHash] = log.blockNumber; - _this.emit(filter_1, log); - }); - return null; - }).catch(function (error) { _this.emit('error', error); }); - break; - } - } - }); - _this._lastBlockNumber = blockNumber; - _this._balances = newBalances; - return null; - }).catch(function (error) { }); - this.doPoll(); - }; - Provider.prototype.resetEventsBlock = function (blockNumber) { - this._lastBlockNumber = blockNumber; - this._doPoll(); - }; - Object.defineProperty(Provider.prototype, "network", { - get: function () { - return this._network; - }, - enumerable: true, - configurable: true - }); - Provider.prototype.getNetwork = function () { - return this.ready; - }; - Object.defineProperty(Provider.prototype, "blockNumber", { - get: function () { - if (this._lastBlockNumber < 0) { - return null; - } - return this._lastBlockNumber; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Provider.prototype, "polling", { - get: function () { - return (this._poller != null); - }, - set: function (value) { - var _this = this; - setTimeout(function () { - if (value && !_this._poller) { - _this._poller = setInterval(_this._doPoll.bind(_this), _this.pollingInterval); - } - else if (!value && _this._poller) { - clearInterval(_this._poller); - _this._poller = null; - } - }, 0); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Provider.prototype, "pollingInterval", { - get: function () { - return this._pollingInterval; - }, - set: function (value) { - var _this = this; - if (typeof (value) !== 'number' || value <= 0 || parseInt(String(value)) != value) { - throw new Error('invalid polling interval'); - } - this._pollingInterval = value; - if (this._poller) { - clearInterval(this._poller); - this._poller = setInterval(function () { _this._doPoll(); }, this._pollingInterval); - } - }, - enumerable: true, - configurable: true - }); - // @TODO: Add .poller which must be an event emitter with a 'start', 'stop' and 'block' event; - // this will be used once we move to the WebSocket or other alternatives to polling - Provider.prototype.waitForTransaction = function (transactionHash, timeout) { - var _this = this; - return web_1.poll(function () { - return _this.getTransactionReceipt(transactionHash).then(function (receipt) { - if (receipt == null) { - return undefined; - } - return receipt; - }); - }, { onceBlock: this }); - }; - Provider.prototype.getBlockNumber = function () { - var _this = this; - return this.ready.then(function () { - return _this.perform('getBlockNumber', {}).then(function (result) { - var value = parseInt(result); - if (value != result) { - throw new Error('invalid response - getBlockNumber'); - } - return value; - }); - }); - }; - Provider.prototype.getGasPrice = function () { - var _this = this; - return this.ready.then(function () { - return _this.perform('getGasPrice', {}).then(function (result) { - return bignumber_1.bigNumberify(result); - }); - }); - }; - Provider.prototype.getBalance = function (addressOrName, blockTag) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) { - var addressOrName = _a.addressOrName, blockTag = _a.blockTag; - return _this.resolveName(addressOrName).then(function (address) { - var params = { address: address, blockTag: checkBlockTag(blockTag) }; - return _this.perform('getBalance', params).then(function (result) { - return bignumber_1.bigNumberify(result); - }); - }); - }); - }); - }; - Provider.prototype.getTransactionCount = function (addressOrName, blockTag) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) { - var addressOrName = _a.addressOrName, blockTag = _a.blockTag; - return _this.resolveName(addressOrName).then(function (address) { - var params = { address: address, blockTag: checkBlockTag(blockTag) }; - return _this.perform('getTransactionCount', params).then(function (result) { - return bignumber_1.bigNumberify(result).toNumber(); - }); - }); - }); - }); - }; - Provider.prototype.getCode = function (addressOrName, blockTag) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) { - var addressOrName = _a.addressOrName, blockTag = _a.blockTag; - return _this.resolveName(addressOrName).then(function (address) { - var params = { address: address, blockTag: checkBlockTag(blockTag) }; - return _this.perform('getCode', params).then(function (result) { - return bytes_1.hexlify(result); - }); - }); - }); - }); - }; - Provider.prototype.getStorageAt = function (addressOrName, position, blockTag) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ addressOrName: addressOrName, position: position, blockTag: blockTag }).then(function (_a) { - var addressOrName = _a.addressOrName, position = _a.position, blockTag = _a.blockTag; - return _this.resolveName(addressOrName).then(function (address) { - var params = { - address: address, - blockTag: checkBlockTag(blockTag), - position: bytes_1.hexStripZeros(bytes_1.hexlify(position)), - }; - return _this.perform('getStorageAt', params).then(function (result) { - return bytes_1.hexlify(result); - }); - }); - }); - }); - }; - Provider.prototype.sendTransaction = function (signedTransaction) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ signedTransaction: signedTransaction }).then(function (_a) { - var signedTransaction = _a.signedTransaction; - var params = { signedTransaction: bytes_1.hexlify(signedTransaction) }; - return _this.perform('sendTransaction', params).then(function (hash) { - return _this._wrapTransaction(transaction_1.parse(signedTransaction), hash); - }, function (error) { - var tx = transaction_1.parse(signedTransaction); - if (tx.hash) { - error.transactionHash = tx.hash; - } - throw error; - }); - }); - }); - }; - // This should be called by any subclass wrapping a TransactionResponse - Provider.prototype._wrapTransaction = function (tx, hash) { - var _this = this; - if (bytes_1.hexDataLength(hash) !== 32) { - throw new Error('invalid response - sendTransaction'); - } - var result = tx; - // Check the hash we expect is the same as the hash the server reported - if (hash != null && tx.hash !== hash) { - errors.throwError('Transaction hash mismatch from Proivder.sendTransaction.', errors.UNKNOWN_ERROR, { expectedHash: tx.hash, returnedHash: hash }); - } - this._emitted['t:' + tx.hash] = 'pending'; - result.wait = function (timeout) { - return _this.waitForTransaction(hash, timeout).then(function (receipt) { - if (receipt.status === 0) { - errors.throwError('transaction failed', errors.CALL_EXCEPTION, { - transaction: tx - }); - } - return receipt; - }); - }; - return result; - }; - Provider.prototype.call = function (transaction) { - var _this = this; - var tx = properties_1.shallowCopy(transaction); - return this.ready.then(function () { - return properties_1.resolveProperties(tx).then(function (tx) { - return _this._resolveNames(tx, ['to', 'from']).then(function (tx) { - var params = { transaction: checkTransactionRequest(tx) }; - return _this.perform('call', params).then(function (result) { - return bytes_1.hexlify(result); - }); - }); - }); - }); - }; - Provider.prototype.estimateGas = function (transaction) { - var _this = this; - var tx = { - to: transaction.to, - from: transaction.from, - data: transaction.data - }; - return this.ready.then(function () { - return properties_1.resolveProperties(tx).then(function (tx) { - return _this._resolveNames(tx, ['to', 'from']).then(function (tx) { - var params = { transaction: checkTransactionRequest(tx) }; - return _this.perform('estimateGas', params).then(function (result) { - return bignumber_1.bigNumberify(result); - }); - }); - }); - }); - }; - Provider.prototype.getBlock = function (blockHashOrBlockTag) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ blockHashOrBlockTag: blockHashOrBlockTag }).then(function (_a) { - var blockHashOrBlockTag = _a.blockHashOrBlockTag; - try { - var blockHash = bytes_1.hexlify(blockHashOrBlockTag); - if (bytes_1.hexDataLength(blockHash) === 32) { - return web_1.poll(function () { - return _this.perform('getBlock', { blockHash: blockHash }).then(function (block) { - if (block == null) { - if (_this._emitted['b:' + blockHash] == null) { - return null; - } - return undefined; - } - return checkBlock(block); - }); - }, { onceBlock: _this }); - } - } - catch (error) { } - try { - var blockNumber_1 = -128; - var blockTag_1 = checkBlockTag(blockHashOrBlockTag); - if (bytes_1.isHexString(blockTag_1)) { - blockNumber_1 = parseInt(blockTag_1.substring(2), 16); - } - return web_1.poll(function () { - return _this.perform('getBlock', { blockTag: blockTag_1 }).then(function (block) { - if (block == null) { - if (blockNumber_1 > _this._emitted.block) { - return undefined; - } - return null; - } - return checkBlock(block); - }); - }, { onceBlock: _this }); - } - catch (error) { } - throw new Error('invalid block hash or block tag'); - }); - }); - }; - Provider.prototype.getTransaction = function (transactionHash) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ transactionHash: transactionHash }).then(function (_a) { - var transactionHash = _a.transactionHash; - var params = { transactionHash: checkHash(transactionHash) }; - return web_1.poll(function () { - return _this.perform('getTransaction', params).then(function (result) { - if (result == null) { - if (_this._emitted['t:' + transactionHash] == null) { - return null; - } - return undefined; - } - return Provider.checkTransactionResponse(result); - }); - }, { onceBlock: _this }); - }); - }); - }; - Provider.prototype.getTransactionReceipt = function (transactionHash) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties({ transactionHash: transactionHash }).then(function (_a) { - var transactionHash = _a.transactionHash; - var params = { transactionHash: checkHash(transactionHash) }; - return web_1.poll(function () { - return _this.perform('getTransactionReceipt', params).then(function (result) { - if (result == null) { - if (_this._emitted['t:' + transactionHash] == null) { - return null; - } - return undefined; - } - return checkTransactionReceipt(result); - }); - }, { onceBlock: _this }); - }); - }); - }; - Provider.prototype.getLogs = function (filter) { - var _this = this; - return this.ready.then(function () { - return properties_1.resolveProperties(filter).then(function (filter) { - return _this._resolveNames(filter, ['address']).then(function (filter) { - var params = { filter: checkFilter(filter) }; - return _this.perform('getLogs', params).then(function (result) { - return arrayOf(checkLog)(result); - }); - }); - }); - }); - }; - Provider.prototype.getEtherPrice = function () { - var _this = this; - return this.ready.then(function () { - return _this.perform('getEtherPrice', {}).then(function (result) { - // @TODO: Check valid float - return result; - }); - }); - }; - // @TODO: Could probably use resolveProperties instead? - Provider.prototype._resolveNames = function (object, keys) { - var promises = []; - var result = properties_1.shallowCopy(object); - keys.forEach(function (key) { - if (result[key] == null) { - return; - } - promises.push(this.resolveName(result[key]).then(function (address) { - result[key] = address; - return; - })); - }, this); - return Promise.all(promises).then(function () { return result; }); - }; - Provider.prototype._getResolver = function (name) { - var _this = this; - // Get the resolver from the blockchain - return this.getNetwork().then(function (network) { - // No ENS... - if (!network.ensAddress) { - errors.throwError('network does support ENS', errors.UNSUPPORTED_OPERATION, { operation: 'ENS', network: network.name }); - } - // keccak256('resolver(bytes32)') - var data = '0x0178b8bf' + hash_1.namehash(name).substring(2); - var transaction = { to: network.ensAddress, data: data }; - return _this.call(transaction).then(function (data) { - // extract the address from the data - if (bytes_1.hexDataLength(data) !== 32) { - return null; - } - return address_1.getAddress(bytes_1.hexDataSlice(data, 12)); - }); - }); - }; - Provider.prototype.resolveName = function (name) { - var _this = this; - // If it is a promise, resolve it then recurse - if (name instanceof Promise) { - return name.then(function (addressOrName) { - return _this.resolveName(addressOrName); - }); - } - // If it is already an address, nothing to resolve - try { - return Promise.resolve(address_1.getAddress(name)); - } - catch (error) { } - var self = this; - var nodeHash = hash_1.namehash(name); - // Get the addr from the resovler - return this._getResolver(name).then(function (resolverAddress) { - // keccak256('addr(bytes32)') - var data = '0x3b3b57de' + nodeHash.substring(2); - var transaction = { to: resolverAddress, data: data }; - return self.call(transaction); - // extract the address from the data - }).then(function (data) { - if (bytes_1.hexDataLength(data) !== 32) { - return null; - } - var address = address_1.getAddress(bytes_1.hexDataSlice(data, 12)); - if (address === '0x0000000000000000000000000000000000000000') { - return null; - } - return address; - }); - }; - Provider.prototype.lookupAddress = function (address) { - var _this = this; - if (address instanceof Promise) { - return address.then(function (address) { - return _this.lookupAddress(address); - }); - } - address = address_1.getAddress(address); - var name = address.substring(2) + '.addr.reverse'; - var nodehash = hash_1.namehash(name); - var self = this; - return this._getResolver(name).then(function (resolverAddress) { - if (!resolverAddress) { - return null; - } - // keccak('name(bytes32)') - var data = '0x691f3431' + nodehash.substring(2); - var transaction = { to: resolverAddress, data: data }; - return self.call(transaction); - }).then(function (data) { - // Strip off the "0x" - data = data.substring(2); - // Strip off the dynamic string pointer (0x20) - if (data.length < 64) { - return null; - } - data = data.substring(64); - if (data.length < 64) { - return null; - } - var length = bignumber_1.bigNumberify('0x' + data.substring(0, 64)).toNumber(); - data = data.substring(64); - if (2 * length > data.length) { - return null; - } - var name = utf8_1.toUtf8String('0x' + data.substring(0, 2 * length)); - // Make sure the reverse record matches the foward record - return self.resolveName(name).then(function (addr) { - if (addr != address) { - return null; - } - return name; - }); - }); - }; - Provider.checkTransactionResponse = function (transaction) { - return checkTransactionResponse(transaction); - }; - Provider.prototype.doPoll = function () { - }; - Provider.prototype.perform = function (method, params) { - errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method }); - return null; - }; - Provider.prototype._startPending = function () { - console.log('WARNING: this provider does not support pending events'); - }; - Provider.prototype._stopPending = function () { - }; - Provider.prototype._addEventListener = function (eventName, listener, once) { - this._events.push({ - tag: getEventTag(eventName), - listener: listener, - once: once, - }); - if (eventName === 'pending') { - this._startPending(); - } - this.polling = true; - }; - Provider.prototype.on = function (eventName, listener) { - this._addEventListener(eventName, listener, false); - return this; - }; - Provider.prototype.once = function (eventName, listener) { - this._addEventListener(eventName, listener, true); - return this; - }; - Provider.prototype.addEventListener = function (eventName, listener) { - return this.on(eventName, listener); - }; - Provider.prototype.emit = function (eventName) { - var _this = this; - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - var result = false; - var eventTag = getEventTag(eventName); - this._events = this._events.filter(function (event) { - if (event.tag !== eventTag) { - return true; - } - setTimeout(function () { - event.listener.apply(_this, args); - }, 0); - result = true; - return !(event.once); - }); - return result; - }; - Provider.prototype.listenerCount = function (eventName) { - if (!eventName) { - return this._events.length; - } - var eventTag = getEventTag(eventName); - return this._events.filter(function (event) { - return (event.tag === eventTag); - }).length; - }; - Provider.prototype.listeners = function (eventName) { - var eventTag = getEventTag(eventName); - return this._events.filter(function (event) { - return (event.tag === eventTag); - }).map(function (event) { - return event.listener; - }); - }; - Provider.prototype.removeAllListeners = function (eventName) { - var eventTag = getEventTag(eventName); - this._events = this._events.filter(function (event) { - return (event.tag !== eventTag); - }); - if (eventName === 'pending') { - this._stopPending(); - } - if (this._events.length === 0) { - this.polling = false; - } - return this; - }; - Provider.prototype.removeListener = function (eventName, listener) { - var found = false; - var eventTag = getEventTag(eventName); - this._events = this._events.filter(function (event) { - if (event.tag !== eventTag) { - return true; - } - if (found) { - return true; - } - found = false; - return false; - }); - if (eventName === 'pending' && this.listenerCount('pending') === 0) { - this._stopPending(); - } - if (this.listenerCount() === 0) { - this.polling = false; - } - return this; - }; - return Provider; -}(types_1.MinimalProvider)); -exports.Provider = Provider; -// See: https://github.com/isaacs/inherits/blob/master/inherits_browser.js -function inherits(ctor, superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); -} -function inheritable(parent) { - return function (child) { - inherits(child, parent); - properties_1.defineReadOnly(child, 'inherits', inheritable(child)); - }; -} -properties_1.defineReadOnly(Provider, 'inherits', inheritable(Provider)); diff --git a/truebit-implementation/node_modules/ethers/providers/web3-provider.js b/truebit-implementation/node_modules/ethers/providers/web3-provider.js deleted file mode 100644 index a5e55383..00000000 --- a/truebit-implementation/node_modules/ethers/providers/web3-provider.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var json_rpc_provider_1 = require("./json-rpc-provider"); -var properties_1 = require("../utils/properties"); -var errors = __importStar(require("../utils/errors")); -/* -@TODO -utils.defineProperty(Web3Signer, 'onchange', { - -}); - -*/ -var Web3Provider = /** @class */ (function (_super) { - __extends(Web3Provider, _super); - function Web3Provider(web3Provider, network) { - var _this = this; - if (!web3Provider || !web3Provider.sendAsync) { - errors.throwError('invalid web3Provider', errors.INVALID_ARGUMENT, { arg: 'web3Provider', value: web3Provider }); - } - // HTTP has a host; IPC has a path. - var url = web3Provider.host || web3Provider.path || ''; - _this = _super.call(this, url, network) || this; - errors.checkNew(_this, Web3Provider); - properties_1.defineReadOnly(_this, '_web3Provider', web3Provider); - return _this; - } - Web3Provider.prototype.send = function (method, params) { - var _this = this; - // Metamask complains about eth_sign (and on some versions hangs) - if (method == 'eth_sign' && this._web3Provider.isMetaMask) { - // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign - method = 'personal_sign'; - params = [params[1], params[0]]; - } - return new Promise(function (resolve, reject) { - var request = { - method: method, - params: params, - id: 42, - jsonrpc: "2.0" - }; - _this._web3Provider.sendAsync(request, function (error, result) { - if (error) { - reject(error); - return; - } - if (result.error) { - // @TODO: not any - var error = new Error(result.error.message); - error.code = result.error.code; - error.data = result.error.data; - reject(error); - return; - } - resolve(result.result); - }); - }); - }; - return Web3Provider; -}(json_rpc_provider_1.JsonRpcProvider)); -exports.Web3Provider = Web3Provider; diff --git a/truebit-implementation/node_modules/ethers/thirdparty.d.ts b/truebit-implementation/node_modules/ethers/thirdparty.d.ts deleted file mode 100644 index d107b40c..00000000 --- a/truebit-implementation/node_modules/ethers/thirdparty.d.ts +++ /dev/null @@ -1,132 +0,0 @@ -declare module "aes-js" { - export class Counter { - constructor(iv: Uint8Array); - } - export namespace ModeOfOperation { - class cbc{ - constructor(key: Uint8Array, iv: Uint8Array); - decrypt(data: Uint8Array): Uint8Array; - encrypt(data: Uint8Array): Uint8Array; - } - class ctr{ - constructor(key: Uint8Array, counter: Counter); - decrypt(data: Uint8Array): Uint8Array; - encrypt(data: Uint8Array): Uint8Array; - } - } - export namespace padding { - export namespace pkcs7 { - export function strip(data: Uint8Array): Uint8Array; - } - } -} - -declare module "bn.js" { - export class BN { - constructor(value: string | number, radix?: number); - - add(other: BN): BN; - sub(other: BN): BN; - div(other: BN): BN; - mod(other: BN): BN; - mul(other: BN): BN; - - pow(other: BN): BN; - maskn(other: number): BN; - - eq(other: BN): boolean; - lt(other: BN): boolean; - lte(other: BN): boolean; - gt(other: BN): boolean; - gte(other: BN): boolean; - - isZero(): boolean; - - toTwos(other: number): BN; - fromTwos(other: number): BN; - - toString(radix: number): string; - toNumber(): number; - toArray(endian: string, width: number): Uint8Array; - encode(encoding: string, compact: boolean): Uint8Array; - } -} - -declare module "elliptic" { - import { BN } from "bn.js"; - export type BasicSignature = { - r: Uint8Array; - s: Uint8Array; - }; - - export type Signature = { - r: BN, - s: BN, - recoveryParam: number - } - - interface KeyPair { - sign(message: Uint8Array, options: { canonical?: boolean }): Signature; - getPublic(compressed: boolean, encoding?: string): string; - getPublic(): BN; - getPrivate(encoding?: string): string; - encode(encoding: string, compressed: boolean): string; - priv: BN; - } - - export class ec { - constructor(curveName: string); - - n: BN; - - keyFromPublic(publicKey: string | Uint8Array): KeyPair; - keyFromPrivate(privateKey: string | Uint8Array): KeyPair; - recoverPubKey(data: Uint8Array, signature: BasicSignature, recoveryParam: number): KeyPair; - } -} - -declare module "hash.js" { - export interface HashFunc { - update(chunk: Uint8Array): HashFunc; - digest(encoding: string): string; - digest(): Uint8Array; - } - - export type CreateHashFunc = () => HashFunc; - - export function sha256(): HashFunc; - export function sha512(): HashFunc; - export function hmac(createHashFunc: CreateHashFunc, key: Uint8Array): HashFunc; -} - -declare module "scrypt-js" { - export class ScryptError extends Error { - progress: number; - } - export type ScryptCallback = (error: ScryptError, progress: number, key: Uint8Array) => void; - export default function(password: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, callback: ScryptCallback): void; -} - -declare module "uuid" { - export type Options = { - random: Uint8Array; - }; - export function v4(options?: Options): string; -} - -declare module "xmlhttprequest" { - export class XMLHttpRequest { - readyState: number; - status: number; - responseText: string; - - constructor(); - open(method: string, url: string, async?: boolean): void; - setRequestHeader(key: string, value: string): void; - send(body?: string): void; - - onreadystatechange: () => void; - onerror: (error: Error) => void; - } -} - diff --git a/truebit-implementation/node_modules/ethers/utils/abi-coder.js b/truebit-implementation/node_modules/ethers/utils/abi-coder.js deleted file mode 100644 index e853ebad..00000000 --- a/truebit-implementation/node_modules/ethers/utils/abi-coder.js +++ /dev/null @@ -1,917 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI -var address_1 = require("./address"); -var bignumber_1 = require("./bignumber"); -var bytes_1 = require("./bytes"); -var utf8_1 = require("./utf8"); -var properties_1 = require("./properties"); -var errors = __importStar(require("./errors")); -var paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); -var paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); -var paramTypeArray = new RegExp(/^(.*)\[([0-9]*)\]$/); -exports.defaultCoerceFunc = function (type, value) { - var match = type.match(paramTypeNumber); - if (match && parseInt(match[2]) <= 48) { - return value.toNumber(); - } - return value; -}; -/////////////////////////////////// -// Parsing for Solidity Signatures -var regexParen = new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$"); -var regexIdentifier = new RegExp("^[A-Za-z_][A-Za-z0-9_]*$"); -function verifyType(type) { - // These need to be transformed to their full description - if (type.match(/^uint($|[^1-9])/)) { - type = 'uint256' + type.substring(4); - } - else if (type.match(/^int($|[^1-9])/)) { - type = 'int256' + type.substring(3); - } - return type; -} -function parseParam(param, allowIndexed) { - function throwError(i) { - throw new Error('unexpected character "' + param[i] + '" at position ' + i + ' in "' + param + '"'); - } - var parent = { type: '', name: '', state: { allowType: true } }; - var node = parent; - for (var i = 0; i < param.length; i++) { - var c = param[i]; - switch (c) { - case '(': - if (!node.state.allowParams) { - throwError(i); - } - node.state.allowType = false; - node.type = verifyType(node.type); - node.components = [{ type: '', name: '', parent: node, state: { allowType: true } }]; - node = node.components[0]; - break; - case ')': - delete node.state; - if (allowIndexed && node.name === 'indexed') { - node.indexed = true; - node.name = ''; - } - node.type = verifyType(node.type); - var child = node; - node = node.parent; - if (!node) { - throwError(i); - } - delete child.parent; - node.state.allowParams = false; - node.state.allowName = true; - node.state.allowArray = true; - break; - case ',': - delete node.state; - if (allowIndexed && node.name === 'indexed') { - node.indexed = true; - node.name = ''; - } - node.type = verifyType(node.type); - var sibling = { type: '', name: '', parent: node.parent, state: { allowType: true } }; - node.parent.components.push(sibling); - delete node.parent; - node = sibling; - break; - // Hit a space... - case ' ': - // If reading type, the type is done and may read a param or name - if (node.state.allowType) { - if (node.type !== '') { - node.type = verifyType(node.type); - delete node.state.allowType; - node.state.allowName = true; - node.state.allowParams = true; - } - } - // If reading name, the name is done - if (node.state.allowName) { - if (node.name !== '') { - if (allowIndexed && node.name === 'indexed') { - node.indexed = true; - node.name = ''; - } - else { - node.state.allowName = false; - } - } - } - break; - case '[': - if (!node.state.allowArray) { - throwError(i); - } - node.type += c; - node.state.allowArray = false; - node.state.allowName = false; - node.state.readArray = true; - break; - case ']': - if (!node.state.readArray) { - throwError(i); - } - node.type += c; - node.state.readArray = false; - node.state.allowArray = true; - node.state.allowName = true; - break; - default: - if (node.state.allowType) { - node.type += c; - node.state.allowParams = true; - node.state.allowArray = true; - } - else if (node.state.allowName) { - node.name += c; - delete node.state.allowArray; - } - else if (node.state.readArray) { - node.type += c; - } - else { - throwError(i); - } - } - } - if (node.parent) { - throw new Error("unexpected eof"); - } - delete parent.state; - if (allowIndexed && node.name === 'indexed') { - node.indexed = true; - node.name = ''; - } - parent.type = verifyType(parent.type); - return parent; -} -// @TODO: Better return type -function parseSignatureEvent(fragment) { - var abi = { - anonymous: false, - inputs: [], - name: '', - type: 'event' - }; - var match = fragment.match(regexParen); - if (!match) { - throw new Error('invalid event: ' + fragment); - } - abi.name = match[1].trim(); - splitNesting(match[2]).forEach(function (param) { - param = parseParam(param, true); - param.indexed = !!param.indexed; - abi.inputs.push(param); - }); - match[3].split(' ').forEach(function (modifier) { - switch (modifier) { - case 'anonymous': - abi.anonymous = true; - break; - case '': - break; - default: - console.log('unknown modifier: ' + modifier); - } - }); - if (abi.name && !abi.name.match(regexIdentifier)) { - throw new Error('invalid identifier: "' + abi.name + '"'); - } - return abi; -} -function parseSignatureFunction(fragment) { - var abi = { - constant: false, - inputs: [], - name: '', - outputs: [], - payable: false, - stateMutability: null, - type: 'function' - }; - var comps = fragment.split(' returns '); - var left = comps[0].match(regexParen); - if (!left) { - throw new Error('invalid signature'); - } - abi.name = left[1].trim(); - if (!abi.name.match(regexIdentifier)) { - throw new Error('invalid identifier: "' + left[1] + '"'); - } - splitNesting(left[2]).forEach(function (param) { - abi.inputs.push(parseParam(param)); - }); - left[3].split(' ').forEach(function (modifier) { - switch (modifier) { - case 'constant': - abi.constant = true; - break; - case 'payable': - abi.payable = true; - break; - case 'pure': - abi.constant = true; - abi.stateMutability = 'pure'; - break; - case 'view': - abi.constant = true; - abi.stateMutability = 'view'; - break; - case '': - break; - default: - console.log('unknown modifier: ' + modifier); - } - }); - // We have outputs - if (comps.length > 1) { - var right = comps[1].match(regexParen); - if (right[1].trim() != '' || right[3].trim() != '') { - throw new Error('unexpected tokens'); - } - splitNesting(right[2]).forEach(function (param) { - abi.outputs.push(parseParam(param)); - }); - } - return abi; -} -function parseParamType(type) { - return parseParam(type, true); -} -exports.parseParamType = parseParamType; -// @TODO: Allow a second boolean to expose names -function formatParamType(paramType) { - return getParamCoder(exports.defaultCoerceFunc, paramType).type; -} -exports.formatParamType = formatParamType; -// @TODO: Allow a second boolean to expose names and modifiers -function formatSignature(fragment) { - return fragment.name + '(' + fragment.inputs.map(function (i) { return formatParamType(i); }).join(',') + ')'; -} -exports.formatSignature = formatSignature; -function parseSignature(fragment) { - if (typeof (fragment) === 'string') { - // Make sure the "returns" is surrounded by a space and all whitespace is exactly one space - fragment = fragment.replace(/\(/g, ' (').replace(/\)/g, ') ').replace(/\s+/g, ' '); - fragment = fragment.trim(); - if (fragment.substring(0, 6) === 'event ') { - return parseSignatureEvent(fragment.substring(6).trim()); - } - else { - if (fragment.substring(0, 9) === 'function ') { - fragment = fragment.substring(9); - } - return parseSignatureFunction(fragment.trim()); - } - } - throw new Error('unknown signature'); -} -exports.parseSignature = parseSignature; -var Coder = /** @class */ (function () { - function Coder(coerceFunc, name, type, localName, dynamic) { - this.coerceFunc = coerceFunc; - this.name = name; - this.type = type; - this.localName = localName; - this.dynamic = dynamic; - } - return Coder; -}()); -// Clones the functionality of an existing Coder, but without a localName -var CoderAnonymous = /** @class */ (function (_super) { - __extends(CoderAnonymous, _super); - function CoderAnonymous(coder) { - var _this = _super.call(this, coder.coerceFunc, coder.name, coder.type, undefined, coder.dynamic) || this; - properties_1.defineReadOnly(_this, 'coder', coder); - return _this; - } - CoderAnonymous.prototype.encode = function (value) { return this.coder.encode(value); }; - CoderAnonymous.prototype.decode = function (data, offset) { return this.coder.decode(data, offset); }; - return CoderAnonymous; -}(Coder)); -var CoderNull = /** @class */ (function (_super) { - __extends(CoderNull, _super); - function CoderNull(coerceFunc, localName) { - return _super.call(this, coerceFunc, 'null', '', localName, false) || this; - } - CoderNull.prototype.encode = function (value) { - return bytes_1.arrayify([]); - }; - CoderNull.prototype.decode = function (data, offset) { - if (offset > data.length) { - throw new Error('invalid null'); - } - return { - consumed: 0, - value: this.coerceFunc('null', undefined) - }; - }; - return CoderNull; -}(Coder)); -var CoderNumber = /** @class */ (function (_super) { - __extends(CoderNumber, _super); - function CoderNumber(coerceFunc, size, signed, localName) { - var _this = this; - var name = ((signed ? 'int' : 'uint') + (size * 8)); - _this = _super.call(this, coerceFunc, name, name, localName, false) || this; - _this.size = size; - _this.signed = signed; - return _this; - } - CoderNumber.prototype.encode = function (value) { - try { - var v = bignumber_1.bigNumberify(value); - v = v.toTwos(this.size * 8).maskn(this.size * 8); - //value = value.toTwos(size * 8).maskn(size * 8); - if (this.signed) { - v = v.fromTwos(this.size * 8).toTwos(256); - } - return bytes_1.padZeros(bytes_1.arrayify(v), 32); - } - catch (error) { - errors.throwError('invalid number value', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: this.name, - value: value - }); - } - return null; - }; - CoderNumber.prototype.decode = function (data, offset) { - if (data.length < offset + 32) { - errors.throwError('insufficient data for ' + this.name + ' type', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: this.name, - value: bytes_1.hexlify(data.slice(offset, offset + 32)) - }); - } - var junkLength = 32 - this.size; - var value = bignumber_1.bigNumberify(data.slice(offset + junkLength, offset + 32)); - if (this.signed) { - value = value.fromTwos(this.size * 8); - } - else { - value = value.maskn(this.size * 8); - } - return { - consumed: 32, - value: this.coerceFunc(this.name, value), - }; - }; - return CoderNumber; -}(Coder)); -var uint256Coder = new CoderNumber(function (type, value) { return value; }, 32, false, 'none'); -var CoderBoolean = /** @class */ (function (_super) { - __extends(CoderBoolean, _super); - function CoderBoolean(coerceFunc, localName) { - return _super.call(this, coerceFunc, 'bool', 'bool', localName, false) || this; - } - CoderBoolean.prototype.encode = function (value) { - return uint256Coder.encode(!!value ? 1 : 0); - }; - CoderBoolean.prototype.decode = function (data, offset) { - try { - var result = uint256Coder.decode(data, offset); - } - catch (error) { - if (error.reason === 'insufficient data for uint256 type') { - errors.throwError('insufficient data for boolean type', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'boolean', - value: error.value - }); - } - throw error; - } - return { - consumed: result.consumed, - value: this.coerceFunc('bool', !result.value.isZero()) - }; - }; - return CoderBoolean; -}(Coder)); -var CoderFixedBytes = /** @class */ (function (_super) { - __extends(CoderFixedBytes, _super); - function CoderFixedBytes(coerceFunc, length, localName) { - var _this = this; - var name = ('bytes' + length); - _this = _super.call(this, coerceFunc, name, name, localName, false) || this; - _this.length = length; - return _this; - } - CoderFixedBytes.prototype.encode = function (value) { - var result = new Uint8Array(32); - try { - var data = bytes_1.arrayify(value); - if (data.length > 32) { - throw new Error(); - } - result.set(data); - } - catch (error) { - errors.throwError('invalid ' + this.name + ' value', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: this.name, - value: (error.value || value) - }); - } - return result; - }; - CoderFixedBytes.prototype.decode = function (data, offset) { - if (data.length < offset + 32) { - errors.throwError('insufficient data for ' + name + ' type', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: this.name, - value: bytes_1.hexlify(data.slice(offset, offset + 32)) - }); - } - return { - consumed: 32, - value: this.coerceFunc(this.name, bytes_1.hexlify(data.slice(offset, offset + this.length))) - }; - }; - return CoderFixedBytes; -}(Coder)); -var CoderAddress = /** @class */ (function (_super) { - __extends(CoderAddress, _super); - function CoderAddress(coerceFunc, localName) { - return _super.call(this, coerceFunc, 'address', 'address', localName, false) || this; - } - CoderAddress.prototype.encode = function (value) { - var result = new Uint8Array(32); - try { - result.set(bytes_1.arrayify(address_1.getAddress(value)), 12); - } - catch (error) { - errors.throwError('invalid address', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'address', - value: value - }); - } - return result; - }; - CoderAddress.prototype.decode = function (data, offset) { - if (data.length < offset + 32) { - errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'address', - value: bytes_1.hexlify(data.slice(offset, offset + 32)) - }); - } - return { - consumed: 32, - value: this.coerceFunc('address', address_1.getAddress(bytes_1.hexlify(data.slice(offset + 12, offset + 32)))) - }; - }; - return CoderAddress; -}(Coder)); -function _encodeDynamicBytes(value) { - var dataLength = 32 * Math.ceil(value.length / 32); - var padding = new Uint8Array(dataLength - value.length); - return bytes_1.concat([ - uint256Coder.encode(value.length), - value, - padding - ]); -} -function _decodeDynamicBytes(data, offset, localName) { - if (data.length < offset + 32) { - errors.throwError('insufficient data for dynamicBytes length', errors.INVALID_ARGUMENT, { - arg: localName, - coderType: 'dynamicBytes', - value: bytes_1.hexlify(data.slice(offset, offset + 32)) - }); - } - var length = uint256Coder.decode(data, offset).value; - try { - length = length.toNumber(); - } - catch (error) { - errors.throwError('dynamic bytes count too large', errors.INVALID_ARGUMENT, { - arg: localName, - coderType: 'dynamicBytes', - value: length.toString() - }); - } - if (data.length < offset + 32 + length) { - errors.throwError('insufficient data for dynamicBytes type', errors.INVALID_ARGUMENT, { - arg: localName, - coderType: 'dynamicBytes', - value: bytes_1.hexlify(data.slice(offset, offset + 32 + length)) - }); - } - return { - consumed: 32 + 32 * Math.ceil(length / 32), - value: data.slice(offset + 32, offset + 32 + length), - }; -} -var CoderDynamicBytes = /** @class */ (function (_super) { - __extends(CoderDynamicBytes, _super); - function CoderDynamicBytes(coerceFunc, localName) { - return _super.call(this, coerceFunc, 'bytes', 'bytes', localName, true) || this; - } - CoderDynamicBytes.prototype.encode = function (value) { - try { - return _encodeDynamicBytes(bytes_1.arrayify(value)); - } - catch (error) { - errors.throwError('invalid bytes value', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'bytes', - value: error.value - }); - } - return null; - }; - CoderDynamicBytes.prototype.decode = function (data, offset) { - var result = _decodeDynamicBytes(data, offset, this.localName); - result.value = this.coerceFunc('bytes', bytes_1.hexlify(result.value)); - return result; - }; - return CoderDynamicBytes; -}(Coder)); -var CoderString = /** @class */ (function (_super) { - __extends(CoderString, _super); - function CoderString(coerceFunc, localName) { - return _super.call(this, coerceFunc, 'string', 'string', localName, true) || this; - } - CoderString.prototype.encode = function (value) { - if (typeof (value) !== 'string') { - errors.throwError('invalid string value', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'string', - value: value - }); - } - return _encodeDynamicBytes(utf8_1.toUtf8Bytes(value)); - }; - CoderString.prototype.decode = function (data, offset) { - var result = _decodeDynamicBytes(data, offset, this.localName); - result.value = this.coerceFunc('string', utf8_1.toUtf8String(result.value)); - return result; - }; - return CoderString; -}(Coder)); -function alignSize(size) { - return 32 * Math.ceil(size / 32); -} -function pack(coders, values) { - if (Array.isArray(values)) { - // do nothing - } - else if (values && typeof (values) === 'object') { - var arrayValues = []; - coders.forEach(function (coder) { - arrayValues.push(values[coder.localName]); - }); - values = arrayValues; - } - else { - errors.throwError('invalid tuple value', errors.INVALID_ARGUMENT, { - coderType: 'tuple', - value: values - }); - } - if (coders.length !== values.length) { - errors.throwError('types/value length mismatch', errors.INVALID_ARGUMENT, { - coderType: 'tuple', - value: values - }); - } - var parts = []; - coders.forEach(function (coder, index) { - parts.push({ dynamic: coder.dynamic, value: coder.encode(values[index]) }); - }); - var staticSize = 0, dynamicSize = 0; - parts.forEach(function (part) { - if (part.dynamic) { - staticSize += 32; - dynamicSize += alignSize(part.value.length); - } - else { - staticSize += alignSize(part.value.length); - } - }); - var offset = 0, dynamicOffset = staticSize; - var data = new Uint8Array(staticSize + dynamicSize); - parts.forEach(function (part) { - if (part.dynamic) { - //uint256Coder.encode(dynamicOffset).copy(data, offset); - data.set(uint256Coder.encode(dynamicOffset), offset); - offset += 32; - //part.value.copy(data, dynamicOffset); @TODO - data.set(part.value, dynamicOffset); - dynamicOffset += alignSize(part.value.length); - } - else { - //part.value.copy(data, offset); @TODO - data.set(part.value, offset); - offset += alignSize(part.value.length); - } - }); - return data; -} -function unpack(coders, data, offset) { - var baseOffset = offset; - var consumed = 0; - var value = []; - coders.forEach(function (coder) { - if (coder.dynamic) { - var dynamicOffset = uint256Coder.decode(data, offset); - var result = coder.decode(data, baseOffset + dynamicOffset.value.toNumber()); - // The dynamic part is leap-frogged somewhere else; doesn't count towards size - result.consumed = dynamicOffset.consumed; - } - else { - var result = coder.decode(data, offset); - } - if (result.value != undefined) { - value.push(result.value); - } - offset += result.consumed; - consumed += result.consumed; - }); - coders.forEach(function (coder, index) { - var name = coder.localName; - if (!name) { - return; - } - if (name === 'length') { - name = '_length'; - } - if (value[name] != null) { - return; - } - value[name] = value[index]; - }); - return { - value: value, - consumed: consumed - }; -} -var CoderArray = /** @class */ (function (_super) { - __extends(CoderArray, _super); - function CoderArray(coerceFunc, coder, length, localName) { - var _this = this; - var type = (coder.type + '[' + (length >= 0 ? length : '') + ']'); - var dynamic = (length === -1 || coder.dynamic); - _this = _super.call(this, coerceFunc, 'array', type, localName, dynamic) || this; - _this.coder = coder; - _this.length = length; - return _this; - } - CoderArray.prototype.encode = function (value) { - if (!Array.isArray(value)) { - errors.throwError('expected array value', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'array', - value: value - }); - } - var count = this.length; - var result = new Uint8Array(0); - if (count === -1) { - count = value.length; - result = uint256Coder.encode(count); - } - errors.checkArgumentCount(count, value.length, 'in coder array' + (this.localName ? (" " + this.localName) : "")); - var coders = []; - for (var i = 0; i < value.length; i++) { - coders.push(this.coder); - } - return bytes_1.concat([result, pack(coders, value)]); - }; - CoderArray.prototype.decode = function (data, offset) { - // @TODO: - //if (data.length < offset + length * 32) { throw new Error('invalid array'); } - var consumed = 0; - var count = this.length; - if (count === -1) { - try { - var decodedLength = uint256Coder.decode(data, offset); - } - catch (error) { - errors.throwError('insufficient data for dynamic array length', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'array', - value: error.value - }); - } - try { - count = decodedLength.value.toNumber(); - } - catch (error) { - errors.throwError('array count too large', errors.INVALID_ARGUMENT, { - arg: this.localName, - coderType: 'array', - value: decodedLength.value.toString() - }); - } - consumed += decodedLength.consumed; - offset += decodedLength.consumed; - } - var coders = []; - for (var i = 0; i < count; i++) { - coders.push(new CoderAnonymous(this.coder)); - } - var result = unpack(coders, data, offset); - result.consumed += consumed; - result.value = this.coerceFunc(this.type, result.value); - return result; - }; - return CoderArray; -}(Coder)); -var CoderTuple = /** @class */ (function (_super) { - __extends(CoderTuple, _super); - function CoderTuple(coerceFunc, coders, localName) { - var _this = this; - var dynamic = false; - var types = []; - coders.forEach(function (coder) { - if (coder.dynamic) { - dynamic = true; - } - types.push(coder.type); - }); - var type = ('tuple(' + types.join(',') + ')'); - _this = _super.call(this, coerceFunc, 'tuple', type, localName, dynamic) || this; - _this.coders = coders; - return _this; - } - CoderTuple.prototype.encode = function (value) { - return pack(this.coders, value); - }; - CoderTuple.prototype.decode = function (data, offset) { - var result = unpack(this.coders, data, offset); - result.value = this.coerceFunc(this.type, result.value); - return result; - }; - return CoderTuple; -}(Coder)); -/* -function getTypes(coders) { - var type = coderTuple(coders).type; - return type.substring(6, type.length - 1); -} -*/ -function splitNesting(value) { - var result = []; - var accum = ''; - var depth = 0; - for (var offset = 0; offset < value.length; offset++) { - var c = value[offset]; - if (c === ',' && depth === 0) { - result.push(accum); - accum = ''; - } - else { - accum += c; - if (c === '(') { - depth++; - } - else if (c === ')') { - depth--; - if (depth === -1) { - throw new Error('unbalanced parenthsis'); - } - } - } - } - result.push(accum); - return result; -} -// @TODO: Is there a way to return "class"? -var paramTypeSimple = { - address: CoderAddress, - bool: CoderBoolean, - string: CoderString, - bytes: CoderDynamicBytes, -}; -function getTupleParamCoder(coerceFunc, components, localName) { - if (!components) { - components = []; - } - var coders = []; - components.forEach(function (component) { - coders.push(getParamCoder(coerceFunc, component)); - }); - return new CoderTuple(coerceFunc, coders, localName); -} -function getParamCoder(coerceFunc, param) { - var coder = paramTypeSimple[param.type]; - if (coder) { - return new coder(coerceFunc, param.name); - } - var match = param.type.match(paramTypeNumber); - if (match) { - var size = parseInt(match[2] || "256"); - if (size === 0 || size > 256 || (size % 8) !== 0) { - errors.throwError('invalid ' + match[1] + ' bit length', errors.INVALID_ARGUMENT, { - arg: 'param', - value: param - }); - } - return new CoderNumber(coerceFunc, size / 8, (match[1] === 'int'), param.name); - } - var match = param.type.match(paramTypeBytes); - if (match) { - var size = parseInt(match[1]); - if (size === 0 || size > 32) { - errors.throwError('invalid bytes length', errors.INVALID_ARGUMENT, { - arg: 'param', - value: param - }); - } - return new CoderFixedBytes(coerceFunc, size, param.name); - } - var match = param.type.match(paramTypeArray); - if (match) { - var size = parseInt(match[2] || "-1"); - param = properties_1.jsonCopy(param); - param.type = match[1]; - return new CoderArray(coerceFunc, getParamCoder(coerceFunc, param), size, param.name); - } - if (param.type.substring(0, 5) === 'tuple') { - return getTupleParamCoder(coerceFunc, param.components, param.name); - } - if (param.type === '') { - return new CoderNull(coerceFunc, param.name); - } - errors.throwError('invalid type', errors.INVALID_ARGUMENT, { - arg: 'type', - value: param.type - }); - return null; -} -var AbiCoder = /** @class */ (function () { - function AbiCoder(coerceFunc) { - errors.checkNew(this, AbiCoder); - if (!coerceFunc) { - coerceFunc = exports.defaultCoerceFunc; - } - properties_1.defineReadOnly(this, 'coerceFunc', coerceFunc); - } - AbiCoder.prototype.encode = function (types, values) { - if (types.length !== values.length) { - errors.throwError('types/values length mismatch', errors.INVALID_ARGUMENT, { - count: { types: types.length, values: values.length }, - value: { types: types, values: values } - }); - } - var coders = []; - types.forEach(function (type) { - // Convert types to type objects - // - "uint foo" => { type: "uint", name: "foo" } - // - "tuple(uint, uint)" => { type: "tuple", components: [ { type: "uint" }, { type: "uint" }, ] } - var typeObject = null; - if (typeof (type) === 'string') { - typeObject = parseParam(type); - } - else { - typeObject = type; - } - coders.push(getParamCoder(this.coerceFunc, typeObject)); - }, this); - return bytes_1.hexlify(new CoderTuple(this.coerceFunc, coders, '_').encode(values)); - }; - AbiCoder.prototype.decode = function (types, data) { - var coders = []; - types.forEach(function (type) { - // See encode for details - var typeObject = null; - if (typeof (type) === 'string') { - typeObject = parseParam(type); - } - else { - typeObject = properties_1.jsonCopy(type); - } - coders.push(getParamCoder(this.coerceFunc, typeObject)); - }, this); - return new CoderTuple(this.coerceFunc, coders, '_').decode(bytes_1.arrayify(data), 0).value; - }; - return AbiCoder; -}()); -exports.AbiCoder = AbiCoder; -exports.defaultAbiCoder = new AbiCoder(); diff --git a/truebit-implementation/node_modules/ethers/utils/address.js b/truebit-implementation/node_modules/ethers/utils/address.js deleted file mode 100644 index 37e9f130..00000000 --- a/truebit-implementation/node_modules/ethers/utils/address.js +++ /dev/null @@ -1,124 +0,0 @@ -'use strict'; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// We use this for base 36 maths -var bn_js_1 = __importDefault(require("bn.js")); -var bytes_1 = require("./bytes"); -var keccak256_1 = require("./keccak256"); -var rlp_1 = require("./rlp"); -var errors = require("./errors"); -function getChecksumAddress(address) { - if (typeof (address) !== 'string' || !address.match(/^0x[0-9A-Fa-f]{40}$/)) { - errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address }); - } - address = address.toLowerCase(); - var chars = address.substring(2).split(''); - var hashed = new Uint8Array(40); - for (var i_1 = 0; i_1 < 40; i_1++) { - hashed[i_1] = chars[i_1].charCodeAt(0); - } - hashed = bytes_1.arrayify(keccak256_1.keccak256(hashed)); - for (var i = 0; i < 40; i += 2) { - if ((hashed[i >> 1] >> 4) >= 8) { - chars[i] = chars[i].toUpperCase(); - } - if ((hashed[i >> 1] & 0x0f) >= 8) { - chars[i + 1] = chars[i + 1].toUpperCase(); - } - } - return '0x' + chars.join(''); -} -// Shims for environments that are missing some required constants and functions -var MAX_SAFE_INTEGER = 0x1fffffffffffff; -function log10(x) { - if (Math.log10) { - return Math.log10(x); - } - return Math.log(x) / Math.LN10; -} -// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number -// Create lookup table -var ibanLookup = {}; -for (var i = 0; i < 10; i++) { - ibanLookup[String(i)] = String(i); -} -for (var i = 0; i < 26; i++) { - ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); -} -// How many decimal digits can we process? (for 64-bit float, this is 15) -var safeDigits = Math.floor(log10(MAX_SAFE_INTEGER)); -function ibanChecksum(address) { - address = address.toUpperCase(); - address = address.substring(4) + address.substring(0, 2) + '00'; - var expanded = ''; - address.split('').forEach(function (c) { - expanded += ibanLookup[c]; - }); - // Javascript can handle integers safely up to 15 (decimal) digits - while (expanded.length >= safeDigits) { - var block = expanded.substring(0, safeDigits); - expanded = parseInt(block, 10) % 97 + expanded.substring(block.length); - } - var checksum = String(98 - (parseInt(expanded, 10) % 97)); - while (checksum.length < 2) { - checksum = '0' + checksum; - } - return checksum; -} -; -function getAddress(address) { - var result = null; - if (typeof (address) !== 'string') { - errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address }); - } - if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) { - // Missing the 0x prefix - if (address.substring(0, 2) !== '0x') { - address = '0x' + address; - } - result = getChecksumAddress(address); - // It is a checksummed address with a bad checksum - if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) { - errors.throwError('bad address checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address }); - } - // Maybe ICAP? (we only support direct mode) - } - else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) { - // It is an ICAP address with a bad checksum - if (address.substring(2, 4) !== ibanChecksum(address)) { - errors.throwError('bad icap checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address }); - } - result = (new bn_js_1.default.BN(address.substring(4), 36)).toString(16); - while (result.length < 40) { - result = '0' + result; - } - result = getChecksumAddress('0x' + result); - } - else { - errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address }); - } - return result; -} -exports.getAddress = getAddress; -function getIcapAddress(address) { - var base36 = (new bn_js_1.default.BN(getAddress(address).substring(2), 16)).toString(36).toUpperCase(); - while (base36.length < 30) { - base36 = '0' + base36; - } - return 'XE' + ibanChecksum('XE00' + base36) + base36; -} -exports.getIcapAddress = getIcapAddress; -// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed -function getContractAddress(transaction) { - if (!transaction.from) { - throw new Error('missing from address'); - } - var nonce = transaction.nonce; - return getAddress('0x' + keccak256_1.keccak256(rlp_1.encode([ - getAddress(transaction.from), - bytes_1.stripZeros(bytes_1.hexlify(nonce)) - ])).substring(26)); -} -exports.getContractAddress = getContractAddress; diff --git a/truebit-implementation/node_modules/ethers/utils/base64.js b/truebit-implementation/node_modules/ethers/utils/base64.js deleted file mode 100644 index c42a3214..00000000 --- a/truebit-implementation/node_modules/ethers/utils/base64.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var bytes_1 = require("./bytes"); -function decode(textData) { - return bytes_1.arrayify(new Uint8Array(new Buffer(textData, 'base64'))); -} -exports.decode = decode; -; -function encode(data) { - return new Buffer(bytes_1.arrayify(data)).toString('base64'); -} -exports.encode = encode; diff --git a/truebit-implementation/node_modules/ethers/utils/bignumber.js b/truebit-implementation/node_modules/ethers/utils/bignumber.js deleted file mode 100644 index 3a9e4705..00000000 --- a/truebit-implementation/node_modules/ethers/utils/bignumber.js +++ /dev/null @@ -1,192 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * BigNumber - * - * A wrapper around the BN.js object. We use the BN.js library - * because it is used by elliptic, so it is required regardles. - * - */ -var bn_js_1 = __importDefault(require("bn.js")); -var bytes_1 = require("./bytes"); -var properties_1 = require("./properties"); -var types_1 = require("./types"); -var errors = __importStar(require("./errors")); -var BN_1 = new bn_js_1.default.BN(-1); -function toHex(bn) { - var value = bn.toString(16); - if (value[0] === '-') { - if ((value.length % 2) === 0) { - return '-0x0' + value.substring(1); - } - return "-0x" + value.substring(1); - } - if ((value.length % 2) === 1) { - return '0x0' + value; - } - return '0x' + value; -} -function toBN(value) { - return bigNumberify(value)._bn; -} -function toBigNumber(bn) { - return new BigNumber(toHex(bn)); -} -var BigNumber = /** @class */ (function (_super) { - __extends(BigNumber, _super); - function BigNumber(value) { - var _this = _super.call(this) || this; - errors.checkNew(_this, BigNumber); - if (typeof (value) === 'string') { - if (bytes_1.isHexString(value)) { - if (value == '0x') { - value = '0x0'; - } - properties_1.defineReadOnly(_this, '_hex', value); - } - else if (value[0] === '-' && bytes_1.isHexString(value.substring(1))) { - properties_1.defineReadOnly(_this, '_hex', value); - } - else if (value.match(/^-?[0-9]*$/)) { - if (value == '') { - value = '0'; - } - properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(value))); - } - else { - errors.throwError('invalid BigNumber string value', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - } - else if (typeof (value) === 'number') { - if (parseInt(String(value)) !== value) { - errors.throwError('underflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'underflow', value: value, outputValue: parseInt(String(value)) }); - } - try { - properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(value))); - } - catch (error) { - errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message }); - } - } - else if (value instanceof BigNumber) { - properties_1.defineReadOnly(_this, '_hex', value._hex); - } - else if (value.toHexString) { - properties_1.defineReadOnly(_this, '_hex', toHex(toBN(value.toHexString()))); - } - else if (bytes_1.isArrayish(value)) { - properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(bytes_1.hexlify(value).substring(2), 16))); - } - else { - errors.throwError('invalid BigNumber value', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - return _this; - } - Object.defineProperty(BigNumber.prototype, "_bn", { - get: function () { - if (this._hex[0] === '-') { - return (new bn_js_1.default.BN(this._hex.substring(3), 16)).mul(BN_1); - } - return new bn_js_1.default.BN(this._hex.substring(2), 16); - }, - enumerable: true, - configurable: true - }); - BigNumber.prototype.fromTwos = function (value) { - return toBigNumber(this._bn.fromTwos(value)); - }; - BigNumber.prototype.toTwos = function (value) { - return toBigNumber(this._bn.toTwos(value)); - }; - BigNumber.prototype.add = function (other) { - return toBigNumber(this._bn.add(toBN(other))); - }; - BigNumber.prototype.sub = function (other) { - return toBigNumber(this._bn.sub(toBN(other))); - }; - BigNumber.prototype.div = function (other) { - var o = bigNumberify(other); - if (o.isZero()) { - errors.throwError('division by zero', errors.NUMERIC_FAULT, { operation: 'divide', fault: 'division by zero' }); - } - return toBigNumber(this._bn.div(toBN(other))); - }; - BigNumber.prototype.mul = function (other) { - return toBigNumber(this._bn.mul(toBN(other))); - }; - BigNumber.prototype.mod = function (other) { - return toBigNumber(this._bn.mod(toBN(other))); - }; - BigNumber.prototype.pow = function (other) { - return toBigNumber(this._bn.pow(toBN(other))); - }; - BigNumber.prototype.maskn = function (value) { - return toBigNumber(this._bn.maskn(value)); - }; - BigNumber.prototype.eq = function (other) { - return this._bn.eq(toBN(other)); - }; - BigNumber.prototype.lt = function (other) { - return this._bn.lt(toBN(other)); - }; - BigNumber.prototype.lte = function (other) { - return this._bn.lte(toBN(other)); - }; - BigNumber.prototype.gt = function (other) { - return this._bn.gt(toBN(other)); - }; - BigNumber.prototype.gte = function (other) { - return this._bn.gte(toBN(other)); - }; - BigNumber.prototype.isZero = function () { - return this._bn.isZero(); - }; - BigNumber.prototype.toNumber = function () { - try { - return this._bn.toNumber(); - } - catch (error) { - errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message }); - } - return null; - }; - BigNumber.prototype.toString = function () { - return this._bn.toString(10); - }; - BigNumber.prototype.toHexString = function () { - return this._hex; - }; - return BigNumber; -}(types_1.BigNumber)); -function bigNumberify(value) { - if (value instanceof BigNumber) { - return value; - } - return new BigNumber(value); -} -exports.bigNumberify = bigNumberify; -exports.ConstantNegativeOne = bigNumberify(-1); -exports.ConstantZero = bigNumberify(0); -exports.ConstantOne = bigNumberify(1); -exports.ConstantTwo = bigNumberify(2); -exports.ConstantWeiPerEther = bigNumberify('1000000000000000000'); diff --git a/truebit-implementation/node_modules/ethers/utils/bytes.js b/truebit-implementation/node_modules/ethers/utils/bytes.js deleted file mode 100644 index 3942a972..00000000 --- a/truebit-implementation/node_modules/ethers/utils/bytes.js +++ /dev/null @@ -1,262 +0,0 @@ -"use strict"; -/** - * Conversion Utilities - * - */ -Object.defineProperty(exports, "__esModule", { value: true }); -var errors = require("./errors"); -exports.AddressZero = '0x0000000000000000000000000000000000000000'; -exports.HashZero = '0x0000000000000000000000000000000000000000000000000000000000000000'; -function isBigNumber(value) { - return !!value._bn; -} -function addSlice(array) { - if (array.slice) { - return array; - } - array.slice = function () { - var args = Array.prototype.slice.call(arguments); - return new Uint8Array(Array.prototype.slice.apply(array, args)); - }; - return array; -} -function isArrayish(value) { - if (!value || parseInt(String(value.length)) != value.length || typeof (value) === 'string') { - return false; - } - for (var i = 0; i < value.length; i++) { - var v = value[i]; - if (v < 0 || v >= 256 || parseInt(String(v)) != v) { - return false; - } - } - return true; -} -exports.isArrayish = isArrayish; -function arrayify(value) { - if (value == null) { - errors.throwError('cannot convert null value to array', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - if (isBigNumber(value)) { - value = value.toHexString(); - } - if (typeof (value) === 'string') { - var match = value.match(/^(0x)?[0-9a-fA-F]*$/); - if (!match) { - errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - if (match[1] !== '0x') { - errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - value = value.substring(2); - if (value.length % 2) { - value = '0' + value; - } - var result = []; - for (var i = 0; i < value.length; i += 2) { - result.push(parseInt(value.substr(i, 2), 16)); - } - return addSlice(new Uint8Array(result)); - } - else if (typeof (value) === 'string') { - } - if (isArrayish(value)) { - return addSlice(new Uint8Array(value)); - } - errors.throwError('invalid arrayify value', null, { arg: 'value', value: value, type: typeof (value) }); - return null; -} -exports.arrayify = arrayify; -function concat(objects) { - var arrays = []; - var length = 0; - for (var i = 0; i < objects.length; i++) { - var object = arrayify(objects[i]); - arrays.push(object); - length += object.length; - } - var result = new Uint8Array(length); - var offset = 0; - for (var i = 0; i < arrays.length; i++) { - result.set(arrays[i], offset); - offset += arrays[i].length; - } - return addSlice(result); -} -exports.concat = concat; -function stripZeros(value) { - var result = arrayify(value); - if (result.length === 0) { - return result; - } - // Find the first non-zero entry - var start = 0; - while (result[start] === 0) { - start++; - } - // If we started with zeros, strip them - if (start) { - result = result.slice(start); - } - return result; -} -exports.stripZeros = stripZeros; -function padZeros(value, length) { - value = arrayify(value); - if (length < value.length) { - throw new Error('cannot pad'); - } - var result = new Uint8Array(length); - result.set(value, length - value.length); - return addSlice(result); -} -exports.padZeros = padZeros; -function isHexString(value, length) { - if (typeof (value) !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) { - return false; - } - if (length && value.length !== 2 + 2 * length) { - return false; - } - return true; -} -exports.isHexString = isHexString; -var HexCharacters = '0123456789abcdef'; -function hexlify(value) { - if (isBigNumber(value)) { - return value.toHexString(); - } - if (typeof (value) === 'number') { - if (value < 0) { - errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - var hex = ''; - while (value) { - hex = HexCharacters[value & 0x0f] + hex; - value = Math.floor(value / 16); - } - if (hex.length) { - if (hex.length % 2) { - hex = '0' + hex; - } - return '0x' + hex; - } - return '0x00'; - } - if (typeof (value) === 'string') { - var match = value.match(/^(0x)?[0-9a-fA-F]*$/); - if (!match) { - errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - if (match[1] !== '0x') { - errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - if (value.length % 2) { - value = '0x0' + value.substring(2); - } - return value; - } - if (isArrayish(value)) { - var result = []; - for (var i = 0; i < value.length; i++) { - var v = value[i]; - result.push(HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]); - } - return '0x' + result.join(''); - } - errors.throwError('invalid hexlify value', null, { arg: 'value', value: value }); - return 'never'; -} -exports.hexlify = hexlify; -function hexDataLength(data) { - if (!isHexString(data) || (data.length % 2) !== 0) { - return null; - } - return (data.length - 2) / 2; -} -exports.hexDataLength = hexDataLength; -function hexDataSlice(data, offset, length) { - if (!isHexString(data)) { - errors.throwError('invalid hex data', errors.INVALID_ARGUMENT, { arg: 'value', value: data }); - } - if ((data.length % 2) !== 0) { - errors.throwError('hex data length must be even', errors.INVALID_ARGUMENT, { arg: 'value', value: data }); - } - offset = 2 + 2 * offset; - if (length != null) { - return '0x' + data.substring(offset, offset + 2 * length); - } - return '0x' + data.substring(offset); -} -exports.hexDataSlice = hexDataSlice; -function hexStripZeros(value) { - if (!isHexString(value)) { - errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - while (value.length > 3 && value.substring(0, 3) === '0x0') { - value = '0x' + value.substring(3); - } - return value; -} -exports.hexStripZeros = hexStripZeros; -function hexZeroPad(value, length) { - if (!isHexString(value)) { - errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - while (value.length < 2 * length + 2) { - value = '0x0' + value.substring(2); - } - return value; -} -exports.hexZeroPad = hexZeroPad; -function isSignature(value) { - return (value && value.r != null && value.s != null); -} -function splitSignature(signature) { - var v = 0; - var r = '0x', s = '0x'; - if (isSignature(signature)) { - if (signature.v == null && signature.recoveryParam == null) { - errors.throwError('at least on of recoveryParam or v must be specified', errors.INVALID_ARGUMENT, { argument: 'signature', value: signature }); - } - r = hexZeroPad(signature.r, 32); - s = hexZeroPad(signature.s, 32); - v = signature.v; - if (typeof (v) === 'string') { - v = parseInt(v, 16); - } - var recoveryParam = signature.recoveryParam; - if (recoveryParam == null && signature.v != null) { - recoveryParam = 1 - (v % 2); - } - v = 27 + recoveryParam; - } - else { - var bytes = arrayify(signature); - if (bytes.length !== 65) { - throw new Error('invalid signature'); - } - r = hexlify(bytes.slice(0, 32)); - s = hexlify(bytes.slice(32, 64)); - v = bytes[64]; - if (v !== 27 && v !== 28) { - v = 27 + (v % 2); - } - } - return { - r: r, - s: s, - recoveryParam: (v - 27), - v: v - }; -} -exports.splitSignature = splitSignature; -function joinSignature(signature) { - signature = splitSignature(signature); - return hexlify(concat([ - signature.r, - signature.s, - (signature.recoveryParam ? '0x1c' : '0x1b') - ])); -} -exports.joinSignature = joinSignature; diff --git a/truebit-implementation/node_modules/ethers/utils/errors.js b/truebit-implementation/node_modules/ethers/utils/errors.js deleted file mode 100644 index 18bef32b..00000000 --- a/truebit-implementation/node_modules/ethers/utils/errors.js +++ /dev/null @@ -1,102 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -// Unknown Error -exports.UNKNOWN_ERROR = 'UNKNOWN_ERROR'; -// Not implemented -exports.NOT_IMPLEMENTED = 'NOT_IMPLEMENTED'; -// Missing new operator to an object -// - name: The name of the class -exports.MISSING_NEW = 'MISSING_NEW'; -// Call exception -// - transaction: the transaction -// - address?: the contract address -// - args?: The arguments passed into the function -// - method?: The Solidity method signature -// - errorSignature?: The EIP848 error signature -// - errorArgs?: The EIP848 error parameters -// - reason: The reason (only for EIP848 "Error(string)") -exports.CALL_EXCEPTION = 'CALL_EXCEPTION'; -// Response from a server was invalid -// - response: The body of the response -//'BAD_RESPONSE', -// Invalid argument (e.g. value is incompatible with type) to a function: -// - arg: The argument name that was invalid -// - value: The value of the argument -exports.INVALID_ARGUMENT = 'INVALID_ARGUMENT'; -// Missing argument to a function: -// - count: The number of arguments received -// - expectedCount: The number of arguments expected -exports.MISSING_ARGUMENT = 'MISSING_ARGUMENT'; -// Too many arguments -// - count: The number of arguments received -// - expectedCount: The number of arguments expected -exports.UNEXPECTED_ARGUMENT = 'UNEXPECTED_ARGUMENT'; -// Numeric Fault -// - operation: the operation being executed -// - fault: the reason this faulted -exports.NUMERIC_FAULT = 'NUMERIC_FAULT'; -// Unsupported operation -// - operation -exports.UNSUPPORTED_OPERATION = 'UNSUPPORTED_OPERATION'; -var _permanentCensorErrors = false; -var _censorErrors = false; -// @TODO: Enum -function throwError(message, code, params) { - if (_censorErrors) { - throw new Error('unknown error'); - } - if (!code) { - code = exports.UNKNOWN_ERROR; - } - if (!params) { - params = {}; - } - var messageDetails = []; - Object.keys(params).forEach(function (key) { - try { - messageDetails.push(key + '=' + JSON.stringify(params[key])); - } - catch (error) { - messageDetails.push(key + '=' + JSON.stringify(params[key].toString())); - } - }); - var reason = message; - if (messageDetails.length) { - message += ' (' + messageDetails.join(', ') + ')'; - } - // @TODO: Any?? - var error = new Error(message); - error.reason = reason; - error.code = code; - Object.keys(params).forEach(function (key) { - error[key] = params[key]; - }); - throw error; -} -exports.throwError = throwError; -function checkNew(self, kind) { - if (!(self instanceof kind)) { - throwError('missing new', exports.MISSING_NEW, { name: kind.name }); - } -} -exports.checkNew = checkNew; -function checkArgumentCount(count, expectedCount, suffix) { - if (!suffix) { - suffix = ''; - } - if (count < expectedCount) { - throwError('missing argument' + suffix, exports.MISSING_ARGUMENT, { count: count, expectedCount: expectedCount }); - } - if (count > expectedCount) { - throwError('too many arguments' + suffix, exports.UNEXPECTED_ARGUMENT, { count: count, expectedCount: expectedCount }); - } -} -exports.checkArgumentCount = checkArgumentCount; -function setCensorship(censorship, permanent) { - if (_permanentCensorErrors) { - throwError('error censorship permanent', exports.UNSUPPORTED_OPERATION, { operation: 'setCersorship' }); - } - _censorErrors = !!censorship; - _permanentCensorErrors = !!permanent; -} -exports.setCensorship = setCensorship; diff --git a/truebit-implementation/node_modules/ethers/utils/hash.js b/truebit-implementation/node_modules/ethers/utils/hash.js deleted file mode 100644 index b6d23fc3..00000000 --- a/truebit-implementation/node_modules/ethers/utils/hash.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var bytes_1 = require("./bytes"); -var utf8_1 = require("./utf8"); -var keccak256_1 = require("./keccak256"); -var Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); -var Partition = new RegExp("^((.*)\\.)?([^.]+)$"); -var UseSTD3ASCIIRules = new RegExp("^[a-z0-9.-]*$"); -function namehash(name) { - name = name.toLowerCase(); - // Supporting the full UTF-8 space requires additional (and large) - // libraries, so for now we simply do not support them. - // It should be fairly easy in the future to support systems with - // String.normalize, but that is future work. - if (!name.match(UseSTD3ASCIIRules)) { - throw new Error('contains invalid UseSTD3ASCIIRules characters'); - } - var result = Zeros; - while (name.length) { - var partition = name.match(Partition); - var label = utf8_1.toUtf8Bytes(partition[3]); - result = keccak256_1.keccak256(bytes_1.concat([result, keccak256_1.keccak256(label)])); - name = partition[2] || ''; - } - return bytes_1.hexlify(result); -} -exports.namehash = namehash; -function id(text) { - return keccak256_1.keccak256(utf8_1.toUtf8Bytes(text)); -} -exports.id = id; -function hashMessage(message) { - var payload = bytes_1.concat([ - utf8_1.toUtf8Bytes('\x19Ethereum Signed Message:\n'), - utf8_1.toUtf8Bytes(String(message.length)), - ((typeof (message) === 'string') ? utf8_1.toUtf8Bytes(message) : message) - ]); - return keccak256_1.keccak256(payload); -} -exports.hashMessage = hashMessage; diff --git a/truebit-implementation/node_modules/ethers/utils/hmac.js b/truebit-implementation/node_modules/ethers/utils/hmac.js deleted file mode 100644 index aaa313d9..00000000 --- a/truebit-implementation/node_modules/ethers/utils/hmac.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var crypto_1 = require("crypto"); -var bytes_1 = require("./bytes"); -var errors = __importStar(require("./errors")); -var supportedAlgorithms = { sha256: true, sha512: true }; -function computeHmac(algorithm, key, data) { - if (!supportedAlgorithms[algorithm]) { - errors.throwError('unsupported algorithm ' + algorithm, errors.UNSUPPORTED_OPERATION, { operation: 'hmac', algorithm: algorithm }); - } - return bytes_1.arrayify(crypto_1.createHmac(algorithm, new Buffer(bytes_1.arrayify(key))).update(new Buffer(bytes_1.arrayify(data))).digest()); -} -exports.computeHmac = computeHmac; diff --git a/truebit-implementation/node_modules/ethers/utils/index.js b/truebit-implementation/node_modules/ethers/utils/index.js deleted file mode 100644 index e4196d4a..00000000 --- a/truebit-implementation/node_modules/ethers/utils/index.js +++ /dev/null @@ -1,97 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// This is SUPER useful, but adds 140kb (even zipped, adds 40kb) -//var unorm = require('unorm'); -var address_1 = require("./address"); -exports.getAddress = address_1.getAddress; -exports.getContractAddress = address_1.getContractAddress; -exports.getIcapAddress = address_1.getIcapAddress; -var abi_coder_1 = require("./abi-coder"); -exports.AbiCoder = abi_coder_1.AbiCoder; -exports.defaultAbiCoder = abi_coder_1.defaultAbiCoder; -exports.formatSignature = abi_coder_1.formatSignature; -exports.formatParamType = abi_coder_1.formatParamType; -exports.parseSignature = abi_coder_1.parseSignature; -exports.parseParamType = abi_coder_1.parseParamType; -var base64 = __importStar(require("./base64")); -exports.base64 = base64; -var bignumber_1 = require("./bignumber"); -exports.bigNumberify = bignumber_1.bigNumberify; -var bytes_1 = require("./bytes"); -exports.arrayify = bytes_1.arrayify; -exports.concat = bytes_1.concat; -exports.hexDataSlice = bytes_1.hexDataSlice; -exports.hexDataLength = bytes_1.hexDataLength; -exports.hexlify = bytes_1.hexlify; -exports.hexStripZeros = bytes_1.hexStripZeros; -exports.hexZeroPad = bytes_1.hexZeroPad; -exports.joinSignature = bytes_1.joinSignature; -exports.padZeros = bytes_1.padZeros; -exports.splitSignature = bytes_1.splitSignature; -exports.stripZeros = bytes_1.stripZeros; -var hash_1 = require("./hash"); -exports.hashMessage = hash_1.hashMessage; -exports.id = hash_1.id; -exports.namehash = hash_1.namehash; -var json_wallet_1 = require("./json-wallet"); -exports.getJsonWalletAddress = json_wallet_1.getJsonWalletAddress; -var keccak256_1 = require("./keccak256"); -exports.keccak256 = keccak256_1.keccak256; -var sha2_1 = require("./sha2"); -exports.sha256 = sha2_1.sha256; -var solidity_1 = require("./solidity"); -exports.solidityKeccak256 = solidity_1.keccak256; -exports.solidityPack = solidity_1.pack; -exports.soliditySha256 = solidity_1.sha256; -var random_bytes_1 = require("./random-bytes"); -exports.randomBytes = random_bytes_1.randomBytes; -var networks_1 = require("./networks"); -exports.getNetwork = networks_1.getNetwork; -var properties_1 = require("./properties"); -exports.defineFrozen = properties_1.defineFrozen; -exports.defineReadOnly = properties_1.defineReadOnly; -exports.resolveProperties = properties_1.resolveProperties; -exports.shallowCopy = properties_1.shallowCopy; -var RLP = __importStar(require("./rlp")); -exports.RLP = RLP; -var secp256k1_1 = require("./secp256k1"); -exports.verifyMessage = secp256k1_1.verifyMessage; -var transaction_1 = require("./transaction"); -exports.parseTransaction = transaction_1.parse; -exports.serializeTransaction = transaction_1.serialize; -var utf8_1 = require("./utf8"); -exports.toUtf8Bytes = utf8_1.toUtf8Bytes; -exports.toUtf8String = utf8_1.toUtf8String; -var units_1 = require("./units"); -exports.formatEther = units_1.formatEther; -exports.parseEther = units_1.parseEther; -exports.formatUnits = units_1.formatUnits; -exports.parseUnits = units_1.parseUnits; -var web_1 = require("./web"); -exports.fetchJson = web_1.fetchJson; -var types = __importStar(require("./types")); -exports.types = types; -var errors = __importStar(require("./errors")); -exports.errors = errors; -// NFKD (decomposed) -//const etherSymbol = '\uD835\uDF63'; -// NFKC (composed) -var etherSymbol = '\u039e'; -exports.etherSymbol = etherSymbol; -var constants = { - AddressZero: bytes_1.AddressZero, - HashZero: bytes_1.HashZero, - NegativeOne: bignumber_1.ConstantNegativeOne, - Zero: bignumber_1.ConstantZero, - One: bignumber_1.ConstantOne, - Two: bignumber_1.ConstantTwo, - WeiPerEther: bignumber_1.ConstantWeiPerEther -}; -exports.constants = constants; diff --git a/truebit-implementation/node_modules/ethers/utils/json-wallet.js b/truebit-implementation/node_modules/ethers/utils/json-wallet.js deleted file mode 100644 index f08aabde..00000000 --- a/truebit-implementation/node_modules/ethers/utils/json-wallet.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var address_1 = require("./address"); -function isCrowdsaleWallet(json) { - try { - var data = JSON.parse(json); - } - catch (error) { - return false; - } - return (data.encseed && data.ethaddr); -} -exports.isCrowdsaleWallet = isCrowdsaleWallet; -function isSecretStorageWallet(json) { - try { - var data = JSON.parse(json); - } - catch (error) { - return false; - } - if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) { - return false; - } - // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff - return true; -} -exports.isSecretStorageWallet = isSecretStorageWallet; -//export function isJsonWallet(json: string): boolean { -// return (isSecretStorageWallet(json) || isCrowdsaleWallet(json)); -//} -function getJsonWalletAddress(json) { - if (isCrowdsaleWallet(json)) { - try { - return address_1.getAddress(JSON.parse(json).ethaddr); - } - catch (error) { - return null; - } - } - if (isSecretStorageWallet(json)) { - try { - return address_1.getAddress(JSON.parse(json).address); - } - catch (error) { - return null; - } - } - return null; -} -exports.getJsonWalletAddress = getJsonWalletAddress; diff --git a/truebit-implementation/node_modules/ethers/utils/keccak256.js b/truebit-implementation/node_modules/ethers/utils/keccak256.js deleted file mode 100644 index a673ddbe..00000000 --- a/truebit-implementation/node_modules/ethers/utils/keccak256.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var sha3 = require("js-sha3"); -var bytes_1 = require("./bytes"); -function keccak256(data) { - return '0x' + sha3.keccak_256(bytes_1.arrayify(data)); -} -exports.keccak256 = keccak256; diff --git a/truebit-implementation/node_modules/ethers/utils/networks.js b/truebit-implementation/node_modules/ethers/utils/networks.js deleted file mode 100644 index afa971ba..00000000 --- a/truebit-implementation/node_modules/ethers/utils/networks.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var errors = __importStar(require("../utils/errors")); -var homestead = { - chainId: 1, - ensAddress: "0x314159265dd8dbb310642f98f50c066173c1259b", - name: "homestead" -}; -var ropsten = { - chainId: 3, - ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010", - name: "ropsten" -}; -var networks = { - unspecified: { - chainId: 0 - }, - homestead: homestead, - mainnet: homestead, - morden: { - chainId: 2 - }, - ropsten: ropsten, - testnet: ropsten, - rinkeby: { - chainId: 4, - ensAddress: "0xe7410170f87102DF0055eB195163A03B7F2Bff4A" - }, - kovan: { - chainId: 42 - }, - classic: { - chainId: 61 - } -}; -/** - * getNetwork - * - * Converts a named common networks or chain ID (network ID) to a Network - * and verifies a network is a valid Network.. - */ -function getNetwork(network) { - // No network (null) or unspecified (chainId = 0) - if (!network) { - return null; - } - if (typeof (network) === 'number') { - for (var name in networks) { - var n_1 = networks[name]; - if (n_1.chainId === network) { - return { - name: name, - chainId: n_1.chainId, - ensAddress: n_1.ensAddress - }; - } - } - return { - chainId: network, - name: 'unknown' - }; - } - if (typeof (network) === 'string') { - var n_2 = networks[network]; - if (n_2 == null) { - return null; - } - return { - name: network, - chainId: n_2.chainId, - ensAddress: n_2.ensAddress - }; - } - var n = networks[network.name]; - // Not a standard network; check that it is a valid network in general - if (!n) { - if (typeof (n.chainId) !== 'number') { - errors.throwError('invalid network chainId', errors.INVALID_ARGUMENT, { arg: 'network', value: network }); - } - return network; - } - // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155) - if (network.chainId !== 0 && network.chainId !== n.chainId) { - errors.throwError('network chainId mismatch', errors.INVALID_ARGUMENT, { arg: 'network', value: network }); - } - // Standard Network - return { - name: network.name, - chainId: n.chainId, - ensAddress: n.ensAddress - }; -} -exports.getNetwork = getNetwork; diff --git a/truebit-implementation/node_modules/ethers/utils/pbkdf2.js b/truebit-implementation/node_modules/ethers/utils/pbkdf2.js deleted file mode 100644 index 56668199..00000000 --- a/truebit-implementation/node_modules/ethers/utils/pbkdf2.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var crypto_1 = require("crypto"); -var bytes_1 = require("./bytes"); -function bufferify(value) { - return new Buffer(bytes_1.arrayify(value)); -} -function pbkdf2(password, salt, iterations, keylen, hashAlgorithm) { - return bytes_1.arrayify(crypto_1.pbkdf2Sync(bufferify(password), bufferify(salt), iterations, keylen, hashAlgorithm)); -} -exports.pbkdf2 = pbkdf2; diff --git a/truebit-implementation/node_modules/ethers/utils/properties.js b/truebit-implementation/node_modules/ethers/utils/properties.js deleted file mode 100644 index 9af6317f..00000000 --- a/truebit-implementation/node_modules/ethers/utils/properties.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -function defineReadOnly(object, name, value) { - Object.defineProperty(object, name, { - enumerable: true, - value: value, - writable: false, - }); -} -exports.defineReadOnly = defineReadOnly; -function defineFrozen(object, name, value) { - var frozen = JSON.stringify(value); - Object.defineProperty(object, name, { - enumerable: true, - get: function () { return JSON.parse(frozen); } - }); -} -exports.defineFrozen = defineFrozen; -function resolveProperties(object) { - var result = {}; - var promises = []; - Object.keys(object).forEach(function (key) { - var value = object[key]; - if (value instanceof Promise) { - promises.push(value.then(function (value) { - result[key] = value; - return null; - })); - } - else { - result[key] = value; - } - }); - return Promise.all(promises).then(function () { - return result; - }); -} -exports.resolveProperties = resolveProperties; -function shallowCopy(object) { - var result = {}; - for (var key in object) { - result[key] = object[key]; - } - return result; -} -exports.shallowCopy = shallowCopy; -function jsonCopy(object) { - return JSON.parse(JSON.stringify(object)); -} -exports.jsonCopy = jsonCopy; diff --git a/truebit-implementation/node_modules/ethers/utils/random-bytes.js b/truebit-implementation/node_modules/ethers/utils/random-bytes.js deleted file mode 100644 index fa6c8faa..00000000 --- a/truebit-implementation/node_modules/ethers/utils/random-bytes.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var bytes_1 = require("./bytes"); -var crypto_1 = require("crypto"); -function randomBytes(length) { - return bytes_1.arrayify(crypto_1.randomBytes(length)); -} -exports.randomBytes = randomBytes; diff --git a/truebit-implementation/node_modules/ethers/utils/rlp.js b/truebit-implementation/node_modules/ethers/utils/rlp.js deleted file mode 100644 index 94773b2f..00000000 --- a/truebit-implementation/node_modules/ethers/utils/rlp.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; -//See: https://github.com/ethereum/wiki/wiki/RLP -Object.defineProperty(exports, "__esModule", { value: true }); -var bytes_1 = require("./bytes"); -function arrayifyInteger(value) { - var result = []; - while (value) { - result.unshift(value & 0xff); - value >>= 8; - } - return result; -} -function unarrayifyInteger(data, offset, length) { - var result = 0; - for (var i = 0; i < length; i++) { - result = (result * 256) + data[offset + i]; - } - return result; -} -function _encode(object) { - if (Array.isArray(object)) { - var payload = []; - object.forEach(function (child) { - payload = payload.concat(_encode(child)); - }); - if (payload.length <= 55) { - payload.unshift(0xc0 + payload.length); - return payload; - } - var length = arrayifyInteger(payload.length); - length.unshift(0xf7 + length.length); - return length.concat(payload); - } - var data = Array.prototype.slice.call(bytes_1.arrayify(object)); - if (data.length === 1 && data[0] <= 0x7f) { - return data; - } - else if (data.length <= 55) { - data.unshift(0x80 + data.length); - return data; - } - var length = arrayifyInteger(data.length); - length.unshift(0xb7 + length.length); - return length.concat(data); -} -function encode(object) { - return bytes_1.hexlify(_encode(object)); -} -exports.encode = encode; -function _decodeChildren(data, offset, childOffset, length) { - var result = []; - while (childOffset < offset + 1 + length) { - var decoded = _decode(data, childOffset); - result.push(decoded.result); - childOffset += decoded.consumed; - if (childOffset > offset + 1 + length) { - throw new Error('invalid rlp'); - } - } - return { consumed: (1 + length), result: result }; -} -// returns { consumed: number, result: Object } -function _decode(data, offset) { - if (data.length === 0) { - throw new Error('invalid rlp data'); - } - // Array with extra length prefix - if (data[offset] >= 0xf8) { - var lengthLength = data[offset] - 0xf7; - if (offset + 1 + lengthLength > data.length) { - throw new Error('too short'); - } - var length = unarrayifyInteger(data, offset + 1, lengthLength); - if (offset + 1 + lengthLength + length > data.length) { - throw new Error('to short'); - } - return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length); - } - else if (data[offset] >= 0xc0) { - var length = data[offset] - 0xc0; - if (offset + 1 + length > data.length) { - throw new Error('invalid rlp data'); - } - return _decodeChildren(data, offset, offset + 1, length); - } - else if (data[offset] >= 0xb8) { - var lengthLength = data[offset] - 0xb7; - if (offset + 1 + lengthLength > data.length) { - throw new Error('invalid rlp data'); - } - var length = unarrayifyInteger(data, offset + 1, lengthLength); - if (offset + 1 + lengthLength + length > data.length) { - throw new Error('invalid rlp data'); - } - var result = bytes_1.hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length)); - return { consumed: (1 + lengthLength + length), result: result }; - } - else if (data[offset] >= 0x80) { - var length = data[offset] - 0x80; - if (offset + 1 + length > data.length) { - throw new Error('invlaid rlp data'); - } - var result = bytes_1.hexlify(data.slice(offset + 1, offset + 1 + length)); - return { consumed: (1 + length), result: result }; - } - return { consumed: 1, result: bytes_1.hexlify(data[offset]) }; -} -function decode(data) { - var bytes = bytes_1.arrayify(data); - var decoded = _decode(bytes, 0); - if (decoded.consumed !== bytes.length) { - throw new Error('invalid rlp data'); - } - return decoded.result; -} -exports.decode = decode; diff --git a/truebit-implementation/node_modules/ethers/utils/secp256k1.js b/truebit-implementation/node_modules/ethers/utils/secp256k1.js deleted file mode 100644 index ed88038e..00000000 --- a/truebit-implementation/node_modules/ethers/utils/secp256k1.js +++ /dev/null @@ -1,96 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var address_1 = require("./address"); -var bytes_1 = require("./bytes"); -var hash_1 = require("./hash"); -var keccak256_1 = require("./keccak256"); -var properties_1 = require("./properties"); -var errors = __importStar(require("./errors")); -var KeyPair = /** @class */ (function () { - function KeyPair(privateKey) { - var keyPair = curve.keyFromPrivate(bytes_1.arrayify(privateKey)); - properties_1.defineReadOnly(this, 'privateKey', bytes_1.hexlify(keyPair.priv.toArray('be', 32))); - properties_1.defineReadOnly(this, 'publicKey', '0x' + keyPair.getPublic(false, 'hex')); - properties_1.defineReadOnly(this, 'compressedPublicKey', '0x' + keyPair.getPublic(true, 'hex')); - properties_1.defineReadOnly(this, 'publicKeyBytes', keyPair.getPublic().encode(null, true)); - } - KeyPair.prototype.sign = function (digest) { - var keyPair = curve.keyFromPrivate(bytes_1.arrayify(this.privateKey)); - var signature = keyPair.sign(bytes_1.arrayify(digest), { canonical: true }); - return { - recoveryParam: signature.recoveryParam, - r: bytes_1.hexZeroPad('0x' + signature.r.toString(16), 32), - s: bytes_1.hexZeroPad('0x' + signature.s.toString(16), 32), - v: 27 + signature.recoveryParam - }; - }; - return KeyPair; -}()); -exports.KeyPair = KeyPair; -function recoverPublicKey(digest, signature) { - var sig = { - r: bytes_1.arrayify(signature.r), - s: bytes_1.arrayify(signature.s) - }; - return '0x' + curve.recoverPubKey(bytes_1.arrayify(digest), sig, signature.recoveryParam).encode('hex', false); -} -exports.recoverPublicKey = recoverPublicKey; -function computePublicKey(key, compressed) { - var bytes = bytes_1.arrayify(key); - if (bytes.length === 32) { - var keyPair = new KeyPair(bytes); - if (compressed) { - return keyPair.compressedPublicKey; - } - return keyPair.publicKey; - } - else if (bytes.length === 33) { - if (compressed) { - return bytes_1.hexlify(bytes); - } - return '0x' + curve.keyFromPublic(bytes).getPublic(false, 'hex'); - } - else if (bytes.length === 65) { - if (!compressed) { - return bytes_1.hexlify(bytes); - } - return '0x' + curve.keyFromPublic(bytes).getPublic(true, 'hex'); - } - errors.throwError('invalid public or private key', errors.INVALID_ARGUMENT, { arg: 'key', value: '[REDACTED]' }); - return null; -} -exports.computePublicKey = computePublicKey; -function recoverAddress(digest, signature) { - return computeAddress(recoverPublicKey(digest, signature)); -} -exports.recoverAddress = recoverAddress; -function computeAddress(key) { - // Strip off the leading "0x04" - var publicKey = '0x' + computePublicKey(key).slice(4); - return address_1.getAddress('0x' + keccak256_1.keccak256(publicKey).substring(26)); -} -exports.computeAddress = computeAddress; -function verifyMessage(message, signature) { - var sig = bytes_1.splitSignature(signature); - var digest = hash_1.hashMessage(message); - return recoverAddress(digest, { - r: sig.r, - s: sig.s, - recoveryParam: sig.recoveryParam - }); -} -exports.verifyMessage = verifyMessage; -// !!!!!! IMPORTANT !!!!!!!! -// -// This import MUST be at the bottom, otehrwise browserify executes several imports -// BEFORE they are exported, resulting in undefined -var elliptic_1 = require("elliptic"); -var curve = new elliptic_1.ec('secp256k1'); -exports.N = '0x' + curve.n.toString(16); diff --git a/truebit-implementation/node_modules/ethers/utils/sha2.js b/truebit-implementation/node_modules/ethers/utils/sha2.js deleted file mode 100644 index ef0525c2..00000000 --- a/truebit-implementation/node_modules/ethers/utils/sha2.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var hash_js_1 = __importDefault(require("hash.js")); -var bytes_1 = require("./bytes"); -function sha256(data) { - return '0x' + (hash_js_1.default.sha256().update(bytes_1.arrayify(data)).digest('hex')); -} -exports.sha256 = sha256; -function sha512(data) { - return '0x' + (hash_js_1.default.sha512().update(bytes_1.arrayify(data)).digest('hex')); -} -exports.sha512 = sha512; diff --git a/truebit-implementation/node_modules/ethers/utils/shims.js b/truebit-implementation/node_modules/ethers/utils/shims.js deleted file mode 100644 index 5bf7f0d3..00000000 --- a/truebit-implementation/node_modules/ethers/utils/shims.js +++ /dev/null @@ -1,4 +0,0 @@ -"use strict"; -/* no shims for node */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.platform = 'node'; diff --git a/truebit-implementation/node_modules/ethers/utils/solidity.js b/truebit-implementation/node_modules/ethers/utils/solidity.js deleted file mode 100644 index 22e44945..00000000 --- a/truebit-implementation/node_modules/ethers/utils/solidity.js +++ /dev/null @@ -1,91 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var bignumber_1 = require("./bignumber"); -var bytes_1 = require("./bytes"); -var utf8_1 = require("./utf8"); -var keccak256_1 = require("./keccak256"); -var sha2_1 = require("./sha2"); -var regexBytes = new RegExp("^bytes([0-9]+)$"); -var regexNumber = new RegExp("^(u?int)([0-9]*)$"); -var regexArray = new RegExp("^(.*)\\[([0-9]*)\\]$"); -var Zeros = '0000000000000000000000000000000000000000000000000000000000000000'; -function _pack(type, value, isArray) { - switch (type) { - case 'address': - if (isArray) { - return bytes_1.padZeros(value, 32); - } - return bytes_1.arrayify(value); - case 'string': - return utf8_1.toUtf8Bytes(value); - case 'bytes': - return bytes_1.arrayify(value); - case 'bool': - value = (value ? '0x01' : '0x00'); - if (isArray) { - return bytes_1.padZeros(value, 32); - } - return bytes_1.arrayify(value); - } - var match = type.match(regexNumber); - if (match) { - //var signed = (match[1] === 'int') - var size = parseInt(match[2] || "256"); - if ((size % 8 != 0) || size === 0 || size > 256) { - throw new Error('invalid number type - ' + type); - } - if (isArray) { - size = 256; - } - value = bignumber_1.bigNumberify(value).toTwos(size); - return bytes_1.padZeros(value, size / 8); - } - match = type.match(regexBytes); - if (match) { - var size = parseInt(match[1]); - if (String(size) != match[1] || size === 0 || size > 32) { - throw new Error('invalid number type - ' + type); - } - if (bytes_1.arrayify(value).byteLength !== size) { - throw new Error('invalid value for ' + type); - } - if (isArray) { - return bytes_1.arrayify((value + Zeros).substring(0, 66)); - } - return value; - } - match = type.match(regexArray); - if (match && Array.isArray(value)) { - var baseType = match[1]; - var count = parseInt(match[2] || String(value.length)); - if (count != value.length) { - throw new Error('invalid value for ' + type); - } - var result = []; - value.forEach(function (value) { - result.push(_pack(baseType, value, true)); - }); - return bytes_1.concat(result); - } - throw new Error('unknown type - ' + type); -} -// @TODO: Array Enum -function pack(types, values) { - if (types.length != values.length) { - throw new Error('type/value count mismatch'); - } - var tight = []; - types.forEach(function (type, index) { - tight.push(_pack(type, values[index])); - }); - return bytes_1.hexlify(bytes_1.concat(tight)); -} -exports.pack = pack; -function keccak256(types, values) { - return keccak256_1.keccak256(pack(types, values)); -} -exports.keccak256 = keccak256; -function sha256(types, values) { - return sha2_1.sha256(pack(types, values)); -} -exports.sha256 = sha256; diff --git a/truebit-implementation/node_modules/ethers/utils/transaction.js b/truebit-implementation/node_modules/ethers/utils/transaction.js deleted file mode 100644 index e41bd7ce..00000000 --- a/truebit-implementation/node_modules/ethers/utils/transaction.js +++ /dev/null @@ -1,147 +0,0 @@ -"use strict"; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var address_1 = require("./address"); -var bignumber_1 = require("./bignumber"); -var bytes_1 = require("./bytes"); -var keccak256_1 = require("./keccak256"); -var RLP = __importStar(require("./rlp")); -var errors = __importStar(require("./errors")); -/* !!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!!!!!!!!!! - * - * Due to a weird ordering-issue with browserify, there is an - * import for secp256k1 at the bottom of the file; it must be - * required AFTER the parse and serialize exports have been - * defined. - * - */ -function handleAddress(value) { - if (value === '0x') { - return null; - } - return address_1.getAddress(value); -} -function handleNumber(value) { - if (value === '0x') { - return bignumber_1.ConstantZero; - } - return bignumber_1.bigNumberify(value); -} -var transactionFields = [ - { name: 'nonce', maxLength: 32 }, - { name: 'gasPrice', maxLength: 32 }, - { name: 'gasLimit', maxLength: 32 }, - { name: 'to', length: 20 }, - { name: 'value', maxLength: 32 }, - { name: 'data' }, -]; -function serialize(transaction, signature) { - var raw = []; - transactionFields.forEach(function (fieldInfo) { - var value = transaction[fieldInfo.name] || ([]); - value = bytes_1.arrayify(bytes_1.hexlify(value)); - // Fixed-width field - if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) { - errors.throwError('invalid length for ' + fieldInfo.name, errors.INVALID_ARGUMENT, { arg: ('transaction' + fieldInfo.name), value: value }); - } - // Variable-width (with a maximum) - if (fieldInfo.maxLength) { - value = bytes_1.stripZeros(value); - if (value.length > fieldInfo.maxLength) { - errors.throwError('invalid length for ' + fieldInfo.name, errors.INVALID_ARGUMENT, { arg: ('transaction' + fieldInfo.name), value: value }); - } - } - raw.push(bytes_1.hexlify(value)); - }); - if (transaction.chainId != null && transaction.chainId !== 0) { - raw.push(bytes_1.hexlify(transaction.chainId)); - raw.push('0x'); - raw.push('0x'); - } - var unsignedTransaction = RLP.encode(raw); - // Requesting an unsigned transation - if (!signature) { - return unsignedTransaction; - } - // The splitSignature will ensure the transaction has a recoveryParam in the - // case that the signTransaction function only adds a v. - signature = bytes_1.splitSignature(signature); - // We pushed a chainId and null r, s on for hashing only; remove those - var v = 27 + signature.recoveryParam; - if (raw.length === 9) { - raw.pop(); - raw.pop(); - raw.pop(); - v += transaction.chainId * 2 + 8; - } - raw.push(bytes_1.hexlify(v)); - raw.push(bytes_1.stripZeros(bytes_1.arrayify(signature.r))); - raw.push(bytes_1.stripZeros(bytes_1.arrayify(signature.s))); - return RLP.encode(raw); -} -exports.serialize = serialize; -function parse(rawTransaction) { - var transaction = RLP.decode(rawTransaction); - if (transaction.length !== 9 && transaction.length !== 6) { - errors.throwError('invalid raw transaction', errors.INVALID_ARGUMENT, { arg: 'rawTransactin', value: rawTransaction }); - } - var tx = { - nonce: handleNumber(transaction[0]).toNumber(), - gasPrice: handleNumber(transaction[1]), - gasLimit: handleNumber(transaction[2]), - to: handleAddress(transaction[3]), - value: handleNumber(transaction[4]), - data: transaction[5], - chainId: 0 - }; - // Legacy unsigned transaction - if (transaction.length === 6) { - return tx; - } - try { - tx.v = bignumber_1.bigNumberify(transaction[6]).toNumber(); - } - catch (error) { - console.log(error); - return tx; - } - tx.r = bytes_1.hexZeroPad(transaction[7], 32); - tx.s = bytes_1.hexZeroPad(transaction[8], 32); - if (bignumber_1.bigNumberify(tx.r).isZero() && bignumber_1.bigNumberify(tx.s).isZero()) { - // EIP-155 unsigned transaction - tx.chainId = tx.v; - tx.v = 0; - } - else { - // Signed Tranasaction - tx.chainId = Math.floor((tx.v - 35) / 2); - if (tx.chainId < 0) { - tx.chainId = 0; - } - var recoveryParam = tx.v - 27; - var raw = transaction.slice(0, 6); - if (tx.chainId !== 0) { - raw.push(bytes_1.hexlify(tx.chainId)); - raw.push('0x'); - raw.push('0x'); - recoveryParam -= tx.chainId * 2 + 8; - } - var digest = keccak256_1.keccak256(RLP.encode(raw)); - try { - tx.from = secp256k1_1.recoverAddress(digest, { r: bytes_1.hexlify(tx.r), s: bytes_1.hexlify(tx.s), recoveryParam: recoveryParam }); - } - catch (error) { - console.log(error); - } - tx.hash = keccak256_1.keccak256(rawTransaction); - } - return tx; -} -exports.parse = parse; -var secp256k1_1 = require("./secp256k1"); diff --git a/truebit-implementation/node_modules/ethers/utils/types.js b/truebit-implementation/node_modules/ethers/utils/types.js deleted file mode 100644 index 6e2a0028..00000000 --- a/truebit-implementation/node_modules/ethers/utils/types.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -/////////////////////////////// -// Bytes -Object.defineProperty(exports, "__esModule", { value: true }); -/////////////////////////////// -// BigNumber -var BigNumber = /** @class */ (function () { - function BigNumber() { - } - return BigNumber; -}()); -exports.BigNumber = BigNumber; -; -; -; -/////////////////////////////// -// Interface -var Indexed = /** @class */ (function () { - function Indexed() { - } - return Indexed; -}()); -exports.Indexed = Indexed; -/** - * Provider - * - * Note: We use an abstract class so we can use instanceof to determine if an - * object is a Provider. - */ -var MinimalProvider = /** @class */ (function () { - function MinimalProvider() { - } - return MinimalProvider; -}()); -exports.MinimalProvider = MinimalProvider; -/** - * Signer - * - * Note: We use an abstract class so we can use instanceof to determine if an - * object is a Signer. - */ -var Signer = /** @class */ (function () { - function Signer() { - } - return Signer; -}()); -exports.Signer = Signer; -/////////////////////////////// -// HDNode -var HDNode = /** @class */ (function () { - function HDNode() { - } - return HDNode; -}()); -exports.HDNode = HDNode; diff --git a/truebit-implementation/node_modules/ethers/utils/units.js b/truebit-implementation/node_modules/ethers/utils/units.js deleted file mode 100644 index 66dd1092..00000000 --- a/truebit-implementation/node_modules/ethers/utils/units.js +++ /dev/null @@ -1,149 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var bignumber_1 = require("./bignumber"); -var errors = __importStar(require("./errors")); -var names = [ - 'wei', - 'kwei', - 'Mwei', - 'Gwei', - 'szabo', - 'finny', - 'ether', -]; -var unitInfos = {}; -function _getUnitInfo(value) { - return { - decimals: value.length - 1, - tenPower: bignumber_1.bigNumberify(value) - }; -} -// Build cache of common units -(function () { - // Cache the common units - var value = '1'; - names.forEach(function (name) { - var info = _getUnitInfo(value); - unitInfos[name.toLowerCase()] = info; - unitInfos[String(info.decimals)] = info; - value += '000'; - }); -})(); -function getUnitInfo(name) { - // Try the cache - var info = unitInfos[String(name).toLowerCase()]; - if (!info && typeof (name) === 'number' && parseInt(String(name)) == name && name >= 0 && name <= 256) { - var value = '1'; - for (var i = 0; i < name; i++) { - value += '0'; - } - info = _getUnitInfo(value); - } - // Make sure we got something - if (!info) { - errors.throwError('invalid unitType', errors.INVALID_ARGUMENT, { arg: 'name', value: name }); - } - return info; -} -function formatUnits(value, unitType, options) { - /* - if (typeof(unitType) === 'object' && !options) { - options = unitType; - unitType = undefined; - } - if (unitType == null) { unitType = 18; } - */ - if (!options) { - options = {}; - } - var unitInfo = getUnitInfo(unitType); - // Make sure wei is a big number (convert as necessary) - value = bignumber_1.bigNumberify(value); - var negative = value.lt(bignumber_1.ConstantZero); - if (negative) { - value = value.mul(bignumber_1.ConstantNegativeOne); - } - var fraction = value.mod(unitInfo.tenPower).toString(); - while (fraction.length < unitInfo.decimals) { - fraction = '0' + fraction; - } - // Strip off trailing zeros (but keep one if would otherwise be bare decimal point) - if (!options.pad) { - fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1]; - } - var whole = value.div(unitInfo.tenPower).toString(); - if (options.commify) { - whole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - value = whole + '.' + fraction; - if (negative) { - value = '-' + value; - } - return value; -} -exports.formatUnits = formatUnits; -function parseUnits(value, unitType) { - if (unitType == null) { - unitType = 18; - } - var unitInfo = getUnitInfo(unitType); - if (typeof (value) !== 'string' || !value.match(/^-?[0-9.,]+$/)) { - errors.throwError('invalid decimal value', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - // Remove commas - var value = value.replace(/,/g, ''); - if (unitInfo.decimals === 0) { - return bignumber_1.bigNumberify(value); - } - // Is it negative? - var negative = (value.substring(0, 1) === '-'); - if (negative) { - value = value.substring(1); - } - if (value === '.') { - errors.throwError('missing value', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - // Split it into a whole and fractional part - var comps = value.split('.'); - if (comps.length > 2) { - errors.throwError('too many decimal points', errors.INVALID_ARGUMENT, { arg: 'value', value: value }); - } - var whole = comps[0], fraction = comps[1]; - if (!whole) { - whole = '0'; - } - if (!fraction) { - fraction = '0'; - } - // Prevent underflow - if (fraction.length > unitInfo.decimals) { - errors.throwError('underflow occurred', errors.NUMERIC_FAULT, { operation: 'division', fault: "underflow" }); - } - // Fully pad the string with zeros to get to wei - while (fraction.length < unitInfo.decimals) { - fraction += '0'; - } - var wholeValue = bignumber_1.bigNumberify(whole); - var fractionValue = bignumber_1.bigNumberify(fraction); - var wei = (wholeValue.mul(unitInfo.tenPower)).add(fractionValue); - if (negative) { - wei = wei.mul(bignumber_1.ConstantNegativeOne); - } - return wei; -} -exports.parseUnits = parseUnits; -function formatEther(wei, options) { - return formatUnits(wei, 18, options); -} -exports.formatEther = formatEther; -function parseEther(ether) { - return parseUnits(ether, 18); -} -exports.parseEther = parseEther; diff --git a/truebit-implementation/node_modules/ethers/utils/utf8.js b/truebit-implementation/node_modules/ethers/utils/utf8.js deleted file mode 100644 index 0b437a35..00000000 --- a/truebit-implementation/node_modules/ethers/utils/utf8.js +++ /dev/null @@ -1,123 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -var bytes_1 = require("./bytes"); -var UnicodeNormalizationForm; -(function (UnicodeNormalizationForm) { - UnicodeNormalizationForm["current"] = ""; - UnicodeNormalizationForm["NFC"] = "NFC"; - UnicodeNormalizationForm["NFD"] = "NFD"; - UnicodeNormalizationForm["NFKC"] = "NFKC"; - UnicodeNormalizationForm["NFKD"] = "NFKD"; -})(UnicodeNormalizationForm = exports.UnicodeNormalizationForm || (exports.UnicodeNormalizationForm = {})); -; -// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array -function toUtf8Bytes(str, form) { - if (form === void 0) { form = UnicodeNormalizationForm.current; } - if (form != UnicodeNormalizationForm.current) { - str = str.normalize(form); - } - var result = []; - var offset = 0; - for (var i = 0; i < str.length; i++) { - var c = str.charCodeAt(i); - if (c < 128) { - result[offset++] = c; - } - else if (c < 2048) { - result[offset++] = (c >> 6) | 192; - result[offset++] = (c & 63) | 128; - } - else if (((c & 0xFC00) == 0xD800) && (i + 1) < str.length && ((str.charCodeAt(i + 1) & 0xFC00) == 0xDC00)) { - // Surrogate Pair - c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF); - result[offset++] = (c >> 18) | 240; - result[offset++] = ((c >> 12) & 63) | 128; - result[offset++] = ((c >> 6) & 63) | 128; - result[offset++] = (c & 63) | 128; - } - else { - result[offset++] = (c >> 12) | 224; - result[offset++] = ((c >> 6) & 63) | 128; - result[offset++] = (c & 63) | 128; - } - } - return bytes_1.arrayify(result); -} -exports.toUtf8Bytes = toUtf8Bytes; -; -// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499 -function toUtf8String(bytes) { - bytes = bytes_1.arrayify(bytes); - var result = ''; - var i = 0; - // Invalid bytes are ignored - while (i < bytes.length) { - var c = bytes[i++]; - if (c >> 7 == 0) { - // 0xxx xxxx - result += String.fromCharCode(c); - continue; - } - // Invalid starting byte - if (c >> 6 == 0x02) { - continue; - } - // Multibyte; how many bytes left for thus character? - var extraLength = null; - if (c >> 5 == 0x06) { - extraLength = 1; - } - else if (c >> 4 == 0x0e) { - extraLength = 2; - } - else if (c >> 3 == 0x1e) { - extraLength = 3; - } - else if (c >> 2 == 0x3e) { - extraLength = 4; - } - else if (c >> 1 == 0x7e) { - extraLength = 5; - } - else { - continue; - } - // Do we have enough bytes in our data? - if (i + extraLength > bytes.length) { - // If there is an invalid unprocessed byte, try to continue - for (; i < bytes.length; i++) { - if (bytes[i] >> 6 != 0x02) { - break; - } - } - if (i != bytes.length) - continue; - // All leftover bytes are valid. - return result; - } - // Remove the UTF-8 prefix from the char (res) - var res = c & ((1 << (8 - extraLength - 1)) - 1); - var count; - for (count = 0; count < extraLength; count++) { - var nextChar = bytes[i++]; - // Is the char valid multibyte part? - if (nextChar >> 6 != 0x02) { - break; - } - ; - res = (res << 6) | (nextChar & 0x3f); - } - if (count != extraLength) { - i--; - continue; - } - if (res <= 0xffff) { - result += String.fromCharCode(res); - continue; - } - res -= 0x10000; - result += String.fromCharCode(((res >> 10) & 0x3ff) + 0xd800, (res & 0x3ff) + 0xdc00); - } - return result; -} -exports.toUtf8String = toUtf8String; diff --git a/truebit-implementation/node_modules/ethers/utils/web.js b/truebit-implementation/node_modules/ethers/utils/web.js deleted file mode 100644 index 94d79f6f..00000000 --- a/truebit-implementation/node_modules/ethers/utils/web.js +++ /dev/null @@ -1,173 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var xmlhttprequest_1 = require("xmlhttprequest"); -var base64_1 = require("./base64"); -var utf8_1 = require("./utf8"); -var errors = __importStar(require("./errors")); -function fetchJson(connection, json, processFunc) { - var headers = []; - var url = null; - if (typeof (connection) === 'string') { - url = connection; - } - else if (typeof (connection) === 'object') { - if (connection.url == null) { - errors.throwError('missing URL', errors.MISSING_ARGUMENT, { arg: 'url' }); - } - url = connection.url; - if (connection.user != null && connection.password != null) { - if (url.substring(0, 6) !== 'https:' && connection.allowInsecure !== true) { - errors.throwError('basic authentication requires a secure https url', errors.INVALID_ARGUMENT, { arg: 'url', url: url, user: connection.user, password: '[REDACTED]' }); - } - var authorization = connection.user + ':' + connection.password; - headers.push({ - key: 'Authorization', - value: 'Basic ' + base64_1.encode(utf8_1.toUtf8Bytes(authorization)) - }); - } - } - return new Promise(function (resolve, reject) { - var request = new xmlhttprequest_1.XMLHttpRequest(); - if (json) { - request.open('POST', url, true); - headers.push({ key: 'Content-Type', value: 'application/json' }); - } - else { - request.open('GET', url, true); - } - headers.forEach(function (header) { - request.setRequestHeader(header.key, header.value); - }); - request.onreadystatechange = function () { - if (request.readyState !== 4) { - return; - } - try { - var result = JSON.parse(request.responseText); - } - catch (error) { - // @TODO: not any! - var jsonError = new Error('invalid json response'); - jsonError.orginialError = error; - jsonError.responseText = request.responseText; - jsonError.url = url; - reject(jsonError); - return; - } - if (processFunc) { - try { - result = processFunc(result); - } - catch (error) { - error.url = url; - error.body = json; - error.responseText = request.responseText; - reject(error); - return; - } - } - if (request.status != 200) { - // @TODO: not any! - var error = new Error('invalid response - ' + request.status); - error.statusCode = request.status; - reject(error); - return; - } - resolve(result); - }; - request.onerror = function (error) { - reject(error); - }; - try { - if (json) { - request.send(json); - } - else { - request.send(); - } - } - catch (error) { - // @TODO: not any! - var connectionError = new Error('connection error'); - connectionError.error = error; - reject(connectionError); - } - }); -} -exports.fetchJson = fetchJson; -function poll(func, options) { - if (!options) { - options = {}; - } - if (options.floor == null) { - options.floor = 0; - } - if (options.ceiling == null) { - options.ceiling = 10000; - } - if (options.interval == null) { - options.interval = 250; - } - return new Promise(function (resolve, reject) { - var timer = null; - var done = false; - // Returns true if cancel was successful. Unsuccessful cancel means we're already done. - var cancel = function () { - if (done) { - return false; - } - done = true; - if (timer) { - clearTimeout(timer); - } - return true; - }; - if (options.timeout) { - timer = setTimeout(function () { - if (cancel()) { - reject(new Error('timeout')); - } - }, options.timeout); - } - var attempt = 0; - function check() { - return func().then(function (result) { - // If we have a result, or are allowed null then we're done - if (result !== undefined) { - if (cancel()) { - resolve(result); - } - } - else if (options.onceBlock) { - options.onceBlock.once('block', check); - // Otherwise, exponential back-off (up to 10s) our next request - } - else if (!done) { - attempt++; - var timeout = options.interval * parseInt(String(Math.random() * Math.pow(2, attempt))); - if (timeout < options.floor) { - timeout = options.floor; - } - if (timeout > options.ceiling) { - timeout = options.ceiling; - } - setTimeout(check, timeout); - } - return null; - }, function (error) { - if (cancel()) { - reject(error); - } - }); - } - check(); - }); -} -exports.poll = poll; diff --git a/truebit-implementation/node_modules/ethers/wallet/hdnode.js b/truebit-implementation/node_modules/ethers/wallet/hdnode.js deleted file mode 100644 index c01c00c2..00000000 --- a/truebit-implementation/node_modules/ethers/wallet/hdnode.js +++ /dev/null @@ -1,245 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// See: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki -// See: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki -// The English language word list. -// For additional word lists, please see /src.tc/wordlists/ -var lang_en_1 = require("../wordlists/lang-en"); -// Automatically register English? -//import { register } from '../wordlists/wordlist'; -//register(langEn); -var bytes_1 = require("../utils/bytes"); -var bignumber_1 = require("../utils/bignumber"); -var utf8_1 = require("../utils/utf8"); -var pbkdf2_1 = require("../utils/pbkdf2"); -var hmac_1 = require("../utils/hmac"); -var properties_1 = require("../utils/properties"); -var secp256k1_1 = require("../utils/secp256k1"); -var sha2_1 = require("../utils/sha2"); -var types_1 = require("../utils/types"); -var errors = __importStar(require("../utils/errors")); -// "Bitcoin seed" -var MasterSecret = utf8_1.toUtf8Bytes('Bitcoin seed'); -var HardenedBit = 0x80000000; -// Returns a byte with the MSB bits set -function getUpperMask(bits) { - return ((1 << bits) - 1) << (8 - bits); -} -// Returns a byte with the LSB bits set -function getLowerMask(bits) { - return (1 << bits) - 1; -} -exports.defaultPath = "m/44'/60'/0'/0/0"; -var HDNode = /** @class */ (function (_super) { - __extends(HDNode, _super); - /** - * This constructor should not be called directly. - * - * Please use: - * - fromMnemonic - * - fromSeed - */ - function HDNode(privateKey, chainCode, index, depth, mnemonic, path) { - var _this = _super.call(this) || this; - errors.checkNew(_this, HDNode); - properties_1.defineReadOnly(_this, 'keyPair', new secp256k1_1.KeyPair(privateKey)); - properties_1.defineReadOnly(_this, 'privateKey', _this.keyPair.privateKey); - properties_1.defineReadOnly(_this, 'publicKey', _this.keyPair.compressedPublicKey); - properties_1.defineReadOnly(_this, 'chainCode', bytes_1.hexlify(chainCode)); - properties_1.defineReadOnly(_this, 'index', index); - properties_1.defineReadOnly(_this, 'depth', depth); - properties_1.defineReadOnly(_this, 'mnemonic', mnemonic); - properties_1.defineReadOnly(_this, 'path', path); - return _this; - } - HDNode.prototype._derive = function (index) { - // Public parent key -> public child key - if (!this.privateKey) { - if (index >= HardenedBit) { - throw new Error('cannot derive child of neutered node'); - } - throw new Error('not implemented'); - } - var data = new Uint8Array(37); - // Base path - var mnemonic = this.mnemonic; - var path = this.path; - if (path) { - path += '/' + index; - } - if (index & HardenedBit) { - // Data = 0x00 || ser_256(k_par) - data.set(bytes_1.arrayify(this.privateKey), 1); - // Hardened path - if (path) { - path += "'"; - } - } - else { - // Data = ser_p(point(k_par)) - data.set(this.keyPair.publicKeyBytes); - } - // Data += ser_32(i) - for (var i = 24; i >= 0; i -= 8) { - data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); - } - var I = hmac_1.computeHmac('sha512', this.chainCode, data); - var IL = bignumber_1.bigNumberify(I.slice(0, 32)); - var IR = I.slice(32); - var ki = IL.add(this.keyPair.privateKey).mod(secp256k1_1.N); - return new HDNode(bytes_1.arrayify(ki), IR, index, this.depth + 1, mnemonic, path); - }; - HDNode.prototype.derivePath = function (path) { - var components = path.split('/'); - if (components.length === 0 || (components[0] === 'm' && this.depth !== 0)) { - throw new Error('invalid path'); - } - if (components[0] === 'm') { - components.shift(); - } - var result = this; - for (var i = 0; i < components.length; i++) { - var component = components[i]; - if (component.match(/^[0-9]+'$/)) { - var index = parseInt(component.substring(0, component.length - 1)); - if (index >= HardenedBit) { - throw new Error('invalid path index - ' + component); - } - result = result._derive(HardenedBit + index); - } - else if (component.match(/^[0-9]+$/)) { - var index = parseInt(component); - if (index >= HardenedBit) { - throw new Error('invalid path index - ' + component); - } - result = result._derive(index); - } - else { - throw new Error('invlaid path component - ' + component); - } - } - return result; - }; - return HDNode; -}(types_1.HDNode)); -function _fromSeed(seed, mnemonic) { - var seedArray = bytes_1.arrayify(seed); - if (seedArray.length < 16 || seedArray.length > 64) { - throw new Error('invalid seed'); - } - var I = bytes_1.arrayify(hmac_1.computeHmac('sha512', MasterSecret, seedArray)); - return new HDNode(I.slice(0, 32), I.slice(32), 0, 0, mnemonic, 'm'); -} -function fromMnemonic(mnemonic, wordlist) { - // Check that the checksum s valid (will throw an error) - mnemonicToEntropy(mnemonic, wordlist); - return _fromSeed(mnemonicToSeed(mnemonic), mnemonic); -} -exports.fromMnemonic = fromMnemonic; -function fromSeed(seed) { - return _fromSeed(seed, null); -} -exports.fromSeed = fromSeed; -function mnemonicToSeed(mnemonic, password) { - if (!password) { - password = ''; - } - var salt = utf8_1.toUtf8Bytes('mnemonic' + password, utf8_1.UnicodeNormalizationForm.NFKD); - return bytes_1.hexlify(pbkdf2_1.pbkdf2(utf8_1.toUtf8Bytes(mnemonic, utf8_1.UnicodeNormalizationForm.NFKD), salt, 2048, 64, 'sha512')); -} -exports.mnemonicToSeed = mnemonicToSeed; -function mnemonicToEntropy(mnemonic, wordlist) { - if (!wordlist) { - wordlist = lang_en_1.langEn; - } - var words = wordlist.split(mnemonic); - if ((words.length % 3) !== 0) { - throw new Error('invalid mnemonic'); - } - var entropy = bytes_1.arrayify(new Uint8Array(Math.ceil(11 * words.length / 8))); - var offset = 0; - for (var i = 0; i < words.length; i++) { - var index = wordlist.getWordIndex(words[i].normalize('NFKD')); - if (index === -1) { - throw new Error('invalid mnemonic'); - } - for (var bit = 0; bit < 11; bit++) { - if (index & (1 << (10 - bit))) { - entropy[offset >> 3] |= (1 << (7 - (offset % 8))); - } - offset++; - } - } - var entropyBits = 32 * words.length / 3; - var checksumBits = words.length / 3; - var checksumMask = getUpperMask(checksumBits); - var checksum = bytes_1.arrayify(sha2_1.sha256(entropy.slice(0, entropyBits / 8)))[0]; - checksum &= checksumMask; - if (checksum !== (entropy[entropy.length - 1] & checksumMask)) { - throw new Error('invalid checksum'); - } - return bytes_1.hexlify(entropy.slice(0, entropyBits / 8)); -} -exports.mnemonicToEntropy = mnemonicToEntropy; -function entropyToMnemonic(entropy, wordlist) { - entropy = bytes_1.arrayify(entropy); - if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) { - throw new Error('invalid entropy'); - } - var indices = [0]; - var remainingBits = 11; - for (var i = 0; i < entropy.length; i++) { - // Consume the whole byte (with still more to go) - if (remainingBits > 8) { - indices[indices.length - 1] <<= 8; - indices[indices.length - 1] |= entropy[i]; - remainingBits -= 8; - // This byte will complete an 11-bit index - } - else { - indices[indices.length - 1] <<= remainingBits; - indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits); - // Start the next word - indices.push(entropy[i] & getLowerMask(8 - remainingBits)); - remainingBits += 3; - } - } - // Compute the checksum bits - var checksum = bytes_1.arrayify(sha2_1.sha256(entropy))[0]; - var checksumBits = entropy.length / 4; - checksum &= getUpperMask(checksumBits); - // Shift the checksum into the word indices - indices[indices.length - 1] <<= checksumBits; - indices[indices.length - 1] |= (checksum >> (8 - checksumBits)); - if (!wordlist) { - wordlist = lang_en_1.langEn; - } - return wordlist.join(indices.map(function (index) { return wordlist.getWord(index); })); -} -exports.entropyToMnemonic = entropyToMnemonic; -function isValidMnemonic(mnemonic, wordlist) { - try { - mnemonicToEntropy(mnemonic, wordlist); - return true; - } - catch (error) { } - return false; -} -exports.isValidMnemonic = isValidMnemonic; diff --git a/truebit-implementation/node_modules/ethers/wallet/index.js b/truebit-implementation/node_modules/ethers/wallet/index.js deleted file mode 100644 index d3af4fe5..00000000 --- a/truebit-implementation/node_modules/ethers/wallet/index.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var wallet_1 = require("./wallet"); -exports.Wallet = wallet_1.Wallet; -var HDNode = __importStar(require("./hdnode")); -exports.HDNode = HDNode; -var signing_key_1 = require("./signing-key"); -exports.SigningKey = signing_key_1.SigningKey; diff --git a/truebit-implementation/node_modules/ethers/wallet/secret-storage.js b/truebit-implementation/node_modules/ethers/wallet/secret-storage.js deleted file mode 100644 index 3b307a9e..00000000 --- a/truebit-implementation/node_modules/ethers/wallet/secret-storage.js +++ /dev/null @@ -1,401 +0,0 @@ -'use strict'; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var aes_js_1 = __importDefault(require("aes-js")); -var scrypt_js_1 = __importDefault(require("scrypt-js")); -var uuid_1 = __importDefault(require("uuid")); -var signing_key_1 = require("./signing-key"); -var HDNode = __importStar(require("./hdnode")); -var address_1 = require("../utils/address"); -var bytes_1 = require("../utils/bytes"); -var pbkdf2_1 = require("../utils/pbkdf2"); -var keccak256_1 = require("../utils/keccak256"); -var utf8_1 = require("../utils/utf8"); -var random_bytes_1 = require("../utils/random-bytes"); -function looseArrayify(hexString) { - if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') { - hexString = '0x' + hexString; - } - return bytes_1.arrayify(hexString); -} -function zpad(value, length) { - value = String(value); - while (value.length < length) { - value = '0' + value; - } - return value; -} -function getPassword(password) { - if (typeof (password) === 'string') { - return utf8_1.toUtf8Bytes(password, utf8_1.UnicodeNormalizationForm.NFKC); - } - return bytes_1.arrayify(password); -} -// Search an Object and its children recursively, caselessly. -function searchPath(object, path) { - var currentChild = object; - var comps = path.toLowerCase().split('/'); - for (var i = 0; i < comps.length; i++) { - // Search for a child object with a case-insensitive matching key - var matchingChild = null; - for (var key in currentChild) { - if (key.toLowerCase() === comps[i]) { - matchingChild = currentChild[key]; - break; - } - } - // Didn't find one. :'( - if (matchingChild === null) { - return null; - } - // Now check this child... - currentChild = matchingChild; - } - return currentChild; -} -// @TODO: Make a type for string or arrayish -// See: https://github.com/ethereum/pyethsaletool -function decryptCrowdsale(json, password) { - var data = JSON.parse(json); - password = getPassword(password); - // Ethereum Address - var ethaddr = address_1.getAddress(searchPath(data, 'ethaddr')); - // Encrypted Seed - var encseed = looseArrayify(searchPath(data, 'encseed')); - if (!encseed || (encseed.length % 16) !== 0) { - throw new Error('invalid encseed'); - } - var key = pbkdf2_1.pbkdf2(password, password, 2000, 32, 'sha256').slice(0, 16); - var iv = encseed.slice(0, 16); - var encryptedSeed = encseed.slice(16); - // Decrypt the seed - var aesCbc = new aes_js_1.default.ModeOfOperation.cbc(key, iv); - var seed = bytes_1.arrayify(aesCbc.decrypt(encryptedSeed)); - seed = aes_js_1.default.padding.pkcs7.strip(seed); - // This wallet format is weird... Convert the binary encoded hex to a string. - var seedHex = ''; - for (var i = 0; i < seed.length; i++) { - seedHex += String.fromCharCode(seed[i]); - } - var seedHexBytes = utf8_1.toUtf8Bytes(seedHex); - var signingKey = new signing_key_1.SigningKey(keccak256_1.keccak256(seedHexBytes)); - if (signingKey.address !== ethaddr) { - throw new Error('corrupt crowdsale wallet'); - } - return signingKey; -} -exports.decryptCrowdsale = decryptCrowdsale; -//@TODO: string or arrayish -function decrypt(json, password, progressCallback) { - var data = JSON.parse(json); - var passwordBytes = getPassword(password); - var decrypt = function (key, ciphertext) { - var cipher = searchPath(data, 'crypto/cipher'); - if (cipher === 'aes-128-ctr') { - var iv = looseArrayify(searchPath(data, 'crypto/cipherparams/iv')); - var counter = new aes_js_1.default.Counter(iv); - var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(key, counter); - return bytes_1.arrayify(aesCtr.decrypt(ciphertext)); - } - return null; - }; - var computeMAC = function (derivedHalf, ciphertext) { - return keccak256_1.keccak256(bytes_1.concat([derivedHalf, ciphertext])); - }; - var getSigningKey = function (key, reject) { - var ciphertext = looseArrayify(searchPath(data, 'crypto/ciphertext')); - var computedMAC = bytes_1.hexlify(computeMAC(key.slice(16, 32), ciphertext)).substring(2); - if (computedMAC !== searchPath(data, 'crypto/mac').toLowerCase()) { - reject(new Error('invalid password')); - return null; - } - var privateKey = decrypt(key.slice(0, 16), ciphertext); - var mnemonicKey = key.slice(32, 64); - if (!privateKey) { - reject(new Error('unsupported cipher')); - return null; - } - var signingKey = new signing_key_1.SigningKey(privateKey); - if (signingKey.address !== address_1.getAddress(data.address)) { - reject(new Error('address mismatch')); - return null; - } - // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase - if (searchPath(data, 'x-ethers/version') === '0.1') { - var mnemonicCiphertext = looseArrayify(searchPath(data, 'x-ethers/mnemonicCiphertext')); - var mnemonicIv = looseArrayify(searchPath(data, 'x-ethers/mnemonicCounter')); - var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv); - var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter); - var path = searchPath(data, 'x-ethers/path') || HDNode.defaultPath; - var entropy = bytes_1.arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext)); - var mnemonic = HDNode.entropyToMnemonic(entropy); - var node = HDNode.fromMnemonic(mnemonic).derivePath(path); - if (node.privateKey != bytes_1.hexlify(privateKey)) { - reject(new Error('mnemonic mismatch')); - return null; - } - signingKey = new signing_key_1.SigningKey(node); - } - return signingKey; - }; - return new Promise(function (resolve, reject) { - var kdf = searchPath(data, 'crypto/kdf'); - if (kdf && typeof (kdf) === 'string') { - if (kdf.toLowerCase() === 'scrypt') { - var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt')); - var N = parseInt(searchPath(data, 'crypto/kdfparams/n')); - var r = parseInt(searchPath(data, 'crypto/kdfparams/r')); - var p = parseInt(searchPath(data, 'crypto/kdfparams/p')); - if (!N || !r || !p) { - reject(new Error('unsupported key-derivation function parameters')); - return; - } - // Make sure N is a power of 2 - if ((N & (N - 1)) !== 0) { - reject(new Error('unsupported key-derivation function parameter value for N')); - return; - } - var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen')); - if (dkLen !== 32) { - reject(new Error('unsupported key-derivation derived-key length')); - return; - } - if (progressCallback) { - progressCallback(0); - } - scrypt_js_1.default(passwordBytes, salt, N, r, p, 64, function (error, progress, key) { - if (error) { - error.progress = progress; - reject(error); - } - else if (key) { - key = bytes_1.arrayify(key); - var signingKey = getSigningKey(key, reject); - if (!signingKey) { - return; - } - if (progressCallback) { - progressCallback(1); - } - resolve(signingKey); - } - else if (progressCallback) { - return progressCallback(progress); - } - }); - } - else if (kdf.toLowerCase() === 'pbkdf2') { - var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt')); - var prfFunc = null; - var prf = searchPath(data, 'crypto/kdfparams/prf'); - if (prf === 'hmac-sha256') { - prfFunc = 'sha256'; - } - else if (prf === 'hmac-sha512') { - prfFunc = 'sha512'; - } - else { - reject(new Error('unsupported prf')); - return; - } - var c = parseInt(searchPath(data, 'crypto/kdfparams/c')); - var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen')); - if (dkLen !== 32) { - reject(new Error('unsupported key-derivation derived-key length')); - return; - } - var key = pbkdf2_1.pbkdf2(passwordBytes, salt, c, dkLen, prfFunc); - var signingKey = getSigningKey(key, reject); - if (!signingKey) { - return; - } - resolve(signingKey); - } - else { - reject(new Error('unsupported key-derivation function')); - } - } - else { - reject(new Error('unsupported key-derivation function')); - } - }); -} -exports.decrypt = decrypt; -function encrypt(privateKey, password, options, progressCallback) { - // the options are optional, so adjust the call as needed - if (typeof (options) === 'function' && !progressCallback) { - progressCallback = options; - options = {}; - } - if (!options) { - options = {}; - } - // Check the private key - var privateKeyBytes = null; - if (privateKey instanceof signing_key_1.SigningKey) { - privateKeyBytes = bytes_1.arrayify(privateKey.privateKey); - } - else { - privateKeyBytes = bytes_1.arrayify(privateKey); - } - if (privateKeyBytes.length !== 32) { - throw new Error('invalid private key'); - } - var passwordBytes = getPassword(password); - var entropy = null; - if (options.entropy) { - entropy = bytes_1.arrayify(options.entropy); - } - if (options.mnemonic) { - if (entropy) { - if (HDNode.entropyToMnemonic(entropy) !== options.mnemonic) { - throw new Error('entropy and mnemonic mismatch'); - } - } - else { - entropy = bytes_1.arrayify(HDNode.mnemonicToEntropy(options.mnemonic)); - } - } - var path = options.path; - if (entropy && !path) { - path = HDNode.defaultPath; - } - var client = options.client; - if (!client) { - client = "ethers.js"; - } - // Check/generate the salt - var salt = null; - if (options.salt) { - salt = bytes_1.arrayify(options.salt); - } - else { - salt = random_bytes_1.randomBytes(32); - ; - } - // Override initialization vector - var iv = null; - if (options.iv) { - iv = bytes_1.arrayify(options.iv); - if (iv.length !== 16) { - throw new Error('invalid iv'); - } - } - else { - iv = random_bytes_1.randomBytes(16); - } - // Override the uuid - var uuidRandom = null; - if (options.uuid) { - uuidRandom = bytes_1.arrayify(options.uuid); - if (uuidRandom.length !== 16) { - throw new Error('invalid uuid'); - } - } - else { - uuidRandom = random_bytes_1.randomBytes(16); - } - // Override the scrypt password-based key derivation function parameters - var N = (1 << 17), r = 8, p = 1; - if (options.scrypt) { - if (options.scrypt.N) { - N = options.scrypt.N; - } - if (options.scrypt.r) { - r = options.scrypt.r; - } - if (options.scrypt.p) { - p = options.scrypt.p; - } - } - return new Promise(function (resolve, reject) { - if (progressCallback) { - progressCallback(0); - } - // We take 64 bytes: - // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix) - // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet) - scrypt_js_1.default(passwordBytes, salt, N, r, p, 64, function (error, progress, key) { - if (error) { - error.progress = progress; - reject(error); - } - else if (key) { - key = bytes_1.arrayify(key); - // This will be used to encrypt the wallet (as per Web3 secret storage) - var derivedKey = key.slice(0, 16); - var macPrefix = key.slice(16, 32); - // This will be used to encrypt the mnemonic phrase (if any) - var mnemonicKey = key.slice(32, 64); - // Get the address for this private key - var address = (new signing_key_1.SigningKey(privateKeyBytes)).address; - // Encrypt the private key - var counter = new aes_js_1.default.Counter(iv); - var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(derivedKey, counter); - var ciphertext = bytes_1.arrayify(aesCtr.encrypt(privateKeyBytes)); - // Compute the message authentication code, used to check the password - var mac = keccak256_1.keccak256(bytes_1.concat([macPrefix, ciphertext])); - // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition - var data = { - address: address.substring(2).toLowerCase(), - id: uuid_1.default.v4({ random: uuidRandom }), - version: 3, - Crypto: { - cipher: 'aes-128-ctr', - cipherparams: { - iv: bytes_1.hexlify(iv).substring(2), - }, - ciphertext: bytes_1.hexlify(ciphertext).substring(2), - kdf: 'scrypt', - kdfparams: { - salt: bytes_1.hexlify(salt).substring(2), - n: N, - dklen: 32, - p: p, - r: r - }, - mac: mac.substring(2) - } - }; - // If we have a mnemonic, encrypt it into the JSON wallet - if (entropy) { - var mnemonicIv = random_bytes_1.randomBytes(16); - var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv); - var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter); - var mnemonicCiphertext = bytes_1.arrayify(mnemonicAesCtr.encrypt(entropy)); - var now = new Date(); - var timestamp = (now.getUTCFullYear() + '-' + - zpad(now.getUTCMonth() + 1, 2) + '-' + - zpad(now.getUTCDate(), 2) + 'T' + - zpad(now.getUTCHours(), 2) + '-' + - zpad(now.getUTCMinutes(), 2) + '-' + - zpad(now.getUTCSeconds(), 2) + '.0Z'); - data['x-ethers'] = { - client: client, - gethFilename: ('UTC--' + timestamp + '--' + data.address), - mnemonicCounter: bytes_1.hexlify(mnemonicIv).substring(2), - mnemonicCiphertext: bytes_1.hexlify(mnemonicCiphertext).substring(2), - version: "0.1" - }; - } - if (progressCallback) { - progressCallback(1); - } - resolve(JSON.stringify(data)); - } - else if (progressCallback) { - return progressCallback(progress); - } - }); - }); -} -exports.encrypt = encrypt; diff --git a/truebit-implementation/node_modules/ethers/wallet/signing-key.js b/truebit-implementation/node_modules/ethers/wallet/signing-key.js deleted file mode 100644 index edde8d3e..00000000 --- a/truebit-implementation/node_modules/ethers/wallet/signing-key.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * SigningKey - * - * - */ -var bytes_1 = require("../utils/bytes"); -var properties_1 = require("../utils/properties"); -var secp256k1_1 = require("../utils/secp256k1"); -var types_1 = require("../utils/types"); -var errors = require("../utils/errors"); -var SigningKey = /** @class */ (function () { - function SigningKey(privateKey) { - errors.checkNew(this, SigningKey); - var privateKeyBytes = null; - if (privateKey instanceof types_1.HDNode) { - properties_1.defineReadOnly(this, 'mnemonic', privateKey.mnemonic); - properties_1.defineReadOnly(this, 'path', privateKey.path); - privateKeyBytes = bytes_1.arrayify(privateKey.privateKey); - } - else { - // A lot of common tools do not prefix private keys with a 0x - if (typeof (privateKey) === 'string' && privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) { - privateKey = '0x' + privateKey; - } - privateKeyBytes = bytes_1.arrayify(privateKey); - } - try { - if (privateKeyBytes.length !== 32) { - errors.throwError('exactly 32 bytes required', errors.INVALID_ARGUMENT, { arg: 'privateKey', value: '[REDACTED]' }); - } - } - catch (error) { - var params = { arg: 'privateKey', reason: error.reason, value: '[REDACTED]' }; - if (error.value) { - if (typeof (error.value.length) === 'number') { - params.length = error.value.length; - } - params.type = typeof (error.value); - } - errors.throwError('invalid private key', error.code, params); - } - properties_1.defineReadOnly(this, 'privateKey', bytes_1.hexlify(privateKeyBytes)); - properties_1.defineReadOnly(this, 'keyPair', new secp256k1_1.KeyPair(privateKeyBytes)); - properties_1.defineReadOnly(this, 'publicKey', this.keyPair.publicKey); - properties_1.defineReadOnly(this, 'address', secp256k1_1.computeAddress(this.keyPair.publicKey)); - } - SigningKey.prototype.signDigest = function (digest) { - return this.keyPair.sign(digest); - }; - return SigningKey; -}()); -exports.SigningKey = SigningKey; diff --git a/truebit-implementation/node_modules/ethers/wallet/wallet.js b/truebit-implementation/node_modules/ethers/wallet/wallet.js deleted file mode 100644 index f09e2795..00000000 --- a/truebit-implementation/node_modules/ethers/wallet/wallet.js +++ /dev/null @@ -1,197 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var hdnode_1 = require("./hdnode"); -var secretStorage = __importStar(require("./secret-storage")); -var signing_key_1 = require("./signing-key"); -var bytes_1 = require("../utils/bytes"); -var hash_1 = require("../utils/hash"); -var json_wallet_1 = require("../utils/json-wallet"); -var keccak256_1 = require("../utils/keccak256"); -var properties_1 = require("../utils/properties"); -var random_bytes_1 = require("../utils/random-bytes"); -var transaction_1 = require("../utils/transaction"); -var types_1 = require("../utils/types"); -var errors = __importStar(require("../utils/errors")); -var Wallet = /** @class */ (function (_super) { - __extends(Wallet, _super); - function Wallet(privateKey, provider) { - var _this = _super.call(this) || this; - errors.checkNew(_this, Wallet); - // Make sure we have a valid signing key - if (privateKey instanceof signing_key_1.SigningKey) { - properties_1.defineReadOnly(_this, 'signingKey', privateKey); - } - else { - properties_1.defineReadOnly(_this, 'signingKey', new signing_key_1.SigningKey(privateKey)); - } - properties_1.defineReadOnly(_this, 'provider', provider); - return _this; - } - Object.defineProperty(Wallet.prototype, "address", { - get: function () { return this.signingKey.address; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Wallet.prototype, "mnemonic", { - get: function () { return this.signingKey.mnemonic; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Wallet.prototype, "path", { - get: function () { return this.signingKey.mnemonic; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Wallet.prototype, "privateKey", { - get: function () { return this.signingKey.privateKey; }, - enumerable: true, - configurable: true - }); - /** - * Create a new instance of this Wallet connected to provider. - */ - Wallet.prototype.connect = function (provider) { - if (!(provider instanceof types_1.MinimalProvider)) { - errors.throwError('invalid provider', errors.INVALID_ARGUMENT, { argument: 'provider', value: provider }); - } - return new Wallet(this.signingKey, provider); - }; - Wallet.prototype.getAddress = function () { - return Promise.resolve(this.address); - }; - Wallet.prototype.sign = function (transaction) { - var _this = this; - return properties_1.resolveProperties(transaction).then(function (tx) { - var rawTx = transaction_1.serialize(tx); - var signature = _this.signingKey.signDigest(keccak256_1.keccak256(rawTx)); - return Promise.resolve(transaction_1.serialize(tx, signature)); - }); - }; - Wallet.prototype.signMessage = function (message) { - return Promise.resolve(bytes_1.joinSignature(this.signingKey.signDigest(hash_1.hashMessage(message)))); - }; - Wallet.prototype.getBalance = function (blockTag) { - if (!this.provider) { - throw new Error('missing provider'); - } - return this.provider.getBalance(this.address, blockTag); - }; - Wallet.prototype.getTransactionCount = function (blockTag) { - if (!this.provider) { - throw new Error('missing provider'); - } - return this.provider.getTransactionCount(this.address, blockTag); - }; - Wallet.prototype.sendTransaction = function (transaction) { - if (!this.provider) { - throw new Error('missing provider'); - } - if (!transaction || typeof (transaction) !== 'object') { - throw new Error('invalid transaction object'); - } - var tx = properties_1.shallowCopy(transaction); - if (tx.to != null) { - tx.to = this.provider.resolveName(tx.to); - } - if (tx.gasLimit == null) { - tx.from = this.getAddress(); - tx.gasLimit = this.provider.estimateGas(tx); - } - if (tx.gasPrice == null) { - tx.gasPrice = this.provider.getGasPrice(); - } - if (tx.nonce == null) { - tx.nonce = this.getTransactionCount(); - } - if (tx.chainId == null) { - tx.chainId = this.provider.getNetwork().then(function (network) { return network.chainId; }); - } - return this.provider.sendTransaction(this.sign(tx)); - }; - Wallet.prototype.encrypt = function (password, options, progressCallback) { - if (typeof (options) === 'function' && !progressCallback) { - progressCallback = options; - options = {}; - } - if (progressCallback && typeof (progressCallback) !== 'function') { - throw new Error('invalid callback'); - } - if (!options) { - options = {}; - } - if (this.mnemonic) { - // Make sure we don't accidentally bubble the mnemonic up the call-stack - var safeOptions = {}; - for (var key in options) { - safeOptions[key] = options[key]; - } - options = safeOptions; - // Set the mnemonic and path - options.mnemonic = this.mnemonic; - options.path = this.path; - } - return secretStorage.encrypt(this.privateKey, password, options, progressCallback); - }; - /** - * Static methods to create Wallet instances. - */ - Wallet.createRandom = function (options) { - var entropy = random_bytes_1.randomBytes(16); - if (!options) { - options = {}; - } - if (options.extraEntropy) { - entropy = bytes_1.arrayify(keccak256_1.keccak256(bytes_1.concat([entropy, options.extraEntropy])).substring(0, 34)); - } - var mnemonic = hdnode_1.entropyToMnemonic(entropy, options.locale); - return Wallet.fromMnemonic(mnemonic, options.path, options.locale); - }; - Wallet.fromEncryptedJson = function (json, password, progressCallback) { - if (json_wallet_1.isCrowdsaleWallet(json)) { - try { - if (progressCallback) { - progressCallback(0); - } - var privateKey = secretStorage.decryptCrowdsale(json, password); - if (progressCallback) { - progressCallback(1); - } - return Promise.resolve(new Wallet(privateKey)); - } - catch (error) { - return Promise.reject(error); - } - } - else if (json_wallet_1.isSecretStorageWallet(json)) { - return secretStorage.decrypt(json, password, progressCallback).then(function (signingKey) { - return new Wallet(signingKey); - }); - } - return Promise.reject('invalid wallet JSON'); - }; - Wallet.fromMnemonic = function (mnemonic, path, wordlist) { - if (!path) { - path = hdnode_1.defaultPath; - } - return new Wallet(hdnode_1.fromMnemonic(mnemonic, wordlist).derivePath(path)); - }; - return Wallet; -}(types_1.Signer)); -exports.Wallet = Wallet; diff --git a/truebit-implementation/node_modules/ethers/wordlists/index.js b/truebit-implementation/node_modules/ethers/wordlists/index.js deleted file mode 100644 index 213a10c7..00000000 --- a/truebit-implementation/node_modules/ethers/wordlists/index.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var lang_ja_1 = require("./lang-ja"); -var lang_ko_1 = require("./lang-ko"); -var lang_it_1 = require("./lang-it"); -var lang_en_1 = require("./lang-en"); -var lang_zh_1 = require("./lang-zh"); -var en = lang_en_1.langEn; -exports.en = en; -var ko = lang_ko_1.langKo; -exports.ko = ko; -var it = lang_it_1.langIt; -exports.it = it; -var ja = lang_ja_1.langJa; -exports.ja = ja; -var zh = lang_zh_1.langZhCn; -exports.zh = zh; -var zh_cn = lang_zh_1.langZhCn; -exports.zh_cn = zh_cn; -var zh_tw = lang_zh_1.langZhTw; -exports.zh_tw = zh_tw; diff --git a/truebit-implementation/node_modules/ethers/wordlists/lang-en.js b/truebit-implementation/node_modules/ethers/wordlists/lang-en.js deleted file mode 100644 index eead1a58..00000000 --- a/truebit-implementation/node_modules/ethers/wordlists/lang-en.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var wordlist_1 = require("./wordlist"); -var words = "AbandonAbilityAbleAboutAboveAbsentAbsorbAbstractAbsurdAbuseAccessAccidentAccountAccuseAchieveAcidAcousticAcquireAcrossActActionActorActressActualAdaptAddAddictAddressAdjustAdmitAdultAdvanceAdviceAerobicAffairAffordAfraidAgainAgeAgentAgreeAheadAimAirAirportAisleAlarmAlbumAlcoholAlertAlienAllAlleyAllowAlmostAloneAlphaAlreadyAlsoAlterAlwaysAmateurAmazingAmongAmountAmusedAnalystAnchorAncientAngerAngleAngryAnimalAnkleAnnounceAnnualAnotherAnswerAntennaAntiqueAnxietyAnyApartApologyAppearAppleApproveAprilArchArcticAreaArenaArgueArmArmedArmorArmyAroundArrangeArrestArriveArrowArtArtefactArtistArtworkAskAspectAssaultAssetAssistAssumeAsthmaAthleteAtomAttackAttendAttitudeAttractAuctionAuditAugustAuntAuthorAutoAutumnAverageAvocadoAvoidAwakeAwareAwayAwesomeAwfulAwkwardAxisBabyBachelorBaconBadgeBagBalanceBalconyBallBambooBananaBannerBarBarelyBargainBarrelBaseBasicBasketBattleBeachBeanBeautyBecauseBecomeBeefBeforeBeginBehaveBehindBelieveBelowBeltBenchBenefitBestBetrayBetterBetweenBeyondBicycleBidBikeBindBiologyBirdBirthBitterBlackBladeBlameBlanketBlastBleakBlessBlindBloodBlossomBlouseBlueBlurBlushBoardBoatBodyBoilBombBoneBonusBookBoostBorderBoringBorrowBossBottomBounceBoxBoyBracketBrainBrandBrassBraveBreadBreezeBrickBridgeBriefBrightBringBriskBroccoliBrokenBronzeBroomBrotherBrownBrushBubbleBuddyBudgetBuffaloBuildBulbBulkBulletBundleBunkerBurdenBurgerBurstBusBusinessBusyButterBuyerBuzzCabbageCabinCableCactusCageCakeCallCalmCameraCampCanCanalCancelCandyCannonCanoeCanvasCanyonCapableCapitalCaptainCarCarbonCardCargoCarpetCarryCartCaseCashCasinoCastleCasualCatCatalogCatchCategoryCattleCaughtCauseCautionCaveCeilingCeleryCementCensusCenturyCerealCertainChairChalkChampionChangeChaosChapterChargeChaseChatCheapCheckCheeseChefCherryChestChickenChiefChildChimneyChoiceChooseChronicChuckleChunkChurnCigarCinnamonCircleCitizenCityCivilClaimClapClarifyClawClayCleanClerkCleverClickClientCliffClimbClinicClipClockClogCloseClothCloudClownClubClumpClusterClutchCoachCoastCoconutCodeCoffeeCoilCoinCollectColorColumnCombineComeComfortComicCommonCompanyConcertConductConfirmCongressConnectConsiderControlConvinceCookCoolCopperCopyCoralCoreCornCorrectCostCottonCouchCountryCoupleCourseCousinCoverCoyoteCrackCradleCraftCramCraneCrashCraterCrawlCrazyCreamCreditCreekCrewCricketCrimeCrispCriticCropCrossCrouchCrowdCrucialCruelCruiseCrumbleCrunchCrushCryCrystalCubeCultureCupCupboardCuriousCurrentCurtainCurveCushionCustomCuteCycleDadDamageDampDanceDangerDaringDashDaughterDawnDayDealDebateDebrisDecadeDecemberDecideDeclineDecorateDecreaseDeerDefenseDefineDefyDegreeDelayDeliverDemandDemiseDenialDentistDenyDepartDependDepositDepthDeputyDeriveDescribeDesertDesignDeskDespairDestroyDetailDetectDevelopDeviceDevoteDiagramDialDiamondDiaryDiceDieselDietDifferDigitalDignityDilemmaDinnerDinosaurDirectDirtDisagreeDiscoverDiseaseDishDismissDisorderDisplayDistanceDivertDivideDivorceDizzyDoctorDocumentDogDollDolphinDomainDonateDonkeyDonorDoorDoseDoubleDoveDraftDragonDramaDrasticDrawDreamDressDriftDrillDrinkDripDriveDropDrumDryDuckDumbDuneDuringDustDutchDutyDwarfDynamicEagerEagleEarlyEarnEarthEasilyEastEasyEchoEcologyEconomyEdgeEditEducateEffortEggEightEitherElbowElderElectricElegantElementElephantElevatorEliteElseEmbarkEmbodyEmbraceEmergeEmotionEmployEmpowerEmptyEnableEnactEndEndlessEndorseEnemyEnergyEnforceEngageEngineEnhanceEnjoyEnlistEnoughEnrichEnrollEnsureEnterEntireEntryEnvelopeEpisodeEqualEquipEraEraseErodeErosionErrorEruptEscapeEssayEssenceEstateEternalEthicsEvidenceEvilEvokeEvolveExactExampleExcessExchangeExciteExcludeExcuseExecuteExerciseExhaustExhibitExileExistExitExoticExpandExpectExpireExplainExposeExpressExtendExtraEyeEyebrowFabricFaceFacultyFadeFaintFaithFallFalseFameFamilyFamousFanFancyFantasyFarmFashionFatFatalFatherFatigueFaultFavoriteFeatureFebruaryFederalFeeFeedFeelFemaleFenceFestivalFetchFeverFewFiberFictionFieldFigureFileFilmFilterFinalFindFineFingerFinishFireFirmFirstFiscalFishFitFitnessFixFlagFlameFlashFlatFlavorFleeFlightFlipFloatFlockFloorFlowerFluidFlushFlyFoamFocusFogFoilFoldFollowFoodFootForceForestForgetForkFortuneForumForwardFossilFosterFoundFoxFragileFrameFrequentFreshFriendFringeFrogFrontFrostFrownFrozenFruitFuelFunFunnyFurnaceFuryFutureGadgetGainGalaxyGalleryGameGapGarageGarbageGardenGarlicGarmentGasGaspGateGatherGaugeGazeGeneralGeniusGenreGentleGenuineGestureGhostGiantGiftGiggleGingerGiraffeGirlGiveGladGlanceGlareGlassGlideGlimpseGlobeGloomGloryGloveGlowGlueGoatGoddessGoldGoodGooseGorillaGospelGossipGovernGownGrabGraceGrainGrantGrapeGrassGravityGreatGreenGridGriefGritGroceryGroupGrowGruntGuardGuessGuideGuiltGuitarGunGymHabitHairHalfHammerHamsterHandHappyHarborHardHarshHarvestHatHaveHawkHazardHeadHealthHeartHeavyHedgehogHeightHelloHelmetHelpHenHeroHiddenHighHillHintHipHireHistoryHobbyHockeyHoldHoleHolidayHollowHomeHoneyHoodHopeHornHorrorHorseHospitalHostHotelHourHoverHubHugeHumanHumbleHumorHundredHungryHuntHurdleHurryHurtHusbandHybridIceIconIdeaIdentifyIdleIgnoreIllIllegalIllnessImageImitateImmenseImmuneImpactImposeImproveImpulseInchIncludeIncomeIncreaseIndexIndicateIndoorIndustryInfantInflictInformInhaleInheritInitialInjectInjuryInmateInnerInnocentInputInquiryInsaneInsectInsideInspireInstallIntactInterestIntoInvestInviteInvolveIronIslandIsolateIssueItemIvoryJacketJaguarJarJazzJealousJeansJellyJewelJobJoinJokeJourneyJoyJudgeJuiceJumpJungleJuniorJunkJustKangarooKeenKeepKetchupKeyKickKidKidneyKindKingdomKissKitKitchenKiteKittenKiwiKneeKnifeKnockKnowLabLabelLaborLadderLadyLakeLampLanguageLaptopLargeLaterLatinLaughLaundryLavaLawLawnLawsuitLayerLazyLeaderLeafLearnLeaveLectureLeftLegLegalLegendLeisureLemonLendLengthLensLeopardLessonLetterLevelLiarLibertyLibraryLicenseLifeLiftLightLikeLimbLimitLinkLionLiquidListLittleLiveLizardLoadLoanLobsterLocalLockLogicLonelyLongLoopLotteryLoudLoungeLoveLoyalLuckyLuggageLumberLunarLunchLuxuryLyricsMachineMadMagicMagnetMaidMailMainMajorMakeMammalManManageMandateMangoMansionManualMapleMarbleMarchMarginMarineMarketMarriageMaskMassMasterMatchMaterialMathMatrixMatterMaximumMazeMeadowMeanMeasureMeatMechanicMedalMediaMelodyMeltMemberMemoryMentionMenuMercyMergeMeritMerryMeshMessageMetalMethodMiddleMidnightMilkMillionMimicMindMinimumMinorMinuteMiracleMirrorMiseryMissMistakeMixMixedMixtureMobileModelModifyMomMomentMonitorMonkeyMonsterMonthMoonMoralMoreMorningMosquitoMotherMotionMotorMountainMouseMoveMovieMuchMuffinMuleMultiplyMuscleMuseumMushroomMusicMustMutualMyselfMysteryMythNaiveNameNapkinNarrowNastyNationNatureNearNeckNeedNegativeNeglectNeitherNephewNerveNestNetNetworkNeutralNeverNewsNextNiceNightNobleNoiseNomineeNoodleNormalNorthNoseNotableNoteNothingNoticeNovelNowNuclearNumberNurseNutOakObeyObjectObligeObscureObserveObtainObviousOccurOceanOctoberOdorOffOfferOfficeOftenOilOkayOldOliveOlympicOmitOnceOneOnionOnlineOnlyOpenOperaOpinionOpposeOptionOrangeOrbitOrchardOrderOrdinaryOrganOrientOriginalOrphanOstrichOtherOutdoorOuterOutputOutsideOvalOvenOverOwnOwnerOxygenOysterOzonePactPaddlePagePairPalacePalmPandaPanelPanicPantherPaperParadeParentParkParrotPartyPassPatchPathPatientPatrolPatternPausePavePaymentPeacePeanutPearPeasantPelicanPenPenaltyPencilPeoplePepperPerfectPermitPersonPetPhonePhotoPhrasePhysicalPianoPicnicPicturePiecePigPigeonPillPilotPinkPioneerPipePistolPitchPizzaPlacePlanetPlasticPlatePlayPleasePledgePluckPlugPlungePoemPoetPointPolarPolePolicePondPonyPoolPopularPortionPositionPossiblePostPotatoPotteryPovertyPowderPowerPracticePraisePredictPreferPreparePresentPrettyPreventPricePridePrimaryPrintPriorityPrisonPrivatePrizeProblemProcessProduceProfitProgramProjectPromoteProofPropertyProsperProtectProudProvidePublicPuddingPullPulpPulsePumpkinPunchPupilPuppyPurchasePurityPurposePursePushPutPuzzlePyramidQualityQuantumQuarterQuestionQuickQuitQuizQuoteRabbitRaccoonRaceRackRadarRadioRailRainRaiseRallyRampRanchRandomRangeRapidRareRateRatherRavenRawRazorReadyRealReasonRebelRebuildRecallReceiveRecipeRecordRecycleReduceReflectReformRefuseRegionRegretRegularRejectRelaxReleaseReliefRelyRemainRememberRemindRemoveRenderRenewRentReopenRepairRepeatReplaceReportRequireRescueResembleResistResourceResponseResultRetireRetreatReturnReunionRevealReviewRewardRhythmRibRibbonRiceRichRideRidgeRifleRightRigidRingRiotRippleRiskRitualRivalRiverRoadRoastRobotRobustRocketRomanceRoofRookieRoomRoseRotateRoughRoundRouteRoyalRubberRudeRugRuleRunRunwayRuralSadSaddleSadnessSafeSailSaladSalmonSalonSaltSaluteSameSampleSandSatisfySatoshiSauceSausageSaveSayScaleScanScareScatterSceneSchemeSchoolScienceScissorsScorpionScoutScrapScreenScriptScrubSeaSearchSeasonSeatSecondSecretSectionSecuritySeedSeekSegmentSelectSellSeminarSeniorSenseSentenceSeriesServiceSessionSettleSetupSevenShadowShaftShallowShareShedShellSheriffShieldShiftShineShipShiverShockShoeShootShopShortShoulderShoveShrimpShrugShuffleShySiblingSickSideSiegeSightSignSilentSilkSillySilverSimilarSimpleSinceSingSirenSisterSituateSixSizeSkateSketchSkiSkillSkinSkirtSkullSlabSlamSleepSlenderSliceSlideSlightSlimSloganSlotSlowSlushSmallSmartSmileSmokeSmoothSnackSnakeSnapSniffSnowSoapSoccerSocialSockSodaSoftSolarSoldierSolidSolutionSolveSomeoneSongSoonSorrySortSoulSoundSoupSourceSouthSpaceSpareSpatialSpawnSpeakSpecialSpeedSpellSpendSphereSpiceSpiderSpikeSpinSpiritSplitSpoilSponsorSpoonSportSpotSpraySpreadSpringSpySquareSqueezeSquirrelStableStadiumStaffStageStairsStampStandStartStateStaySteakSteelStemStepStereoStickStillStingStockStomachStoneStoolStoryStoveStrategyStreetStrikeStrongStruggleStudentStuffStumbleStyleSubjectSubmitSubwaySuccessSuchSuddenSufferSugarSuggestSuitSummerSunSunnySunsetSuperSupplySupremeSureSurfaceSurgeSurpriseSurroundSurveySuspectSustainSwallowSwampSwapSwarmSwearSweetSwiftSwimSwingSwitchSwordSymbolSymptomSyrupSystemTableTackleTagTailTalentTalkTankTapeTargetTaskTasteTattooTaxiTeachTeamTellTenTenantTennisTentTermTestTextThankThatThemeThenTheoryThereTheyThingThisThoughtThreeThriveThrowThumbThunderTicketTideTigerTiltTimberTimeTinyTipTiredTissueTitleToastTobaccoTodayToddlerToeTogetherToiletTokenTomatoTomorrowToneTongueTonightToolToothTopTopicToppleTorchTornadoTortoiseTossTotalTouristTowardTowerTownToyTrackTradeTrafficTragicTrainTransferTrapTrashTravelTrayTreatTreeTrendTrialTribeTrickTriggerTrimTripTrophyTroubleTruckTrueTrulyTrumpetTrustTruthTryTubeTuitionTumbleTunaTunnelTurkeyTurnTurtleTwelveTwentyTwiceTwinTwistTwoTypeTypicalUglyUmbrellaUnableUnawareUncleUncoverUnderUndoUnfairUnfoldUnhappyUniformUniqueUnitUniverseUnknownUnlockUntilUnusualUnveilUpdateUpgradeUpholdUponUpperUpsetUrbanUrgeUsageUseUsedUsefulUselessUsualUtilityVacantVacuumVagueValidValleyValveVanVanishVaporVariousVastVaultVehicleVelvetVendorVentureVenueVerbVerifyVersionVeryVesselVeteranViableVibrantViciousVictoryVideoViewVillageVintageViolinVirtualVirusVisaVisitVisualVitalVividVocalVoiceVoidVolcanoVolumeVoteVoyageWageWagonWaitWalkWallWalnutWantWarfareWarmWarriorWashWaspWasteWaterWaveWayWealthWeaponWearWeaselWeatherWebWeddingWeekendWeirdWelcomeWestWetWhaleWhatWheatWheelWhenWhereWhipWhisperWideWidthWifeWildWillWinWindowWineWingWinkWinnerWinterWireWisdomWiseWishWitnessWolfWomanWonderWoodWoolWordWorkWorldWorryWorthWrapWreckWrestleWristWriteWrongYardYearYellowYouYoungYouthZebraZeroZoneZoo"; -var wordlist = null; -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' '); - if (wordlist_1.check(lang) !== '0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60') { - wordlist = null; - throw new Error('BIP39 Wordlist for en (English) FAILED'); - } -} -var LangEn = /** @class */ (function (_super) { - __extends(LangEn, _super); - function LangEn() { - return _super.call(this, 'en') || this; - } - LangEn.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangEn.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - return LangEn; -}(wordlist_1.Wordlist)); -var langEn = new LangEn(); -exports.langEn = langEn; -wordlist_1.register(langEn); diff --git a/truebit-implementation/node_modules/ethers/wordlists/lang-it.js b/truebit-implementation/node_modules/ethers/wordlists/lang-it.js deleted file mode 100644 index 1453cece..00000000 --- a/truebit-implementation/node_modules/ethers/wordlists/lang-it.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var wordlist_1 = require("./wordlist"); -var words = "AbacoAbbaglioAbbinatoAbeteAbissoAbolireAbrasivoAbrogatoAccadereAccennoAccusatoAcetoneAchilleAcidoAcquaAcreAcrilicoAcrobataAcutoAdagioAddebitoAddomeAdeguatoAderireAdipeAdottareAdulareAffabileAffettoAffissoAffrantoAforismaAfosoAfricanoAgaveAgenteAgevoleAggancioAgireAgitareAgonismoAgricoloAgrumetoAguzzoAlabardaAlatoAlbatroAlberatoAlboAlbumeAlceAlcolicoAlettoneAlfaAlgebraAlianteAlibiAlimentoAllagatoAllegroAllievoAllodolaAllusivoAlmenoAlogenoAlpacaAlpestreAltalenaAlternoAlticcioAltroveAlunnoAlveoloAlzareAmalgamaAmanitaAmarenaAmbitoAmbratoAmebaAmericaAmetistaAmicoAmmassoAmmendaAmmirareAmmonitoAmoreAmpioAmpliareAmuletoAnacardoAnagrafeAnalistaAnarchiaAnatraAncaAncellaAncoraAndareAndreaAnelloAngeloAngolareAngustoAnimaAnnegareAnnidatoAnnoAnnuncioAnonimoAnticipoAnziApaticoAperturaApodeApparireAppetitoAppoggioApprodoAppuntoAprileArabicaArachideAragostaAraldicaArancioAraturaArazzoArbitroArchivioArditoArenileArgentoArgineArgutoAriaArmoniaArneseArredatoArringaArrostoArsenicoArsoArteficeArzilloAsciuttoAscoltoAsepsiAsetticoAsfaltoAsinoAsolaAspiratoAsproAssaggioAsseAssolutoAssurdoAstaAstenutoAsticeAstrattoAtavicoAteismoAtomicoAtonoAttesaAttivareAttornoAttritoAttualeAusilioAustriaAutistaAutonomoAutunnoAvanzatoAvereAvvenireAvvisoAvvolgereAzioneAzotoAzzimoAzzurroBabeleBaccanoBacinoBacoBadessaBadilataBagnatoBaitaBalconeBaldoBalenaBallataBalzanoBambinoBandireBaraondaBarbaroBarcaBaritonoBarlumeBaroccoBasilicoBassoBatostaBattutoBauleBavaBavosaBeccoBeffaBelgioBelvaBendaBenevoleBenignoBenzinaBereBerlinaBetaBibitaBiciBidoneBifidoBigaBilanciaBimboBinocoloBiologoBipedeBipolareBirbanteBirraBiscottoBisestoBisnonnoBisonteBisturiBizzarroBlandoBlattaBollitoBonificoBordoBoscoBotanicoBottinoBozzoloBraccioBradipoBramaBrancaBravuraBretellaBrevettoBrezzaBrigliaBrillanteBrindareBroccoloBrodoBronzinaBrulloBrunoBubboneBucaBudinoBuffoneBuioBulboBuonoBurloneBurrascaBussolaBustaCadettoCaducoCalamaroCalcoloCalesseCalibroCalmoCaloriaCambusaCamerataCamiciaCamminoCamolaCampaleCanapaCandelaCaneCaninoCanottoCantinaCapaceCapelloCapitoloCapogiroCapperoCapraCapsulaCarapaceCarcassaCardoCarismaCarovanaCarrettoCartolinaCasaccioCascataCasermaCasoCassoneCastelloCasualeCatastaCatenaCatrameCautoCavilloCedibileCedrataCefaloCelebreCellulareCenaCenoneCentesimoCeramicaCercareCertoCerumeCervelloCesoiaCespoCetoChelaChiaroChiccaChiedereChimeraChinaChirurgoChitarraCiaoCiclismoCifrareCignoCilindroCiottoloCircaCirrosiCitricoCittadinoCiuffoCivettaCivileClassicoClinicaCloroCoccoCodardoCodiceCoerenteCognomeCollareColmatoColoreColposoColtivatoColzaComaCometaCommandoComodoComputerComuneConcisoCondurreConfermaCongelareConiugeConnessoConoscereConsumoContinuoConvegnoCopertoCopioneCoppiaCopricapoCorazzaCordataCoricatoCorniceCorollaCorpoCorredoCorsiaCorteseCosmicoCostanteCotturaCovatoCratereCravattaCreatoCredereCremosoCrescitaCretaCricetoCrinaleCrisiCriticoCroceCronacaCrostataCrucialeCruscaCucireCuculoCuginoCullatoCupolaCuratoreCursoreCurvoCuscinoCustodeDadoDainoDalmataDamerinoDanielaDannosoDanzareDatatoDavantiDavveroDebuttoDecennioDecisoDeclinoDecolloDecretoDedicatoDefinitoDeformeDegnoDelegareDelfinoDelirioDeltaDemenzaDenotatoDentroDepositoDerapataDerivareDerogaDescrittoDesertoDesiderioDesumereDetersivoDevotoDiametroDicembreDiedroDifesoDiffusoDigerireDigitaleDiluvioDinamicoDinnanziDipintoDiplomaDipoloDiradareDireDirottoDirupoDisagioDiscretoDisfareDisgeloDispostoDistanzaDisumanoDitoDivanoDiveltoDividereDivoratoDobloneDocenteDoganaleDogmaDolceDomatoDomenicaDominareDondoloDonoDormireDoteDottoreDovutoDozzinaDragoDruidoDubbioDubitareDucaleDunaDuomoDupliceDuraturoEbanoEccessoEccoEclissiEconomiaEderaEdicolaEdileEditoriaEducareEgemoniaEgliEgoismoEgregioElaboratoElargireEleganteElencatoElettoElevareElficoElicaElmoElsaElusoEmanatoEmblemaEmessoEmiroEmotivoEmozioneEmpiricoEmuloEndemicoEnduroEnergiaEnfasiEnotecaEntrareEnzimaEpatiteEpilogoEpisodioEpocaleEppureEquatoreErarioErbaErbosoEredeEremitaErigereErmeticoEroeErosivoErranteEsagonoEsameEsanimeEsaudireEscaEsempioEsercitoEsibitoEsigenteEsistereEsitoEsofagoEsortatoEsosoEspansoEspressoEssenzaEssoEstesoEstimareEstoniaEstrosoEsultareEtilicoEtnicoEtruscoEttoEuclideoEuropaEvasoEvidenzaEvitatoEvolutoEvvivaFabbricaFaccendaFachiroFalcoFamigliaFanaleFanfaraFangoFantasmaFareFarfallaFarinosoFarmacoFasciaFastosoFasulloFaticareFatoFavolosoFebbreFecolaFedeFegatoFelpaFeltroFemminaFendereFenomenoFermentoFerroFertileFessuraFestivoFettaFeudoFiabaFiduciaFifaFiguratoFiloFinanzaFinestraFinireFioreFiscaleFisicoFiumeFlaconeFlamencoFleboFlemmaFloridoFluenteFluoroFobicoFocacciaFocosoFoderatoFoglioFolataFolcloreFolgoreFondenteFoneticoFoniaFontanaForbitoForchettaForestaFormicaFornaioForoFortezzaForzareFosfatoFossoFracassoFranaFrassinoFratelloFreccettaFrenataFrescoFrigoFrollinoFrondeFrugaleFruttaFucilataFucsiaFuggenteFulmineFulvoFumanteFumettoFumosoFuneFunzioneFuocoFurboFurgoneFuroreFusoFutileGabbianoGaffeGalateoGallinaGaloppoGamberoGammaGaranziaGarboGarofanoGarzoneGasdottoGasolioGastricoGattoGaudioGazeboGazzellaGecoGelatinaGelsoGemelloGemmatoGeneGenitoreGennaioGenotipoGergoGhepardoGhiaccioGhisaGialloGildaGineproGiocareGioielloGiornoGioveGiratoGironeGittataGiudizioGiuratoGiustoGlobuloGlutineGnomoGobbaGolfGomitoGommoneGonfioGonnaGovernoGracileGradoGraficoGrammoGrandeGrattareGravosoGraziaGrecaGreggeGrifoneGrigioGrinzaGrottaGruppoGuadagnoGuaioGuantoGuardareGufoGuidareIbernatoIconaIdenticoIdillioIdoloIdraIdricoIdrogenoIgieneIgnaroIgnoratoIlareIllesoIllogicoIlludereImballoImbevutoImboccoImbutoImmaneImmersoImmolatoImpaccoImpetoImpiegoImportoImprontaInalareInarcareInattivoIncantoIncendioInchinoIncisivoInclusoIncontroIncrocioIncuboIndagineIndiaIndoleIneditoInfattiInfilareInflittoIngaggioIngegnoIngleseIngordoIngrossoInnescoInodoreInoltrareInondatoInsanoInsettoInsiemeInsonniaInsulinaIntasatoInteroIntonacoIntuitoInumidireInvalidoInveceInvitoIperboleIpnoticoIpotesiIppicaIrideIrlandaIronicoIrrigatoIrrorareIsolatoIsotopoIstericoIstitutoIstriceItaliaIterareLabbroLabirintoLaccaLaceratoLacrimaLacunaLaddoveLagoLampoLancettaLanternaLardosoLargaLaringeLastraLatenzaLatinoLattugaLavagnaLavoroLegaleLeggeroLemboLentezzaLenzaLeoneLepreLesivoLessatoLestoLetteraleLevaLevigatoLiberoLidoLievitoLillaLimaturaLimitareLimpidoLineareLinguaLiquidoLiraLiricaLiscaLiteLitigioLivreaLocandaLodeLogicaLombareLondraLongevoLoquaceLorenzoLotoLotteriaLuceLucidatoLumacaLuminosoLungoLupoLuppoloLusingaLussoLuttoMacabroMacchinaMaceroMacinatoMadamaMagicoMagliaMagneteMagroMaiolicaMalafedeMalgradoMalintesoMalsanoMaltoMalumoreManaManciaMandorlaMangiareManifestoMannaroManovraMansardaMantideManubrioMappaMaratonaMarcireMarettaMarmoMarsupioMascheraMassaiaMastinoMaterassoMatricolaMattoneMaturoMazurcaMeandroMeccanicoMecenateMedesimoMeditareMegaMelassaMelisMelodiaMeningeMenoMensolaMercurioMerendaMerloMeschinoMeseMessereMestoloMetalloMetodoMettereMiagolareMicaMicelioMicheleMicroboMidolloMieleMiglioreMilanoMiliteMimosaMineraleMiniMinoreMirinoMirtilloMiscelaMissivaMistoMisurareMitezzaMitigareMitraMittenteMnemonicoModelloModificaModuloMoganoMogioMoleMolossoMonasteroMoncoMondinaMonetarioMonileMonotonoMonsoneMontatoMonvisoMoraMordereMorsicatoMostroMotivatoMotosegaMottoMovenzaMovimentoMozzoMuccaMucosaMuffaMughettoMugnaioMulattoMulinelloMultiploMummiaMuntoMuovereMuraleMusaMuscoloMusicaMutevoleMutoNababboNaftaNanometroNarcisoNariceNarratoNascereNastrareNaturaleNauticaNaviglioNebulosaNecrosiNegativoNegozioNemmenoNeofitaNerettoNervoNessunoNettunoNeutraleNeveNevroticoNicchiaNinfaNitidoNobileNocivoNodoNomeNominaNordicoNormaleNorvegeseNostranoNotareNotiziaNotturnoNovellaNucleoNullaNumeroNuovoNutrireNuvolaNuzialeOasiObbedireObbligoObeliscoOblioOboloObsoletoOccasioneOcchioOccidenteOccorrereOccultareOcraOculatoOdiernoOdorareOffertaOffrireOffuscatoOggettoOggiOgnunoOlandeseOlfattoOliatoOlivaOlogrammaOltreOmaggioOmbelicoOmbraOmegaOmissioneOndosoOnereOniceOnnivoroOnorevoleOntaOperatoOpinioneOppostoOracoloOrafoOrdineOrecchinoOreficeOrfanoOrganicoOrigineOrizzonteOrmaOrmeggioOrnativoOrologioOrrendoOrribileOrtensiaOrticaOrzataOrzoOsareOscurareOsmosiOspedaleOspiteOssaOssidareOstacoloOsteOtiteOtreOttagonoOttimoOttobreOvaleOvestOvinoOviparoOvocitoOvunqueOvviareOzioPacchettoPacePacificoPadellaPadronePaesePagaPaginaPalazzinaPalesarePallidoPaloPaludePandoroPannelloPaoloPaonazzoPapricaParabolaParcellaParerePargoloPariParlatoParolaPartireParvenzaParzialePassivoPasticcaPataccaPatologiaPattumePavonePeccatoPedalarePedonalePeggioPelosoPenarePendicePenisolaPennutoPenombraPensarePentolaPepePepitaPerbenePercorsoPerdonatoPerforarePergamenaPeriodoPermessoPernoPerplessoPersuasoPertugioPervasoPesatorePesistaPesoPestiferoPetaloPettinePetulantePezzoPiacerePiantaPiattinoPiccinoPicozzaPiegaPietraPifferoPigiamaPigolioPigroPilaPiliferoPillolaPilotaPimpantePinetaPinnaPinoloPioggiaPiomboPiramidePireticoPiritePirolisiPitonePizzicoPlaceboPlanarePlasmaPlatanoPlenarioPochezzaPoderosoPodismoPoesiaPoggiarePolentaPoligonoPollicePolmonitePolpettaPolsoPoltronaPolverePomicePomodoroPontePopolosoPorfidoPorosoPorporaPorrePortataPosaPositivoPossessoPostulatoPotassioPoterePranzoPrassiPraticaPreclusoPredicaPrefissoPregiatoPrelievoPremerePrenotarePreparatoPresenzaPretestoPrevalsoPrimaPrincipePrivatoProblemaProcuraProdurreProfumoProgettoProlungaPromessaPronomePropostaProrogaProtesoProvaPrudentePrugnaPruritoPsichePubblicoPudicaPugilatoPugnoPulcePulitoPulsantePuntarePupazzoPupillaPuroQuadroQualcosaQuasiQuerelaQuotaRaccoltoRaddoppioRadicaleRadunatoRafficaRagazzoRagioneRagnoRamarroRamingoRamoRandagioRantolareRapatoRapinaRappresoRasaturaRaschiatoRasenteRassegnaRastrelloRataRavvedutoRealeRecepireRecintoReclutaReconditoRecuperoRedditoRedimereRegalatoRegistroRegolaRegressoRelazioneRemareRemotoRennaReplicaReprimereReputareResaResidenteResponsoRestauroReteRetinaRetoricaRettificaRevocatoRiassuntoRibadireRibelleRibrezzoRicaricaRiccoRicevereRiciclatoRicordoRicredutoRidicoloRidurreRifasareRiflessoRiformaRifugioRigareRigettatoRighelloRilassatoRilevatoRimanereRimbalzoRimedioRimorchioRinascitaRincaroRinforzoRinnovoRinomatoRinsavitoRintoccoRinunciaRinvenireRiparatoRipetutoRipienoRiportareRipresaRipulireRisataRischioRiservaRisibileRisoRispettoRistoroRisultatoRisvoltoRitardoRitegnoRitmicoRitrovoRiunioneRivaRiversoRivincitaRivoltoRizomaRobaRoboticoRobustoRocciaRocoRodaggioRodereRoditoreRogitoRollioRomanticoRompereRonzioRosolareRospoRotanteRotondoRotulaRovescioRubizzoRubricaRugaRullinoRumineRumorosoRuoloRupeRussareRusticoSabatoSabbiareSabotatoSagomaSalassoSaldaturaSalgemmaSalivareSalmoneSaloneSaltareSalutoSalvoSapereSapidoSaporitoSaracenoSarcasmoSartoSassosoSatelliteSatiraSatolloSaturnoSavanaSavioSaziatoSbadiglioSbalzoSbancatoSbarraSbattereSbavareSbendareSbirciareSbloccatoSbocciatoSbrinareSbruffoneSbuffareScabrosoScadenzaScalaScambiareScandaloScapolaScarsoScatenareScavatoSceltoScenicoScettroSchedaSchienaSciarpaScienzaScindereScippoSciroppoScivoloSclerareScodellaScolpitoScompartoSconfortoScoprireScortaScossoneScozzeseScribaScrollareScrutinioScuderiaScultoreScuolaScuroScusareSdebitareSdoganareSeccaturaSecondoSedanoSeggiolaSegnalatoSegregatoSeguitoSelciatoSelettivoSellaSelvaggioSemaforoSembrareSemeSeminatoSempreSensoSentireSepoltoSequenzaSerataSerbatoSerenoSerioSerpenteSerraglioServireSestinaSetolaSettimanaSfaceloSfaldareSfamatoSfarzosoSfaticatoSferaSfidaSfilatoSfingeSfocatoSfoderareSfogoSfoltireSforzatoSfrattoSfruttatoSfuggitoSfumareSfusoSgabelloSgarbatoSgonfiareSgorbioSgrassatoSguardoSibiloSiccomeSierraSiglaSignoreSilenzioSillabaSimboloSimpaticoSimulatoSinfoniaSingoloSinistroSinoSintesiSinusoideSiparioSismaSistoleSituatoSlittaSlogaturaSlovenoSmarritoSmemoratoSmentitoSmeraldoSmilzoSmontareSmottatoSmussatoSnellireSnervatoSnodoSobbalzoSobrioSoccorsoSocialeSodaleSoffittoSognoSoldatoSolenneSolidoSollazzoSoloSolubileSolventeSomaticoSommaSondaSonettoSonniferoSopireSoppesoSopraSorgereSorpassoSorrisoSorsoSorteggioSorvolatoSospiroSostaSottileSpadaSpallaSpargereSpatolaSpaventoSpazzolaSpecieSpedireSpegnereSpelaturaSperanzaSpessoreSpettraleSpezzatoSpiaSpigolosoSpillatoSpinosoSpiraleSplendidoSportivoSposoSprangaSprecareSpronatoSpruzzoSpuntinoSquilloSradicareSrotolatoStabileStaccoStaffaStagnareStampatoStantioStarnutoStaseraStatutoSteloSteppaSterzoStilettoStimaStirpeStivaleStizzosoStonatoStoricoStrappoStregatoStriduloStrozzareStruttoStuccareStufoStupendoSubentroSuccosoSudoreSuggeritoSugoSultanoSuonareSuperboSupportoSurgelatoSurrogatoSussurroSuturaSvagareSvedeseSveglioSvelareSvenutoSveziaSviluppoSvistaSvizzeraSvoltaSvuotareTabaccoTabulatoTacciareTaciturnoTaleTalismanoTamponeTanninoTaraTardivoTargatoTariffaTarpareTartarugaTastoTatticoTavernaTavolataTazzaTecaTecnicoTelefonoTemerarioTempoTemutoTendoneTeneroTensioneTentacoloTeoremaTermeTerrazzoTerzettoTesiTesseratoTestatoTetroTettoiaTifareTigellaTimbroTintoTipicoTipografoTiraggioTiroTitanioTitoloTitubanteTizioTizzoneToccareTollerareToltoTombolaTomoTonfoTonsillaTopazioTopologiaToppaTorbaTornareTorroneTortoraToscanoTossireTostaturaTotanoTraboccoTracheaTrafilaTragediaTralcioTramontoTransitoTrapanoTrarreTraslocoTrattatoTraveTrecciaTremolioTrespoloTributoTrichecoTrifoglioTrilloTrinceaTrioTristezzaTrituratoTrivellaTrombaTronoTroppoTrottolaTrovareTruccatoTubaturaTuffatoTulipanoTumultoTunisiaTurbareTurchinoTutaTutelaUbicatoUccelloUccisoreUdireUditivoUffaUfficioUgualeUlisseUltimatoUmanoUmileUmorismoUncinettoUngereUnghereseUnicornoUnificatoUnisonoUnitarioUnteUovoUpupaUraganoUrgenzaUrloUsanzaUsatoUscitoUsignoloUsuraioUtensileUtilizzoUtopiaVacanteVaccinatoVagabondoVagliatoValangaValgoValicoVallettaValorosoValutareValvolaVampataVangareVanitosoVanoVantaggioVanveraVaporeVaranoVarcatoVarianteVascaVedettaVedovaVedutoVegetaleVeicoloVelcroVelinaVellutoVeloceVenatoVendemmiaVentoVeraceVerbaleVergognaVerificaVeroVerrucaVerticaleVescicaVessilloVestaleVeteranoVetrinaVetustoViandanteVibranteVicendaVichingoVicinanzaVidimareVigiliaVignetoVigoreVileVillanoViminiVincitoreViolaViperaVirgolaVirologoVirulentoViscosoVisioneVispoVissutoVisuraVitaVitelloVittimaVivandaVividoViziareVoceVogaVolatileVolereVolpeVoragineVulcanoZampognaZannaZappatoZatteraZavorraZefiroZelanteZeloZenzeroZerbinoZibettoZincoZirconeZittoZollaZoticoZuccheroZufoloZuluZuppa"; -var wordlist = null; -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' '); - if (wordlist_1.check(lang) !== '0x5c1362d88fd4cf614a96f3234941d29f7d37c08c5292fde03bf62c2db6ff7620') { - wordlist = null; - throw new Error('BIP39 Wordlist for it (Italian) FAILED'); - } -} -var LangIt = /** @class */ (function (_super) { - __extends(LangIt, _super); - function LangIt() { - return _super.call(this, 'it') || this; - } - LangIt.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangIt.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - return LangIt; -}(wordlist_1.Wordlist)); -var langIt = new LangIt(); -exports.langIt = langIt; -wordlist_1.register(langIt); diff --git a/truebit-implementation/node_modules/ethers/wordlists/lang-ja.js b/truebit-implementation/node_modules/ethers/wordlists/lang-ja.js deleted file mode 100644 index 48c649b9..00000000 --- a/truebit-implementation/node_modules/ethers/wordlists/lang-ja.js +++ /dev/null @@ -1,146 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var wordlist_1 = require("./wordlist"); -var bytes_1 = require("../utils/bytes"); -var utf8_1 = require("../utils/utf8"); -var errors = __importStar(require("../utils/errors")); -var data = [ - // 4-kana words - 'AQRASRAGBAGUAIRAHBAghAURAdBAdcAnoAMEAFBAFCBKFBQRBSFBCXBCDBCHBGFBEQBpBBpQBIkBHNBeOBgFBVCBhBBhNBmOBmRBiHBiFBUFBZDBvFBsXBkFBlcBjYBwDBMBBTBBTRBWBBWXXaQXaRXQWXSRXCFXYBXpHXOQXHRXhRXuRXmXXbRXlXXwDXTRXrCXWQXWGaBWaKcaYgasFadQalmaMBacAKaRKKBKKXKKjKQRKDRKCYKCRKIDKeVKHcKlXKjHKrYNAHNBWNaRNKcNIBNIONmXNsXNdXNnBNMBNRBNrXNWDNWMNFOQABQAHQBrQXBQXFQaRQKXQKDQKOQKFQNBQNDQQgQCXQCDQGBQGDQGdQYXQpBQpQQpHQLXQHuQgBQhBQhCQuFQmXQiDQUFQZDQsFQdRQkHQbRQlOQlmQPDQjDQwXQMBQMDQcFQTBQTHQrDDXQDNFDGBDGQDGRDpFDhFDmXDZXDbRDMYDRdDTRDrXSAhSBCSBrSGQSEQSHBSVRShYShkSyQSuFSiBSdcSoESocSlmSMBSFBSFKSFNSFdSFcCByCaRCKcCSBCSRCCrCGbCEHCYXCpBCpQCIBCIHCeNCgBCgFCVECVcCmkCmwCZXCZFCdRClOClmClFCjDCjdCnXCwBCwXCcRCFQCFjGXhGNhGDEGDMGCDGCHGIFGgBGVXGVEGVRGmXGsXGdYGoSGbRGnXGwXGwDGWRGFNGFLGFOGFdGFkEABEBDEBFEXOEaBEKSENBENDEYXEIgEIkEgBEgQEgHEhFEudEuFEiBEiHEiFEZDEvBEsXEsFEdXEdREkFEbBEbRElFEPCEfkEFNYAEYAhYBNYQdYDXYSRYCEYYoYgQYgRYuRYmCYZTYdBYbEYlXYjQYRbYWRpKXpQopQnpSFpCXpIBpISphNpdBpdRpbRpcZpFBpFNpFDpFopFrLADLBuLXQLXcLaFLCXLEhLpBLpFLHXLeVLhILdHLdRLoDLbRLrXIABIBQIBCIBsIBoIBMIBRIXaIaRIKYIKRINBINuICDIGBIIDIIkIgRIxFIyQIiHIdRIbYIbRIlHIwRIMYIcRIRVITRIFBIFNIFQOABOAFOBQOaFONBONMOQFOSFOCDOGBOEQOpBOLXOIBOIFOgQOgFOyQOycOmXOsXOdIOkHOMEOMkOWWHBNHXNHXWHNXHDuHDRHSuHSRHHoHhkHmRHdRHkQHlcHlRHwBHWcgAEgAggAkgBNgBQgBEgXOgYcgLXgHjgyQgiBgsFgdagMYgWSgFQgFEVBTVXEVKBVKNVKDVKYVKRVNBVNYVDBVDxVSBVSRVCjVGNVLXVIFVhBVhcVsXVdRVbRVlRhBYhKYhDYhGShxWhmNhdahdkhbRhjohMXhTRxAXxXSxKBxNBxEQxeNxeQxhXxsFxdbxlHxjcxFBxFNxFQxFOxFoyNYyYoybcyMYuBQuBRuBruDMuCouHBudQukkuoBulVuMXuFEmCYmCRmpRmeDmiMmjdmTFmFQiADiBOiaRiKRiNBiNRiSFiGkiGFiERipRiLFiIFihYibHijBijEiMXiWBiFBiFCUBQUXFUaRUNDUNcUNRUNFUDBUSHUCDUGBUGFUEqULNULoUIRUeEUeYUgBUhFUuRUiFUsXUdFUkHUbBUjSUjYUwXUMDUcHURdUTBUrBUrXUrQZAFZXZZaRZKFZNBZQFZCXZGBZYdZpBZLDZIFZHXZHNZeQZVRZVFZmXZiBZvFZdFZkFZbHZbFZwXZcCZcRZRBvBQvBGvBLvBWvCovMYsAFsBDsaRsKFsNFsDrsSHsSFsCXsCRsEBsEHsEfspBsLBsLDsIgsIRseGsbRsFBsFQsFSdNBdSRdCVdGHdYDdHcdVbdySduDdsXdlRdwXdWYdWcdWRkBMkXOkaRkNIkNFkSFkCFkYBkpRkeNkgBkhVkmXksFklVkMBkWDkFNoBNoaQoaFoNBoNXoNaoNEoSRoEroYXoYCoYbopRopFomXojkowXorFbBEbEIbdBbjYlaRlDElMXlFDjKjjSRjGBjYBjYkjpRjLXjIBjOFjeVjbRjwBnXQnSHnpFnLXnINnMBnTRwXBwXNwXYwNFwQFwSBwGFwLXwLDweNwgBwuHwjDwnXMBXMpFMIBMeNMTHcaQcNBcDHcSFcCXcpBcLXcLDcgFcuFcnXcwXccDcTQcrFTQErXNrCHrpFrgFrbFrTHrFcWNYWNbWEHWMXWTR', - // 5-kana words - 'ABGHABIJAEAVAYJQALZJAIaRAHNXAHdcAHbRAZJMAZJRAZTRAdVJAklmAbcNAjdRAMnRAMWYAWpRAWgRAFgBAFhBAFdcBNJBBNJDBQKBBQhcBQlmBDEJBYJkBYJTBpNBBpJFBIJBBIJDBIcABOKXBOEJBOVJBOiJBOZJBepBBeLXBeIFBegBBgGJBVJXBuocBiJRBUJQBlXVBlITBwNFBMYVBcqXBTlmBWNFBWiJBWnRBFGHBFwXXKGJXNJBXNZJXDTTXSHSXSVRXSlHXCJDXGQJXEhXXYQJXYbRXOfXXeNcXVJFXhQJXhEJXdTRXjdXXMhBXcQTXRGBXTEBXTnQXFCXXFOFXFgFaBaFaBNJaBCJaBpBaBwXaNJKaNJDaQIBaDpRaEPDaHMFamDJalEJaMZJaFaFaFNBaFQJaFLDaFVHKBCYKBEBKBHDKXaFKXGdKXEJKXpHKXIBKXZDKXwXKKwLKNacKNYJKNJoKNWcKDGdKDTRKChXKGaRKGhBKGbRKEBTKEaRKEPTKLMDKLWRKOHDKVJcKdBcKlIBKlOPKFSBKFEPKFpFNBNJNJBQNBGHNBEPNBHXNBgFNBVXNBZDNBsXNBwXNNaRNNJDNNJENNJkNDCJNDVDNGJRNJiDNZJNNsCJNJFNNFSBNFCXNFEPNFLXNFIFQJBFQCaRQJEQQLJDQLJFQIaRQOqXQHaFQHHQQVJXQVJDQhNJQmEIQZJFQsJXQJrFQWbRDJABDBYJDXNFDXCXDXLXDXZDDXsJDQqXDSJFDJCXDEPkDEqXDYmQDpSJDOCkDOGQDHEIDVJDDuDuDWEBDJFgSBNDSBSFSBGHSBIBSBTQSKVYSJQNSJQiSJCXSEqXSJYVSIiJSOMYSHAHSHaQSeCFSepQSegBSHdHSHrFShSJSJuHSJUFSkNRSrSrSWEBSFaHSJFQSFCXSFGDSFYXSFODSFgBSFVXSFhBSFxFSFkFSFbBSFMFCADdCJXBCXaFCXKFCXNFCXCXCXGBCXEJCXYBCXLDCXIBCXOPCXHXCXgBCXhBCXiBCXlDCXcHCJNBCJNFCDCJCDGBCDVXCDhBCDiDCDJdCCmNCpJFCIaRCOqXCHCHCHZJCViJCuCuCmddCJiFCdNBCdHhClEJCnUJCreSCWlgCWTRCFBFCFNBCFYBCFVFCFhFCFdSCFTBCFWDGBNBGBQFGJBCGBEqGBpBGBgQGNBEGNJYGNkOGNJRGDUFGJpQGHaBGJeNGJeEGVBlGVKjGiJDGvJHGsVJGkEBGMIJGWjNGFBFGFCXGFGBGFYXGFpBGFMFEASJEAWpEJNFECJVEIXSEIQJEOqXEOcFEeNcEHEJEHlFEJgFEhlmEmDJEmZJEiMBEUqXEoSREPBFEPXFEPKFEPSFEPEFEPpFEPLXEPIBEJPdEPcFEPTBEJnXEqlHEMpREFCXEFODEFcFYASJYJAFYBaBYBVXYXpFYDhBYCJBYJGFYYbRYeNcYJeVYiIJYZJcYvJgYvJRYJsXYsJFYMYMYreVpBNHpBEJpBwXpQxFpYEJpeNDpJeDpeSFpeCHpHUJpHbBpHcHpmUJpiiJpUJrpsJuplITpFaBpFQqpFGBpFEfpFYBpFpBpFLJpFIDpFgBpFVXpFyQpFuFpFlFpFjDpFnXpFwXpJFMpFTBLXCJLXEFLXhFLXUJLXbFLalmLNJBLSJQLCLCLGJBLLDJLHaFLeNFLeSHLeCXLepFLhaRLZsJLsJDLsJrLocaLlLlLMdbLFNBLFSBLFEHLFkFIBBFIBXFIBaQIBKXIBSFIBpHIBLXIBgBIBhBIBuHIBmXIBiFIBZXIBvFIBbFIBjQIBwXIBWFIKTRIQUJIDGFICjQIYSRIINXIJeCIVaRImEkIZJFIvJRIsJXIdCJIJoRIbBQIjYBIcqXITFVIreVIFKFIFSFIFCJIFGFIFLDIFIBIJFOIFgBIFVXIJFhIFxFIFmXIFdHIFbBIJFrIJFWOBGBOQfXOOKjOUqXOfXBOqXEOcqXORVJOFIBOFlDHBIOHXiFHNTRHCJXHIaRHHJDHHEJHVbRHZJYHbIBHRsJHRkDHWlmgBKFgBSBgBCDgBGHgBpBgBIBgBVJgBuBgBvFgKDTgQVXgDUJgGSJgOqXgmUMgZIJgTUJgWIEgFBFgFNBgFDJgFSFgFGBgFYXgJFOgFgQgFVXgFhBgFbHgJFWVJABVQKcVDgFVOfXVeDFVhaRVmGdViJYVMaRVFNHhBNDhBCXhBEqhBpFhBLXhNJBhSJRheVXhhKEhxlmhZIJhdBQhkIJhbMNhMUJhMZJxNJgxQUJxDEkxDdFxSJRxplmxeSBxeCXxeGFxeYXxepQxegBxWVcxFEQxFLXxFIBxFgBxFxDxFZtxFdcxFbBxFwXyDJXyDlcuASJuDJpuDIBuCpJuGSJuIJFueEFuZIJusJXudWEuoIBuWGJuFBcuFKEuFNFuFQFuFDJuFGJuFVJuFUtuFdHuFTBmBYJmNJYmQhkmLJDmLJomIdXmiJYmvJRmsJRmklmmMBymMuCmclmmcnQiJABiJBNiJBDiBSFiBCJiBEFiBYBiBpFiBLXiBTHiJNciDEfiCZJiECJiJEqiOkHiHKFieNDiHJQieQcieDHieSFieCXieGFieEFieIHiegFihUJixNoioNXiFaBiFKFiFNDiFEPiFYXitFOitFHiFgBiFVEiFmXiFitiFbBiFMFiFrFUCXQUIoQUIJcUHQJUeCEUHwXUUJDUUqXUdWcUcqXUrnQUFNDUFSHUFCFUFEfUFLXUtFOZBXOZXSBZXpFZXVXZEQJZEJkZpDJZOqXZeNHZeCDZUqXZFBQZFEHZFLXvBAFvBKFvBCXvBEPvBpHvBIDvBgFvBuHvQNJvFNFvFGBvFIBvJFcsXCDsXLXsXsXsXlFsXcHsQqXsJQFsEqXseIFsFEHsFjDdBxOdNpRdNJRdEJbdpJRdhZJdnSJdrjNdFNJdFQHdFhNkNJDkYaRkHNRkHSRkVbRkuMRkjSJkcqDoSJFoEiJoYZJoOfXohEBoMGQocqXbBAFbBXFbBaFbBNDbBGBbBLXbBTBbBWDbGJYbIJHbFQqbFpQlDgQlOrFlVJRjGEBjZJRnXvJnXbBnEfHnOPDngJRnxfXnUJWwXEJwNpJwDpBwEfXwrEBMDCJMDGHMDIJMLJDcQGDcQpHcqXccqNFcqCXcFCJRBSBRBGBRBEJRBpQTBNFTBQJTBpBTBVXTFABTFSBTFCFTFGBTFMDrXCJrXLDrDNJrEfHrFQJrFitWNjdWNTR', - // 6-kana words - 'AKLJMANOPFASNJIAEJWXAYJNRAIIbRAIcdaAeEfDAgidRAdjNYAMYEJAMIbRAFNJBAFpJFBBIJYBDZJFBSiJhBGdEBBEJfXBEJqXBEJWRBpaUJBLXrXBIYJMBOcfXBeEfFBestXBjNJRBcDJOBFEqXXNvJRXDMBhXCJNYXOAWpXONJWXHDEBXeIaRXhYJDXZJSJXMDJOXcASJXFVJXaBQqXaBZJFasXdQaFSJQaFEfXaFpJHaFOqXKBNSRKXvJBKQJhXKEJQJKEJGFKINJBKIJjNKgJNSKVElmKVhEBKiJGFKlBgJKjnUJKwsJYKMFIJKFNJDKFIJFKFOfXNJBSFNJBCXNBpJFNJBvQNJBMBNJLJXNJOqXNJeCXNJeGFNdsJCNbTKFNwXUJQNFEPQDiJcQDMSJQSFpBQGMQJQJeOcQyCJEQUJEBQJFBrQFEJqDXDJFDJXpBDJXIMDGiJhDIJGRDJeYcDHrDJDVXgFDkAWpDkIgRDjDEqDMvJRDJFNFDJFIBSKclmSJQOFSJQVHSJQjDSJGJBSJGJFSECJoSHEJqSJHTBSJVJDSViJYSZJNBSJsJDSFSJFSFEfXSJFLXCBUJVCJXSBCJXpBCXVJXCJXsXCJXdFCJNJHCLIJgCHiJFCVNJMChCJhCUHEJCsJTRCJdYcCoQJCCFEfXCFIJgCFUJxCFstFGJBaQGJBIDGQJqXGYJNRGJHKFGeQqDGHEJFGJeLXGHIiJGHdBlGUJEBGkIJTGFQPDGJFEqEAGegEJIJBEJVJXEhQJTEiJNcEJZJFEJoEqEjDEqEPDsXEPGJBEPOqXEPeQFEfDiDEJfEFEfepQEfMiJEqXNBEqDIDEqeSFEqVJXEMvJRYXNJDYXEJHYKVJcYYJEBYJeEcYJUqXYFpJFYFstXpAZJMpBSJFpNBNFpeQPDpHLJDpHIJFpHgJFpeitFpHZJFpJFADpFSJFpJFCJpFOqXpFitBpJFZJLXIJFLIJgRLVNJWLVHJMLwNpJLFGJBLFLJDLFOqXLJFUJIBDJXIBGJBIJBYQIJBIBIBOqXIBcqDIEGJFILNJTIIJEBIOiJhIJeNBIJeIBIhiJIIWoTRIJFAHIJFpBIJFuHIFUtFIJFTHOSBYJOEcqXOHEJqOvBpFOkVJrObBVJOncqDOcNJkHhNJRHuHJuHdMhBgBUqXgBsJXgONJBgHNJDgHHJQgJeitgHsJXgJyNagyDJBgZJDrgsVJQgkEJNgkjSJgJFAHgFCJDgFZtMVJXNFVXQfXVJXDJVXoQJVQVJQVDEfXVDvJHVEqNFVeQfXVHpJFVHxfXVVJSRVVmaRVlIJOhCXVJhHjYkhxCJVhWVUJhWiJcxBNJIxeEqDxfXBFxcFEPxFSJFxFYJXyBDQJydaUJyFOPDuYCJYuLvJRuHLJXuZJLDuFOPDuFZJHuFcqXmKHJdmCQJcmOsVJiJAGFitLCFieOfXiestXiZJMEikNJQirXzFiFQqXiFIJFiFZJFiFvtFUHpJFUteIcUteOcUVCJkUhdHcUbEJEUJqXQUMNJhURjYkUFitFZDGJHZJIxDZJVJXZJFDJZJFpQvBNJBvBSJFvJxBrseQqDsVFVJdFLJDkEJNBkmNJYkFLJDoQJOPoGsJRoEAHBoEJfFbBQqDbBZJHbFVJXlFIJBjYIrXjeitcjjCEBjWMNBwXQfXwXOaFwDsJXwCJTRwrCZJMDNJQcDDJFcqDOPRYiJFTBsJXTQIJBTFEfXTFLJDrXEJFrEJXMrFZJFWEJdEWYTlm', - // 7-kana words - 'ABCDEFACNJTRAMBDJdAcNJVXBLNJEBXSIdWRXErNJkXYDJMBXZJCJaXMNJaYKKVJKcKDEJqXKDcNJhKVJrNYKbgJVXKFVJSBNBYBwDNJeQfXNJeEqXNhGJWENJFiJRQlIJbEQJfXxDQqXcfXQFNDEJQFwXUJDYcnUJDJIBgQDIUJTRDJFEqDSJQSJFSJQIJFSOPeZtSJFZJHCJXQfXCTDEqFGJBSJFGJBOfXGJBcqXGJHNJDGJRLiJEJfXEqEJFEJPEFpBEJYJBZJFYBwXUJYiJMEBYJZJyTYTONJXpQMFXFpeGIDdpJFstXpJFcPDLBVSJRLHQJqXLJFZJFIJBNJDIJBUqXIBkFDJIJEJPTIYJGWRIJeQPDIJeEfHIJFsJXOqGDSFHXEJqXgJCsJCgGQJqXgdQYJEgFMFNBgJFcqDVJwXUJVJFZJchIgJCCxOEJqXxOwXUJyDJBVRuscisciJBiJBieUtqXiJFDJkiFsJXQUGEZJcUJFsJXZtXIrXZDZJDrZJFNJDZJFstXvJFQqXvJFCJEsJXQJqkhkNGBbDJdTRbYJMEBlDwXUJMEFiJFcfXNJDRcNJWMTBLJXC', - // 8-kana words - 'BraFUtHBFSJFdbNBLJXVJQoYJNEBSJBEJfHSJHwXUJCJdAZJMGjaFVJXEJPNJBlEJfFiJFpFbFEJqIJBVJCrIBdHiJhOPFChvJVJZJNJWxGFNIFLueIBQJqUHEJfUFstOZJDrlXEASJRlXVJXSFwVJNJWD', - // 9-kana words - 'QJEJNNJDQJEJIBSFQJEJxegBQJEJfHEPSJBmXEJFSJCDEJqXLXNJFQqXIcQsFNJFIFEJqXUJgFsJXIJBUJEJfHNFvJxEqXNJnXUJFQqD', - // 10-kana words - 'IJBEJqXZJ' -]; -// Maps each character into its kana value (the index) -var mapping = "~~AzB~X~a~KN~Q~D~S~C~G~E~Y~p~L~I~O~eH~g~V~hxyumi~~U~~Z~~v~~s~~dkoblPjfnqwMcRTr~W~~~F~~~~~Jt"; -var wordlist = null; -function hex(word) { - return bytes_1.hexlify(utf8_1.toUtf8Bytes(word)); -} -var KiYoKu = '0xe3818de38284e3818f'; -var KyoKu = '0xe3818de38283e3818f'; -function loadWords(lang) { - if (wordlist !== null) { - return; - } - wordlist = []; - // Transforms for normalizing (sort is a not quite UTF-8) - var transform = {}; - // Delete the diacritic marks - transform[utf8_1.toUtf8String([227, 130, 154])] = false; - transform[utf8_1.toUtf8String([227, 130, 153])] = false; - // Some simple transforms that sort out most of the order - transform[utf8_1.toUtf8String([227, 130, 133])] = utf8_1.toUtf8String([227, 130, 134]); - transform[utf8_1.toUtf8String([227, 129, 163])] = utf8_1.toUtf8String([227, 129, 164]); - transform[utf8_1.toUtf8String([227, 130, 131])] = utf8_1.toUtf8String([227, 130, 132]); - transform[utf8_1.toUtf8String([227, 130, 135])] = utf8_1.toUtf8String([227, 130, 136]); - // Normalize words using the transform - function normalize(word) { - var result = ''; - for (var i = 0; i < word.length; i++) { - var kana = word[i]; - var target = transform[kana]; - if (target === false) { - continue; - } - if (target) { - kana = target; - } - result += kana; - } - return result; - } - // Sort how the Japanese list is sorted - function sortJapanese(a, b) { - a = normalize(a); - b = normalize(b); - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - return 0; - } - // Load all the words - for (var length_1 = 3; length_1 <= 9; length_1++) { - var d = data[length_1 - 3]; - for (var offset = 0; offset < d.length; offset += length_1) { - var word = []; - for (var i = 0; i < length_1; i++) { - var k = mapping.indexOf(d[offset + i]); - word.push(227); - word.push((k & 0x40) ? 130 : 129); - word.push((k & 0x3f) + 128); - } - wordlist.push(utf8_1.toUtf8String(word)); - } - } - wordlist.sort(sortJapanese); - // For some reason kyoku and kiyoku are flipped in node (!!). - // The order SHOULD be: - // - kyoku - // - kiyoku - if (hex(wordlist[442]) === KiYoKu && hex(wordlist[443]) === KyoKu) { - var tmp = wordlist[442]; - wordlist[442] = wordlist[443]; - wordlist[443] = tmp; - } - if (wordlist_1.check(lang) !== '0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600') { - wordlist = null; - throw new Error('BIP39 Wordlist for ja (Japanese) FAILED'); - } -} -var LangJa = /** @class */ (function (_super) { - __extends(LangJa, _super); - function LangJa() { - return _super.call(this, 'ja') || this; - } - LangJa.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangJa.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - LangJa.prototype.split = function (mnemonic) { - if (!mnemonic.normalize) { - errors.throwError('Japanese is unsupported on this platform; missing String.prototype.normalize', errors.UNSUPPORTED_OPERATION, { operation: 'String.prototype.normalize' }); - } - return mnemonic.split(/(?:\u3000| )+/g); - }; - LangJa.prototype.join = function (words) { - return words.join('\u3000'); - }; - return LangJa; -}(wordlist_1.Wordlist)); -var langJa = new LangJa(); -exports.langJa = langJa; -wordlist_1.register(langJa); diff --git a/truebit-implementation/node_modules/ethers/wordlists/lang-ko.js b/truebit-implementation/node_modules/ethers/wordlists/lang-ko.js deleted file mode 100644 index 95729ad5..00000000 --- a/truebit-implementation/node_modules/ethers/wordlists/lang-ko.js +++ /dev/null @@ -1,74 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var wordlist_1 = require("./wordlist"); -var utf8_1 = require("../utils/utf8"); -var data = [ - 'OYAa', - 'ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@HgLnrHgMT8HgMX8HgMboHgOnrHgQToHgRg3HgoHgHgrCbHgrFnHgrLVHgvAcHgvAfHnAloHnCTrHnCnvHnGTrHnGZ8HnGnvHnJT8HnLf8HnLkvHnMg8HnRTrITvFUITvFnJTAXrJTCV8JTFT3JTFT8JTFn4JTGgvJTHT8JTJT8JTJXvJTJl3JTJnvJTLX4JTLf8JTLhvJTMT8JTMXrJTMnrJTObrJTQT8JTSlvJT8DUJT8FkJT8MTJT8OXJT8OgJT8QUJT8RfJUHZoJXFT4JXFlrJXGZ8JXGnrJXLV8JXLgvJXMXoJXMX3JXNboJXPlvJXoJTJXoLkJXrAXJXrHUJXrJgJXvJTJXvOnJX4KnJYAl3JYJT8JYLhvJYQToJYrQXJY6NUJbAl3JbCZrJbDloJbGT8JbGgrJbJXvJbJboJbLf8JbLhrJbLl3JbMnvJbRg8JbSZ8JboDbJbrCZJbrSUJb3KnJb8LnJfRn8JgAXrJgCZrJgDTrJgGZrJgGZ8JgHToJgJT8JgJXoJgJgvJgLX4JgLZ3JgLZ8JgLn4JgMgrJgMn4JgOgvJgPX6JgRnvJgSToJgoCZJgoJbJgoMYJgrJXJgrJgJgrLjJg6MTJlCn3JlGgvJlJl8Jl4AnJl8FnJl8HgJnAToJnATrJnAbvJnDUoJnGnrJnJXrJnJXvJnLhvJnLnrJnLnvJnMToJnMT8JnMXvJnMX3JnMg8JnMlrJnMn4JnOX8JnST4JnSX3JnoAgJnoAnJnoJTJnoObJnrAbJnrAkJnrHnJnrJTJnrJYJnrOYJnrScJnvCUJnvFaJnvJgJnvJnJnvOYJnvQUJnvRUJn3FnJn3JTKnFl3KnLT6LTDlvLTMnoLTOn3LTRl3LTSb4LTSlrLToAnLToJgLTrAULTrAcLTrCULTrHgLTrMgLT3JnLULnrLUMX8LUoJgLVATrLVDTrLVLb8LVoJgLV8MgLV8RTLXDg3LXFlrLXrCnLXrLXLX3GTLX4GgLX4OYLZAXrLZAcrLZAgrLZAhrLZDXyLZDlrLZFbrLZFl3LZJX6LZJX8LZLc8LZLnrLZSU8LZoJTLZoJnLZrAgLZrAnLZrJYLZrLULZrMgLZrSkLZvAnLZvGULZvJeLZvOTLZ3FZLZ4JXLZ8STLZ8ScLaAT3LaAl3LaHT8LaJTrLaJT8LaJXrLaJgvLaJl4LaLVoLaMXrLaMXvLaMX8LbClvLbFToLbHlrLbJn4LbLZ3LbLhvLbMXrLbMnoLbvSULcLnrLc8HnLc8MTLdrMnLeAgoLeOgvLeOn3LfAl3LfLnvLfMl3LfOX8Lf8AnLf8JXLf8LXLgJTrLgJXrLgJl8LgMX8LgRZrLhCToLhrAbLhrFULhrJXLhvJYLjHTrLjHX4LjJX8LjLhrLjSX3LjSZ4LkFX4LkGZ8LkGgvLkJTrLkMXoLkSToLkSU8LkSZ8LkoOYLl3FfLl3MgLmAZrLmCbrLmGgrLmHboLmJnoLmJn3LmLfoLmLhrLmSToLnAX6LnAb6LnCZ3LnCb3LnDTvLnDb8LnFl3LnGnrLnHZvLnHgvLnITvLnJT8LnJX8LnJlvLnLf8LnLg6LnLhvLnLnoLnMXrLnMg8LnQlvLnSbrLnrAgLnrAnLnrDbLnrFkLnrJdLnrMULnrOYLnrSTLnvAnLnvDULnvHgLnvOYLnvOnLn3GgLn4DULn4JTLn4JnMTAZoMTAloMTDb8MTFT8MTJnoMTJnrMTLZrMTLhrMTLkvMTMX8MTRTrMToATMTrDnMTrOnMT3JnMT4MnMT8FUMT8FaMT8FlMT8GTMT8GbMT8GnMT8HnMT8JTMT8JbMT8OTMUCl8MUJTrMUJU8MUMX8MURTrMUSToMXAX6MXAb6MXCZoMXFXrMXHXrMXLgvMXOgoMXrAUMXrAnMXrHgMXrJYMXrJnMXrMTMXrMgMXrOYMXrSZMXrSgMXvDUMXvOTMX3JgMX3OTMX4JnMX8DbMX8FnMX8HbMX8HgMX8HnMX8LbMX8MnMX8OnMYAb8MYGboMYHTvMYHX4MYLTrMYLnvMYMToMYOgvMYRg3MYSTrMbAToMbAXrMbAl3MbAn8MbGZ8MbJT8MbJXrMbMXvMbMX8MbMnoMbrMUMb8AfMb8FbMb8FkMcJXoMeLnrMgFl3MgGTvMgGXoMgGgrMgGnrMgHT8MgHZrMgJnoMgLnrMgLnvMgMT8MgQUoMgrHnMgvAnMg8HgMg8JYMg8LfMloJnMl8ATMl8AXMl8JYMnAToMnAT4MnAZ8MnAl3MnAl4MnCl8MnHT8MnHg8MnJnoMnLZoMnLhrMnMXoMnMX3MnMnrMnOgvMnrFbMnrFfMnrFnMnrNTMnvJXNTMl8OTCT3OTFV8OTFn3OTHZvOTJXrOTOl3OT3ATOT3JUOT3LZOT3LeOT3MbOT8ATOT8AbOT8AgOT8MbOUCXvOUMX3OXHXvOXLl3OXrMUOXvDbOX6NUOX8JbOYFZoOYLbrOYLkoOYMg8OYSX3ObHTrObHT4ObJgrObLhrObMX3ObOX8Ob8FnOeAlrOeJT8OeJXrOeJnrOeLToOeMb8OgJXoOgLXoOgMnrOgOXrOgOloOgoAgOgoJbOgoMYOgoSTOg8AbOjLX4OjMnoOjSV8OnLVoOnrAgOn3DUPXQlrPXvFXPbvFTPdAT3PlFn3PnvFbQTLn4QToAgQToMTQULV8QURg8QUoJnQXCXvQbFbrQb8AaQb8AcQb8FbQb8MYQb8ScQeAlrQeLhrQjAn3QlFXoQloJgQloSnRTLnvRTrGURTrJTRUJZrRUoJlRUrQnRZrLmRZrMnRZrSnRZ8ATRZ8JbRZ8ScRbMT8RbST3RfGZrRfMX8RfMgrRfSZrRnAbrRnGT8RnvJgRnvLfRnvMTRn8AaSTClvSTJgrSTOXrSTRg3STRnvSToAcSToAfSToAnSToHnSToLjSToMTSTrAaSTrEUST3BYST8AgST8LmSUAZvSUAgrSUDT4SUDT8SUGgvSUJXoSUJXvSULTrSU8JTSU8LjSV8AnSV8JgSXFToSXLf8SYvAnSZrDUSZrMUSZrMnSZ8HgSZ8JTSZ8JgSZ8MYSZ8QUSaQUoSbCT3SbHToSbQYvSbSl4SboJnSbvFbSb8HbSb8JgSb8OTScGZrScHgrScJTvScMT8ScSToScoHbScrMTScvAnSeAZrSeAcrSeHboSeJUoSeLhrSeMT8SeMXrSe6JgSgHTrSkJnoSkLnvSk8CUSlFl3SlrSnSl8GnSmAboSmGT8SmJU8', - 'ATLnDlATrAZoATrJX4ATrMT8ATrMX4ATrRTrATvDl8ATvJUoATvMl8AT3AToAT3MX8AT8CT3AT8DT8AT8HZrAT8HgoAUAgFnAUCTFnAXoMX8AXrAT8AXrGgvAXrJXvAXrOgoAXvLl3AZvAgoAZvFbrAZvJXoAZvJl8AZvJn3AZvMX8AZvSbrAZ8FZoAZ8LZ8AZ8MU8AZ8OTvAZ8SV8AZ8SX3AbAgFZAboJnoAbvGboAb8ATrAb8AZoAb8AgrAb8Al4Ab8Db8Ab8JnoAb8LX4Ab8LZrAb8LhrAb8MT8Ab8OUoAb8Qb8Ab8ST8AcrAUoAcrAc8AcrCZ3AcrFT3AcrFZrAcrJl4AcrJn3AcrMX3AcrOTvAc8AZ8Ac8MT8AfAcJXAgoFn4AgoGgvAgoGnrAgoLc8AgoMXoAgrLnrAkrSZ8AlFXCTAloHboAlrHbrAlrLhrAlrLkoAl3CZrAl3LUoAl3LZrAnrAl4AnrMT8An3HT4BT3IToBX4MnvBb!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6', - 'ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv', - 'AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo', - 'AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg', - 'HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb', - 'AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl' -]; -var codes = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'; -function getHangul(code) { - if (code >= 40) { - code = code + 168 - 40; - } - else if (code >= 19) { - code = code + 97 - 19; - } - return utf8_1.toUtf8String([225, (code >> 6) + 132, (code & 0x3f) + 128]); -} -var wordlist = null; -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = []; - data.forEach(function (data, length) { - length += 4; - for (var i = 0; i < data.length; i += length) { - var word = ''; - for (var j = 0; j < length; j++) { - word += getHangul(codes.indexOf(data[i + j])); - } - wordlist.push(word); - } - }); - wordlist.sort(); - if (wordlist_1.check(lang) !== '0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a') { - wordlist = null; - throw new Error('BIP39 Wordlist for ko (Korean) FAILED'); - } -} -var LangKo = /** @class */ (function (_super) { - __extends(LangKo, _super); - function LangKo() { - return _super.call(this, 'ko') || this; - } - LangKo.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangKo.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - return LangKo; -}(wordlist_1.Wordlist)); -var langKo = new LangKo(); -exports.langKo = langKo; -wordlist_1.register(langKo); diff --git a/truebit-implementation/node_modules/ethers/wordlists/lang-zh.js b/truebit-implementation/node_modules/ethers/wordlists/lang-zh.js deleted file mode 100644 index 40af5f63..00000000 --- a/truebit-implementation/node_modules/ethers/wordlists/lang-zh.js +++ /dev/null @@ -1,79 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var wordlist_1 = require("./wordlist"); -var utf8_1 = require("../utils/utf8"); -var data = "}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN> 2), - 128 + codes.indexOf(data[i * 3 + 1]), - 128 + codes.indexOf(data[i * 3 + 2]), - ]; - if (lang.locale === 'zh_tw') { - var common = s % 4; - for (var i_1 = common; i_1 < 3; i_1++) { - bytes[i_1] = codes.indexOf(deltaData[deltaOffset++]) + ((i_1 == 0) ? 228 : 128); - } - } - wordlist[lang.locale].push(utf8_1.toUtf8String(bytes)); - } - if (wordlist_1.check(lang) !== Checks[lang.locale]) { - wordlist[lang.locale] = null; - throw new Error('BIP39 Wordlist for ' + lang.locale + ' (Chinese) FAILED'); - } -} -var LangZh = /** @class */ (function (_super) { - __extends(LangZh, _super); - function LangZh(country) { - return _super.call(this, 'zh_' + country) || this; - } - LangZh.prototype.getWord = function (index) { - loadWords(this); - return wordlist[this.locale][index]; - }; - LangZh.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist[this.locale].indexOf(word); - }; - LangZh.prototype.split = function (mnemonic) { - mnemonic = mnemonic.replace(/(?:\u3000| )+/g, ''); - return mnemonic.split(''); - }; - return LangZh; -}(wordlist_1.Wordlist)); -var langZhCn = new LangZh('cn'); -exports.langZhCn = langZhCn; -wordlist_1.register(langZhCn); -wordlist_1.register(langZhCn, 'zh'); -var langZhTw = new LangZh('tw'); -exports.langZhTw = langZhTw; -wordlist_1.register(langZhTw); diff --git a/truebit-implementation/node_modules/ethers/wordlists/wordlist.js b/truebit-implementation/node_modules/ethers/wordlists/wordlist.js deleted file mode 100644 index 9f4c0bbe..00000000 --- a/truebit-implementation/node_modules/ethers/wordlists/wordlist.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -// This gets overriddenby gulp during bip39-XX -var exportWordlist = false; -var hash_1 = require("../utils/hash"); -var properties_1 = require("../utils/properties"); -function check(wordlist) { - var words = []; - for (var i = 0; i < 2048; i++) { - var word = wordlist.getWord(i); - if (i !== wordlist.getWordIndex(word)) { - return '0x'; - } - words.push(word); - } - return hash_1.id(words.join('\n') + '\n'); -} -exports.check = check; -var Wordlist = /** @class */ (function () { - function Wordlist(locale) { - properties_1.defineReadOnly(this, 'locale', locale); - } - // Subclasses may override this - Wordlist.prototype.split = function (mnemonic) { - return mnemonic.toLowerCase().split(/ +/g); - }; - // Subclasses may override this - Wordlist.prototype.join = function (words) { - return words.join(' '); - }; - return Wordlist; -}()); -exports.Wordlist = Wordlist; -function register(lang, name) { - if (!name) { - name = lang.locale; - } - if (exportWordlist) { - var g = global; - if (!(g.wordlists)) { - properties_1.defineReadOnly(g, 'wordlists', {}); - } - if (!g.wordlists[name]) { - properties_1.defineReadOnly(g.wordlists, name, lang); - } - if (g.ethers && g.ethers.wordlists) { - if (!g.ethers.wordlists[name]) { - properties_1.defineReadOnly(g.ethers.wordlists, name, lang); - } - } - } -} -exports.register = register; diff --git a/truebit-implementation/node_modules/ethjs-unit/CHANGELOG.md b/truebit-implementation/node_modules/ethjs-unit/CHANGELOG.md deleted file mode 100644 index 2fd9e31e..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/CHANGELOG.md +++ /dev/null @@ -1,28 +0,0 @@ -# 0.1.5 -- update bn formatting - -1. Update bn formatting - -# 0.1.3 -- config fixes - -1. webpack config updates -2. build config updates - -# 0.1.2 -- removed BigNumber's, replaced with all BN.js - -1. new approach with BN.js and absolute precision -2. more coverage -3. more docs - -# 0.0.2 -- ethjs-unit - -1. More test coverage -2. Config -3. More docs - -# 0.0.1 -- ethjs-unit - -1. Basic testing -2. Basic docs -3. License -4. Linting -5. Basic exports diff --git a/truebit-implementation/node_modules/ethjs-unit/LICENSE b/truebit-implementation/node_modules/ethjs-unit/LICENSE deleted file mode 100644 index 37b6d297..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Nick Dodson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/ethjs-unit/README.md b/truebit-implementation/node_modules/ethjs-unit/README.md deleted file mode 100644 index 5ad4b7e0..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/README.md +++ /dev/null @@ -1,181 +0,0 @@ -## ethjs-unit - -
- - - Dependency Status - - - - - devDependency Status - - - - - Build Status - - - - - NPM version - - - - - Test Coverage - - - - - js-airbnb-style - -
- -
- -A simple module for handling Ethereum unit convertion. - -## Install - -``` -npm install --save ethjs-unit -``` - -## Usage - -```js -const unit = require('ethjs-unit'); - -var val1 = unit.toWei(249824778, 'ether'); - -// result 249824778000000000000000000 - -var val2 = unit.fromWei('249824778000000000000000000', 'ether'); - -// result '249824778' -``` - -## About - -A port from the `web3.js` library, that just handles the unit convertion between the various types of Ethereum currency units. - -Note, the `toWei` returns a BN instance while `fromWei` always returns a string number. - -## Amorphic Data Formatting - -`ethjs-unit` uses the [number-to-bn](http://github.com/silentcicero/number-to-bn) module to format all number values (hex or otherwise) into digestable BN.js number instances. - -## Methods Available & Objects - -``` -unitMap { unitName: singleUnitWeiValue, ... } -getValueOfUnit -toWei -fromWei -``` - -## Supported Units - -``` -'wei': '1', -'kwei': '1000', -'Kwei': '1000', -'babbage': '1000', -'femtoether': '1000', -'mwei': '1000000', -'Mwei': '1000000', -'lovelace': '1000000', -'picoether': '1000000', -'gwei': '1000000000', -'Gwei': '1000000000', -'shannon': '1000000000', -'nanoether': '1000000000', -'nano': '1000000000', -'szabo': '1000000000000', -'microether': '1000000000000', -'micro': '1000000000000', -'finney': '1000000000000000', -'milliether': '1000000000000000', -'milli': '1000000000000000', -'ether': '1000000000000000000', -'kether': '1000000000000000000000', -'grand': '1000000000000000000000', -'mether': '1000000000000000000000000', -'gether': '1000000000000000000000000000', -'tether': '1000000000000000000000000000000' -``` - -## Why BN.js? - -`ethjs` has made a policy of using `BN.js` accross all of our modules. Here are some reasons why: - - 1. Lighter than alternatives (BigNumber.js) - 2. Faster than most alternatives, see [benchmarks](https://github.com/indutny/bn.js/issues/89) - 3. Used by the Ethereum foundation across all [`ethereumjs`](https://github.com/ethereumjs) repositories - 4. Is already used by a critical JS dependency of many ethereum packages, see package [`elliptic`](https://github.com/indutny/elliptic) - 5. Does not support decimals or floats (for greater precision), remember, the Ethereum blockchain cannot and will not support float values or decimal numbers - -## Contributing - -Please help better the ecosystem by submitting issues and pull requests to default. We need all the help we can get to build the absolute best linting standards and utilities. We follow the AirBNB linting standard and the unix philosophy. - -## Guides - -You'll find more detailed information on using `ethjs-unit` and tailoring it to your needs in our guides: - -- [User guide](docs/user-guide.md) - Usage, configuration, FAQ and complementary tools. -- [Developer guide](docs/developer-guide.md) - Contributing to `ethjs-unit`, writing coverage and updates. - -## Help out - -There is always a lot of work to do, and will have many rules to maintain. So please help out in any way that you can: - -- Create, enhance, and debug ethjs rules (see our guide to ["Working on rules"](./github/CONTRIBUTING.md)). -- Improve documentation. -- Chime in on any open issue or pull request. -- Open new issues about your ideas for making `ethjs-unit` better, and pull requests to show us how your idea works. -- Add new tests to *absolutely anything*. -- Create or contribute to ecosystem tools, like modules for encoding or contracts. -- Spread the word. - -Please consult our [Code of Conduct](CODE_OF_CONDUCT.md) docs before helping out. - -We communicate via [issues](https://github.com/ethjs/ethjs-unit/issues) and [pull requests](https://github.com/ethjs/ethjs-unit/pulls). - -## Important documents - -- [Changelog](CHANGELOG.md) -- [Code of Conduct](CODE_OF_CONDUCT.md) -- [License](https://raw.githubusercontent.com/ethjs/ethjs-unit/master/LICENSE) - -## Licence - -This project is licensed under the MIT license, Copyright (c) 2016 Nick Dodson. For more information see LICENSE.md. - -``` -The MIT License - -Copyright (c) 2016 Nick Dodson. nickdodson.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. -``` diff --git a/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.js b/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.js deleted file mode 100644 index 81b2d694..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.js +++ /dev/null @@ -1,5836 +0,0 @@ - /* eslint-disable */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define("ethUnit", [], factory); - else if(typeof exports === 'object') - exports["ethUnit"] = factory(); - else - root["ethUnit"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.l = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // identity function for calling harmory imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; - -/******/ // define getter function for harmory exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ }; - -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 3); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module) {(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = __webpack_require__(1).Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10)(module))) - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(Buffer, global) {/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = __webpack_require__(4) -var ieee754 = __webpack_require__(5) -var isArray = __webpack_require__(7) - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Due to various browser bugs, sometimes the Object implementation will be used even - * when the browser supports typed arrays. - * - * Note: - * - * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. - - * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they - * get the Object implementation, which is slower but behaves correctly. - */ -Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined - ? global.TYPED_ARRAY_SUPPORT - : typedArraySupport() - -/* - * Export kMaxLength after typed array support is determined. - */ -exports.kMaxLength = kMaxLength() - -function typedArraySupport () { - try { - var arr = new Uint8Array(1) - arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} - return arr.foo() === 42 && // typed array instances can be augmented - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -} - -function kMaxLength () { - return Buffer.TYPED_ARRAY_SUPPORT - ? 0x7fffffff - : 0x3fffffff -} - -function createBuffer (that, length) { - if (kMaxLength() < length) { - throw new RangeError('Invalid typed array length') - } - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = new Uint8Array(length) - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - if (that === null) { - that = new Buffer(length) - } - that.length = length - } - - return that -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { - return new Buffer(arg, encodingOrOffset, length) - } - - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new Error( - 'If encoding is specified then the first argument must be a string' - ) - } - return allocUnsafe(this, arg) - } - return from(this, arg, encodingOrOffset, length) -} - -Buffer.poolSize = 8192 // not used by this implementation - -// TODO: Legacy, not needed anymore. Remove in next major version. -Buffer._augment = function (arr) { - arr.__proto__ = Buffer.prototype - return arr -} - -function from (that, value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number') - } - - if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { - return fromArrayBuffer(that, value, encodingOrOffset, length) - } - - if (typeof value === 'string') { - return fromString(that, value, encodingOrOffset) - } - - return fromObject(that, value) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(null, value, encodingOrOffset, length) -} - -if (Buffer.TYPED_ARRAY_SUPPORT) { - Buffer.prototype.__proto__ = Uint8Array.prototype - Buffer.__proto__ = Uint8Array - if (typeof Symbol !== 'undefined' && Symbol.species && - Buffer[Symbol.species] === Buffer) { - // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true - }) - } -} - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') - } else if (size < 0) { - throw new RangeError('"size" argument must not be negative') - } -} - -function alloc (that, size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(that, size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(that, size).fill(fill, encoding) - : createBuffer(that, size).fill(fill) - } - return createBuffer(that, size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(null, size, fill, encoding) -} - -function allocUnsafe (that, size) { - assertSize(size) - that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < size; ++i) { - that[i] = 0 - } - } - return that -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(null, size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(null, size) -} - -function fromString (that, string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding') - } - - var length = byteLength(string, encoding) | 0 - that = createBuffer(that, length) - - var actual = that.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - that = that.slice(0, actual) - } - - return that -} - -function fromArrayLike (that, array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - that = createBuffer(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -function fromArrayBuffer (that, array, byteOffset, length) { - array.byteLength // this throws if `array` is not a valid ArrayBuffer - - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('\'offset\' is out of bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('\'length\' is out of bounds') - } - - if (byteOffset === undefined && length === undefined) { - array = new Uint8Array(array) - } else if (length === undefined) { - array = new Uint8Array(array, byteOffset) - } else { - array = new Uint8Array(array, byteOffset, length) - } - - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = array - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - that = fromArrayLike(that, array) - } - return that -} - -function fromObject (that, obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - that = createBuffer(that, len) - - if (that.length === 0) { - return that - } - - obj.copy(that, 0, 0, len) - return that - } - - if (obj) { - if ((typeof ArrayBuffer !== 'undefined' && - obj.buffer instanceof ArrayBuffer) || 'length' in obj) { - if (typeof obj.length !== 'number' || isnan(obj.length)) { - return createBuffer(that, 0) - } - return fromArrayLike(that, obj) - } - - if (obj.type === 'Buffer' && isArray(obj.data)) { - return fromArrayLike(that, obj.data) - } - } - - throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') -} - -function checked (length) { - // Note: cannot use `length < kMaxLength()` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= kMaxLength()) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + kMaxLength().toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return !!(b != null && b._isBuffer) -} - -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && - (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { - return string.byteLength - } - if (typeof string !== 'string') { - string = '' + string - } - - var len = string.length - if (len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - case undefined: - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect -// Buffer instances. -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - var length = this.length | 0 - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } - return '' -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (!Buffer.isBuffer(target)) { - throw new TypeError('Argument must be a Buffer') - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) - - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (isNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (Buffer.TYPED_ARRAY_SUPPORT && - typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (isNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset | 0 - if (isFinite(length)) { - length = length | 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - // legacy write(string, encoding, offset, length) - remove in v0.13 - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf - if (Buffer.TYPED_ARRAY_SUPPORT) { - newBuf = this.subarray(start, end) - newBuf.__proto__ = Buffer.prototype - } else { - var sliceLen = end - start - newBuf = new Buffer(sliceLen, undefined) - for (var i = 0; i < sliceLen; ++i) { - newBuf[i] = this[i + start] - } - } - - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - this[offset] = (value & 0xff) - return offset + 1 -} - -function objectWriteUInt16 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { - buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -function objectWriteUInt32 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffffffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { - buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { - // ascending copy from start - for (i = 0; i < len; ++i) { - target[i + targetStart] = this[i + start] - } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, start + len), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if (code < 256) { - val = code - } - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - var bytes = Buffer.isBuffer(val) - ? val - : utf8ToBytes(new Buffer(val, encoding).toString()) - var len = bytes.length - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -function isnan (val) { - return val !== val // eslint-disable-line no-self-compare -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, __webpack_require__(9))) - -/***/ }, -/* 2 */ -/***/ function(module, exports, __webpack_require__) { - -var BN = __webpack_require__(0); -var stripHexPrefix = __webpack_require__(8); - -console.log(new BN('87234987239872349872489724897248972348972389472498728723897234', 16).toString(10)); - -/** - * Returns a BN object, converts a number value to a BN - * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object - * @return {Object} `output` BN object of the number - * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number - */ -module.exports = function numberToBN(arg) { - if (typeof arg === 'string' || typeof arg === 'number') { - var multiplier = new BN(1); // eslint-disable-line - var formattedString = String(arg).toLowerCase().trim(); - var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x'; - var stringArg = stripHexPrefix(formattedString); // eslint-disable-line - if (stringArg.substr(0, 1) === '-') { - stringArg = stripHexPrefix(stringArg.slice(1)); - multiplier = new BN(-1, 10); - } - stringArg = stringArg === '' ? '0' : stringArg; - - if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/)) - || stringArg.match(/^[a-fA-F]+$/) - || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) { - return new BN(stringArg, 16).mul(multiplier); - } - - if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) { - return new BN(stringArg, 10).mul(multiplier); - } - } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) { - if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) { - return new BN(arg.toString(10), 10); - } - } - - throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.'); -} - - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -'use strict'; - -var BN = __webpack_require__(0); -var numberToBN = __webpack_require__(2); - -var zero = new BN(0); -var negative1 = new BN(-1); - -// complete ethereum unit map -var unitMap = { - 'noether': '0', // eslint-disable-line - 'wei': '1', // eslint-disable-line - 'kwei': '1000', // eslint-disable-line - 'Kwei': '1000', // eslint-disable-line - 'babbage': '1000', // eslint-disable-line - 'femtoether': '1000', // eslint-disable-line - 'mwei': '1000000', // eslint-disable-line - 'Mwei': '1000000', // eslint-disable-line - 'lovelace': '1000000', // eslint-disable-line - 'picoether': '1000000', // eslint-disable-line - 'gwei': '1000000000', // eslint-disable-line - 'Gwei': '1000000000', // eslint-disable-line - 'shannon': '1000000000', // eslint-disable-line - 'nanoether': '1000000000', // eslint-disable-line - 'nano': '1000000000', // eslint-disable-line - 'szabo': '1000000000000', // eslint-disable-line - 'microether': '1000000000000', // eslint-disable-line - 'micro': '1000000000000', // eslint-disable-line - 'finney': '1000000000000000', // eslint-disable-line - 'milliether': '1000000000000000', // eslint-disable-line - 'milli': '1000000000000000', // eslint-disable-line - 'ether': '1000000000000000000', // eslint-disable-line - 'kether': '1000000000000000000000', // eslint-disable-line - 'grand': '1000000000000000000000', // eslint-disable-line - 'mether': '1000000000000000000000000', // eslint-disable-line - 'gether': '1000000000000000000000000000', // eslint-disable-line - 'tether': '1000000000000000000000000000000' }; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -function getValueOfUnit(unitInput) { - var unit = unitInput ? unitInput.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; // eslint-disable-line - - if (typeof unitValue !== 'string') { - throw new Error('[ethjs-unit] the unit provided ' + unitInput + ' doesn\'t exists, please use the one of the following units ' + JSON.stringify(unitMap, null, 2)); - } - - return new BN(unitValue, 10); -} - -function numberToString(arg) { - if (typeof arg === 'string') { - if (!arg.match(/^-?[0-9.]+$/)) { - throw new Error('while converting number to string, invalid number value \'' + arg + '\', should be a number matching (^-?[0-9.]+).'); - } - return arg; - } else if (typeof arg === 'number') { - return String(arg); - } else if (typeof arg === 'object' && arg.toString && (arg.toTwos || arg.dividedToIntegerBy)) { - if (arg.toPrecision) { - return String(arg.toPrecision()); - } else { - // eslint-disable-line - return arg.toString(10); - } - } - throw new Error('while converting number to string, invalid number value \'' + arg + '\' type ' + typeof arg + '.'); -} - -function fromWei(weiInput, unit, optionsInput) { - var wei = numberToBN(weiInput); // eslint-disable-line - var negative = wei.lt(zero); // eslint-disable-line - var base = getValueOfUnit(unit); - var baseLength = unitMap[unit].length - 1 || 1; - var options = optionsInput || {}; - - if (negative) { - wei = wei.mul(negative1); - } - - var fraction = wei.mod(base).toString(10); // eslint-disable-line - - while (fraction.length < baseLength) { - fraction = '0' + fraction; - } - - if (!options.pad) { - fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1]; - } - - var whole = wei.div(base).toString(10); // eslint-disable-line - - if (options.commify) { - whole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ','); - } - - var value = '' + whole + (fraction == '0' ? '' : '.' + fraction); // eslint-disable-line - - if (negative) { - value = '-' + value; - } - - return value; -} - -function toWei(etherInput, unit) { - var ether = numberToString(etherInput); // eslint-disable-line - var base = getValueOfUnit(unit); - var baseLength = unitMap[unit].length - 1 || 1; - - // Is it negative? - var negative = ether.substring(0, 1) === '-'; // eslint-disable-line - if (negative) { - ether = ether.substring(1); - } - - if (ether === '.') { - throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, invalid value'); - } - - // Split it into a whole and fractional part - var comps = ether.split('.'); // eslint-disable-line - if (comps.length > 2) { - throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal points'); - } - - var whole = comps[0], - fraction = comps[1]; // eslint-disable-line - - if (!whole) { - whole = '0'; - } - if (!fraction) { - fraction = '0'; - } - if (fraction.length > baseLength) { - throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal places'); - } - - while (fraction.length < baseLength) { - fraction += '0'; - } - - whole = new BN(whole); - fraction = new BN(fraction); - var wei = whole.mul(base).add(fraction); // eslint-disable-line - - if (negative) { - wei = wei.mul(negative1); - } - - return new BN(wei.toString(10), 10); -} - -module.exports = { - unitMap: unitMap, - numberToString: numberToString, - getValueOfUnit: getValueOfUnit, - fromWei: fromWei, - toWei: toWei -}; - -/***/ }, -/* 4 */ -/***/ function(module, exports) { - -"use strict"; -'use strict' - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function placeHoldersCount (b64) { - var len = b64.length - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 -} - -function byteLength (b64) { - // base64 is 4/3 + up to two characters of the original data - return b64.length * 3 / 4 - placeHoldersCount(b64) -} - -function toByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - var len = b64.length - placeHolders = placeHoldersCount(b64) - - arr = new Arr(len * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? len - 4 : len - - var L = 0 - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] - arr[L++] = (tmp >> 16) & 0xFF - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - if (placeHolders === 2) { - tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[L++] = tmp & 0xFF - } else if (placeHolders === 1) { - tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var output = '' - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - output += lookup[tmp >> 2] - output += lookup[(tmp << 4) & 0x3F] - output += '==' - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) - output += lookup[tmp >> 10] - output += lookup[(tmp >> 4) & 0x3F] - output += lookup[(tmp << 2) & 0x3F] - output += '=' - } - - parts.push(output) - - return parts.join('') -} - - -/***/ }, -/* 5 */ -/***/ function(module, exports) { - -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - -/** - * Returns a `Boolean` on whether or not the a `String` starts with '0x' - * @param {String} str the string input value - * @return {Boolean} a boolean if it is or is not hex prefixed - * @throws if the str input is not a string - */ -module.exports = function isHexPrefixed(str) { - if (typeof str !== 'string') { - throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed."); - } - - return str.slice(0, 2) === '0x'; -} - - -/***/ }, -/* 7 */ -/***/ function(module, exports) { - -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; - - -/***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { - -var isHexPrefixed = __webpack_require__(6); - -/** - * Removes '0x' from a given `String` is present - * @param {String} str the string value - * @return {String|Optional} a string by pass if necessary - */ -module.exports = function stripHexPrefix(str) { - if (typeof str !== 'string') { - return str; - } - - return isHexPrefixed(str) ? str.slice(2) : str; -} - - -/***/ }, -/* 9 */ -/***/ function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { return this; })(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }, -/* 10 */ -/***/ function(module, exports) { - -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - configurable: false, - get: function() { return module.l; } - }); - Object.defineProperty(module, "id", { - enumerable: true, - configurable: false, - get: function() { return module.i; } - }); - module.webpackPolyfill = 1; - } - return module; -} - - -/***/ } -/******/ ]) -}); -; -//# sourceMappingURL=ethjs-unit.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.js.map b/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.js.map deleted file mode 100644 index c4fa9e3e..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ethjs-unit.js","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 47cfb1a42c8a70ba4d21","webpack:///./~/bn.js/lib/bn.js","webpack:///./~/buffer/index.js","webpack:///./~/number-to-bn/src/index.js","webpack:///lib/index.js","webpack:///./~/base64-js/index.js","webpack:///./~/ieee754/index.js","webpack:///./~/is-hex-prefixed/src/index.js","webpack:///./~/isarray/index.js","webpack:///./~/strip-hex-prefix/src/index.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/module.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"ethUnit\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ethUnit\"] = factory();\n\telse\n\t\troot[\"ethUnit\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmory imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmory exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tObject.defineProperty(exports, name, {\n \t\t\tconfigurable: false,\n \t\t\tenumerable: true,\n \t\t\tget: getter\n \t\t});\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 47cfb1a42c8a70ba4d21","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buf' + 'fer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/bn.js/lib/bn.js\n// module id = 0\n// module chunks = 0","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/buffer/index.js\n// module id = 1\n// module chunks = 0","var BN = require('bn.js');\nvar stripHexPrefix = require('strip-hex-prefix');\n\nconsole.log(new BN('87234987239872349872489724897248972348972389472498728723897234', 16).toString(10));\n\n/**\n * Returns a BN object, converts a number value to a BN\n * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object\n * @return {Object} `output` BN object of the number\n * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number\n */\nmodule.exports = function numberToBN(arg) {\n if (typeof arg === 'string' || typeof arg === 'number') {\n var multiplier = new BN(1); // eslint-disable-line\n var formattedString = String(arg).toLowerCase().trim();\n var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x';\n var stringArg = stripHexPrefix(formattedString); // eslint-disable-line\n if (stringArg.substr(0, 1) === '-') {\n stringArg = stripHexPrefix(stringArg.slice(1));\n multiplier = new BN(-1, 10);\n }\n stringArg = stringArg === '' ? '0' : stringArg;\n\n if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/))\n || stringArg.match(/^[a-fA-F]+$/)\n || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) {\n return new BN(stringArg, 16).mul(multiplier);\n }\n\n if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) {\n return new BN(stringArg, 10).mul(multiplier);\n }\n } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) {\n if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) {\n return new BN(arg.toString(10), 10);\n }\n }\n\n throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/number-to-bn/src/index.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar BN = require('bn.js');\nvar numberToBN = require('number-to-bn');\n\nvar zero = new BN(0);\nvar negative1 = new BN(-1);\n\n// complete ethereum unit map\nvar unitMap = {\n 'noether': '0', // eslint-disable-line\n 'wei': '1', // eslint-disable-line\n 'kwei': '1000', // eslint-disable-line\n 'Kwei': '1000', // eslint-disable-line\n 'babbage': '1000', // eslint-disable-line\n 'femtoether': '1000', // eslint-disable-line\n 'mwei': '1000000', // eslint-disable-line\n 'Mwei': '1000000', // eslint-disable-line\n 'lovelace': '1000000', // eslint-disable-line\n 'picoether': '1000000', // eslint-disable-line\n 'gwei': '1000000000', // eslint-disable-line\n 'Gwei': '1000000000', // eslint-disable-line\n 'shannon': '1000000000', // eslint-disable-line\n 'nanoether': '1000000000', // eslint-disable-line\n 'nano': '1000000000', // eslint-disable-line\n 'szabo': '1000000000000', // eslint-disable-line\n 'microether': '1000000000000', // eslint-disable-line\n 'micro': '1000000000000', // eslint-disable-line\n 'finney': '1000000000000000', // eslint-disable-line\n 'milliether': '1000000000000000', // eslint-disable-line\n 'milli': '1000000000000000', // eslint-disable-line\n 'ether': '1000000000000000000', // eslint-disable-line\n 'kether': '1000000000000000000000', // eslint-disable-line\n 'grand': '1000000000000000000000', // eslint-disable-line\n 'mether': '1000000000000000000000000', // eslint-disable-line\n 'gether': '1000000000000000000000000000', // eslint-disable-line\n 'tether': '1000000000000000000000000000000' };\n\n/**\n * Returns value of unit in Wei\n *\n * @method getValueOfUnit\n * @param {String} unit the unit to convert to, default ether\n * @returns {BigNumber} value of the unit (in Wei)\n * @throws error if the unit is not correct:w\n */\nfunction getValueOfUnit(unitInput) {\n var unit = unitInput ? unitInput.toLowerCase() : 'ether';\n var unitValue = unitMap[unit]; // eslint-disable-line\n\n if (typeof unitValue !== 'string') {\n throw new Error('[ethjs-unit] the unit provided ' + unitInput + ' doesn\\'t exists, please use the one of the following units ' + JSON.stringify(unitMap, null, 2));\n }\n\n return new BN(unitValue, 10);\n}\n\nfunction numberToString(arg) {\n if (typeof arg === 'string') {\n if (!arg.match(/^-?[0-9.]+$/)) {\n throw new Error('while converting number to string, invalid number value \\'' + arg + '\\', should be a number matching (^-?[0-9.]+).');\n }\n return arg;\n } else if (typeof arg === 'number') {\n return String(arg);\n } else if (typeof arg === 'object' && arg.toString && (arg.toTwos || arg.dividedToIntegerBy)) {\n if (arg.toPrecision) {\n return String(arg.toPrecision());\n } else {\n // eslint-disable-line\n return arg.toString(10);\n }\n }\n throw new Error('while converting number to string, invalid number value \\'' + arg + '\\' type ' + typeof arg + '.');\n}\n\nfunction fromWei(weiInput, unit, optionsInput) {\n var wei = numberToBN(weiInput); // eslint-disable-line\n var negative = wei.lt(zero); // eslint-disable-line\n var base = getValueOfUnit(unit);\n var baseLength = unitMap[unit].length - 1 || 1;\n var options = optionsInput || {};\n\n if (negative) {\n wei = wei.mul(negative1);\n }\n\n var fraction = wei.mod(base).toString(10); // eslint-disable-line\n\n while (fraction.length < baseLength) {\n fraction = '0' + fraction;\n }\n\n if (!options.pad) {\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\n }\n\n var whole = wei.div(base).toString(10); // eslint-disable-line\n\n if (options.commify) {\n whole = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n var value = '' + whole + (fraction == '0' ? '' : '.' + fraction); // eslint-disable-line\n\n if (negative) {\n value = '-' + value;\n }\n\n return value;\n}\n\nfunction toWei(etherInput, unit) {\n var ether = numberToString(etherInput); // eslint-disable-line\n var base = getValueOfUnit(unit);\n var baseLength = unitMap[unit].length - 1 || 1;\n\n // Is it negative?\n var negative = ether.substring(0, 1) === '-'; // eslint-disable-line\n if (negative) {\n ether = ether.substring(1);\n }\n\n if (ether === '.') {\n throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, invalid value');\n }\n\n // Split it into a whole and fractional part\n var comps = ether.split('.'); // eslint-disable-line\n if (comps.length > 2) {\n throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal points');\n }\n\n var whole = comps[0],\n fraction = comps[1]; // eslint-disable-line\n\n if (!whole) {\n whole = '0';\n }\n if (!fraction) {\n fraction = '0';\n }\n if (fraction.length > baseLength) {\n throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal places');\n }\n\n while (fraction.length < baseLength) {\n fraction += '0';\n }\n\n whole = new BN(whole);\n fraction = new BN(fraction);\n var wei = whole.mul(base).add(fraction); // eslint-disable-line\n\n if (negative) {\n wei = wei.mul(negative1);\n }\n\n return new BN(wei.toString(10), 10);\n}\n\nmodule.exports = {\n unitMap: unitMap,\n numberToString: numberToString,\n getValueOfUnit: getValueOfUnit,\n fromWei: fromWei,\n toWei: toWei\n};\n\n\n// WEBPACK FOOTER //\n// lib/index.js","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return b64.length * 3 / 4 - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-js/index.js\n// module id = 4\n// module chunks = 0","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ieee754/index.js\n// module id = 5\n// module chunks = 0","/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param {String} str the string input value\n * @return {Boolean} a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nmodule.exports = function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\"[is-hex-prefixed] value must be type 'string', is currently type \" + (typeof str) + \", while checking isHexPrefixed.\");\n }\n\n return str.slice(0, 2) === '0x';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/is-hex-prefixed/src/index.js\n// module id = 6\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 7\n// module chunks = 0","var isHexPrefixed = require('is-hex-prefixed');\n\n/**\n * Removes '0x' from a given `String` is present\n * @param {String} str the string value\n * @return {String|Optional} a string by pass if necessary\n */\nmodule.exports = function stripHexPrefix(str) {\n if (typeof str !== 'string') {\n return str;\n }\n\n return isHexPrefixed(str) ? str.slice(2) : str;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/strip-hex-prefix/src/index.js\n// module id = 8\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() { return this; })();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 9\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tconfigurable: false,\r\n\t\t\tget: function() { return module.l; }\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tconfigurable: false,\r\n\t\t\tget: function() { return module.i; }\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 10\n// module chunks = 0"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACp2GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACZA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;","sourceRoot":""} \ No newline at end of file diff --git a/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.min.js b/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.min.js deleted file mode 100644 index b4b84472..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/dist/ethjs-unit.min.js +++ /dev/null @@ -1,3 +0,0 @@ -!function(t,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define("ethUnit",[],r):"object"==typeof exports?exports.ethUnit=r():t.ethUnit=r()}(this,function(){return function(t){function r(e){if(i[e])return i[e].exports;var n=i[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var i={};return r.m=t,r.c=i,r.i=function(t){return t},r.d=function(t,r,i){Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:i})},r.o=function(t,r){return Object.prototype.hasOwnProperty.call(t,r)},r.p="",r(r.s=3)}([function(t,r,i){(function(t){!function(t,r){"use strict";function e(t,r){if(!t)throw Error(r||"Assertion failed")}function n(t,r){t.super_=r;var i=function(){};i.prototype=r.prototype,t.prototype=new i,t.prototype.constructor=t}function o(t,r,i){return o.isBN(t)?t:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==t&&("le"!==r&&"be"!==r||(i=r,r=10),this._init(t||0,r||10,i||"be"))))}function h(t,r,i){for(var e=0,n=Math.min(t.length,i),o=r;n>o;o++){var h=t.charCodeAt(o)-48;e<<=4,e|=49>h||h>54?17>h||h>22?15&h:h-17+10:h-49+10}return e}function s(t,r,i,e){for(var n=0,o=Math.min(t.length,i),h=r;o>h;h++){var s=t.charCodeAt(h)-48;n*=e,n+=49>s?17>s?s:s-17+10:s-49+10}return n}function u(t){for(var r=Array(t.bitLength()),i=0;r.length>i;i++){var e=i/26|0,n=i%26;r[i]=(t.words[e]&1<>>n}return r}function a(t,r,i){i.negative=r.negative^t.negative;var e=t.length+r.length|0;i.length=e,e=e-1|0;var n=0|t.words[0],o=0|r.words[0],h=n*o,s=67108863&h,u=h/67108864|0;i.words[0]=s;for(var a=1;e>a;a++){for(var f=u>>>26,l=67108863&u,m=Math.min(a,r.length-1),p=Math.max(0,a-t.length+1);m>=p;p++){var d=a-p|0;n=0|t.words[d],o=0|r.words[p],h=n*o+l,f+=h/67108864|0,l=67108863&h}i.words[a]=0|l,u=0|f}return 0!==u?i.words[a]=0|u:i.length--,i.strip()}function f(t,r,i){i.negative=r.negative^t.negative,i.length=t.length+r.length;for(var e=0,n=0,o=0;i.length-1>o;o++){var h=n;n=0;for(var s=67108863&e,u=Math.min(o,r.length-1),a=Math.max(0,o-t.length+1);u>=a;a++){var f=o-a,l=0|t.words[f],m=0|r.words[a],p=l*m,d=67108863&p;h=h+(p/67108864|0)|0,d=d+s|0,s=67108863&d,h=h+(d>>>26)|0,n+=h>>>26,h&=67108863}i.words[o]=s,e=h,h=n}return 0!==e?i.words[o]=e:i.length--,i.strip()}function l(t,r,i){var e=new m;return e.mulp(t,r,i)}function m(t,r){this.x=t,this.y=r}function p(t,r){this.name=t,this.p=new o(r,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function d(){p.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function c(){p.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function g(){p.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function v(){p.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(t){if("string"==typeof t){var r=o._prime(t);this.m=r.p,this.prime=r}else e(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function w(t){y.call(this,t),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:r.BN=o,o.BN=o,o.wordSize=26;var M;try{M=i(1).Buffer}catch(b){}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,r){return t.cmp(r)>0?t:r},o.min=function(t,r){return t.cmp(r)<0?t:r},o.prototype._init=function(t,r,i){if("number"==typeof t)return this._initNumber(t,r,i);if("object"==typeof t)return this._initArray(t,r,i);"hex"===r&&(r=16),e(r===(0|r)&&r>=2&&36>=r),t=(""+t).replace(/\s+/g,"");var n=0;"-"===t[0]&&n++,16===r?this._parseHex(t,n):this._parseBase(t,r,n),"-"===t[0]&&(this.negative=1),this.strip(),"le"===i&&this._initArray(this.toArray(),r,i)},o.prototype._initNumber=function(t,r,i){0>t&&(this.negative=1,t=-t),67108864>t?(this.words=[67108863&t],this.length=1):4503599627370496>t?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(e(9007199254740992>t),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),r,i)},o.prototype._initArray=function(t,r,i){if(e("number"==typeof t.length),0>=t.length)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=Array(this.length);for(var n=0;this.length>n;n++)this.words[n]=0;var o,h,s=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)h=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=h<>>26-s&67108863,s+=24,26>s||(s-=26,o++);else if("le"===i)for(n=0,o=0;t.length>n;n+=3)h=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=h<>>26-s&67108863,s+=24,26>s||(s-=26,o++);return this.strip()},o.prototype._parseHex=function(t,r){this.length=Math.ceil((t.length-r)/6),this.words=Array(this.length);for(var i=0;this.length>i;i++)this.words[i]=0;var e,n,o=0;for(i=t.length-6,e=0;i>=r;i-=6)n=h(t,i,i+6),this.words[e]|=n<>>26-o&4194303,o+=24,26>o||(o-=26,e++);i+6!==r&&(n=h(t,r,i+6),this.words[e]|=n<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,r,i){this.words=[0],this.length=1;for(var e=0,n=1;67108863>=n;n*=r)e++;e--,n=n/r|0;for(var o=t.length-i,h=o%e,u=Math.min(o,o-h)+i,a=0,f=i;u>f;f+=e)a=s(t,f,f+e,r),this.imuln(n),67108864>this.words[0]+a?this.words[0]+=a:this._iaddn(a);if(0!==h){var l=1;for(a=s(t,f,t.length,r),f=0;h>f;f++)l*=r;this.imuln(l),67108864>this.words[0]+a?this.words[0]+=a:this._iaddn(a)}},o.prototype.copy=function(t){t.words=Array(this.length);for(var r=0;this.length>r;r++)t.words[r]=this.words[r];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;t>this.length;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],A=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],E=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(t,r){t=t||10,r=0|r||1;var i;if(16===t||"hex"===t){i="";for(var n=0,o=0,h=0;this.length>h;h++){var s=this.words[h],u=(16777215&(s<>>24-n&16777215,i=0!==o||h!==this.length-1?_[6-u.length]+u+i:u+i,n+=2,26>n||(n-=26,h--)}for(0!==o&&(i=o.toString(16)+i);i.length%r!==0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&36>=t){var a=A[t],f=E[t];i="";var l=this.clone();for(l.negative=0;!l.isZero();){var m=l.modn(f).toString(t);l=l.idivn(f),i=l.isZero()?m+i:_[a-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%r!==0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}e(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&e(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,r){return e(void 0!==M),this.toArrayLike(M,t,r)},o.prototype.toArray=function(t,r){return this.toArrayLike(Array,t,r)},o.prototype.toArrayLike=function(t,r,i){var n=this.byteLength(),o=i||Math.max(1,n);e(o>=n,"byte array longer than desired length"),e(o>0,"Requested array length <= 0"),this.strip();var h,s,u="le"===r,a=new t(o),f=this.clone();if(u){for(s=0;!f.isZero();s++)h=f.andln(255),f.iushrn(8),a[s]=h;for(;o>s;s++)a[s]=0}else{for(s=0;o-n>s;s++)a[s]=0;for(s=0;!f.isZero();s++)h=f.andln(255),f.iushrn(8),a[o-s-1]=h}return a},o.prototype._countBits=Math.clz32?function(t){return 32-Math.clz32(t)}:function(t){var r=t,i=0;return 4096>r||(i+=13,r>>>=13),64>r||(i+=7,r>>>=7),8>r||(i+=4,r>>>=4),2>r||(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function(t){if(0===t)return 26;var r=t,i=0;return 0===(8191&r)&&(i+=13,r>>>=13),0===(127&r)&&(i+=7,r>>>=7),0===(15&r)&&(i+=4,r>>>=4),0===(3&r)&&(i+=2,r>>>=2),0===(1&r)&&i++,i},o.prototype.bitLength=function(){var t=this.words[this.length-1],r=this._countBits(t);return 26*(this.length-1)+r},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,r=0;this.length>r;r++){var i=this._zeroBits(this.words[r]);if(t+=i,26!==i)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){for(;t.length>this.length;)this.words[this.length++]=0;for(var r=0;t.length>r;r++)this.words[r]=this.words[r]|t.words[r];return this.strip()},o.prototype.ior=function(t){return e(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var r;r=this.length>t.length?t:this;for(var i=0;r.length>i;i++)this.words[i]=this.words[i]&t.words[i];return this.length=r.length,this.strip()},o.prototype.iand=function(t){return e(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var r,i;this.length>t.length?(r=this,i=t):(r=t,i=this);for(var e=0;i.length>e;e++)this.words[e]=r.words[e]^i.words[e];if(this!==r)for(;r.length>e;e++)this.words[e]=r.words[e];return this.length=r.length,this.strip()},o.prototype.ixor=function(t){return e(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){e("number"==typeof t&&t>=0);var r=0|Math.ceil(t/26),i=t%26;this._expand(r),i>0&&r--;for(var n=0;r>n;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,r){e("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=r?this.words[i]|1<t.length?(i=this,e=t):(i=t,e=this);for(var n=0,o=0;e.length>o;o++)r=(0|i.words[o])+(0|e.words[o])+n,this.words[o]=67108863&r,n=r>>>26;for(;0!==n&&i.length>o;o++)r=(0|i.words[o])+n,this.words[o]=67108863&r,n=r>>>26;if(this.length=i.length,0!==n)this.words[this.length]=n,this.length++;else if(i!==this)for(;i.length>o;o++)this.words[o]=i.words[o];return this},o.prototype.add=function(t){var r;return 0!==t.negative&&0===this.negative?(t.negative=0,r=this.sub(t),t.negative^=1,r):0===t.negative&&0!==this.negative?(this.negative=0,r=t.sub(this),this.negative=1,r):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var r=this.iadd(t);return t.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;var e,n;i>0?(e=this,n=t):(e=t,n=this);for(var o=0,h=0;n.length>h;h++)r=(0|e.words[h])-(0|n.words[h])+o,o=r>>26,this.words[h]=67108863&r;for(;0!==o&&e.length>h;h++)r=(0|e.words[h])+o,o=r>>26,this.words[h]=67108863&r;if(0===o&&e.length>h&&e!==this)for(;e.length>h;h++)this.words[h]=e.words[h];return this.length=Math.max(this.length,h),e!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var R=function(t,r,i){var e,n,o,h=t.words,s=r.words,u=i.words,a=0,f=0|h[0],l=8191&f,m=f>>>13,p=0|h[1],d=8191&p,c=p>>>13,g=0|h[2],v=8191&g,y=g>>>13,w=0|h[3],M=8191&w,b=w>>>13,_=0|h[4],A=8191&_,E=_>>>13,R=0|h[5],B=8191&R,S=R>>>13,P=0|h[6],T=8191&P,x=P>>>13,U=0|h[7],k=8191&U,I=U>>>13,L=0|h[8],O=8191&L,Y=L>>>13,N=0|h[9],C=8191&N,D=N>>>13,j=0|s[0],Z=8191&j,q=j>>>13,z=0|s[1],F=8191&z,$=z>>>13,K=0|s[2],J=8191&K,V=K>>>13,H=0|s[3],W=8191&H,X=H>>>13,G=0|s[4],Q=8191&G,tt=G>>>13,rt=0|s[5],it=8191&rt,et=rt>>>13,nt=0|s[6],ot=8191&nt,ht=nt>>>13,st=0|s[7],ut=8191&st,at=st>>>13,ft=0|s[8],lt=8191&ft,mt=ft>>>13,pt=0|s[9],dt=8191&pt,ct=pt>>>13;i.negative=t.negative^r.negative,i.length=19,e=Math.imul(l,Z),n=Math.imul(l,q),n=n+Math.imul(m,Z)|0,o=Math.imul(m,q);var gt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,e=Math.imul(d,Z),n=Math.imul(d,q),n=n+Math.imul(c,Z)|0,o=Math.imul(c,q),e=e+Math.imul(l,F)|0,n=n+Math.imul(l,$)|0,n=n+Math.imul(m,F)|0,o=o+Math.imul(m,$)|0;var vt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,e=Math.imul(v,Z),n=Math.imul(v,q),n=n+Math.imul(y,Z)|0,o=Math.imul(y,q),e=e+Math.imul(d,F)|0,n=n+Math.imul(d,$)|0,n=n+Math.imul(c,F)|0,o=o+Math.imul(c,$)|0,e=e+Math.imul(l,J)|0,n=n+Math.imul(l,V)|0,n=n+Math.imul(m,J)|0,o=o+Math.imul(m,V)|0;var yt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,e=Math.imul(M,Z),n=Math.imul(M,q),n=n+Math.imul(b,Z)|0,o=Math.imul(b,q),e=e+Math.imul(v,F)|0,n=n+Math.imul(v,$)|0,n=n+Math.imul(y,F)|0,o=o+Math.imul(y,$)|0,e=e+Math.imul(d,J)|0,n=n+Math.imul(d,V)|0,n=n+Math.imul(c,J)|0,o=o+Math.imul(c,V)|0,e=e+Math.imul(l,W)|0,n=n+Math.imul(l,X)|0,n=n+Math.imul(m,W)|0,o=o+Math.imul(m,X)|0;var wt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,e=Math.imul(A,Z),n=Math.imul(A,q),n=n+Math.imul(E,Z)|0,o=Math.imul(E,q),e=e+Math.imul(M,F)|0,n=n+Math.imul(M,$)|0,n=n+Math.imul(b,F)|0,o=o+Math.imul(b,$)|0,e=e+Math.imul(v,J)|0,n=n+Math.imul(v,V)|0,n=n+Math.imul(y,J)|0,o=o+Math.imul(y,V)|0,e=e+Math.imul(d,W)|0,n=n+Math.imul(d,X)|0,n=n+Math.imul(c,W)|0,o=o+Math.imul(c,X)|0,e=e+Math.imul(l,Q)|0,n=n+Math.imul(l,tt)|0,n=n+Math.imul(m,Q)|0,o=o+Math.imul(m,tt)|0;var Mt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,e=Math.imul(B,Z),n=Math.imul(B,q),n=n+Math.imul(S,Z)|0,o=Math.imul(S,q),e=e+Math.imul(A,F)|0,n=n+Math.imul(A,$)|0,n=n+Math.imul(E,F)|0,o=o+Math.imul(E,$)|0,e=e+Math.imul(M,J)|0,n=n+Math.imul(M,V)|0,n=n+Math.imul(b,J)|0,o=o+Math.imul(b,V)|0,e=e+Math.imul(v,W)|0,n=n+Math.imul(v,X)|0,n=n+Math.imul(y,W)|0,o=o+Math.imul(y,X)|0,e=e+Math.imul(d,Q)|0,n=n+Math.imul(d,tt)|0,n=n+Math.imul(c,Q)|0,o=o+Math.imul(c,tt)|0,e=e+Math.imul(l,it)|0,n=n+Math.imul(l,et)|0,n=n+Math.imul(m,it)|0,o=o+Math.imul(m,et)|0;var bt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,e=Math.imul(T,Z),n=Math.imul(T,q),n=n+Math.imul(x,Z)|0,o=Math.imul(x,q),e=e+Math.imul(B,F)|0,n=n+Math.imul(B,$)|0,n=n+Math.imul(S,F)|0,o=o+Math.imul(S,$)|0,e=e+Math.imul(A,J)|0,n=n+Math.imul(A,V)|0,n=n+Math.imul(E,J)|0,o=o+Math.imul(E,V)|0,e=e+Math.imul(M,W)|0,n=n+Math.imul(M,X)|0,n=n+Math.imul(b,W)|0,o=o+Math.imul(b,X)|0,e=e+Math.imul(v,Q)|0,n=n+Math.imul(v,tt)|0,n=n+Math.imul(y,Q)|0,o=o+Math.imul(y,tt)|0,e=e+Math.imul(d,it)|0,n=n+Math.imul(d,et)|0,n=n+Math.imul(c,it)|0,o=o+Math.imul(c,et)|0,e=e+Math.imul(l,ot)|0,n=n+Math.imul(l,ht)|0,n=n+Math.imul(m,ot)|0,o=o+Math.imul(m,ht)|0;var _t=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,e=Math.imul(k,Z),n=Math.imul(k,q),n=n+Math.imul(I,Z)|0,o=Math.imul(I,q),e=e+Math.imul(T,F)|0,n=n+Math.imul(T,$)|0,n=n+Math.imul(x,F)|0,o=o+Math.imul(x,$)|0,e=e+Math.imul(B,J)|0,n=n+Math.imul(B,V)|0,n=n+Math.imul(S,J)|0,o=o+Math.imul(S,V)|0,e=e+Math.imul(A,W)|0,n=n+Math.imul(A,X)|0,n=n+Math.imul(E,W)|0,o=o+Math.imul(E,X)|0,e=e+Math.imul(M,Q)|0,n=n+Math.imul(M,tt)|0,n=n+Math.imul(b,Q)|0,o=o+Math.imul(b,tt)|0,e=e+Math.imul(v,it)|0,n=n+Math.imul(v,et)|0,n=n+Math.imul(y,it)|0,o=o+Math.imul(y,et)|0,e=e+Math.imul(d,ot)|0,n=n+Math.imul(d,ht)|0,n=n+Math.imul(c,ot)|0,o=o+Math.imul(c,ht)|0,e=e+Math.imul(l,ut)|0,n=n+Math.imul(l,at)|0,n=n+Math.imul(m,ut)|0,o=o+Math.imul(m,at)|0;var At=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(At>>>26)|0,At&=67108863,e=Math.imul(O,Z),n=Math.imul(O,q),n=n+Math.imul(Y,Z)|0,o=Math.imul(Y,q),e=e+Math.imul(k,F)|0,n=n+Math.imul(k,$)|0,n=n+Math.imul(I,F)|0,o=o+Math.imul(I,$)|0,e=e+Math.imul(T,J)|0,n=n+Math.imul(T,V)|0,n=n+Math.imul(x,J)|0,o=o+Math.imul(x,V)|0,e=e+Math.imul(B,W)|0,n=n+Math.imul(B,X)|0,n=n+Math.imul(S,W)|0,o=o+Math.imul(S,X)|0,e=e+Math.imul(A,Q)|0,n=n+Math.imul(A,tt)|0,n=n+Math.imul(E,Q)|0,o=o+Math.imul(E,tt)|0,e=e+Math.imul(M,it)|0,n=n+Math.imul(M,et)|0,n=n+Math.imul(b,it)|0,o=o+Math.imul(b,et)|0,e=e+Math.imul(v,ot)|0,n=n+Math.imul(v,ht)|0,n=n+Math.imul(y,ot)|0,o=o+Math.imul(y,ht)|0,e=e+Math.imul(d,ut)|0,n=n+Math.imul(d,at)|0,n=n+Math.imul(c,ut)|0,o=o+Math.imul(c,at)|0,e=e+Math.imul(l,lt)|0,n=n+Math.imul(l,mt)|0,n=n+Math.imul(m,lt)|0,o=o+Math.imul(m,mt)|0;var Et=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,e=Math.imul(C,Z),n=Math.imul(C,q),n=n+Math.imul(D,Z)|0,o=Math.imul(D,q),e=e+Math.imul(O,F)|0,n=n+Math.imul(O,$)|0,n=n+Math.imul(Y,F)|0,o=o+Math.imul(Y,$)|0,e=e+Math.imul(k,J)|0,n=n+Math.imul(k,V)|0,n=n+Math.imul(I,J)|0,o=o+Math.imul(I,V)|0,e=e+Math.imul(T,W)|0,n=n+Math.imul(T,X)|0,n=n+Math.imul(x,W)|0,o=o+Math.imul(x,X)|0,e=e+Math.imul(B,Q)|0,n=n+Math.imul(B,tt)|0,n=n+Math.imul(S,Q)|0,o=o+Math.imul(S,tt)|0,e=e+Math.imul(A,it)|0,n=n+Math.imul(A,et)|0,n=n+Math.imul(E,it)|0,o=o+Math.imul(E,et)|0,e=e+Math.imul(M,ot)|0,n=n+Math.imul(M,ht)|0,n=n+Math.imul(b,ot)|0,o=o+Math.imul(b,ht)|0,e=e+Math.imul(v,ut)|0,n=n+Math.imul(v,at)|0,n=n+Math.imul(y,ut)|0,o=o+Math.imul(y,at)|0,e=e+Math.imul(d,lt)|0,n=n+Math.imul(d,mt)|0,n=n+Math.imul(c,lt)|0,o=o+Math.imul(c,mt)|0,e=e+Math.imul(l,dt)|0,n=n+Math.imul(l,ct)|0,n=n+Math.imul(m,dt)|0,o=o+Math.imul(m,ct)|0;var Rt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,e=Math.imul(C,F),n=Math.imul(C,$),n=n+Math.imul(D,F)|0,o=Math.imul(D,$),e=e+Math.imul(O,J)|0,n=n+Math.imul(O,V)|0,n=n+Math.imul(Y,J)|0,o=o+Math.imul(Y,V)|0,e=e+Math.imul(k,W)|0,n=n+Math.imul(k,X)|0,n=n+Math.imul(I,W)|0,o=o+Math.imul(I,X)|0,e=e+Math.imul(T,Q)|0,n=n+Math.imul(T,tt)|0,n=n+Math.imul(x,Q)|0,o=o+Math.imul(x,tt)|0,e=e+Math.imul(B,it)|0,n=n+Math.imul(B,et)|0,n=n+Math.imul(S,it)|0,o=o+Math.imul(S,et)|0,e=e+Math.imul(A,ot)|0,n=n+Math.imul(A,ht)|0,n=n+Math.imul(E,ot)|0,o=o+Math.imul(E,ht)|0,e=e+Math.imul(M,ut)|0,n=n+Math.imul(M,at)|0,n=n+Math.imul(b,ut)|0,o=o+Math.imul(b,at)|0,e=e+Math.imul(v,lt)|0,n=n+Math.imul(v,mt)|0,n=n+Math.imul(y,lt)|0,o=o+Math.imul(y,mt)|0,e=e+Math.imul(d,dt)|0,n=n+Math.imul(d,ct)|0,n=n+Math.imul(c,dt)|0,o=o+Math.imul(c,ct)|0;var Bt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,e=Math.imul(C,J),n=Math.imul(C,V),n=n+Math.imul(D,J)|0,o=Math.imul(D,V),e=e+Math.imul(O,W)|0,n=n+Math.imul(O,X)|0,n=n+Math.imul(Y,W)|0,o=o+Math.imul(Y,X)|0,e=e+Math.imul(k,Q)|0,n=n+Math.imul(k,tt)|0,n=n+Math.imul(I,Q)|0,o=o+Math.imul(I,tt)|0,e=e+Math.imul(T,it)|0,n=n+Math.imul(T,et)|0,n=n+Math.imul(x,it)|0,o=o+Math.imul(x,et)|0,e=e+Math.imul(B,ot)|0,n=n+Math.imul(B,ht)|0,n=n+Math.imul(S,ot)|0,o=o+Math.imul(S,ht)|0,e=e+Math.imul(A,ut)|0,n=n+Math.imul(A,at)|0,n=n+Math.imul(E,ut)|0,o=o+Math.imul(E,at)|0,e=e+Math.imul(M,lt)|0,n=n+Math.imul(M,mt)|0,n=n+Math.imul(b,lt)|0,o=o+Math.imul(b,mt)|0,e=e+Math.imul(v,dt)|0,n=n+Math.imul(v,ct)|0,n=n+Math.imul(y,dt)|0,o=o+Math.imul(y,ct)|0;var St=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(St>>>26)|0,St&=67108863,e=Math.imul(C,W),n=Math.imul(C,X),n=n+Math.imul(D,W)|0,o=Math.imul(D,X),e=e+Math.imul(O,Q)|0,n=n+Math.imul(O,tt)|0,n=n+Math.imul(Y,Q)|0,o=o+Math.imul(Y,tt)|0,e=e+Math.imul(k,it)|0,n=n+Math.imul(k,et)|0,n=n+Math.imul(I,it)|0,o=o+Math.imul(I,et)|0,e=e+Math.imul(T,ot)|0,n=n+Math.imul(T,ht)|0,n=n+Math.imul(x,ot)|0,o=o+Math.imul(x,ht)|0,e=e+Math.imul(B,ut)|0,n=n+Math.imul(B,at)|0,n=n+Math.imul(S,ut)|0,o=o+Math.imul(S,at)|0,e=e+Math.imul(A,lt)|0,n=n+Math.imul(A,mt)|0,n=n+Math.imul(E,lt)|0,o=o+Math.imul(E,mt)|0,e=e+Math.imul(M,dt)|0,n=n+Math.imul(M,ct)|0,n=n+Math.imul(b,dt)|0,o=o+Math.imul(b,ct)|0;var Pt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,e=Math.imul(C,Q),n=Math.imul(C,tt),n=n+Math.imul(D,Q)|0,o=Math.imul(D,tt),e=e+Math.imul(O,it)|0,n=n+Math.imul(O,et)|0,n=n+Math.imul(Y,it)|0,o=o+Math.imul(Y,et)|0,e=e+Math.imul(k,ot)|0,n=n+Math.imul(k,ht)|0,n=n+Math.imul(I,ot)|0,o=o+Math.imul(I,ht)|0,e=e+Math.imul(T,ut)|0,n=n+Math.imul(T,at)|0,n=n+Math.imul(x,ut)|0,o=o+Math.imul(x,at)|0,e=e+Math.imul(B,lt)|0,n=n+Math.imul(B,mt)|0,n=n+Math.imul(S,lt)|0,o=o+Math.imul(S,mt)|0,e=e+Math.imul(A,dt)|0,n=n+Math.imul(A,ct)|0,n=n+Math.imul(E,dt)|0,o=o+Math.imul(E,ct)|0;var Tt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,e=Math.imul(C,it),n=Math.imul(C,et),n=n+Math.imul(D,it)|0,o=Math.imul(D,et),e=e+Math.imul(O,ot)|0,n=n+Math.imul(O,ht)|0,n=n+Math.imul(Y,ot)|0,o=o+Math.imul(Y,ht)|0,e=e+Math.imul(k,ut)|0,n=n+Math.imul(k,at)|0,n=n+Math.imul(I,ut)|0,o=o+Math.imul(I,at)|0,e=e+Math.imul(T,lt)|0,n=n+Math.imul(T,mt)|0,n=n+Math.imul(x,lt)|0,o=o+Math.imul(x,mt)|0,e=e+Math.imul(B,dt)|0,n=n+Math.imul(B,ct)|0,n=n+Math.imul(S,dt)|0,o=o+Math.imul(S,ct)|0;var xt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,e=Math.imul(C,ot),n=Math.imul(C,ht),n=n+Math.imul(D,ot)|0,o=Math.imul(D,ht),e=e+Math.imul(O,ut)|0,n=n+Math.imul(O,at)|0,n=n+Math.imul(Y,ut)|0,o=o+Math.imul(Y,at)|0,e=e+Math.imul(k,lt)|0,n=n+Math.imul(k,mt)|0,n=n+Math.imul(I,lt)|0,o=o+Math.imul(I,mt)|0,e=e+Math.imul(T,dt)|0,n=n+Math.imul(T,ct)|0,n=n+Math.imul(x,dt)|0,o=o+Math.imul(x,ct)|0;var Ut=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Ut>>>26)|0,Ut&=67108863,e=Math.imul(C,ut),n=Math.imul(C,at),n=n+Math.imul(D,ut)|0,o=Math.imul(D,at),e=e+Math.imul(O,lt)|0,n=n+Math.imul(O,mt)|0,n=n+Math.imul(Y,lt)|0,o=o+Math.imul(Y,mt)|0,e=e+Math.imul(k,dt)|0,n=n+Math.imul(k,ct)|0,n=n+Math.imul(I,dt)|0,o=o+Math.imul(I,ct)|0;var kt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,e=Math.imul(C,lt),n=Math.imul(C,mt),n=n+Math.imul(D,lt)|0,o=Math.imul(D,mt),e=e+Math.imul(O,dt)|0,n=n+Math.imul(O,ct)|0,n=n+Math.imul(Y,dt)|0,o=o+Math.imul(Y,ct)|0;var It=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(It>>>26)|0,It&=67108863,e=Math.imul(C,dt),n=Math.imul(C,ct),n=n+Math.imul(D,dt)|0,o=Math.imul(D,ct);var Lt=(a+e|0)+((8191&n)<<13)|0;return a=(o+(n>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,u[0]=gt,u[1]=vt,u[2]=yt,u[3]=wt,u[4]=Mt,u[5]=bt,u[6]=_t,u[7]=At,u[8]=Et,u[9]=Rt,u[10]=Bt,u[11]=St,u[12]=Pt,u[13]=Tt,u[14]=xt,u[15]=Ut,u[16]=kt,u[17]=It,u[18]=Lt,0!==a&&(u[19]=a,i.length++),i};Math.imul||(R=a),o.prototype.mulTo=function(t,r){var i,e=this.length+t.length;return i=10===this.length&&10===t.length?R(this,t,r):63>e?a(this,t,r):1024>e?f(this,t,r):l(this,t,r)},m.prototype.makeRBT=function(t){for(var r=Array(t),i=o.prototype._countBits(t)-1,e=0;t>e;e++)r[e]=this.revBin(e,i,t);return r},m.prototype.revBin=function(t,r,i){if(0===t||t===i-1)return t;for(var e=0,n=0;r>n;n++)e|=(1&t)<>=1;return e},m.prototype.permute=function(t,r,i,e,n,o){for(var h=0;o>h;h++)e[h]=r[t[h]],n[h]=i[t[h]]},m.prototype.transform=function(t,r,i,e,n,o){this.permute(o,t,r,i,e,n);for(var h=1;n>h;h<<=1)for(var s=h<<1,u=Math.cos(2*Math.PI/s),a=Math.sin(2*Math.PI/s),f=0;n>f;f+=s)for(var l=u,m=a,p=0;h>p;p++){var d=i[f+p],c=e[f+p],g=i[f+p+h],v=e[f+p+h],y=l*g-m*v;v=l*v+m*g,g=y,i[f+p]=d+g,e[f+p]=c+v,i[f+p+h]=d-g,e[f+p+h]=c-v,p!==s&&(y=u*l-a*m,m=u*m+a*l,l=y)}},m.prototype.guessLen13b=function(t,r){var i=1|Math.max(r,t),e=1&i,n=0;for(i=i/2|0;i;i>>>=1)n++;return 1<1)for(var e=0;i/2>e;e++){var n=t[e];t[e]=t[i-e-1],t[i-e-1]=n,n=r[e],r[e]=-r[i-e-1],r[i-e-1]=-n}},m.prototype.normalize13b=function(t,r){for(var i=0,e=0;r/2>e;e++){var n=8192*Math.round(t[2*e+1]/r)+Math.round(t[2*e]/r)+i;t[e]=67108863&n,i=67108864>n?0:n/67108864|0}return t},m.prototype.convert13b=function(t,r,i,n){for(var o=0,h=0;r>h;h++)o+=0|t[h],i[2*h]=8191&o,o>>>=13,i[2*h+1]=8191&o,o>>>=13;for(h=2*r;n>h;++h)i[h]=0;e(0===o),e(0===(o&-8192))},m.prototype.stub=function(t){for(var r=Array(t),i=0;t>i;i++)r[i]=0;return r},m.prototype.mulp=function(t,r,i){var e=2*this.guessLen13b(t.length,r.length),n=this.makeRBT(e),o=this.stub(e),h=Array(e),s=Array(e),u=Array(e),a=Array(e),f=Array(e),l=Array(e),m=i.words;m.length=e,this.convert13b(t.words,t.length,h,e),this.convert13b(r.words,r.length,a,e),this.transform(h,o,s,u,e,n),this.transform(a,o,f,l,e,n);for(var p=0;e>p;p++){var d=s[p]*f[p]-u[p]*l[p];u[p]=s[p]*l[p]+u[p]*f[p],s[p]=d}return this.conjugate(s,u,e),this.transform(s,u,m,o,e,n),this.conjugate(m,o,e),this.normalize13b(m,e),i.negative=t.negative^r.negative,i.length=t.length+r.length,i.strip()},o.prototype.mul=function(t){var r=new o(null);return r.words=Array(this.length+t.length),this.mulTo(t,r)},o.prototype.mulf=function(t){var r=new o(null);return r.words=Array(this.length+t.length),l(this,t,r)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){e("number"==typeof t),e(67108864>t);for(var r=0,i=0;this.length>i;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&r);r>>=26,r+=n/67108864|0,r+=o>>>26,this.words[i]=67108863&o}return 0!==r&&(this.words[i]=r,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var r=u(t);if(0===r.length)return new o(1);for(var i=this,e=0;r.length>e&&0===r[e];e++,i=i.sqr());if(++ee;e++,n=n.sqr())0!==r[e]&&(i=i.mul(n));return i},o.prototype.iushln=function(t){e("number"==typeof t&&t>=0);var r,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var h=0;for(r=0;this.length>r;r++){var s=this.words[r]&o,u=(0|this.words[r])-s<>>26-i}h&&(this.words[r]=h,this.length++)}if(0!==n){for(r=this.length-1;r>=0;r--)this.words[r+n]=this.words[r];for(r=0;n>r;r++)this.words[r]=0;this.length+=n}return this.strip()},o.prototype.ishln=function(t){return e(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,r,i){e("number"==typeof t&&t>=0);var n;n=r?(r-r%26)/26:0;var o=t%26,h=Math.min((t-o)/26,this.length),s=67108863^67108863>>>o<a;a++)u.words[a]=this.words[a];u.length=h}if(0===h);else if(this.length>h)for(this.length-=h,a=0;this.length>a;a++)this.words[a]=this.words[a+h];else this.words[0]=0,this.length=1;var f=0;for(a=this.length-1;!(0>a||0===f&&n>a);a--){var l=0|this.words[a];this.words[a]=f<<26-o|l>>>o,f=l&s}return u&&0!==f&&(u.words[u.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,r,i){return e(0===this.negative),this.iushrn(t,r,i)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){e("number"==typeof t&&t>=0);var r=t%26,i=(t-r)/26,n=1<=this.length)return!1;var o=this.words[i];return!!(o&n)},o.prototype.imaskn=function(t){e("number"==typeof t&&t>=0);var r=t%26,i=(t-r)/26;if(e(0===this.negative,"imaskn works only with positive numbers"),i>=this.length)return this;if(0!==r&&i++,this.length=Math.min(i,this.length),0!==r){var n=67108863^67108863>>>r<t),0>t?this.isubn(-t):0!==this.negative?1===this.length&&t>(0|this.words[0])?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var r=0;this.length>r&&this.words[r]>=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function(t){if(e("number"==typeof t),e(67108864>t),0>t)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&0>this.words[0])this.words[0]=-this.words[0],this.negative=1;else for(var r=0;this.length>r&&0>this.words[r];r++)this.words[r]+=67108864,this.words[r+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,r,i){var n,o=t.length+i;this._expand(o);var h,s=0;for(n=0;t.length>n;n++){h=(0|this.words[n+i])+s;var u=(0|t.words[n])*r;h-=67108863&u,s=(h>>26)-(u/67108864|0),this.words[n+i]=67108863&h}for(;this.length-i>n;n++)h=(0|this.words[n+i])+s,s=h>>26,this.words[n+i]=67108863&h;if(0===s)return this.strip();for(e(s===-1),s=0,n=0;this.length>n;n++)h=-(0|this.words[n])+s,s=h>>26,this.words[n]=67108863&h;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,r){var i=this.length-t.length,e=this.clone(),n=t,h=0|n.words[n.length-1],s=this._countBits(h);i=26-s,0!==i&&(n=n.ushln(i),e.iushln(i),h=0|n.words[n.length-1]);var u,a=e.length-n.length;if("mod"!==r){u=new o(null),u.length=a+1,u.words=Array(u.length);for(var f=0;u.length>f;f++)u.words[f]=0}var l=e.clone()._ishlnsubmul(n,1,a);0===l.negative&&(e=l,u&&(u.words[a]=1));for(var m=a-1;m>=0;m--){var p=67108864*(0|e.words[n.length+m])+(0|e.words[n.length+m-1]);for(p=Math.min(p/h|0,67108863),e._ishlnsubmul(n,p,m);0!==e.negative;)p--,e.negative=0,e._ishlnsubmul(n,1,m),e.isZero()||(e.negative^=1);u&&(u.words[m]=p)}return u&&u.strip(),e.strip(),"div"!==r&&0!==i&&e.iushrn(i),{div:u||null,mod:e}},o.prototype.divmod=function(t,r,i){if(e(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var n,h,s;return 0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,r),"mod"!==r&&(n=s.div.neg()),"div"!==r&&(h=s.mod.neg(),i&&0!==h.negative&&h.iadd(t)),{div:n,mod:h}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),r),"mod"!==r&&(n=s.div.neg()),{div:n,mod:s.mod}):0!==(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),r),"div"!==r&&(h=s.mod.neg(),i&&0!==h.negative&&h.isub(t)),{div:s.div,mod:h}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===r?{div:this.divn(t.words[0]),mod:null -}:"mod"===r?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,r)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var r=this.divmod(t);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(t):r.mod,e=t.ushrn(1),n=t.andln(1),o=i.cmp(e);return 0>o||1===n&&0===o?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function(t){e(67108863>=t);for(var r=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(r*i+(0|this.words[n]))%t;return i},o.prototype.idivn=function(t){e(67108863>=t);for(var r=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*r;this.words[i]=n/t|0,r=n%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){e(0===t.negative),e(!t.isZero());var r=this,i=t.clone();r=0!==r.negative?r.umod(t):r.clone();for(var n=new o(1),h=new o(0),s=new o(0),u=new o(1),a=0;r.isEven()&&i.isEven();)r.iushrn(1),i.iushrn(1),++a;for(var f=i.clone(),l=r.clone();!r.isZero();){for(var m=0,p=1;0===(r.words[0]&p)&&26>m;++m,p<<=1);if(m>0)for(r.iushrn(m);m-- >0;)(n.isOdd()||h.isOdd())&&(n.iadd(f),h.isub(l)),n.iushrn(1),h.iushrn(1);for(var d=0,c=1;0===(i.words[0]&c)&&26>d;++d,c<<=1);if(d>0)for(i.iushrn(d);d-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(f),u.isub(l)),s.iushrn(1),u.iushrn(1);r.cmp(i)<0?(i.isub(r),s.isub(n),u.isub(h)):(r.isub(i),n.isub(s),h.isub(u))}return{a:s,b:u,gcd:i.iushln(a)}},o.prototype._invmp=function(t){e(0===t.negative),e(!t.isZero());var r=this,i=t.clone();r=0!==r.negative?r.umod(t):r.clone();for(var n=new o(1),h=new o(0),s=i.clone();r.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,a=1;0===(r.words[0]&a)&&26>u;++u,a<<=1);if(u>0)for(r.iushrn(u);u-- >0;)n.isOdd()&&n.iadd(s),n.iushrn(1);for(var f=0,l=1;0===(i.words[0]&l)&&26>f;++f,l<<=1);if(f>0)for(i.iushrn(f);f-- >0;)h.isOdd()&&h.iadd(s),h.iushrn(1);r.cmp(i)<0?(i.isub(r),h.isub(n)):(r.isub(i),n.isub(h))}var m;return m=0===r.cmpn(1)?n:h,m.cmpn(0)<0&&m.iadd(t),m},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var r=this.clone(),i=t.clone();r.negative=0,i.negative=0;for(var e=0;r.isEven()&&i.isEven();e++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var n=r.cmp(i);if(0>n){var o=r;r=i,i=o}else if(0===n||0===i.cmpn(1))break;r.isub(i)}return i.iushln(e)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){e("number"==typeof t);var r=t%26,i=(t-r)/26,n=1<=this.length)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,h=i;0!==o&&this.length>h;h++){var s=0|this.words[h];s+=o,o=s>>>26,s&=67108863,this.words[h]=s}return 0!==o&&(this.words[h]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var r=0>t;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;this.strip();var i;if(this.length>1)i=1;else{r&&(t=-t),e(67108863>=t,"Number is too big");var n=0|this.words[0];i=n===t?0:t>n?-1:1}return 0!==this.negative?0|-i:i},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var r=this.ucmp(t);return 0!==this.negative?0|-r:r},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(t.length>this.length)return-1;for(var r=0,i=this.length-1;i>=0;i--){var e=0|this.words[i],n=0|t.words[i];if(e!==n){n>e?r=-1:e>n&&(r=1);break}}return r},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new y(t)},o.prototype.toRed=function(t){return e(!this.red,"Already a number in reduction context"),e(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return e(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return e(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return e(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return e(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return e(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return e(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return e(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return e(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return e(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return e(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return e(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return e(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return e(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return e(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return e(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var B={k256:null,p224:null,p192:null,p25519:null};p.prototype._tmp=function(){var t=new o(null);return t.words=Array(Math.ceil(this.n/13)),t},p.prototype.ireduce=function(t){var r,i=t;do this.split(i,this.tmp),i=this.imulK(i),i=i.iadd(this.tmp),r=i.bitLength();while(r>this.n);var e=this.n>r?-1:i.ucmp(this.p);return 0===e?(i.words[0]=0,i.length=1):e>0?i.isub(this.p):i.strip(),i},p.prototype.split=function(t,r){t.iushrn(this.n,0,r)},p.prototype.imulK=function(t){return t.imul(this.k)},n(d,p),d.prototype.split=function(t,r){for(var i=4194303,e=Math.min(t.length,9),n=0;e>n;n++)r.words[n]=t.words[n];if(r.length=e,9>=t.length)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(r.words[r.length++]=o&i,n=10;t.length>n;n++){var h=0|t.words[n];t.words[n-10]=(h&i)<<4|o>>>22,o=h}o>>>=22,t.words[n-10]=o,t.length-=0===o&&t.length>10?10:9},d.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var r=0,i=0;t.length>i;i++){var e=0|t.words[i];r+=977*e,t.words[i]=67108863&r,r=64*e+(r/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},n(c,p),n(g,p),n(v,p),v.prototype.imulK=function(t){for(var r=0,i=0;t.length>i;i++){var e=19*(0|t.words[i])+r,n=67108863&e;e>>>=26,t.words[i]=n,r=e}return 0!==r&&(t.words[t.length++]=r),t},o._prime=function S(t){if(B[t])return B[t];var S;if("k256"===t)S=new d;else if("p224"===t)S=new c;else if("p192"===t)S=new g;else{if("p25519"!==t)throw Error("Unknown prime "+t);S=new v}return B[t]=S,S},y.prototype._verify1=function(t){e(0===t.negative,"red works only with positives"),e(t.red,"red works only with red numbers")},y.prototype._verify2=function(t,r){e(0===(t.negative|r.negative),"red works only with positives"),e(t.red&&t.red===r.red,"red works only with red numbers")},y.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},y.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},y.prototype.add=function(t,r){this._verify2(t,r);var i=t.add(r);return i.cmp(this.m)<0||i.isub(this.m),i._forceRed(this)},y.prototype.iadd=function(t,r){this._verify2(t,r);var i=t.iadd(r);return i.cmp(this.m)<0||i.isub(this.m),i},y.prototype.sub=function(t,r){this._verify2(t,r);var i=t.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},y.prototype.isub=function(t,r){this._verify2(t,r);var i=t.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},y.prototype.shl=function(t,r){return this._verify1(t),this.imod(t.ushln(r))},y.prototype.imul=function(t,r){return this._verify2(t,r),this.imod(t.imul(r))},y.prototype.mul=function(t,r){return this._verify2(t,r),this.imod(t.mul(r))},y.prototype.isqr=function(t){return this.imul(t,t.clone())},y.prototype.sqr=function(t){return this.mul(t,t)},y.prototype.sqrt=function(t){if(t.isZero())return t.clone();var r=this.m.andln(3);if(e(r%2===1),3===r){var i=this.m.add(new o(1)).iushrn(2);return this.pow(t,i)}for(var n=this.m.subn(1),h=0;!n.isZero()&&0===n.andln(1);)h++,n.iushrn(1);e(!n.isZero());var s=new o(1).toRed(this),u=s.redNeg(),a=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new o(2*f*f).toRed(this);0!==this.pow(f,a).cmp(u);)f.redIAdd(u);for(var l=this.pow(f,n),m=this.pow(t,n.addn(1).iushrn(1)),p=this.pow(t,n),d=h;0!==p.cmp(s);){for(var c=p,g=0;0!==c.cmp(s);g++)c=c.redSqr();e(d>g);var v=this.pow(l,new o(1).iushln(d-g-1));m=m.redMul(v),l=v.redSqr(),p=p.redMul(l),d=g}return m},y.prototype.invm=function(t){var r=t._invmp(this.m);return 0!==r.negative?(r.negative=0,this.imod(r).redNeg()):this.imod(r)},y.prototype.pow=function(t,r){if(r.isZero())return new o(1);if(0===r.cmpn(1))return t.clone();var i=4,e=Array(1<n;n++)e[n]=this.mul(e[n-1],t);var h=e[0],s=0,u=0,a=r.bitLength()%26;for(0===a&&(a=26),n=r.length-1;n>=0;n--){for(var f=r.words[n],l=a-1;l>=0;l--){var m=f>>l&1;h!==e[0]&&(h=this.sqr(h)),0!==m||0!==s?(s<<=1,s|=m,u++,(u===i||0===n&&0===l)&&(h=this.mul(h,e[s]),u=0,s=0)):u=0}a=26}return h},y.prototype.convertTo=function(t){var r=t.umod(this.m);return r===t?r.clone():r},y.prototype.convertFrom=function(t){var r=t.clone();return r.red=null,r},o.mont=function(t){return new w(t)},n(w,y),w.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},w.prototype.convertFrom=function(t){var r=this.imod(t.mul(this.rinv));return r.red=null,r},w.prototype.imul=function(t,r){if(t.isZero()||r.isZero())return t.words[0]=0,t.length=1,t;var i=t.imul(r),e=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=i.isub(e).iushrn(this.shift),o=n;return n.cmp(this.m)<0?n.cmpn(0)<0&&(o=n.iadd(this.m)):o=n.isub(this.m),o._forceRed(this)},w.prototype.mul=function(t,r){if(t.isZero()||r.isZero())return new o(0)._forceRed(this);var i=t.mul(r),e=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=i.isub(e).iushrn(this.shift),h=n;return n.cmp(this.m)<0?n.cmpn(0)<0&&(h=n.iadd(this.m)):h=n.isub(this.m),h._forceRed(this)},w.prototype.invm=function(t){var r=this.imod(t._invmp(this.m).mul(this.r2));return r._forceRed(this)}}(void 0===t||t,this)}).call(r,i(10)(t))},function(t,r,i){"use strict";(function(t,e){function n(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(r){return!1}}function o(){return t.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function h(r,i){if(o()t)throw new RangeError('"size" argument must not be negative')}function a(t,r,i,e){return u(r),r>0&&void 0!==i?"string"==typeof e?h(t,r).fill(i,e):h(t,r).fill(i):h(t,r)}function f(r,i){if(u(i),r=h(r,0>i?0:0|c(i)),!t.TYPED_ARRAY_SUPPORT)for(var e=0;i>e;++e)r[e]=0;return r}function l(r,i,e){if("string"==typeof e&&""!==e||(e="utf8"),!t.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var n=0|v(i,e);r=h(r,n);var o=r.write(i,e);return o!==n&&(r=r.slice(0,o)),r}function m(t,r){var i=0>r.length?0:0|c(r.length);t=h(t,i);for(var e=0;i>e;e+=1)t[e]=255&r[e];return t}function p(r,i,e,n){if(0>e||e>i.byteLength)throw new RangeError("'offset' is out of bounds");if(e+(n||0)>i.byteLength)throw new RangeError("'length' is out of bounds");return i=void 0===e&&void 0===n?new Uint8Array(i):void 0===n?new Uint8Array(i,e):new Uint8Array(i,e,n),t.TYPED_ARRAY_SUPPORT?(r=i,r.__proto__=t.prototype):r=m(r,i),r}function d(r,i){if(t.isBuffer(i)){var e=0|c(i.length);return r=h(r,e),0===r.length?r:(i.copy(r,0,0,e),r)}if(i){if("undefined"!=typeof ArrayBuffer&&i.buffer instanceof ArrayBuffer||"length"in i)return"number"!=typeof i.length||W(i.length)?h(r,0):m(r,i);if("Buffer"===i.type&&Q(i.data))return m(r,i.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function c(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function g(r){return+r!=r&&(r=0),t.alloc(+r)}function v(r,i){if(t.isBuffer(r))return r.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(r)||r instanceof ArrayBuffer))return r.byteLength;"string"!=typeof r&&(r=""+r);var e=r.length;if(0===e)return 0;for(var n=!1;;)switch(i){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return $(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return V(r).length;default:if(n)return $(r).length;i=(""+i).toLowerCase(),n=!0}}function y(t,r,i){var e=!1;if((void 0===r||0>r)&&(r=0),r>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),0>=i)return"";if(i>>>=0,r>>>=0,r>=i)return"";for(t||(t="utf8");;)switch(t){case"hex":return I(this,r,i);case"utf8":case"utf-8":return T(this,r,i);case"ascii":return U(this,r,i);case"latin1":case"binary":return k(this,r,i);case"base64":return P(this,r,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,r,i);default:if(e)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),e=!0}}function w(t,r,i){var e=t[r];t[r]=t[i],t[i]=e}function M(r,i,e,n,o){if(0===r.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:-2147483648>e&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:r.length-1),0>e&&(e=r.length+e),r.length>e){if(0>e){if(!o)return-1;e=0}}else{if(o)return-1;e=r.length-1}if("string"==typeof i&&(i=t.from(i,n)),t.isBuffer(i))return 0===i.length?-1:b(r,i,e,n,o);if("number"==typeof i)return i=255&i,t.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(r,i,e):Uint8Array.prototype.lastIndexOf.call(r,i,e):b(r,[i],e,n,o);throw new TypeError("val must be string, number or Buffer")}function b(t,r,i,e,n){function o(t,r){return 1===h?t[r]:t.readUInt16BE(r*h)}var h=1,s=t.length,u=r.length;if(void 0!==e&&(e=(e+"").toLowerCase(),"ucs2"===e||"ucs-2"===e||"utf16le"===e||"utf-16le"===e)){if(2>t.length||2>r.length)return-1;h=2,s/=2,u/=2,i/=2}var a;if(n){var f=-1;for(a=i;s>a;a++)if(o(t,a)===o(r,f===-1?0:a-f)){if(f===-1&&(f=a),a-f+1===u)return f*h}else f!==-1&&(a-=a-f),f=-1}else for(i+u>s&&(i=s-u),a=i;a>=0;a--){for(var l=!0,m=0;u>m;m++)if(o(t,a+m)!==o(r,m)){l=!1;break}if(l)return a}return-1}function _(t,r,i,e){i=+i||0;var n=t.length-i;e?(e=+e,e>n&&(e=n)):e=n;var o=r.length;if(o%2!==0)throw new TypeError("Invalid hex string");e>o/2&&(e=o/2);for(var h=0;e>h;++h){var s=parseInt(r.substr(2*h,2),16);if(isNaN(s))return h;t[i+h]=s}return h}function A(t,r,i,e){return H($(r,t.length-i),t,i,e)}function E(t,r,i,e){return H(K(r),t,i,e)}function R(t,r,i,e){return E(t,r,i,e)}function B(t,r,i,e){return H(V(r),t,i,e)}function S(t,r,i,e){return H(J(r,t.length-i),t,i,e)}function P(t,r,i){return X.fromByteArray(0===r&&i===t.length?t:t.slice(r,i))}function T(t,r,i){i=Math.min(t.length,i);for(var e=[],n=r;i>n;){var o=t[n],h=null,s=o>239?4:o>223?3:o>191?2:1;if(i>=n+s){var u,a,f,l;switch(s){case 1:128>o&&(h=o);break;case 2:u=t[n+1],128===(192&u)&&(l=(31&o)<<6|63&u,l>127&&(h=l));break;case 3:u=t[n+1],a=t[n+2],128===(192&u)&&128===(192&a)&&(l=(15&o)<<12|(63&u)<<6|63&a,l>2047&&(55296>l||l>57343)&&(h=l));break;case 4:u=t[n+1],a=t[n+2],f=t[n+3],128===(192&u)&&128===(192&a)&&128===(192&f)&&(l=(15&o)<<18|(63&u)<<12|(63&a)<<6|63&f,l>65535&&1114112>l&&(h=l))}}null===h?(h=65533,s=1):h>65535&&(h-=65536,e.push(h>>>10&1023|55296),h=56320|1023&h),e.push(h),n+=s}return x(e)}function x(t){var r=t.length;if(tt>=r)return String.fromCharCode.apply(String,t);for(var i="",e=0;r>e;)i+=String.fromCharCode.apply(String,t.slice(e,e+=tt));return i}function U(t,r,i){var e="";i=Math.min(t.length,i);for(var n=r;i>n;++n)e+=String.fromCharCode(127&t[n]);return e}function k(t,r,i){var e="";i=Math.min(t.length,i);for(var n=r;i>n;++n)e+=String.fromCharCode(t[n]);return e}function I(t,r,i){var e=t.length;r&&r>=0||(r=0),(!i||0>i||i>e)&&(i=e);for(var n="",o=r;i>o;++o)n+=F(t[o]);return n}function L(t,r,i){for(var e=t.slice(r,i),n="",o=0;e.length>o;o+=2)n+=String.fromCharCode(e[o]+256*e[o+1]);return n}function O(t,r,i){if(t%1!==0||0>t)throw new RangeError("offset is not uint");if(t+r>i)throw new RangeError("Trying to access beyond buffer length")}function Y(r,i,e,n,o,h){if(!t.isBuffer(r))throw new TypeError('"buffer" argument must be a Buffer instance');if(i>o||h>i)throw new RangeError('"value" argument is out of bounds');if(e+n>r.length)throw new RangeError("Index out of range")}function N(t,r,i,e){0>r&&(r=65535+r+1);for(var n=0,o=Math.min(t.length-i,2);o>n;++n)t[i+n]=(r&255<<8*(e?n:1-n))>>>8*(e?n:1-n)}function C(t,r,i,e){0>r&&(r=4294967295+r+1);for(var n=0,o=Math.min(t.length-i,4);o>n;++n)t[i+n]=r>>>8*(e?n:3-n)&255}function D(t,r,i,e,n,o){if(i+e>t.length)throw new RangeError("Index out of range");if(0>i)throw new RangeError("Index out of range")}function j(t,r,i,e,n){return n||D(t,r,i,4,3.4028234663852886e38,-3.4028234663852886e38),G.write(t,r,i,e,23,4),i+4}function Z(t,r,i,e,n){return n||D(t,r,i,8,1.7976931348623157e308,-1.7976931348623157e308),G.write(t,r,i,e,52,8),i+8}function q(t){if(t=z(t).replace(rt,""),2>t.length)return"";for(;t.length%4!==0;)t+="=";return t}function z(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function F(t){return 16>t?"0"+t.toString(16):t.toString(16)}function $(t,r){r=r||1/0;for(var i,e=t.length,n=null,o=[],h=0;e>h;++h){if(i=t.charCodeAt(h),i>55295&&57344>i){if(!n){if(i>56319){(r-=3)>-1&&o.push(239,191,189);continue}if(h+1===e){(r-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(56320>i){(r-=3)>-1&&o.push(239,191,189),n=i;continue}i=(n-55296<<10|i-56320)+65536}else n&&(r-=3)>-1&&o.push(239,191,189);if(n=null,128>i){if((r-=1)<0)break;o.push(i)}else if(2048>i){if((r-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(65536>i){if((r-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(i>=1114112)throw Error("Invalid code point");if((r-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function K(t){for(var r=[],i=0;t.length>i;++i)r.push(255&t.charCodeAt(i));return r}function J(t,r){for(var i,e,n,o=[],h=0;t.length>h&&(r-=2)>=0;++h)i=t.charCodeAt(h),e=i>>8,n=i%256,o.push(n),o.push(e);return o}function V(t){return X.toByteArray(q(t))}function H(t,r,i,e){for(var n=0;e>n&&(n+io;++o)if(r[o]!==i[o]){e=r[o],n=i[o];break}return n>e?-1:e>n?1:0},t.isEncoding=function(t){switch((t+"").toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},t.concat=function(r,i){if(!Q(r))throw new TypeError('"list" argument must be an Array of Buffers');if(0===r.length)return t.alloc(0);var e;if(void 0===i)for(i=0,e=0;r.length>e;++e)i+=r[e].length;var n=t.allocUnsafe(i),o=0;for(e=0;r.length>e;++e){var h=r[e];if(!t.isBuffer(h))throw new TypeError('"list" argument must be an Array of Buffers');h.copy(n,o),o+=h.length}return n},t.byteLength=v,t.prototype._isBuffer=!0,t.prototype.swap16=function(){var t=this.length;if(t%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var r=0;t>r;r+=2)w(this,r,r+1);return this},t.prototype.swap32=function(){var t=this.length;if(t%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var r=0;t>r;r+=4)w(this,r,r+3),w(this,r+1,r+2);return this},t.prototype.swap64=function(){var t=this.length;if(t%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var r=0;t>r;r+=8)w(this,r,r+7),w(this,r+1,r+6),w(this,r+2,r+5),w(this,r+3,r+4);return this},t.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?T(this,0,t):y.apply(this,arguments)},t.prototype.equals=function(r){if(!t.isBuffer(r))throw new TypeError("Argument must be a Buffer");return this===r||0===t.compare(this,r)},t.prototype.inspect=function(){var t="",i=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,i).match(/.{2}/g).join(" "),this.length>i&&(t+=" ... ")),""},t.prototype.compare=function(r,i,e,n,o){if(!t.isBuffer(r))throw new TypeError("Argument must be a Buffer");if(void 0===i&&(i=0),void 0===e&&(e=r?r.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),0>i||e>r.length||0>n||o>this.length)throw new RangeError("out of range index");if(n>=o&&i>=e)return 0;if(n>=o)return-1;if(i>=e)return 1;if(i>>>=0,e>>>=0,n>>>=0,o>>>=0,this===r)return 0;for(var h=o-n,s=e-i,u=Math.min(h,s),a=this.slice(n,o),f=r.slice(i,e),l=0;u>l;++l)if(a[l]!==f[l]){h=a[l],s=f[l];break}return s>h?-1:h>s?1:0},t.prototype.includes=function(t,r,i){return this.indexOf(t,r,i)!==-1},t.prototype.indexOf=function(t,r,i){return M(this,t,r,i,!0)},t.prototype.lastIndexOf=function(t,r,i){return M(this,t,r,i,!1)},t.prototype.write=function(t,r,i,e){if(void 0===r)e="utf8",i=this.length,r=0;else if(void 0===i&&"string"==typeof r)e=r,i=this.length,r=0;else{if(!isFinite(r))throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");r=0|r,isFinite(i)?(i=0|i,void 0===e&&(e="utf8")):(e=i,i=void 0)}var n=this.length-r;if((void 0===i||i>n)&&(i=n),t.length>0&&(0>i||0>r)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");e||(e="utf8");for(var o=!1;;)switch(e){case"hex":return _(this,t,r,i);case"utf8":case"utf-8":return A(this,t,r,i);case"ascii":return E(this,t,r,i);case"latin1":case"binary":return R(this,t,r,i);case"base64":return B(this,t,r,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,r,i);default:if(o)throw new TypeError("Unknown encoding: "+e);e=(""+e).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;t.prototype.slice=function(r,i){var e=this.length;r=~~r,i=void 0===i?e:~~i,0>r?(r+=e,0>r&&(r=0)):r>e&&(r=e),0>i?(i+=e,0>i&&(i=0)):i>e&&(i=e),r>i&&(i=r);var n;if(t.TYPED_ARRAY_SUPPORT)n=this.subarray(r,i),n.__proto__=t.prototype;else{var o=i-r;n=new t(o,(void 0));for(var h=0;o>h;++h)n[h]=this[h+r]}return n},t.prototype.readUIntLE=function(t,r,i){t=0|t,r=0|r,i||O(t,r,this.length);for(var e=this[t],n=1,o=0;++o0&&(n*=256);)e+=this[t+--r]*n;return e},t.prototype.readUInt8=function(t,r){return r||O(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,r){return r||O(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,r){return r||O(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,r){return r||O(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,r){return r||O(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,r,i){t=0|t,r=0|r,i||O(t,r,this.length);for(var e=this[t],n=1,o=0;++oe||(e-=Math.pow(2,8*r)),e},t.prototype.readIntBE=function(t,r,i){t=0|t,r=0|r,i||O(t,r,this.length);for(var e=r,n=1,o=this[t+--e];e>0&&(n*=256);)o+=this[t+--e]*n;return n*=128,n>o||(o-=Math.pow(2,8*r)),o},t.prototype.readInt8=function(t,r){return r||O(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,r){r||O(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},t.prototype.readInt16BE=function(t,r){r||O(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},t.prototype.readInt32LE=function(t,r){return r||O(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,r){return r||O(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,r){return r||O(t,4,this.length),G.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,r){return r||O(t,4,this.length),G.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,r){return r||O(t,8,this.length),G.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,r){return r||O(t,8,this.length),G.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,r,i,e){if(t=+t,r=0|r,i=0|i,!e){var n=Math.pow(2,8*i)-1;Y(this,t,r,i,n,0)}var o=1,h=0;for(this[r]=255&t;++h=0&&(h*=256);)this[r+o]=t/h&255;return r+i},t.prototype.writeUInt8=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,1,255,0),t.TYPED_ARRAY_SUPPORT||(r=Math.floor(r)),this[i]=255&r,i+1},t.prototype.writeUInt16LE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[i]=255&r,this[i+1]=r>>>8):N(this,r,i,!0),i+2},t.prototype.writeUInt16BE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>8,this[i+1]=255&r):N(this,r,i,!1),i+2},t.prototype.writeUInt32LE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[i+3]=r>>>24,this[i+2]=r>>>16,this[i+1]=r>>>8,this[i]=255&r):C(this,r,i,!0),i+4},t.prototype.writeUInt32BE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r):C(this,r,i,!1),i+4},t.prototype.writeIntLE=function(t,r,i,e){if(t=+t,r=0|r,!e){var n=Math.pow(2,8*i-1);Y(this,t,r,i,n-1,-n)}var o=0,h=1,s=0;for(this[r]=255&t;++ot&&0===s&&0!==this[r+o-1]&&(s=1),this[r+o]=(t/h>>0)-s&255;return r+i},t.prototype.writeIntBE=function(t,r,i,e){if(t=+t,r=0|r,!e){var n=Math.pow(2,8*i-1);Y(this,t,r,i,n-1,-n)}var o=i-1,h=1,s=0;for(this[r+o]=255&t;--o>=0&&(h*=256);)0>t&&0===s&&0!==this[r+o+1]&&(s=1),this[r+o]=(t/h>>0)-s&255;return r+i},t.prototype.writeInt8=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,1,127,-128),t.TYPED_ARRAY_SUPPORT||(r=Math.floor(r)),0>r&&(r=255+r+1),this[i]=255&r,i+1},t.prototype.writeInt16LE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[i]=255&r,this[i+1]=r>>>8):N(this,r,i,!0),i+2},t.prototype.writeInt16BE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>8,this[i+1]=255&r):N(this,r,i,!1),i+2},t.prototype.writeInt32LE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[i]=255&r,this[i+1]=r>>>8,this[i+2]=r>>>16,this[i+3]=r>>>24):C(this,r,i,!0),i+4},t.prototype.writeInt32BE=function(r,i,e){return r=+r,i=0|i,e||Y(this,r,i,4,2147483647,-2147483648),0>r&&(r=4294967295+r+1),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r):C(this,r,i,!1),i+4},t.prototype.writeFloatLE=function(t,r,i){return j(this,t,r,!0,i)},t.prototype.writeFloatBE=function(t,r,i){return j(this,t,r,!1,i)},t.prototype.writeDoubleLE=function(t,r,i){return Z(this,t,r,!0,i)},t.prototype.writeDoubleBE=function(t,r,i){return Z(this,t,r,!1,i)},t.prototype.copy=function(r,i,e,n){if(e||(e=0),n||0===n||(n=this.length),r.length>i||(i=r.length),i||(i=0),n>0&&e>n&&(n=e),n===e)return 0;if(0===r.length||0===this.length)return 0;if(0>i)throw new RangeError("targetStart out of bounds");if(0>e||e>=this.length)throw new RangeError("sourceStart out of bounds");if(0>n)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),n-e>r.length-i&&(n=r.length-i+e);var o,h=n-e;if(this===r&&i>e&&n>i)for(o=h-1;o>=0;--o)r[o+i]=this[o+e];else if(1e3>h||!t.TYPED_ARRAY_SUPPORT)for(o=0;h>o;++o)r[o+i]=this[o+e];else Uint8Array.prototype.set.call(r,this.subarray(e,e+h),i);return h},t.prototype.fill=function(r,i,e,n){if("string"==typeof r){if("string"==typeof i?(n=i,i=0,e=this.length):"string"==typeof e&&(n=e,e=this.length),1===r.length){var o=r.charCodeAt(0);256>o&&(r=o)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!t.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof r&&(r=255&r);if(0>i||i>this.length||e>this.length)throw new RangeError("Out of range index");if(i>=e)return this;i>>>=0,e=void 0===e?this.length:e>>>0,r||(r=0);var h;if("number"==typeof r)for(h=i;e>h;++h)this[h]=r;else{var s=t.isBuffer(r)?r:$(""+new t(r,n)),u=s.length;for(h=0;e-i>h;++h)this[h+i]=s[h%u]}return this};var rt=/[^+\/0-9A-Za-z-_]/g}).call(r,i(1).Buffer,i(9))},function(t,r,i){var e=i(0),n=i(8);console.log(new e("87234987239872349872489724897248972348972389472498728723897234",16).toString(10)),t.exports=function(t){if("string"==typeof t||"number"==typeof t){var r=new e(1),i=(t+"").toLowerCase().trim(),o="0x"===i.substr(0,2)||"-0x"===i.substr(0,3),h=n(i);if("-"===h.substr(0,1)&&(h=n(h.slice(1)),r=new e((-1),10)),h=""===h?"0":h,!h.match(/^-?[0-9]+$/)&&h.match(/^[0-9A-Fa-f]+$/)||h.match(/^[a-fA-F]+$/)||o===!0&&h.match(/^[0-9A-Fa-f]+$/))return new e(h,16).mul(r);if((h.match(/^-?[0-9]+$/)||""===h)&&o===!1)return new e(h,10).mul(r); -}else if("object"==typeof t&&t.toString&&!t.pop&&!t.push&&t.toString(10).match(/^-?[0-9]+$/)&&(t.mul||t.dividedToIntegerBy))return new e(t.toString(10),10);throw Error("[number-to-bn] while converting number "+JSON.stringify(t)+" to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.")}},function(t,r,i){"use strict";function e(t){var r=t?t.toLowerCase():"ether",i=l[r];if("string"!=typeof i)throw Error("[ethjs-unit] the unit provided "+t+" doesn't exists, please use the one of the following units "+JSON.stringify(l,null,2));return new s(i,10)}function n(t){if("string"==typeof t){if(!t.match(/^-?[0-9.]+$/))throw Error("while converting number to string, invalid number value '"+t+"', should be a number matching (^-?[0-9.]+).");return t}if("number"==typeof t)return t+"";if("object"==typeof t&&t.toString&&(t.toTwos||t.dividedToIntegerBy))return t.toPrecision?t.toPrecision()+"":t.toString(10);throw Error("while converting number to string, invalid number value '"+t+"' type "+typeof t+".")}function o(t,r,i){var n=u(t),o=n.lt(a),h=e(r),s=l[r].length-1||1,m=i||{};o&&(n=n.mul(f));for(var p=n.mod(h).toString(10);s>p.length;)p="0"+p;m.pad||(p=p.match(/^([0-9]*[1-9]|0)(0*)/)[1]);var d=n.div(h).toString(10);m.commify&&(d=d.replace(/\B(?=(\d{3})+(?!\d))/g,","));var c=""+d+("0"==p?"":"."+p);return o&&(c="-"+c),c}function h(t,r){var i=n(t),o=e(r),h=l[r].length-1||1,u="-"===i.substring(0,1);if(u&&(i=i.substring(1)),"."===i)throw Error("[ethjs-unit] while converting number "+t+" to wei, invalid value");var a=i.split(".");if(a.length>2)throw Error("[ethjs-unit] while converting number "+t+" to wei, too many decimal points");var m=a[0],p=a[1];if(m||(m="0"),p||(p="0"),p.length>h)throw Error("[ethjs-unit] while converting number "+t+" to wei, too many decimal places");for(;h>p.length;)p+="0";m=new s(m),p=new s(p);var d=m.mul(o).add(p);return u&&(d=d.mul(f)),new s(d.toString(10),10)}var s=i(0),u=i(2),a=new s(0),f=new s((-1)),l={noether:"0",wei:"1",kwei:"1000",Kwei:"1000",babbage:"1000",femtoether:"1000",mwei:"1000000",Mwei:"1000000",lovelace:"1000000",picoether:"1000000",gwei:"1000000000",Gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"};t.exports={unitMap:l,numberToString:n,getValueOfUnit:e,fromWei:o,toWei:h}},function(t,r){"use strict";function i(t){var r=t.length;if(r%4>0)throw Error("Invalid string. Length must be a multiple of 4");return"="===t[r-2]?2:"="===t[r-1]?1:0}function e(t){return 3*t.length/4-i(t)}function n(t){var r,e,n,o,h,s,u=t.length;h=i(t),s=new f(3*u/4-h),n=h>0?u-4:u;var l=0;for(r=0,e=0;n>r;r+=4,e+=3)o=a[t.charCodeAt(r)]<<18|a[t.charCodeAt(r+1)]<<12|a[t.charCodeAt(r+2)]<<6|a[t.charCodeAt(r+3)],s[l++]=o>>16&255,s[l++]=o>>8&255,s[l++]=255&o;return 2===h?(o=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,s[l++]=255&o):1===h&&(o=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,s[l++]=o>>8&255,s[l++]=255&o),s}function o(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function h(t,r,i){for(var e,n=[],h=r;i>h;h+=3)e=(t[h]<<16)+(t[h+1]<<8)+t[h+2],n.push(o(e));return n.join("")}function s(t){for(var r,i=t.length,e=i%3,n="",o=[],s=16383,a=0,f=i-e;f>a;a+=s)o.push(h(t,a,a+s>f?f:a+s));return 1===e?(r=t[i-1],n+=u[r>>2],n+=u[r<<4&63],n+="=="):2===e&&(r=(t[i-2]<<8)+t[i-1],n+=u[r>>10],n+=u[r>>4&63],n+=u[r<<2&63],n+="="),o.push(n),o.join("")}r.byteLength=e,r.toByteArray=n,r.fromByteArray=s;for(var u=[],a=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",m=0,p=l.length;p>m;++m)u[m]=l[m],a[l.charCodeAt(m)]=m;a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,r){r.read=function(t,r,i,e,n){var o,h,s=8*n-e-1,u=(1<>1,f=-7,l=i?n-1:0,m=i?-1:1,p=t[r+l];for(l+=m,o=p&(1<<-f)-1,p>>=-f,f+=s;f>0;o=256*o+t[r+l],l+=m,f-=8);for(h=o&(1<<-f)-1,o>>=-f,f+=e;f>0;h=256*h+t[r+l],l+=m,f-=8);if(0===o)o=1-a;else{if(o===u)return h?NaN:(p?-1:1)*(1/0);h+=Math.pow(2,e),o-=a}return(p?-1:1)*h*Math.pow(2,o-e)},r.write=function(t,r,i,e,n,o){var h,s,u,a=8*o-n-1,f=(1<>1,m=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,p=e?0:o-1,d=e?1:-1,c=0>r||0===r&&0>1/r?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(s=isNaN(r)?1:0,h=f):(h=Math.floor(Math.log(r)/Math.LN2),r*(u=Math.pow(2,-h))<1&&(h--,u*=2),r+=1>h+l?m*Math.pow(2,1-l):m/u,2>r*u||(h++,u/=2),f>h+l?1>h+l?(s=r*Math.pow(2,l-1)*Math.pow(2,n),h=0):(s=(r*u-1)*Math.pow(2,n),h+=l):(s=0,h=f));n>=8;t[i+p]=255&s,p+=d,s/=256,n-=8);for(h=h<0;t[i+p]=255&h,p+=d,h/=256,a-=8);t[i+p-d]|=128*c}},function(t,r){t.exports=function(t){if("string"!=typeof t)throw Error("[is-hex-prefixed] value must be type 'string', is currently type "+typeof t+", while checking isHexPrefixed.");return"0x"===t.slice(0,2)}},function(t,r){var i={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==i.call(t)}},function(t,r,i){var e=i(6);t.exports=function(t){return"string"!=typeof t?t:e(t)?t.slice(2):t}},function(t,r){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(i=window)}t.exports=i},function(t,r){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,configurable:!1,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,configurable:!1,get:function(){return t.i}}),t.webpackPolyfill=1),t}}])}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/ethjs-unit/internals/webpack/webpack.config.js b/truebit-implementation/node_modules/ethjs-unit/internals/webpack/webpack.config.js deleted file mode 100644 index dcdcf4a9..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/internals/webpack/webpack.config.js +++ /dev/null @@ -1,58 +0,0 @@ -var webpack = require('webpack'); // eslint-disable-line - -var env = process.env.NODE_ENV; // eslint-disable-line -var filename = 'ethjs-unit'; // eslint-disable-line -var library = 'ethUnit'; // eslint-disable-line -var config = { // eslint-disable-line - module: { - loaders: [ - { - test: /\.js$/, - loaders: ['babel-loader'], - exclude: /node_modules/, - }, - { - test: /\.json$/, - loader: 'json', - }, - ], - }, - devtool: 'cheap-module-source-map', - output: { - path: 'dist', - filename: filename + '.js', // eslint-disable-line - library: library, // eslint-disable-line - libraryTarget: 'umd', - umdNamedDefine: true, - }, - plugins: [ - new webpack.BannerPlugin({ banner: ' /* eslint-disable */ ', raw: true, entryOnly: true }), - new webpack.optimize.OccurrenceOrderPlugin(), - new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify(env), - }), - ], -}; - -if (env === 'production') { - config.output.filename = filename + '.min.js'; // eslint-disable-line - config.plugins - .push(new webpack.optimize.UglifyJsPlugin({ - compressor: { - pure_getters: true, - unsafe: true, - unsafe_comps: true, - warnings: false, - screw_ie8: false, - }, - mangle: { - screw_ie8: false, - }, - output: { - screw_ie8: false, - }, - })); - config.plugins.push(new webpack.optimize.DedupePlugin()); -} - -module.exports = config; diff --git a/truebit-implementation/node_modules/ethjs-unit/lib/index.js b/truebit-implementation/node_modules/ethjs-unit/lib/index.js deleted file mode 100644 index 63a661d3..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/lib/index.js +++ /dev/null @@ -1,168 +0,0 @@ -'use strict'; - -var BN = require('bn.js'); -var numberToBN = require('number-to-bn'); - -var zero = new BN(0); -var negative1 = new BN(-1); - -// complete ethereum unit map -var unitMap = { - 'noether': '0', // eslint-disable-line - 'wei': '1', // eslint-disable-line - 'kwei': '1000', // eslint-disable-line - 'Kwei': '1000', // eslint-disable-line - 'babbage': '1000', // eslint-disable-line - 'femtoether': '1000', // eslint-disable-line - 'mwei': '1000000', // eslint-disable-line - 'Mwei': '1000000', // eslint-disable-line - 'lovelace': '1000000', // eslint-disable-line - 'picoether': '1000000', // eslint-disable-line - 'gwei': '1000000000', // eslint-disable-line - 'Gwei': '1000000000', // eslint-disable-line - 'shannon': '1000000000', // eslint-disable-line - 'nanoether': '1000000000', // eslint-disable-line - 'nano': '1000000000', // eslint-disable-line - 'szabo': '1000000000000', // eslint-disable-line - 'microether': '1000000000000', // eslint-disable-line - 'micro': '1000000000000', // eslint-disable-line - 'finney': '1000000000000000', // eslint-disable-line - 'milliether': '1000000000000000', // eslint-disable-line - 'milli': '1000000000000000', // eslint-disable-line - 'ether': '1000000000000000000', // eslint-disable-line - 'kether': '1000000000000000000000', // eslint-disable-line - 'grand': '1000000000000000000000', // eslint-disable-line - 'mether': '1000000000000000000000000', // eslint-disable-line - 'gether': '1000000000000000000000000000', // eslint-disable-line - 'tether': '1000000000000000000000000000000' }; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -function getValueOfUnit(unitInput) { - var unit = unitInput ? unitInput.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; // eslint-disable-line - - if (typeof unitValue !== 'string') { - throw new Error('[ethjs-unit] the unit provided ' + unitInput + ' doesn\'t exists, please use the one of the following units ' + JSON.stringify(unitMap, null, 2)); - } - - return new BN(unitValue, 10); -} - -function numberToString(arg) { - if (typeof arg === 'string') { - if (!arg.match(/^-?[0-9.]+$/)) { - throw new Error('while converting number to string, invalid number value \'' + arg + '\', should be a number matching (^-?[0-9.]+).'); - } - return arg; - } else if (typeof arg === 'number') { - return String(arg); - } else if (typeof arg === 'object' && arg.toString && (arg.toTwos || arg.dividedToIntegerBy)) { - if (arg.toPrecision) { - return String(arg.toPrecision()); - } else { - // eslint-disable-line - return arg.toString(10); - } - } - throw new Error('while converting number to string, invalid number value \'' + arg + '\' type ' + typeof arg + '.'); -} - -function fromWei(weiInput, unit, optionsInput) { - var wei = numberToBN(weiInput); // eslint-disable-line - var negative = wei.lt(zero); // eslint-disable-line - var base = getValueOfUnit(unit); - var baseLength = unitMap[unit].length - 1 || 1; - var options = optionsInput || {}; - - if (negative) { - wei = wei.mul(negative1); - } - - var fraction = wei.mod(base).toString(10); // eslint-disable-line - - while (fraction.length < baseLength) { - fraction = '0' + fraction; - } - - if (!options.pad) { - fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1]; - } - - var whole = wei.div(base).toString(10); // eslint-disable-line - - if (options.commify) { - whole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ','); - } - - var value = '' + whole + (fraction == '0' ? '' : '.' + fraction); // eslint-disable-line - - if (negative) { - value = '-' + value; - } - - return value; -} - -function toWei(etherInput, unit) { - var ether = numberToString(etherInput); // eslint-disable-line - var base = getValueOfUnit(unit); - var baseLength = unitMap[unit].length - 1 || 1; - - // Is it negative? - var negative = ether.substring(0, 1) === '-'; // eslint-disable-line - if (negative) { - ether = ether.substring(1); - } - - if (ether === '.') { - throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, invalid value'); - } - - // Split it into a whole and fractional part - var comps = ether.split('.'); // eslint-disable-line - if (comps.length > 2) { - throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal points'); - } - - var whole = comps[0], - fraction = comps[1]; // eslint-disable-line - - if (!whole) { - whole = '0'; - } - if (!fraction) { - fraction = '0'; - } - if (fraction.length > baseLength) { - throw new Error('[ethjs-unit] while converting number ' + etherInput + ' to wei, too many decimal places'); - } - - while (fraction.length < baseLength) { - fraction += '0'; - } - - whole = new BN(whole); - fraction = new BN(fraction); - var wei = whole.mul(base).add(fraction); // eslint-disable-line - - if (negative) { - wei = wei.mul(negative1); - } - - return new BN(wei.toString(10), 10); -} - -module.exports = { - unitMap: unitMap, - numberToString: numberToString, - getValueOfUnit: getValueOfUnit, - fromWei: fromWei, - toWei: toWei -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/ethjs-unit/lib/index.txt b/truebit-implementation/node_modules/ethjs-unit/lib/index.txt deleted file mode 100644 index 005f3ba6..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/lib/index.txt +++ /dev/null @@ -1,146 +0,0 @@ -const BigNumber = require('bignumber.js'); - -// complete ethereum unit map -const unitMap = { - 'noether': '0', // eslint-disable-line - 'wei': '1', // eslint-disable-line - 'kwei': '1000', // eslint-disable-line - 'Kwei': '1000', // eslint-disable-line - 'babbage': '1000', // eslint-disable-line - 'femtoether': '1000', // eslint-disable-line - 'mwei': '1000000', // eslint-disable-line - 'Mwei': '1000000', // eslint-disable-line - 'lovelace': '1000000', // eslint-disable-line - 'picoether': '1000000', // eslint-disable-line - 'gwei': '1000000000', // eslint-disable-line - 'Gwei': '1000000000', // eslint-disable-line - 'shannon': '1000000000', // eslint-disable-line - 'nanoether': '1000000000', // eslint-disable-line - 'nano': '1000000000', // eslint-disable-line - 'szabo': '1000000000000', // eslint-disable-line - 'microether': '1000000000000', // eslint-disable-line - 'micro': '1000000000000', // eslint-disable-line - 'finney': '1000000000000000', // eslint-disable-line - 'milliether': '1000000000000000', // eslint-disable-line - 'milli': '1000000000000000', // eslint-disable-line - 'ether': '1000000000000000000', // eslint-disable-line - 'kether': '1000000000000000000000', // eslint-disable-line - 'grand': '1000000000000000000000', // eslint-disable-line - 'mether': '1000000000000000000000000', // eslint-disable-line - 'gether': '1000000000000000000000000000', // eslint-disable-line - 'tether': '1000000000000000000000000000000', // eslint-disable-line -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -function getValueOfUnit(unitInput) { - const unit = unitInput ? unitInput.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; // eslint-disable-line - - if (typeof unitValue !== 'string') { - throw new Error(`This unit doesn't exists, please use the one of the following units ${JSON.stringify(unitMap, null, 2)}`); - } - - return new BigNumber(unitValue, 10); -} - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -function fromWei(number, unit) { - const returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); - - return returnValue; -} - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BigNumber} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {Object} When given a BigNumber object it returns one as well, otherwise a number -*/ -function toWei(number, unit) { - const returnValue = toBigNumber(number).times(getValueOfUnit(unit)); - - return returnValue; -} - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} - * @return {Boolean} - */ -function isBigNumber(object) { - return object instanceof BigNumber || (object && object.constructor && object.constructor.name === 'BigNumber'); -} - -/** - * Takes an input and transforms it into an bignumber - * - * @method toBigNumber - * @param {Number|String|BigNumber} a number, string, HEX string or BigNumber - * @return {BigNumber} BigNumber -*/ -function toBigNumber(numberInput) { - const number = numberInput || 0; - - if (isBigNumber(number)) { - return number; - } - - if (typeof number === 'string' && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) { - return new BigNumber(number.replace('0x', ''), 16); - } - - return new BigNumber(number.toString(10), 10); -} - -module.exports = { - unitMap, - isBigNumber, - toBigNumber, - toWei, - fromWei, -}; diff --git a/truebit-implementation/node_modules/ethjs-unit/lib/tests/test.index.js b/truebit-implementation/node_modules/ethjs-unit/lib/tests/test.index.js deleted file mode 100644 index b3f0d41d..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/lib/tests/test.index.js +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; - -var units = require('../index.js'); // eslint-disable-line -var BigNumber = require('bn.js'); // eslint-disable-line -var ActualBigNumber = require('bignumber.js'); -var Web3 = require('web3'); // eslint-disable-line -var web3 = new Web3(); // eslint-disable-line -var assert = require('chai').assert; // eslint-disable-line -var totalTypes = Object.keys(units.unitMap).length; - -function testRandomValueAgainstWeb3ToWei(negative) { - var stringTestValue = '' + (negative ? '-' : '') + String(Math.floor(Math.random() * 100000000000000000 + 1)); - var randomunitsType = Object.keys(units.unitMap)[Math.floor(Math.random() * (totalTypes - 1) + 1)]; - var unitsValue = units.toWei(stringTestValue, randomunitsType); - var web3Value = new BigNumber(web3.toWei(stringTestValue, randomunitsType)); - - // it(`toWei should work like web3 val ${unitsValue.toString(10)} should equal ${web3Value.toString(10)}`, () => { - assert.deepEqual(unitsValue, web3Value); - // }); -} - -function testRandomValueAgainstWeb3FromWei(negative) { - var stringTestValue = '' + (negative ? '-' : '') + String(Math.floor(Math.random() * 100000000000000000 + 1)); - var randomunitsType = Object.keys(units.unitMap)[Math.floor(Math.random() * (totalTypes - 1) + 1)]; - var unitsValue = units.fromWei(stringTestValue, randomunitsType); - var web3Value = web3.fromWei(stringTestValue, randomunitsType); - - // it(`fromWei should work like web3 rounded val ${unitsValue.substr(0, web3Value.length - 1)} should equal ${web3Value.substr(0, web3Value.length - 1)} for unit type ${randomunitsType}`, () => { - assert.deepEqual(unitsValue.substr(0, web3Value.length - 1), web3Value.substr(0, web3Value.length - 1)); - // }); -} - -describe('getValueOfUnit', function () { - it('should throw when undefined or not string', function () { - function invalidFromWei() { - units.fromWei(1000000000000000000, 'something'); - } - assert.throws(invalidFromWei, Error); - }); -}); - -describe('toWei', function () { - it('should handle edge cases', function () { - assert.equal(units.toWei(0, 'wei').toString(10), '0'); - assert.equal(units.toWei('0.0', 'wei').toString(10), '0'); - assert.equal(units.toWei('.3', 'ether').toString(10), '300000000000000000'); - assert.throws(function () { - return units.toWei('.', 'wei'); - }, Error); - assert.throws(function () { - return units.toWei('1.243842387924387924897423897423', 'ether'); - }, Error); - assert.throws(function () { - return units.toWei('8723.98234.98234', 'ether'); - }, Error); - }); - - it('should return the correct value', function () { - assert.equal(units.toWei(1, 'wei').toString(10), '1'); - assert.equal(units.toWei(1, 'kwei').toString(10), '1000'); - assert.equal(units.toWei(1, 'Kwei').toString(10), '1000'); - assert.equal(units.toWei(1, 'babbage').toString(10), '1000'); - assert.equal(units.toWei(1, 'mwei').toString(10), '1000000'); - assert.equal(units.toWei(1, 'Mwei').toString(10), '1000000'); - assert.equal(units.toWei(1, 'lovelace').toString(10), '1000000'); - assert.equal(units.toWei(1, 'gwei').toString(10), '1000000000'); - assert.equal(units.toWei(1, 'Gwei').toString(10), '1000000000'); - assert.equal(units.toWei(1, 'shannon').toString(10), '1000000000'); - assert.equal(units.toWei(1, 'szabo').toString(10), '1000000000000'); - assert.equal(units.toWei(1, 'finney').toString(10), '1000000000000000'); - assert.equal(units.toWei(1, 'ether').toString(10), '1000000000000000000'); - assert.equal(units.toWei(1, 'kether').toString(10), '1000000000000000000000'); - assert.equal(units.toWei(1, 'grand').toString(10), '1000000000000000000000'); - assert.equal(units.toWei(1, 'mether').toString(10), '1000000000000000000000000'); - assert.equal(units.toWei(1, 'gether').toString(10), '1000000000000000000000000000'); - assert.equal(units.toWei(1, 'tether').toString(10), '1000000000000000000000000000000'); - - assert.equal(units.toWei(1, 'kwei').toString(10), units.toWei(1, 'femtoether').toString(10)); - assert.equal(units.toWei(1, 'szabo').toString(10), units.toWei(1, 'microether').toString(10)); - assert.equal(units.toWei(1, 'finney').toString(10), units.toWei(1, 'milliether').toString(10)); - assert.equal(units.toWei(1, 'milli').toString(10), units.toWei(1, 'milliether').toString(10)); - assert.equal(units.toWei(1, 'milli').toString(10), units.toWei(1000, 'micro').toString(10)); - - assert.throws(function () { - units.toWei(1, 'wei1'); - }, Error); - }); -}); - -describe('numberToString', function () { - it('should handle edge cases', function () { - // assert.throws(() => units.numberToString(null), Error); - assert.throws(function () { - return units.numberToString(undefined); - }, Error); - // assert.throws(() => units.numberToString(NaN), Error); - assert.throws(function () { - return units.numberToString({}); - }, Error); - assert.throws(function () { - return units.numberToString([]); - }, Error); - assert.throws(function () { - return units.numberToString('-1sdffsdsdf'); - }, Error); - assert.throws(function () { - return units.numberToString('-0..-...9'); - }, Error); - assert.throws(function () { - return units.numberToString('fds'); - }, Error); - assert.throws(function () { - return units.numberToString(''); - }, Error); - assert.throws(function () { - return units.numberToString('#'); - }, Error); - assert.equal(units.numberToString(55), '55'); - assert.equal(units.numberToString(1), '1'); - assert.equal(units.numberToString(-1), '-1'); - assert.equal(units.numberToString(0), '0'); - assert.equal(units.numberToString(-0), '0'); - assert.equal(units.numberToString(new ActualBigNumber(10.1)), '10.1'); - assert.equal(units.numberToString(new ActualBigNumber(10000)), '10000'); - assert.equal(units.numberToString(new BigNumber(10000)), '10000'); - assert.equal(units.numberToString(new BigNumber('-1')), '-1'); - assert.equal(units.numberToString(new BigNumber('1')), '1'); - assert.equal(units.numberToString(new BigNumber(0)), '0'); - }); -}); - -describe('fromWei', function () { - it('should handle options', function () { - assert.equal(units.fromWei(10000000, 'wei', { commify: true }), '10,000,000'); - }); - - it('should return the correct value', function () { - assert.equal(units.fromWei(1000000000000000000, 'wei'), '1000000000000000000'); - assert.equal(units.fromWei(1000000000000000000, 'kwei'), '1000000000000000'); - assert.equal(units.fromWei(1000000000000000000, 'mwei'), '1000000000000'); - assert.equal(units.fromWei(1000000000000000000, 'gwei'), '1000000000'); - assert.equal(units.fromWei(1000000000000000000, 'szabo'), '1000000'); - assert.equal(units.fromWei(1000000000000000000, 'finney'), '1000'); - assert.equal(units.fromWei(1000000000000000000, 'ether'), '1'); - assert.equal(units.fromWei(1000000000000000000, 'kether'), '0.001'); - assert.equal(units.fromWei(1000000000000000000, 'grand'), '0.001'); - assert.equal(units.fromWei(1000000000000000000, 'mether'), '0.000001'); - assert.equal(units.fromWei(1000000000000000000, 'gether'), '0.000000001'); - assert.equal(units.fromWei(1000000000000000000, 'tether'), '0.000000000001'); - }); -}); - -describe('units', function () { - describe('normal functionality', function () { - it('should be the same as web3', function () { - for (var i = 0; i < 15000; i++) { - // eslint-disable-line - testRandomValueAgainstWeb3ToWei(false); - testRandomValueAgainstWeb3ToWei(true); - testRandomValueAgainstWeb3FromWei(false); - testRandomValueAgainstWeb3FromWei(true); - } - }); - }); -}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/.npmignore b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/.npmignore deleted file mode 100644 index 6d1eebbd..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -benchmarks/ -coverage/ -node_modules/ -npm-debug.log -1.js -logo.png diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/.travis.yml b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/.travis.yml deleted file mode 100644 index 936b7b78..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -node_js: - - "0.10" - - "0.12" - - "4" - - "5" -env: - matrix: - - TEST_SUITE=unit -matrix: - include: - - node_js: "4" - env: TEST_SUITE=lint -script: npm run $TEST_SUITE diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/README.md b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/README.md deleted file mode 100644 index fee65baa..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# bn.js - -> BigNum in pure javascript - -[![Build Status](https://secure.travis-ci.org/indutny/bn.js.png)](http://travis-ci.org/indutny/bn.js) - -## Install -`npm install --save bn.js` - -## Usage - -```js -const BN = require('bn.js'); - -var a = new BN('dead', 16); -var b = new BN('101010', 2); - -var res = a.add(b); -console.log(res.toString(10)); // 57047 -``` - -**Note**: decimals are not supported in this library. - -## Notation - -### Prefixes - -There are several prefixes to instructions that affect the way the work. Here -is the list of them in the order of appearance in the function name: - -* `i` - perform operation in-place, storing the result in the host object (on - which the method was invoked). Might be used to avoid number allocation costs -* `u` - unsigned, ignore the sign of operands when performing operation, or - always return positive value. Second case applies to reduction operations - like `mod()`. In such cases if the result will be negative - modulo will be - added to the result to make it positive - -### Postfixes - -The only available postfix at the moment is: - -* `n` - which means that the argument of the function must be a plain JavaScript - number - -### Examples - -* `a.iadd(b)` - perform addition on `a` and `b`, storing the result in `a` -* `a.pmod(b)` - reduce `a` modulo `b`, returning positive value -* `a.iushln(13)` - shift bits of `a` left by 13 - -## Instructions - -Prefixes/postfixes are put in parens at the of the line. `endian` - could be -either `le` (little-endian) or `be` (big-endian). - -### Utilities - -* `a.clone()` - clone number -* `a.toString(base, length)` - convert to base-string and pad with zeroes -* `a.toNumber()` - convert to Javascript Number (limited to 53 bits) -* `a.toJSON()` - convert to JSON compatible hex string (alias of `toString(16)`) -* `a.toArray(endian, length)` - convert to byte `Array`, and optionally zero - pad to length, throwing if already exceeding -* `a.toArrayLike(type, endian, length)` - convert to an instance of `type`, - which must behave like an `Array` -* `a.toBuffer(endian, length)` - convert to Node.js Buffer (if available) -* `a.bitLength()` - get number of bits occupied -* `a.zeroBits()` - return number of less-significant consequent zero bits - (example: `1010000` has 4 zero bits) -* `a.byteLength()` - return number of bytes occupied -* `a.isNeg()` - true if the number is negative -* `a.isEven()` - no comments -* `a.isOdd()` - no comments -* `a.isZero()` - no comments -* `a.cmp(b)` - compare numbers and return `-1` (a `<` b), `0` (a `==` b), or `1` (a `>` b) - depending on the comparison result (`ucmp`, `cmpn`) -* `a.lt(b)` - `a` less than `b` (`n`) -* `a.lte(b)` - `a` less than or equals `b` (`n`) -* `a.gt(b)` - `a` greater than `b` (`n`) -* `a.gte(b)` - `a` greater than or equals `b` (`n`) -* `a.eq(b)` - `a` equals `b` (`n`) -* `a.toTwos(width)` - convert to two's complement representation, where `width` is bit width -* `a.fromTwos(width)` - convert from two's complement representation, where `width` is the bit width -* `a.isBN(object)` - returns true if the supplied `object` is a BN.js instance - -### Arithmetics - -* `a.neg()` - negate sign (`i`) -* `a.abs()` - absolute value (`i`) -* `a.add(b)` - addition (`i`, `n`, `in`) -* `a.sub(b)` - subtraction (`i`, `n`, `in`) -* `a.mul(b)` - multiply (`i`, `n`, `in`) -* `a.sqr()` - square (`i`) -* `a.pow(b)` - raise `a` to the power of `b` -* `a.div(b)` - divide (`divn`, `idivn`) -* `a.mod(b)` - reduct (`u`, `n`) (but no `umodn`) -* `a.divRound(b)` - rounded division - -### Bit operations - -* `a.or(b)` - or (`i`, `u`, `iu`) -* `a.and(b)` - and (`i`, `u`, `iu`, `andln`) (NOTE: `andln` is going to be replaced - with `andn` in future) -* `a.xor(b)` - xor (`i`, `u`, `iu`) -* `a.setn(b)` - set specified bit to `1` -* `a.shln(b)` - shift left (`i`, `u`, `iu`) -* `a.shrn(b)` - shift right (`i`, `u`, `iu`) -* `a.testn(b)` - test if specified bit is set -* `a.maskn(b)` - clear bits with indexes higher or equal to `b` (`i`) -* `a.bincn(b)` - add `1 << b` to the number -* `a.notn(w)` - not (for the width specified by `w`) (`i`) - -### Reduction - -* `a.gcd(b)` - GCD -* `a.egcd(b)` - Extended GCD results (`{ a: ..., b: ..., gcd: ... }`) -* `a.invm(b)` - inverse `a` modulo `b` - -## Fast reduction - -When doing lots of reductions using the same modulo, it might be beneficial to -use some tricks: like [Montgomery multiplication][0], or using special algorithm -for [Mersenne Prime][1]. - -### Reduction context - -To enable this tricks one should create a reduction context: - -```js -var red = BN.red(num); -``` -where `num` is just a BN instance. - -Or: - -```js -var red = BN.red(primeName); -``` - -Where `primeName` is either of these [Mersenne Primes][1]: - -* `'k256'` -* `'p224'` -* `'p192'` -* `'p25519'` - -Or: - -```js -var red = BN.mont(num); -``` - -To reduce numbers with [Montgomery trick][1]. `.mont()` is generally faster than -`.red(num)`, but slower than `BN.red(primeName)`. - -### Converting numbers - -Before performing anything in reduction context - numbers should be converted -to it. Usually, this means that one should: - -* Convert inputs to reducted ones -* Operate on them in reduction context -* Convert outputs back from the reduction context - -Here is how one may convert numbers to `red`: - -```js -var redA = a.toRed(red); -``` -Where `red` is a reduction context created using instructions above - -Here is how to convert them back: - -```js -var a = redA.fromRed(); -``` - -### Red instructions - -Most of the instructions from the very start of this readme have their -counterparts in red context: - -* `a.redAdd(b)`, `a.redIAdd(b)` -* `a.redSub(b)`, `a.redISub(b)` -* `a.redShl(num)` -* `a.redMul(b)`, `a.redIMul(b)` -* `a.redSqr()`, `a.redISqr()` -* `a.redSqrt()` - square root modulo reduction context's prime -* `a.redInvm()` - modular inverse of the number -* `a.redNeg()` -* `a.redPow(b)` - modular exponentiation - -## LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2015. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. - -[0]: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication -[1]: https://en.wikipedia.org/wiki/Mersenne_prime diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/lib/bn.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/lib/bn.js deleted file mode 100644 index 29a4c51a..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/lib/bn.js +++ /dev/null @@ -1,3427 +0,0 @@ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buf' + 'fer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/package.json b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/package.json deleted file mode 100644 index dcb5e358..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "bn.js@4.11.6", - "_id": "bn.js@4.11.6", - "_inBundle": false, - "_integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "_location": "/ethjs-unit/bn.js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "bn.js@4.11.6", - "name": "bn.js", - "escapedName": "bn.js", - "rawSpec": "4.11.6", - "saveSpec": null, - "fetchSpec": "4.11.6" - }, - "_requiredBy": [ - "/ethjs-unit" - ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "_shasum": "53344adb14617a13f6e8dd2ce28905d1c0ba3215", - "_spec": "bn.js@4.11.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ethjs-unit", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/bn.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Big number implementation in pure javascript", - "devDependencies": { - "istanbul": "^0.3.5", - "mocha": "^2.1.0", - "semistandard": "^7.0.4" - }, - "homepage": "https://github.com/indutny/bn.js", - "keywords": [ - "BN", - "BigNum", - "Big number", - "Modulo", - "Montgomery" - ], - "license": "MIT", - "main": "lib/bn.js", - "name": "bn.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/bn.js.git" - }, - "scripts": { - "lint": "semistandard", - "test": "npm run lint && npm run unit", - "unit": "mocha --reporter=spec test/*-test.js" - }, - "version": "4.11.6" -} diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/arithmetic-test.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/arithmetic-test.js deleted file mode 100644 index c3a0d7d5..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/arithmetic-test.js +++ /dev/null @@ -1,635 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; -var fixtures = require('./fixtures'); - -describe('BN.js/Arithmetic', function () { - describe('.add()', function () { - it('should add numbers', function () { - assert.equal(new BN(14).add(new BN(26)).toString(16), '28'); - var k = new BN(0x1234); - var r = k; - - for (var i = 0; i < 257; i++) { - r = r.add(k); - } - - assert.equal(r.toString(16), '125868'); - }); - - it('should handle carry properly (in-place)', function () { - var k = new BN('abcdefabcdefabcdef', 16); - var r = new BN('deadbeef', 16); - - for (var i = 0; i < 257; i++) { - r.iadd(k); - } - - assert.equal(r.toString(16), 'ac79bd9b79be7a277bde'); - }); - - it('should properly do positive + negative', function () { - var a = new BN('abcd', 16); - var b = new BN('-abce', 16); - - assert.equal(a.iadd(b).toString(16), '-1'); - - a = new BN('abcd', 16); - b = new BN('-abce', 16); - - assert.equal(a.add(b).toString(16), '-1'); - assert.equal(b.add(a).toString(16), '-1'); - }); - }); - - describe('.iaddn()', function () { - it('should allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should add negative number', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(-200); - - assert.equal(a.toString(), '-300'); - }); - - it('should allow neg + pos with big number', function () { - var a = new BN('-1000000000', 10); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.toString(), '-999999800'); - }); - - it('should carry limb', function () { - var a = new BN('3ffffff', 16); - - assert.equal(a.iaddn(1).toString(16), '4000000'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).iaddn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.sub()', function () { - it('should subtract small numbers', function () { - assert.equal(new BN(26).sub(new BN(14)).toString(16), 'c'); - assert.equal(new BN(14).sub(new BN(26)).toString(16), '-c'); - assert.equal(new BN(26).sub(new BN(26)).toString(16), '0'); - assert.equal(new BN(-26).sub(new BN(26)).toString(16), '-34'); - }); - - var a = new BN( - '31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384' + - 'a7d8daef41395491e2', - 16); - var b = new BN( - '6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000', - 16); - var r = new BN( - '31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a67' + - '76281f34583ddb91e2', - 16); - - it('should subtract big numbers', function () { - assert.equal(a.sub(b).cmp(r), 0); - }); - - it('should subtract numbers in place', function () { - assert.equal(b.clone().isub(a).neg().cmp(r), 0); - }); - - it('should subtract with carry', function () { - // Carry and copy - var a = new BN('12345', 16); - var b = new BN('1000000000000', 16); - assert.equal(a.isub(b).toString(16), '-fffffffedcbb'); - - a = new BN('12345', 16); - b = new BN('1000000000000', 16); - assert.equal(b.isub(a).toString(16), 'fffffffedcbb'); - }); - }); - - describe('.isubn()', function () { - it('should subtract negative number', function () { - var r = new BN( - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16); - assert.equal(r.isubn(-1).toString(16), - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c'); - }); - - it('should work for positive numbers', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(200); - assert.equal(a.negative, 1); - assert.equal(a.toString(), '-300'); - }); - - it('should not allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(-200); - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should change sign on small numbers at 0', function () { - var a = new BN(0).subn(2); - assert.equal(a.toString(), '-2'); - }); - - it('should change sign on small numbers at 1', function () { - var a = new BN(1).subn(2); - assert.equal(a.toString(), '-1'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).isubn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - function testMethod (name, mul) { - describe(name, function () { - it('should multiply numbers of different signs', function () { - var offsets = [ - 1, // smallMulTo - 250, // comb10MulTo - 1000, // bigMulTo - 15000 // jumboMulTo - ]; - - for (var i = 0; i < offsets.length; ++i) { - var x = new BN(1).ishln(offsets[i]); - - assert.equal(mul(x, x).isNeg(), false); - assert.equal(mul(x, x.neg()).isNeg(), true); - assert.equal(mul(x.neg(), x).isNeg(), true); - assert.equal(mul(x.neg(), x.neg()).isNeg(), false); - } - }); - - it('should multiply with carry', function () { - var n = new BN(0x1001); - var r = n; - - for (var i = 0; i < 4; i++) { - r = mul(r, n); - } - - assert.equal(r.toString(16), '100500a00a005001'); - }); - - it('should correctly multiply big numbers', function () { - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal( - mul(n, n).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40'); - assert.equal( - mul(mul(n, n), n).toString(16), - '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b' + - '46e0cf2cb11667f795d5569482640fe5f628939467a01a612b02350' + - '0d0161e9730279a7561043af6197798e41b7432458463e64fa81158' + - '907322dc330562697d0d600'); - }); - - it('should multiply neg number on 0', function () { - assert.equal( - mul(new BN('-100000000000'), new BN('3').div(new BN('4'))) - .toString(16), - '0' - ); - }); - - it('should regress mul big numbers', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - assert.equal(mul(q, q).toString(16), qs); - }); - }); - } - - testMethod('.mul()', function (x, y) { - return BN.prototype.mul.apply(x, [ y ]); - }); - - testMethod('.mulf()', function (x, y) { - return BN.prototype.mulf.apply(x, [ y ]); - }); - - describe('.imul()', function () { - it('should multiply numbers in-place', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('deadbeefa551edebabba8', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - - a = new BN('abcdef01234567890abcd214a25123f512361e6d236', 16); - b = new BN('deadbeefa551edebabba8121234fd21bac0341324dd', 16); - c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should multiply by 0', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('0', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should regress mul big numbers in-place', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - - assert.equal(q.isqr().toString(16), qs); - }); - }); - - describe('.muln()', function () { - it('should multiply number by small number', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('dead', 16); - var c = a.mul(b); - - assert.equal(a.muln(0xdead).toString(16), c.toString(16)); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).imuln(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.pow()', function () { - it('should raise number to the power', function () { - var a = new BN('ab', 16); - var b = new BN('13', 10); - var c = a.pow(b); - - assert.equal(c.toString(16), '15963da06977df51909c9ba5b'); - }); - }); - - describe('.div()', function () { - it('should divide small numbers (<=26 bits)', function () { - assert.equal(new BN('256').div(new BN(10)).toString(10), - '25'); - assert.equal(new BN('-256').div(new BN(10)).toString(10), - '-25'); - assert.equal(new BN('256').div(new BN(-10)).toString(10), - '-25'); - assert.equal(new BN('-256').div(new BN(-10)).toString(10), - '25'); - - assert.equal(new BN('10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('10').div(new BN(-256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(-256)).toString(10), - '0'); - }); - - it('should divide large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').div(new BN('611111124969028')) - .toString(10), '1'); - assert.equal(new BN('-1222222225255589').div(new BN('611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('1222222225255589').div(new BN('-611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('-1222222225255589').div(new BN('-611111124969028')) - .toString(10), '1'); - - assert.equal(new BN('611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - }); - - it('should divide numbers', function () { - assert.equal(new BN('69527932928').div(new BN('16974594')).toString(16), - 'fff'); - assert.equal(new BN('-69527932928').div(new BN('16974594')).toString(16), - '-fff'); - - var b = new BN( - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40', - 16); - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal(b.div(n).toString(16), n.toString(16)); - - assert.equal(new BN('1').div(new BN('-5')).toString(10), '0'); - }); - - it('should not fail on regression after moving to _wordDiv', function () { - // Regression after moving to word div - var p = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', - 16); - var a = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16); - var as = a.sqr(); - assert.equal( - as.div(p).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9'); - - p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.div(p).toString(16), - 'ffffffff00000002000000000000000000000001000000000000000000000001'); - }); - }); - - describe('.idivn()', function () { - it('should divide numbers in-place', function () { - assert.equal(new BN('10', 16).idivn(3).toString(16), '5'); - assert.equal(new BN('12', 16).idivn(3).toString(16), '6'); - assert.equal(new BN('10000000000000000').idivn(3).toString(10), - '3333333333333333'); - assert.equal( - new BN('100000000000000000000000000000').idivn(3).toString(10), - '33333333333333333333333333333'); - - var t = new BN(3); - assert.equal( - new BN('12345678901234567890123456', 16).idivn(3).toString(16), - new BN('12345678901234567890123456', 16).div(t).toString(16)); - }); - }); - - describe('.divRound()', function () { - it('should divide numbers with rounding', function () { - assert.equal(new BN(9).divRound(new BN(20)).toString(10), - '0'); - assert.equal(new BN(10).divRound(new BN(20)).toString(10), - '1'); - assert.equal(new BN(150).divRound(new BN(20)).toString(10), - '8'); - assert.equal(new BN(149).divRound(new BN(20)).toString(10), - '7'); - assert.equal(new BN(149).divRound(new BN(17)).toString(10), - '9'); - assert.equal(new BN(144).divRound(new BN(17)).toString(10), - '8'); - assert.equal(new BN(-144).divRound(new BN(17)).toString(10), - '-8'); - }); - - it('should return 1 on exact division', function () { - assert.equal(new BN(144).divRound(new BN(144)).toString(10), '1'); - }); - }); - - describe('.mod()', function () { - it('should modulo small numbers (<=26 bits)', function () { - assert.equal(new BN('256').mod(new BN(10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(10)).toString(10), - '-6'); - assert.equal(new BN('256').mod(new BN(-10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(-10)).toString(10), - '-6'); - - assert.equal(new BN('10').mod(new BN(256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(256)).toString(10), - '-10'); - assert.equal(new BN('10').mod(new BN(-256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(-256)).toString(10), - '-10'); - }); - - it('should modulo large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').mod(new BN('611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('611111124969028')) - .toString(10), '-611111100286561'); - assert.equal(new BN('1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '-611111100286561'); - - assert.equal(new BN('611111124969028').mod(new BN('1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('1222222225255589')) - .toString(10), '-611111124969028'); - assert.equal(new BN('611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '-611111124969028'); - }); - - it('should mod numbers', function () { - assert.equal(new BN('10').mod(new BN(256)).toString(16), - 'a'); - assert.equal(new BN('69527932928').mod(new BN('16974594')).toString(16), - '102f302'); - - // 178 = 10 * 17 + 8 - assert.equal(new BN(178).div(new BN(10)).toNumber(), 17); - assert.equal(new BN(178).mod(new BN(10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(10)).toNumber(), 8); - - // -178 = 10 * (-17) + (-8) - assert.equal(new BN(-178).div(new BN(10)).toNumber(), -17); - assert.equal(new BN(-178).mod(new BN(10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(10)).toNumber(), 2); - - // 178 = -10 * (-17) + 8 - assert.equal(new BN(178).div(new BN(-10)).toNumber(), -17); - assert.equal(new BN(178).mod(new BN(-10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(-10)).toNumber(), 8); - - // -178 = -10 * (17) + (-8) - assert.equal(new BN(-178).div(new BN(-10)).toNumber(), 17); - assert.equal(new BN(-178).mod(new BN(-10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(-10)).toNumber(), 2); - - // -4 = 1 * (-3) + -1 - assert.equal(new BN(-4).div(new BN(-3)).toNumber(), 1); - assert.equal(new BN(-4).mod(new BN(-3)).toNumber(), -1); - - // -4 = -1 * (3) + -1 - assert.equal(new BN(-4).mod(new BN(3)).toNumber(), -1); - // -4 = 1 * (-3) + (-1 + 3) - assert.equal(new BN(-4).umod(new BN(-3)).toNumber(), 2); - - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.mod(p).toString(16), - '0'); - }); - - it('should properly carry the sign inside division', function () { - var a = new BN('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex'); - var b = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe', - 'hex'); - - assert.equal(a.mul(b).mod(a).cmpn(0), 0); - }); - }); - - describe('.modn()', function () { - it('should act like .mod() on small numbers', function () { - assert.equal(new BN('10', 16).modn(256).toString(16), '10'); - assert.equal(new BN('100', 16).modn(256).toString(16), '0'); - assert.equal(new BN('1001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(257).toString(16), - new BN('100000000001', 16).mod(new BN(257)).toString(16)); - assert.equal(new BN('123456789012', 16).modn(3).toString(16), - new BN('123456789012', 16).mod(new BN(3)).toString(16)); - }); - }); - - describe('.abs()', function () { - it('should return absolute value', function () { - assert.equal(new BN(0x1001).abs().toString(), '4097'); - assert.equal(new BN(-0x1001).abs().toString(), '4097'); - assert.equal(new BN('ffffffff', 16).abs().toString(), '4294967295'); - }); - }); - - describe('.invm()', function () { - it('should invert relatively-prime numbers', function () { - var p = new BN(257); - var a = new BN(3); - var b = a.invm(p); - assert.equal(a.mul(b).mod(p).toString(16), '1'); - - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - a = new BN('deadbeef', 16); - b = a.invm(p192); - assert.equal(a.mul(b).mod(p192).toString(16), '1'); - - // Even base - var phi = new BN('872d9b030ba368706b68932cf07a0e0c', 16); - var e = new BN(65537); - var d = e.invm(phi); - assert.equal(e.mul(d).mod(phi).toString(16), '1'); - - // Even base (take #2) - a = new BN('5'); - b = new BN('6'); - var r = a.invm(b); - assert.equal(r.mul(a).mod(b).toString(16), '1'); - }); - }); - - describe('.gcd()', function () { - it('should return GCD', function () { - assert.equal(new BN(3).gcd(new BN(2)).toString(10), '1'); - assert.equal(new BN(18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(-12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(0)).toString(10), '18'); - assert.equal(new BN(0).gcd(new BN(-18)).toString(10), '18'); - assert.equal(new BN(2).gcd(new BN(0)).toString(10), '2'); - assert.equal(new BN(0).gcd(new BN(3)).toString(10), '3'); - assert.equal(new BN(0).gcd(new BN(0)).toString(10), '0'); - }); - }); - - describe('.egcd()', function () { - it('should return EGCD', function () { - assert.equal(new BN(3).egcd(new BN(2)).gcd.toString(10), '1'); - assert.equal(new BN(18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(-18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(0).egcd(new BN(12)).gcd.toString(10), '12'); - }); - it('should not allow 0 input', function () { - assert.throws(function () { - new BN(1).egcd(0); - }, /^Error: Assertion failed$/); - }); - it('should not allow negative input', function () { - assert.throws(function () { - new BN(1).egcd(-1); - }, /^Error: Assertion failed$/); - }); - }); - - describe('BN.max(a, b)', function () { - it('should return maximum', function () { - assert.equal(BN.max(new BN(3), new BN(2)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(3)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.max(new BN(2), new BN(-2)).toString(16), '2'); - }); - }); - - describe('BN.min(a, b)', function () { - it('should return minimum', function () { - assert.equal(BN.min(new BN(3), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(3)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(-2)).toString(16), '-2'); - }); - }); - - describe('BN.ineg', function () { - it('shouldn\'t change sign for zero', function () { - assert.equal(new BN(0).ineg().toString(10), '0'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/binary-test.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/binary-test.js deleted file mode 100644 index 37b6421d..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/binary-test.js +++ /dev/null @@ -1,233 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Binary', function () { - describe('.shl()', function () { - it('should shl numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').shln(45).toString(16), - '206060200000000000000'); - }); - - it('should ushl numbers', function () { - assert.equal(new BN('69527932928').ushln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').ushln(45).toString(16), - '206060200000000000000'); - }); - }); - - describe('.shr()', function () { - it('should shr numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').shrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').shrn(256).toString(16), - '0'); - }); - - it('should ushr numbers', function () { - assert.equal(new BN('69527932928').ushrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').ushrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').ushrn(256).toString(16), - '0'); - }); - }); - - describe('.bincn()', function () { - it('should increment bit', function () { - assert.equal(new BN(0).bincn(1).toString(16), '2'); - assert.equal(new BN(2).bincn(1).toString(16), '4'); - assert.equal(new BN(2).bincn(1).bincn(1).toString(16), - new BN(2).bincn(2).toString(16)); - assert.equal(new BN(0xffffff).bincn(1).toString(16), '1000001'); - assert.equal(new BN(2).bincn(63).toString(16), - '8000000000000002'); - }); - }); - - describe('.imaskn()', function () { - it('should mask bits in-place', function () { - assert.equal(new BN(0).imaskn(1).toString(16), '0'); - assert.equal(new BN(3).imaskn(1).toString(16), '1'); - assert.equal(new BN('123456789', 16).imaskn(4).toString(16), '9'); - assert.equal(new BN('123456789', 16).imaskn(16).toString(16), '6789'); - assert.equal(new BN('123456789', 16).imaskn(28).toString(16), '3456789'); - }); - - it('should not mask when number is bigger than length', function () { - assert.equal(new BN(0xe3).imaskn(56).toString(16), 'e3'); - assert.equal(new BN(0xe3).imaskn(26).toString(16), 'e3'); - }); - }); - - describe('.testn()', function () { - it('should support test specific bit', function () { - [ - 'ff', - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' - ].forEach(function (hex) { - var bn = new BN(hex, 16); - var bl = bn.bitLength(); - - for (var i = 0; i < bl; ++i) { - assert.equal(bn.testn(i), true); - } - - // test off the end - assert.equal(bn.testn(bl), false); - }); - - var xbits = '01111001010111001001000100011101' + - '11010011101100011000111001011101' + - '10010100111000000001011000111101' + - '01011111001111100100011110000010' + - '01011010100111010001010011000100' + - '01101001011110100001001111100110' + - '001110010111'; - - var x = new BN( - '23478905234580795234378912401239784125643978256123048348957342' - ); - for (var i = 0; i < x.bitLength(); ++i) { - assert.equal(x.testn(i), (xbits.charAt(i) === '1'), 'Failed @ bit ' + i); - } - }); - - it('should have short-cuts', function () { - var x = new BN('abcd', 16); - assert(!x.testn(128)); - }); - }); - - describe('.and()', function () { - it('should and numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .and(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .and(new BN('abcd', 16)).toString(16), - 'abcd'); - }); - }); - - describe('.iand()', function () { - it('should iand numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .iand(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - assert.equal(new BN('1000000000000000000000000000000000000001', 2) - .iand(new BN('1', 2)) - .toString(2), '1'); - assert.equal(new BN('1', 2) - .iand(new BN('1000000000000000000000000000000000000001', 2)) - .toString(2), '1'); - }); - }); - - describe('.or()', function () { - it('should or numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .or(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - }); - - it('should or numbers of different limb-length', function () { - assert.equal( - new BN('abcd00000000', 16) - .or(new BN('abcd', 16)).toString(16), - 'abcd0000abcd'); - }); - }); - - describe('.ior()', function () { - it('should ior numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .ior(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - assert.equal(new BN('1000000000000000000000000000000000000000', 2) - .ior(new BN('1', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - assert.equal(new BN('1', 2) - .ior(new BN('1000000000000000000000000000000000000000', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - }); - }); - - describe('.xor()', function () { - it('should xor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .xor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - }); - }); - - describe('.ixor()', function () { - it('should ixor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1', 2)) - .toString(2), '11001100110011001100110011001101'); - assert.equal(new BN('1', 2) - .ixor(new BN('11001100110011001100110011001100', 2)) - .toString(2), '11001100110011001100110011001101'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .xor(new BN('abcd', 16)).toString(16), - 'abcd00005432'); - }); - }); - - describe('.setn()', function () { - it('should allow single bits to be set', function () { - assert.equal(new BN(0).setn(2, true).toString(2), '100'); - assert.equal(new BN(0).setn(27, true).toString(2), - '1000000000000000000000000000'); - assert.equal(new BN(0).setn(63, true).toString(16), - new BN(1).iushln(63).toString(16)); - assert.equal(new BN('1000000000000000000000000001', 2).setn(27, false) - .toString(2), '1'); - assert.equal(new BN('101', 2).setn(2, false).toString(2), '1'); - }); - }); - - describe('.notn()', function () { - it('should allow bitwise negation', function () { - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(32).toString(2), - '11111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(32).toString(2), - '11111111111111111111111111000111'); - assert.equal(new BN('111000111', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111111000111'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/constructor-test.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/constructor-test.js deleted file mode 100644 index 11c7df08..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/constructor-test.js +++ /dev/null @@ -1,149 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Constructor', function () { - describe('with Smi input', function () { - it('should accept one limb number', function () { - assert.equal(new BN(12345).toString(16), '3039'); - }); - - it('should accept two-limb number', function () { - assert.equal(new BN(0x4123456).toString(16), '4123456'); - }); - - it('should accept 52 bits of precision', function () { - var num = Math.pow(2, 52); - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should accept max safe integer', function () { - var num = Math.pow(2, 53) - 1; - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should not accept an unsafe integer', function () { - var num = Math.pow(2, 53); - - assert.throws(function () { - return new BN(num, 10); - }, /^Error: Assertion failed$/); - }); - - it('should accept two-limb LE number', function () { - assert.equal(new BN(0x4123456, null, 'le').toString(16), '56341204'); - }); - }); - - describe('with String input', function () { - it('should accept base-16', function () { - assert.equal(new BN('1A6B765D8CDF', 16).toString(16), '1a6b765d8cdf'); - assert.equal(new BN('1A6B765D8CDF', 16).toString(), '29048849665247'); - }); - - it('should accept base-hex', function () { - assert.equal(new BN('FF', 'hex').toString(), '255'); - }); - - it('should accept base-16 with spaces', function () { - var num = 'a89c e5af8724 c0a23e0e 0ff77500'; - assert.equal(new BN(num, 16).toString(16), num.replace(/ /g, '')); - }); - - it('should accept long base-16', function () { - var num = '123456789abcdef123456789abcdef123456789abcdef'; - assert.equal(new BN(num, 16).toString(16), num); - }); - - it('should accept positive base-10', function () { - assert.equal(new BN('10654321').toString(), '10654321'); - assert.equal(new BN('29048849665247').toString(16), '1a6b765d8cdf'); - }); - - it('should accept negative base-10', function () { - assert.equal(new BN('-29048849665247').toString(16), '-1a6b765d8cdf'); - }); - - it('should accept long base-10', function () { - var num = '10000000000000000'; - assert.equal(new BN(num).toString(10), num); - }); - - it('should accept base-2', function () { - var base2 = '11111111111111111111111111111111111111111111111111111'; - assert.equal(new BN(base2, 2).toString(2), base2); - }); - - it('should accept base-36', function () { - var base36 = 'zzZzzzZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; - assert.equal(new BN(base36, 36).toString(36), base36.toLowerCase()); - }); - - it('should not overflow limbs during base-10', function () { - var num = '65820182292848241686198767302293' + - '20890292528855852623664389292032'; - assert(new BN(num).words[0] < 0x4000000); - }); - - it('should accept base-16 LE integer', function () { - assert.equal(new BN('1A6B765D8CDF', 16, 'le').toString(16), - 'df8c5d766b1a'); - }); - }); - - describe('with Array input', function () { - it('should not fail on empty array', function () { - assert.equal(new BN([]).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN([ 1, 2, 3 ]).toString(16), '10203'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toString(16), '1020304'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ]).toString(16), '102030405'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toString(16), - '102030405060708'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray().join(','), '1,2,3,4'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray().join(','), - '1,2,3,4,5,6,7,8'); - }); - - it('should import little endian', function () { - assert.equal(new BN([ 1, 2, 3 ], 10, 'le').toString(16), '30201'); - assert.equal(new BN([ 1, 2, 3, 4 ], 10, 'le').toString(16), '4030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 10, 'le').toString(16), - '504030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ], 'le').toString(16), - '807060504030201'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray('le').join(','), '4,3,2,1'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray('le').join(','), - '8,7,6,5,4,3,2,1'); - }); - - it('should import big endian with implicit base', function () { - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 'le').toString(16), '504030201'); - }); - }); - - // the Array code is able to handle Buffer - describe('with Buffer input', function () { - it('should not fail on empty Buffer', function () { - assert.equal(new BN(new Buffer(0)).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex')).toString(16), '10203'); - }); - - it('should import little endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex'), 'le').toString(16), '30201'); - }); - }); - - describe('with BN input', function () { - it('should clone BN', function () { - var num = new BN(12345); - assert.equal(new BN(num).toString(10), '12345'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/fixtures.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/fixtures.js deleted file mode 100644 index 39fd661d..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/fixtures.js +++ /dev/null @@ -1,264 +0,0 @@ -exports.dhGroups = { - p16: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199' + - 'ffffffffffffffff', - priv: '6d5923e6449122cbbcc1b96093e0b7e4fd3e469f58daddae' + - '53b49b20664f4132675df9ce98ae0cfdcac0f4181ccb643b' + - '625f98104dcf6f7d8e81961e2cab4b5014895260cb977c7d' + - '2f981f8532fb5da60b3676dfe57f293f05d525866053ac7e' + - '65abfd19241146e92e64f309a97ef3b529af4d6189fa416c' + - '9e1a816c3bdf88e5edf48fbd8233ef9038bb46faa95122c0' + - '5a426be72039639cd2d53d37254b3d258960dcb33c255ede' + - '20e9d7b4b123c8b4f4b986f53cdd510d042166f7dd7dca98' + - '7c39ab36381ba30a5fdd027eb6128d2ef8e5802a2194d422' + - 'b05fe6e1cb4817789b923d8636c1ec4b7601c90da3ddc178' + - '52f59217ae070d87f2e75cbfb6ff92430ad26a71c8373452' + - 'ae1cc5c93350e2d7b87e0acfeba401aaf518580937bf0b6c' + - '341f8c49165a47e49ce50853989d07171c00f43dcddddf72' + - '94fb9c3f4e1124e98ef656b797ef48974ddcd43a21fa06d0' + - '565ae8ce494747ce9e0ea0166e76eb45279e5c6471db7df8' + - 'cc88764be29666de9c545e72da36da2f7a352fb17bdeb982' + - 'a6dc0193ec4bf00b2e533efd6cd4d46e6fb237b775615576' + - 'dd6c7c7bbc087a25e6909d1ebc6e5b38e5c8472c0fc429c6' + - 'f17da1838cbcd9bbef57c5b5522fd6053e62ba21fe97c826' + - 'd3889d0cc17e5fa00b54d8d9f0f46fb523698af965950f4b' + - '941369e180f0aece3870d9335f2301db251595d173902cad' + - '394eaa6ffef8be6c', - pub: 'd53703b7340bc89bfc47176d351e5cf86d5a18d9662eca3c' + - '9759c83b6ccda8859649a5866524d77f79e501db923416ca' + - '2636243836d3e6df752defc0fb19cc386e3ae48ad647753f' + - 'bf415e2612f8a9fd01efe7aca249589590c7e6a0332630bb' + - '29c5b3501265d720213790556f0f1d114a9e2071be3620bd' + - '4ee1e8bb96689ac9e226f0a4203025f0267adc273a43582b' + - '00b70b490343529eaec4dcff140773cd6654658517f51193' + - '13f21f0a8e04fe7d7b21ffeca85ff8f87c42bb8d9cb13a72' + - 'c00e9c6e9dfcedda0777af951cc8ccab90d35e915e707d8e' + - '4c2aca219547dd78e9a1a0730accdc9ad0b854e51edd1e91' + - '4756760bab156ca6e3cb9c625cf0870def34e9ac2e552800' + - 'd6ce506d43dbbc75acfa0c8d8fb12daa3c783fb726f187d5' + - '58131779239c912d389d0511e0f3a81969d12aeee670e48f' + - 'ba41f7ed9f10705543689c2506b976a8ffabed45e33795b0' + - '1df4f6b993a33d1deab1316a67419afa31fbb6fdd252ee8c' + - '7c7d1d016c44e3fcf6b41898d7f206aa33760b505e4eff2e' + - 'c624bc7fe636b1d59e45d6f904fc391419f13d1f0cdb5b6c' + - '2378b09434159917dde709f8a6b5dc30994d056e3f964371' + - '11587ac7af0a442b8367a7bd940f752ddabf31cf01171e24' + - 'd78df136e9681cd974ce4f858a5fb6efd3234a91857bb52d' + - '9e7b414a8bc66db4b5a73bbeccfb6eb764b4f0cbf0375136' + - 'b024b04e698d54a5' - }, - p17: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934028492' + - '36c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bd' + - 'f8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831' + - '179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1b' + - 'db7f1447e6cc254b332051512bd7af426fb8f401378cd2bf' + - '5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6' + - 'd55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f3' + - '23a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aa' + - 'cc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be328' + - '06a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55c' + - 'da56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee' + - '12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff', - priv: '6017f2bc23e1caff5b0a8b4e1fc72422b5204415787801dc' + - '025762b8dbb98ab57603aaaa27c4e6bdf742b4a1726b9375' + - 'a8ca3cf07771779589831d8bd18ddeb79c43e7e77d433950' + - 'e652e49df35b11fa09644874d71d62fdaffb580816c2c88c' + - '2c4a2eefd4a660360316741b05a15a2e37f236692ad3c463' + - 'fff559938fc6b77176e84e1bb47fb41af691c5eb7bb81bd8' + - 'c918f52625a1128f754b08f5a1403b84667231c4dfe07ed4' + - '326234c113931ce606037e960f35a2dfdec38a5f057884d3' + - '0af8fab3be39c1eeb390205fd65982191fc21d5aa30ddf51' + - 'a8e1c58c0c19fc4b4a7380ea9e836aaf671c90c29bc4bcc7' + - '813811aa436a7a9005de9b507957c56a9caa1351b6efc620' + - '7225a18f6e97f830fb6a8c4f03b82f4611e67ab9497b9271' + - 'd6ac252793cc3e5538990dbd894d2dbc2d152801937d9f74' + - 'da4b741b50b4d40e4c75e2ac163f7b397fd555648b249f97' + - 'ffe58ffb6d096aa84534c4c5729cff137759bd34e80db4ab' + - '47e2b9c52064e7f0bf677f72ac9e5d0c6606943683f9d12f' + - '180cf065a5cb8ec3179a874f358847a907f8471d15f1e728' + - '7023249d6d13c82da52628654438f47b8b5cdf4761fbf6ad' + - '9219eceac657dbd06cf2ab776ad4c968f81c3d039367f0a4' + - 'd77c7ec4435c27b6c147071665100063b5666e06eb2fb2cc' + - '3159ba34bc98ca346342195f6f1fb053ddc3bc1873564d40' + - '1c6738cdf764d6e1ff25ca5926f80102ea6593c17170966b' + - 'b5d7352dd7fb821230237ea3ebed1f920feaadbd21be295a' + - '69f2083deae9c5cdf5f4830eb04b7c1f80cc61c17232d79f' + - '7ecc2cc462a7965f804001c89982734e5abba2d31df1b012' + - '152c6b226dff34510b54be8c2cd68d795def66c57a3abfb6' + - '896f1d139e633417f8c694764974d268f46ece3a8d6616ea' + - 'a592144be48ee1e0a1595d3e5edfede5b27cec6c48ceb2ff' + - 'b42cb44275851b0ebf87dfc9aa2d0cb0805e9454b051dfe8' + - 'a29fadd82491a4b4c23f2d06ba45483ab59976da1433c9ce' + - '500164b957a04cf62dd67595319b512fc4b998424d1164dd' + - 'bbe5d1a0f7257cbb04ec9b5ed92079a1502d98725023ecb2', - pub: '3bf836229c7dd874fe37c1790d201e82ed8e192ed61571ca' + - '7285264974eb2a0171f3747b2fc23969a916cbd21e14f7e2' + - 'f0d72dcd2247affba926f9e7bb99944cb5609aed85e71b89' + - 'e89d2651550cb5bd8281bd3144066af78f194032aa777739' + - 'cccb7862a1af401f99f7e5c693f25ddce2dedd9686633820' + - 'd28d0f5ed0c6b5a094f5fe6170b8e2cbc9dff118398baee6' + - 'e895a6301cb6e881b3cae749a5bdf5c56fc897ff68bc73f2' + - '4811bb108b882872bade1f147d886a415cda2b93dd90190c' + - 'be5c2dd53fe78add5960e97f58ff2506afe437f4cf4c912a' + - '397c1a2139ac6207d3ab76e6b7ffd23bb6866dd7f87a9ae5' + - '578789084ff2d06ea0d30156d7a10496e8ebe094f5703539' + - '730f5fdbebc066de417be82c99c7da59953071f49da7878d' + - 'a588775ff2a7f0084de390f009f372af75cdeba292b08ea8' + - '4bd13a87e1ca678f9ad148145f7cef3620d69a891be46fbb' + - 'cad858e2401ec0fd72abdea2f643e6d0197b7646fbb83220' + - '0f4cf7a7f6a7559f9fb0d0f1680822af9dbd8dec4cd1b5e1' + - '7bc799e902d9fe746ddf41da3b7020350d3600347398999a' + - 'baf75d53e03ad2ee17de8a2032f1008c6c2e6618b62f225b' + - 'a2f350179445debe68500fcbb6cae970a9920e321b468b74' + - '5fb524fb88abbcacdca121d737c44d30724227a99745c209' + - 'b970d1ff93bbc9f28b01b4e714d6c9cbd9ea032d4e964d8e' + - '8fff01db095160c20b7646d9fcd314c4bc11bcc232aeccc0' + - 'fbedccbc786951025597522eef283e3f56b44561a0765783' + - '420128638c257e54b972a76e4261892d81222b3e2039c61a' + - 'ab8408fcaac3d634f848ab3ee65ea1bd13c6cd75d2e78060' + - 'e13cf67fbef8de66d2049e26c0541c679fff3e6afc290efe' + - '875c213df9678e4a7ec484bc87dae5f0a1c26d7583e38941' + - 'b7c68b004d4df8b004b666f9448aac1cc3ea21461f41ea5d' + - 'd0f7a9e6161cfe0f58bcfd304bdc11d78c2e9d542e86c0b5' + - '6985cc83f693f686eaac17411a8247bf62f5ccc7782349b5' + - 'cc1f20e312fa2acc0197154d1bfee507e8db77e8f2732f2d' + - '641440ccf248e8643b2bd1e1f9e8239356ab91098fcb431d', - q: 'a899c59999bf877d96442d284359783bdc64b5f878b688fe' + - '51407f0526e616553ad0aaaac4d5bed3046f10a1faaf42bb' + - '2342dc4b7908eea0c46e4c4576897675c2bfdc4467870d3d' + - 'cd90adaed4359237a4bc6924bfb99aa6bf5f5ede15b574ea' + - 'e977eac096f3c67d09bda574c6306c6123fa89d2f086b8dc' + - 'ff92bc570c18d83fe6c810ccfd22ce4c749ef5e6ead3fffe' + - 'c63d95e0e3fde1df9db6a35fa1d107058f37e41957769199' + - 'd945dd7a373622c65f0af3fd9eb1ddc5c764bbfaf7a3dc37' + - '2548e683b970dac4aa4b9869080d2376c9adecebb84e172c' + - '09aeeb25fb8df23e60033260c4f8aac6b8b98ab894b1fb84' + - 'ebb83c0fb2081c3f3eee07f44e24d8fabf76f19ed167b0d7' + - 'ff971565aa4efa3625fce5a43ceeaa3eebb3ce88a00f597f' + - '048c69292b38dba2103ecdd5ec4ccfe3b2d87fa6202f334b' + - 'c1cab83b608dfc875b650b69f2c7e23c0b2b4adf149a6100' + - 'db1b6dbad4679ecb1ea95eafaba3bd00db11c2134f5a8686' + - '358b8b2ab49a1b2e85e1e45caeac5cd4dc0b3b5fffba8871' + - '1c6baf399edd48dad5e5c313702737a6dbdcede80ca358e5' + - '1d1c4fe42e8948a084403f61baed38aa9a1a5ce2918e9f33' + - '100050a430b47bc592995606440272a4994677577a6aaa1b' + - 'a101045dbec5a4e9566dab5445d1af3ed19519f07ac4e2a8' + - 'bd0a84b01978f203a9125a0be020f71fab56c2c9e344d4f4' + - '12d53d3cd8eb74ca5122002e931e3cb0bd4b7492436be17a' + - 'd7ebe27148671f59432c36d8c56eb762655711cfc8471f70' + - '83a8b7283bcb3b1b1d47d37c23d030288cfcef05fbdb4e16' + - '652ee03ee7b77056a808cd700bc3d9ef826eca9a59be959c' + - '947c865d6b372a1ca2d503d7df6d7611b12111665438475a' + - '1c64145849b3da8c2d343410df892d958db232617f9896f1' + - 'de95b8b5a47132be80dd65298c7f2047858409bf762dbc05' + - 'a62ca392ac40cfb8201a0607a2cae07d99a307625f2b2d04' + - 'fe83fbd3ab53602263410f143b73d5b46fc761882e78c782' + - 'd2c36e716a770a7aefaf7f76cea872db7bffefdbc4c2f9e0' + - '39c19adac915e7a63dcb8c8c78c113f29a3e0bc10e100ce0', - qs: '6f0a2fb763eaeb8eb324d564f03d4a55fdcd709e5f1b65e9' + - '5702b0141182f9f945d71bc3e64a7dfdae7482a7dd5a4e58' + - 'bc38f78de2013f2c468a621f08536969d2c8d011bb3bc259' + - '2124692c91140a5472cad224acdacdeae5751dadfdf068b8' + - '77bfa7374694c6a7be159fc3d24ff9eeeecaf62580427ad8' + - '622d48c51a1c4b1701d768c79d8c819776e096d2694107a2' + - 'f3ec0c32224795b59d32894834039dacb369280afb221bc0' + - '90570a93cf409889b818bb30cccee98b2aa26dbba0f28499' + - '08e1a3cd43fa1f1fb71049e5c77c3724d74dc351d9989057' + - '37bbda3805bd6b1293da8774410fb66e3194e18cdb304dd9' + - 'a0b59b583dcbc9fc045ac9d56aea5cfc9f8a0b95da1e11b7' + - '574d1f976e45fe12294997fac66ca0b83fc056183549e850' + - 'a11413cc4abbe39a211e8c8cbf82f2a23266b3c10ab9e286' + - '07a1b6088909cddff856e1eb6b2cde8bdac53fa939827736' + - 'ca1b892f6c95899613442bd02dbdb747f02487718e2d3f22' + - 'f73734d29767ed8d0e346d0c4098b6fdcb4df7d0c4d29603' + - '5bffe80d6c65ae0a1b814150d349096baaf950f2caf298d2' + - 'b292a1d48cf82b10734fe8cedfa16914076dfe3e9b51337b' + - 'ed28ea1e6824bb717b641ca0e526e175d3e5ed7892aebab0' + - 'f207562cc938a821e2956107c09b6ce4049adddcd0b7505d' + - '49ae6c69a20122461102d465d93dc03db026be54c303613a' + - 'b8e5ce3fd4f65d0b6162ff740a0bf5469ffd442d8c509cd2' + - '3b40dab90f6776ca17fc0678774bd6eee1fa85ababa52ec1' + - 'a15031eb677c6c488661dddd8b83d6031fe294489ded5f08' + - '8ad1689a14baeae7e688afa3033899c81f58de39b392ca94' + - 'af6f15a46f19fa95c06f9493c8b96a9be25e78b9ea35013b' + - 'caa76de6303939299d07426a88a334278fc3d0d9fa71373e' + - 'be51d3c1076ab93a11d3d0d703366ff8cde4c11261d488e5' + - '60a2bdf3bfe2476032294800d6a4a39d306e65c6d7d8d66e' + - '5ec63eee94531e83a9bddc458a2b508285c0ee10b7bd94da' + - '2815a0c5bd5b2e15cbe66355e42f5af8955cdfc0b3a4996d' + - '288db1f4b32b15643b18193e378cb7491f3c3951cdd044b1' + - 'a519571bffac2da986f5f1d506c66530a55f70751e24fa8e' + - 'd83ac2347f4069fb561a5565e78c6f0207da24e889a93a96' + - '65f717d9fe8a2938a09ab5f81be7ccecf466c0397fc15a57' + - '469939793f302739765773c256a3ca55d0548afd117a7cae' + - '98ca7e0d749a130c7b743d376848e255f8fdbe4cb4480b63' + - 'cd2c015d1020cf095d175f3ca9dcdfbaf1b2a6e6468eee4c' + - 'c750f2132a77f376bd9782b9d0ff4da98621b898e251a263' + - '4301ba2214a8c430b2f7a79dbbfd6d7ff6e9b0c137b025ff' + - '587c0bf912f0b19d4fff96b1ecd2ca990c89b386055c60f2' + - '3b94214bd55096f17a7b2c0fa12b333235101cd6f28a128c' + - '782e8a72671adadebbd073ded30bd7f09fb693565dcf0bf3' + - '090c21d13e5b0989dd8956f18f17f4f69449a13549c9d80a' + - '77e5e61b5aeeee9528634100e7bc390672f0ded1ca53555b' + - 'abddbcf700b9da6192255bddf50a76b709fbed251dce4c7e' + - '1ca36b85d1e97c1bc9d38c887a5adf140f9eeef674c31422' + - 'e65f63cae719f8c1324e42fa5fd8500899ef5aa3f9856aa7' + - 'ce10c85600a040343204f36bfeab8cfa6e9deb8a2edd2a8e' + - '018d00c7c9fa3a251ad0f57183c37e6377797653f382ec7a' + - '2b0145e16d3c856bc3634b46d90d7198aff12aff88a30e34' + - 'e2bfaf62705f3382576a9d3eeb0829fca2387b5b654af46e' + - '5cf6316fb57d59e5ea6c369061ac64d99671b0e516529dd5' + - 'd9c48ea0503e55fee090d36c5ea8b5954f6fcc0060794e1c' + - 'b7bc24aa1e5c0142fd4ce6e8fd5aa92a7bf84317ea9e1642' + - 'b6995bac6705adf93cbce72433ed0871139970d640f67b78' + - 'e63a7a6d849db2567df69ac7d79f8c62664ac221df228289' + - 'd0a4f9ebd9acb4f87d49da64e51a619fd3f3baccbd9feb12' + - '5abe0cc2c8d17ed1d8546da2b6c641f4d3020a5f9b9f26ac' + - '16546c2d61385505612275ea344c2bbf1ce890023738f715' + - '5e9eba6a071678c8ebd009c328c3eb643679de86e69a9fa5' + - '67a9e146030ff03d546310a0a568c5ba0070e0da22f2cef8' + - '54714b04d399bbc8fd261f9e8efcd0e83bdbc3f5cfb2d024' + - '3e398478cc598e000124eb8858f9df8f52946c2a1ca5c400' - } -}; diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/pummel/dh-group-test.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/pummel/dh-group-test.js deleted file mode 100644 index 37a259ff..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/pummel/dh-group-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../../').BN; -var fixtures = require('../fixtures'); - -describe('BN.js/Slow DH test', function () { - var groups = fixtures.dhGroups; - Object.keys(groups).forEach(function (name) { - it('should match public key for ' + name + ' group', function () { - var group = groups[name]; - - this.timeout(3600 * 1000); - - var base = new BN(2); - var mont = BN.red(new BN(group.prime, 16)); - var priv = new BN(group.priv, 16); - var multed = base.toRed(mont).redPow(priv).fromRed(); - var actual = new Buffer(multed.toArray()); - assert.equal(actual.toString('hex'), group.pub); - }); - }); -}); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/red-test.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/red-test.js deleted file mode 100644 index fc2498c9..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/red-test.js +++ /dev/null @@ -1,263 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Reduction context', function () { - function testMethod (name, fn) { - describe(name + ' method', function () { - it('should support add, iadd, sub, isub operations', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(123).toRed(m); - var b = new BN(231).toRed(m); - - assert.equal(a.redAdd(b).fromRed().toString(10), '97'); - assert.equal(a.redSub(b).fromRed().toString(10), '149'); - assert.equal(b.redSub(a).fromRed().toString(10), '108'); - - assert.equal(a.clone().redIAdd(b).fromRed().toString(10), '97'); - assert.equal(a.clone().redISub(b).fromRed().toString(10), '149'); - assert.equal(b.clone().redISub(a).fromRed().toString(10), '108'); - }); - - it('should support pow and mul operations', function () { - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p192); - var a = new BN(123); - var b = new BN(231); - var c = a.toRed(m).redMul(b.toRed(m)).fromRed(); - assert(c.cmp(a.mul(b).mod(p192)) === 0); - - assert.equal(a.toRed(m).redPow(new BN(3)).fromRed() - .cmp(a.sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(4)).fromRed() - .cmp(a.sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(8)).fromRed() - .cmp(a.sqr().sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(9)).fromRed() - .cmp(a.sqr().sqr().sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(17)).fromRed() - .cmp(a.sqr().sqr().sqr().sqr().mul(a)), 0); - assert.equal( - a.toRed(m).redPow(new BN('deadbeefabbadead', 16)).fromRed() - .toString(16), - '3aa0e7e304e320b68ef61592bcb00341866d6fa66e11a4d6'); - }); - - it('should sqrtm numbers', function () { - var p = new BN(263); - var m = fn(p); - var q = new BN(11).toRed(m); - - var qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - m = fn(p); - - q = new BN(13).toRed(m); - qr = q.redSqrt(true, p); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(false, p); - assert.equal(qr.redSqr().cmp(q), 0); - - // Tonelli-shanks - p = new BN(13); - m = fn(p); - q = new BN(10).toRed(m); - assert.equal(q.redSqrt().fromRed().toString(10), '7'); - }); - - it('should invm numbers', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(3).toRed(m); - var b = a.redInvm(); - assert.equal(a.redMul(b).fromRed().toString(16), '1'); - }); - - it('should invm numbers (regression)', function () { - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'e1d969b8192fbac73ea5b7921896d6a2263d4d4077bb8e5055361d1f7f8163f3', - 16); - - var m = fn(p); - a = a.toRed(m); - - assert.equal(a.redInvm().fromRed().negative, 0); - }); - - it('should imul numbers', function () { - var p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p); - - var a = new BN('deadbeefabbadead', 16); - var b = new BN('abbadeadbeefdead', 16); - var c = a.mul(b).mod(p); - - assert.equal(a.toRed(m).redIMul(b.toRed(m)).fromRed().toString(16), - c.toString(16)); - }); - - it('should pow(base, 0) == 1', function () { - var base = new BN(256).toRed(BN.red('k256')); - var exponent = new BN(0); - var result = base.redPow(exponent); - assert.equal(result.toString(), '1'); - }); - - it('should shl numbers', function () { - var base = new BN(256).toRed(BN.red('k256')); - var result = base.redShl(1); - assert.equal(result.toString(), '512'); - }); - - it('should reduce when converting to red', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(5).toRed(m); - - assert.doesNotThrow(function () { - var b = a.redISub(new BN(512).toRed(m)); - b.redISub(new BN(512).toRed(m)); - }); - }); - - it('redNeg and zero value', function () { - var a = new BN(0).toRed(BN.red('k256')).redNeg(); - assert.equal(a.isZero(), true); - }); - - it('should not allow modulus <= 1', function () { - assert.throws(function () { - BN.red(new BN(0)); - }, /^Error: modulus must be greater than 1$/); - - assert.throws(function () { - BN.red(new BN(1)); - }, /^Error: modulus must be greater than 1$/); - - assert.doesNotThrow(function () { - BN.red(new BN(2)); - }); - }); - }); - } - - testMethod('Plain', BN.red); - testMethod('Montgomery', BN.mont); - - describe('Pseudo-Mersenne Primes', function () { - it('should reduce numbers mod k256', function () { - var p = BN._prime('k256'); - - assert.equal(p.ireduce(new BN(0xdead)).toString(16), 'dead'); - assert.equal(p.ireduce(new BN('deadbeef', 16)).toString(16), 'deadbeef'); - - var num = new BN('fedcba9876543210fedcba9876543210dead' + - 'fedcba9876543210fedcba9876543210dead', - 16); - var exp = num.mod(p.p).toString(16); - assert.equal(p.ireduce(num).toString(16), exp); - - var regr = new BN('f7e46df64c1815962bf7bc9c56128798' + - '3f4fcef9cb1979573163b477eab93959' + - '335dfb29ef07a4d835d22aa3b6797760' + - '70a8b8f59ba73d56d01a79af9', - 16); - exp = regr.mod(p.p).toString(16); - - assert.equal(p.ireduce(regr).toString(16), exp); - }); - - it('should not fail to invm number mod k256', function () { - var regr2 = new BN( - '6c150c4aa9a8cf1934485d40674d4a7cd494675537bda36d49405c5d2c6f496f', 16); - regr2 = regr2.toRed(BN.red('k256')); - assert.equal(regr2.redInvm().redMul(regr2).fromRed().cmpn(1), 0); - }); - - it('should correctly square the number', function () { - var p = BN._prime('k256').p; - var red = BN.red('k256'); - - var n = new BN('9cd8cb48c3281596139f147c1364a3ed' + - 'e88d3f310fdb0eb98c924e599ca1b3c9', - 16); - var expected = n.sqr().mod(p); - var actual = n.toRed(red).redSqr().fromRed(); - - assert.equal(actual.toString(16), expected.toString(16)); - }); - - it('redISqr should return right result', function () { - var n = new BN('30f28939', 16); - var actual = n.toRed(BN.red('k256')).redISqr().fromRed(); - assert.equal(actual.toString(16), '95bd93d19520eb1'); - }); - }); - - it('should avoid 4.1.0 regresion', function () { - function bits2int (obits, q) { - var bits = new BN(obits); - var shift = (obits.length << 3) - q.bitLength(); - if (shift > 0) { - bits.ishrn(shift); - } - return bits; - } - var t = new Buffer('aff1651e4cd6036d57aa8b2a05ccf1a9d5a40166340ecbbdc55' + - 'be10b568aa0aa3d05ce9a2fcec9df8ed018e29683c6051cb83e' + - '46ce31ba4edb045356a8d0d80b', 'hex'); - var g = new BN('5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670' + - '716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1' + - 'aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a' + - '338661d10461c0d135472085057f3494309ffa73c611f78b32adbb574' + - '0c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097b' + - 'c5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a3' + - '3afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd24871' + - '99874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f9' + - '96bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7', - 16); - var p = new BN('9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642' + - 'f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55' + - '757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9' + - 'f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b99' + - '3e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368' + - '213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca283716' + - '21cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d' + - '3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256' + - 'a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b', - 16); - var q = new BN('f2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde' + - '9998c1f', 16); - var k = bits2int(t, q); - var expectedR = '89ec4bb1400eccff8e7d9aa515cd1de7803f2daff09693ee7fd1353e' + - '90a68307'; - var r = g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); - assert.equal(r.toString(16), expectedR); - }); - - it('K256.split for 512 bits number should return equal numbers', function () { - var red = BN.red('k256'); - var input = new BN(1).iushln(512).subn(1); - assert.equal(input.bitLength(), 512); - var output = new BN(0); - red.prime.split(input, output); - assert.equal(input.cmp(output), 0); - }); -}); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/utils-test.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/utils-test.js deleted file mode 100644 index 8571905a..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/test/utils-test.js +++ /dev/null @@ -1,345 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Utils', function () { - describe('.toString()', function () { - describe('binary padding', function () { - it('should have a length of 256', function () { - var a = new BN(0); - - assert.equal(a.toString(2, 256).length, 256); - }); - }); - describe('hex padding', function () { - it('should have length of 8 from leading 15', function () { - var a = new BN('ffb9602', 16); - - assert.equal(a.toString('hex', 2).length, 8); - }); - - it('should have length of 8 from leading zero', function () { - var a = new BN('fb9604', 16); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 8 from leading zeros', function () { - var a = new BN(0); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 64 from leading 15', function () { - var a = new BN( - 'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 2).length, 64); - }); - - it('should have length of 64 from leading zero', function () { - var a = new BN( - 'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 64).length, 64); - }); - }); - }); - - describe('.isNeg()', function () { - it('should return true for negative numbers', function () { - assert.equal(new BN(-1).isNeg(), true); - assert.equal(new BN(1).isNeg(), false); - assert.equal(new BN(0).isNeg(), false); - assert.equal(new BN('-0', 10).isNeg(), false); - }); - }); - - describe('.isOdd()', function () { - it('should return true for odd numbers', function () { - assert.equal(new BN(0).isOdd(), false); - assert.equal(new BN(1).isOdd(), true); - assert.equal(new BN(2).isOdd(), false); - assert.equal(new BN('-0', 10).isOdd(), false); - assert.equal(new BN('-1', 10).isOdd(), true); - assert.equal(new BN('-2', 10).isOdd(), false); - }); - }); - - describe('.isEven()', function () { - it('should return true for even numbers', function () { - assert.equal(new BN(0).isEven(), true); - assert.equal(new BN(1).isEven(), false); - assert.equal(new BN(2).isEven(), true); - assert.equal(new BN('-0', 10).isEven(), true); - assert.equal(new BN('-1', 10).isEven(), false); - assert.equal(new BN('-2', 10).isEven(), true); - }); - }); - - describe('.isZero()', function () { - it('should return true for zero', function () { - assert.equal(new BN(0).isZero(), true); - assert.equal(new BN(1).isZero(), false); - assert.equal(new BN(0xffffffff).isZero(), false); - }); - }); - - describe('.bitLength()', function () { - it('should return proper bitLength', function () { - assert.equal(new BN(0).bitLength(), 0); - assert.equal(new BN(0x1).bitLength(), 1); - assert.equal(new BN(0x2).bitLength(), 2); - assert.equal(new BN(0x3).bitLength(), 2); - assert.equal(new BN(0x4).bitLength(), 3); - assert.equal(new BN(0x8).bitLength(), 4); - assert.equal(new BN(0x10).bitLength(), 5); - assert.equal(new BN(0x100).bitLength(), 9); - assert.equal(new BN(0x123456).bitLength(), 21); - assert.equal(new BN('123456789', 16).bitLength(), 33); - assert.equal(new BN('8023456789', 16).bitLength(), 40); - }); - }); - - describe('.byteLength()', function () { - it('should return proper byteLength', function () { - assert.equal(new BN(0).byteLength(), 0); - assert.equal(new BN(0x1).byteLength(), 1); - assert.equal(new BN(0x2).byteLength(), 1); - assert.equal(new BN(0x3).byteLength(), 1); - assert.equal(new BN(0x4).byteLength(), 1); - assert.equal(new BN(0x8).byteLength(), 1); - assert.equal(new BN(0x10).byteLength(), 1); - assert.equal(new BN(0x100).byteLength(), 2); - assert.equal(new BN(0x123456).byteLength(), 3); - assert.equal(new BN('123456789', 16).byteLength(), 5); - assert.equal(new BN('8023456789', 16).byteLength(), 5); - }); - }); - - describe('.toArray()', function () { - it('should return [ 0 ] for `0`', function () { - var n = new BN(0); - assert.deepEqual(n.toArray('be'), [ 0 ]); - assert.deepEqual(n.toArray('le'), [ 0 ]); - }); - - it('should zero pad to desired lengths', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toArray('be', 5), [ 0x00, 0x00, 0x12, 0x34, 0x56 ]); - assert.deepEqual(n.toArray('le', 5), [ 0x56, 0x34, 0x12, 0x00, 0x00 ]); - }); - - it('should throw when naturally larger than desired length', function () { - var n = new BN(0x123456); - assert.throws(function () { - n.toArray('be', 2); - }, /^Error: byte array longer than desired length$/); - }); - }); - - describe('.toBuffer', function () { - it('should return proper Buffer', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toBuffer('be', 5).toString('hex'), '0000123456'); - assert.deepEqual(n.toBuffer('le', 5).toString('hex'), '5634120000'); - }); - }); - - describe('.toNumber()', function () { - it('should return proper Number if below the limit', function () { - assert.deepEqual(new BN(0x123456).toNumber(), 0x123456); - assert.deepEqual(new BN(0x3ffffff).toNumber(), 0x3ffffff); - assert.deepEqual(new BN(0x4000000).toNumber(), 0x4000000); - assert.deepEqual(new BN(0x10000000000000).toNumber(), 0x10000000000000); - assert.deepEqual(new BN(0x10040004004000).toNumber(), 0x10040004004000); - assert.deepEqual(new BN(-0x123456).toNumber(), -0x123456); - assert.deepEqual(new BN(-0x3ffffff).toNumber(), -0x3ffffff); - assert.deepEqual(new BN(-0x4000000).toNumber(), -0x4000000); - assert.deepEqual(new BN(-0x10000000000000).toNumber(), -0x10000000000000); - assert.deepEqual(new BN(-0x10040004004000).toNumber(), -0x10040004004000); - }); - - it('should throw when number exceeds 53 bits', function () { - var n = new BN(1).iushln(54); - assert.throws(function () { - n.toNumber(); - }, /^Error: Number can only safely store up to 53 bits$/); - }); - }); - - describe('.zeroBits()', function () { - it('should return proper zeroBits', function () { - assert.equal(new BN(0).zeroBits(), 0); - assert.equal(new BN(0x1).zeroBits(), 0); - assert.equal(new BN(0x2).zeroBits(), 1); - assert.equal(new BN(0x3).zeroBits(), 0); - assert.equal(new BN(0x4).zeroBits(), 2); - assert.equal(new BN(0x8).zeroBits(), 3); - assert.equal(new BN(0x10).zeroBits(), 4); - assert.equal(new BN(0x100).zeroBits(), 8); - assert.equal(new BN(0x1000000).zeroBits(), 24); - assert.equal(new BN(0x123456).zeroBits(), 1); - }); - }); - - describe('.toJSON', function () { - it('should return hex string', function () { - assert.equal(new BN(0x123).toJSON(), '123'); - }); - }); - - describe('.cmpn', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmpn(42), 0); - assert.equal(new BN(42).cmpn(43), -1); - assert.equal(new BN(42).cmpn(41), 1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffe), 0); - assert.equal(new BN(0x3fffffe).cmpn(0x3ffffff), -1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffd), 1); - assert.throws(function () { - new BN(0x3fffffe).cmpn(0x4000000); - }, /^Error: Number is too big$/); - assert.equal(new BN(42).cmpn(-42), 1); - assert.equal(new BN(-42).cmpn(42), -1); - assert.equal(new BN(-42).cmpn(-42), 0); - assert.equal(1 / new BN(-42).cmpn(-42), Infinity); - }); - }); - - describe('.cmp', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmp(new BN(42)), 0); - assert.equal(new BN(42).cmp(new BN(43)), -1); - assert.equal(new BN(42).cmp(new BN(41)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffe)), 0); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3ffffff)), -1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffd)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x4000000)), -1); - assert.equal(new BN(42).cmp(new BN(-42)), 1); - assert.equal(new BN(-42).cmp(new BN(42)), -1); - assert.equal(new BN(-42).cmp(new BN(-42)), 0); - assert.equal(1 / new BN(-42).cmp(new BN(-42)), Infinity); - }); - }); - - describe('comparison shorthands', function () { - it('.gtn greater than', function () { - assert.equal(new BN(3).gtn(2), true); - assert.equal(new BN(3).gtn(3), false); - assert.equal(new BN(3).gtn(4), false); - }); - it('.gt greater than', function () { - assert.equal(new BN(3).gt(new BN(2)), true); - assert.equal(new BN(3).gt(new BN(3)), false); - assert.equal(new BN(3).gt(new BN(4)), false); - }); - it('.gten greater than or equal', function () { - assert.equal(new BN(3).gten(3), true); - assert.equal(new BN(3).gten(2), true); - assert.equal(new BN(3).gten(4), false); - }); - it('.gte greater than or equal', function () { - assert.equal(new BN(3).gte(new BN(3)), true); - assert.equal(new BN(3).gte(new BN(2)), true); - assert.equal(new BN(3).gte(new BN(4)), false); - }); - it('.ltn less than', function () { - assert.equal(new BN(2).ltn(3), true); - assert.equal(new BN(2).ltn(2), false); - assert.equal(new BN(2).ltn(1), false); - }); - it('.lt less than', function () { - assert.equal(new BN(2).lt(new BN(3)), true); - assert.equal(new BN(2).lt(new BN(2)), false); - assert.equal(new BN(2).lt(new BN(1)), false); - }); - it('.lten less than or equal', function () { - assert.equal(new BN(3).lten(3), true); - assert.equal(new BN(3).lten(2), false); - assert.equal(new BN(3).lten(4), true); - }); - it('.lte less than or equal', function () { - assert.equal(new BN(3).lte(new BN(3)), true); - assert.equal(new BN(3).lte(new BN(2)), false); - assert.equal(new BN(3).lte(new BN(4)), true); - }); - it('.eqn equal', function () { - assert.equal(new BN(3).eqn(3), true); - assert.equal(new BN(3).eqn(2), false); - assert.equal(new BN(3).eqn(4), false); - }); - it('.eq equal', function () { - assert.equal(new BN(3).eq(new BN(3)), true); - assert.equal(new BN(3).eq(new BN(2)), false); - assert.equal(new BN(3).eq(new BN(4)), false); - }); - }); - - describe('.fromTwos', function () { - it('should convert from two\'s complement to negative number', function () { - assert.equal(new BN('00000000', 16).fromTwos(32).toNumber(), 0); - assert.equal(new BN('00000001', 16).fromTwos(32).toNumber(), 1); - assert.equal(new BN('7fffffff', 16).fromTwos(32).toNumber(), 2147483647); - assert.equal(new BN('80000000', 16).fromTwos(32).toNumber(), -2147483648); - assert.equal(new BN('f0000000', 16).fromTwos(32).toNumber(), -268435456); - assert.equal(new BN('f1234567', 16).fromTwos(32).toNumber(), -249346713); - assert.equal(new BN('ffffffff', 16).fromTwos(32).toNumber(), -1); - assert.equal(new BN('fffffffe', 16).fromTwos(32).toNumber(), -2); - assert.equal(new BN('fffffffffffffffffffffffffffffffe', 16) - .fromTwos(128).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber(), -1); - assert.equal(new BN('7fffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10), - new BN('5789604461865809771178549250434395392663499' + - '2332820282019728792003956564819967', 10).toString(10)); - assert.equal(new BN('80000000000000000000000000000000' + - '00000000000000000000000000000000', 16).fromTwos(256).toString(10), - new BN('-578960446186580977117854925043439539266349' + - '92332820282019728792003956564819968', 10).toString(10)); - }); - }); - - describe('.toTwos', function () { - it('should convert from negative number to two\'s complement', function () { - assert.equal(new BN(0).toTwos(32).toString(16), '0'); - assert.equal(new BN(1).toTwos(32).toString(16), '1'); - assert.equal(new BN(2147483647).toTwos(32).toString(16), '7fffffff'); - assert.equal(new BN('-2147483648', 10).toTwos(32).toString(16), '80000000'); - assert.equal(new BN('-268435456', 10).toTwos(32).toString(16), 'f0000000'); - assert.equal(new BN('-249346713', 10).toTwos(32).toString(16), 'f1234567'); - assert.equal(new BN('-1', 10).toTwos(32).toString(16), 'ffffffff'); - assert.equal(new BN('-2', 10).toTwos(32).toString(16), 'fffffffe'); - assert.equal(new BN('-2', 10).toTwos(128).toString(16), - 'fffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-2', 10).toTwos(256).toString(16), - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-1', 10).toTwos(256).toString(16), - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('5789604461865809771178549250434395392663' + - '4992332820282019728792003956564819967', 10).toTwos(256).toString(16), - '7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('-578960446186580977117854925043439539266' + - '34992332820282019728792003956564819968', 10).toTwos(256).toString(16), - '8000000000000000000000000000000000000000000000000000000000000000'); - }); - }); - - describe('.isBN', function () { - it('should return true for BN', function () { - assert.equal(BN.isBN(new BN()), true); - }); - - it('should return false for everything else', function () { - assert.equal(BN.isBN(1), false); - assert.equal(BN.isBN([]), false); - assert.equal(BN.isBN({}), false); - }); - }); -}); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/util/genCombMulTo.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/util/genCombMulTo.js deleted file mode 100644 index 8b456c7c..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/util/genCombMulTo.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -// NOTE: This could be potentionally used to generate loop-less multiplications -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('var w' + k + ' = c;'); - src.push('c = 0;'); - for (var j = minJ; j <= maxJ; j++) { - i = k - j; - - src.push('lo = Math.imul(al' + i + ', bl' + j + ');'); - src.push('mid = Math.imul(al' + i + ', bh' + j + ');'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = Math.imul(ah' + i + ', bh' + j + ');'); - - src.push('w' + k + ' = (w' + k + ' + lo) | 0;'); - src.push('w' + k + ' = (w' + k + ' + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (c + hi) | 0;'); - src.push('c = (c + (mid >>> 13)) | 0;'); - src.push('c = (c + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/util/genCombMulTo10.js b/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/util/genCombMulTo10.js deleted file mode 100644 index cf2e6e80..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/node_modules/bn.js/util/genCombMulTo10.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');'); - src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');'); - src.push( - 'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;'); - src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');'); - - for (var j = minJ + 1; j <= maxJ; j++) { - i = k - j; - - src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;'); - } - - src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/ethjs-unit/package.json b/truebit-implementation/node_modules/ethjs-unit/package.json deleted file mode 100644 index fa6fce06..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/package.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "_from": "ethjs-unit@0.1.6", - "_id": "ethjs-unit@0.1.6", - "_inBundle": false, - "_integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "_location": "/ethjs-unit", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "ethjs-unit@0.1.6", - "name": "ethjs-unit", - "escapedName": "ethjs-unit", - "rawSpec": "0.1.6", - "saveSpec": null, - "fetchSpec": "0.1.6" - }, - "_requiredBy": [ - "/web3-utils" - ], - "_resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "_shasum": "c665921e476e87bce2a9d588a6fe0405b2c41699", - "_spec": "ethjs-unit@0.1.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-utils", - "author": { - "name": "Nick Dodson", - "email": "thenickdodson@gmail.com" - }, - "babel": { - "plugins": [ - [ - "transform-es2015-template-literals", - { - "loose": true - } - ], - "transform-es2015-literals", - "transform-es2015-function-name", - "transform-es2015-arrow-functions", - "transform-es2015-block-scoped-functions", - [ - "transform-es2015-classes", - { - "loose": true - } - ], - "transform-es2015-object-super", - "transform-es2015-shorthand-properties", - [ - "transform-es2015-computed-properties", - { - "loose": true - } - ], - [ - "transform-es2015-for-of", - { - "loose": true - } - ], - "transform-es2015-sticky-regex", - "transform-es2015-unicode-regex", - "check-es2015-constants", - [ - "transform-es2015-spread", - { - "loose": true - } - ], - "transform-es2015-parameters", - [ - "transform-es2015-destructuring", - { - "loose": true - } - ], - "transform-es2015-block-scoping", - "transform-object-rest-spread", - "transform-es3-member-expression-literals", - "transform-es3-property-literals" - ], - "env": { - "commonjs": { - "plugins": [ - [ - "transform-es2015-modules-commonjs", - { - "loose": true - } - ] - ] - } - } - }, - "bugs": { - "url": "https://github.com/ethjs/ethjs-unit/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Richard Moore", - "email": "me@ricmoo.com", - "url": "https://ethers.io" - }, - { - "name": "Marek Kotewicz", - "email": "marek@ethdev.com", - "url": "https://github.com/debris" - }, - { - "name": "Fabian Vogelsteller", - "email": "fabian@ethdev.com" - }, - { - "name": "Marian Oancea", - "email": "marian@ethdev.com", - "url": "https://github.com/cubedro" - }, - { - "name": "Gav Wood", - "email": "g@ethdev.com" - }, - { - "name": "Jeffery Wilcke", - "email": "jeff@ethdev.com", - "url": "https://github.com/obscuren" - } - ], - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "deprecated": false, - "description": "A simple module for handling Ethereum units (e.g. 'ether', 'wei', etc...)", - "devDependencies": { - "babel-cli": "6.18.0", - "babel-core": "6.18.2", - "babel-eslint": "7.1.0", - "babel-loader": "6.2.8", - "babel-plugin-check-es2015-constants": "6.8.0", - "babel-plugin-transform-es2015-arrow-functions": "6.8.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.8.0", - "babel-plugin-transform-es2015-block-scoping": "6.18.0", - "babel-plugin-transform-es2015-classes": "6.18.0", - "babel-plugin-transform-es2015-computed-properties": "6.8.0", - "babel-plugin-transform-es2015-destructuring": "6.19.0", - "babel-plugin-transform-es2015-for-of": "6.18.0", - "babel-plugin-transform-es2015-function-name": "6.9.0", - "babel-plugin-transform-es2015-literals": "6.8.0", - "babel-plugin-transform-es2015-modules-commonjs": "6.18.0", - "babel-plugin-transform-es2015-object-super": "6.8.0", - "babel-plugin-transform-es2015-parameters": "6.18.0", - "babel-plugin-transform-es2015-shorthand-properties": "6.18.0", - "babel-plugin-transform-es2015-spread": "6.8.0", - "babel-plugin-transform-es2015-sticky-regex": "6.8.0", - "babel-plugin-transform-es2015-template-literals": "6.8.0", - "babel-plugin-transform-es2015-unicode-regex": "6.11.0", - "babel-plugin-transform-es3-member-expression-literals": "6.5.0", - "babel-plugin-transform-es3-property-literals": "6.5.0", - "babel-plugin-transform-object-rest-spread": "6.19.0", - "babel-register": "6.18.0", - "bignumber.js": "3.0.1", - "chai": "3.5.0", - "check-es3-syntax-cli": "0.1.3", - "coveralls": "2.11.9", - "cross-env": "1.0.7", - "eslint": "2.10.1", - "eslint-config-airbnb": "9.0.1", - "eslint-import-resolver-webpack": "0.2.4", - "eslint-plugin-import": "1.8.0", - "eslint-plugin-jsx-a11y": "1.2.0", - "eslint-plugin-react": "5.1.1", - "eventsource-polyfill": "0.9.6", - "istanbul": "0.4.5", - "json-loader": "0.5.4", - "lint-staged": "1.0.1", - "mocha": "3.1.2", - "pre-commit": "1.1.3", - "rimraf": "2.3.4", - "web3": "0.17.0-beta", - "webpack": "2.1.0-beta.15" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - }, - "eslintConfig": { - "parser": "babel-eslint", - "extends": "airbnb", - "env": { - "node": true, - "mocha": true, - "es6": true - }, - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "rules": { - "import/no-unresolved": 2, - "comma-dangle": [ - 2, - "always-multiline" - ], - "indent": [ - 2, - 2, - { - "SwitchCase": 1 - } - ], - "no-console": 1, - "max-len": 0, - "prefer-template": 2, - "no-use-before-define": 0, - "newline-per-chained-call": 0, - "arrow-body-style": [ - 2, - "as-needed" - ] - } - }, - "files": [ - "dist", - "internals", - "lib", - "src" - ], - "homepage": "https://github.com/ethjs/ethjs-unit#readme", - "keywords": [ - "ethereum", - "encoding", - "decoding" - ], - "license": "MIT", - "lint-staged": { - "lint:eslint": "*.js" - }, - "main": "lib/index.js", - "name": "ethjs-unit", - "pre-commit": "build", - "repository": { - "type": "git", - "url": "git://github.com/ethjs/ethjs-unit.git" - }, - "scripts": { - "build": "npm run build:commonjs && npm run test:lib && npm run build:umd && npm run build:umd:min", - "build:clean": "npm run test:clean && rimraf ./dist", - "build:commonjs": "cross-env BABEL_ENV=commonjs babel src --out-dir lib --copy-files", - "build:umd": "cross-env BABEL_ENV=commonjs NODE_ENV=development webpack --config ./internals/webpack/webpack.config.js ./lib/index.js --progress", - "build:umd:min": "cross-env BABEL_ENV=commonjs NODE_ENV=production webpack --config ./internals/webpack/webpack.config.js ./lib/index.js --progress", - "coveralls": "npm run test-travis && cat ./coverage/lcov.info | coveralls", - "lint": "npm run lint:js", - "lint:eslint": "eslint --ignore-path .gitignore --ignore-pattern **/**.min.js", - "lint:js": "npm run lint:eslint -- . ", - "lint:staged": "lint-staged", - "prebuild": "npm run build:clean && npm run test", - "prepublish": "npm run build", - "pretest": "npm run lint", - "release": "npmpub", - "start": "npm test", - "test": "mocha ./src/tests/**/*.js -R spec --timeout 2000000", - "test-travis": "node ./node_modules/istanbul/lib/cli.js cover ./node_modules/mocha/bin/_mocha -- src/tests/**/*.js -R spec --timeout 2000000", - "test:clean": "rimraf ./coverage", - "test:lib": "mocha ./lib/tests/**/*.js -R spec --timeout 2000000" - }, - "version": "0.1.6" -} diff --git a/truebit-implementation/node_modules/ethjs-unit/src/index.js b/truebit-implementation/node_modules/ethjs-unit/src/index.js deleted file mode 100644 index c9cb89da..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/src/index.js +++ /dev/null @@ -1,155 +0,0 @@ -const BN = require('bn.js'); -const numberToBN = require('number-to-bn'); - -const zero = new BN(0); -const negative1 = new BN(-1); - -// complete ethereum unit map -const unitMap = { - 'noether': '0', // eslint-disable-line - 'wei': '1', // eslint-disable-line - 'kwei': '1000', // eslint-disable-line - 'Kwei': '1000', // eslint-disable-line - 'babbage': '1000', // eslint-disable-line - 'femtoether': '1000', // eslint-disable-line - 'mwei': '1000000', // eslint-disable-line - 'Mwei': '1000000', // eslint-disable-line - 'lovelace': '1000000', // eslint-disable-line - 'picoether': '1000000', // eslint-disable-line - 'gwei': '1000000000', // eslint-disable-line - 'Gwei': '1000000000', // eslint-disable-line - 'shannon': '1000000000', // eslint-disable-line - 'nanoether': '1000000000', // eslint-disable-line - 'nano': '1000000000', // eslint-disable-line - 'szabo': '1000000000000', // eslint-disable-line - 'microether': '1000000000000', // eslint-disable-line - 'micro': '1000000000000', // eslint-disable-line - 'finney': '1000000000000000', // eslint-disable-line - 'milliether': '1000000000000000', // eslint-disable-line - 'milli': '1000000000000000', // eslint-disable-line - 'ether': '1000000000000000000', // eslint-disable-line - 'kether': '1000000000000000000000', // eslint-disable-line - 'grand': '1000000000000000000000', // eslint-disable-line - 'mether': '1000000000000000000000000', // eslint-disable-line - 'gether': '1000000000000000000000000000', // eslint-disable-line - 'tether': '1000000000000000000000000000000', // eslint-disable-line -}; - -/** - * Returns value of unit in Wei - * - * @method getValueOfUnit - * @param {String} unit the unit to convert to, default ether - * @returns {BigNumber} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -function getValueOfUnit(unitInput) { - const unit = unitInput ? unitInput.toLowerCase() : 'ether'; - var unitValue = unitMap[unit]; // eslint-disable-line - - if (typeof unitValue !== 'string') { - throw new Error(`[ethjs-unit] the unit provided ${unitInput} doesn't exists, please use the one of the following units ${JSON.stringify(unitMap, null, 2)}`); - } - - return new BN(unitValue, 10); -} - -function numberToString(arg) { - if (typeof arg === 'string') { - if (!arg.match(/^-?[0-9.]+$/)) { - throw new Error(`while converting number to string, invalid number value '${arg}', should be a number matching (^-?[0-9.]+).`); - } - return arg; - } else if (typeof arg === 'number') { - return String(arg); - } else if (typeof arg === 'object' && arg.toString && (arg.toTwos || arg.dividedToIntegerBy)) { - if (arg.toPrecision) { - return String(arg.toPrecision()); - } else { // eslint-disable-line - return arg.toString(10); - } - } - throw new Error(`while converting number to string, invalid number value '${arg}' type ${typeof arg}.`); -} - -function fromWei(weiInput, unit, optionsInput) { - var wei = numberToBN(weiInput); // eslint-disable-line - var negative = wei.lt(zero); // eslint-disable-line - const base = getValueOfUnit(unit); - const baseLength = unitMap[unit].length - 1 || 1; - const options = optionsInput || {}; - - if (negative) { - wei = wei.mul(negative1); - } - - var fraction = wei.mod(base).toString(10); // eslint-disable-line - - while (fraction.length < baseLength) { - fraction = `0${fraction}`; - } - - if (!options.pad) { - fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1]; - } - - var whole = wei.div(base).toString(10); // eslint-disable-line - - if (options.commify) { - whole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ','); - } - - var value = `${whole}${fraction == '0' ? '' : `.${fraction}`}`; // eslint-disable-line - - if (negative) { - value = `-${value}`; - } - - return value; -} - -function toWei(etherInput, unit) { - var ether = numberToString(etherInput); // eslint-disable-line - const base = getValueOfUnit(unit); - const baseLength = unitMap[unit].length - 1 || 1; - - // Is it negative? - var negative = (ether.substring(0, 1) === '-'); // eslint-disable-line - if (negative) { - ether = ether.substring(1); - } - - if (ether === '.') { throw new Error(`[ethjs-unit] while converting number ${etherInput} to wei, invalid value`); } - - // Split it into a whole and fractional part - var comps = ether.split('.'); // eslint-disable-line - if (comps.length > 2) { throw new Error(`[ethjs-unit] while converting number ${etherInput} to wei, too many decimal points`); } - - var whole = comps[0], fraction = comps[1]; // eslint-disable-line - - if (!whole) { whole = '0'; } - if (!fraction) { fraction = '0'; } - if (fraction.length > baseLength) { throw new Error(`[ethjs-unit] while converting number ${etherInput} to wei, too many decimal places`); } - - while (fraction.length < baseLength) { - fraction += '0'; - } - - whole = new BN(whole); - fraction = new BN(fraction); - var wei = (whole.mul(base)).add(fraction); // eslint-disable-line - - if (negative) { - wei = wei.mul(negative1); - } - - return new BN(wei.toString(10), 10); -} - -module.exports = { - unitMap, - numberToString, - getValueOfUnit, - fromWei, - toWei, -}; diff --git a/truebit-implementation/node_modules/ethjs-unit/src/tests/test.index.js b/truebit-implementation/node_modules/ethjs-unit/src/tests/test.index.js deleted file mode 100644 index 0397aa13..00000000 --- a/truebit-implementation/node_modules/ethjs-unit/src/tests/test.index.js +++ /dev/null @@ -1,138 +0,0 @@ -const units = require('../index.js'); // eslint-disable-line -const BigNumber = require('bn.js'); // eslint-disable-line -const ActualBigNumber = require('bignumber.js'); -const Web3 = require('web3'); // eslint-disable-line -const web3 = new Web3(); // eslint-disable-line -const assert = require('chai').assert; // eslint-disable-line -const totalTypes = Object.keys(units.unitMap).length; - -function testRandomValueAgainstWeb3ToWei(negative) { - const stringTestValue = `${negative ? '-' : ''}${String(Math.floor((Math.random() * 100000000000000000) + 1))}`; - const randomunitsType = Object.keys(units.unitMap)[Math.floor((Math.random() * (totalTypes - 1)) + 1)]; - const unitsValue = units.toWei(stringTestValue, randomunitsType); - const web3Value = new BigNumber(web3.toWei(stringTestValue, randomunitsType)); - - // it(`toWei should work like web3 val ${unitsValue.toString(10)} should equal ${web3Value.toString(10)}`, () => { - assert.deepEqual(unitsValue, web3Value); - // }); -} - -function testRandomValueAgainstWeb3FromWei(negative) { - const stringTestValue = `${negative ? '-' : ''}${String(Math.floor((Math.random() * 100000000000000000) + 1))}`; - const randomunitsType = Object.keys(units.unitMap)[Math.floor((Math.random() * (totalTypes - 1)) + 1)]; - const unitsValue = units.fromWei(stringTestValue, randomunitsType); - const web3Value = web3.fromWei(stringTestValue, randomunitsType); - - // it(`fromWei should work like web3 rounded val ${unitsValue.substr(0, web3Value.length - 1)} should equal ${web3Value.substr(0, web3Value.length - 1)} for unit type ${randomunitsType}`, () => { - assert.deepEqual(unitsValue.substr(0, web3Value.length - 1), web3Value.substr(0, web3Value.length - 1)); - // }); -} - -describe('getValueOfUnit', () => { - it('should throw when undefined or not string', () => { - function invalidFromWei() { - units.fromWei(1000000000000000000, 'something'); - } - assert.throws(invalidFromWei, Error); - }); -}); - -describe('toWei', () => { - it('should handle edge cases', () => { - assert.equal(units.toWei(0, 'wei').toString(10), '0'); - assert.equal(units.toWei('0.0', 'wei').toString(10), '0'); - assert.equal(units.toWei('.3', 'ether').toString(10), '300000000000000000'); - assert.throws(() => units.toWei('.', 'wei'), Error); - assert.throws(() => units.toWei('1.243842387924387924897423897423', 'ether'), Error); - assert.throws(() => units.toWei('8723.98234.98234', 'ether'), Error); - }); - - it('should return the correct value', () => { - assert.equal(units.toWei(1, 'wei').toString(10), '1'); - assert.equal(units.toWei(1, 'kwei').toString(10), '1000'); - assert.equal(units.toWei(1, 'Kwei').toString(10), '1000'); - assert.equal(units.toWei(1, 'babbage').toString(10), '1000'); - assert.equal(units.toWei(1, 'mwei').toString(10), '1000000'); - assert.equal(units.toWei(1, 'Mwei').toString(10), '1000000'); - assert.equal(units.toWei(1, 'lovelace').toString(10), '1000000'); - assert.equal(units.toWei(1, 'gwei').toString(10), '1000000000'); - assert.equal(units.toWei(1, 'Gwei').toString(10), '1000000000'); - assert.equal(units.toWei(1, 'shannon').toString(10), '1000000000'); - assert.equal(units.toWei(1, 'szabo').toString(10), '1000000000000'); - assert.equal(units.toWei(1, 'finney').toString(10), '1000000000000000'); - assert.equal(units.toWei(1, 'ether').toString(10), '1000000000000000000'); - assert.equal(units.toWei(1, 'kether').toString(10), '1000000000000000000000'); - assert.equal(units.toWei(1, 'grand').toString(10), '1000000000000000000000'); - assert.equal(units.toWei(1, 'mether').toString(10), '1000000000000000000000000'); - assert.equal(units.toWei(1, 'gether').toString(10), '1000000000000000000000000000'); - assert.equal(units.toWei(1, 'tether').toString(10), '1000000000000000000000000000000'); - - assert.equal(units.toWei(1, 'kwei').toString(10), units.toWei(1, 'femtoether').toString(10)); - assert.equal(units.toWei(1, 'szabo').toString(10), units.toWei(1, 'microether').toString(10)); - assert.equal(units.toWei(1, 'finney').toString(10), units.toWei(1, 'milliether').toString(10)); - assert.equal(units.toWei(1, 'milli').toString(10), units.toWei(1, 'milliether').toString(10)); - assert.equal(units.toWei(1, 'milli').toString(10), units.toWei(1000, 'micro').toString(10)); - - assert.throws(() => { units.toWei(1, 'wei1'); }, Error); - }); -}); - -describe('numberToString', () => { - it('should handle edge cases', () => { - // assert.throws(() => units.numberToString(null), Error); - assert.throws(() => units.numberToString(undefined), Error); - // assert.throws(() => units.numberToString(NaN), Error); - assert.throws(() => units.numberToString({}), Error); - assert.throws(() => units.numberToString([]), Error); - assert.throws(() => units.numberToString('-1sdffsdsdf'), Error); - assert.throws(() => units.numberToString('-0..-...9'), Error); - assert.throws(() => units.numberToString('fds'), Error); - assert.throws(() => units.numberToString(''), Error); - assert.throws(() => units.numberToString('#'), Error); - assert.equal(units.numberToString(55), '55'); - assert.equal(units.numberToString(1), '1'); - assert.equal(units.numberToString(-1), '-1'); - assert.equal(units.numberToString(0), '0'); - assert.equal(units.numberToString(-0), '0'); - assert.equal(units.numberToString(new ActualBigNumber(10.1)), '10.1'); - assert.equal(units.numberToString(new ActualBigNumber(10000)), '10000'); - assert.equal(units.numberToString(new BigNumber(10000)), '10000'); - assert.equal(units.numberToString(new BigNumber('-1')), '-1'); - assert.equal(units.numberToString(new BigNumber('1')), '1'); - assert.equal(units.numberToString(new BigNumber(0)), '0'); - }); -}); - -describe('fromWei', () => { - it('should handle options', () => { - assert.equal(units.fromWei(10000000, 'wei', { commify: true }), '10,000,000'); - }); - - it('should return the correct value', () => { - assert.equal(units.fromWei(1000000000000000000, 'wei'), '1000000000000000000'); - assert.equal(units.fromWei(1000000000000000000, 'kwei'), '1000000000000000'); - assert.equal(units.fromWei(1000000000000000000, 'mwei'), '1000000000000'); - assert.equal(units.fromWei(1000000000000000000, 'gwei'), '1000000000'); - assert.equal(units.fromWei(1000000000000000000, 'szabo'), '1000000'); - assert.equal(units.fromWei(1000000000000000000, 'finney'), '1000'); - assert.equal(units.fromWei(1000000000000000000, 'ether'), '1'); - assert.equal(units.fromWei(1000000000000000000, 'kether'), '0.001'); - assert.equal(units.fromWei(1000000000000000000, 'grand'), '0.001'); - assert.equal(units.fromWei(1000000000000000000, 'mether'), '0.000001'); - assert.equal(units.fromWei(1000000000000000000, 'gether'), '0.000000001'); - assert.equal(units.fromWei(1000000000000000000, 'tether'), '0.000000000001'); - }); -}); - -describe('units', () => { - describe('normal functionality', () => { - it('should be the same as web3', () => { - for (var i = 0; i < 15000; i++) { // eslint-disable-line - testRandomValueAgainstWeb3ToWei(false); - testRandomValueAgainstWeb3ToWei(true); - testRandomValueAgainstWeb3FromWei(false); - testRandomValueAgainstWeb3FromWei(true); - } - }); - }); -}); diff --git a/truebit-implementation/node_modules/eventemitter3/LICENSE b/truebit-implementation/node_modules/eventemitter3/LICENSE deleted file mode 100644 index abcbd54e..00000000 --- a/truebit-implementation/node_modules/eventemitter3/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Arnout Kazemier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/eventemitter3/README.md b/truebit-implementation/node_modules/eventemitter3/README.md deleted file mode 100644 index ff209654..00000000 --- a/truebit-implementation/node_modules/eventemitter3/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# EventEmitter3 - -[![Version npm](https://img.shields.io/npm/v/eventemitter3.svg?style=flat-square)](http://browsenpm.org/package/eventemitter3)[![Build Status](https://img.shields.io/travis/primus/eventemitter3/master.svg?style=flat-square)](https://travis-ci.org/primus/eventemitter3)[![Dependencies](https://img.shields.io/david/primus/eventemitter3.svg?style=flat-square)](https://david-dm.org/primus/eventemitter3)[![Coverage Status](https://img.shields.io/coveralls/primus/eventemitter3/master.svg?style=flat-square)](https://coveralls.io/r/primus/eventemitter3?branch=master)[![IRC channel](https://img.shields.io/badge/IRC-irc.freenode.net%23primus-00a8ff.svg?style=flat-square)](https://webchat.freenode.net/?channels=primus) - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/eventemitter3.svg)](https://saucelabs.com/u/eventemitter3) - -EventEmitter3 is a high performance EventEmitter. It has been micro-optimized -for various of code paths making this, one of, if not the fastest EventEmitter -available for Node.js and browsers. The module is API compatible with the -EventEmitter that ships by default with Node.js but there are some slight -differences: - -- Domain support has been removed. -- We do not `throw` an error when you emit an `error` event and nobody is - listening. -- The `newListener` event is removed as the use-cases for this functionality are - really just edge cases. -- No `setMaxListeners` and it's pointless memory leak warnings. If you want to - add `end` listeners you should be able to do that without modules complaining. -- No `listenerCount` function. Use `EE.listeners(event).length` instead. -- Support for custom context for events so there is no need to use `fn.bind`. -- `listeners` method can do existence checking instead of returning only arrays. - -It's a drop in replacement for existing EventEmitters, but just faster. Free -performance, who wouldn't want that? The EventEmitter is written in EcmaScript 3 -so it will work in the oldest browsers and node versions that you need to -support. - -## Installation - -```bash -$ npm install --save eventemitter3 # npm -$ component install primus/eventemitter3 # Component -$ bower install eventemitter3 # Bower -``` - -## Usage - -After installation the only thing you need to do is require the module: - -```js -var EventEmitter = require('eventemitter3'); -``` - -And you're ready to create your own EventEmitter instances. For the API -documentation, please follow the official Node.js documentation: - -http://nodejs.org/api/events.html - -### Contextual emits - -We've upgraded the API of the `EventEmitter.on`, `EventEmitter.once` and -`EventEmitter.removeListener` to accept an extra argument which is the `context` -or `this` value that should be set for the emitted events. This means you no -longer have the overhead of an event that required `fn.bind` in order to get a -custom `this` value. - -```js -var EE = new EventEmitter() - , context = { foo: 'bar' }; - -function emitted() { - console.log(this === context); // true -} - -EE.once('event-name', emitted, context); -EE.on('another-event', emitted, context); -EE.removeListener('another-event', emitted, context); -``` - -### Existence - -To check if there is already a listener for a given event you can supply the -`listeners` method with an extra boolean argument. This will transform the -output from an array, to a boolean value which indicates if there are listeners -in place for the given event: - -```js -var EE = new EventEmitter(); -EE.once('event-name', function () {}); -EE.on('another-event', function () {}); - -EE.listeners('event-name', true); // returns true -EE.listeners('unknown-name', true); // returns false -``` - -## License - -[MIT](LICENSE) diff --git a/truebit-implementation/node_modules/eventemitter3/index.js b/truebit-implementation/node_modules/eventemitter3/index.js deleted file mode 100644 index d586cad7..00000000 --- a/truebit-implementation/node_modules/eventemitter3/index.js +++ /dev/null @@ -1,262 +0,0 @@ -'use strict'; - -// -// We store our EE objects in a plain object whose properties are event names. -// If `Object.create(null)` is not supported we prefix the event names with a -// `~` to make sure that the built-in object properties are not overridden or -// used as an attack vector. -// We also assume that `Object.create(null)` is available when the event name -// is an ES6 Symbol. -// -var prefix = typeof Object.create !== 'function' ? '~' : false; - -/** - * Representation of a single EventEmitter function. - * - * @param {Function} fn Event handler to be called. - * @param {Mixed} context Context for function execution. - * @param {Boolean} once Only emit once - * @api private - */ -function EE(fn, context, once) { - this.fn = fn; - this.context = context; - this.once = once || false; -} - -/** - * Minimal EventEmitter interface that is molded against the Node.js - * EventEmitter interface. - * - * @constructor - * @api public - */ -function EventEmitter() { /* Nothing to set */ } - -/** - * Holds the assigned EventEmitters by name. - * - * @type {Object} - * @private - */ -EventEmitter.prototype._events = undefined; - -/** - * Return a list of assigned event listeners. - * - * @param {String} event The events that should be listed. - * @param {Boolean} exists We only need to know if there are listeners. - * @returns {Array|Boolean} - * @api public - */ -EventEmitter.prototype.listeners = function listeners(event, exists) { - var evt = prefix ? prefix + event : event - , available = this._events && this._events[evt]; - - if (exists) return !!available; - if (!available) return []; - if (available.fn) return [available.fn]; - - for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) { - ee[i] = available[i].fn; - } - - return ee; -}; - -/** - * Emit an event to all registered event listeners. - * - * @param {String} event The name of the event. - * @returns {Boolean} Indication if we've emitted an event. - * @api public - */ -EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { - var evt = prefix ? prefix + event : event; - - if (!this._events || !this._events[evt]) return false; - - var listeners = this._events[evt] - , len = arguments.length - , args - , i; - - if ('function' === typeof listeners.fn) { - if (listeners.once) this.removeListener(event, listeners.fn, undefined, true); - - switch (len) { - case 1: return listeners.fn.call(listeners.context), true; - case 2: return listeners.fn.call(listeners.context, a1), true; - case 3: return listeners.fn.call(listeners.context, a1, a2), true; - case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; - case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; - case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; - } - - for (i = 1, args = new Array(len -1); i < len; i++) { - args[i - 1] = arguments[i]; - } - - listeners.fn.apply(listeners.context, args); - } else { - var length = listeners.length - , j; - - for (i = 0; i < length; i++) { - if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true); - - switch (len) { - case 1: listeners[i].fn.call(listeners[i].context); break; - case 2: listeners[i].fn.call(listeners[i].context, a1); break; - case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break; - default: - if (!args) for (j = 1, args = new Array(len -1); j < len; j++) { - args[j - 1] = arguments[j]; - } - - listeners[i].fn.apply(listeners[i].context, args); - } - } - } - - return true; -}; - -/** - * Register a new EventListener for the given event. - * - * @param {String} event Name of the event. - * @param {Functon} fn Callback function. - * @param {Mixed} context The context of the function. - * @api public - */ -EventEmitter.prototype.on = function on(event, fn, context) { - var listener = new EE(fn, context || this) - , evt = prefix ? prefix + event : event; - - if (!this._events) this._events = prefix ? {} : Object.create(null); - if (!this._events[evt]) this._events[evt] = listener; - else { - if (!this._events[evt].fn) this._events[evt].push(listener); - else this._events[evt] = [ - this._events[evt], listener - ]; - } - - return this; -}; - -/** - * Add an EventListener that's only called once. - * - * @param {String} event Name of the event. - * @param {Function} fn Callback function. - * @param {Mixed} context The context of the function. - * @api public - */ -EventEmitter.prototype.once = function once(event, fn, context) { - var listener = new EE(fn, context || this, true) - , evt = prefix ? prefix + event : event; - - if (!this._events) this._events = prefix ? {} : Object.create(null); - if (!this._events[evt]) this._events[evt] = listener; - else { - if (!this._events[evt].fn) this._events[evt].push(listener); - else this._events[evt] = [ - this._events[evt], listener - ]; - } - - return this; -}; - -/** - * Remove event listeners. - * - * @param {String} event The event we want to remove. - * @param {Function} fn The listener that we need to find. - * @param {Mixed} context Only remove listeners matching this context. - * @param {Boolean} once Only remove once listeners. - * @api public - */ -EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) { - var evt = prefix ? prefix + event : event; - - if (!this._events || !this._events[evt]) return this; - - var listeners = this._events[evt] - , events = []; - - if (fn) { - if (listeners.fn) { - if ( - listeners.fn !== fn - || (once && !listeners.once) - || (context && listeners.context !== context) - ) { - events.push(listeners); - } - } else { - for (var i = 0, length = listeners.length; i < length; i++) { - if ( - listeners[i].fn !== fn - || (once && !listeners[i].once) - || (context && listeners[i].context !== context) - ) { - events.push(listeners[i]); - } - } - } - } - - // - // Reset the array, or remove it completely if we have no more listeners. - // - if (events.length) { - this._events[evt] = events.length === 1 ? events[0] : events; - } else { - delete this._events[evt]; - } - - return this; -}; - -/** - * Remove all listeners or only the listeners for the specified event. - * - * @param {String} event The event want to remove all listeners for. - * @api public - */ -EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { - if (!this._events) return this; - - if (event) delete this._events[prefix ? prefix + event : event]; - else this._events = prefix ? {} : Object.create(null); - - return this; -}; - -// -// Alias methods names because people roll like that. -// -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; -EventEmitter.prototype.addListener = EventEmitter.prototype.on; - -// -// This function doesn't apply anymore. -// -EventEmitter.prototype.setMaxListeners = function setMaxListeners() { - return this; -}; - -// -// Expose the prefix. -// -EventEmitter.prefixed = prefix; - -// -// Expose the module. -// -if ('undefined' !== typeof module) { - module.exports = EventEmitter; -} diff --git a/truebit-implementation/node_modules/eventemitter3/package.json b/truebit-implementation/node_modules/eventemitter3/package.json deleted file mode 100644 index 86ea1ece..00000000 --- a/truebit-implementation/node_modules/eventemitter3/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "eventemitter3@1.1.1", - "_id": "eventemitter3@1.1.1", - "_inBundle": false, - "_integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=", - "_location": "/eventemitter3", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "eventemitter3@1.1.1", - "name": "eventemitter3", - "escapedName": "eventemitter3", - "rawSpec": "1.1.1", - "saveSpec": null, - "fetchSpec": "1.1.1" - }, - "_requiredBy": [ - "/web3-core-promievent", - "/web3-core-subscriptions" - ], - "_resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "_shasum": "47786bdaa087caf7b1b75e73abc5c7d540158cd0", - "_spec": "eventemitter3@1.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core-promievent", - "author": { - "name": "Arnout Kazemier" - }, - "bugs": { - "url": "https://github.com/primus/eventemitter3/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "EventEmitter3 focuses on performance while maintaining a Node.js AND browser compatible interface.", - "devDependencies": { - "assume": "1.2.x", - "istanbul": "0.3.x", - "mocha": "2.2.x", - "pre-commit": "1.0.x", - "zuul": "3.0.x" - }, - "homepage": "https://github.com/primus/eventemitter3#readme", - "keywords": [ - "EventEmitter", - "EventEmitter2", - "EventEmitter3", - "Events", - "addEventListener", - "addListener", - "emit", - "emits", - "emitter", - "event", - "once", - "pub/sub", - "publish", - "reactor", - "subscribe" - ], - "license": "MIT", - "main": "index.js", - "name": "eventemitter3", - "pre-commit": "sync, test", - "repository": { - "type": "git", - "url": "git://github.com/primus/eventemitter3.git" - }, - "scripts": { - "coverage": "istanbul cover ./node_modules/.bin/_mocha -- test.js", - "sync": "node versions.js", - "test": "mocha test.js", - "test-browser": "zuul --browser-name ${BROWSER_NAME} --browser-version ${BROWSER_VERSION} -- test.js", - "test-node": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- test.js" - }, - "version": "1.1.1" -} diff --git a/truebit-implementation/node_modules/evp_bytestokey/LICENSE b/truebit-implementation/node_modules/evp_bytestokey/LICENSE deleted file mode 100644 index f06007ae..00000000 --- a/truebit-implementation/node_modules/evp_bytestokey/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 crypto-browserify contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/evp_bytestokey/README.md b/truebit-implementation/node_modules/evp_bytestokey/README.md deleted file mode 100644 index 36da2382..00000000 --- a/truebit-implementation/node_modules/evp_bytestokey/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# EVP\_BytesToKey -[![NPM Package](https://img.shields.io/npm/v/evp_bytestokey.svg?style=flat-square)](https://www.npmjs.org/package/evp_bytestokey) -[![Build Status](https://img.shields.io/travis/crypto-browserify/EVP_BytesToKey.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/EVP_BytesToKey) -[![Dependency status](https://img.shields.io/david/crypto-browserify/EVP_BytesToKey.svg?style=flat-square)](https://david-dm.org/crypto-browserify/EVP_BytesToKey#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -The insecure [key derivation algorithm from OpenSSL.][1] - -**WARNING: DO NOT USE, except for compatibility reasons.** - -MD5 is insecure. - -Use at least `scrypt` or `pbkdf2-hmac-sha256` instead. - - -## API -`EVP_BytesToKey(password, salt, keyLen, ivLen)` - -* `password` - `Buffer`, password used to derive the key data. -* `salt` - 8 byte `Buffer` or `null`, salt is used as a salt in the derivation. -* `keyBits` - `number`, key length in **bits**. -* `ivLen` - `number`, iv length in bytes. - -*Returns*: `{ key: Buffer, iv: Buffer }` - - -## Examples -MD5 with `aes-256-cbc`: - -```js -const crypto = require('crypto') -const EVP_BytesToKey = require('evp_bytestokey') - -const result = EVP_BytesToKey( - 'my-secret-password', - null, - 32, - 16 -) -// => -// { key: , -// iv: } - -const cipher = crypto.createCipheriv('aes-256-cbc', result.key, result.iv) -``` - -## LICENSE [MIT](LICENSE) - -[1]: https://wiki.openssl.org/index.php/Manual:EVP_BytesToKey(3) -[2]: https://nodejs.org/api/crypto.html#crypto_class_hash diff --git a/truebit-implementation/node_modules/evp_bytestokey/index.js b/truebit-implementation/node_modules/evp_bytestokey/index.js deleted file mode 100644 index f9d4757d..00000000 --- a/truebit-implementation/node_modules/evp_bytestokey/index.js +++ /dev/null @@ -1,45 +0,0 @@ -var Buffer = require('safe-buffer').Buffer -var MD5 = require('md5.js') - -/* eslint-disable camelcase */ -function EVP_BytesToKey (password, salt, keyBits, ivLen) { - if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') - if (salt) { - if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') - if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') - } - - var keyLen = keyBits / 8 - var key = Buffer.alloc(keyLen) - var iv = Buffer.alloc(ivLen || 0) - var tmp = Buffer.alloc(0) - - while (keyLen > 0 || ivLen > 0) { - var hash = new MD5() - hash.update(tmp) - hash.update(password) - if (salt) hash.update(salt) - tmp = hash.digest() - - var used = 0 - - if (keyLen > 0) { - var keyStart = key.length - keyLen - used = Math.min(keyLen, tmp.length) - tmp.copy(key, keyStart, 0, used) - keyLen -= used - } - - if (used < tmp.length && ivLen > 0) { - var ivStart = iv.length - ivLen - var length = Math.min(ivLen, tmp.length - used) - tmp.copy(iv, ivStart, used, used + length) - ivLen -= length - } - } - - tmp.fill(0) - return { key: key, iv: iv } -} - -module.exports = EVP_BytesToKey diff --git a/truebit-implementation/node_modules/evp_bytestokey/package.json b/truebit-implementation/node_modules/evp_bytestokey/package.json deleted file mode 100644 index f49d2010..00000000 --- a/truebit-implementation/node_modules/evp_bytestokey/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "evp_bytestokey@^1.0.0", - "_id": "evp_bytestokey@1.0.3", - "_inBundle": false, - "_integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "_location": "/evp_bytestokey", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "evp_bytestokey@^1.0.0", - "name": "evp_bytestokey", - "escapedName": "evp_bytestokey", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/browserify-aes", - "/browserify-cipher", - "/parse-asn1" - ], - "_resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "_shasum": "7fcbdb198dc71959432efe13842684e0525acb02", - "_spec": "evp_bytestokey@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/browserify-cipher", - "author": { - "name": "Calvin Metcalf", - "email": "calvin.metcalf@gmail.com" - }, - "bugs": { - "url": "https://github.com/crypto-browserify/EVP_BytesToKey/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Kirill Fomichev", - "email": "fanatid@ya.ru" - } - ], - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - }, - "deprecated": false, - "description": "The insecure key derivation algorithm from OpenSSL", - "devDependencies": { - "bindings": "^1.2.1", - "nan": "^2.4.0", - "nyc": "^8.1.0", - "standard": "^8.0.0", - "tape": "^4.6.0" - }, - "files": [ - "index.js" - ], - "gypfile": false, - "homepage": "https://github.com/crypto-browserify/EVP_BytesToKey", - "keywords": [ - "crypto", - "openssl" - ], - "license": "MIT", - "main": "index.js", - "name": "evp_bytestokey", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/EVP_BytesToKey.git" - }, - "scripts": { - "coverage": "nyc tape test/*.js", - "lint": "standard", - "test": "npm run lint && npm run unit", - "test:prepare": "node-gyp rebuild", - "unit": "tape test/*.js" - }, - "version": "1.0.3" -} diff --git a/truebit-implementation/node_modules/express/History.md b/truebit-implementation/node_modules/express/History.md deleted file mode 100644 index 2f6eab10..00000000 --- a/truebit-implementation/node_modules/express/History.md +++ /dev/null @@ -1,3421 +0,0 @@ -4.16.4 / 2018-10-10 -=================== - - * Fix issue where `"Request aborted"` may be logged in `res.sendfile` - * Fix JSDoc for `Router` constructor - * deps: body-parser@1.18.3 - - Fix deprecation warnings on Node.js 10+ - - Fix stack trace for strict json parse error - - deps: depd@~1.1.2 - - deps: http-errors@~1.6.3 - - deps: iconv-lite@0.4.23 - - deps: qs@6.5.2 - - deps: raw-body@2.3.3 - - deps: type-is@~1.6.16 - * deps: proxy-addr@~2.0.4 - - deps: ipaddr.js@1.8.0 - * deps: qs@6.5.2 - * deps: safe-buffer@5.1.2 - -4.16.3 / 2018-03-12 -=================== - - * deps: accepts@~1.3.5 - - deps: mime-types@~2.1.18 - * deps: depd@~1.1.2 - - perf: remove argument reassignment - * deps: encodeurl@~1.0.2 - - Fix encoding `%` as last character - * deps: finalhandler@1.1.1 - - Fix 404 output for bad / missing pathnames - - deps: encodeurl@~1.0.2 - - deps: statuses@~1.4.0 - * deps: proxy-addr@~2.0.3 - - deps: ipaddr.js@1.6.0 - * deps: send@0.16.2 - - Fix incorrect end tag in default error & redirects - - deps: depd@~1.1.2 - - deps: encodeurl@~1.0.2 - - deps: statuses@~1.4.0 - * deps: serve-static@1.13.2 - - Fix incorrect end tag in redirects - - deps: encodeurl@~1.0.2 - - deps: send@0.16.2 - * deps: statuses@~1.4.0 - * deps: type-is@~1.6.16 - - deps: mime-types@~2.1.18 - -4.16.2 / 2017-10-09 -=================== - - * Fix `TypeError` in `res.send` when given `Buffer` and `ETag` header set - * perf: skip parsing of entire `X-Forwarded-Proto` header - -4.16.1 / 2017-09-29 -=================== - - * deps: send@0.16.1 - * deps: serve-static@1.13.1 - - Fix regression when `root` is incorrectly set to a file - - deps: send@0.16.1 - -4.16.0 / 2017-09-28 -=================== - - * Add `"json escape"` setting for `res.json` and `res.jsonp` - * Add `express.json` and `express.urlencoded` to parse bodies - * Add `options` argument to `res.download` - * Improve error message when autoloading invalid view engine - * Improve error messages when non-function provided as middleware - * Skip `Buffer` encoding when not generating ETag for small response - * Use `safe-buffer` for improved Buffer API - * deps: accepts@~1.3.4 - - deps: mime-types@~2.1.16 - * deps: content-type@~1.0.4 - - perf: remove argument reassignment - - perf: skip parameter parsing when no parameters - * deps: etag@~1.8.1 - - perf: replace regular expression with substring - * deps: finalhandler@1.1.0 - - Use `res.headersSent` when available - * deps: parseurl@~1.3.2 - - perf: reduce overhead for full URLs - - perf: unroll the "fast-path" `RegExp` - * deps: proxy-addr@~2.0.2 - - Fix trimming leading / trailing OWS in `X-Forwarded-For` - - deps: forwarded@~0.1.2 - - deps: ipaddr.js@1.5.2 - - perf: reduce overhead when no `X-Forwarded-For` header - * deps: qs@6.5.1 - - Fix parsing & compacting very deep objects - * deps: send@0.16.0 - - Add 70 new types for file extensions - - Add `immutable` option - - Fix missing `` in default error & redirects - - Set charset as "UTF-8" for .js and .json - - Use instance methods on steam to check for listeners - - deps: mime@1.4.1 - - perf: improve path validation speed - * deps: serve-static@1.13.0 - - Add 70 new types for file extensions - - Add `immutable` option - - Set charset as "UTF-8" for .js and .json - - deps: send@0.16.0 - * deps: setprototypeof@1.1.0 - * deps: utils-merge@1.0.1 - * deps: vary@~1.1.2 - - perf: improve header token parsing speed - * perf: re-use options object when generating ETags - * perf: remove dead `.charset` set in `res.jsonp` - -4.15.5 / 2017-09-24 -=================== - - * deps: debug@2.6.9 - * deps: finalhandler@~1.0.6 - - deps: debug@2.6.9 - - deps: parseurl@~1.3.2 - * deps: fresh@0.5.2 - - Fix handling of modified headers with invalid dates - - perf: improve ETag match loop - - perf: improve `If-None-Match` token parsing - * deps: send@0.15.6 - - Fix handling of modified headers with invalid dates - - deps: debug@2.6.9 - - deps: etag@~1.8.1 - - deps: fresh@0.5.2 - - perf: improve `If-Match` token parsing - * deps: serve-static@1.12.6 - - deps: parseurl@~1.3.2 - - deps: send@0.15.6 - - perf: improve slash collapsing - -4.15.4 / 2017-08-06 -=================== - - * deps: debug@2.6.8 - * deps: depd@~1.1.1 - - Remove unnecessary `Buffer` loading - * deps: finalhandler@~1.0.4 - - deps: debug@2.6.8 - * deps: proxy-addr@~1.1.5 - - Fix array argument being altered - - deps: ipaddr.js@1.4.0 - * deps: qs@6.5.0 - * deps: send@0.15.4 - - deps: debug@2.6.8 - - deps: depd@~1.1.1 - - deps: http-errors@~1.6.2 - * deps: serve-static@1.12.4 - - deps: send@0.15.4 - -4.15.3 / 2017-05-16 -=================== - - * Fix error when `res.set` cannot add charset to `Content-Type` - * deps: debug@2.6.7 - - Fix `DEBUG_MAX_ARRAY_LENGTH` - - deps: ms@2.0.0 - * deps: finalhandler@~1.0.3 - - Fix missing `` in HTML document - - deps: debug@2.6.7 - * deps: proxy-addr@~1.1.4 - - deps: ipaddr.js@1.3.0 - * deps: send@0.15.3 - - deps: debug@2.6.7 - - deps: ms@2.0.0 - * deps: serve-static@1.12.3 - - deps: send@0.15.3 - * deps: type-is@~1.6.15 - - deps: mime-types@~2.1.15 - * deps: vary@~1.1.1 - - perf: hoist regular expression - -4.15.2 / 2017-03-06 -=================== - - * deps: qs@6.4.0 - - Fix regression parsing keys starting with `[` - -4.15.1 / 2017-03-05 -=================== - - * deps: send@0.15.1 - - Fix issue when `Date.parse` does not return `NaN` on invalid date - - Fix strict violation in broken environments - * deps: serve-static@1.12.1 - - Fix issue when `Date.parse` does not return `NaN` on invalid date - - deps: send@0.15.1 - -4.15.0 / 2017-03-01 -=================== - - * Add debug message when loading view engine - * Add `next("router")` to exit from router - * Fix case where `router.use` skipped requests routes did not - * Remove usage of `res._headers` private field - - Improves compatibility with Node.js 8 nightly - * Skip routing when `req.url` is not set - * Use `%o` in path debug to tell types apart - * Use `Object.create` to setup request & response prototypes - * Use `setprototypeof` module to replace `__proto__` setting - * Use `statuses` instead of `http` module for status messages - * deps: debug@2.6.1 - - Allow colors in workers - - Deprecated `DEBUG_FD` environment variable set to `3` or higher - - Fix error when running under React Native - - Use same color for same namespace - - deps: ms@0.7.2 - * deps: etag@~1.8.0 - - Use SHA1 instead of MD5 for ETag hashing - - Works with FIPS 140-2 OpenSSL configuration - * deps: finalhandler@~1.0.0 - - Fix exception when `err` cannot be converted to a string - - Fully URL-encode the pathname in the 404 - - Only include the pathname in the 404 message - - Send complete HTML document - - Set `Content-Security-Policy: default-src 'self'` header - - deps: debug@2.6.1 - * deps: fresh@0.5.0 - - Fix false detection of `no-cache` request directive - - Fix incorrect result when `If-None-Match` has both `*` and ETags - - Fix weak `ETag` matching to match spec - - perf: delay reading header values until needed - - perf: enable strict mode - - perf: hoist regular expressions - - perf: remove duplicate conditional - - perf: remove unnecessary boolean coercions - - perf: skip checking modified time if ETag check failed - - perf: skip parsing `If-None-Match` when no `ETag` header - - perf: use `Date.parse` instead of `new Date` - * deps: qs@6.3.1 - - Fix array parsing from skipping empty values - - Fix compacting nested arrays - * deps: send@0.15.0 - - Fix false detection of `no-cache` request directive - - Fix incorrect result when `If-None-Match` has both `*` and ETags - - Fix weak `ETag` matching to match spec - - Remove usage of `res._headers` private field - - Support `If-Match` and `If-Unmodified-Since` headers - - Use `res.getHeaderNames()` when available - - Use `res.headersSent` when available - - deps: debug@2.6.1 - - deps: etag@~1.8.0 - - deps: fresh@0.5.0 - - deps: http-errors@~1.6.1 - * deps: serve-static@1.12.0 - - Fix false detection of `no-cache` request directive - - Fix incorrect result when `If-None-Match` has both `*` and ETags - - Fix weak `ETag` matching to match spec - - Remove usage of `res._headers` private field - - Send complete HTML document in redirect response - - Set default CSP header in redirect response - - Support `If-Match` and `If-Unmodified-Since` headers - - Use `res.getHeaderNames()` when available - - Use `res.headersSent` when available - - deps: send@0.15.0 - * perf: add fast match path for `*` route - * perf: improve `req.ips` performance - -4.14.1 / 2017-01-28 -=================== - - * deps: content-disposition@0.5.2 - * deps: finalhandler@0.5.1 - - Fix exception when `err.headers` is not an object - - deps: statuses@~1.3.1 - - perf: hoist regular expressions - - perf: remove duplicate validation path - * deps: proxy-addr@~1.1.3 - - deps: ipaddr.js@1.2.0 - * deps: send@0.14.2 - - deps: http-errors@~1.5.1 - - deps: ms@0.7.2 - - deps: statuses@~1.3.1 - * deps: serve-static@~1.11.2 - - deps: send@0.14.2 - * deps: type-is@~1.6.14 - - deps: mime-types@~2.1.13 - -4.14.0 / 2016-06-16 -=================== - - * Add `acceptRanges` option to `res.sendFile`/`res.sendfile` - * Add `cacheControl` option to `res.sendFile`/`res.sendfile` - * Add `options` argument to `req.range` - - Includes the `combine` option - * Encode URL in `res.location`/`res.redirect` if not already encoded - * Fix some redirect handling in `res.sendFile`/`res.sendfile` - * Fix Windows absolute path check using forward slashes - * Improve error with invalid arguments to `req.get()` - * Improve performance for `res.json`/`res.jsonp` in most cases - * Improve `Range` header handling in `res.sendFile`/`res.sendfile` - * deps: accepts@~1.3.3 - - Fix including type extensions in parameters in `Accept` parsing - - Fix parsing `Accept` parameters with quoted equals - - Fix parsing `Accept` parameters with quoted semicolons - - Many performance improvments - - deps: mime-types@~2.1.11 - - deps: negotiator@0.6.1 - * deps: content-type@~1.0.2 - - perf: enable strict mode - * deps: cookie@0.3.1 - - Add `sameSite` option - - Fix cookie `Max-Age` to never be a floating point number - - Improve error message when `encode` is not a function - - Improve error message when `expires` is not a `Date` - - Throw better error for invalid argument to parse - - Throw on invalid values provided to `serialize` - - perf: enable strict mode - - perf: hoist regular expression - - perf: use for loop in parse - - perf: use string concatination for serialization - * deps: finalhandler@0.5.0 - - Change invalid or non-numeric status code to 500 - - Overwrite status message to match set status code - - Prefer `err.statusCode` if `err.status` is invalid - - Set response headers from `err.headers` object - - Use `statuses` instead of `http` module for status messages - * deps: proxy-addr@~1.1.2 - - Fix accepting various invalid netmasks - - Fix IPv6-mapped IPv4 validation edge cases - - IPv4 netmasks must be contingous - - IPv6 addresses cannot be used as a netmask - - deps: ipaddr.js@1.1.1 - * deps: qs@6.2.0 - - Add `decoder` option in `parse` function - * deps: range-parser@~1.2.0 - - Add `combine` option to combine overlapping ranges - - Fix incorrectly returning -1 when there is at least one valid range - - perf: remove internal function - * deps: send@0.14.1 - - Add `acceptRanges` option - - Add `cacheControl` option - - Attempt to combine multiple ranges into single range - - Correctly inherit from `Stream` class - - Fix `Content-Range` header in 416 responses when using `start`/`end` options - - Fix `Content-Range` header missing from default 416 responses - - Fix redirect error when `path` contains raw non-URL characters - - Fix redirect when `path` starts with multiple forward slashes - - Ignore non-byte `Range` headers - - deps: http-errors@~1.5.0 - - deps: range-parser@~1.2.0 - - deps: statuses@~1.3.0 - - perf: remove argument reassignment - * deps: serve-static@~1.11.1 - - Add `acceptRanges` option - - Add `cacheControl` option - - Attempt to combine multiple ranges into single range - - Fix redirect error when `req.url` contains raw non-URL characters - - Ignore non-byte `Range` headers - - Use status code 301 for redirects - - deps: send@0.14.1 - * deps: type-is@~1.6.13 - - Fix type error when given invalid type to match against - - deps: mime-types@~2.1.11 - * deps: vary@~1.1.0 - - Only accept valid field names in the `field` argument - * perf: use strict equality when possible - -4.13.4 / 2016-01-21 -=================== - - * deps: content-disposition@0.5.1 - - perf: enable strict mode - * deps: cookie@0.1.5 - - Throw on invalid values provided to `serialize` - * deps: depd@~1.1.0 - - Support web browser loading - - perf: enable strict mode - * deps: escape-html@~1.0.3 - - perf: enable strict mode - - perf: optimize string replacement - - perf: use faster string coercion - * deps: finalhandler@0.4.1 - - deps: escape-html@~1.0.3 - * deps: merge-descriptors@1.0.1 - - perf: enable strict mode - * deps: methods@~1.1.2 - - perf: enable strict mode - * deps: parseurl@~1.3.1 - - perf: enable strict mode - * deps: proxy-addr@~1.0.10 - - deps: ipaddr.js@1.0.5 - - perf: enable strict mode - * deps: range-parser@~1.0.3 - - perf: enable strict mode - * deps: send@0.13.1 - - deps: depd@~1.1.0 - - deps: destroy@~1.0.4 - - deps: escape-html@~1.0.3 - - deps: range-parser@~1.0.3 - * deps: serve-static@~1.10.2 - - deps: escape-html@~1.0.3 - - deps: parseurl@~1.3.0 - - deps: send@0.13.1 - -4.13.3 / 2015-08-02 -=================== - - * Fix infinite loop condition using `mergeParams: true` - * Fix inner numeric indices incorrectly altering parent `req.params` - -4.13.2 / 2015-07-31 -=================== - - * deps: accepts@~1.2.12 - - deps: mime-types@~2.1.4 - * deps: array-flatten@1.1.1 - - perf: enable strict mode - * deps: path-to-regexp@0.1.7 - - Fix regression with escaped round brackets and matching groups - * deps: type-is@~1.6.6 - - deps: mime-types@~2.1.4 - -4.13.1 / 2015-07-05 -=================== - - * deps: accepts@~1.2.10 - - deps: mime-types@~2.1.2 - * deps: qs@4.0.0 - - Fix dropping parameters like `hasOwnProperty` - - Fix various parsing edge cases - * deps: type-is@~1.6.4 - - deps: mime-types@~2.1.2 - - perf: enable strict mode - - perf: remove argument reassignment - -4.13.0 / 2015-06-20 -=================== - - * Add settings to debug output - * Fix `res.format` error when only `default` provided - * Fix issue where `next('route')` in `app.param` would incorrectly skip values - * Fix hiding platform issues with `decodeURIComponent` - - Only `URIError`s are a 400 - * Fix using `*` before params in routes - * Fix using capture groups before params in routes - * Simplify `res.cookie` to call `res.append` - * Use `array-flatten` module for flattening arrays - * deps: accepts@~1.2.9 - - deps: mime-types@~2.1.1 - - perf: avoid argument reassignment & argument slice - - perf: avoid negotiator recursive construction - - perf: enable strict mode - - perf: remove unnecessary bitwise operator - * deps: cookie@0.1.3 - - perf: deduce the scope of try-catch deopt - - perf: remove argument reassignments - * deps: escape-html@1.0.2 - * deps: etag@~1.7.0 - - Always include entity length in ETags for hash length extensions - - Generate non-Stats ETags using MD5 only (no longer CRC32) - - Improve stat performance by removing hashing - - Improve support for JXcore - - Remove base64 padding in ETags to shorten - - Support "fake" stats objects in environments without fs - - Use MD5 instead of MD4 in weak ETags over 1KB - * deps: finalhandler@0.4.0 - - Fix a false-positive when unpiping in Node.js 0.8 - - Support `statusCode` property on `Error` objects - - Use `unpipe` module for unpiping requests - - deps: escape-html@1.0.2 - - deps: on-finished@~2.3.0 - - perf: enable strict mode - - perf: remove argument reassignment - * deps: fresh@0.3.0 - - Add weak `ETag` matching support - * deps: on-finished@~2.3.0 - - Add defined behavior for HTTP `CONNECT` requests - - Add defined behavior for HTTP `Upgrade` requests - - deps: ee-first@1.1.1 - * deps: path-to-regexp@0.1.6 - * deps: send@0.13.0 - - Allow Node.js HTTP server to set `Date` response header - - Fix incorrectly removing `Content-Location` on 304 response - - Improve the default redirect response headers - - Send appropriate headers on default error response - - Use `http-errors` for standard emitted errors - - Use `statuses` instead of `http` module for status messages - - deps: escape-html@1.0.2 - - deps: etag@~1.7.0 - - deps: fresh@0.3.0 - - deps: on-finished@~2.3.0 - - perf: enable strict mode - - perf: remove unnecessary array allocations - * deps: serve-static@~1.10.0 - - Add `fallthrough` option - - Fix reading options from options prototype - - Improve the default redirect response headers - - Malformed URLs now `next()` instead of 400 - - deps: escape-html@1.0.2 - - deps: send@0.13.0 - - perf: enable strict mode - - perf: remove argument reassignment - * deps: type-is@~1.6.3 - - deps: mime-types@~2.1.1 - - perf: reduce try block size - - perf: remove bitwise operations - * perf: enable strict mode - * perf: isolate `app.render` try block - * perf: remove argument reassignments in application - * perf: remove argument reassignments in request prototype - * perf: remove argument reassignments in response prototype - * perf: remove argument reassignments in routing - * perf: remove argument reassignments in `View` - * perf: skip attempting to decode zero length string - * perf: use saved reference to `http.STATUS_CODES` - -4.12.4 / 2015-05-17 -=================== - - * deps: accepts@~1.2.7 - - deps: mime-types@~2.0.11 - - deps: negotiator@0.5.3 - * deps: debug@~2.2.0 - - deps: ms@0.7.1 - * deps: depd@~1.0.1 - * deps: etag@~1.6.0 - - Improve support for JXcore - - Support "fake" stats objects in environments without `fs` - * deps: finalhandler@0.3.6 - - deps: debug@~2.2.0 - - deps: on-finished@~2.2.1 - * deps: on-finished@~2.2.1 - - Fix `isFinished(req)` when data buffered - * deps: proxy-addr@~1.0.8 - - deps: ipaddr.js@1.0.1 - * deps: qs@2.4.2 - - Fix allowing parameters like `constructor` - * deps: send@0.12.3 - - deps: debug@~2.2.0 - - deps: depd@~1.0.1 - - deps: etag@~1.6.0 - - deps: ms@0.7.1 - - deps: on-finished@~2.2.1 - * deps: serve-static@~1.9.3 - - deps: send@0.12.3 - * deps: type-is@~1.6.2 - - deps: mime-types@~2.0.11 - -4.12.3 / 2015-03-17 -=================== - - * deps: accepts@~1.2.5 - - deps: mime-types@~2.0.10 - * deps: debug@~2.1.3 - - Fix high intensity foreground color for bold - - deps: ms@0.7.0 - * deps: finalhandler@0.3.4 - - deps: debug@~2.1.3 - * deps: proxy-addr@~1.0.7 - - deps: ipaddr.js@0.1.9 - * deps: qs@2.4.1 - - Fix error when parameter `hasOwnProperty` is present - * deps: send@0.12.2 - - Throw errors early for invalid `extensions` or `index` options - - deps: debug@~2.1.3 - * deps: serve-static@~1.9.2 - - deps: send@0.12.2 - * deps: type-is@~1.6.1 - - deps: mime-types@~2.0.10 - -4.12.2 / 2015-03-02 -=================== - - * Fix regression where `"Request aborted"` is logged using `res.sendFile` - -4.12.1 / 2015-03-01 -=================== - - * Fix constructing application with non-configurable prototype properties - * Fix `ECONNRESET` errors from `res.sendFile` usage - * Fix `req.host` when using "trust proxy" hops count - * Fix `req.protocol`/`req.secure` when using "trust proxy" hops count - * Fix wrong `code` on aborted connections from `res.sendFile` - * deps: merge-descriptors@1.0.0 - -4.12.0 / 2015-02-23 -=================== - - * Fix `"trust proxy"` setting to inherit when app is mounted - * Generate `ETag`s for all request responses - - No longer restricted to only responses for `GET` and `HEAD` requests - * Use `content-type` to parse `Content-Type` headers - * deps: accepts@~1.2.4 - - Fix preference sorting to be stable for long acceptable lists - - deps: mime-types@~2.0.9 - - deps: negotiator@0.5.1 - * deps: cookie-signature@1.0.6 - * deps: send@0.12.1 - - Always read the stat size from the file - - Fix mutating passed-in `options` - - deps: mime@1.3.4 - * deps: serve-static@~1.9.1 - - deps: send@0.12.1 - * deps: type-is@~1.6.0 - - fix argument reassignment - - fix false-positives in `hasBody` `Transfer-Encoding` check - - support wildcard for both type and subtype (`*/*`) - - deps: mime-types@~2.0.9 - -4.11.2 / 2015-02-01 -=================== - - * Fix `res.redirect` double-calling `res.end` for `HEAD` requests - * deps: accepts@~1.2.3 - - deps: mime-types@~2.0.8 - * deps: proxy-addr@~1.0.6 - - deps: ipaddr.js@0.1.8 - * deps: type-is@~1.5.6 - - deps: mime-types@~2.0.8 - -4.11.1 / 2015-01-20 -=================== - - * deps: send@0.11.1 - - Fix root path disclosure - * deps: serve-static@~1.8.1 - - Fix redirect loop in Node.js 0.11.14 - - Fix root path disclosure - - deps: send@0.11.1 - -4.11.0 / 2015-01-13 -=================== - - * Add `res.append(field, val)` to append headers - * Deprecate leading `:` in `name` for `app.param(name, fn)` - * Deprecate `req.param()` -- use `req.params`, `req.body`, or `req.query` instead - * Deprecate `app.param(fn)` - * Fix `OPTIONS` responses to include the `HEAD` method properly - * Fix `res.sendFile` not always detecting aborted connection - * Match routes iteratively to prevent stack overflows - * deps: accepts@~1.2.2 - - deps: mime-types@~2.0.7 - - deps: negotiator@0.5.0 - * deps: send@0.11.0 - - deps: debug@~2.1.1 - - deps: etag@~1.5.1 - - deps: ms@0.7.0 - - deps: on-finished@~2.2.0 - * deps: serve-static@~1.8.0 - - deps: send@0.11.0 - -4.10.8 / 2015-01-13 -=================== - - * Fix crash from error within `OPTIONS` response handler - * deps: proxy-addr@~1.0.5 - - deps: ipaddr.js@0.1.6 - -4.10.7 / 2015-01-04 -=================== - - * Fix `Allow` header for `OPTIONS` to not contain duplicate methods - * Fix incorrect "Request aborted" for `res.sendFile` when `HEAD` or 304 - * deps: debug@~2.1.1 - * deps: finalhandler@0.3.3 - - deps: debug@~2.1.1 - - deps: on-finished@~2.2.0 - * deps: methods@~1.1.1 - * deps: on-finished@~2.2.0 - * deps: serve-static@~1.7.2 - - Fix potential open redirect when mounted at root - * deps: type-is@~1.5.5 - - deps: mime-types@~2.0.7 - -4.10.6 / 2014-12-12 -=================== - - * Fix exception in `req.fresh`/`req.stale` without response headers - -4.10.5 / 2014-12-10 -=================== - - * Fix `res.send` double-calling `res.end` for `HEAD` requests - * deps: accepts@~1.1.4 - - deps: mime-types@~2.0.4 - * deps: type-is@~1.5.4 - - deps: mime-types@~2.0.4 - -4.10.4 / 2014-11-24 -=================== - - * Fix `res.sendfile` logging standard write errors - -4.10.3 / 2014-11-23 -=================== - - * Fix `res.sendFile` logging standard write errors - * deps: etag@~1.5.1 - * deps: proxy-addr@~1.0.4 - - deps: ipaddr.js@0.1.5 - * deps: qs@2.3.3 - - Fix `arrayLimit` behavior - -4.10.2 / 2014-11-09 -=================== - - * Correctly invoke async router callback asynchronously - * deps: accepts@~1.1.3 - - deps: mime-types@~2.0.3 - * deps: type-is@~1.5.3 - - deps: mime-types@~2.0.3 - -4.10.1 / 2014-10-28 -=================== - - * Fix handling of URLs containing `://` in the path - * deps: qs@2.3.2 - - Fix parsing of mixed objects and values - -4.10.0 / 2014-10-23 -=================== - - * Add support for `app.set('views', array)` - - Views are looked up in sequence in array of directories - * Fix `res.send(status)` to mention `res.sendStatus(status)` - * Fix handling of invalid empty URLs - * Use `content-disposition` module for `res.attachment`/`res.download` - - Sends standards-compliant `Content-Disposition` header - - Full Unicode support - * Use `path.resolve` in view lookup - * deps: debug@~2.1.0 - - Implement `DEBUG_FD` env variable support - * deps: depd@~1.0.0 - * deps: etag@~1.5.0 - - Improve string performance - - Slightly improve speed for weak ETags over 1KB - * deps: finalhandler@0.3.2 - - Terminate in progress response only on error - - Use `on-finished` to determine request status - - deps: debug@~2.1.0 - - deps: on-finished@~2.1.1 - * deps: on-finished@~2.1.1 - - Fix handling of pipelined requests - * deps: qs@2.3.0 - - Fix parsing of mixed implicit and explicit arrays - * deps: send@0.10.1 - - deps: debug@~2.1.0 - - deps: depd@~1.0.0 - - deps: etag@~1.5.0 - - deps: on-finished@~2.1.1 - * deps: serve-static@~1.7.1 - - deps: send@0.10.1 - -4.9.8 / 2014-10-17 -================== - - * Fix `res.redirect` body when redirect status specified - * deps: accepts@~1.1.2 - - Fix error when media type has invalid parameter - - deps: negotiator@0.4.9 - -4.9.7 / 2014-10-10 -================== - - * Fix using same param name in array of paths - -4.9.6 / 2014-10-08 -================== - - * deps: accepts@~1.1.1 - - deps: mime-types@~2.0.2 - - deps: negotiator@0.4.8 - * deps: serve-static@~1.6.4 - - Fix redirect loop when index file serving disabled - * deps: type-is@~1.5.2 - - deps: mime-types@~2.0.2 - -4.9.5 / 2014-09-24 -================== - - * deps: etag@~1.4.0 - * deps: proxy-addr@~1.0.3 - - Use `forwarded` npm module - * deps: send@0.9.3 - - deps: etag@~1.4.0 - * deps: serve-static@~1.6.3 - - deps: send@0.9.3 - -4.9.4 / 2014-09-19 -================== - - * deps: qs@2.2.4 - - Fix issue with object keys starting with numbers truncated - -4.9.3 / 2014-09-18 -================== - - * deps: proxy-addr@~1.0.2 - - Fix a global leak when multiple subnets are trusted - - deps: ipaddr.js@0.1.3 - -4.9.2 / 2014-09-17 -================== - - * Fix regression for empty string `path` in `app.use` - * Fix `router.use` to accept array of middleware without path - * Improve error message for bad `app.use` arguments - -4.9.1 / 2014-09-16 -================== - - * Fix `app.use` to accept array of middleware without path - * deps: depd@0.4.5 - * deps: etag@~1.3.1 - * deps: send@0.9.2 - - deps: depd@0.4.5 - - deps: etag@~1.3.1 - - deps: range-parser@~1.0.2 - * deps: serve-static@~1.6.2 - - deps: send@0.9.2 - -4.9.0 / 2014-09-08 -================== - - * Add `res.sendStatus` - * Invoke callback for sendfile when client aborts - - Applies to `res.sendFile`, `res.sendfile`, and `res.download` - - `err` will be populated with request aborted error - * Support IP address host in `req.subdomains` - * Use `etag` to generate `ETag` headers - * deps: accepts@~1.1.0 - - update `mime-types` - * deps: cookie-signature@1.0.5 - * deps: debug@~2.0.0 - * deps: finalhandler@0.2.0 - - Set `X-Content-Type-Options: nosniff` header - - deps: debug@~2.0.0 - * deps: fresh@0.2.4 - * deps: media-typer@0.3.0 - - Throw error when parameter format invalid on parse - * deps: qs@2.2.3 - - Fix issue where first empty value in array is discarded - * deps: range-parser@~1.0.2 - * deps: send@0.9.1 - - Add `lastModified` option - - Use `etag` to generate `ETag` header - - deps: debug@~2.0.0 - - deps: fresh@0.2.4 - * deps: serve-static@~1.6.1 - - Add `lastModified` option - - deps: send@0.9.1 - * deps: type-is@~1.5.1 - - fix `hasbody` to be true for `content-length: 0` - - deps: media-typer@0.3.0 - - deps: mime-types@~2.0.1 - * deps: vary@~1.0.0 - - Accept valid `Vary` header string as `field` - -4.8.8 / 2014-09-04 -================== - - * deps: send@0.8.5 - - Fix a path traversal issue when using `root` - - Fix malicious path detection for empty string path - * deps: serve-static@~1.5.4 - - deps: send@0.8.5 - -4.8.7 / 2014-08-29 -================== - - * deps: qs@2.2.2 - - Remove unnecessary cloning - -4.8.6 / 2014-08-27 -================== - - * deps: qs@2.2.0 - - Array parsing fix - - Performance improvements - -4.8.5 / 2014-08-18 -================== - - * deps: send@0.8.3 - - deps: destroy@1.0.3 - - deps: on-finished@2.1.0 - * deps: serve-static@~1.5.3 - - deps: send@0.8.3 - -4.8.4 / 2014-08-14 -================== - - * deps: qs@1.2.2 - * deps: send@0.8.2 - - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream` - * deps: serve-static@~1.5.2 - - deps: send@0.8.2 - -4.8.3 / 2014-08-10 -================== - - * deps: parseurl@~1.3.0 - * deps: qs@1.2.1 - * deps: serve-static@~1.5.1 - - Fix parsing of weird `req.originalUrl` values - - deps: parseurl@~1.3.0 - - deps: utils-merge@1.0.0 - -4.8.2 / 2014-08-07 -================== - - * deps: qs@1.2.0 - - Fix parsing array of objects - -4.8.1 / 2014-08-06 -================== - - * fix incorrect deprecation warnings on `res.download` - * deps: qs@1.1.0 - - Accept urlencoded square brackets - - Accept empty values in implicit array notation - -4.8.0 / 2014-08-05 -================== - - * add `res.sendFile` - - accepts a file system path instead of a URL - - requires an absolute path or `root` option specified - * deprecate `res.sendfile` -- use `res.sendFile` instead - * support mounted app as any argument to `app.use()` - * deps: qs@1.0.2 - - Complete rewrite - - Limits array length to 20 - - Limits object depth to 5 - - Limits parameters to 1,000 - * deps: send@0.8.1 - - Add `extensions` option - * deps: serve-static@~1.5.0 - - Add `extensions` option - - deps: send@0.8.1 - -4.7.4 / 2014-08-04 -================== - - * fix `res.sendfile` regression for serving directory index files - * deps: send@0.7.4 - - Fix incorrect 403 on Windows and Node.js 0.11 - - Fix serving index files without root dir - * deps: serve-static@~1.4.4 - - deps: send@0.7.4 - -4.7.3 / 2014-08-04 -================== - - * deps: send@0.7.3 - - Fix incorrect 403 on Windows and Node.js 0.11 - * deps: serve-static@~1.4.3 - - Fix incorrect 403 on Windows and Node.js 0.11 - - deps: send@0.7.3 - -4.7.2 / 2014-07-27 -================== - - * deps: depd@0.4.4 - - Work-around v8 generating empty stack traces - * deps: send@0.7.2 - - deps: depd@0.4.4 - * deps: serve-static@~1.4.2 - -4.7.1 / 2014-07-26 -================== - - * deps: depd@0.4.3 - - Fix exception when global `Error.stackTraceLimit` is too low - * deps: send@0.7.1 - - deps: depd@0.4.3 - * deps: serve-static@~1.4.1 - -4.7.0 / 2014-07-25 -================== - - * fix `req.protocol` for proxy-direct connections - * configurable query parser with `app.set('query parser', parser)` - - `app.set('query parser', 'extended')` parse with "qs" module - - `app.set('query parser', 'simple')` parse with "querystring" core module - - `app.set('query parser', false)` disable query string parsing - - `app.set('query parser', true)` enable simple parsing - * deprecate `res.json(status, obj)` -- use `res.status(status).json(obj)` instead - * deprecate `res.jsonp(status, obj)` -- use `res.status(status).jsonp(obj)` instead - * deprecate `res.send(status, body)` -- use `res.status(status).send(body)` instead - * deps: debug@1.0.4 - * deps: depd@0.4.2 - - Add `TRACE_DEPRECATION` environment variable - - Remove non-standard grey color from color output - - Support `--no-deprecation` argument - - Support `--trace-deprecation` argument - * deps: finalhandler@0.1.0 - - Respond after request fully read - - deps: debug@1.0.4 - * deps: parseurl@~1.2.0 - - Cache URLs based on original value - - Remove no-longer-needed URL mis-parse work-around - - Simplify the "fast-path" `RegExp` - * deps: send@0.7.0 - - Add `dotfiles` option - - Cap `maxAge` value to 1 year - - deps: debug@1.0.4 - - deps: depd@0.4.2 - * deps: serve-static@~1.4.0 - - deps: parseurl@~1.2.0 - - deps: send@0.7.0 - * perf: prevent multiple `Buffer` creation in `res.send` - -4.6.1 / 2014-07-12 -================== - - * fix `subapp.mountpath` regression for `app.use(subapp)` - -4.6.0 / 2014-07-11 -================== - - * accept multiple callbacks to `app.use()` - * add explicit "Rosetta Flash JSONP abuse" protection - - previous versions are not vulnerable; this is just explicit protection - * catch errors in multiple `req.param(name, fn)` handlers - * deprecate `res.redirect(url, status)` -- use `res.redirect(status, url)` instead - * fix `res.send(status, num)` to send `num` as json (not error) - * remove unnecessary escaping when `res.jsonp` returns JSON response - * support non-string `path` in `app.use(path, fn)` - - supports array of paths - - supports `RegExp` - * router: fix optimization on router exit - * router: refactor location of `try` blocks - * router: speed up standard `app.use(fn)` - * deps: debug@1.0.3 - - Add support for multiple wildcards in namespaces - * deps: finalhandler@0.0.3 - - deps: debug@1.0.3 - * deps: methods@1.1.0 - - add `CONNECT` - * deps: parseurl@~1.1.3 - - faster parsing of href-only URLs - * deps: path-to-regexp@0.1.3 - * deps: send@0.6.0 - - deps: debug@1.0.3 - * deps: serve-static@~1.3.2 - - deps: parseurl@~1.1.3 - - deps: send@0.6.0 - * perf: fix arguments reassign deopt in some `res` methods - -4.5.1 / 2014-07-06 -================== - - * fix routing regression when altering `req.method` - -4.5.0 / 2014-07-04 -================== - - * add deprecation message to non-plural `req.accepts*` - * add deprecation message to `res.send(body, status)` - * add deprecation message to `res.vary()` - * add `headers` option to `res.sendfile` - - use to set headers on successful file transfer - * add `mergeParams` option to `Router` - - merges `req.params` from parent routes - * add `req.hostname` -- correct name for what `req.host` returns - * deprecate things with `depd` module - * deprecate `req.host` -- use `req.hostname` instead - * fix behavior when handling request without routes - * fix handling when `route.all` is only route - * invoke `router.param()` only when route matches - * restore `req.params` after invoking router - * use `finalhandler` for final response handling - * use `media-typer` to alter content-type charset - * deps: accepts@~1.0.7 - * deps: send@0.5.0 - - Accept string for `maxage` (converted by `ms`) - - Include link in default redirect response - * deps: serve-static@~1.3.0 - - Accept string for `maxAge` (converted by `ms`) - - Add `setHeaders` option - - Include HTML link in redirect response - - deps: send@0.5.0 - * deps: type-is@~1.3.2 - -4.4.5 / 2014-06-26 -================== - - * deps: cookie-signature@1.0.4 - - fix for timing attacks - -4.4.4 / 2014-06-20 -================== - - * fix `res.attachment` Unicode filenames in Safari - * fix "trim prefix" debug message in `express:router` - * deps: accepts@~1.0.5 - * deps: buffer-crc32@0.2.3 - -4.4.3 / 2014-06-11 -================== - - * fix persistence of modified `req.params[name]` from `app.param()` - * deps: accepts@1.0.3 - - deps: negotiator@0.4.6 - * deps: debug@1.0.2 - * deps: send@0.4.3 - - Do not throw un-catchable error on file open race condition - - Use `escape-html` for HTML escaping - - deps: debug@1.0.2 - - deps: finished@1.2.2 - - deps: fresh@0.2.2 - * deps: serve-static@1.2.3 - - Do not throw un-catchable error on file open race condition - - deps: send@0.4.3 - -4.4.2 / 2014-06-09 -================== - - * fix catching errors from top-level handlers - * use `vary` module for `res.vary` - * deps: debug@1.0.1 - * deps: proxy-addr@1.0.1 - * deps: send@0.4.2 - - fix "event emitter leak" warnings - - deps: debug@1.0.1 - - deps: finished@1.2.1 - * deps: serve-static@1.2.2 - - fix "event emitter leak" warnings - - deps: send@0.4.2 - * deps: type-is@1.2.1 - -4.4.1 / 2014-06-02 -================== - - * deps: methods@1.0.1 - * deps: send@0.4.1 - - Send `max-age` in `Cache-Control` in correct format - * deps: serve-static@1.2.1 - - use `escape-html` for escaping - - deps: send@0.4.1 - -4.4.0 / 2014-05-30 -================== - - * custom etag control with `app.set('etag', val)` - - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation - - `app.set('etag', 'weak')` weak tag - - `app.set('etag', 'strong')` strong etag - - `app.set('etag', false)` turn off - - `app.set('etag', true)` standard etag - * mark `res.send` ETag as weak and reduce collisions - * update accepts to 1.0.2 - - Fix interpretation when header not in request - * update send to 0.4.0 - - Calculate ETag with md5 for reduced collisions - - Ignore stream errors after request ends - - deps: debug@0.8.1 - * update serve-static to 1.2.0 - - Calculate ETag with md5 for reduced collisions - - Ignore stream errors after request ends - - deps: send@0.4.0 - -4.3.2 / 2014-05-28 -================== - - * fix handling of errors from `router.param()` callbacks - -4.3.1 / 2014-05-23 -================== - - * revert "fix behavior of multiple `app.VERB` for the same path" - - this caused a regression in the order of route execution - -4.3.0 / 2014-05-21 -================== - - * add `req.baseUrl` to access the path stripped from `req.url` in routes - * fix behavior of multiple `app.VERB` for the same path - * fix issue routing requests among sub routers - * invoke `router.param()` only when necessary instead of every match - * proper proxy trust with `app.set('trust proxy', trust)` - - `app.set('trust proxy', 1)` trust first hop - - `app.set('trust proxy', 'loopback')` trust loopback addresses - - `app.set('trust proxy', '10.0.0.1')` trust single IP - - `app.set('trust proxy', '10.0.0.1/16')` trust subnet - - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list - - `app.set('trust proxy', false)` turn off - - `app.set('trust proxy', true)` trust everything - * set proper `charset` in `Content-Type` for `res.send` - * update type-is to 1.2.0 - - support suffix matching - -4.2.0 / 2014-05-11 -================== - - * deprecate `app.del()` -- use `app.delete()` instead - * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead - - the edge-case `res.json(status, num)` requires `res.status(status).json(num)` - * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead - - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)` - * fix `req.next` when inside router instance - * include `ETag` header in `HEAD` requests - * keep previous `Content-Type` for `res.jsonp` - * support PURGE method - - add `app.purge` - - add `router.purge` - - include PURGE in `app.all` - * update debug to 0.8.0 - - add `enable()` method - - change from stderr to stdout - * update methods to 1.0.0 - - add PURGE - -4.1.2 / 2014-05-08 -================== - - * fix `req.host` for IPv6 literals - * fix `res.jsonp` error if callback param is object - -4.1.1 / 2014-04-27 -================== - - * fix package.json to reflect supported node version - -4.1.0 / 2014-04-24 -================== - - * pass options from `res.sendfile` to `send` - * preserve casing of headers in `res.header` and `res.set` - * support unicode file names in `res.attachment` and `res.download` - * update accepts to 1.0.1 - - deps: negotiator@0.4.0 - * update cookie to 0.1.2 - - Fix for maxAge == 0 - - made compat with expires field - * update send to 0.3.0 - - Accept API options in options object - - Coerce option types - - Control whether to generate etags - - Default directory access to 403 when index disabled - - Fix sending files with dots without root set - - Include file path in etag - - Make "Can't set headers after they are sent." catchable - - Send full entity-body for multi range requests - - Set etags to "weak" - - Support "If-Range" header - - Support multiple index paths - - deps: mime@1.2.11 - * update serve-static to 1.1.0 - - Accept options directly to `send` module - - Resolve relative paths at middleware setup - - Use parseurl to parse the URL from request - - deps: send@0.3.0 - * update type-is to 1.1.0 - - add non-array values support - - add `multipart` as a shorthand - -4.0.0 / 2014-04-09 -================== - - * remove: - - node 0.8 support - - connect and connect's patches except for charset handling - - express(1) - moved to [express-generator](https://github.com/expressjs/generator) - - `express.createServer()` - it has been deprecated for a long time. Use `express()` - - `app.configure` - use logic in your own app code - - `app.router` - is removed - - `req.auth` - use `basic-auth` instead - - `req.accepted*` - use `req.accepts*()` instead - - `res.location` - relative URL resolution is removed - - `res.charset` - include the charset in the content type when using `res.set()` - - all bundled middleware except `static` - * change: - - `app.route` -> `app.mountpath` when mounting an express app in another express app - - `json spaces` no longer enabled by default in development - - `req.accepts*` -> `req.accepts*s` - i.e. `req.acceptsEncoding` -> `req.acceptsEncodings` - - `req.params` is now an object instead of an array - - `res.locals` is no longer a function. It is a plain js object. Treat it as such. - - `res.headerSent` -> `res.headersSent` to match node.js ServerResponse object - * refactor: - - `req.accepts*` with [accepts](https://github.com/expressjs/accepts) - - `req.is` with [type-is](https://github.com/expressjs/type-is) - - [path-to-regexp](https://github.com/component/path-to-regexp) - * add: - - `app.router()` - returns the app Router instance - - `app.route()` - Proxy to the app's `Router#route()` method to create a new route - - Router & Route - public API - -3.21.2 / 2015-07-31 -=================== - - * deps: connect@2.30.2 - - deps: body-parser@~1.13.3 - - deps: compression@~1.5.2 - - deps: errorhandler@~1.4.2 - - deps: method-override@~2.3.5 - - deps: serve-index@~1.7.2 - - deps: type-is@~1.6.6 - - deps: vhost@~3.0.1 - * deps: vary@~1.0.1 - - Fix setting empty header from empty `field` - - perf: enable strict mode - - perf: remove argument reassignments - -3.21.1 / 2015-07-05 -=================== - - * deps: basic-auth@~1.0.3 - * deps: connect@2.30.1 - - deps: body-parser@~1.13.2 - - deps: compression@~1.5.1 - - deps: errorhandler@~1.4.1 - - deps: morgan@~1.6.1 - - deps: pause@0.1.0 - - deps: qs@4.0.0 - - deps: serve-index@~1.7.1 - - deps: type-is@~1.6.4 - -3.21.0 / 2015-06-18 -=================== - - * deps: basic-auth@1.0.2 - - perf: enable strict mode - - perf: hoist regular expression - - perf: parse with regular expressions - - perf: remove argument reassignment - * deps: connect@2.30.0 - - deps: body-parser@~1.13.1 - - deps: bytes@2.1.0 - - deps: compression@~1.5.0 - - deps: cookie@0.1.3 - - deps: cookie-parser@~1.3.5 - - deps: csurf@~1.8.3 - - deps: errorhandler@~1.4.0 - - deps: express-session@~1.11.3 - - deps: finalhandler@0.4.0 - - deps: fresh@0.3.0 - - deps: morgan@~1.6.0 - - deps: serve-favicon@~2.3.0 - - deps: serve-index@~1.7.0 - - deps: serve-static@~1.10.0 - - deps: type-is@~1.6.3 - * deps: cookie@0.1.3 - - perf: deduce the scope of try-catch deopt - - perf: remove argument reassignments - * deps: escape-html@1.0.2 - * deps: etag@~1.7.0 - - Always include entity length in ETags for hash length extensions - - Generate non-Stats ETags using MD5 only (no longer CRC32) - - Improve stat performance by removing hashing - - Improve support for JXcore - - Remove base64 padding in ETags to shorten - - Support "fake" stats objects in environments without fs - - Use MD5 instead of MD4 in weak ETags over 1KB - * deps: fresh@0.3.0 - - Add weak `ETag` matching support - * deps: mkdirp@0.5.1 - - Work in global strict mode - * deps: send@0.13.0 - - Allow Node.js HTTP server to set `Date` response header - - Fix incorrectly removing `Content-Location` on 304 response - - Improve the default redirect response headers - - Send appropriate headers on default error response - - Use `http-errors` for standard emitted errors - - Use `statuses` instead of `http` module for status messages - - deps: escape-html@1.0.2 - - deps: etag@~1.7.0 - - deps: fresh@0.3.0 - - deps: on-finished@~2.3.0 - - perf: enable strict mode - - perf: remove unnecessary array allocations - -3.20.3 / 2015-05-17 -=================== - - * deps: connect@2.29.2 - - deps: body-parser@~1.12.4 - - deps: compression@~1.4.4 - - deps: connect-timeout@~1.6.2 - - deps: debug@~2.2.0 - - deps: depd@~1.0.1 - - deps: errorhandler@~1.3.6 - - deps: finalhandler@0.3.6 - - deps: method-override@~2.3.3 - - deps: morgan@~1.5.3 - - deps: qs@2.4.2 - - deps: response-time@~2.3.1 - - deps: serve-favicon@~2.2.1 - - deps: serve-index@~1.6.4 - - deps: serve-static@~1.9.3 - - deps: type-is@~1.6.2 - * deps: debug@~2.2.0 - - deps: ms@0.7.1 - * deps: depd@~1.0.1 - * deps: proxy-addr@~1.0.8 - - deps: ipaddr.js@1.0.1 - * deps: send@0.12.3 - - deps: debug@~2.2.0 - - deps: depd@~1.0.1 - - deps: etag@~1.6.0 - - deps: ms@0.7.1 - - deps: on-finished@~2.2.1 - -3.20.2 / 2015-03-16 -=================== - - * deps: connect@2.29.1 - - deps: body-parser@~1.12.2 - - deps: compression@~1.4.3 - - deps: connect-timeout@~1.6.1 - - deps: debug@~2.1.3 - - deps: errorhandler@~1.3.5 - - deps: express-session@~1.10.4 - - deps: finalhandler@0.3.4 - - deps: method-override@~2.3.2 - - deps: morgan@~1.5.2 - - deps: qs@2.4.1 - - deps: serve-index@~1.6.3 - - deps: serve-static@~1.9.2 - - deps: type-is@~1.6.1 - * deps: debug@~2.1.3 - - Fix high intensity foreground color for bold - - deps: ms@0.7.0 - * deps: merge-descriptors@1.0.0 - * deps: proxy-addr@~1.0.7 - - deps: ipaddr.js@0.1.9 - * deps: send@0.12.2 - - Throw errors early for invalid `extensions` or `index` options - - deps: debug@~2.1.3 - -3.20.1 / 2015-02-28 -=================== - - * Fix `req.host` when using "trust proxy" hops count - * Fix `req.protocol`/`req.secure` when using "trust proxy" hops count - -3.20.0 / 2015-02-18 -=================== - - * Fix `"trust proxy"` setting to inherit when app is mounted - * Generate `ETag`s for all request responses - - No longer restricted to only responses for `GET` and `HEAD` requests - * Use `content-type` to parse `Content-Type` headers - * deps: connect@2.29.0 - - Use `content-type` to parse `Content-Type` headers - - deps: body-parser@~1.12.0 - - deps: compression@~1.4.1 - - deps: connect-timeout@~1.6.0 - - deps: cookie-parser@~1.3.4 - - deps: cookie-signature@1.0.6 - - deps: csurf@~1.7.0 - - deps: errorhandler@~1.3.4 - - deps: express-session@~1.10.3 - - deps: http-errors@~1.3.1 - - deps: response-time@~2.3.0 - - deps: serve-index@~1.6.2 - - deps: serve-static@~1.9.1 - - deps: type-is@~1.6.0 - * deps: cookie-signature@1.0.6 - * deps: send@0.12.1 - - Always read the stat size from the file - - Fix mutating passed-in `options` - - deps: mime@1.3.4 - -3.19.2 / 2015-02-01 -=================== - - * deps: connect@2.28.3 - - deps: compression@~1.3.1 - - deps: csurf@~1.6.6 - - deps: errorhandler@~1.3.3 - - deps: express-session@~1.10.2 - - deps: serve-index@~1.6.1 - - deps: type-is@~1.5.6 - * deps: proxy-addr@~1.0.6 - - deps: ipaddr.js@0.1.8 - -3.19.1 / 2015-01-20 -=================== - - * deps: connect@2.28.2 - - deps: body-parser@~1.10.2 - - deps: serve-static@~1.8.1 - * deps: send@0.11.1 - - Fix root path disclosure - -3.19.0 / 2015-01-09 -=================== - - * Fix `OPTIONS` responses to include the `HEAD` method property - * Use `readline` for prompt in `express(1)` - * deps: commander@2.6.0 - * deps: connect@2.28.1 - - deps: body-parser@~1.10.1 - - deps: compression@~1.3.0 - - deps: connect-timeout@~1.5.0 - - deps: csurf@~1.6.4 - - deps: debug@~2.1.1 - - deps: errorhandler@~1.3.2 - - deps: express-session@~1.10.1 - - deps: finalhandler@0.3.3 - - deps: method-override@~2.3.1 - - deps: morgan@~1.5.1 - - deps: serve-favicon@~2.2.0 - - deps: serve-index@~1.6.0 - - deps: serve-static@~1.8.0 - - deps: type-is@~1.5.5 - * deps: debug@~2.1.1 - * deps: methods@~1.1.1 - * deps: proxy-addr@~1.0.5 - - deps: ipaddr.js@0.1.6 - * deps: send@0.11.0 - - deps: debug@~2.1.1 - - deps: etag@~1.5.1 - - deps: ms@0.7.0 - - deps: on-finished@~2.2.0 - -3.18.6 / 2014-12-12 -=================== - - * Fix exception in `req.fresh`/`req.stale` without response headers - -3.18.5 / 2014-12-11 -=================== - - * deps: connect@2.27.6 - - deps: compression@~1.2.2 - - deps: express-session@~1.9.3 - - deps: http-errors@~1.2.8 - - deps: serve-index@~1.5.3 - - deps: type-is@~1.5.4 - -3.18.4 / 2014-11-23 -=================== - - * deps: connect@2.27.4 - - deps: body-parser@~1.9.3 - - deps: compression@~1.2.1 - - deps: errorhandler@~1.2.3 - - deps: express-session@~1.9.2 - - deps: qs@2.3.3 - - deps: serve-favicon@~2.1.7 - - deps: serve-static@~1.5.1 - - deps: type-is@~1.5.3 - * deps: etag@~1.5.1 - * deps: proxy-addr@~1.0.4 - - deps: ipaddr.js@0.1.5 - -3.18.3 / 2014-11-09 -=================== - - * deps: connect@2.27.3 - - Correctly invoke async callback asynchronously - - deps: csurf@~1.6.3 - -3.18.2 / 2014-10-28 -=================== - - * deps: connect@2.27.2 - - Fix handling of URLs containing `://` in the path - - deps: body-parser@~1.9.2 - - deps: qs@2.3.2 - -3.18.1 / 2014-10-22 -=================== - - * Fix internal `utils.merge` deprecation warnings - * deps: connect@2.27.1 - - deps: body-parser@~1.9.1 - - deps: express-session@~1.9.1 - - deps: finalhandler@0.3.2 - - deps: morgan@~1.4.1 - - deps: qs@2.3.0 - - deps: serve-static@~1.7.1 - * deps: send@0.10.1 - - deps: on-finished@~2.1.1 - -3.18.0 / 2014-10-17 -=================== - - * Use `content-disposition` module for `res.attachment`/`res.download` - - Sends standards-compliant `Content-Disposition` header - - Full Unicode support - * Use `etag` module to generate `ETag` headers - * deps: connect@2.27.0 - - Use `http-errors` module for creating errors - - Use `utils-merge` module for merging objects - - deps: body-parser@~1.9.0 - - deps: compression@~1.2.0 - - deps: connect-timeout@~1.4.0 - - deps: debug@~2.1.0 - - deps: depd@~1.0.0 - - deps: express-session@~1.9.0 - - deps: finalhandler@0.3.1 - - deps: method-override@~2.3.0 - - deps: morgan@~1.4.0 - - deps: response-time@~2.2.0 - - deps: serve-favicon@~2.1.6 - - deps: serve-index@~1.5.0 - - deps: serve-static@~1.7.0 - * deps: debug@~2.1.0 - - Implement `DEBUG_FD` env variable support - * deps: depd@~1.0.0 - * deps: send@0.10.0 - - deps: debug@~2.1.0 - - deps: depd@~1.0.0 - - deps: etag@~1.5.0 - -3.17.8 / 2014-10-15 -=================== - - * deps: connect@2.26.6 - - deps: compression@~1.1.2 - - deps: csurf@~1.6.2 - - deps: errorhandler@~1.2.2 - -3.17.7 / 2014-10-08 -=================== - - * deps: connect@2.26.5 - - Fix accepting non-object arguments to `logger` - - deps: serve-static@~1.6.4 - -3.17.6 / 2014-10-02 -=================== - - * deps: connect@2.26.4 - - deps: morgan@~1.3.2 - - deps: type-is@~1.5.2 - -3.17.5 / 2014-09-24 -=================== - - * deps: connect@2.26.3 - - deps: body-parser@~1.8.4 - - deps: serve-favicon@~2.1.5 - - deps: serve-static@~1.6.3 - * deps: proxy-addr@~1.0.3 - - Use `forwarded` npm module - * deps: send@0.9.3 - - deps: etag@~1.4.0 - -3.17.4 / 2014-09-19 -=================== - - * deps: connect@2.26.2 - - deps: body-parser@~1.8.3 - - deps: qs@2.2.4 - -3.17.3 / 2014-09-18 -=================== - - * deps: proxy-addr@~1.0.2 - - Fix a global leak when multiple subnets are trusted - - deps: ipaddr.js@0.1.3 - -3.17.2 / 2014-09-15 -=================== - - * Use `crc` instead of `buffer-crc32` for speed - * deps: connect@2.26.1 - - deps: body-parser@~1.8.2 - - deps: depd@0.4.5 - - deps: express-session@~1.8.2 - - deps: morgan@~1.3.1 - - deps: serve-favicon@~2.1.3 - - deps: serve-static@~1.6.2 - * deps: depd@0.4.5 - * deps: send@0.9.2 - - deps: depd@0.4.5 - - deps: etag@~1.3.1 - - deps: range-parser@~1.0.2 - -3.17.1 / 2014-09-08 -=================== - - * Fix error in `req.subdomains` on empty host - -3.17.0 / 2014-09-08 -=================== - - * Support `X-Forwarded-Host` in `req.subdomains` - * Support IP address host in `req.subdomains` - * deps: connect@2.26.0 - - deps: body-parser@~1.8.1 - - deps: compression@~1.1.0 - - deps: connect-timeout@~1.3.0 - - deps: cookie-parser@~1.3.3 - - deps: cookie-signature@1.0.5 - - deps: csurf@~1.6.1 - - deps: debug@~2.0.0 - - deps: errorhandler@~1.2.0 - - deps: express-session@~1.8.1 - - deps: finalhandler@0.2.0 - - deps: fresh@0.2.4 - - deps: media-typer@0.3.0 - - deps: method-override@~2.2.0 - - deps: morgan@~1.3.0 - - deps: qs@2.2.3 - - deps: serve-favicon@~2.1.3 - - deps: serve-index@~1.2.1 - - deps: serve-static@~1.6.1 - - deps: type-is@~1.5.1 - - deps: vhost@~3.0.0 - * deps: cookie-signature@1.0.5 - * deps: debug@~2.0.0 - * deps: fresh@0.2.4 - * deps: media-typer@0.3.0 - - Throw error when parameter format invalid on parse - * deps: range-parser@~1.0.2 - * deps: send@0.9.1 - - Add `lastModified` option - - Use `etag` to generate `ETag` header - - deps: debug@~2.0.0 - - deps: fresh@0.2.4 - * deps: vary@~1.0.0 - - Accept valid `Vary` header string as `field` - -3.16.10 / 2014-09-04 -==================== - - * deps: connect@2.25.10 - - deps: serve-static@~1.5.4 - * deps: send@0.8.5 - - Fix a path traversal issue when using `root` - - Fix malicious path detection for empty string path - -3.16.9 / 2014-08-29 -=================== - - * deps: connect@2.25.9 - - deps: body-parser@~1.6.7 - - deps: qs@2.2.2 - -3.16.8 / 2014-08-27 -=================== - - * deps: connect@2.25.8 - - deps: body-parser@~1.6.6 - - deps: csurf@~1.4.1 - - deps: qs@2.2.0 - -3.16.7 / 2014-08-18 -=================== - - * deps: connect@2.25.7 - - deps: body-parser@~1.6.5 - - deps: express-session@~1.7.6 - - deps: morgan@~1.2.3 - - deps: serve-static@~1.5.3 - * deps: send@0.8.3 - - deps: destroy@1.0.3 - - deps: on-finished@2.1.0 - -3.16.6 / 2014-08-14 -=================== - - * deps: connect@2.25.6 - - deps: body-parser@~1.6.4 - - deps: qs@1.2.2 - - deps: serve-static@~1.5.2 - * deps: send@0.8.2 - - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream` - -3.16.5 / 2014-08-11 -=================== - - * deps: connect@2.25.5 - - Fix backwards compatibility in `logger` - -3.16.4 / 2014-08-10 -=================== - - * Fix original URL parsing in `res.location` - * deps: connect@2.25.4 - - Fix `query` middleware breaking with argument - - deps: body-parser@~1.6.3 - - deps: compression@~1.0.11 - - deps: connect-timeout@~1.2.2 - - deps: express-session@~1.7.5 - - deps: method-override@~2.1.3 - - deps: on-headers@~1.0.0 - - deps: parseurl@~1.3.0 - - deps: qs@1.2.1 - - deps: response-time@~2.0.1 - - deps: serve-index@~1.1.6 - - deps: serve-static@~1.5.1 - * deps: parseurl@~1.3.0 - -3.16.3 / 2014-08-07 -=================== - - * deps: connect@2.25.3 - - deps: multiparty@3.3.2 - -3.16.2 / 2014-08-07 -=================== - - * deps: connect@2.25.2 - - deps: body-parser@~1.6.2 - - deps: qs@1.2.0 - -3.16.1 / 2014-08-06 -=================== - - * deps: connect@2.25.1 - - deps: body-parser@~1.6.1 - - deps: qs@1.1.0 - -3.16.0 / 2014-08-05 -=================== - - * deps: connect@2.25.0 - - deps: body-parser@~1.6.0 - - deps: compression@~1.0.10 - - deps: csurf@~1.4.0 - - deps: express-session@~1.7.4 - - deps: qs@1.0.2 - - deps: serve-static@~1.5.0 - * deps: send@0.8.1 - - Add `extensions` option - -3.15.3 / 2014-08-04 -=================== - - * fix `res.sendfile` regression for serving directory index files - * deps: connect@2.24.3 - - deps: serve-index@~1.1.5 - - deps: serve-static@~1.4.4 - * deps: send@0.7.4 - - Fix incorrect 403 on Windows and Node.js 0.11 - - Fix serving index files without root dir - -3.15.2 / 2014-07-27 -=================== - - * deps: connect@2.24.2 - - deps: body-parser@~1.5.2 - - deps: depd@0.4.4 - - deps: express-session@~1.7.2 - - deps: morgan@~1.2.2 - - deps: serve-static@~1.4.2 - * deps: depd@0.4.4 - - Work-around v8 generating empty stack traces - * deps: send@0.7.2 - - deps: depd@0.4.4 - -3.15.1 / 2014-07-26 -=================== - - * deps: connect@2.24.1 - - deps: body-parser@~1.5.1 - - deps: depd@0.4.3 - - deps: express-session@~1.7.1 - - deps: morgan@~1.2.1 - - deps: serve-index@~1.1.4 - - deps: serve-static@~1.4.1 - * deps: depd@0.4.3 - - Fix exception when global `Error.stackTraceLimit` is too low - * deps: send@0.7.1 - - deps: depd@0.4.3 - -3.15.0 / 2014-07-22 -=================== - - * Fix `req.protocol` for proxy-direct connections - * Pass options from `res.sendfile` to `send` - * deps: connect@2.24.0 - - deps: body-parser@~1.5.0 - - deps: compression@~1.0.9 - - deps: connect-timeout@~1.2.1 - - deps: debug@1.0.4 - - deps: depd@0.4.2 - - deps: express-session@~1.7.0 - - deps: finalhandler@0.1.0 - - deps: method-override@~2.1.2 - - deps: morgan@~1.2.0 - - deps: multiparty@3.3.1 - - deps: parseurl@~1.2.0 - - deps: serve-static@~1.4.0 - * deps: debug@1.0.4 - * deps: depd@0.4.2 - - Add `TRACE_DEPRECATION` environment variable - - Remove non-standard grey color from color output - - Support `--no-deprecation` argument - - Support `--trace-deprecation` argument - * deps: parseurl@~1.2.0 - - Cache URLs based on original value - - Remove no-longer-needed URL mis-parse work-around - - Simplify the "fast-path" `RegExp` - * deps: send@0.7.0 - - Add `dotfiles` option - - Cap `maxAge` value to 1 year - - deps: debug@1.0.4 - - deps: depd@0.4.2 - -3.14.0 / 2014-07-11 -=================== - - * add explicit "Rosetta Flash JSONP abuse" protection - - previous versions are not vulnerable; this is just explicit protection - * deprecate `res.redirect(url, status)` -- use `res.redirect(status, url)` instead - * fix `res.send(status, num)` to send `num` as json (not error) - * remove unnecessary escaping when `res.jsonp` returns JSON response - * deps: basic-auth@1.0.0 - - support empty password - - support empty username - * deps: connect@2.23.0 - - deps: debug@1.0.3 - - deps: express-session@~1.6.4 - - deps: method-override@~2.1.0 - - deps: parseurl@~1.1.3 - - deps: serve-static@~1.3.1 - * deps: debug@1.0.3 - - Add support for multiple wildcards in namespaces - * deps: methods@1.1.0 - - add `CONNECT` - * deps: parseurl@~1.1.3 - - faster parsing of href-only URLs - -3.13.0 / 2014-07-03 -=================== - - * add deprecation message to `app.configure` - * add deprecation message to `req.auth` - * use `basic-auth` to parse `Authorization` header - * deps: connect@2.22.0 - - deps: csurf@~1.3.0 - - deps: express-session@~1.6.1 - - deps: multiparty@3.3.0 - - deps: serve-static@~1.3.0 - * deps: send@0.5.0 - - Accept string for `maxage` (converted by `ms`) - - Include link in default redirect response - -3.12.1 / 2014-06-26 -=================== - - * deps: connect@2.21.1 - - deps: cookie-parser@1.3.2 - - deps: cookie-signature@1.0.4 - - deps: express-session@~1.5.2 - - deps: type-is@~1.3.2 - * deps: cookie-signature@1.0.4 - - fix for timing attacks - -3.12.0 / 2014-06-21 -=================== - - * use `media-typer` to alter content-type charset - * deps: connect@2.21.0 - - deprecate `connect(middleware)` -- use `app.use(middleware)` instead - - deprecate `connect.createServer()` -- use `connect()` instead - - fix `res.setHeader()` patch to work with with get -> append -> set pattern - - deps: compression@~1.0.8 - - deps: errorhandler@~1.1.1 - - deps: express-session@~1.5.0 - - deps: serve-index@~1.1.3 - -3.11.0 / 2014-06-19 -=================== - - * deprecate things with `depd` module - * deps: buffer-crc32@0.2.3 - * deps: connect@2.20.2 - - deprecate `verify` option to `json` -- use `body-parser` npm module instead - - deprecate `verify` option to `urlencoded` -- use `body-parser` npm module instead - - deprecate things with `depd` module - - use `finalhandler` for final response handling - - use `media-typer` to parse `content-type` for charset - - deps: body-parser@1.4.3 - - deps: connect-timeout@1.1.1 - - deps: cookie-parser@1.3.1 - - deps: csurf@1.2.2 - - deps: errorhandler@1.1.0 - - deps: express-session@1.4.0 - - deps: multiparty@3.2.9 - - deps: serve-index@1.1.2 - - deps: type-is@1.3.1 - - deps: vhost@2.0.0 - -3.10.5 / 2014-06-11 -=================== - - * deps: connect@2.19.6 - - deps: body-parser@1.3.1 - - deps: compression@1.0.7 - - deps: debug@1.0.2 - - deps: serve-index@1.1.1 - - deps: serve-static@1.2.3 - * deps: debug@1.0.2 - * deps: send@0.4.3 - - Do not throw un-catchable error on file open race condition - - Use `escape-html` for HTML escaping - - deps: debug@1.0.2 - - deps: finished@1.2.2 - - deps: fresh@0.2.2 - -3.10.4 / 2014-06-09 -=================== - - * deps: connect@2.19.5 - - fix "event emitter leak" warnings - - deps: csurf@1.2.1 - - deps: debug@1.0.1 - - deps: serve-static@1.2.2 - - deps: type-is@1.2.1 - * deps: debug@1.0.1 - * deps: send@0.4.2 - - fix "event emitter leak" warnings - - deps: finished@1.2.1 - - deps: debug@1.0.1 - -3.10.3 / 2014-06-05 -=================== - - * use `vary` module for `res.vary` - * deps: connect@2.19.4 - - deps: errorhandler@1.0.2 - - deps: method-override@2.0.2 - - deps: serve-favicon@2.0.1 - * deps: debug@1.0.0 - -3.10.2 / 2014-06-03 -=================== - - * deps: connect@2.19.3 - - deps: compression@1.0.6 - -3.10.1 / 2014-06-03 -=================== - - * deps: connect@2.19.2 - - deps: compression@1.0.4 - * deps: proxy-addr@1.0.1 - -3.10.0 / 2014-06-02 -=================== - - * deps: connect@2.19.1 - - deprecate `methodOverride()` -- use `method-override` npm module instead - - deps: body-parser@1.3.0 - - deps: method-override@2.0.1 - - deps: multiparty@3.2.8 - - deps: response-time@2.0.0 - - deps: serve-static@1.2.1 - * deps: methods@1.0.1 - * deps: send@0.4.1 - - Send `max-age` in `Cache-Control` in correct format - -3.9.0 / 2014-05-30 -================== - - * custom etag control with `app.set('etag', val)` - - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation - - `app.set('etag', 'weak')` weak tag - - `app.set('etag', 'strong')` strong etag - - `app.set('etag', false)` turn off - - `app.set('etag', true)` standard etag - * Include ETag in HEAD requests - * mark `res.send` ETag as weak and reduce collisions - * update connect to 2.18.0 - - deps: compression@1.0.3 - - deps: serve-index@1.1.0 - - deps: serve-static@1.2.0 - * update send to 0.4.0 - - Calculate ETag with md5 for reduced collisions - - Ignore stream errors after request ends - - deps: debug@0.8.1 - -3.8.1 / 2014-05-27 -================== - - * update connect to 2.17.3 - - deps: body-parser@1.2.2 - - deps: express-session@1.2.1 - - deps: method-override@1.0.2 - -3.8.0 / 2014-05-21 -================== - - * keep previous `Content-Type` for `res.jsonp` - * set proper `charset` in `Content-Type` for `res.send` - * update connect to 2.17.1 - - fix `res.charset` appending charset when `content-type` has one - - deps: express-session@1.2.0 - - deps: morgan@1.1.1 - - deps: serve-index@1.0.3 - -3.7.0 / 2014-05-18 -================== - - * proper proxy trust with `app.set('trust proxy', trust)` - - `app.set('trust proxy', 1)` trust first hop - - `app.set('trust proxy', 'loopback')` trust loopback addresses - - `app.set('trust proxy', '10.0.0.1')` trust single IP - - `app.set('trust proxy', '10.0.0.1/16')` trust subnet - - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list - - `app.set('trust proxy', false)` turn off - - `app.set('trust proxy', true)` trust everything - * update connect to 2.16.2 - - deprecate `res.headerSent` -- use `res.headersSent` - - deprecate `res.on("header")` -- use on-headers module instead - - fix edge-case in `res.appendHeader` that would append in wrong order - - json: use body-parser - - urlencoded: use body-parser - - dep: bytes@1.0.0 - - dep: cookie-parser@1.1.0 - - dep: csurf@1.2.0 - - dep: express-session@1.1.0 - - dep: method-override@1.0.1 - -3.6.0 / 2014-05-09 -================== - - * deprecate `app.del()` -- use `app.delete()` instead - * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead - - the edge-case `res.json(status, num)` requires `res.status(status).json(num)` - * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead - - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)` - * support PURGE method - - add `app.purge` - - add `router.purge` - - include PURGE in `app.all` - * update connect to 2.15.0 - * Add `res.appendHeader` - * Call error stack even when response has been sent - * Patch `res.headerSent` to return Boolean - * Patch `res.headersSent` for node.js 0.8 - * Prevent default 404 handler after response sent - * dep: compression@1.0.2 - * dep: connect-timeout@1.1.0 - * dep: debug@^0.8.0 - * dep: errorhandler@1.0.1 - * dep: express-session@1.0.4 - * dep: morgan@1.0.1 - * dep: serve-favicon@2.0.0 - * dep: serve-index@1.0.2 - * update debug to 0.8.0 - * add `enable()` method - * change from stderr to stdout - * update methods to 1.0.0 - - add PURGE - * update mkdirp to 0.5.0 - -3.5.3 / 2014-05-08 -================== - - * fix `req.host` for IPv6 literals - * fix `res.jsonp` error if callback param is object - -3.5.2 / 2014-04-24 -================== - - * update connect to 2.14.5 - * update cookie to 0.1.2 - * update mkdirp to 0.4.0 - * update send to 0.3.0 - -3.5.1 / 2014-03-25 -================== - - * pin less-middleware in generated app - -3.5.0 / 2014-03-06 -================== - - * bump deps - -3.4.8 / 2014-01-13 -================== - - * prevent incorrect automatic OPTIONS responses #1868 @dpatti - * update binary and examples for jade 1.0 #1876 @yossi, #1877 @reqshark, #1892 @matheusazzi - * throw 400 in case of malformed paths @rlidwka - -3.4.7 / 2013-12-10 -================== - - * update connect - -3.4.6 / 2013-12-01 -================== - - * update connect (raw-body) - -3.4.5 / 2013-11-27 -================== - - * update connect - * res.location: remove leading ./ #1802 @kapouer - * res.redirect: fix `res.redirect('toString') #1829 @michaelficarra - * res.send: always send ETag when content-length > 0 - * router: add Router.all() method - -3.4.4 / 2013-10-29 -================== - - * update connect - * update supertest - * update methods - * express(1): replace bodyParser() with urlencoded() and json() #1795 @chirag04 - -3.4.3 / 2013-10-23 -================== - - * update connect - -3.4.2 / 2013-10-18 -================== - - * update connect - * downgrade commander - -3.4.1 / 2013-10-15 -================== - - * update connect - * update commander - * jsonp: check if callback is a function - * router: wrap encodeURIComponent in a try/catch #1735 (@lxe) - * res.format: now includes charset @1747 (@sorribas) - * res.links: allow multiple calls @1746 (@sorribas) - -3.4.0 / 2013-09-07 -================== - - * add res.vary(). Closes #1682 - * update connect - -3.3.8 / 2013-09-02 -================== - - * update connect - -3.3.7 / 2013-08-28 -================== - - * update connect - -3.3.6 / 2013-08-27 -================== - - * Revert "remove charset from json responses. Closes #1631" (causes issues in some clients) - * add: req.accepts take an argument list - -3.3.4 / 2013-07-08 -================== - - * update send and connect - -3.3.3 / 2013-07-04 -================== - - * update connect - -3.3.2 / 2013-07-03 -================== - - * update connect - * update send - * remove .version export - -3.3.1 / 2013-06-27 -================== - - * update connect - -3.3.0 / 2013-06-26 -================== - - * update connect - * add support for multiple X-Forwarded-Proto values. Closes #1646 - * change: remove charset from json responses. Closes #1631 - * change: return actual booleans from req.accept* functions - * fix jsonp callback array throw - -3.2.6 / 2013-06-02 -================== - - * update connect - -3.2.5 / 2013-05-21 -================== - - * update connect - * update node-cookie - * add: throw a meaningful error when there is no default engine - * change generation of ETags with res.send() to GET requests only. Closes #1619 - -3.2.4 / 2013-05-09 -================== - - * fix `req.subdomains` when no Host is present - * fix `req.host` when no Host is present, return undefined - -3.2.3 / 2013-05-07 -================== - - * update connect / qs - -3.2.2 / 2013-05-03 -================== - - * update qs - -3.2.1 / 2013-04-29 -================== - - * add app.VERB() paths array deprecation warning - * update connect - * update qs and remove all ~ semver crap - * fix: accept number as value of Signed Cookie - -3.2.0 / 2013-04-15 -================== - - * add "view" constructor setting to override view behaviour - * add req.acceptsEncoding(name) - * add req.acceptedEncodings - * revert cookie signature change causing session race conditions - * fix sorting of Accept values of the same quality - -3.1.2 / 2013-04-12 -================== - - * add support for custom Accept parameters - * update cookie-signature - -3.1.1 / 2013-04-01 -================== - - * add X-Forwarded-Host support to `req.host` - * fix relative redirects - * update mkdirp - * update buffer-crc32 - * remove legacy app.configure() method from app template. - -3.1.0 / 2013-01-25 -================== - - * add support for leading "." in "view engine" setting - * add array support to `res.set()` - * add node 0.8.x to travis.yml - * add "subdomain offset" setting for tweaking `req.subdomains` - * add `res.location(url)` implementing `res.redirect()`-like setting of Location - * use app.get() for x-powered-by setting for inheritance - * fix colons in passwords for `req.auth` - -3.0.6 / 2013-01-04 -================== - - * add http verb methods to Router - * update connect - * fix mangling of the `res.cookie()` options object - * fix jsonp whitespace escape. Closes #1132 - -3.0.5 / 2012-12-19 -================== - - * add throwing when a non-function is passed to a route - * fix: explicitly remove Transfer-Encoding header from 204 and 304 responses - * revert "add 'etag' option" - -3.0.4 / 2012-12-05 -================== - - * add 'etag' option to disable `res.send()` Etags - * add escaping of urls in text/plain in `res.redirect()` - for old browsers interpreting as html - * change crc32 module for a more liberal license - * update connect - -3.0.3 / 2012-11-13 -================== - - * update connect - * update cookie module - * fix cookie max-age - -3.0.2 / 2012-11-08 -================== - - * add OPTIONS to cors example. Closes #1398 - * fix route chaining regression. Closes #1397 - -3.0.1 / 2012-11-01 -================== - - * update connect - -3.0.0 / 2012-10-23 -================== - - * add `make clean` - * add "Basic" check to req.auth - * add `req.auth` test coverage - * add cb && cb(payload) to `res.jsonp()`. Closes #1374 - * add backwards compat for `res.redirect()` status. Closes #1336 - * add support for `res.json()` to retain previously defined Content-Types. Closes #1349 - * update connect - * change `res.redirect()` to utilize a pathname-relative Location again. Closes #1382 - * remove non-primitive string support for `res.send()` - * fix view-locals example. Closes #1370 - * fix route-separation example - -3.0.0rc5 / 2012-09-18 -================== - - * update connect - * add redis search example - * add static-files example - * add "x-powered-by" setting (`app.disable('x-powered-by')`) - * add "application/octet-stream" redirect Accept test case. Closes #1317 - -3.0.0rc4 / 2012-08-30 -================== - - * add `res.jsonp()`. Closes #1307 - * add "verbose errors" option to error-pages example - * add another route example to express(1) so people are not so confused - * add redis online user activity tracking example - * update connect dep - * fix etag quoting. Closes #1310 - * fix error-pages 404 status - * fix jsonp callback char restrictions - * remove old OPTIONS default response - -3.0.0rc3 / 2012-08-13 -================== - - * update connect dep - * fix signed cookies to work with `connect.cookieParser()` ("s:" prefix was missing) [tnydwrds] - * fix `res.render()` clobbering of "locals" - -3.0.0rc2 / 2012-08-03 -================== - - * add CORS example - * update connect dep - * deprecate `.createServer()` & remove old stale examples - * fix: escape `res.redirect()` link - * fix vhost example - -3.0.0rc1 / 2012-07-24 -================== - - * add more examples to view-locals - * add scheme-relative redirects (`res.redirect("//foo.com")`) support - * update cookie dep - * update connect dep - * update send dep - * fix `express(1)` -h flag, use -H for hogan. Closes #1245 - * fix `res.sendfile()` socket error handling regression - -3.0.0beta7 / 2012-07-16 -================== - - * update connect dep for `send()` root normalization regression - -3.0.0beta6 / 2012-07-13 -================== - - * add `err.view` property for view errors. Closes #1226 - * add "jsonp callback name" setting - * add support for "/foo/:bar*" non-greedy matches - * change `res.sendfile()` to use `send()` module - * change `res.send` to use "response-send" module - * remove `app.locals.use` and `res.locals.use`, use regular middleware - -3.0.0beta5 / 2012-07-03 -================== - - * add "make check" support - * add route-map example - * add `res.json(obj, status)` support back for BC - * add "methods" dep, remove internal methods module - * update connect dep - * update auth example to utilize cores pbkdf2 - * updated tests to use "supertest" - -3.0.0beta4 / 2012-06-25 -================== - - * Added `req.auth` - * Added `req.range(size)` - * Added `res.links(obj)` - * Added `res.send(body, status)` support back for backwards compat - * Added `.default()` support to `res.format()` - * Added 2xx / 304 check to `req.fresh` - * Revert "Added + support to the router" - * Fixed `res.send()` freshness check, respect res.statusCode - -3.0.0beta3 / 2012-06-15 -================== - - * Added hogan `--hjs` to express(1) [nullfirm] - * Added another example to content-negotiation - * Added `fresh` dep - * Changed: `res.send()` always checks freshness - * Fixed: expose connects mime module. Closes #1165 - -3.0.0beta2 / 2012-06-06 -================== - - * Added `+` support to the router - * Added `req.host` - * Changed `req.param()` to check route first - * Update connect dep - -3.0.0beta1 / 2012-06-01 -================== - - * Added `res.format()` callback to override default 406 behaviour - * Fixed `res.redirect()` 406. Closes #1154 - -3.0.0alpha5 / 2012-05-30 -================== - - * Added `req.ip` - * Added `{ signed: true }` option to `res.cookie()` - * Removed `res.signedCookie()` - * Changed: dont reverse `req.ips` - * Fixed "trust proxy" setting check for `req.ips` - -3.0.0alpha4 / 2012-05-09 -================== - - * Added: allow `[]` in jsonp callback. Closes #1128 - * Added `PORT` env var support in generated template. Closes #1118 [benatkin] - * Updated: connect 2.2.2 - -3.0.0alpha3 / 2012-05-04 -================== - - * Added public `app.routes`. Closes #887 - * Added _view-locals_ example - * Added _mvc_ example - * Added `res.locals.use()`. Closes #1120 - * Added conditional-GET support to `res.send()` - * Added: coerce `res.set()` values to strings - * Changed: moved `static()` in generated apps below router - * Changed: `res.send()` only set ETag when not previously set - * Changed connect 2.2.1 dep - * Changed: `make test` now runs unit / acceptance tests - * Fixed req/res proto inheritance - -3.0.0alpha2 / 2012-04-26 -================== - - * Added `make benchmark` back - * Added `res.send()` support for `String` objects - * Added client-side data exposing example - * Added `res.header()` and `req.header()` aliases for BC - * Added `express.createServer()` for BC - * Perf: memoize parsed urls - * Perf: connect 2.2.0 dep - * Changed: make `expressInit()` middleware self-aware - * Fixed: use app.get() for all core settings - * Fixed redis session example - * Fixed session example. Closes #1105 - * Fixed generated express dep. Closes #1078 - -3.0.0alpha1 / 2012-04-15 -================== - - * Added `app.locals.use(callback)` - * Added `app.locals` object - * Added `app.locals(obj)` - * Added `res.locals` object - * Added `res.locals(obj)` - * Added `res.format()` for content-negotiation - * Added `app.engine()` - * Added `res.cookie()` JSON cookie support - * Added "trust proxy" setting - * Added `req.subdomains` - * Added `req.protocol` - * Added `req.secure` - * Added `req.path` - * Added `req.ips` - * Added `req.fresh` - * Added `req.stale` - * Added comma-delimited / array support for `req.accepts()` - * Added debug instrumentation - * Added `res.set(obj)` - * Added `res.set(field, value)` - * Added `res.get(field)` - * Added `app.get(setting)`. Closes #842 - * Added `req.acceptsLanguage()` - * Added `req.acceptsCharset()` - * Added `req.accepted` - * Added `req.acceptedLanguages` - * Added `req.acceptedCharsets` - * Added "json replacer" setting - * Added "json spaces" setting - * Added X-Forwarded-Proto support to `res.redirect()`. Closes #92 - * Added `--less` support to express(1) - * Added `express.response` prototype - * Added `express.request` prototype - * Added `express.application` prototype - * Added `app.path()` - * Added `app.render()` - * Added `res.type()` to replace `res.contentType()` - * Changed: `res.redirect()` to add relative support - * Changed: enable "jsonp callback" by default - * Changed: renamed "case sensitive routes" to "case sensitive routing" - * Rewrite of all tests with mocha - * Removed "root" setting - * Removed `res.redirect('home')` support - * Removed `req.notify()` - * Removed `app.register()` - * Removed `app.redirect()` - * Removed `app.is()` - * Removed `app.helpers()` - * Removed `app.dynamicHelpers()` - * Fixed `res.sendfile()` with non-GET. Closes #723 - * Fixed express(1) public dir for windows. Closes #866 - -2.5.9/ 2012-04-02 -================== - - * Added support for PURGE request method [pbuyle] - * Fixed `express(1)` generated app `app.address()` before `listening` [mmalecki] - -2.5.8 / 2012-02-08 -================== - - * Update mkdirp dep. Closes #991 - -2.5.7 / 2012-02-06 -================== - - * Fixed `app.all` duplicate DELETE requests [mscdex] - -2.5.6 / 2012-01-13 -================== - - * Updated hamljs dev dep. Closes #953 - -2.5.5 / 2012-01-08 -================== - - * Fixed: set `filename` on cached templates [matthewleon] - -2.5.4 / 2012-01-02 -================== - - * Fixed `express(1)` eol on 0.4.x. Closes #947 - -2.5.3 / 2011-12-30 -================== - - * Fixed `req.is()` when a charset is present - -2.5.2 / 2011-12-10 -================== - - * Fixed: express(1) LF -> CRLF for windows - -2.5.1 / 2011-11-17 -================== - - * Changed: updated connect to 1.8.x - * Removed sass.js support from express(1) - -2.5.0 / 2011-10-24 -================== - - * Added ./routes dir for generated app by default - * Added npm install reminder to express(1) app gen - * Added 0.5.x support - * Removed `make test-cov` since it wont work with node 0.5.x - * Fixed express(1) public dir for windows. Closes #866 - -2.4.7 / 2011-10-05 -================== - - * Added mkdirp to express(1). Closes #795 - * Added simple _json-config_ example - * Added shorthand for the parsed request's pathname via `req.path` - * Changed connect dep to 1.7.x to fix npm issue... - * Fixed `res.redirect()` __HEAD__ support. [reported by xerox] - * Fixed `req.flash()`, only escape args - * Fixed absolute path checking on windows. Closes #829 [reported by andrewpmckenzie] - -2.4.6 / 2011-08-22 -================== - - * Fixed multiple param callback regression. Closes #824 [reported by TroyGoode] - -2.4.5 / 2011-08-19 -================== - - * Added support for routes to handle errors. Closes #809 - * Added `app.routes.all()`. Closes #803 - * Added "basepath" setting to work in conjunction with reverse proxies etc. - * Refactored `Route` to use a single array of callbacks - * Added support for multiple callbacks for `app.param()`. Closes #801 -Closes #805 - * Changed: removed .call(self) for route callbacks - * Dependency: `qs >= 0.3.1` - * Fixed `res.redirect()` on windows due to `join()` usage. Closes #808 - -2.4.4 / 2011-08-05 -================== - - * Fixed `res.header()` intention of a set, even when `undefined` - * Fixed `*`, value no longer required - * Fixed `res.send(204)` support. Closes #771 - -2.4.3 / 2011-07-14 -================== - - * Added docs for `status` option special-case. Closes #739 - * Fixed `options.filename`, exposing the view path to template engines - -2.4.2. / 2011-07-06 -================== - - * Revert "removed jsonp stripping" for XSS - -2.4.1 / 2011-07-06 -================== - - * Added `res.json()` JSONP support. Closes #737 - * Added _extending-templates_ example. Closes #730 - * Added "strict routing" setting for trailing slashes - * Added support for multiple envs in `app.configure()` calls. Closes #735 - * Changed: `res.send()` using `res.json()` - * Changed: when cookie `path === null` don't default it - * Changed; default cookie path to "home" setting. Closes #731 - * Removed _pids/logs_ creation from express(1) - -2.4.0 / 2011-06-28 -================== - - * Added chainable `res.status(code)` - * Added `res.json()`, an explicit version of `res.send(obj)` - * Added simple web-service example - -2.3.12 / 2011-06-22 -================== - - * \#express is now on freenode! come join! - * Added `req.get(field, param)` - * Added links to Japanese documentation, thanks @hideyukisaito! - * Added; the `express(1)` generated app outputs the env - * Added `content-negotiation` example - * Dependency: connect >= 1.5.1 < 2.0.0 - * Fixed view layout bug. Closes #720 - * Fixed; ignore body on 304. Closes #701 - -2.3.11 / 2011-06-04 -================== - - * Added `npm test` - * Removed generation of dummy test file from `express(1)` - * Fixed; `express(1)` adds express as a dep - * Fixed; prune on `prepublish` - -2.3.10 / 2011-05-27 -================== - - * Added `req.route`, exposing the current route - * Added _package.json_ generation support to `express(1)` - * Fixed call to `app.param()` function for optional params. Closes #682 - -2.3.9 / 2011-05-25 -================== - - * Fixed bug-ish with `../' in `res.partial()` calls - -2.3.8 / 2011-05-24 -================== - - * Fixed `app.options()` - -2.3.7 / 2011-05-23 -================== - - * Added route `Collection`, ex: `app.get('/user/:id').remove();` - * Added support for `app.param(fn)` to define param logic - * Removed `app.param()` support for callback with return value - * Removed module.parent check from express(1) generated app. Closes #670 - * Refactored router. Closes #639 - -2.3.6 / 2011-05-20 -================== - - * Changed; using devDependencies instead of git submodules - * Fixed redis session example - * Fixed markdown example - * Fixed view caching, should not be enabled in development - -2.3.5 / 2011-05-20 -================== - - * Added export `.view` as alias for `.View` - -2.3.4 / 2011-05-08 -================== - - * Added `./examples/say` - * Fixed `res.sendfile()` bug preventing the transfer of files with spaces - -2.3.3 / 2011-05-03 -================== - - * Added "case sensitive routes" option. - * Changed; split methods supported per rfc [slaskis] - * Fixed route-specific middleware when using the same callback function several times - -2.3.2 / 2011-04-27 -================== - - * Fixed view hints - -2.3.1 / 2011-04-26 -================== - - * Added `app.match()` as `app.match.all()` - * Added `app.lookup()` as `app.lookup.all()` - * Added `app.remove()` for `app.remove.all()` - * Added `app.remove.VERB()` - * Fixed template caching collision issue. Closes #644 - * Moved router over from connect and started refactor - -2.3.0 / 2011-04-25 -================== - - * Added options support to `res.clearCookie()` - * Added `res.helpers()` as alias of `res.locals()` - * Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel * Dependency `connect >= 1.4.0` - * Changed; auto set Content-Type in res.attachement [Aaron Heckmann] - * Renamed "cache views" to "view cache". Closes #628 - * Fixed caching of views when using several apps. Closes #637 - * Fixed gotcha invoking `app.param()` callbacks once per route middleware. -Closes #638 - * Fixed partial lookup precedence. Closes #631 -Shaw] - -2.2.2 / 2011-04-12 -================== - - * Added second callback support for `res.download()` connection errors - * Fixed `filename` option passing to template engine - -2.2.1 / 2011-04-04 -================== - - * Added `layout(path)` helper to change the layout within a view. Closes #610 - * Fixed `partial()` collection object support. - Previously only anything with `.length` would work. - When `.length` is present one must still be aware of holes, - however now `{ collection: {foo: 'bar'}}` is valid, exposes - `keyInCollection` and `keysInCollection`. - - * Performance improved with better view caching - * Removed `request` and `response` locals - * Changed; errorHandler page title is now `Express` instead of `Connect` - -2.2.0 / 2011-03-30 -================== - - * Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606 - * Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606 - * Added `app.VERB(path)` as alias of `app.lookup.VERB()`. - * Dependency `connect >= 1.2.0` - -2.1.1 / 2011-03-29 -================== - - * Added; expose `err.view` object when failing to locate a view - * Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann] - * Fixed; `res.send(undefined)` responds with 204 [aheckmann] - -2.1.0 / 2011-03-24 -================== - - * Added `/_?` partial lookup support. Closes #447 - * Added `request`, `response`, and `app` local variables - * Added `settings` local variable, containing the app's settings - * Added `req.flash()` exception if `req.session` is not available - * Added `res.send(bool)` support (json response) - * Fixed stylus example for latest version - * Fixed; wrap try/catch around `res.render()` - -2.0.0 / 2011-03-17 -================== - - * Fixed up index view path alternative. - * Changed; `res.locals()` without object returns the locals - -2.0.0rc3 / 2011-03-17 -================== - - * Added `res.locals(obj)` to compliment `res.local(key, val)` - * Added `res.partial()` callback support - * Fixed recursive error reporting issue in `res.render()` - -2.0.0rc2 / 2011-03-17 -================== - - * Changed; `partial()` "locals" are now optional - * Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01] - * Fixed .filename view engine option [reported by drudge] - * Fixed blog example - * Fixed `{req,res}.app` reference when mounting [Ben Weaver] - -2.0.0rc / 2011-03-14 -================== - - * Fixed; expose `HTTPSServer` constructor - * Fixed express(1) default test charset. Closes #579 [reported by secoif] - * Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP] - -2.0.0beta3 / 2011-03-09 -================== - - * Added support for `res.contentType()` literal - The original `res.contentType('.json')`, - `res.contentType('application/json')`, and `res.contentType('json')` - will work now. - * Added `res.render()` status option support back - * Added charset option for `res.render()` - * Added `.charset` support (via connect 1.0.4) - * Added view resolution hints when in development and a lookup fails - * Added layout lookup support relative to the page view. - For example while rendering `./views/user/index.jade` if you create - `./views/user/layout.jade` it will be used in favour of the root layout. - * Fixed `res.redirect()`. RFC states absolute url [reported by unlink] - * Fixed; default `res.send()` string charset to utf8 - * Removed `Partial` constructor (not currently used) - -2.0.0beta2 / 2011-03-07 -================== - - * Added res.render() `.locals` support back to aid in migration process - * Fixed flash example - -2.0.0beta / 2011-03-03 -================== - - * Added HTTPS support - * Added `res.cookie()` maxAge support - * Added `req.header()` _Referrer_ / _Referer_ special-case, either works - * Added mount support for `res.redirect()`, now respects the mount-point - * Added `union()` util, taking place of `merge(clone())` combo - * Added stylus support to express(1) generated app - * Added secret to session middleware used in examples and generated app - * Added `res.local(name, val)` for progressive view locals - * Added default param support to `req.param(name, default)` - * Added `app.disabled()` and `app.enabled()` - * Added `app.register()` support for omitting leading ".", either works - * Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539 - * Added `app.param()` to map route params to async/sync logic - * Added; aliased `app.helpers()` as `app.locals()`. Closes #481 - * Added extname with no leading "." support to `res.contentType()` - * Added `cache views` setting, defaulting to enabled in "production" env - * Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_. - * Added `req.accepts()` support for extensions - * Changed; `res.download()` and `res.sendfile()` now utilize Connect's - static file server `connect.static.send()`. - * Changed; replaced `connect.utils.mime()` with npm _mime_ module - * Changed; allow `req.query` to be pre-defined (via middleware or other parent - * Changed view partial resolution, now relative to parent view - * Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`. - * Fixed `req.param()` bug returning Array.prototype methods. Closes #552 - * Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()` - * Fixed; using _qs_ module instead of _querystring_ - * Fixed; strip unsafe chars from jsonp callbacks - * Removed "stream threshold" setting - -1.0.8 / 2011-03-01 -================== - - * Allow `req.query` to be pre-defined (via middleware or other parent app) - * "connect": ">= 0.5.0 < 1.0.0". Closes #547 - * Removed the long deprecated __EXPRESS_ENV__ support - -1.0.7 / 2011-02-07 -================== - - * Fixed `render()` setting inheritance. - Mounted apps would not inherit "view engine" - -1.0.6 / 2011-02-07 -================== - - * Fixed `view engine` setting bug when period is in dirname - -1.0.5 / 2011-02-05 -================== - - * Added secret to generated app `session()` call - -1.0.4 / 2011-02-05 -================== - - * Added `qs` dependency to _package.json_ - * Fixed namespaced `require()`s for latest connect support - -1.0.3 / 2011-01-13 -================== - - * Remove unsafe characters from JSONP callback names [Ryan Grove] - -1.0.2 / 2011-01-10 -================== - - * Removed nested require, using `connect.router` - -1.0.1 / 2010-12-29 -================== - - * Fixed for middleware stacked via `createServer()` - previously the `foo` middleware passed to `createServer(foo)` - would not have access to Express methods such as `res.send()` - or props like `req.query` etc. - -1.0.0 / 2010-11-16 -================== - - * Added; deduce partial object names from the last segment. - For example by default `partial('forum/post', postObject)` will - give you the _post_ object, providing a meaningful default. - * Added http status code string representation to `res.redirect()` body - * Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__. - * Added `req.is()` to aid in content negotiation - * Added partial local inheritance [suggested by masylum]. Closes #102 - providing access to parent template locals. - * Added _-s, --session[s]_ flag to express(1) to add session related middleware - * Added _--template_ flag to express(1) to specify the - template engine to use. - * Added _--css_ flag to express(1) to specify the - stylesheet engine to use (or just plain css by default). - * Added `app.all()` support [thanks aheckmann] - * Added partial direct object support. - You may now `partial('user', user)` providing the "user" local, - vs previously `partial('user', { object: user })`. - * Added _route-separation_ example since many people question ways - to do this with CommonJS modules. Also view the _blog_ example for - an alternative. - * Performance; caching view path derived partial object names - * Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454 - * Fixed jsonp support; _text/javascript_ as per mailinglist discussion - -1.0.0rc4 / 2010-10-14 -================== - - * Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0 - * Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware)) - * Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass] - * Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass] - * Added `partial()` support for array-like collections. Closes #434 - * Added support for swappable querystring parsers - * Added session usage docs. Closes #443 - * Added dynamic helper caching. Closes #439 [suggested by maritz] - * Added authentication example - * Added basic Range support to `res.sendfile()` (and `res.download()` etc) - * Changed; `express(1)` generated app using 2 spaces instead of 4 - * Default env to "development" again [aheckmann] - * Removed _context_ option is no more, use "scope" - * Fixed; exposing _./support_ libs to examples so they can run without installs - * Fixed mvc example - -1.0.0rc3 / 2010-09-20 -================== - - * Added confirmation for `express(1)` app generation. Closes #391 - * Added extending of flash formatters via `app.flashFormatters` - * Added flash formatter support. Closes #411 - * Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold" - * Added _stream threshold_ setting for `res.sendfile()` - * Added `res.send()` __HEAD__ support - * Added `res.clearCookie()` - * Added `res.cookie()` - * Added `res.render()` headers option - * Added `res.redirect()` response bodies - * Added `res.render()` status option support. Closes #425 [thanks aheckmann] - * Fixed `res.sendfile()` responding with 403 on malicious path - * Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_ - * Fixed; mounted apps settings now inherit from parent app [aheckmann] - * Fixed; stripping Content-Length / Content-Type when 204 - * Fixed `res.send()` 204. Closes #419 - * Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402 - * Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo] - - -1.0.0rc2 / 2010-08-17 -================== - - * Added `app.register()` for template engine mapping. Closes #390 - * Added `res.render()` callback support as second argument (no options) - * Added callback support to `res.download()` - * Added callback support for `res.sendfile()` - * Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()` - * Added "partials" setting to docs - * Added default expresso tests to `express(1)` generated app. Closes #384 - * Fixed `res.sendfile()` error handling, defer via `next()` - * Fixed `res.render()` callback when a layout is used [thanks guillermo] - * Fixed; `make install` creating ~/.node_libraries when not present - * Fixed issue preventing error handlers from being defined anywhere. Closes #387 - -1.0.0rc / 2010-07-28 -================== - - * Added mounted hook. Closes #369 - * Added connect dependency to _package.json_ - - * Removed "reload views" setting and support code - development env never caches, production always caches. - - * Removed _param_ in route callbacks, signature is now - simply (req, res, next), previously (req, res, params, next). - Use _req.params_ for path captures, _req.query_ for GET params. - - * Fixed "home" setting - * Fixed middleware/router precedence issue. Closes #366 - * Fixed; _configure()_ callbacks called immediately. Closes #368 - -1.0.0beta2 / 2010-07-23 -================== - - * Added more examples - * Added; exporting `Server` constructor - * Added `Server#helpers()` for view locals - * Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349 - * Added support for absolute view paths - * Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363 - * Added Guillermo Rauch to the contributor list - * Added support for "as" for non-collection partials. Closes #341 - * Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf] - * Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo] - * Fixed instanceof `Array` checks, now `Array.isArray()` - * Fixed express(1) expansion of public dirs. Closes #348 - * Fixed middleware precedence. Closes #345 - * Fixed view watcher, now async [thanks aheckmann] - -1.0.0beta / 2010-07-15 -================== - - * Re-write - - much faster - - much lighter - - Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs - -0.14.0 / 2010-06-15 -================== - - * Utilize relative requires - * Added Static bufferSize option [aheckmann] - * Fixed caching of view and partial subdirectories [aheckmann] - * Fixed mime.type() comments now that ".ext" is not supported - * Updated haml submodule - * Updated class submodule - * Removed bin/express - -0.13.0 / 2010-06-01 -================== - - * Added node v0.1.97 compatibility - * Added support for deleting cookies via Request#cookie('key', null) - * Updated haml submodule - * Fixed not-found page, now using using charset utf-8 - * Fixed show-exceptions page, now using using charset utf-8 - * Fixed view support due to fs.readFile Buffers - * Changed; mime.type() no longer accepts ".type" due to node extname() changes - -0.12.0 / 2010-05-22 -================== - - * Added node v0.1.96 compatibility - * Added view `helpers` export which act as additional local variables - * Updated haml submodule - * Changed ETag; removed inode, modified time only - * Fixed LF to CRLF for setting multiple cookies - * Fixed cookie complation; values are now urlencoded - * Fixed cookies parsing; accepts quoted values and url escaped cookies - -0.11.0 / 2010-05-06 -================== - - * Added support for layouts using different engines - - this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' }) - - this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml' - - this.render('page.html.haml', { layout: false }) // no layout - * Updated ext submodule - * Updated haml submodule - * Fixed EJS partial support by passing along the context. Issue #307 - -0.10.1 / 2010-05-03 -================== - - * Fixed binary uploads. - -0.10.0 / 2010-04-30 -================== - - * Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s - encoding is set to 'utf8' or 'utf-8'. - * Added "encoding" option to Request#render(). Closes #299 - * Added "dump exceptions" setting, which is enabled by default. - * Added simple ejs template engine support - * Added error response support for text/plain, application/json. Closes #297 - * Added callback function param to Request#error() - * Added Request#sendHead() - * Added Request#stream() - * Added support for Request#respond(304, null) for empty response bodies - * Added ETag support to Request#sendfile() - * Added options to Request#sendfile(), passed to fs.createReadStream() - * Added filename arg to Request#download() - * Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request - * Performance enhanced by preventing several calls to toLowerCase() in Router#match() - * Changed; Request#sendfile() now streams - * Changed; Renamed Request#halt() to Request#respond(). Closes #289 - * Changed; Using sys.inspect() instead of JSON.encode() for error output - * Changed; run() returns the http.Server instance. Closes #298 - * Changed; Defaulting Server#host to null (INADDR_ANY) - * Changed; Logger "common" format scale of 0.4f - * Removed Logger "request" format - * Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found - * Fixed several issues with http client - * Fixed Logger Content-Length output - * Fixed bug preventing Opera from retaining the generated session id. Closes #292 - -0.9.0 / 2010-04-14 -================== - - * Added DSL level error() route support - * Added DSL level notFound() route support - * Added Request#error() - * Added Request#notFound() - * Added Request#render() callback function. Closes #258 - * Added "max upload size" setting - * Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254 - * Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js - * Added callback function support to Request#halt() as 3rd/4th arg - * Added preprocessing of route param wildcards using param(). Closes #251 - * Added view partial support (with collections etc) - * Fixed bug preventing falsey params (such as ?page=0). Closes #286 - * Fixed setting of multiple cookies. Closes #199 - * Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml) - * Changed; session cookie is now httpOnly - * Changed; Request is no longer global - * Changed; Event is no longer global - * Changed; "sys" module is no longer global - * Changed; moved Request#download to Static plugin where it belongs - * Changed; Request instance created before body parsing. Closes #262 - * Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253 - * Changed; Pre-caching view partials in memory when "cache view partials" is enabled - * Updated support to node --version 0.1.90 - * Updated dependencies - * Removed set("session cookie") in favour of use(Session, { cookie: { ... }}) - * Removed utils.mixin(); use Object#mergeDeep() - -0.8.0 / 2010-03-19 -================== - - * Added coffeescript example app. Closes #242 - * Changed; cache api now async friendly. Closes #240 - * Removed deprecated 'express/static' support. Use 'express/plugins/static' - -0.7.6 / 2010-03-19 -================== - - * Added Request#isXHR. Closes #229 - * Added `make install` (for the executable) - * Added `express` executable for setting up simple app templates - * Added "GET /public/*" to Static plugin, defaulting to /public - * Added Static plugin - * Fixed; Request#render() only calls cache.get() once - * Fixed; Namespacing View caches with "view:" - * Fixed; Namespacing Static caches with "static:" - * Fixed; Both example apps now use the Static plugin - * Fixed set("views"). Closes #239 - * Fixed missing space for combined log format - * Deprecated Request#sendfile() and 'express/static' - * Removed Server#running - -0.7.5 / 2010-03-16 -================== - - * Added Request#flash() support without args, now returns all flashes - * Updated ext submodule - -0.7.4 / 2010-03-16 -================== - - * Fixed session reaper - * Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft) - -0.7.3 / 2010-03-16 -================== - - * Added package.json - * Fixed requiring of haml / sass due to kiwi removal - -0.7.2 / 2010-03-16 -================== - - * Fixed GIT submodules (HAH!) - -0.7.1 / 2010-03-16 -================== - - * Changed; Express now using submodules again until a PM is adopted - * Changed; chat example using millisecond conversions from ext - -0.7.0 / 2010-03-15 -================== - - * Added Request#pass() support (finds the next matching route, or the given path) - * Added Logger plugin (default "common" format replaces CommonLogger) - * Removed Profiler plugin - * Removed CommonLogger plugin - -0.6.0 / 2010-03-11 -================== - - * Added seed.yml for kiwi package management support - * Added HTTP client query string support when method is GET. Closes #205 - - * Added support for arbitrary view engines. - For example "foo.engine.html" will now require('engine'), - the exports from this module are cached after the first require(). - - * Added async plugin support - - * Removed usage of RESTful route funcs as http client - get() etc, use http.get() and friends - - * Removed custom exceptions - -0.5.0 / 2010-03-10 -================== - - * Added ext dependency (library of js extensions) - * Removed extname() / basename() utils. Use path module - * Removed toArray() util. Use arguments.values - * Removed escapeRegexp() util. Use RegExp.escape() - * Removed process.mixin() dependency. Use utils.mixin() - * Removed Collection - * Removed ElementCollection - * Shameless self promotion of ebook "Advanced JavaScript" (http://dev-mag.com) ;) - -0.4.0 / 2010-02-11 -================== - - * Added flash() example to sample upload app - * Added high level restful http client module (express/http) - * Changed; RESTful route functions double as HTTP clients. Closes #69 - * Changed; throwing error when routes are added at runtime - * Changed; defaulting render() context to the current Request. Closes #197 - * Updated haml submodule - -0.3.0 / 2010-02-11 -================== - - * Updated haml / sass submodules. Closes #200 - * Added flash message support. Closes #64 - * Added accepts() now allows multiple args. fixes #117 - * Added support for plugins to halt. Closes #189 - * Added alternate layout support. Closes #119 - * Removed Route#run(). Closes #188 - * Fixed broken specs due to use(Cookie) missing - -0.2.1 / 2010-02-05 -================== - - * Added "plot" format option for Profiler (for gnuplot processing) - * Added request number to Profiler plugin - * Fixed binary encoding for multi-part file uploads, was previously defaulting to UTF8 - * Fixed issue with routes not firing when not files are present. Closes #184 - * Fixed process.Promise -> events.Promise - -0.2.0 / 2010-02-03 -================== - - * Added parseParam() support for name[] etc. (allows for file inputs with "multiple" attr) Closes #180 - * Added Both Cache and Session option "reapInterval" may be "reapEvery". Closes #174 - * Added expiration support to cache api with reaper. Closes #133 - * Added cache Store.Memory#reap() - * Added Cache; cache api now uses first class Cache instances - * Added abstract session Store. Closes #172 - * Changed; cache Memory.Store#get() utilizing Collection - * Renamed MemoryStore -> Store.Memory - * Fixed use() of the same plugin several time will always use latest options. Closes #176 - -0.1.0 / 2010-02-03 -================== - - * Changed; Hooks (before / after) pass request as arg as well as evaluated in their context - * Updated node support to 0.1.27 Closes #169 - * Updated dirname(__filename) -> __dirname - * Updated libxmljs support to v0.2.0 - * Added session support with memory store / reaping - * Added quick uid() helper - * Added multi-part upload support - * Added Sass.js support / submodule - * Added production env caching view contents and static files - * Added static file caching. Closes #136 - * Added cache plugin with memory stores - * Added support to StaticFile so that it works with non-textual files. - * Removed dirname() helper - * Removed several globals (now their modules must be required) - -0.0.2 / 2010-01-10 -================== - - * Added view benchmarks; currently haml vs ejs - * Added Request#attachment() specs. Closes #116 - * Added use of node's parseQuery() util. Closes #123 - * Added `make init` for submodules - * Updated Haml - * Updated sample chat app to show messages on load - * Updated libxmljs parseString -> parseHtmlString - * Fixed `make init` to work with older versions of git - * Fixed specs can now run independent specs for those who cant build deps. Closes #127 - * Fixed issues introduced by the node url module changes. Closes 126. - * Fixed two assertions failing due to Collection#keys() returning strings - * Fixed faulty Collection#toArray() spec due to keys() returning strings - * Fixed `make test` now builds libxmljs.node before testing - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/express/LICENSE b/truebit-implementation/node_modules/express/LICENSE deleted file mode 100644 index aa927e44..00000000 --- a/truebit-implementation/node_modules/express/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2009-2014 TJ Holowaychuk -Copyright (c) 2013-2014 Roman Shtylman -Copyright (c) 2014-2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/express/Readme.md b/truebit-implementation/node_modules/express/Readme.md deleted file mode 100644 index 582e8958..00000000 --- a/truebit-implementation/node_modules/express/Readme.md +++ /dev/null @@ -1,153 +0,0 @@ -[![Express Logo](https://i.cloudup.com/zfY6lL7eFa-3000x3000.png)](http://expressjs.com/) - - Fast, unopinionated, minimalist web framework for [node](http://nodejs.org). - - [![NPM Version][npm-image]][npm-url] - [![NPM Downloads][downloads-image]][downloads-url] - [![Linux Build][travis-image]][travis-url] - [![Windows Build][appveyor-image]][appveyor-url] - [![Test Coverage][coveralls-image]][coveralls-url] - -```js -var express = require('express') -var app = express() - -app.get('/', function (req, res) { - res.send('Hello World') -}) - -app.listen(3000) -``` - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). - -Before installing, [download and install Node.js](https://nodejs.org/en/download/). -Node.js 0.10 or higher is required. - -Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```bash -$ npm install express -``` - -Follow [our installing guide](http://expressjs.com/en/starter/installing.html) -for more information. - -## Features - - * Robust routing - * Focus on high performance - * Super-high test coverage - * HTTP helpers (redirection, caching, etc) - * View system supporting 14+ template engines - * Content negotiation - * Executable for generating applications quickly - -## Docs & Community - - * [Website and Documentation](http://expressjs.com/) - [[website repo](https://github.com/expressjs/expressjs.com)] - * [#express](https://webchat.freenode.net/?channels=express) on freenode IRC - * [GitHub Organization](https://github.com/expressjs) for Official Middleware & Modules - * Visit the [Wiki](https://github.com/expressjs/express/wiki) - * [Google Group](https://groups.google.com/group/express-js) for discussion - * [Gitter](https://gitter.im/expressjs/express) for support and discussion - -**PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/expressjs/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/expressjs/express/wiki/New-features-in-4.x). - -### Security Issues - -If you discover a security vulnerability in Express, please see [Security Policies and Procedures](Security.md). - -## Quick Start - - The quickest way to get started with express is to utilize the executable [`express(1)`](https://github.com/expressjs/generator) to generate an application as shown below: - - Install the executable. The executable's major version will match Express's: - -```bash -$ npm install -g express-generator@4 -``` - - Create the app: - -```bash -$ express /tmp/foo && cd /tmp/foo -``` - - Install dependencies: - -```bash -$ npm install -``` - - Start the server: - -```bash -$ npm start -``` - -## Philosophy - - The Express philosophy is to provide small, robust tooling for HTTP servers, making - it a great solution for single page applications, web sites, hybrids, or public - HTTP APIs. - - Express does not force you to use any specific ORM or template engine. With support for over - 14 template engines via [Consolidate.js](https://github.com/tj/consolidate.js), - you can quickly craft your perfect framework. - -## Examples - - To view the examples, clone the Express repo and install the dependencies: - -```bash -$ git clone git://github.com/expressjs/express.git --depth 1 -$ cd express -$ npm install -``` - - Then run whichever example you want: - -```bash -$ node examples/content-negotiation -``` - -## Tests - - To run the test suite, first install the dependencies, then run `npm test`: - -```bash -$ npm install -$ npm test -``` - -## People - -The original author of Express is [TJ Holowaychuk](https://github.com/tj) - -The current lead maintainer is [Douglas Christopher Wilson](https://github.com/dougwilson) - -[List of all contributors](https://github.com/expressjs/express/graphs/contributors) - -## License - - [MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/express.svg -[npm-url]: https://npmjs.org/package/express -[downloads-image]: https://img.shields.io/npm/dm/express.svg -[downloads-url]: https://npmjs.org/package/express -[travis-image]: https://img.shields.io/travis/expressjs/express/master.svg?label=linux -[travis-url]: https://travis-ci.org/expressjs/express -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/express/master.svg?label=windows -[appveyor-url]: https://ci.appveyor.com/project/dougwilson/express -[coveralls-image]: https://img.shields.io/coveralls/expressjs/express/master.svg -[coveralls-url]: https://coveralls.io/r/expressjs/express?branch=master -[gratipay-image-visionmedia]: https://img.shields.io/gratipay/visionmedia.svg -[gratipay-url-visionmedia]: https://gratipay.com/visionmedia/ -[gratipay-image-dougwilson]: https://img.shields.io/gratipay/dougwilson.svg -[gratipay-url-dougwilson]: https://gratipay.com/dougwilson/ diff --git a/truebit-implementation/node_modules/express/index.js b/truebit-implementation/node_modules/express/index.js deleted file mode 100644 index d219b0c8..00000000 --- a/truebit-implementation/node_modules/express/index.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -module.exports = require('./lib/express'); diff --git a/truebit-implementation/node_modules/express/lib/application.js b/truebit-implementation/node_modules/express/lib/application.js deleted file mode 100644 index 91f77d24..00000000 --- a/truebit-implementation/node_modules/express/lib/application.js +++ /dev/null @@ -1,644 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var finalhandler = require('finalhandler'); -var Router = require('./router'); -var methods = require('methods'); -var middleware = require('./middleware/init'); -var query = require('./middleware/query'); -var debug = require('debug')('express:application'); -var View = require('./view'); -var http = require('http'); -var compileETag = require('./utils').compileETag; -var compileQueryParser = require('./utils').compileQueryParser; -var compileTrust = require('./utils').compileTrust; -var deprecate = require('depd')('express'); -var flatten = require('array-flatten'); -var merge = require('utils-merge'); -var resolve = require('path').resolve; -var setPrototypeOf = require('setprototypeof') -var slice = Array.prototype.slice; - -/** - * Application prototype. - */ - -var app = exports = module.exports = {}; - -/** - * Variable for trust proxy inheritance back-compat - * @private - */ - -var trustProxyDefaultSymbol = '@@symbol:trust_proxy_default'; - -/** - * Initialize the server. - * - * - setup default configuration - * - setup default middleware - * - setup route reflection methods - * - * @private - */ - -app.init = function init() { - this.cache = {}; - this.engines = {}; - this.settings = {}; - - this.defaultConfiguration(); -}; - -/** - * Initialize application configuration. - * @private - */ - -app.defaultConfiguration = function defaultConfiguration() { - var env = process.env.NODE_ENV || 'development'; - - // default settings - this.enable('x-powered-by'); - this.set('etag', 'weak'); - this.set('env', env); - this.set('query parser', 'extended'); - this.set('subdomain offset', 2); - this.set('trust proxy', false); - - // trust proxy inherit back-compat - Object.defineProperty(this.settings, trustProxyDefaultSymbol, { - configurable: true, - value: true - }); - - debug('booting in %s mode', env); - - this.on('mount', function onmount(parent) { - // inherit trust proxy - if (this.settings[trustProxyDefaultSymbol] === true - && typeof parent.settings['trust proxy fn'] === 'function') { - delete this.settings['trust proxy']; - delete this.settings['trust proxy fn']; - } - - // inherit protos - setPrototypeOf(this.request, parent.request) - setPrototypeOf(this.response, parent.response) - setPrototypeOf(this.engines, parent.engines) - setPrototypeOf(this.settings, parent.settings) - }); - - // setup locals - this.locals = Object.create(null); - - // top-most app is mounted at / - this.mountpath = '/'; - - // default locals - this.locals.settings = this.settings; - - // default configuration - this.set('view', View); - this.set('views', resolve('views')); - this.set('jsonp callback name', 'callback'); - - if (env === 'production') { - this.enable('view cache'); - } - - Object.defineProperty(this, 'router', { - get: function() { - throw new Error('\'app.router\' is deprecated!\nPlease see the 3.x to 4.x migration guide for details on how to update your app.'); - } - }); -}; - -/** - * lazily adds the base router if it has not yet been added. - * - * We cannot add the base router in the defaultConfiguration because - * it reads app settings which might be set after that has run. - * - * @private - */ -app.lazyrouter = function lazyrouter() { - if (!this._router) { - this._router = new Router({ - caseSensitive: this.enabled('case sensitive routing'), - strict: this.enabled('strict routing') - }); - - this._router.use(query(this.get('query parser fn'))); - this._router.use(middleware.init(this)); - } -}; - -/** - * Dispatch a req, res pair into the application. Starts pipeline processing. - * - * If no callback is provided, then default error handlers will respond - * in the event of an error bubbling through the stack. - * - * @private - */ - -app.handle = function handle(req, res, callback) { - var router = this._router; - - // final handler - var done = callback || finalhandler(req, res, { - env: this.get('env'), - onerror: logerror.bind(this) - }); - - // no routes - if (!router) { - debug('no routes defined on app'); - done(); - return; - } - - router.handle(req, res, done); -}; - -/** - * Proxy `Router#use()` to add middleware to the app router. - * See Router#use() documentation for details. - * - * If the _fn_ parameter is an express app, then it will be - * mounted at the _route_ specified. - * - * @public - */ - -app.use = function use(fn) { - var offset = 0; - var path = '/'; - - // default path to '/' - // disambiguate app.use([fn]) - if (typeof fn !== 'function') { - var arg = fn; - - while (Array.isArray(arg) && arg.length !== 0) { - arg = arg[0]; - } - - // first arg is the path - if (typeof arg !== 'function') { - offset = 1; - path = fn; - } - } - - var fns = flatten(slice.call(arguments, offset)); - - if (fns.length === 0) { - throw new TypeError('app.use() requires a middleware function') - } - - // setup router - this.lazyrouter(); - var router = this._router; - - fns.forEach(function (fn) { - // non-express app - if (!fn || !fn.handle || !fn.set) { - return router.use(path, fn); - } - - debug('.use app under %s', path); - fn.mountpath = path; - fn.parent = this; - - // restore .app property on req and res - router.use(path, function mounted_app(req, res, next) { - var orig = req.app; - fn.handle(req, res, function (err) { - setPrototypeOf(req, orig.request) - setPrototypeOf(res, orig.response) - next(err); - }); - }); - - // mounted an app - fn.emit('mount', this); - }, this); - - return this; -}; - -/** - * Proxy to the app `Router#route()` - * Returns a new `Route` instance for the _path_. - * - * Routes are isolated middleware stacks for specific paths. - * See the Route api docs for details. - * - * @public - */ - -app.route = function route(path) { - this.lazyrouter(); - return this._router.route(path); -}; - -/** - * Register the given template engine callback `fn` - * as `ext`. - * - * By default will `require()` the engine based on the - * file extension. For example if you try to render - * a "foo.ejs" file Express will invoke the following internally: - * - * app.engine('ejs', require('ejs').__express); - * - * For engines that do not provide `.__express` out of the box, - * or if you wish to "map" a different extension to the template engine - * you may use this method. For example mapping the EJS template engine to - * ".html" files: - * - * app.engine('html', require('ejs').renderFile); - * - * In this case EJS provides a `.renderFile()` method with - * the same signature that Express expects: `(path, options, callback)`, - * though note that it aliases this method as `ejs.__express` internally - * so if you're using ".ejs" extensions you dont need to do anything. - * - * Some template engines do not follow this convention, the - * [Consolidate.js](https://github.com/tj/consolidate.js) - * library was created to map all of node's popular template - * engines to follow this convention, thus allowing them to - * work seamlessly within Express. - * - * @param {String} ext - * @param {Function} fn - * @return {app} for chaining - * @public - */ - -app.engine = function engine(ext, fn) { - if (typeof fn !== 'function') { - throw new Error('callback function required'); - } - - // get file extension - var extension = ext[0] !== '.' - ? '.' + ext - : ext; - - // store engine - this.engines[extension] = fn; - - return this; -}; - -/** - * Proxy to `Router#param()` with one added api feature. The _name_ parameter - * can be an array of names. - * - * See the Router#param() docs for more details. - * - * @param {String|Array} name - * @param {Function} fn - * @return {app} for chaining - * @public - */ - -app.param = function param(name, fn) { - this.lazyrouter(); - - if (Array.isArray(name)) { - for (var i = 0; i < name.length; i++) { - this.param(name[i], fn); - } - - return this; - } - - this._router.param(name, fn); - - return this; -}; - -/** - * Assign `setting` to `val`, or return `setting`'s value. - * - * app.set('foo', 'bar'); - * app.set('foo'); - * // => "bar" - * - * Mounted servers inherit their parent server's settings. - * - * @param {String} setting - * @param {*} [val] - * @return {Server} for chaining - * @public - */ - -app.set = function set(setting, val) { - if (arguments.length === 1) { - // app.get(setting) - return this.settings[setting]; - } - - debug('set "%s" to %o', setting, val); - - // set value - this.settings[setting] = val; - - // trigger matched settings - switch (setting) { - case 'etag': - this.set('etag fn', compileETag(val)); - break; - case 'query parser': - this.set('query parser fn', compileQueryParser(val)); - break; - case 'trust proxy': - this.set('trust proxy fn', compileTrust(val)); - - // trust proxy inherit back-compat - Object.defineProperty(this.settings, trustProxyDefaultSymbol, { - configurable: true, - value: false - }); - - break; - } - - return this; -}; - -/** - * Return the app's absolute pathname - * based on the parent(s) that have - * mounted it. - * - * For example if the application was - * mounted as "/admin", which itself - * was mounted as "/blog" then the - * return value would be "/blog/admin". - * - * @return {String} - * @private - */ - -app.path = function path() { - return this.parent - ? this.parent.path() + this.mountpath - : ''; -}; - -/** - * Check if `setting` is enabled (truthy). - * - * app.enabled('foo') - * // => false - * - * app.enable('foo') - * app.enabled('foo') - * // => true - * - * @param {String} setting - * @return {Boolean} - * @public - */ - -app.enabled = function enabled(setting) { - return Boolean(this.set(setting)); -}; - -/** - * Check if `setting` is disabled. - * - * app.disabled('foo') - * // => true - * - * app.enable('foo') - * app.disabled('foo') - * // => false - * - * @param {String} setting - * @return {Boolean} - * @public - */ - -app.disabled = function disabled(setting) { - return !this.set(setting); -}; - -/** - * Enable `setting`. - * - * @param {String} setting - * @return {app} for chaining - * @public - */ - -app.enable = function enable(setting) { - return this.set(setting, true); -}; - -/** - * Disable `setting`. - * - * @param {String} setting - * @return {app} for chaining - * @public - */ - -app.disable = function disable(setting) { - return this.set(setting, false); -}; - -/** - * Delegate `.VERB(...)` calls to `router.VERB(...)`. - */ - -methods.forEach(function(method){ - app[method] = function(path){ - if (method === 'get' && arguments.length === 1) { - // app.get(setting) - return this.set(path); - } - - this.lazyrouter(); - - var route = this._router.route(path); - route[method].apply(route, slice.call(arguments, 1)); - return this; - }; -}); - -/** - * Special-cased "all" method, applying the given route `path`, - * middleware, and callback to _every_ HTTP method. - * - * @param {String} path - * @param {Function} ... - * @return {app} for chaining - * @public - */ - -app.all = function all(path) { - this.lazyrouter(); - - var route = this._router.route(path); - var args = slice.call(arguments, 1); - - for (var i = 0; i < methods.length; i++) { - route[methods[i]].apply(route, args); - } - - return this; -}; - -// del -> delete alias - -app.del = deprecate.function(app.delete, 'app.del: Use app.delete instead'); - -/** - * Render the given view `name` name with `options` - * and a callback accepting an error and the - * rendered template string. - * - * Example: - * - * app.render('email', { name: 'Tobi' }, function(err, html){ - * // ... - * }) - * - * @param {String} name - * @param {Object|Function} options or fn - * @param {Function} callback - * @public - */ - -app.render = function render(name, options, callback) { - var cache = this.cache; - var done = callback; - var engines = this.engines; - var opts = options; - var renderOptions = {}; - var view; - - // support callback function as second arg - if (typeof options === 'function') { - done = options; - opts = {}; - } - - // merge app.locals - merge(renderOptions, this.locals); - - // merge options._locals - if (opts._locals) { - merge(renderOptions, opts._locals); - } - - // merge options - merge(renderOptions, opts); - - // set .cache unless explicitly provided - if (renderOptions.cache == null) { - renderOptions.cache = this.enabled('view cache'); - } - - // primed cache - if (renderOptions.cache) { - view = cache[name]; - } - - // view - if (!view) { - var View = this.get('view'); - - view = new View(name, { - defaultEngine: this.get('view engine'), - root: this.get('views'), - engines: engines - }); - - if (!view.path) { - var dirs = Array.isArray(view.root) && view.root.length > 1 - ? 'directories "' + view.root.slice(0, -1).join('", "') + '" or "' + view.root[view.root.length - 1] + '"' - : 'directory "' + view.root + '"' - var err = new Error('Failed to lookup view "' + name + '" in views ' + dirs); - err.view = view; - return done(err); - } - - // prime the cache - if (renderOptions.cache) { - cache[name] = view; - } - } - - // render - tryRender(view, renderOptions, done); -}; - -/** - * Listen for connections. - * - * A node `http.Server` is returned, with this - * application (which is a `Function`) as its - * callback. If you wish to create both an HTTP - * and HTTPS server you may do so with the "http" - * and "https" modules as shown here: - * - * var http = require('http') - * , https = require('https') - * , express = require('express') - * , app = express(); - * - * http.createServer(app).listen(80); - * https.createServer({ ... }, app).listen(443); - * - * @return {http.Server} - * @public - */ - -app.listen = function listen() { - var server = http.createServer(this); - return server.listen.apply(server, arguments); -}; - -/** - * Log error using console.error. - * - * @param {Error} err - * @private - */ - -function logerror(err) { - /* istanbul ignore next */ - if (this.get('env') !== 'test') console.error(err.stack || err.toString()); -} - -/** - * Try rendering a view. - * @private - */ - -function tryRender(view, options, callback) { - try { - view.render(options, callback); - } catch (err) { - callback(err); - } -} diff --git a/truebit-implementation/node_modules/express/lib/express.js b/truebit-implementation/node_modules/express/lib/express.js deleted file mode 100644 index 594007b5..00000000 --- a/truebit-implementation/node_modules/express/lib/express.js +++ /dev/null @@ -1,114 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - */ - -var bodyParser = require('body-parser') -var EventEmitter = require('events').EventEmitter; -var mixin = require('merge-descriptors'); -var proto = require('./application'); -var Route = require('./router/route'); -var Router = require('./router'); -var req = require('./request'); -var res = require('./response'); - -/** - * Expose `createApplication()`. - */ - -exports = module.exports = createApplication; - -/** - * Create an express application. - * - * @return {Function} - * @api public - */ - -function createApplication() { - var app = function(req, res, next) { - app.handle(req, res, next); - }; - - mixin(app, EventEmitter.prototype, false); - mixin(app, proto, false); - - // expose the prototype that will get set on requests - app.request = Object.create(req, { - app: { configurable: true, enumerable: true, writable: true, value: app } - }) - - // expose the prototype that will get set on responses - app.response = Object.create(res, { - app: { configurable: true, enumerable: true, writable: true, value: app } - }) - - app.init(); - return app; -} - -/** - * Expose the prototypes. - */ - -exports.application = proto; -exports.request = req; -exports.response = res; - -/** - * Expose constructors. - */ - -exports.Route = Route; -exports.Router = Router; - -/** - * Expose middleware - */ - -exports.json = bodyParser.json -exports.query = require('./middleware/query'); -exports.static = require('serve-static'); -exports.urlencoded = bodyParser.urlencoded - -/** - * Replace removed middleware with an appropriate error message. - */ - -var removedMiddlewares = [ - 'bodyParser', - 'compress', - 'cookieSession', - 'session', - 'logger', - 'cookieParser', - 'favicon', - 'responseTime', - 'errorHandler', - 'timeout', - 'methodOverride', - 'vhost', - 'csrf', - 'directory', - 'limit', - 'multipart', - 'staticCache' -] - -removedMiddlewares.forEach(function (name) { - Object.defineProperty(exports, name, { - get: function () { - throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.'); - }, - configurable: true - }); -}); diff --git a/truebit-implementation/node_modules/express/lib/middleware/init.js b/truebit-implementation/node_modules/express/lib/middleware/init.js deleted file mode 100644 index dfd04274..00000000 --- a/truebit-implementation/node_modules/express/lib/middleware/init.js +++ /dev/null @@ -1,43 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var setPrototypeOf = require('setprototypeof') - -/** - * Initialization middleware, exposing the - * request and response to each other, as well - * as defaulting the X-Powered-By header field. - * - * @param {Function} app - * @return {Function} - * @api private - */ - -exports.init = function(app){ - return function expressInit(req, res, next){ - if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); - req.res = res; - res.req = req; - req.next = next; - - setPrototypeOf(req, app.request) - setPrototypeOf(res, app.response) - - res.locals = res.locals || Object.create(null); - - next(); - }; -}; - diff --git a/truebit-implementation/node_modules/express/lib/middleware/query.js b/truebit-implementation/node_modules/express/lib/middleware/query.js deleted file mode 100644 index 7e916694..00000000 --- a/truebit-implementation/node_modules/express/lib/middleware/query.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - */ - -var merge = require('utils-merge') -var parseUrl = require('parseurl'); -var qs = require('qs'); - -/** - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function query(options) { - var opts = merge({}, options) - var queryparse = qs.parse; - - if (typeof options === 'function') { - queryparse = options; - opts = undefined; - } - - if (opts !== undefined && opts.allowPrototypes === undefined) { - // back-compat for qs module - opts.allowPrototypes = true; - } - - return function query(req, res, next){ - if (!req.query) { - var val = parseUrl(req).query; - req.query = queryparse(val, opts); - } - - next(); - }; -}; diff --git a/truebit-implementation/node_modules/express/lib/request.js b/truebit-implementation/node_modules/express/lib/request.js deleted file mode 100644 index 8bb86a9a..00000000 --- a/truebit-implementation/node_modules/express/lib/request.js +++ /dev/null @@ -1,521 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var accepts = require('accepts'); -var deprecate = require('depd')('express'); -var isIP = require('net').isIP; -var typeis = require('type-is'); -var http = require('http'); -var fresh = require('fresh'); -var parseRange = require('range-parser'); -var parse = require('parseurl'); -var proxyaddr = require('proxy-addr'); - -/** - * Request prototype. - * @public - */ - -var req = Object.create(http.IncomingMessage.prototype) - -/** - * Module exports. - * @public - */ - -module.exports = req - -/** - * Return request header. - * - * The `Referrer` header field is special-cased, - * both `Referrer` and `Referer` are interchangeable. - * - * Examples: - * - * req.get('Content-Type'); - * // => "text/plain" - * - * req.get('content-type'); - * // => "text/plain" - * - * req.get('Something'); - * // => undefined - * - * Aliased as `req.header()`. - * - * @param {String} name - * @return {String} - * @public - */ - -req.get = -req.header = function header(name) { - if (!name) { - throw new TypeError('name argument is required to req.get'); - } - - if (typeof name !== 'string') { - throw new TypeError('name must be a string to req.get'); - } - - var lc = name.toLowerCase(); - - switch (lc) { - case 'referer': - case 'referrer': - return this.headers.referrer - || this.headers.referer; - default: - return this.headers[lc]; - } -}; - -/** - * To do: update docs. - * - * Check if the given `type(s)` is acceptable, returning - * the best match when true, otherwise `undefined`, in which - * case you should respond with 406 "Not Acceptable". - * - * The `type` value may be a single MIME type string - * such as "application/json", an extension name - * such as "json", a comma-delimited list such as "json, html, text/plain", - * an argument list such as `"json", "html", "text/plain"`, - * or an array `["json", "html", "text/plain"]`. When a list - * or array is given, the _best_ match, if any is returned. - * - * Examples: - * - * // Accept: text/html - * req.accepts('html'); - * // => "html" - * - * // Accept: text/*, application/json - * req.accepts('html'); - * // => "html" - * req.accepts('text/html'); - * // => "text/html" - * req.accepts('json, text'); - * // => "json" - * req.accepts('application/json'); - * // => "application/json" - * - * // Accept: text/*, application/json - * req.accepts('image/png'); - * req.accepts('png'); - * // => undefined - * - * // Accept: text/*;q=.5, application/json - * req.accepts(['html', 'json']); - * req.accepts('html', 'json'); - * req.accepts('html, json'); - * // => "json" - * - * @param {String|Array} type(s) - * @return {String|Array|Boolean} - * @public - */ - -req.accepts = function(){ - var accept = accepts(this); - return accept.types.apply(accept, arguments); -}; - -/** - * Check if the given `encoding`s are accepted. - * - * @param {String} ...encoding - * @return {String|Array} - * @public - */ - -req.acceptsEncodings = function(){ - var accept = accepts(this); - return accept.encodings.apply(accept, arguments); -}; - -req.acceptsEncoding = deprecate.function(req.acceptsEncodings, - 'req.acceptsEncoding: Use acceptsEncodings instead'); - -/** - * Check if the given `charset`s are acceptable, - * otherwise you should respond with 406 "Not Acceptable". - * - * @param {String} ...charset - * @return {String|Array} - * @public - */ - -req.acceptsCharsets = function(){ - var accept = accepts(this); - return accept.charsets.apply(accept, arguments); -}; - -req.acceptsCharset = deprecate.function(req.acceptsCharsets, - 'req.acceptsCharset: Use acceptsCharsets instead'); - -/** - * Check if the given `lang`s are acceptable, - * otherwise you should respond with 406 "Not Acceptable". - * - * @param {String} ...lang - * @return {String|Array} - * @public - */ - -req.acceptsLanguages = function(){ - var accept = accepts(this); - return accept.languages.apply(accept, arguments); -}; - -req.acceptsLanguage = deprecate.function(req.acceptsLanguages, - 'req.acceptsLanguage: Use acceptsLanguages instead'); - -/** - * Parse Range header field, capping to the given `size`. - * - * Unspecified ranges such as "0-" require knowledge of your resource length. In - * the case of a byte range this is of course the total number of bytes. If the - * Range header field is not given `undefined` is returned, `-1` when unsatisfiable, - * and `-2` when syntactically invalid. - * - * When ranges are returned, the array has a "type" property which is the type of - * range that is required (most commonly, "bytes"). Each array element is an object - * with a "start" and "end" property for the portion of the range. - * - * The "combine" option can be set to `true` and overlapping & adjacent ranges - * will be combined into a single range. - * - * NOTE: remember that ranges are inclusive, so for example "Range: users=0-3" - * should respond with 4 users when available, not 3. - * - * @param {number} size - * @param {object} [options] - * @param {boolean} [options.combine=false] - * @return {number|array} - * @public - */ - -req.range = function range(size, options) { - var range = this.get('Range'); - if (!range) return; - return parseRange(size, range, options); -}; - -/** - * Return the value of param `name` when present or `defaultValue`. - * - * - Checks route placeholders, ex: _/user/:id_ - * - Checks body params, ex: id=12, {"id":12} - * - Checks query string params, ex: ?id=12 - * - * To utilize request bodies, `req.body` - * should be an object. This can be done by using - * the `bodyParser()` middleware. - * - * @param {String} name - * @param {Mixed} [defaultValue] - * @return {String} - * @public - */ - -req.param = function param(name, defaultValue) { - var params = this.params || {}; - var body = this.body || {}; - var query = this.query || {}; - - var args = arguments.length === 1 - ? 'name' - : 'name, default'; - deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead'); - - if (null != params[name] && params.hasOwnProperty(name)) return params[name]; - if (null != body[name]) return body[name]; - if (null != query[name]) return query[name]; - - return defaultValue; -}; - -/** - * Check if the incoming request contains the "Content-Type" - * header field, and it contains the give mime `type`. - * - * Examples: - * - * // With Content-Type: text/html; charset=utf-8 - * req.is('html'); - * req.is('text/html'); - * req.is('text/*'); - * // => true - * - * // When Content-Type is application/json - * req.is('json'); - * req.is('application/json'); - * req.is('application/*'); - * // => true - * - * req.is('html'); - * // => false - * - * @param {String|Array} types... - * @return {String|false|null} - * @public - */ - -req.is = function is(types) { - var arr = types; - - // support flattened arguments - if (!Array.isArray(types)) { - arr = new Array(arguments.length); - for (var i = 0; i < arr.length; i++) { - arr[i] = arguments[i]; - } - } - - return typeis(this, arr); -}; - -/** - * Return the protocol string "http" or "https" - * when requested with TLS. When the "trust proxy" - * setting trusts the socket address, the - * "X-Forwarded-Proto" header field will be trusted - * and used if present. - * - * If you're running behind a reverse proxy that - * supplies https for you this may be enabled. - * - * @return {String} - * @public - */ - -defineGetter(req, 'protocol', function protocol(){ - var proto = this.connection.encrypted - ? 'https' - : 'http'; - var trust = this.app.get('trust proxy fn'); - - if (!trust(this.connection.remoteAddress, 0)) { - return proto; - } - - // Note: X-Forwarded-Proto is normally only ever a - // single value, but this is to be safe. - var header = this.get('X-Forwarded-Proto') || proto - var index = header.indexOf(',') - - return index !== -1 - ? header.substring(0, index).trim() - : header.trim() -}); - -/** - * Short-hand for: - * - * req.protocol === 'https' - * - * @return {Boolean} - * @public - */ - -defineGetter(req, 'secure', function secure(){ - return this.protocol === 'https'; -}); - -/** - * Return the remote address from the trusted proxy. - * - * The is the remote address on the socket unless - * "trust proxy" is set. - * - * @return {String} - * @public - */ - -defineGetter(req, 'ip', function ip(){ - var trust = this.app.get('trust proxy fn'); - return proxyaddr(this, trust); -}); - -/** - * When "trust proxy" is set, trusted proxy addresses + client. - * - * For example if the value were "client, proxy1, proxy2" - * you would receive the array `["client", "proxy1", "proxy2"]` - * where "proxy2" is the furthest down-stream and "proxy1" and - * "proxy2" were trusted. - * - * @return {Array} - * @public - */ - -defineGetter(req, 'ips', function ips() { - var trust = this.app.get('trust proxy fn'); - var addrs = proxyaddr.all(this, trust); - - // reverse the order (to farthest -> closest) - // and remove socket address - addrs.reverse().pop() - - return addrs -}); - -/** - * Return subdomains as an array. - * - * Subdomains are the dot-separated parts of the host before the main domain of - * the app. By default, the domain of the app is assumed to be the last two - * parts of the host. This can be changed by setting "subdomain offset". - * - * For example, if the domain is "tobi.ferrets.example.com": - * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`. - * If "subdomain offset" is 3, req.subdomains is `["tobi"]`. - * - * @return {Array} - * @public - */ - -defineGetter(req, 'subdomains', function subdomains() { - var hostname = this.hostname; - - if (!hostname) return []; - - var offset = this.app.get('subdomain offset'); - var subdomains = !isIP(hostname) - ? hostname.split('.').reverse() - : [hostname]; - - return subdomains.slice(offset); -}); - -/** - * Short-hand for `url.parse(req.url).pathname`. - * - * @return {String} - * @public - */ - -defineGetter(req, 'path', function path() { - return parse(this).pathname; -}); - -/** - * Parse the "Host" header field to a hostname. - * - * When the "trust proxy" setting trusts the socket - * address, the "X-Forwarded-Host" header field will - * be trusted. - * - * @return {String} - * @public - */ - -defineGetter(req, 'hostname', function hostname(){ - var trust = this.app.get('trust proxy fn'); - var host = this.get('X-Forwarded-Host'); - - if (!host || !trust(this.connection.remoteAddress, 0)) { - host = this.get('Host'); - } - - if (!host) return; - - // IPv6 literal support - var offset = host[0] === '[' - ? host.indexOf(']') + 1 - : 0; - var index = host.indexOf(':', offset); - - return index !== -1 - ? host.substring(0, index) - : host; -}); - -// TODO: change req.host to return host in next major - -defineGetter(req, 'host', deprecate.function(function host(){ - return this.hostname; -}, 'req.host: Use req.hostname instead')); - -/** - * Check if the request is fresh, aka - * Last-Modified and/or the ETag - * still match. - * - * @return {Boolean} - * @public - */ - -defineGetter(req, 'fresh', function(){ - var method = this.method; - var res = this.res - var status = res.statusCode - - // GET or HEAD for weak freshness validation only - if ('GET' !== method && 'HEAD' !== method) return false; - - // 2xx or 304 as per rfc2616 14.26 - if ((status >= 200 && status < 300) || 304 === status) { - return fresh(this.headers, { - 'etag': res.get('ETag'), - 'last-modified': res.get('Last-Modified') - }) - } - - return false; -}); - -/** - * Check if the request is stale, aka - * "Last-Modified" and / or the "ETag" for the - * resource has changed. - * - * @return {Boolean} - * @public - */ - -defineGetter(req, 'stale', function stale(){ - return !this.fresh; -}); - -/** - * Check if the request was an _XMLHttpRequest_. - * - * @return {Boolean} - * @public - */ - -defineGetter(req, 'xhr', function xhr(){ - var val = this.get('X-Requested-With') || ''; - return val.toLowerCase() === 'xmlhttprequest'; -}); - -/** - * Helper function for creating a getter on an object. - * - * @param {Object} obj - * @param {String} name - * @param {Function} getter - * @private - */ -function defineGetter(obj, name, getter) { - Object.defineProperty(obj, name, { - configurable: true, - enumerable: true, - get: getter - }); -} diff --git a/truebit-implementation/node_modules/express/lib/response.js b/truebit-implementation/node_modules/express/lib/response.js deleted file mode 100644 index 2e445ac0..00000000 --- a/truebit-implementation/node_modules/express/lib/response.js +++ /dev/null @@ -1,1137 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var Buffer = require('safe-buffer').Buffer -var contentDisposition = require('content-disposition'); -var deprecate = require('depd')('express'); -var encodeUrl = require('encodeurl'); -var escapeHtml = require('escape-html'); -var http = require('http'); -var isAbsolute = require('./utils').isAbsolute; -var onFinished = require('on-finished'); -var path = require('path'); -var statuses = require('statuses') -var merge = require('utils-merge'); -var sign = require('cookie-signature').sign; -var normalizeType = require('./utils').normalizeType; -var normalizeTypes = require('./utils').normalizeTypes; -var setCharset = require('./utils').setCharset; -var cookie = require('cookie'); -var send = require('send'); -var extname = path.extname; -var mime = send.mime; -var resolve = path.resolve; -var vary = require('vary'); - -/** - * Response prototype. - * @public - */ - -var res = Object.create(http.ServerResponse.prototype) - -/** - * Module exports. - * @public - */ - -module.exports = res - -/** - * Module variables. - * @private - */ - -var charsetRegExp = /;\s*charset\s*=/; - -/** - * Set status `code`. - * - * @param {Number} code - * @return {ServerResponse} - * @public - */ - -res.status = function status(code) { - this.statusCode = code; - return this; -}; - -/** - * Set Link header field with the given `links`. - * - * Examples: - * - * res.links({ - * next: 'http://api.example.com/users?page=2', - * last: 'http://api.example.com/users?page=5' - * }); - * - * @param {Object} links - * @return {ServerResponse} - * @public - */ - -res.links = function(links){ - var link = this.get('Link') || ''; - if (link) link += ', '; - return this.set('Link', link + Object.keys(links).map(function(rel){ - return '<' + links[rel] + '>; rel="' + rel + '"'; - }).join(', ')); -}; - -/** - * Send a response. - * - * Examples: - * - * res.send(Buffer.from('wahoo')); - * res.send({ some: 'json' }); - * res.send('

some html

'); - * - * @param {string|number|boolean|object|Buffer} body - * @public - */ - -res.send = function send(body) { - var chunk = body; - var encoding; - var req = this.req; - var type; - - // settings - var app = this.app; - - // allow status / body - if (arguments.length === 2) { - // res.send(body, status) backwards compat - if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') { - deprecate('res.send(body, status): Use res.status(status).send(body) instead'); - this.statusCode = arguments[1]; - } else { - deprecate('res.send(status, body): Use res.status(status).send(body) instead'); - this.statusCode = arguments[0]; - chunk = arguments[1]; - } - } - - // disambiguate res.send(status) and res.send(status, num) - if (typeof chunk === 'number' && arguments.length === 1) { - // res.send(status) will set status message as text string - if (!this.get('Content-Type')) { - this.type('txt'); - } - - deprecate('res.send(status): Use res.sendStatus(status) instead'); - this.statusCode = chunk; - chunk = statuses[chunk] - } - - switch (typeof chunk) { - // string defaulting to html - case 'string': - if (!this.get('Content-Type')) { - this.type('html'); - } - break; - case 'boolean': - case 'number': - case 'object': - if (chunk === null) { - chunk = ''; - } else if (Buffer.isBuffer(chunk)) { - if (!this.get('Content-Type')) { - this.type('bin'); - } - } else { - return this.json(chunk); - } - break; - } - - // write strings in utf-8 - if (typeof chunk === 'string') { - encoding = 'utf8'; - type = this.get('Content-Type'); - - // reflect this in content-type - if (typeof type === 'string') { - this.set('Content-Type', setCharset(type, 'utf-8')); - } - } - - // determine if ETag should be generated - var etagFn = app.get('etag fn') - var generateETag = !this.get('ETag') && typeof etagFn === 'function' - - // populate Content-Length - var len - if (chunk !== undefined) { - if (Buffer.isBuffer(chunk)) { - // get length of Buffer - len = chunk.length - } else if (!generateETag && chunk.length < 1000) { - // just calculate length when no ETag + small chunk - len = Buffer.byteLength(chunk, encoding) - } else { - // convert chunk to Buffer and calculate - chunk = Buffer.from(chunk, encoding) - encoding = undefined; - len = chunk.length - } - - this.set('Content-Length', len); - } - - // populate ETag - var etag; - if (generateETag && len !== undefined) { - if ((etag = etagFn(chunk, encoding))) { - this.set('ETag', etag); - } - } - - // freshness - if (req.fresh) this.statusCode = 304; - - // strip irrelevant headers - if (204 === this.statusCode || 304 === this.statusCode) { - this.removeHeader('Content-Type'); - this.removeHeader('Content-Length'); - this.removeHeader('Transfer-Encoding'); - chunk = ''; - } - - if (req.method === 'HEAD') { - // skip body for HEAD - this.end(); - } else { - // respond - this.end(chunk, encoding); - } - - return this; -}; - -/** - * Send JSON response. - * - * Examples: - * - * res.json(null); - * res.json({ user: 'tj' }); - * - * @param {string|number|boolean|object} obj - * @public - */ - -res.json = function json(obj) { - var val = obj; - - // allow status / body - if (arguments.length === 2) { - // res.json(body, status) backwards compat - if (typeof arguments[1] === 'number') { - deprecate('res.json(obj, status): Use res.status(status).json(obj) instead'); - this.statusCode = arguments[1]; - } else { - deprecate('res.json(status, obj): Use res.status(status).json(obj) instead'); - this.statusCode = arguments[0]; - val = arguments[1]; - } - } - - // settings - var app = this.app; - var escape = app.get('json escape') - var replacer = app.get('json replacer'); - var spaces = app.get('json spaces'); - var body = stringify(val, replacer, spaces, escape) - - // content-type - if (!this.get('Content-Type')) { - this.set('Content-Type', 'application/json'); - } - - return this.send(body); -}; - -/** - * Send JSON response with JSONP callback support. - * - * Examples: - * - * res.jsonp(null); - * res.jsonp({ user: 'tj' }); - * - * @param {string|number|boolean|object} obj - * @public - */ - -res.jsonp = function jsonp(obj) { - var val = obj; - - // allow status / body - if (arguments.length === 2) { - // res.json(body, status) backwards compat - if (typeof arguments[1] === 'number') { - deprecate('res.jsonp(obj, status): Use res.status(status).json(obj) instead'); - this.statusCode = arguments[1]; - } else { - deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead'); - this.statusCode = arguments[0]; - val = arguments[1]; - } - } - - // settings - var app = this.app; - var escape = app.get('json escape') - var replacer = app.get('json replacer'); - var spaces = app.get('json spaces'); - var body = stringify(val, replacer, spaces, escape) - var callback = this.req.query[app.get('jsonp callback name')]; - - // content-type - if (!this.get('Content-Type')) { - this.set('X-Content-Type-Options', 'nosniff'); - this.set('Content-Type', 'application/json'); - } - - // fixup callback - if (Array.isArray(callback)) { - callback = callback[0]; - } - - // jsonp - if (typeof callback === 'string' && callback.length !== 0) { - this.set('X-Content-Type-Options', 'nosniff'); - this.set('Content-Type', 'text/javascript'); - - // restrict callback charset - callback = callback.replace(/[^\[\]\w$.]/g, ''); - - // replace chars not allowed in JavaScript that are in JSON - body = body - .replace(/\u2028/g, '\\u2028') - .replace(/\u2029/g, '\\u2029'); - - // the /**/ is a specific security mitigation for "Rosetta Flash JSONP abuse" - // the typeof check is just to reduce client error noise - body = '/**/ typeof ' + callback + ' === \'function\' && ' + callback + '(' + body + ');'; - } - - return this.send(body); -}; - -/** - * Send given HTTP status code. - * - * Sets the response status to `statusCode` and the body of the - * response to the standard description from node's http.STATUS_CODES - * or the statusCode number if no description. - * - * Examples: - * - * res.sendStatus(200); - * - * @param {number} statusCode - * @public - */ - -res.sendStatus = function sendStatus(statusCode) { - var body = statuses[statusCode] || String(statusCode) - - this.statusCode = statusCode; - this.type('txt'); - - return this.send(body); -}; - -/** - * Transfer the file at the given `path`. - * - * Automatically sets the _Content-Type_ response header field. - * The callback `callback(err)` is invoked when the transfer is complete - * or when an error occurs. Be sure to check `res.sentHeader` - * if you wish to attempt responding, as the header and some data - * may have already been transferred. - * - * Options: - * - * - `maxAge` defaulting to 0 (can be string converted by `ms`) - * - `root` root directory for relative filenames - * - `headers` object of headers to serve with file - * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them - * - * Other options are passed along to `send`. - * - * Examples: - * - * The following example illustrates how `res.sendFile()` may - * be used as an alternative for the `static()` middleware for - * dynamic situations. The code backing `res.sendFile()` is actually - * the same code, so HTTP cache support etc is identical. - * - * app.get('/user/:uid/photos/:file', function(req, res){ - * var uid = req.params.uid - * , file = req.params.file; - * - * req.user.mayViewFilesFrom(uid, function(yes){ - * if (yes) { - * res.sendFile('/uploads/' + uid + '/' + file); - * } else { - * res.send(403, 'Sorry! you cant see that.'); - * } - * }); - * }); - * - * @public - */ - -res.sendFile = function sendFile(path, options, callback) { - var done = callback; - var req = this.req; - var res = this; - var next = req.next; - var opts = options || {}; - - if (!path) { - throw new TypeError('path argument is required to res.sendFile'); - } - - // support function as second arg - if (typeof options === 'function') { - done = options; - opts = {}; - } - - if (!opts.root && !isAbsolute(path)) { - throw new TypeError('path must be absolute or specify root to res.sendFile'); - } - - // create file stream - var pathname = encodeURI(path); - var file = send(req, pathname, opts); - - // transfer - sendfile(res, file, opts, function (err) { - if (done) return done(err); - if (err && err.code === 'EISDIR') return next(); - - // next() all but write errors - if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') { - next(err); - } - }); -}; - -/** - * Transfer the file at the given `path`. - * - * Automatically sets the _Content-Type_ response header field. - * The callback `callback(err)` is invoked when the transfer is complete - * or when an error occurs. Be sure to check `res.sentHeader` - * if you wish to attempt responding, as the header and some data - * may have already been transferred. - * - * Options: - * - * - `maxAge` defaulting to 0 (can be string converted by `ms`) - * - `root` root directory for relative filenames - * - `headers` object of headers to serve with file - * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them - * - * Other options are passed along to `send`. - * - * Examples: - * - * The following example illustrates how `res.sendfile()` may - * be used as an alternative for the `static()` middleware for - * dynamic situations. The code backing `res.sendfile()` is actually - * the same code, so HTTP cache support etc is identical. - * - * app.get('/user/:uid/photos/:file', function(req, res){ - * var uid = req.params.uid - * , file = req.params.file; - * - * req.user.mayViewFilesFrom(uid, function(yes){ - * if (yes) { - * res.sendfile('/uploads/' + uid + '/' + file); - * } else { - * res.send(403, 'Sorry! you cant see that.'); - * } - * }); - * }); - * - * @public - */ - -res.sendfile = function (path, options, callback) { - var done = callback; - var req = this.req; - var res = this; - var next = req.next; - var opts = options || {}; - - // support function as second arg - if (typeof options === 'function') { - done = options; - opts = {}; - } - - // create file stream - var file = send(req, path, opts); - - // transfer - sendfile(res, file, opts, function (err) { - if (done) return done(err); - if (err && err.code === 'EISDIR') return next(); - - // next() all but write errors - if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') { - next(err); - } - }); -}; - -res.sendfile = deprecate.function(res.sendfile, - 'res.sendfile: Use res.sendFile instead'); - -/** - * Transfer the file at the given `path` as an attachment. - * - * Optionally providing an alternate attachment `filename`, - * and optional callback `callback(err)`. The callback is invoked - * when the data transfer is complete, or when an error has - * ocurred. Be sure to check `res.headersSent` if you plan to respond. - * - * Optionally providing an `options` object to use with `res.sendFile()`. - * This function will set the `Content-Disposition` header, overriding - * any `Content-Disposition` header passed as header options in order - * to set the attachment and filename. - * - * This method uses `res.sendFile()`. - * - * @public - */ - -res.download = function download (path, filename, options, callback) { - var done = callback; - var name = filename; - var opts = options || null - - // support function as second or third arg - if (typeof filename === 'function') { - done = filename; - name = null; - opts = null - } else if (typeof options === 'function') { - done = options - opts = null - } - - // set Content-Disposition when file is sent - var headers = { - 'Content-Disposition': contentDisposition(name || path) - }; - - // merge user-provided headers - if (opts && opts.headers) { - var keys = Object.keys(opts.headers) - for (var i = 0; i < keys.length; i++) { - var key = keys[i] - if (key.toLowerCase() !== 'content-disposition') { - headers[key] = opts.headers[key] - } - } - } - - // merge user-provided options - opts = Object.create(opts) - opts.headers = headers - - // Resolve the full path for sendFile - var fullPath = resolve(path); - - // send file - return this.sendFile(fullPath, opts, done) -}; - -/** - * Set _Content-Type_ response header with `type` through `mime.lookup()` - * when it does not contain "/", or set the Content-Type to `type` otherwise. - * - * Examples: - * - * res.type('.html'); - * res.type('html'); - * res.type('json'); - * res.type('application/json'); - * res.type('png'); - * - * @param {String} type - * @return {ServerResponse} for chaining - * @public - */ - -res.contentType = -res.type = function contentType(type) { - var ct = type.indexOf('/') === -1 - ? mime.lookup(type) - : type; - - return this.set('Content-Type', ct); -}; - -/** - * Respond to the Acceptable formats using an `obj` - * of mime-type callbacks. - * - * This method uses `req.accepted`, an array of - * acceptable types ordered by their quality values. - * When "Accept" is not present the _first_ callback - * is invoked, otherwise the first match is used. When - * no match is performed the server responds with - * 406 "Not Acceptable". - * - * Content-Type is set for you, however if you choose - * you may alter this within the callback using `res.type()` - * or `res.set('Content-Type', ...)`. - * - * res.format({ - * 'text/plain': function(){ - * res.send('hey'); - * }, - * - * 'text/html': function(){ - * res.send('

hey

'); - * }, - * - * 'appliation/json': function(){ - * res.send({ message: 'hey' }); - * } - * }); - * - * In addition to canonicalized MIME types you may - * also use extnames mapped to these types: - * - * res.format({ - * text: function(){ - * res.send('hey'); - * }, - * - * html: function(){ - * res.send('

hey

'); - * }, - * - * json: function(){ - * res.send({ message: 'hey' }); - * } - * }); - * - * By default Express passes an `Error` - * with a `.status` of 406 to `next(err)` - * if a match is not made. If you provide - * a `.default` callback it will be invoked - * instead. - * - * @param {Object} obj - * @return {ServerResponse} for chaining - * @public - */ - -res.format = function(obj){ - var req = this.req; - var next = req.next; - - var fn = obj.default; - if (fn) delete obj.default; - var keys = Object.keys(obj); - - var key = keys.length > 0 - ? req.accepts(keys) - : false; - - this.vary("Accept"); - - if (key) { - this.set('Content-Type', normalizeType(key).value); - obj[key](req, this, next); - } else if (fn) { - fn(); - } else { - var err = new Error('Not Acceptable'); - err.status = err.statusCode = 406; - err.types = normalizeTypes(keys).map(function(o){ return o.value }); - next(err); - } - - return this; -}; - -/** - * Set _Content-Disposition_ header to _attachment_ with optional `filename`. - * - * @param {String} filename - * @return {ServerResponse} - * @public - */ - -res.attachment = function attachment(filename) { - if (filename) { - this.type(extname(filename)); - } - - this.set('Content-Disposition', contentDisposition(filename)); - - return this; -}; - -/** - * Append additional header `field` with value `val`. - * - * Example: - * - * res.append('Link', ['', '']); - * res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly'); - * res.append('Warning', '199 Miscellaneous warning'); - * - * @param {String} field - * @param {String|Array} val - * @return {ServerResponse} for chaining - * @public - */ - -res.append = function append(field, val) { - var prev = this.get(field); - var value = val; - - if (prev) { - // concat the new and prev vals - value = Array.isArray(prev) ? prev.concat(val) - : Array.isArray(val) ? [prev].concat(val) - : [prev, val]; - } - - return this.set(field, value); -}; - -/** - * Set header `field` to `val`, or pass - * an object of header fields. - * - * Examples: - * - * res.set('Foo', ['bar', 'baz']); - * res.set('Accept', 'application/json'); - * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); - * - * Aliased as `res.header()`. - * - * @param {String|Object} field - * @param {String|Array} val - * @return {ServerResponse} for chaining - * @public - */ - -res.set = -res.header = function header(field, val) { - if (arguments.length === 2) { - var value = Array.isArray(val) - ? val.map(String) - : String(val); - - // add charset to content-type - if (field.toLowerCase() === 'content-type') { - if (Array.isArray(value)) { - throw new TypeError('Content-Type cannot be set to an Array'); - } - if (!charsetRegExp.test(value)) { - var charset = mime.charsets.lookup(value.split(';')[0]); - if (charset) value += '; charset=' + charset.toLowerCase(); - } - } - - this.setHeader(field, value); - } else { - for (var key in field) { - this.set(key, field[key]); - } - } - return this; -}; - -/** - * Get value for header `field`. - * - * @param {String} field - * @return {String} - * @public - */ - -res.get = function(field){ - return this.getHeader(field); -}; - -/** - * Clear cookie `name`. - * - * @param {String} name - * @param {Object} [options] - * @return {ServerResponse} for chaining - * @public - */ - -res.clearCookie = function clearCookie(name, options) { - var opts = merge({ expires: new Date(1), path: '/' }, options); - - return this.cookie(name, '', opts); -}; - -/** - * Set cookie `name` to `value`, with the given `options`. - * - * Options: - * - * - `maxAge` max-age in milliseconds, converted to `expires` - * - `signed` sign the cookie - * - `path` defaults to "/" - * - * Examples: - * - * // "Remember Me" for 15 minutes - * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); - * - * // save as above - * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) - * - * @param {String} name - * @param {String|Object} value - * @param {Object} [options] - * @return {ServerResponse} for chaining - * @public - */ - -res.cookie = function (name, value, options) { - var opts = merge({}, options); - var secret = this.req.secret; - var signed = opts.signed; - - if (signed && !secret) { - throw new Error('cookieParser("secret") required for signed cookies'); - } - - var val = typeof value === 'object' - ? 'j:' + JSON.stringify(value) - : String(value); - - if (signed) { - val = 's:' + sign(val, secret); - } - - if ('maxAge' in opts) { - opts.expires = new Date(Date.now() + opts.maxAge); - opts.maxAge /= 1000; - } - - if (opts.path == null) { - opts.path = '/'; - } - - this.append('Set-Cookie', cookie.serialize(name, String(val), opts)); - - return this; -}; - -/** - * Set the location header to `url`. - * - * The given `url` can also be "back", which redirects - * to the _Referrer_ or _Referer_ headers or "/". - * - * Examples: - * - * res.location('/foo/bar').; - * res.location('http://example.com'); - * res.location('../login'); - * - * @param {String} url - * @return {ServerResponse} for chaining - * @public - */ - -res.location = function location(url) { - var loc = url; - - // "back" is an alias for the referrer - if (url === 'back') { - loc = this.req.get('Referrer') || '/'; - } - - // set location - return this.set('Location', encodeUrl(loc)); -}; - -/** - * Redirect to the given `url` with optional response `status` - * defaulting to 302. - * - * The resulting `url` is determined by `res.location()`, so - * it will play nicely with mounted apps, relative paths, - * `"back"` etc. - * - * Examples: - * - * res.redirect('/foo/bar'); - * res.redirect('http://example.com'); - * res.redirect(301, 'http://example.com'); - * res.redirect('../login'); // /blog/post/1 -> /blog/login - * - * @public - */ - -res.redirect = function redirect(url) { - var address = url; - var body; - var status = 302; - - // allow status / url - if (arguments.length === 2) { - if (typeof arguments[0] === 'number') { - status = arguments[0]; - address = arguments[1]; - } else { - deprecate('res.redirect(url, status): Use res.redirect(status, url) instead'); - status = arguments[1]; - } - } - - // Set location header - address = this.location(address).get('Location'); - - // Support text/{plain,html} by default - this.format({ - text: function(){ - body = statuses[status] + '. Redirecting to ' + address - }, - - html: function(){ - var u = escapeHtml(address); - body = '

' + statuses[status] + '. Redirecting to ' + u + '

' - }, - - default: function(){ - body = ''; - } - }); - - // Respond - this.statusCode = status; - this.set('Content-Length', Buffer.byteLength(body)); - - if (this.req.method === 'HEAD') { - this.end(); - } else { - this.end(body); - } -}; - -/** - * Add `field` to Vary. If already present in the Vary set, then - * this call is simply ignored. - * - * @param {Array|String} field - * @return {ServerResponse} for chaining - * @public - */ - -res.vary = function(field){ - // checks for back-compat - if (!field || (Array.isArray(field) && !field.length)) { - deprecate('res.vary(): Provide a field name'); - return this; - } - - vary(this, field); - - return this; -}; - -/** - * Render `view` with the given `options` and optional callback `fn`. - * When a callback function is given a response will _not_ be made - * automatically, otherwise a response of _200_ and _text/html_ is given. - * - * Options: - * - * - `cache` boolean hinting to the engine it should cache - * - `filename` filename of the view being rendered - * - * @public - */ - -res.render = function render(view, options, callback) { - var app = this.req.app; - var done = callback; - var opts = options || {}; - var req = this.req; - var self = this; - - // support callback function as second arg - if (typeof options === 'function') { - done = options; - opts = {}; - } - - // merge res.locals - opts._locals = self.locals; - - // default callback to respond - done = done || function (err, str) { - if (err) return req.next(err); - self.send(str); - }; - - // render - app.render(view, opts, done); -}; - -// pipe the send file stream -function sendfile(res, file, options, callback) { - var done = false; - var streaming; - - // request aborted - function onaborted() { - if (done) return; - done = true; - - var err = new Error('Request aborted'); - err.code = 'ECONNABORTED'; - callback(err); - } - - // directory - function ondirectory() { - if (done) return; - done = true; - - var err = new Error('EISDIR, read'); - err.code = 'EISDIR'; - callback(err); - } - - // errors - function onerror(err) { - if (done) return; - done = true; - callback(err); - } - - // ended - function onend() { - if (done) return; - done = true; - callback(); - } - - // file - function onfile() { - streaming = false; - } - - // finished - function onfinish(err) { - if (err && err.code === 'ECONNRESET') return onaborted(); - if (err) return onerror(err); - if (done) return; - - setImmediate(function () { - if (streaming !== false && !done) { - onaborted(); - return; - } - - if (done) return; - done = true; - callback(); - }); - } - - // streaming - function onstream() { - streaming = true; - } - - file.on('directory', ondirectory); - file.on('end', onend); - file.on('error', onerror); - file.on('file', onfile); - file.on('stream', onstream); - onFinished(res, onfinish); - - if (options.headers) { - // set headers on successful transfer - file.on('headers', function headers(res) { - var obj = options.headers; - var keys = Object.keys(obj); - - for (var i = 0; i < keys.length; i++) { - var k = keys[i]; - res.setHeader(k, obj[k]); - } - }); - } - - // pipe - file.pipe(res); -} - -/** - * Stringify JSON, like JSON.stringify, but v8 optimized, with the - * ability to escape characters that can trigger HTML sniffing. - * - * @param {*} value - * @param {function} replaces - * @param {number} spaces - * @param {boolean} escape - * @returns {string} - * @private - */ - -function stringify (value, replacer, spaces, escape) { - // v8 checks arguments.length for optimizing simple call - // https://bugs.chromium.org/p/v8/issues/detail?id=4730 - var json = replacer || spaces - ? JSON.stringify(value, replacer, spaces) - : JSON.stringify(value); - - if (escape) { - json = json.replace(/[<>&]/g, function (c) { - switch (c.charCodeAt(0)) { - case 0x3c: - return '\\u003c' - case 0x3e: - return '\\u003e' - case 0x26: - return '\\u0026' - default: - return c - } - }) - } - - return json -} diff --git a/truebit-implementation/node_modules/express/lib/router/index.js b/truebit-implementation/node_modules/express/lib/router/index.js deleted file mode 100644 index 69e6d380..00000000 --- a/truebit-implementation/node_modules/express/lib/router/index.js +++ /dev/null @@ -1,662 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var Route = require('./route'); -var Layer = require('./layer'); -var methods = require('methods'); -var mixin = require('utils-merge'); -var debug = require('debug')('express:router'); -var deprecate = require('depd')('express'); -var flatten = require('array-flatten'); -var parseUrl = require('parseurl'); -var setPrototypeOf = require('setprototypeof') - -/** - * Module variables. - * @private - */ - -var objectRegExp = /^\[object (\S+)\]$/; -var slice = Array.prototype.slice; -var toString = Object.prototype.toString; - -/** - * Initialize a new `Router` with the given `options`. - * - * @param {Object} [options] - * @return {Router} which is an callable function - * @public - */ - -var proto = module.exports = function(options) { - var opts = options || {}; - - function router(req, res, next) { - router.handle(req, res, next); - } - - // mixin Router class functions - setPrototypeOf(router, proto) - - router.params = {}; - router._params = []; - router.caseSensitive = opts.caseSensitive; - router.mergeParams = opts.mergeParams; - router.strict = opts.strict; - router.stack = []; - - return router; -}; - -/** - * Map the given param placeholder `name`(s) to the given callback. - * - * Parameter mapping is used to provide pre-conditions to routes - * which use normalized placeholders. For example a _:user_id_ parameter - * could automatically load a user's information from the database without - * any additional code, - * - * The callback uses the same signature as middleware, the only difference - * being that the value of the placeholder is passed, in this case the _id_ - * of the user. Once the `next()` function is invoked, just like middleware - * it will continue on to execute the route, or subsequent parameter functions. - * - * Just like in middleware, you must either respond to the request or call next - * to avoid stalling the request. - * - * app.param('user_id', function(req, res, next, id){ - * User.find(id, function(err, user){ - * if (err) { - * return next(err); - * } else if (!user) { - * return next(new Error('failed to load user')); - * } - * req.user = user; - * next(); - * }); - * }); - * - * @param {String} name - * @param {Function} fn - * @return {app} for chaining - * @public - */ - -proto.param = function param(name, fn) { - // param logic - if (typeof name === 'function') { - deprecate('router.param(fn): Refactor to use path params'); - this._params.push(name); - return; - } - - // apply param functions - var params = this._params; - var len = params.length; - var ret; - - if (name[0] === ':') { - deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.substr(1)) + ', fn) instead'); - name = name.substr(1); - } - - for (var i = 0; i < len; ++i) { - if (ret = params[i](name, fn)) { - fn = ret; - } - } - - // ensure we end up with a - // middleware function - if ('function' !== typeof fn) { - throw new Error('invalid param() call for ' + name + ', got ' + fn); - } - - (this.params[name] = this.params[name] || []).push(fn); - return this; -}; - -/** - * Dispatch a req, res into the router. - * @private - */ - -proto.handle = function handle(req, res, out) { - var self = this; - - debug('dispatching %s %s', req.method, req.url); - - var idx = 0; - var protohost = getProtohost(req.url) || '' - var removed = ''; - var slashAdded = false; - var paramcalled = {}; - - // store options for OPTIONS request - // only used if OPTIONS request - var options = []; - - // middleware and routes - var stack = self.stack; - - // manage inter-router variables - var parentParams = req.params; - var parentUrl = req.baseUrl || ''; - var done = restore(out, req, 'baseUrl', 'next', 'params'); - - // setup next layer - req.next = next; - - // for options requests, respond with a default if nothing else responds - if (req.method === 'OPTIONS') { - done = wrap(done, function(old, err) { - if (err || options.length === 0) return old(err); - sendOptionsResponse(res, options, old); - }); - } - - // setup basic req values - req.baseUrl = parentUrl; - req.originalUrl = req.originalUrl || req.url; - - next(); - - function next(err) { - var layerError = err === 'route' - ? null - : err; - - // remove added slash - if (slashAdded) { - req.url = req.url.substr(1); - slashAdded = false; - } - - // restore altered req.url - if (removed.length !== 0) { - req.baseUrl = parentUrl; - req.url = protohost + removed + req.url.substr(protohost.length); - removed = ''; - } - - // signal to exit router - if (layerError === 'router') { - setImmediate(done, null) - return - } - - // no more matching layers - if (idx >= stack.length) { - setImmediate(done, layerError); - return; - } - - // get pathname of request - var path = getPathname(req); - - if (path == null) { - return done(layerError); - } - - // find next matching layer - var layer; - var match; - var route; - - while (match !== true && idx < stack.length) { - layer = stack[idx++]; - match = matchLayer(layer, path); - route = layer.route; - - if (typeof match !== 'boolean') { - // hold on to layerError - layerError = layerError || match; - } - - if (match !== true) { - continue; - } - - if (!route) { - // process non-route handlers normally - continue; - } - - if (layerError) { - // routes do not match with a pending error - match = false; - continue; - } - - var method = req.method; - var has_method = route._handles_method(method); - - // build up automatic options response - if (!has_method && method === 'OPTIONS') { - appendMethods(options, route._options()); - } - - // don't even bother matching route - if (!has_method && method !== 'HEAD') { - match = false; - continue; - } - } - - // no match - if (match !== true) { - return done(layerError); - } - - // store route for dispatch on change - if (route) { - req.route = route; - } - - // Capture one-time layer values - req.params = self.mergeParams - ? mergeParams(layer.params, parentParams) - : layer.params; - var layerPath = layer.path; - - // this should be done for the layer - self.process_params(layer, paramcalled, req, res, function (err) { - if (err) { - return next(layerError || err); - } - - if (route) { - return layer.handle_request(req, res, next); - } - - trim_prefix(layer, layerError, layerPath, path); - }); - } - - function trim_prefix(layer, layerError, layerPath, path) { - if (layerPath.length !== 0) { - // Validate path breaks on a path separator - var c = path[layerPath.length] - if (c && c !== '/' && c !== '.') return next(layerError) - - // Trim off the part of the url that matches the route - // middleware (.use stuff) needs to have the path stripped - debug('trim prefix (%s) from url %s', layerPath, req.url); - removed = layerPath; - req.url = protohost + req.url.substr(protohost.length + removed.length); - - // Ensure leading slash - if (!protohost && req.url[0] !== '/') { - req.url = '/' + req.url; - slashAdded = true; - } - - // Setup base URL (no trailing slash) - req.baseUrl = parentUrl + (removed[removed.length - 1] === '/' - ? removed.substring(0, removed.length - 1) - : removed); - } - - debug('%s %s : %s', layer.name, layerPath, req.originalUrl); - - if (layerError) { - layer.handle_error(layerError, req, res, next); - } else { - layer.handle_request(req, res, next); - } - } -}; - -/** - * Process any parameters for the layer. - * @private - */ - -proto.process_params = function process_params(layer, called, req, res, done) { - var params = this.params; - - // captured parameters from the layer, keys and values - var keys = layer.keys; - - // fast track - if (!keys || keys.length === 0) { - return done(); - } - - var i = 0; - var name; - var paramIndex = 0; - var key; - var paramVal; - var paramCallbacks; - var paramCalled; - - // process params in order - // param callbacks can be async - function param(err) { - if (err) { - return done(err); - } - - if (i >= keys.length ) { - return done(); - } - - paramIndex = 0; - key = keys[i++]; - name = key.name; - paramVal = req.params[name]; - paramCallbacks = params[name]; - paramCalled = called[name]; - - if (paramVal === undefined || !paramCallbacks) { - return param(); - } - - // param previously called with same value or error occurred - if (paramCalled && (paramCalled.match === paramVal - || (paramCalled.error && paramCalled.error !== 'route'))) { - // restore value - req.params[name] = paramCalled.value; - - // next param - return param(paramCalled.error); - } - - called[name] = paramCalled = { - error: null, - match: paramVal, - value: paramVal - }; - - paramCallback(); - } - - // single param callbacks - function paramCallback(err) { - var fn = paramCallbacks[paramIndex++]; - - // store updated value - paramCalled.value = req.params[key.name]; - - if (err) { - // store error - paramCalled.error = err; - param(err); - return; - } - - if (!fn) return param(); - - try { - fn(req, res, paramCallback, paramVal, key.name); - } catch (e) { - paramCallback(e); - } - } - - param(); -}; - -/** - * Use the given middleware function, with optional path, defaulting to "/". - * - * Use (like `.all`) will run for any http METHOD, but it will not add - * handlers for those methods so OPTIONS requests will not consider `.use` - * functions even if they could respond. - * - * The other difference is that _route_ path is stripped and not visible - * to the handler function. The main effect of this feature is that mounted - * handlers can operate without any code changes regardless of the "prefix" - * pathname. - * - * @public - */ - -proto.use = function use(fn) { - var offset = 0; - var path = '/'; - - // default path to '/' - // disambiguate router.use([fn]) - if (typeof fn !== 'function') { - var arg = fn; - - while (Array.isArray(arg) && arg.length !== 0) { - arg = arg[0]; - } - - // first arg is the path - if (typeof arg !== 'function') { - offset = 1; - path = fn; - } - } - - var callbacks = flatten(slice.call(arguments, offset)); - - if (callbacks.length === 0) { - throw new TypeError('Router.use() requires a middleware function') - } - - for (var i = 0; i < callbacks.length; i++) { - var fn = callbacks[i]; - - if (typeof fn !== 'function') { - throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn)) - } - - // add the middleware - debug('use %o %s', path, fn.name || '') - - var layer = new Layer(path, { - sensitive: this.caseSensitive, - strict: false, - end: false - }, fn); - - layer.route = undefined; - - this.stack.push(layer); - } - - return this; -}; - -/** - * Create a new Route for the given path. - * - * Each route contains a separate middleware stack and VERB handlers. - * - * See the Route api documentation for details on adding handlers - * and middleware to routes. - * - * @param {String} path - * @return {Route} - * @public - */ - -proto.route = function route(path) { - var route = new Route(path); - - var layer = new Layer(path, { - sensitive: this.caseSensitive, - strict: this.strict, - end: true - }, route.dispatch.bind(route)); - - layer.route = route; - - this.stack.push(layer); - return route; -}; - -// create Router#VERB functions -methods.concat('all').forEach(function(method){ - proto[method] = function(path){ - var route = this.route(path) - route[method].apply(route, slice.call(arguments, 1)); - return this; - }; -}); - -// append methods to a list of methods -function appendMethods(list, addition) { - for (var i = 0; i < addition.length; i++) { - var method = addition[i]; - if (list.indexOf(method) === -1) { - list.push(method); - } - } -} - -// get pathname of request -function getPathname(req) { - try { - return parseUrl(req).pathname; - } catch (err) { - return undefined; - } -} - -// Get get protocol + host for a URL -function getProtohost(url) { - if (typeof url !== 'string' || url.length === 0 || url[0] === '/') { - return undefined - } - - var searchIndex = url.indexOf('?') - var pathLength = searchIndex !== -1 - ? searchIndex - : url.length - var fqdnIndex = url.substr(0, pathLength).indexOf('://') - - return fqdnIndex !== -1 - ? url.substr(0, url.indexOf('/', 3 + fqdnIndex)) - : undefined -} - -// get type for error message -function gettype(obj) { - var type = typeof obj; - - if (type !== 'object') { - return type; - } - - // inspect [[Class]] for objects - return toString.call(obj) - .replace(objectRegExp, '$1'); -} - -/** - * Match path to a layer. - * - * @param {Layer} layer - * @param {string} path - * @private - */ - -function matchLayer(layer, path) { - try { - return layer.match(path); - } catch (err) { - return err; - } -} - -// merge params with parent params -function mergeParams(params, parent) { - if (typeof parent !== 'object' || !parent) { - return params; - } - - // make copy of parent for base - var obj = mixin({}, parent); - - // simple non-numeric merging - if (!(0 in params) || !(0 in parent)) { - return mixin(obj, params); - } - - var i = 0; - var o = 0; - - // determine numeric gaps - while (i in params) { - i++; - } - - while (o in parent) { - o++; - } - - // offset numeric indices in params before merge - for (i--; i >= 0; i--) { - params[i + o] = params[i]; - - // create holes for the merge when necessary - if (i < o) { - delete params[i]; - } - } - - return mixin(obj, params); -} - -// restore obj props after function -function restore(fn, obj) { - var props = new Array(arguments.length - 2); - var vals = new Array(arguments.length - 2); - - for (var i = 0; i < props.length; i++) { - props[i] = arguments[i + 2]; - vals[i] = obj[props[i]]; - } - - return function () { - // restore vals - for (var i = 0; i < props.length; i++) { - obj[props[i]] = vals[i]; - } - - return fn.apply(this, arguments); - }; -} - -// send an OPTIONS response -function sendOptionsResponse(res, options, next) { - try { - var body = options.join(','); - res.set('Allow', body); - res.send(body); - } catch (err) { - next(err); - } -} - -// wrap a function -function wrap(old, fn) { - return function proxy() { - var args = new Array(arguments.length + 1); - - args[0] = old; - for (var i = 0, len = arguments.length; i < len; i++) { - args[i + 1] = arguments[i]; - } - - fn.apply(this, args); - }; -} diff --git a/truebit-implementation/node_modules/express/lib/router/layer.js b/truebit-implementation/node_modules/express/lib/router/layer.js deleted file mode 100644 index 4dc8e86d..00000000 --- a/truebit-implementation/node_modules/express/lib/router/layer.js +++ /dev/null @@ -1,181 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var pathRegexp = require('path-to-regexp'); -var debug = require('debug')('express:router:layer'); - -/** - * Module variables. - * @private - */ - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * Module exports. - * @public - */ - -module.exports = Layer; - -function Layer(path, options, fn) { - if (!(this instanceof Layer)) { - return new Layer(path, options, fn); - } - - debug('new %o', path) - var opts = options || {}; - - this.handle = fn; - this.name = fn.name || ''; - this.params = undefined; - this.path = undefined; - this.regexp = pathRegexp(path, this.keys = [], opts); - - // set fast path flags - this.regexp.fast_star = path === '*' - this.regexp.fast_slash = path === '/' && opts.end === false -} - -/** - * Handle the error for the layer. - * - * @param {Error} error - * @param {Request} req - * @param {Response} res - * @param {function} next - * @api private - */ - -Layer.prototype.handle_error = function handle_error(error, req, res, next) { - var fn = this.handle; - - if (fn.length !== 4) { - // not a standard error handler - return next(error); - } - - try { - fn(error, req, res, next); - } catch (err) { - next(err); - } -}; - -/** - * Handle the request for the layer. - * - * @param {Request} req - * @param {Response} res - * @param {function} next - * @api private - */ - -Layer.prototype.handle_request = function handle(req, res, next) { - var fn = this.handle; - - if (fn.length > 3) { - // not a standard request handler - return next(); - } - - try { - fn(req, res, next); - } catch (err) { - next(err); - } -}; - -/** - * Check if this route matches `path`, if so - * populate `.params`. - * - * @param {String} path - * @return {Boolean} - * @api private - */ - -Layer.prototype.match = function match(path) { - var match - - if (path != null) { - // fast path non-ending match for / (any path matches) - if (this.regexp.fast_slash) { - this.params = {} - this.path = '' - return true - } - - // fast path for * (everything matched in a param) - if (this.regexp.fast_star) { - this.params = {'0': decode_param(path)} - this.path = path - return true - } - - // match the path - match = this.regexp.exec(path) - } - - if (!match) { - this.params = undefined; - this.path = undefined; - return false; - } - - // store values - this.params = {}; - this.path = match[0] - - var keys = this.keys; - var params = this.params; - - for (var i = 1; i < match.length; i++) { - var key = keys[i - 1]; - var prop = key.name; - var val = decode_param(match[i]) - - if (val !== undefined || !(hasOwnProperty.call(params, prop))) { - params[prop] = val; - } - } - - return true; -}; - -/** - * Decode param value. - * - * @param {string} val - * @return {string} - * @private - */ - -function decode_param(val) { - if (typeof val !== 'string' || val.length === 0) { - return val; - } - - try { - return decodeURIComponent(val); - } catch (err) { - if (err instanceof URIError) { - err.message = 'Failed to decode param \'' + val + '\''; - err.status = err.statusCode = 400; - } - - throw err; - } -} diff --git a/truebit-implementation/node_modules/express/lib/router/route.js b/truebit-implementation/node_modules/express/lib/router/route.js deleted file mode 100644 index 178df0d5..00000000 --- a/truebit-implementation/node_modules/express/lib/router/route.js +++ /dev/null @@ -1,216 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var debug = require('debug')('express:router:route'); -var flatten = require('array-flatten'); -var Layer = require('./layer'); -var methods = require('methods'); - -/** - * Module variables. - * @private - */ - -var slice = Array.prototype.slice; -var toString = Object.prototype.toString; - -/** - * Module exports. - * @public - */ - -module.exports = Route; - -/** - * Initialize `Route` with the given `path`, - * - * @param {String} path - * @public - */ - -function Route(path) { - this.path = path; - this.stack = []; - - debug('new %o', path) - - // route handlers for various http methods - this.methods = {}; -} - -/** - * Determine if the route handles a given method. - * @private - */ - -Route.prototype._handles_method = function _handles_method(method) { - if (this.methods._all) { - return true; - } - - var name = method.toLowerCase(); - - if (name === 'head' && !this.methods['head']) { - name = 'get'; - } - - return Boolean(this.methods[name]); -}; - -/** - * @return {Array} supported HTTP methods - * @private - */ - -Route.prototype._options = function _options() { - var methods = Object.keys(this.methods); - - // append automatic head - if (this.methods.get && !this.methods.head) { - methods.push('head'); - } - - for (var i = 0; i < methods.length; i++) { - // make upper case - methods[i] = methods[i].toUpperCase(); - } - - return methods; -}; - -/** - * dispatch req, res into this route - * @private - */ - -Route.prototype.dispatch = function dispatch(req, res, done) { - var idx = 0; - var stack = this.stack; - if (stack.length === 0) { - return done(); - } - - var method = req.method.toLowerCase(); - if (method === 'head' && !this.methods['head']) { - method = 'get'; - } - - req.route = this; - - next(); - - function next(err) { - // signal to exit route - if (err && err === 'route') { - return done(); - } - - // signal to exit router - if (err && err === 'router') { - return done(err) - } - - var layer = stack[idx++]; - if (!layer) { - return done(err); - } - - if (layer.method && layer.method !== method) { - return next(err); - } - - if (err) { - layer.handle_error(err, req, res, next); - } else { - layer.handle_request(req, res, next); - } - } -}; - -/** - * Add a handler for all HTTP verbs to this route. - * - * Behaves just like middleware and can respond or call `next` - * to continue processing. - * - * You can use multiple `.all` call to add multiple handlers. - * - * function check_something(req, res, next){ - * next(); - * }; - * - * function validate_user(req, res, next){ - * next(); - * }; - * - * route - * .all(validate_user) - * .all(check_something) - * .get(function(req, res, next){ - * res.send('hello world'); - * }); - * - * @param {function} handler - * @return {Route} for chaining - * @api public - */ - -Route.prototype.all = function all() { - var handles = flatten(slice.call(arguments)); - - for (var i = 0; i < handles.length; i++) { - var handle = handles[i]; - - if (typeof handle !== 'function') { - var type = toString.call(handle); - var msg = 'Route.all() requires a callback function but got a ' + type - throw new TypeError(msg); - } - - var layer = Layer('/', {}, handle); - layer.method = undefined; - - this.methods._all = true; - this.stack.push(layer); - } - - return this; -}; - -methods.forEach(function(method){ - Route.prototype[method] = function(){ - var handles = flatten(slice.call(arguments)); - - for (var i = 0; i < handles.length; i++) { - var handle = handles[i]; - - if (typeof handle !== 'function') { - var type = toString.call(handle); - var msg = 'Route.' + method + '() requires a callback function but got a ' + type - throw new Error(msg); - } - - debug('%s %o', method, this.path) - - var layer = Layer('/', {}, handle); - layer.method = method; - - this.methods[method] = true; - this.stack.push(layer); - } - - return this; - }; -}); diff --git a/truebit-implementation/node_modules/express/lib/utils.js b/truebit-implementation/node_modules/express/lib/utils.js deleted file mode 100644 index bd81ac7f..00000000 --- a/truebit-implementation/node_modules/express/lib/utils.js +++ /dev/null @@ -1,306 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @api private - */ - -var Buffer = require('safe-buffer').Buffer -var contentDisposition = require('content-disposition'); -var contentType = require('content-type'); -var deprecate = require('depd')('express'); -var flatten = require('array-flatten'); -var mime = require('send').mime; -var etag = require('etag'); -var proxyaddr = require('proxy-addr'); -var qs = require('qs'); -var querystring = require('querystring'); - -/** - * Return strong ETag for `body`. - * - * @param {String|Buffer} body - * @param {String} [encoding] - * @return {String} - * @api private - */ - -exports.etag = createETagGenerator({ weak: false }) - -/** - * Return weak ETag for `body`. - * - * @param {String|Buffer} body - * @param {String} [encoding] - * @return {String} - * @api private - */ - -exports.wetag = createETagGenerator({ weak: true }) - -/** - * Check if `path` looks absolute. - * - * @param {String} path - * @return {Boolean} - * @api private - */ - -exports.isAbsolute = function(path){ - if ('/' === path[0]) return true; - if (':' === path[1] && ('\\' === path[2] || '/' === path[2])) return true; // Windows device path - if ('\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path -}; - -/** - * Flatten the given `arr`. - * - * @param {Array} arr - * @return {Array} - * @api private - */ - -exports.flatten = deprecate.function(flatten, - 'utils.flatten: use array-flatten npm module instead'); - -/** - * Normalize the given `type`, for example "html" becomes "text/html". - * - * @param {String} type - * @return {Object} - * @api private - */ - -exports.normalizeType = function(type){ - return ~type.indexOf('/') - ? acceptParams(type) - : { value: mime.lookup(type), params: {} }; -}; - -/** - * Normalize `types`, for example "html" becomes "text/html". - * - * @param {Array} types - * @return {Array} - * @api private - */ - -exports.normalizeTypes = function(types){ - var ret = []; - - for (var i = 0; i < types.length; ++i) { - ret.push(exports.normalizeType(types[i])); - } - - return ret; -}; - -/** - * Generate Content-Disposition header appropriate for the filename. - * non-ascii filenames are urlencoded and a filename* parameter is added - * - * @param {String} filename - * @return {String} - * @api private - */ - -exports.contentDisposition = deprecate.function(contentDisposition, - 'utils.contentDisposition: use content-disposition npm module instead'); - -/** - * Parse accept params `str` returning an - * object with `.value`, `.quality` and `.params`. - * also includes `.originalIndex` for stable sorting - * - * @param {String} str - * @return {Object} - * @api private - */ - -function acceptParams(str, index) { - var parts = str.split(/ *; */); - var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index }; - - for (var i = 1; i < parts.length; ++i) { - var pms = parts[i].split(/ *= */); - if ('q' === pms[0]) { - ret.quality = parseFloat(pms[1]); - } else { - ret.params[pms[0]] = pms[1]; - } - } - - return ret; -} - -/** - * Compile "etag" value to function. - * - * @param {Boolean|String|Function} val - * @return {Function} - * @api private - */ - -exports.compileETag = function(val) { - var fn; - - if (typeof val === 'function') { - return val; - } - - switch (val) { - case true: - fn = exports.wetag; - break; - case false: - break; - case 'strong': - fn = exports.etag; - break; - case 'weak': - fn = exports.wetag; - break; - default: - throw new TypeError('unknown value for etag function: ' + val); - } - - return fn; -} - -/** - * Compile "query parser" value to function. - * - * @param {String|Function} val - * @return {Function} - * @api private - */ - -exports.compileQueryParser = function compileQueryParser(val) { - var fn; - - if (typeof val === 'function') { - return val; - } - - switch (val) { - case true: - fn = querystring.parse; - break; - case false: - fn = newObject; - break; - case 'extended': - fn = parseExtendedQueryString; - break; - case 'simple': - fn = querystring.parse; - break; - default: - throw new TypeError('unknown value for query parser function: ' + val); - } - - return fn; -} - -/** - * Compile "proxy trust" value to function. - * - * @param {Boolean|String|Number|Array|Function} val - * @return {Function} - * @api private - */ - -exports.compileTrust = function(val) { - if (typeof val === 'function') return val; - - if (val === true) { - // Support plain true/false - return function(){ return true }; - } - - if (typeof val === 'number') { - // Support trusting hop count - return function(a, i){ return i < val }; - } - - if (typeof val === 'string') { - // Support comma-separated values - val = val.split(/ *, */); - } - - return proxyaddr.compile(val || []); -} - -/** - * Set the charset in a given Content-Type string. - * - * @param {String} type - * @param {String} charset - * @return {String} - * @api private - */ - -exports.setCharset = function setCharset(type, charset) { - if (!type || !charset) { - return type; - } - - // parse type - var parsed = contentType.parse(type); - - // set charset - parsed.parameters.charset = charset; - - // format type - return contentType.format(parsed); -}; - -/** - * Create an ETag generator function, generating ETags with - * the given options. - * - * @param {object} options - * @return {function} - * @private - */ - -function createETagGenerator (options) { - return function generateETag (body, encoding) { - var buf = !Buffer.isBuffer(body) - ? Buffer.from(body, encoding) - : body - - return etag(buf, options) - } -} - -/** - * Parse an extended query string with qs. - * - * @return {Object} - * @private - */ - -function parseExtendedQueryString(str) { - return qs.parse(str, { - allowPrototypes: true - }); -} - -/** - * Return new empty object. - * - * @return {Object} - * @api private - */ - -function newObject() { - return {}; -} diff --git a/truebit-implementation/node_modules/express/lib/view.js b/truebit-implementation/node_modules/express/lib/view.js deleted file mode 100644 index cf101cae..00000000 --- a/truebit-implementation/node_modules/express/lib/view.js +++ /dev/null @@ -1,182 +0,0 @@ -/*! - * express - * Copyright(c) 2009-2013 TJ Holowaychuk - * Copyright(c) 2013 Roman Shtylman - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var debug = require('debug')('express:view'); -var path = require('path'); -var fs = require('fs'); - -/** - * Module variables. - * @private - */ - -var dirname = path.dirname; -var basename = path.basename; -var extname = path.extname; -var join = path.join; -var resolve = path.resolve; - -/** - * Module exports. - * @public - */ - -module.exports = View; - -/** - * Initialize a new `View` with the given `name`. - * - * Options: - * - * - `defaultEngine` the default template engine name - * - `engines` template engine require() cache - * - `root` root path for view lookup - * - * @param {string} name - * @param {object} options - * @public - */ - -function View(name, options) { - var opts = options || {}; - - this.defaultEngine = opts.defaultEngine; - this.ext = extname(name); - this.name = name; - this.root = opts.root; - - if (!this.ext && !this.defaultEngine) { - throw new Error('No default engine was specified and no extension was provided.'); - } - - var fileName = name; - - if (!this.ext) { - // get extension from default engine name - this.ext = this.defaultEngine[0] !== '.' - ? '.' + this.defaultEngine - : this.defaultEngine; - - fileName += this.ext; - } - - if (!opts.engines[this.ext]) { - // load engine - var mod = this.ext.substr(1) - debug('require "%s"', mod) - - // default engine export - var fn = require(mod).__express - - if (typeof fn !== 'function') { - throw new Error('Module "' + mod + '" does not provide a view engine.') - } - - opts.engines[this.ext] = fn - } - - // store loaded engine - this.engine = opts.engines[this.ext]; - - // lookup path - this.path = this.lookup(fileName); -} - -/** - * Lookup view by the given `name` - * - * @param {string} name - * @private - */ - -View.prototype.lookup = function lookup(name) { - var path; - var roots = [].concat(this.root); - - debug('lookup "%s"', name); - - for (var i = 0; i < roots.length && !path; i++) { - var root = roots[i]; - - // resolve the path - var loc = resolve(root, name); - var dir = dirname(loc); - var file = basename(loc); - - // resolve the file - path = this.resolve(dir, file); - } - - return path; -}; - -/** - * Render with the given options. - * - * @param {object} options - * @param {function} callback - * @private - */ - -View.prototype.render = function render(options, callback) { - debug('render "%s"', this.path); - this.engine(this.path, options, callback); -}; - -/** - * Resolve the file within the given directory. - * - * @param {string} dir - * @param {string} file - * @private - */ - -View.prototype.resolve = function resolve(dir, file) { - var ext = this.ext; - - // . - var path = join(dir, file); - var stat = tryStat(path); - - if (stat && stat.isFile()) { - return path; - } - - // /index. - path = join(dir, basename(file, ext), 'index' + ext); - stat = tryStat(path); - - if (stat && stat.isFile()) { - return path; - } -}; - -/** - * Return a stat, maybe. - * - * @param {string} path - * @return {fs.Stats} - * @private - */ - -function tryStat(path) { - debug('stat "%s"', path); - - try { - return fs.statSync(path); - } catch (e) { - return undefined; - } -} diff --git a/truebit-implementation/node_modules/express/node_modules/statuses/HISTORY.md b/truebit-implementation/node_modules/express/node_modules/statuses/HISTORY.md deleted file mode 100644 index 7b59790a..00000000 --- a/truebit-implementation/node_modules/express/node_modules/statuses/HISTORY.md +++ /dev/null @@ -1,60 +0,0 @@ -1.4.0 / 2017-10-20 -================== - - * Add `STATUS_CODES` export - -1.3.1 / 2016-11-11 -================== - - * Fix return type in JSDoc - -1.3.0 / 2016-05-17 -================== - - * Add `421 Misdirected Request` - * perf: enable strict mode - -1.2.1 / 2015-02-01 -================== - - * Fix message for status 451 - - `451 Unavailable For Legal Reasons` - -1.2.0 / 2014-09-28 -================== - - * Add `208 Already Repored` - * Add `226 IM Used` - * Add `306 (Unused)` - * Add `415 Unable For Legal Reasons` - * Add `508 Loop Detected` - -1.1.1 / 2014-09-24 -================== - - * Add missing 308 to `codes.json` - -1.1.0 / 2014-09-21 -================== - - * Add `codes.json` for universal support - -1.0.4 / 2014-08-20 -================== - - * Package cleanup - -1.0.3 / 2014-06-08 -================== - - * Add 308 to `.redirect` category - -1.0.2 / 2014-03-13 -================== - - * Add `.retry` category - -1.0.1 / 2014-03-12 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/express/node_modules/statuses/LICENSE b/truebit-implementation/node_modules/express/node_modules/statuses/LICENSE deleted file mode 100644 index 28a31618..00000000 --- a/truebit-implementation/node_modules/express/node_modules/statuses/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/express/node_modules/statuses/README.md b/truebit-implementation/node_modules/express/node_modules/statuses/README.md deleted file mode 100644 index 0fe5720d..00000000 --- a/truebit-implementation/node_modules/express/node_modules/statuses/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# Statuses - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -HTTP status utility for node. - -This module provides a list of status codes and messages sourced from -a few different projects: - - * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) - * The [Node.js project](https://nodejs.org/) - * The [NGINX project](https://www.nginx.com/) - * The [Apache HTTP Server project](https://httpd.apache.org/) - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install statuses -``` - -## API - - - -```js -var status = require('statuses') -``` - -### var code = status(Integer || String) - -If `Integer` or `String` is a valid HTTP code or status message, then the -appropriate `code` will be returned. Otherwise, an error will be thrown. - - - -```js -status(403) // => 403 -status('403') // => 403 -status('forbidden') // => 403 -status('Forbidden') // => 403 -status(306) // throws, as it's not supported by node.js -``` - -### status.STATUS_CODES - -Returns an object which maps status codes to status messages, in -the same format as the -[Node.js http module](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). - -### status.codes - -Returns an array of all the status codes as `Integer`s. - -### var msg = status[code] - -Map of `code` to `status message`. `undefined` for invalid `code`s. - - - -```js -status[404] // => 'Not Found' -``` - -### var code = status[msg] - -Map of `status message` to `code`. `msg` can either be title-cased or -lower-cased. `undefined` for invalid `status message`s. - - - -```js -status['not found'] // => 404 -status['Not Found'] // => 404 -``` - -### status.redirect[code] - -Returns `true` if a status code is a valid redirect status. - - - -```js -status.redirect[200] // => undefined -status.redirect[301] // => true -``` - -### status.empty[code] - -Returns `true` if a status code expects an empty body. - - - -```js -status.empty[200] // => undefined -status.empty[204] // => true -status.empty[304] // => true -``` - -### status.retry[code] - -Returns `true` if you should retry the rest. - - - -```js -status.retry[501] // => undefined -status.retry[503] // => true -``` - -[npm-image]: https://img.shields.io/npm/v/statuses.svg -[npm-url]: https://npmjs.org/package/statuses -[node-version-image]: https://img.shields.io/node/v/statuses.svg -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/statuses.svg -[travis-url]: https://travis-ci.org/jshttp/statuses -[coveralls-image]: https://img.shields.io/coveralls/jshttp/statuses.svg -[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master -[downloads-image]: https://img.shields.io/npm/dm/statuses.svg -[downloads-url]: https://npmjs.org/package/statuses diff --git a/truebit-implementation/node_modules/express/node_modules/statuses/codes.json b/truebit-implementation/node_modules/express/node_modules/statuses/codes.json deleted file mode 100644 index 66f70e35..00000000 --- a/truebit-implementation/node_modules/express/node_modules/statuses/codes.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "100": "Continue", - "101": "Switching Protocols", - "102": "Processing", - "200": "OK", - "201": "Created", - "202": "Accepted", - "203": "Non-Authoritative Information", - "204": "No Content", - "205": "Reset Content", - "206": "Partial Content", - "207": "Multi-Status", - "208": "Already Reported", - "226": "IM Used", - "300": "Multiple Choices", - "301": "Moved Permanently", - "302": "Found", - "303": "See Other", - "304": "Not Modified", - "305": "Use Proxy", - "306": "(Unused)", - "307": "Temporary Redirect", - "308": "Permanent Redirect", - "400": "Bad Request", - "401": "Unauthorized", - "402": "Payment Required", - "403": "Forbidden", - "404": "Not Found", - "405": "Method Not Allowed", - "406": "Not Acceptable", - "407": "Proxy Authentication Required", - "408": "Request Timeout", - "409": "Conflict", - "410": "Gone", - "411": "Length Required", - "412": "Precondition Failed", - "413": "Payload Too Large", - "414": "URI Too Long", - "415": "Unsupported Media Type", - "416": "Range Not Satisfiable", - "417": "Expectation Failed", - "418": "I'm a teapot", - "421": "Misdirected Request", - "422": "Unprocessable Entity", - "423": "Locked", - "424": "Failed Dependency", - "425": "Unordered Collection", - "426": "Upgrade Required", - "428": "Precondition Required", - "429": "Too Many Requests", - "431": "Request Header Fields Too Large", - "451": "Unavailable For Legal Reasons", - "500": "Internal Server Error", - "501": "Not Implemented", - "502": "Bad Gateway", - "503": "Service Unavailable", - "504": "Gateway Timeout", - "505": "HTTP Version Not Supported", - "506": "Variant Also Negotiates", - "507": "Insufficient Storage", - "508": "Loop Detected", - "509": "Bandwidth Limit Exceeded", - "510": "Not Extended", - "511": "Network Authentication Required" -} diff --git a/truebit-implementation/node_modules/express/node_modules/statuses/index.js b/truebit-implementation/node_modules/express/node_modules/statuses/index.js deleted file mode 100644 index 4df469a0..00000000 --- a/truebit-implementation/node_modules/express/node_modules/statuses/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/*! - * statuses - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var codes = require('./codes.json') - -/** - * Module exports. - * @public - */ - -module.exports = status - -// status code to message map -status.STATUS_CODES = codes - -// array of status codes -status.codes = populateStatusesMap(status, codes) - -// status codes for redirects -status.redirect = { - 300: true, - 301: true, - 302: true, - 303: true, - 305: true, - 307: true, - 308: true -} - -// status codes for empty bodies -status.empty = { - 204: true, - 205: true, - 304: true -} - -// status codes for when you should retry the request -status.retry = { - 502: true, - 503: true, - 504: true -} - -/** - * Populate the statuses map for given codes. - * @private - */ - -function populateStatusesMap (statuses, codes) { - var arr = [] - - Object.keys(codes).forEach(function forEachCode (code) { - var message = codes[code] - var status = Number(code) - - // Populate properties - statuses[status] = message - statuses[message] = status - statuses[message.toLowerCase()] = status - - // Add to array - arr.push(status) - }) - - return arr -} - -/** - * Get the status code. - * - * Given a number, this will throw if it is not a known status - * code, otherwise the code will be returned. Given a string, - * the string will be parsed for a number and return the code - * if valid, otherwise will lookup the code assuming this is - * the status message. - * - * @param {string|number} code - * @returns {number} - * @public - */ - -function status (code) { - if (typeof code === 'number') { - if (!status[code]) throw new Error('invalid status code: ' + code) - return code - } - - if (typeof code !== 'string') { - throw new TypeError('code must be a number or string') - } - - // '403' - var n = parseInt(code, 10) - if (!isNaN(n)) { - if (!status[n]) throw new Error('invalid status code: ' + n) - return n - } - - n = status[code.toLowerCase()] - if (!n) throw new Error('invalid status message: "' + code + '"') - return n -} diff --git a/truebit-implementation/node_modules/express/node_modules/statuses/package.json b/truebit-implementation/node_modules/express/node_modules/statuses/package.json deleted file mode 100644 index c1860901..00000000 --- a/truebit-implementation/node_modules/express/node_modules/statuses/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "statuses@~1.4.0", - "_id": "statuses@1.4.0", - "_inBundle": false, - "_integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "_location": "/express/statuses", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "statuses@~1.4.0", - "name": "statuses", - "escapedName": "statuses", - "rawSpec": "~1.4.0", - "saveSpec": null, - "fetchSpec": "~1.4.0" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "_shasum": "bb73d446da2796106efcc1b601a253d6c46bd087", - "_spec": "statuses@~1.4.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "bugs": { - "url": "https://github.com/jshttp/statuses/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "deprecated": false, - "description": "HTTP status utility", - "devDependencies": { - "csv-parse": "1.2.4", - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.8.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "5.2.0", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5", - "raw-body": "2.3.2", - "stream-to-array": "2.3.0" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "index.js", - "codes.json", - "LICENSE" - ], - "homepage": "https://github.com/jshttp/statuses#readme", - "keywords": [ - "http", - "status", - "code" - ], - "license": "MIT", - "name": "statuses", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/statuses.git" - }, - "scripts": { - "build": "node scripts/build.js", - "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "update": "npm run fetch && npm run build" - }, - "version": "1.4.0" -} diff --git a/truebit-implementation/node_modules/express/package.json b/truebit-implementation/node_modules/express/package.json deleted file mode 100644 index 838d3b1c..00000000 --- a/truebit-implementation/node_modules/express/package.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "_from": "express@^4.14.0", - "_id": "express@4.16.4", - "_inBundle": false, - "_integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "_location": "/express", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "express@^4.14.0", - "name": "express", - "escapedName": "express", - "rawSpec": "^4.14.0", - "saveSpec": null, - "fetchSpec": "^4.14.0" - }, - "_requiredBy": [ - "/servify" - ], - "_resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "_shasum": "fddef61926109e24c515ea97fd2f1bdbf62df12e", - "_spec": "express@^4.14.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/servify", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "bugs": { - "url": "https://github.com/expressjs/express/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Aaron Heckmann", - "email": "aaron.heckmann+github@gmail.com" - }, - { - "name": "Ciaran Jessup", - "email": "ciaranj@gmail.com" - }, - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Guillermo Rauch", - "email": "rauchg@gmail.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com" - }, - { - "name": "Roman Shtylman", - "email": "shtylman+expressjs@gmail.com" - }, - { - "name": "Young Jae Sim", - "email": "hanul@hanul.me" - } - ], - "dependencies": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "deprecated": false, - "description": "Fast, unopinionated, minimalist web framework", - "devDependencies": { - "after": "0.8.2", - "connect-redis": "3.4.0", - "cookie-parser": "~1.4.3", - "cookie-session": "1.3.2", - "ejs": "2.6.1", - "eslint": "2.13.1", - "express-session": "1.15.6", - "hbs": "4.0.1", - "istanbul": "0.4.5", - "marked": "0.5.1", - "method-override": "3.0.0", - "mocha": "5.2.0", - "morgan": "1.9.1", - "multiparty": "4.2.1", - "pbkdf2-password": "1.2.1", - "should": "13.2.3", - "supertest": "3.3.0", - "vhost": "~3.0.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "files": [ - "LICENSE", - "History.md", - "Readme.md", - "index.js", - "lib/" - ], - "homepage": "http://expressjs.com/", - "keywords": [ - "express", - "framework", - "sinatra", - "web", - "rest", - "restful", - "router", - "app", - "api" - ], - "license": "MIT", - "name": "express", - "repository": { - "type": "git", - "url": "git+https://github.com/expressjs/express.git" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/", - "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/" - }, - "version": "4.16.4" -} diff --git a/truebit-implementation/node_modules/extend/.editorconfig b/truebit-implementation/node_modules/extend/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/truebit-implementation/node_modules/extend/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/truebit-implementation/node_modules/extend/.eslintrc b/truebit-implementation/node_modules/extend/.eslintrc deleted file mode 100644 index a34cf283..00000000 --- a/truebit-implementation/node_modules/extend/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": [2, 20], - "eqeqeq": [2, "allow-null"], - "func-name-matching": [1], - "max-depth": [1, 4], - "max-statements": [2, 26], - "no-extra-parens": [1], - "no-magic-numbers": [0], - "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], - "sort-keys": [0], - } -} diff --git a/truebit-implementation/node_modules/extend/.jscs.json b/truebit-implementation/node_modules/extend/.jscs.json deleted file mode 100644 index 3cce01d7..00000000 --- a/truebit-implementation/node_modules/extend/.jscs.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "es3": true, - - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": { - "allExcept": [], - "keywords": ["if", "else", "for", "while", "do", "try", "catch"] - }, - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "disallowSpaceBeforeComma": true, - "disallowSpaceAfterComma": false, - "disallowSpaceBeforeSemicolon": true, - - "disallowNodeTypes": [ - "DebuggerStatement", - "LabeledStatement", - "SwitchCase", - "SwitchStatement", - "WithStatement" - ], - - "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": { "allExcept": ["keywords"] }, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 6 - }, - - "requirePaddingNewLinesAfterUseStrict": true, - - "disallowArrowFunctions": true, - - "disallowMultiLineTernary": true, - - "validateOrderInObjectKeys": false, - - "disallowIdenticalDestructuringNames": true, - - "disallowNestedTernaries": { "maxLevel": 1 }, - - "requireSpaceAfterComma": { "allExcept": ["trailing"] }, - "requireAlignedMultilineParams": false, - - "requireSpacesInGenerator": { - "afterStar": true - }, - - "disallowSpacesInGenerator": { - "beforeStar": true - }, - - "disallowVar": false, - - "requireArrayDestructuring": false, - - "requireEnhancedObjectLiterals": false, - - "requireObjectDestructuring": false, - - "requireEarlyReturn": false, - - "requireCapitalizedConstructorsNew": { - "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] - }, - - "requireImportAlphabetized": false, - - "requireSpaceBeforeObjectValues": true, - "requireSpaceBeforeDestructuredValues": true, - - "disallowSpacesInsideTemplateStringPlaceholders": true, - - "disallowArrayDestructuringReturn": false, - - "requireNewlineBeforeSingleStatementsInIf": false, - - "disallowUnusedVariables": true, - - "requireSpacesInsideImportedObjectBraces": true, - - "requireUseStrict": true -} - diff --git a/truebit-implementation/node_modules/extend/.travis.yml b/truebit-implementation/node_modules/extend/.travis.yml deleted file mode 100644 index 5ccdfc49..00000000 --- a/truebit-implementation/node_modules/extend/.travis.yml +++ /dev/null @@ -1,230 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "10.7" - - "9.11" - - "8.11" - - "7.10" - - "6.14" - - "5.12" - - "4.9" - - "iojs-v3.3" - - "iojs-v2.5" - - "iojs-v1.8" - - "0.12" - - "0.10" - - "0.8" -before_install: - - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' - - 'nvm install-latest-npm' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' - - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' - - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' - - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' -sudo: false -env: - - TEST=true -matrix: - fast_finish: true - include: - - node_js: "lts/*" - env: PRETEST=true - - node_js: "lts/*" - env: POSTTEST=true - - node_js: "4" - env: COVERAGE=true - - node_js: "10.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.4" - env: TEST=true ALLOW_FAILURE=true - allow_failures: - - os: osx - - env: TEST=true ALLOW_FAILURE=true diff --git a/truebit-implementation/node_modules/extend/CHANGELOG.md b/truebit-implementation/node_modules/extend/CHANGELOG.md deleted file mode 100644 index 2cf7de6f..00000000 --- a/truebit-implementation/node_modules/extend/CHANGELOG.md +++ /dev/null @@ -1,83 +0,0 @@ -3.0.2 / 2018-07-19 -================== - * [Fix] Prevent merging `__proto__` property (#48) - * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` - * [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm` - -3.0.1 / 2017-04-27 -================== - * [Fix] deep extending should work with a non-object (#46) - * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` - * [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. - * [Docs] Add example to readme (#34) - -3.0.0 / 2015-07-01 -================== - * [Possible breaking change] Use global "strict" directive (#32) - * [Tests] `int` is an ES3 reserved word - * [Tests] Test up to `io.js` `v2.3` - * [Tests] Add `npm run eslint` - * [Dev Deps] Update `covert`, `jscs` - -2.0.1 / 2015-04-25 -================== - * Use an inline `isArray` check, for ES3 browsers. (#27) - * Some old browsers fail when an identifier is `toString` - * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds - * Add license info to package.json (#25) - * Update `tape`, `jscs` - * Adding a CHANGELOG - -2.0.0 / 2014-10-01 -================== - * Increase code coverage to 100%; run code coverage as part of tests - * Add `npm run lint`; Run linter as part of tests - * Remove nodeType and setInterval checks in isPlainObject - * Updating `tape`, `jscs`, `covert` - * General style and README cleanup - -1.3.0 / 2014-06-20 -================== - * Add component.json for browser support (#18) - * Use SVG for badges in README (#16) - * Updating `tape`, `covert` - * Updating travis-ci to work with multiple node versions - * Fix `deep === false` bug (returning target as {}) (#14) - * Fixing constructor checks in isPlainObject - * Adding additional test coverage - * Adding `npm run coverage` - * Add LICENSE (#13) - * Adding a warning about `false`, per #11 - * General style and whitespace cleanup - -1.2.1 / 2013-09-14 -================== - * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8 - * Updating `tape` - -1.2.0 / 2013-09-02 -================== - * Updating the README: add badges - * Adding a missing variable reference. - * Using `tape` instead of `buster` for tests; add more tests (#7) - * Adding node 0.10 to Travis CI (#6) - * Enabling "npm test" and cleaning up package.json (#5) - * Add Travis CI. - -1.1.3 / 2012-12-06 -================== - * Added unit tests. - * Ensure extend function is named. (Looks nicer in a stack trace.) - * README cleanup. - -1.1.1 / 2012-11-07 -================== - * README cleanup. - * Added installation instructions. - * Added a missing semicolon - -1.0.0 / 2012-04-08 -================== - * Initial commit - diff --git a/truebit-implementation/node_modules/extend/LICENSE b/truebit-implementation/node_modules/extend/LICENSE deleted file mode 100644 index e16d6a56..00000000 --- a/truebit-implementation/node_modules/extend/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Stefan Thomas - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/extend/README.md b/truebit-implementation/node_modules/extend/README.md deleted file mode 100644 index 5b8249aa..00000000 --- a/truebit-implementation/node_modules/extend/README.md +++ /dev/null @@ -1,81 +0,0 @@ -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] - -# extend() for Node.js [![Version Badge][npm-version-png]][npm-url] - -`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true. - -Notes: - -* Since Node.js >= 4, - [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - now offers the same functionality natively (but without the "deep copy" option). - See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6). -* Some native implementations of `Object.assign` in both Node.js and many - browsers (since NPM modules are for the browser too) may not be fully - spec-compliant. - Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for - a compliant candidate. - -## Installation - -This package is available on [npm][npm-url] as: `extend` - -``` sh -npm install extend -``` - -## Usage - -**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)** - -*Extend one object with one or more others, returning the modified object.* - -**Example:** - -``` js -var extend = require('extend'); -extend(targetObject, object1, object2); -``` - -Keep in mind that the target object will be modified, and will be returned from extend(). - -If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s). -Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. -Warning: passing `false` as the first argument is not supported. - -### Arguments - -* `deep` *Boolean* (optional) -If set, the merge becomes recursive (i.e. deep copy). -* `target` *Object* -The object to extend. -* `object1` *Object* -The object that will be merged into the first. -* `objectN` *Object* (Optional) -More objects to merge into the first. - -## License - -`node-extend` is licensed under the [MIT License][mit-license-url]. - -## Acknowledgements - -All credit to the jQuery authors for perfecting this amazing utility. - -Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb]. - -[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg -[travis-url]: https://travis-ci.org/justmoon/node-extend -[npm-url]: https://npmjs.org/package/extend -[mit-license-url]: http://opensource.org/licenses/MIT -[github-justmoon]: https://github.com/justmoon -[github-insin]: https://github.com/insin -[github-ljharb]: https://github.com/ljharb -[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg -[deps-svg]: https://david-dm.org/justmoon/node-extend.svg -[deps-url]: https://david-dm.org/justmoon/node-extend -[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg -[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies - diff --git a/truebit-implementation/node_modules/extend/component.json b/truebit-implementation/node_modules/extend/component.json deleted file mode 100644 index 1500a2f3..00000000 --- a/truebit-implementation/node_modules/extend/component.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "extend", - "author": "Stefan Thomas (http://www.justmoon.net)", - "version": "3.0.0", - "description": "Port of jQuery.extend for node.js and the browser.", - "scripts": [ - "index.js" - ], - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "keywords": [ - "extend", - "clone", - "merge" - ], - "repository" : { - "type": "git", - "url": "https://github.com/justmoon/node-extend.git" - }, - "dependencies": { - }, - "devDependencies": { - "tape" : "~3.0.0", - "covert": "~0.4.0", - "jscs": "~1.6.2" - } -} - diff --git a/truebit-implementation/node_modules/extend/index.js b/truebit-implementation/node_modules/extend/index.js deleted file mode 100644 index 2aa3faae..00000000 --- a/truebit-implementation/node_modules/extend/index.js +++ /dev/null @@ -1,117 +0,0 @@ -'use strict'; - -var hasOwn = Object.prototype.hasOwnProperty; -var toStr = Object.prototype.toString; -var defineProperty = Object.defineProperty; -var gOPD = Object.getOwnPropertyDescriptor; - -var isArray = function isArray(arr) { - if (typeof Array.isArray === 'function') { - return Array.isArray(arr); - } - - return toStr.call(arr) === '[object Array]'; -}; - -var isPlainObject = function isPlainObject(obj) { - if (!obj || toStr.call(obj) !== '[object Object]') { - return false; - } - - var hasOwnConstructor = hasOwn.call(obj, 'constructor'); - var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); - // Not own constructor property must be Object - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - var key; - for (key in obj) { /**/ } - - return typeof key === 'undefined' || hasOwn.call(obj, key); -}; - -// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target -var setProperty = function setProperty(target, options) { - if (defineProperty && options.name === '__proto__') { - defineProperty(target, options.name, { - enumerable: true, - configurable: true, - value: options.newValue, - writable: true - }); - } else { - target[options.name] = options.newValue; - } -}; - -// Return undefined instead of __proto__ if '__proto__' is not an own property -var getProperty = function getProperty(obj, name) { - if (name === '__proto__') { - if (!hasOwn.call(obj, name)) { - return void 0; - } else if (gOPD) { - // In early versions of node, obj['__proto__'] is buggy when obj has - // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. - return gOPD(obj, name).value; - } - } - - return obj[name]; -}; - -module.exports = function extend() { - var options, name, src, copy, copyIsArray, clone; - var target = arguments[0]; - var i = 1; - var length = arguments.length; - var deep = false; - - // Handle a deep copy situation - if (typeof target === 'boolean') { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { - target = {}; - } - - for (; i < length; ++i) { - options = arguments[i]; - // Only deal with non-null/undefined values - if (options != null) { - // Extend the base object - for (name in options) { - src = getProperty(target, name); - copy = getProperty(options, name); - - // Prevent never-ending loop - if (target !== copy) { - // Recurse if we're merging plain objects or arrays - if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { - if (copyIsArray) { - copyIsArray = false; - clone = src && isArray(src) ? src : []; - } else { - clone = src && isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); - - // Don't bring in undefined values - } else if (typeof copy !== 'undefined') { - setProperty(target, { name: name, newValue: copy }); - } - } - } - } - } - - // Return the modified object - return target; -}; diff --git a/truebit-implementation/node_modules/extend/package.json b/truebit-implementation/node_modules/extend/package.json deleted file mode 100644 index b9c285ab..00000000 --- a/truebit-implementation/node_modules/extend/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "extend@~3.0.2", - "_id": "extend@3.0.2", - "_inBundle": false, - "_integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "_location": "/extend", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "extend@~3.0.2", - "name": "extend", - "escapedName": "extend", - "rawSpec": "~3.0.2", - "saveSpec": null, - "fetchSpec": "~3.0.2" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "_shasum": "f8b1136b4071fbd8eb140aff858b1019ec2915fa", - "_spec": "extend@~3.0.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Stefan Thomas", - "email": "justmoon@members.fsf.org", - "url": "http://www.justmoon.net" - }, - "bugs": { - "url": "https://github.com/justmoon/node-extend/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Port of jQuery.extend for node.js and the browser", - "devDependencies": { - "@ljharb/eslint-config": "^12.2.1", - "covert": "^1.1.0", - "eslint": "^4.19.1", - "jscs": "^3.0.7", - "tape": "^4.9.1" - }, - "homepage": "https://github.com/justmoon/node-extend#readme", - "keywords": [ - "extend", - "clone", - "merge" - ], - "license": "MIT", - "main": "index", - "name": "extend", - "repository": { - "type": "git", - "url": "git+https://github.com/justmoon/node-extend.git" - }, - "scripts": { - "coverage": "covert test/index.js", - "coverage-quiet": "covert test/index.js --quiet", - "eslint": "eslint *.js */*.js", - "jscs": "jscs *.js */*.js", - "lint": "npm run jscs && npm run eslint", - "posttest": "npm run coverage-quiet", - "pretest": "npm run lint", - "test": "npm run tests-only", - "tests-only": "node test" - }, - "version": "3.0.2" -} diff --git a/truebit-implementation/node_modules/extsprintf/.gitmodules b/truebit-implementation/node_modules/extsprintf/.gitmodules deleted file mode 100644 index e69de29b..00000000 diff --git a/truebit-implementation/node_modules/extsprintf/.npmignore b/truebit-implementation/node_modules/extsprintf/.npmignore deleted file mode 100644 index 6ed1ae97..00000000 --- a/truebit-implementation/node_modules/extsprintf/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/deps -/examples diff --git a/truebit-implementation/node_modules/extsprintf/LICENSE b/truebit-implementation/node_modules/extsprintf/LICENSE deleted file mode 100644 index cbc0bb3b..00000000 --- a/truebit-implementation/node_modules/extsprintf/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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 diff --git a/truebit-implementation/node_modules/extsprintf/Makefile b/truebit-implementation/node_modules/extsprintf/Makefile deleted file mode 100644 index db845189..00000000 --- a/truebit-implementation/node_modules/extsprintf/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (c) 2012, Joyent, Inc. All rights reserved. -# -# Makefile: top-level Makefile -# -# This Makefile contains only repo-specific logic and uses included makefiles -# to supply common targets (javascriptlint, jsstyle, restdown, etc.), which are -# used by other repos as well. -# - -# -# Files -# -JSL = jsl -JSSTYLE = jsstyle -JS_FILES := $(shell find examples lib -name '*.js') -JSL_FILES_NODE = $(JS_FILES) -JSSTYLE_FILES = $(JS_FILES) -JSL_CONF_NODE = jsl.node.conf - -# Default target is "check" -check: - -include ./Makefile.targ diff --git a/truebit-implementation/node_modules/extsprintf/Makefile.targ b/truebit-implementation/node_modules/extsprintf/Makefile.targ deleted file mode 100644 index 2a64fe7e..00000000 --- a/truebit-implementation/node_modules/extsprintf/Makefile.targ +++ /dev/null @@ -1,285 +0,0 @@ -# -*- mode: makefile -*- -# -# Copyright (c) 2012, Joyent, Inc. All rights reserved. -# -# Makefile.targ: common targets. -# -# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped -# into other repos as-is without requiring any modifications. If you find -# yourself changing this file, you should instead update the original copy in -# eng.git and then update your repo to use the new version. -# -# This Makefile defines several useful targets and rules. You can use it by -# including it from a Makefile that specifies some of the variables below. -# -# Targets defined in this Makefile: -# -# check Checks JavaScript files for lint and style -# Checks bash scripts for syntax -# Checks SMF manifests for validity against the SMF DTD -# -# clean Removes built files -# -# docs Builds restdown documentation in docs/ -# -# prepush Depends on "check" and "test" -# -# test Does nothing (you should override this) -# -# xref Generates cscope (source cross-reference index) -# -# For details on what these targets are supposed to do, see the Joyent -# Engineering Guide. -# -# To make use of these targets, you'll need to set some of these variables. Any -# variables left unset will simply not be used. -# -# BASH_FILES Bash scripts to check for syntax -# (paths relative to top-level Makefile) -# -# CLEAN_FILES Files to remove as part of the "clean" target. Note -# that files generated by targets in this Makefile are -# automatically included in CLEAN_FILES. These include -# restdown-generated HTML and JSON files. -# -# DOC_FILES Restdown (documentation source) files. These are -# assumed to be contained in "docs/", and must NOT -# contain the "docs/" prefix. -# -# JSL_CONF_NODE Specify JavaScriptLint configuration files -# JSL_CONF_WEB (paths relative to top-level Makefile) -# -# Node.js and Web configuration files are separate -# because you'll usually want different global variable -# configurations. If no file is specified, none is given -# to jsl, which causes it to use a default configuration, -# which probably isn't what you want. -# -# JSL_FILES_NODE JavaScript files to check with Node config file. -# JSL_FILES_WEB JavaScript files to check with Web config file. -# -# You can also override these variables: -# -# BASH Path to bash (default: bash) -# -# CSCOPE_DIRS Directories to search for source files for the cscope -# index. (default: ".") -# -# JSL Path to JavaScriptLint (default: "jsl") -# -# JSL_FLAGS_NODE Additional flags to pass through to JSL -# JSL_FLAGS_WEB -# JSL_FLAGS -# -# JSSTYLE Path to jsstyle (default: jsstyle) -# -# JSSTYLE_FLAGS Additional flags to pass through to jsstyle -# - -# -# Defaults for the various tools we use. -# -BASH ?= bash -BASHSTYLE ?= tools/bashstyle -CP ?= cp -CSCOPE ?= cscope -CSCOPE_DIRS ?= . -JSL ?= jsl -JSSTYLE ?= jsstyle -MKDIR ?= mkdir -p -MV ?= mv -RESTDOWN_FLAGS ?= -RMTREE ?= rm -rf -JSL_FLAGS ?= --nologo --nosummary - -ifeq ($(shell uname -s),SunOS) - TAR ?= gtar -else - TAR ?= tar -endif - - -# -# Defaults for other fixed values. -# -BUILD = build -DISTCLEAN_FILES += $(BUILD) -DOC_BUILD = $(BUILD)/docs/public - -# -# Configure JSL_FLAGS_{NODE,WEB} based on JSL_CONF_{NODE,WEB}. -# -ifneq ($(origin JSL_CONF_NODE), undefined) - JSL_FLAGS_NODE += --conf=$(JSL_CONF_NODE) -endif - -ifneq ($(origin JSL_CONF_WEB), undefined) - JSL_FLAGS_WEB += --conf=$(JSL_CONF_WEB) -endif - -# -# Targets. For descriptions on what these are supposed to do, see the -# Joyent Engineering Guide. -# - -# -# Instruct make to keep around temporary files. We have rules below that -# automatically update git submodules as needed, but they employ a deps/*/.git -# temporary file. Without this directive, make tries to remove these .git -# directories after the build has completed. -# -.SECONDARY: $($(wildcard deps/*):%=%/.git) - -# -# This rule enables other rules that use files from a git submodule to have -# those files depend on deps/module/.git and have "make" automatically check -# out the submodule as needed. -# -deps/%/.git: - git submodule update --init deps/$* - -# -# These recipes make heavy use of dynamically-created phony targets. The parent -# Makefile defines a list of input files like BASH_FILES. We then say that each -# of these files depends on a fake target called filename.bashchk, and then we -# define a pattern rule for those targets that runs bash in check-syntax-only -# mode. This mechanism has the nice properties that if you specify zero files, -# the rule becomes a noop (unlike a single rule to check all bash files, which -# would invoke bash with zero files), and you can check individual files from -# the command line with "make filename.bashchk". -# -.PHONY: check-bash -check-bash: $(BASH_FILES:%=%.bashchk) $(BASH_FILES:%=%.bashstyle) - -%.bashchk: % - $(BASH) -n $^ - -%.bashstyle: % - $(BASHSTYLE) $^ - -.PHONY: check-jsl check-jsl-node check-jsl-web -check-jsl: check-jsl-node check-jsl-web - -check-jsl-node: $(JSL_FILES_NODE:%=%.jslnodechk) - -check-jsl-web: $(JSL_FILES_WEB:%=%.jslwebchk) - -%.jslnodechk: % $(JSL_EXEC) - $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_NODE) $< - -%.jslwebchk: % $(JSL_EXEC) - $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_WEB) $< - -.PHONY: check-jsstyle -check-jsstyle: $(JSSTYLE_FILES:%=%.jsstylechk) - -%.jsstylechk: % $(JSSTYLE_EXEC) - $(JSSTYLE) $(JSSTYLE_FLAGS) $< - -.PHONY: check -check: check-jsl check-jsstyle check-bash - @echo check ok - -.PHONY: clean -clean:: - -$(RMTREE) $(CLEAN_FILES) - -.PHONY: distclean -distclean:: clean - -$(RMTREE) $(DISTCLEAN_FILES) - -CSCOPE_FILES = cscope.in.out cscope.out cscope.po.out -CLEAN_FILES += $(CSCOPE_FILES) - -.PHONY: xref -xref: cscope.files - $(CSCOPE) -bqR - -.PHONY: cscope.files -cscope.files: - find $(CSCOPE_DIRS) -name '*.c' -o -name '*.h' -o -name '*.cc' \ - -o -name '*.js' -o -name '*.s' -o -name '*.cpp' > $@ - -# -# The "docs" target is complicated because we do several things here: -# -# (1) Use restdown to build HTML and JSON files from each of DOC_FILES. -# -# (2) Copy these files into $(DOC_BUILD) (build/docs/public), which -# functions as a complete copy of the documentation that could be -# mirrored or served over HTTP. -# -# (3) Then copy any directories and media from docs/media into -# $(DOC_BUILD)/media. This allows projects to include their own media, -# including files that will override same-named files provided by -# restdown. -# -# Step (3) is the surprisingly complex part: in order to do this, we need to -# identify the subdirectories in docs/media, recreate them in -# $(DOC_BUILD)/media, then do the same with the files. -# -DOC_MEDIA_DIRS := $(shell find docs/media -type d 2>/dev/null | grep -v "^docs/media$$") -DOC_MEDIA_DIRS := $(DOC_MEDIA_DIRS:docs/media/%=%) -DOC_MEDIA_DIRS_BUILD := $(DOC_MEDIA_DIRS:%=$(DOC_BUILD)/media/%) - -DOC_MEDIA_FILES := $(shell find docs/media -type f 2>/dev/null) -DOC_MEDIA_FILES := $(DOC_MEDIA_FILES:docs/media/%=%) -DOC_MEDIA_FILES_BUILD := $(DOC_MEDIA_FILES:%=$(DOC_BUILD)/media/%) - -# -# Like the other targets, "docs" just depends on the final files we want to -# create in $(DOC_BUILD), leveraging other targets and recipes to define how -# to get there. -# -.PHONY: docs -docs: \ - $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.html) \ - $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.json) \ - $(DOC_MEDIA_FILES_BUILD) - -# -# We keep the intermediate files so that the next build can see whether the -# files in DOC_BUILD are up to date. -# -.PRECIOUS: \ - $(DOC_FILES:%.restdown=docs/%.html) \ - $(DOC_FILES:%.restdown=docs/%json) - -# -# We do clean those intermediate files, as well as all of DOC_BUILD. -# -CLEAN_FILES += \ - $(DOC_BUILD) \ - $(DOC_FILES:%.restdown=docs/%.html) \ - $(DOC_FILES:%.restdown=docs/%.json) - -# -# Before installing the files, we must make sure the directories exist. The | -# syntax tells make that the dependency need only exist, not be up to date. -# Otherwise, it might try to rebuild spuriously because the directory itself -# appears out of date. -# -$(DOC_MEDIA_FILES_BUILD): | $(DOC_MEDIA_DIRS_BUILD) - -$(DOC_BUILD)/%: docs/% | $(DOC_BUILD) - $(CP) $< $@ - -docs/%.json docs/%.html: docs/%.restdown | $(DOC_BUILD) $(RESTDOWN_EXEC) - $(RESTDOWN) $(RESTDOWN_FLAGS) -m $(DOC_BUILD) $< - -$(DOC_BUILD): - $(MKDIR) $@ - -$(DOC_MEDIA_DIRS_BUILD): - $(MKDIR) $@ - -# -# The default "test" target does nothing. This should usually be overridden by -# the parent Makefile. It's included here so we can define "prepush" without -# requiring the repo to define "test". -# -.PHONY: test -test: - -.PHONY: prepush -prepush: check test diff --git a/truebit-implementation/node_modules/extsprintf/README.md b/truebit-implementation/node_modules/extsprintf/README.md deleted file mode 100644 index b22998d6..00000000 --- a/truebit-implementation/node_modules/extsprintf/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# extsprintf: extended POSIX-style sprintf - -Stripped down version of s[n]printf(3c). We make a best effort to throw an -exception when given a format string we don't understand, rather than ignoring -it, so that we won't break existing programs if/when we go implement the rest -of this. - -This implementation currently supports specifying - -* field alignment ('-' flag), -* zero-pad ('0' flag) -* always show numeric sign ('+' flag), -* field width -* conversions for strings, decimal integers, and floats (numbers). -* argument size specifiers. These are all accepted but ignored, since - Javascript has no notion of the physical size of an argument. - -Everything else is currently unsupported, most notably: precision, unsigned -numbers, non-decimal numbers, and characters. - -Besides the usual POSIX conversions, this implementation supports: - -* `%j`: pretty-print a JSON object (using node's "inspect") -* `%r`: pretty-print an Error object - -# Example - -First, install it: - - # npm install extsprintf - -Now, use it: - - var mod_extsprintf = require('extsprintf'); - console.log(mod_extsprintf.sprintf('hello %25s', 'world')); - -outputs: - - hello world - -# Also supported - -**printf**: same args as sprintf, but prints the result to stdout - -**fprintf**: same args as sprintf, preceded by a Node stream. Prints the result -to the given stream. diff --git a/truebit-implementation/node_modules/extsprintf/jsl.node.conf b/truebit-implementation/node_modules/extsprintf/jsl.node.conf deleted file mode 100644 index 03f787ff..00000000 --- a/truebit-implementation/node_modules/extsprintf/jsl.node.conf +++ /dev/null @@ -1,137 +0,0 @@ -# -# Configuration File for JavaScript Lint -# -# This configuration file can be used to lint a collection of scripts, or to enable -# or disable warnings for scripts that are linted via the command line. -# - -### Warnings -# Enable or disable warnings based on requirements. -# Use "+WarningName" to display or "-WarningName" to suppress. -# -+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent -+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity -+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement -+anon_no_return_value # anonymous function does not always return value -+assign_to_function_call # assignment to a function call --block_without_braces # block statement without curly braces -+comma_separated_stmts # multiple statements separated by commas (use semicolons?) -+comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) -+default_not_at_end # the default case is not at the end of the switch statement -+dup_option_explicit # duplicate "option explicit" control comment -+duplicate_case_in_switch # duplicate case in switch statement -+duplicate_formal # duplicate formal argument {name} -+empty_statement # empty statement or extra semicolon -+identifier_hides_another # identifer {name} hides an identifier in a parent scope --inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement -+incorrect_version # Expected /*jsl:content-type*/ control comment. The script was parsed with the wrong version. -+invalid_fallthru # unexpected "fallthru" control comment -+invalid_pass # unexpected "pass" control comment -+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax -+leading_decimal_point # leading decimal point may indicate a number or an object member -+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax -+meaningless_block # meaningless block; curly braces have no impact -+mismatch_ctrl_comments # mismatched control comment; "ignore" and "end" control comments must have a one-to-one correspondence -+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma -+missing_break # missing break statement -+missing_break_for_last_case # missing break statement for last case in switch -+missing_default_case # missing default case in switch statement -+missing_option_explicit # the "option explicit" control comment is missing -+missing_semicolon # missing semicolon -+missing_semicolon_for_lambda # missing semicolon for lambda assignment -+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs -+nested_comment # nested comment -+no_return_value # function {name} does not always return a value -+octal_number # leading zeros make an octal number -+parseint_missing_radix # parseInt missing radix parameter -+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag -+redeclared_var # redeclaration of {name} -+trailing_comma_in_array # extra comma is not recommended in array initializers -+trailing_decimal_point # trailing decimal point may indicate a number or an object member -+undeclared_identifier # undeclared identifier: {name} -+unreachable_code # unreachable code --unreferenced_argument # argument declared but never referenced: {name} --unreferenced_function # function is declared but never referenced: {name} -+unreferenced_variable # variable is declared but never referenced: {name} -+unsupported_version # JavaScript {version} is not supported -+use_of_label # use of label -+useless_assign # useless assignment -+useless_comparison # useless comparison; comparing identical expressions --useless_quotes # the quotation marks are unnecessary -+useless_void # use of the void type may be unnecessary (void is always undefined) -+var_hides_arg # variable {name} hides argument -+want_assign_or_call # expected an assignment or function call -+with_statement # with statement hides undeclared variables; use temporary variable instead - - -### Output format -# Customize the format of the error message. -# __FILE__ indicates current file path -# __FILENAME__ indicates current file name -# __LINE__ indicates current line -# __COL__ indicates current column -# __ERROR__ indicates error message (__ERROR_PREFIX__: __ERROR_MSG__) -# __ERROR_NAME__ indicates error name (used in configuration file) -# __ERROR_PREFIX__ indicates error prefix -# __ERROR_MSG__ indicates error message -# -# For machine-friendly output, the output format can be prefixed with -# "encode:". If specified, all items will be encoded with C-slashes. -# -# Visual Studio syntax (default): -+output-format __FILE__(__LINE__): __ERROR__ -# Alternative syntax: -#+output-format __FILE__:__LINE__: __ERROR__ - - -### Context -# Show the in-line position of the error. -# Use "+context" to display or "-context" to suppress. -# -+context - - -### Control Comments -# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for -# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is -# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason, -# although legacy control comments are enabled by default for backward compatibility. -# --legacy_control_comments - - -### Defining identifiers -# By default, "option explicit" is enabled on a per-file basis. -# To enable this for all files, use "+always_use_option_explicit" --always_use_option_explicit - -# Define certain identifiers of which the lint is not aware. -# (Use this in conjunction with the "undeclared identifier" warning.) -# -# Common uses for webpages might be: -+define __dirname -+define clearInterval -+define clearTimeout -+define console -+define exports -+define global -+define process -+define require -+define setInterval -+define setTimeout -+define Buffer -+define JSON -+define Math - -### JavaScript Version -# To change the default JavaScript version: -#+default-type text/javascript;version=1.5 -#+default-type text/javascript;e4x=1 - -### Files -# Specify which files to lint -# Use "+recurse" to enable recursion (disabled by default). -# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", -# or "+process Folder\Path\*.htm". -# - diff --git a/truebit-implementation/node_modules/extsprintf/lib/extsprintf.js b/truebit-implementation/node_modules/extsprintf/lib/extsprintf.js deleted file mode 100644 index ed883d32..00000000 --- a/truebit-implementation/node_modules/extsprintf/lib/extsprintf.js +++ /dev/null @@ -1,183 +0,0 @@ -/* - * extsprintf.js: extended POSIX-style sprintf - */ - -var mod_assert = require('assert'); -var mod_util = require('util'); - -/* - * Public interface - */ -exports.sprintf = jsSprintf; -exports.printf = jsPrintf; -exports.fprintf = jsFprintf; - -/* - * Stripped down version of s[n]printf(3c). We make a best effort to throw an - * exception when given a format string we don't understand, rather than - * ignoring it, so that we won't break existing programs if/when we go implement - * the rest of this. - * - * This implementation currently supports specifying - * - field alignment ('-' flag), - * - zero-pad ('0' flag) - * - always show numeric sign ('+' flag), - * - field width - * - conversions for strings, decimal integers, and floats (numbers). - * - argument size specifiers. These are all accepted but ignored, since - * Javascript has no notion of the physical size of an argument. - * - * Everything else is currently unsupported, most notably precision, unsigned - * numbers, non-decimal numbers, and characters. - */ -function jsSprintf(fmt) -{ - var regex = [ - '([^%]*)', /* normal text */ - '%', /* start of format */ - '([\'\\-+ #0]*?)', /* flags (optional) */ - '([1-9]\\d*)?', /* width (optional) */ - '(\\.([1-9]\\d*))?', /* precision (optional) */ - '[lhjztL]*?', /* length mods (ignored) */ - '([diouxXfFeEgGaAcCsSp%jr])' /* conversion */ - ].join(''); - - var re = new RegExp(regex); - var args = Array.prototype.slice.call(arguments, 1); - var flags, width, precision, conversion; - var left, pad, sign, arg, match; - var ret = ''; - var argn = 1; - - mod_assert.equal('string', typeof (fmt)); - - while ((match = re.exec(fmt)) !== null) { - ret += match[1]; - fmt = fmt.substring(match[0].length); - - flags = match[2] || ''; - width = match[3] || 0; - precision = match[4] || ''; - conversion = match[6]; - left = false; - sign = false; - pad = ' '; - - if (conversion == '%') { - ret += '%'; - continue; - } - - if (args.length === 0) - throw (new Error('too few args to sprintf')); - - arg = args.shift(); - argn++; - - if (flags.match(/[\' #]/)) - throw (new Error( - 'unsupported flags: ' + flags)); - - if (precision.length > 0) - throw (new Error( - 'non-zero precision not supported')); - - if (flags.match(/-/)) - left = true; - - if (flags.match(/0/)) - pad = '0'; - - if (flags.match(/\+/)) - sign = true; - - switch (conversion) { - case 's': - if (arg === undefined || arg === null) - throw (new Error('argument ' + argn + - ': attempted to print undefined or null ' + - 'as a string')); - ret += doPad(pad, width, left, arg.toString()); - break; - - case 'd': - arg = Math.floor(arg); - /*jsl:fallthru*/ - case 'f': - sign = sign && arg > 0 ? '+' : ''; - ret += sign + doPad(pad, width, left, - arg.toString()); - break; - - case 'x': - ret += doPad(pad, width, left, arg.toString(16)); - break; - - case 'j': /* non-standard */ - if (width === 0) - width = 10; - ret += mod_util.inspect(arg, false, width); - break; - - case 'r': /* non-standard */ - ret += dumpException(arg); - break; - - default: - throw (new Error('unsupported conversion: ' + - conversion)); - } - } - - ret += fmt; - return (ret); -} - -function jsPrintf() { - var args = Array.prototype.slice.call(arguments); - args.unshift(process.stdout); - jsFprintf.apply(null, args); -} - -function jsFprintf(stream) { - var args = Array.prototype.slice.call(arguments, 1); - return (stream.write(jsSprintf.apply(this, args))); -} - -function doPad(chr, width, left, str) -{ - var ret = str; - - while (ret.length < width) { - if (left) - ret += chr; - else - ret = chr + ret; - } - - return (ret); -} - -/* - * This function dumps long stack traces for exceptions having a cause() method. - * See node-verror for an example. - */ -function dumpException(ex) -{ - var ret; - - if (!(ex instanceof Error)) - throw (new Error(jsSprintf('invalid type for %%r: %j', ex))); - - /* Note that V8 prepends "ex.stack" with ex.toString(). */ - ret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack; - - if (ex.cause && typeof (ex.cause) === 'function') { - var cex = ex.cause(); - if (cex) { - ret += '\nCaused by: ' + dumpException(cex); - } - } - - return (ret); -} diff --git a/truebit-implementation/node_modules/extsprintf/package.json b/truebit-implementation/node_modules/extsprintf/package.json deleted file mode 100644 index 78c112fe..00000000 --- a/truebit-implementation/node_modules/extsprintf/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "_from": "extsprintf@1.3.0", - "_id": "extsprintf@1.3.0", - "_inBundle": false, - "_integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "_location": "/extsprintf", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "extsprintf@1.3.0", - "name": "extsprintf", - "escapedName": "extsprintf", - "rawSpec": "1.3.0", - "saveSpec": null, - "fetchSpec": "1.3.0" - }, - "_requiredBy": [ - "/jsprim", - "/verror" - ], - "_resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "_shasum": "96918440e3041a7a414f8c52e3c574eb3c3e1e05", - "_spec": "extsprintf@1.3.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/jsprim", - "bugs": { - "url": "https://github.com/davepacheco/node-extsprintf/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "extended POSIX-style sprintf", - "engines": [ - "node >=0.6.0" - ], - "homepage": "https://github.com/davepacheco/node-extsprintf#readme", - "license": "MIT", - "main": "./lib/extsprintf.js", - "name": "extsprintf", - "repository": { - "type": "git", - "url": "git://github.com/davepacheco/node-extsprintf.git" - }, - "version": "1.3.0" -} diff --git a/truebit-implementation/node_modules/fast-deep-equal/LICENSE b/truebit-implementation/node_modules/fast-deep-equal/LICENSE deleted file mode 100644 index 7f154356..00000000 --- a/truebit-implementation/node_modules/fast-deep-equal/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/fast-deep-equal/README.md b/truebit-implementation/node_modules/fast-deep-equal/README.md deleted file mode 100644 index 326bb2a5..00000000 --- a/truebit-implementation/node_modules/fast-deep-equal/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# fast-deep-equal -The fastest deep equal - -[![Build Status](https://travis-ci.org/epoberezkin/fast-deep-equal.svg?branch=master)](https://travis-ci.org/epoberezkin/fast-deep-equal) -[![npm version](https://badge.fury.io/js/fast-deep-equal.svg)](http://badge.fury.io/js/fast-deep-equal) -[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/fast-deep-equal/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/fast-deep-equal?branch=master) - - -## Install - -```bash -npm install fast-deep-equal -``` - - -## Features - -- ES5 compatible -- works in node.js (0.10+) and browsers (IE9+) -- checks equality of Date and RegExp objects by value. - - -## Usage - -```javascript -var equal = require('fast-deep-equal'); -console.log(equal({foo: 'bar'}, {foo: 'bar'})); // true -``` - - -## Performance benchmark - -Node.js v9.11.1: - -``` -fast-deep-equal x 226,960 ops/sec ±1.55% (86 runs sampled) -nano-equal x 218,210 ops/sec ±0.79% (89 runs sampled) -shallow-equal-fuzzy x 206,762 ops/sec ±0.84% (88 runs sampled) -underscore.isEqual x 128,668 ops/sec ±0.75% (91 runs sampled) -lodash.isEqual x 44,895 ops/sec ±0.67% (85 runs sampled) -deep-equal x 51,616 ops/sec ±0.96% (90 runs sampled) -deep-eql x 28,218 ops/sec ±0.42% (85 runs sampled) -assert.deepStrictEqual x 1,777 ops/sec ±1.05% (86 runs sampled) -ramda.equals x 13,466 ops/sec ±0.82% (86 runs sampled) -The fastest is fast-deep-equal -``` - -To run benchmark (requires node.js 6+): - -```bash -npm install -node benchmark -``` - - -## License - -[MIT](https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE) diff --git a/truebit-implementation/node_modules/fast-deep-equal/index.d.ts b/truebit-implementation/node_modules/fast-deep-equal/index.d.ts deleted file mode 100644 index 3c042caa..00000000 --- a/truebit-implementation/node_modules/fast-deep-equal/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'fast-deep-equal' { - const equal: (a: any, b: any) => boolean; - export = equal; -} diff --git a/truebit-implementation/node_modules/fast-deep-equal/index.js b/truebit-implementation/node_modules/fast-deep-equal/index.js deleted file mode 100644 index 27264f5b..00000000 --- a/truebit-implementation/node_modules/fast-deep-equal/index.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -var isArray = Array.isArray; -var keyList = Object.keys; -var hasProp = Object.prototype.hasOwnProperty; - -module.exports = function equal(a, b) { - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - var arrA = isArray(a) - , arrB = isArray(b) - , i - , length - , key; - - if (arrA && arrB) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - if (arrA != arrB) return false; - - var dateA = a instanceof Date - , dateB = b instanceof Date; - if (dateA != dateB) return false; - if (dateA && dateB) return a.getTime() == b.getTime(); - - var regexpA = a instanceof RegExp - , regexpB = b instanceof RegExp; - if (regexpA != regexpB) return false; - if (regexpA && regexpB) return a.toString() == b.toString(); - - var keys = keyList(a); - length = keys.length; - - if (length !== keyList(b).length) - return false; - - for (i = length; i-- !== 0;) - if (!hasProp.call(b, keys[i])) return false; - - for (i = length; i-- !== 0;) { - key = keys[i]; - if (!equal(a[key], b[key])) return false; - } - - return true; - } - - return a!==a && b!==b; -}; diff --git a/truebit-implementation/node_modules/fast-deep-equal/package.json b/truebit-implementation/node_modules/fast-deep-equal/package.json deleted file mode 100644 index cad86eeb..00000000 --- a/truebit-implementation/node_modules/fast-deep-equal/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_from": "fast-deep-equal@^2.0.1", - "_id": "fast-deep-equal@2.0.1", - "_inBundle": false, - "_integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "_location": "/fast-deep-equal", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fast-deep-equal@^2.0.1", - "name": "fast-deep-equal", - "escapedName": "fast-deep-equal", - "rawSpec": "^2.0.1", - "saveSpec": null, - "fetchSpec": "^2.0.1" - }, - "_requiredBy": [ - "/ajv" - ], - "_resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "_shasum": "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49", - "_spec": "fast-deep-equal@^2.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ajv", - "author": { - "name": "Evgeny Poberezkin" - }, - "bugs": { - "url": "https://github.com/epoberezkin/fast-deep-equal/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Fast deep equal", - "devDependencies": { - "benchmark": "^2.1.4", - "coveralls": "^2.13.1", - "deep-eql": "latest", - "deep-equal": "latest", - "eslint": "^4.0.0", - "lodash": "latest", - "mocha": "^3.4.2", - "nano-equal": "latest", - "nyc": "^11.0.2", - "pre-commit": "^1.2.2", - "ramda": "latest", - "shallow-equal-fuzzy": "latest", - "typescript": "^2.6.1", - "underscore": "latest" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "homepage": "https://github.com/epoberezkin/fast-deep-equal#readme", - "keywords": [ - "fast", - "equal", - "deep-equal" - ], - "license": "MIT", - "main": "index.js", - "name": "fast-deep-equal", - "nyc": { - "exclude": [ - "**/spec/**", - "node_modules" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "repository": { - "type": "git", - "url": "git+https://github.com/epoberezkin/fast-deep-equal.git" - }, - "scripts": { - "eslint": "eslint *.js benchmark spec", - "test": "npm run eslint && npm run test-ts && npm run test-cov", - "test-cov": "nyc npm run test-spec", - "test-spec": "mocha spec/*.spec.js -R spec", - "test-ts": "tsc --target ES5 --noImplicitAny index.d.ts" - }, - "types": "index.d.ts", - "version": "2.0.1" -} diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/.eslintrc.yml b/truebit-implementation/node_modules/fast-json-stable-stringify/.eslintrc.yml deleted file mode 100644 index 1c77b0d4..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/.eslintrc.yml +++ /dev/null @@ -1,26 +0,0 @@ -extends: eslint:recommended -env: - node: true - browser: true -rules: - block-scoped-var: 2 - callback-return: 2 - dot-notation: 2 - indent: 2 - linebreak-style: [2, unix] - new-cap: 2 - no-console: [2, allow: [warn, error]] - no-else-return: 2 - no-eq-null: 2 - no-fallthrough: 2 - no-invalid-this: 2 - no-return-assign: 2 - no-shadow: 1 - no-trailing-spaces: 2 - no-use-before-define: [2, nofunc] - quotes: [2, single, avoid-escape] - semi: [2, always] - strict: [2, global] - valid-jsdoc: [2, requireReturn: false] - no-control-regex: 0 - no-useless-escape: 2 diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/.npmignore b/truebit-implementation/node_modules/fast-json-stable-stringify/.npmignore deleted file mode 100644 index 899d7360..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -.nyc_output/ -coverage/ -.DS_Store diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/.travis.yml b/truebit-implementation/node_modules/fast-json-stable-stringify/.travis.yml deleted file mode 100644 index 7ddce74b..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "4" - - "6" - - "7" - - "8" -after_script: - - coveralls < coverage/lcov.info diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/LICENSE b/truebit-implementation/node_modules/fast-json-stable-stringify/LICENSE deleted file mode 100644 index ee27ba4b..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/README.md b/truebit-implementation/node_modules/fast-json-stable-stringify/README.md deleted file mode 100644 index 0f43b4a7..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# fast-json-stable-stringify - -Deterministic `JSON.stringify()` - a faster version of [@substack](https://github.com/substack)'s json-stable-strigify without [jsonify](https://github.com/substack/jsonify). - -You can also pass in a custom comparison function. - -[![Build Status](https://travis-ci.org/epoberezkin/fast-json-stable-stringify.svg?branch=master)](https://travis-ci.org/epoberezkin/fast-json-stable-stringify) -[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/fast-json-stable-stringify/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/fast-json-stable-stringify?branch=master) - -# example - -``` js -var stringify = require('fast-json-stable-stringify'); -var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; -console.log(stringify(obj)); -``` - -output: - -``` -{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8} -``` - - -# methods - -``` js -var stringify = require('fast-json-stable-stringify') -``` - -## var str = stringify(obj, opts) - -Return a deterministic stringified string `str` from the object `obj`. - - -## options - -### cmp - -If `opts` is given, you can supply an `opts.cmp` to have a custom comparison -function for object keys. Your function `opts.cmp` is called with these -parameters: - -``` js -opts.cmp({ key: akey, value: avalue }, { key: bkey, value: bvalue }) -``` - -For example, to sort on the object key names in reverse order you could write: - -``` js -var stringify = require('fast-json-stable-stringify'); - -var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; -var s = stringify(obj, function (a, b) { - return a.key < b.key ? 1 : -1; -}); -console.log(s); -``` - -which results in the output string: - -``` -{"c":8,"b":[{"z":6,"y":5,"x":4},7],"a":3} -``` - -Or if you wanted to sort on the object values in reverse order, you could write: - -``` -var stringify = require('fast-json-stable-stringify'); - -var obj = { d: 6, c: 5, b: [{z:3,y:2,x:1},9], a: 10 }; -var s = stringify(obj, function (a, b) { - return a.value < b.value ? 1 : -1; -}); -console.log(s); -``` - -which outputs: - -``` -{"d":6,"c":5,"b":[{"z":3,"y":2,"x":1},9],"a":10} -``` - -### cycles - -Pass `true` in `opts.cycles` to stringify circular property as `__cycle__` - the result will not be a valid JSON string in this case. - -TypeError will be thrown in case of circular object without this option. - - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install fast-json-stable-stringify -``` - - -# benchmark - -To run benchmark (requires Node.js 6+): -``` -node benchmark -``` - -Results: -``` -fast-json-stable-stringify x 17,189 ops/sec ±1.43% (83 runs sampled) -json-stable-stringify x 13,634 ops/sec ±1.39% (85 runs sampled) -fast-stable-stringify x 20,212 ops/sec ±1.20% (84 runs sampled) -faster-stable-stringify x 15,549 ops/sec ±1.12% (84 runs sampled) -The fastest is fast-stable-stringify -``` - - -# license - -[MIT](https://github.com/epoberezkin/fast-json-stable-stringify/blob/master/LICENSE) diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/benchmark/index.js b/truebit-implementation/node_modules/fast-json-stable-stringify/benchmark/index.js deleted file mode 100644 index e725f9fc..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/benchmark/index.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -const Benchmark = require('benchmark'); -const suite = new Benchmark.Suite; -const testData = require('./test.json'); - - -const stringifyPackages = { - // 'JSON.stringify': JSON.stringify, - 'fast-json-stable-stringify': require('../index'), - 'json-stable-stringify': true, - 'fast-stable-stringify': true, - 'faster-stable-stringify': true -}; - - -for (const name in stringifyPackages) { - let func = stringifyPackages[name]; - if (func === true) func = require(name); - - suite.add(name, function() { - func(testData); - }); -} - -suite - .on('cycle', (event) => console.log(String(event.target))) - .on('complete', function () { - console.log('The fastest is ' + this.filter('fastest').map('name')); - }) - .run({async: true}); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/benchmark/test.json b/truebit-implementation/node_modules/fast-json-stable-stringify/benchmark/test.json deleted file mode 100644 index c9118c11..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/benchmark/test.json +++ /dev/null @@ -1,137 +0,0 @@ -[ - { - "_id": "59ef4a83ee8364808d761beb", - "index": 0, - "guid": "e50ffae9-7128-4148-9ee5-40c3fc523c5d", - "isActive": false, - "balance": "$2,341.81", - "picture": "http://placehold.it/32x32", - "age": 28, - "eyeColor": "brown", - "name": "Carey Savage", - "gender": "female", - "company": "VERAQ", - "email": "careysavage@veraq.com", - "phone": "+1 (897) 574-3014", - "address": "458 Willow Street, Henrietta, California, 7234", - "about": "Nisi reprehenderit nulla ad officia pariatur non dolore laboris irure cupidatat laborum. Minim eu ex Lorem adipisicing exercitation irure minim sunt est enim mollit incididunt voluptate nulla. Ut mollit anim reprehenderit et aliqua ex esse aliquip. Aute sit duis deserunt do incididunt consequat minim qui dolor commodo deserunt et voluptate.\r\n", - "registered": "2014-05-21T01:56:51 -01:00", - "latitude": 63.89502, - "longitude": 62.369807, - "tags": [ - "nostrud", - "nisi", - "consectetur", - "ullamco", - "cupidatat", - "culpa", - "commodo" - ], - "friends": [ - { - "id": 0, - "name": "Henry Walls" - }, - { - "id": 1, - "name": "Janice Baker" - }, - { - "id": 2, - "name": "Russell Bush" - } - ], - "greeting": "Hello, Carey Savage! You have 4 unread messages.", - "favoriteFruit": "banana" - }, - { - "_id": "59ef4a83ff5774a691454e89", - "index": 1, - "guid": "2bee9efc-4095-4c2e-87ef-d08c8054c89d", - "isActive": true, - "balance": "$1,618.15", - "picture": "http://placehold.it/32x32", - "age": 35, - "eyeColor": "blue", - "name": "Elinor Pearson", - "gender": "female", - "company": "FLEXIGEN", - "email": "elinorpearson@flexigen.com", - "phone": "+1 (923) 548-3751", - "address": "600 Bayview Avenue, Draper, Montana, 3088", - "about": "Mollit commodo ea sit Lorem velit. Irure anim esse Lorem sint quis officia ut. Aliqua nisi dolore in aute deserunt mollit ex ea in mollit.\r\n", - "registered": "2017-04-22T07:58:41 -01:00", - "latitude": -87.824919, - "longitude": 69.538927, - "tags": [ - "fugiat", - "labore", - "proident", - "quis", - "eiusmod", - "qui", - "est" - ], - "friends": [ - { - "id": 0, - "name": "Massey Wagner" - }, - { - "id": 1, - "name": "Marcella Ferrell" - }, - { - "id": 2, - "name": "Evans Mckee" - } - ], - "greeting": "Hello, Elinor Pearson! You have 3 unread messages.", - "favoriteFruit": "strawberry" - }, - { - "_id": "59ef4a839ec8a4be4430b36b", - "index": 2, - "guid": "ddd6e8c0-95bd-416d-8b46-a768d6363809", - "isActive": false, - "balance": "$2,046.95", - "picture": "http://placehold.it/32x32", - "age": 40, - "eyeColor": "green", - "name": "Irwin Davidson", - "gender": "male", - "company": "DANJA", - "email": "irwindavidson@danja.com", - "phone": "+1 (883) 537-2041", - "address": "439 Cook Street, Chapin, Kentucky, 7398", - "about": "Irure velit non commodo aliqua exercitation ut nostrud minim magna. Dolor ad ad ut irure eu. Non pariatur dolor eiusmod ipsum do et exercitation cillum. Et amet laboris minim eiusmod ullamco magna ea reprehenderit proident sunt.\r\n", - "registered": "2016-09-01T07:49:08 -01:00", - "latitude": -49.803812, - "longitude": 104.93279, - "tags": [ - "consequat", - "enim", - "quis", - "magna", - "est", - "culpa", - "tempor" - ], - "friends": [ - { - "id": 0, - "name": "Ruth Hansen" - }, - { - "id": 1, - "name": "Kathrine Austin" - }, - { - "id": 2, - "name": "Rivera Munoz" - } - ], - "greeting": "Hello, Irwin Davidson! You have 2 unread messages.", - "favoriteFruit": "banana" - } -] diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/example/key_cmp.js b/truebit-implementation/node_modules/fast-json-stable-stringify/example/key_cmp.js deleted file mode 100644 index d5f66752..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/example/key_cmp.js +++ /dev/null @@ -1,7 +0,0 @@ -var stringify = require('../'); - -var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; -var s = stringify(obj, function (a, b) { - return a.key < b.key ? 1 : -1; -}); -console.log(s); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/example/nested.js b/truebit-implementation/node_modules/fast-json-stable-stringify/example/nested.js deleted file mode 100644 index 9a672fc6..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/example/nested.js +++ /dev/null @@ -1,3 +0,0 @@ -var stringify = require('../'); -var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; -console.log(stringify(obj)); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/example/str.js b/truebit-implementation/node_modules/fast-json-stable-stringify/example/str.js deleted file mode 100644 index 9b4b3cd2..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/example/str.js +++ /dev/null @@ -1,3 +0,0 @@ -var stringify = require('../'); -var obj = { c: 6, b: [4,5], a: 3 }; -console.log(stringify(obj)); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/example/value_cmp.js b/truebit-implementation/node_modules/fast-json-stable-stringify/example/value_cmp.js deleted file mode 100644 index 09f1c5f7..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/example/value_cmp.js +++ /dev/null @@ -1,7 +0,0 @@ -var stringify = require('../'); - -var obj = { d: 6, c: 5, b: [{z:3,y:2,x:1},9], a: 10 }; -var s = stringify(obj, function (a, b) { - return a.value < b.value ? 1 : -1; -}); -console.log(s); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/index.js b/truebit-implementation/node_modules/fast-json-stable-stringify/index.js deleted file mode 100644 index c44e6a41..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/index.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; - -module.exports = function (data, opts) { - if (!opts) opts = {}; - if (typeof opts === 'function') opts = { cmp: opts }; - var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false; - - var cmp = opts.cmp && (function (f) { - return function (node) { - return function (a, b) { - var aobj = { key: a, value: node[a] }; - var bobj = { key: b, value: node[b] }; - return f(aobj, bobj); - }; - }; - })(opts.cmp); - - var seen = []; - return (function stringify (node) { - if (node && node.toJSON && typeof node.toJSON === 'function') { - node = node.toJSON(); - } - - if (node === undefined) return; - if (typeof node == 'number') return isFinite(node) ? '' + node : 'null'; - if (typeof node !== 'object') return JSON.stringify(node); - - var i, out; - if (Array.isArray(node)) { - out = '['; - for (i = 0; i < node.length; i++) { - if (i) out += ','; - out += stringify(node[i]) || 'null'; - } - return out + ']'; - } - - if (node === null) return 'null'; - - if (seen.indexOf(node) !== -1) { - if (cycles) return JSON.stringify('__cycle__'); - throw new TypeError('Converting circular structure to JSON'); - } - - var seenIndex = seen.push(node) - 1; - var keys = Object.keys(node).sort(cmp && cmp(node)); - out = ''; - for (i = 0; i < keys.length; i++) { - var key = keys[i]; - var value = stringify(node[key]); - - if (!value) continue; - if (out) out += ','; - out += JSON.stringify(key) + ':' + value; - } - seen.splice(seenIndex, 1); - return '{' + out + '}'; - })(data); -}; diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/package.json b/truebit-implementation/node_modules/fast-json-stable-stringify/package.json deleted file mode 100644 index 2d53da16..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "fast-json-stable-stringify@^2.0.0", - "_id": "fast-json-stable-stringify@2.0.0", - "_inBundle": false, - "_integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "_location": "/fast-json-stable-stringify", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fast-json-stable-stringify@^2.0.0", - "name": "fast-json-stable-stringify", - "escapedName": "fast-json-stable-stringify", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/ajv" - ], - "_resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "_shasum": "d5142c0caee6b1189f87d3a76111064f86c8bbf2", - "_spec": "fast-json-stable-stringify@^2.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ajv", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/epoberezkin/fast-json-stable-stringify/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "deterministic `JSON.stringify()` - a faster version of substack's json-stable-strigify without jsonify", - "devDependencies": { - "benchmark": "^2.1.4", - "coveralls": "^3.0.0", - "eslint": "^4.9.0", - "fast-stable-stringify": "latest", - "faster-stable-stringify": "latest", - "json-stable-stringify": "latest", - "nyc": "^11.2.1", - "pre-commit": "^1.2.2", - "tape": "~1.0.4" - }, - "homepage": "https://github.com/epoberezkin/fast-json-stable-stringify", - "keywords": [ - "json", - "stringify", - "deterministic", - "hash", - "stable" - ], - "license": "MIT", - "main": "index.js", - "name": "fast-json-stable-stringify", - "nyc": { - "exclude": [ - "test", - "node_modules" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/epoberezkin/fast-json-stable-stringify.git" - }, - "scripts": { - "eslint": "eslint index.js test", - "test": "npm run eslint && nyc npm run test-spec", - "test-spec": "tape test/*.js" - }, - "version": "2.0.0" -} diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/test/cmp.js b/truebit-implementation/node_modules/fast-json-stable-stringify/test/cmp.js deleted file mode 100644 index 4efd6b59..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/test/cmp.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var test = require('tape'); -var stringify = require('../'); - -test('custom comparison function', function (t) { - t.plan(1); - var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; - var s = stringify(obj, function (a, b) { - return a.key < b.key ? 1 : -1; - }); - t.equal(s, '{"c":8,"b":[{"z":6,"y":5,"x":4},7],"a":3}'); -}); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/test/nested.js b/truebit-implementation/node_modules/fast-json-stable-stringify/test/nested.js deleted file mode 100644 index 167a358e..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/test/nested.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var test = require('tape'); -var stringify = require('../'); - -test('nested', function (t) { - t.plan(1); - var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; - t.equal(stringify(obj), '{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8}'); -}); - -test('cyclic (default)', function (t) { - t.plan(1); - var one = { a: 1 }; - var two = { a: 2, one: one }; - one.two = two; - try { - stringify(one); - } catch (ex) { - t.equal(ex.toString(), 'TypeError: Converting circular structure to JSON'); - } -}); - -test('cyclic (specifically allowed)', function (t) { - t.plan(1); - var one = { a: 1 }; - var two = { a: 2, one: one }; - one.two = two; - t.equal(stringify(one, {cycles:true}), '{"a":1,"two":{"a":2,"one":"__cycle__"}}'); -}); - -test('repeated non-cyclic value', function(t) { - t.plan(1); - var one = { x: 1 }; - var two = { a: one, b: one }; - t.equal(stringify(two), '{"a":{"x":1},"b":{"x":1}}'); -}); - -test('acyclic but with reused obj-property pointers', function (t) { - t.plan(1); - var x = { a: 1 }; - var y = { b: x, c: x }; - t.equal(stringify(y), '{"b":{"a":1},"c":{"a":1}}'); -}); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/test/str.js b/truebit-implementation/node_modules/fast-json-stable-stringify/test/str.js deleted file mode 100644 index 99a9ade1..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/test/str.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -var test = require('tape'); -var stringify = require('../'); - -test('simple object', function (t) { - t.plan(1); - var obj = { c: 6, b: [4,5], a: 3, z: null }; - t.equal(stringify(obj), '{"a":3,"b":[4,5],"c":6,"z":null}'); -}); - -test('object with undefined', function (t) { - t.plan(1); - var obj = { a: 3, z: undefined }; - t.equal(stringify(obj), '{"a":3}'); -}); - -test('object with null', function (t) { - t.plan(1); - var obj = { a: 3, z: null }; - t.equal(stringify(obj), '{"a":3,"z":null}'); -}); - -test('object with NaN and Infinity', function (t) { - t.plan(1); - var obj = { a: 3, b: NaN, c: Infinity }; - t.equal(stringify(obj), '{"a":3,"b":null,"c":null}'); -}); - -test('array with undefined', function (t) { - t.plan(1); - var obj = [4, undefined, 6]; - t.equal(stringify(obj), '[4,null,6]'); -}); - -test('object with empty string', function (t) { - t.plan(1); - var obj = { a: 3, z: '' }; - t.equal(stringify(obj), '{"a":3,"z":""}'); -}); - -test('array with empty string', function (t) { - t.plan(1); - var obj = [4, '', 6]; - t.equal(stringify(obj), '[4,"",6]'); -}); diff --git a/truebit-implementation/node_modules/fast-json-stable-stringify/test/to-json.js b/truebit-implementation/node_modules/fast-json-stable-stringify/test/to-json.js deleted file mode 100644 index 2fb2cfa3..00000000 --- a/truebit-implementation/node_modules/fast-json-stable-stringify/test/to-json.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var test = require('tape'); -var stringify = require('../'); - -test('toJSON function', function (t) { - t.plan(1); - var obj = { one: 1, two: 2, toJSON: function() { return { one: 1 }; } }; - t.equal(stringify(obj), '{"one":1}' ); -}); - -test('toJSON returns string', function (t) { - t.plan(1); - var obj = { one: 1, two: 2, toJSON: function() { return 'one'; } }; - t.equal(stringify(obj), '"one"'); -}); - -test('toJSON returns array', function (t) { - t.plan(1); - var obj = { one: 1, two: 2, toJSON: function() { return ['one']; } }; - t.equal(stringify(obj), '["one"]'); -}); diff --git a/truebit-implementation/node_modules/fd-slicer/.npmignore b/truebit-implementation/node_modules/fd-slicer/.npmignore deleted file mode 100644 index ccc29308..00000000 --- a/truebit-implementation/node_modules/fd-slicer/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/coverage -/node_modules diff --git a/truebit-implementation/node_modules/fd-slicer/.travis.yml b/truebit-implementation/node_modules/fd-slicer/.travis.yml deleted file mode 100644 index 77b72028..00000000 --- a/truebit-implementation/node_modules/fd-slicer/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -node_js: - - "0.10" -script: - - "npm run test-travis" -after_script: - - "npm install coveralls@2 && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls" diff --git a/truebit-implementation/node_modules/fd-slicer/CHANGELOG.md b/truebit-implementation/node_modules/fd-slicer/CHANGELOG.md deleted file mode 100644 index 783042f8..00000000 --- a/truebit-implementation/node_modules/fd-slicer/CHANGELOG.md +++ /dev/null @@ -1,49 +0,0 @@ -### 1.0.1 - - * use `setImmediate` instead of `nextTick` - -### 1.0.0 - - * `new FdSlicer(fd, options)` must now be `fdSlicer.createFromFd(fd, options)` - * fix behavior when `end` is 0. - * fix `createWriteStream` when using `createFromBuffer` - -### 0.4.0 - - * add ability to create an FdSlicer instance from a Buffer - -### 0.3.2 - - * fix write stream and read stream destroy behavior - -### 0.3.1 - - * write stream: fix end option behavior - -### 0.3.0 - - * write stream emits 'progress' events - * write stream supports 'end' option which causes the stream to emit an error - if a maximum size is exceeded - * improve documentation - -### 0.2.1 - - * Update pend dependency to latest bugfix version. - -### 0.2.0 - - * Add read and write functions - -### 0.1.0 - - * Add `autoClose` option and `ref()` and `unref()`. - -### 0.0.2 - - * Add API documentation - * read stream: create buffer at last possible moment - -### 0.0.1 - - * Initial release diff --git a/truebit-implementation/node_modules/fd-slicer/LICENSE b/truebit-implementation/node_modules/fd-slicer/LICENSE deleted file mode 100644 index e57596d2..00000000 --- a/truebit-implementation/node_modules/fd-slicer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2014 Andrew Kelley - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation files -(the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/fd-slicer/README.md b/truebit-implementation/node_modules/fd-slicer/README.md deleted file mode 100644 index ad7f0ec7..00000000 --- a/truebit-implementation/node_modules/fd-slicer/README.md +++ /dev/null @@ -1,199 +0,0 @@ -# fd-slicer - -[![Build Status](https://travis-ci.org/andrewrk/node-fd-slicer.svg?branch=master)](https://travis-ci.org/andrewrk/node-fd-slicer) - -Safe `fs.ReadStream` and `fs.WriteStream` using the same fd. - -Let's say that you want to perform a parallel upload of a file to a remote -server. To do this, we want to create multiple read streams. The first thing -you might think of is to use the `{start: 0, end: 0}` API of -`fs.createReadStream`. This gives you two choices: - - 0. Use the same file descriptor for all `fs.ReadStream` objects. - 0. Open the file multiple times, resulting in a separate file descriptor - for each read stream. - -Neither of these are acceptable options. The first one is a severe bug, -because the API docs for `fs.write` state: - -> Note that it is unsafe to use `fs.write` multiple times on the same file -> without waiting for the callback. For this scenario, `fs.createWriteStream` -> is strongly recommended. - -`fs.createWriteStream` will solve the problem if you only create one of them -for the file descriptor, but it will exhibit this unsafety if you create -multiple write streams per file descriptor. - -The second option suffers from a race condition. For each additional time the -file is opened after the first, it is possible that the file is modified. So -in our parallel uploading example, we might upload a corrupt file that never -existed on the client's computer. - -This module solves this problem by providing `createReadStream` and -`createWriteStream` that operate on a shared file descriptor and provides -the convenient stream API while still allowing slicing and dicing. - -This module also gives you some additional power that the builtin -`fs.createWriteStream` do not give you. These features are: - - * Emitting a 'progress' event on write. - * Ability to set a maximum size and emit an error if this size is exceeded. - * Ability to create an `FdSlicer` instance from a `Buffer`. This enables you - to provide API for handling files as well as buffers using the same API. - -## Usage - -```js -var fdSlicer = require('fd-slicer'); -var fs = require('fs'); - -fs.open("file.txt", 'r', function(err, fd) { - if (err) throw err; - var slicer = fdSlicer.createFromFd(fd); - var firstPart = slicer.createReadStream({start: 0, end: 100}); - var secondPart = slicer.createReadStream({start: 100}); - var firstOut = fs.createWriteStream("first.txt"); - var secondOut = fs.createWriteStream("second.txt"); - firstPart.pipe(firstOut); - secondPart.pipe(secondOut); -}); -``` - -You can also create from a buffer: - -```js -var fdSlicer = require('fd-slicer'); -var slicer = FdSlicer.createFromBuffer(someBuffer); -var firstPart = slicer.createReadStream({start: 0, end: 100}); -var secondPart = slicer.createReadStream({start: 100}); -var firstOut = fs.createWriteStream("first.txt"); -var secondOut = fs.createWriteStream("second.txt"); -firstPart.pipe(firstOut); -secondPart.pipe(secondOut); -``` - -## API Documentation - -### fdSlicer.createFromFd(fd, [options]) - -```js -var fdSlicer = require('fd-slicer'); -fs.open("file.txt", 'r', function(err, fd) { - if (err) throw err; - var slicer = fdSlicer.createFromFd(fd); - // ... -}); -``` - -Make sure `fd` is a properly initialized file descriptor. If you want to -use `createReadStream` make sure you open it for reading and if you want -to use `createWriteStream` make sure you open it for writing. - -`options` is an optional object which can contain: - - * `autoClose` - if set to `true`, the file descriptor will be automatically - closed once the last stream that references it is closed. Defaults to - `false`. `ref()` and `unref()` can be used to increase or decrease the - reference count, respectively. - -### fdSlicer.createFromBuffer(buffer, [options]) - -```js -var fdSlicer = require('fd-slicer'); -var slicer = fdSlicer.createFromBuffer(someBuffer); -// ... -``` - -`options` is an optional object which can contain: - - * `maxChunkSize` - A `Number` of bytes. see `createReadStream()`. - If falsey, defaults to unlimited. - -#### Properties - -##### fd - -The file descriptor passed in. `undefined` if created from a buffer. - -#### Methods - -##### createReadStream(options) - -Available `options`: - - * `start` - Number. The offset into the file to start reading from. Defaults - to 0. - * `end` - Number. Exclusive upper bound offset into the file to stop reading - from. - * `highWaterMark` - Number. The maximum number of bytes to store in the - internal buffer before ceasing to read from the underlying resource. - Defaults to 16 KB. - * `encoding` - String. If specified, then buffers will be decoded to strings - using the specified encoding. Defaults to `null`. - -The ReadableStream that this returns has these additional methods: - - * `destroy(err)` - stop streaming. `err` is optional and is the error that - will be emitted in order to cause the streaming to stop. Defaults to - `new Error("stream destroyed")`. - -If `maxChunkSize` was specified (see `createFromBuffer()`), the read stream -will provide chunks of at most that size. Normally, the read stream provides -the entire range requested in a single chunk, but this can cause performance -problems in some circumstances. -See [thejoshwolfe/yauzl#87](https://github.com/thejoshwolfe/yauzl/issues/87). - -##### createWriteStream(options) - -Available `options`: - - * `start` - Number. The offset into the file to start writing to. Defaults to - 0. - * `end` - Number. Exclusive upper bound offset into the file. If this offset - is reached, the write stream will emit an 'error' event and stop functioning. - In this situation, `err.code === 'ETOOBIG'`. Defaults to `Infinity`. - * `highWaterMark` - Number. Buffer level when `write()` starts returning - false. Defaults to 16KB. - * `decodeStrings` - Boolean. Whether or not to decode strings into Buffers - before passing them to` _write()`. Defaults to `true`. - -The WritableStream that this returns has these additional methods: - - * `destroy()` - stop streaming - -And these additional properties: - - * `bytesWritten` - number of bytes written to the stream - -And these additional events: - - * 'progress' - emitted when `bytesWritten` changes. - -##### read(buffer, offset, length, position, callback) - -Equivalent to `fs.read`, but with concurrency protection. -`callback` must be defined. - -##### write(buffer, offset, length, position, callback) - -Equivalent to `fs.write`, but with concurrency protection. -`callback` must be defined. - -##### ref() - -Increase the `autoClose` reference count by 1. - -##### unref() - -Decrease the `autoClose` reference count by 1. - -#### Events - -##### 'error' - -Emitted if `fs.close` returns an error when auto closing. - -##### 'close' - -Emitted when fd-slicer closes the file descriptor due to `autoClose`. Never -emitted if created from a buffer. diff --git a/truebit-implementation/node_modules/fd-slicer/index.js b/truebit-implementation/node_modules/fd-slicer/index.js deleted file mode 100644 index 65d32a3e..00000000 --- a/truebit-implementation/node_modules/fd-slicer/index.js +++ /dev/null @@ -1,296 +0,0 @@ -var fs = require('fs'); -var util = require('util'); -var stream = require('stream'); -var Readable = stream.Readable; -var Writable = stream.Writable; -var PassThrough = stream.PassThrough; -var Pend = require('pend'); -var EventEmitter = require('events').EventEmitter; - -exports.createFromBuffer = createFromBuffer; -exports.createFromFd = createFromFd; -exports.BufferSlicer = BufferSlicer; -exports.FdSlicer = FdSlicer; - -util.inherits(FdSlicer, EventEmitter); -function FdSlicer(fd, options) { - options = options || {}; - EventEmitter.call(this); - - this.fd = fd; - this.pend = new Pend(); - this.pend.max = 1; - this.refCount = 0; - this.autoClose = !!options.autoClose; -} - -FdSlicer.prototype.read = function(buffer, offset, length, position, callback) { - var self = this; - self.pend.go(function(cb) { - fs.read(self.fd, buffer, offset, length, position, function(err, bytesRead, buffer) { - cb(); - callback(err, bytesRead, buffer); - }); - }); -}; - -FdSlicer.prototype.write = function(buffer, offset, length, position, callback) { - var self = this; - self.pend.go(function(cb) { - fs.write(self.fd, buffer, offset, length, position, function(err, written, buffer) { - cb(); - callback(err, written, buffer); - }); - }); -}; - -FdSlicer.prototype.createReadStream = function(options) { - return new ReadStream(this, options); -}; - -FdSlicer.prototype.createWriteStream = function(options) { - return new WriteStream(this, options); -}; - -FdSlicer.prototype.ref = function() { - this.refCount += 1; -}; - -FdSlicer.prototype.unref = function() { - var self = this; - self.refCount -= 1; - - if (self.refCount > 0) return; - if (self.refCount < 0) throw new Error("invalid unref"); - - if (self.autoClose) { - fs.close(self.fd, onCloseDone); - } - - function onCloseDone(err) { - if (err) { - self.emit('error', err); - } else { - self.emit('close'); - } - } -}; - -util.inherits(ReadStream, Readable); -function ReadStream(context, options) { - options = options || {}; - Readable.call(this, options); - - this.context = context; - this.context.ref(); - - this.start = options.start || 0; - this.endOffset = options.end; - this.pos = this.start; - this.destroyed = false; -} - -ReadStream.prototype._read = function(n) { - var self = this; - if (self.destroyed) return; - - var toRead = Math.min(self._readableState.highWaterMark, n); - if (self.endOffset != null) { - toRead = Math.min(toRead, self.endOffset - self.pos); - } - if (toRead <= 0) { - self.destroyed = true; - self.push(null); - self.context.unref(); - return; - } - self.context.pend.go(function(cb) { - if (self.destroyed) return cb(); - var buffer = new Buffer(toRead); - fs.read(self.context.fd, buffer, 0, toRead, self.pos, function(err, bytesRead) { - if (err) { - self.destroy(err); - } else if (bytesRead === 0) { - self.destroyed = true; - self.push(null); - self.context.unref(); - } else { - self.pos += bytesRead; - self.push(buffer.slice(0, bytesRead)); - } - cb(); - }); - }); -}; - -ReadStream.prototype.destroy = function(err) { - if (this.destroyed) return; - err = err || new Error("stream destroyed"); - this.destroyed = true; - this.emit('error', err); - this.context.unref(); -}; - -util.inherits(WriteStream, Writable); -function WriteStream(context, options) { - options = options || {}; - Writable.call(this, options); - - this.context = context; - this.context.ref(); - - this.start = options.start || 0; - this.endOffset = (options.end == null) ? Infinity : +options.end; - this.bytesWritten = 0; - this.pos = this.start; - this.destroyed = false; - - this.on('finish', this.destroy.bind(this)); -} - -WriteStream.prototype._write = function(buffer, encoding, callback) { - var self = this; - if (self.destroyed) return; - - if (self.pos + buffer.length > self.endOffset) { - var err = new Error("maximum file length exceeded"); - err.code = 'ETOOBIG'; - self.destroy(); - callback(err); - return; - } - self.context.pend.go(function(cb) { - if (self.destroyed) return cb(); - fs.write(self.context.fd, buffer, 0, buffer.length, self.pos, function(err, bytes) { - if (err) { - self.destroy(); - cb(); - callback(err); - } else { - self.bytesWritten += bytes; - self.pos += bytes; - self.emit('progress'); - cb(); - callback(); - } - }); - }); -}; - -WriteStream.prototype.destroy = function() { - if (this.destroyed) return; - this.destroyed = true; - this.context.unref(); -}; - -util.inherits(BufferSlicer, EventEmitter); -function BufferSlicer(buffer, options) { - EventEmitter.call(this); - - options = options || {}; - this.refCount = 0; - this.buffer = buffer; - this.maxChunkSize = options.maxChunkSize || Number.MAX_SAFE_INTEGER; -} - -BufferSlicer.prototype.read = function(buffer, offset, length, position, callback) { - var end = position + length; - var delta = end - this.buffer.length; - var written = (delta > 0) ? delta : length; - this.buffer.copy(buffer, offset, position, end); - setImmediate(function() { - callback(null, written); - }); -}; - -BufferSlicer.prototype.write = function(buffer, offset, length, position, callback) { - buffer.copy(this.buffer, position, offset, offset + length); - setImmediate(function() { - callback(null, length, buffer); - }); -}; - -BufferSlicer.prototype.createReadStream = function(options) { - options = options || {}; - var readStream = new PassThrough(options); - readStream.destroyed = false; - readStream.start = options.start || 0; - readStream.endOffset = options.end; - // by the time this function returns, we'll be done. - readStream.pos = readStream.endOffset || this.buffer.length; - - // respect the maxChunkSize option to slice up the chunk into smaller pieces. - var entireSlice = this.buffer.slice(readStream.start, readStream.pos); - var offset = 0; - while (true) { - var nextOffset = offset + this.maxChunkSize; - if (nextOffset >= entireSlice.length) { - // last chunk - if (offset < entireSlice.length) { - readStream.write(entireSlice.slice(offset, entireSlice.length)); - } - break; - } - readStream.write(entireSlice.slice(offset, nextOffset)); - offset = nextOffset; - } - - readStream.end(); - readStream.destroy = function() { - readStream.destroyed = true; - }; - return readStream; -}; - -BufferSlicer.prototype.createWriteStream = function(options) { - var bufferSlicer = this; - options = options || {}; - var writeStream = new Writable(options); - writeStream.start = options.start || 0; - writeStream.endOffset = (options.end == null) ? this.buffer.length : +options.end; - writeStream.bytesWritten = 0; - writeStream.pos = writeStream.start; - writeStream.destroyed = false; - writeStream._write = function(buffer, encoding, callback) { - if (writeStream.destroyed) return; - - var end = writeStream.pos + buffer.length; - if (end > writeStream.endOffset) { - var err = new Error("maximum file length exceeded"); - err.code = 'ETOOBIG'; - writeStream.destroyed = true; - callback(err); - return; - } - buffer.copy(bufferSlicer.buffer, writeStream.pos, 0, buffer.length); - - writeStream.bytesWritten += buffer.length; - writeStream.pos = end; - writeStream.emit('progress'); - callback(); - }; - writeStream.destroy = function() { - writeStream.destroyed = true; - }; - return writeStream; -}; - -BufferSlicer.prototype.ref = function() { - this.refCount += 1; -}; - -BufferSlicer.prototype.unref = function() { - this.refCount -= 1; - - if (this.refCount < 0) { - throw new Error("invalid unref"); - } -}; - -function createFromBuffer(buffer, options) { - return new BufferSlicer(buffer, options); -} - -function createFromFd(fd, options) { - return new FdSlicer(fd, options); -} diff --git a/truebit-implementation/node_modules/fd-slicer/package.json b/truebit-implementation/node_modules/fd-slicer/package.json deleted file mode 100644 index 8687c7a7..00000000 --- a/truebit-implementation/node_modules/fd-slicer/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "_from": "fd-slicer@~1.1.0", - "_id": "fd-slicer@1.1.0", - "_inBundle": false, - "_integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "_location": "/fd-slicer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fd-slicer@~1.1.0", - "name": "fd-slicer", - "escapedName": "fd-slicer", - "rawSpec": "~1.1.0", - "saveSpec": null, - "fetchSpec": "~1.1.0" - }, - "_requiredBy": [ - "/yauzl" - ], - "_resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "_shasum": "25c7c89cb1f9077f8891bbe61d8f390eae256f1e", - "_spec": "fd-slicer@~1.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/yauzl", - "author": { - "name": "Andrew Kelley", - "email": "superjoe30@gmail.com" - }, - "bugs": { - "url": "https://github.com/andrewrk/node-fd-slicer/issues" - }, - "bundleDependencies": false, - "dependencies": { - "pend": "~1.2.0" - }, - "deprecated": false, - "description": "safely create multiple ReadStream or WriteStream objects from the same file descriptor", - "devDependencies": { - "istanbul": "~0.3.3", - "mocha": "~2.0.1", - "stream-equal": "~0.1.5", - "streamsink": "~1.2.0" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/andrewrk/node-fd-slicer#readme", - "keywords": [ - "createReadStream", - "createWriteStream" - ], - "license": "MIT", - "main": "index.js", - "name": "fd-slicer", - "repository": { - "type": "git", - "url": "git://github.com/andrewrk/node-fd-slicer.git" - }, - "scripts": { - "test": "mocha --reporter spec --check-leaks", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/test.js", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --timeout 10000 --reporter spec --check-leaks test/test.js" - }, - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/fd-slicer/test/test.js b/truebit-implementation/node_modules/fd-slicer/test/test.js deleted file mode 100644 index d05ab003..00000000 --- a/truebit-implementation/node_modules/fd-slicer/test/test.js +++ /dev/null @@ -1,350 +0,0 @@ -var fdSlicer = require('../'); -var fs = require('fs'); -var crypto = require('crypto'); -var path = require('path'); -var streamEqual = require('stream-equal'); -var assert = require('assert'); -var Pend = require('pend'); -var StreamSink = require('streamsink'); - -var describe = global.describe; -var it = global.it; -var before = global.before; -var beforeEach = global.beforeEach; -var after = global.after; - -var testBlobFile = path.join(__dirname, "test-blob.bin"); -var testBlobFileSize = 20 * 1024 * 1024; -var testOutBlobFile = path.join(__dirname, "test-blob-out.bin"); - -describe("FdSlicer", function() { - before(function(done) { - var out = fs.createWriteStream(testBlobFile); - for (var i = 0; i < testBlobFileSize / 1024; i += 1) { - out.write(crypto.pseudoRandomBytes(1024)); - } - out.end(); - out.on('close', done); - }); - beforeEach(function() { - try { - fs.unlinkSync(testOutBlobFile); - } catch (err) { - } - }); - after(function() { - try { - fs.unlinkSync(testBlobFile); - fs.unlinkSync(testOutBlobFile); - } catch (err) { - } - }); - it("reads a 20MB file (autoClose on)", function(done) { - fs.open(testBlobFile, 'r', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var actualStream = slicer.createReadStream(); - var expectedStream = fs.createReadStream(testBlobFile); - - var pend = new Pend(); - pend.go(function(cb) { - slicer.on('close', cb); - }); - pend.go(function(cb) { - streamEqual(expectedStream, actualStream, function(err, equal) { - if (err) return done(err); - assert.ok(equal); - cb(); - }); - }); - pend.wait(done); - }); - }); - it("reads 4 chunks simultaneously", function(done) { - fs.open(testBlobFile, 'r', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd); - var actualPart1 = slicer.createReadStream({start: testBlobFileSize * 0/4, end: testBlobFileSize * 1/4}); - var actualPart2 = slicer.createReadStream({start: testBlobFileSize * 1/4, end: testBlobFileSize * 2/4}); - var actualPart3 = slicer.createReadStream({start: testBlobFileSize * 2/4, end: testBlobFileSize * 3/4}); - var actualPart4 = slicer.createReadStream({start: testBlobFileSize * 3/4, end: testBlobFileSize * 4/4}); - var expectedPart1 = slicer.createReadStream({start: testBlobFileSize * 0/4, end: testBlobFileSize * 1/4}); - var expectedPart2 = slicer.createReadStream({start: testBlobFileSize * 1/4, end: testBlobFileSize * 2/4}); - var expectedPart3 = slicer.createReadStream({start: testBlobFileSize * 2/4, end: testBlobFileSize * 3/4}); - var expectedPart4 = slicer.createReadStream({start: testBlobFileSize * 3/4, end: testBlobFileSize * 4/4}); - var pend = new Pend(); - pend.go(function(cb) { - streamEqual(expectedPart1, actualPart1, function(err, equal) { - assert.ok(equal); - cb(err); - }); - }); - pend.go(function(cb) { - streamEqual(expectedPart2, actualPart2, function(err, equal) { - assert.ok(equal); - cb(err); - }); - }); - pend.go(function(cb) { - streamEqual(expectedPart3, actualPart3, function(err, equal) { - assert.ok(equal); - cb(err); - }); - }); - pend.go(function(cb) { - streamEqual(expectedPart4, actualPart4, function(err, equal) { - assert.ok(equal); - cb(err); - }); - }); - pend.wait(function(err) { - if (err) return done(err); - fs.close(fd, done); - }); - }); - }); - - it("writes a 20MB file (autoClose on)", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var actualStream = slicer.createWriteStream(); - var inStream = fs.createReadStream(testBlobFile); - - slicer.on('close', function() { - var expected = fs.createReadStream(testBlobFile); - var actual = fs.createReadStream(testOutBlobFile); - - streamEqual(expected, actual, function(err, equal) { - if (err) return done(err); - assert.ok(equal); - done(); - }); - }); - inStream.pipe(actualStream); - }); - }); - - it("writes 4 chunks simultaneously", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd); - var actualPart1 = slicer.createWriteStream({start: testBlobFileSize * 0/4}); - var actualPart2 = slicer.createWriteStream({start: testBlobFileSize * 1/4}); - var actualPart3 = slicer.createWriteStream({start: testBlobFileSize * 2/4}); - var actualPart4 = slicer.createWriteStream({start: testBlobFileSize * 3/4}); - var in1 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 0/4, end: testBlobFileSize * 1/4}); - var in2 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 1/4, end: testBlobFileSize * 2/4}); - var in3 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 2/4, end: testBlobFileSize * 3/4}); - var in4 = fs.createReadStream(testBlobFile, {start: testBlobFileSize * 3/4, end: testBlobFileSize * 4/4}); - var pend = new Pend(); - pend.go(function(cb) { - actualPart1.on('finish', cb); - }); - pend.go(function(cb) { - actualPart2.on('finish', cb); - }); - pend.go(function(cb) { - actualPart3.on('finish', cb); - }); - pend.go(function(cb) { - actualPart4.on('finish', cb); - }); - in1.pipe(actualPart1); - in2.pipe(actualPart2); - in3.pipe(actualPart3); - in4.pipe(actualPart4); - pend.wait(function() { - fs.close(fd, function(err) { - if (err) return done(err); - var expected = fs.createReadStream(testBlobFile); - var actual = fs.createReadStream(testOutBlobFile); - streamEqual(expected, actual, function(err, equal) { - if (err) return done(err); - assert.ok(equal); - done(); - }); - }); - }); - }); - }); - - it("throws on invalid ref", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - assert.throws(function() { - slicer.unref(); - }, /invalid unref/); - fs.close(fd, done); - }); - }); - - it("write stream emits error when max size exceeded", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var ws = slicer.createWriteStream({start: 0, end: 1000}); - ws.on('error', function(err) { - assert.strictEqual(err.code, 'ETOOBIG'); - slicer.on('close', done); - }); - ws.end(new Buffer(1001)); - }); - }); - - it("write stream does not emit error when max size not exceeded", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var ws = slicer.createWriteStream({end: 1000}); - slicer.on('close', done); - ws.end(new Buffer(1000)); - }); - }); - - it("write stream start and end work together", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var ws = slicer.createWriteStream({start: 1, end: 1000}); - ws.on('error', function(err) { - assert.strictEqual(err.code, 'ETOOBIG'); - slicer.on('close', done); - }); - ws.end(new Buffer(1000)); - }); - }); - - it("write stream emits progress events", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var ws = slicer.createWriteStream(); - var progressEventCount = 0; - var prevBytesWritten = 0; - ws.on('progress', function() { - progressEventCount += 1; - assert.ok(ws.bytesWritten > prevBytesWritten); - prevBytesWritten = ws.bytesWritten; - }); - slicer.on('close', function() { - assert.ok(progressEventCount > 5); - done(); - }); - for (var i = 0; i < 10; i += 1) { - ws.write(new Buffer(16 * 1024 * 2)); - } - ws.end(); - }); - }); - - it("write stream unrefs when destroyed", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var ws = slicer.createWriteStream(); - slicer.on('close', done); - ws.write(new Buffer(1000)); - ws.destroy(); - }); - }); - - it("read stream unrefs when destroyed", function(done) { - fs.open(testBlobFile, 'r', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd, {autoClose: true}); - var rs = slicer.createReadStream(); - rs.on('error', function(err) { - assert.strictEqual(err.message, "stream destroyed"); - slicer.on('close', done); - }); - rs.destroy(); - }); - }); - - it("fdSlicer.read", function(done) { - fs.open(testBlobFile, 'r', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd); - var outBuf = new Buffer(1024); - slicer.read(outBuf, 0, 10, 0, function(err, bytesRead, buf) { - assert.strictEqual(bytesRead, 10); - fs.close(fd, done); - }); - }); - }); - - it("fdSlicer.write", function(done) { - fs.open(testOutBlobFile, 'w', function(err, fd) { - if (err) return done(err); - var slicer = fdSlicer.createFromFd(fd); - slicer.write(new Buffer("blah\n"), 0, 5, 0, function() { - if (err) return done(err); - fs.close(fd, done); - }); - }); - }); -}); - -describe("BufferSlicer", function() { - it("invalid ref", function() { - var slicer = fdSlicer.createFromBuffer(new Buffer(16)); - slicer.ref(); - slicer.unref(); - assert.throws(function() { - slicer.unref(); - }, /invalid unref/); - }); - it("read and write", function(done) { - var buf = new Buffer("through the tangled thread the needle finds its way"); - var slicer = fdSlicer.createFromBuffer(buf); - var outBuf = new Buffer(1024); - slicer.read(outBuf, 10, 11, 8, function(err) { - if (err) return done(err); - assert.strictEqual(outBuf.toString('utf8', 10, 21), "the tangled"); - slicer.write(new Buffer("derp"), 0, 4, 7, function(err) { - if (err) return done(err); - assert.strictEqual(buf.toString('utf8', 7, 19), "derp tangled"); - done(); - }); - }); - }); - it("createReadStream", function(done) { - var str = "I never conquered rarely came, 16 just held such better days"; - var buf = new Buffer(str); - var slicer = fdSlicer.createFromBuffer(buf); - var inStream = slicer.createReadStream(); - var sink = new StreamSink(); - inStream.pipe(sink); - sink.on('finish', function() { - assert.strictEqual(sink.toString(), str); - inStream.destroy(); - done(); - }); - }); - it("createWriteStream exceed buffer size", function(done) { - var slicer = fdSlicer.createFromBuffer(new Buffer(4)); - var outStream = slicer.createWriteStream(); - outStream.on('error', function(err) { - assert.strictEqual(err.code, 'ETOOBIG'); - done(); - }); - outStream.write("hi!\n"); - outStream.write("it warked\n"); - outStream.end(); - }); - it("createWriteStream ok", function(done) { - var buf = new Buffer(1024); - var slicer = fdSlicer.createFromBuffer(buf); - var outStream = slicer.createWriteStream(); - outStream.on('finish', function() { - assert.strictEqual(buf.toString('utf8', 0, "hi!\nit warked\n".length), "hi!\nit warked\n"); - outStream.destroy(); - done(); - }); - outStream.write("hi!\n"); - outStream.write("it warked\n"); - outStream.end(); - }); -}); diff --git a/truebit-implementation/node_modules/file-type/index.js b/truebit-implementation/node_modules/file-type/index.js deleted file mode 100644 index 095dc938..00000000 --- a/truebit-implementation/node_modules/file-type/index.js +++ /dev/null @@ -1,559 +0,0 @@ -'use strict'; - -module.exports = input => { - const buf = new Uint8Array(input); - - if (!(buf && buf.length > 1)) { - return null; - } - - const check = (header, opts) => { - opts = Object.assign({ - offset: 0 - }, opts); - - for (let i = 0; i < header.length; i++) { - if (header[i] !== buf[i + opts.offset]) { - return false; - } - } - - return true; - }; - - if (check([0xFF, 0xD8, 0xFF])) { - return { - ext: 'jpg', - mime: 'image/jpeg' - }; - } - - if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) { - return { - ext: 'png', - mime: 'image/png' - }; - } - - if (check([0x47, 0x49, 0x46])) { - return { - ext: 'gif', - mime: 'image/gif' - }; - } - - if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) { - return { - ext: 'webp', - mime: 'image/webp' - }; - } - - if (check([0x46, 0x4C, 0x49, 0x46])) { - return { - ext: 'flif', - mime: 'image/flif' - }; - } - - // Needs to be before `tif` check - if ( - (check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) && - check([0x43, 0x52], {offset: 8}) - ) { - return { - ext: 'cr2', - mime: 'image/x-canon-cr2' - }; - } - - if ( - check([0x49, 0x49, 0x2A, 0x0]) || - check([0x4D, 0x4D, 0x0, 0x2A]) - ) { - return { - ext: 'tif', - mime: 'image/tiff' - }; - } - - if (check([0x42, 0x4D])) { - return { - ext: 'bmp', - mime: 'image/bmp' - }; - } - - if (check([0x49, 0x49, 0xBC])) { - return { - ext: 'jxr', - mime: 'image/vnd.ms-photo' - }; - } - - if (check([0x38, 0x42, 0x50, 0x53])) { - return { - ext: 'psd', - mime: 'image/vnd.adobe.photoshop' - }; - } - - // Needs to be before the `zip` check - if ( - check([0x50, 0x4B, 0x3, 0x4]) && - check([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30}) - ) { - return { - ext: 'epub', - mime: 'application/epub+zip' - }; - } - - // Needs to be before `zip` check - // Assumes signed `.xpi` from addons.mozilla.org - if ( - check([0x50, 0x4B, 0x3, 0x4]) && - check([0x4D, 0x45, 0x54, 0x41, 0x2D, 0x49, 0x4E, 0x46, 0x2F, 0x6D, 0x6F, 0x7A, 0x69, 0x6C, 0x6C, 0x61, 0x2E, 0x72, 0x73, 0x61], {offset: 30}) - ) { - return { - ext: 'xpi', - mime: 'application/x-xpinstall' - }; - } - - if ( - check([0x50, 0x4B]) && - (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && - (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8) - ) { - return { - ext: 'zip', - mime: 'application/zip' - }; - } - - if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) { - return { - ext: 'tar', - mime: 'application/x-tar' - }; - } - - if ( - check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) && - (buf[6] === 0x0 || buf[6] === 0x1) - ) { - return { - ext: 'rar', - mime: 'application/x-rar-compressed' - }; - } - - if (check([0x1F, 0x8B, 0x8])) { - return { - ext: 'gz', - mime: 'application/gzip' - }; - } - - if (check([0x42, 0x5A, 0x68])) { - return { - ext: 'bz2', - mime: 'application/x-bzip2' - }; - } - - if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) { - return { - ext: '7z', - mime: 'application/x-7z-compressed' - }; - } - - if (check([0x78, 0x01])) { - return { - ext: 'dmg', - mime: 'application/x-apple-diskimage' - }; - } - - if ( - ( - check([0x0, 0x0, 0x0]) && - (buf[3] === 0x18 || buf[3] === 0x20) && - check([0x66, 0x74, 0x79, 0x70], {offset: 4}) - ) || - check([0x33, 0x67, 0x70, 0x35]) || - ( - check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32]) && - check([0x6D, 0x70, 0x34, 0x31, 0x6D, 0x70, 0x34, 0x32, 0x69, 0x73, 0x6F, 0x6D], {offset: 16}) - ) || - check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6F, 0x6D]) || - check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34, 0x32, 0x0, 0x0, 0x0, 0x0]) - ) { - return { - ext: 'mp4', - mime: 'video/mp4' - }; - } - - if (check([0x0, 0x0, 0x0, 0x1C, 0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x56])) { - return { - ext: 'm4v', - mime: 'video/x-m4v' - }; - } - - if (check([0x4D, 0x54, 0x68, 0x64])) { - return { - ext: 'mid', - mime: 'audio/midi' - }; - } - - // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska - if (check([0x1A, 0x45, 0xDF, 0xA3])) { - const sliced = buf.subarray(4, 4 + 4096); - const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82); - - if (idPos >= 0) { - const docTypePos = idPos + 3; - const findDocType = type => Array.from(type).every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0)); - - if (findDocType('matroska')) { - return { - ext: 'mkv', - mime: 'video/x-matroska' - }; - } - - if (findDocType('webm')) { - return { - ext: 'webm', - mime: 'video/webm' - }; - } - } - } - - if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) || - check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || - check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) || - check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG - check([0x77, 0x69, 0x64, 0x65], {offset: 4})) { - return { - ext: 'mov', - mime: 'video/quicktime' - }; - } - - if ( - check([0x52, 0x49, 0x46, 0x46]) && - check([0x41, 0x56, 0x49], {offset: 8}) - ) { - return { - ext: 'avi', - mime: 'video/x-msvideo' - }; - } - - if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) { - return { - ext: 'wmv', - mime: 'video/x-ms-wmv' - }; - } - - if (check([0x0, 0x0, 0x1, 0xBA])) { - return { - ext: 'mpg', - mime: 'video/mpeg' - }; - } - - if ( - check([0x49, 0x44, 0x33]) || - check([0xFF, 0xFB]) - ) { - return { - ext: 'mp3', - mime: 'audio/mpeg' - }; - } - - if ( - check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) || - check([0x4D, 0x34, 0x41, 0x20]) - ) { - return { - ext: 'm4a', - mime: 'audio/m4a' - }; - } - - // Needs to be before `ogg` check - if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) { - return { - ext: 'opus', - mime: 'audio/opus' - }; - } - - if (check([0x4F, 0x67, 0x67, 0x53])) { - return { - ext: 'ogg', - mime: 'audio/ogg' - }; - } - - if (check([0x66, 0x4C, 0x61, 0x43])) { - return { - ext: 'flac', - mime: 'audio/x-flac' - }; - } - - if ( - check([0x52, 0x49, 0x46, 0x46]) && - check([0x57, 0x41, 0x56, 0x45], {offset: 8}) - ) { - return { - ext: 'wav', - mime: 'audio/x-wav' - }; - } - - if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) { - return { - ext: 'amr', - mime: 'audio/amr' - }; - } - - if (check([0x25, 0x50, 0x44, 0x46])) { - return { - ext: 'pdf', - mime: 'application/pdf' - }; - } - - if (check([0x4D, 0x5A])) { - return { - ext: 'exe', - mime: 'application/x-msdownload' - }; - } - - if ( - (buf[0] === 0x43 || buf[0] === 0x46) && - check([0x57, 0x53], {offset: 1}) - ) { - return { - ext: 'swf', - mime: 'application/x-shockwave-flash' - }; - } - - if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) { - return { - ext: 'rtf', - mime: 'application/rtf' - }; - } - - if (check([0x00, 0x61, 0x73, 0x6D])) { - return { - ext: 'wasm', - mime: 'application/wasm' - }; - } - - if ( - check([0x77, 0x4F, 0x46, 0x46]) && - ( - check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || - check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) - ) - ) { - return { - ext: 'woff', - mime: 'font/woff' - }; - } - - if ( - check([0x77, 0x4F, 0x46, 0x32]) && - ( - check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || - check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) - ) - ) { - return { - ext: 'woff2', - mime: 'font/woff2' - }; - } - - if ( - check([0x4C, 0x50], {offset: 34}) && - ( - check([0x00, 0x00, 0x01], {offset: 8}) || - check([0x01, 0x00, 0x02], {offset: 8}) || - check([0x02, 0x00, 0x02], {offset: 8}) - ) - ) { - return { - ext: 'eot', - mime: 'application/octet-stream' - }; - } - - if (check([0x00, 0x01, 0x00, 0x00, 0x00])) { - return { - ext: 'ttf', - mime: 'font/ttf' - }; - } - - if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) { - return { - ext: 'otf', - mime: 'font/otf' - }; - } - - if (check([0x00, 0x00, 0x01, 0x00])) { - return { - ext: 'ico', - mime: 'image/x-icon' - }; - } - - if (check([0x46, 0x4C, 0x56, 0x01])) { - return { - ext: 'flv', - mime: 'video/x-flv' - }; - } - - if (check([0x25, 0x21])) { - return { - ext: 'ps', - mime: 'application/postscript' - }; - } - - if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) { - return { - ext: 'xz', - mime: 'application/x-xz' - }; - } - - if (check([0x53, 0x51, 0x4C, 0x69])) { - return { - ext: 'sqlite', - mime: 'application/x-sqlite3' - }; - } - - if (check([0x4E, 0x45, 0x53, 0x1A])) { - return { - ext: 'nes', - mime: 'application/x-nintendo-nes-rom' - }; - } - - if (check([0x43, 0x72, 0x32, 0x34])) { - return { - ext: 'crx', - mime: 'application/x-google-chrome-extension' - }; - } - - if ( - check([0x4D, 0x53, 0x43, 0x46]) || - check([0x49, 0x53, 0x63, 0x28]) - ) { - return { - ext: 'cab', - mime: 'application/vnd.ms-cab-compressed' - }; - } - - // Needs to be before `ar` check - if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) { - return { - ext: 'deb', - mime: 'application/x-deb' - }; - } - - if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) { - return { - ext: 'ar', - mime: 'application/x-unix-archive' - }; - } - - if (check([0xED, 0xAB, 0xEE, 0xDB])) { - return { - ext: 'rpm', - mime: 'application/x-rpm' - }; - } - - if ( - check([0x1F, 0xA0]) || - check([0x1F, 0x9D]) - ) { - return { - ext: 'Z', - mime: 'application/x-compress' - }; - } - - if (check([0x4C, 0x5A, 0x49, 0x50])) { - return { - ext: 'lz', - mime: 'application/x-lzip' - }; - } - - if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) { - return { - ext: 'msi', - mime: 'application/x-msi' - }; - } - - if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) { - return { - ext: 'mxf', - mime: 'application/mxf' - }; - } - - if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) { - return { - ext: 'mts', - mime: 'video/mp2t' - }; - } - - if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) { - return { - ext: 'blend', - mime: 'application/x-blender' - }; - } - - if (check([0x42, 0x50, 0x47, 0xFB])) { - return { - ext: 'bpg', - mime: 'image/bpg' - }; - } - - return null; -}; diff --git a/truebit-implementation/node_modules/file-type/license b/truebit-implementation/node_modules/file-type/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/file-type/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/file-type/package.json b/truebit-implementation/node_modules/file-type/package.json deleted file mode 100644 index 3c1f128c..00000000 --- a/truebit-implementation/node_modules/file-type/package.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "_from": "file-type@^5.2.0", - "_id": "file-type@5.2.0", - "_inBundle": false, - "_integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "_location": "/file-type", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "file-type@^5.2.0", - "name": "file-type", - "escapedName": "file-type", - "rawSpec": "^5.2.0", - "saveSpec": null, - "fetchSpec": "^5.2.0" - }, - "_requiredBy": [ - "/decompress-tar", - "/decompress-targz" - ], - "_resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "_shasum": "2ddbea7c73ffe36368dfae49dc338c058c2b8ad6", - "_spec": "file-type@^5.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-tar", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/file-type/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Detect the file type of a Buffer/Uint8Array", - "devDependencies": { - "ava": "*", - "read-chunk": "^2.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/file-type#readme", - "keywords": [ - "mime", - "file", - "type", - "archive", - "image", - "img", - "pic", - "picture", - "flash", - "photo", - "video", - "type", - "detect", - "check", - "is", - "exif", - "exe", - "binary", - "buffer", - "uint8array", - "jpg", - "png", - "gif", - "webp", - "flif", - "cr2", - "tif", - "bmp", - "jxr", - "psd", - "zip", - "tar", - "rar", - "gz", - "bz2", - "7z", - "dmg", - "mp4", - "m4v", - "mid", - "mkv", - "webm", - "mov", - "avi", - "mpg", - "mp3", - "m4a", - "ogg", - "opus", - "flac", - "wav", - "amr", - "pdf", - "epub", - "exe", - "swf", - "rtf", - "woff", - "woff2", - "eot", - "ttf", - "otf", - "ico", - "flv", - "ps", - "xz", - "sqlite", - "xpi", - "cab", - "deb", - "ar", - "rpm", - "Z", - "lz", - "msi", - "mxf", - "mts", - "wasm", - "webassembly", - "blend", - "bpg" - ], - "license": "MIT", - "name": "file-type", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/file-type.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "5.2.0" -} diff --git a/truebit-implementation/node_modules/file-type/readme.md b/truebit-implementation/node_modules/file-type/readme.md deleted file mode 100644 index 2b9d250f..00000000 --- a/truebit-implementation/node_modules/file-type/readme.md +++ /dev/null @@ -1,156 +0,0 @@ -# file-type [![Build Status](https://travis-ci.org/sindresorhus/file-type.svg?branch=master)](https://travis-ci.org/sindresorhus/file-type) - -> Detect the file type of a Buffer/Uint8Array - -The file type is detected by checking the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files) of the buffer. - - -## Install - -``` -$ npm install --save file-type -``` - - -## Usage - -##### Node.js - -```js -const readChunk = require('read-chunk'); -const fileType = require('file-type'); -const buffer = readChunk.sync('unicorn.png', 0, 4100); - -fileType(buffer); -//=> {ext: 'png', mime: 'image/png'} -``` - -Or from a remote location: - -```js -const http = require('http'); -const fileType = require('file-type'); -const url = 'http://assets-cdn.github.com/images/spinners/octocat-spinner-32.gif'; - -http.get(url, res => { - res.once('data', chunk => { - res.destroy(); - console.log(fileType(chunk)); - //=> {ext: 'gif', mime: 'image/gif'} - }); -}); -``` - -##### Browser - -```js -const xhr = new XMLHttpRequest(); -xhr.open('GET', 'unicorn.png'); -xhr.responseType = 'arraybuffer'; - -xhr.onload = () => { - fileType(new Uint8Array(this.response)); - //=> {ext: 'png', mime: 'image/png'} -}; - -xhr.send(); -``` - - -## API - -### fileType(input) - -Returns an `Object` with: - -- `ext` - One of the [supported file types](#supported-file-types) -- `mime` - The [MIME type](http://en.wikipedia.org/wiki/Internet_media_type) - -Or `null` when no match. - -#### input - -Type: `Buffer` `Uint8Array` - -It only needs the first 4100 bytes. - - -## Supported file types - -- [`jpg`](https://en.wikipedia.org/wiki/JPEG) -- [`png`](https://en.wikipedia.org/wiki/Portable_Network_Graphics) -- [`gif`](https://en.wikipedia.org/wiki/GIF) -- [`webp`](https://en.wikipedia.org/wiki/WebP) -- [`flif`](https://en.wikipedia.org/wiki/Free_Lossless_Image_Format) -- [`cr2`](http://fileinfo.com/extension/cr2) -- [`tif`](https://en.wikipedia.org/wiki/Tagged_Image_File_Format) -- [`bmp`](https://en.wikipedia.org/wiki/BMP_file_format) -- [`jxr`](https://en.wikipedia.org/wiki/JPEG_XR) -- [`psd`](https://en.wikipedia.org/wiki/Adobe_Photoshop#File_format) -- [`zip`](https://en.wikipedia.org/wiki/Zip_(file_format)) -- [`tar`](https://en.wikipedia.org/wiki/Tar_(computing)#File_format) -- [`rar`](https://en.wikipedia.org/wiki/RAR_(file_format)) -- [`gz`](https://en.wikipedia.org/wiki/Gzip) -- [`bz2`](https://en.wikipedia.org/wiki/Bzip2) -- [`7z`](https://en.wikipedia.org/wiki/7z) -- [`dmg`](https://en.wikipedia.org/wiki/Apple_Disk_Image) -- [`mp4`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#Filename_extensions) -- [`m4v`](https://en.wikipedia.org/wiki/M4V) -- [`mid`](https://en.wikipedia.org/wiki/MIDI) -- [`mkv`](https://en.wikipedia.org/wiki/Matroska) -- [`webm`](https://en.wikipedia.org/wiki/WebM) -- [`mov`](https://en.wikipedia.org/wiki/QuickTime_File_Format) -- [`avi`](https://en.wikipedia.org/wiki/Audio_Video_Interleave) -- [`wmv`](https://en.wikipedia.org/wiki/Windows_Media_Video) -- [`mpg`](https://en.wikipedia.org/wiki/MPEG-1) -- [`mp3`](https://en.wikipedia.org/wiki/MP3) -- [`m4a`](https://en.wikipedia.org/wiki/MPEG-4_Part_14#.MP4_versus_.M4A) -- [`ogg`](https://en.wikipedia.org/wiki/Ogg) -- [`opus`](https://en.wikipedia.org/wiki/Opus_(audio_format)) -- [`flac`](https://en.wikipedia.org/wiki/FLAC) -- [`wav`](https://en.wikipedia.org/wiki/WAV) -- [`amr`](https://en.wikipedia.org/wiki/Adaptive_Multi-Rate_audio_codec) -- [`pdf`](https://en.wikipedia.org/wiki/Portable_Document_Format) -- [`epub`](https://en.wikipedia.org/wiki/EPUB) -- [`exe`](https://en.wikipedia.org/wiki/.exe) -- [`swf`](https://en.wikipedia.org/wiki/SWF) -- [`rtf`](https://en.wikipedia.org/wiki/Rich_Text_Format) -- [`woff`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) -- [`woff2`](https://en.wikipedia.org/wiki/Web_Open_Font_Format) -- [`eot`](https://en.wikipedia.org/wiki/Embedded_OpenType) -- [`ttf`](https://en.wikipedia.org/wiki/TrueType) -- [`otf`](https://en.wikipedia.org/wiki/OpenType) -- [`ico`](https://en.wikipedia.org/wiki/ICO_(file_format)) -- [`flv`](https://en.wikipedia.org/wiki/Flash_Video) -- [`ps`](https://en.wikipedia.org/wiki/Postscript) -- [`xz`](https://en.wikipedia.org/wiki/Xz) -- [`sqlite`](https://www.sqlite.org/fileformat2.html) -- [`nes`](http://fileinfo.com/extension/nes) -- [`crx`](https://developer.chrome.com/extensions/crx) -- [`xpi`](https://en.wikipedia.org/wiki/XPInstall) -- [`cab`](https://en.wikipedia.org/wiki/Cabinet_(file_format)) -- [`deb`](https://en.wikipedia.org/wiki/Deb_(file_format)) -- [`ar`](https://en.wikipedia.org/wiki/Ar_(Unix)) -- [`rpm`](http://fileinfo.com/extension/rpm) -- [`Z`](http://fileinfo.com/extension/z) -- [`lz`](https://en.wikipedia.org/wiki/Lzip) -- [`msi`](https://en.wikipedia.org/wiki/Windows_Installer) -- [`mxf`](https://en.wikipedia.org/wiki/Material_Exchange_Format) -- [`mts`](https://en.wikipedia.org/wiki/.m2ts) -- [`wasm`](https://en.wikipedia.org/wiki/WebAssembly) -- [`blend`](https://wiki.blender.org/index.php/Dev:Source/Architecture/File_Format) -- [`bpg`](https://bellard.org/bpg/) - -*SVG isn't included as it requires the whole file to be read, but you can get it [here](https://github.com/sindresorhus/is-svg).* - -*Pull request welcome for additional commonly used file types.* - - -## Related - -- [file-type-cli](https://github.com/sindresorhus/file-type-cli) - CLI for this module - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/finalhandler/HISTORY.md b/truebit-implementation/node_modules/finalhandler/HISTORY.md deleted file mode 100644 index 9e43d2a5..00000000 --- a/truebit-implementation/node_modules/finalhandler/HISTORY.md +++ /dev/null @@ -1,180 +0,0 @@ -1.1.1 / 2018-03-06 -================== - - * Fix 404 output for bad / missing pathnames - * deps: encodeurl@~1.0.2 - - Fix encoding `%` as last character - * deps: statuses@~1.4.0 - -1.1.0 / 2017-09-24 -================== - - * Use `res.headersSent` when available - -1.0.6 / 2017-09-22 -================== - - * deps: debug@2.6.9 - -1.0.5 / 2017-09-15 -================== - - * deps: parseurl@~1.3.2 - - perf: reduce overhead for full URLs - - perf: unroll the "fast-path" `RegExp` - -1.0.4 / 2017-08-03 -================== - - * deps: debug@2.6.8 - -1.0.3 / 2017-05-16 -================== - - * deps: debug@2.6.7 - - deps: ms@2.0.0 - -1.0.2 / 2017-04-22 -================== - - * deps: debug@2.6.4 - - deps: ms@0.7.3 - -1.0.1 / 2017-03-21 -================== - - * Fix missing `` in HTML document - * deps: debug@2.6.3 - - Fix: `DEBUG_MAX_ARRAY_LENGTH` - -1.0.0 / 2017-02-15 -================== - - * Fix exception when `err` cannot be converted to a string - * Fully URL-encode the pathname in the 404 message - * Only include the pathname in the 404 message - * Send complete HTML document - * Set `Content-Security-Policy: default-src 'self'` header - * deps: debug@2.6.1 - - Allow colors in workers - - Deprecated `DEBUG_FD` environment variable set to `3` or higher - - Fix error when running under React Native - - Use same color for same namespace - - deps: ms@0.7.2 - -0.5.1 / 2016-11-12 -================== - - * Fix exception when `err.headers` is not an object - * deps: statuses@~1.3.1 - * perf: hoist regular expressions - * perf: remove duplicate validation path - -0.5.0 / 2016-06-15 -================== - - * Change invalid or non-numeric status code to 500 - * Overwrite status message to match set status code - * Prefer `err.statusCode` if `err.status` is invalid - * Set response headers from `err.headers` object - * Use `statuses` instead of `http` module for status messages - - Includes all defined status messages - -0.4.1 / 2015-12-02 -================== - - * deps: escape-html@~1.0.3 - - perf: enable strict mode - - perf: optimize string replacement - - perf: use faster string coercion - -0.4.0 / 2015-06-14 -================== - - * Fix a false-positive when unpiping in Node.js 0.8 - * Support `statusCode` property on `Error` objects - * Use `unpipe` module for unpiping requests - * deps: escape-html@1.0.2 - * deps: on-finished@~2.3.0 - - Add defined behavior for HTTP `CONNECT` requests - - Add defined behavior for HTTP `Upgrade` requests - - deps: ee-first@1.1.1 - * perf: enable strict mode - * perf: remove argument reassignment - -0.3.6 / 2015-05-11 -================== - - * deps: debug@~2.2.0 - - deps: ms@0.7.1 - -0.3.5 / 2015-04-22 -================== - - * deps: on-finished@~2.2.1 - - Fix `isFinished(req)` when data buffered - -0.3.4 / 2015-03-15 -================== - - * deps: debug@~2.1.3 - - Fix high intensity foreground color for bold - - deps: ms@0.7.0 - -0.3.3 / 2015-01-01 -================== - - * deps: debug@~2.1.1 - * deps: on-finished@~2.2.0 - -0.3.2 / 2014-10-22 -================== - - * deps: on-finished@~2.1.1 - - Fix handling of pipelined requests - -0.3.1 / 2014-10-16 -================== - - * deps: debug@~2.1.0 - - Implement `DEBUG_FD` env variable support - -0.3.0 / 2014-09-17 -================== - - * Terminate in progress response only on error - * Use `on-finished` to determine request status - -0.2.0 / 2014-09-03 -================== - - * Set `X-Content-Type-Options: nosniff` header - * deps: debug@~2.0.0 - -0.1.0 / 2014-07-16 -================== - - * Respond after request fully read - - prevents hung responses and socket hang ups - * deps: debug@1.0.4 - -0.0.3 / 2014-07-11 -================== - - * deps: debug@1.0.3 - - Add support for multiple wildcards in namespaces - -0.0.2 / 2014-06-19 -================== - - * Handle invalid status codes - -0.0.1 / 2014-06-05 -================== - - * deps: debug@1.0.2 - -0.0.0 / 2014-06-05 -================== - - * Extracted from connect/express diff --git a/truebit-implementation/node_modules/finalhandler/LICENSE b/truebit-implementation/node_modules/finalhandler/LICENSE deleted file mode 100644 index fb309827..00000000 --- a/truebit-implementation/node_modules/finalhandler/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/finalhandler/README.md b/truebit-implementation/node_modules/finalhandler/README.md deleted file mode 100644 index 6756f0cd..00000000 --- a/truebit-implementation/node_modules/finalhandler/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# finalhandler - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Node.js function to invoke as the final step to respond to HTTP request. - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install finalhandler -``` - -## API - - - -```js -var finalhandler = require('finalhandler') -``` - -### finalhandler(req, res, [options]) - -Returns function to be invoked as the final step for the given `req` and `res`. -This function is to be invoked as `fn(err)`. If `err` is falsy, the handler will -write out a 404 response to the `res`. If it is truthy, an error response will -be written out to the `res`. - -When an error is written, the following information is added to the response: - - * The `res.statusCode` is set from `err.status` (or `err.statusCode`). If - this value is outside the 4xx or 5xx range, it will be set to 500. - * The `res.statusMessage` is set according to the status code. - * The body will be the HTML of the status code message if `env` is - `'production'`, otherwise will be `err.stack`. - * Any headers specified in an `err.headers` object. - -The final handler will also unpipe anything from `req` when it is invoked. - -#### options.env - -By default, the environment is determined by `NODE_ENV` variable, but it can be -overridden by this option. - -#### options.onerror - -Provide a function to be called with the `err` when it exists. Can be used for -writing errors to a central location without excessive function generation. Called -as `onerror(err, req, res)`. - -## Examples - -### always 404 - -```js -var finalhandler = require('finalhandler') -var http = require('http') - -var server = http.createServer(function (req, res) { - var done = finalhandler(req, res) - done() -}) - -server.listen(3000) -``` - -### perform simple action - -```js -var finalhandler = require('finalhandler') -var fs = require('fs') -var http = require('http') - -var server = http.createServer(function (req, res) { - var done = finalhandler(req, res) - - fs.readFile('index.html', function (err, buf) { - if (err) return done(err) - res.setHeader('Content-Type', 'text/html') - res.end(buf) - }) -}) - -server.listen(3000) -``` - -### use with middleware-style functions - -```js -var finalhandler = require('finalhandler') -var http = require('http') -var serveStatic = require('serve-static') - -var serve = serveStatic('public') - -var server = http.createServer(function (req, res) { - var done = finalhandler(req, res) - serve(req, res, done) -}) - -server.listen(3000) -``` - -### keep log of all errors - -```js -var finalhandler = require('finalhandler') -var fs = require('fs') -var http = require('http') - -var server = http.createServer(function (req, res) { - var done = finalhandler(req, res, {onerror: logerror}) - - fs.readFile('index.html', function (err, buf) { - if (err) return done(err) - res.setHeader('Content-Type', 'text/html') - res.end(buf) - }) -}) - -server.listen(3000) - -function logerror (err) { - console.error(err.stack || err.toString()) -} -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/finalhandler.svg -[npm-url]: https://npmjs.org/package/finalhandler -[node-image]: https://img.shields.io/node/v/finalhandler.svg -[node-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/pillarjs/finalhandler.svg -[travis-url]: https://travis-ci.org/pillarjs/finalhandler -[coveralls-image]: https://img.shields.io/coveralls/pillarjs/finalhandler.svg -[coveralls-url]: https://coveralls.io/r/pillarjs/finalhandler?branch=master -[downloads-image]: https://img.shields.io/npm/dm/finalhandler.svg -[downloads-url]: https://npmjs.org/package/finalhandler diff --git a/truebit-implementation/node_modules/finalhandler/index.js b/truebit-implementation/node_modules/finalhandler/index.js deleted file mode 100644 index f20ffe32..00000000 --- a/truebit-implementation/node_modules/finalhandler/index.js +++ /dev/null @@ -1,331 +0,0 @@ -/*! - * finalhandler - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var debug = require('debug')('finalhandler') -var encodeUrl = require('encodeurl') -var escapeHtml = require('escape-html') -var onFinished = require('on-finished') -var parseUrl = require('parseurl') -var statuses = require('statuses') -var unpipe = require('unpipe') - -/** - * Module variables. - * @private - */ - -var DOUBLE_SPACE_REGEXP = /\x20{2}/g -var NEWLINE_REGEXP = /\n/g - -/* istanbul ignore next */ -var defer = typeof setImmediate === 'function' - ? setImmediate - : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) } -var isFinished = onFinished.isFinished - -/** - * Create a minimal HTML document. - * - * @param {string} message - * @private - */ - -function createHtmlDocument (message) { - var body = escapeHtml(message) - .replace(NEWLINE_REGEXP, '
') - .replace(DOUBLE_SPACE_REGEXP, '  ') - - return '\n' + - '\n' + - '\n' + - '\n' + - 'Error\n' + - '\n' + - '\n' + - '
' + body + '
\n' + - '\n' + - '\n' -} - -/** - * Module exports. - * @public - */ - -module.exports = finalhandler - -/** - * Create a function to handle the final response. - * - * @param {Request} req - * @param {Response} res - * @param {Object} [options] - * @return {Function} - * @public - */ - -function finalhandler (req, res, options) { - var opts = options || {} - - // get environment - var env = opts.env || process.env.NODE_ENV || 'development' - - // get error callback - var onerror = opts.onerror - - return function (err) { - var headers - var msg - var status - - // ignore 404 on in-flight response - if (!err && headersSent(res)) { - debug('cannot 404 after headers sent') - return - } - - // unhandled error - if (err) { - // respect status code from error - status = getErrorStatusCode(err) - - if (status === undefined) { - // fallback to status code on response - status = getResponseStatusCode(res) - } else { - // respect headers from error - headers = getErrorHeaders(err) - } - - // get error message - msg = getErrorMessage(err, status, env) - } else { - // not found - status = 404 - msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req)) - } - - debug('default %s', status) - - // schedule onerror callback - if (err && onerror) { - defer(onerror, err, req, res) - } - - // cannot actually respond - if (headersSent(res)) { - debug('cannot %d after headers sent', status) - req.socket.destroy() - return - } - - // send response - send(req, res, status, headers, msg) - } -} - -/** - * Get headers from Error object. - * - * @param {Error} err - * @return {object} - * @private - */ - -function getErrorHeaders (err) { - if (!err.headers || typeof err.headers !== 'object') { - return undefined - } - - var headers = Object.create(null) - var keys = Object.keys(err.headers) - - for (var i = 0; i < keys.length; i++) { - var key = keys[i] - headers[key] = err.headers[key] - } - - return headers -} - -/** - * Get message from Error object, fallback to status message. - * - * @param {Error} err - * @param {number} status - * @param {string} env - * @return {string} - * @private - */ - -function getErrorMessage (err, status, env) { - var msg - - if (env !== 'production') { - // use err.stack, which typically includes err.message - msg = err.stack - - // fallback to err.toString() when possible - if (!msg && typeof err.toString === 'function') { - msg = err.toString() - } - } - - return msg || statuses[status] -} - -/** - * Get status code from Error object. - * - * @param {Error} err - * @return {number} - * @private - */ - -function getErrorStatusCode (err) { - // check err.status - if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) { - return err.status - } - - // check err.statusCode - if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) { - return err.statusCode - } - - return undefined -} - -/** - * Get resource name for the request. - * - * This is typically just the original pathname of the request - * but will fallback to "resource" is that cannot be determined. - * - * @param {IncomingMessage} req - * @return {string} - * @private - */ - -function getResourceName (req) { - try { - return parseUrl.original(req).pathname - } catch (e) { - return 'resource' - } -} - -/** - * Get status code from response. - * - * @param {OutgoingMessage} res - * @return {number} - * @private - */ - -function getResponseStatusCode (res) { - var status = res.statusCode - - // default status code to 500 if outside valid range - if (typeof status !== 'number' || status < 400 || status > 599) { - status = 500 - } - - return status -} - -/** - * Determine if the response headers have been sent. - * - * @param {object} res - * @returns {boolean} - * @private - */ - -function headersSent (res) { - return typeof res.headersSent !== 'boolean' - ? Boolean(res._header) - : res.headersSent -} - -/** - * Send response. - * - * @param {IncomingMessage} req - * @param {OutgoingMessage} res - * @param {number} status - * @param {object} headers - * @param {string} message - * @private - */ - -function send (req, res, status, headers, message) { - function write () { - // response body - var body = createHtmlDocument(message) - - // response status - res.statusCode = status - res.statusMessage = statuses[status] - - // response headers - setHeaders(res, headers) - - // security headers - res.setHeader('Content-Security-Policy', "default-src 'self'") - res.setHeader('X-Content-Type-Options', 'nosniff') - - // standard headers - res.setHeader('Content-Type', 'text/html; charset=utf-8') - res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8')) - - if (req.method === 'HEAD') { - res.end() - return - } - - res.end(body, 'utf8') - } - - if (isFinished(req)) { - write() - return - } - - // unpipe everything from the request - unpipe(req) - - // flush the request - onFinished(req, write) - req.resume() -} - -/** - * Set response headers from an object. - * - * @param {OutgoingMessage} res - * @param {object} headers - * @private - */ - -function setHeaders (res, headers) { - if (!headers) { - return - } - - var keys = Object.keys(headers) - for (var i = 0; i < keys.length; i++) { - var key = keys[i] - res.setHeader(key, headers[key]) - } -} diff --git a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/HISTORY.md b/truebit-implementation/node_modules/finalhandler/node_modules/statuses/HISTORY.md deleted file mode 100644 index 7b59790a..00000000 --- a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/HISTORY.md +++ /dev/null @@ -1,60 +0,0 @@ -1.4.0 / 2017-10-20 -================== - - * Add `STATUS_CODES` export - -1.3.1 / 2016-11-11 -================== - - * Fix return type in JSDoc - -1.3.0 / 2016-05-17 -================== - - * Add `421 Misdirected Request` - * perf: enable strict mode - -1.2.1 / 2015-02-01 -================== - - * Fix message for status 451 - - `451 Unavailable For Legal Reasons` - -1.2.0 / 2014-09-28 -================== - - * Add `208 Already Repored` - * Add `226 IM Used` - * Add `306 (Unused)` - * Add `415 Unable For Legal Reasons` - * Add `508 Loop Detected` - -1.1.1 / 2014-09-24 -================== - - * Add missing 308 to `codes.json` - -1.1.0 / 2014-09-21 -================== - - * Add `codes.json` for universal support - -1.0.4 / 2014-08-20 -================== - - * Package cleanup - -1.0.3 / 2014-06-08 -================== - - * Add 308 to `.redirect` category - -1.0.2 / 2014-03-13 -================== - - * Add `.retry` category - -1.0.1 / 2014-03-12 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/LICENSE b/truebit-implementation/node_modules/finalhandler/node_modules/statuses/LICENSE deleted file mode 100644 index 28a31618..00000000 --- a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/README.md b/truebit-implementation/node_modules/finalhandler/node_modules/statuses/README.md deleted file mode 100644 index 0fe5720d..00000000 --- a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# Statuses - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -HTTP status utility for node. - -This module provides a list of status codes and messages sourced from -a few different projects: - - * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) - * The [Node.js project](https://nodejs.org/) - * The [NGINX project](https://www.nginx.com/) - * The [Apache HTTP Server project](https://httpd.apache.org/) - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install statuses -``` - -## API - - - -```js -var status = require('statuses') -``` - -### var code = status(Integer || String) - -If `Integer` or `String` is a valid HTTP code or status message, then the -appropriate `code` will be returned. Otherwise, an error will be thrown. - - - -```js -status(403) // => 403 -status('403') // => 403 -status('forbidden') // => 403 -status('Forbidden') // => 403 -status(306) // throws, as it's not supported by node.js -``` - -### status.STATUS_CODES - -Returns an object which maps status codes to status messages, in -the same format as the -[Node.js http module](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). - -### status.codes - -Returns an array of all the status codes as `Integer`s. - -### var msg = status[code] - -Map of `code` to `status message`. `undefined` for invalid `code`s. - - - -```js -status[404] // => 'Not Found' -``` - -### var code = status[msg] - -Map of `status message` to `code`. `msg` can either be title-cased or -lower-cased. `undefined` for invalid `status message`s. - - - -```js -status['not found'] // => 404 -status['Not Found'] // => 404 -``` - -### status.redirect[code] - -Returns `true` if a status code is a valid redirect status. - - - -```js -status.redirect[200] // => undefined -status.redirect[301] // => true -``` - -### status.empty[code] - -Returns `true` if a status code expects an empty body. - - - -```js -status.empty[200] // => undefined -status.empty[204] // => true -status.empty[304] // => true -``` - -### status.retry[code] - -Returns `true` if you should retry the rest. - - - -```js -status.retry[501] // => undefined -status.retry[503] // => true -``` - -[npm-image]: https://img.shields.io/npm/v/statuses.svg -[npm-url]: https://npmjs.org/package/statuses -[node-version-image]: https://img.shields.io/node/v/statuses.svg -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/statuses.svg -[travis-url]: https://travis-ci.org/jshttp/statuses -[coveralls-image]: https://img.shields.io/coveralls/jshttp/statuses.svg -[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master -[downloads-image]: https://img.shields.io/npm/dm/statuses.svg -[downloads-url]: https://npmjs.org/package/statuses diff --git a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/codes.json b/truebit-implementation/node_modules/finalhandler/node_modules/statuses/codes.json deleted file mode 100644 index 66f70e35..00000000 --- a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/codes.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "100": "Continue", - "101": "Switching Protocols", - "102": "Processing", - "200": "OK", - "201": "Created", - "202": "Accepted", - "203": "Non-Authoritative Information", - "204": "No Content", - "205": "Reset Content", - "206": "Partial Content", - "207": "Multi-Status", - "208": "Already Reported", - "226": "IM Used", - "300": "Multiple Choices", - "301": "Moved Permanently", - "302": "Found", - "303": "See Other", - "304": "Not Modified", - "305": "Use Proxy", - "306": "(Unused)", - "307": "Temporary Redirect", - "308": "Permanent Redirect", - "400": "Bad Request", - "401": "Unauthorized", - "402": "Payment Required", - "403": "Forbidden", - "404": "Not Found", - "405": "Method Not Allowed", - "406": "Not Acceptable", - "407": "Proxy Authentication Required", - "408": "Request Timeout", - "409": "Conflict", - "410": "Gone", - "411": "Length Required", - "412": "Precondition Failed", - "413": "Payload Too Large", - "414": "URI Too Long", - "415": "Unsupported Media Type", - "416": "Range Not Satisfiable", - "417": "Expectation Failed", - "418": "I'm a teapot", - "421": "Misdirected Request", - "422": "Unprocessable Entity", - "423": "Locked", - "424": "Failed Dependency", - "425": "Unordered Collection", - "426": "Upgrade Required", - "428": "Precondition Required", - "429": "Too Many Requests", - "431": "Request Header Fields Too Large", - "451": "Unavailable For Legal Reasons", - "500": "Internal Server Error", - "501": "Not Implemented", - "502": "Bad Gateway", - "503": "Service Unavailable", - "504": "Gateway Timeout", - "505": "HTTP Version Not Supported", - "506": "Variant Also Negotiates", - "507": "Insufficient Storage", - "508": "Loop Detected", - "509": "Bandwidth Limit Exceeded", - "510": "Not Extended", - "511": "Network Authentication Required" -} diff --git a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/index.js b/truebit-implementation/node_modules/finalhandler/node_modules/statuses/index.js deleted file mode 100644 index 4df469a0..00000000 --- a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/*! - * statuses - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var codes = require('./codes.json') - -/** - * Module exports. - * @public - */ - -module.exports = status - -// status code to message map -status.STATUS_CODES = codes - -// array of status codes -status.codes = populateStatusesMap(status, codes) - -// status codes for redirects -status.redirect = { - 300: true, - 301: true, - 302: true, - 303: true, - 305: true, - 307: true, - 308: true -} - -// status codes for empty bodies -status.empty = { - 204: true, - 205: true, - 304: true -} - -// status codes for when you should retry the request -status.retry = { - 502: true, - 503: true, - 504: true -} - -/** - * Populate the statuses map for given codes. - * @private - */ - -function populateStatusesMap (statuses, codes) { - var arr = [] - - Object.keys(codes).forEach(function forEachCode (code) { - var message = codes[code] - var status = Number(code) - - // Populate properties - statuses[status] = message - statuses[message] = status - statuses[message.toLowerCase()] = status - - // Add to array - arr.push(status) - }) - - return arr -} - -/** - * Get the status code. - * - * Given a number, this will throw if it is not a known status - * code, otherwise the code will be returned. Given a string, - * the string will be parsed for a number and return the code - * if valid, otherwise will lookup the code assuming this is - * the status message. - * - * @param {string|number} code - * @returns {number} - * @public - */ - -function status (code) { - if (typeof code === 'number') { - if (!status[code]) throw new Error('invalid status code: ' + code) - return code - } - - if (typeof code !== 'string') { - throw new TypeError('code must be a number or string') - } - - // '403' - var n = parseInt(code, 10) - if (!isNaN(n)) { - if (!status[n]) throw new Error('invalid status code: ' + n) - return n - } - - n = status[code.toLowerCase()] - if (!n) throw new Error('invalid status message: "' + code + '"') - return n -} diff --git a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/package.json b/truebit-implementation/node_modules/finalhandler/node_modules/statuses/package.json deleted file mode 100644 index 65bfe17f..00000000 --- a/truebit-implementation/node_modules/finalhandler/node_modules/statuses/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "statuses@~1.4.0", - "_id": "statuses@1.4.0", - "_inBundle": false, - "_integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "_location": "/finalhandler/statuses", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "statuses@~1.4.0", - "name": "statuses", - "escapedName": "statuses", - "rawSpec": "~1.4.0", - "saveSpec": null, - "fetchSpec": "~1.4.0" - }, - "_requiredBy": [ - "/finalhandler" - ], - "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "_shasum": "bb73d446da2796106efcc1b601a253d6c46bd087", - "_spec": "statuses@~1.4.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/finalhandler", - "bugs": { - "url": "https://github.com/jshttp/statuses/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "deprecated": false, - "description": "HTTP status utility", - "devDependencies": { - "csv-parse": "1.2.4", - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.8.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "5.2.0", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5", - "raw-body": "2.3.2", - "stream-to-array": "2.3.0" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "index.js", - "codes.json", - "LICENSE" - ], - "homepage": "https://github.com/jshttp/statuses#readme", - "keywords": [ - "http", - "status", - "code" - ], - "license": "MIT", - "name": "statuses", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/statuses.git" - }, - "scripts": { - "build": "node scripts/build.js", - "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "update": "npm run fetch && npm run build" - }, - "version": "1.4.0" -} diff --git a/truebit-implementation/node_modules/finalhandler/package.json b/truebit-implementation/node_modules/finalhandler/package.json deleted file mode 100644 index ee7559b5..00000000 --- a/truebit-implementation/node_modules/finalhandler/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_from": "finalhandler@1.1.1", - "_id": "finalhandler@1.1.1", - "_inBundle": false, - "_integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "_location": "/finalhandler", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "finalhandler@1.1.1", - "name": "finalhandler", - "escapedName": "finalhandler", - "rawSpec": "1.1.1", - "saveSpec": null, - "fetchSpec": "1.1.1" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "_shasum": "eebf4ed840079c83f4249038c9d703008301b105", - "_spec": "finalhandler@1.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - "bugs": { - "url": "https://github.com/pillarjs/finalhandler/issues" - }, - "bundleDependencies": false, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "deprecated": false, - "description": "Node.js final http responder", - "devDependencies": { - "eslint": "4.18.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.9.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "2.5.3", - "readable-stream": "2.3.4", - "safe-buffer": "5.1.1", - "supertest": "1.1.0" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "index.js" - ], - "homepage": "https://github.com/pillarjs/finalhandler#readme", - "license": "MIT", - "name": "finalhandler", - "repository": { - "type": "git", - "url": "git+https://github.com/pillarjs/finalhandler.git" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" - }, - "version": "1.1.1" -} diff --git a/truebit-implementation/node_modules/for-each/.editorconfig b/truebit-implementation/node_modules/for-each/.editorconfig deleted file mode 100644 index ac29adef..00000000 --- a/truebit-implementation/node_modules/for-each/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 120 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/truebit-implementation/node_modules/for-each/.eslintrc b/truebit-implementation/node_modules/for-each/.eslintrc deleted file mode 100644 index 2b8ea2a3..00000000 --- a/truebit-implementation/node_modules/for-each/.eslintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "eqeqeq": [2, "allow-null"], - "func-name-matching": 0, - "indent": [2, 4], - "max-nested-callbacks": [2, 3], - "max-params": [2, 3], - "max-statements": [2, 14], - "no-invalid-this": [1], - "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], - } -} diff --git a/truebit-implementation/node_modules/for-each/.travis.yml b/truebit-implementation/node_modules/for-each/.travis.yml deleted file mode 100644 index e9e54bda..00000000 --- a/truebit-implementation/node_modules/for-each/.travis.yml +++ /dev/null @@ -1,45 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "8" - - "7" - - "6" - - "5" - - "4" - - "iojs" - - "0.12" - - "0.10" - - "0.8" -before_install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi' - - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; else npm install -g npm; fi; fi' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' - - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' - - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' - - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' -sudo: false -env: - - TEST=true -matrix: - fast_finish: true - include: - - node_js: "node" - env: PRETEST=true - - node_js: "node" - env: POSTTEST=true - - node_js: "0.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.4" - env: TEST=true ALLOW_FAILURE=true - allow_failures: - - os: osx - - env: TEST=true ALLOW_FAILURE=true - - env: COVERAGE=true diff --git a/truebit-implementation/node_modules/for-each/LICENSE b/truebit-implementation/node_modules/for-each/LICENSE deleted file mode 100644 index 53f19aa7..00000000 --- a/truebit-implementation/node_modules/for-each/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/for-each/README.md b/truebit-implementation/node_modules/for-each/README.md deleted file mode 100644 index 16dfbb6e..00000000 --- a/truebit-implementation/node_modules/for-each/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# for-each [![build status][1]][2] - -[![browser support][3]][4] - -A better forEach. - -## Example - -Like `Array.prototype.forEach` but works on objects. - -```js -var forEach = require("for-each") - -forEach({ key: "value" }, function (value, key, object) { - /* code */ -}) -``` - -As a bonus, it's also a perfectly function shim/polyfill for arrays too! - -```js -var forEach = require("for-each") - -forEach([1, 2, 3], function (value, index, array) { - /* code */ -}) -``` - -## Installation - -`npm install for-each` - -## Contributors - - - Raynos - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Raynos/for-each.png - [2]: http://travis-ci.org/Raynos/for-each - [3]: https://ci.testling.com/Raynos/for-each.png - [4]: https://ci.testling.com/Raynos/for-each - diff --git a/truebit-implementation/node_modules/for-each/index.js b/truebit-implementation/node_modules/for-each/index.js deleted file mode 100644 index 609ef9fc..00000000 --- a/truebit-implementation/node_modules/for-each/index.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -var isCallable = require('is-callable'); - -var toStr = Object.prototype.toString; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -var forEachArray = function forEachArray(array, iterator, receiver) { - for (var i = 0, len = array.length; i < len; i++) { - if (hasOwnProperty.call(array, i)) { - if (receiver == null) { - iterator(array[i], i, array); - } else { - iterator.call(receiver, array[i], i, array); - } - } - } -}; - -var forEachString = function forEachString(string, iterator, receiver) { - for (var i = 0, len = string.length; i < len; i++) { - // no such thing as a sparse string. - if (receiver == null) { - iterator(string.charAt(i), i, string); - } else { - iterator.call(receiver, string.charAt(i), i, string); - } - } -}; - -var forEachObject = function forEachObject(object, iterator, receiver) { - for (var k in object) { - if (hasOwnProperty.call(object, k)) { - if (receiver == null) { - iterator(object[k], k, object); - } else { - iterator.call(receiver, object[k], k, object); - } - } - } -}; - -var forEach = function forEach(list, iterator, thisArg) { - if (!isCallable(iterator)) { - throw new TypeError('iterator must be a function'); - } - - var receiver; - if (arguments.length >= 3) { - receiver = thisArg; - } - - if (toStr.call(list) === '[object Array]') { - forEachArray(list, iterator, receiver); - } else if (typeof list === 'string') { - forEachString(list, iterator, receiver); - } else { - forEachObject(list, iterator, receiver); - } -}; - -module.exports = forEach; diff --git a/truebit-implementation/node_modules/for-each/package.json b/truebit-implementation/node_modules/for-each/package.json deleted file mode 100644 index 7253a3cd..00000000 --- a/truebit-implementation/node_modules/for-each/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_from": "for-each@^0.3.2", - "_id": "for-each@0.3.3", - "_inBundle": false, - "_integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "_location": "/for-each", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "for-each@^0.3.2", - "name": "for-each", - "escapedName": "for-each", - "rawSpec": "^0.3.2", - "saveSpec": null, - "fetchSpec": "^0.3.2" - }, - "_requiredBy": [ - "/parse-headers" - ], - "_resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "_shasum": "69b447e88a0a5d32c3e7084f3f1710034b21376e", - "_spec": "for-each@^0.3.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/parse-headers", - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "bugs": { - "url": "https://github.com/Raynos/for-each/issues", - "email": "raynos2@gmail.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "dependencies": { - "is-callable": "^1.1.3" - }, - "deprecated": false, - "description": "A better forEach", - "devDependencies": { - "@ljharb/eslint-config": "^12.2.1", - "eslint": "^4.19.1", - "nsp": "^3.2.1", - "tape": "^4.9.0" - }, - "homepage": "https://github.com/Raynos/for-each", - "keywords": [], - "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/for-each/raw/master/LICENSE" - } - ], - "main": "index", - "name": "for-each", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/for-each.git" - }, - "scripts": { - "lint": "eslint *.js test/*.js", - "posttest": "npm run security", - "pretest": "npm run lint", - "security": "nsp check", - "test": "npm run tests-only", - "tests-only": "node test/test" - }, - "testling": { - "files": "test/test.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "0.3.3" -} diff --git a/truebit-implementation/node_modules/for-each/test/.eslintrc b/truebit-implementation/node_modules/for-each/test/.eslintrc deleted file mode 100644 index a6c04b91..00000000 --- a/truebit-implementation/node_modules/for-each/test/.eslintrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "rules": { - "array-bracket-newline": 0, - "array-element-newline": 0, - "max-statements-per-line": 0, - "no-magic-numbers": 0, - } -} diff --git a/truebit-implementation/node_modules/for-each/test/test.js b/truebit-implementation/node_modules/for-each/test/test.js deleted file mode 100644 index 8c937872..00000000 --- a/truebit-implementation/node_modules/for-each/test/test.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -/* globals window */ - -var test = require('tape'); -var forEach = require('../'); - -test('forEach calls each iterator', function (t) { - var count = 0; - t.plan(4); - forEach({ a: 1, b: 2 }, function (value, key) { - if (count === 0) { - t.equal(value, 1); - t.equal(key, 'a'); - } else { - t.equal(value, 2); - t.equal(key, 'b'); - } - count += 1; - }); -}); - -test('forEach calls iterator with correct this value', function (t) { - var thisValue = {}; - - t.plan(1); - - forEach([0], function () { - t.equal(this, thisValue); - }, thisValue); -}); - -test('second argument: iterator', function (t) { - var arr = []; - t['throws'](function () { forEach(arr); }, TypeError, 'undefined is not a function'); - t['throws'](function () { forEach(arr, null); }, TypeError, 'null is not a function'); - t['throws'](function () { forEach(arr, ''); }, TypeError, 'string is not a function'); - t['throws'](function () { forEach(arr, /a/); }, TypeError, 'regex is not a function'); - t['throws'](function () { forEach(arr, true); }, TypeError, 'true is not a function'); - t['throws'](function () { forEach(arr, false); }, TypeError, 'false is not a function'); - t['throws'](function () { forEach(arr, NaN); }, TypeError, 'NaN is not a function'); - t['throws'](function () { forEach(arr, 42); }, TypeError, '42 is not a function'); - t.doesNotThrow(function () { forEach(arr, function () {}); }, 'function is a function'); - t.doesNotThrow(function () { forEach(arr, setTimeout); }, 'setTimeout is a function'); - if (typeof window !== 'undefined') { - t.doesNotThrow(function () { forEach(arr, window.alert); }, 'alert is a function'); - } - t.end(); -}); - -test('array', function (t) { - var arr = [1, 2, 3]; - - t.test('iterates over every item', function (st) { - var index = 0; - forEach(arr, function () { index += 1; }); - st.equal(index, arr.length, 'iterates ' + arr.length + ' times'); - st.end(); - }); - - t.test('first iterator argument', function (st) { - var index = 0; - st.plan(arr.length); - forEach(arr, function (item) { - st.equal(arr[index], item, 'item ' + index + ' is passed as first argument'); - index += 1; - }); - st.end(); - }); - - t.test('second iterator argument', function (st) { - var counter = 0; - st.plan(arr.length); - forEach(arr, function (item, index) { - st.equal(counter, index, 'index ' + index + ' is passed as second argument'); - counter += 1; - }); - st.end(); - }); - - t.test('third iterator argument', function (st) { - st.plan(arr.length); - forEach(arr, function (item, index, array) { - st.deepEqual(arr, array, 'array is passed as third argument'); - }); - st.end(); - }); - - t.test('context argument', function (st) { - var context = {}; - forEach([], function () { - st.equal(this, context, '"this" is the passed context'); - }, context); - st.end(); - }); - - t.end(); -}); - -test('object', function (t) { - var obj = { - a: 1, - b: 2, - c: 3 - }; - var keys = ['a', 'b', 'c']; - - var F = function F() { - this.a = 1; - this.b = 2; - }; - F.prototype.c = 3; - var fKeys = ['a', 'b']; - - t.test('iterates over every object literal key', function (st) { - var counter = 0; - forEach(obj, function () { counter += 1; }); - st.equal(counter, keys.length, 'iterated ' + counter + ' times'); - st.end(); - }); - - t.test('iterates only over own keys', function (st) { - var counter = 0; - forEach(new F(), function () { counter += 1; }); - st.equal(counter, fKeys.length, 'iterated ' + fKeys.length + ' times'); - st.end(); - }); - - t.test('first iterator argument', function (st) { - var index = 0; - st.plan(keys.length); - forEach(obj, function (item) { - st.equal(obj[keys[index]], item, 'item at key ' + keys[index] + ' is passed as first argument'); - index += 1; - }); - st.end(); - }); - - t.test('second iterator argument', function (st) { - var counter = 0; - st.plan(keys.length); - forEach(obj, function (item, key) { - st.equal(keys[counter], key, 'key ' + key + ' is passed as second argument'); - counter += 1; - }); - st.end(); - }); - - t.test('third iterator argument', function (st) { - st.plan(keys.length); - forEach(obj, function (item, key, object) { - st.deepEqual(obj, object, 'object is passed as third argument'); - }); - st.end(); - }); - - t.test('context argument', function (st) { - var context = {}; - forEach({}, function () { - st.equal(this, context, '"this" is the passed context'); - }, context); - st.end(); - }); - - t.end(); -}); - -test('string', function (t) { - var str = 'str'; - t.test('second iterator argument', function (st) { - var counter = 0; - st.plan((str.length * 2) + 1); - forEach(str, function (item, index) { - st.equal(counter, index, 'index ' + index + ' is passed as second argument'); - st.equal(str.charAt(index), item); - counter += 1; - }); - st.equal(counter, str.length, 'iterates ' + str.length + ' times'); - st.end(); - }); - t.end(); -}); diff --git a/truebit-implementation/node_modules/forever-agent/LICENSE b/truebit-implementation/node_modules/forever-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/truebit-implementation/node_modules/forever-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/truebit-implementation/node_modules/forever-agent/README.md b/truebit-implementation/node_modules/forever-agent/README.md deleted file mode 100644 index 9d5b6634..00000000 --- a/truebit-implementation/node_modules/forever-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -forever-agent -============= - -HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module. diff --git a/truebit-implementation/node_modules/forever-agent/index.js b/truebit-implementation/node_modules/forever-agent/index.js deleted file mode 100644 index 416c7abd..00000000 --- a/truebit-implementation/node_modules/forever-agent/index.js +++ /dev/null @@ -1,138 +0,0 @@ -module.exports = ForeverAgent -ForeverAgent.SSL = ForeverAgentSSL - -var util = require('util') - , Agent = require('http').Agent - , net = require('net') - , tls = require('tls') - , AgentSSL = require('https').Agent - -function getConnectionName(host, port) { - var name = '' - if (typeof host === 'string') { - name = host + ':' + port - } else { - // For node.js v012.0 and iojs-v1.5.1, host is an object. And any existing localAddress is part of the connection name. - name = host.host + ':' + host.port + ':' + (host.localAddress ? (host.localAddress + ':') : ':') - } - return name -} - -function ForeverAgent(options) { - var self = this - self.options = options || {} - self.requests = {} - self.sockets = {} - self.freeSockets = {} - self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets - self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets - self.on('free', function(socket, host, port) { - var name = getConnectionName(host, port) - - if (self.requests[name] && self.requests[name].length) { - self.requests[name].shift().onSocket(socket) - } else if (self.sockets[name].length < self.minSockets) { - if (!self.freeSockets[name]) self.freeSockets[name] = [] - self.freeSockets[name].push(socket) - - // if an error happens while we don't use the socket anyway, meh, throw the socket away - var onIdleError = function() { - socket.destroy() - } - socket._onIdleError = onIdleError - socket.on('error', onIdleError) - } else { - // If there are no pending requests just destroy the - // socket and it will get removed from the pool. This - // gets us out of timeout issues and allows us to - // default to Connection:keep-alive. - socket.destroy() - } - }) - -} -util.inherits(ForeverAgent, Agent) - -ForeverAgent.defaultMinSockets = 5 - - -ForeverAgent.prototype.createConnection = net.createConnection -ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest -ForeverAgent.prototype.addRequest = function(req, host, port) { - var name = getConnectionName(host, port) - - if (typeof host !== 'string') { - var options = host - port = options.port - host = options.host - } - - if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) { - var idleSocket = this.freeSockets[name].pop() - idleSocket.removeListener('error', idleSocket._onIdleError) - delete idleSocket._onIdleError - req._reusedSocket = true - req.onSocket(idleSocket) - } else { - this.addRequestNoreuse(req, host, port) - } -} - -ForeverAgent.prototype.removeSocket = function(s, name, host, port) { - if (this.sockets[name]) { - var index = this.sockets[name].indexOf(s) - if (index !== -1) { - this.sockets[name].splice(index, 1) - } - } else if (this.sockets[name] && this.sockets[name].length === 0) { - // don't leak - delete this.sockets[name] - delete this.requests[name] - } - - if (this.freeSockets[name]) { - var index = this.freeSockets[name].indexOf(s) - if (index !== -1) { - this.freeSockets[name].splice(index, 1) - if (this.freeSockets[name].length === 0) { - delete this.freeSockets[name] - } - } - } - - if (this.requests[name] && this.requests[name].length) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(name, host, port).emit('free') - } -} - -function ForeverAgentSSL (options) { - ForeverAgent.call(this, options) -} -util.inherits(ForeverAgentSSL, ForeverAgent) - -ForeverAgentSSL.prototype.createConnection = createConnectionSSL -ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest - -function createConnectionSSL (port, host, options) { - if (typeof port === 'object') { - options = port; - } else if (typeof host === 'object') { - options = host; - } else if (typeof options === 'object') { - options = options; - } else { - options = {}; - } - - if (typeof port === 'number') { - options.port = port; - } - - if (typeof host === 'string') { - options.host = host; - } - - return tls.connect(options); -} diff --git a/truebit-implementation/node_modules/forever-agent/package.json b/truebit-implementation/node_modules/forever-agent/package.json deleted file mode 100644 index 04c95753..00000000 --- a/truebit-implementation/node_modules/forever-agent/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_from": "forever-agent@~0.6.1", - "_id": "forever-agent@0.6.1", - "_inBundle": false, - "_integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "_location": "/forever-agent", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "forever-agent@~0.6.1", - "name": "forever-agent", - "escapedName": "forever-agent", - "rawSpec": "~0.6.1", - "saveSpec": null, - "fetchSpec": "~0.6.1" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "_shasum": "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91", - "_spec": "forever-agent@~0.6.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/forever-agent/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/mikeal/forever-agent#readme", - "license": "Apache-2.0", - "main": "index.js", - "name": "forever-agent", - "optionalDependencies": {}, - "repository": { - "url": "git+https://github.com/mikeal/forever-agent.git" - }, - "version": "0.6.1" -} diff --git a/truebit-implementation/node_modules/form-data/License b/truebit-implementation/node_modules/form-data/License deleted file mode 100644 index c7ff12a2..00000000 --- a/truebit-implementation/node_modules/form-data/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - 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. diff --git a/truebit-implementation/node_modules/form-data/README.md b/truebit-implementation/node_modules/form-data/README.md deleted file mode 100644 index d7809364..00000000 --- a/truebit-implementation/node_modules/form-data/README.md +++ /dev/null @@ -1,234 +0,0 @@ -# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) - -A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. - -The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. - -[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface - -[![Linux Build](https://img.shields.io/travis/form-data/form-data/v2.3.3.svg?label=linux:4.x-9.x)](https://travis-ci.org/form-data/form-data) -[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v2.3.3.svg?label=macos:4.x-9.x)](https://travis-ci.org/form-data/form-data) -[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/form-data/v2.3.3.svg?label=windows:4.x-9.x)](https://ci.appveyor.com/project/alexindigo/form-data) - -[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v2.3.3.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) -[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) -[![bitHound Overall Score](https://www.bithound.io/github/form-data/form-data/badges/score.svg)](https://www.bithound.io/github/form-data/form-data) - -## Install - -``` -npm install --save form-data -``` - -## Usage - -In this example we are constructing a form with 3 fields that contain a string, -a buffer and a file stream. - -``` javascript -var FormData = require('form-data'); -var fs = require('fs'); - -var form = new FormData(); -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); -``` - -Also you can use http-response stream: - -``` javascript -var FormData = require('form-data'); -var http = require('http'); - -var form = new FormData(); - -http.request('http://nodejs.org/images/logo.png', function(response) { - form.append('my_field', 'my value'); - form.append('my_buffer', new Buffer(10)); - form.append('my_logo', response); -}); -``` - -Or @mikeal's [request](https://github.com/request/request) stream: - -``` javascript -var FormData = require('form-data'); -var request = require('request'); - -var form = new FormData(); - -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_logo', request('http://nodejs.org/images/logo.png')); -``` - -In order to submit this form to a web application, call ```submit(url, [callback])``` method: - -``` javascript -form.submit('http://example.org/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); -}); - -``` - -For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. - -### Custom options - -You can provide custom options, such as `maxDataSize`: - -``` javascript -var FormData = require('form-data'); - -var form = new FormData({ maxDataSize: 20971520 }); -form.append('my_field', 'my value'); -form.append('my_buffer', /* something big */); -``` - -List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) - -### Alternative submission methods - -You can use node's http client interface: - -``` javascript -var http = require('http'); - -var request = http.request({ - method: 'post', - host: 'example.org', - path: '/upload', - headers: form.getHeaders() -}); - -form.pipe(request); - -request.on('response', function(res) { - console.log(res.statusCode); -}); -``` - -Or if you would prefer the `'Content-Length'` header to be set for you: - -``` javascript -form.submit('example.org/upload', function(err, res) { - console.log(res.statusCode); -}); -``` - -To use custom headers and pre-known length in parts: - -``` javascript -var CRLF = '\r\n'; -var form = new FormData(); - -var options = { - header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, - knownLength: 1 -}; - -form.append('my_buffer', buffer, options); - -form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); -}); -``` - -Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: - -``` javascript -someModule.stream(function(err, stdout, stderr) { - if (err) throw err; - - var form = new FormData(); - - form.append('file', stdout, { - filename: 'unicycle.jpg', // ... or: - filepath: 'photos/toys/unicycle.jpg', - contentType: 'image/jpeg', - knownLength: 19806 - }); - - form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); - }); -}); -``` - -The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). - -For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: - -``` javascript -form.submit({ - host: 'example.com', - path: '/probably.php?extra=params', - auth: 'username:password' -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: - -``` javascript -form.submit({ - host: 'example.com', - path: '/surelynot.php', - headers: {'x-test-header': 'test-header-value'} -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -### Integration with other libraries - -#### Request - -Form submission using [request](https://github.com/request/request): - -```javascript -var formData = { - my_field: 'my_value', - my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), -}; - -request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); -}); -``` - -For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). - -#### node-fetch - -You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): - -```javascript -var form = new FormData(); - -form.append('a', 1); - -fetch('http://example.com', { method: 'POST', body: form }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); -``` - -## Notes - -- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. -- Starting version `2.x` FormData has dropped support for `node@0.10.x`. - -## License - -Form-Data is released under the [MIT](License) license. diff --git a/truebit-implementation/node_modules/form-data/README.md.bak b/truebit-implementation/node_modules/form-data/README.md.bak deleted file mode 100644 index 0524d602..00000000 --- a/truebit-implementation/node_modules/form-data/README.md.bak +++ /dev/null @@ -1,234 +0,0 @@ -# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) - -A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. - -The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. - -[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface - -[![Linux Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=linux:4.x-9.x)](https://travis-ci.org/form-data/form-data) -[![MacOS Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=macos:4.x-9.x)](https://travis-ci.org/form-data/form-data) -[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/form-data/master.svg?label=windows:4.x-9.x)](https://ci.appveyor.com/project/alexindigo/form-data) - -[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) -[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) -[![bitHound Overall Score](https://www.bithound.io/github/form-data/form-data/badges/score.svg)](https://www.bithound.io/github/form-data/form-data) - -## Install - -``` -npm install --save form-data -``` - -## Usage - -In this example we are constructing a form with 3 fields that contain a string, -a buffer and a file stream. - -``` javascript -var FormData = require('form-data'); -var fs = require('fs'); - -var form = new FormData(); -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); -``` - -Also you can use http-response stream: - -``` javascript -var FormData = require('form-data'); -var http = require('http'); - -var form = new FormData(); - -http.request('http://nodejs.org/images/logo.png', function(response) { - form.append('my_field', 'my value'); - form.append('my_buffer', new Buffer(10)); - form.append('my_logo', response); -}); -``` - -Or @mikeal's [request](https://github.com/request/request) stream: - -``` javascript -var FormData = require('form-data'); -var request = require('request'); - -var form = new FormData(); - -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_logo', request('http://nodejs.org/images/logo.png')); -``` - -In order to submit this form to a web application, call ```submit(url, [callback])``` method: - -``` javascript -form.submit('http://example.org/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); -}); - -``` - -For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. - -### Custom options - -You can provide custom options, such as `maxDataSize`: - -``` javascript -var FormData = require('form-data'); - -var form = new FormData({ maxDataSize: 20971520 }); -form.append('my_field', 'my value'); -form.append('my_buffer', /* something big */); -``` - -List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) - -### Alternative submission methods - -You can use node's http client interface: - -``` javascript -var http = require('http'); - -var request = http.request({ - method: 'post', - host: 'example.org', - path: '/upload', - headers: form.getHeaders() -}); - -form.pipe(request); - -request.on('response', function(res) { - console.log(res.statusCode); -}); -``` - -Or if you would prefer the `'Content-Length'` header to be set for you: - -``` javascript -form.submit('example.org/upload', function(err, res) { - console.log(res.statusCode); -}); -``` - -To use custom headers and pre-known length in parts: - -``` javascript -var CRLF = '\r\n'; -var form = new FormData(); - -var options = { - header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, - knownLength: 1 -}; - -form.append('my_buffer', buffer, options); - -form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); -}); -``` - -Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: - -``` javascript -someModule.stream(function(err, stdout, stderr) { - if (err) throw err; - - var form = new FormData(); - - form.append('file', stdout, { - filename: 'unicycle.jpg', // ... or: - filepath: 'photos/toys/unicycle.jpg', - contentType: 'image/jpeg', - knownLength: 19806 - }); - - form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); - }); -}); -``` - -The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). - -For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: - -``` javascript -form.submit({ - host: 'example.com', - path: '/probably.php?extra=params', - auth: 'username:password' -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: - -``` javascript -form.submit({ - host: 'example.com', - path: '/surelynot.php', - headers: {'x-test-header': 'test-header-value'} -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -### Integration with other libraries - -#### Request - -Form submission using [request](https://github.com/request/request): - -```javascript -var formData = { - my_field: 'my_value', - my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), -}; - -request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); -}); -``` - -For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). - -#### node-fetch - -You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): - -```javascript -var form = new FormData(); - -form.append('a', 1); - -fetch('http://example.com', { method: 'POST', body: form }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); -``` - -## Notes - -- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. -- Starting version `2.x` FormData has dropped support for `node@0.10.x`. - -## License - -Form-Data is released under the [MIT](License) license. diff --git a/truebit-implementation/node_modules/form-data/lib/browser.js b/truebit-implementation/node_modules/form-data/lib/browser.js deleted file mode 100644 index 09e7c70e..00000000 --- a/truebit-implementation/node_modules/form-data/lib/browser.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-env browser */ -module.exports = typeof self == 'object' ? self.FormData : window.FormData; diff --git a/truebit-implementation/node_modules/form-data/lib/form_data.js b/truebit-implementation/node_modules/form-data/lib/form_data.js deleted file mode 100644 index 3a1bb82b..00000000 --- a/truebit-implementation/node_modules/form-data/lib/form_data.js +++ /dev/null @@ -1,457 +0,0 @@ -var CombinedStream = require('combined-stream'); -var util = require('util'); -var path = require('path'); -var http = require('http'); -var https = require('https'); -var parseUrl = require('url').parse; -var fs = require('fs'); -var mime = require('mime-types'); -var asynckit = require('asynckit'); -var populate = require('./populate.js'); - -// Public API -module.exports = FormData; - -// make it a Stream -util.inherits(FormData, CombinedStream); - -/** - * Create readable "multipart/form-data" streams. - * Can be used to submit forms - * and file uploads to other web applications. - * - * @constructor - * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream - */ -function FormData(options) { - if (!(this instanceof FormData)) { - return new FormData(); - } - - this._overheadLength = 0; - this._valueLength = 0; - this._valuesToMeasure = []; - - CombinedStream.call(this); - - options = options || {}; - for (var option in options) { - this[option] = options[option]; - } -} - -FormData.LINE_BREAK = '\r\n'; -FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; - -FormData.prototype.append = function(field, value, options) { - - options = options || {}; - - // allow filename as single option - if (typeof options == 'string') { - options = {filename: options}; - } - - var append = CombinedStream.prototype.append.bind(this); - - // all that streamy business can't handle numbers - if (typeof value == 'number') { - value = '' + value; - } - - // https://github.com/felixge/node-form-data/issues/38 - if (util.isArray(value)) { - // Please convert your array into string - // the way web server expects it - this._error(new Error('Arrays are not supported.')); - return; - } - - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(); - - append(header); - append(value); - append(footer); - - // pass along options.knownLength - this._trackLength(header, value, options); -}; - -FormData.prototype._trackLength = function(header, value, options) { - var valueLength = 0; - - // used w/ getLengthSync(), when length is known. - // e.g. for streaming directly from a remote server, - // w/ a known file a size, and not wanting to wait for - // incoming file to finish to get its size. - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === 'string') { - valueLength = Buffer.byteLength(value); - } - - this._valueLength += valueLength; - - // @check why add CRLF? does this account for custom/multiple CRLFs? - this._overheadLength += - Buffer.byteLength(header) + - FormData.LINE_BREAK.length; - - // empty or either doesn't have path or not an http response - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { - return; - } - - // no need to bother with the length - if (!options.knownLength) { - this._valuesToMeasure.push(value); - } -}; - -FormData.prototype._lengthRetriever = function(value, callback) { - - if (value.hasOwnProperty('fd')) { - - // take read range into a account - // `end` = Infinity –> read file till the end - // - // TODO: Looks like there is bug in Node fs.createReadStream - // it doesn't respect `end` options without `start` options - // Fix it when node fixes it. - // https://github.com/joyent/node/issues/7819 - if (value.end != undefined && value.end != Infinity && value.start != undefined) { - - // when end specified - // no need to calculate range - // inclusive, starts with 0 - callback(null, value.end + 1 - (value.start ? value.start : 0)); - - // not that fast snoopy - } else { - // still need to fetch file size from fs - fs.stat(value.path, function(err, stat) { - - var fileSize; - - if (err) { - callback(err); - return; - } - - // update final size based on the range options - fileSize = stat.size - (value.start ? value.start : 0); - callback(null, fileSize); - }); - } - - // or http response - } else if (value.hasOwnProperty('httpVersion')) { - callback(null, +value.headers['content-length']); - - // or request stream http://github.com/mikeal/request - } else if (value.hasOwnProperty('httpModule')) { - // wait till response come back - value.on('response', function(response) { - value.pause(); - callback(null, +response.headers['content-length']); - }); - value.resume(); - - // something else - } else { - callback('Unknown stream'); - } -}; - -FormData.prototype._multiPartHeader = function(field, value, options) { - // custom header specified (as string)? - // it becomes responsible for boundary - // (e.g. to handle extra CRLFs on .NET servers) - if (typeof options.header == 'string') { - return options.header; - } - - var contentDisposition = this._getContentDisposition(value, options); - var contentType = this._getContentType(value, options); - - var contents = ''; - var headers = { - // add custom disposition as third element or keep it two elements if not - 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), - // if no content type. allow it to be empty array - 'Content-Type': [].concat(contentType || []) - }; - - // allow custom headers. - if (typeof options.header == 'object') { - populate(headers, options.header); - } - - var header; - for (var prop in headers) { - if (!headers.hasOwnProperty(prop)) continue; - header = headers[prop]; - - // skip nullish headers. - if (header == null) { - continue; - } - - // convert all headers to arrays. - if (!Array.isArray(header)) { - header = [header]; - } - - // add non-empty headers. - if (header.length) { - contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; - } - } - - return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; -}; - -FormData.prototype._getContentDisposition = function(value, options) { - - var filename - , contentDisposition - ; - - if (typeof options.filepath === 'string') { - // custom filepath for relative paths - filename = path.normalize(options.filepath).replace(/\\/g, '/'); - } else if (options.filename || value.name || value.path) { - // custom filename take precedence - // formidable and the browser add a name property - // fs- and request- streams have path property - filename = path.basename(options.filename || value.name || value.path); - } else if (value.readable && value.hasOwnProperty('httpVersion')) { - // or try http response - filename = path.basename(value.client._httpMessage.path); - } - - if (filename) { - contentDisposition = 'filename="' + filename + '"'; - } - - return contentDisposition; -}; - -FormData.prototype._getContentType = function(value, options) { - - // use custom content-type above all - var contentType = options.contentType; - - // or try `name` from formidable, browser - if (!contentType && value.name) { - contentType = mime.lookup(value.name); - } - - // or try `path` from fs-, request- streams - if (!contentType && value.path) { - contentType = mime.lookup(value.path); - } - - // or if it's http-reponse - if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) { - contentType = value.headers['content-type']; - } - - // or guess it from the filepath or filename - if (!contentType && (options.filepath || options.filename)) { - contentType = mime.lookup(options.filepath || options.filename); - } - - // fallback to the default content type if `value` is not simple value - if (!contentType && typeof value == 'object') { - contentType = FormData.DEFAULT_CONTENT_TYPE; - } - - return contentType; -}; - -FormData.prototype._multiPartFooter = function() { - return function(next) { - var footer = FormData.LINE_BREAK; - - var lastPart = (this._streams.length === 0); - if (lastPart) { - footer += this._lastBoundary(); - } - - next(footer); - }.bind(this); -}; - -FormData.prototype._lastBoundary = function() { - return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; -}; - -FormData.prototype.getHeaders = function(userHeaders) { - var header; - var formHeaders = { - 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() - }; - - for (header in userHeaders) { - if (userHeaders.hasOwnProperty(header)) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } - } - - return formHeaders; -}; - -FormData.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } - - return this._boundary; -}; - -FormData.prototype._generateBoundary = function() { - // This generates a 50 character boundary similar to those used by Firefox. - // They are optimized for boyer-moore parsing. - var boundary = '--------------------------'; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } - - this._boundary = boundary; -}; - -// Note: getLengthSync DOESN'T calculate streams length -// As workaround one can calculate file size manually -// and add it as knownLength option -FormData.prototype.getLengthSync = function() { - var knownLength = this._overheadLength + this._valueLength; - - // Don't get confused, there are 3 "internal" streams for each keyval pair - // so it basically checks if there is any value added to the form - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - // https://github.com/form-data/form-data/issues/40 - if (!this.hasKnownLength()) { - // Some async length retrievers are present - // therefore synchronous length calculation is false. - // Please use getLength(callback) to get proper length - this._error(new Error('Cannot calculate proper length in synchronous way.')); - } - - return knownLength; -}; - -// Public API to check if length of added values is known -// https://github.com/form-data/form-data/issues/196 -// https://github.com/form-data/form-data/issues/262 -FormData.prototype.hasKnownLength = function() { - var hasKnownLength = true; - - if (this._valuesToMeasure.length) { - hasKnownLength = false; - } - - return hasKnownLength; -}; - -FormData.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; - - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - if (!this._valuesToMeasure.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } - - asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { - if (err) { - cb(err); - return; - } - - values.forEach(function(length) { - knownLength += length; - }); - - cb(null, knownLength); - }); -}; - -FormData.prototype.submit = function(params, cb) { - var request - , options - , defaults = {method: 'post'} - ; - - // parse provided url if it's string - // or treat it as options object - if (typeof params == 'string') { - - params = parseUrl(params); - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname, - protocol: params.protocol - }, defaults); - - // use custom params - } else { - - options = populate(params, defaults); - // if no port provided use default one - if (!options.port) { - options.port = options.protocol == 'https:' ? 443 : 80; - } - } - - // put that good code in getHeaders to some use - options.headers = this.getHeaders(params.headers); - - // https if specified, fallback to http in any other case - if (options.protocol == 'https:') { - request = https.request(options); - } else { - request = http.request(options); - } - - // get content length and fire away - this.getLength(function(err, length) { - if (err) { - this._error(err); - return; - } - - // add content length - request.setHeader('Content-Length', length); - - this.pipe(request); - if (cb) { - request.on('error', cb); - request.on('response', cb.bind(this, null)); - } - }.bind(this)); - - return request; -}; - -FormData.prototype._error = function(err) { - if (!this.error) { - this.error = err; - this.pause(); - this.emit('error', err); - } -}; - -FormData.prototype.toString = function () { - return '[object FormData]'; -}; diff --git a/truebit-implementation/node_modules/form-data/lib/populate.js b/truebit-implementation/node_modules/form-data/lib/populate.js deleted file mode 100644 index 4d35738d..00000000 --- a/truebit-implementation/node_modules/form-data/lib/populate.js +++ /dev/null @@ -1,10 +0,0 @@ -// populates missing values -module.exports = function(dst, src) { - - Object.keys(src).forEach(function(prop) - { - dst[prop] = dst[prop] || src[prop]; - }); - - return dst; -}; diff --git a/truebit-implementation/node_modules/form-data/package.json b/truebit-implementation/node_modules/form-data/package.json deleted file mode 100644 index 1c1f5897..00000000 --- a/truebit-implementation/node_modules/form-data/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_from": "form-data@~2.3.2", - "_id": "form-data@2.3.3", - "_inBundle": false, - "_integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "_location": "/form-data", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "form-data@~2.3.2", - "name": "form-data", - "escapedName": "form-data", - "rawSpec": "~2.3.2", - "saveSpec": null, - "fetchSpec": "~2.3.2" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "_shasum": "dcce52c05f644f298c6a7ab936bd724ceffbf3a6", - "_spec": "form-data@~2.3.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Felix Geisendörfer", - "email": "felix@debuggable.com", - "url": "http://debuggable.com/" - }, - "browser": "./lib/browser", - "bugs": { - "url": "https://github.com/form-data/form-data/issues" - }, - "bundleDependencies": false, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "deprecated": false, - "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", - "devDependencies": { - "browserify": "^13.1.1", - "browserify-istanbul": "^2.0.0", - "coveralls": "^2.11.14", - "cross-spawn": "^4.0.2", - "eslint": "^3.9.1", - "fake": "^0.2.2", - "far": "^0.0.7", - "formidable": "^1.0.17", - "in-publish": "^2.0.0", - "is-node-modern": "^1.0.0", - "istanbul": "^0.4.5", - "obake": "^0.1.2", - "phantomjs-prebuilt": "^2.1.13", - "pkgfiles": "^2.3.0", - "pre-commit": "^1.1.3", - "request": "2.76.0", - "rimraf": "^2.5.4", - "tape": "^4.6.2" - }, - "engines": { - "node": ">= 0.12" - }, - "homepage": "https://github.com/form-data/form-data#readme", - "license": "MIT", - "main": "./lib/form_data", - "name": "form-data", - "pre-commit": [ - "lint", - "ci-test", - "check" - ], - "repository": { - "type": "git", - "url": "git://github.com/form-data/form-data.git" - }, - "scripts": { - "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage", - "check": "istanbul check-coverage coverage/coverage*.json", - "ci-lint": "is-node-modern 6 && npm run lint || is-node-not-modern 6", - "ci-test": "npm run test && npm run browser && npm run report", - "debug": "verbose=1 ./test/run.js", - "files": "pkgfiles --sort=name", - "get-version": "node -e \"console.log(require('./package.json').version)\"", - "lint": "eslint lib/*.js test/*.js test/integration/*.js", - "postpublish": "npm run restore-readme", - "posttest": "istanbul report lcov text", - "predebug": "rimraf coverage test/tmp", - "prepublish": "in-publish && npm run update-readme || not-in-publish", - "pretest": "rimraf coverage test/tmp", - "report": "istanbul report lcov text", - "restore-readme": "mv README.md.bak README.md", - "test": "istanbul cover test/run.js", - "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md" - }, - "version": "2.3.3" -} diff --git a/truebit-implementation/node_modules/form-data/yarn.lock b/truebit-implementation/node_modules/form-data/yarn.lock deleted file mode 100644 index ab55059c..00000000 --- a/truebit-implementation/node_modules/form-data/yarn.lock +++ /dev/null @@ -1,2662 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -JSONStream@^1.0.3: - version "1.3.2" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn-node@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" - dependencies: - acorn "^5.4.1" - xtend "^4.0.1" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.2.1, acorn@^5.4.0, acorn@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" - -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" - -ajv@^4.7.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^5.1.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1.js@^4.0.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -astw@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" - dependencies: - acorn "^4.0.3" - -async@1.x, async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@~0.1.22: - version "0.1.22" - resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-code-frame@^6.16.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-js@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-pack@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.4.tgz#9a73beb3b48f9e36868be007b64400102c04a99f" - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-resolve@^1.11.0, browser-resolve@^1.7.0: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - -browserify-istanbul@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/browserify-istanbul/-/browserify-istanbul-2.0.0.tgz#85a4b425da1f7c09e02ba32a3b44f6535d38c257" - dependencies: - minimatch "^3.0.0" - through "^2.3.8" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" - dependencies: - pako "~0.2.0" - -browserify@^13.1.1: - version "13.3.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.3.0.tgz#b5a9c9020243f0c70e4675bec8223bc627e415ce" - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.1.2" - buffer "^4.1.0" - cached-path-relative "^1.0.0" - concat-stream "~1.5.1" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "~1.1.0" - duplexer2 "~0.1.2" - events "~1.1.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "~0.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - module-deps "^4.0.8" - os-browserify "~0.1.1" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "~0.10.0" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "~0.0.0" - url "~0.11.0" - util "~0.10.1" - vm-browserify "~0.0.1" - xtend "^4.0.0" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.1.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -cached-path-relative@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -clone@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combine-source-map@~0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.9.0: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@1.6.0, concat-stream@^1.4.7, concat-stream@^1.4.8, concat-stream@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@~1.5.0, concat-stream@~1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -constants-browserify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -convert-source-map@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -coveralls@^2.11.14: - version "2.13.3" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.3.tgz#9ad7c2ae527417f361e8b626483f48ee92dd2bc7" - dependencies: - js-yaml "3.6.1" - lcov-parse "0.0.10" - log-driver "1.2.5" - minimist "1.2.0" - request "2.79.0" - -create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - ripemd160 "^2.0.0" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -crypto-browserify@^3.0.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@2.6.9, debug@^2.1.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -deeply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/deeply/-/deeply-1.0.0.tgz#ed573160b5c91ff5138917bf701e5453b19f574b" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -defined@^1.0.0, defined@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -deps-sort@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" - dependencies: - JSONStream "^1.0.3" - shasum "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -detective@^4.0.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" - dependencies: - acorn "^5.2.1" - defined "^1.0.0" - -diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -doctrine@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -domain-browser@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" - -du@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/du/-/du-0.1.0.tgz#f26e340a09c7bc5b6fd69af6dbadea60fa8c6f4d" - dependencies: - async "~0.1.22" - -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - dependencies: - readable-stream "^2.0.2" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -envar@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/envar/-/envar-2.0.0.tgz#44f7cdafbf976b732b73ad1acb2e8808ecf8876e" - dependencies: - deeply "^1.0.0" - minimist "^1.2.0" - -es-abstract@^1.5.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.38" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-promise@^4.0.3: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint@^3.9.1: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" - dependencies: - babel-code-frame "^6.16.0" - chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" - doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" - esquery "^1.0.0" - estraverse "^4.2.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" - imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" - levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" - strip-json-comments "~2.0.1" - table "^3.7.8" - text-table "~0.2.0" - user-home "^2.0.0" - -espree@^3.4.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" - dependencies: - acorn "^5.4.0" - acorn-jsx "^3.0.0" - -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" - dependencies: - estraverse "^4.1.0" - object-assign "^4.0.1" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -events@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extract-zip@^1.6.5: - version "1.6.6" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" - dependencies: - concat-stream "1.6.0" - debug "2.6.9" - mkdirp "0.5.0" - yauzl "2.4.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fake@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/fake/-/fake-0.2.2.tgz#68fe672725ff0f5c89ba92c539b31111f122d1f3" - -far@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/far/-/far-0.0.7.tgz#01c1fd362bcd26ce9cf161af3938aa34619f79a7" - dependencies: - oop "0.0.3" - -fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - dependencies: - pend "~1.2.0" - -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -for-each@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" - dependencies: - is-function "~1.0.0" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -formidable@^1.0.17: - version "1.1.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" - -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fstream-ignore@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream-npm@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.2.1.tgz#08c4a452f789dcbac4c89a4563c902b2c862fd5b" - dependencies: - fstream-ignore "^1.0.0" - inherits "2" - -fstream@^1.0.0: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -ghostface@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ghostface/-/ghostface-1.5.0.tgz#b93e7ab6560ec93b4509032fdd43a4bec93044fd" - dependencies: - chalk "^1.0.0" - concat-stream "^1.4.8" - convert-source-map "^1.0.0" - minimist "^1.1.1" - semver "^4.3.3" - source-map "^0.4.2" - which "^1.0.9" - -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@~7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.14.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -handlebars@^4.0.1: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has@^1.0.0, has@^1.0.1, has@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - dependencies: - inherits "^2.0.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hasha@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" - dependencies: - is-stream "^1.0.1" - pinkie-promise "^2.0.0" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" - -ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - -ignore@^3.2.0: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - dependencies: - source-map "~0.5.3" - -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - -insert-module-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3" - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.7.1" - concat-stream "~1.5.1" - is-buffer "^1.1.0" - lexical-scope "^1.2.0" - process "~0.11.0" - through2 "^2.0.0" - xtend "^4.0.0" - -interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - -is-buffer@^1.1.0, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-function@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - -is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: - version "2.17.1" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-node-modern@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-node-modern/-/is-node-modern-1.0.0.tgz#cfe2607be7403b05b28a566f66cbf8a583d4fc63" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isarray@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -js-yaml@3.x, js-yaml@^3.5.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kew@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -labeled-stream-splicer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" - dependencies: - inherits "^2.0.1" - isarray "~0.0.1" - stream-splicer "^2.0.0" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcov-parse@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lexical-scope@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" - dependencies: - astw "^2.0.0" - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - -lodash@^4.0.0, lodash@^4.3.0: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -log-driver@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -map-limit@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38" - dependencies: - once "~1.3.0" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" - -minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -mkdirp@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" - dependencies: - minimist "0.0.8" - -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -module-deps@^4.0.8: - version "4.1.1" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.0" - concat-stream "~1.5.0" - defined "^1.0.0" - detective "^4.0.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.1.3" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -obake@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/obake/-/obake-0.1.2.tgz#64a477c9ddfbbccc18cff3a750924974d22c29d3" - dependencies: - envar "^2.0.0" - ghostface "^1.5.0" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-inspect@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d" - -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -once@1.x, once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -oop@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-browserify@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-shim@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - dependencies: - path-platform "~0.11.15" - -parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -path-browserify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - -pbkdf2@^3.0.3: - version "3.0.14" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -phantomjs-prebuilt@^2.1.13: - version "2.1.16" - resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef" - dependencies: - es6-promise "^4.0.3" - extract-zip "^1.6.5" - fs-extra "^1.0.0" - hasha "^2.2.0" - kew "^0.7.0" - progress "^1.1.8" - request "^2.81.0" - request-progress "^2.0.1" - which "^1.2.10" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkgfiles@^2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/pkgfiles/-/pkgfiles-2.3.2.tgz#1b54a7a8dbe32caa84b0955f44917e1500d33d05" - dependencies: - columnify "^1.5.4" - du "^0.1.0" - fstream-npm "^1.2.0" - map-limit "0.0.1" - minimist "^1.2.0" - pkgresolve "^1.1.4" - pretty-bytes "^4.0.2" - -pkgresolve@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/pkgresolve/-/pkgresolve-1.1.4.tgz#0fa499ca366888c31e97357446c6053025ae47b6" - dependencies: - minimist "~1.2.0" - -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" - -pre-commit@^1.1.3: - version "1.2.2" - resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" - dependencies: - cross-spawn "^5.0.1" - spawn-sync "^1.0.15" - which "1.2.x" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@~0.11.0: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.3.2, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - -qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - dependencies: - readable-stream "^2.0.2" - -readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@~2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -request-progress@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" - dependencies: - throttleit "^1.0.0" - -request@2.76.0: - version "2.76.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.76.0.tgz#be44505afef70360a0436955106be3945d95560e" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -request@^2.81.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -require-uncached@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve@1.1.7, resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - dependencies: - path-parse "^1.0.5" - -resolve@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - dependencies: - through "~2.3.4" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" - dependencies: - hash-base "^2.0.0" - inherits "^2.0.1" - -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" - -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -semver@^4.3.3: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: - version "2.4.10" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shelljs@^0.7.5: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -source-map@^0.4.2, source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" - -source-map@~0.5.1, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -spawn-sync@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" - dependencies: - concat-stream "^1.4.7" - os-shim "^0.1.2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stream-browserify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-http@^2.0.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.3" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-splicer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string.prototype.trim@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - function-bind "^1.0.2" - -string_decoder@~0.10.0, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - dependencies: - minimist "^1.1.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - dependencies: - acorn-node "^1.2.0" - -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" - dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" - -tape@^4.6.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e" - dependencies: - deep-equal "~1.0.1" - defined "~1.0.0" - for-each "~0.3.2" - function-bind "~1.1.0" - glob "~7.1.2" - has "~1.0.1" - inherits "~2.0.3" - minimist "~1.2.0" - object-inspect "~1.3.0" - resolve "~1.4.0" - resumer "~0.0.0" - string.prototype.trim "~1.1.2" - through "~2.3.8" - -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -"through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - dependencies: - process "~0.11.0" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - -tty-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typedarray@^0.0.6, typedarray@~0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -umd@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" - -url@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3, util@~0.10.1: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -uuid@^3.0.0, uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@~0.0.1: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - dependencies: - defaults "^1.0.3" - -which@1.2.x: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" - dependencies: - isexe "^2.0.0" - -which@^1.0.9, which@^1.1.1, which@^1.2.10, which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - dependencies: - fd-slicer "~1.0.1" diff --git a/truebit-implementation/node_modules/forwarded/HISTORY.md b/truebit-implementation/node_modules/forwarded/HISTORY.md deleted file mode 100644 index 2599a557..00000000 --- a/truebit-implementation/node_modules/forwarded/HISTORY.md +++ /dev/null @@ -1,16 +0,0 @@ -0.1.2 / 2017-09-14 -================== - - * perf: improve header parsing - * perf: reduce overhead when no `X-Forwarded-For` header - -0.1.1 / 2017-09-10 -================== - - * Fix trimming leading / trailing OWS - * perf: hoist regular expression - -0.1.0 / 2014-09-21 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/forwarded/LICENSE b/truebit-implementation/node_modules/forwarded/LICENSE deleted file mode 100644 index 84441fbb..00000000 --- a/truebit-implementation/node_modules/forwarded/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/forwarded/README.md b/truebit-implementation/node_modules/forwarded/README.md deleted file mode 100644 index c776ee54..00000000 --- a/truebit-implementation/node_modules/forwarded/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# forwarded - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Parse HTTP X-Forwarded-For header - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install forwarded -``` - -## API - -```js -var forwarded = require('forwarded') -``` - -### forwarded(req) - -```js -var addresses = forwarded(req) -``` - -Parse the `X-Forwarded-For` header from the request. Returns an array -of the addresses, including the socket address for the `req`, in reverse -order (i.e. index `0` is the socket address and the last index is the -furthest address, typically the end-user). - -## Testing - -```sh -$ npm test -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/forwarded.svg -[npm-url]: https://npmjs.org/package/forwarded -[node-version-image]: https://img.shields.io/node/v/forwarded.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/forwarded/master.svg -[travis-url]: https://travis-ci.org/jshttp/forwarded -[coveralls-image]: https://img.shields.io/coveralls/jshttp/forwarded/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/forwarded?branch=master -[downloads-image]: https://img.shields.io/npm/dm/forwarded.svg -[downloads-url]: https://npmjs.org/package/forwarded diff --git a/truebit-implementation/node_modules/forwarded/index.js b/truebit-implementation/node_modules/forwarded/index.js deleted file mode 100644 index 7833b3de..00000000 --- a/truebit-implementation/node_modules/forwarded/index.js +++ /dev/null @@ -1,76 +0,0 @@ -/*! - * forwarded - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = forwarded - -/** - * Get all addresses in the request, using the `X-Forwarded-For` header. - * - * @param {object} req - * @return {array} - * @public - */ - -function forwarded (req) { - if (!req) { - throw new TypeError('argument req is required') - } - - // simple header parsing - var proxyAddrs = parse(req.headers['x-forwarded-for'] || '') - var socketAddr = req.connection.remoteAddress - var addrs = [socketAddr].concat(proxyAddrs) - - // return all addresses - return addrs -} - -/** - * Parse the X-Forwarded-For header. - * - * @param {string} header - * @private - */ - -function parse (header) { - var end = header.length - var list = [] - var start = header.length - - // gather addresses, backwards - for (var i = header.length - 1; i >= 0; i--) { - switch (header.charCodeAt(i)) { - case 0x20: /* */ - if (start === end) { - start = end = i - } - break - case 0x2c: /* , */ - if (start !== end) { - list.push(header.substring(start, end)) - } - start = end = i - break - default: - start = i - break - } - } - - // final address - if (start !== end) { - list.push(header.substring(start, end)) - } - - return list -} diff --git a/truebit-implementation/node_modules/forwarded/package.json b/truebit-implementation/node_modules/forwarded/package.json deleted file mode 100644 index 50cc0801..00000000 --- a/truebit-implementation/node_modules/forwarded/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "forwarded@~0.1.2", - "_id": "forwarded@0.1.2", - "_inBundle": false, - "_integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "_location": "/forwarded", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "forwarded@~0.1.2", - "name": "forwarded", - "escapedName": "forwarded", - "rawSpec": "~0.1.2", - "saveSpec": null, - "fetchSpec": "~0.1.2" - }, - "_requiredBy": [ - "/proxy-addr" - ], - "_resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "_shasum": "98c23dab1175657b8c0573e8ceccd91b0ff18c84", - "_spec": "forwarded@~0.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/proxy-addr", - "bugs": { - "url": "https://github.com/jshttp/forwarded/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], - "deprecated": false, - "description": "Parse HTTP X-Forwarded-For header", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "2.1.4", - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.7.0", - "eslint-plugin-node": "5.1.1", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/forwarded#readme", - "keywords": [ - "x-forwarded-for", - "http", - "req" - ], - "license": "MIT", - "name": "forwarded", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/forwarded.git" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "0.1.2" -} diff --git a/truebit-implementation/node_modules/fresh/HISTORY.md b/truebit-implementation/node_modules/fresh/HISTORY.md deleted file mode 100644 index 4586996a..00000000 --- a/truebit-implementation/node_modules/fresh/HISTORY.md +++ /dev/null @@ -1,70 +0,0 @@ -0.5.2 / 2017-09-13 -================== - - * Fix regression matching multiple ETags in `If-None-Match` - * perf: improve `If-None-Match` token parsing - -0.5.1 / 2017-09-11 -================== - - * Fix handling of modified headers with invalid dates - * perf: improve ETag match loop - -0.5.0 / 2017-02-21 -================== - - * Fix incorrect result when `If-None-Match` has both `*` and ETags - * Fix weak `ETag` matching to match spec - * perf: delay reading header values until needed - * perf: skip checking modified time if ETag check failed - * perf: skip parsing `If-None-Match` when no `ETag` header - * perf: use `Date.parse` instead of `new Date` - -0.4.0 / 2017-02-05 -================== - - * Fix false detection of `no-cache` request directive - * perf: enable strict mode - * perf: hoist regular expressions - * perf: remove duplicate conditional - * perf: remove unnecessary boolean coercions - -0.3.0 / 2015-05-12 -================== - - * Add weak `ETag` matching support - -0.2.4 / 2014-09-07 -================== - - * Support Node.js 0.6 - -0.2.3 / 2014-09-07 -================== - - * Move repository to jshttp - -0.2.2 / 2014-02-19 -================== - - * Revert "Fix for blank page on Safari reload" - -0.2.1 / 2014-01-29 -================== - - * Fix for blank page on Safari reload - -0.2.0 / 2013-08-11 -================== - - * Return stale for `Cache-Control: no-cache` - -0.1.0 / 2012-06-15 -================== - - * Add `If-None-Match: *` support - -0.0.1 / 2012-06-10 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/fresh/LICENSE b/truebit-implementation/node_modules/fresh/LICENSE deleted file mode 100644 index 1434ade7..00000000 --- a/truebit-implementation/node_modules/fresh/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk -Copyright (c) 2016-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/fresh/README.md b/truebit-implementation/node_modules/fresh/README.md deleted file mode 100644 index 1c1c680d..00000000 --- a/truebit-implementation/node_modules/fresh/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# fresh - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -HTTP response freshness testing - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -``` -$ npm install fresh -``` - -## API - - - -```js -var fresh = require('fresh') -``` - -### fresh(reqHeaders, resHeaders) - -Check freshness of the response using request and response headers. - -When the response is still "fresh" in the client's cache `true` is -returned, otherwise `false` is returned to indicate that the client -cache is now stale and the full response should be sent. - -When a client sends the `Cache-Control: no-cache` request header to -indicate an end-to-end reload request, this module will return `false` -to make handling these requests transparent. - -## Known Issues - -This module is designed to only follow the HTTP specifications, not -to work-around all kinda of client bugs (especially since this module -typically does not recieve enough information to understand what the -client actually is). - -There is a known issue that in certain versions of Safari, Safari -will incorrectly make a request that allows this module to validate -freshness of the resource even when Safari does not have a -representation of the resource in the cache. The module -[jumanji](https://www.npmjs.com/package/jumanji) can be used in -an Express application to work-around this issue and also provides -links to further reading on this Safari bug. - -## Example - -### API usage - - - -```js -var reqHeaders = { 'if-none-match': '"foo"' } -var resHeaders = { 'etag': '"bar"' } -fresh(reqHeaders, resHeaders) -// => false - -var reqHeaders = { 'if-none-match': '"foo"' } -var resHeaders = { 'etag': '"foo"' } -fresh(reqHeaders, resHeaders) -// => true -``` - -### Using with Node.js http server - -```js -var fresh = require('fresh') -var http = require('http') - -var server = http.createServer(function (req, res) { - // perform server logic - // ... including adding ETag / Last-Modified response headers - - if (isFresh(req, res)) { - // client has a fresh copy of resource - res.statusCode = 304 - res.end() - return - } - - // send the resource - res.statusCode = 200 - res.end('hello, world!') -}) - -function isFresh (req, res) { - return fresh(req.headers, { - 'etag': res.getHeader('ETag'), - 'last-modified': res.getHeader('Last-Modified') - }) -} - -server.listen(3000) -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/fresh.svg -[npm-url]: https://npmjs.org/package/fresh -[node-version-image]: https://img.shields.io/node/v/fresh.svg -[node-version-url]: https://nodejs.org/en/ -[travis-image]: https://img.shields.io/travis/jshttp/fresh/master.svg -[travis-url]: https://travis-ci.org/jshttp/fresh -[coveralls-image]: https://img.shields.io/coveralls/jshttp/fresh/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/fresh?branch=master -[downloads-image]: https://img.shields.io/npm/dm/fresh.svg -[downloads-url]: https://npmjs.org/package/fresh diff --git a/truebit-implementation/node_modules/fresh/index.js b/truebit-implementation/node_modules/fresh/index.js deleted file mode 100644 index d154f5a7..00000000 --- a/truebit-implementation/node_modules/fresh/index.js +++ /dev/null @@ -1,137 +0,0 @@ -/*! - * fresh - * Copyright(c) 2012 TJ Holowaychuk - * Copyright(c) 2016-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * RegExp to check for no-cache token in Cache-Control. - * @private - */ - -var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/ - -/** - * Module exports. - * @public - */ - -module.exports = fresh - -/** - * Check freshness of the response using request and response headers. - * - * @param {Object} reqHeaders - * @param {Object} resHeaders - * @return {Boolean} - * @public - */ - -function fresh (reqHeaders, resHeaders) { - // fields - var modifiedSince = reqHeaders['if-modified-since'] - var noneMatch = reqHeaders['if-none-match'] - - // unconditional request - if (!modifiedSince && !noneMatch) { - return false - } - - // Always return stale when Cache-Control: no-cache - // to support end-to-end reload requests - // https://tools.ietf.org/html/rfc2616#section-14.9.4 - var cacheControl = reqHeaders['cache-control'] - if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) { - return false - } - - // if-none-match - if (noneMatch && noneMatch !== '*') { - var etag = resHeaders['etag'] - - if (!etag) { - return false - } - - var etagStale = true - var matches = parseTokenList(noneMatch) - for (var i = 0; i < matches.length; i++) { - var match = matches[i] - if (match === etag || match === 'W/' + etag || 'W/' + match === etag) { - etagStale = false - break - } - } - - if (etagStale) { - return false - } - } - - // if-modified-since - if (modifiedSince) { - var lastModified = resHeaders['last-modified'] - var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince)) - - if (modifiedStale) { - return false - } - } - - return true -} - -/** - * Parse an HTTP Date into a number. - * - * @param {string} date - * @private - */ - -function parseHttpDate (date) { - var timestamp = date && Date.parse(date) - - // istanbul ignore next: guard against date.js Date.parse patching - return typeof timestamp === 'number' - ? timestamp - : NaN -} - -/** - * Parse a HTTP token list. - * - * @param {string} str - * @private - */ - -function parseTokenList (str) { - var end = 0 - var list = [] - var start = 0 - - // gather tokens - for (var i = 0, len = str.length; i < len; i++) { - switch (str.charCodeAt(i)) { - case 0x20: /* */ - if (start === end) { - start = end = i + 1 - } - break - case 0x2c: /* , */ - list.push(str.substring(start, end)) - start = end = i + 1 - break - default: - end = i + 1 - break - } - } - - // final token - list.push(str.substring(start, end)) - - return list -} diff --git a/truebit-implementation/node_modules/fresh/package.json b/truebit-implementation/node_modules/fresh/package.json deleted file mode 100644 index f3bca0ef..00000000 --- a/truebit-implementation/node_modules/fresh/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_from": "fresh@0.5.2", - "_id": "fresh@0.5.2", - "_inBundle": false, - "_integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "_location": "/fresh", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "fresh@0.5.2", - "name": "fresh", - "escapedName": "fresh", - "rawSpec": "0.5.2", - "saveSpec": null, - "fetchSpec": "0.5.2" - }, - "_requiredBy": [ - "/express", - "/send" - ], - "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "_shasum": "3d8cadd90d976569fa835ab1f8e4b23a105605a7", - "_spec": "fresh@0.5.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "bugs": { - "url": "https://github.com/jshttp/fresh/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "deprecated": false, - "description": "HTTP response freshness testing", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "2.1.4", - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.7.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "5.1.1", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "homepage": "https://github.com/jshttp/fresh#readme", - "keywords": [ - "fresh", - "http", - "conditional", - "cache" - ], - "license": "MIT", - "name": "fresh", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/fresh.git" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "0.5.2" -} diff --git a/truebit-implementation/node_modules/fs-constants/LICENSE b/truebit-implementation/node_modules/fs-constants/LICENSE deleted file mode 100644 index cb757e5d..00000000 --- a/truebit-implementation/node_modules/fs-constants/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/fs-constants/README.md b/truebit-implementation/node_modules/fs-constants/README.md deleted file mode 100644 index 62b33742..00000000 --- a/truebit-implementation/node_modules/fs-constants/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# fs-constants - -Small module that allows you to get the fs constants across -Node and the browser. - -``` -npm install fs-constants -``` - -Previously you would use `require('constants')` for this in node but that has been -deprecated and changed to `require('fs').constants` which does not browserify. - -This module uses `require('constants')` in the browser and `require('fs').constants` in node to work around this - - -## Usage - -``` js -var constants = require('fs-constants') - -console.log('constants:', constants) -``` - -## License - -MIT diff --git a/truebit-implementation/node_modules/fs-constants/browser.js b/truebit-implementation/node_modules/fs-constants/browser.js deleted file mode 100644 index 3c87638d..00000000 --- a/truebit-implementation/node_modules/fs-constants/browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('constants') diff --git a/truebit-implementation/node_modules/fs-constants/index.js b/truebit-implementation/node_modules/fs-constants/index.js deleted file mode 100644 index 2a3aadf3..00000000 --- a/truebit-implementation/node_modules/fs-constants/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('fs').constants || require('constants') diff --git a/truebit-implementation/node_modules/fs-constants/package.json b/truebit-implementation/node_modules/fs-constants/package.json deleted file mode 100644 index ee089cc6..00000000 --- a/truebit-implementation/node_modules/fs-constants/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "_from": "fs-constants@^1.0.0", - "_id": "fs-constants@1.0.0", - "_inBundle": false, - "_integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "_location": "/fs-constants", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fs-constants@^1.0.0", - "name": "fs-constants", - "escapedName": "fs-constants", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/tar-stream" - ], - "_resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "_shasum": "6be0de9be998ce16af8afc24497b9ee9b7ccd9ad", - "_spec": "fs-constants@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar-stream", - "author": { - "name": "Mathias Buus", - "url": "@mafintosh" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/mafintosh/fs-constants/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Require constants across node and the browser", - "devDependencies": {}, - "homepage": "https://github.com/mafintosh/fs-constants", - "license": "MIT", - "main": "index.js", - "name": "fs-constants", - "repository": { - "type": "git", - "url": "git+https://github.com/mafintosh/fs-constants.git" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/fs-extra/.npmignore b/truebit-implementation/node_modules/fs-extra/.npmignore deleted file mode 100644 index 68eefb7b..00000000 --- a/truebit-implementation/node_modules/fs-extra/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -.nyc_output/ -coverage/ -test/ -.travis.yml -appveyor.yml -lib/**/__tests__/ -test/readme.md -test.js diff --git a/truebit-implementation/node_modules/fs-extra/CHANGELOG.md b/truebit-implementation/node_modules/fs-extra/CHANGELOG.md deleted file mode 100644 index 99b4bd86..00000000 --- a/truebit-implementation/node_modules/fs-extra/CHANGELOG.md +++ /dev/null @@ -1,733 +0,0 @@ -2.1.2 / 2017-03-16 ------------------- - -### Fixed - -- Weird windows bug that resulted in `ensureDir()`'s callback being called twice in some cases. This bug may have also affected `remove()`. See [#392](https://github.com/jprichardson/node-fs-extra/issues/392), [#393](https://github.com/jprichardson/node-fs-extra/pull/393) - -2.1.1 / 2017-03-15 ------------------- - -### Fixed - -- Reverted [`5597bd`](https://github.com/jprichardson/node-fs-extra/commit/5597bd5b67f7d060f5f5bf26e9635be48330f5d7), this broke compatibility with Node.js versions v4+ but less than `v4.5.0`. -- Remove `Buffer.alloc()` usage in `moveSync()`. - -2.1.0 / 2017-03-15 ------------------- - -Thanks to [Mani Maghsoudlou (@manidlou)](https://github.com/manidlou) & [Jan Peer Stöcklmair (@JPeer264)](https://github.com/JPeer264) for their extraordinary help with this release! - -### Added -- `moveSync()` See [#309], [#381](https://github.com/jprichardson/node-fs-extra/pull/381). ([@manidlou](https://github.com/manidlou)) -- `copy()` and `copySync()`'s `filter` option now gets the destination path passed as the second parameter. [#366](https://github.com/jprichardson/node-fs-extra/pull/366) ([@manidlou](https://github.com/manidlou)) - -### Changed -- Use `Buffer.alloc()` instead of deprecated `new Buffer()` in `copySync()`. [#380](https://github.com/jprichardson/node-fs-extra/pull/380) ([@manidlou](https://github.com/manidlou)) -- Refactored entire codebase to use ES6 features supported by Node.js v4+ [#355](https://github.com/jprichardson/node-fs-extra/issues/355). [(@JPeer264)](https://github.com/JPeer264) -- Refactored docs. ([@manidlou](https://github.com/manidlou)) - -### Fixed - -- `move()` shouldn't error out when source and dest are the same. [#377](https://github.com/jprichardson/node-fs-extra/issues/377), [#378](https://github.com/jprichardson/node-fs-extra/pull/378) ([@jdalton](https://github.com/jdalton)) - -2.0.0 / 2017-01-16 ------------------- - -### Removed -- **BREAKING:** Removed support for Node `v0.12`. The Node foundation stopped officially supporting it -on Jan 1st, 2017. -- **BREAKING:** Remove `walk()` and `walkSync()`. `walkSync()` was only part of `fs-extra` for a little -over two months. Use [klaw](https://github.com/jprichardson/node-klaw) instead of `walk()`, in fact, `walk()` was just -an alias to klaw. For `walkSync()` use [klaw-sync](https://github.com/mawni/node-klaw-sync). See: [#338], [#339] - -### Changed -- **BREAKING:** Renamed `clobber` to `overwrite`. This affects `copy()`, `copySync()`, and `move()`. [#330], [#333] -- Moved docs, to `docs/`. [#340] - -### Fixed -- Apply filters to directories in `copySync()` like in `copy()`. [#324] -- A specific condition when disk is under heavy use, `copy()` can fail. [#326] - - -1.0.0 / 2016-11-01 ------------------- - -After five years of development, we finally have reach the 1.0.0 milestone! Big thanks goes -to [Ryan Zim](https://github.com/RyanZim) for leading the charge on this release! - -### Added -- `walkSync()` - -### Changed -- **BREAKING**: dropped Node v0.10 support. -- disabled `rimaf` globbing, wasn't used. [#280] -- deprecate `copy()/copySync()` option `filter` if it's a `RegExp`. `filter` should now be a function. -- inline `rimraf`. This is temporary and was done because `rimraf` depended upon the beefy `glob` which `fs-extra` does not use. [#300] - -### Fixed -- bug fix proper closing of file handle on `utimesMillis()` [#271] -- proper escaping of files with dollar signs [#291] -- `copySync()` failed if user didn't own file. [#199], [#301] - - -0.30.0 / 2016-04-28 -------------------- -- Brought back Node v0.10 support. I didn't realize there was still demand. Official support will end **2016-10-01**. - -0.29.0 / 2016-04-27 -------------------- -- **BREAKING**: removed support for Node v0.10. If you still want to use Node v0.10, everything should work except for `ensureLink()/ensureSymlink()`. Node v0.12 is still supported but will be dropped in the near future as well. - -0.28.0 / 2016-04-17 -------------------- -- **BREAKING**: removed `createOutputStream()`. Use https://www.npmjs.com/package/create-output-stream. See: [#192][#192] -- `mkdirs()/mkdirsSync()` check for invalid win32 path chars. See: [#209][#209], [#237][#237] -- `mkdirs()/mkdirsSync()` if drive not mounted, error. See: [#93][#93] - -0.27.0 / 2016-04-15 -------------------- -- add `dereference` option to `copySync()`. [#235][#235] - -0.26.7 / 2016-03-16 -------------------- -- fixed `copy()` if source and dest are the same. [#230][#230] - -0.26.6 / 2016-03-15 -------------------- -- fixed if `emptyDir()` does not have a callback: [#229][#229] - -0.26.5 / 2016-01-27 -------------------- -- `copy()` with two arguments (w/o callback) was broken. See: [#215][#215] - -0.26.4 / 2016-01-05 -------------------- -- `copySync()` made `preserveTimestamps` default consistent with `copy()` which is `false`. See: [#208][#208] - -0.26.3 / 2015-12-17 -------------------- -- fixed `copy()` hangup in copying blockDevice / characterDevice / `/dev/null`. See: [#193][#193] - -0.26.2 / 2015-11-02 -------------------- -- fixed `outputJson{Sync}()` spacing adherence to `fs.spaces` - -0.26.1 / 2015-11-02 -------------------- -- fixed `copySync()` when `clogger=true` and the destination is read only. See: [#190][#190] - -0.26.0 / 2015-10-25 -------------------- -- extracted the `walk()` function into its own module [`klaw`](https://github.com/jprichardson/node-klaw). - -0.25.0 / 2015-10-24 -------------------- -- now has a file walker `walk()` - -0.24.0 / 2015-08-28 -------------------- -- removed alias `delete()` and `deleteSync()`. See: [#171][#171] - -0.23.1 / 2015-08-07 -------------------- -- Better handling of errors for `move()` when moving across devices. [#170][#170] -- `ensureSymlink()` and `ensureLink()` should not throw errors if link exists. [#169][#169] - -0.23.0 / 2015-08-06 -------------------- -- added `ensureLink{Sync}()` and `ensureSymlink{Sync}()`. See: [#165][#165] - -0.22.1 / 2015-07-09 -------------------- -- Prevent calling `hasMillisResSync()` on module load. See: [#149][#149]. -Fixes regression that was introduced in `0.21.0`. - -0.22.0 / 2015-07-09 -------------------- -- preserve permissions / ownership in `copy()`. See: [#54][#54] - -0.21.0 / 2015-07-04 -------------------- -- add option to preserve timestamps in `copy()` and `copySync()`. See: [#141][#141] -- updated `graceful-fs@3.x` to `4.x`. This brings in features from `amazing-graceful-fs` (much cleaner code / less hacks) - -0.20.1 / 2015-06-23 -------------------- -- fixed regression caused by latest jsonfile update: See: https://github.com/jprichardson/node-jsonfile/issues/26 - -0.20.0 / 2015-06-19 -------------------- -- removed `jsonfile` aliases with `File` in the name, they weren't documented and probably weren't in use e.g. -this package had both `fs.readJsonFile` and `fs.readJson` that were aliases to each other, now use `fs.readJson`. -- preliminary walker created. Intentionally not documented. If you use it, it will almost certainly change and break your code. -- started moving tests inline -- upgraded to `jsonfile@2.1.0`, can now pass JSON revivers/replacers to `readJson()`, `writeJson()`, `outputJson()` - -0.19.0 / 2015-06-08 -------------------- -- `fs.copy()` had support for Node v0.8, dropped support - -0.18.4 / 2015-05-22 -------------------- -- fixed license field according to this: [#136][#136] and https://github.com/npm/npm/releases/tag/v2.10.0 - -0.18.3 / 2015-05-08 -------------------- -- bugfix: handle `EEXIST` when clobbering on some Linux systems. [#134][#134] - -0.18.2 / 2015-04-17 -------------------- -- bugfix: allow `F_OK` ([#120][#120]) - -0.18.1 / 2015-04-15 -------------------- -- improved windows support for `move()` a bit. https://github.com/jprichardson/node-fs-extra/commit/92838980f25dc2ee4ec46b43ee14d3c4a1d30c1b -- fixed a lot of tests for Windows (appveyor) - -0.18.0 / 2015-03-31 -------------------- -- added `emptyDir()` and `emptyDirSync()` - -0.17.0 / 2015-03-28 -------------------- -- `copySync` added `clobber` option (before always would clobber, now if `clobber` is `false` it throws an error if the destination exists). -**Only works with files at the moment.** -- `createOutputStream()` added. See: [#118][#118] - -0.16.5 / 2015-03-08 -------------------- -- fixed `fs.move` when `clobber` is `true` and destination is a directory, it should clobber. [#114][#114] - -0.16.4 / 2015-03-01 -------------------- -- `fs.mkdirs` fix infinite loop on Windows. See: See https://github.com/substack/node-mkdirp/pull/74 and https://github.com/substack/node-mkdirp/issues/66 - -0.16.3 / 2015-01-28 -------------------- -- reverted https://github.com/jprichardson/node-fs-extra/commit/1ee77c8a805eba5b99382a2591ff99667847c9c9 - - -0.16.2 / 2015-01-28 -------------------- -- fixed `fs.copy` for Node v0.8 (support is temporary and will be removed in the near future) - -0.16.1 / 2015-01-28 -------------------- -- if `setImmediate` is not available, fall back to `process.nextTick` - -0.16.0 / 2015-01-28 -------------------- -- bugfix `fs.move()` into itself. Closes #104 -- bugfix `fs.move()` moving directory across device. Closes #108 -- added coveralls support -- bugfix: nasty multiple callback `fs.copy()` bug. Closes #98 -- misc fs.copy code cleanups - -0.15.0 / 2015-01-21 -------------------- -- dropped `ncp`, imported code in -- because of previous, now supports `io.js` -- `graceful-fs` is now a dependency - -0.14.0 / 2015-01-05 -------------------- -- changed `copy`/`copySync` from `fs.copy(src, dest, [filters], callback)` to `fs.copy(src, dest, [options], callback)` [#100][#100] -- removed mockfs tests for mkdirp (this may be temporary, but was getting in the way of other tests) - -0.13.0 / 2014-12-10 -------------------- -- removed `touch` and `touchSync` methods (they didn't handle permissions like UNIX touch) -- updated `"ncp": "^0.6.0"` to `"ncp": "^1.0.1"` -- imported `mkdirp` => `minimist` and `mkdirp` are no longer dependences, should now appease people who wanted `mkdirp` to be `--use_strict` safe. See [#59]([#59][#59]) - -0.12.0 / 2014-09-22 -------------------- -- copy symlinks in `copySync()` [#85][#85] - -0.11.1 / 2014-09-02 -------------------- -- bugfix `copySync()` preserve file permissions [#80][#80] - -0.11.0 / 2014-08-11 -------------------- -- upgraded `"ncp": "^0.5.1"` to `"ncp": "^0.6.0"` -- upgrade `jsonfile": "^1.2.0"` to `jsonfile": "^2.0.0"` => on write, json files now have `\n` at end. Also adds `options.throws` to `readJsonSync()` -see https://github.com/jprichardson/node-jsonfile#readfilesyncfilename-options for more details. - -0.10.0 / 2014-06-29 ------------------- -* bugfix: upgaded `"jsonfile": "~1.1.0"` to `"jsonfile": "^1.2.0"`, bumped minor because of `jsonfile` dep change -from `~` to `^`. #67 - -0.9.1 / 2014-05-22 ------------------- -* removed Node.js `0.8.x` support, `0.9.0` was published moments ago and should have been done there - -0.9.0 / 2014-05-22 ------------------- -* upgraded `ncp` from `~0.4.2` to `^0.5.1`, #58 -* upgraded `rimraf` from `~2.2.6` to `^2.2.8` -* upgraded `mkdirp` from `0.3.x` to `^0.5.0` -* added methods `ensureFile()`, `ensureFileSync()` -* added methods `ensureDir()`, `ensureDirSync()` #31 -* added `move()` method. From: https://github.com/andrewrk/node-mv - - -0.8.1 / 2013-10-24 ------------------- -* copy failed to return an error to the callback if a file doesn't exist (ulikoehler #38, #39) - -0.8.0 / 2013-10-14 ------------------- -* `filter` implemented on `copy()` and `copySync()`. (Srirangan / #36) - -0.7.1 / 2013-10-12 ------------------- -* `copySync()` implemented (Srirangan / #33) -* updated to the latest `jsonfile` version `1.1.0` which gives `options` params for the JSON methods. Closes #32 - -0.7.0 / 2013-10-07 ------------------- -* update readme conventions -* `copy()` now works if destination directory does not exist. Closes #29 - -0.6.4 / 2013-09-05 ------------------- -* changed `homepage` field in package.json to remove NPM warning - -0.6.3 / 2013-06-28 ------------------- -* changed JSON spacing default from `4` to `2` to follow Node conventions -* updated `jsonfile` dep -* updated `rimraf` dep - -0.6.2 / 2013-06-28 ------------------- -* added .npmignore, #25 - -0.6.1 / 2013-05-14 ------------------- -* modified for `strict` mode, closes #24 -* added `outputJson()/outputJsonSync()`, closes #23 - -0.6.0 / 2013-03-18 ------------------- -* removed node 0.6 support -* added node 0.10 support -* upgraded to latest `ncp` and `rimraf`. -* optional `graceful-fs` support. Closes #17 - - -0.5.0 / 2013-02-03 ------------------- -* Removed `readTextFile`. -* Renamed `readJSONFile` to `readJSON` and `readJson`, same with write. -* Restructured documentation a bit. Added roadmap. - -0.4.0 / 2013-01-28 ------------------- -* Set default spaces in `jsonfile` from 4 to 2. -* Updated `testutil` deps for tests. -* Renamed `touch()` to `createFile()` -* Added `outputFile()` and `outputFileSync()` -* Changed creation of testing diretories so the /tmp dir is not littered. -* Added `readTextFile()` and `readTextFileSync()`. - -0.3.2 / 2012-11-01 ------------------- -* Added `touch()` and `touchSync()` methods. - -0.3.1 / 2012-10-11 ------------------- -* Fixed some stray globals. - -0.3.0 / 2012-10-09 ------------------- -* Removed all CoffeeScript from tests. -* Renamed `mkdir` to `mkdirs`/`mkdirp`. - -0.2.1 / 2012-09-11 ------------------- -* Updated `rimraf` dep. - -0.2.0 / 2012-09-10 ------------------- -* Rewrote module into JavaScript. (Must still rewrite tests into JavaScript) -* Added all methods of [jsonfile][https://github.com/jprichardson/node-jsonfile] -* Added Travis-CI. - -0.1.3 / 2012-08-13 ------------------- -* Added method `readJSONFile`. - -0.1.2 / 2012-06-15 ------------------- -* Bug fix: `deleteSync()` didn't exist. -* Verified Node v0.8 compatibility. - -0.1.1 / 2012-06-15 ------------------- -* Fixed bug in `remove()`/`delete()` that wouldn't execute the function if a callback wasn't passed. - -0.1.0 / 2012-05-31 ------------------- -* Renamed `copyFile()` to `copy()`. `copy()` can now copy directories (recursively) too. -* Renamed `rmrf()` to `remove()`. -* `remove()` aliased with `delete()`. -* Added `mkdirp` capabilities. Named: `mkdir()`. Hides Node.js native `mkdir()`. -* Instead of exporting the native `fs` module with new functions, I now copy over the native methods to a new object and export that instead. - -0.0.4 / 2012-03-14 ------------------- -* Removed CoffeeScript dependency - -0.0.3 / 2012-01-11 ------------------- -* Added methods rmrf and rmrfSync -* Moved tests from Jasmine to Mocha - - -[#344]: https://github.com/jprichardson/node-fs-extra/issues/344 "Licence Year" -[#343]: https://github.com/jprichardson/node-fs-extra/pull/343 "Add klaw-sync link to readme" -[#342]: https://github.com/jprichardson/node-fs-extra/pull/342 "allow preserveTimestamps when use move" -[#341]: https://github.com/jprichardson/node-fs-extra/issues/341 "mkdirp(path.dirname(dest) in move() logic needs cleaning up [question]" -[#340]: https://github.com/jprichardson/node-fs-extra/pull/340 "Move docs to seperate docs folder [documentation]" -[#339]: https://github.com/jprichardson/node-fs-extra/pull/339 "Remove walk() & walkSync() [feature-walk]" -[#338]: https://github.com/jprichardson/node-fs-extra/issues/338 "Remove walk() and walkSync() [feature-walk]" -[#337]: https://github.com/jprichardson/node-fs-extra/issues/337 "copy doesn't return a yieldable value" -[#336]: https://github.com/jprichardson/node-fs-extra/pull/336 "Docs enhanced walk sync [documentation, feature-walk]" -[#335]: https://github.com/jprichardson/node-fs-extra/pull/335 "Refactor move() tests [feature-move]" -[#334]: https://github.com/jprichardson/node-fs-extra/pull/334 "Cleanup lib/move/index.js [feature-move]" -[#333]: https://github.com/jprichardson/node-fs-extra/pull/333 "Rename clobber to overwrite [feature-copy, feature-move]" -[#332]: https://github.com/jprichardson/node-fs-extra/pull/332 "BREAKING: Drop Node v0.12 & io.js support" -[#331]: https://github.com/jprichardson/node-fs-extra/issues/331 "Add support for chmodr [enhancement, future]" -[#330]: https://github.com/jprichardson/node-fs-extra/pull/330 "BREAKING: Do not error when copy destination exists & clobber: false [feature-copy]" -[#329]: https://github.com/jprichardson/node-fs-extra/issues/329 "Does .walk() scale to large directories? [question]" -[#328]: https://github.com/jprichardson/node-fs-extra/issues/328 "Copying files corrupts [feature-copy, needs-confirmed]" -[#327]: https://github.com/jprichardson/node-fs-extra/pull/327 "Use writeStream 'finish' event instead of 'close' [bug, feature-copy]" -[#326]: https://github.com/jprichardson/node-fs-extra/issues/326 "fs.copy fails with chmod error when disk under heavy use [bug, feature-copy]" -[#325]: https://github.com/jprichardson/node-fs-extra/issues/325 "ensureDir is difficult to promisify [enhancement]" -[#324]: https://github.com/jprichardson/node-fs-extra/pull/324 "copySync() should apply filter to directories like copy() [bug, feature-copy]" -[#323]: https://github.com/jprichardson/node-fs-extra/issues/323 "Support for `dest` being a directory when using `copy*()`?" -[#322]: https://github.com/jprichardson/node-fs-extra/pull/322 "Add fs-promise as fs-extra-promise alternative" -[#321]: https://github.com/jprichardson/node-fs-extra/issues/321 "fs.copy() with clobber set to false return EEXIST error [feature-copy]" -[#320]: https://github.com/jprichardson/node-fs-extra/issues/320 "fs.copySync: Error: EPERM: operation not permitted, unlink " -[#319]: https://github.com/jprichardson/node-fs-extra/issues/319 "Create directory if not exists" -[#318]: https://github.com/jprichardson/node-fs-extra/issues/318 "Support glob patterns [enhancement, future]" -[#317]: https://github.com/jprichardson/node-fs-extra/pull/317 "Adding copy sync test for src file without write perms" -[#316]: https://github.com/jprichardson/node-fs-extra/pull/316 "Remove move()'s broken limit option [feature-move]" -[#315]: https://github.com/jprichardson/node-fs-extra/pull/315 "Fix move clobber tests to work around graceful-fs bug." -[#314]: https://github.com/jprichardson/node-fs-extra/issues/314 "move() limit option [documentation, enhancement, feature-move]" -[#313]: https://github.com/jprichardson/node-fs-extra/pull/313 "Test that remove() ignores glob characters." -[#312]: https://github.com/jprichardson/node-fs-extra/pull/312 "Enhance walkSync() to return items with path and stats [feature-walk]" -[#311]: https://github.com/jprichardson/node-fs-extra/issues/311 "move() not work when dest name not provided [feature-move]" -[#310]: https://github.com/jprichardson/node-fs-extra/issues/310 "Edit walkSync to return items like what walk emits [documentation, enhancement, feature-walk]" -[#309]: https://github.com/jprichardson/node-fs-extra/issues/309 "moveSync support [enhancement, feature-move]" -[#308]: https://github.com/jprichardson/node-fs-extra/pull/308 "Fix incorrect anchor link" -[#307]: https://github.com/jprichardson/node-fs-extra/pull/307 "Fix coverage" -[#306]: https://github.com/jprichardson/node-fs-extra/pull/306 "Update devDeps, fix lint error" -[#305]: https://github.com/jprichardson/node-fs-extra/pull/305 "Re-add Coveralls" -[#304]: https://github.com/jprichardson/node-fs-extra/pull/304 "Remove path-is-absolute [enhancement]" -[#303]: https://github.com/jprichardson/node-fs-extra/pull/303 "Document copySync filter inconsistency [documentation, feature-copy]" -[#302]: https://github.com/jprichardson/node-fs-extra/pull/302 "fix(console): depreciated -> deprecated" -[#301]: https://github.com/jprichardson/node-fs-extra/pull/301 "Remove chmod call from copySync [feature-copy]" -[#300]: https://github.com/jprichardson/node-fs-extra/pull/300 "Inline Rimraf [enhancement, feature-move, feature-remove]" -[#299]: https://github.com/jprichardson/node-fs-extra/pull/299 "Warn when filter is a RegExp [feature-copy]" -[#298]: https://github.com/jprichardson/node-fs-extra/issues/298 "API Docs [documentation]" -[#297]: https://github.com/jprichardson/node-fs-extra/pull/297 "Warn about using preserveTimestamps on 32-bit node" -[#296]: https://github.com/jprichardson/node-fs-extra/pull/296 "Improve EEXIST error message for copySync [enhancement]" -[#295]: https://github.com/jprichardson/node-fs-extra/pull/295 "Depreciate using regular expressions for copy's filter option [documentation]" -[#294]: https://github.com/jprichardson/node-fs-extra/pull/294 "BREAKING: Refactor lib/copy/ncp.js [feature-copy]" -[#293]: https://github.com/jprichardson/node-fs-extra/pull/293 "Update CI configs" -[#292]: https://github.com/jprichardson/node-fs-extra/issues/292 "Rewrite lib/copy/ncp.js [enhancement, feature-copy]" -[#291]: https://github.com/jprichardson/node-fs-extra/pull/291 "Escape '$' in replacement string for async file copying" -[#290]: https://github.com/jprichardson/node-fs-extra/issues/290 "Exclude files pattern while copying using copy.config.js [question]" -[#289]: https://github.com/jprichardson/node-fs-extra/pull/289 "(Closes #271) lib/util/utimes: properly close file descriptors in the event of an error" -[#288]: https://github.com/jprichardson/node-fs-extra/pull/288 "(Closes #271) lib/util/utimes: properly close file descriptors in the event of an error" -[#287]: https://github.com/jprichardson/node-fs-extra/issues/287 "emptyDir() callback arguments are inconsistent [enhancement, feature-remove]" -[#286]: https://github.com/jprichardson/node-fs-extra/pull/286 "Added walkSync function" -[#285]: https://github.com/jprichardson/node-fs-extra/issues/285 "CITGM test failing on s390" -[#284]: https://github.com/jprichardson/node-fs-extra/issues/284 "outputFile method is missing a check to determine if existing item is a folder or not" -[#283]: https://github.com/jprichardson/node-fs-extra/pull/283 "Apply filter also on directories and symlinks for copySync()" -[#282]: https://github.com/jprichardson/node-fs-extra/pull/282 "Apply filter also on directories and symlinks for copySync()" -[#281]: https://github.com/jprichardson/node-fs-extra/issues/281 "remove function executes "successfully" but doesn't do anything?" -[#280]: https://github.com/jprichardson/node-fs-extra/pull/280 "Disable rimraf globbing" -[#279]: https://github.com/jprichardson/node-fs-extra/issues/279 "Some code is vendored instead of included [awaiting-reply]" -[#278]: https://github.com/jprichardson/node-fs-extra/issues/278 "copy() does not preserve file/directory ownership" -[#277]: https://github.com/jprichardson/node-fs-extra/pull/277 "Mention defaults for clobber and dereference options" -[#276]: https://github.com/jprichardson/node-fs-extra/issues/276 "Cannot connect to Shared Folder [awaiting-reply]" -[#275]: https://github.com/jprichardson/node-fs-extra/issues/275 "EMFILE, too many open files on Mac OS with JSON API" -[#274]: https://github.com/jprichardson/node-fs-extra/issues/274 "Use with memory-fs? [enhancement, future]" -[#273]: https://github.com/jprichardson/node-fs-extra/pull/273 "tests: rename `remote.test.js` to `remove.test.js`" -[#272]: https://github.com/jprichardson/node-fs-extra/issues/272 "Copy clobber flag never err even when true [bug, feature-copy]" -[#271]: https://github.com/jprichardson/node-fs-extra/issues/271 "Unclosed file handle on futimes error" -[#270]: https://github.com/jprichardson/node-fs-extra/issues/270 "copy not working as desired on Windows [feature-copy, platform-windows]" -[#269]: https://github.com/jprichardson/node-fs-extra/issues/269 "Copying with preserveTimeStamps: true is inaccurate using 32bit node [feature-copy]" -[#268]: https://github.com/jprichardson/node-fs-extra/pull/268 "port fix for mkdirp issue #111" -[#267]: https://github.com/jprichardson/node-fs-extra/issues/267 "WARN deprecated wrench@1.5.9: wrench.js is deprecated!" -[#266]: https://github.com/jprichardson/node-fs-extra/issues/266 "fs-extra" -[#265]: https://github.com/jprichardson/node-fs-extra/issues/265 "Link the `fs.stat fs.exists` etc. methods for replace the `fs` module forever?" -[#264]: https://github.com/jprichardson/node-fs-extra/issues/264 "Renaming a file using move fails when a file inside is open (at least on windows) [wont-fix]" -[#263]: https://github.com/jprichardson/node-fs-extra/issues/263 "ENOSYS: function not implemented, link [needs-confirmed]" -[#262]: https://github.com/jprichardson/node-fs-extra/issues/262 "Add .exists() and .existsSync()" -[#261]: https://github.com/jprichardson/node-fs-extra/issues/261 "Cannot read property 'prototype' of undefined" -[#260]: https://github.com/jprichardson/node-fs-extra/pull/260 "use more specific path for method require" -[#259]: https://github.com/jprichardson/node-fs-extra/issues/259 "Feature Request: isEmpty" -[#258]: https://github.com/jprichardson/node-fs-extra/issues/258 "copy files does not preserve file timestamp" -[#257]: https://github.com/jprichardson/node-fs-extra/issues/257 "Copying a file on windows fails" -[#256]: https://github.com/jprichardson/node-fs-extra/pull/256 "Updated Readme " -[#255]: https://github.com/jprichardson/node-fs-extra/issues/255 "Update rimraf required version" -[#254]: https://github.com/jprichardson/node-fs-extra/issues/254 "request for readTree, readTreeSync, walkSync method" -[#253]: https://github.com/jprichardson/node-fs-extra/issues/253 "outputFile does not touch mtime when file exists" -[#252]: https://github.com/jprichardson/node-fs-extra/pull/252 "Fixing problem when copying file with no write permission" -[#251]: https://github.com/jprichardson/node-fs-extra/issues/251 "Just wanted to say thank you" -[#250]: https://github.com/jprichardson/node-fs-extra/issues/250 "`fs.remove()` not removing files (works with `rm -rf`)" -[#249]: https://github.com/jprichardson/node-fs-extra/issues/249 "Just a Question ... Remove Servers" -[#248]: https://github.com/jprichardson/node-fs-extra/issues/248 "Allow option to not preserve permissions for copy" -[#247]: https://github.com/jprichardson/node-fs-extra/issues/247 "Add TypeScript typing directly in the fs-extra package" -[#246]: https://github.com/jprichardson/node-fs-extra/issues/246 "fse.remove() && fse.removeSync() don't throw error on ENOENT file" -[#245]: https://github.com/jprichardson/node-fs-extra/issues/245 "filter for empty dir [enhancement]" -[#244]: https://github.com/jprichardson/node-fs-extra/issues/244 "copySync doesn't apply the filter to directories" -[#243]: https://github.com/jprichardson/node-fs-extra/issues/243 "Can I request fs.walk() to be synchronous?" -[#242]: https://github.com/jprichardson/node-fs-extra/issues/242 "Accidentally truncates file names ending with $$ [bug, feature-copy]" -[#241]: https://github.com/jprichardson/node-fs-extra/pull/241 "Remove link to createOutputStream" -[#240]: https://github.com/jprichardson/node-fs-extra/issues/240 "walkSync request" -[#239]: https://github.com/jprichardson/node-fs-extra/issues/239 "Depreciate regular expressions for copy's filter [documentation, feature-copy]" -[#238]: https://github.com/jprichardson/node-fs-extra/issues/238 "Can't write to files while in a worker thread." -[#237]: https://github.com/jprichardson/node-fs-extra/issues/237 ".ensureDir(..) fails silently when passed an invalid path..." -[#236]: https://github.com/jprichardson/node-fs-extra/issues/236 "[Removed] Filed under wrong repo" -[#235]: https://github.com/jprichardson/node-fs-extra/pull/235 "Adds symlink dereference option to `fse.copySync` (#191)" -[#234]: https://github.com/jprichardson/node-fs-extra/issues/234 "ensureDirSync fails silent when EACCES: permission denied on travis-ci" -[#233]: https://github.com/jprichardson/node-fs-extra/issues/233 "please make sure the first argument in callback is error object [feature-copy]" -[#232]: https://github.com/jprichardson/node-fs-extra/issues/232 "Copy a folder content to its child folder. " -[#231]: https://github.com/jprichardson/node-fs-extra/issues/231 "Adding read/write/output functions for YAML" -[#230]: https://github.com/jprichardson/node-fs-extra/pull/230 "throw error if src and dest are the same to avoid zeroing out + test" -[#229]: https://github.com/jprichardson/node-fs-extra/pull/229 "fix 'TypeError: callback is not a function' in emptyDir" -[#228]: https://github.com/jprichardson/node-fs-extra/pull/228 "Throw error when target is empty so file is not accidentally zeroed out" -[#227]: https://github.com/jprichardson/node-fs-extra/issues/227 "Uncatchable errors when there are invalid arguments [feature-move]" -[#226]: https://github.com/jprichardson/node-fs-extra/issues/226 "Moving to the current directory" -[#225]: https://github.com/jprichardson/node-fs-extra/issues/225 "EBUSY: resource busy or locked, unlink" -[#224]: https://github.com/jprichardson/node-fs-extra/issues/224 "fse.copy ENOENT error" -[#223]: https://github.com/jprichardson/node-fs-extra/issues/223 "Suspicious behavior of fs.existsSync" -[#222]: https://github.com/jprichardson/node-fs-extra/pull/222 "A clearer description of emtpyDir function" -[#221]: https://github.com/jprichardson/node-fs-extra/pull/221 "Update README.md" -[#220]: https://github.com/jprichardson/node-fs-extra/pull/220 "Non-breaking feature: add option 'passStats' to copy methods." -[#219]: https://github.com/jprichardson/node-fs-extra/pull/219 "Add closing parenthesis in copySync example" -[#218]: https://github.com/jprichardson/node-fs-extra/pull/218 "fix #187 #70 options.filter bug" -[#217]: https://github.com/jprichardson/node-fs-extra/pull/217 "fix #187 #70 options.filter bug" -[#216]: https://github.com/jprichardson/node-fs-extra/pull/216 "fix #187 #70 options.filter bug" -[#215]: https://github.com/jprichardson/node-fs-extra/pull/215 "fse.copy throws error when only src and dest provided [bug, documentation, feature-copy]" -[#214]: https://github.com/jprichardson/node-fs-extra/pull/214 "Fixing copySync anchor tag" -[#213]: https://github.com/jprichardson/node-fs-extra/issues/213 "Merge extfs with this repo" -[#212]: https://github.com/jprichardson/node-fs-extra/pull/212 "Update year to 2016 in README.md and LICENSE" -[#211]: https://github.com/jprichardson/node-fs-extra/issues/211 "Not copying all files" -[#210]: https://github.com/jprichardson/node-fs-extra/issues/210 "copy/copySync behave differently when copying a symbolic file [bug, documentation, feature-copy]" -[#209]: https://github.com/jprichardson/node-fs-extra/issues/209 "In Windows invalid directory name causes infinite loop in ensureDir(). [bug]" -[#208]: https://github.com/jprichardson/node-fs-extra/pull/208 "fix options.preserveTimestamps to false in copy-sync by default [feature-copy]" -[#207]: https://github.com/jprichardson/node-fs-extra/issues/207 "Add `compare` suite of functions" -[#206]: https://github.com/jprichardson/node-fs-extra/issues/206 "outputFileSync" -[#205]: https://github.com/jprichardson/node-fs-extra/issues/205 "fix documents about copy/copySync [documentation, feature-copy]" -[#204]: https://github.com/jprichardson/node-fs-extra/pull/204 "allow copy of block and character device files" -[#203]: https://github.com/jprichardson/node-fs-extra/issues/203 "copy method's argument options couldn't be undefined [bug, feature-copy]" -[#202]: https://github.com/jprichardson/node-fs-extra/issues/202 "why there is not a walkSync method?" -[#201]: https://github.com/jprichardson/node-fs-extra/issues/201 "clobber for directories [feature-copy, future]" -[#200]: https://github.com/jprichardson/node-fs-extra/issues/200 "'copySync' doesn't work in sync" -[#199]: https://github.com/jprichardson/node-fs-extra/issues/199 "fs.copySync fails if user does not own file [bug, feature-copy]" -[#198]: https://github.com/jprichardson/node-fs-extra/issues/198 "handle copying between identical files [feature-copy]" -[#197]: https://github.com/jprichardson/node-fs-extra/issues/197 "Missing documentation for `outputFile` `options` 3rd parameter [documentation]" -[#196]: https://github.com/jprichardson/node-fs-extra/issues/196 "copy filter: async function and/or function called with `fs.stat` result [future]" -[#195]: https://github.com/jprichardson/node-fs-extra/issues/195 "How to override with outputFile?" -[#194]: https://github.com/jprichardson/node-fs-extra/pull/194 "allow ensureFile(Sync) to provide data to be written to created file" -[#193]: https://github.com/jprichardson/node-fs-extra/issues/193 "`fs.copy` fails silently if source file is /dev/null [bug, feature-copy]" -[#192]: https://github.com/jprichardson/node-fs-extra/issues/192 "Remove fs.createOutputStream()" -[#191]: https://github.com/jprichardson/node-fs-extra/issues/191 "How to copy symlinks to target as normal folders [feature-copy]" -[#190]: https://github.com/jprichardson/node-fs-extra/pull/190 "copySync to overwrite destination file if readonly and clobber true" -[#189]: https://github.com/jprichardson/node-fs-extra/pull/189 "move.test fix to support CRLF on Windows" -[#188]: https://github.com/jprichardson/node-fs-extra/issues/188 "move.test failing on windows platform" -[#187]: https://github.com/jprichardson/node-fs-extra/issues/187 "Not filter each file, stops on first false [feature-copy]" -[#186]: https://github.com/jprichardson/node-fs-extra/issues/186 "Do you need a .size() function in this module? [future]" -[#185]: https://github.com/jprichardson/node-fs-extra/issues/185 "Doesn't work on NodeJS v4.x" -[#184]: https://github.com/jprichardson/node-fs-extra/issues/184 "CLI equivalent for fs-extra" -[#183]: https://github.com/jprichardson/node-fs-extra/issues/183 "with clobber true, copy and copySync behave differently if destination file is read only [bug, feature-copy]" -[#182]: https://github.com/jprichardson/node-fs-extra/issues/182 "ensureDir(dir, callback) second callback parameter not specified" -[#181]: https://github.com/jprichardson/node-fs-extra/issues/181 "Add ability to remove file securely [enhancement, wont-fix]" -[#180]: https://github.com/jprichardson/node-fs-extra/issues/180 "Filter option doesn't work the same way in copy and copySync [bug, feature-copy]" -[#179]: https://github.com/jprichardson/node-fs-extra/issues/179 "Include opendir" -[#178]: https://github.com/jprichardson/node-fs-extra/issues/178 "ENOTEMPTY is thrown on removeSync " -[#177]: https://github.com/jprichardson/node-fs-extra/issues/177 "fix `remove()` wildcards (introduced by rimraf) [feature-remove]" -[#176]: https://github.com/jprichardson/node-fs-extra/issues/176 "createOutputStream doesn't emit 'end' event" -[#175]: https://github.com/jprichardson/node-fs-extra/issues/175 "[Feature Request].moveSync support [feature-move, future]" -[#174]: https://github.com/jprichardson/node-fs-extra/pull/174 "Fix copy formatting and document options.filter" -[#173]: https://github.com/jprichardson/node-fs-extra/issues/173 "Feature Request: writeJson should mkdirs" -[#172]: https://github.com/jprichardson/node-fs-extra/issues/172 "rename `clobber` flags to `overwrite`" -[#171]: https://github.com/jprichardson/node-fs-extra/issues/171 "remove unnecessary aliases" -[#170]: https://github.com/jprichardson/node-fs-extra/pull/170 "More robust handling of errors moving across virtual drives" -[#169]: https://github.com/jprichardson/node-fs-extra/pull/169 "suppress ensureLink & ensureSymlink dest exists error" -[#168]: https://github.com/jprichardson/node-fs-extra/pull/168 "suppress ensurelink dest exists error" -[#167]: https://github.com/jprichardson/node-fs-extra/pull/167 "Adds basic (string, buffer) support for ensureFile content [future]" -[#166]: https://github.com/jprichardson/node-fs-extra/pull/166 "Adds basic (string, buffer) support for ensureFile content" -[#165]: https://github.com/jprichardson/node-fs-extra/pull/165 "ensure for link & symlink" -[#164]: https://github.com/jprichardson/node-fs-extra/issues/164 "Feature Request: ensureFile to take optional argument for file content" -[#163]: https://github.com/jprichardson/node-fs-extra/issues/163 "ouputJson not formatted out of the box [bug]" -[#162]: https://github.com/jprichardson/node-fs-extra/pull/162 "ensure symlink & link" -[#161]: https://github.com/jprichardson/node-fs-extra/pull/161 "ensure symlink & link" -[#160]: https://github.com/jprichardson/node-fs-extra/pull/160 "ensure symlink & link" -[#159]: https://github.com/jprichardson/node-fs-extra/pull/159 "ensure symlink & link" -[#158]: https://github.com/jprichardson/node-fs-extra/issues/158 "Feature Request: ensureLink and ensureSymlink methods" -[#157]: https://github.com/jprichardson/node-fs-extra/issues/157 "writeJson isn't formatted" -[#156]: https://github.com/jprichardson/node-fs-extra/issues/156 "Promise.promisifyAll doesn't work for some methods" -[#155]: https://github.com/jprichardson/node-fs-extra/issues/155 "Readme" -[#154]: https://github.com/jprichardson/node-fs-extra/issues/154 "/tmp/millis-test-sync" -[#153]: https://github.com/jprichardson/node-fs-extra/pull/153 "Make preserveTimes also work on read-only files. Closes #152" -[#152]: https://github.com/jprichardson/node-fs-extra/issues/152 "fs.copy fails for read-only files with preserveTimestamp=true [feature-copy]" -[#151]: https://github.com/jprichardson/node-fs-extra/issues/151 "TOC does not work correctly on npm [documentation]" -[#150]: https://github.com/jprichardson/node-fs-extra/issues/150 "Remove test file fixtures, create with code." -[#149]: https://github.com/jprichardson/node-fs-extra/issues/149 "/tmp/millis-test-sync" -[#148]: https://github.com/jprichardson/node-fs-extra/issues/148 "split out `Sync` methods in documentation" -[#147]: https://github.com/jprichardson/node-fs-extra/issues/147 "Adding rmdirIfEmpty" -[#146]: https://github.com/jprichardson/node-fs-extra/pull/146 "ensure test.js works" -[#145]: https://github.com/jprichardson/node-fs-extra/issues/145 "Add `fs.exists` and `fs.existsSync` if it doesn't exist." -[#144]: https://github.com/jprichardson/node-fs-extra/issues/144 "tests failing" -[#143]: https://github.com/jprichardson/node-fs-extra/issues/143 "update graceful-fs" -[#142]: https://github.com/jprichardson/node-fs-extra/issues/142 "PrependFile Feature" -[#141]: https://github.com/jprichardson/node-fs-extra/pull/141 "Add option to preserve timestamps" -[#140]: https://github.com/jprichardson/node-fs-extra/issues/140 "Json file reading fails with 'utf8'" -[#139]: https://github.com/jprichardson/node-fs-extra/pull/139 "Preserve file timestamp on copy. Closes #138" -[#138]: https://github.com/jprichardson/node-fs-extra/issues/138 "Preserve timestamps on copying files" -[#137]: https://github.com/jprichardson/node-fs-extra/issues/137 "outputFile/outputJson: Unexpected end of input" -[#136]: https://github.com/jprichardson/node-fs-extra/pull/136 "Update license attribute" -[#135]: https://github.com/jprichardson/node-fs-extra/issues/135 "emptyDir throws Error if no callback is provided" -[#134]: https://github.com/jprichardson/node-fs-extra/pull/134 "Handle EEXIST error when clobbering dir" -[#133]: https://github.com/jprichardson/node-fs-extra/pull/133 "Travis runs with `sudo: false`" -[#132]: https://github.com/jprichardson/node-fs-extra/pull/132 "isDirectory method" -[#131]: https://github.com/jprichardson/node-fs-extra/issues/131 "copySync is not working iojs 1.8.4 on linux [feature-copy]" -[#130]: https://github.com/jprichardson/node-fs-extra/pull/130 "Please review additional features." -[#129]: https://github.com/jprichardson/node-fs-extra/pull/129 "can you review this feature?" -[#128]: https://github.com/jprichardson/node-fs-extra/issues/128 "fsExtra.move(filepath, newPath) broken;" -[#127]: https://github.com/jprichardson/node-fs-extra/issues/127 "consider using fs.access to remove deprecated warnings for fs.exists" -[#126]: https://github.com/jprichardson/node-fs-extra/issues/126 " TypeError: Object # has no method 'access'" -[#125]: https://github.com/jprichardson/node-fs-extra/issues/125 "Question: What do the *Sync function do different from non-sync" -[#124]: https://github.com/jprichardson/node-fs-extra/issues/124 "move with clobber option 'ENOTEMPTY'" -[#123]: https://github.com/jprichardson/node-fs-extra/issues/123 "Only copy the content of a directory" -[#122]: https://github.com/jprichardson/node-fs-extra/pull/122 "Update section links in README to match current section ids." -[#121]: https://github.com/jprichardson/node-fs-extra/issues/121 "emptyDir is undefined" -[#120]: https://github.com/jprichardson/node-fs-extra/issues/120 "usage bug caused by shallow cloning methods of 'graceful-fs'" -[#119]: https://github.com/jprichardson/node-fs-extra/issues/119 "mkdirs and ensureDir never invoke callback and consume CPU indefinitely if provided a path with invalid characters on Windows" -[#118]: https://github.com/jprichardson/node-fs-extra/pull/118 "createOutputStream" -[#117]: https://github.com/jprichardson/node-fs-extra/pull/117 "Fixed issue with slash separated paths on windows" -[#116]: https://github.com/jprichardson/node-fs-extra/issues/116 "copySync can only copy directories not files [documentation, feature-copy]" -[#115]: https://github.com/jprichardson/node-fs-extra/issues/115 ".Copy & .CopySync [feature-copy]" -[#114]: https://github.com/jprichardson/node-fs-extra/issues/114 "Fails to move (rename) directory to non-empty directory even with clobber: true" -[#113]: https://github.com/jprichardson/node-fs-extra/issues/113 "fs.copy seems to callback early if the destination file already exists" -[#112]: https://github.com/jprichardson/node-fs-extra/pull/112 "Copying a file into an existing directory" -[#111]: https://github.com/jprichardson/node-fs-extra/pull/111 "Moving a file into an existing directory " -[#110]: https://github.com/jprichardson/node-fs-extra/pull/110 "Moving a file into an existing directory" -[#109]: https://github.com/jprichardson/node-fs-extra/issues/109 "fs.move across windows drives fails" -[#108]: https://github.com/jprichardson/node-fs-extra/issues/108 "fse.move directories across multiple devices doesn't work" -[#107]: https://github.com/jprichardson/node-fs-extra/pull/107 "Check if dest path is an existing dir and copy or move source in it" -[#106]: https://github.com/jprichardson/node-fs-extra/issues/106 "fse.copySync crashes while copying across devices D: [feature-copy]" -[#105]: https://github.com/jprichardson/node-fs-extra/issues/105 "fs.copy hangs on iojs" -[#104]: https://github.com/jprichardson/node-fs-extra/issues/104 "fse.move deletes folders [bug]" -[#103]: https://github.com/jprichardson/node-fs-extra/issues/103 "Error: EMFILE with copy" -[#102]: https://github.com/jprichardson/node-fs-extra/issues/102 "touch / touchSync was removed ?" -[#101]: https://github.com/jprichardson/node-fs-extra/issues/101 "fs-extra promisified" -[#100]: https://github.com/jprichardson/node-fs-extra/pull/100 "copy: options object or filter to pass to ncp" -[#99]: https://github.com/jprichardson/node-fs-extra/issues/99 "ensureDir() modes [future]" -[#98]: https://github.com/jprichardson/node-fs-extra/issues/98 "fs.copy() incorrect async behavior [bug]" -[#97]: https://github.com/jprichardson/node-fs-extra/pull/97 "use path.join; fix copySync bug" -[#96]: https://github.com/jprichardson/node-fs-extra/issues/96 "destFolderExists in copySync is always undefined." -[#95]: https://github.com/jprichardson/node-fs-extra/pull/95 "Using graceful-ncp instead of ncp" -[#94]: https://github.com/jprichardson/node-fs-extra/issues/94 "Error: EEXIST, file already exists '../mkdirp/bin/cmd.js' on fs.copySync() [enhancement, feature-copy]" -[#93]: https://github.com/jprichardson/node-fs-extra/issues/93 "Confusing error if drive not mounted [enhancement]" -[#92]: https://github.com/jprichardson/node-fs-extra/issues/92 "Problems with Bluebird" -[#91]: https://github.com/jprichardson/node-fs-extra/issues/91 "fs.copySync('/test', '/haha') is different with 'cp -r /test /haha' [enhancement]" -[#90]: https://github.com/jprichardson/node-fs-extra/issues/90 "Folder creation and file copy is Happening in 64 bit machine but not in 32 bit machine" -[#89]: https://github.com/jprichardson/node-fs-extra/issues/89 "Error: EEXIST using fs-extra's fs.copy to copy a directory on Windows" -[#88]: https://github.com/jprichardson/node-fs-extra/issues/88 "Stacking those libraries" -[#87]: https://github.com/jprichardson/node-fs-extra/issues/87 "createWriteStream + outputFile = ?" -[#86]: https://github.com/jprichardson/node-fs-extra/issues/86 "no moveSync?" -[#85]: https://github.com/jprichardson/node-fs-extra/pull/85 "Copy symlinks in copySync" -[#84]: https://github.com/jprichardson/node-fs-extra/issues/84 "Push latest version to npm ?" -[#83]: https://github.com/jprichardson/node-fs-extra/issues/83 "Prevent copying a directory into itself [feature-copy]" -[#82]: https://github.com/jprichardson/node-fs-extra/pull/82 "README updates for move" -[#81]: https://github.com/jprichardson/node-fs-extra/issues/81 "fd leak after fs.move" -[#80]: https://github.com/jprichardson/node-fs-extra/pull/80 "Preserve file mode in copySync" -[#79]: https://github.com/jprichardson/node-fs-extra/issues/79 "fs.copy only .html file empty" -[#78]: https://github.com/jprichardson/node-fs-extra/pull/78 "copySync was not applying filters to directories" -[#77]: https://github.com/jprichardson/node-fs-extra/issues/77 "Create README reference to bluebird" -[#76]: https://github.com/jprichardson/node-fs-extra/issues/76 "Create README reference to typescript" -[#75]: https://github.com/jprichardson/node-fs-extra/issues/75 "add glob as a dep? [question]" -[#74]: https://github.com/jprichardson/node-fs-extra/pull/74 "including new emptydir module" -[#73]: https://github.com/jprichardson/node-fs-extra/pull/73 "add dependency status in readme" -[#72]: https://github.com/jprichardson/node-fs-extra/pull/72 "Use svg instead of png to get better image quality" -[#71]: https://github.com/jprichardson/node-fs-extra/issues/71 "fse.copy not working on Windows 7 x64 OS, but, copySync does work" -[#70]: https://github.com/jprichardson/node-fs-extra/issues/70 "Not filter each file, stops on first false [bug]" -[#69]: https://github.com/jprichardson/node-fs-extra/issues/69 "How to check if folder exist and read the folder name" -[#68]: https://github.com/jprichardson/node-fs-extra/issues/68 "consider flag to readJsonSync (throw false) [enhancement]" -[#67]: https://github.com/jprichardson/node-fs-extra/issues/67 "docs for readJson incorrectly states that is accepts options" -[#66]: https://github.com/jprichardson/node-fs-extra/issues/66 "ENAMETOOLONG" -[#65]: https://github.com/jprichardson/node-fs-extra/issues/65 "exclude filter in fs.copy" -[#64]: https://github.com/jprichardson/node-fs-extra/issues/64 "Announce: mfs - monitor your fs-extra calls" -[#63]: https://github.com/jprichardson/node-fs-extra/issues/63 "Walk" -[#62]: https://github.com/jprichardson/node-fs-extra/issues/62 "npm install fs-extra doesn't work" -[#61]: https://github.com/jprichardson/node-fs-extra/issues/61 "No longer supports node 0.8 due to use of `^` in package.json dependencies" -[#60]: https://github.com/jprichardson/node-fs-extra/issues/60 "chmod & chown for mkdirs" -[#59]: https://github.com/jprichardson/node-fs-extra/issues/59 "Consider including mkdirp and making fs-extra "--use_strict" safe [question]" -[#58]: https://github.com/jprichardson/node-fs-extra/issues/58 "Stack trace not included in fs.copy error" -[#57]: https://github.com/jprichardson/node-fs-extra/issues/57 "Possible to include wildcards in delete?" -[#56]: https://github.com/jprichardson/node-fs-extra/issues/56 "Crash when have no access to write to destination file in copy " -[#55]: https://github.com/jprichardson/node-fs-extra/issues/55 "Is it possible to have any console output similar to Grunt copy module?" -[#54]: https://github.com/jprichardson/node-fs-extra/issues/54 "`copy` does not preserve file ownership and permissons" -[#53]: https://github.com/jprichardson/node-fs-extra/issues/53 "outputFile() - ability to write data in appending mode" -[#52]: https://github.com/jprichardson/node-fs-extra/pull/52 "This fixes (what I think) is a bug in copySync" -[#51]: https://github.com/jprichardson/node-fs-extra/pull/51 "Add a Bitdeli Badge to README" -[#50]: https://github.com/jprichardson/node-fs-extra/issues/50 "Replace mechanism in createFile" -[#49]: https://github.com/jprichardson/node-fs-extra/pull/49 "update rimraf to v2.2.6" -[#48]: https://github.com/jprichardson/node-fs-extra/issues/48 "fs.copy issue [bug]" -[#47]: https://github.com/jprichardson/node-fs-extra/issues/47 "Bug in copy - callback called on readStream "close" - Fixed in ncp 0.5.0" -[#46]: https://github.com/jprichardson/node-fs-extra/pull/46 "update copyright year" -[#45]: https://github.com/jprichardson/node-fs-extra/pull/45 "Added note about fse.outputFile() being the one that overwrites" -[#44]: https://github.com/jprichardson/node-fs-extra/pull/44 "Proposal: Stream support" -[#43]: https://github.com/jprichardson/node-fs-extra/issues/43 "Better error reporting " -[#42]: https://github.com/jprichardson/node-fs-extra/issues/42 "Performance issue?" -[#41]: https://github.com/jprichardson/node-fs-extra/pull/41 "There does seem to be a synchronous version now" -[#40]: https://github.com/jprichardson/node-fs-extra/issues/40 "fs.copy throw unexplained error ENOENT, utime " -[#39]: https://github.com/jprichardson/node-fs-extra/pull/39 "Added regression test for copy() return callback on error" -[#38]: https://github.com/jprichardson/node-fs-extra/pull/38 "Return err in copy() fstat cb, because stat could be undefined or null" -[#37]: https://github.com/jprichardson/node-fs-extra/issues/37 "Maybe include a line reader? [enhancement, question]" -[#36]: https://github.com/jprichardson/node-fs-extra/pull/36 "`filter` parameter `fs.copy` and `fs.copySync`" -[#35]: https://github.com/jprichardson/node-fs-extra/pull/35 "`filter` parameter `fs.copy` and `fs.copySync` " -[#34]: https://github.com/jprichardson/node-fs-extra/issues/34 "update docs to include options for JSON methods [enhancement]" -[#33]: https://github.com/jprichardson/node-fs-extra/pull/33 "fs_extra.copySync" -[#32]: https://github.com/jprichardson/node-fs-extra/issues/32 "update to latest jsonfile [enhancement]" -[#31]: https://github.com/jprichardson/node-fs-extra/issues/31 "Add ensure methods [enhancement]" -[#30]: https://github.com/jprichardson/node-fs-extra/issues/30 "update package.json optional dep `graceful-fs`" -[#29]: https://github.com/jprichardson/node-fs-extra/issues/29 "Copy failing if dest directory doesn't exist. Is this intended?" -[#28]: https://github.com/jprichardson/node-fs-extra/issues/28 "homepage field must be a string url. Deleted." -[#27]: https://github.com/jprichardson/node-fs-extra/issues/27 "Update Readme" -[#26]: https://github.com/jprichardson/node-fs-extra/issues/26 "Add readdir recursive method. [enhancement]" -[#25]: https://github.com/jprichardson/node-fs-extra/pull/25 "adding an `.npmignore` file" -[#24]: https://github.com/jprichardson/node-fs-extra/issues/24 "[bug] cannot run in strict mode [bug]" -[#23]: https://github.com/jprichardson/node-fs-extra/issues/23 "`writeJSON()` should create parent directories" -[#22]: https://github.com/jprichardson/node-fs-extra/pull/22 "Add a limit option to mkdirs()" -[#21]: https://github.com/jprichardson/node-fs-extra/issues/21 "touch() in 0.10.0" -[#20]: https://github.com/jprichardson/node-fs-extra/issues/20 "fs.remove yields callback before directory is really deleted" -[#19]: https://github.com/jprichardson/node-fs-extra/issues/19 "fs.copy err is empty array" -[#18]: https://github.com/jprichardson/node-fs-extra/pull/18 "Exposed copyFile Function" -[#17]: https://github.com/jprichardson/node-fs-extra/issues/17 "Use `require("graceful-fs")` if found instead of `require("fs")`" -[#16]: https://github.com/jprichardson/node-fs-extra/pull/16 "Update README.md" -[#15]: https://github.com/jprichardson/node-fs-extra/issues/15 "Implement cp -r but sync aka copySync. [enhancement]" -[#14]: https://github.com/jprichardson/node-fs-extra/issues/14 "fs.mkdirSync is broken in 0.3.1" -[#13]: https://github.com/jprichardson/node-fs-extra/issues/13 "Thoughts on including a directory tree / file watcher? [enhancement, question]" -[#12]: https://github.com/jprichardson/node-fs-extra/issues/12 "copyFile & copyFileSync are global" -[#11]: https://github.com/jprichardson/node-fs-extra/issues/11 "Thoughts on including a file walker? [enhancement, question]" -[#10]: https://github.com/jprichardson/node-fs-extra/issues/10 "move / moveFile API [enhancement]" -[#9]: https://github.com/jprichardson/node-fs-extra/issues/9 "don't import normal fs stuff into fs-extra" -[#8]: https://github.com/jprichardson/node-fs-extra/pull/8 "Update rimraf to latest version" -[#6]: https://github.com/jprichardson/node-fs-extra/issues/6 "Remove CoffeeScript development dependency" -[#5]: https://github.com/jprichardson/node-fs-extra/issues/5 "comments on naming" -[#4]: https://github.com/jprichardson/node-fs-extra/issues/4 "version bump to 0.2" -[#3]: https://github.com/jprichardson/node-fs-extra/pull/3 "Hi! I fixed some code for you!" -[#2]: https://github.com/jprichardson/node-fs-extra/issues/2 "Merge with fs.extra and mkdirp" -[#1]: https://github.com/jprichardson/node-fs-extra/issues/1 "file-extra npm !exist" diff --git a/truebit-implementation/node_modules/fs-extra/LICENSE b/truebit-implementation/node_modules/fs-extra/LICENSE deleted file mode 100644 index 93546dfb..00000000 --- a/truebit-implementation/node_modules/fs-extra/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -(The MIT License) - -Copyright (c) 2011-2017 JP Richardson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files -(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/fs-extra/README.md b/truebit-implementation/node_modules/fs-extra/README.md deleted file mode 100644 index cee43993..00000000 --- a/truebit-implementation/node_modules/fs-extra/README.md +++ /dev/null @@ -1,251 +0,0 @@ -Node.js: fs-extra -================= - -`fs-extra` adds file system methods that aren't included in the native `fs` module. It is a drop in replacement for `fs`. - -[![npm Package](https://img.shields.io/npm/v/fs-extra.svg?style=flat-square)](https://www.npmjs.org/package/fs-extra) -[![build status](https://api.travis-ci.org/jprichardson/node-fs-extra.svg)](http://travis-ci.org/jprichardson/node-fs-extra) -[![windows Build status](https://img.shields.io/appveyor/ci/jprichardson/node-fs-extra/master.svg?label=windows%20build)](https://ci.appveyor.com/project/jprichardson/node-fs-extra/branch/master) -[![downloads per month](http://img.shields.io/npm/dm/fs-extra.svg)](https://www.npmjs.org/package/fs-extra) -[![Coverage Status](https://img.shields.io/coveralls/jprichardson/node-fs-extra.svg)](https://coveralls.io/r/jprichardson/node-fs-extra) - -Standard JavaScript - - -Why? ----- - -I got tired of including `mkdirp`, `rimraf`, and `ncp` in most of my projects. - - - - -Installation ------------- - - npm install --save fs-extra - - - -Usage ------ - -`fs-extra` is a drop in replacement for native `fs`. All methods in `fs` are unmodified and attached to `fs-extra`. - -You don't ever need to include the original `fs` module again: - -```js -const fs = require('fs') // this is no longer necessary -``` - -you can now do this: - -```js -const fs = require('fs-extra') -``` - -or if you prefer to make it clear that you're using `fs-extra` and not `fs`, you may want -to name your `fs` variable `fse` like so: - -```js -const fse = require('fs-extra') -``` - -you can also keep both, but it's redundant: - -```js -const fs = require('fs') -const fse = require('fs-extra') -``` - -Sync vs Async -------------- -Most methods are async by default (they take a callback with an `Error` as first argument). - -Sync methods on the other hand will throw if an error occurs. - -Example: - -```js -const fs = require('fs-extra') - -fs.copy('/tmp/myfile', '/tmp/mynewfile', err => { - if (err) return console.error(err) - console.log("success!") -}); - -try { - fs.copySync('/tmp/myfile', '/tmp/mynewfile') - console.log("success!") -} catch (err) { - console.error(err) -} -``` - - -Methods -------- - -### Async - -- [copy](docs/copy.md) -- [emptyDir](docs/emptyDir.md) -- [ensureFile](docs/ensureFile.md) -- [ensureDir](docs/ensureDir.md) -- [ensureLink](docs/ensureLink.md) -- [ensureSymlink](docs/ensureSymlink.md) -- [mkdirs](docs/ensureDir.md) -- [move](docs/move.md) -- [outputFile](docs/outputFile.md) -- [outputJson](docs/outputJson.md) -- [readJson](docs/readJson.md) -- [remove](docs/remove.md) -- [writeJson](docs/writeJson.md) - -### Sync - -- [copySync](docs/copy-sync.md) -- [emptyDirSync](docs/emptyDir-sync.md) -- [ensureFileSync](docs/ensureFile-sync.md) -- [ensureDirSync](docs/ensureDir-sync.md) -- [ensureLinkSync](docs/ensureLink-sync.md) -- [ensureSymlinkSync](docs/ensureSymlink-sync.md) -- [mkdirsSync](docs/ensureDir-sync.md) -- [moveSync](docs/move-sync.md) -- [outputFileSync](docs/outputFile-sync.md) -- [outputJsonSync](docs/outputJson-sync.md) -- [readJsonSync](docs/readJson-sync.md) -- [removeSync](docs/remove-sync.md) -- [writeJsonSync](docs/writeJson-sync.md) - - -**NOTE:** You can still use the native Node.js methods. They are copied over to `fs-extra`. - -### What happened to `walk()` and `walkSync()`? - -They were removed from `fs-extra` in v2.0.0. If you need the functionality, `walk` and `walkSync` are available as separate packages, [`klaw`](https://github.com/jprichardson/node-klaw) and [`klaw-sync`](https://github.com/manidlou/node-klaw-sync). - - -Third Party ------------ - -### Promises - -Use [Bluebird](https://github.com/petkaantonov/bluebird). See https://github.com/petkaantonov/bluebird/blob/master/API.md#promisification. `fs-extra` is -explicitly listed as supported. - -```js -const Promise = require('bluebird') -const fs = Promise.promisifyAll(require('fs-extra')) -``` - -Or you can use a dedicated package: - -- [`fs-extra-promise`](https://github.com/overlookmotel/fs-extra-promise) uses Bluebird. -- [`fs-promise`](https://github.com/kevinbeaty/fs-promise) uses - [Any Promise](https://github.com/kevinbeaty/any-promise) and also covers - [`mz/fs`](https://github.com/normalize/mz/blob/master/fs.js). -- [`fs-p`](https://github.com/grammarly/fs-p) - TypeScript-friendly promises implementation - - -### TypeScript - -If you like TypeScript, you can use `fs-extra` with it: https://github.com/borisyankov/DefinitelyTyped/tree/master/fs-extra - - -### File / Directory Watching - -If you want to watch for changes to files or directories, then you should use [chokidar](https://github.com/paulmillr/chokidar). - - -### Misc. - -- [mfs](https://github.com/cadorn/mfs) - Monitor your fs-extra calls. - - - -Hacking on fs-extra -------------------- - -Wanna hack on `fs-extra`? Great! Your help is needed! [fs-extra is one of the most depended upon Node.js packages](http://nodei.co/npm/fs-extra.png?downloads=true&downloadRank=true&stars=true). This project -uses [JavaScript Standard Style](https://github.com/feross/standard) - if the name or style choices bother you, -you're gonna have to get over it :) If `standard` is good enough for `npm`, it's good enough for `fs-extra`. - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -What's needed? -- First, take a look at existing issues. Those are probably going to be where the priority lies. -- More tests for edge cases. Specifically on different platforms. There can never be enough tests. -- Improve test coverage. See coveralls output for more info. - -Note: If you make any big changes, **you should definitely file an issue for discussion first.** - -### Running the Test Suite - -fs-extra contains hundreds of tests. - -- `npm run lint`: runs the linter ([standard](http://standardjs.com/)) -- `npm run unit`: runs the unit tests -- `npm test`: runs both the linter and the tests - - -### Windows - -If you run the tests on the Windows and receive a lot of symbolic link `EPERM` permission errors, it's -because on Windows you need elevated privilege to create symbolic links. You can add this to your Windows's -account by following the instructions here: http://superuser.com/questions/104845/permission-to-make-symbolic-links-in-windows-7 -However, I didn't have much luck doing this. - -Since I develop on Mac OS X, I use VMWare Fusion for Windows testing. I create a shared folder that I map to a drive on Windows. -I open the `Node.js command prompt` and run as `Administrator`. I then map the network drive running the following command: - - net use z: "\\vmware-host\Shared Folders" - -I can then navigate to my `fs-extra` directory and run the tests. - - -Naming ------- - -I put a lot of thought into the naming of these functions. Inspired by @coolaj86's request. So he deserves much of the credit for raising the issue. See discussion(s) here: - -* https://github.com/jprichardson/node-fs-extra/issues/2 -* https://github.com/flatiron/utile/issues/11 -* https://github.com/ryanmcgrath/wrench-js/issues/29 -* https://github.com/substack/node-mkdirp/issues/17 - -First, I believe that in as many cases as possible, the [Node.js naming schemes](http://nodejs.org/api/fs.html) should be chosen. However, there are problems with the Node.js own naming schemes. - -For example, `fs.readFile()` and `fs.readdir()`: the **F** is capitalized in *File* and the **d** is not capitalized in *dir*. Perhaps a bit pedantic, but they should still be consistent. Also, Node.js has chosen a lot of POSIX naming schemes, which I believe is great. See: `fs.mkdir()`, `fs.rmdir()`, `fs.chown()`, etc. - -We have a dilemma though. How do you consistently name methods that perform the following POSIX commands: `cp`, `cp -r`, `mkdir -p`, and `rm -rf`? - -My perspective: when in doubt, err on the side of simplicity. A directory is just a hierarchical grouping of directories and files. Consider that for a moment. So when you want to copy it or remove it, in most cases you'll want to copy or remove all of its contents. When you want to create a directory, if the directory that it's suppose to be contained in does not exist, then in most cases you'll want to create that too. - -So, if you want to remove a file or a directory regardless of whether it has contents, just call `fs.remove(path)`. If you want to copy a file or a directory whether it has contents, just call `fs.copy(source, destination)`. If you want to create a directory regardless of whether its parent directories exist, just call `fs.mkdirs(path)` or `fs.mkdirp(path)`. - - -Credit ------- - -`fs-extra` wouldn't be possible without using the modules from the following authors: - -- [Isaac Shlueter](https://github.com/isaacs) -- [Charlie McConnel](https://github.com/avianflu) -- [James Halliday](https://github.com/substack) -- [Andrew Kelley](https://github.com/andrewrk) - - - - -License -------- - -Licensed under MIT - -Copyright (c) 2011-2017 [JP Richardson](https://github.com/jprichardson) - -[1]: http://nodejs.org/docs/latest/api/fs.html - - -[jsonfile]: https://github.com/jprichardson/node-jsonfile diff --git a/truebit-implementation/node_modules/fs-extra/docs/copy-sync.md b/truebit-implementation/node_modules/fs-extra/docs/copy-sync.md deleted file mode 100644 index 8e61c2b6..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/copy-sync.md +++ /dev/null @@ -1,37 +0,0 @@ -# copySync(src, dest, [options]) - -Copy a file or directory. The directory can have contents. Like `cp -r`. - -- `src` `` -- `dest` `` -- `options` `` - - `overwrite` ``: overwrite existing file or directory, default is `true`. _Note that the copy operation will silently fail if you set this to `false` and the destination exists._ Use the `errorOnExist` option to change this behavior. - - `errorOnExist` ``: when `overwrite` is `false` and the destination exists, throw an error. Default is `false`. - - `dereference` ``: dereference symlinks, default is `false`. - - `preserveTimestamps` ``: will set last modification and access times to the ones of the original source files, default is `false`. - - `filter` ``: Function to filter copied files. Return `true` to include, `false` to exclude. This can also be a RegExp, however this is deprecated (See [issue #239](https://github.com/jprichardson/node-fs-extra/issues/239) for background). - -## Example: - -```js -const fs = require('fs-extra') - -// copy file -fs.copySync('/tmp/myfile', '/tmp/mynewfile') - -// copy directory, even if it has subdirectories or files -fs.copySync('/tmp/mydir', '/tmp/mynewdir') -``` - -**Using filter function** - -```js -const fs = require('fs-extra') - -const filterFunc = (src, dest) => { - // your logic here - // it will be copied if return true -} - -fs.copySync('/tmp/mydir', '/tmp/mynewdir', { filter: filterFunc }) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/copy.md b/truebit-implementation/node_modules/fs-extra/docs/copy.md deleted file mode 100644 index a4f75e9d..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/copy.md +++ /dev/null @@ -1,48 +0,0 @@ -# copy(src, dest, [options], callback) - -Copy a file or directory. The directory can have contents. Like `cp -r`. - -- `src` `` -- `dest` `` -- `options` `` - - `overwrite` ``: overwrite existing file or directory, default is `true`. _Note that the copy operation will silently fail if you set this to `false` and the destination exists._ Use the `errorOnExist` option to change this behavior. - - `errorOnExist` ``: when `overwrite` is `false` and the destination exists, throw an error. Default is `false`. - - `dereference` ``: dereference symlinks, default is `false`. - - `preserveTimestamps` ``: will set last modification and access times to the ones of the original source files, default is `false`. - - `filter` ``: Function to filter copied files. Return `true` to include, `false` to exclude. This can also be a RegExp, however this is deprecated (See [issue #239](https://github.com/jprichardson/node-fs-extra/issues/239) for background). -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -fs.copy('/tmp/myfile', '/tmp/mynewfile', err => { - if (err) return console.error(err) - - console.log('success!') -}) // copies file - -fs.copy('/tmp/mydir', '/tmp/mynewdir', err => { - if (err) return console.error(err) - - console.log('success!') -}) // copies directory, even if it has subdirectories or files -``` - -**Using filter function** - -```js -const fs = require('fs-extra') - -const filterFunc = (src, dest) => { - // your logic here - // it will be copied if return true -} - -fs.copy('/tmp/mydir', '/tmp/mynewdir', { filter: filterFunc }, err => { - if (err) return console.error(err) - - console.log('success!') -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/emptyDir-sync.md b/truebit-implementation/node_modules/fs-extra/docs/emptyDir-sync.md deleted file mode 100644 index 7decdbc0..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/emptyDir-sync.md +++ /dev/null @@ -1,16 +0,0 @@ -# emptyDirSync(dir) - -Ensures that a directory is empty. Deletes directory contents if the directory is not empty. If the directory does not exist, it is created. The directory itself is not deleted. - -**Alias:** `emptydirSync()` - -- `dir` `` - -## Example: - -```js -const fs = require('fs-extra') - -// assume this directory has a lot of files and folders -fs.emptyDirSync('/tmp/some/dir') -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/emptyDir.md b/truebit-implementation/node_modules/fs-extra/docs/emptyDir.md deleted file mode 100644 index 43292e3a..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/emptyDir.md +++ /dev/null @@ -1,21 +0,0 @@ -# emptyDir(dir, [callback]) - -Ensures that a directory is empty. Deletes directory contents if the directory is not empty. If the directory does not exist, it is created. The directory itself is not deleted. - -**Alias:** `emptydir()` - -- `dir` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -// assume this directory has a lot of files and folders -fs.emptyDir('/tmp/some/dir', err => { - if (err) return console.error(err) - - console.log('success!') -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureDir-sync.md b/truebit-implementation/node_modules/fs-extra/docs/ensureDir-sync.md deleted file mode 100644 index 8f083d27..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureDir-sync.md +++ /dev/null @@ -1,17 +0,0 @@ -# ensureDirSync(dir) - -Ensures that the directory exists. If the directory structure does not exist, it is created. Like `mkdir -p`. - -**Aliases:** `mkdirsSync()`, `mkdirpSync()` - -- `dir` `` - -## Example: - -```js -const fs = require('fs-extra') - -const dir = '/tmp/this/path/does/not/exist' -fs.ensureDirSync(dir) -// dir has now been created, including the directory it is to be placed in -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureDir.md b/truebit-implementation/node_modules/fs-extra/docs/ensureDir.md deleted file mode 100644 index 1f8acfb8..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureDir.md +++ /dev/null @@ -1,20 +0,0 @@ -# ensureDir(dir, callback) - -Ensures that the directory exists. If the directory structure does not exist, it is created. Like `mkdir -p`. - -**Aliases:** `mkdirs()`, `mkdirp()` - -- `dir` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -const dir = '/tmp/this/path/does/not/exist' -fs.ensureDir(dir, err => { - console.log(err) // => null - // dir has now been created, including the directory it is to be placed in -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureFile-sync.md b/truebit-implementation/node_modules/fs-extra/docs/ensureFile-sync.md deleted file mode 100644 index 25ac39de..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureFile-sync.md +++ /dev/null @@ -1,17 +0,0 @@ -# ensureFileSync(file) - -Ensures that the file exists. If the file that is requested to be created is in directories that do not exist, these directories are created. If the file already exists, it is **NOT MODIFIED**. - -**Alias:** `createFileSync()` - -- `file` `` - -## Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/this/path/does/not/exist/file.txt' -fs.ensureFileSync(file) -// file has now been created, including the directory it is to be placed in -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureFile.md b/truebit-implementation/node_modules/fs-extra/docs/ensureFile.md deleted file mode 100644 index 1567e606..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureFile.md +++ /dev/null @@ -1,20 +0,0 @@ -# ensureFile(file, callback) - -Ensures that the file exists. If the file that is requested to be created is in directories that do not exist, these directories are created. If the file already exists, it is **NOT MODIFIED**. - -**Alias:** `createFile()` - -- `file` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/this/path/does/not/exist/file.txt' -fs.ensureFile(file, err => { - console.log(err) // => null - // file has now been created, including the directory it is to be placed in -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureLink-sync.md b/truebit-implementation/node_modules/fs-extra/docs/ensureLink-sync.md deleted file mode 100644 index 74769d30..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureLink-sync.md +++ /dev/null @@ -1,17 +0,0 @@ -# ensureLinkSync(srcpath, dstpath) - -Ensures that the link exists. If the directory structure does not exist, it is created. - -- `srcpath` `` -- `dstpath` `` - -## Example: - -```js -const fs = require('fs-extra') - -const srcpath = '/tmp/file.txt' -const dstpath = '/tmp/this/path/does/not/exist/file.txt' -fs.ensureLinkSync(srcpath, dstpath) -// link has now been created, including the directory it is to be placed in -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureLink.md b/truebit-implementation/node_modules/fs-extra/docs/ensureLink.md deleted file mode 100644 index 3cf38c5f..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureLink.md +++ /dev/null @@ -1,20 +0,0 @@ -# ensureLink(srcpath, dstpath, callback) - -Ensures that the link exists. If the directory structure does not exist, it is created. - -- `srcpath` `` -- `dstpath` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -const srcpath = '/tmp/file.txt' -const dstpath = '/tmp/this/path/does/not/exist/file.txt' -fs.ensureLink(srcpath, dstpath, err => { - console.log(err) // => null - // link has now been created, including the directory it is to be placed in -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureSymlink-sync.md b/truebit-implementation/node_modules/fs-extra/docs/ensureSymlink-sync.md deleted file mode 100644 index 328d4c45..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureSymlink-sync.md +++ /dev/null @@ -1,18 +0,0 @@ -# ensureSymlinkSync(srcpath, dstpath, [type]) - -Ensures that the symlink exists. If the directory structure does not exist, it is created. - -- `srcpath` `` -- `dstpath` `` -- `type` `` - -## Example: - -```js -const fs = require('fs-extra') - -const srcpath = '/tmp/file.txt' -const dstpath = '/tmp/this/path/does/not/exist/file.txt' -fs.ensureSymlinkSync(srcpath, dstpath) -// symlink has now been created, including the directory it is to be placed in -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/ensureSymlink.md b/truebit-implementation/node_modules/fs-extra/docs/ensureSymlink.md deleted file mode 100644 index b6c96954..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/ensureSymlink.md +++ /dev/null @@ -1,21 +0,0 @@ -# ensureSymlink(srcpath, dstpath, [type], callback) - -Ensures that the symlink exists. If the directory structure does not exist, it is created. - -- `srcpath` `` -- `dstpath` `` -- `type` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -const srcpath = '/tmp/file.txt' -const dstpath = '/tmp/this/path/does/not/exist/file.txt' -fs.ensureSymlink(srcpath, dstpath, err => { - console.log(err) // => null - // symlink has now been created, including the directory it is to be placed in -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/move-sync.md b/truebit-implementation/node_modules/fs-extra/docs/move-sync.md deleted file mode 100644 index cd701fef..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/move-sync.md +++ /dev/null @@ -1,24 +0,0 @@ -# moveSync(src, dest, [options]) - -Moves a file or directory, even across devices. - -- `src` `` -- `dest` `` -- `options` `` - - `overwrite` ``: overwrite existing file or directory, default is `false`. - -## Example: - -```js -const fs = require('fs-extra') - -fs.moveSync('/tmp/somefile', '/tmp/does/not/exist/yet/somefile') -``` - -**Using `overwrite` option** - -```js -const fs = require('fs-extra') - -fs.moveSync('/tmp/somedir', '/tmp/may/already/existed/somedir', { overwrite: true }) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/move.md b/truebit-implementation/node_modules/fs-extra/docs/move.md deleted file mode 100644 index 547af7c2..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/move.md +++ /dev/null @@ -1,33 +0,0 @@ -# move(src, dest, [options], callback) - -Moves a file or directory, even across devices. - -- `src` `` -- `dest` `` -- `options` `` - - `overwrite` ``: overwrite existing file or directory, default is `false`. -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -fs.move('/tmp/somefile', '/tmp/does/not/exist/yet/somefile', err => { - if (err) return console.error(err) - - console.log('success!') -}) -``` - -**Using `overwrite` option** - -```js -const fs = require('fs-extra') - -fs.move('/tmp/somedir', '/tmp/may/already/existed/somedir', { overwrite: true }, err => { - if (err) return console.error(err) - - console.log('success!') -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/outputFile-sync.md b/truebit-implementation/node_modules/fs-extra/docs/outputFile-sync.md deleted file mode 100644 index 38eee8b6..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/outputFile-sync.md +++ /dev/null @@ -1,19 +0,0 @@ -# outputFileSync(file, data, [options]) - -Almost the same as `writeFileSync` (i.e. it [overwrites](http://pages.citebite.com/v2o5n8l2f5reb)), except that if the parent directory does not exist, it's created. `file` must be a file path (a buffer or a file descriptor is not allowed). `options` are what you'd pass to [`fs.writeFileSync()`](https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options). - -- `file` `` -- `data` ` | | ` -- `options` ` | ` - -## Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/this/path/does/not/exist/file.txt' -fs.outputFileSync(file, 'hello!') - -const data = fs.readFileSync(file, 'utf8') -console.log(data) // => hello! -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/outputFile.md b/truebit-implementation/node_modules/fs-extra/docs/outputFile.md deleted file mode 100644 index 494cba34..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/outputFile.md +++ /dev/null @@ -1,23 +0,0 @@ -# outputFile(file, data, [options], callback) - -Almost the same as `writeFile` (i.e. it [overwrites](http://pages.citebite.com/v2o5n8l2f5reb)), except that if the parent directory does not exist, it's created. `file` must be a file path (a buffer or a file descriptor is not allowed). `options` are what you'd pass to [`fs.writeFile()`](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback). - -- `file` `` -- `data` ` | | ` -- `options` ` | ` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/this/path/does/not/exist/file.txt' -fs.outputFile(file, 'hello!', err => { - console.log(err) // => null - - fs.readFile(file, 'utf8', (err, data) => { - console.log(data) // => hello! - }) -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/outputJson-sync.md b/truebit-implementation/node_modules/fs-extra/docs/outputJson-sync.md deleted file mode 100644 index cab6316b..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/outputJson-sync.md +++ /dev/null @@ -1,22 +0,0 @@ -# outputJsonSync(file, object, [options]) - -Almost the same as [`writeJsonSync`](writeJson-sync.md), except that if the directory does not exist, it's created. -`options` are what you'd pass to [`jsonFile.writeFileSync()`](https://github.com/jprichardson/node-jsonfile#writefilesyncfilename-obj-options). - -**Alias:** `outputJSONSync()` - -- `file` `` -- `object` `` -- `options` `` - -## Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/this/path/does/not/exist/file.json' -fs.outputJsonSync(file, {name: 'JP'}) - -const data = fs.readJsonSync(file) -console.log(data.name) // => JP -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/outputJson.md b/truebit-implementation/node_modules/fs-extra/docs/outputJson.md deleted file mode 100644 index 58917b8e..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/outputJson.md +++ /dev/null @@ -1,26 +0,0 @@ -# outputJson(file, object, [options], callback) - -Almost the same as [`writeJson`](writeJson.md), except that if the directory does not exist, it's created. -`options` are what you'd pass to [`jsonFile.writeFile()`](https://github.com/jprichardson/node-jsonfile#writefilefilename-options-callback). - -**Alias:** `outputJSON()` - -- `file` `` -- `object` `` -- `options` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/this/path/does/not/exist/file.json' -fs.outputJson(file, {name: 'JP'}, err => { - console.log(err) // => null - - fs.readJson(file, (err, data) => { - console.log(data.name) // => JP - }) -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/readJson-sync.md b/truebit-implementation/node_modules/fs-extra/docs/readJson-sync.md deleted file mode 100644 index a1356379..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/readJson-sync.md +++ /dev/null @@ -1,33 +0,0 @@ -# readJsonSync(file, [options]) - -Reads a JSON file and then parses it into an object. `options` are the same -that you'd pass to [`jsonFile.readFileSync`](https://github.com/jprichardson/node-jsonfile#readfilesyncfilename-options). - -**Alias:** `readJSONSync()` - -- `file` `` -- `options` `` - -## Example: - -```js -const fs = require('fs-extra') - -const packageObj = fs.readJsonSync('./package.json') -console.log(packageObj.version) // => 2.0.0 -``` - ---- - -`readJsonSync()` can take a `throws` option set to `false` and it won't throw if the JSON is invalid. Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/some-invalid.json' -const data = '{not valid JSON' -fs.writeFileSync(file, data) - -const obj = fs.readJsonSync(file, { throws: false }) -console.log(obj) // => null -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/readJson.md b/truebit-implementation/node_modules/fs-extra/docs/readJson.md deleted file mode 100644 index acaf19c9..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/readJson.md +++ /dev/null @@ -1,40 +0,0 @@ -# readJson(file, [options], callback) - -Reads a JSON file and then parses it into an object. `options` are the same -that you'd pass to [`jsonFile.readFile`](https://github.com/jprichardson/node-jsonfile#readfilefilename-options-callback). - -**Alias:** `readJSON()` - -- `file` `` -- `options` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -fs.readJson('./package.json', (err, packageObj) => { - if (err) console.error(err) - - console.log(packageObj.version) // => 0.1.3 -}) -``` - ---- - -`readJson()` can take a `throws` option set to `false` and it won't throw if the JSON is invalid. Example: - -```js -const fs = require('fs-extra') - -const file = '/tmp/some-invalid.json' -const data = '{not valid JSON' -fs.writeFileSync(file, data) - -fs.readJson(file, { throws: false }, (err, obj) => { - if (err) console.error(err) - - console.log(obj) // => null -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/remove-sync.md b/truebit-implementation/node_modules/fs-extra/docs/remove-sync.md deleted file mode 100644 index fb01fe82..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/remove-sync.md +++ /dev/null @@ -1,16 +0,0 @@ -# removeSync(path) - -Removes a file or directory. The directory can have contents. Like `rm -rf`. - -- `path` `` - -## Example: - -```js -const fs = require('fs-extra') - -// remove file -fs.removeSync('/tmp/myfile') - -fs.removeSync('/home/jprichardson') // I just deleted my entire HOME directory. -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/remove.md b/truebit-implementation/node_modules/fs-extra/docs/remove.md deleted file mode 100644 index 68f91621..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/remove.md +++ /dev/null @@ -1,25 +0,0 @@ -# remove(path, callback) - -Removes a file or directory. The directory can have contents. Like `rm -rf`. - -- `path` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -// remove file -fs.remove('/tmp/myfile', err => { - if (err) return console.error(err) - - console.log('success!') -}) - -fs.remove('/home/jprichardson', err => { - if (err) return console.error(err) - - console.log('success!') // I just deleted my entire HOME directory. -}) -``` diff --git a/truebit-implementation/node_modules/fs-extra/docs/writeJson-sync.md b/truebit-implementation/node_modules/fs-extra/docs/writeJson-sync.md deleted file mode 100644 index 9e649bbc..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/writeJson-sync.md +++ /dev/null @@ -1,21 +0,0 @@ -# writeJsonSync(file, object, [options]) - -Writes an object to a JSON file. `options` are the same that -you'd pass to [`jsonFile.writeFileSync()`](https://github.com/jprichardson/node-jsonfile#writefilesyncfilename-obj-options). - -**Alias:** `writeJSONSync()` - -- `file` `` -- `object` `` -- `options` `` - -## Example: - -```js -const fs = require('fs-extra') - -fs.writeJsonSync('./package.json', {name: 'fs-extra'}) -``` ---- - -**See also:** [`outputJsonSync()`](outputJson-sync.md) diff --git a/truebit-implementation/node_modules/fs-extra/docs/writeJson.md b/truebit-implementation/node_modules/fs-extra/docs/writeJson.md deleted file mode 100644 index 3f8f0420..00000000 --- a/truebit-implementation/node_modules/fs-extra/docs/writeJson.md +++ /dev/null @@ -1,27 +0,0 @@ -# writeJson(file, object, [options], callback) - -Writes an object to a JSON file. `options` are the same that -you'd pass to [`jsonFile.writeFile()`](https://github.com/jprichardson/node-jsonfile#writefilefilename-options-callback). - -**Alias:** `writeJSON()` - -- `file` `` -- `object` `` -- `options` `` -- `callback` `` - -## Example: - -```js -const fs = require('fs-extra') - -fs.writeJson('./package.json', {name: 'fs-extra'}, err => { - if (err) return console.error(err) - - console.log('success!') -}) -``` - ---- - -**See also:** [`outputJson()`](outputJson.md) diff --git a/truebit-implementation/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js b/truebit-implementation/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js deleted file mode 100644 index 4e4cd3fd..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') - -const BUF_LENGTH = 64 * 1024 -const _buff = new Buffer(BUF_LENGTH) - -function copyFileSync (srcFile, destFile, options) { - const overwrite = options.overwrite - const errorOnExist = options.errorOnExist - const preserveTimestamps = options.preserveTimestamps - - if (fs.existsSync(destFile)) { - if (overwrite) { - fs.unlinkSync(destFile) - } else if (errorOnExist) { - throw new Error(`${destFile} already exists`) - } else return - } - - const fdr = fs.openSync(srcFile, 'r') - const stat = fs.fstatSync(fdr) - const fdw = fs.openSync(destFile, 'w', stat.mode) - let bytesRead = 1 - let pos = 0 - - while (bytesRead > 0) { - bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos) - fs.writeSync(fdw, _buff, 0, bytesRead) - pos += bytesRead - } - - if (preserveTimestamps) { - fs.futimesSync(fdw, stat.atime, stat.mtime) - } - - fs.closeSync(fdr) - fs.closeSync(fdw) -} - -module.exports = copyFileSync diff --git a/truebit-implementation/node_modules/fs-extra/lib/copy-sync/copy-sync.js b/truebit-implementation/node_modules/fs-extra/lib/copy-sync/copy-sync.js deleted file mode 100644 index 9d5639c3..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/copy-sync/copy-sync.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const copyFileSync = require('./copy-file-sync') -const mkdir = require('../mkdirs') - -function copySync (src, dest, options) { - if (typeof options === 'function' || options instanceof RegExp) { - options = {filter: options} - } - - options = options || {} - options.recursive = !!options.recursive - - // default to true for now - options.clobber = 'clobber' in options ? !!options.clobber : true - // overwrite falls back to clobber - options.overwrite = 'overwrite' in options ? !!options.overwrite : options.clobber - options.dereference = 'dereference' in options ? !!options.dereference : false - options.preserveTimestamps = 'preserveTimestamps' in options ? !!options.preserveTimestamps : false - - options.filter = options.filter || function () { return true } - - // Warn about using preserveTimestamps on 32-bit node: - if (options.preserveTimestamps && process.arch === 'ia32') { - console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n - see https://github.com/jprichardson/node-fs-extra/issues/269`) - } - - const stats = (options.recursive && !options.dereference) ? fs.lstatSync(src) : fs.statSync(src) - const destFolder = path.dirname(dest) - const destFolderExists = fs.existsSync(destFolder) - let performCopy = false - - if (options.filter instanceof RegExp) { - console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function') - performCopy = options.filter.test(src) - } else if (typeof options.filter === 'function') performCopy = options.filter(src, dest) - - if (stats.isFile() && performCopy) { - if (!destFolderExists) mkdir.mkdirsSync(destFolder) - copyFileSync(src, dest, { - overwrite: options.overwrite, - errorOnExist: options.errorOnExist, - preserveTimestamps: options.preserveTimestamps - }) - } else if (stats.isDirectory() && performCopy) { - if (!fs.existsSync(dest)) mkdir.mkdirsSync(dest) - const contents = fs.readdirSync(src) - contents.forEach(content => { - const opts = options - opts.recursive = true - copySync(path.join(src, content), path.join(dest, content), opts) - }) - } else if (options.recursive && stats.isSymbolicLink() && performCopy) { - const srcPath = fs.readlinkSync(src) - fs.symlinkSync(srcPath, dest) - } -} - -module.exports = copySync diff --git a/truebit-implementation/node_modules/fs-extra/lib/copy-sync/index.js b/truebit-implementation/node_modules/fs-extra/lib/copy-sync/index.js deleted file mode 100644 index ebc7e0b9..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/copy-sync/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - copySync: require('./copy-sync') -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/copy/copy.js b/truebit-implementation/node_modules/fs-extra/lib/copy/copy.js deleted file mode 100644 index d66c8981..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/copy/copy.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const ncp = require('./ncp') -const mkdir = require('../mkdirs') - -function copy (src, dest, options, callback) { - if (typeof options === 'function' && !callback) { - callback = options - options = {} - } else if (typeof options === 'function' || options instanceof RegExp) { - options = {filter: options} - } - callback = callback || function () {} - options = options || {} - - // Warn about using preserveTimestamps on 32-bit node: - if (options.preserveTimestamps && process.arch === 'ia32') { - console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n - see https://github.com/jprichardson/node-fs-extra/issues/269`) - } - - // don't allow src and dest to be the same - const basePath = process.cwd() - const currentPath = path.resolve(basePath, src) - const targetPath = path.resolve(basePath, dest) - if (currentPath === targetPath) return callback(new Error('Source and destination must not be the same.')) - - fs.lstat(src, (err, stats) => { - if (err) return callback(err) - - let dir = null - if (stats.isDirectory()) { - const parts = dest.split(path.sep) - parts.pop() - dir = parts.join(path.sep) - } else { - dir = path.dirname(dest) - } - - fs.exists(dir, dirExists => { - if (dirExists) return ncp(src, dest, options, callback) - mkdir.mkdirs(dir, err => { - if (err) return callback(err) - ncp(src, dest, options, callback) - }) - }) - }) -} - -module.exports = copy diff --git a/truebit-implementation/node_modules/fs-extra/lib/copy/index.js b/truebit-implementation/node_modules/fs-extra/lib/copy/index.js deleted file mode 100644 index 3e090161..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/copy/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - copy: require('./copy') -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/copy/ncp.js b/truebit-implementation/node_modules/fs-extra/lib/copy/ncp.js deleted file mode 100644 index 9670ee02..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/copy/ncp.js +++ /dev/null @@ -1,234 +0,0 @@ -// imported from ncp (this is temporary, will rewrite) - -var fs = require('graceful-fs') -var path = require('path') -var utimes = require('../util/utimes') - -function ncp (source, dest, options, callback) { - if (!callback) { - callback = options - options = {} - } - - var basePath = process.cwd() - var currentPath = path.resolve(basePath, source) - var targetPath = path.resolve(basePath, dest) - - var filter = options.filter - var transform = options.transform - var overwrite = options.overwrite - // If overwrite is undefined, use clobber, otherwise default to true: - if (overwrite === undefined) overwrite = options.clobber - if (overwrite === undefined) overwrite = true - var errorOnExist = options.errorOnExist - var dereference = options.dereference - var preserveTimestamps = options.preserveTimestamps === true - - var started = 0 - var finished = 0 - var running = 0 - - var errored = false - - startCopy(currentPath) - - function startCopy (source) { - started++ - if (filter) { - if (filter instanceof RegExp) { - console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function') - if (!filter.test(source)) { - return doneOne(true) - } - } else if (typeof filter === 'function') { - if (!filter(source, dest)) { - return doneOne(true) - } - } - } - return getStats(source) - } - - function getStats (source) { - var stat = dereference ? fs.stat : fs.lstat - running++ - stat(source, function (err, stats) { - if (err) return onError(err) - - // We need to get the mode from the stats object and preserve it. - var item = { - name: source, - mode: stats.mode, - mtime: stats.mtime, // modified time - atime: stats.atime, // access time - stats: stats // temporary - } - - if (stats.isDirectory()) { - return onDir(item) - } else if (stats.isFile() || stats.isCharacterDevice() || stats.isBlockDevice()) { - return onFile(item) - } else if (stats.isSymbolicLink()) { - // Symlinks don't really need to know about the mode. - return onLink(source) - } - }) - } - - function onFile (file) { - var target = file.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$' - isWritable(target, function (writable) { - if (writable) { - copyFile(file, target) - } else { - if (overwrite) { - rmFile(target, function () { - copyFile(file, target) - }) - } else if (errorOnExist) { - onError(new Error(target + ' already exists')) - } else { - doneOne() - } - } - }) - } - - function copyFile (file, target) { - var readStream = fs.createReadStream(file.name) - var writeStream = fs.createWriteStream(target, { mode: file.mode }) - - readStream.on('error', onError) - writeStream.on('error', onError) - - if (transform) { - transform(readStream, writeStream, file) - } else { - writeStream.on('open', function () { - readStream.pipe(writeStream) - }) - } - - writeStream.once('close', function () { - fs.chmod(target, file.mode, function (err) { - if (err) return onError(err) - if (preserveTimestamps) { - utimes.utimesMillis(target, file.atime, file.mtime, function (err) { - if (err) return onError(err) - return doneOne() - }) - } else { - doneOne() - } - }) - }) - } - - function rmFile (file, done) { - fs.unlink(file, function (err) { - if (err) return onError(err) - return done() - }) - } - - function onDir (dir) { - var target = dir.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$' - isWritable(target, function (writable) { - if (writable) { - return mkDir(dir, target) - } - copyDir(dir.name) - }) - } - - function mkDir (dir, target) { - fs.mkdir(target, dir.mode, function (err) { - if (err) return onError(err) - // despite setting mode in fs.mkdir, doesn't seem to work - // so we set it here. - fs.chmod(target, dir.mode, function (err) { - if (err) return onError(err) - copyDir(dir.name) - }) - }) - } - - function copyDir (dir) { - fs.readdir(dir, function (err, items) { - if (err) return onError(err) - items.forEach(function (item) { - startCopy(path.join(dir, item)) - }) - return doneOne() - }) - } - - function onLink (link) { - var target = link.replace(currentPath, targetPath) - fs.readlink(link, function (err, resolvedPath) { - if (err) return onError(err) - checkLink(resolvedPath, target) - }) - } - - function checkLink (resolvedPath, target) { - if (dereference) { - resolvedPath = path.resolve(basePath, resolvedPath) - } - isWritable(target, function (writable) { - if (writable) { - return makeLink(resolvedPath, target) - } - fs.readlink(target, function (err, targetDest) { - if (err) return onError(err) - - if (dereference) { - targetDest = path.resolve(basePath, targetDest) - } - if (targetDest === resolvedPath) { - return doneOne() - } - return rmFile(target, function () { - makeLink(resolvedPath, target) - }) - }) - }) - } - - function makeLink (linkPath, target) { - fs.symlink(linkPath, target, function (err) { - if (err) return onError(err) - return doneOne() - }) - } - - function isWritable (path, done) { - fs.lstat(path, function (err) { - if (err) { - if (err.code === 'ENOENT') return done(true) - return done(false) - } - return done(false) - }) - } - - function onError (err) { - // ensure callback is defined & called only once: - if (!errored && callback !== undefined) { - errored = true - return callback(err) - } - } - - function doneOne (skipped) { - if (!skipped) running-- - finished++ - if ((started === finished) && (running === 0)) { - if (callback !== undefined) { - return callback(null) - } - } - } -} - -module.exports = ncp diff --git a/truebit-implementation/node_modules/fs-extra/lib/empty/index.js b/truebit-implementation/node_modules/fs-extra/lib/empty/index.js deleted file mode 100644 index 180c3f79..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/empty/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict' - -const fs = require('fs') -const path = require('path') -const mkdir = require('../mkdirs') -const remove = require('../remove') - -function emptyDir (dir, callback) { - callback = callback || function () {} - fs.readdir(dir, (err, items) => { - if (err) return mkdir.mkdirs(dir, callback) - - items = items.map(item => path.join(dir, item)) - - deleteItem() - - function deleteItem () { - const item = items.pop() - if (!item) return callback() - remove.remove(item, err => { - if (err) return callback(err) - deleteItem() - }) - } - }) -} - -function emptyDirSync (dir) { - let items - try { - items = fs.readdirSync(dir) - } catch (err) { - return mkdir.mkdirsSync(dir) - } - - items.forEach(item => { - item = path.join(dir, item) - remove.removeSync(item) - }) -} - -module.exports = { - emptyDirSync, - emptydirSync: emptyDirSync, - emptyDir, - emptydir: emptyDir -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/ensure/file.js b/truebit-implementation/node_modules/fs-extra/lib/ensure/file.js deleted file mode 100644 index 031d1303..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/ensure/file.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict' - -const path = require('path') -const fs = require('graceful-fs') -const mkdir = require('../mkdirs') - -function createFile (file, callback) { - function makeFile () { - fs.writeFile(file, '', err => { - if (err) return callback(err) - callback() - }) - } - - fs.exists(file, fileExists => { - if (fileExists) return callback() - const dir = path.dirname(file) - fs.exists(dir, dirExists => { - if (dirExists) return makeFile() - mkdir.mkdirs(dir, err => { - if (err) return callback(err) - makeFile() - }) - }) - }) -} - -function createFileSync (file) { - if (fs.existsSync(file)) return - - const dir = path.dirname(file) - if (!fs.existsSync(dir)) { - mkdir.mkdirsSync(dir) - } - - fs.writeFileSync(file, '') -} - -module.exports = { - createFile, - createFileSync, - // alias - ensureFile: createFile, - ensureFileSync: createFileSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/ensure/index.js b/truebit-implementation/node_modules/fs-extra/lib/ensure/index.js deleted file mode 100644 index c1f67b71..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/ensure/index.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict' - -const file = require('./file') -const link = require('./link') -const symlink = require('./symlink') - -module.exports = { - // file - createFile: file.createFile, - createFileSync: file.createFileSync, - ensureFile: file.createFile, - ensureFileSync: file.createFileSync, - // link - createLink: link.createLink, - createLinkSync: link.createLinkSync, - ensureLink: link.createLink, - ensureLinkSync: link.createLinkSync, - // symlink - createSymlink: symlink.createSymlink, - createSymlinkSync: symlink.createSymlinkSync, - ensureSymlink: symlink.createSymlink, - ensureSymlinkSync: symlink.createSymlinkSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/ensure/link.js b/truebit-implementation/node_modules/fs-extra/lib/ensure/link.js deleted file mode 100644 index 8284fae3..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/ensure/link.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict' - -const path = require('path') -const fs = require('graceful-fs') -const mkdir = require('../mkdirs') - -function createLink (srcpath, dstpath, callback) { - function makeLink (srcpath, dstpath) { - fs.link(srcpath, dstpath, err => { - if (err) return callback(err) - callback(null) - }) - } - - fs.exists(dstpath, destinationExists => { - if (destinationExists) return callback(null) - fs.lstat(srcpath, (err, stat) => { - if (err) { - err.message = err.message.replace('lstat', 'ensureLink') - return callback(err) - } - - const dir = path.dirname(dstpath) - fs.exists(dir, dirExists => { - if (dirExists) return makeLink(srcpath, dstpath) - mkdir.mkdirs(dir, err => { - if (err) return callback(err) - makeLink(srcpath, dstpath) - }) - }) - }) - }) -} - -function createLinkSync (srcpath, dstpath, callback) { - const destinationExists = fs.existsSync(dstpath) - if (destinationExists) return undefined - - try { - fs.lstatSync(srcpath) - } catch (err) { - err.message = err.message.replace('lstat', 'ensureLink') - throw err - } - - const dir = path.dirname(dstpath) - const dirExists = fs.existsSync(dir) - if (dirExists) return fs.linkSync(srcpath, dstpath) - mkdir.mkdirsSync(dir) - - return fs.linkSync(srcpath, dstpath) -} - -module.exports = { - createLink, - createLinkSync, - // alias - ensureLink: createLink, - ensureLinkSync: createLinkSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink-paths.js b/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink-paths.js deleted file mode 100644 index e52d0396..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink-paths.js +++ /dev/null @@ -1,97 +0,0 @@ -'use strict' - -const path = require('path') -const fs = require('graceful-fs') - -/** - * Function that returns two types of paths, one relative to symlink, and one - * relative to the current working directory. Checks if path is absolute or - * relative. If the path is relative, this function checks if the path is - * relative to symlink or relative to current working directory. This is an - * initiative to find a smarter `srcpath` to supply when building symlinks. - * This allows you to determine which path to use out of one of three possible - * types of source paths. The first is an absolute path. This is detected by - * `path.isAbsolute()`. When an absolute path is provided, it is checked to - * see if it exists. If it does it's used, if not an error is returned - * (callback)/ thrown (sync). The other two options for `srcpath` are a - * relative url. By default Node's `fs.symlink` works by creating a symlink - * using `dstpath` and expects the `srcpath` to be relative to the newly - * created symlink. If you provide a `srcpath` that does not exist on the file - * system it results in a broken symlink. To minimize this, the function - * checks to see if the 'relative to symlink' source file exists, and if it - * does it will use it. If it does not, it checks if there's a file that - * exists that is relative to the current working directory, if does its used. - * This preserves the expectations of the original fs.symlink spec and adds - * the ability to pass in `relative to current working direcotry` paths. - */ - -function symlinkPaths (srcpath, dstpath, callback) { - if (path.isAbsolute(srcpath)) { - return fs.lstat(srcpath, (err, stat) => { - if (err) { - err.message = err.message.replace('lstat', 'ensureSymlink') - return callback(err) - } - return callback(null, { - 'toCwd': srcpath, - 'toDst': srcpath - }) - }) - } else { - const dstdir = path.dirname(dstpath) - const relativeToDst = path.join(dstdir, srcpath) - return fs.exists(relativeToDst, exists => { - if (exists) { - return callback(null, { - 'toCwd': relativeToDst, - 'toDst': srcpath - }) - } else { - return fs.lstat(srcpath, (err, stat) => { - if (err) { - err.message = err.message.replace('lstat', 'ensureSymlink') - return callback(err) - } - return callback(null, { - 'toCwd': srcpath, - 'toDst': path.relative(dstdir, srcpath) - }) - }) - } - }) - } -} - -function symlinkPathsSync (srcpath, dstpath) { - let exists - if (path.isAbsolute(srcpath)) { - exists = fs.existsSync(srcpath) - if (!exists) throw new Error('absolute srcpath does not exist') - return { - 'toCwd': srcpath, - 'toDst': srcpath - } - } else { - const dstdir = path.dirname(dstpath) - const relativeToDst = path.join(dstdir, srcpath) - exists = fs.existsSync(relativeToDst) - if (exists) { - return { - 'toCwd': relativeToDst, - 'toDst': srcpath - } - } else { - exists = fs.existsSync(srcpath) - if (!exists) throw new Error('relative srcpath does not exist') - return { - 'toCwd': srcpath, - 'toDst': path.relative(dstdir, srcpath) - } - } - } -} - -module.exports = { - symlinkPaths, - symlinkPathsSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink-type.js b/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink-type.js deleted file mode 100644 index 4f8787c2..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink-type.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') - -function symlinkType (srcpath, type, callback) { - callback = (typeof type === 'function') ? type : callback - type = (typeof type === 'function') ? false : type - if (type) return callback(null, type) - fs.lstat(srcpath, (err, stats) => { - if (err) return callback(null, 'file') - type = (stats && stats.isDirectory()) ? 'dir' : 'file' - callback(null, type) - }) -} - -function symlinkTypeSync (srcpath, type) { - let stats - - if (type) return type - try { - stats = fs.lstatSync(srcpath) - } catch (e) { - return 'file' - } - return (stats && stats.isDirectory()) ? 'dir' : 'file' -} - -module.exports = { - symlinkType, - symlinkTypeSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink.js b/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink.js deleted file mode 100644 index 2ea9e062..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/ensure/symlink.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict' - -const path = require('path') -const fs = require('graceful-fs') -const _mkdirs = require('../mkdirs') -const mkdirs = _mkdirs.mkdirs -const mkdirsSync = _mkdirs.mkdirsSync - -const _symlinkPaths = require('./symlink-paths') -const symlinkPaths = _symlinkPaths.symlinkPaths -const symlinkPathsSync = _symlinkPaths.symlinkPathsSync - -const _symlinkType = require('./symlink-type') -const symlinkType = _symlinkType.symlinkType -const symlinkTypeSync = _symlinkType.symlinkTypeSync - -function createSymlink (srcpath, dstpath, type, callback) { - callback = (typeof type === 'function') ? type : callback - type = (typeof type === 'function') ? false : type - - fs.exists(dstpath, destinationExists => { - if (destinationExists) return callback(null) - symlinkPaths(srcpath, dstpath, (err, relative) => { - if (err) return callback(err) - srcpath = relative.toDst - symlinkType(relative.toCwd, type, (err, type) => { - if (err) return callback(err) - const dir = path.dirname(dstpath) - fs.exists(dir, dirExists => { - if (dirExists) return fs.symlink(srcpath, dstpath, type, callback) - mkdirs(dir, err => { - if (err) return callback(err) - fs.symlink(srcpath, dstpath, type, callback) - }) - }) - }) - }) - }) -} - -function createSymlinkSync (srcpath, dstpath, type, callback) { - callback = (typeof type === 'function') ? type : callback - type = (typeof type === 'function') ? false : type - - const destinationExists = fs.existsSync(dstpath) - if (destinationExists) return undefined - - const relative = symlinkPathsSync(srcpath, dstpath) - srcpath = relative.toDst - type = symlinkTypeSync(relative.toCwd, type) - const dir = path.dirname(dstpath) - const exists = fs.existsSync(dir) - if (exists) return fs.symlinkSync(srcpath, dstpath, type) - mkdirsSync(dir) - return fs.symlinkSync(srcpath, dstpath, type) -} - -module.exports = { - createSymlink, - createSymlinkSync, - // alias - ensureSymlink: createSymlink, - ensureSymlinkSync: createSymlinkSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/index.js b/truebit-implementation/node_modules/fs-extra/lib/index.js deleted file mode 100644 index d25fd544..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/index.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict' - -const assign = require('./util/assign') - -const fse = {} -const gfs = require('graceful-fs') - -// attach fs methods to fse -Object.keys(gfs).forEach(key => { - fse[key] = gfs[key] -}) - -const fs = fse - -assign(fs, require('./copy')) -assign(fs, require('./copy-sync')) -assign(fs, require('./mkdirs')) -assign(fs, require('./remove')) -assign(fs, require('./json')) -assign(fs, require('./move')) -assign(fs, require('./move-sync')) -assign(fs, require('./empty')) -assign(fs, require('./ensure')) -assign(fs, require('./output')) - -module.exports = fs - -// maintain backwards compatibility for awhile -const jsonfile = {} -Object.defineProperty(jsonfile, 'spaces', { - get: () => fs.spaces, // found in ./json - set: val => { - fs.spaces = val - } -}) - -module.exports.jsonfile = jsonfile // so users of fs-extra can modify jsonFile.spaces diff --git a/truebit-implementation/node_modules/fs-extra/lib/json/index.js b/truebit-implementation/node_modules/fs-extra/lib/json/index.js deleted file mode 100644 index 42293113..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/json/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' - -const jsonFile = require('./jsonfile') - -jsonFile.outputJsonSync = require('./output-json-sync') -jsonFile.outputJson = require('./output-json') -// aliases -jsonFile.outputJSONSync = require('./output-json-sync') -jsonFile.outputJSON = require('./output-json') - -module.exports = jsonFile diff --git a/truebit-implementation/node_modules/fs-extra/lib/json/jsonfile.js b/truebit-implementation/node_modules/fs-extra/lib/json/jsonfile.js deleted file mode 100644 index e3630ee8..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/json/jsonfile.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict' - -const jsonFile = require('jsonfile') - -module.exports = { - // jsonfile exports - readJson: jsonFile.readFile, - readJSON: jsonFile.readFile, - readJsonSync: jsonFile.readFileSync, - readJSONSync: jsonFile.readFileSync, - writeJson: jsonFile.writeFile, - writeJSON: jsonFile.writeFile, - writeJsonSync: jsonFile.writeFileSync, - writeJSONSync: jsonFile.writeFileSync, - spaces: 2 // default in fs-extra -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/json/output-json-sync.js b/truebit-implementation/node_modules/fs-extra/lib/json/output-json-sync.js deleted file mode 100644 index 6f76710e..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/json/output-json-sync.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const mkdir = require('../mkdirs') -const jsonFile = require('./jsonfile') - -function outputJsonSync (file, data, options) { - const dir = path.dirname(file) - - if (!fs.existsSync(dir)) { - mkdir.mkdirsSync(dir) - } - - jsonFile.writeJsonSync(file, data, options) -} - -module.exports = outputJsonSync diff --git a/truebit-implementation/node_modules/fs-extra/lib/json/output-json.js b/truebit-implementation/node_modules/fs-extra/lib/json/output-json.js deleted file mode 100644 index 2f928c50..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/json/output-json.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const mkdir = require('../mkdirs') -const jsonFile = require('./jsonfile') - -function outputJson (file, data, options, callback) { - if (typeof options === 'function') { - callback = options - options = {} - } - - const dir = path.dirname(file) - - fs.exists(dir, itDoes => { - if (itDoes) return jsonFile.writeJson(file, data, options, callback) - - mkdir.mkdirs(dir, err => { - if (err) return callback(err) - jsonFile.writeJson(file, data, options, callback) - }) - }) -} - -module.exports = outputJson diff --git a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/index.js b/truebit-implementation/node_modules/fs-extra/lib/mkdirs/index.js deleted file mode 100644 index 2611217c..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/index.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - mkdirs: require('./mkdirs'), - mkdirsSync: require('./mkdirs-sync'), - // alias - mkdirp: require('./mkdirs'), - mkdirpSync: require('./mkdirs-sync'), - ensureDir: require('./mkdirs'), - ensureDirSync: require('./mkdirs-sync') -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js b/truebit-implementation/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js deleted file mode 100644 index a3ece406..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const invalidWin32Path = require('./win32').invalidWin32Path - -const o777 = parseInt('0777', 8) - -function mkdirsSync (p, opts, made) { - if (!opts || typeof opts !== 'object') { - opts = { mode: opts } - } - - let mode = opts.mode - const xfs = opts.fs || fs - - if (process.platform === 'win32' && invalidWin32Path(p)) { - const errInval = new Error(p + ' contains invalid WIN32 path characters.') - errInval.code = 'EINVAL' - throw errInval - } - - if (mode === undefined) { - mode = o777 & (~process.umask()) - } - if (!made) made = null - - p = path.resolve(p) - - try { - xfs.mkdirSync(p, mode) - made = made || p - } catch (err0) { - switch (err0.code) { - case 'ENOENT': - if (path.dirname(p) === p) throw err0 - made = mkdirsSync(path.dirname(p), opts, made) - mkdirsSync(p, opts, made) - break - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - let stat - try { - stat = xfs.statSync(p) - } catch (err1) { - throw err0 - } - if (!stat.isDirectory()) throw err0 - break - } - } - - return made -} - -module.exports = mkdirsSync diff --git a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/mkdirs.js b/truebit-implementation/node_modules/fs-extra/lib/mkdirs/mkdirs.js deleted file mode 100644 index 18975337..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/mkdirs.js +++ /dev/null @@ -1,63 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const invalidWin32Path = require('./win32').invalidWin32Path - -const o777 = parseInt('0777', 8) - -function mkdirs (p, opts, callback, made) { - if (typeof opts === 'function') { - callback = opts - opts = {} - } else if (!opts || typeof opts !== 'object') { - opts = { mode: opts } - } - - if (process.platform === 'win32' && invalidWin32Path(p)) { - const errInval = new Error(p + ' contains invalid WIN32 path characters.') - errInval.code = 'EINVAL' - return callback(errInval) - } - - let mode = opts.mode - const xfs = opts.fs || fs - - if (mode === undefined) { - mode = o777 & (~process.umask()) - } - if (!made) made = null - - callback = callback || function () {} - p = path.resolve(p) - - xfs.mkdir(p, mode, er => { - if (!er) { - made = made || p - return callback(null, made) - } - switch (er.code) { - case 'ENOENT': - if (path.dirname(p) === p) return callback(er) - mkdirs(path.dirname(p), opts, (er, made) => { - if (er) callback(er, made) - else mkdirs(p, opts, callback, made) - }) - break - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - xfs.stat(p, (er2, stat) => { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) callback(er, made) - else callback(null, made) - }) - break - } - }) -} - -module.exports = mkdirs diff --git a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/win32.js b/truebit-implementation/node_modules/fs-extra/lib/mkdirs/win32.js deleted file mode 100644 index 99b3920f..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/mkdirs/win32.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict' - -const path = require('path') - -// get drive on windows -function getRootPath (p) { - p = path.normalize(path.resolve(p)).split(path.sep) - if (p.length > 0) return p[0] - return null -} - -// http://stackoverflow.com/a/62888/10333 contains more accurate -// TODO: expand to include the rest -const INVALID_PATH_CHARS = /[<>:"|?*]/ - -function invalidWin32Path (p) { - const rp = getRootPath(p) - p = p.replace(rp, '') - return INVALID_PATH_CHARS.test(p) -} - -module.exports = { - getRootPath, - invalidWin32Path -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/move-sync/index.js b/truebit-implementation/node_modules/fs-extra/lib/move-sync/index.js deleted file mode 100644 index 3c2aa935..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/move-sync/index.js +++ /dev/null @@ -1,117 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const copySync = require('../copy-sync').copySync -const removeSync = require('../remove').removeSync -const mkdirpSync = require('../mkdirs').mkdirsSync - -function moveSync (src, dest, options) { - options = options || {} - const overwrite = options.overwrite || options.clobber || false - - src = path.resolve(src) - dest = path.resolve(dest) - - if (src === dest) return - - if (isSrcSubdir(src, dest)) throw new Error(`Cannot move '${src}' into itself '${dest}'.`) - - mkdirpSync(path.dirname(dest)) - tryRenameSync() - - function tryRenameSync () { - if (overwrite) { - try { - return fs.renameSync(src, dest) - } catch (err) { - if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST' || err.code === 'EPERM') { - removeSync(dest) - options.overwrite = false // just overwriteed it, no need to do it again - return moveSync(src, dest, options) - } - - if (err.code !== 'EXDEV') throw err - return moveSyncAcrossDevice(src, dest, overwrite) - } - } else { - try { - fs.linkSync(src, dest) - return fs.unlinkSync(src) - } catch (err) { - if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') { - return moveSyncAcrossDevice(src, dest, overwrite) - } - throw err - } - } - } -} - -function moveSyncAcrossDevice (src, dest, overwrite) { - const stat = fs.statSync(src) - - if (stat.isDirectory()) { - return moveDirSyncAcrossDevice(src, dest, overwrite) - } else { - return moveFileSyncAcrossDevice(src, dest, overwrite) - } -} - -function moveFileSyncAcrossDevice (src, dest, overwrite) { - const BUF_LENGTH = 64 * 1024 - const _buff = new Buffer(BUF_LENGTH) - - const flags = overwrite ? 'w' : 'wx' - - const fdr = fs.openSync(src, 'r') - const stat = fs.fstatSync(fdr) - const fdw = fs.openSync(dest, flags, stat.mode) - let bytesRead = 1 - let pos = 0 - - while (bytesRead > 0) { - bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos) - fs.writeSync(fdw, _buff, 0, bytesRead) - pos += bytesRead - } - - fs.closeSync(fdr) - fs.closeSync(fdw) - return fs.unlinkSync(src) -} - -function moveDirSyncAcrossDevice (src, dest, overwrite) { - const options = { - overwrite: false - } - - if (overwrite) { - removeSync(dest) - tryCopySync() - } else { - tryCopySync() - } - - function tryCopySync () { - copySync(src, dest, options) - return removeSync(src) - } -} - -// return true if dest is a subdir of src, otherwise false. -// extract dest base dir and check if that is the same as src basename -function isSrcSubdir (src, dest) { - try { - return fs.statSync(src).isDirectory() && - src !== dest && - dest.indexOf(src) > -1 && - dest.split(path.dirname(src) + path.sep)[1].split(path.sep)[0] === path.basename(src) - } catch (e) { - return false - } -} - -module.exports = { - moveSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/move/index.js b/truebit-implementation/node_modules/fs-extra/lib/move/index.js deleted file mode 100644 index 6bbdaf48..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/move/index.js +++ /dev/null @@ -1,161 +0,0 @@ -'use strict' - -// most of this code was written by Andrew Kelley -// licensed under the BSD license: see -// https://github.com/andrewrk/node-mv/blob/master/package.json - -// this needs a cleanup - -const fs = require('graceful-fs') -const ncp = require('../copy/ncp') -const path = require('path') -const remove = require('../remove').remove -const mkdirp = require('../mkdirs').mkdirs - -function move (source, dest, options, callback) { - if (typeof options === 'function') { - callback = options - options = {} - } - - const shouldMkdirp = ('mkdirp' in options) ? options.mkdirp : true - const overwrite = options.overwrite || options.clobber || false - - if (shouldMkdirp) { - mkdirs() - } else { - doRename() - } - - function mkdirs () { - mkdirp(path.dirname(dest), err => { - if (err) return callback(err) - doRename() - }) - } - - function doRename () { - if (path.resolve(source) === path.resolve(dest)) { - setImmediate(callback) - } else if (overwrite) { - fs.rename(source, dest, err => { - if (!err) return callback() - - if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST') { - remove(dest, err => { - if (err) return callback(err) - options.overwrite = false // just overwriteed it, no need to do it again - move(source, dest, options, callback) - }) - return - } - - // weird Windows shit - if (err.code === 'EPERM') { - setTimeout(() => { - remove(dest, err => { - if (err) return callback(err) - options.overwrite = false - move(source, dest, options, callback) - }) - }, 200) - return - } - - if (err.code !== 'EXDEV') return callback(err) - moveAcrossDevice(source, dest, overwrite, callback) - }) - } else { - fs.link(source, dest, err => { - if (err) { - if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') { - moveAcrossDevice(source, dest, overwrite, callback) - return - } - callback(err) - return - } - fs.unlink(source, callback) - }) - } - } -} - -function moveAcrossDevice (source, dest, overwrite, callback) { - fs.stat(source, (err, stat) => { - if (err) { - callback(err) - return - } - - if (stat.isDirectory()) { - moveDirAcrossDevice(source, dest, overwrite, callback) - } else { - moveFileAcrossDevice(source, dest, overwrite, callback) - } - }) -} - -function moveFileAcrossDevice (source, dest, overwrite, callback) { - const flags = overwrite ? 'w' : 'wx' - const ins = fs.createReadStream(source) - const outs = fs.createWriteStream(dest, { flags }) - - ins.on('error', err => { - ins.destroy() - outs.destroy() - outs.removeListener('close', onClose) - - // may want to create a directory but `out` line above - // creates an empty file for us: See #108 - // don't care about error here - fs.unlink(dest, () => { - // note: `err` here is from the input stream errror - if (err.code === 'EISDIR' || err.code === 'EPERM') { - moveDirAcrossDevice(source, dest, overwrite, callback) - } else { - callback(err) - } - }) - }) - - outs.on('error', err => { - ins.destroy() - outs.destroy() - outs.removeListener('close', onClose) - callback(err) - }) - - outs.once('close', onClose) - ins.pipe(outs) - - function onClose () { - fs.unlink(source, callback) - } -} - -function moveDirAcrossDevice (source, dest, overwrite, callback) { - const options = { - overwrite: false - } - - if (overwrite) { - remove(dest, err => { - if (err) return callback(err) - startNcp() - }) - } else { - startNcp() - } - - function startNcp () { - ncp(source, dest, options, err => { - if (err) return callback(err) - remove(source, callback) - }) - } -} - -module.exports = { - move -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/output/index.js b/truebit-implementation/node_modules/fs-extra/lib/output/index.js deleted file mode 100644 index f4eb9bb6..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/output/index.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const mkdir = require('../mkdirs') - -function outputFile (file, data, encoding, callback) { - if (typeof encoding === 'function') { - callback = encoding - encoding = 'utf8' - } - - const dir = path.dirname(file) - fs.exists(dir, itDoes => { - if (itDoes) return fs.writeFile(file, data, encoding, callback) - - mkdir.mkdirs(dir, err => { - if (err) return callback(err) - - fs.writeFile(file, data, encoding, callback) - }) - }) -} - -function outputFileSync (file, data, encoding) { - const dir = path.dirname(file) - if (fs.existsSync(dir)) { - return fs.writeFileSync.apply(fs, arguments) - } - mkdir.mkdirsSync(dir) - fs.writeFileSync.apply(fs, arguments) -} - -module.exports = { - outputFile, - outputFileSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/remove/index.js b/truebit-implementation/node_modules/fs-extra/lib/remove/index.js deleted file mode 100644 index 0e3b5dd1..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/remove/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' - -const rimraf = require('./rimraf') - -function removeSync (dir) { - return rimraf.sync(dir, {disableGlob: true}) -} - -function remove (dir, callback) { - const options = {disableGlob: true} - return callback ? rimraf(dir, options, callback) : rimraf(dir, options, function () {}) -} - -module.exports = { - remove, - removeSync -} diff --git a/truebit-implementation/node_modules/fs-extra/lib/remove/rimraf.js b/truebit-implementation/node_modules/fs-extra/lib/remove/rimraf.js deleted file mode 100644 index 141a82d2..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/remove/rimraf.js +++ /dev/null @@ -1,296 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const path = require('path') -const assert = require('assert') - -const isWindows = (process.platform === 'win32') - -function defaults (options) { - const methods = [ - 'unlink', - 'chmod', - 'stat', - 'lstat', - 'rmdir', - 'readdir' - ] - methods.forEach(m => { - options[m] = options[m] || fs[m] - m = m + 'Sync' - options[m] = options[m] || fs[m] - }) - - options.maxBusyTries = options.maxBusyTries || 3 -} - -function rimraf (p, options, cb) { - let busyTries = 0 - - if (typeof options === 'function') { - cb = options - options = {} - } - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert.equal(typeof cb, 'function', 'rimraf: callback function required') - assert(options, 'rimraf: invalid options argument provided') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - defaults(options) - - rimraf_(p, options, function CB (er) { - if (er) { - if (isWindows && (er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') && - busyTries < options.maxBusyTries) { - busyTries++ - let time = busyTries * 100 - // try again, with the same exact callback as this one. - return setTimeout(() => rimraf_(p, options, CB), time) - } - - // already gone - if (er.code === 'ENOENT') er = null - } - - cb(er) - }) -} - -// Two possible strategies. -// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR -// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR -// -// Both result in an extra syscall when you guess wrong. However, there -// are likely far more normal files in the world than directories. This -// is based on the assumption that a the average number of files per -// directory is >= 1. -// -// If anyone ever complains about this, then I guess the strategy could -// be made configurable somehow. But until then, YAGNI. -function rimraf_ (p, options, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - - // sunos lets the root user unlink directories, which is... weird. - // so we have to lstat here and make sure it's not a dir. - options.lstat(p, (er, st) => { - if (er && er.code === 'ENOENT') { - return cb(null) - } - - // Windows can EPERM on stat. Life is suffering. - if (er && er.code === 'EPERM' && isWindows) { - return fixWinEPERM(p, options, er, cb) - } - - if (st && st.isDirectory()) { - return rmdir(p, options, er, cb) - } - - options.unlink(p, er => { - if (er) { - if (er.code === 'ENOENT') { - return cb(null) - } - if (er.code === 'EPERM') { - return (isWindows) - ? fixWinEPERM(p, options, er, cb) - : rmdir(p, options, er, cb) - } - if (er.code === 'EISDIR') { - return rmdir(p, options, er, cb) - } - } - return cb(er) - }) - }) -} - -function fixWinEPERM (p, options, er, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - if (er) { - assert(er instanceof Error) - } - - options.chmod(p, 666, er2 => { - if (er2) { - cb(er2.code === 'ENOENT' ? null : er) - } else { - options.stat(p, (er3, stats) => { - if (er3) { - cb(er3.code === 'ENOENT' ? null : er) - } else if (stats.isDirectory()) { - rmdir(p, options, er, cb) - } else { - options.unlink(p, cb) - } - }) - } - }) -} - -function fixWinEPERMSync (p, options, er) { - let stats - - assert(p) - assert(options) - if (er) { - assert(er instanceof Error) - } - - try { - options.chmodSync(p, 666) - } catch (er2) { - if (er2.code === 'ENOENT') { - return - } else { - throw er - } - } - - try { - stats = options.statSync(p) - } catch (er3) { - if (er3.code === 'ENOENT') { - return - } else { - throw er - } - } - - if (stats.isDirectory()) { - rmdirSync(p, options, er) - } else { - options.unlinkSync(p) - } -} - -function rmdir (p, options, originalEr, cb) { - assert(p) - assert(options) - if (originalEr) { - assert(originalEr instanceof Error) - } - assert(typeof cb === 'function') - - // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) - // if we guessed wrong, and it's not a directory, then - // raise the original error. - options.rmdir(p, er => { - if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) { - rmkids(p, options, cb) - } else if (er && er.code === 'ENOTDIR') { - cb(originalEr) - } else { - cb(er) - } - }) -} - -function rmkids (p, options, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - - options.readdir(p, (er, files) => { - if (er) return cb(er) - - let n = files.length - let errState - - if (n === 0) return options.rmdir(p, cb) - - files.forEach(f => { - rimraf(path.join(p, f), options, er => { - if (errState) { - return - } - if (er) return cb(errState = er) - if (--n === 0) { - options.rmdir(p, cb) - } - }) - }) - }) -} - -// this looks simpler, and is strictly *faster*, but will -// tie up the JavaScript thread and fail on excessively -// deep directory trees. -function rimrafSync (p, options) { - let st - - options = options || {} - defaults(options) - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert(options, 'rimraf: missing options') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - try { - st = options.lstatSync(p) - } catch (er) { - if (er.code === 'ENOENT') { - return - } - - // Windows can EPERM on stat. Life is suffering. - if (er.code === 'EPERM' && isWindows) { - fixWinEPERMSync(p, options, er) - } - } - - try { - // sunos lets the root user unlink directories, which is... weird. - if (st && st.isDirectory()) { - rmdirSync(p, options, null) - } else { - options.unlinkSync(p) - } - } catch (er) { - if (er.code === 'ENOENT') { - return - } else if (er.code === 'EPERM') { - return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) - } else if (er.code !== 'EISDIR') { - throw er - } - rmdirSync(p, options, er) - } -} - -function rmdirSync (p, options, originalEr) { - assert(p) - assert(options) - if (originalEr) { - assert(originalEr instanceof Error) - } - - try { - options.rmdirSync(p) - } catch (er) { - if (er.code === 'ENOENT') { - return - } else if (er.code === 'ENOTDIR') { - throw originalEr - } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') { - rmkidsSync(p, options) - } - } -} - -function rmkidsSync (p, options) { - assert(p) - assert(options) - options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options)) - options.rmdirSync(p, options) -} - -module.exports = rimraf -rimraf.sync = rimrafSync diff --git a/truebit-implementation/node_modules/fs-extra/lib/util/assign.js b/truebit-implementation/node_modules/fs-extra/lib/util/assign.js deleted file mode 100644 index 317e5ec4..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/util/assign.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict' - -// simple mutable assign -function assign () { - const args = [].slice.call(arguments).filter(i => i) - const dest = args.shift() - args.forEach(src => { - Object.keys(src).forEach(key => { - dest[key] = src[key] - }) - }) - - return dest -} - -module.exports = assign diff --git a/truebit-implementation/node_modules/fs-extra/lib/util/utimes.js b/truebit-implementation/node_modules/fs-extra/lib/util/utimes.js deleted file mode 100644 index 4c320993..00000000 --- a/truebit-implementation/node_modules/fs-extra/lib/util/utimes.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict' - -const fs = require('graceful-fs') -const os = require('os') -const path = require('path') - -// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not -function hasMillisResSync () { - let tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2)) - tmpfile = path.join(os.tmpdir(), tmpfile) - - // 550 millis past UNIX epoch - const d = new Date(1435410243862) - fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141') - const fd = fs.openSync(tmpfile, 'r+') - fs.futimesSync(fd, d, d) - fs.closeSync(fd) - return fs.statSync(tmpfile).mtime > 1435410243000 -} - -function hasMillisRes (callback) { - let tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2)) - tmpfile = path.join(os.tmpdir(), tmpfile) - - // 550 millis past UNIX epoch - const d = new Date(1435410243862) - fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', err => { - if (err) return callback(err) - fs.open(tmpfile, 'r+', (err, fd) => { - if (err) return callback(err) - fs.futimes(fd, d, d, err => { - if (err) return callback(err) - fs.close(fd, err => { - if (err) return callback(err) - fs.stat(tmpfile, (err, stats) => { - if (err) return callback(err) - callback(null, stats.mtime > 1435410243000) - }) - }) - }) - }) - }) -} - -function timeRemoveMillis (timestamp) { - if (typeof timestamp === 'number') { - return Math.floor(timestamp / 1000) * 1000 - } else if (timestamp instanceof Date) { - return new Date(Math.floor(timestamp.getTime() / 1000) * 1000) - } else { - throw new Error('fs-extra: timeRemoveMillis() unknown parameter type') - } -} - -function utimesMillis (path, atime, mtime, callback) { - // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback) - fs.open(path, 'r+', (err, fd) => { - if (err) return callback(err) - fs.futimes(fd, atime, mtime, futimesErr => { - fs.close(fd, closeErr => { - if (callback) callback(futimesErr || closeErr) - }) - }) - }) -} - -module.exports = { - hasMillisRes, - hasMillisResSync, - timeRemoveMillis, - utimesMillis -} diff --git a/truebit-implementation/node_modules/fs-extra/package.json b/truebit-implementation/node_modules/fs-extra/package.json deleted file mode 100644 index aa9f65b2..00000000 --- a/truebit-implementation/node_modules/fs-extra/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_from": "fs-extra@^2.1.2", - "_id": "fs-extra@2.1.2", - "_inBundle": false, - "_integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "_location": "/fs-extra", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fs-extra@^2.1.2", - "name": "fs-extra", - "escapedName": "fs-extra", - "rawSpec": "^2.1.2", - "saveSpec": null, - "fetchSpec": "^2.1.2" - }, - "_requiredBy": [ - "/fs-promise", - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "_shasum": "046c70163cef9aad46b0e4a7fa467fb22d71de35", - "_spec": "fs-extra@^2.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "JP Richardson", - "email": "jprichardson@gmail.com" - }, - "bugs": { - "url": "https://github.com/jprichardson/node-fs-extra/issues" - }, - "bundleDependencies": false, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - }, - "deprecated": false, - "description": "fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as mkdir -p, cp -r, and rm -rf.", - "devDependencies": { - "coveralls": "^2.11.2", - "istanbul": "^0.4.5", - "klaw": "^1.0.0", - "klaw-sync": "^1.1.2", - "minimist": "^1.1.1", - "mocha": "^3.1.2", - "proxyquire": "^1.7.10", - "read-dir-files": "^0.1.1", - "rimraf": "^2.2.8", - "secure-random": "^1.1.1", - "standard": "^8.5.0" - }, - "homepage": "https://github.com/jprichardson/node-fs-extra", - "keywords": [ - "fs", - "file", - "file system", - "copy", - "directory", - "extra", - "mkdirp", - "mkdir", - "mkdirs", - "recursive", - "json", - "read", - "write", - "extra", - "delete", - "remove", - "touch", - "create", - "text", - "output", - "move" - ], - "license": "MIT", - "main": "./lib/index", - "name": "fs-extra", - "repository": { - "type": "git", - "url": "git+https://github.com/jprichardson/node-fs-extra.git" - }, - "scripts": { - "coverage": "istanbul cover -i 'lib/**' -x '**/__tests__/**' test.js", - "coveralls": "npm run coverage && coveralls < coverage/lcov.info", - "lint": "standard", - "test": "npm run lint && npm run unit", - "test-find": "find ./lib/**/__tests__ -name *.test.js | xargs mocha", - "unit": "node test.js" - }, - "version": "2.1.2" -} diff --git a/truebit-implementation/node_modules/fs-promise/.jshintrc b/truebit-implementation/node_modules/fs-promise/.jshintrc deleted file mode 100644 index d056de69..00000000 --- a/truebit-implementation/node_modules/fs-promise/.jshintrc +++ /dev/null @@ -1 +0,0 @@ -{"node":true} diff --git a/truebit-implementation/node_modules/fs-promise/.npmignore b/truebit-implementation/node_modules/fs-promise/.npmignore deleted file mode 100644 index 1bd72269..00000000 --- a/truebit-implementation/node_modules/fs-promise/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -*.swp diff --git a/truebit-implementation/node_modules/fs-promise/.travis.yml b/truebit-implementation/node_modules/fs-promise/.travis.yml deleted file mode 100644 index 0d444c4b..00000000 --- a/truebit-implementation/node_modules/fs-promise/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: node_js -sudo: false -node_js: - - "4" - - "5" - - "6" - - "7" -env: - - ANY_PROMISE= - - ANY_PROMISE=es6-promise - - ANY_PROMISE=bluebird - - ANY_PROMISE=rsvp - - ANY_PROMISE=when - - ANY_PROMISE=q diff --git a/truebit-implementation/node_modules/fs-promise/LICENSE b/truebit-implementation/node_modules/fs-promise/LICENSE deleted file mode 100644 index 63c03e5e..00000000 --- a/truebit-implementation/node_modules/fs-promise/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2013 Kevin Beaty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/fs-promise/README.md b/truebit-implementation/node_modules/fs-promise/README.md deleted file mode 100755 index b86e8ddb..00000000 --- a/truebit-implementation/node_modules/fs-promise/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# fs-promise - -`fs-promise` is now *deprecated*. Use [`mz/fs`][1] [`fs-extra^3.0`][2]. - -[1]: https://github.com/normalize/mz -[2]: https://www.npmjs.org/package/fs-extra diff --git a/truebit-implementation/node_modules/fs-promise/index.d.ts b/truebit-implementation/node_modules/fs-promise/index.d.ts deleted file mode 100644 index edade0cd..00000000 --- a/truebit-implementation/node_modules/fs-promise/index.d.ts +++ /dev/null @@ -1,58 +0,0 @@ -// Type definitions for fs-promise 1.0 -// Project: https://github.com/kevinbeaty/fs-promise#readme -// Definitions by: Thiago de Arruda -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -/// - -export * from "mz/fs"; -export * from "fs-extra"; - -export interface WriteOptions { - encoding?: string; - mode?: number; - flag?: string; -} - -type JsonReplacerArray = Array; - -type JsonReplacerFunction = (key: string, value: any) => any; - -type JsonReplacer = JsonReplacerArray | JsonReplacerFunction; - -export interface WriteJsonOptions extends WriteOptions { - spaces?: number; - replacer?: JsonReplacer; -} - -export interface ReadJsonOptions { - encoding: string; - flag?: string; - reviver: (key: any, value: any) => any; -} - -export function copy(src: string, dst: string): Promise; -export function emptyDir(dir: string): Promise; -export function ensureFile(file: string): Promise; -export function ensureDir(dir: string): Promise; -export function ensureLink(srcpath: string, dstpath: string): Promise; -export function ensureSymlink(srcpath: string, dstpath: string, type?: "dir" | "file" | "junction"): Promise; -export function mkdirs(dir: string): Promise; -export function move(src: string, dst: string): Promise; -export function outputFile(file: string, data: string | Buffer, options?: WriteOptions): Promise; -export function outputJson(file: string, data: any, options?: WriteJsonOptions): Promise; -export function readJson(file: string, options?: ReadJsonOptions): Promise; -export function remove(path: string): Promise; -export function writeJson(file: string, data: any, options?: WriteJsonOptions): Promise; - -// aliases -export { - emptyDir as emptydir, - ensureFile as createFile, - ensureLink as createLink, - ensureSymlink as createSymlink, - mkdirs as mkdirp, - outputJson as outputJSON, - readJson as readJSON, - writeJson as writeJSON -}; diff --git a/truebit-implementation/node_modules/fs-promise/index.js b/truebit-implementation/node_modules/fs-promise/index.js deleted file mode 100644 index dac45f52..00000000 --- a/truebit-implementation/node_modules/fs-promise/index.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict' - -var mzfs = require('mz/fs') -var fsExtra = require('fs-extra') -var Promise = require('any-promise') -var thenifyAll = require('thenify-all') -var slice = Array.prototype.slice - -// thenify-all for all fs-extra that make sense to be promises -var fsExtraKeys = [ - 'copy', - 'emptyDir', - 'ensureFile', - 'ensureDir', - 'ensureLink', - 'ensureSymlink', - 'mkdirs', - 'move', - 'outputFile', - 'outputJson', - 'readJson', - 'remove', - 'writeJson', - // aliases - 'createFile', - 'createLink', - 'createSymlink', - 'emptydir', - 'mkdirp', - 'readJSON', - 'outputJSON', - 'writeJSON' -] -thenifyAll.withCallback(fsExtra, exports, fsExtraKeys) - -// Delegate all normal fs to mz/fs -// (this overwrites anything proxies directly above) -var mzKeys = [ - 'rename', - 'ftruncate', - 'chown', - 'fchown', - 'lchown', - 'chmod', - 'fchmod', - 'stat', - 'lstat', - 'fstat', - 'link', - 'symlink', - 'readlink', - 'realpath', - 'unlink', - 'rmdir', - 'mkdir', - 'mkdtemp', - 'readdir', - 'close', - 'open', - 'utimes', - 'futimes', - 'fsync', - 'fdatasync', - 'write', - 'read', - 'readFile', - 'writeFile', - 'appendFile', - 'access', - 'truncate', - 'exists' -] - -mzKeys.forEach(function(key){ - exports[key] = mzfs[key] -}) diff --git a/truebit-implementation/node_modules/fs-promise/package.json b/truebit-implementation/node_modules/fs-promise/package.json deleted file mode 100644 index 14cb039c..00000000 --- a/truebit-implementation/node_modules/fs-promise/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "fs-promise@^2.0.0", - "_id": "fs-promise@2.0.3", - "_inBundle": false, - "_integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", - "_location": "/fs-promise", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fs-promise@^2.0.0", - "name": "fs-promise", - "escapedName": "fs-promise", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "_shasum": "f64e4f854bcf689aa8bddcba268916db3db46854", - "_spec": "fs-promise@^2.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Kevin Beaty" - }, - "bugs": { - "url": "https://github.com/kevinbeaty/fs-promise/issues" - }, - "bundleDependencies": false, - "dependencies": { - "any-promise": "^1.3.0", - "fs-extra": "^2.0.0", - "mz": "^2.6.0", - "thenify-all": "^1.6.0" - }, - "deprecated": "Use mz or fs-extra^3.0 with Promise Support", - "description": "[DEPRECATED] Use mz or fs-extra^3.0 with Promise Support", - "devDependencies": { - "@types/fs-extra": "0.0.37", - "@types/mz": "0.0.30", - "bluebird": "^3.0.0", - "es6-promise": "^4.0.0", - "mocha": "^3.0.0", - "q": "^1.0.0", - "rsvp": "^3.0.0", - "when": "^3.0.0" - }, - "homepage": "https://github.com/kevinbeaty/fs-promise#readme", - "keywords": [ - "promise", - "fs", - "file", - "file system" - ], - "license": "MIT", - "main": "index.js", - "name": "fs-promise", - "repository": { - "type": "git", - "url": "git+https://github.com/kevinbeaty/fs-promise.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "2.0.3" -} diff --git a/truebit-implementation/node_modules/fs-promise/test/basic.js b/truebit-implementation/node_modules/fs-promise/test/basic.js deleted file mode 100644 index 4619a828..00000000 --- a/truebit-implementation/node_modules/fs-promise/test/basic.js +++ /dev/null @@ -1,119 +0,0 @@ -'use strict'; -/*globals describe, it, beforeEach, afterEach */ -var fsp = require('..'), - path = require('path'), - assert = require('assert'), - Prom = require('any-promise'), - testdir = path.join(__dirname, 'tmp'), - testdir2 = path.join(__dirname, 'tmp2') - - -describe('basic', function(){ - beforeEach(function(){ - return fsp.mkdir(testdir).then(existstmp(true)); - }); - - afterEach(function(){ - return fsp.remove(testdir).then(existstmp(false)); - }); - - it('should create files and readdir', function(){ - return fsp.ensureFile(file('hello')).then(readtmp).then(function(files){ - assert.deepEqual(files.sort(), ['hello']); - return fsp.ensureFile(file('world')); - }).then(readtmp).then(function(files){ - assert.deepEqual(files.sort(), ['hello', 'world']); - return fsp.exists(testdir2) - }).then(function(exists){ - assert.equal(exists, false); - return fsp.move(testdir, testdir2) - }).then(function(){ - return Prom.all([fsp.exists(testdir), fsp.exists(testdir2)]) - }).then(function(exists){ - return assert.deepEqual(exists, [false, true]) - }).then(function(){ - return fsp.copy(testdir2, testdir) - }).then(function(){ - return Prom.all([fsp.exists(testdir), fsp.exists(testdir2)]) - }).then(function(exists){ - return assert.deepEqual(exists, [true, true]) - }).then(readtmps).then(function(files){ - assert.deepEqual(files[0].sort(), files[1].sort()); - return fsp.emptyDir(testdir2); - }).then(readtmp2).then(function(files){ - assert.deepEqual(files, []); - }).then(function(){ - fsp.remove(testdir2); - }) - }); - - it('should pass through Sync as value', function(){ - return fsp.ensureFile(file('hello')).then(function(files){ - assert(fsp.existsSync(file('hello'))); - assert(!fsp.existsSync(file('world'))); - return fsp.ensureFile(file('world')); - }).then(readtmp).then(function(files){ - assert(fsp.existsSync(file('hello'))); - assert(fsp.existsSync(file('world'))); - }); - }); - - it('should copy with pipe read/write stream', function(){ - return fsp.writeFile(file('hello1'), 'hello world').then(function(){ - return fsp.readFile(file('hello1'), {encoding:'utf8'}); - }).then(function(contents){ - assert.equal(contents, 'hello world'); - var read = fsp.createReadStream(file('hello1')), - write = fsp.createWriteStream(file('hello2')), - promise = new Prom(function(resolve, reject){ - read.on('end', resolve); - write.on('error', reject); - read.on('error', reject); - }); - read.pipe(write); - return promise; - }).then(function(){ - return fsp.readFile(file('hello2'), {encoding:'utf8'}); - }).then(function(contents){ - assert.equal(contents, 'hello world'); - }); - }); - - it('should pass third argument from write #7', function testWriteFsp() { - return fsp.open(file('some.txt'), 'w+').then(function (fd){ - return fsp.write(fd, "hello fs-promise").then(function(result) { - var written = result[0]; - var text = result[1]; - assert.equal(text.substring(0, written), "hello fs-promise".substring(0, written)) - return fsp.close(fd); - }) - }) - }); - -}); - -function file(){ - var args = [].slice.call(arguments); - args.unshift(testdir); - return path.join.apply(path, args); -} - -function existstmp(shouldExist){ - return function(){ - return fsp.exists(testdir).then(function(exists){ - assert.equal(exists, shouldExist); - }); - }; -} - -function readtmp(){ - return fsp.readdir(testdir); -} - -function readtmp2(){ - return fsp.readdir(testdir2); -} - -function readtmps(){ - return Prom.all([readtmp(), readtmp2()]); -} diff --git a/truebit-implementation/node_modules/fs-promise/test/mocha.opts b/truebit-implementation/node_modules/fs-promise/test/mocha.opts deleted file mode 100755 index 51c0526f..00000000 --- a/truebit-implementation/node_modules/fs-promise/test/mocha.opts +++ /dev/null @@ -1,6 +0,0 @@ ---no-colors ---ui bdd ---reporter spec ---require test/register -test/basic.js -test/mz.js diff --git a/truebit-implementation/node_modules/fs-promise/test/mz.js b/truebit-implementation/node_modules/fs-promise/test/mz.js deleted file mode 100644 index 3348735f..00000000 --- a/truebit-implementation/node_modules/fs-promise/test/mz.js +++ /dev/null @@ -1,57 +0,0 @@ -// Tests from mz. License MIT -// https://github.com/normalize/mz -var assert = require('assert') - -describe('fs', function () { - var fs = require('../') - - it('.stat()', function (done) { - fs.stat(__filename).then(function (stats) { - assert.equal(typeof stats.size, 'number') - done() - }).catch(done) - }) - - it('.mkdtemp()', function (done) { - if (!require('fs').mkdtemp) this.skip() - fs.mkdtemp('/tmp/').then(function (folder) { - fs.rmdirSync(folder) - done() - }).catch(done) - }) - - it('.statSync()', function () { - var stats = fs.statSync(__filename) - assert.equal(typeof stats.size, 'number') - }) - - it('.exists()', function (done) { - fs.exists(__filename).then(function (exists) { - assert(exists) - done() - }).catch(done) - }) - - it('.existsSync()', function () { - var exists = fs.existsSync(__filename) - assert(exists) - }) - - describe('callback support', function () { - it('.stat()', function (done) { - fs.stat(__filename, function (err, stats) { - assert(!err) - assert.equal(typeof stats.size, 'number') - done() - }) - }) - - it('.exists()', function (done) { - fs.exists(__filename, function (err, exists) { - assert(!err) - assert(exists) - done() - }) - }) - }) -}) diff --git a/truebit-implementation/node_modules/fs-promise/test/register.js b/truebit-implementation/node_modules/fs-promise/test/register.js deleted file mode 100644 index d7b7c497..00000000 --- a/truebit-implementation/node_modules/fs-promise/test/register.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var expectedImpl -if(process.env.ANY_PROMISE){ - // should load registration regardless - expectedImpl = process.env.ANY_PROMISE - require('any-promise/register')(expectedImpl) -} else { - expectedImpl = 'global.Promise' -} - -var impl = require('any-promise/implementation') - -if(impl !== expectedImpl){ - throw new Error('Expecting '+expectedImpl+' got '+impl) -} diff --git a/truebit-implementation/node_modules/fs.realpath/LICENSE b/truebit-implementation/node_modules/fs.realpath/LICENSE deleted file mode 100644 index 5bd884c2..00000000 --- a/truebit-implementation/node_modules/fs.realpath/LICENSE +++ /dev/null @@ -1,43 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----- - -This library bundles a version of the `fs.realpath` and `fs.realpathSync` -methods from Node.js v0.10 under the terms of the Node.js MIT license. - -Node's license follows, also included at the header of `old.js` which contains -the licensed code: - - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - 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. diff --git a/truebit-implementation/node_modules/fs.realpath/README.md b/truebit-implementation/node_modules/fs.realpath/README.md deleted file mode 100644 index a42ceac6..00000000 --- a/truebit-implementation/node_modules/fs.realpath/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# fs.realpath - -A backwards-compatible fs.realpath for Node v6 and above - -In Node v6, the JavaScript implementation of fs.realpath was replaced -with a faster (but less resilient) native implementation. That raises -new and platform-specific errors and cannot handle long or excessively -symlink-looping paths. - -This module handles those cases by detecting the new errors and -falling back to the JavaScript implementation. On versions of Node -prior to v6, it has no effect. - -## USAGE - -```js -var rp = require('fs.realpath') - -// async version -rp.realpath(someLongAndLoopingPath, function (er, real) { - // the ELOOP was handled, but it was a bit slower -}) - -// sync version -var real = rp.realpathSync(someLongAndLoopingPath) - -// monkeypatch at your own risk! -// This replaces the fs.realpath/fs.realpathSync builtins -rp.monkeypatch() - -// un-do the monkeypatching -rp.unmonkeypatch() -``` diff --git a/truebit-implementation/node_modules/fs.realpath/index.js b/truebit-implementation/node_modules/fs.realpath/index.js deleted file mode 100644 index b09c7c7e..00000000 --- a/truebit-implementation/node_modules/fs.realpath/index.js +++ /dev/null @@ -1,66 +0,0 @@ -module.exports = realpath -realpath.realpath = realpath -realpath.sync = realpathSync -realpath.realpathSync = realpathSync -realpath.monkeypatch = monkeypatch -realpath.unmonkeypatch = unmonkeypatch - -var fs = require('fs') -var origRealpath = fs.realpath -var origRealpathSync = fs.realpathSync - -var version = process.version -var ok = /^v[0-5]\./.test(version) -var old = require('./old.js') - -function newError (er) { - return er && er.syscall === 'realpath' && ( - er.code === 'ELOOP' || - er.code === 'ENOMEM' || - er.code === 'ENAMETOOLONG' - ) -} - -function realpath (p, cache, cb) { - if (ok) { - return origRealpath(p, cache, cb) - } - - if (typeof cache === 'function') { - cb = cache - cache = null - } - origRealpath(p, cache, function (er, result) { - if (newError(er)) { - old.realpath(p, cache, cb) - } else { - cb(er, result) - } - }) -} - -function realpathSync (p, cache) { - if (ok) { - return origRealpathSync(p, cache) - } - - try { - return origRealpathSync(p, cache) - } catch (er) { - if (newError(er)) { - return old.realpathSync(p, cache) - } else { - throw er - } - } -} - -function monkeypatch () { - fs.realpath = realpath - fs.realpathSync = realpathSync -} - -function unmonkeypatch () { - fs.realpath = origRealpath - fs.realpathSync = origRealpathSync -} diff --git a/truebit-implementation/node_modules/fs.realpath/old.js b/truebit-implementation/node_modules/fs.realpath/old.js deleted file mode 100644 index b40305e7..00000000 --- a/truebit-implementation/node_modules/fs.realpath/old.js +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -var pathModule = require('path'); -var isWindows = process.platform === 'win32'; -var fs = require('fs'); - -// JavaScript implementation of realpath, ported from node pre-v6 - -var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); - -function rethrow() { - // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and - // is fairly slow to generate. - var callback; - if (DEBUG) { - var backtrace = new Error; - callback = debugCallback; - } else - callback = missingCallback; - - return callback; - - function debugCallback(err) { - if (err) { - backtrace.message = err.message; - err = backtrace; - missingCallback(err); - } - } - - function missingCallback(err) { - if (err) { - if (process.throwDeprecation) - throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs - else if (!process.noDeprecation) { - var msg = 'fs: missing callback ' + (err.stack || err.message); - if (process.traceDeprecation) - console.trace(msg); - else - console.error(msg); - } - } - } -} - -function maybeCallback(cb) { - return typeof cb === 'function' ? cb : rethrow(); -} - -var normalize = pathModule.normalize; - -// Regexp that finds the next partion of a (partial) path -// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] -if (isWindows) { - var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; -} else { - var nextPartRe = /(.*?)(?:[\/]+|$)/g; -} - -// Regex to find the device root, including trailing slash. E.g. 'c:\\'. -if (isWindows) { - var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; -} else { - var splitRootRe = /^[\/]*/; -} - -exports.realpathSync = function realpathSync(p, cache) { - // make p is absolute - p = pathModule.resolve(p); - - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return cache[p]; - } - - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; - - start(); - - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; - - // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs.lstatSync(base); - knownHard[base] = true; - } - } - - // walk down the path, swapping out linked pathparts for their real - // values - // NB: p.length changes. - while (pos < p.length) { - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; - - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - continue; - } - - var resolvedLink; - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // some known symbolic link. no need to stat again. - resolvedLink = cache[base]; - } else { - var stat = fs.lstatSync(base); - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - continue; - } - - // read the link if it wasn't read before - // dev/ino always return 0 on windows, so skip the check. - var linkTarget = null; - if (!isWindows) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - linkTarget = seenLinks[id]; - } - } - if (linkTarget === null) { - fs.statSync(base); - linkTarget = fs.readlinkSync(base); - } - resolvedLink = pathModule.resolve(previous, linkTarget); - // track this, if given a cache. - if (cache) cache[base] = resolvedLink; - if (!isWindows) seenLinks[id] = linkTarget; - } - - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); - } - - if (cache) cache[original] = p; - - return p; -}; - - -exports.realpath = function realpath(p, cache, cb) { - if (typeof cb !== 'function') { - cb = maybeCallback(cache); - cache = null; - } - - // make p is absolute - p = pathModule.resolve(p); - - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return process.nextTick(cb.bind(null, null, cache[p])); - } - - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; - - start(); - - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; - - // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs.lstat(base, function(err) { - if (err) return cb(err); - knownHard[base] = true; - LOOP(); - }); - } else { - process.nextTick(LOOP); - } - } - - // walk down the path, swapping out linked pathparts for their real - // values - function LOOP() { - // stop if scanned past end of path - if (pos >= p.length) { - if (cache) cache[original] = p; - return cb(null, p); - } - - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; - - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - return process.nextTick(LOOP); - } - - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // known symbolic link. no need to stat again. - return gotResolvedLink(cache[base]); - } - - return fs.lstat(base, gotStat); - } - - function gotStat(err, stat) { - if (err) return cb(err); - - // if not a symlink, skip to the next path part - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - return process.nextTick(LOOP); - } - - // stat & read the link if not read before - // call gotTarget as soon as the link target is known - // dev/ino always return 0 on windows, so skip the check. - if (!isWindows) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - return gotTarget(null, seenLinks[id], base); - } - } - fs.stat(base, function(err) { - if (err) return cb(err); - - fs.readlink(base, function(err, target) { - if (!isWindows) seenLinks[id] = target; - gotTarget(err, target); - }); - }); - } - - function gotTarget(err, target, base) { - if (err) return cb(err); - - var resolvedLink = pathModule.resolve(previous, target); - if (cache) cache[base] = resolvedLink; - gotResolvedLink(resolvedLink); - } - - function gotResolvedLink(resolvedLink) { - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); - } -}; diff --git a/truebit-implementation/node_modules/fs.realpath/package.json b/truebit-implementation/node_modules/fs.realpath/package.json deleted file mode 100644 index bd34062b..00000000 --- a/truebit-implementation/node_modules/fs.realpath/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "fs.realpath@^1.0.0", - "_id": "fs.realpath@1.0.0", - "_inBundle": false, - "_integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "_location": "/fs.realpath", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fs.realpath@^1.0.0", - "name": "fs.realpath", - "escapedName": "fs.realpath", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/glob" - ], - "_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "_shasum": "1504ad2523158caa40db4a2787cb01411994ea4f", - "_spec": "fs.realpath@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/glob", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/fs.realpath/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails", - "devDependencies": {}, - "files": [ - "old.js", - "index.js" - ], - "homepage": "https://github.com/isaacs/fs.realpath#readme", - "keywords": [ - "realpath", - "fs", - "polyfill" - ], - "license": "ISC", - "main": "index.js", - "name": "fs.realpath", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/fs.realpath.git" - }, - "scripts": { - "test": "tap test/*.js --cov" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/fstream/.npmignore b/truebit-implementation/node_modules/fstream/.npmignore deleted file mode 100644 index 494272a8..00000000 --- a/truebit-implementation/node_modules/fstream/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules/ -examples/deep-copy/ -examples/path/ -examples/filter-copy/ diff --git a/truebit-implementation/node_modules/fstream/.travis.yml b/truebit-implementation/node_modules/fstream/.travis.yml deleted file mode 100644 index 9f5972ab..00000000 --- a/truebit-implementation/node_modules/fstream/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -node_js: - - "6" - - "4" - - "0.10" - - "0.12" -before_install: - - "npm config set spin false" - - "npm install -g npm/npm" diff --git a/truebit-implementation/node_modules/fstream/LICENSE b/truebit-implementation/node_modules/fstream/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/truebit-implementation/node_modules/fstream/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/fstream/README.md b/truebit-implementation/node_modules/fstream/README.md deleted file mode 100644 index 9d8cb77e..00000000 --- a/truebit-implementation/node_modules/fstream/README.md +++ /dev/null @@ -1,76 +0,0 @@ -Like FS streams, but with stat on them, and supporting directories and -symbolic links, as well as normal files. Also, you can use this to set -the stats on a file, even if you don't change its contents, or to create -a symlink, etc. - -So, for example, you can "write" a directory, and it'll call `mkdir`. You -can specify a uid and gid, and it'll call `chown`. You can specify a -`mtime` and `atime`, and it'll call `utimes`. You can call it a symlink -and provide a `linkpath` and it'll call `symlink`. - -Note that it won't automatically resolve symbolic links. So, if you -call `fstream.Reader('/some/symlink')` then you'll get an object -that stats and then ends immediately (since it has no data). To follow -symbolic links, do this: `fstream.Reader({path:'/some/symlink', follow: -true })`. - -There are various checks to make sure that the bytes emitted are the -same as the intended size, if the size is set. - -## Examples - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - }) - .write("hello\n") - .end() -``` - -This will create the directories if they're missing, and then write -`hello\n` into the file, chmod it to 0755, and assert that 6 bytes have -been written when it's done. - -```javascript -fstream - .Writer({ path: "path/to/file" - , mode: 0755 - , size: 6 - , flags: "a" - }) - .write("hello\n") - .end() -``` - -You can pass flags in, if you want to append to a file. - -```javascript -fstream - .Writer({ path: "path/to/symlink" - , linkpath: "./file" - , SymbolicLink: true - , mode: "0755" // octal strings supported - }) - .end() -``` - -If isSymbolicLink is a function, it'll be called, and if it returns -true, then it'll treat it as a symlink. If it's not a function, then -any truish value will make a symlink, or you can set `type: -'SymbolicLink'`, which does the same thing. - -Note that the linkpath is relative to the symbolic link location, not -the parent dir or cwd. - -```javascript -fstream - .Reader("path/to/dir") - .pipe(fstream.Writer("path/to/other/dir")) -``` - -This will do like `cp -Rp path/to/dir path/to/other/dir`. If the other -dir exists and isn't a directory, then it'll emit an error. It'll also -set the uid, gid, mode, etc. to be identical. In this way, it's more -like `rsync -a` than simply a copy. diff --git a/truebit-implementation/node_modules/fstream/examples/filter-pipe.js b/truebit-implementation/node_modules/fstream/examples/filter-pipe.js deleted file mode 100644 index 83dadef8..00000000 --- a/truebit-implementation/node_modules/fstream/examples/filter-pipe.js +++ /dev/null @@ -1,134 +0,0 @@ -var fstream = require('../fstream.js') -var path = require('path') - -var r = fstream.Reader({ - path: path.dirname(__dirname), - filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) && - !this.basename.match(/^deep-copy$/) && - !this.basename.match(/^filter-copy$/) - } -}) - -// this writer will only write directories -var w = fstream.Writer({ - path: path.resolve(__dirname, 'filter-copy'), - type: 'Directory', - filter: function () { - return this.type === 'Directory' - } -}) - -var indent = '' - -r.on('entry', appears) -r.on('ready', function () { - console.error('ready to begin!', r.path) -}) - -function appears (entry) { - console.error(indent + 'a %s appears!', entry.type, entry.basename, typeof entry.basename) - if (foggy) { - console.error('FOGGY!') - var p = entry - do { - console.error(p.depth, p.path, p._paused) - p = p.parent - } while (p) - - throw new Error('\u001b[mshould not have entries while foggy') - } - indent += '\t' - entry.on('data', missile(entry)) - entry.on('end', runaway(entry)) - entry.on('entry', appears) -} - -var foggy -function missile (entry) { - function liftFog (who) { - if (!foggy) return - if (who) { - console.error('%s breaks the spell!', who && who.path) - } else { - console.error('the spell expires!') - } - console.error('\u001b[mthe fog lifts!\n') - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - if (entry.type === 'Directory') { - var ended = false - entry.once('end', function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent + '%s casts a spell', entry.basename) - console.error('\na slowing fog comes over the battlefield...\n\u001b[32m') - entry.pause() - entry.once('resume', liftFog) - foggy = setTimeout(liftFog, 1000) - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + '%s %s for %d damage!', - entry.basename, - e ? 'is struck' : 'fires a chunk', - c.length) - } -} - -function runaway (entry) { - return function () { - var e = Math.random() < 0.5 - console.error(indent + '%s %s', - entry.basename, - e ? 'turns to flee' : 'is vanquished!') - indent = indent.slice(0, -1) - } -} - -w.on('entry', attacks) -// w.on('ready', function () { attacks(w) }) -function attacks (entry) { - console.error(indent + '%s %s!', entry.basename, - entry.type === 'Directory' ? 'calls for backup' : 'attacks') - entry.on('entry', attacks) -} - -var ended = false -var i = 1 -r.on('end', function () { - if (foggy) clearTimeout(foggy) - console.error("\u001b[mIT'S OVER!!") - console.error('A WINNAR IS YOU!') - - console.log('ok ' + (i++) + ' A WINNAR IS YOU') - ended = true - // now go through and verify that everything in there is a dir. - var p = path.resolve(__dirname, 'filter-copy') - var checker = fstream.Reader({ path: p }) - checker.checker = true - checker.on('child', function (e) { - var ok = e.type === 'Directory' - console.log((ok ? '' : 'not ') + 'ok ' + (i++) + - ' should be a dir: ' + - e.path.substr(checker.path.length + 1)) - }) -}) - -process.on('exit', function () { - console.log((ended ? '' : 'not ') + 'ok ' + (i) + ' ended') - console.log('1..' + i) -}) - -r.pipe(w) diff --git a/truebit-implementation/node_modules/fstream/examples/pipe.js b/truebit-implementation/node_modules/fstream/examples/pipe.js deleted file mode 100644 index 3de42ef3..00000000 --- a/truebit-implementation/node_modules/fstream/examples/pipe.js +++ /dev/null @@ -1,118 +0,0 @@ -var fstream = require('../fstream.js') -var path = require('path') - -var r = fstream.Reader({ - path: path.dirname(__dirname), - filter: function () { - return !this.basename.match(/^\./) && - !this.basename.match(/^node_modules$/) && - !this.basename.match(/^deep-copy$/) - } -}) - -var w = fstream.Writer({ - path: path.resolve(__dirname, 'deep-copy'), - type: 'Directory' -}) - -var indent = '' - -r.on('entry', appears) -r.on('ready', function () { - console.error('ready to begin!', r.path) -}) - -function appears (entry) { - console.error(indent + 'a %s appears!', entry.type, entry.basename, typeof entry.basename, entry) - if (foggy) { - console.error('FOGGY!') - var p = entry - do { - console.error(p.depth, p.path, p._paused) - p = p.parent - } while (p) - - throw new Error('\u001b[mshould not have entries while foggy') - } - indent += '\t' - entry.on('data', missile(entry)) - entry.on('end', runaway(entry)) - entry.on('entry', appears) -} - -var foggy -function missile (entry) { - function liftFog (who) { - if (!foggy) return - if (who) { - console.error('%s breaks the spell!', who && who.path) - } else { - console.error('the spell expires!') - } - console.error('\u001b[mthe fog lifts!\n') - clearTimeout(foggy) - foggy = null - if (entry._paused) entry.resume() - } - - if (entry.type === 'Directory') { - var ended = false - entry.once('end', function () { ended = true }) - return function (c) { - // throw in some pathological pause()/resume() behavior - // just for extra fun. - process.nextTick(function () { - if (!foggy && !ended) { // && Math.random() < 0.3) { - console.error(indent + '%s casts a spell', entry.basename) - console.error('\na slowing fog comes over the battlefield...\n\u001b[32m') - entry.pause() - entry.once('resume', liftFog) - foggy = setTimeout(liftFog, 10) - } - }) - } - } - - return function (c) { - var e = Math.random() < 0.5 - console.error(indent + '%s %s for %d damage!', - entry.basename, - e ? 'is struck' : 'fires a chunk', - c.length) - } -} - -function runaway (entry) { - return function () { - var e = Math.random() < 0.5 - console.error(indent + '%s %s', - entry.basename, - e ? 'turns to flee' : 'is vanquished!') - indent = indent.slice(0, -1) - } -} - -w.on('entry', attacks) -// w.on('ready', function () { attacks(w) }) -function attacks (entry) { - console.error(indent + '%s %s!', entry.basename, - entry.type === 'Directory' ? 'calls for backup' : 'attacks') - entry.on('entry', attacks) -} - -var ended = false -r.on('end', function () { - if (foggy) clearTimeout(foggy) - console.error("\u001b[mIT'S OVER!!") - console.error('A WINNAR IS YOU!') - - console.log('ok 1 A WINNAR IS YOU') - ended = true -}) - -process.on('exit', function () { - console.log((ended ? '' : 'not ') + 'ok 2 ended') - console.log('1..2') -}) - -r.pipe(w) diff --git a/truebit-implementation/node_modules/fstream/examples/reader.js b/truebit-implementation/node_modules/fstream/examples/reader.js deleted file mode 100644 index 19affbe7..00000000 --- a/truebit-implementation/node_modules/fstream/examples/reader.js +++ /dev/null @@ -1,68 +0,0 @@ -var fstream = require('../fstream.js') -var tap = require('tap') -var fs = require('fs') -var path = require('path') -var dir = path.dirname(__dirname) - -tap.test('reader test', function (t) { - var children = -1 - var gotReady = false - var ended = false - - var r = fstream.Reader({ - path: dir, - filter: function () { - // return this.parent === r - return this.parent === r || this === r - } - }) - - r.on('ready', function () { - gotReady = true - children = fs.readdirSync(dir).length - console.error('Setting expected children to ' + children) - t.equal(r.type, 'Directory', 'should be a directory') - }) - - r.on('entry', function (entry) { - children-- - if (!gotReady) { - t.fail('children before ready!') - } - t.equal(entry.dirname, r.path, 'basename is parent dir') - }) - - r.on('error', function (er) { - t.fail(er) - t.end() - process.exit(1) - }) - - r.on('end', function () { - t.equal(children, 0, 'should have seen all children') - ended = true - }) - - var closed = false - r.on('close', function () { - t.ok(ended, 'saw end before close') - t.notOk(closed, 'close should only happen once') - closed = true - t.end() - }) -}) - -tap.test('reader error test', function (t) { - // assumes non-root on a *nix system - var r = fstream.Reader({ path: '/etc/shadow' }) - - r.once('error', function (er) { - t.ok(true) - t.end() - }) - - r.on('end', function () { - t.fail('reader ended without error') - t.end() - }) -}) diff --git a/truebit-implementation/node_modules/fstream/examples/symlink-write.js b/truebit-implementation/node_modules/fstream/examples/symlink-write.js deleted file mode 100644 index 19e81eea..00000000 --- a/truebit-implementation/node_modules/fstream/examples/symlink-write.js +++ /dev/null @@ -1,27 +0,0 @@ -var fstream = require('../fstream.js') -var notOpen = false -process.chdir(__dirname) - -fstream - .Writer({ - path: 'path/to/symlink', - linkpath: './file', - isSymbolicLink: true, - mode: '0755' // octal strings supported - }) - .on('close', function () { - notOpen = true - var fs = require('fs') - var s = fs.lstatSync('path/to/symlink') - var isSym = s.isSymbolicLink() - console.log((isSym ? '' : 'not ') + 'ok 1 should be symlink') - var t = fs.readlinkSync('path/to/symlink') - var isTarget = t === './file' - console.log((isTarget ? '' : 'not ') + 'ok 2 should link to ./file') - }) - .end() - -process.on('exit', function () { - console.log((notOpen ? '' : 'not ') + 'ok 3 should be closed') - console.log('1..3') -}) diff --git a/truebit-implementation/node_modules/fstream/fstream.js b/truebit-implementation/node_modules/fstream/fstream.js deleted file mode 100644 index c0eb3bea..00000000 --- a/truebit-implementation/node_modules/fstream/fstream.js +++ /dev/null @@ -1,35 +0,0 @@ -exports.Abstract = require('./lib/abstract.js') -exports.Reader = require('./lib/reader.js') -exports.Writer = require('./lib/writer.js') - -exports.File = { - Reader: require('./lib/file-reader.js'), - Writer: require('./lib/file-writer.js') -} - -exports.Dir = { - Reader: require('./lib/dir-reader.js'), - Writer: require('./lib/dir-writer.js') -} - -exports.Link = { - Reader: require('./lib/link-reader.js'), - Writer: require('./lib/link-writer.js') -} - -exports.Proxy = { - Reader: require('./lib/proxy-reader.js'), - Writer: require('./lib/proxy-writer.js') -} - -exports.Reader.Dir = exports.DirReader = exports.Dir.Reader -exports.Reader.File = exports.FileReader = exports.File.Reader -exports.Reader.Link = exports.LinkReader = exports.Link.Reader -exports.Reader.Proxy = exports.ProxyReader = exports.Proxy.Reader - -exports.Writer.Dir = exports.DirWriter = exports.Dir.Writer -exports.Writer.File = exports.FileWriter = exports.File.Writer -exports.Writer.Link = exports.LinkWriter = exports.Link.Writer -exports.Writer.Proxy = exports.ProxyWriter = exports.Proxy.Writer - -exports.collect = require('./lib/collect.js') diff --git a/truebit-implementation/node_modules/fstream/lib/abstract.js b/truebit-implementation/node_modules/fstream/lib/abstract.js deleted file mode 100644 index 97c120e1..00000000 --- a/truebit-implementation/node_modules/fstream/lib/abstract.js +++ /dev/null @@ -1,85 +0,0 @@ -// the parent class for all fstreams. - -module.exports = Abstract - -var Stream = require('stream').Stream -var inherits = require('inherits') - -function Abstract () { - Stream.call(this) -} - -inherits(Abstract, Stream) - -Abstract.prototype.on = function (ev, fn) { - if (ev === 'ready' && this.ready) { - process.nextTick(fn.bind(this)) - } else { - Stream.prototype.on.call(this, ev, fn) - } - return this -} - -Abstract.prototype.abort = function () { - this._aborted = true - this.emit('abort') -} - -Abstract.prototype.destroy = function () {} - -Abstract.prototype.warn = function (msg, code) { - var self = this - var er = decorate(msg, code, self) - if (!self.listeners('warn')) { - console.error('%s %s\n' + - 'path = %s\n' + - 'syscall = %s\n' + - 'fstream_type = %s\n' + - 'fstream_path = %s\n' + - 'fstream_unc_path = %s\n' + - 'fstream_class = %s\n' + - 'fstream_stack =\n%s\n', - code || 'UNKNOWN', - er.stack, - er.path, - er.syscall, - er.fstream_type, - er.fstream_path, - er.fstream_unc_path, - er.fstream_class, - er.fstream_stack.join('\n')) - } else { - self.emit('warn', er) - } -} - -Abstract.prototype.info = function (msg, code) { - this.emit('info', msg, code) -} - -Abstract.prototype.error = function (msg, code, th) { - var er = decorate(msg, code, this) - if (th) throw er - else this.emit('error', er) -} - -function decorate (er, code, self) { - if (!(er instanceof Error)) er = new Error(er) - er.code = er.code || code - er.path = er.path || self.path - er.fstream_type = er.fstream_type || self.type - er.fstream_path = er.fstream_path || self.path - if (self._path !== self.path) { - er.fstream_unc_path = er.fstream_unc_path || self._path - } - if (self.linkpath) { - er.fstream_linkpath = er.fstream_linkpath || self.linkpath - } - er.fstream_class = er.fstream_class || self.constructor.name - er.fstream_stack = er.fstream_stack || - new Error().stack.split(/\n/).slice(3).map(function (s) { - return s.replace(/^ {4}at /, '') - }) - - return er -} diff --git a/truebit-implementation/node_modules/fstream/lib/collect.js b/truebit-implementation/node_modules/fstream/lib/collect.js deleted file mode 100644 index e5d4f358..00000000 --- a/truebit-implementation/node_modules/fstream/lib/collect.js +++ /dev/null @@ -1,70 +0,0 @@ -module.exports = collect - -function collect (stream) { - if (stream._collected) return - - if (stream._paused) return stream.on('resume', collect.bind(null, stream)) - - stream._collected = true - stream.pause() - - stream.on('data', save) - stream.on('end', save) - var buf = [] - function save (b) { - if (typeof b === 'string') b = new Buffer(b) - if (Buffer.isBuffer(b) && !b.length) return - buf.push(b) - } - - stream.on('entry', saveEntry) - var entryBuffer = [] - function saveEntry (e) { - collect(e) - entryBuffer.push(e) - } - - stream.on('proxy', proxyPause) - function proxyPause (p) { - p.pause() - } - - // replace the pipe method with a new version that will - // unlock the buffered stuff. if you just call .pipe() - // without a destination, then it'll re-play the events. - stream.pipe = (function (orig) { - return function (dest) { - // console.error(' === open the pipes', dest && dest.path) - - // let the entries flow through one at a time. - // Once they're all done, then we can resume completely. - var e = 0 - ;(function unblockEntry () { - var entry = entryBuffer[e++] - // console.error(" ==== unblock entry", entry && entry.path) - if (!entry) return resume() - entry.on('end', unblockEntry) - if (dest) dest.add(entry) - else stream.emit('entry', entry) - })() - - function resume () { - stream.removeListener('entry', saveEntry) - stream.removeListener('data', save) - stream.removeListener('end', save) - - stream.pipe = orig - if (dest) stream.pipe(dest) - - buf.forEach(function (b) { - if (b) stream.emit('data', b) - else stream.emit('end') - }) - - stream.resume() - } - - return dest - } - })(stream.pipe) -} diff --git a/truebit-implementation/node_modules/fstream/lib/dir-reader.js b/truebit-implementation/node_modules/fstream/lib/dir-reader.js deleted file mode 100644 index 820cdc85..00000000 --- a/truebit-implementation/node_modules/fstream/lib/dir-reader.js +++ /dev/null @@ -1,252 +0,0 @@ -// A thing that emits "entry" events with Reader objects -// Pausing it causes it to stop emitting entry events, and also -// pauses the current entry if there is one. - -module.exports = DirReader - -var fs = require('graceful-fs') -var inherits = require('inherits') -var path = require('path') -var Reader = require('./reader.js') -var assert = require('assert').ok - -inherits(DirReader, Reader) - -function DirReader (props) { - var self = this - if (!(self instanceof DirReader)) { - throw new Error('DirReader must be called as constructor.') - } - - // should already be established as a Directory type - if (props.type !== 'Directory' || !props.Directory) { - throw new Error('Non-directory type ' + props.type) - } - - self.entries = null - self._index = -1 - self._paused = false - self._length = -1 - - if (props.sort) { - this.sort = props.sort - } - - Reader.call(this, props) -} - -DirReader.prototype._getEntries = function () { - var self = this - - // race condition. might pause() before calling _getEntries, - // and then resume, and try to get them a second time. - if (self._gotEntries) return - self._gotEntries = true - - fs.readdir(self._path, function (er, entries) { - if (er) return self.error(er) - - self.entries = entries - - self.emit('entries', entries) - if (self._paused) self.once('resume', processEntries) - else processEntries() - - function processEntries () { - self._length = self.entries.length - if (typeof self.sort === 'function') { - self.entries = self.entries.sort(self.sort.bind(self)) - } - self._read() - } - }) -} - -// start walking the dir, and emit an "entry" event for each one. -DirReader.prototype._read = function () { - var self = this - - if (!self.entries) return self._getEntries() - - if (self._paused || self._currentEntry || self._aborted) { - // console.error('DR paused=%j, current=%j, aborted=%j', self._paused, !!self._currentEntry, self._aborted) - return - } - - self._index++ - if (self._index >= self.entries.length) { - if (!self._ended) { - self._ended = true - self.emit('end') - self.emit('close') - } - return - } - - // ok, handle this one, then. - - // save creating a proxy, by stat'ing the thing now. - var p = path.resolve(self._path, self.entries[self._index]) - assert(p !== self._path) - assert(self.entries[self._index]) - - // set this to prevent trying to _read() again in the stat time. - self._currentEntry = p - fs[ self.props.follow ? 'stat' : 'lstat' ](p, function (er, stat) { - if (er) return self.error(er) - - var who = self._proxy || self - - stat.path = p - stat.basename = path.basename(p) - stat.dirname = path.dirname(p) - var childProps = self.getChildProps.call(who, stat) - childProps.path = p - childProps.basename = path.basename(p) - childProps.dirname = path.dirname(p) - - var entry = Reader(childProps, stat) - - // console.error("DR Entry", p, stat.size) - - self._currentEntry = entry - - // "entry" events are for direct entries in a specific dir. - // "child" events are for any and all children at all levels. - // This nomenclature is not completely final. - - entry.on('pause', function (who) { - if (!self._paused && !entry._disowned) { - self.pause(who) - } - }) - - entry.on('resume', function (who) { - if (self._paused && !entry._disowned) { - self.resume(who) - } - }) - - entry.on('stat', function (props) { - self.emit('_entryStat', entry, props) - if (entry._aborted) return - if (entry._paused) { - entry.once('resume', function () { - self.emit('entryStat', entry, props) - }) - } else self.emit('entryStat', entry, props) - }) - - entry.on('ready', function EMITCHILD () { - // console.error("DR emit child", entry._path) - if (self._paused) { - // console.error(" DR emit child - try again later") - // pause the child, and emit the "entry" event once we drain. - // console.error("DR pausing child entry") - entry.pause(self) - return self.once('resume', EMITCHILD) - } - - // skip over sockets. they can't be piped around properly, - // so there's really no sense even acknowledging them. - // if someone really wants to see them, they can listen to - // the "socket" events. - if (entry.type === 'Socket') { - self.emit('socket', entry) - } else { - self.emitEntry(entry) - } - }) - - var ended = false - entry.on('close', onend) - entry.on('disown', onend) - function onend () { - if (ended) return - ended = true - self.emit('childEnd', entry) - self.emit('entryEnd', entry) - self._currentEntry = null - if (!self._paused) { - self._read() - } - } - - // XXX Remove this. Works in node as of 0.6.2 or so. - // Long filenames should not break stuff. - entry.on('error', function (er) { - if (entry._swallowErrors) { - self.warn(er) - entry.emit('end') - entry.emit('close') - } else { - self.emit('error', er) - } - }) - - // proxy up some events. - ;[ - 'child', - 'childEnd', - 'warn' - ].forEach(function (ev) { - entry.on(ev, self.emit.bind(self, ev)) - }) - }) -} - -DirReader.prototype.disown = function (entry) { - entry.emit('beforeDisown') - entry._disowned = true - entry.parent = entry.root = null - if (entry === this._currentEntry) { - this._currentEntry = null - } - entry.emit('disown') -} - -DirReader.prototype.getChildProps = function () { - return { - depth: this.depth + 1, - root: this.root || this, - parent: this, - follow: this.follow, - filter: this.filter, - sort: this.props.sort, - hardlinks: this.props.hardlinks - } -} - -DirReader.prototype.pause = function (who) { - var self = this - if (self._paused) return - who = who || self - self._paused = true - if (self._currentEntry && self._currentEntry.pause) { - self._currentEntry.pause(who) - } - self.emit('pause', who) -} - -DirReader.prototype.resume = function (who) { - var self = this - if (!self._paused) return - who = who || self - - self._paused = false - // console.error('DR Emit Resume', self._path) - self.emit('resume', who) - if (self._paused) { - // console.error('DR Re-paused', self._path) - return - } - - if (self._currentEntry) { - if (self._currentEntry.resume) self._currentEntry.resume(who) - } else self._read() -} - -DirReader.prototype.emitEntry = function (entry) { - this.emit('entry', entry) - this.emit('child', entry) -} diff --git a/truebit-implementation/node_modules/fstream/lib/dir-writer.js b/truebit-implementation/node_modules/fstream/lib/dir-writer.js deleted file mode 100644 index ec50dca9..00000000 --- a/truebit-implementation/node_modules/fstream/lib/dir-writer.js +++ /dev/null @@ -1,174 +0,0 @@ -// It is expected that, when .add() returns false, the consumer -// of the DirWriter will pause until a "drain" event occurs. Note -// that this is *almost always going to be the case*, unless the -// thing being written is some sort of unsupported type, and thus -// skipped over. - -module.exports = DirWriter - -var Writer = require('./writer.js') -var inherits = require('inherits') -var mkdir = require('mkdirp') -var path = require('path') -var collect = require('./collect.js') - -inherits(DirWriter, Writer) - -function DirWriter (props) { - var self = this - if (!(self instanceof DirWriter)) { - self.error('DirWriter must be called as constructor.', null, true) - } - - // should already be established as a Directory type - if (props.type !== 'Directory' || !props.Directory) { - self.error('Non-directory type ' + props.type + ' ' + - JSON.stringify(props), null, true) - } - - Writer.call(this, props) -} - -DirWriter.prototype._create = function () { - var self = this - mkdir(self._path, Writer.dirmode, function (er) { - if (er) return self.error(er) - // ready to start getting entries! - self.ready = true - self.emit('ready') - self._process() - }) -} - -// a DirWriter has an add(entry) method, but its .write() doesn't -// do anything. Why a no-op rather than a throw? Because this -// leaves open the door for writing directory metadata for -// gnu/solaris style dumpdirs. -DirWriter.prototype.write = function () { - return true -} - -DirWriter.prototype.end = function () { - this._ended = true - this._process() -} - -DirWriter.prototype.add = function (entry) { - var self = this - - // console.error('\tadd', entry._path, '->', self._path) - collect(entry) - if (!self.ready || self._currentEntry) { - self._buffer.push(entry) - return false - } - - // create a new writer, and pipe the incoming entry into it. - if (self._ended) { - return self.error('add after end') - } - - self._buffer.push(entry) - self._process() - - return this._buffer.length === 0 -} - -DirWriter.prototype._process = function () { - var self = this - - // console.error('DW Process p=%j', self._processing, self.basename) - - if (self._processing) return - - var entry = self._buffer.shift() - if (!entry) { - // console.error("DW Drain") - self.emit('drain') - if (self._ended) self._finish() - return - } - - self._processing = true - // console.error("DW Entry", entry._path) - - self.emit('entry', entry) - - // ok, add this entry - // - // don't allow recursive copying - var p = entry - var pp - do { - pp = p._path || p.path - if (pp === self.root._path || pp === self._path || - (pp && pp.indexOf(self._path) === 0)) { - // console.error('DW Exit (recursive)', entry.basename, self._path) - self._processing = false - if (entry._collected) entry.pipe() - return self._process() - } - p = p.parent - } while (p) - - // console.error("DW not recursive") - - // chop off the entry's root dir, replace with ours - var props = { - parent: self, - root: self.root || self, - type: entry.type, - depth: self.depth + 1 - } - - pp = entry._path || entry.path || entry.props.path - if (entry.parent) { - pp = pp.substr(entry.parent._path.length + 1) - } - // get rid of any ../../ shenanigans - props.path = path.join(self.path, path.join('/', pp)) - - // if i have a filter, the child should inherit it. - props.filter = self.filter - - // all the rest of the stuff, copy over from the source. - Object.keys(entry.props).forEach(function (k) { - if (!props.hasOwnProperty(k)) { - props[k] = entry.props[k] - } - }) - - // not sure at this point what kind of writer this is. - var child = self._currentChild = new Writer(props) - child.on('ready', function () { - // console.error("DW Child Ready", child.type, child._path) - // console.error(" resuming", entry._path) - entry.pipe(child) - entry.resume() - }) - - // XXX Make this work in node. - // Long filenames should not break stuff. - child.on('error', function (er) { - if (child._swallowErrors) { - self.warn(er) - child.emit('end') - child.emit('close') - } else { - self.emit('error', er) - } - }) - - // we fire _end internally *after* end, so that we don't move on - // until any "end" listeners have had their chance to do stuff. - child.on('close', onend) - var ended = false - function onend () { - if (ended) return - ended = true - // console.error("* DW Child end", child.basename) - self._currentChild = null - self._processing = false - self._process() - } -} diff --git a/truebit-implementation/node_modules/fstream/lib/file-reader.js b/truebit-implementation/node_modules/fstream/lib/file-reader.js deleted file mode 100644 index baa01f4b..00000000 --- a/truebit-implementation/node_modules/fstream/lib/file-reader.js +++ /dev/null @@ -1,150 +0,0 @@ -// Basically just a wrapper around an fs.ReadStream - -module.exports = FileReader - -var fs = require('graceful-fs') -var inherits = require('inherits') -var Reader = require('./reader.js') -var EOF = {EOF: true} -var CLOSE = {CLOSE: true} - -inherits(FileReader, Reader) - -function FileReader (props) { - // console.error(" FR create", props.path, props.size, new Error().stack) - var self = this - if (!(self instanceof FileReader)) { - throw new Error('FileReader must be called as constructor.') - } - - // should already be established as a File type - // XXX Todo: preserve hardlinks by tracking dev+inode+nlink, - // with a HardLinkReader class. - if (!((props.type === 'Link' && props.Link) || - (props.type === 'File' && props.File))) { - throw new Error('Non-file type ' + props.type) - } - - self._buffer = [] - self._bytesEmitted = 0 - Reader.call(self, props) -} - -FileReader.prototype._getStream = function () { - var self = this - var stream = self._stream = fs.createReadStream(self._path, self.props) - - if (self.props.blksize) { - stream.bufferSize = self.props.blksize - } - - stream.on('open', self.emit.bind(self, 'open')) - - stream.on('data', function (c) { - // console.error('\t\t%d %s', c.length, self.basename) - self._bytesEmitted += c.length - // no point saving empty chunks - if (!c.length) { - return - } else if (self._paused || self._buffer.length) { - self._buffer.push(c) - self._read() - } else self.emit('data', c) - }) - - stream.on('end', function () { - if (self._paused || self._buffer.length) { - // console.error('FR Buffering End', self._path) - self._buffer.push(EOF) - self._read() - } else { - self.emit('end') - } - - if (self._bytesEmitted !== self.props.size) { - self.error("Didn't get expected byte count\n" + - 'expect: ' + self.props.size + '\n' + - 'actual: ' + self._bytesEmitted) - } - }) - - stream.on('close', function () { - if (self._paused || self._buffer.length) { - // console.error('FR Buffering Close', self._path) - self._buffer.push(CLOSE) - self._read() - } else { - // console.error('FR close 1', self._path) - self.emit('close') - } - }) - - stream.on('error', function (e) { - self.emit('error', e) - }) - - self._read() -} - -FileReader.prototype._read = function () { - var self = this - // console.error('FR _read', self._path) - if (self._paused) { - // console.error('FR _read paused', self._path) - return - } - - if (!self._stream) { - // console.error('FR _getStream calling', self._path) - return self._getStream() - } - - // clear out the buffer, if there is one. - if (self._buffer.length) { - // console.error('FR _read has buffer', self._buffer.length, self._path) - var buf = self._buffer - for (var i = 0, l = buf.length; i < l; i++) { - var c = buf[i] - if (c === EOF) { - // console.error('FR Read emitting buffered end', self._path) - self.emit('end') - } else if (c === CLOSE) { - // console.error('FR Read emitting buffered close', self._path) - self.emit('close') - } else { - // console.error('FR Read emitting buffered data', self._path) - self.emit('data', c) - } - - if (self._paused) { - // console.error('FR Read Re-pausing at '+i, self._path) - self._buffer = buf.slice(i) - return - } - } - self._buffer.length = 0 - } -// console.error("FR _read done") -// that's about all there is to it. -} - -FileReader.prototype.pause = function (who) { - var self = this - // console.error('FR Pause', self._path) - if (self._paused) return - who = who || self - self._paused = true - if (self._stream) self._stream.pause() - self.emit('pause', who) -} - -FileReader.prototype.resume = function (who) { - var self = this - // console.error('FR Resume', self._path) - if (!self._paused) return - who = who || self - self.emit('resume', who) - self._paused = false - if (self._stream) self._stream.resume() - self._read() -} diff --git a/truebit-implementation/node_modules/fstream/lib/file-writer.js b/truebit-implementation/node_modules/fstream/lib/file-writer.js deleted file mode 100644 index 4c803d8d..00000000 --- a/truebit-implementation/node_modules/fstream/lib/file-writer.js +++ /dev/null @@ -1,107 +0,0 @@ -module.exports = FileWriter - -var fs = require('graceful-fs') -var Writer = require('./writer.js') -var inherits = require('inherits') -var EOF = {} - -inherits(FileWriter, Writer) - -function FileWriter (props) { - var self = this - if (!(self instanceof FileWriter)) { - throw new Error('FileWriter must be called as constructor.') - } - - // should already be established as a File type - if (props.type !== 'File' || !props.File) { - throw new Error('Non-file type ' + props.type) - } - - self._buffer = [] - self._bytesWritten = 0 - - Writer.call(this, props) -} - -FileWriter.prototype._create = function () { - var self = this - if (self._stream) return - - var so = {} - if (self.props.flags) so.flags = self.props.flags - so.mode = Writer.filemode - if (self._old && self._old.blksize) so.bufferSize = self._old.blksize - - self._stream = fs.createWriteStream(self._path, so) - - self._stream.on('open', function () { - // console.error("FW open", self._buffer, self._path) - self.ready = true - self._buffer.forEach(function (c) { - if (c === EOF) self._stream.end() - else self._stream.write(c) - }) - self.emit('ready') - // give this a kick just in case it needs it. - self.emit('drain') - }) - - self._stream.on('error', function (er) { self.emit('error', er) }) - - self._stream.on('drain', function () { self.emit('drain') }) - - self._stream.on('close', function () { - // console.error('\n\nFW Stream Close', self._path, self.size) - self._finish() - }) -} - -FileWriter.prototype.write = function (c) { - var self = this - - self._bytesWritten += c.length - - if (!self.ready) { - if (!Buffer.isBuffer(c) && typeof c !== 'string') { - throw new Error('invalid write data') - } - self._buffer.push(c) - return false - } - - var ret = self._stream.write(c) - // console.error('\t-- fw wrote, _stream says', ret, self._stream._queue.length) - - // allow 2 buffered writes, because otherwise there's just too - // much stop and go bs. - if (ret === false && self._stream._queue) { - return self._stream._queue.length <= 2 - } else { - return ret - } -} - -FileWriter.prototype.end = function (c) { - var self = this - - if (c) self.write(c) - - if (!self.ready) { - self._buffer.push(EOF) - return false - } - - return self._stream.end() -} - -FileWriter.prototype._finish = function () { - var self = this - if (typeof self.size === 'number' && self._bytesWritten !== self.size) { - self.error( - 'Did not get expected byte count.\n' + - 'expect: ' + self.size + '\n' + - 'actual: ' + self._bytesWritten) - } - Writer.prototype._finish.call(self) -} diff --git a/truebit-implementation/node_modules/fstream/lib/get-type.js b/truebit-implementation/node_modules/fstream/lib/get-type.js deleted file mode 100644 index 19f6a657..00000000 --- a/truebit-implementation/node_modules/fstream/lib/get-type.js +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = getType - -function getType (st) { - var types = [ - 'Directory', - 'File', - 'SymbolicLink', - 'Link', // special for hardlinks from tarballs - 'BlockDevice', - 'CharacterDevice', - 'FIFO', - 'Socket' - ] - var type - - if (st.type && types.indexOf(st.type) !== -1) { - st[st.type] = true - return st.type - } - - for (var i = 0, l = types.length; i < l; i++) { - type = types[i] - var is = st[type] || st['is' + type] - if (typeof is === 'function') is = is.call(st) - if (is) { - st[type] = true - st.type = type - return type - } - } - - return null -} diff --git a/truebit-implementation/node_modules/fstream/lib/link-reader.js b/truebit-implementation/node_modules/fstream/lib/link-reader.js deleted file mode 100644 index fb4cc67a..00000000 --- a/truebit-implementation/node_modules/fstream/lib/link-reader.js +++ /dev/null @@ -1,53 +0,0 @@ -// Basically just a wrapper around an fs.readlink -// -// XXX: Enhance this to support the Link type, by keeping -// a lookup table of {:}, so that hardlinks -// can be preserved in tarballs. - -module.exports = LinkReader - -var fs = require('graceful-fs') -var inherits = require('inherits') -var Reader = require('./reader.js') - -inherits(LinkReader, Reader) - -function LinkReader (props) { - var self = this - if (!(self instanceof LinkReader)) { - throw new Error('LinkReader must be called as constructor.') - } - - if (!((props.type === 'Link' && props.Link) || - (props.type === 'SymbolicLink' && props.SymbolicLink))) { - throw new Error('Non-link type ' + props.type) - } - - Reader.call(self, props) -} - -// When piping a LinkReader into a LinkWriter, we have to -// already have the linkpath property set, so that has to -// happen *before* the "ready" event, which means we need to -// override the _stat method. -LinkReader.prototype._stat = function (currentStat) { - var self = this - fs.readlink(self._path, function (er, linkpath) { - if (er) return self.error(er) - self.linkpath = self.props.linkpath = linkpath - self.emit('linkpath', linkpath) - Reader.prototype._stat.call(self, currentStat) - }) -} - -LinkReader.prototype._read = function () { - var self = this - if (self._paused) return - // basically just a no-op, since we got all the info we need - // from the _stat method - if (!self._ended) { - self.emit('end') - self.emit('close') - self._ended = true - } -} diff --git a/truebit-implementation/node_modules/fstream/lib/link-writer.js b/truebit-implementation/node_modules/fstream/lib/link-writer.js deleted file mode 100644 index af542840..00000000 --- a/truebit-implementation/node_modules/fstream/lib/link-writer.js +++ /dev/null @@ -1,95 +0,0 @@ -module.exports = LinkWriter - -var fs = require('graceful-fs') -var Writer = require('./writer.js') -var inherits = require('inherits') -var path = require('path') -var rimraf = require('rimraf') - -inherits(LinkWriter, Writer) - -function LinkWriter (props) { - var self = this - if (!(self instanceof LinkWriter)) { - throw new Error('LinkWriter must be called as constructor.') - } - - // should already be established as a Link type - if (!((props.type === 'Link' && props.Link) || - (props.type === 'SymbolicLink' && props.SymbolicLink))) { - throw new Error('Non-link type ' + props.type) - } - - if (props.linkpath === '') props.linkpath = '.' - if (!props.linkpath) { - self.error('Need linkpath property to create ' + props.type) - } - - Writer.call(this, props) -} - -LinkWriter.prototype._create = function () { - // console.error(" LW _create") - var self = this - var hard = self.type === 'Link' || process.platform === 'win32' - var link = hard ? 'link' : 'symlink' - var lp = hard ? path.resolve(self.dirname, self.linkpath) : self.linkpath - - // can only change the link path by clobbering - // For hard links, let's just assume that's always the case, since - // there's no good way to read them if we don't already know. - if (hard) return clobber(self, lp, link) - - fs.readlink(self._path, function (er, p) { - // only skip creation if it's exactly the same link - if (p && p === lp) return finish(self) - clobber(self, lp, link) - }) -} - -function clobber (self, lp, link) { - rimraf(self._path, function (er) { - if (er) return self.error(er) - create(self, lp, link) - }) -} - -function create (self, lp, link) { - fs[link](lp, self._path, function (er) { - // if this is a hard link, and we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier in. - // Additionally, an EPERM or EACCES can happen on win32 if it's trying - // to make a link to a directory. Again, just skip it. - // A better solution would be to have fs.symlink be supported on - // windows in some nice fashion. - if (er) { - if ((er.code === 'ENOENT' || - er.code === 'EACCES' || - er.code === 'EPERM') && process.platform === 'win32') { - self.ready = true - self.emit('ready') - self.emit('end') - self.emit('close') - self.end = self._finish = function () {} - } else return self.error(er) - } - finish(self) - }) -} - -function finish (self) { - self.ready = true - self.emit('ready') - if (self._ended && !self._finished) self._finish() -} - -LinkWriter.prototype.end = function () { - // console.error("LW finish in end") - this._ended = true - if (this.ready) { - this._finished = true - this._finish() - } -} diff --git a/truebit-implementation/node_modules/fstream/lib/proxy-reader.js b/truebit-implementation/node_modules/fstream/lib/proxy-reader.js deleted file mode 100644 index 4f431c9d..00000000 --- a/truebit-implementation/node_modules/fstream/lib/proxy-reader.js +++ /dev/null @@ -1,95 +0,0 @@ -// A reader for when we don't yet know what kind of thing -// the thing is. - -module.exports = ProxyReader - -var Reader = require('./reader.js') -var getType = require('./get-type.js') -var inherits = require('inherits') -var fs = require('graceful-fs') - -inherits(ProxyReader, Reader) - -function ProxyReader (props) { - var self = this - if (!(self instanceof ProxyReader)) { - throw new Error('ProxyReader must be called as constructor.') - } - - self.props = props - self._buffer = [] - self.ready = false - - Reader.call(self, props) -} - -ProxyReader.prototype._stat = function () { - var self = this - var props = self.props - // stat the thing to see what the proxy should be. - var stat = props.follow ? 'stat' : 'lstat' - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = 'File' - } else { - type = getType(current) - } - - props[type] = true - props.type = self.type = type - - self._old = current - self._addProxy(Reader(props, current)) - }) -} - -ProxyReader.prototype._addProxy = function (proxy) { - var self = this - if (self._proxyTarget) { - return self.error('proxy already set') - } - - self._proxyTarget = proxy - proxy._proxy = self - - ;[ - 'error', - 'data', - 'end', - 'close', - 'linkpath', - 'entry', - 'entryEnd', - 'child', - 'childEnd', - 'warn', - 'stat' - ].forEach(function (ev) { - // console.error('~~ proxy event', ev, self.path) - proxy.on(ev, self.emit.bind(self, ev)) - }) - - self.emit('proxy', proxy) - - proxy.on('ready', function () { - // console.error("~~ proxy is ready!", self.path) - self.ready = true - self.emit('ready') - }) - - var calls = self._buffer - self._buffer.length = 0 - calls.forEach(function (c) { - proxy[c[0]].apply(proxy, c[1]) - }) -} - -ProxyReader.prototype.pause = function () { - return this._proxyTarget ? this._proxyTarget.pause() : false -} - -ProxyReader.prototype.resume = function () { - return this._proxyTarget ? this._proxyTarget.resume() : false -} diff --git a/truebit-implementation/node_modules/fstream/lib/proxy-writer.js b/truebit-implementation/node_modules/fstream/lib/proxy-writer.js deleted file mode 100644 index a6544621..00000000 --- a/truebit-implementation/node_modules/fstream/lib/proxy-writer.js +++ /dev/null @@ -1,111 +0,0 @@ -// A writer for when we don't know what kind of thing -// the thing is. That is, it's not explicitly set, -// so we're going to make it whatever the thing already -// is, or "File" -// -// Until then, collect all events. - -module.exports = ProxyWriter - -var Writer = require('./writer.js') -var getType = require('./get-type.js') -var inherits = require('inherits') -var collect = require('./collect.js') -var fs = require('fs') - -inherits(ProxyWriter, Writer) - -function ProxyWriter (props) { - var self = this - if (!(self instanceof ProxyWriter)) { - throw new Error('ProxyWriter must be called as constructor.') - } - - self.props = props - self._needDrain = false - - Writer.call(self, props) -} - -ProxyWriter.prototype._stat = function () { - var self = this - var props = self.props - // stat the thing to see what the proxy should be. - var stat = props.follow ? 'stat' : 'lstat' - - fs[stat](props.path, function (er, current) { - var type - if (er || !current) { - type = 'File' - } else { - type = getType(current) - } - - props[type] = true - props.type = self.type = type - - self._old = current - self._addProxy(Writer(props, current)) - }) -} - -ProxyWriter.prototype._addProxy = function (proxy) { - // console.error("~~ set proxy", this.path) - var self = this - if (self._proxy) { - return self.error('proxy already set') - } - - self._proxy = proxy - ;[ - 'ready', - 'error', - 'close', - 'pipe', - 'drain', - 'warn' - ].forEach(function (ev) { - proxy.on(ev, self.emit.bind(self, ev)) - }) - - self.emit('proxy', proxy) - - var calls = self._buffer - calls.forEach(function (c) { - // console.error("~~ ~~ proxy buffered call", c[0], c[1]) - proxy[c[0]].apply(proxy, c[1]) - }) - self._buffer.length = 0 - if (self._needsDrain) self.emit('drain') -} - -ProxyWriter.prototype.add = function (entry) { - // console.error("~~ proxy add") - collect(entry) - - if (!this._proxy) { - this._buffer.push(['add', [entry]]) - this._needDrain = true - return false - } - return this._proxy.add(entry) -} - -ProxyWriter.prototype.write = function (c) { - // console.error('~~ proxy write') - if (!this._proxy) { - this._buffer.push(['write', [c]]) - this._needDrain = true - return false - } - return this._proxy.write(c) -} - -ProxyWriter.prototype.end = function (c) { - // console.error('~~ proxy end') - if (!this._proxy) { - this._buffer.push(['end', [c]]) - return false - } - return this._proxy.end(c) -} diff --git a/truebit-implementation/node_modules/fstream/lib/reader.js b/truebit-implementation/node_modules/fstream/lib/reader.js deleted file mode 100644 index be4f570e..00000000 --- a/truebit-implementation/node_modules/fstream/lib/reader.js +++ /dev/null @@ -1,255 +0,0 @@ -module.exports = Reader - -var fs = require('graceful-fs') -var Stream = require('stream').Stream -var inherits = require('inherits') -var path = require('path') -var getType = require('./get-type.js') -var hardLinks = Reader.hardLinks = {} -var Abstract = require('./abstract.js') - -// Must do this *before* loading the child classes -inherits(Reader, Abstract) - -var LinkReader = require('./link-reader.js') - -function Reader (props, currentStat) { - var self = this - if (!(self instanceof Reader)) return new Reader(props, currentStat) - - if (typeof props === 'string') { - props = { path: props } - } - - // polymorphism. - // call fstream.Reader(dir) to get a DirReader object, etc. - // Note that, unlike in the Writer case, ProxyReader is going - // to be the *normal* state of affairs, since we rarely know - // the type of a file prior to reading it. - - var type - var ClassType - - if (props.type && typeof props.type === 'function') { - type = props.type - ClassType = type - } else { - type = getType(props) - ClassType = Reader - } - - if (currentStat && !type) { - type = getType(currentStat) - props[type] = true - props.type = type - } - - switch (type) { - case 'Directory': - ClassType = require('./dir-reader.js') - break - - case 'Link': - // XXX hard links are just files. - // However, it would be good to keep track of files' dev+inode - // and nlink values, and create a HardLinkReader that emits - // a linkpath value of the original copy, so that the tar - // writer can preserve them. - // ClassType = HardLinkReader - // break - - case 'File': - ClassType = require('./file-reader.js') - break - - case 'SymbolicLink': - ClassType = LinkReader - break - - case 'Socket': - ClassType = require('./socket-reader.js') - break - - case null: - ClassType = require('./proxy-reader.js') - break - } - - if (!(self instanceof ClassType)) { - return new ClassType(props) - } - - Abstract.call(self) - - if (!props.path) { - self.error('Must provide a path', null, true) - } - - self.readable = true - self.writable = false - - self.type = type - self.props = props - self.depth = props.depth = props.depth || 0 - self.parent = props.parent || null - self.root = props.root || (props.parent && props.parent.root) || self - - self._path = self.path = path.resolve(props.path) - if (process.platform === 'win32') { - self.path = self._path = self.path.replace(/\?/g, '_') - if (self._path.length >= 260) { - // how DOES one create files on the moon? - // if the path has spaces in it, then UNC will fail. - self._swallowErrors = true - // if (self._path.indexOf(" ") === -1) { - self._path = '\\\\?\\' + self.path.replace(/\//g, '\\') - // } - } - } - self.basename = props.basename = path.basename(self.path) - self.dirname = props.dirname = path.dirname(self.path) - - // these have served their purpose, and are now just noisy clutter - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - self.size = props.size - self.filter = typeof props.filter === 'function' ? props.filter : null - if (props.sort === 'alpha') props.sort = alphasort - - // start the ball rolling. - // this will stat the thing, and then call self._read() - // to start reading whatever it is. - // console.error("calling stat", props.path, currentStat) - self._stat(currentStat) -} - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - -Reader.prototype._stat = function (currentStat) { - var self = this - var props = self.props - var stat = props.follow ? 'stat' : 'lstat' - // console.error("Reader._stat", self._path, currentStat) - if (currentStat) process.nextTick(statCb.bind(null, null, currentStat)) - else fs[stat](self._path, statCb) - - function statCb (er, props_) { - // console.error("Reader._stat, statCb", self._path, props_, props_.nlink) - if (er) return self.error(er) - - Object.keys(props_).forEach(function (k) { - props[k] = props_[k] - }) - - // if it's not the expected size, then abort here. - if (undefined !== self.size && props.size !== self.size) { - return self.error('incorrect size') - } - self.size = props.size - - var type = getType(props) - var handleHardlinks = props.hardlinks !== false - - // special little thing for handling hardlinks. - if (handleHardlinks && type !== 'Directory' && props.nlink && props.nlink > 1) { - var k = props.dev + ':' + props.ino - // console.error("Reader has nlink", self._path, k) - if (hardLinks[k] === self._path || !hardLinks[k]) { - hardLinks[k] = self._path - } else { - // switch into hardlink mode. - type = self.type = self.props.type = 'Link' - self.Link = self.props.Link = true - self.linkpath = self.props.linkpath = hardLinks[k] - // console.error("Hardlink detected, switching mode", self._path, self.linkpath) - // Setting __proto__ would arguably be the "correct" - // approach here, but that just seems too wrong. - self._stat = self._read = LinkReader.prototype._read - } - } - - if (self.type && self.type !== type) { - self.error('Unexpected type: ' + type) - } - - // if the filter doesn't pass, then just skip over this one. - // still have to emit end so that dir-walking can move on. - if (self.filter) { - var who = self._proxy || self - // special handling for ProxyReaders - if (!self.filter.call(who, who, props)) { - if (!self._disowned) { - self.abort() - self.emit('end') - self.emit('close') - } - return - } - } - - // last chance to abort or disown before the flow starts! - var events = ['_stat', 'stat', 'ready'] - var e = 0 - ;(function go () { - if (self._aborted) { - self.emit('end') - self.emit('close') - return - } - - if (self._paused && self.type !== 'Directory') { - self.once('resume', go) - return - } - - var ev = events[e++] - if (!ev) { - return self._read() - } - self.emit(ev, props) - go() - })() - } -} - -Reader.prototype.pipe = function (dest) { - var self = this - if (typeof dest.add === 'function') { - // piping to a multi-compatible, and we've got directory entries. - self.on('entry', function (entry) { - var ret = dest.add(entry) - if (ret === false) { - self.pause() - } - }) - } - - // console.error("R Pipe apply Stream Pipe") - return Stream.prototype.pipe.apply(this, arguments) -} - -Reader.prototype.pause = function (who) { - this._paused = true - who = who || this - this.emit('pause', who) - if (this._stream) this._stream.pause(who) -} - -Reader.prototype.resume = function (who) { - this._paused = false - who = who || this - this.emit('resume', who) - if (this._stream) this._stream.resume(who) - this._read() -} - -Reader.prototype._read = function () { - this.error('Cannot read unknown type: ' + this.type) -} diff --git a/truebit-implementation/node_modules/fstream/lib/socket-reader.js b/truebit-implementation/node_modules/fstream/lib/socket-reader.js deleted file mode 100644 index e0456ba8..00000000 --- a/truebit-implementation/node_modules/fstream/lib/socket-reader.js +++ /dev/null @@ -1,36 +0,0 @@ -// Just get the stats, and then don't do anything. -// You can't really "read" from a socket. You "connect" to it. -// Mostly, this is here so that reading a dir with a socket in it -// doesn't blow up. - -module.exports = SocketReader - -var inherits = require('inherits') -var Reader = require('./reader.js') - -inherits(SocketReader, Reader) - -function SocketReader (props) { - var self = this - if (!(self instanceof SocketReader)) { - throw new Error('SocketReader must be called as constructor.') - } - - if (!(props.type === 'Socket' && props.Socket)) { - throw new Error('Non-socket type ' + props.type) - } - - Reader.call(self, props) -} - -SocketReader.prototype._read = function () { - var self = this - if (self._paused) return - // basically just a no-op, since we got all the info we have - // from the _stat method - if (!self._ended) { - self.emit('end') - self.emit('close') - self._ended = true - } -} diff --git a/truebit-implementation/node_modules/fstream/lib/writer.js b/truebit-implementation/node_modules/fstream/lib/writer.js deleted file mode 100644 index 140e449e..00000000 --- a/truebit-implementation/node_modules/fstream/lib/writer.js +++ /dev/null @@ -1,390 +0,0 @@ -module.exports = Writer - -var fs = require('graceful-fs') -var inherits = require('inherits') -var rimraf = require('rimraf') -var mkdir = require('mkdirp') -var path = require('path') -var umask = process.platform === 'win32' ? 0 : process.umask() -var getType = require('./get-type.js') -var Abstract = require('./abstract.js') - -// Must do this *before* loading the child classes -inherits(Writer, Abstract) - -Writer.dirmode = parseInt('0777', 8) & (~umask) -Writer.filemode = parseInt('0666', 8) & (~umask) - -var DirWriter = require('./dir-writer.js') -var LinkWriter = require('./link-writer.js') -var FileWriter = require('./file-writer.js') -var ProxyWriter = require('./proxy-writer.js') - -// props is the desired state. current is optionally the current stat, -// provided here so that subclasses can avoid statting the target -// more than necessary. -function Writer (props, current) { - var self = this - - if (typeof props === 'string') { - props = { path: props } - } - - // polymorphism. - // call fstream.Writer(dir) to get a DirWriter object, etc. - var type = getType(props) - var ClassType = Writer - - switch (type) { - case 'Directory': - ClassType = DirWriter - break - case 'File': - ClassType = FileWriter - break - case 'Link': - case 'SymbolicLink': - ClassType = LinkWriter - break - case null: - default: - // Don't know yet what type to create, so we wrap in a proxy. - ClassType = ProxyWriter - break - } - - if (!(self instanceof ClassType)) return new ClassType(props) - - // now get down to business. - - Abstract.call(self) - - if (!props.path) self.error('Must provide a path', null, true) - - // props is what we want to set. - // set some convenience properties as well. - self.type = props.type - self.props = props - self.depth = props.depth || 0 - self.clobber = props.clobber === false ? props.clobber : true - self.parent = props.parent || null - self.root = props.root || (props.parent && props.parent.root) || self - - self._path = self.path = path.resolve(props.path) - if (process.platform === 'win32') { - self.path = self._path = self.path.replace(/\?/g, '_') - if (self._path.length >= 260) { - self._swallowErrors = true - self._path = '\\\\?\\' + self.path.replace(/\//g, '\\') - } - } - self.basename = path.basename(props.path) - self.dirname = path.dirname(props.path) - self.linkpath = props.linkpath || null - - props.parent = props.root = null - - // console.error("\n\n\n%s setting size to", props.path, props.size) - self.size = props.size - - if (typeof props.mode === 'string') { - props.mode = parseInt(props.mode, 8) - } - - self.readable = false - self.writable = true - - // buffer until ready, or while handling another entry - self._buffer = [] - self.ready = false - - self.filter = typeof props.filter === 'function' ? props.filter : null - - // start the ball rolling. - // this checks what's there already, and then calls - // self._create() to call the impl-specific creation stuff. - self._stat(current) -} - -// Calling this means that it's something we can't create. -// Just assert that it's already there, otherwise raise a warning. -Writer.prototype._create = function () { - var self = this - fs[self.props.follow ? 'stat' : 'lstat'](self._path, function (er) { - if (er) { - return self.warn('Cannot create ' + self._path + '\n' + - 'Unsupported type: ' + self.type, 'ENOTSUP') - } - self._finish() - }) -} - -Writer.prototype._stat = function (current) { - var self = this - var props = self.props - var stat = props.follow ? 'stat' : 'lstat' - var who = self._proxy || self - - if (current) statCb(null, current) - else fs[stat](self._path, statCb) - - function statCb (er, current) { - if (self.filter && !self.filter.call(who, who, current)) { - self._aborted = true - self.emit('end') - self.emit('close') - return - } - - // if it's not there, great. We'll just create it. - // if it is there, then we'll need to change whatever differs - if (er || !current) { - return create(self) - } - - self._old = current - var currentType = getType(current) - - // if it's a type change, then we need to clobber or error. - // if it's not a type change, then let the impl take care of it. - if (currentType !== self.type) { - return rimraf(self._path, function (er) { - if (er) return self.error(er) - self._old = null - create(self) - }) - } - - // otherwise, just handle in the app-specific way - // this creates a fs.WriteStream, or mkdir's, or whatever - create(self) - } -} - -function create (self) { - // console.error("W create", self._path, Writer.dirmode) - - // XXX Need to clobber non-dirs that are in the way, - // unless { clobber: false } in the props. - mkdir(path.dirname(self._path), Writer.dirmode, function (er, made) { - // console.error("W created", path.dirname(self._path), er) - if (er) return self.error(er) - - // later on, we have to set the mode and owner for these - self._madeDir = made - return self._create() - }) -} - -function endChmod (self, want, current, path, cb) { - var wantMode = want.mode - var chmod = want.follow || self.type !== 'SymbolicLink' - ? 'chmod' : 'lchmod' - - if (!fs[chmod]) return cb() - if (typeof wantMode !== 'number') return cb() - - var curMode = current.mode & parseInt('0777', 8) - wantMode = wantMode & parseInt('0777', 8) - if (wantMode === curMode) return cb() - - fs[chmod](path, wantMode, cb) -} - -function endChown (self, want, current, path, cb) { - // Don't even try it unless root. Too easy to EPERM. - if (process.platform === 'win32') return cb() - if (!process.getuid || process.getuid() !== 0) return cb() - if (typeof want.uid !== 'number' && - typeof want.gid !== 'number') return cb() - - if (current.uid === want.uid && - current.gid === want.gid) return cb() - - var chown = (self.props.follow || self.type !== 'SymbolicLink') - ? 'chown' : 'lchown' - if (!fs[chown]) return cb() - - if (typeof want.uid !== 'number') want.uid = current.uid - if (typeof want.gid !== 'number') want.gid = current.gid - - fs[chown](path, want.uid, want.gid, cb) -} - -function endUtimes (self, want, current, path, cb) { - if (!fs.utimes || process.platform === 'win32') return cb() - - var utimes = (want.follow || self.type !== 'SymbolicLink') - ? 'utimes' : 'lutimes' - - if (utimes === 'lutimes' && !fs[utimes]) { - utimes = 'utimes' - } - - if (!fs[utimes]) return cb() - - var curA = current.atime - var curM = current.mtime - var meA = want.atime - var meM = want.mtime - - if (meA === undefined) meA = curA - if (meM === undefined) meM = curM - - if (!isDate(meA)) meA = new Date(meA) - if (!isDate(meM)) meA = new Date(meM) - - if (meA.getTime() === curA.getTime() && - meM.getTime() === curM.getTime()) return cb() - - fs[utimes](path, meA, meM, cb) -} - -// XXX This function is beastly. Break it up! -Writer.prototype._finish = function () { - var self = this - - if (self._finishing) return - self._finishing = true - - // console.error(" W Finish", self._path, self.size) - - // set up all the things. - // At this point, we're already done writing whatever we've gotta write, - // adding files to the dir, etc. - var todo = 0 - var errState = null - var done = false - - if (self._old) { - // the times will almost *certainly* have changed. - // adds the utimes syscall, but remove another stat. - self._old.atime = new Date(0) - self._old.mtime = new Date(0) - // console.error(" W Finish Stale Stat", self._path, self.size) - setProps(self._old) - } else { - var stat = self.props.follow ? 'stat' : 'lstat' - // console.error(" W Finish Stating", self._path, self.size) - fs[stat](self._path, function (er, current) { - // console.error(" W Finish Stated", self._path, self.size, current) - if (er) { - // if we're in the process of writing out a - // directory, it's very possible that the thing we're linking to - // doesn't exist yet (especially if it was intended as a symlink), - // so swallow ENOENT errors here and just soldier on. - if (er.code === 'ENOENT' && - (self.type === 'Link' || self.type === 'SymbolicLink') && - process.platform === 'win32') { - self.ready = true - self.emit('ready') - self.emit('end') - self.emit('close') - self.end = self._finish = function () {} - return - } else return self.error(er) - } - setProps(self._old = current) - }) - } - - return - - function setProps (current) { - todo += 3 - endChmod(self, self.props, current, self._path, next('chmod')) - endChown(self, self.props, current, self._path, next('chown')) - endUtimes(self, self.props, current, self._path, next('utimes')) - } - - function next (what) { - return function (er) { - // console.error(" W Finish", what, todo) - if (errState) return - if (er) { - er.fstream_finish_call = what - return self.error(errState = er) - } - if (--todo > 0) return - if (done) return - done = true - - // we may still need to set the mode/etc. on some parent dirs - // that were created previously. delay end/close until then. - if (!self._madeDir) return end() - else endMadeDir(self, self._path, end) - - function end (er) { - if (er) { - er.fstream_finish_call = 'setupMadeDir' - return self.error(er) - } - // all the props have been set, so we're completely done. - self.emit('end') - self.emit('close') - } - } - } -} - -function endMadeDir (self, p, cb) { - var made = self._madeDir - // everything *between* made and path.dirname(self._path) - // needs to be set up. Note that this may just be one dir. - var d = path.dirname(p) - - endMadeDir_(self, d, function (er) { - if (er) return cb(er) - if (d === made) { - return cb() - } - endMadeDir(self, d, cb) - }) -} - -function endMadeDir_ (self, p, cb) { - var dirProps = {} - Object.keys(self.props).forEach(function (k) { - dirProps[k] = self.props[k] - - // only make non-readable dirs if explicitly requested. - if (k === 'mode' && self.type !== 'Directory') { - dirProps[k] = dirProps[k] | parseInt('0111', 8) - } - }) - - var todo = 3 - var errState = null - fs.stat(p, function (er, current) { - if (er) return cb(errState = er) - endChmod(self, dirProps, current, p, next) - endChown(self, dirProps, current, p, next) - endUtimes(self, dirProps, current, p, next) - }) - - function next (er) { - if (errState) return - if (er) return cb(errState = er) - if (--todo === 0) return cb() - } -} - -Writer.prototype.pipe = function () { - this.error("Can't pipe from writable stream") -} - -Writer.prototype.add = function () { - this.error("Can't add to non-Directory type") -} - -Writer.prototype.write = function () { - return true -} - -function objectToString (d) { - return Object.prototype.toString.call(d) -} - -function isDate (d) { - return typeof d === 'object' && objectToString(d) === '[object Date]' -} diff --git a/truebit-implementation/node_modules/fstream/package.json b/truebit-implementation/node_modules/fstream/package.json deleted file mode 100644 index 5cdb532c..00000000 --- a/truebit-implementation/node_modules/fstream/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "fstream@^1.0.8", - "_id": "fstream@1.0.11", - "_inBundle": false, - "_integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "_location": "/fstream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "fstream@^1.0.8", - "name": "fstream", - "escapedName": "fstream", - "rawSpec": "^1.0.8", - "saveSpec": null, - "fetchSpec": "^1.0.8" - }, - "_requiredBy": [ - "/tar", - "/tar.gz" - ], - "_resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "_shasum": "5c1fb1f117477114f0632a0eb4b71b3cb0fd3171", - "_spec": "fstream@^1.0.8", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar.gz", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/npm/fstream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "deprecated": false, - "description": "Advanced file system stream things", - "devDependencies": { - "standard": "^4.0.0", - "tap": "^1.2.0" - }, - "engines": { - "node": ">=0.6" - }, - "homepage": "https://github.com/npm/fstream#readme", - "license": "ISC", - "main": "fstream.js", - "name": "fstream", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/fstream.git" - }, - "scripts": { - "test": "standard && tap examples/*.js" - }, - "version": "1.0.11" -} diff --git a/truebit-implementation/node_modules/get-stream/buffer-stream.js b/truebit-implementation/node_modules/get-stream/buffer-stream.js deleted file mode 100644 index ae45d3d9..00000000 --- a/truebit-implementation/node_modules/get-stream/buffer-stream.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; -const PassThrough = require('stream').PassThrough; - -module.exports = opts => { - opts = Object.assign({}, opts); - - const array = opts.array; - let encoding = opts.encoding; - const buffer = encoding === 'buffer'; - let objectMode = false; - - if (array) { - objectMode = !(encoding || buffer); - } else { - encoding = encoding || 'utf8'; - } - - if (buffer) { - encoding = null; - } - - let len = 0; - const ret = []; - const stream = new PassThrough({objectMode}); - - if (encoding) { - stream.setEncoding(encoding); - } - - stream.on('data', chunk => { - ret.push(chunk); - - if (objectMode) { - len = ret.length; - } else { - len += chunk.length; - } - }); - - stream.getBufferedValue = () => { - if (array) { - return ret; - } - - return buffer ? Buffer.concat(ret, len) : ret.join(''); - }; - - stream.getBufferedLength = () => len; - - return stream; -}; diff --git a/truebit-implementation/node_modules/get-stream/index.js b/truebit-implementation/node_modules/get-stream/index.js deleted file mode 100644 index 2dc5ee96..00000000 --- a/truebit-implementation/node_modules/get-stream/index.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; -const bufferStream = require('./buffer-stream'); - -function getStream(inputStream, opts) { - if (!inputStream) { - return Promise.reject(new Error('Expected a stream')); - } - - opts = Object.assign({maxBuffer: Infinity}, opts); - - const maxBuffer = opts.maxBuffer; - let stream; - let clean; - - const p = new Promise((resolve, reject) => { - const error = err => { - if (err) { // null check - err.bufferedData = stream.getBufferedValue(); - } - - reject(err); - }; - - stream = bufferStream(opts); - inputStream.once('error', error); - inputStream.pipe(stream); - - stream.on('data', () => { - if (stream.getBufferedLength() > maxBuffer) { - reject(new Error('maxBuffer exceeded')); - } - }); - stream.once('error', error); - stream.on('end', resolve); - - clean = () => { - // some streams doesn't implement the `stream.Readable` interface correctly - if (inputStream.unpipe) { - inputStream.unpipe(stream); - } - }; - }); - - p.then(clean, clean); - - return p.then(() => stream.getBufferedValue()); -} - -module.exports = getStream; -module.exports.buffer = (stream, opts) => getStream(stream, Object.assign({}, opts, {encoding: 'buffer'})); -module.exports.array = (stream, opts) => getStream(stream, Object.assign({}, opts, {array: true})); diff --git a/truebit-implementation/node_modules/get-stream/license b/truebit-implementation/node_modules/get-stream/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/get-stream/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/get-stream/package.json b/truebit-implementation/node_modules/get-stream/package.json deleted file mode 100644 index 70bce8bd..00000000 --- a/truebit-implementation/node_modules/get-stream/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_from": "get-stream@^3.0.0", - "_id": "get-stream@3.0.0", - "_inBundle": false, - "_integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "_location": "/get-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "get-stream@^3.0.0", - "name": "get-stream", - "escapedName": "get-stream", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "_shasum": "8e943d1358dc37555054ecbe2edb05aa174ede14", - "_spec": "get-stream@^3.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/get-stream/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Get a stream as a string, buffer, or array", - "devDependencies": { - "ava": "*", - "into-stream": "^3.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js", - "buffer-stream.js" - ], - "homepage": "https://github.com/sindresorhus/get-stream#readme", - "keywords": [ - "get", - "stream", - "promise", - "concat", - "string", - "str", - "text", - "buffer", - "read", - "data", - "consume", - "readable", - "readablestream", - "array", - "object", - "obj" - ], - "license": "MIT", - "name": "get-stream", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/get-stream.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "3.0.0", - "xo": { - "esnext": true - } -} diff --git a/truebit-implementation/node_modules/get-stream/readme.md b/truebit-implementation/node_modules/get-stream/readme.md deleted file mode 100644 index 73b188fb..00000000 --- a/truebit-implementation/node_modules/get-stream/readme.md +++ /dev/null @@ -1,117 +0,0 @@ -# get-stream [![Build Status](https://travis-ci.org/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/get-stream) - -> Get a stream as a string, buffer, or array - - -## Install - -``` -$ npm install --save get-stream -``` - - -## Usage - -```js -const fs = require('fs'); -const getStream = require('get-stream'); -const stream = fs.createReadStream('unicorn.txt'); - -getStream(stream).then(str => { - console.log(str); - /* - ,,))))))));, - __)))))))))))))), - \|/ -\(((((''''((((((((. - -*-==//////(('' . `)))))), - /|\ ))| o ;-. '((((( ,(, - ( `| / ) ;))))' ,_))^;(~ - | | | ,))((((_ _____------~~~-. %,;(;(>';'~ - o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ - ; ''''```` `: `:::|\,__,%% );`'; ~ - | _ ) / `:|`----' `-' - ______/\/~ | / / - /~;;.____/;;' / ___--,-( `;;;/ - / // _;______;'------~~~~~ /;;/\ / - // | | / ; \;;,\ - (<_ | ; /',/-----' _> - \_| ||_ //~;~~~~~~~~~ - `\_| (,~~ - \~\ - ~~ - */ -}); -``` - - -## API - -The methods returns a promise that resolves when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. - -### getStream(stream, [options]) - -Get the `stream` as a string. - -#### options - -##### encoding - -Type: `string`
-Default: `utf8` - -[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. - -##### maxBuffer - -Type: `number`
-Default: `Infinity` - -Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected. - -### getStream.buffer(stream, [options]) - -Get the `stream` as a buffer. - -It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. - -### getStream.array(stream, [options]) - -Get the `stream` as an array of values. - -It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: - -- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). - -- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. - -- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. - - -## Errors - -If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error. - -```js -getStream(streamThatErrorsAtTheEnd('unicorn')) - .catch(err => { - console.log(err.bufferedData); - //=> 'unicorn' - }); -``` - - -## FAQ - -### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)? - -This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package. - - -## Related - -- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/getpass/.npmignore b/truebit-implementation/node_modules/getpass/.npmignore deleted file mode 100644 index a4261fc0..00000000 --- a/truebit-implementation/node_modules/getpass/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -.gitmodules -deps -docs -Makefile -node_modules -test -tools -coverage diff --git a/truebit-implementation/node_modules/getpass/.travis.yml b/truebit-implementation/node_modules/getpass/.travis.yml deleted file mode 100644 index d8b5833a..00000000 --- a/truebit-implementation/node_modules/getpass/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -node_js: - - "5.10" - - "4.4" - - "4.1" - - "0.12" - - "0.10" -before_install: - - "make check" diff --git a/truebit-implementation/node_modules/getpass/LICENSE b/truebit-implementation/node_modules/getpass/LICENSE deleted file mode 100644 index f6d947d2..00000000 --- a/truebit-implementation/node_modules/getpass/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/getpass/README.md b/truebit-implementation/node_modules/getpass/README.md deleted file mode 100644 index 6e4a50f6..00000000 --- a/truebit-implementation/node_modules/getpass/README.md +++ /dev/null @@ -1,32 +0,0 @@ -## getpass - -Get a password from the terminal. Sounds simple? Sounds like the `readline` -module should be able to do it? NOPE. - -## Install and use it - -```bash -npm install --save getpass -``` - -```javascript -const mod_getpass = require('getpass'); -``` - -## API - -### `mod_getpass.getPass([options, ]callback)` - -Gets a password from the terminal. If available, this uses `/dev/tty` to avoid -interfering with any data being piped in or out of stdio. - -This function prints a prompt (by default `Password:`) and then accepts input -without echoing. - -Parameters: - - * `options`, an Object, with properties: - * `prompt`, an optional String - * `callback`, a `Func(error, password)`, with arguments: - * `error`, either `null` (no error) or an `Error` instance - * `password`, a String diff --git a/truebit-implementation/node_modules/getpass/lib/index.js b/truebit-implementation/node_modules/getpass/lib/index.js deleted file mode 100644 index 55a7718c..00000000 --- a/truebit-implementation/node_modules/getpass/lib/index.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2016, Joyent, Inc. All rights reserved. - * Author: Alex Wilson - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * 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. -*/ - -module.exports = { - getPass: getPass -}; - -const mod_tty = require('tty'); -const mod_fs = require('fs'); -const mod_assert = require('assert-plus'); - -var BACKSPACE = String.fromCharCode(127); -var CTRLC = '\u0003'; -var CTRLD = '\u0004'; - -function getPass(opts, cb) { - if (typeof (opts) === 'function' && cb === undefined) { - cb = opts; - opts = {}; - } - mod_assert.object(opts, 'options'); - mod_assert.func(cb, 'callback'); - - mod_assert.optionalString(opts.prompt, 'options.prompt'); - if (opts.prompt === undefined) - opts.prompt = 'Password'; - - openTTY(function (err, rfd, wfd, rtty, wtty) { - if (err) { - cb(err); - return; - } - - wtty.write(opts.prompt + ':'); - rtty.resume(); - rtty.setRawMode(true); - rtty.resume(); - rtty.setEncoding('utf8'); - - var pw = ''; - rtty.on('data', onData); - - function onData(data) { - var str = data.toString('utf8'); - for (var i = 0; i < str.length; ++i) { - var ch = str[i]; - switch (ch) { - case '\r': - case '\n': - case CTRLD: - cleanup(); - cb(null, pw); - return; - case CTRLC: - cleanup(); - cb(new Error('Aborted')); - return; - case BACKSPACE: - pw = pw.slice(0, pw.length - 1); - break; - default: - pw += ch; - break; - } - } - } - - function cleanup() { - wtty.write('\r\n'); - rtty.setRawMode(false); - rtty.pause(); - rtty.removeListener('data', onData); - if (wfd !== undefined && wfd !== rfd) { - wtty.end(); - mod_fs.closeSync(wfd); - } - if (rfd !== undefined) { - rtty.end(); - mod_fs.closeSync(rfd); - } - } - }); -} - -function openTTY(cb) { - mod_fs.open('/dev/tty', 'r+', function (err, rttyfd) { - if ((err && (err.code === 'ENOENT' || err.code === 'EACCES')) || - (process.version.match(/^v0[.][0-8][.]/))) { - cb(null, undefined, undefined, process.stdin, - process.stdout); - return; - } - var rtty = new mod_tty.ReadStream(rttyfd); - mod_fs.open('/dev/tty', 'w+', function (err3, wttyfd) { - var wtty = new mod_tty.WriteStream(wttyfd); - if (err3) { - cb(err3); - return; - } - cb(null, rttyfd, wttyfd, rtty, wtty); - }); - }); -} diff --git a/truebit-implementation/node_modules/getpass/package.json b/truebit-implementation/node_modules/getpass/package.json deleted file mode 100644 index fb914013..00000000 --- a/truebit-implementation/node_modules/getpass/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_from": "getpass@^0.1.1", - "_id": "getpass@0.1.7", - "_inBundle": false, - "_integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "_location": "/getpass", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "getpass@^0.1.1", - "name": "getpass", - "escapedName": "getpass", - "rawSpec": "^0.1.1", - "saveSpec": null, - "fetchSpec": "^0.1.1" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "_shasum": "5eff8e3e684d569ae4cb2b1282604e8ba62149fa", - "_spec": "getpass@^0.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/sshpk", - "author": { - "name": "Alex Wilson", - "email": "alex.wilson@joyent.com" - }, - "bugs": { - "url": "https://github.com/arekinath/node-getpass/issues" - }, - "bundleDependencies": false, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "deprecated": false, - "description": "getpass for node.js", - "homepage": "https://github.com/arekinath/node-getpass#readme", - "license": "MIT", - "main": "lib/index.js", - "name": "getpass", - "repository": { - "type": "git", - "url": "git+https://github.com/arekinath/node-getpass.git" - }, - "scripts": { - "test": "tape test/*.test.js" - }, - "version": "0.1.7" -} diff --git a/truebit-implementation/node_modules/glob/LICENSE b/truebit-implementation/node_modules/glob/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/truebit-implementation/node_modules/glob/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/glob/README.md b/truebit-implementation/node_modules/glob/README.md deleted file mode 100644 index baa1d1ba..00000000 --- a/truebit-implementation/node_modules/glob/README.md +++ /dev/null @@ -1,368 +0,0 @@ -# Glob - -Match files using the patterns the shell uses, like stars and stuff. - -[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) - -This is a glob implementation in JavaScript. It uses the `minimatch` -library to do its matching. - -![](oh-my-glob.gif) - -## Usage - -Install with npm - -``` -npm i glob -``` - -```javascript -var glob = require("glob") - -// options is optional -glob("**/*.js", options, function (er, files) { - // files is an array of filenames. - // If the `nonull` option is set, and nothing - // was found, then files is ["**/*.js"] - // er is an error object or null. -}) -``` - -## Glob Primer - -"Globs" are the patterns you type when you do stuff like `ls *.js` on -the command line, or put `build/*` in a `.gitignore` file. - -Before parsing the path part patterns, braced sections are expanded -into a set. Braced sections start with `{` and end with `}`, with any -number of comma-delimited sections within. Braced sections may contain -slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. - -The following characters have special magic meaning when used in a -path portion: - -* `*` Matches 0 or more characters in a single path portion -* `?` Matches 1 character -* `[...]` Matches a range of characters, similar to a RegExp range. - If the first character of the range is `!` or `^` then it matches - any character not in the range. -* `!(pattern|pattern|pattern)` Matches anything that does not match - any of the patterns provided. -* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the - patterns provided. -* `+(pattern|pattern|pattern)` Matches one or more occurrences of the - patterns provided. -* `*(a|b|c)` Matches zero or more occurrences of the patterns provided -* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns - provided -* `**` If a "globstar" is alone in a path portion, then it matches - zero or more directories and subdirectories searching for matches. - It does not crawl symlinked directories. - -### Dots - -If a file or directory path portion has a `.` as the first character, -then it will not match any glob pattern unless that pattern's -corresponding path part also has a `.` as its first character. - -For example, the pattern `a/.*/c` would match the file at `a/.b/c`. -However the pattern `a/*/c` would not, because `*` does not start with -a dot character. - -You can make glob treat dots as normal characters by setting -`dot:true` in the options. - -### Basename Matching - -If you set `matchBase:true` in the options, and the pattern has no -slashes in it, then it will seek for any file anywhere in the tree -with a matching basename. For example, `*.js` would match -`test/simple/basic.js`. - -### Empty Sets - -If no matching files are found, then an empty array is returned. This -differs from the shell, where the pattern itself is returned. For -example: - - $ echo a*s*d*f - a*s*d*f - -To get the bash-style behavior, set the `nonull:true` in the options. - -### See Also: - -* `man sh` -* `man bash` (Search for "Pattern Matching") -* `man 3 fnmatch` -* `man 5 gitignore` -* [minimatch documentation](https://github.com/isaacs/minimatch) - -## glob.hasMagic(pattern, [options]) - -Returns `true` if there are any special characters in the pattern, and -`false` otherwise. - -Note that the options affect the results. If `noext:true` is set in -the options object, then `+(a|b)` will not be considered a magic -pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` -then that is considered magical, unless `nobrace:true` is set in the -options. - -## glob(pattern, [options], cb) - -* `pattern` `{String}` Pattern to be matched -* `options` `{Object}` -* `cb` `{Function}` - * `err` `{Error | null}` - * `matches` `{Array}` filenames found matching the pattern - -Perform an asynchronous glob search. - -## glob.sync(pattern, [options]) - -* `pattern` `{String}` Pattern to be matched -* `options` `{Object}` -* return: `{Array}` filenames found matching the pattern - -Perform a synchronous glob search. - -## Class: glob.Glob - -Create a Glob object by instantiating the `glob.Glob` class. - -```javascript -var Glob = require("glob").Glob -var mg = new Glob(pattern, options, cb) -``` - -It's an EventEmitter, and starts walking the filesystem to find matches -immediately. - -### new glob.Glob(pattern, [options], [cb]) - -* `pattern` `{String}` pattern to search for -* `options` `{Object}` -* `cb` `{Function}` Called when an error occurs, or matches are found - * `err` `{Error | null}` - * `matches` `{Array}` filenames found matching the pattern - -Note that if the `sync` flag is set in the options, then matches will -be immediately available on the `g.found` member. - -### Properties - -* `minimatch` The minimatch object that the glob uses. -* `options` The options object passed in. -* `aborted` Boolean which is set to true when calling `abort()`. There - is no way at this time to continue a glob search after aborting, but - you can re-use the statCache to avoid having to duplicate syscalls. -* `cache` Convenience object. Each field has the following possible - values: - * `false` - Path does not exist - * `true` - Path exists - * `'FILE'` - Path exists, and is not a directory - * `'DIR'` - Path exists, and is a directory - * `[file, entries, ...]` - Path exists, is a directory, and the - array value is the results of `fs.readdir` -* `statCache` Cache of `fs.stat` results, to prevent statting the same - path multiple times. -* `symlinks` A record of which paths are symbolic links, which is - relevant in resolving `**` patterns. -* `realpathCache` An optional object which is passed to `fs.realpath` - to minimize unnecessary syscalls. It is stored on the instantiated - Glob object, and may be re-used. - -### Events - -* `end` When the matching is finished, this is emitted with all the - matches found. If the `nonull` option is set, and no match was found, - then the `matches` list contains the original pattern. The matches - are sorted, unless the `nosort` flag is set. -* `match` Every time a match is found, this is emitted with the specific - thing that matched. It is not deduplicated or resolved to a realpath. -* `error` Emitted when an unexpected error is encountered, or whenever - any fs error occurs if `options.strict` is set. -* `abort` When `abort()` is called, this event is raised. - -### Methods - -* `pause` Temporarily stop the search -* `resume` Resume the search -* `abort` Stop the search forever - -### Options - -All the options that can be passed to Minimatch can also be passed to -Glob to change pattern matching behavior. Also, some have been added, -or have glob-specific ramifications. - -All options are false by default, unless otherwise noted. - -All options are added to the Glob object, as well. - -If you are running many `glob` operations, you can pass a Glob object -as the `options` argument to a subsequent operation to shortcut some -`stat` and `readdir` calls. At the very least, you may pass in shared -`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that -parallel glob operations will be sped up by sharing information about -the filesystem. - -* `cwd` The current working directory in which to search. Defaults - to `process.cwd()`. -* `root` The place where patterns starting with `/` will be mounted - onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix - systems, and `C:\` or some such on Windows.) -* `dot` Include `.dot` files in normal matches and `globstar` matches. - Note that an explicit dot in a portion of the pattern will always - match dot files. -* `nomount` By default, a pattern starting with a forward-slash will be - "mounted" onto the root setting, so that a valid filesystem path is - returned. Set this flag to disable that behavior. -* `mark` Add a `/` character to directory matches. Note that this - requires additional stat calls. -* `nosort` Don't sort the results. -* `stat` Set to true to stat *all* results. This reduces performance - somewhat, and is completely unnecessary, unless `readdir` is presumed - to be an untrustworthy indicator of file existence. -* `silent` When an unusual error is encountered when attempting to - read a directory, a warning will be printed to stderr. Set the - `silent` option to true to suppress these warnings. -* `strict` When an unusual error is encountered when attempting to - read a directory, the process will just continue on in search of - other matches. Set the `strict` option to raise an error in these - cases. -* `cache` See `cache` property above. Pass in a previously generated - cache object to save some fs calls. -* `statCache` A cache of results of filesystem information, to prevent - unnecessary stat calls. While it should not normally be necessary - to set this, you may pass the statCache from one glob() call to the - options object of another, if you know that the filesystem will not - change between calls. (See "Race Conditions" below.) -* `symlinks` A cache of known symbolic links. You may pass in a - previously generated `symlinks` object to save `lstat` calls when - resolving `**` matches. -* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. -* `nounique` In some cases, brace-expanded patterns can result in the - same file showing up multiple times in the result set. By default, - this implementation prevents duplicates in the result set. Set this - flag to disable that behavior. -* `nonull` Set to never return an empty set, instead returning a set - containing the pattern itself. This is the default in glob(3). -* `debug` Set to enable debug logging in minimatch and glob. -* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. -* `noglobstar` Do not match `**` against multiple filenames. (Ie, - treat it as a normal `*` instead.) -* `noext` Do not match `+(a|b)` "extglob" patterns. -* `nocase` Perform a case-insensitive match. Note: on - case-insensitive filesystems, non-magic patterns will match by - default, since `stat` and `readdir` will not raise errors. -* `matchBase` Perform a basename-only match if the pattern does not - contain any slash characters. That is, `*.js` would be treated as - equivalent to `**/*.js`, matching all js files in all directories. -* `nodir` Do not match directories, only files. (Note: to match - *only* directories, simply put a `/` at the end of the pattern.) -* `ignore` Add a pattern or an array of glob patterns to exclude matches. - Note: `ignore` patterns are *always* in `dot:true` mode, regardless - of any other settings. -* `follow` Follow symlinked directories when expanding `**` patterns. - Note that this can result in a lot of duplicate references in the - presence of cyclic links. -* `realpath` Set to true to call `fs.realpath` on all of the results. - In the case of a symlink that cannot be resolved, the full absolute - path to the matched entry is returned (though it will usually be a - broken symlink) -* `absolute` Set to true to always receive absolute paths for matched - files. Unlike `realpath`, this also affects the values returned in - the `match` event. - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between node-glob and other -implementations, and are intentional. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.3, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -Note that symlinked directories are not crawled as part of a `**`, -though their contents may match against subsequent portions of the -pattern. This prevents infinite loops and duplicates and the like. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then glob returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - -### Comments and Negation - -Previously, this module let you mark a pattern as a "comment" if it -started with a `#` character, or a "negated" pattern if it started -with a `!` character. - -These options were deprecated in version 5, and removed in version 6. - -To specify things that should not match, use the `ignore` option. - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only `/` -characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes will always -be interpreted as escape characters, not path separators. - -Results from absolute patterns such as `/foo/*` are mounted onto the -root setting using `path.join`. On windows, this will by default result -in `/foo/*` matching `C:\foo\bar.txt`. - -## Race Conditions - -Glob searching, by its very nature, is susceptible to race conditions, -since it relies on directory walking and such. - -As a result, it is possible that a file that exists when glob looks for -it may have been deleted or modified by the time it returns the result. - -As part of its internal implementation, this program caches all stat -and readdir calls that it makes, in order to cut down on system -overhead. However, this also makes it even more susceptible to races, -especially if the cache or statCache objects are reused between glob -calls. - -Users are thus advised not to use a glob result as a guarantee of -filesystem state in the face of rapid changes. For the vast majority -of operations, this is never a problem. - -## Contributing - -Any change to behavior (including bugfixes) must come with a test. - -Patches that fail tests or reduce performance will be rejected. - -``` -# to run tests -npm test - -# to re-generate test fixtures -npm run test-regen - -# to benchmark against bash/zsh -npm run bench - -# to profile javascript -npm run prof -``` diff --git a/truebit-implementation/node_modules/glob/changelog.md b/truebit-implementation/node_modules/glob/changelog.md deleted file mode 100644 index 41636771..00000000 --- a/truebit-implementation/node_modules/glob/changelog.md +++ /dev/null @@ -1,67 +0,0 @@ -## 7.0 - -- Raise error if `options.cwd` is specified, and not a directory - -## 6.0 - -- Remove comment and negation pattern support -- Ignore patterns are always in `dot:true` mode - -## 5.0 - -- Deprecate comment and negation patterns -- Fix regression in `mark` and `nodir` options from making all cache - keys absolute path. -- Abort if `fs.readdir` returns an error that's unexpected -- Don't emit `match` events for ignored items -- Treat ENOTSUP like ENOTDIR in readdir - -## 4.5 - -- Add `options.follow` to always follow directory symlinks in globstar -- Add `options.realpath` to call `fs.realpath` on all results -- Always cache based on absolute path - -## 4.4 - -- Add `options.ignore` -- Fix handling of broken symlinks - -## 4.3 - -- Bump minimatch to 2.x -- Pass all tests on Windows - -## 4.2 - -- Add `glob.hasMagic` function -- Add `options.nodir` flag - -## 4.1 - -- Refactor sync and async implementations for performance -- Throw if callback provided to sync glob function -- Treat symbolic links in globstar results the same as Bash 4.3 - -## 4.0 - -- Use `^` for dependency versions (bumped major because this breaks - older npm versions) -- Ensure callbacks are only ever called once -- switch to ISC license - -## 3.x - -- Rewrite in JavaScript -- Add support for setting root, cwd, and windows support -- Cache many fs calls -- Add globstar support -- emit match events - -## 2.x - -- Use `glob.h` and `fnmatch.h` from NetBSD - -## 1.x - -- `glob.h` static binding. diff --git a/truebit-implementation/node_modules/glob/common.js b/truebit-implementation/node_modules/glob/common.js deleted file mode 100644 index 66651bb3..00000000 --- a/truebit-implementation/node_modules/glob/common.js +++ /dev/null @@ -1,240 +0,0 @@ -exports.alphasort = alphasort -exports.alphasorti = alphasorti -exports.setopts = setopts -exports.ownProp = ownProp -exports.makeAbs = makeAbs -exports.finish = finish -exports.mark = mark -exports.isIgnored = isIgnored -exports.childrenIgnored = childrenIgnored - -function ownProp (obj, field) { - return Object.prototype.hasOwnProperty.call(obj, field) -} - -var path = require("path") -var minimatch = require("minimatch") -var isAbsolute = require("path-is-absolute") -var Minimatch = minimatch.Minimatch - -function alphasorti (a, b) { - return a.toLowerCase().localeCompare(b.toLowerCase()) -} - -function alphasort (a, b) { - return a.localeCompare(b) -} - -function setupIgnores (self, options) { - self.ignore = options.ignore || [] - - if (!Array.isArray(self.ignore)) - self.ignore = [self.ignore] - - if (self.ignore.length) { - self.ignore = self.ignore.map(ignoreMap) - } -} - -// ignore patterns are always in dot:true mode. -function ignoreMap (pattern) { - var gmatcher = null - if (pattern.slice(-3) === '/**') { - var gpattern = pattern.replace(/(\/\*\*)+$/, '') - gmatcher = new Minimatch(gpattern, { dot: true }) - } - - return { - matcher: new Minimatch(pattern, { dot: true }), - gmatcher: gmatcher - } -} - -function setopts (self, pattern, options) { - if (!options) - options = {} - - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern - } - - self.silent = !!options.silent - self.pattern = pattern - self.strict = options.strict !== false - self.realpath = !!options.realpath - self.realpathCache = options.realpathCache || Object.create(null) - self.follow = !!options.follow - self.dot = !!options.dot - self.mark = !!options.mark - self.nodir = !!options.nodir - if (self.nodir) - self.mark = true - self.sync = !!options.sync - self.nounique = !!options.nounique - self.nonull = !!options.nonull - self.nosort = !!options.nosort - self.nocase = !!options.nocase - self.stat = !!options.stat - self.noprocess = !!options.noprocess - self.absolute = !!options.absolute - - self.maxLength = options.maxLength || Infinity - self.cache = options.cache || Object.create(null) - self.statCache = options.statCache || Object.create(null) - self.symlinks = options.symlinks || Object.create(null) - - setupIgnores(self, options) - - self.changedCwd = false - var cwd = process.cwd() - if (!ownProp(options, "cwd")) - self.cwd = cwd - else { - self.cwd = path.resolve(options.cwd) - self.changedCwd = self.cwd !== cwd - } - - self.root = options.root || path.resolve(self.cwd, "/") - self.root = path.resolve(self.root) - if (process.platform === "win32") - self.root = self.root.replace(/\\/g, "/") - - // TODO: is an absolute `cwd` supposed to be resolved against `root`? - // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') - self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) - if (process.platform === "win32") - self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") - self.nomount = !!options.nomount - - // disable comments and negation in Minimatch. - // Note that they are not supported in Glob itself anyway. - options.nonegate = true - options.nocomment = true - - self.minimatch = new Minimatch(pattern, options) - self.options = self.minimatch.options -} - -function finish (self) { - var nou = self.nounique - var all = nou ? [] : Object.create(null) - - for (var i = 0, l = self.matches.length; i < l; i ++) { - var matches = self.matches[i] - if (!matches || Object.keys(matches).length === 0) { - if (self.nonull) { - // do like the shell, and spit out the literal glob - var literal = self.minimatch.globSet[i] - if (nou) - all.push(literal) - else - all[literal] = true - } - } else { - // had matches - var m = Object.keys(matches) - if (nou) - all.push.apply(all, m) - else - m.forEach(function (m) { - all[m] = true - }) - } - } - - if (!nou) - all = Object.keys(all) - - if (!self.nosort) - all = all.sort(self.nocase ? alphasorti : alphasort) - - // at *some* point we statted all of these - if (self.mark) { - for (var i = 0; i < all.length; i++) { - all[i] = self._mark(all[i]) - } - if (self.nodir) { - all = all.filter(function (e) { - var notDir = !(/\/$/.test(e)) - var c = self.cache[e] || self.cache[makeAbs(self, e)] - if (notDir && c) - notDir = c !== 'DIR' && !Array.isArray(c) - return notDir - }) - } - } - - if (self.ignore.length) - all = all.filter(function(m) { - return !isIgnored(self, m) - }) - - self.found = all -} - -function mark (self, p) { - var abs = makeAbs(self, p) - var c = self.cache[abs] - var m = p - if (c) { - var isDir = c === 'DIR' || Array.isArray(c) - var slash = p.slice(-1) === '/' - - if (isDir && !slash) - m += '/' - else if (!isDir && slash) - m = m.slice(0, -1) - - if (m !== p) { - var mabs = makeAbs(self, m) - self.statCache[mabs] = self.statCache[abs] - self.cache[mabs] = self.cache[abs] - } - } - - return m -} - -// lotta situps... -function makeAbs (self, f) { - var abs = f - if (f.charAt(0) === '/') { - abs = path.join(self.root, f) - } else if (isAbsolute(f) || f === '') { - abs = f - } else if (self.changedCwd) { - abs = path.resolve(self.cwd, f) - } else { - abs = path.resolve(f) - } - - if (process.platform === 'win32') - abs = abs.replace(/\\/g, '/') - - return abs -} - - -// Return true, if pattern ends with globstar '**', for the accompanying parent directory. -// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents -function isIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) - }) -} - -function childrenIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return !!(item.gmatcher && item.gmatcher.match(path)) - }) -} diff --git a/truebit-implementation/node_modules/glob/glob.js b/truebit-implementation/node_modules/glob/glob.js deleted file mode 100644 index 58dec0f6..00000000 --- a/truebit-implementation/node_modules/glob/glob.js +++ /dev/null @@ -1,790 +0,0 @@ -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern, false) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern, inGlobStar) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// -// If inGlobStar and PREFIX is symlink and points to dir -// set ENTRIES = [] -// else readdir(PREFIX) as ENTRIES -// If fail, END -// -// with ENTRIES -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// // Mark that this entry is a globstar match -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. - -module.exports = glob - -var fs = require('fs') -var rp = require('fs.realpath') -var minimatch = require('minimatch') -var Minimatch = minimatch.Minimatch -var inherits = require('inherits') -var EE = require('events').EventEmitter -var path = require('path') -var assert = require('assert') -var isAbsolute = require('path-is-absolute') -var globSync = require('./sync.js') -var common = require('./common.js') -var alphasort = common.alphasort -var alphasorti = common.alphasorti -var setopts = common.setopts -var ownProp = common.ownProp -var inflight = require('inflight') -var util = require('util') -var childrenIgnored = common.childrenIgnored -var isIgnored = common.isIgnored - -var once = require('once') - -function glob (pattern, options, cb) { - if (typeof options === 'function') cb = options, options = {} - if (!options) options = {} - - if (options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return globSync(pattern, options) - } - - return new Glob(pattern, options, cb) -} - -glob.sync = globSync -var GlobSync = glob.GlobSync = globSync.GlobSync - -// old api surface -glob.glob = glob - -function extend (origin, add) { - if (add === null || typeof add !== 'object') { - return origin - } - - var keys = Object.keys(add) - var i = keys.length - while (i--) { - origin[keys[i]] = add[keys[i]] - } - return origin -} - -glob.hasMagic = function (pattern, options_) { - var options = extend({}, options_) - options.noprocess = true - - var g = new Glob(pattern, options) - var set = g.minimatch.set - - if (!pattern) - return false - - if (set.length > 1) - return true - - for (var j = 0; j < set[0].length; j++) { - if (typeof set[0][j] !== 'string') - return true - } - - return false -} - -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (typeof options === 'function') { - cb = options - options = null - } - - if (options && options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return new GlobSync(pattern, options) - } - - if (!(this instanceof Glob)) - return new Glob(pattern, options, cb) - - setopts(this, pattern, options) - this._didRealPath = false - - // process each pattern in the minimatch set - var n = this.minimatch.set.length - - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) - - if (typeof cb === 'function') { - cb = once(cb) - this.on('error', cb) - this.on('end', function (matches) { - cb(null, matches) - }) - } - - var self = this - this._processing = 0 - - this._emitQueue = [] - this._processQueue = [] - this.paused = false - - if (this.noprocess) - return this - - if (n === 0) - return done() - - var sync = true - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false, done) - } - sync = false - - function done () { - --self._processing - if (self._processing <= 0) { - if (sync) { - process.nextTick(function () { - self._finish() - }) - } else { - self._finish() - } - } - } -} - -Glob.prototype._finish = function () { - assert(this instanceof Glob) - if (this.aborted) - return - - if (this.realpath && !this._didRealpath) - return this._realpath() - - common.finish(this) - this.emit('end', this.found) -} - -Glob.prototype._realpath = function () { - if (this._didRealpath) - return - - this._didRealpath = true - - var n = this.matches.length - if (n === 0) - return this._finish() - - var self = this - for (var i = 0; i < this.matches.length; i++) - this._realpathSet(i, next) - - function next () { - if (--n === 0) - self._finish() - } -} - -Glob.prototype._realpathSet = function (index, cb) { - var matchset = this.matches[index] - if (!matchset) - return cb() - - var found = Object.keys(matchset) - var self = this - var n = found.length - - if (n === 0) - return cb() - - var set = this.matches[index] = Object.create(null) - found.forEach(function (p, i) { - // If there's a problem with the stat, then it means that - // one or more of the links in the realpath couldn't be - // resolved. just return the abs value in that case. - p = self._makeAbs(p) - rp.realpath(p, self.realpathCache, function (er, real) { - if (!er) - set[real] = true - else if (er.syscall === 'stat') - set[p] = true - else - self.emit('error', er) // srsly wtf right here - - if (--n === 0) { - self.matches[index] = set - cb() - } - }) - }) -} - -Glob.prototype._mark = function (p) { - return common.mark(this, p) -} - -Glob.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} - -Glob.prototype.abort = function () { - this.aborted = true - this.emit('abort') -} - -Glob.prototype.pause = function () { - if (!this.paused) { - this.paused = true - this.emit('pause') - } -} - -Glob.prototype.resume = function () { - if (this.paused) { - this.emit('resume') - this.paused = false - if (this._emitQueue.length) { - var eq = this._emitQueue.slice(0) - this._emitQueue.length = 0 - for (var i = 0; i < eq.length; i ++) { - var e = eq[i] - this._emitMatch(e[0], e[1]) - } - } - if (this._processQueue.length) { - var pq = this._processQueue.slice(0) - this._processQueue.length = 0 - for (var i = 0; i < pq.length; i ++) { - var p = pq[i] - this._processing-- - this._process(p[0], p[1], p[2], p[3]) - } - } - } -} - -Glob.prototype._process = function (pattern, index, inGlobStar, cb) { - assert(this instanceof Glob) - assert(typeof cb === 'function') - - if (this.aborted) - return - - this._processing++ - if (this.paused) { - this._processQueue.push([pattern, index, inGlobStar, cb]) - return - } - - //console.error('PROCESS %d', this._processing, pattern) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index, cb) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip _processing - if (childrenIgnored(this, read)) - return cb() - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) -} - -Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - -Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return cb() - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return cb() - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this._emitMatch(index, e) - } - // This was the last one, and no stats were needed - return cb() - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - this._process([e].concat(remain), index, inGlobStar, cb) - } - cb() -} - -Glob.prototype._emitMatch = function (index, e) { - if (this.aborted) - return - - if (isIgnored(this, e)) - return - - if (this.paused) { - this._emitQueue.push([index, e]) - return - } - - var abs = isAbsolute(e) ? e : this._makeAbs(e) - - if (this.mark) - e = this._mark(e) - - if (this.absolute) - e = abs - - if (this.matches[index][e]) - return - - if (this.nodir) { - var c = this.cache[abs] - if (c === 'DIR' || Array.isArray(c)) - return - } - - this.matches[index][e] = true - - var st = this.statCache[abs] - if (st) - this.emit('stat', e, st) - - this.emit('match', e) -} - -Glob.prototype._readdirInGlobStar = function (abs, cb) { - if (this.aborted) - return - - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false, cb) - - var lstatkey = 'lstat\0' + abs - var self = this - var lstatcb = inflight(lstatkey, lstatcb_) - - if (lstatcb) - fs.lstat(abs, lstatcb) - - function lstatcb_ (er, lstat) { - if (er && er.code === 'ENOENT') - return cb() - - var isSym = lstat && lstat.isSymbolicLink() - self.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && lstat && !lstat.isDirectory()) { - self.cache[abs] = 'FILE' - cb() - } else - self._readdir(abs, false, cb) - } -} - -Glob.prototype._readdir = function (abs, inGlobStar, cb) { - if (this.aborted) - return - - cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) - if (!cb) - return - - //console.error('RD %j %j', +inGlobStar, abs) - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs, cb) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return cb() - - if (Array.isArray(c)) - return cb(null, c) - } - - var self = this - fs.readdir(abs, readdirCb(this, abs, cb)) -} - -function readdirCb (self, abs, cb) { - return function (er, entries) { - if (er) - self._readdirError(abs, er, cb) - else - self._readdirEntries(abs, entries, cb) - } -} - -Glob.prototype._readdirEntries = function (abs, entries, cb) { - if (this.aborted) - return - - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - return cb(null, entries) -} - -Glob.prototype._readdirError = function (f, er, cb) { - if (this.aborted) - return - - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - var abs = this._makeAbs(f) - this.cache[abs] = 'FILE' - if (abs === this.cwdAbs) { - var error = new Error(er.code + ' invalid cwd ' + this.cwd) - error.path = this.cwd - error.code = er.code - this.emit('error', error) - this.abort() - } - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) { - this.emit('error', er) - // If the error is handled, then we abort - // if not, we threw out of here - this.abort() - } - if (!this.silent) - console.error('glob error', er) - break - } - - return cb() -} - -Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - - -Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - //console.error('pgs2', prefix, remain[0], entries) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return cb() - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false, cb) - - var isSym = this.symlinks[abs] - var len = entries.length - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return cb() - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true, cb) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true, cb) - } - - cb() -} - -Glob.prototype._processSimple = function (prefix, index, cb) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var self = this - this._stat(prefix, function (er, exists) { - self._processSimple2(prefix, index, er, exists, cb) - }) -} -Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { - - //console.error('ps2', prefix, exists) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return cb() - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this._emitMatch(index, prefix) - cb() -} - -// Returns either 'DIR', 'FILE', or false -Glob.prototype._stat = function (f, cb) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return cb() - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return cb(null, c) - - if (needDir && c === 'FILE') - return cb() - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (stat !== undefined) { - if (stat === false) - return cb(null, stat) - else { - var type = stat.isDirectory() ? 'DIR' : 'FILE' - if (needDir && type === 'FILE') - return cb() - else - return cb(null, type, stat) - } - } - - var self = this - var statcb = inflight('stat\0' + abs, lstatcb_) - if (statcb) - fs.lstat(abs, statcb) - - function lstatcb_ (er, lstat) { - if (lstat && lstat.isSymbolicLink()) { - // If it's a symlink, then treat it as the target, unless - // the target does not exist, then treat it as a file. - return fs.stat(abs, function (er, stat) { - if (er) - self._stat2(f, abs, null, lstat, cb) - else - self._stat2(f, abs, er, stat, cb) - }) - } else { - self._stat2(f, abs, er, lstat, cb) - } - } -} - -Glob.prototype._stat2 = function (f, abs, er, stat, cb) { - if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { - this.statCache[abs] = false - return cb() - } - - var needDir = f.slice(-1) === '/' - this.statCache[abs] = stat - - if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) - return cb(null, false, stat) - - var c = true - if (stat) - c = stat.isDirectory() ? 'DIR' : 'FILE' - this.cache[abs] = this.cache[abs] || c - - if (needDir && c === 'FILE') - return cb() - - return cb(null, c, stat) -} diff --git a/truebit-implementation/node_modules/glob/package.json b/truebit-implementation/node_modules/glob/package.json deleted file mode 100644 index 94b753f6..00000000 --- a/truebit-implementation/node_modules/glob/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "glob@^7.0.5", - "_id": "glob@7.1.3", - "_inBundle": false, - "_integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "_location": "/glob", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "glob@^7.0.5", - "name": "glob", - "escapedName": "glob", - "rawSpec": "^7.0.5", - "saveSpec": null, - "fetchSpec": "^7.0.5" - }, - "_requiredBy": [ - "/rimraf" - ], - "_resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "_shasum": "3960832d3f1574108342dafd3a67b332c0969df1", - "_spec": "glob@^7.0.5", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/rimraf", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/node-glob/issues" - }, - "bundleDependencies": false, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "deprecated": false, - "description": "a little globber", - "devDependencies": { - "mkdirp": "0", - "rimraf": "^2.2.8", - "tap": "^12.0.1", - "tick": "0.0.6" - }, - "engines": { - "node": "*" - }, - "files": [ - "glob.js", - "sync.js", - "common.js" - ], - "homepage": "https://github.com/isaacs/node-glob#readme", - "license": "ISC", - "main": "glob.js", - "name": "glob", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "scripts": { - "bench": "bash benchmark.sh", - "benchclean": "node benchclean.js", - "prepublish": "npm run benchclean", - "prof": "bash prof.sh && cat profile.txt", - "profclean": "rm -f v8.log profile.txt", - "test": "tap test/*.js --cov", - "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" - }, - "version": "7.1.3" -} diff --git a/truebit-implementation/node_modules/glob/sync.js b/truebit-implementation/node_modules/glob/sync.js deleted file mode 100644 index c952134b..00000000 --- a/truebit-implementation/node_modules/glob/sync.js +++ /dev/null @@ -1,486 +0,0 @@ -module.exports = globSync -globSync.GlobSync = GlobSync - -var fs = require('fs') -var rp = require('fs.realpath') -var minimatch = require('minimatch') -var Minimatch = minimatch.Minimatch -var Glob = require('./glob.js').Glob -var util = require('util') -var path = require('path') -var assert = require('assert') -var isAbsolute = require('path-is-absolute') -var common = require('./common.js') -var alphasort = common.alphasort -var alphasorti = common.alphasorti -var setopts = common.setopts -var ownProp = common.ownProp -var childrenIgnored = common.childrenIgnored -var isIgnored = common.isIgnored - -function globSync (pattern, options) { - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - return new GlobSync(pattern, options).found -} - -function GlobSync (pattern, options) { - if (!pattern) - throw new Error('must provide pattern') - - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - if (!(this instanceof GlobSync)) - return new GlobSync(pattern, options) - - setopts(this, pattern, options) - - if (this.noprocess) - return this - - var n = this.minimatch.set.length - this.matches = new Array(n) - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false) - } - this._finish() -} - -GlobSync.prototype._finish = function () { - assert(this instanceof GlobSync) - if (this.realpath) { - var self = this - this.matches.forEach(function (matchset, index) { - var set = self.matches[index] = Object.create(null) - for (var p in matchset) { - try { - p = self._makeAbs(p) - var real = rp.realpathSync(p, self.realpathCache) - set[real] = true - } catch (er) { - if (er.syscall === 'stat') - set[self._makeAbs(p)] = true - else - throw er - } - } - }) - } - common.finish(this) -} - - -GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert(this instanceof GlobSync) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // See if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip processing - if (childrenIgnored(this, read)) - return - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar) -} - - -GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { - var entries = this._readdir(abs, inGlobStar) - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix.slice(-1) !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this._emitMatch(index, e) - } - // This was the last one, and no stats were needed - return - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) - newPattern = [prefix, e] - else - newPattern = [e] - this._process(newPattern.concat(remain), index, inGlobStar) - } -} - - -GlobSync.prototype._emitMatch = function (index, e) { - if (isIgnored(this, e)) - return - - var abs = this._makeAbs(e) - - if (this.mark) - e = this._mark(e) - - if (this.absolute) { - e = abs - } - - if (this.matches[index][e]) - return - - if (this.nodir) { - var c = this.cache[abs] - if (c === 'DIR' || Array.isArray(c)) - return - } - - this.matches[index][e] = true - - if (this.stat) - this._stat(e) -} - - -GlobSync.prototype._readdirInGlobStar = function (abs) { - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false) - - var entries - var lstat - var stat - try { - lstat = fs.lstatSync(abs) - } catch (er) { - if (er.code === 'ENOENT') { - // lstat failed, doesn't exist - return null - } - } - - var isSym = lstat && lstat.isSymbolicLink() - this.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && lstat && !lstat.isDirectory()) - this.cache[abs] = 'FILE' - else - entries = this._readdir(abs, false) - - return entries -} - -GlobSync.prototype._readdir = function (abs, inGlobStar) { - var entries - - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return null - - if (Array.isArray(c)) - return c - } - - try { - return this._readdirEntries(abs, fs.readdirSync(abs)) - } catch (er) { - this._readdirError(abs, er) - return null - } -} - -GlobSync.prototype._readdirEntries = function (abs, entries) { - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - - // mark and cache dir-ness - return entries -} - -GlobSync.prototype._readdirError = function (f, er) { - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - var abs = this._makeAbs(f) - this.cache[abs] = 'FILE' - if (abs === this.cwdAbs) { - var error = new Error(er.code + ' invalid cwd ' + this.cwd) - error.path = this.cwd - error.code = er.code - throw error - } - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) - throw er - if (!this.silent) - console.error('glob error', er) - break - } -} - -GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { - - var entries = this._readdir(abs, inGlobStar) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false) - - var len = entries.length - var isSym = this.symlinks[abs] - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true) - } -} - -GlobSync.prototype._processSimple = function (prefix, index) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var exists = this._stat(prefix) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this._emitMatch(index, prefix) -} - -// Returns either 'DIR', 'FILE', or false -GlobSync.prototype._stat = function (f) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return false - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return c - - if (needDir && c === 'FILE') - return false - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (!stat) { - var lstat - try { - lstat = fs.lstatSync(abs) - } catch (er) { - if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { - this.statCache[abs] = false - return false - } - } - - if (lstat && lstat.isSymbolicLink()) { - try { - stat = fs.statSync(abs) - } catch (er) { - stat = lstat - } - } else { - stat = lstat - } - } - - this.statCache[abs] = stat - - var c = true - if (stat) - c = stat.isDirectory() ? 'DIR' : 'FILE' - - this.cache[abs] = this.cache[abs] || c - - if (needDir && c === 'FILE') - return false - - return c -} - -GlobSync.prototype._mark = function (p) { - return common.mark(this, p) -} - -GlobSync.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} diff --git a/truebit-implementation/node_modules/global/.npmignore b/truebit-implementation/node_modules/global/.npmignore deleted file mode 100644 index fd31f5ee..00000000 --- a/truebit-implementation/node_modules/global/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -.DS_Store -.monitor -.*.swp -.nodemonignore -releases -*.log -*.err -fleet.json -public/browserify -bin/*.json -.bin -build -compile -.lock-wscript -node_modules diff --git a/truebit-implementation/node_modules/global/.travis.yml b/truebit-implementation/node_modules/global/.travis.yml deleted file mode 100644 index ed178f63..00000000 --- a/truebit-implementation/node_modules/global/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.8 - - 0.9 diff --git a/truebit-implementation/node_modules/global/LICENSE b/truebit-implementation/node_modules/global/LICENSE deleted file mode 100644 index 822d880b..00000000 --- a/truebit-implementation/node_modules/global/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Colingo. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/global/README.md b/truebit-implementation/node_modules/global/README.md deleted file mode 100644 index 289d305f..00000000 --- a/truebit-implementation/node_modules/global/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# global - - - -Require global variables - -## Example - -```js -var global = require("global") -var document = require("global/document") -var window = require("global/window") -``` - -## Installation - -`npm install global` - -## Contributors - - - Raynos - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Colingo/global.png - [2]: http://travis-ci.org/Colingo/global - [3]: http://ci.testling.com/Colingo/global.png - [4]: http://ci.testling.com/Colingo/global diff --git a/truebit-implementation/node_modules/global/console.js b/truebit-implementation/node_modules/global/console.js deleted file mode 100644 index 5cb1dfa1..00000000 --- a/truebit-implementation/node_modules/global/console.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = console; diff --git a/truebit-implementation/node_modules/global/document.js b/truebit-implementation/node_modules/global/document.js deleted file mode 100644 index 7c0f50dc..00000000 --- a/truebit-implementation/node_modules/global/document.js +++ /dev/null @@ -1,17 +0,0 @@ -var topLevel = typeof global !== 'undefined' ? global : - typeof window !== 'undefined' ? window : {} -var minDoc = require('min-document'); - -var doccy; - -if (typeof document !== 'undefined') { - doccy = document; -} else { - doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4']; - - if (!doccy) { - doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc; - } -} - -module.exports = doccy; diff --git a/truebit-implementation/node_modules/global/package.json b/truebit-implementation/node_modules/global/package.json deleted file mode 100644 index 4b5ffcb1..00000000 --- a/truebit-implementation/node_modules/global/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_from": "global@~4.3.0", - "_id": "global@4.3.2", - "_inBundle": false, - "_integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "_location": "/global", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "global@~4.3.0", - "name": "global", - "escapedName": "global", - "rawSpec": "~4.3.0", - "saveSpec": null, - "fetchSpec": "~4.3.0" - }, - "_requiredBy": [ - "/xhr" - ], - "_resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "_shasum": "e76989268a6c74c38908b1305b10fc0e394e9d0f", - "_spec": "global@~4.3.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/xhr", - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "browser": { - "min-document": false, - "individual": false - }, - "bugs": { - "url": "https://github.com/Raynos/global/issues", - "email": "raynos2@gmail.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Raynos" - } - ], - "dependencies": { - "min-document": "^2.19.0", - "process": "~0.5.1" - }, - "deprecated": false, - "description": "Require global variables", - "devDependencies": { - "tape": "^2.12.0" - }, - "homepage": "https://github.com/Raynos/global", - "keywords": [], - "license": "MIT", - "main": "window.js", - "name": "global", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/global.git" - }, - "scripts": { - "build": "browserify test/index.js -o test/static/bundle.js", - "test": "node ./test", - "testem": "testem" - }, - "testling": { - "files": "test/index.js", - "browsers": { - "ie": [ - "8", - "9", - "10" - ], - "firefox": [ - "16", - "17", - "nightly" - ], - "chrome": [ - "22", - "23", - "canary" - ], - "opera": [ - "12", - "next" - ], - "safari": [ - "5.1" - ] - } - }, - "version": "4.3.2" -} diff --git a/truebit-implementation/node_modules/global/process.js b/truebit-implementation/node_modules/global/process.js deleted file mode 100644 index 00a8e377..00000000 --- a/truebit-implementation/node_modules/global/process.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('process'); diff --git a/truebit-implementation/node_modules/global/window.js b/truebit-implementation/node_modules/global/window.js deleted file mode 100644 index ae6c11c7..00000000 --- a/truebit-implementation/node_modules/global/window.js +++ /dev/null @@ -1,13 +0,0 @@ -var win; - -if (typeof window !== "undefined") { - win = window; -} else if (typeof global !== "undefined") { - win = global; -} else if (typeof self !== "undefined"){ - win = self; -} else { - win = {}; -} - -module.exports = win; diff --git a/truebit-implementation/node_modules/got/index.js b/truebit-implementation/node_modules/got/index.js deleted file mode 100644 index 4c5090a5..00000000 --- a/truebit-implementation/node_modules/got/index.js +++ /dev/null @@ -1,479 +0,0 @@ -'use strict'; -const EventEmitter = require('events'); -const http = require('http'); -const https = require('https'); -const PassThrough = require('stream').PassThrough; -const urlLib = require('url'); -const querystring = require('querystring'); -const duplexer3 = require('duplexer3'); -const isStream = require('is-stream'); -const getStream = require('get-stream'); -const timedOut = require('timed-out'); -const urlParseLax = require('url-parse-lax'); -const urlToOptions = require('url-to-options'); -const lowercaseKeys = require('lowercase-keys'); -const decompressResponse = require('decompress-response'); -const isRetryAllowed = require('is-retry-allowed'); -const Buffer = require('safe-buffer').Buffer; -const isURL = require('isurl'); -const isPlainObj = require('is-plain-obj'); -const PCancelable = require('p-cancelable'); -const pTimeout = require('p-timeout'); -const pkg = require('./package'); - -const getMethodRedirectCodes = new Set([300, 301, 302, 303, 304, 305, 307, 308]); -const allMethodRedirectCodes = new Set([300, 303, 307, 308]); - -function requestAsEventEmitter(opts) { - opts = opts || {}; - - const ee = new EventEmitter(); - const requestUrl = opts.href || urlLib.resolve(urlLib.format(opts), opts.path); - const redirects = []; - let retryCount = 0; - let redirectUrl; - - const get = opts => { - if (opts.protocol !== 'http:' && opts.protocol !== 'https:') { - ee.emit('error', new got.UnsupportedProtocolError(opts)); - return; - } - - let fn = opts.protocol === 'https:' ? https : http; - - if (opts.useElectronNet && process.versions.electron) { - const electron = require('electron'); - fn = electron.net || electron.remote.net; - } - - const req = fn.request(opts, res => { - const statusCode = res.statusCode; - - res.url = redirectUrl || requestUrl; - res.requestUrl = requestUrl; - - const followRedirect = opts.followRedirect && 'location' in res.headers; - const redirectGet = followRedirect && getMethodRedirectCodes.has(statusCode); - const redirectAll = followRedirect && allMethodRedirectCodes.has(statusCode); - - if (redirectAll || (redirectGet && (opts.method === 'GET' || opts.method === 'HEAD'))) { - res.resume(); - - if (statusCode === 303) { - // Server responded with "see other", indicating that the resource exists at another location, - // and the client should request it from that location via GET or HEAD. - opts.method = 'GET'; - } - - if (redirects.length >= 10) { - ee.emit('error', new got.MaxRedirectsError(statusCode, redirects, opts), null, res); - return; - } - - const bufferString = Buffer.from(res.headers.location, 'binary').toString(); - - redirectUrl = urlLib.resolve(urlLib.format(opts), bufferString); - - redirects.push(redirectUrl); - - const redirectOpts = Object.assign({}, opts, urlLib.parse(redirectUrl)); - - ee.emit('redirect', res, redirectOpts); - - get(redirectOpts); - - return; - } - - setImmediate(() => { - const response = opts.decompress === true && - typeof decompressResponse === 'function' && - req.method !== 'HEAD' ? decompressResponse(res) : res; - - if (!opts.decompress && ['gzip', 'deflate'].indexOf(res.headers['content-encoding']) !== -1) { - opts.encoding = null; - } - - response.redirectUrls = redirects; - - ee.emit('response', response); - }); - }); - - req.once('error', err => { - const backoff = opts.retries(++retryCount, err); - - if (backoff) { - setTimeout(get, backoff, opts); - return; - } - - ee.emit('error', new got.RequestError(err, opts)); - }); - - if (opts.gotTimeout) { - timedOut(req, opts.gotTimeout); - } - - setImmediate(() => { - ee.emit('request', req); - }); - }; - - setImmediate(() => { - get(opts); - }); - return ee; -} - -function asPromise(opts) { - const timeoutFn = requestPromise => opts.gotTimeout && opts.gotTimeout.request ? - pTimeout(requestPromise, opts.gotTimeout.request, new got.RequestError({message: 'Request timed out', code: 'ETIMEDOUT'}, opts)) : - requestPromise; - - return timeoutFn(new PCancelable((onCancel, resolve, reject) => { - const ee = requestAsEventEmitter(opts); - let cancelOnRequest = false; - - onCancel(() => { - cancelOnRequest = true; - }); - - ee.on('request', req => { - if (cancelOnRequest) { - req.abort(); - } - - onCancel(() => { - req.abort(); - }); - - if (isStream(opts.body)) { - opts.body.pipe(req); - opts.body = undefined; - return; - } - - req.end(opts.body); - }); - - ee.on('response', res => { - const stream = opts.encoding === null ? getStream.buffer(res) : getStream(res, opts); - - stream - .catch(err => reject(new got.ReadError(err, opts))) - .then(data => { - const statusCode = res.statusCode; - const limitStatusCode = opts.followRedirect ? 299 : 399; - - res.body = data; - - if (opts.json && res.body) { - try { - res.body = JSON.parse(res.body); - } catch (e) { - if (statusCode >= 200 && statusCode < 300) { - throw new got.ParseError(e, statusCode, opts, data); - } - } - } - - if (statusCode !== 304 && (statusCode < 200 || statusCode > limitStatusCode)) { - throw new got.HTTPError(statusCode, res.headers, opts); - } - - resolve(res); - }) - .catch(err => { - Object.defineProperty(err, 'response', {value: res}); - reject(err); - }); - }); - - ee.on('error', reject); - })); -} - -function asStream(opts) { - const input = new PassThrough(); - const output = new PassThrough(); - const proxy = duplexer3(input, output); - let timeout; - - if (opts.gotTimeout && opts.gotTimeout.request) { - timeout = setTimeout(() => { - proxy.emit('error', new got.RequestError({message: 'Request timed out', code: 'ETIMEDOUT'}, opts)); - }, opts.gotTimeout.request); - } - - if (opts.json) { - throw new Error('got can not be used as stream when options.json is used'); - } - - if (opts.body) { - proxy.write = () => { - throw new Error('got\'s stream is not writable when options.body is used'); - }; - } - - const ee = requestAsEventEmitter(opts); - - ee.on('request', req => { - proxy.emit('request', req); - - if (isStream(opts.body)) { - opts.body.pipe(req); - return; - } - - if (opts.body) { - req.end(opts.body); - return; - } - - if (opts.method === 'POST' || opts.method === 'PUT' || opts.method === 'PATCH') { - input.pipe(req); - return; - } - - req.end(); - }); - - ee.on('response', res => { - clearTimeout(timeout); - - const statusCode = res.statusCode; - - res.pipe(output); - - if (statusCode !== 304 && (statusCode < 200 || statusCode > 299)) { - proxy.emit('error', new got.HTTPError(statusCode, res.headers, opts), null, res); - return; - } - - proxy.emit('response', res); - }); - - ee.on('redirect', proxy.emit.bind(proxy, 'redirect')); - ee.on('error', proxy.emit.bind(proxy, 'error')); - - return proxy; -} - -function normalizeArguments(url, opts) { - if (typeof url !== 'string' && typeof url !== 'object') { - throw new TypeError(`Parameter \`url\` must be a string or object, not ${typeof url}`); - } else if (typeof url === 'string') { - url = url.replace(/^unix:/, 'http://$&'); - url = urlParseLax(url); - } else if (isURL.lenient(url)) { - url = urlToOptions(url); - } - - if (url.auth) { - throw new Error('Basic authentication must be done with auth option'); - } - - opts = Object.assign( - { - path: '', - retries: 2, - decompress: true, - useElectronNet: true - }, - url, - { - protocol: url.protocol || 'http:' // Override both null/undefined with default protocol - }, - opts - ); - - opts.headers = Object.assign({ - 'user-agent': `${pkg.name}/${pkg.version} (https://github.com/sindresorhus/got)`, - 'accept-encoding': 'gzip,deflate' - }, lowercaseKeys(opts.headers)); - - const query = opts.query; - - if (query) { - if (typeof query !== 'string') { - opts.query = querystring.stringify(query); - } - - opts.path = `${opts.path.split('?')[0]}?${opts.query}`; - delete opts.query; - } - - if (opts.json && opts.headers.accept === undefined) { - opts.headers.accept = 'application/json'; - } - - const body = opts.body; - if (body !== null && body !== undefined) { - const headers = opts.headers; - if (!isStream(body) && typeof body !== 'string' && !Buffer.isBuffer(body) && !(opts.form || opts.json)) { - throw new TypeError('options.body must be a ReadableStream, string, Buffer or plain Object'); - } - - const canBodyBeStringified = isPlainObj(body) || Array.isArray(body); - if ((opts.form || opts.json) && !canBodyBeStringified) { - throw new TypeError('options.body must be a plain Object or Array when options.form or options.json is used'); - } - - if (isStream(body) && typeof body.getBoundary === 'function') { - // Special case for https://github.com/form-data/form-data - headers['content-type'] = headers['content-type'] || `multipart/form-data; boundary=${body.getBoundary()}`; - } else if (opts.form && canBodyBeStringified) { - headers['content-type'] = headers['content-type'] || 'application/x-www-form-urlencoded'; - opts.body = querystring.stringify(body); - } else if (opts.json && canBodyBeStringified) { - headers['content-type'] = headers['content-type'] || 'application/json'; - opts.body = JSON.stringify(body); - } - - if (headers['content-length'] === undefined && headers['transfer-encoding'] === undefined && !isStream(body)) { - const length = typeof opts.body === 'string' ? Buffer.byteLength(opts.body) : opts.body.length; - headers['content-length'] = length; - } - - opts.method = (opts.method || 'POST').toUpperCase(); - } else { - opts.method = (opts.method || 'GET').toUpperCase(); - } - - if (opts.hostname === 'unix') { - const matches = /(.+?):(.+)/.exec(opts.path); - - if (matches) { - opts.socketPath = matches[1]; - opts.path = matches[2]; - opts.host = null; - } - } - - if (typeof opts.retries !== 'function') { - const retries = opts.retries; - - opts.retries = (iter, err) => { - if (iter > retries || !isRetryAllowed(err)) { - return 0; - } - - const noise = Math.random() * 100; - - return ((1 << iter) * 1000) + noise; - }; - } - - if (opts.followRedirect === undefined) { - opts.followRedirect = true; - } - - if (opts.timeout) { - if (typeof opts.timeout === 'number') { - opts.gotTimeout = {request: opts.timeout}; - } else { - opts.gotTimeout = opts.timeout; - } - delete opts.timeout; - } - - return opts; -} - -function got(url, opts) { - try { - return asPromise(normalizeArguments(url, opts)); - } catch (err) { - return Promise.reject(err); - } -} - -got.stream = (url, opts) => asStream(normalizeArguments(url, opts)); - -const methods = [ - 'get', - 'post', - 'put', - 'patch', - 'head', - 'delete' -]; - -for (const method of methods) { - got[method] = (url, opts) => got(url, Object.assign({}, opts, {method})); - got.stream[method] = (url, opts) => got.stream(url, Object.assign({}, opts, {method})); -} - -class StdError extends Error { - constructor(message, error, opts) { - super(message); - this.name = 'StdError'; - - if (error.code !== undefined) { - this.code = error.code; - } - - Object.assign(this, { - host: opts.host, - hostname: opts.hostname, - method: opts.method, - path: opts.path, - protocol: opts.protocol, - url: opts.href - }); - } -} - -got.RequestError = class extends StdError { - constructor(error, opts) { - super(error.message, error, opts); - this.name = 'RequestError'; - } -}; - -got.ReadError = class extends StdError { - constructor(error, opts) { - super(error.message, error, opts); - this.name = 'ReadError'; - } -}; - -got.ParseError = class extends StdError { - constructor(error, statusCode, opts, data) { - super(`${error.message} in "${urlLib.format(opts)}": \n${data.slice(0, 77)}...`, error, opts); - this.name = 'ParseError'; - this.statusCode = statusCode; - this.statusMessage = http.STATUS_CODES[this.statusCode]; - } -}; - -got.HTTPError = class extends StdError { - constructor(statusCode, headers, opts) { - const statusMessage = http.STATUS_CODES[statusCode]; - super(`Response code ${statusCode} (${statusMessage})`, {}, opts); - this.name = 'HTTPError'; - this.statusCode = statusCode; - this.statusMessage = statusMessage; - this.headers = headers; - } -}; - -got.MaxRedirectsError = class extends StdError { - constructor(statusCode, redirectUrls, opts) { - super('Redirected 10 times. Aborting.', {}, opts); - this.name = 'MaxRedirectsError'; - this.statusCode = statusCode; - this.statusMessage = http.STATUS_CODES[this.statusCode]; - this.redirectUrls = redirectUrls; - } -}; - -got.UnsupportedProtocolError = class extends StdError { - constructor(opts) { - super(`Unsupported protocol "${opts.protocol}"`, {}, opts); - this.name = 'UnsupportedProtocolError'; - } -}; - -module.exports = got; diff --git a/truebit-implementation/node_modules/got/license b/truebit-implementation/node_modules/got/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/got/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/got/package.json b/truebit-implementation/node_modules/got/package.json deleted file mode 100644 index 12afcd8c..00000000 --- a/truebit-implementation/node_modules/got/package.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "_from": "got@7.1.0", - "_id": "got@7.1.0", - "_inBundle": false, - "_integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "_location": "/got", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "got@7.1.0", - "name": "got", - "escapedName": "got", - "rawSpec": "7.1.0", - "saveSpec": null, - "fetchSpec": "7.1.0" - }, - "_requiredBy": [ - "/swarm-js", - "/web3-bzz" - ], - "_resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "_shasum": "05450fd84094e6bbea56f451a43a9c289166385a", - "_spec": "got@7.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-bzz", - "ava": { - "concurrency": 4 - }, - "browser": { - "decompress-response": false - }, - "bugs": { - "url": "https://github.com/sindresorhus/got/issues" - }, - "bundleDependencies": false, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "deprecated": false, - "description": "Simplified HTTP requests", - "devDependencies": { - "ava": "^0.20.0", - "coveralls": "^2.11.4", - "form-data": "^2.1.1", - "get-port": "^3.0.0", - "into-stream": "^3.0.0", - "nyc": "^11.0.2", - "pem": "^1.4.4", - "pify": "^3.0.0", - "tempfile": "^2.0.0", - "tempy": "^0.1.0", - "universal-url": "^1.0.0-alpha", - "xo": "^0.18.0" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/got#readme", - "keywords": [ - "http", - "https", - "get", - "got", - "url", - "uri", - "request", - "util", - "utility", - "simple", - "curl", - "wget", - "fetch", - "net", - "network", - "electron" - ], - "license": "MIT", - "maintainers": [ - { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - { - "name": "Vsevolod Strukchinsky", - "email": "floatdrop@gmail.com", - "url": "github.com/floatdrop" - }, - { - "name": "Alexander Tesfamichael", - "email": "alex.tesfamichael@gmail.com", - "url": "alextes.me" - } - ], - "name": "got", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/got.git" - }, - "scripts": { - "coveralls": "nyc report --reporter=text-lcov | coveralls", - "test": "xo && nyc ava" - }, - "version": "7.1.0" -} diff --git a/truebit-implementation/node_modules/got/readme.md b/truebit-implementation/node_modules/got/readme.md deleted file mode 100644 index 074530f3..00000000 --- a/truebit-implementation/node_modules/got/readme.md +++ /dev/null @@ -1,431 +0,0 @@ -

-
- got -
-
-
-

- -> Simplified HTTP requests - -[![Build Status](https://travis-ci.org/sindresorhus/got.svg?branch=master)](https://travis-ci.org/sindresorhus/got) [![Coverage Status](https://coveralls.io/repos/github/sindresorhus/got/badge.svg?branch=master)](https://coveralls.io/github/sindresorhus/got?branch=master) [![Downloads](https://img.shields.io/npm/dm/got.svg)](https://npmjs.com/got) - -A nicer interface to the built-in [`http`](http://nodejs.org/api/http.html) module. - -Created because [`request`](https://github.com/request/request) is bloated *(several megabytes!)*. - - -## Highlights - -- [Promise & stream API](#api) -- [Request cancelation](#aborting-the-request) -- [Follows redirects](#followredirect) -- [Retries on network failure](#retries) -- [Handles gzip/deflate](#decompress) -- [Timeout handling](#timeout) -- [Errors with metadata](#errors) -- [JSON mode](#json) -- [WHATWG URL support](#url) -- [Electron support](#useelectronnet) - - -## Install - -``` -$ npm install --save got -``` - - -## Usage - -```js -const fs = require('fs'); -const got = require('got'); - -got('todomvc.com') - .then(response => { - console.log(response.body); - //=> ' ...' - }) - .catch(error => { - console.log(error.response.body); - //=> 'Internal server error ...' - }); - -// Streams -got.stream('todomvc.com').pipe(fs.createWriteStream('index.html')); - -// For POST, PUT and PATCH methods got.stream returns a WritableStream -fs.createReadStream('index.html').pipe(got.stream.post('todomvc.com')); -``` - - -### API - -It's a `GET` request by default, but can be changed in `options`. - -#### got(url, [options]) - -Returns a Promise for a `response` object with a `body` property, a `url` property with the request URL or the final URL after redirects, and a `requestUrl` property with the original request URL. - -##### url - -Type: `string` `Object` - -The URL to request as simple string, a [`http.request` options](https://nodejs.org/api/http.html#http_http_request_options_callback), or a [WHATWG `URL`](https://nodejs.org/api/url.html#url_class_url). - -Properties from `options` will override properties in the parsed `url`. - -##### options - -Type: `Object` - -Any of the [`http.request`](http://nodejs.org/api/http.html#http_http_request_options_callback) options. - -###### body - -Type: `string` `Buffer` `stream.Readable` - -*This is mutually exclusive with stream mode.* - -Body that will be sent with a `POST` request. - -If present in `options` and `options.method` is not set, `options.method` will be set to `POST`. - -If `content-length` or `transfer-encoding` is not set in `options.headers` and `body` is a string or buffer, `content-length` will be set to the body length. - -###### encoding - -Type: `string` `null`
-Default: `'utf8'` - -[Encoding](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings) to be used on `setEncoding` of the response data. If `null`, the body is returned as a Buffer. - -###### form - -Type: `boolean`
-Default: `false` - -*This is mutually exclusive with stream mode.* - -If set to `true` and `Content-Type` header is not set, it will be set to `application/x-www-form-urlencoded`. - -`body` must be a plain object or array and will be stringified. - -###### json - -Type: `boolean`
-Default: `false` - -*This is mutually exclusive with stream mode.* - -If set to `true` and `Content-Type` header is not set, it will be set to `application/json`. - -Parse response body with `JSON.parse` and set `accept` header to `application/json`. If used in conjunction with the `form` option, the `body` will the stringified as querystring and the response parsed as JSON. - -`body` must be a plain object or array and will be stringified. - -###### query - -Type: `string` `Object`
- -Query string object that will be added to the request URL. This will override the query string in `url`. - -###### timeout - -Type: `number` `Object` - -Milliseconds to wait for the server to end the response before aborting request with `ETIMEDOUT` error. - -This also accepts an object with separate `connect`, `socket`, and `request` fields for connection, socket, and entire request timeouts. - -###### retries - -Type: `number` `Function`
-Default: `2` - -Number of request retries when network errors happens. Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 0). - -Option accepts `function` with `retry` and `error` arguments. Function must return delay in milliseconds (`0` return value cancels retry). - -**Note:** if `retries` is `number`, `ENOTFOUND` and `ENETUNREACH` error will not be retried (see full list in [`is-retry-allowed`](https://github.com/floatdrop/is-retry-allowed/blob/master/index.js#L12) module). - -###### followRedirect - -Type: `boolean`
-Default: `true` - -Defines if redirect responses should be followed automatically. - -Note that if a `303` is sent by the server in response to any request type (`POST`, `DELETE`, etc.), got will automatically -request the resource pointed to in the location header via `GET`. This is in accordance with [the spec](https://tools.ietf.org/html/rfc7231#section-6.4.4). - -###### decompress - -Type: `boolean`
-Default: `true` - -Decompress the response automatically. - -If this is disabled, a compressed response is returned as a `Buffer`. This may be useful if you want to handle decompression yourself or stream the raw compressed data. - -###### useElectronNet - -Type: `boolean`
-Default: `true` - -When used in Electron, Got will automatically use [`electron.net`](https://electron.atom.io/docs/api/net/) instead of the Node.js `http` module. It should be fully compatible, but you can turn it off here if you encounter a problem. Please open an issue if you do! - - -#### Streams - -#### got.stream(url, [options]) - -`stream` method will return Duplex stream with additional events: - -##### .on('request', request) - -`request` event to get the request object of the request. - -**Tip**: You can use `request` event to abort request: - -```js -got.stream('github.com') - .on('request', req => setTimeout(() => req.abort(), 50)); -``` - -##### .on('response', response) - -`response` event to get the response object of the final request. - -##### .on('redirect', response, nextOptions) - -`redirect` event to get the response object of a redirect. The second argument is options for the next request to the redirect location. - -##### .on('error', error, body, response) - -`error` event emitted in case of protocol error (like `ENOTFOUND` etc.) or status error (4xx or 5xx). The second argument is the body of the server response in case of status error. The third argument is response object. - -#### got.get(url, [options]) -#### got.post(url, [options]) -#### got.put(url, [options]) -#### got.patch(url, [options]) -#### got.head(url, [options]) -#### got.delete(url, [options]) - -Sets `options.method` to the method name and makes a request. - - -## Errors - -Each error contains (if available) `statusCode`, `statusMessage`, `host`, `hostname`, `method`, `path`, `protocol` and `url` properties to make debugging easier. - -In Promise mode, the `response` is attached to the error. - -#### got.RequestError - -When a request fails. Contains a `code` property with error class code, like `ECONNREFUSED`. - -#### got.ReadError - -When reading from response stream fails. - -#### got.ParseError - -When `json` option is enabled, server response code is 2xx, and `JSON.parse` fails. - -#### got.HTTPError - -When server response code is not 2xx. Includes `statusCode`, `statusMessage`, and `redirectUrls` properties. - -#### got.MaxRedirectsError - -When server redirects you more than 10 times. Includes a `redirectUrls` property, which is an array of the URLs Got was redirected to before giving up. - -#### got.UnsupportedProtocolError - -When given an unsupported protocol. - - -## Aborting the request - -The promise returned by Got has a `.cancel()` function which, when called, aborts the request. - - -## Proxies - -You can use the [`tunnel`](https://github.com/koichik/node-tunnel) module with the `agent` option to work with proxies: - -```js -const got = require('got'); -const tunnel = require('tunnel'); - -got('todomvc.com', { - agent: tunnel.httpOverHttp({ - proxy: { - host: 'localhost' - } - }) -}); -``` - - -## Cookies - -You can use the [`cookie`](https://github.com/jshttp/cookie) module to include cookies in a request: - -```js -const got = require('got'); -const cookie = require('cookie'); - -got('google.com', { - headers: { - cookie: cookie.serialize('foo', 'bar') - } -}); -``` - - -## Form data - -You can use the [`form-data`](https://github.com/form-data/form-data) module to create POST request with form data: - -```js -const fs = require('fs'); -const got = require('got'); -const FormData = require('form-data'); -const form = new FormData(); - -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); - -got.post('google.com', { - body: form -}); -``` - - -## OAuth - -You can use the [`oauth-1.0a`](https://github.com/ddo/oauth-1.0a) module to create a signed OAuth request: - -```js -const got = require('got'); -const crypto = require('crypto'); -const OAuth = require('oauth-1.0a'); - -const oauth = OAuth({ - consumer: { - key: process.env.CONSUMER_KEY, - secret: process.env.CONSUMER_SECRET - }, - signature_method: 'HMAC-SHA1', - hash_function: (baseString, key) => crypto.createHmac('sha1', key).update(baseString).digest('base64') -}); - -const token = { - key: process.env.ACCESS_TOKEN, - secret: process.env.ACCESS_TOKEN_SECRET -}; - -const url = 'https://api.twitter.com/1.1/statuses/home_timeline.json'; - -got(url, { - headers: oauth.toHeader(oauth.authorize({url, method: 'GET'}, token)), - json: true -}); -``` - - -## Unix Domain Sockets - -Requests can also be sent via [unix domain sockets](http://serverfault.com/questions/124517/whats-the-difference-between-unix-socket-and-tcp-ip-socket). Use the following URL scheme: `PROTOCOL://unix:SOCKET:PATH`. - -- `PROTOCOL` - `http` or `https` *(optional)* -- `SOCKET` - absolute path to a unix domain socket, e.g. `/var/run/docker.sock` -- `PATH` - request path, e.g. `/v2/keys` - -```js -got('http://unix:/var/run/docker.sock:/containers/json'); - -// or without protocol (http by default) -got('unix:/var/run/docker.sock:/containers/json'); -``` - -## AWS - -Requests to AWS services need to have their headers signed. This can be accomplished by using the [`aws4`](https://www.npmjs.com/package/aws4) package. This is an example for querying an ["Elasticsearch Service"](https://aws.amazon.com/elasticsearch-service/) host with a signed request. - -```js -const url = require('url'); -const AWS = require('aws-sdk'); -const aws4 = require('aws4'); -const got = require('got'); -const config = require('./config'); - -// Reads keys from the environment or `~/.aws/credentials`. Could be a plain object. -const awsConfig = new AWS.Config({ region: config.region }); - -function request(uri, options) { - const awsOpts = { - region: awsConfig.region, - headers: { - accept: 'application/json', - 'content-type': 'application/json' - }, - method: 'GET', - json: true - }; - - // We need to parse the URL before passing it to `got` so `aws4` can sign the request - const opts = Object.assign(url.parse(uri), awsOpts, options); - aws4.sign(opts, awsConfig.credentials); - - return got(opts); -} - -request(`https://${config.host}/production/users/1`); - -request(`https://${config.host}/production/`, { - // All usual `got` options -}); -``` - - -## Tips - -### User Agent - -It's a good idea to set the `'user-agent'` header so the provider can more easily see how their resource is used. By default, it's the URL to this repo. - -```js -const got = require('got'); -const pkg = require('./package.json'); - -got('todomvc.com', { - headers: { - 'user-agent': `my-module/${pkg.version} (https://github.com/username/my-module)` - } -}); -``` - -### 304 Responses - -Bear in mind, if you send an `if-modified-since` header and receive a `304 Not Modified` response, the body will be empty. It's your responsibility to cache and retrieve the body contents. - - -## Related - -- [gh-got](https://github.com/sindresorhus/gh-got) - Convenience wrapper for interacting with the GitHub API -- [travis-got](https://github.com/samverschueren/travis-got) - Convenience wrapper for interacting with the Travis API - - -## Created by - -[![Sindre Sorhus](https://avatars.githubusercontent.com/u/170270?v=3&s=100)](https://sindresorhus.com) | [![Vsevolod Strukchinsky](https://avatars.githubusercontent.com/u/365089?v=3&s=100)](https://github.com/floatdrop) | [![Alexander Tesfamichael](https://avatars.githubusercontent.com/u/2011351?v=3&s=100)](https://alextes.me) ----|---|--- -[Sindre Sorhus](https://sindresorhus.com) | [Vsevolod Strukchinsky](https://github.com/floatdrop) | [Alexander Tesfamichael](https://alextes.me) - - -## License - -MIT diff --git a/truebit-implementation/node_modules/graceful-fs/LICENSE b/truebit-implementation/node_modules/graceful-fs/LICENSE deleted file mode 100644 index 9d2c8036..00000000 --- a/truebit-implementation/node_modules/graceful-fs/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/graceful-fs/README.md b/truebit-implementation/node_modules/graceful-fs/README.md deleted file mode 100644 index 5273a50a..00000000 --- a/truebit-implementation/node_modules/graceful-fs/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# graceful-fs - -graceful-fs functions as a drop-in replacement for the fs module, -making various improvements. - -The improvements are meant to normalize behavior across different -platforms and environments, and to make filesystem access more -resilient to errors. - -## Improvements over [fs module](https://nodejs.org/api/fs.html) - -* Queues up `open` and `readdir` calls, and retries them once - something closes if there is an EMFILE error from too many file - descriptors. -* fixes `lchmod` for Node versions prior to 0.6.2. -* implements `fs.lutimes` if possible. Otherwise it becomes a noop. -* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or - `lchown` if the user isn't root. -* makes `lchmod` and `lchown` become noops, if not available. -* retries reading a file if `read` results in EAGAIN error. - -On Windows, it retries renaming a file for up to one second if `EACCESS` -or `EPERM` error occurs, likely because antivirus software has locked -the directory. - -## USAGE - -```javascript -// use just like fs -var fs = require('graceful-fs') - -// now go and do stuff with it... -fs.readFileSync('some-file-or-whatever') -``` - -## Global Patching - -If you want to patch the global fs module (or any other fs-like -module) you can do this: - -```javascript -// Make sure to read the caveat below. -var realFs = require('fs') -var gracefulFs = require('graceful-fs') -gracefulFs.gracefulify(realFs) -``` - -This should only ever be done at the top-level application layer, in -order to delay on EMFILE errors from any fs-using dependencies. You -should **not** do this in a library, because it can cause unexpected -delays in other parts of the program. - -## Changes - -This module is fairly stable at this point, and used by a lot of -things. That being said, because it implements a subtle behavior -change in a core part of the node API, even modest changes can be -extremely breaking, and the versioning is thus biased towards -bumping the major when in doubt. - -The main change between major versions has been switching between -providing a fully-patched `fs` module vs monkey-patching the node core -builtin, and the approach by which a non-monkey-patched `fs` was -created. - -The goal is to trade `EMFILE` errors for slower fs operations. So, if -you try to open a zillion files, rather than crashing, `open` -operations will be queued up and wait for something else to `close`. - -There are advantages to each approach. Monkey-patching the fs means -that no `EMFILE` errors can possibly occur anywhere in your -application, because everything is using the same core `fs` module, -which is patched. However, it can also obviously cause undesirable -side-effects, especially if the module is loaded multiple times. - -Implementing a separate-but-identical patched `fs` module is more -surgical (and doesn't run the risk of patching multiple times), but -also imposes the challenge of keeping in sync with the core module. - -The current approach loads the `fs` module, and then creates a -lookalike object that has all the same methods, except a few that are -patched. It is safe to use in all versions of Node from 0.8 through -7.0. - -### v4 - -* Do not monkey-patch the fs module. This module may now be used as a - drop-in dep, and users can opt into monkey-patching the fs builtin - if their app requires it. - -### v3 - -* Monkey-patch fs, because the eval approach no longer works on recent - node. -* fixed possible type-error throw if rename fails on windows -* verify that we *never* get EMFILE errors -* Ignore ENOSYS from chmod/chown -* clarify that graceful-fs must be used as a drop-in - -### v2.1.0 - -* Use eval rather than monkey-patching fs. -* readdir: Always sort the results -* win32: requeue a file if error has an OK status - -### v2.0 - -* A return to monkey patching -* wrap process.cwd - -### v1.1 - -* wrap readFile -* Wrap fs.writeFile. -* readdir protection -* Don't clobber the fs builtin -* Handle fs.read EAGAIN errors by trying again -* Expose the curOpen counter -* No-op lchown/lchmod if not implemented -* fs.rename patch only for win32 -* Patch fs.rename to handle AV software on Windows -* Close #4 Chown should not fail on einval or eperm if non-root -* Fix isaacs/fstream#1 Only wrap fs one time -* Fix #3 Start at 1024 max files, then back off on EMFILE -* lutimes that doens't blow up on Linux -* A full on-rewrite using a queue instead of just swallowing the EMFILE error -* Wrap Read/Write streams as well - -### 1.0 - -* Update engines for node 0.6 -* Be lstat-graceful on Windows -* first diff --git a/truebit-implementation/node_modules/graceful-fs/clone.js b/truebit-implementation/node_modules/graceful-fs/clone.js deleted file mode 100644 index 028356c9..00000000 --- a/truebit-implementation/node_modules/graceful-fs/clone.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict' - -module.exports = clone - -function clone (obj) { - if (obj === null || typeof obj !== 'object') - return obj - - if (obj instanceof Object) - var copy = { __proto__: obj.__proto__ } - else - var copy = Object.create(null) - - Object.getOwnPropertyNames(obj).forEach(function (key) { - Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key)) - }) - - return copy -} diff --git a/truebit-implementation/node_modules/graceful-fs/graceful-fs.js b/truebit-implementation/node_modules/graceful-fs/graceful-fs.js deleted file mode 100644 index ac206757..00000000 --- a/truebit-implementation/node_modules/graceful-fs/graceful-fs.js +++ /dev/null @@ -1,279 +0,0 @@ -var fs = require('fs') -var polyfills = require('./polyfills.js') -var legacy = require('./legacy-streams.js') -var clone = require('./clone.js') - -var queue = [] - -var util = require('util') - -function noop () {} - -var debug = noop -if (util.debuglog) - debug = util.debuglog('gfs4') -else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) - debug = function() { - var m = util.format.apply(util, arguments) - m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ') - console.error(m) - } - -if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) { - process.on('exit', function() { - debug(queue) - require('assert').equal(queue.length, 0) - }) -} - -module.exports = patch(clone(fs)) -if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) { - module.exports = patch(fs) - fs.__patched = true; -} - -// Always patch fs.close/closeSync, because we want to -// retry() whenever a close happens *anywhere* in the program. -// This is essential when multiple graceful-fs instances are -// in play at the same time. -module.exports.close = (function (fs$close) { return function (fd, cb) { - return fs$close.call(fs, fd, function (err) { - if (!err) - retry() - - if (typeof cb === 'function') - cb.apply(this, arguments) - }) -}})(fs.close) - -module.exports.closeSync = (function (fs$closeSync) { return function (fd) { - // Note that graceful-fs also retries when fs.closeSync() fails. - // Looks like a bug to me, although it's probably a harmless one. - var rval = fs$closeSync.apply(fs, arguments) - retry() - return rval -}})(fs.closeSync) - -// Only patch fs once, otherwise we'll run into a memory leak if -// graceful-fs is loaded multiple times, such as in test environments that -// reset the loaded modules between tests. -// We look for the string `graceful-fs` from the comment above. This -// way we are not adding any extra properties and it will detect if older -// versions of graceful-fs are installed. -if (!/\bgraceful-fs\b/.test(fs.closeSync.toString())) { - fs.closeSync = module.exports.closeSync; - fs.close = module.exports.close; -} - -function patch (fs) { - // Everything that references the open() function needs to be in here - polyfills(fs) - fs.gracefulify = patch - fs.FileReadStream = ReadStream; // Legacy name. - fs.FileWriteStream = WriteStream; // Legacy name. - fs.createReadStream = createReadStream - fs.createWriteStream = createWriteStream - var fs$readFile = fs.readFile - fs.readFile = readFile - function readFile (path, options, cb) { - if (typeof options === 'function') - cb = options, options = null - - return go$readFile(path, options, cb) - - function go$readFile (path, options, cb) { - return fs$readFile(path, options, function (err) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$readFile, [path, options, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - var fs$writeFile = fs.writeFile - fs.writeFile = writeFile - function writeFile (path, data, options, cb) { - if (typeof options === 'function') - cb = options, options = null - - return go$writeFile(path, data, options, cb) - - function go$writeFile (path, data, options, cb) { - return fs$writeFile(path, data, options, function (err) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$writeFile, [path, data, options, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - var fs$appendFile = fs.appendFile - if (fs$appendFile) - fs.appendFile = appendFile - function appendFile (path, data, options, cb) { - if (typeof options === 'function') - cb = options, options = null - - return go$appendFile(path, data, options, cb) - - function go$appendFile (path, data, options, cb) { - return fs$appendFile(path, data, options, function (err) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$appendFile, [path, data, options, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - var fs$readdir = fs.readdir - fs.readdir = readdir - function readdir (path, options, cb) { - var args = [path] - if (typeof options !== 'function') { - args.push(options) - } else { - cb = options - } - args.push(go$readdir$cb) - - return go$readdir(args) - - function go$readdir$cb (err, files) { - if (files && files.sort) - files.sort() - - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$readdir, [args]]) - - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - } - } - - function go$readdir (args) { - return fs$readdir.apply(fs, args) - } - - if (process.version.substr(0, 4) === 'v0.8') { - var legStreams = legacy(fs) - ReadStream = legStreams.ReadStream - WriteStream = legStreams.WriteStream - } - - var fs$ReadStream = fs.ReadStream - if (fs$ReadStream) { - ReadStream.prototype = Object.create(fs$ReadStream.prototype) - ReadStream.prototype.open = ReadStream$open - } - - var fs$WriteStream = fs.WriteStream - if (fs$WriteStream) { - WriteStream.prototype = Object.create(fs$WriteStream.prototype) - WriteStream.prototype.open = WriteStream$open - } - - fs.ReadStream = ReadStream - fs.WriteStream = WriteStream - - function ReadStream (path, options) { - if (this instanceof ReadStream) - return fs$ReadStream.apply(this, arguments), this - else - return ReadStream.apply(Object.create(ReadStream.prototype), arguments) - } - - function ReadStream$open () { - var that = this - open(that.path, that.flags, that.mode, function (err, fd) { - if (err) { - if (that.autoClose) - that.destroy() - - that.emit('error', err) - } else { - that.fd = fd - that.emit('open', fd) - that.read() - } - }) - } - - function WriteStream (path, options) { - if (this instanceof WriteStream) - return fs$WriteStream.apply(this, arguments), this - else - return WriteStream.apply(Object.create(WriteStream.prototype), arguments) - } - - function WriteStream$open () { - var that = this - open(that.path, that.flags, that.mode, function (err, fd) { - if (err) { - that.destroy() - that.emit('error', err) - } else { - that.fd = fd - that.emit('open', fd) - } - }) - } - - function createReadStream (path, options) { - return new ReadStream(path, options) - } - - function createWriteStream (path, options) { - return new WriteStream(path, options) - } - - var fs$open = fs.open - fs.open = open - function open (path, flags, mode, cb) { - if (typeof mode === 'function') - cb = mode, mode = null - - return go$open(path, flags, mode, cb) - - function go$open (path, flags, mode, cb) { - return fs$open(path, flags, mode, function (err, fd) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$open, [path, flags, mode, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - return fs -} - -function enqueue (elem) { - debug('ENQUEUE', elem[0].name, elem[1]) - queue.push(elem) -} - -function retry () { - var elem = queue.shift() - if (elem) { - debug('RETRY', elem[0].name, elem[1]) - elem[0].apply(null, elem[1]) - } -} diff --git a/truebit-implementation/node_modules/graceful-fs/legacy-streams.js b/truebit-implementation/node_modules/graceful-fs/legacy-streams.js deleted file mode 100644 index d617b50f..00000000 --- a/truebit-implementation/node_modules/graceful-fs/legacy-streams.js +++ /dev/null @@ -1,118 +0,0 @@ -var Stream = require('stream').Stream - -module.exports = legacy - -function legacy (fs) { - return { - ReadStream: ReadStream, - WriteStream: WriteStream - } - - function ReadStream (path, options) { - if (!(this instanceof ReadStream)) return new ReadStream(path, options); - - Stream.call(this); - - var self = this; - - this.path = path; - this.fd = null; - this.readable = true; - this.paused = false; - - this.flags = 'r'; - this.mode = 438; /*=0666*/ - this.bufferSize = 64 * 1024; - - options = options || {}; - - // Mixin options into this - var keys = Object.keys(options); - for (var index = 0, length = keys.length; index < length; index++) { - var key = keys[index]; - this[key] = options[key]; - } - - if (this.encoding) this.setEncoding(this.encoding); - - if (this.start !== undefined) { - if ('number' !== typeof this.start) { - throw TypeError('start must be a Number'); - } - if (this.end === undefined) { - this.end = Infinity; - } else if ('number' !== typeof this.end) { - throw TypeError('end must be a Number'); - } - - if (this.start > this.end) { - throw new Error('start must be <= end'); - } - - this.pos = this.start; - } - - if (this.fd !== null) { - process.nextTick(function() { - self._read(); - }); - return; - } - - fs.open(this.path, this.flags, this.mode, function (err, fd) { - if (err) { - self.emit('error', err); - self.readable = false; - return; - } - - self.fd = fd; - self.emit('open', fd); - self._read(); - }) - } - - function WriteStream (path, options) { - if (!(this instanceof WriteStream)) return new WriteStream(path, options); - - Stream.call(this); - - this.path = path; - this.fd = null; - this.writable = true; - - this.flags = 'w'; - this.encoding = 'binary'; - this.mode = 438; /*=0666*/ - this.bytesWritten = 0; - - options = options || {}; - - // Mixin options into this - var keys = Object.keys(options); - for (var index = 0, length = keys.length; index < length; index++) { - var key = keys[index]; - this[key] = options[key]; - } - - if (this.start !== undefined) { - if ('number' !== typeof this.start) { - throw TypeError('start must be a Number'); - } - if (this.start < 0) { - throw new Error('start must be >= zero'); - } - - this.pos = this.start; - } - - this.busy = false; - this._queue = []; - - if (this.fd === null) { - this._open = fs.open; - this._queue.push([this._open, this.path, this.flags, this.mode, undefined]); - this.flush(); - } - } -} diff --git a/truebit-implementation/node_modules/graceful-fs/package.json b/truebit-implementation/node_modules/graceful-fs/package.json deleted file mode 100644 index 1c92e419..00000000 --- a/truebit-implementation/node_modules/graceful-fs/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "graceful-fs@^4.1.10", - "_id": "graceful-fs@4.1.15", - "_inBundle": false, - "_integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "_location": "/graceful-fs", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "graceful-fs@^4.1.10", - "name": "graceful-fs", - "escapedName": "graceful-fs", - "rawSpec": "^4.1.10", - "saveSpec": null, - "fetchSpec": "^4.1.10" - }, - "_requiredBy": [ - "/decompress", - "/fs-extra", - "/fstream", - "/jsonfile" - ], - "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "_shasum": "ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00", - "_spec": "graceful-fs@^4.1.10", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress", - "bugs": { - "url": "https://github.com/isaacs/node-graceful-fs/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A drop-in replacement for fs, making various improvements.", - "devDependencies": { - "import-fresh": "^2.0.0", - "mkdirp": "^0.5.0", - "rimraf": "^2.2.8", - "tap": "^12.0.1" - }, - "directories": { - "test": "test" - }, - "files": [ - "fs.js", - "graceful-fs.js", - "legacy-streams.js", - "polyfills.js", - "clone.js" - ], - "homepage": "https://github.com/isaacs/node-graceful-fs#readme", - "keywords": [ - "fs", - "module", - "reading", - "retry", - "retries", - "queue", - "error", - "errors", - "handling", - "EMFILE", - "EAGAIN", - "EINVAL", - "EPERM", - "EACCESS" - ], - "license": "ISC", - "main": "graceful-fs.js", - "name": "graceful-fs", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/node-graceful-fs.git" - }, - "scripts": { - "postpublish": "git push origin --all; git push origin --tags", - "postversion": "npm publish", - "preversion": "npm test", - "test": "node test.js | tap -" - }, - "version": "4.1.15" -} diff --git a/truebit-implementation/node_modules/graceful-fs/polyfills.js b/truebit-implementation/node_modules/graceful-fs/polyfills.js deleted file mode 100644 index b964ed08..00000000 --- a/truebit-implementation/node_modules/graceful-fs/polyfills.js +++ /dev/null @@ -1,329 +0,0 @@ -var constants = require('constants') - -var origCwd = process.cwd -var cwd = null - -var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform - -process.cwd = function() { - if (!cwd) - cwd = origCwd.call(process) - return cwd -} -try { - process.cwd() -} catch (er) {} - -var chdir = process.chdir -process.chdir = function(d) { - cwd = null - chdir.call(process, d) -} - -module.exports = patch - -function patch (fs) { - // (re-)implement some things that are known busted or missing. - - // lchmod, broken prior to 0.6.2 - // back-port the fix here. - if (constants.hasOwnProperty('O_SYMLINK') && - process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { - patchLchmod(fs) - } - - // lutimes implementation, or no-op - if (!fs.lutimes) { - patchLutimes(fs) - } - - // https://github.com/isaacs/node-graceful-fs/issues/4 - // Chown should not fail on einval or eperm if non-root. - // It should not fail on enosys ever, as this just indicates - // that a fs doesn't support the intended operation. - - fs.chown = chownFix(fs.chown) - fs.fchown = chownFix(fs.fchown) - fs.lchown = chownFix(fs.lchown) - - fs.chmod = chmodFix(fs.chmod) - fs.fchmod = chmodFix(fs.fchmod) - fs.lchmod = chmodFix(fs.lchmod) - - fs.chownSync = chownFixSync(fs.chownSync) - fs.fchownSync = chownFixSync(fs.fchownSync) - fs.lchownSync = chownFixSync(fs.lchownSync) - - fs.chmodSync = chmodFixSync(fs.chmodSync) - fs.fchmodSync = chmodFixSync(fs.fchmodSync) - fs.lchmodSync = chmodFixSync(fs.lchmodSync) - - fs.stat = statFix(fs.stat) - fs.fstat = statFix(fs.fstat) - fs.lstat = statFix(fs.lstat) - - fs.statSync = statFixSync(fs.statSync) - fs.fstatSync = statFixSync(fs.fstatSync) - fs.lstatSync = statFixSync(fs.lstatSync) - - // if lchmod/lchown do not exist, then make them no-ops - if (!fs.lchmod) { - fs.lchmod = function (path, mode, cb) { - if (cb) process.nextTick(cb) - } - fs.lchmodSync = function () {} - } - if (!fs.lchown) { - fs.lchown = function (path, uid, gid, cb) { - if (cb) process.nextTick(cb) - } - fs.lchownSync = function () {} - } - - // on Windows, A/V software can lock the directory, causing this - // to fail with an EACCES or EPERM if the directory contains newly - // created files. Try again on failure, for up to 60 seconds. - - // Set the timeout this long because some Windows Anti-Virus, such as Parity - // bit9, may lock files for up to a minute, causing npm package install - // failures. Also, take care to yield the scheduler. Windows scheduling gives - // CPU to a busy looping process, which can cause the program causing the lock - // contention to be starved of CPU by node, so the contention doesn't resolve. - if (platform === "win32") { - fs.rename = (function (fs$rename) { return function (from, to, cb) { - var start = Date.now() - var backoff = 0; - fs$rename(from, to, function CB (er) { - if (er - && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 60000) { - setTimeout(function() { - fs.stat(to, function (stater, st) { - if (stater && stater.code === "ENOENT") - fs$rename(from, to, CB); - else - cb(er) - }) - }, backoff) - if (backoff < 100) - backoff += 10; - return; - } - if (cb) cb(er) - }) - }})(fs.rename) - } - - // if read() returns EAGAIN, then just try it again. - fs.read = (function (fs$read) { return function (fd, buffer, offset, length, position, callback_) { - var callback - if (callback_ && typeof callback_ === 'function') { - var eagCounter = 0 - callback = function (er, _, __) { - if (er && er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - return fs$read.call(fs, fd, buffer, offset, length, position, callback) - } - callback_.apply(this, arguments) - } - } - return fs$read.call(fs, fd, buffer, offset, length, position, callback) - }})(fs.read) - - fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) { - var eagCounter = 0 - while (true) { - try { - return fs$readSync.call(fs, fd, buffer, offset, length, position) - } catch (er) { - if (er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - continue - } - throw er - } - } - }})(fs.readSync) - - function patchLchmod (fs) { - fs.lchmod = function (path, mode, callback) { - fs.open( path - , constants.O_WRONLY | constants.O_SYMLINK - , mode - , function (err, fd) { - if (err) { - if (callback) callback(err) - return - } - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - fs.fchmod(fd, mode, function (err) { - fs.close(fd, function(err2) { - if (callback) callback(err || err2) - }) - }) - }) - } - - fs.lchmodSync = function (path, mode) { - var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) - - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - var threw = true - var ret - try { - ret = fs.fchmodSync(fd, mode) - threw = false - } finally { - if (threw) { - try { - fs.closeSync(fd) - } catch (er) {} - } else { - fs.closeSync(fd) - } - } - return ret - } - } - - function patchLutimes (fs) { - if (constants.hasOwnProperty("O_SYMLINK")) { - fs.lutimes = function (path, at, mt, cb) { - fs.open(path, constants.O_SYMLINK, function (er, fd) { - if (er) { - if (cb) cb(er) - return - } - fs.futimes(fd, at, mt, function (er) { - fs.close(fd, function (er2) { - if (cb) cb(er || er2) - }) - }) - }) - } - - fs.lutimesSync = function (path, at, mt) { - var fd = fs.openSync(path, constants.O_SYMLINK) - var ret - var threw = true - try { - ret = fs.futimesSync(fd, at, mt) - threw = false - } finally { - if (threw) { - try { - fs.closeSync(fd) - } catch (er) {} - } else { - fs.closeSync(fd) - } - } - return ret - } - - } else { - fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) } - fs.lutimesSync = function () {} - } - } - - function chmodFix (orig) { - if (!orig) return orig - return function (target, mode, cb) { - return orig.call(fs, target, mode, function (er) { - if (chownErOk(er)) er = null - if (cb) cb.apply(this, arguments) - }) - } - } - - function chmodFixSync (orig) { - if (!orig) return orig - return function (target, mode) { - try { - return orig.call(fs, target, mode) - } catch (er) { - if (!chownErOk(er)) throw er - } - } - } - - - function chownFix (orig) { - if (!orig) return orig - return function (target, uid, gid, cb) { - return orig.call(fs, target, uid, gid, function (er) { - if (chownErOk(er)) er = null - if (cb) cb.apply(this, arguments) - }) - } - } - - function chownFixSync (orig) { - if (!orig) return orig - return function (target, uid, gid) { - try { - return orig.call(fs, target, uid, gid) - } catch (er) { - if (!chownErOk(er)) throw er - } - } - } - - - function statFix (orig) { - if (!orig) return orig - // Older versions of Node erroneously returned signed integers for - // uid + gid. - return function (target, cb) { - return orig.call(fs, target, function (er, stats) { - if (!stats) return cb.apply(this, arguments) - if (stats.uid < 0) stats.uid += 0x100000000 - if (stats.gid < 0) stats.gid += 0x100000000 - if (cb) cb.apply(this, arguments) - }) - } - } - - function statFixSync (orig) { - if (!orig) return orig - // Older versions of Node erroneously returned signed integers for - // uid + gid. - return function (target) { - var stats = orig.call(fs, target) - if (stats.uid < 0) stats.uid += 0x100000000 - if (stats.gid < 0) stats.gid += 0x100000000 - return stats; - } - } - - // ENOSYS means that the fs doesn't support the op. Just ignore - // that, because it doesn't matter. - // - // if there's no getuid, or if getuid() is something other - // than 0, and the error is EINVAL or EPERM, then just ignore - // it. - // - // This specific case is a silent failure in cp, install, tar, - // and most other unix tools that manage permissions. - // - // When running as root, or if other types of errors are - // encountered, then it's strict. - function chownErOk (er) { - if (!er) - return true - - if (er.code === "ENOSYS") - return true - - var nonroot = !process.getuid || process.getuid() !== 0 - if (nonroot) { - if (er.code === "EINVAL" || er.code === "EPERM") - return true - } - - return false - } -} diff --git a/truebit-implementation/node_modules/graceful-readlink/.npmignore b/truebit-implementation/node_modules/graceful-readlink/.npmignore deleted file mode 100644 index 3ac7d16c..00000000 --- a/truebit-implementation/node_modules/graceful-readlink/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -.idea/ -.DS_Store -node_modules/ diff --git a/truebit-implementation/node_modules/graceful-readlink/.travis.yml b/truebit-implementation/node_modules/graceful-readlink/.travis.yml deleted file mode 100644 index baf9be7f..00000000 --- a/truebit-implementation/node_modules/graceful-readlink/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "io.js" diff --git a/truebit-implementation/node_modules/graceful-readlink/LICENSE b/truebit-implementation/node_modules/graceful-readlink/LICENSE deleted file mode 100644 index d1f842f0..00000000 --- a/truebit-implementation/node_modules/graceful-readlink/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Zhiye Li - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/graceful-readlink/README.md b/truebit-implementation/node_modules/graceful-readlink/README.md deleted file mode 100644 index fc63b505..00000000 --- a/truebit-implementation/node_modules/graceful-readlink/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# graceful-readlink -[![NPM Version](http://img.shields.io/npm/v/graceful-readlink.svg?style=flat)](https://www.npmjs.org/package/graceful-readlink) -[![NPM Downloads](https://img.shields.io/npm/dm/graceful-readlink.svg?style=flat)](https://www.npmjs.org/package/graceful-readlink) - - -## Usage - -```js -var readlinkSync = require('graceful-readlink').readlinkSync; -console.log(readlinkSync(f)); -// output -// the file pointed to when `f` is a symbolic link -// the `f` itself when `f` is not a symbolic link -``` -## Licence - -MIT License diff --git a/truebit-implementation/node_modules/graceful-readlink/index.js b/truebit-implementation/node_modules/graceful-readlink/index.js deleted file mode 100644 index 7e9fc70f..00000000 --- a/truebit-implementation/node_modules/graceful-readlink/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var fs = require('fs') - , lstat = fs.lstatSync; - -exports.readlinkSync = function (p) { - if (lstat(p).isSymbolicLink()) { - return fs.readlinkSync(p); - } else { - return p; - } -}; - - diff --git a/truebit-implementation/node_modules/graceful-readlink/package.json b/truebit-implementation/node_modules/graceful-readlink/package.json deleted file mode 100644 index dd3a497b..00000000 --- a/truebit-implementation/node_modules/graceful-readlink/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_from": "graceful-readlink@>= 1.0.0", - "_id": "graceful-readlink@1.0.1", - "_inBundle": false, - "_integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "_location": "/graceful-readlink", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "graceful-readlink@>= 1.0.0", - "name": "graceful-readlink", - "escapedName": "graceful-readlink", - "rawSpec": ">= 1.0.0", - "saveSpec": null, - "fetchSpec": ">= 1.0.0" - }, - "_requiredBy": [ - "/commander" - ], - "_resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "_shasum": "4cafad76bc62f02fa039b2f94e9a3dd3a391a725", - "_spec": "graceful-readlink@>= 1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/commander", - "author": { - "name": "zhiyelee" - }, - "bugs": { - "url": "https://github.com/zhiyelee/graceful-readlink/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "graceful fs.readlink", - "homepage": "https://github.com/zhiyelee/graceful-readlink", - "keywords": [ - "fs.readlink", - "readlink" - ], - "license": "MIT", - "main": "index.js", - "name": "graceful-readlink", - "repository": { - "type": "git", - "url": "git://github.com/zhiyelee/graceful-readlink.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/har-schema/LICENSE b/truebit-implementation/node_modules/har-schema/LICENSE deleted file mode 100644 index ca55c91a..00000000 --- a/truebit-implementation/node_modules/har-schema/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Ahmad Nassri - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/har-schema/README.md b/truebit-implementation/node_modules/har-schema/README.md deleted file mode 100644 index cd0a28e1..00000000 --- a/truebit-implementation/node_modules/har-schema/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# HAR Schema [![version][npm-version]][npm-url] [![License][npm-license]][license-url] - -> JSON Schema for HTTP Archive ([HAR][spec]). - -[![Build Status][travis-image]][travis-url] -[![Downloads][npm-downloads]][npm-url] -[![Code Climate][codeclimate-quality]][codeclimate-url] -[![Coverage Status][codeclimate-coverage]][codeclimate-url] -[![Dependency Status][dependencyci-image]][dependencyci-url] -[![Dependencies][david-image]][david-url] - -## Install - -```bash -npm install --only=production --save har-schema -``` - -## Usage - -Compatible with any [JSON Schema validation tool][validator]. - ----- -> :copyright: [ahmadnassri.com](https://www.ahmadnassri.com/)  ·  -> License: [ISC][license-url]  ·  -> Github: [@ahmadnassri](https://github.com/ahmadnassri)  ·  -> Twitter: [@ahmadnassri](https://twitter.com/ahmadnassri) - -[license-url]: http://choosealicense.com/licenses/isc/ - -[travis-url]: https://travis-ci.org/ahmadnassri/har-schema -[travis-image]: https://img.shields.io/travis/ahmadnassri/har-schema.svg?style=flat-square - -[npm-url]: https://www.npmjs.com/package/har-schema -[npm-license]: https://img.shields.io/npm/l/har-schema.svg?style=flat-square -[npm-version]: https://img.shields.io/npm/v/har-schema.svg?style=flat-square -[npm-downloads]: https://img.shields.io/npm/dm/har-schema.svg?style=flat-square - -[codeclimate-url]: https://codeclimate.com/github/ahmadnassri/har-schema -[codeclimate-quality]: https://img.shields.io/codeclimate/github/ahmadnassri/har-schema.svg?style=flat-square -[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/ahmadnassri/har-schema.svg?style=flat-square - -[david-url]: https://david-dm.org/ahmadnassri/har-schema -[david-image]: https://img.shields.io/david/ahmadnassri/har-schema.svg?style=flat-square - -[dependencyci-url]: https://dependencyci.com/github/ahmadnassri/har-schema -[dependencyci-image]: https://dependencyci.com/github/ahmadnassri/har-schema/badge?style=flat-square - -[spec]: https://github.com/ahmadnassri/har-spec/blob/master/versions/1.2.md -[validator]: https://github.com/ahmadnassri/har-validator diff --git a/truebit-implementation/node_modules/har-schema/lib/afterRequest.json b/truebit-implementation/node_modules/har-schema/lib/afterRequest.json deleted file mode 100644 index 5f525815..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/afterRequest.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$id": "afterRequest.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "optional": true, - "required": [ - "lastAccess", - "eTag", - "hitCount" - ], - "properties": { - "expires": { - "type": "string", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" - }, - "lastAccess": { - "type": "string", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" - }, - "eTag": { - "type": "string" - }, - "hitCount": { - "type": "integer" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/beforeRequest.json b/truebit-implementation/node_modules/har-schema/lib/beforeRequest.json deleted file mode 100644 index c7b5c101..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/beforeRequest.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$id": "beforeRequest.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "optional": true, - "required": [ - "lastAccess", - "eTag", - "hitCount" - ], - "properties": { - "expires": { - "type": "string", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" - }, - "lastAccess": { - "type": "string", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))?" - }, - "eTag": { - "type": "string" - }, - "hitCount": { - "type": "integer" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/browser.json b/truebit-implementation/node_modules/har-schema/lib/browser.json deleted file mode 100644 index d6869f75..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/browser.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$id": "browser.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/cache.json b/truebit-implementation/node_modules/har-schema/lib/cache.json deleted file mode 100644 index 30a7182e..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/cache.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$id": "cache.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "properties": { - "beforeRequest": { - "oneOf": [ - { "type": "null" }, - { "$ref": "beforeRequest.json#" } - ] - }, - "afterRequest": { - "oneOf": [ - { "type": "null" }, - { "$ref": "afterRequest.json#" } - ] - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/content.json b/truebit-implementation/node_modules/har-schema/lib/content.json deleted file mode 100644 index 43944bfa..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/content.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$id": "content.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "size", - "mimeType" - ], - "properties": { - "size": { - "type": "integer" - }, - "compression": { - "type": "integer" - }, - "mimeType": { - "type": "string" - }, - "text": { - "type": "string" - }, - "encoding": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/cookie.json b/truebit-implementation/node_modules/har-schema/lib/cookie.json deleted file mode 100644 index 661f7f32..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/cookie.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "$id": "cookie.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "path": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "expires": { - "type": ["string", "null"], - "format": "date-time" - }, - "httpOnly": { - "type": "boolean" - }, - "secure": { - "type": "boolean" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/creator.json b/truebit-implementation/node_modules/har-schema/lib/creator.json deleted file mode 100644 index 71a75cd4..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/creator.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$id": "creator.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/entry.json b/truebit-implementation/node_modules/har-schema/lib/entry.json deleted file mode 100644 index 18025f43..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/entry.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "$id": "entry.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "optional": true, - "required": [ - "startedDateTime", - "time", - "request", - "response", - "cache", - "timings" - ], - "properties": { - "pageref": { - "type": "string" - }, - "startedDateTime": { - "type": "string", - "format": "date-time", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))" - }, - "time": { - "type": "number", - "min": 0 - }, - "request": { - "$ref": "request.json#" - }, - "response": { - "$ref": "response.json#" - }, - "cache": { - "$ref": "cache.json#" - }, - "timings": { - "$ref": "timings.json#" - }, - "serverIPAddress": { - "type": "string", - "oneOf": [ - { "format": "ipv4" }, - { "format": "ipv6" } - ] - }, - "connection": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/har.json b/truebit-implementation/node_modules/har-schema/lib/har.json deleted file mode 100644 index d1a1de55..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/har.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$id": "har.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "log" - ], - "properties": { - "log": { - "$ref": "log.json#" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/header.json b/truebit-implementation/node_modules/har-schema/lib/header.json deleted file mode 100644 index 103d949a..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/header.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$id": "header.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/index.js b/truebit-implementation/node_modules/har-schema/lib/index.js deleted file mode 100644 index 244c08e0..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -module.exports = { - afterRequest: require('./afterRequest.json'), - beforeRequest: require('./beforeRequest.json'), - browser: require('./browser.json'), - cache: require('./cache.json'), - content: require('./content.json'), - cookie: require('./cookie.json'), - creator: require('./creator.json'), - entry: require('./entry.json'), - har: require('./har.json'), - header: require('./header.json'), - log: require('./log.json'), - page: require('./page.json'), - pageTimings: require('./pageTimings.json'), - postData: require('./postData.json'), - query: require('./query.json'), - request: require('./request.json'), - response: require('./response.json'), - timings: require('./timings.json') -} diff --git a/truebit-implementation/node_modules/har-schema/lib/log.json b/truebit-implementation/node_modules/har-schema/lib/log.json deleted file mode 100644 index c353b40f..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/log.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "$id": "log.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "version", - "creator", - "entries" - ], - "properties": { - "version": { - "type": "string" - }, - "creator": { - "$ref": "creator.json#" - }, - "browser": { - "$ref": "browser.json#" - }, - "pages": { - "type": "array", - "items": { - "$ref": "page.json#" - } - }, - "entries": { - "type": "array", - "items": { - "$ref": "entry.json#" - } - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/page.json b/truebit-implementation/node_modules/har-schema/lib/page.json deleted file mode 100644 index e24a3cee..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/page.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$id": "page.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "optional": true, - "required": [ - "startedDateTime", - "id", - "title", - "pageTimings" - ], - "properties": { - "startedDateTime": { - "type": "string", - "format": "date-time", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))" - }, - "id": { - "type": "string", - "unique": true - }, - "title": { - "type": "string" - }, - "pageTimings": { - "$ref": "pageTimings.json#" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/pageTimings.json b/truebit-implementation/node_modules/har-schema/lib/pageTimings.json deleted file mode 100644 index 130411fe..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/pageTimings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$id": "pageTimings.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "properties": { - "onContentLoad": { - "type": "number", - "min": -1 - }, - "onLoad": { - "type": "number", - "min": -1 - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/postData.json b/truebit-implementation/node_modules/har-schema/lib/postData.json deleted file mode 100644 index 3aa6294a..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/postData.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$id": "postData.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "optional": true, - "required": [ - "mimeType" - ], - "properties": { - "mimeType": { - "type": "string" - }, - "text": { - "type": "string" - }, - "params": { - "type": "array", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "contentType": { - "type": "string" - }, - "comment": { - "type": "string" - } - } - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/query.json b/truebit-implementation/node_modules/har-schema/lib/query.json deleted file mode 100644 index f82d8d8d..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/query.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$id": "query.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/request.json b/truebit-implementation/node_modules/har-schema/lib/request.json deleted file mode 100644 index 0e2566de..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/request.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "$id": "request.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "method", - "url", - "httpVersion", - "cookies", - "headers", - "queryString", - "headersSize", - "bodySize" - ], - "properties": { - "method": { - "type": "string" - }, - "url": { - "type": "string", - "format": "uri" - }, - "httpVersion": { - "type": "string" - }, - "cookies": { - "type": "array", - "items": { - "$ref": "cookie.json#" - } - }, - "headers": { - "type": "array", - "items": { - "$ref": "header.json#" - } - }, - "queryString": { - "type": "array", - "items": { - "$ref": "query.json#" - } - }, - "postData": { - "$ref": "postData.json#" - }, - "headersSize": { - "type": "integer" - }, - "bodySize": { - "type": "integer" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/response.json b/truebit-implementation/node_modules/har-schema/lib/response.json deleted file mode 100644 index ec30f802..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/response.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$id": "response.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "type": "object", - "required": [ - "status", - "statusText", - "httpVersion", - "cookies", - "headers", - "content", - "redirectURL", - "headersSize", - "bodySize" - ], - "properties": { - "status": { - "type": "integer" - }, - "statusText": { - "type": "string" - }, - "httpVersion": { - "type": "string" - }, - "cookies": { - "type": "array", - "items": { - "$ref": "cookie.json#" - } - }, - "headers": { - "type": "array", - "items": { - "$ref": "header.json#" - } - }, - "content": { - "$ref": "content.json#" - }, - "redirectURL": { - "type": "string" - }, - "headersSize": { - "type": "integer" - }, - "bodySize": { - "type": "integer" - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/lib/timings.json b/truebit-implementation/node_modules/har-schema/lib/timings.json deleted file mode 100644 index 5fe7dc7a..00000000 --- a/truebit-implementation/node_modules/har-schema/lib/timings.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$id": "timings.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "required": [ - "send", - "wait", - "receive" - ], - "properties": { - "dns": { - "type": "number", - "min": -1 - }, - "connect": { - "type": "number", - "min": -1 - }, - "blocked": { - "type": "number", - "min": -1 - }, - "send": { - "type": "number", - "min": -1 - }, - "wait": { - "type": "number", - "min": -1 - }, - "receive": { - "type": "number", - "min": -1 - }, - "ssl": { - "type": "number", - "min": -1 - }, - "comment": { - "type": "string" - } - } -} diff --git a/truebit-implementation/node_modules/har-schema/package.json b/truebit-implementation/node_modules/har-schema/package.json deleted file mode 100644 index d1d9fd83..00000000 --- a/truebit-implementation/node_modules/har-schema/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_from": "har-schema@^2.0.0", - "_id": "har-schema@2.0.0", - "_inBundle": false, - "_integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "_location": "/har-schema", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "har-schema@^2.0.0", - "name": "har-schema", - "escapedName": "har-schema", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/har-validator" - ], - "_resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "_shasum": "a94c2224ebcac04782a0d9035521f24735b7ec92", - "_spec": "har-schema@^2.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/har-validator", - "author": { - "name": "Ahmad Nassri", - "email": "ahmad@ahmadnassri.com", - "url": "https://www.ahmadnassri.com/" - }, - "bugs": { - "url": "https://github.com/ahmadnassri/har-schema/issues" - }, - "bundleDependencies": false, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } - }, - "contributors": [ - { - "name": "Evgeny Poberezkin", - "email": "e.poberezkin@me.com" - } - ], - "deprecated": false, - "description": "JSON Schema for HTTP Archive (HAR)", - "devDependencies": { - "ajv": "^5.0.0", - "codeclimate-test-reporter": "^0.4.0", - "cz-conventional-changelog": "^1.2.0", - "echint": "^2.1.0", - "semantic-release": "^6.3.2", - "snazzy": "^5.0.0", - "tap": "^8.0.1" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/ahmadnassri/har-schema", - "keywords": [ - "har", - "http", - "archive", - "JSON", - "schema", - "JSON-schema" - ], - "license": "ISC", - "main": "lib/index.js", - "name": "har-schema", - "repository": { - "type": "git", - "url": "git+https://github.com/ahmadnassri/har-schema.git" - }, - "scripts": { - "codeclimate": "tap --coverage-report=text-lcov | codeclimate-test-reporter", - "coverage": "tap test --reporter silent --coverage", - "pretest": "snazzy && echint", - "semantic-release": "semantic-release pre && npm publish && semantic-release post", - "test": "tap test --reporter spec" - }, - "version": "2.0.0" -} diff --git a/truebit-implementation/node_modules/har-validator/LICENSE b/truebit-implementation/node_modules/har-validator/LICENSE deleted file mode 100644 index a5452662..00000000 --- a/truebit-implementation/node_modules/har-validator/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) 2018 Ahmad Nassri - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/har-validator/README.md b/truebit-implementation/node_modules/har-validator/README.md deleted file mode 100644 index dee6756b..00000000 --- a/truebit-implementation/node_modules/har-validator/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# HAR Validator - -[![License][license-image]][license-url] [![version][npm-image]][npm-url] [![Build Status][circle-image]][circle-url] - -> Extremely fast HTTP Archive ([HAR](https://github.com/ahmadnassri/har-spec/blob/master/versions/1.2.md)) validator using JSON Schema. - -## Install - -```bash -npm install har-validator -``` - -## CLI Usage - -Please refer to [`har-cli`](https://github.com/ahmadnassri/har-cli) for more info. - -## API - -**Note**: as of [`v2.0.0`](https://github.com/ahmadnassri/node-har-validator/releases/tag/v2.0.0) this module defaults to Promise based API. _For backward compatibility with `v1.x` an [async/callback API](docs/async.md) is also provided_ - -- [async API](docs/async.md) -- [callback API](docs/async.md) -- [Promise API](docs/promise.md) _(default)_ - ---- -> Author: [Ahmad Nassri](https://www.ahmadnassri.com/) • -> Github: [@ahmadnassri](https://github.com/ahmadnassri) • -> Twitter: [@ahmadnassri](https://twitter.com/ahmadnassri) - -[license-url]: LICENSE -[license-image]: https://img.shields.io/github/license/ahmadnassri/node-har-validator.svg?style=for-the-badge&logo=circleci - -[circle-url]: https://circleci.com/gh/ahmadnassri/workflows/node-har-validator -[circle-image]: https://img.shields.io/circleci/project/github/ahmadnassri/node-har-validator/master.svg?style=for-the-badge&logo=circleci - -[npm-url]: https://www.npmjs.com/package/har-validator -[npm-image]: https://img.shields.io/npm/v/har-validator.svg?style=for-the-badge&logo=npm diff --git a/truebit-implementation/node_modules/har-validator/lib/async.js b/truebit-implementation/node_modules/har-validator/lib/async.js deleted file mode 100644 index 90701f25..00000000 --- a/truebit-implementation/node_modules/har-validator/lib/async.js +++ /dev/null @@ -1,105 +0,0 @@ -var Ajv = require('ajv') -var HARError = require('./error') -var schemas = require('har-schema') - -var ajv - -function createAjvInstance () { - var ajv = new Ajv({ - allErrors: true - }) - ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json')) - ajv.addSchema(schemas) - - return ajv -} - -function validate (name, data, next) { - data = data || {} - - // validator config - ajv = ajv || createAjvInstance() - - var validate = ajv.getSchema(name + '.json') - - var valid = validate(data) - - // callback? - if (typeof next === 'function') { - return next(!valid ? new HARError(validate.errors) : null, valid) - } - - return valid -} - -exports.afterRequest = function (data, next) { - return validate('afterRequest', data, next) -} - -exports.beforeRequest = function (data, next) { - return validate('beforeRequest', data, next) -} - -exports.browser = function (data, next) { - return validate('browser', data, next) -} - -exports.cache = function (data, next) { - return validate('cache', data, next) -} - -exports.content = function (data, next) { - return validate('content', data, next) -} - -exports.cookie = function (data, next) { - return validate('cookie', data, next) -} - -exports.creator = function (data, next) { - return validate('creator', data, next) -} - -exports.entry = function (data, next) { - return validate('entry', data, next) -} - -exports.har = function (data, next) { - return validate('har', data, next) -} - -exports.header = function (data, next) { - return validate('header', data, next) -} - -exports.log = function (data, next) { - return validate('log', data, next) -} - -exports.page = function (data, next) { - return validate('page', data, next) -} - -exports.pageTimings = function (data, next) { - return validate('pageTimings', data, next) -} - -exports.postData = function (data, next) { - return validate('postData', data, next) -} - -exports.query = function (data, next) { - return validate('query', data, next) -} - -exports.request = function (data, next) { - return validate('request', data, next) -} - -exports.response = function (data, next) { - return validate('response', data, next) -} - -exports.timings = function (data, next) { - return validate('timings', data, next) -} diff --git a/truebit-implementation/node_modules/har-validator/lib/error.js b/truebit-implementation/node_modules/har-validator/lib/error.js deleted file mode 100644 index f2618dc4..00000000 --- a/truebit-implementation/node_modules/har-validator/lib/error.js +++ /dev/null @@ -1,17 +0,0 @@ -function HARError (errors) { - var message = 'validation failed' - - this.name = 'HARError' - this.message = message - this.errors = errors - - if (typeof Error.captureStackTrace === 'function') { - Error.captureStackTrace(this, this.constructor) - } else { - this.stack = (new Error(message)).stack - } -} - -HARError.prototype = Error.prototype - -module.exports = HARError diff --git a/truebit-implementation/node_modules/har-validator/lib/promise.js b/truebit-implementation/node_modules/har-validator/lib/promise.js deleted file mode 100644 index 46f46479..00000000 --- a/truebit-implementation/node_modules/har-validator/lib/promise.js +++ /dev/null @@ -1,102 +0,0 @@ -var Ajv = require('ajv') -var HARError = require('./error') -var schemas = require('har-schema') - -var ajv - -function createAjvInstance () { - var ajv = new Ajv({ - allErrors: true - }) - ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json')) - ajv.addSchema(schemas) - - return ajv -} - -function validate (name, data) { - data = data || {} - - // validator config - ajv = ajv || createAjvInstance() - - var validate = ajv.getSchema(name + '.json') - - return new Promise(function (resolve, reject) { - var valid = validate(data) - - !valid ? reject(new HARError(validate.errors)) : resolve(data) - }) -} - -exports.afterRequest = function (data) { - return validate('afterRequest', data) -} - -exports.beforeRequest = function (data) { - return validate('beforeRequest', data) -} - -exports.browser = function (data) { - return validate('browser', data) -} - -exports.cache = function (data) { - return validate('cache', data) -} - -exports.content = function (data) { - return validate('content', data) -} - -exports.cookie = function (data) { - return validate('cookie', data) -} - -exports.creator = function (data) { - return validate('creator', data) -} - -exports.entry = function (data) { - return validate('entry', data) -} - -exports.har = function (data) { - return validate('har', data) -} - -exports.header = function (data) { - return validate('header', data) -} - -exports.log = function (data) { - return validate('log', data) -} - -exports.page = function (data) { - return validate('page', data) -} - -exports.pageTimings = function (data) { - return validate('pageTimings', data) -} - -exports.postData = function (data) { - return validate('postData', data) -} - -exports.query = function (data) { - return validate('query', data) -} - -exports.request = function (data) { - return validate('request', data) -} - -exports.response = function (data) { - return validate('response', data) -} - -exports.timings = function (data) { - return validate('timings', data) -} diff --git a/truebit-implementation/node_modules/har-validator/package.json b/truebit-implementation/node_modules/har-validator/package.json deleted file mode 100644 index c27acf42..00000000 --- a/truebit-implementation/node_modules/har-validator/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_from": "har-validator@~5.1.0", - "_id": "har-validator@5.1.2", - "_inBundle": false, - "_integrity": "sha512-OFxb5MZXCUMx43X7O8LK4FKggEQx6yC5QPmOcBnYbJ9UjxEcMcrMbaR0af5HZpqeFopw2GwQRQi34ZXI7YLM5w==", - "_location": "/har-validator", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "har-validator@~5.1.0", - "name": "har-validator", - "escapedName": "har-validator", - "rawSpec": "~5.1.0", - "saveSpec": null, - "fetchSpec": "~5.1.0" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.2.tgz", - "_shasum": "a3891924f815c88e41c7f31112079cfef5e129e5", - "_spec": "har-validator@~5.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Ahmad Nassri", - "email": "ahmad@ahmadnassri.com", - "url": "https://www.ahmadnassri.com/" - }, - "bugs": { - "url": "https://github.com/ahmadnassri/node-har-validator/issues" - }, - "bundleDependencies": false, - "dependencies": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "deprecated": false, - "description": "Extremely fast HTTP Archive (HAR) validator using JSON Schema", - "devDependencies": { - "tap": "^12.0.1" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/ahmadnassri/node-har-validator", - "keywords": [ - "har", - "cli", - "ajv", - "http", - "archive", - "validate", - "validator" - ], - "license": "MIT", - "main": "lib/promise.js", - "name": "har-validator", - "repository": { - "type": "git", - "url": "git+https://github.com/ahmadnassri/node-har-validator.git" - }, - "scripts": { - "lint": "npx run-p lint:*", - "lint:deps": "npx updated", - "lint:ec": "npx editorconfig-checker .", - "lint:js": "npx eslint .", - "lint:md": "npx remark --quiet --frail .", - "open:coverage": "opener coverage/lcov-report/index.html", - "test": "tap test --coverage-report=lcov --no-browser" - }, - "version": "5.1.2" -} diff --git a/truebit-implementation/node_modules/has-symbol-support-x/.editorconfig b/truebit-implementation/node_modules/has-symbol-support-x/.editorconfig deleted file mode 100644 index ec24598c..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/.editorconfig +++ /dev/null @@ -1,26 +0,0 @@ -# This file is for unifying the coding style for different editors and IDEs -# editorconfig.org - -# top-most EditorConfig file -root = true - -# every file -[*] -charset = utf-8 -end_of_line = lf -indent_size = 2 -indent_style = space -insert_final_newline = true -trim_trailing_whitespace = true - -# 4 space indentation -[*.py] -indent_style = space -indent_size = 4 - -# Tab indentation (no size specified) -[Makefile] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false diff --git a/truebit-implementation/node_modules/has-symbol-support-x/.eslintignore b/truebit-implementation/node_modules/has-symbol-support-x/.eslintignore deleted file mode 100644 index cdecab19..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -lib/* diff --git a/truebit-implementation/node_modules/has-symbol-support-x/.eslintrc.json b/truebit-implementation/node_modules/has-symbol-support-x/.eslintrc.json deleted file mode 100644 index 7d4d3ddf..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/.eslintrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "root": true, - "extends": [ - "@xotic750/eslint-config-standard-x" - ] -} diff --git a/truebit-implementation/node_modules/has-symbol-support-x/.nvmrc b/truebit-implementation/node_modules/has-symbol-support-x/.nvmrc deleted file mode 100644 index b009dfb9..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -lts/* diff --git a/truebit-implementation/node_modules/has-symbol-support-x/.travis.yml b/truebit-implementation/node_modules/has-symbol-support-x/.travis.yml deleted file mode 100644 index a45e260b..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/.travis.yml +++ /dev/null @@ -1,111 +0,0 @@ -sudo: false -language: node_js -branches: - only: - - master - - /^greenkeeper/.*$/ -notifications: - email: false -node_js: - - "9.6" - - "9.5" - - "9.4" - - "9.3" - - "9.2" - - "9.1" - - "9.0" - - "8.9" - - "8.8" - - "8.7" - - "8.6" - - "8.5" - - "8.4" - - "8.3" - - "8.2" - - "8.1" - - "8.0" - - "7.10" - - "7.9" - - "7.8" - - "7.7" - - "7.6" - - "7.5" - - "7.4" - - "7.3" - - "7.2" - - "7.1" - - "7.0" - - "6.11" - - "6.10" - - "6.9" - - "6.8" - - "6.7" - - "6.6" - - "6.5" - - "6.4" - - "6.3" - - "6.2" - - "6.1" - - "6.0" - - "5.12" - - "5.11" - - "5.10" - - "5.9" - - "5.8" - - "5.7" - - "5.6" - - "5.5" - - "5.4" - - "5.3" - - "5.2" - - "5.1" - - "5.0" - - "4.8" - - "4.7" - - "4.6" - - "4.5" - - "4.4" - - "4.3" - - "4.2" - - "4.1" - - "4.0" - - "iojs-v3.3" - - "iojs-v3.2" - - "iojs-v3.1" - - "iojs-v3.0" - - "iojs-v2.5" - - "iojs-v2.4" - - "iojs-v2.3" - - "iojs-v2.2" - - "iojs-v2.1" - - "iojs-v2.0" - - "iojs-v1.8" - - "iojs-v1.7" - - "iojs-v1.6" - - "iojs-v1.5" - - "iojs-v1.4" - - "iojs-v1.3" - - "iojs-v1.2" - - "iojs-v1.1" - - "iojs-v1.0" - - "0.12" - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ; esac ; fi' - - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5; elif [[ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" =~ ^[4-5]+$ ]]; then npm install -g npm@5.3; else npm install -g npm; fi; fi' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use --delete-prefix "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'npm test' -matrix: - fast_finish: true - allow_failures: - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.6" - - node_js: "0.4" diff --git a/truebit-implementation/node_modules/has-symbol-support-x/.uglifyjsrc.json b/truebit-implementation/node_modules/has-symbol-support-x/.uglifyjsrc.json deleted file mode 100644 index 2d262775..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/.uglifyjsrc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "warnings": false, - "parse": {}, - "compress": { - "keep_fnames": true - }, - "mangle": false, - "output": { - "ascii_only": true, - "beautify": false, - "comments": "some" - }, - "sourceMap": {}, - "nameCache": null, - "toplevel": false, - "ie8": true -} diff --git a/truebit-implementation/node_modules/has-symbol-support-x/LICENSE b/truebit-implementation/node_modules/has-symbol-support-x/LICENSE deleted file mode 100644 index 0d2b266c..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -https://opensource.org/licenses/MIT - -Copyright (c) 2015-present Graham Fairweather. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/has-symbol-support-x/README.md b/truebit-implementation/node_modules/has-symbol-support-x/README.md deleted file mode 100644 index f9503aeb..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/README.md +++ /dev/null @@ -1,36 +0,0 @@ - -Travis status - - -Dependency status - - -devDependency status - - -npm version - - - -## has-symbol-support-x -Tests if ES6 Symbol is supported. - -**Version**: 1.4.2 -**Author**: Xotic750 -**License**: [MIT](<https://opensource.org/licenses/MIT>) -**Copyright**: Xotic750 - - -### `module.exports` : boolean ⏏ -Indicates if `Symbol`exists and creates the correct type. -`true`, if it exists and creates the correct type, otherwise `false`. - -**Kind**: Exported member diff --git a/truebit-implementation/node_modules/has-symbol-support-x/badges.html b/truebit-implementation/node_modules/has-symbol-support-x/badges.html deleted file mode 100644 index a3b8352f..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/badges.html +++ /dev/null @@ -1,20 +0,0 @@ - -Travis status - - -Dependency status - - -devDependency status - - -npm version - diff --git a/truebit-implementation/node_modules/has-symbol-support-x/index.js b/truebit-implementation/node_modules/has-symbol-support-x/index.js deleted file mode 100644 index 20a9581e..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/index.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @file Tests if ES6 Symbol is supported. - * @version 1.4.2 - * @author Xotic750 - * @copyright Xotic750 - * @license {@link MIT} - * @module has-symbol-support-x - */ - -'use strict'; - -/** - * Indicates if `Symbol`exists and creates the correct type. - * `true`, if it exists and creates the correct type, otherwise `false`. - * - * @type boolean - */ -module.exports = typeof Symbol === 'function' && typeof Symbol('') === 'symbol'; diff --git a/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.js b/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.js deleted file mode 100644 index 62a6b14e..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.js +++ /dev/null @@ -1,22 +0,0 @@ -(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.returnExports = f()}})(function(){var define,module,exports;return (function(){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 - * @copyright Xotic750 - * @license {@link MIT} - * @module has-symbol-support-x - */ - -'use strict'; - -/** - * Indicates if `Symbol`exists and creates the correct type. - * `true`, if it exists and creates the correct type, otherwise `false`. - * - * @type boolean - */ -module.exports = typeof Symbol === 'function' && typeof Symbol('') === 'symbol'; - -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.min.js b/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.min.js deleted file mode 100644 index 035d36f6..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.min.js +++ /dev/null @@ -1,10 +0,0 @@ -!function(f){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=f();else if("function"==typeof define&&define.amd)define([],f);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).returnExports=f()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&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||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o - * @copyright Xotic750 - * @license {@link MIT} - * @module has-symbol-support-x - */ -"use strict";module.exports="function"==typeof Symbol&&"symbol"==typeof Symbol("")},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.min.js.map b/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.min.js.map deleted file mode 100644 index b7007554..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/lib/has-symbol-support-x.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["lib/has-symbol-support-x.js"],"names":["f","exports","module","define","amd","window","global","self","this","returnExports","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","Symbol"],"mappings":"CAAA,SAAUA,GAAG,GAAoB,iBAAVC,SAAoC,oBAATC,OAAsBA,OAAOD,QAAQD,SAAS,GAAmB,mBAATG,QAAqBA,OAAOC,IAAKD,UAAUH,OAAO,EAA0B,oBAATK,OAAwBA,OAA+B,oBAATC,OAAwBA,OAA6B,oBAAPC,KAAsBA,KAAYC,MAAOC,cAAgBT,KAAlU,CAAyU,WAAqC,OAAmB,SAASU,EAAEC,EAAEC,EAAEC,GAAG,SAASC,EAAEC,EAAEC,GAAG,IAAIJ,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,IAAIE,EAAkB,mBAATC,SAAqBA,QAAQ,IAAIF,GAAGC,EAAE,OAAOA,EAAEF,GAAE,GAAI,GAAGI,EAAE,OAAOA,EAAEJ,GAAE,GAAI,IAAIf,EAAE,IAAIoB,MAAM,uBAAuBL,EAAE,KAAK,MAAMf,EAAEqB,KAAK,mBAAmBrB,EAAE,IAAIsB,EAAEV,EAAEG,IAAId,YAAYU,EAAEI,GAAG,GAAGQ,KAAKD,EAAErB,QAAQ,SAASS,GAAG,IAAIE,EAAED,EAAEI,GAAG,GAAGL,GAAG,OAAOI,EAAEF,GAAIF,IAAIY,EAAEA,EAAErB,QAAQS,EAAEC,EAAEC,EAAEC,GAAG,OAAOD,EAAEG,GAAGd,QAAkD,IAA1C,IAAIkB,EAAkB,mBAATD,SAAqBA,QAAgBH,EAAE,EAAEA,EAAEF,EAAEW,OAAOT,IAAID,EAAED,EAAEE,IAAI,OAAOD,EAAlc,EAAkdW,GAAG,SAASC,QAAQxB,OAAOD;;;;;;;;;AAUl2B,aAQAC,OAAOD,QAA4B,mBAAX0B,QAA+C,iBAAfA,OAAO,cAEpD,GApB0W,CAoBtW"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/has-symbol-support-x/package.json b/truebit-implementation/node_modules/has-symbol-support-x/package.json deleted file mode 100644 index b662e167..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_from": "has-symbol-support-x@^1.4.1", - "_id": "has-symbol-support-x@1.4.2", - "_inBundle": false, - "_integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "_location": "/has-symbol-support-x", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "has-symbol-support-x@^1.4.1", - "name": "has-symbol-support-x", - "escapedName": "has-symbol-support-x", - "rawSpec": "^1.4.1", - "saveSpec": null, - "fetchSpec": "^1.4.1" - }, - "_requiredBy": [ - "/has-to-string-tag-x" - ], - "_resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "_shasum": "1409f98bc00247da45da67cee0a36f282ff26455", - "_spec": "has-symbol-support-x@^1.4.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/has-to-string-tag-x", - "author": { - "name": "Graham Fairweather", - "email": "xotic750@gmail.com" - }, - "bugs": { - "url": "https://github.com/Xotic750/has-symbol-support-x/issues" - }, - "bundleDependencies": false, - "copyright": "Copyright (c) 2015-present", - "dependencies": {}, - "deprecated": false, - "description": "Tests if ES6 Symbol is supported.", - "devDependencies": { - "@xotic750/eslint-config-standard-x": "^3.1.1", - "ajv": "^6.1.1", - "browserify": "^16.1.0", - "browserify-derequire": "^0.9.4", - "cross-env": "^5.1.3", - "es5-shim": "^4.5.10", - "es6-shim": "^0.35.3", - "es7-shim": "^6.0.0", - "eslint": "^4.18.1", - "eslint-plugin-compat": "^2.2.0", - "eslint-plugin-css-modules": "^2.7.5", - "eslint-plugin-eslint-comments": "^2.0.2", - "eslint-plugin-jsdoc": "^3.5.0", - "eslint-plugin-json": "^1.2.0", - "eslint-plugin-no-use-extend-native": "^0.3.12", - "husky": "^0.13.4", - "jasmine-node": "^1.14.5", - "jsdoc-to-markdown": "^4.0.1", - "json3": "^3.3.2", - "make-jasmine-spec-runner-html": "^1.3.0", - "ncp": "^2.0.0", - "nodemon": "^1.15.1", - "nsp": "^3.2.1", - "parallelshell": "^3.0.2", - "replace-x": "^1.5.0", - "rimraf": "^2.6.2", - "serve": "^6.4.11", - "uglify-js": "^3.3.12" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/Xotic750/has-symbol-support-x", - "keywords": [ - "ES6", - "hasSymbolSupport", - "module", - "javascript", - "nodejs", - "browser" - ], - "license": "MIT", - "main": "index.js", - "name": "has-symbol-support-x", - "repository": { - "type": "git", - "url": "git+https://github.com/Xotic750/has-symbol-support-x.git" - }, - "scripts": { - "browserify": "browserify -p browserify-derequire -e index.js -o lib/has-symbol-support-x.js -u 'crypto' -s returnExports", - "build": "npm run clean && npm run lint && npm run browserify && npm run uglify && npm run docs && npm test && npm run security", - "build:description": "replace-x \" @file .*\" \" @file $(node -p -e \"require('./package.json').description\")\" index.js", - "build:jasmine": "npm run clean:jasmine && make-jasmine-spec-runner-html", - "build:name": "replace-x \" @module .*\" \" @module $(node -p -e \"require('./package.json').name\")\" index.js", - "build:replace": "npm run build:setver && npm run build:name && npm run build:description", - "build:setver": "replace-x \" @version .*\" \" @version $(node -p -e \"require('./package.json').version\")\" index.js", - "clean": "rimraf README.md lib/*", - "clean:all": "npm run clean:jasmine && npm run clean", - "clean:jasmine": "rimraf tests/index.html tests/run.js", - "docs": "npm run docs:badges && jsdoc2md --name-format --example-lang js index.js >> README.md", - "docs:badges": "ncp badges.html README.md && npm run docs:name", - "docs:name": "replace-x \"@{PACKAGE-NAME}\" \"$(node -p -e \"require('./package.json').name\")\" README.md", - "lint": "eslint *.js tests/spec/*.js", - "lint-fix": "npm run lint -- --fix", - "precommit": "npm run production", - "prepush": "npm run production", - "production": "npm run clean:all && npm run build:jasmine && npm run build:replace && npm run build", - "security": "nsp check", - "start": "parallelshell \"serve\" \"nodemon --watch index.js --exec 'npm run build'\"", - "test": "jasmine-node --matchall tests/spec/", - "uglify": "uglifyjs lib/has-symbol-support-x.js -o lib/has-symbol-support-x.min.js --config-file .uglifyjsrc.json" - }, - "version": "1.4.2" -} diff --git a/truebit-implementation/node_modules/has-symbol-support-x/tests/index.html b/truebit-implementation/node_modules/has-symbol-support-x/tests/index.html deleted file mode 100644 index 9c027d41..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/tests/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - Jasmine Spec Runner: has-symbol-support-x - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/truebit-implementation/node_modules/has-symbol-support-x/tests/run.js b/truebit-implementation/node_modules/has-symbol-support-x/tests/run.js deleted file mode 100644 index 76efd699..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/tests/run.js +++ /dev/null @@ -1,25 +0,0 @@ -/* global window, jasmine */ -/* eslint strict: 0 */ -(function () { - var jasmineEnv = jasmine.getEnv(); - jasmineEnv.updateInterval = 1000; - - var trivialReporter = new jasmine.TrivialReporter(); - - jasmineEnv.addReporter(trivialReporter); - - jasmineEnv.specFilter = function (spec) { - return trivialReporter.specFilter(spec); - }; - - var currentWindowOnload = window.onload; - var execJasmine = function () { - jasmineEnv.execute(); - }; - window.onload = function () { - if (currentWindowOnload) { - currentWindowOnload(); - } - execJasmine(); - }; -}()); diff --git a/truebit-implementation/node_modules/has-symbol-support-x/tests/spec/test.js b/truebit-implementation/node_modules/has-symbol-support-x/tests/spec/test.js deleted file mode 100644 index 08689734..00000000 --- a/truebit-implementation/node_modules/has-symbol-support-x/tests/spec/test.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var hasSymbolSupport; -if (typeof module === 'object' && module.exports) { - require('es5-shim'); - require('es5-shim/es5-sham'); - if (typeof JSON === 'undefined') { - JSON = {}; - } - require('json3').runInContext(null, JSON); - require('es6-shim'); - var es7 = require('es7-shim'); - Object.keys(es7).forEach(function (key) { - var obj = es7[key]; - if (typeof obj.shim === 'function') { - obj.shim(); - } - }); - hasSymbolSupport = require('../../index.js'); -} else { - hasSymbolSupport = returnExports; -} - -describe('Basic tests', function () { - it('results should match', function () { - var expected = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'; - expect(hasSymbolSupport).toBe(expected); - }); -}); diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/.editorconfig b/truebit-implementation/node_modules/has-to-string-tag-x/.editorconfig deleted file mode 100644 index ec24598c..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/.editorconfig +++ /dev/null @@ -1,26 +0,0 @@ -# This file is for unifying the coding style for different editors and IDEs -# editorconfig.org - -# top-most EditorConfig file -root = true - -# every file -[*] -charset = utf-8 -end_of_line = lf -indent_size = 2 -indent_style = space -insert_final_newline = true -trim_trailing_whitespace = true - -# 4 space indentation -[*.py] -indent_style = space -indent_size = 4 - -# Tab indentation (no size specified) -[Makefile] -indent_style = tab - -[*.md] -trim_trailing_whitespace = false diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/.eslintignore b/truebit-implementation/node_modules/has-to-string-tag-x/.eslintignore deleted file mode 100644 index cdecab19..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -lib/* diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/.eslintrc.json b/truebit-implementation/node_modules/has-to-string-tag-x/.eslintrc.json deleted file mode 100644 index 7d4d3ddf..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/.eslintrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "root": true, - "extends": [ - "@xotic750/eslint-config-standard-x" - ] -} diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/.nvmrc b/truebit-implementation/node_modules/has-to-string-tag-x/.nvmrc deleted file mode 100644 index b009dfb9..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -lts/* diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/.travis.yml b/truebit-implementation/node_modules/has-to-string-tag-x/.travis.yml deleted file mode 100644 index 1304ed4c..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/.travis.yml +++ /dev/null @@ -1,93 +0,0 @@ -sudo: false -language: node_js -branches: - only: - - master - - /^greenkeeper/.*$/ -notifications: - email: false -node_js: - - "8.4" - - "8.3" - - "8.2" - - "8.1" - - "8.0" - - "7.10" - - "7.9" - - "7.8" - - "7.7" - - "7.6" - - "7.5" - - "7.4" - - "7.3" - - "7.2" - - "7.1" - - "7.0" - - "6.9" - - "6.8" - - "6.7" - - "6.6" - - "6.5" - - "6.4" - - "6.3" - - "6.2" - - "6.1" - - "6.0" - - "5.12" - - "5.11" - - "5.10" - - "5.9" - - "5.8" - - "5.7" - - "5.6" - - "5.5" - - "5.4" - - "5.3" - - "5.2" - - "5.1" - - "5.0" - - "4.4" - - "4.3" - - "4.2" - - "4.1" - - "4.0" - - "iojs-v3.3" - - "iojs-v3.2" - - "iojs-v3.1" - - "iojs-v3.0" - - "iojs-v2.5" - - "iojs-v2.4" - - "iojs-v2.3" - - "iojs-v2.2" - - "iojs-v2.1" - - "iojs-v2.0" - - "iojs-v1.8" - - "iojs-v1.7" - - "iojs-v1.6" - - "iojs-v1.5" - - "iojs-v1.4" - - "iojs-v1.3" - - "iojs-v1.2" - - "iojs-v1.1" - - "iojs-v1.0" - - "0.12" - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi' - - 'if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use --delete-prefix "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'npm test' -matrix: - fast_finish: true - allow_failures: - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.6" - - node_js: "0.4" diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/.uglifyjsrc.json b/truebit-implementation/node_modules/has-to-string-tag-x/.uglifyjsrc.json deleted file mode 100644 index 2d262775..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/.uglifyjsrc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "warnings": false, - "parse": {}, - "compress": { - "keep_fnames": true - }, - "mangle": false, - "output": { - "ascii_only": true, - "beautify": false, - "comments": "some" - }, - "sourceMap": {}, - "nameCache": null, - "toplevel": false, - "ie8": true -} diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/LICENSE b/truebit-implementation/node_modules/has-to-string-tag-x/LICENSE deleted file mode 100644 index 73c46690..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -https://opensource.org/licenses/MIT - -Copyright (c) 2015-2017 Graham Fairweather. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/README.md b/truebit-implementation/node_modules/has-to-string-tag-x/README.md deleted file mode 100644 index b545e807..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/README.md +++ /dev/null @@ -1,37 +0,0 @@ - -Travis status - - -Dependency status - - -devDependency status - - -npm version - - - -## has-to-string-tag-x -Tests if ES6 @@toStringTag is supported. - -**See**: [26.3.1 @@toStringTag](http://www.ecma-international.org/ecma-262/6.0/#sec-@@tostringtag) -**Version**: 1.4.1 -**Author**: Xotic750 -**License**: [MIT](<https://opensource.org/licenses/MIT>) -**Copyright**: Xotic750 - - -### `module.exports` : boolean ⏏ -Indicates if `Symbol.toStringTag`exists and is the correct type. -`true`, if it exists and is the correct type, otherwise `false`. - -**Kind**: Exported member diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/badges.html b/truebit-implementation/node_modules/has-to-string-tag-x/badges.html deleted file mode 100644 index a3b8352f..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/badges.html +++ /dev/null @@ -1,20 +0,0 @@ - -Travis status - - -Dependency status - - -devDependency status - - -npm version - diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/index.js b/truebit-implementation/node_modules/has-to-string-tag-x/index.js deleted file mode 100644 index abc608df..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/index.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @file Tests if ES6 @@toStringTag is supported. - * @see {@link http://www.ecma-international.org/ecma-262/6.0/#sec-@@tostringtag|26.3.1 @@toStringTag} - * @version 1.4.1 - * @author Xotic750 - * @copyright Xotic750 - * @license {@link MIT} - * @module has-to-string-tag-x - */ - -'use strict'; - -/** - * Indicates if `Symbol.toStringTag`exists and is the correct type. - * `true`, if it exists and is the correct type, otherwise `false`. - * - * @type boolean - */ -module.exports = require('has-symbol-support-x') && typeof Symbol.toStringTag === 'symbol'; diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.js b/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.js deleted file mode 100644 index 52ef8496..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.js +++ /dev/null @@ -1,43 +0,0 @@ -(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.returnExports = 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 - * @copyright Xotic750 - * @license {@link MIT} - * @module has-to-string-tag-x - */ - -'use strict'; - -/** - * Indicates if `Symbol.toStringTag`exists and is the correct type. - * `true`, if it exists and is the correct type, otherwise `false`. - * - * @type boolean - */ -module.exports = _dereq_('has-symbol-support-x') && typeof Symbol.toStringTag === 'symbol'; - -},{"has-symbol-support-x":2}],2:[function(_dereq_,module,exports){ -/** - * @file Tests if ES6 Symbol is supported. - * @version 1.4.1 - * @author Xotic750 - * @copyright Xotic750 - * @license {@link MIT} - * @module has-symbol-support-x - */ - -'use strict'; - -/** - * Indicates if `Symbol`exists and creates the correct type. - * `true`, if it exists and creates the correct type, otherwise `false`. - * - * @type boolean - */ -module.exports = typeof Symbol === 'function' && typeof Symbol('') === 'symbol'; - -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.min.js b/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.min.js deleted file mode 100644 index 307f21a6..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.min.js +++ /dev/null @@ -1,18 +0,0 @@ -!function(f){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=f();else if("function"==typeof define&&define.amd)define([],f);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).returnExports=f()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&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||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o - * @copyright Xotic750 - * @license {@link MIT} - * @module has-to-string-tag-x - */ -"use strict";module.exports=_dereq_("has-symbol-support-x")&&"symbol"==typeof Symbol.toStringTag},{"has-symbol-support-x":2}],2:[function(_dereq_,module,exports){/** - * @file Tests if ES6 Symbol is supported. - * @version 1.4.1 - * @author Xotic750 - * @copyright Xotic750 - * @license {@link MIT} - * @module has-symbol-support-x - */ -"use strict";module.exports="function"==typeof Symbol&&"symbol"==typeof Symbol("")},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.min.js.map b/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.min.js.map deleted file mode 100644 index 772a237b..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/lib/has-to-string-tag-x.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["lib/has-to-string-tag-x.js"],"names":["f","exports","module","define","amd","window","global","self","this","returnExports","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","Symbol","toStringTag","has-symbol-support-x","2"],"mappings":"CAAA,SAAUA,GAAG,GAAoB,iBAAVC,SAAoC,oBAATC,OAAsBA,OAAOD,QAAQD,SAAS,GAAmB,mBAATG,QAAqBA,OAAOC,IAAKD,UAAUH,OAAO,EAA0B,oBAATK,OAAwBA,OAA+B,oBAATC,OAAwBA,OAA6B,oBAAPC,KAAsBA,KAAYC,MAAOC,cAAgBT,KAAlU,CAAyU,WAAqC,OAAO,SAAUU,EAAEC,EAAEC,EAAEC,GAAG,SAASC,EAAEC,EAAEC,GAAG,IAAIJ,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,IAAIE,EAAkB,mBAATC,SAAqBA,QAAQ,IAAIF,GAAGC,EAAE,OAAOA,EAAEF,GAAE,GAAI,GAAGI,EAAE,OAAOA,EAAEJ,GAAE,GAAI,IAAIf,EAAE,IAAIoB,MAAM,uBAAuBL,EAAE,KAAK,MAAMf,EAAEqB,KAAK,mBAAmBrB,EAAE,IAAIsB,EAAEV,EAAEG,IAAId,YAAYU,EAAEI,GAAG,GAAGQ,KAAKD,EAAErB,QAAQ,SAASS,GAAG,IAAIE,EAAED,EAAEI,GAAG,GAAGL,GAAG,OAAOI,EAAEF,GAAIF,IAAIY,EAAEA,EAAErB,QAAQS,EAAEC,EAAEC,EAAEC,GAAG,OAAOD,EAAEG,GAAGd,QAAkD,IAAI,IAA1CkB,EAAkB,mBAATD,SAAqBA,QAAgBH,EAAE,EAAEA,EAAEF,EAAEW,OAAOT,IAAID,EAAED,EAAEE,IAAI,OAAOD,EAAvb,EAA4bW,GAAG,SAASC,QAAQxB,OAAOD;;;;;;;;;AAW50B,aAQAC,OAAOD,QAAUyB,QAAQ,yBAAyD,iBAAvBC,OAAOC,cAE/DC,uBAAuB,IAAIC,GAAG,SAASJ,QAAQxB,OAAOD;;;;;;;;AAUzD,aAQAC,OAAOD,QAA4B,mBAAX0B,QAA+C,iBAAfA,OAAO,cAEpD,IAAI"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/has-to-string-tag-x/package.json b/truebit-implementation/node_modules/has-to-string-tag-x/package.json deleted file mode 100644 index b21ddc1b..00000000 --- a/truebit-implementation/node_modules/has-to-string-tag-x/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "_from": "has-to-string-tag-x@^1.2.0", - "_id": "has-to-string-tag-x@1.4.1", - "_inBundle": false, - "_integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "_location": "/has-to-string-tag-x", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "has-to-string-tag-x@^1.2.0", - "name": "has-to-string-tag-x", - "escapedName": "has-to-string-tag-x", - "rawSpec": "^1.2.0", - "saveSpec": null, - "fetchSpec": "^1.2.0" - }, - "_requiredBy": [ - "/isurl" - ], - "_resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "_shasum": "a045ab383d7b4b2012a00148ab0aa5f290044d4d", - "_spec": "has-to-string-tag-x@^1.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/isurl", - "author": { - "name": "Graham Fairweather", - "email": "xotic750@gmail.com" - }, - "bugs": { - "url": "https://github.com/Xotic750/has-to-string-tag-x/issues" - }, - "bundleDependencies": false, - "copyright": "Copyright (c) 2015-2017", - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "deprecated": false, - "description": "Tests if ES6 @@toStringTag is supported.", - "devDependencies": { - "@xotic750/eslint-config-standard-x": "^2.2.1", - "browserify": "^14.4.0", - "browserify-derequire": "^0.9.4", - "cross-env": "^5.0.1", - "es5-shim": "^4.5.9", - "es6-shim": "^0.35.3", - "es7-shim": "^6.0.0", - "eslint": "^4.2.0", - "eslint-plugin-compat": "^1.0.4", - "eslint-plugin-css-modules": "^2.7.2", - "eslint-plugin-eslint-comments": "^1.0.2", - "eslint-plugin-jsdoc": "^3.1.1", - "eslint-plugin-json": "^1.2.0", - "eslint-plugin-no-use-extend-native": "^0.3.12", - "husky": "^0.13.4", - "jasmine-node": "^1.14.5", - "jsdoc-to-markdown": "^3.0.0", - "json3": "^3.3.2", - "make-jasmine-spec-runner-html": "^1.3.0", - "ncp": "^2.0.0", - "nodemon": "^1.11.0", - "nsp": "^2.6.3", - "parallelshell": "^3.0.1", - "replace-x": "^1.5.0", - "rimraf": "^2.6.1", - "serve": "^6.0.2", - "uglify-js": "^3.0.24" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/Xotic750/has-to-string-tag-x", - "keywords": [ - "ES6", - "hasToStringTag", - "module", - "javascript", - "nodejs", - "browser" - ], - "license": "MIT", - "main": "index.js", - "name": "has-to-string-tag-x", - "repository": { - "type": "git", - "url": "git+https://github.com/Xotic750/has-to-string-tag-x.git" - }, - "scripts": { - "browserify": "browserify -p browserify-derequire -e index.js -o lib/has-to-string-tag-x.js -u 'crypto' -s returnExports", - "build": "npm run clean && npm run lint && npm run browserify && npm run uglify && npm run docs && npm test && npm run security", - "build:description": "replace-x \" @file .*\" \" @file $(node -p -e \"require('./package.json').description\")\" index.js", - "build:jasmine": "npm run clean:jasmine && make-jasmine-spec-runner-html", - "build:name": "replace-x \" @module .*\" \" @module $(node -p -e \"require('./package.json').name\")\" index.js", - "build:replace": "npm run build:setver && npm run build:name && npm run build:description", - "build:setver": "replace-x \" @version .*\" \" @version $(node -p -e \"require('./package.json').version\")\" index.js", - "clean": "rimraf README.md lib/*", - "clean:all": "npm run clean:jasmine && npm run clean", - "clean:jasmine": "rimraf tests/index.html tests/run.js", - "docs": "npm run docs:badges && jsdoc2md --name-format --example-lang js index.js >> README.md", - "docs:badges": "ncp badges.html README.md && npm run docs:name", - "docs:name": "replace-x \"@{PACKAGE-NAME}\" \"$(node -p -e \"require('./package.json').name\")\" README.md", - "lint": "eslint *.js tests/spec/*.js", - "lint-fix": "npm run lint -- --fix", - "precommit": "npm run production", - "prepush": "npm run production", - "production": "npm run clean:all && npm run build:jasmine && npm run build:replace && npm run build", - "security": "nsp check", - "start": "parallelshell \"serve\" \"nodemon --watch index.js --exec 'npm run build'\"", - "test": "jasmine-node --matchall tests/spec/", - "uglify": "uglifyjs lib/has-to-string-tag-x.js -o lib/has-to-string-tag-x.min.js --config-file .uglifyjsrc.json" - }, - "version": "1.4.1" -} diff --git a/truebit-implementation/node_modules/hash-base/LICENSE b/truebit-implementation/node_modules/hash-base/LICENSE deleted file mode 100644 index 6f02ae80..00000000 --- a/truebit-implementation/node_modules/hash-base/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Kirill Fomichev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/hash-base/README.md b/truebit-implementation/node_modules/hash-base/README.md deleted file mode 100644 index 83ae2edc..00000000 --- a/truebit-implementation/node_modules/hash-base/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# hash-base - -[![NPM Package](https://img.shields.io/npm/v/hash-base.svg?style=flat-square)](https://www.npmjs.org/package/hash-base) -[![Build Status](https://img.shields.io/travis/crypto-browserify/hash-base.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/hash-base) -[![Dependency status](https://img.shields.io/david/crypto-browserify/hash-base.svg?style=flat-square)](https://david-dm.org/crypto-browserify/hash-base#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -Abstract base class to inherit from if you want to create streams implementing the same API as node crypto [Hash][1] (for [Cipher][2] / [Decipher][3] check [crypto-browserify/cipher-base][4]). - -## Example - -```js -const HashBase = require('hash-base') -const inherits = require('inherits') - -// our hash function is XOR sum of all bytes -function MyHash () { - HashBase.call(this, 1) // in bytes - - this._sum = 0x00 -} - -inherits(MyHash, HashBase) - -MyHash.prototype._update = function () { - for (let i = 0; i < this._block.length; ++i) this._sum ^= this._block[i] -} - -MyHash.prototype._digest = function () { - return this._sum -} - -const data = Buffer.from([ 0x00, 0x42, 0x01 ]) -const hash = new MyHash().update(data).digest() -console.log(hash) // => 67 -``` -You also can check [source code](index.js) or [crypto-browserify/md5.js][5] - -## LICENSE - -MIT - -[1]: https://nodejs.org/api/crypto.html#crypto_class_hash -[2]: https://nodejs.org/api/crypto.html#crypto_class_cipher -[3]: https://nodejs.org/api/crypto.html#crypto_class_decipher -[4]: https://github.com/crypto-browserify/cipher-base -[5]: https://github.com/crypto-browserify/md5.js diff --git a/truebit-implementation/node_modules/hash-base/index.js b/truebit-implementation/node_modules/hash-base/index.js deleted file mode 100644 index bf788daa..00000000 --- a/truebit-implementation/node_modules/hash-base/index.js +++ /dev/null @@ -1,95 +0,0 @@ -'use strict' -var Buffer = require('safe-buffer').Buffer -var Transform = require('stream').Transform -var inherits = require('inherits') - -function throwIfNotStringOrBuffer (val, prefix) { - if (!Buffer.isBuffer(val) && typeof val !== 'string') { - throw new TypeError(prefix + ' must be a string or a buffer') - } -} - -function HashBase (blockSize) { - Transform.call(this) - - this._block = Buffer.allocUnsafe(blockSize) - this._blockSize = blockSize - this._blockOffset = 0 - this._length = [0, 0, 0, 0] - - this._finalized = false -} - -inherits(HashBase, Transform) - -HashBase.prototype._transform = function (chunk, encoding, callback) { - var error = null - try { - this.update(chunk, encoding) - } catch (err) { - error = err - } - - callback(error) -} - -HashBase.prototype._flush = function (callback) { - var error = null - try { - this.push(this.digest()) - } catch (err) { - error = err - } - - callback(error) -} - -HashBase.prototype.update = function (data, encoding) { - throwIfNotStringOrBuffer(data, 'Data') - if (this._finalized) throw new Error('Digest already called') - if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding) - - // consume data - var block = this._block - var offset = 0 - while (this._blockOffset + data.length - offset >= this._blockSize) { - for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] - this._update() - this._blockOffset = 0 - } - while (offset < data.length) block[this._blockOffset++] = data[offset++] - - // update length - for (var j = 0, carry = data.length * 8; carry > 0; ++j) { - this._length[j] += carry - carry = (this._length[j] / 0x0100000000) | 0 - if (carry > 0) this._length[j] -= 0x0100000000 * carry - } - - return this -} - -HashBase.prototype._update = function () { - throw new Error('_update is not implemented') -} - -HashBase.prototype.digest = function (encoding) { - if (this._finalized) throw new Error('Digest already called') - this._finalized = true - - var digest = this._digest() - if (encoding !== undefined) digest = digest.toString(encoding) - - // reset state - this._block.fill(0) - this._blockOffset = 0 - for (var i = 0; i < 4; ++i) this._length[i] = 0 - - return digest -} - -HashBase.prototype._digest = function () { - throw new Error('_digest is not implemented') -} - -module.exports = HashBase diff --git a/truebit-implementation/node_modules/hash-base/package.json b/truebit-implementation/node_modules/hash-base/package.json deleted file mode 100644 index d09015e7..00000000 --- a/truebit-implementation/node_modules/hash-base/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "hash-base@^3.0.0", - "_id": "hash-base@3.0.4", - "_inBundle": false, - "_integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "_location": "/hash-base", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "hash-base@^3.0.0", - "name": "hash-base", - "escapedName": "hash-base", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/md5.js", - "/ripemd160" - ], - "_resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "_shasum": "5fc8686847ecd73499403319a6b0a3f3f6ae4918", - "_spec": "hash-base@^3.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/md5.js", - "author": { - "name": "Kirill Fomichev", - "email": "fanatid@ya.ru", - "url": "https://github.com/fanatid" - }, - "bugs": { - "url": "https://github.com/crypto-browserify/hash-base/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "deprecated": false, - "description": "abstract base class for hash-streams", - "devDependencies": { - "nyc": "^8.3.2", - "standard": "*", - "tape": "^4.2.0" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/crypto-browserify/hash-base", - "keywords": [ - "hash", - "stream" - ], - "license": "MIT", - "main": "index.js", - "name": "hash-base", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/hash-base.git" - }, - "scripts": { - "coverage": "nyc node test/*.js", - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "node test/*.js" - }, - "version": "3.0.4" -} diff --git a/truebit-implementation/node_modules/hash.js/.eslintrc.js b/truebit-implementation/node_modules/hash.js/.eslintrc.js deleted file mode 100644 index 614f8fc4..00000000 --- a/truebit-implementation/node_modules/hash.js/.eslintrc.js +++ /dev/null @@ -1,41 +0,0 @@ -module.exports = { - 'env': { - 'browser': true, - 'commonjs': true, - 'node': true, - 'es6': true - }, - 'parserOptions': { - 'ecmaVersion': 8 - }, - 'extends': 'eslint:recommended', - 'rules': { - 'indent': [ - 'error', - 2, - { - 'FunctionDeclaration': { - 'parameters': 'first' - }, - 'FunctionExpression': { - 'parameters': 'first' - }, - 'CallExpression': { - 'arguments': 'first' - } - } - ], - 'linebreak-style': [ - 'error', - 'unix' - ], - 'quotes': [ - 'error', - 'single' - ], - 'semi': [ - 'error', - 'always' - ] - } -}; diff --git a/truebit-implementation/node_modules/hash.js/.travis.yml b/truebit-implementation/node_modules/hash.js/.travis.yml deleted file mode 100644 index 92b8cdd4..00000000 --- a/truebit-implementation/node_modules/hash.js/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -sudo: false -language: node_js -node_js: - - "4" - - "6" - - "stable" -branches: - only: - - master diff --git a/truebit-implementation/node_modules/hash.js/README.md b/truebit-implementation/node_modules/hash.js/README.md deleted file mode 100644 index 006d3bbf..00000000 --- a/truebit-implementation/node_modules/hash.js/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# hash.js [![Build Status](https://secure.travis-ci.org/indutny/hash.js.svg)](http://travis-ci.org/indutny/hash.js) - -Just a bike-shed. - -## Install - -```sh -npm install hash.js -``` - -## Usage - -```js -var hash = require('hash.js') -hash.sha256().update('abc').digest('hex') -``` - -## Selective hash usage - -```js -var sha512 = require('hash.js/lib/hash/sha/512'); -sha512().update('abc').digest('hex'); -``` - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2014. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/hash.js/lib/hash.d.ts b/truebit-implementation/node_modules/hash.js/lib/hash.d.ts deleted file mode 100644 index abbb5c53..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash.d.ts +++ /dev/null @@ -1,106 +0,0 @@ -declare var hash: Hash; - -declare module "hash.js" { - export = hash; -} - -interface BlockHash { - hmacStrength: number - padLength: number - endian: 'big' | 'little' -} - -interface MessageDigest { - blockSize: number - outSize: number - update(msg: any, enc?: 'hex'): T - digest(): number[] - digest(enc: 'hex'): string -} - -interface Hash { - hmac: HmacConstructor - ripemd: RipemdSet - ripemd160: Ripemd160Constructor - sha: ShaSet - sha1: Sha1Constructor - sha224: Sha224Constructor - sha256: Sha256Constructor - sha384: Sha384Constructor - sha512: Sha512Constructor - utils: Utils -} - -interface Utils { - toArray(msg: any, enc: 'hex'): Array - toHex(msg: any): string -} - -interface RipemdSet { - ripemd160: Ripemd160Constructor -} - -interface ShaSet { - sha1: Sha1Constructor - sha224: Sha224Constructor - sha256: Sha256Constructor - sha384: Sha384Constructor - sha512: Sha512Constructor -} - -interface HmacConstructor { (hash: BlockHash, key: any, enc?: 'hex'): Hmac } -interface Ripemd160Constructor { (): Ripemd160 } -interface Sha1Constructor { (): Sha1; } -interface Sha224Constructor { (): Sha224; } -interface Sha256Constructor { (): Sha256; } -interface Sha384Constructor { (): Sha384; } -interface Sha512Constructor { (): Sha512; } - -interface Hmac extends MessageDigest { - blockSize: 512 - outSize: 160 -} - -interface Ripemd160 extends BlockHash, MessageDigest { - blockSize: 512 - hmacStrength: 192 - outSize: 160 - padLength: 64 - endian: 'little' -} - -interface Sha1 extends BlockHash, MessageDigest { - blockSize: 512 - hmacStrength: 80 - outSize: 160 - padLength: 64 - endian: 'big' -} -interface Sha224 extends BlockHash, MessageDigest { - blockSize: 512 - hmacStrength: 192 - outSize: 224 - padLength: 64 - endian: 'big' -} -interface Sha256 extends BlockHash, MessageDigest { - blockSize: 512 - hmacStrength: 192 - outSize: 256 - padLength: 64 - endian: 'big' -} -interface Sha384 extends BlockHash, MessageDigest { - blockSize: 1024 - hmacStrength: 192 - outSize: 384 - padLength: 128 - endian: 'big' -} -interface Sha512 extends BlockHash, MessageDigest { - blockSize: 1024 - hmacStrength: 192 - outSize: 512 - padLength: 128 - endian: 'big' -} diff --git a/truebit-implementation/node_modules/hash.js/lib/hash.js b/truebit-implementation/node_modules/hash.js/lib/hash.js deleted file mode 100644 index f59b6730..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash.js +++ /dev/null @@ -1,15 +0,0 @@ -var hash = exports; - -hash.utils = require('./hash/utils'); -hash.common = require('./hash/common'); -hash.sha = require('./hash/sha'); -hash.ripemd = require('./hash/ripemd'); -hash.hmac = require('./hash/hmac'); - -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/common.js b/truebit-implementation/node_modules/hash.js/lib/hash/common.js deleted file mode 100644 index c49f4763..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/common.js +++ /dev/null @@ -1,92 +0,0 @@ -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; - - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; - -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; - - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; - - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; - - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); - } - - return this; -}; - -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); - - return this._digest(enc); -}; - -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; - - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; - - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - - for (t = 8; t < this.padLength; t++) - res[i++] = 0; - } - - return res; -}; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/hmac.js b/truebit-implementation/node_modules/hash.js/lib/hash/hmac.js deleted file mode 100644 index faff12d3..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/hmac.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; - - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; - -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); - - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); - - for (i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); - - // 0x36 ^ 0x5c = 0x6a - for (i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; - -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; -}; - -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/ripemd.js b/truebit-implementation/node_modules/hash.js/lib/hash/ripemd.js deleted file mode 100644 index 2dcdff27..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/ripemd.js +++ /dev/null @@ -1,146 +0,0 @@ -'use strict'; - -var utils = require('./utils'); -var common = require('./common'); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_3 = utils.sum32_3; -var sum32_4 = utils.sum32_4; -var BlockHash = common.BlockHash; - -function RIPEMD160() { - if (!(this instanceof RIPEMD160)) - return new RIPEMD160(); - - BlockHash.call(this); - - this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; - this.endian = 'little'; -} -utils.inherits(RIPEMD160, BlockHash); -exports.ripemd160 = RIPEMD160; - -RIPEMD160.blockSize = 512; -RIPEMD160.outSize = 160; -RIPEMD160.hmacStrength = 192; -RIPEMD160.padLength = 64; - -RIPEMD160.prototype._update = function update(msg, start) { - var A = this.h[0]; - var B = this.h[1]; - var C = this.h[2]; - var D = this.h[3]; - var E = this.h[4]; - var Ah = A; - var Bh = B; - var Ch = C; - var Dh = D; - var Eh = E; - for (var j = 0; j < 80; j++) { - var T = sum32( - rotl32( - sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), - s[j]), - E); - A = E; - E = D; - D = rotl32(C, 10); - C = B; - B = T; - T = sum32( - rotl32( - sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), - sh[j]), - Eh); - Ah = Eh; - Eh = Dh; - Dh = rotl32(Ch, 10); - Ch = Bh; - Bh = T; - } - T = sum32_3(this.h[1], C, Dh); - this.h[1] = sum32_3(this.h[2], D, Eh); - this.h[2] = sum32_3(this.h[3], E, Ah); - this.h[3] = sum32_3(this.h[4], A, Bh); - this.h[4] = sum32_3(this.h[0], B, Ch); - this.h[0] = T; -}; - -RIPEMD160.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'little'); - else - return utils.split32(this.h, 'little'); -}; - -function f(j, x, y, z) { - if (j <= 15) - return x ^ y ^ z; - else if (j <= 31) - return (x & y) | ((~x) & z); - else if (j <= 47) - return (x | (~y)) ^ z; - else if (j <= 63) - return (x & z) | (y & (~z)); - else - return x ^ (y | (~z)); -} - -function K(j) { - if (j <= 15) - return 0x00000000; - else if (j <= 31) - return 0x5a827999; - else if (j <= 47) - return 0x6ed9eba1; - else if (j <= 63) - return 0x8f1bbcdc; - else - return 0xa953fd4e; -} - -function Kh(j) { - if (j <= 15) - return 0x50a28be6; - else if (j <= 31) - return 0x5c4dd124; - else if (j <= 47) - return 0x6d703ef3; - else if (j <= 63) - return 0x7a6d76e9; - else - return 0x00000000; -} - -var r = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -]; - -var rh = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -]; - -var s = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -]; - -var sh = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -]; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/sha.js b/truebit-implementation/node_modules/hash.js/lib/hash/sha.js deleted file mode 100644 index f34a38d7..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/sha.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -exports.sha1 = require('./sha/1'); -exports.sha224 = require('./sha/224'); -exports.sha256 = require('./sha/256'); -exports.sha384 = require('./sha/384'); -exports.sha512 = require('./sha/512'); diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/sha/1.js b/truebit-implementation/node_modules/hash.js/lib/hash/sha/1.js deleted file mode 100644 index fcdfa294..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/sha/1.js +++ /dev/null @@ -1,74 +0,0 @@ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_5 = utils.sum32_5; -var ft_1 = shaCommon.ft_1; -var BlockHash = common.BlockHash; - -var sha1_K = [ - 0x5A827999, 0x6ED9EBA1, - 0x8F1BBCDC, 0xCA62C1D6 -]; - -function SHA1() { - if (!(this instanceof SHA1)) - return new SHA1(); - - BlockHash.call(this); - this.h = [ - 0x67452301, 0xefcdab89, 0x98badcfe, - 0x10325476, 0xc3d2e1f0 ]; - this.W = new Array(80); -} - -utils.inherits(SHA1, BlockHash); -module.exports = SHA1; - -SHA1.blockSize = 512; -SHA1.outSize = 160; -SHA1.hmacStrength = 80; -SHA1.padLength = 64; - -SHA1.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - - for(; i < W.length; i++) - W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - - for (i = 0; i < W.length; i++) { - var s = ~~(i / 20); - var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); - e = d; - d = c; - c = rotl32(b, 30); - b = a; - a = t; - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); -}; - -SHA1.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/sha/224.js b/truebit-implementation/node_modules/hash.js/lib/hash/sha/224.js deleted file mode 100644 index c69882db..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/sha/224.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var utils = require('../utils'); -var SHA256 = require('./256'); - -function SHA224() { - if (!(this instanceof SHA224)) - return new SHA224(); - - SHA256.call(this); - this.h = [ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; -} -utils.inherits(SHA224, SHA256); -module.exports = SHA224; - -SHA224.blockSize = 512; -SHA224.outSize = 224; -SHA224.hmacStrength = 192; -SHA224.padLength = 64; - -SHA224.prototype._digest = function digest(enc) { - // Just truncate output - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 7), 'big'); - else - return utils.split32(this.h.slice(0, 7), 'big'); -}; - diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/sha/256.js b/truebit-implementation/node_modules/hash.js/lib/hash/sha/256.js deleted file mode 100644 index 6dbd6a0c..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/sha/256.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); -var assert = require('minimalistic-assert'); - -var sum32 = utils.sum32; -var sum32_4 = utils.sum32_4; -var sum32_5 = utils.sum32_5; -var ch32 = shaCommon.ch32; -var maj32 = shaCommon.maj32; -var s0_256 = shaCommon.s0_256; -var s1_256 = shaCommon.s1_256; -var g0_256 = shaCommon.g0_256; -var g1_256 = shaCommon.g1_256; - -var BlockHash = common.BlockHash; - -var sha256_K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; - -function SHA256() { - if (!(this instanceof SHA256)) - return new SHA256(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - this.k = sha256_K; - this.W = new Array(64); -} -utils.inherits(SHA256, BlockHash); -module.exports = SHA256; - -SHA256.blockSize = 512; -SHA256.outSize = 256; -SHA256.hmacStrength = 192; -SHA256.padLength = 64; - -SHA256.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - for (; i < W.length; i++) - W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - var f = this.h[5]; - var g = this.h[6]; - var h = this.h[7]; - - assert(this.k.length === W.length); - for (i = 0; i < W.length; i++) { - var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); - var T2 = sum32(s0_256(a), maj32(a, b, c)); - h = g; - g = f; - f = e; - e = sum32(d, T1); - d = c; - c = b; - b = a; - a = sum32(T1, T2); - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); - this.h[5] = sum32(this.h[5], f); - this.h[6] = sum32(this.h[6], g); - this.h[7] = sum32(this.h[7], h); -}; - -SHA256.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/sha/384.js b/truebit-implementation/node_modules/hash.js/lib/hash/sha/384.js deleted file mode 100644 index 01df2560..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/sha/384.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var utils = require('../utils'); - -var SHA512 = require('./512'); - -function SHA384() { - if (!(this instanceof SHA384)) - return new SHA384(); - - SHA512.call(this); - this.h = [ - 0xcbbb9d5d, 0xc1059ed8, - 0x629a292a, 0x367cd507, - 0x9159015a, 0x3070dd17, - 0x152fecd8, 0xf70e5939, - 0x67332667, 0xffc00b31, - 0x8eb44a87, 0x68581511, - 0xdb0c2e0d, 0x64f98fa7, - 0x47b5481d, 0xbefa4fa4 ]; -} -utils.inherits(SHA384, SHA512); -module.exports = SHA384; - -SHA384.blockSize = 1024; -SHA384.outSize = 384; -SHA384.hmacStrength = 192; -SHA384.padLength = 128; - -SHA384.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 12), 'big'); - else - return utils.split32(this.h.slice(0, 12), 'big'); -}; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/sha/512.js b/truebit-implementation/node_modules/hash.js/lib/hash/sha/512.js deleted file mode 100644 index c371a259..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/sha/512.js +++ /dev/null @@ -1,330 +0,0 @@ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var assert = require('minimalistic-assert'); - -var rotr64_hi = utils.rotr64_hi; -var rotr64_lo = utils.rotr64_lo; -var shr64_hi = utils.shr64_hi; -var shr64_lo = utils.shr64_lo; -var sum64 = utils.sum64; -var sum64_hi = utils.sum64_hi; -var sum64_lo = utils.sum64_lo; -var sum64_4_hi = utils.sum64_4_hi; -var sum64_4_lo = utils.sum64_4_lo; -var sum64_5_hi = utils.sum64_5_hi; -var sum64_5_lo = utils.sum64_5_lo; - -var BlockHash = common.BlockHash; - -var sha512_K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; - -function SHA512() { - if (!(this instanceof SHA512)) - return new SHA512(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xf3bcc908, - 0xbb67ae85, 0x84caa73b, - 0x3c6ef372, 0xfe94f82b, - 0xa54ff53a, 0x5f1d36f1, - 0x510e527f, 0xade682d1, - 0x9b05688c, 0x2b3e6c1f, - 0x1f83d9ab, 0xfb41bd6b, - 0x5be0cd19, 0x137e2179 ]; - this.k = sha512_K; - this.W = new Array(160); -} -utils.inherits(SHA512, BlockHash); -module.exports = SHA512; - -SHA512.blockSize = 1024; -SHA512.outSize = 512; -SHA512.hmacStrength = 192; -SHA512.padLength = 128; - -SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { - var W = this.W; - - // 32 x 32bit words - for (var i = 0; i < 32; i++) - W[i] = msg[start + i]; - for (; i < W.length; i += 2) { - var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 - var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); - var c1_hi = W[i - 14]; // i - 7 - var c1_lo = W[i - 13]; - var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 - var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); - var c3_hi = W[i - 32]; // i - 16 - var c3_lo = W[i - 31]; - - W[i] = sum64_4_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - W[i + 1] = sum64_4_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - } -}; - -SHA512.prototype._update = function _update(msg, start) { - this._prepareBlock(msg, start); - - var W = this.W; - - var ah = this.h[0]; - var al = this.h[1]; - var bh = this.h[2]; - var bl = this.h[3]; - var ch = this.h[4]; - var cl = this.h[5]; - var dh = this.h[6]; - var dl = this.h[7]; - var eh = this.h[8]; - var el = this.h[9]; - var fh = this.h[10]; - var fl = this.h[11]; - var gh = this.h[12]; - var gl = this.h[13]; - var hh = this.h[14]; - var hl = this.h[15]; - - assert(this.k.length === W.length); - for (var i = 0; i < W.length; i += 2) { - var c0_hi = hh; - var c0_lo = hl; - var c1_hi = s1_512_hi(eh, el); - var c1_lo = s1_512_lo(eh, el); - var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); - var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); - var c3_hi = this.k[i]; - var c3_lo = this.k[i + 1]; - var c4_hi = W[i]; - var c4_lo = W[i + 1]; - - var T1_hi = sum64_5_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - var T1_lo = sum64_5_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - - c0_hi = s0_512_hi(ah, al); - c0_lo = s0_512_lo(ah, al); - c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); - c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); - - var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); - var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - - hh = gh; - hl = gl; - - gh = fh; - gl = fl; - - fh = eh; - fl = el; - - eh = sum64_hi(dh, dl, T1_hi, T1_lo); - el = sum64_lo(dl, dl, T1_hi, T1_lo); - - dh = ch; - dl = cl; - - ch = bh; - cl = bl; - - bh = ah; - bl = al; - - ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); - al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); - } - - sum64(this.h, 0, ah, al); - sum64(this.h, 2, bh, bl); - sum64(this.h, 4, ch, cl); - sum64(this.h, 6, dh, dl); - sum64(this.h, 8, eh, el); - sum64(this.h, 10, fh, fl); - sum64(this.h, 12, gh, gl); - sum64(this.h, 14, hh, hl); -}; - -SHA512.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -function ch64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ ((~xh) & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function ch64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ ((~xl) & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 28); - var c1_hi = rotr64_hi(xl, xh, 2); // 34 - var c2_hi = rotr64_hi(xl, xh, 7); // 39 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 28); - var c1_lo = rotr64_lo(xl, xh, 2); // 34 - var c2_lo = rotr64_lo(xl, xh, 7); // 39 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 14); - var c1_hi = rotr64_hi(xh, xl, 18); - var c2_hi = rotr64_hi(xl, xh, 9); // 41 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 14); - var c1_lo = rotr64_lo(xh, xl, 18); - var c2_lo = rotr64_lo(xl, xh, 9); // 41 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 1); - var c1_hi = rotr64_hi(xh, xl, 8); - var c2_hi = shr64_hi(xh, xl, 7); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 1); - var c1_lo = rotr64_lo(xh, xl, 8); - var c2_lo = shr64_lo(xh, xl, 7); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 19); - var c1_hi = rotr64_hi(xl, xh, 29); // 61 - var c2_hi = shr64_hi(xh, xl, 6); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 19); - var c1_lo = rotr64_lo(xl, xh, 29); // 61 - var c2_lo = shr64_lo(xh, xl, 6); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/sha/common.js b/truebit-implementation/node_modules/hash.js/lib/hash/sha/common.js deleted file mode 100644 index d41b4643..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/sha/common.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -var utils = require('../utils'); -var rotr32 = utils.rotr32; - -function ft_1(s, x, y, z) { - if (s === 0) - return ch32(x, y, z); - if (s === 1 || s === 3) - return p32(x, y, z); - if (s === 2) - return maj32(x, y, z); -} -exports.ft_1 = ft_1; - -function ch32(x, y, z) { - return (x & y) ^ ((~x) & z); -} -exports.ch32 = ch32; - -function maj32(x, y, z) { - return (x & y) ^ (x & z) ^ (y & z); -} -exports.maj32 = maj32; - -function p32(x, y, z) { - return x ^ y ^ z; -} -exports.p32 = p32; - -function s0_256(x) { - return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); -} -exports.s0_256 = s0_256; - -function s1_256(x) { - return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); -} -exports.s1_256 = s1_256; - -function g0_256(x) { - return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); -} -exports.g0_256 = g0_256; - -function g1_256(x) { - return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); -} -exports.g1_256 = g1_256; diff --git a/truebit-implementation/node_modules/hash.js/lib/hash/utils.js b/truebit-implementation/node_modules/hash.js/lib/hash/utils.js deleted file mode 100644 index 3d7d4ea7..00000000 --- a/truebit-implementation/node_modules/hash.js/lib/hash/utils.js +++ /dev/null @@ -1,253 +0,0 @@ -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -exports.inherits = inherits; - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg === 'string') { - if (!enc) { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); - } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } - } else { - for (i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - } - return res; -} -exports.toArray = toArray; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -exports.toHex = toHex; - -function htonl(w) { - var res = (w >>> 24) | - ((w >>> 8) & 0xff00) | - ((w << 8) & 0xff0000) | - ((w & 0xff) << 24); - return res >>> 0; -} -exports.htonl = htonl; - -function toHex32(msg, endian) { - var res = ''; - for (var i = 0; i < msg.length; i++) { - var w = msg[i]; - if (endian === 'little') - w = htonl(w); - res += zero8(w.toString(16)); - } - return res; -} -exports.toHex32 = toHex32; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -exports.zero2 = zero2; - -function zero8(word) { - if (word.length === 7) - return '0' + word; - else if (word.length === 6) - return '00' + word; - else if (word.length === 5) - return '000' + word; - else if (word.length === 4) - return '0000' + word; - else if (word.length === 3) - return '00000' + word; - else if (word.length === 2) - return '000000' + word; - else if (word.length === 1) - return '0000000' + word; - else - return word; -} -exports.zero8 = zero8; - -function join32(msg, start, end, endian) { - var len = end - start; - assert(len % 4 === 0); - var res = new Array(len / 4); - for (var i = 0, k = start; i < res.length; i++, k += 4) { - var w; - if (endian === 'big') - w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; - else - w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; - res[i] = w >>> 0; - } - return res; -} -exports.join32 = join32; - -function split32(msg, endian) { - var res = new Array(msg.length * 4); - for (var i = 0, k = 0; i < msg.length; i++, k += 4) { - var m = msg[i]; - if (endian === 'big') { - res[k] = m >>> 24; - res[k + 1] = (m >>> 16) & 0xff; - res[k + 2] = (m >>> 8) & 0xff; - res[k + 3] = m & 0xff; - } else { - res[k + 3] = m >>> 24; - res[k + 2] = (m >>> 16) & 0xff; - res[k + 1] = (m >>> 8) & 0xff; - res[k] = m & 0xff; - } - } - return res; -} -exports.split32 = split32; - -function rotr32(w, b) { - return (w >>> b) | (w << (32 - b)); -} -exports.rotr32 = rotr32; - -function rotl32(w, b) { - return (w << b) | (w >>> (32 - b)); -} -exports.rotl32 = rotl32; - -function sum32(a, b) { - return (a + b) >>> 0; -} -exports.sum32 = sum32; - -function sum32_3(a, b, c) { - return (a + b + c) >>> 0; -} -exports.sum32_3 = sum32_3; - -function sum32_4(a, b, c, d) { - return (a + b + c + d) >>> 0; -} -exports.sum32_4 = sum32_4; - -function sum32_5(a, b, c, d, e) { - return (a + b + c + d + e) >>> 0; -} -exports.sum32_5 = sum32_5; - -function sum64(buf, pos, ah, al) { - var bh = buf[pos]; - var bl = buf[pos + 1]; - - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - buf[pos] = hi >>> 0; - buf[pos + 1] = lo; -} -exports.sum64 = sum64; - -function sum64_hi(ah, al, bh, bl) { - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - return hi >>> 0; -} -exports.sum64_hi = sum64_hi; - -function sum64_lo(ah, al, bh, bl) { - var lo = al + bl; - return lo >>> 0; -} -exports.sum64_lo = sum64_lo; - -function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - - var hi = ah + bh + ch + dh + carry; - return hi >>> 0; -} -exports.sum64_4_hi = sum64_4_hi; - -function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { - var lo = al + bl + cl + dl; - return lo >>> 0; -} -exports.sum64_4_lo = sum64_4_lo; - -function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - lo = (lo + el) >>> 0; - carry += lo < el ? 1 : 0; - - var hi = ah + bh + ch + dh + eh + carry; - return hi >>> 0; -} -exports.sum64_5_hi = sum64_5_hi; - -function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var lo = al + bl + cl + dl + el; - - return lo >>> 0; -} -exports.sum64_5_lo = sum64_5_lo; - -function rotr64_hi(ah, al, num) { - var r = (al << (32 - num)) | (ah >>> num); - return r >>> 0; -} -exports.rotr64_hi = rotr64_hi; - -function rotr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.rotr64_lo = rotr64_lo; - -function shr64_hi(ah, al, num) { - return ah >>> num; -} -exports.shr64_hi = shr64_hi; - -function shr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.shr64_lo = shr64_lo; diff --git a/truebit-implementation/node_modules/hash.js/package.json b/truebit-implementation/node_modules/hash.js/package.json deleted file mode 100644 index f86b601a..00000000 --- a/truebit-implementation/node_modules/hash.js/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "hash.js@^1.0.0", - "_id": "hash.js@1.1.5", - "_inBundle": false, - "_integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", - "_location": "/hash.js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "hash.js@^1.0.0", - "name": "hash.js", - "escapedName": "hash.js", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/elliptic", - "/hmac-drbg" - ], - "_resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "_shasum": "e38ab4b85dfb1e0c40fe9265c0e9b54854c23812", - "_spec": "hash.js@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/elliptic", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/hash.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - }, - "deprecated": false, - "description": "Various hash functions that could be run by both browser and node", - "devDependencies": { - "eslint": "^4.19.1", - "mocha": "^5.2.0" - }, - "homepage": "https://github.com/indutny/hash.js", - "keywords": [ - "hash", - "sha256", - "sha224", - "hmac" - ], - "license": "MIT", - "main": "lib/hash.js", - "name": "hash.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/hash.js.git" - }, - "scripts": { - "lint": "eslint lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", - "test": "mocha --reporter=spec test/*-test.js && npm run lint" - }, - "typings": "lib/hash.d.ts", - "version": "1.1.5" -} diff --git a/truebit-implementation/node_modules/hash.js/test/hash-test.js b/truebit-implementation/node_modules/hash.js/test/hash-test.js deleted file mode 100644 index 6a36efc6..00000000 --- a/truebit-implementation/node_modules/hash.js/test/hash-test.js +++ /dev/null @@ -1,124 +0,0 @@ -'use strict'; -/* global describe it */ - -var assert = require('assert'); -var hash = require('../'); - -describe('Hash', function() { - function test(fn, cases) { - for (var i = 0; i < cases.length; i++) { - var msg = cases[i][0]; - var res = cases[i][1]; - var enc = cases[i][2]; - - var dgst = fn().update(msg, enc).digest('hex'); - assert.equal(dgst, res); - - // Split message - dgst = fn().update(msg.slice(0, 2), enc) - .update(msg.slice(2), enc) - .digest('hex'); - assert.equal(dgst, res); - } - } - - it('should support sha256', function() { - assert.equal(hash.sha256.blockSize, 512); - assert.equal(hash.sha256.outSize, 256); - - test(hash.sha256, [ - [ 'abc', - 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' ], - [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', - '248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1' ], - [ 'deadbeef', - '5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953', - 'hex' ], - ]); - }); - - it('should support sha224', function() { - assert.equal(hash.sha224.blockSize, 512); - assert.equal(hash.sha224.outSize, 224); - - test(hash.sha224, [ - [ 'abc', - '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7' ], - [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', - '75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525' ], - [ 'deadbeef', - '55b9eee5f60cc362ddc07676f620372611e22272f60fdbec94f243f8', - 'hex' ], - ]); - }); - - it('should support ripemd160', function() { - assert.equal(hash.ripemd160.blockSize, 512); - assert.equal(hash.ripemd160.outSize, 160); - - test(hash.ripemd160, [ - [ '', '9c1185a5c5e9fc54612808977ee8f548b2258d31'], - [ 'abc', - '8eb208f7e05d987a9b044a8e98c6b087f15a0bfc' ], - [ 'message digest', - '5d0689ef49d2fae572b881b123a85ffa21595f36' ], - [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', - '12a053384a9c0c88e405a06c27dcf49ada62eb2b' ], - [ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', - 'b0e20b6e3116640286ed3a87a5713079b21f5189' ], - ]); - }); - - it('should support sha1', function() { - assert.equal(hash.sha1.blockSize, 512); - assert.equal(hash.sha1.outSize, 160); - - test(hash.sha1, [ - [ '', - 'da39a3ee5e6b4b0d3255bfef95601890afd80709' ], - [ 'abc', - 'a9993e364706816aba3e25717850c26c9cd0d89d' ], - [ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', - '84983e441c3bd26ebaae4aa1f95129e5e54670f1' ], - [ 'deadbeef', - 'd78f8bb992a56a597f6c7a1fb918bb78271367eb', - 'hex' ], - ]); - }); - - it('should support sha512', function() { - assert.equal(hash.sha512.blockSize, 1024); - assert.equal(hash.sha512.outSize, 512); - - test(hash.sha512, [ - [ 'abc', - 'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a' + - '2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f' - ], - [ - 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' + - 'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', - '8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018' + - '501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909' - ] - ]); - }); - - it('should support sha384', function() { - assert.equal(hash.sha384.blockSize, 1024); - assert.equal(hash.sha384.outSize, 384); - - test(hash.sha384, [ - [ 'abc', - 'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed' + - '8086072ba1e7cc2358baeca134c825a7' - ], - [ - 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' + - 'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', - '09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712' + - 'fcc7c71a557e2db966c3e9fa91746039' - ] - ]); - }); -}); diff --git a/truebit-implementation/node_modules/hash.js/test/hmac-test.js b/truebit-implementation/node_modules/hash.js/test/hmac-test.js deleted file mode 100644 index 6fe18e38..00000000 --- a/truebit-implementation/node_modules/hash.js/test/hmac-test.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; -/* global describe it */ - -var assert = require('assert'); -var hash = require('../'); - -describe('Hmac', function() { - describe('mixed test vector', function() { - test({ - name: 'nist 1', - key: '00010203 04050607 08090A0B 0C0D0E0F' + - '10111213 14151617 18191A1B 1C1D1E1F 20212223 24252627' + - '28292A2B 2C2D2E2F 30313233 34353637 38393A3B 3C3D3E3F', - msg: 'Sample message for keylen=blocklen', - res: '8bb9a1db9806f20df7f77b82138c7914d174d59e13dc4d0169c9057b133e1d62' - }); - test({ - name: 'nist 2', - key: '00010203 04050607' + - '08090A0B 0C0D0E0F 10111213 14151617 18191A1B 1C1D1E1F', - msg: 'Sample message for keylen= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - this._init(entropy, nonce, pers); -} -module.exports = HmacDRBG; - -HmacDRBG.prototype._init = function init(entropy, nonce, pers) { - var seed = entropy.concat(nonce).concat(pers); - - this.K = new Array(this.outLen / 8); - this.V = new Array(this.outLen / 8); - for (var i = 0; i < this.V.length; i++) { - this.K[i] = 0x00; - this.V[i] = 0x01; - } - - this._update(seed); - this._reseed = 1; - this.reseedInterval = 0x1000000000000; // 2^48 -}; - -HmacDRBG.prototype._hmac = function hmac() { - return new hash.hmac(this.hash, this.K); -}; - -HmacDRBG.prototype._update = function update(seed) { - var kmac = this._hmac() - .update(this.V) - .update([ 0x00 ]); - if (seed) - kmac = kmac.update(seed); - this.K = kmac.digest(); - this.V = this._hmac().update(this.V).digest(); - if (!seed) - return; - - this.K = this._hmac() - .update(this.V) - .update([ 0x01 ]) - .update(seed) - .digest(); - this.V = this._hmac().update(this.V).digest(); -}; - -HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { - // Optional entropy enc - if (typeof entropyEnc !== 'string') { - addEnc = add; - add = entropyEnc; - entropyEnc = null; - } - - entropy = utils.toArray(entropy, entropyEnc); - add = utils.toArray(add, addEnc); - - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - - this._update(entropy.concat(add || [])); - this._reseed = 1; -}; - -HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { - if (this._reseed > this.reseedInterval) - throw new Error('Reseed is required'); - - // Optional encoding - if (typeof enc !== 'string') { - addEnc = add; - add = enc; - enc = null; - } - - // Optional additional data - if (add) { - add = utils.toArray(add, addEnc || 'hex'); - this._update(add); - } - - var temp = []; - while (temp.length < len) { - this.V = this._hmac().update(this.V).digest(); - temp = temp.concat(this.V); - } - - var res = temp.slice(0, len); - this._update(add); - this._reseed++; - return utils.encode(res, enc); -}; diff --git a/truebit-implementation/node_modules/hmac-drbg/package.json b/truebit-implementation/node_modules/hmac-drbg/package.json deleted file mode 100644 index 1de28ba4..00000000 --- a/truebit-implementation/node_modules/hmac-drbg/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_from": "hmac-drbg@^1.0.0", - "_id": "hmac-drbg@1.0.1", - "_inBundle": false, - "_integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "_location": "/hmac-drbg", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "hmac-drbg@^1.0.0", - "name": "hmac-drbg", - "escapedName": "hmac-drbg", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/elliptic" - ], - "_resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "_shasum": "d2745701025a6c775a6c545793ed502fc0c649a1", - "_spec": "hmac-drbg@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/elliptic", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/hmac-drbg/issues" - }, - "bundleDependencies": false, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - }, - "deprecated": false, - "description": "Deterministic random bit generator (hmac)", - "devDependencies": { - "mocha": "^3.2.0" - }, - "homepage": "https://github.com/indutny/hmac-drbg#readme", - "keywords": [ - "hmac", - "drbg", - "prng" - ], - "license": "MIT", - "main": "lib/hmac-drbg.js", - "name": "hmac-drbg", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/hmac-drbg.git" - }, - "scripts": { - "test": "mocha --reporter=spec test/*-test.js" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/hmac-drbg/test/drbg-test.js b/truebit-implementation/node_modules/hmac-drbg/test/drbg-test.js deleted file mode 100644 index 14fd28a8..00000000 --- a/truebit-implementation/node_modules/hmac-drbg/test/drbg-test.js +++ /dev/null @@ -1,91 +0,0 @@ -'use strict'; - -const assert = require('assert'); -const HmacDRBG = require('../'); -const hash = require('hash.js'); - -describe('Hmac_DRBG', () => { - it('should support hmac-drbg-sha256', () => { - function doDrbg(opt) { - const drbg = HmacDRBG({ - hash: hash.sha256, - entropy: opt.entropy, - entropyEnc: 'utf8', - nonce: opt.nonce, - nonceEnc: 'utf8', - pers: opt.pers, - persEnc: 'utf8' - }); - return drbg.generate(opt.size, 'hex'); - } - - const test = [ - { - entropy: 'totally random0123456789', - nonce: 'secret nonce', - pers: 'my drbg', - size: 32, - res: '018ec5f8e08c41e5ac974eb129ac297c5388ee1864324fa13d9b15cf98d9a157' - }, - { - entropy: 'totally random0123456789', - nonce: 'secret nonce', - pers: null, - size: 32, - res: 'ed5d61ecf0ef38258e62f03bbb49f19f2cd07ba5145a840d83b134d5963b3633' - } - ]; - for (let i = 0; i < test.length; i++) - assert.equal(doDrbg(test[i]), test[i].res); - }); - - describe('NIST vector', function() { - require('./fixtures/hmac-drbg-nist.json').forEach(function (opt) { - it('should not fail at ' + opt.name, function() { - const drbg = HmacDRBG({ - hash: hash.sha256, - entropy: opt.entropy, - nonce: opt.nonce, - pers: opt.pers - }); - - let last; - for (let i = 0; i < opt.add.length; i++) { - let add = opt.add[i]; - last = drbg.generate(opt.expected.length / 2, 'hex', add); - } - assert.equal(last, opt.expected); - }); - }); - }); - - describe('reseeding', function() { - it('should reseed', function() { - const entropy = 'totally random string with many chars that I typed ' + - 'in agony'; - const nonce = 'nonce'; - const pers = 'pers'; - - const original = HmacDRBG({ - hash: hash.sha256, - entropy, - nonce, - pers - }); - const reseeded = HmacDRBG({ - hash: hash.sha256, - entropy, - nonce, - pers - }); - - assert.strictEqual(original.generate(32, 'hex'), - reseeded.generate(32, 'hex')); - - reseeded.reseed('another absolutely random string'); - - assert.notEqual(original.generate(32, 'hex'), - reseeded.generate(32, 'hex')); - }); - }); -}); diff --git a/truebit-implementation/node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json b/truebit-implementation/node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json deleted file mode 100644 index fce148a8..00000000 --- a/truebit-implementation/node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json +++ /dev/null @@ -1,332 +0,0 @@ -[ - { - "name": "0", - "entropy": "ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488", - "nonce": "659ba96c601dc69fc902940805ec0ca8", - "pers": null, - "add": [ - null, - null - ], - "expected": "e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8" - }, - { - "name": "1", - "entropy": "79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3", - "nonce": "3593259c092bef4129bc2c6c9e19f343", - "pers": null, - "add": [ - null, - null - ], - "expected": "cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37" - }, - { - "name": "2", - "entropy": "b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d", - "nonce": "65cb27735d83c0708f72684ea58f7ee5", - "pers": null, - "add": [ - null, - null - ], - "expected": "75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff" - }, - { - "name": "3", - "entropy": "8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7", - "nonce": "c39d35052201bdcce4e127a04f04d644", - "pers": null, - "add": [ - null, - null - ], - "expected": "62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5" - }, - { - "name": "4", - "entropy": "74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a", - "nonce": "c36387a544a5f2b78007651a7b74b749", - "pers": null, - "add": [ - null, - null - ], - "expected": "b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236" - }, - { - "name": "5", - "entropy": "4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f", - "nonce": "7aed52d0016fcaef0b6492bc40bbe0e9", - "pers": null, - "add": [ - null, - null - ], - "expected": "a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967" - }, - { - "name": "6", - "entropy": "b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0", - "nonce": "e2c39b84629a3de5c301db5643af1c21", - "pers": null, - "add": [ - null, - null - ], - "expected": "fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff" - }, - { - "name": "7", - "entropy": "aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e", - "nonce": "9504c3c0c4310c1c0746a036c91d9034", - "pers": null, - "add": [ - null, - null - ], - "expected": "2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431" - }, - { - "name": "8", - "entropy": "b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6", - "nonce": "24baf03599c10df6ef44065d715a93f7", - "pers": null, - "add": [ - null, - null - ], - "expected": "ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2" - }, - { - "name": "9", - "entropy": "27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628", - "nonce": "39cfe0210db2e7b0eb52a387476e7ea1", - "pers": null, - "add": [ - null, - null - ], - "expected": "e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a" - }, - { - "name": "10", - "entropy": "d7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5", - "nonce": "a72882773f78c2fc4878295840a53012", - "pers": null, - "add": [ - null, - null - ], - "expected": "0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd" - }, - { - "name": "11", - "entropy": "67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532", - "nonce": "e256d88497738a33923aa003a8d7845c", - "pers": null, - "add": [ - null, - null - ], - "expected": "b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f" - }, - { - "name": "12", - "entropy": "de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb", - "nonce": "d01f9002c407127bc3297a561d89b81d", - "pers": null, - "add": [ - null, - null - ], - "expected": "64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7" - }, - { - "name": "13", - "entropy": "4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7", - "nonce": "7f3cce4af8c8ce3c45bdf23c6b181a00", - "pers": null, - "add": [ - null, - null - ], - "expected": "320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf" - }, - { - "name": "14", - "entropy": "451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665", - "nonce": "2f28e6ee8de5879db1eccd58c994e5f0", - "pers": null, - "add": [ - null, - null - ], - "expected": "3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd" - }, - { - "name": "0 with additional data", - "entropy": "d3cc4d1acf3dde0c4bd2290d262337042dc632948223d3a2eaab87da44295fbd", - "nonce": "0109b0e729f457328aa18569a9224921", - "pers": null, - "add": [ - "3c311848183c9a212a26f27f8c6647e40375e466a0857cc39c4e47575d53f1f6", - "fcb9abd19ccfbccef88c9c39bfb3dd7b1c12266c9808992e305bc3cff566e4e4" - ], - "expected": "9c7b758b212cd0fcecd5daa489821712e3cdea4467b560ef5ddc24ab47749a1f1ffdbbb118f4e62fcfca3371b8fbfc5b0646b83e06bfbbab5fac30ea09ea2bc76f1ea568c9be0444b2cc90517b20ca825f2d0eccd88e7175538b85d90ab390183ca6395535d34473af6b5a5b88f5a59ee7561573337ea819da0dcc3573a22974" - }, - { - "name": "1 with additional data", - "entropy": "f97a3cfd91faa046b9e61b9493d436c4931f604b22f1081521b3419151e8ff06", - "nonce": "11f3a7d43595357d58120bd1e2dd8aed", - "pers": null, - "add": [ - "517289afe444a0fe5ed1a41dbbb5eb17150079bdd31e29cf2ff30034d8268e3b", - "88028d29ef80b4e6f0fe12f91d7449fe75062682e89c571440c0c9b52c42a6e0" - ], - "expected": "c6871cff0824fe55ea7689a52229886730450e5d362da5bf590dcf9acd67fed4cb32107df5d03969a66b1f6494fdf5d63d5b4d0d34ea7399a07d0116126d0d518c7c55ba46e12f62efc8fe28a51c9d428e6d371d7397ab319fc73ded4722e5b4f30004032a6128df5e7497ecf82ca7b0a50e867ef6728a4f509a8c859087039c" - }, - { - "name": "2 with additional data", - "entropy": "0f2f23d64f481cabec7abb01db3aabf125c3173a044b9bf26844300b69dcac8b", - "nonce": "9a5ae13232b43aa19cfe8d7958b4b590", - "pers": null, - "add": [ - "ec4c7a62acab73385f567da10e892ff395a0929f959231a5628188ce0c26e818", - "6b97b8c6b6bb8935e676c410c17caa8042aa3145f856d0a32b641e4ae5298648" - ], - "expected": "7480a361058bd9afa3db82c9d7586e42269102013f6ec5c269b6d05f17987847748684766b44918fd4b65e1648622fc0e0954178b0279dfc9fa99b66c6f53e51c4860131e9e0644287a4afe4ca8e480417e070db68008a97c3397e4b320b5d1a1d7e1d18a95cfedd7d1e74997052bf649d132deb9ec53aae7dafdab55e6dae93" - }, - { - "name": "3 with additional data", - "entropy": "53c56660c78481be9c63284e005fcc14fbc7fb27732c9bf1366d01a426765a31", - "nonce": "dc7a14d0eb5b0b3534e717a0b3c64614", - "pers": null, - "add": [ - "3aa848706ecb877f5bedf4ffc332d57c22e08747a47e75cff6f0fd1316861c95", - "9a401afa739b8f752fddacd291e0b854f5eff4a55b515e20cb319852189d3722" - ], - "expected": "5c0eb420e0bf41ce9323e815310e4e8303cd677a8a8b023f31f0d79f0ca15aeb636099a369fd074d69889865eac1b72ab3cbfebdb8cf460b00072802e2ec648b1349a5303be4ccaadd729f1a9ea17482fd026aaeb93f1602bc1404b9853adde40d6c34b844cf148bc088941ecfc1642c8c0b9778e45f3b07e06e21ee2c9e0300" - }, - { - "name": "4 with additional data", - "entropy": "f63c804404902db334c54bb298fc271a21d7acd9f770278e089775710bf4fdd7", - "nonce": "3e45009ea9cb2a36ba1aa4bf39178200", - "pers": null, - "add": [ - "d165a13dc8cc43f3f0952c3f5d3de4136954d983683d4a3e6d2dc4c89bf23423", - "75106bc86d0336df85097f6af8e80e2da59046a03fa65b06706b8bbc7ffc6785" - ], - "expected": "6363139bba32c22a0f5cd23ca6d437b5669b7d432f786b8af445471bee0b2d24c9d5f2f93717cbe00d1f010cc3b9c515fc9f7336d53d4d26ba5c0d76a90186663c8582eb739c7b6578a3328bf68dc2cec2cd89b3a90201f6993adcc854df0f5c6974d0f5570765a15fe03dbce28942dd2fd16ba2027e68abac83926969349af8" - }, - { - "name": "5 with additional data", - "entropy": "2aaca9147da66c176615726b69e3e851cc3537f5f279fe7344233d8e44cfc99d", - "nonce": "4e171f080af9a6081bee9f183ac9e340", - "pers": null, - "add": [ - "d75a2a6eb66c3833e50f5ec3d2e434cf791448d618026d0c360806d120ded669", - "b643b74c15b37612e6577ed7ca2a4c67a78d560af9eb50a4108fca742e87b8d6" - ], - "expected": "501dcdc977f4ba856f24eaa4968b374bebb3166b280334cb510232c31ebffde10fa47b7840ef3fe3b77725c2272d3a1d4219baf23e0290c622271edcced58838cf428f0517425d2e19e0d8c89377eecfc378245f283236fafa466c914b99672ceafab369e8889a0c866d8bd639db9fb797254262c6fd44cfa9045ad6340a60ef" - }, - { - "name": "6 with additional data", - "entropy": "a2e4cd48a5cf918d6f55942d95fcb4e8465cdc4f77b7c52b6fae5b16a25ca306", - "nonce": "bef036716440db6e6d333d9d760b7ca8", - "pers": null, - "add": [ - "bfa591c7287f3f931168f95e38869441d1f9a11035ad8ea625bb61b9ea17591c", - "c00c735463bca215adc372cb892b05e939bf669583341c06d4e31d0e5b363a37" - ], - "expected": "e7d136af69926a5421d4266ee0420fd729f2a4f7c295d3c966bdfa05268180b508b8a2852d1b3a06fd2ab3e13c54005123ef319f42d0c6d3a575e6e7e1496cb28aacadbcf83740fba8f35fcee04bb2ed8a51db3d3362b01094a62fb57e33c99a432f29fce6676cffbbcc05107e794e75e44a02d5e6d9d748c5fbff00a0178d65" - }, - { - "name": "7 with additional data", - "entropy": "95a67771cba69011a79776e713145d309edae56fad5fd6d41d83eaff89df6e5e", - "nonce": "be5b5164e31ecc51ba6f7c3c5199eb33", - "pers": null, - "add": [ - "065f693b229a7c4fd373cd15b3807552dd9bf98c5485cef361949d4e7d774b53", - "9afb62406f0e812c4f156d58b19a656c904813c1b4a45a0029ae7f50731f8014" - ], - "expected": "f61b61a6e79a41183e8ed6647899d2dc85cdaf5c3abf5c7f3bf37685946dc28f4923dc842f2d4326bd6ce0d50a84cb3ba869d72a36e246910eba6512ba36cd7ed3a5437c9245b00a344308c792b668b458d3c3e16dee2fbec41867da31084d46d8ec168de2148ef64fc5b72069abf5a6ada1ead2b7146bb793ff1c9c3690fa56" - }, - { - "name": "8 with additional data", - "entropy": "a459e1815cbca4514ec8094d5ab2414a557ba6fe10e613c345338d0521e4bf90", - "nonce": "62221392e2552e76cd0d36df6e6068eb", - "pers": null, - "add": [ - "0a3642b02b23b3ef62c701a63401124022f5b896de86dab6e6c7451497aa1dcc", - "c80514865901371c45ba92d9f95d50bb7c9dd1768cb3dfbc45b968da94965c6e" - ], - "expected": "464e6977b8adaef307c9623e41c357013249c9ffd77f405f3925cebb69f151ce8fbb6a277164002aee7858fc224f6499042aa1e6322deee9a5d133c31d640e12a7487c731ba03ad866a24675badb1d79220c40be689f79c2a0be93cb4dada3e0eac4ab140cb91998b6f11953e68f2319b050c40f71c34de9905ae41b2de1c2f6" - }, - { - "name": "9 with additional data", - "entropy": "252c2cad613e002478162861880979ee4e323025eebb6fb2e0aa9f200e28e0a1", - "nonce": "d001bc9a8f2c8c242e4369df0c191989", - "pers": null, - "add": [ - "9bcfc61cb2bc000034bb3db980eb47c76fb5ecdd40553eff113368d639b947fd", - "8b0565c767c2610ee0014582e9fbecb96e173005b60e9581503a6dca5637a26e" - ], - "expected": "e96c15fe8a60692b0a7d67171e0195ff6e1c87aab844221e71700d1bbee75feea695f6a740c9760bbe0e812ecf4061d8f0955bc0195e18c4fd1516ebca50ba6a6db86881737dbab8321707675479b87611db6af2c97ea361a5484555ead454defb1a64335de964fc803d40f3a6f057893d2afc25725754f4f00abc51920743dc" - }, - { - "name": "10 with additional data", - "entropy": "8be0ca6adc8b3870c9d69d6021bc1f1d8eb9e649073d35ee6c5aa0b7e56ad8a5", - "nonce": "9d1265f7d51fdb65377f1e6edd6ae0e4", - "pers": null, - "add": [ - "da86167ac997c406bb7979f423986a84ec6614d6caa7afc10aff0699a9b2cf7f", - "e4baa3c555950b53e2bfdba480cb4c94b59381bac1e33947e0c22e838a9534cf" - ], - "expected": "64384ecc4ea6b458efc227ca697eac5510092265520c0a0d8a0ccf9ed3ca9d58074671188c6a7ad16d0b050cdc072c125d7298d3a31d9f044a9ee40da0089a84fea28cc7f05f1716db952fad29a0e779635cb7a912a959be67be2f0a4170aace2981802e2ff6467e5b46f0ffbff3b42ba5935fd553c82482ac266acf1cd247d7" - }, - { - "name": "11 with additional data", - "entropy": "d43a75b6adf26d60322284cb12ac38327792442aa8f040f60a2f331b33ac4a8f", - "nonce": "0682f8b091f811afacaacaec9b04d279", - "pers": null, - "add": [ - "7fd3b8f512940da7de5d80199d9a7b42670c04a945775a3dba869546cbb9bc65", - "2575db20bc7aafc2a90a5dabab760db851d754777bc9f05616af1858b24ff3da" - ], - "expected": "0da7a8dc73c163014bf0841913d3067806456bbca6d5de92b85534c6545467313648d71ef17c923d090dc92cff8d4d1a9a2bb63e001dc2e8ab1a597999be3d6cf70ff63fee9985801395fbd4f4990430c4259fcae4fa1fcd73dc3187ccc102d04af7c07532885e5a226fc42809c48f22eecf4f6ab996ae4fcb144786957d9f41" - }, - { - "name": "12 with additional data", - "entropy": "64352f236af5d32067a529a8fd05ba00a338c9de306371a0b00c36e610a48d18", - "nonce": "df99ed2c7608c870624b962a5dc68acd", - "pers": null, - "add": [ - "da416335e7aaf60cf3d06fb438735ce796aad09034f8969c8f8c3f81e32fef24", - "a28c07c21a2297311adf172c19e83ca0a87731bdffb80548978d2d1cd82cf8a3" - ], - "expected": "132b9f25868729e3853d3c51f99a3b5fae6d4204bea70890daf62e042b776a526c8fb831b80a6d5d3f153237df1fd39b6fd9137963f5516d9cdd4e3f9195c46e9972c15d3edc6606e3368bde1594977fb88d0ca6e6f5f3d057ccadc7d7dab77dfc42658a1e972aa446b20d418286386a52dfc1c714d2ac548713268b0b709729" - }, - { - "name": "13 with additional data", - "entropy": "282f4d2e05a2cd30e9087f5633089389449f04bac11df718c90bb351cd3653a5", - "nonce": "90a7daf3c0de9ea286081efc4a684dfb", - "pers": null, - "add": [ - "2630b4ccc7271cc379cb580b0aaede3d3aa8c1c7ba002cf791f0752c3d739007", - "c31d69de499f1017be44e3d4fa77ecebc6a9b9934749fcf136f267b29115d2cc" - ], - "expected": "c899094520e0197c37b91dd50778e20a5b950decfb308d39f1db709447ae48f6101d9abe63a783fbb830eec1d359a5f61a2013728966d349213ee96382614aa4135058a967627183810c6622a2158cababe3b8ab99169c89e362108bf5955b4ffc47440f87e4bad0d36bc738e737e072e64d8842e7619f1be0af1141f05afe2d" - }, - { - "name": "14 with additional data", - "entropy": "13c752b9e745ce77bbc7c0dbda982313d3fe66f903e83ebd8dbe4ff0c11380e9", - "nonce": "f1a533095d6174164bd7c82532464ae7", - "pers": null, - "add": [ - "4f53db89b9ba7fc00767bc751fb8f3c103fe0f76acd6d5c7891ab15b2b7cf67c", - "582c2a7d34679088cca6bd28723c99aac07db46c332dc0153d1673256903b446" - ], - "expected": "6311f4c0c4cd1f86bd48349abb9eb930d4f63df5e5f7217d1d1b91a71d8a6938b0ad2b3e897bd7e3d8703db125fab30e03464fad41e5ddf5bf9aeeb5161b244468cfb26a9d956931a5412c97d64188b0da1bd907819c686f39af82e91cfeef0cbffb5d1e229e383bed26d06412988640706815a6e820796876f416653e464961" - } -] diff --git a/truebit-implementation/node_modules/http-errors/HISTORY.md b/truebit-implementation/node_modules/http-errors/HISTORY.md deleted file mode 100644 index cba86e2d..00000000 --- a/truebit-implementation/node_modules/http-errors/HISTORY.md +++ /dev/null @@ -1,132 +0,0 @@ -2018-03-29 / 1.6.3 -================== - - * deps: depd@~1.1.2 - - perf: remove argument reassignment - * deps: setprototypeof@1.1.0 - * deps: statuses@'>= 1.3.1 < 2' - -2017-08-04 / 1.6.2 -================== - - * deps: depd@1.1.1 - - Remove unnecessary `Buffer` loading - -2017-02-20 / 1.6.1 -================== - - * deps: setprototypeof@1.0.3 - - Fix shim for old browsers - -2017-02-14 / 1.6.0 -================== - - * Accept custom 4xx and 5xx status codes in factory - * Add deprecation message to `"I'mateapot"` export - * Deprecate passing status code as anything except first argument in factory - * Deprecate using non-error status codes - * Make `message` property enumerable for `HttpError`s - -2016-11-16 / 1.5.1 -================== - - * deps: inherits@2.0.3 - - Fix issue loading in browser - * deps: setprototypeof@1.0.2 - * deps: statuses@'>= 1.3.1 < 2' - -2016-05-18 / 1.5.0 -================== - - * Support new code `421 Misdirected Request` - * Use `setprototypeof` module to replace `__proto__` setting - * deps: statuses@'>= 1.3.0 < 2' - - Add `421 Misdirected Request` - - perf: enable strict mode - * perf: enable strict mode - -2016-01-28 / 1.4.0 -================== - - * Add `HttpError` export, for `err instanceof createError.HttpError` - * deps: inherits@2.0.1 - * deps: statuses@'>= 1.2.1 < 2' - - Fix message for status 451 - - Remove incorrect nginx status code - -2015-02-02 / 1.3.1 -================== - - * Fix regression where status can be overwritten in `createError` `props` - -2015-02-01 / 1.3.0 -================== - - * Construct errors using defined constructors from `createError` - * Fix error names that are not identifiers - - `createError["I'mateapot"]` is now `createError.ImATeapot` - * Set a meaningful `name` property on constructed errors - -2014-12-09 / 1.2.8 -================== - - * Fix stack trace from exported function - * Remove `arguments.callee` usage - -2014-10-14 / 1.2.7 -================== - - * Remove duplicate line - -2014-10-02 / 1.2.6 -================== - - * Fix `expose` to be `true` for `ClientError` constructor - -2014-09-28 / 1.2.5 -================== - - * deps: statuses@1 - -2014-09-21 / 1.2.4 -================== - - * Fix dependency version to work with old `npm`s - -2014-09-21 / 1.2.3 -================== - - * deps: statuses@~1.1.0 - -2014-09-21 / 1.2.2 -================== - - * Fix publish error - -2014-09-21 / 1.2.1 -================== - - * Support Node.js 0.6 - * Use `inherits` instead of `util` - -2014-09-09 / 1.2.0 -================== - - * Fix the way inheriting functions - * Support `expose` being provided in properties argument - -2014-09-08 / 1.1.0 -================== - - * Default status to 500 - * Support provided `error` to extend - -2014-09-08 / 1.0.1 -================== - - * Fix accepting string message - -2014-09-08 / 1.0.0 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/http-errors/LICENSE b/truebit-implementation/node_modules/http-errors/LICENSE deleted file mode 100644 index 82af4df5..00000000 --- a/truebit-implementation/node_modules/http-errors/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com -Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/http-errors/README.md b/truebit-implementation/node_modules/http-errors/README.md deleted file mode 100644 index 79663d82..00000000 --- a/truebit-implementation/node_modules/http-errors/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# http-errors - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Create HTTP errors for Express, Koa, Connect, etc. with ease. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```bash -$ npm install http-errors -``` - -## Example - -```js -var createError = require('http-errors') -var express = require('express') -var app = express() - -app.use(function (req, res, next) { - if (!req.user) return next(createError(401, 'Please login to view this page.')) - next() -}) -``` - -## API - -This is the current API, currently extracted from Koa and subject to change. - -All errors inherit from JavaScript `Error` and the exported `createError.HttpError`. - -### Error Properties - -- `expose` - can be used to signal if `message` should be sent to the client, - defaulting to `false` when `status` >= 500 -- `headers` - can be an object of header names to values to be sent to the - client, defaulting to `undefined`. When defined, the key names should all - be lower-cased -- `message` - the traditional error message, which should be kept short and all - single line -- `status` - the status code of the error, mirroring `statusCode` for general - compatibility -- `statusCode` - the status code of the error, defaulting to `500` - -### createError([status], [message], [properties]) - - - -```js -var err = createError(404, 'This video does not exist!') -``` - -- `status: 500` - the status code as a number -- `message` - the message of the error, defaulting to node's text for that status code. -- `properties` - custom properties to attach to the object - -### new createError\[code || name\](\[msg]\)) - - - -```js -var err = new createError.NotFound() -``` - -- `code` - the status code as a number -- `name` - the name of the error as a "bumpy case", i.e. `NotFound` or `InternalServerError`. - -#### List of all constructors - -|Status Code|Constructor Name | -|-----------|-----------------------------| -|400 |BadRequest | -|401 |Unauthorized | -|402 |PaymentRequired | -|403 |Forbidden | -|404 |NotFound | -|405 |MethodNotAllowed | -|406 |NotAcceptable | -|407 |ProxyAuthenticationRequired | -|408 |RequestTimeout | -|409 |Conflict | -|410 |Gone | -|411 |LengthRequired | -|412 |PreconditionFailed | -|413 |PayloadTooLarge | -|414 |URITooLong | -|415 |UnsupportedMediaType | -|416 |RangeNotSatisfiable | -|417 |ExpectationFailed | -|418 |ImATeapot | -|421 |MisdirectedRequest | -|422 |UnprocessableEntity | -|423 |Locked | -|424 |FailedDependency | -|425 |UnorderedCollection | -|426 |UpgradeRequired | -|428 |PreconditionRequired | -|429 |TooManyRequests | -|431 |RequestHeaderFieldsTooLarge | -|451 |UnavailableForLegalReasons | -|500 |InternalServerError | -|501 |NotImplemented | -|502 |BadGateway | -|503 |ServiceUnavailable | -|504 |GatewayTimeout | -|505 |HTTPVersionNotSupported | -|506 |VariantAlsoNegotiates | -|507 |InsufficientStorage | -|508 |LoopDetected | -|509 |BandwidthLimitExceeded | -|510 |NotExtended | -|511 |NetworkAuthenticationRequired| - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/http-errors.svg -[npm-url]: https://npmjs.org/package/http-errors -[node-version-image]: https://img.shields.io/node/v/http-errors.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/http-errors.svg -[travis-url]: https://travis-ci.org/jshttp/http-errors -[coveralls-image]: https://img.shields.io/coveralls/jshttp/http-errors.svg -[coveralls-url]: https://coveralls.io/r/jshttp/http-errors -[downloads-image]: https://img.shields.io/npm/dm/http-errors.svg -[downloads-url]: https://npmjs.org/package/http-errors diff --git a/truebit-implementation/node_modules/http-errors/index.js b/truebit-implementation/node_modules/http-errors/index.js deleted file mode 100644 index 9509303e..00000000 --- a/truebit-implementation/node_modules/http-errors/index.js +++ /dev/null @@ -1,260 +0,0 @@ -/*! - * http-errors - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var deprecate = require('depd')('http-errors') -var setPrototypeOf = require('setprototypeof') -var statuses = require('statuses') -var inherits = require('inherits') - -/** - * Module exports. - * @public - */ - -module.exports = createError -module.exports.HttpError = createHttpErrorConstructor() - -// Populate exports for all constructors -populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError) - -/** - * Get the code class of a status code. - * @private - */ - -function codeClass (status) { - return Number(String(status).charAt(0) + '00') -} - -/** - * Create a new HTTP Error. - * - * @returns {Error} - * @public - */ - -function createError () { - // so much arity going on ~_~ - var err - var msg - var status = 500 - var props = {} - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i] - if (arg instanceof Error) { - err = arg - status = err.status || err.statusCode || status - continue - } - switch (typeof arg) { - case 'string': - msg = arg - break - case 'number': - status = arg - if (i !== 0) { - deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)') - } - break - case 'object': - props = arg - break - } - } - - if (typeof status === 'number' && (status < 400 || status >= 600)) { - deprecate('non-error status code; use only 4xx or 5xx status codes') - } - - if (typeof status !== 'number' || - (!statuses[status] && (status < 400 || status >= 600))) { - status = 500 - } - - // constructor - var HttpError = createError[status] || createError[codeClass(status)] - - if (!err) { - // create error - err = HttpError - ? new HttpError(msg) - : new Error(msg || statuses[status]) - Error.captureStackTrace(err, createError) - } - - if (!HttpError || !(err instanceof HttpError) || err.status !== status) { - // add properties to generic error - err.expose = status < 500 - err.status = err.statusCode = status - } - - for (var key in props) { - if (key !== 'status' && key !== 'statusCode') { - err[key] = props[key] - } - } - - return err -} - -/** - * Create HTTP error abstract base class. - * @private - */ - -function createHttpErrorConstructor () { - function HttpError () { - throw new TypeError('cannot construct abstract class') - } - - inherits(HttpError, Error) - - return HttpError -} - -/** - * Create a constructor for a client error. - * @private - */ - -function createClientErrorConstructor (HttpError, name, code) { - var className = name.match(/Error$/) ? name : name + 'Error' - - function ClientError (message) { - // create the error object - var msg = message != null ? message : statuses[code] - var err = new Error(msg) - - // capture a stack trace to the construction point - Error.captureStackTrace(err, ClientError) - - // adjust the [[Prototype]] - setPrototypeOf(err, ClientError.prototype) - - // redefine the error message - Object.defineProperty(err, 'message', { - enumerable: true, - configurable: true, - value: msg, - writable: true - }) - - // redefine the error name - Object.defineProperty(err, 'name', { - enumerable: false, - configurable: true, - value: className, - writable: true - }) - - return err - } - - inherits(ClientError, HttpError) - - ClientError.prototype.status = code - ClientError.prototype.statusCode = code - ClientError.prototype.expose = true - - return ClientError -} - -/** - * Create a constructor for a server error. - * @private - */ - -function createServerErrorConstructor (HttpError, name, code) { - var className = name.match(/Error$/) ? name : name + 'Error' - - function ServerError (message) { - // create the error object - var msg = message != null ? message : statuses[code] - var err = new Error(msg) - - // capture a stack trace to the construction point - Error.captureStackTrace(err, ServerError) - - // adjust the [[Prototype]] - setPrototypeOf(err, ServerError.prototype) - - // redefine the error message - Object.defineProperty(err, 'message', { - enumerable: true, - configurable: true, - value: msg, - writable: true - }) - - // redefine the error name - Object.defineProperty(err, 'name', { - enumerable: false, - configurable: true, - value: className, - writable: true - }) - - return err - } - - inherits(ServerError, HttpError) - - ServerError.prototype.status = code - ServerError.prototype.statusCode = code - ServerError.prototype.expose = false - - return ServerError -} - -/** - * Populate the exports object with constructors for every error class. - * @private - */ - -function populateConstructorExports (exports, codes, HttpError) { - codes.forEach(function forEachCode (code) { - var CodeError - var name = toIdentifier(statuses[code]) - - switch (codeClass(code)) { - case 400: - CodeError = createClientErrorConstructor(HttpError, name, code) - break - case 500: - CodeError = createServerErrorConstructor(HttpError, name, code) - break - } - - if (CodeError) { - // export the constructor - exports[code] = CodeError - exports[name] = CodeError - } - }) - - // backwards-compatibility - exports["I'mateapot"] = deprecate.function(exports.ImATeapot, - '"I\'mateapot"; use "ImATeapot" instead') -} - -/** - * Convert a string of words to a JavaScript identifier. - * @private - */ - -function toIdentifier (str) { - return str.split(' ').map(function (token) { - return token.slice(0, 1).toUpperCase() + token.slice(1) - }).join('').replace(/[^ _0-9a-z]/gi, '') -} diff --git a/truebit-implementation/node_modules/http-errors/package.json b/truebit-implementation/node_modules/http-errors/package.json deleted file mode 100644 index 1f556ca1..00000000 --- a/truebit-implementation/node_modules/http-errors/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_from": "http-errors@~1.6.3", - "_id": "http-errors@1.6.3", - "_inBundle": false, - "_integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "_location": "/http-errors", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "http-errors@~1.6.3", - "name": "http-errors", - "escapedName": "http-errors", - "rawSpec": "~1.6.3", - "saveSpec": null, - "fetchSpec": "~1.6.3" - }, - "_requiredBy": [ - "/body-parser", - "/raw-body", - "/send" - ], - "_resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "_shasum": "8b55680bb4be283a0b5bf4ea2e38580be1d9320d", - "_spec": "http-errors@~1.6.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/jshttp/http-errors/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Alan Plum", - "email": "me@pluma.io" - }, - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - } - ], - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "deprecated": false, - "description": "Create HTTP error objects", - "devDependencies": { - "eslint": "4.18.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.9.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "index.js", - "HISTORY.md", - "LICENSE", - "README.md" - ], - "homepage": "https://github.com/jshttp/http-errors#readme", - "keywords": [ - "http", - "error" - ], - "license": "MIT", - "name": "http-errors", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/http-errors.git" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" - }, - "version": "1.6.3" -} diff --git a/truebit-implementation/node_modules/http-https/LICENSE b/truebit-implementation/node_modules/http-https/LICENSE deleted file mode 100644 index 05eeeb88..00000000 --- a/truebit-implementation/node_modules/http-https/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/http-https/README.md b/truebit-implementation/node_modules/http-https/README.md deleted file mode 100644 index f2d7ff72..00000000 --- a/truebit-implementation/node_modules/http-https/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# http-https - -A wrapper that chooses http or https for requests - -## USAGE - -```javascript -var hh = require('http-https') - -var req = hh.request('http://example.com/bar') -var secureReq = hh.request('https://secure.example.com/foo') - -// or with a parsed object... -var opt = url.parse(someUrlMaybeHttpMaybeHttps) -opt.headers = { - 'user-agent': 'flergy mc flerg' -} -opt.method = 'HEAD' -var req = hh.request(opt, function (res) { - console.log('got response!', res.statusCode, res.headers) -}) -req.end() -``` diff --git a/truebit-implementation/node_modules/http-https/http-https.js b/truebit-implementation/node_modules/http-https/http-https.js deleted file mode 100644 index 113fdbf0..00000000 --- a/truebit-implementation/node_modules/http-https/http-https.js +++ /dev/null @@ -1,19 +0,0 @@ -var http = exports.http = require('http') -var https = exports.https = require('https') -var url = require('url') - -exports.get = function(opt, cb) { - return getMod(opt).get(opt, cb) -} - -exports.request = function(opt, cb) { - return getMod(opt).request(opt, cb) -} - -exports.getModule = getMod -function getMod(opt) { - if (typeof opt === 'string') - opt = url.parse(opt) - - return opt.protocol === 'https:' ? https : http -} diff --git a/truebit-implementation/node_modules/http-https/package.json b/truebit-implementation/node_modules/http-https/package.json deleted file mode 100644 index 765e517d..00000000 --- a/truebit-implementation/node_modules/http-https/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "_from": "http-https@^1.0.0", - "_id": "http-https@1.0.0", - "_inBundle": false, - "_integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=", - "_location": "/http-https", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "http-https@^1.0.0", - "name": "http-https", - "escapedName": "http-https", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/oboe" - ], - "_resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "_shasum": "2f908dd5f1db4068c058cd6e6d4ce392c913389b", - "_spec": "http-https@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/oboe", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/http-https/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A wrapper that chooses http or https for requests", - "homepage": "https://github.com/isaacs/http-https", - "license": "ISC", - "main": "http-https.js", - "name": "http-https", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/http-https.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/http-https/test.js b/truebit-implementation/node_modules/http-https/test.js deleted file mode 100644 index 35afd199..00000000 --- a/truebit-implementation/node_modules/http-https/test.js +++ /dev/null @@ -1,6 +0,0 @@ -var hh = require('./http-https.js') -var assert = require('assert') - -assert.equal(hh.getModule('https://foo'), hh.https) -assert.equal(hh.getModule('http://foo'), hh.http) -console.log('ok') diff --git a/truebit-implementation/node_modules/http-signature/.dir-locals.el b/truebit-implementation/node_modules/http-signature/.dir-locals.el deleted file mode 100644 index 3bc9235f..00000000 --- a/truebit-implementation/node_modules/http-signature/.dir-locals.el +++ /dev/null @@ -1,6 +0,0 @@ -((nil . ((indent-tabs-mode . nil) - (tab-width . 8) - (fill-column . 80))) - (js-mode . ((js-indent-level . 2) - (indent-tabs-mode . nil) - ))) \ No newline at end of file diff --git a/truebit-implementation/node_modules/http-signature/.npmignore b/truebit-implementation/node_modules/http-signature/.npmignore deleted file mode 100644 index c143fb3a..00000000 --- a/truebit-implementation/node_modules/http-signature/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.gitmodules -deps -docs -Makefile -node_modules -test -tools \ No newline at end of file diff --git a/truebit-implementation/node_modules/http-signature/CHANGES.md b/truebit-implementation/node_modules/http-signature/CHANGES.md deleted file mode 100644 index 6f69444b..00000000 --- a/truebit-implementation/node_modules/http-signature/CHANGES.md +++ /dev/null @@ -1,46 +0,0 @@ -# node-http-signature changelog - -## 1.1.1 - -- Version of dependency `assert-plus` updated: old version was missing - some license information -- Corrected examples in `http_signing.md`, added auto-tests to - automatically validate these examples - -## 1.1.0 - -- Bump version of `sshpk` dependency, remove peerDependency on it since - it now supports exchanging objects between multiple versions of itself - where possible - -## 1.0.2 - -- Bump min version of `jsprim` dependency, to include fixes for using - http-signature with `browserify` - -## 1.0.1 - -- Bump minimum version of `sshpk` dependency, to include fixes for - whitespace tolerance in key parsing. - -## 1.0.0 - -- First semver release. -- #36: Ensure verifySignature does not leak useful timing information -- #42: Bring the library up to the latest version of the spec (including the - request-target changes) -- Support for ECDSA keys and signatures. -- Now uses `sshpk` for key parsing, validation and conversion. -- Fixes for #21, #47, #39 and compatibility with node 0.8 - -## 0.11.0 - -- Split up HMAC and Signature verification to avoid vulnerabilities where a - key intended for use with one can be validated against the other method - instead. - -## 0.10.2 - -- Updated versions of most dependencies. -- Utility functions exported for PEM => SSH-RSA conversion. -- Improvements to tests and examples. diff --git a/truebit-implementation/node_modules/http-signature/LICENSE b/truebit-implementation/node_modules/http-signature/LICENSE deleted file mode 100644 index f6d947d2..00000000 --- a/truebit-implementation/node_modules/http-signature/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/http-signature/README.md b/truebit-implementation/node_modules/http-signature/README.md deleted file mode 100644 index de487d32..00000000 --- a/truebit-implementation/node_modules/http-signature/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# node-http-signature - -node-http-signature is a node.js library that has client and server components -for Joyent's [HTTP Signature Scheme](http_signing.md). - -## Usage - -Note the example below signs a request with the same key/cert used to start an -HTTP server. This is almost certainly not what you actually want, but is just -used to illustrate the API calls; you will need to provide your own key -management in addition to this library. - -### Client - -```js -var fs = require('fs'); -var https = require('https'); -var httpSignature = require('http-signature'); - -var key = fs.readFileSync('./key.pem', 'ascii'); - -var options = { - host: 'localhost', - port: 8443, - path: '/', - method: 'GET', - headers: {} -}; - -// Adds a 'Date' header in, signs it, and adds the -// 'Authorization' header in. -var req = https.request(options, function(res) { - console.log(res.statusCode); -}); - - -httpSignature.sign(req, { - key: key, - keyId: './cert.pem' -}); - -req.end(); -``` - -### Server - -```js -var fs = require('fs'); -var https = require('https'); -var httpSignature = require('http-signature'); - -var options = { - key: fs.readFileSync('./key.pem'), - cert: fs.readFileSync('./cert.pem') -}; - -https.createServer(options, function (req, res) { - var rc = 200; - var parsed = httpSignature.parseRequest(req); - var pub = fs.readFileSync(parsed.keyId, 'ascii'); - if (!httpSignature.verifySignature(parsed, pub)) - rc = 401; - - res.writeHead(rc); - res.end(); -}).listen(8443); -``` - -## Installation - - npm install http-signature - -## License - -MIT. - -## Bugs - -See . diff --git a/truebit-implementation/node_modules/http-signature/http_signing.md b/truebit-implementation/node_modules/http-signature/http_signing.md deleted file mode 100644 index 4f24d28c..00000000 --- a/truebit-implementation/node_modules/http-signature/http_signing.md +++ /dev/null @@ -1,363 +0,0 @@ -# Abstract - -This document describes a way to add origin authentication, message integrity, -and replay resistance to HTTP REST requests. It is intended to be used over -the HTTPS protocol. - -# Copyright Notice - -Copyright (c) 2011 Joyent, Inc. and the persons identified as document authors. -All rights reserved. - -Code Components extracted from this document must include MIT License text. - -# Introduction - -This protocol is intended to provide a standard way for clients to sign HTTP -requests. RFC2617 (HTTP Authentication) defines Basic and Digest authentication -mechanisms, and RFC5246 (TLS 1.2) defines client-auth, both of which are widely -employed on the Internet today. However, it is common place that the burdens of -PKI prevent web service operators from deploying that methodology, and so many -fall back to Basic authentication, which has poor security characteristics. - -Additionally, OAuth provides a fully-specified alternative for authorization -of web service requests, but is not (always) ideal for machine to machine -communication, as the key acquisition steps (generally) imply a fixed -infrastructure that may not make sense to a service provider (e.g., symmetric -keys). - -Several web service providers have invented their own schemes for signing -HTTP requests, but to date, none have been placed in the public domain as a -standard. This document serves that purpose. There are no techniques in this -proposal that are novel beyond previous art, however, this aims to be a simple -mechanism for signing these requests. - -# Signature Authentication Scheme - -The "signature" authentication scheme is based on the model that the client must -authenticate itself with a digital signature produced by either a private -asymmetric key (e.g., RSA) or a shared symmetric key (e.g., HMAC). The scheme -is parameterized enough such that it is not bound to any particular key type or -signing algorithm. However, it does explicitly assume that clients can send an -HTTP `Date` header. - -## Authorization Header - -The client is expected to send an Authorization header (as defined in RFC 2617) -with the following parameterization: - - credentials := "Signature" params - params := 1#(keyId | algorithm | [headers] | [ext] | signature) - digitalSignature := plain-string - - keyId := "keyId" "=" <"> plain-string <"> - algorithm := "algorithm" "=" <"> plain-string <"> - headers := "headers" "=" <"> 1#headers-value <"> - ext := "ext" "=" <"> plain-string <"> - signature := "signature" "=" <"> plain-string <"> - - headers-value := plain-string - plain-string = 1*( %x20-21 / %x23-5B / %x5D-7E ) - -### Signature Parameters - -#### keyId - -REQUIRED. The `keyId` field is an opaque string that the server can use to look -up the component they need to validate the signature. It could be an SSH key -fingerprint, an LDAP DN, etc. Management of keys and assignment of `keyId` is -out of scope for this document. - -#### algorithm - -REQUIRED. The `algorithm` parameter is used if the client and server agree on a -non-standard digital signature algorithm. The full list of supported signature -mechanisms is listed below. - -#### headers - -OPTIONAL. The `headers` parameter is used to specify the list of HTTP headers -used to sign the request. If specified, it should be a quoted list of HTTP -header names, separated by a single space character. By default, only one -HTTP header is signed, which is the `Date` header. Note that the list MUST be -specified in the order the values are concatenated together during signing. To -include the HTTP request line in the signature calculation, use the special -`request-line` value. While this is overloading the definition of `headers` in -HTTP linguism, the request-line is defined in RFC 2616, and as the outlier from -headers in useful signature calculation, it is deemed simpler to simply use -`request-line` than to add a separate parameter for it. - -#### extensions - -OPTIONAL. The `extensions` parameter is used to include additional information -which is covered by the request. The content and format of the string is out of -scope for this document, and expected to be specified by implementors. - -#### signature - -REQUIRED. The `signature` parameter is a `Base64` encoded digital signature -generated by the client. The client uses the `algorithm` and `headers` request -parameters to form a canonicalized `signing string`. This `signing string` is -then signed with the key associated with `keyId` and the algorithm -corresponding to `algorithm`. The `signature` parameter is then set to the -`Base64` encoding of the signature. - -### Signing String Composition - -In order to generate the string that is signed with a key, the client MUST take -the values of each HTTP header specified by `headers` in the order they appear. - -1. If the header name is not `request-line` then append the lowercased header - name followed with an ASCII colon `:` and an ASCII space ` `. -2. If the header name is `request-line` then append the HTTP request line, - otherwise append the header value. -3. If value is not the last value then append an ASCII newline `\n`. The string - MUST NOT include a trailing ASCII newline. - -# Example Requests - -All requests refer to the following request (body omitted): - - POST /foo HTTP/1.1 - Host: example.org - Date: Tue, 07 Jun 2014 20:51:35 GMT - Content-Type: application/json - Digest: SHA-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE= - Content-Length: 18 - -The "rsa-key-1" keyId refers to a private key known to the client and a public -key known to the server. The "hmac-key-1" keyId refers to key known to the -client and server. - -## Default parameterization - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2014 20:51:35 GMT - -## Header List - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="rsa-key-1",algorithm="rsa-sha256",headers="(request-target) date content-type digest",signature="Base64(RSA-SHA256(signing string))" - -The client would compose the signing string as (`+ "\n"` inserted for -readability): - - (request-target) post /foo + "\n" - date: Tue, 07 Jun 2011 20:51:35 GMT + "\n" - content-type: application/json + "\n" - digest: SHA-256=Base64(SHA256(Body)) - -## Algorithm - -The authorization header and signature would be generated as: - - Authorization: Signature keyId="hmac-key-1",algorithm="hmac-sha1",signature="Base64(HMAC-SHA1(signing string))" - -The client would compose the signing string as: - - date: Tue, 07 Jun 2011 20:51:35 GMT - -# Signing Algorithms - -Currently supported algorithm names are: - -* rsa-sha1 -* rsa-sha256 -* rsa-sha512 -* dsa-sha1 -* hmac-sha1 -* hmac-sha256 -* hmac-sha512 - -# Security Considerations - -## Default Parameters - -Note the default parameterization of the `Signature` scheme is only safe if all -requests are carried over a secure transport (i.e., TLS). Sending the default -scheme over a non-secure transport will leave the request vulnerable to -spoofing, tampering, replay/repudiation, and integrity violations (if using the -STRIDE threat-modeling methodology). - -## Insecure Transports - -If sending the request over plain HTTP, service providers SHOULD require clients -to sign ALL HTTP headers, and the `request-line`. Additionally, service -providers SHOULD require `Content-MD5` calculations to be performed to ensure -against any tampering from clients. - -## Nonces - -Nonces are out of scope for this document simply because many service providers -fail to implement them correctly, or do not adopt security specifications -because of the infrastructure complexity. Given the `header` parameterization, -a service provider is fully enabled to add nonce semantics into this scheme by -using something like an `x-request-nonce` header, and ensuring it is signed -with the `Date` header. - -## Clock Skew - -As the default scheme is to sign the `Date` header, service providers SHOULD -protect against logged replay attacks by enforcing a clock skew. The server -SHOULD be synchronized with NTP, and the recommendation in this specification -is to allow 300s of clock skew (in either direction). - -## Required Headers to Sign - -It is out of scope for this document to dictate what headers a service provider -will want to enforce, but service providers SHOULD at minimum include the -`Date` header. - -# References - -## Normative References - -* [RFC2616] Hypertext Transfer Protocol -- HTTP/1.1 -* [RFC2617] HTTP Authentication: Basic and Digest Access Authentication -* [RFC5246] The Transport Layer Security (TLS) Protocol Version 1.2 - -## Informative References - - Name: Mark Cavage (editor) - Company: Joyent, Inc. - Email: mark.cavage@joyent.com - URI: http://www.joyent.com - -# Appendix A - Test Values - -The following test data uses the RSA (1024b) keys, which we will refer -to as `keyId=Test` in the following samples: - - -----BEGIN PUBLIC KEY----- - MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 - 6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 - Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw - oYi+1hqp1fIekaxsyQIDAQAB - -----END PUBLIC KEY----- - - -----BEGIN RSA PRIVATE KEY----- - MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF - NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F - UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB - AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA - QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK - kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg - f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u - 412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc - mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 - kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA - gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW - G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI - 7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== - -----END RSA PRIVATE KEY----- - -And all examples use this request: - - - - POST /foo?param=value&pet=dog HTTP/1.1 - Host: example.com - Date: Thu, 05 Jan 2014 21:31:40 GMT - Content-Type: application/json - Digest: SHA-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE= - Content-Length: 18 - - {"hello": "world"} - - - -### Default - -The string to sign would be: - - - - - date: Thu, 05 Jan 2014 21:31:40 GMT - - - -The Authorization header would be: - - - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="date",signature="jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9HpFQlG7N4YcJPteKTu4MWCLyk+gIr0wDgqtLWf9NLpMAMimdfsH7FSWGfbMFSrsVTHNTk0rK3usrfFnti1dxsM4jl0kYJCKTGI/UWkqiaxwNiKqGcdlEDrTcUhhsFsOIo8VhddmZTZ8w=" - - - -### All Headers - -Parameterized to include all headers, the string to sign would be (`+ "\n"` -inserted for readability): - - - - - (request-target): post /foo?param=value&pet=dog - host: example.com - date: Thu, 05 Jan 2014 21:31:40 GMT - content-type: application/json - digest: SHA-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE= - content-length: 18 - - - -The Authorization header would be: - - - - Authorization: Signature keyId="Test",algorithm="rsa-sha256",headers="(request-target) host date content-type digest content-length",signature="Ef7MlxLXoBovhil3AlyjtBwAL9g4TN3tibLj7uuNB3CROat/9KaeQ4hW2NiJ+pZ6HQEOx9vYZAyi+7cmIkmJszJCut5kQLAwuX+Ms/mUFvpKlSo9StS2bMXDBNjOh4Auj774GFj4gwjS+3NhFeoqyr/MuN6HsEnkvn6zdgfE2i0=" - - - -## Generating and verifying signatures using `openssl` - -The `openssl` commandline tool can be used to generate or verify the signatures listed above. - -Compose the signing string as usual, and pipe it into the the `openssl dgst` command, then into `openssl enc -base64`, as follows: - - $ printf 'date: Thu, 05 Jan 2014 21:31:40 GMT' | \ - openssl dgst -binary -sign /path/to/private.pem -sha256 | \ - openssl enc -base64 - jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9Hp... - $ - -The `-sha256` option is necessary to produce an `rsa-sha256` signature. You can select other hash algorithms such as `sha1` by changing this argument. - -To verify a signature, first save the signature data, Base64-decoded, into a file, then use `openssl dgst` again with the `-verify` option: - - $ echo 'jKyvPcxB4JbmYY4mByy...' | openssl enc -A -d -base64 > signature - $ printf 'date: Thu, 05 Jan 2014 21:31:40 GMT' | \ - openssl dgst -sha256 -verify /path/to/public.pem -signature ./signature - Verified OK - $ - -## Generating and verifying signatures using `sshpk-sign` - -You can also generate and check signatures using the `sshpk-sign` tool which is -included with the `sshpk` package in `npm`. - -Compose the signing string as above, and pipe it into `sshpk-sign` as follows: - - $ printf 'date: Thu, 05 Jan 2014 21:31:40 GMT' | \ - sshpk-sign -i /path/to/private.pem - jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9Hp... - $ - -This will produce an `rsa-sha256` signature by default, as you can see using -the `-v` option: - - sshpk-sign: using rsa-sha256 with a 1024 bit key - -You can also use `sshpk-verify` in a similar manner: - - $ printf 'date: Thu, 05 Jan 2014 21:31:40 GMT' | \ - sshpk-verify -i ./public.pem -s 'jKyvPcxB4JbmYY...' - OK - $ diff --git a/truebit-implementation/node_modules/http-signature/lib/index.js b/truebit-implementation/node_modules/http-signature/lib/index.js deleted file mode 100644 index 54d46030..00000000 --- a/truebit-implementation/node_modules/http-signature/lib/index.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -var parser = require('./parser'); -var signer = require('./signer'); -var verify = require('./verify'); -var utils = require('./utils'); - - - -///--- API - -module.exports = { - - parse: parser.parseRequest, - parseRequest: parser.parseRequest, - - sign: signer.signRequest, - signRequest: signer.signRequest, - createSigner: signer.createSigner, - isSigner: signer.isSigner, - - sshKeyToPEM: utils.sshKeyToPEM, - sshKeyFingerprint: utils.fingerprint, - pemToRsaSSHKey: utils.pemToRsaSSHKey, - - verify: verify.verifySignature, - verifySignature: verify.verifySignature, - verifyHMAC: verify.verifyHMAC -}; diff --git a/truebit-implementation/node_modules/http-signature/lib/parser.js b/truebit-implementation/node_modules/http-signature/lib/parser.js deleted file mode 100644 index 5994a7e9..00000000 --- a/truebit-implementation/node_modules/http-signature/lib/parser.js +++ /dev/null @@ -1,315 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var util = require('util'); -var utils = require('./utils'); - - - -///--- Globals - -var HASH_ALGOS = utils.HASH_ALGOS; -var PK_ALGOS = utils.PK_ALGOS; -var HttpSignatureError = utils.HttpSignatureError; -var InvalidAlgorithmError = utils.InvalidAlgorithmError; -var validateAlgorithm = utils.validateAlgorithm; - -var State = { - New: 0, - Params: 1 -}; - -var ParamsState = { - Name: 0, - Quote: 1, - Value: 2, - Comma: 3 -}; - - -///--- Specific Errors - - -function ExpiredRequestError(message) { - HttpSignatureError.call(this, message, ExpiredRequestError); -} -util.inherits(ExpiredRequestError, HttpSignatureError); - - -function InvalidHeaderError(message) { - HttpSignatureError.call(this, message, InvalidHeaderError); -} -util.inherits(InvalidHeaderError, HttpSignatureError); - - -function InvalidParamsError(message) { - HttpSignatureError.call(this, message, InvalidParamsError); -} -util.inherits(InvalidParamsError, HttpSignatureError); - - -function MissingHeaderError(message) { - HttpSignatureError.call(this, message, MissingHeaderError); -} -util.inherits(MissingHeaderError, HttpSignatureError); - -function StrictParsingError(message) { - HttpSignatureError.call(this, message, StrictParsingError); -} -util.inherits(StrictParsingError, HttpSignatureError); - -///--- Exported API - -module.exports = { - - /** - * Parses the 'Authorization' header out of an http.ServerRequest object. - * - * Note that this API will fully validate the Authorization header, and throw - * on any error. It will not however check the signature, or the keyId format - * as those are specific to your environment. You can use the options object - * to pass in extra constraints. - * - * As a response object you can expect this: - * - * { - * "scheme": "Signature", - * "params": { - * "keyId": "foo", - * "algorithm": "rsa-sha256", - * "headers": [ - * "date" or "x-date", - * "digest" - * ], - * "signature": "base64" - * }, - * "signingString": "ready to be passed to crypto.verify()" - * } - * - * @param {Object} request an http.ServerRequest. - * @param {Object} options an optional options object with: - * - clockSkew: allowed clock skew in seconds (default 300). - * - headers: required header names (def: date or x-date) - * - algorithms: algorithms to support (default: all). - * - strict: should enforce latest spec parsing - * (default: false). - * @return {Object} parsed out object (see above). - * @throws {TypeError} on invalid input. - * @throws {InvalidHeaderError} on an invalid Authorization header error. - * @throws {InvalidParamsError} if the params in the scheme are invalid. - * @throws {MissingHeaderError} if the params indicate a header not present, - * either in the request headers from the params, - * or not in the params from a required header - * in options. - * @throws {StrictParsingError} if old attributes are used in strict parsing - * mode. - * @throws {ExpiredRequestError} if the value of date or x-date exceeds skew. - */ - parseRequest: function parseRequest(request, options) { - assert.object(request, 'request'); - assert.object(request.headers, 'request.headers'); - if (options === undefined) { - options = {}; - } - if (options.headers === undefined) { - options.headers = [request.headers['x-date'] ? 'x-date' : 'date']; - } - assert.object(options, 'options'); - assert.arrayOfString(options.headers, 'options.headers'); - assert.optionalFinite(options.clockSkew, 'options.clockSkew'); - - var authzHeaderName = options.authorizationHeaderName || 'authorization'; - - if (!request.headers[authzHeaderName]) { - throw new MissingHeaderError('no ' + authzHeaderName + ' header ' + - 'present in the request'); - } - - options.clockSkew = options.clockSkew || 300; - - - var i = 0; - var state = State.New; - var substate = ParamsState.Name; - var tmpName = ''; - var tmpValue = ''; - - var parsed = { - scheme: '', - params: {}, - signingString: '' - }; - - var authz = request.headers[authzHeaderName]; - for (i = 0; i < authz.length; i++) { - var c = authz.charAt(i); - - switch (Number(state)) { - - case State.New: - if (c !== ' ') parsed.scheme += c; - else state = State.Params; - break; - - case State.Params: - switch (Number(substate)) { - - case ParamsState.Name: - var code = c.charCodeAt(0); - // restricted name of A-Z / a-z - if ((code >= 0x41 && code <= 0x5a) || // A-Z - (code >= 0x61 && code <= 0x7a)) { // a-z - tmpName += c; - } else if (c === '=') { - if (tmpName.length === 0) - throw new InvalidHeaderError('bad param format'); - substate = ParamsState.Quote; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Quote: - if (c === '"') { - tmpValue = ''; - substate = ParamsState.Value; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - case ParamsState.Value: - if (c === '"') { - parsed.params[tmpName] = tmpValue; - substate = ParamsState.Comma; - } else { - tmpValue += c; - } - break; - - case ParamsState.Comma: - if (c === ',') { - tmpName = ''; - substate = ParamsState.Name; - } else { - throw new InvalidHeaderError('bad param format'); - } - break; - - default: - throw new Error('Invalid substate'); - } - break; - - default: - throw new Error('Invalid substate'); - } - - } - - if (!parsed.params.headers || parsed.params.headers === '') { - if (request.headers['x-date']) { - parsed.params.headers = ['x-date']; - } else { - parsed.params.headers = ['date']; - } - } else { - parsed.params.headers = parsed.params.headers.split(' '); - } - - // Minimally validate the parsed object - if (!parsed.scheme || parsed.scheme !== 'Signature') - throw new InvalidHeaderError('scheme was not "Signature"'); - - if (!parsed.params.keyId) - throw new InvalidHeaderError('keyId was not specified'); - - if (!parsed.params.algorithm) - throw new InvalidHeaderError('algorithm was not specified'); - - if (!parsed.params.signature) - throw new InvalidHeaderError('signature was not specified'); - - // Check the algorithm against the official list - parsed.params.algorithm = parsed.params.algorithm.toLowerCase(); - try { - validateAlgorithm(parsed.params.algorithm); - } catch (e) { - if (e instanceof InvalidAlgorithmError) - throw (new InvalidParamsError(parsed.params.algorithm + ' is not ' + - 'supported')); - else - throw (e); - } - - // Build the signingString - for (i = 0; i < parsed.params.headers.length; i++) { - var h = parsed.params.headers[i].toLowerCase(); - parsed.params.headers[i] = h; - - if (h === 'request-line') { - if (!options.strict) { - /* - * We allow headers from the older spec drafts if strict parsing isn't - * specified in options. - */ - parsed.signingString += - request.method + ' ' + request.url + ' HTTP/' + request.httpVersion; - } else { - /* Strict parsing doesn't allow older draft headers. */ - throw (new StrictParsingError('request-line is not a valid header ' + - 'with strict parsing enabled.')); - } - } else if (h === '(request-target)') { - parsed.signingString += - '(request-target): ' + request.method.toLowerCase() + ' ' + - request.url; - } else { - var value = request.headers[h]; - if (value === undefined) - throw new MissingHeaderError(h + ' was not in the request'); - parsed.signingString += h + ': ' + value; - } - - if ((i + 1) < parsed.params.headers.length) - parsed.signingString += '\n'; - } - - // Check against the constraints - var date; - if (request.headers.date || request.headers['x-date']) { - if (request.headers['x-date']) { - date = new Date(request.headers['x-date']); - } else { - date = new Date(request.headers.date); - } - var now = new Date(); - var skew = Math.abs(now.getTime() - date.getTime()); - - if (skew > options.clockSkew * 1000) { - throw new ExpiredRequestError('clock skew of ' + - (skew / 1000) + - 's was greater than ' + - options.clockSkew + 's'); - } - } - - options.headers.forEach(function (hdr) { - // Remember that we already checked any headers in the params - // were in the request, so if this passes we're good. - if (parsed.params.headers.indexOf(hdr.toLowerCase()) < 0) - throw new MissingHeaderError(hdr + ' was not a signed header'); - }); - - if (options.algorithms) { - if (options.algorithms.indexOf(parsed.params.algorithm) === -1) - throw new InvalidParamsError(parsed.params.algorithm + - ' is not a supported algorithm'); - } - - parsed.algorithm = parsed.params.algorithm.toUpperCase(); - parsed.keyId = parsed.params.keyId; - return parsed; - } - -}; diff --git a/truebit-implementation/node_modules/http-signature/lib/signer.js b/truebit-implementation/node_modules/http-signature/lib/signer.js deleted file mode 100644 index deb58786..00000000 --- a/truebit-implementation/node_modules/http-signature/lib/signer.js +++ /dev/null @@ -1,401 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var crypto = require('crypto'); -var http = require('http'); -var util = require('util'); -var sshpk = require('sshpk'); -var jsprim = require('jsprim'); -var utils = require('./utils'); - -var sprintf = require('util').format; - -var HASH_ALGOS = utils.HASH_ALGOS; -var PK_ALGOS = utils.PK_ALGOS; -var InvalidAlgorithmError = utils.InvalidAlgorithmError; -var HttpSignatureError = utils.HttpSignatureError; -var validateAlgorithm = utils.validateAlgorithm; - -///--- Globals - -var AUTHZ_FMT = - 'Signature keyId="%s",algorithm="%s",headers="%s",signature="%s"'; - -///--- Specific Errors - -function MissingHeaderError(message) { - HttpSignatureError.call(this, message, MissingHeaderError); -} -util.inherits(MissingHeaderError, HttpSignatureError); - -function StrictParsingError(message) { - HttpSignatureError.call(this, message, StrictParsingError); -} -util.inherits(StrictParsingError, HttpSignatureError); - -/* See createSigner() */ -function RequestSigner(options) { - assert.object(options, 'options'); - - var alg = []; - if (options.algorithm !== undefined) { - assert.string(options.algorithm, 'options.algorithm'); - alg = validateAlgorithm(options.algorithm); - } - this.rs_alg = alg; - - /* - * RequestSigners come in two varieties: ones with an rs_signFunc, and ones - * with an rs_signer. - * - * rs_signFunc-based RequestSigners have to build up their entire signing - * string within the rs_lines array and give it to rs_signFunc as a single - * concat'd blob. rs_signer-based RequestSigners can add a line at a time to - * their signing state by using rs_signer.update(), thus only needing to - * buffer the hash function state and one line at a time. - */ - if (options.sign !== undefined) { - assert.func(options.sign, 'options.sign'); - this.rs_signFunc = options.sign; - - } else if (alg[0] === 'hmac' && options.key !== undefined) { - assert.string(options.keyId, 'options.keyId'); - this.rs_keyId = options.keyId; - - if (typeof (options.key) !== 'string' && !Buffer.isBuffer(options.key)) - throw (new TypeError('options.key for HMAC must be a string or Buffer')); - - /* - * Make an rs_signer for HMACs, not a rs_signFunc -- HMACs digest their - * data in chunks rather than requiring it all to be given in one go - * at the end, so they are more similar to signers than signFuncs. - */ - this.rs_signer = crypto.createHmac(alg[1].toUpperCase(), options.key); - this.rs_signer.sign = function () { - var digest = this.digest('base64'); - return ({ - hashAlgorithm: alg[1], - toString: function () { return (digest); } - }); - }; - - } else if (options.key !== undefined) { - var key = options.key; - if (typeof (key) === 'string' || Buffer.isBuffer(key)) - key = sshpk.parsePrivateKey(key); - - assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]), - 'options.key must be a sshpk.PrivateKey'); - this.rs_key = key; - - assert.string(options.keyId, 'options.keyId'); - this.rs_keyId = options.keyId; - - if (!PK_ALGOS[key.type]) { - throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' + - 'keys are not supported')); - } - - if (alg[0] !== undefined && key.type !== alg[0]) { - throw (new InvalidAlgorithmError('options.key must be a ' + - alg[0].toUpperCase() + ' key, was given a ' + - key.type.toUpperCase() + ' key instead')); - } - - this.rs_signer = key.createSign(alg[1]); - - } else { - throw (new TypeError('options.sign (func) or options.key is required')); - } - - this.rs_headers = []; - this.rs_lines = []; -} - -/** - * Adds a header to be signed, with its value, into this signer. - * - * @param {String} header - * @param {String} value - * @return {String} value written - */ -RequestSigner.prototype.writeHeader = function (header, value) { - assert.string(header, 'header'); - header = header.toLowerCase(); - assert.string(value, 'value'); - - this.rs_headers.push(header); - - if (this.rs_signFunc) { - this.rs_lines.push(header + ': ' + value); - - } else { - var line = header + ': ' + value; - if (this.rs_headers.length > 0) - line = '\n' + line; - this.rs_signer.update(line); - } - - return (value); -}; - -/** - * Adds a default Date header, returning its value. - * - * @return {String} - */ -RequestSigner.prototype.writeDateHeader = function () { - return (this.writeHeader('date', jsprim.rfc1123(new Date()))); -}; - -/** - * Adds the request target line to be signed. - * - * @param {String} method, HTTP method (e.g. 'get', 'post', 'put') - * @param {String} path - */ -RequestSigner.prototype.writeTarget = function (method, path) { - assert.string(method, 'method'); - assert.string(path, 'path'); - method = method.toLowerCase(); - this.writeHeader('(request-target)', method + ' ' + path); -}; - -/** - * Calculate the value for the Authorization header on this request - * asynchronously. - * - * @param {Func} callback (err, authz) - */ -RequestSigner.prototype.sign = function (cb) { - assert.func(cb, 'callback'); - - if (this.rs_headers.length < 1) - throw (new Error('At least one header must be signed')); - - var alg, authz; - if (this.rs_signFunc) { - var data = this.rs_lines.join('\n'); - var self = this; - this.rs_signFunc(data, function (err, sig) { - if (err) { - cb(err); - return; - } - try { - assert.object(sig, 'signature'); - assert.string(sig.keyId, 'signature.keyId'); - assert.string(sig.algorithm, 'signature.algorithm'); - assert.string(sig.signature, 'signature.signature'); - alg = validateAlgorithm(sig.algorithm); - - authz = sprintf(AUTHZ_FMT, - sig.keyId, - sig.algorithm, - self.rs_headers.join(' '), - sig.signature); - } catch (e) { - cb(e); - return; - } - cb(null, authz); - }); - - } else { - try { - var sigObj = this.rs_signer.sign(); - } catch (e) { - cb(e); - return; - } - alg = (this.rs_alg[0] || this.rs_key.type) + '-' + sigObj.hashAlgorithm; - var signature = sigObj.toString(); - authz = sprintf(AUTHZ_FMT, - this.rs_keyId, - alg, - this.rs_headers.join(' '), - signature); - cb(null, authz); - } -}; - -///--- Exported API - -module.exports = { - /** - * Identifies whether a given object is a request signer or not. - * - * @param {Object} object, the object to identify - * @returns {Boolean} - */ - isSigner: function (obj) { - if (typeof (obj) === 'object' && obj instanceof RequestSigner) - return (true); - return (false); - }, - - /** - * Creates a request signer, used to asynchronously build a signature - * for a request (does not have to be an http.ClientRequest). - * - * @param {Object} options, either: - * - {String} keyId - * - {String|Buffer} key - * - {String} algorithm (optional, required for HMAC) - * or: - * - {Func} sign (data, cb) - * @return {RequestSigner} - */ - createSigner: function createSigner(options) { - return (new RequestSigner(options)); - }, - - /** - * Adds an 'Authorization' header to an http.ClientRequest object. - * - * Note that this API will add a Date header if it's not already set. Any - * other headers in the options.headers array MUST be present, or this - * will throw. - * - * You shouldn't need to check the return type; it's just there if you want - * to be pedantic. - * - * The optional flag indicates whether parsing should use strict enforcement - * of the version draft-cavage-http-signatures-04 of the spec or beyond. - * The default is to be loose and support - * older versions for compatibility. - * - * @param {Object} request an instance of http.ClientRequest. - * @param {Object} options signing parameters object: - * - {String} keyId required. - * - {String} key required (either a PEM or HMAC key). - * - {Array} headers optional; defaults to ['date']. - * - {String} algorithm optional (unless key is HMAC); - * default is the same as the sshpk default - * signing algorithm for the type of key given - * - {String} httpVersion optional; defaults to '1.1'. - * - {Boolean} strict optional; defaults to 'false'. - * @return {Boolean} true if Authorization (and optionally Date) were added. - * @throws {TypeError} on bad parameter types (input). - * @throws {InvalidAlgorithmError} if algorithm was bad or incompatible with - * the given key. - * @throws {sshpk.KeyParseError} if key was bad. - * @throws {MissingHeaderError} if a header to be signed was specified but - * was not present. - */ - signRequest: function signRequest(request, options) { - assert.object(request, 'request'); - assert.object(options, 'options'); - assert.optionalString(options.algorithm, 'options.algorithm'); - assert.string(options.keyId, 'options.keyId'); - assert.optionalArrayOfString(options.headers, 'options.headers'); - assert.optionalString(options.httpVersion, 'options.httpVersion'); - - if (!request.getHeader('Date')) - request.setHeader('Date', jsprim.rfc1123(new Date())); - if (!options.headers) - options.headers = ['date']; - if (!options.httpVersion) - options.httpVersion = '1.1'; - - var alg = []; - if (options.algorithm) { - options.algorithm = options.algorithm.toLowerCase(); - alg = validateAlgorithm(options.algorithm); - } - - var i; - var stringToSign = ''; - for (i = 0; i < options.headers.length; i++) { - if (typeof (options.headers[i]) !== 'string') - throw new TypeError('options.headers must be an array of Strings'); - - var h = options.headers[i].toLowerCase(); - - if (h === 'request-line') { - if (!options.strict) { - /** - * We allow headers from the older spec drafts if strict parsing isn't - * specified in options. - */ - stringToSign += - request.method + ' ' + request.path + ' HTTP/' + - options.httpVersion; - } else { - /* Strict parsing doesn't allow older draft headers. */ - throw (new StrictParsingError('request-line is not a valid header ' + - 'with strict parsing enabled.')); - } - } else if (h === '(request-target)') { - stringToSign += - '(request-target): ' + request.method.toLowerCase() + ' ' + - request.path; - } else { - var value = request.getHeader(h); - if (value === undefined || value === '') { - throw new MissingHeaderError(h + ' was not in the request'); - } - stringToSign += h + ': ' + value; - } - - if ((i + 1) < options.headers.length) - stringToSign += '\n'; - } - - /* This is just for unit tests. */ - if (request.hasOwnProperty('_stringToSign')) { - request._stringToSign = stringToSign; - } - - var signature; - if (alg[0] === 'hmac') { - if (typeof (options.key) !== 'string' && !Buffer.isBuffer(options.key)) - throw (new TypeError('options.key must be a string or Buffer')); - - var hmac = crypto.createHmac(alg[1].toUpperCase(), options.key); - hmac.update(stringToSign); - signature = hmac.digest('base64'); - - } else { - var key = options.key; - if (typeof (key) === 'string' || Buffer.isBuffer(key)) - key = sshpk.parsePrivateKey(options.key); - - assert.ok(sshpk.PrivateKey.isPrivateKey(key, [1, 2]), - 'options.key must be a sshpk.PrivateKey'); - - if (!PK_ALGOS[key.type]) { - throw (new InvalidAlgorithmError(key.type.toUpperCase() + ' type ' + - 'keys are not supported')); - } - - if (alg[0] !== undefined && key.type !== alg[0]) { - throw (new InvalidAlgorithmError('options.key must be a ' + - alg[0].toUpperCase() + ' key, was given a ' + - key.type.toUpperCase() + ' key instead')); - } - - var signer = key.createSign(alg[1]); - signer.update(stringToSign); - var sigObj = signer.sign(); - if (!HASH_ALGOS[sigObj.hashAlgorithm]) { - throw (new InvalidAlgorithmError(sigObj.hashAlgorithm.toUpperCase() + - ' is not a supported hash algorithm')); - } - options.algorithm = key.type + '-' + sigObj.hashAlgorithm; - signature = sigObj.toString(); - assert.notStrictEqual(signature, '', 'empty signature produced'); - } - - var authzHeaderName = options.authorizationHeaderName || 'Authorization'; - - request.setHeader(authzHeaderName, sprintf(AUTHZ_FMT, - options.keyId, - options.algorithm, - options.headers.join(' '), - signature)); - - return true; - } - -}; diff --git a/truebit-implementation/node_modules/http-signature/lib/utils.js b/truebit-implementation/node_modules/http-signature/lib/utils.js deleted file mode 100644 index bbf2aa89..00000000 --- a/truebit-implementation/node_modules/http-signature/lib/utils.js +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2012 Joyent, Inc. All rights reserved. - -var assert = require('assert-plus'); -var sshpk = require('sshpk'); -var util = require('util'); - -var HASH_ALGOS = { - 'sha1': true, - 'sha256': true, - 'sha512': true -}; - -var PK_ALGOS = { - 'rsa': true, - 'dsa': true, - 'ecdsa': true -}; - -function HttpSignatureError(message, caller) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, caller || HttpSignatureError); - - this.message = message; - this.name = caller.name; -} -util.inherits(HttpSignatureError, Error); - -function InvalidAlgorithmError(message) { - HttpSignatureError.call(this, message, InvalidAlgorithmError); -} -util.inherits(InvalidAlgorithmError, HttpSignatureError); - -function validateAlgorithm(algorithm) { - var alg = algorithm.toLowerCase().split('-'); - - if (alg.length !== 2) { - throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' is not a ' + - 'valid algorithm')); - } - - if (alg[0] !== 'hmac' && !PK_ALGOS[alg[0]]) { - throw (new InvalidAlgorithmError(alg[0].toUpperCase() + ' type keys ' + - 'are not supported')); - } - - if (!HASH_ALGOS[alg[1]]) { - throw (new InvalidAlgorithmError(alg[1].toUpperCase() + ' is not a ' + - 'supported hash algorithm')); - } - - return (alg); -} - -///--- API - -module.exports = { - - HASH_ALGOS: HASH_ALGOS, - PK_ALGOS: PK_ALGOS, - - HttpSignatureError: HttpSignatureError, - InvalidAlgorithmError: InvalidAlgorithmError, - - validateAlgorithm: validateAlgorithm, - - /** - * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file. - * - * The intent of this module is to interoperate with OpenSSL only, - * specifically the node crypto module's `verify` method. - * - * @param {String} key an OpenSSH public key. - * @return {String} PEM encoded form of the RSA public key. - * @throws {TypeError} on bad input. - * @throws {Error} on invalid ssh key formatted data. - */ - sshKeyToPEM: function sshKeyToPEM(key) { - assert.string(key, 'ssh_key'); - - var k = sshpk.parseKey(key, 'ssh'); - return (k.toString('pem')); - }, - - - /** - * Generates an OpenSSH fingerprint from an ssh public key. - * - * @param {String} key an OpenSSH public key. - * @return {String} key fingerprint. - * @throws {TypeError} on bad input. - * @throws {Error} if what you passed doesn't look like an ssh public key. - */ - fingerprint: function fingerprint(key) { - assert.string(key, 'ssh_key'); - - var k = sshpk.parseKey(key, 'ssh'); - return (k.fingerprint('md5').toString('hex')); - }, - - /** - * Converts a PKGCS#8 PEM file to an OpenSSH public key (rsa) - * - * The reverse of the above function. - */ - pemToRsaSSHKey: function pemToRsaSSHKey(pem, comment) { - assert.equal('string', typeof (pem), 'typeof pem'); - - var k = sshpk.parseKey(pem, 'pem'); - k.comment = comment; - return (k.toString('ssh')); - } -}; diff --git a/truebit-implementation/node_modules/http-signature/lib/verify.js b/truebit-implementation/node_modules/http-signature/lib/verify.js deleted file mode 100644 index b053fd6b..00000000 --- a/truebit-implementation/node_modules/http-signature/lib/verify.js +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2015 Joyent, Inc. - -var assert = require('assert-plus'); -var crypto = require('crypto'); -var sshpk = require('sshpk'); -var utils = require('./utils'); - -var HASH_ALGOS = utils.HASH_ALGOS; -var PK_ALGOS = utils.PK_ALGOS; -var InvalidAlgorithmError = utils.InvalidAlgorithmError; -var HttpSignatureError = utils.HttpSignatureError; -var validateAlgorithm = utils.validateAlgorithm; - -///--- Exported API - -module.exports = { - /** - * Verify RSA/DSA signature against public key. You are expected to pass in - * an object that was returned from `parse()`. - * - * @param {Object} parsedSignature the object you got from `parse`. - * @param {String} pubkey RSA/DSA private key PEM. - * @return {Boolean} true if valid, false otherwise. - * @throws {TypeError} if you pass in bad arguments. - * @throws {InvalidAlgorithmError} - */ - verifySignature: function verifySignature(parsedSignature, pubkey) { - assert.object(parsedSignature, 'parsedSignature'); - if (typeof (pubkey) === 'string' || Buffer.isBuffer(pubkey)) - pubkey = sshpk.parseKey(pubkey); - assert.ok(sshpk.Key.isKey(pubkey, [1, 1]), 'pubkey must be a sshpk.Key'); - - var alg = validateAlgorithm(parsedSignature.algorithm); - if (alg[0] === 'hmac' || alg[0] !== pubkey.type) - return (false); - - var v = pubkey.createVerify(alg[1]); - v.update(parsedSignature.signingString); - return (v.verify(parsedSignature.params.signature, 'base64')); - }, - - /** - * Verify HMAC against shared secret. You are expected to pass in an object - * that was returned from `parse()`. - * - * @param {Object} parsedSignature the object you got from `parse`. - * @param {String} secret HMAC shared secret. - * @return {Boolean} true if valid, false otherwise. - * @throws {TypeError} if you pass in bad arguments. - * @throws {InvalidAlgorithmError} - */ - verifyHMAC: function verifyHMAC(parsedSignature, secret) { - assert.object(parsedSignature, 'parsedHMAC'); - assert.string(secret, 'secret'); - - var alg = validateAlgorithm(parsedSignature.algorithm); - if (alg[0] !== 'hmac') - return (false); - - var hashAlg = alg[1].toUpperCase(); - - var hmac = crypto.createHmac(hashAlg, secret); - hmac.update(parsedSignature.signingString); - - /* - * Now double-hash to avoid leaking timing information - there's - * no easy constant-time compare in JS, so we use this approach - * instead. See for more info: - * https://www.isecpartners.com/blog/2011/february/double-hmac- - * verification.aspx - */ - var h1 = crypto.createHmac(hashAlg, secret); - h1.update(hmac.digest()); - h1 = h1.digest(); - var h2 = crypto.createHmac(hashAlg, secret); - h2.update(new Buffer(parsedSignature.params.signature, 'base64')); - h2 = h2.digest(); - - /* Node 0.8 returns strings from .digest(). */ - if (typeof (h1) === 'string') - return (h1 === h2); - /* And node 0.10 lacks the .equals() method on Buffers. */ - if (Buffer.isBuffer(h1) && !h1.equals) - return (h1.toString('binary') === h2.toString('binary')); - - return (h1.equals(h2)); - } -}; diff --git a/truebit-implementation/node_modules/http-signature/package.json b/truebit-implementation/node_modules/http-signature/package.json deleted file mode 100644 index 333b1762..00000000 --- a/truebit-implementation/node_modules/http-signature/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "http-signature@~1.2.0", - "_id": "http-signature@1.2.0", - "_inBundle": false, - "_integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "_location": "/http-signature", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "http-signature@~1.2.0", - "name": "http-signature", - "escapedName": "http-signature", - "rawSpec": "~1.2.0", - "saveSpec": null, - "fetchSpec": "~1.2.0" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "_shasum": "9aecd925114772f3d95b65a60abb8f7c18fbace1", - "_spec": "http-signature@~1.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Joyent, Inc" - }, - "bugs": { - "url": "https://github.com/joyent/node-http-signature/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Mark Cavage", - "email": "mcavage@gmail.com" - }, - { - "name": "David I. Lehn", - "email": "dil@lehn.org" - }, - { - "name": "Patrick Mooney", - "email": "patrick.f.mooney@gmail.com" - } - ], - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "deprecated": false, - "description": "Reference implementation of Joyent's HTTP Signature scheme.", - "devDependencies": { - "tap": "0.4.2", - "uuid": "^2.0.2" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - }, - "homepage": "https://github.com/joyent/node-http-signature/", - "keywords": [ - "https", - "request" - ], - "license": "MIT", - "main": "lib/index.js", - "name": "http-signature", - "repository": { - "type": "git", - "url": "git://github.com/joyent/node-http-signature.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "1.2.0" -} diff --git a/truebit-implementation/node_modules/iconv-lite/.travis.yml b/truebit-implementation/node_modules/iconv-lite/.travis.yml deleted file mode 100644 index 3eab7fdb..00000000 --- a/truebit-implementation/node_modules/iconv-lite/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ - sudo: false - language: node_js - node_js: - - "0.10" - - "0.11" - - "0.12" - - "iojs" - - "4" - - "6" - - "8" - - "node" - - - env: - - CXX=g++-4.8 - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - gcc-4.8 - - g++-4.8 - diff --git a/truebit-implementation/node_modules/iconv-lite/Changelog.md b/truebit-implementation/node_modules/iconv-lite/Changelog.md deleted file mode 100644 index e31cd0c2..00000000 --- a/truebit-implementation/node_modules/iconv-lite/Changelog.md +++ /dev/null @@ -1,158 +0,0 @@ - -# 0.4.23 / 2018-05-07 - - * Fix deprecation warning in Node v10 due to the last usage of `new Buffer` (#185, by @felixbuenemann) - * Switched from NodeBuffer to Buffer in typings (#155 by @felixfbecker, #186 by @larssn) - - -# 0.4.22 / 2018-05-05 - - * Use older semver style for dependencies to be compatible with Node version 0.10 (#182, by @dougwilson) - * Fix tests to accomodate fixes in Node v10 (#182, by @dougwilson) - - -# 0.4.21 / 2018-04-06 - - * Fix encoding canonicalization (#156) - * Fix the paths in the "browser" field in package.json (#174 by @LMLB) - * Removed "contributors" section in package.json - see Git history instead. - - -# 0.4.20 / 2018-04-06 - - * Updated `new Buffer()` usages with recommended replacements as it's being deprecated in Node v10 (#176, #178 by @ChALkeR) - - -# 0.4.19 / 2017-09-09 - - * Fixed iso8859-1 codec regression in handling untranslatable characters (#162, caused by #147) - * Re-generated windows1255 codec, because it was updated in iconv project - * Fixed grammar in error message when iconv-lite is loaded with encoding other than utf8 - - -# 0.4.18 / 2017-06-13 - - * Fixed CESU-8 regression in Node v8. - - -# 0.4.17 / 2017-04-22 - - * Updated typescript definition file to support Angular 2 AoT mode (#153 by @larssn) - - -# 0.4.16 / 2017-04-22 - - * Added support for React Native (#150) - * Changed iso8859-1 encoding to usine internal 'binary' encoding, as it's the same thing (#147 by @mscdex) - * Fixed typo in Readme (#138 by @jiangzhuo) - * Fixed build for Node v6.10+ by making correct version comparison - * Added a warning if iconv-lite is loaded not as utf-8 (see #142) - - -# 0.4.15 / 2016-11-21 - - * Fixed typescript type definition (#137) - - -# 0.4.14 / 2016-11-20 - - * Preparation for v1.0 - * Added Node v6 and latest Node versions to Travis CI test rig - * Deprecated Node v0.8 support - * Typescript typings (@larssn) - * Fix encoding of Euro character in GB 18030 (inspired by @lygstate) - * Add ms prefix to dbcs windows encodings (@rokoroku) - - -# 0.4.13 / 2015-10-01 - - * Fix silly mistake in deprecation notice. - - -# 0.4.12 / 2015-09-26 - - * Node v4 support: - * Added CESU-8 decoding (#106) - * Added deprecation notice for `extendNodeEncodings` - * Added Travis tests for Node v4 and io.js latest (#105 by @Mithgol) - - -# 0.4.11 / 2015-07-03 - - * Added CESU-8 encoding. - - -# 0.4.10 / 2015-05-26 - - * Changed UTF-16 endianness heuristic to take into account any ASCII chars, not - just spaces. This should minimize the importance of "default" endianness. - - -# 0.4.9 / 2015-05-24 - - * Streamlined BOM handling: strip BOM by default, add BOM when encoding if - addBOM: true. Added docs to Readme. - * UTF16 now uses UTF16-LE by default. - * Fixed minor issue with big5 encoding. - * Added io.js testing on Travis; updated node-iconv version to test against. - Now we just skip testing SBCS encodings that node-iconv doesn't support. - * (internal refactoring) Updated codec interface to use classes. - * Use strict mode in all files. - - -# 0.4.8 / 2015-04-14 - - * added alias UNICODE-1-1-UTF-7 for UTF-7 encoding (#94) - - -# 0.4.7 / 2015-02-05 - - * stop official support of Node.js v0.8. Should still work, but no guarantees. - reason: Packages needed for testing are hard to get on Travis CI. - * work in environment where Object.prototype is monkey patched with enumerable - props (#89). - - -# 0.4.6 / 2015-01-12 - - * fix rare aliases of single-byte encodings (thanks @mscdex) - * double the timeout for dbcs tests to make them less flaky on travis - - -# 0.4.5 / 2014-11-20 - - * fix windows-31j and x-sjis encoding support (@nleush) - * minor fix: undefined variable reference when internal error happens - - -# 0.4.4 / 2014-07-16 - - * added encodings UTF-7 (RFC2152) and UTF-7-IMAP (RFC3501 Section 5.1.3) - * fixed streaming base64 encoding - - -# 0.4.3 / 2014-06-14 - - * added encodings UTF-16BE and UTF-16 with BOM - - -# 0.4.2 / 2014-06-12 - - * don't throw exception if `extendNodeEncodings()` is called more than once - - -# 0.4.1 / 2014-06-11 - - * codepage 808 added - - -# 0.4.0 / 2014-06-10 - - * code is rewritten from scratch - * all widespread encodings are supported - * streaming interface added - * browserify compatibility added - * (optional) extend core primitive encodings to make usage even simpler - * moved from vows to mocha as the testing framework - - diff --git a/truebit-implementation/node_modules/iconv-lite/LICENSE b/truebit-implementation/node_modules/iconv-lite/LICENSE deleted file mode 100644 index d518d837..00000000 --- a/truebit-implementation/node_modules/iconv-lite/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2011 Alexander Shtuchkin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/iconv-lite/README.md b/truebit-implementation/node_modules/iconv-lite/README.md deleted file mode 100644 index c981c370..00000000 --- a/truebit-implementation/node_modules/iconv-lite/README.md +++ /dev/null @@ -1,156 +0,0 @@ -## Pure JS character encoding conversion [![Build Status](https://travis-ci.org/ashtuchkin/iconv-lite.svg?branch=master)](https://travis-ci.org/ashtuchkin/iconv-lite) - - * Doesn't need native code compilation. Works on Windows and in sandboxed environments like [Cloud9](http://c9.io). - * Used in popular projects like [Express.js (body_parser)](https://github.com/expressjs/body-parser), - [Grunt](http://gruntjs.com/), [Nodemailer](http://www.nodemailer.com/), [Yeoman](http://yeoman.io/) and others. - * Faster than [node-iconv](https://github.com/bnoordhuis/node-iconv) (see below for performance comparison). - * Intuitive encode/decode API - * Streaming support for Node v0.10+ - * [Deprecated] Can extend Node.js primitives (buffers, streams) to support all iconv-lite encodings. - * In-browser usage via [Browserify](https://github.com/substack/node-browserify) (~180k gzip compressed with Buffer shim included). - * Typescript [type definition file](https://github.com/ashtuchkin/iconv-lite/blob/master/lib/index.d.ts) included. - * React Native is supported (need to explicitly `npm install` two more modules: `buffer` and `stream`). - * License: MIT. - -[![NPM Stats](https://nodei.co/npm/iconv-lite.png?downloads=true&downloadRank=true)](https://npmjs.org/packages/iconv-lite/) - -## Usage -### Basic API -```javascript -var iconv = require('iconv-lite'); - -// Convert from an encoded buffer to js string. -str = iconv.decode(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251'); - -// Convert from js string to an encoded buffer. -buf = iconv.encode("Sample input string", 'win1251'); - -// Check if encoding is supported -iconv.encodingExists("us-ascii") -``` - -### Streaming API (Node v0.10+) -```javascript - -// Decode stream (from binary stream to js strings) -http.createServer(function(req, res) { - var converterStream = iconv.decodeStream('win1251'); - req.pipe(converterStream); - - converterStream.on('data', function(str) { - console.log(str); // Do something with decoded strings, chunk-by-chunk. - }); -}); - -// Convert encoding streaming example -fs.createReadStream('file-in-win1251.txt') - .pipe(iconv.decodeStream('win1251')) - .pipe(iconv.encodeStream('ucs2')) - .pipe(fs.createWriteStream('file-in-ucs2.txt')); - -// Sugar: all encode/decode streams have .collect(cb) method to accumulate data. -http.createServer(function(req, res) { - req.pipe(iconv.decodeStream('win1251')).collect(function(err, body) { - assert(typeof body == 'string'); - console.log(body); // full request body string - }); -}); -``` - -### [Deprecated] Extend Node.js own encodings -> NOTE: This doesn't work on latest Node versions. See [details](https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility). - -```javascript -// After this call all Node basic primitives will understand iconv-lite encodings. -iconv.extendNodeEncodings(); - -// Examples: -buf = new Buffer(str, 'win1251'); -buf.write(str, 'gbk'); -str = buf.toString('latin1'); -assert(Buffer.isEncoding('iso-8859-15')); -Buffer.byteLength(str, 'us-ascii'); - -http.createServer(function(req, res) { - req.setEncoding('big5'); - req.collect(function(err, body) { - console.log(body); - }); -}); - -fs.createReadStream("file.txt", "shift_jis"); - -// External modules are also supported (if they use Node primitives, which they probably do). -request = require('request'); -request({ - url: "http://github.com/", - encoding: "cp932" -}); - -// To remove extensions -iconv.undoExtendNodeEncodings(); -``` - -## Supported encodings - - * All node.js native encodings: utf8, ucs2 / utf16-le, ascii, binary, base64, hex. - * Additional unicode encodings: utf16, utf16-be, utf-7, utf-7-imap. - * All widespread singlebyte encodings: Windows 125x family, ISO-8859 family, - IBM/DOS codepages, Macintosh family, KOI8 family, all others supported by iconv library. - Aliases like 'latin1', 'us-ascii' also supported. - * All widespread multibyte encodings: CP932, CP936, CP949, CP950, GB2312, GBK, GB18030, Big5, Shift_JIS, EUC-JP. - -See [all supported encodings on wiki](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings). - -Most singlebyte encodings are generated automatically from [node-iconv](https://github.com/bnoordhuis/node-iconv). Thank you Ben Noordhuis and libiconv authors! - -Multibyte encodings are generated from [Unicode.org mappings](http://www.unicode.org/Public/MAPPINGS/) and [WHATWG Encoding Standard mappings](http://encoding.spec.whatwg.org/). Thank you, respective authors! - - -## Encoding/decoding speed - -Comparison with node-iconv module (1000x256kb, on MacBook Pro, Core i5/2.6 GHz, Node v0.12.0). -Note: your results may vary, so please always check on your hardware. - - operation iconv@2.1.4 iconv-lite@0.4.7 - ---------------------------------------------------------- - encode('win1251') ~96 Mb/s ~320 Mb/s - decode('win1251') ~95 Mb/s ~246 Mb/s - -## BOM handling - - * Decoding: BOM is stripped by default, unless overridden by passing `stripBOM: false` in options - (f.ex. `iconv.decode(buf, enc, {stripBOM: false})`). - A callback might also be given as a `stripBOM` parameter - it'll be called if BOM character was actually found. - * If you want to detect UTF-8 BOM when decoding other encodings, use [node-autodetect-decoder-stream](https://github.com/danielgindi/node-autodetect-decoder-stream) module. - * Encoding: No BOM added, unless overridden by `addBOM: true` option. - -## UTF-16 Encodings - -This library supports UTF-16LE, UTF-16BE and UTF-16 encodings. First two are straightforward, but UTF-16 is trying to be -smart about endianness in the following ways: - * Decoding: uses BOM and 'spaces heuristic' to determine input endianness. Default is UTF-16LE, but can be - overridden with `defaultEncoding: 'utf-16be'` option. Strips BOM unless `stripBOM: false`. - * Encoding: uses UTF-16LE and writes BOM by default. Use `addBOM: false` to override. - -## Other notes - -When decoding, be sure to supply a Buffer to decode() method, otherwise [bad things usually happen](https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding). -Untranslatable characters are set to � or ?. No transliteration is currently supported. -Node versions 0.10.31 and 0.11.13 are buggy, don't use them (see #65, #77). - -## Testing - -```bash -$ git clone git@github.com:ashtuchkin/iconv-lite.git -$ cd iconv-lite -$ npm install -$ npm test - -$ # To view performance: -$ node test/performance.js - -$ # To view test coverage: -$ npm run coverage -$ open coverage/lcov-report/index.html -``` diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/dbcs-codec.js b/truebit-implementation/node_modules/iconv-lite/encodings/dbcs-codec.js deleted file mode 100644 index 1fe3e160..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/dbcs-codec.js +++ /dev/null @@ -1,555 +0,0 @@ -"use strict"; -var Buffer = require("safer-buffer").Buffer; - -// Multibyte codec. In this scheme, a character is represented by 1 or more bytes. -// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. -// To save memory and loading time, we read table files only when requested. - -exports._dbcs = DBCSCodec; - -var UNASSIGNED = -1, - GB18030_CODE = -2, - SEQ_START = -10, - NODE_START = -1000, - UNASSIGNED_NODE = new Array(0x100), - DEF_CHAR = -1; - -for (var i = 0; i < 0x100; i++) - UNASSIGNED_NODE[i] = UNASSIGNED; - - -// Class DBCSCodec reads and initializes mapping tables. -function DBCSCodec(codecOptions, iconv) { - this.encodingName = codecOptions.encodingName; - if (!codecOptions) - throw new Error("DBCS codec is called without the data.") - if (!codecOptions.table) - throw new Error("Encoding '" + this.encodingName + "' has no data."); - - // Load tables. - var mappingTable = codecOptions.table(); - - - // Decode tables: MBCS -> Unicode. - - // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. - // Trie root is decodeTables[0]. - // Values: >= 0 -> unicode character code. can be > 0xFFFF - // == UNASSIGNED -> unknown/unassigned sequence. - // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. - // <= NODE_START -> index of the next node in our trie to process next byte. - // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. - this.decodeTables = []; - this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. - - // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. - this.decodeTableSeq = []; - - // Actual mapping tables consist of chunks. Use them to fill up decode tables. - for (var i = 0; i < mappingTable.length; i++) - this._addDecodeChunk(mappingTable[i]); - - this.defaultCharUnicode = iconv.defaultCharUnicode; - - - // Encode tables: Unicode -> DBCS. - - // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. - // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. - // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). - // == UNASSIGNED -> no conversion found. Output a default char. - // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. - this.encodeTable = []; - - // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of - // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key - // means end of sequence (needed when one sequence is a strict subsequence of another). - // Objects are kept separately from encodeTable to increase performance. - this.encodeTableSeq = []; - - // Some chars can be decoded, but need not be encoded. - var skipEncodeChars = {}; - if (codecOptions.encodeSkipVals) - for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) { - var val = codecOptions.encodeSkipVals[i]; - if (typeof val === 'number') - skipEncodeChars[val] = true; - else - for (var j = val.from; j <= val.to; j++) - skipEncodeChars[j] = true; - } - - // Use decode trie to recursively fill out encode tables. - this._fillEncodeTable(0, 0, skipEncodeChars); - - // Add more encoding pairs when needed. - if (codecOptions.encodeAdd) { - for (var uChar in codecOptions.encodeAdd) - if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) - this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); - } - - this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; - if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; - if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); - - - // Load & create GB18030 tables when needed. - if (typeof codecOptions.gb18030 === 'function') { - this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges. - - // Add GB18030 decode tables. - var thirdByteNodeIdx = this.decodeTables.length; - var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); - - var fourthByteNodeIdx = this.decodeTables.length; - var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); - - for (var i = 0x81; i <= 0xFE; i++) { - var secondByteNodeIdx = NODE_START - this.decodeTables[0][i]; - var secondByteNode = this.decodeTables[secondByteNodeIdx]; - for (var j = 0x30; j <= 0x39; j++) - secondByteNode[j] = NODE_START - thirdByteNodeIdx; - } - for (var i = 0x81; i <= 0xFE; i++) - thirdByteNode[i] = NODE_START - fourthByteNodeIdx; - for (var i = 0x30; i <= 0x39; i++) - fourthByteNode[i] = GB18030_CODE - } -} - -DBCSCodec.prototype.encoder = DBCSEncoder; -DBCSCodec.prototype.decoder = DBCSDecoder; - -// Decoder helpers -DBCSCodec.prototype._getDecodeTrieNode = function(addr) { - var bytes = []; - for (; addr > 0; addr >>= 8) - bytes.push(addr & 0xFF); - if (bytes.length == 0) - bytes.push(0); - - var node = this.decodeTables[0]; - for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. - var val = node[bytes[i]]; - - if (val == UNASSIGNED) { // Create new node. - node[bytes[i]] = NODE_START - this.decodeTables.length; - this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); - } - else if (val <= NODE_START) { // Existing node. - node = this.decodeTables[NODE_START - val]; - } - else - throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); - } - return node; -} - - -DBCSCodec.prototype._addDecodeChunk = function(chunk) { - // First element of chunk is the hex mbcs code where we start. - var curAddr = parseInt(chunk[0], 16); - - // Choose the decoding node where we'll write our chars. - var writeTable = this._getDecodeTrieNode(curAddr); - curAddr = curAddr & 0xFF; - - // Write all other elements of the chunk to the table. - for (var k = 1; k < chunk.length; k++) { - var part = chunk[k]; - if (typeof part === "string") { // String, write as-is. - for (var l = 0; l < part.length;) { - var code = part.charCodeAt(l++); - if (0xD800 <= code && code < 0xDC00) { // Decode surrogate - var codeTrail = part.charCodeAt(l++); - if (0xDC00 <= codeTrail && codeTrail < 0xE000) - writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); - else - throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); - } - else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) - var len = 0xFFF - code + 2; - var seq = []; - for (var m = 0; m < len; m++) - seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. - - writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; - this.decodeTableSeq.push(seq); - } - else - writeTable[curAddr++] = code; // Basic char - } - } - else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. - var charCode = writeTable[curAddr - 1] + 1; - for (var l = 0; l < part; l++) - writeTable[curAddr++] = charCode++; - } - else - throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); - } - if (curAddr > 0xFF) - throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); -} - -// Encoder helpers -DBCSCodec.prototype._getEncodeBucket = function(uCode) { - var high = uCode >> 8; // This could be > 0xFF because of astral characters. - if (this.encodeTable[high] === undefined) - this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. - return this.encodeTable[high]; -} - -DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { - var bucket = this._getEncodeBucket(uCode); - var low = uCode & 0xFF; - if (bucket[low] <= SEQ_START) - this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. - else if (bucket[low] == UNASSIGNED) - bucket[low] = dbcsCode; -} - -DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { - - // Get the root of character tree according to first character of the sequence. - var uCode = seq[0]; - var bucket = this._getEncodeBucket(uCode); - var low = uCode & 0xFF; - - var node; - if (bucket[low] <= SEQ_START) { - // There's already a sequence with - use it. - node = this.encodeTableSeq[SEQ_START-bucket[low]]; - } - else { - // There was no sequence object - allocate a new one. - node = {}; - if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. - bucket[low] = SEQ_START - this.encodeTableSeq.length; - this.encodeTableSeq.push(node); - } - - // Traverse the character tree, allocating new nodes as needed. - for (var j = 1; j < seq.length-1; j++) { - var oldVal = node[uCode]; - if (typeof oldVal === 'object') - node = oldVal; - else { - node = node[uCode] = {} - if (oldVal !== undefined) - node[DEF_CHAR] = oldVal - } - } - - // Set the leaf to given dbcsCode. - uCode = seq[seq.length-1]; - node[uCode] = dbcsCode; -} - -DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { - var node = this.decodeTables[nodeIdx]; - for (var i = 0; i < 0x100; i++) { - var uCode = node[i]; - var mbCode = prefix + i; - if (skipEncodeChars[mbCode]) - continue; - - if (uCode >= 0) - this._setEncodeChar(uCode, mbCode); - else if (uCode <= NODE_START) - this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); - else if (uCode <= SEQ_START) - this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); - } -} - - - -// == Encoder ================================================================== - -function DBCSEncoder(options, codec) { - // Encoder state - this.leadSurrogate = -1; - this.seqObj = undefined; - - // Static data - this.encodeTable = codec.encodeTable; - this.encodeTableSeq = codec.encodeTableSeq; - this.defaultCharSingleByte = codec.defCharSB; - this.gb18030 = codec.gb18030; -} - -DBCSEncoder.prototype.write = function(str) { - var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)), - leadSurrogate = this.leadSurrogate, - seqObj = this.seqObj, nextChar = -1, - i = 0, j = 0; - - while (true) { - // 0. Get next character. - if (nextChar === -1) { - if (i == str.length) break; - var uCode = str.charCodeAt(i++); - } - else { - var uCode = nextChar; - nextChar = -1; - } - - // 1. Handle surrogates. - if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. - if (uCode < 0xDC00) { // We've got lead surrogate. - if (leadSurrogate === -1) { - leadSurrogate = uCode; - continue; - } else { - leadSurrogate = uCode; - // Double lead surrogate found. - uCode = UNASSIGNED; - } - } else { // We've got trail surrogate. - if (leadSurrogate !== -1) { - uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); - leadSurrogate = -1; - } else { - // Incomplete surrogate pair - only trail surrogate found. - uCode = UNASSIGNED; - } - - } - } - else if (leadSurrogate !== -1) { - // Incomplete surrogate pair - only lead surrogate found. - nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. - leadSurrogate = -1; - } - - // 2. Convert uCode character. - var dbcsCode = UNASSIGNED; - if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence - var resCode = seqObj[uCode]; - if (typeof resCode === 'object') { // Sequence continues. - seqObj = resCode; - continue; - - } else if (typeof resCode == 'number') { // Sequence finished. Write it. - dbcsCode = resCode; - - } else if (resCode == undefined) { // Current character is not part of the sequence. - - // Try default character for this sequence - resCode = seqObj[DEF_CHAR]; - if (resCode !== undefined) { - dbcsCode = resCode; // Found. Write it. - nextChar = uCode; // Current character will be written too in the next iteration. - - } else { - // TODO: What if we have no default? (resCode == undefined) - // Then, we should write first char of the sequence as-is and try the rest recursively. - // Didn't do it for now because no encoding has this situation yet. - // Currently, just skip the sequence and write current char. - } - } - seqObj = undefined; - } - else if (uCode >= 0) { // Regular character - var subtable = this.encodeTable[uCode >> 8]; - if (subtable !== undefined) - dbcsCode = subtable[uCode & 0xFF]; - - if (dbcsCode <= SEQ_START) { // Sequence start - seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; - continue; - } - - if (dbcsCode == UNASSIGNED && this.gb18030) { - // Use GB18030 algorithm to find character(s) to write. - var idx = findIdx(this.gb18030.uChars, uCode); - if (idx != -1) { - var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); - newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; - newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; - newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; - newBuf[j++] = 0x30 + dbcsCode; - continue; - } - } - } - - // 3. Write dbcsCode character. - if (dbcsCode === UNASSIGNED) - dbcsCode = this.defaultCharSingleByte; - - if (dbcsCode < 0x100) { - newBuf[j++] = dbcsCode; - } - else if (dbcsCode < 0x10000) { - newBuf[j++] = dbcsCode >> 8; // high byte - newBuf[j++] = dbcsCode & 0xFF; // low byte - } - else { - newBuf[j++] = dbcsCode >> 16; - newBuf[j++] = (dbcsCode >> 8) & 0xFF; - newBuf[j++] = dbcsCode & 0xFF; - } - } - - this.seqObj = seqObj; - this.leadSurrogate = leadSurrogate; - return newBuf.slice(0, j); -} - -DBCSEncoder.prototype.end = function() { - if (this.leadSurrogate === -1 && this.seqObj === undefined) - return; // All clean. Most often case. - - var newBuf = Buffer.alloc(10), j = 0; - - if (this.seqObj) { // We're in the sequence. - var dbcsCode = this.seqObj[DEF_CHAR]; - if (dbcsCode !== undefined) { // Write beginning of the sequence. - if (dbcsCode < 0x100) { - newBuf[j++] = dbcsCode; - } - else { - newBuf[j++] = dbcsCode >> 8; // high byte - newBuf[j++] = dbcsCode & 0xFF; // low byte - } - } else { - // See todo above. - } - this.seqObj = undefined; - } - - if (this.leadSurrogate !== -1) { - // Incomplete surrogate pair - only lead surrogate found. - newBuf[j++] = this.defaultCharSingleByte; - this.leadSurrogate = -1; - } - - return newBuf.slice(0, j); -} - -// Export for testing -DBCSEncoder.prototype.findIdx = findIdx; - - -// == Decoder ================================================================== - -function DBCSDecoder(options, codec) { - // Decoder state - this.nodeIdx = 0; - this.prevBuf = Buffer.alloc(0); - - // Static data - this.decodeTables = codec.decodeTables; - this.decodeTableSeq = codec.decodeTableSeq; - this.defaultCharUnicode = codec.defaultCharUnicode; - this.gb18030 = codec.gb18030; -} - -DBCSDecoder.prototype.write = function(buf) { - var newBuf = Buffer.alloc(buf.length*2), - nodeIdx = this.nodeIdx, - prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, - seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence. - uCode; - - if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later. - prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]); - - for (var i = 0, j = 0; i < buf.length; i++) { - var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset]; - - // Lookup in current trie node. - var uCode = this.decodeTables[nodeIdx][curByte]; - - if (uCode >= 0) { - // Normal character, just use it. - } - else if (uCode === UNASSIGNED) { // Unknown char. - // TODO: Callback with seq. - //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); - i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle). - uCode = this.defaultCharUnicode.charCodeAt(0); - } - else if (uCode === GB18030_CODE) { - var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); - var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30); - var idx = findIdx(this.gb18030.gbChars, ptr); - uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; - } - else if (uCode <= NODE_START) { // Go to next trie node. - nodeIdx = NODE_START - uCode; - continue; - } - else if (uCode <= SEQ_START) { // Output a sequence of chars. - var seq = this.decodeTableSeq[SEQ_START - uCode]; - for (var k = 0; k < seq.length - 1; k++) { - uCode = seq[k]; - newBuf[j++] = uCode & 0xFF; - newBuf[j++] = uCode >> 8; - } - uCode = seq[seq.length-1]; - } - else - throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); - - // Write the character to buffer, handling higher planes using surrogate pair. - if (uCode > 0xFFFF) { - uCode -= 0x10000; - var uCodeLead = 0xD800 + Math.floor(uCode / 0x400); - newBuf[j++] = uCodeLead & 0xFF; - newBuf[j++] = uCodeLead >> 8; - - uCode = 0xDC00 + uCode % 0x400; - } - newBuf[j++] = uCode & 0xFF; - newBuf[j++] = uCode >> 8; - - // Reset trie node. - nodeIdx = 0; seqStart = i+1; - } - - this.nodeIdx = nodeIdx; - this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); - return newBuf.slice(0, j).toString('ucs2'); -} - -DBCSDecoder.prototype.end = function() { - var ret = ''; - - // Try to parse all remaining chars. - while (this.prevBuf.length > 0) { - // Skip 1 character in the buffer. - ret += this.defaultCharUnicode; - var buf = this.prevBuf.slice(1); - - // Parse remaining as usual. - this.prevBuf = Buffer.alloc(0); - this.nodeIdx = 0; - if (buf.length > 0) - ret += this.write(buf); - } - - this.nodeIdx = 0; - return ret; -} - -// Binary search for GB18030. Returns largest i such that table[i] <= val. -function findIdx(table, val) { - if (table[0] > val) - return -1; - - var l = 0, r = table.length; - while (l < r-1) { // always table[l] <= val < table[r] - var mid = l + Math.floor((r-l+1)/2); - if (table[mid] <= val) - l = mid; - else - r = mid; - } - return l; -} - diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/dbcs-data.js b/truebit-implementation/node_modules/iconv-lite/encodings/dbcs-data.js deleted file mode 100644 index 4b619143..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/dbcs-data.js +++ /dev/null @@ -1,176 +0,0 @@ -"use strict"; - -// Description of supported double byte encodings and aliases. -// Tables are not require()-d until they are needed to speed up library load. -// require()-s are direct to support Browserify. - -module.exports = { - - // == Japanese/ShiftJIS ==================================================== - // All japanese encodings are based on JIS X set of standards: - // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF. - // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. - // Has several variations in 1978, 1983, 1990 and 1997. - // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. - // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. - // 2 planes, first is superset of 0208, second - revised 0212. - // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) - - // Byte encodings are: - // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte - // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. - // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. - // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. - // 0x00-0x7F - lower part of 0201 - // 0x8E, 0xA1-0xDF - upper part of 0201 - // (0xA1-0xFE)x2 - 0208 plane (94x94). - // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). - // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. - // Used as-is in ISO2022 family. - // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, - // 0201-1976 Roman, 0208-1978, 0208-1983. - // * ISO2022-JP-1: Adds esc seq for 0212-1990. - // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. - // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. - // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. - // - // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. - // - // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html - - 'shiftjis': { - type: '_dbcs', - table: function() { return require('./tables/shiftjis.json') }, - encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, - encodeSkipVals: [{from: 0xED40, to: 0xF940}], - }, - 'csshiftjis': 'shiftjis', - 'mskanji': 'shiftjis', - 'sjis': 'shiftjis', - 'windows31j': 'shiftjis', - 'ms31j': 'shiftjis', - 'xsjis': 'shiftjis', - 'windows932': 'shiftjis', - 'ms932': 'shiftjis', - '932': 'shiftjis', - 'cp932': 'shiftjis', - - 'eucjp': { - type: '_dbcs', - table: function() { return require('./tables/eucjp.json') }, - encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, - }, - - // TODO: KDDI extension to Shift_JIS - // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. - // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. - - - // == Chinese/GBK ========================================================== - // http://en.wikipedia.org/wiki/GBK - // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder - - // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 - 'gb2312': 'cp936', - 'gb231280': 'cp936', - 'gb23121980': 'cp936', - 'csgb2312': 'cp936', - 'csiso58gb231280': 'cp936', - 'euccn': 'cp936', - - // Microsoft's CP936 is a subset and approximation of GBK. - 'windows936': 'cp936', - 'ms936': 'cp936', - '936': 'cp936', - 'cp936': { - type: '_dbcs', - table: function() { return require('./tables/cp936.json') }, - }, - - // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. - 'gbk': { - type: '_dbcs', - table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) }, - }, - 'xgbk': 'gbk', - 'isoir58': 'gbk', - - // GB18030 is an algorithmic extension of GBK. - // Main source: https://www.w3.org/TR/encoding/#gbk-encoder - // http://icu-project.org/docs/papers/gb18030.html - // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml - // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 - 'gb18030': { - type: '_dbcs', - table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) }, - gb18030: function() { return require('./tables/gb18030-ranges.json') }, - encodeSkipVals: [0x80], - encodeAdd: {'€': 0xA2E3}, - }, - - 'chinese': 'gb18030', - - - // == Korean =============================================================== - // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. - 'windows949': 'cp949', - 'ms949': 'cp949', - '949': 'cp949', - 'cp949': { - type: '_dbcs', - table: function() { return require('./tables/cp949.json') }, - }, - - 'cseuckr': 'cp949', - 'csksc56011987': 'cp949', - 'euckr': 'cp949', - 'isoir149': 'cp949', - 'korean': 'cp949', - 'ksc56011987': 'cp949', - 'ksc56011989': 'cp949', - 'ksc5601': 'cp949', - - - // == Big5/Taiwan/Hong Kong ================================================ - // There are lots of tables for Big5 and cp950. Please see the following links for history: - // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html - // Variations, in roughly number of defined chars: - // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT - // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ - // * Big5-2003 (Taiwan standard) almost superset of cp950. - // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. - // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. - // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. - // Plus, it has 4 combining sequences. - // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299 - // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. - // Implementations are not consistent within browsers; sometimes labeled as just big5. - // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. - // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31 - // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. - // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt - // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt - // - // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder - // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. - - 'windows950': 'cp950', - 'ms950': 'cp950', - '950': 'cp950', - 'cp950': { - type: '_dbcs', - table: function() { return require('./tables/cp950.json') }, - }, - - // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. - 'big5': 'big5hkscs', - 'big5hkscs': { - type: '_dbcs', - table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) }, - encodeSkipVals: [0xa2cc], - }, - - 'cnbig5': 'big5hkscs', - 'csbig5': 'big5hkscs', - 'xxbig5': 'big5hkscs', -}; diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/index.js b/truebit-implementation/node_modules/iconv-lite/encodings/index.js deleted file mode 100644 index e3040031..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/index.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -// Update this array if you add/rename/remove files in this directory. -// We support Browserify by skipping automatic module discovery and requiring modules directly. -var modules = [ - require("./internal"), - require("./utf16"), - require("./utf7"), - require("./sbcs-codec"), - require("./sbcs-data"), - require("./sbcs-data-generated"), - require("./dbcs-codec"), - require("./dbcs-data"), -]; - -// Put all encoding/alias/codec definitions to single object and export it. -for (var i = 0; i < modules.length; i++) { - var module = modules[i]; - for (var enc in module) - if (Object.prototype.hasOwnProperty.call(module, enc)) - exports[enc] = module[enc]; -} diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/internal.js b/truebit-implementation/node_modules/iconv-lite/encodings/internal.js deleted file mode 100644 index 05ce38b2..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/internal.js +++ /dev/null @@ -1,188 +0,0 @@ -"use strict"; -var Buffer = require("safer-buffer").Buffer; - -// Export Node.js internal encodings. - -module.exports = { - // Encodings - utf8: { type: "_internal", bomAware: true}, - cesu8: { type: "_internal", bomAware: true}, - unicode11utf8: "utf8", - - ucs2: { type: "_internal", bomAware: true}, - utf16le: "ucs2", - - binary: { type: "_internal" }, - base64: { type: "_internal" }, - hex: { type: "_internal" }, - - // Codec. - _internal: InternalCodec, -}; - -//------------------------------------------------------------------------------ - -function InternalCodec(codecOptions, iconv) { - this.enc = codecOptions.encodingName; - this.bomAware = codecOptions.bomAware; - - if (this.enc === "base64") - this.encoder = InternalEncoderBase64; - else if (this.enc === "cesu8") { - this.enc = "utf8"; // Use utf8 for decoding. - this.encoder = InternalEncoderCesu8; - - // Add decoder for versions of Node not supporting CESU-8 - if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') { - this.decoder = InternalDecoderCesu8; - this.defaultCharUnicode = iconv.defaultCharUnicode; - } - } -} - -InternalCodec.prototype.encoder = InternalEncoder; -InternalCodec.prototype.decoder = InternalDecoder; - -//------------------------------------------------------------------------------ - -// We use node.js internal decoder. Its signature is the same as ours. -var StringDecoder = require('string_decoder').StringDecoder; - -if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. - StringDecoder.prototype.end = function() {}; - - -function InternalDecoder(options, codec) { - StringDecoder.call(this, codec.enc); -} - -InternalDecoder.prototype = StringDecoder.prototype; - - -//------------------------------------------------------------------------------ -// Encoder is mostly trivial - -function InternalEncoder(options, codec) { - this.enc = codec.enc; -} - -InternalEncoder.prototype.write = function(str) { - return Buffer.from(str, this.enc); -} - -InternalEncoder.prototype.end = function() { -} - - -//------------------------------------------------------------------------------ -// Except base64 encoder, which must keep its state. - -function InternalEncoderBase64(options, codec) { - this.prevStr = ''; -} - -InternalEncoderBase64.prototype.write = function(str) { - str = this.prevStr + str; - var completeQuads = str.length - (str.length % 4); - this.prevStr = str.slice(completeQuads); - str = str.slice(0, completeQuads); - - return Buffer.from(str, "base64"); -} - -InternalEncoderBase64.prototype.end = function() { - return Buffer.from(this.prevStr, "base64"); -} - - -//------------------------------------------------------------------------------ -// CESU-8 encoder is also special. - -function InternalEncoderCesu8(options, codec) { -} - -InternalEncoderCesu8.prototype.write = function(str) { - var buf = Buffer.alloc(str.length * 3), bufIdx = 0; - for (var i = 0; i < str.length; i++) { - var charCode = str.charCodeAt(i); - // Naive implementation, but it works because CESU-8 is especially easy - // to convert from UTF-16 (which all JS strings are encoded in). - if (charCode < 0x80) - buf[bufIdx++] = charCode; - else if (charCode < 0x800) { - buf[bufIdx++] = 0xC0 + (charCode >>> 6); - buf[bufIdx++] = 0x80 + (charCode & 0x3f); - } - else { // charCode will always be < 0x10000 in javascript. - buf[bufIdx++] = 0xE0 + (charCode >>> 12); - buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f); - buf[bufIdx++] = 0x80 + (charCode & 0x3f); - } - } - return buf.slice(0, bufIdx); -} - -InternalEncoderCesu8.prototype.end = function() { -} - -//------------------------------------------------------------------------------ -// CESU-8 decoder is not implemented in Node v4.0+ - -function InternalDecoderCesu8(options, codec) { - this.acc = 0; - this.contBytes = 0; - this.accBytes = 0; - this.defaultCharUnicode = codec.defaultCharUnicode; -} - -InternalDecoderCesu8.prototype.write = function(buf) { - var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, - res = ''; - for (var i = 0; i < buf.length; i++) { - var curByte = buf[i]; - if ((curByte & 0xC0) !== 0x80) { // Leading byte - if (contBytes > 0) { // Previous code is invalid - res += this.defaultCharUnicode; - contBytes = 0; - } - - if (curByte < 0x80) { // Single-byte code - res += String.fromCharCode(curByte); - } else if (curByte < 0xE0) { // Two-byte code - acc = curByte & 0x1F; - contBytes = 1; accBytes = 1; - } else if (curByte < 0xF0) { // Three-byte code - acc = curByte & 0x0F; - contBytes = 2; accBytes = 1; - } else { // Four or more are not supported for CESU-8. - res += this.defaultCharUnicode; - } - } else { // Continuation byte - if (contBytes > 0) { // We're waiting for it. - acc = (acc << 6) | (curByte & 0x3f); - contBytes--; accBytes++; - if (contBytes === 0) { - // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80) - if (accBytes === 2 && acc < 0x80 && acc > 0) - res += this.defaultCharUnicode; - else if (accBytes === 3 && acc < 0x800) - res += this.defaultCharUnicode; - else - // Actually add character. - res += String.fromCharCode(acc); - } - } else { // Unexpected continuation byte - res += this.defaultCharUnicode; - } - } - } - this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; - return res; -} - -InternalDecoderCesu8.prototype.end = function() { - var res = 0; - if (this.contBytes > 0) - res += this.defaultCharUnicode; - return res; -} diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-codec.js b/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-codec.js deleted file mode 100644 index f2258237..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-codec.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; -var Buffer = require("safer-buffer").Buffer; - -// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that -// correspond to encoded bytes (if 128 - then lower half is ASCII). - -exports._sbcs = SBCSCodec; -function SBCSCodec(codecOptions, iconv) { - if (!codecOptions) - throw new Error("SBCS codec is called without the data.") - - // Prepare char buffer for decoding. - if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) - throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)"); - - if (codecOptions.chars.length === 128) { - var asciiString = ""; - for (var i = 0; i < 128; i++) - asciiString += String.fromCharCode(i); - codecOptions.chars = asciiString + codecOptions.chars; - } - - this.decodeBuf = new Buffer.from(codecOptions.chars, 'ucs2'); - - // Encoding buffer. - var encodeBuf = new Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0)); - - for (var i = 0; i < codecOptions.chars.length; i++) - encodeBuf[codecOptions.chars.charCodeAt(i)] = i; - - this.encodeBuf = encodeBuf; -} - -SBCSCodec.prototype.encoder = SBCSEncoder; -SBCSCodec.prototype.decoder = SBCSDecoder; - - -function SBCSEncoder(options, codec) { - this.encodeBuf = codec.encodeBuf; -} - -SBCSEncoder.prototype.write = function(str) { - var buf = Buffer.alloc(str.length); - for (var i = 0; i < str.length; i++) - buf[i] = this.encodeBuf[str.charCodeAt(i)]; - - return buf; -} - -SBCSEncoder.prototype.end = function() { -} - - -function SBCSDecoder(options, codec) { - this.decodeBuf = codec.decodeBuf; -} - -SBCSDecoder.prototype.write = function(buf) { - // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. - var decodeBuf = this.decodeBuf; - var newBuf = Buffer.alloc(buf.length*2); - var idx1 = 0, idx2 = 0; - for (var i = 0; i < buf.length; i++) { - idx1 = buf[i]*2; idx2 = i*2; - newBuf[idx2] = decodeBuf[idx1]; - newBuf[idx2+1] = decodeBuf[idx1+1]; - } - return newBuf.toString('ucs2'); -} - -SBCSDecoder.prototype.end = function() { -} diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-data-generated.js b/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-data-generated.js deleted file mode 100644 index 9b482360..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-data-generated.js +++ /dev/null @@ -1,451 +0,0 @@ -"use strict"; - -// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. -module.exports = { - "437": "cp437", - "737": "cp737", - "775": "cp775", - "850": "cp850", - "852": "cp852", - "855": "cp855", - "856": "cp856", - "857": "cp857", - "858": "cp858", - "860": "cp860", - "861": "cp861", - "862": "cp862", - "863": "cp863", - "864": "cp864", - "865": "cp865", - "866": "cp866", - "869": "cp869", - "874": "windows874", - "922": "cp922", - "1046": "cp1046", - "1124": "cp1124", - "1125": "cp1125", - "1129": "cp1129", - "1133": "cp1133", - "1161": "cp1161", - "1162": "cp1162", - "1163": "cp1163", - "1250": "windows1250", - "1251": "windows1251", - "1252": "windows1252", - "1253": "windows1253", - "1254": "windows1254", - "1255": "windows1255", - "1256": "windows1256", - "1257": "windows1257", - "1258": "windows1258", - "28591": "iso88591", - "28592": "iso88592", - "28593": "iso88593", - "28594": "iso88594", - "28595": "iso88595", - "28596": "iso88596", - "28597": "iso88597", - "28598": "iso88598", - "28599": "iso88599", - "28600": "iso885910", - "28601": "iso885911", - "28603": "iso885913", - "28604": "iso885914", - "28605": "iso885915", - "28606": "iso885916", - "windows874": { - "type": "_sbcs", - "chars": "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - }, - "win874": "windows874", - "cp874": "windows874", - "windows1250": { - "type": "_sbcs", - "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" - }, - "win1250": "windows1250", - "cp1250": "windows1250", - "windows1251": { - "type": "_sbcs", - "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" - }, - "win1251": "windows1251", - "cp1251": "windows1251", - "windows1252": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "win1252": "windows1252", - "cp1252": "windows1252", - "windows1253": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" - }, - "win1253": "windows1253", - "cp1253": "windows1253", - "windows1254": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" - }, - "win1254": "windows1254", - "cp1254": "windows1254", - "windows1255": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" - }, - "win1255": "windows1255", - "cp1255": "windows1255", - "windows1256": { - "type": "_sbcs", - "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے" - }, - "win1256": "windows1256", - "cp1256": "windows1256", - "windows1257": { - "type": "_sbcs", - "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙" - }, - "win1257": "windows1257", - "cp1257": "windows1257", - "windows1258": { - "type": "_sbcs", - "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" - }, - "win1258": "windows1258", - "cp1258": "windows1258", - "iso88591": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "cp28591": "iso88591", - "iso88592": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" - }, - "cp28592": "iso88592", - "iso88593": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙" - }, - "cp28593": "iso88593", - "iso88594": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙" - }, - "cp28594": "iso88594", - "iso88595": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ" - }, - "cp28595": "iso88595", - "iso88596": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������" - }, - "cp28596": "iso88596", - "iso88597": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" - }, - "cp28597": "iso88597", - "iso88598": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" - }, - "cp28598": "iso88598", - "iso88599": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" - }, - "cp28599": "iso88599", - "iso885910": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ" - }, - "cp28600": "iso885910", - "iso885911": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - }, - "cp28601": "iso885911", - "iso885913": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’" - }, - "cp28603": "iso885913", - "iso885914": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ" - }, - "cp28604": "iso885914", - "iso885915": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "cp28605": "iso885915", - "iso885916": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ" - }, - "cp28606": "iso885916", - "cp437": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm437": "cp437", - "csibm437": "cp437", - "cp737": { - "type": "_sbcs", - "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ " - }, - "ibm737": "cp737", - "csibm737": "cp737", - "cp775": { - "type": "_sbcs", - "chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ " - }, - "ibm775": "cp775", - "csibm775": "cp775", - "cp850": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " - }, - "ibm850": "cp850", - "csibm850": "cp850", - "cp852": { - "type": "_sbcs", - "chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ " - }, - "ibm852": "cp852", - "csibm852": "cp852", - "cp855": { - "type": "_sbcs", - "chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ " - }, - "ibm855": "cp855", - "csibm855": "cp855", - "cp856": { - "type": "_sbcs", - "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ " - }, - "ibm856": "cp856", - "csibm856": "cp856", - "cp857": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ " - }, - "ibm857": "cp857", - "csibm857": "cp857", - "cp858": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " - }, - "ibm858": "cp858", - "csibm858": "cp858", - "cp860": { - "type": "_sbcs", - "chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm860": "cp860", - "csibm860": "cp860", - "cp861": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm861": "cp861", - "csibm861": "cp861", - "cp862": { - "type": "_sbcs", - "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm862": "cp862", - "csibm862": "cp862", - "cp863": { - "type": "_sbcs", - "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm863": "cp863", - "csibm863": "cp863", - "cp864": { - "type": "_sbcs", - "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�" - }, - "ibm864": "cp864", - "csibm864": "cp864", - "cp865": { - "type": "_sbcs", - "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " - }, - "ibm865": "cp865", - "csibm865": "cp865", - "cp866": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ " - }, - "ibm866": "cp866", - "csibm866": "cp866", - "cp869": { - "type": "_sbcs", - "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ " - }, - "ibm869": "cp869", - "csibm869": "cp869", - "cp922": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ" - }, - "ibm922": "cp922", - "csibm922": "cp922", - "cp1046": { - "type": "_sbcs", - "chars": "ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�" - }, - "ibm1046": "cp1046", - "csibm1046": "cp1046", - "cp1124": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ" - }, - "ibm1124": "cp1124", - "csibm1124": "cp1124", - "cp1125": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ " - }, - "ibm1125": "cp1125", - "csibm1125": "cp1125", - "cp1129": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" - }, - "ibm1129": "cp1129", - "csibm1129": "cp1129", - "cp1133": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�" - }, - "ibm1133": "cp1133", - "csibm1133": "cp1133", - "cp1161": { - "type": "_sbcs", - "chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ " - }, - "ibm1161": "cp1161", - "csibm1161": "cp1161", - "cp1162": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - }, - "ibm1162": "cp1162", - "csibm1162": "cp1162", - "cp1163": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" - }, - "ibm1163": "cp1163", - "csibm1163": "cp1163", - "maccroatian": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" - }, - "maccyrillic": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" - }, - "macgreek": { - "type": "_sbcs", - "chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�" - }, - "maciceland": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macroman": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macromania": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macthai": { - "type": "_sbcs", - "chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����" - }, - "macturkish": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ" - }, - "macukraine": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" - }, - "koi8r": { - "type": "_sbcs", - "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "koi8u": { - "type": "_sbcs", - "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "koi8ru": { - "type": "_sbcs", - "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "koi8t": { - "type": "_sbcs", - "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" - }, - "armscii8": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�" - }, - "rk1048": { - "type": "_sbcs", - "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" - }, - "tcvn": { - "type": "_sbcs", - "chars": "\u0000ÚỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÝỴ\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ" - }, - "georgianacademy": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "georgianps": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" - }, - "pt154": { - "type": "_sbcs", - "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" - }, - "viscii": { - "type": "_sbcs", - "chars": "\u0000\u0001Ẳ\u0003\u0004ẴẪ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013Ỷ\u0015\u0016\u0017\u0018Ỹ\u001a\u001b\u001c\u001dỴ\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ" - }, - "iso646cn": { - "type": "_sbcs", - "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" - }, - "iso646jp": { - "type": "_sbcs", - "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" - }, - "hproman8": { - "type": "_sbcs", - "chars": "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�" - }, - "macintosh": { - "type": "_sbcs", - "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" - }, - "ascii": { - "type": "_sbcs", - "chars": "��������������������������������������������������������������������������������������������������������������������������������" - }, - "tis620": { - "type": "_sbcs", - "chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" - } -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-data.js b/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-data.js deleted file mode 100644 index 2d6f846a..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/sbcs-data.js +++ /dev/null @@ -1,169 +0,0 @@ -"use strict"; - -// Manually added data to be used by sbcs codec in addition to generated one. - -module.exports = { - // Not supported by iconv, not sure why. - "10029": "maccenteuro", - "maccenteuro": { - "type": "_sbcs", - "chars": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" - }, - - "808": "cp808", - "ibm808": "cp808", - "cp808": { - "type": "_sbcs", - "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ " - }, - - // Aliases of generated encodings. - "ascii8bit": "ascii", - "usascii": "ascii", - "ansix34": "ascii", - "ansix341968": "ascii", - "ansix341986": "ascii", - "csascii": "ascii", - "cp367": "ascii", - "ibm367": "ascii", - "isoir6": "ascii", - "iso646us": "ascii", - "iso646irv": "ascii", - "us": "ascii", - - "latin1": "iso88591", - "latin2": "iso88592", - "latin3": "iso88593", - "latin4": "iso88594", - "latin5": "iso88599", - "latin6": "iso885910", - "latin7": "iso885913", - "latin8": "iso885914", - "latin9": "iso885915", - "latin10": "iso885916", - - "csisolatin1": "iso88591", - "csisolatin2": "iso88592", - "csisolatin3": "iso88593", - "csisolatin4": "iso88594", - "csisolatincyrillic": "iso88595", - "csisolatinarabic": "iso88596", - "csisolatingreek" : "iso88597", - "csisolatinhebrew": "iso88598", - "csisolatin5": "iso88599", - "csisolatin6": "iso885910", - - "l1": "iso88591", - "l2": "iso88592", - "l3": "iso88593", - "l4": "iso88594", - "l5": "iso88599", - "l6": "iso885910", - "l7": "iso885913", - "l8": "iso885914", - "l9": "iso885915", - "l10": "iso885916", - - "isoir14": "iso646jp", - "isoir57": "iso646cn", - "isoir100": "iso88591", - "isoir101": "iso88592", - "isoir109": "iso88593", - "isoir110": "iso88594", - "isoir144": "iso88595", - "isoir127": "iso88596", - "isoir126": "iso88597", - "isoir138": "iso88598", - "isoir148": "iso88599", - "isoir157": "iso885910", - "isoir166": "tis620", - "isoir179": "iso885913", - "isoir199": "iso885914", - "isoir203": "iso885915", - "isoir226": "iso885916", - - "cp819": "iso88591", - "ibm819": "iso88591", - - "cyrillic": "iso88595", - - "arabic": "iso88596", - "arabic8": "iso88596", - "ecma114": "iso88596", - "asmo708": "iso88596", - - "greek" : "iso88597", - "greek8" : "iso88597", - "ecma118" : "iso88597", - "elot928" : "iso88597", - - "hebrew": "iso88598", - "hebrew8": "iso88598", - - "turkish": "iso88599", - "turkish8": "iso88599", - - "thai": "iso885911", - "thai8": "iso885911", - - "celtic": "iso885914", - "celtic8": "iso885914", - "isoceltic": "iso885914", - - "tis6200": "tis620", - "tis62025291": "tis620", - "tis62025330": "tis620", - - "10000": "macroman", - "10006": "macgreek", - "10007": "maccyrillic", - "10079": "maciceland", - "10081": "macturkish", - - "cspc8codepage437": "cp437", - "cspc775baltic": "cp775", - "cspc850multilingual": "cp850", - "cspcp852": "cp852", - "cspc862latinhebrew": "cp862", - "cpgr": "cp869", - - "msee": "cp1250", - "mscyrl": "cp1251", - "msansi": "cp1252", - "msgreek": "cp1253", - "msturk": "cp1254", - "mshebr": "cp1255", - "msarab": "cp1256", - "winbaltrim": "cp1257", - - "cp20866": "koi8r", - "20866": "koi8r", - "ibm878": "koi8r", - "cskoi8r": "koi8r", - - "cp21866": "koi8u", - "21866": "koi8u", - "ibm1168": "koi8u", - - "strk10482002": "rk1048", - - "tcvn5712": "tcvn", - "tcvn57121": "tcvn", - - "gb198880": "iso646cn", - "cn": "iso646cn", - - "csiso14jisc6220ro": "iso646jp", - "jisc62201969ro": "iso646jp", - "jp": "iso646jp", - - "cshproman8": "hproman8", - "r8": "hproman8", - "roman8": "hproman8", - "xroman8": "hproman8", - "ibm1051": "hproman8", - - "mac": "macintosh", - "csmacintosh": "macintosh", -}; - diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/big5-added.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/big5-added.json deleted file mode 100644 index 3c3d3c2f..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/big5-added.json +++ /dev/null @@ -1,122 +0,0 @@ -[ -["8740","䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"], -["8767","綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"], -["87a1","𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"], -["8840","㇀",4,"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"], -["88a1","ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"], -["8940","𪎩𡅅"], -["8943","攊"], -["8946","丽滝鵎釟"], -["894c","𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"], -["89a1","琑糼緍楆竉刧"], -["89ab","醌碸酞肼"], -["89b0","贋胶𠧧"], -["89b5","肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"], -["89c1","溚舾甙"], -["89c5","䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"], -["8a40","𧶄唥"], -["8a43","𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"], -["8a64","𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"], -["8a76","䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"], -["8aa1","𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"], -["8aac","䠋𠆩㿺塳𢶍"], -["8ab2","𤗈𠓼𦂗𠽌𠶖啹䂻䎺"], -["8abb","䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"], -["8ac9","𪘁𠸉𢫏𢳉"], -["8ace","𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"], -["8adf","𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"], -["8af6","𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"], -["8b40","𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"], -["8b55","𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"], -["8ba1","𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"], -["8bde","𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"], -["8c40","倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"], -["8ca1","𣏹椙橃𣱣泿"], -["8ca7","爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"], -["8cc9","顨杫䉶圽"], -["8cce","藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"], -["8ce6","峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"], -["8d40","𠮟"], -["8d42","𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"], -["8da1","㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"], -["8e40","𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"], -["8ea1","繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"], -["8f40","蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"], -["8fa1","𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"], -["9040","趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"], -["90a1","𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"], -["9140","𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"], -["91a1","鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"], -["9240","𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"], -["92a1","働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"], -["9340","媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"], -["93a1","摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"], -["9440","銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"], -["94a1","㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"], -["9540","𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"], -["95a1","衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"], -["9640","桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"], -["96a1","𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"], -["9740","愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"], -["97a1","𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"], -["9840","𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"], -["98a1","咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"], -["9940","䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"], -["99a1","䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"], -["9a40","鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"], -["9aa1","黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"], -["9b40","𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"], -["9b62","𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"], -["9ba1","椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"], -["9c40","嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"], -["9ca1","㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"], -["9d40","𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"], -["9da1","辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"], -["9e40","𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"], -["9ea1","鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"], -["9ead","𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"], -["9ec5","㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"], -["9ef5","噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"], -["9f40","籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"], -["9f4f","凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"], -["9fa1","椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"], -["9fae","酙隁酜"], -["9fb2","酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"], -["9fc1","𤤙盖鮝个𠳔莾衂"], -["9fc9","届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"], -["9fdb","歒酼龥鮗頮颴骺麨麄煺笔"], -["9fe7","毺蠘罸"], -["9feb","嘠𪙊蹷齓"], -["9ff0","跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"], -["a040","𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"], -["a055","𡠻𦸅"], -["a058","詾𢔛"], -["a05b","惽癧髗鵄鍮鮏蟵"], -["a063","蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"], -["a073","坟慯抦戹拎㩜懢厪𣏵捤栂㗒"], -["a0a1","嵗𨯂迚𨸹"], -["a0a6","僙𡵆礆匲阸𠼻䁥"], -["a0ae","矾"], -["a0b0","糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"], -["a0d4","覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"], -["a0e2","罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"], -["a3c0","␀",31,"␡"], -["c6a1","①",9,"⑴",9,"ⅰ",9,"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ",23], -["c740","す",58,"ァアィイ"], -["c7a1","ゥ",81,"А",5,"ЁЖ",4], -["c840","Л",26,"ёж",25,"⇧↸↹㇏𠃌乚𠂊刂䒑"], -["c8a1","龰冈龱𧘇"], -["c8cd","¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"], -["c8f5","ʃɐɛɔɵœøŋʊɪ"], -["f9fe","■"], -["fa40","𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"], -["faa1","鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"], -["fb40","𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"], -["fba1","𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"], -["fc40","廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"], -["fca1","𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"], -["fd40","𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"], -["fda1","𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"], -["fe40","鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"], -["fea1","𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"] -] diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp936.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp936.json deleted file mode 100644 index 49ddb9a1..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp936.json +++ /dev/null @@ -1,264 +0,0 @@ -[ -["0","\u0000",127,"€"], -["8140","丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",5,"乲乴",9,"乿",6,"亇亊"], -["8180","亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",6,"伋伌伒",4,"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾",4,"佄佅佇",5,"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"], -["8240","侤侫侭侰",4,"侶",8,"俀俁係俆俇俈俉俋俌俍俒",4,"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11], -["8280","個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯",10,"倻倽倿偀偁偂偄偅偆偉偊偋偍偐",4,"偖偗偘偙偛偝",7,"偦",5,"偭",8,"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎",20,"傤傦傪傫傭",4,"傳",6,"傼"], -["8340","傽",17,"僐",5,"僗僘僙僛",10,"僨僩僪僫僯僰僱僲僴僶",4,"僼",9,"儈"], -["8380","儉儊儌",5,"儓",13,"儢",28,"兂兇兊兌兎兏児兒兓兗兘兙兛兝",4,"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦",4,"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒",5], -["8440","凘凙凚凜凞凟凢凣凥",5,"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",5,"剋剎剏剒剓剕剗剘"], -["8480","剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳",9,"剾劀劃",4,"劉",6,"劑劒劔",6,"劜劤劥劦劧劮劯劰労",9,"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務",5,"勠勡勢勣勥",10,"勱",7,"勻勼勽匁匂匃匄匇匉匊匋匌匎"], -["8540","匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",9,"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"], -["8580","厐",4,"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",6,"厷厸厹厺厼厽厾叀參",4,"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝",4,"呣呥呧呩",7,"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"], -["8640","咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",4,"哫哬哯哰哱哴",5,"哻哾唀唂唃唄唅唈唊",4,"唒唓唕",5,"唜唝唞唟唡唥唦"], -["8680","唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",4,"啑啒啓啔啗",4,"啝啞啟啠啢啣啨啩啫啯",5,"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠",6,"喨",8,"喲喴営喸喺喼喿",4,"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗",4,"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",4,"嗿嘂嘃嘄嘅"], -["8740","嘆嘇嘊嘋嘍嘐",7,"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀",11,"噏",4,"噕噖噚噛噝",4], -["8780","噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",7,"嚇",6,"嚐嚑嚒嚔",14,"嚤",10,"嚰",6,"嚸嚹嚺嚻嚽",12,"囋",8,"囕囖囘囙囜団囥",5,"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國",6], -["8840","園",9,"圝圞圠圡圢圤圥圦圧圫圱圲圴",4,"圼圽圿坁坃坄坅坆坈坉坋坒",4,"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"], -["8880","垁垇垈垉垊垍",4,"垔",6,"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹",8,"埄",6,"埌埍埐埑埓埖埗埛埜埞埡埢埣埥",7,"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥",4,"堫",4,"報堲堳場堶",7], -["8940","堾",5,"塅",6,"塎塏塐塒塓塕塖塗塙",4,"塟",5,"塦",4,"塭",16,"塿墂墄墆墇墈墊墋墌"], -["8980","墍",4,"墔",4,"墛墜墝墠",7,"墪",17,"墽墾墿壀壂壃壄壆",10,"壒壓壔壖",13,"壥",5,"壭壯壱売壴壵壷壸壺",7,"夃夅夆夈",4,"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"], -["8a40","夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"], -["8a80","妧妬妭妰妱妳",5,"妺妼妽妿",6,"姇姈姉姌姍姎姏姕姖姙姛姞",4,"姤姦姧姩姪姫姭",11,"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪",6,"娳娵娷",4,"娽娾娿婁",4,"婇婈婋",9,"婖婗婘婙婛",5], -["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾媀",17,"媓",6,"媜",13,"媫媬"], -["8b80","媭",4,"媴媶媷媹",4,"媿嫀嫃",5,"嫊嫋嫍",4,"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬",4,"嫲",22,"嬊",11,"嬘",25,"嬳嬵嬶嬸",7,"孁",6], -["8c40","孈",7,"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"], -["8c80","寑寔",8,"寠寢寣實寧審",4,"寯寱",6,"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧",6,"屰屲",6,"屻屼屽屾岀岃",4,"岉岊岋岎岏岒岓岕岝",4,"岤",4], -["8d40","岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",5,"峌",5,"峓",5,"峚",6,"峢峣峧峩峫峬峮峯峱",9,"峼",4], -["8d80","崁崄崅崈",5,"崏",4,"崕崗崘崙崚崜崝崟",4,"崥崨崪崫崬崯",4,"崵",7,"崿",7,"嵈嵉嵍",10,"嵙嵚嵜嵞",10,"嵪嵭嵮嵰嵱嵲嵳嵵",12,"嶃",21,"嶚嶛嶜嶞嶟嶠"], -["8e40","嶡",21,"嶸",12,"巆",6,"巎",12,"巜巟巠巣巤巪巬巭"], -["8e80","巰巵巶巸",4,"巿帀帄帇帉帊帋帍帎帒帓帗帞",7,"帨",4,"帯帰帲",4,"帹帺帾帿幀幁幃幆",5,"幍",6,"幖",4,"幜幝幟幠幣",14,"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨",4,"庮",4,"庴庺庻庼庽庿",6], -["8f40","廆廇廈廋",5,"廔廕廗廘廙廚廜",11,"廩廫",8,"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"], -["8f80","弨弫弬弮弰弲",6,"弻弽弾弿彁",14,"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"], -["9040","怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰",4,"怶",4,"怽怾恀恄",6,"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"], -["9080","悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",7,"惇惈惉惌",4,"惒惓惔惖惗惙惛惞惡",4,"惪惱惲惵惷惸惻",4,"愂愃愄愅愇愊愋愌愐",4,"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬",18,"慀",6], -["9140","慇慉態慍慏慐慒慓慔慖",6,"慞慟慠慡慣慤慥慦慩",6,"慱慲慳慴慶慸",18,"憌憍憏",4,"憕"], -["9180","憖",6,"憞",8,"憪憫憭",9,"憸",5,"憿懀懁懃",4,"應懌",4,"懓懕",16,"懧",13,"懶",8,"戀",5,"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸",4,"扂扄扅扆扊"], -["9240","扏扐払扖扗扙扚扜",6,"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋",5,"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"], -["9280","拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",5,"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖",7,"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙",6,"採掤掦掫掯掱掲掵掶掹掻掽掿揀"], -["9340","揁揂揃揅揇揈揊揋揌揑揓揔揕揗",6,"揟揢揤",4,"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆",4,"損搎搑搒搕",5,"搝搟搢搣搤"], -["9380","搥搧搨搩搫搮",5,"搵",4,"搻搼搾摀摂摃摉摋",6,"摓摕摖摗摙",4,"摟",7,"摨摪摫摬摮",9,"摻",6,"撃撆撈",8,"撓撔撗撘撚撛撜撝撟",4,"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆",6,"擏擑擓擔擕擖擙據"], -["9440","擛擜擝擟擠擡擣擥擧",24,"攁",7,"攊",7,"攓",4,"攙",8], -["9480","攢攣攤攦",4,"攬攭攰攱攲攳攷攺攼攽敀",4,"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",14,"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱",7,"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘",7,"旡旣旤旪旫"], -["9540","旲旳旴旵旸旹旻",4,"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",4,"昽昿晀時晄",6,"晍晎晐晑晘"], -["9580","晙晛晜晝晞晠晢晣晥晧晩",4,"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘",4,"暞",8,"暩",4,"暯",4,"暵暶暷暸暺暻暼暽暿",25,"曚曞",7,"曧曨曪",5,"曱曵曶書曺曻曽朁朂會"], -["9640","朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠",5,"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗",4,"杝杢杣杤杦杧杫杬杮東杴杶"], -["9680","杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",7,"柂柅",9,"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",7,"柾栁栂栃栄栆栍栐栒栔栕栘",4,"栞栟栠栢",6,"栫",6,"栴栵栶栺栻栿桇桋桍桏桒桖",5], -["9740","桜桝桞桟桪桬",7,"桵桸",8,"梂梄梇",7,"梐梑梒梔梕梖梘",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"], -["9780","梹",6,"棁棃",5,"棊棌棎棏棐棑棓棔棖棗棙棛",4,"棡棢棤",9,"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",4,"椌椏椑椓",11,"椡椢椣椥",7,"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃",16,"楕楖楘楙楛楜楟"], -["9840","楡楢楤楥楧楨楩楪楬業楯楰楲",4,"楺楻楽楾楿榁榃榅榊榋榌榎",5,"榖榗榙榚榝",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"], -["9880","榾榿槀槂",7,"構槍槏槑槒槓槕",5,"槜槝槞槡",11,"槮槯槰槱槳",9,"槾樀",9,"樋",11,"標",5,"樠樢",5,"権樫樬樭樮樰樲樳樴樶",6,"樿",4,"橅橆橈",7,"橑",6,"橚"], -["9940","橜",4,"橢橣橤橦",10,"橲",6,"橺橻橽橾橿檁檂檃檅",8,"檏檒",4,"檘",7,"檡",5], -["9980","檧檨檪檭",114,"欥欦欨",6], -["9a40","欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍",11,"歚",7,"歨歩歫",13,"歺歽歾歿殀殅殈"], -["9a80","殌殎殏殐殑殔殕殗殘殙殜",4,"殢",7,"殫",7,"殶殸",6,"毀毃毄毆",4,"毌毎毐毑毘毚毜",4,"毢",7,"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",6,"氈",4,"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋",4,"汑汒汓汖汘"], -["9b40","汙汚汢汣汥汦汧汫",4,"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"], -["9b80","泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟",5,"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽",4,"涃涄涆涇涊涋涍涏涐涒涖",4,"涜涢涥涬涭涰涱涳涴涶涷涹",5,"淁淂淃淈淉淊"], -["9c40","淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",7,"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"], -["9c80","渶渷渹渻",7,"湅",7,"湏湐湑湒湕湗湙湚湜湝湞湠",10,"湬湭湯",14,"満溁溂溄溇溈溊",4,"溑",6,"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪",5], -["9d40","滰滱滲滳滵滶滷滸滺",7,"漃漄漅漇漈漊",4,"漐漑漒漖",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"漿潀潁潂"], -["9d80","潃潄潅潈潉潊潌潎",9,"潙潚潛潝潟潠潡潣潤潥潧",5,"潯潰潱潳潵潶潷潹潻潽",6,"澅澆澇澊澋澏",12,"澝澞澟澠澢",4,"澨",10,"澴澵澷澸澺",5,"濁濃",5,"濊",6,"濓",10,"濟濢濣濤濥"], -["9e40","濦",7,"濰",32,"瀒",7,"瀜",6,"瀤",6], -["9e80","瀫",9,"瀶瀷瀸瀺",17,"灍灎灐",13,"灟",11,"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞",12,"炰炲炴炵炶為炾炿烄烅烆烇烉烋",12,"烚"], -["9f40","烜烝烞烠烡烢烣烥烪烮烰",6,"烸烺烻烼烾",10,"焋",4,"焑焒焔焗焛",10,"焧",7,"焲焳焴"], -["9f80","焵焷",13,"煆煇煈煉煋煍煏",12,"煝煟",4,"煥煩",4,"煯煰煱煴煵煶煷煹煻煼煾",5,"熅",4,"熋熌熍熎熐熑熒熓熕熖熗熚",4,"熡",6,"熩熪熫熭",5,"熴熶熷熸熺",8,"燄",9,"燏",4], -["a040","燖",9,"燡燢燣燤燦燨",5,"燯",9,"燺",11,"爇",19], -["a080","爛爜爞",9,"爩爫爭爮爯爲爳爴爺爼爾牀",6,"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",4,"犌犎犐犑犓",11,"犠",11,"犮犱犲犳犵犺",6,"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"], -["a1a1"," 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈",7,"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"], -["a2a1","ⅰ",9], -["a2b1","⒈",19,"⑴",19,"①",9], -["a2e5","㈠",9], -["a2f1","Ⅰ",11], -["a3a1","!"#¥%",88," ̄"], -["a4a1","ぁ",82], -["a5a1","ァ",85], -["a6a1","Α",16,"Σ",6], -["a6c1","α",16,"σ",6], -["a6e0","︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"], -["a6ee","︻︼︷︸︱"], -["a6f4","︳︴"], -["a7a1","А",5,"ЁЖ",25], -["a7d1","а",5,"ёж",25], -["a840","ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═",35,"▁",6], -["a880","█",7,"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"], -["a8a1","āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"], -["a8bd","ńň"], -["a8c0","ɡ"], -["a8c5","ㄅ",36], -["a940","〡",8,"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦"], -["a959","℡㈱"], -["a95c","‐"], -["a960","ー゛゜ヽヾ〆ゝゞ﹉",9,"﹔﹕﹖﹗﹙",8], -["a980","﹢",4,"﹨﹩﹪﹫"], -["a996","〇"], -["a9a4","─",75], -["aa40","狜狝狟狢",5,"狪狫狵狶狹狽狾狿猀猂猄",5,"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀",8], -["aa80","獉獊獋獌獎獏獑獓獔獕獖獘",7,"獡",10,"獮獰獱"], -["ab40","獲",11,"獿",4,"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣",5,"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃",4], -["ab80","珋珌珎珒",6,"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳",4], -["ac40","珸",10,"琄琇琈琋琌琍琎琑",8,"琜",5,"琣琤琧琩琫琭琯琱琲琷",4,"琽琾琿瑀瑂",11], -["ac80","瑎",6,"瑖瑘瑝瑠",12,"瑮瑯瑱",4,"瑸瑹瑺"], -["ad40","瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑",10,"璝璟",7,"璪",15,"璻",12], -["ad80","瓈",9,"瓓",8,"瓝瓟瓡瓥瓧",6,"瓰瓱瓲"], -["ae40","瓳瓵瓸",6,"甀甁甂甃甅",7,"甎甐甒甔甕甖甗甛甝甞甠",4,"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"], -["ae80","畝",7,"畧畨畩畫",6,"畳畵當畷畺",4,"疀疁疂疄疅疇"], -["af40","疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦",4,"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"], -["af80","瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"], -["b040","癅",6,"癎",5,"癕癗",4,"癝癟癠癡癢癤",6,"癬癭癮癰",7,"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"], -["b080","皜",7,"皥",8,"皯皰皳皵",9,"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"], -["b140","盄盇盉盋盌盓盕盙盚盜盝盞盠",4,"盦",7,"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",10,"眛眜眝眞眡眣眤眥眧眪眫"], -["b180","眬眮眰",4,"眹眻眽眾眿睂睄睅睆睈",7,"睒",7,"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"], -["b240","睝睞睟睠睤睧睩睪睭",11,"睺睻睼瞁瞂瞃瞆",5,"瞏瞐瞓",11,"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",4], -["b280","瞼瞾矀",12,"矎",8,"矘矙矚矝",4,"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"], -["b340","矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",5,"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"], -["b380","硛硜硞",11,"硯",7,"硸硹硺硻硽",6,"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"], -["b440","碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨",7,"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚",9], -["b480","磤磥磦磧磩磪磫磭",4,"磳磵磶磸磹磻",5,"礂礃礄礆",6,"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"], -["b540","礍",5,"礔",9,"礟",4,"礥",14,"礵",4,"礽礿祂祃祄祅祇祊",8,"祔祕祘祙祡祣"], -["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"], -["b640","禓",6,"禛",11,"禨",10,"禴",4,"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙",5,"秠秡秢秥秨秪"], -["b680","秬秮秱",6,"秹秺秼秾秿稁稄稅稇稈稉稊稌稏",4,"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"], -["b740","稝稟稡稢稤",14,"稴稵稶稸稺稾穀",5,"穇",9,"穒",4,"穘",16], -["b780","穩",6,"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"], -["b840","窣窤窧窩窪窫窮",4,"窴",10,"竀",10,"竌",9,"竗竘竚竛竜竝竡竢竤竧",5,"竮竰竱竲竳"], -["b880","竴",4,"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"], -["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"筆筈筊筍筎筓筕筗筙筜筞筟筡筣",10,"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆",6,"箎箏"], -["b980","箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",7,"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"], -["ba40","篅篈築篊篋篍篎篏篐篒篔",4,"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",4,"篸篹篺篻篽篿",7,"簈簉簊簍簎簐",5,"簗簘簙"], -["ba80","簚",4,"簠",5,"簨簩簫",12,"簹",5,"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"], -["bb40","籃",9,"籎",36,"籵",5,"籾",9], -["bb80","粈粊",6,"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",4,"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"], -["bc40","粿糀糂糃糄糆糉糋糎",6,"糘糚糛糝糞糡",6,"糩",5,"糰",7,"糹糺糼",13,"紋",5], -["bc80","紑",14,"紡紣紤紥紦紨紩紪紬紭紮細",6,"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"], -["bd40","紷",54,"絯",7], -["bd80","絸",32,"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"], -["be40","継",12,"綧",6,"綯",42], -["be80","線",32,"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"], -["bf40","緻",62], -["bf80","縺縼",4,"繂",4,"繈",21,"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"], -["c040","繞",35,"纃",23,"纜纝纞"], -["c080","纮纴纻纼绖绤绬绹缊缐缞缷缹缻",6,"罃罆",9,"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"], -["c140","罖罙罛罜罝罞罠罣",4,"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",7,"羋羍羏",4,"羕",4,"羛羜羠羢羣羥羦羨",6,"羱"], -["c180","羳",4,"羺羻羾翀翂翃翄翆翇翈翉翋翍翏",4,"翖翗翙",5,"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"], -["c240","翤翧翨翪翫翬翭翯翲翴",6,"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫",5,"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"], -["c280","聙聛",13,"聫",5,"聲",11,"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"], -["c340","聾肁肂肅肈肊肍",5,"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",4,"胏",6,"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"], -["c380","脌脕脗脙脛脜脝脟",12,"脭脮脰脳脴脵脷脹",4,"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"], -["c440","腀",5,"腇腉腍腎腏腒腖腗腘腛",4,"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃",4,"膉膋膌膍膎膐膒",5,"膙膚膞",4,"膤膥"], -["c480","膧膩膫",7,"膴",5,"膼膽膾膿臄臅臇臈臉臋臍",6,"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"], -["c540","臔",14,"臤臥臦臨臩臫臮",4,"臵",5,"臽臿舃與",4,"舎舏舑舓舕",5,"舝舠舤舥舦舧舩舮舲舺舼舽舿"], -["c580","艀艁艂艃艅艆艈艊艌艍艎艐",7,"艙艛艜艝艞艠",7,"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"], -["c640","艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"], -["c680","苺苼",4,"茊茋茍茐茒茓茖茘茙茝",9,"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"], -["c740","茾茿荁荂荄荅荈荊",4,"荓荕",4,"荝荢荰",6,"荹荺荾",6,"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡",6,"莬莭莮"], -["c780","莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"], -["c840","菮華菳",4,"菺菻菼菾菿萀萂萅萇萈萉萊萐萒",5,"萙萚萛萞",5,"萩",7,"萲",5,"萹萺萻萾",7,"葇葈葉"], -["c880","葊",6,"葒",4,"葘葝葞葟葠葢葤",4,"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"], -["c940","葽",4,"蒃蒄蒅蒆蒊蒍蒏",7,"蒘蒚蒛蒝蒞蒟蒠蒢",12,"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"], -["c980","蓘",4,"蓞蓡蓢蓤蓧",4,"蓭蓮蓯蓱",10,"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"], -["ca40","蔃",8,"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢",8,"蔭",9,"蔾",4,"蕄蕅蕆蕇蕋",10], -["ca80","蕗蕘蕚蕛蕜蕝蕟",4,"蕥蕦蕧蕩",8,"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"], -["cb40","薂薃薆薈",6,"薐",10,"薝",6,"薥薦薧薩薫薬薭薱",5,"薸薺",6,"藂",6,"藊",4,"藑藒"], -["cb80","藔藖",5,"藝",6,"藥藦藧藨藪",14,"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"], -["cc40","藹藺藼藽藾蘀",4,"蘆",10,"蘒蘓蘔蘕蘗",15,"蘨蘪",13,"蘹蘺蘻蘽蘾蘿虀"], -["cc80","虁",11,"虒虓處",4,"虛虜虝號虠虡虣",7,"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"], -["cd40","虭虯虰虲",6,"蚃",6,"蚎",4,"蚔蚖",5,"蚞",4,"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",4,"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"], -["cd80","蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"], -["ce40","蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀",6,"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚",5,"蝡蝢蝦",7,"蝯蝱蝲蝳蝵"], -["ce80","蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎",4,"螔螕螖螘",6,"螠",4,"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"], -["cf40","螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁",4,"蟇蟈蟉蟌",4,"蟔",6,"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯",9], -["cf80","蟺蟻蟼蟽蟿蠀蠁蠂蠄",5,"蠋",7,"蠔蠗蠘蠙蠚蠜",4,"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"], -["d040","蠤",13,"蠳",5,"蠺蠻蠽蠾蠿衁衂衃衆",5,"衎",5,"衕衖衘衚",6,"衦衧衪衭衯衱衳衴衵衶衸衹衺"], -["d080","衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗",4,"袝",4,"袣袥",5,"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"], -["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚",4,"裠裡裦裧裩",6,"裲裵裶裷裺裻製裿褀褁褃",5], -["d180","褉褋",4,"褑褔",4,"褜",4,"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"], -["d240","褸",8,"襂襃襅",24,"襠",5,"襧",19,"襼"], -["d280","襽襾覀覂覄覅覇",26,"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"], -["d340","覢",30,"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴",6], -["d380","觻",4,"訁",5,"計",21,"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"], -["d440","訞",31,"訿",8,"詉",21], -["d480","詟",25,"詺",6,"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"], -["d540","誁",7,"誋",7,"誔",46], -["d580","諃",32,"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"], -["d640","諤",34,"謈",27], -["d680","謤謥謧",30,"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"], -["d740","譆",31,"譧",4,"譭",25], -["d780","讇",24,"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"], -["d840","谸",8,"豂豃豄豅豈豊豋豍",7,"豖豗豘豙豛",5,"豣",6,"豬",6,"豴豵豶豷豻",6,"貃貄貆貇"], -["d880","貈貋貍",6,"貕貖貗貙",20,"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"], -["d940","貮",62], -["d980","賭",32,"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"], -["da40","贎",14,"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",8,"趂趃趆趇趈趉趌",4,"趒趓趕",9,"趠趡"], -["da80","趢趤",12,"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"], -["db40","跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",6,"踆踇踈踋踍踎踐踑踒踓踕",7,"踠踡踤",4,"踫踭踰踲踳踴踶踷踸踻踼踾"], -["db80","踿蹃蹅蹆蹌",4,"蹓",5,"蹚",11,"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"], -["dc40","蹳蹵蹷",4,"蹽蹾躀躂躃躄躆躈",6,"躑躒躓躕",6,"躝躟",11,"躭躮躰躱躳",6,"躻",7], -["dc80","軃",10,"軏",21,"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"], -["dd40","軥",62], -["dd80","輤",32,"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"], -["de40","轅",32,"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"], -["de80","迉",4,"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"], -["df40","這逜連逤逥逧",5,"逰",4,"逷逹逺逽逿遀遃遅遆遈",4,"過達違遖遙遚遜",5,"遤遦遧適遪遫遬遯",4,"遶",6,"遾邁"], -["df80","還邅邆邇邉邊邌",4,"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"], -["e040","郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅",19,"鄚鄛鄜"], -["e080","鄝鄟鄠鄡鄤",10,"鄰鄲",6,"鄺",8,"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"], -["e140","酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",4,"醆醈醊醎醏醓",6,"醜",5,"醤",5,"醫醬醰醱醲醳醶醷醸醹醻"], -["e180","醼",10,"釈釋釐釒",9,"針",8,"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"], -["e240","釦",62], -["e280","鈥",32,"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧",5,"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"], -["e340","鉆",45,"鉵",16], -["e380","銆",7,"銏",24,"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"], -["e440","銨",5,"銯",24,"鋉",31], -["e480","鋩",32,"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"], -["e540","錊",51,"錿",10], -["e580","鍊",31,"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"], -["e640","鍬",34,"鎐",27], -["e680","鎬",29,"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"], -["e740","鏎",7,"鏗",54], -["e780","鐎",32,"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡",6,"缪缫缬缭缯",4,"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"], -["e840","鐯",14,"鐿",43,"鑬鑭鑮鑯"], -["e880","鑰",20,"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"], -["e940","锧锳锽镃镈镋镕镚镠镮镴镵長",7,"門",42], -["e980","閫",32,"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"], -["ea40","闌",27,"闬闿阇阓阘阛阞阠阣",6,"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"], -["ea80","陘陙陚陜陝陞陠陣陥陦陫陭",4,"陳陸",12,"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"], -["eb40","隌階隑隒隓隕隖隚際隝",9,"隨",7,"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖",9,"雡",6,"雫"], -["eb80","雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗",4,"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"], -["ec40","霡",8,"霫霬霮霯霱霳",4,"霺霻霼霽霿",18,"靔靕靗靘靚靜靝靟靣靤靦靧靨靪",7], -["ec80","靲靵靷",4,"靽",7,"鞆",4,"鞌鞎鞏鞐鞓鞕鞖鞗鞙",4,"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"], -["ed40","鞞鞟鞡鞢鞤",6,"鞬鞮鞰鞱鞳鞵",46], -["ed80","韤韥韨韮",4,"韴韷",23,"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"], -["ee40","頏",62], -["ee80","顎",32,"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",4,"钼钽钿铄铈",6,"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"], -["ef40","顯",5,"颋颎颒颕颙颣風",37,"飏飐飔飖飗飛飜飝飠",4], -["ef80","飥飦飩",30,"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒",4,"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤",8,"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"], -["f040","餈",4,"餎餏餑",28,"餯",26], -["f080","饊",9,"饖",12,"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",6,"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"], -["f140","馌馎馚",10,"馦馧馩",47], -["f180","駙",32,"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"], -["f240","駺",62], -["f280","騹",32,"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"], -["f340","驚",17,"驲骃骉骍骎骔骕骙骦骩",6,"骲骳骴骵骹骻骽骾骿髃髄髆",4,"髍髎髏髐髒體髕髖髗髙髚髛髜"], -["f380","髝髞髠髢髣髤髥髧髨髩髪髬髮髰",8,"髺髼",6,"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"], -["f440","鬇鬉",5,"鬐鬑鬒鬔",10,"鬠鬡鬢鬤",10,"鬰鬱鬳",7,"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕",5], -["f480","魛",32,"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"], -["f540","魼",62], -["f580","鮻",32,"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"], -["f640","鯜",62], -["f680","鰛",32,"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅",5,"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞",5,"鲥",4,"鲫鲭鲮鲰",7,"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"], -["f740","鰼",62], -["f780","鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾",4,"鳈鳉鳑鳒鳚鳛鳠鳡鳌",4,"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"], -["f840","鳣",62], -["f880","鴢",32], -["f940","鵃",62], -["f980","鶂",32], -["fa40","鶣",62], -["fa80","鷢",32], -["fb40","鸃",27,"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴",9,"麀"], -["fb80","麁麃麄麅麆麉麊麌",5,"麔",8,"麞麠",5,"麧麨麩麪"], -["fc40","麫",8,"麵麶麷麹麺麼麿",4,"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",8,"黺黽黿",6], -["fc80","鼆",4,"鼌鼏鼑鼒鼔鼕鼖鼘鼚",5,"鼡鼣",8,"鼭鼮鼰鼱"], -["fd40","鼲",4,"鼸鼺鼼鼿",4,"齅",10,"齒",38], -["fd80","齹",5,"龁龂龍",11,"龜龝龞龡",4,"郎凉秊裏隣"], -["fe40","兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"] -] diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp949.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp949.json deleted file mode 100644 index 2022a007..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp949.json +++ /dev/null @@ -1,273 +0,0 @@ -[ -["0","\u0000",127], -["8141","갂갃갅갆갋",4,"갘갞갟갡갢갣갥",6,"갮갲갳갴"], -["8161","갵갶갷갺갻갽갾갿걁",9,"걌걎",5,"걕"], -["8181","걖걗걙걚걛걝",18,"걲걳걵걶걹걻",4,"겂겇겈겍겎겏겑겒겓겕",6,"겞겢",5,"겫겭겮겱",6,"겺겾겿곀곂곃곅곆곇곉곊곋곍",7,"곖곘",7,"곢곣곥곦곩곫곭곮곲곴곷",4,"곾곿괁괂괃괅괇",4,"괎괐괒괓"], -["8241","괔괕괖괗괙괚괛괝괞괟괡",7,"괪괫괮",5], -["8261","괶괷괹괺괻괽",6,"굆굈굊",5,"굑굒굓굕굖굗"], -["8281","굙",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾궀궃",4,"궊궋궍궎궏궑",10,"궞",5,"궥",17,"궸",7,"귂귃귅귆귇귉",6,"귒귔",7,"귝귞귟귡귢귣귥",18], -["8341","귺귻귽귾긂",5,"긊긌긎",5,"긕",7], -["8361","긝",18,"긲긳긵긶긹긻긼"], -["8381","긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗",4,"깞깢깣깤깦깧깪깫깭깮깯깱",6,"깺깾",5,"꺆",5,"꺍",46,"꺿껁껂껃껅",6,"껎껒",5,"껚껛껝",8], -["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8], -["8461","꼆꼉꼊꼋꼌꼎꼏꼑",18], -["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"꼾꽀꽄꽅꽆꽇꽊",5,"꽑",10,"꽞",5,"꽦",18,"꽺",5,"꾁꾂꾃꾅꾆꾇꾉",6,"꾒꾓꾔꾖",5,"꾝",26,"꾺꾻꾽꾾"], -["8541","꾿꿁",5,"꿊꿌꿏",4,"꿕",6,"꿝",4], -["8561","꿢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"뀂뀃"], -["8581","뀅",6,"뀍뀎뀏뀑뀒뀓뀕",6,"뀞",9,"뀩",26,"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞",29,"끾끿낁낂낃낅",6,"낎낐낒",5,"낛낝낞낣낤"], -["8641","낥낦낧낪낰낲낶낷낹낺낻낽",6,"냆냊",5,"냒"], -["8661","냓냕냖냗냙",6,"냡냢냣냤냦",10], -["8681","냱",22,"넊넍넎넏넑넔넕넖넗넚넞",4,"넦넧넩넪넫넭",6,"넶넺",5,"녂녃녅녆녇녉",6,"녒녓녖녗녙녚녛녝녞녟녡",22,"녺녻녽녾녿놁놃",4,"놊놌놎놏놐놑놕놖놗놙놚놛놝"], -["8741","놞",9,"놩",15], -["8761","놹",18,"뇍뇎뇏뇑뇒뇓뇕"], -["8781","뇖",5,"뇞뇠",7,"뇪뇫뇭뇮뇯뇱",7,"뇺뇼뇾",5,"눆눇눉눊눍",6,"눖눘눚",5,"눡",18,"눵",6,"눽",26,"뉙뉚뉛뉝뉞뉟뉡",6,"뉪",4], -["8841","뉯",4,"뉶",5,"뉽",6,"늆늇늈늊",4], -["8861","늏늒늓늕늖늗늛",4,"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"], -["8881","늸",15,"닊닋닍닎닏닑닓",4,"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",6,"댒댖",5,"댝",54,"덗덙덚덝덠덡덢덣"], -["8941","덦덨덪덬덭덯덲덳덵덶덷덹",6,"뎂뎆",5,"뎍"], -["8961","뎎뎏뎑뎒뎓뎕",10,"뎢",5,"뎩뎪뎫뎭"], -["8981","뎮",21,"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩",18,"돽",18,"됑",6,"됙됚됛됝됞됟됡",6,"됪됬",7,"됵",15], -["8a41","둅",10,"둒둓둕둖둗둙",6,"둢둤둦"], -["8a61","둧",4,"둭",18,"뒁뒂"], -["8a81","뒃",4,"뒉",19,"뒞",5,"뒥뒦뒧뒩뒪뒫뒭",7,"뒶뒸뒺",5,"듁듂듃듅듆듇듉",6,"듑듒듓듔듖",5,"듞듟듡듢듥듧",4,"듮듰듲",5,"듹",26,"딖딗딙딚딝"], -["8b41","딞",5,"딦딫",4,"딲딳딵딶딷딹",6,"땂땆"], -["8b61","땇땈땉땊땎땏땑땒땓땕",6,"땞땢",8], -["8b81","땫",52,"떢떣떥떦떧떩떬떭떮떯떲떶",4,"떾떿뗁뗂뗃뗅",6,"뗎뗒",5,"뗙",18,"뗭",18], -["8c41","똀",15,"똒똓똕똖똗똙",4], -["8c61","똞",6,"똦",5,"똭",6,"똵",5], -["8c81","똻",12,"뙉",26,"뙥뙦뙧뙩",50,"뚞뚟뚡뚢뚣뚥",5,"뚭뚮뚯뚰뚲",16], -["8d41","뛃",16,"뛕",8], -["8d61","뛞",17,"뛱뛲뛳뛵뛶뛷뛹뛺"], -["8d81","뛻",4,"뜂뜃뜄뜆",33,"뜪뜫뜭뜮뜱",6,"뜺뜼",7,"띅띆띇띉띊띋띍",6,"띖",9,"띡띢띣띥띦띧띩",6,"띲띴띶",5,"띾띿랁랂랃랅",6,"랎랓랔랕랚랛랝랞"], -["8e41","랟랡",6,"랪랮",5,"랶랷랹",8], -["8e61","럂",4,"럈럊",19], -["8e81","럞",13,"럮럯럱럲럳럵",6,"럾렂",4,"렊렋렍렎렏렑",6,"렚렜렞",5,"렦렧렩렪렫렭",6,"렶렺",5,"롁롂롃롅",11,"롒롔",7,"롞롟롡롢롣롥",6,"롮롰롲",5,"롹롺롻롽",7], -["8f41","뢅",7,"뢎",17], -["8f61","뢠",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4], -["8f81","뢾뢿룂룄룆",5,"룍룎룏룑룒룓룕",7,"룞룠룢",5,"룪룫룭룮룯룱",6,"룺룼룾",5,"뤅",18,"뤙",6,"뤡",26,"뤾뤿륁륂륃륅",6,"륍륎륐륒",5], -["9041","륚륛륝륞륟륡",6,"륪륬륮",5,"륶륷륹륺륻륽"], -["9061","륾",5,"릆릈릋릌릏",15], -["9081","릟",12,"릮릯릱릲릳릵",6,"릾맀맂",5,"맊맋맍맓",4,"맚맜맟맠맢맦맧맩맪맫맭",6,"맶맻",4,"먂",5,"먉",11,"먖",33,"먺먻먽먾먿멁멃멄멅멆"], -["9141","멇멊멌멏멐멑멒멖멗멙멚멛멝",6,"멦멪",5], -["9161","멲멳멵멶멷멹",9,"몆몈몉몊몋몍",5], -["9181","몓",20,"몪몭몮몯몱몳",4,"몺몼몾",5,"뫅뫆뫇뫉",14,"뫚",33,"뫽뫾뫿묁묂묃묅",7,"묎묐묒",5,"묙묚묛묝묞묟묡",6], -["9241","묨묪묬",7,"묷묹묺묿",4,"뭆뭈뭊뭋뭌뭎뭑뭒"], -["9261","뭓뭕뭖뭗뭙",7,"뭢뭤",7,"뭭",4], -["9281","뭲",21,"뮉뮊뮋뮍뮎뮏뮑",18,"뮥뮦뮧뮩뮪뮫뮭",6,"뮵뮶뮸",7,"믁믂믃믅믆믇믉",6,"믑믒믔",35,"믺믻믽믾밁"], -["9341","밃",4,"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"], -["9361","밶밷밹",6,"뱂뱆뱇뱈뱊뱋뱎뱏뱑",8], -["9381","뱚뱛뱜뱞",37,"벆벇벉벊벍벏",4,"벖벘벛",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿볁볂볃볅",7,"볎볒볓볔볖볗볙볚볛볝",22,"볷볹볺볻볽"], -["9441","볾",5,"봆봈봊",5,"봑봒봓봕",8], -["9461","봞",5,"봥",6,"봭",12], -["9481","봺",5,"뵁",6,"뵊뵋뵍뵎뵏뵑",6,"뵚",9,"뵥뵦뵧뵩",22,"붂붃붅붆붋",4,"붒붔붖붗붘붛붝",6,"붥",10,"붱",6,"붹",24], -["9541","뷒뷓뷖뷗뷙뷚뷛뷝",11,"뷪",5,"뷱"], -["9561","뷲뷳뷵뷶뷷뷹",6,"븁븂븄븆",5,"븎븏븑븒븓"], -["9581","븕",6,"븞븠",35,"빆빇빉빊빋빍빏",4,"빖빘빜빝빞빟빢빣빥빦빧빩빫",4,"빲빶",4,"빾빿뺁뺂뺃뺅",6,"뺎뺒",5,"뺚",13,"뺩",14], -["9641","뺸",23,"뻒뻓"], -["9661","뻕뻖뻙",6,"뻡뻢뻦",5,"뻭",8], -["9681","뻶",10,"뼂",5,"뼊",13,"뼚뼞",33,"뽂뽃뽅뽆뽇뽉",6,"뽒뽓뽔뽖",44], -["9741","뾃",16,"뾕",8], -["9761","뾞",17,"뾱",7], -["9781","뾹",11,"뿆",5,"뿎뿏뿑뿒뿓뿕",6,"뿝뿞뿠뿢",89,"쀽쀾쀿"], -["9841","쁀",16,"쁒",5,"쁙쁚쁛"], -["9861","쁝쁞쁟쁡",6,"쁪",15], -["9881","쁺",21,"삒삓삕삖삗삙",6,"삢삤삦",5,"삮삱삲삷",4,"삾샂샃샄샆샇샊샋샍샎샏샑",6,"샚샞",5,"샦샧샩샪샫샭",6,"샶샸샺",5,"섁섂섃섅섆섇섉",6,"섑섒섓섔섖",5,"섡섢섥섨섩섪섫섮"], -["9941","섲섳섴섵섷섺섻섽섾섿셁",6,"셊셎",5,"셖셗"], -["9961","셙셚셛셝",6,"셦셪",5,"셱셲셳셵셶셷셹셺셻"], -["9981","셼",8,"솆",5,"솏솑솒솓솕솗",4,"솞솠솢솣솤솦솧솪솫솭솮솯솱",11,"솾",5,"쇅쇆쇇쇉쇊쇋쇍",6,"쇕쇖쇙",6,"쇡쇢쇣쇥쇦쇧쇩",6,"쇲쇴",7,"쇾쇿숁숂숃숅",6,"숎숐숒",5,"숚숛숝숞숡숢숣"], -["9a41","숤숥숦숧숪숬숮숰숳숵",16], -["9a61","쉆쉇쉉",6,"쉒쉓쉕쉖쉗쉙",6,"쉡쉢쉣쉤쉦"], -["9a81","쉧",4,"쉮쉯쉱쉲쉳쉵",6,"쉾슀슂",5,"슊",5,"슑",6,"슙슚슜슞",5,"슦슧슩슪슫슮",5,"슶슸슺",33,"싞싟싡싢싥",5,"싮싰싲싳싴싵싷싺싽싾싿쌁",6,"쌊쌋쌎쌏"], -["9b41","쌐쌑쌒쌖쌗쌙쌚쌛쌝",6,"쌦쌧쌪",8], -["9b61","쌳",17,"썆",7], -["9b81","썎",25,"썪썫썭썮썯썱썳",4,"썺썻썾",5,"쎅쎆쎇쎉쎊쎋쎍",50,"쏁",22,"쏚"], -["9c41","쏛쏝쏞쏡쏣",4,"쏪쏫쏬쏮",5,"쏶쏷쏹",5], -["9c61","쏿",8,"쐉",6,"쐑",9], -["9c81","쐛",8,"쐥",6,"쐭쐮쐯쐱쐲쐳쐵",6,"쐾",9,"쑉",26,"쑦쑧쑩쑪쑫쑭",6,"쑶쑷쑸쑺",5,"쒁",18,"쒕",6,"쒝",12], -["9d41","쒪",13,"쒹쒺쒻쒽",8], -["9d61","쓆",25], -["9d81","쓠",8,"쓪",5,"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",9,"씍씎씏씑씒씓씕",6,"씝",10,"씪씫씭씮씯씱",6,"씺씼씾",5,"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩",6,"앲앶",5,"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"], -["9e41","얖얙얚얛얝얞얟얡",7,"얪",9,"얶"], -["9e61","얷얺얿",4,"엋엍엏엒엓엕엖엗엙",6,"엢엤엦엧"], -["9e81","엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑",6,"옚옝",6,"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",6,"왒왖",5,"왞왟왡",10,"왭왮왰왲",5,"왺왻왽왾왿욁",6,"욊욌욎",5,"욖욗욙욚욛욝",6,"욦"], -["9f41","욨욪",5,"욲욳욵욶욷욻",4,"웂웄웆",5,"웎"], -["9f61","웏웑웒웓웕",6,"웞웟웢",5,"웪웫웭웮웯웱웲"], -["9f81","웳",4,"웺웻웼웾",5,"윆윇윉윊윋윍",6,"윖윘윚",5,"윢윣윥윦윧윩",6,"윲윴윶윸윹윺윻윾윿읁읂읃읅",4,"읋읎읐읙읚읛읝읞읟읡",6,"읩읪읬",7,"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛",4,"잢잧",4,"잮잯잱잲잳잵잶잷"], -["a041","잸잹잺잻잾쟂",5,"쟊쟋쟍쟏쟑",6,"쟙쟚쟛쟜"], -["a061","쟞",5,"쟥쟦쟧쟩쟪쟫쟭",13], -["a081","쟻",4,"젂젃젅젆젇젉젋",4,"젒젔젗",4,"젞젟젡젢젣젥",6,"젮젰젲",5,"젹젺젻젽젾젿졁",6,"졊졋졎",5,"졕",26,"졲졳졵졶졷졹졻",4,"좂좄좈좉좊좎",5,"좕",7,"좞좠좢좣좤"], -["a141","좥좦좧좩",18,"좾좿죀죁"], -["a161","죂죃죅죆죇죉죊죋죍",6,"죖죘죚",5,"죢죣죥"], -["a181","죦",14,"죶",5,"죾죿줁줂줃줇",4,"줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈",9,"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬"], -["a241","줐줒",5,"줙",18], -["a261","줭",6,"줵",18], -["a281","쥈",7,"쥒쥓쥕쥖쥗쥙",6,"쥢쥤",7,"쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"], -["a341","쥱쥲쥳쥵",6,"쥽",10,"즊즋즍즎즏"], -["a361","즑",6,"즚즜즞",16], -["a381","즯",16,"짂짃짅짆짉짋",4,"짒짔짗짘짛!",58,"₩]",32," ̄"], -["a441","짞짟짡짣짥짦짨짩짪짫짮짲",5,"짺짻짽짾짿쨁쨂쨃쨄"], -["a461","쨅쨆쨇쨊쨎",5,"쨕쨖쨗쨙",12], -["a481","쨦쨧쨨쨪",28,"ㄱ",93], -["a541","쩇",4,"쩎쩏쩑쩒쩓쩕",6,"쩞쩢",5,"쩩쩪"], -["a561","쩫",17,"쩾",5,"쪅쪆"], -["a581","쪇",16,"쪙",14,"ⅰ",9], -["a5b0","Ⅰ",9], -["a5c1","Α",16,"Σ",6], -["a5e1","α",16,"σ",6], -["a641","쪨",19,"쪾쪿쫁쫂쫃쫅"], -["a661","쫆",5,"쫎쫐쫒쫔쫕쫖쫗쫚",5,"쫡",6], -["a681","쫨쫩쫪쫫쫭",6,"쫵",18,"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃",7], -["a741","쬋",4,"쬑쬒쬓쬕쬖쬗쬙",6,"쬢",7], -["a761","쬪",22,"쭂쭃쭄"], -["a781","쭅쭆쭇쭊쭋쭍쭎쭏쭑",6,"쭚쭛쭜쭞",5,"쭥",7,"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙",9,"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰",9,"㎀",4,"㎺",5,"㎐",4,"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"], -["a841","쭭",10,"쭺",14], -["a861","쮉",18,"쮝",6], -["a881","쮤",19,"쮹",11,"ÆÐªĦ"], -["a8a6","IJ"], -["a8a8","ĿŁØŒºÞŦŊ"], -["a8b1","㉠",27,"ⓐ",25,"①",14,"½⅓⅔¼¾⅛⅜⅝⅞"], -["a941","쯅",14,"쯕",10], -["a961","쯠쯡쯢쯣쯥쯦쯨쯪",18], -["a981","쯽",14,"찎찏찑찒찓찕",6,"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀",27,"⒜",25,"⑴",14,"¹²³⁴ⁿ₁₂₃₄"], -["aa41","찥찦찪찫찭찯찱",6,"찺찿",4,"챆챇챉챊챋챍챎"], -["aa61","챏",4,"챖챚",5,"챡챢챣챥챧챩",6,"챱챲"], -["aa81","챳챴챶",29,"ぁ",82], -["ab41","첔첕첖첗첚첛첝첞첟첡",6,"첪첮",5,"첶첷첹"], -["ab61","첺첻첽",6,"쳆쳈쳊",5,"쳑쳒쳓쳕",5], -["ab81","쳛",8,"쳥",6,"쳭쳮쳯쳱",12,"ァ",85], -["ac41","쳾쳿촀촂",5,"촊촋촍촎촏촑",6,"촚촜촞촟촠"], -["ac61","촡촢촣촥촦촧촩촪촫촭",11,"촺",4], -["ac81","촿",28,"쵝쵞쵟А",5,"ЁЖ",25], -["acd1","а",5,"ёж",25], -["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"쵹",7], -["ad61","춁",6,"춉",10,"춖춗춙춚춛춝춞춟"], -["ad81","춠춡춢춣춦춨춪",5,"춱",18,"췅"], -["ae41","췆",5,"췍췎췏췑",16], -["ae61","췢",5,"췩췪췫췭췮췯췱",6,"췺췼췾",4], -["ae81","츃츅츆츇츉츊츋츍",6,"츕츖츗츘츚",5,"츢츣츥츦츧츩츪츫"], -["af41","츬츭츮츯츲츴츶",19], -["af61","칊",13,"칚칛칝칞칢",5,"칪칬"], -["af81","칮",5,"칶칷칹칺칻칽",6,"캆캈캊",5,"캒캓캕캖캗캙"], -["b041","캚",5,"캢캦",5,"캮",12], -["b061","캻",5,"컂",19], -["b081","컖",13,"컦컧컩컪컭",6,"컶컺",5,"가각간갇갈갉갊감",7,"같",4,"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"], -["b141","켂켃켅켆켇켉",6,"켒켔켖",5,"켝켞켟켡켢켣"], -["b161","켥",6,"켮켲",5,"켹",11], -["b181","콅",14,"콖콗콙콚콛콝",6,"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"], -["b241","콭콮콯콲콳콵콶콷콹",6,"쾁쾂쾃쾄쾆",5,"쾍"], -["b261","쾎",18,"쾢",5,"쾩"], -["b281","쾪",5,"쾱",18,"쿅",6,"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"], -["b341","쿌",19,"쿢쿣쿥쿦쿧쿩"], -["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿퀁퀂퀃퀅",5], -["b381","퀋",5,"퀒",5,"퀙",19,"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫",4,"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"], -["b441","퀮",5,"퀶퀷퀹퀺퀻퀽",6,"큆큈큊",5], -["b461","큑큒큓큕큖큗큙",6,"큡",10,"큮큯"], -["b481","큱큲큳큵",6,"큾큿킀킂",18,"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫",4,"닳담답닷",4,"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"], -["b541","킕",14,"킦킧킩킪킫킭",5], -["b561","킳킶킸킺",5,"탂탃탅탆탇탊",5,"탒탖",4], -["b581","탛탞탟탡탢탣탥",6,"탮탲",5,"탹",11,"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"], -["b641","턅",7,"턎",17], -["b661","턠",15,"턲턳턵턶턷턹턻턼턽턾"], -["b681","턿텂텆",5,"텎텏텑텒텓텕",6,"텞텠텢",5,"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"], -["b741","텮",13,"텽",6,"톅톆톇톉톊"], -["b761","톋",20,"톢톣톥톦톧"], -["b781","톩",6,"톲톴톶톷톸톹톻톽톾톿퇁",14,"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"], -["b841","퇐",7,"퇙",17], -["b861","퇫",8,"퇵퇶퇷퇹",13], -["b881","툈툊",5,"툑",24,"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많",4,"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"], -["b941","툪툫툮툯툱툲툳툵",6,"툾퉀퉂",5,"퉉퉊퉋퉌"], -["b961","퉍",14,"퉝",6,"퉥퉦퉧퉨"], -["b981","퉩",22,"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바",4,"받",4,"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"], -["ba41","튍튎튏튒튓튔튖",5,"튝튞튟튡튢튣튥",6,"튭"], -["ba61","튮튯튰튲",5,"튺튻튽튾틁틃",4,"틊틌",5], -["ba81","틒틓틕틖틗틙틚틛틝",6,"틦",9,"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"], -["bb41","틻",4,"팂팄팆",5,"팏팑팒팓팕팗",4,"팞팢팣"], -["bb61","팤팦팧팪팫팭팮팯팱",6,"팺팾",5,"퍆퍇퍈퍉"], -["bb81","퍊",31,"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"], -["bc41","퍪",17,"퍾퍿펁펂펃펅펆펇"], -["bc61","펈펉펊펋펎펒",5,"펚펛펝펞펟펡",6,"펪펬펮"], -["bc81","펯",4,"펵펶펷펹펺펻펽",6,"폆폇폊",5,"폑",5,"샥샨샬샴샵샷샹섀섄섈섐섕서",4,"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"], -["bd41","폗폙",7,"폢폤",7,"폮폯폱폲폳폵폶폷"], -["bd61","폸폹폺폻폾퐀퐂",5,"퐉",13], -["bd81","퐗",5,"퐞",25,"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"], -["be41","퐸",7,"푁푂푃푅",14], -["be61","푔",7,"푝푞푟푡푢푣푥",7,"푮푰푱푲"], -["be81","푳",4,"푺푻푽푾풁풃",4,"풊풌풎",5,"풕",8,"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄",6,"엌엎"], -["bf41","풞",10,"풪",14], -["bf61","풹",18,"퓍퓎퓏퓑퓒퓓퓕"], -["bf81","퓖",5,"퓝퓞퓠",7,"퓩퓪퓫퓭퓮퓯퓱",6,"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염",5,"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"], -["c041","퓾",5,"픅픆픇픉픊픋픍",6,"픖픘",5], -["c061","픞",25], -["c081","픸픹픺픻픾픿핁핂핃핅",6,"핎핐핒",5,"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응",7,"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"], -["c141","핤핦핧핪핬핮",5,"핶핷핹핺핻핽",6,"햆햊햋"], -["c161","햌햍햎햏햑",19,"햦햧"], -["c181","햨",31,"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"], -["c241","헊헋헍헎헏헑헓",4,"헚헜헞",5,"헦헧헩헪헫헭헮"], -["c261","헯",4,"헶헸헺",5,"혂혃혅혆혇혉",6,"혒"], -["c281","혖",5,"혝혞혟혡혢혣혥",7,"혮",9,"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"], -["c341","혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝",4], -["c361","홢",4,"홨홪",5,"홲홳홵",11], -["c381","횁횂횄횆",5,"횎횏횑횒횓횕",7,"횞횠횢",5,"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"], -["c441","횫횭횮횯횱",7,"횺횼",7,"훆훇훉훊훋"], -["c461","훍훎훏훐훒훓훕훖훘훚",5,"훡훢훣훥훦훧훩",4], -["c481","훮훯훱훲훳훴훶",5,"훾훿휁휂휃휅",11,"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"], -["c541","휕휖휗휚휛휝휞휟휡",6,"휪휬휮",5,"휶휷휹"], -["c561","휺휻휽",6,"흅흆흈흊",5,"흒흓흕흚",4], -["c581","흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵",6,"흾흿힀힂",5,"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"], -["c641","힍힎힏힑",6,"힚힜힞",5], -["c6a1","퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"], -["c7a1","퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"], -["c8a1","혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"], -["caa1","伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"], -["cba1","匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"], -["cca1","瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"], -["cda1","棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"], -["cea1","科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"], -["cfa1","區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"], -["d0a1","鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"], -["d1a1","朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩",5,"那樂",4,"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"], -["d2a1","納臘蠟衲囊娘廊",4,"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧",5,"駑魯",10,"濃籠聾膿農惱牢磊腦賂雷尿壘",7,"嫩訥杻紐勒",5,"能菱陵尼泥匿溺多茶"], -["d3a1","丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"], -["d4a1","棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"], -["d5a1","蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"], -["d6a1","煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"], -["d7a1","遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"], -["d8a1","立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"], -["d9a1","蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"], -["daa1","汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"], -["dba1","發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"], -["dca1","碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"], -["dda1","孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"], -["dea1","脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"], -["dfa1","傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"], -["e0a1","胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"], -["e1a1","聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"], -["e2a1","戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"], -["e3a1","嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"], -["e4a1","沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"], -["e5a1","櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"], -["e6a1","旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"], -["e7a1","簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"], -["e8a1","烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"], -["e9a1","窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"], -["eaa1","運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"], -["eba1","濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"], -["eca1","議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"], -["eda1","立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"], -["eea1","障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"], -["efa1","煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"], -["f0a1","靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"], -["f1a1","踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"], -["f2a1","咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"], -["f3a1","鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"], -["f4a1","責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"], -["f5a1","椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"], -["f6a1","贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"], -["f7a1","鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"], -["f8a1","阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"], -["f9a1","品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"], -["faa1","行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"], -["fba1","形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"], -["fca1","禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"], -["fda1","爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"] -] diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp950.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp950.json deleted file mode 100644 index d8bc8717..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/cp950.json +++ /dev/null @@ -1,177 +0,0 @@ -[ -["0","\u0000",127], -["a140"," ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"], -["a1a1","﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢",4,"~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/"], -["a240","\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁",7,"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"], -["a2a1","╮╰╯═╞╪╡◢◣◥◤╱╲╳0",9,"Ⅰ",9,"〡",8,"十卄卅A",25,"a",21], -["a340","wxyzΑ",16,"Σ",6,"α",16,"σ",6,"ㄅ",10], -["a3a1","ㄐ",25,"˙ˉˊˇˋ"], -["a3e1","€"], -["a440","一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"], -["a4a1","丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"], -["a540","世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"], -["a5a1","央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"], -["a640","共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"], -["a6a1","式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"], -["a740","作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"], -["a7a1","均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"], -["a840","杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"], -["a8a1","芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"], -["a940","咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"], -["a9a1","屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"], -["aa40","昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"], -["aaa1","炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"], -["ab40","陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"], -["aba1","哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"], -["ac40","拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"], -["aca1","活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"], -["ad40","耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"], -["ada1","迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"], -["ae40","哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"], -["aea1","恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"], -["af40","浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"], -["afa1","砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"], -["b040","虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"], -["b0a1","陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"], -["b140","娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"], -["b1a1","情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"], -["b240","毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"], -["b2a1","瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"], -["b340","莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"], -["b3a1","部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"], -["b440","婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"], -["b4a1","插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"], -["b540","溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"], -["b5a1","窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"], -["b640","詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"], -["b6a1","間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"], -["b740","媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"], -["b7a1","楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"], -["b840","睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"], -["b8a1","腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"], -["b940","辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"], -["b9a1","飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"], -["ba40","愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"], -["baa1","滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"], -["bb40","罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"], -["bba1","說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"], -["bc40","劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"], -["bca1","慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"], -["bd40","瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"], -["bda1","翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"], -["be40","輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"], -["bea1","鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"], -["bf40","濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"], -["bfa1","縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"], -["c040","錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"], -["c0a1","嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"], -["c140","瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"], -["c1a1","薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"], -["c240","駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"], -["c2a1","癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"], -["c340","鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"], -["c3a1","獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"], -["c440","願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"], -["c4a1","纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"], -["c540","護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"], -["c5a1","禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"], -["c640","讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"], -["c940","乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"], -["c9a1","氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"], -["ca40","汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"], -["caa1","吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"], -["cb40","杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"], -["cba1","芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"], -["cc40","坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"], -["cca1","怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"], -["cd40","泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"], -["cda1","矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"], -["ce40","哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"], -["cea1","峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"], -["cf40","柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"], -["cfa1","洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"], -["d040","穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"], -["d0a1","苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"], -["d140","唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"], -["d1a1","恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"], -["d240","毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"], -["d2a1","牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"], -["d340","笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"], -["d3a1","荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"], -["d440","酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"], -["d4a1","唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"], -["d540","崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"], -["d5a1","捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"], -["d640","淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"], -["d6a1","痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"], -["d740","耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"], -["d7a1","蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"], -["d840","釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"], -["d8a1","堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"], -["d940","惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"], -["d9a1","晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"], -["da40","湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"], -["daa1","琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"], -["db40","罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"], -["dba1","菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"], -["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"], -["dca1","隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"], -["dd40","媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"], -["dda1","搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"], -["de40","毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"], -["dea1","煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"], -["df40","稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"], -["dfa1","腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"], -["e040","觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"], -["e0a1","遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"], -["e140","凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"], -["e1a1","寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"], -["e240","榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"], -["e2a1","漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"], -["e340","禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"], -["e3a1","耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"], -["e440","裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"], -["e4a1","銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"], -["e540","噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"], -["e5a1","憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"], -["e640","澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"], -["e6a1","獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"], -["e740","膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"], -["e7a1","蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"], -["e840","踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"], -["e8a1","銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"], -["e940","噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"], -["e9a1","憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"], -["ea40","澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"], -["eaa1","瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"], -["eb40","蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"], -["eba1","諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"], -["ec40","錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"], -["eca1","魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"], -["ed40","檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"], -["eda1","瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"], -["ee40","蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"], -["eea1","謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"], -["ef40","鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"], -["efa1","鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"], -["f040","璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"], -["f0a1","臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"], -["f140","蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"], -["f1a1","鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"], -["f240","徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"], -["f2a1","礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"], -["f340","譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"], -["f3a1","鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"], -["f440","嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"], -["f4a1","禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"], -["f540","鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"], -["f5a1","鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"], -["f640","蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"], -["f6a1","騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"], -["f740","糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"], -["f7a1","驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"], -["f840","讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"], -["f8a1","齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"], -["f940","纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"], -["f9a1","龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"] -] diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/eucjp.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/eucjp.json deleted file mode 100644 index 4fa61ca1..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/eucjp.json +++ /dev/null @@ -1,182 +0,0 @@ -[ -["0","\u0000",127], -["8ea1","。",62], -["a1a1"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇"], -["a2a1","◆□■△▲▽▼※〒→←↑↓〓"], -["a2ba","∈∋⊆⊇⊂⊃∪∩"], -["a2ca","∧∨¬⇒⇔∀∃"], -["a2dc","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"], -["a2f2","ʼn♯♭♪†‡¶"], -["a2fe","◯"], -["a3b0","0",9], -["a3c1","A",25], -["a3e1","a",25], -["a4a1","ぁ",82], -["a5a1","ァ",85], -["a6a1","Α",16,"Σ",6], -["a6c1","α",16,"σ",6], -["a7a1","А",5,"ЁЖ",25], -["a7d1","а",5,"ёж",25], -["a8a1","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"], -["ada1","①",19,"Ⅰ",9], -["adc0","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"], -["addf","㍻〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"], -["b0a1","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"], -["b1a1","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"], -["b2a1","押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"], -["b3a1","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"], -["b4a1","粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"], -["b5a1","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"], -["b6a1","供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"], -["b7a1","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"], -["b8a1","検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"], -["b9a1","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"], -["baa1","此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"], -["bba1","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"], -["bca1","次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"], -["bda1","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"], -["bea1","勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"], -["bfa1","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"], -["c0a1","澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"], -["c1a1","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"], -["c2a1","臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"], -["c3a1","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"], -["c4a1","帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"], -["c5a1","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"], -["c6a1","董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"], -["c7a1","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"], -["c8a1","函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"], -["c9a1","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"], -["caa1","福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"], -["cba1","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"], -["cca1","漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"], -["cda1","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"], -["cea1","痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"], -["cfa1","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"], -["d0a1","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"], -["d1a1","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"], -["d2a1","辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"], -["d3a1","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"], -["d4a1","圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"], -["d5a1","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"], -["d6a1","屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"], -["d7a1","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"], -["d8a1","悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"], -["d9a1","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"], -["daa1","據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"], -["dba1","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"], -["dca1","棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"], -["dda1","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"], -["dea1","沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"], -["dfa1","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"], -["e0a1","燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"], -["e1a1","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"], -["e2a1","癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"], -["e3a1","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"], -["e4a1","筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"], -["e5a1","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"], -["e6a1","罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"], -["e7a1","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"], -["e8a1","茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"], -["e9a1","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"], -["eaa1","蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"], -["eba1","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"], -["eca1","譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"], -["eda1","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"], -["eea1","遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"], -["efa1","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"], -["f0a1","陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"], -["f1a1","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"], -["f2a1","髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"], -["f3a1","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"], -["f4a1","堯槇遙瑤凜熙"], -["f9a1","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"], -["faa1","忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"], -["fba1","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"], -["fca1","釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"], -["fcf1","ⅰ",9,"¬¦'""], -["8fa2af","˘ˇ¸˙˝¯˛˚~΄΅"], -["8fa2c2","¡¦¿"], -["8fa2eb","ºª©®™¤№"], -["8fa6e1","ΆΈΉΊΪ"], -["8fa6e7","Ό"], -["8fa6e9","ΎΫ"], -["8fa6ec","Ώ"], -["8fa6f1","άέήίϊΐόςύϋΰώ"], -["8fa7c2","Ђ",10,"ЎЏ"], -["8fa7f2","ђ",10,"ўџ"], -["8fa9a1","ÆĐ"], -["8fa9a4","Ħ"], -["8fa9a6","IJ"], -["8fa9a8","ŁĿ"], -["8fa9ab","ŊØŒ"], -["8fa9af","ŦÞ"], -["8fa9c1","æđðħıijĸłŀʼnŋøœßŧþ"], -["8faaa1","ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"], -["8faaba","ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"], -["8faba1","áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"], -["8fabbd","ġĥíìïîǐ"], -["8fabc5","īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"], -["8fb0a1","丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"], -["8fb1a1","侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"], -["8fb2a1","傒傓傔傖傛傜傞",4,"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"], -["8fb3a1","凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"], -["8fb4a1","匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"], -["8fb5a1","咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"], -["8fb6a1","嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍",5,"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤",4,"囱囫园"], -["8fb7a1","囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭",4,"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"], -["8fb8a1","堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"], -["8fb9a1","奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"], -["8fbaa1","嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖",4,"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"], -["8fbba1","屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"], -["8fbca1","巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪",4,"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"], -["8fbda1","彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐",4,"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"], -["8fbea1","悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐",4,"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"], -["8fbfa1","懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"], -["8fc0a1","捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"], -["8fc1a1","擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"], -["8fc2a1","昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"], -["8fc3a1","杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮",4,"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"], -["8fc4a1","棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"], -["8fc5a1","樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"], -["8fc6a1","歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"], -["8fc7a1","泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"], -["8fc8a1","湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"], -["8fc9a1","濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔",4,"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",4,"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"], -["8fcaa1","煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"], -["8fcba1","狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"], -["8fcca1","珿琀琁琄琇琊琑琚琛琤琦琨",9,"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"], -["8fcda1","甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹",5,"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"], -["8fcea1","瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢",6,"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"], -["8fcfa1","睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"], -["8fd0a1","碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"], -["8fd1a1","秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"], -["8fd2a1","笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙",5], -["8fd3a1","籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"], -["8fd4a1","綞綦綧綪綳綶綷綹緂",4,"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"], -["8fd5a1","罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"], -["8fd6a1","胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"], -["8fd7a1","艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"], -["8fd8a1","荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"], -["8fd9a1","蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏",4,"蕖蕙蕜",6,"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"], -["8fdaa1","藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠",4,"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"], -["8fdba1","蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃",6,"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"], -["8fdca1","蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",4,"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"], -["8fdda1","襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔",4,"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"], -["8fdea1","誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂",4,"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"], -["8fdfa1","貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"], -["8fe0a1","踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"], -["8fe1a1","轃轇轏轑",4,"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"], -["8fe2a1","郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"], -["8fe3a1","釂釃釅釓釔釗釙釚釞釤釥釩釪釬",5,"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵",4,"鉻鉼鉽鉿銈銉銊銍銎銒銗"], -["8fe4a1","銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",4,"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"], -["8fe5a1","鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉",4,"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"], -["8fe6a1","镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"], -["8fe7a1","霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"], -["8fe8a1","頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",4,"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"], -["8fe9a1","馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",4], -["8feaa1","鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",4,"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"], -["8feba1","鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦",4,"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"], -["8feca1","鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"], -["8feda1","黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃",4,"齓齕齖齗齘齚齝齞齨齩齭",4,"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"] -] diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json deleted file mode 100644 index 85c69347..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +++ /dev/null @@ -1 +0,0 @@ -{"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]} \ No newline at end of file diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/gbk-added.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/gbk-added.json deleted file mode 100644 index 8abfa9f7..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/gbk-added.json +++ /dev/null @@ -1,55 +0,0 @@ -[ -["a140","",62], -["a180","",32], -["a240","",62], -["a280","",32], -["a2ab","",5], -["a2e3","€"], -["a2ef",""], -["a2fd",""], -["a340","",62], -["a380","",31," "], -["a440","",62], -["a480","",32], -["a4f4","",10], -["a540","",62], -["a580","",32], -["a5f7","",7], -["a640","",62], -["a680","",32], -["a6b9","",7], -["a6d9","",6], -["a6ec",""], -["a6f3",""], -["a6f6","",8], -["a740","",62], -["a780","",32], -["a7c2","",14], -["a7f2","",12], -["a896","",10], -["a8bc",""], -["a8bf","ǹ"], -["a8c1",""], -["a8ea","",20], -["a958",""], -["a95b",""], -["a95d",""], -["a989","〾⿰",11], -["a997","",12], -["a9f0","",14], -["aaa1","",93], -["aba1","",93], -["aca1","",93], -["ada1","",93], -["aea1","",93], -["afa1","",93], -["d7fa","",4], -["f8a1","",93], -["f9a1","",93], -["faa1","",93], -["fba1","",93], -["fca1","",93], -["fda1","",93], -["fe50","⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"], -["fe80","䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93] -] diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/tables/shiftjis.json b/truebit-implementation/node_modules/iconv-lite/encodings/tables/shiftjis.json deleted file mode 100644 index 5a3a43cf..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/tables/shiftjis.json +++ /dev/null @@ -1,125 +0,0 @@ -[ -["0","\u0000",128], -["a1","。",62], -["8140"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×"], -["8180","÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"], -["81b8","∈∋⊆⊇⊂⊃∪∩"], -["81c8","∧∨¬⇒⇔∀∃"], -["81da","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"], -["81f0","ʼn♯♭♪†‡¶"], -["81fc","◯"], -["824f","0",9], -["8260","A",25], -["8281","a",25], -["829f","ぁ",82], -["8340","ァ",62], -["8380","ム",22], -["839f","Α",16,"Σ",6], -["83bf","α",16,"σ",6], -["8440","А",5,"ЁЖ",25], -["8470","а",5,"ёж",7], -["8480","о",17], -["849f","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"], -["8740","①",19,"Ⅰ",9], -["875f","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"], -["877e","㍻"], -["8780","〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"], -["889f","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"], -["8940","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"], -["8980","園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"], -["8a40","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"], -["8a80","橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"], -["8b40","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"], -["8b80","朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"], -["8c40","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"], -["8c80","劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"], -["8d40","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"], -["8d80","項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"], -["8e40","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"], -["8e80","死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"], -["8f40","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"], -["8f80","準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"], -["9040","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"], -["9080","逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"], -["9140","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"], -["9180","操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"], -["9240","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"], -["9280","逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"], -["9340","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"], -["9380","凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"], -["9440","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"], -["9480","楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"], -["9540","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"], -["9580","斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"], -["9640","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"], -["9680","摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"], -["9740","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"], -["9780","沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"], -["9840","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"], -["989f","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"], -["9940","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"], -["9980","凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"], -["9a40","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"], -["9a80","噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"], -["9b40","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"], -["9b80","它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"], -["9c40","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"], -["9c80","怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"], -["9d40","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"], -["9d80","捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"], -["9e40","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"], -["9e80","梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"], -["9f40","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"], -["9f80","麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"], -["e040","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"], -["e080","烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"], -["e140","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"], -["e180","痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"], -["e240","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"], -["e280","窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"], -["e340","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"], -["e380","縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"], -["e440","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"], -["e480","艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"], -["e540","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"], -["e580","蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"], -["e640","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"], -["e680","諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"], -["e740","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"], -["e780","轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"], -["e840","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"], -["e880","閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"], -["e940","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"], -["e980","騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"], -["ea40","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"], -["ea80","黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"], -["ed40","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"], -["ed80","塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"], -["ee40","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"], -["ee80","蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"], -["eeef","ⅰ",9,"¬¦'""], -["f040","",62], -["f080","",124], -["f140","",62], -["f180","",124], -["f240","",62], -["f280","",124], -["f340","",62], -["f380","",124], -["f440","",62], -["f480","",124], -["f540","",62], -["f580","",124], -["f640","",62], -["f680","",124], -["f740","",62], -["f780","",124], -["f840","",62], -["f880","",124], -["f940",""], -["fa40","ⅰ",9,"Ⅰ",9,"¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"], -["fa80","兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"], -["fb40","涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"], -["fb80","祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"], -["fc40","髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"] -] diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/utf16.js b/truebit-implementation/node_modules/iconv-lite/encodings/utf16.js deleted file mode 100644 index 54765aee..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/utf16.js +++ /dev/null @@ -1,177 +0,0 @@ -"use strict"; -var Buffer = require("safer-buffer").Buffer; - -// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js - -// == UTF16-BE codec. ========================================================== - -exports.utf16be = Utf16BECodec; -function Utf16BECodec() { -} - -Utf16BECodec.prototype.encoder = Utf16BEEncoder; -Utf16BECodec.prototype.decoder = Utf16BEDecoder; -Utf16BECodec.prototype.bomAware = true; - - -// -- Encoding - -function Utf16BEEncoder() { -} - -Utf16BEEncoder.prototype.write = function(str) { - var buf = Buffer.from(str, 'ucs2'); - for (var i = 0; i < buf.length; i += 2) { - var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; - } - return buf; -} - -Utf16BEEncoder.prototype.end = function() { -} - - -// -- Decoding - -function Utf16BEDecoder() { - this.overflowByte = -1; -} - -Utf16BEDecoder.prototype.write = function(buf) { - if (buf.length == 0) - return ''; - - var buf2 = Buffer.alloc(buf.length + 1), - i = 0, j = 0; - - if (this.overflowByte !== -1) { - buf2[0] = buf[0]; - buf2[1] = this.overflowByte; - i = 1; j = 2; - } - - for (; i < buf.length-1; i += 2, j+= 2) { - buf2[j] = buf[i+1]; - buf2[j+1] = buf[i]; - } - - this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; - - return buf2.slice(0, j).toString('ucs2'); -} - -Utf16BEDecoder.prototype.end = function() { -} - - -// == UTF-16 codec ============================================================= -// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. -// Defaults to UTF-16LE, as it's prevalent and default in Node. -// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le -// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'}); - -// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false). - -exports.utf16 = Utf16Codec; -function Utf16Codec(codecOptions, iconv) { - this.iconv = iconv; -} - -Utf16Codec.prototype.encoder = Utf16Encoder; -Utf16Codec.prototype.decoder = Utf16Decoder; - - -// -- Encoding (pass-through) - -function Utf16Encoder(options, codec) { - options = options || {}; - if (options.addBOM === undefined) - options.addBOM = true; - this.encoder = codec.iconv.getEncoder('utf-16le', options); -} - -Utf16Encoder.prototype.write = function(str) { - return this.encoder.write(str); -} - -Utf16Encoder.prototype.end = function() { - return this.encoder.end(); -} - - -// -- Decoding - -function Utf16Decoder(options, codec) { - this.decoder = null; - this.initialBytes = []; - this.initialBytesLen = 0; - - this.options = options || {}; - this.iconv = codec.iconv; -} - -Utf16Decoder.prototype.write = function(buf) { - if (!this.decoder) { - // Codec is not chosen yet. Accumulate initial bytes. - this.initialBytes.push(buf); - this.initialBytesLen += buf.length; - - if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below) - return ''; - - // We have enough bytes -> detect endianness. - var buf = Buffer.concat(this.initialBytes), - encoding = detectEncoding(buf, this.options.defaultEncoding); - this.decoder = this.iconv.getDecoder(encoding, this.options); - this.initialBytes.length = this.initialBytesLen = 0; - } - - return this.decoder.write(buf); -} - -Utf16Decoder.prototype.end = function() { - if (!this.decoder) { - var buf = Buffer.concat(this.initialBytes), - encoding = detectEncoding(buf, this.options.defaultEncoding); - this.decoder = this.iconv.getDecoder(encoding, this.options); - - var res = this.decoder.write(buf), - trail = this.decoder.end(); - - return trail ? (res + trail) : res; - } - return this.decoder.end(); -} - -function detectEncoding(buf, defaultEncoding) { - var enc = defaultEncoding || 'utf-16le'; - - if (buf.length >= 2) { - // Check BOM. - if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM - enc = 'utf-16be'; - else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM - enc = 'utf-16le'; - else { - // No BOM found. Try to deduce encoding from initial content. - // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon. - // So, we count ASCII as if it was LE or BE, and decide from that. - var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions - _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even. - - for (var i = 0; i < _len; i += 2) { - if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++; - if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++; - } - - if (asciiCharsBE > asciiCharsLE) - enc = 'utf-16be'; - else if (asciiCharsBE < asciiCharsLE) - enc = 'utf-16le'; - } - } - - return enc; -} - - diff --git a/truebit-implementation/node_modules/iconv-lite/encodings/utf7.js b/truebit-implementation/node_modules/iconv-lite/encodings/utf7.js deleted file mode 100644 index b7631c23..00000000 --- a/truebit-implementation/node_modules/iconv-lite/encodings/utf7.js +++ /dev/null @@ -1,290 +0,0 @@ -"use strict"; -var Buffer = require("safer-buffer").Buffer; - -// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152 -// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3 - -exports.utf7 = Utf7Codec; -exports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7 -function Utf7Codec(codecOptions, iconv) { - this.iconv = iconv; -}; - -Utf7Codec.prototype.encoder = Utf7Encoder; -Utf7Codec.prototype.decoder = Utf7Decoder; -Utf7Codec.prototype.bomAware = true; - - -// -- Encoding - -var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; - -function Utf7Encoder(options, codec) { - this.iconv = codec.iconv; -} - -Utf7Encoder.prototype.write = function(str) { - // Naive implementation. - // Non-direct chars are encoded as "+-"; single "+" char is encoded as "+-". - return Buffer.from(str.replace(nonDirectChars, function(chunk) { - return "+" + (chunk === '+' ? '' : - this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) - + "-"; - }.bind(this))); -} - -Utf7Encoder.prototype.end = function() { -} - - -// -- Decoding - -function Utf7Decoder(options, codec) { - this.iconv = codec.iconv; - this.inBase64 = false; - this.base64Accum = ''; -} - -var base64Regex = /[A-Za-z0-9\/+]/; -var base64Chars = []; -for (var i = 0; i < 256; i++) - base64Chars[i] = base64Regex.test(String.fromCharCode(i)); - -var plusChar = '+'.charCodeAt(0), - minusChar = '-'.charCodeAt(0), - andChar = '&'.charCodeAt(0); - -Utf7Decoder.prototype.write = function(buf) { - var res = "", lastI = 0, - inBase64 = this.inBase64, - base64Accum = this.base64Accum; - - // The decoder is more involved as we must handle chunks in stream. - - for (var i = 0; i < buf.length; i++) { - if (!inBase64) { // We're in direct mode. - // Write direct chars until '+' - if (buf[i] == plusChar) { - res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. - lastI = i+1; - inBase64 = true; - } - } else { // We decode base64. - if (!base64Chars[buf[i]]) { // Base64 ended. - if (i == lastI && buf[i] == minusChar) {// "+-" -> "+" - res += "+"; - } else { - var b64str = base64Accum + buf.slice(lastI, i).toString(); - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - if (buf[i] != minusChar) // Minus is absorbed after base64. - i--; - - lastI = i+1; - inBase64 = false; - base64Accum = ''; - } - } - } - - if (!inBase64) { - res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. - } else { - var b64str = base64Accum + buf.slice(lastI).toString(); - - var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. - base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. - b64str = b64str.slice(0, canBeDecoded); - - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - this.inBase64 = inBase64; - this.base64Accum = base64Accum; - - return res; -} - -Utf7Decoder.prototype.end = function() { - var res = ""; - if (this.inBase64 && this.base64Accum.length > 0) - res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); - - this.inBase64 = false; - this.base64Accum = ''; - return res; -} - - -// UTF-7-IMAP codec. -// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3) -// Differences: -// * Base64 part is started by "&" instead of "+" -// * Direct characters are 0x20-0x7E, except "&" (0x26) -// * In Base64, "," is used instead of "/" -// * Base64 must not be used to represent direct characters. -// * No implicit shift back from Base64 (should always end with '-') -// * String must end in non-shifted position. -// * "-&" while in base64 is not allowed. - - -exports.utf7imap = Utf7IMAPCodec; -function Utf7IMAPCodec(codecOptions, iconv) { - this.iconv = iconv; -}; - -Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; -Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; -Utf7IMAPCodec.prototype.bomAware = true; - - -// -- Encoding - -function Utf7IMAPEncoder(options, codec) { - this.iconv = codec.iconv; - this.inBase64 = false; - this.base64Accum = Buffer.alloc(6); - this.base64AccumIdx = 0; -} - -Utf7IMAPEncoder.prototype.write = function(str) { - var inBase64 = this.inBase64, - base64Accum = this.base64Accum, - base64AccumIdx = this.base64AccumIdx, - buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0; - - for (var i = 0; i < str.length; i++) { - var uChar = str.charCodeAt(i); - if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'. - if (inBase64) { - if (base64AccumIdx > 0) { - bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); - base64AccumIdx = 0; - } - - buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. - inBase64 = false; - } - - if (!inBase64) { - buf[bufIdx++] = uChar; // Write direct character - - if (uChar === andChar) // Ampersand -> '&-' - buf[bufIdx++] = minusChar; - } - - } else { // Non-direct character - if (!inBase64) { - buf[bufIdx++] = andChar; // Write '&', then go to base64 mode. - inBase64 = true; - } - if (inBase64) { - base64Accum[base64AccumIdx++] = uChar >> 8; - base64Accum[base64AccumIdx++] = uChar & 0xFF; - - if (base64AccumIdx == base64Accum.length) { - bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx); - base64AccumIdx = 0; - } - } - } - } - - this.inBase64 = inBase64; - this.base64AccumIdx = base64AccumIdx; - - return buf.slice(0, bufIdx); -} - -Utf7IMAPEncoder.prototype.end = function() { - var buf = Buffer.alloc(10), bufIdx = 0; - if (this.inBase64) { - if (this.base64AccumIdx > 0) { - bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); - this.base64AccumIdx = 0; - } - - buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. - this.inBase64 = false; - } - - return buf.slice(0, bufIdx); -} - - -// -- Decoding - -function Utf7IMAPDecoder(options, codec) { - this.iconv = codec.iconv; - this.inBase64 = false; - this.base64Accum = ''; -} - -var base64IMAPChars = base64Chars.slice(); -base64IMAPChars[','.charCodeAt(0)] = true; - -Utf7IMAPDecoder.prototype.write = function(buf) { - var res = "", lastI = 0, - inBase64 = this.inBase64, - base64Accum = this.base64Accum; - - // The decoder is more involved as we must handle chunks in stream. - // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end). - - for (var i = 0; i < buf.length; i++) { - if (!inBase64) { // We're in direct mode. - // Write direct chars until '&' - if (buf[i] == andChar) { - res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. - lastI = i+1; - inBase64 = true; - } - } else { // We decode base64. - if (!base64IMAPChars[buf[i]]) { // Base64 ended. - if (i == lastI && buf[i] == minusChar) { // "&-" -> "&" - res += "&"; - } else { - var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/'); - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - if (buf[i] != minusChar) // Minus may be absorbed after base64. - i--; - - lastI = i+1; - inBase64 = false; - base64Accum = ''; - } - } - } - - if (!inBase64) { - res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. - } else { - var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/'); - - var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. - base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. - b64str = b64str.slice(0, canBeDecoded); - - res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); - } - - this.inBase64 = inBase64; - this.base64Accum = base64Accum; - - return res; -} - -Utf7IMAPDecoder.prototype.end = function() { - var res = ""; - if (this.inBase64 && this.base64Accum.length > 0) - res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); - - this.inBase64 = false; - this.base64Accum = ''; - return res; -} - - diff --git a/truebit-implementation/node_modules/iconv-lite/lib/bom-handling.js b/truebit-implementation/node_modules/iconv-lite/lib/bom-handling.js deleted file mode 100644 index 10508723..00000000 --- a/truebit-implementation/node_modules/iconv-lite/lib/bom-handling.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; - -var BOMChar = '\uFEFF'; - -exports.PrependBOM = PrependBOMWrapper -function PrependBOMWrapper(encoder, options) { - this.encoder = encoder; - this.addBOM = true; -} - -PrependBOMWrapper.prototype.write = function(str) { - if (this.addBOM) { - str = BOMChar + str; - this.addBOM = false; - } - - return this.encoder.write(str); -} - -PrependBOMWrapper.prototype.end = function() { - return this.encoder.end(); -} - - -//------------------------------------------------------------------------------ - -exports.StripBOM = StripBOMWrapper; -function StripBOMWrapper(decoder, options) { - this.decoder = decoder; - this.pass = false; - this.options = options || {}; -} - -StripBOMWrapper.prototype.write = function(buf) { - var res = this.decoder.write(buf); - if (this.pass || !res) - return res; - - if (res[0] === BOMChar) { - res = res.slice(1); - if (typeof this.options.stripBOM === 'function') - this.options.stripBOM(); - } - - this.pass = true; - return res; -} - -StripBOMWrapper.prototype.end = function() { - return this.decoder.end(); -} - diff --git a/truebit-implementation/node_modules/iconv-lite/lib/extend-node.js b/truebit-implementation/node_modules/iconv-lite/lib/extend-node.js deleted file mode 100644 index 87f5394a..00000000 --- a/truebit-implementation/node_modules/iconv-lite/lib/extend-node.js +++ /dev/null @@ -1,217 +0,0 @@ -"use strict"; -var Buffer = require("buffer").Buffer; -// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer - -// == Extend Node primitives to use iconv-lite ================================= - -module.exports = function (iconv) { - var original = undefined; // Place to keep original methods. - - // Node authors rewrote Buffer internals to make it compatible with - // Uint8Array and we cannot patch key functions since then. - // Note: this does use older Buffer API on a purpose - iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array); - - iconv.extendNodeEncodings = function extendNodeEncodings() { - if (original) return; - original = {}; - - if (!iconv.supportsNodeEncodingsExtension) { - console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node"); - console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility"); - return; - } - - var nodeNativeEncodings = { - 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, - 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true, - }; - - Buffer.isNativeEncoding = function(enc) { - return enc && nodeNativeEncodings[enc.toLowerCase()]; - } - - // -- SlowBuffer ----------------------------------------------------------- - var SlowBuffer = require('buffer').SlowBuffer; - - original.SlowBufferToString = SlowBuffer.prototype.toString; - SlowBuffer.prototype.toString = function(encoding, start, end) { - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.SlowBufferToString.call(this, encoding, start, end); - - // Otherwise, use our decoding method. - if (typeof start == 'undefined') start = 0; - if (typeof end == 'undefined') end = this.length; - return iconv.decode(this.slice(start, end), encoding); - } - - original.SlowBufferWrite = SlowBuffer.prototype.write; - SlowBuffer.prototype.write = function(string, offset, length, encoding) { - // Support both (string, offset, length, encoding) - // and the legacy (string, encoding, offset, length) - if (isFinite(offset)) { - if (!isFinite(length)) { - encoding = length; - length = undefined; - } - } else { // legacy - var swap = encoding; - encoding = offset; - offset = length; - length = swap; - } - - offset = +offset || 0; - var remaining = this.length - offset; - if (!length) { - length = remaining; - } else { - length = +length; - if (length > remaining) { - length = remaining; - } - } - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.SlowBufferWrite.call(this, string, offset, length, encoding); - - if (string.length > 0 && (length < 0 || offset < 0)) - throw new RangeError('attempt to write beyond buffer bounds'); - - // Otherwise, use our encoding method. - var buf = iconv.encode(string, encoding); - if (buf.length < length) length = buf.length; - buf.copy(this, offset, 0, length); - return length; - } - - // -- Buffer --------------------------------------------------------------- - - original.BufferIsEncoding = Buffer.isEncoding; - Buffer.isEncoding = function(encoding) { - return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding); - } - - original.BufferByteLength = Buffer.byteLength; - Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) { - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.BufferByteLength.call(this, str, encoding); - - // Slow, I know, but we don't have a better way yet. - return iconv.encode(str, encoding).length; - } - - original.BufferToString = Buffer.prototype.toString; - Buffer.prototype.toString = function(encoding, start, end) { - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.BufferToString.call(this, encoding, start, end); - - // Otherwise, use our decoding method. - if (typeof start == 'undefined') start = 0; - if (typeof end == 'undefined') end = this.length; - return iconv.decode(this.slice(start, end), encoding); - } - - original.BufferWrite = Buffer.prototype.write; - Buffer.prototype.write = function(string, offset, length, encoding) { - var _offset = offset, _length = length, _encoding = encoding; - // Support both (string, offset, length, encoding) - // and the legacy (string, encoding, offset, length) - if (isFinite(offset)) { - if (!isFinite(length)) { - encoding = length; - length = undefined; - } - } else { // legacy - var swap = encoding; - encoding = offset; - offset = length; - length = swap; - } - - encoding = String(encoding || 'utf8').toLowerCase(); - - // Use native conversion when possible - if (Buffer.isNativeEncoding(encoding)) - return original.BufferWrite.call(this, string, _offset, _length, _encoding); - - offset = +offset || 0; - var remaining = this.length - offset; - if (!length) { - length = remaining; - } else { - length = +length; - if (length > remaining) { - length = remaining; - } - } - - if (string.length > 0 && (length < 0 || offset < 0)) - throw new RangeError('attempt to write beyond buffer bounds'); - - // Otherwise, use our encoding method. - var buf = iconv.encode(string, encoding); - if (buf.length < length) length = buf.length; - buf.copy(this, offset, 0, length); - return length; - - // TODO: Set _charsWritten. - } - - - // -- Readable ------------------------------------------------------------- - if (iconv.supportsStreams) { - var Readable = require('stream').Readable; - - original.ReadableSetEncoding = Readable.prototype.setEncoding; - Readable.prototype.setEncoding = function setEncoding(enc, options) { - // Use our own decoder, it has the same interface. - // We cannot use original function as it doesn't handle BOM-s. - this._readableState.decoder = iconv.getDecoder(enc, options); - this._readableState.encoding = enc; - } - - Readable.prototype.collect = iconv._collect; - } - } - - // Remove iconv-lite Node primitive extensions. - iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { - if (!iconv.supportsNodeEncodingsExtension) - return; - if (!original) - throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.") - - delete Buffer.isNativeEncoding; - - var SlowBuffer = require('buffer').SlowBuffer; - - SlowBuffer.prototype.toString = original.SlowBufferToString; - SlowBuffer.prototype.write = original.SlowBufferWrite; - - Buffer.isEncoding = original.BufferIsEncoding; - Buffer.byteLength = original.BufferByteLength; - Buffer.prototype.toString = original.BufferToString; - Buffer.prototype.write = original.BufferWrite; - - if (iconv.supportsStreams) { - var Readable = require('stream').Readable; - - Readable.prototype.setEncoding = original.ReadableSetEncoding; - delete Readable.prototype.collect; - } - - original = undefined; - } -} diff --git a/truebit-implementation/node_modules/iconv-lite/lib/index.d.ts b/truebit-implementation/node_modules/iconv-lite/lib/index.d.ts deleted file mode 100644 index 0547eb34..00000000 --- a/truebit-implementation/node_modules/iconv-lite/lib/index.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - * REQUIREMENT: This definition is dependent on the @types/node definition. - * Install with `npm install @types/node --save-dev` - *--------------------------------------------------------------------------------------------*/ - -declare module 'iconv-lite' { - export function decode(buffer: Buffer, encoding: string, options?: Options): string; - - export function encode(content: string, encoding: string, options?: Options): Buffer; - - export function encodingExists(encoding: string): boolean; - - export function decodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; - - export function encodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; -} - -export interface Options { - stripBOM?: boolean; - addBOM?: boolean; - defaultEncoding?: string; -} diff --git a/truebit-implementation/node_modules/iconv-lite/lib/index.js b/truebit-implementation/node_modules/iconv-lite/lib/index.js deleted file mode 100644 index 5391919c..00000000 --- a/truebit-implementation/node_modules/iconv-lite/lib/index.js +++ /dev/null @@ -1,153 +0,0 @@ -"use strict"; - -// Some environments don't have global Buffer (e.g. React Native). -// Solution would be installing npm modules "buffer" and "stream" explicitly. -var Buffer = require("safer-buffer").Buffer; - -var bomHandling = require("./bom-handling"), - iconv = module.exports; - -// All codecs and aliases are kept here, keyed by encoding name/alias. -// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. -iconv.encodings = null; - -// Characters emitted in case of error. -iconv.defaultCharUnicode = '�'; -iconv.defaultCharSingleByte = '?'; - -// Public API. -iconv.encode = function encode(str, encoding, options) { - str = "" + (str || ""); // Ensure string. - - var encoder = iconv.getEncoder(encoding, options); - - var res = encoder.write(str); - var trail = encoder.end(); - - return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; -} - -iconv.decode = function decode(buf, encoding, options) { - if (typeof buf === 'string') { - if (!iconv.skipDecodeWarning) { - console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); - iconv.skipDecodeWarning = true; - } - - buf = Buffer.from("" + (buf || ""), "binary"); // Ensure buffer. - } - - var decoder = iconv.getDecoder(encoding, options); - - var res = decoder.write(buf); - var trail = decoder.end(); - - return trail ? (res + trail) : res; -} - -iconv.encodingExists = function encodingExists(enc) { - try { - iconv.getCodec(enc); - return true; - } catch (e) { - return false; - } -} - -// Legacy aliases to convert functions -iconv.toEncoding = iconv.encode; -iconv.fromEncoding = iconv.decode; - -// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. -iconv._codecDataCache = {}; -iconv.getCodec = function getCodec(encoding) { - if (!iconv.encodings) - iconv.encodings = require("../encodings"); // Lazy load all encoding definitions. - - // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. - var enc = iconv._canonicalizeEncoding(encoding); - - // Traverse iconv.encodings to find actual codec. - var codecOptions = {}; - while (true) { - var codec = iconv._codecDataCache[enc]; - if (codec) - return codec; - - var codecDef = iconv.encodings[enc]; - - switch (typeof codecDef) { - case "string": // Direct alias to other encoding. - enc = codecDef; - break; - - case "object": // Alias with options. Can be layered. - for (var key in codecDef) - codecOptions[key] = codecDef[key]; - - if (!codecOptions.encodingName) - codecOptions.encodingName = enc; - - enc = codecDef.type; - break; - - case "function": // Codec itself. - if (!codecOptions.encodingName) - codecOptions.encodingName = enc; - - // The codec function must load all tables and return object with .encoder and .decoder methods. - // It'll be called only once (for each different options object). - codec = new codecDef(codecOptions, iconv); - - iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. - return codec; - - default: - throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); - } - } -} - -iconv._canonicalizeEncoding = function(encoding) { - // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. - return (''+encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); -} - -iconv.getEncoder = function getEncoder(encoding, options) { - var codec = iconv.getCodec(encoding), - encoder = new codec.encoder(options, codec); - - if (codec.bomAware && options && options.addBOM) - encoder = new bomHandling.PrependBOM(encoder, options); - - return encoder; -} - -iconv.getDecoder = function getDecoder(encoding, options) { - var codec = iconv.getCodec(encoding), - decoder = new codec.decoder(options, codec); - - if (codec.bomAware && !(options && options.stripBOM === false)) - decoder = new bomHandling.StripBOM(decoder, options); - - return decoder; -} - - -// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json. -var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node; -if (nodeVer) { - - // Load streaming support in Node v0.10+ - var nodeVerArr = nodeVer.split(".").map(Number); - if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { - require("./streams")(iconv); - } - - // Load Node primitive extensions. - require("./extend-node")(iconv); -} - -if ("Ā" != "\u0100") { - console.error("iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info."); -} diff --git a/truebit-implementation/node_modules/iconv-lite/lib/streams.js b/truebit-implementation/node_modules/iconv-lite/lib/streams.js deleted file mode 100644 index 44095529..00000000 --- a/truebit-implementation/node_modules/iconv-lite/lib/streams.js +++ /dev/null @@ -1,121 +0,0 @@ -"use strict"; - -var Buffer = require("buffer").Buffer, - Transform = require("stream").Transform; - - -// == Exports ================================================================== -module.exports = function(iconv) { - - // Additional Public API. - iconv.encodeStream = function encodeStream(encoding, options) { - return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); - } - - iconv.decodeStream = function decodeStream(encoding, options) { - return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); - } - - iconv.supportsStreams = true; - - - // Not published yet. - iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; - iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; - iconv._collect = IconvLiteDecoderStream.prototype.collect; -}; - - -// == Encoder stream ======================================================= -function IconvLiteEncoderStream(conv, options) { - this.conv = conv; - options = options || {}; - options.decodeStrings = false; // We accept only strings, so we don't need to decode them. - Transform.call(this, options); -} - -IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { - constructor: { value: IconvLiteEncoderStream } -}); - -IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { - if (typeof chunk != 'string') - return done(new Error("Iconv encoding stream needs strings as its input.")); - try { - var res = this.conv.write(chunk); - if (res && res.length) this.push(res); - done(); - } - catch (e) { - done(e); - } -} - -IconvLiteEncoderStream.prototype._flush = function(done) { - try { - var res = this.conv.end(); - if (res && res.length) this.push(res); - done(); - } - catch (e) { - done(e); - } -} - -IconvLiteEncoderStream.prototype.collect = function(cb) { - var chunks = []; - this.on('error', cb); - this.on('data', function(chunk) { chunks.push(chunk); }); - this.on('end', function() { - cb(null, Buffer.concat(chunks)); - }); - return this; -} - - -// == Decoder stream ======================================================= -function IconvLiteDecoderStream(conv, options) { - this.conv = conv; - options = options || {}; - options.encoding = this.encoding = 'utf8'; // We output strings. - Transform.call(this, options); -} - -IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { - constructor: { value: IconvLiteDecoderStream } -}); - -IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { - if (!Buffer.isBuffer(chunk)) - return done(new Error("Iconv decoding stream needs buffers as its input.")); - try { - var res = this.conv.write(chunk); - if (res && res.length) this.push(res, this.encoding); - done(); - } - catch (e) { - done(e); - } -} - -IconvLiteDecoderStream.prototype._flush = function(done) { - try { - var res = this.conv.end(); - if (res && res.length) this.push(res, this.encoding); - done(); - } - catch (e) { - done(e); - } -} - -IconvLiteDecoderStream.prototype.collect = function(cb) { - var res = ''; - this.on('error', cb); - this.on('data', function(chunk) { res += chunk; }); - this.on('end', function() { - cb(null, res); - }); - return this; -} - diff --git a/truebit-implementation/node_modules/iconv-lite/package.json b/truebit-implementation/node_modules/iconv-lite/package.json deleted file mode 100644 index d5b733c2..00000000 --- a/truebit-implementation/node_modules/iconv-lite/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "iconv-lite@0.4.23", - "_id": "iconv-lite@0.4.23", - "_inBundle": false, - "_integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "_location": "/iconv-lite", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "iconv-lite@0.4.23", - "name": "iconv-lite", - "escapedName": "iconv-lite", - "rawSpec": "0.4.23", - "saveSpec": null, - "fetchSpec": "0.4.23" - }, - "_requiredBy": [ - "/body-parser", - "/raw-body" - ], - "_resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "_shasum": "297871f63be507adcfbfca715d0cd0eed84e9a63", - "_spec": "iconv-lite@0.4.23", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "author": { - "name": "Alexander Shtuchkin", - "email": "ashtuchkin@gmail.com" - }, - "browser": { - "./lib/extend-node": false, - "./lib/streams": false - }, - "bugs": { - "url": "https://github.com/ashtuchkin/iconv-lite/issues" - }, - "bundleDependencies": false, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "deprecated": false, - "description": "Convert character encodings in pure javascript.", - "devDependencies": { - "async": "*", - "errto": "*", - "iconv": "*", - "istanbul": "*", - "mocha": "^3.1.0", - "request": "~2.81.0", - "semver": "*", - "unorm": "*" - }, - "engines": { - "node": ">=0.10.0" - }, - "homepage": "https://github.com/ashtuchkin/iconv-lite", - "keywords": [ - "iconv", - "convert", - "charset", - "icu" - ], - "license": "MIT", - "main": "./lib/index.js", - "name": "iconv-lite", - "repository": { - "type": "git", - "url": "git://github.com/ashtuchkin/iconv-lite.git" - }, - "scripts": { - "coverage": "istanbul cover _mocha -- --grep .", - "coverage-open": "open coverage/lcov-report/index.html", - "test": "mocha --reporter spec --grep ." - }, - "typings": "./lib/index.d.ts", - "version": "0.4.23" -} diff --git a/truebit-implementation/node_modules/idna-uts46-hx/.jsbeautifyrc b/truebit-implementation/node_modules/idna-uts46-hx/.jsbeautifyrc deleted file mode 100644 index aaafdab1..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/.jsbeautifyrc +++ /dev/null @@ -1,99 +0,0 @@ -{ - "js": { - "indent_size": 2, - "indent_char": " ", - "eol": "\n", - "indent_level": 0, - "indent_with_tabs": false, - "preserve_newlines": true, - "max_preserve_newlines": 2, - "jslint_happy": false, - "space_after_anon_function": false, - "keep_array_indentation": false, - "keep_function_indentation": false, - "space_before_conditional": true, - "break_chained_methods": false, - "eval_code": false, - "unescape_strings": false, - "wrap_line_length": 0, - "wrap_attributes": "auto", - "end_with_newline": true, - "brace_style": "end-expand", - "end_with_comma": false, - "space_in_paren": false - }, - "json": { - "indent_size": 2, - "indent_char": " ", - "eol": "\n", - "indent_level": 0, - "indent_with_tabs": false, - "preserve_newlines": true, - "max_preserve_newlines": 2, - "jslint_happy": false, - "space_after_anon_function": false, - "keep_array_indentation": false, - "keep_function_indentation": false, - "space_before_conditional": true, - "break_chained_methods": false, - "eval_code": false, - "unescape_strings": false, - "wrap_line_length": 0, - "wrap_attributes": "auto", - "end_with_newline": true, - "brace_style": "end-expand", - "end_with_comma": false, - "space_in_paren": false - }, - "html": { - "brace_style": "collapse", - "indent_char": " ", - "indent_size": 2, - "indent_with_tabs": false, - "preserve_newlines": true, - "max_preserve_newlines": 1, - "space_after_anon_function": false, - "wrap_line_length": 0, - "indent_scripts": "normal", - "end_with_newline": true, - "indent_inner_html": false, - "unformatted": ["a", "sub", "sup", "b", "i", "u", "span"], - "wrap_attributes": "auto", - "wrap_attributes_indent_size": 2, - "extra_liners": [ - "head", - "body", - "/html" - ] - }, - "css": { - "indent_char": " ", - "align_assignments": true, - "convert_quotes": "none", - "end_with_newline": true, - "force_indentation": false, - "indent_comments": true, - "indent_size": 2, - "newline_between_rules": false, - "no_lead_zero": true, - "predefinedConfig": "csscomb", - "preserve_newlines": true, - "selector_separator_newline": true, - "wrap_line_length": 0 - }, - "less": { - "indent_char": " ", - "align_assignments": true, - "convert_quotes": "none", - "end_with_newline": true, - "force_indentation": false, - "indent_comments": true, - "indent_size": 2, - "newline_between_rules": true, - "no_lead_zero": true, - "predefinedConfig": "csscomb", - "preserve_newlines": true, - "selector_separator_newline": true, - "wrap_line_length": 0 - } -} diff --git a/truebit-implementation/node_modules/idna-uts46-hx/.jshintrc b/truebit-implementation/node_modules/idna-uts46-hx/.jshintrc deleted file mode 100644 index c2f802cc..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/.jshintrc +++ /dev/null @@ -1,68 +0,0 @@ -{ - "globals": { - "define": false - }, - "esversion": 6, - "bitwise": false, - "curly": false, - "eqeqeq": true, - "forin": true, - "freeze": true, - "funcscope": false, - "iterator": false, - "latedef": false, - "maxcomplexity": false, - "maxdepth": false, - "maxerr": 50, - "maxparams": false, - "maxstatements": false, - "noarg": true, - "nocomma": false, - "nonbsp": true, - "nonew": false, - "notypeof": false, - "shadow": false, - "singleGroups": false, - "strict": false, - "undef": true, - "unused": true, - "varstmt": false, - "asi": false, - "boss": true, - "debug": false, - "elision": false, - "eqnull": false, - "evil": false, - "expr": false, - "lastsemic": false, - "loopfunc": true, - "moz": false, - "noyield": false, - "plusplus": false, - "proto": false, - "scripturl": false, - "supernew": false, - "validthis": false, - "withstmt": false, - "browser": true, - "browserify": true, - "couch": false, - "devel": true, - "dojo": false, - "jasmine": false, - "jquery": false, - "mocha": true, - "module": false, - "mootools": false, - "node": true, - "nonstandard": false, - "phantom": false, - "prototypejs": false, - "qunit": false, - "rhino": false, - "shelljs": false, - "typed": false, - "worker": false, - "wsh": false, - "yui": false -} diff --git a/truebit-implementation/node_modules/idna-uts46-hx/HISTORY.md b/truebit-implementation/node_modules/idna-uts46-hx/HISTORY.md deleted file mode 100644 index 93bd1da4..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/HISTORY.md +++ /dev/null @@ -1,33 +0,0 @@ -2017-11-06 / 2.3.0 - 2.3.1 -========================== -* replaced for .. of loop in uts46.js on Line 111 with simple for loop. I don't expect this to break as no codepoint logic has to be payed heed to. - -2017-04-18 -========== - * Switched automated tests to fit our own way - * dropped out grunt - * introduced nyc - * introduced mocha.opts - * npm test now runs both: tests and coverage report - * add .nyc_output to gitignore - * renamed test source code files to .spec.js as this is very common - * re-validated source codes, still open: idna-map.js - * updated .jshintrc config - * added IDN translation cases found on unicode.org (see test-uts46.spec.js). Need to investigate further - -2017-04-10 -========== -Initial Fork Release covering: - * dependenncy upgrades - * chai 3.5.0 - * grunt 0.4.5 -> 1.0.1 - * grunt-mocha-istanbul 3.0.1 -> 5.0.2 - * grunt-mocha-test 0.12.7 -> 0.13.2 - * istanbul 0.3.22 -> 0.4.5 - * mocha 2.5.3 -> 3.2.0 - * punycode 1.4.1 -> 2.1.0 - * Added HISTORY.md (Changelog) - * Upgraded IDNA Map to unicode 9.0.0 - * Updated README.md to cover: build-unicode-tables.py - * Add test/IdnaTest.txt to gitignore as it get autogenerated - * Re-validated test source scripts diff --git a/truebit-implementation/node_modules/idna-uts46-hx/LICENSE.txt b/truebit-implementation/node_modules/idna-uts46-hx/LICENSE.txt deleted file mode 100644 index fc258a06..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Original work Copyright (c) 2015 Joshua Cranmer as part of jcranmer/idna-uts46. -Modified work Copyright (c) 2017 Kai Schwarz as part of this fork hexonet/idna-uts46. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/idna-uts46-hx/README.md b/truebit-implementation/node_modules/idna-uts46-hx/README.md deleted file mode 100644 index 45e2f543..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# IDNA-UTS #46 in JavaScript - -This is a maintained fork of the idna-uts46 library originally written by jcranmer. - -The [JS Punycode converter library](https://github.com/bestiejs/punycode.js/) is -a great tool for handling Unicode domain names, but it only implements the -Punycode encoding of domain labels, not the full IDNA algorithm. In simple -cases, a mere conversion to lowercase text before input would seem sufficient, -but the real mapping for strings is far more complex. This library implements -the full mapping for these strings, as defined by -[UTS #46](http://unicode.org/reports/tr46/). - - -## Install - -npm install idna-uts46-hx --save - -## IDNA mess for dummies - -Unfortunately, the situation of internationalized domain names is rather -complicated by the existence of multiple incompatible standards (IDNA2003 and -IDNA2008, predominantly). While UTS #46 tries to bridge the incompatibility, -there are four characters which cannot be so bridged: ß (the German sharp s), -ς (Greek final sigma), and the ZWJ and ZWNJ characters. These are handled -differently depending on the mode; in ``transitional`` mode, these strings are -mapped to different ones, preserving capability with IDNA2003; in -``nontransitional`` mode, these strings are mapped to themselves, in accordance -with IDNA2008. - -Presently, this library uses ``transitional`` mode, compatible with all known -browser implementations at this point. It is expected that, in the future, this -will be changed to ``nontransitional`` mode. - -`It is highly recommended that you use the ASCII form of the label for storing -or comparing strings.` - -## API - -### `uts46.toAscii(domain, options={transitional: false, useStd3ASCII: false, verifyDnsLength: false })` - -Converts a domain name to the correct ASCII label. The second parameter is an -optional options parameter, which has two configurable options. The -`transitional` option controls whether or not transitional processing (see the -IDNA mess for dummies section for more details) is requested, defaulting to -false. The `useStd3ASCII` option controls whether or not characters that are -illegal in domain names per the DNS specification should be omitted. The -`verifyDnsLength` option controls whether or not the resulting DNS label should -be checked for length validity (i.e., no empty components and not too long). The -options parameter and its associated fields are all optional and should be -omitted for most users. - -```js -uts46.toAscii('öbb.at'); // 'xn-bb-eka.at' -uts46.toAscii('ÖBB.AT'); // 'xn-bb-eka.at' -uts46.toAscii('XN-BB-EKA.AT'); // 'xn-bb-eka.at' -uts46.toAscii('faß.de'); // 'fass.de' -uts46.toAscii('faß.de', {transitional: true}); // 'fass.de' -uts46.toAscii('faß.de', {transitional: false}); // 'xn--fa-hia.de' -uts46.toAscii('xn--fa-hia.de', {transitional: false}); // 'xn--fa-hia.de' -uts46.toAscii(String.fromCodePoint(0xd0000)); // Error (as it is unassigned) -``` - -### `uts46.toUnicode(domain, options={useStd3ASCII: false})` - -Converts a domain name to a normalized Unicode label. The second parameter is an -optional options parameter. The `useStd3ASCII` option controls whether or not -characters that are illegal in domain names per the DNS specification should be -omitted. The latter parameter is optional and should be omitted for most users. - -```js -uts46.toUnicode('xn-bb-eka.at'); // 'öbb.at' -uts46.toUnicode('ÖBB.AT'); // 'öbb.at' -uts46.toUnicode('O\u0308BB.AT'); // 'öbb.at' -uts46.toUnicode('faß.de'); // 'faß.de' -uts46.toUnicode('xn--fa-hia.de'); // 'faß.de' -uts46.toUnicode('﷼'); // "ریال" -uts46.toUnicode(String.fromCodePoint(0xd0000)); // Error (as it is unassigned) -``` - -## Pull latest idna-map.js -Call the below python script by providing the most current RELEASED unicode version. -The latest released version can be found in here: http://www.unicode.org/Public/UCD/latest/ReadMe.txt -e.g.: - -```bash -python build-unicode-tables.py 10.0.0 -``` - -## Known issues - -It also does not try to implement the Bidi and contextual rules for validation: -these do not affect any mapping of the domain names; instead, they restrict the -set of valid domain names. Since registrars shouldn't be accepting these names -in the first place, a domain that violates these rules will simply fail to -resolve. diff --git a/truebit-implementation/node_modules/idna-uts46-hx/build-unicode-tables.py b/truebit-implementation/node_modules/idna-uts46-hx/build-unicode-tables.py deleted file mode 100755 index cb7d39a5..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/build-unicode-tables.py +++ /dev/null @@ -1,286 +0,0 @@ -#!/usr/bin/env python2 - -# This file builds a mapping of utility tables for handling UTR#46 IDNA -# processing. You may find the rules here: -# . - -import json -import re -import sys -import urllib2 - -# NUM_UCHAR is the number of Unicode characters there are. -NUM_UCHAR = 0x10ffff + 1 - -def download_unicode(version): - idna_tables = "http://www.unicode.org/Public/idna/" + version - infd = urllib2.urlopen(idna_tables + "/IdnaTest.txt") - #with open("test/test-idna2.js", "w") as outfd: - # build_test_code(infd, outfd) - with open("test/IdnaTest.txt", "w") as outfd: - for line in infd: - outfd.write(line) - infd.close() - infd = urllib2.urlopen(idna_tables + "/IdnaMappingTable.txt") - dgc = urllib2.urlopen("http://www.unicode.org/Public/" + version - + "/ucd/extracted/DerivedGeneralCategory.txt") - with open("idna-map.js", "w") as outfd: - build_unicode_map(infd, outfd, dgc) - infd.close() - -def parse_unicode_data_file(fd): - '''Yield a generator of (start, end, fields) for the given Unicode data - file. These files are of the same basic format: a semicolon-delimited set - of columns, where the first column is either a single element or a range of - characters. In this case, the range implied by start and end are - inclusive.''' - for line in fd: - pos = line.find('#') - if pos >= 0: line = line[:pos] - line = line.strip() - if not line: continue - parts = [p.strip() for p in line.split(';')] - - stend = map(lambda x: int(x, 16), parts[0].split('..')) - if len(stend) == 1: - start = end = stend[0] - else: - start, end = stend - yield start, end, tuple(parts[1:]) - fd.close() - -def utf16len(string): - return sum(2 if ord(c) > 0xffff else 1 for c in string) - -class MappedValue(object): - def __init__(self, parts): - self.flags = 0 - self.rule = parts[0] - # If there are two parts, the second part is the mapping in question. - if len(parts) > 1 and parts[1]: - self.chars = ''.join(map(lambda u: unichr(int(u, 16)), - parts[1].split(' '))) - else: - self.chars = '' - - # In the case of disallowed_STD3_*, we process the real rule as the - # text following the last _, and set a flag noting to note the - # difference. - if self.rule.startswith('disallowed_STD3'): - self.flags |= 1 - self.rule = self.rule.split('_')[-1] - - def build_map_string(self, string): - self.index = 0 - if self.chars: - self.index = string.find(self.chars) - if self.index < 0: - self.index = utf16len(string) - string = string + self.chars - else: - self.index = utf16len(string[0:self.index]) - return string - - def build_int(self): - if self.rule == 'disallowed': - status = 0 - elif self.rule == 'ignored': - status = 1 # We're mapping to a string of length 0 - elif self.rule == 'mapped': - status = 1 - elif self.rule == 'deviation': - status = 2 - elif self.rule == 'valid': - status = 3 - else: - raise Exception("Unknown rule " + self.rule) - - # Sanity check all the bits - assert self.flags < (1 << 2) - assert self.index < (1 << 16) - numchars = utf16len(self.chars) - assert numchars < (1 << 5) - - return self.flags << 23 | status << 21 | self.index << 5 | numchars - - -def build_unicode_map(idnaMapTable, out, derivedGeneralCategory): - unicharMap = [0] * NUM_UCHAR - vals = [] - for start, end, parts in parse_unicode_data_file(idnaMapTable): - for ch in range(start, end + 1): - value = MappedValue(parts) - vals.append(value) - unicharMap[ch] = value - - # Note which characters have the combining mark property. - for start, end, parts in parse_unicode_data_file(derivedGeneralCategory): - if parts[0] in ('Mc', 'Mn', 'Me'): - for ch in range(start, end + 1): - unicharMap[ch].flags |= 2 - - # Build up the string to use to map the output - vals.sort(cmp=lambda x, y: cmp(len(x.chars), len(y.chars)), reverse=True) - mappedStr = reduce(lambda s, v: v.build_map_string(s), vals, u"") - - # Convert this to integers - unicharMap = map(lambda v: v.build_int(), unicharMap) - - # We're going to do a funky special case here. Since planes 3-17 are - # basically unused, we're going to divert these from the standard two-phase - # table lookup and use hardcoded JS for this code. Ensure that the values - # are what we would write in the code. - # (The special case here is that the variation selections, in plane 14, are - # set to ignored, not disallowed). - specialCase = unicharMap[0xe0100] - for ch in range(0x30000, len(unicharMap)): - assert unicharMap[ch] == 0 or ( - unicharMap[ch] == specialCase and - (0xe0100 <= ch and ch <= 0xe01ef)) - - mem, lg_block_size, blocks = min(find_block_sizes(unicharMap[:0x30000])) - block_size = 1 << lg_block_size - blocks = list(blocks) - out.write("/* This file is generated from the Unicode IDNA table, using\n") - out.write(" the build-unicode-tables.py script. Please edit that\n") - out.write(" script instead of this file. */\n\n") - out.write("""/* istanbul ignore next */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define([], function () { return factory(); }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.uts46_map = factory(); - } -}(this, function () { -""") - - # Emit the blocks - out.write("var blocks = [\n"); - for block in blocks: - out.write(" new Uint32Array([%s]),\n" % ','.join(map(str, block))) - out.write("];\n") - - # Now emit the block index map - out.write("var blockIdxes = new Uint%dArray([" % - (8 if len(blocks) < 256 else 16)) - out.write(','.join(str(blocks.index(tuple(unicharMap[i:i + block_size]))) - for i in range(0, 0x30000, block_size))) - out.write(']);\n') - - # And the string - out.write("var mappingStr = %s;\n" % - json.dumps(mappedStr, ensure_ascii=False).encode('utf-8')) - - # Finish off with the function to actually look everything up - out.write(""" -function mapChar(codePoint) { - if (codePoint >= 0x30000) { - // High planes are special cased. - if (codePoint >= 0xE0100 && codePoint <= 0xE01EF) - return %(codepoint)d; - return 0; - } - return blocks[blockIdxes[codePoint >> %(block_size)d]][codePoint & %(mask)d]; -} - -return { - mapStr: mappingStr, - mapChar: mapChar -}; -})); -""" % {'codepoint': unicharMap[0xE0100], 'block_size': lg_block_size, - 'mask': (1 << lg_block_size) - 1}) - -# The next two functions are helpers to find the block size that minimizes the -# total memory use. Notice that we're being clever in finding memory use by -# noting when we can use Uint8Array versus Uint32Array. -def find_block_sizes(unicharMap): - for lg_block_size in range(1, 15): - block_size = 1 << lg_block_size - memUsage, blocks = compute_block_size(unicharMap, block_size) - yield memUsage, lg_block_size, blocks - -def compute_block_size(unicharMap, block_size): - blocks = set() - for i in range(0, len(unicharMap), block_size): - block = tuple(unicharMap[i:i + block_size]) - blocks.add(block) - num = len(blocks) - if num < 256: - mem = len(unicharMap) / block_size - elif num < 0x10000: - mem = 2 * len(unicharMap) / block_size - else: - raise Exception("Way too many blocks: %d" % num) - mem += num * block_size * 4 - return mem, blocks - - -# All of the following code builds a test suite from the IdnaTest.txt file. - -def convert_escape(string): - return string - -# These functions build the test IDNA vectors. -def build_body(mode, test_vector, func, expected): - lines = [] - if expected[0] == '[': - if not re.search('[AVP]', expected): - return [] - if mode == 'T' or mode == 'B': - lines.append("assert.throws(function () { %s(\"%s\", true); });" % - (func, test_vector)) - if mode == 'N' or mode == 'B': - lines.append("assert.throws(function () { %s(\"%s\", false); });" % - (func, test_vector)) - else: - if mode == 'T' or mode == 'B': - lines.append("assert.equal(%s(\"%s\", true), \"%s\");" % - (func, test_vector, expected)) - if mode == 'N' or mode == 'B': - lines.append("assert.equal(%s(\"%s\", false), \"%s\");" % - (func, test_vector, expected)) - - return lines - -def build_test_code(infd, out): - out.write("/* This file is generated from the Unicode IDNA table, using\n") - out.write(" the build-unicode-tables.py script. Please edit that\n") - out.write(" script instead of this file. */\n\n") - out.write("var assert = require(\"assert\");\n") - out.write("var uts46 = require(\"../utr46-gold\");\n\n") - out.write(""" -function toAscii(input, transitional) { - return uts46.toAscii(input, true, transitional, true); -} -function toUnicode(input, transitional) { - return uts46.toUnicode(input, true, true); -}\n -""") - out.write("suite('IdnaTest.txt automated tests', function () {\n") - for line in infd: - line = line.split('#')[0].strip() - if not line: - continue - strings = map(lambda x: x.strip(), line.split(';')) - mode = strings[0] - test_vector = convert_escape(strings[1]) - unicode_data = convert_escape(strings[2]) or test_vector - ascii_data = convert_escape(strings[3]) or unicode_data - tests = [] - tests.extend(build_body(mode, test_vector, 'toUnicode', unicode_data)) - tests.extend(build_body(mode, test_vector, 'toAscii', ascii_data)) - if len(tests) == 0: - continue - line = line.replace('\\', '\\\\') - out.write(" test('%s', function () {\n" % line) - for test in tests: - out.write(" %s\n" % test) - out.write(" });\n") - out.write("});\n") - -if len(sys.argv) != 2: - sys.stderr.write("Usage: %s " % sys.argv[0]) -download_unicode(sys.argv[1]) diff --git a/truebit-implementation/node_modules/idna-uts46-hx/idna-map.js b/truebit-implementation/node_modules/idna-uts46-hx/idna-map.js deleted file mode 100644 index d7aa3017..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/idna-map.js +++ /dev/null @@ -1,757 +0,0 @@ -/* This file is generated from the Unicode IDNA table, using - the build-unicode-tables.py script. Please edit that - script instead of this file. */ - -/* istanbul ignore next */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define([], function () { return factory(); }); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.uts46_map = factory(); - } -}(this, function () { -var blocks = [ - new Uint32Array([2157250,2157314,2157378,2157442,2157506,2157570,2157634,0,2157698,2157762,2157826,2157890,2157954,0,2158018,0]), - new Uint32Array([2179041,6291456,2179073,6291456,2179105,6291456,2179137,6291456,2179169,6291456,2179201,6291456,2179233,6291456,2179265,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([0,2113729,2197345,2197377,2113825,2197409,2197441,2113921,2197473,2114017,2197505,2197537,2197569,2197601,2197633,2197665]), - new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,23068672,23068672,23068672,0,0,0,0,23068672]), - new Uint32Array([14680064,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064]), - new Uint32Array([2196001,2196033,2196065,2196097,2196129,2196161,2196193,2196225,2196257,2196289,2196321,2196353,2196385,2196417,2196449,2196481]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,6291456,0,0,0,0,0]), - new Uint32Array([2097281,2105921,2097729,2106081,0,2097601,2162337,2106017,2133281,2097505,2105889,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([2177025,6291456,2177057,6291456,2177089,6291456,2177121,6291456,2177153,6291456,2177185,6291456,2177217,6291456,2177249,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,0,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456]), - new Uint32Array([2134435,2134531,2134627,2134723,2134723,2134819,2134819,2134915,2134915,2135011,2105987,2135107,2135203,2135299,2131587,2135395]), - new Uint32Array([0,0,0,0,0,0,0,6291456,2168673,2169249,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2147906,2147970,2148034,2148098,2148162,2148226,2148290,2148354,2147906,2147970,2148034,2148098,2148162,2148226,2148290,2148354]), - new Uint32Array([2125219,2125315,2152834,2152898,2125411,2152962,2153026,2125506,2125507,2125603,2153090,2153154,2153218,2153282,2153346,2105348]), - new Uint32Array([2203393,6291456,2203425,6291456,2203457,6291456,2203489,6291456,6291456,6291456,6291456,2203521,6291456,2181281,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,6291456,2145538,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,6291456]), - new Uint32Array([2139426,2160834,2160898,2160962,2134242,2161026,2161090,2161154,2161218,2161282,2161346,2161410,2138658,2161474,2161538,2134722]), - new Uint32Array([2119939,2124930,2125026,2106658,2125218,2128962,2129058,2129154,2129250,2129346,2129442,2108866,2108770,2150466,2150530,2150594]), - new Uint32Array([2201601,6291456,2201633,6291456,2201665,6291456,2201697,6291456,2201729,6291456,2201761,6291456,2201793,6291456,2201825,6291456]), - new Uint32Array([2193537,2193569,2193601,2193633,2193665,2193697,2193729,2193761,2193793,2193825,2193857,2193889,2193921,2193953,2193985,2194017]), - new Uint32Array([6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2190561,6291456,2190593,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2190625,6291456,2190657,6291456,23068672]), - new Uint32Array([2215905,2215937,2215969,2216001,2216033,2216065,2216097,2216129,2216161,2216193,2216225,2216257,2105441,2216289,2216321,2216353]), - new Uint32Array([23068672,18884130,23068672,23068672,23068672,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2191233,2191265,2191297,2191329,2191361,2191393,2191425,2117377,2191457,2191489,2191521,2191553,2191585,2191617,2191649,2117953]), - new Uint32Array([2132227,2132323,2132419,2132419,2132515,2132515,2132611,2132707,2132707,2132803,2132899,2132899,2132995,2132995,2133091,2133187]), - new Uint32Array([0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,0,0]), - new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,10609889,10610785,10609921,10610817,2222241]), - new Uint32Array([6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0]), - new Uint32Array([2219969,2157121,2157441,2157505,2157889,2157953,2220001,2158465,2158529,10575617,2156994,2157058,2129923,2130019,2157122,2157186]), - new Uint32Array([6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2185249,6291456,2185281,6291456,2185313,6291456,2185345,6291456,2185377,6291456,2185409,6291456,2185441,6291456,2185473,6291456]), - new Uint32Array([0,0,0,0,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,0,0,23068672,23068672,23068672,6291456,0]), - new Uint32Array([2183361,6291456,2183393,6291456,2183425,6291456,2183457,6291456,2183489,6291456,2183521,6291456,2183553,6291456,2183585,6291456]), - new Uint32Array([2192161,2192193,2192225,2192257,2192289,2192321,2192353,2192385,2192417,2192449,2192481,2192513,2192545,2192577,2192609,2192641]), - new Uint32Array([2212001,2212033,2212065,2212097,2212129,2212161,2212193,2212225,2212257,2212289,2212321,2212353,2212385,2212417,2212449,2207265]), - new Uint32Array([2249825,2249857,2249889,2249921,2249954,2250018,2250082,2250145,2250177,2250209,2250241,2250274,2250337,2250370,2250433,2250465]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2147905,2147969,2148033,2148097,2148161,2148225,2148289,2148353]), - new Uint32Array([10485857,6291456,2197217,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,23068672,23068672]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2180353,2180385,2144033,2180417,2180449,2180481,2180513,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,10610209,10610465,10610241,10610753,10609857]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0,0]), - new Uint32Array([2223842,2223906,2223970,2224034,2224098,2224162,2224226,2224290,2224354,2224418,2224482,2224546,2224610,2224674,2224738,2224802]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([23068672,23068672,23068672,18923650,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,18923714,23068672,23068672]), - new Uint32Array([2126179,2125538,2126275,2126371,2126467,2125634,2126563,2105603,2105604,2125346,2126659,2126755,2126851,2098179,2098181,2098182]), - new Uint32Array([2227426,2227490,2227554,2227618,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2192353,2240642,2240642,2240705,2240737,2240737,2240769,2240802,2240866,2240929,2240961,2240993,2241025,2241057,2241089,2241121]), - new Uint32Array([6291456,2170881,2170913,2170945,6291456,2170977,6291456,2171009,2171041,6291456,6291456,6291456,2171073,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2132226,2132514,2163586,2132610,2160386,2133090,2133186,2160450,2160514,2160578,2133570,2106178,2160642,2133858,2160706,2160770]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10532162,10532226,10532290,10532354,10532418,10532482,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672]), - new Uint32Array([2098209,2108353,2108193,2108481,2170241,2111713,2105473,2105569,2105601,2112289,2112481,2098305,2108321,0,0,0]), - new Uint32Array([2209121,2209153,2209185,2209217,2209249,2209281,2209313,2209345,2209377,2209409,2209441,2209473,2207265,2209505,2209537,2209569]), - new Uint32Array([2189025,6291456,2189057,6291456,2189089,6291456,2189121,6291456,2189153,6291456,2189185,6291456,2189217,6291456,2189249,6291456]), - new Uint32Array([2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2165764,2140004]), - new Uint32Array([2215105,6291456,2215137,6291456,6291456,2215169,2215201,6291456,6291456,6291456,2215233,2215265,2215297,2215329,2215361,2215393]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,23068672,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([10505091,10505187,10505283,10505379,10505475,10505571,10505667,10505763,10505859,10505955,10506051,10506147,10506243,10506339,10506435,10506531]), - new Uint32Array([2229730,2229794,2229858,2229922,2229986,2230050,2230114,2230178,2230242,2230306,2230370,2230434,2230498,2230562,2230626,2230690]), - new Uint32Array([2105505,2098241,2108353,2108417,2105825,0,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177]), - new Uint32Array([6291456,6291456,6291456,6291456,10502115,10502178,10502211,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]), - new Uint32Array([2190305,6291456,2190337,6291456,2190369,6291456,2190401,6291456,2190433,6291456,2190465,6291456,2190497,6291456,2190529,6291456]), - new Uint32Array([2173793,2173985,2174017,6291456,2173761,2173697,6291456,2174689,6291456,2174017,2174721,6291456,6291456,2174753,2174785,2174817]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2099521,2099105,2120705,2098369,2120801,2103361,2097985,2098433,2121377,2121473,2099169,2099873,2098401,2099393,2152609,2100033]), - new Uint32Array([2132898,2163842,2163906,2133282,2132034,2131938,2137410,2132802,2132706,2164866,2133282,2160578,2165186,2165186,6291456,6291456]), - new Uint32Array([10500003,10500099,10500195,10500291,10500387,10500483,10500579,10500675,10500771,10500867,10500963,10501059,10501155,10501251,10501347,10501443]), - new Uint32Array([2163458,2130978,2131074,2131266,2131362,2163522,2160130,2132066,2131010,2131106,2106018,2131618,2131298,2132034,2131938,2137410]), - new Uint32Array([2212961,2116993,2212993,2213025,2213057,2213089,2213121,2213153,2213185,2213217,2213249,2209633,2213281,2213313,2213345,2213377]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2113729,2113825,2113921,2114017,2114113,2114209,2114305,2114401,2114497,2114593,2114689,2114785,2114881,2114977,2115073,2115169]), - new Uint32Array([2238177,2238209,2238241,2238273,2238305,2238337,2238337,2217537,2238369,2238401,2238433,2238465,2215649,2238497,2238529,2238561]), - new Uint32Array([2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905]), - new Uint32Array([6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,0]), - new Uint32Array([6291456,0,6291456,2145026,0,6291456,2145090,0,6291456,6291456,0,0,23068672,0,23068672,23068672]), - new Uint32Array([2099233,2122017,2200673,2098113,2121537,2103201,2200705,2104033,2121857,2121953,2122401,2099649,2099969,2123009,2100129,2100289]), - new Uint32Array([6291456,23068672,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0]), - new Uint32Array([2187681,2187713,2187745,2187777,2187809,2187841,2187873,2187905,2187937,2187969,2188001,2188033,2188065,2188097,2188129,2188161]), - new Uint32Array([0,10554498,10554562,10554626,10554690,10554754,10554818,10554882,10554946,10555010,10555074,6291456,6291456,0,0,0]), - new Uint32Array([2235170,2235234,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0]), - new Uint32Array([2181153,6291456,2188897,6291456,6291456,2188929,6291456,6291456,6291456,6291456,6291456,6291456,2111905,2100865,2188961,2188993]), - new Uint32Array([2100833,2100897,0,0,2101569,2101697,2101825,2101953,2102081,2102209,10575617,2187041,10502177,10489601,10489697,2112289]), - new Uint32Array([6291456,2172833,6291456,2172865,2172897,2172929,2172961,6291456,2172993,6291456,2173025,6291456,2173057,6291456,2173089,6291456]), - new Uint32Array([6291456,0,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,2190721]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,6291456,6291456]), - new Uint32Array([2184993,6291456,2185025,6291456,2185057,6291456,2185089,6291456,2185121,6291456,2185153,6291456,2185185,6291456,2185217,6291456]), - new Uint32Array([2115265,2115361,2115457,2115553,2115649,2115745,2115841,2115937,2116033,2116129,2116225,2116321,2150658,2150722,2200225,6291456]), - new Uint32Array([2168321,6291456,2168353,6291456,2168385,6291456,2168417,6291456,2168449,6291456,2168481,6291456,2168513,6291456,2168545,6291456]), - new Uint32Array([23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,0,6291456,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,2186625,0,0,6291456,6291456,2186657,2186689,2186721,2173505,0,10496067,10496163,10496259]), - new Uint32Array([2178785,6291456,2178817,6291456,2178849,6291456,2178881,6291456,2178913,6291456,2178945,6291456,2178977,6291456,2179009,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0]), - new Uint32Array([2097152,0,0,0,2097152,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,2197857,2197889,2197921,2197953,2197985,2198017,0,0,2198049,2198081,2198113,2198145,2198177,2198209]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2098209,2167297,2111137,6291456]), - new Uint32Array([2171393,6291456,2171425,6291456,2171457,6291456,2171489,6291456,2171521,6291456,2171553,6291456,2171585,6291456,2171617,6291456]), - new Uint32Array([2206753,2206785,2195457,2206817,2206849,2206881,2206913,2197153,2197153,2206945,2117857,2206977,2207009,2207041,2207073,2207105]), - new Uint32Array([0,0,0,0,0,0,0,23068672,0,0,0,0,2144834,2144898,0,2144962]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672]), - new Uint32Array([2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,0,2105505,2098241]), - new Uint32Array([6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,2202049,6291456,2202081,6291456,2202113,6291456,2202145,6291456,2202177,6291456,2202209,6291456,2202241,6291456]), - new Uint32Array([10501155,10501251,10501347,10501443,10501539,10501635,10501731,10501827,10501923,10502019,2141731,2105505,2098177,2155586,2166530,0]), - new Uint32Array([2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441]), - new Uint32Array([2146882,2146946,2147010,2147074,2147138,2147202,2147266,2147330,2146882,2146946,2147010,2147074,2147138,2147202,2147266,2147330]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([10502307,10502403,10502499,10502595,10502691,10502787,10502883,10502979,10503075,10503171,10503267,10503363,10503459,10503555,10503651,10503747]), - new Uint32Array([2179937,2179969,2180001,2180033,2156545,2180065,2156577,2180097,2180129,2180161,2180193,2180225,2180257,2180289,2156737,2180321]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,0,0,0,6291456,0,0,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0]), - new Uint32Array([2227682,2227746,2227810,2227874,2227938,2228002,2228066,2228130,2228194,2228258,2228322,2228386,2228450,2228514,2228578,2228642]), - new Uint32Array([2105601,2169121,2108193,2170049,2181025,2181057,2112481,2108321,2108289,2181089,2170497,2100865,2181121,2173601,2173633,2173665]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2180641,6291456,6291456,6291456]), - new Uint32Array([0,6291456,6291456,6291456,0,6291456,0,6291456,0,0,6291456,6291456,0,6291456,6291456,6291456]), - new Uint32Array([2178273,6291456,2178305,6291456,2178337,6291456,2178369,6291456,2178401,6291456,2178433,6291456,2178465,6291456,2178497,6291456]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,14680064,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456]), - new Uint32Array([2237377,2237409,2236225,2237441,2237473,2217441,2215521,2215553,2217473,2237505,2237537,2209697,2237569,2215585,2237601,2237633]), - new Uint32Array([2221985,2165601,2165601,2165665,2165665,2222017,2222017,2165729,2165729,2158913,2158913,2158913,2158913,2097281,2097281,2105921]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2149634,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2176897,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,2176929,6291456,2176961,6291456,2176993,6291456]), - new Uint32Array([2172641,6291456,2172673,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2172705,2172737,6291456,2172769,2172801,6291456]), - new Uint32Array([2099173,2104196,2121667,2099395,2121763,2152258,2152322,2098946,2152386,2121859,2121955,2099333,2122051,2104324,2099493,2122147]), - new Uint32Array([6291456,6291456,6291456,2145794,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,2145858,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,0,0,6291456,0]), - new Uint32Array([0,2105921,2097729,0,2097377,0,0,2106017,0,2097505,2105889,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2239074,2239138,2239201,2239233,2239265,2239297,2239329,2239361,0,2239393,2239425,2239425,2239458,2239521,2239553,2209569]), - new Uint32Array([14680064,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,6291456,23068672]), - new Uint32Array([2108321,2108289,2113153,2098209,2180897,2180929,2180961,2111137,2098241,2108353,2170241,2170273,2180993,2105825,6291456,2105473]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2146114,6291456,6291456,6291456,0,0,0]), - new Uint32Array([2105921,2105921,2105921,2222049,2222049,2130977,2130977,2130977,2130977,2160065,2160065,2160065,2160065,2097729,2097729,2097729]), - new Uint32Array([2218145,2214785,2207937,2218177,2218209,2192993,2210113,2212769,2218241,2218273,2216129,2218305,2216161,2218337,2218369,2218401]), - new Uint32Array([0,0,0,2156546,2156610,2156674,2156738,2156802,0,0,0,0,0,2156866,23068672,2156930]), - new Uint32Array([23068672,23068672,23068672,0,0,0,0,23068672,23068672,0,0,23068672,23068672,23068672,0,0]), - new Uint32Array([2213409,2213441,2213473,2213505,2213537,2213569,2213601,2213633,2213665,2195681,2213697,2213729,2213761,2213793,2213825,2213857]), - new Uint32Array([2100033,2099233,2122017,2200673,2098113,2121537,2103201,2200705,2104033,2121857,2121953,2122401,2099649,2099969,2123009,2100129]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2201857,6291456,2201889,6291456,2201921,6291456,2201953,6291456,2201985,6291456,2202017,6291456,2176193,2176257,23068672,23068672]), - new Uint32Array([6291456,6291456,23068672,23068672,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2188193,2188225,2188257,2188289,2188321,2188353,2188385,2188417,2188449,2188481,2188513,2188545,2188577,2188609,2188641,0]), - new Uint32Array([10554529,2221089,0,10502113,10562017,10537921,10538049,2221121,2221153,0,0,0,0,0,0,0]), - new Uint32Array([2213889,2213921,2213953,2213985,2214017,2214049,2214081,2194177,2214113,2214145,2214177,2214209,2214241,2214273,2214305,2214337]), - new Uint32Array([2166978,2167042,2099169,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2180545,6291456,6291456,6291456]), - new Uint32Array([10518915,10519011,10519107,10519203,2162242,2162306,2159554,2162370,2159362,2159618,2105922,2162434,2159746,2162498,2159810,2159874]), - new Uint32Array([2161730,2161794,2135586,2161858,2161922,2137186,2131810,2160290,2135170,2161986,2137954,2162050,2162114,2162178,10518723,10518819]), - new Uint32Array([10506627,10506723,10506819,10506915,10507011,10507107,10507203,10507299,10507395,10507491,10507587,10507683,10507779,10507875,10507971,10508067]), - new Uint32Array([6291456,23068672,23068672,23068672,0,23068672,23068672,0,0,0,0,0,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0]), - new Uint32Array([2175873,2175905,2175937,2175969,2176001,2176033,2176065,2176097,2176129,2176161,2176193,2176225,2176257,2176289,2176321,2176353]), - new Uint32Array([2140006,2140198,2140390,2140582,2140774,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,23068672,23068672,23068672]), - new Uint32Array([2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241]), - new Uint32Array([0,23068672,0,0,0,0,0,0,0,2145154,2145218,2145282,6291456,0,2145346,0]), - new Uint32Array([0,0,0,0,10531458,10495395,2148545,2143201,2173473,2148865,2173505,0,2173537,0,2173569,2149121]), - new Uint32Array([10537282,10495683,2148738,2148802,2148866,0,6291456,2148930,2186593,2173473,2148737,2148865,2148802,10495779,10495875,10495971]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2215425,2215457,2215489,2215521,2215553,2215585,2215617,2215649,2215681,2215713,2215745,2215777,2192033,2215809,2215841,2215873]), - new Uint32Array([2242049,2242081,2242113,2242145,2242177,2242209,2242241,2242273,2215937,2242305,2242338,2242401,2242433,2242465,2242497,2216001]), - new Uint32Array([10554529,2221089,0,0,10562017,10502113,10538049,10537921,2221185,10489601,10489697,10609889,10609921,2141729,2141793,10610273]), - new Uint32Array([2141923,2142019,2142115,2142211,2142307,2142403,2142499,2142595,2142691,0,0,0,0,0,0,0]), - new Uint32Array([0,2221185,2221217,10609857,10609857,10489601,10489697,10609889,10609921,2141729,2141793,2221345,2221377,2221409,2221441,2187105]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,18923970,23068672,23068672,23068672,0,6291456,6291456]), - new Uint32Array([2183105,6291456,2183137,6291456,2183169,6291456,2183201,6291456,2183233,6291456,2183265,6291456,2183297,6291456,2183329,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([2134434,2134818,2097666,2097186,2097474,2097698,2105986,2131586,2132450,2131874,2131778,2135970,2135778,2161602,2136162,2161666]), - new Uint32Array([2236865,2236897,2236930,2236993,2237025,2235681,2237058,2237121,2237153,2237185,2237217,2217281,2237250,2191233,2237313,2237345]), - new Uint32Array([2190049,6291456,2190081,6291456,2190113,6291456,2190145,6291456,2190177,6291456,2190209,6291456,2190241,6291456,2190273,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2101922,2102050,2102178,2102306,10498755,10498851,10498947,10499043,10499139,10499235,10499331,10499427,10499523,10489604,10489732,10489860]), - new Uint32Array([2166914,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2181601,2170561,2181633,2181665,2170753,2181697,2172897,2170881,2181729,2170913,2172929,2113441,2181761,2181793,2171009,2173761]), - new Uint32Array([0,2105921,2097729,2106081,0,2097601,2162337,2106017,2133281,2097505,0,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([2248001,2248033,2248066,2248130,2248193,2248226,2248289,2248322,2248385,2248417,2216673,2248450,2248514,2248577,2248610,2248673]), - new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,0,0,0]), - new Uint32Array([2169729,6291456,2169761,6291456,2169793,6291456,2169825,6291456,2169857,2169889,6291456,2169921,6291456,2143329,6291456,2098305]), - new Uint32Array([2162178,2163202,2163266,2135170,2136226,2161986,2137954,2159426,2159490,2163330,2159554,2163394,2159682,2139522,2136450,2159746]), - new Uint32Array([2173953,2173985,0,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2174209,2174241,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,4271169,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2174273]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,6291456,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,2190785,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2189793,6291456,2189825,6291456,2189857,6291456,2189889,6291456,2189921,6291456,2189953,6291456,2189985,6291456,2190017,6291456]), - new Uint32Array([2105601,2112289,2108193,2112481,2112577,0,2098305,2108321,2108289,2100865,2113153,2108481,2113345,0,2098209,2111137]), - new Uint32Array([2172129,6291456,2172161,6291456,2172193,6291456,2172225,6291456,2172257,6291456,2172289,6291456,2172321,6291456,2172353,6291456]), - new Uint32Array([2214753,6291456,2214785,6291456,6291456,2214817,2214849,2214881,2214913,2214945,2214977,2215009,2215041,2215073,2194401,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([0,0,0,0,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([10610305,10610337,10575617,2221761,10610401,10610433,10502177,0,10610465,10610497,10610529,10610561,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,23068672,0,0,0,0,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2187105,2187137,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2199393,2199425,2199457,2199489,2199521,2199553,2199585,2199617,2199649,2199681,2199713,2199745,2199777,2199809,2199841,0]), - new Uint32Array([2217249,2217281,2217313,2217345,2217377,2217409,2217441,2217473,2215617,2217505,2217537,2217569,2214753,2217601,2217633,2217665]), - new Uint32Array([2170273,2170305,6291456,2170337,2170369,6291456,2170401,2170433,2170465,6291456,6291456,6291456,2170497,2170529,6291456,2170561]), - new Uint32Array([2188673,6291456,2188705,2188737,2188769,6291456,6291456,2188801,6291456,2188833,6291456,2188865,6291456,2180929,2181505,2180897]), - new Uint32Array([10489988,10490116,10490244,10490372,10490500,10490628,10490756,10490884,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2147393,2147457,2147521,2147585,2147649,2147713,2147777,2147841]), - new Uint32Array([23068672,23068672,0,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2241153,2241185,2241217,2215809,2241250,2241313,2241345,2241377,2217921,2241377,2241409,2215873,2241441,2241473,2241505,2241537]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2220417,2220417,2220449,2220449,2220481,2220481,2220513,2220513,2220545,2220545,2220577,2220577,2220609,2220609,2220641,2220641]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,2144002,0,6291456,6291456,0,0,6291456,6291456,6291456]), - new Uint32Array([2167105,2167137,2167169,2167201,2167233,2167265,2167297,2167329,2167361,2167393,2167425,2167457,2167489,2167521,2167553,2167585]), - new Uint32Array([10575521,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]), - new Uint32Array([2234146,2234210,2234274,2234338,2234402,2234466,2234530,2234594,2234658,2234722,2234786,2234850,2234914,2234978,2235042,2235106]), - new Uint32Array([0,0,0,0,0,0,0,2180577,0,0,0,0,0,2180609,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,0,0,6291456,6291456]), - new Uint32Array([2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2242529,2242561,2242593,2242625,2242657,2242689,2242721,2242753,2207937,2218177,2242785,2242817,2242849,2242882,2242945,2242977]), - new Uint32Array([2118049,2105345,2118241,2105441,2118433,2118529,2118625,2118721,2118817,2200257,2200289,2191809,2200321,2200353,2200385,2200417]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([2185505,6291456,2185537,6291456,2185569,6291456,2185601,6291456,2185633,6291456,2185665,6291456,2185697,6291456,2185729,6291456]), - new Uint32Array([2231970,2232034,2232098,2232162,2232226,2232290,2232354,2232418,2232482,2232546,2232610,2232674,2232738,2232802,2232866,2232930]), - new Uint32Array([2218625,2246402,2246466,2246530,2246594,2246657,2246689,2246689,2218657,2219681,2246721,2246753,2246785,2246818,2246881,2208481]), - new Uint32Array([2197025,2197057,2197089,2197121,2197153,2197185,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2219137,2216961,2219169,2219201,2219233,2219265,2219297,2217025,2215041,2219329,2217057,2219361,2217089,2219393,2197153,2219426]), - new Uint32Array([23068672,23068672,23068672,0,0,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713]), - new Uint32Array([2243522,2243585,2243617,2243649,2243681,2210113,2243713,2243746,2243810,2243874,2243937,2243970,2244033,2244065,2244097,2244129]), - new Uint32Array([2178017,6291456,2178049,6291456,2178081,6291456,2178113,6291456,2178145,6291456,2178177,6291456,2178209,6291456,2178241,6291456]), - new Uint32Array([10553858,2165314,10518722,6291456,10518818,0,10518914,2130690,10519010,2130786,10519106,2130882,10519202,2165378,10554050,2165506]), - new Uint32Array([0,0,2135491,2135587,2135683,2135779,2135875,2135971,2135971,2136067,2136163,2136259,2136355,2136355,2136451,2136547]), - new Uint32Array([23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2220033,2220033,2220065,2220065,2220065,2220065,2220097,2220097,2220097,2220097,2220129,2220129,2220129,2220129,2220161,2220161]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2100897,2100898,2100899,2150018,2100865,2100866,2100867,2100868,2150082,2108481,2109858,2109859,2105569,2105505,2098241,2105601]), - new Uint32Array([2097217,2097505,2097505,2097505,2097505,2165570,2165570,2165634,2165634,2165698,2165698,2097858,2097858,0,0,2097152]), - new Uint32Array([23068672,6291456,23068672,23068672,23068672,6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,23068672,23068672]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([10503843,10503939,10504035,10504131,10504227,10504323,10504419,10504515,10504611,10504707,10504803,10504899,10504995,10491140,10491268,0]), - new Uint32Array([2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2134145,2097153,2134241,2105953,2132705,2130977,2160065,2131297,2162049,2133089,2160577,2133857,2235297,2220769,2235329,2235361]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2222401,2222433,2222465,10531394,2222497,2222529,2222561,0,2222593,2222625,2222657,2222689,2222721,2222753,2222785,0]), - new Uint32Array([2184481,6291456,2184513,6291456,2184545,6291456,2184577,6291456,2184609,6291456,2184641,6291456,2184673,6291456,2184705,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2105570,2156034,2126947,2156098,2153666,2127043,2127139,2156162,0,2127235,2156226,2156290,2156354,2156418,2127331,2127427]), - new Uint32Array([2215905,2207041,2153185,2241569,2241601,2241633,2241665,2241697,2241730,2241793,2241825,2241857,2241889,2241921,2241954,2242017]), - new Uint32Array([2203777,6291456,2203809,6291456,2203841,6291456,2203873,6291456,2203905,6291456,2173121,2180993,2181249,2203937,2181313,0]), - new Uint32Array([2168577,6291456,2168609,6291456,2168641,6291456,2168673,6291456,2168705,6291456,2168737,6291456,2168769,6291456,2168801,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,23068672,23068672,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,0,0]), - new Uint32Array([2210113,2195521,2210145,2210177,2210209,2210241,2210273,2210305,2210337,2210369,2210401,2210433,2210465,2210497,2210529,2210561]), - new Uint32Array([6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([2228706,2228770,2228834,2228898,2228962,2229026,2229090,2229154,2229218,2229282,2229346,2229410,2229474,2229538,2229602,2229666]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,18874368,18874368,18874368,0,0]), - new Uint32Array([2133089,2133281,2133281,2133281,2133281,2160577,2160577,2160577,2160577,2097441,2097441,2097441,2097441,2133857,2133857,2133857]), - new Uint32Array([6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089]), - new Uint32Array([2178529,6291456,2178561,6291456,2178593,6291456,2178625,6291456,2178657,6291456,2178689,6291456,2178721,6291456,2178753,6291456]), - new Uint32Array([2221025,2221025,2221057,2221057,2159329,2159329,2159329,2159329,2097217,2097217,2158914,2158914,2158978,2158978,2159042,2159042]), - new Uint32Array([2208161,2208193,2208225,2208257,2194433,2208289,2208321,2208353,2208385,2208417,2208449,2208481,2208513,2208545,2208577,2208609]), - new Uint32Array([2169217,6291456,2169249,6291456,2169281,6291456,2169313,6291456,2169345,6291456,2169377,6291456,2169409,6291456,2169441,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([2133187,2133283,2133283,2133379,2133475,2133571,2133667,2133667,2133763,2133859,2133955,2134051,2134147,2134147,2134243,2134339]), - new Uint32Array([2197697,2114113,2114209,2197729,2197761,2114305,2197793,2114401,2114497,2197825,2114593,2114689,2114785,2114881,2114977,0]), - new Uint32Array([2193089,2193121,2193153,2193185,2117665,2117569,2193217,2193249,2193281,2193313,2193345,2193377,2193409,2193441,2193473,2193505]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2184225,6291456,2184257,6291456,2184289,6291456,2184321,6291456,2184353,6291456,2184385,6291456,2184417,6291456,2184449,6291456]), - new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2100833,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2098657,2098049,2200737,2123489,2123681,2200769,2098625,2100321,2098145,2100449,2098017,2098753,2200801,2200833,2200865,0]), - new Uint32Array([23068672,23068672,23068672,0,0,0,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0]), - new Uint32Array([2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,0,2098241,2108353,2108417,2105825,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2181153,2105505,2181185,2167617,2180993]), - new Uint32Array([2160002,2160066,2160130,2160194,2160258,2132066,2131010,2131106,2106018,2131618,2160322,2131298,2132034,2131938,2137410,2132226]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,6291456]), - new Uint32Array([2183617,6291456,2183649,6291456,2183681,6291456,2183713,6291456,2183745,6291456,2183777,6291456,2183809,6291456,2183841,6291456]), - new Uint32Array([0,6291456,6291456,0,6291456,0,0,6291456,6291456,0,6291456,0,0,6291456,0,0]), - new Uint32Array([2250977,2251009,2251041,2251073,2195009,2251106,2251169,2251201,2251233,2251265,2251297,2251330,2251394,2251457,2251489,2251521]), - new Uint32Array([2205729,2205761,2205793,2205825,2205857,2205889,2205921,2205953,2205985,2206017,2206049,2206081,2206113,2206145,2206177,2206209]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2143170,2168993,6291456,2169025,6291456,2169057,6291456,2169089,6291456,2143234,2169121,6291456,2169153,6291456,2169185,6291456]), - new Uint32Array([23068672,23068672,2190689,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2248706,2248769,2248801,2248833,2248865,2248897,2248929,2248962,2249026,2249090,2249154,2240705,2249217,2249249,2249281,2249313]), - new Uint32Array([10485857,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10495394,6291456,2098209,6291456,6291456,2097152,6291456,10531394]), - new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([14680064,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2173985,2173953,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889]), - new Uint32Array([6291456,2186977,6291456,6291456,6291456,6291456,6291456,10537858,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2209601,2209633,2209665,2209697,2209729,2209761,2209793,2209825,2209857,2209889,2209921,2209953,2209985,2210017,2210049,2210081]), - new Uint32Array([10501539,10501635,10501731,10501827,10501923,10502019,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905]), - new Uint32Array([2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2194561,2194593,2194625,2119777,2119873,2194657,2194689,2194721,2194753,2194785,2194817,2194849,2194881,2194913,2194945,2194977]), - new Uint32Array([2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569]), - new Uint32Array([2222818,2222882,2222946,2223010,2223074,2223138,2223202,2223266,2223330,2223394,2223458,2223522,2223586,2223650,2223714,2223778]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672]), - new Uint32Array([0,2179553,2179585,2179617,2179649,2144001,2179681,2179713,2179745,2179777,2179809,2156705,2179841,2156833,2179873,2179905]), - new Uint32Array([6291456,23068672,6291456,2145602,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,6291456,0,0]), - new Uint32Array([2196513,2196545,2196577,2196609,2196641,2196673,2196705,2196737,2196769,2196801,2196833,2196865,2196897,2196929,2196961,2196993]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2177281,6291456,2177313,6291456,2177345,6291456,2177377,6291456,2177409,6291456,2177441,6291456,2177473,6291456,2177505,6291456]), - new Uint32Array([2187137,2221473,2221505,2221537,2221569,6291456,6291456,10610209,10610241,10537986,10537986,10537986,10537986,10609857,10609857,10609857]), - new Uint32Array([2243009,2243041,2216033,2243074,2243137,2243169,2243201,2219617,2243233,2243265,2243297,2243329,2243362,2243425,2243457,2243489]), - new Uint32Array([10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,10485857,2097152,4194304,4194304,0,0]), - new Uint32Array([2143042,6291456,2143106,2143106,2168833,6291456,2168865,6291456,6291456,2168897,6291456,2168929,6291456,2168961,6291456,2143170]), - new Uint32Array([6291456,6291456,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2204193,2204225,2204257,2204289,2204321,2204353,2204385,2204417,2204449,2204481,2204513,2204545,2204577,2204609,2204641,2204673]), - new Uint32Array([2202753,6291456,2202785,6291456,2202817,6291456,2202849,6291456,2202881,6291456,2202913,6291456,2202945,6291456,2202977,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321]), - new Uint32Array([2147394,2147458,2147522,2147586,2147650,2147714,2147778,2147842,2147394,2147458,2147522,2147586,2147650,2147714,2147778,2147842]), - new Uint32Array([2253313,2253346,2253409,2253441,2253473,2253505,2253537,2253569,2253601,2253634,2219393,2253697,2253729,2253761,2253793,2253825]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([2162562,2162626,2131362,2162690,2159938,2160002,2162754,2162818,2160130,2162882,2160194,2160258,2160834,2160898,2161026,2161090]), - new Uint32Array([2175361,2175393,2175425,2175457,2175489,2175521,2175553,2175585,2175617,2175649,2175681,2175713,2175745,2175777,2175809,2175841]), - new Uint32Array([2253858,2253921,2253954,2254018,2254082,2196737,2254145,2196865,2254177,2254209,2254241,2254273,2197025,2254306,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2202113,2204129,2188705,2204161]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953]), - new Uint32Array([2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209]), - new Uint32Array([2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,0,2108417,0,2111713,2100897,2111905]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0]), - new Uint32Array([2175425,2175489,2175809,2175905,2175937,2175937,2176193,2176417,2180865,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,2143298,2143298,2143298,2143362,2143362,2143362,2143426,2143426,2143426,2171105,6291456,2171137]), - new Uint32Array([2120162,2120258,2151618,2151682,2151746,2151810,2151874,2151938,2152002,2120035,2120131,2120227,2152066,2120323,2152130,2120419]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2195361,2142433,2236065,2236097,2236129,2236161,2118241,2117473,2236193,2236225,2236257,2236289,0,0,0,0]), - new Uint32Array([2189281,6291456,2189313,6291456,2189345,6291456,2189377,6291456,2189409,6291456,2189441,6291456,2189473,6291456,2189505,6291456]), - new Uint32Array([6291456,6291456,2145922,6291456,6291456,6291456,6291456,2145986,6291456,6291456,6291456,6291456,2146050,6291456,6291456,6291456]), - new Uint32Array([2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,10502113,10562017,10610401,10502177,10610433,10538049]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,2186401,0,2186433,0,2186465,0,2186497]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,23068672,23068672,23068672]), - new Uint32Array([0,0,2198241,2198273,2198305,2198337,2198369,2198401,0,0,2198433,2198465,2198497,0,0,0]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,6291456,0,23068672,23068672,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]), - new Uint32Array([0,2105921,2097729,0,2097377,0,0,2106017,2133281,2097505,2105889,0,2097697,2135777,2097633,2097441]), - new Uint32Array([2197889,2197921,2197953,2197985,2198017,2198049,2198081,2198113,2198145,2198177,2198209,2198241,2198273,2198305,2198337,2198369]), - new Uint32Array([2132514,2132610,2160386,2133090,2133186,2160450,2160514,2133282,2160578,2133570,2106178,2160642,2133858,2160706,2160770,2134146]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,23068672,6291456,23068672,23068672,6291456,23068672,0,0,0,0,0,0,0,0]), - new Uint32Array([2184737,6291456,2184769,6291456,2184801,6291456,2184833,6291456,2184865,6291456,2184897,6291456,2184929,6291456,2184961,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,23068672,23068672,23068672,6291456,23068672,23068672,23068672,23068672,23068672,0,0]), - new Uint32Array([6291456,6291456,6291456,2186753,6291456,6291456,6291456,6291456,2186785,2186817,2186849,2173569,2186881,10496355,10495395,10575521]), - new Uint32Array([0,0,2097729,0,0,0,0,2106017,0,2097505,0,2097185,0,2135777,2097633,2097441]), - new Uint32Array([2189537,6291456,2189569,6291456,2189601,6291456,2189633,6291456,2189665,6291456,2189697,6291456,2189729,6291456,2189761,6291456]), - new Uint32Array([2202497,6291456,2202529,6291456,2202561,6291456,2202593,6291456,2202625,6291456,2202657,6291456,2202689,6291456,2202721,6291456]), - new Uint32Array([2245217,2218369,2245249,2245282,2245345,2245377,2245410,2245474,2245537,2245569,2245601,2245633,2245665,2245665,2245697,2245729]), - new Uint32Array([6291456,0,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,0,0,0,0,0,0,23068672,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,6291456,23068672,6291456,23068672,6291456,6291456,6291456,6291456,23068672,23068672]), - new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2097281,2105921,2097729,2106081,2097377,2097601,2162337,2106017,2133281,2097505,0,2097185,2097697,2135777,2097633,2097441]), - new Uint32Array([2176641,6291456,2176673,6291456,2176705,6291456,2176737,6291456,2176769,6291456,2176801,6291456,2176833,6291456,2176865,6291456]), - new Uint32Array([2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953,2174369,2174369,0,0,2100833,2100737]), - new Uint32Array([2116513,2190817,2190849,2190881,2190913,2190945,2116609,2190977,2191009,2191041,2191073,2117185,2191105,2191137,2191169,2191201]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456]), - new Uint32Array([0,0,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456]), - new Uint32Array([2167617,2167649,2167681,2167713,2167745,2167777,2167809,6291456,2167841,2167873,2167905,2167937,2167969,2168001,2168033,4240130]), - new Uint32Array([2165122,2163970,2164034,2164098,2164162,2164226,2164290,2164354,2164418,2164482,2164546,2133122,2134562,2132162,2132834,2136866]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2186209,2186241,2186273,2186305,2186337,2186369,0,0]), - new Uint32Array([2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([0,0,23068672,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456]), - new Uint32Array([0,10537921,10610689,10610273,10610497,10610529,10610305,10610721,10489601,10489697,10610337,10575617,10554529,2221761,2197217,10496577]), - new Uint32Array([2105473,2105569,2105601,2112289,0,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441]), - new Uint32Array([2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481]), - new Uint32Array([2125346,2153410,2153474,2127394,2153538,2153602,2153666,2153730,2105507,2105476,2153794,2153858,2153922,2153986,2154050,2105794]), - new Uint32Array([2200449,2119681,2200481,2153313,2199873,2199905,2199937,2200513,2200545,2200577,2200609,2119105,2119201,2119297,2119393,2119489]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2175777,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2222273,2197217,2221473,2221505,2221089,2222305,2200865,2099681,2104481,2222337,2099905,2120737,2222369,2103713,2100225,2098785]), - new Uint32Array([2201377,6291456,2201409,6291456,2201441,6291456,2201473,6291456,2201505,6291456,2201537,6291456,2201569,6291456,6291456,23068672]), - new Uint32Array([2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793]), - new Uint32Array([2200897,6291456,2200929,6291456,2200961,6291456,2200993,6291456,2201025,6291456,2180865,6291456,2201057,6291456,2201089,6291456]), - new Uint32Array([0,0,0,0,0,23068672,23068672,0,6291456,6291456,6291456,0,0,0,0,0]), - new Uint32Array([2161154,2161410,2138658,2161474,2161538,2097666,2097186,2097474,2162946,2132450,2163010,2163074,2136162,2163138,2161666,2161730]), - new Uint32Array([2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953]), - new Uint32Array([0,0,0,0,0,0,23068672,23068672,0,0,0,0,2145410,2145474,0,6291456]), - new Uint32Array([2244161,2216065,2212769,2244193,2244225,2244257,2244290,2244353,2244385,2244417,2244449,2218273,2244481,2244514,2244577,2244609]), - new Uint32Array([2125730,2125699,2125795,2125891,2125987,2154114,2154178,2154242,2154306,2154370,2154434,2154498,2126082,2126178,2126274,2126083]), - new Uint32Array([2237665,2237697,2237697,2237697,2237730,2237793,2237825,2237857,2237890,2237953,2237985,2238017,2238049,2238081,2238113,2238145]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2150146,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,0,0,23068672,23068672,23068672,0,0]), - new Uint32Array([2214369,2238593,2238625,2238657,2238689,2238721,2238753,2238785,2238817,2238850,2238913,2238945,2238977,2235457,2239009,2239041]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([2252066,2252130,2252193,2252225,2252257,2252290,2252353,2252385,2252417,2252449,2252481,2252513,2252545,2252578,2252641,2252673]), - new Uint32Array([2197697,2114113,2114209,2197729,2197761,2114305,2197793,2114401,2114497,2197825,2114593,2114689,2114785,2114881,2114977,2197857]), - new Uint32Array([2224866,2224930,2224994,2225058,2225122,2225186,2225250,2225314,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2219490,2219554,2219617,2219649,2219681,2219714,2219778,2219842,2219905,2219937,0,0,0,0,0,0]), - new Uint32Array([6291456,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]), - new Uint32Array([2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289]), - new Uint32Array([2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113,2173985,2173953,2148481,2173601,2173633,2173665]), - new Uint32Array([2220161,2220161,2220193,2220193,2220193,2220193,2220225,2220225,2220225,2220225,2220257,2220257,2220257,2220257,2220289,2220289]), - new Uint32Array([2192673,2192705,2192737,2192769,2192801,2192833,2192865,2118049,2192897,2117473,2117761,2192929,2192961,2192993,2193025,2193057]), - new Uint32Array([2179297,6291456,2179329,6291456,2179361,6291456,2179393,6291456,2179425,6291456,2179457,6291456,2179489,6291456,2179521,6291456]), - new Uint32Array([6291456,6291456,6291456,23068672,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2235745,2235777,2193633,2235809,2235841,2235873,2235905,2235937,2235969,2116513,2116705,2236001,2200513,2199905,2200545,2236033]), - new Uint32Array([2113153,2108481,2113345,2113441,2232993,2233025,0,0,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761]), - new Uint32Array([2170593,6291456,2170625,6291456,2170657,6291456,2170689,2170721,6291456,2170753,6291456,6291456,2170785,6291456,2170817,2170849]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2166786,2166850,0,0,0,0]), - new Uint32Array([23068672,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,10575617,2187041,10502177,10489601,10489697,0]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2134562,2132162,2132834,2136866,2136482,2164610,2164674,2164738,2164802,2132802,2132706,2164866,2132898,2164930,2164994,2165058]), - new Uint32Array([6291456,6291456,2098337,2101441,10531458,2153473,6291456,6291456,10531522,2100737,2108193,6291456,2106499,2106595,2106691,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2233122,2233186,2233250,2233314,2233378,2233442,2233506,2233570,2233634,2233698,2233762,2233826,2233890,2233954,2234018,2234082]), - new Uint32Array([23068672,6291456,23068672,23068672,23068672,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2205217,2205249,2205281,2205313,2205345,2205377,2205409,2205441,2205473,2205505,2205537,2205569,2205601,2205633,2205665,2205697]), - new Uint32Array([6291456,0,6291456,0,0,0,6291456,6291456,6291456,6291456,0,0,23068672,6291456,23068672,23068672]), - new Uint32Array([2173601,2173761,2174081,2173569,2174241,2174113,2173953,6291456,2174305,6291456,2174337,6291456,2174369,6291456,2174401,6291456]), - new Uint32Array([6291456,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([2152450,2152514,2099653,2104452,2099813,2122243,2099973,2152578,2122339,2122435,2122531,2122627,2122723,2104580,2122819,2152642]), - new Uint32Array([2236385,2236417,2236449,2236482,2236545,2215425,2236577,2236609,2236641,2236673,2215457,2236705,2236737,2236770,2215489,2236833]), - new Uint32Array([2163394,2159746,2163458,2131362,2163522,2160130,2163778,2132226,2163842,2132898,2163906,2161410,2138658,2097666,2136162,2163650]), - new Uint32Array([2218721,2246913,2246946,2216385,2247010,2247074,2215009,2247137,2247169,2216481,2247201,2247233,2247266,2247330,2247330,0]), - new Uint32Array([2129730,2129762,2129858,2129731,2129827,2156482,2156482,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,0,0,0,0,6291456,0,0]), - new Uint32Array([2203969,2204001,2181377,2204033,2204065,6291456,2204097,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([2169473,6291456,2169505,6291456,2169537,6291456,2169569,6291456,2169601,6291456,2169633,6291456,2169665,6291456,2169697,6291456]), - new Uint32Array([2141542,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2220801,2220801,2220801,2220801,2220833,2220833,2220865,2220865,2220865,2220865,2220897,2220897,2220897,2220897,2139873,2139873]), - new Uint32Array([0,0,0,0,0,23068672,23068672,0,0,0,0,0,0,0,6291456,0]), - new Uint32Array([2214849,2218433,2218465,2218497,2218529,2218561,2214881,2218593,2218625,2218657,2218689,2218721,2218753,2216545,2218785,2218817]), - new Uint32Array([23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,0,0,0,6291456]), - new Uint32Array([2136482,2164610,2164674,2164738,2164802,2132802,2132706,2164866,2132898,2164930,2164994,2165058,2165122,2132802,2132706,2164866]), - new Uint32Array([2207649,2207681,2207713,2207745,2207777,2207809,2207841,2207873,2207905,2207937,2207969,2208001,2208033,2208065,2208097,2208129]), - new Uint32Array([2123683,2105092,2152706,2123779,2105220,2152770,2100453,2098755,2123906,2124002,2124098,2124194,2124290,2124386,2124482,2124578]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,6291456,0,0,0,0,0,0,0,10485857]), - new Uint32Array([6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([10508163,10508259,10508355,10508451,2200129,2200161,2192737,2200193,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2203553,6291456,2203585,6291456,6291456,6291456,2203617,6291456,2203649,6291456,2203681,6291456,2203713,6291456,2203745,6291456]), - new Uint32Array([18884449,18884065,23068672,18884417,18884034,18921185,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,18874368]), - new Uint32Array([2247393,2247426,2247489,2247521,2247553,2247586,2247649,2247681,2247713,2247745,2247777,2247810,2247873,2247905,2247937,2247969]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,23068672]), - new Uint32Array([2134145,2097153,2134241,0,2132705,2130977,2160065,2131297,0,2133089,2160577,2133857,2235297,0,2235329,0]), - new Uint32Array([2182593,6291456,2182625,6291456,2182657,6291456,2182689,6291456,2182721,6291456,2182753,6291456,2182785,6291456,2182817,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2102402,2102403,6291456,2110050]), - new Uint32Array([2149890,2108323,2149954,6291456,2113441,6291456,2149057,6291456,2113441,6291456,2105473,2167265,2111137,2105505,6291456,2108353]), - new Uint32Array([2219105,2219137,2195233,2251554,2251617,2251649,2251681,2251713,2251746,2251810,2251873,2251905,2251937,2251970,2252033,2219169]), - new Uint32Array([2203009,6291456,2203041,6291456,2203073,6291456,2203105,6291456,2203137,6291456,2203169,6291456,2203201,6291456,2203233,6291456]), - new Uint32Array([2128195,2128291,2128387,2128483,2128579,2128675,2128771,2128867,2128963,2129059,2129155,2129251,2129347,2129443,2129539,2129635]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2140964,2141156,2140966,2141158,2141350]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2225378,2225442,2225506,2225570,2225634,2225698,2225762,2225826,2225890,2225954,2226018,2226082,2226146,2226210,2226274,2226338]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137,2105505,2098241,2108353,2108417]), - new Uint32Array([2108353,2108417,0,2105601,2108193,2157121,2157313,2157377,2157441,2100897,6291456,2108419,2173953,2173633,2173633,2173953]), - new Uint32Array([2111713,2173121,2111905,2098177,2173153,2173185,2173217,2113153,2113345,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,2190753]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,2197249,6291456,2117377,2197281,2197313,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,0,0,0,0,0,0,23068672,0,0,0,0,0,6291456,6291456,6291456]), - new Uint32Array([2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100833,2100737,2098337,2101441,2101569,2101697,2101825,2101953]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0]), - new Uint32Array([0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,23068672,23068672,23068672]), - new Uint32Array([2173281,6291456,2173313,6291456,2173345,6291456,2173377,6291456,0,0,10532546,6291456,6291456,6291456,10562017,2173441]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,0,0]), - new Uint32Array([23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2159426,2159490,2159554,2159362,2159618,2159682,2139522,2136450,2159746,2159810,2159874,2130978,2131074,2131266,2131362,2159938]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2203233,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2203265,6291456,2203297,6291456,2203329,2203361,6291456]), - new Uint32Array([6291456,6291456,2148418,2148482,2148546,0,6291456,2148610,2186529,2186561,2148417,2148545,2148482,10495778,2143969,10495778]), - new Uint32Array([2134146,2139426,2160962,2134242,2161218,2161282,2161346,2161410,2138658,2134722,2134434,2134818,2097666,2097346,2097698,2105986]), - new Uint32Array([2198881,2198913,2198945,2198977,2199009,2199041,2199073,2199105,2199137,2199169,2199201,2199233,2199265,2199297,2199329,2199361]), - new Uint32Array([0,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([10610561,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193]), - new Uint32Array([2183873,6291456,2183905,6291456,2183937,6291456,2183969,6291456,2184001,6291456,2184033,6291456,2184065,6291456,2184097,6291456]), - new Uint32Array([2244642,2244706,2244769,2244801,2218305,2244833,2244865,2244897,2244929,2244961,2244993,2245026,2245089,2245122,2245185,0]), - new Uint32Array([6291456,6291456,2116513,2116609,2116705,2116801,2199873,2199905,2199937,2199969,2190913,2200001,2200033,2200065,2200097,2191009]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2180673,2180705,2180737,2180769,2180801,2180833,0,0]), - new Uint32Array([2098081,2099521,2099105,2120705,2098369,2120801,2103361,2097985,2098433,2121377,2121473,2099169,2099873,2098401,2099393,2152609]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2150402]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,2145666,2145730,6291456,6291456]), - new Uint32Array([2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665]), - new Uint32Array([2187073,6291456,6291456,6291456,6291456,2098241,2098241,2108353,2100897,2111905,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2102404,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,2100612,6291456,6291456,6291456,6291456,6291456,6291456,6291456,10485857]), - new Uint32Array([2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889]), - new Uint32Array([2217697,2217729,2217761,2217793,2217825,2217857,2217889,2217921,2217953,2215873,2217985,2215905,2218017,2218049,2218081,2218113]), - new Uint32Array([2211233,2218849,2216673,2218881,2218913,2218945,2218977,2219009,2216833,2219041,2215137,2219073,2216865,2209505,2219105,2216897]), - new Uint32Array([2240097,2240129,2240161,2240193,2240225,2240257,2240289,2240321,2240353,2240386,2240449,2240481,2240513,2240545,2207905,2240578]), - new Uint32Array([6291456,6291456,2202273,6291456,2202305,6291456,2202337,6291456,2202369,6291456,2202401,6291456,2202433,6291456,2202465,6291456]), - new Uint32Array([0,23068672,23068672,18923394,23068672,18923458,18923522,18884099,18923586,18884195,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2201121,6291456,2201153,6291456,2201185,6291456,2201217,6291456,2201249,6291456,2201281,6291456,2201313,6291456,2201345,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,6291456]), - new Uint32Array([2211041,2211073,2211105,2211137,2211169,2211201,2211233,2211265,2211297,2211329,2211361,2211393,2211425,2211457,2211489,2211521]), - new Uint32Array([2181825,6291456,2181857,6291456,2181889,6291456,2181921,6291456,2181953,6291456,2181985,6291456,2182017,6291456,2182049,6291456]), - new Uint32Array([2162337,2097633,2097633,2097633,2097633,2132705,2132705,2132705,2132705,2097153,2097153,2097153,2097153,2133089,2133089,2133089]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,2148545,6291456,2173473,6291456,2148865,6291456,2173505,6291456,2173537,6291456,2173569,6291456,2149121,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,0,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2207137,2207169,2207201,2207233,2207265,2207297,2207329,2207361,2207393,2207425,2207457,2207489,2207521,2207553,2207585,2207617]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,6291456,0,23068672,23068672,0,0,0,0,0,0]), - new Uint32Array([2198401,2198433,2198465,2198497,0,2198529,2198561,2198593,2198625,2198657,2198689,2198721,2198753,2198785,2198817,2198849]), - new Uint32Array([2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0,0]), - new Uint32Array([2216385,2118721,2216417,2216449,2216481,2216513,2216545,2211233,2216577,2216609,2216641,2216673,2216705,2216737,2216737,2216769]), - new Uint32Array([2216801,2216833,2216865,2216897,2216929,2216961,2216993,2215169,2217025,2217057,2217089,2217121,2217154,2217217,0,0]), - new Uint32Array([2210593,2191809,2210625,2210657,2210689,2210721,2210753,2210785,2210817,2210849,2191297,2210881,2210913,2210945,2210977,2211009]), - new Uint32Array([0,0,2105825,0,0,2111905,2105473,0,0,2112289,2108193,2112481,2112577,0,2098305,2108321]), - new Uint32Array([0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,2097153,2134241,0,2132705,0,0,2131297,0,2133089,0,2133857,0,2220769,0,2235361]), - new Uint32Array([14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,6291456,6291456,14680064]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([2171873,6291456,2171905,6291456,2171937,6291456,2171969,6291456,2172001,6291456,2172033,6291456,2172065,6291456,2172097,6291456]), - new Uint32Array([2220929,2220929,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2133857,2134145,2134145,2134145,2134145,2134241,2134241,2134241,2134241,2105889,2105889,2105889,2105889,2097185,2097185,2097185]), - new Uint32Array([2173697,2173761,2173793,2174113,2173985,2173953,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,10499619,10499715,10499811,10499907]), - new Uint32Array([0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,0,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,0,23068672,23068672,23068672,0,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,6291456,23068672,23068672]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,2144322,2144386,2144450,2144514,2144578,2144642,2144706,2144770]), - new Uint32Array([23068672,23068672,23068672,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456]), - new Uint32Array([2113153,2108481,2113345,2113441,2098209,2111137,0,2098241,2108353,2108417,2105825,0,0,2111905,2105473,2105569]), - new Uint32Array([2236321,2236353,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2152194,2121283,2103684,2103812,2097986,2098533,2097990,2098693,2098595,2098853,2099013,2103940,2121379,2121475,2121571,2104068]), - new Uint32Array([2206241,2206273,2206305,2206337,2206369,2206401,2206433,2206465,2206497,2206529,2206561,2206593,2206625,2206657,2206689,2206721]), - new Uint32Array([6291456,6291456,6291456,6291456,16777216,16777216,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,23068672,23068672,10538818,10538882,6291456,6291456,2150338]), - new Uint32Array([6291456,6291456,6291456,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2214369,2214401,2214433,2214465,2214497,2214529,2214561,2214593,2194977,2214625,2195073,2214657,2214689,2214721,6291456,6291456]), - new Uint32Array([2097152,2097152,2097152,2097152,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2182081,6291456,2182113,6291456,2182145,6291456,2182177,6291456,2182209,6291456,2182241,6291456,2182273,6291456,2182305,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2146881,2146945,2147009,2147073,2147137,2147201,2147265,2147329]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,23068672,23068672]), - new Uint32Array([0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2122915,2123011,2123107,2104708,2123203,2123299,2123395,2100133,2104836,2100290,2100293,2104962,2104964,2098052,2123491,2123587]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456]), - new Uint32Array([6291456,2171169,6291456,2171201,6291456,2171233,6291456,2171265,6291456,2171297,6291456,2171329,6291456,6291456,2171361,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,2148994,2149058,2149122,0,6291456,2149186,2186945,2173537,2148993,2149121,2149058,10531458,10496066,0]), - new Uint32Array([2195009,2195041,2195073,2195105,2195137,2195169,2195201,2195233,2195265,2195297,2195329,2195361,2195393,2195425,2195457,2195489]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,0,0,6291456,6291456]), - new Uint32Array([2182849,6291456,2182881,6291456,2182913,6291456,2182945,6291456,2182977,6291456,2183009,6291456,2183041,6291456,2183073,6291456]), - new Uint32Array([2211553,2210081,2211585,2211617,2211649,2211681,2211713,2211745,2211777,2211809,2209569,2211841,2211873,2211905,2211937,2211969]), - new Uint32Array([2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2166594,2127298,2166658,2142978,2141827,2166722]), - new Uint32Array([2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233057,2148481,2173601,2173633,2173665,2173697,2173729]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,0,0,2185761,2185793,2185825,2185857,2185889,2185921,0,0]), - new Uint32Array([6291456,2148481,2173601,2173633,2173665,2173697,2173729,2148801,2173761,2143969,2173793,2173825,2153473,2173857,2173889,2173921]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,6291456]), - new Uint32Array([0,0,0,2220961,2220961,2220961,2220961,2144193,2144193,2159201,2159201,2159265,2159265,2144194,2220993,2220993]), - new Uint32Array([2192641,2235393,2235425,2152257,2116609,2235457,2235489,2200065,2235521,2235553,2235585,2212449,2235617,2235649,2235681,2235713]), - new Uint32Array([2194049,2194081,2194113,2194145,2194177,2194209,2194241,2194273,2194305,2194337,2194369,2194401,2194433,2194465,2194497,2194529]), - new Uint32Array([2196673,2208641,2208673,2208705,2208737,2208769,2208801,2208833,2208865,2208897,2208929,2208961,2208993,2209025,2209057,2209089]), - new Uint32Array([2191681,2191713,2191745,2191777,2153281,2191809,2191841,2191873,2191905,2191937,2191969,2192001,2192033,2192065,2192097,2192129]), - new Uint32Array([2230946,2231010,2231074,2231138,2231202,2231266,2231330,2231394,2231458,2231522,2231586,2231650,2231714,2231778,2231842,2231906]), - new Uint32Array([14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064,14680064]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,2185953,2185985,2186017,2186049,2186081,2186113,2186145,2186177]), - new Uint32Array([2139811,2139907,2097284,2105860,2105988,2106116,2106244,2097444,2097604,2097155,10485778,10486344,2106372,6291456,0,0]), - new Uint32Array([2110051,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2172385,6291456,2172417,6291456,2172449,6291456,2172481,6291456,2172513,6291456,2172545,6291456,2172577,6291456,2172609,6291456]), - new Uint32Array([0,0,23068672,23068672,6291456,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2249345,2249377,2249409,2249441,2249473,2249505,2249537,2249570,2210209,2249633,2249665,2249697,2249729,2249761,2249793,2216769]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,6291456,6291456,6291456,6291456]), - new Uint32Array([2187169,2187201,2187233,2187265,2187297,2187329,2187361,2187393,2187425,2187457,2187489,2187521,2187553,2187585,2187617,2187649]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([0,0,0,6291456,6291456,0,0,0,6291456,6291456,6291456,0,0,0,6291456,6291456]), - new Uint32Array([2182337,6291456,2182369,6291456,2182401,6291456,2182433,6291456,2182465,6291456,2182497,6291456,2182529,6291456,2182561,6291456]), - new Uint32Array([2138179,2138275,2138371,2138467,2134243,2134435,2138563,2138659,2138755,2138851,2138947,2139043,2138947,2138755,2139139,2139235]), - new Uint32Array([23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([0,0,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2250498,2250562,2250625,2250657,2208321,2250689,2250721,2250753,2250785,2250817,2250849,2218945,2250881,2250913,2250945,0]), - new Uint32Array([2170369,2105569,2098305,2108481,2173249,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456]), - new Uint32Array([2100897,2111905,2105473,2105569,2105601,0,2108193,0,0,0,2098305,2108321,2108289,2100865,2113153,2108481]), - new Uint32Array([2100897,2100897,2105569,2105569,6291456,2112289,2149826,6291456,6291456,2112481,2112577,2098177,2098177,2098177,6291456,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,6291456,6291456,6291456]), - new Uint32Array([6291456,2169953,2169985,6291456,2170017,6291456,2170049,2170081,6291456,2170113,2170145,2170177,6291456,6291456,2170209,2170241]), - new Uint32Array([6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([0,0,0,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2220641,2220641,2220673,2220673,2220673,2220673,2220705,2220705,2220705,2220705,2220737,2220737,2220737,2220737,2220769,2220769]), - new Uint32Array([2127650,2127746,2127842,2127938,2128034,2128130,2128226,2128322,2128418,2127523,2127619,2127715,2127811,2127907,2128003,2128099]), - new Uint32Array([2143969,2173793,2173825,2153473,2173857,2173889,2173921,2173953,2173985,2173761,2174017,2174049,2174081,2174113,2174145,2174177]), - new Uint32Array([0,0,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([2204705,2204737,2204769,2204801,2204833,2204865,2204897,2204929,2204961,2204993,2205025,2205057,2205089,2205121,2205153,2205185]), - new Uint32Array([2176385,6291456,2176417,6291456,2176449,6291456,2176481,6291456,2176513,6291456,2176545,6291456,2176577,6291456,2176609,6291456]), - new Uint32Array([2195521,2195553,2195585,2195617,2195649,2195681,2117857,2195713,2195745,2195777,2195809,2195841,2195873,2195905,2195937,2195969]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,6291456,6291456]), - new Uint32Array([2173921,2173953,2173985,2174017,2174017,2174049,2174081,2174113,2174145,2174177,2149057,2233089,2173697,2173761,2173793,2174113]), - new Uint32Array([2131586,2132450,2135970,2135778,2161602,2136162,2163650,2161794,2135586,2163714,2137186,2131810,2160290,2135170,2097506,2159554]), - new Uint32Array([2134145,2097153,2134241,2105953,2132705,2130977,2160065,2131297,2162049,2133089,2160577,2133857,0,0,0,0]), - new Uint32Array([2116513,2116609,2116705,2116801,2116897,2116993,2117089,2117185,2117281,2117377,2117473,2117569,2117665,2117761,2117857,2117953]), - new Uint32Array([2100737,2098337,2101441,2101569,2101697,2101825,2101953,2102081,2102209,2100802,2101154,2101282,2101410,2101538,2101666,2101794]), - new Uint32Array([2100289,2098657,2098049,2200737,2123489,2123681,2200769,2098625,2100321,2098145,2100449,2098017,2098753,2098977,2150241,2150305]), - new Uint32Array([6291456,6291456,6291456,0,6291456,6291456,6291456,6291456,6291456,2109955,6291456,6291456,0,0,0,0]), - new Uint32Array([18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368,18874368]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,6291456,0,6291456,0,0]), - new Uint32Array([2130979,2131075,2131075,2131171,2131267,2131363,2131459,2131555,2131651,2131651,2131747,2131843,2131939,2132035,2132131,2132227]), - new Uint32Array([0,2177793,6291456,2177825,6291456,2177857,6291456,2177889,6291456,2177921,6291456,2177953,6291456,2177985,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672]), - new Uint32Array([6291456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2113345,0,2098209,2111137,2105505,2098241,2108353,2108417,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289]), - new Uint32Array([2136643,2136739,2136835,2136931,2137027,2137123,2137219,2137315,2137411,2137507,2137603,2137699,2137795,2137891,2137987,2138083]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0]), - new Uint32Array([2174433,6291456,2174465,6291456,2174497,6291456,2174529,6291456,2174561,6291456,2174593,6291456,2174625,6291456,2174657,6291456]), - new Uint32Array([0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441]), - new Uint32Array([10496547,10496643,2105505,2149698,6291456,10496739,10496835,2170273,6291456,2149762,2105825,2111713,2111713,2111713,2111713,2168673]), - new Uint32Array([6291456,2143490,2143490,2143490,2171649,6291456,2171681,2171713,2171745,6291456,2171777,6291456,2171809,6291456,2171841,6291456]), - new Uint32Array([2159106,2159106,2159170,2159170,2159234,2159234,2159298,2159298,2159298,2159362,2159362,2159362,2106401,2106401,2106401,2106401]), - new Uint32Array([2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865,2113153,2108481,2113345,2113441,2098209,2111137]), - new Uint32Array([2108417,2181217,2181249,2181281,2170433,2170401,2181313,2181345,2181377,2181409,2181441,2181473,2181505,2181537,2170529,2181569]), - new Uint32Array([2218433,2245761,2245793,2245825,2245857,2245890,2245953,2245986,2209665,2246050,2246113,2246146,2246210,2246274,2246337,2246369]), - new Uint32Array([2230754,2230818,2230882,0,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([6291456,0,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,0,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2184129,6291456,2184161,6291456,2184193,6291456,6291456,6291456,6291456,6291456,2146818,2183361,6291456,6291456,2142978,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2135170,2097506,2130691,2130787,2130883,2163970,2164034,2164098,2164162,2164226,2164290,2164354,2164418,2164482,2164546,2133122]), - new Uint32Array([2108515,2108611,2100740,2108707,2108803,2108899,2108995,2109091,2109187,2109283,2109379,2109475,2109571,2109667,2109763,2100738]), - new Uint32Array([2102788,2102916,2103044,2120515,2103172,2120611,2120707,2098373,2103300,2120803,2120899,2120995,2103428,2103556,2121091,2121187]), - new Uint32Array([2158082,2158146,0,2158210,2158274,0,2158338,2158402,2158466,2129922,2158530,2158594,2158658,2158722,2158786,2158850]), - new Uint32Array([10499619,10499715,10499811,10499907,10500003,10500099,10500195,10500291,10500387,10500483,10500579,10500675,10500771,10500867,10500963,10501059]), - new Uint32Array([2239585,2239618,2239681,2239713,0,2191969,2239745,2239777,2192033,2239809,2239841,2239874,2239937,2239970,2240033,2240065]), - new Uint32Array([2252705,2252738,2252801,2252833,2252865,2252897,2252930,2252994,2253057,2253089,2253121,2253154,2253217,2253250,2219361,2219361]), - new Uint32Array([2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,2108193,2112481,2112577,2098177,2098305,2108321,2108289,2100865]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,10538050,10538114,10538178,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([2226402,2226466,2226530,2226594,2226658,2226722,2226786,2226850,2226914,2226978,2227042,2227106,2227170,2227234,2227298,2227362]), - new Uint32Array([23068672,6291456,6291456,6291456,6291456,2144066,2144130,2144194,2144258,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,23068672,23068672,23068672,6291456,23068672,23068672]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0]), - new Uint32Array([2124674,2124770,2123875,2123971,2124067,2124163,2124259,2124355,2124451,2124547,2124643,2124739,2124835,2124931,2125027,2125123]), - new Uint32Array([2168065,6291456,2168097,6291456,2168129,6291456,2168161,6291456,2168193,6291456,2168225,6291456,2168257,6291456,2168289,6291456]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0]), - new Uint32Array([23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,2100610,2100611,6291456,2107842,2107843,6291456,6291456,6291456,6291456,10537922,6291456,10537986,6291456]), - new Uint32Array([2174849,2174881,2174913,2174945,2174977,2175009,2175041,2175073,2175105,2175137,2175169,2175201,2175233,2175265,2175297,2175329]), - new Uint32Array([2154562,2154626,2154690,2154754,2141858,2154818,2154882,2127298,2154946,2127298,2155010,2155074,2155138,2155202,2155266,2155202]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456,6291456,6291456,6291456,6291456,23068672,0]), - new Uint32Array([2200641,2150786,2150850,2150914,2150978,2151042,2106562,2151106,2150562,2151170,2151234,2151298,2151362,2151426,2151490,2151554]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,23068672,0,0,0,0,0,0,0,0,6291456,6291456]), - new Uint32Array([2220289,2220289,2220321,2220321,2220321,2220321,2220353,2220353,2220353,2220353,2220385,2220385,2220385,2220385,2220417,2220417]), - new Uint32Array([2155330,2155394,0,2155458,2155522,2155586,2105732,0,2155650,2155714,2155778,2125314,2155842,2155906,2126274,2155970]), - new Uint32Array([23068672,23068672,23068672,23068672,23068672,6291456,6291456,23068672,23068672,6291456,23068672,23068672,23068672,23068672,6291456,6291456]), - new Uint32Array([6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,6291456,0,0,0,0,0,0]), - new Uint32Array([2097729,2106017,2106017,2106017,2106017,2131297,2131297,2131297,2131297,2106081,2106081,2162049,2162049,2105953,2105953,2162337]), - new Uint32Array([2097185,2097697,2097697,2097697,2097697,2135777,2135777,2135777,2135777,2097377,2097377,2097377,2097377,2097601,2097601,2097217]), - new Uint32Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23068672]), - new Uint32Array([2139331,2139427,2139523,2139043,2133571,2132611,2139619,2139715,0,0,0,0,0,0,0,0]), - new Uint32Array([2174113,2174145,2100897,2098177,2108289,2100865,2173601,2173633,2173985,2174113,2174145,6291456,6291456,6291456,6291456,6291456]), - new Uint32Array([6291456,6291456,23068672,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456,23068672,6291456,6291456,6291456,6291456]), - new Uint32Array([23068672,23068672,18923778,23068672,23068672,23068672,23068672,18923842,23068672,23068672,23068672,23068672,18923906,23068672,23068672,23068672]), - new Uint32Array([2134145,2097153,2134241,0,2132705,2130977,2160065,2131297,0,2133089,0,2133857,0,0,0,0]), - new Uint32Array([6291456,6291456,6291456,6291456,0,0,0,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2177537,6291456,2177569,6291456,2177601,6291456,2177633,6291456,2177665,6291456,2177697,6291456,2177729,6291456,2177761,6291456]), - new Uint32Array([2212481,2212513,2212545,2212577,2197121,2212609,2212641,2212673,2212705,2212737,2212769,2212801,2212833,2212865,2212897,2212929]), - new Uint32Array([6291456,6291456,23068672,23068672,23068672,6291456,6291456,0,0,0,0,0,0,0,0,0]), - new Uint32Array([2098241,2108353,2170209,2105825,2111713,2100897,2111905,2105473,2105569,2105601,2112289,6291456,2108193,2172417,2112481,2098177]), - new Uint32Array([6291456,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,23068672,6291456,6291456]), -]; -var blockIdxes = new Uint16Array([616,616,565,147,161,411,330,2,131,131,328,454,241,408,86,86,696,113,285,350,325,301,473,214,639,232,447,64,369,598,124,672,567,223,621,154,107,86,86,86,86,86,86,505,86,68,634,86,218,218,218,218,486,218,218,513,188,608,216,86,217,463,668,85,700,360,184,86,86,86,647,402,153,10,346,718,662,260,145,298,117,1,443,342,138,54,563,86,240,572,218,70,387,86,118,460,641,602,86,86,306,218,86,692,86,86,86,86,86,162,707,86,458,26,86,218,638,86,86,86,86,86,65,449,86,86,306,183,86,58,391,667,86,157,131,131,131,131,86,433,131,406,31,218,247,86,86,693,218,581,351,86,438,295,69,462,45,126,173,650,14,295,69,97,168,187,641,78,523,390,69,108,287,664,173,219,83,295,69,108,431,426,173,694,412,115,628,52,257,398,641,118,501,121,69,579,151,423,173,620,464,121,69,382,151,476,173,27,53,121,86,594,578,226,173,86,632,130,86,96,228,268,641,622,563,86,86,21,148,650,131,131,321,43,144,343,381,531,131,131,178,20,86,399,156,375,164,541,30,60,715,198,92,118,131,131,86,86,306,407,86,280,457,196,488,358,131,131,244,86,86,143,86,86,86,86,86,667,563,86,86,86,86,86,86,86,86,86,86,86,86,86,336,363,86,86,336,86,86,380,678,67,86,86,86,678,86,86,86,512,86,307,86,708,86,86,86,86,86,528,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,563,307,86,86,86,86,86,104,450,337,86,720,86,32,450,397,86,86,86,587,218,558,708,708,293,708,86,86,86,86,86,694,205,86,8,86,86,86,86,549,86,667,697,697,679,86,458,460,86,86,650,86,708,543,86,86,86,245,86,86,86,140,218,127,708,708,458,197,131,131,131,131,500,86,86,483,251,86,306,510,515,86,722,86,86,86,65,201,86,86,483,580,470,86,86,86,368,131,131,131,694,114,110,555,86,86,123,721,163,142,713,418,86,317,675,209,218,218,218,371,545,592,629,490,603,199,46,320,525,680,310,279,388,111,42,252,593,607,235,617,410,377,50,548,135,356,17,520,189,116,392,600,349,332,482,699,690,535,119,106,451,71,152,667,131,218,218,265,671,637,492,504,533,683,269,269,658,86,86,86,86,86,86,86,86,86,491,619,86,86,6,86,86,86,86,86,86,86,86,86,86,86,229,86,86,86,86,86,86,86,86,86,86,86,86,667,86,86,171,131,118,131,656,206,234,571,89,334,670,246,311,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,534,86,86,86,86,86,86,82,86,86,86,86,86,430,86,86,86,86,86,86,86,86,86,599,86,324,86,470,69,640,264,131,626,101,174,86,86,667,233,105,73,374,394,221,204,84,28,326,86,86,471,86,86,86,109,573,86,171,200,200,200,200,218,218,86,86,86,86,460,131,131,131,86,506,86,86,86,86,86,220,404,34,614,47,442,305,25,612,338,601,648,7,344,255,131,131,51,86,312,507,563,86,86,86,86,588,86,86,86,86,86,530,511,86,458,3,435,384,556,522,230,527,86,118,86,86,717,86,137,273,79,181,484,23,93,112,655,249,417,703,370,87,98,313,684,585,155,465,596,481,695,18,416,428,61,701,706,282,643,495,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,307,86,86,86,171,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,650,131,422,542,420,263,24,172,86,86,86,86,86,566,86,86,132,540,395,353,494,519,19,485,284,472,131,131,131,16,714,86,211,708,86,86,86,694,698,86,86,483,704,708,218,272,86,86,120,86,159,478,86,307,247,86,86,663,597,459,627,667,86,86,277,455,39,302,86,250,86,86,86,271,99,452,306,281,329,400,200,86,86,362,549,352,646,461,323,586,86,86,4,708,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,717,86,518,86,86,650,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,125,554,480,300,613,72,333,288,561,544,604,48,719,91,169,176,590,224,76,191,29,559,560,231,537,166,477,538,256,437,131,131,469,167,40,0,685,266,441,705,239,642,475,568,640,610,299,673,517,318,385,22,202,180,179,359,424,215,90,66,521,653,467,682,453,409,479,88,131,661,35,303,15,262,666,630,712,131,131,618,659,175,218,195,347,193,227,261,150,165,709,546,294,569,710,270,413,376,524,55,242,38,419,529,170,657,3,304,122,379,278,131,651,86,67,576,458,458,131,131,86,86,86,86,86,86,86,118,309,86,86,547,86,86,86,86,667,650,664,131,131,86,86,56,131,131,131,131,131,131,131,131,86,307,86,86,86,664,238,650,86,86,717,86,118,86,86,315,86,59,86,86,574,549,131,131,340,57,436,86,86,86,86,86,86,458,708,499,691,62,86,650,86,86,694,86,86,86,319,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,86,549,694,131,131,131,131,131,131,131,131,131,77,86,86,139,86,502,86,86,86,667,595,131,131,131,86,12,86,13,86,609,131,131,131,131,86,86,86,625,86,669,86,86,182,129,86,5,694,104,86,86,86,86,131,131,86,86,386,171,86,86,86,345,86,324,86,589,86,213,36,131,131,131,131,131,86,86,86,86,104,131,131,131,141,290,80,677,86,86,86,267,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,667,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,515,86,86,33,136,669,86,711,515,86,86,550,640,86,104,708,515,86,159,372,717,86,86,444,515,86,86,663,37,86,563,460,86,390,624,702,131,131,131,131,389,59,708,86,86,341,208,708,635,295,69,108,431,508,100,190,131,131,131,131,131,131,131,131,86,86,86,649,516,660,131,131,86,86,86,218,631,708,131,131,131,131,131,131,131,131,131,131,86,86,341,575,238,514,131,131,86,86,86,218,291,708,307,131,86,86,306,367,708,131,131,131,86,378,697,86,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,615,253,86,86,86,292,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,104,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,69,86,341,553,549,86,307,86,86,645,275,455,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,708,131,131,131,131,131,131,86,86,86,86,86,86,667,460,86,86,86,86,86,86,86,86,86,86,86,86,717,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,667,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,104,86,667,459,131,131,131,131,131,131,86,458,225,86,86,86,516,549,11,390,405,86,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,460,44,218,197,711,515,131,131,131,131,664,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,307,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,308,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,118,307,104,286,591,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,549,86,86,681,86,86,75,185,314,582,86,358,496,474,86,104,131,86,86,86,86,146,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,171,86,640,131,131,131,131,131,131,131,131,246,503,689,339,674,81,258,415,439,128,562,366,414,246,503,689,583,222,557,316,636,665,186,355,95,670,246,503,689,339,674,557,258,415,439,186,355,95,670,246,503,689,446,644,536,652,331,532,335,440,274,421,297,570,74,425,364,425,606,552,403,509,134,365,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,218,218,218,498,218,218,577,627,551,497,572,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,553,354,236,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,296,455,131,131,456,243,103,86,41,459,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,9,276,158,716,393,564,383,489,401,654,210,654,131,131,131,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,650,86,86,86,86,86,86,717,667,563,563,563,86,549,102,686,133,246,605,86,448,86,86,207,307,131,131,131,641,86,177,611,445,373,194,584,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,308,307,171,86,86,86,86,86,86,86,717,86,86,86,86,86,460,131,131,650,86,86,86,694,708,86,86,694,86,458,131,131,131,131,131,131,667,694,289,650,667,131,131,86,640,131,131,664,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,171,131,131,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,460,86,86,86,86,86,86,86,86,86,86,86,86,86,458,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,640,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,466,203,149,429,94,432,160,687,539,63,237,283,192,248,348,259,427,526,396,676,254,468,487,212,327,623,49,633,322,493,434,688,357,361,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131]); -var mappingStr = "صلى الله عليه وسلمجل جلالهキロメートルrad∕s2エスクードキログラムキロワットグラムトンクルゼイロサンチームパーセントピアストルファラッドブッシェルヘクタールマンションミリバールレントゲン′′′′1⁄10viii(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)∫∫∫∫(오전)(오후)アパートアルファアンペアイニングエーカーカラットカロリーキュリーギルダークローネサイクルシリングバーレルフィートポイントマイクロミクロンメガトンリットルルーブル株式会社kcalm∕s2c∕kgاكبرمحمدصلعمرسولریال1⁄41⁄23⁄4 ̈́ྲཱྀླཱྀ ̈͂ ̓̀ ̓́ ̓͂ ̔̀ ̔́ ̔͂ ̈̀‵‵‵a/ca/sc/oc/utelfax1⁄71⁄91⁄32⁄31⁄52⁄53⁄54⁄51⁄65⁄61⁄83⁄85⁄87⁄8xii0⁄3∮∮∮(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)(v)(w)(x)(y)(z)::====(ᄀ)(ᄂ)(ᄃ)(ᄅ)(ᄆ)(ᄇ)(ᄉ)(ᄋ)(ᄌ)(ᄎ)(ᄏ)(ᄐ)(ᄑ)(ᄒ)(가)(나)(다)(라)(마)(바)(사)(아)(자)(차)(카)(타)(파)(하)(주)(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(月)(火)(水)(木)(金)(土)(日)(株)(有)(社)(名)(特)(財)(祝)(労)(代)(呼)(学)(監)(企)(資)(協)(祭)(休)(自)(至)pte10月11月12月ergltdアールインチウォンオンスオームカイリガロンガンマギニーケースコルナコーポセンチダースノットハイツパーツピクルフランペニヒヘルツペンスページベータボルトポンドホールホーンマイルマッハマルクヤードヤールユアンルピー10点11点12点13点14点15点16点17点18点19点20点21点22点23点24点hpabardm2dm3khzmhzghzthzmm2cm2km2mm3cm3km3kpampagpalogmilmolppmv∕ma∕m10日11日12日13日14日15日16日17日18日19日20日21日22日23日24日25日26日27日28日29日30日31日galffifflשּׁשּׂ ٌّ ٍّ َّ ُّ ِّ ّٰـَّـُّـِّتجمتحجتحمتخمتمجتمحتمخجمححميحمىسحجسجحسجىسمحسمجسممصححصممشحمشجيشمخشممضحىضخمطمحطممطميعجمعممعمىغممغميغمىفخمقمحقمملحملحيلحىلججلخملمحمحجمحيمجحمجممخممجخهمجهممنحمنحىنجمنجىنمينمىيممبخيتجيتجىتخيتخىتميتمىجميجحىجمىسخىصحيشحيضحيلجيلمييحييجييميمميقمينحيعميكمينجحمخيلجمكممجحيحجيمجيفميبحيسخينجيصلےقلے𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱𝅘𝅥𝅲𝆹𝅥𝅮𝆺𝅥𝅮𝆹𝅥𝅯𝆺𝅥𝅯〔s〕ppv〔本〕〔三〕〔二〕〔安〕〔点〕〔打〕〔盗〕〔勝〕〔敗〕 ̄ ́ ̧ssi̇ijl·ʼndžljnjdz ̆ ̇ ̊ ̨ ̃ ̋ ιեւاٴوٴۇٴيٴक़ख़ग़ज़ड़ढ़फ़य़ড়ঢ়য়ਲ਼ਸ਼ਖ਼ਗ਼ਜ਼ਫ਼ଡ଼ଢ଼ําໍາຫນຫມགྷཌྷདྷབྷཛྷཀྵཱཱིུྲྀླྀྒྷྜྷྡྷྦྷྫྷྐྵaʾἀιἁιἂιἃιἄιἅιἆιἇιἠιἡιἢιἣιἤιἥιἦιἧιὠιὡιὢιὣιὤιὥιὦιὧιὰιαιάιᾶι ͂ὴιηιήιῆιὼιωιώιῶι ̳!! ̅???!!?rs°c°fnosmtmivix⫝̸ ゙ ゚よりコト333435참고주의363738394042444546474849503月4月5月6月7月8月9月hgevギガデシドルナノピコビルペソホンリラレムdaauovpciu平成昭和大正明治naμakakbmbgbpfnfμfμgmgμlmldlklfmnmμmpsnsμsmsnvμvkvpwnwμwmwkwkωmωbqcccddbgyhainkkktlnlxphprsrsvwbstմնմեմիվնմխיִײַשׁשׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּתּוֹבֿכֿפֿאלئائەئوئۇئۆئۈئېئىئجئحئمئيبجبمبىبيتىتيثجثمثىثيخحضجضمطحظمغجفجفحفىفيقحقىقيكاكجكحكخكلكىكينخنىنيهجهىهييىذٰرٰىٰئرئزئنبزبنترتزتنثرثزثنمانرنزننيريزئخئهبهتهصخنههٰثهسهشهطىطيعىعيغىغيسىسيشىشيصىصيضىضيشخشرسرصرضراً ًـًـّ ْـْلآلألإ𝅗𝅥0,1,2,3,4,5,6,7,8,9,wzhvsdwcmcmddjほかココàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįĵķĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷÿźżɓƃƅɔƈɖɗƌǝəɛƒɠɣɩɨƙɯɲɵơƣƥʀƨʃƭʈưʊʋƴƶʒƹƽǎǐǒǔǖǘǚǜǟǡǣǥǧǩǫǭǯǵƕƿǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟƞȣȥȧȩȫȭȯȱȳⱥȼƚⱦɂƀʉʌɇɉɋɍɏɦɹɻʁʕͱͳʹͷ;ϳέίόύβγδεζθκλνξοπρστυφχψϊϋϗϙϛϝϟϡϣϥϧϩϫϭϯϸϻͻͼͽѐёђѓєѕіїјљњћќѝўџабвгдежзийклмнопрстуфхцчшщъыьэюяѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯաբգդզէըթժլծկհձղճյշոչպջռստրցփքօֆ་ⴧⴭნᏰᏱᏲᏳᏴᏵꙋɐɑᴂɜᴖᴗᴝᴥɒɕɟɡɥɪᵻʝɭᶅʟɱɰɳɴɸʂƫᴜʐʑḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿἐἑἒἓἔἕἰἱἲἳἴἵἶἷὀὁὂὃὄὅὑὓὕὗᾰᾱὲΐῐῑὶΰῠῡὺῥ`ὸ‐+−∑〈〉ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞⱡɫᵽɽⱨⱪⱬⱳⱶȿɀⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳬⳮⳳⵡ母龟丨丶丿乙亅亠人儿入冂冖冫几凵刀力勹匕匚匸卜卩厂厶又口囗士夂夊夕女子宀寸小尢尸屮山巛工己巾干幺广廴廾弋弓彐彡彳心戈戶手支攴文斗斤方无曰欠止歹殳毋比毛氏气爪父爻爿片牙牛犬玄玉瓜瓦甘生用田疋疒癶白皮皿目矛矢石示禸禾穴立竹米糸缶网羊羽老而耒耳聿肉臣臼舌舛舟艮色艸虍虫血行衣襾見角言谷豆豕豸貝赤走足身車辛辰辵邑酉釆里長門阜隶隹雨靑非面革韋韭音頁風飛食首香馬骨高髟鬥鬯鬲鬼魚鳥鹵鹿麥麻黃黍黑黹黽鼎鼓鼠鼻齊齒龍龜龠.〒卄卅ᄁᆪᆬᆭᄄᆰᆱᆲᆳᆴᆵᄚᄈᄡᄊ짜ᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵᄔᄕᇇᇈᇌᇎᇓᇗᇙᄜᇝᇟᄝᄞᄠᄢᄣᄧᄩᄫᄬᄭᄮᄯᄲᄶᅀᅇᅌᇱᇲᅗᅘᅙᆄᆅᆈᆑᆒᆔᆞᆡ上中下甲丙丁天地問幼箏우秘男適優印注項写左右医宗夜テヌモヨヰヱヲꙁꙃꙅꙇꙉꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛꜣꜥꜧꜩꜫꜭꜯꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝺꝼᵹꝿꞁꞃꞅꞇꞌꞑꞓꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩɬʞʇꭓꞵꞷꬷꭒᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯ豈更賈滑串句契喇奈懶癩羅蘿螺裸邏樂洛烙珞落酪駱亂卵欄爛蘭鸞嵐濫藍襤拉臘蠟廊朗浪狼郎來冷勞擄櫓爐盧蘆虜路露魯鷺碌祿綠菉錄論壟弄籠聾牢磊賂雷壘屢樓淚漏累縷陋勒肋凜凌稜綾菱陵讀拏諾丹寧怒率異北磻便復不泌數索參塞省葉說殺沈拾若掠略亮兩凉梁糧良諒量勵呂廬旅濾礪閭驪麗黎曆歷轢年憐戀撚漣煉璉秊練聯輦蓮連鍊列劣咽烈裂廉念捻殮簾獵令囹嶺怜玲瑩羚聆鈴零靈領例禮醴隸惡了僚寮尿料燎療蓼遼暈阮劉杻柳流溜琉留硫紐類戮陸倫崙淪輪律慄栗隆利吏履易李梨泥理痢罹裏裡離匿溺吝燐璘藺隣鱗麟林淋臨笠粒狀炙識什茶刺切度拓糖宅洞暴輻降廓兀嗀塚晴凞猪益礼神祥福靖精蘒諸逸都飯飼館鶴郞隷侮僧免勉勤卑喝嘆器塀墨層悔慨憎懲敏既暑梅海渚漢煮爫琢碑祉祈祐祖禍禎穀突節縉繁署者臭艹著褐視謁謹賓贈辶難響頻恵𤋮舘並况全侀充冀勇勺啕喙嗢墳奄奔婢嬨廒廙彩徭惘慎愈慠戴揄搜摒敖望杖滛滋瀞瞧爵犯瑱甆画瘝瘟盛直睊着磌窱类絛缾荒華蝹襁覆調請諭變輸遲醙鉶陼韛頋鬒𢡊𢡄𣏕㮝䀘䀹𥉉𥳐𧻓齃龎עםٱٻپڀٺٿٹڤڦڄڃچڇڍڌڎڈژڑکگڳڱںڻۀہھۓڭۋۅۉ、〖〗—–_{}【】《》「」『』[]#&*-<>\\$%@ءؤة\"'^|~⦅⦆・ゥャ¢£¬¦¥₩│←↑→↓■○𐐨𐐩𐐪𐐫𐐬𐐭𐐮𐐯𐐰𐐱𐐲𐐳𐐴𐐵𐐶𐐷𐐸𐐹𐐺𐐻𐐼𐐽𐐾𐐿𐑀𐑁𐑂𐑃𐑄𐑅𐑆𐑇𐑈𐑉𐑊𐑋𐑌𐑍𐑎𐑏𐓘𐓙𐓚𐓛𐓜𐓝𐓞𐓟𐓠𐓡𐓢𐓣𐓤𐓥𐓦𐓧𐓨𐓩𐓪𐓫𐓬𐓭𐓮𐓯𐓰𐓱𐓲𐓳𐓴𐓵𐓶𐓷𐓸𐓹𐓺𐓻𐳀𐳁𐳂𐳃𐳄𐳅𐳆𐳇𐳈𐳉𐳊𐳋𐳌𐳍𐳎𐳏𐳐𐳑𐳒𐳓𐳔𐳕𐳖𐳗𐳘𐳙𐳚𐳛𐳜𐳝𐳞𐳟𐳠𐳡𐳢𐳣𐳤𐳥𐳦𐳧𐳨𐳩𐳪𐳫𐳬𐳭𐳮𐳯𐳰𐳱𐳲𑣀𑣁𑣂𑣃𑣄𑣅𑣆𑣇𑣈𑣉𑣊𑣋𑣌𑣍𑣎𑣏𑣐𑣑𑣒𑣓𑣔𑣕𑣖𑣗𑣘𑣙𑣚𑣛𑣜𑣝𑣞𑣟ıȷ∇∂𞤢𞤣𞤤𞤥𞤦𞤧𞤨𞤩𞤪𞤫𞤬𞤭𞤮𞤯𞤰𞤱𞤲𞤳𞤴𞤵𞤶𞤷𞤸𞤹𞤺𞤻𞤼𞤽𞤾𞤿𞥀𞥁𞥂𞥃ٮڡٯ字双多解交映無前後再新初終販声吹演投捕遊指禁空合満申割営配得可丽丸乁𠄢你侻倂偺備像㒞𠘺兔兤具𠔜㒹內𠕋冗冤仌冬𩇟刃㓟刻剆剷㔕包匆卉博即卽卿𠨬灰及叟𠭣叫叱吆咞吸呈周咢哶唐啓啣善喫喳嗂圖圗噑噴壮城埴堍型堲報墬𡓤売壷夆夢奢𡚨𡛪姬娛娧姘婦㛮嬈嬾𡧈寃寘寳𡬘寿将㞁屠峀岍𡷤嵃𡷦嵮嵫嵼巡巢㠯巽帨帽幩㡢𢆃㡼庰庳庶𪎒𢌱舁弢㣇𣊸𦇚形彫㣣徚忍志忹悁㤺㤜𢛔惇慈慌慺憲憤憯懞戛扝抱拔捐𢬌挽拼捨掃揤𢯱搢揅掩㨮摩摾撝摷㩬敬𣀊旣書晉㬙㬈㫤冒冕最暜肭䏙朡杞杓𣏃㭉柺枅桒𣑭梎栟椔楂榣槪檨𣚣櫛㰘次𣢧歔㱎歲殟殻𣪍𡴋𣫺汎𣲼沿泍汧洖派浩浸涅𣴞洴港湮㴳滇𣻑淹潮𣽞𣾎濆瀹瀛㶖灊災灷炭𠔥煅𤉣熜爨牐𤘈犀犕𤜵𤠔獺王㺬玥㺸瑇瑜璅瓊㼛甤𤰶甾𤲒𢆟瘐𤾡𤾸𥁄㿼䀈𥃳𥃲𥄙𥄳眞真瞋䁆䂖𥐝硎䃣𥘦𥚚𥛅秫䄯穊穏𥥼𥪧䈂𥮫篆築䈧𥲀糒䊠糨糣紀𥾆絣䌁緇縂繅䌴𦈨𦉇䍙𦋙罺𦌾羕翺𦓚𦔣聠𦖨聰𣍟䏕育脃䐋脾媵𦞧𦞵𣎓𣎜舄辞䑫芑芋芝劳花芳芽苦𦬼茝荣莭茣莽菧荓菊菌菜𦰶𦵫𦳕䔫蓱蓳蔖𧏊蕤𦼬䕝䕡𦾱𧃒䕫虐虧虩蚩蚈蜎蛢蜨蝫螆蟡蠁䗹衠𧙧裗裞䘵裺㒻𧢮𧥦䚾䛇誠𧲨貫賁贛起𧼯𠠄跋趼跰𠣞軔𨗒𨗭邔郱鄑𨜮鄛鈸鋗鋘鉼鏹鐕𨯺開䦕閷𨵷䧦雃嶲霣𩅅𩈚䩮䩶韠𩐊䪲𩒖頩𩖶飢䬳餩馧駂駾䯎𩬰鱀鳽䳎䳭鵧𪃎䳸𪄅𪈎𪊑䵖黾鼅鼏鼖𪘀"; - -function mapChar(codePoint) { - if (codePoint >= 0x30000) { - // High planes are special cased. - if (codePoint >= 0xE0100 && codePoint <= 0xE01EF) - return 18874368; - return 0; - } - return blocks[blockIdxes[codePoint >> 4]][codePoint & 15]; -} - -return { - mapStr: mappingStr, - mapChar: mapChar -}; -})); diff --git a/truebit-implementation/node_modules/idna-uts46-hx/mocha.opts b/truebit-implementation/node_modules/idna-uts46-hx/mocha.opts deleted file mode 100644 index efee65e3..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/mocha.opts +++ /dev/null @@ -1,6 +0,0 @@ ---recursive ---bail ---inline-diffs ---reporter spec ---check-leaks ---ui tdd diff --git a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/LICENSE-MIT.txt b/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7e..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/README.md b/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/README.md deleted file mode 100644 index ee2f9d63..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/codecov/c/github/bestiejs/punycode.js.svg)](https://codecov.io/gh/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) - -Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). - -This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: - -* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) -* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) -* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) -* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) -* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) - -This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). - -The current version supports recent versions of Node.js only. It provides a CommonJS module and an ES6 module. For the old version that offers the same functionality with broader support, including Rhino, Ringo, Narwhal, and web browsers, see [v1.4.1](https://github.com/bestiejs/punycode.js/releases/tag/v1.4.1). - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install punycode --save -``` - -In [Node.js](https://nodejs.org/): - -```js -const punycode = require('punycode'); -``` - -## API - -### `punycode.decode(string)` - -Converts a Punycode string of ASCII symbols to a string of Unicode symbols. - -```js -// decode domain name parts -punycode.decode('maana-pta'); // 'mañana' -punycode.decode('--dqo34k'); // '☃-⌘' -``` - -### `punycode.encode(string)` - -Converts a string of Unicode symbols to a Punycode string of ASCII symbols. - -```js -// encode domain name parts -punycode.encode('mañana'); // 'maana-pta' -punycode.encode('☃-⌘'); // '--dqo34k' -``` - -### `punycode.toUnicode(input)` - -Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. - -```js -// decode domain names -punycode.toUnicode('xn--maana-pta.com'); -// → 'mañana.com' -punycode.toUnicode('xn----dqo34k.com'); -// → '☃-⌘.com' - -// decode email addresses -punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); -// → 'джумла@джpумлатест.bрфa' -``` - -### `punycode.toASCII(input)` - -Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. - -```js -// encode domain names -punycode.toASCII('mañana.com'); -// → 'xn--maana-pta.com' -punycode.toASCII('☃-⌘.com'); -// → 'xn----dqo34k.com' - -// encode email addresses -punycode.toASCII('джумла@джpумлатест.bрфa'); -// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' -``` - -### `punycode.ucs2` - -#### `punycode.ucs2.decode(string)` - -Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. - -```js -punycode.ucs2.decode('abc'); -// → [0x61, 0x62, 0x63] -// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: -punycode.ucs2.decode('\uD834\uDF06'); -// → [0x1D306] -``` - -#### `punycode.ucs2.encode(codePoints)` - -Creates a string based on an array of numeric code point values. - -```js -punycode.ucs2.encode([0x61, 0x62, 0x63]); -// → 'abc' -punycode.ucs2.encode([0x1D306]); -// → '\uD834\uDF06' -``` - -### `punycode.version` - -A string representing the current Punycode.js version number. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/package.json b/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/package.json deleted file mode 100644 index 9cb46698..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "_from": "punycode@2.1.0", - "_id": "punycode@2.1.0", - "_inBundle": false, - "_integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", - "_location": "/idna-uts46-hx/punycode", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "punycode@2.1.0", - "name": "punycode", - "escapedName": "punycode", - "rawSpec": "2.1.0", - "saveSpec": null, - "fetchSpec": "2.1.0" - }, - "_requiredBy": [ - "/idna-uts46-hx" - ], - "_resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "_shasum": "5f863edc89b96db09074bad7947bf09056ca4e7d", - "_spec": "punycode@2.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/idna-uts46-hx", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "bugs": { - "url": "https://github.com/bestiejs/punycode.js/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "deprecated": false, - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "devDependencies": { - "codecov": "^1.0.1", - "istanbul": "^0.4.1", - "mocha": "^2.5.3" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "LICENSE-MIT.txt", - "punycode.js", - "punycode.es6.js" - ], - "homepage": "https://mths.be/punycode", - "jsnext:main": "punycode.es6.js", - "jspm": { - "map": { - "./punycode.js": { - "node": "@node/punycode" - } - } - }, - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "license": "MIT", - "main": "punycode.js", - "name": "punycode", - "repository": { - "type": "git", - "url": "git+https://github.com/bestiejs/punycode.js.git" - }, - "scripts": { - "prepublish": "node scripts/prepublish.js", - "test": "mocha tests" - }, - "version": "2.1.0" -} diff --git a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/punycode.es6.js b/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/punycode.es6.js deleted file mode 100644 index 9cee4368..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/punycode.es6.js +++ /dev/null @@ -1,440 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, fn) { - const result = []; - let length = array.length; - while (length--) { - result[length] = fn(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ -function mapDomain(string, fn) { - const parts = string.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - const labels = string.split('.'); - const encoded = map(labels, fn).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = array => String.fromCodePoint(...array); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint - 0x30 < 0x0A) { - return codePoint - 0x16; - } - if (codePoint - 0x41 < 0x1A) { - return codePoint - 0x41; - } - if (codePoint - 0x61 < 0x1A) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - let oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - let inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - let basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue == n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.1.0', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -export default punycode; diff --git a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/punycode.js b/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/punycode.js deleted file mode 100644 index ea61fd0d..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/node_modules/punycode/punycode.js +++ /dev/null @@ -1,440 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, fn) { - const result = []; - let length = array.length; - while (length--) { - result[length] = fn(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ -function mapDomain(string, fn) { - const parts = string.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - const labels = string.split('.'); - const encoded = map(labels, fn).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = array => String.fromCodePoint(...array); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint - 0x30 < 0x0A) { - return codePoint - 0x16; - } - if (codePoint - 0x41 < 0x1A) { - return codePoint - 0x41; - } - if (codePoint - 0x61 < 0x1A) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - let oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - let inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - let basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue == n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.1.0', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -module.exports = punycode; diff --git a/truebit-implementation/node_modules/idna-uts46-hx/package.json b/truebit-implementation/node_modules/idna-uts46-hx/package.json deleted file mode 100644 index 10cd580e..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "idna-uts46-hx@^2.3.1", - "_id": "idna-uts46-hx@2.3.1", - "_inBundle": false, - "_integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "_location": "/idna-uts46-hx", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "idna-uts46-hx@^2.3.1", - "name": "idna-uts46-hx", - "escapedName": "idna-uts46-hx", - "rawSpec": "^2.3.1", - "saveSpec": null, - "fetchSpec": "^2.3.1" - }, - "_requiredBy": [ - "/eth-ens-namehash" - ], - "_resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "_shasum": "a1dc5c4df37eee522bf66d969cc980e00e8711f9", - "_spec": "idna-uts46-hx@^2.3.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/eth-ens-namehash", - "author": { - "name": "Kai Schwarz", - "email": "kschwarz@hexonet.net" - }, - "bugs": { - "url": "https://github.com/hexonet/idna-uts46/issues" - }, - "bundleDependencies": false, - "dependencies": { - "punycode": "2.1.0" - }, - "deprecated": false, - "description": "A UTS #46 processing algorithm for IDNA2008 strings", - "devDependencies": { - "chai": "3.5.0", - "cross-env": "4.0.0", - "istanbul": "0.4.5", - "mocha": "3.2.0", - "nyc": "10.2.0", - "requirejs-browser": "2.1.9" - }, - "engines": { - "node": ">=4.0.0" - }, - "homepage": "https://github.com/hexonet/idna-uts46", - "keywords": [ - "unicode", - "idn", - "idna", - "domain" - ], - "license": "MIT", - "main": "uts46.js", - "name": "idna-uts46-hx", - "nyc": { - "reporter": [ - "html", - "text" - ], - "exclude": [ - "**/*.spec.js", - "idna-map.js" - ] - }, - "repository": { - "type": "git", - "url": "git+https://github.com/hexonet/idna-uts46.git" - }, - "scripts": { - "test": "npm run test-COVERAGE --silent", - "test-COVERAGE": "cross-env NODE_ENV=development nyc npm run test-MOCHA --silent", - "test-MOCHA": "_mocha --opts mocha.opts $(find ./test -type f -name '*.spec.js')" - }, - "version": "2.3.1" -} diff --git a/truebit-implementation/node_modules/idna-uts46-hx/test/node_fs_shim.js b/truebit-implementation/node_modules/idna-uts46-hx/test/node_fs_shim.js deleted file mode 100644 index 2f6d07ab..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/test/node_fs_shim.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -var fs = {}; -fs.readFile = function(filename, options, callback) { - // Note: options is the optional element here, not callback. - if (arguments.length < 3) { - callback = options; - options = {}; - } - if (filename[0] === '/') - throw new Error("Don't use absolute paths!"); - var xhr = new XMLHttpRequest(); - xhr.open("GET", filename); - if (options && options.encoding) - xhr.overrideMimeType('text/plain; charset=' + options.encoding); - else { - xhr.overrideMimeType('text/plain'); - xhr.responseType = "arraybuffer"; - } - xhr.onload = function() { - if (xhr.status > 400) - callback(new Error(xhr.statusText)); - else - callback(undefined, xhr.response); - }; - xhr.onerror = function(e) { - callback(e); - }; - xhr.send(); -}; diff --git a/truebit-implementation/node_modules/idna-uts46-hx/test/test-amd.html b/truebit-implementation/node_modules/idna-uts46-hx/test/test-amd.html deleted file mode 100644 index 5e100b92..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/test/test-amd.html +++ /dev/null @@ -1,46 +0,0 @@ - - - -IDNA UTS#46 Mocha tests - - - - - - - - -
- - diff --git a/truebit-implementation/node_modules/idna-uts46-hx/test/test-idna-vector.spec.js b/truebit-implementation/node_modules/idna-uts46-hx/test/test-idna-vector.spec.js deleted file mode 100644 index d9a46660..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/test/test-idna-vector.spec.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; - -var assert = require("assert"); -var fs = require("fs"); -var uts46 = require("../uts46"); - -function matchInaneIDNARules(result, tooLong) { - var labels = result.split('.'); - - // Ignore empty leading tokens because... we have to do this to pass? But we - // can't ignore stuff in the middle! - while (labels[0].length === 0) - labels.shift(); - - // Match too short labels or too long labels (this is verify DNS length). - // Except don't error out on an empty final label (this rule is actually in - // the algorithm!). - labels = labels.map(function(label, i) { - if (label.length < 1 && i !== labels.length - 1) - throw new Error("Too short label: " + label); - else if (tooLong && label.length > 63) - throw new Error("Too long label: " + label); - return label; - }); - result = labels.join('.'); - - // This validates for the DNS length. Note that while the prose says this only - // needs to be done for ToASCII, ToUnicode checks the min (but not max!) - // length. - if (result.length < 1) - throw new Error("Too short DNS string: " + result); - else if (tooLong && result.length > 253 && - !(result.length === 254 && result[253] === '.')) - throw new Error("Too long DNS string: " + result); - return result; -} - -function toAscii(input, transitional) { - var result = uts46.toAscii(input, { - transitional: transitional, - useStd3ASCII: true - }); - result = matchInaneIDNARules(result, true); - return result; -} - -function toUnicode(input) { - var result = uts46.toUnicode(input, { - useStd3ASCII: true - }); - // ToUnicode isn't supposed to verify DNS length, but the test vectors seem to - // think that means we aren't supposed to verify overlength. - result = matchInaneIDNARules(result, false); - return result; -} - -function handleEscapes(string) { - return string.replace(/\\u([0-9a-fA-F]{4})/g, function(whole, num) { - return String.fromCharCode(parseInt(num, 16)); - }); -} - -var lineno = 0; - -function handleIdnaTestLine(line) { - lineno++; - // Ignore comments and empty lines. - line = line.split("#")[0]; - if (line.length === 0 || line.trim()==='') - return; - - var fields = line.split(/;/g).map(function(s) { - return s.trim(); - }); - - var mode = fields[0]; - var testVector = handleEscapes(fields[1]); - var unicodeData = handleEscapes(fields[2]) || testVector; - var asciiData = handleEscapes(fields[3]) || unicodeData; - - function handleMode(func, expected) { - // If this is true, we are expecting an error. However, if the only errors - // would be bidi or contextual errors, ignore it. - var expectError = expected.startsWith("["); - if (expectError && !(/[AVP]/.exec(expected))) - return; - - if (expectError) { - test(func.name + " " + line, function() { - - if (mode === "T" || mode === "B") - assert.throws(function() { - func(testVector, true); - }); - if (mode === "N" || mode === "B") - assert.throws(function() { - func(testVector, false); - }); - }); - } - else { - test(func.name + " " + line, function() { - if (expected.includes("[")) - console.log(expected); - - if (mode === "T" || mode === "B") - assert.equal(func(testVector, true), expected); - else if (mode === "N" || mode === "B") - assert.equal(func(testVector, false), expected); - }); - } - } - - handleMode(toAscii, asciiData); - handleMode(toUnicode, unicodeData); -} - -suite('IDNA test files', function() { - var data = fs.readFileSync("test/IdnaTest.txt", { - encoding: "UTF-8" - }); - data.split("\n").forEach(handleIdnaTestLine); -}); diff --git a/truebit-implementation/node_modules/idna-uts46-hx/test/test-uts46.spec.js b/truebit-implementation/node_modules/idna-uts46-hx/test/test-uts46.spec.js deleted file mode 100644 index 5f0e0b7d..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/test/test-uts46.spec.js +++ /dev/null @@ -1,383 +0,0 @@ -"use strict"; - -var assert = require("assert"); -var uts46 = require("../uts46"); - -suite('toASCII', function() { - test('Basic tests', function() { - assert.equal(uts46.toAscii("öbb.at"), "xn--bb-eka.at"); - assert.equal(uts46.toAscii("xn--bb-eka.at"), "xn--bb-eka.at"); - assert.equal(uts46.toAscii("XN--BB-EKA.AT"), "xn--bb-eka.at"); - assert.equal(uts46.toAscii("faß.de", { - transitional: true - }), "fass.de"); - assert.equal(uts46.toAscii("faß.de", { - transitional: false - }), "xn--fa-hia.de"); - assert.equal(uts46.toAscii("xn--fa-hia.de", { - transitional: true - }), "xn--fa-hia.de"); - // Default to not processing STD3 rules (that's what URL.domainToASCII - // is specifying). - assert.equal(uts46.toAscii("not=std3"), "not=std3"); - assert.throws(function() { - uts46.toAscii("not=std3", { - useStd3ASCII: true - }); - }); - assert.throws(function() { - uts46.toAscii(String.fromCodePoint(0xd0000)); - }); - // Check verify DNS length - assert.equal(uts46.toAscii("", { - verifyDnsLength: false - }), ""); - assert.throws(function() { - uts46.toAscii("", { - verifyDnsLength: true - }); - }); - }); - test('Verify DNS length parameter', function() { - assert.throws(function() { - uts46.toAscii("this..is.almost.right", { - verifyDnsLength: true - }); - }); - assert.throws(function() { - uts46.toAscii("a.".repeat(252 / 2) + "aa", { - verifyDnsLength: true - }); - }); - assert.doesNotThrow(function() { - // Exactly 253 characters. - uts46.toAscii("a.".repeat(252 / 2) + "a", { - verifyDnsLength: true - }); - }); - assert.throws(function() { - uts46.toAscii("a".repeat(64), { - verifyDnsLength: true - }); - }); - assert.doesNotThrow(function() { - uts46.toAscii("a".repeat(63), { - verifyDnsLength: true - }); - }); - // Default is to not verify it. - assert.equal(uts46.toAscii(""), ""); - }); - test('Defaults to transitional', function() { - assert.equal("fass.de", uts46.toAscii("faß.de")); - }); - test('Non-BMP characters', function() { - assert.equal(uts46.toAscii("\ud83d\udca9"), "xn--ls8h"); - // This non-BMP character gets mapped to another non-BMP character. - assert.equal(uts46.toAscii("\ud87e\udcca"), "xn--w60j"); - // ... and let's throw in a variant selector before it (which gets ignored)! - assert.equal(uts46.toAscii("\udb40\udd00\ud87e\udcca"), "xn--w60j"); - }); -}); - -suite('toUnicode', function() { - test('Basic tests', function() { - assert.equal(uts46.toUnicode("öbb.at"), "öbb.at"); - assert.equal(uts46.toUnicode("Öbb.at"), "öbb.at"); - assert.equal(uts46.toUnicode("O\u0308bb.at"), "öbb.at"); - assert.equal(uts46.toUnicode("xn--bb-eka.at"), "öbb.at"); - assert.equal(uts46.toUnicode("faß.de"), "faß.de"); - assert.equal(uts46.toUnicode("fass.de"), "fass.de"); - assert.equal(uts46.toUnicode("xn--fa-hia.de"), "faß.de"); - // Default to not processing STD3 rules (that's what URL.domainToASCII - // is specifying). - assert.equal(uts46.toUnicode("not=std3"), "not=std3"); - assert.throws(function() { - uts46.toUnicode("not=std3", { - useStd3ASCII: true - }); - }); - assert.throws(function() { - uts46.toUnicode(String.fromCodePoint(0xd0000)); - }); - }); - test('Non-BMP characters', function() { - assert.equal(uts46.toUnicode("\ud83d\udca9"), "\ud83d\udca9"); - // This non-BMP character gets mapped to another non-BMP character. - assert.equal(uts46.toUnicode("\ud87e\udcca"), "\ud84c\udc0a"); - // ... and let's throw in a variant selector before it (which gets ignored)! - assert.equal(uts46.toUnicode("\udb40\udd00\ud87e\udcca"), "\ud84c\udc0a"); - }); -}); - -suite('unicode.org', function() { - test('Unicode Utilities: Internationalized Domain Names (IDN)', function() { //http://unicode.org/cldr/utility/idna.jsp - //NOTE: some of the results below need further research as they are marked - //as error cases on the web page but working here (or otherwise) - - //fass.de - assert.equal(uts46.toUnicode("fass.de"), "fass.de"); - assert.equal(uts46.toAscii("fass.de", { - transitional: true - }), "fass.de"); - assert.equal(uts46.toAscii("fass.de", { - transitional: false - }), "fass.de"); - - //faß.de - assert.equal(uts46.toUnicode("faß.de"), "faß.de"); - assert.equal(uts46.toAscii("faß.de", { - transitional: true - }), "fass.de"); - assert.equal(uts46.toAscii("faß.de", { - transitional: false - }), "xn--fa-hia.de"); - - //fäß.de - assert.equal(uts46.toUnicode("fäß.de"), "fäß.de"); - assert.equal(uts46.toAscii("fäß.de", { - transitional: true - }), "xn--fss-qla.de"); - assert.equal(uts46.toAscii("fäß.de", { - transitional: false - }), "xn--f-qfao.de"); - - //xn--fa-hia.de - assert.equal(uts46.toUnicode("xn--fa-hia.de"), "faß.de"); - assert.equal(uts46.toAscii("xn--fa-hia.de", { - transitional: true - }), "xn--fa-hia.de"); - assert.equal(uts46.toAscii("xn--fa-hia.de", { - transitional: false - }), "xn--fa-hia.de"); - - //₹.com - assert.equal(uts46.toUnicode("₹.com"), "₹.com"); //no error thrown - assert.equal(uts46.toAscii("₹.com", { - transitional: true - }), "xn--yzg.com"); - assert.equal(uts46.toAscii("₹.com", { - transitional: false - }), "xn--yzg.com"); //no error thrown - - //𑀓.com - assert.equal(uts46.toUnicode("𑀓.com"), "𑀓.com"); //no error thrown - assert.equal(uts46.toAscii("𑀓.com", { - transitional: true - }), "xn--n00d.com"); - assert.equal(uts46.toAscii("𑀓.com", { - transitional: false - }), "xn--n00d.com"); - - // \u0080.com - assert.throws(function() { - uts46.toUnicode("\u0080.com"); - }); - assert.throws(function() { - uts46.toAscii("\u0080.com", { - transitional: true - }); - }); - assert.throws(function() { - uts46.toAscii("\u0080.com", { - transitional: false - }); - }); - - //xn--a.com [might be wrong one compare results in web] - assert.throws(function() { - uts46.toUnicode("xn--a.com"); - }); - assert.throws(function() { - uts46.toAscii("xn--a.com", { - transitional: true - }); - }); - assert.throws(function() { - uts46.toAscii("xn--a.com", { - transitional: false - }); - }); - - /* jshint -W100 */ - //a‌b - assert.equal(uts46.toUnicode("a‌b"), "a\u200Cb"); //no error thrown - assert.equal(uts46.toAscii("a‌b", { - transitional: true - }), "ab"); - assert.equal(uts46.toAscii("a‌b", { - transitional: false - }), "xn--ab-j1t"); - /* jshint +W100 */ - - //xn--ab-j1t - assert.equal(uts46.toUnicode("xn--ab-j1t"), "a\u200Cb"); //no error thrown - assert.equal(uts46.toAscii("xn--ab-j1t", { //no error thrown - transitional: true - }), "xn--ab-j1t"); - assert.equal(uts46.toAscii("xn--ab-j1t", { - transitional: false - }), "xn--ab-j1t"); - - //öbb.at - assert.equal(uts46.toUnicode("öbb.at"), "öbb.at"); - assert.equal(uts46.toAscii("öbb.at", { - transitional: true - }), "xn--bb-eka.at"); - assert.equal(uts46.toAscii("öbb.at", { - transitional: false - }), "xn--bb-eka.at"); - - //ÖBB.at - assert.equal(uts46.toUnicode("ÖBB.at"), "öbb.at"); - assert.equal(uts46.toAscii("ÖBB.at", { - transitional: true - }), "xn--bb-eka.at"); - assert.equal(uts46.toAscii("ÖBB.at", { - transitional: false - }), "xn--bb-eka.at"); - - //ȡog.de - assert.equal(uts46.toUnicode("ȡog.de"), "ȡog.de"); - assert.equal(uts46.toAscii("ȡog.de", { - transitional: true - }), "xn--og-09a.de"); - assert.equal(uts46.toAscii("ȡog.de", { - transitional: false - }), "xn--og-09a.de"); - - //☕.de - assert.equal(uts46.toUnicode("☕.de"), "☕.de"); - assert.equal(uts46.toAscii("☕.de", { - transitional: true - }), "xn--53h.de"); - assert.equal(uts46.toAscii("☕.de", { - transitional: false - }), "xn--53h.de"); - - //I♥NY.de - assert.equal(uts46.toUnicode("I♥NY.de"), "i♥ny.de"); - assert.equal(uts46.toAscii("I♥NY.de", { - transitional: true - }), "xn--iny-zx5a.de"); - assert.equal(uts46.toAscii("I♥NY.de", { - transitional: false - }), "xn--iny-zx5a.de"); - - //ABC・日本.co.jp - assert.equal(uts46.toUnicode("ABC・日本.co.jp"), "abc・日本.co.jp"); - assert.equal(uts46.toAscii("ABC・日本.co.jp", { - transitional: true - }), "xn--abc-rs4b422ycvb.co.jp"); - assert.equal(uts46.toAscii("ABC・日本.co.jp", { - transitional: false - }), "xn--abc-rs4b422ycvb.co.jp"); - - //日本。co。jp - assert.equal(uts46.toUnicode("日本。co。jp"), "日本.co.jp"); - assert.equal(uts46.toAscii("日本。co。jp", { - transitional: true - }), "xn--wgv71a.co.jp"); - assert.equal(uts46.toAscii("日本。co。jp", { - transitional: false - }), "xn--wgv71a.co.jp"); - - //日本。co.jp - assert.equal(uts46.toUnicode("日本。co.jp"), "日本.co.jp"); - assert.equal(uts46.toAscii("日本。co.jp", { - transitional: true - }), "xn--wgv71a.co.jp"); - assert.equal(uts46.toAscii("日本。co.jp", { - transitional: false - }), "xn--wgv71a.co.jp"); - - //日本⒈co.jp - assert.throws(function() { - uts46.toUnicode("日本⒈co.jp"); - }); - assert.throws(function() { - uts46.toAscii("日本⒈co.jp", { - transitional: true - }); - }); - assert.throws(function() { - uts46.toAscii("日本⒈co.jp", { - transitional: false - }); - }); - - //x\u0327\u0301.de - assert.equal(uts46.toUnicode("x\u0327\u0301.de"), "x̧́.de"); - assert.equal(uts46.toAscii("x\u0327\u0301.de", { - transitional: true - }), "xn--x-xbb7i.de"); - assert.equal(uts46.toAscii("x\u0327\u0301.de", { - transitional: false - }), "xn--x-xbb7i.de"); - - //x\u0301\u0327.de - assert.equal(uts46.toUnicode("x\u0301\u0327.de"), "x̧́.de"); - assert.equal(uts46.toAscii("x\u0301\u0327.de", { - transitional: true - }), "xn--x-xbb7i.de"); - assert.equal(uts46.toAscii("x\u0301\u0327.de", { - transitional: false - }), "xn--x-xbb7i.de"); - - //σόλος.gr - assert.equal(uts46.toUnicode("σόλος.gr"), 'σόλος.gr'); - assert.equal(uts46.toAscii("σόλος.gr", { - transitional: true - }), "xn--wxaikc6b.gr"); - assert.equal(uts46.toAscii("σόλος.gr", { - transitional: false - }), "xn--wxaijb9b.gr"); - - //Σόλος.gr - assert.equal(uts46.toUnicode("Σόλος.gr"), 'σόλος.gr'); - assert.equal(uts46.toAscii("Σόλος.gr", { - transitional: true - }), "xn--wxaikc6b.gr"); - assert.equal(uts46.toAscii("Σόλος.gr", { - transitional: false - }), "xn--wxaijb9b.gr"); //might be wrong - - //ΣΌΛΟΣ.grﻋﺮﺑﻲ.de - assert.equal(uts46.toUnicode("ΣΌΛΟΣ.grﻋﺮﺑﻲ.de"), 'σόλοσ.grعربي.de'); - assert.equal(uts46.toAscii("ΣΌΛΟΣ.grﻋﺮﺑﻲ.de", { - transitional: true - }), "xn--wxaikc6b.xn--gr-gtd9a1b0g.de"); - assert.equal(uts46.toAscii("ΣΌΛΟΣ.grﻋﺮﺑﻲ.de", { - transitional: false - }), "xn--wxaikc6b.xn--gr-gtd9a1b0g.de"); //might be wrong - - //عربي.de - assert.equal(uts46.toUnicode("عربي.de"), 'عربي.de'); - assert.equal(uts46.toAscii("عربي.de", { - transitional: true - }), "xn--ngbrx4e.de"); - assert.equal(uts46.toAscii("عربي.de", { - transitional: false - }), "xn--ngbrx4e.de"); - - //نامهای.de - assert.equal(uts46.toUnicode("نامهای.de"), 'نامهای.de'); - assert.equal(uts46.toAscii("نامهای.de", { - transitional: true - }), "xn--mgba3gch31f.de"); - assert.equal(uts46.toAscii("نامهای.de", { - transitional: false - }), "xn--mgba3gch31f.de"); - - //نامه\u200Cای.de - /* jshint -W100 */ - assert.equal(uts46.toUnicode("نامه\u200Cای.de"), 'نامه‌ای.de'); - assert.equal(uts46.toAscii("نامه\u200Cای.de", { - transitional: true - }), "xn--mgba3gch31f.de"); - assert.equal(uts46.toAscii("نامه\u200Cای.de", { - transitional: false - }), "xn--mgba3gch31f060k.de"); - /* jshint +W100 */ - }); -}); diff --git a/truebit-implementation/node_modules/idna-uts46-hx/uts46.js b/truebit-implementation/node_modules/idna-uts46-hx/uts46.js deleted file mode 100644 index ece002fa..00000000 --- a/truebit-implementation/node_modules/idna-uts46-hx/uts46.js +++ /dev/null @@ -1,132 +0,0 @@ -(function(root, factory) { - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define(['punycode', './idna-map'], function(punycode, idna_map) { - return factory(punycode, idna_map); - }); - } - else if (typeof exports === 'object') { - module.exports = factory(require('punycode'), require('./idna-map')); - } - else { - root.uts46 = factory(root.punycode, root.idna_map); - } -}(this, function(punycode, idna_map) { - - function mapLabel(label, useStd3ASCII, transitional) { - var mapped = []; - var chars = punycode.ucs2.decode(label); - for (var i = 0; i < chars.length; i++) { - var cp = chars[i]; - var ch = punycode.ucs2.encode([chars[i]]); - var composite = idna_map.mapChar(cp); - var flags = (composite >> 23); - var kind = (composite >> 21) & 3; - var index = (composite >> 5) & 0xffff; - var length = composite & 0x1f; - var value = idna_map.mapStr.substr(index, length); - if (kind === 0 || (useStd3ASCII && (flags & 1))) { - throw new Error("Illegal char " + ch); - } - else if (kind === 1) { - mapped.push(value); - } - else if (kind === 2) { - mapped.push(transitional ? value : ch); - } - /* istanbul ignore next */ - else if (kind === 3) { - mapped.push(ch); - } - } - - var newLabel = mapped.join("").normalize("NFC"); - return newLabel; - } - - function process(domain, transitional, useStd3ASCII) { - /* istanbul ignore if */ - if (useStd3ASCII === undefined) - useStd3ASCII = false; - var mappedIDNA = mapLabel(domain, useStd3ASCII, transitional); - - // Step 3. Break - var labels = mappedIDNA.split("."); - - // Step 4. Convert/Validate - labels = labels.map(function(label) { - if (label.startsWith("xn--")) { - label = punycode.decode(label.substring(4)); - validateLabel(label, useStd3ASCII, false); - } - else { - validateLabel(label, useStd3ASCII, transitional); - } - return label; - }); - - return labels.join("."); - } - - function validateLabel(label, useStd3ASCII, transitional) { - // 2. The label must not contain a U+002D HYPHEN-MINUS character in both the - // third position and fourth positions. - if (label[2] === '-' && label[3] === '-') - throw new Error("Failed to validate " + label); - - // 3. The label must neither begin nor end with a U+002D HYPHEN-MINUS - // character. - if (label.startsWith('-') || label.endsWith('-')) - throw new Error("Failed to validate " + label); - - // 4. The label must not contain a U+002E ( . ) FULL STOP. - // this should nerver happen as label is chunked internally by this character - /* istanbul ignore if */ - if (label.includes('.')) - throw new Error("Failed to validate " + label); - - if (mapLabel(label, useStd3ASCII, transitional) !== label) - throw new Error("Failed to validate " + label); - - // 5. The label must not begin with a combining mark, that is: - // General_Category=Mark. - var ch = label.codePointAt(0); - if (idna_map.mapChar(ch) & (0x2 << 23)) - throw new Error("Label contains illegal character: " + ch); - } - - function toAscii(domain, options) { - if (options === undefined) - options = {}; - var transitional = 'transitional' in options ? options.transitional : true; - var useStd3ASCII = 'useStd3ASCII' in options ? options.useStd3ASCII : false; - var verifyDnsLength = 'verifyDnsLength' in options ? options.verifyDnsLength : false; - var labels = process(domain, transitional, useStd3ASCII).split('.'); - var asciiLabels = labels.map(punycode.toASCII); - var asciiString = asciiLabels.join('.'); - var i; - if (verifyDnsLength) { - if (asciiString.length < 1 || asciiString.length > 253) { - throw new Error("DNS name has wrong length: " + asciiString); - } - for (i = 0; i < asciiLabels.length; i++) {//for .. of replacement - var label = asciiLabels[i]; - if (label.length < 1 || label.length > 63) - throw new Error("DNS label has wrong length: " + label); - } - } - return asciiString; - } - - function toUnicode(domain, options) { - if (options === undefined) - options = {}; - var useStd3ASCII = 'useStd3ASCII' in options ? options.useStd3ASCII : false; - return process(domain, false, useStd3ASCII); - } - - return { - toUnicode: toUnicode, - toAscii: toAscii, - }; -})); diff --git a/truebit-implementation/node_modules/ieee754/LICENSE b/truebit-implementation/node_modules/ieee754/LICENSE deleted file mode 100644 index f37a2ebe..00000000 --- a/truebit-implementation/node_modules/ieee754/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2008, Fair Oaks Labs, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * 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. - - * Neither the name of Fair Oaks Labs, Inc. nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS 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 OWNER 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. diff --git a/truebit-implementation/node_modules/ieee754/README.md b/truebit-implementation/node_modules/ieee754/README.md deleted file mode 100644 index cb7527b3..00000000 --- a/truebit-implementation/node_modules/ieee754/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# ieee754 [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/ieee754/master.svg -[travis-url]: https://travis-ci.org/feross/ieee754 -[npm-image]: https://img.shields.io/npm/v/ieee754.svg -[npm-url]: https://npmjs.org/package/ieee754 -[downloads-image]: https://img.shields.io/npm/dm/ieee754.svg -[downloads-url]: https://npmjs.org/package/ieee754 -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -[![saucelabs][saucelabs-image]][saucelabs-url] - -[saucelabs-image]: https://saucelabs.com/browser-matrix/ieee754.svg -[saucelabs-url]: https://saucelabs.com/u/ieee754 - -### Read/write IEEE754 floating point numbers from/to a Buffer or array-like object. - -## install - -``` -npm install ieee754 -``` - -## methods - -`var ieee754 = require('ieee754')` - -The `ieee754` object has the following functions: - -``` -ieee754.read = function (buffer, offset, isLE, mLen, nBytes) -ieee754.write = function (buffer, value, offset, isLE, mLen, nBytes) -``` - -The arguments mean the following: - -- buffer = the buffer -- offset = offset into the buffer -- value = value to set (only for `write`) -- isLe = is little endian? -- mLen = mantissa length -- nBytes = number of bytes - -## what is ieee754? - -The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point computation. [Read more](http://en.wikipedia.org/wiki/IEEE_floating_point). - -## license - -BSD 3 Clause. Copyright (c) 2008, Fair Oaks Labs, Inc. diff --git a/truebit-implementation/node_modules/ieee754/index.js b/truebit-implementation/node_modules/ieee754/index.js deleted file mode 100644 index e87e6ff5..00000000 --- a/truebit-implementation/node_modules/ieee754/index.js +++ /dev/null @@ -1,84 +0,0 @@ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = ((value * c) - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} diff --git a/truebit-implementation/node_modules/ieee754/package.json b/truebit-implementation/node_modules/ieee754/package.json deleted file mode 100644 index 4793c8d2..00000000 --- a/truebit-implementation/node_modules/ieee754/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "ieee754@^1.1.4", - "_id": "ieee754@1.1.12", - "_inBundle": false, - "_integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "_location": "/ieee754", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ieee754@^1.1.4", - "name": "ieee754", - "escapedName": "ieee754", - "rawSpec": "^1.1.4", - "saveSpec": null, - "fetchSpec": "^1.1.4" - }, - "_requiredBy": [ - "/buffer", - "/unbzip2-stream/buffer" - ], - "_resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "_shasum": "50bf24e5b9c8bb98af4964c941cdb0918da7b60b", - "_spec": "ieee754@^1.1.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/buffer", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "http://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/ieee754/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Romain Beauxis", - "email": "toots@rastageeks.org" - } - ], - "deprecated": false, - "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object", - "devDependencies": { - "airtap": "0.0.7", - "standard": "*", - "tape": "^4.0.0" - }, - "homepage": "https://github.com/feross/ieee754#readme", - "keywords": [ - "IEEE 754", - "buffer", - "convert", - "floating point", - "ieee754" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "name": "ieee754", - "repository": { - "type": "git", - "url": "git://github.com/feross/ieee754.git" - }, - "scripts": { - "test": "standard && npm run test-node && npm run test-browser", - "test-browser": "airtap -- test/*.js", - "test-browser-local": "airtap --local -- test/*.js", - "test-node": "tape test/*.js" - }, - "version": "1.1.12" -} diff --git a/truebit-implementation/node_modules/inflight/LICENSE b/truebit-implementation/node_modules/inflight/LICENSE deleted file mode 100644 index 05eeeb88..00000000 --- a/truebit-implementation/node_modules/inflight/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/inflight/README.md b/truebit-implementation/node_modules/inflight/README.md deleted file mode 100644 index 6dc89291..00000000 --- a/truebit-implementation/node_modules/inflight/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# inflight - -Add callbacks to requests in flight to avoid async duplication - -## USAGE - -```javascript -var inflight = require('inflight') - -// some request that does some stuff -function req(key, callback) { - // key is any random string. like a url or filename or whatever. - // - // will return either a falsey value, indicating that the - // request for this key is already in flight, or a new callback - // which when called will call all callbacks passed to inflightk - // with the same key - callback = inflight(key, callback) - - // If we got a falsey value back, then there's already a req going - if (!callback) return - - // this is where you'd fetch the url or whatever - // callback is also once()-ified, so it can safely be assigned - // to multiple events etc. First call wins. - setTimeout(function() { - callback(null, key) - }, 100) -} - -// only assigns a single setTimeout -// when it dings, all cbs get called -req('foo', cb1) -req('foo', cb2) -req('foo', cb3) -req('foo', cb4) -``` diff --git a/truebit-implementation/node_modules/inflight/inflight.js b/truebit-implementation/node_modules/inflight/inflight.js deleted file mode 100644 index 48202b3c..00000000 --- a/truebit-implementation/node_modules/inflight/inflight.js +++ /dev/null @@ -1,54 +0,0 @@ -var wrappy = require('wrappy') -var reqs = Object.create(null) -var once = require('once') - -module.exports = wrappy(inflight) - -function inflight (key, cb) { - if (reqs[key]) { - reqs[key].push(cb) - return null - } else { - reqs[key] = [cb] - return makeres(key) - } -} - -function makeres (key) { - return once(function RES () { - var cbs = reqs[key] - var len = cbs.length - var args = slice(arguments) - - // XXX It's somewhat ambiguous whether a new callback added in this - // pass should be queued for later execution if something in the - // list of callbacks throws, or if it should just be discarded. - // However, it's such an edge case that it hardly matters, and either - // choice is likely as surprising as the other. - // As it happens, we do go ahead and schedule it for later execution. - try { - for (var i = 0; i < len; i++) { - cbs[i].apply(null, args) - } - } finally { - if (cbs.length > len) { - // added more in the interim. - // de-zalgo, just in case, but don't call again. - cbs.splice(0, len) - process.nextTick(function () { - RES.apply(null, args) - }) - } else { - delete reqs[key] - } - } - }) -} - -function slice (args) { - var length = args.length - var array = [] - - for (var i = 0; i < length; i++) array[i] = args[i] - return array -} diff --git a/truebit-implementation/node_modules/inflight/package.json b/truebit-implementation/node_modules/inflight/package.json deleted file mode 100644 index 000b305e..00000000 --- a/truebit-implementation/node_modules/inflight/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "inflight@^1.0.4", - "_id": "inflight@1.0.6", - "_inBundle": false, - "_integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "_location": "/inflight", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "inflight@^1.0.4", - "name": "inflight", - "escapedName": "inflight", - "rawSpec": "^1.0.4", - "saveSpec": null, - "fetchSpec": "^1.0.4" - }, - "_requiredBy": [ - "/glob" - ], - "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "_shasum": "49bd6331d7d02d0c09bc910a1075ba8165b56df9", - "_spec": "inflight@^1.0.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/glob", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/inflight/issues" - }, - "bundleDependencies": false, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - }, - "deprecated": false, - "description": "Add callbacks to requests in flight to avoid async duplication", - "devDependencies": { - "tap": "^7.1.2" - }, - "files": [ - "inflight.js" - ], - "homepage": "https://github.com/isaacs/inflight", - "license": "ISC", - "main": "inflight.js", - "name": "inflight", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/inflight.git" - }, - "scripts": { - "test": "tap test.js --100" - }, - "version": "1.0.6" -} diff --git a/truebit-implementation/node_modules/inherits/LICENSE b/truebit-implementation/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013d..00000000 --- a/truebit-implementation/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - diff --git a/truebit-implementation/node_modules/inherits/README.md b/truebit-implementation/node_modules/inherits/README.md deleted file mode 100644 index b1c56658..00000000 --- a/truebit-implementation/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/truebit-implementation/node_modules/inherits/inherits.js b/truebit-implementation/node_modules/inherits/inherits.js deleted file mode 100644 index 3b94763a..00000000 --- a/truebit-implementation/node_modules/inherits/inherits.js +++ /dev/null @@ -1,7 +0,0 @@ -try { - var util = require('util'); - if (typeof util.inherits !== 'function') throw ''; - module.exports = util.inherits; -} catch (e) { - module.exports = require('./inherits_browser.js'); -} diff --git a/truebit-implementation/node_modules/inherits/inherits_browser.js b/truebit-implementation/node_modules/inherits/inherits_browser.js deleted file mode 100644 index c1e78a75..00000000 --- a/truebit-implementation/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,23 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} diff --git a/truebit-implementation/node_modules/inherits/package.json b/truebit-implementation/node_modules/inherits/package.json deleted file mode 100644 index 91986059..00000000 --- a/truebit-implementation/node_modules/inherits/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_from": "inherits@~2.0.3", - "_id": "inherits@2.0.3", - "_inBundle": false, - "_integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "_location": "/inherits", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "inherits@~2.0.3", - "name": "inherits", - "escapedName": "inherits", - "rawSpec": "~2.0.3", - "saveSpec": null, - "fetchSpec": "~2.0.3" - }, - "_requiredBy": [ - "/asn1.js", - "/block-stream", - "/browserify-aes", - "/browserify-des", - "/browserify-sign", - "/cipher-base", - "/create-hash", - "/create-hmac", - "/crypto-browserify", - "/des.js", - "/elliptic", - "/ethers/elliptic", - "/ethers/hash.js", - "/fstream", - "/glob", - "/hash-base", - "/hash.js", - "/http-errors", - "/md5.js", - "/readable-stream", - "/ripemd160", - "/sha.js", - "/tar" - ], - "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "_shasum": "633c2c83e3da42a502f52466022480f4208261de", - "_spec": "inherits@~2.0.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/readable-stream", - "browser": "./inherits_browser.js", - "bugs": { - "url": "https://github.com/isaacs/inherits/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "devDependencies": { - "tap": "^7.1.0" - }, - "files": [ - "inherits.js", - "inherits_browser.js" - ], - "homepage": "https://github.com/isaacs/inherits#readme", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "license": "ISC", - "main": "./inherits.js", - "name": "inherits", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/inherits.git" - }, - "scripts": { - "test": "node test" - }, - "version": "2.0.3" -} diff --git a/truebit-implementation/node_modules/ipaddr.js/README.md b/truebit-implementation/node_modules/ipaddr.js/README.md deleted file mode 100644 index 6876a3b8..00000000 --- a/truebit-implementation/node_modules/ipaddr.js/README.md +++ /dev/null @@ -1,233 +0,0 @@ -# ipaddr.js — an IPv6 and IPv4 address manipulation library [![Build Status](https://travis-ci.org/whitequark/ipaddr.js.svg)](https://travis-ci.org/whitequark/ipaddr.js) - -ipaddr.js is a small (1.9K minified and gzipped) library for manipulating -IP addresses in JavaScript environments. It runs on both CommonJS runtimes -(e.g. [nodejs]) and in a web browser. - -ipaddr.js allows you to verify and parse string representation of an IP -address, match it against a CIDR range or range list, determine if it falls -into some reserved ranges (examples include loopback and private ranges), -and convert between IPv4 and IPv4-mapped IPv6 addresses. - -[nodejs]: http://nodejs.org - -## Installation - -`npm install ipaddr.js` - -or - -`bower install ipaddr.js` - -## API - -ipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS, -it is exported from the module: - -```js -var ipaddr = require('ipaddr.js'); -``` - -The API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4. - -### Global methods - -There are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and -`ipaddr.process`. All of them receive a string as a single parameter. - -The `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or -IPv6 address, and `false` otherwise. It does not throw any exceptions. - -The `ipaddr.parse` method returns an object representing the IP address, -or throws an `Error` if the passed string is not a valid representation of an -IP address. - -The `ipaddr.process` method works just like the `ipaddr.parse` one, but it -automatically converts IPv4-mapped IPv6 addresses to their IPv4 counterparts -before returning. It is useful when you have a Node.js instance listening -on an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its -equivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4 -connections on your IPv6-only socket, but the remote address will be mangled. -Use `ipaddr.process` method to automatically demangle it. - -### Object representation - -Parsing methods return an object which descends from `ipaddr.IPv6` or -`ipaddr.IPv4`. These objects share some properties, but most of them differ. - -#### Shared properties - -One can determine the type of address by calling `addr.kind()`. It will return -either `"ipv6"` or `"ipv4"`. - -An address can be converted back to its string representation with `addr.toString()`. -Note that this method: - * does not return the original string used to create the object (in fact, there is - no way of getting that string) - * returns a compact representation (when it is applicable) - -A `match(range, bits)` method can be used to check if the address falls into a -certain CIDR range. -Note that an address can be (obviously) matched only against an address of the same type. - -For example: - -```js -var addr = ipaddr.parse("2001:db8:1234::1"); -var range = ipaddr.parse("2001:db8::"); - -addr.match(range, 32); // => true -``` - -Alternatively, `match` can also be called as `match([range, bits])`. In this way, -it can be used together with the `parseCIDR(string)` method, which parses an IP -address together with a CIDR range. - -For example: - -```js -var addr = ipaddr.parse("2001:db8:1234::1"); - -addr.match(ipaddr.parseCIDR("2001:db8::/32")); // => true -``` - -A `range()` method returns one of predefined names for several special ranges defined -by IP protocols. The exact names (and their respective CIDR ranges) can be looked up -in the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `"unicast"` -(the default one) and `"reserved"`. - -You can match against your own range list by using -`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with a mix of IPv6 or IPv4 addresses, and accepts a name-to-subnet map as the range list. For example: - -```js -var rangeList = { - documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ], - tunnelProviders: [ - [ ipaddr.parse('2001:470::'), 32 ], // he.net - [ ipaddr.parse('2001:5c0::'), 32 ] // freenet6 - ] -}; -ipaddr.subnetMatch(ipaddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => "tunnelProviders" -``` - -The addresses can be converted to their byte representation with `toByteArray()`. -(Actually, JavaScript mostly does not know about byte buffers. They are emulated with -arrays of numbers, each in range of 0..255.) - -```js -var bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com -bytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, , 0x00, 0x68 ] -``` - -The `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them -have the same interface for both protocols, and are similar to global methods. - -`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address -for particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser. - -`ipaddr.IPvX.isValid(string)` uses the same format for parsing as the POSIX `inet_ntoa` function, which accepts unusual formats like `0xc0.168.1.1` or `0x10000000`. The function `ipaddr.IPv4.isValidFourPartDecimal(string)` validates the IPv4 address and also ensures that it is written in four-part decimal format. - -[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186 -[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L71 - -#### IPv6 properties - -Sometimes you will want to convert IPv6 not to a compact string representation (with -the `::` substitution); the `toNormalizedString()` method will return an address where -all zeroes are explicit. - -For example: - -```js -var addr = ipaddr.parse("2001:0db8::0001"); -addr.toString(); // => "2001:db8::1" -addr.toNormalizedString(); // => "2001:db8:0:0:0:0:0:1" -``` - -The `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped -one, and `toIPv4Address()` will return an IPv4 object address. - -To access the underlying binary representation of the address, use `addr.parts`. - -```js -var addr = ipaddr.parse("2001:db8:10::1234:DEAD"); -addr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead] -``` - -A IPv6 zone index can be accessed via `addr.zoneId`: - -```js -var addr = ipaddr.parse("2001:db8::%eth0"); -addr.zoneId // => 'eth0' -``` - -#### IPv4 properties - -`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address. - -To access the underlying representation of the address, use `addr.octets`. - -```js -var addr = ipaddr.parse("192.168.1.1"); -addr.octets // => [192, 168, 1, 1] -``` - -`prefixLengthFromSubnetMask()` will return a CIDR prefix length for a valid IPv4 netmask or -false if the netmask is not valid. - -```js -ipaddr.IPv4.parse('255.255.255.240').prefixLengthFromSubnetMask() == 28 -ipaddr.IPv4.parse('255.192.164.0').prefixLengthFromSubnetMask() == null -``` - -`subnetMaskFromPrefixLength()` will return an IPv4 netmask for a valid CIDR prefix length. - -```js -ipaddr.IPv4.subnetMaskFromPrefixLength(24) == "255.255.255.0" -ipaddr.IPv4.subnetMaskFromPrefixLength(29) == "255.255.255.248" -``` - -`broadcastAddressFromCIDR()` will return the broadcast address for a given IPv4 interface and netmask in CIDR notation. -```js -ipaddr.IPv4.broadcastAddressFromCIDR("172.0.0.1/24") == "172.0.0.255" -``` -`networkAddressFromCIDR()` will return the network address for a given IPv4 interface and netmask in CIDR notation. -```js -ipaddr.IPv4.networkAddressFromCIDR("172.0.0.1/24") == "172.0.0.0" -``` - -#### Conversion - -IPv4 and IPv6 can be converted bidirectionally to and from network byte order (MSB) byte arrays. - -The `fromByteArray()` method will take an array and create an appropriate IPv4 or IPv6 object -if the input satisfies the requirements. For IPv4 it has to be an array of four 8-bit values, -while for IPv6 it has to be an array of sixteen 8-bit values. - -For example: -```js -var addr = ipaddr.fromByteArray([0x7f, 0, 0, 1]); -addr.toString(); // => "127.0.0.1" -``` - -or - -```js -var addr = ipaddr.fromByteArray([0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]) -addr.toString(); // => "2001:db8::1" -``` - -Both objects also offer a `toByteArray()` method, which returns an array in network byte order (MSB). - -For example: -```js -var addr = ipaddr.parse("127.0.0.1"); -addr.toByteArray(); // => [0x7f, 0, 0, 1] -``` - -or - -```js -var addr = ipaddr.parse("2001:db8::1"); -addr.toByteArray(); // => [0x20, 1, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] -``` diff --git a/truebit-implementation/node_modules/ipaddr.js/ipaddr.min.js b/truebit-implementation/node_modules/ipaddr.js/ipaddr.min.js deleted file mode 100644 index 56c227ca..00000000 --- a/truebit-implementation/node_modules/ipaddr.js/ipaddr.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var r,t,n,e,i,o,a,s;t={},s=this,"undefined"!=typeof module&&null!==module&&module.exports?module.exports=t:s.ipaddr=t,a=function(r,t,n,e){var i,o;if(r.length!==t.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(i=0;e>0;){if((o=n-e)<0&&(o=0),r[i]>>o!=t[i]>>o)return!1;e-=n,i+=1}return!0},t.subnetMatch=function(r,t,n){var e,i,o,a,s;null==n&&(n="unicast");for(o in t)for(!(a=t[o])[0]||a[0]instanceof Array||(a=[a]),e=0,i=a.length;e=0;t=n+=-1){if(!((e=this.octets[t])in a))return null;if(o=a[e],i&&0!==o)return null;8!==o&&(i=!0),r+=o}return 32-r},r}(),n="(0?\\d+|0x[a-f0-9]+)",e={fourOctet:new RegExp("^"+n+"\\."+n+"\\."+n+"\\."+n+"$","i"),longValue:new RegExp("^"+n+"$","i")},t.IPv4.parser=function(r){var t,n,i,o,a;if(n=function(r){return"0"===r[0]&&"x"!==r[1]?parseInt(r,8):parseInt(r)},t=r.match(e.fourOctet))return function(){var r,e,o,a;for(a=[],r=0,e=(o=t.slice(1,6)).length;r4294967295||a<0)throw new Error("ipaddr: address outside defined range");return function(){var r,t;for(t=[],o=r=0;r<=24;o=r+=8)t.push(a>>o&255);return t}().reverse()}return null},t.IPv6=function(){function r(r,t){var n,e,i,o,a,s;if(16===r.length)for(this.parts=[],n=e=0;e<=14;n=e+=2)this.parts.push(r[n]<<8|r[n+1]);else{if(8!==r.length)throw new Error("ipaddr: ipv6 part count should be 8 or 16");this.parts=r}for(i=0,o=(s=this.parts).length;i>8),r.push(255&e);return r},r.prototype.toNormalizedString=function(){var r,t,n;return r=function(){var r,n,e,i;for(i=[],r=0,n=(e=this.parts).length;r>8,255&r,n>>8,255&n])},r.prototype.prefixLengthFromSubnetMask=function(){var r,t,n,e,i,o,a;for(a={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0},r=0,i=!1,t=n=7;n>=0;t=n+=-1){if(!((e=this.parts[t])in a))return null;if(o=a[e],i&&0!==o)return null;16!==o&&(i=!0),r+=o}return 128-r},r}(),i="(?:[0-9a-f]+::?)+",o={zoneIndex:new RegExp("%[0-9a-z]{1,}","i"),native:new RegExp("^(::)?("+i+")?([0-9a-f]+)?(::)?(%[0-9a-z]{1,})?$","i"),transitional:new RegExp("^((?:"+i+")|(?:::)(?:"+i+")?)"+n+"\\."+n+"\\."+n+"\\."+n+"(%[0-9a-z]{1,})?$","i")},r=function(r,t){var n,e,i,a,s,p;if(r.indexOf("::")!==r.lastIndexOf("::"))return null;for((p=(r.match(o.zoneIndex)||[])[0])&&(p=p.substring(1),r=r.replace(/%.+$/,"")),n=0,e=-1;(e=r.indexOf(":",e+1))>=0;)n++;if("::"===r.substr(0,2)&&n--,"::"===r.substr(-2,2)&&n--,n>t)return null;for(s=t-n,a=":";s--;)a+="0:";return":"===(r=r.replace("::",a))[0]&&(r=r.slice(1)),":"===r[r.length-1]&&(r=r.slice(0,-1)),t=function(){var t,n,e,o;for(o=[],t=0,n=(e=r.split(":")).length;t=0&&t<=32)return e=[this.parse(n[1]),t],Object.defineProperty(e,"toString",{value:function(){return this.join("/")}}),e;throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},t.IPv4.subnetMaskFromPrefixLength=function(r){var t,n,e;if((r=parseInt(r))<0||r>32)throw new Error("ipaddr: invalid IPv4 prefix length");for(e=[0,0,0,0],n=0,t=Math.floor(r/8);n=0&&t<=128)return e=[this.parse(n[1]),t],Object.defineProperty(e,"toString",{value:function(){return this.join("/")}}),e;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},t.isValid=function(r){return t.IPv6.isValid(r)||t.IPv4.isValid(r)},t.parse=function(r){if(t.IPv6.isValid(r))return t.IPv6.parse(r);if(t.IPv4.isValid(r))return t.IPv4.parse(r);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},t.parseCIDR=function(r){try{return t.IPv6.parseCIDR(r)}catch(n){n;try{return t.IPv4.parseCIDR(r)}catch(r){throw r,new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},t.fromByteArray=function(r){var n;if(4===(n=r.length))return new t.IPv4(r);if(16===n)return new t.IPv6(r);throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address")},t.process=function(r){var t;return"ipv6"===(t=this.parse(r)).kind()&&t.isIPv4MappedAddress()?t.toIPv4Address():t}}).call(this); \ No newline at end of file diff --git a/truebit-implementation/node_modules/ipaddr.js/lib/ipaddr.js b/truebit-implementation/node_modules/ipaddr.js/lib/ipaddr.js deleted file mode 100644 index ab5d74b4..00000000 --- a/truebit-implementation/node_modules/ipaddr.js/lib/ipaddr.js +++ /dev/null @@ -1,636 +0,0 @@ -(function() { - var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex; - - ipaddr = {}; - - root = this; - - if ((typeof module !== "undefined" && module !== null) && module.exports) { - module.exports = ipaddr; - } else { - root['ipaddr'] = ipaddr; - } - - matchCIDR = function(first, second, partSize, cidrBits) { - var part, shift; - if (first.length !== second.length) { - throw new Error("ipaddr: cannot match CIDR for objects with different lengths"); - } - part = 0; - while (cidrBits > 0) { - shift = partSize - cidrBits; - if (shift < 0) { - shift = 0; - } - if (first[part] >> shift !== second[part] >> shift) { - return false; - } - cidrBits -= partSize; - part += 1; - } - return true; - }; - - ipaddr.subnetMatch = function(address, rangeList, defaultName) { - var k, len, rangeName, rangeSubnets, subnet; - if (defaultName == null) { - defaultName = 'unicast'; - } - for (rangeName in rangeList) { - rangeSubnets = rangeList[rangeName]; - if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) { - rangeSubnets = [rangeSubnets]; - } - for (k = 0, len = rangeSubnets.length; k < len; k++) { - subnet = rangeSubnets[k]; - if (address.kind() === subnet[0].kind()) { - if (address.match.apply(address, subnet)) { - return rangeName; - } - } - } - } - return defaultName; - }; - - ipaddr.IPv4 = (function() { - function IPv4(octets) { - var k, len, octet; - if (octets.length !== 4) { - throw new Error("ipaddr: ipv4 octet count should be 4"); - } - for (k = 0, len = octets.length; k < len; k++) { - octet = octets[k]; - if (!((0 <= octet && octet <= 255))) { - throw new Error("ipaddr: ipv4 octet should fit in 8 bits"); - } - } - this.octets = octets; - } - - IPv4.prototype.kind = function() { - return 'ipv4'; - }; - - IPv4.prototype.toString = function() { - return this.octets.join("."); - }; - - IPv4.prototype.toNormalizedString = function() { - return this.toString(); - }; - - IPv4.prototype.toByteArray = function() { - return this.octets.slice(0); - }; - - IPv4.prototype.match = function(other, cidrRange) { - var ref; - if (cidrRange === void 0) { - ref = other, other = ref[0], cidrRange = ref[1]; - } - if (other.kind() !== 'ipv4') { - throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one"); - } - return matchCIDR(this.octets, other.octets, 8, cidrRange); - }; - - IPv4.prototype.SpecialRanges = { - unspecified: [[new IPv4([0, 0, 0, 0]), 8]], - broadcast: [[new IPv4([255, 255, 255, 255]), 32]], - multicast: [[new IPv4([224, 0, 0, 0]), 4]], - linkLocal: [[new IPv4([169, 254, 0, 0]), 16]], - loopback: [[new IPv4([127, 0, 0, 0]), 8]], - carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]], - "private": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]], - reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]] - }; - - IPv4.prototype.range = function() { - return ipaddr.subnetMatch(this, this.SpecialRanges); - }; - - IPv4.prototype.toIPv4MappedAddress = function() { - return ipaddr.IPv6.parse("::ffff:" + (this.toString())); - }; - - IPv4.prototype.prefixLengthFromSubnetMask = function() { - var cidr, i, k, octet, stop, zeros, zerotable; - zerotable = { - 0: 8, - 128: 7, - 192: 6, - 224: 5, - 240: 4, - 248: 3, - 252: 2, - 254: 1, - 255: 0 - }; - cidr = 0; - stop = false; - for (i = k = 3; k >= 0; i = k += -1) { - octet = this.octets[i]; - if (octet in zerotable) { - zeros = zerotable[octet]; - if (stop && zeros !== 0) { - return null; - } - if (zeros !== 8) { - stop = true; - } - cidr += zeros; - } else { - return null; - } - } - return 32 - cidr; - }; - - return IPv4; - - })(); - - ipv4Part = "(0?\\d+|0x[a-f0-9]+)"; - - ipv4Regexes = { - fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", 'i'), - longValue: new RegExp("^" + ipv4Part + "$", 'i') - }; - - ipaddr.IPv4.parser = function(string) { - var match, parseIntAuto, part, shift, value; - parseIntAuto = function(string) { - if (string[0] === "0" && string[1] !== "x") { - return parseInt(string, 8); - } else { - return parseInt(string); - } - }; - if (match = string.match(ipv4Regexes.fourOctet)) { - return (function() { - var k, len, ref, results; - ref = match.slice(1, 6); - results = []; - for (k = 0, len = ref.length; k < len; k++) { - part = ref[k]; - results.push(parseIntAuto(part)); - } - return results; - })(); - } else if (match = string.match(ipv4Regexes.longValue)) { - value = parseIntAuto(match[1]); - if (value > 0xffffffff || value < 0) { - throw new Error("ipaddr: address outside defined range"); - } - return ((function() { - var k, results; - results = []; - for (shift = k = 0; k <= 24; shift = k += 8) { - results.push((value >> shift) & 0xff); - } - return results; - })()).reverse(); - } else { - return null; - } - }; - - ipaddr.IPv6 = (function() { - function IPv6(parts, zoneId) { - var i, k, l, len, part, ref; - if (parts.length === 16) { - this.parts = []; - for (i = k = 0; k <= 14; i = k += 2) { - this.parts.push((parts[i] << 8) | parts[i + 1]); - } - } else if (parts.length === 8) { - this.parts = parts; - } else { - throw new Error("ipaddr: ipv6 part count should be 8 or 16"); - } - ref = this.parts; - for (l = 0, len = ref.length; l < len; l++) { - part = ref[l]; - if (!((0 <= part && part <= 0xffff))) { - throw new Error("ipaddr: ipv6 part should fit in 16 bits"); - } - } - if (zoneId) { - this.zoneId = zoneId; - } - } - - IPv6.prototype.kind = function() { - return 'ipv6'; - }; - - IPv6.prototype.toString = function() { - return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::'); - }; - - IPv6.prototype.toByteArray = function() { - var bytes, k, len, part, ref; - bytes = []; - ref = this.parts; - for (k = 0, len = ref.length; k < len; k++) { - part = ref[k]; - bytes.push(part >> 8); - bytes.push(part & 0xff); - } - return bytes; - }; - - IPv6.prototype.toNormalizedString = function() { - var addr, part, suffix; - addr = ((function() { - var k, len, ref, results; - ref = this.parts; - results = []; - for (k = 0, len = ref.length; k < len; k++) { - part = ref[k]; - results.push(part.toString(16)); - } - return results; - }).call(this)).join(":"); - suffix = ''; - if (this.zoneId) { - suffix = '%' + this.zoneId; - } - return addr + suffix; - }; - - IPv6.prototype.match = function(other, cidrRange) { - var ref; - if (cidrRange === void 0) { - ref = other, other = ref[0], cidrRange = ref[1]; - } - if (other.kind() !== 'ipv6') { - throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one"); - } - return matchCIDR(this.parts, other.parts, 16, cidrRange); - }; - - IPv6.prototype.SpecialRanges = { - unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128], - linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10], - multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8], - loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128], - uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7], - ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96], - rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96], - rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96], - '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16], - teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32], - reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]] - }; - - IPv6.prototype.range = function() { - return ipaddr.subnetMatch(this, this.SpecialRanges); - }; - - IPv6.prototype.isIPv4MappedAddress = function() { - return this.range() === 'ipv4Mapped'; - }; - - IPv6.prototype.toIPv4Address = function() { - var high, low, ref; - if (!this.isIPv4MappedAddress()) { - throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4"); - } - ref = this.parts.slice(-2), high = ref[0], low = ref[1]; - return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]); - }; - - IPv6.prototype.prefixLengthFromSubnetMask = function() { - var cidr, i, k, part, stop, zeros, zerotable; - zerotable = { - 0: 16, - 32768: 15, - 49152: 14, - 57344: 13, - 61440: 12, - 63488: 11, - 64512: 10, - 65024: 9, - 65280: 8, - 65408: 7, - 65472: 6, - 65504: 5, - 65520: 4, - 65528: 3, - 65532: 2, - 65534: 1, - 65535: 0 - }; - cidr = 0; - stop = false; - for (i = k = 7; k >= 0; i = k += -1) { - part = this.parts[i]; - if (part in zerotable) { - zeros = zerotable[part]; - if (stop && zeros !== 0) { - return null; - } - if (zeros !== 16) { - stop = true; - } - cidr += zeros; - } else { - return null; - } - } - return 128 - cidr; - }; - - return IPv6; - - })(); - - ipv6Part = "(?:[0-9a-f]+::?)+"; - - zoneIndex = "%[0-9a-z]{1,}"; - - ipv6Regexes = { - zoneIndex: new RegExp(zoneIndex, 'i'), - "native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", 'i'), - transitional: new RegExp(("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)") + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), 'i') - }; - - expandIPv6 = function(string, parts) { - var colonCount, lastColon, part, replacement, replacementCount, zoneId; - if (string.indexOf('::') !== string.lastIndexOf('::')) { - return null; - } - zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0]; - if (zoneId) { - zoneId = zoneId.substring(1); - string = string.replace(/%.+$/, ''); - } - colonCount = 0; - lastColon = -1; - while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) { - colonCount++; - } - if (string.substr(0, 2) === '::') { - colonCount--; - } - if (string.substr(-2, 2) === '::') { - colonCount--; - } - if (colonCount > parts) { - return null; - } - replacementCount = parts - colonCount; - replacement = ':'; - while (replacementCount--) { - replacement += '0:'; - } - string = string.replace('::', replacement); - if (string[0] === ':') { - string = string.slice(1); - } - if (string[string.length - 1] === ':') { - string = string.slice(0, -1); - } - parts = (function() { - var k, len, ref, results; - ref = string.split(":"); - results = []; - for (k = 0, len = ref.length; k < len; k++) { - part = ref[k]; - results.push(parseInt(part, 16)); - } - return results; - })(); - return { - parts: parts, - zoneId: zoneId - }; - }; - - ipaddr.IPv6.parser = function(string) { - var addr, k, len, match, octet, octets, zoneId; - if (ipv6Regexes['native'].test(string)) { - return expandIPv6(string, 8); - } else if (match = string.match(ipv6Regexes['transitional'])) { - zoneId = match[6] || ''; - addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6); - if (addr.parts) { - octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])]; - for (k = 0, len = octets.length; k < len; k++) { - octet = octets[k]; - if (!((0 <= octet && octet <= 255))) { - return null; - } - } - addr.parts.push(octets[0] << 8 | octets[1]); - addr.parts.push(octets[2] << 8 | octets[3]); - return { - parts: addr.parts, - zoneId: addr.zoneId - }; - } - } - return null; - }; - - ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) { - return this.parser(string) !== null; - }; - - ipaddr.IPv4.isValid = function(string) { - var e; - try { - new this(this.parser(string)); - return true; - } catch (error1) { - e = error1; - return false; - } - }; - - ipaddr.IPv4.isValidFourPartDecimal = function(string) { - if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)) { - return true; - } else { - return false; - } - }; - - ipaddr.IPv6.isValid = function(string) { - var addr, e; - if (typeof string === "string" && string.indexOf(":") === -1) { - return false; - } - try { - addr = this.parser(string); - new this(addr.parts, addr.zoneId); - return true; - } catch (error1) { - e = error1; - return false; - } - }; - - ipaddr.IPv4.parse = function(string) { - var parts; - parts = this.parser(string); - if (parts === null) { - throw new Error("ipaddr: string is not formatted like ip address"); - } - return new this(parts); - }; - - ipaddr.IPv6.parse = function(string) { - var addr; - addr = this.parser(string); - if (addr.parts === null) { - throw new Error("ipaddr: string is not formatted like ip address"); - } - return new this(addr.parts, addr.zoneId); - }; - - ipaddr.IPv4.parseCIDR = function(string) { - var maskLength, match, parsed; - if (match = string.match(/^(.+)\/(\d+)$/)) { - maskLength = parseInt(match[2]); - if (maskLength >= 0 && maskLength <= 32) { - parsed = [this.parse(match[1]), maskLength]; - Object.defineProperty(parsed, 'toString', { - value: function() { - return this.join('/'); - } - }); - return parsed; - } - } - throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range"); - }; - - ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) { - var filledOctetCount, j, octets; - prefix = parseInt(prefix); - if (prefix < 0 || prefix > 32) { - throw new Error('ipaddr: invalid IPv4 prefix length'); - } - octets = [0, 0, 0, 0]; - j = 0; - filledOctetCount = Math.floor(prefix / 8); - while (j < filledOctetCount) { - octets[j] = 255; - j++; - } - if (filledOctetCount < 4) { - octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8); - } - return new this(octets); - }; - - ipaddr.IPv4.broadcastAddressFromCIDR = function(string) { - var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; - try { - cidr = this.parseCIDR(string); - ipInterfaceOctets = cidr[0].toByteArray(); - subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); - octets = []; - i = 0; - while (i < 4) { - octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255); - i++; - } - return new this(octets); - } catch (error1) { - error = error1; - throw new Error('ipaddr: the address does not have IPv4 CIDR format'); - } - }; - - ipaddr.IPv4.networkAddressFromCIDR = function(string) { - var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; - try { - cidr = this.parseCIDR(string); - ipInterfaceOctets = cidr[0].toByteArray(); - subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); - octets = []; - i = 0; - while (i < 4) { - octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10)); - i++; - } - return new this(octets); - } catch (error1) { - error = error1; - throw new Error('ipaddr: the address does not have IPv4 CIDR format'); - } - }; - - ipaddr.IPv6.parseCIDR = function(string) { - var maskLength, match, parsed; - if (match = string.match(/^(.+)\/(\d+)$/)) { - maskLength = parseInt(match[2]); - if (maskLength >= 0 && maskLength <= 128) { - parsed = [this.parse(match[1]), maskLength]; - Object.defineProperty(parsed, 'toString', { - value: function() { - return this.join('/'); - } - }); - return parsed; - } - } - throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range"); - }; - - ipaddr.isValid = function(string) { - return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string); - }; - - ipaddr.parse = function(string) { - if (ipaddr.IPv6.isValid(string)) { - return ipaddr.IPv6.parse(string); - } else if (ipaddr.IPv4.isValid(string)) { - return ipaddr.IPv4.parse(string); - } else { - throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format"); - } - }; - - ipaddr.parseCIDR = function(string) { - var e; - try { - return ipaddr.IPv6.parseCIDR(string); - } catch (error1) { - e = error1; - try { - return ipaddr.IPv4.parseCIDR(string); - } catch (error1) { - e = error1; - throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format"); - } - } - }; - - ipaddr.fromByteArray = function(bytes) { - var length; - length = bytes.length; - if (length === 4) { - return new ipaddr.IPv4(bytes); - } else if (length === 16) { - return new ipaddr.IPv6(bytes); - } else { - throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address"); - } - }; - - ipaddr.process = function(string) { - var addr; - addr = this.parse(string); - if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) { - return addr.toIPv4Address(); - } else { - return addr; - } - }; - -}).call(this); diff --git a/truebit-implementation/node_modules/ipaddr.js/lib/ipaddr.js.d.ts b/truebit-implementation/node_modules/ipaddr.js/lib/ipaddr.js.d.ts deleted file mode 100644 index 882fa96d..00000000 --- a/truebit-implementation/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +++ /dev/null @@ -1,71 +0,0 @@ - - -declare module "ipaddr.js" { - - type IPv4Range = 'unspecified' | 'broadcast' | 'multicast' | 'linkLocal' | 'loopback' | 'carrierGradeNat' | 'private' | 'reserved'; - type IPv6Range = 'unspecified' | 'linkLocal' | 'multicast' | 'loopback' | 'uniqueLocal' | 'ipv4Mapped' | 'rfc6145' | 'rfc6052' | '6to4' | 'teredo' | 'reserved'; - - interface RangeList { - [name: string]: [T, number] | [T, number][]; - } - - - // Common methods/properties for IPv4 and IPv6 classes. - class IP { - - prefixLengthFromSubnetMask(): number | false; - toByteArray(): number[]; - toNormalizedString(): string; - toString(): string; - } - - namespace Address { - - export function isValid(addr: string): boolean; - export function fromByteArray(bytes: number[]): IPv4 | IPv6; - export function parse(addr: string): IPv4 | IPv6; - export function parseCIDR(mask: string): [IPv4 | IPv6, number]; - export function process(address: string): IPv4 | IPv6; - export function subnetMatch(addr: IPv4, rangeList: RangeList, defaultName?: string): string; - export function subnetMatch(addr: IPv6, rangeList: RangeList, defaultName?: string): string; - - export class IPv4 extends IP { - static broadcastAddressFromCIDR(addr: string): IPv4; - static isIPv4(addr: string): boolean; - static isValidFourPartDecimal(addr: string): boolean; - static isValid(addr: string): boolean; - static networkAddressFromCIDR(addr: string): IPv4; - static parse(addr: string): IPv4; - static parseCIDR(addr: string): [IPv4, number]; - static subnetMaskFromPrefixLength(prefix: number): IPv4; - constructor(octets: number[]); - - kind(): 'ipv4'; - match(addr: IPv4, bits: number): boolean; - match(mask: [IPv4, number]): boolean; - range(): IPv4Range; - subnetMatch(rangeList: RangeList, defaultName?: string): string; - toIPv4MappedAddress(): IPv6; - } - - export class IPv6 extends IP { - static broadcastAddressFromCIDR(addr: string): IPv6; - static isIPv6(addr: string): boolean; - static isValid(addr: string): boolean; - static parse(addr: string): IPv6; - static parseCIDR(addr: string): [IPv6, number]; - static subnetMaskFromPrefixLength(prefix: number): IPv6; - constructor(octets: number[]); - - isIPv4MappedAddress(): boolean; - kind(): 'ipv6'; - match(addr: IPv6, bits: number): boolean; - match(mask: [IPv6, number]): boolean; - range(): IPv6Range; - subnetMatch(rangeList: RangeList, defaultName?: string): string; - toIPv4Address(): IPv4; - } - } - - export = Address; -} diff --git a/truebit-implementation/node_modules/ipaddr.js/package.json b/truebit-implementation/node_modules/ipaddr.js/package.json deleted file mode 100644 index d8cebbb0..00000000 --- a/truebit-implementation/node_modules/ipaddr.js/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "ipaddr.js@1.8.0", - "_id": "ipaddr.js@1.8.0", - "_inBundle": false, - "_integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", - "_location": "/ipaddr.js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "ipaddr.js@1.8.0", - "name": "ipaddr.js", - "escapedName": "ipaddr.js", - "rawSpec": "1.8.0", - "saveSpec": null, - "fetchSpec": "1.8.0" - }, - "_requiredBy": [ - "/proxy-addr" - ], - "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "_shasum": "eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e", - "_spec": "ipaddr.js@1.8.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/proxy-addr", - "author": { - "name": "whitequark", - "email": "whitequark@whitequark.org" - }, - "bugs": { - "url": "https://github.com/whitequark/ipaddr.js/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "A library for manipulating IPv4 and IPv6 addresses in JavaScript.", - "devDependencies": { - "coffee-script": "~1.12.6", - "nodeunit": ">=0.8.2 <0.8.7", - "uglify-js": "~3.0.19" - }, - "directories": { - "lib": "./lib" - }, - "engines": { - "node": ">= 0.10" - }, - "files": [ - "lib/", - "ipaddr.min.js" - ], - "homepage": "https://github.com/whitequark/ipaddr.js#readme", - "keywords": [ - "ip", - "ipv4", - "ipv6" - ], - "license": "MIT", - "main": "./lib/ipaddr.js", - "name": "ipaddr.js", - "repository": { - "type": "git", - "url": "git://github.com/whitequark/ipaddr.js.git" - }, - "scripts": { - "test": "cake build test" - }, - "types": "./lib/ipaddr.js.d.ts", - "version": "1.8.0" -} diff --git a/truebit-implementation/node_modules/is-callable/.editorconfig b/truebit-implementation/node_modules/is-callable/.editorconfig deleted file mode 100644 index bc228f82..00000000 --- a/truebit-implementation/node_modules/is-callable/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -root = true - -[*] -indent_style = tab -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 150 - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off diff --git a/truebit-implementation/node_modules/is-callable/.eslintrc b/truebit-implementation/node_modules/is-callable/.eslintrc deleted file mode 100644 index db619b50..00000000 --- a/truebit-implementation/node_modules/is-callable/.eslintrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "id-length": 0, - "max-statements": [2, 12], - "max-statements-per-line": [2, { "max": 2 }] - } -} diff --git a/truebit-implementation/node_modules/is-callable/.istanbul.yml b/truebit-implementation/node_modules/is-callable/.istanbul.yml deleted file mode 100644 index 9affe0bc..00000000 --- a/truebit-implementation/node_modules/is-callable/.istanbul.yml +++ /dev/null @@ -1,47 +0,0 @@ -verbose: false -instrumentation: - root: . - extensions: - - .js - - .jsx - default-excludes: true - excludes: [] - variable: __coverage__ - compact: true - preserve-comments: false - complete-copy: false - save-baseline: false - baseline-file: ./coverage/coverage-baseline.raw.json - include-all-sources: false - include-pid: false - es-modules: false - auto-wrap: false -reporting: - print: summary - reports: - - html - dir: ./coverage - summarizer: pkg - report-config: {} - watermarks: - statements: [50, 80] - functions: [50, 80] - branches: [50, 80] - lines: [50, 80] -hooks: - hook-run-in-context: false - post-require-hook: null - handle-sigint: false -check: - global: - statements: 100 - lines: 100 - branches: 100 - functions: 100 - excludes: [] - each: - statements: 100 - lines: 100 - branches: 100 - functions: 100 - excludes: [] diff --git a/truebit-implementation/node_modules/is-callable/.jscs.json b/truebit-implementation/node_modules/is-callable/.jscs.json deleted file mode 100644 index b4d9b8b4..00000000 --- a/truebit-implementation/node_modules/is-callable/.jscs.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "es3": true, - - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": { - "allExcept": [], - "keywords": ["if", "else", "for", "while", "do", "try", "catch"] - }, - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "disallowSpaceBeforeComma": true, - "disallowSpaceAfterComma": false, - "disallowSpaceBeforeSemicolon": true, - - "disallowNodeTypes": [ - "DebuggerStatement", - "ForInStatement", - "LabeledStatement", - "SwitchCase", - "SwitchStatement", - "WithStatement" - ], - - "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": { "allExcept": ["keywords"] }, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 1 - }, - - "requirePaddingNewLinesAfterUseStrict": true, - - "disallowArrowFunctions": true, - - "disallowMultiLineTernary": true, - - "validateOrderInObjectKeys": "asc-insensitive", - - "disallowIdenticalDestructuringNames": true, - - "disallowNestedTernaries": { "maxLevel": 1 }, - - "requireSpaceAfterComma": { "allExcept": ["trailing"] }, - "requireAlignedMultilineParams": false, - - "requireSpacesInGenerator": { - "afterStar": true - }, - - "disallowSpacesInGenerator": { - "beforeStar": true - }, - - "disallowVar": false, - - "requireArrayDestructuring": false, - - "requireEnhancedObjectLiterals": false, - - "requireObjectDestructuring": false, - - "requireEarlyReturn": false, - - "requireCapitalizedConstructorsNew": { - "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] - }, - - "requireImportAlphabetized": false, - - "requireSpaceBeforeObjectValues": true, - "requireSpaceBeforeDestructuredValues": true, - - "disallowSpacesInsideTemplateStringPlaceholders": true, - - "disallowArrayDestructuringReturn": false, - - "requireNewlineBeforeSingleStatementsInIf": false, - - "disallowUnusedVariables": true, - - "requireSpacesInsideImportedObjectBraces": true, - - "requireUseStrict": true -} - diff --git a/truebit-implementation/node_modules/is-callable/.travis.yml b/truebit-implementation/node_modules/is-callable/.travis.yml deleted file mode 100644 index 767256c8..00000000 --- a/truebit-implementation/node_modules/is-callable/.travis.yml +++ /dev/null @@ -1,225 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "10.4" - - "9.11" - - "8.11" - - "7.10" - - "6.14" - - "5.12" - - "4.9" - - "iojs-v3.3" - - "iojs-v2.5" - - "iojs-v1.8" - - "0.12" - - "0.10" - - "0.8" -before_install: - - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' - - 'nvm install-latest-npm' -install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' -script: - - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' - - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' - - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' - - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' -sudo: false -env: - - TEST=true -matrix: - fast_finish: true - include: - - node_js: "lts/*" - env: PRETEST=true - - node_js: "lts/*" - env: POSTTEST=true - - node_js: "4" - env: COVERAGE=true - - node_js: "10.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "10.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "9.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "8.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "7.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.13" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.12" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "6.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.10" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "5.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.8" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "4.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v3.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v2.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.7" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.5" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.4" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.3" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.2" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.1" - env: TEST=true ALLOW_FAILURE=true - - node_js: "iojs-v1.0" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.11" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.9" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.6" - env: TEST=true ALLOW_FAILURE=true - - node_js: "0.4" - env: TEST=true ALLOW_FAILURE=true - allow_failures: - - os: osx - - env: TEST=true ALLOW_FAILURE=true - - env: COVERAGE=true diff --git a/truebit-implementation/node_modules/is-callable/CHANGELOG.md b/truebit-implementation/node_modules/is-callable/CHANGELOG.md deleted file mode 100644 index 58286a05..00000000 --- a/truebit-implementation/node_modules/is-callable/CHANGELOG.md +++ /dev/null @@ -1,56 +0,0 @@ -1.1.4 / 2018-07-02 -================= - * [Fix] improve `class` and arrow function detection (#30, #31) - * [Tests] on all latest node minors; improve matrix - * [Dev Deps] update all dev deps - -1.1.3 / 2016-02-27 -================= - * [Fix] ensure “class “ doesn’t screw up “class” detection - * [Tests] up to `node` `v5.7`, `v4.3` - * [Dev Deps] update to `eslint` v2, `@ljharb/eslint-config`, `jscs` - -1.1.2 / 2016-01-15 -================= - * [Fix] Make sure comments don’t screw up “class” detection (#4) - * [Tests] up to `node` `v5.3` - * [Tests] Add `parallelshell`, run both `--es-staging` and stock tests at once - * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` - * [Refactor] convert `isNonES6ClassFn` into `isES6ClassFn` - -1.1.1 / 2015-11-30 -================= - * [Fix] do not throw when a non-function has a function in its [[Prototype]] (#2) - * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `jscs`, `nsp`, `semver` - * [Tests] up to `node` `v5.1` - * [Tests] no longer allow node 0.8 to fail. - * [Tests] fix npm upgrades in older nodes - -1.1.0 / 2015-10-02 -================= - * [Fix] Some browsers report TypedArray constructors as `typeof object` - * [New] return false for "class" constructors, when possible. - * [Tests] up to `io.js` `v3.3`, `node` `v4.1` - * [Dev Deps] update `eslint`, `editorconfig-tools`, `nsp`, `tape`, `semver`, `jscs`, `covert`, `make-arrow-function` - * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG - -1.0.4 / 2015-01-30 -================= - * If @@toStringTag is not present, use the old-school Object#toString test. - -1.0.3 / 2015-01-29 -================= - * Add tests to ensure arrow functions are callable. - * Refactor to aid optimization of non-try/catch code. - -1.0.2 / 2015-01-29 -================= - * Fix broken package.json - -1.0.1 / 2015-01-29 -================= - * Add early exit for typeof not "function" - -1.0.0 / 2015-01-29 -================= - * Initial release. diff --git a/truebit-implementation/node_modules/is-callable/LICENSE b/truebit-implementation/node_modules/is-callable/LICENSE deleted file mode 100644 index b43df444..00000000 --- a/truebit-implementation/node_modules/is-callable/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/is-callable/Makefile b/truebit-implementation/node_modules/is-callable/Makefile deleted file mode 100644 index b9e4fe1a..00000000 --- a/truebit-implementation/node_modules/is-callable/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# Since we rely on paths relative to the makefile location, abort if make isn't being run from there. -$(if $(findstring /,$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in)) - - # The files that need updating when incrementing the version number. -VERSIONED_FILES := *.js *.json README* - - -# Add the local npm packages' bin folder to the PATH, so that `make` can find them, when invoked directly. -# Note that rather than using `$(npm bin)` the 'node_modules/.bin' path component is hard-coded, so that invocation works even from an environment -# where npm is (temporarily) unavailable due to having deactivated an nvm instance loaded into the calling shell in order to avoid interference with tests. -export PATH := $(shell printf '%s' "$$PWD/node_modules/.bin:$$PATH") -UTILS := semver -# Make sure that all required utilities can be located. -UTIL_CHECK := $(or $(shell PATH="$(PATH)" which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to run `npm install` after cloning the repo? At least one of the required supporting utilities not found: $(UTILS))) - -# Default target (by virtue of being the first non '.'-prefixed in the file). -.PHONY: _no-target-specified -_no-target-specified: - $(error Please specify the target to make - `make list` shows targets. Alternatively, use `npm test` to run the default tests; `npm run` shows all tests) - -# Lists all targets defined in this makefile. -.PHONY: list -list: - @$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | command grep -v -e '^[^[:alnum:]]' -e '^$@$$command ' | sort - -# All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS). -.PHONY: test -test: - @npm test - -.PHONY: _ensure-tag -_ensure-tag: -ifndef TAG - $(error Please invoke with `make TAG= release`, where is either an increment specifier (patch, minor, major, prepatch, preminor, premajor, prerelease), or an explicit major.minor.patch version number) -endif - -CHANGELOG_ERROR = $(error No CHANGELOG specified) -.PHONY: _ensure-changelog -_ensure-changelog: - @ (git status -sb --porcelain | command grep -E '^( M|[MA] ) CHANGELOG.md' > /dev/null) || (echo no CHANGELOG.md specified && exit 2) - -# Ensures that the git workspace is clean. -.PHONY: _ensure-clean -_ensure-clean: - @[ -z "$$((git status --porcelain --untracked-files=no || echo err) | command grep -v 'CHANGELOG.md')" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; } - -# Makes a release; invoke with `make TAG= release`. -.PHONY: release -release: _ensure-tag _ensure-changelog _ensure-clean - @old_ver=`git describe --abbrev=0 --tags --match 'v[0-9]*.[0-9]*.[0-9]*'` || { echo "Failed to determine current version." >&2; exit 1; }; old_ver=$${old_ver#v}; \ - new_ver=`echo "$(TAG)" | sed 's/^v//'`; new_ver=$${new_ver:-patch}; \ - if printf "$$new_ver" | command grep -q '^[0-9]'; then \ - semver "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be major.minor.patch' >&2; exit 2; }; \ - semver -r "> $$old_ver" "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be HIGHER than current one.' >&2; exit 2; } \ - else \ - new_ver=`semver -i "$$new_ver" "$$old_ver"` || { echo 'Invalid version-increment specifier: $(TAG)' >&2; exit 2; } \ - fi; \ - printf "=== Bumping version **$$old_ver** to **$$new_ver** before committing and tagging:\n=== TYPE 'proceed' TO PROCEED, anything else to abort: " && read response && [ "$$response" = 'proceed' ] || { echo 'Aborted.' >&2; exit 2; }; \ - replace "$$old_ver" "$$new_ver" -- $(VERSIONED_FILES) && \ - git commit -m "v$$new_ver" $(VERSIONED_FILES) CHANGELOG.md && \ - git tag -a -m "v$$new_ver" "v$$new_ver" diff --git a/truebit-implementation/node_modules/is-callable/README.md b/truebit-implementation/node_modules/is-callable/README.md deleted file mode 100644 index 0cb65879..00000000 --- a/truebit-implementation/node_modules/is-callable/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# is-callable [![Version Badge][2]][1] - -[![Build Status][3]][4] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -[![browser support][9]][10] - -Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag. - -## Example - -```js -var isCallable = require('is-callable'); -var assert = require('assert'); - -assert.notOk(isCallable(undefined)); -assert.notOk(isCallable(null)); -assert.notOk(isCallable(false)); -assert.notOk(isCallable(true)); -assert.notOk(isCallable([])); -assert.notOk(isCallable({})); -assert.notOk(isCallable(/a/g)); -assert.notOk(isCallable(new RegExp('a', 'g'))); -assert.notOk(isCallable(new Date())); -assert.notOk(isCallable(42)); -assert.notOk(isCallable(NaN)); -assert.notOk(isCallable(Infinity)); -assert.notOk(isCallable(new Number(42))); -assert.notOk(isCallable('foo')); -assert.notOk(isCallable(Object('foo'))); - -assert.ok(isCallable(function () {})); -assert.ok(isCallable(function* () {})); -assert.ok(isCallable(x => x * x)); -``` - -## Tests -Simply clone the repo, `npm install`, and run `npm test` - -[1]: https://npmjs.org/package/is-callable -[2]: http://versionbadg.es/ljharb/is-callable.svg -[3]: https://travis-ci.org/ljharb/is-callable.svg -[4]: https://travis-ci.org/ljharb/is-callable -[5]: https://david-dm.org/ljharb/is-callable.svg -[6]: https://david-dm.org/ljharb/is-callable -[7]: https://david-dm.org/ljharb/is-callable/dev-status.svg -[8]: https://david-dm.org/ljharb/is-callable#info=devDependencies -[9]: https://ci.testling.com/ljharb/is-callable.png -[10]: https://ci.testling.com/ljharb/is-callable -[11]: https://nodei.co/npm/is-callable.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-callable.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-callable.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-callable diff --git a/truebit-implementation/node_modules/is-callable/index.js b/truebit-implementation/node_modules/is-callable/index.js deleted file mode 100644 index d9820b51..00000000 --- a/truebit-implementation/node_modules/is-callable/index.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var fnToStr = Function.prototype.toString; - -var constructorRegex = /^\s*class\b/; -var isES6ClassFn = function isES6ClassFunction(value) { - try { - var fnStr = fnToStr.call(value); - return constructorRegex.test(fnStr); - } catch (e) { - return false; // not a function - } -}; - -var tryFunctionObject = function tryFunctionToStr(value) { - try { - if (isES6ClassFn(value)) { return false; } - fnToStr.call(value); - return true; - } catch (e) { - return false; - } -}; -var toStr = Object.prototype.toString; -var fnClass = '[object Function]'; -var genClass = '[object GeneratorFunction]'; -var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; - -module.exports = function isCallable(value) { - if (!value) { return false; } - if (typeof value !== 'function' && typeof value !== 'object') { return false; } - if (typeof value === 'function' && !value.prototype) { return true; } - if (hasToStringTag) { return tryFunctionObject(value); } - if (isES6ClassFn(value)) { return false; } - var strClass = toStr.call(value); - return strClass === fnClass || strClass === genClass; -}; diff --git a/truebit-implementation/node_modules/is-callable/package.json b/truebit-implementation/node_modules/is-callable/package.json deleted file mode 100644 index 35cf7577..00000000 --- a/truebit-implementation/node_modules/is-callable/package.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "_from": "is-callable@^1.1.3", - "_id": "is-callable@1.1.4", - "_inBundle": false, - "_integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "_location": "/is-callable", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-callable@^1.1.3", - "name": "is-callable", - "escapedName": "is-callable", - "rawSpec": "^1.1.3", - "saveSpec": null, - "fetchSpec": "^1.1.3" - }, - "_requiredBy": [ - "/for-each" - ], - "_resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "_shasum": "1e1adf219e1eeb684d691f9d6a05ff0d30a24d75", - "_spec": "is-callable@^1.1.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/for-each", - "author": { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - }, - "bugs": { - "url": "https://github.com/ljharb/is-callable/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.", - "devDependencies": { - "@ljharb/eslint-config": "^12.2.1", - "covert": "^1.1.0", - "editorconfig-tools": "^0.1.1", - "eslint": "^4.19.1", - "foreach": "^2.0.5", - "istanbul": "1.1.0-alpha.1", - "istanbul-merge": "^1.1.1", - "jscs": "^3.0.7", - "make-arrow-function": "^1.1.0", - "make-generator-function": "^1.1.0", - "nsp": "^3.2.1", - "rimraf": "^2.6.2", - "semver": "^5.5.0", - "tape": "^4.9.1" - }, - "engines": { - "node": ">= 0.4" - }, - "homepage": "https://github.com/ljharb/is-callable#readme", - "keywords": [ - "Function", - "function", - "callable", - "generator", - "generator function", - "arrow", - "arrow function", - "ES6", - "toStringTag", - "@@toStringTag" - ], - "license": "MIT", - "main": "index.js", - "name": "is-callable", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/is-callable.git" - }, - "scripts": { - "coverage": "npm run --silent istanbul", - "covert": "covert test.js", - "covert:quiet": "covert test.js --quiet", - "eslint": "eslint *.js", - "istanbul": "npm run --silent istanbul:clean && npm run --silent istanbul:std && npm run --silent istanbul:harmony && npm run --silent istanbul:merge && istanbul check", - "istanbul:clean": "rimraf coverage coverage-std coverage-harmony", - "istanbul:harmony": "node --harmony ./node_modules/istanbul/lib/cli.js cover test.js --dir coverage-harmony", - "istanbul:merge": "istanbul-merge --out coverage/coverage.raw.json coverage-harmony/coverage.raw.json coverage-std/coverage.raw.json && istanbul report html", - "istanbul:std": "istanbul cover test.js --report html --dir coverage-std", - "jscs": "jscs *.js", - "lint": "npm run jscs && npm run eslint", - "posttest": "npm run --silent security", - "prelint": "editorconfig-tools check *", - "pretest": "npm run --silent lint", - "security": "nsp check", - "test": "npm run --silent tests-only", - "test:staging": "node --es-staging test.js", - "test:stock": "node test.js", - "tests-only": "npm run --silent test:stock && npm run --silent test:staging" - }, - "testling": { - "files": "test.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.1.4" -} diff --git a/truebit-implementation/node_modules/is-callable/test.js b/truebit-implementation/node_modules/is-callable/test.js deleted file mode 100644 index f5be51d8..00000000 --- a/truebit-implementation/node_modules/is-callable/test.js +++ /dev/null @@ -1,158 +0,0 @@ -'use strict'; - -/* eslint no-magic-numbers: 1 */ - -var test = require('tape'); -var isCallable = require('./'); -var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; -var genFn = require('make-generator-function'); -var arrowFn = require('make-arrow-function')(); -var weirdlyCommentedArrowFn; -var asyncFn; -var asyncArrowFn; -try { - /* eslint no-new-func: 0 */ - weirdlyCommentedArrowFn = Function('return cl/*/**/=>/**/ass - 1;')(); - asyncFn = Function('return async function foo() {};')(); - asyncArrowFn = Function('return async () => {};')(); -} catch (e) { /**/ } -var forEach = require('foreach'); - -var noop = function () {}; -var classFake = function classFake() { }; // eslint-disable-line func-name-matching -var returnClass = function () { return ' class '; }; -var return3 = function () { return 3; }; -/* for coverage */ -noop(); -classFake(); -returnClass(); -return3(); -/* end for coverage */ - -var invokeFunction = function invokeFunctionString(str) { - var result; - try { - /* eslint-disable no-new-func */ - var fn = Function(str); - /* eslint-enable no-new-func */ - result = fn(); - } catch (e) {} - return result; -}; - -var classConstructor = invokeFunction('"use strict"; return class Foo {}'); - -var commentedClass = invokeFunction('"use strict"; return class/*kkk*/\n//blah\n Bar\n//blah\n {}'); -var commentedClassOneLine = invokeFunction('"use strict"; return class/**/A{}'); -var classAnonymous = invokeFunction('"use strict"; return class{}'); -var classAnonymousCommentedOneLine = invokeFunction('"use strict"; return class/*/*/{}'); - -test('not callables', function (t) { - t.test('non-number/string primitives', function (st) { - st.notOk(isCallable(), 'undefined is not callable'); - st.notOk(isCallable(null), 'null is not callable'); - st.notOk(isCallable(false), 'false is not callable'); - st.notOk(isCallable(true), 'true is not callable'); - st.end(); - }); - - t.notOk(isCallable([]), 'array is not callable'); - t.notOk(isCallable({}), 'object is not callable'); - t.notOk(isCallable(/a/g), 'regex literal is not callable'); - t.notOk(isCallable(new RegExp('a', 'g')), 'regex object is not callable'); - t.notOk(isCallable(new Date()), 'new Date() is not callable'); - - t.test('numbers', function (st) { - st.notOk(isCallable(42), 'number is not callable'); - st.notOk(isCallable(Object(42)), 'number object is not callable'); - st.notOk(isCallable(NaN), 'NaN is not callable'); - st.notOk(isCallable(Infinity), 'Infinity is not callable'); - st.end(); - }); - - t.test('strings', function (st) { - st.notOk(isCallable('foo'), 'string primitive is not callable'); - st.notOk(isCallable(Object('foo')), 'string object is not callable'); - st.end(); - }); - - t.test('non-function with function in its [[Prototype]] chain', function (st) { - var Foo = function Bar() {}; - Foo.prototype = noop; - st.equal(true, isCallable(Foo), 'sanity check: Foo is callable'); - st.equal(false, isCallable(new Foo()), 'instance of Foo is not callable'); - st.end(); - }); - - t.end(); -}); - -test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) { - var fakeFunction = { - toString: function () { return String(return3); }, - valueOf: return3 - }; - fakeFunction[Symbol.toStringTag] = 'Function'; - t.equal(String(fakeFunction), String(return3)); - t.equal(Number(fakeFunction), return3()); - t.notOk(isCallable(fakeFunction), 'fake Function with @@toStringTag "Function" is not callable'); - t.end(); -}); - -var typedArrayNames = [ - 'Int8Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Int16Array', - 'Uint16Array', - 'Int32Array', - 'Uint32Array', - 'Float32Array', - 'Float64Array' -]; - -test('Functions', function (t) { - t.ok(isCallable(noop), 'function is callable'); - t.ok(isCallable(classFake), 'function with name containing "class" is callable'); - t.ok(isCallable(returnClass), 'function with string " class " is callable'); - t.ok(isCallable(isCallable), 'isCallable is callable'); - t.end(); -}); - -test('Typed Arrays', function (st) { - forEach(typedArrayNames, function (typedArray) { - /* istanbul ignore if : covered in node 0.6 */ - if (typeof global[typedArray] === 'undefined') { - st.comment('# SKIP typed array "' + typedArray + '" not supported'); - } else { - st.ok(isCallable(global[typedArray]), typedArray + ' is callable'); - } - }); - st.end(); -}); - -test('Generators', { skip: !genFn }, function (t) { - t.ok(isCallable(genFn), 'generator function is callable'); - t.end(); -}); - -test('Arrow functions', { skip: !arrowFn }, function (t) { - t.ok(isCallable(arrowFn), 'arrow function is callable'); - t.ok(isCallable(weirdlyCommentedArrowFn), 'weirdly commented arrow functions are callable'); - t.end(); -}); - -test('"Class" constructors', { skip: !classConstructor || !commentedClass || !commentedClassOneLine || !classAnonymous }, function (t) { - t.notOk(isCallable(classConstructor), 'class constructors are not callable'); - t.notOk(isCallable(commentedClass), 'class constructors with comments in the signature are not callable'); - t.notOk(isCallable(commentedClassOneLine), 'one-line class constructors with comments in the signature are not callable'); - t.notOk(isCallable(classAnonymous), 'anonymous class constructors are not callable'); - t.notOk(isCallable(classAnonymousCommentedOneLine), 'anonymous one-line class constructors with comments in the signature are not callable'); - t.end(); -}); - -test('`async function`s', { skip: !asyncFn }, function (t) { - t.ok(isCallable(asyncFn), '`async function`s are callable'); - t.ok(isCallable(asyncArrowFn), '`async` arrow functions are callable'); - t.end(); -}); diff --git a/truebit-implementation/node_modules/is-function/LICENSE b/truebit-implementation/node_modules/is-function/LICENSE deleted file mode 100644 index 0b4aed18..00000000 --- a/truebit-implementation/node_modules/is-function/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013 Stephen Sugden - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-function/README.md b/truebit-implementation/node_modules/is-function/README.md deleted file mode 100644 index 0a67128c..00000000 --- a/truebit-implementation/node_modules/is-function/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# is-function - -[![browser support](https://ci.testling.com/grncdr/js-is-function.png)](https://ci.testling.com/grncdr/js-is-function) - -Is that thing a function? Use this module to find out. - -## API - -### module.exports = function isFunction(fn) -> Boolean - -Return `true` if `fn` is a function, otherwise `false`. - -## Why not typeof fn === 'function' - -Because certain old browsers misreport the type of `RegExp` objects as functions. - -## Acknowledgements - -I stole this from https://github.com/ljharb/object-keys - -## License - -MIT diff --git a/truebit-implementation/node_modules/is-function/browser-test.js b/truebit-implementation/node_modules/is-function/browser-test.js deleted file mode 100644 index 8b52b40e..00000000 --- a/truebit-implementation/node_modules/is-function/browser-test.js +++ /dev/null @@ -1,6028 +0,0 @@ -(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);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o - * License: MIT - * - * `npm install buffer` - */ - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = Buffer -exports.INSPECT_MAX_BYTES = 50 -Buffer.poolSize = 8192 - -/** - * If `Buffer._useTypedArrays`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (compatible down to IE6) - */ -Buffer._useTypedArrays = (function () { - // Detect if browser supports Typed Arrays. Supported browsers are IE 10+, - // Firefox 4+, Chrome 7+, Safari 5.1+, Opera 11.6+, iOS 4.2+. - if (typeof Uint8Array === 'undefined' || typeof ArrayBuffer === 'undefined') - return false - - // Does the browser support adding properties to `Uint8Array` instances? If - // not, then that's the same as no `Uint8Array` support. We need to be able to - // add all the node Buffer API methods. - // Relevant Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=695438 - try { - var arr = new Uint8Array(0) - arr.foo = function () { return 42 } - return 42 === arr.foo() && - typeof arr.subarray === 'function' // Chrome 9-10 lack `subarray` - } catch (e) { - return false - } -})() - -/** - * Class: Buffer - * ============= - * - * The Buffer constructor returns instances of `Uint8Array` that are augmented - * with function properties for all the node `Buffer` API functions. We use - * `Uint8Array` so that square bracket notation works as expected -- it returns - * a single octet. - * - * By augmenting the instances, we can avoid modifying the `Uint8Array` - * prototype. - */ -function Buffer (subject, encoding, noZero) { - if (!(this instanceof Buffer)) - return new Buffer(subject, encoding, noZero) - - var type = typeof subject - - // Workaround: node's base64 implementation allows for non-padded strings - // while base64-js does not. - if (encoding === 'base64' && type === 'string') { - subject = stringtrim(subject) - while (subject.length % 4 !== 0) { - subject = subject + '=' - } - } - - // Find the length - var length - if (type === 'number') - length = coerce(subject) - else if (type === 'string') - length = Buffer.byteLength(subject, encoding) - else if (type === 'object') - length = coerce(subject.length) // Assume object is an array - else - throw new Error('First argument needs to be a number, array or string.') - - var buf - if (Buffer._useTypedArrays) { - // Preferred: Return an augmented `Uint8Array` instance for best performance - buf = augment(new Uint8Array(length)) - } else { - // Fallback: Return THIS instance of Buffer (created by `new`) - buf = this - buf.length = length - buf._isBuffer = true - } - - var i - if (Buffer._useTypedArrays && typeof Uint8Array === 'function' && - subject instanceof Uint8Array) { - // Speed optimization -- use set if we're copying from a Uint8Array - buf._set(subject) - } else if (isArrayish(subject)) { - // Treat array-ish objects as a byte array - for (i = 0; i < length; i++) { - if (Buffer.isBuffer(subject)) - buf[i] = subject.readUInt8(i) - else - buf[i] = subject[i] - } - } else if (type === 'string') { - buf.write(subject, 0, encoding) - } else if (type === 'number' && !Buffer._useTypedArrays && !noZero) { - for (i = 0; i < length; i++) { - buf[i] = 0 - } - } - - return buf -} - -// STATIC METHODS -// ============== - -Buffer.isEncoding = function (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'binary': - case 'base64': - case 'raw': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.isBuffer = function (b) { - return !!(b !== null && b !== undefined && b._isBuffer) -} - -Buffer.byteLength = function (str, encoding) { - var ret - str = str + '' - switch (encoding || 'utf8') { - case 'hex': - ret = str.length / 2 - break - case 'utf8': - case 'utf-8': - ret = utf8ToBytes(str).length - break - case 'ascii': - case 'binary': - case 'raw': - ret = str.length - break - case 'base64': - ret = base64ToBytes(str).length - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = str.length * 2 - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.concat = function (list, totalLength) { - assert(isArray(list), 'Usage: Buffer.concat(list, [totalLength])\n' + - 'list should be an Array.') - - if (list.length === 0) { - return new Buffer(0) - } else if (list.length === 1) { - return list[0] - } - - var i - if (typeof totalLength !== 'number') { - totalLength = 0 - for (i = 0; i < list.length; i++) { - totalLength += list[i].length - } - } - - var buf = new Buffer(totalLength) - var pos = 0 - for (i = 0; i < list.length; i++) { - var item = list[i] - item.copy(buf, pos) - pos += item.length - } - return buf -} - -// BUFFER INSTANCE METHODS -// ======================= - -function _hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - assert(strLen % 2 === 0, 'Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; i++) { - var byte = parseInt(string.substr(i * 2, 2), 16) - assert(!isNaN(byte), 'Invalid hex string') - buf[offset + i] = byte - } - Buffer._charsWritten = i * 2 - return i -} - -function _utf8Write (buf, string, offset, length) { - var charsWritten = Buffer._charsWritten = - blitBuffer(utf8ToBytes(string), buf, offset, length) - return charsWritten -} - -function _asciiWrite (buf, string, offset, length) { - var charsWritten = Buffer._charsWritten = - blitBuffer(asciiToBytes(string), buf, offset, length) - return charsWritten -} - -function _binaryWrite (buf, string, offset, length) { - return _asciiWrite(buf, string, offset, length) -} - -function _base64Write (buf, string, offset, length) { - var charsWritten = Buffer._charsWritten = - blitBuffer(base64ToBytes(string), buf, offset, length) - return charsWritten -} - -function _utf16leWrite (buf, string, offset, length) { - var charsWritten = Buffer._charsWritten = - blitBuffer(utf16leToBytes(string), buf, offset, length) - return charsWritten -} - -Buffer.prototype.write = function (string, offset, length, encoding) { - // Support both (string, offset, length, encoding) - // and the legacy (string, encoding, offset, length) - if (isFinite(offset)) { - if (!isFinite(length)) { - encoding = length - length = undefined - } - } else { // legacy - var swap = encoding - encoding = offset - offset = length - length = swap - } - - offset = Number(offset) || 0 - var remaining = this.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - encoding = String(encoding || 'utf8').toLowerCase() - - var ret - switch (encoding) { - case 'hex': - ret = _hexWrite(this, string, offset, length) - break - case 'utf8': - case 'utf-8': - ret = _utf8Write(this, string, offset, length) - break - case 'ascii': - ret = _asciiWrite(this, string, offset, length) - break - case 'binary': - ret = _binaryWrite(this, string, offset, length) - break - case 'base64': - ret = _base64Write(this, string, offset, length) - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = _utf16leWrite(this, string, offset, length) - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.prototype.toString = function (encoding, start, end) { - var self = this - - encoding = String(encoding || 'utf8').toLowerCase() - start = Number(start) || 0 - end = (end !== undefined) - ? Number(end) - : end = self.length - - // Fastpath empty strings - if (end === start) - return '' - - var ret - switch (encoding) { - case 'hex': - ret = _hexSlice(self, start, end) - break - case 'utf8': - case 'utf-8': - ret = _utf8Slice(self, start, end) - break - case 'ascii': - ret = _asciiSlice(self, start, end) - break - case 'binary': - ret = _binarySlice(self, start, end) - break - case 'base64': - ret = _base64Slice(self, start, end) - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = _utf16leSlice(self, start, end) - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.prototype.toJSON = function () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function (target, target_start, start, end) { - var source = this - - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (!target_start) target_start = 0 - - // Copy 0 bytes; we're done - if (end === start) return - if (target.length === 0 || source.length === 0) return - - // Fatal error conditions - assert(end >= start, 'sourceEnd < sourceStart') - assert(target_start >= 0 && target_start < target.length, - 'targetStart out of bounds') - assert(start >= 0 && start < source.length, 'sourceStart out of bounds') - assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) - end = this.length - if (target.length - target_start < end - start) - end = target.length - target_start + start - - // copy! - for (var i = 0; i < end - start; i++) - target[i + target_start] = this[i + start] -} - -function _base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function _utf8Slice (buf, start, end) { - var res = '' - var tmp = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - if (buf[i] <= 0x7F) { - res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) - tmp = '' - } else { - tmp += '%' + buf[i].toString(16) - } - } - - return res + decodeUtf8Char(tmp) -} - -function _asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) - ret += String.fromCharCode(buf[i]) - return ret -} - -function _binarySlice (buf, start, end) { - return _asciiSlice(buf, start, end) -} - -function _hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; i++) { - out += toHex(buf[i]) - } - return out -} - -function _utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i+1] * 256) - } - return res -} - -Buffer.prototype.slice = function (start, end) { - var len = this.length - start = clamp(start, len, 0) - end = clamp(end, len, len) - - if (Buffer._useTypedArrays) { - return augment(this.subarray(start, end)) - } else { - var sliceLen = end - start - var newBuf = new Buffer(sliceLen, undefined, true) - for (var i = 0; i < sliceLen; i++) { - newBuf[i] = this[i + start] - } - return newBuf - } -} - -// `get` will be removed in Node 0.13+ -Buffer.prototype.get = function (offset) { - console.log('.get() is deprecated. Access using array indexes instead.') - return this.readUInt8(offset) -} - -// `set` will be removed in Node 0.13+ -Buffer.prototype.set = function (v, offset) { - console.log('.set() is deprecated. Access using array indexes instead.') - return this.writeUInt8(v, offset) -} - -Buffer.prototype.readUInt8 = function (offset, noAssert) { - if (!noAssert) { - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'Trying to read beyond buffer length') - } - - if (offset >= this.length) - return - - return this[offset] -} - -function _readUInt16 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val - if (littleEndian) { - val = buf[offset] - if (offset + 1 < len) - val |= buf[offset + 1] << 8 - } else { - val = buf[offset] << 8 - if (offset + 1 < len) - val |= buf[offset + 1] - } - return val -} - -Buffer.prototype.readUInt16LE = function (offset, noAssert) { - return _readUInt16(this, offset, true, noAssert) -} - -Buffer.prototype.readUInt16BE = function (offset, noAssert) { - return _readUInt16(this, offset, false, noAssert) -} - -function _readUInt32 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val - if (littleEndian) { - if (offset + 2 < len) - val = buf[offset + 2] << 16 - if (offset + 1 < len) - val |= buf[offset + 1] << 8 - val |= buf[offset] - if (offset + 3 < len) - val = val + (buf[offset + 3] << 24 >>> 0) - } else { - if (offset + 1 < len) - val = buf[offset + 1] << 16 - if (offset + 2 < len) - val |= buf[offset + 2] << 8 - if (offset + 3 < len) - val |= buf[offset + 3] - val = val + (buf[offset] << 24 >>> 0) - } - return val -} - -Buffer.prototype.readUInt32LE = function (offset, noAssert) { - return _readUInt32(this, offset, true, noAssert) -} - -Buffer.prototype.readUInt32BE = function (offset, noAssert) { - return _readUInt32(this, offset, false, noAssert) -} - -Buffer.prototype.readInt8 = function (offset, noAssert) { - if (!noAssert) { - assert(offset !== undefined && offset !== null, - 'missing offset') - assert(offset < this.length, 'Trying to read beyond buffer length') - } - - if (offset >= this.length) - return - - var neg = this[offset] & 0x80 - if (neg) - return (0xff - this[offset] + 1) * -1 - else - return this[offset] -} - -function _readInt16 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val = _readUInt16(buf, offset, littleEndian, true) - var neg = val & 0x8000 - if (neg) - return (0xffff - val + 1) * -1 - else - return val -} - -Buffer.prototype.readInt16LE = function (offset, noAssert) { - return _readInt16(this, offset, true, noAssert) -} - -Buffer.prototype.readInt16BE = function (offset, noAssert) { - return _readInt16(this, offset, false, noAssert) -} - -function _readInt32 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val = _readUInt32(buf, offset, littleEndian, true) - var neg = val & 0x80000000 - if (neg) - return (0xffffffff - val + 1) * -1 - else - return val -} - -Buffer.prototype.readInt32LE = function (offset, noAssert) { - return _readInt32(this, offset, true, noAssert) -} - -Buffer.prototype.readInt32BE = function (offset, noAssert) { - return _readInt32(this, offset, false, noAssert) -} - -function _readFloat (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - return ieee754.read(buf, offset, littleEndian, 23, 4) -} - -Buffer.prototype.readFloatLE = function (offset, noAssert) { - return _readFloat(this, offset, true, noAssert) -} - -Buffer.prototype.readFloatBE = function (offset, noAssert) { - return _readFloat(this, offset, false, noAssert) -} - -function _readDouble (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset + 7 < buf.length, 'Trying to read beyond buffer length') - } - - return ieee754.read(buf, offset, littleEndian, 52, 8) -} - -Buffer.prototype.readDoubleLE = function (offset, noAssert) { - return _readDouble(this, offset, true, noAssert) -} - -Buffer.prototype.readDoubleBE = function (offset, noAssert) { - return _readDouble(this, offset, false, noAssert) -} - -Buffer.prototype.writeUInt8 = function (value, offset, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'trying to write beyond buffer length') - verifuint(value, 0xff) - } - - if (offset >= this.length) return - - this[offset] = value -} - -function _writeUInt16 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'trying to write beyond buffer length') - verifuint(value, 0xffff) - } - - var len = buf.length - if (offset >= len) - return - - for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) { - buf[offset + i] = - (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } -} - -Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) { - _writeUInt16(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) { - _writeUInt16(this, value, offset, false, noAssert) -} - -function _writeUInt32 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'trying to write beyond buffer length') - verifuint(value, 0xffffffff) - } - - var len = buf.length - if (offset >= len) - return - - for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) { - buf[offset + i] = - (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } -} - -Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) { - _writeUInt32(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) { - _writeUInt32(this, value, offset, false, noAssert) -} - -Buffer.prototype.writeInt8 = function (value, offset, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7f, -0x80) - } - - if (offset >= this.length) - return - - if (value >= 0) - this.writeUInt8(value, offset, noAssert) - else - this.writeUInt8(0xff + value + 1, offset, noAssert) -} - -function _writeInt16 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7fff, -0x8000) - } - - var len = buf.length - if (offset >= len) - return - - if (value >= 0) - _writeUInt16(buf, value, offset, littleEndian, noAssert) - else - _writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert) -} - -Buffer.prototype.writeInt16LE = function (value, offset, noAssert) { - _writeInt16(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeInt16BE = function (value, offset, noAssert) { - _writeInt16(this, value, offset, false, noAssert) -} - -function _writeInt32 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7fffffff, -0x80000000) - } - - var len = buf.length - if (offset >= len) - return - - if (value >= 0) - _writeUInt32(buf, value, offset, littleEndian, noAssert) - else - _writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert) -} - -Buffer.prototype.writeInt32LE = function (value, offset, noAssert) { - _writeInt32(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeInt32BE = function (value, offset, noAssert) { - _writeInt32(this, value, offset, false, noAssert) -} - -function _writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') - verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - - var len = buf.length - if (offset >= len) - return - - ieee754.write(buf, value, offset, littleEndian, 23, 4) -} - -Buffer.prototype.writeFloatLE = function (value, offset, noAssert) { - _writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function (value, offset, noAssert) { - _writeFloat(this, value, offset, false, noAssert) -} - -function _writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 7 < buf.length, - 'Trying to write beyond buffer length') - verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - - var len = buf.length - if (offset >= len) - return - - ieee754.write(buf, value, offset, littleEndian, 52, 8) -} - -Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) { - _writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) { - _writeDouble(this, value, offset, false, noAssert) -} - -// fill(value, start=0, end=buffer.length) -Buffer.prototype.fill = function (value, start, end) { - if (!value) value = 0 - if (!start) start = 0 - if (!end) end = this.length - - if (typeof value === 'string') { - value = value.charCodeAt(0) - } - - assert(typeof value === 'number' && !isNaN(value), 'value is not a number') - assert(end >= start, 'end < start') - - // Fill 0 bytes; we're done - if (end === start) return - if (this.length === 0) return - - assert(start >= 0 && start < this.length, 'start out of bounds') - assert(end >= 0 && end <= this.length, 'end out of bounds') - - for (var i = start; i < end; i++) { - this[i] = value - } -} - -Buffer.prototype.inspect = function () { - var out = [] - var len = this.length - for (var i = 0; i < len; i++) { - out[i] = toHex(this[i]) - if (i === exports.INSPECT_MAX_BYTES) { - out[i + 1] = '...' - break - } - } - return '' -} - -/** - * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. - * Added in Node 0.12. Only available in browsers that support ArrayBuffer. - */ -Buffer.prototype.toArrayBuffer = function () { - if (typeof Uint8Array === 'function') { - if (Buffer._useTypedArrays) { - return (new Buffer(this)).buffer - } else { - var buf = new Uint8Array(this.length) - for (var i = 0, len = buf.length; i < len; i += 1) - buf[i] = this[i] - return buf.buffer - } - } else { - throw new Error('Buffer.toArrayBuffer not supported in this browser') - } -} - -// HELPER FUNCTIONS -// ================ - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -var BP = Buffer.prototype - -/** - * Augment the Uint8Array *instance* (not the class!) with Buffer methods - */ -function augment (arr) { - arr._isBuffer = true - - // save reference to original Uint8Array get/set methods before overwriting - arr._get = arr.get - arr._set = arr.set - - // deprecated, will be removed in node 0.13+ - arr.get = BP.get - arr.set = BP.set - - arr.write = BP.write - arr.toString = BP.toString - arr.toLocaleString = BP.toString - arr.toJSON = BP.toJSON - arr.copy = BP.copy - arr.slice = BP.slice - arr.readUInt8 = BP.readUInt8 - arr.readUInt16LE = BP.readUInt16LE - arr.readUInt16BE = BP.readUInt16BE - arr.readUInt32LE = BP.readUInt32LE - arr.readUInt32BE = BP.readUInt32BE - arr.readInt8 = BP.readInt8 - arr.readInt16LE = BP.readInt16LE - arr.readInt16BE = BP.readInt16BE - arr.readInt32LE = BP.readInt32LE - arr.readInt32BE = BP.readInt32BE - arr.readFloatLE = BP.readFloatLE - arr.readFloatBE = BP.readFloatBE - arr.readDoubleLE = BP.readDoubleLE - arr.readDoubleBE = BP.readDoubleBE - arr.writeUInt8 = BP.writeUInt8 - arr.writeUInt16LE = BP.writeUInt16LE - arr.writeUInt16BE = BP.writeUInt16BE - arr.writeUInt32LE = BP.writeUInt32LE - arr.writeUInt32BE = BP.writeUInt32BE - arr.writeInt8 = BP.writeInt8 - arr.writeInt16LE = BP.writeInt16LE - arr.writeInt16BE = BP.writeInt16BE - arr.writeInt32LE = BP.writeInt32LE - arr.writeInt32BE = BP.writeInt32BE - arr.writeFloatLE = BP.writeFloatLE - arr.writeFloatBE = BP.writeFloatBE - arr.writeDoubleLE = BP.writeDoubleLE - arr.writeDoubleBE = BP.writeDoubleBE - arr.fill = BP.fill - arr.inspect = BP.inspect - arr.toArrayBuffer = BP.toArrayBuffer - - return arr -} - -// slice(start, end) -function clamp (index, len, defaultValue) { - if (typeof index !== 'number') return defaultValue - index = ~~index; // Coerce to integer. - if (index >= len) return len - if (index >= 0) return index - index += len - if (index >= 0) return index - return 0 -} - -function coerce (length) { - // Coerce length to a number (possibly NaN), round up - // in case it's fractional (e.g. 123.456) then do a - // double negate to coerce a NaN to 0. Easy, right? - length = ~~Math.ceil(+length) - return length < 0 ? 0 : length -} - -function isArray (subject) { - return (Array.isArray || function (subject) { - return Object.prototype.toString.call(subject) === '[object Array]' - })(subject) -} - -function isArrayish (subject) { - return isArray(subject) || Buffer.isBuffer(subject) || - subject && typeof subject === 'object' && - typeof subject.length === 'number' -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - var b = str.charCodeAt(i) - if (b <= 0x7F) - byteArray.push(str.charCodeAt(i)) - else { - var start = i - if (b >= 0xD800 && b <= 0xDFFF) i++ - var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%') - for (var j = 0; j < h.length; j++) - byteArray.push(parseInt(h[j], 16)) - } - } - return byteArray -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; i++) { - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(str) -} - -function blitBuffer (src, dst, offset, length) { - var pos - for (var i = 0; i < length; i++) { - if ((i + offset >= dst.length) || (i >= src.length)) - break - dst[i + offset] = src[i] - } - return i -} - -function decodeUtf8Char (str) { - try { - return decodeURIComponent(str) - } catch (err) { - return String.fromCharCode(0xFFFD) // UTF 8 invalid char - } -} - -/* - * We have to make sure that the value is a valid integer. This means that it - * is non-negative. It has no fractional component and that it does not - * exceed the maximum allowed value. - */ -function verifuint (value, max) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value >= 0, - 'specified a negative value for writing an unsigned value') - assert(value <= max, 'value is larger than maximum value for type') - assert(Math.floor(value) === value, 'value has a fractional component') -} - -function verifsint (value, max, min) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value <= max, 'value larger than maximum allowed value') - assert(value >= min, 'value smaller than minimum allowed value') - assert(Math.floor(value) === value, 'value has a fractional component') -} - -function verifIEEE754 (value, max, min) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value <= max, 'value larger than maximum allowed value') - assert(value >= min, 'value smaller than minimum allowed value') -} - -function assert (test, message) { - if (!test) throw new Error(message || 'Failed assertion') -} - -},{"base64-js":2,"ieee754":3}],2:[function(require,module,exports){ -var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -;(function (exports) { - 'use strict'; - - var Arr = (typeof Uint8Array !== 'undefined') - ? Uint8Array - : Array - - var ZERO = '0'.charCodeAt(0) - var PLUS = '+'.charCodeAt(0) - var SLASH = '/'.charCodeAt(0) - var NUMBER = '0'.charCodeAt(0) - var LOWER = 'a'.charCodeAt(0) - var UPPER = 'A'.charCodeAt(0) - - function decode (elt) { - var code = elt.charCodeAt(0) - if (code === PLUS) - return 62 // '+' - if (code === SLASH) - return 63 // '/' - if (code < NUMBER) - return -1 //no match - if (code < NUMBER + 10) - return code - NUMBER + 26 + 26 - if (code < UPPER + 26) - return code - UPPER - if (code < LOWER + 26) - return code - LOWER + 26 - } - - function b64ToByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - - if (b64.length % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 - - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length - - var L = 0 - - function push (v) { - arr[L++] = v - } - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } - - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } - - return arr - } - - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length - - function encode (num) { - return lookup.charAt(num) - } - - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } - - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } - - return output - } - - module.exports.toByteArray = b64ToByteArray - module.exports.fromByteArray = uint8ToBase64 -}()) - -},{}],3:[function(require,module,exports){ -exports.read = function(buffer, offset, isLE, mLen, nBytes) { - var e, m, - eLen = nBytes * 8 - mLen - 1, - eMax = (1 << eLen) - 1, - eBias = eMax >> 1, - nBits = -7, - i = isLE ? (nBytes - 1) : 0, - d = isLE ? -1 : 1, - s = buffer[offset + i]; - - i += d; - - e = s & ((1 << (-nBits)) - 1); - s >>= (-nBits); - nBits += eLen; - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); - - m = e & ((1 << (-nBits)) - 1); - e >>= (-nBits); - nBits += mLen; - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); - - if (e === 0) { - e = 1 - eBias; - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity); - } else { - m = m + Math.pow(2, mLen); - e = e - eBias; - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen); -}; - -exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c, - eLen = nBytes * 8 - mLen - 1, - eMax = (1 << eLen) - 1, - eBias = eMax >> 1, - rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), - i = isLE ? 0 : (nBytes - 1), - d = isLE ? 1 : -1, - s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; - - value = Math.abs(value); - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0; - e = eMax; - } else { - e = Math.floor(Math.log(value) / Math.LN2); - if (value * (c = Math.pow(2, -e)) < 1) { - e--; - c *= 2; - } - if (e + eBias >= 1) { - value += rt / c; - } else { - value += rt * Math.pow(2, 1 - eBias); - } - if (value * c >= 2) { - e++; - c /= 2; - } - - if (e + eBias >= eMax) { - m = 0; - e = eMax; - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen); - e = e + eBias; - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); - e = 0; - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); - - e = (e << mLen) | m; - eLen += mLen; - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); - - buffer[offset + i - d] |= s * 128; -}; - -},{}],4:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } else { - throw TypeError('Uncaught, unspecified "error" event.'); - } - return false; - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - handler.apply(this, args); - } - } else if (isObject(handler)) { - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; - - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - var m; - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - console.trace(); - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; - -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.listenerCount = function(emitter, type) { - var ret; - if (!emitter._events || !emitter._events[type]) - ret = 0; - else if (isFunction(emitter._events[type])) - ret = 1; - else - ret = emitter._events[type].length; - return ret; -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - -},{}],5:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],6:[function(require,module,exports){ -// shim for using process in browser - -var process = module.exports = {}; - -process.nextTick = (function () { - var canSetImmediate = typeof window !== 'undefined' - && window.setImmediate; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; - - if (canSetImmediate) { - return function (f) { return window.setImmediate(f) }; - } - - if (canPost) { - var queue = []; - window.addEventListener('message', function (ev) { - var source = ev.source; - if ((source === window || source === null) && ev.data === 'process-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } - } - }, true); - - return function nextTick(fn) { - queue.push(fn); - window.postMessage('process-tick', '*'); - }; - } - - return function nextTick(fn) { - setTimeout(fn, 0); - }; -})(); - -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -} - -// TODO(shtylman) -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; - -},{}],7:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; -} - -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; - - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - - -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - -exports.sep = '/'; -exports.delimiter = ':'; - -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPath(path)[3]; -}; - -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6}],8:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -module.exports = Duplex; -var inherits = require('inherits'); -var setImmediate = require('process/browser.js').nextTick; -var Readable = require('./readable.js'); -var Writable = require('./writable.js'); - -inherits(Duplex, Readable); - -Duplex.prototype.write = Writable.prototype.write; -Duplex.prototype.end = Writable.prototype.end; -Duplex.prototype._write = Writable.prototype._write; - -function Duplex(options) { - if (!(this instanceof Duplex)) - return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) - this.readable = false; - - if (options && options.writable === false) - this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) - this.allowHalfOpen = false; - - this.once('end', onend); -} - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) - return; - - // no more data can be written. - // But allow more writes to happen in this tick. - var self = this; - setImmediate(function () { - self.end(); - }); -} - -},{"./readable.js":12,"./writable.js":14,"inherits":5,"process/browser.js":10}],9:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -module.exports = Stream; - -var EE = require('events').EventEmitter; -var inherits = require('inherits'); - -inherits(Stream, EE); -Stream.Readable = require('./readable.js'); -Stream.Writable = require('./writable.js'); -Stream.Duplex = require('./duplex.js'); -Stream.Transform = require('./transform.js'); -Stream.PassThrough = require('./passthrough.js'); - -// Backwards-compat with node 0.4.x -Stream.Stream = Stream; - - - -// old-style streams. Note that the pipe method (the only relevant -// part of this class) is overridden in the Readable class. - -function Stream() { - EE.call(this); -} - -Stream.prototype.pipe = function(dest, options) { - var source = this; - - function ondata(chunk) { - if (dest.writable) { - if (false === dest.write(chunk) && source.pause) { - source.pause(); - } - } - } - - source.on('data', ondata); - - function ondrain() { - if (source.readable && source.resume) { - source.resume(); - } - } - - dest.on('drain', ondrain); - - // If the 'end' option is not supplied, dest.end() will be called when - // source gets the 'end' or 'close' events. Only dest.end() once. - if (!dest._isStdio && (!options || options.end !== false)) { - source.on('end', onend); - source.on('close', onclose); - } - - var didOnEnd = false; - function onend() { - if (didOnEnd) return; - didOnEnd = true; - - dest.end(); - } - - - function onclose() { - if (didOnEnd) return; - didOnEnd = true; - - if (typeof dest.destroy === 'function') dest.destroy(); - } - - // don't leave dangling pipes when there are errors. - function onerror(er) { - cleanup(); - if (EE.listenerCount(this, 'error') === 0) { - throw er; // Unhandled stream error in pipe. - } - } - - source.on('error', onerror); - dest.on('error', onerror); - - // remove all the event listeners that were added. - function cleanup() { - source.removeListener('data', ondata); - dest.removeListener('drain', ondrain); - - source.removeListener('end', onend); - source.removeListener('close', onclose); - - source.removeListener('error', onerror); - dest.removeListener('error', onerror); - - source.removeListener('end', cleanup); - source.removeListener('close', cleanup); - - dest.removeListener('close', cleanup); - } - - source.on('end', cleanup); - source.on('close', cleanup); - - dest.on('close', cleanup); - - dest.emit('pipe', source); - - // Allow for unix-like usage: A.pipe(B).pipe(C) - return dest; -}; - -},{"./duplex.js":8,"./passthrough.js":11,"./readable.js":12,"./transform.js":13,"./writable.js":14,"events":4,"inherits":5}],10:[function(require,module,exports){ -module.exports=require(6) -},{}],11:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -module.exports = PassThrough; - -var Transform = require('./transform.js'); -var inherits = require('inherits'); -inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) - return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function(chunk, encoding, cb) { - cb(null, chunk); -}; - -},{"./transform.js":13,"inherits":5}],12:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -module.exports = Readable; -Readable.ReadableState = ReadableState; - -var EE = require('events').EventEmitter; -var Stream = require('./index.js'); -var Buffer = require('buffer').Buffer; -var setImmediate = require('process/browser.js').nextTick; -var StringDecoder; - -var inherits = require('inherits'); -inherits(Readable, Stream); - -function ReadableState(options, stream) { - options = options || {}; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = false; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // In streams that never have any data, and do push(null) right away, - // the consumer can miss the 'end' event if they do some I/O before - // consuming the stream. So, we don't emit('end') until some reading - // happens. - this.calledRead = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, becuase any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) - StringDecoder = require('string_decoder').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - if (!(this instanceof Readable)) - return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - Stream.call(this); -} - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function(chunk, encoding) { - var state = this._readableState; - - if (typeof chunk === 'string' && !state.objectMode) { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = new Buffer(chunk, encoding); - encoding = ''; - } - } - - return readableAddChunk(this, state, chunk, encoding, false); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function(chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; - -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (chunk === null || chunk === undefined) { - state.reading = false; - if (!state.ended) - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var e = new Error('stream.unshift() after end event'); - stream.emit('error', e); - } else { - if (state.decoder && !addToFront && !encoding) - chunk = state.decoder.write(chunk); - - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) { - state.buffer.unshift(chunk); - } else { - state.reading = false; - state.buffer.push(chunk); - } - - if (state.needReadable) - emitReadable(stream); - - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; - } - - return needMoreData(state); -} - - - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && - (state.needReadable || - state.length < state.highWaterMark || - state.length === 0); -} - -// backwards compatibility. -Readable.prototype.setEncoding = function(enc) { - if (!StringDecoder) - StringDecoder = require('string_decoder').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; -}; - -// Don't raise the hwm > 128MB -var MAX_HWM = 0x800000; -function roundUpToNextPowerOf2(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 - n--; - for (var p = 1; p < 32; p <<= 1) n |= n >> p; - n++; - } - return n; -} - -function howMuchToRead(n, state) { - if (state.length === 0 && state.ended) - return 0; - - if (state.objectMode) - return n === 0 ? 0 : 1; - - if (isNaN(n) || n === null) { - // only flow one buffer at a time - if (state.flowing && state.buffer.length) - return state.buffer[0].length; - else - return state.length; - } - - if (n <= 0) - return 0; - - // If we're asking for more than the target buffer level, - // then raise the water mark. Bump up to the next highest - // power of 2, to prevent increasing it excessively in tiny - // amounts. - if (n > state.highWaterMark) - state.highWaterMark = roundUpToNextPowerOf2(n); - - // don't have that much. return null, unless we've ended. - if (n > state.length) { - if (!state.ended) { - state.needReadable = true; - return 0; - } else - return state.length; - } - - return n; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function(n) { - var state = this._readableState; - state.calledRead = true; - var nOrig = n; - - if (typeof n !== 'number' || n > 0) - state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && - state.needReadable && - (state.length >= state.highWaterMark || state.ended)) { - emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) - endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - - // if we currently have less than the highWaterMark, then also read some - if (state.length - n <= state.highWaterMark) - doRead = true; - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) - doRead = false; - - if (doRead) { - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) - state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - } - - // If _read called its callback synchronously, then `reading` - // will be false, and we need to re-evaluate how much data we - // can return to the user. - if (doRead && !state.reading) - n = howMuchToRead(nOrig, state); - - var ret; - if (n > 0) - ret = fromList(n, state); - else - ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } - - state.length -= n; - - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (state.length === 0 && !state.ended) - state.needReadable = true; - - // If we happened to read() exactly the remaining amount in the - // buffer, and the EOF has been seen at this point, then make sure - // that we emit 'end' on the very next tick. - if (state.ended && !state.endEmitted && state.length === 0) - endReadable(this); - - return ret; -}; - -function chunkInvalid(state, chunk) { - var er = null; - if (!Buffer.isBuffer(chunk) && - 'string' !== typeof chunk && - chunk !== null && - chunk !== undefined && - !state.objectMode && - !er) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - - -function onEofChunk(stream, state) { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // if we've ended and we have some data left, then emit - // 'readable' now to make sure it gets picked up. - if (state.length > 0) - emitReadable(stream); - else - endReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (state.emittedReadable) - return; - - state.emittedReadable = true; - if (state.sync) - setImmediate(function() { - emitReadable_(stream); - }); - else - emitReadable_(stream); -} - -function emitReadable_(stream) { - stream.emit('readable'); -} - - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - setImmediate(function() { - maybeReadMore_(stream, state); - }); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && - state.length < state.highWaterMark) { - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - else - len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function(n) { - this.emit('error', new Error('not implemented')); -}; - -Readable.prototype.pipe = function(dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && - dest !== process.stdout && - dest !== process.stderr; - - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) - setImmediate(endFn); - else - src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - if (readable !== src) return; - cleanup(); - } - - function onend() { - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - function cleanup() { - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', cleanup); - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (!dest._writableState || dest._writableState.needDrain) - ondrain(); - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - // check for listeners before emit removes one-time listeners. - var errListeners = EE.listenerCount(dest, 'error'); - function onerror(er) { - unpipe(); - if (errListeners === 0 && EE.listenerCount(dest, 'error') === 0) - dest.emit('error', er); - } - dest.once('error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - // the handler that waits for readable events after all - // the data gets sucked out in flow. - // This would be easier to follow with a .once() handler - // in flow(), but that is too slow. - this.on('readable', pipeOnReadable); - - state.flowing = true; - setImmediate(function() { - flow(src); - }); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function() { - var dest = this; - var state = src._readableState; - state.awaitDrain--; - if (state.awaitDrain === 0) - flow(src); - }; -} - -function flow(src) { - var state = src._readableState; - var chunk; - state.awaitDrain = 0; - - function write(dest, i, list) { - var written = dest.write(chunk); - if (false === written) { - state.awaitDrain++; - } - } - - while (state.pipesCount && null !== (chunk = src.read())) { - - if (state.pipesCount === 1) - write(state.pipes, 0, null); - else - forEach(state.pipes, write); - - src.emit('data', chunk); - - // if anyone needs a drain, then we have to wait for that. - if (state.awaitDrain > 0) - return; - } - - // if every destination was unpiped, either before entering this - // function, or in the while loop, then stop flowing. - // - // NB: This is a pretty rare edge case. - if (state.pipesCount === 0) { - state.flowing = false; - - // if there were data event listeners added, then switch to old mode. - if (EE.listenerCount(src, 'data') > 0) - emitDataEvents(src); - return; - } - - // at this point, no one needed a drain, so we just ran out of data - // on the next readable event, start it over again. - state.ranOut = true; -} - -function pipeOnReadable() { - if (this._readableState.ranOut) { - this._readableState.ranOut = false; - flow(this); - } -} - - -Readable.prototype.unpipe = function(dest) { - var state = this._readableState; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) - return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) - return this; - - if (!dest) - dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - this.removeListener('readable', pipeOnReadable); - state.flowing = false; - if (dest) - dest.emit('unpipe', this); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - this.removeListener('readable', pipeOnReadable); - state.flowing = false; - - for (var i = 0; i < len; i++) - dests[i].emit('unpipe', this); - return this; - } - - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) - return this; - - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) - state.pipes = state.pipes[0]; - - dest.emit('unpipe', this); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function(ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - if (ev === 'data' && !this._readableState.flowing) - emitDataEvents(this); - - if (ev === 'readable' && this.readable) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - this.read(0); - } else if (state.length) { - emitReadable(this, state); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function() { - emitDataEvents(this); - this.read(0); - this.emit('resume'); -}; - -Readable.prototype.pause = function() { - emitDataEvents(this, true); - this.emit('pause'); -}; - -function emitDataEvents(stream, startPaused) { - var state = stream._readableState; - - if (state.flowing) { - // https://github.com/isaacs/readable-stream/issues/16 - throw new Error('Cannot switch to old mode now.'); - } - - var paused = startPaused || false; - var readable = false; - - // convert to an old-style stream. - stream.readable = true; - stream.pipe = Stream.prototype.pipe; - stream.on = stream.addListener = Stream.prototype.on; - - stream.on('readable', function() { - readable = true; - - var c; - while (!paused && (null !== (c = stream.read()))) - stream.emit('data', c); - - if (c === null) { - readable = false; - stream._readableState.needReadable = true; - } - }); - - stream.pause = function() { - paused = true; - this.emit('pause'); - }; - - stream.resume = function() { - paused = false; - if (readable) - setImmediate(function() { - stream.emit('readable'); - }); - else - this.read(0); - this.emit('resume'); - }; - - // now make it start, just in case it hadn't already. - stream.emit('readable'); -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function(stream) { - var state = this._readableState; - var paused = false; - - var self = this; - stream.on('end', function() { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) - self.push(chunk); - } - - self.push(null); - }); - - stream.on('data', function(chunk) { - if (state.decoder) - chunk = state.decoder.write(chunk); - if (!chunk || !state.objectMode && !chunk.length) - return; - - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (typeof stream[i] === 'function' && - typeof this[i] === 'undefined') { - this[i] = function(method) { return function() { - return stream[method].apply(stream, arguments); - }}(i); - } - } - - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function(ev) { - stream.on(ev, function (x) { - return self.emit.apply(self, ev, x); - }); - }); - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function(n) { - if (paused) { - paused = false; - stream.resume(); - } - }; - - return self; -}; - - - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -function fromList(n, state) { - var list = state.buffer; - var length = state.length; - var stringMode = !!state.decoder; - var objectMode = !!state.objectMode; - var ret; - - // nothing in the list, definitely empty. - if (list.length === 0) - return null; - - if (length === 0) - ret = null; - else if (objectMode) - ret = list.shift(); - else if (!n || n >= length) { - // read it all, truncate the array. - if (stringMode) - ret = list.join(''); - else - ret = Buffer.concat(list, length); - list.length = 0; - } else { - // read just some of it. - if (n < list[0].length) { - // just take a part of the first list item. - // slice is the same for buffers and strings. - var buf = list[0]; - ret = buf.slice(0, n); - list[0] = buf.slice(n); - } else if (n === list[0].length) { - // first list is a perfect match - ret = list.shift(); - } else { - // complex case. - // we have enough to cover it, but it spans past the first buffer. - if (stringMode) - ret = ''; - else - ret = new Buffer(n); - - var c = 0; - for (var i = 0, l = list.length; i < l && c < n; i++) { - var buf = list[0]; - var cpy = Math.min(n - c, buf.length); - - if (stringMode) - ret += buf.slice(0, cpy); - else - buf.copy(ret, c, 0, cpy); - - if (cpy < buf.length) - list[0] = buf.slice(cpy); - else - list.shift(); - - c += cpy; - } - } - } - - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) - throw new Error('endReadable called on non-empty stream'); - - if (!state.endEmitted && state.calledRead) { - state.ended = true; - setImmediate(function() { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } - }); - } -} - -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} - -function indexOf (xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"./index.js":9,"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6,"buffer":1,"events":4,"inherits":5,"process/browser.js":10,"string_decoder":15}],13:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -module.exports = Transform; - -var Duplex = require('./duplex.js'); -var inherits = require('inherits'); -inherits(Transform, Duplex); - - -function TransformState(options, stream) { - this.afterTransform = function(er, data) { - return afterTransform(stream, er, data); - }; - - this.needTransform = false; - this.transforming = false; - this.writecb = null; - this.writechunk = null; -} - -function afterTransform(stream, er, data) { - var ts = stream._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) - return stream.emit('error', new Error('no writecb in Transform class')); - - ts.writechunk = null; - ts.writecb = null; - - if (data !== null && data !== undefined) - stream.push(data); - - if (cb) - cb(er); - - var rs = stream._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - stream._read(rs.highWaterMark); - } -} - - -function Transform(options) { - if (!(this instanceof Transform)) - return new Transform(options); - - Duplex.call(this, options); - - var ts = this._transformState = new TransformState(options, this); - - // when the writable side finishes, then flush out anything remaining. - var stream = this; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - this.once('finish', function() { - if ('function' === typeof this._flush) - this._flush(function(er) { - done(stream, er); - }); - else - done(stream); - }); -} - -Transform.prototype.push = function(chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function(chunk, encoding, cb) { - throw new Error('not implemented'); -}; - -Transform.prototype._write = function(chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || - rs.needReadable || - rs.length < rs.highWaterMark) - this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function(n) { - var ts = this._transformState; - - if (ts.writechunk && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - - -function done(stream, er) { - if (er) - return stream.emit('error', er); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - var ws = stream._writableState; - var rs = stream._readableState; - var ts = stream._transformState; - - if (ws.length) - throw new Error('calling transform done when ws.length != 0'); - - if (ts.transforming) - throw new Error('calling transform done when still transforming'); - - return stream.push(null); -} - -},{"./duplex.js":8,"inherits":5}],14:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, cb), and it'll handle all -// the drain event emission and buffering. - -module.exports = Writable; -Writable.WritableState = WritableState; - -var isUint8Array = typeof Uint8Array !== 'undefined' - ? function (x) { return x instanceof Uint8Array } - : function (x) { - return x && x.constructor && x.constructor.name === 'Uint8Array' - } -; -var isArrayBuffer = typeof ArrayBuffer !== 'undefined' - ? function (x) { return x instanceof ArrayBuffer } - : function (x) { - return x && x.constructor && x.constructor.name === 'ArrayBuffer' - } -; - -var inherits = require('inherits'); -var Stream = require('./index.js'); -var setImmediate = require('process/browser.js').nextTick; -var Buffer = require('buffer').Buffer; - -inherits(Writable, Stream); - -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; -} - -function WritableState(options, stream) { - options = options || {}; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; - - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, becuase any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function(er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.buffer = []; -} - -function Writable(options) { - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Stream.Duplex)) - return new Writable(options); - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function() { - this.emit('error', new Error('Cannot pipe. Not readable.')); -}; - - -function writeAfterEnd(stream, state, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - setImmediate(function() { - cb(er); - }); -} - -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - if (!Buffer.isBuffer(chunk) && - 'string' !== typeof chunk && - chunk !== null && - chunk !== undefined && - !state.objectMode) { - var er = new TypeError('Invalid non-string/buffer chunk'); - stream.emit('error', er); - setImmediate(function() { - cb(er); - }); - valid = false; - } - return valid; -} - -Writable.prototype.write = function(chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (!Buffer.isBuffer(chunk) && isUint8Array(chunk)) - chunk = new Buffer(chunk); - if (isArrayBuffer(chunk) && typeof Uint8Array !== 'undefined') - chunk = new Buffer(new Uint8Array(chunk)); - - if (Buffer.isBuffer(chunk)) - encoding = 'buffer'; - else if (!encoding) - encoding = state.defaultEncoding; - - if (typeof cb !== 'function') - cb = function() {}; - - if (state.ended) - writeAfterEnd(this, state, cb); - else if (validChunk(this, state, chunk, cb)) - ret = writeOrBuffer(this, state, chunk, encoding, cb); - - return ret; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - typeof chunk === 'string') { - chunk = new Buffer(chunk, encoding); - } - return chunk; -} - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - state.needDrain = !ret; - - if (state.writing) - state.buffer.push(new WriteReq(chunk, encoding, cb)); - else - doWrite(stream, state, len, chunk, encoding, cb); - - return ret; -} - -function doWrite(stream, state, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - if (sync) - setImmediate(function() { - cb(er); - }); - else - cb(er); - - stream.emit('error', er); -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) - onwriteError(stream, state, sync, er, cb); - else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(stream, state); - - if (!finished && !state.bufferProcessing && state.buffer.length) - clearBuffer(stream, state); - - if (sync) { - setImmediate(function() { - afterWrite(stream, state, finished, cb); - }); - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) - onwriteDrain(stream, state); - cb(); - if (finished) - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - - for (var c = 0; c < state.buffer.length; c++) { - var entry = state.buffer[c]; - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, len, chunk, encoding, cb); - - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - c++; - break; - } - } - - state.bufferProcessing = false; - if (c < state.buffer.length) - state.buffer = state.buffer.slice(c); - else - state.buffer.length = 0; -} - -Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error('not implemented')); -}; - -Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (typeof chunk !== 'undefined' && chunk !== null) - this.write(chunk, encoding); - - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) - endWritable(this, state, cb); -}; - - -function needFinish(stream, state) { - return (state.ending && - state.length === 0 && - !state.finished && - !state.writing); -} - -function finishMaybe(stream, state) { - var need = needFinish(stream, state); - if (need) { - state.finished = true; - stream.emit('finish'); - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) - setImmediate(cb); - else - stream.once('finish', cb); - } - state.ended = true; -} - -},{"./index.js":9,"buffer":1,"inherits":5,"process/browser.js":10}],15:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -var Buffer = require('buffer').Buffer; - -function assertEncoding(encoding) { - if (encoding && !Buffer.isEncoding(encoding)) { - throw new Error('Unknown encoding: ' + encoding); - } -} - -var StringDecoder = exports.StringDecoder = function(encoding) { - this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); - assertEncoding(encoding); - switch (this.encoding) { - case 'utf8': - // CESU-8 represents each of Surrogate Pair by 3-bytes - this.surrogateSize = 3; - break; - case 'ucs2': - case 'utf16le': - // UTF-16 represents each of Surrogate Pair by 2-bytes - this.surrogateSize = 2; - this.detectIncompleteChar = utf16DetectIncompleteChar; - break; - case 'base64': - // Base-64 stores 3 bytes in 4 chars, and pads the remainder. - this.surrogateSize = 3; - this.detectIncompleteChar = base64DetectIncompleteChar; - break; - default: - this.write = passThroughWrite; - return; - } - - this.charBuffer = new Buffer(6); - this.charReceived = 0; - this.charLength = 0; -}; - - -StringDecoder.prototype.write = function(buffer) { - var charStr = ''; - var offset = 0; - - // if our last write ended with an incomplete multibyte character - while (this.charLength) { - // determine how many remaining bytes this buffer has to offer for this char - var i = (buffer.length >= this.charLength - this.charReceived) ? - this.charLength - this.charReceived : - buffer.length; - - // add the new bytes to the char buffer - buffer.copy(this.charBuffer, this.charReceived, offset, i); - this.charReceived += (i - offset); - offset = i; - - if (this.charReceived < this.charLength) { - // still not enough chars in this buffer? wait for more ... - return ''; - } - - // get the character that was split - charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); - - // lead surrogate (D800-DBFF) is also the incomplete character - var charCode = charStr.charCodeAt(charStr.length - 1); - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - this.charLength += this.surrogateSize; - charStr = ''; - continue; - } - this.charReceived = this.charLength = 0; - - // if there are no more bytes in this buffer, just emit our char - if (i == buffer.length) return charStr; - - // otherwise cut off the characters end from the beginning of this buffer - buffer = buffer.slice(i, buffer.length); - break; - } - - var lenIncomplete = this.detectIncompleteChar(buffer); - - var end = buffer.length; - if (this.charLength) { - // buffer the incomplete character bytes we got - buffer.copy(this.charBuffer, 0, buffer.length - lenIncomplete, end); - this.charReceived = lenIncomplete; - end -= lenIncomplete; - } - - charStr += buffer.toString(this.encoding, 0, end); - - var end = charStr.length - 1; - var charCode = charStr.charCodeAt(end); - // lead surrogate (D800-DBFF) is also the incomplete character - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - var size = this.surrogateSize; - this.charLength += size; - this.charReceived += size; - this.charBuffer.copy(this.charBuffer, size, 0, size); - this.charBuffer.write(charStr.charAt(charStr.length - 1), this.encoding); - return charStr.substring(0, end); - } - - // or just emit the charStr - return charStr; -}; - -StringDecoder.prototype.detectIncompleteChar = function(buffer) { - // determine how many bytes we have to check at the end of this buffer - var i = (buffer.length >= 3) ? 3 : buffer.length; - - // Figure out if one of the last i bytes of our buffer announces an - // incomplete char. - for (; i > 0; i--) { - var c = buffer[buffer.length - i]; - - // See http://en.wikipedia.org/wiki/UTF-8#Description - - // 110XXXXX - if (i == 1 && c >> 5 == 0x06) { - this.charLength = 2; - break; - } - - // 1110XXXX - if (i <= 2 && c >> 4 == 0x0E) { - this.charLength = 3; - break; - } - - // 11110XXX - if (i <= 3 && c >> 3 == 0x1E) { - this.charLength = 4; - break; - } - } - - return i; -}; - -StringDecoder.prototype.end = function(buffer) { - var res = ''; - if (buffer && buffer.length) - res = this.write(buffer); - - if (this.charReceived) { - var cr = this.charReceived; - var buf = this.charBuffer; - var enc = this.encoding; - res += buf.slice(0, cr).toString(enc); - } - - return res; -}; - -function passThroughWrite(buffer) { - return buffer.toString(this.encoding); -} - -function utf16DetectIncompleteChar(buffer) { - var incomplete = this.charReceived = buffer.length % 2; - this.charLength = incomplete ? 2 : 0; - return incomplete; -} - -function base64DetectIncompleteChar(buffer) { - var incomplete = this.charReceived = buffer.length % 3; - this.charLength = incomplete ? 3 : 0; - return incomplete; -} - -},{"buffer":1}],16:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],17:[function(require,module,exports){ -(function (process,global){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":16,"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6,"inherits":5}],18:[function(require,module,exports){ -module.exports = isFunction - -var toString = Object.prototype.toString - -function isFunction (fn) { - var string = toString.call(fn) - return string === '[object Function]' || - (typeof fn === 'function' && string !== '[object RegExp]') || - (typeof window !== 'undefined' && - // IE8 and below - (fn === window.setTimeout || - fn === window.alert || - fn === window.confirm || - fn === window.prompt)) -}; - -},{}],19:[function(require,module,exports){ -(function (process){ -var defined = require('defined'); -var createDefaultStream = require('./lib/default_stream'); -var Test = require('./lib/test'); -var createResult = require('./lib/results'); - -var canEmitExit = typeof process !== 'undefined' && process - && typeof process.on === 'function' -; -var canExit = typeof process !== 'undefined' && process - && typeof process.exit === 'function' -; - -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; - -exports = module.exports = (function () { - var harness; - var lazyLoad = function () { - if (!harness) harness = createExitHarness({ - autoclose: !canEmitExit - }); - - return harness.apply(this, arguments); - }; - - lazyLoad.only = function () { - if (!harness) harness = createExitHarness({ - autoclose: !canEmitExit - }); - - return harness.only.apply(this, arguments); - } - - return lazyLoad -})(); - -function createExitHarness (conf) { - if (!conf) conf = {}; - var harness = createHarness({ - autoclose: defined(conf.autoclose, false) - }); - - var stream = harness.createStream(); - var es = stream.pipe(createDefaultStream()); - if (canEmitExit) { - es.on('error', function (err) { harness._exitCode = 1 }); - } - - var ended = false; - stream.on('end', function () { ended = true }); - - if (conf.exit === false) return harness; - if (!canEmitExit || !canExit) return harness; - - var _error; - - process.on('uncaughtException', function (err) { - if (err && err.code === 'EPIPE' && err.errno === 'EPIPE' - && err.syscall === 'write') return; - - _error = err - - throw err - }) - - process.on('exit', function (code) { - if (_error) { - return - } - - if (!ended) { - for (var i = 0; i < harness._tests.length; i++) { - var t = harness._tests[i]; - t._exit(); - } - } - harness.close(); - process.exit(code || harness._exitCode); - }); - - return harness; -} - -exports.createHarness = createHarness; -exports.Test = Test; -exports.test = exports; // tap compat - -var exitInterval; - -function createHarness (conf_) { - if (!conf_) conf_ = {}; - var results = createResult(); - if (conf_.autoclose !== false) { - results.once('done', function () { results.close() }); - } - - var test = function (name, conf, cb) { - var t = new Test(name, conf, cb); - test._tests.push(t); - - (function inspectCode (st) { - st.on('test', function sub (st_) { - inspectCode(st_); - }); - st.on('result', function (r) { - if (!r.ok) test._exitCode = 1 - }); - })(t); - - results.push(t); - return t; - }; - - test._tests = []; - - test.createStream = function () { - return results.createStream(); - }; - - var only = false; - test.only = function (name) { - if (only) throw new Error('there can only be one only test'); - results.only(name); - only = true; - return test.apply(null, arguments); - }; - test._exitCode = 0; - - test.close = function () { results.close() }; - - return test; -} - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"./lib/default_stream":20,"./lib/results":21,"./lib/test":22,"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6,"defined":26}],20:[function(require,module,exports){ -var through = require('through'); - -module.exports = function () { - var line = ''; - var stream = through(write, flush); - return stream; - - function write (buf) { - for (var i = 0; i < buf.length; i++) { - var c = typeof buf === 'string' - ? buf.charAt(i) - : String.fromCharCode(buf[i]) - ; - if (c === '\n') flush(); - else line += c; - } - } - - function flush () { - try { console.log(line); } - catch (e) { stream.emit('error', e) } - line = ''; - } -}; - -},{"through":32}],21:[function(require,module,exports){ -(function (process){ -var Stream = require('stream'); -var EventEmitter = require('events').EventEmitter; -var inherits = require('inherits'); -var json = typeof JSON === 'object' ? JSON : require('jsonify'); -var through = require('through'); -var resumer = require('resumer'); -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; - -module.exports = Results; -inherits(Results, EventEmitter); - -function Results () { - if (!(this instanceof Results)) return new Results; - this.count = 0; - this.fail = 0; - this.pass = 0; - this._stream = through(); - this.tests = []; -} - -Results.prototype.createStream = function () { - var self = this; - var output = resumer(); - output.queue('TAP version 13\n'); - - nextTick(function () { - var t = getNextTest(self); - if (t) t.run() - else self.emit('done') - }); - self._stream.pipe(output); - - return output; -}; - -Results.prototype.push = function (t) { - var self = this; - self.tests.push(t); - self._watch(t); - t.once('end', function () { - var nt = getNextTest(self); - if (nt) nt.run() - else self.emit('done') - }); -}; - -Results.prototype.only = function (name) { - if (this._only) { - self.count ++; - self.fail ++; - write('not ok ' + self.count + ' already called .only()\n'); - } - this._only = name; -}; - -Results.prototype._watch = function (t) { - var self = this; - var write = function (s) { self._stream.queue(s) }; - t.once('prerun', function () { - write('# ' + t.name + '\n'); - }); - - t.on('result', function (res) { - if (typeof res === 'string') { - write('# ' + res + '\n'); - return; - } - write(encodeResult(res, self.count + 1)); - self.count ++; - - if (res.ok) self.pass ++ - else self.fail ++ - }); - - t.on('test', function (st) { self._watch(st) }); -}; - -Results.prototype.close = function () { - var self = this; - if (self.closed) self._stream.emit('error', new Error('ALREADY CLOSED')); - self.closed = true; - var write = function (s) { self._stream.queue(s) }; - - write('\n1..' + self.count + '\n'); - write('# tests ' + self.count + '\n'); - write('# pass ' + self.pass + '\n'); - if (self.fail) write('# fail ' + self.fail + '\n') - else write('\n# ok\n') - - self._stream.queue(null); -}; - -function encodeResult (res, count) { - var output = ''; - output += (res.ok ? 'ok ' : 'not ok ') + count; - output += res.name ? ' ' + res.name.toString().replace(/\s+/g, ' ') : ''; - - if (res.skip) output += ' # SKIP'; - else if (res.todo) output += ' # TODO'; - - output += '\n'; - if (res.ok) return output; - - var outer = ' '; - var inner = outer + ' '; - output += outer + '---\n'; - output += inner + 'operator: ' + res.operator + '\n'; - - var ex = json.stringify(res.expected, getSerialize()) || ''; - var ac = json.stringify(res.actual, getSerialize()) || ''; - - if (Math.max(ex.length, ac.length) > 65) { - output += inner + 'expected:\n' + inner + ' ' + ex + '\n'; - output += inner + 'actual:\n' + inner + ' ' + ac + '\n'; - } - else { - output += inner + 'expected: ' + ex + '\n'; - output += inner + 'actual: ' + ac + '\n'; - } - if (res.at) { - output += inner + 'at: ' + res.at + '\n'; - } - if (res.operator === 'error' && res.actual && res.actual.stack) { - var lines = String(res.actual.stack).split('\n'); - output += inner + 'stack:\n'; - output += inner + ' ' + lines[0] + '\n'; - for (var i = 1; i < lines.length; i++) { - output += inner + lines[i] + '\n'; - } - } - - output += outer + '...\n'; - return output; -} - -function getSerialize () { - var seen = []; - - return function (key, value) { - var ret = value; - if (typeof value === 'object' && value) { - var found = false; - for (var i = 0; i < seen.length; i++) { - if (seen[i] === value) { - found = true - break; - } - } - - if (found) ret = '[Circular]' - else seen.push(value) - } - return ret; - }; -} - -function getNextTest(results) { - if (!results._only) { - return results.tests.shift(); - } - - do { - var t = results.tests.shift(); - if (!t) { - return null; - } - if (results._only === t.name) { - return t; - } - } while (results.tests.length !== 0) -} - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6,"events":4,"inherits":27,"jsonify":28,"resumer":31,"stream":9,"through":32}],22:[function(require,module,exports){ -(function (process,__dirname){ -var Stream = require('stream'); -var deepEqual = require('deep-equal'); -var defined = require('defined'); -var path = require('path'); -var inherits = require('util').inherits; -var EventEmitter = require('events').EventEmitter; - -module.exports = Test; - -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; - -inherits(Test, EventEmitter); - -function Test (name_, opts_, cb_) { - var self = this; - var name = '(anonymous)'; - var opts = {}; - var cb; - - for (var i = 0; i < arguments.length; i++) { - switch (typeof arguments[i]) { - case 'string': - name = arguments[i]; - break; - case 'object': - opts = arguments[i] || opts; - break; - case 'function': - cb = arguments[i]; - } - } - - this.readable = true; - this.name = name || '(anonymous)'; - this.assertCount = 0; - this.pendingCount = 0; - this._skip = opts.skip || false; - this._plan = undefined; - this._cb = cb; - this._progeny = []; - this._ok = true; -} - -Test.prototype.run = function () { - if (this._skip) { - return this.end(); - } - this.emit('prerun'); - try { - this._cb(this); - } - catch (err) { - this.error(err); - this.end(); - return; - } - this.emit('run'); -}; - -Test.prototype.test = function (name, opts, cb) { - var self = this; - var t = new Test(name, opts, cb); - this._progeny.push(t); - this.pendingCount++; - this.emit('test', t); - t.on('prerun', function () { - self.assertCount++; - }) - - if (!self._pendingAsserts()) { - nextTick(function () { - self.end(); - }); - } - - nextTick(function() { - if (!self._plan && self.pendingCount == self._progeny.length) { - self.end(); - } - }); -}; - -Test.prototype.comment = function (msg) { - this.emit('result', msg.trim().replace(/^#\s*/, '')); -}; - -Test.prototype.plan = function (n) { - this._plan = n; - this.emit('plan', n); -}; - -Test.prototype.end = function () { - var self = this; - - if (this._progeny.length) { - var t = this._progeny.shift(); - t.on('end', function () { - self.end(); - }); - t.run(); - return; - } - - if (!this.ended) this.emit('end'); - var pendingAsserts = this._pendingAsserts(); - if (!this._planError && this._plan !== undefined && pendingAsserts) { - this._planError = true; - this.fail('plan != count', { - expected : this._plan, - actual : this.assertCount - }); - } - this.ended = true; -}; - -Test.prototype._exit = function () { - if (this._plan !== undefined && - !this._planError && this.assertCount !== this._plan) { - this._planError = true; - this.fail('plan != count', { - expected : this._plan, - actual : this.assertCount, - exiting : true - }); - } - else if (!this.ended) { - this.fail('test exited without ending', { - exiting: true - }); - } -}; - -Test.prototype._pendingAsserts = function () { - if (this._plan === undefined) { - return 1; - } else { - return this._plan - - (this._progeny.length + this.assertCount); - } -} - -Test.prototype._assert = function assert (ok, opts) { - var self = this; - var extra = opts.extra || {}; - - var res = { - id : self.assertCount ++, - ok : Boolean(ok), - skip : defined(extra.skip, opts.skip), - name : defined(extra.message, opts.message, '(unnamed assert)'), - operator : defined(extra.operator, opts.operator), - actual : defined(extra.actual, opts.actual), - expected : defined(extra.expected, opts.expected) - }; - this._ok = Boolean(this._ok && ok); - - if (!ok) { - res.error = defined(extra.error, opts.error, new Error(res.name)); - } - - var e = new Error('exception'); - var err = (e.stack || '').split('\n'); - var dir = path.dirname(__dirname) + '/'; - - for (var i = 0; i < err.length; i++) { - var m = /^\s*\bat\s+(.+)/.exec(err[i]); - if (!m) continue; - - var s = m[1].split(/\s+/); - var filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[1]); - if (!filem) { - filem = /(\/[^:\s]+:(\d+)(?::(\d+))?)/.exec(s[3]); - - if (!filem) continue; - } - - if (filem[1].slice(0, dir.length) === dir) continue; - - res.functionName = s[0]; - res.file = filem[1]; - res.line = Number(filem[2]); - if (filem[3]) res.column = filem[3]; - - res.at = m[1]; - break; - } - - self.emit('result', res); - - var pendingAsserts = self._pendingAsserts(); - if (!pendingAsserts) { - if (extra.exiting) { - self.end(); - } else { - nextTick(function () { - self.end(); - }); - } - } - - if (!self._planError && pendingAsserts < 0) { - self._planError = true; - self.fail('plan != count', { - expected : self._plan, - actual : self._plan - pendingAsserts - }); - } -}; - -Test.prototype.fail = function (msg, extra) { - this._assert(false, { - message : msg, - operator : 'fail', - extra : extra - }); -}; - -Test.prototype.pass = function (msg, extra) { - this._assert(true, { - message : msg, - operator : 'pass', - extra : extra - }); -}; - -Test.prototype.skip = function (msg, extra) { - this._assert(true, { - message : msg, - operator : 'skip', - skip : true, - extra : extra - }); -}; - -Test.prototype.ok -= Test.prototype['true'] -= Test.prototype.assert -= function (value, msg, extra) { - this._assert(value, { - message : msg, - operator : 'ok', - expected : true, - actual : value, - extra : extra - }); -}; - -Test.prototype.notOk -= Test.prototype['false'] -= Test.prototype.notok -= function (value, msg, extra) { - this._assert(!value, { - message : msg, - operator : 'notOk', - expected : false, - actual : value, - extra : extra - }); -}; - -Test.prototype.error -= Test.prototype.ifError -= Test.prototype.ifErr -= Test.prototype.iferror -= function (err, msg, extra) { - this._assert(!err, { - message : defined(msg, String(err)), - operator : 'error', - actual : err, - extra : extra - }); -}; - -Test.prototype.equal -= Test.prototype.equals -= Test.prototype.isEqual -= Test.prototype.is -= Test.prototype.strictEqual -= Test.prototype.strictEquals -= function (a, b, msg, extra) { - this._assert(a === b, { - message : defined(msg, 'should be equal'), - operator : 'equal', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype.notEqual -= Test.prototype.notEquals -= Test.prototype.notStrictEqual -= Test.prototype.notStrictEquals -= Test.prototype.isNotEqual -= Test.prototype.isNot -= Test.prototype.not -= Test.prototype.doesNotEqual -= Test.prototype.isInequal -= function (a, b, msg, extra) { - this._assert(a !== b, { - message : defined(msg, 'should not be equal'), - operator : 'notEqual', - actual : a, - notExpected : b, - extra : extra - }); -}; - -Test.prototype.deepEqual -= Test.prototype.deepEquals -= Test.prototype.isEquivalent -= Test.prototype.same -= function (a, b, msg, extra) { - this._assert(deepEqual(a, b, { strict: true }), { - message : defined(msg, 'should be equivalent'), - operator : 'deepEqual', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype.deepLooseEqual -= Test.prototype.looseEqual -= Test.prototype.looseEquals -= function (a, b, msg, extra) { - this._assert(deepEqual(a, b), { - message : defined(msg, 'should be equivalent'), - operator : 'deepLooseEqual', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype.notDeepEqual -= Test.prototype.notEquivalent -= Test.prototype.notDeeply -= Test.prototype.notSame -= Test.prototype.isNotDeepEqual -= Test.prototype.isNotDeeply -= Test.prototype.isNotEquivalent -= Test.prototype.isInequivalent -= function (a, b, msg, extra) { - this._assert(!deepEqual(a, b, { strict: true }), { - message : defined(msg, 'should not be equivalent'), - operator : 'notDeepEqual', - actual : a, - notExpected : b, - extra : extra - }); -}; - -Test.prototype.notDeepLooseEqual -= Test.prototype.notLooseEqual -= Test.prototype.notLooseEquals -= function (a, b, msg, extra) { - this._assert(deepEqual(a, b), { - message : defined(msg, 'should be equivalent'), - operator : 'notDeepLooseEqual', - actual : a, - expected : b, - extra : extra - }); -}; - -Test.prototype['throws'] = function (fn, expected, msg, extra) { - if (typeof expected === 'string') { - msg = expected; - expected = undefined; - } - var caught = undefined; - try { - fn(); - } - catch (err) { - caught = { error : err }; - var message = err.message; - delete err.message; - err.message = message; - } - - var passed = caught; - - if (expected instanceof RegExp) { - passed = expected.test(caught && caught.error); - expected = String(expected); - } - - this._assert(passed, { - message : defined(msg, 'should throw'), - operator : 'throws', - actual : caught && caught.error, - expected : expected, - error: !passed && caught && caught.error, - extra : extra - }); -}; - -Test.prototype.doesNotThrow = function (fn, expected, msg, extra) { - if (typeof expected === 'string') { - msg = expected; - expected = undefined; - } - var caught = undefined; - try { - fn(); - } - catch (err) { - caught = { error : err }; - } - this._assert(!caught, { - message : defined(msg, 'should throw'), - operator : 'throws', - actual : caught && caught.error, - expected : expected, - error : caught && caught.error, - extra : extra - }); -}; - -// vim: set softtabstop=4 shiftwidth=4: - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"),"/node_modules/tape/lib") -},{"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6,"deep-equal":23,"defined":26,"events":4,"path":7,"stream":9,"util":17}],23:[function(require,module,exports){ -var pSlice = Array.prototype.slice; -var objectKeys = require('./lib/keys.js'); -var isArguments = require('./lib/is_arguments.js'); - -var deepEqual = module.exports = function (actual, expected, opts) { - if (!opts) opts = {}; - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - - } else if (actual instanceof Date && expected instanceof Date) { - return actual.getTime() === expected.getTime(); - - // 7.3. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (typeof actual != 'object' && typeof expected != 'object') { - return opts.strict ? actual === expected : actual == expected; - - // 7.4. For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected, opts); - } -} - -function isUndefinedOrNull(value) { - return value === null || value === undefined; -} - -function objEquiv(a, b, opts) { - if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (isArguments(a)) { - if (!isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return deepEqual(a, b, opts); - } - try { - var ka = objectKeys(a), - kb = objectKeys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!deepEqual(a[key], b[key], opts)) return false; - } - return true; -} - -},{"./lib/is_arguments.js":24,"./lib/keys.js":25}],24:[function(require,module,exports){ -var supportsArgumentsClass = (function(){ - return Object.prototype.toString.call(arguments) -})() == '[object Arguments]'; - -exports = module.exports = supportsArgumentsClass ? supported : unsupported; - -exports.supported = supported; -function supported(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -}; - -exports.unsupported = unsupported; -function unsupported(object){ - return object && - typeof object == 'object' && - typeof object.length == 'number' && - Object.prototype.hasOwnProperty.call(object, 'callee') && - !Object.prototype.propertyIsEnumerable.call(object, 'callee') || - false; -}; - -},{}],25:[function(require,module,exports){ -exports = module.exports = typeof Object.keys === 'function' - ? Object.keys : shim; - -exports.shim = shim; -function shim (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -} - -},{}],26:[function(require,module,exports){ -module.exports = function () { - for (var i = 0; i < arguments.length; i++) { - if (arguments[i] !== undefined) return arguments[i]; - } -}; - -},{}],27:[function(require,module,exports){ -module.exports=require(5) -},{}],28:[function(require,module,exports){ -exports.parse = require('./lib/parse'); -exports.stringify = require('./lib/stringify'); - -},{"./lib/parse":29,"./lib/stringify":30}],29:[function(require,module,exports){ -var at, // The index of the current character - ch, // The current character - escapee = { - '"': '"', - '\\': '\\', - '/': '/', - b: '\b', - f: '\f', - n: '\n', - r: '\r', - t: '\t' - }, - text, - - error = function (m) { - // Call error when something is wrong. - throw { - name: 'SyntaxError', - message: m, - at: at, - text: text - }; - }, - - next = function (c) { - // If a c parameter is provided, verify that it matches the current character. - if (c && c !== ch) { - error("Expected '" + c + "' instead of '" + ch + "'"); - } - - // Get the next character. When there are no more characters, - // return the empty string. - - ch = text.charAt(at); - at += 1; - return ch; - }, - - number = function () { - // Parse a number value. - var number, - string = ''; - - if (ch === '-') { - string = '-'; - next('-'); - } - while (ch >= '0' && ch <= '9') { - string += ch; - next(); - } - if (ch === '.') { - string += '.'; - while (next() && ch >= '0' && ch <= '9') { - string += ch; - } - } - if (ch === 'e' || ch === 'E') { - string += ch; - next(); - if (ch === '-' || ch === '+') { - string += ch; - next(); - } - while (ch >= '0' && ch <= '9') { - string += ch; - next(); - } - } - number = +string; - if (!isFinite(number)) { - error("Bad number"); - } else { - return number; - } - }, - - string = function () { - // Parse a string value. - var hex, - i, - string = '', - uffff; - - // When parsing for string values, we must look for " and \ characters. - if (ch === '"') { - while (next()) { - if (ch === '"') { - next(); - return string; - } else if (ch === '\\') { - next(); - if (ch === 'u') { - uffff = 0; - for (i = 0; i < 4; i += 1) { - hex = parseInt(next(), 16); - if (!isFinite(hex)) { - break; - } - uffff = uffff * 16 + hex; - } - string += String.fromCharCode(uffff); - } else if (typeof escapee[ch] === 'string') { - string += escapee[ch]; - } else { - break; - } - } else { - string += ch; - } - } - } - error("Bad string"); - }, - - white = function () { - -// Skip whitespace. - - while (ch && ch <= ' ') { - next(); - } - }, - - word = function () { - -// true, false, or null. - - switch (ch) { - case 't': - next('t'); - next('r'); - next('u'); - next('e'); - return true; - case 'f': - next('f'); - next('a'); - next('l'); - next('s'); - next('e'); - return false; - case 'n': - next('n'); - next('u'); - next('l'); - next('l'); - return null; - } - error("Unexpected '" + ch + "'"); - }, - - value, // Place holder for the value function. - - array = function () { - -// Parse an array value. - - var array = []; - - if (ch === '[') { - next('['); - white(); - if (ch === ']') { - next(']'); - return array; // empty array - } - while (ch) { - array.push(value()); - white(); - if (ch === ']') { - next(']'); - return array; - } - next(','); - white(); - } - } - error("Bad array"); - }, - - object = function () { - -// Parse an object value. - - var key, - object = {}; - - if (ch === '{') { - next('{'); - white(); - if (ch === '}') { - next('}'); - return object; // empty object - } - while (ch) { - key = string(); - white(); - next(':'); - if (Object.hasOwnProperty.call(object, key)) { - error('Duplicate key "' + key + '"'); - } - object[key] = value(); - white(); - if (ch === '}') { - next('}'); - return object; - } - next(','); - white(); - } - } - error("Bad object"); - }; - -value = function () { - -// Parse a JSON value. It could be an object, an array, a string, a number, -// or a word. - - white(); - switch (ch) { - case '{': - return object(); - case '[': - return array(); - case '"': - return string(); - case '-': - return number(); - default: - return ch >= '0' && ch <= '9' ? number() : word(); - } -}; - -// Return the json_parse function. It will have access to all of the above -// functions and variables. - -module.exports = function (source, reviver) { - var result; - - text = source; - at = 0; - ch = ' '; - result = value(); - white(); - if (ch) { - error("Syntax error"); - } - - // If there is a reviver function, we recursively walk the new structure, - // passing each name/value pair to the reviver function for possible - // transformation, starting with a temporary root object that holds the result - // in an empty key. If there is not a reviver function, we simply return the - // result. - - return typeof reviver === 'function' ? (function walk(holder, key) { - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - }({'': result}, '')) : result; -}; - -},{}],30:[function(require,module,exports){ -var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - -function quote(string) { - // If the string contains no control characters, no quote characters, and no - // backslash characters, then we can safely slap some quotes around it. - // Otherwise we must also replace the offending characters with safe escape - // sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; -} - -function str(key, holder) { - // Produce a string from holder[key]. - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - - // If the value has a toJSON method, call it to obtain a replacement value. - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - - // If we were called with a replacer function, then call the replacer to - // obtain a replacement value. - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - - // What happens next depends on the value's type. - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - // JSON numbers must be finite. Encode non-finite numbers as null. - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - // If the value is a boolean or null, convert it to a string. Note: - // typeof null does not produce 'null'. The case is included here in - // the remote chance that this gets fixed someday. - return String(value); - - case 'object': - if (!value) return 'null'; - gap += indent; - partial = []; - - // Array.isArray - if (Object.prototype.toString.apply(value) === '[object Array]') { - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - - // Join all of the elements together, separated with commas, and - // wrap them in brackets. - v = partial.length === 0 ? '[]' : gap ? - '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - - // If the replacer is an array, use it to select the members to be - // stringified. - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - else { - // Otherwise, iterate through all of the keys in the object. - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - - // Join all of the member texts together, separated with commas, - // and wrap them in braces. - - v = partial.length === 0 ? '{}' : gap ? - '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : - '{' + partial.join(',') + '}'; - gap = mind; - return v; - } -} - -module.exports = function (value, replacer, space) { - var i; - gap = ''; - indent = ''; - - // If the space parameter is a number, make an indent string containing that - // many spaces. - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - } - // If the space parameter is a string, it will be used as the indent string. - else if (typeof space === 'string') { - indent = space; - } - - // If there is a replacer, it must be a function or an array. - // Otherwise, throw an error. - rep = replacer; - if (replacer && typeof replacer !== 'function' - && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - - // Make a fake root object containing our value under the key of ''. - // Return the result of stringifying the value. - return str('', {'': value}); -}; - -},{}],31:[function(require,module,exports){ -(function (process){ -var through = require('through'); -var nextTick = typeof setImmediate !== 'undefined' - ? setImmediate - : process.nextTick -; - -module.exports = function (write, end) { - var tr = through(write, end); - tr.pause(); - var resume = tr.resume; - var pause = tr.pause; - var paused = false; - - tr.pause = function () { - paused = true; - return pause.apply(this, arguments); - }; - - tr.resume = function () { - paused = false; - return resume.apply(this, arguments); - }; - - nextTick(function () { - if (!paused) tr.resume(); - }); - - return tr; -}; - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6,"through":32}],32:[function(require,module,exports){ -(function (process){ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end, opts) { - write = write || function (data) { this.queue(data) } - end = end || function () { this.queue(null) } - - var ended = false, destroyed = false, buffer = [], _ended = false - var stream = new Stream() - stream.readable = stream.writable = true - stream.paused = false - -// stream.autoPause = !(opts && opts.autoPause === false) - stream.autoDestroy = !(opts && opts.autoDestroy === false) - - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } - - stream.queue = stream.push = function (data) { -// console.error(ended) - if(_ended) return stream - if(data == null) _ended = true - buffer.push(data) - drain() - return stream - } - - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' - - stream.on('end', function () { - stream.readable = false - if(!stream.writable && stream.autoDestroy) - process.nextTick(function () { - stream.destroy() - }) - }) - - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable && stream.autoDestroy) - stream.destroy() - } - - stream.end = function (data) { - if(ended) return - ended = true - if(arguments.length) stream.write(data) - _end() // will emit or queue - return stream - } - - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - return stream - } - - stream.pause = function () { - if(stream.paused) return - stream.paused = true - return stream - } - - stream.resume = function () { - if(stream.paused) { - stream.paused = false - stream.emit('resume') - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - return stream - } - return stream -} - - -}).call(this,require("/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) -},{"/Users/stephen/.nvm/v0.10.24/lib/node_modules/testling/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":6,"stream":9}],33:[function(require,module,exports){ -var test = require('tape') -var isFunction = require('./index.js') - -test('isFunction', function (t) { - t.ok(!isFunction(), 'undefined is not a function') - t.ok(!isFunction(null), 'null is not a function') - t.ok(!isFunction(''), 'string is not a function') - t.ok(!isFunction(/a/), 'regex is not a function') - t.ok(!isFunction(true), 'true is not a function') - t.ok(!isFunction(false), 'false is not a function') - t.ok(!isFunction(NaN), 'NaN is not a function') - t.ok(!isFunction(42), '42 is not a function') - t.ok(isFunction(function () {}), 'function is a function') - t.ok(isFunction(setTimeout), 'setTimeout is a function') - t.end() -}) - -if (typeof window !== 'undefined') { - test('browser quirks', function (t) { - t.plan(2) - - t.ok(isFunction(window.alert), 'alert is a function') - - window.testRegExpFromIframe = function (regexp) { - t.ok(!isFunction(regexp)) - } - - var iframe = document.createElement('iframe') - document.body.appendChild(iframe) - - iframe.contentWindow.document.write([ - "" - ].join("\n")); - }) -} - -},{"./index.js":18,"tape":19}]},{},[33]) \ No newline at end of file diff --git a/truebit-implementation/node_modules/is-function/index.js b/truebit-implementation/node_modules/is-function/index.js deleted file mode 100644 index bae21831..00000000 --- a/truebit-implementation/node_modules/is-function/index.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = isFunction - -var toString = Object.prototype.toString - -function isFunction (fn) { - var string = toString.call(fn) - return string === '[object Function]' || - (typeof fn === 'function' && string !== '[object RegExp]') || - (typeof window !== 'undefined' && - // IE8 and below - (fn === window.setTimeout || - fn === window.alert || - fn === window.confirm || - fn === window.prompt)) -}; diff --git a/truebit-implementation/node_modules/is-function/package.json b/truebit-implementation/node_modules/is-function/package.json deleted file mode 100644 index bc073ea9..00000000 --- a/truebit-implementation/node_modules/is-function/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "is-function@^1.0.1", - "_id": "is-function@1.0.1", - "_inBundle": false, - "_integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", - "_location": "/is-function", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-function@^1.0.1", - "name": "is-function", - "escapedName": "is-function", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/xhr" - ], - "_resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "_shasum": "12cfb98b65b57dd3d193a3121f5f6e2f437602b5", - "_spec": "is-function@^1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/xhr", - "author": { - "name": "Stephen Sugden", - "email": "me@stephensugden.com" - }, - "bugs": { - "url": "https://github.com/grncdr/js-is-function/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "is that thing a function? Use this module to find out", - "devDependencies": { - "tape": "~2.3.2" - }, - "homepage": "https://github.com/grncdr/js-is-function", - "keywords": [ - "polyfill", - "is-function", - "ie6" - ], - "license": "MIT", - "main": "index.js", - "name": "is-function", - "repository": { - "type": "git", - "url": "git://github.com/grncdr/js-is-function.git" - }, - "scripts": { - "test": "tape test.js" - }, - "testling": { - "files": "test.js", - "browsers": [ - "iexplore/6.0..latest", - "firefox/3.0..6.0", - "firefox/15.0..latest", - "firefox/nightly", - "chrome/4.0..10.0", - "chrome/20.0..latest", - "chrome/canary", - "opera/10.0..latest", - "opera/next", - "safari/4.0..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2" - ] - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/is-function/test.html b/truebit-implementation/node_modules/is-function/test.html deleted file mode 100644 index be268636..00000000 --- a/truebit-implementation/node_modules/is-function/test.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/truebit-implementation/node_modules/is-function/test.js b/truebit-implementation/node_modules/is-function/test.js deleted file mode 100644 index b3ac5e46..00000000 --- a/truebit-implementation/node_modules/is-function/test.js +++ /dev/null @@ -1,37 +0,0 @@ -var test = require('tape') -var isFunction = require('./index.js') - -test('isFunction', function (t) { - t.ok(!isFunction(), 'undefined is not a function') - t.ok(!isFunction(null), 'null is not a function') - t.ok(!isFunction(''), 'string is not a function') - t.ok(!isFunction(/a/), 'regex is not a function') - t.ok(!isFunction(true), 'true is not a function') - t.ok(!isFunction(false), 'false is not a function') - t.ok(!isFunction(NaN), 'NaN is not a function') - t.ok(!isFunction(42), '42 is not a function') - t.ok(isFunction(function () {}), 'function is a function') - t.ok(isFunction(setTimeout), 'setTimeout is a function') - t.end() -}) - -if (typeof window !== 'undefined') { - test('browser quirks', function (t) { - t.plan(2) - - t.ok(isFunction(window.alert), 'alert is a function') - - window.testRegExpFromIframe = function (regexp) { - t.ok(!isFunction(regexp)) - } - - var iframe = document.createElement('iframe') - document.body.appendChild(iframe) - - iframe.contentWindow.document.write([ - "" - ].join("\n")); - }) -} diff --git a/truebit-implementation/node_modules/is-hex-prefixed/.editorconfig b/truebit-implementation/node_modules/is-hex-prefixed/.editorconfig deleted file mode 100644 index d4eed840..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/.editorconfig +++ /dev/null @@ -1,7 +0,0 @@ -root = true - -[*] -end_of_line = lf -insert_final_newline = false -indent_style = space -indent_size = 2 diff --git a/truebit-implementation/node_modules/is-hex-prefixed/.gitattributes b/truebit-implementation/node_modules/is-hex-prefixed/.gitattributes deleted file mode 100644 index a29125a8..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/.gitattributes +++ /dev/null @@ -1,106 +0,0 @@ -# From https://github.com/Danimoth/gitattributes/blob/master/Web.gitattributes - -# Handle line endings automatically for files detected as text -# and leave all files detected as binary untouched. -* text=auto - -# -# The above will handle all files NOT found below -# - -# -## These files are text and should be normalized (Convert crlf => lf) -# - -# source code -*.php text -*.css text -*.sass text -*.scss text -*.less text -*.styl text -*.js text eol=lf -*.coffee text -*.json text -*.htm text -*.html text -*.xml text -*.svg text -*.txt text -*.ini text -*.inc text -*.pl text -*.rb text -*.py text -*.scm text -*.sql text -*.sh text -*.bat text - -# templates -*.ejs text -*.hbt text -*.jade text -*.haml text -*.hbs text -*.dot text -*.tmpl text -*.phtml text - -# server config -.htaccess text - -# git config -.gitattributes text -.gitignore text -.gitconfig text - -# code analysis config -.jshintrc text -.jscsrc text -.jshintignore text -.csslintrc text - -# misc config -*.yaml text -*.yml text -.editorconfig text - -# build config -*.npmignore text -*.bowerrc text - -# Heroku -Procfile text -.slugignore text - -# Documentation -*.md text -LICENSE text -AUTHORS text - - -# -## These files are binary and should be left untouched -# - -# (binary is a macro for -text -diff) -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.mov binary -*.mp4 binary -*.mp3 binary -*.flv binary -*.fla binary -*.swf binary -*.gz binary -*.zip binary -*.7z binary -*.ttf binary -*.eot binary -*.woff binary -*.pyc binary -*.pdf binary diff --git a/truebit-implementation/node_modules/is-hex-prefixed/.npmignore b/truebit-implementation/node_modules/is-hex-prefixed/.npmignore deleted file mode 100644 index 3260b1f5..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -# Don't check auto-generated stuff into git -node_modules -coverage -lib - -# Cruft -.DS_Store -npm-debug.log diff --git a/truebit-implementation/node_modules/is-hex-prefixed/.travis.yml b/truebit-implementation/node_modules/is-hex-prefixed/.travis.yml deleted file mode 100644 index baeeccb7..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -sudo: true -language: node_js -node_js: - - "6" -after_success: npm run coveralls diff --git a/truebit-implementation/node_modules/is-hex-prefixed/CHANGELOG.md b/truebit-implementation/node_modules/is-hex-prefixed/CHANGELOG.md deleted file mode 100644 index b01c88de..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -# 0.0.1 -- is-hex-prefixed - -1. Basic testing -2. Basic docs -3. License -4. linting -5. basic exports diff --git a/truebit-implementation/node_modules/is-hex-prefixed/LICENSE b/truebit-implementation/node_modules/is-hex-prefixed/LICENSE deleted file mode 100644 index b231a715..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) 2016 Nick Dodson. nickdodson.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-hex-prefixed/README.md b/truebit-implementation/node_modules/is-hex-prefixed/README.md deleted file mode 100644 index 20cf37b6..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/README.md +++ /dev/null @@ -1,101 +0,0 @@ -## is-hex-prefixed - -
- - - Dependency Status - - - - - devDependency Status - - - - - Build Status - - - - - NPM version - - - - - Test Coverage - - - - - js-airbnb-style - -
- -
- -A simple method to check if a string is hex prefixed. - -## Install - -``` -npm install --save is-hex-prefixed -``` - -## Usage - -```js -const isHexPrefixed = require('is-hex-prefixed'); - -console.log(isHexPrefixed('0x..')); - -// result true - -console.log(isHexPrefixed('dfsk')); - -// result false - -console.log(isHexPrefixed({})); - -// result throw new Error - -console.log(isHexPrefixed('-0x')); - -// result false -``` - -## Important documents - -- [Changelog](CHANGELOG.md) -- [License](https://raw.githubusercontent.com/silentcicero/is-hex-prefixed/master/LICENSE) - -## Licence - -This project is licensed under the MIT license, Copyright (c) 2016 Nick Dodson. For more information see LICENSE.md. - -``` -The MIT License - -Copyright (c) 2016 Nick Dodson. nickdodson.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. -``` diff --git a/truebit-implementation/node_modules/is-hex-prefixed/package.json b/truebit-implementation/node_modules/is-hex-prefixed/package.json deleted file mode 100644 index 577bdc9a..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "_from": "is-hex-prefixed@1.0.0", - "_id": "is-hex-prefixed@1.0.0", - "_inBundle": false, - "_integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "_location": "/is-hex-prefixed", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "is-hex-prefixed@1.0.0", - "name": "is-hex-prefixed", - "escapedName": "is-hex-prefixed", - "rawSpec": "1.0.0", - "saveSpec": null, - "fetchSpec": "1.0.0" - }, - "_requiredBy": [ - "/strip-hex-prefix" - ], - "_resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "_shasum": "7d8d37e6ad77e5d127148913c573e082d777f554", - "_spec": "is-hex-prefixed@1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/strip-hex-prefix", - "author": { - "name": "Nick Dodson", - "email": "thenickdodson@gmail.com" - }, - "bugs": { - "url": "https://github.com/SilentCicero/is-hex-prefixed/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A simple method to check if a string is hex prefixed.", - "devDependencies": { - "chai": "3.5.0", - "coveralls": "2.11.9", - "istanbul": "0.4.5", - "mocha": "3.2.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - }, - "homepage": "https://github.com/SilentCicero/is-hex-prefixed#readme", - "keywords": [ - "is", - "hex", - "prefixed", - "prefix", - "checker", - "method" - ], - "license": "MIT", - "main": "src/index.js", - "name": "is-hex-prefixed", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/SilentCicero/is-hex-prefixed.git" - }, - "scripts": { - "coveralls": "npm run test-travis && cat ./coverage/lcov.info | coveralls", - "test": "mocha src/tests/**/**.js", - "test-travis": "node ./node_modules/istanbul/lib/cli.js cover ./node_modules/mocha/bin/_mocha -- src/tests/**/*.js" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/is-hex-prefixed/src/index.js b/truebit-implementation/node_modules/is-hex-prefixed/src/index.js deleted file mode 100644 index dab0fa70..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/src/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Returns a `Boolean` on whether or not the a `String` starts with '0x' - * @param {String} str the string input value - * @return {Boolean} a boolean if it is or is not hex prefixed - * @throws if the str input is not a string - */ -module.exports = function isHexPrefixed(str) { - if (typeof str !== 'string') { - throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed."); - } - - return str.slice(0, 2) === '0x'; -} diff --git a/truebit-implementation/node_modules/is-hex-prefixed/src/tests/test.index.js b/truebit-implementation/node_modules/is-hex-prefixed/src/tests/test.index.js deleted file mode 100644 index 07775a00..00000000 --- a/truebit-implementation/node_modules/is-hex-prefixed/src/tests/test.index.js +++ /dev/null @@ -1,66 +0,0 @@ -const isHexPrefixed = require('../index.js'); -const assert = require('chai').assert; - -describe("isHexPrefixed", () => { - describe("constructor", () => { - it("should have the method exported", () => { - assert.equal(typeof isHexPrefixed, 'function'); - }); - }); - - describe("should function normall", () => { - it('should isHexPrefixed check if hex is prefixed', () => { - assert.equal(isHexPrefixed('0xsdffsd'), true); - assert.equal(isHexPrefixed('0x'), true); - assert.equal(isHexPrefixed('0x3982349284'), true); - assert.equal(isHexPrefixed('0x824723894jshdksjdhks'), true); - }); - - it('should isHexPrefixed check if hex is prefixed not prefixed', () => { - assert.equal(isHexPrefixed('sdffsd'), false); - assert.equal(isHexPrefixed(''), false); - assert.equal(isHexPrefixed('3982349284'), false); - assert.equal(isHexPrefixed('824723894jshdksjdhks'), false); - }); - - it('should isHexPrefixed throw as expected string got buffer', () => { - try { - isHexPrefixed(new Buffer()); - } catch (error) { - assert.equal(typeof error, 'object'); - } - }); - - it('should isHexPrefixed throw as expected string got empty object', () => { - try { - isHexPrefixed({}); - } catch (error) { - assert.equal(typeof error, 'object'); - } - }); - - it('should isHexPrefixed throw as expected string got number', () => { - try { - isHexPrefixed(823947243994); - } catch (error) { - assert.equal(typeof error, 'object'); - } - }); - - it('should isHexPrefixed throw as expected string got undefined', () => { - try { - isHexPrefixed(undefined); - } catch (error) { - assert.equal(typeof error, 'object'); - } - }); - - it('should isHexPrefixed throw as expected string got null', () => { - try { - isHexPrefixed(null); - } catch (error) { - assert.equal(typeof error, 'object'); - } - }); - }); -}); diff --git a/truebit-implementation/node_modules/is-natural-number/LICENSE b/truebit-implementation/node_modules/is-natural-number/LICENSE deleted file mode 100644 index 3b7a1903..00000000 --- a/truebit-implementation/node_modules/is-natural-number/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 - 2016 Shinnosuke Watanabe - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-natural-number/README.md b/truebit-implementation/node_modules/is-natural-number/README.md deleted file mode 100644 index db13bde8..00000000 --- a/truebit-implementation/node_modules/is-natural-number/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# is-natural-number.js - -[![NPM version](https://img.shields.io/npm/v/is-natural-number.svg)](https://www.npmjs.com/package/is-natural-number) -[![Bower version](https://img.shields.io/bower/v/is-natural-number.svg)](https://github.com/shinnn/is-natural-number.js/releases) -[![Build Status](https://travis-ci.org/shinnn/is-natural-number.js.svg)](https://travis-ci.org/shinnn/is-natural-number.js) -[![Coverage Status](https://img.shields.io/coveralls/shinnn/is-natural-number.js.svg)](https://coveralls.io/r/shinnn/is-natural-number.js?branch=master) -[![devDependency Status](https://david-dm.org/shinnn/is-natural-number.js/dev-status.svg)](https://david-dm.org/shinnn/is-natural-number.js#info=devDependencies) - -Check if a value is a [natural number](https://wikipedia.org/wiki/Natural_number) - -## Installation - -### Package managers - -#### [npm](https://www.npmjs.com/) - -``` -npm install is-natural-number -``` - -#### [Bower](http://bower.io/) - -``` -bower install is-natural-number -``` - -#### [Duo](http://duojs.org/) - -```javascript -var isNaturalNumber = require('shinnn/is-natural-number.js'); -``` - -### Standalone - -[Download the script file directly.](https://raw.githubusercontent.com/shinnn/is-natural-number.js/master/is-natural-number.js) - -## API - -### isNaturalNumber(*number*, *option*) - -*number*: `Number` -*option*: `Object` -Return: `Boolean` - -It returns `true` if the first argument is one of the natural numbers. If not, or the argument is not a number, it returns `false`. - -```javascript -isNaturalNumber(10); //=> true - -isNaturalNumber(-10); //=> false -isNaturalNumber(10.5); //=> false -isNaturalNumber(Infinity); //=> false -isNaturalNumber('10'); //=> false -``` - -*Check [the test](./test.js) for more detailed specifications.* - -#### option.includeZero - -Type: `Boolean` -Default: `false` - -By default the number `0` is not regarded as a natural number. - -Setting this option `true` makes `0` regarded as a natural number. - -```javascript -isNaturalNumber(0); //=> false -isNaturalNumber(0, {includeZero: true}); //=> true -``` - -## License - -Copyright (c) 2014 - 2016 [Shinnosuke Watanabe](https://github.com/shinnn) - -Licensed under [the MIT License](./LICENSE). diff --git a/truebit-implementation/node_modules/is-natural-number/index.js b/truebit-implementation/node_modules/is-natural-number/index.js deleted file mode 100644 index 6b1b3f23..00000000 --- a/truebit-implementation/node_modules/is-natural-number/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * is-natural-number.js | MIT (c) Shinnosuke Watanabe - * https://github.com/shinnn/is-natural-number.js -*/ -'use strict'; - -module.exports = function isNaturalNumber(val, option) { - if (option) { - if (typeof option !== 'object') { - throw new TypeError( - String(option) + - ' is not an object. Expected an object that has boolean `includeZero` property.' - ); - } - - if ('includeZero' in option) { - if (typeof option.includeZero !== 'boolean') { - throw new TypeError( - String(option.includeZero) + - ' is neither true nor false. `includeZero` option must be a Boolean value.' - ); - } - - if (option.includeZero && val === 0) { - return true; - } - } - } - - return Number.isSafeInteger(val) && val >= 1; -}; diff --git a/truebit-implementation/node_modules/is-natural-number/index.jsnext.js b/truebit-implementation/node_modules/is-natural-number/index.jsnext.js deleted file mode 100644 index f018bd41..00000000 --- a/truebit-implementation/node_modules/is-natural-number/index.jsnext.js +++ /dev/null @@ -1,29 +0,0 @@ -/*! - * is-natural-number.js | MIT (c) Shinnosuke Watanabe - * https://github.com/shinnn/is-natural-number.js -*/ -export default function isNaturalNumber(val, option) { - if (option) { - if (typeof option !== 'object') { - throw new TypeError( - String(option) + - ' is not an object. Expected an object that has boolean `includeZero` property.' - ); - } - - if ('includeZero' in option) { - if (typeof option.includeZero !== 'boolean') { - throw new TypeError( - String(option.includeZero) + - ' is neither true nor false. `includeZero` option must be a Boolean value.' - ); - } - - if (option.includeZero && val === 0) { - return true; - } - } - } - - return Number.isSafeInteger(val) && val >= 1; -} diff --git a/truebit-implementation/node_modules/is-natural-number/package.json b/truebit-implementation/node_modules/is-natural-number/package.json deleted file mode 100644 index 9207f430..00000000 --- a/truebit-implementation/node_modules/is-natural-number/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "is-natural-number@^4.0.1", - "_id": "is-natural-number@4.0.1", - "_inBundle": false, - "_integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "_location": "/is-natural-number", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-natural-number@^4.0.1", - "name": "is-natural-number", - "escapedName": "is-natural-number", - "rawSpec": "^4.0.1", - "saveSpec": null, - "fetchSpec": "^4.0.1" - }, - "_requiredBy": [ - "/strip-dirs" - ], - "_resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "_shasum": "ab9d76e1db4ced51e35de0c72ebecf09f734cde8", - "_spec": "is-natural-number@^4.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/strip-dirs", - "author": { - "name": "Shinnosuke Watanabe", - "url": "https://github.com/shinnn" - }, - "bugs": { - "url": "https://github.com/shinnn/is-natural-number.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Check if a value is a natural number", - "devDependencies": { - "@shinnn/eslint-config": "^2.1.0", - "eslint": "^2.9.0", - "istanbul": "^0.4.3", - "require-from-string": "^1.2.0", - "rollup": "^0.26.3", - "tap-dot": "^1.0.5", - "tape": "^4.5.1" - }, - "files": [ - "index.js", - "index.jsnext.js" - ], - "homepage": "https://github.com/shinnn/is-natural-number.js#readme", - "jsnext:main": "index.jsnext.js", - "keywords": [ - "number", - "natural", - "check", - "int", - "integer", - "math", - "mathematics", - "range", - "browser", - "client-side" - ], - "license": "MIT", - "name": "is-natural-number", - "repository": { - "type": "git", - "url": "git+https://github.com/shinnn/is-natural-number.js.git" - }, - "scripts": { - "coverage": "node --strong_mode node_modules/.bin/istanbul cover test.js", - "pretest": "eslint --config @shinnn --ignore-path .gitignore .", - "test": "node --strong_mode --throw-deprecation --track-heap-objects test.js | tap-dot" - }, - "version": "4.0.1" -} diff --git a/truebit-implementation/node_modules/is-object/.jscs.json b/truebit-implementation/node_modules/is-object/.jscs.json deleted file mode 100644 index 97ab933d..00000000 --- a/truebit-implementation/node_modules/is-object/.jscs.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"], - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": "allButReserved", - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "validateLineBreaks": "LF", - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "additionalRules": [] -} - diff --git a/truebit-implementation/node_modules/is-object/.npmignore b/truebit-implementation/node_modules/is-object/.npmignore deleted file mode 100644 index fd31f5ee..00000000 --- a/truebit-implementation/node_modules/is-object/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -.DS_Store -.monitor -.*.swp -.nodemonignore -releases -*.log -*.err -fleet.json -public/browserify -bin/*.json -.bin -build -compile -.lock-wscript -node_modules diff --git a/truebit-implementation/node_modules/is-object/.testem.json b/truebit-implementation/node_modules/is-object/.testem.json deleted file mode 100644 index 287edfe1..00000000 --- a/truebit-implementation/node_modules/is-object/.testem.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "launchers": { - "node": { - "command": "node ./test" - } - }, - "src_files": [ - "./**/*.js" - ], - "before_tests": "npm run build", - "on_exit": "rm test/static/bundle.js", - "test_page": "test/static/index.html", - "launch_in_dev": ["node", "phantomjs"] -} diff --git a/truebit-implementation/node_modules/is-object/.travis.yml b/truebit-implementation/node_modules/is-object/.travis.yml deleted file mode 100644 index 912080aa..00000000 --- a/truebit-implementation/node_modules/is-object/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - '[ "${TRAVIS_NODE_VERSION}" == "0.6" ] || npm install -g npm@~1.4.6' -matrix: - fast_finish: true - allow_failures: - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.6" - - node_js: "0.4" - diff --git a/truebit-implementation/node_modules/is-object/LICENSE b/truebit-implementation/node_modules/is-object/LICENSE deleted file mode 100644 index 72d356c1..00000000 --- a/truebit-implementation/node_modules/is-object/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013 Colingo. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-object/README.md b/truebit-implementation/node_modules/is-object/README.md deleted file mode 100644 index d6e7b7d3..00000000 --- a/truebit-implementation/node_modules/is-object/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# is-object [![Version Badge][12]][11] - -[![build status][1]][2] -[![dependency status][3]][4] -[![dev dependency status][9]][10] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][13]][11] - -[![browser support][5]][6] - -Checks whether a value is an object - -Because `typeof null` is a troll. - -## Example - -```js -var isObject = require('is-object'); -var assert = require('assert'); - -assert.equal(isObject(null), false); -assert.equal(isObject({}), true); -``` - -## Installation - -`npm install is-object` - -## Contributors - - - [Raynos][7] - - [Jordan Harband][8] - -## MIT Licensed - - [1]: https://secure.travis-ci.org/ljharb/is-object.svg - [2]: http://travis-ci.org/ljharb/is-object - [3]: http://david-dm.org/ljharb/is-object/status.svg - [4]: http://david-dm.org/ljharb/is-object - [5]: http://ci.testling.com/ljharb/is-object.svg - [6]: http://ci.testling.com/ljharb/is-object - [7]: https://github.com/Raynos - [8]: https://github.com/ljharb - [9]: https://david-dm.org/ljharb/is-object/dev-status.svg - [10]: https://david-dm.org/ljharb/is-object#info=devDependencies - [11]: https://npmjs.org/package/is-object - [12]: http://vb.teelaun.ch/ljharb/is-object.svg - [13]: https://nodei.co/npm/is-object.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/is-object.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/is-object.svg -[downloads-url]: http://npm-stat.com/charts.html?package=is-object - diff --git a/truebit-implementation/node_modules/is-object/index.js b/truebit-implementation/node_modules/is-object/index.js deleted file mode 100644 index e618d113..00000000 --- a/truebit-implementation/node_modules/is-object/index.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -module.exports = function isObject(x) { - return typeof x === "object" && x !== null; -}; diff --git a/truebit-implementation/node_modules/is-object/package.json b/truebit-implementation/node_modules/is-object/package.json deleted file mode 100644 index 10761384..00000000 --- a/truebit-implementation/node_modules/is-object/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_from": "is-object@^1.0.1", - "_id": "is-object@1.0.1", - "_inBundle": false, - "_integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "_location": "/is-object", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-object@^1.0.1", - "name": "is-object", - "escapedName": "is-object", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/isurl" - ], - "_resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "_shasum": "8952688c5ec2ffd6b03ecc85e769e02903083470", - "_spec": "is-object@^1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/isurl", - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "bugs": { - "url": "https://github.com/ljharb/is-object/issues", - "email": "ljharb@gmail.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Raynos" - }, - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "Checks whether a value is an object", - "devDependencies": { - "covert": "~1.0.0", - "jscs": "~1.6.0", - "tape": "~2.14.0" - }, - "homepage": "https://github.com/ljharb/is-object", - "keywords": [], - "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/ljharb/is-object/raw/master/LICENSE" - } - ], - "main": "index", - "name": "is-object", - "repository": { - "type": "git", - "url": "git://github.com/ljharb/is-object.git" - }, - "scripts": { - "coverage": "covert test/index.js", - "coverage-quiet": "covert test/index.js --quiet", - "lint": "jscs *.js */*.js", - "test": "npm run lint && node test/index.js && npm run coverage-quiet" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "ie/6..latest", - "firefox/3..6", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/10.0", - "opera/11..latest", - "opera/next", - "safari/4..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ] - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/is-object/test/index.js b/truebit-implementation/node_modules/is-object/test/index.js deleted file mode 100644 index 35267a90..00000000 --- a/truebit-implementation/node_modules/is-object/test/index.js +++ /dev/null @@ -1,23 +0,0 @@ -var test = require('tape'); - -var isObject = require('../index'); - -test('returns true for objects', function (assert) { - assert.equal(isObject({}), true); - assert.equal(isObject([]), true); - - assert.end(); -}); - -test('returns false for null', function (assert) { - assert.equal(isObject(null), false); - - assert.end(); -}); - -test('returns false for primitives', function (assert) { - assert.equal(isObject(42), false); - assert.equal(isObject('foo'), false); - - assert.end(); -}); diff --git a/truebit-implementation/node_modules/is-plain-obj/index.js b/truebit-implementation/node_modules/is-plain-obj/index.js deleted file mode 100644 index 0d1ba9ee..00000000 --- a/truebit-implementation/node_modules/is-plain-obj/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; -var toString = Object.prototype.toString; - -module.exports = function (x) { - var prototype; - return toString.call(x) === '[object Object]' && (prototype = Object.getPrototypeOf(x), prototype === null || prototype === Object.getPrototypeOf({})); -}; diff --git a/truebit-implementation/node_modules/is-plain-obj/license b/truebit-implementation/node_modules/is-plain-obj/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/is-plain-obj/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-plain-obj/package.json b/truebit-implementation/node_modules/is-plain-obj/package.json deleted file mode 100644 index d62dd74c..00000000 --- a/truebit-implementation/node_modules/is-plain-obj/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "is-plain-obj@^1.1.0", - "_id": "is-plain-obj@1.1.0", - "_inBundle": false, - "_integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "_location": "/is-plain-obj", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-plain-obj@^1.1.0", - "name": "is-plain-obj", - "escapedName": "is-plain-obj", - "rawSpec": "^1.1.0", - "saveSpec": null, - "fetchSpec": "^1.1.0" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "_shasum": "71a50c8429dfca773c92a390a4a03b39fcd51d3e", - "_spec": "is-plain-obj@^1.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/is-plain-obj/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Check if a value is a plain object", - "devDependencies": { - "ava": "0.0.4" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/is-plain-obj#readme", - "keywords": [ - "obj", - "object", - "is", - "check", - "test", - "type", - "plain", - "vanilla", - "pure", - "simple" - ], - "license": "MIT", - "name": "is-plain-obj", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/is-plain-obj.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/is-plain-obj/readme.md b/truebit-implementation/node_modules/is-plain-obj/readme.md deleted file mode 100644 index 269e56ae..00000000 --- a/truebit-implementation/node_modules/is-plain-obj/readme.md +++ /dev/null @@ -1,35 +0,0 @@ -# is-plain-obj [![Build Status](https://travis-ci.org/sindresorhus/is-plain-obj.svg?branch=master)](https://travis-ci.org/sindresorhus/is-plain-obj) - -> Check if a value is a plain object - -An object is plain if it's created by either `{}`, `new Object()` or `Object.create(null)`. - - -## Install - -``` -$ npm install --save is-plain-obj -``` - - -## Usage - -```js -var isPlainObj = require('is-plain-obj'); - -isPlainObj({foo: 'bar'}); -//=> true - -isPlainObj([1, 2, 3]); -//=> false -``` - - -## Related - -- [is-obj](https://github.com/sindresorhus/is-obj) - Check if a value is an object - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/truebit-implementation/node_modules/is-retry-allowed/index.js b/truebit-implementation/node_modules/is-retry-allowed/index.js deleted file mode 100644 index 663ee338..00000000 --- a/truebit-implementation/node_modules/is-retry-allowed/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var WHITELIST = [ - 'ETIMEDOUT', - 'ECONNRESET', - 'EADDRINUSE', - 'ESOCKETTIMEDOUT', - 'ECONNREFUSED', - 'EPIPE' -]; - -var BLACKLIST = [ - 'ENOTFOUND', - 'ENETUNREACH', - - // SSL errors from https://github.com/nodejs/node/blob/ed3d8b13ee9a705d89f9e0397d9e96519e7e47ac/src/node_crypto.cc#L1950 - 'UNABLE_TO_GET_ISSUER_CERT', - 'UNABLE_TO_GET_CRL', - 'UNABLE_TO_DECRYPT_CERT_SIGNATURE', - 'UNABLE_TO_DECRYPT_CRL_SIGNATURE', - 'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY', - 'CERT_SIGNATURE_FAILURE', - 'CRL_SIGNATURE_FAILURE', - 'CERT_NOT_YET_VALID', - 'CERT_HAS_EXPIRED', - 'CRL_NOT_YET_VALID', - 'CRL_HAS_EXPIRED', - 'ERROR_IN_CERT_NOT_BEFORE_FIELD', - 'ERROR_IN_CERT_NOT_AFTER_FIELD', - 'ERROR_IN_CRL_LAST_UPDATE_FIELD', - 'ERROR_IN_CRL_NEXT_UPDATE_FIELD', - 'OUT_OF_MEM', - 'DEPTH_ZERO_SELF_SIGNED_CERT', - 'SELF_SIGNED_CERT_IN_CHAIN', - 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY', - 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', - 'CERT_CHAIN_TOO_LONG', - 'CERT_REVOKED', - 'INVALID_CA', - 'PATH_LENGTH_EXCEEDED', - 'INVALID_PURPOSE', - 'CERT_UNTRUSTED', - 'CERT_REJECTED' -]; - -module.exports = function (err) { - if (!err || !err.code) { - return true; - } - - if (WHITELIST.indexOf(err.code) !== -1) { - return true; - } - - if (BLACKLIST.indexOf(err.code) !== -1) { - return false; - } - - return true; -}; diff --git a/truebit-implementation/node_modules/is-retry-allowed/license b/truebit-implementation/node_modules/is-retry-allowed/license deleted file mode 100644 index 1aeb74fd..00000000 --- a/truebit-implementation/node_modules/is-retry-allowed/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-retry-allowed/package.json b/truebit-implementation/node_modules/is-retry-allowed/package.json deleted file mode 100644 index 0353b99e..00000000 --- a/truebit-implementation/node_modules/is-retry-allowed/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "is-retry-allowed@^1.0.0", - "_id": "is-retry-allowed@1.1.0", - "_inBundle": false, - "_integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "_location": "/is-retry-allowed", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-retry-allowed@^1.0.0", - "name": "is-retry-allowed", - "escapedName": "is-retry-allowed", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "_shasum": "11a060568b67339444033d0125a61a20d564fb34", - "_spec": "is-retry-allowed@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Vsevolod Strukchinsky", - "email": "floatdrop@gmail.com", - "url": "github.com/floatdrop" - }, - "bugs": { - "url": "https://github.com/floatdrop/is-retry-allowed/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "My prime module", - "devDependencies": { - "ava": "^0.8.0", - "xo": "^0.12.1" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/floatdrop/is-retry-allowed#readme", - "keywords": [], - "license": "MIT", - "name": "is-retry-allowed", - "repository": { - "type": "git", - "url": "git+https://github.com/floatdrop/is-retry-allowed.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/is-retry-allowed/readme.md b/truebit-implementation/node_modules/is-retry-allowed/readme.md deleted file mode 100644 index 4212d099..00000000 --- a/truebit-implementation/node_modules/is-retry-allowed/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# is-retry-allowed [![Build Status](https://travis-ci.org/floatdrop/is-retry-allowed.svg?branch=master)](https://travis-ci.org/floatdrop/is-retry-allowed) - -Is retry allowed for Error? - - -## Install - -``` -$ npm install --save is-retry-allowed -``` - - -## Usage - -```js -const isRetryAllowed = require('is-retry-allowed'); - -isRetryAllowed({code: 'ETIMEDOUT'}); -//=> true - -isRetryAllowed({code: 'ENOTFOUND'}); -//=> false - -isRetryAllowed({}); -//=> true -``` - - -## API - -### isRetryAllowed(error) - -#### error - -Type: `object` - -Object with `code` property, which will be used to determine retry. - - -## License - -MIT © [Vsevolod Strukchinsky](http://github.com/floatdrop) diff --git a/truebit-implementation/node_modules/is-stream/index.js b/truebit-implementation/node_modules/is-stream/index.js deleted file mode 100644 index 6f7ec91a..00000000 --- a/truebit-implementation/node_modules/is-stream/index.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var isStream = module.exports = function (stream) { - return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function'; -}; - -isStream.writable = function (stream) { - return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object'; -}; - -isStream.readable = function (stream) { - return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object'; -}; - -isStream.duplex = function (stream) { - return isStream.writable(stream) && isStream.readable(stream); -}; - -isStream.transform = function (stream) { - return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object'; -}; diff --git a/truebit-implementation/node_modules/is-stream/license b/truebit-implementation/node_modules/is-stream/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/is-stream/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-stream/package.json b/truebit-implementation/node_modules/is-stream/package.json deleted file mode 100644 index 77b27ad3..00000000 --- a/truebit-implementation/node_modules/is-stream/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "_from": "is-stream@^1.0.0", - "_id": "is-stream@1.1.0", - "_inBundle": false, - "_integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "_location": "/is-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-stream@^1.0.0", - "name": "is-stream", - "escapedName": "is-stream", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/decompress-tar", - "/decompress-tarbz2", - "/decompress-targz", - "/got" - ], - "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "_shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", - "_spec": "is-stream@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/is-stream/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Check if something is a Node.js stream", - "devDependencies": { - "ava": "*", - "tempfile": "^1.1.0", - "xo": "*" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/is-stream#readme", - "keywords": [ - "stream", - "type", - "streams", - "writable", - "readable", - "duplex", - "transform", - "check", - "detect", - "is" - ], - "license": "MIT", - "name": "is-stream", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/is-stream.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/is-stream/readme.md b/truebit-implementation/node_modules/is-stream/readme.md deleted file mode 100644 index d8afce81..00000000 --- a/truebit-implementation/node_modules/is-stream/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# is-stream [![Build Status](https://travis-ci.org/sindresorhus/is-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/is-stream) - -> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html) - - -## Install - -``` -$ npm install --save is-stream -``` - - -## Usage - -```js -const fs = require('fs'); -const isStream = require('is-stream'); - -isStream(fs.createReadStream('unicorn.png')); -//=> true - -isStream({}); -//=> false -``` - - -## API - -### isStream(stream) - -#### isStream.writable(stream) - -#### isStream.readable(stream) - -#### isStream.duplex(stream) - -#### isStream.transform(stream) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/is-typedarray/LICENSE.md b/truebit-implementation/node_modules/is-typedarray/LICENSE.md deleted file mode 100644 index ee27ba4b..00000000 --- a/truebit-implementation/node_modules/is-typedarray/LICENSE.md +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/is-typedarray/README.md b/truebit-implementation/node_modules/is-typedarray/README.md deleted file mode 100644 index 27528639..00000000 --- a/truebit-implementation/node_modules/is-typedarray/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# is-typedarray [![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Detect whether or not an object is a -[Typed Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays). - -## Usage - -[![NPM](https://nodei.co/npm/is-typedarray.png)](https://nodei.co/npm/is-typedarray/) - -### isTypedArray(array) - -Returns `true` when array is a Typed Array, and `false` when it is not. - -## License - -MIT. See [LICENSE.md](http://github.com/hughsk/is-typedarray/blob/master/LICENSE.md) for details. diff --git a/truebit-implementation/node_modules/is-typedarray/index.js b/truebit-implementation/node_modules/is-typedarray/index.js deleted file mode 100644 index 58596036..00000000 --- a/truebit-implementation/node_modules/is-typedarray/index.js +++ /dev/null @@ -1,41 +0,0 @@ -module.exports = isTypedArray -isTypedArray.strict = isStrictTypedArray -isTypedArray.loose = isLooseTypedArray - -var toString = Object.prototype.toString -var names = { - '[object Int8Array]': true - , '[object Int16Array]': true - , '[object Int32Array]': true - , '[object Uint8Array]': true - , '[object Uint8ClampedArray]': true - , '[object Uint16Array]': true - , '[object Uint32Array]': true - , '[object Float32Array]': true - , '[object Float64Array]': true -} - -function isTypedArray(arr) { - return ( - isStrictTypedArray(arr) - || isLooseTypedArray(arr) - ) -} - -function isStrictTypedArray(arr) { - return ( - arr instanceof Int8Array - || arr instanceof Int16Array - || arr instanceof Int32Array - || arr instanceof Uint8Array - || arr instanceof Uint8ClampedArray - || arr instanceof Uint16Array - || arr instanceof Uint32Array - || arr instanceof Float32Array - || arr instanceof Float64Array - ) -} - -function isLooseTypedArray(arr) { - return names[toString.call(arr)] -} diff --git a/truebit-implementation/node_modules/is-typedarray/package.json b/truebit-implementation/node_modules/is-typedarray/package.json deleted file mode 100644 index cd30cbf7..00000000 --- a/truebit-implementation/node_modules/is-typedarray/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_from": "is-typedarray@~1.0.0", - "_id": "is-typedarray@1.0.0", - "_inBundle": false, - "_integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "_location": "/is-typedarray", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "is-typedarray@~1.0.0", - "name": "is-typedarray", - "escapedName": "is-typedarray", - "rawSpec": "~1.0.0", - "saveSpec": null, - "fetchSpec": "~1.0.0" - }, - "_requiredBy": [ - "/request", - "/typedarray-to-buffer" - ], - "_resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "_shasum": "e479c80858df0c1b11ddda6940f96011fcda4a9a", - "_spec": "is-typedarray@~1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Hugh Kennedy", - "email": "hughskennedy@gmail.com", - "url": "http://hughsk.io/" - }, - "bugs": { - "url": "https://github.com/hughsk/is-typedarray/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Detect whether or not an object is a Typed Array", - "devDependencies": { - "tape": "^2.13.1" - }, - "homepage": "https://github.com/hughsk/is-typedarray", - "keywords": [ - "typed", - "array", - "detect", - "is", - "util" - ], - "license": "MIT", - "main": "index.js", - "name": "is-typedarray", - "repository": { - "type": "git", - "url": "git://github.com/hughsk/is-typedarray.git" - }, - "scripts": { - "test": "node test" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/is-typedarray/test.js b/truebit-implementation/node_modules/is-typedarray/test.js deleted file mode 100644 index b0c176fa..00000000 --- a/truebit-implementation/node_modules/is-typedarray/test.js +++ /dev/null @@ -1,34 +0,0 @@ -var test = require('tape') -var ista = require('./') - -test('strict', function(t) { - t.ok(ista.strict(new Int8Array), 'Int8Array') - t.ok(ista.strict(new Int16Array), 'Int16Array') - t.ok(ista.strict(new Int32Array), 'Int32Array') - t.ok(ista.strict(new Uint8Array), 'Uint8Array') - t.ok(ista.strict(new Uint16Array), 'Uint16Array') - t.ok(ista.strict(new Uint32Array), 'Uint32Array') - t.ok(ista.strict(new Float32Array), 'Float32Array') - t.ok(ista.strict(new Float64Array), 'Float64Array') - - t.ok(!ista.strict(new Array), 'Array') - t.ok(!ista.strict([]), '[]') - - t.end() -}) - -test('loose', function(t) { - t.ok(ista.loose(new Int8Array), 'Int8Array') - t.ok(ista.loose(new Int16Array), 'Int16Array') - t.ok(ista.loose(new Int32Array), 'Int32Array') - t.ok(ista.loose(new Uint8Array), 'Uint8Array') - t.ok(ista.loose(new Uint16Array), 'Uint16Array') - t.ok(ista.loose(new Uint32Array), 'Uint32Array') - t.ok(ista.loose(new Float32Array), 'Float32Array') - t.ok(ista.loose(new Float64Array), 'Float64Array') - - t.ok(!ista.loose(new Array), 'Array') - t.ok(!ista.loose([]), '[]') - - t.end() -}) diff --git a/truebit-implementation/node_modules/isarray/.npmignore b/truebit-implementation/node_modules/isarray/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/truebit-implementation/node_modules/isarray/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/truebit-implementation/node_modules/isarray/.travis.yml b/truebit-implementation/node_modules/isarray/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/truebit-implementation/node_modules/isarray/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/truebit-implementation/node_modules/isarray/Makefile b/truebit-implementation/node_modules/isarray/Makefile deleted file mode 100644 index 787d56e1..00000000 --- a/truebit-implementation/node_modules/isarray/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -test: - @node_modules/.bin/tape test.js - -.PHONY: test - diff --git a/truebit-implementation/node_modules/isarray/README.md b/truebit-implementation/node_modules/isarray/README.md deleted file mode 100644 index 16d2c59c..00000000 --- a/truebit-implementation/node_modules/isarray/README.md +++ /dev/null @@ -1,60 +0,0 @@ - -# isarray - -`Array#isArray` for older browsers. - -[![build status](https://secure.travis-ci.org/juliangruber/isarray.svg)](http://travis-ci.org/juliangruber/isarray) -[![downloads](https://img.shields.io/npm/dm/isarray.svg)](https://www.npmjs.org/package/isarray) - -[![browser support](https://ci.testling.com/juliangruber/isarray.png) -](https://ci.testling.com/juliangruber/isarray) - -## Usage - -```js -var isArray = require('isarray'); - -console.log(isArray([])); // => true -console.log(isArray({})); // => false -``` - -## Installation - -With [npm](http://npmjs.org) do - -```bash -$ npm install isarray -``` - -Then bundle for the browser with -[browserify](https://github.com/substack/browserify). - -With [component](http://component.io) do - -```bash -$ component install juliangruber/isarray -``` - -## License - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/isarray/component.json b/truebit-implementation/node_modules/isarray/component.json deleted file mode 100644 index 9e31b683..00000000 --- a/truebit-implementation/node_modules/isarray/component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name" : "isarray", - "description" : "Array#isArray for older browsers", - "version" : "0.0.1", - "repository" : "juliangruber/isarray", - "homepage": "https://github.com/juliangruber/isarray", - "main" : "index.js", - "scripts" : [ - "index.js" - ], - "dependencies" : {}, - "keywords": ["browser","isarray","array"], - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "license": "MIT" -} diff --git a/truebit-implementation/node_modules/isarray/index.js b/truebit-implementation/node_modules/isarray/index.js deleted file mode 100644 index a57f6349..00000000 --- a/truebit-implementation/node_modules/isarray/index.js +++ /dev/null @@ -1,5 +0,0 @@ -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; diff --git a/truebit-implementation/node_modules/isarray/package.json b/truebit-implementation/node_modules/isarray/package.json deleted file mode 100644 index 6e4c6560..00000000 --- a/truebit-implementation/node_modules/isarray/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_from": "isarray@~1.0.0", - "_id": "isarray@1.0.0", - "_inBundle": false, - "_integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "_location": "/isarray", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "isarray@~1.0.0", - "name": "isarray", - "escapedName": "isarray", - "rawSpec": "~1.0.0", - "saveSpec": null, - "fetchSpec": "~1.0.0" - }, - "_requiredBy": [ - "/readable-stream", - "/unbzip2-stream/buffer" - ], - "_resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "_shasum": "bb935d48582cba168c06834957a54a3e07124f11", - "_spec": "isarray@~1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/readable-stream", - "author": { - "name": "Julian Gruber", - "email": "mail@juliangruber.com", - "url": "http://juliangruber.com" - }, - "bugs": { - "url": "https://github.com/juliangruber/isarray/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Array#isArray for older browsers", - "devDependencies": { - "tape": "~2.13.4" - }, - "homepage": "https://github.com/juliangruber/isarray", - "keywords": [ - "browser", - "isarray", - "array" - ], - "license": "MIT", - "main": "index.js", - "name": "isarray", - "repository": { - "type": "git", - "url": "git://github.com/juliangruber/isarray.git" - }, - "scripts": { - "test": "tape test.js" - }, - "testling": { - "files": "test.js", - "browsers": [ - "ie/8..latest", - "firefox/17..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/isarray/test.js b/truebit-implementation/node_modules/isarray/test.js deleted file mode 100644 index e0c3444d..00000000 --- a/truebit-implementation/node_modules/isarray/test.js +++ /dev/null @@ -1,20 +0,0 @@ -var isArray = require('./'); -var test = require('tape'); - -test('is array', function(t){ - t.ok(isArray([])); - t.notOk(isArray({})); - t.notOk(isArray(null)); - t.notOk(isArray(false)); - - var obj = {}; - obj[0] = true; - t.notOk(isArray(obj)); - - var arr = []; - arr.foo = 'bar'; - t.ok(isArray(arr)); - - t.end(); -}); - diff --git a/truebit-implementation/node_modules/isstream/.jshintrc b/truebit-implementation/node_modules/isstream/.jshintrc deleted file mode 100644 index c8ef3ca4..00000000 --- a/truebit-implementation/node_modules/isstream/.jshintrc +++ /dev/null @@ -1,59 +0,0 @@ -{ - "predef": [ ] - , "bitwise": false - , "camelcase": false - , "curly": false - , "eqeqeq": false - , "forin": false - , "immed": false - , "latedef": false - , "noarg": true - , "noempty": true - , "nonew": true - , "plusplus": false - , "quotmark": true - , "regexp": false - , "undef": true - , "unused": true - , "strict": false - , "trailing": true - , "maxlen": 120 - , "asi": true - , "boss": true - , "debug": true - , "eqnull": true - , "esnext": true - , "evil": true - , "expr": true - , "funcscope": false - , "globalstrict": false - , "iterator": false - , "lastsemic": true - , "laxbreak": true - , "laxcomma": true - , "loopfunc": true - , "multistr": false - , "onecase": false - , "proto": false - , "regexdash": false - , "scripturl": true - , "smarttabs": false - , "shadow": false - , "sub": true - , "supernew": false - , "validthis": true - , "browser": true - , "couch": false - , "devel": false - , "dojo": false - , "mootools": false - , "node": true - , "nonstandard": true - , "prototypejs": false - , "rhino": false - , "worker": true - , "wsh": false - , "nomen": false - , "onevar": false - , "passfail": false -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/isstream/.npmignore b/truebit-implementation/node_modules/isstream/.npmignore deleted file mode 100644 index aa1ec1ea..00000000 --- a/truebit-implementation/node_modules/isstream/.npmignore +++ /dev/null @@ -1 +0,0 @@ -*.tgz diff --git a/truebit-implementation/node_modules/isstream/.travis.yml b/truebit-implementation/node_modules/isstream/.travis.yml deleted file mode 100644 index 1fec2ab9..00000000 --- a/truebit-implementation/node_modules/isstream/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.11" -branches: - only: - - master -notifications: - email: - - rod@vagg.org -script: npm test diff --git a/truebit-implementation/node_modules/isstream/LICENSE.md b/truebit-implementation/node_modules/isstream/LICENSE.md deleted file mode 100644 index 43f7153f..00000000 --- a/truebit-implementation/node_modules/isstream/LICENSE.md +++ /dev/null @@ -1,11 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2015 Rod Vagg ---------------------------- - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/isstream/README.md b/truebit-implementation/node_modules/isstream/README.md deleted file mode 100644 index 06770e82..00000000 --- a/truebit-implementation/node_modules/isstream/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# isStream - -[![Build Status](https://secure.travis-ci.org/rvagg/isstream.png)](http://travis-ci.org/rvagg/isstream) - -**Test if an object is a `Stream`** - -[![NPM](https://nodei.co/npm/isstream.svg)](https://nodei.co/npm/isstream/) - -The missing `Stream.isStream(obj)`: determine if an object is standard Node.js `Stream`. Works for Node-core `Stream` objects (for 0.8, 0.10, 0.11, and in theory, older and newer versions) and all versions of **[readable-stream](https://github.com/isaacs/readable-stream)**. - -## Usage: - -```js -var isStream = require('isstream') -var Stream = require('stream') - -isStream(new Stream()) // true - -isStream({}) // false - -isStream(new Stream.Readable()) // true -isStream(new Stream.Writable()) // true -isStream(new Stream.Duplex()) // true -isStream(new Stream.Transform()) // true -isStream(new Stream.PassThrough()) // true -``` - -## But wait! There's more! - -You can also test for `isReadable(obj)`, `isWritable(obj)` and `isDuplex(obj)` to test for implementations of Streams2 (and Streams3) base classes. - -```js -var isReadable = require('isstream').isReadable -var isWritable = require('isstream').isWritable -var isDuplex = require('isstream').isDuplex -var Stream = require('stream') - -isReadable(new Stream()) // false -isWritable(new Stream()) // false -isDuplex(new Stream()) // false - -isReadable(new Stream.Readable()) // true -isReadable(new Stream.Writable()) // false -isReadable(new Stream.Duplex()) // true -isReadable(new Stream.Transform()) // true -isReadable(new Stream.PassThrough()) // true - -isWritable(new Stream.Readable()) // false -isWritable(new Stream.Writable()) // true -isWritable(new Stream.Duplex()) // true -isWritable(new Stream.Transform()) // true -isWritable(new Stream.PassThrough()) // true - -isDuplex(new Stream.Readable()) // false -isDuplex(new Stream.Writable()) // false -isDuplex(new Stream.Duplex()) // true -isDuplex(new Stream.Transform()) // true -isDuplex(new Stream.PassThrough()) // true -``` - -*Reminder: when implementing your own streams, please [use **readable-stream** rather than core streams](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html).* - - -## License - -**isStream** is Copyright (c) 2015 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/truebit-implementation/node_modules/isstream/isstream.js b/truebit-implementation/node_modules/isstream/isstream.js deleted file mode 100644 index a1d104a7..00000000 --- a/truebit-implementation/node_modules/isstream/isstream.js +++ /dev/null @@ -1,27 +0,0 @@ -var stream = require('stream') - - -function isStream (obj) { - return obj instanceof stream.Stream -} - - -function isReadable (obj) { - return isStream(obj) && typeof obj._read == 'function' && typeof obj._readableState == 'object' -} - - -function isWritable (obj) { - return isStream(obj) && typeof obj._write == 'function' && typeof obj._writableState == 'object' -} - - -function isDuplex (obj) { - return isReadable(obj) && isWritable(obj) -} - - -module.exports = isStream -module.exports.isReadable = isReadable -module.exports.isWritable = isWritable -module.exports.isDuplex = isDuplex diff --git a/truebit-implementation/node_modules/isstream/package.json b/truebit-implementation/node_modules/isstream/package.json deleted file mode 100644 index 8dd6192c..00000000 --- a/truebit-implementation/node_modules/isstream/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "isstream@~0.1.2", - "_id": "isstream@0.1.2", - "_inBundle": false, - "_integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "_location": "/isstream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "isstream@~0.1.2", - "name": "isstream", - "escapedName": "isstream", - "rawSpec": "~0.1.2", - "saveSpec": null, - "fetchSpec": "~0.1.2" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "_shasum": "47e63f7af55afa6f92e1500e690eb8b8529c099a", - "_spec": "isstream@~0.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Rod Vagg", - "email": "rod@vagg.org" - }, - "bugs": { - "url": "https://github.com/rvagg/isstream/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Determine if an object is a Stream", - "devDependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x", - "tape": "~2.12.3" - }, - "homepage": "https://github.com/rvagg/isstream", - "keywords": [ - "stream", - "type", - "streams", - "readable-stream", - "hippo" - ], - "license": "MIT", - "main": "isstream.js", - "name": "isstream", - "repository": { - "type": "git", - "url": "git+https://github.com/rvagg/isstream.git" - }, - "scripts": { - "test": "tar --xform 's/^package/readable-stream-1.0/' -zxf readable-stream-1.0.*.tgz && tar --xform 's/^package/readable-stream-1.1/' -zxf readable-stream-1.1.*.tgz && node test.js; rm -rf readable-stream-1.?/" - }, - "version": "0.1.2" -} diff --git a/truebit-implementation/node_modules/isstream/test.js b/truebit-implementation/node_modules/isstream/test.js deleted file mode 100644 index 8c950c55..00000000 --- a/truebit-implementation/node_modules/isstream/test.js +++ /dev/null @@ -1,168 +0,0 @@ -var tape = require('tape') - , EE = require('events').EventEmitter - , util = require('util') - - - , isStream = require('./') - , isReadable = require('./').isReadable - , isWritable = require('./').isWritable - , isDuplex = require('./').isDuplex - - , CoreStreams = require('stream') - , ReadableStream10 = require('./readable-stream-1.0/') - , ReadableStream11 = require('./readable-stream-1.1/') - - -function test (pass, type, stream) { - tape('isStream(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isStream(stream), type) - }) -} - - -function testReadable (pass, type, stream) { - tape('isReadable(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isReadable(stream), type) - }) -} - - -function testWritable (pass, type, stream) { - tape('isWritable(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isWritable(stream), type) - }) -} - - -function testDuplex (pass, type, stream) { - tape('isDuplex(' + type + ')', function (t) { - t.plan(1) - t.ok(pass === isDuplex(stream), type) - }) -} - - -[ undefined, null, '', true, false, 0, 1, 1.0, 'string', {}, function foo () {} ].forEach(function (o) { - test(false, 'non-stream / primitive: ' + (JSON.stringify(o) || (o && o.toString()) || o), o) -}) - - -test(false, 'fake stream obj', { pipe: function () {} }) - - -;(function () { - - // looks like a stream! - - function Stream () { - EE.call(this) - } - util.inherits(Stream, EE) - Stream.prototype.pipe = function () {} - Stream.Stream = Stream - - test(false, 'fake stream "new Stream()"', new Stream()) - -}()) - - -test(true, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -test(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -test(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -test(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -test(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -test(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -test(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -test(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -test(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -test(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -test(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -test(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -test(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -test(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -test(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -test(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -testReadable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -testReadable(true, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -testReadable(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -testReadable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -testReadable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -testReadable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -testReadable(true, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -testReadable(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -testReadable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -testReadable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -testReadable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -testReadable(true, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -testReadable(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -testReadable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -testReadable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -testReadable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -testWritable(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -testWritable(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -testWritable(true, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -testWritable(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -testWritable(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -testWritable(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -testWritable(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -testWritable(true, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -testWritable(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -testWritable(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -testWritable(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -testWritable(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -testWritable(true, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -testWritable(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -testWritable(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -testWritable(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -testDuplex(false, 'CoreStreams.Stream', new (CoreStreams.Stream)()) -testDuplex(false, 'CoreStreams.Readable', new (CoreStreams.Readable)()) -testDuplex(false, 'CoreStreams.Writable', new (CoreStreams.Writable)()) -testDuplex(true, 'CoreStreams.Duplex', new (CoreStreams.Duplex)()) -testDuplex(true, 'CoreStreams.Transform', new (CoreStreams.Transform)()) -testDuplex(true, 'CoreStreams.PassThrough', new (CoreStreams.PassThrough)()) - -testDuplex(false, 'ReadableStream10.Readable', new (ReadableStream10.Readable)()) -testDuplex(false, 'ReadableStream10.Writable', new (ReadableStream10.Writable)()) -testDuplex(true, 'ReadableStream10.Duplex', new (ReadableStream10.Duplex)()) -testDuplex(true, 'ReadableStream10.Transform', new (ReadableStream10.Transform)()) -testDuplex(true, 'ReadableStream10.PassThrough', new (ReadableStream10.PassThrough)()) - -testDuplex(false, 'ReadableStream11.Readable', new (ReadableStream11.Readable)()) -testDuplex(false, 'ReadableStream11.Writable', new (ReadableStream11.Writable)()) -testDuplex(true, 'ReadableStream11.Duplex', new (ReadableStream11.Duplex)()) -testDuplex(true, 'ReadableStream11.Transform', new (ReadableStream11.Transform)()) -testDuplex(true, 'ReadableStream11.PassThrough', new (ReadableStream11.PassThrough)()) - - -;[ CoreStreams, ReadableStream10, ReadableStream11 ].forEach(function (p) { - [ 'Stream', 'Readable', 'Writable', 'Duplex', 'Transform', 'PassThrough' ].forEach(function (k) { - if (!p[k]) - return - - function SubStream () { - p[k].call(this) - } - util.inherits(SubStream, p[k]) - - test(true, 'Stream subclass: ' + p.name + '.' + k, new SubStream()) - - }) -}) - - - diff --git a/truebit-implementation/node_modules/isurl/LICENSE b/truebit-implementation/node_modules/isurl/LICENSE deleted file mode 100644 index 274147ae..00000000 --- a/truebit-implementation/node_modules/isurl/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Steven Vachon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/isurl/README.md b/truebit-implementation/node_modules/isurl/README.md deleted file mode 100644 index 6903ac70..00000000 --- a/truebit-implementation/node_modules/isurl/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# isurl [![NPM Version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] - -> Checks whether a value is a WHATWG [`URL`](https://developer.mozilla.org/en/docs/Web/API/URL). - - -Works cross-realm/iframe and despite @@toStringTag. - - -## Installation - -[Node.js](http://nodejs.org/) `>= 4` is required. To install, type this at the command line: -```shell -npm install isurl -``` - - -## Usage - -```js -const isURL = require('isurl'); - -isURL('http://domain/'); //-> false -isURL(new URL('http://domain/')); //-> true -``` - -Optionally, acceptance can be extended to incomplete `URL` implementations that lack `searchParams` (which are common in many modern web browsers): -```js -const url = new URL('http://domain/?query'); - -console.log(url.searchParams); //-> undefined - -isURL.lenient(url); //-> true -``` - - -[npm-image]: https://img.shields.io/npm/v/isurl.svg -[npm-url]: https://npmjs.org/package/isurl -[travis-image]: https://img.shields.io/travis/stevenvachon/isurl.svg -[travis-url]: https://travis-ci.org/stevenvachon/isurl diff --git a/truebit-implementation/node_modules/isurl/index.js b/truebit-implementation/node_modules/isurl/index.js deleted file mode 100644 index 70ed1d7a..00000000 --- a/truebit-implementation/node_modules/isurl/index.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; -const hasToStringTag = require("has-to-string-tag-x"); -const isObject = require("is-object"); - -const toString = Object.prototype.toString; -const urlClass = "[object URL]"; - -const hash = "hash"; -const host = "host"; -const hostname = "hostname"; -const href = "href"; -const password = "password"; -const pathname = "pathname"; -const port = "port"; -const protocol = "protocol"; -const search = "search"; -const username = "username"; - - - -const isURL = (url, supportIncomplete/*=false*/) => -{ - if (!isObject(url)) return false; - - // Native implementation in older browsers - if (!hasToStringTag && toString.call(url) === urlClass) return true; - - if (!(href in url)) return false; - if (!(protocol in url)) return false; - if (!(username in url)) return false; - if (!(password in url)) return false; - if (!(hostname in url)) return false; - if (!(port in url)) return false; - if (!(host in url)) return false; - if (!(pathname in url)) return false; - if (!(search in url)) return false; - if (!(hash in url)) return false; - - if (supportIncomplete !== true) - { - if (!isObject(url.searchParams)) return false; - - // TODO :: write a separate isURLSearchParams ? - } - - return true; -} - - - -isURL.lenient = url => -{ - return isURL(url, true); -}; - - - -module.exports = isURL; diff --git a/truebit-implementation/node_modules/isurl/package.json b/truebit-implementation/node_modules/isurl/package.json deleted file mode 100644 index df28c418..00000000 --- a/truebit-implementation/node_modules/isurl/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "isurl@^1.0.0-alpha5", - "_id": "isurl@1.0.0", - "_inBundle": false, - "_integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "_location": "/isurl", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "isurl@^1.0.0-alpha5", - "name": "isurl", - "escapedName": "isurl", - "rawSpec": "^1.0.0-alpha5", - "saveSpec": null, - "fetchSpec": "^1.0.0-alpha5" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "_shasum": "b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67", - "_spec": "isurl@^1.0.0-alpha5", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Steven Vachon", - "email": "contact@svachon.com", - "url": "https://www.svachon.com/" - }, - "bugs": { - "url": "https://github.com/stevenvachon/isurl/issues" - }, - "bundleDependencies": false, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "deprecated": false, - "description": "Checks whether a value is a WHATWG URL.", - "devDependencies": { - "chai": "^4.0.2", - "mocha": "^3.4.2", - "semver": "^5.3.0", - "universal-url": "^1.0.0" - }, - "engines": { - "node": ">= 4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/stevenvachon/isurl#readme", - "keywords": [ - "uri", - "url", - "whatwg" - ], - "license": "MIT", - "name": "isurl", - "repository": { - "type": "git", - "url": "git+https://github.com/stevenvachon/isurl.git" - }, - "scripts": { - "test": "mocha test --check-leaks --bail" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/js-sha3/.covignore b/truebit-implementation/node_modules/js-sha3/.covignore deleted file mode 100644 index 8c36f6f5..00000000 --- a/truebit-implementation/node_modules/js-sha3/.covignore +++ /dev/null @@ -1,2 +0,0 @@ -/tests/ -node_modules/ diff --git a/truebit-implementation/node_modules/js-sha3/.npmignore b/truebit-implementation/node_modules/js-sha3/.npmignore deleted file mode 100644 index d69ed3a8..00000000 --- a/truebit-implementation/node_modules/js-sha3/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -my_test -covreporter -build -tests diff --git a/truebit-implementation/node_modules/js-sha3/.travis.yml b/truebit-implementation/node_modules/js-sha3/.travis.yml deleted file mode 100644 index aabe6140..00000000 --- a/truebit-implementation/node_modules/js-sha3/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: node_js -node_js: - - "0.11" - - "0.10" - - "0.8" -before_install: - - npm install mocha -g - - npm install coveralls -g - - npm install mocha-lcov-reporter -g -script: npm run-script coveralls -branches: - only: - - master diff --git a/truebit-implementation/node_modules/js-sha3/CHANGELOG.md b/truebit-implementation/node_modules/js-sha3/CHANGELOG.md deleted file mode 100644 index 79218923..00000000 --- a/truebit-implementation/node_modules/js-sha3/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -# v0.3.1 / 2015-05-22 - -* Fixed bugs. - -# v0.3.0 / 2015-05-21 - -* Support byte array and ArrayBuffer input. - -# v0.2.0 / 2015-04-04 - -* Implement NIST's May 2014 SHA-3 version. -* Rename original methods to keccak. - -# v0.1.2 / 2015-02-27 - -* Improve performance. - -# v0.1.1 / 2015-02-26 - -* Improve performance. - -# v0.1.0 / 2015-02-23 - -* Initial release diff --git a/truebit-implementation/node_modules/js-sha3/LICENSE.txt b/truebit-implementation/node_modules/js-sha3/LICENSE.txt deleted file mode 100644 index aeb45cf6..00000000 --- a/truebit-implementation/node_modules/js-sha3/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2015 Chen Yi-Cyuan - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/js-sha3/README.md b/truebit-implementation/node_modules/js-sha3/README.md deleted file mode 100644 index 7f68c08c..00000000 --- a/truebit-implementation/node_modules/js-sha3/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# js-sha3 -[![Build Status](https://travis-ci.org/emn178/js-sha3.svg?branch=master)](https://travis-ci.org/emn178/js-sha3) -[![Coverage Status](https://coveralls.io/repos/emn178/js-sha3/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-sha3?branch=master) -[![NPM](https://nodei.co/npm/js-sha3.png?stars&downloads)](https://nodei.co/npm/js-sha3/) -A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding. - -## Notice -Sha3 methods has been renamed to keccak since v0.2.0. It means that sha3 methods of v0.1.x are equal to keccak methods of v0.2.x and later. - -## Demo -[SHA3-512 Online](http://emn178.github.io/online-tools/sha3_512.html) -[SHA3-384 Online](http://emn178.github.io/online-tools/sha3_384.html) -[SHA3-256 Online](http://emn178.github.io/online-tools/sha3_256.html) -[SHA3-224 Online](http://emn178.github.io/online-tools/sha3_224.html) -[Keccak-512 Online](http://emn178.github.io/online-tools/keccak_512.html) -[Keccak-384 Online](http://emn178.github.io/online-tools/keccak_384.html) -[Keccak-256 Online](http://emn178.github.io/online-tools/keccak_256.html) -[Keccak-224 Online](http://emn178.github.io/online-tools/keccak_224.html) - -## Download -[Compress](https://raw.github.com/emn178/js-sha3/master/build/sha3.min.js) -[Uncompress](https://raw.github.com/emn178/js-sha3/master/src/sha3.js) - -## Installation -You can also install js-sha3 by using Bower. - - bower install js-sha3 - -For node.js, you can use this command to install: - - npm install js-sha3 - -## Usage -You could use like this: -```JavaScript -sha3_512('Message to hash'); -sha3_384('Message to hash'); -sha3_256('Message to hash'); -sha3_224('Message to hash'); -keccak_512('Message to hash'); -keccak_384('Message to hash'); -keccak_256('Message to hash'); -keccak_224('Message to hash'); -``` -If you use node.js, you should require the module first: -```JavaScript -sha3_512 = require('js-sha3').sha3_512; -sha3_384 = require('js-sha3').sha3_384; -sha3_256 = require('js-sha3').sha3_256; -sha3_224 = require('js-sha3').sha3_224; -keccak_512 = require('js-sha3').keccak_512; -keccak_384 = require('js-sha3').keccak_384; -keccak_256 = require('js-sha3').keccak_256; -keccak_224 = require('js-sha3').keccak_224; -``` - -## Example -Code -```JavaScript -sha3_512(''); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -sha3_512('The quick brown fox jumps over the lazy dog'); -// 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 - -sha3_512('The quick brown fox jumps over the lazy dog.'); -// 18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8 - -sha3_384(''); -// 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 - -sha3_384('The quick brown fox jumps over the lazy dog'); -// 7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41 - -sha3_384('The quick brown fox jumps over the lazy dog.'); -// 1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9 - -sha3_256(''); -// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a - -sha3_256('The quick brown fox jumps over the lazy dog'); -// 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 - -sha3_256('The quick brown fox jumps over the lazy dog.'); -// a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d - -sha3_224(''); -// 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 - -sha3_224('The quick brown fox jumps over the lazy dog'); -// d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795 - -sha3_224('The quick brown fox jumps over the lazy dog.'); -// 2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0 - -keccak_512(''); -// 0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e - -keccak_512('The quick brown fox jumps over the lazy dog'); -// d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609 - -keccak_512('The quick brown fox jumps over the lazy dog.'); -// ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760 - -keccak_384(''); -// 2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff - -keccak_384('The quick brown fox jumps over the lazy dog'); -// 283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3 - -keccak_384('The quick brown fox jumps over the lazy dog.'); -// 9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b - -keccak_256(''); -// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 - -keccak_256('The quick brown fox jumps over the lazy dog'); -// 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 - -keccak_256('The quick brown fox jumps over the lazy dog.'); -// 578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d - -keccak_224(''); -// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd - -keccak_224('The quick brown fox jumps over the lazy dog'); -// 310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe - -keccak_224('The quick brown fox jumps over the lazy dog.'); -// c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab -``` -It also supports UTF-8 encoding: - -Code -```JavaScript -sha3_512('中文'); -// 059bbe2efc50cc30e4d8ec5a96be697e2108fcbf9193e1296192eddabc13b143c0120d059399a13d0d42651efe23a6c1ce2d1efb576c5b207fa2516050505af7 - -sha3_384('中文'); -// 9fb5b99e3c546f2738dcd50a14e9aef9c313800c1bf8cf76bc9b2c3a23307841364c5a2d0794702662c5796fb72f5432 - -sha3_256('中文'); -// ac5305da3d18be1aed44aa7c70ea548da243a59a5fd546f489348fd5718fb1a0 - -sha3_224('中文'); -// 106d169e10b61c2a2a05554d3e631ec94467f8316640f29545d163ee - -keccak_512('中文'); -// 2f6a1bd50562230229af34b0ccf46b8754b89d23ae2c5bf7840b4acfcef86f87395edc0a00b2bfef53bafebe3b79de2e3e01cbd8169ddbb08bde888dcc893524 - -keccak_384('中文'); -// 743f64bb7544c6ed923be4741b738dde18b7cee384a3a09c4e01acaaac9f19222cdee137702bd3aa05dc198373d87d6c - -keccak_256('中文'); -// 70a2b6579047f0a977fcb5e9120a4e07067bea9abb6916fbc2d13ffb9a4e4eee - -keccak_224('中文'); -// f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd -``` - -It also supports byte `Array`, `Uint8Array`, `ArrayBuffer` input: - -Code -```JavaScript -sha3_512([]); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -sha3_512(new Uint8Array([])); -// a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 - -// ... -``` - -## Benchmark -[UTF8](http://jsperf.com/sha3/5) -[ASCII](http://jsperf.com/sha3/4) - -## Extensions -### jQuery -If you prefer jQuery style, you can add following code to add a jQuery extension. - -Code -```JavaScript -jQuery.sha3_512 = sha3_512; -jQuery.sha3_384 = sha3_384; -jQuery.sha3_256 = sha3_256; -jQuery.sha3_224 = sha3_224; -jQuery.keccak_512 = keccak_512; -jQuery.keccak_384 = keccak_384; -jQuery.keccak_256 = keccak_256; -jQuery.keccak_224 = keccak_224; -``` -And then you could use like this: -```JavaScript -$.sha3_512('message'); -$.sha3_384('message'); -$.sha3_256('message'); -$.sha3_224('message'); -$.keccak_512('message'); -$.keccak_384('message'); -$.keccak_256('message'); -$.keccak_224('message'); -``` -### Prototype -If you prefer prototype style, you can add following code to add a prototype extension. - -Code -```JavaScript -String.prototype.sha3_512 = function() { - return sha3_512(this); -}; -String.prototype.sha3_384 = function() { - return sha3_384(this); -}; -String.prototype.sha3_256 = function() { - return sha3_256(this); -}; -String.prototype.sha3_224 = function() { - return sha3_224(this); -}; -String.prototype.keccak_512 = function() { - return keccak_512(this); -}; -String.prototype.keccak_384 = function() { - return keccak_384(this); -}; -String.prototype.keccak_256 = function() { - return keccak_256(this); -}; -String.prototype.keccak_224 = function() { - return keccak_224(this); -}; -``` -And then you could use like this: -```JavaScript -'message'.sha3_512(); -'message'.sha3_384(); -'message'.sha3_256(); -'message'.sha3_224(); -'message'.keccak_512(); -'message'.keccak_384(); -'message'.keccak_256(); -'message'.keccak_224(); -``` -## License -The project is released under the [MIT license](http://www.opensource.org/licenses/MIT). - -## Contact -The project's website is located at https://github.com/emn178/js-sha3 -Author: emn178@gmail.com diff --git a/truebit-implementation/node_modules/js-sha3/bower.json b/truebit-implementation/node_modules/js-sha3/bower.json deleted file mode 100644 index 4c1ced94..00000000 --- a/truebit-implementation/node_modules/js-sha3/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "js-sha3", - "version": "0.3.1", - "main": ["src/sha3.js"], - "ignore": [ - "samples", - "tests" - ] -} diff --git a/truebit-implementation/node_modules/js-sha3/package.json b/truebit-implementation/node_modules/js-sha3/package.json deleted file mode 100644 index a55fc2f1..00000000 --- a/truebit-implementation/node_modules/js-sha3/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_from": "js-sha3@^0.3.1", - "_id": "js-sha3@0.3.1", - "_inBundle": false, - "_integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=", - "_location": "/js-sha3", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "js-sha3@^0.3.1", - "name": "js-sha3", - "escapedName": "js-sha3", - "rawSpec": "^0.3.1", - "saveSpec": null, - "fetchSpec": "^0.3.1" - }, - "_requiredBy": [ - "/browserify-sha3" - ], - "_resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", - "_shasum": "86122802142f0828502a0d1dee1d95e253bb0243", - "_spec": "js-sha3@^0.3.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/browserify-sha3", - "author": { - "name": "emn178", - "email": "emn178@gmail.com" - }, - "bugs": { - "url": "https://github.com/emn178/js-sha3/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A simple SHA-3 / Keccak hash function for JavaScript supports UTF-8 encoding.", - "devDependencies": { - "expect.js": "~0.3.1", - "jscoverage": "~0.5.9" - }, - "homepage": "https://github.com/emn178/js-sha3", - "keywords": [ - "sha3", - "keccak", - "hash", - "encryption", - "cryptography", - "HMAC" - ], - "license": "MIT", - "main": "src/sha3.js", - "name": "js-sha3", - "repository": { - "type": "git", - "url": "git+https://github.com/emn178/js-sha3.git" - }, - "scripts": { - "coveralls": "mocha tests/node-test.js -R mocha-lcov-reporter -r jscoverage | coveralls", - "test": "mocha tests/node-test.js -r jscoverage" - }, - "version": "0.3.1" -} diff --git a/truebit-implementation/node_modules/js-sha3/src/sha3.js b/truebit-implementation/node_modules/js-sha3/src/sha3.js deleted file mode 100644 index 78238bc7..00000000 --- a/truebit-implementation/node_modules/js-sha3/src/sha3.js +++ /dev/null @@ -1,432 +0,0 @@ -/* - * js-sha3 v0.3.1 - * https://github.com/emn178/js-sha3 - * - * Copyright 2015, emn178@gmail.com - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - */ -;(function(root, undefined) { - 'use strict'; - - var NODE_JS = typeof(module) != 'undefined'; - if(NODE_JS) { - root = global; - if(root.JS_SHA3_TEST) { - root.navigator = { userAgent: 'Chrome'}; - } - } - var CHROME = (root.JS_SHA3_TEST || !NODE_JS) && navigator.userAgent.indexOf('Chrome') != -1; - var HEX_CHARS = '0123456789abcdef'.split(''); - var KECCAK_PADDING = [1, 256, 65536, 16777216]; - var PADDING = [6, 1536, 393216, 100663296]; - var SHIFT = [0, 8, 16, 24]; - var RC = [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]; - - var blocks = [], s = []; - - var keccak_224 = function(message) { - return keccak(message, 224, KECCAK_PADDING); - }; - - var keccak_256 = function(message) { - return keccak(message, 256, KECCAK_PADDING); - }; - - var keccak_384 = function(message) { - return keccak(message, 384, KECCAK_PADDING); - }; - - var sha3_224 = function(message) { - return keccak(message, 224, PADDING); - }; - - var sha3_256 = function(message) { - return keccak(message, 256, PADDING); - }; - - var sha3_384 = function(message) { - return keccak(message, 384, PADDING); - }; - - var sha3_512 = function(message) { - return keccak(message, 512, PADDING); - }; - - var keccak = function(message, bits, padding) { - var notString = typeof(message) != 'string'; - if(notString && message.constructor == root.ArrayBuffer) { - message = new Uint8Array(message); - } - - if(bits === undefined) { - bits = 512; - padding = KECCAK_PADDING; - } - - var block, code, end = false, index = 0, start = 0, length = message.length, - n, i, h, l, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - var blockCount = (1600 - bits * 2) / 32; - var byteCount = blockCount * 4; - - for(i = 0;i < 50;++i) { - s[i] = 0; - } - - block = 0; - do { - blocks[0] = block; - for(i = 1;i < blockCount + 1;++i) { - blocks[i] = 0; - } - if(notString) { - for (i = start;index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = start;index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - start = i - byteCount; - if(index == length) { - blocks[i >> 2] |= padding[i & 3]; - ++index; - } - block = blocks[blockCount]; - if(index > length && i < byteCount) { - blocks[blockCount - 1] |= 0x80000000; - end = true; - } - - for(i = 0;i < blockCount;++i) { - s[i] ^= blocks[i]; - } - - for(n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } - } while(!end); - - var hex = ''; - if(CHROME) { - b0 = s[0]; - b1 = s[1]; - b2 = s[2]; - b3 = s[3]; - b4 = s[4]; - b5 = s[5]; - b6 = s[6]; - b7 = s[7]; - b8 = s[8]; - b9 = s[9]; - b10 = s[10]; - b11 = s[11]; - b12 = s[12]; - b13 = s[13]; - b14 = s[14]; - b15 = s[15]; - hex += HEX_CHARS[(b0 >> 4) & 0x0F] + HEX_CHARS[b0 & 0x0F] + - HEX_CHARS[(b0 >> 12) & 0x0F] + HEX_CHARS[(b0 >> 8) & 0x0F] + - HEX_CHARS[(b0 >> 20) & 0x0F] + HEX_CHARS[(b0 >> 16) & 0x0F] + - HEX_CHARS[(b0 >> 28) & 0x0F] + HEX_CHARS[(b0 >> 24) & 0x0F] + - HEX_CHARS[(b1 >> 4) & 0x0F] + HEX_CHARS[b1 & 0x0F] + - HEX_CHARS[(b1 >> 12) & 0x0F] + HEX_CHARS[(b1 >> 8) & 0x0F] + - HEX_CHARS[(b1 >> 20) & 0x0F] + HEX_CHARS[(b1 >> 16) & 0x0F] + - HEX_CHARS[(b1 >> 28) & 0x0F] + HEX_CHARS[(b1 >> 24) & 0x0F] + - HEX_CHARS[(b2 >> 4) & 0x0F] + HEX_CHARS[b2 & 0x0F] + - HEX_CHARS[(b2 >> 12) & 0x0F] + HEX_CHARS[(b2 >> 8) & 0x0F] + - HEX_CHARS[(b2 >> 20) & 0x0F] + HEX_CHARS[(b2 >> 16) & 0x0F] + - HEX_CHARS[(b2 >> 28) & 0x0F] + HEX_CHARS[(b2 >> 24) & 0x0F] + - HEX_CHARS[(b3 >> 4) & 0x0F] + HEX_CHARS[b3 & 0x0F] + - HEX_CHARS[(b3 >> 12) & 0x0F] + HEX_CHARS[(b3 >> 8) & 0x0F] + - HEX_CHARS[(b3 >> 20) & 0x0F] + HEX_CHARS[(b3 >> 16) & 0x0F] + - HEX_CHARS[(b3 >> 28) & 0x0F] + HEX_CHARS[(b3 >> 24) & 0x0F] + - HEX_CHARS[(b4 >> 4) & 0x0F] + HEX_CHARS[b4 & 0x0F] + - HEX_CHARS[(b4 >> 12) & 0x0F] + HEX_CHARS[(b4 >> 8) & 0x0F] + - HEX_CHARS[(b4 >> 20) & 0x0F] + HEX_CHARS[(b4 >> 16) & 0x0F] + - HEX_CHARS[(b4 >> 28) & 0x0F] + HEX_CHARS[(b4 >> 24) & 0x0F] + - HEX_CHARS[(b5 >> 4) & 0x0F] + HEX_CHARS[b5 & 0x0F] + - HEX_CHARS[(b5 >> 12) & 0x0F] + HEX_CHARS[(b5 >> 8) & 0x0F] + - HEX_CHARS[(b5 >> 20) & 0x0F] + HEX_CHARS[(b5 >> 16) & 0x0F] + - HEX_CHARS[(b5 >> 28) & 0x0F] + HEX_CHARS[(b5 >> 24) & 0x0F] + - HEX_CHARS[(b6 >> 4) & 0x0F] + HEX_CHARS[b6 & 0x0F] + - HEX_CHARS[(b6 >> 12) & 0x0F] + HEX_CHARS[(b6 >> 8) & 0x0F] + - HEX_CHARS[(b6 >> 20) & 0x0F] + HEX_CHARS[(b6 >> 16) & 0x0F] + - HEX_CHARS[(b6 >> 28) & 0x0F] + HEX_CHARS[(b6 >> 24) & 0x0F]; - - if(bits >= 256) { - hex += HEX_CHARS[(b7 >> 4) & 0x0F] + HEX_CHARS[b7 & 0x0F] + - HEX_CHARS[(b7 >> 12) & 0x0F] + HEX_CHARS[(b7 >> 8) & 0x0F] + - HEX_CHARS[(b7 >> 20) & 0x0F] + HEX_CHARS[(b7 >> 16) & 0x0F] + - HEX_CHARS[(b7 >> 28) & 0x0F] + HEX_CHARS[(b7 >> 24) & 0x0F]; - } - if(bits >= 384) { - hex += HEX_CHARS[(b8 >> 4) & 0x0F] + HEX_CHARS[b8 & 0x0F] + - HEX_CHARS[(b8 >> 12) & 0x0F] + HEX_CHARS[(b8 >> 8) & 0x0F] + - HEX_CHARS[(b8 >> 20) & 0x0F] + HEX_CHARS[(b8 >> 16) & 0x0F] + - HEX_CHARS[(b8 >> 28) & 0x0F] + HEX_CHARS[(b8 >> 24) & 0x0F] + - HEX_CHARS[(b9 >> 4) & 0x0F] + HEX_CHARS[b9 & 0x0F] + - HEX_CHARS[(b9 >> 12) & 0x0F] + HEX_CHARS[(b9 >> 8) & 0x0F] + - HEX_CHARS[(b9 >> 20) & 0x0F] + HEX_CHARS[(b9 >> 16) & 0x0F] + - HEX_CHARS[(b9 >> 28) & 0x0F] + HEX_CHARS[(b9 >> 24) & 0x0F] + - HEX_CHARS[(b10 >> 4) & 0x0F] + HEX_CHARS[b10 & 0x0F] + - HEX_CHARS[(b10 >> 12) & 0x0F] + HEX_CHARS[(b10 >> 8) & 0x0F] + - HEX_CHARS[(b10 >> 20) & 0x0F] + HEX_CHARS[(b10 >> 16) & 0x0F] + - HEX_CHARS[(b10 >> 28) & 0x0F] + HEX_CHARS[(b10 >> 24) & 0x0F] + - HEX_CHARS[(b11 >> 4) & 0x0F] + HEX_CHARS[b11 & 0x0F] + - HEX_CHARS[(b11 >> 12) & 0x0F] + HEX_CHARS[(b11 >> 8) & 0x0F] + - HEX_CHARS[(b11 >> 20) & 0x0F] + HEX_CHARS[(b11 >> 16) & 0x0F] + - HEX_CHARS[(b11 >> 28) & 0x0F] + HEX_CHARS[(b11 >> 24) & 0x0F]; - } - if(bits == 512) { - hex += HEX_CHARS[(b12 >> 4) & 0x0F] + HEX_CHARS[b12 & 0x0F] + - HEX_CHARS[(b12 >> 12) & 0x0F] + HEX_CHARS[(b12 >> 8) & 0x0F] + - HEX_CHARS[(b12 >> 20) & 0x0F] + HEX_CHARS[(b12 >> 16) & 0x0F] + - HEX_CHARS[(b12 >> 28) & 0x0F] + HEX_CHARS[(b12 >> 24) & 0x0F] + - HEX_CHARS[(b13 >> 4) & 0x0F] + HEX_CHARS[b13 & 0x0F] + - HEX_CHARS[(b13 >> 12) & 0x0F] + HEX_CHARS[(b13 >> 8) & 0x0F] + - HEX_CHARS[(b13 >> 20) & 0x0F] + HEX_CHARS[(b13 >> 16) & 0x0F] + - HEX_CHARS[(b13 >> 28) & 0x0F] + HEX_CHARS[(b13 >> 24) & 0x0F] + - HEX_CHARS[(b14 >> 4) & 0x0F] + HEX_CHARS[b14 & 0x0F] + - HEX_CHARS[(b14 >> 12) & 0x0F] + HEX_CHARS[(b14 >> 8) & 0x0F] + - HEX_CHARS[(b14 >> 20) & 0x0F] + HEX_CHARS[(b14 >> 16) & 0x0F] + - HEX_CHARS[(b14 >> 28) & 0x0F] + HEX_CHARS[(b14 >> 24) & 0x0F] + - HEX_CHARS[(b15 >> 4) & 0x0F] + HEX_CHARS[b15 & 0x0F] + - HEX_CHARS[(b15 >> 12) & 0x0F] + HEX_CHARS[(b15 >> 8) & 0x0F] + - HEX_CHARS[(b15 >> 20) & 0x0F] + HEX_CHARS[(b15 >> 16) & 0x0F] + - HEX_CHARS[(b15 >> 28) & 0x0F] + HEX_CHARS[(b15 >> 24) & 0x0F]; - } - } else { - for(i = 0, n = bits / 32;i < n;++i) { - h = s[i]; - hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F] + - HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F] + - HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F] + - HEX_CHARS[(h >> 28) & 0x0F] + HEX_CHARS[(h >> 24) & 0x0F]; - } - } - return hex; - }; - - if(!root.JS_SHA3_TEST && NODE_JS) { - module.exports = { - sha3_512: sha3_512, - sha3_384: sha3_384, - sha3_256: sha3_256, - sha3_224: sha3_224, - keccak_512: keccak, - keccak_384: keccak_384, - keccak_256: keccak_256, - keccak_224: keccak_224 - }; - } else if(root) { - root.sha3_512 = sha3_512; - root.sha3_384 = sha3_384; - root.sha3_256 = sha3_256; - root.sha3_224 = sha3_224; - root.keccak_512 = keccak; - root.keccak_384 = keccak_384; - root.keccak_256 = keccak_256; - root.keccak_224 = keccak_224; - } -}(this)); diff --git a/truebit-implementation/node_modules/jsbn/.npmignore b/truebit-implementation/node_modules/jsbn/.npmignore deleted file mode 100644 index 28f1ba75..00000000 --- a/truebit-implementation/node_modules/jsbn/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store \ No newline at end of file diff --git a/truebit-implementation/node_modules/jsbn/LICENSE b/truebit-implementation/node_modules/jsbn/LICENSE deleted file mode 100644 index 2a6457e9..00000000 --- a/truebit-implementation/node_modules/jsbn/LICENSE +++ /dev/null @@ -1,40 +0,0 @@ -Licensing ---------- - -This software is covered under the following copyright: - -/* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - -Address all questions regarding this license to: - - Tom Wu - tjw@cs.Stanford.EDU \ No newline at end of file diff --git a/truebit-implementation/node_modules/jsbn/README.md b/truebit-implementation/node_modules/jsbn/README.md deleted file mode 100644 index 7aac67f5..00000000 --- a/truebit-implementation/node_modules/jsbn/README.md +++ /dev/null @@ -1,175 +0,0 @@ -# jsbn: javascript big number - -[Tom Wu's Original Website](http://www-cs-students.stanford.edu/~tjw/jsbn/) - -I felt compelled to put this on github and publish to npm. I haven't tested every other big integer library out there, but the few that I have tested in comparison to this one have not even come close in performance. I am aware of the `bi` module on npm, however it has been modified and I wanted to publish the original without modifications. This is jsbn and jsbn2 from Tom Wu's original website above, with the modular pattern applied to prevent global leaks and to allow for use with node.js on the server side. - -## usage - - var BigInteger = require('jsbn'); - - var a = new BigInteger('91823918239182398123'); - alert(a.bitLength()); // 67 - - -## API - -### bi.toString() - -returns the base-10 number as a string - -### bi.negate() - -returns a new BigInteger equal to the negation of `bi` - -### bi.abs - -returns new BI of absolute value - -### bi.compareTo - - - -### bi.bitLength - - - -### bi.mod - - - -### bi.modPowInt - - - -### bi.clone - - - -### bi.intValue - - - -### bi.byteValue - - - -### bi.shortValue - - - -### bi.signum - - - -### bi.toByteArray - - - -### bi.equals - - - -### bi.min - - - -### bi.max - - - -### bi.and - - - -### bi.or - - - -### bi.xor - - - -### bi.andNot - - - -### bi.not - - - -### bi.shiftLeft - - - -### bi.shiftRight - - - -### bi.getLowestSetBit - - - -### bi.bitCount - - - -### bi.testBit - - - -### bi.setBit - - - -### bi.clearBit - - - -### bi.flipBit - - - -### bi.add - - - -### bi.subtract - - - -### bi.multiply - - - -### bi.divide - - - -### bi.remainder - - - -### bi.divideAndRemainder - - - -### bi.modPow - - - -### bi.modInverse - - - -### bi.pow - - - -### bi.gcd - - - -### bi.isProbablePrime - - diff --git a/truebit-implementation/node_modules/jsbn/example.html b/truebit-implementation/node_modules/jsbn/example.html deleted file mode 100644 index 7c26a566..00000000 --- a/truebit-implementation/node_modules/jsbn/example.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/truebit-implementation/node_modules/jsbn/example.js b/truebit-implementation/node_modules/jsbn/example.js deleted file mode 100644 index 664c1b45..00000000 --- a/truebit-implementation/node_modules/jsbn/example.js +++ /dev/null @@ -1,3 +0,0 @@ -var BigInteger = require('./'); -var a = new BigInteger('91823918239182398123'); -console.log(a.bitLength()); \ No newline at end of file diff --git a/truebit-implementation/node_modules/jsbn/index.js b/truebit-implementation/node_modules/jsbn/index.js deleted file mode 100644 index 973226dd..00000000 --- a/truebit-implementation/node_modules/jsbn/index.js +++ /dev/null @@ -1,1357 +0,0 @@ -(function(){ - - // Copyright (c) 2005 Tom Wu - // All Rights Reserved. - // See "LICENSE" for details. - - // Basic JavaScript BN library - subset useful for RSA encryption. - - // Bits per digit - var dbits; - - // JavaScript engine analysis - var canary = 0xdeadbeefcafe; - var j_lm = ((canary&0xffffff)==0xefcafe); - - // (public) Constructor - function BigInteger(a,b,c) { - if(a != null) - if("number" == typeof a) this.fromNumber(a,b,c); - else if(b == null && "string" != typeof a) this.fromString(a,256); - else this.fromString(a,b); - } - - // return new, unset BigInteger - function nbi() { return new BigInteger(null); } - - // am: Compute w_j += (x*this_i), propagate carries, - // c is initial carry, returns final carry. - // c < 3*dvalue, x < 2*dvalue, this_i < dvalue - // We need to select the fastest one that works in this environment. - - // am1: use a single mult and divide to get the high bits, - // max digit bits should be 26 because - // max internal value = 2*dvalue^2-2*dvalue (< 2^53) - function am1(i,x,w,j,c,n) { - while(--n >= 0) { - var v = x*this[i++]+w[j]+c; - c = Math.floor(v/0x4000000); - w[j++] = v&0x3ffffff; - } - return c; - } - // am2 avoids a big mult-and-extract completely. - // Max digit bits should be <= 30 because we do bitwise ops - // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) - function am2(i,x,w,j,c,n) { - var xl = x&0x7fff, xh = x>>15; - while(--n >= 0) { - var l = this[i]&0x7fff; - var h = this[i++]>>15; - var m = xh*l+h*xl; - l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); - c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); - w[j++] = l&0x3fffffff; - } - return c; - } - // Alternately, set max digit bits to 28 since some - // browsers slow down when dealing with 32-bit numbers. - function am3(i,x,w,j,c,n) { - var xl = x&0x3fff, xh = x>>14; - while(--n >= 0) { - var l = this[i]&0x3fff; - var h = this[i++]>>14; - var m = xh*l+h*xl; - l = xl*l+((m&0x3fff)<<14)+w[j]+c; - c = (l>>28)+(m>>14)+xh*h; - w[j++] = l&0xfffffff; - } - return c; - } - var inBrowser = typeof navigator !== "undefined"; - if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) { - BigInteger.prototype.am = am2; - dbits = 30; - } - else if(inBrowser && j_lm && (navigator.appName != "Netscape")) { - BigInteger.prototype.am = am1; - dbits = 26; - } - else { // Mozilla/Netscape seems to prefer am3 - BigInteger.prototype.am = am3; - dbits = 28; - } - - BigInteger.prototype.DB = dbits; - BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; - r.t = this.t; - r.s = this.s; - } - - // (protected) set from integer value x, -DV <= x < DV - function bnpFromInt(x) { - this.t = 1; - this.s = (x<0)?-1:0; - if(x > 0) this[0] = x; - else if(x < -1) this[0] = x+this.DV; - else this.t = 0; - } - - // return bigint initialized to value - function nbv(i) { var r = nbi(); r.fromInt(i); return r; } - - // (protected) set from string and radix - function bnpFromString(s,b) { - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 256) k = 8; // byte array - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else { this.fromRadix(s,b); return; } - this.t = 0; - this.s = 0; - var i = s.length, mi = false, sh = 0; - while(--i >= 0) { - var x = (k==8)?s[i]&0xff:intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if(sh == 0) - this[this.t++] = x; - else if(sh+k > this.DB) { - this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); - } - else - this[this.t-1] |= x<= this.DB) sh -= this.DB; - } - if(k == 8 && (s[0]&0x80) != 0) { - this.s = -1; - if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; - } - - // (public) return string representation in given radix - function bnToString(b) { - if(this.s < 0) return "-"+this.negate().toString(b); - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else return this.toRadix(b); - var km = (1< 0) { - if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } - while(i >= 0) { - if(p < k) { - d = (this[i]&((1<>(p+=this.DB-k); - } - else { - d = (this[i]>>(p-=k))&km; - if(p <= 0) { p += this.DB; --i; } - } - if(d > 0) m = true; - if(m) r += int2char(d); - } - } - return m?r:"0"; - } - - // (public) -this - function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } - - // (public) |this| - function bnAbs() { return (this.s<0)?this.negate():this; } - - // (public) return + if this > a, - if this < a, 0 if equal - function bnCompareTo(a) { - var r = this.s-a.s; - if(r != 0) return r; - var i = this.t; - r = i-a.t; - if(r != 0) return (this.s<0)?-r:r; - while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; - return 0; - } - - // returns bit length of the integer x - function nbits(x) { - var r = 1, t; - if((t=x>>>16) != 0) { x = t; r += 16; } - if((t=x>>8) != 0) { x = t; r += 8; } - if((t=x>>4) != 0) { x = t; r += 4; } - if((t=x>>2) != 0) { x = t; r += 2; } - if((t=x>>1) != 0) { x = t; r += 1; } - return r; - } - - // (public) return the number of bits in "this" - function bnBitLength() { - if(this.t <= 0) return 0; - return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); - } - - // (protected) r = this << n*DB - function bnpDLShiftTo(n,r) { - var i; - for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; - for(i = n-1; i >= 0; --i) r[i] = 0; - r.t = this.t+n; - r.s = this.s; - } - - // (protected) r = this >> n*DB - function bnpDRShiftTo(n,r) { - for(var i = n; i < this.t; ++i) r[i-n] = this[i]; - r.t = Math.max(this.t-n,0); - r.s = this.s; - } - - // (protected) r = this << n - function bnpLShiftTo(n,r) { - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<= 0; --i) { - r[i+ds+1] = (this[i]>>cbs)|c; - c = (this[i]&bm)<= 0; --i) r[i] = 0; - r[ds] = c; - r.t = this.t+ds+1; - r.s = this.s; - r.clamp(); - } - - // (protected) r = this >> n - function bnpRShiftTo(n,r) { - r.s = this.s; - var ds = Math.floor(n/this.DB); - if(ds >= this.t) { r.t = 0; return; } - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<>bs; - for(var i = ds+1; i < this.t; ++i) { - r[i-ds-1] |= (this[i]&bm)<>bs; - } - if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; - } - if(a.t < this.t) { - c -= a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c -= a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c<0)?-1:0; - if(c < -1) r[i++] = this.DV+c; - else if(c > 0) r[i++] = c; - r.t = i; - r.clamp(); - } - - // (protected) r = this * a, r != this,a (HAC 14.12) - // "this" should be the larger one if appropriate. - function bnpMultiplyTo(a,r) { - var x = this.abs(), y = a.abs(); - var i = x.t; - r.t = i+y.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); - r.s = 0; - r.clamp(); - if(this.s != a.s) BigInteger.ZERO.subTo(r,r); - } - - // (protected) r = this^2, r != this (HAC 14.16) - function bnpSquareTo(r) { - var x = this.abs(); - var i = r.t = 2*x.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < x.t-1; ++i) { - var c = x.am(i,x[i],r,2*i,0,1); - if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { - r[i+x.t] -= x.DV; - r[i+x.t+1] = 1; - } - } - if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); - r.s = 0; - r.clamp(); - } - - // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) - // r != q, this != m. q or r may be null. - function bnpDivRemTo(m,q,r) { - var pm = m.abs(); - if(pm.t <= 0) return; - var pt = this.abs(); - if(pt.t < pm.t) { - if(q != null) q.fromInt(0); - if(r != null) this.copyTo(r); - return; - } - if(r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus - if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } - else { pm.copyTo(y); pt.copyTo(r); } - var ys = y.t; - var y0 = y[ys-1]; - if(y0 == 0) return; - var yt = y0*(1<1)?y[ys-2]>>this.F2:0); - var d1 = this.FV/yt, d2 = (1<= 0) { - r[r.t++] = 1; - r.subTo(t,r); - } - BigInteger.ONE.dlShiftTo(ys,t); - t.subTo(y,y); // "negative" y so we can replace sub with am later - while(y.t < ys) y[y.t++] = 0; - while(--j >= 0) { - // Estimate quotient digit - var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); - if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out - y.dlShiftTo(j,t); - r.subTo(t,r); - while(r[i] < --qd) r.subTo(t,r); - } - } - if(q != null) { - r.drShiftTo(ys,q); - if(ts != ms) BigInteger.ZERO.subTo(q,q); - } - r.t = ys; - r.clamp(); - if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder - if(ts < 0) BigInteger.ZERO.subTo(r,r); - } - - // (public) this mod a - function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a,null,r); - if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); - return r; - } - - // Modular reduction using "classic" algorithm - function Classic(m) { this.m = m; } - function cConvert(x) { - if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; - } - function cRevert(x) { return x; } - function cReduce(x) { x.divRemTo(this.m,null,x); } - function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - Classic.prototype.convert = cConvert; - Classic.prototype.revert = cRevert; - Classic.prototype.reduce = cReduce; - Classic.prototype.mulTo = cMulTo; - Classic.prototype.sqrTo = cSqrTo; - - // (protected) return "-1/this % 2^DB"; useful for Mont. reduction - // justification: - // xy == 1 (mod m) - // xy = 1+km - // xy(2-xy) = (1+km)(1-km) - // x[y(2-xy)] = 1-k^2m^2 - // x[y(2-xy)] == 1 (mod m^2) - // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 - // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. - // JS multiply "overflows" differently from C/C++, so care is needed here. - function bnpInvDigit() { - if(this.t < 1) return 0; - var x = this[0]; - if((x&1) == 0) return 0; - var y = x&3; // y == 1/x mod 2^2 - y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 - y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 - y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y>0)?this.DV-y:-y; - } - - // Montgomery reduction - function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp&0x7fff; - this.mph = this.mp>>15; - this.um = (1<<(m.DB-15))-1; - this.mt2 = 2*m.t; - } - - // xR mod m - function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t,r); - r.divRemTo(this.m,null,r); - if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); - return r; - } - - // x/R mod m - function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - } - - // x = x/R mod m (HAC 14.32) - function montReduce(x) { - while(x.t <= this.mt2) // pad x so am has enough room later - x[x.t++] = 0; - for(var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i]&0x7fff; - var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; - // use am to combine the multiply-shift-add into one call - j = i+this.m.t; - x[j] += this.m.am(0,u0,x,i,0,this.m.t); - // propagate carry - while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } - } - x.clamp(); - x.drShiftTo(this.m.t,x); - if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); - } - - // r = "x^2/R mod m"; x != r - function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - // r = "xy/R mod m"; x,y != r - function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - - Montgomery.prototype.convert = montConvert; - Montgomery.prototype.revert = montRevert; - Montgomery.prototype.reduce = montReduce; - Montgomery.prototype.mulTo = montMulTo; - Montgomery.prototype.sqrTo = montSqrTo; - - // (protected) true iff this is even - function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } - - // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) - function bnpExp(e,z) { - if(e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; - g.copyTo(r); - while(--i >= 0) { - z.sqrTo(r,r2); - if((e&(1< 0) z.mulTo(r2,g,r); - else { var t = r; r = r2; r2 = t; } - } - return z.revert(r); - } - - // (public) this^e % m, 0 <= e < 2^32 - function bnModPowInt(e,m) { - var z; - if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e,z); - } - - // protected - BigInteger.prototype.copyTo = bnpCopyTo; - BigInteger.prototype.fromInt = bnpFromInt; - BigInteger.prototype.fromString = bnpFromString; - BigInteger.prototype.clamp = bnpClamp; - BigInteger.prototype.dlShiftTo = bnpDLShiftTo; - BigInteger.prototype.drShiftTo = bnpDRShiftTo; - BigInteger.prototype.lShiftTo = bnpLShiftTo; - BigInteger.prototype.rShiftTo = bnpRShiftTo; - BigInteger.prototype.subTo = bnpSubTo; - BigInteger.prototype.multiplyTo = bnpMultiplyTo; - BigInteger.prototype.squareTo = bnpSquareTo; - BigInteger.prototype.divRemTo = bnpDivRemTo; - BigInteger.prototype.invDigit = bnpInvDigit; - BigInteger.prototype.isEven = bnpIsEven; - BigInteger.prototype.exp = bnpExp; - - // public - BigInteger.prototype.toString = bnToString; - BigInteger.prototype.negate = bnNegate; - BigInteger.prototype.abs = bnAbs; - BigInteger.prototype.compareTo = bnCompareTo; - BigInteger.prototype.bitLength = bnBitLength; - BigInteger.prototype.mod = bnMod; - BigInteger.prototype.modPowInt = bnModPowInt; - - // "constants" - BigInteger.ZERO = nbv(0); - BigInteger.ONE = nbv(1); - - // Copyright (c) 2005-2009 Tom Wu - // All Rights Reserved. - // See "LICENSE" for details. - - // Extended JavaScript BN functions, required for RSA private ops. - - // Version 1.1: new BigInteger("0", 10) returns "proper" zero - // Version 1.2: square() API, isProbablePrime fix - - // (public) - function bnClone() { var r = nbi(); this.copyTo(r); return r; } - - // (public) return value as integer - function bnIntValue() { - if(this.s < 0) { - if(this.t == 1) return this[0]-this.DV; - else if(this.t == 0) return -1; - } - else if(this.t == 1) return this[0]; - else if(this.t == 0) return 0; - // assumes 16 < DB < 32 - return ((this[1]&((1<<(32-this.DB))-1))<>24; } - - // (public) return value as short (assumes DB>=16) - function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; } - - // (protected) return x s.t. r^x < DV - function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } - - // (public) 0 if this == 0, 1 if this > 0 - function bnSigNum() { - if(this.s < 0) return -1; - else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; - else return 1; - } - - // (protected) convert to radix string - function bnpToRadix(b) { - if(b == null) b = 10; - if(this.signum() == 0 || b < 2 || b > 36) return "0"; - var cs = this.chunkSize(b); - var a = Math.pow(b,cs); - var d = nbv(a), y = nbi(), z = nbi(), r = ""; - this.divRemTo(d,y,z); - while(y.signum() > 0) { - r = (a+z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d,y,z); - } - return z.intValue().toString(b) + r; - } - - // (protected) convert from radix string - function bnpFromRadix(s,b) { - this.fromInt(0); - if(b == null) b = 10; - var cs = this.chunkSize(b); - var d = Math.pow(b,cs), mi = false, j = 0, w = 0; - for(var i = 0; i < s.length; ++i) { - var x = intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-" && this.signum() == 0) mi = true; - continue; - } - w = b*w+x; - if(++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w,0); - j = 0; - w = 0; - } - } - if(j > 0) { - this.dMultiply(Math.pow(b,j)); - this.dAddOffset(w,0); - } - if(mi) BigInteger.ZERO.subTo(this,this); - } - - // (protected) alternate constructor - function bnpFromNumber(a,b,c) { - if("number" == typeof b) { - // new BigInteger(int,int,RNG) - if(a < 2) this.fromInt(1); - else { - this.fromNumber(a,c); - if(!this.testBit(a-1)) // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); - if(this.isEven()) this.dAddOffset(1,0); // force odd - while(!this.isProbablePrime(b)) { - this.dAddOffset(2,0); - if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); - } - } - } - else { - // new BigInteger(int,RNG) - var x = new Array(), t = a&7; - x.length = (a>>3)+1; - b.nextBytes(x); - if(t > 0) x[0] &= ((1< 0) { - if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p) - r[k++] = d|(this.s<<(this.DB-p)); - while(i >= 0) { - if(p < 8) { - d = (this[i]&((1<>(p+=this.DB-8); - } - else { - d = (this[i]>>(p-=8))&0xff; - if(p <= 0) { p += this.DB; --i; } - } - if((d&0x80) != 0) d |= -256; - if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; - if(k > 0 || d != this.s) r[k++] = d; - } - } - return r; - } - - function bnEquals(a) { return(this.compareTo(a)==0); } - function bnMin(a) { return(this.compareTo(a)<0)?this:a; } - function bnMax(a) { return(this.compareTo(a)>0)?this:a; } - - // (protected) r = this op a (bitwise) - function bnpBitwiseTo(a,op,r) { - var i, f, m = Math.min(a.t,this.t); - for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]); - if(a.t < this.t) { - f = a.s&this.DM; - for(i = m; i < this.t; ++i) r[i] = op(this[i],f); - r.t = this.t; - } - else { - f = this.s&this.DM; - for(i = m; i < a.t; ++i) r[i] = op(f,a[i]); - r.t = a.t; - } - r.s = op(this.s,a.s); - r.clamp(); - } - - // (public) this & a - function op_and(x,y) { return x&y; } - function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } - - // (public) this | a - function op_or(x,y) { return x|y; } - function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } - - // (public) this ^ a - function op_xor(x,y) { return x^y; } - function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } - - // (public) this & ~a - function op_andnot(x,y) { return x&~y; } - function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } - - // (public) ~this - function bnNot() { - var r = nbi(); - for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i]; - r.t = this.t; - r.s = ~this.s; - return r; - } - - // (public) this << n - function bnShiftLeft(n) { - var r = nbi(); - if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); - return r; - } - - // (public) this >> n - function bnShiftRight(n) { - var r = nbi(); - if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); - return r; - } - - // return index of lowest 1-bit in x, x < 2^31 - function lbit(x) { - if(x == 0) return -1; - var r = 0; - if((x&0xffff) == 0) { x >>= 16; r += 16; } - if((x&0xff) == 0) { x >>= 8; r += 8; } - if((x&0xf) == 0) { x >>= 4; r += 4; } - if((x&3) == 0) { x >>= 2; r += 2; } - if((x&1) == 0) ++r; - return r; - } - - // (public) returns index of lowest 1-bit (or -1 if none) - function bnGetLowestSetBit() { - for(var i = 0; i < this.t; ++i) - if(this[i] != 0) return i*this.DB+lbit(this[i]); - if(this.s < 0) return this.t*this.DB; - return -1; - } - - // return number of 1 bits in x - function cbit(x) { - var r = 0; - while(x != 0) { x &= x-1; ++r; } - return r; - } - - // (public) return number of set bits - function bnBitCount() { - var r = 0, x = this.s&this.DM; - for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x); - return r; - } - - // (public) true iff nth bit is set - function bnTestBit(n) { - var j = Math.floor(n/this.DB); - if(j >= this.t) return(this.s!=0); - return((this[j]&(1<<(n%this.DB)))!=0); - } - - // (protected) this op (1<>= this.DB; - } - if(a.t < this.t) { - c += a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c += a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += a.s; - } - r.s = (c<0)?-1:0; - if(c > 0) r[i++] = c; - else if(c < -1) r[i++] = this.DV+c; - r.t = i; - r.clamp(); - } - - // (public) this + a - function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } - - // (public) this - a - function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } - - // (public) this * a - function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } - - // (public) this^2 - function bnSquare() { var r = nbi(); this.squareTo(r); return r; } - - // (public) this / a - function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } - - // (public) this % a - function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } - - // (public) [this/a,this%a] - function bnDivideAndRemainder(a) { - var q = nbi(), r = nbi(); - this.divRemTo(a,q,r); - return new Array(q,r); - } - - // (protected) this *= n, this >= 0, 1 < n < DV - function bnpDMultiply(n) { - this[this.t] = this.am(0,n-1,this,0,0,this.t); - ++this.t; - this.clamp(); - } - - // (protected) this += n << w words, this >= 0 - function bnpDAddOffset(n,w) { - if(n == 0) return; - while(this.t <= w) this[this.t++] = 0; - this[w] += n; - while(this[w] >= this.DV) { - this[w] -= this.DV; - if(++w >= this.t) this[this.t++] = 0; - ++this[w]; - } - } - - // A "null" reducer - function NullExp() {} - function nNop(x) { return x; } - function nMulTo(x,y,r) { x.multiplyTo(y,r); } - function nSqrTo(x,r) { x.squareTo(r); } - - NullExp.prototype.convert = nNop; - NullExp.prototype.revert = nNop; - NullExp.prototype.mulTo = nMulTo; - NullExp.prototype.sqrTo = nSqrTo; - - // (public) this^e - function bnPow(e) { return this.exp(e,new NullExp()); } - - // (protected) r = lower n words of "this * a", a.t <= n - // "this" should be the larger one if appropriate. - function bnpMultiplyLowerTo(a,n,r) { - var i = Math.min(this.t+a.t,n); - r.s = 0; // assumes a,this >= 0 - r.t = i; - while(i > 0) r[--i] = 0; - var j; - for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t); - for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i); - r.clamp(); - } - - // (protected) r = "this * a" without lower n words, n > 0 - // "this" should be the larger one if appropriate. - function bnpMultiplyUpperTo(a,n,r) { - --n; - var i = r.t = this.t+a.t-n; - r.s = 0; // assumes a,this >= 0 - while(--i >= 0) r[i] = 0; - for(i = Math.max(n-this.t,0); i < a.t; ++i) - r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n); - r.clamp(); - r.drShiftTo(1,r); - } - - // Barrett modular reduction - function Barrett(m) { - // setup Barrett - this.r2 = nbi(); - this.q3 = nbi(); - BigInteger.ONE.dlShiftTo(2*m.t,this.r2); - this.mu = this.r2.divide(m); - this.m = m; - } - - function barrettConvert(x) { - if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); - else if(x.compareTo(this.m) < 0) return x; - else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } - } - - function barrettRevert(x) { return x; } - - // x = x mod m (HAC 14.42) - function barrettReduce(x) { - x.drShiftTo(this.m.t-1,this.r2); - if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } - this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); - this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); - while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); - x.subTo(this.r2,x); - while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); - } - - // r = x^2 mod m; x != r - function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - // r = x*y mod m; x,y != r - function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - - Barrett.prototype.convert = barrettConvert; - Barrett.prototype.revert = barrettRevert; - Barrett.prototype.reduce = barrettReduce; - Barrett.prototype.mulTo = barrettMulTo; - Barrett.prototype.sqrTo = barrettSqrTo; - - // (public) this^e % m (HAC 14.85) - function bnModPow(e,m) { - var i = e.bitLength(), k, r = nbv(1), z; - if(i <= 0) return r; - else if(i < 18) k = 1; - else if(i < 48) k = 3; - else if(i < 144) k = 4; - else if(i < 768) k = 5; - else k = 6; - if(i < 8) - z = new Classic(m); - else if(m.isEven()) - z = new Barrett(m); - else - z = new Montgomery(m); - - // precomputation - var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { - var g2 = nbi(); - z.sqrTo(g[1],g2); - while(n <= km) { - g[n] = nbi(); - z.mulTo(g2,g[n-2],g[n]); - n += 2; - } - } - - var j = e.t-1, w, is1 = true, r2 = nbi(), t; - i = nbits(e[j])-1; - while(j >= 0) { - if(i >= k1) w = (e[j]>>(i-k1))&km; - else { - w = (e[j]&((1<<(i+1))-1))<<(k1-i); - if(j > 0) w |= e[j-1]>>(this.DB+i-k1); - } - - n = k; - while((w&1) == 0) { w >>= 1; --n; } - if((i -= n) < 0) { i += this.DB; --j; } - if(is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } - else { - while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } - if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } - z.mulTo(r2,g[w],r); - } - - while(j >= 0 && (e[j]&(1< 0) { - x.rShiftTo(g,x); - y.rShiftTo(g,y); - } - while(x.signum() > 0) { - if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); - if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); - if(x.compareTo(y) >= 0) { - x.subTo(y,x); - x.rShiftTo(1,x); - } - else { - y.subTo(x,y); - y.rShiftTo(1,y); - } - } - if(g > 0) y.lShiftTo(g,y); - return y; - } - - // (protected) this % n, n < 2^26 - function bnpModInt(n) { - if(n <= 0) return 0; - var d = this.DV%n, r = (this.s<0)?n-1:0; - if(this.t > 0) - if(d == 0) r = this[0]%n; - else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n; - return r; - } - - // (public) 1/this % m (HAC 14.61) - function bnModInverse(m) { - var ac = m.isEven(); - if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; - var u = m.clone(), v = this.clone(); - var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); - while(u.signum() != 0) { - while(u.isEven()) { - u.rShiftTo(1,u); - if(ac) { - if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } - a.rShiftTo(1,a); - } - else if(!b.isEven()) b.subTo(m,b); - b.rShiftTo(1,b); - } - while(v.isEven()) { - v.rShiftTo(1,v); - if(ac) { - if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } - c.rShiftTo(1,c); - } - else if(!d.isEven()) d.subTo(m,d); - d.rShiftTo(1,d); - } - if(u.compareTo(v) >= 0) { - u.subTo(v,u); - if(ac) a.subTo(c,a); - b.subTo(d,b); - } - else { - v.subTo(u,v); - if(ac) c.subTo(a,c); - d.subTo(b,d); - } - } - if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; - if(d.compareTo(m) >= 0) return d.subtract(m); - if(d.signum() < 0) d.addTo(m,d); else return d; - if(d.signum() < 0) return d.add(m); else return d; - } - - var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]; - var lplim = (1<<26)/lowprimes[lowprimes.length-1]; - - // (public) test primality with certainty >= 1-.5^t - function bnIsProbablePrime(t) { - var i, x = this.abs(); - if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) { - for(i = 0; i < lowprimes.length; ++i) - if(x[0] == lowprimes[i]) return true; - return false; - } - if(x.isEven()) return false; - i = 1; - while(i < lowprimes.length) { - var m = lowprimes[i], j = i+1; - while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; - m = x.modInt(m); - while(i < j) if(m%lowprimes[i++] == 0) return false; - } - return x.millerRabin(t); - } - - // (protected) true if probably prime (HAC 4.24, Miller-Rabin) - function bnpMillerRabin(t) { - var n1 = this.subtract(BigInteger.ONE); - var k = n1.getLowestSetBit(); - if(k <= 0) return false; - var r = n1.shiftRight(k); - t = (t+1)>>1; - if(t > lowprimes.length) t = lowprimes.length; - var a = nbi(); - for(var i = 0; i < t; ++i) { - //Pick bases at random, instead of starting at 2 - a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]); - var y = a.modPow(r,this); - if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while(j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2,this); - if(y.compareTo(BigInteger.ONE) == 0) return false; - } - if(y.compareTo(n1) != 0) return false; - } - } - return true; - } - - // protected - BigInteger.prototype.chunkSize = bnpChunkSize; - BigInteger.prototype.toRadix = bnpToRadix; - BigInteger.prototype.fromRadix = bnpFromRadix; - BigInteger.prototype.fromNumber = bnpFromNumber; - BigInteger.prototype.bitwiseTo = bnpBitwiseTo; - BigInteger.prototype.changeBit = bnpChangeBit; - BigInteger.prototype.addTo = bnpAddTo; - BigInteger.prototype.dMultiply = bnpDMultiply; - BigInteger.prototype.dAddOffset = bnpDAddOffset; - BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; - BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; - BigInteger.prototype.modInt = bnpModInt; - BigInteger.prototype.millerRabin = bnpMillerRabin; - - // public - BigInteger.prototype.clone = bnClone; - BigInteger.prototype.intValue = bnIntValue; - BigInteger.prototype.byteValue = bnByteValue; - BigInteger.prototype.shortValue = bnShortValue; - BigInteger.prototype.signum = bnSigNum; - BigInteger.prototype.toByteArray = bnToByteArray; - BigInteger.prototype.equals = bnEquals; - BigInteger.prototype.min = bnMin; - BigInteger.prototype.max = bnMax; - BigInteger.prototype.and = bnAnd; - BigInteger.prototype.or = bnOr; - BigInteger.prototype.xor = bnXor; - BigInteger.prototype.andNot = bnAndNot; - BigInteger.prototype.not = bnNot; - BigInteger.prototype.shiftLeft = bnShiftLeft; - BigInteger.prototype.shiftRight = bnShiftRight; - BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; - BigInteger.prototype.bitCount = bnBitCount; - BigInteger.prototype.testBit = bnTestBit; - BigInteger.prototype.setBit = bnSetBit; - BigInteger.prototype.clearBit = bnClearBit; - BigInteger.prototype.flipBit = bnFlipBit; - BigInteger.prototype.add = bnAdd; - BigInteger.prototype.subtract = bnSubtract; - BigInteger.prototype.multiply = bnMultiply; - BigInteger.prototype.divide = bnDivide; - BigInteger.prototype.remainder = bnRemainder; - BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; - BigInteger.prototype.modPow = bnModPow; - BigInteger.prototype.modInverse = bnModInverse; - BigInteger.prototype.pow = bnPow; - BigInteger.prototype.gcd = bnGCD; - BigInteger.prototype.isProbablePrime = bnIsProbablePrime; - - // JSBN-specific extension - BigInteger.prototype.square = bnSquare; - - // Expose the Barrett function - BigInteger.prototype.Barrett = Barrett - - // BigInteger interfaces not implemented in jsbn: - - // BigInteger(int signum, byte[] magnitude) - // double doubleValue() - // float floatValue() - // int hashCode() - // long longValue() - // static BigInteger valueOf(long val) - - // Random number generator - requires a PRNG backend, e.g. prng4.js - - // For best results, put code like - // - // in your main HTML document. - - var rng_state; - var rng_pool; - var rng_pptr; - - // Mix in a 32-bit integer into the pool - function rng_seed_int(x) { - rng_pool[rng_pptr++] ^= x & 255; - rng_pool[rng_pptr++] ^= (x >> 8) & 255; - rng_pool[rng_pptr++] ^= (x >> 16) & 255; - rng_pool[rng_pptr++] ^= (x >> 24) & 255; - if(rng_pptr >= rng_psize) rng_pptr -= rng_psize; - } - - // Mix in the current time (w/milliseconds) into the pool - function rng_seed_time() { - rng_seed_int(new Date().getTime()); - } - - // Initialize the pool with junk if needed. - if(rng_pool == null) { - rng_pool = new Array(); - rng_pptr = 0; - var t; - if(typeof window !== "undefined" && window.crypto) { - if (window.crypto.getRandomValues) { - // Use webcrypto if available - var ua = new Uint8Array(32); - window.crypto.getRandomValues(ua); - for(t = 0; t < 32; ++t) - rng_pool[rng_pptr++] = ua[t]; - } - else if(navigator.appName == "Netscape" && navigator.appVersion < "5") { - // Extract entropy (256 bits) from NS4 RNG if available - var z = window.crypto.random(32); - for(t = 0; t < z.length; ++t) - rng_pool[rng_pptr++] = z.charCodeAt(t) & 255; - } - } - while(rng_pptr < rng_psize) { // extract some randomness from Math.random() - t = Math.floor(65536 * Math.random()); - rng_pool[rng_pptr++] = t >>> 8; - rng_pool[rng_pptr++] = t & 255; - } - rng_pptr = 0; - rng_seed_time(); - //rng_seed_int(window.screenX); - //rng_seed_int(window.screenY); - } - - function rng_get_byte() { - if(rng_state == null) { - rng_seed_time(); - rng_state = prng_newstate(); - rng_state.init(rng_pool); - for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) - rng_pool[rng_pptr] = 0; - rng_pptr = 0; - //rng_pool = null; - } - // TODO: allow reseeding after first request - return rng_state.next(); - } - - function rng_get_bytes(ba) { - var i; - for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte(); - } - - function SecureRandom() {} - - SecureRandom.prototype.nextBytes = rng_get_bytes; - - // prng4.js - uses Arcfour as a PRNG - - function Arcfour() { - this.i = 0; - this.j = 0; - this.S = new Array(); - } - - // Initialize arcfour context from key, an array of ints, each from [0..255] - function ARC4init(key) { - var i, j, t; - for(i = 0; i < 256; ++i) - this.S[i] = i; - j = 0; - for(i = 0; i < 256; ++i) { - j = (j + this.S[i] + key[i % key.length]) & 255; - t = this.S[i]; - this.S[i] = this.S[j]; - this.S[j] = t; - } - this.i = 0; - this.j = 0; - } - - function ARC4next() { - var t; - this.i = (this.i + 1) & 255; - this.j = (this.j + this.S[this.i]) & 255; - t = this.S[this.i]; - this.S[this.i] = this.S[this.j]; - this.S[this.j] = t; - return this.S[(t + this.S[this.i]) & 255]; - } - - Arcfour.prototype.init = ARC4init; - Arcfour.prototype.next = ARC4next; - - // Plug in your RNG constructor here - function prng_newstate() { - return new Arcfour(); - } - - // Pool size must be a multiple of 4 and greater than 32. - // An array of bytes the size of the pool will be passed to init() - var rng_psize = 256; - - BigInteger.SecureRandom = SecureRandom; - BigInteger.BigInteger = BigInteger; - if (typeof exports !== 'undefined') { - exports = module.exports = BigInteger; - } else { - this.BigInteger = BigInteger; - this.SecureRandom = SecureRandom; - } - -}).call(this); diff --git a/truebit-implementation/node_modules/jsbn/package.json b/truebit-implementation/node_modules/jsbn/package.json deleted file mode 100644 index 697292d9..00000000 --- a/truebit-implementation/node_modules/jsbn/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "_from": "jsbn@~0.1.0", - "_id": "jsbn@0.1.1", - "_inBundle": false, - "_integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "_location": "/jsbn", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "jsbn@~0.1.0", - "name": "jsbn", - "escapedName": "jsbn", - "rawSpec": "~0.1.0", - "saveSpec": null, - "fetchSpec": "~0.1.0" - }, - "_requiredBy": [ - "/ecc-jsbn", - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "_shasum": "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513", - "_spec": "jsbn@~0.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/sshpk", - "author": { - "name": "Tom Wu" - }, - "bugs": { - "url": "https://github.com/andyperlitch/jsbn/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "The jsbn library is a fast, portable implementation of large-number math in pure JavaScript, enabling public-key crypto and other applications on desktop and mobile browsers.", - "homepage": "https://github.com/andyperlitch/jsbn#readme", - "keywords": [ - "biginteger", - "bignumber", - "big", - "integer" - ], - "license": "MIT", - "main": "index.js", - "name": "jsbn", - "repository": { - "type": "git", - "url": "git+https://github.com/andyperlitch/jsbn.git" - }, - "scripts": { - "test": "mocha test.js" - }, - "version": "0.1.1" -} diff --git a/truebit-implementation/node_modules/json-schema-traverse/.eslintrc.yml b/truebit-implementation/node_modules/json-schema-traverse/.eslintrc.yml deleted file mode 100644 index ab1762da..00000000 --- a/truebit-implementation/node_modules/json-schema-traverse/.eslintrc.yml +++ /dev/null @@ -1,27 +0,0 @@ -extends: eslint:recommended -env: - node: true - browser: true -rules: - block-scoped-var: 2 - complexity: [2, 13] - curly: [2, multi-or-nest, consistent] - dot-location: [2, property] - dot-notation: 2 - indent: [2, 2, SwitchCase: 1] - linebreak-style: [2, unix] - new-cap: 2 - no-console: [2, allow: [warn, error]] - no-else-return: 2 - no-eq-null: 2 - no-fallthrough: 2 - no-invalid-this: 2 - no-return-assign: 2 - no-shadow: 1 - no-trailing-spaces: 2 - no-use-before-define: [2, nofunc] - quotes: [2, single, avoid-escape] - semi: [2, always] - strict: [2, global] - valid-jsdoc: [2, requireReturn: false] - no-control-regex: 0 diff --git a/truebit-implementation/node_modules/json-schema-traverse/.travis.yml b/truebit-implementation/node_modules/json-schema-traverse/.travis.yml deleted file mode 100644 index 7ddce74b..00000000 --- a/truebit-implementation/node_modules/json-schema-traverse/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "4" - - "6" - - "7" - - "8" -after_script: - - coveralls < coverage/lcov.info diff --git a/truebit-implementation/node_modules/json-schema-traverse/LICENSE b/truebit-implementation/node_modules/json-schema-traverse/LICENSE deleted file mode 100644 index 7f154356..00000000 --- a/truebit-implementation/node_modules/json-schema-traverse/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/json-schema-traverse/README.md b/truebit-implementation/node_modules/json-schema-traverse/README.md deleted file mode 100644 index d5ccaf45..00000000 --- a/truebit-implementation/node_modules/json-schema-traverse/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# json-schema-traverse -Traverse JSON Schema passing each schema object to callback - -[![Build Status](https://travis-ci.org/epoberezkin/json-schema-traverse.svg?branch=master)](https://travis-ci.org/epoberezkin/json-schema-traverse) -[![npm version](https://badge.fury.io/js/json-schema-traverse.svg)](https://www.npmjs.com/package/json-schema-traverse) -[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/json-schema-traverse/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/json-schema-traverse?branch=master) - - -## Install - -``` -npm install json-schema-traverse -``` - - -## Usage - -```javascript -const traverse = require('json-schema-traverse'); -const schema = { - properties: { - foo: {type: 'string'}, - bar: {type: 'integer'} - } -}; - -traverse(schema, {cb}); -// cb is called 3 times with: -// 1. root schema -// 2. {type: 'string'} -// 3. {type: 'integer'} - -// Or: - -traverse(schema, {cb: {pre, post}}); -// pre is called 3 times with: -// 1. root schema -// 2. {type: 'string'} -// 3. {type: 'integer'} -// -// post is called 3 times with: -// 1. {type: 'string'} -// 2. {type: 'integer'} -// 3. root schema - -``` - -Callback function `cb` is called for each schema object (not including draft-06 boolean schemas), including the root schema, in pre-order traversal. Schema references ($ref) are not resolved, they are passed as is. Alternatively, you can pass a `{pre, post}` object as `cb`, and then `pre` will be called before traversing child elements, and `post` will be called after all child elements have been traversed. - -Callback is passed these parameters: - -- _schema_: the current schema object -- _JSON pointer_: from the root schema to the current schema object -- _root schema_: the schema passed to `traverse` object -- _parent JSON pointer_: from the root schema to the parent schema object (see below) -- _parent keyword_: the keyword inside which this schema appears (e.g. `properties`, `anyOf`, etc.) -- _parent schema_: not necessarily parent object/array; in the example above the parent schema for `{type: 'string'}` is the root schema -- _index/property_: index or property name in the array/object containing multiple schemas; in the example above for `{type: 'string'}` the property name is `'foo'` - - -## Traverse objects in all unknown keywords - -```javascript -const traverse = require('json-schema-traverse'); -const schema = { - mySchema: { - minimum: 1, - maximum: 2 - } -}; - -traverse(schema, {allKeys: true, cb}); -// cb is called 2 times with: -// 1. root schema -// 2. mySchema -``` - -Without option `allKeys: true` callback will be called only with root schema. - - -## License - -[MIT](https://github.com/epoberezkin/json-schema-traverse/blob/master/LICENSE) diff --git a/truebit-implementation/node_modules/json-schema-traverse/index.js b/truebit-implementation/node_modules/json-schema-traverse/index.js deleted file mode 100644 index d4a18dfc..00000000 --- a/truebit-implementation/node_modules/json-schema-traverse/index.js +++ /dev/null @@ -1,89 +0,0 @@ -'use strict'; - -var traverse = module.exports = function (schema, opts, cb) { - // Legacy support for v0.3.1 and earlier. - if (typeof opts == 'function') { - cb = opts; - opts = {}; - } - - cb = opts.cb || cb; - var pre = (typeof cb == 'function') ? cb : cb.pre || function() {}; - var post = cb.post || function() {}; - - _traverse(opts, pre, post, schema, '', schema); -}; - - -traverse.keywords = { - additionalItems: true, - items: true, - contains: true, - additionalProperties: true, - propertyNames: true, - not: true -}; - -traverse.arrayKeywords = { - items: true, - allOf: true, - anyOf: true, - oneOf: true -}; - -traverse.propsKeywords = { - definitions: true, - properties: true, - patternProperties: true, - dependencies: true -}; - -traverse.skipKeywords = { - default: true, - enum: true, - const: true, - required: true, - maximum: true, - minimum: true, - exclusiveMaximum: true, - exclusiveMinimum: true, - multipleOf: true, - maxLength: true, - minLength: true, - pattern: true, - format: true, - maxItems: true, - minItems: true, - uniqueItems: true, - maxProperties: true, - minProperties: true -}; - - -function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { - if (schema && typeof schema == 'object' && !Array.isArray(schema)) { - pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); - for (var key in schema) { - var sch = schema[key]; - if (Array.isArray(sch)) { - if (key in traverse.arrayKeywords) { - for (var i=0; i - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -
- - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
-
- - -
- - - Calgary, AB - Canada - - gary.court@gmail.com -
-
- - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - -
- - -
- - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
- -
- - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - -
- - - -
- - JSON Schema defines the media type "application/schema+json" for - describing the structure of other - JSON documents. JSON Schema is JSON-based and includes facilities - for describing the structure of JSON documents in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - JSON Schema format is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - other JSON documents and elements of interaction. This allows user agents to be able to successfully navigate - JSON documents based on their schemas. - - - Cumulatively JSON Schema acts as a meta-document that can be used to define the required type and constraints on - property values, as well as define the meaning of the property values - for the purpose of describing a resource and determining hyperlinks - within the representation. - -
- An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance JSON documents, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance - JSON documents. - -
- -
- - For this specification, schema will be used to denote a JSON Schema - definition, and an instance refers to a JSON value that the schema - will be describing and validating. - -
- -
- - The JSON Schema media type does not attempt to dictate the structure of JSON - representations that contain data, but rather provides a separate format - for flexibly communicating how a JSON representation should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - with the JSON document. It is acknowledged that JSON documents come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
-
- -
- - JSON Schema instances are correlated to their schema by the "describedby" - relation, where the schema is defined to be the target of the relation. - Instance representations may be of the "application/json" media type or - any other subtype. Consequently, dictating how an instance - representation should specify the relation to the schema is beyond the normative scope - of this document (since this document specifically defines the JSON - Schema media type, and no other), but it is recommended that instances - specify their schema so that user agents can interpret the instance - representation and messages may retain the self-descriptive - characteristic, avoiding the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be defined by a Link header) may be used: - -
- - - -
- - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
- -; rel="describedby" -]]> - -
- - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is defined by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. When collections contain heterogeneous - instances, the "pathStart" attribute MAY be specified in the - schema to disambiguate which schema should be applied for each item in the - collection. However, ultimately, the mechanism for referencing a schema is up to the - media type of the instance documents (if they choose to specify that schemas - can be referenced). -
- -
- - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-03/schema for the draft-03 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-03/hyper-schema. All schemas - used within a protocol with media type definitions - SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
- - - -
-
-
-
- -
- - A JSON Schema is a JSON Object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
- An example JSON Schema definition could look like: - - - -
- - - A JSON Schema object may have any of the following properties, called schema - attributes (all attributes are optional): - - -
- - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The following are acceptable string values: - - - Value MUST be a string. - Value MUST be a number, floating point numbers are allowed. - Value MUST be an integer, no floating point numbers are allowed. This is a subset of the number type. - Value MUST be a boolean. - Value MUST be an object. - Value MUST be an array. - Value MUST be null. Note this is mainly for purpose of being able use union types to define nullability. If this type is not included in a union, null values are not allowed (the primitives listed above do not allow nulls on their own). - Value MAY be of any type including null. - - - If the property is not defined or is not in this list, then any type of value is acceptable. - Other type values MAY be used for custom purposes, but minimal validators of the specification - implementation can allow any instance value on unknown type values. - - - - An array of two or more simple type definitions. Each item in the array MUST be a simple type definition or a schema. - The instance value is valid if it is of the same type as one of the simple type definitions, or valid by one of the schemas, in the array. - - - - -
- For example, a schema that defines if an instance can be a string or a number would be: - - -
-
- -
- This attribute is an object with property definitions that define the valid values of instance object property values. When the instance value is an object, the property values of the instance object MUST conform to the property definitions in this object. In this object, each property definition's value MUST be a schema, and the property's name MUST be the name of the instance property that it defines. The instance property value MUST be valid according to the schema from the property definition. Properties are considered unordered, the order of the instance properties MAY be in any order. -
- -
- This attribute is an object that defines the schema for a set of property names of an object instance. The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. -
- -
- This attribute defines a schema for all properties that are not explicitly defined in an object type definition. If specified, the value MUST be a schema or a boolean. If false is provided, no additional properties are allowed beyond the properties defined in the schema. The default value is an empty schema which allows any value for additional properties. -
- -
- This attribute defines the allowed items in an instance array, and MUST be a schema or an array of schemas. The default value is an empty schema which allows any value for items in the instance array. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST conform to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute using the same rules as "additionalProperties" for objects. -
- -
- This provides a definition for additional items in an array instance when tuple definitions of the items is provided. This can be false to indicate additional items in the array are not allowed, or it can be a schema that defines the schema of the additional items. -
- -
- This attribute indicates if the instance must have a value, and not be undefined. This is false by default, making the instance optional. -
- -
- This attribute is an object that defines the requirements of a property on an instance object. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
- -
- This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
- -
- This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
- -
- This attribute defines the minimum number of values in an array when the array is the instance value. -
- -
- This attribute defines the maximum number of values in an array when the array is the instance value. -
- -
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the corresponding item in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
- -
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
- -
- When the instance value is a string, this defines the minimum length of the string. -
- -
- When the instance value is a string, this defines the maximum length of the string. -
- -
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
- -
- This attribute defines the default value of the instance when the instance is undefined. -
- -
- This attribute is a string that provides a short description of the instance property. -
- -
- This attribute is a string that provides a full description of the of purpose the instance property. -
- -
- This property defines the type of data, content type, or microformat to be expected in the instance property values. A format attribute MAY be one of the values listed below, and if so, SHOULD adhere to the semantics describing for the format. A format SHOULD only be used to give meaning to primitive types (string, integer, number, or boolean). Validators MAY (but are not required to) validate that the instance values conform to a format. - - - The following formats are predefined: - - - This SHOULD be a date in ISO 8601 format of YYYY-MM-DDThh:mm:ssZ in UTC time. This is the recommended form of date/timestamp. - This SHOULD be a date in the format of YYYY-MM-DD. It is recommended that you use the "date-time" format instead of "date" unless you need to transfer only the date part. - This SHOULD be a time in the format of hh:mm:ss. It is recommended that you use the "date-time" format instead of "time" unless you need to transfer only the time part. - This SHOULD be the difference, measured in milliseconds, between the specified time and midnight, 00:00 of January 1, 1970 UTC. The value SHOULD be a number (integer or float). - A regular expression, following the regular expression specification from ECMA 262/Perl 5. - This is a CSS color (like "#FF0000" or "red"), based on CSS 2.1. - This is a CSS style definition (like "color: red; background-color:#FFF"), based on CSS 2.1. - This SHOULD be a phone number (format MAY follow E.123). - This value SHOULD be a URI. - This SHOULD be an email address. - This SHOULD be an ip version 4 address. - This SHOULD be an ip version 6 address. - This SHOULD be a host-name. - - - - Additional custom formats MAY be created. These custom formats MAY be expressed as an URI, and this URI MAY reference a schema of that format. -
- -
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
- -
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
- -
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
- - - -
- -
- - - -
-
-
- -
- - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
- -
- - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
- -
- - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
-
- -
- - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
- - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - -
- - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used on its own in - regular (non-schema documents), and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-03/links (draft-03 version). - - -
- - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
- For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
- -
- If the value of the "id" property was "45", the expanded URI would be: - - - -
- - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
-
- -
- - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
- For example, if a schema is defined: - - - -
- -
- And if a collection of instance resource's JSON representation was retrieved: - - - -
- - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
-
- -
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
- -
- - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
- - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
- -
- - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
- For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
- -
- For example: - - - -
- - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
-
- -
- - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
-
-
-
- -
- - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "slash-delimited", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 2396, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
- - With the slash-delimited fragment resolution protocol, the fragment - identifier is interpreted as a series of property reference tokens that start with and - are delimited by the "/" character (\x2F). Each property reference token - is a series of unreserved or escaped URI characters. Each property - reference token SHOULD be interpreted, starting from the beginning of - the fragment identifier, as a path reference in the target JSON - structure. The final target value of the fragment can be determined by - starting with the root of the JSON structure from the representation of - the resource identified by the pre-fragment URI. If the target is a JSON - object, then the new target is the value of the property with the name - identified by the next property reference token in the fragment. If the - target is a JSON array, then the target is determined by finding the - item in array the array with the index defined by the next property - reference token (which MUST be a number). The target is successively - updated for each property reference token, until the entire fragment has - been traversed. - - - - Property names SHOULD be URI-encoded. In particular, any "/" in a - property name MUST be encoded to avoid being interpreted as a property - delimiter. - - - -
- For example, for the following JSON representation: - - - -
- -
- The following fragment identifiers would be resolved: - - - -
-
-
- -
- - The dot-delimited fragment resolution protocol is the same as - slash-delimited fragment resolution protocol except that the "." character - (\x2E) is used as the delimiter between property names (instead of "/") and - the path does not need to start with a ".". For example, #.foo and #foo are a valid fragment - identifiers for referencing the value of the foo propery. - -
-
- -
- This attribute indicates that the instance property SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
- -
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
- -
- - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
- -
- This attribute defines the media type of the instance representations that this schema is defining. -
-
- -
- - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
- For example, if a hyper schema was defined: - - - -
- -
- And a resource was requested from somesite.com: - - - -
- -
- With a response of: - - - -
-
-
- -
- The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-03/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
- - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
-
-
- - - - - &rfc2045; - &rfc2119; - &rfc2396; - &rfc3339; - &rfc3986; - &rfc4287; - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
- - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
- -
- - - Should we give a preference to MIME headers over Link headers (or only use one)? - Should "root" be a MIME parameter? - Should "format" be renamed to "mediaType" or "contentType" to reflect the usage MIME media types that are allowed? - How should dates be handled? - - -
-
-
diff --git a/truebit-implementation/node_modules/json-schema/draft-zyp-json-schema-04.xml b/truebit-implementation/node_modules/json-schema/draft-zyp-json-schema-04.xml deleted file mode 100644 index 8ede6bf9..00000000 --- a/truebit-implementation/node_modules/json-schema/draft-zyp-json-schema-04.xml +++ /dev/null @@ -1,1072 +0,0 @@ - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -
- - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
-
- - -
- - - Calgary, AB - Canada - - gary.court@gmail.com -
-
- - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - -
- - -
- - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
- -
- - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - - - - The terms "JSON", "JSON text", "JSON value", "member", "element", "object", - "array", "number", "string", "boolean", "true", "false", and "null" in this - document are to be interpreted as defined in RFC 4627. - - - - This specification also uses the following defined terms: - - - A JSON Schema object. - Equivalent to "JSON value" as defined in RFC 4627. - Equivalent to "member" as defined in RFC 4627. - Equivalent to "element" as defined in RFC 4627. - A property of a JSON Schema object. - - -
- -
- - JSON Schema defines the media type "application/schema+json" for - describing the structure of JSON text. JSON Schemas are also written in JSON and includes facilities - for describing the structure of JSON in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - This document is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended to define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - JSON values. This allows user agents to be able to successfully navigate - documents containing JSON based on their schemas. - - - Cumulatively JSON Schema acts as meta-JSON that can be used to define the - required type and constraints on JSON values, as well as define the meaning - of the JSON values for the purpose of describing a resource and determining - hyperlinks within the representation. - -
- An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance. - -
- -
- - The JSON Schema media type does not attempt to dictate the structure of JSON - values that contain data, but rather provides a separate format - for flexibly communicating how a JSON value should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - from the JSON. It is acknowledged that JSON values come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
-
- -
- - JSON values are correlated to their schema by the "describedby" - relation, where the schema is the target of the relation. - JSON values MUST be of the "application/json" media type or - any other subtype. Consequently, dictating how a JSON value should - specify the relation to the schema is beyond the normative scope - of this document since this document specifically defines the JSON - Schema media type, and no other. It is RECOMMNENDED that JSON values - specify their schema so that user agents can interpret the instance - and retain the self-descriptive characteristics. This avoides the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be specified by a Link header) may be used: - -
- - - -
- - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
- -; rel="describedby" -]]> - -
- - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is described by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. The mechanism for referencing a schema is - determined by the media type of the instance (if it provides a method for - referencing schemas). -
- -
- - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-04/schema for the draft-04 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-04/hyper-schema. All schemas - used within a protocol with a media type specified SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
- - - -
-
-
-
- -
- - A JSON Schema is a JSON object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
- An example JSON Schema could look like: - - - -
- - - A JSON Schema object MAY have any of the following optional properties: - - - - - -
- - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The string MUST be one of the following values: - - - Instance MUST be an object. - Instance MUST be an array. - Instance MUST be a string. - Instance MUST be a number, including floating point numbers. - Instance MUST be the JSON literal "true" or "false". - Instance MUST be the JSON literal "null". Note that without this type, null values are not allowed. - Instance MAY be of any type, including null. - - - - - An array of one or more simple or schema types. - The instance value is valid if it is of the same type as one of the simple types, or valid by one of the schemas, in the array. - - - - If this attribute is not specified, then all value types are accepted. - - -
- For example, a schema that defines if an instance can be a string or a number would be: - - -
-
- -
- - This attribute is an object with properties that specify the schemas for the properties of the instance object. - In this attribute's object, each property value MUST be a schema. - When the instance value is an object, the value of the instance's properties MUST be valid according to the schemas with the same property names specified in this attribute. - Objects are unordered, so therefore the order of the instance properties or attribute properties MUST NOT determine validation success. - -
- -
- - This attribute is an object that defines the schema for a set of property names of an object instance. - The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. - If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. - -
- -
- This attribute specifies how any instance property that is not explicitly defined by either the "properties" or "patternProperties" attributes (hereafter referred to as "additional properties") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided, then all additional properties MUST be valid according to the schema. - If false is provided, then no additional properties are allowed. - The default value is an empty schema, which allows any value for additional properties. -
- -
- This attribute provides the allowed items in an array instance. If specified, this attribute MUST be a schema or an array of schemas. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST be valid according to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute the same way as "additionalProperties" for objects is. -
- -
- This attribute specifies how any item in the array instance that is not explicitly defined by "items" (hereafter referred to as "additional items") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided: - - If the "items" attribute is unspecified, then all items in the array instance must be valid against this schema. - If the "items" attribute is a schema, then this attribute is ignored. - If the "items" attribute is an array (during tuple typing), then any additional items MUST be valid against this schema. - - - If false is provided, then any additional items in the array are not allowed. - The default value is an empty schema, which allows any value for additional items. -
- -
- This attribute is an array of strings that defines all the property names that must exist on the object instance. -
- -
- This attribute is an object that specifies the requirements of a property on an object instance. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
- -
- This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
- -
- This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
- -
- This attribute defines the minimum number of values in an array when the array is the instance value. -
- -
- This attribute defines the maximum number of values in an array when the array is the instance value. -
- -
- This attribute defines the minimum number of properties required on an object instance. -
- -
- This attribute defines the maximum number of properties the object instance can have. -
- -
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the item at the corresponding index in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
- -
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
- -
- When the instance value is a string, this defines the minimum length of the string. -
- -
- When the instance value is a string, this defines the maximum length of the string. -
- -
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
- -
- This attribute defines the default value of the instance when the instance is undefined. -
- -
- This attribute is a string that provides a short description of the instance property. -
- -
- This attribute is a string that provides a full description of the of purpose the instance property. -
- -
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
- -
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
- -
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
- - - -
- -
- - - -
-
-
- -
- - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
- -
- - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
- -
- - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
-
- -
- - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
- - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - - - -
- - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used without JSON Schema, - and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-04/links (draft-04 version). - - -
- - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
- For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
- -
- If the value of the "id" property was "45", the expanded URI would be: - - - -
- - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
-
- -
- - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
- For example, if a schema is defined: - - - -
- -
- And if a collection of instance resource's JSON representation was retrieved: - - - -
- - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
-
- -
- This property value is a string that defines the templating language used in the "href" attribute. If no templating language is defined, then the default Link Description Object templating langauge is used. -
- -
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
- -
- - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
- - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
- -
- - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
- For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
- -
- For example: - - - -
- - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
-
- -
- - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
-
-
-
- -
- - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "json-pointer", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 3986, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
- The "json-pointer" fragment resolution protocol uses a JSON Pointer to resolve fragment identifiers in URIs within instance representations. -
-
- - - -
- This attribute indicates that the instance value SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
- -
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
- -
- - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
- -
- This attribute defines the media type of the instance representations that this schema is defining. -
-
- -
- - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
- For example, if a hyper schema was defined: - - - -
- -
- And a resource was requested from somesite.com: - - - -
- -
- With a response of: - - - -
-
-
- -
- The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-04/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
- - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
-
-
- - - - - &rfc2045; - &rfc2119; - &rfc3339; - &rfc3986; - &rfc4287; - - - JSON Pointer - - ForgeRock US, Inc. - - - SitePen (USA) - - - - - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
- - - - - Changed "required" attribute to an array of strings. - Removed "format" attribute. - Added "minProperties" and "maxProperties" attributes. - Replaced "slash-delimited" fragment resolution with "json-pointer". - Added "template" LDO attribute. - Removed irrelevant "Open Issues" section. - Merged Conventions and Terminology sections. - Defined terms used in specification. - Removed "integer" type in favor of {"type":"number", "divisibleBy":1}. - Restricted "type" to only the core JSON types. - Improved wording of many sections. - - - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
-
-
diff --git a/truebit-implementation/node_modules/json-schema/lib/links.js b/truebit-implementation/node_modules/json-schema/lib/links.js deleted file mode 100644 index 8a87f02d..00000000 --- a/truebit-implementation/node_modules/json-schema/lib/links.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JSON Schema link handler - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], function () { - return factory(); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals - root.jsonSchemaLinks = factory(); - } -}(this, function () {// setup primitive classes to be JSON Schema types -var exports = {}; -exports.cacheLinks = true; -exports.getLink = function(relation, instance, schema){ - // gets the URI of the link for the given relation based on the instance and schema - // for example: - // getLink( - // "brother", - // {"brother_id":33}, - // {links:[{rel:"brother", href:"Brother/{brother_id}"}]}) -> - // "Brother/33" - var links = schema.__linkTemplates; - if(!links){ - links = {}; - var schemaLinks = schema.links; - if(schemaLinks && schemaLinks instanceof Array){ - schemaLinks.forEach(function(link){ - /* // TODO: allow for multiple same-name relations - if(links[link.rel]){ - if(!(links[link.rel] instanceof Array)){ - links[link.rel] = [links[link.rel]]; - } - }*/ - links[link.rel] = link.href; - }); - } - if(exports.cacheLinks){ - schema.__linkTemplates = links; - } - } - var linkTemplate = links[relation]; - return linkTemplate && exports.substitute(linkTemplate, instance); -}; - -exports.substitute = function(linkTemplate, instance){ - return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){ - var value = instance[decodeURIComponent(property)]; - if(value instanceof Array){ - // the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values - return '(' + value.join(',') + ')'; - } - return value; - }); -}; -return exports; -})); \ No newline at end of file diff --git a/truebit-implementation/node_modules/json-schema/lib/validate.js b/truebit-implementation/node_modules/json-schema/lib/validate.js deleted file mode 100644 index e4dc1511..00000000 --- a/truebit-implementation/node_modules/json-schema/lib/validate.js +++ /dev/null @@ -1,273 +0,0 @@ -/** - * JSONSchema Validator - Validates JavaScript objects using JSON Schemas - * (http://www.json.com/json-schema-proposal/) - * - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. -To use the validator call the validate function with an instance object and an optional schema object. -If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), -that schema will be used to validate and the schema parameter is not necessary (if both exist, -both validations will occur). -The validate method will return an array of validation errors. If there are no errors, then an -empty list will be returned. A validation error will have two properties: -"property" which indicates which property had the error -"message" which indicates what the error was - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], function () { - return factory(); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals - root.jsonSchema = factory(); - } -}(this, function () {// setup primitive classes to be JSON Schema types -var exports = validate -exports.Integer = {type:"integer"}; -var primitiveConstructors = { - String: String, - Boolean: Boolean, - Number: Number, - Object: Object, - Array: Array, - Date: Date -} -exports.validate = validate; -function validate(/*Any*/instance,/*Object*/schema) { - // Summary: - // To use the validator call JSONSchema.validate with an instance object and an optional schema object. - // If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), - // that schema will be used to validate and the schema parameter is not necessary (if both exist, - // both validations will occur). - // The validate method will return an object with two properties: - // valid: A boolean indicating if the instance is valid by the schema - // errors: An array of validation errors. If there are no errors, then an - // empty list will be returned. A validation error will have two properties: - // property: which indicates which property had the error - // message: which indicates what the error was - // - return validate(instance, schema, {changing: false});//, coerce: false, existingOnly: false}); - }; -exports.checkPropertyChange = function(/*Any*/value,/*Object*/schema, /*String*/property) { - // Summary: - // The checkPropertyChange method will check to see if an value can legally be in property with the given schema - // This is slightly different than the validate method in that it will fail if the schema is readonly and it will - // not check for self-validation, it is assumed that the passed in value is already internally valid. - // The checkPropertyChange method will return the same object type as validate, see JSONSchema.validate for - // information. - // - return validate(value, schema, {changing: property || "property"}); - }; -var validate = exports._validate = function(/*Any*/instance,/*Object*/schema,/*Object*/options) { - - if (!options) options = {}; - var _changing = options.changing; - - function getType(schema){ - return schema.type || (primitiveConstructors[schema.name] == schema && schema.name.toLowerCase()); - } - var errors = []; - // validate a value against a property definition - function checkProp(value, schema, path,i){ - - var l; - path += path ? typeof i == 'number' ? '[' + i + ']' : typeof i == 'undefined' ? '' : '.' + i : i; - function addError(message){ - errors.push({property:path,message:message}); - } - - if((typeof schema != 'object' || schema instanceof Array) && (path || typeof schema != 'function') && !(schema && getType(schema))){ - if(typeof schema == 'function'){ - if(!(value instanceof schema)){ - addError("is not an instance of the class/constructor " + schema.name); - } - }else if(schema){ - addError("Invalid schema/property definition " + schema); - } - return null; - } - if(_changing && schema.readonly){ - addError("is a readonly field, it can not be changed"); - } - if(schema['extends']){ // if it extends another schema, it must pass that schema as well - checkProp(value,schema['extends'],path,i); - } - // validate a value against a type definition - function checkType(type,value){ - if(type){ - if(typeof type == 'string' && type != 'any' && - (type == 'null' ? value !== null : typeof value != type) && - !(value instanceof Array && type == 'array') && - !(value instanceof Date && type == 'date') && - !(type == 'integer' && value%1===0)){ - return [{property:path,message:(typeof value) + " value found, but a " + type + " is required"}]; - } - if(type instanceof Array){ - var unionErrors=[]; - for(var j = 0; j < type.length; j++){ // a union type - if(!(unionErrors=checkType(type[j],value)).length){ - break; - } - } - if(unionErrors.length){ - return unionErrors; - } - }else if(typeof type == 'object'){ - var priorErrors = errors; - errors = []; - checkProp(value,type,path); - var theseErrors = errors; - errors = priorErrors; - return theseErrors; - } - } - return []; - } - if(value === undefined){ - if(schema.required){ - addError("is missing and it is required"); - } - }else{ - errors = errors.concat(checkType(getType(schema),value)); - if(schema.disallow && !checkType(schema.disallow,value).length){ - addError(" disallowed value was matched"); - } - if(value !== null){ - if(value instanceof Array){ - if(schema.items){ - var itemsIsArray = schema.items instanceof Array; - var propDef = schema.items; - for (i = 0, l = value.length; i < l; i += 1) { - if (itemsIsArray) - propDef = schema.items[i]; - if (options.coerce) - value[i] = options.coerce(value[i], propDef); - errors.concat(checkProp(value[i],propDef,path,i)); - } - } - if(schema.minItems && value.length < schema.minItems){ - addError("There must be a minimum of " + schema.minItems + " in the array"); - } - if(schema.maxItems && value.length > schema.maxItems){ - addError("There must be a maximum of " + schema.maxItems + " in the array"); - } - }else if(schema.properties || schema.additionalProperties){ - errors.concat(checkObj(value, schema.properties, path, schema.additionalProperties)); - } - if(schema.pattern && typeof value == 'string' && !value.match(schema.pattern)){ - addError("does not match the regex pattern " + schema.pattern); - } - if(schema.maxLength && typeof value == 'string' && value.length > schema.maxLength){ - addError("may only be " + schema.maxLength + " characters long"); - } - if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){ - addError("must be at least " + schema.minLength + " characters long"); - } - if(typeof schema.minimum !== undefined && typeof value == typeof schema.minimum && - schema.minimum > value){ - addError("must have a minimum value of " + schema.minimum); - } - if(typeof schema.maximum !== undefined && typeof value == typeof schema.maximum && - schema.maximum < value){ - addError("must have a maximum value of " + schema.maximum); - } - if(schema['enum']){ - var enumer = schema['enum']; - l = enumer.length; - var found; - for(var j = 0; j < l; j++){ - if(enumer[j]===value){ - found=1; - break; - } - } - if(!found){ - addError("does not have a value in the enumeration " + enumer.join(", ")); - } - } - if(typeof schema.maxDecimal == 'number' && - (value.toString().match(new RegExp("\\.[0-9]{" + (schema.maxDecimal + 1) + ",}")))){ - addError("may only have " + schema.maxDecimal + " digits of decimal places"); - } - } - } - return null; - } - // validate an object against a schema - function checkObj(instance,objTypeDef,path,additionalProp){ - - if(typeof objTypeDef =='object'){ - if(typeof instance != 'object' || instance instanceof Array){ - errors.push({property:path,message:"an object is required"}); - } - - for(var i in objTypeDef){ - if(objTypeDef.hasOwnProperty(i)){ - var value = instance[i]; - // skip _not_ specified properties - if (value === undefined && options.existingOnly) continue; - var propDef = objTypeDef[i]; - // set default - if(value === undefined && propDef["default"]){ - value = instance[i] = propDef["default"]; - } - if(options.coerce && i in instance){ - value = instance[i] = options.coerce(value, propDef); - } - checkProp(value,propDef,path,i); - } - } - } - for(i in instance){ - if(instance.hasOwnProperty(i) && !(i.charAt(0) == '_' && i.charAt(1) == '_') && objTypeDef && !objTypeDef[i] && additionalProp===false){ - if (options.filter) { - delete instance[i]; - continue; - } else { - errors.push({property:path,message:(typeof value) + "The property " + i + - " is not defined in the schema and the schema does not allow additional properties"}); - } - } - var requires = objTypeDef && objTypeDef[i] && objTypeDef[i].requires; - if(requires && !(requires in instance)){ - errors.push({property:path,message:"the presence of the property " + i + " requires that " + requires + " also be present"}); - } - value = instance[i]; - if(additionalProp && (!(objTypeDef && typeof objTypeDef == 'object') || !(i in objTypeDef))){ - if(options.coerce){ - value = instance[i] = options.coerce(value, additionalProp); - } - checkProp(value,additionalProp,path,i); - } - if(!_changing && value && value.$schema){ - errors = errors.concat(checkProp(value,value.$schema,path,i)); - } - } - return errors; - } - if(schema){ - checkProp(instance,schema,'',_changing || ''); - } - if(!_changing && instance && instance.$schema){ - checkProp(instance,instance.$schema,'',''); - } - return {valid:!errors.length,errors:errors}; -}; -exports.mustBeValid = function(result){ - // summary: - // This checks to ensure that the result is valid and will throw an appropriate error message if it is not - // result: the result returned from checkPropertyChange or validate - if(!result.valid){ - throw new TypeError(result.errors.map(function(error){return "for property " + error.property + ': ' + error.message;}).join(", \n")); - } -} - -return exports; -})); diff --git a/truebit-implementation/node_modules/json-schema/package.json b/truebit-implementation/node_modules/json-schema/package.json deleted file mode 100644 index 240c7e20..00000000 --- a/truebit-implementation/node_modules/json-schema/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "json-schema@0.2.3", - "_id": "json-schema@0.2.3", - "_inBundle": false, - "_integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "_location": "/json-schema", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "json-schema@0.2.3", - "name": "json-schema", - "escapedName": "json-schema", - "rawSpec": "0.2.3", - "saveSpec": null, - "fetchSpec": "0.2.3" - }, - "_requiredBy": [ - "/jsprim" - ], - "_resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "_shasum": "b480c892e59a2f05954ce727bd3f2a4e882f9e13", - "_spec": "json-schema@0.2.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/jsprim", - "author": { - "name": "Kris Zyp" - }, - "bugs": { - "url": "https://github.com/kriszyp/json-schema/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "JSON Schema validation and specifications", - "devDependencies": { - "vows": "*" - }, - "directories": { - "lib": "./lib" - }, - "homepage": "https://github.com/kriszyp/json-schema#readme", - "keywords": [ - "json", - "schema" - ], - "licenses": [ - { - "type": "AFLv2.1", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43" - }, - { - "type": "BSD", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13" - } - ], - "main": "./lib/validate.js", - "maintainers": [ - { - "name": "Kris Zyp", - "email": "kriszyp@gmail.com" - } - ], - "name": "json-schema", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/kriszyp/json-schema.git" - }, - "scripts": { - "test": "echo TESTS DISABLED vows --spec test/*.js" - }, - "version": "0.2.3" -} diff --git a/truebit-implementation/node_modules/json-schema/test/tests.js b/truebit-implementation/node_modules/json-schema/test/tests.js deleted file mode 100644 index 2938aea7..00000000 --- a/truebit-implementation/node_modules/json-schema/test/tests.js +++ /dev/null @@ -1,95 +0,0 @@ -var assert = require('assert'); -var vows = require('vows'); -var path = require('path'); -var fs = require('fs'); - -var validate = require('../lib/validate').validate; - - -var revision = 'draft-03'; -var schemaRoot = path.join(__dirname, '..', revision); -var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ]; -var schemas = {}; - -schemaNames.forEach(function(name) { - var file = path.join(schemaRoot, name); - schemas[name] = loadSchema(file); -}); - -schemaNames.forEach(function(name) { - var s, n = name+'-nsd', f = path.join(schemaRoot, name); - schemas[n] = loadSchema(f); - s = schemas[n]; - delete s['$schema']; -}); - -function loadSchema(path) { - var data = fs.readFileSync(path, 'utf-8'); - var schema = JSON.parse(data); - return schema; -} - -function resultIsValid() { - return function(result) { - assert.isObject(result); - //assert.isBoolean(result.valid); - assert.equal(typeof(result.valid), 'boolean'); - assert.isArray(result.errors); - for (var i = 0; i < result.errors.length; i++) { - assert.notEqual(result.errors[i], null, 'errors['+i+'] is null'); - } - } -} - -function assertValidates(doc, schema) { - var context = {}; - - context[': validate('+doc+', '+schema+')'] = { - topic: validate(schemas[doc], schemas[schema]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { - // XXX work-around for bug in vows: [null] chokes it - if (result.errors[0] == null) assert.fail('(errors contains null)'); - assert.length(result.errors, 0); - } - }; - - return context; -} - -function assertSelfValidates(doc) { - var context = {}; - - context[': validate('+doc+')'] = { - topic: validate(schemas[doc]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { assert.length(result.errors, 0); } - }; - - return context; -} - -var suite = vows.describe('JSON Schema').addBatch({ - 'Core-NSD self-validates': assertSelfValidates('schema-nsd'), - 'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'), - 'Core-NSD/Core': assertValidates('schema-nsd', 'schema'), - - 'Core self-validates': assertSelfValidates('schema'), - 'Core/Core': assertValidates('schema', 'schema'), - - 'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'), - 'Hyper self-validates': assertSelfValidates('hyper-schema'), - 'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'), - 'Hyper/Core': assertValidates('hyper-schema', 'schema'), - - 'Links-NSD self-validates': assertSelfValidates('links-nsd'), - 'Links self-validates': assertSelfValidates('links'), - 'Links/Hyper': assertValidates('links', 'hyper-schema'), - 'Links/Core': assertValidates('links', 'schema'), - - 'Json-Ref self-validates': assertSelfValidates('json-ref'), - 'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'), - 'Json-Ref/Core': assertValidates('json-ref', 'schema') -}).export(module); diff --git a/truebit-implementation/node_modules/json-stringify-safe/.npmignore b/truebit-implementation/node_modules/json-stringify-safe/.npmignore deleted file mode 100644 index 17d6b367..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/*.tgz diff --git a/truebit-implementation/node_modules/json-stringify-safe/CHANGELOG.md b/truebit-implementation/node_modules/json-stringify-safe/CHANGELOG.md deleted file mode 100644 index 42bcb60a..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/CHANGELOG.md +++ /dev/null @@ -1,14 +0,0 @@ -## Unreleased -- Fixes stringify to only take ancestors into account when checking - circularity. - It previously assumed every visited object was circular which led to [false - positives][issue9]. - Uses the tiny serializer I wrote for [Must.js][must] a year and a half ago. -- Fixes calling the `replacer` function in the proper context (`thisArg`). -- Fixes calling the `cycleReplacer` function in the proper context (`thisArg`). -- Speeds serializing by a factor of - Big-O(h-my-god-it-linearly-searched-every-object) it had ever seen. Searching - only the ancestors for a circular references speeds up things considerably. - -[must]: https://github.com/moll/js-must -[issue9]: https://github.com/isaacs/json-stringify-safe/issues/9 diff --git a/truebit-implementation/node_modules/json-stringify-safe/LICENSE b/truebit-implementation/node_modules/json-stringify-safe/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/json-stringify-safe/Makefile b/truebit-implementation/node_modules/json-stringify-safe/Makefile deleted file mode 100644 index 36088c72..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -NODE_OPTS = -TEST_OPTS = - -love: - @echo "Feel like makin' love." - -test: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot $(TEST_OPTS) - -spec: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec $(TEST_OPTS) - -autotest: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R dot --watch $(TEST_OPTS) - -autospec: - @node $(NODE_OPTS) ./node_modules/.bin/_mocha -R spec --watch $(TEST_OPTS) - -pack: - @file=$$(npm pack); echo "$$file"; tar tf "$$file" - -publish: - npm publish - -tag: - git tag "v$$(node -e 'console.log(require("./package").version)')" - -clean: - rm -f *.tgz - npm prune --production - -.PHONY: love -.PHONY: test spec autotest autospec -.PHONY: pack publish tag -.PHONY: clean diff --git a/truebit-implementation/node_modules/json-stringify-safe/README.md b/truebit-implementation/node_modules/json-stringify-safe/README.md deleted file mode 100644 index a11f302a..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# json-stringify-safe - -Like JSON.stringify, but doesn't throw on circular references. - -## Usage - -Takes the same arguments as `JSON.stringify`. - -```javascript -var stringify = require('json-stringify-safe'); -var circularObj = {}; -circularObj.circularRef = circularObj; -circularObj.list = [ circularObj, circularObj ]; -console.log(stringify(circularObj, null, 2)); -``` - -Output: - -```json -{ - "circularRef": "[Circular]", - "list": [ - "[Circular]", - "[Circular]" - ] -} -``` - -## Details - -``` -stringify(obj, serializer, indent, decycler) -``` - -The first three arguments are the same as to JSON.stringify. The last -is an argument that's only used when the object has been seen already. - -The default `decycler` function returns the string `'[Circular]'`. -If, for example, you pass in `function(k,v){}` (return nothing) then it -will prune cycles. If you pass in `function(k,v){ return {foo: 'bar'}}`, -then cyclical objects will always be represented as `{"foo":"bar"}` in -the result. - -``` -stringify.getSerialize(serializer, decycler) -``` - -Returns a serializer that can be used elsewhere. This is the actual -function that's passed to JSON.stringify. - -**Note** that the function returned from `getSerialize` is stateful for now, so -do **not** use it more than once. diff --git a/truebit-implementation/node_modules/json-stringify-safe/package.json b/truebit-implementation/node_modules/json-stringify-safe/package.json deleted file mode 100644 index d57d160a..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "json-stringify-safe@~5.0.1", - "_id": "json-stringify-safe@5.0.1", - "_inBundle": false, - "_integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "_location": "/json-stringify-safe", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "json-stringify-safe@~5.0.1", - "name": "json-stringify-safe", - "escapedName": "json-stringify-safe", - "rawSpec": "~5.0.1", - "saveSpec": null, - "fetchSpec": "~5.0.1" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "_shasum": "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb", - "_spec": "json-stringify-safe@~5.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/json-stringify-safe/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Andri Möll", - "email": "andri@dot.ee", - "url": "http://themoll.com" - } - ], - "deprecated": false, - "description": "Like JSON.stringify, but doesn't blow up on circular refs.", - "devDependencies": { - "mocha": ">= 2.1.0 < 3", - "must": ">= 0.12 < 0.13", - "sinon": ">= 1.12.2 < 2" - }, - "homepage": "https://github.com/isaacs/json-stringify-safe", - "keywords": [ - "json", - "stringify", - "circular", - "safe" - ], - "license": "ISC", - "main": "stringify.js", - "name": "json-stringify-safe", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/json-stringify-safe.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "5.0.1" -} diff --git a/truebit-implementation/node_modules/json-stringify-safe/stringify.js b/truebit-implementation/node_modules/json-stringify-safe/stringify.js deleted file mode 100644 index 124a4521..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/stringify.js +++ /dev/null @@ -1,27 +0,0 @@ -exports = module.exports = stringify -exports.getSerialize = serializer - -function stringify(obj, replacer, spaces, cycleReplacer) { - return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces) -} - -function serializer(replacer, cycleReplacer) { - var stack = [], keys = [] - - if (cycleReplacer == null) cycleReplacer = function(key, value) { - if (stack[0] === value) return "[Circular ~]" - return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]" - } - - return function(key, value) { - if (stack.length > 0) { - var thisPos = stack.indexOf(this) - ~thisPos ? stack.splice(thisPos + 1) : stack.push(this) - ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key) - if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value) - } - else stack.push(value) - - return replacer == null ? value : replacer.call(this, key, value) - } -} diff --git a/truebit-implementation/node_modules/json-stringify-safe/test/mocha.opts b/truebit-implementation/node_modules/json-stringify-safe/test/mocha.opts deleted file mode 100644 index 2544e586..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/test/mocha.opts +++ /dev/null @@ -1,2 +0,0 @@ ---recursive ---require must diff --git a/truebit-implementation/node_modules/json-stringify-safe/test/stringify_test.js b/truebit-implementation/node_modules/json-stringify-safe/test/stringify_test.js deleted file mode 100644 index 5b325831..00000000 --- a/truebit-implementation/node_modules/json-stringify-safe/test/stringify_test.js +++ /dev/null @@ -1,246 +0,0 @@ -var Sinon = require("sinon") -var stringify = require("..") -function jsonify(obj) { return JSON.stringify(obj, null, 2) } - -describe("Stringify", function() { - it("must stringify circular objects", function() { - var obj = {name: "Alice"} - obj.self = obj - var json = stringify(obj, null, 2) - json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) - }) - - it("must stringify circular objects with intermediaries", function() { - var obj = {name: "Alice"} - obj.identity = {self: obj} - var json = stringify(obj, null, 2) - json.must.eql(jsonify({name: "Alice", identity: {self: "[Circular ~]"}})) - }) - - it("must stringify circular objects deeper", function() { - var obj = {name: "Alice", child: {name: "Bob"}} - obj.child.self = obj.child - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", - child: {name: "Bob", self: "[Circular ~.child]"} - })) - }) - - it("must stringify circular objects deeper with intermediaries", function() { - var obj = {name: "Alice", child: {name: "Bob"}} - obj.child.identity = {self: obj.child} - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", - child: {name: "Bob", identity: {self: "[Circular ~.child]"}} - })) - }) - - it("must stringify circular objects in an array", function() { - var obj = {name: "Alice"} - obj.self = [obj, obj] - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", self: ["[Circular ~]", "[Circular ~]"] - })) - }) - - it("must stringify circular objects deeper in an array", function() { - var obj = {name: "Alice", children: [{name: "Bob"}, {name: "Eve"}]} - obj.children[0].self = obj.children[0] - obj.children[1].self = obj.children[1] - - stringify(obj, null, 2).must.eql(jsonify({ - name: "Alice", - children: [ - {name: "Bob", self: "[Circular ~.children.0]"}, - {name: "Eve", self: "[Circular ~.children.1]"} - ] - })) - }) - - it("must stringify circular arrays", function() { - var obj = [] - obj.push(obj) - obj.push(obj) - var json = stringify(obj, null, 2) - json.must.eql(jsonify(["[Circular ~]", "[Circular ~]"])) - }) - - it("must stringify circular arrays with intermediaries", function() { - var obj = [] - obj.push({name: "Alice", self: obj}) - obj.push({name: "Bob", self: obj}) - - stringify(obj, null, 2).must.eql(jsonify([ - {name: "Alice", self: "[Circular ~]"}, - {name: "Bob", self: "[Circular ~]"} - ])) - }) - - it("must stringify repeated objects in objects", function() { - var obj = {} - var alice = {name: "Alice"} - obj.alice1 = alice - obj.alice2 = alice - - stringify(obj, null, 2).must.eql(jsonify({ - alice1: {name: "Alice"}, - alice2: {name: "Alice"} - })) - }) - - it("must stringify repeated objects in arrays", function() { - var alice = {name: "Alice"} - var obj = [alice, alice] - var json = stringify(obj, null, 2) - json.must.eql(jsonify([{name: "Alice"}, {name: "Alice"}])) - }) - - it("must call given decycler and use its output", function() { - var obj = {} - obj.a = obj - obj.b = obj - - var decycle = Sinon.spy(function() { return decycle.callCount }) - var json = stringify(obj, null, 2, decycle) - json.must.eql(jsonify({a: 1, b: 2}, null, 2)) - - decycle.callCount.must.equal(2) - decycle.thisValues[0].must.equal(obj) - decycle.args[0][0].must.equal("a") - decycle.args[0][1].must.equal(obj) - decycle.thisValues[1].must.equal(obj) - decycle.args[1][0].must.equal("b") - decycle.args[1][1].must.equal(obj) - }) - - it("must call replacer and use its output", function() { - var obj = {name: "Alice", child: {name: "Bob"}} - - var replacer = Sinon.spy(bangString) - var json = stringify(obj, replacer, 2) - json.must.eql(jsonify({name: "Alice!", child: {name: "Bob!"}})) - - replacer.callCount.must.equal(4) - replacer.args[0][0].must.equal("") - replacer.args[0][1].must.equal(obj) - replacer.thisValues[1].must.equal(obj) - replacer.args[1][0].must.equal("name") - replacer.args[1][1].must.equal("Alice") - replacer.thisValues[2].must.equal(obj) - replacer.args[2][0].must.equal("child") - replacer.args[2][1].must.equal(obj.child) - replacer.thisValues[3].must.equal(obj.child) - replacer.args[3][0].must.equal("name") - replacer.args[3][1].must.equal("Bob") - }) - - it("must call replacer after describing circular references", function() { - var obj = {name: "Alice"} - obj.self = obj - - var replacer = Sinon.spy(bangString) - var json = stringify(obj, replacer, 2) - json.must.eql(jsonify({name: "Alice!", self: "[Circular ~]!"})) - - replacer.callCount.must.equal(3) - replacer.args[0][0].must.equal("") - replacer.args[0][1].must.equal(obj) - replacer.thisValues[1].must.equal(obj) - replacer.args[1][0].must.equal("name") - replacer.args[1][1].must.equal("Alice") - replacer.thisValues[2].must.equal(obj) - replacer.args[2][0].must.equal("self") - replacer.args[2][1].must.equal("[Circular ~]") - }) - - it("must call given decycler and use its output for nested objects", - function() { - var obj = {} - obj.a = obj - obj.b = {self: obj} - - var decycle = Sinon.spy(function() { return decycle.callCount }) - var json = stringify(obj, null, 2, decycle) - json.must.eql(jsonify({a: 1, b: {self: 2}})) - - decycle.callCount.must.equal(2) - decycle.args[0][0].must.equal("a") - decycle.args[0][1].must.equal(obj) - decycle.args[1][0].must.equal("self") - decycle.args[1][1].must.equal(obj) - }) - - it("must use decycler's output when it returned null", function() { - var obj = {a: "b"} - obj.self = obj - obj.selves = [obj, obj] - - function decycle() { return null } - stringify(obj, null, 2, decycle).must.eql(jsonify({ - a: "b", - self: null, - selves: [null, null] - })) - }) - - it("must use decycler's output when it returned undefined", function() { - var obj = {a: "b"} - obj.self = obj - obj.selves = [obj, obj] - - function decycle() {} - stringify(obj, null, 2, decycle).must.eql(jsonify({ - a: "b", - selves: [null, null] - })) - }) - - it("must throw given a decycler that returns a cycle", function() { - var obj = {} - obj.self = obj - var err - function identity(key, value) { return value } - try { stringify(obj, null, 2, identity) } catch (ex) { err = ex } - err.must.be.an.instanceof(TypeError) - }) - - describe(".getSerialize", function() { - it("must stringify circular objects", function() { - var obj = {a: "b"} - obj.circularRef = obj - obj.list = [obj, obj] - - var json = JSON.stringify(obj, stringify.getSerialize(), 2) - json.must.eql(jsonify({ - "a": "b", - "circularRef": "[Circular ~]", - "list": ["[Circular ~]", "[Circular ~]"] - })) - }) - - // This is the behavior as of Mar 3, 2015. - // The serializer function keeps state inside the returned function and - // so far I'm not sure how to not do that. JSON.stringify's replacer is not - // called _after_ serialization. - xit("must return a function that could be called twice", function() { - var obj = {name: "Alice"} - obj.self = obj - - var json - var serializer = stringify.getSerialize() - - json = JSON.stringify(obj, serializer, 2) - json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) - - json = JSON.stringify(obj, serializer, 2) - json.must.eql(jsonify({name: "Alice", self: "[Circular ~]"})) - }) - }) -}) - -function bangString(key, value) { - return typeof value == "string" ? value + "!" : value -} diff --git a/truebit-implementation/node_modules/jsonfile/.npmignore b/truebit-implementation/node_modules/jsonfile/.npmignore deleted file mode 100644 index cefaa67a..00000000 --- a/truebit-implementation/node_modules/jsonfile/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -test/ -.travis.yml \ No newline at end of file diff --git a/truebit-implementation/node_modules/jsonfile/CHANGELOG.md b/truebit-implementation/node_modules/jsonfile/CHANGELOG.md deleted file mode 100644 index 66fcbb42..00000000 --- a/truebit-implementation/node_modules/jsonfile/CHANGELOG.md +++ /dev/null @@ -1,126 +0,0 @@ -2.4.0 / 2016-09-15 ------------------- -### Changed -- added optional support for `graceful-fs` [#62] - -2.3.1 / 2016-05-13 ------------------- -- fix to support BOM. [#45][#45] - -2.3.0 / 2016-04-16 ------------------- -- add `throws` to `readFile()`. See [#39][#39] -- add support for any arbitrary `fs` module. Useful with [mock-fs](https://www.npmjs.com/package/mock-fs) - -2.2.3 / 2015-10-14 ------------------- -- include file name in parse error. See: https://github.com/jprichardson/node-jsonfile/pull/34 - -2.2.2 / 2015-09-16 ------------------- -- split out tests into separate files -- fixed `throws` when set to `true` in `readFileSync()`. See: https://github.com/jprichardson/node-jsonfile/pull/33 - -2.2.1 / 2015-06-25 ------------------- -- fixed regression when passing in string as encoding for options in `writeFile()` and `writeFileSync()`. See: https://github.com/jprichardson/node-jsonfile/issues/28 - -2.2.0 / 2015-06-25 ------------------- -- added `options.spaces` to `writeFile()` and `writeFileSync()` - -2.1.2 / 2015-06-22 ------------------- -- fixed if passed `readFileSync(file, 'utf8')`. See: https://github.com/jprichardson/node-jsonfile/issues/25 - -2.1.1 / 2015-06-19 ------------------- -- fixed regressions if `null` is passed for options. See: https://github.com/jprichardson/node-jsonfile/issues/24 - -2.1.0 / 2015-06-19 ------------------- -- cleanup: JavaScript Standard Style, rename files, dropped terst for assert -- methods now support JSON revivers/replacers - -2.0.1 / 2015-05-24 ------------------- -- update license attribute https://github.com/jprichardson/node-jsonfile/pull/21 - -2.0.0 / 2014-07-28 ------------------- -* added `\n` to end of file on write. [#14](https://github.com/jprichardson/node-jsonfile/pull/14) -* added `options.throws` to `readFileSync()` -* dropped support for Node v0.8 - -1.2.0 / 2014-06-29 ------------------- -* removed semicolons -* bugfix: passed `options` to `fs.readFile` and `fs.readFileSync`. This technically changes behavior, but -changes it according to docs. [#12][#12] - -1.1.1 / 2013-11-11 ------------------- -* fixed catching of callback bug (ffissore / #5) - -1.1.0 / 2013-10-11 ------------------- -* added `options` param to methods, (seanodell / #4) - -1.0.1 / 2013-09-05 ------------------- -* removed `homepage` field from package.json to remove NPM warning - -1.0.0 / 2013-06-28 ------------------- -* added `.npmignore`, #1 -* changed spacing default from `4` to `2` to follow Node conventions - -0.0.1 / 2012-09-10 ------------------- -* Initial release. - -[#45]: https://github.com/jprichardson/node-jsonfile/issues/45 "Reading of UTF8-encoded (w/ BOM) files fails" -[#44]: https://github.com/jprichardson/node-jsonfile/issues/44 "Extra characters in written file" -[#43]: https://github.com/jprichardson/node-jsonfile/issues/43 "Prettyfy json when written to file" -[#42]: https://github.com/jprichardson/node-jsonfile/pull/42 "Moved fs.readFileSync within the try/catch" -[#41]: https://github.com/jprichardson/node-jsonfile/issues/41 "Linux: Hidden file not working" -[#40]: https://github.com/jprichardson/node-jsonfile/issues/40 "autocreate folder doesnt work from Path-value" -[#39]: https://github.com/jprichardson/node-jsonfile/pull/39 "Add `throws` option for readFile (async)" -[#38]: https://github.com/jprichardson/node-jsonfile/pull/38 "Update README.md writeFile[Sync] signature" -[#37]: https://github.com/jprichardson/node-jsonfile/pull/37 "support append file" -[#36]: https://github.com/jprichardson/node-jsonfile/pull/36 "Add typescript definition file." -[#35]: https://github.com/jprichardson/node-jsonfile/pull/35 "Add typescript definition file." -[#34]: https://github.com/jprichardson/node-jsonfile/pull/34 "readFile JSON parse error includes filename" -[#33]: https://github.com/jprichardson/node-jsonfile/pull/33 "fix throw->throws typo in readFileSync()" -[#32]: https://github.com/jprichardson/node-jsonfile/issues/32 "readFile & readFileSync can possible have strip-comments as an option?" -[#31]: https://github.com/jprichardson/node-jsonfile/pull/31 "[Modify] Support string include is unicode escape string" -[#30]: https://github.com/jprichardson/node-jsonfile/issues/30 "How to use Jsonfile package in Meteor.js App?" -[#29]: https://github.com/jprichardson/node-jsonfile/issues/29 "writefile callback if no error?" -[#28]: https://github.com/jprichardson/node-jsonfile/issues/28 "writeFile options argument broken " -[#27]: https://github.com/jprichardson/node-jsonfile/pull/27 "Use svg instead of png to get better image quality" -[#26]: https://github.com/jprichardson/node-jsonfile/issues/26 "Breaking change to fs-extra" -[#25]: https://github.com/jprichardson/node-jsonfile/issues/25 "support string encoding param for read methods" -[#24]: https://github.com/jprichardson/node-jsonfile/issues/24 "readFile: Passing in null options with a callback throws an error" -[#23]: https://github.com/jprichardson/node-jsonfile/pull/23 "Add appendFile and appendFileSync" -[#22]: https://github.com/jprichardson/node-jsonfile/issues/22 "Default value for spaces in readme.md is outdated" -[#21]: https://github.com/jprichardson/node-jsonfile/pull/21 "Update license attribute" -[#20]: https://github.com/jprichardson/node-jsonfile/issues/20 "Add simple caching functionallity" -[#19]: https://github.com/jprichardson/node-jsonfile/pull/19 "Add appendFileSync method" -[#18]: https://github.com/jprichardson/node-jsonfile/issues/18 "Add updateFile and updateFileSync methods" -[#17]: https://github.com/jprichardson/node-jsonfile/issues/17 "seem read & write sync has sequentially problem" -[#16]: https://github.com/jprichardson/node-jsonfile/pull/16 "export spaces defaulted to null" -[#15]: https://github.com/jprichardson/node-jsonfile/issues/15 "`jsonfile.spaces` should default to `null`" -[#14]: https://github.com/jprichardson/node-jsonfile/pull/14 "Add EOL at EOF" -[#13]: https://github.com/jprichardson/node-jsonfile/issues/13 "Add a final newline" -[#12]: https://github.com/jprichardson/node-jsonfile/issues/12 "readFile doesn't accept options" -[#11]: https://github.com/jprichardson/node-jsonfile/pull/11 "Added try,catch to readFileSync" -[#10]: https://github.com/jprichardson/node-jsonfile/issues/10 "No output or error from writeFile" -[#9]: https://github.com/jprichardson/node-jsonfile/pull/9 "Change 'js' to 'jf' in example." -[#8]: https://github.com/jprichardson/node-jsonfile/pull/8 "Updated forgotten module.exports to me." -[#7]: https://github.com/jprichardson/node-jsonfile/pull/7 "Add file name in error message" -[#6]: https://github.com/jprichardson/node-jsonfile/pull/6 "Use graceful-fs when possible" -[#5]: https://github.com/jprichardson/node-jsonfile/pull/5 "Jsonfile doesn't behave nicely when used inside a test suite." -[#4]: https://github.com/jprichardson/node-jsonfile/pull/4 "Added options parameter to writeFile and writeFileSync" -[#3]: https://github.com/jprichardson/node-jsonfile/issues/3 "test2" -[#2]: https://github.com/jprichardson/node-jsonfile/issues/2 "homepage field must be a string url. Deleted." -[#1]: https://github.com/jprichardson/node-jsonfile/pull/1 "adding an `.npmignore` file" diff --git a/truebit-implementation/node_modules/jsonfile/LICENSE b/truebit-implementation/node_modules/jsonfile/LICENSE deleted file mode 100644 index cb7e807b..00000000 --- a/truebit-implementation/node_modules/jsonfile/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2015, JP Richardson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files -(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/jsonfile/README.md b/truebit-implementation/node_modules/jsonfile/README.md deleted file mode 100644 index 54bca053..00000000 --- a/truebit-implementation/node_modules/jsonfile/README.md +++ /dev/null @@ -1,162 +0,0 @@ -Node.js - jsonfile -================ - -Easily read/write JSON files. - -[![npm Package](https://img.shields.io/npm/v/jsonfile.svg?style=flat-square)](https://www.npmjs.org/package/jsonfile) -[![build status](https://secure.travis-ci.org/jprichardson/node-jsonfile.svg)](http://travis-ci.org/jprichardson/node-jsonfile) -[![windows Build status](https://img.shields.io/appveyor/ci/jprichardson/node-jsonfile/master.svg?label=windows%20build)](https://ci.appveyor.com/project/jprichardson/node-jsonfile/branch/master) - -Standard JavaScript - -Why? ----- - -Writing `JSON.stringify()` and then `fs.writeFile()` and `JSON.parse()` with `fs.readFile()` enclosed in `try/catch` blocks became annoying. - - - -Installation ------------- - - npm install --save jsonfile - - - -API ---- - -### readFile(filename, [options], callback) - -`options` (`object`, default `undefined`): Pass in any `fs.readFile` options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse). - - `throws` (`boolean`, default: `true`). If `JSON.parse` throws an error, pass this error to the callback. - If `false`, returns `null` for the object. - - -```js -var jsonfile = require('jsonfile') -var file = '/tmp/data.json' -jsonfile.readFile(file, function(err, obj) { - console.dir(obj) -}) -``` - - -### readFileSync(filename, [options]) - -`options` (`object`, default `undefined`): Pass in any `fs.readFileSync` options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse). -- `throws` (`boolean`, default: `true`). If `JSON.parse` throws an error, throw the error. -If `false`, returns `null` for the object. - -```js -var jsonfile = require('jsonfile') -var file = '/tmp/data.json' - -console.dir(jsonfile.readFileSync(file)) -``` - - -### writeFile(filename, obj, [options], callback) - -`options`: Pass in any `fs.writeFile` options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`. - - -```js -var jsonfile = require('jsonfile') - -var file = '/tmp/data.json' -var obj = {name: 'JP'} - -jsonfile.writeFile(file, obj, function (err) { - console.error(err) -}) -``` - -**formatting with spaces:** - -```js -var jsonfile = require('jsonfile') - -var file = '/tmp/data.json' -var obj = {name: 'JP'} - -jsonfile.writeFile(file, obj, {spaces: 2}, function(err) { - console.error(err) -}) -``` - - -### writeFileSync(filename, obj, [options]) - -`options`: Pass in any `fs.writeFileSync` options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`. - -```js -var jsonfile = require('jsonfile') - -var file = '/tmp/data.json' -var obj = {name: 'JP'} - -jsonfile.writeFileSync(file, obj) -``` - -**formatting with spaces:** - -```js -var jsonfile = require('jsonfile') - -var file = '/tmp/data.json' -var obj = {name: 'JP'} - -jsonfile.writeFileSync(file, obj, {spaces: 2}) -``` - - - -### spaces - -Global configuration to set spaces to indent JSON files. - -**default:** `null` - -```js -var jsonfile = require('jsonfile') - -jsonfile.spaces = 4 - -var file = '/tmp/data.json' -var obj = {name: 'JP'} - -// json file has four space indenting now -jsonfile.writeFile(file, obj, function (err) { - console.error(err) -}) -``` - -Note, it's bound to `this.spaces`. So, if you do this: - -```js -var myObj = {} -myObj.writeJsonSync = jsonfile.writeFileSync -// => this.spaces = null -``` - -Could do the following: - -```js -var jsonfile = require('jsonfile') -jsonfile.spaces = 4 -jsonfile.writeFileSync(file, obj) // will have 4 spaces indentation - -var myCrazyObj = {spaces: 32} -myCrazyObj.writeJsonSync = jsonfile.writeFileSync -myCrazyObj.writeJsonSync(file, obj) // will have 32 space indentation -myCrazyObj.writeJsonSync(file, obj, {spaces: 2}) // will have only 2 -``` - - -License -------- - -(MIT License) - -Copyright 2012-2016, JP Richardson diff --git a/truebit-implementation/node_modules/jsonfile/appveyor.yml b/truebit-implementation/node_modules/jsonfile/appveyor.yml deleted file mode 100644 index 872af18d..00000000 --- a/truebit-implementation/node_modules/jsonfile/appveyor.yml +++ /dev/null @@ -1,28 +0,0 @@ -# Test against this version of Node.js -environment: - matrix: - # node.js - - nodejs_version: "0.10" - - nodejs_version: "0.12" - - nodejs_version: "4" - - nodejs_version: "5" - - nodejs_version: "6" - -# Install scripts. (runs after repo cloning) -install: - # Get the latest stable version of Node.js or io.js - - ps: Install-Product node $env:nodejs_version - # install modules - - npm config set loglevel warn - - npm install --silent - -# Post-install test scripts. -test_script: - # Output useful info for debugging. - - node --version - - npm --version - # run tests - - npm test - -# Don't actually build. -build: off diff --git a/truebit-implementation/node_modules/jsonfile/index.js b/truebit-implementation/node_modules/jsonfile/index.js deleted file mode 100644 index 7111e15a..00000000 --- a/truebit-implementation/node_modules/jsonfile/index.js +++ /dev/null @@ -1,133 +0,0 @@ -var _fs -try { - _fs = require('graceful-fs') -} catch (_) { - _fs = require('fs') -} - -function readFile (file, options, callback) { - if (callback == null) { - callback = options - options = {} - } - - if (typeof options === 'string') { - options = {encoding: options} - } - - options = options || {} - var fs = options.fs || _fs - - var shouldThrow = true - // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead - if ('passParsingErrors' in options) { - shouldThrow = options.passParsingErrors - } else if ('throws' in options) { - shouldThrow = options.throws - } - - fs.readFile(file, options, function (err, data) { - if (err) return callback(err) - - data = stripBom(data) - - var obj - try { - obj = JSON.parse(data, options ? options.reviver : null) - } catch (err2) { - if (shouldThrow) { - err2.message = file + ': ' + err2.message - return callback(err2) - } else { - return callback(null, null) - } - } - - callback(null, obj) - }) -} - -function readFileSync (file, options) { - options = options || {} - if (typeof options === 'string') { - options = {encoding: options} - } - - var fs = options.fs || _fs - - var shouldThrow = true - // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead - if ('passParsingErrors' in options) { - shouldThrow = options.passParsingErrors - } else if ('throws' in options) { - shouldThrow = options.throws - } - - var content = fs.readFileSync(file, options) - content = stripBom(content) - - try { - return JSON.parse(content, options.reviver) - } catch (err) { - if (shouldThrow) { - err.message = file + ': ' + err.message - throw err - } else { - return null - } - } -} - -function writeFile (file, obj, options, callback) { - if (callback == null) { - callback = options - options = {} - } - options = options || {} - var fs = options.fs || _fs - - var spaces = typeof options === 'object' && options !== null - ? 'spaces' in options - ? options.spaces : this.spaces - : this.spaces - - var str = '' - try { - str = JSON.stringify(obj, options ? options.replacer : null, spaces) + '\n' - } catch (err) { - if (callback) return callback(err, null) - } - - fs.writeFile(file, str, options, callback) -} - -function writeFileSync (file, obj, options) { - options = options || {} - var fs = options.fs || _fs - - var spaces = typeof options === 'object' && options !== null - ? 'spaces' in options - ? options.spaces : this.spaces - : this.spaces - - var str = JSON.stringify(obj, options.replacer, spaces) + '\n' - // not sure if fs.writeFileSync returns anything, but just in case - return fs.writeFileSync(file, str, options) -} - -function stripBom (content) { - // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified - if (Buffer.isBuffer(content)) content = content.toString('utf8') - content = content.replace(/^\uFEFF/, '') - return content -} - -var jsonfile = { - spaces: null, - readFile: readFile, - readFileSync: readFileSync, - writeFile: writeFile, - writeFileSync: writeFileSync -} - -module.exports = jsonfile diff --git a/truebit-implementation/node_modules/jsonfile/package.json b/truebit-implementation/node_modules/jsonfile/package.json deleted file mode 100644 index 37803608..00000000 --- a/truebit-implementation/node_modules/jsonfile/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "jsonfile@^2.1.0", - "_id": "jsonfile@2.4.0", - "_inBundle": false, - "_integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "_location": "/jsonfile", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "jsonfile@^2.1.0", - "name": "jsonfile", - "escapedName": "jsonfile", - "rawSpec": "^2.1.0", - "saveSpec": null, - "fetchSpec": "^2.1.0" - }, - "_requiredBy": [ - "/fs-extra" - ], - "_resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "_shasum": "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8", - "_spec": "jsonfile@^2.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/fs-extra", - "author": { - "name": "JP Richardson", - "email": "jprichardson@gmail.com" - }, - "bugs": { - "url": "https://github.com/jprichardson/node-jsonfile/issues" - }, - "bundleDependencies": false, - "dependencies": { - "graceful-fs": "^4.1.6" - }, - "deprecated": false, - "description": "Easily read/write JSON files.", - "devDependencies": { - "mocha": "2.x", - "mock-fs": "^3.8.0", - "rimraf": "^2.4.0", - "standard": "^6.0.8" - }, - "homepage": "https://github.com/jprichardson/node-jsonfile#readme", - "keywords": [ - "read", - "write", - "file", - "json", - "fs", - "fs-extra" - ], - "license": "MIT", - "main": "index.js", - "name": "jsonfile", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/jprichardson/node-jsonfile.git" - }, - "scripts": { - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "mocha" - }, - "version": "2.4.0" -} diff --git a/truebit-implementation/node_modules/jsprim/CHANGES.md b/truebit-implementation/node_modules/jsprim/CHANGES.md deleted file mode 100644 index c52d39d6..00000000 --- a/truebit-implementation/node_modules/jsprim/CHANGES.md +++ /dev/null @@ -1,49 +0,0 @@ -# Changelog - -## not yet released - -None yet. - -## v1.4.1 (2017-08-02) - -* #21 Update verror dep -* #22 Update extsprintf dependency -* #23 update contribution guidelines - -## v1.4.0 (2017-03-13) - -* #7 Add parseInteger() function for safer number parsing - -## v1.3.1 (2016-09-12) - -* #13 Incompatible with webpack - -## v1.3.0 (2016-06-22) - -* #14 add safer version of hasOwnProperty() -* #15 forEachKey() should ignore inherited properties - -## v1.2.2 (2015-10-15) - -* #11 NPM package shouldn't include any code that does `require('JSV')` -* #12 jsl.node.conf missing definition for "module" - -## v1.2.1 (2015-10-14) - -* #8 odd date parsing behaviour - -## v1.2.0 (2015-10-13) - -* #9 want function for returning RFC1123 dates - -## v1.1.0 (2015-09-02) - -* #6 a new suite of hrtime manipulation routines: `hrtimeAdd()`, - `hrtimeAccum()`, `hrtimeNanosec()`, `hrtimeMicrosec()` and - `hrtimeMillisec()`. - -## v1.0.0 (2015-09-01) - -First tracked release. Includes everything in previous releases, plus: - -* #4 want function for merging objects diff --git a/truebit-implementation/node_modules/jsprim/CONTRIBUTING.md b/truebit-implementation/node_modules/jsprim/CONTRIBUTING.md deleted file mode 100644 index 750cef8d..00000000 --- a/truebit-implementation/node_modules/jsprim/CONTRIBUTING.md +++ /dev/null @@ -1,19 +0,0 @@ -# Contributing - -This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new -changes. Anyone can submit changes. To get started, see the [cr.joyent.us user -guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). -This repo does not use GitHub pull requests. - -See the [Joyent Engineering -Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general -best practices expected in this repository. - -Contributions should be "make prepush" clean. The "prepush" target runs the -"check" target, which requires these separate tools: - -* https://github.com/davepacheco/jsstyle -* https://github.com/davepacheco/javascriptlint - -If you're changing something non-trivial or user-facing, you may want to submit -an issue first. diff --git a/truebit-implementation/node_modules/jsprim/LICENSE b/truebit-implementation/node_modules/jsprim/LICENSE deleted file mode 100644 index cbc0bb3b..00000000 --- a/truebit-implementation/node_modules/jsprim/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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 diff --git a/truebit-implementation/node_modules/jsprim/README.md b/truebit-implementation/node_modules/jsprim/README.md deleted file mode 100644 index b3f28a46..00000000 --- a/truebit-implementation/node_modules/jsprim/README.md +++ /dev/null @@ -1,287 +0,0 @@ -# jsprim: utilities for primitive JavaScript types - -This module provides miscellaneous facilities for working with strings, -numbers, dates, and objects and arrays of these basic types. - - -### deepCopy(obj) - -Creates a deep copy of a primitive type, object, or array of primitive types. - - -### deepEqual(obj1, obj2) - -Returns whether two objects are equal. - - -### isEmpty(obj) - -Returns true if the given object has no properties and false otherwise. This -is O(1) (unlike `Object.keys(obj).length === 0`, which is O(N)). - -### hasKey(obj, key) - -Returns true if the given object has an enumerable, non-inherited property -called `key`. [For information on enumerability and ownership of properties, see -the MDN -documentation.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) - -### forEachKey(obj, callback) - -Like Array.forEach, but iterates enumerable, owned properties of an object -rather than elements of an array. Equivalent to: - - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - callback(key, obj[key]); - } - } - - -### flattenObject(obj, depth) - -Flattens an object up to a given level of nesting, returning an array of arrays -of length "depth + 1", where the first "depth" elements correspond to flattened -columns and the last element contains the remaining object . For example: - - flattenObject({ - 'I': { - 'A': { - 'i': { - 'datum1': [ 1, 2 ], - 'datum2': [ 3, 4 ] - }, - 'ii': { - 'datum1': [ 3, 4 ] - } - }, - 'B': { - 'i': { - 'datum1': [ 5, 6 ] - }, - 'ii': { - 'datum1': [ 7, 8 ], - 'datum2': [ 3, 4 ], - }, - 'iii': { - } - } - }, - 'II': { - 'A': { - 'i': { - 'datum1': [ 1, 2 ], - 'datum2': [ 3, 4 ] - } - } - } - }, 3) - -becomes: - - [ - [ 'I', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ], - [ 'I', 'A', 'ii', { 'datum1': [ 3, 4 ] } ], - [ 'I', 'B', 'i', { 'datum1': [ 5, 6 ] } ], - [ 'I', 'B', 'ii', { 'datum1': [ 7, 8 ], 'datum2': [ 3, 4 ] } ], - [ 'I', 'B', 'iii', {} ], - [ 'II', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ] - ] - -This function is strict: "depth" must be a non-negative integer and "obj" must -be a non-null object with at least "depth" levels of nesting under all keys. - - -### flattenIter(obj, depth, func) - -This is similar to `flattenObject` except that instead of returning an array, -this function invokes `func(entry)` for each `entry` in the array that -`flattenObject` would return. `flattenIter(obj, depth, func)` is logically -equivalent to `flattenObject(obj, depth).forEach(func)`. Importantly, this -version never constructs the full array. Its memory usage is O(depth) rather -than O(n) (where `n` is the number of flattened elements). - -There's another difference between `flattenObject` and `flattenIter` that's -related to the special case where `depth === 0`. In this case, `flattenObject` -omits the array wrapping `obj` (which is regrettable). - - -### pluck(obj, key) - -Fetch nested property "key" from object "obj", traversing objects as needed. -For example, `pluck(obj, "foo.bar.baz")` is roughly equivalent to -`obj.foo.bar.baz`, except that: - -1. If traversal fails, the resulting value is undefined, and no error is - thrown. For example, `pluck({}, "foo.bar")` is just undefined. -2. If "obj" has property "key" directly (without traversing), the - corresponding property is returned. For example, - `pluck({ 'foo.bar': 1 }, 'foo.bar')` is 1, not undefined. This is also - true recursively, so `pluck({ 'a': { 'foo.bar': 1 } }, 'a.foo.bar')` is - also 1, not undefined. - - -### randElt(array) - -Returns an element from "array" selected uniformly at random. If "array" is -empty, throws an Error. - - -### startsWith(str, prefix) - -Returns true if the given string starts with the given prefix and false -otherwise. - - -### endsWith(str, suffix) - -Returns true if the given string ends with the given suffix and false -otherwise. - - -### parseInteger(str, options) - -Parses the contents of `str` (a string) as an integer. On success, the integer -value is returned (as a number). On failure, an error is **returned** describing -why parsing failed. - -By default, leading and trailing whitespace characters are not allowed, nor are -trailing characters that are not part of the numeric representation. This -behaviour can be toggled by using the options below. The empty string (`''`) is -not considered valid input. If the return value cannot be precisely represented -as a number (i.e., is smaller than `Number.MIN_SAFE_INTEGER` or larger than -`Number.MAX_SAFE_INTEGER`), an error is returned. Additionally, the string -`'-0'` will be parsed as the integer `0`, instead of as the IEEE floating point -value `-0`. - -This function accepts both upper and lowercase characters for digits, similar to -`parseInt()`, `Number()`, and [strtol(3C)](https://illumos.org/man/3C/strtol). - -The following may be specified in `options`: - -Option | Type | Default | Meaning ------------------- | ------- | ------- | --------------------------- -base | number | 10 | numeric base (radix) to use, in the range 2 to 36 -allowSign | boolean | true | whether to interpret any leading `+` (positive) and `-` (negative) characters -allowImprecise | boolean | false | whether to accept values that may have lost precision (past `MAX_SAFE_INTEGER` or below `MIN_SAFE_INTEGER`) -allowPrefix | boolean | false | whether to interpret the prefixes `0b` (base 2), `0o` (base 8), `0t` (base 10), or `0x` (base 16) -allowTrailing | boolean | false | whether to ignore trailing characters -trimWhitespace | boolean | false | whether to trim any leading or trailing whitespace/line terminators -leadingZeroIsOctal | boolean | false | whether a leading zero indicates octal - -Note that if `base` is unspecified, and `allowPrefix` or `leadingZeroIsOctal` -are, then the leading characters can change the default base from 10. If `base` -is explicitly specified and `allowPrefix` is true, then the prefix will only be -accepted if it matches the specified base. `base` and `leadingZeroIsOctal` -cannot be used together. - -**Context:** It's tricky to parse integers with JavaScript's built-in facilities -for several reasons: - -- `parseInt()` and `Number()` by default allow the base to be specified in the - input string by a prefix (e.g., `0x` for hex). -- `parseInt()` allows trailing nonnumeric characters. -- `Number(str)` returns 0 when `str` is the empty string (`''`). -- Both functions return incorrect values when the input string represents a - valid integer outside the range of integers that can be represented precisely. - Specifically, `parseInt('9007199254740993')` returns 9007199254740992. -- Both functions always accept `-` and `+` signs before the digit. -- Some older JavaScript engines always interpret a leading 0 as indicating - octal, which can be surprising when parsing input from users who expect a - leading zero to be insignificant. - -While each of these may be desirable in some contexts, there are also times when -none of them are wanted. `parseInteger()` grants greater control over what -input's permissible. - -### iso8601(date) - -Converts a Date object to an ISO8601 date string of the form -"YYYY-MM-DDTHH:MM:SS.sssZ". This format is not customizable. - - -### parseDateTime(str) - -Parses a date expressed as a string, as either a number of milliseconds since -the epoch or any string format that Date accepts, giving preference to the -former where these two sets overlap (e.g., strings containing small numbers). - - -### hrtimeDiff(timeA, timeB) - -Given two hrtime readings (as from Node's `process.hrtime()`), where timeA is -later than timeB, compute the difference and return that as an hrtime. It is -illegal to invoke this for a pair of times where timeB is newer than timeA. - -### hrtimeAdd(timeA, timeB) - -Add two hrtime intervals (as from Node's `process.hrtime()`), returning a new -hrtime interval array. This function does not modify either input argument. - - -### hrtimeAccum(timeA, timeB) - -Add two hrtime intervals (as from Node's `process.hrtime()`), storing the -result in `timeA`. This function overwrites (and returns) the first argument -passed in. - - -### hrtimeNanosec(timeA), hrtimeMicrosec(timeA), hrtimeMillisec(timeA) - -This suite of functions converts a hrtime interval (as from Node's -`process.hrtime()`) into a scalar number of nanoseconds, microseconds or -milliseconds. Results are truncated, as with `Math.floor()`. - - -### validateJsonObject(schema, object) - -Uses JSON validation (via JSV) to validate the given object against the given -schema. On success, returns null. On failure, *returns* (does not throw) a -useful Error object. - - -### extraProperties(object, allowed) - -Check an object for unexpected properties. Accepts the object to check, and an -array of allowed property name strings. If extra properties are detected, an -array of extra property names is returned. If no properties other than those -in the allowed list are present on the object, the returned array will be of -zero length. - -### mergeObjects(provided, overrides, defaults) - -Merge properties from objects "provided", "overrides", and "defaults". The -intended use case is for functions that accept named arguments in an "args" -object, but want to provide some default values and override other values. In -that case, "provided" is what the caller specified, "overrides" are what the -function wants to override, and "defaults" contains default values. - -The function starts with the values in "defaults", overrides them with the -values in "provided", and then overrides those with the values in "overrides". -For convenience, any of these objects may be falsey, in which case they will be -ignored. The input objects are never modified, but properties in the returned -object are not deep-copied. - -For example: - - mergeObjects(undefined, { 'objectMode': true }, { 'highWaterMark': 0 }) - -returns: - - { 'objectMode': true, 'highWaterMark': 0 } - -For another example: - - mergeObjects( - { 'highWaterMark': 16, 'objectMode': 7 }, /* from caller */ - { 'objectMode': true }, /* overrides */ - { 'highWaterMark': 0 }); /* default */ - -returns: - - { 'objectMode': true, 'highWaterMark': 16 } - - -# Contributing - -See separate [contribution guidelines](CONTRIBUTING.md). diff --git a/truebit-implementation/node_modules/jsprim/lib/jsprim.js b/truebit-implementation/node_modules/jsprim/lib/jsprim.js deleted file mode 100644 index f7d0d81c..00000000 --- a/truebit-implementation/node_modules/jsprim/lib/jsprim.js +++ /dev/null @@ -1,735 +0,0 @@ -/* - * lib/jsprim.js: utilities for primitive JavaScript types - */ - -var mod_assert = require('assert-plus'); -var mod_util = require('util'); - -var mod_extsprintf = require('extsprintf'); -var mod_verror = require('verror'); -var mod_jsonschema = require('json-schema'); - -/* - * Public interface - */ -exports.deepCopy = deepCopy; -exports.deepEqual = deepEqual; -exports.isEmpty = isEmpty; -exports.hasKey = hasKey; -exports.forEachKey = forEachKey; -exports.pluck = pluck; -exports.flattenObject = flattenObject; -exports.flattenIter = flattenIter; -exports.validateJsonObject = validateJsonObjectJS; -exports.validateJsonObjectJS = validateJsonObjectJS; -exports.randElt = randElt; -exports.extraProperties = extraProperties; -exports.mergeObjects = mergeObjects; - -exports.startsWith = startsWith; -exports.endsWith = endsWith; - -exports.parseInteger = parseInteger; - -exports.iso8601 = iso8601; -exports.rfc1123 = rfc1123; -exports.parseDateTime = parseDateTime; - -exports.hrtimediff = hrtimeDiff; -exports.hrtimeDiff = hrtimeDiff; -exports.hrtimeAccum = hrtimeAccum; -exports.hrtimeAdd = hrtimeAdd; -exports.hrtimeNanosec = hrtimeNanosec; -exports.hrtimeMicrosec = hrtimeMicrosec; -exports.hrtimeMillisec = hrtimeMillisec; - - -/* - * Deep copy an acyclic *basic* Javascript object. This only handles basic - * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects - * containing these. This does *not* handle instances of other classes. - */ -function deepCopy(obj) -{ - var ret, key; - var marker = '__deepCopy'; - - if (obj && obj[marker]) - throw (new Error('attempted deep copy of cyclic object')); - - if (obj && obj.constructor == Object) { - ret = {}; - obj[marker] = true; - - for (key in obj) { - if (key == marker) - continue; - - ret[key] = deepCopy(obj[key]); - } - - delete (obj[marker]); - return (ret); - } - - if (obj && obj.constructor == Array) { - ret = []; - obj[marker] = true; - - for (key = 0; key < obj.length; key++) - ret.push(deepCopy(obj[key])); - - delete (obj[marker]); - return (ret); - } - - /* - * It must be a primitive type -- just return it. - */ - return (obj); -} - -function deepEqual(obj1, obj2) -{ - if (typeof (obj1) != typeof (obj2)) - return (false); - - if (obj1 === null || obj2 === null || typeof (obj1) != 'object') - return (obj1 === obj2); - - if (obj1.constructor != obj2.constructor) - return (false); - - var k; - for (k in obj1) { - if (!obj2.hasOwnProperty(k)) - return (false); - - if (!deepEqual(obj1[k], obj2[k])) - return (false); - } - - for (k in obj2) { - if (!obj1.hasOwnProperty(k)) - return (false); - } - - return (true); -} - -function isEmpty(obj) -{ - var key; - for (key in obj) - return (false); - return (true); -} - -function hasKey(obj, key) -{ - mod_assert.equal(typeof (key), 'string'); - return (Object.prototype.hasOwnProperty.call(obj, key)); -} - -function forEachKey(obj, callback) -{ - for (var key in obj) { - if (hasKey(obj, key)) { - callback(key, obj[key]); - } - } -} - -function pluck(obj, key) -{ - mod_assert.equal(typeof (key), 'string'); - return (pluckv(obj, key)); -} - -function pluckv(obj, key) -{ - if (obj === null || typeof (obj) !== 'object') - return (undefined); - - if (obj.hasOwnProperty(key)) - return (obj[key]); - - var i = key.indexOf('.'); - if (i == -1) - return (undefined); - - var key1 = key.substr(0, i); - if (!obj.hasOwnProperty(key1)) - return (undefined); - - return (pluckv(obj[key1], key.substr(i + 1))); -} - -/* - * Invoke callback(row) for each entry in the array that would be returned by - * flattenObject(data, depth). This is just like flattenObject(data, - * depth).forEach(callback), except that the intermediate array is never - * created. - */ -function flattenIter(data, depth, callback) -{ - doFlattenIter(data, depth, [], callback); -} - -function doFlattenIter(data, depth, accum, callback) -{ - var each; - var key; - - if (depth === 0) { - each = accum.slice(0); - each.push(data); - callback(each); - return; - } - - mod_assert.ok(data !== null); - mod_assert.equal(typeof (data), 'object'); - mod_assert.equal(typeof (depth), 'number'); - mod_assert.ok(depth >= 0); - - for (key in data) { - each = accum.slice(0); - each.push(key); - doFlattenIter(data[key], depth - 1, each, callback); - } -} - -function flattenObject(data, depth) -{ - if (depth === 0) - return ([ data ]); - - mod_assert.ok(data !== null); - mod_assert.equal(typeof (data), 'object'); - mod_assert.equal(typeof (depth), 'number'); - mod_assert.ok(depth >= 0); - - var rv = []; - var key; - - for (key in data) { - flattenObject(data[key], depth - 1).forEach(function (p) { - rv.push([ key ].concat(p)); - }); - } - - return (rv); -} - -function startsWith(str, prefix) -{ - return (str.substr(0, prefix.length) == prefix); -} - -function endsWith(str, suffix) -{ - return (str.substr( - str.length - suffix.length, suffix.length) == suffix); -} - -function iso8601(d) -{ - if (typeof (d) == 'number') - d = new Date(d); - mod_assert.ok(d.constructor === Date); - return (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ', - d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(), - d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), - d.getUTCMilliseconds())); -} - -var RFC1123_MONTHS = [ - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; -var RFC1123_DAYS = [ - 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; - -function rfc1123(date) { - return (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT', - RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(), - RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(), - date.getUTCHours(), date.getUTCMinutes(), - date.getUTCSeconds())); -} - -/* - * Parses a date expressed as a string, as either a number of milliseconds since - * the epoch or any string format that Date accepts, giving preference to the - * former where these two sets overlap (e.g., small numbers). - */ -function parseDateTime(str) -{ - /* - * This is irritatingly implicit, but significantly more concise than - * alternatives. The "+str" will convert a string containing only a - * number directly to a Number, or NaN for other strings. Thus, if the - * conversion succeeds, we use it (this is the milliseconds-since-epoch - * case). Otherwise, we pass the string directly to the Date - * constructor to parse. - */ - var numeric = +str; - if (!isNaN(numeric)) { - return (new Date(numeric)); - } else { - return (new Date(str)); - } -} - - -/* - * Number.*_SAFE_INTEGER isn't present before node v0.12, so we hardcode - * the ES6 definitions here, while allowing for them to someday be higher. - */ -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; -var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; - - -/* - * Default options for parseInteger(). - */ -var PI_DEFAULTS = { - base: 10, - allowSign: true, - allowPrefix: false, - allowTrailing: false, - allowImprecise: false, - trimWhitespace: false, - leadingZeroIsOctal: false -}; - -var CP_0 = 0x30; -var CP_9 = 0x39; - -var CP_A = 0x41; -var CP_B = 0x42; -var CP_O = 0x4f; -var CP_T = 0x54; -var CP_X = 0x58; -var CP_Z = 0x5a; - -var CP_a = 0x61; -var CP_b = 0x62; -var CP_o = 0x6f; -var CP_t = 0x74; -var CP_x = 0x78; -var CP_z = 0x7a; - -var PI_CONV_DEC = 0x30; -var PI_CONV_UC = 0x37; -var PI_CONV_LC = 0x57; - - -/* - * A stricter version of parseInt() that provides options for changing what - * is an acceptable string (for example, disallowing trailing characters). - */ -function parseInteger(str, uopts) -{ - mod_assert.string(str, 'str'); - mod_assert.optionalObject(uopts, 'options'); - - var baseOverride = false; - var options = PI_DEFAULTS; - - if (uopts) { - baseOverride = hasKey(uopts, 'base'); - options = mergeObjects(options, uopts); - mod_assert.number(options.base, 'options.base'); - mod_assert.ok(options.base >= 2, 'options.base >= 2'); - mod_assert.ok(options.base <= 36, 'options.base <= 36'); - mod_assert.bool(options.allowSign, 'options.allowSign'); - mod_assert.bool(options.allowPrefix, 'options.allowPrefix'); - mod_assert.bool(options.allowTrailing, - 'options.allowTrailing'); - mod_assert.bool(options.allowImprecise, - 'options.allowImprecise'); - mod_assert.bool(options.trimWhitespace, - 'options.trimWhitespace'); - mod_assert.bool(options.leadingZeroIsOctal, - 'options.leadingZeroIsOctal'); - - if (options.leadingZeroIsOctal) { - mod_assert.ok(!baseOverride, - '"base" and "leadingZeroIsOctal" are ' + - 'mutually exclusive'); - } - } - - var c; - var pbase = -1; - var base = options.base; - var start; - var mult = 1; - var value = 0; - var idx = 0; - var len = str.length; - - /* Trim any whitespace on the left side. */ - if (options.trimWhitespace) { - while (idx < len && isSpace(str.charCodeAt(idx))) { - ++idx; - } - } - - /* Check the number for a leading sign. */ - if (options.allowSign) { - if (str[idx] === '-') { - idx += 1; - mult = -1; - } else if (str[idx] === '+') { - idx += 1; - } - } - - /* Parse the base-indicating prefix if there is one. */ - if (str[idx] === '0') { - if (options.allowPrefix) { - pbase = prefixToBase(str.charCodeAt(idx + 1)); - if (pbase !== -1 && (!baseOverride || pbase === base)) { - base = pbase; - idx += 2; - } - } - - if (pbase === -1 && options.leadingZeroIsOctal) { - base = 8; - } - } - - /* Parse the actual digits. */ - for (start = idx; idx < len; ++idx) { - c = translateDigit(str.charCodeAt(idx)); - if (c !== -1 && c < base) { - value *= base; - value += c; - } else { - break; - } - } - - /* If we didn't parse any digits, we have an invalid number. */ - if (start === idx) { - return (new Error('invalid number: ' + JSON.stringify(str))); - } - - /* Trim any whitespace on the right side. */ - if (options.trimWhitespace) { - while (idx < len && isSpace(str.charCodeAt(idx))) { - ++idx; - } - } - - /* Check for trailing characters. */ - if (idx < len && !options.allowTrailing) { - return (new Error('trailing characters after number: ' + - JSON.stringify(str.slice(idx)))); - } - - /* If our value is 0, we return now, to avoid returning -0. */ - if (value === 0) { - return (0); - } - - /* Calculate our final value. */ - var result = value * mult; - - /* - * If the string represents a value that cannot be precisely represented - * by JavaScript, then we want to check that: - * - * - We never increased the value past MAX_SAFE_INTEGER - * - We don't make the result negative and below MIN_SAFE_INTEGER - * - * Because we only ever increment the value during parsing, there's no - * chance of moving past MAX_SAFE_INTEGER and then dropping below it - * again, losing precision in the process. This means that we only need - * to do our checks here, at the end. - */ - if (!options.allowImprecise && - (value > MAX_SAFE_INTEGER || result < MIN_SAFE_INTEGER)) { - return (new Error('number is outside of the supported range: ' + - JSON.stringify(str.slice(start, idx)))); - } - - return (result); -} - - -/* - * Interpret a character code as a base-36 digit. - */ -function translateDigit(d) -{ - if (d >= CP_0 && d <= CP_9) { - /* '0' to '9' -> 0 to 9 */ - return (d - PI_CONV_DEC); - } else if (d >= CP_A && d <= CP_Z) { - /* 'A' - 'Z' -> 10 to 35 */ - return (d - PI_CONV_UC); - } else if (d >= CP_a && d <= CP_z) { - /* 'a' - 'z' -> 10 to 35 */ - return (d - PI_CONV_LC); - } else { - /* Invalid character code */ - return (-1); - } -} - - -/* - * Test if a value matches the ECMAScript definition of trimmable whitespace. - */ -function isSpace(c) -{ - return (c === 0x20) || - (c >= 0x0009 && c <= 0x000d) || - (c === 0x00a0) || - (c === 0x1680) || - (c === 0x180e) || - (c >= 0x2000 && c <= 0x200a) || - (c === 0x2028) || - (c === 0x2029) || - (c === 0x202f) || - (c === 0x205f) || - (c === 0x3000) || - (c === 0xfeff); -} - - -/* - * Determine which base a character indicates (e.g., 'x' indicates hex). - */ -function prefixToBase(c) -{ - if (c === CP_b || c === CP_B) { - /* 0b/0B (binary) */ - return (2); - } else if (c === CP_o || c === CP_O) { - /* 0o/0O (octal) */ - return (8); - } else if (c === CP_t || c === CP_T) { - /* 0t/0T (decimal) */ - return (10); - } else if (c === CP_x || c === CP_X) { - /* 0x/0X (hexadecimal) */ - return (16); - } else { - /* Not a meaningful character */ - return (-1); - } -} - - -function validateJsonObjectJS(schema, input) -{ - var report = mod_jsonschema.validate(input, schema); - - if (report.errors.length === 0) - return (null); - - /* Currently, we only do anything useful with the first error. */ - var error = report.errors[0]; - - /* The failed property is given by a URI with an irrelevant prefix. */ - var propname = error['property']; - var reason = error['message'].toLowerCase(); - var i, j; - - /* - * There's at least one case where the property error message is - * confusing at best. We work around this here. - */ - if ((i = reason.indexOf('the property ')) != -1 && - (j = reason.indexOf(' is not defined in the schema and the ' + - 'schema does not allow additional properties')) != -1) { - i += 'the property '.length; - if (propname === '') - propname = reason.substr(i, j - i); - else - propname = propname + '.' + reason.substr(i, j - i); - - reason = 'unsupported property'; - } - - var rv = new mod_verror.VError('property "%s": %s', propname, reason); - rv.jsv_details = error; - return (rv); -} - -function randElt(arr) -{ - mod_assert.ok(Array.isArray(arr) && arr.length > 0, - 'randElt argument must be a non-empty array'); - - return (arr[Math.floor(Math.random() * arr.length)]); -} - -function assertHrtime(a) -{ - mod_assert.ok(a[0] >= 0 && a[1] >= 0, - 'negative numbers not allowed in hrtimes'); - mod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow'); -} - -/* - * Compute the time elapsed between hrtime readings A and B, where A is later - * than B. hrtime readings come from Node's process.hrtime(). There is no - * defined way to represent negative deltas, so it's illegal to diff B from A - * where the time denoted by B is later than the time denoted by A. If this - * becomes valuable, we can define a representation and extend the - * implementation to support it. - */ -function hrtimeDiff(a, b) -{ - assertHrtime(a); - assertHrtime(b); - mod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]), - 'negative differences not allowed'); - - var rv = [ a[0] - b[0], 0 ]; - - if (a[1] >= b[1]) { - rv[1] = a[1] - b[1]; - } else { - rv[0]--; - rv[1] = 1e9 - (b[1] - a[1]); - } - - return (rv); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of nanoseconds. - */ -function hrtimeNanosec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e9 + a[1])); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of microseconds. - */ -function hrtimeMicrosec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e6 + a[1] / 1e3)); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of milliseconds. - */ -function hrtimeMillisec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e3 + a[1] / 1e6)); -} - -/* - * Add two hrtime readings A and B, overwriting A with the result of the - * addition. This function is useful for accumulating several hrtime intervals - * into a counter. Returns A. - */ -function hrtimeAccum(a, b) -{ - assertHrtime(a); - assertHrtime(b); - - /* - * Accumulate the nanosecond component. - */ - a[1] += b[1]; - if (a[1] >= 1e9) { - /* - * The nanosecond component overflowed, so carry to the seconds - * field. - */ - a[0]++; - a[1] -= 1e9; - } - - /* - * Accumulate the seconds component. - */ - a[0] += b[0]; - - return (a); -} - -/* - * Add two hrtime readings A and B, returning the result as a new hrtime array. - * Does not modify either input argument. - */ -function hrtimeAdd(a, b) -{ - assertHrtime(a); - - var rv = [ a[0], a[1] ]; - - return (hrtimeAccum(rv, b)); -} - - -/* - * Check an object for unexpected properties. Accepts the object to check, and - * an array of allowed property names (strings). Returns an array of key names - * that were found on the object, but did not appear in the list of allowed - * properties. If no properties were found, the returned array will be of - * zero length. - */ -function extraProperties(obj, allowed) -{ - mod_assert.ok(typeof (obj) === 'object' && obj !== null, - 'obj argument must be a non-null object'); - mod_assert.ok(Array.isArray(allowed), - 'allowed argument must be an array of strings'); - for (var i = 0; i < allowed.length; i++) { - mod_assert.ok(typeof (allowed[i]) === 'string', - 'allowed argument must be an array of strings'); - } - - return (Object.keys(obj).filter(function (key) { - return (allowed.indexOf(key) === -1); - })); -} - -/* - * Given three sets of properties "provided" (may be undefined), "overrides" - * (required), and "defaults" (may be undefined), construct an object containing - * the union of these sets with "overrides" overriding "provided", and - * "provided" overriding "defaults". None of the input objects are modified. - */ -function mergeObjects(provided, overrides, defaults) -{ - var rv, k; - - rv = {}; - if (defaults) { - for (k in defaults) - rv[k] = defaults[k]; - } - - if (provided) { - for (k in provided) - rv[k] = provided[k]; - } - - if (overrides) { - for (k in overrides) - rv[k] = overrides[k]; - } - - return (rv); -} diff --git a/truebit-implementation/node_modules/jsprim/package.json b/truebit-implementation/node_modules/jsprim/package.json deleted file mode 100644 index 15e78572..00000000 --- a/truebit-implementation/node_modules/jsprim/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "_from": "jsprim@^1.2.2", - "_id": "jsprim@1.4.1", - "_inBundle": false, - "_integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "_location": "/jsprim", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "jsprim@^1.2.2", - "name": "jsprim", - "escapedName": "jsprim", - "rawSpec": "^1.2.2", - "saveSpec": null, - "fetchSpec": "^1.2.2" - }, - "_requiredBy": [ - "/http-signature" - ], - "_resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "_shasum": "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2", - "_spec": "jsprim@^1.2.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/http-signature", - "bugs": { - "url": "https://github.com/joyent/node-jsprim/issues" - }, - "bundleDependencies": false, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "deprecated": false, - "description": "utilities for primitive JavaScript types", - "engines": [ - "node >=0.6.0" - ], - "homepage": "https://github.com/joyent/node-jsprim#readme", - "license": "MIT", - "main": "./lib/jsprim.js", - "name": "jsprim", - "repository": { - "type": "git", - "url": "git://github.com/joyent/node-jsprim.git" - }, - "version": "1.4.1" -} diff --git a/truebit-implementation/node_modules/keccakjs/.npmignore b/truebit-implementation/node_modules/keccakjs/.npmignore deleted file mode 100644 index 123ae94d..00000000 --- a/truebit-implementation/node_modules/keccakjs/.npmignore +++ /dev/null @@ -1,27 +0,0 @@ -# Logs -logs -*.log - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules diff --git a/truebit-implementation/node_modules/keccakjs/LICENSE b/truebit-implementation/node_modules/keccakjs/LICENSE deleted file mode 100644 index 21315b2a..00000000 --- a/truebit-implementation/node_modules/keccakjs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Alex Beregszaszi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/keccakjs/README.md b/truebit-implementation/node_modules/keccakjs/README.md deleted file mode 100644 index 5ae8b516..00000000 --- a/truebit-implementation/node_modules/keccakjs/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Keccak.js - -The only Keccak hash (aka SHA3 before standardisation) library you need in Javascript. Ever. Pinky promise! - -It is a meta package and lets you to use `node-sha3` or `js-sha3` with the same interface on your choice of deployment. It uses `browserify-sha3` to do the mapping for you. - -There's no speed loss, it is as thin as it can get (but there is some twiddling in `package.json` to select the right package for your environment): -```js -module.exports = require('sha3').SHA3Hash -``` - -Example usage: -```js -const keccak = require('keccakjs') - -var hash = new keccak() // uses 512 bits by default -hash.update('hello') -hash.update(new Buffer('42004200', 'hex')) -hash.digest() // binary output -hash.digest('hex') // hex output -``` - -**NOTE: This library supports the Keccak padding only - and not the final SHA3 padding.** diff --git a/truebit-implementation/node_modules/keccakjs/browser.js b/truebit-implementation/node_modules/keccakjs/browser.js deleted file mode 100644 index 8cfe6b19..00000000 --- a/truebit-implementation/node_modules/keccakjs/browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('browserify-sha3').SHA3Hash diff --git a/truebit-implementation/node_modules/keccakjs/index.js b/truebit-implementation/node_modules/keccakjs/index.js deleted file mode 100644 index a41df45b..00000000 --- a/truebit-implementation/node_modules/keccakjs/index.js +++ /dev/null @@ -1,5 +0,0 @@ -try { - module.exports = require('sha3').SHA3Hash -} catch (err) { - module.exports = require('./browser') -} diff --git a/truebit-implementation/node_modules/keccakjs/package.json b/truebit-implementation/node_modules/keccakjs/package.json deleted file mode 100644 index 59a4be8c..00000000 --- a/truebit-implementation/node_modules/keccakjs/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "_from": "keccakjs@^0.2.1", - "_id": "keccakjs@0.2.1", - "_inBundle": false, - "_integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", - "_location": "/keccakjs", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "keccakjs@^0.2.1", - "name": "keccakjs", - "escapedName": "keccakjs", - "rawSpec": "^0.2.1", - "saveSpec": null, - "fetchSpec": "^0.2.1" - }, - "_requiredBy": [ - "/eth-lib" - ], - "_resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", - "_shasum": "1d633af907ef305bbf9f2fa616d56c44561dfa4d", - "_spec": "keccakjs@^0.2.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/eth-lib", - "author": { - "name": "Alex Beregszaszi", - "email": "alex@rtfs.hu" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/axic/keccakjs/issues" - }, - "bundleDependencies": false, - "dependencies": { - "browserify-sha3": "^0.0.1", - "sha3": "^1.1.0" - }, - "deprecated": false, - "description": "Keccak hash (SHA3) in Node.js and in the browser. Fast & simple.", - "homepage": "https://github.com/axic/keccakjs#readme", - "keywords": [ - "sha3", - "keccak", - "hash" - ], - "license": "MIT", - "main": "index.js", - "name": "keccakjs", - "repository": { - "type": "git", - "url": "git+https://github.com/axic/keccakjs.git" - }, - "scripts": { - "test": "exit 0" - }, - "version": "0.2.1" -} diff --git a/truebit-implementation/node_modules/kleros-interaction/LICENSE.txt b/truebit-implementation/node_modules/kleros-interaction/LICENSE.txt deleted file mode 100644 index ac652fd9..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Smart Contract Solutions, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/README.md b/truebit-implementation/node_modules/kleros-interaction/README.md deleted file mode 100644 index 66d54251..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# kleros-interaction -Smart contracts able to interact with Kleros and standard proposals. diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/Arbitrable.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/Arbitrable.json deleted file mode 100644 index 8dea87da..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/Arbitrable.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "contract_name": "Arbitrable", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "_arbitrator", - "type": "address" - }, - { - "name": "_contractHash", - "type": "bytes32" - } - ], - "payable": false, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_rulingOptions", - "type": "string" - } - ], - "name": "Dispute", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_contractHash", - "type": "bytes32" - } - ], - "name": "ContractHash", - "type": "event" - } - ], - "unlinked_binary": "0x", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1508684836146 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/ArbitrableTransaction.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/ArbitrableTransaction.json deleted file mode 100644 index c0577a2a..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/ArbitrableTransaction.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "contract_name": "ArbitrableTransaction", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "arbitratorExtraData", - "outputs": [ - { - "name": "", - "type": "bytes" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyA", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "timeOutByPartyA", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pay", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "status", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyB", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_amountReimbursed", - "type": "uint256" - } - ], - "name": "reimburse", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyAFee", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyBFee", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "timeout", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "timeOutByPartyB", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "lastInteraction", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "payArbitrationFeeByPartyA", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "amount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "disputeID", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "payArbitrationFeeByPartyB", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "_arbitrator", - "type": "address" - }, - { - "name": "_hashContract", - "type": "bytes32" - }, - { - "name": "_timeout", - "type": "uint256" - }, - { - "name": "_partyB", - "type": "address" - }, - { - "name": "_arbitratorExtraData", - "type": "bytes" - } - ], - "payable": true, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_party", - "type": "uint8" - } - ], - "name": "HasToPayFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_rulingOptions", - "type": "string" - } - ], - "name": "Dispute", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_contractHash", - "type": "bytes32" - } - ], - "name": "ContractHash", - "type": "event" - } - ], - "unlinked_binary": "0x606060405260405161117b38038061117b833981016040528080519190602001805191906020018051919060200180519190602001805190910190505b84848484845b84845b60008054600160a060020a031916600160a060020a0384161790557f1892820d22f2ab2b60795935d39550f42562bf8862a0b3c2193b095baa40af218160405190815260200160405180910390a15b5050600183905560028054600160a060020a03338116600160a060020a031992831617909255600380549285169290911691909117905560068180516100de9291602001906100f8565b505b5050600a8054340190555050505b5050505050610198565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061013957805160ff1916838001178555610166565b82800160010185558215610166579182015b8281111561016657825182559160200191906001019061014b565b5b50610173929150610177565b5090565b61019591905b80821115610173576000815560010161017d565b5090565b90565b610fd4806101a76000396000f300606060405236156100f65763ffffffff60e060020a600035041663069fae2a81146100fb5780630c7ac7b61461014357806310e1d8ca146101ce57806319e2641e146101fd5780631b9265b814610212578063200d2ed214610227578063290401131461025e578063311a6c561461028d5780634a44c2e4146102a85780634b40c974146102c0578063512491f1146102e55780636cc6cde11461030a57806370dea79a14610339578063853c80ce1461035e5780638f71a26514610373578063a010963114610398578063aa8c217c146103a2578063b0a1e2b4146103c7578063b1bcce3a146103ec578063bac91e2e146103f6575b600080fd5b61014160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061044995505050505050565b005b341561014e57600080fd5b610156610555565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101935780820151818401525b60200161017a565b50505050905090810190601f1680156101c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d957600080fd5b6101e16105f3565b604051600160a060020a03909116815260200160405180910390f35b341561020857600080fd5b610141610602565b005b341561021d57600080fd5b610141610660565b005b341561023257600080fd5b61023a6106bd565b6040518082600481111561024a57fe5b60ff16815260200191505060405180910390f35b341561026957600080fd5b6101e16106c6565b604051600160a060020a03909116815260200160405180910390f35b341561029857600080fd5b6101416004356024356106d5565b005b34156102b357600080fd5b610141600435610700565b005b34156102cb57600080fd5b6102d361076b565b60405190815260200160405180910390f35b34156102f057600080fd5b6102d3610771565b60405190815260200160405180910390f35b341561031557600080fd5b6101e1610777565b604051600160a060020a03909116815260200160405180910390f35b341561034457600080fd5b6102d3610786565b60405190815260200160405180910390f35b341561036957600080fd5b61014161078c565b005b341561037e57600080fd5b6102d36107ea565b60405190815260200160405180910390f35b6101416107f0565b005b34156103ad57600080fd5b6102d36109a9565b60405190815260200160405180910390f35b34156103d257600080fd5b6102d36109af565b60405190815260200160405180910390f35b6101416109b5565b005b341561040157600080fd5b61014160046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b6f95505050505050565b005b60025433600160a060020a0390811691161480610474575060035433600160a060020a039081169116145b151561047f57600080fd5b600054600854600160a060020a03909116906349912f88903490846040518463ffffffff1660e060020a0281526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156104f05780820151818401525b6020016104d7565b50505050905090810190601f16801561051d5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b151561053b57600080fd5b6125ee5a03f1151561054c57600080fd5b505050505b5b50565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105eb5780601f106105c0576101008083540402835291602001916105eb565b820191906000526020600020905b8154815290600101906020018083116105ce57829003601f168201915b505050505081565b600254600160a060020a031681565b60025433600160a060020a0390811691161461061d57600080fd5b60015b60095460ff16600481111561063157fe5b1461063b57600080fd5b6001546007540142101561064e57600080fd5b60085461065c906001610c82565b5b5b565b60025433600160a060020a0390811691161461067b57600080fd5b600354600a54600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505015156106b457600080fd5b6000600a555b5b565b60095460ff1681565b600354600160a060020a031681565b60005433600160a060020a039081169116146106f057600080fd5b6106fa8282610c82565b5b5b5050565b60035433600160a060020a0390811691161461071b57600080fd5b600a5481111561072a57600080fd5b600254600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561075d57600080fd5b600a805482900390555b5b50565b60045481565b60055481565b600054600160a060020a031681565b60015481565b60035433600160a060020a039081169116146107a757600080fd5b60025b60095460ff1660048111156107bb57fe5b146107c557600080fd5b600154600754014210156107d857600080fd5b60085461065c906002610c82565b5b5b565b60075481565b60025460009033600160a060020a0390811691161461080e57600080fd5b60008054600160a060020a03169063f7434ea9906006906040516020015260405160e060020a63ffffffff84160281526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156108bc5780601f10610891576101008083540402835291602001916108bc565b820191906000526020600020905b81548152906001019060200180831161089f57829003601f168201915b505092505050602060405180830381600087803b15156108db57600080fd5b6102c65a03f115156108ec57600080fd5b5050506040518051600480543401908190559092508214905061090e57600080fd5b60035b60095460ff16600481111561092257fe5b1061092c57600080fd5b426007556005548190101561099a57600980546001919060ff191682805b02179055507fba8db766b5582c21593909b57af48297714ea2c508bfff6c537ce36bb853e56860016040518082600181111561098257fe5b60ff16815260200191505060405180910390a1610551565b61055181610d0c565b5b5b5b50565b600a5481565b60085481565b60035460009033600160a060020a039081169116146109d357600080fd5b60008054600160a060020a03169063f7434ea9906006906040516020015260405160e060020a63ffffffff8416028152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610a815780601f10610a5657610100808354040283529160200191610a81565b820191906000526020600020905b815481529060010190602001808311610a6457829003601f168201915b505092505050602060405180830381600087803b1515610aa057600080fd5b6102c65a03f11515610ab157600080fd5b50505060405180516005805434019081905590925082149050610ad357600080fd5b60035b60095460ff166004811115610ae757fe5b10610af157600080fd5b426007556004548190101561099a57600980546002919060ff19166001835b02179055507fba8db766b5582c21593909b57af48297714ea2c508bfff6c537ce36bb853e56860006040518082600181111561098257fe5b60ff16815260200191505060405180910390a1610551565b61055181610d0c565b5b5b5b50565b60025433600160a060020a0390811691161480610b9a575060035433600160a060020a039081169116145b1515610ba557600080fd5b60035b60095460ff166004811115610bb957fe5b1015610bc457600080fd5b600854600054600160a060020a03167fdccf2f8b2cc26eafcd61905cba744cff4b81d14740725f6376390dc6298a6a3c3384604051600160a060020a038316815260406020820181815290820183818151815260200191508051906020019080838360005b83811015610c425780820151818401525b602001610c29565b50505050905090810190601f168015610c6f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35b5b50565b610c8c8282610efc565b6001811415610cc957600254600a54600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505050610d01565b6002811415610d0157600354600a54600160a060020a039091169080156108fc0290604051600060405180830381858888f150505050505b5b6000600a555b5050565b600980546003919060ff19166001835b021790555060008054600160a060020a03169063c13517e19083906002906006906040516020015260405160e060020a63ffffffff861602815260ff831660048201908152604060248301908152835460026000196101006001841615020190911604604484018190529192909160649091019084908015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b505093505050506020604051808303818588803b1515610dfe57600080fd5b6125ee5a03f11515610e0f57600080fd5b5050505060405180516008819055600054909150600160a060020a03167f775071bee3f2d409883bcb9dfcef6befa9343668ab341f76fcc5817b52a12611604080519081016040908152601982527f506172747920412077696e733b506172747920422077696e730000000000000060208301525160208082528190810183818151815260200191508051906020019080838360005b83811015610ebe5780820151818401525b602001610ea5565b50505050905090810190601f168015610eeb5780820380516001836020036101000a031916815260200191505b509250505060405180910390a35b50565b6008548214610f0a57600080fd5b6002811115610f1857600080fd5b6001811415610f5557600254600454600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505050610f8d565b6002811415610f8d57600354600554600160a060020a039091169080156108fc0290604051600060405180830381858888f150505050505b5b600980546004919060ff19166001835b02179055505b50505600a165627a7a723058202f3f0819b0059dffe0a44b0cce9d75d6e386840b11832ca387b4966a1f5b5a2e0029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1507634569192 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/ArbitratedTransaction.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/ArbitratedTransaction.json deleted file mode 100644 index 04fae7b0..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/ArbitratedTransaction.json +++ /dev/null @@ -1,331 +0,0 @@ -{ - "contract_name": "ArbitratedTransaction", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "arbitratorExtraData", - "outputs": [ - { - "name": "", - "type": "bytes" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyA", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "timeOutByPartyA", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pay", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "status", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyB", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_amountReimbursed", - "type": "uint256" - } - ], - "name": "reimburse", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyAFee", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyBFee", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "timeout", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "timeOutByPartyB", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "lastInteraction", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "payArbitrationFeeByPartyA", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "amount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "disputeID", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "payArbitrationFeeByPartyB", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "_arbitrator", - "type": "address" - }, - { - "name": "_timeout", - "type": "uint256" - }, - { - "name": "_partyB", - "type": "address" - }, - { - "name": "_arbitratorExtraData", - "type": "bytes" - } - ], - "payable": true, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_party", - "type": "uint8" - } - ], - "name": "HasToPayFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_rulingOptions", - "type": "string" - } - ], - "name": "Dispute", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - } - ], - "unlinked_binary": "0x60606040526040516111363803806111368339810160405280805191906020018051919060200180519190602001805190910190505b838383835b835b60008054600160a060020a031916600160a060020a0383161790555b50600183905560028054600160a060020a03338116600160a060020a031992831617909255600380549285169290911691909117905560068180516100a19291602001906100b9565b505b5050600a80543401905550505b50505050610159565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100fa57805160ff1916838001178555610127565b82800160010185558215610127579182015b8281111561012757825182559160200191906001019061010c565b5b50610134929150610138565b5090565b61015691905b80821115610134576000815560010161013e565b5090565b90565b610fce806101686000396000f300606060405236156100f65763ffffffff60e060020a600035041663069fae2a81146100fb5780630c7ac7b61461014357806310e1d8ca146101ce57806319e2641e146101fd5780631b9265b814610212578063200d2ed214610227578063290401131461025e578063311a6c561461028d5780634a44c2e4146102a85780634b40c974146102c0578063512491f1146102e55780636cc6cde11461030a57806370dea79a14610339578063853c80ce1461035e5780638f71a26514610373578063a010963114610398578063aa8c217c146103a2578063b0a1e2b4146103c7578063b1bcce3a146103ec578063bac91e2e146103f6575b600080fd5b61014160046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061044995505050505050565b005b341561014e57600080fd5b610156610555565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101935780820151818401525b60200161017a565b50505050905090810190601f1680156101c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d957600080fd5b6101e16105f3565b604051600160a060020a03909116815260200160405180910390f35b341561020857600080fd5b610141610602565b005b341561021d57600080fd5b610141610660565b005b341561023257600080fd5b61023a6106bd565b6040518082600481111561024a57fe5b60ff16815260200191505060405180910390f35b341561026957600080fd5b6101e16106c6565b604051600160a060020a03909116815260200160405180910390f35b341561029857600080fd5b6101416004356024356106d5565b005b34156102b357600080fd5b610141600435610700565b005b34156102cb57600080fd5b6102d361076b565b60405190815260200160405180910390f35b34156102f057600080fd5b6102d3610771565b60405190815260200160405180910390f35b341561031557600080fd5b6101e1610777565b604051600160a060020a03909116815260200160405180910390f35b341561034457600080fd5b6102d3610786565b60405190815260200160405180910390f35b341561036957600080fd5b61014161078c565b005b341561037e57600080fd5b6102d36107ee565b60405190815260200160405180910390f35b6101416107f4565b005b34156103ad57600080fd5b6102d36109a8565b60405190815260200160405180910390f35b34156103d257600080fd5b6102d36109ae565b60405190815260200160405180910390f35b6101416109b4565b005b341561040157600080fd5b61014160046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b6995505050505050565b005b60025433600160a060020a0390811691161480610474575060035433600160a060020a039081169116145b151561047f57600080fd5b600054600854600160a060020a03909116906349912f88903490846040518463ffffffff1660e060020a0281526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156104f05780820151818401525b6020016104d7565b50505050905090810190601f16801561051d5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b151561053b57600080fd5b6125ee5a03f1151561054c57600080fd5b505050505b5b50565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105eb5780601f106105c0576101008083540402835291602001916105eb565b820191906000526020600020905b8154815290600101906020018083116105ce57829003601f168201915b505050505081565b600254600160a060020a031681565b60025433600160a060020a0390811691161461061d57600080fd5b60015b60095460ff16600481111561063157fe5b1461063b57600080fd5b6001546007540142101561064e57600080fd5b60085461065c906001610c7c565b5b5b565b60025433600160a060020a0390811691161461067b57600080fd5b600354600a54600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505015156106b457600080fd5b6000600a555b5b565b60095460ff1681565b600354600160a060020a031681565b60005433600160a060020a039081169116146106f057600080fd5b6106fa8282610c7c565b5b5b5050565b60035433600160a060020a0390811691161461071b57600080fd5b600a5481111561072a57600080fd5b600254600160a060020a031681156108fc0282604051600060405180830381858888f19350505050151561075d57600080fd5b600a805482900390555b5b50565b60045481565b60055481565b600054600160a060020a031681565b60015481565b60025433600160a060020a039081169116146107a757600080fd5b6002610620565b60095460ff16600481111561063157fe5b1461063b57600080fd5b6001546007540142101561064e57600080fd5b60085461065c906001610c7c565b5b5b565b60075481565b60025460009033600160a060020a0390811691161461081257600080fd5b60008054600160a060020a03169063f7434ea9906006906040516020015260405160e060020a63ffffffff84160281526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156108c05780601f10610895576101008083540402835291602001916108c0565b820191906000526020600020905b8154815290600101906020018083116108a357829003601f168201915b505092505050602060405180830381600087803b15156108df57600080fd5b6102c65a03f115156108f057600080fd5b505050604051805160045490925034018214905061090d57600080fd5b60035b60095460ff16600481111561092157fe5b1061092b57600080fd5b426007556005548190101561099957600980546001919060ff191682805b02179055507fba8db766b5582c21593909b57af48297714ea2c508bfff6c537ce36bb853e56860016040518082600181111561098157fe5b60ff16815260200191505060405180910390a1610551565b61055181610d06565b5b5b5b50565b600a5481565b60085481565b60035460009033600160a060020a039081169116146109d257600080fd5b60008054600160a060020a03169063f7434ea9906006906040516020015260405160e060020a63ffffffff8416028152602060048201908152825460026000196101006001841615020190911604602483018190529091829160449091019084908015610a805780601f10610a5557610100808354040283529160200191610a80565b820191906000526020600020905b815481529060010190602001808311610a6357829003601f168201915b505092505050602060405180830381600087803b1515610a9f57600080fd5b6102c65a03f11515610ab057600080fd5b5050506040518051600554909250340182149050610acd57600080fd5b60035b60095460ff166004811115610ae157fe5b10610aeb57600080fd5b426007556004548190101561099957600980546002919060ff19166001835b02179055507fba8db766b5582c21593909b57af48297714ea2c508bfff6c537ce36bb853e56860006040518082600181111561098157fe5b60ff16815260200191505060405180910390a1610551565b61055181610d06565b5b5b5b50565b60025433600160a060020a0390811691161480610b94575060035433600160a060020a039081169116145b1515610b9f57600080fd5b60035b60095460ff166004811115610bb357fe5b1015610bbe57600080fd5b600854600054600160a060020a03167fdccf2f8b2cc26eafcd61905cba744cff4b81d14740725f6376390dc6298a6a3c3384604051600160a060020a038316815260406020820181815290820183818151815260200191508051906020019080838360005b83811015610c3c5780820151818401525b602001610c23565b50505050905090810190601f168015610c695780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35b5b50565b610c868282610ef6565b6001811415610cc357600254600a54600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505050610cfb565b6002811415610cfb57600354600a54600160a060020a039091169080156108fc0290604051600060405180830381858888f150505050505b5b6000600a555b5050565b600980546003919060ff19166001835b021790555060008054600160a060020a03169063c13517e19083906002906006906040516020015260405160e060020a63ffffffff861602815260ff831660048201908152604060248301908152835460026000196101006001841615020190911604604484018190529192909160649091019084908015610dd95780601f10610dae57610100808354040283529160200191610dd9565b820191906000526020600020905b815481529060010190602001808311610dbc57829003601f168201915b505093505050506020604051808303818588803b1515610df857600080fd5b6125ee5a03f11515610e0957600080fd5b5050505060405180516008819055600054909150600160a060020a03167f775071bee3f2d409883bcb9dfcef6befa9343668ab341f76fcc5817b52a12611604080519081016040908152601982527f506172747920412077696e733b506172747920422077696e730000000000000060208301525160208082528190810183818151815260200191508051906020019080838360005b83811015610eb85780820151818401525b602001610e9f565b50505050905090810190601f168015610ee55780820380516001836020036101000a031916815260200191505b509250505060405180910390a35b50565b6008548214610f0457600080fd5b6002811115610f1257600080fd5b6001811415610f4f57600254600454600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505050610f87565b6002811415610f8757600354600554600160a060020a039091169080156108fc0290604051600060405180830381858888f150505050505b5b600980546004919060ff19166001835b02179055505b50505600a165627a7a72305820b89e77a056c660554912c96807ca9d04c900e04c48844da0a522ec530ae9c1000029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1506268465239 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/Arbitrator.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/Arbitrator.json deleted file mode 100644 index 474f570b..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/Arbitrator.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "contract_name": "Arbitrator", - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "currentRuling", - "outputs": [ - { - "name": "ruling", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_choices", - "type": "uint256" - }, - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "name": "disputeID", - "type": "uint256" - } - ], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appealCost", - "outputs": [ - { - "name": "fee", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "name": "fee", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "AppealPossible", - "type": "event" - } - ], - "unlinked_binary": "0x", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1508684836146 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/BlockHashRNG.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/BlockHashRNG.json deleted file mode 100644 index cd902cc6..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/BlockHashRNG.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "contract_name": "BlockHashRNG", - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getUncorrelatedRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRN", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "reward", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "saveRN", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "contribute", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "randomNumber", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - } - ], - "unlinked_binary": "0x6060604052341561000f57600080fd5b5b6102d38061001f6000396000f300606060405236156100805763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631c73601e81146100855780637b9c34e0146100ad578063a9fb763c146100ba578063b9a52203146100e2578063c1cbbca7146100fa578063ca4742f114610107578063f970dd021461012f575b600080fd5b341561009057600080fd5b61009b600435610157565b60405190815260200160405180910390f35b6100b86004356101bf565b005b34156100c557600080fd5b61009b6004356101cc565b60405190815260200160405180910390f35b34156100ed57600080fd5b6100b86004356101de565b005b6100b8600435610246565b005b341561011257600080fd5b61009b60043561025e565b60405190815260200160405180910390f35b341561013a57600080fd5b61009b600435610295565b60405190815260200160405180910390f35b6000806101638361025e565b905080151561017557600091506101b8565b338160405173ffffffffffffffffffffffffffffffffffffffff929092166c01000000000000000000000000028252601482015260340160405190819003902091505b5b50919050565b6101c881610246565b5b50565b60016020526000908152604090205481565b6000814015610241575060008181526001602090815260408083208054908490559183905291829020834090559073ffffffffffffffffffffffffffffffffffffffff33169082156108fc0290839051600060405180830381858888f150505050505b5b5050565b60008181526001602052604090208054340190555b50565b60008181526020819052604090205480151561028e5761027d826101de565b506000818152602081905260409020545b5b5b919050565b600060208190529081526040902054815600a165627a7a7230582081fcab63e3177b10037d4ad3eed33f347d1097eb65111751eb28d9c674b0cc420029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1508684836146 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/CentralizedArbitrator.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/CentralizedArbitrator.json deleted file mode 100644 index 1908c20a..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/CentralizedArbitrator.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "contract_name": "CentralizedArbitrator", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "disputes", - "outputs": [ - { - "name": "arbitrated", - "type": "address" - }, - { - "name": "choices", - "type": "uint256" - }, - { - "name": "fee", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_choices", - "type": "uint256" - }, - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "createDispute", - "outputs": [ - { - "name": "disputeID", - "type": "uint256" - } - ], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_ruling", - "type": "uint256" - } - ], - "name": "giveRuling", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appealCost", - "outputs": [ - { - "name": "fee", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "arbitrationCost", - "outputs": [ - { - "name": "fee", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_arbitrationPrice", - "type": "uint256" - } - ], - "name": "setArbitrationPrice", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "_arbitrationPrice", - "type": "uint256" - } - ], - "payable": false, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_disputeID", - "type": "uint256" - } - ], - "name": "AppealPossible", - "type": "event" - } - ], - "unlinked_binary": "0x606060405260008054600160a060020a03191633600160a060020a0316179055341561002a57600080fd5b604051602080610674833981016040528080519150505b60018190555b505b61061c806100586000396000f3006060604052361561008b5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166349912f888114610090578063564a565d146100dd5780638da5cb5b14610129578063c13517e114610158578063c97c4d5c146101b5578063f23f16e6146101d0578063f7434ea914610238578063ffb43c481461029b575b600080fd5b6100db600480359060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506102b395505050505050565b005b34156100e857600080fd5b6100f36004356102d3565b6040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390f35b341561013457600080fd5b61013c610310565b604051600160a060020a03909116815260200160405180910390f35b6101a3600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061031f95505050505050565b60405190815260200160405180910390f35b34156101c057600080fd5b6100db6004356024356103c5565b005b34156101db57600080fd5b6101a3600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061050195505050505050565b60405190815260200160405180910390f35b341561024357600080fd5b6101a360046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061052995505050505050565b60405190815260200160405180910390f35b34156102a657600080fd5b6100db600435610532565b005b81816102bf8282610501565b3410156102cb57600080fd5b5b5b50505050565b60028054829081106102e157fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116925083565b600054600160a060020a031681565b600061032b8383610557565b506001600280548060010182816103429190610578565b916000526020600020906003020160005b60606040519081016040908152600160a060020a03331682526020820189905234908201529190508151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002015550500390505b92915050565b600080548190819033600160a060020a039081169116146103e557600080fd5b60028054869081106103f357fe5b906000526020600020906003020160005b50600181015490935084111561041957600080fd5b5050600281018054825473ffffffffffffffffffffffffffffffffffffffff198116845560006001850181905590925590600160a060020a0390811690331682156108fc0283604051600060405180830381858888f19350505050151561047f57600080fd5b80600160a060020a031663311a6c5686866040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815260048101929092526024820152604401600060405180830381600087803b15156104e457600080fd5b6102c65a03f115156104f557600080fd5b5050505b5b5050505050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b92915050565b6001545b919050565b60005433600160a060020a0390811691161461054d57600080fd5b60018190555b5b50565b60008161056381610529565b34101561056f57600080fd5b5b5b5092915050565b8154818355818115116105a4576003028160030283600052602060002091820191016105a491906105aa565b5b505050565b6105ed91905b808211156105e957805473ffffffffffffffffffffffffffffffffffffffff1916815560006001820181905560028201556003016105b0565b5090565b905600a165627a7a72305820f37b2a60ae655b8a750f937149229426a15f1acbf1b0dc4b39ae731788935f3b0029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1507634569194 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/ConstantNG.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/ConstantNG.json deleted file mode 100644 index 56724794..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/ConstantNG.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "contract_name": "ConstantNG", - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getUncorrelatedRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRN", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "number", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "contribute", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "_number", - "type": "uint256" - } - ], - "payable": false, - "type": "constructor" - } - ], - "unlinked_binary": "0x6060604052341561000f57600080fd5b6040516020806101e5833981016040528080519150505b60008190555b505b6101a88061003d6000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631c73601e81146100695780637b9c34e0146100915780638381f58a1461009e578063c1cbbca7146100c3578063ca4742f1146100d0575b600080fd5b341561007457600080fd5b61007f6004356100f8565b60405190815260200160405180910390f35b61009c600435610160565b005b34156100a957600080fd5b61007f610169565b60405190815260200160405180910390f35b61009c600435610165565b005b34156100db57600080fd5b61007f600435610173565b60405190815260200160405180910390f35b60008061010483610173565b90508015156101165760009150610159565b338160405173ffffffffffffffffffffffffffffffffffffffff929092166c01000000000000000000000000028252601482015260340160405190819003902091505b5b50919050565b610165815b5b50565b60005481565b5b50565b6000545b9190505600a165627a7a723058200249980ce5bb9280dc1d118e01ccbcc0b685c20ad301013047d7350c9d6c997a0029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1510169197755 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/Migrations.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/Migrations.json deleted file mode 100644 index 85fde62f..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/Migrations.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "contract_name": "Migrations", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "new_address", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "last_completed_migration", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "completed", - "type": "uint256" - } - ], - "name": "setCompleted", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "inputs": [], - "payable": false, - "type": "constructor" - } - ], - "unlinked_binary": "0x6060604052341561000f57600080fd5b5b60008054600160a060020a03191633600160a060020a03161790555b5b6101e58061003c6000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630900f010811461005e578063445df0ac1461007f5780638da5cb5b146100a4578063fdacd576146100d3575b600080fd5b341561006957600080fd5b61007d600160a060020a03600435166100eb565b005b341561008a57600080fd5b610092610182565b60405190815260200160405180910390f35b34156100af57600080fd5b6100b7610188565b604051600160a060020a03909116815260200160405180910390f35b34156100de57600080fd5b61007d600435610197565b005b6000805433600160a060020a039081169116141561017c5781905080600160a060020a031663fdacd5766001546040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401600060405180830381600087803b151561016757600080fd5b6102c65a03f1151561017857600080fd5b5050505b5b5b5050565b60015481565b600054600160a060020a031681565b60005433600160a060020a03908116911614156101b45760018190555b5b5b505600a165627a7a72305820536153eac031f5a44f93edd8ad7b763774e76292b5bf38d2c97d3ebba9ef5feb0029", - "networks": { - "1506268110336": { - "events": {}, - "links": {}, - "address": "0xba12eddb8e4fbeff89f3f8bdb2dc697e08feec10", - "updated_at": 1506268560969 - } - }, - "schema_version": "0.0.5", - "updated_at": 1508684836146 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/RNG.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/RNG.json deleted file mode 100644 index 741123e8..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/RNG.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "contract_name": "RNG", - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getUncorrelatedRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRN", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "contribute", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - } - ], - "unlinked_binary": "0x", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1508684836147 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/RNGStandard.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/RNGStandard.json deleted file mode 100644 index 6006deb0..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/RNGStandard.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "contract_name": "RNGStandard", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getUncorrelatedRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRN", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "contribute", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - } - ], - "unlinked_binary": "0x", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1506278743336 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/TrustedRNG.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/TrustedRNG.json deleted file mode 100644 index ef234dd7..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/TrustedRNG.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "contract_name": "TrustedRNG", - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getUncorrelatedRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "requestRN", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "reward", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "contribute", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_block", - "type": "uint256" - } - ], - "name": "getRN", - "outputs": [ - { - "name": "RN", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_block", - "type": "uint256" - }, - { - "name": "_RN", - "type": "uint256" - } - ], - "name": "giveRN", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "", - "type": "uint256" - } - ], - "name": "randomNumber", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - } - ], - "unlinked_binary": "0x606060405260008054600160a060020a03191633600160a060020a0316179055341561002a57600080fd5b5b61035c8061003a6000396000f3006060604052361561008b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631c73601e81146100905780637b9c34e0146100b85780638da5cb5b146100c5578063a9fb763c146100f4578063c1cbbca71461011c578063ca4742f114610129578063ef655ebb14610151578063f970dd021461016c575b600080fd5b341561009b57600080fd5b6100a6600435610194565b60405190815260200160405180910390f35b6100c36004356101ef565b005b34156100d057600080fd5b6100d86101fc565b604051600160a060020a03909116815260200160405180910390f35b34156100ff57600080fd5b6100a660043561020b565b60405190815260200160405180910390f35b6100c360043561021d565b005b341561013457600080fd5b6100a6600435610279565b60405190815260200160405180910390f35b341561015c57600080fd5b6100c360043560243561028e565b005b341561017757600080fd5b6100a660043561031e565b60405190815260200160405180910390f35b6000806101a083610279565b90508015156101b257600091506101e8565b3381604051600160a060020a03929092166c01000000000000000000000000028252601482015260340160405190819003902091505b5b50919050565b6101f88161021d565b5b50565b600054600160a060020a031681565b60026020526000908152604090205481565b6000818152600160205260409020541561026057600054600160a060020a03163480156108fc0290604051600060405180830381858888f19350505050506101f8565b60008181526002602052604090208054340190555b5b50565b6000818152600160205260409020545b919050565b60005433600160a060020a039081169116146102a957600080fd5b600082815260016020526040902054156102c257600080fd5b60008054838252600260205260409182902054600160a060020a039091169181156108fc02919051600060405180830381858888f15050506000848152600160209081526040808320869055600290915281205550505b5b5050565b600160205260009081526040902054815600a165627a7a7230582005b57f1ebd74f2dcdf2bb46f4624bd5552f6b065cf34d9e6912e6c61e78a6f5b0029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1508684836147 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/build/contracts/TwoPartyArbitrable.json b/truebit-implementation/node_modules/kleros-interaction/build/contracts/TwoPartyArbitrable.json deleted file mode 100644 index b44d66ce..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/build/contracts/TwoPartyArbitrable.json +++ /dev/null @@ -1,313 +0,0 @@ -{ - "contract_name": "TwoPartyArbitrable", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "appeal", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "arbitratorExtraData", - "outputs": [ - { - "name": "", - "type": "bytes" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyA", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "timeOutByPartyA", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "status", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyB", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_disputeID", - "type": "uint256" - }, - { - "name": "_ruling", - "type": "uint256" - } - ], - "name": "rule", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyAFee", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "partyBFee", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "arbitrator", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "timeout", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "timeOutByPartyB", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "lastInteraction", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "payArbitrationFeeByPartyA", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "disputeID", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "payArbitrationFeeByPartyB", - "outputs": [], - "payable": true, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_evidence", - "type": "string" - } - ], - "name": "submitEvidence", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "_arbitrator", - "type": "address" - }, - { - "name": "_hashContract", - "type": "bytes32" - }, - { - "name": "_timeout", - "type": "uint256" - }, - { - "name": "_partyB", - "type": "address" - }, - { - "name": "_arbitratorExtraData", - "type": "bytes" - } - ], - "payable": false, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_party", - "type": "uint8" - } - ], - "name": "HasToPayFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_rulingOptions", - "type": "string" - } - ], - "name": "Dispute", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_arbitrator", - "type": "address" - }, - { - "indexed": true, - "name": "_disputeID", - "type": "uint256" - }, - { - "indexed": false, - "name": "_party", - "type": "address" - }, - { - "indexed": false, - "name": "_evidence", - "type": "string" - } - ], - "name": "Evidence", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "_contractHash", - "type": "bytes32" - } - ], - "name": "ContractHash", - "type": "event" - } - ], - "unlinked_binary": "0x6060604052341561000f57600080fd5b604051610fa7380380610fa7833981016040528080519190602001805191906020018051919060200180519190602001805190910190505b84845b60008054600160a060020a031916600160a060020a0384161790557f1892820d22f2ab2b60795935d39550f42562bf8862a0b3c2193b095baa40af218160405190815260200160405180910390a15b5050600183905560028054600160a060020a03338116600160a060020a031992831617909255600380549285169290911691909117905560068180516100e39291602001906100ef565b505b505050505061018f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061013057805160ff191683800117855561015d565b8280016001018555821561015d579182015b8281111561015d578251825591602001919060010190610142565b5b5061016a92915061016e565b5090565b61018c91905b8082111561016a5760008155600101610174565b5090565b90565b610e098061019e6000396000f300606060405236156100d55763ffffffff60e060020a600035041663069fae2a81146100da5780630c7ac7b61461012257806310e1d8ca146101ad57806319e2641e146101dc578063200d2ed2146101f15780632904011314610228578063311a6c56146102575780634b40c97414610272578063512491f1146102975780636cc6cde1146102bc57806370dea79a146102eb578063853c80ce146103105780638f71a26514610325578063a01096311461034a578063b0a1e2b414610354578063b1bcce3a14610379578063bac91e2e14610383575b600080fd5b61012060046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506103d695505050505050565b005b341561012d57600080fd5b6101356104e2565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101725780820151818401525b602001610159565b50505050905090810190601f16801561019f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101b857600080fd5b6101c0610580565b604051600160a060020a03909116815260200160405180910390f35b34156101e757600080fd5b61012061058f565b005b34156101fc57600080fd5b6102046105ed565b6040518082600481111561021457fe5b60ff16815260200191505060405180910390f35b341561023357600080fd5b6101c06105f6565b604051600160a060020a03909116815260200160405180910390f35b341561026257600080fd5b610120600435602435610605565b005b341561027d57600080fd5b610285610630565b60405190815260200160405180910390f35b34156102a257600080fd5b610285610636565b60405190815260200160405180910390f35b34156102c757600080fd5b6101c061063c565b604051600160a060020a03909116815260200160405180910390f35b34156102f657600080fd5b61028561064b565b60405190815260200160405180910390f35b341561031b57600080fd5b610120610651565b005b341561033057600080fd5b6102856106af565b60405190815260200160405180910390f35b6101206106b5565b005b341561035f57600080fd5b61028561086e565b60405190815260200160405180910390f35b610120610874565b005b341561038e57600080fd5b61012060046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610a2e95505050505050565b005b60025433600160a060020a0390811691161480610401575060035433600160a060020a039081169116145b151561040c57600080fd5b600054600854600160a060020a03909116906349912f88903490846040518463ffffffff1660e060020a0281526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561047d5780820151818401525b602001610464565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b15156104c857600080fd5b6125ee5a03f115156104d957600080fd5b505050505b5b50565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105785780601f1061054d57610100808354040283529160200191610578565b820191906000526020600020905b81548152906001019060200180831161055b57829003601f168201915b505050505081565b600254600160a060020a031681565b60025433600160a060020a039081169116146105aa57600080fd5b60015b60095460ff1660048111156105be57fe5b146105c857600080fd5b600154600754014210156105db57600080fd5b6008546105e9906001610b41565b5b5b565b60095460ff1681565b600354600160a060020a031681565b60005433600160a060020a0390811691161461062057600080fd5b61062a8282610b41565b5b5b5050565b60045481565b60055481565b600054600160a060020a031681565b60015481565b60035433600160a060020a0390811691161461066c57600080fd5b60025b60095460ff16600481111561068057fe5b1461068a57600080fd5b6001546007540142101561069d57600080fd5b6008546105e9906002610b41565b5b5b565b60075481565b60025460009033600160a060020a039081169116146106d357600080fd5b60008054600160a060020a03169063f7434ea9906006906040516020015260405160e060020a63ffffffff84160281526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b505092505050602060405180830381600087803b15156107a057600080fd5b6102c65a03f115156107b157600080fd5b505050604051805160048054340190819055909250821490506107d357600080fd5b60035b60095460ff1660048111156107e757fe5b106107f157600080fd5b426007556005548190101561085f57600980546001919060ff191682805b02179055507fba8db766b5582c21593909b57af48297714ea2c508bfff6c537ce36bb853e56860016040518082600181111561084757fe5b60ff16815260200191505060405180910390a16104de565b6104de81610bed565b5b5b5b50565b60085481565b60035460009033600160a060020a0390811691161461089257600080fd5b60008054600160a060020a03169063f7434ea9906006906040516020015260405160e060020a63ffffffff84160281526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156109405780601f1061091557610100808354040283529160200191610940565b820191906000526020600020905b81548152906001019060200180831161092357829003601f168201915b505092505050602060405180830381600087803b151561095f57600080fd5b6102c65a03f1151561097057600080fd5b5050506040518051600580543401908190559092508214905061099257600080fd5b60035b60095460ff1660048111156109a657fe5b106109b057600080fd5b426007556004548190101561085f57600980546002919060ff19166001835b02179055507fba8db766b5582c21593909b57af48297714ea2c508bfff6c537ce36bb853e56860006040518082600181111561084757fe5b60ff16815260200191505060405180910390a16104de565b6104de81610bed565b5b5b5b50565b60025433600160a060020a0390811691161480610a59575060035433600160a060020a039081169116145b1515610a6457600080fd5b60035b60095460ff166004811115610a7857fe5b1015610a8357600080fd5b600854600054600160a060020a03167fdccf2f8b2cc26eafcd61905cba744cff4b81d14740725f6376390dc6298a6a3c3384604051600160a060020a038316815260406020820181815290820183818151815260200191508051906020019080838360005b83811015610b015780820151818401525b602001610ae8565b50505050905090810190601f168015610b2e5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35b5b50565b6008548214610b4f57600080fd5b6002811115610b5d57600080fd5b6001811415610b9a57600254600454600160a060020a039091169080156108fc0290604051600060405180830381858888f1935050505050610bd2565b6002811415610bd257600354600554600160a060020a039091169080156108fc0290604051600060405180830381858888f150505050505b5b600980546004919060ff19166001835b02179055505b5050565b600980546003919060ff19166001835b021790555060008054600160a060020a03169063c13517e19083906002906006906040516020015260405160e060020a63ffffffff861602815260ff831660048201908152604060248301908152835460026000196101006001841615020190911604604484018190529192909160649091019084908015610cc05780601f10610c9557610100808354040283529160200191610cc0565b820191906000526020600020905b815481529060010190602001808311610ca357829003601f168201915b505093505050506020604051808303818588803b1515610cdf57600080fd5b6125ee5a03f11515610cf057600080fd5b5050505060405180516008819055600054909150600160a060020a03167f775071bee3f2d409883bcb9dfcef6befa9343668ab341f76fcc5817b52a12611604080519081016040908152601982527f506172747920412077696e733b506172747920422077696e730000000000000060208301525160208082528190810183818151815260200191508051906020019080838360005b83811015610d9f5780820151818401525b602001610d86565b50505050905090810190601f168015610dcc5780820380516001836020036101000a031916815260200191505b509250505060405180910390a35b505600a165627a7a723058208394f6990edf374079ddda20a6b547436b7a79c08982fde11d6002b99c888d9a0029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1507634569195 -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/Migrations.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/Migrations.sol deleted file mode 100644 index 7e7fe8d4..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/Migrations.sol +++ /dev/null @@ -1,23 +0,0 @@ -pragma solidity ^0.4.4; - -contract Migrations { - address public owner; - uint public last_completed_migration; - - modifier restricted() { - if (msg.sender == owner) _; - } - - function Migrations() { - owner = msg.sender; - } - - function setCompleted(uint completed) restricted { - last_completed_migration = completed; - } - - function upgrade(address new_address) restricted { - Migrations upgraded = Migrations(new_address); - upgraded.setCompleted(last_completed_migration); - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/README.txt b/truebit-implementation/node_modules/kleros-interaction/contracts/README.txt deleted file mode 100644 index 781fda6c..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/README.txt +++ /dev/null @@ -1 +0,0 @@ -Code diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/README.md b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/README.md deleted file mode 100644 index 6d714b29..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Standard - -Proposal of standards to be used beyond the Kleros project to allow interoperability between other dapps. - -Feel free to contribute by making pull request and reporting potential issue smart contract developers may have while using those standards. - -We also encourage you to create contracts implementing those standards, specially arbitrable ones. - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/AppealableArbitrator.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/AppealableArbitrator.sol deleted file mode 100644 index 8d602cce..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/AppealableArbitrator.sol +++ /dev/null @@ -1 +0,0 @@ -// TODO: Create a class allowing appeal to another arbitrator. diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Arbitrable.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Arbitrable.sol deleted file mode 100644 index dc13ad50..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Arbitrable.sol +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @title Arbitrable - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - -pragma solidity ^0.4.15; - -import "./Arbitrator.sol"; - -/** @title Arbitrable - * Arbitrable abstract contract. - * When developing arbitrable contracts, we need to: - * -Define the action taken when a ruling is received by the contract. We should do so in executeRuling. - * -Allow dispute creation. For this a function must: - * -Call arbitrator.createDispute.value(_fee)(_choices,_extraData); - * -Create the event Dispute(_arbitrator,_disputeID,_rulingOptions); - */ -contract Arbitrable{ - Arbitrator public arbitrator; - bytes public arbitratorExtraData; // Extra data to require particular dispute and appeal behaviour. - - modifier onlyArbitrator {require(msg.sender==address(arbitrator)); _;} - - /** @dev To be raised when a dispute is created. The main purpose of this event is to let the arbitrator know the meaning ruling IDs. - * @param _arbitrator The arbitrator of the contract. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _rulingOptions Map ruling IDs to short description of the ruling in a CSV format using ";" as a delimiter. Note that ruling IDs start a 1. For example "Send funds to buyer;Send funds to seller", means that ruling 1 will make the contract send funds to the buyer and 2 to the seller. - */ - event Dispute(Arbitrator indexed _arbitrator, uint indexed _disputeID, string _rulingOptions); - - /** @dev To be raised when a ruling is given. - * @param _arbitrator The arbitrator giving the ruling. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _ruling The ruling which was given. - */ - event Ruling(Arbitrator indexed _arbitrator, uint indexed _disputeID, uint _ruling); - - /** @dev To be raised when evidence are submitted. Should point to the ressource (evidences are not to be stored on chain due tp gas considerations). - * @param _arbitrator The arbitrator of the contract. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _party The address of the party submiting the evidence. Note that 0 is kept for evidences not submitted by any party. - * @param _evidence A link to evidence or if it is short the evidence itself. Can be web link ("http://X"), IPFS ("ipfs:/X") or another storing service (using the URI, see https://en.wikipedia.org/wiki/Uniform_Resource_Identifier ). One usecase of short evidence is to include the hash of the plain English contract. - */ - event Evidence(Arbitrator indexed _arbitrator, uint indexed _disputeID, address _party, string _evidence); - - /** @dev To be emmited at contract creation. Contains the hash of the plain text contract. This will allow any party to show what was the original contract. - * This event is used as cheap way of storing it. - * @param _contractHash Keccak256 hash of the plain text contract. - */ - event ContractHash(bytes32 _contractHash); - - /** @dev Constructor. Choose the arbitrator. - * @param _arbitrator The arbitrator of the contract. - * @param _contractHash Keccak256 hash of the plain text contract. - */ - function Arbitrable(Arbitrator _arbitrator, bytes _arbitratorExtraData, bytes32 _contractHash) { - arbitrator=_arbitrator; - arbitratorExtraData=_arbitratorExtraData; - ContractHash(_contractHash); - } - - /** @dev Give a ruling for a dispute. Must be call by the arbitrator. - * The purpose of this function is to ensure that the address calling it has the right to rule on the contract. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision". - */ - function rule(uint _disputeID, uint _ruling) onlyArbitrator { - Ruling(Arbitrator(msg.sender),_disputeID,_ruling); - - executeRuling(_disputeID,_ruling); - } - - - /** @dev Execute a ruling of a dispute. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision". - */ - function executeRuling(uint _disputeID, uint _ruling) internal; -} - - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/FundingVault.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/FundingVault.sol deleted file mode 100644 index e5ed6e44..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/FundingVault.sol +++ /dev/null @@ -1,306 +0,0 @@ - /** - * @title Funding Vault - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - -pragma solidity ^0.4.15; - -import "../Arbitrable.sol"; -import "minimetoken/contracts/MiniMeToken.sol"; - -/** @title Funding Vault - * A contract storing the ETH raised in a crowdfunding event. - * Funds are delivered when milestones are reached. - * The team can claim a milestone is reached. Token holders will have some time to dispute that claim. - * When some token holders vote to dispute the claim, extra time is given to other token holders to dispute that claim. - * If a sufficient amount of token holders dispute it. A dispute is created and the arbitrator will decide if the milestone has been reached. - * When there is a disagreement a vote token is created. Holders should send the voteToken to the Vault to disagree with the milestone. - * Token holders can also claim that the team failed to deliver and ask for the remaining ETH to be given back to a different contract. - * This contract can be the vault of another team, or a contract to reimburse. - */ -contract FundingVault is Arbitrable { - address public team; - MiniMeToken public token; - address public funder; - uint public disputeThreshold; - uint public claimToWithdrawTime; - uint public additionalTimeToWithdraw; - uint public timeout; - struct Milestone { - uint amount; // The maximum amount which can be unlocked for this milestone. - uint amountClaimed; // The current amount which is claimed. - uint claimTime; // The time the current claim was made. Or 0 if it's not currently claimed. - bool disputed; // True if a dispute has been raised. - uint feeTeam; // Arbitration fee paid by the team. - uint feeHolders; // Arbitration fee paid by token holders. - MiniMeToken voteToken; // Forked token which will be used to vote. - uint disputeID; // ID of the dispute if this claim is disputed. - uint lastTotalFeePayment; // Time of the last total fee payment, useful for timeouts. - bool lastTotalFeePaymentIsTeam; // True if the last interaction is from the team. - address payerForHolders; // The address who first paid the arbitration fee and will be refunded in case of victory. - } - Milestone[] public milestones; - mapping(uint => uint) public disputeIDToMilstoneID; // Map (disputeID => milestoneID). - - uint8 constant AMOUNT_OF_CHOICES = 2; - uint8 constant TEAM_WINS = 1; - uint8 constant HOLDERS_WINS = 2; - - /** @dev Constructor. Choose the arbitrator. - * @param _arbitrator The arbitrator of the contract. - * @param _contractHash Keccak256 hash of the plain text contract. - * @param _team The address of the team who will be able to claim milestone completion. - * @param _token The token whose holders are able to dispute milestone claims. - * @param _funder The party putting funds in the vault. - * @param _disputeThreshold The ‱ of tokens required to dispute a milestone. - * @param _claimToWithdrawTime The base time in seconds after a claim is considered non-disputed (i.e if no token holders dispute it). - * @param _additionalTimeToWithdraw The time in seconds which is added per ‱ of tokens disputing the claim. - * @param _timeout Maximum time to pay arbitration fees after the other side did. - */ - function FundingVault(Arbitrator _arbitrator, bytes _arbitratorExtraData, bytes32 _contractHash, address _team, address _token, address _funder, uint _disputeThreshold, uint _claimToWithdrawTime, uint _additionalTimeToWithdraw, uint _timeout) public Arbitrable(_arbitrator,_arbitratorExtraData,_contractHash) { - team=_team; - token=MiniMeToken(_token); - funder=_funder; - disputeThreshold=_disputeThreshold; - claimToWithdrawTime=_claimToWithdrawTime; - additionalTimeToWithdraw=_additionalTimeToWithdraw; - timeout=_timeout; - } - - /** @dev Give the funds for a milestone. - * @return milestoneID The ID of the milestone which was created. - */ - function fundMilestone() public payable returns(uint milestoneID) { - require(msg.sender==funder); - - return milestones.push(Milestone({ - amount:msg.value, - amountClaimed:0, - claimTime:0, - disputed:false, - feeTeam:0, - feeHolders:0, - voteToken:MiniMeToken(0x0), - disputeID:0, - lastTotalFeePayment:0, - lastTotalFeePaymentIsTeam:false, - payerForHolders:0x0 - }))-1; - } - - - /** @dev Claim funds of a milestone. - * @param _milestoneID The ID of the milestone. - * @param _amount The amount claim. Note that the team can claim less than the amount of a milestone. This allows partial completion claims. - */ - function claimMilestone(uint _milestoneID, uint _amount) public { - Milestone storage milestone=milestones[_milestoneID]; - require(msg.sender==team); - require(milestone.claimTime==0); // Verify another claim is not active. - require(milestone.amount<=_amount); - - milestone.claimTime=now; - } - - /** @dev Make a forked token to dispute a claim. - * This avoid creating a token all the time, since most milestones should not be disputed. - * @param _milestoneID The ID of the milestone. - */ - function makeVoteToken(uint _milestoneID) public { - Milestone storage milestone=milestones[_milestoneID]; - require(milestone.claimTime!=0); // The milestone is currently claimed by the team. - require(address(milestone.voteToken)==0x0); // Token has not already been made. - - milestone.voteToken=MiniMeToken(token.createCloneToken( - "", - token.decimals(), - "", - block.number, - true - )); - } - - /** @dev Pay fee to dispute a milestone. To be called by parties claiming the milestone was not completed. - * The first party to pay the fee entirely will be reimbursed if the dispute is won. - * Note that holders can make a smart contract to crowdfund the fee. - * In the rare event the arbitrationCost is increased, anyone can pay the extra, but it is always the first payer who can be reimbursed. - * @param _milestoneID The milestone which is disputed. - */ - function payDisputeFeeByHolders(uint _milestoneID) public payable { - Milestone storage milestone=milestones[_milestoneID]; - uint arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData); - require(!milestone.disputed); // The milestone is not already disputed. - require(milestone.voteToken.balanceOf(this) >= (disputeThreshold*milestone.voteToken.totalSupply())/1000); // There is enough votes. - require(milestone.feeHolders=arbitrationCost); // Enough is paid. - require(!milestone.disputed); // A dispute has not been created yet. - - milestone.feeHolders+=msg.value; - - if (milestone.payerForHolders==0x0) - milestone.payerForHolders=msg.sender; - - if (milestone.feeTeam>=arbitrationCost) { // Enough has been paid by all sides. - createDispute(_milestoneID,arbitrationCost); - } else if (milestone.lastTotalFeePayment==0) { // First time the fee is paid. - milestone.lastTotalFeePayment=now; - } else if(milestone.lastTotalFeePaymentIsTeam) { // The team was the last one who had paid entirely. - milestone.lastTotalFeePaymentIsTeam=false; - milestone.lastTotalFeePayment=now; - } - } - - /** @dev Pay fee to for a milestone dispute. To be called by the team when the holders have enough votes and fee paid. - * @param _milestoneID The milestone which is disputed. - */ - function payDisputeFeeByTeam(uint _milestoneID) public payable { - Milestone storage milestone=milestones[_milestoneID]; - uint arbitrationCost = arbitrator.arbitrationCost(arbitratorExtraData); - require(msg.sender==team); - require(!milestone.disputed); // A dispute has not been created yet. - require(milestone.voteToken.balanceOf(this) >= (disputeThreshold*milestone.voteToken.totalSupply())/1000); // There is enough votes. - require(milestone.feeTeam+msg.value>=arbitrationCost); // Make sure enough is paid. Team can't pay partially. - - - milestone.feeTeam+=msg.value; - if (milestone.feeHolders>=arbitrationCost) { // Enough has been paid by all sides. - createDispute(_milestoneID,arbitrationCost); - } - else if (milestone.lastTotalFeePayment==0) { // First time the fee is paid. - milestone.lastTotalFeePayment=now; - milestone.lastTotalFeePaymentIsTeam=true; - } else if(!milestone.lastTotalFeePaymentIsTeam) { // The holders were the last ones who had paid entirely. - milestone.lastTotalFeePaymentIsTeam=true; - milestone.lastTotalFeePayment=now; - } - } - - /** @dev Create a dispute. - * @param _milestoneID The milestone which is disputed. - * @param _arbitrationCost The amount which should be paid to the arbitrator. - */ - function createDispute(uint _milestoneID, uint _arbitrationCost) internal { - Milestone storage milestone=milestones[_milestoneID]; - milestone.disputed=true; - milestone.feeTeam-=_arbitrationCost; // Remove the fee from the team pool for accounting. Note that at this point it does not matter which fee variable we decrement. - milestone.disputeID=arbitrator.createDispute(AMOUNT_OF_CHOICES,arbitratorExtraData); - disputeIDToMilstoneID[milestone.disputeID]=_milestoneID; - } - - /** @dev Withdraw the money claimed in a milestone. - * To be called when a dispute has not been created within the time limit. - * @param _milestoneID The milestone which is disputed. - */ - function withdraw(uint _milestoneID) public { - Milestone storage milestone=milestones[_milestoneID]; - require(msg.sender==team); - require(!milestone.disputed); - require(milestone.voteToken.balanceOf(this) < (disputeThreshold*milestone.voteToken.totalSupply())/1000); // There is not enough votes. - require((now-milestone.claimTime) > claimToWithdrawTime+(additionalTimeToWithdraw*milestone.voteToken.balanceOf(this))/(1000*milestone.voteToken.totalSupply())); - - team.transfer(milestone.amountClaimed+milestone.feeTeam+milestone.feeHolders); // Pay the amount claimed and the unused fees. - milestone.amount-=milestone.amountClaimed; - milestone.amountClaimed=0; - milestone.claimTime=0; - milestone.feeTeam=0; - milestone.feeHolders=0; - - } - - // TODO: Timeouts - /** @dev Timeout to use when the holders don't pay the fee. - * @param _milestoneID The milestone which is disputed. - */ - function timeoutByTeam(uint _milestoneID) public { - Milestone storage milestone=milestones[_milestoneID]; - require(msg.sender==team); - require(milestone.lastTotalFeePaymentIsTeam); - require(now-milestone.lastTotalFeePayment > timeout); - - team.transfer(milestone.amountClaimed+milestone.feeTeam+milestone.feeHolders); // Pay the amount claimed and the unused fees to the team. - milestone.amount-=milestone.amountClaimed; - milestone.amountClaimed=0; - milestone.claimTime=0; - milestone.feeTeam=0; - milestone.feeHolders=0; - milestone.voteToken=MiniMeToken(0x0); - milestone.lastTotalFeePayment=0; - milestone.lastTotalFeePaymentIsTeam=false; - milestone.payerForHolders=0x0; - } - - /** @dev Timeout to use whe the team don't pay the fee. - * @param _milestoneID The milestone which is disputed. - */ - function timeoutByHolders(uint _milestoneID) public { - Milestone storage milestone=milestones[_milestoneID]; - require(!milestone.lastTotalFeePaymentIsTeam); - require(now-milestone.lastTotalFeePayment > timeout); - - milestone.payerForHolders.transfer(milestone.feeTeam+milestone.feeHolders); // Pay the unused fees to the payer for holders. - milestone.amountClaimed=0; - milestone.claimTime=0; - milestone.disputed=false; - milestone.feeTeam=0; - milestone.feeHolders=0; - milestone.voteToken=MiniMeToken(0x0); - milestone.lastTotalFeePayment=0; - milestone.payerForHolders=0x0; - } - - /** @dev Appeal an appealable ruling. - * Transfer the funds to the arbitrator. - * @param _milestoneID The milestone which is disputed. - */ - function appeal(uint _milestoneID) public payable { - Milestone storage milestone=milestones[_milestoneID]; - arbitrator.appeal.value(msg.value)(milestone.disputeID,arbitratorExtraData); - } - - /** @dev Execute a ruling of a dispute. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision". - */ - function executeRuling(uint _disputeID, uint _ruling) internal{ - Milestone storage milestone=milestones[disputeIDToMilstoneID[_disputeID]]; - require(milestone.voteToken.balanceOf(this) >= (disputeThreshold*milestone.voteToken.totalSupply())/1000); // Make sure there is enough votes to protect against a malicious arbitrator. - - if (_ruling==TEAM_WINS) { - team.transfer(milestone.amountClaimed+milestone.feeTeam+milestone.feeHolders); // Pay the amount claimed and the unused fees to the team. - milestone.amount-=milestone.amountClaimed; - milestone.amountClaimed=0; - milestone.claimTime=0; - milestone.disputed=false; - milestone.feeTeam=0; - milestone.feeHolders=0; - milestone.voteToken=MiniMeToken(0x0); - milestone.disputeID=0; - milestone.lastTotalFeePayment=0; - milestone.lastTotalFeePaymentIsTeam=false; - milestone.payerForHolders=0x0; - } else if (_ruling==HOLDERS_WINS) { - milestone.payerForHolders.transfer(milestone.feeTeam+milestone.feeHolders); // Pay the unused fees to the payer for holders. - milestone.amountClaimed=0; - milestone.claimTime=0; - milestone.disputed=false; - milestone.feeTeam=0; - milestone.feeHolders=0; - milestone.voteToken=MiniMeToken(0x0); - milestone.disputeID=0; - milestone.lastTotalFeePayment=0; - milestone.lastTotalFeePaymentIsTeam=false; - milestone.payerForHolders=0x0; - } - } - // TODO: Make a mechanism to send everything back to another contract. - - -} - - - - - - - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/LockedToken.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/LockedToken.sol deleted file mode 100644 index bd104aa6..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/LockedToken.sol +++ /dev/null @@ -1,96 +0,0 @@ -/** - * @title Locked Token - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - - -pragma solidity ^0.4.15; -import "zeppelin-solidity/contracts/token/ERC20/MintableToken.sol"; - - -/** @title Locked Token - * @dev A token when created coins are locked and unlock accross time. - * Note that we use steps for one month. In the future, when float are available, we could use law of exponential decay to avoid steps and have a smoothed unlocking. - */ -contract LockedToken is MintableToken { - uint public lockMultiplierPerMillionPerMonth; // The amount we must multiply the locked balance each month. - uint constant LOCK_DIVISOR = 1E6; - mapping (address => uint) public lastUnlock; // Last time tokens were unlocked. - mapping (address => uint) public amountLocked; // The amount of tokens locked. - - /** @dev Constructor. - * @param _lockMultiplierPerMillionPerMonth The amount we must multiply the locked portion each month. - * It is (1-unlockRatioPerYear)^(1/12) * 1E6. Note that we should compute that offchain to avoid integer rounding. - * So for 10% unlock per year, it is 991258. - */ - function LockedToken(uint _lockMultiplierPerMillionPerMonth) public { - lockMultiplierPerMillionPerMonth=_lockMultiplierPerMillionPerMonth; - } - - /** @dev Mint tokens. - * @param _to The address that will receive the minted tokens. - * @param _amount The amount of tokens to mint. - * @return A boolean that indicates if the operation was successful. - */ - function mint(address _to, uint256 _amount) public returns (bool) { - unlock(_to); - assert(super.mint(_to,_amount)); - amountLocked[_to].add(_amount); - return true; - } - - /** @dev Unlock the tokens which can. - * Note that this function is O(log(t)) where t is the last time of unlock. - * You can call partiallUnlock with a maxUnlock to avoid gas issues. - * But note that it is likely to never be necessary as the cost of this function, if not high even for multiple years. - * @param _to The address to unlock tokens from. - */ - function unlock(address _to) public { - partialUnlock(_to,uint(-1)); - } - - /** @dev Unlock the tokens which can. - * This function is O(_maxUnlock). You may need to call it multiple times. - * @param _to The address to unlock tokens from. - */ - function partialUnlock(address _to, uint _maxUnlock) public { - if (lastUnlock[_to].add(4 weeks) <= now && amountLocked[_to]!=0) { - uint amountOfMonths = now.sub(lastUnlock[_to]) / (4 weeks); - amountOfMonths = amountOfMonths < _maxUnlock ? amountOfMonths : _maxUnlock; - lastUnlock[_to]=lastUnlock[_to].add(amountOfMonths.mul(4 weeks)); // Update last unlock date. - uint newLocked=amountLocked[_to]; - for (uint i=0;i=_value); - - assert(super.transfer(_to,_value)); - return true; - } - - /** @dev Transfer tokens from one address to another - * @param _from address The address which you want to send tokens from - * @param _to address The address which you want to transfer to - * @param _value uint256 the amount of tokens to be transferred - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - unlock(_from); - require(balances[_from].sub(amountLocked[_from])>=_value); - - assert(super.transferFrom(_from,_to,_value)); - return true; - } - -} - - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/MiniMeTokenERC20.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/MiniMeTokenERC20.sol deleted file mode 100644 index 0560258e..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTokens/MiniMeTokenERC20.sol +++ /dev/null @@ -1,61 +0,0 @@ - /** - * @title Mini Me Token ERC20 - * Overwrite the MiniMeToken to make it follow ERC20 recommendation. - * This is required because the base token reverts when approve is used with the non zero value while allowed is non zero (which not recommended by the standard, see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md). - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - -pragma solidity ^0.4.18; - -import "minimetoken/contracts/MiniMeToken.sol"; - -contract MiniMeTokenERC20 is MiniMeToken { - - /** @notice Constructor to create a MiniMeTokenERC20 - * @param _tokenFactory The address of the MiniMeTokenFactory contract that will - * create the Clone token contracts, the token factory needs to be deployed first - * @param _parentToken Address of the parent token, set to 0x0 if it is a new token - * @param _parentSnapShotBlock Block of the parent token that will determine the - * initial distribution of the clone token, set to 0 if it is a new token - * @param _tokenName Name of the new token - * @param _decimalUnits Number of decimals of the new token - * @param _tokenSymbol Token Symbol for the new token - * @param _transfersEnabled If true, tokens will be able to be transferred - */ - function MiniMeTokenERC20( - address _tokenFactory, - address _parentToken, - uint _parentSnapShotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) MiniMeToken( - _tokenFactory, - _parentToken, - _parentSnapShotBlock, - _tokenName, - _decimalUnits, - _tokenSymbol, - _transfersEnabled - ) public {} - - /** @notice `msg.sender` approves `_spender` to spend `_amount` tokens on its behalf. - * This is a ERC20 compliant version. - * @param _spender The address of the account able to transfer the tokens - * @param _amount The amount of tokens to be approved for transfer - * @return True if the approval was successful - */ - function approve(address _spender, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); - } - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTransaction.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTransaction.sol deleted file mode 100644 index 352dd952..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitrableTransaction.sol +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @title Arbitrable Transaction - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - - -pragma solidity ^0.4.15; -import "./TwoPartyArbitrable.sol"; - -/** @title Arbitrable Transaction - * This is a a contract for an arbitrated transaction which can be reversed by the arbitrator. - * This can be used for buying goods, services and for paying freelancers. - * Party A is the payer. Party B is the payee. - */ - contract ArbitrableTransaction is TwoPartyArbitrable { - string constant RULING_OPTIONS = "Reimburse partyA;Pay partyB"; - - uint public amount; // Amount sent by party A. - - - /** @dev Constructor. Choose the arbitrator. Should be called by party A (the payer). - * @param _arbitrator The arbitrator of the contract. - * @param _hashContract Keccak hash of the plain English contract. - * @param _timeout Time after which a party automatically loose a dispute. - * @param _partyB The recipient of the transaction. - * @param _arbitratorExtraData Extra data for the arbitrator. - */ - function ArbitrableTransaction(Arbitrator _arbitrator, bytes32 _hashContract, uint _timeout, address _partyB, bytes _arbitratorExtraData) TwoPartyArbitrable(_arbitrator,_hashContract,_timeout,_partyB,_arbitratorExtraData) payable { - amount+=msg.value; - } - - /** @dev Pay the party B. To be called when the good is delivered or the service rendered. - */ - function pay() onlyPartyA { - partyB.transfer(amount); - amount=0; - } - - /** @dev Reimburse party A. To be called if the good or service can't be fully provided. - * @param _amountReimbursed Amount to reimburse in wei. - */ - function reimburse(uint _amountReimbursed) onlyPartyB { - require(_amountReimbursed<=amount); - partyA.transfer(_amountReimbursed); - amount-=_amountReimbursed; - } - - /** @dev Execute a ruling of a dispute. It reimburse the fee to the winning party. - * This need to be extended by contract inheriting from it. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _ruling Ruling given by the arbitrator. 1 : Reimburse the partyA. 2 : Pay the partyB. - */ - function executeRuling(uint _disputeID, uint _ruling) internal { - super.executeRuling(_disputeID,_ruling); - if (_ruling==PARTY_A_WINS) - partyA.send(amount); - else if (_ruling==PARTY_B_WINS) - partyB.send(amount); - - amount=0; - } - - - } - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Arbitrator.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Arbitrator.sol deleted file mode 100644 index 94b433c9..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Arbitrator.sol +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @title Arbitrator - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - -pragma solidity ^0.4.15; - -import "./Arbitrable.sol"; - -/** @title Arbitrator - * Arbitrator abstract contract. - * When developing arbitrator contracts we need to: - * -Define the functions for dispute creation (createDispute) and appeal (appeal). Don't forget to store the arbitrated contract and the disputeID (which should be unique, use nbDisputes). - * -Define the functions for cost display (arbitrationCost and appealCost). - * -Allow giving rulings. For this a function must call arbitrable.rule(disputeID,ruling). - */ -contract Arbitrator{ - - enum DisputeStatus {Waiting, Appealable, Solved} - - modifier requireArbitrationFee(bytes _extraData) {require(msg.value>=arbitrationCost(_extraData)); _;} - modifier requireAppealFee(uint _disputeID, bytes _extraData) {require(msg.value>=appealCost(_disputeID, _extraData)); _;} - - /** @dev To be raised when a dispute can be appealed. - * @param _disputeID ID of the dispute. - */ - event AppealPossible(uint _disputeID); - - /** @dev To be raised when a dispute is created. - * @param _disputeID ID of the dispute. - * @param _arbitrable The contract which created the dispute. - */ - event DisputeCreation(uint indexed _disputeID, Arbitrable _arbitrable); - - /** @dev To be raised when the current ruling is appealed. - * @param _disputeID ID of the dispute. - * @param _arbitrable The contract which created the dispute. - */ - event AppealDecision(uint indexed _disputeID, Arbitrable _arbitrable); - - /** @dev Create a dispute. Must be called by the arbitrable contract. - * Must be paid at least arbitrationCost(_extraData). - * @param _choices Amount of choices the arbitrator can make in this dispute. - * @param _extraData Can be used to give additional info on the dispute to be created. - * @return disputeID ID of the dispute created. - */ - function createDispute(uint _choices, bytes _extraData) public requireArbitrationFee(_extraData) payable returns(uint disputeID) {} - - /** @dev Compute the cost of arbitration. It is recommended not to increase it often, as it can be highly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - * @param _extraData Can be used to give additional info on the dispute to be created. - * @return fee Amount to be paid. - */ - function arbitrationCost(bytes _extraData) public constant returns(uint fee); - - /** @dev Appeal a ruling. Note that it has to be called before the arbitrator contract calls rule. - * @param _disputeID ID of the dispute to be appealed. - * @param _extraData Can be used to give extra info on the appeal. - */ - function appeal(uint _disputeID, bytes _extraData) public requireAppealFee(_disputeID,_extraData) payable { - AppealDecision(_disputeID, Arbitrable(msg.sender)); - } - - /** @dev Compute the cost of appeal. It is recommended not to increase it often, as it can be higly time and gas consuming for the arbitrated contracts to cope with fee augmentation. - * @param _disputeID ID of the dispute to be appealed. - * @param _extraData Can be used to give additional info on the dispute to be created. - * @return fee Amount to be paid. - */ - function appealCost(uint _disputeID, bytes _extraData) public constant returns(uint fee); - - /** @dev Return the status of a dispute. - * @param _disputeID ID of the dispute to rule. - * @return status The status of the dispute. - */ - function disputeStatus(uint _disputeID) public constant returns(DisputeStatus status); - - /** @dev Return the current ruling of a dispute. This is useful for parties to know if they should appeal. - * @param _disputeID ID of the dispute. - * @return ruling The current ruling which will be given if there is no appeal or which has been given. - */ - function currentRuling(uint _disputeID) public constant returns(uint ruling); - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitratorCourt.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitratorCourt.sol deleted file mode 100644 index 4bddc624..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/ArbitratorCourt.sol +++ /dev/null @@ -1,102 +0,0 @@ -pragma solidity ^0.4.15; - -import "./Arbitrator.sol"; - -/** - * @title ArbitratorCourt - * @author Enrique Piqueras - - * @notice An Arbitrator court in a tree of courts. - */ -contract ArbitratorCourt is Arbitrator { - /* Structs */ - - struct Court { - string name; - address _address; - } - - /* Events */ - - /** - * @notice Called whenever the `parent` court changes for off-chain handling. - * @param _prevParentName The previous `parent`'s name. - * @param _prevParentAddress The previous `parent`'s address. - * @param _nextParentName The next `parent`'s name. - * @param _nextParentAddress The next `parent`'s address. - */ - event OnParentChange(string _prevParentName, address _prevParentAddress, string _nextParentName, address _nextParentAddress); - - /** - * @notice Called whenever a sub court is added. - * @param _subCourtIndex The subcourt's index in this court. - * @param _subCourtName The subcourt's name. - * @param _subCourtAddress The subcourt's address. - */ - event OnSubCourtAdd(uint256 _subCourtIndex, string _subCourtName, address _subCourtAddress); - - /** - * @notice Called whenever a sub court is removed. - * @param _subCourtIndex The subcourt's index in this court. - * @param _subCourtName The subcourt's name. - * @param _subCourtAddress The subcourt's address. - */ - event OnSubCourtRemove(uint256 _subCourtIndex, string _subCourtName, address _subCourtAddress); - - /* Storage */ - - // Owner metadata - address public owner = msg.sender; - - // Courts - Court parent; // Appeal to this arbitrator if it is set, otherwise reject appeal and finalize decision. - Court[] subCourts; - - /* Modifiers */ - - /** - * @dev Makes a function only callable by the owner of this contract. - */ - modifier onlyOwner { - require(owner == msg.sender); - _; - } - - /* External */ - - /** - * @notice Sets the `parent` court. - * @param _nextParentName The next `parent`'s name. - * @param _nextParentAddress The next `parent`'s address. - */ - function setParent(string _nextParentName, address _nextParentAddress) external onlyOwner { - // Emit event before overwriting `parent` - emit OnParentChange(parent.name, parent._address, _nextParentName, _nextParentAddress); - - // Overwrite `parent` - parent = Court({ name: _nextParentName, _address: _nextParentAddress }); - } - - /** - * @notice Adds a new sub court. - * @param _subCourtName The subcourt's name. - * @param _subCourtAddress The subcourt's address. - */ - function addSubCourt(string _subCourtName, address _subCourtAddress) external onlyOwner { - uint256 _index = subCourts.push(Court({ name: _subCourtName, _address: _subCourtAddress })) - 1; - emit OnSubCourtAdd(_index, _subCourtName, _subCourtAddress); - } - - /** - * @notice Removes a sub court. - * @param _subCourtIndex The subcourt's index. - */ - function removeSubCourt(uint256 _subCourtIndex) external onlyOwner { - require(_subCourtIndex >= 0 && _subCourtIndex < subCourts.length); - - emit OnSubCourtRemove(_subCourtIndex, subCourts[_subCourtIndex].name, subCourts[_subCourtIndex]._address); - - // Remove from subCourts array - for (uint256 i = _subCourtIndex; i < subCourts.length; i++) subCourts[i] = subCourts[i + 1]; - subCourts.length--; - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/BackupedArbitrator.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/BackupedArbitrator.sol deleted file mode 100644 index 85d5483d..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/BackupedArbitrator.sol +++ /dev/null @@ -1 +0,0 @@ -// TODO: Create a class where the arbitrator can be appealed if he is unresponsive or "rule 0" (refuse to give a ruling). diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/BountyVault.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/BountyVault.sol deleted file mode 100644 index 1e4bb789..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/BountyVault.sol +++ /dev/null @@ -1,6 +0,0 @@ -// TODO: Create a contract which holds the monthly bounty amount. -// Team can fund the vault. -// Team can award points to contributors. -// Contributors can make claims to get points (and put a deposit). This leads to disputes with the team. -// People can challenge points of contributors (and put a deposit). If they win their challenges, points are removed. -// At the end of the month (and of the disputes, if there is any), the bounty is split between contributors in proportion of their points. diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/CentralizedArbitrator.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/CentralizedArbitrator.sol deleted file mode 100644 index 6bc7efd6..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/CentralizedArbitrator.sol +++ /dev/null @@ -1,118 +0,0 @@ -/** - * @title Arbitration Standard - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - -pragma solidity ^0.4.15; - -import "./Arbitrator.sol"; - -/** @title Centralized Arbitrator - * This is a centralized arbitrator deciding alone of the result of disputes. - * No appeals are possible. - */ -contract CentralizedArbitrator is Arbitrator { - - address public owner=msg.sender; - uint arbitrationPrice; // Not public because arbitrationCost already acts as an accessor. - uint constant NOT_PAYABLE_VALUE = (2**256-2)/2; // High value to be sure that the appeal is too expensive. - - struct Dispute { - Arbitrable arbitrated; - uint choices; - uint fee; - uint ruling; - DisputeStatus status; - } - - modifier onlyOwner {require(msg.sender==owner); _;} - - Dispute[] public disputes; - - /** @dev Constructor. Set the initial arbitration price. - * @param _arbitrationPrice Amount to be paid for arbitration. - */ - function CentralizedArbitrator(uint _arbitrationPrice) public { - arbitrationPrice = _arbitrationPrice; - } - - /** @dev Set the arbitration price. Only callable by the owner. - * @param _arbitrationPrice Amount to be paid for arbitration. - */ - function setArbitrationPrice(uint _arbitrationPrice) public onlyOwner { - arbitrationPrice = _arbitrationPrice; - } - - /** @dev Cost of arbitration. Accessor to arbitrationPrice. - * @param _extraData Not used by this contract. - * @return fee Amount to be paid. - */ - function arbitrationCost(bytes _extraData) public constant returns(uint fee) { - return arbitrationPrice; - } - - /** @dev Cost of appeal. Since it is not possible, it's a high value which can never be paid. - * @param _disputeID ID of the dispute to be appealed. Not used by this contract. - * @param _extraData Not used by this contract. - * @return fee Amount to be paid. - */ - function appealCost(uint _disputeID, bytes _extraData) public constant returns(uint fee) { - return NOT_PAYABLE_VALUE; - } - - /** @dev Create a dispute. Must be called by the arbitrable contract. - * Must be paid at least arbitrationCost(). - * @param _choices Amount of choices the arbitrator can make in this dispute. When ruling ruling<=choices. - * @param _extraData Can be used to give additional info on the dispute to be created. - * @return disputeID ID of the dispute created. - */ - function createDispute(uint _choices, bytes _extraData) public payable returns(uint disputeID) { - super.createDispute(_choices,_extraData); - disputeID = disputes.push(Dispute({ - arbitrated: Arbitrable(msg.sender), - choices: _choices, - fee: msg.value, - ruling: 0, - status: DisputeStatus.Waiting - })) - 1; // Create the dispute and return its number. - DisputeCreation(disputeID, Arbitrable(msg.sender)); - return disputeID; - } - - /** @dev Give a ruling. UNTRUSTED. - * @param _disputeID ID of the dispute to rule. - * @param _ruling Ruling given by the arbitrator. Note that 0 means "Not able/wanting to make a decision". - */ - function giveRuling(uint _disputeID, uint _ruling) public onlyOwner { - Dispute dispute = disputes[_disputeID]; - require(_ruling<=dispute.choices); - - uint fee = dispute.fee; - Arbitrable arbitrated = dispute.arbitrated; - dispute.arbitrated=Arbitrable(0x0); // Clean up to get gas back and prevent calling it again. - dispute.fee=0; - dispute.ruling=_ruling; - dispute.status=DisputeStatus.Solved; - - msg.sender.transfer(fee); - arbitrated.rule(_disputeID,_ruling); - } - - /** @dev Return the status of a dispute. - * @param _disputeID ID of the dispute to rule. - * @return status The status of the dispute. - */ - function disputeStatus(uint _disputeID) public constant returns(DisputeStatus status) { - return disputes[_disputeID].status; - } - - /** @dev Return the ruling of a dispute. - * @param _disputeID ID of the dispute to rule. - * @return ruling The ruling which would or has been given. - */ - function currentRuling(uint _disputeID) public constant returns(uint ruling) { - return disputes[_disputeID].ruling; - } -} - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/README.md b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/README.md deleted file mode 100644 index a519c06b..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Arbitration -Arbitrable.sol and Arbitrator.sol propose a standard for Arbitrable and Arbitrator contracts. - -CentralizedArbitrator.sol implement a centralized arbitrator as an Arbitrator contract. - -TwoPartyArbitrable.sol is an abstract contract requiring both parties to pay the arbitration fee and refunding the winning one. - -ArbitratedTransaction.sol is a contract allowing ether to be put in escrow, allowing the payer to finalize the transaction, the payee to reimburse part of it and the arbitrator to send the funds to the winning party in case of dispute. diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Rental.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Rental.sol deleted file mode 100644 index 6d421875..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/arbitration/Rental.sol +++ /dev/null @@ -1,104 +0,0 @@ -/** - * @title Rental - * @author Clément Lesaege - - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - - -pragma solidity ^0.4.15; -import "./TwoPartyArbitrable.sol"; - -/** @title Rental - * This is a a contract for rental agreement. - * This can be used to rent objects or properties. - * Party A is the renter. Party B is the owner. - * Party A put a deposit. If everything goes well, it will be given back. - * Otherwize parties can claim an amount of damages. If they disagree, the arbitrator will have to solve this dispute. - */ - contract Rental is TwoPartyArbitrable { - string constant RULING_OPTIONS = "Rule for party A (renter);Rule for Party B (owner)"; - - uint public amount; // Amount sent by party A. - uint public damagesClaimedByPartyA; // The amount party A agrees to pay to compensate damages. - uint public damagesClaimedByPartyB; // The amount party B claims to compensate damages. - - /** @dev Constructor. Choose the arbitrator. Should be called by party A (the payer). - * @param _arbitrator The arbitrator of the contract. - * @param _hashContract Keccak hash of the plain English contract. - * @param _timeout Time after which a party automatically loose a dispute. - * @param _partyB The owner. - * @param _arbitratorExtraData Extra data for the arbitrator. - */ - function Rental(Arbitrator _arbitrator, bytes32 _hashContract, uint _timeout, address _partyB, bytes _arbitratorExtraData) public TwoPartyArbitrable(_arbitrator,_hashContract,_timeout,_partyB,_arbitratorExtraData) payable { - amount+=msg.value; - } - - /** @dev Claim an amount of damages. - * Must be called before the dispute is created. - * If the amount agreed is the same for both, pay it. - * @param _damages The amount asked or agreed to be paid. - */ - function claimDamages(uint _damages) public onlyParty { - require(status - * Bug Bounties: This code hasn't undertaken a bug bounty program yet. - */ - - -pragma solidity ^0.4.15; -import "./Arbitrable.sol"; - - -/** @title Two-Party Arbitrable - * @dev A contract between two parties which can be arbitrated. Both parties has to pay for the arbitration fee. The winning party will get its fee refunded. - * To develop a contract inheriting from this one, you need to: - * - Redefine RULING_OPTIONS to explain the consequences of the possible rulings. - * - Redefine executeRuling while still calling super.executeRuling to implement the results of the arbitration. - */ -contract TwoPartyArbitrable is Arbitrable { - uint public timeout; // Time in second a party can take before being considered unresponding and lose the dispute. - address public partyA; - address public partyB; - uint public partyAFee; // Total fees paid by the partyA. - uint public partyBFee; // Total fees paid by the partyB. - uint public lastInteraction; // Last interaction for the dispute procedure. - uint public disputeID; - enum Status {NoDispute, WaitingPartyA, WaitingPartyB, DisputeCreated, Resolved} - Status public status; - - uint8 constant AMOUNT_OF_CHOICES = 2; - uint8 constant PARTY_A_WINS = 1; - uint8 constant PARTY_B_WINS = 2; - string constant RULING_OPTIONS = "Party A wins;Party B wins"; // A plain English of what rulings do. Need to be redefined by the child class. - - modifier onlyPartyA{ require(msg.sender==partyA); _; } - modifier onlyPartyB{ require(msg.sender==partyB); _; } - modifier onlyParty{ require(msg.sender==partyA || msg.sender==partyB); _; } - - enum Party {PartyA, PartyB} - - /** @dev Indicate that a party has to pay a fee or would otherwise be considered as loosing. - * @param _party The party who has to pay. - */ - event HasToPayFee(Party _party); - - /** @dev Constructor. Choose the arbitrator. - * @param _arbitrator The arbitrator of the contract. - * @param _hashContract Keccak hash of the plain English contract. - * @param _timeout Time after which a party automatically loose a dispute. - * @param _partyB The recipient of the transaction. - * @param _arbitratorExtraData Extra data for the arbitrator. - */ - function TwoPartyArbitrable(Arbitrator _arbitrator, bytes32 _hashContract, uint _timeout, address _partyB, bytes _arbitratorExtraData) Arbitrable(_arbitrator,_arbitratorExtraData,_hashContract) { - timeout=_timeout; - partyA=msg.sender; - partyB=_partyB; - } - - - /** @dev Pay the arbitration fee to raise a dispute. To be called by the party A. UNTRUSTED. - * Note that the arbitrator can have createDispute throw, which will make this function throw and therefore lead to a party being timed-out. - * This is not a vulnerability as the arbitrator can rule in favor of one party anyway. - */ - function payArbitrationFeeByPartyA() payable onlyPartyA { - uint arbitrationCost=arbitrator.arbitrationCost(arbitratorExtraData); - partyAFee+=msg.value; - require(partyAFee == arbitrationCost); // Require that the total pay at least the arbitration cost. - require(status=lastInteraction+timeout); - - executeRuling(disputeID,PARTY_A_WINS); - } - - /** @dev Pay partyB if partyA fails to pay the fee. - */ - function timeOutByPartyB() onlyPartyB { - require(status==Status.WaitingPartyA); - require(now>=lastInteraction+timeout); - - executeRuling(disputeID,PARTY_B_WINS); - } - - /** @dev Submit a reference to evidence. EVENT. - * @param _evidence A link to an evidence using its URI. - */ - function submitEvidence(string _evidence) onlyParty { - require(status>=Status.DisputeCreated); - Evidence(arbitrator,disputeID,msg.sender,_evidence); - } - - /** @dev Appeal an appealable ruling. - * Transfer the funds to the arbitrator. - * Note that no checks are required as the checks are done by the arbitrator. - * @param _extraData Extra data for the arbitrator appeal procedure. - */ - function appeal(bytes _extraData) onlyParty payable { - arbitrator.appeal.value(msg.value)(disputeID,_extraData); - } - - /** @dev Execute a ruling of a dispute. It reimburse the fee to the winning party. - * This need to be extended by contract inheriting from it. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _ruling Ruling given by the arbitrator. 1 : Reimburse the partyA. 2 : Pay the partyB. - */ - function executeRuling(uint _disputeID, uint _ruling) internal { - require(_disputeID==disputeID); - require(_ruling<=AMOUNT_OF_CHOICES); - - // Give the arbitration fee back. - // Note that we use send to prevent a party from blocking the execution. - if (_ruling==PARTY_A_WINS) - partyA.send(partyAFee > partyBFee ? partyAFee : partyBFee); // In both cases sends the highest amount paid to avoid ETH to be stuck in the contract if the arbitrator lowers its fee. - else if (_ruling==PARTY_B_WINS) - partyB.send(partyAFee > partyBFee ? partyAFee : partyBFee); - status=Status.Resolved; - } - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressBlacklist.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressBlacklist.sol deleted file mode 100644 index 2dfa301e..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressBlacklist.sol +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @title Address Blacklist - * @author Clément Lesaege - - */ - -pragma solidity ^0.4.15; - -import "zeppelin-solidity/contracts/ownership/Ownable.sol"; -import "./AddressWhitelist.sol"; - -/** - * @title Address Blacklist - * This is a Blacklist for addresses. The owner contract can Blacklist addresses. - */ -contract AddressBlacklist is AddressWhitelist { - - - /** @dev Return true if the address is allowed. - * @param _value The address we want to know if allowed. - * @return allowed True if the address is allowed, false otherwize. - */ - function isPermitted(address _value) public returns (bool allowed) { - return !super.isPermitted(_value); - } -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressPermissionInterface.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressPermissionInterface.sol deleted file mode 100644 index b1fd4267..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressPermissionInterface.sol +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @title Address Permission Interface - * @author Clément Lesaege - - */ - -pragma solidity ^0.4.15; - -/** - * @title Address Permission Interface - * This is a permission interface for addresses. - */ -interface AddressPermissionInterface{ - /** @dev Return true is the address is allowed. - * @param _value The address we want to know if allowed. - * @return allowed True if the address is allowed, false otherwise. - */ - function isPermitted(address _value) public returns (bool allowed); -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressWhitelist.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressWhitelist.sol deleted file mode 100644 index 8be1428b..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/AddressWhitelist.sol +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @title Address Whitelist - * @author Clément Lesaege - - */ - -pragma solidity ^0.4.15; - -import "zeppelin-solidity/contracts/ownership/Ownable.sol"; -import "./AddressPermissionInterface.sol"; - -/** - * @title Address Whitelist - * This is a Whitelist for addresses. The owner contract can Whitelist addresses. - */ -contract AddressWhitelist is Ownable, AddressPermissionInterface { - - mapping(address => bool) registred; // True if the address is registred. - - function add(address _value) onlyOwner { - registred[_value]=true; - } - - function remove(address _value) onlyOwner { - registred[_value]=false; - } - - /** @dev Return true is the address is allowed. - * @param _value The address we want to know if allowed. - * @return allowed True if the address is allowed, false otherwize. - */ - function isPermitted(address _value) public returns (bool allowed) { - return registred[_value]; - } -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/ArbitrableBlacklist.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/ArbitrableBlacklist.sol deleted file mode 100644 index 42ddb697..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/ArbitrableBlacklist.sol +++ /dev/null @@ -1,253 +0,0 @@ - /** - * @title Arbitrable Blacklist - * @author Clément Lesaege - - * This code hasn't undertaken bug bounty program yet. - * This code requires truffle tests. - */ - -pragma solidity ^0.4.18; - - -import "../arbitration/Arbitrable.sol"; -import "./PermissionInterface.sol"; - -/** - * @title Arbitrable Blacklist - * This is a arbitrator curated blacklist registry. Anyone can post an item with a deposit. If no one complains within a defined time period, the item is added to the blacklist registry. - * Someone can complain and also post a deposit, if, someone does, a dispute is created. The winner of the dispute gets the deposit of the other party and the item is added or removed accordingly. - * During the time of the dispute, the item is shown as blacklisted unless it already won a dispute before. This follows the philosophy that it is better to show the user a warning about a potentially harmless listing than to take the risk of the user to be scammed or exposed to inappropriate content without warning. - * To make a request, parties have to deposit a stake and the arbitration fees. If the arbitration fees change between the submitter payment and the challenger payment, a part of the submitter stake can be used as an arbitration fee deposit. - * In case the arbitrator refuses to rule, the item is put in the initial absent status and the balance is split equally between parties. - * - * Example of uses of this blacklist contract are: - * - ENS blacklist: Blacklisted (hash of) names would lead to the user receiving a warning in its UI when trying to interact with one. - * - Social Network Safe For Work/Kids sections: Blacklist (hash of) words / sentences refering or leading to NSFW/NSFK content. This may be enforced by voluntary censorship on the UI or make participants violating the SFW/SFK rules lose a deposit. - * - Listing blacklist: Blacklist categories of items which are forbiden on a marketplace or market place section (it can be terms refering to weapons or child porn material). The mechanism can be similar to the SFW/SFK example. - */ -contract ArbitrableBlacklist is PermissionInterface, Arbitrable { - - Arbitrator public arbitrator; - bytes public arbitratorExtraData; - uint public stake; - uint public timeToChallenge; - enum ItemStatus { - Absent, // The item has never been submitted. - Cleared, // The item has been submitted and the dispute resolution process determined it was not forbidden. Or a clearing request has been submitted and not contested. - Resubmitted, // The item has been cleared but someone has resubmitted a blacklist request. - Blacklisted, // The item has been submitted and the dispute resolution process determined it was forbidden. Or a blacklist request has been submitted and not contested. - Submitted, // There is a blacklist request for this item. - ClearingRequested, // The item is blacklisted but someone has submitted a clearing request. - PreventiveClearingRequested // The item has never been blacklisted but someone asked to clear it preventively to avoid it being shown as not permitted during the dispute process. - } - struct Item { - ItemStatus status; // Status of the item. - uint lastAction; // Time of the last action. - address submitter; // Address of the submitter if any. - address challenger; // Address of the challenger if any. - uint balance; // The total amount of funds to be given to the winner of a potential dispute. Include stake and reimbursement of arbitration fee. - bool disputed; // True if a dispute is taking place. - uint disputeID; // ID of the dispute, if any. - } - mapping(bytes32 => Item) public items; // Return True if the item is in the list. - mapping(uint => bytes32) public disputeIDToItem; // Give the item from the disputeID. - - uint8 constant BLACKLIST = 1; - uint8 constant CLEAR = 2; - string constant RULING_OPTIONS = "Blacklist;Clear"; // A plain English of what rulings do. - - - /** @dev Constructor. - * @param _stake The amount in weis of deposit required for a submission or a challenge. - * @param _timeToChallenge The time in second, others parties have to challenge - */ - function ArbitrableBlacklist(Arbitrator _arbitrator, bytes _arbitratorExtraData, uint _stake, uint _timeToChallenge) public { - arbitrator=_arbitrator; - arbitratorExtraData=_arbitratorExtraData; - stake=_stake; - timeToChallenge=_timeToChallenge; - } - - /** @dev Return true if the item is allowed. We take a conservative approach and return false if the status of the item is contested and it has not won a previous dispute. - * @param _value The value of item we want to know if allowed. - * @return allowed True if the item is allowed, false otherwise. - */ - function isPermitted(bytes32 _value) public returns (bool allowed) { - return items[_value].status<=ItemStatus.Resubmitted || (items[_value].status==ItemStatus.PreventiveClearingRequested && !items[_value].disputed); - - } - - /** @dev Request an item to be blacklisted. - * @param _value The value of item to blacklist. - */ - function requestBlacklisting(bytes32 _value) public payable { - Item storage item=items[_value]; - uint arbitratorCost=arbitrator.arbitrationCost(arbitratorExtraData); - require(msg.value>=stake+arbitratorCost); - if (items[_value].status==ItemStatus.Absent) - items[_value].status=ItemStatus.Submitted; - else if (items[_value].status==ItemStatus.Cleared) - items[_value].status=ItemStatus.Resubmitted; - else - revert(); // It the item is neither Absent nor Cleared, it is not possible to request blacklisting. - - item.submitter=msg.sender; - item.balance+=msg.value; - item.lastAction=now; - } - - /** @dev Request an item to be cleared. - * @param _value The value of item to be cleared. - */ - function requestClearing(bytes32 _value) public payable { - Item storage item=items[_value]; - uint arbitratorCost=arbitrator.arbitrationCost(arbitratorExtraData); - require(msg.value>=stake+arbitratorCost); - if (item.status==ItemStatus.Blacklisted) - item.status=ItemStatus.ClearingRequested; - else if (item.status==ItemStatus.Absent) - item.status=ItemStatus.PreventiveClearingRequested; - else - revert(); - item.submitter=msg.sender; - item.balance+=msg.value; - item.lastAction=now; - } - - /** @dev Challenge a blacklisting request. - * @param _value The value of item subject to the blacklist request. - */ - function challengeBlacklisting(bytes32 _value) public payable { - Item storage item=items[_value]; - uint arbitratorCost=arbitrator.arbitrationCost(arbitratorExtraData); - require(msg.value>=stake+arbitratorCost); - require(item.status==ItemStatus.Resubmitted || item.status==ItemStatus.Submitted); - require(!item.disputed); - - if (item.balance>=arbitratorCost) { // In the general case, create a dispute. - item.challenger=msg.sender; - item.balance+=msg.value-arbitratorCost; - item.disputed=true; - item.disputeID=arbitrator.createDispute.value(arbitratorCost)(2,arbitratorExtraData); - disputeIDToItem[item.disputeID]=_value; - } - else { // In the case the arbitration fees would have increased so much that the deposit of the requester is not high enough. Cancel the request. - if (item.status==ItemStatus.Resubmitted) - item.status=ItemStatus.Cleared; - else - item.status=ItemStatus.Absent; - item.submitter.send(item.balance); // On purpose use of send in order not to block the contract in case of reverting fallback. - item.balance=0; - msg.sender.transfer(msg.value); - } - item.lastAction=now; - } - - /** @dev Challenge a clearing request. - * @param _value The value of item subject to the clearing request. - */ - function challengeClearing(bytes32 _value) public payable { - Item storage item=items[_value]; - uint arbitratorCost=arbitrator.arbitrationCost(arbitratorExtraData); - require(msg.value>=stake+arbitratorCost); - require(item.status==ItemStatus.ClearingRequested || item.status==ItemStatus.PreventiveClearingRequested); - require(!item.disputed); - - if (item.balance>=arbitratorCost) { - item.challenger=msg.sender; - item.lastAction=now; - item.balance+=msg.value-arbitratorCost; - item.disputed=true; - item.disputeID=arbitrator.createDispute.value(arbitratorCost)(2,arbitratorExtraData); - disputeIDToItem[item.disputeID]=_value; - } - else { // In the case the arbitration fees would have increased so much that the deposit of the requester is not high enough. Cancel the request. - if (item.status==ItemStatus.ClearingRequested) - item.status=ItemStatus.Blacklisted; - else - item.status=ItemStatus.Absent; - item.submitter.send(item.balance); // On purpose use of send in order not to block the contract in case of reverting fallback. - item.balance=0; - msg.sender.transfer(msg.value); - } - item.lastAction=now; - } - - /** @dev Execute a request after the time for challenge has passed. Can be called by anyone. - * @param _value The value of item to execute the request. - */ - function executeRequest(bytes32 _value) public { - Item storage item=items[_value]; - require(now-item.lastAction >= timeToChallenge); - if (item.status==ItemStatus.Resubmitted || item.status==ItemStatus.Submitted) - item.status=ItemStatus.Blacklisted; - else if (item.status==ItemStatus.ClearingRequested || item.status==ItemStatus.PreventiveClearingRequested) - item.status=ItemStatus.Cleared; - else - revert(); - item.submitter.send(item.balance); // On purpose use of send in order not to block the contract in case of reverting fallback. - } - - /** @dev Appeal. Anyone can appeal to prevent a malicious actor from challenging its own submission and loosing on purpose. - * @param _value The value of item to execute the appeal. - */ - function appeal(bytes32 _value) public payable { - Item storage item=items[_value]; - arbitrator.appeal.value(msg.value)(item.disputeID,arbitratorExtraData); // Appeal, no need to check anything as the arbitrator does. - } - - /** @dev Execute a ruling of a dispute. - * @param _disputeID ID of the dispute in the Arbitrator contract. - * @param _ruling Ruling given by the arbitrator. Note that 0 is reserved for "Not able/wanting to make a decision". - */ - function executeRuling(uint _disputeID, uint _ruling) internal { - Item storage item=items[disputeIDToItem[_disputeID]]; - require(item.disputed); - if (_ruling==BLACKLIST) { - if (item.status==ItemStatus.Resubmitted || item.status==ItemStatus.Submitted) - item.submitter.send(item.balance); // The send are on purpose to prevent blocking. - else - item.challenger.send(item.balance); - item.status=ItemStatus.Blacklisted; - } else if (_ruling==CLEAR) { - if (item.status==ItemStatus.PreventiveClearingRequested || item.status==ItemStatus.ClearingRequested) - item.submitter.send(item.balance); - else - item.challenger.send(item.balance); - item.status=ItemStatus.Cleared; - } else { // Split the balance 50-50 and put the item in the absent initial state. - item.status=ItemStatus.Absent; - item.submitter.send(item.balance/2); - item.challenger.send(item.balance/2); - } - item.disputed=false; - item.balance=0; - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/Blacklist.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/Blacklist.sol deleted file mode 100644 index 768cd744..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/Blacklist.sol +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @title Blacklist - * @author Clément Lesaege - - */ - -pragma solidity ^0.4.15; - -import "./Whitelist.sol"; - -/** - * @title Address Blacklist - * This is a Blacklist for arbitrary values. The owner contract can Blacklist addresses. - */ -contract Blacklist is Whitelist { - - - /** @dev Return true is the address is allowed. - * @param _value The address we want to know if allowed. - * @return allowed True if the address is allowed, false otherwize. - */ - function isPermitted(bytes32 _value) public returns (bool allowed) { - return !super.isPermitted(_value); - } -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/PermissionInterface.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/PermissionInterface.sol deleted file mode 100644 index c23691ec..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/PermissionInterface.sol +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @title Permission Interface - * @author Clément Lesaege - - */ - -pragma solidity ^0.4.15; - -/** - * @title Permission Interface - * This is a permission interface for arbitrary values. The values can be cast to the required types. - */ -interface PermissionInterface{ - /** @dev Return true is the value is allowed. - * @param _value The value we want to know if allowed. - * @return allowed True if the value is allowed, false otherwise. - */ - function isPermitted(bytes32 _value) public returns (bool allowed); -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/Whitelist.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/Whitelist.sol deleted file mode 100644 index c6299791..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/permission/Whitelist.sol +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @title Whitelist - * @author Clément Lesaege - - */ - -pragma solidity ^0.4.15; - -import "zeppelin-solidity/contracts/ownership/Ownable.sol"; -import "./PermissionInterface.sol"; - -/** - * @title Whitelist - * This is a Whitelist for arbitrary values. The owner contract can whitelist values. - */ -contract Whitelist is Ownable, PermissionInterface { - - mapping(bytes32 => bool) registred; // True if the address is registered. - - function add(bytes32 _value) onlyOwner { - registred[_value]=true; - } - - function remove(bytes32 _value) onlyOwner { - registred[_value]=false; - } - - /** @dev Return true if the value is allowed. - * @param _value The value we want to know if allowed. - * @return allowed True if the value is allowed, false otherwise. - */ - function isPermitted(bytes32 _value) public returns (bool allowed) { - return registred[_value]; - } -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/ArbitratorVersioningProxy.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/ArbitratorVersioningProxy.sol deleted file mode 100644 index e7f91eda..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/ArbitratorVersioningProxy.sol +++ /dev/null @@ -1,84 +0,0 @@ -pragma solidity ^0.4.15; - -import "../arbitration/Arbitrator.sol"; - -import "./VersioningProxy.sol"; - -/** - * @title ArbitratorVersioningProxy - * @author Enrique Piqueras - - * @notice An Arbitrator proxy that only exposes methods in the Arbitrator spec. - */ -contract ArbitratorVersioningProxy is Arbitrator, VersioningProxy { - /* Structs */ - - struct Dispute { - address arbitrator; - uint256 disputeID; - uint256 choices; - } - - /* Storage */ - - Dispute[] public disputes; - - /* Modifiers */ - - /** - * @dev Makes a function only callable if the dispute exists. - * @param _disputeID The ID of the dispute. - */ - modifier onlyIfDisputeExists(uint256 _disputeID) { - require(disputes[_disputeID].arbitrator != address(0)); - _; - } - - /* Constructor */ - - /** - * @notice Constructs the arbitrator versioning proxy with the first arbitrator contract version address and tags it v0.0.1. - * @param _firstAddress The address of the first arbitrator contract version. - */ - function ArbitratorVersioningProxy(address _firstAddress) VersioningProxy("0.0.1", _firstAddress) public {} - - /* Public */ - - function createDispute(uint256 _choices, bytes _extraData) public payable returns(uint256 _disputeID) { - uint256 _arbitratorDisputeID = Arbitrator(implementation).createDispute.value(msg.value)(_choices, _extraData); - return disputes.push( - Dispute({ - arbitrator: implementation, - disputeID: _arbitratorDisputeID, - choices: _choices - }) - ); - } - - function appeal(uint256 _disputeID, bytes _extraData) public payable onlyIfDisputeExists(_disputeID) { - if (disputes[_disputeID].arbitrator != implementation) { // Arbitrator has been upgraded, create a new dispute in the new arbitrator - uint256 _choices = disputes[_disputeID].choices; - uint256 _arbitratorDisputeID = Arbitrator(implementation).createDispute.value(msg.value)(_choices, _extraData); - disputes[_disputeID] = Dispute({ arbitrator: implementation, disputeID: _arbitratorDisputeID, choices: _choices }); - } - - Arbitrator(implementation).appeal.value(msg.value)(disputes[_disputeID].disputeID, _extraData); - } - - /* Public Views */ - - function arbitrationCost(bytes _extraData) public view returns(uint256 _fee) { - return Arbitrator(implementation).arbitrationCost(_extraData); - } - - function appealCost(uint256 _disputeID, bytes _extraData) public view returns(uint256 _fee) { - return Arbitrator(implementation).appealCost(disputes[_disputeID].disputeID, _extraData); - } - - function currentRuling(uint256 _disputeID) public view onlyIfDisputeExists(_disputeID) returns(uint256 _ruling) { - return Arbitrator(disputes[_disputeID].arbitrator).currentRuling(disputes[_disputeID].disputeID); - } - - function disputeStatus(uint256 _disputeID) public view onlyIfDisputeExists(_disputeID) returns(Arbitrator.DisputeStatus _status) { - return Arbitrator(disputes[_disputeID].arbitrator).disputeStatus(disputes[_disputeID].disputeID); - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/ExperimentalProxy.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/ExperimentalProxy.sol deleted file mode 100644 index 06968c2c..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/ExperimentalProxy.sol +++ /dev/null @@ -1,109 +0,0 @@ -pragma solidity ^0.4.15; - -/** - * @title ExperimentalProxy - * @author Enrique Piqueras - - * @notice An experimental base proxy contract that forwards all calls to the 'implementation' contract and optionally keeps all storage. - */ -contract ExperimentalProxy { - /* Storage */ - - bool public storageIsEternal; - address public implementation; - - /* Constructor */ - - /** - * @notice Constructs the proxy with the eternal storage flag and an initial 'implementation' contract address. - * @param _storageIsEternal Wether this contract should store all storage. I.e. Use 'delegatecall'. - * @param _implementation The initial 'implementation' contract address. - */ - function ExperimentalProxy(bool _storageIsEternal, address _implementation) public { - storageIsEternal = _storageIsEternal; - implementation = _implementation; - } - - /* Fallback */ - - /** - * @notice The fallback function that forwards calls to the 'implementation' contract. - * @return The result of calling the requested function on the 'implementation' contract. - */ - function () payable external { - require(implementation != address(0)); // Make sure address is valid - - // Store necessary data for assembly in local memory - bool _storageIsEternal = storageIsEternal; - bytes memory _data = msg.data; - address _implementation = getImplementation(msg.sig, _data); - - // Return data - bytes memory _retData; - - assembly { - // Start of payload raw data (skip over size slot) - let _dataPtr := add(_data, 0x20) - - // Payload's size - let _dataSize := mload(_data) - - // Figure out what OPCODE to use and forward call - let _result - switch _storageIsEternal - case 0 { // Not eternal, use implementation's storage - _result := call(gas, _implementation, callvalue, _dataPtr, _dataSize, 0, 0) - } - default { // Eternal, use current contract's storage - _result := delegatecall(gas, _implementation, _dataPtr, _dataSize, 0, 0) - } - - // Size of the returned data - let _retSize := returndatasize - - let _retPtr := mload(0x40) // Start of free memory - let _retDataPtr := add(_retPtr, 0x20) // Make space for 'bytes' size - - // Build `_retData` 'bytes' - mstore(_retPtr, _retSize) // Copy size - returndatacopy(_retDataPtr, 0, _retSize) // Copy returned data - - // Figure out wether to revert or continue with the returned data - switch _result - case 0 { // Error - revert(_retDataPtr, _retSize) - } - default { // Success - _retData := _retPtr - } - } - - // Call on-chain handler - handleProxySuccess(msg.sig, _data, _retData); - - assembly { - return(add(_retData, 0x20), mload(_retData)) // Return returned data - } - } - - /* Private */ - - /** - * @notice On-chain handler that gets called with call data and the 'implementation' contract's return data after a call is successfully proxied. - * @dev Overwrite this function to handle the results of proxied calls in this contract. - * @param _sig The function signature of the called function. - * @param _data The data passed into the call. - * @param _retData The return data of the 'implementation' contract for the proxied call. - */ - function handleProxySuccess(bytes4 _sig, bytes _data, bytes _retData) private {} - - /* Private Views */ - - /** - * @notice Function for dynamically getting the 'implementation' contract address. - * @dev Overwrite this function to implement custom resolving logic based on the function being called and the data passed in. - * @param _sig The function signature of the called function. - * @param _data The data passed into the call. - * @return The resolved 'implementation' contract address. - */ - function getImplementation(bytes4 _sig, bytes _data) private view returns(address _implementation) { return implementation; } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/Proxy.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/Proxy.sol deleted file mode 100644 index e12180a5..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/Proxy.sol +++ /dev/null @@ -1,22 +0,0 @@ -pragma solidity ^0.4.15; - -/** - * @title Proxy - * @author Enrique Piqueras - - * @notice A base proxy contract. - */ -contract Proxy { - /* Storage */ - - address public implementation; - - /* Constructor */ - - /** - * @notice Constructs the proxy with the initial 'implementation' contract address. - * @param _implementation The initial 'implementation' contract address. - */ - function Proxy(address _implementation) public { - implementation = _implementation; - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/VersioningProxy.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/VersioningProxy.sol deleted file mode 100644 index cf56795a..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/proxy/VersioningProxy.sol +++ /dev/null @@ -1,139 +0,0 @@ -pragma solidity ^0.4.15; - -import "./Proxy.sol"; - -/** - * @title VersioningProxy - * @author Enrique Piqueras - - * @notice A base contract derived from Proxy for managing the deployment of versions of another contract, the managed contract. - */ -contract VersioningProxy is Proxy { - /* Structs */ - - struct Deployment { - bytes32 tag; - address _address; - } - - /* Events */ - - /** - * @notice Called whenever 'stable' changes for off-chain handling. - * @param _prevTag The previous 'stable' managed contract version tag. - * @param _prevAddress The previous 'stable' managed contract address. - * @param _nextTag The next 'stable' managed contract version tag. - * @param _nextAddress The next 'stable' managed contract address. - */ - event OnStableChange(bytes32 _prevTag, address _prevAddress, bytes32 _nextTag, address _nextAddress); - - /* Storage */ - - // Owner and Creation Metadata - address public owner = msg.sender; - uint256 public creationTime = now; - - // Deployments - bytes32[] public tags; // We keep this so we can iterate over versions - mapping (bytes32 => address) public addresses; - Deployment public stable; - - /* Modifiers */ - - /** - * @dev Makes a function only callable by the owner of this contract. - */ - modifier onlyOwner { - require(owner == msg.sender); - _; - } - - /* Constructor */ - - /** - * @notice Constructs the versioning proxy with the proxy eternal storage flag and the first version of the managed contract, `firstTag`, at `firstAddress`. - * @param _firstTag The version tag of the first version of the managed contract. - * @param _firstAddress The address of the first verion of the managed contract. - */ - function VersioningProxy(bytes32 _firstTag, address _firstAddress) Proxy(_firstAddress) public { - publish(_firstTag, _firstAddress); - } - - /* External */ - - /** - * @notice Rolls back 'stable' to the previous deployment, and returns true, if one exists, returns false otherwise. - * @return True if there was a previous version and the rollback succeeded, false otherwise. - */ - function rollback() external onlyOwner returns(bool _success) { - uint256 tagsLen = tags.length; - if (tagsLen <= 2) // We don't have a previous deployment, return false - return false; - - // Roll back and return true - bytes32 prevTag = tags[tagsLen - 2]; - setStable(prevTag); - return true; - } - - /* External Views */ - - /** - * @notice Returns all deployed version tags. - * @return All of the deployed version tags. - */ - function allTags() external view returns(bytes32[] _tags) { - return tags; - } - - /* Public */ - - /** - * @notice Publishes the next version of the managed contract, `nextTag`, at `nextAddress`. - * @param _nextTag The next version tag. - * @param _nextAddress The next address of the managed contract. - */ - function publish(bytes32 _nextTag, address _nextAddress) public onlyOwner { - // Publish - tags.push(_nextTag); // Push next tag - addresses[_nextTag] = _nextAddress; // Set next address - - // Set 'stable' - setStable(_nextTag); - } - - /** - * @notice Sets the value of 'stable' to the address of `nextTag`. - * @param _nextTag The already published version tag. - */ - function setStable(bytes32 _nextTag) public onlyOwner { - // Make sure this version has already been published - address nextAddress = addresses[_nextTag]; - require(nextAddress != address(0)); - - // Save current tag and address for handlers - bytes32 prevTag = stable.tag; - address prevAddress = stable._address; - - // Set 'stable' - stable = Deployment({tag: _nextTag, _address: nextAddress}); - - // Call handler and fire event - handleStableChange(prevTag, prevAddress, _nextTag, nextAddress); // on-chain - OnStableChange(prevTag, prevAddress, _nextTag, nextAddress); // off-chain - - // Change proxy target - implementation = nextAddress; - } - - /* Private */ - - /** - * @notice Called whenever 'stable' changes for on-chain handling. - * @dev Overwrite this function to handle 'stable' changes on-chain. - * @param _prevTag The previous 'stable' managed contract version tag. - * @param _prevAddress The previous 'stable' managed contract address. - * @param _nextTag The next 'stable' managed contract version tag. - * @param _nextAddress The next 'stable' managed contract address. - */ - function handleStableChange(bytes32 _prevTag, address _prevAddress, bytes32 _nextTag, address _nextAddress) private {} -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/BlockhashRNG.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/BlockhashRNG.sol deleted file mode 100644 index 759ade18..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/BlockhashRNG.sol +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @title Random Number Generator usign blockhash - * @author Clément Lesaege - - * - * This contract implement the RNG standard and giving parties incentives in saving the blockhash to avoid it to become unreachable after 256 blocks. - * - */ -pragma solidity ^0.4.15; - -import "./RNG.sol"; - -/** Simple Random Number Generator returning the blockhash. - * Allows saving the random number for use in the future. - * It allows the contract to still access the blockhash even after 256 blocks. - * The first party to call the save function gets the reward. - */ -contract BlockHashRNG is RNG { - - mapping (uint => uint) public randomNumber; // RN[block] is the random number for this block 0 otherwise. - mapping (uint => uint) public reward; // reward[block] is the amount to be paid to the party w. - - - - /** @dev Contribute to the reward of a random number. - * @param _block Block the random number is linked to. - */ - function contribute(uint _block) public payable { reward[_block]+=msg.value; } - - - /** @dev Return the random number. If it has not been saved and is still computable compute it. - * @param _block Block the random number is linked to. - * @return RN Random Number. If the number is not ready or has not been requested 0 instead. - */ - function getRN(uint _block) public constant returns (uint RN) { - RN=randomNumber[_block]; - if (RN==0){ - saveRN(_block); - return randomNumber[_block]; - } - else - return RN; - } - - /** @dev Save the random number for this blockhash and give the reward to the caller. - * @param _block Block the random number is linked to. - */ - function saveRN(uint _block) public { - if (block.blockhash(_block)!=0x0) { - uint rewardToSend=reward[_block]; - reward[_block]=0; - randomNumber[_block]=uint(block.blockhash(_block)); - - msg.sender.send(rewardToSend); // Note that the use of send is on purpose as we don't want to block in case the msg.sender has a fallback issue. - - } - } - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/BlockhashRNGFallback.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/BlockhashRNGFallback.sol deleted file mode 100644 index 09e77970..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/BlockhashRNGFallback.sol +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @title Random Number Generator using blockhash with fallback. - * @author Clément Lesaege - - * - * This contract implement the RNG standard and giving parties incentives in saving the blockhash to avoid it to become unreachable after 256 blocks. - * In case no one called it within the 256 blocks, it returns the previous blockhash. - * This contract must be used when returning 0 is more problematic than returning another blockhash. - * Note that if someone calls it within the timeframe, this contracts acts exactly as BlockHashRNG. - */ -pragma solidity ^0.4.15; - -import "./BlockHashRNG.sol"; - -/** Random Number Generator returning the blockhash with a backup behaviour. - * Allows saving the random number for use in the future. - * It allows the contract to still access the blockhash even after 256 blocks. - * The first party to call the save function gets the reward. - * If no one calls the contract within 256 blocks, the contract fallback in returning the blockhash of the previous block. - */ -contract BlockHashRNGFallback is BlockHashRNG { - - /** @dev Save the random number for this blockhash and give the reward to the caller. - * @param _block Block the random number is linked to. - */ - function saveRN(uint _block) public { - if (_block - * @dev A Random Number Generator which always return the same number. Usefull in order to make tests. - */ - -import "./RNG.sol"; - -pragma solidity ^0.4.15; - - contract ConstantNG is RNG{ - - uint public number; - - /** @dev Constructor. - * @param _number The number to always return. - */ - function ConstantNG(uint _number) public { - number = _number; - } - - /** @dev Contribute to the reward of a random number. All the ETH will be lost forever. - * @param _block Block the random number is linked to. - */ - function contribute(uint _block) public payable {} - - - /** @dev Get the "random number" (which is always the same). - * @param _block Block the random number is linked to. - * @return RN Random Number. If the number is not ready or has not been required 0 instead. - */ - function getRN(uint _block) public constant returns (uint RN) { - return number; - } - - - } diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/README.md b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/README.md deleted file mode 100644 index d89c7b0b..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Random Number Generation - -RNGStandard.sol proposes a standard for random number generating contracts. - -RNGBlockhash.sol implements it using the simplest method of using the blockhash (not that it can be manipulated by miners not publishing blocks - -TrustedRNG.sol implements a random number generator based on a trusted third party. diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/RNG.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/RNG.sol deleted file mode 100644 index e92b52ab..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/RNG.sol +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @title Random Number Generator Standard - * @author Clément Lesaege - - * - */ - -pragma solidity ^0.4.15; - - contract RNG{ - - /** @dev Contribute to the reward of a random number. - * @param _block Block the random number is linked to. - */ - function contribute(uint _block) payable; - - /** @dev Request a random number. - * @param _block Block linked to the request. - */ - function requestRN(uint _block) payable { - contribute(_block); - } - - /** @dev Get the random number. - * @param _block Block the random number is linked to. - * @return RN Random Number. If the number is not ready or has not been required 0 instead. - */ - function getRN(uint _block) public constant returns (uint RN); - - /** @dev Get a uncorrelated random number. Act like getRN but give a different number for each sender. - * This is to avoid all users having the same number for a block which could pose issues. - * @param _block Block the random number is linked to. - * @return RN Random Number. If the number is not ready or has not been required 0 instead. - */ - function getUncorrelatedRN(uint _block) public constant returns (uint RN) { - uint baseRN=getRN(_block); - if (baseRN==0) - return 0; - else - return uint(keccak256(msg.sender,baseRN)); - } - - } - - - - - - diff --git a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/TrustedRNG.sol b/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/TrustedRNG.sol deleted file mode 100644 index 9ded43c6..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/contracts/standard/rng/TrustedRNG.sol +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @title Random Number Generator based on a trusted party. - * @author Clément Lesaege - - * - * This contract implement the RNG standard and rely on a trusted party to give a random number. - * - */ -pragma solidity ^0.4.15; - -import "./RNG.sol"; - -/** Simple Random Number Generator based on a trusted third party. - * The trusted third party determine the random number and get all the contributions. - */ -contract TrustedRNG is RNG { - - address public owner=msg.sender; // The operator of this RNG. - mapping (uint => uint) public randomNumber; // RN[block] is the random number for this block 0 otherwise. - mapping (uint => uint) public reward; // reward[block] is the amount to be paid to the party w. - - modifier onlyOwner() {require(msg.sender==owner); _;} - - /** @dev Contribute to the reward of a random number. - * @param _block Block the random number is linked to. - */ - function contribute(uint _block) public payable { - if (randomNumber[_block]!=0) - owner.send(msg.value); // The random number has already been given, pay the operator. If send fails it's not an issue. - else - reward[_block]+=msg.value; - } - - /** @dev Give a random number. To be called by the operator. - * @param _block Block the random number is linked to. - * @param _RN The random number given by the trusted party. - */ - function giveRN(uint _block, uint _RN) public onlyOwner { - require(randomNumber[_block]==0); // Prevent the operator from changing a RN. - - owner.send(reward[_block]); // If send fails it's not an issue. - randomNumber[_block]=_RN; - reward[_block]=0; - } - - /** @dev Get the random number. - * @param _block Block the random number is linked to. - * @return RN Random Number. If the number is not ready or has not been requested 0 instead. - */ - function getRN(uint _block) public constant returns (uint RN) { - return randomNumber[_block]; - } - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/helpers/utils.js b/truebit-implementation/node_modules/kleros-interaction/helpers/utils.js deleted file mode 100644 index 3a8f0077..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/helpers/utils.js +++ /dev/null @@ -1,57 +0,0 @@ -module.exports = { - increaseTime: addSeconds => { - web3.currentProvider.send({jsonrpc: "2.0", method: "evm_increaseTime", params: [addSeconds], id: 0}) - }, - - mineBlock: () => { - web3.currentProvider.send({jsonrpc: "2.0", method: "evm_mine"}) - }, - - - expectThrow: async promise => { - - try { - - await promise - - } catch (error) { - - const invalidJump = error.message.search('invalid JUMP') >= 0 - - const invalidOpcode = error.message.search('invalid opcode') >= 0 - - const outOfGas = error.message.search('out of gas') >= 0 - - // TODO: Test if the error is a revert. - - return - - } - - assert.fail('Expected throw not received') - - }, - - waitForMined: tx => { - - return new Promise((resolve, reject) => { - - let setIntervalId = setInterval(() => web3.eth.getTransactionReceipt(tx, (err, receipt) => { - - if (err) reject(err.message) - - if (receipt) { - - clearInterval(setIntervalId) - - resolve(receipt) - - } - - }), 1000) - - }) - - } - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/migrations/1_initial_migration.js b/truebit-implementation/node_modules/kleros-interaction/migrations/1_initial_migration.js deleted file mode 100644 index 4d5f3f9b..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/migrations/1_initial_migration.js +++ /dev/null @@ -1,5 +0,0 @@ -var Migrations = artifacts.require("./Migrations.sol"); - -module.exports = function(deployer) { - deployer.deploy(Migrations); -}; diff --git a/truebit-implementation/node_modules/kleros-interaction/migrations/2_deploy_contracts.js b/truebit-implementation/node_modules/kleros-interaction/migrations/2_deploy_contracts.js deleted file mode 100644 index 89608fdd..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/migrations/2_deploy_contracts.js +++ /dev/null @@ -1,9 +0,0 @@ -/*var ConvertLib = artifacts.require("./ConvertLib.sol"); -var MetaCoin = artifacts.require("./MetaCoin.sol");*/ - -module.exports = function(deployer) { - /* - deployer.deploy(ConvertLib); - deployer.link(ConvertLib, MetaCoin); - deployer.deploy(MetaCoin,10000);*/ -}; diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.babelrc b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.babelrc deleted file mode 100644 index 4b74adc4..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.babelrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "presets": ["es2015", "stage-2"], - "plugins": [ - "add-module-exports" - ] -} - diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.eslintrc b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.eslintrc deleted file mode 100644 index ab7ddee9..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.eslintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "airbnb", - "rules": { - "jsx-a11y/href-no-hash": "off", - "jsx-a11y/anchor-is-valid": ["warn", { "aspects": ["invalidHref"] }] - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.travis.yml b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.travis.yml deleted file mode 100644 index 702bb2d8..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: 'node_js' -node_js: - - '8' diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/LICENSE b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/LICENSE deleted file mode 100644 index 9cecc1d4..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/README.md b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/README.md deleted file mode 100644 index 13351749..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/README.md +++ /dev/null @@ -1,71 +0,0 @@ -![MiniMe Token](readme-header.png) - -[![Build Status](https://travis-ci.org/Giveth/minime.svg?branch=master)](https://travis-ci.org/Giveth/minime) - -The MiniMeToken contract is a standard ERC20 token with extra functionality: - -### The token is easy to clone! - -Anybody can create a new clone token from any token using this contract with an initial distribution identical to the original token at a specified block. The address calling the `createCloneToken` function will become the token controller and the token's default settings can be specified in the function call. - - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _isConstant - ) returns(address) { - -Once the clone token is created, it acts as a completely independent token, with it's own unique functionalities. - -### Balance history is registered and available to be queried - -All MiniMe Tokens maintain a history of the balance changes that occur during each block. Two calls are introduced to read the totalSupply and the balance of any address at any block in the past. - - function totalSupplyAt(uint _blockNumber) constant returns(uint) - - function balanceOfAt(address _holder, uint _blockNumber) constant returns (uint) - -### Optional token controller - -The controller of the contract can generate/destroy/transfer tokens at its own discretion. The controller can be a regular account, but the intention is for the controller to be another contract that imposes transparent rules on the token's issuance and functionality. The Token Controller is not required for the MiniMe token to function, if there is no reason to generate/destroy/transfer tokens, the token controller can be set to 0x0 and this functionality will be disabled. - -For example, a Token Creation contract can be set as the controller of the MiniMe Token and at the end of the token creation period, the controller can be transferred to the 0x0 address, to guarantee that no new tokens will be created. - -To create and destroy tokens, these two functions are introduced: - - function generateTokens(address _holder, uint _value) onlyController - - function destroyTokens(address _holder, uint _value) onlyController - -### The Token's Controller can freeze transfers. - -If transfersEnabled == false, tokens cannot be transferred by the users, however they can still be created, destroyed, and transferred by the controller. The controller can also toggle this flag. - - // Allows tokens to be transferred if true or frozen if false - function enableTransfers(bool _transfersEnabled) onlyController - - -## Applications - -If this token contract is used as the base token, then clones of itself can be easily generated at any given block number, this allows for incredibly powerful functionality, effectively the ability for anyone to give extra features to the token holders without having to migrate to a new contract. Some of the applications that the MiniMe token contract can be used for are: - -1. Generating a voting token that is burned when you vote. -2. Generating a discount "coupon" that is redeemed when you use it. -3. Generating a token for a "spinoff" DAO. -4. Generating a token that can be used to give explicit support to an action or a campaign, like polling. -5. Generating a token to enable the token holders to collect daily, monthly or yearly payments. -6. Generating a token to limit participation in a token sale or similar event to holders of a specific token. -7. Generating token that allows a central party complete control to transfer/generate/destroy tokens at will. -8. Lots of other applications including all the applications the standard ERC 20 token can be used for. - -All these applications and more are enabled by the MiniMe Token Contract. The most amazing part being that anyone that wants to add these features can, in a permissionless yet safe manner without affecting the parent token's intended functionality. - -# How to deploy a campaign - -1. Deploy the MinimeTokenFactory -2. Deploy the MinimeToken -3. Deploy the campaign -4. Assign the controller of the MinimeToken to the campaign. - - diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/Controlled.sol.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/Controlled.sol.js deleted file mode 100644 index 92c48967..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/Controlled.sol.js +++ /dev/null @@ -1,7 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.ControlledAbi = [{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.ControlledByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820348e33213b8644e828ed3b4249fa8ae33458cd699d8de08bf42e589b2b9fe1eb0029" -exports.ControlledRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820348e33213b8644e828ed3b4249fa8ae33458cd699d8de08bf42e589b2b9fe1eb0029" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0xcd25f1d20c06711ec5147fce5dc8518b5374f61f2313d4035c3650bd229e9de0" diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/Controlled_all.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/Controlled_all.sol deleted file mode 100644 index 7acea1c9..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/Controlled_all.sol +++ /dev/null @@ -1,19 +0,0 @@ - -//File: ./contracts/Controlled.sol -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/MiniMeToken.sol.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/MiniMeToken.sol.js deleted file mode 100644 index 6a4b39c6..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/MiniMeToken.sol.js +++ /dev/null @@ -1,19 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.ApproveAndCallFallBackAbi = [{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.ApproveAndCallFallBackByteCode = "0x" -exports.ApproveAndCallFallBackRuntimeByteCode = "0x" -exports.ControlledAbi = [{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.ControlledByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a7230582043333a8b095389ff264eecd48cfd453fe9e041cb62ef9c8e69d7b5dc7cbd95a50029" -exports.ControlledRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a7230582043333a8b095389ff264eecd48cfd453fe9e041cb62ef9c8e69d7b5dc7cbd95a50029" -exports.MiniMeTokenAbi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"},{"name":"_parentToken","type":"address"},{"name":"_parentSnapShotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}] -exports.MiniMeTokenByteCode = "0x606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029" -exports.MiniMeTokenRuntimeByteCode = "0x60606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029" -exports.MiniMeTokenFactoryAbi = [{"constant":false,"inputs":[{"name":"_parentToken","type":"address"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.MiniMeTokenFactoryByteCode = "0x6060604052341561000f57600080fd5b611da88061001e6000396000f3006060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029a165627a7a72305820e208044c8532f683dc98523b677e1590afde4d7eb0bd9792444b90be4faab8760029" -exports.MiniMeTokenFactoryRuntimeByteCode = "0x6060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029a165627a7a72305820e208044c8532f683dc98523b677e1590afde4d7eb0bd9792444b90be4faab8760029" -exports.TokenControllerAbi = [{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] -exports.TokenControllerByteCode = "0x" -exports.TokenControllerRuntimeByteCode = "0x" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0x845cc0cb1e13345077b3a216115caff06c9e9f89735b00309f3f1bc78fe62325" diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/MiniMeToken_all.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/MiniMeToken_all.sol deleted file mode 100644 index 4a88e1d4..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/MiniMeToken_all.sol +++ /dev/null @@ -1,612 +0,0 @@ - -//File: contracts/Controlled.sol -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} - -//File: contracts/TokenController.sol -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} - -//File: ./contracts/MiniMeToken.sol -pragma solidity ^0.4.18; - -/* - Copyright 2016, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MiniMeToken Contract -/// @author Jordi Baylina -/// @dev This token contract's goal is to make it easy for anyone to clone this -/// token using the token distribution at a given block, this will allow DAO's -/// and DApps to upgrade their features in a decentralized manner without -/// affecting the original token -/// @dev It is ERC20 compliant, but still needs to under go further testing. - - - - -contract ApproveAndCallFallBack { - function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; -} - -/// @dev The actual token contract, the default controller is the msg.sender -/// that deploys the contract, so usually this token will be deployed by a -/// token controller contract, which Giveth will call a "Campaign" -contract MiniMeToken is Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - string public version = 'MMT_0.2'; //An arbitrary versioning scheme - - - /// @dev `Checkpoint` is the structure that attaches a block number to a - /// given value, the block number attached is the one that last changed the - /// value - struct Checkpoint { - - // `fromBlock` is the block number that the value was generated from - uint128 fromBlock; - - // `value` is the amount of tokens at a specific block number - uint128 value; - } - - // `parentToken` is the Token address that was cloned to produce this token; - // it will be 0x0 for a token that was not cloned - MiniMeToken public parentToken; - - // `parentSnapShotBlock` is the block number from the Parent Token that was - // used to determine the initial distribution of the Clone Token - uint public parentSnapShotBlock; - - // `creationBlock` is the block number that the Clone Token was created - uint public creationBlock; - - // `balances` is the map that tracks the balance of each address, in this - // contract when the balance changes the block number that the change - // occurred is also included in the map - mapping (address => Checkpoint[]) balances; - - // `allowed` tracks any extra transfer rights as in all ERC20 tokens - mapping (address => mapping (address => uint256)) allowed; - - // Tracks the history of the `totalSupply` of the token - Checkpoint[] totalSupplyHistory; - - // Flag that determines if the token is transferable or not. - bool public transfersEnabled; - - // The factory used to create new clone tokens - MiniMeTokenFactory public tokenFactory; - -//////////////// -// Constructor -//////////////// - - /// @notice Constructor to create a MiniMeToken - /// @param _tokenFactory The address of the MiniMeTokenFactory contract that - /// will create the Clone token contracts, the token factory needs to be - /// deployed first - /// @param _parentToken Address of the parent token, set to 0x0 if it is a - /// new token - /// @param _parentSnapShotBlock Block of the parent token that will - /// determine the initial distribution of the clone token, set to 0 if it - /// is a new token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - function MiniMeToken( - address _tokenFactory, - address _parentToken, - uint _parentSnapShotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public { - tokenFactory = MiniMeTokenFactory(_tokenFactory); - name = _tokenName; // Set the name - decimals = _decimalUnits; // Set the decimals - symbol = _tokenSymbol; // Set the symbol - parentToken = MiniMeToken(_parentToken); - parentSnapShotBlock = _parentSnapShotBlock; - transfersEnabled = _transfersEnabled; - creationBlock = block.number; - } - - -/////////////////// -// ERC20 Methods -/////////////////// - - /// @notice Send `_amount` tokens to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - return doTransfer(msg.sender, _to, _amount); - } - - /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it - /// is approved by `_from` - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function transferFrom(address _from, address _to, uint256 _amount - ) public returns (bool success) { - - // The controller of this contract can move tokens around at will, - // this is important to recognize! Confirm that you trust the - // controller of this contract, which in most situations should be - // another open source smart contract or 0x0 - if (msg.sender != controller) { - require(transfersEnabled); - - // The standard ERC 20 transferFrom functionality - if (allowed[_from][msg.sender] < _amount) return false; - allowed[_from][msg.sender] -= _amount; - } - return doTransfer(_from, _to, _amount); - } - - /// @dev This is the actual transfer function in the token contract, it can - /// only be called by other functions in this contract. - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function doTransfer(address _from, address _to, uint _amount - ) internal returns(bool) { - - if (_amount == 0) { - return true; - } - - require(parentSnapShotBlock < block.number); - - // Do not allow transfer to 0x0 or the token contract itself - require((_to != 0) && (_to != address(this))); - - // If the amount being transfered is more than the balance of the - // account the transfer returns false - var previousBalanceFrom = balanceOfAt(_from, block.number); - if (previousBalanceFrom < _amount) { - return false; - } - - // Alerts the token controller of the transfer - if (isContract(controller)) { - require(TokenController(controller).onTransfer(_from, _to, _amount)); - } - - // First update the balance array with the new value for the address - // sending the tokens - updateValueAtNow(balances[_from], previousBalanceFrom - _amount); - - // Then update the balance array with the new value for the address - // receiving the tokens - var previousBalanceTo = balanceOfAt(_to, block.number); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(balances[_to], previousBalanceTo + _amount); - - // An event to make the transfer easy to find on the blockchain - Transfer(_from, _to, _amount); - - return true; - } - - /// @param _owner The address that's balance is being requested - /// @return The balance of `_owner` at the current block - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOfAt(_owner, block.number); - } - - /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on - /// its behalf. This is a modified version of the ERC20 approve function - /// to be a little bit safer - /// @param _spender The address of the account able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the approval was successful - function approve(address _spender, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender,0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); - } - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /// @dev This function makes it easy to read the `allowed[]` map - /// @param _owner The address of the account that owns the token - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens of _owner that _spender is allowed - /// to spend - function allowance(address _owner, address _spender - ) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall(address _spender, uint256 _amount, bytes _extraData - ) public returns (bool success) { - require(approve(_spender, _amount)); - - ApproveAndCallFallBack(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /// @dev This function makes it easy to get the total number of tokens - /// @return The total number of tokens - function totalSupply() public constant returns (uint) { - return totalSupplyAt(block.number); - } - - -//////////////// -// Query balance and totalSupply in History -//////////////// - - /// @dev Queries the balance of `_owner` at a specific `_blockNumber` - /// @param _owner The address from which the balance will be retrieved - /// @param _blockNumber The block number when the balance is queried - /// @return The balance at `_blockNumber` - function balanceOfAt(address _owner, uint _blockNumber) public constant - returns (uint) { - - // These next few lines are used when the balance of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.balanceOfAt` be queried at the - // genesis block for that token as this contains initial balance of - // this token - if ((balances[_owner].length == 0) - || (balances[_owner][0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); - } else { - // Has no parent - return 0; - } - - // This will return the expected balance during normal situations - } else { - return getValueAt(balances[_owner], _blockNumber); - } - } - - /// @notice Total amount of tokens at a specific `_blockNumber`. - /// @param _blockNumber The block number when the totalSupply is queried - /// @return The total amount of tokens at `_blockNumber` - function totalSupplyAt(uint _blockNumber) public constant returns(uint) { - - // These next few lines are used when the totalSupply of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.totalSupplyAt` be queried at the - // genesis block for this token as that contains totalSupply of this - // token at this block number. - if ((totalSupplyHistory.length == 0) - || (totalSupplyHistory[0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); - } else { - return 0; - } - - // This will return the expected totalSupply during normal situations - } else { - return getValueAt(totalSupplyHistory, _blockNumber); - } - } - -//////////////// -// Clone Token Method -//////////////// - - /// @notice Creates a new clone token with the initial distribution being - /// this token at `_snapshotBlock` - /// @param _cloneTokenName Name of the clone token - /// @param _cloneDecimalUnits Number of decimals of the smallest unit - /// @param _cloneTokenSymbol Symbol of the clone token - /// @param _snapshotBlock Block when the distribution of the parent token is - /// copied to set the initial distribution of the new clone token; - /// if the block is zero than the actual block, the current block is used - /// @param _transfersEnabled True if transfers are allowed in the clone - /// @return The address of the new MiniMeToken Contract - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _transfersEnabled - ) public returns(address) { - if (_snapshotBlock == 0) _snapshotBlock = block.number; - MiniMeToken cloneToken = tokenFactory.createCloneToken( - this, - _snapshotBlock, - _cloneTokenName, - _cloneDecimalUnits, - _cloneTokenSymbol, - _transfersEnabled - ); - - cloneToken.changeController(msg.sender); - - // An event to make the token easy to find on the blockchain - NewCloneToken(address(cloneToken), _snapshotBlock); - return address(cloneToken); - } - -//////////////// -// Generate and destroy tokens -//////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount - ) public onlyController returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow - uint previousBalanceTo = balanceOf(_owner); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); - updateValueAtNow(balances[_owner], previousBalanceTo + _amount); - Transfer(0, _owner, _amount); - return true; - } - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount - ) onlyController public returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply >= _amount); - uint previousBalanceFrom = balanceOf(_owner); - require(previousBalanceFrom >= _amount); - updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); - updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); - Transfer(_owner, 0, _amount); - return true; - } - -//////////////// -// Enable tokens transfers -//////////////// - - - /// @notice Enables token holders to transfer their tokens freely if true - /// @param _transfersEnabled True if transfers are allowed in the clone - function enableTransfers(bool _transfersEnabled) public onlyController { - transfersEnabled = _transfersEnabled; - } - -//////////////// -// Internal helper functions to query and set a value in a snapshot array -//////////////// - - /// @dev `getValueAt` retrieves the number of tokens at a given block number - /// @param checkpoints The history of values being queried - /// @param _block The block number to retrieve the value at - /// @return The number of tokens being queried - function getValueAt(Checkpoint[] storage checkpoints, uint _block - ) constant internal returns (uint) { - if (checkpoints.length == 0) return 0; - - // Shortcut for the actual value - if (_block >= checkpoints[checkpoints.length-1].fromBlock) - return checkpoints[checkpoints.length-1].value; - if (_block < checkpoints[0].fromBlock) return 0; - - // Binary search of the value in the array - uint min = 0; - uint max = checkpoints.length-1; - while (max > min) { - uint mid = (max + min + 1)/ 2; - if (checkpoints[mid].fromBlock<=_block) { - min = mid; - } else { - max = mid-1; - } - } - return checkpoints[min].value; - } - - /// @dev `updateValueAtNow` used to update the `balances` map and the - /// `totalSupplyHistory` - /// @param checkpoints The history of data being updated - /// @param _value The new number of tokens - function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value - ) internal { - if ((checkpoints.length == 0) - || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { - Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; - newCheckPoint.fromBlock = uint128(block.number); - newCheckPoint.value = uint128(_value); - } else { - Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; - oldCheckPoint.value = uint128(_value); - } - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) return false; - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /// @dev Helper function to return a min betwen the two uints - function min(uint a, uint b) pure internal returns (uint) { - return a < b ? a : b; - } - - /// @notice The fallback function: If the contract's controller has not been - /// set to 0, then the `proxyPayment` method is called which relays the - /// ether and creates tokens as described in the token controller contract - function () public payable { - require(isContract(controller)); - require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); - } - -////////// -// Safety Methods -////////// - - /// @notice This method can be used by the controller to extract mistakenly - /// sent tokens to this contract. - /// @param _token The address of the token contract that you want to recover - /// set to 0 in case you want to extract ether. - function claimTokens(address _token) public onlyController { - if (_token == 0x0) { - controller.transfer(this.balance); - return; - } - - MiniMeToken token = MiniMeToken(_token); - uint balance = token.balanceOf(this); - token.transfer(controller, balance); - ClaimedTokens(_token, controller, balance); - } - -//////////////// -// Events -//////////////// - event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); - event Transfer(address indexed _from, address indexed _to, uint256 _amount); - event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); - event Approval( - address indexed _owner, - address indexed _spender, - uint256 _amount - ); - -} - - -//////////////// -// MiniMeTokenFactory -//////////////// - -/// @dev This contract is used to generate clone contracts from a contract. -/// In solidity this is the way to create a contract from a contract of the -/// same class -contract MiniMeTokenFactory { - - /// @notice Update the DApp by creating a new token with new functionalities - /// the msg.sender becomes the controller of this clone token - /// @param _parentToken Address of the token being cloned - /// @param _snapshotBlock Block of the parent token that will - /// determine the initial distribution of the clone token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - /// @return The address of the new token contract - function createCloneToken( - address _parentToken, - uint _snapshotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public returns (MiniMeToken) { - MiniMeToken newToken = new MiniMeToken( - this, - _parentToken, - _snapshotBlock, - _tokenName, - _decimalUnits, - _tokenSymbol, - _transfersEnabled - ); - - newToken.changeController(msg.sender); - return newToken; - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/SampleCampaign-TokenController.sol.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/SampleCampaign-TokenController.sol.js deleted file mode 100644 index 56b23866..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/SampleCampaign-TokenController.sol.js +++ /dev/null @@ -1,25 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.ApproveAndCallFallBackAbi = [{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.ApproveAndCallFallBackByteCode = "0x" -exports.ApproveAndCallFallBackRuntimeByteCode = "0x" -exports.CampaignAbi = [{"constant":true,"inputs":[],"name":"vaultAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newVaultAddress","type":"address"}],"name":"setVault","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFunding","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeFunding","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startFundingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endFundingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[{"name":"_startFundingTime","type":"uint256"},{"name":"_endFundingTime","type":"uint256"},{"name":"_maximumFunding","type":"uint256"},{"name":"_vaultAddress","type":"address"},{"name":"_tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}] -exports.CampaignByteCode = "0x6060604052341561000f57600080fd5b60405160a080610604833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a031617905591505042841080159061006b57508484115b8015610081575069021e19e0c9bab24000008311155b80156100955750600160a060020a03821615155b15156100a057600080fd5b60019490945560029290925560035560058054600160a060020a03938416600160a060020a0319918216179091556006805492909316911617905561051a806100ea6000396000f3006060604052600436106100ab5763ffffffff60e060020a600035041663430bf08a81146100b65780634a393149146100e557806355a373d6146101215780636817031b146101345780638da5cb5b1461015357806399d64ab014610166578063a19ed39d1461018b578063a6f9dae11461019e578063b75ece9c146101bd578063da682aeb146100e5578063e29eb836146101d0578063e4693e98146101e3578063f48c3054146101f6575b6100b43361020a565b005b34156100c157600080fd5b6100c9610383565b604051600160a060020a03909116815260200160405180910390f35b34156100f057600080fd5b61010d600160a060020a0360043581169060243516604435610392565b604051901515815260200160405180910390f35b341561012c57600080fd5b6100c961039b565b341561013f57600080fd5b6100b4600160a060020a03600435166103aa565b341561015e57600080fd5b6100c96103f4565b341561017157600080fd5b610179610403565b60405190815260200160405180910390f35b341561019657600080fd5b6100b4610409565b34156101a957600080fd5b6100b4600160a060020a036004351661047f565b34156101c857600080fd5b6101796104c9565b34156101db57600080fd5b6101796104cf565b34156101ee57600080fd5b6101796104d5565b61010d600160a060020a03600435166104db565b600154421015801561021e57506002544211155b80156102945750600554600160a060020a031663f77c47916000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561026d57600080fd5b6102c65a03f1151561027e57600080fd5b5050506040518051600160a060020a0316151590505b801561029f57503415155b80156102b15750600354346004540111155b15156102bc57600080fd5b6004805434908101909155600654600160a060020a03169080156108fc0290604051600060405180830381858888f1935050505015156102fb57600080fd5b600554600160a060020a031663827f32c0823460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561035a57600080fd5b6102c65a03f1151561036b57600080fd5b50505060405180519050151561038057600080fd5b50565b600654600160a060020a031681565b60019392505050565b600554600160a060020a031681565b60005433600160a060020a039081169116146103c557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60035481565b60025442101561041857600080fd5b600554600160a060020a0316633cebb823600060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561046957600080fd5b6102c65a03f1151561047a57600080fd5b505050565b60005433600160a060020a0390811691161461049a57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b60045481565b60025481565b60006104e68261020a565b5060019190505600a165627a7a7230582005143595cda0c4420c0c032867b6a11d1176a5e246389476e4a2f7e9a6650bd60029" -exports.CampaignRuntimeByteCode = "0x6060604052600436106100ab5763ffffffff60e060020a600035041663430bf08a81146100b65780634a393149146100e557806355a373d6146101215780636817031b146101345780638da5cb5b1461015357806399d64ab014610166578063a19ed39d1461018b578063a6f9dae11461019e578063b75ece9c146101bd578063da682aeb146100e5578063e29eb836146101d0578063e4693e98146101e3578063f48c3054146101f6575b6100b43361020a565b005b34156100c157600080fd5b6100c9610383565b604051600160a060020a03909116815260200160405180910390f35b34156100f057600080fd5b61010d600160a060020a0360043581169060243516604435610392565b604051901515815260200160405180910390f35b341561012c57600080fd5b6100c961039b565b341561013f57600080fd5b6100b4600160a060020a03600435166103aa565b341561015e57600080fd5b6100c96103f4565b341561017157600080fd5b610179610403565b60405190815260200160405180910390f35b341561019657600080fd5b6100b4610409565b34156101a957600080fd5b6100b4600160a060020a036004351661047f565b34156101c857600080fd5b6101796104c9565b34156101db57600080fd5b6101796104cf565b34156101ee57600080fd5b6101796104d5565b61010d600160a060020a03600435166104db565b600154421015801561021e57506002544211155b80156102945750600554600160a060020a031663f77c47916000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561026d57600080fd5b6102c65a03f1151561027e57600080fd5b5050506040518051600160a060020a0316151590505b801561029f57503415155b80156102b15750600354346004540111155b15156102bc57600080fd5b6004805434908101909155600654600160a060020a03169080156108fc0290604051600060405180830381858888f1935050505015156102fb57600080fd5b600554600160a060020a031663827f32c0823460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561035a57600080fd5b6102c65a03f1151561036b57600080fd5b50505060405180519050151561038057600080fd5b50565b600654600160a060020a031681565b60019392505050565b600554600160a060020a031681565b60005433600160a060020a039081169116146103c557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60035481565b60025442101561041857600080fd5b600554600160a060020a0316633cebb823600060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561046957600080fd5b6102c65a03f1151561047a57600080fd5b505050565b60005433600160a060020a0390811691161461049a57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b60045481565b60025481565b60006104e68261020a565b5060019190505600a165627a7a7230582005143595cda0c4420c0c032867b6a11d1176a5e246389476e4a2f7e9a6650bd60029" -exports.ControlledAbi = [{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.ControlledByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820cc4ee2a55d30e0105a85987de8c496ccb806d52b38107268e78eba80b45bf4e00029" -exports.ControlledRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820cc4ee2a55d30e0105a85987de8c496ccb806d52b38107268e78eba80b45bf4e00029" -exports.MiniMeTokenAbi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"},{"name":"_parentToken","type":"address"},{"name":"_parentSnapShotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}] -exports.MiniMeTokenByteCode = "0x606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029" -exports.MiniMeTokenRuntimeByteCode = "0x60606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029" -exports.MiniMeTokenFactoryAbi = [{"constant":false,"inputs":[{"name":"_parentToken","type":"address"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.MiniMeTokenFactoryByteCode = "0x6060604052341561000f57600080fd5b611da88061001e6000396000f3006060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029a165627a7a72305820e06e9a92eef21428993752aa64ad1020fd7ee192b7a91fd1fa7639885288890b0029" -exports.MiniMeTokenFactoryRuntimeByteCode = "0x6060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029a165627a7a72305820e06e9a92eef21428993752aa64ad1020fd7ee192b7a91fd1fa7639885288890b0029" -exports.OwnedAbi = [{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b8114610050578063a6f9dae11461008c575b600080fd5b341561005b57600080fd5b6100636100ba565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b341561009757600080fd5b6100b873ffffffffffffffffffffffffffffffffffffffff600435166100d6565b005b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100fe57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff929092169190911790555600a165627a7a7230582027c4670600aa92a38eaa01c4f2a487f0cace825bb66bf9085d3c3af6d30d91790029" -exports.OwnedRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b8114610050578063a6f9dae11461008c575b600080fd5b341561005b57600080fd5b6100636100ba565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b341561009757600080fd5b6100b873ffffffffffffffffffffffffffffffffffffffff600435166100d6565b005b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100fe57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff929092169190911790555600a165627a7a7230582027c4670600aa92a38eaa01c4f2a487f0cace825bb66bf9085d3c3af6d30d91790029" -exports.TokenControllerAbi = [{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] -exports.TokenControllerByteCode = "0x" -exports.TokenControllerRuntimeByteCode = "0x" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0xb9d14d9badd79bd21f285ca8e7054f8fb838a138260781e494c7cae00b1481f3" diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/SampleCampaign-TokenController_all.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/SampleCampaign-TokenController_all.sol deleted file mode 100644 index 24a169c5..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/SampleCampaign-TokenController_all.sol +++ /dev/null @@ -1,799 +0,0 @@ - -//File: contracts/Controlled.sol -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} - -//File: contracts/TokenController.sol -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} - -//File: contracts/MiniMeToken.sol -pragma solidity ^0.4.18; - -/* - Copyright 2016, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MiniMeToken Contract -/// @author Jordi Baylina -/// @dev This token contract's goal is to make it easy for anyone to clone this -/// token using the token distribution at a given block, this will allow DAO's -/// and DApps to upgrade their features in a decentralized manner without -/// affecting the original token -/// @dev It is ERC20 compliant, but still needs to under go further testing. - - - - -contract ApproveAndCallFallBack { - function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; -} - -/// @dev The actual token contract, the default controller is the msg.sender -/// that deploys the contract, so usually this token will be deployed by a -/// token controller contract, which Giveth will call a "Campaign" -contract MiniMeToken is Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - string public version = 'MMT_0.2'; //An arbitrary versioning scheme - - - /// @dev `Checkpoint` is the structure that attaches a block number to a - /// given value, the block number attached is the one that last changed the - /// value - struct Checkpoint { - - // `fromBlock` is the block number that the value was generated from - uint128 fromBlock; - - // `value` is the amount of tokens at a specific block number - uint128 value; - } - - // `parentToken` is the Token address that was cloned to produce this token; - // it will be 0x0 for a token that was not cloned - MiniMeToken public parentToken; - - // `parentSnapShotBlock` is the block number from the Parent Token that was - // used to determine the initial distribution of the Clone Token - uint public parentSnapShotBlock; - - // `creationBlock` is the block number that the Clone Token was created - uint public creationBlock; - - // `balances` is the map that tracks the balance of each address, in this - // contract when the balance changes the block number that the change - // occurred is also included in the map - mapping (address => Checkpoint[]) balances; - - // `allowed` tracks any extra transfer rights as in all ERC20 tokens - mapping (address => mapping (address => uint256)) allowed; - - // Tracks the history of the `totalSupply` of the token - Checkpoint[] totalSupplyHistory; - - // Flag that determines if the token is transferable or not. - bool public transfersEnabled; - - // The factory used to create new clone tokens - MiniMeTokenFactory public tokenFactory; - -//////////////// -// Constructor -//////////////// - - /// @notice Constructor to create a MiniMeToken - /// @param _tokenFactory The address of the MiniMeTokenFactory contract that - /// will create the Clone token contracts, the token factory needs to be - /// deployed first - /// @param _parentToken Address of the parent token, set to 0x0 if it is a - /// new token - /// @param _parentSnapShotBlock Block of the parent token that will - /// determine the initial distribution of the clone token, set to 0 if it - /// is a new token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - function MiniMeToken( - address _tokenFactory, - address _parentToken, - uint _parentSnapShotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public { - tokenFactory = MiniMeTokenFactory(_tokenFactory); - name = _tokenName; // Set the name - decimals = _decimalUnits; // Set the decimals - symbol = _tokenSymbol; // Set the symbol - parentToken = MiniMeToken(_parentToken); - parentSnapShotBlock = _parentSnapShotBlock; - transfersEnabled = _transfersEnabled; - creationBlock = block.number; - } - - -/////////////////// -// ERC20 Methods -/////////////////// - - /// @notice Send `_amount` tokens to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - return doTransfer(msg.sender, _to, _amount); - } - - /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it - /// is approved by `_from` - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function transferFrom(address _from, address _to, uint256 _amount - ) public returns (bool success) { - - // The controller of this contract can move tokens around at will, - // this is important to recognize! Confirm that you trust the - // controller of this contract, which in most situations should be - // another open source smart contract or 0x0 - if (msg.sender != controller) { - require(transfersEnabled); - - // The standard ERC 20 transferFrom functionality - if (allowed[_from][msg.sender] < _amount) return false; - allowed[_from][msg.sender] -= _amount; - } - return doTransfer(_from, _to, _amount); - } - - /// @dev This is the actual transfer function in the token contract, it can - /// only be called by other functions in this contract. - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function doTransfer(address _from, address _to, uint _amount - ) internal returns(bool) { - - if (_amount == 0) { - return true; - } - - require(parentSnapShotBlock < block.number); - - // Do not allow transfer to 0x0 or the token contract itself - require((_to != 0) && (_to != address(this))); - - // If the amount being transfered is more than the balance of the - // account the transfer returns false - var previousBalanceFrom = balanceOfAt(_from, block.number); - if (previousBalanceFrom < _amount) { - return false; - } - - // Alerts the token controller of the transfer - if (isContract(controller)) { - require(TokenController(controller).onTransfer(_from, _to, _amount)); - } - - // First update the balance array with the new value for the address - // sending the tokens - updateValueAtNow(balances[_from], previousBalanceFrom - _amount); - - // Then update the balance array with the new value for the address - // receiving the tokens - var previousBalanceTo = balanceOfAt(_to, block.number); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(balances[_to], previousBalanceTo + _amount); - - // An event to make the transfer easy to find on the blockchain - Transfer(_from, _to, _amount); - - return true; - } - - /// @param _owner The address that's balance is being requested - /// @return The balance of `_owner` at the current block - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOfAt(_owner, block.number); - } - - /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on - /// its behalf. This is a modified version of the ERC20 approve function - /// to be a little bit safer - /// @param _spender The address of the account able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the approval was successful - function approve(address _spender, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender,0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); - } - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /// @dev This function makes it easy to read the `allowed[]` map - /// @param _owner The address of the account that owns the token - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens of _owner that _spender is allowed - /// to spend - function allowance(address _owner, address _spender - ) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall(address _spender, uint256 _amount, bytes _extraData - ) public returns (bool success) { - require(approve(_spender, _amount)); - - ApproveAndCallFallBack(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /// @dev This function makes it easy to get the total number of tokens - /// @return The total number of tokens - function totalSupply() public constant returns (uint) { - return totalSupplyAt(block.number); - } - - -//////////////// -// Query balance and totalSupply in History -//////////////// - - /// @dev Queries the balance of `_owner` at a specific `_blockNumber` - /// @param _owner The address from which the balance will be retrieved - /// @param _blockNumber The block number when the balance is queried - /// @return The balance at `_blockNumber` - function balanceOfAt(address _owner, uint _blockNumber) public constant - returns (uint) { - - // These next few lines are used when the balance of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.balanceOfAt` be queried at the - // genesis block for that token as this contains initial balance of - // this token - if ((balances[_owner].length == 0) - || (balances[_owner][0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); - } else { - // Has no parent - return 0; - } - - // This will return the expected balance during normal situations - } else { - return getValueAt(balances[_owner], _blockNumber); - } - } - - /// @notice Total amount of tokens at a specific `_blockNumber`. - /// @param _blockNumber The block number when the totalSupply is queried - /// @return The total amount of tokens at `_blockNumber` - function totalSupplyAt(uint _blockNumber) public constant returns(uint) { - - // These next few lines are used when the totalSupply of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.totalSupplyAt` be queried at the - // genesis block for this token as that contains totalSupply of this - // token at this block number. - if ((totalSupplyHistory.length == 0) - || (totalSupplyHistory[0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); - } else { - return 0; - } - - // This will return the expected totalSupply during normal situations - } else { - return getValueAt(totalSupplyHistory, _blockNumber); - } - } - -//////////////// -// Clone Token Method -//////////////// - - /// @notice Creates a new clone token with the initial distribution being - /// this token at `_snapshotBlock` - /// @param _cloneTokenName Name of the clone token - /// @param _cloneDecimalUnits Number of decimals of the smallest unit - /// @param _cloneTokenSymbol Symbol of the clone token - /// @param _snapshotBlock Block when the distribution of the parent token is - /// copied to set the initial distribution of the new clone token; - /// if the block is zero than the actual block, the current block is used - /// @param _transfersEnabled True if transfers are allowed in the clone - /// @return The address of the new MiniMeToken Contract - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _transfersEnabled - ) public returns(address) { - if (_snapshotBlock == 0) _snapshotBlock = block.number; - MiniMeToken cloneToken = tokenFactory.createCloneToken( - this, - _snapshotBlock, - _cloneTokenName, - _cloneDecimalUnits, - _cloneTokenSymbol, - _transfersEnabled - ); - - cloneToken.changeController(msg.sender); - - // An event to make the token easy to find on the blockchain - NewCloneToken(address(cloneToken), _snapshotBlock); - return address(cloneToken); - } - -//////////////// -// Generate and destroy tokens -//////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount - ) public onlyController returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow - uint previousBalanceTo = balanceOf(_owner); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); - updateValueAtNow(balances[_owner], previousBalanceTo + _amount); - Transfer(0, _owner, _amount); - return true; - } - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount - ) onlyController public returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply >= _amount); - uint previousBalanceFrom = balanceOf(_owner); - require(previousBalanceFrom >= _amount); - updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); - updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); - Transfer(_owner, 0, _amount); - return true; - } - -//////////////// -// Enable tokens transfers -//////////////// - - - /// @notice Enables token holders to transfer their tokens freely if true - /// @param _transfersEnabled True if transfers are allowed in the clone - function enableTransfers(bool _transfersEnabled) public onlyController { - transfersEnabled = _transfersEnabled; - } - -//////////////// -// Internal helper functions to query and set a value in a snapshot array -//////////////// - - /// @dev `getValueAt` retrieves the number of tokens at a given block number - /// @param checkpoints The history of values being queried - /// @param _block The block number to retrieve the value at - /// @return The number of tokens being queried - function getValueAt(Checkpoint[] storage checkpoints, uint _block - ) constant internal returns (uint) { - if (checkpoints.length == 0) return 0; - - // Shortcut for the actual value - if (_block >= checkpoints[checkpoints.length-1].fromBlock) - return checkpoints[checkpoints.length-1].value; - if (_block < checkpoints[0].fromBlock) return 0; - - // Binary search of the value in the array - uint min = 0; - uint max = checkpoints.length-1; - while (max > min) { - uint mid = (max + min + 1)/ 2; - if (checkpoints[mid].fromBlock<=_block) { - min = mid; - } else { - max = mid-1; - } - } - return checkpoints[min].value; - } - - /// @dev `updateValueAtNow` used to update the `balances` map and the - /// `totalSupplyHistory` - /// @param checkpoints The history of data being updated - /// @param _value The new number of tokens - function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value - ) internal { - if ((checkpoints.length == 0) - || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { - Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; - newCheckPoint.fromBlock = uint128(block.number); - newCheckPoint.value = uint128(_value); - } else { - Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; - oldCheckPoint.value = uint128(_value); - } - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) return false; - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /// @dev Helper function to return a min betwen the two uints - function min(uint a, uint b) pure internal returns (uint) { - return a < b ? a : b; - } - - /// @notice The fallback function: If the contract's controller has not been - /// set to 0, then the `proxyPayment` method is called which relays the - /// ether and creates tokens as described in the token controller contract - function () public payable { - require(isContract(controller)); - require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); - } - -////////// -// Safety Methods -////////// - - /// @notice This method can be used by the controller to extract mistakenly - /// sent tokens to this contract. - /// @param _token The address of the token contract that you want to recover - /// set to 0 in case you want to extract ether. - function claimTokens(address _token) public onlyController { - if (_token == 0x0) { - controller.transfer(this.balance); - return; - } - - MiniMeToken token = MiniMeToken(_token); - uint balance = token.balanceOf(this); - token.transfer(controller, balance); - ClaimedTokens(_token, controller, balance); - } - -//////////////// -// Events -//////////////// - event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); - event Transfer(address indexed _from, address indexed _to, uint256 _amount); - event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); - event Approval( - address indexed _owner, - address indexed _spender, - uint256 _amount - ); - -} - - -//////////////// -// MiniMeTokenFactory -//////////////// - -/// @dev This contract is used to generate clone contracts from a contract. -/// In solidity this is the way to create a contract from a contract of the -/// same class -contract MiniMeTokenFactory { - - /// @notice Update the DApp by creating a new token with new functionalities - /// the msg.sender becomes the controller of this clone token - /// @param _parentToken Address of the token being cloned - /// @param _snapshotBlock Block of the parent token that will - /// determine the initial distribution of the clone token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - /// @return The address of the new token contract - function createCloneToken( - address _parentToken, - uint _snapshotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public returns (MiniMeToken) { - MiniMeToken newToken = new MiniMeToken( - this, - _parentToken, - _snapshotBlock, - _tokenName, - _decimalUnits, - _tokenSymbol, - _transfersEnabled - ); - - newToken.changeController(msg.sender); - return newToken; - } -} - -//File: ./contracts/SampleCampaign-TokenController.sol -pragma solidity ^0.4.6; - -/* - Copyright 2017, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MilestoneTracker Contract -/// @author Jordi Baylina -/// @dev This contract controls the issuance of tokens for the MiniMe Token -/// Contract. This version specifically acts as a Campaign manager for raising -/// funds for non-profit causes, but it can be customized for any variety of -/// purposes. - - - - -/// @dev `Owned` is a base level contract that assigns an `owner` that can be -/// later changed -contract Owned { - /// @dev `owner` is the only address that can call a function with this - /// modifier - modifier onlyOwner { require (msg.sender == owner); _; } - - address public owner; - - /// @notice The Constructor assigns the message sender to be `owner` - function Owned() { owner = msg.sender;} - - /// @notice `owner` can step down and assign some other address to this role - /// @param _newOwner The address of the new owner. 0x0 can be used to create - /// an unowned neutral vault, however that cannot be undone - function changeOwner(address _newOwner) onlyOwner { - owner = _newOwner; - } -} - - -/// @dev This is designed to control the issuance of a MiniMe Token for a -/// non-profit Campaign. This contract effectively dictates the terms of the -/// funding round. - -contract Campaign is TokenController, Owned { - - uint public startFundingTime; // In UNIX Time Format - uint public endFundingTime; // In UNIX Time Format - uint public maximumFunding; // In wei - uint public totalCollected; // In wei - MiniMeToken public tokenContract; // The new token for this Campaign - address public vaultAddress; // The address to hold the funds donated - -/// @notice 'Campaign()' initiates the Campaign by setting its funding -/// parameters -/// @dev There are several checks to make sure the parameters are acceptable -/// @param _startFundingTime The UNIX time that the Campaign will be able to -/// start receiving funds -/// @param _endFundingTime The UNIX time that the Campaign will stop being able -/// to receive funds -/// @param _maximumFunding In wei, the Maximum amount that the Campaign can -/// receive (currently the max is set at 10,000 ETH for the beta) -/// @param _vaultAddress The address that will store the donated funds -/// @param _tokenAddress Address of the token contract this contract controls - - function Campaign( - uint _startFundingTime, - uint _endFundingTime, - uint _maximumFunding, - address _vaultAddress, - address _tokenAddress - - ) { - require ((_endFundingTime >= now) && // Cannot end in the past - (_endFundingTime > _startFundingTime) && - (_maximumFunding <= 10000 ether) && // The Beta is limited - (_vaultAddress != 0)); // To prevent burning ETH - startFundingTime = _startFundingTime; - endFundingTime = _endFundingTime; - maximumFunding = _maximumFunding; - tokenContract = MiniMeToken(_tokenAddress);// The Deployed Token Contract - vaultAddress = _vaultAddress; - } - -/// @dev The fallback function is called when ether is sent to the contract, it -/// simply calls `doPayment()` with the address that sent the ether as the -/// `_owner`. Payable is a required solidity modifier for functions to receive -/// ether, without this modifier functions will throw if ether is sent to them - - function () payable { - doPayment(msg.sender); - } - -///////////////// -// TokenController interface -///////////////// - -/// @notice `proxyPayment()` allows the caller to send ether to the Campaign and -/// have the tokens created in an address of their choosing -/// @param _owner The address that will hold the newly created tokens - - function proxyPayment(address _owner) payable returns(bool) { - doPayment(_owner); - return true; - } - -/// @notice Notifies the controller about a transfer, for this Campaign all -/// transfers are allowed by default and no extra notifications are needed -/// @param _from The origin of the transfer -/// @param _to The destination of the transfer -/// @param _amount The amount of the transfer -/// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) returns(bool) { - return true; - } - -/// @notice Notifies the controller about an approval, for this Campaign all -/// approvals are allowed by default and no extra notifications are needed -/// @param _owner The address that calls `approve()` -/// @param _spender The spender in the `approve()` call -/// @param _amount The amount in the `approve()` call -/// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) - returns(bool) - { - return true; - } - - -/// @dev `doPayment()` is an internal function that sends the ether that this -/// contract receives to the `vault` and creates tokens in the address of the -/// `_owner` assuming the Campaign is still accepting funds -/// @param _owner The address that will hold the newly created tokens - - function doPayment(address _owner) internal { - -// First check that the Campaign is allowed to receive this donation - require ((now >= startFundingTime) && - (now <= endFundingTime) && - (tokenContract.controller() != 0) && // Extra check - (msg.value != 0) && - (totalCollected + msg.value <= maximumFunding)); - -//Track how much the Campaign has collected - totalCollected += msg.value; - -//Send the ether to the vault - require (vaultAddress.send(msg.value)); - -// Creates an equal amount of tokens as ether sent. The new tokens are created -// in the `_owner` address - require (tokenContract.generateTokens(_owner, msg.value)); - - return; - } - -/// @notice `finalizeFunding()` ends the Campaign by calling setting the -/// controller to 0, thereby ending the issuance of new tokens and stopping the -/// Campaign from receiving more ether -/// @dev `finalizeFunding()` can only be called after the end of the funding period. - - function finalizeFunding() { - require(now >= endFundingTime); - tokenContract.changeController(0); - } - - -/// @notice `onlyOwner` changes the location that ether is sent -/// @param _newVaultAddress The address that will receive the ether sent to this -/// Campaign - function setVault(address _newVaultAddress) onlyOwner { - vaultAddress = _newVaultAddress; - } - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/TokenController.sol.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/TokenController.sol.js deleted file mode 100644 index 710f659e..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/TokenController.sol.js +++ /dev/null @@ -1,7 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.TokenControllerAbi = [{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] -exports.TokenControllerByteCode = "0x" -exports.TokenControllerRuntimeByteCode = "0x" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0x4ab21dd789d6619432629f4e930c7f6cd05cd149e14a8127f99c7c83f2c4377f" diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/TokenController_all.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/TokenController_all.sol deleted file mode 100644 index d8171bbd..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/build/TokenController_all.sol +++ /dev/null @@ -1,28 +0,0 @@ - -//File: ./contracts/TokenController.sol -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/Controlled.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/Controlled.sol deleted file mode 100644 index 871dec4a..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/Controlled.sol +++ /dev/null @@ -1,17 +0,0 @@ -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/MiniMeToken.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/MiniMeToken.sol deleted file mode 100644 index 81198aab..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/MiniMeToken.sol +++ /dev/null @@ -1,563 +0,0 @@ -pragma solidity ^0.4.18; - -/* - Copyright 2016, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MiniMeToken Contract -/// @author Jordi Baylina -/// @dev This token contract's goal is to make it easy for anyone to clone this -/// token using the token distribution at a given block, this will allow DAO's -/// and DApps to upgrade their features in a decentralized manner without -/// affecting the original token -/// @dev It is ERC20 compliant, but still needs to under go further testing. - -import "./Controlled.sol"; -import "./TokenController.sol"; - -contract ApproveAndCallFallBack { - function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; -} - -/// @dev The actual token contract, the default controller is the msg.sender -/// that deploys the contract, so usually this token will be deployed by a -/// token controller contract, which Giveth will call a "Campaign" -contract MiniMeToken is Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - string public version = 'MMT_0.2'; //An arbitrary versioning scheme - - - /// @dev `Checkpoint` is the structure that attaches a block number to a - /// given value, the block number attached is the one that last changed the - /// value - struct Checkpoint { - - // `fromBlock` is the block number that the value was generated from - uint128 fromBlock; - - // `value` is the amount of tokens at a specific block number - uint128 value; - } - - // `parentToken` is the Token address that was cloned to produce this token; - // it will be 0x0 for a token that was not cloned - MiniMeToken public parentToken; - - // `parentSnapShotBlock` is the block number from the Parent Token that was - // used to determine the initial distribution of the Clone Token - uint public parentSnapShotBlock; - - // `creationBlock` is the block number that the Clone Token was created - uint public creationBlock; - - // `balances` is the map that tracks the balance of each address, in this - // contract when the balance changes the block number that the change - // occurred is also included in the map - mapping (address => Checkpoint[]) balances; - - // `allowed` tracks any extra transfer rights as in all ERC20 tokens - mapping (address => mapping (address => uint256)) allowed; - - // Tracks the history of the `totalSupply` of the token - Checkpoint[] totalSupplyHistory; - - // Flag that determines if the token is transferable or not. - bool public transfersEnabled; - - // The factory used to create new clone tokens - MiniMeTokenFactory public tokenFactory; - -//////////////// -// Constructor -//////////////// - - /// @notice Constructor to create a MiniMeToken - /// @param _tokenFactory The address of the MiniMeTokenFactory contract that - /// will create the Clone token contracts, the token factory needs to be - /// deployed first - /// @param _parentToken Address of the parent token, set to 0x0 if it is a - /// new token - /// @param _parentSnapShotBlock Block of the parent token that will - /// determine the initial distribution of the clone token, set to 0 if it - /// is a new token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - function MiniMeToken( - address _tokenFactory, - address _parentToken, - uint _parentSnapShotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public { - tokenFactory = MiniMeTokenFactory(_tokenFactory); - name = _tokenName; // Set the name - decimals = _decimalUnits; // Set the decimals - symbol = _tokenSymbol; // Set the symbol - parentToken = MiniMeToken(_parentToken); - parentSnapShotBlock = _parentSnapShotBlock; - transfersEnabled = _transfersEnabled; - creationBlock = block.number; - } - - -/////////////////// -// ERC20 Methods -/////////////////// - - /// @notice Send `_amount` tokens to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - return doTransfer(msg.sender, _to, _amount); - } - - /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it - /// is approved by `_from` - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function transferFrom(address _from, address _to, uint256 _amount - ) public returns (bool success) { - - // The controller of this contract can move tokens around at will, - // this is important to recognize! Confirm that you trust the - // controller of this contract, which in most situations should be - // another open source smart contract or 0x0 - if (msg.sender != controller) { - require(transfersEnabled); - - // The standard ERC 20 transferFrom functionality - if (allowed[_from][msg.sender] < _amount) return false; - allowed[_from][msg.sender] -= _amount; - } - return doTransfer(_from, _to, _amount); - } - - /// @dev This is the actual transfer function in the token contract, it can - /// only be called by other functions in this contract. - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function doTransfer(address _from, address _to, uint _amount - ) internal returns(bool) { - - if (_amount == 0) { - return true; - } - - require(parentSnapShotBlock < block.number); - - // Do not allow transfer to 0x0 or the token contract itself - require((_to != 0) && (_to != address(this))); - - // If the amount being transfered is more than the balance of the - // account the transfer returns false - var previousBalanceFrom = balanceOfAt(_from, block.number); - if (previousBalanceFrom < _amount) { - return false; - } - - // Alerts the token controller of the transfer - if (isContract(controller)) { - require(TokenController(controller).onTransfer(_from, _to, _amount)); - } - - // First update the balance array with the new value for the address - // sending the tokens - updateValueAtNow(balances[_from], previousBalanceFrom - _amount); - - // Then update the balance array with the new value for the address - // receiving the tokens - var previousBalanceTo = balanceOfAt(_to, block.number); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(balances[_to], previousBalanceTo + _amount); - - // An event to make the transfer easy to find on the blockchain - Transfer(_from, _to, _amount); - - return true; - } - - /// @param _owner The address that's balance is being requested - /// @return The balance of `_owner` at the current block - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOfAt(_owner, block.number); - } - - /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on - /// its behalf. This is a modified version of the ERC20 approve function - /// to be a little bit safer - /// @param _spender The address of the account able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the approval was successful - function approve(address _spender, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender,0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); - } - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /// @dev This function makes it easy to read the `allowed[]` map - /// @param _owner The address of the account that owns the token - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens of _owner that _spender is allowed - /// to spend - function allowance(address _owner, address _spender - ) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall(address _spender, uint256 _amount, bytes _extraData - ) public returns (bool success) { - require(approve(_spender, _amount)); - - ApproveAndCallFallBack(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /// @dev This function makes it easy to get the total number of tokens - /// @return The total number of tokens - function totalSupply() public constant returns (uint) { - return totalSupplyAt(block.number); - } - - -//////////////// -// Query balance and totalSupply in History -//////////////// - - /// @dev Queries the balance of `_owner` at a specific `_blockNumber` - /// @param _owner The address from which the balance will be retrieved - /// @param _blockNumber The block number when the balance is queried - /// @return The balance at `_blockNumber` - function balanceOfAt(address _owner, uint _blockNumber) public constant - returns (uint) { - - // These next few lines are used when the balance of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.balanceOfAt` be queried at the - // genesis block for that token as this contains initial balance of - // this token - if ((balances[_owner].length == 0) - || (balances[_owner][0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); - } else { - // Has no parent - return 0; - } - - // This will return the expected balance during normal situations - } else { - return getValueAt(balances[_owner], _blockNumber); - } - } - - /// @notice Total amount of tokens at a specific `_blockNumber`. - /// @param _blockNumber The block number when the totalSupply is queried - /// @return The total amount of tokens at `_blockNumber` - function totalSupplyAt(uint _blockNumber) public constant returns(uint) { - - // These next few lines are used when the totalSupply of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.totalSupplyAt` be queried at the - // genesis block for this token as that contains totalSupply of this - // token at this block number. - if ((totalSupplyHistory.length == 0) - || (totalSupplyHistory[0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); - } else { - return 0; - } - - // This will return the expected totalSupply during normal situations - } else { - return getValueAt(totalSupplyHistory, _blockNumber); - } - } - -//////////////// -// Clone Token Method -//////////////// - - /// @notice Creates a new clone token with the initial distribution being - /// this token at `_snapshotBlock` - /// @param _cloneTokenName Name of the clone token - /// @param _cloneDecimalUnits Number of decimals of the smallest unit - /// @param _cloneTokenSymbol Symbol of the clone token - /// @param _snapshotBlock Block when the distribution of the parent token is - /// copied to set the initial distribution of the new clone token; - /// if the block is zero than the actual block, the current block is used - /// @param _transfersEnabled True if transfers are allowed in the clone - /// @return The address of the new MiniMeToken Contract - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _transfersEnabled - ) public returns(address) { - if (_snapshotBlock == 0) _snapshotBlock = block.number; - MiniMeToken cloneToken = tokenFactory.createCloneToken( - this, - _snapshotBlock, - _cloneTokenName, - _cloneDecimalUnits, - _cloneTokenSymbol, - _transfersEnabled - ); - - cloneToken.changeController(msg.sender); - - // An event to make the token easy to find on the blockchain - NewCloneToken(address(cloneToken), _snapshotBlock); - return address(cloneToken); - } - -//////////////// -// Generate and destroy tokens -//////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount - ) public onlyController returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow - uint previousBalanceTo = balanceOf(_owner); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); - updateValueAtNow(balances[_owner], previousBalanceTo + _amount); - Transfer(0, _owner, _amount); - return true; - } - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount - ) onlyController public returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply >= _amount); - uint previousBalanceFrom = balanceOf(_owner); - require(previousBalanceFrom >= _amount); - updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); - updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); - Transfer(_owner, 0, _amount); - return true; - } - -//////////////// -// Enable tokens transfers -//////////////// - - - /// @notice Enables token holders to transfer their tokens freely if true - /// @param _transfersEnabled True if transfers are allowed in the clone - function enableTransfers(bool _transfersEnabled) public onlyController { - transfersEnabled = _transfersEnabled; - } - -//////////////// -// Internal helper functions to query and set a value in a snapshot array -//////////////// - - /// @dev `getValueAt` retrieves the number of tokens at a given block number - /// @param checkpoints The history of values being queried - /// @param _block The block number to retrieve the value at - /// @return The number of tokens being queried - function getValueAt(Checkpoint[] storage checkpoints, uint _block - ) constant internal returns (uint) { - if (checkpoints.length == 0) return 0; - - // Shortcut for the actual value - if (_block >= checkpoints[checkpoints.length-1].fromBlock) - return checkpoints[checkpoints.length-1].value; - if (_block < checkpoints[0].fromBlock) return 0; - - // Binary search of the value in the array - uint min = 0; - uint max = checkpoints.length-1; - while (max > min) { - uint mid = (max + min + 1)/ 2; - if (checkpoints[mid].fromBlock<=_block) { - min = mid; - } else { - max = mid-1; - } - } - return checkpoints[min].value; - } - - /// @dev `updateValueAtNow` used to update the `balances` map and the - /// `totalSupplyHistory` - /// @param checkpoints The history of data being updated - /// @param _value The new number of tokens - function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value - ) internal { - if ((checkpoints.length == 0) - || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { - Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; - newCheckPoint.fromBlock = uint128(block.number); - newCheckPoint.value = uint128(_value); - } else { - Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; - oldCheckPoint.value = uint128(_value); - } - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) return false; - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /// @dev Helper function to return a min betwen the two uints - function min(uint a, uint b) pure internal returns (uint) { - return a < b ? a : b; - } - - /// @notice The fallback function: If the contract's controller has not been - /// set to 0, then the `proxyPayment` method is called which relays the - /// ether and creates tokens as described in the token controller contract - function () public payable { - require(isContract(controller)); - require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); - } - -////////// -// Safety Methods -////////// - - /// @notice This method can be used by the controller to extract mistakenly - /// sent tokens to this contract. - /// @param _token The address of the token contract that you want to recover - /// set to 0 in case you want to extract ether. - function claimTokens(address _token) public onlyController { - if (_token == 0x0) { - controller.transfer(this.balance); - return; - } - - MiniMeToken token = MiniMeToken(_token); - uint balance = token.balanceOf(this); - token.transfer(controller, balance); - ClaimedTokens(_token, controller, balance); - } - -//////////////// -// Events -//////////////// - event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); - event Transfer(address indexed _from, address indexed _to, uint256 _amount); - event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); - event Approval( - address indexed _owner, - address indexed _spender, - uint256 _amount - ); - -} - - -//////////////// -// MiniMeTokenFactory -//////////////// - -/// @dev This contract is used to generate clone contracts from a contract. -/// In solidity this is the way to create a contract from a contract of the -/// same class -contract MiniMeTokenFactory { - - /// @notice Update the DApp by creating a new token with new functionalities - /// the msg.sender becomes the controller of this clone token - /// @param _parentToken Address of the token being cloned - /// @param _snapshotBlock Block of the parent token that will - /// determine the initial distribution of the clone token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - /// @return The address of the new token contract - function createCloneToken( - address _parentToken, - uint _snapshotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public returns (MiniMeToken) { - MiniMeToken newToken = new MiniMeToken( - this, - _parentToken, - _snapshotBlock, - _tokenName, - _decimalUnits, - _tokenSymbol, - _transfersEnabled - ); - - newToken.changeController(msg.sender); - return newToken; - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/SampleCampaign-TokenController.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/SampleCampaign-TokenController.sol deleted file mode 100644 index 802533d7..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/SampleCampaign-TokenController.sol +++ /dev/null @@ -1,185 +0,0 @@ -pragma solidity ^0.4.6; - -/* - Copyright 2017, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MilestoneTracker Contract -/// @author Jordi Baylina -/// @dev This contract controls the issuance of tokens for the MiniMe Token -/// Contract. This version specifically acts as a Campaign manager for raising -/// funds for non-profit causes, but it can be customized for any variety of -/// purposes. - -import "MiniMeToken.sol"; - - -/// @dev `Owned` is a base level contract that assigns an `owner` that can be -/// later changed -contract Owned { - /// @dev `owner` is the only address that can call a function with this - /// modifier - modifier onlyOwner { require (msg.sender == owner); _; } - - address public owner; - - /// @notice The Constructor assigns the message sender to be `owner` - function Owned() { owner = msg.sender;} - - /// @notice `owner` can step down and assign some other address to this role - /// @param _newOwner The address of the new owner. 0x0 can be used to create - /// an unowned neutral vault, however that cannot be undone - function changeOwner(address _newOwner) onlyOwner { - owner = _newOwner; - } -} - - -/// @dev This is designed to control the issuance of a MiniMe Token for a -/// non-profit Campaign. This contract effectively dictates the terms of the -/// funding round. - -contract Campaign is TokenController, Owned { - - uint public startFundingTime; // In UNIX Time Format - uint public endFundingTime; // In UNIX Time Format - uint public maximumFunding; // In wei - uint public totalCollected; // In wei - MiniMeToken public tokenContract; // The new token for this Campaign - address public vaultAddress; // The address to hold the funds donated - -/// @notice 'Campaign()' initiates the Campaign by setting its funding -/// parameters -/// @dev There are several checks to make sure the parameters are acceptable -/// @param _startFundingTime The UNIX time that the Campaign will be able to -/// start receiving funds -/// @param _endFundingTime The UNIX time that the Campaign will stop being able -/// to receive funds -/// @param _maximumFunding In wei, the Maximum amount that the Campaign can -/// receive (currently the max is set at 10,000 ETH for the beta) -/// @param _vaultAddress The address that will store the donated funds -/// @param _tokenAddress Address of the token contract this contract controls - - function Campaign( - uint _startFundingTime, - uint _endFundingTime, - uint _maximumFunding, - address _vaultAddress, - address _tokenAddress - - ) { - require ((_endFundingTime >= now) && // Cannot end in the past - (_endFundingTime > _startFundingTime) && - (_maximumFunding <= 10000 ether) && // The Beta is limited - (_vaultAddress != 0)); // To prevent burning ETH - startFundingTime = _startFundingTime; - endFundingTime = _endFundingTime; - maximumFunding = _maximumFunding; - tokenContract = MiniMeToken(_tokenAddress);// The Deployed Token Contract - vaultAddress = _vaultAddress; - } - -/// @dev The fallback function is called when ether is sent to the contract, it -/// simply calls `doPayment()` with the address that sent the ether as the -/// `_owner`. Payable is a required solidity modifier for functions to receive -/// ether, without this modifier functions will throw if ether is sent to them - - function () payable { - doPayment(msg.sender); - } - -///////////////// -// TokenController interface -///////////////// - -/// @notice `proxyPayment()` allows the caller to send ether to the Campaign and -/// have the tokens created in an address of their choosing -/// @param _owner The address that will hold the newly created tokens - - function proxyPayment(address _owner) payable returns(bool) { - doPayment(_owner); - return true; - } - -/// @notice Notifies the controller about a transfer, for this Campaign all -/// transfers are allowed by default and no extra notifications are needed -/// @param _from The origin of the transfer -/// @param _to The destination of the transfer -/// @param _amount The amount of the transfer -/// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) returns(bool) { - return true; - } - -/// @notice Notifies the controller about an approval, for this Campaign all -/// approvals are allowed by default and no extra notifications are needed -/// @param _owner The address that calls `approve()` -/// @param _spender The spender in the `approve()` call -/// @param _amount The amount in the `approve()` call -/// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) - returns(bool) - { - return true; - } - - -/// @dev `doPayment()` is an internal function that sends the ether that this -/// contract receives to the `vault` and creates tokens in the address of the -/// `_owner` assuming the Campaign is still accepting funds -/// @param _owner The address that will hold the newly created tokens - - function doPayment(address _owner) internal { - -// First check that the Campaign is allowed to receive this donation - require ((now >= startFundingTime) && - (now <= endFundingTime) && - (tokenContract.controller() != 0) && // Extra check - (msg.value != 0) && - (totalCollected + msg.value <= maximumFunding)); - -//Track how much the Campaign has collected - totalCollected += msg.value; - -//Send the ether to the vault - require (vaultAddress.send(msg.value)); - -// Creates an equal amount of tokens as ether sent. The new tokens are created -// in the `_owner` address - require (tokenContract.generateTokens(_owner, msg.value)); - - return; - } - -/// @notice `finalizeFunding()` ends the Campaign by calling setting the -/// controller to 0, thereby ending the issuance of new tokens and stopping the -/// Campaign from receiving more ether -/// @dev `finalizeFunding()` can only be called after the end of the funding period. - - function finalizeFunding() { - require(now >= endFundingTime); - tokenContract.changeController(0); - } - - -/// @notice `onlyOwner` changes the location that ether is sent -/// @param _newVaultAddress The address that will receive the ether sent to this -/// Campaign - function setVault(address _newVaultAddress) onlyOwner { - vaultAddress = _newVaultAddress; - } - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/TokenController.sol b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/TokenController.sol deleted file mode 100644 index dad442e1..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/contracts/TokenController.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/env.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/env.js deleted file mode 100644 index 6bed322b..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/env.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; - -var Web3 = require('web3'); -// create an instance of web3 using the HTTP provider. -// NOTE in mist web3 is already available, so check first if its available before instantiating -var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); - -var BigNumber = require('bignumber.js'); - -var eth = web3.eth; -var async = require('async'); - -var MiniMeToken = require('./dist/minimetoken.js'); - -var gcb = function(err, res) { - if (err) { - console.log("ERROR: "+err); - } else { - console.log(JSON.stringify(res,null,2)); - } -} - -var minimeToken; - -function deployExample(cb) { - cb = cb || gcb; - async.series([ - function(cb) { - MiniMeToken.deploy(web3, { - tokenName: "MiniMe Test Token", - decimalUnits: 18, - tokenSymbol: "MMT", - }, function(err, _minimeToken) { - if (err) return err; - minimeToken = _minimeToken; - console.log("Minime Token: " + minimeToken.contract.address); - cb(); - }); - }, - function(cb) { - minimeToken.generateTokens({ - owner: eth.accounts[ 1 ], - amount: 10, - from: eth.accounts[ 0 ], - },cb); - }, - ], cb); - -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/index.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/index.js deleted file mode 100644 index 4a447c44..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/index.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.MiniMeToken = require('./js/minimetoken'); -exports.MiniMeTokenFactory = require('./js/minimetokenfactory'); -exports.MiniMeTokenState = require('./js/minimetokenstate'); diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/compile.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/compile.js deleted file mode 100644 index 9d534942..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/compile.js +++ /dev/null @@ -1,14 +0,0 @@ -const ethConnector = require("ethconnector"); -const path = require("path"); - -ethConnector.compile( - path.join(__dirname, "../contracts/MiniMeToken.sol"), - path.join(__dirname, "../contracts/MiniMeToken.sol.js"), - (err) => { - if (err) { - console.log(err); - process.exit(1); - } else { - process.exit(0); - } - }); diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetoken.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetoken.js deleted file mode 100644 index b45eaa08..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetoken.js +++ /dev/null @@ -1,5 +0,0 @@ -const MiniMeTokenAbi = require('../build/MiniMeToken.sol').MiniMeTokenAbi; -const MiniMeTokenByteCode = require('../build/MiniMeToken.sol').MiniMeTokenByteCode; -const generateClass = require('eth-contract-class').default; - -module.exports = generateClass(MiniMeTokenAbi, MiniMeTokenByteCode); diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetokenfactory.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetokenfactory.js deleted file mode 100644 index 5b29e72c..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetokenfactory.js +++ /dev/null @@ -1,5 +0,0 @@ -const MiniMeTokenFactoryAbi = require('../build/MiniMeToken.sol').MiniMeTokenFactoryAbi; -const MiniMeTokenFactoryByteCode = require('../build/MiniMeToken.sol').MiniMeTokenFactoryByteCode; -const generateClass = require('eth-contract-class').default; - -module.exports = generateClass(MiniMeTokenFactoryAbi, MiniMeTokenFactoryByteCode); diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetokenstate.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetokenstate.js deleted file mode 100644 index 091d1503..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/js/minimetokenstate.js +++ /dev/null @@ -1,44 +0,0 @@ -class MiniMeTokenState { - constructor(minimeToken) { - this.$token = minimeToken; - } - - async getState() { - const st = { - balances: {}, - }; - - const res = await Promise.all([ - this.$token.name(), - this.$token.decimals(), - this.$token.controller(), - this.$token.totalSupply(), - this.$token.parentToken(), - this.$token.controller(), - this.$token.parentSnapShotBlock(), - this.$token.$web3.eth.getAccounts(), - ]); - - st.name = res[0]; - st.decimals = res[1]; - st.controller = res[2]; - st.totalSupply = res[3]; - st.parentToken = res[4]; - st.controller = res[5]; - st.parentSnapShotBlock = res[6]; - const accounts = res[7]; - - const calls = accounts.map(account => this.$token.balanceOf(account)); - - const balances = await Promise.all(calls); - - for (let i = 0; i < accounts.length; i += 1) { - st.balances[accounts[i]] = balances[i]; - } - - return st; - } -} - -module.exports = MiniMeTokenState; - diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/package.json b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/package.json deleted file mode 100644 index cc55df3e..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "minimetoken@^0.2.0", - "_id": "minimetoken@0.2.0", - "_inBundle": false, - "_integrity": "sha512-oRwMg4tbr4sAznQ8+eS6ZQbrIQNt2Qn0wTFHQJVlPCCQ1cgq24h1B2KIaUtqIUu/eKZi7a5NE1MOcv0tZQxYFQ==", - "_location": "/kleros-interaction/minimetoken", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "minimetoken@^0.2.0", - "name": "minimetoken", - "escapedName": "minimetoken", - "rawSpec": "^0.2.0", - "saveSpec": null, - "fetchSpec": "^0.2.0" - }, - "_requiredBy": [ - "/kleros-interaction" - ], - "_resolved": "https://registry.npmjs.org/minimetoken/-/minimetoken-0.2.0.tgz", - "_shasum": "c182231eae93e752e5d8801c2967e6d6ef6a0e6f", - "_spec": "minimetoken@^0.2.0", - "_where": "C:\\Users\\Clementine\\GitHub\\openiico-contract\\node_modules\\kleros-interaction", - "author": { - "name": "Jordi Baylina" - }, - "bugs": { - "url": "https://github.com/Giveth/minimi/issues" - }, - "bundleDependencies": false, - "dependencies": { - "eth-contract-class": "0.0.6" - }, - "deprecated": false, - "description": "MiniMe contract", - "devDependencies": { - "babel-eslint": "^7.2.3", - "chai": "^4.1.0", - "eslint-config-airbnb": "^15.0.1", - "eslint-plugin-import": "^2.6.0", - "eslint-plugin-jsx-a11y": "^6.0.2", - "eslint-plugin-react": "^7.1.0", - "ethereumjs-testrpc": "git://github.com/perissology/testrpc.git#81216dbc", - "lerna": "^2.2.0", - "mocha": "^3.5.0", - "random-bytes": "^1.0.0", - "solcpiler": "0.0.6", - "web3": "git://github.com/perissology/web3.js.git#all_fixes" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/Giveth/minime", - "keywords": [ - "dao", - "solidity", - "token", - "charity", - "smart", - "contract", - "minime", - "giveth", - "ethereum" - ], - "license": "GPL-3.0", - "main": "dist/minimetoken.js", - "name": "minimetoken", - "repository": { - "type": "git", - "url": "git+https://github.com/Giveth/minime.git" - }, - "scripts": { - "build": "solcpiler", - "test": "solcpiler; mocha --harmony" - }, - "version": "0.2.0" -} diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/readme-header.png b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/readme-header.png deleted file mode 100644 index f6a24800..00000000 Binary files a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/readme-header.png and /dev/null differ diff --git a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/test/minimetoken_normal.js b/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/test/minimetoken_normal.js deleted file mode 100644 index cf89062f..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/node_modules/minimetoken/test/minimetoken_normal.js +++ /dev/null @@ -1,218 +0,0 @@ -/* eslint-env mocha */ -/* eslint-disable no-await-in-loop */ -const TestRPC = require('ethereumjs-testrpc'); -const Web3 = require('web3'); -const chai = require('chai'); - -const MiniMeToken = require('../index.js').MiniMeToken; -const MiniMeTokenFactory = require('../index.js').MiniMeTokenFactory; -const MiniMeTokenState = require('../index.js').MiniMeTokenState; - -const assert = chai.assert; -const { utils } = Web3; - -const verbose = false; - -const log = (S) => { - if (verbose) { - console.log(S); - } -}; - -// b[0] -> 0, 0, 0, 0 -// b[1] -> 0,10, 0, 0 -// b[2] -> 0, 8, 2, 0 -// b[3] -> 0, 9, 1, 0 -// b[4] -> 0, 6, 1, 0 -// Clone token -// b[5] -> 0, 6, 1, 0 -// b[6] -> 0, 2, 5. 0 - -describe('MiniMeToken test', () => { - let testrpc; - let web3; - let accounts; - let miniMeToken; - let miniMeTokenState; - let miniMeTokenClone; - let miniMeTokenCloneState; - const b = []; - - before(async () => { - testrpc = TestRPC.server({ - ws: true, - gasLimit: 5800000, - total_accounts: 10, - }); - - testrpc.listen(8546, '127.0.0.1'); - - web3 = new Web3('ws://localhost:8546'); - accounts = await web3.eth.getAccounts(); - }); - - after((done) => { - testrpc.close(); - done(); - }); - - it('should deploy all the contracts', async () => { - const tokenFactory = await MiniMeTokenFactory.new(web3); - miniMeToken = await MiniMeToken.new(web3, - tokenFactory.$address, - 0, - 0, - 'MiniMe Test Token', - 18, - 'MMT', - true); - assert.ok(miniMeToken.$address); - miniMeTokenState = new MiniMeTokenState(miniMeToken); - }).timeout(20000); - - it('Should generate tokens for address 1', async () => { - b[0] = await web3.eth.getBlockNumber(); - log(`b[0]-> ${b[0]}`); - - await miniMeToken.generateTokens(accounts[1], 10); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 10); - assert.equal(st.balances[accounts[1]], 10); - b[1] = await web3.eth.getBlockNumber(); - }).timeout(6000); - - it('Should transfer tokens from address 1 to address 2', async () => { - await miniMeToken.transfer(accounts[2], 2, { from: accounts[1], gas: 200000 }); - b[2] = await web3.eth.getBlockNumber(); - log(`b[2]-> ${b[3]}`); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 10); - assert.equal(st.balances[accounts[1]], 8); - assert.equal(st.balances[accounts[2]], 2); - - const balance = await miniMeToken.balanceOfAt(accounts[1], b[1]); - assert.equal(balance, 10); - }).timeout(6000); - - it('Should allow and transfer tokens from address 2 to address 1 allowed to 3', async () => { - await miniMeToken.approve(accounts[3], 2, { from: accounts[2] }); - const allowed = await miniMeToken.allowance(accounts[2], accounts[3]); - assert.equal(allowed, 2); - - await miniMeToken.transferFrom(accounts[2], accounts[1], 1, { from: accounts[3] }); - - const allowed2 = await miniMeToken.allowance(accounts[2], accounts[3]); - assert.equal(allowed2, 1); - - b[3] = await web3.eth.getBlockNumber(); - log(`b[3]-> ${b[3]}`); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 10); - assert.equal(st.balances[accounts[1]], 9); - assert.equal(st.balances[accounts[2]], 1); - - let balance; - - balance = await miniMeToken.balanceOfAt(accounts[1], b[2]); - assert.equal(balance, 8); - balance = await miniMeToken.balanceOfAt(accounts[2], b[2]); - assert.equal(balance, 2); - balance = await miniMeToken.balanceOfAt(accounts[1], b[1]); - assert.equal(balance, 10); - balance = await miniMeToken.balanceOfAt(accounts[2], b[1]); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[1], b[0]); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[2], b[0]); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[1], 0); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[2], 0); - assert.equal(balance, 0); - }); - - it('Should Destroy 3 tokens from 1 and 1 from 2', async () => { - await miniMeToken.destroyTokens(accounts[1], 3, { from: accounts[0], gas: 200000 }); - b[4] = await web3.eth.getBlockNumber(); - log(`b[4]-> ${b[4]}`); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 7); - assert.equal(st.balances[accounts[1]], 6); - }); - - it('Should Create the clone token', async () => { - const miniMeTokenCloneTx = await miniMeToken.createCloneToken( - 'Clone Token 1', - 18, - 'MMTc', - 0, - true); - - let addr = miniMeTokenCloneTx.events.NewCloneToken.raw.topics[1]; - addr = `0x${addr.slice(26)}`; - addr = utils.toChecksumAddress(addr); - miniMeTokenClone = new MiniMeToken(web3, addr); - - miniMeTokenCloneState = new MiniMeTokenState(miniMeTokenClone); - - b[5] = await web3.eth.getBlockNumber(); - log(`b[5]-> ${b[5]}`); - const st = await miniMeTokenCloneState.getState(); - - assert.equal(st.parentToken, miniMeToken.$address); - assert.equal(st.parentSnapShotBlock, b[5]); - assert.equal(st.totalSupply, 7); - assert.equal(st.balances[accounts[1]], 6); - - const totalSupply = await miniMeTokenClone.totalSupplyAt(b[4]); - - assert.equal(totalSupply, 7); - - const balance = await miniMeTokenClone.balanceOfAt(accounts[2], b[4]); - assert.equal(balance, 1); - }).timeout(6000); - - it('Should mine one block to take effect clone', async () => { - await miniMeToken.transfer(accounts[1], 1, { from: accounts[1] }); - }); - - it('Should move tokens in the clone token from 2 to 3', async () => { - await miniMeTokenClone.transfer(accounts[2], 4, { from: accounts[1] }); - b[6] = await web3.eth.getBlockNumber(); - log(`b[6]-> ${b[6]}`); - - const st = await miniMeTokenCloneState.getState(); - assert.equal(st.totalSupply, 7); - assert.equal(st.balances[accounts[1]], 2); - assert.equal(st.balances[accounts[2]], 5); - - let balance; - - balance = await miniMeToken.balanceOfAt(accounts[1], b[5]); - assert.equal(balance, 6); - balance = await miniMeToken.balanceOfAt(accounts[2], b[5]); - assert.equal(balance, 1); - balance = await miniMeTokenClone.balanceOfAt(accounts[1], b[5]); - assert.equal(balance, 6); - balance = await miniMeTokenClone.balanceOfAt(accounts[2], b[5]); - assert.equal(balance, 1); - balance = await miniMeTokenClone.balanceOfAt(accounts[1], b[4]); - assert.equal(balance, 6); - balance = await miniMeTokenClone.balanceOfAt(accounts[2], b[4]); - assert.equal(balance, 1); - - let totalSupply; - totalSupply = await miniMeTokenClone.totalSupplyAt(b[5]); - assert.equal(totalSupply, 7); - totalSupply = await miniMeTokenClone.totalSupplyAt(b[4]); - assert.equal(totalSupply, 7); - }).timeout(6000); - - it('Should create tokens in the child token', async () => { - await miniMeTokenClone.generateTokens(accounts[1], 10, { from: accounts[0], gas: 300000 }); - const st = await miniMeTokenCloneState.getState(); - assert.equal(st.totalSupply, 17); - assert.equal(st.balances[accounts[1]], 12); - assert.equal(st.balances[accounts[2]], 5); - }); -}); diff --git a/truebit-implementation/node_modules/kleros-interaction/package-lock.json b/truebit-implementation/node_modules/kleros-interaction/package-lock.json deleted file mode 100644 index 2326eafc..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/package-lock.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "name": "kleros-interaction", - "version": "0.0.13", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "bluebird": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", - "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" - }, - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" - }, - "eth-contract-class": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/eth-contract-class/-/eth-contract-class-0.0.6.tgz", - "integrity": "sha1-OYuJUhScx0fLlZ+otdSAKIx6i84=", - "requires": { - "web3-core-promievent": "1.0.0-beta.27" - } - }, - "ethjs-abi": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", - "integrity": "sha1-4KepOn6BFjqUR3utVu3lJKtt5TM=", - "requires": { - "bn.js": "4.11.6", - "js-sha3": "0.5.5", - "number-to-bn": "1.7.0" - } - }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "js-sha3": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", - "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=" - }, - "minimetoken": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/minimetoken/-/minimetoken-0.2.0.tgz", - "integrity": "sha512-oRwMg4tbr4sAznQ8+eS6ZQbrIQNt2Qn0wTFHQJVlPCCQ1cgq24h1B2KIaUtqIUu/eKZi7a5NE1MOcv0tZQxYFQ==", - "requires": { - "eth-contract-class": "0.0.6" - } - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.27.tgz", - "integrity": "sha1-0lx9e75NU9+/3KBJ+e1LCmlUvrw=", - "requires": { - "bluebird": "3.3.1", - "eventemitter3": "1.1.1" - } - }, - "zeppelin-solidity": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.7.0.tgz", - "integrity": "sha512-tb2GsrdbWlPoZGwhd1uAN82L3BwkH+tjtbX9a4L+3SBcfKlkn3WzcMTeYVtiTA1S1LZEGQBGsEwqLQk5w/Y8cw==", - "requires": { - "dotenv": "4.0.0", - "ethjs-abi": "0.2.1" - } - } - } -} diff --git a/truebit-implementation/node_modules/kleros-interaction/package.json b/truebit-implementation/node_modules/kleros-interaction/package.json deleted file mode 100644 index be0074de..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "_from": "kleros-interaction", - "_id": "kleros-interaction@0.0.14", - "_inBundle": false, - "_integrity": "sha1-LZWnjcJDZR1ddVrJcuVkp/ssadk=", - "_location": "/kleros-interaction", - "_phantomChildren": { - "eth-contract-class": "0.0.6" - }, - "_requested": { - "type": "tag", - "registry": true, - "raw": "kleros-interaction", - "name": "kleros-interaction", - "escapedName": "kleros-interaction", - "rawSpec": "", - "saveSpec": null, - "fetchSpec": "latest" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/kleros-interaction/-/kleros-interaction-0.0.14.tgz", - "_shasum": "2d95a78dc243651d5d755ac972e564a7fb2c69d9", - "_spec": "kleros-interaction", - "_where": "C:\\Users\\Clementine\\GitHub\\openiico-contract", - "author": { - "name": "Kleros" - }, - "bugs": { - "url": "https://github.com/kleros/kleros-interaction/issues" - }, - "bundleDependencies": false, - "dependencies": { - "minimetoken": "^0.2.0", - "zeppelin-solidity": "^1.7.0" - }, - "deprecated": false, - "description": "Smart contracts interacting with Kleros.", - "devDependencies": { - "truffle": "^4.0.4", - "web3": "^1.0.0-beta.22" - }, - "homepage": "https://github.com/kleros/kleros-interaction#readme", - "keywords": [ - "kleros", - "random", - "arbitration", - "arbitrable", - "arbitrator", - "rng" - ], - "license": "MIT", - "main": "index.js", - "name": "kleros-interaction", - "repository": { - "type": "git", - "url": "git+https://github.com/kleros/kleros-interaction.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "0.0.14" -} diff --git a/truebit-implementation/node_modules/kleros-interaction/test/README.md b/truebit-implementation/node_modules/kleros-interaction/test/README.md deleted file mode 100644 index 165b8fc7..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/test/README.md +++ /dev/null @@ -1,5 +0,0 @@ -### Tests - -The tests assumes you have at least the version 8.6 of node.js. -If it's not the case you can get it there: https://nodejs.org/en/ -Note that you'll have to reinstal ethereum js: npm install -g ethereumjs-testrpc diff --git a/truebit-implementation/node_modules/kleros-interaction/test/arbitrableTransaction.js b/truebit-implementation/node_modules/kleros-interaction/test/arbitrableTransaction.js deleted file mode 100644 index de3aad34..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/test/arbitrableTransaction.js +++ /dev/null @@ -1,189 +0,0 @@ -/* eslint-disable no-undef */ // Avoid the linter considering truffle elements as undef. -const { expectThrow, increaseTime } = require('../helpers/utils') -const ArbitrableTransaction = artifacts.require('./ArbitrableTransaction.sol') -const CentralizedArbitrator = artifacts.require('./CentralizedArbitrator.sol') - -contract('ArbitrableTransaction', function (accounts) { - let payer = accounts[0] - let payee = accounts[1] - let arbitrator = accounts[2] - let other = accounts[3] - let amount = 1000 - let timeout = 100 - let arbitrationFee = 20 - let gasPrice = 5000000000 - let contractHash = 0x6aa0bb2779ab006be0739900654a89f1f8a2d7373ed38490a7cbab9c9392e1ff - - // Constructor - it('Should put 1000 wei in the contract', async () => { - let arbitrableTransaction = await ArbitrableTransaction.new(0x0, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - assert.equal(web3.eth.getBalance(arbitrableTransaction.address), 1000, "The contract hasn't received the wei correctly.") - - let amountSending = await arbitrableTransaction.amount() - assert.equal(amountSending.toNumber(), 1000, "The contract hasn't updated its amount correctly.") - }) - - // Pay - it('Should pay the payee', async () => { - let initialPayeeBalance = web3.eth.getBalance(payee) - let arbitrableTransaction = await ArbitrableTransaction.new(0x0, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.pay({from: payer}) - let newPayeeBalance = web3.eth.getBalance(payee) - assert.equal(newPayeeBalance.toString(), initialPayeeBalance.plus(1000).toString(), "The payee hasn't been paid properly") - }) - - it('Should not pay the payee', async () => { - let arbitrableTransaction = await ArbitrableTransaction.new(0x0, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await expectThrow(arbitrableTransaction.pay({from: payee})) - }) - - // Reimburse - it('Should reimburse 507 to the payer', async () => { - let arbitrableTransaction = await ArbitrableTransaction.new(0x0, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - let payerBalanceBeforeReimbursment = web3.eth.getBalance(payer) - await arbitrableTransaction.reimburse(507, {from: payee}) - let newPayerBalance = web3.eth.getBalance(payer) - let newContractBalance = web3.eth.getBalance(arbitrableTransaction.address) - let newAmount = await arbitrableTransaction.amount() - - assert.equal(newPayerBalance.toString(), payerBalanceBeforeReimbursment.plus(507).toString(), 'The payer has not been reimbursed correctly') - assert.equal(newContractBalance.toNumber(), 493, 'Bad amount in the contract') - assert.equal(newAmount.toNumber(), 493, 'Amount not updated correctly') - }) - - it('Should reimburse 1000 (all) to the payer', async () => { - let arbitrableTransaction = await ArbitrableTransaction.new(0x0, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - let payerBalanceBeforeReimbursment = web3.eth.getBalance(payer) - await arbitrableTransaction.reimburse(1000, {from: payee}) - let newPayerBalance = web3.eth.getBalance(payer) - let newContractBalance = web3.eth.getBalance(arbitrableTransaction.address) - let newAmount = await arbitrableTransaction.amount() - - assert.equal(newPayerBalance.toString(), payerBalanceBeforeReimbursment.plus(1000).toString(), 'The payer has not been reimbursed correctly') - assert.equal(newContractBalance.toNumber(), 0, 'Bad amount in the contract') - assert.equal(newAmount.toNumber(), 0, 'Amount not updated correctly') - }) - - it('Should fail if we try to reimburse more', async () => { - let arbitrableTransaction = await ArbitrableTransaction.new(0x0, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await expectThrow(arbitrableTransaction.reimburse(1003, {from: payee})) - }) - - it('Should fail if the payer to it', async () => { - let arbitrableTransaction = await ArbitrableTransaction.new(0x0, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await expectThrow(arbitrableTransaction.reimburse(1000, {from: payer})) - }) - - // executeRuling - it('Should reimburse the payer (including arbitration fee) when the arbitrator decides so', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - let payerBalanceBeforeReimbursment = web3.eth.getBalance(payer) - await centralizedArbitrator.giveRuling(0, 1, {from: arbitrator}) - let newPayerBalance = web3.eth.getBalance(payer) - assert.equal(newPayerBalance.toString(), payerBalanceBeforeReimbursment.plus(1020).toString(), 'The payer has not been reimbursed correctly') - }) - - it('Should pay the payee and reimburse him the arbitration fee when the arbitrator decides so', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - let payeeBalanceBeforePay = web3.eth.getBalance(payee) - await centralizedArbitrator.giveRuling(0, 2, {from: arbitrator}) - let newPayeeBalance = web3.eth.getBalance(payee) - assert.equal(newPayeeBalance.toString(), payeeBalanceBeforePay.plus(1020).toString(), 'The payee has not been paid properly') - }) - - it('It should do nothing if the arbitrator decides so', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - let payeeBalanceBeforePay = web3.eth.getBalance(payee) - let payerBalanceBeforeReimbursment = web3.eth.getBalance(payer) - await centralizedArbitrator.giveRuling(0, 0, {from: arbitrator}) - let newPayeeBalance = web3.eth.getBalance(payee) - let newPayerBalance = web3.eth.getBalance(payer) - assert.equal(newPayeeBalance.toString(), payeeBalanceBeforePay.toString(), "The payee got wei while it shouldn't") - assert.equal(newPayerBalance.toString(), payerBalanceBeforeReimbursment.toString(), "The payer got wei while it shouldn't") - }) - - it('Should reimburse the payer in case of timeout of the payee', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - increaseTime(timeout + 1) - let payerBalanceBeforeReimbursment = web3.eth.getBalance(payer) - let tx = await arbitrableTransaction.timeOutByPartyA({from: payer, gasPrice: gasPrice}) - let txFee = tx.receipt.gasUsed * gasPrice - let newPayerBalance = web3.eth.getBalance(payer) - assert.equal(newPayerBalance.toString(), payerBalanceBeforeReimbursment.plus(1020).minus(txFee).toString(), 'The payer has not been reimbursed correctly') - }) - - it("Shouldn't work before timeout for the payer", async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await expectThrow(arbitrableTransaction.timeOutByPartyA({from: payer, gasPrice: gasPrice})) - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - increaseTime(1) - await expectThrow(arbitrableTransaction.timeOutByPartyA({from: payer, gasPrice: gasPrice})) - }) - - it('Should pay and reimburse the payee in case of timeout of the payer', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - increaseTime(timeout + 1) - let payeeBalanceBeforeReimbursment = web3.eth.getBalance(payee) - let tx = await arbitrableTransaction.timeOutByPartyB({from: payee, gasPrice: gasPrice}) - let txFee = tx.receipt.gasUsed * gasPrice - let newPayeeBalance = web3.eth.getBalance(payee) - assert.equal(newPayeeBalance.toString(), payeeBalanceBeforeReimbursment.plus(1020).minus(txFee).toString(), 'The payee has not been paid correctly') - }) - - it("Shouldn't work before timeout for the payee", async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await expectThrow(arbitrableTransaction.timeOutByPartyB({from: payee, gasPrice: gasPrice})) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - increaseTime(1) - await expectThrow(arbitrableTransaction.timeOutByPartyB({from: payee, gasPrice: gasPrice})) - }) - - // submitEvidence - it('Should create events when evidence is submitted by the payer', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - let tx = await arbitrableTransaction.submitEvidence('ipfs:/X', {from: payer}) - assert.equal(tx.logs[0].event, 'Evidence') - assert.equal(tx.logs[0].args._arbitrator, centralizedArbitrator.address) - assert.equal(tx.logs[0].args._party, payer) - assert.equal(tx.logs[0].args._evidence, 'ipfs:/X') - }) - - it('Should create events when evidence is submitted by the payee', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - let tx = await arbitrableTransaction.submitEvidence('ipfs:/X', {from: payee}) - assert.equal(tx.logs[0].event, 'Evidence') - assert.equal(tx.logs[0].args._arbitrator, centralizedArbitrator.address) - assert.equal(tx.logs[0].args._party, payee) - assert.equal(tx.logs[0].args._evidence, 'ipfs:/X') - }) - - it('Should fail if someone else try to submit', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrableTransaction = await ArbitrableTransaction.new(centralizedArbitrator.address, contractHash, timeout, payee, 0x0, {from: payer, value: amount}) - await arbitrableTransaction.payArbitrationFeeByPartyA({from: payer, value: arbitrationFee}) - await arbitrableTransaction.payArbitrationFeeByPartyB({from: payee, value: arbitrationFee}) - await expectThrow(arbitrableTransaction.submitEvidence('ipfs:/X', {from: other})) - }) -}) diff --git a/truebit-implementation/node_modules/kleros-interaction/test/twoPartyArbitrable.js b/truebit-implementation/node_modules/kleros-interaction/test/twoPartyArbitrable.js deleted file mode 100644 index 7a12f140..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/test/twoPartyArbitrable.js +++ /dev/null @@ -1,174 +0,0 @@ -/* eslint-disable no-undef */ // Avoid the linter considering truffle elements as undef. -const { expectThrow, increaseTime } = require('../helpers/utils') -const TwoPartyArbitrable = artifacts.require('./TwoPartyArbitrable.sol') -const CentralizedArbitrator = artifacts.require('./CentralizedArbitrator.sol') - -contract('TwoPartyArbitrable', function (accounts) { - let partyA = accounts[0] - let partyB = accounts[1] - let arbitrator = accounts[2] - let other = accounts[3] - let timeout = 100 - let arbitrationFee = 20 - let gasPrice = 5000000000 - let contractHash = 0x6aa0bb2779ab006be0739900654a89f1f8a2d7373ed38490a7cbab9c9392e1ff - - // Constructor - it('Should set the correct values', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x08575, {from: partyA}) - assert.equal(await arbitrable.timeout(), timeout) - assert.equal(await arbitrable.partyA(), partyA) - assert.equal(await arbitrable.partyB(), partyB) - assert.equal(await arbitrable.arbitratorExtraData(), 0x08575) - }) - - // payArbitrationFeeByPartyA and payArbitrationFeeByPartyB - it('Should create a dispute when A and B pay', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x08575, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - let dispute = await centralizedArbitrator.disputes(0) - assert.equal(dispute[0], arbitrable.address, 'Arbitrable not set up properly') - assert.equal(dispute[1].toNumber(), 2, 'Number of choices not set up properly') - assert.equal(dispute[2].toNumber(), 20, 'Fee not set up properly') - }) - - it('Should create a dispute when B and A pay', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x08575, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - let dispute = await centralizedArbitrator.disputes(0) - assert.equal(dispute[0], arbitrable.address, 'Arbitrable not set up properly') - assert.equal(dispute[1].toNumber(), 2, 'Number of choices not set up properly') - assert.equal(dispute[2].toNumber(), 20, 'Fee not set up properly') - }) - - it('Should not be possible to pay less', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x08575, {from: partyA}) - await expectThrow(arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee - 1})) - await expectThrow(arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee - 1})) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - await expectThrow(arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee - 1})) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - }) - - // timeOutByPartyA and timeOutByPartyB - it('Should reimburse partyA in case of timeout of partyB', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - increaseTime(timeout + 1) - let partyABalanceBeforeReimbursment = web3.eth.getBalance(partyA) - let tx = await arbitrable.timeOutByPartyA({from: partyA, gasPrice: gasPrice}) - let txFee = tx.receipt.gasUsed * gasPrice - let newpartyABalance = web3.eth.getBalance(partyA) - assert.equal(newpartyABalance.toString(), partyABalanceBeforeReimbursment.plus(20).minus(txFee).toString(), 'partyA has not been reimbursed correctly') - }) - - it("Shouldn't work before timeout for partyA", async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await expectThrow(arbitrable.timeOutByPartyA({from: partyA, gasPrice: gasPrice})) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - increaseTime(1) - await expectThrow(arbitrable.timeOutByPartyA({from: partyA, gasPrice: gasPrice})) - }) - - it('Should reimburse partyB in case of timeout of partyA', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - increaseTime(timeout + 1) - let partyBBalanceBeforeReimbursment = web3.eth.getBalance(partyB) - let tx = await arbitrable.timeOutByPartyB({from: partyB, gasPrice: gasPrice}) - let txFee = tx.receipt.gasUsed * gasPrice - let newpartyBBalance = web3.eth.getBalance(partyB) - assert.equal(newpartyBBalance.toString(), partyBBalanceBeforeReimbursment.plus(20).minus(txFee).toString(), 'partyB has not been reimbursed correctly') - }) - - it("Shouldn't work before timeout for partyB", async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await expectThrow(arbitrable.timeOutByPartyB({from: partyB, gasPrice: gasPrice})) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - increaseTime(1) - await expectThrow(arbitrable.timeOutByPartyB({from: partyB, gasPrice: gasPrice})) - }) - - // submitEvidence - it('Should create events when evidence is submitted by partyA', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - let tx = await arbitrable.submitEvidence('ipfs:/X', {from: partyA}) - assert.equal(tx.logs[0].event, 'Evidence') - assert.equal(tx.logs[0].args._arbitrator, centralizedArbitrator.address) - assert.equal(tx.logs[0].args._party, partyA) - assert.equal(tx.logs[0].args._evidence, 'ipfs:/X') - }) - - it('Should create events when evidence is submitted by partyB', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - let tx = await arbitrable.submitEvidence('ipfs:/X', {from: partyB}) - assert.equal(tx.logs[0].event, 'Evidence') - assert.equal(tx.logs[0].args._arbitrator, centralizedArbitrator.address) - assert.equal(tx.logs[0].args._party, partyB) - assert.equal(tx.logs[0].args._evidence, 'ipfs:/X') - }) - - it('Should fail if someone else tries to submit', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - await expectThrow(arbitrable.submitEvidence('ipfs:/X', {from: other})) - }) - - // appeal - // TODO: When we'll have a contract using appeal. - - // executeRuling - it('Should reimburse the partyA (including arbitration fee) when the arbitrator decides so', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - let partyABalanceBeforeReimbursment = web3.eth.getBalance(partyA) - await centralizedArbitrator.giveRuling(0, 1, {from: arbitrator}) - let newPartyABalance = web3.eth.getBalance(partyA) - assert.equal(newPartyABalance.toString(), partyABalanceBeforeReimbursment.plus(20).toString(), 'partyA has not been reimbursed correctly') - }) - - it('Should pay the partyB and reimburse him the arbitration fee when the arbitrator decides so', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - let partyBBalanceBeforePay = web3.eth.getBalance(partyB) - await centralizedArbitrator.giveRuling(0, 2, {from: arbitrator}) - let newPartyBBalance = web3.eth.getBalance(partyB) - assert.equal(newPartyBBalance.toString(), partyBBalanceBeforePay.plus(20).toString(), 'partyB has not been reimbursed correctly') - }) - - it('It should do nothing if the arbitrator decides so', async () => { - let centralizedArbitrator = await CentralizedArbitrator.new(arbitrationFee, {from: arbitrator}) - let arbitrable = await TwoPartyArbitrable.new(centralizedArbitrator.address, contractHash, timeout, partyB, 0x0, {from: partyA}) - await arbitrable.payArbitrationFeeByPartyA({from: partyA, value: arbitrationFee}) - await arbitrable.payArbitrationFeeByPartyB({from: partyB, value: arbitrationFee}) - let partyBBalanceBeforePay = web3.eth.getBalance(partyB) - let partyABalanceBeforeReimbursment = web3.eth.getBalance(partyA) - await centralizedArbitrator.giveRuling(0, 0, {from: arbitrator}) - let newPartyBBalance = web3.eth.getBalance(partyB) - let newPartyABalance = web3.eth.getBalance(partyA) - assert.equal(newPartyBBalance.toString(), partyBBalanceBeforePay.toString(), "partyB got wei while it shouldn't") - assert.equal(newPartyABalance.toString(), partyABalanceBeforeReimbursment.toString(), "partyA got wei while it shouldn't") - }) -}) diff --git a/truebit-implementation/node_modules/kleros-interaction/truffle.js b/truebit-implementation/node_modules/kleros-interaction/truffle.js deleted file mode 100644 index 2491c7c8..00000000 --- a/truebit-implementation/node_modules/kleros-interaction/truffle.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - networks: { - development: { - host: "localhost", - port: 8545, - network_id: "*" // Match any network id - } - } -}; diff --git a/truebit-implementation/node_modules/lowercase-keys/index.js b/truebit-implementation/node_modules/lowercase-keys/index.js deleted file mode 100644 index b8d88983..00000000 --- a/truebit-implementation/node_modules/lowercase-keys/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; -module.exports = function (obj) { - var ret = {}; - var keys = Object.keys(Object(obj)); - - for (var i = 0; i < keys.length; i++) { - ret[keys[i].toLowerCase()] = obj[keys[i]]; - } - - return ret; -}; diff --git a/truebit-implementation/node_modules/lowercase-keys/license b/truebit-implementation/node_modules/lowercase-keys/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/lowercase-keys/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/lowercase-keys/package.json b/truebit-implementation/node_modules/lowercase-keys/package.json deleted file mode 100644 index 42d9a150..00000000 --- a/truebit-implementation/node_modules/lowercase-keys/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "_from": "lowercase-keys@^1.0.0", - "_id": "lowercase-keys@1.0.1", - "_inBundle": false, - "_integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "_location": "/lowercase-keys", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "lowercase-keys@^1.0.0", - "name": "lowercase-keys", - "escapedName": "lowercase-keys", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "_shasum": "6f9e30b47084d971a7c820ff15a6c5167b74c26f", - "_spec": "lowercase-keys@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/lowercase-keys/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Lowercase the keys of an object", - "devDependencies": { - "ava": "*" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/lowercase-keys#readme", - "keywords": [ - "object", - "assign", - "extend", - "properties", - "lowercase", - "lower-case", - "case", - "keys", - "key" - ], - "license": "MIT", - "name": "lowercase-keys", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/lowercase-keys.git" - }, - "scripts": { - "test": "ava" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/lowercase-keys/readme.md b/truebit-implementation/node_modules/lowercase-keys/readme.md deleted file mode 100644 index dc65770a..00000000 --- a/truebit-implementation/node_modules/lowercase-keys/readme.md +++ /dev/null @@ -1,33 +0,0 @@ -# lowercase-keys [![Build Status](https://travis-ci.org/sindresorhus/lowercase-keys.svg?branch=master)](https://travis-ci.org/sindresorhus/lowercase-keys) - -> Lowercase the keys of an object - - -## Install - -``` -$ npm install --save lowercase-keys -``` - - -## Usage - -```js -var lowercaseKeys = require('lowercase-keys'); - -lowercaseKeys({FOO: true, bAr: false}); -//=> {foo: true, bar: false} -``` - - -## API - -### lowercaseKeys(object) - -Lowercases the keys and returns a new object. - - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/truebit-implementation/node_modules/make-dir/index.js b/truebit-implementation/node_modules/make-dir/index.js deleted file mode 100644 index 18439555..00000000 --- a/truebit-implementation/node_modules/make-dir/index.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; -const fs = require('fs'); -const path = require('path'); -const pify = require('pify'); - -const defaults = { - mode: 0o777 & (~process.umask()), - fs -}; - -// https://github.com/nodejs/node/issues/8987 -// https://github.com/libuv/libuv/pull/1088 -const checkPath = pth => { - if (process.platform === 'win32') { - const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, '')); - - if (pathHasInvalidWinCharacters) { - const err = new Error(`Path contains invalid characters: ${pth}`); - err.code = 'EINVAL'; - throw err; - } - } -}; - -module.exports = (input, opts) => Promise.resolve().then(() => { - checkPath(input); - opts = Object.assign({}, defaults, opts); - - const mkdir = pify(opts.fs.mkdir); - const stat = pify(opts.fs.stat); - - const make = pth => { - return mkdir(pth, opts.mode) - .then(() => pth) - .catch(err => { - if (err.code === 'ENOENT') { - if (err.message.includes('null bytes') || path.dirname(pth) === pth) { - throw err; - } - - return make(path.dirname(pth)).then(() => make(pth)); - } - - return stat(pth) - .then(stats => stats.isDirectory() ? pth : Promise.reject()) - .catch(() => { - throw err; - }); - }); - }; - - return make(path.resolve(input)); -}); - -module.exports.sync = (input, opts) => { - checkPath(input); - opts = Object.assign({}, defaults, opts); - - const make = pth => { - try { - opts.fs.mkdirSync(pth, opts.mode); - } catch (err) { - if (err.code === 'ENOENT') { - if (err.message.includes('null bytes') || path.dirname(pth) === pth) { - throw err; - } - - make(path.dirname(pth)); - return make(pth); - } - - try { - if (!opts.fs.statSync(pth).isDirectory()) { - throw new Error('The path is not a directory'); - } - } catch (_) { - throw err; - } - } - - return pth; - }; - - return make(path.resolve(input)); -}; diff --git a/truebit-implementation/node_modules/make-dir/license b/truebit-implementation/node_modules/make-dir/license deleted file mode 100644 index e7af2f77..00000000 --- a/truebit-implementation/node_modules/make-dir/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/make-dir/node_modules/pify/index.js b/truebit-implementation/node_modules/make-dir/node_modules/pify/index.js deleted file mode 100644 index 1dee43ad..00000000 --- a/truebit-implementation/node_modules/make-dir/node_modules/pify/index.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; - -const processFn = (fn, opts) => function () { - const P = opts.promiseModule; - const args = new Array(arguments.length); - - for (let i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } - - return new P((resolve, reject) => { - if (opts.errorFirst) { - args.push(function (err, result) { - if (opts.multiArgs) { - const results = new Array(arguments.length - 1); - - for (let i = 1; i < arguments.length; i++) { - results[i - 1] = arguments[i]; - } - - if (err) { - results.unshift(err); - reject(results); - } else { - resolve(results); - } - } else if (err) { - reject(err); - } else { - resolve(result); - } - }); - } else { - args.push(function (result) { - if (opts.multiArgs) { - const results = new Array(arguments.length - 1); - - for (let i = 0; i < arguments.length; i++) { - results[i] = arguments[i]; - } - - resolve(results); - } else { - resolve(result); - } - }); - } - - fn.apply(this, args); - }); -}; - -module.exports = (obj, opts) => { - opts = Object.assign({ - exclude: [/.+(Sync|Stream)$/], - errorFirst: true, - promiseModule: Promise - }, opts); - - const filter = key => { - const match = pattern => typeof pattern === 'string' ? key === pattern : pattern.test(key); - return opts.include ? opts.include.some(match) : !opts.exclude.some(match); - }; - - let ret; - if (typeof obj === 'function') { - ret = function () { - if (opts.excludeMain) { - return obj.apply(this, arguments); - } - - return processFn(obj, opts).apply(this, arguments); - }; - } else { - ret = Object.create(Object.getPrototypeOf(obj)); - } - - for (const key in obj) { // eslint-disable-line guard-for-in - const x = obj[key]; - ret[key] = typeof x === 'function' && filter(key) ? processFn(x, opts) : x; - } - - return ret; -}; diff --git a/truebit-implementation/node_modules/make-dir/node_modules/pify/license b/truebit-implementation/node_modules/make-dir/node_modules/pify/license deleted file mode 100644 index e7af2f77..00000000 --- a/truebit-implementation/node_modules/make-dir/node_modules/pify/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/make-dir/node_modules/pify/package.json b/truebit-implementation/node_modules/make-dir/node_modules/pify/package.json deleted file mode 100644 index 3f98dce1..00000000 --- a/truebit-implementation/node_modules/make-dir/node_modules/pify/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_from": "pify@^3.0.0", - "_id": "pify@3.0.0", - "_inBundle": false, - "_integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "_location": "/make-dir/pify", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "pify@^3.0.0", - "name": "pify", - "escapedName": "pify", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/make-dir" - ], - "_resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "_shasum": "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176", - "_spec": "pify@^3.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/make-dir", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/pify/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Promisify a callback-style function", - "devDependencies": { - "ava": "*", - "pinkie-promise": "^2.0.0", - "v8-natives": "^1.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/pify#readme", - "keywords": [ - "promise", - "promises", - "promisify", - "all", - "denodify", - "denodeify", - "callback", - "cb", - "node", - "then", - "thenify", - "convert", - "transform", - "wrap", - "wrapper", - "bind", - "to", - "async", - "await", - "es2015", - "bluebird" - ], - "license": "MIT", - "name": "pify", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/pify.git" - }, - "scripts": { - "optimization-test": "node --allow-natives-syntax optimization-test.js", - "test": "xo && ava && npm run optimization-test" - }, - "version": "3.0.0" -} diff --git a/truebit-implementation/node_modules/make-dir/node_modules/pify/readme.md b/truebit-implementation/node_modules/make-dir/node_modules/pify/readme.md deleted file mode 100644 index 376ca4e5..00000000 --- a/truebit-implementation/node_modules/make-dir/node_modules/pify/readme.md +++ /dev/null @@ -1,131 +0,0 @@ -# pify [![Build Status](https://travis-ci.org/sindresorhus/pify.svg?branch=master)](https://travis-ci.org/sindresorhus/pify) - -> Promisify a callback-style function - - -## Install - -``` -$ npm install --save pify -``` - - -## Usage - -```js -const fs = require('fs'); -const pify = require('pify'); - -// Promisify a single function -pify(fs.readFile)('package.json', 'utf8').then(data => { - console.log(JSON.parse(data).name); - //=> 'pify' -}); - -// Promisify all methods in a module -pify(fs).readFile('package.json', 'utf8').then(data => { - console.log(JSON.parse(data).name); - //=> 'pify' -}); -``` - - -## API - -### pify(input, [options]) - -Returns a `Promise` wrapped version of the supplied function or module. - -#### input - -Type: `Function` `Object` - -Callback-style function or module whose methods you want to promisify. - -#### options - -##### multiArgs - -Type: `boolean`
-Default: `false` - -By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument. This also applies to rejections, where it returns an array of all the callback arguments, including the error. - -```js -const request = require('request'); -const pify = require('pify'); - -pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => { - const [httpResponse, body] = result; -}); -``` - -##### include - -Type: `string[]` `RegExp[]` - -Methods in a module to promisify. Remaining methods will be left untouched. - -##### exclude - -Type: `string[]` `RegExp[]`
-Default: `[/.+(Sync|Stream)$/]` - -Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default. - -##### excludeMain - -Type: `boolean`
-Default: `false` - -If given module is a function itself, it will be promisified. Turn this option on if you want to promisify only methods of the module. - -```js -const pify = require('pify'); - -function fn() { - return true; -} - -fn.method = (data, callback) => { - setImmediate(() => { - callback(null, data); - }); -}; - -// Promisify methods but not `fn()` -const promiseFn = pify(fn, {excludeMain: true}); - -if (promiseFn()) { - promiseFn.method('hi').then(data => { - console.log(data); - }); -} -``` - -##### errorFirst - -Type: `boolean`
-Default: `true` - -Whether the callback has an error as the first argument. You'll want to set this to `false` if you're dealing with an API that doesn't have an error as the first argument, like `fs.exists()`, some browser APIs, Chrome Extension APIs, etc. - -##### promiseModule - -Type: `Function` - -Custom promise module to use instead of the native one. - -Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill. - - -## Related - -- [p-event](https://github.com/sindresorhus/p-event) - Promisify an event by waiting for it to be emitted -- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently -- [More…](https://github.com/sindresorhus/promise-fun) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/make-dir/package.json b/truebit-implementation/node_modules/make-dir/package.json deleted file mode 100644 index 72c67318..00000000 --- a/truebit-implementation/node_modules/make-dir/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_from": "make-dir@^1.0.0", - "_id": "make-dir@1.3.0", - "_inBundle": false, - "_integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "_location": "/make-dir", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "make-dir@^1.0.0", - "name": "make-dir", - "escapedName": "make-dir", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/decompress" - ], - "_resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "_shasum": "79c1033b80515bd6d24ec9933e860ca75ee27f0c", - "_spec": "make-dir@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/make-dir/issues" - }, - "bundleDependencies": false, - "dependencies": { - "pify": "^3.0.0" - }, - "deprecated": false, - "description": "Make a directory and its parents if needed - Think `mkdir -p`", - "devDependencies": { - "ava": "*", - "codecov": "^3.0.0", - "graceful-fs": "^4.1.11", - "nyc": "^11.3.0", - "path-type": "^3.0.0", - "tempy": "^0.2.1", - "xo": "^0.20.0" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/make-dir#readme", - "keywords": [ - "mkdir", - "mkdirp", - "make", - "directories", - "dir", - "dirs", - "folders", - "directory", - "folder", - "path", - "parent", - "parents", - "intermediate", - "recursively", - "recursive", - "create", - "fs", - "filesystem", - "file-system" - ], - "license": "MIT", - "name": "make-dir", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/make-dir.git" - }, - "scripts": { - "test": "xo && nyc ava" - }, - "version": "1.3.0" -} diff --git a/truebit-implementation/node_modules/make-dir/readme.md b/truebit-implementation/node_modules/make-dir/readme.md deleted file mode 100644 index 8a32bf47..00000000 --- a/truebit-implementation/node_modules/make-dir/readme.md +++ /dev/null @@ -1,116 +0,0 @@ -# make-dir [![Build Status: macOS & Linux](https://travis-ci.org/sindresorhus/make-dir.svg?branch=master)](https://travis-ci.org/sindresorhus/make-dir) [![Build status: Windows](https://ci.appveyor.com/api/projects/status/e0vtt8y600w91gcs/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/make-dir/branch/master) [![codecov](https://codecov.io/gh/sindresorhus/make-dir/branch/master/graph/badge.svg)](https://codecov.io/gh/sindresorhus/make-dir) - -> Make a directory and its parents if needed - Think `mkdir -p` - - -## Advantages over [`mkdirp`](https://github.com/substack/node-mkdirp) - -- Promise API *(Async/await ready!)* -- Fixes many `mkdirp` issues: [#96](https://github.com/substack/node-mkdirp/pull/96) [#70](https://github.com/substack/node-mkdirp/issues/70) [#66](https://github.com/substack/node-mkdirp/issues/66) -- 100% test coverage -- CI-tested on macOS, Linux, and Windows -- Actively maintained -- Doesn't bundle a CLI - - -## Install - -``` -$ npm install make-dir -``` - - -## Usage - -``` -$ pwd -/Users/sindresorhus/fun -$ tree -. -``` - -```js -const makeDir = require('make-dir'); - -makeDir('unicorn/rainbow/cake').then(path => { - console.log(path); - //=> '/Users/sindresorhus/fun/unicorn/rainbow/cake' -}); -``` - -``` -$ tree -. -└── unicorn - └── rainbow - └── cake -``` - -Multiple directories: - -```js -const makeDir = require('make-dir'); - -Promise.all([ - makeDir('unicorn/rainbow') - makeDir('foo/bar') -]).then(paths => { - console.log(paths); - /* - [ - '/Users/sindresorhus/fun/unicorn/rainbow', - '/Users/sindresorhus/fun/foo/bar' - ] - */ -}); -``` - - -## API - -### makeDir(path, [options]) - -Returns a `Promise` for the path to the created directory. - -### makeDir.sync(path, [options]) - -Returns the path to the created directory. - -#### path - -Type: `string` - -Directory to create. - -#### options - -Type: `Object` - -##### mode - -Type: `integer`
-Default: `0o777 & (~process.umask())` - -Directory [permissions](https://x-team.com/blog/file-system-permissions-umask-node-js/). - -##### fs - -Type: `Object`
-Default: `require('fs')` - -Use a custom `fs` implementation. For example [`graceful-fs`](https://github.com/isaacs/node-graceful-fs). - - -## Related - -- [make-dir-cli](https://github.com/sindresorhus/make-dir-cli) - CLI for this module -- [del](https://github.com/sindresorhus/del) - Delete files and directories -- [globby](https://github.com/sindresorhus/globby) - User-friendly glob matching -- [cpy](https://github.com/sindresorhus/cpy) - Copy files -- [cpy-cli](https://github.com/sindresorhus/cpy-cli) - Copy files on the command-line -- [move-file](https://github.com/sindresorhus/move-file) - Move a file - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/md5.js/LICENSE b/truebit-implementation/node_modules/md5.js/LICENSE deleted file mode 100644 index 6f02ae80..00000000 --- a/truebit-implementation/node_modules/md5.js/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Kirill Fomichev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/md5.js/README.md b/truebit-implementation/node_modules/md5.js/README.md deleted file mode 100644 index 36316e1b..00000000 --- a/truebit-implementation/node_modules/md5.js/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# md5.js - -[![NPM Package](https://img.shields.io/npm/v/md5.js.svg?style=flat-square)](https://www.npmjs.org/package/md5.js) -[![Build Status](https://img.shields.io/travis/crypto-browserify/md5.js.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/md5.js) -[![Dependency status](https://img.shields.io/david/crypto-browserify/md5.js.svg?style=flat-square)](https://david-dm.org/crypto-browserify/md5.js#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -Node style `md5` on pure JavaScript. - -From [NIST SP 800-131A][1]: *md5 is no longer acceptable where collision resistance is required such as digital signatures.* - -## Example - -```js -var MD5 = require('md5.js') - -console.log(new MD5().update('42').digest('hex')) -// => a1d0c6e83f027327d8461063f4ac58a6 - -var md5stream = new MD5() -md5stream.end('42') -console.log(md5stream.read().toString('hex')) -// => a1d0c6e83f027327d8461063f4ac58a6 -``` - -## LICENSE [MIT](LICENSE) - -[1]: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar1.pdf diff --git a/truebit-implementation/node_modules/md5.js/index.js b/truebit-implementation/node_modules/md5.js/index.js deleted file mode 100644 index cbfa2e37..00000000 --- a/truebit-implementation/node_modules/md5.js/index.js +++ /dev/null @@ -1,146 +0,0 @@ -'use strict' -var inherits = require('inherits') -var HashBase = require('hash-base') -var Buffer = require('safe-buffer').Buffer - -var ARRAY16 = new Array(16) - -function MD5 () { - HashBase.call(this, 64) - - // state - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 -} - -inherits(MD5, HashBase) - -MD5.prototype._update = function () { - var M = ARRAY16 - for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) - - var a = this._a - var b = this._b - var c = this._c - var d = this._d - - a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) - d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) - c = fnF(c, d, a, b, M[2], 0x242070db, 17) - b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) - a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) - d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) - c = fnF(c, d, a, b, M[6], 0xa8304613, 17) - b = fnF(b, c, d, a, M[7], 0xfd469501, 22) - a = fnF(a, b, c, d, M[8], 0x698098d8, 7) - d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) - c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) - b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) - a = fnF(a, b, c, d, M[12], 0x6b901122, 7) - d = fnF(d, a, b, c, M[13], 0xfd987193, 12) - c = fnF(c, d, a, b, M[14], 0xa679438e, 17) - b = fnF(b, c, d, a, M[15], 0x49b40821, 22) - - a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) - d = fnG(d, a, b, c, M[6], 0xc040b340, 9) - c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) - b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) - a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) - d = fnG(d, a, b, c, M[10], 0x02441453, 9) - c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) - b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) - a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) - d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) - c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) - b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) - a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) - d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) - c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) - b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) - - a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) - d = fnH(d, a, b, c, M[8], 0x8771f681, 11) - c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) - b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) - a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) - d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) - c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) - b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) - a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) - d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) - c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) - b = fnH(b, c, d, a, M[6], 0x04881d05, 23) - a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) - d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) - c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) - b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) - - a = fnI(a, b, c, d, M[0], 0xf4292244, 6) - d = fnI(d, a, b, c, M[7], 0x432aff97, 10) - c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) - b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) - a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) - d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) - c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) - b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) - a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) - d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) - c = fnI(c, d, a, b, M[6], 0xa3014314, 15) - b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) - a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) - d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) - c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) - b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) - - this._a = (this._a + a) | 0 - this._b = (this._b + b) | 0 - this._c = (this._c + c) | 0 - this._d = (this._d + d) | 0 -} - -MD5.prototype._digest = function () { - // create padding and handle blocks - this._block[this._blockOffset++] = 0x80 - if (this._blockOffset > 56) { - this._block.fill(0, this._blockOffset, 64) - this._update() - this._blockOffset = 0 - } - - this._block.fill(0, this._blockOffset, 56) - this._block.writeUInt32LE(this._length[0], 56) - this._block.writeUInt32LE(this._length[1], 60) - this._update() - - // produce result - var buffer = Buffer.allocUnsafe(16) - buffer.writeInt32LE(this._a, 0) - buffer.writeInt32LE(this._b, 4) - buffer.writeInt32LE(this._c, 8) - buffer.writeInt32LE(this._d, 12) - return buffer -} - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) -} - -function fnF (a, b, c, d, m, k, s) { - return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 -} - -function fnG (a, b, c, d, m, k, s) { - return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 -} - -function fnH (a, b, c, d, m, k, s) { - return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 -} - -function fnI (a, b, c, d, m, k, s) { - return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 -} - -module.exports = MD5 diff --git a/truebit-implementation/node_modules/md5.js/package.json b/truebit-implementation/node_modules/md5.js/package.json deleted file mode 100644 index 7181524b..00000000 --- a/truebit-implementation/node_modules/md5.js/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "md5.js@^1.3.4", - "_id": "md5.js@1.3.5", - "_inBundle": false, - "_integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "_location": "/md5.js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "md5.js@^1.3.4", - "name": "md5.js", - "escapedName": "md5.js", - "rawSpec": "^1.3.4", - "saveSpec": null, - "fetchSpec": "^1.3.4" - }, - "_requiredBy": [ - "/create-hash", - "/evp_bytestokey" - ], - "_resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "_shasum": "b5d07b8e3216e3e27cd728d72f70d1e6a342005f", - "_spec": "md5.js@^1.3.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/create-hash", - "author": { - "name": "Kirill Fomichev", - "email": "fanatid@ya.ru", - "url": "https://github.com/fanatid" - }, - "bugs": { - "url": "https://github.com/crypto-browserify/md5.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "deprecated": false, - "description": "node style md5 on pure JavaScript", - "devDependencies": { - "hash-test-vectors": "^1.3.2", - "standard": "^7.0.0", - "tape": "^4.2.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/crypto-browserify/md5.js", - "keywords": [ - "crypto", - "md5" - ], - "license": "MIT", - "main": "index.js", - "name": "md5.js", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/md5.js.git" - }, - "scripts": { - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "node test/*.js" - }, - "version": "1.3.5" -} diff --git a/truebit-implementation/node_modules/media-typer/HISTORY.md b/truebit-implementation/node_modules/media-typer/HISTORY.md deleted file mode 100644 index 62c20031..00000000 --- a/truebit-implementation/node_modules/media-typer/HISTORY.md +++ /dev/null @@ -1,22 +0,0 @@ -0.3.0 / 2014-09-07 -================== - - * Support Node.js 0.6 - * Throw error when parameter format invalid on parse - -0.2.0 / 2014-06-18 -================== - - * Add `typer.format()` to format media types - -0.1.0 / 2014-06-17 -================== - - * Accept `req` as argument to `parse` - * Accept `res` as argument to `parse` - * Parse media type with extra LWS between type and first parameter - -0.0.0 / 2014-06-13 -================== - - * Initial implementation diff --git a/truebit-implementation/node_modules/media-typer/LICENSE b/truebit-implementation/node_modules/media-typer/LICENSE deleted file mode 100644 index b7dce6cf..00000000 --- a/truebit-implementation/node_modules/media-typer/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/media-typer/README.md b/truebit-implementation/node_modules/media-typer/README.md deleted file mode 100644 index d8df6234..00000000 --- a/truebit-implementation/node_modules/media-typer/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# media-typer - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Simple RFC 6838 media type parser - -## Installation - -```sh -$ npm install media-typer -``` - -## API - -```js -var typer = require('media-typer') -``` - -### typer.parse(string) - -```js -var obj = typer.parse('image/svg+xml; charset=utf-8') -``` - -Parse a media type string. This will return an object with the following -properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`): - - - `type`: The type of the media type (always lower case). Example: `'image'` - - - `subtype`: The subtype of the media type (always lower case). Example: `'svg'` - - - `suffix`: The suffix of the media type (always lower case). Example: `'xml'` - - - `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}` - -### typer.parse(req) - -```js -var obj = typer.parse(req) -``` - -Parse the `content-type` header from the given `req`. Short-cut for -`typer.parse(req.headers['content-type'])`. - -### typer.parse(res) - -```js -var obj = typer.parse(res) -``` - -Parse the `content-type` header set on the given `res`. Short-cut for -`typer.parse(res.getHeader('content-type'))`. - -### typer.format(obj) - -```js -var obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'}) -``` - -Format an object into a media type string. This will return a string of the -mime type for the given object. For the properties of the object, see the -documentation for `typer.parse(string)`. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/media-typer.svg?style=flat -[npm-url]: https://npmjs.org/package/media-typer -[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat -[node-version-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/jshttp/media-typer.svg?style=flat -[travis-url]: https://travis-ci.org/jshttp/media-typer -[coveralls-image]: https://img.shields.io/coveralls/jshttp/media-typer.svg?style=flat -[coveralls-url]: https://coveralls.io/r/jshttp/media-typer -[downloads-image]: https://img.shields.io/npm/dm/media-typer.svg?style=flat -[downloads-url]: https://npmjs.org/package/media-typer diff --git a/truebit-implementation/node_modules/media-typer/index.js b/truebit-implementation/node_modules/media-typer/index.js deleted file mode 100644 index 07f7295e..00000000 --- a/truebit-implementation/node_modules/media-typer/index.js +++ /dev/null @@ -1,270 +0,0 @@ -/*! - * media-typer - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -/** - * RegExp to match *( ";" parameter ) in RFC 2616 sec 3.7 - * - * parameter = token "=" ( token | quoted-string ) - * token = 1* - * separators = "(" | ")" | "<" | ">" | "@" - * | "," | ";" | ":" | "\" | <"> - * | "/" | "[" | "]" | "?" | "=" - * | "{" | "}" | SP | HT - * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) - * qdtext = > - * quoted-pair = "\" CHAR - * CHAR = - * TEXT = - * LWS = [CRLF] 1*( SP | HT ) - * CRLF = CR LF - * CR = - * LF = - * SP = - * SHT = - * CTL = - * OCTET = - */ -var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g; -var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/ -var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/ - -/** - * RegExp to match quoted-pair in RFC 2616 - * - * quoted-pair = "\" CHAR - * CHAR = - */ -var qescRegExp = /\\([\u0000-\u007f])/g; - -/** - * RegExp to match chars that must be quoted-pair in RFC 2616 - */ -var quoteRegExp = /([\\"])/g; - -/** - * RegExp to match type in RFC 6838 - * - * type-name = restricted-name - * subtype-name = restricted-name - * restricted-name = restricted-name-first *126restricted-name-chars - * restricted-name-first = ALPHA / DIGIT - * restricted-name-chars = ALPHA / DIGIT / "!" / "#" / - * "$" / "&" / "-" / "^" / "_" - * restricted-name-chars =/ "." ; Characters before first dot always - * ; specify a facet name - * restricted-name-chars =/ "+" ; Characters after last plus always - * ; specify a structured syntax suffix - * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z - * DIGIT = %x30-39 ; 0-9 - */ -var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/ -var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/ -var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/; - -/** - * Module exports. - */ - -exports.format = format -exports.parse = parse - -/** - * Format object to media type. - * - * @param {object} obj - * @return {string} - * @api public - */ - -function format(obj) { - if (!obj || typeof obj !== 'object') { - throw new TypeError('argument obj is required') - } - - var parameters = obj.parameters - var subtype = obj.subtype - var suffix = obj.suffix - var type = obj.type - - if (!type || !typeNameRegExp.test(type)) { - throw new TypeError('invalid type') - } - - if (!subtype || !subtypeNameRegExp.test(subtype)) { - throw new TypeError('invalid subtype') - } - - // format as type/subtype - var string = type + '/' + subtype - - // append +suffix - if (suffix) { - if (!typeNameRegExp.test(suffix)) { - throw new TypeError('invalid suffix') - } - - string += '+' + suffix - } - - // append parameters - if (parameters && typeof parameters === 'object') { - var param - var params = Object.keys(parameters).sort() - - for (var i = 0; i < params.length; i++) { - param = params[i] - - if (!tokenRegExp.test(param)) { - throw new TypeError('invalid parameter name') - } - - string += '; ' + param + '=' + qstring(parameters[param]) - } - } - - return string -} - -/** - * Parse media type to object. - * - * @param {string|object} string - * @return {Object} - * @api public - */ - -function parse(string) { - if (!string) { - throw new TypeError('argument string is required') - } - - // support req/res-like objects as argument - if (typeof string === 'object') { - string = getcontenttype(string) - } - - if (typeof string !== 'string') { - throw new TypeError('argument string is required to be a string') - } - - var index = string.indexOf(';') - var type = index !== -1 - ? string.substr(0, index) - : string - - var key - var match - var obj = splitType(type) - var params = {} - var value - - paramRegExp.lastIndex = index - - while (match = paramRegExp.exec(string)) { - if (match.index !== index) { - throw new TypeError('invalid parameter format') - } - - index += match[0].length - key = match[1].toLowerCase() - value = match[2] - - if (value[0] === '"') { - // remove quotes and escapes - value = value - .substr(1, value.length - 2) - .replace(qescRegExp, '$1') - } - - params[key] = value - } - - if (index !== -1 && index !== string.length) { - throw new TypeError('invalid parameter format') - } - - obj.parameters = params - - return obj -} - -/** - * Get content-type from req/res objects. - * - * @param {object} - * @return {Object} - * @api private - */ - -function getcontenttype(obj) { - if (typeof obj.getHeader === 'function') { - // res-like - return obj.getHeader('content-type') - } - - if (typeof obj.headers === 'object') { - // req-like - return obj.headers && obj.headers['content-type'] - } -} - -/** - * Quote a string if necessary. - * - * @param {string} val - * @return {string} - * @api private - */ - -function qstring(val) { - var str = String(val) - - // no need to quote tokens - if (tokenRegExp.test(str)) { - return str - } - - if (str.length > 0 && !textRegExp.test(str)) { - throw new TypeError('invalid parameter value') - } - - return '"' + str.replace(quoteRegExp, '\\$1') + '"' -} - -/** - * Simply "type/subtype+siffx" into parts. - * - * @param {string} string - * @return {Object} - * @api private - */ - -function splitType(string) { - var match = typeRegExp.exec(string.toLowerCase()) - - if (!match) { - throw new TypeError('invalid media type') - } - - var type = match[1] - var subtype = match[2] - var suffix - - // suffix after last + - var index = subtype.lastIndexOf('+') - if (index !== -1) { - suffix = subtype.substr(index + 1) - subtype = subtype.substr(0, index) - } - - var obj = { - type: type, - subtype: subtype, - suffix: suffix - } - - return obj -} diff --git a/truebit-implementation/node_modules/media-typer/package.json b/truebit-implementation/node_modules/media-typer/package.json deleted file mode 100644 index 439efdce..00000000 --- a/truebit-implementation/node_modules/media-typer/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "media-typer@0.3.0", - "_id": "media-typer@0.3.0", - "_inBundle": false, - "_integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "_location": "/media-typer", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "media-typer@0.3.0", - "name": "media-typer", - "escapedName": "media-typer", - "rawSpec": "0.3.0", - "saveSpec": null, - "fetchSpec": "0.3.0" - }, - "_requiredBy": [ - "/type-is" - ], - "_resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "_shasum": "8710d7af0aa626f8fffa1ce00168545263255748", - "_spec": "media-typer@0.3.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/type-is", - "author": { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - "bugs": { - "url": "https://github.com/jshttp/media-typer/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Simple RFC 6838 media type parser and formatter", - "devDependencies": { - "istanbul": "0.3.2", - "mocha": "~1.21.4", - "should": "~4.0.4" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/media-typer#readme", - "license": "MIT", - "name": "media-typer", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/media-typer.git" - }, - "scripts": { - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "0.3.0" -} diff --git a/truebit-implementation/node_modules/merge-descriptors/HISTORY.md b/truebit-implementation/node_modules/merge-descriptors/HISTORY.md deleted file mode 100644 index 486771f0..00000000 --- a/truebit-implementation/node_modules/merge-descriptors/HISTORY.md +++ /dev/null @@ -1,21 +0,0 @@ -1.0.1 / 2016-01-17 -================== - - * perf: enable strict mode - -1.0.0 / 2015-03-01 -================== - - * Add option to only add new descriptors - * Add simple argument validation - * Add jsdoc to source file - -0.0.2 / 2013-12-14 -================== - - * Move repository to `component` organization - -0.0.1 / 2013-10-29 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/merge-descriptors/LICENSE b/truebit-implementation/node_modules/merge-descriptors/LICENSE deleted file mode 100644 index 274bfd82..00000000 --- a/truebit-implementation/node_modules/merge-descriptors/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/merge-descriptors/README.md b/truebit-implementation/node_modules/merge-descriptors/README.md deleted file mode 100644 index d593c0eb..00000000 --- a/truebit-implementation/node_modules/merge-descriptors/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Merge Descriptors - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Merge objects using descriptors. - -```js -var thing = { - get name() { - return 'jon' - } -} - -var animal = { - -} - -merge(animal, thing) - -animal.name === 'jon' -``` - -## API - -### merge(destination, source) - -Redefines `destination`'s descriptors with `source`'s. - -### merge(destination, source, false) - -Defines `source`'s descriptors on `destination` if `destination` does not have -a descriptor by the same name. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/merge-descriptors.svg -[npm-url]: https://npmjs.org/package/merge-descriptors -[travis-image]: https://img.shields.io/travis/component/merge-descriptors/master.svg -[travis-url]: https://travis-ci.org/component/merge-descriptors -[coveralls-image]: https://img.shields.io/coveralls/component/merge-descriptors/master.svg -[coveralls-url]: https://coveralls.io/r/component/merge-descriptors?branch=master -[downloads-image]: https://img.shields.io/npm/dm/merge-descriptors.svg -[downloads-url]: https://npmjs.org/package/merge-descriptors diff --git a/truebit-implementation/node_modules/merge-descriptors/index.js b/truebit-implementation/node_modules/merge-descriptors/index.js deleted file mode 100644 index 573b132e..00000000 --- a/truebit-implementation/node_modules/merge-descriptors/index.js +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * merge-descriptors - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = merge - -/** - * Module variables. - * @private - */ - -var hasOwnProperty = Object.prototype.hasOwnProperty - -/** - * Merge the property descriptors of `src` into `dest` - * - * @param {object} dest Object to add descriptors to - * @param {object} src Object to clone descriptors from - * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties - * @returns {object} Reference to dest - * @public - */ - -function merge(dest, src, redefine) { - if (!dest) { - throw new TypeError('argument dest is required') - } - - if (!src) { - throw new TypeError('argument src is required') - } - - if (redefine === undefined) { - // Default to true - redefine = true - } - - Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { - if (!redefine && hasOwnProperty.call(dest, name)) { - // Skip desriptor - return - } - - // Copy descriptor - var descriptor = Object.getOwnPropertyDescriptor(src, name) - Object.defineProperty(dest, name, descriptor) - }) - - return dest -} diff --git a/truebit-implementation/node_modules/merge-descriptors/package.json b/truebit-implementation/node_modules/merge-descriptors/package.json deleted file mode 100644 index 3d1f4f01..00000000 --- a/truebit-implementation/node_modules/merge-descriptors/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "merge-descriptors@1.0.1", - "_id": "merge-descriptors@1.0.1", - "_inBundle": false, - "_integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "_location": "/merge-descriptors", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "merge-descriptors@1.0.1", - "name": "merge-descriptors", - "escapedName": "merge-descriptors", - "rawSpec": "1.0.1", - "saveSpec": null, - "fetchSpec": "1.0.1" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "_shasum": "b00aaa556dd8b44568150ec9d1b953f3f90cbb61", - "_spec": "merge-descriptors@1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/component/merge-descriptors/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Mike Grabowski", - "email": "grabbou@gmail.com" - } - ], - "deprecated": false, - "description": "Merge objects using descriptors", - "devDependencies": { - "istanbul": "0.4.1", - "mocha": "1.21.5" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "index.js" - ], - "homepage": "https://github.com/component/merge-descriptors#readme", - "license": "MIT", - "name": "merge-descriptors", - "repository": { - "type": "git", - "url": "git+https://github.com/component/merge-descriptors.git" - }, - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/methods/HISTORY.md b/truebit-implementation/node_modules/methods/HISTORY.md deleted file mode 100644 index c0ecf072..00000000 --- a/truebit-implementation/node_modules/methods/HISTORY.md +++ /dev/null @@ -1,29 +0,0 @@ -1.1.2 / 2016-01-17 -================== - - * perf: enable strict mode - -1.1.1 / 2014-12-30 -================== - - * Improve `browserify` support - -1.1.0 / 2014-07-05 -================== - - * Add `CONNECT` method - -1.0.1 / 2014-06-02 -================== - - * Fix module to work with harmony transform - -1.0.0 / 2014-05-08 -================== - - * Add `PURGE` method - -0.1.0 / 2013-10-28 -================== - - * Add `http.METHODS` support diff --git a/truebit-implementation/node_modules/methods/LICENSE b/truebit-implementation/node_modules/methods/LICENSE deleted file mode 100644 index 220dc1a2..00000000 --- a/truebit-implementation/node_modules/methods/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2013-2014 TJ Holowaychuk -Copyright (c) 2015-2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/methods/README.md b/truebit-implementation/node_modules/methods/README.md deleted file mode 100644 index 672a32bf..00000000 --- a/truebit-implementation/node_modules/methods/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# Methods - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -HTTP verbs that Node.js core's HTTP parser supports. - -This module provides an export that is just like `http.METHODS` from Node.js core, -with the following differences: - - * All method names are lower-cased. - * Contains a fallback list of methods for Node.js versions that do not have a - `http.METHODS` export (0.10 and lower). - * Provides the fallback list when using tools like `browserify` without pulling - in the `http` shim module. - -## Install - -```bash -$ npm install methods -``` - -## API - -```js -var methods = require('methods') -``` - -### methods - -This is an array of lower-cased method names that Node.js supports. If Node.js -provides the `http.METHODS` export, then this is the same array lower-cased, -otherwise it is a snapshot of the verbs from Node.js 0.10. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat -[npm-url]: https://npmjs.org/package/methods -[node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat -[travis-url]: https://travis-ci.org/jshttp/methods -[coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat -[coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master -[downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat -[downloads-url]: https://npmjs.org/package/methods diff --git a/truebit-implementation/node_modules/methods/index.js b/truebit-implementation/node_modules/methods/index.js deleted file mode 100644 index 667a50bd..00000000 --- a/truebit-implementation/node_modules/methods/index.js +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * methods - * Copyright(c) 2013-2014 TJ Holowaychuk - * Copyright(c) 2015-2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var http = require('http'); - -/** - * Module exports. - * @public - */ - -module.exports = getCurrentNodeMethods() || getBasicNodeMethods(); - -/** - * Get the current Node.js methods. - * @private - */ - -function getCurrentNodeMethods() { - return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) { - return method.toLowerCase(); - }); -} - -/** - * Get the "basic" Node.js methods, a snapshot from Node.js 0.10. - * @private - */ - -function getBasicNodeMethods() { - return [ - 'get', - 'post', - 'put', - 'head', - 'delete', - 'options', - 'trace', - 'copy', - 'lock', - 'mkcol', - 'move', - 'purge', - 'propfind', - 'proppatch', - 'unlock', - 'report', - 'mkactivity', - 'checkout', - 'merge', - 'm-search', - 'notify', - 'subscribe', - 'unsubscribe', - 'patch', - 'search', - 'connect' - ]; -} diff --git a/truebit-implementation/node_modules/methods/package.json b/truebit-implementation/node_modules/methods/package.json deleted file mode 100644 index a6bcdbc9..00000000 --- a/truebit-implementation/node_modules/methods/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "methods@~1.1.2", - "_id": "methods@1.1.2", - "_inBundle": false, - "_integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "_location": "/methods", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "methods@~1.1.2", - "name": "methods", - "escapedName": "methods", - "rawSpec": "~1.1.2", - "saveSpec": null, - "fetchSpec": "~1.1.2" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "_shasum": "5529a4d67654134edcc5266656835b0f851afcee", - "_spec": "methods@~1.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "browser": { - "http": false - }, - "bugs": { - "url": "https://github.com/jshttp/methods/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - } - ], - "deprecated": false, - "description": "HTTP methods that node supports", - "devDependencies": { - "istanbul": "0.4.1", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "index.js", - "HISTORY.md", - "LICENSE" - ], - "homepage": "https://github.com/jshttp/methods#readme", - "keywords": [ - "http", - "methods" - ], - "license": "MIT", - "name": "methods", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/methods.git" - }, - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.1.2" -} diff --git a/truebit-implementation/node_modules/miller-rabin/.npmignore b/truebit-implementation/node_modules/miller-rabin/.npmignore deleted file mode 100644 index 1ca95717..00000000 --- a/truebit-implementation/node_modules/miller-rabin/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log diff --git a/truebit-implementation/node_modules/miller-rabin/1.js b/truebit-implementation/node_modules/miller-rabin/1.js deleted file mode 100644 index 92953789..00000000 --- a/truebit-implementation/node_modules/miller-rabin/1.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const BN = require('bn.js'); - -const p = new BN('2e1b162f326430f5ac6af10f96b2a8350e01675d22324c9f', 'hex'); - -console.log(p.bitLength()); diff --git a/truebit-implementation/node_modules/miller-rabin/README.md b/truebit-implementation/node_modules/miller-rabin/README.md deleted file mode 100644 index e9d76f67..00000000 --- a/truebit-implementation/node_modules/miller-rabin/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Miller-Rabin - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2014. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/miller-rabin/bin/miller-rabin b/truebit-implementation/node_modules/miller-rabin/bin/miller-rabin deleted file mode 100755 index 2e18dfd5..00000000 --- a/truebit-implementation/node_modules/miller-rabin/bin/miller-rabin +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -var bn = require('bn.js'); -var fs = require('fs'); -var mr = require('../').create(); - -var num = ''; -if (process.argv[2]) { - num += fs.readFileSync(process.argv[2]); - start(num); -} else { - process.stdin.on('data', function(chunk) { - num += chunk.toString().replace(/[^0-9a-f]/gi, ''); - }); - process.stdin.once('end', function() { - start(num); - }); -} - -function start(text) { - var num = new bn(text, 16); - - var divisor = mr.getDivisor(num); - if (!divisor) - process.exit(1); - if (divisor.cmpn(1) === 0) - process.exit(0); - - console.log(divisor.toString(16)); -} diff --git a/truebit-implementation/node_modules/miller-rabin/lib/mr.js b/truebit-implementation/node_modules/miller-rabin/lib/mr.js deleted file mode 100644 index 60d2a8ef..00000000 --- a/truebit-implementation/node_modules/miller-rabin/lib/mr.js +++ /dev/null @@ -1,115 +0,0 @@ -var bn = require('bn.js'); -var brorand = require('brorand'); - -function MillerRabin(rand) { - this.rand = rand || new brorand.Rand(); -} -module.exports = MillerRabin; - -MillerRabin.create = function create(rand) { - return new MillerRabin(rand); -}; - -MillerRabin.prototype._randbelow = function _randbelow(n) { - var len = n.bitLength(); - var min_bytes = Math.ceil(len / 8); - - // Generage random bytes until a number less than n is found. - // This ensures that 0..n-1 have an equal probability of being selected. - do - var a = new bn(this.rand.generate(min_bytes)); - while (a.cmp(n) >= 0); - - return a; -}; - -MillerRabin.prototype._randrange = function _randrange(start, stop) { - // Generate a random number greater than or equal to start and less than stop. - var size = stop.sub(start); - return start.add(this._randbelow(size)); -}; - -MillerRabin.prototype.test = function test(n, k, cb) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); - - if (!k) - k = Math.max(1, (len / 48) | 0); - - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); - - var rn1 = n1.toRed(red); - - var prime = true; - for (; k > 0; k--) { - var a = this._randrange(new bn(2), n1); - if (cb) - cb(a); - - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; - - for (var i = 1; i < s; i++) { - x = x.redSqr(); - - if (x.cmp(rone) === 0) - return false; - if (x.cmp(rn1) === 0) - break; - } - - if (i === s) - return false; - } - - return prime; -}; - -MillerRabin.prototype.getDivisor = function getDivisor(n, k) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); - - if (!k) - k = Math.max(1, (len / 48) | 0); - - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); - - var rn1 = n1.toRed(red); - - for (; k > 0; k--) { - var a = this._randrange(new bn(2), n1); - - var g = n.gcd(a); - if (g.cmpn(1) !== 0) - return g; - - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; - - for (var i = 1; i < s; i++) { - x = x.redSqr(); - - if (x.cmp(rone) === 0) - return x.fromRed().subn(1).gcd(n); - if (x.cmp(rn1) === 0) - break; - } - - if (i === s) { - x = x.redSqr(); - return x.fromRed().subn(1).gcd(n); - } - } - - return false; -}; diff --git a/truebit-implementation/node_modules/miller-rabin/package.json b/truebit-implementation/node_modules/miller-rabin/package.json deleted file mode 100644 index 9d55b960..00000000 --- a/truebit-implementation/node_modules/miller-rabin/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "miller-rabin@^4.0.0", - "_id": "miller-rabin@4.0.1", - "_inBundle": false, - "_integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "_location": "/miller-rabin", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "miller-rabin@^4.0.0", - "name": "miller-rabin", - "escapedName": "miller-rabin", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/diffie-hellman" - ], - "_resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "_shasum": "f080351c865b0dc562a8462966daa53543c78a4d", - "_spec": "miller-rabin@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/diffie-hellman", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - }, - "bugs": { - "url": "https://github.com/indutny/miller-rabin/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "deprecated": false, - "description": "Miller Rabin algorithm for primality test", - "devDependencies": { - "mocha": "^2.0.1" - }, - "homepage": "https://github.com/indutny/miller-rabin", - "keywords": [ - "prime", - "miller-rabin", - "bignumber" - ], - "license": "MIT", - "main": "lib/mr.js", - "name": "miller-rabin", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/miller-rabin.git" - }, - "scripts": { - "test": "mocha --reporter=spec test/**/*-test.js" - }, - "version": "4.0.1" -} diff --git a/truebit-implementation/node_modules/miller-rabin/test.js b/truebit-implementation/node_modules/miller-rabin/test.js deleted file mode 100644 index 74b2ccfe..00000000 --- a/truebit-implementation/node_modules/miller-rabin/test.js +++ /dev/null @@ -1,25 +0,0 @@ -var mr = require('./').create(); -var BN = require('bn.js'); - -var p = new BN( - `00:d3:99:af:83:02:de:91:f8:cc:1b:4e:2e:e0:18: - b3:0a:41:a4:77:98:d2:ad:66:0f:dc:17:85:ca:58: - b4:e4:88:55:c5:0a:82:08:7c:fb:70:a9:41:30:be: - af:50:d2:ce:93:cd:46:83:47:6e:c0:51:a7:10:e6: - 66:d1:08:e8:3d:b8:ce:fe:3e:4e:48:96:82:15:f7: - 2c:83:80:05:f2:14:3a:a4:5a:44:2b:22:22:67:e5: - 21:23:b7:cb:0f:71:5b:12:8b:3d:81:f6:5e:dc:99: - 8f:f9:80:38:75:57:c2:dd:9b:7a:b2:24:97:42:60: - 92:1f:1d:8a:68:c5:b8:7f:5d:c0:53:3d:15:f2:95: - b8:1d:8b:c2:e6:ca:a6:4c:bd:bf:88:9f:3e:d3:d7: - 24:18:27:62:6e:d0:52:75:68:9f:2a:c9:39:af:95: - 55:bb:11:08:dc:51:e9:8b:5a:38:e0:c0:e9:d8:a6: - 71:a5:03:f9:a7:2c:dd:1a:63:8e:7f:f0:36:68:a0: - 44:f8:09:48:3d:bd:de:b3:2d:3a:2f:73:88:8a:0c: - e2:7f:9b:dd:e8:c2:0e:ee:21:e4:a7:f9:4d:46:2f: - a7:f6:6d:fa:88:2e:95:60:ac:53:2e:45:a2:9d:9e: - c4:80:fc:c7:49:c9:42:bb:2b:66:f6:14:6d:7f:03: - 4e:f3`.replace(/[^a-f0-9]/g, ''), 16); -console.time(); -mr.test(p); -console.timeEnd(); diff --git a/truebit-implementation/node_modules/miller-rabin/test/api-test.js b/truebit-implementation/node_modules/miller-rabin/test/api-test.js deleted file mode 100644 index dee094d9..00000000 --- a/truebit-implementation/node_modules/miller-rabin/test/api-test.js +++ /dev/null @@ -1,18 +0,0 @@ -var assert = require('assert'); -var mr = require('../').create(); -var bn = require('bn.js'); - -describe('Miller-Rabin', function() { - it('should test number for primality', function() { - assert(!mr.test(new bn(221))); - assert(mr.test(new bn(257))); - - var p = new bn('dba8191813fe8f51eaae1de70213aafede8f323f95f32cff' + - '8b64ebada275cfb18a446a0150e5fdaee246244c5f002ce0' + - 'aca97584be1745f2dd1eea2849c52aac8c4b5fb78a1c4da7' + - '052774338d3310a6e020c46168cb1f94014e9312511cc4fb' + - '79d695bb732449f0e015745b86bfa371dc6ca7386e9c7309' + - '5549c2e4b8002873', 16); - assert(mr.test(p)); - }); -}); diff --git a/truebit-implementation/node_modules/mime-db/HISTORY.md b/truebit-implementation/node_modules/mime-db/HISTORY.md deleted file mode 100644 index d454eb34..00000000 --- a/truebit-implementation/node_modules/mime-db/HISTORY.md +++ /dev/null @@ -1,397 +0,0 @@ -1.37.0 / 2018-10-19 -=================== - - * Add extensions to HEIC image types - * Add new upstream MIME types - -1.36.0 / 2018-08-20 -=================== - - * Add Apple file extensions from IANA - * Add extensions from IANA for `image/*` types - * Add new upstream MIME types - -1.35.0 / 2018-07-15 -=================== - - * Add extension `.owl` to `application/rdf+xml` - * Add new upstream MIME types - - Removes extension `.woff` from `application/font-woff` - -1.34.0 / 2018-06-03 -=================== - - * Add extension `.csl` to `application/vnd.citationstyles.style+xml` - * Add extension `.es` to `application/ecmascript` - * Add new upstream MIME types - * Add `UTF-8` as default charset for `text/turtle` - * Mark all XML-derived types as compressible - -1.33.0 / 2018-02-15 -=================== - - * Add extensions from IANA for `message/*` types - * Add new upstream MIME types - * Fix some incorrect OOXML types - * Remove `application/font-woff2` - -1.32.0 / 2017-11-29 -=================== - - * Add new upstream MIME types - * Update `text/hjson` to registered `application/hjson` - * Add `text/shex` with extension `.shex` - -1.31.0 / 2017-10-25 -=================== - - * Add `application/raml+yaml` with extension `.raml` - * Add `application/wasm` with extension `.wasm` - * Add new `font` type from IANA - * Add new upstream font extensions - * Add new upstream MIME types - * Add extensions for JPEG-2000 images - -1.30.0 / 2017-08-27 -=================== - - * Add `application/vnd.ms-outlook` - * Add `application/x-arj` - * Add extension `.mjs` to `application/javascript` - * Add glTF types and extensions - * Add new upstream MIME types - * Add `text/x-org` - * Add VirtualBox MIME types - * Fix `source` records for `video/*` types that are IANA - * Update `font/opentype` to registered `font/otf` - -1.29.0 / 2017-07-10 -=================== - - * Add `application/fido.trusted-apps+json` - * Add extension `.wadl` to `application/vnd.sun.wadl+xml` - * Add new upstream MIME types - * Add `UTF-8` as default charset for `text/css` - -1.28.0 / 2017-05-14 -=================== - - * Add new upstream MIME types - * Add extension `.gz` to `application/gzip` - * Update extensions `.md` and `.markdown` to be `text/markdown` - -1.27.0 / 2017-03-16 -=================== - - * Add new upstream MIME types - * Add `image/apng` with extension `.apng` - -1.26.0 / 2017-01-14 -=================== - - * Add new upstream MIME types - * Add extension `.geojson` to `application/geo+json` - -1.25.0 / 2016-11-11 -=================== - - * Add new upstream MIME types - -1.24.0 / 2016-09-18 -=================== - - * Add `audio/mp3` - * Add new upstream MIME types - -1.23.0 / 2016-05-01 -=================== - - * Add new upstream MIME types - * Add extension `.3gpp` to `audio/3gpp` - -1.22.0 / 2016-02-15 -=================== - - * Add `text/slim` - * Add extension `.rng` to `application/xml` - * Add new upstream MIME types - * Fix extension of `application/dash+xml` to be `.mpd` - * Update primary extension to `.m4a` for `audio/mp4` - -1.21.0 / 2016-01-06 -=================== - - * Add Google document types - * Add new upstream MIME types - -1.20.0 / 2015-11-10 -=================== - - * Add `text/x-suse-ymp` - * Add new upstream MIME types - -1.19.0 / 2015-09-17 -=================== - - * Add `application/vnd.apple.pkpass` - * Add new upstream MIME types - -1.18.0 / 2015-09-03 -=================== - - * Add new upstream MIME types - -1.17.0 / 2015-08-13 -=================== - - * Add `application/x-msdos-program` - * Add `audio/g711-0` - * Add `image/vnd.mozilla.apng` - * Add extension `.exe` to `application/x-msdos-program` - -1.16.0 / 2015-07-29 -=================== - - * Add `application/vnd.uri-map` - -1.15.0 / 2015-07-13 -=================== - - * Add `application/x-httpd-php` - -1.14.0 / 2015-06-25 -=================== - - * Add `application/scim+json` - * Add `application/vnd.3gpp.ussd+xml` - * Add `application/vnd.biopax.rdf+xml` - * Add `text/x-processing` - -1.13.0 / 2015-06-07 -=================== - - * Add nginx as a source - * Add `application/x-cocoa` - * Add `application/x-java-archive-diff` - * Add `application/x-makeself` - * Add `application/x-perl` - * Add `application/x-pilot` - * Add `application/x-redhat-package-manager` - * Add `application/x-sea` - * Add `audio/x-m4a` - * Add `audio/x-realaudio` - * Add `image/x-jng` - * Add `text/mathml` - -1.12.0 / 2015-06-05 -=================== - - * Add `application/bdoc` - * Add `application/vnd.hyperdrive+json` - * Add `application/x-bdoc` - * Add extension `.rtf` to `text/rtf` - -1.11.0 / 2015-05-31 -=================== - - * Add `audio/wav` - * Add `audio/wave` - * Add extension `.litcoffee` to `text/coffeescript` - * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` - * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` - -1.10.0 / 2015-05-19 -=================== - - * Add `application/vnd.balsamiq.bmpr` - * Add `application/vnd.microsoft.portable-executable` - * Add `application/x-ns-proxy-autoconfig` - -1.9.1 / 2015-04-19 -================== - - * Remove `.json` extension from `application/manifest+json` - - This is causing bugs downstream - -1.9.0 / 2015-04-19 -================== - - * Add `application/manifest+json` - * Add `application/vnd.micro+json` - * Add `image/vnd.zbrush.pcx` - * Add `image/x-ms-bmp` - -1.8.0 / 2015-03-13 -================== - - * Add `application/vnd.citationstyles.style+xml` - * Add `application/vnd.fastcopy-disk-image` - * Add `application/vnd.gov.sk.xmldatacontainer+xml` - * Add extension `.jsonld` to `application/ld+json` - -1.7.0 / 2015-02-08 -================== - - * Add `application/vnd.gerber` - * Add `application/vnd.msa-disk-image` - -1.6.1 / 2015-02-05 -================== - - * Community extensions ownership transferred from `node-mime` - -1.6.0 / 2015-01-29 -================== - - * Add `application/jose` - * Add `application/jose+json` - * Add `application/json-seq` - * Add `application/jwk+json` - * Add `application/jwk-set+json` - * Add `application/jwt` - * Add `application/rdap+json` - * Add `application/vnd.gov.sk.e-form+xml` - * Add `application/vnd.ims.imsccv1p3` - -1.5.0 / 2014-12-30 -================== - - * Add `application/vnd.oracle.resource+json` - * Fix various invalid MIME type entries - - `application/mbox+xml` - - `application/oscp-response` - - `application/vwg-multiplexed` - - `audio/g721` - -1.4.0 / 2014-12-21 -================== - - * Add `application/vnd.ims.imsccv1p2` - * Fix various invalid MIME type entries - - `application/vnd-acucobol` - - `application/vnd-curl` - - `application/vnd-dart` - - `application/vnd-dxr` - - `application/vnd-fdf` - - `application/vnd-mif` - - `application/vnd-sema` - - `application/vnd-wap-wmlc` - - `application/vnd.adobe.flash-movie` - - `application/vnd.dece-zip` - - `application/vnd.dvb_service` - - `application/vnd.micrografx-igx` - - `application/vnd.sealed-doc` - - `application/vnd.sealed-eml` - - `application/vnd.sealed-mht` - - `application/vnd.sealed-ppt` - - `application/vnd.sealed-tiff` - - `application/vnd.sealed-xls` - - `application/vnd.sealedmedia.softseal-html` - - `application/vnd.sealedmedia.softseal-pdf` - - `application/vnd.wap-slc` - - `application/vnd.wap-wbxml` - - `audio/vnd.sealedmedia.softseal-mpeg` - - `image/vnd-djvu` - - `image/vnd-svf` - - `image/vnd-wap-wbmp` - - `image/vnd.sealed-png` - - `image/vnd.sealedmedia.softseal-gif` - - `image/vnd.sealedmedia.softseal-jpg` - - `model/vnd-dwf` - - `model/vnd.parasolid.transmit-binary` - - `model/vnd.parasolid.transmit-text` - - `text/vnd-a` - - `text/vnd-curl` - - `text/vnd.wap-wml` - * Remove example template MIME types - - `application/example` - - `audio/example` - - `image/example` - - `message/example` - - `model/example` - - `multipart/example` - - `text/example` - - `video/example` - -1.3.1 / 2014-12-16 -================== - - * Fix missing extensions - - `application/json5` - - `text/hjson` - -1.3.0 / 2014-12-07 -================== - - * Add `application/a2l` - * Add `application/aml` - * Add `application/atfx` - * Add `application/atxml` - * Add `application/cdfx+xml` - * Add `application/dii` - * Add `application/json5` - * Add `application/lxf` - * Add `application/mf4` - * Add `application/vnd.apache.thrift.compact` - * Add `application/vnd.apache.thrift.json` - * Add `application/vnd.coffeescript` - * Add `application/vnd.enphase.envoy` - * Add `application/vnd.ims.imsccv1p1` - * Add `text/csv-schema` - * Add `text/hjson` - * Add `text/markdown` - * Add `text/yaml` - -1.2.0 / 2014-11-09 -================== - - * Add `application/cea` - * Add `application/dit` - * Add `application/vnd.gov.sk.e-form+zip` - * Add `application/vnd.tmd.mediaflex.api+xml` - * Type `application/epub+zip` is now IANA-registered - -1.1.2 / 2014-10-23 -================== - - * Rebuild database for `application/x-www-form-urlencoded` change - -1.1.1 / 2014-10-20 -================== - - * Mark `application/x-www-form-urlencoded` as compressible. - -1.1.0 / 2014-09-28 -================== - - * Add `application/font-woff2` - -1.0.3 / 2014-09-25 -================== - - * Fix engine requirement in package - -1.0.2 / 2014-09-25 -================== - - * Add `application/coap-group+json` - * Add `application/dcd` - * Add `application/vnd.apache.thrift.binary` - * Add `image/vnd.tencent.tap` - * Mark all JSON-derived types as compressible - * Update `text/vtt` data - -1.0.1 / 2014-08-30 -================== - - * Fix extension ordering - -1.0.0 / 2014-08-30 -================== - - * Add `application/atf` - * Add `application/merge-patch+json` - * Add `multipart/x-mixed-replace` - * Add `source: 'apache'` metadata - * Add `source: 'iana'` metadata - * Remove badly-assumed charset data diff --git a/truebit-implementation/node_modules/mime-db/LICENSE b/truebit-implementation/node_modules/mime-db/LICENSE deleted file mode 100644 index a7ae8ee9..00000000 --- a/truebit-implementation/node_modules/mime-db/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/mime-db/README.md b/truebit-implementation/node_modules/mime-db/README.md deleted file mode 100644 index 48a9e3a0..00000000 --- a/truebit-implementation/node_modules/mime-db/README.md +++ /dev/null @@ -1,94 +0,0 @@ -# mime-db - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] -[![Coverage Status][coveralls-image]][coveralls-url] - -This is a database of all mime types. -It consists of a single, public JSON file and does not include any logic, -allowing it to remain as un-opinionated as possible with an API. -It aggregates data from the following sources: - -- http://www.iana.org/assignments/media-types/media-types.xhtml -- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types - -## Installation - -```bash -npm install mime-db -``` - -### Database Download - -If you're crazy enough to use this in the browser, you can just grab the -JSON file using [RawGit](https://rawgit.com/). It is recommended to replace -`master` with [a release tag](https://github.com/jshttp/mime-db/tags) as the -JSON format may change in the future. - -``` -https://cdn.rawgit.com/jshttp/mime-db/master/db.json -``` - -## Usage - -```js -var db = require('mime-db'); - -// grab data on .js files -var data = db['application/javascript']; -``` - -## Data Structure - -The JSON file is a map lookup for lowercased mime types. -Each mime type has the following properties: - -- `.source` - where the mime type is defined. - If not set, it's probably a custom media type. - - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) - - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) - - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) -- `.extensions[]` - known extensions associated with this mime type. -- `.compressible` - whether a file of this type can be gzipped. -- `.charset` - the default charset associated with this type, if any. - -If unknown, every property could be `undefined`. - -## Contributing - -To edit the database, only make PRs against `src/custom.json` or -`src/custom-suffix.json`. - -The `src/custom.json` file is a JSON object with the MIME type as the keys -and the values being an object with the following keys: - -- `compressible` - leave out if you don't know, otherwise `true`/`false` to - indicate whether the data represented by the type is typically compressible. -- `extensions` - include an array of file extensions that are associated with - the type. -- `notes` - human-readable notes about the type, typically what the type is. -- `sources` - include an array of URLs of where the MIME type and the associated - extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); - links to type aggregating sites and Wikipedia are _not acceptable_. - -To update the build, run `npm run build`. - -## Adding Custom Media Types - -The best way to get new media types included in this library is to register -them with the IANA. The community registration procedure is outlined in -[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types -registered with the IANA are automatically pulled into this library. - -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master -[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master -[node-image]: https://badgen.net/npm/node/mime-db -[node-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/mime-db -[npm-url]: https://npmjs.org/package/mime-db -[npm-version-image]: https://badgen.net/npm/v/mime-db -[travis-image]: https://badgen.net/travis/jshttp/mime-db/master -[travis-url]: https://travis-ci.org/jshttp/mime-db diff --git a/truebit-implementation/node_modules/mime-db/db.json b/truebit-implementation/node_modules/mime-db/db.json deleted file mode 100644 index 81f614c6..00000000 --- a/truebit-implementation/node_modules/mime-db/db.json +++ /dev/null @@ -1,7688 +0,0 @@ -{ - "application/1d-interleaved-parityfec": { - "source": "iana" - }, - "application/3gpdash-qoe-report+xml": { - "source": "iana", - "compressible": true - }, - "application/3gpp-ims+xml": { - "source": "iana", - "compressible": true - }, - "application/a2l": { - "source": "iana" - }, - "application/activemessage": { - "source": "iana" - }, - "application/activity+json": { - "source": "iana", - "compressible": true - }, - "application/alto-costmap+json": { - "source": "iana", - "compressible": true - }, - "application/alto-costmapfilter+json": { - "source": "iana", - "compressible": true - }, - "application/alto-directory+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointcost+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointcostparams+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointprop+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointpropparams+json": { - "source": "iana", - "compressible": true - }, - "application/alto-error+json": { - "source": "iana", - "compressible": true - }, - "application/alto-networkmap+json": { - "source": "iana", - "compressible": true - }, - "application/alto-networkmapfilter+json": { - "source": "iana", - "compressible": true - }, - "application/aml": { - "source": "iana" - }, - "application/andrew-inset": { - "source": "iana", - "extensions": ["ez"] - }, - "application/applefile": { - "source": "iana" - }, - "application/applixware": { - "source": "apache", - "extensions": ["aw"] - }, - "application/atf": { - "source": "iana" - }, - "application/atfx": { - "source": "iana" - }, - "application/atom+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atom"] - }, - "application/atomcat+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atomcat"] - }, - "application/atomdeleted+xml": { - "source": "iana", - "compressible": true - }, - "application/atomicmail": { - "source": "iana" - }, - "application/atomsvc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atomsvc"] - }, - "application/atxml": { - "source": "iana" - }, - "application/auth-policy+xml": { - "source": "iana", - "compressible": true - }, - "application/bacnet-xdd+zip": { - "source": "iana", - "compressible": false - }, - "application/batch-smtp": { - "source": "iana" - }, - "application/bdoc": { - "compressible": false, - "extensions": ["bdoc"] - }, - "application/beep+xml": { - "source": "iana", - "compressible": true - }, - "application/calendar+json": { - "source": "iana", - "compressible": true - }, - "application/calendar+xml": { - "source": "iana", - "compressible": true - }, - "application/call-completion": { - "source": "iana" - }, - "application/cals-1840": { - "source": "iana" - }, - "application/cbor": { - "source": "iana" - }, - "application/cccex": { - "source": "iana" - }, - "application/ccmp+xml": { - "source": "iana", - "compressible": true - }, - "application/ccxml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ccxml"] - }, - "application/cdfx+xml": { - "source": "iana", - "compressible": true - }, - "application/cdmi-capability": { - "source": "iana", - "extensions": ["cdmia"] - }, - "application/cdmi-container": { - "source": "iana", - "extensions": ["cdmic"] - }, - "application/cdmi-domain": { - "source": "iana", - "extensions": ["cdmid"] - }, - "application/cdmi-object": { - "source": "iana", - "extensions": ["cdmio"] - }, - "application/cdmi-queue": { - "source": "iana", - "extensions": ["cdmiq"] - }, - "application/cdni": { - "source": "iana" - }, - "application/cea": { - "source": "iana" - }, - "application/cea-2018+xml": { - "source": "iana", - "compressible": true - }, - "application/cellml+xml": { - "source": "iana", - "compressible": true - }, - "application/cfw": { - "source": "iana" - }, - "application/clue_info+xml": { - "source": "iana", - "compressible": true - }, - "application/cms": { - "source": "iana" - }, - "application/cnrp+xml": { - "source": "iana", - "compressible": true - }, - "application/coap-group+json": { - "source": "iana", - "compressible": true - }, - "application/coap-payload": { - "source": "iana" - }, - "application/commonground": { - "source": "iana" - }, - "application/conference-info+xml": { - "source": "iana", - "compressible": true - }, - "application/cose": { - "source": "iana" - }, - "application/cose-key": { - "source": "iana" - }, - "application/cose-key-set": { - "source": "iana" - }, - "application/cpl+xml": { - "source": "iana", - "compressible": true - }, - "application/csrattrs": { - "source": "iana" - }, - "application/csta+xml": { - "source": "iana", - "compressible": true - }, - "application/cstadata+xml": { - "source": "iana", - "compressible": true - }, - "application/csvm+json": { - "source": "iana", - "compressible": true - }, - "application/cu-seeme": { - "source": "apache", - "extensions": ["cu"] - }, - "application/cwt": { - "source": "iana" - }, - "application/cybercash": { - "source": "iana" - }, - "application/dart": { - "compressible": true - }, - "application/dash+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mpd"] - }, - "application/dashdelta": { - "source": "iana" - }, - "application/davmount+xml": { - "source": "iana", - "compressible": true, - "extensions": ["davmount"] - }, - "application/dca-rft": { - "source": "iana" - }, - "application/dcd": { - "source": "iana" - }, - "application/dec-dx": { - "source": "iana" - }, - "application/dialog-info+xml": { - "source": "iana", - "compressible": true - }, - "application/dicom": { - "source": "iana" - }, - "application/dicom+json": { - "source": "iana", - "compressible": true - }, - "application/dicom+xml": { - "source": "iana", - "compressible": true - }, - "application/dii": { - "source": "iana" - }, - "application/dit": { - "source": "iana" - }, - "application/dns": { - "source": "iana" - }, - "application/dns+json": { - "source": "iana", - "compressible": true - }, - "application/dns-message": { - "source": "iana" - }, - "application/docbook+xml": { - "source": "apache", - "compressible": true, - "extensions": ["dbk"] - }, - "application/dskpp+xml": { - "source": "iana", - "compressible": true - }, - "application/dssc+der": { - "source": "iana", - "extensions": ["dssc"] - }, - "application/dssc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xdssc"] - }, - "application/dvcs": { - "source": "iana" - }, - "application/ecmascript": { - "source": "iana", - "compressible": true, - "extensions": ["ecma","es"] - }, - "application/edi-consent": { - "source": "iana" - }, - "application/edi-x12": { - "source": "iana", - "compressible": false - }, - "application/edifact": { - "source": "iana", - "compressible": false - }, - "application/efi": { - "source": "iana" - }, - "application/emergencycalldata.comment+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.control+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.deviceinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.ecall.msd": { - "source": "iana" - }, - "application/emergencycalldata.providerinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.serviceinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.subscriberinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.veds+xml": { - "source": "iana", - "compressible": true - }, - "application/emma+xml": { - "source": "iana", - "compressible": true, - "extensions": ["emma"] - }, - "application/emotionml+xml": { - "source": "iana", - "compressible": true - }, - "application/encaprtp": { - "source": "iana" - }, - "application/epp+xml": { - "source": "iana", - "compressible": true - }, - "application/epub+zip": { - "source": "iana", - "compressible": false, - "extensions": ["epub"] - }, - "application/eshop": { - "source": "iana" - }, - "application/exi": { - "source": "iana", - "extensions": ["exi"] - }, - "application/fastinfoset": { - "source": "iana" - }, - "application/fastsoap": { - "source": "iana" - }, - "application/fdt+xml": { - "source": "iana", - "compressible": true - }, - "application/fhir+json": { - "source": "iana", - "compressible": true - }, - "application/fhir+xml": { - "source": "iana", - "compressible": true - }, - "application/fido.trusted-apps+json": { - "compressible": true - }, - "application/fits": { - "source": "iana" - }, - "application/font-sfnt": { - "source": "iana" - }, - "application/font-tdpfr": { - "source": "iana", - "extensions": ["pfr"] - }, - "application/font-woff": { - "source": "iana", - "compressible": false - }, - "application/framework-attributes+xml": { - "source": "iana", - "compressible": true - }, - "application/geo+json": { - "source": "iana", - "compressible": true, - "extensions": ["geojson"] - }, - "application/geo+json-seq": { - "source": "iana" - }, - "application/geopackage+sqlite3": { - "source": "iana" - }, - "application/geoxacml+xml": { - "source": "iana", - "compressible": true - }, - "application/gltf-buffer": { - "source": "iana" - }, - "application/gml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["gml"] - }, - "application/gpx+xml": { - "source": "apache", - "compressible": true, - "extensions": ["gpx"] - }, - "application/gxf": { - "source": "apache", - "extensions": ["gxf"] - }, - "application/gzip": { - "source": "iana", - "compressible": false, - "extensions": ["gz"] - }, - "application/h224": { - "source": "iana" - }, - "application/held+xml": { - "source": "iana", - "compressible": true - }, - "application/hjson": { - "extensions": ["hjson"] - }, - "application/http": { - "source": "iana" - }, - "application/hyperstudio": { - "source": "iana", - "extensions": ["stk"] - }, - "application/ibe-key-request+xml": { - "source": "iana", - "compressible": true - }, - "application/ibe-pkg-reply+xml": { - "source": "iana", - "compressible": true - }, - "application/ibe-pp-data": { - "source": "iana" - }, - "application/iges": { - "source": "iana" - }, - "application/im-iscomposing+xml": { - "source": "iana", - "compressible": true - }, - "application/index": { - "source": "iana" - }, - "application/index.cmd": { - "source": "iana" - }, - "application/index.obj": { - "source": "iana" - }, - "application/index.response": { - "source": "iana" - }, - "application/index.vnd": { - "source": "iana" - }, - "application/inkml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ink","inkml"] - }, - "application/iotp": { - "source": "iana" - }, - "application/ipfix": { - "source": "iana", - "extensions": ["ipfix"] - }, - "application/ipp": { - "source": "iana" - }, - "application/isup": { - "source": "iana" - }, - "application/its+xml": { - "source": "iana", - "compressible": true - }, - "application/java-archive": { - "source": "apache", - "compressible": false, - "extensions": ["jar","war","ear"] - }, - "application/java-serialized-object": { - "source": "apache", - "compressible": false, - "extensions": ["ser"] - }, - "application/java-vm": { - "source": "apache", - "compressible": false, - "extensions": ["class"] - }, - "application/javascript": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["js","mjs"] - }, - "application/jf2feed+json": { - "source": "iana", - "compressible": true - }, - "application/jose": { - "source": "iana" - }, - "application/jose+json": { - "source": "iana", - "compressible": true - }, - "application/jrd+json": { - "source": "iana", - "compressible": true - }, - "application/json": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["json","map"] - }, - "application/json-patch+json": { - "source": "iana", - "compressible": true - }, - "application/json-seq": { - "source": "iana" - }, - "application/json5": { - "extensions": ["json5"] - }, - "application/jsonml+json": { - "source": "apache", - "compressible": true, - "extensions": ["jsonml"] - }, - "application/jwk+json": { - "source": "iana", - "compressible": true - }, - "application/jwk-set+json": { - "source": "iana", - "compressible": true - }, - "application/jwt": { - "source": "iana" - }, - "application/kpml-request+xml": { - "source": "iana", - "compressible": true - }, - "application/kpml-response+xml": { - "source": "iana", - "compressible": true - }, - "application/ld+json": { - "source": "iana", - "compressible": true, - "extensions": ["jsonld"] - }, - "application/lgr+xml": { - "source": "iana", - "compressible": true - }, - "application/link-format": { - "source": "iana" - }, - "application/load-control+xml": { - "source": "iana", - "compressible": true - }, - "application/lost+xml": { - "source": "iana", - "compressible": true, - "extensions": ["lostxml"] - }, - "application/lostsync+xml": { - "source": "iana", - "compressible": true - }, - "application/lxf": { - "source": "iana" - }, - "application/mac-binhex40": { - "source": "iana", - "extensions": ["hqx"] - }, - "application/mac-compactpro": { - "source": "apache", - "extensions": ["cpt"] - }, - "application/macwriteii": { - "source": "iana" - }, - "application/mads+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mads"] - }, - "application/manifest+json": { - "charset": "UTF-8", - "compressible": true, - "extensions": ["webmanifest"] - }, - "application/marc": { - "source": "iana", - "extensions": ["mrc"] - }, - "application/marcxml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mrcx"] - }, - "application/mathematica": { - "source": "iana", - "extensions": ["ma","nb","mb"] - }, - "application/mathml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mathml"] - }, - "application/mathml-content+xml": { - "source": "iana", - "compressible": true - }, - "application/mathml-presentation+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-associated-procedure-description+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-deregister+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-envelope+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-msk+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-msk-response+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-protection-description+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-reception-report+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-register+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-register-response+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-schedule+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-user-service-description+xml": { - "source": "iana", - "compressible": true - }, - "application/mbox": { - "source": "iana", - "extensions": ["mbox"] - }, - "application/media-policy-dataset+xml": { - "source": "iana", - "compressible": true - }, - "application/media_control+xml": { - "source": "iana", - "compressible": true - }, - "application/mediaservercontrol+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mscml"] - }, - "application/merge-patch+json": { - "source": "iana", - "compressible": true - }, - "application/metalink+xml": { - "source": "apache", - "compressible": true, - "extensions": ["metalink"] - }, - "application/metalink4+xml": { - "source": "iana", - "compressible": true, - "extensions": ["meta4"] - }, - "application/mets+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mets"] - }, - "application/mf4": { - "source": "iana" - }, - "application/mikey": { - "source": "iana" - }, - "application/mmt-usd+xml": { - "source": "iana", - "compressible": true - }, - "application/mods+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mods"] - }, - "application/moss-keys": { - "source": "iana" - }, - "application/moss-signature": { - "source": "iana" - }, - "application/mosskey-data": { - "source": "iana" - }, - "application/mosskey-request": { - "source": "iana" - }, - "application/mp21": { - "source": "iana", - "extensions": ["m21","mp21"] - }, - "application/mp4": { - "source": "iana", - "extensions": ["mp4s","m4p"] - }, - "application/mpeg4-generic": { - "source": "iana" - }, - "application/mpeg4-iod": { - "source": "iana" - }, - "application/mpeg4-iod-xmt": { - "source": "iana" - }, - "application/mrb-consumer+xml": { - "source": "iana", - "compressible": true - }, - "application/mrb-publish+xml": { - "source": "iana", - "compressible": true - }, - "application/msc-ivr+xml": { - "source": "iana", - "compressible": true - }, - "application/msc-mixer+xml": { - "source": "iana", - "compressible": true - }, - "application/msword": { - "source": "iana", - "compressible": false, - "extensions": ["doc","dot"] - }, - "application/mud+json": { - "source": "iana", - "compressible": true - }, - "application/mxf": { - "source": "iana", - "extensions": ["mxf"] - }, - "application/n-quads": { - "source": "iana" - }, - "application/n-triples": { - "source": "iana" - }, - "application/nasdata": { - "source": "iana" - }, - "application/news-checkgroups": { - "source": "iana" - }, - "application/news-groupinfo": { - "source": "iana" - }, - "application/news-transmission": { - "source": "iana" - }, - "application/nlsml+xml": { - "source": "iana", - "compressible": true - }, - "application/node": { - "source": "iana" - }, - "application/nss": { - "source": "iana" - }, - "application/ocsp-request": { - "source": "iana" - }, - "application/ocsp-response": { - "source": "iana" - }, - "application/octet-stream": { - "source": "iana", - "compressible": false, - "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] - }, - "application/oda": { - "source": "iana", - "extensions": ["oda"] - }, - "application/odx": { - "source": "iana" - }, - "application/oebps-package+xml": { - "source": "iana", - "compressible": true, - "extensions": ["opf"] - }, - "application/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["ogx"] - }, - "application/omdoc+xml": { - "source": "apache", - "compressible": true, - "extensions": ["omdoc"] - }, - "application/onenote": { - "source": "apache", - "extensions": ["onetoc","onetoc2","onetmp","onepkg"] - }, - "application/oxps": { - "source": "iana", - "extensions": ["oxps"] - }, - "application/p2p-overlay+xml": { - "source": "iana", - "compressible": true - }, - "application/parityfec": { - "source": "iana" - }, - "application/passport": { - "source": "iana" - }, - "application/patch-ops-error+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xer"] - }, - "application/pdf": { - "source": "iana", - "compressible": false, - "extensions": ["pdf"] - }, - "application/pdx": { - "source": "iana" - }, - "application/pgp-encrypted": { - "source": "iana", - "compressible": false, - "extensions": ["pgp"] - }, - "application/pgp-keys": { - "source": "iana" - }, - "application/pgp-signature": { - "source": "iana", - "extensions": ["asc","sig"] - }, - "application/pics-rules": { - "source": "apache", - "extensions": ["prf"] - }, - "application/pidf+xml": { - "source": "iana", - "compressible": true - }, - "application/pidf-diff+xml": { - "source": "iana", - "compressible": true - }, - "application/pkcs10": { - "source": "iana", - "extensions": ["p10"] - }, - "application/pkcs12": { - "source": "iana" - }, - "application/pkcs7-mime": { - "source": "iana", - "extensions": ["p7m","p7c"] - }, - "application/pkcs7-signature": { - "source": "iana", - "extensions": ["p7s"] - }, - "application/pkcs8": { - "source": "iana", - "extensions": ["p8"] - }, - "application/pkcs8-encrypted": { - "source": "iana" - }, - "application/pkix-attr-cert": { - "source": "iana", - "extensions": ["ac"] - }, - "application/pkix-cert": { - "source": "iana", - "extensions": ["cer"] - }, - "application/pkix-crl": { - "source": "iana", - "extensions": ["crl"] - }, - "application/pkix-pkipath": { - "source": "iana", - "extensions": ["pkipath"] - }, - "application/pkixcmp": { - "source": "iana", - "extensions": ["pki"] - }, - "application/pls+xml": { - "source": "iana", - "compressible": true, - "extensions": ["pls"] - }, - "application/poc-settings+xml": { - "source": "iana", - "compressible": true - }, - "application/postscript": { - "source": "iana", - "compressible": true, - "extensions": ["ai","eps","ps"] - }, - "application/ppsp-tracker+json": { - "source": "iana", - "compressible": true - }, - "application/problem+json": { - "source": "iana", - "compressible": true - }, - "application/problem+xml": { - "source": "iana", - "compressible": true - }, - "application/provenance+xml": { - "source": "iana", - "compressible": true - }, - "application/prs.alvestrand.titrax-sheet": { - "source": "iana" - }, - "application/prs.cww": { - "source": "iana", - "extensions": ["cww"] - }, - "application/prs.hpub+zip": { - "source": "iana", - "compressible": false - }, - "application/prs.nprend": { - "source": "iana" - }, - "application/prs.plucker": { - "source": "iana" - }, - "application/prs.rdf-xml-crypt": { - "source": "iana" - }, - "application/prs.xsf+xml": { - "source": "iana", - "compressible": true - }, - "application/pskc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["pskcxml"] - }, - "application/qsig": { - "source": "iana" - }, - "application/raml+yaml": { - "compressible": true, - "extensions": ["raml"] - }, - "application/raptorfec": { - "source": "iana" - }, - "application/rdap+json": { - "source": "iana", - "compressible": true - }, - "application/rdf+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rdf","owl"] - }, - "application/reginfo+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rif"] - }, - "application/relax-ng-compact-syntax": { - "source": "iana", - "extensions": ["rnc"] - }, - "application/remote-printing": { - "source": "iana" - }, - "application/reputon+json": { - "source": "iana", - "compressible": true - }, - "application/resource-lists+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rl"] - }, - "application/resource-lists-diff+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rld"] - }, - "application/rfc+xml": { - "source": "iana", - "compressible": true - }, - "application/riscos": { - "source": "iana" - }, - "application/rlmi+xml": { - "source": "iana", - "compressible": true - }, - "application/rls-services+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rs"] - }, - "application/route-apd+xml": { - "source": "iana", - "compressible": true - }, - "application/route-s-tsid+xml": { - "source": "iana", - "compressible": true - }, - "application/route-usd+xml": { - "source": "iana", - "compressible": true - }, - "application/rpki-ghostbusters": { - "source": "iana", - "extensions": ["gbr"] - }, - "application/rpki-manifest": { - "source": "iana", - "extensions": ["mft"] - }, - "application/rpki-publication": { - "source": "iana" - }, - "application/rpki-roa": { - "source": "iana", - "extensions": ["roa"] - }, - "application/rpki-updown": { - "source": "iana" - }, - "application/rsd+xml": { - "source": "apache", - "compressible": true, - "extensions": ["rsd"] - }, - "application/rss+xml": { - "source": "apache", - "compressible": true, - "extensions": ["rss"] - }, - "application/rtf": { - "source": "iana", - "compressible": true, - "extensions": ["rtf"] - }, - "application/rtploopback": { - "source": "iana" - }, - "application/rtx": { - "source": "iana" - }, - "application/samlassertion+xml": { - "source": "iana", - "compressible": true - }, - "application/samlmetadata+xml": { - "source": "iana", - "compressible": true - }, - "application/sbml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sbml"] - }, - "application/scaip+xml": { - "source": "iana", - "compressible": true - }, - "application/scim+json": { - "source": "iana", - "compressible": true - }, - "application/scvp-cv-request": { - "source": "iana", - "extensions": ["scq"] - }, - "application/scvp-cv-response": { - "source": "iana", - "extensions": ["scs"] - }, - "application/scvp-vp-request": { - "source": "iana", - "extensions": ["spq"] - }, - "application/scvp-vp-response": { - "source": "iana", - "extensions": ["spp"] - }, - "application/sdp": { - "source": "iana", - "extensions": ["sdp"] - }, - "application/secevent+jwt": { - "source": "iana" - }, - "application/senml+cbor": { - "source": "iana" - }, - "application/senml+json": { - "source": "iana", - "compressible": true - }, - "application/senml+xml": { - "source": "iana", - "compressible": true - }, - "application/senml-exi": { - "source": "iana" - }, - "application/sensml+cbor": { - "source": "iana" - }, - "application/sensml+json": { - "source": "iana", - "compressible": true - }, - "application/sensml+xml": { - "source": "iana", - "compressible": true - }, - "application/sensml-exi": { - "source": "iana" - }, - "application/sep+xml": { - "source": "iana", - "compressible": true - }, - "application/sep-exi": { - "source": "iana" - }, - "application/session-info": { - "source": "iana" - }, - "application/set-payment": { - "source": "iana" - }, - "application/set-payment-initiation": { - "source": "iana", - "extensions": ["setpay"] - }, - "application/set-registration": { - "source": "iana" - }, - "application/set-registration-initiation": { - "source": "iana", - "extensions": ["setreg"] - }, - "application/sgml": { - "source": "iana" - }, - "application/sgml-open-catalog": { - "source": "iana" - }, - "application/shf+xml": { - "source": "iana", - "compressible": true, - "extensions": ["shf"] - }, - "application/sieve": { - "source": "iana" - }, - "application/simple-filter+xml": { - "source": "iana", - "compressible": true - }, - "application/simple-message-summary": { - "source": "iana" - }, - "application/simplesymbolcontainer": { - "source": "iana" - }, - "application/slate": { - "source": "iana" - }, - "application/smil": { - "source": "iana" - }, - "application/smil+xml": { - "source": "iana", - "compressible": true, - "extensions": ["smi","smil"] - }, - "application/smpte336m": { - "source": "iana" - }, - "application/soap+fastinfoset": { - "source": "iana" - }, - "application/soap+xml": { - "source": "iana", - "compressible": true - }, - "application/sparql-query": { - "source": "iana", - "extensions": ["rq"] - }, - "application/sparql-results+xml": { - "source": "iana", - "compressible": true, - "extensions": ["srx"] - }, - "application/spirits-event+xml": { - "source": "iana", - "compressible": true - }, - "application/sql": { - "source": "iana" - }, - "application/srgs": { - "source": "iana", - "extensions": ["gram"] - }, - "application/srgs+xml": { - "source": "iana", - "compressible": true, - "extensions": ["grxml"] - }, - "application/sru+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sru"] - }, - "application/ssdl+xml": { - "source": "apache", - "compressible": true, - "extensions": ["ssdl"] - }, - "application/ssml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ssml"] - }, - "application/stix+json": { - "source": "iana", - "compressible": true - }, - "application/tamp-apex-update": { - "source": "iana" - }, - "application/tamp-apex-update-confirm": { - "source": "iana" - }, - "application/tamp-community-update": { - "source": "iana" - }, - "application/tamp-community-update-confirm": { - "source": "iana" - }, - "application/tamp-error": { - "source": "iana" - }, - "application/tamp-sequence-adjust": { - "source": "iana" - }, - "application/tamp-sequence-adjust-confirm": { - "source": "iana" - }, - "application/tamp-status-query": { - "source": "iana" - }, - "application/tamp-status-response": { - "source": "iana" - }, - "application/tamp-update": { - "source": "iana" - }, - "application/tamp-update-confirm": { - "source": "iana" - }, - "application/tar": { - "compressible": true - }, - "application/taxii+json": { - "source": "iana", - "compressible": true - }, - "application/tei+xml": { - "source": "iana", - "compressible": true, - "extensions": ["tei","teicorpus"] - }, - "application/thraud+xml": { - "source": "iana", - "compressible": true, - "extensions": ["tfi"] - }, - "application/timestamp-query": { - "source": "iana" - }, - "application/timestamp-reply": { - "source": "iana" - }, - "application/timestamped-data": { - "source": "iana", - "extensions": ["tsd"] - }, - "application/tlsrpt+gzip": { - "source": "iana" - }, - "application/tlsrpt+json": { - "source": "iana", - "compressible": true - }, - "application/tnauthlist": { - "source": "iana" - }, - "application/trickle-ice-sdpfrag": { - "source": "iana" - }, - "application/trig": { - "source": "iana" - }, - "application/ttml+xml": { - "source": "iana", - "compressible": true - }, - "application/tve-trigger": { - "source": "iana" - }, - "application/ulpfec": { - "source": "iana" - }, - "application/urc-grpsheet+xml": { - "source": "iana", - "compressible": true - }, - "application/urc-ressheet+xml": { - "source": "iana", - "compressible": true - }, - "application/urc-targetdesc+xml": { - "source": "iana", - "compressible": true - }, - "application/urc-uisocketdesc+xml": { - "source": "iana", - "compressible": true - }, - "application/vcard+json": { - "source": "iana", - "compressible": true - }, - "application/vcard+xml": { - "source": "iana", - "compressible": true - }, - "application/vemmi": { - "source": "iana" - }, - "application/vividence.scriptfile": { - "source": "apache" - }, - "application/vnd.1000minds.decision-model+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp-prose+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp-prose-pc3ch+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp-v2x-local-service-information": { - "source": "iana" - }, - "application/vnd.3gpp.access-transfer-events+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.bsf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.gmop+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mc-signalling-ear": { - "source": "iana" - }, - "application/vnd.3gpp.mcdata-payload": { - "source": "iana" - }, - "application/vnd.3gpp.mcdata-signalling": { - "source": "iana" - }, - "application/vnd.3gpp.mcptt-affiliation-command+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-floor-request+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-location-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-signed+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mid-call+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.pic-bw-large": { - "source": "iana", - "extensions": ["plb"] - }, - "application/vnd.3gpp.pic-bw-small": { - "source": "iana", - "extensions": ["psb"] - }, - "application/vnd.3gpp.pic-bw-var": { - "source": "iana", - "extensions": ["pvb"] - }, - "application/vnd.3gpp.sms": { - "source": "iana" - }, - "application/vnd.3gpp.sms+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.srvcc-ext+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.srvcc-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.state-and-event-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.ussd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp2.bcmcsinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp2.sms": { - "source": "iana" - }, - "application/vnd.3gpp2.tcap": { - "source": "iana", - "extensions": ["tcap"] - }, - "application/vnd.3lightssoftware.imagescal": { - "source": "iana" - }, - "application/vnd.3m.post-it-notes": { - "source": "iana", - "extensions": ["pwn"] - }, - "application/vnd.accpac.simply.aso": { - "source": "iana", - "extensions": ["aso"] - }, - "application/vnd.accpac.simply.imp": { - "source": "iana", - "extensions": ["imp"] - }, - "application/vnd.acucobol": { - "source": "iana", - "extensions": ["acu"] - }, - "application/vnd.acucorp": { - "source": "iana", - "extensions": ["atc","acutc"] - }, - "application/vnd.adobe.air-application-installer-package+zip": { - "source": "apache", - "compressible": false, - "extensions": ["air"] - }, - "application/vnd.adobe.flash.movie": { - "source": "iana" - }, - "application/vnd.adobe.formscentral.fcdt": { - "source": "iana", - "extensions": ["fcdt"] - }, - "application/vnd.adobe.fxp": { - "source": "iana", - "extensions": ["fxp","fxpl"] - }, - "application/vnd.adobe.partial-upload": { - "source": "iana" - }, - "application/vnd.adobe.xdp+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xdp"] - }, - "application/vnd.adobe.xfdf": { - "source": "iana", - "extensions": ["xfdf"] - }, - "application/vnd.aether.imp": { - "source": "iana" - }, - "application/vnd.afpc.afplinedata": { - "source": "iana" - }, - "application/vnd.afpc.modca": { - "source": "iana" - }, - "application/vnd.ah-barcode": { - "source": "iana" - }, - "application/vnd.ahead.space": { - "source": "iana", - "extensions": ["ahead"] - }, - "application/vnd.airzip.filesecure.azf": { - "source": "iana", - "extensions": ["azf"] - }, - "application/vnd.airzip.filesecure.azs": { - "source": "iana", - "extensions": ["azs"] - }, - "application/vnd.amadeus+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.amazon.ebook": { - "source": "apache", - "extensions": ["azw"] - }, - "application/vnd.amazon.mobi8-ebook": { - "source": "iana" - }, - "application/vnd.americandynamics.acc": { - "source": "iana", - "extensions": ["acc"] - }, - "application/vnd.amiga.ami": { - "source": "iana", - "extensions": ["ami"] - }, - "application/vnd.amundsen.maze+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.android.package-archive": { - "source": "apache", - "compressible": false, - "extensions": ["apk"] - }, - "application/vnd.anki": { - "source": "iana" - }, - "application/vnd.anser-web-certificate-issue-initiation": { - "source": "iana", - "extensions": ["cii"] - }, - "application/vnd.anser-web-funds-transfer-initiation": { - "source": "apache", - "extensions": ["fti"] - }, - "application/vnd.antix.game-component": { - "source": "iana", - "extensions": ["atx"] - }, - "application/vnd.apache.thrift.binary": { - "source": "iana" - }, - "application/vnd.apache.thrift.compact": { - "source": "iana" - }, - "application/vnd.apache.thrift.json": { - "source": "iana" - }, - "application/vnd.api+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.apothekende.reservation+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.apple.installer+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mpkg"] - }, - "application/vnd.apple.keynote": { - "source": "iana", - "extensions": ["keynote"] - }, - "application/vnd.apple.mpegurl": { - "source": "iana", - "extensions": ["m3u8"] - }, - "application/vnd.apple.numbers": { - "source": "iana", - "extensions": ["numbers"] - }, - "application/vnd.apple.pages": { - "source": "iana", - "extensions": ["pages"] - }, - "application/vnd.apple.pkpass": { - "compressible": false, - "extensions": ["pkpass"] - }, - "application/vnd.arastra.swi": { - "source": "iana" - }, - "application/vnd.aristanetworks.swi": { - "source": "iana", - "extensions": ["swi"] - }, - "application/vnd.artisan+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.artsquare": { - "source": "iana" - }, - "application/vnd.astraea-software.iota": { - "source": "iana", - "extensions": ["iota"] - }, - "application/vnd.audiograph": { - "source": "iana", - "extensions": ["aep"] - }, - "application/vnd.autopackage": { - "source": "iana" - }, - "application/vnd.avalon+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.avistar+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.balsamiq.bmml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.balsamiq.bmpr": { - "source": "iana" - }, - "application/vnd.banana-accounting": { - "source": "iana" - }, - "application/vnd.bbf.usp.msg": { - "source": "iana" - }, - "application/vnd.bbf.usp.msg+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.bekitzur-stech+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.bint.med-content": { - "source": "iana" - }, - "application/vnd.biopax.rdf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.blink-idb-value-wrapper": { - "source": "iana" - }, - "application/vnd.blueice.multipass": { - "source": "iana", - "extensions": ["mpm"] - }, - "application/vnd.bluetooth.ep.oob": { - "source": "iana" - }, - "application/vnd.bluetooth.le.oob": { - "source": "iana" - }, - "application/vnd.bmi": { - "source": "iana", - "extensions": ["bmi"] - }, - "application/vnd.businessobjects": { - "source": "iana", - "extensions": ["rep"] - }, - "application/vnd.byu.uapi+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cab-jscript": { - "source": "iana" - }, - "application/vnd.canon-cpdl": { - "source": "iana" - }, - "application/vnd.canon-lips": { - "source": "iana" - }, - "application/vnd.capasystems-pg+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cendio.thinlinc.clientconf": { - "source": "iana" - }, - "application/vnd.century-systems.tcp_stream": { - "source": "iana" - }, - "application/vnd.chemdraw+xml": { - "source": "iana", - "compressible": true, - "extensions": ["cdxml"] - }, - "application/vnd.chess-pgn": { - "source": "iana" - }, - "application/vnd.chipnuts.karaoke-mmd": { - "source": "iana", - "extensions": ["mmd"] - }, - "application/vnd.cinderella": { - "source": "iana", - "extensions": ["cdy"] - }, - "application/vnd.cirpack.isdn-ext": { - "source": "iana" - }, - "application/vnd.citationstyles.style+xml": { - "source": "iana", - "compressible": true, - "extensions": ["csl"] - }, - "application/vnd.claymore": { - "source": "iana", - "extensions": ["cla"] - }, - "application/vnd.cloanto.rp9": { - "source": "iana", - "extensions": ["rp9"] - }, - "application/vnd.clonk.c4group": { - "source": "iana", - "extensions": ["c4g","c4d","c4f","c4p","c4u"] - }, - "application/vnd.cluetrust.cartomobile-config": { - "source": "iana", - "extensions": ["c11amc"] - }, - "application/vnd.cluetrust.cartomobile-config-pkg": { - "source": "iana", - "extensions": ["c11amz"] - }, - "application/vnd.coffeescript": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.document": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.document-template": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.presentation": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.presentation-template": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.spreadsheet": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.spreadsheet-template": { - "source": "iana" - }, - "application/vnd.collection+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.collection.doc+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.collection.next+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.comicbook+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.comicbook-rar": { - "source": "iana" - }, - "application/vnd.commerce-battelle": { - "source": "iana" - }, - "application/vnd.commonspace": { - "source": "iana", - "extensions": ["csp"] - }, - "application/vnd.contact.cmsg": { - "source": "iana", - "extensions": ["cdbcmsg"] - }, - "application/vnd.coreos.ignition+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cosmocaller": { - "source": "iana", - "extensions": ["cmc"] - }, - "application/vnd.crick.clicker": { - "source": "iana", - "extensions": ["clkx"] - }, - "application/vnd.crick.clicker.keyboard": { - "source": "iana", - "extensions": ["clkk"] - }, - "application/vnd.crick.clicker.palette": { - "source": "iana", - "extensions": ["clkp"] - }, - "application/vnd.crick.clicker.template": { - "source": "iana", - "extensions": ["clkt"] - }, - "application/vnd.crick.clicker.wordbank": { - "source": "iana", - "extensions": ["clkw"] - }, - "application/vnd.criticaltools.wbs+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wbs"] - }, - "application/vnd.ctc-posml": { - "source": "iana", - "extensions": ["pml"] - }, - "application/vnd.ctct.ws+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.cups-pdf": { - "source": "iana" - }, - "application/vnd.cups-postscript": { - "source": "iana" - }, - "application/vnd.cups-ppd": { - "source": "iana", - "extensions": ["ppd"] - }, - "application/vnd.cups-raster": { - "source": "iana" - }, - "application/vnd.cups-raw": { - "source": "iana" - }, - "application/vnd.curl": { - "source": "iana" - }, - "application/vnd.curl.car": { - "source": "apache", - "extensions": ["car"] - }, - "application/vnd.curl.pcurl": { - "source": "apache", - "extensions": ["pcurl"] - }, - "application/vnd.cyan.dean.root+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.cybank": { - "source": "iana" - }, - "application/vnd.d2l.coursepackage1p0+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.dart": { - "source": "iana", - "compressible": true, - "extensions": ["dart"] - }, - "application/vnd.data-vision.rdz": { - "source": "iana", - "extensions": ["rdz"] - }, - "application/vnd.datapackage+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.dataresource+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.debian.binary-package": { - "source": "iana" - }, - "application/vnd.dece.data": { - "source": "iana", - "extensions": ["uvf","uvvf","uvd","uvvd"] - }, - "application/vnd.dece.ttml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["uvt","uvvt"] - }, - "application/vnd.dece.unspecified": { - "source": "iana", - "extensions": ["uvx","uvvx"] - }, - "application/vnd.dece.zip": { - "source": "iana", - "extensions": ["uvz","uvvz"] - }, - "application/vnd.denovo.fcselayout-link": { - "source": "iana", - "extensions": ["fe_launch"] - }, - "application/vnd.desmume.movie": { - "source": "iana" - }, - "application/vnd.dir-bi.plate-dl-nosuffix": { - "source": "iana" - }, - "application/vnd.dm.delegation+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dna": { - "source": "iana", - "extensions": ["dna"] - }, - "application/vnd.document+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.dolby.mlp": { - "source": "apache", - "extensions": ["mlp"] - }, - "application/vnd.dolby.mobile.1": { - "source": "iana" - }, - "application/vnd.dolby.mobile.2": { - "source": "iana" - }, - "application/vnd.doremir.scorecloud-binary-document": { - "source": "iana" - }, - "application/vnd.dpgraph": { - "source": "iana", - "extensions": ["dpg"] - }, - "application/vnd.dreamfactory": { - "source": "iana", - "extensions": ["dfac"] - }, - "application/vnd.drive+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ds-keypoint": { - "source": "apache", - "extensions": ["kpxx"] - }, - "application/vnd.dtg.local": { - "source": "iana" - }, - "application/vnd.dtg.local.flash": { - "source": "iana" - }, - "application/vnd.dtg.local.html": { - "source": "iana" - }, - "application/vnd.dvb.ait": { - "source": "iana", - "extensions": ["ait"] - }, - "application/vnd.dvb.dvbj": { - "source": "iana" - }, - "application/vnd.dvb.esgcontainer": { - "source": "iana" - }, - "application/vnd.dvb.ipdcdftnotifaccess": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgaccess": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgaccess2": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgpdd": { - "source": "iana" - }, - "application/vnd.dvb.ipdcroaming": { - "source": "iana" - }, - "application/vnd.dvb.iptv.alfec-base": { - "source": "iana" - }, - "application/vnd.dvb.iptv.alfec-enhancement": { - "source": "iana" - }, - "application/vnd.dvb.notif-aggregate-root+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-container+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-generic+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-ia-msglist+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-ia-registration-request+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-ia-registration-response+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-init+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.pfr": { - "source": "iana" - }, - "application/vnd.dvb.service": { - "source": "iana", - "extensions": ["svc"] - }, - "application/vnd.dxr": { - "source": "iana" - }, - "application/vnd.dynageo": { - "source": "iana", - "extensions": ["geo"] - }, - "application/vnd.dzr": { - "source": "iana" - }, - "application/vnd.easykaraoke.cdgdownload": { - "source": "iana" - }, - "application/vnd.ecdis-update": { - "source": "iana" - }, - "application/vnd.ecip.rlp": { - "source": "iana" - }, - "application/vnd.ecowin.chart": { - "source": "iana", - "extensions": ["mag"] - }, - "application/vnd.ecowin.filerequest": { - "source": "iana" - }, - "application/vnd.ecowin.fileupdate": { - "source": "iana" - }, - "application/vnd.ecowin.series": { - "source": "iana" - }, - "application/vnd.ecowin.seriesrequest": { - "source": "iana" - }, - "application/vnd.ecowin.seriesupdate": { - "source": "iana" - }, - "application/vnd.efi.img": { - "source": "iana" - }, - "application/vnd.efi.iso": { - "source": "iana" - }, - "application/vnd.emclient.accessrequest+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.enliven": { - "source": "iana", - "extensions": ["nml"] - }, - "application/vnd.enphase.envoy": { - "source": "iana" - }, - "application/vnd.eprints.data+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.epson.esf": { - "source": "iana", - "extensions": ["esf"] - }, - "application/vnd.epson.msf": { - "source": "iana", - "extensions": ["msf"] - }, - "application/vnd.epson.quickanime": { - "source": "iana", - "extensions": ["qam"] - }, - "application/vnd.epson.salt": { - "source": "iana", - "extensions": ["slt"] - }, - "application/vnd.epson.ssf": { - "source": "iana", - "extensions": ["ssf"] - }, - "application/vnd.ericsson.quickcall": { - "source": "iana" - }, - "application/vnd.espass-espass+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.eszigno3+xml": { - "source": "iana", - "compressible": true, - "extensions": ["es3","et3"] - }, - "application/vnd.etsi.aoc+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.asic-e+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.etsi.asic-s+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.etsi.cug+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvcommand+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvdiscovery+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsad-bc+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsad-cod+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsad-npvr+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvservice+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsync+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvueprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.mcid+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.mheg5": { - "source": "iana" - }, - "application/vnd.etsi.overload-control-policy-dataset+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.pstn+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.sci+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.simservs+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.timestamp-token": { - "source": "iana" - }, - "application/vnd.etsi.tsl+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.tsl.der": { - "source": "iana" - }, - "application/vnd.eudora.data": { - "source": "iana" - }, - "application/vnd.evolv.ecig.profile": { - "source": "iana" - }, - "application/vnd.evolv.ecig.settings": { - "source": "iana" - }, - "application/vnd.evolv.ecig.theme": { - "source": "iana" - }, - "application/vnd.exstream-empower+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.ezpix-album": { - "source": "iana", - "extensions": ["ez2"] - }, - "application/vnd.ezpix-package": { - "source": "iana", - "extensions": ["ez3"] - }, - "application/vnd.f-secure.mobile": { - "source": "iana" - }, - "application/vnd.fastcopy-disk-image": { - "source": "iana" - }, - "application/vnd.fdf": { - "source": "iana", - "extensions": ["fdf"] - }, - "application/vnd.fdsn.mseed": { - "source": "iana", - "extensions": ["mseed"] - }, - "application/vnd.fdsn.seed": { - "source": "iana", - "extensions": ["seed","dataless"] - }, - "application/vnd.ffsns": { - "source": "iana" - }, - "application/vnd.filmit.zfc": { - "source": "iana" - }, - "application/vnd.fints": { - "source": "iana" - }, - "application/vnd.firemonkeys.cloudcell": { - "source": "iana" - }, - "application/vnd.flographit": { - "source": "iana", - "extensions": ["gph"] - }, - "application/vnd.fluxtime.clip": { - "source": "iana", - "extensions": ["ftc"] - }, - "application/vnd.font-fontforge-sfd": { - "source": "iana" - }, - "application/vnd.framemaker": { - "source": "iana", - "extensions": ["fm","frame","maker","book"] - }, - "application/vnd.frogans.fnc": { - "source": "iana", - "extensions": ["fnc"] - }, - "application/vnd.frogans.ltf": { - "source": "iana", - "extensions": ["ltf"] - }, - "application/vnd.fsc.weblaunch": { - "source": "iana", - "extensions": ["fsc"] - }, - "application/vnd.fujitsu.oasys": { - "source": "iana", - "extensions": ["oas"] - }, - "application/vnd.fujitsu.oasys2": { - "source": "iana", - "extensions": ["oa2"] - }, - "application/vnd.fujitsu.oasys3": { - "source": "iana", - "extensions": ["oa3"] - }, - "application/vnd.fujitsu.oasysgp": { - "source": "iana", - "extensions": ["fg5"] - }, - "application/vnd.fujitsu.oasysprs": { - "source": "iana", - "extensions": ["bh2"] - }, - "application/vnd.fujixerox.art-ex": { - "source": "iana" - }, - "application/vnd.fujixerox.art4": { - "source": "iana" - }, - "application/vnd.fujixerox.ddd": { - "source": "iana", - "extensions": ["ddd"] - }, - "application/vnd.fujixerox.docuworks": { - "source": "iana", - "extensions": ["xdw"] - }, - "application/vnd.fujixerox.docuworks.binder": { - "source": "iana", - "extensions": ["xbd"] - }, - "application/vnd.fujixerox.docuworks.container": { - "source": "iana" - }, - "application/vnd.fujixerox.hbpl": { - "source": "iana" - }, - "application/vnd.fut-misnet": { - "source": "iana" - }, - "application/vnd.futoin+cbor": { - "source": "iana" - }, - "application/vnd.futoin+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.fuzzysheet": { - "source": "iana", - "extensions": ["fzs"] - }, - "application/vnd.genomatix.tuxedo": { - "source": "iana", - "extensions": ["txd"] - }, - "application/vnd.geo+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.geocube+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.geogebra.file": { - "source": "iana", - "extensions": ["ggb"] - }, - "application/vnd.geogebra.tool": { - "source": "iana", - "extensions": ["ggt"] - }, - "application/vnd.geometry-explorer": { - "source": "iana", - "extensions": ["gex","gre"] - }, - "application/vnd.geonext": { - "source": "iana", - "extensions": ["gxt"] - }, - "application/vnd.geoplan": { - "source": "iana", - "extensions": ["g2w"] - }, - "application/vnd.geospace": { - "source": "iana", - "extensions": ["g3w"] - }, - "application/vnd.gerber": { - "source": "iana" - }, - "application/vnd.globalplatform.card-content-mgt": { - "source": "iana" - }, - "application/vnd.globalplatform.card-content-mgt-response": { - "source": "iana" - }, - "application/vnd.gmx": { - "source": "iana", - "extensions": ["gmx"] - }, - "application/vnd.google-apps.document": { - "compressible": false, - "extensions": ["gdoc"] - }, - "application/vnd.google-apps.presentation": { - "compressible": false, - "extensions": ["gslides"] - }, - "application/vnd.google-apps.spreadsheet": { - "compressible": false, - "extensions": ["gsheet"] - }, - "application/vnd.google-earth.kml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["kml"] - }, - "application/vnd.google-earth.kmz": { - "source": "iana", - "compressible": false, - "extensions": ["kmz"] - }, - "application/vnd.gov.sk.e-form+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.gov.sk.e-form+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.gov.sk.xmldatacontainer+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.grafeq": { - "source": "iana", - "extensions": ["gqf","gqs"] - }, - "application/vnd.gridmp": { - "source": "iana" - }, - "application/vnd.groove-account": { - "source": "iana", - "extensions": ["gac"] - }, - "application/vnd.groove-help": { - "source": "iana", - "extensions": ["ghf"] - }, - "application/vnd.groove-identity-message": { - "source": "iana", - "extensions": ["gim"] - }, - "application/vnd.groove-injector": { - "source": "iana", - "extensions": ["grv"] - }, - "application/vnd.groove-tool-message": { - "source": "iana", - "extensions": ["gtm"] - }, - "application/vnd.groove-tool-template": { - "source": "iana", - "extensions": ["tpl"] - }, - "application/vnd.groove-vcard": { - "source": "iana", - "extensions": ["vcg"] - }, - "application/vnd.hal+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hal+xml": { - "source": "iana", - "compressible": true, - "extensions": ["hal"] - }, - "application/vnd.handheld-entertainment+xml": { - "source": "iana", - "compressible": true, - "extensions": ["zmm"] - }, - "application/vnd.hbci": { - "source": "iana", - "extensions": ["hbci"] - }, - "application/vnd.hc+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hcl-bireports": { - "source": "iana" - }, - "application/vnd.hdt": { - "source": "iana" - }, - "application/vnd.heroku+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hhe.lesson-player": { - "source": "iana", - "extensions": ["les"] - }, - "application/vnd.hp-hpgl": { - "source": "iana", - "extensions": ["hpgl"] - }, - "application/vnd.hp-hpid": { - "source": "iana", - "extensions": ["hpid"] - }, - "application/vnd.hp-hps": { - "source": "iana", - "extensions": ["hps"] - }, - "application/vnd.hp-jlyt": { - "source": "iana", - "extensions": ["jlt"] - }, - "application/vnd.hp-pcl": { - "source": "iana", - "extensions": ["pcl"] - }, - "application/vnd.hp-pclxl": { - "source": "iana", - "extensions": ["pclxl"] - }, - "application/vnd.httphone": { - "source": "iana" - }, - "application/vnd.hydrostatix.sof-data": { - "source": "iana", - "extensions": ["sfd-hdstx"] - }, - "application/vnd.hyper+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hyper-item+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hyperdrive+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hzn-3d-crossword": { - "source": "iana" - }, - "application/vnd.ibm.afplinedata": { - "source": "iana" - }, - "application/vnd.ibm.electronic-media": { - "source": "iana" - }, - "application/vnd.ibm.minipay": { - "source": "iana", - "extensions": ["mpy"] - }, - "application/vnd.ibm.modcap": { - "source": "iana", - "extensions": ["afp","listafp","list3820"] - }, - "application/vnd.ibm.rights-management": { - "source": "iana", - "extensions": ["irm"] - }, - "application/vnd.ibm.secure-container": { - "source": "iana", - "extensions": ["sc"] - }, - "application/vnd.iccprofile": { - "source": "iana", - "extensions": ["icc","icm"] - }, - "application/vnd.ieee.1905": { - "source": "iana" - }, - "application/vnd.igloader": { - "source": "iana", - "extensions": ["igl"] - }, - "application/vnd.imagemeter.folder+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.imagemeter.image+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.immervision-ivp": { - "source": "iana", - "extensions": ["ivp"] - }, - "application/vnd.immervision-ivu": { - "source": "iana", - "extensions": ["ivu"] - }, - "application/vnd.ims.imsccv1p1": { - "source": "iana" - }, - "application/vnd.ims.imsccv1p2": { - "source": "iana" - }, - "application/vnd.ims.imsccv1p3": { - "source": "iana" - }, - "application/vnd.ims.lis.v2.result+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolconsumerprofile+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolproxy+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolproxy.id+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolsettings+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolsettings.simple+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.informedcontrol.rms+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.informix-visionary": { - "source": "iana" - }, - "application/vnd.infotech.project": { - "source": "iana" - }, - "application/vnd.infotech.project+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.innopath.wamp.notification": { - "source": "iana" - }, - "application/vnd.insors.igm": { - "source": "iana", - "extensions": ["igm"] - }, - "application/vnd.intercon.formnet": { - "source": "iana", - "extensions": ["xpw","xpx"] - }, - "application/vnd.intergeo": { - "source": "iana", - "extensions": ["i2g"] - }, - "application/vnd.intertrust.digibox": { - "source": "iana" - }, - "application/vnd.intertrust.nncp": { - "source": "iana" - }, - "application/vnd.intu.qbo": { - "source": "iana", - "extensions": ["qbo"] - }, - "application/vnd.intu.qfx": { - "source": "iana", - "extensions": ["qfx"] - }, - "application/vnd.iptc.g2.catalogitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.conceptitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.knowledgeitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.newsitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.newsmessage+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.packageitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.planningitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ipunplugged.rcprofile": { - "source": "iana", - "extensions": ["rcprofile"] - }, - "application/vnd.irepository.package+xml": { - "source": "iana", - "compressible": true, - "extensions": ["irp"] - }, - "application/vnd.is-xpr": { - "source": "iana", - "extensions": ["xpr"] - }, - "application/vnd.isac.fcs": { - "source": "iana", - "extensions": ["fcs"] - }, - "application/vnd.jam": { - "source": "iana", - "extensions": ["jam"] - }, - "application/vnd.japannet-directory-service": { - "source": "iana" - }, - "application/vnd.japannet-jpnstore-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-payment-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-registration": { - "source": "iana" - }, - "application/vnd.japannet-registration-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-setstore-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-verification": { - "source": "iana" - }, - "application/vnd.japannet-verification-wakeup": { - "source": "iana" - }, - "application/vnd.jcp.javame.midlet-rms": { - "source": "iana", - "extensions": ["rms"] - }, - "application/vnd.jisp": { - "source": "iana", - "extensions": ["jisp"] - }, - "application/vnd.joost.joda-archive": { - "source": "iana", - "extensions": ["joda"] - }, - "application/vnd.jsk.isdn-ngn": { - "source": "iana" - }, - "application/vnd.kahootz": { - "source": "iana", - "extensions": ["ktz","ktr"] - }, - "application/vnd.kde.karbon": { - "source": "iana", - "extensions": ["karbon"] - }, - "application/vnd.kde.kchart": { - "source": "iana", - "extensions": ["chrt"] - }, - "application/vnd.kde.kformula": { - "source": "iana", - "extensions": ["kfo"] - }, - "application/vnd.kde.kivio": { - "source": "iana", - "extensions": ["flw"] - }, - "application/vnd.kde.kontour": { - "source": "iana", - "extensions": ["kon"] - }, - "application/vnd.kde.kpresenter": { - "source": "iana", - "extensions": ["kpr","kpt"] - }, - "application/vnd.kde.kspread": { - "source": "iana", - "extensions": ["ksp"] - }, - "application/vnd.kde.kword": { - "source": "iana", - "extensions": ["kwd","kwt"] - }, - "application/vnd.kenameaapp": { - "source": "iana", - "extensions": ["htke"] - }, - "application/vnd.kidspiration": { - "source": "iana", - "extensions": ["kia"] - }, - "application/vnd.kinar": { - "source": "iana", - "extensions": ["kne","knp"] - }, - "application/vnd.koan": { - "source": "iana", - "extensions": ["skp","skd","skt","skm"] - }, - "application/vnd.kodak-descriptor": { - "source": "iana", - "extensions": ["sse"] - }, - "application/vnd.las.las+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.las.las+xml": { - "source": "iana", - "compressible": true, - "extensions": ["lasxml"] - }, - "application/vnd.leap+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.liberty-request+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.llamagraphics.life-balance.desktop": { - "source": "iana", - "extensions": ["lbd"] - }, - "application/vnd.llamagraphics.life-balance.exchange+xml": { - "source": "iana", - "compressible": true, - "extensions": ["lbe"] - }, - "application/vnd.lotus-1-2-3": { - "source": "iana", - "extensions": ["123"] - }, - "application/vnd.lotus-approach": { - "source": "iana", - "extensions": ["apr"] - }, - "application/vnd.lotus-freelance": { - "source": "iana", - "extensions": ["pre"] - }, - "application/vnd.lotus-notes": { - "source": "iana", - "extensions": ["nsf"] - }, - "application/vnd.lotus-organizer": { - "source": "iana", - "extensions": ["org"] - }, - "application/vnd.lotus-screencam": { - "source": "iana", - "extensions": ["scm"] - }, - "application/vnd.lotus-wordpro": { - "source": "iana", - "extensions": ["lwp"] - }, - "application/vnd.macports.portpkg": { - "source": "iana", - "extensions": ["portpkg"] - }, - "application/vnd.mapbox-vector-tile": { - "source": "iana" - }, - "application/vnd.marlin.drm.actiontoken+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.marlin.drm.conftoken+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.marlin.drm.license+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.marlin.drm.mdcf": { - "source": "iana" - }, - "application/vnd.mason+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.maxmind.maxmind-db": { - "source": "iana" - }, - "application/vnd.mcd": { - "source": "iana", - "extensions": ["mcd"] - }, - "application/vnd.medcalcdata": { - "source": "iana", - "extensions": ["mc1"] - }, - "application/vnd.mediastation.cdkey": { - "source": "iana", - "extensions": ["cdkey"] - }, - "application/vnd.meridian-slingshot": { - "source": "iana" - }, - "application/vnd.mfer": { - "source": "iana", - "extensions": ["mwf"] - }, - "application/vnd.mfmp": { - "source": "iana", - "extensions": ["mfm"] - }, - "application/vnd.micro+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.micrografx.flo": { - "source": "iana", - "extensions": ["flo"] - }, - "application/vnd.micrografx.igx": { - "source": "iana", - "extensions": ["igx"] - }, - "application/vnd.microsoft.portable-executable": { - "source": "iana" - }, - "application/vnd.microsoft.windows.thumbnail-cache": { - "source": "iana" - }, - "application/vnd.miele+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.mif": { - "source": "iana", - "extensions": ["mif"] - }, - "application/vnd.minisoft-hp3000-save": { - "source": "iana" - }, - "application/vnd.mitsubishi.misty-guard.trustweb": { - "source": "iana" - }, - "application/vnd.mobius.daf": { - "source": "iana", - "extensions": ["daf"] - }, - "application/vnd.mobius.dis": { - "source": "iana", - "extensions": ["dis"] - }, - "application/vnd.mobius.mbk": { - "source": "iana", - "extensions": ["mbk"] - }, - "application/vnd.mobius.mqy": { - "source": "iana", - "extensions": ["mqy"] - }, - "application/vnd.mobius.msl": { - "source": "iana", - "extensions": ["msl"] - }, - "application/vnd.mobius.plc": { - "source": "iana", - "extensions": ["plc"] - }, - "application/vnd.mobius.txf": { - "source": "iana", - "extensions": ["txf"] - }, - "application/vnd.mophun.application": { - "source": "iana", - "extensions": ["mpn"] - }, - "application/vnd.mophun.certificate": { - "source": "iana", - "extensions": ["mpc"] - }, - "application/vnd.motorola.flexsuite": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.adsi": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.fis": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.gotap": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.kmr": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.ttc": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.wem": { - "source": "iana" - }, - "application/vnd.motorola.iprm": { - "source": "iana" - }, - "application/vnd.mozilla.xul+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xul"] - }, - "application/vnd.ms-3mfdocument": { - "source": "iana" - }, - "application/vnd.ms-artgalry": { - "source": "iana", - "extensions": ["cil"] - }, - "application/vnd.ms-asf": { - "source": "iana" - }, - "application/vnd.ms-cab-compressed": { - "source": "iana", - "extensions": ["cab"] - }, - "application/vnd.ms-color.iccprofile": { - "source": "apache" - }, - "application/vnd.ms-excel": { - "source": "iana", - "compressible": false, - "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] - }, - "application/vnd.ms-excel.addin.macroenabled.12": { - "source": "iana", - "extensions": ["xlam"] - }, - "application/vnd.ms-excel.sheet.binary.macroenabled.12": { - "source": "iana", - "extensions": ["xlsb"] - }, - "application/vnd.ms-excel.sheet.macroenabled.12": { - "source": "iana", - "extensions": ["xlsm"] - }, - "application/vnd.ms-excel.template.macroenabled.12": { - "source": "iana", - "extensions": ["xltm"] - }, - "application/vnd.ms-fontobject": { - "source": "iana", - "compressible": true, - "extensions": ["eot"] - }, - "application/vnd.ms-htmlhelp": { - "source": "iana", - "extensions": ["chm"] - }, - "application/vnd.ms-ims": { - "source": "iana", - "extensions": ["ims"] - }, - "application/vnd.ms-lrm": { - "source": "iana", - "extensions": ["lrm"] - }, - "application/vnd.ms-office.activex+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-officetheme": { - "source": "iana", - "extensions": ["thmx"] - }, - "application/vnd.ms-opentype": { - "source": "apache", - "compressible": true - }, - "application/vnd.ms-outlook": { - "compressible": false, - "extensions": ["msg"] - }, - "application/vnd.ms-package.obfuscated-opentype": { - "source": "apache" - }, - "application/vnd.ms-pki.seccat": { - "source": "apache", - "extensions": ["cat"] - }, - "application/vnd.ms-pki.stl": { - "source": "apache", - "extensions": ["stl"] - }, - "application/vnd.ms-playready.initiator+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-powerpoint": { - "source": "iana", - "compressible": false, - "extensions": ["ppt","pps","pot"] - }, - "application/vnd.ms-powerpoint.addin.macroenabled.12": { - "source": "iana", - "extensions": ["ppam"] - }, - "application/vnd.ms-powerpoint.presentation.macroenabled.12": { - "source": "iana", - "extensions": ["pptm"] - }, - "application/vnd.ms-powerpoint.slide.macroenabled.12": { - "source": "iana", - "extensions": ["sldm"] - }, - "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { - "source": "iana", - "extensions": ["ppsm"] - }, - "application/vnd.ms-powerpoint.template.macroenabled.12": { - "source": "iana", - "extensions": ["potm"] - }, - "application/vnd.ms-printdevicecapabilities+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-printing.printticket+xml": { - "source": "apache", - "compressible": true - }, - "application/vnd.ms-printschematicket+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-project": { - "source": "iana", - "extensions": ["mpp","mpt"] - }, - "application/vnd.ms-tnef": { - "source": "iana" - }, - "application/vnd.ms-windows.devicepairing": { - "source": "iana" - }, - "application/vnd.ms-windows.nwprinting.oob": { - "source": "iana" - }, - "application/vnd.ms-windows.printerpairing": { - "source": "iana" - }, - "application/vnd.ms-windows.wsd.oob": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.lic-chlg-req": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.lic-resp": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.meter-chlg-req": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.meter-resp": { - "source": "iana" - }, - "application/vnd.ms-word.document.macroenabled.12": { - "source": "iana", - "extensions": ["docm"] - }, - "application/vnd.ms-word.template.macroenabled.12": { - "source": "iana", - "extensions": ["dotm"] - }, - "application/vnd.ms-works": { - "source": "iana", - "extensions": ["wps","wks","wcm","wdb"] - }, - "application/vnd.ms-wpl": { - "source": "iana", - "extensions": ["wpl"] - }, - "application/vnd.ms-xpsdocument": { - "source": "iana", - "compressible": false, - "extensions": ["xps"] - }, - "application/vnd.msa-disk-image": { - "source": "iana" - }, - "application/vnd.mseq": { - "source": "iana", - "extensions": ["mseq"] - }, - "application/vnd.msign": { - "source": "iana" - }, - "application/vnd.multiad.creator": { - "source": "iana" - }, - "application/vnd.multiad.creator.cif": { - "source": "iana" - }, - "application/vnd.music-niff": { - "source": "iana" - }, - "application/vnd.musician": { - "source": "iana", - "extensions": ["mus"] - }, - "application/vnd.muvee.style": { - "source": "iana", - "extensions": ["msty"] - }, - "application/vnd.mynfc": { - "source": "iana", - "extensions": ["taglet"] - }, - "application/vnd.ncd.control": { - "source": "iana" - }, - "application/vnd.ncd.reference": { - "source": "iana" - }, - "application/vnd.nearst.inv+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.nervana": { - "source": "iana" - }, - "application/vnd.netfpx": { - "source": "iana" - }, - "application/vnd.neurolanguage.nlu": { - "source": "iana", - "extensions": ["nlu"] - }, - "application/vnd.nimn": { - "source": "iana" - }, - "application/vnd.nintendo.nitro.rom": { - "source": "iana" - }, - "application/vnd.nintendo.snes.rom": { - "source": "iana" - }, - "application/vnd.nitf": { - "source": "iana", - "extensions": ["ntf","nitf"] - }, - "application/vnd.noblenet-directory": { - "source": "iana", - "extensions": ["nnd"] - }, - "application/vnd.noblenet-sealer": { - "source": "iana", - "extensions": ["nns"] - }, - "application/vnd.noblenet-web": { - "source": "iana", - "extensions": ["nnw"] - }, - "application/vnd.nokia.catalogs": { - "source": "iana" - }, - "application/vnd.nokia.conml+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.conml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.iptv.config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.isds-radio-presets": { - "source": "iana" - }, - "application/vnd.nokia.landmark+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.landmark+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.landmarkcollection+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.n-gage.ac+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.n-gage.data": { - "source": "iana", - "extensions": ["ngdat"] - }, - "application/vnd.nokia.n-gage.symbian.install": { - "source": "iana", - "extensions": ["n-gage"] - }, - "application/vnd.nokia.ncd": { - "source": "iana" - }, - "application/vnd.nokia.pcd+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.pcd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.radio-preset": { - "source": "iana", - "extensions": ["rpst"] - }, - "application/vnd.nokia.radio-presets": { - "source": "iana", - "extensions": ["rpss"] - }, - "application/vnd.novadigm.edm": { - "source": "iana", - "extensions": ["edm"] - }, - "application/vnd.novadigm.edx": { - "source": "iana", - "extensions": ["edx"] - }, - "application/vnd.novadigm.ext": { - "source": "iana", - "extensions": ["ext"] - }, - "application/vnd.ntt-local.content-share": { - "source": "iana" - }, - "application/vnd.ntt-local.file-transfer": { - "source": "iana" - }, - "application/vnd.ntt-local.ogw_remote-access": { - "source": "iana" - }, - "application/vnd.ntt-local.sip-ta_remote": { - "source": "iana" - }, - "application/vnd.ntt-local.sip-ta_tcp_stream": { - "source": "iana" - }, - "application/vnd.oasis.opendocument.chart": { - "source": "iana", - "extensions": ["odc"] - }, - "application/vnd.oasis.opendocument.chart-template": { - "source": "iana", - "extensions": ["otc"] - }, - "application/vnd.oasis.opendocument.database": { - "source": "iana", - "extensions": ["odb"] - }, - "application/vnd.oasis.opendocument.formula": { - "source": "iana", - "extensions": ["odf"] - }, - "application/vnd.oasis.opendocument.formula-template": { - "source": "iana", - "extensions": ["odft"] - }, - "application/vnd.oasis.opendocument.graphics": { - "source": "iana", - "compressible": false, - "extensions": ["odg"] - }, - "application/vnd.oasis.opendocument.graphics-template": { - "source": "iana", - "extensions": ["otg"] - }, - "application/vnd.oasis.opendocument.image": { - "source": "iana", - "extensions": ["odi"] - }, - "application/vnd.oasis.opendocument.image-template": { - "source": "iana", - "extensions": ["oti"] - }, - "application/vnd.oasis.opendocument.presentation": { - "source": "iana", - "compressible": false, - "extensions": ["odp"] - }, - "application/vnd.oasis.opendocument.presentation-template": { - "source": "iana", - "extensions": ["otp"] - }, - "application/vnd.oasis.opendocument.spreadsheet": { - "source": "iana", - "compressible": false, - "extensions": ["ods"] - }, - "application/vnd.oasis.opendocument.spreadsheet-template": { - "source": "iana", - "extensions": ["ots"] - }, - "application/vnd.oasis.opendocument.text": { - "source": "iana", - "compressible": false, - "extensions": ["odt"] - }, - "application/vnd.oasis.opendocument.text-master": { - "source": "iana", - "extensions": ["odm"] - }, - "application/vnd.oasis.opendocument.text-template": { - "source": "iana", - "extensions": ["ott"] - }, - "application/vnd.oasis.opendocument.text-web": { - "source": "iana", - "extensions": ["oth"] - }, - "application/vnd.obn": { - "source": "iana" - }, - "application/vnd.ocf+cbor": { - "source": "iana" - }, - "application/vnd.oftn.l10n+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.contentaccessdownload+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.contentaccessstreaming+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.cspg-hexbinary": { - "source": "iana" - }, - "application/vnd.oipf.dae.svg+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.dae.xhtml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.mippvcontrolmessage+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.pae.gem": { - "source": "iana" - }, - "application/vnd.oipf.spdiscovery+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.spdlist+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.ueprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.userprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.olpc-sugar": { - "source": "iana", - "extensions": ["xo"] - }, - "application/vnd.oma-scws-config": { - "source": "iana" - }, - "application/vnd.oma-scws-http-request": { - "source": "iana" - }, - "application/vnd.oma-scws-http-response": { - "source": "iana" - }, - "application/vnd.oma.bcast.associated-procedure-parameter+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.drm-trigger+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.imd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.ltkm": { - "source": "iana" - }, - "application/vnd.oma.bcast.notification+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.provisioningtrigger": { - "source": "iana" - }, - "application/vnd.oma.bcast.sgboot": { - "source": "iana" - }, - "application/vnd.oma.bcast.sgdd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.sgdu": { - "source": "iana" - }, - "application/vnd.oma.bcast.simple-symbol-container": { - "source": "iana" - }, - "application/vnd.oma.bcast.smartcard-trigger+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.sprov+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.stkm": { - "source": "iana" - }, - "application/vnd.oma.cab-address-book+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-feature-handler+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-pcc+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-subs-invite+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-user-prefs+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.dcd": { - "source": "iana" - }, - "application/vnd.oma.dcdc": { - "source": "iana" - }, - "application/vnd.oma.dd2+xml": { - "source": "iana", - "compressible": true, - "extensions": ["dd2"] - }, - "application/vnd.oma.drm.risd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.group-usage-list+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.lwm2m+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.lwm2m+tlv": { - "source": "iana" - }, - "application/vnd.oma.pal+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.detailed-progress-report+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.final-report+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.groups+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.invocation-descriptor+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.optimized-progress-report+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.push": { - "source": "iana" - }, - "application/vnd.oma.scidm.messages+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.xcap-directory+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.omads-email+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.omads-file+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.omads-folder+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.omaloc-supl-init": { - "source": "iana" - }, - "application/vnd.onepager": { - "source": "iana" - }, - "application/vnd.onepagertamp": { - "source": "iana" - }, - "application/vnd.onepagertamx": { - "source": "iana" - }, - "application/vnd.onepagertat": { - "source": "iana" - }, - "application/vnd.onepagertatp": { - "source": "iana" - }, - "application/vnd.onepagertatx": { - "source": "iana" - }, - "application/vnd.openblox.game+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openblox.game-binary": { - "source": "iana" - }, - "application/vnd.openeye.oeb": { - "source": "iana" - }, - "application/vnd.openofficeorg.extension": { - "source": "apache", - "extensions": ["oxt"] - }, - "application/vnd.openstreetmap.data+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.custom-properties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawing+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.extended-properties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation": { - "source": "iana", - "compressible": false, - "extensions": ["pptx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide": { - "source": "iana", - "extensions": ["sldx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { - "source": "iana", - "extensions": ["ppsx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.template": { - "source": "iana", - "extensions": ["potx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { - "source": "iana", - "compressible": false, - "extensions": ["xlsx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { - "source": "iana", - "extensions": ["xltx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.theme+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.themeoverride+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.vmldrawing": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { - "source": "iana", - "compressible": false, - "extensions": ["docx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { - "source": "iana", - "extensions": ["dotx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-package.core-properties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-package.relationships+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oracle.resource+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.orange.indata": { - "source": "iana" - }, - "application/vnd.osa.netdeploy": { - "source": "iana" - }, - "application/vnd.osgeo.mapguide.package": { - "source": "iana", - "extensions": ["mgp"] - }, - "application/vnd.osgi.bundle": { - "source": "iana" - }, - "application/vnd.osgi.dp": { - "source": "iana", - "extensions": ["dp"] - }, - "application/vnd.osgi.subsystem": { - "source": "iana", - "extensions": ["esa"] - }, - "application/vnd.otps.ct-kip+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oxli.countgraph": { - "source": "iana" - }, - "application/vnd.pagerduty+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.palm": { - "source": "iana", - "extensions": ["pdb","pqa","oprc"] - }, - "application/vnd.panoply": { - "source": "iana" - }, - "application/vnd.paos.xml": { - "source": "iana" - }, - "application/vnd.patentdive": { - "source": "iana" - }, - "application/vnd.pawaafile": { - "source": "iana", - "extensions": ["paw"] - }, - "application/vnd.pcos": { - "source": "iana" - }, - "application/vnd.pg.format": { - "source": "iana", - "extensions": ["str"] - }, - "application/vnd.pg.osasli": { - "source": "iana", - "extensions": ["ei6"] - }, - "application/vnd.piaccess.application-licence": { - "source": "iana" - }, - "application/vnd.picsel": { - "source": "iana", - "extensions": ["efif"] - }, - "application/vnd.pmi.widget": { - "source": "iana", - "extensions": ["wg"] - }, - "application/vnd.poc.group-advertisement+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.pocketlearn": { - "source": "iana", - "extensions": ["plf"] - }, - "application/vnd.powerbuilder6": { - "source": "iana", - "extensions": ["pbd"] - }, - "application/vnd.powerbuilder6-s": { - "source": "iana" - }, - "application/vnd.powerbuilder7": { - "source": "iana" - }, - "application/vnd.powerbuilder7-s": { - "source": "iana" - }, - "application/vnd.powerbuilder75": { - "source": "iana" - }, - "application/vnd.powerbuilder75-s": { - "source": "iana" - }, - "application/vnd.preminet": { - "source": "iana" - }, - "application/vnd.previewsystems.box": { - "source": "iana", - "extensions": ["box"] - }, - "application/vnd.proteus.magazine": { - "source": "iana", - "extensions": ["mgz"] - }, - "application/vnd.psfs": { - "source": "iana" - }, - "application/vnd.publishare-delta-tree": { - "source": "iana", - "extensions": ["qps"] - }, - "application/vnd.pvi.ptid1": { - "source": "iana", - "extensions": ["ptid"] - }, - "application/vnd.pwg-multiplexed": { - "source": "iana" - }, - "application/vnd.pwg-xhtml-print+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.qualcomm.brew-app-res": { - "source": "iana" - }, - "application/vnd.quarantainenet": { - "source": "iana" - }, - "application/vnd.quark.quarkxpress": { - "source": "iana", - "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] - }, - "application/vnd.quobject-quoxdocument": { - "source": "iana" - }, - "application/vnd.radisys.moml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-conf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-conn+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-dialog+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-stream+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-conf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-base+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-fax-detect+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-group+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-speech+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-transform+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.rainstor.data": { - "source": "iana" - }, - "application/vnd.rapid": { - "source": "iana" - }, - "application/vnd.rar": { - "source": "iana" - }, - "application/vnd.realvnc.bed": { - "source": "iana", - "extensions": ["bed"] - }, - "application/vnd.recordare.musicxml": { - "source": "iana", - "extensions": ["mxl"] - }, - "application/vnd.recordare.musicxml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["musicxml"] - }, - "application/vnd.renlearn.rlprint": { - "source": "iana" - }, - "application/vnd.restful+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.rig.cryptonote": { - "source": "iana", - "extensions": ["cryptonote"] - }, - "application/vnd.rim.cod": { - "source": "apache", - "extensions": ["cod"] - }, - "application/vnd.rn-realmedia": { - "source": "apache", - "extensions": ["rm"] - }, - "application/vnd.rn-realmedia-vbr": { - "source": "apache", - "extensions": ["rmvb"] - }, - "application/vnd.route66.link66+xml": { - "source": "iana", - "compressible": true, - "extensions": ["link66"] - }, - "application/vnd.rs-274x": { - "source": "iana" - }, - "application/vnd.ruckus.download": { - "source": "iana" - }, - "application/vnd.s3sms": { - "source": "iana" - }, - "application/vnd.sailingtracker.track": { - "source": "iana", - "extensions": ["st"] - }, - "application/vnd.sbm.cid": { - "source": "iana" - }, - "application/vnd.sbm.mid2": { - "source": "iana" - }, - "application/vnd.scribus": { - "source": "iana" - }, - "application/vnd.sealed.3df": { - "source": "iana" - }, - "application/vnd.sealed.csf": { - "source": "iana" - }, - "application/vnd.sealed.doc": { - "source": "iana" - }, - "application/vnd.sealed.eml": { - "source": "iana" - }, - "application/vnd.sealed.mht": { - "source": "iana" - }, - "application/vnd.sealed.net": { - "source": "iana" - }, - "application/vnd.sealed.ppt": { - "source": "iana" - }, - "application/vnd.sealed.tiff": { - "source": "iana" - }, - "application/vnd.sealed.xls": { - "source": "iana" - }, - "application/vnd.sealedmedia.softseal.html": { - "source": "iana" - }, - "application/vnd.sealedmedia.softseal.pdf": { - "source": "iana" - }, - "application/vnd.seemail": { - "source": "iana", - "extensions": ["see"] - }, - "application/vnd.sema": { - "source": "iana", - "extensions": ["sema"] - }, - "application/vnd.semd": { - "source": "iana", - "extensions": ["semd"] - }, - "application/vnd.semf": { - "source": "iana", - "extensions": ["semf"] - }, - "application/vnd.shana.informed.formdata": { - "source": "iana", - "extensions": ["ifm"] - }, - "application/vnd.shana.informed.formtemplate": { - "source": "iana", - "extensions": ["itp"] - }, - "application/vnd.shana.informed.interchange": { - "source": "iana", - "extensions": ["iif"] - }, - "application/vnd.shana.informed.package": { - "source": "iana", - "extensions": ["ipk"] - }, - "application/vnd.shootproof+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.sigrok.session": { - "source": "iana" - }, - "application/vnd.simtech-mindmapper": { - "source": "iana", - "extensions": ["twd","twds"] - }, - "application/vnd.siren+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.smaf": { - "source": "iana", - "extensions": ["mmf"] - }, - "application/vnd.smart.notebook": { - "source": "iana" - }, - "application/vnd.smart.teacher": { - "source": "iana", - "extensions": ["teacher"] - }, - "application/vnd.software602.filler.form+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.software602.filler.form-xml-zip": { - "source": "iana" - }, - "application/vnd.solent.sdkm+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sdkm","sdkd"] - }, - "application/vnd.spotfire.dxp": { - "source": "iana", - "extensions": ["dxp"] - }, - "application/vnd.spotfire.sfs": { - "source": "iana", - "extensions": ["sfs"] - }, - "application/vnd.sqlite3": { - "source": "iana" - }, - "application/vnd.sss-cod": { - "source": "iana" - }, - "application/vnd.sss-dtf": { - "source": "iana" - }, - "application/vnd.sss-ntf": { - "source": "iana" - }, - "application/vnd.stardivision.calc": { - "source": "apache", - "extensions": ["sdc"] - }, - "application/vnd.stardivision.draw": { - "source": "apache", - "extensions": ["sda"] - }, - "application/vnd.stardivision.impress": { - "source": "apache", - "extensions": ["sdd"] - }, - "application/vnd.stardivision.math": { - "source": "apache", - "extensions": ["smf"] - }, - "application/vnd.stardivision.writer": { - "source": "apache", - "extensions": ["sdw","vor"] - }, - "application/vnd.stardivision.writer-global": { - "source": "apache", - "extensions": ["sgl"] - }, - "application/vnd.stepmania.package": { - "source": "iana", - "extensions": ["smzip"] - }, - "application/vnd.stepmania.stepchart": { - "source": "iana", - "extensions": ["sm"] - }, - "application/vnd.street-stream": { - "source": "iana" - }, - "application/vnd.sun.wadl+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wadl"] - }, - "application/vnd.sun.xml.calc": { - "source": "apache", - "extensions": ["sxc"] - }, - "application/vnd.sun.xml.calc.template": { - "source": "apache", - "extensions": ["stc"] - }, - "application/vnd.sun.xml.draw": { - "source": "apache", - "extensions": ["sxd"] - }, - "application/vnd.sun.xml.draw.template": { - "source": "apache", - "extensions": ["std"] - }, - "application/vnd.sun.xml.impress": { - "source": "apache", - "extensions": ["sxi"] - }, - "application/vnd.sun.xml.impress.template": { - "source": "apache", - "extensions": ["sti"] - }, - "application/vnd.sun.xml.math": { - "source": "apache", - "extensions": ["sxm"] - }, - "application/vnd.sun.xml.writer": { - "source": "apache", - "extensions": ["sxw"] - }, - "application/vnd.sun.xml.writer.global": { - "source": "apache", - "extensions": ["sxg"] - }, - "application/vnd.sun.xml.writer.template": { - "source": "apache", - "extensions": ["stw"] - }, - "application/vnd.sus-calendar": { - "source": "iana", - "extensions": ["sus","susp"] - }, - "application/vnd.svd": { - "source": "iana", - "extensions": ["svd"] - }, - "application/vnd.swiftview-ics": { - "source": "iana" - }, - "application/vnd.symbian.install": { - "source": "apache", - "extensions": ["sis","sisx"] - }, - "application/vnd.syncml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xsm"] - }, - "application/vnd.syncml.dm+wbxml": { - "source": "iana", - "extensions": ["bdm"] - }, - "application/vnd.syncml.dm+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xdm"] - }, - "application/vnd.syncml.dm.notification": { - "source": "iana" - }, - "application/vnd.syncml.dmddf+wbxml": { - "source": "iana" - }, - "application/vnd.syncml.dmddf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.syncml.dmtnds+wbxml": { - "source": "iana" - }, - "application/vnd.syncml.dmtnds+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.syncml.ds.notification": { - "source": "iana" - }, - "application/vnd.tableschema+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.tao.intent-module-archive": { - "source": "iana", - "extensions": ["tao"] - }, - "application/vnd.tcpdump.pcap": { - "source": "iana", - "extensions": ["pcap","cap","dmp"] - }, - "application/vnd.think-cell.ppttc+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.tmd.mediaflex.api+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.tml": { - "source": "iana" - }, - "application/vnd.tmobile-livetv": { - "source": "iana", - "extensions": ["tmo"] - }, - "application/vnd.tri.onesource": { - "source": "iana" - }, - "application/vnd.trid.tpt": { - "source": "iana", - "extensions": ["tpt"] - }, - "application/vnd.triscape.mxs": { - "source": "iana", - "extensions": ["mxs"] - }, - "application/vnd.trueapp": { - "source": "iana", - "extensions": ["tra"] - }, - "application/vnd.truedoc": { - "source": "iana" - }, - "application/vnd.ubisoft.webplayer": { - "source": "iana" - }, - "application/vnd.ufdl": { - "source": "iana", - "extensions": ["ufd","ufdl"] - }, - "application/vnd.uiq.theme": { - "source": "iana", - "extensions": ["utz"] - }, - "application/vnd.umajin": { - "source": "iana", - "extensions": ["umj"] - }, - "application/vnd.unity": { - "source": "iana", - "extensions": ["unityweb"] - }, - "application/vnd.uoml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["uoml"] - }, - "application/vnd.uplanet.alert": { - "source": "iana" - }, - "application/vnd.uplanet.alert-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.bearer-choice": { - "source": "iana" - }, - "application/vnd.uplanet.bearer-choice-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.cacheop": { - "source": "iana" - }, - "application/vnd.uplanet.cacheop-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.channel": { - "source": "iana" - }, - "application/vnd.uplanet.channel-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.list": { - "source": "iana" - }, - "application/vnd.uplanet.list-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.listcmd": { - "source": "iana" - }, - "application/vnd.uplanet.listcmd-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.signal": { - "source": "iana" - }, - "application/vnd.uri-map": { - "source": "iana" - }, - "application/vnd.valve.source.material": { - "source": "iana" - }, - "application/vnd.vcx": { - "source": "iana", - "extensions": ["vcx"] - }, - "application/vnd.vd-study": { - "source": "iana" - }, - "application/vnd.vectorworks": { - "source": "iana" - }, - "application/vnd.vel+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.verimatrix.vcas": { - "source": "iana" - }, - "application/vnd.vidsoft.vidconference": { - "source": "iana" - }, - "application/vnd.visio": { - "source": "iana", - "extensions": ["vsd","vst","vss","vsw"] - }, - "application/vnd.visionary": { - "source": "iana", - "extensions": ["vis"] - }, - "application/vnd.vividence.scriptfile": { - "source": "iana" - }, - "application/vnd.vsf": { - "source": "iana", - "extensions": ["vsf"] - }, - "application/vnd.wap.sic": { - "source": "iana" - }, - "application/vnd.wap.slc": { - "source": "iana" - }, - "application/vnd.wap.wbxml": { - "source": "iana", - "extensions": ["wbxml"] - }, - "application/vnd.wap.wmlc": { - "source": "iana", - "extensions": ["wmlc"] - }, - "application/vnd.wap.wmlscriptc": { - "source": "iana", - "extensions": ["wmlsc"] - }, - "application/vnd.webturbo": { - "source": "iana", - "extensions": ["wtb"] - }, - "application/vnd.wfa.p2p": { - "source": "iana" - }, - "application/vnd.wfa.wsc": { - "source": "iana" - }, - "application/vnd.windows.devicepairing": { - "source": "iana" - }, - "application/vnd.wmc": { - "source": "iana" - }, - "application/vnd.wmf.bootstrap": { - "source": "iana" - }, - "application/vnd.wolfram.mathematica": { - "source": "iana" - }, - "application/vnd.wolfram.mathematica.package": { - "source": "iana" - }, - "application/vnd.wolfram.player": { - "source": "iana", - "extensions": ["nbp"] - }, - "application/vnd.wordperfect": { - "source": "iana", - "extensions": ["wpd"] - }, - "application/vnd.wqd": { - "source": "iana", - "extensions": ["wqd"] - }, - "application/vnd.wrq-hp3000-labelled": { - "source": "iana" - }, - "application/vnd.wt.stf": { - "source": "iana", - "extensions": ["stf"] - }, - "application/vnd.wv.csp+wbxml": { - "source": "iana" - }, - "application/vnd.wv.csp+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.wv.ssp+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.xacml+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.xara": { - "source": "iana", - "extensions": ["xar"] - }, - "application/vnd.xfdl": { - "source": "iana", - "extensions": ["xfdl"] - }, - "application/vnd.xfdl.webform": { - "source": "iana" - }, - "application/vnd.xmi+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.xmpie.cpkg": { - "source": "iana" - }, - "application/vnd.xmpie.dpkg": { - "source": "iana" - }, - "application/vnd.xmpie.plan": { - "source": "iana" - }, - "application/vnd.xmpie.ppkg": { - "source": "iana" - }, - "application/vnd.xmpie.xlim": { - "source": "iana" - }, - "application/vnd.yamaha.hv-dic": { - "source": "iana", - "extensions": ["hvd"] - }, - "application/vnd.yamaha.hv-script": { - "source": "iana", - "extensions": ["hvs"] - }, - "application/vnd.yamaha.hv-voice": { - "source": "iana", - "extensions": ["hvp"] - }, - "application/vnd.yamaha.openscoreformat": { - "source": "iana", - "extensions": ["osf"] - }, - "application/vnd.yamaha.openscoreformat.osfpvg+xml": { - "source": "iana", - "compressible": true, - "extensions": ["osfpvg"] - }, - "application/vnd.yamaha.remote-setup": { - "source": "iana" - }, - "application/vnd.yamaha.smaf-audio": { - "source": "iana", - "extensions": ["saf"] - }, - "application/vnd.yamaha.smaf-phrase": { - "source": "iana", - "extensions": ["spf"] - }, - "application/vnd.yamaha.through-ngn": { - "source": "iana" - }, - "application/vnd.yamaha.tunnel-udpencap": { - "source": "iana" - }, - "application/vnd.yaoweme": { - "source": "iana" - }, - "application/vnd.yellowriver-custom-menu": { - "source": "iana", - "extensions": ["cmp"] - }, - "application/vnd.youtube.yt": { - "source": "iana" - }, - "application/vnd.zul": { - "source": "iana", - "extensions": ["zir","zirz"] - }, - "application/vnd.zzazz.deck+xml": { - "source": "iana", - "compressible": true, - "extensions": ["zaz"] - }, - "application/voicexml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["vxml"] - }, - "application/voucher-cms+json": { - "source": "iana", - "compressible": true - }, - "application/vq-rtcpxr": { - "source": "iana" - }, - "application/wasm": { - "compressible": true, - "extensions": ["wasm"] - }, - "application/watcherinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/webpush-options+json": { - "source": "iana", - "compressible": true - }, - "application/whoispp-query": { - "source": "iana" - }, - "application/whoispp-response": { - "source": "iana" - }, - "application/widget": { - "source": "iana", - "extensions": ["wgt"] - }, - "application/winhlp": { - "source": "apache", - "extensions": ["hlp"] - }, - "application/wita": { - "source": "iana" - }, - "application/wordperfect5.1": { - "source": "iana" - }, - "application/wsdl+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wsdl"] - }, - "application/wspolicy+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wspolicy"] - }, - "application/x-7z-compressed": { - "source": "apache", - "compressible": false, - "extensions": ["7z"] - }, - "application/x-abiword": { - "source": "apache", - "extensions": ["abw"] - }, - "application/x-ace-compressed": { - "source": "apache", - "extensions": ["ace"] - }, - "application/x-amf": { - "source": "apache" - }, - "application/x-apple-diskimage": { - "source": "apache", - "extensions": ["dmg"] - }, - "application/x-arj": { - "compressible": false, - "extensions": ["arj"] - }, - "application/x-authorware-bin": { - "source": "apache", - "extensions": ["aab","x32","u32","vox"] - }, - "application/x-authorware-map": { - "source": "apache", - "extensions": ["aam"] - }, - "application/x-authorware-seg": { - "source": "apache", - "extensions": ["aas"] - }, - "application/x-bcpio": { - "source": "apache", - "extensions": ["bcpio"] - }, - "application/x-bdoc": { - "compressible": false, - "extensions": ["bdoc"] - }, - "application/x-bittorrent": { - "source": "apache", - "extensions": ["torrent"] - }, - "application/x-blorb": { - "source": "apache", - "extensions": ["blb","blorb"] - }, - "application/x-bzip": { - "source": "apache", - "compressible": false, - "extensions": ["bz"] - }, - "application/x-bzip2": { - "source": "apache", - "compressible": false, - "extensions": ["bz2","boz"] - }, - "application/x-cbr": { - "source": "apache", - "extensions": ["cbr","cba","cbt","cbz","cb7"] - }, - "application/x-cdlink": { - "source": "apache", - "extensions": ["vcd"] - }, - "application/x-cfs-compressed": { - "source": "apache", - "extensions": ["cfs"] - }, - "application/x-chat": { - "source": "apache", - "extensions": ["chat"] - }, - "application/x-chess-pgn": { - "source": "apache", - "extensions": ["pgn"] - }, - "application/x-chrome-extension": { - "extensions": ["crx"] - }, - "application/x-cocoa": { - "source": "nginx", - "extensions": ["cco"] - }, - "application/x-compress": { - "source": "apache" - }, - "application/x-conference": { - "source": "apache", - "extensions": ["nsc"] - }, - "application/x-cpio": { - "source": "apache", - "extensions": ["cpio"] - }, - "application/x-csh": { - "source": "apache", - "extensions": ["csh"] - }, - "application/x-deb": { - "compressible": false - }, - "application/x-debian-package": { - "source": "apache", - "extensions": ["deb","udeb"] - }, - "application/x-dgc-compressed": { - "source": "apache", - "extensions": ["dgc"] - }, - "application/x-director": { - "source": "apache", - "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] - }, - "application/x-doom": { - "source": "apache", - "extensions": ["wad"] - }, - "application/x-dtbncx+xml": { - "source": "apache", - "compressible": true, - "extensions": ["ncx"] - }, - "application/x-dtbook+xml": { - "source": "apache", - "compressible": true, - "extensions": ["dtb"] - }, - "application/x-dtbresource+xml": { - "source": "apache", - "compressible": true, - "extensions": ["res"] - }, - "application/x-dvi": { - "source": "apache", - "compressible": false, - "extensions": ["dvi"] - }, - "application/x-envoy": { - "source": "apache", - "extensions": ["evy"] - }, - "application/x-eva": { - "source": "apache", - "extensions": ["eva"] - }, - "application/x-font-bdf": { - "source": "apache", - "extensions": ["bdf"] - }, - "application/x-font-dos": { - "source": "apache" - }, - "application/x-font-framemaker": { - "source": "apache" - }, - "application/x-font-ghostscript": { - "source": "apache", - "extensions": ["gsf"] - }, - "application/x-font-libgrx": { - "source": "apache" - }, - "application/x-font-linux-psf": { - "source": "apache", - "extensions": ["psf"] - }, - "application/x-font-pcf": { - "source": "apache", - "extensions": ["pcf"] - }, - "application/x-font-snf": { - "source": "apache", - "extensions": ["snf"] - }, - "application/x-font-speedo": { - "source": "apache" - }, - "application/x-font-sunos-news": { - "source": "apache" - }, - "application/x-font-type1": { - "source": "apache", - "extensions": ["pfa","pfb","pfm","afm"] - }, - "application/x-font-vfont": { - "source": "apache" - }, - "application/x-freearc": { - "source": "apache", - "extensions": ["arc"] - }, - "application/x-futuresplash": { - "source": "apache", - "extensions": ["spl"] - }, - "application/x-gca-compressed": { - "source": "apache", - "extensions": ["gca"] - }, - "application/x-glulx": { - "source": "apache", - "extensions": ["ulx"] - }, - "application/x-gnumeric": { - "source": "apache", - "extensions": ["gnumeric"] - }, - "application/x-gramps-xml": { - "source": "apache", - "extensions": ["gramps"] - }, - "application/x-gtar": { - "source": "apache", - "extensions": ["gtar"] - }, - "application/x-gzip": { - "source": "apache" - }, - "application/x-hdf": { - "source": "apache", - "extensions": ["hdf"] - }, - "application/x-httpd-php": { - "compressible": true, - "extensions": ["php"] - }, - "application/x-install-instructions": { - "source": "apache", - "extensions": ["install"] - }, - "application/x-iso9660-image": { - "source": "apache", - "extensions": ["iso"] - }, - "application/x-java-archive-diff": { - "source": "nginx", - "extensions": ["jardiff"] - }, - "application/x-java-jnlp-file": { - "source": "apache", - "compressible": false, - "extensions": ["jnlp"] - }, - "application/x-javascript": { - "compressible": true - }, - "application/x-latex": { - "source": "apache", - "compressible": false, - "extensions": ["latex"] - }, - "application/x-lua-bytecode": { - "extensions": ["luac"] - }, - "application/x-lzh-compressed": { - "source": "apache", - "extensions": ["lzh","lha"] - }, - "application/x-makeself": { - "source": "nginx", - "extensions": ["run"] - }, - "application/x-mie": { - "source": "apache", - "extensions": ["mie"] - }, - "application/x-mobipocket-ebook": { - "source": "apache", - "extensions": ["prc","mobi"] - }, - "application/x-mpegurl": { - "compressible": false - }, - "application/x-ms-application": { - "source": "apache", - "extensions": ["application"] - }, - "application/x-ms-shortcut": { - "source": "apache", - "extensions": ["lnk"] - }, - "application/x-ms-wmd": { - "source": "apache", - "extensions": ["wmd"] - }, - "application/x-ms-wmz": { - "source": "apache", - "extensions": ["wmz"] - }, - "application/x-ms-xbap": { - "source": "apache", - "extensions": ["xbap"] - }, - "application/x-msaccess": { - "source": "apache", - "extensions": ["mdb"] - }, - "application/x-msbinder": { - "source": "apache", - "extensions": ["obd"] - }, - "application/x-mscardfile": { - "source": "apache", - "extensions": ["crd"] - }, - "application/x-msclip": { - "source": "apache", - "extensions": ["clp"] - }, - "application/x-msdos-program": { - "extensions": ["exe"] - }, - "application/x-msdownload": { - "source": "apache", - "extensions": ["exe","dll","com","bat","msi"] - }, - "application/x-msmediaview": { - "source": "apache", - "extensions": ["mvb","m13","m14"] - }, - "application/x-msmetafile": { - "source": "apache", - "extensions": ["wmf","wmz","emf","emz"] - }, - "application/x-msmoney": { - "source": "apache", - "extensions": ["mny"] - }, - "application/x-mspublisher": { - "source": "apache", - "extensions": ["pub"] - }, - "application/x-msschedule": { - "source": "apache", - "extensions": ["scd"] - }, - "application/x-msterminal": { - "source": "apache", - "extensions": ["trm"] - }, - "application/x-mswrite": { - "source": "apache", - "extensions": ["wri"] - }, - "application/x-netcdf": { - "source": "apache", - "extensions": ["nc","cdf"] - }, - "application/x-ns-proxy-autoconfig": { - "compressible": true, - "extensions": ["pac"] - }, - "application/x-nzb": { - "source": "apache", - "extensions": ["nzb"] - }, - "application/x-perl": { - "source": "nginx", - "extensions": ["pl","pm"] - }, - "application/x-pilot": { - "source": "nginx", - "extensions": ["prc","pdb"] - }, - "application/x-pkcs12": { - "source": "apache", - "compressible": false, - "extensions": ["p12","pfx"] - }, - "application/x-pkcs7-certificates": { - "source": "apache", - "extensions": ["p7b","spc"] - }, - "application/x-pkcs7-certreqresp": { - "source": "apache", - "extensions": ["p7r"] - }, - "application/x-rar-compressed": { - "source": "apache", - "compressible": false, - "extensions": ["rar"] - }, - "application/x-redhat-package-manager": { - "source": "nginx", - "extensions": ["rpm"] - }, - "application/x-research-info-systems": { - "source": "apache", - "extensions": ["ris"] - }, - "application/x-sea": { - "source": "nginx", - "extensions": ["sea"] - }, - "application/x-sh": { - "source": "apache", - "compressible": true, - "extensions": ["sh"] - }, - "application/x-shar": { - "source": "apache", - "extensions": ["shar"] - }, - "application/x-shockwave-flash": { - "source": "apache", - "compressible": false, - "extensions": ["swf"] - }, - "application/x-silverlight-app": { - "source": "apache", - "extensions": ["xap"] - }, - "application/x-sql": { - "source": "apache", - "extensions": ["sql"] - }, - "application/x-stuffit": { - "source": "apache", - "compressible": false, - "extensions": ["sit"] - }, - "application/x-stuffitx": { - "source": "apache", - "extensions": ["sitx"] - }, - "application/x-subrip": { - "source": "apache", - "extensions": ["srt"] - }, - "application/x-sv4cpio": { - "source": "apache", - "extensions": ["sv4cpio"] - }, - "application/x-sv4crc": { - "source": "apache", - "extensions": ["sv4crc"] - }, - "application/x-t3vm-image": { - "source": "apache", - "extensions": ["t3"] - }, - "application/x-tads": { - "source": "apache", - "extensions": ["gam"] - }, - "application/x-tar": { - "source": "apache", - "compressible": true, - "extensions": ["tar"] - }, - "application/x-tcl": { - "source": "apache", - "extensions": ["tcl","tk"] - }, - "application/x-tex": { - "source": "apache", - "extensions": ["tex"] - }, - "application/x-tex-tfm": { - "source": "apache", - "extensions": ["tfm"] - }, - "application/x-texinfo": { - "source": "apache", - "extensions": ["texinfo","texi"] - }, - "application/x-tgif": { - "source": "apache", - "extensions": ["obj"] - }, - "application/x-ustar": { - "source": "apache", - "extensions": ["ustar"] - }, - "application/x-virtualbox-hdd": { - "compressible": true, - "extensions": ["hdd"] - }, - "application/x-virtualbox-ova": { - "compressible": true, - "extensions": ["ova"] - }, - "application/x-virtualbox-ovf": { - "compressible": true, - "extensions": ["ovf"] - }, - "application/x-virtualbox-vbox": { - "compressible": true, - "extensions": ["vbox"] - }, - "application/x-virtualbox-vbox-extpack": { - "compressible": false, - "extensions": ["vbox-extpack"] - }, - "application/x-virtualbox-vdi": { - "compressible": true, - "extensions": ["vdi"] - }, - "application/x-virtualbox-vhd": { - "compressible": true, - "extensions": ["vhd"] - }, - "application/x-virtualbox-vmdk": { - "compressible": true, - "extensions": ["vmdk"] - }, - "application/x-wais-source": { - "source": "apache", - "extensions": ["src"] - }, - "application/x-web-app-manifest+json": { - "compressible": true, - "extensions": ["webapp"] - }, - "application/x-www-form-urlencoded": { - "source": "iana", - "compressible": true - }, - "application/x-x509-ca-cert": { - "source": "apache", - "extensions": ["der","crt","pem"] - }, - "application/x-xfig": { - "source": "apache", - "extensions": ["fig"] - }, - "application/x-xliff+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xlf"] - }, - "application/x-xpinstall": { - "source": "apache", - "compressible": false, - "extensions": ["xpi"] - }, - "application/x-xz": { - "source": "apache", - "extensions": ["xz"] - }, - "application/x-zmachine": { - "source": "apache", - "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] - }, - "application/x400-bp": { - "source": "iana" - }, - "application/xacml+xml": { - "source": "iana", - "compressible": true - }, - "application/xaml+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xaml"] - }, - "application/xcap-att+xml": { - "source": "iana", - "compressible": true - }, - "application/xcap-caps+xml": { - "source": "iana", - "compressible": true - }, - "application/xcap-diff+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xdf"] - }, - "application/xcap-el+xml": { - "source": "iana", - "compressible": true - }, - "application/xcap-error+xml": { - "source": "iana", - "compressible": true - }, - "application/xcap-ns+xml": { - "source": "iana", - "compressible": true - }, - "application/xcon-conference-info+xml": { - "source": "iana", - "compressible": true - }, - "application/xcon-conference-info-diff+xml": { - "source": "iana", - "compressible": true - }, - "application/xenc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xenc"] - }, - "application/xhtml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xhtml","xht"] - }, - "application/xhtml-voice+xml": { - "source": "apache", - "compressible": true - }, - "application/xliff+xml": { - "source": "iana", - "compressible": true - }, - "application/xml": { - "source": "iana", - "compressible": true, - "extensions": ["xml","xsl","xsd","rng"] - }, - "application/xml-dtd": { - "source": "iana", - "compressible": true, - "extensions": ["dtd"] - }, - "application/xml-external-parsed-entity": { - "source": "iana" - }, - "application/xml-patch+xml": { - "source": "iana", - "compressible": true - }, - "application/xmpp+xml": { - "source": "iana", - "compressible": true - }, - "application/xop+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xop"] - }, - "application/xproc+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xpl"] - }, - "application/xslt+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xslt"] - }, - "application/xspf+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xspf"] - }, - "application/xv+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mxml","xhvml","xvml","xvm"] - }, - "application/yang": { - "source": "iana", - "extensions": ["yang"] - }, - "application/yang-data+json": { - "source": "iana", - "compressible": true - }, - "application/yang-data+xml": { - "source": "iana", - "compressible": true - }, - "application/yang-patch+json": { - "source": "iana", - "compressible": true - }, - "application/yang-patch+xml": { - "source": "iana", - "compressible": true - }, - "application/yin+xml": { - "source": "iana", - "compressible": true, - "extensions": ["yin"] - }, - "application/zip": { - "source": "iana", - "compressible": false, - "extensions": ["zip"] - }, - "application/zlib": { - "source": "iana" - }, - "application/zstd": { - "source": "iana" - }, - "audio/1d-interleaved-parityfec": { - "source": "iana" - }, - "audio/32kadpcm": { - "source": "iana" - }, - "audio/3gpp": { - "source": "iana", - "compressible": false, - "extensions": ["3gpp"] - }, - "audio/3gpp2": { - "source": "iana" - }, - "audio/aac": { - "source": "iana" - }, - "audio/ac3": { - "source": "iana" - }, - "audio/adpcm": { - "source": "apache", - "extensions": ["adp"] - }, - "audio/amr": { - "source": "iana" - }, - "audio/amr-wb": { - "source": "iana" - }, - "audio/amr-wb+": { - "source": "iana" - }, - "audio/aptx": { - "source": "iana" - }, - "audio/asc": { - "source": "iana" - }, - "audio/atrac-advanced-lossless": { - "source": "iana" - }, - "audio/atrac-x": { - "source": "iana" - }, - "audio/atrac3": { - "source": "iana" - }, - "audio/basic": { - "source": "iana", - "compressible": false, - "extensions": ["au","snd"] - }, - "audio/bv16": { - "source": "iana" - }, - "audio/bv32": { - "source": "iana" - }, - "audio/clearmode": { - "source": "iana" - }, - "audio/cn": { - "source": "iana" - }, - "audio/dat12": { - "source": "iana" - }, - "audio/dls": { - "source": "iana" - }, - "audio/dsr-es201108": { - "source": "iana" - }, - "audio/dsr-es202050": { - "source": "iana" - }, - "audio/dsr-es202211": { - "source": "iana" - }, - "audio/dsr-es202212": { - "source": "iana" - }, - "audio/dv": { - "source": "iana" - }, - "audio/dvi4": { - "source": "iana" - }, - "audio/eac3": { - "source": "iana" - }, - "audio/encaprtp": { - "source": "iana" - }, - "audio/evrc": { - "source": "iana" - }, - "audio/evrc-qcp": { - "source": "iana" - }, - "audio/evrc0": { - "source": "iana" - }, - "audio/evrc1": { - "source": "iana" - }, - "audio/evrcb": { - "source": "iana" - }, - "audio/evrcb0": { - "source": "iana" - }, - "audio/evrcb1": { - "source": "iana" - }, - "audio/evrcnw": { - "source": "iana" - }, - "audio/evrcnw0": { - "source": "iana" - }, - "audio/evrcnw1": { - "source": "iana" - }, - "audio/evrcwb": { - "source": "iana" - }, - "audio/evrcwb0": { - "source": "iana" - }, - "audio/evrcwb1": { - "source": "iana" - }, - "audio/evs": { - "source": "iana" - }, - "audio/fwdred": { - "source": "iana" - }, - "audio/g711-0": { - "source": "iana" - }, - "audio/g719": { - "source": "iana" - }, - "audio/g722": { - "source": "iana" - }, - "audio/g7221": { - "source": "iana" - }, - "audio/g723": { - "source": "iana" - }, - "audio/g726-16": { - "source": "iana" - }, - "audio/g726-24": { - "source": "iana" - }, - "audio/g726-32": { - "source": "iana" - }, - "audio/g726-40": { - "source": "iana" - }, - "audio/g728": { - "source": "iana" - }, - "audio/g729": { - "source": "iana" - }, - "audio/g7291": { - "source": "iana" - }, - "audio/g729d": { - "source": "iana" - }, - "audio/g729e": { - "source": "iana" - }, - "audio/gsm": { - "source": "iana" - }, - "audio/gsm-efr": { - "source": "iana" - }, - "audio/gsm-hr-08": { - "source": "iana" - }, - "audio/ilbc": { - "source": "iana" - }, - "audio/ip-mr_v2.5": { - "source": "iana" - }, - "audio/isac": { - "source": "apache" - }, - "audio/l16": { - "source": "iana" - }, - "audio/l20": { - "source": "iana" - }, - "audio/l24": { - "source": "iana", - "compressible": false - }, - "audio/l8": { - "source": "iana" - }, - "audio/lpc": { - "source": "iana" - }, - "audio/melp": { - "source": "iana" - }, - "audio/melp1200": { - "source": "iana" - }, - "audio/melp2400": { - "source": "iana" - }, - "audio/melp600": { - "source": "iana" - }, - "audio/midi": { - "source": "apache", - "extensions": ["mid","midi","kar","rmi"] - }, - "audio/mobile-xmf": { - "source": "iana" - }, - "audio/mp3": { - "compressible": false, - "extensions": ["mp3"] - }, - "audio/mp4": { - "source": "iana", - "compressible": false, - "extensions": ["m4a","mp4a"] - }, - "audio/mp4a-latm": { - "source": "iana" - }, - "audio/mpa": { - "source": "iana" - }, - "audio/mpa-robust": { - "source": "iana" - }, - "audio/mpeg": { - "source": "iana", - "compressible": false, - "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] - }, - "audio/mpeg4-generic": { - "source": "iana" - }, - "audio/musepack": { - "source": "apache" - }, - "audio/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["oga","ogg","spx"] - }, - "audio/opus": { - "source": "iana" - }, - "audio/parityfec": { - "source": "iana" - }, - "audio/pcma": { - "source": "iana" - }, - "audio/pcma-wb": { - "source": "iana" - }, - "audio/pcmu": { - "source": "iana" - }, - "audio/pcmu-wb": { - "source": "iana" - }, - "audio/prs.sid": { - "source": "iana" - }, - "audio/qcelp": { - "source": "iana" - }, - "audio/raptorfec": { - "source": "iana" - }, - "audio/red": { - "source": "iana" - }, - "audio/rtp-enc-aescm128": { - "source": "iana" - }, - "audio/rtp-midi": { - "source": "iana" - }, - "audio/rtploopback": { - "source": "iana" - }, - "audio/rtx": { - "source": "iana" - }, - "audio/s3m": { - "source": "apache", - "extensions": ["s3m"] - }, - "audio/silk": { - "source": "apache", - "extensions": ["sil"] - }, - "audio/smv": { - "source": "iana" - }, - "audio/smv-qcp": { - "source": "iana" - }, - "audio/smv0": { - "source": "iana" - }, - "audio/sp-midi": { - "source": "iana" - }, - "audio/speex": { - "source": "iana" - }, - "audio/t140c": { - "source": "iana" - }, - "audio/t38": { - "source": "iana" - }, - "audio/telephone-event": { - "source": "iana" - }, - "audio/tone": { - "source": "iana" - }, - "audio/uemclip": { - "source": "iana" - }, - "audio/ulpfec": { - "source": "iana" - }, - "audio/usac": { - "source": "iana" - }, - "audio/vdvi": { - "source": "iana" - }, - "audio/vmr-wb": { - "source": "iana" - }, - "audio/vnd.3gpp.iufp": { - "source": "iana" - }, - "audio/vnd.4sb": { - "source": "iana" - }, - "audio/vnd.audiokoz": { - "source": "iana" - }, - "audio/vnd.celp": { - "source": "iana" - }, - "audio/vnd.cisco.nse": { - "source": "iana" - }, - "audio/vnd.cmles.radio-events": { - "source": "iana" - }, - "audio/vnd.cns.anp1": { - "source": "iana" - }, - "audio/vnd.cns.inf1": { - "source": "iana" - }, - "audio/vnd.dece.audio": { - "source": "iana", - "extensions": ["uva","uvva"] - }, - "audio/vnd.digital-winds": { - "source": "iana", - "extensions": ["eol"] - }, - "audio/vnd.dlna.adts": { - "source": "iana" - }, - "audio/vnd.dolby.heaac.1": { - "source": "iana" - }, - "audio/vnd.dolby.heaac.2": { - "source": "iana" - }, - "audio/vnd.dolby.mlp": { - "source": "iana" - }, - "audio/vnd.dolby.mps": { - "source": "iana" - }, - "audio/vnd.dolby.pl2": { - "source": "iana" - }, - "audio/vnd.dolby.pl2x": { - "source": "iana" - }, - "audio/vnd.dolby.pl2z": { - "source": "iana" - }, - "audio/vnd.dolby.pulse.1": { - "source": "iana" - }, - "audio/vnd.dra": { - "source": "iana", - "extensions": ["dra"] - }, - "audio/vnd.dts": { - "source": "iana", - "extensions": ["dts"] - }, - "audio/vnd.dts.hd": { - "source": "iana", - "extensions": ["dtshd"] - }, - "audio/vnd.dvb.file": { - "source": "iana" - }, - "audio/vnd.everad.plj": { - "source": "iana" - }, - "audio/vnd.hns.audio": { - "source": "iana" - }, - "audio/vnd.lucent.voice": { - "source": "iana", - "extensions": ["lvp"] - }, - "audio/vnd.ms-playready.media.pya": { - "source": "iana", - "extensions": ["pya"] - }, - "audio/vnd.nokia.mobile-xmf": { - "source": "iana" - }, - "audio/vnd.nortel.vbk": { - "source": "iana" - }, - "audio/vnd.nuera.ecelp4800": { - "source": "iana", - "extensions": ["ecelp4800"] - }, - "audio/vnd.nuera.ecelp7470": { - "source": "iana", - "extensions": ["ecelp7470"] - }, - "audio/vnd.nuera.ecelp9600": { - "source": "iana", - "extensions": ["ecelp9600"] - }, - "audio/vnd.octel.sbc": { - "source": "iana" - }, - "audio/vnd.presonus.multitrack": { - "source": "iana" - }, - "audio/vnd.qcelp": { - "source": "iana" - }, - "audio/vnd.rhetorex.32kadpcm": { - "source": "iana" - }, - "audio/vnd.rip": { - "source": "iana", - "extensions": ["rip"] - }, - "audio/vnd.rn-realaudio": { - "compressible": false - }, - "audio/vnd.sealedmedia.softseal.mpeg": { - "source": "iana" - }, - "audio/vnd.vmx.cvsd": { - "source": "iana" - }, - "audio/vnd.wave": { - "compressible": false - }, - "audio/vorbis": { - "source": "iana", - "compressible": false - }, - "audio/vorbis-config": { - "source": "iana" - }, - "audio/wav": { - "compressible": false, - "extensions": ["wav"] - }, - "audio/wave": { - "compressible": false, - "extensions": ["wav"] - }, - "audio/webm": { - "source": "apache", - "compressible": false, - "extensions": ["weba"] - }, - "audio/x-aac": { - "source": "apache", - "compressible": false, - "extensions": ["aac"] - }, - "audio/x-aiff": { - "source": "apache", - "extensions": ["aif","aiff","aifc"] - }, - "audio/x-caf": { - "source": "apache", - "compressible": false, - "extensions": ["caf"] - }, - "audio/x-flac": { - "source": "apache", - "extensions": ["flac"] - }, - "audio/x-m4a": { - "source": "nginx", - "extensions": ["m4a"] - }, - "audio/x-matroska": { - "source": "apache", - "extensions": ["mka"] - }, - "audio/x-mpegurl": { - "source": "apache", - "extensions": ["m3u"] - }, - "audio/x-ms-wax": { - "source": "apache", - "extensions": ["wax"] - }, - "audio/x-ms-wma": { - "source": "apache", - "extensions": ["wma"] - }, - "audio/x-pn-realaudio": { - "source": "apache", - "extensions": ["ram","ra"] - }, - "audio/x-pn-realaudio-plugin": { - "source": "apache", - "extensions": ["rmp"] - }, - "audio/x-realaudio": { - "source": "nginx", - "extensions": ["ra"] - }, - "audio/x-tta": { - "source": "apache" - }, - "audio/x-wav": { - "source": "apache", - "extensions": ["wav"] - }, - "audio/xm": { - "source": "apache", - "extensions": ["xm"] - }, - "chemical/x-cdx": { - "source": "apache", - "extensions": ["cdx"] - }, - "chemical/x-cif": { - "source": "apache", - "extensions": ["cif"] - }, - "chemical/x-cmdf": { - "source": "apache", - "extensions": ["cmdf"] - }, - "chemical/x-cml": { - "source": "apache", - "extensions": ["cml"] - }, - "chemical/x-csml": { - "source": "apache", - "extensions": ["csml"] - }, - "chemical/x-pdb": { - "source": "apache" - }, - "chemical/x-xyz": { - "source": "apache", - "extensions": ["xyz"] - }, - "font/collection": { - "source": "iana", - "extensions": ["ttc"] - }, - "font/otf": { - "source": "iana", - "compressible": true, - "extensions": ["otf"] - }, - "font/sfnt": { - "source": "iana" - }, - "font/ttf": { - "source": "iana", - "extensions": ["ttf"] - }, - "font/woff": { - "source": "iana", - "extensions": ["woff"] - }, - "font/woff2": { - "source": "iana", - "extensions": ["woff2"] - }, - "image/aces": { - "source": "iana", - "extensions": ["exr"] - }, - "image/apng": { - "compressible": false, - "extensions": ["apng"] - }, - "image/avci": { - "source": "iana" - }, - "image/avcs": { - "source": "iana" - }, - "image/bmp": { - "source": "iana", - "compressible": true, - "extensions": ["bmp"] - }, - "image/cgm": { - "source": "iana", - "extensions": ["cgm"] - }, - "image/dicom-rle": { - "source": "iana", - "extensions": ["drle"] - }, - "image/emf": { - "source": "iana", - "extensions": ["emf"] - }, - "image/fits": { - "source": "iana", - "extensions": ["fits"] - }, - "image/g3fax": { - "source": "iana", - "extensions": ["g3"] - }, - "image/gif": { - "source": "iana", - "compressible": false, - "extensions": ["gif"] - }, - "image/heic": { - "source": "iana", - "extensions": ["heic"] - }, - "image/heic-sequence": { - "source": "iana", - "extensions": ["heics"] - }, - "image/heif": { - "source": "iana", - "extensions": ["heif"] - }, - "image/heif-sequence": { - "source": "iana", - "extensions": ["heifs"] - }, - "image/ief": { - "source": "iana", - "extensions": ["ief"] - }, - "image/jls": { - "source": "iana", - "extensions": ["jls"] - }, - "image/jp2": { - "source": "iana", - "compressible": false, - "extensions": ["jp2","jpg2"] - }, - "image/jpeg": { - "source": "iana", - "compressible": false, - "extensions": ["jpeg","jpg","jpe"] - }, - "image/jpm": { - "source": "iana", - "compressible": false, - "extensions": ["jpm"] - }, - "image/jpx": { - "source": "iana", - "compressible": false, - "extensions": ["jpx","jpf"] - }, - "image/ktx": { - "source": "iana", - "extensions": ["ktx"] - }, - "image/naplps": { - "source": "iana" - }, - "image/pjpeg": { - "compressible": false - }, - "image/png": { - "source": "iana", - "compressible": false, - "extensions": ["png"] - }, - "image/prs.btif": { - "source": "iana", - "extensions": ["btif"] - }, - "image/prs.pti": { - "source": "iana", - "extensions": ["pti"] - }, - "image/pwg-raster": { - "source": "iana" - }, - "image/sgi": { - "source": "apache", - "extensions": ["sgi"] - }, - "image/svg+xml": { - "source": "iana", - "compressible": true, - "extensions": ["svg","svgz"] - }, - "image/t38": { - "source": "iana", - "extensions": ["t38"] - }, - "image/tiff": { - "source": "iana", - "compressible": false, - "extensions": ["tif","tiff"] - }, - "image/tiff-fx": { - "source": "iana", - "extensions": ["tfx"] - }, - "image/vnd.adobe.photoshop": { - "source": "iana", - "compressible": true, - "extensions": ["psd"] - }, - "image/vnd.airzip.accelerator.azv": { - "source": "iana", - "extensions": ["azv"] - }, - "image/vnd.cns.inf2": { - "source": "iana" - }, - "image/vnd.dece.graphic": { - "source": "iana", - "extensions": ["uvi","uvvi","uvg","uvvg"] - }, - "image/vnd.djvu": { - "source": "iana", - "extensions": ["djvu","djv"] - }, - "image/vnd.dvb.subtitle": { - "source": "iana", - "extensions": ["sub"] - }, - "image/vnd.dwg": { - "source": "iana", - "extensions": ["dwg"] - }, - "image/vnd.dxf": { - "source": "iana", - "extensions": ["dxf"] - }, - "image/vnd.fastbidsheet": { - "source": "iana", - "extensions": ["fbs"] - }, - "image/vnd.fpx": { - "source": "iana", - "extensions": ["fpx"] - }, - "image/vnd.fst": { - "source": "iana", - "extensions": ["fst"] - }, - "image/vnd.fujixerox.edmics-mmr": { - "source": "iana", - "extensions": ["mmr"] - }, - "image/vnd.fujixerox.edmics-rlc": { - "source": "iana", - "extensions": ["rlc"] - }, - "image/vnd.globalgraphics.pgb": { - "source": "iana" - }, - "image/vnd.microsoft.icon": { - "source": "iana", - "extensions": ["ico"] - }, - "image/vnd.mix": { - "source": "iana" - }, - "image/vnd.mozilla.apng": { - "source": "iana" - }, - "image/vnd.ms-modi": { - "source": "iana", - "extensions": ["mdi"] - }, - "image/vnd.ms-photo": { - "source": "apache", - "extensions": ["wdp"] - }, - "image/vnd.net-fpx": { - "source": "iana", - "extensions": ["npx"] - }, - "image/vnd.radiance": { - "source": "iana" - }, - "image/vnd.sealed.png": { - "source": "iana" - }, - "image/vnd.sealedmedia.softseal.gif": { - "source": "iana" - }, - "image/vnd.sealedmedia.softseal.jpg": { - "source": "iana" - }, - "image/vnd.svf": { - "source": "iana" - }, - "image/vnd.tencent.tap": { - "source": "iana", - "extensions": ["tap"] - }, - "image/vnd.valve.source.texture": { - "source": "iana", - "extensions": ["vtf"] - }, - "image/vnd.wap.wbmp": { - "source": "iana", - "extensions": ["wbmp"] - }, - "image/vnd.xiff": { - "source": "iana", - "extensions": ["xif"] - }, - "image/vnd.zbrush.pcx": { - "source": "iana", - "extensions": ["pcx"] - }, - "image/webp": { - "source": "apache", - "extensions": ["webp"] - }, - "image/wmf": { - "source": "iana", - "extensions": ["wmf"] - }, - "image/x-3ds": { - "source": "apache", - "extensions": ["3ds"] - }, - "image/x-cmu-raster": { - "source": "apache", - "extensions": ["ras"] - }, - "image/x-cmx": { - "source": "apache", - "extensions": ["cmx"] - }, - "image/x-freehand": { - "source": "apache", - "extensions": ["fh","fhc","fh4","fh5","fh7"] - }, - "image/x-icon": { - "source": "apache", - "compressible": true, - "extensions": ["ico"] - }, - "image/x-jng": { - "source": "nginx", - "extensions": ["jng"] - }, - "image/x-mrsid-image": { - "source": "apache", - "extensions": ["sid"] - }, - "image/x-ms-bmp": { - "source": "nginx", - "compressible": true, - "extensions": ["bmp"] - }, - "image/x-pcx": { - "source": "apache", - "extensions": ["pcx"] - }, - "image/x-pict": { - "source": "apache", - "extensions": ["pic","pct"] - }, - "image/x-portable-anymap": { - "source": "apache", - "extensions": ["pnm"] - }, - "image/x-portable-bitmap": { - "source": "apache", - "extensions": ["pbm"] - }, - "image/x-portable-graymap": { - "source": "apache", - "extensions": ["pgm"] - }, - "image/x-portable-pixmap": { - "source": "apache", - "extensions": ["ppm"] - }, - "image/x-rgb": { - "source": "apache", - "extensions": ["rgb"] - }, - "image/x-tga": { - "source": "apache", - "extensions": ["tga"] - }, - "image/x-xbitmap": { - "source": "apache", - "extensions": ["xbm"] - }, - "image/x-xcf": { - "compressible": false - }, - "image/x-xpixmap": { - "source": "apache", - "extensions": ["xpm"] - }, - "image/x-xwindowdump": { - "source": "apache", - "extensions": ["xwd"] - }, - "message/cpim": { - "source": "iana" - }, - "message/delivery-status": { - "source": "iana" - }, - "message/disposition-notification": { - "source": "iana", - "extensions": [ - "disposition-notification" - ] - }, - "message/external-body": { - "source": "iana" - }, - "message/feedback-report": { - "source": "iana" - }, - "message/global": { - "source": "iana", - "extensions": ["u8msg"] - }, - "message/global-delivery-status": { - "source": "iana", - "extensions": ["u8dsn"] - }, - "message/global-disposition-notification": { - "source": "iana", - "extensions": ["u8mdn"] - }, - "message/global-headers": { - "source": "iana", - "extensions": ["u8hdr"] - }, - "message/http": { - "source": "iana", - "compressible": false - }, - "message/imdn+xml": { - "source": "iana", - "compressible": true - }, - "message/news": { - "source": "iana" - }, - "message/partial": { - "source": "iana", - "compressible": false - }, - "message/rfc822": { - "source": "iana", - "compressible": true, - "extensions": ["eml","mime"] - }, - "message/s-http": { - "source": "iana" - }, - "message/sip": { - "source": "iana" - }, - "message/sipfrag": { - "source": "iana" - }, - "message/tracking-status": { - "source": "iana" - }, - "message/vnd.si.simp": { - "source": "iana" - }, - "message/vnd.wfa.wsc": { - "source": "iana", - "extensions": ["wsc"] - }, - "model/3mf": { - "source": "iana" - }, - "model/gltf+json": { - "source": "iana", - "compressible": true, - "extensions": ["gltf"] - }, - "model/gltf-binary": { - "source": "iana", - "compressible": true, - "extensions": ["glb"] - }, - "model/iges": { - "source": "iana", - "compressible": false, - "extensions": ["igs","iges"] - }, - "model/mesh": { - "source": "iana", - "compressible": false, - "extensions": ["msh","mesh","silo"] - }, - "model/stl": { - "source": "iana" - }, - "model/vnd.collada+xml": { - "source": "iana", - "compressible": true, - "extensions": ["dae"] - }, - "model/vnd.dwf": { - "source": "iana", - "extensions": ["dwf"] - }, - "model/vnd.flatland.3dml": { - "source": "iana" - }, - "model/vnd.gdl": { - "source": "iana", - "extensions": ["gdl"] - }, - "model/vnd.gs-gdl": { - "source": "apache" - }, - "model/vnd.gs.gdl": { - "source": "iana" - }, - "model/vnd.gtw": { - "source": "iana", - "extensions": ["gtw"] - }, - "model/vnd.moml+xml": { - "source": "iana", - "compressible": true - }, - "model/vnd.mts": { - "source": "iana", - "extensions": ["mts"] - }, - "model/vnd.opengex": { - "source": "iana" - }, - "model/vnd.parasolid.transmit.binary": { - "source": "iana" - }, - "model/vnd.parasolid.transmit.text": { - "source": "iana" - }, - "model/vnd.rosette.annotated-data-model": { - "source": "iana" - }, - "model/vnd.usdz+zip": { - "source": "iana", - "compressible": false - }, - "model/vnd.valve.source.compiled-map": { - "source": "iana" - }, - "model/vnd.vtu": { - "source": "iana", - "extensions": ["vtu"] - }, - "model/vrml": { - "source": "iana", - "compressible": false, - "extensions": ["wrl","vrml"] - }, - "model/x3d+binary": { - "source": "apache", - "compressible": false, - "extensions": ["x3db","x3dbz"] - }, - "model/x3d+fastinfoset": { - "source": "iana" - }, - "model/x3d+vrml": { - "source": "apache", - "compressible": false, - "extensions": ["x3dv","x3dvz"] - }, - "model/x3d+xml": { - "source": "iana", - "compressible": true, - "extensions": ["x3d","x3dz"] - }, - "model/x3d-vrml": { - "source": "iana" - }, - "multipart/alternative": { - "source": "iana", - "compressible": false - }, - "multipart/appledouble": { - "source": "iana" - }, - "multipart/byteranges": { - "source": "iana" - }, - "multipart/digest": { - "source": "iana" - }, - "multipart/encrypted": { - "source": "iana", - "compressible": false - }, - "multipart/form-data": { - "source": "iana", - "compressible": false - }, - "multipart/header-set": { - "source": "iana" - }, - "multipart/mixed": { - "source": "iana", - "compressible": false - }, - "multipart/multilingual": { - "source": "iana" - }, - "multipart/parallel": { - "source": "iana" - }, - "multipart/related": { - "source": "iana", - "compressible": false - }, - "multipart/report": { - "source": "iana" - }, - "multipart/signed": { - "source": "iana", - "compressible": false - }, - "multipart/vnd.bint.med-plus": { - "source": "iana" - }, - "multipart/voice-message": { - "source": "iana" - }, - "multipart/x-mixed-replace": { - "source": "iana" - }, - "text/1d-interleaved-parityfec": { - "source": "iana" - }, - "text/cache-manifest": { - "source": "iana", - "compressible": true, - "extensions": ["appcache","manifest"] - }, - "text/calendar": { - "source": "iana", - "extensions": ["ics","ifb"] - }, - "text/calender": { - "compressible": true - }, - "text/cmd": { - "compressible": true - }, - "text/coffeescript": { - "extensions": ["coffee","litcoffee"] - }, - "text/css": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["css"] - }, - "text/csv": { - "source": "iana", - "compressible": true, - "extensions": ["csv"] - }, - "text/csv-schema": { - "source": "iana" - }, - "text/directory": { - "source": "iana" - }, - "text/dns": { - "source": "iana" - }, - "text/ecmascript": { - "source": "iana" - }, - "text/encaprtp": { - "source": "iana" - }, - "text/enriched": { - "source": "iana" - }, - "text/fwdred": { - "source": "iana" - }, - "text/grammar-ref-list": { - "source": "iana" - }, - "text/html": { - "source": "iana", - "compressible": true, - "extensions": ["html","htm","shtml"] - }, - "text/jade": { - "extensions": ["jade"] - }, - "text/javascript": { - "source": "iana", - "compressible": true - }, - "text/jcr-cnd": { - "source": "iana" - }, - "text/jsx": { - "compressible": true, - "extensions": ["jsx"] - }, - "text/less": { - "extensions": ["less"] - }, - "text/markdown": { - "source": "iana", - "compressible": true, - "extensions": ["markdown","md"] - }, - "text/mathml": { - "source": "nginx", - "extensions": ["mml"] - }, - "text/mizar": { - "source": "iana" - }, - "text/n3": { - "source": "iana", - "compressible": true, - "extensions": ["n3"] - }, - "text/parameters": { - "source": "iana" - }, - "text/parityfec": { - "source": "iana" - }, - "text/plain": { - "source": "iana", - "compressible": true, - "extensions": ["txt","text","conf","def","list","log","in","ini"] - }, - "text/provenance-notation": { - "source": "iana" - }, - "text/prs.fallenstein.rst": { - "source": "iana" - }, - "text/prs.lines.tag": { - "source": "iana", - "extensions": ["dsc"] - }, - "text/prs.prop.logic": { - "source": "iana" - }, - "text/raptorfec": { - "source": "iana" - }, - "text/red": { - "source": "iana" - }, - "text/rfc822-headers": { - "source": "iana" - }, - "text/richtext": { - "source": "iana", - "compressible": true, - "extensions": ["rtx"] - }, - "text/rtf": { - "source": "iana", - "compressible": true, - "extensions": ["rtf"] - }, - "text/rtp-enc-aescm128": { - "source": "iana" - }, - "text/rtploopback": { - "source": "iana" - }, - "text/rtx": { - "source": "iana" - }, - "text/sgml": { - "source": "iana", - "extensions": ["sgml","sgm"] - }, - "text/shex": { - "extensions": ["shex"] - }, - "text/slim": { - "extensions": ["slim","slm"] - }, - "text/strings": { - "source": "iana" - }, - "text/stylus": { - "extensions": ["stylus","styl"] - }, - "text/t140": { - "source": "iana" - }, - "text/tab-separated-values": { - "source": "iana", - "compressible": true, - "extensions": ["tsv"] - }, - "text/troff": { - "source": "iana", - "extensions": ["t","tr","roff","man","me","ms"] - }, - "text/turtle": { - "source": "iana", - "charset": "UTF-8", - "extensions": ["ttl"] - }, - "text/ulpfec": { - "source": "iana" - }, - "text/uri-list": { - "source": "iana", - "compressible": true, - "extensions": ["uri","uris","urls"] - }, - "text/vcard": { - "source": "iana", - "compressible": true, - "extensions": ["vcard"] - }, - "text/vnd.a": { - "source": "iana" - }, - "text/vnd.abc": { - "source": "iana" - }, - "text/vnd.ascii-art": { - "source": "iana" - }, - "text/vnd.curl": { - "source": "iana", - "extensions": ["curl"] - }, - "text/vnd.curl.dcurl": { - "source": "apache", - "extensions": ["dcurl"] - }, - "text/vnd.curl.mcurl": { - "source": "apache", - "extensions": ["mcurl"] - }, - "text/vnd.curl.scurl": { - "source": "apache", - "extensions": ["scurl"] - }, - "text/vnd.debian.copyright": { - "source": "iana" - }, - "text/vnd.dmclientscript": { - "source": "iana" - }, - "text/vnd.dvb.subtitle": { - "source": "iana", - "extensions": ["sub"] - }, - "text/vnd.esmertec.theme-descriptor": { - "source": "iana" - }, - "text/vnd.fly": { - "source": "iana", - "extensions": ["fly"] - }, - "text/vnd.fmi.flexstor": { - "source": "iana", - "extensions": ["flx"] - }, - "text/vnd.gml": { - "source": "iana" - }, - "text/vnd.graphviz": { - "source": "iana", - "extensions": ["gv"] - }, - "text/vnd.hgl": { - "source": "iana" - }, - "text/vnd.in3d.3dml": { - "source": "iana", - "extensions": ["3dml"] - }, - "text/vnd.in3d.spot": { - "source": "iana", - "extensions": ["spot"] - }, - "text/vnd.iptc.newsml": { - "source": "iana" - }, - "text/vnd.iptc.nitf": { - "source": "iana" - }, - "text/vnd.latex-z": { - "source": "iana" - }, - "text/vnd.motorola.reflex": { - "source": "iana" - }, - "text/vnd.ms-mediapackage": { - "source": "iana" - }, - "text/vnd.net2phone.commcenter.command": { - "source": "iana" - }, - "text/vnd.radisys.msml-basic-layout": { - "source": "iana" - }, - "text/vnd.si.uricatalogue": { - "source": "iana" - }, - "text/vnd.sun.j2me.app-descriptor": { - "source": "iana", - "extensions": ["jad"] - }, - "text/vnd.trolltech.linguist": { - "source": "iana" - }, - "text/vnd.wap.si": { - "source": "iana" - }, - "text/vnd.wap.sl": { - "source": "iana" - }, - "text/vnd.wap.wml": { - "source": "iana", - "extensions": ["wml"] - }, - "text/vnd.wap.wmlscript": { - "source": "iana", - "extensions": ["wmls"] - }, - "text/vtt": { - "charset": "UTF-8", - "compressible": true, - "extensions": ["vtt"] - }, - "text/x-asm": { - "source": "apache", - "extensions": ["s","asm"] - }, - "text/x-c": { - "source": "apache", - "extensions": ["c","cc","cxx","cpp","h","hh","dic"] - }, - "text/x-component": { - "source": "nginx", - "extensions": ["htc"] - }, - "text/x-fortran": { - "source": "apache", - "extensions": ["f","for","f77","f90"] - }, - "text/x-gwt-rpc": { - "compressible": true - }, - "text/x-handlebars-template": { - "extensions": ["hbs"] - }, - "text/x-java-source": { - "source": "apache", - "extensions": ["java"] - }, - "text/x-jquery-tmpl": { - "compressible": true - }, - "text/x-lua": { - "extensions": ["lua"] - }, - "text/x-markdown": { - "compressible": true, - "extensions": ["mkd"] - }, - "text/x-nfo": { - "source": "apache", - "extensions": ["nfo"] - }, - "text/x-opml": { - "source": "apache", - "extensions": ["opml"] - }, - "text/x-org": { - "compressible": true, - "extensions": ["org"] - }, - "text/x-pascal": { - "source": "apache", - "extensions": ["p","pas"] - }, - "text/x-processing": { - "compressible": true, - "extensions": ["pde"] - }, - "text/x-sass": { - "extensions": ["sass"] - }, - "text/x-scss": { - "extensions": ["scss"] - }, - "text/x-setext": { - "source": "apache", - "extensions": ["etx"] - }, - "text/x-sfv": { - "source": "apache", - "extensions": ["sfv"] - }, - "text/x-suse-ymp": { - "compressible": true, - "extensions": ["ymp"] - }, - "text/x-uuencode": { - "source": "apache", - "extensions": ["uu"] - }, - "text/x-vcalendar": { - "source": "apache", - "extensions": ["vcs"] - }, - "text/x-vcard": { - "source": "apache", - "extensions": ["vcf"] - }, - "text/xml": { - "source": "iana", - "compressible": true, - "extensions": ["xml"] - }, - "text/xml-external-parsed-entity": { - "source": "iana" - }, - "text/yaml": { - "extensions": ["yaml","yml"] - }, - "video/1d-interleaved-parityfec": { - "source": "iana" - }, - "video/3gpp": { - "source": "iana", - "extensions": ["3gp","3gpp"] - }, - "video/3gpp-tt": { - "source": "iana" - }, - "video/3gpp2": { - "source": "iana", - "extensions": ["3g2"] - }, - "video/bmpeg": { - "source": "iana" - }, - "video/bt656": { - "source": "iana" - }, - "video/celb": { - "source": "iana" - }, - "video/dv": { - "source": "iana" - }, - "video/encaprtp": { - "source": "iana" - }, - "video/h261": { - "source": "iana", - "extensions": ["h261"] - }, - "video/h263": { - "source": "iana", - "extensions": ["h263"] - }, - "video/h263-1998": { - "source": "iana" - }, - "video/h263-2000": { - "source": "iana" - }, - "video/h264": { - "source": "iana", - "extensions": ["h264"] - }, - "video/h264-rcdo": { - "source": "iana" - }, - "video/h264-svc": { - "source": "iana" - }, - "video/h265": { - "source": "iana" - }, - "video/iso.segment": { - "source": "iana" - }, - "video/jpeg": { - "source": "iana", - "extensions": ["jpgv"] - }, - "video/jpeg2000": { - "source": "iana" - }, - "video/jpm": { - "source": "apache", - "extensions": ["jpm","jpgm"] - }, - "video/mj2": { - "source": "iana", - "extensions": ["mj2","mjp2"] - }, - "video/mp1s": { - "source": "iana" - }, - "video/mp2p": { - "source": "iana" - }, - "video/mp2t": { - "source": "iana", - "extensions": ["ts"] - }, - "video/mp4": { - "source": "iana", - "compressible": false, - "extensions": ["mp4","mp4v","mpg4"] - }, - "video/mp4v-es": { - "source": "iana" - }, - "video/mpeg": { - "source": "iana", - "compressible": false, - "extensions": ["mpeg","mpg","mpe","m1v","m2v"] - }, - "video/mpeg4-generic": { - "source": "iana" - }, - "video/mpv": { - "source": "iana" - }, - "video/nv": { - "source": "iana" - }, - "video/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["ogv"] - }, - "video/parityfec": { - "source": "iana" - }, - "video/pointer": { - "source": "iana" - }, - "video/quicktime": { - "source": "iana", - "compressible": false, - "extensions": ["qt","mov"] - }, - "video/raptorfec": { - "source": "iana" - }, - "video/raw": { - "source": "iana" - }, - "video/rtp-enc-aescm128": { - "source": "iana" - }, - "video/rtploopback": { - "source": "iana" - }, - "video/rtx": { - "source": "iana" - }, - "video/smpte291": { - "source": "iana" - }, - "video/smpte292m": { - "source": "iana" - }, - "video/ulpfec": { - "source": "iana" - }, - "video/vc1": { - "source": "iana" - }, - "video/vc2": { - "source": "iana" - }, - "video/vnd.cctv": { - "source": "iana" - }, - "video/vnd.dece.hd": { - "source": "iana", - "extensions": ["uvh","uvvh"] - }, - "video/vnd.dece.mobile": { - "source": "iana", - "extensions": ["uvm","uvvm"] - }, - "video/vnd.dece.mp4": { - "source": "iana" - }, - "video/vnd.dece.pd": { - "source": "iana", - "extensions": ["uvp","uvvp"] - }, - "video/vnd.dece.sd": { - "source": "iana", - "extensions": ["uvs","uvvs"] - }, - "video/vnd.dece.video": { - "source": "iana", - "extensions": ["uvv","uvvv"] - }, - "video/vnd.directv.mpeg": { - "source": "iana" - }, - "video/vnd.directv.mpeg-tts": { - "source": "iana" - }, - "video/vnd.dlna.mpeg-tts": { - "source": "iana" - }, - "video/vnd.dvb.file": { - "source": "iana", - "extensions": ["dvb"] - }, - "video/vnd.fvt": { - "source": "iana", - "extensions": ["fvt"] - }, - "video/vnd.hns.video": { - "source": "iana" - }, - "video/vnd.iptvforum.1dparityfec-1010": { - "source": "iana" - }, - "video/vnd.iptvforum.1dparityfec-2005": { - "source": "iana" - }, - "video/vnd.iptvforum.2dparityfec-1010": { - "source": "iana" - }, - "video/vnd.iptvforum.2dparityfec-2005": { - "source": "iana" - }, - "video/vnd.iptvforum.ttsavc": { - "source": "iana" - }, - "video/vnd.iptvforum.ttsmpeg2": { - "source": "iana" - }, - "video/vnd.motorola.video": { - "source": "iana" - }, - "video/vnd.motorola.videop": { - "source": "iana" - }, - "video/vnd.mpegurl": { - "source": "iana", - "extensions": ["mxu","m4u"] - }, - "video/vnd.ms-playready.media.pyv": { - "source": "iana", - "extensions": ["pyv"] - }, - "video/vnd.nokia.interleaved-multimedia": { - "source": "iana" - }, - "video/vnd.nokia.mp4vr": { - "source": "iana" - }, - "video/vnd.nokia.videovoip": { - "source": "iana" - }, - "video/vnd.objectvideo": { - "source": "iana" - }, - "video/vnd.radgamettools.bink": { - "source": "iana" - }, - "video/vnd.radgamettools.smacker": { - "source": "iana" - }, - "video/vnd.sealed.mpeg1": { - "source": "iana" - }, - "video/vnd.sealed.mpeg4": { - "source": "iana" - }, - "video/vnd.sealed.swf": { - "source": "iana" - }, - "video/vnd.sealedmedia.softseal.mov": { - "source": "iana" - }, - "video/vnd.uvvu.mp4": { - "source": "iana", - "extensions": ["uvu","uvvu"] - }, - "video/vnd.vivo": { - "source": "iana", - "extensions": ["viv"] - }, - "video/vp8": { - "source": "iana" - }, - "video/webm": { - "source": "apache", - "compressible": false, - "extensions": ["webm"] - }, - "video/x-f4v": { - "source": "apache", - "extensions": ["f4v"] - }, - "video/x-fli": { - "source": "apache", - "extensions": ["fli"] - }, - "video/x-flv": { - "source": "apache", - "compressible": false, - "extensions": ["flv"] - }, - "video/x-m4v": { - "source": "apache", - "extensions": ["m4v"] - }, - "video/x-matroska": { - "source": "apache", - "compressible": false, - "extensions": ["mkv","mk3d","mks"] - }, - "video/x-mng": { - "source": "apache", - "extensions": ["mng"] - }, - "video/x-ms-asf": { - "source": "apache", - "extensions": ["asf","asx"] - }, - "video/x-ms-vob": { - "source": "apache", - "extensions": ["vob"] - }, - "video/x-ms-wm": { - "source": "apache", - "extensions": ["wm"] - }, - "video/x-ms-wmv": { - "source": "apache", - "compressible": false, - "extensions": ["wmv"] - }, - "video/x-ms-wmx": { - "source": "apache", - "extensions": ["wmx"] - }, - "video/x-ms-wvx": { - "source": "apache", - "extensions": ["wvx"] - }, - "video/x-msvideo": { - "source": "apache", - "extensions": ["avi"] - }, - "video/x-sgi-movie": { - "source": "apache", - "extensions": ["movie"] - }, - "video/x-smv": { - "source": "apache", - "extensions": ["smv"] - }, - "x-conference/x-cooltalk": { - "source": "apache", - "extensions": ["ice"] - }, - "x-shader/x-fragment": { - "compressible": true - }, - "x-shader/x-vertex": { - "compressible": true - } -} diff --git a/truebit-implementation/node_modules/mime-db/index.js b/truebit-implementation/node_modules/mime-db/index.js deleted file mode 100644 index 551031f6..00000000 --- a/truebit-implementation/node_modules/mime-db/index.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * mime-db - * Copyright(c) 2014 Jonathan Ong - * MIT Licensed - */ - -/** - * Module exports. - */ - -module.exports = require('./db.json') diff --git a/truebit-implementation/node_modules/mime-db/package.json b/truebit-implementation/node_modules/mime-db/package.json deleted file mode 100644 index 1258d6c3..00000000 --- a/truebit-implementation/node_modules/mime-db/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_from": "mime-db@~1.37.0", - "_id": "mime-db@1.37.0", - "_inBundle": false, - "_integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "_location": "/mime-db", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mime-db@~1.37.0", - "name": "mime-db", - "escapedName": "mime-db", - "rawSpec": "~1.37.0", - "saveSpec": null, - "fetchSpec": "~1.37.0" - }, - "_requiredBy": [ - "/mime-types" - ], - "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "_shasum": "0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8", - "_spec": "mime-db@~1.37.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/mime-types", - "bugs": { - "url": "https://github.com/jshttp/mime-db/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - { - "name": "Robert Kieffer", - "email": "robert@broofa.com", - "url": "http://github.com/broofa" - } - ], - "deprecated": false, - "description": "Media Type Database", - "devDependencies": { - "bluebird": "3.5.2", - "co": "4.6.0", - "cogent": "1.0.1", - "csv-parse": "2.5.0", - "eslint": "5.7.0", - "eslint-config-standard": "12.0.0", - "eslint-plugin-import": "2.14.0", - "eslint-plugin-node": "7.0.1", - "eslint-plugin-promise": "4.0.1", - "eslint-plugin-standard": "4.0.0", - "gnode": "0.1.2", - "mocha": "5.2.0", - "nyc": "13.1.0", - "raw-body": "2.3.3", - "stream-to-array": "2.3.0" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "db.json", - "index.js" - ], - "homepage": "https://github.com/jshttp/mime-db#readme", - "keywords": [ - "mime", - "db", - "type", - "types", - "database", - "charset", - "charsets" - ], - "license": "MIT", - "name": "mime-db", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/mime-db.git" - }, - "scripts": { - "build": "node scripts/build", - "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "nyc --reporter=html --reporter=text npm test", - "test-travis": "nyc --reporter=text npm test", - "update": "npm run fetch && npm run build" - }, - "version": "1.37.0" -} diff --git a/truebit-implementation/node_modules/mime-types/HISTORY.md b/truebit-implementation/node_modules/mime-types/HISTORY.md deleted file mode 100644 index dd7f4f8e..00000000 --- a/truebit-implementation/node_modules/mime-types/HISTORY.md +++ /dev/null @@ -1,285 +0,0 @@ -2.1.21 / 2018-10-19 -=================== - - * deps: mime-db@~1.37.0 - - Add extensions to HEIC image types - - Add new upstream MIME types - -2.1.20 / 2018-08-26 -=================== - - * deps: mime-db@~1.36.0 - - Add Apple file extensions from IANA - - Add extensions from IANA for `image/*` types - - Add new upstream MIME types - -2.1.19 / 2018-07-17 -=================== - - * deps: mime-db@~1.35.0 - - Add extension `.csl` to `application/vnd.citationstyles.style+xml` - - Add extension `.es` to `application/ecmascript` - - Add extension `.owl` to `application/rdf+xml` - - Add new upstream MIME types - - Add UTF-8 as default charset for `text/turtle` - -2.1.18 / 2018-02-16 -=================== - - * deps: mime-db@~1.33.0 - - Add `application/raml+yaml` with extension `.raml` - - Add `application/wasm` with extension `.wasm` - - Add `text/shex` with extension `.shex` - - Add extensions for JPEG-2000 images - - Add extensions from IANA for `message/*` types - - Add new upstream MIME types - - Update font MIME types - - Update `text/hjson` to registered `application/hjson` - -2.1.17 / 2017-09-01 -=================== - - * deps: mime-db@~1.30.0 - - Add `application/vnd.ms-outlook` - - Add `application/x-arj` - - Add extension `.mjs` to `application/javascript` - - Add glTF types and extensions - - Add new upstream MIME types - - Add `text/x-org` - - Add VirtualBox MIME types - - Fix `source` records for `video/*` types that are IANA - - Update `font/opentype` to registered `font/otf` - -2.1.16 / 2017-07-24 -=================== - - * deps: mime-db@~1.29.0 - - Add `application/fido.trusted-apps+json` - - Add extension `.wadl` to `application/vnd.sun.wadl+xml` - - Add extension `.gz` to `application/gzip` - - Add new upstream MIME types - - Update extensions `.md` and `.markdown` to be `text/markdown` - -2.1.15 / 2017-03-23 -=================== - - * deps: mime-db@~1.27.0 - - Add new mime types - - Add `image/apng` - -2.1.14 / 2017-01-14 -=================== - - * deps: mime-db@~1.26.0 - - Add new mime types - -2.1.13 / 2016-11-18 -=================== - - * deps: mime-db@~1.25.0 - - Add new mime types - -2.1.12 / 2016-09-18 -=================== - - * deps: mime-db@~1.24.0 - - Add new mime types - - Add `audio/mp3` - -2.1.11 / 2016-05-01 -=================== - - * deps: mime-db@~1.23.0 - - Add new mime types - -2.1.10 / 2016-02-15 -=================== - - * deps: mime-db@~1.22.0 - - Add new mime types - - Fix extension of `application/dash+xml` - - Update primary extension for `audio/mp4` - -2.1.9 / 2016-01-06 -================== - - * deps: mime-db@~1.21.0 - - Add new mime types - -2.1.8 / 2015-11-30 -================== - - * deps: mime-db@~1.20.0 - - Add new mime types - -2.1.7 / 2015-09-20 -================== - - * deps: mime-db@~1.19.0 - - Add new mime types - -2.1.6 / 2015-09-03 -================== - - * deps: mime-db@~1.18.0 - - Add new mime types - -2.1.5 / 2015-08-20 -================== - - * deps: mime-db@~1.17.0 - - Add new mime types - -2.1.4 / 2015-07-30 -================== - - * deps: mime-db@~1.16.0 - - Add new mime types - -2.1.3 / 2015-07-13 -================== - - * deps: mime-db@~1.15.0 - - Add new mime types - -2.1.2 / 2015-06-25 -================== - - * deps: mime-db@~1.14.0 - - Add new mime types - -2.1.1 / 2015-06-08 -================== - - * perf: fix deopt during mapping - -2.1.0 / 2015-06-07 -================== - - * Fix incorrectly treating extension-less file name as extension - - i.e. `'path/to/json'` will no longer return `application/json` - * Fix `.charset(type)` to accept parameters - * Fix `.charset(type)` to match case-insensitive - * Improve generation of extension to MIME mapping - * Refactor internals for readability and no argument reassignment - * Prefer `application/*` MIME types from the same source - * Prefer any type over `application/octet-stream` - * deps: mime-db@~1.13.0 - - Add nginx as a source - - Add new mime types - -2.0.14 / 2015-06-06 -=================== - - * deps: mime-db@~1.12.0 - - Add new mime types - -2.0.13 / 2015-05-31 -=================== - - * deps: mime-db@~1.11.0 - - Add new mime types - -2.0.12 / 2015-05-19 -=================== - - * deps: mime-db@~1.10.0 - - Add new mime types - -2.0.11 / 2015-05-05 -=================== - - * deps: mime-db@~1.9.1 - - Add new mime types - -2.0.10 / 2015-03-13 -=================== - - * deps: mime-db@~1.8.0 - - Add new mime types - -2.0.9 / 2015-02-09 -================== - - * deps: mime-db@~1.7.0 - - Add new mime types - - Community extensions ownership transferred from `node-mime` - -2.0.8 / 2015-01-29 -================== - - * deps: mime-db@~1.6.0 - - Add new mime types - -2.0.7 / 2014-12-30 -================== - - * deps: mime-db@~1.5.0 - - Add new mime types - - Fix various invalid MIME type entries - -2.0.6 / 2014-12-30 -================== - - * deps: mime-db@~1.4.0 - - Add new mime types - - Fix various invalid MIME type entries - - Remove example template MIME types - -2.0.5 / 2014-12-29 -================== - - * deps: mime-db@~1.3.1 - - Fix missing extensions - -2.0.4 / 2014-12-10 -================== - - * deps: mime-db@~1.3.0 - - Add new mime types - -2.0.3 / 2014-11-09 -================== - - * deps: mime-db@~1.2.0 - - Add new mime types - -2.0.2 / 2014-09-28 -================== - - * deps: mime-db@~1.1.0 - - Add new mime types - - Add additional compressible - - Update charsets - -2.0.1 / 2014-09-07 -================== - - * Support Node.js 0.6 - -2.0.0 / 2014-09-02 -================== - - * Use `mime-db` - * Remove `.define()` - -1.0.2 / 2014-08-04 -================== - - * Set charset=utf-8 for `text/javascript` - -1.0.1 / 2014-06-24 -================== - - * Add `text/jsx` type - -1.0.0 / 2014-05-12 -================== - - * Return `false` for unknown types - * Set charset=utf-8 for `application/json` - -0.1.0 / 2014-05-02 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/mime-types/LICENSE b/truebit-implementation/node_modules/mime-types/LICENSE deleted file mode 100644 index 06166077..00000000 --- a/truebit-implementation/node_modules/mime-types/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/mime-types/README.md b/truebit-implementation/node_modules/mime-types/README.md deleted file mode 100644 index b68b52e6..00000000 --- a/truebit-implementation/node_modules/mime-types/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# mime-types - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -The ultimate javascript content-type utility. - -Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: - -- __No fallbacks.__ Instead of naively returning the first available type, - `mime-types` simply returns `false`, so do - `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. -- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. -- No `.define()` functionality -- Bug fixes for `.lookup(path)` - -Otherwise, the API is compatible with `mime` 1.x. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install mime-types -``` - -## Adding Types - -All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), -so open a PR there if you'd like to add mime types. - -## API - -```js -var mime = require('mime-types') -``` - -All functions return `false` if input is invalid or not found. - -### mime.lookup(path) - -Lookup the content-type associated with a file. - -```js -mime.lookup('json') // 'application/json' -mime.lookup('.md') // 'text/markdown' -mime.lookup('file.html') // 'text/html' -mime.lookup('folder/file.js') // 'application/javascript' -mime.lookup('folder/.htaccess') // false - -mime.lookup('cats') // false -``` - -### mime.contentType(type) - -Create a full content-type header given a content-type or extension. - -```js -mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' -mime.contentType('file.json') // 'application/json; charset=utf-8' - -// from a full path -mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' -``` - -### mime.extension(type) - -Get the default extension for a content-type. - -```js -mime.extension('application/octet-stream') // 'bin' -``` - -### mime.charset(type) - -Lookup the implied default charset of a content-type. - -```js -mime.charset('text/markdown') // 'UTF-8' -``` - -### var type = mime.types[extension] - -A map of content-types by extension. - -### [extensions...] = mime.extensions[type] - -A map of extensions by content-type. - -## License - -[MIT](LICENSE) - -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master -[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master -[node-version-image]: https://badgen.net/npm/node/mime-types -[node-version-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/mime-types -[npm-url]: https://npmjs.org/package/mime-types -[npm-version-image]: https://badgen.net/npm/v/mime-types -[travis-image]: https://badgen.net/travis/jshttp/mime-types/master -[travis-url]: https://travis-ci.org/jshttp/mime-types diff --git a/truebit-implementation/node_modules/mime-types/index.js b/truebit-implementation/node_modules/mime-types/index.js deleted file mode 100644 index b9f34d59..00000000 --- a/truebit-implementation/node_modules/mime-types/index.js +++ /dev/null @@ -1,188 +0,0 @@ -/*! - * mime-types - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var db = require('mime-db') -var extname = require('path').extname - -/** - * Module variables. - * @private - */ - -var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ -var TEXT_TYPE_REGEXP = /^text\//i - -/** - * Module exports. - * @public - */ - -exports.charset = charset -exports.charsets = { lookup: charset } -exports.contentType = contentType -exports.extension = extension -exports.extensions = Object.create(null) -exports.lookup = lookup -exports.types = Object.create(null) - -// Populate the extensions/types maps -populateMaps(exports.extensions, exports.types) - -/** - * Get the default charset for a MIME type. - * - * @param {string} type - * @return {boolean|string} - */ - -function charset (type) { - if (!type || typeof type !== 'string') { - return false - } - - // TODO: use media-typer - var match = EXTRACT_TYPE_REGEXP.exec(type) - var mime = match && db[match[1].toLowerCase()] - - if (mime && mime.charset) { - return mime.charset - } - - // default text/* to utf-8 - if (match && TEXT_TYPE_REGEXP.test(match[1])) { - return 'UTF-8' - } - - return false -} - -/** - * Create a full Content-Type header given a MIME type or extension. - * - * @param {string} str - * @return {boolean|string} - */ - -function contentType (str) { - // TODO: should this even be in this module? - if (!str || typeof str !== 'string') { - return false - } - - var mime = str.indexOf('/') === -1 - ? exports.lookup(str) - : str - - if (!mime) { - return false - } - - // TODO: use content-type or other module - if (mime.indexOf('charset') === -1) { - var charset = exports.charset(mime) - if (charset) mime += '; charset=' + charset.toLowerCase() - } - - return mime -} - -/** - * Get the default extension for a MIME type. - * - * @param {string} type - * @return {boolean|string} - */ - -function extension (type) { - if (!type || typeof type !== 'string') { - return false - } - - // TODO: use media-typer - var match = EXTRACT_TYPE_REGEXP.exec(type) - - // get extensions - var exts = match && exports.extensions[match[1].toLowerCase()] - - if (!exts || !exts.length) { - return false - } - - return exts[0] -} - -/** - * Lookup the MIME type for a file path/extension. - * - * @param {string} path - * @return {boolean|string} - */ - -function lookup (path) { - if (!path || typeof path !== 'string') { - return false - } - - // get the extension ("ext" or ".ext" or full path) - var extension = extname('x.' + path) - .toLowerCase() - .substr(1) - - if (!extension) { - return false - } - - return exports.types[extension] || false -} - -/** - * Populate the extensions and types maps. - * @private - */ - -function populateMaps (extensions, types) { - // source preference (least -> most) - var preference = ['nginx', 'apache', undefined, 'iana'] - - Object.keys(db).forEach(function forEachMimeType (type) { - var mime = db[type] - var exts = mime.extensions - - if (!exts || !exts.length) { - return - } - - // mime -> extensions - extensions[type] = exts - - // extension -> mime - for (var i = 0; i < exts.length; i++) { - var extension = exts[i] - - if (types[extension]) { - var from = preference.indexOf(db[types[extension]].source) - var to = preference.indexOf(mime.source) - - if (types[extension] !== 'application/octet-stream' && - (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { - // skip the remapping - continue - } - } - - // set the extension -> mime - types[extension] = type - } - }) -} diff --git a/truebit-implementation/node_modules/mime-types/package.json b/truebit-implementation/node_modules/mime-types/package.json deleted file mode 100644 index b8d10f38..00000000 --- a/truebit-implementation/node_modules/mime-types/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_from": "mime-types@^2.1.16", - "_id": "mime-types@2.1.21", - "_inBundle": false, - "_integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "_location": "/mime-types", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mime-types@^2.1.16", - "name": "mime-types", - "escapedName": "mime-types", - "rawSpec": "^2.1.16", - "saveSpec": null, - "fetchSpec": "^2.1.16" - }, - "_requiredBy": [ - "/accepts", - "/form-data", - "/request", - "/swarm-js", - "/type-is" - ], - "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "_shasum": "28995aa1ecb770742fe6ae7e58f9181c744b3f96", - "_spec": "mime-types@^2.1.16", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "bugs": { - "url": "https://github.com/jshttp/mime-types/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jeremiah Senkpiel", - "email": "fishrock123@rocketmail.com", - "url": "https://searchbeam.jit.su" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "dependencies": { - "mime-db": "~1.37.0" - }, - "deprecated": false, - "description": "The ultimate javascript content-type utility.", - "devDependencies": { - "eslint": "5.7.0", - "eslint-config-standard": "12.0.0", - "eslint-plugin-import": "2.14.0", - "eslint-plugin-node": "7.0.1", - "eslint-plugin-promise": "4.0.1", - "eslint-plugin-standard": "4.0.0", - "mocha": "5.2.0", - "nyc": "13.1.0" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "homepage": "https://github.com/jshttp/mime-types#readme", - "keywords": [ - "mime", - "types" - ], - "license": "MIT", - "name": "mime-types", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/mime-types.git" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec test/test.js", - "test-cov": "nyc --reporter=html --reporter=text npm test", - "test-travis": "nyc --reporter=text npm test" - }, - "version": "2.1.21" -} diff --git a/truebit-implementation/node_modules/mime/LICENSE b/truebit-implementation/node_modules/mime/LICENSE deleted file mode 100644 index d3f46f7e..00000000 --- a/truebit-implementation/node_modules/mime/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/mime/README.md b/truebit-implementation/node_modules/mime/README.md deleted file mode 100644 index 506fbe55..00000000 --- a/truebit-implementation/node_modules/mime/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# mime - -Comprehensive MIME type mapping API based on mime-db module. - -## Install - -Install with [npm](http://github.com/isaacs/npm): - - npm install mime - -## Contributing / Testing - - npm run test - -## Command Line - - mime [path_string] - -E.g. - - > mime scripts/jquery.js - application/javascript - -## API - Queries - -### mime.lookup(path) -Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. - -```js -var mime = require('mime'); - -mime.lookup('/path/to/file.txt'); // => 'text/plain' -mime.lookup('file.txt'); // => 'text/plain' -mime.lookup('.TXT'); // => 'text/plain' -mime.lookup('htm'); // => 'text/html' -``` - -### mime.default_type -Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) - -### mime.extension(type) -Get the default extension for `type` - -```js -mime.extension('text/html'); // => 'html' -mime.extension('application/octet-stream'); // => 'bin' -``` - -### mime.charsets.lookup() - -Map mime-type to charset - -```js -mime.charsets.lookup('text/plain'); // => 'UTF-8' -``` - -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) - -## API - Defining Custom Types - -Custom type mappings can be added on a per-project basis via the following APIs. - -### mime.define() - -Add custom mime/extension mappings - -```js -mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... -}); - -mime.lookup('x-sft'); // => 'text/x-some-format' -``` - -The first entry in the extensions array is returned by `mime.extension()`. E.g. - -```js -mime.extension('text/x-some-format'); // => 'x-sf' -``` - -### mime.load(filepath) - -Load mappings from an Apache ".types" format file - -```js -mime.load('./my_project.types'); -``` -The .types file format is simple - See the `types` dir for examples. diff --git a/truebit-implementation/node_modules/mime/build/build.js b/truebit-implementation/node_modules/mime/build/build.js deleted file mode 100644 index ed5313e3..00000000 --- a/truebit-implementation/node_modules/mime/build/build.js +++ /dev/null @@ -1,11 +0,0 @@ -var db = require('mime-db'); - -var mapByType = {}; -Object.keys(db).forEach(function(key) { - var extensions = db[key].extensions; - if (extensions) { - mapByType[key] = extensions; - } -}); - -console.log(JSON.stringify(mapByType)); diff --git a/truebit-implementation/node_modules/mime/build/test.js b/truebit-implementation/node_modules/mime/build/test.js deleted file mode 100644 index 010c42b9..00000000 --- a/truebit-implementation/node_modules/mime/build/test.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('../mime'); -var assert = require('assert'); -var path = require('path'); - -// -// Test mime lookups -// - -assert.equal('text/plain', mime.lookup('text.txt')); // normal file -assert.equal('text/plain', mime.lookup('TEXT.TXT')); // uppercase -assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file -assert.equal('text/plain', mime.lookup('.text.txt')); // hidden file -assert.equal('text/plain', mime.lookup('.txt')); // nameless -assert.equal('text/plain', mime.lookup('txt')); // extension-only -assert.equal('text/plain', mime.lookup('/txt')); // extension-less () -assert.equal('text/plain', mime.lookup('\\txt')); // Windows, extension-less -assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized -assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default - -// -// Test extensions -// - -assert.equal('txt', mime.extension(mime.types.text)); -assert.equal('html', mime.extension(mime.types.htm)); -assert.equal('bin', mime.extension('application/octet-stream')); -assert.equal('bin', mime.extension('application/octet-stream ')); -assert.equal('html', mime.extension(' text/html; charset=UTF-8')); -assert.equal('html', mime.extension('text/html; charset=UTF-8 ')); -assert.equal('html', mime.extension('text/html; charset=UTF-8')); -assert.equal('html', mime.extension('text/html ; charset=UTF-8')); -assert.equal('html', mime.extension('text/html;charset=UTF-8')); -assert.equal('html', mime.extension('text/Html;charset=UTF-8')); -assert.equal(undefined, mime.extension('unrecognized')); - -// -// Test node.types lookups -// - -assert.equal('application/font-woff', mime.lookup('file.woff')); -assert.equal('application/octet-stream', mime.lookup('file.buffer')); -// TODO: Uncomment once #157 is resolved -// assert.equal('audio/mp4', mime.lookup('file.m4a')); -assert.equal('font/otf', mime.lookup('file.otf')); - -// -// Test charsets -// - -assert.equal('UTF-8', mime.charsets.lookup('text/plain')); -assert.equal('UTF-8', mime.charsets.lookup(mime.types.js)); -assert.equal('UTF-8', mime.charsets.lookup(mime.types.json)); -assert.equal(undefined, mime.charsets.lookup(mime.types.bin)); -assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -console.log('\nAll tests passed'); diff --git a/truebit-implementation/node_modules/mime/cli.js b/truebit-implementation/node_modules/mime/cli.js deleted file mode 100755 index 20b1ffeb..00000000 --- a/truebit-implementation/node_modules/mime/cli.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var mime = require('./mime.js'); -var file = process.argv[2]; -var type = mime.lookup(file); - -process.stdout.write(type + '\n'); - diff --git a/truebit-implementation/node_modules/mime/mime.js b/truebit-implementation/node_modules/mime/mime.js deleted file mode 100644 index d7efbde7..00000000 --- a/truebit-implementation/node_modules/mime/mime.js +++ /dev/null @@ -1,108 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - for (var i = 0; i < exts.length; i++) { - if (process.env.DEBUG_MIME && this.types[exts[i]]) { - console.warn((this._loading || "define()").replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + - this.types[exts[i]] + ' to ' + type); - } - - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - this._loading = file; - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); - - this._loading = null; -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/^.*[\.\/\\]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); - return this.extensions[type]; -}; - -// Default instance -var mime = new Mime(); - -// Define built-in types -mime.define(require('./types.json')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\/|^application\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback; - } -}; - -module.exports = mime; diff --git a/truebit-implementation/node_modules/mime/package.json b/truebit-implementation/node_modules/mime/package.json deleted file mode 100644 index d880d7e8..00000000 --- a/truebit-implementation/node_modules/mime/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "_from": "mime@1.4.1", - "_id": "mime@1.4.1", - "_inBundle": false, - "_integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "_location": "/mime", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "mime@1.4.1", - "name": "mime", - "escapedName": "mime", - "rawSpec": "1.4.1", - "saveSpec": null, - "fetchSpec": "1.4.1" - }, - "_requiredBy": [ - "/send" - ], - "_resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "_shasum": "121f9ebc49e3766f311a76e1fa1c8003c4b03aa6", - "_spec": "mime@1.4.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/send", - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com", - "url": "http://github.com/broofa" - }, - "bin": { - "mime": "cli.js" - }, - "bugs": { - "url": "https://github.com/broofa/node-mime/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Benjamin Thomas", - "email": "benjamin@benjaminthomas.org", - "url": "http://github.com/bentomas" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "A comprehensive library for mime-type mapping", - "devDependencies": { - "mime-db": "1.30.0" - }, - "homepage": "https://github.com/broofa/node-mime#readme", - "keywords": [ - "util", - "mime" - ], - "license": "MIT", - "main": "mime.js", - "name": "mime", - "repository": { - "url": "git+https://github.com/broofa/node-mime.git", - "type": "git" - }, - "scripts": { - "prepublish": "node build/build.js > types.json", - "test": "node build/test.js" - }, - "version": "1.4.1" -} diff --git a/truebit-implementation/node_modules/mime/types.json b/truebit-implementation/node_modules/mime/types.json deleted file mode 100644 index 5369cd1c..00000000 --- a/truebit-implementation/node_modules/mime/types.json +++ /dev/null @@ -1 +0,0 @@ -{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/bdoc":["bdoc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":["woff"],"application/font-woff2":["woff2"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-otf":["otf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-ttf":["ttf","ttc"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["iso"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["exe"],"application/x-msdownload":["exe","dll","com","bat","msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","wmz","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["prc","pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["3gpp"],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp3":["mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/wav":["wav"],"audio/wave":["wav"],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["ra"],"audio/x-wav":["wav"],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/otf":["otf"],"image/apng":["apng"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jpeg":["jpeg","jpg","jpe"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["bmp"],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/rtf":["rtf"],"text/sgml":["sgml","sgm"],"text/slim":["slim","slm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/xml":["xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]} diff --git a/truebit-implementation/node_modules/mimic-response/index.js b/truebit-implementation/node_modules/mimic-response/index.js deleted file mode 100644 index d5e33be4..00000000 --- a/truebit-implementation/node_modules/mimic-response/index.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -// We define these manually to ensure they're always copied -// even if they would move up the prototype chain -// https://nodejs.org/api/http.html#http_class_http_incomingmessage -const knownProps = [ - 'destroy', - 'setTimeout', - 'socket', - 'headers', - 'trailers', - 'rawHeaders', - 'statusCode', - 'httpVersion', - 'httpVersionMinor', - 'httpVersionMajor', - 'rawTrailers', - 'statusMessage' -]; - -module.exports = (fromStream, toStream) => { - const fromProps = new Set(Object.keys(fromStream).concat(knownProps)); - - for (const prop of fromProps) { - // Don't overwrite existing properties - if (prop in toStream) { - continue; - } - - toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop]; - } -}; diff --git a/truebit-implementation/node_modules/mimic-response/license b/truebit-implementation/node_modules/mimic-response/license deleted file mode 100644 index e7af2f77..00000000 --- a/truebit-implementation/node_modules/mimic-response/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/mimic-response/package.json b/truebit-implementation/node_modules/mimic-response/package.json deleted file mode 100644 index 7e37ad22..00000000 --- a/truebit-implementation/node_modules/mimic-response/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "mimic-response@^1.0.0", - "_id": "mimic-response@1.0.1", - "_inBundle": false, - "_integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "_location": "/mimic-response", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mimic-response@^1.0.0", - "name": "mimic-response", - "escapedName": "mimic-response", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/decompress-response" - ], - "_resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "_shasum": "4923538878eef42063cb8a3e3b0798781487ab1b", - "_spec": "mimic-response@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-response", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/mimic-response/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Mimic a Node.js HTTP response stream", - "devDependencies": { - "ava": "*", - "create-test-server": "^0.1.0", - "pify": "^3.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/mimic-response#readme", - "keywords": [ - "mimic", - "response", - "stream", - "http", - "https", - "request", - "get", - "core" - ], - "license": "MIT", - "name": "mimic-response", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/mimic-response.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/mimic-response/readme.md b/truebit-implementation/node_modules/mimic-response/readme.md deleted file mode 100644 index e07ec661..00000000 --- a/truebit-implementation/node_modules/mimic-response/readme.md +++ /dev/null @@ -1,54 +0,0 @@ -# mimic-response [![Build Status](https://travis-ci.org/sindresorhus/mimic-response.svg?branch=master)](https://travis-ci.org/sindresorhus/mimic-response) - -> Mimic a [Node.js HTTP response stream](https://nodejs.org/api/http.html#http_class_http_incomingmessage) - - -## Install - -``` -$ npm install mimic-response -``` - - -## Usage - -```js -const stream = require('stream'); -const mimicResponse = require('mimic-response'); - -const responseStream = getHttpResponseStream(); -const myStream = new stream.PassThrough(); - -mimicResponse(responseStream, myStream); - -console.log(myStream.statusCode); -//=> 200 -``` - - -## API - -### mimicResponse(from, to) - -#### from - -Type: `Stream` - -[Node.js HTTP response stream.](https://nodejs.org/api/http.html#http_class_http_incomingmessage) - -#### to - -Type: `Stream` - -Any stream. - - -## Related - -- [mimic-fn](https://github.com/sindresorhus/mimic-fn) - Make a function mimic another one -- [clone-response](https://github.com/lukechilds/clone-response) - Clone a Node.js response stream - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/min-document/.jshintrc b/truebit-implementation/node_modules/min-document/.jshintrc deleted file mode 100644 index 77887b5f..00000000 --- a/truebit-implementation/node_modules/min-document/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/truebit-implementation/node_modules/min-document/.npmignore b/truebit-implementation/node_modules/min-document/.npmignore deleted file mode 100644 index fd31f5ee..00000000 --- a/truebit-implementation/node_modules/min-document/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -.DS_Store -.monitor -.*.swp -.nodemonignore -releases -*.log -*.err -fleet.json -public/browserify -bin/*.json -.bin -build -compile -.lock-wscript -node_modules diff --git a/truebit-implementation/node_modules/min-document/.testem.json b/truebit-implementation/node_modules/min-document/.testem.json deleted file mode 100644 index 41ab90e6..00000000 --- a/truebit-implementation/node_modules/min-document/.testem.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "launchers": { - "node": { - "command": "node ./test" - } - }, - "src_files": [ - "./**/*.js" - ], - "before_tests": "npm run build-test", - "on_exit": "rm test/static/bundle.js", - "test_page": "test/static/index.html", - "launch_in_dev": ["node", "phantomjs"] -} diff --git a/truebit-implementation/node_modules/min-document/.travis.yml b/truebit-implementation/node_modules/min-document/.travis.yml deleted file mode 100644 index 52424f8d..00000000 --- a/truebit-implementation/node_modules/min-document/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - 0.8 - - 0.9 - - 0.10 -script: node ./test/index.js diff --git a/truebit-implementation/node_modules/min-document/CONTRIBUTION.md b/truebit-implementation/node_modules/min-document/CONTRIBUTION.md deleted file mode 100644 index 4e78bdf7..00000000 --- a/truebit-implementation/node_modules/min-document/CONTRIBUTION.md +++ /dev/null @@ -1,48 +0,0 @@ -# This is an OPEN Open Source Project - -## What? - -Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. - -## Rules - -There are a few basic ground-rules for contributors: - - - No --force pushes or modifying the Git history in any way. - - Non-master branches ought to be used for ongoing work. - - External API changes and significant modifications ought to be subject to an internal pull-request to solicit feedback from other contributors. - - Internal pull-requests to solicit feedback are encouraged for any other non-trivial contribution but left to the discretion of the contributor. - - For significant changes wait a full 24 hours before merging so that active contributors who are distributed throughout the world have a chance to weigh in. - - Contributors should attempt to adhere to the prevailing code-style. -Releases - -Declaring formal releases requires peer review. - - - A reviewer of a pull request should recommend a new version number (patch, minor or major). - - Once your change is merged feel free to bump the version as recommended by the reviewer. - - A new version number should not be cut without peer review unless done by the project maintainer. - -## Want to contribute? - -Even though collaborators may contribute as they see fit, if you are not sure what to do, here's a suggested process: - -## Cutting a new version - - - Get your branch merged on master - - Run `npm version major` or `npm version minor` or `npm version patch` - - `git push origin master --tags` - - If you are a project owner, then `npm publish` - -## If you want to have a bug fixed or a feature added: - - - Check open issues for what you want. - - If there is an open issue, comment on it, otherwise open an issue describing your bug or feature with use cases. - - Discussion happens on the issue about how to solve your problem. - - You or a core contributor opens a pull request solving the issue with tests and documentation. - - The pull requests gets reviewed and then merged. - - A new release version get's cut. - - (Disclaimer: Your feature might get rejected.) - -### Changes to this arrangement - -This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change. diff --git a/truebit-implementation/node_modules/min-document/LICENCE b/truebit-implementation/node_modules/min-document/LICENCE deleted file mode 100644 index 72d356c1..00000000 --- a/truebit-implementation/node_modules/min-document/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2013 Colingo. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/min-document/README.md b/truebit-implementation/node_modules/min-document/README.md deleted file mode 100644 index 970b47d2..00000000 --- a/truebit-implementation/node_modules/min-document/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# min-document - -[![build status][1]][2] [![dependency status][3]][4] - - - -A minimal DOM implementation - -## Example - -```js -var document = require("min-document") - -var div = document.createElement("div") -div.className = "foo bar" - -var span = document.createElement("span") -div.appendChild(span) -span.textContent = "Hello!" - -/*
- Hello! -
-*/ -var html = String(div) -``` - -## Installation - -`npm install min-document` - -## Contributors - - - Raynos - -## MIT Licenced - - [1]: https://secure.travis-ci.org/Raynos/min-document.png - [2]: https://travis-ci.org/Raynos/min-document - [3]: https://david-dm.org/Raynos/min-document.png - [4]: https://david-dm.org/Raynos/min-document - [5]: https://ci.testling.com/Raynos/min-document.png - [6]: https://ci.testling.com/Raynos/min-document diff --git a/truebit-implementation/node_modules/min-document/docs.mli b/truebit-implementation/node_modules/min-document/docs.mli deleted file mode 100644 index ad17b4ae..00000000 --- a/truebit-implementation/node_modules/min-document/docs.mli +++ /dev/null @@ -1,156 +0,0 @@ -type Comment := { - data: String, - length: Number, - nodeName: "#comment", - nodeType: 8, - nodeValue: String, - ownerDoucment: null | Document, - - toString: (this: Comment) => String -} - -type DOMText := { - data: String, - type: "DOMTextNode", - length: Number, - nodeType: 3, - - toString: (this: DOMText) => String, - replaceChild: ( - this: DOMText, - index: Number, - length: Number, - value: String - ) => void -} - -type DOMNode := DOMText | DOMElement | DocumentFragment -type DOMChild := DOMText | DOMElement - -type DOMElement := { - tagName: String, - className: String, - dataset: Object, - childNodes: Array, - parentNode: null | DOMElement, - style: Object, - type: "DOMElement", - nodeType: 1, - ownerDoucment: null | Document, - namespaceURI: null | String, - - appendChild: (this: DOMElement, child: DOMChild) => DOMChild, - replaceChild:( - this: DOMElement, - elem: DOMChild, - needle: DOMChild - ) => DOMChild, - removeChild: (this: DOMElement, child: DOMChild) => DOMChild, - insertBefore: ( - this: DOMElement, - elem: DOMChild, - needle: DOMChild | null | undefined - ) => DOMChild, - addEventListener: addEventListener, - dispatchEvent: dispatchEvent, - focus: () => void, - toString: (this: DOMElement) => String, - getElementsByClassName: ( - this: DOMElement, - className: String - ) => Array, - getElementsByTagName: ( - this: DOMElement, - tagName: String - ) => Array, -} - -type DocumentFragment := { - childNodes: Array, - parentNode: null | DOMElement, - type: "DocumentFragment", - nodeType: 11, - nodeName: "#document-fragment", - ownerDoucment: Document | null, - - appendChild: (this: DocumentFragment, child: DOMChild), - replaceChild: - (this: DocumentFragment, elem: DOMChild, needle: DOMChild), - removeChild: (this: DocumentFragment, child: DOMChild), - toString: (this: DocumentFragment) => String -} - -type Document := { - body: DOMElement, - childNodes: Array, - documentElement: DOMElement, - nodeType: 9, - - createComment: (this: Document, data: String) => Commment, - createTextNode: (this: Document, value: String) => DOMText, - createElement: (this: Document, tagName: String) => DOMElement, - createElementNS: ( - this: Document, - namespace: String | null, - tagName: String - ) => DOMElement, - createDocumentFragment: (this: Document) => DocumentFragment, - createEvent: () => Event, - getElementById: ( - this: Document, - id: String, - ) => null | DOMElement, - getElementsByClassName: ( - this: Document, - className: String - ) => Array, - getElementsByTagName: ( - this: Document, - tagName: String - ) => Array -} - -type Event := { - type: String, - bubbles: Boolean, - cancelable: Boolean, - - initEvent: ( - this: Event, - type: String, - bubbles: Boolean, - cancelable: Boolean - ) => void -} - -type addEventListener := ( - this: DOMElement, - type: String, - listener: Listener -) => void - -type dispatchEvent := ( - this: DOMElement, - ev: Event -) - -min-document/event/add-event-listener := addEventListener - -min-document/event/dispatch-event := dispatchEvent - -min-document/document := () => Document - -min-document/dom-element := - (tagName: String, owner?: Document, namespace?: String | null) => DOMElement - -min-document/dom-fragment := - (owner?: Document) => DocumentFragment - -min-document/dom-text := - (value: String, owner?: Document) => DOMText - -min-document/event := () => Event - -min-document/serialize := (DOMElement) => String - -min-document := Document diff --git a/truebit-implementation/node_modules/min-document/document.js b/truebit-implementation/node_modules/min-document/document.js deleted file mode 100644 index d929cbd5..00000000 --- a/truebit-implementation/node_modules/min-document/document.js +++ /dev/null @@ -1,72 +0,0 @@ -var domWalk = require("dom-walk") - -var Comment = require("./dom-comment.js") -var DOMText = require("./dom-text.js") -var DOMElement = require("./dom-element.js") -var DocumentFragment = require("./dom-fragment.js") -var Event = require("./event.js") -var dispatchEvent = require("./event/dispatch-event.js") -var addEventListener = require("./event/add-event-listener.js") -var removeEventListener = require("./event/remove-event-listener.js") - -module.exports = Document; - -function Document() { - if (!(this instanceof Document)) { - return new Document(); - } - - this.head = this.createElement("head") - this.body = this.createElement("body") - this.documentElement = this.createElement("html") - this.documentElement.appendChild(this.head) - this.documentElement.appendChild(this.body) - this.childNodes = [this.documentElement] - this.nodeType = 9 -} - -var proto = Document.prototype; -proto.createTextNode = function createTextNode(value) { - return new DOMText(value, this) -} - -proto.createElementNS = function createElementNS(namespace, tagName) { - var ns = namespace === null ? null : String(namespace) - return new DOMElement(tagName, this, ns) -} - -proto.createElement = function createElement(tagName) { - return new DOMElement(tagName, this) -} - -proto.createDocumentFragment = function createDocumentFragment() { - return new DocumentFragment(this) -} - -proto.createEvent = function createEvent(family) { - return new Event(family) -} - -proto.createComment = function createComment(data) { - return new Comment(data, this) -} - -proto.getElementById = function getElementById(id) { - id = String(id) - - var result = domWalk(this.childNodes, function (node) { - if (String(node.id) === id) { - return node - } - }) - - return result || null -} - -proto.getElementsByClassName = DOMElement.prototype.getElementsByClassName -proto.getElementsByTagName = DOMElement.prototype.getElementsByTagName -proto.contains = DOMElement.prototype.contains - -proto.removeEventListener = removeEventListener -proto.addEventListener = addEventListener -proto.dispatchEvent = dispatchEvent diff --git a/truebit-implementation/node_modules/min-document/dom-comment.js b/truebit-implementation/node_modules/min-document/dom-comment.js deleted file mode 100644 index 132ea373..00000000 --- a/truebit-implementation/node_modules/min-document/dom-comment.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = Comment - -function Comment(data, owner) { - if (!(this instanceof Comment)) { - return new Comment(data, owner) - } - - this.data = data - this.nodeValue = data - this.length = data.length - this.ownerDocument = owner || null -} - -Comment.prototype.nodeType = 8 -Comment.prototype.nodeName = "#comment" - -Comment.prototype.toString = function _Comment_toString() { - return "[object Comment]" -} diff --git a/truebit-implementation/node_modules/min-document/dom-element.js b/truebit-implementation/node_modules/min-document/dom-element.js deleted file mode 100644 index 73ff10ec..00000000 --- a/truebit-implementation/node_modules/min-document/dom-element.js +++ /dev/null @@ -1,209 +0,0 @@ -var domWalk = require("dom-walk") -var dispatchEvent = require("./event/dispatch-event.js") -var addEventListener = require("./event/add-event-listener.js") -var removeEventListener = require("./event/remove-event-listener.js") -var serializeNode = require("./serialize.js") - -var htmlns = "http://www.w3.org/1999/xhtml" - -module.exports = DOMElement - -function DOMElement(tagName, owner, namespace) { - if (!(this instanceof DOMElement)) { - return new DOMElement(tagName) - } - - var ns = namespace === undefined ? htmlns : (namespace || null) - - this.tagName = ns === htmlns ? String(tagName).toUpperCase() : tagName - this.nodeName = this.tagName - this.className = "" - this.dataset = {} - this.childNodes = [] - this.parentNode = null - this.style = {} - this.ownerDocument = owner || null - this.namespaceURI = ns - this._attributes = {} - - if (this.tagName === 'INPUT') { - this.type = 'text' - } -} - -DOMElement.prototype.type = "DOMElement" -DOMElement.prototype.nodeType = 1 - -DOMElement.prototype.appendChild = function _Element_appendChild(child) { - if (child.parentNode) { - child.parentNode.removeChild(child) - } - - this.childNodes.push(child) - child.parentNode = this - - return child -} - -DOMElement.prototype.replaceChild = - function _Element_replaceChild(elem, needle) { - // TODO: Throw NotFoundError if needle.parentNode !== this - - if (elem.parentNode) { - elem.parentNode.removeChild(elem) - } - - var index = this.childNodes.indexOf(needle) - - needle.parentNode = null - this.childNodes[index] = elem - elem.parentNode = this - - return needle - } - -DOMElement.prototype.removeChild = function _Element_removeChild(elem) { - // TODO: Throw NotFoundError if elem.parentNode !== this - - var index = this.childNodes.indexOf(elem) - this.childNodes.splice(index, 1) - - elem.parentNode = null - return elem -} - -DOMElement.prototype.insertBefore = - function _Element_insertBefore(elem, needle) { - // TODO: Throw NotFoundError if referenceElement is a dom node - // and parentNode !== this - - if (elem.parentNode) { - elem.parentNode.removeChild(elem) - } - - var index = needle === null || needle === undefined ? - -1 : - this.childNodes.indexOf(needle) - - if (index > -1) { - this.childNodes.splice(index, 0, elem) - } else { - this.childNodes.push(elem) - } - - elem.parentNode = this - return elem - } - -DOMElement.prototype.setAttributeNS = - function _Element_setAttributeNS(namespace, name, value) { - var prefix = null - var localName = name - var colonPosition = name.indexOf(":") - if (colonPosition > -1) { - prefix = name.substr(0, colonPosition) - localName = name.substr(colonPosition + 1) - } - if (this.tagName === 'INPUT' && name === 'type') { - this.type = value; - } - else { - var attributes = this._attributes[namespace] || (this._attributes[namespace] = {}) - attributes[localName] = {value: value, prefix: prefix} - } - } - -DOMElement.prototype.getAttributeNS = - function _Element_getAttributeNS(namespace, name) { - var attributes = this._attributes[namespace]; - var value = attributes && attributes[name] && attributes[name].value - if (this.tagName === 'INPUT' && name === 'type') { - return this.type; - } - if (typeof value !== "string") { - return null - } - return value - } - -DOMElement.prototype.removeAttributeNS = - function _Element_removeAttributeNS(namespace, name) { - var attributes = this._attributes[namespace]; - if (attributes) { - delete attributes[name] - } - } - -DOMElement.prototype.hasAttributeNS = - function _Element_hasAttributeNS(namespace, name) { - var attributes = this._attributes[namespace] - return !!attributes && name in attributes; - } - -DOMElement.prototype.setAttribute = function _Element_setAttribute(name, value) { - return this.setAttributeNS(null, name, value) -} - -DOMElement.prototype.getAttribute = function _Element_getAttribute(name) { - return this.getAttributeNS(null, name) -} - -DOMElement.prototype.removeAttribute = function _Element_removeAttribute(name) { - return this.removeAttributeNS(null, name) -} - -DOMElement.prototype.hasAttribute = function _Element_hasAttribute(name) { - return this.hasAttributeNS(null, name) -} - -DOMElement.prototype.removeEventListener = removeEventListener -DOMElement.prototype.addEventListener = addEventListener -DOMElement.prototype.dispatchEvent = dispatchEvent - -// Un-implemented -DOMElement.prototype.focus = function _Element_focus() { - return void 0 -} - -DOMElement.prototype.toString = function _Element_toString() { - return serializeNode(this) -} - -DOMElement.prototype.getElementsByClassName = function _Element_getElementsByClassName(classNames) { - var classes = classNames.split(" "); - var elems = [] - - domWalk(this, function (node) { - if (node.nodeType === 1) { - var nodeClassName = node.className || "" - var nodeClasses = nodeClassName.split(" ") - - if (classes.every(function (item) { - return nodeClasses.indexOf(item) !== -1 - })) { - elems.push(node) - } - } - }) - - return elems -} - -DOMElement.prototype.getElementsByTagName = function _Element_getElementsByTagName(tagName) { - tagName = tagName.toLowerCase() - var elems = [] - - domWalk(this.childNodes, function (node) { - if (node.nodeType === 1 && (tagName === '*' || node.tagName.toLowerCase() === tagName)) { - elems.push(node) - } - }) - - return elems -} - -DOMElement.prototype.contains = function _Element_contains(element) { - return domWalk(this, function (node) { - return element === node - }) || false -} diff --git a/truebit-implementation/node_modules/min-document/dom-fragment.js b/truebit-implementation/node_modules/min-document/dom-fragment.js deleted file mode 100644 index d4bac92f..00000000 --- a/truebit-implementation/node_modules/min-document/dom-fragment.js +++ /dev/null @@ -1,28 +0,0 @@ -var DOMElement = require("./dom-element.js") - -module.exports = DocumentFragment - -function DocumentFragment(owner) { - if (!(this instanceof DocumentFragment)) { - return new DocumentFragment() - } - - this.childNodes = [] - this.parentNode = null - this.ownerDocument = owner || null -} - -DocumentFragment.prototype.type = "DocumentFragment" -DocumentFragment.prototype.nodeType = 11 -DocumentFragment.prototype.nodeName = "#document-fragment" - -DocumentFragment.prototype.appendChild = DOMElement.prototype.appendChild -DocumentFragment.prototype.replaceChild = DOMElement.prototype.replaceChild -DocumentFragment.prototype.removeChild = DOMElement.prototype.removeChild - -DocumentFragment.prototype.toString = - function _DocumentFragment_toString() { - return this.childNodes.map(function (node) { - return String(node) - }).join("") - } diff --git a/truebit-implementation/node_modules/min-document/dom-text.js b/truebit-implementation/node_modules/min-document/dom-text.js deleted file mode 100644 index 4a6c6b92..00000000 --- a/truebit-implementation/node_modules/min-document/dom-text.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = DOMText - -function DOMText(value, owner) { - if (!(this instanceof DOMText)) { - return new DOMText(value) - } - - this.data = value || "" - this.length = this.data.length - this.ownerDocument = owner || null -} - -DOMText.prototype.type = "DOMTextNode" -DOMText.prototype.nodeType = 3 -DOMText.prototype.nodeName = "#text" - -DOMText.prototype.toString = function _Text_toString() { - return this.data -} - -DOMText.prototype.replaceData = function replaceData(index, length, value) { - var current = this.data - var left = current.substring(0, index) - var right = current.substring(index + length, current.length) - this.data = left + value + right - this.length = this.data.length -} diff --git a/truebit-implementation/node_modules/min-document/event.js b/truebit-implementation/node_modules/min-document/event.js deleted file mode 100644 index 0a989c3d..00000000 --- a/truebit-implementation/node_modules/min-document/event.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = Event - -function Event(family) {} - -Event.prototype.initEvent = function _Event_initEvent(type, bubbles, cancelable) { - this.type = type - this.bubbles = bubbles - this.cancelable = cancelable -} - -Event.prototype.preventDefault = function _Event_preventDefault() { - -} diff --git a/truebit-implementation/node_modules/min-document/event/add-event-listener.js b/truebit-implementation/node_modules/min-document/event/add-event-listener.js deleted file mode 100644 index 022c7ef4..00000000 --- a/truebit-implementation/node_modules/min-document/event/add-event-listener.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = addEventListener - -function addEventListener(type, listener) { - var elem = this - - if (!elem.listeners) { - elem.listeners = {} - } - - if (!elem.listeners[type]) { - elem.listeners[type] = [] - } - - if (elem.listeners[type].indexOf(listener) === -1) { - elem.listeners[type].push(listener) - } -} diff --git a/truebit-implementation/node_modules/min-document/event/dispatch-event.js b/truebit-implementation/node_modules/min-document/event/dispatch-event.js deleted file mode 100644 index 8febc990..00000000 --- a/truebit-implementation/node_modules/min-document/event/dispatch-event.js +++ /dev/null @@ -1,31 +0,0 @@ -module.exports = dispatchEvent - -function dispatchEvent(ev) { - var elem = this - var type = ev.type - - if (!ev.target) { - ev.target = elem - } - - if (!elem.listeners) { - elem.listeners = {} - } - - var listeners = elem.listeners[type] - - if (listeners) { - return listeners.forEach(function (listener) { - ev.currentTarget = elem - if (typeof listener === 'function') { - listener(ev) - } else { - listener.handleEvent(ev) - } - }) - } - - if (elem.parentNode) { - elem.parentNode.dispatchEvent(ev) - } -} diff --git a/truebit-implementation/node_modules/min-document/event/remove-event-listener.js b/truebit-implementation/node_modules/min-document/event/remove-event-listener.js deleted file mode 100644 index d96091bc..00000000 --- a/truebit-implementation/node_modules/min-document/event/remove-event-listener.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = removeEventListener - -function removeEventListener(type, listener) { - var elem = this - - if (!elem.listeners) { - return - } - - if (!elem.listeners[type]) { - return - } - - var list = elem.listeners[type] - var index = list.indexOf(listener) - if (index !== -1) { - list.splice(index, 1) - } -} diff --git a/truebit-implementation/node_modules/min-document/index.js b/truebit-implementation/node_modules/min-document/index.js deleted file mode 100644 index 0d97e8ef..00000000 --- a/truebit-implementation/node_modules/min-document/index.js +++ /dev/null @@ -1,3 +0,0 @@ -var Document = require('./document.js'); - -module.exports = new Document(); diff --git a/truebit-implementation/node_modules/min-document/package.json b/truebit-implementation/node_modules/min-document/package.json deleted file mode 100644 index f6fe43e2..00000000 --- a/truebit-implementation/node_modules/min-document/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_from": "min-document@^2.19.0", - "_id": "min-document@2.19.0", - "_inBundle": false, - "_integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "_location": "/min-document", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "min-document@^2.19.0", - "name": "min-document", - "escapedName": "min-document", - "rawSpec": "^2.19.0", - "saveSpec": null, - "fetchSpec": "^2.19.0" - }, - "_requiredBy": [ - "/global" - ], - "_resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "_shasum": "7bd282e3f5842ed295bb748cdd9f1ffa2c824685", - "_spec": "min-document@^2.19.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/global", - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "bugs": { - "url": "https://github.com/Raynos/min-document/issues", - "email": "raynos2@gmail.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Raynos" - } - ], - "dependencies": { - "dom-walk": "^0.1.0" - }, - "deprecated": false, - "description": "A minimal DOM implementation", - "devDependencies": { - "run-browser": "git://github.com/Raynos/run-browser.git", - "tap-dot": "^0.2.1", - "tap-spec": "^0.1.8", - "tape": "^2.12.3" - }, - "homepage": "https://github.com/Raynos/min-document", - "keywords": [], - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/Raynos/min-document/raw/master/LICENSE" - } - ], - "main": "index", - "name": "min-document", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/min-document.git" - }, - "scripts": { - "browser": "run-browser test/index.js", - "cover": "istanbul cover --report none --print detail ./test/index.js", - "dot": "node ./test/index.js | tap-dot", - "phantom": "run-browser test/index.js -b | tap-spec", - "test": "node ./test/index.js | tap-spec", - "view-cover": "istanbul report html && google-chrome ./coverage/index.html" - }, - "testling": { - "files": "test/index.js", - "browsers": [ - "ie/8..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest", - "android-browser/4.2..latest" - ] - }, - "version": "2.19.0" -} diff --git a/truebit-implementation/node_modules/min-document/serialize.js b/truebit-implementation/node_modules/min-document/serialize.js deleted file mode 100644 index 4411d3c3..00000000 --- a/truebit-implementation/node_modules/min-document/serialize.js +++ /dev/null @@ -1,139 +0,0 @@ -module.exports = serializeNode - -var voidElements = ["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"]; - -function serializeNode(node) { - switch (node.nodeType) { - case 3: - return escapeText(node.data) - case 8: - return "" - default: - return serializeElement(node) - } -} - -function serializeElement(elem) { - var strings = [] - - var tagname = elem.tagName - - if (elem.namespaceURI === "http://www.w3.org/1999/xhtml") { - tagname = tagname.toLowerCase() - } - - strings.push("<" + tagname + properties(elem) + datasetify(elem)) - - if (voidElements.indexOf(tagname) > -1) { - strings.push(" />") - } else { - strings.push(">") - - if (elem.childNodes.length) { - strings.push.apply(strings, elem.childNodes.map(serializeNode)) - } else if (elem.textContent || elem.innerText) { - strings.push(escapeText(elem.textContent || elem.innerText)) - } else if (elem.innerHTML) { - strings.push(elem.innerHTML) - } - - strings.push("") - } - - return strings.join("") -} - -function isProperty(elem, key) { - var type = typeof elem[key] - - if (key === "style" && Object.keys(elem.style).length > 0) { - return true - } - - return elem.hasOwnProperty(key) && - (type === "string" || type === "boolean" || type === "number") && - key !== "nodeName" && key !== "className" && key !== "tagName" && - key !== "textContent" && key !== "innerText" && key !== "namespaceURI" && key !== "innerHTML" -} - -function stylify(styles) { - if (typeof styles === 'string') return styles - var attr = "" - Object.keys(styles).forEach(function (key) { - var value = styles[key] - key = key.replace(/[A-Z]/g, function(c) { - return "-" + c.toLowerCase(); - }) - attr += key + ":" + value + ";" - }) - return attr -} - -function datasetify(elem) { - var ds = elem.dataset - var props = [] - - for (var key in ds) { - props.push({ name: "data-" + key, value: ds[key] }) - } - - return props.length ? stringify(props) : "" -} - -function stringify(list) { - var attributes = [] - list.forEach(function (tuple) { - var name = tuple.name - var value = tuple.value - - if (name === "style") { - value = stylify(value) - } - - attributes.push(name + "=" + "\"" + escapeAttributeValue(value) + "\"") - }) - - return attributes.length ? " " + attributes.join(" ") : "" -} - -function properties(elem) { - var props = [] - for (var key in elem) { - if (isProperty(elem, key)) { - props.push({ name: key, value: elem[key] }) - } - } - - for (var ns in elem._attributes) { - for (var attribute in elem._attributes[ns]) { - var prop = elem._attributes[ns][attribute] - var name = (prop.prefix ? prop.prefix + ":" : "") + attribute - props.push({ name: name, value: prop.value }) - } - } - - if (elem.className) { - props.push({ name: "class", value: elem.className }) - } - - return props.length ? stringify(props) : "" -} - -function escapeText(s) { - var str = ''; - - if (typeof(s) === 'string') { - str = s; - } else if (s) { - str = s.toString(); - } - - return str - .replace(/&/g, "&") - .replace(//g, ">") -} - -function escapeAttributeValue(str) { - return escapeText(str).replace(/"/g, """) -} diff --git a/truebit-implementation/node_modules/min-document/test/cleanup.js b/truebit-implementation/node_modules/min-document/test/cleanup.js deleted file mode 100644 index d3ae66ab..00000000 --- a/truebit-implementation/node_modules/min-document/test/cleanup.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = Cleanup - -function Cleanup (document) { - - return cleanup - - function cleanup () { - var childNodes = document.body.childNodes - for (var i = 0; i < childNodes.length; i++) { - document.body.removeChild(childNodes[i]) - } - } -} diff --git a/truebit-implementation/node_modules/min-document/test/index.js b/truebit-implementation/node_modules/min-document/test/index.js deleted file mode 100644 index 14b736a1..00000000 --- a/truebit-implementation/node_modules/min-document/test/index.js +++ /dev/null @@ -1,14 +0,0 @@ -var testDocument = require("./test-document") -var testDomElement = require("./test-dom-element") -var testDomComment = require("./test-dom-comment") -var document = require("../index") - -testDocument(document) -testDomElement(document) -testDomComment(document) - -if (typeof window !== "undefined" && window.document) { - testDocument(window.document) - testDomElement(window.document) - testDomComment(window.document) -} diff --git a/truebit-implementation/node_modules/min-document/test/static/index.html b/truebit-implementation/node_modules/min-document/test/static/index.html deleted file mode 100644 index 60f6ef8b..00000000 --- a/truebit-implementation/node_modules/min-document/test/static/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - TAPE Example - - - - - - - diff --git a/truebit-implementation/node_modules/min-document/test/static/test-adapter.js b/truebit-implementation/node_modules/min-document/test/static/test-adapter.js deleted file mode 100644 index c5127925..00000000 --- a/truebit-implementation/node_modules/min-document/test/static/test-adapter.js +++ /dev/null @@ -1,49 +0,0 @@ -(function () { - var Testem = window.Testem - var regex = /^((?:not )?ok) (\d+) (.+)$/ - - Testem.useCustomAdapter(tapAdapter) - - function tapAdapter(socket){ - var results = { - failed: 0 - , passed: 0 - , total: 0 - , tests: [] - } - - socket.emit('tests-start') - - Testem.handleConsoleMessage = function(msg){ - var m = msg.match(regex) - if (m) { - var passed = m[1] === 'ok' - var test = { - passed: passed ? 1 : 0, - failed: passed ? 0 : 1, - total: 1, - id: m[2], - name: m[3], - items: [] - } - - if (passed) { - results.passed++ - } else { - results.failed++ - } - - results.total++ - - socket.emit('test-result', test) - results.tests.push(test) - } else if (msg === '# ok' || msg.match(/^# tests \d+/)){ - socket.emit('all-test-results', results) - } - - // return false if you want to prevent the console message from - // going to the console - // return false - } - } -}()) diff --git a/truebit-implementation/node_modules/min-document/test/test-document.js b/truebit-implementation/node_modules/min-document/test/test-document.js deleted file mode 100644 index 282d9df7..00000000 --- a/truebit-implementation/node_modules/min-document/test/test-document.js +++ /dev/null @@ -1,564 +0,0 @@ -var test = require("tape") - -module.exports = testDocument - -function testDocument(document) { - var cleanup = require('./cleanup')(document) - var Event = require('../event'); - - test("document is a Document", function (assert) { - assert.equal(typeof document.createTextNode, "function") - assert.equal(typeof document.createElement, "function") - assert.equal(typeof document.createDocumentFragment, "function") - - assert.end() - }) - - test("document has a head property", function(assert) { - assert.equal(document.head.tagName, "HEAD") - assert.end() - }) - - test("document has nodeType 9", function (assert) { - assert.equal(document.nodeType, 9) - assert.end() - }) - - test("can do stuff", function (assert) { - var div = document.createElement("div") - div.className = "foo bar" - - var span = document.createElement("span") - div.appendChild(span) - span.textContent = "Hello! <&>" - - var html = String(div.outerHTML || div) - - assert.equal(html, "
" + - "Hello! <&>
") - - cleanup() - assert.end() - }) - - test("can createDocumentFragment", function (assert) { - var frag = document.createDocumentFragment() - - assert.equal(frag.nodeType, 11) - - var h1 = document.createElement("h1") - var h2 = document.createElement("h2") - - assert.equal(h1.nodeType, 1) - assert.equal(h1.nodeType, 1) - - frag.appendChild(h1) - assert.equal(fragString(frag), "

") - - frag.appendChild(h2) - assert.equal(fragString(frag), "

") - - frag.removeChild(h1) - assert.equal(fragString(frag), "

") - - frag.replaceChild(h1, h2) - assert.equal(fragString(frag), "

") - - cleanup() - assert.end() - }) - - test("can getElementById", function (assert) { - - function append_div(id, parent) { - var div = document.createElement("div") - div.id = id - parent.appendChild(div) - return div - } - - var div1 = append_div(1, document.body) - var div2 = append_div(2, document.body) - var div3 = append_div(3, document.body) - - var div11 = append_div(11, div1) - var div12 = append_div(12, div1) - var div21 = append_div(21, div2) - var div22 = append_div(22, div2) - var div221 = append_div(221, div22) - var div222 = append_div(222, div22) - - assert.equal(document.getElementById(1), div1) - assert.equal(document.getElementById("2"), div2) - assert.equal(document.getElementById(3), div3) - assert.equal(document.getElementById(11), div11) - assert.equal(document.getElementById(12), div12) - assert.equal(document.getElementById(21), div21) - assert.equal(document.getElementById(22), div22) - assert.equal(document.getElementById(221), div221) - assert.equal(document.getElementById(222), div222) - - cleanup() - assert.end() - }) - - test("can getElementsByClassName for a single class", function(assert) { - function append_div(className, parent) { - var div = document.createElement("div") - div.className = className - parent.appendChild(div) - return div - } - - function assertSingleMatch(className, expectedElement) { - var result = document.getElementsByClassName(className) - assert.equal(result.length, 1) - assert.equal(result[0], expectedElement) - } - - var divA = append_div("A", document.body) - var divB = append_div("B", document.body) - var divC = append_div("C", document.body) - - var divA1 = append_div("A1", divA) - var divA2 = append_div("A2", divA) - var divB1 = append_div("B1", divB) - var divB2 = append_div("B2", divB) - var divB2a = append_div("B2a", divB2) - var divB2b = append_div("B2b", divB2) - - assertSingleMatch("A", divA) - assertSingleMatch("B", divB) - assertSingleMatch("C", divC) - assertSingleMatch("A1", divA1) - assertSingleMatch("A2", divA2) - assertSingleMatch("B1", divB1) - assertSingleMatch("B2", divB2) - assertSingleMatch("B2a", divB2a) - assertSingleMatch("B2b", divB2b) - - cleanup() - assert.end() - }) - - test("can getElementsByClassName for many elements", function (assert) { - function h(className) { - var div = document.createElement("div") - div.className = className - return div - } - - document.body.appendChild(h("multi-class-bar")) - document.body.appendChild(h("multi-class-bar")) - - var elems = document.getElementsByClassName("multi-class-bar") - assert.equal(elems.length, 2) - - cleanup() - assert.end() - }) - - test("can getElementsByClassName for many classes", function(assert) { - function append_div(classNames, parent) { - var div = document.createElement("div") - div.className = classNames - parent.appendChild(div) - return div - } - - function assertMatch(classNames, expectedElements) { - var result = document.getElementsByClassName(classNames) - assert.equal(result.length, expectedElements.length) - for (var i = 0; i < expectedElements.length; i++) { - assert.notEqual(expectedElements.indexOf(result[i]), -1) - } - } - - var divXYZ = append_div("X Y Z", document.body) - var divYZ = append_div("Y Z", document.body) - var divZX = append_div("Z X", document.body) - - var divX1X2 = append_div("X1 X2", divXYZ) - var divX1X2Y1 = append_div("X1 X2 Y1", divXYZ) - - - assertMatch("X", [divXYZ, divZX]) - assertMatch("Y Z", [divXYZ, divYZ]) - assertMatch("X Y Z", [divXYZ]) - assertMatch("X1 X2", [divX1X2, divX1X2Y1]) - - cleanup() - assert.end() - }) - - test("can create/manipulate textnodes", function (assert) { - var textnode = document.createTextNode("hello") - - assert.equal(textnode.nodeType, 3) - assert.equal(textnode.data, "hello") - assert.equal(typeof textnode.replaceData, "function") - - textnode.replaceData(0, 7, "nightly") - assert.equal(textnode.nodeType, 3) - assert.equal(textnode.data, "nightly") - assert.equal(typeof textnode.replaceData, "function") - - textnode.replaceData(1, 1, "ou") - assert.equal(textnode.nodeType, 3) - assert.equal(textnode.data, "noughtly") - - assert.end() - }) - - test("owner document is set", function (assert) { - var textnode = document.createTextNode("hello") - var domnode = document.createElement("div") - var fragment = document.createDocumentFragment() - - assert.equal(textnode.ownerDocument, document) - assert.equal(domnode.ownerDocument, document) - assert.equal(fragment.ownerDocument, document) - - assert.end() - }) - - test("Create namespaced nodes", function (assert) { - var svgURI = "http://www.w3.org/2000/svg" - var htmlURI = "http://www.w3.org/1999/xhtml" - - var noNS = document.createElement("div") - var svgNS = document.createElementNS(svgURI, "svg") - var emptyNS = document.createElementNS("", "div") - var nullNS = document.createElementNS(null, "div") - var undefNS = document.createElementNS(undefined, "div") - var caseNS = document.createElementNS("Oops", "AbC") - var htmlNS = document.createElement("div") - - assert.equal(noNS.tagName, "DIV") - assert.equal(noNS.namespaceURI, htmlURI) - assert.equal(elemString(noNS), "
") - - assert.equal(svgNS.tagName, "svg") - assert.equal(svgNS.namespaceURI, svgURI) - assert.equal(elemString(svgNS), "") - - assert.equal(emptyNS.tagName, "div") - assert.equal(emptyNS.namespaceURI, null) - assert.equal(elemString(emptyNS), "
") - - assert.equal(nullNS.tagName, "div") - assert.equal(nullNS.namespaceURI, null) - assert.equal(elemString(nullNS), "
") - - assert.equal(undefNS.tagName, "div") - assert.equal(undefNS.namespaceURI, "undefined") - assert.equal(elemString(undefNS), "
") - - assert.equal(caseNS.tagName, "AbC") - assert.equal(caseNS.namespaceURI, "Oops") - assert.equal(elemString(caseNS), "") - - assert.equal(htmlNS.tagName, "DIV") - assert.equal(htmlNS.namespaceURI, htmlURI) - assert.equal(elemString(htmlNS), "
") - - assert.end() - }) - - test("Can insert before", function (assert) { - var rootNode = document.createElement("div") - var child = document.createElement("div") - var newElement = document.createElement("div") - rootNode.appendChild(child) - var el = rootNode.insertBefore(newElement, child) - assert.equal(el, newElement) - assert.equal(rootNode.childNodes.length, 2) - assert.equal(rootNode.childNodes[0], newElement) - assert.equal(rootNode.childNodes[1], child) - cleanup() - assert.end() - }) - - test("Insert before null appends to end", function (assert) { - var rootNode = document.createElement("div") - var child = document.createElement("div") - var newElement = document.createElement("div") - rootNode.appendChild(child) - var el = rootNode.insertBefore(newElement, null) - assert.equal(el, newElement) - assert.equal(rootNode.childNodes.length, 2) - assert.equal(rootNode.childNodes[0], child) - assert.equal(rootNode.childNodes[1], newElement) - cleanup() - assert.end() - }) - - test("Node insertions remove node from parent", function (assert) { - var parent = document.createElement("div") - var c1 = document.createElement("div") - var c2 = document.createElement("div") - var c3 = document.createElement("div") - parent.appendChild(c1) - parent.appendChild(c2) - parent.appendChild(c3) - - var rootNode = document.createElement("div") - - var node1 = rootNode.appendChild(c1) - assert.equal(node1, c1) - assert.equal(parent.childNodes.length, 2) - assert.equal(c1.parentNode, rootNode) - - var node2 = rootNode.insertBefore(c2, c1) - assert.equal(node2, c2) - assert.equal(parent.childNodes.length, 1) - assert.equal(c2.parentNode, rootNode) - - var node3 = rootNode.replaceChild(c3, c2) - assert.equal(node3, c2) - assert.equal(parent.childNodes.length, 0) - assert.equal(c3.parentNode, rootNode) - assert.equal(c2.parentNode, null) - - cleanup() - assert.end() - }) - - test("input has type=text by default", function (assert) { - var elem = document.createElement("input") - assert.equal(elem.getAttribute("type"), "text"); - assert.equal(elemString(elem), "") - assert.end() - }) - - test("input type=text can be overridden", function (assert) { - var elem = document.createElement("input") - elem.setAttribute("type", "hidden") - assert.equal(elem.getAttribute("type"), "hidden"); - assert.equal(elemString(elem), "") - assert.end() - }) - - test("can set and get attributes", function (assert) { - var elem = document.createElement("div") - assert.equal(elem.getAttribute("foo"), null) - assert.equal(elemString(elem), "
") - assert.notOk(elem.hasAttribute('foo')) - - elem.setAttribute("foo", "bar") - assert.equal(elem.getAttribute("foo"), "bar") - assert.equal(elemString(elem), "
") - assert.ok(elem.hasAttribute('foo')) - - elem.removeAttribute("foo") - assert.equal(elem.getAttribute("foo"), null) - assert.equal(elemString(elem), "
") - assert.notOk(elem.hasAttribute('foo')) - - assert.end() - }) - - test("can set and set style properties", function(assert) { - var elem = document.createElement("div") - assert.equal(elemString(elem), "
") - - elem.style.color = "red"; - assert.equal(elem.style.color, "red") - assert.equal(elemString(elem), "
") - - elem.style.background = "blue"; - assert.equal(elem.style.color, "red") - assert.equal(elem.style.background, "blue") - assert.equal(elemString(elem), - "
") - - assert.end() - }) - - test("can set and get namespaced attributes", function(assert) { - var elem = document.createElement("div") - - var ns = "http://ns.com/my" - assert.equal(elem.getAttributeNS(ns, "myattr"), blankAttributeNS()) - elem.setAttributeNS(ns, "myns:myattr", "the value") - assert.equal(elem.getAttributeNS(ns, "myattr"), "the value") - assert.equal(elemString(elem), '
') - elem.removeAttributeNS(ns, "myattr") - assert.equal(elem.getAttributeNS(ns, "myattr"), blankAttributeNS()) - - // Should work much like get/setAttribute when namespace is null. - assert.equal(elem.getAttributeNS(null, "foo"), blankAttributeNS()) - assert.equal(elem.getAttribute("foo"), null) - elem.setAttributeNS(null, "foo", "bar") - assert.equal(elem.getAttributeNS(null, "foo"), "bar") - assert.equal(elem.getAttribute("foo"), "bar") - elem.removeAttributeNS(null, "foo") - assert.equal(elem.getAttributeNS(null, "foo"), blankAttributeNS()) - assert.equal(elem.getAttribute("foo"), null) - assert.end() - }) - - test("can getElementsByTagName", function(assert) { - var parent = document.createElement("div") - var child1 = document.createElement("span") - var child2 = document.createElement("span") - - child1.id = "foo" - child2.id = "bar" - - child1.appendChild(child2) - parent.appendChild(child1) - document.body.appendChild(parent) - - var elems = document.getElementsByTagName("SPAN") - - assert.equal(elems.length, 2) - assert.equal(elems[0].id, "foo") - assert.equal(elems[1].id, "bar") - - cleanup() - assert.end() - }) - - test("can getElementsByTagName with *", function(assert) { - document.body.appendChild(document.createElement("div")) - - var elems = document.getElementsByTagName("*") - - assert.equal(elems.length, 4) - assert.equal(elems[0].tagName, "HTML") - assert.equal(elems[1].tagName, "HEAD") - assert.equal(elems[2].tagName, "BODY") - assert.equal(elems[3].tagName, "DIV") - - cleanup() - assert.end() - }) - - test("getElement* methods search outside the body", function(assert) { - var html = document.documentElement; - assert.equal(document.getElementsByTagName("html")[0], html) - - html.id = "foo" - assert.equal(document.getElementById("foo"), html) - - html.className = "bar" - assert.equal(document.getElementsByClassName("bar")[0], html) - - // cleanup - html.id = "" - html.className = "" - - cleanup() - assert.end() - }) - - test("getElement* methods can be passed to map()", function(assert) { - var e1 = document.createElement("div") - var e2 = document.createElement("span") - - document.body.appendChild(e1) - document.body.appendChild(e2) - - assert.deepEqual( - ["div", "span"].map(document.getElementsByTagName.bind(document)), - [[e1], [e2]] - ) - - e1.id = "1" - e2.id = "2" - - assert.deepEqual( - ["1", "2"].map(document.getElementById.bind(document)), - [e1, e2] - ) - - e1.className = "foo" - e2.className = "bar" - - assert.deepEqual( - ["foo", "bar"].map(document.getElementsByClassName.bind(document)), - [[e1], [e2]] - ) - - cleanup() - assert.end() - }) - - test("can check if it contains an element", function(assert) { - var el = document.createElement("div") - document.body.appendChild(el) - - assert.equals(document.contains(document.body), true) - assert.equals(document.contains(el), true) - - cleanup() - assert.end() - }) - - test("can do events", function (assert) { - var x = 1 - function incx() { x++ } - - var ev = new Event(); - ev.initEvent("click"); - document.addEventListener("click", incx) - document.dispatchEvent(ev) - - assert.equal(x, 2) - - document.removeEventListener("click", incx) - document.dispatchEvent(ev) - - assert.equal(x, 2) - assert.end() - }) - - function blankAttributeNS() { - // Most browsers conform to the latest version of the DOM spec, - // which requires `getAttributeNS` to return `null` when the attribute - // doesn't exist, but some browsers (including phantomjs) implement the - // old version of the spec and return an empty string instead, see: - // https://developer.mozilla.org/en-US/docs/Web/API/element.getAttributeNS#Return_value - var div = document.createElement("div") - var blank = div.getAttributeNS(null, "foo") - if (!(blank === null || blank === "")) { - throw "Expected blank attribute to be either null or empty string" - } - return blank; - } - - function elemString(element) { - var html = String(element) || "[]" - - if (html.charAt(0) === "[") { - html = element.outerHTML - if (!html && !element.parentNode) { - var div = document.createElement("div") - div.appendChild(element) - html = div.innerHTML - div.removeChild(element) - } - } - - return html - } - - function fragString(fragment) { - var html = String(fragment) - - - if (html === "[object DocumentFragment]") { - var innerHTML = [] - for (var i = 0; i < fragment.childNodes.length; i++) { - var node = fragment.childNodes[i] - innerHTML.push(String(node.outerHTML || node)) - } - html = innerHTML.join("") - } - - return html - } -} - - diff --git a/truebit-implementation/node_modules/min-document/test/test-dom-comment.js b/truebit-implementation/node_modules/min-document/test/test-dom-comment.js deleted file mode 100644 index 7ecf175e..00000000 --- a/truebit-implementation/node_modules/min-document/test/test-dom-comment.js +++ /dev/null @@ -1,20 +0,0 @@ -var test = require("tape") - -module.exports = testDomComment - -function testDomComment(document) { - var cleanup = require('./cleanup')(document) - - test("can createComment", function(assert) { - var comment = document.createComment("test") - assert.equal(comment.data, "test") - assert.equal(comment.length, 4) - assert.equal(comment.nodeName, "#comment") - assert.equal(comment.nodeType, 8) - assert.equal(comment.nodeValue, "test") - assert.equal(comment.ownerDocument, document) - assert.equal(comment.toString(), "[object Comment]") - cleanup() - assert.end() - }) -} diff --git a/truebit-implementation/node_modules/min-document/test/test-dom-element.js b/truebit-implementation/node_modules/min-document/test/test-dom-element.js deleted file mode 100644 index b7f2baab..00000000 --- a/truebit-implementation/node_modules/min-document/test/test-dom-element.js +++ /dev/null @@ -1,219 +0,0 @@ -var test = require("tape") - -module.exports = testDomElement - -function testDomElement(document) { - - var cleanup = require('./cleanup')(document) - - test("can getElementsByClassName", function(assert) { - function append_div(classNames, parent) { - var div = document.createElement("div") - div.className = classNames - parent.appendChild(div) - return div - } - - function assertMatch(classNames, expectedElements, parent) { - var parent = parent || document - var result = parent.getElementsByClassName(classNames) - assert.equal(result.length, expectedElements.length) - for (var i = 0; i < expectedElements.length; i++) { - assert.notEqual(expectedElements.indexOf(result[i]), -1) - } - } - - var divA = append_div("A", document.body) - var divB = append_div("B", document.body) - var divC = append_div("C", document.body) - - var divA1 = append_div("A1", divA) - var divA2 = append_div("A2", divA) - var divB1 = append_div("B1", divB) - var divB2 = append_div("B2", divB) - var divB2a = append_div("B2a", divB2) - var divB2b = append_div("B2b", divB2) - - assertMatch("A", [divA]) - assertMatch("B", [divB]) - assertMatch("C", [divC]) - assertMatch("A1", [divA1]) - assertMatch("A2", [divA2]) - assertMatch("B1", [divB1]) - assertMatch("B2", [divB2]) - assertMatch("B2a", [divB2a]) - assertMatch("B2b", [divB2b]) - - assertMatch("A1", [divA1], divA) - assertMatch("A2", [divA2], divA) - assertMatch("A1", [], divB) - assertMatch("A2", [], divC) - assertMatch("B1", [divB1], divB) - assertMatch("B2", [divB2], divB) - assertMatch("B2a", [divB2a], divB) - assertMatch("B2a", [divB2a], divB2) - assertMatch("B2b", [], divA) - - cleanup() - assert.end() - }) - - test("does not serialize innerText as an attribute", function(assert) { - var div = document.createElement("div") - div.innerText = "Test <&>" - assert.equal(div.toString(), "
Test <&>
") - cleanup() - assert.end() - }) - - test("does not serialize innerHTML as an attribute", function(assert) { - var div = document.createElement("div") - div.innerHTML = "Test " - assert.equal(div.toString(), "
Test
") - cleanup() - assert.end() - }) - - test("can getElementsByTagName", function(assert) { - var parent = document.createElement("div") - var child1 = document.createElement("span") - var child2 = document.createElement("span") - - child1.id = "foo" - child2.id = "bar" - - child1.appendChild(child2) - parent.appendChild(child1) - - var elems = parent.getElementsByTagName("SPAN") - - assert.equal(elems.length, 2) - assert.equal(elems[0].id, "foo") - assert.equal(elems[1].id, "bar") - - cleanup() - assert.end() - }) - - test("can getElementsByTagName with *", function(assert) { - var e1 = document.createElement("div") - var e2 = document.createElement("p") - var e3 = document.createElement("span") - - e1.appendChild(e2) - e2.appendChild(e3) - // non-elements should be ignored - e3.appendChild(document.createTextNode('foo')) - e3.appendChild(document.createComment('bar')) - - var elems = e1.getElementsByTagName("*") - - assert.equal(elems.length, 2) - assert.equal(elems[0].tagName, "P") - assert.equal(elems[1].tagName, "SPAN") - - cleanup() - assert.end() - }) - - test("getElement* methods can be passed to map()", function(assert) { - var container = document.createElement("div") - var e1 = document.createElement("div") - var e2 = document.createElement("span") - container.appendChild(e1) - container.appendChild(e2) - - assert.deepEqual( - ["div", "span"].map(container.getElementsByTagName.bind(container)), - [[e1], [e2]] - ) - - e1.className = "foo" - e2.className = "bar" - - assert.deepEqual( - ["foo", "bar"].map(container.getElementsByClassName.bind(container)), - [[e1], [e2]] - ) - - cleanup() - assert.end() - }) - - test("can serialize comment nodes", function(assert) { - var div = document.createElement("div") - div.appendChild(document.createComment("test")) - assert.equal(div.toString(), "
") - cleanup() - assert.end() - }) - - test("can serialize style property", function(assert) { - var div = document.createElement("div") - div.style.fontSize = "16px" - assert.equal(div.toString(), "
") - cleanup(); - assert.end() - }) - - test("can serialize style as a string", function(assert) { - var div = document.createElement("div") - div.setAttribute('style', 'display: none') - assert.equal(div.toString(), "
") - cleanup() - assert.end() - }) - - test("can serialize text nodes", function(assert) { - var div = document.createElement("div") - div.appendChild(document.createTextNode(' "&')) - assert.equal(div.toString(), '
<test> "&
') - cleanup() - assert.end() - }) - - test("escapes serialized attribute values", function(assert) { - var div = document.createElement("div") - div.setAttribute("data-foo", '

"&') - assert.equal(div.toString(), '

') - cleanup() - assert.end() - }) - - test("can check if an element contains another", function(assert) { - var parent = document.createElement("div") - var sibling = document.createElement("div") - var child1 = document.createElement("div") - var child2 = document.createElement("div") - - child1.appendChild(child2) - parent.appendChild(child1) - - assert.equal(parent.contains(parent), true) - assert.equal(parent.contains(sibling), false) - assert.equal(parent.contains(child1), true) - assert.equal(parent.contains(child2), true) - - cleanup() - assert.end() - }) - - test("can handle non string attribute values", function(assert) { - var div = document.createElement("div") - div.setAttribute("data-number", 100) - div.setAttribute("data-boolean", true) - div.setAttribute("data-null", null) - assert.equal(div.toString(), '
') - cleanup() - assert.end() - }) - - test("can serialize textarea correctly", function(assert) { - var input = document.createElement("textarea") - input.setAttribute("name", "comment") - input.innerHTML = "user input here" - assert.equal(input.toString(), '') - cleanup() - assert.end() - }) -} diff --git a/truebit-implementation/node_modules/minimalistic-assert/LICENSE b/truebit-implementation/node_modules/minimalistic-assert/LICENSE deleted file mode 100644 index adca66b3..00000000 --- a/truebit-implementation/node_modules/minimalistic-assert/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2015 Calvin Metcalf - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/truebit-implementation/node_modules/minimalistic-assert/index.js b/truebit-implementation/node_modules/minimalistic-assert/index.js deleted file mode 100644 index 70b4ea5b..00000000 --- a/truebit-implementation/node_modules/minimalistic-assert/index.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = assert; - -function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -} - -assert.equal = function assertEqual(l, r, msg) { - if (l != r) - throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); -}; diff --git a/truebit-implementation/node_modules/minimalistic-assert/package.json b/truebit-implementation/node_modules/minimalistic-assert/package.json deleted file mode 100644 index 09844aa0..00000000 --- a/truebit-implementation/node_modules/minimalistic-assert/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "_from": "minimalistic-assert@^1.0.0", - "_id": "minimalistic-assert@1.0.1", - "_inBundle": false, - "_integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "_location": "/minimalistic-assert", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "minimalistic-assert@^1.0.0", - "name": "minimalistic-assert", - "escapedName": "minimalistic-assert", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/asn1.js", - "/des.js", - "/elliptic", - "/ethers/hash.js", - "/hash.js", - "/hmac-drbg" - ], - "_resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "_shasum": "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7", - "_spec": "minimalistic-assert@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/elliptic", - "author": "", - "bugs": { - "url": "https://github.com/calvinmetcalf/minimalistic-assert/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "minimalistic-assert ===", - "homepage": "https://github.com/calvinmetcalf/minimalistic-assert", - "license": "ISC", - "main": "index.js", - "name": "minimalistic-assert", - "repository": { - "type": "git", - "url": "git+https://github.com/calvinmetcalf/minimalistic-assert.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/minimalistic-assert/readme.md b/truebit-implementation/node_modules/minimalistic-assert/readme.md deleted file mode 100644 index 2ca0d256..00000000 --- a/truebit-implementation/node_modules/minimalistic-assert/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -minimalistic-assert -=== - -very minimalistic assert module. diff --git a/truebit-implementation/node_modules/minimalistic-crypto-utils/.npmignore b/truebit-implementation/node_modules/minimalistic-crypto-utils/.npmignore deleted file mode 100644 index 1ca95717..00000000 --- a/truebit-implementation/node_modules/minimalistic-crypto-utils/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log diff --git a/truebit-implementation/node_modules/minimalistic-crypto-utils/.travis.yml b/truebit-implementation/node_modules/minimalistic-crypto-utils/.travis.yml deleted file mode 100644 index ce24b7a7..00000000 --- a/truebit-implementation/node_modules/minimalistic-crypto-utils/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -sudo: false - -language: node_js - -node_js: - - "4" - - "6" - - "stable" - -script: - - npm test diff --git a/truebit-implementation/node_modules/minimalistic-crypto-utils/README.md b/truebit-implementation/node_modules/minimalistic-crypto-utils/README.md deleted file mode 100644 index 9e58eba8..00000000 --- a/truebit-implementation/node_modules/minimalistic-crypto-utils/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# minimalistic-crypto-utils -[![Build Status](https://secure.travis-ci.org/indutny/minimalistic-crypto-utils.svg)](http://travis-ci.org/indutny/minimalistic-crypto-utils) -[![NPM version](https://badge.fury.io/js/minimalistic-crypto-utils.svg)](http://badge.fury.io/js/minimalistic-crypto-utils) - -Very minimal utils that are required in order to write reasonable JS-only -crypto module. - -## Usage - -```js -const utils = require('minimalistic-crypto-utils'); - -utils.toArray('abcd', 'hex'); -utils.encode([ 1, 2, 3, 4 ], 'hex'); -utils.toHex([ 1, 2, 3, 4 ]); -``` - -#### LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2017. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. - -[0]: http://tools.ietf.org/html/rfc6979 -[1]: https://github.com/indutny/bn.js -[2]: https://github.com/indutny/hash.js -[3]: https://github.com/bitchan/eccrypto -[4]: https://github.com/wanderer/secp256k1-node diff --git a/truebit-implementation/node_modules/minimalistic-crypto-utils/lib/utils.js b/truebit-implementation/node_modules/minimalistic-crypto-utils/lib/utils.js deleted file mode 100644 index cd48daf1..00000000 --- a/truebit-implementation/node_modules/minimalistic-crypto-utils/lib/utils.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -var utils = exports; - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg !== 'string') { - for (var i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - return res; - } - if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (var i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } else { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); - } - } - return res; -} -utils.toArray = toArray; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -utils.zero2 = zero2; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -utils.toHex = toHex; - -utils.encode = function encode(arr, enc) { - if (enc === 'hex') - return toHex(arr); - else - return arr; -}; diff --git a/truebit-implementation/node_modules/minimalistic-crypto-utils/package.json b/truebit-implementation/node_modules/minimalistic-crypto-utils/package.json deleted file mode 100644 index fd782e89..00000000 --- a/truebit-implementation/node_modules/minimalistic-crypto-utils/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "_from": "minimalistic-crypto-utils@^1.0.0", - "_id": "minimalistic-crypto-utils@1.0.1", - "_inBundle": false, - "_integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "_location": "/minimalistic-crypto-utils", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "minimalistic-crypto-utils@^1.0.0", - "name": "minimalistic-crypto-utils", - "escapedName": "minimalistic-crypto-utils", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/elliptic", - "/hmac-drbg" - ], - "_resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "_shasum": "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a", - "_spec": "minimalistic-crypto-utils@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/elliptic", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/minimalistic-crypto-utils/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Minimalistic tools for JS crypto modules", - "devDependencies": { - "mocha": "^3.2.0" - }, - "homepage": "https://github.com/indutny/minimalistic-crypto-utils#readme", - "keywords": [ - "minimalistic", - "utils", - "crypto" - ], - "license": "MIT", - "main": "lib/utils.js", - "name": "minimalistic-crypto-utils", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/minimalistic-crypto-utils.git" - }, - "scripts": { - "test": "mocha --reporter=spec test/*-test.js" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/minimalistic-crypto-utils/test/utils-test.js b/truebit-implementation/node_modules/minimalistic-crypto-utils/test/utils-test.js deleted file mode 100644 index 3da812db..00000000 --- a/truebit-implementation/node_modules/minimalistic-crypto-utils/test/utils-test.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -const assert = require('assert'); -const utils = require('../'); - -describe('utils', () => { - it('should convert to array', () => { - assert.deepEqual(utils.toArray('1234', 'hex'), [ 0x12, 0x34 ]); - assert.deepEqual(utils.toArray('1234'), [ 49, 50, 51, 52 ]); - assert.deepEqual(utils.toArray('1234', 'utf8'), [ 49, 50, 51, 52 ]); - assert.deepEqual(utils.toArray('\u1234234'), [ 18, 52, 50, 51, 52 ]); - assert.deepEqual(utils.toArray([ 1, 2, 3, 4 ]), [ 1, 2, 3, 4 ]); - }); - - it('should zero pad byte to hex', () => { - assert.equal(utils.zero2('0'), '00'); - assert.equal(utils.zero2('01'), '01'); - }); - - it('should convert to hex', () => { - assert.equal(utils.toHex([ 0, 1, 2, 3 ]), '00010203'); - }); - - it('should encode', () => { - assert.deepEqual(utils.encode([ 0, 1, 2, 3 ]), [ 0, 1, 2, 3 ]); - assert.deepEqual(utils.encode([ 0, 1, 2, 3 ], 'hex'), '00010203'); - }); -}); diff --git a/truebit-implementation/node_modules/minimatch/LICENSE b/truebit-implementation/node_modules/minimatch/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/truebit-implementation/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/minimatch/README.md b/truebit-implementation/node_modules/minimatch/README.md deleted file mode 100644 index ad72b813..00000000 --- a/truebit-implementation/node_modules/minimatch/README.md +++ /dev/null @@ -1,209 +0,0 @@ -# minimatch - -A minimal matching utility. - -[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.svg)](http://travis-ci.org/isaacs/minimatch) - - -This is the matching library used internally by npm. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -## Minimatch Class - -Create a minimatch object by instantiating the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself if this option is set. When not set, an empty list -is returned if there are no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. diff --git a/truebit-implementation/node_modules/minimatch/minimatch.js b/truebit-implementation/node_modules/minimatch/minimatch.js deleted file mode 100644 index 5b5f8cf4..00000000 --- a/truebit-implementation/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,923 +0,0 @@ -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var path = { sep: '/' } -try { - path = require('path') -} catch (er) {} - -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = require('brace-expansion') - -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -} - -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' - -// * => any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - if (typeof pattern === 'undefined') { - throw new TypeError('undefined pattern') - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - if (pattern.length > 1024 * 64) { - throw new TypeError('pattern is too long') - } - - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd - } - - // should be unreachable. - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} diff --git a/truebit-implementation/node_modules/minimatch/package.json b/truebit-implementation/node_modules/minimatch/package.json deleted file mode 100644 index 352bdcdd..00000000 --- a/truebit-implementation/node_modules/minimatch/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "minimatch@^3.0.4", - "_id": "minimatch@3.0.4", - "_inBundle": false, - "_integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "_location": "/minimatch", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "minimatch@^3.0.4", - "name": "minimatch", - "escapedName": "minimatch", - "rawSpec": "^3.0.4", - "saveSpec": null, - "fetchSpec": "^3.0.4" - }, - "_requiredBy": [ - "/glob" - ], - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "_shasum": "5166e286457f03306064be5497e8dbb0c3d32083", - "_spec": "minimatch@^3.0.4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/glob", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "bundleDependencies": false, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "deprecated": false, - "description": "a glob matcher in javascript", - "devDependencies": { - "tap": "^10.3.2" - }, - "engines": { - "node": "*" - }, - "files": [ - "minimatch.js" - ], - "homepage": "https://github.com/isaacs/minimatch#readme", - "license": "ISC", - "main": "minimatch.js", - "name": "minimatch", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "scripts": { - "postpublish": "git push origin --all; git push origin --tags", - "postversion": "npm publish", - "preversion": "npm test", - "test": "tap test/*.js --cov" - }, - "version": "3.0.4" -} diff --git a/truebit-implementation/node_modules/minimetoken/.babelrc b/truebit-implementation/node_modules/minimetoken/.babelrc deleted file mode 100644 index 4b74adc4..00000000 --- a/truebit-implementation/node_modules/minimetoken/.babelrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "presets": ["es2015", "stage-2"], - "plugins": [ - "add-module-exports" - ] -} - diff --git a/truebit-implementation/node_modules/minimetoken/.eslintrc b/truebit-implementation/node_modules/minimetoken/.eslintrc deleted file mode 100644 index ab7ddee9..00000000 --- a/truebit-implementation/node_modules/minimetoken/.eslintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "airbnb", - "rules": { - "jsx-a11y/href-no-hash": "off", - "jsx-a11y/anchor-is-valid": ["warn", { "aspects": ["invalidHref"] }] - } -} diff --git a/truebit-implementation/node_modules/minimetoken/.travis.yml b/truebit-implementation/node_modules/minimetoken/.travis.yml deleted file mode 100644 index 702bb2d8..00000000 --- a/truebit-implementation/node_modules/minimetoken/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: 'node_js' -node_js: - - '8' diff --git a/truebit-implementation/node_modules/minimetoken/LICENSE b/truebit-implementation/node_modules/minimetoken/LICENSE deleted file mode 100644 index 9cecc1d4..00000000 --- a/truebit-implementation/node_modules/minimetoken/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/truebit-implementation/node_modules/minimetoken/README.md b/truebit-implementation/node_modules/minimetoken/README.md deleted file mode 100644 index 13351749..00000000 --- a/truebit-implementation/node_modules/minimetoken/README.md +++ /dev/null @@ -1,71 +0,0 @@ -![MiniMe Token](readme-header.png) - -[![Build Status](https://travis-ci.org/Giveth/minime.svg?branch=master)](https://travis-ci.org/Giveth/minime) - -The MiniMeToken contract is a standard ERC20 token with extra functionality: - -### The token is easy to clone! - -Anybody can create a new clone token from any token using this contract with an initial distribution identical to the original token at a specified block. The address calling the `createCloneToken` function will become the token controller and the token's default settings can be specified in the function call. - - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _isConstant - ) returns(address) { - -Once the clone token is created, it acts as a completely independent token, with it's own unique functionalities. - -### Balance history is registered and available to be queried - -All MiniMe Tokens maintain a history of the balance changes that occur during each block. Two calls are introduced to read the totalSupply and the balance of any address at any block in the past. - - function totalSupplyAt(uint _blockNumber) constant returns(uint) - - function balanceOfAt(address _holder, uint _blockNumber) constant returns (uint) - -### Optional token controller - -The controller of the contract can generate/destroy/transfer tokens at its own discretion. The controller can be a regular account, but the intention is for the controller to be another contract that imposes transparent rules on the token's issuance and functionality. The Token Controller is not required for the MiniMe token to function, if there is no reason to generate/destroy/transfer tokens, the token controller can be set to 0x0 and this functionality will be disabled. - -For example, a Token Creation contract can be set as the controller of the MiniMe Token and at the end of the token creation period, the controller can be transferred to the 0x0 address, to guarantee that no new tokens will be created. - -To create and destroy tokens, these two functions are introduced: - - function generateTokens(address _holder, uint _value) onlyController - - function destroyTokens(address _holder, uint _value) onlyController - -### The Token's Controller can freeze transfers. - -If transfersEnabled == false, tokens cannot be transferred by the users, however they can still be created, destroyed, and transferred by the controller. The controller can also toggle this flag. - - // Allows tokens to be transferred if true or frozen if false - function enableTransfers(bool _transfersEnabled) onlyController - - -## Applications - -If this token contract is used as the base token, then clones of itself can be easily generated at any given block number, this allows for incredibly powerful functionality, effectively the ability for anyone to give extra features to the token holders without having to migrate to a new contract. Some of the applications that the MiniMe token contract can be used for are: - -1. Generating a voting token that is burned when you vote. -2. Generating a discount "coupon" that is redeemed when you use it. -3. Generating a token for a "spinoff" DAO. -4. Generating a token that can be used to give explicit support to an action or a campaign, like polling. -5. Generating a token to enable the token holders to collect daily, monthly or yearly payments. -6. Generating a token to limit participation in a token sale or similar event to holders of a specific token. -7. Generating token that allows a central party complete control to transfer/generate/destroy tokens at will. -8. Lots of other applications including all the applications the standard ERC 20 token can be used for. - -All these applications and more are enabled by the MiniMe Token Contract. The most amazing part being that anyone that wants to add these features can, in a permissionless yet safe manner without affecting the parent token's intended functionality. - -# How to deploy a campaign - -1. Deploy the MinimeTokenFactory -2. Deploy the MinimeToken -3. Deploy the campaign -4. Assign the controller of the MinimeToken to the campaign. - - diff --git a/truebit-implementation/node_modules/minimetoken/build/Controlled.sol.js b/truebit-implementation/node_modules/minimetoken/build/Controlled.sol.js deleted file mode 100644 index 92c48967..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/Controlled.sol.js +++ /dev/null @@ -1,7 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.ControlledAbi = [{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.ControlledByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820348e33213b8644e828ed3b4249fa8ae33458cd699d8de08bf42e589b2b9fe1eb0029" -exports.ControlledRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820348e33213b8644e828ed3b4249fa8ae33458cd699d8de08bf42e589b2b9fe1eb0029" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0xcd25f1d20c06711ec5147fce5dc8518b5374f61f2313d4035c3650bd229e9de0" diff --git a/truebit-implementation/node_modules/minimetoken/build/Controlled_all.sol b/truebit-implementation/node_modules/minimetoken/build/Controlled_all.sol deleted file mode 100644 index 7acea1c9..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/Controlled_all.sol +++ /dev/null @@ -1,19 +0,0 @@ - -//File: ./contracts/Controlled.sol -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} diff --git a/truebit-implementation/node_modules/minimetoken/build/MiniMeToken.sol.js b/truebit-implementation/node_modules/minimetoken/build/MiniMeToken.sol.js deleted file mode 100644 index 6a4b39c6..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/MiniMeToken.sol.js +++ /dev/null @@ -1,19 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.ApproveAndCallFallBackAbi = [{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.ApproveAndCallFallBackByteCode = "0x" -exports.ApproveAndCallFallBackRuntimeByteCode = "0x" -exports.ControlledAbi = [{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.ControlledByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a7230582043333a8b095389ff264eecd48cfd453fe9e041cb62ef9c8e69d7b5dc7cbd95a50029" -exports.ControlledRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a7230582043333a8b095389ff264eecd48cfd453fe9e041cb62ef9c8e69d7b5dc7cbd95a50029" -exports.MiniMeTokenAbi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"},{"name":"_parentToken","type":"address"},{"name":"_parentSnapShotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}] -exports.MiniMeTokenByteCode = "0x606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029" -exports.MiniMeTokenRuntimeByteCode = "0x60606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029" -exports.MiniMeTokenFactoryAbi = [{"constant":false,"inputs":[{"name":"_parentToken","type":"address"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.MiniMeTokenFactoryByteCode = "0x6060604052341561000f57600080fd5b611da88061001e6000396000f3006060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029a165627a7a72305820e208044c8532f683dc98523b677e1590afde4d7eb0bd9792444b90be4faab8760029" -exports.MiniMeTokenFactoryRuntimeByteCode = "0x6060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a723058206db697bf05f5caad20f434c2c4f1537ac2fff5dbc9f2bfb555fa00ba27c1ad730029a165627a7a72305820e208044c8532f683dc98523b677e1590afde4d7eb0bd9792444b90be4faab8760029" -exports.TokenControllerAbi = [{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] -exports.TokenControllerByteCode = "0x" -exports.TokenControllerRuntimeByteCode = "0x" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0x845cc0cb1e13345077b3a216115caff06c9e9f89735b00309f3f1bc78fe62325" diff --git a/truebit-implementation/node_modules/minimetoken/build/MiniMeToken_all.sol b/truebit-implementation/node_modules/minimetoken/build/MiniMeToken_all.sol deleted file mode 100644 index 4a88e1d4..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/MiniMeToken_all.sol +++ /dev/null @@ -1,612 +0,0 @@ - -//File: contracts/Controlled.sol -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} - -//File: contracts/TokenController.sol -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} - -//File: ./contracts/MiniMeToken.sol -pragma solidity ^0.4.18; - -/* - Copyright 2016, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MiniMeToken Contract -/// @author Jordi Baylina -/// @dev This token contract's goal is to make it easy for anyone to clone this -/// token using the token distribution at a given block, this will allow DAO's -/// and DApps to upgrade their features in a decentralized manner without -/// affecting the original token -/// @dev It is ERC20 compliant, but still needs to under go further testing. - - - - -contract ApproveAndCallFallBack { - function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; -} - -/// @dev The actual token contract, the default controller is the msg.sender -/// that deploys the contract, so usually this token will be deployed by a -/// token controller contract, which Giveth will call a "Campaign" -contract MiniMeToken is Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - string public version = 'MMT_0.2'; //An arbitrary versioning scheme - - - /// @dev `Checkpoint` is the structure that attaches a block number to a - /// given value, the block number attached is the one that last changed the - /// value - struct Checkpoint { - - // `fromBlock` is the block number that the value was generated from - uint128 fromBlock; - - // `value` is the amount of tokens at a specific block number - uint128 value; - } - - // `parentToken` is the Token address that was cloned to produce this token; - // it will be 0x0 for a token that was not cloned - MiniMeToken public parentToken; - - // `parentSnapShotBlock` is the block number from the Parent Token that was - // used to determine the initial distribution of the Clone Token - uint public parentSnapShotBlock; - - // `creationBlock` is the block number that the Clone Token was created - uint public creationBlock; - - // `balances` is the map that tracks the balance of each address, in this - // contract when the balance changes the block number that the change - // occurred is also included in the map - mapping (address => Checkpoint[]) balances; - - // `allowed` tracks any extra transfer rights as in all ERC20 tokens - mapping (address => mapping (address => uint256)) allowed; - - // Tracks the history of the `totalSupply` of the token - Checkpoint[] totalSupplyHistory; - - // Flag that determines if the token is transferable or not. - bool public transfersEnabled; - - // The factory used to create new clone tokens - MiniMeTokenFactory public tokenFactory; - -//////////////// -// Constructor -//////////////// - - /// @notice Constructor to create a MiniMeToken - /// @param _tokenFactory The address of the MiniMeTokenFactory contract that - /// will create the Clone token contracts, the token factory needs to be - /// deployed first - /// @param _parentToken Address of the parent token, set to 0x0 if it is a - /// new token - /// @param _parentSnapShotBlock Block of the parent token that will - /// determine the initial distribution of the clone token, set to 0 if it - /// is a new token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - function MiniMeToken( - address _tokenFactory, - address _parentToken, - uint _parentSnapShotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public { - tokenFactory = MiniMeTokenFactory(_tokenFactory); - name = _tokenName; // Set the name - decimals = _decimalUnits; // Set the decimals - symbol = _tokenSymbol; // Set the symbol - parentToken = MiniMeToken(_parentToken); - parentSnapShotBlock = _parentSnapShotBlock; - transfersEnabled = _transfersEnabled; - creationBlock = block.number; - } - - -/////////////////// -// ERC20 Methods -/////////////////// - - /// @notice Send `_amount` tokens to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - return doTransfer(msg.sender, _to, _amount); - } - - /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it - /// is approved by `_from` - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function transferFrom(address _from, address _to, uint256 _amount - ) public returns (bool success) { - - // The controller of this contract can move tokens around at will, - // this is important to recognize! Confirm that you trust the - // controller of this contract, which in most situations should be - // another open source smart contract or 0x0 - if (msg.sender != controller) { - require(transfersEnabled); - - // The standard ERC 20 transferFrom functionality - if (allowed[_from][msg.sender] < _amount) return false; - allowed[_from][msg.sender] -= _amount; - } - return doTransfer(_from, _to, _amount); - } - - /// @dev This is the actual transfer function in the token contract, it can - /// only be called by other functions in this contract. - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function doTransfer(address _from, address _to, uint _amount - ) internal returns(bool) { - - if (_amount == 0) { - return true; - } - - require(parentSnapShotBlock < block.number); - - // Do not allow transfer to 0x0 or the token contract itself - require((_to != 0) && (_to != address(this))); - - // If the amount being transfered is more than the balance of the - // account the transfer returns false - var previousBalanceFrom = balanceOfAt(_from, block.number); - if (previousBalanceFrom < _amount) { - return false; - } - - // Alerts the token controller of the transfer - if (isContract(controller)) { - require(TokenController(controller).onTransfer(_from, _to, _amount)); - } - - // First update the balance array with the new value for the address - // sending the tokens - updateValueAtNow(balances[_from], previousBalanceFrom - _amount); - - // Then update the balance array with the new value for the address - // receiving the tokens - var previousBalanceTo = balanceOfAt(_to, block.number); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(balances[_to], previousBalanceTo + _amount); - - // An event to make the transfer easy to find on the blockchain - Transfer(_from, _to, _amount); - - return true; - } - - /// @param _owner The address that's balance is being requested - /// @return The balance of `_owner` at the current block - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOfAt(_owner, block.number); - } - - /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on - /// its behalf. This is a modified version of the ERC20 approve function - /// to be a little bit safer - /// @param _spender The address of the account able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the approval was successful - function approve(address _spender, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender,0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); - } - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /// @dev This function makes it easy to read the `allowed[]` map - /// @param _owner The address of the account that owns the token - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens of _owner that _spender is allowed - /// to spend - function allowance(address _owner, address _spender - ) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall(address _spender, uint256 _amount, bytes _extraData - ) public returns (bool success) { - require(approve(_spender, _amount)); - - ApproveAndCallFallBack(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /// @dev This function makes it easy to get the total number of tokens - /// @return The total number of tokens - function totalSupply() public constant returns (uint) { - return totalSupplyAt(block.number); - } - - -//////////////// -// Query balance and totalSupply in History -//////////////// - - /// @dev Queries the balance of `_owner` at a specific `_blockNumber` - /// @param _owner The address from which the balance will be retrieved - /// @param _blockNumber The block number when the balance is queried - /// @return The balance at `_blockNumber` - function balanceOfAt(address _owner, uint _blockNumber) public constant - returns (uint) { - - // These next few lines are used when the balance of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.balanceOfAt` be queried at the - // genesis block for that token as this contains initial balance of - // this token - if ((balances[_owner].length == 0) - || (balances[_owner][0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); - } else { - // Has no parent - return 0; - } - - // This will return the expected balance during normal situations - } else { - return getValueAt(balances[_owner], _blockNumber); - } - } - - /// @notice Total amount of tokens at a specific `_blockNumber`. - /// @param _blockNumber The block number when the totalSupply is queried - /// @return The total amount of tokens at `_blockNumber` - function totalSupplyAt(uint _blockNumber) public constant returns(uint) { - - // These next few lines are used when the totalSupply of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.totalSupplyAt` be queried at the - // genesis block for this token as that contains totalSupply of this - // token at this block number. - if ((totalSupplyHistory.length == 0) - || (totalSupplyHistory[0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); - } else { - return 0; - } - - // This will return the expected totalSupply during normal situations - } else { - return getValueAt(totalSupplyHistory, _blockNumber); - } - } - -//////////////// -// Clone Token Method -//////////////// - - /// @notice Creates a new clone token with the initial distribution being - /// this token at `_snapshotBlock` - /// @param _cloneTokenName Name of the clone token - /// @param _cloneDecimalUnits Number of decimals of the smallest unit - /// @param _cloneTokenSymbol Symbol of the clone token - /// @param _snapshotBlock Block when the distribution of the parent token is - /// copied to set the initial distribution of the new clone token; - /// if the block is zero than the actual block, the current block is used - /// @param _transfersEnabled True if transfers are allowed in the clone - /// @return The address of the new MiniMeToken Contract - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _transfersEnabled - ) public returns(address) { - if (_snapshotBlock == 0) _snapshotBlock = block.number; - MiniMeToken cloneToken = tokenFactory.createCloneToken( - this, - _snapshotBlock, - _cloneTokenName, - _cloneDecimalUnits, - _cloneTokenSymbol, - _transfersEnabled - ); - - cloneToken.changeController(msg.sender); - - // An event to make the token easy to find on the blockchain - NewCloneToken(address(cloneToken), _snapshotBlock); - return address(cloneToken); - } - -//////////////// -// Generate and destroy tokens -//////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount - ) public onlyController returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow - uint previousBalanceTo = balanceOf(_owner); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); - updateValueAtNow(balances[_owner], previousBalanceTo + _amount); - Transfer(0, _owner, _amount); - return true; - } - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount - ) onlyController public returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply >= _amount); - uint previousBalanceFrom = balanceOf(_owner); - require(previousBalanceFrom >= _amount); - updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); - updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); - Transfer(_owner, 0, _amount); - return true; - } - -//////////////// -// Enable tokens transfers -//////////////// - - - /// @notice Enables token holders to transfer their tokens freely if true - /// @param _transfersEnabled True if transfers are allowed in the clone - function enableTransfers(bool _transfersEnabled) public onlyController { - transfersEnabled = _transfersEnabled; - } - -//////////////// -// Internal helper functions to query and set a value in a snapshot array -//////////////// - - /// @dev `getValueAt` retrieves the number of tokens at a given block number - /// @param checkpoints The history of values being queried - /// @param _block The block number to retrieve the value at - /// @return The number of tokens being queried - function getValueAt(Checkpoint[] storage checkpoints, uint _block - ) constant internal returns (uint) { - if (checkpoints.length == 0) return 0; - - // Shortcut for the actual value - if (_block >= checkpoints[checkpoints.length-1].fromBlock) - return checkpoints[checkpoints.length-1].value; - if (_block < checkpoints[0].fromBlock) return 0; - - // Binary search of the value in the array - uint min = 0; - uint max = checkpoints.length-1; - while (max > min) { - uint mid = (max + min + 1)/ 2; - if (checkpoints[mid].fromBlock<=_block) { - min = mid; - } else { - max = mid-1; - } - } - return checkpoints[min].value; - } - - /// @dev `updateValueAtNow` used to update the `balances` map and the - /// `totalSupplyHistory` - /// @param checkpoints The history of data being updated - /// @param _value The new number of tokens - function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value - ) internal { - if ((checkpoints.length == 0) - || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { - Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; - newCheckPoint.fromBlock = uint128(block.number); - newCheckPoint.value = uint128(_value); - } else { - Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; - oldCheckPoint.value = uint128(_value); - } - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) return false; - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /// @dev Helper function to return a min betwen the two uints - function min(uint a, uint b) pure internal returns (uint) { - return a < b ? a : b; - } - - /// @notice The fallback function: If the contract's controller has not been - /// set to 0, then the `proxyPayment` method is called which relays the - /// ether and creates tokens as described in the token controller contract - function () public payable { - require(isContract(controller)); - require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); - } - -////////// -// Safety Methods -////////// - - /// @notice This method can be used by the controller to extract mistakenly - /// sent tokens to this contract. - /// @param _token The address of the token contract that you want to recover - /// set to 0 in case you want to extract ether. - function claimTokens(address _token) public onlyController { - if (_token == 0x0) { - controller.transfer(this.balance); - return; - } - - MiniMeToken token = MiniMeToken(_token); - uint balance = token.balanceOf(this); - token.transfer(controller, balance); - ClaimedTokens(_token, controller, balance); - } - -//////////////// -// Events -//////////////// - event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); - event Transfer(address indexed _from, address indexed _to, uint256 _amount); - event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); - event Approval( - address indexed _owner, - address indexed _spender, - uint256 _amount - ); - -} - - -//////////////// -// MiniMeTokenFactory -//////////////// - -/// @dev This contract is used to generate clone contracts from a contract. -/// In solidity this is the way to create a contract from a contract of the -/// same class -contract MiniMeTokenFactory { - - /// @notice Update the DApp by creating a new token with new functionalities - /// the msg.sender becomes the controller of this clone token - /// @param _parentToken Address of the token being cloned - /// @param _snapshotBlock Block of the parent token that will - /// determine the initial distribution of the clone token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - /// @return The address of the new token contract - function createCloneToken( - address _parentToken, - uint _snapshotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public returns (MiniMeToken) { - MiniMeToken newToken = new MiniMeToken( - this, - _parentToken, - _snapshotBlock, - _tokenName, - _decimalUnits, - _tokenSymbol, - _transfersEnabled - ); - - newToken.changeController(msg.sender); - return newToken; - } -} diff --git a/truebit-implementation/node_modules/minimetoken/build/SampleCampaign-TokenController.sol.js b/truebit-implementation/node_modules/minimetoken/build/SampleCampaign-TokenController.sol.js deleted file mode 100644 index 56b23866..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/SampleCampaign-TokenController.sol.js +++ /dev/null @@ -1,25 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.ApproveAndCallFallBackAbi = [{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.ApproveAndCallFallBackByteCode = "0x" -exports.ApproveAndCallFallBackRuntimeByteCode = "0x" -exports.CampaignAbi = [{"constant":true,"inputs":[],"name":"vaultAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newVaultAddress","type":"address"}],"name":"setVault","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFunding","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeFunding","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startFundingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endFundingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[{"name":"_startFundingTime","type":"uint256"},{"name":"_endFundingTime","type":"uint256"},{"name":"_maximumFunding","type":"uint256"},{"name":"_vaultAddress","type":"address"},{"name":"_tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}] -exports.CampaignByteCode = "0x6060604052341561000f57600080fd5b60405160a080610604833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a031617905591505042841080159061006b57508484115b8015610081575069021e19e0c9bab24000008311155b80156100955750600160a060020a03821615155b15156100a057600080fd5b60019490945560029290925560035560058054600160a060020a03938416600160a060020a0319918216179091556006805492909316911617905561051a806100ea6000396000f3006060604052600436106100ab5763ffffffff60e060020a600035041663430bf08a81146100b65780634a393149146100e557806355a373d6146101215780636817031b146101345780638da5cb5b1461015357806399d64ab014610166578063a19ed39d1461018b578063a6f9dae11461019e578063b75ece9c146101bd578063da682aeb146100e5578063e29eb836146101d0578063e4693e98146101e3578063f48c3054146101f6575b6100b43361020a565b005b34156100c157600080fd5b6100c9610383565b604051600160a060020a03909116815260200160405180910390f35b34156100f057600080fd5b61010d600160a060020a0360043581169060243516604435610392565b604051901515815260200160405180910390f35b341561012c57600080fd5b6100c961039b565b341561013f57600080fd5b6100b4600160a060020a03600435166103aa565b341561015e57600080fd5b6100c96103f4565b341561017157600080fd5b610179610403565b60405190815260200160405180910390f35b341561019657600080fd5b6100b4610409565b34156101a957600080fd5b6100b4600160a060020a036004351661047f565b34156101c857600080fd5b6101796104c9565b34156101db57600080fd5b6101796104cf565b34156101ee57600080fd5b6101796104d5565b61010d600160a060020a03600435166104db565b600154421015801561021e57506002544211155b80156102945750600554600160a060020a031663f77c47916000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561026d57600080fd5b6102c65a03f1151561027e57600080fd5b5050506040518051600160a060020a0316151590505b801561029f57503415155b80156102b15750600354346004540111155b15156102bc57600080fd5b6004805434908101909155600654600160a060020a03169080156108fc0290604051600060405180830381858888f1935050505015156102fb57600080fd5b600554600160a060020a031663827f32c0823460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561035a57600080fd5b6102c65a03f1151561036b57600080fd5b50505060405180519050151561038057600080fd5b50565b600654600160a060020a031681565b60019392505050565b600554600160a060020a031681565b60005433600160a060020a039081169116146103c557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60035481565b60025442101561041857600080fd5b600554600160a060020a0316633cebb823600060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561046957600080fd5b6102c65a03f1151561047a57600080fd5b505050565b60005433600160a060020a0390811691161461049a57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b60045481565b60025481565b60006104e68261020a565b5060019190505600a165627a7a7230582005143595cda0c4420c0c032867b6a11d1176a5e246389476e4a2f7e9a6650bd60029" -exports.CampaignRuntimeByteCode = "0x6060604052600436106100ab5763ffffffff60e060020a600035041663430bf08a81146100b65780634a393149146100e557806355a373d6146101215780636817031b146101345780638da5cb5b1461015357806399d64ab014610166578063a19ed39d1461018b578063a6f9dae11461019e578063b75ece9c146101bd578063da682aeb146100e5578063e29eb836146101d0578063e4693e98146101e3578063f48c3054146101f6575b6100b43361020a565b005b34156100c157600080fd5b6100c9610383565b604051600160a060020a03909116815260200160405180910390f35b34156100f057600080fd5b61010d600160a060020a0360043581169060243516604435610392565b604051901515815260200160405180910390f35b341561012c57600080fd5b6100c961039b565b341561013f57600080fd5b6100b4600160a060020a03600435166103aa565b341561015e57600080fd5b6100c96103f4565b341561017157600080fd5b610179610403565b60405190815260200160405180910390f35b341561019657600080fd5b6100b4610409565b34156101a957600080fd5b6100b4600160a060020a036004351661047f565b34156101c857600080fd5b6101796104c9565b34156101db57600080fd5b6101796104cf565b34156101ee57600080fd5b6101796104d5565b61010d600160a060020a03600435166104db565b600154421015801561021e57506002544211155b80156102945750600554600160a060020a031663f77c47916000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561026d57600080fd5b6102c65a03f1151561027e57600080fd5b5050506040518051600160a060020a0316151590505b801561029f57503415155b80156102b15750600354346004540111155b15156102bc57600080fd5b6004805434908101909155600654600160a060020a03169080156108fc0290604051600060405180830381858888f1935050505015156102fb57600080fd5b600554600160a060020a031663827f32c0823460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561035a57600080fd5b6102c65a03f1151561036b57600080fd5b50505060405180519050151561038057600080fd5b50565b600654600160a060020a031681565b60019392505050565b600554600160a060020a031681565b60005433600160a060020a039081169116146103c557600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a031681565b60035481565b60025442101561041857600080fd5b600554600160a060020a0316633cebb823600060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561046957600080fd5b6102c65a03f1151561047a57600080fd5b505050565b60005433600160a060020a0390811691161461049a57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b60045481565b60025481565b60006104e68261020a565b5060019190505600a165627a7a7230582005143595cda0c4420c0c032867b6a11d1176a5e246389476e4a2f7e9a6650bd60029" -exports.ControlledAbi = [{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.ControlledByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820cc4ee2a55d30e0105a85987de8c496ccb806d52b38107268e78eba80b45bf4e00029" -exports.ControlledRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb8238114610050578063f77c47911461007e575b600080fd5b341561005b57600080fd5b61007c73ffffffffffffffffffffffffffffffffffffffff600435166100ba565b005b341561008957600080fd5b61009161011e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100e257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820cc4ee2a55d30e0105a85987de8c496ccb806d52b38107268e78eba80b45bf4e00029" -exports.MiniMeTokenAbi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"},{"name":"_parentToken","type":"address"},{"name":"_parentSnapShotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}] -exports.MiniMeTokenByteCode = "0x606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029" -exports.MiniMeTokenRuntimeByteCode = "0x60606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029" -exports.MiniMeTokenFactoryAbi = [{"constant":false,"inputs":[{"name":"_parentToken","type":"address"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_tokenName","type":"string"},{"name":"_decimalUnits","type":"uint8"},{"name":"_tokenSymbol","type":"string"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}] -exports.MiniMeTokenFactoryByteCode = "0x6060604052341561000f57600080fd5b611da88061001e6000396000f3006060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029a165627a7a72305820e06e9a92eef21428993752aa64ad1020fd7ee192b7a91fd1fa7639885288890b0029" -exports.MiniMeTokenFactoryRuntimeByteCode = "0x6060604052600436106100405763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416635b7b72c18114610045575b600080fd5b341561005057600080fd5b6101096004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496505050509135151591506101329050565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60008030888888888888610144610313565b73ffffffffffffffffffffffffffffffffffffffff8089168252871660208201526040810186905260ff8416608082015281151560c082015260e0606082018181529060a0830190830187818151815260200191508051906020019080838360005b838110156101be5780820151838201526020016101a6565b50505050905090810190601f1680156101eb5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610221578082015183820152602001610209565b50505050905090810190601f16801561024e5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051809103906000f080151561027057600080fd5b90508073ffffffffffffffffffffffffffffffffffffffff16633cebb823336040517c010000000000000000000000000000000000000000000000000000000063ffffffff841602815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b15156102f357600080fd5b6102c65a03f1151561030457600080fd5b50919998505050505050505050565b604051611a5980610324833901905600606060405260408051908101604052600781527f4d4d545f302e3200000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000162565b5034156200005a57600080fd5b60405162001a5938038062001a59833981016040528080519190602001805191906020018051919060200180518201919060200180519190602001805182019190602001805160008054600160a060020a03338116600160a060020a031990921691909117909155600b8054918b166101000261010060a860020a0319909216919091179055915060019050848051620000f992916020019062000162565b506002805460ff191660ff851617905560038280516200011e92916020019062000162565b5060058054600160a060020a031916600160a060020a039790971696909617909555505050600655600b805460ff1916911515919091179055504360075562000207565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001a557805160ff1916838001178555620001d5565b82800160010185558215620001d5579182015b82811115620001d5578251825591602001919060010190620001b8565b50620001e3929150620001e7565b5090565b6200020491905b80821115620001e35760008155600101620001ee565b90565b61184280620002176000396000f30060606040526004361061012f5763ffffffff60e060020a60003504166306fdde0381146101d4578063095ea7b31461025e578063176345141461029457806318160ddd146102b957806323b872dd146102cc578063313ce567146102f45780633cebb8231461031d5780634ee2cd7e1461033c57806354fd4d501461035e5780636638c0871461037157806370a082311461043557806380a5400114610454578063827f32c01461046757806395d89b4114610489578063981b24d01461049c578063a9059cbb146104b2578063bef97c87146104d4578063c5bcc4f1146104e7578063cae9ca51146104fa578063d3ce77fe1461055f578063dd62ed3e14610581578063df8de3e7146105a6578063e77772fe146105c5578063f41e60c5146105d8578063f77c4791146105f0575b60005461014490600160a060020a0316610603565b151561014f57600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156101ab57600080fd5b6125ee5a03f115156101bc57600080fd5b505050506040518051905015156101d257600080fd5b005b34156101df57600080fd5b6101e7610630565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561022357808201518382015260200161020b565b50505050905090810190601f1680156102505780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026957600080fd5b610280600160a060020a03600435166024356106ce565b604051901515815260200160405180910390f35b341561029f57600080fd5b6102a7610837565b60405190815260200160405180910390f35b34156102c457600080fd5b6102a761083d565b34156102d757600080fd5b610280600160a060020a036004358116906024351660443561084e565b34156102ff57600080fd5b6103076108f0565b60405160ff909116815260200160405180910390f35b341561032857600080fd5b6101d2600160a060020a03600435166108f9565b341561034757600080fd5b6102a7600160a060020a0360043516602435610943565b341561036957600080fd5b6101e7610a79565b341561037c57600080fd5b61041960046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650508435946020013515159350610ae492505050565b604051600160a060020a03909116815260200160405180910390f35b341561044057600080fd5b6102a7600160a060020a0360043516610d0e565b341561045f57600080fd5b610419610d22565b341561047257600080fd5b610280600160a060020a0360043516602435610d31565b341561049457600080fd5b6101e7610e01565b34156104a757600080fd5b6102a7600435610e6c565b34156104bd57600080fd5b610280600160a060020a0360043516602435610f55565b34156104df57600080fd5b610280610f74565b34156104f257600080fd5b6102a7610f7d565b341561050557600080fd5b61028060048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610f8395505050505050565b341561056a57600080fd5b610280600160a060020a036004351660243561109e565b341561058c57600080fd5b6102a7600160a060020a0360043581169060243516611168565b34156105b157600080fd5b6101d2600160a060020a0360043516611193565b34156105d057600080fd5b61041961133f565b34156105e357600080fd5b6101d26004351515611353565b34156105fb57600080fd5b610419611381565b600080600160a060020a038316151561061f576000915061062a565b823b90506000811191505b50919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b505050505081565b600b5460009060ff1615156106e257600080fd5b8115806107125750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b151561071d57600080fd5b60005461073290600160a060020a0316610603565b156107cd5760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156107a757600080fd5b6102c65a03f115156107b857600080fd5b5050506040518051905015156107cd57600080fd5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60075481565b600061084843610e6c565b90505b90565b6000805433600160a060020a039081169116146108db57600b5460ff16151561087657600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156108ad575060006108e9565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b6108e6848484611390565b90505b9392505050565b60025460ff1681565b60005433600160a060020a0390811691161461091457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a038216600090815260086020526040812054158061099f5750600160a060020a03831660009081526008602052604081208054849290811061098857fe5b6000918252602090912001546001608060020a0316115b15610a5057600554600160a060020a031615610a4857600554600654600160a060020a0390911690634ee2cd7e9085906109da90869061156e565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a2657600080fd5b6102c65a03f11515610a3757600080fd5b505050604051805190509050610831565b506000610831565b600160a060020a0383166000908152600860205260409020610a729083611584565b9050610831565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600080831515610af2574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b83811015610b95578082015183820152602001610b7d565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610bf8578082015183820152602001610be0565b50505050905090810190601f168015610c255780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1515610c4957600080fd5b6102c65a03f11515610c5a57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a29695505050505050565b6000610d1a8243610943565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a03908116911614610d5157600080fd5b610d5961083d565b915083820182901015610d6b57600080fd5b610d7485610d0e565b905083810181901015610d8657600080fd5b610d93600a8584016116e3565b600160a060020a0385166000908152600860205260409020610db7908286016116e3565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106c65780601f1061069b576101008083540402835291602001916106c6565b600a546000901580610ea1575081600a6000815481101515610e8a57fe5b6000918252602090912001546001608060020a0316115b15610f4357600554600160a060020a031615610f3b57600554600654600160a060020a039091169063981b24d090610eda90859061156e565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610f1957600080fd5b6102c65a03f11515610f2a57600080fd5b505050604051805190509050610d1d565b506000610d1d565b610f4e600a83611584565b9050610d1d565b600b5460009060ff161515610f6957600080fd5b6108e9338484611390565b600b5460ff1681565b60065481565b6000610f8f84846106ce565b1515610f9a57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561103257808201518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b151561108057600080fd5b6102c65a03f1151561109157600080fd5b5060019695505050505050565b600080548190819033600160a060020a039081169116146110be57600080fd5b6110c661083d565b9150838210156110d557600080fd5b6110de85610d0e565b9050838110156110ed57600080fd5b6110fa600a8584036116e3565b600160a060020a038516600090815260086020526040902061111e908583036116e3565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3506001949350505050565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b60008054819033600160a060020a039081169116146111b157600080fd5b600160a060020a03831615156111ff57600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156111fa57600080fd5b61133a565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561125957600080fd5b6102c65a03f1151561126a57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112da57600080fd5b6102c65a03f115156112eb57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b505050565b600b546101009004600160a060020a031681565b60005433600160a060020a0390811691161461136e57600080fd5b600b805460ff1916911515919091179055565b600054600160a060020a031681565b600080808315156113a45760019250611565565b6006544390106113b357600080fd5b600160a060020a038516158015906113dd575030600160a060020a031685600160a060020a031614155b15156113e857600080fd5b6113f28643610943565b9150838210156114055760009250611565565b60005461141a90600160a060020a0316610603565b156114b55760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561148f57600080fd5b6102c65a03f115156114a057600080fd5b5050506040518051905015156114b557600080fd5b600160a060020a03861660009081526008602052604090206114d9908584036116e3565b6114e38543610943565b9050838101819010156114f557600080fd5b600160a060020a0385166000908152600860205260409020611519908286016116e3565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b600081831061157d57816108e9565b5090919050565b6000806000808580549050600014156115a057600093506116da565b8554869060001981019081106115b257fe5b6000918252602090912001546001608060020a0316851061160f578554869060001981019081106115df57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693506116da565b85600081548110151561161e57fe5b6000918252602090912001546001608060020a031685101561164357600093506116da565b8554600093506000190191505b828211156116a057600260018385010104905084868281548110151561167257fe5b6000918252602090912001546001608060020a0316116116945780925061169b565b6001810391505b611650565b85838154811015156116ae57fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031693505b50505092915050565b81546000908190158061171c5750835443908590600019810190811061170557fe5b6000918252602090912001546001608060020a0316105b1561178e578354849061173282600183016117d9565b8154811061173c57fe5b600091825260209091200180546001608060020a03858116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506117d3565b8354849060001981019081106117a057fe5b600091825260209091200180546001608060020a0380861670010000000000000000000000000000000002911617815590505b50505050565b81548183558181151161133a5760008381526020902061133a91810190830161084b91905b8082111561181257600081556001016117fe565b50905600a165627a7a72305820ff191ffa951e61ef38939a248f385339a83120289836709ffdf9e57b67cc75700029a165627a7a72305820e06e9a92eef21428993752aa64ad1020fd7ee192b7a91fd1fa7639885288890b0029" -exports.OwnedAbi = [{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101668061003b6000396000f30060606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b8114610050578063a6f9dae11461008c575b600080fd5b341561005b57600080fd5b6100636100ba565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b341561009757600080fd5b6100b873ffffffffffffffffffffffffffffffffffffffff600435166100d6565b005b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100fe57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff929092169190911790555600a165627a7a7230582027c4670600aa92a38eaa01c4f2a487f0cace825bb66bf9085d3c3af6d30d91790029" -exports.OwnedRuntimeByteCode = "0x60606040526004361061004b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b8114610050578063a6f9dae11461008c575b600080fd5b341561005b57600080fd5b6100636100ba565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b341561009757600080fd5b6100b873ffffffffffffffffffffffffffffffffffffffff600435166100d6565b005b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000543373ffffffffffffffffffffffffffffffffffffffff9081169116146100fe57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff191673ffffffffffffffffffffffffffffffffffffffff929092169190911790555600a165627a7a7230582027c4670600aa92a38eaa01c4f2a487f0cace825bb66bf9085d3c3af6d30d91790029" -exports.TokenControllerAbi = [{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] -exports.TokenControllerByteCode = "0x" -exports.TokenControllerRuntimeByteCode = "0x" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0xb9d14d9badd79bd21f285ca8e7054f8fb838a138260781e494c7cae00b1481f3" diff --git a/truebit-implementation/node_modules/minimetoken/build/SampleCampaign-TokenController_all.sol b/truebit-implementation/node_modules/minimetoken/build/SampleCampaign-TokenController_all.sol deleted file mode 100644 index 24a169c5..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/SampleCampaign-TokenController_all.sol +++ /dev/null @@ -1,799 +0,0 @@ - -//File: contracts/Controlled.sol -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} - -//File: contracts/TokenController.sol -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} - -//File: contracts/MiniMeToken.sol -pragma solidity ^0.4.18; - -/* - Copyright 2016, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MiniMeToken Contract -/// @author Jordi Baylina -/// @dev This token contract's goal is to make it easy for anyone to clone this -/// token using the token distribution at a given block, this will allow DAO's -/// and DApps to upgrade their features in a decentralized manner without -/// affecting the original token -/// @dev It is ERC20 compliant, but still needs to under go further testing. - - - - -contract ApproveAndCallFallBack { - function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; -} - -/// @dev The actual token contract, the default controller is the msg.sender -/// that deploys the contract, so usually this token will be deployed by a -/// token controller contract, which Giveth will call a "Campaign" -contract MiniMeToken is Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - string public version = 'MMT_0.2'; //An arbitrary versioning scheme - - - /// @dev `Checkpoint` is the structure that attaches a block number to a - /// given value, the block number attached is the one that last changed the - /// value - struct Checkpoint { - - // `fromBlock` is the block number that the value was generated from - uint128 fromBlock; - - // `value` is the amount of tokens at a specific block number - uint128 value; - } - - // `parentToken` is the Token address that was cloned to produce this token; - // it will be 0x0 for a token that was not cloned - MiniMeToken public parentToken; - - // `parentSnapShotBlock` is the block number from the Parent Token that was - // used to determine the initial distribution of the Clone Token - uint public parentSnapShotBlock; - - // `creationBlock` is the block number that the Clone Token was created - uint public creationBlock; - - // `balances` is the map that tracks the balance of each address, in this - // contract when the balance changes the block number that the change - // occurred is also included in the map - mapping (address => Checkpoint[]) balances; - - // `allowed` tracks any extra transfer rights as in all ERC20 tokens - mapping (address => mapping (address => uint256)) allowed; - - // Tracks the history of the `totalSupply` of the token - Checkpoint[] totalSupplyHistory; - - // Flag that determines if the token is transferable or not. - bool public transfersEnabled; - - // The factory used to create new clone tokens - MiniMeTokenFactory public tokenFactory; - -//////////////// -// Constructor -//////////////// - - /// @notice Constructor to create a MiniMeToken - /// @param _tokenFactory The address of the MiniMeTokenFactory contract that - /// will create the Clone token contracts, the token factory needs to be - /// deployed first - /// @param _parentToken Address of the parent token, set to 0x0 if it is a - /// new token - /// @param _parentSnapShotBlock Block of the parent token that will - /// determine the initial distribution of the clone token, set to 0 if it - /// is a new token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - function MiniMeToken( - address _tokenFactory, - address _parentToken, - uint _parentSnapShotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public { - tokenFactory = MiniMeTokenFactory(_tokenFactory); - name = _tokenName; // Set the name - decimals = _decimalUnits; // Set the decimals - symbol = _tokenSymbol; // Set the symbol - parentToken = MiniMeToken(_parentToken); - parentSnapShotBlock = _parentSnapShotBlock; - transfersEnabled = _transfersEnabled; - creationBlock = block.number; - } - - -/////////////////// -// ERC20 Methods -/////////////////// - - /// @notice Send `_amount` tokens to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - return doTransfer(msg.sender, _to, _amount); - } - - /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it - /// is approved by `_from` - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function transferFrom(address _from, address _to, uint256 _amount - ) public returns (bool success) { - - // The controller of this contract can move tokens around at will, - // this is important to recognize! Confirm that you trust the - // controller of this contract, which in most situations should be - // another open source smart contract or 0x0 - if (msg.sender != controller) { - require(transfersEnabled); - - // The standard ERC 20 transferFrom functionality - if (allowed[_from][msg.sender] < _amount) return false; - allowed[_from][msg.sender] -= _amount; - } - return doTransfer(_from, _to, _amount); - } - - /// @dev This is the actual transfer function in the token contract, it can - /// only be called by other functions in this contract. - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function doTransfer(address _from, address _to, uint _amount - ) internal returns(bool) { - - if (_amount == 0) { - return true; - } - - require(parentSnapShotBlock < block.number); - - // Do not allow transfer to 0x0 or the token contract itself - require((_to != 0) && (_to != address(this))); - - // If the amount being transfered is more than the balance of the - // account the transfer returns false - var previousBalanceFrom = balanceOfAt(_from, block.number); - if (previousBalanceFrom < _amount) { - return false; - } - - // Alerts the token controller of the transfer - if (isContract(controller)) { - require(TokenController(controller).onTransfer(_from, _to, _amount)); - } - - // First update the balance array with the new value for the address - // sending the tokens - updateValueAtNow(balances[_from], previousBalanceFrom - _amount); - - // Then update the balance array with the new value for the address - // receiving the tokens - var previousBalanceTo = balanceOfAt(_to, block.number); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(balances[_to], previousBalanceTo + _amount); - - // An event to make the transfer easy to find on the blockchain - Transfer(_from, _to, _amount); - - return true; - } - - /// @param _owner The address that's balance is being requested - /// @return The balance of `_owner` at the current block - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOfAt(_owner, block.number); - } - - /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on - /// its behalf. This is a modified version of the ERC20 approve function - /// to be a little bit safer - /// @param _spender The address of the account able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the approval was successful - function approve(address _spender, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender,0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); - } - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /// @dev This function makes it easy to read the `allowed[]` map - /// @param _owner The address of the account that owns the token - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens of _owner that _spender is allowed - /// to spend - function allowance(address _owner, address _spender - ) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall(address _spender, uint256 _amount, bytes _extraData - ) public returns (bool success) { - require(approve(_spender, _amount)); - - ApproveAndCallFallBack(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /// @dev This function makes it easy to get the total number of tokens - /// @return The total number of tokens - function totalSupply() public constant returns (uint) { - return totalSupplyAt(block.number); - } - - -//////////////// -// Query balance and totalSupply in History -//////////////// - - /// @dev Queries the balance of `_owner` at a specific `_blockNumber` - /// @param _owner The address from which the balance will be retrieved - /// @param _blockNumber The block number when the balance is queried - /// @return The balance at `_blockNumber` - function balanceOfAt(address _owner, uint _blockNumber) public constant - returns (uint) { - - // These next few lines are used when the balance of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.balanceOfAt` be queried at the - // genesis block for that token as this contains initial balance of - // this token - if ((balances[_owner].length == 0) - || (balances[_owner][0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); - } else { - // Has no parent - return 0; - } - - // This will return the expected balance during normal situations - } else { - return getValueAt(balances[_owner], _blockNumber); - } - } - - /// @notice Total amount of tokens at a specific `_blockNumber`. - /// @param _blockNumber The block number when the totalSupply is queried - /// @return The total amount of tokens at `_blockNumber` - function totalSupplyAt(uint _blockNumber) public constant returns(uint) { - - // These next few lines are used when the totalSupply of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.totalSupplyAt` be queried at the - // genesis block for this token as that contains totalSupply of this - // token at this block number. - if ((totalSupplyHistory.length == 0) - || (totalSupplyHistory[0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); - } else { - return 0; - } - - // This will return the expected totalSupply during normal situations - } else { - return getValueAt(totalSupplyHistory, _blockNumber); - } - } - -//////////////// -// Clone Token Method -//////////////// - - /// @notice Creates a new clone token with the initial distribution being - /// this token at `_snapshotBlock` - /// @param _cloneTokenName Name of the clone token - /// @param _cloneDecimalUnits Number of decimals of the smallest unit - /// @param _cloneTokenSymbol Symbol of the clone token - /// @param _snapshotBlock Block when the distribution of the parent token is - /// copied to set the initial distribution of the new clone token; - /// if the block is zero than the actual block, the current block is used - /// @param _transfersEnabled True if transfers are allowed in the clone - /// @return The address of the new MiniMeToken Contract - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _transfersEnabled - ) public returns(address) { - if (_snapshotBlock == 0) _snapshotBlock = block.number; - MiniMeToken cloneToken = tokenFactory.createCloneToken( - this, - _snapshotBlock, - _cloneTokenName, - _cloneDecimalUnits, - _cloneTokenSymbol, - _transfersEnabled - ); - - cloneToken.changeController(msg.sender); - - // An event to make the token easy to find on the blockchain - NewCloneToken(address(cloneToken), _snapshotBlock); - return address(cloneToken); - } - -//////////////// -// Generate and destroy tokens -//////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount - ) public onlyController returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow - uint previousBalanceTo = balanceOf(_owner); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); - updateValueAtNow(balances[_owner], previousBalanceTo + _amount); - Transfer(0, _owner, _amount); - return true; - } - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount - ) onlyController public returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply >= _amount); - uint previousBalanceFrom = balanceOf(_owner); - require(previousBalanceFrom >= _amount); - updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); - updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); - Transfer(_owner, 0, _amount); - return true; - } - -//////////////// -// Enable tokens transfers -//////////////// - - - /// @notice Enables token holders to transfer their tokens freely if true - /// @param _transfersEnabled True if transfers are allowed in the clone - function enableTransfers(bool _transfersEnabled) public onlyController { - transfersEnabled = _transfersEnabled; - } - -//////////////// -// Internal helper functions to query and set a value in a snapshot array -//////////////// - - /// @dev `getValueAt` retrieves the number of tokens at a given block number - /// @param checkpoints The history of values being queried - /// @param _block The block number to retrieve the value at - /// @return The number of tokens being queried - function getValueAt(Checkpoint[] storage checkpoints, uint _block - ) constant internal returns (uint) { - if (checkpoints.length == 0) return 0; - - // Shortcut for the actual value - if (_block >= checkpoints[checkpoints.length-1].fromBlock) - return checkpoints[checkpoints.length-1].value; - if (_block < checkpoints[0].fromBlock) return 0; - - // Binary search of the value in the array - uint min = 0; - uint max = checkpoints.length-1; - while (max > min) { - uint mid = (max + min + 1)/ 2; - if (checkpoints[mid].fromBlock<=_block) { - min = mid; - } else { - max = mid-1; - } - } - return checkpoints[min].value; - } - - /// @dev `updateValueAtNow` used to update the `balances` map and the - /// `totalSupplyHistory` - /// @param checkpoints The history of data being updated - /// @param _value The new number of tokens - function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value - ) internal { - if ((checkpoints.length == 0) - || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { - Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; - newCheckPoint.fromBlock = uint128(block.number); - newCheckPoint.value = uint128(_value); - } else { - Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; - oldCheckPoint.value = uint128(_value); - } - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) return false; - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /// @dev Helper function to return a min betwen the two uints - function min(uint a, uint b) pure internal returns (uint) { - return a < b ? a : b; - } - - /// @notice The fallback function: If the contract's controller has not been - /// set to 0, then the `proxyPayment` method is called which relays the - /// ether and creates tokens as described in the token controller contract - function () public payable { - require(isContract(controller)); - require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); - } - -////////// -// Safety Methods -////////// - - /// @notice This method can be used by the controller to extract mistakenly - /// sent tokens to this contract. - /// @param _token The address of the token contract that you want to recover - /// set to 0 in case you want to extract ether. - function claimTokens(address _token) public onlyController { - if (_token == 0x0) { - controller.transfer(this.balance); - return; - } - - MiniMeToken token = MiniMeToken(_token); - uint balance = token.balanceOf(this); - token.transfer(controller, balance); - ClaimedTokens(_token, controller, balance); - } - -//////////////// -// Events -//////////////// - event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); - event Transfer(address indexed _from, address indexed _to, uint256 _amount); - event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); - event Approval( - address indexed _owner, - address indexed _spender, - uint256 _amount - ); - -} - - -//////////////// -// MiniMeTokenFactory -//////////////// - -/// @dev This contract is used to generate clone contracts from a contract. -/// In solidity this is the way to create a contract from a contract of the -/// same class -contract MiniMeTokenFactory { - - /// @notice Update the DApp by creating a new token with new functionalities - /// the msg.sender becomes the controller of this clone token - /// @param _parentToken Address of the token being cloned - /// @param _snapshotBlock Block of the parent token that will - /// determine the initial distribution of the clone token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - /// @return The address of the new token contract - function createCloneToken( - address _parentToken, - uint _snapshotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public returns (MiniMeToken) { - MiniMeToken newToken = new MiniMeToken( - this, - _parentToken, - _snapshotBlock, - _tokenName, - _decimalUnits, - _tokenSymbol, - _transfersEnabled - ); - - newToken.changeController(msg.sender); - return newToken; - } -} - -//File: ./contracts/SampleCampaign-TokenController.sol -pragma solidity ^0.4.6; - -/* - Copyright 2017, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MilestoneTracker Contract -/// @author Jordi Baylina -/// @dev This contract controls the issuance of tokens for the MiniMe Token -/// Contract. This version specifically acts as a Campaign manager for raising -/// funds for non-profit causes, but it can be customized for any variety of -/// purposes. - - - - -/// @dev `Owned` is a base level contract that assigns an `owner` that can be -/// later changed -contract Owned { - /// @dev `owner` is the only address that can call a function with this - /// modifier - modifier onlyOwner { require (msg.sender == owner); _; } - - address public owner; - - /// @notice The Constructor assigns the message sender to be `owner` - function Owned() { owner = msg.sender;} - - /// @notice `owner` can step down and assign some other address to this role - /// @param _newOwner The address of the new owner. 0x0 can be used to create - /// an unowned neutral vault, however that cannot be undone - function changeOwner(address _newOwner) onlyOwner { - owner = _newOwner; - } -} - - -/// @dev This is designed to control the issuance of a MiniMe Token for a -/// non-profit Campaign. This contract effectively dictates the terms of the -/// funding round. - -contract Campaign is TokenController, Owned { - - uint public startFundingTime; // In UNIX Time Format - uint public endFundingTime; // In UNIX Time Format - uint public maximumFunding; // In wei - uint public totalCollected; // In wei - MiniMeToken public tokenContract; // The new token for this Campaign - address public vaultAddress; // The address to hold the funds donated - -/// @notice 'Campaign()' initiates the Campaign by setting its funding -/// parameters -/// @dev There are several checks to make sure the parameters are acceptable -/// @param _startFundingTime The UNIX time that the Campaign will be able to -/// start receiving funds -/// @param _endFundingTime The UNIX time that the Campaign will stop being able -/// to receive funds -/// @param _maximumFunding In wei, the Maximum amount that the Campaign can -/// receive (currently the max is set at 10,000 ETH for the beta) -/// @param _vaultAddress The address that will store the donated funds -/// @param _tokenAddress Address of the token contract this contract controls - - function Campaign( - uint _startFundingTime, - uint _endFundingTime, - uint _maximumFunding, - address _vaultAddress, - address _tokenAddress - - ) { - require ((_endFundingTime >= now) && // Cannot end in the past - (_endFundingTime > _startFundingTime) && - (_maximumFunding <= 10000 ether) && // The Beta is limited - (_vaultAddress != 0)); // To prevent burning ETH - startFundingTime = _startFundingTime; - endFundingTime = _endFundingTime; - maximumFunding = _maximumFunding; - tokenContract = MiniMeToken(_tokenAddress);// The Deployed Token Contract - vaultAddress = _vaultAddress; - } - -/// @dev The fallback function is called when ether is sent to the contract, it -/// simply calls `doPayment()` with the address that sent the ether as the -/// `_owner`. Payable is a required solidity modifier for functions to receive -/// ether, without this modifier functions will throw if ether is sent to them - - function () payable { - doPayment(msg.sender); - } - -///////////////// -// TokenController interface -///////////////// - -/// @notice `proxyPayment()` allows the caller to send ether to the Campaign and -/// have the tokens created in an address of their choosing -/// @param _owner The address that will hold the newly created tokens - - function proxyPayment(address _owner) payable returns(bool) { - doPayment(_owner); - return true; - } - -/// @notice Notifies the controller about a transfer, for this Campaign all -/// transfers are allowed by default and no extra notifications are needed -/// @param _from The origin of the transfer -/// @param _to The destination of the transfer -/// @param _amount The amount of the transfer -/// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) returns(bool) { - return true; - } - -/// @notice Notifies the controller about an approval, for this Campaign all -/// approvals are allowed by default and no extra notifications are needed -/// @param _owner The address that calls `approve()` -/// @param _spender The spender in the `approve()` call -/// @param _amount The amount in the `approve()` call -/// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) - returns(bool) - { - return true; - } - - -/// @dev `doPayment()` is an internal function that sends the ether that this -/// contract receives to the `vault` and creates tokens in the address of the -/// `_owner` assuming the Campaign is still accepting funds -/// @param _owner The address that will hold the newly created tokens - - function doPayment(address _owner) internal { - -// First check that the Campaign is allowed to receive this donation - require ((now >= startFundingTime) && - (now <= endFundingTime) && - (tokenContract.controller() != 0) && // Extra check - (msg.value != 0) && - (totalCollected + msg.value <= maximumFunding)); - -//Track how much the Campaign has collected - totalCollected += msg.value; - -//Send the ether to the vault - require (vaultAddress.send(msg.value)); - -// Creates an equal amount of tokens as ether sent. The new tokens are created -// in the `_owner` address - require (tokenContract.generateTokens(_owner, msg.value)); - - return; - } - -/// @notice `finalizeFunding()` ends the Campaign by calling setting the -/// controller to 0, thereby ending the issuance of new tokens and stopping the -/// Campaign from receiving more ether -/// @dev `finalizeFunding()` can only be called after the end of the funding period. - - function finalizeFunding() { - require(now >= endFundingTime); - tokenContract.changeController(0); - } - - -/// @notice `onlyOwner` changes the location that ether is sent -/// @param _newVaultAddress The address that will receive the ether sent to this -/// Campaign - function setVault(address _newVaultAddress) onlyOwner { - vaultAddress = _newVaultAddress; - } - -} diff --git a/truebit-implementation/node_modules/minimetoken/build/TokenController.sol.js b/truebit-implementation/node_modules/minimetoken/build/TokenController.sol.js deleted file mode 100644 index 710f659e..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/TokenController.sol.js +++ /dev/null @@ -1,7 +0,0 @@ -/* This is an autogenerated file. DO NOT EDIT MANUALLY */ - -exports.TokenControllerAbi = [{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"onApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"proxyPayment","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}] -exports.TokenControllerByteCode = "0x" -exports.TokenControllerRuntimeByteCode = "0x" -exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang" -exports._sha256 = "0x4ab21dd789d6619432629f4e930c7f6cd05cd149e14a8127f99c7c83f2c4377f" diff --git a/truebit-implementation/node_modules/minimetoken/build/TokenController_all.sol b/truebit-implementation/node_modules/minimetoken/build/TokenController_all.sol deleted file mode 100644 index d8171bbd..00000000 --- a/truebit-implementation/node_modules/minimetoken/build/TokenController_all.sol +++ /dev/null @@ -1,28 +0,0 @@ - -//File: ./contracts/TokenController.sol -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} diff --git a/truebit-implementation/node_modules/minimetoken/contracts/Controlled.sol b/truebit-implementation/node_modules/minimetoken/contracts/Controlled.sol deleted file mode 100644 index 871dec4a..00000000 --- a/truebit-implementation/node_modules/minimetoken/contracts/Controlled.sol +++ /dev/null @@ -1,17 +0,0 @@ -pragma solidity ^0.4.18; - -contract Controlled { - /// @notice The address of the controller is the only address that can call - /// a function with this modifier - modifier onlyController { require(msg.sender == controller); _; } - - address public controller; - - function Controlled() public { controller = msg.sender;} - - /// @notice Changes the controller of the contract - /// @param _newController The new controller of the contract - function changeController(address _newController) public onlyController { - controller = _newController; - } -} diff --git a/truebit-implementation/node_modules/minimetoken/contracts/MiniMeToken.sol b/truebit-implementation/node_modules/minimetoken/contracts/MiniMeToken.sol deleted file mode 100644 index 81198aab..00000000 --- a/truebit-implementation/node_modules/minimetoken/contracts/MiniMeToken.sol +++ /dev/null @@ -1,563 +0,0 @@ -pragma solidity ^0.4.18; - -/* - Copyright 2016, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MiniMeToken Contract -/// @author Jordi Baylina -/// @dev This token contract's goal is to make it easy for anyone to clone this -/// token using the token distribution at a given block, this will allow DAO's -/// and DApps to upgrade their features in a decentralized manner without -/// affecting the original token -/// @dev It is ERC20 compliant, but still needs to under go further testing. - -import "./Controlled.sol"; -import "./TokenController.sol"; - -contract ApproveAndCallFallBack { - function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; -} - -/// @dev The actual token contract, the default controller is the msg.sender -/// that deploys the contract, so usually this token will be deployed by a -/// token controller contract, which Giveth will call a "Campaign" -contract MiniMeToken is Controlled { - - string public name; //The Token's name: e.g. DigixDAO Tokens - uint8 public decimals; //Number of decimals of the smallest unit - string public symbol; //An identifier: e.g. REP - string public version = 'MMT_0.2'; //An arbitrary versioning scheme - - - /// @dev `Checkpoint` is the structure that attaches a block number to a - /// given value, the block number attached is the one that last changed the - /// value - struct Checkpoint { - - // `fromBlock` is the block number that the value was generated from - uint128 fromBlock; - - // `value` is the amount of tokens at a specific block number - uint128 value; - } - - // `parentToken` is the Token address that was cloned to produce this token; - // it will be 0x0 for a token that was not cloned - MiniMeToken public parentToken; - - // `parentSnapShotBlock` is the block number from the Parent Token that was - // used to determine the initial distribution of the Clone Token - uint public parentSnapShotBlock; - - // `creationBlock` is the block number that the Clone Token was created - uint public creationBlock; - - // `balances` is the map that tracks the balance of each address, in this - // contract when the balance changes the block number that the change - // occurred is also included in the map - mapping (address => Checkpoint[]) balances; - - // `allowed` tracks any extra transfer rights as in all ERC20 tokens - mapping (address => mapping (address => uint256)) allowed; - - // Tracks the history of the `totalSupply` of the token - Checkpoint[] totalSupplyHistory; - - // Flag that determines if the token is transferable or not. - bool public transfersEnabled; - - // The factory used to create new clone tokens - MiniMeTokenFactory public tokenFactory; - -//////////////// -// Constructor -//////////////// - - /// @notice Constructor to create a MiniMeToken - /// @param _tokenFactory The address of the MiniMeTokenFactory contract that - /// will create the Clone token contracts, the token factory needs to be - /// deployed first - /// @param _parentToken Address of the parent token, set to 0x0 if it is a - /// new token - /// @param _parentSnapShotBlock Block of the parent token that will - /// determine the initial distribution of the clone token, set to 0 if it - /// is a new token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - function MiniMeToken( - address _tokenFactory, - address _parentToken, - uint _parentSnapShotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public { - tokenFactory = MiniMeTokenFactory(_tokenFactory); - name = _tokenName; // Set the name - decimals = _decimalUnits; // Set the decimals - symbol = _tokenSymbol; // Set the symbol - parentToken = MiniMeToken(_parentToken); - parentSnapShotBlock = _parentSnapShotBlock; - transfersEnabled = _transfersEnabled; - creationBlock = block.number; - } - - -/////////////////// -// ERC20 Methods -/////////////////// - - /// @notice Send `_amount` tokens to `_to` from `msg.sender` - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return Whether the transfer was successful or not - function transfer(address _to, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - return doTransfer(msg.sender, _to, _amount); - } - - /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it - /// is approved by `_from` - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function transferFrom(address _from, address _to, uint256 _amount - ) public returns (bool success) { - - // The controller of this contract can move tokens around at will, - // this is important to recognize! Confirm that you trust the - // controller of this contract, which in most situations should be - // another open source smart contract or 0x0 - if (msg.sender != controller) { - require(transfersEnabled); - - // The standard ERC 20 transferFrom functionality - if (allowed[_from][msg.sender] < _amount) return false; - allowed[_from][msg.sender] -= _amount; - } - return doTransfer(_from, _to, _amount); - } - - /// @dev This is the actual transfer function in the token contract, it can - /// only be called by other functions in this contract. - /// @param _from The address holding the tokens being transferred - /// @param _to The address of the recipient - /// @param _amount The amount of tokens to be transferred - /// @return True if the transfer was successful - function doTransfer(address _from, address _to, uint _amount - ) internal returns(bool) { - - if (_amount == 0) { - return true; - } - - require(parentSnapShotBlock < block.number); - - // Do not allow transfer to 0x0 or the token contract itself - require((_to != 0) && (_to != address(this))); - - // If the amount being transfered is more than the balance of the - // account the transfer returns false - var previousBalanceFrom = balanceOfAt(_from, block.number); - if (previousBalanceFrom < _amount) { - return false; - } - - // Alerts the token controller of the transfer - if (isContract(controller)) { - require(TokenController(controller).onTransfer(_from, _to, _amount)); - } - - // First update the balance array with the new value for the address - // sending the tokens - updateValueAtNow(balances[_from], previousBalanceFrom - _amount); - - // Then update the balance array with the new value for the address - // receiving the tokens - var previousBalanceTo = balanceOfAt(_to, block.number); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(balances[_to], previousBalanceTo + _amount); - - // An event to make the transfer easy to find on the blockchain - Transfer(_from, _to, _amount); - - return true; - } - - /// @param _owner The address that's balance is being requested - /// @return The balance of `_owner` at the current block - function balanceOf(address _owner) public constant returns (uint256 balance) { - return balanceOfAt(_owner, block.number); - } - - /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on - /// its behalf. This is a modified version of the ERC20 approve function - /// to be a little bit safer - /// @param _spender The address of the account able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the approval was successful - function approve(address _spender, uint256 _amount) public returns (bool success) { - require(transfersEnabled); - - // To change the approve amount you first have to reduce the addresses` - // allowance to zero by calling `approve(_spender,0)` if it is not - // already 0 to mitigate the race condition described here: - // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); - - // Alerts the token controller of the approve function call - if (isContract(controller)) { - require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); - } - - allowed[msg.sender][_spender] = _amount; - Approval(msg.sender, _spender, _amount); - return true; - } - - /// @dev This function makes it easy to read the `allowed[]` map - /// @param _owner The address of the account that owns the token - /// @param _spender The address of the account able to transfer the tokens - /// @return Amount of remaining tokens of _owner that _spender is allowed - /// to spend - function allowance(address _owner, address _spender - ) public constant returns (uint256 remaining) { - return allowed[_owner][_spender]; - } - - /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on - /// its behalf, and then a function is triggered in the contract that is - /// being approved, `_spender`. This allows users to use their tokens to - /// interact with contracts in one function call instead of two - /// @param _spender The address of the contract able to transfer the tokens - /// @param _amount The amount of tokens to be approved for transfer - /// @return True if the function call was successful - function approveAndCall(address _spender, uint256 _amount, bytes _extraData - ) public returns (bool success) { - require(approve(_spender, _amount)); - - ApproveAndCallFallBack(_spender).receiveApproval( - msg.sender, - _amount, - this, - _extraData - ); - - return true; - } - - /// @dev This function makes it easy to get the total number of tokens - /// @return The total number of tokens - function totalSupply() public constant returns (uint) { - return totalSupplyAt(block.number); - } - - -//////////////// -// Query balance and totalSupply in History -//////////////// - - /// @dev Queries the balance of `_owner` at a specific `_blockNumber` - /// @param _owner The address from which the balance will be retrieved - /// @param _blockNumber The block number when the balance is queried - /// @return The balance at `_blockNumber` - function balanceOfAt(address _owner, uint _blockNumber) public constant - returns (uint) { - - // These next few lines are used when the balance of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.balanceOfAt` be queried at the - // genesis block for that token as this contains initial balance of - // this token - if ((balances[_owner].length == 0) - || (balances[_owner][0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); - } else { - // Has no parent - return 0; - } - - // This will return the expected balance during normal situations - } else { - return getValueAt(balances[_owner], _blockNumber); - } - } - - /// @notice Total amount of tokens at a specific `_blockNumber`. - /// @param _blockNumber The block number when the totalSupply is queried - /// @return The total amount of tokens at `_blockNumber` - function totalSupplyAt(uint _blockNumber) public constant returns(uint) { - - // These next few lines are used when the totalSupply of the token is - // requested before a check point was ever created for this token, it - // requires that the `parentToken.totalSupplyAt` be queried at the - // genesis block for this token as that contains totalSupply of this - // token at this block number. - if ((totalSupplyHistory.length == 0) - || (totalSupplyHistory[0].fromBlock > _blockNumber)) { - if (address(parentToken) != 0) { - return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); - } else { - return 0; - } - - // This will return the expected totalSupply during normal situations - } else { - return getValueAt(totalSupplyHistory, _blockNumber); - } - } - -//////////////// -// Clone Token Method -//////////////// - - /// @notice Creates a new clone token with the initial distribution being - /// this token at `_snapshotBlock` - /// @param _cloneTokenName Name of the clone token - /// @param _cloneDecimalUnits Number of decimals of the smallest unit - /// @param _cloneTokenSymbol Symbol of the clone token - /// @param _snapshotBlock Block when the distribution of the parent token is - /// copied to set the initial distribution of the new clone token; - /// if the block is zero than the actual block, the current block is used - /// @param _transfersEnabled True if transfers are allowed in the clone - /// @return The address of the new MiniMeToken Contract - function createCloneToken( - string _cloneTokenName, - uint8 _cloneDecimalUnits, - string _cloneTokenSymbol, - uint _snapshotBlock, - bool _transfersEnabled - ) public returns(address) { - if (_snapshotBlock == 0) _snapshotBlock = block.number; - MiniMeToken cloneToken = tokenFactory.createCloneToken( - this, - _snapshotBlock, - _cloneTokenName, - _cloneDecimalUnits, - _cloneTokenSymbol, - _transfersEnabled - ); - - cloneToken.changeController(msg.sender); - - // An event to make the token easy to find on the blockchain - NewCloneToken(address(cloneToken), _snapshotBlock); - return address(cloneToken); - } - -//////////////// -// Generate and destroy tokens -//////////////// - - /// @notice Generates `_amount` tokens that are assigned to `_owner` - /// @param _owner The address that will be assigned the new tokens - /// @param _amount The quantity of tokens generated - /// @return True if the tokens are generated correctly - function generateTokens(address _owner, uint _amount - ) public onlyController returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow - uint previousBalanceTo = balanceOf(_owner); - require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow - updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); - updateValueAtNow(balances[_owner], previousBalanceTo + _amount); - Transfer(0, _owner, _amount); - return true; - } - - - /// @notice Burns `_amount` tokens from `_owner` - /// @param _owner The address that will lose the tokens - /// @param _amount The quantity of tokens to burn - /// @return True if the tokens are burned correctly - function destroyTokens(address _owner, uint _amount - ) onlyController public returns (bool) { - uint curTotalSupply = totalSupply(); - require(curTotalSupply >= _amount); - uint previousBalanceFrom = balanceOf(_owner); - require(previousBalanceFrom >= _amount); - updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); - updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); - Transfer(_owner, 0, _amount); - return true; - } - -//////////////// -// Enable tokens transfers -//////////////// - - - /// @notice Enables token holders to transfer their tokens freely if true - /// @param _transfersEnabled True if transfers are allowed in the clone - function enableTransfers(bool _transfersEnabled) public onlyController { - transfersEnabled = _transfersEnabled; - } - -//////////////// -// Internal helper functions to query and set a value in a snapshot array -//////////////// - - /// @dev `getValueAt` retrieves the number of tokens at a given block number - /// @param checkpoints The history of values being queried - /// @param _block The block number to retrieve the value at - /// @return The number of tokens being queried - function getValueAt(Checkpoint[] storage checkpoints, uint _block - ) constant internal returns (uint) { - if (checkpoints.length == 0) return 0; - - // Shortcut for the actual value - if (_block >= checkpoints[checkpoints.length-1].fromBlock) - return checkpoints[checkpoints.length-1].value; - if (_block < checkpoints[0].fromBlock) return 0; - - // Binary search of the value in the array - uint min = 0; - uint max = checkpoints.length-1; - while (max > min) { - uint mid = (max + min + 1)/ 2; - if (checkpoints[mid].fromBlock<=_block) { - min = mid; - } else { - max = mid-1; - } - } - return checkpoints[min].value; - } - - /// @dev `updateValueAtNow` used to update the `balances` map and the - /// `totalSupplyHistory` - /// @param checkpoints The history of data being updated - /// @param _value The new number of tokens - function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value - ) internal { - if ((checkpoints.length == 0) - || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { - Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; - newCheckPoint.fromBlock = uint128(block.number); - newCheckPoint.value = uint128(_value); - } else { - Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; - oldCheckPoint.value = uint128(_value); - } - } - - /// @dev Internal function to determine if an address is a contract - /// @param _addr The address being queried - /// @return True if `_addr` is a contract - function isContract(address _addr) constant internal returns(bool) { - uint size; - if (_addr == 0) return false; - assembly { - size := extcodesize(_addr) - } - return size>0; - } - - /// @dev Helper function to return a min betwen the two uints - function min(uint a, uint b) pure internal returns (uint) { - return a < b ? a : b; - } - - /// @notice The fallback function: If the contract's controller has not been - /// set to 0, then the `proxyPayment` method is called which relays the - /// ether and creates tokens as described in the token controller contract - function () public payable { - require(isContract(controller)); - require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); - } - -////////// -// Safety Methods -////////// - - /// @notice This method can be used by the controller to extract mistakenly - /// sent tokens to this contract. - /// @param _token The address of the token contract that you want to recover - /// set to 0 in case you want to extract ether. - function claimTokens(address _token) public onlyController { - if (_token == 0x0) { - controller.transfer(this.balance); - return; - } - - MiniMeToken token = MiniMeToken(_token); - uint balance = token.balanceOf(this); - token.transfer(controller, balance); - ClaimedTokens(_token, controller, balance); - } - -//////////////// -// Events -//////////////// - event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); - event Transfer(address indexed _from, address indexed _to, uint256 _amount); - event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); - event Approval( - address indexed _owner, - address indexed _spender, - uint256 _amount - ); - -} - - -//////////////// -// MiniMeTokenFactory -//////////////// - -/// @dev This contract is used to generate clone contracts from a contract. -/// In solidity this is the way to create a contract from a contract of the -/// same class -contract MiniMeTokenFactory { - - /// @notice Update the DApp by creating a new token with new functionalities - /// the msg.sender becomes the controller of this clone token - /// @param _parentToken Address of the token being cloned - /// @param _snapshotBlock Block of the parent token that will - /// determine the initial distribution of the clone token - /// @param _tokenName Name of the new token - /// @param _decimalUnits Number of decimals of the new token - /// @param _tokenSymbol Token Symbol for the new token - /// @param _transfersEnabled If true, tokens will be able to be transferred - /// @return The address of the new token contract - function createCloneToken( - address _parentToken, - uint _snapshotBlock, - string _tokenName, - uint8 _decimalUnits, - string _tokenSymbol, - bool _transfersEnabled - ) public returns (MiniMeToken) { - MiniMeToken newToken = new MiniMeToken( - this, - _parentToken, - _snapshotBlock, - _tokenName, - _decimalUnits, - _tokenSymbol, - _transfersEnabled - ); - - newToken.changeController(msg.sender); - return newToken; - } -} diff --git a/truebit-implementation/node_modules/minimetoken/contracts/SampleCampaign-TokenController.sol b/truebit-implementation/node_modules/minimetoken/contracts/SampleCampaign-TokenController.sol deleted file mode 100755 index 802533d7..00000000 --- a/truebit-implementation/node_modules/minimetoken/contracts/SampleCampaign-TokenController.sol +++ /dev/null @@ -1,185 +0,0 @@ -pragma solidity ^0.4.6; - -/* - Copyright 2017, Jordi Baylina - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -/// @title MilestoneTracker Contract -/// @author Jordi Baylina -/// @dev This contract controls the issuance of tokens for the MiniMe Token -/// Contract. This version specifically acts as a Campaign manager for raising -/// funds for non-profit causes, but it can be customized for any variety of -/// purposes. - -import "MiniMeToken.sol"; - - -/// @dev `Owned` is a base level contract that assigns an `owner` that can be -/// later changed -contract Owned { - /// @dev `owner` is the only address that can call a function with this - /// modifier - modifier onlyOwner { require (msg.sender == owner); _; } - - address public owner; - - /// @notice The Constructor assigns the message sender to be `owner` - function Owned() { owner = msg.sender;} - - /// @notice `owner` can step down and assign some other address to this role - /// @param _newOwner The address of the new owner. 0x0 can be used to create - /// an unowned neutral vault, however that cannot be undone - function changeOwner(address _newOwner) onlyOwner { - owner = _newOwner; - } -} - - -/// @dev This is designed to control the issuance of a MiniMe Token for a -/// non-profit Campaign. This contract effectively dictates the terms of the -/// funding round. - -contract Campaign is TokenController, Owned { - - uint public startFundingTime; // In UNIX Time Format - uint public endFundingTime; // In UNIX Time Format - uint public maximumFunding; // In wei - uint public totalCollected; // In wei - MiniMeToken public tokenContract; // The new token for this Campaign - address public vaultAddress; // The address to hold the funds donated - -/// @notice 'Campaign()' initiates the Campaign by setting its funding -/// parameters -/// @dev There are several checks to make sure the parameters are acceptable -/// @param _startFundingTime The UNIX time that the Campaign will be able to -/// start receiving funds -/// @param _endFundingTime The UNIX time that the Campaign will stop being able -/// to receive funds -/// @param _maximumFunding In wei, the Maximum amount that the Campaign can -/// receive (currently the max is set at 10,000 ETH for the beta) -/// @param _vaultAddress The address that will store the donated funds -/// @param _tokenAddress Address of the token contract this contract controls - - function Campaign( - uint _startFundingTime, - uint _endFundingTime, - uint _maximumFunding, - address _vaultAddress, - address _tokenAddress - - ) { - require ((_endFundingTime >= now) && // Cannot end in the past - (_endFundingTime > _startFundingTime) && - (_maximumFunding <= 10000 ether) && // The Beta is limited - (_vaultAddress != 0)); // To prevent burning ETH - startFundingTime = _startFundingTime; - endFundingTime = _endFundingTime; - maximumFunding = _maximumFunding; - tokenContract = MiniMeToken(_tokenAddress);// The Deployed Token Contract - vaultAddress = _vaultAddress; - } - -/// @dev The fallback function is called when ether is sent to the contract, it -/// simply calls `doPayment()` with the address that sent the ether as the -/// `_owner`. Payable is a required solidity modifier for functions to receive -/// ether, without this modifier functions will throw if ether is sent to them - - function () payable { - doPayment(msg.sender); - } - -///////////////// -// TokenController interface -///////////////// - -/// @notice `proxyPayment()` allows the caller to send ether to the Campaign and -/// have the tokens created in an address of their choosing -/// @param _owner The address that will hold the newly created tokens - - function proxyPayment(address _owner) payable returns(bool) { - doPayment(_owner); - return true; - } - -/// @notice Notifies the controller about a transfer, for this Campaign all -/// transfers are allowed by default and no extra notifications are needed -/// @param _from The origin of the transfer -/// @param _to The destination of the transfer -/// @param _amount The amount of the transfer -/// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) returns(bool) { - return true; - } - -/// @notice Notifies the controller about an approval, for this Campaign all -/// approvals are allowed by default and no extra notifications are needed -/// @param _owner The address that calls `approve()` -/// @param _spender The spender in the `approve()` call -/// @param _amount The amount in the `approve()` call -/// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) - returns(bool) - { - return true; - } - - -/// @dev `doPayment()` is an internal function that sends the ether that this -/// contract receives to the `vault` and creates tokens in the address of the -/// `_owner` assuming the Campaign is still accepting funds -/// @param _owner The address that will hold the newly created tokens - - function doPayment(address _owner) internal { - -// First check that the Campaign is allowed to receive this donation - require ((now >= startFundingTime) && - (now <= endFundingTime) && - (tokenContract.controller() != 0) && // Extra check - (msg.value != 0) && - (totalCollected + msg.value <= maximumFunding)); - -//Track how much the Campaign has collected - totalCollected += msg.value; - -//Send the ether to the vault - require (vaultAddress.send(msg.value)); - -// Creates an equal amount of tokens as ether sent. The new tokens are created -// in the `_owner` address - require (tokenContract.generateTokens(_owner, msg.value)); - - return; - } - -/// @notice `finalizeFunding()` ends the Campaign by calling setting the -/// controller to 0, thereby ending the issuance of new tokens and stopping the -/// Campaign from receiving more ether -/// @dev `finalizeFunding()` can only be called after the end of the funding period. - - function finalizeFunding() { - require(now >= endFundingTime); - tokenContract.changeController(0); - } - - -/// @notice `onlyOwner` changes the location that ether is sent -/// @param _newVaultAddress The address that will receive the ether sent to this -/// Campaign - function setVault(address _newVaultAddress) onlyOwner { - vaultAddress = _newVaultAddress; - } - -} diff --git a/truebit-implementation/node_modules/minimetoken/contracts/TokenController.sol b/truebit-implementation/node_modules/minimetoken/contracts/TokenController.sol deleted file mode 100644 index dad442e1..00000000 --- a/truebit-implementation/node_modules/minimetoken/contracts/TokenController.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.4.18; - -/// @dev The token controller contract must implement these functions -contract TokenController { - /// @notice Called when `_owner` sends ether to the MiniMe Token contract - /// @param _owner The address that sent the ether to create tokens - /// @return True if the ether is accepted, false if it throws - function proxyPayment(address _owner) public payable returns(bool); - - /// @notice Notifies the controller about a token transfer allowing the - /// controller to react if desired - /// @param _from The origin of the transfer - /// @param _to The destination of the transfer - /// @param _amount The amount of the transfer - /// @return False if the controller does not authorize the transfer - function onTransfer(address _from, address _to, uint _amount) public returns(bool); - - /// @notice Notifies the controller about an approval allowing the - /// controller to react if desired - /// @param _owner The address that calls `approve()` - /// @param _spender The spender in the `approve()` call - /// @param _amount The amount in the `approve()` call - /// @return False if the controller does not authorize the approval - function onApprove(address _owner, address _spender, uint _amount) public - returns(bool); -} diff --git a/truebit-implementation/node_modules/minimetoken/env.js b/truebit-implementation/node_modules/minimetoken/env.js deleted file mode 100644 index 6bed322b..00000000 --- a/truebit-implementation/node_modules/minimetoken/env.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; - -var Web3 = require('web3'); -// create an instance of web3 using the HTTP provider. -// NOTE in mist web3 is already available, so check first if its available before instantiating -var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); - -var BigNumber = require('bignumber.js'); - -var eth = web3.eth; -var async = require('async'); - -var MiniMeToken = require('./dist/minimetoken.js'); - -var gcb = function(err, res) { - if (err) { - console.log("ERROR: "+err); - } else { - console.log(JSON.stringify(res,null,2)); - } -} - -var minimeToken; - -function deployExample(cb) { - cb = cb || gcb; - async.series([ - function(cb) { - MiniMeToken.deploy(web3, { - tokenName: "MiniMe Test Token", - decimalUnits: 18, - tokenSymbol: "MMT", - }, function(err, _minimeToken) { - if (err) return err; - minimeToken = _minimeToken; - console.log("Minime Token: " + minimeToken.contract.address); - cb(); - }); - }, - function(cb) { - minimeToken.generateTokens({ - owner: eth.accounts[ 1 ], - amount: 10, - from: eth.accounts[ 0 ], - },cb); - }, - ], cb); - -} diff --git a/truebit-implementation/node_modules/minimetoken/index.js b/truebit-implementation/node_modules/minimetoken/index.js deleted file mode 100644 index 4a447c44..00000000 --- a/truebit-implementation/node_modules/minimetoken/index.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.MiniMeToken = require('./js/minimetoken'); -exports.MiniMeTokenFactory = require('./js/minimetokenfactory'); -exports.MiniMeTokenState = require('./js/minimetokenstate'); diff --git a/truebit-implementation/node_modules/minimetoken/js/compile.js b/truebit-implementation/node_modules/minimetoken/js/compile.js deleted file mode 100644 index 9d534942..00000000 --- a/truebit-implementation/node_modules/minimetoken/js/compile.js +++ /dev/null @@ -1,14 +0,0 @@ -const ethConnector = require("ethconnector"); -const path = require("path"); - -ethConnector.compile( - path.join(__dirname, "../contracts/MiniMeToken.sol"), - path.join(__dirname, "../contracts/MiniMeToken.sol.js"), - (err) => { - if (err) { - console.log(err); - process.exit(1); - } else { - process.exit(0); - } - }); diff --git a/truebit-implementation/node_modules/minimetoken/js/minimetoken.js b/truebit-implementation/node_modules/minimetoken/js/minimetoken.js deleted file mode 100644 index b45eaa08..00000000 --- a/truebit-implementation/node_modules/minimetoken/js/minimetoken.js +++ /dev/null @@ -1,5 +0,0 @@ -const MiniMeTokenAbi = require('../build/MiniMeToken.sol').MiniMeTokenAbi; -const MiniMeTokenByteCode = require('../build/MiniMeToken.sol').MiniMeTokenByteCode; -const generateClass = require('eth-contract-class').default; - -module.exports = generateClass(MiniMeTokenAbi, MiniMeTokenByteCode); diff --git a/truebit-implementation/node_modules/minimetoken/js/minimetokenfactory.js b/truebit-implementation/node_modules/minimetoken/js/minimetokenfactory.js deleted file mode 100644 index 5b29e72c..00000000 --- a/truebit-implementation/node_modules/minimetoken/js/minimetokenfactory.js +++ /dev/null @@ -1,5 +0,0 @@ -const MiniMeTokenFactoryAbi = require('../build/MiniMeToken.sol').MiniMeTokenFactoryAbi; -const MiniMeTokenFactoryByteCode = require('../build/MiniMeToken.sol').MiniMeTokenFactoryByteCode; -const generateClass = require('eth-contract-class').default; - -module.exports = generateClass(MiniMeTokenFactoryAbi, MiniMeTokenFactoryByteCode); diff --git a/truebit-implementation/node_modules/minimetoken/js/minimetokenstate.js b/truebit-implementation/node_modules/minimetoken/js/minimetokenstate.js deleted file mode 100644 index 091d1503..00000000 --- a/truebit-implementation/node_modules/minimetoken/js/minimetokenstate.js +++ /dev/null @@ -1,44 +0,0 @@ -class MiniMeTokenState { - constructor(minimeToken) { - this.$token = minimeToken; - } - - async getState() { - const st = { - balances: {}, - }; - - const res = await Promise.all([ - this.$token.name(), - this.$token.decimals(), - this.$token.controller(), - this.$token.totalSupply(), - this.$token.parentToken(), - this.$token.controller(), - this.$token.parentSnapShotBlock(), - this.$token.$web3.eth.getAccounts(), - ]); - - st.name = res[0]; - st.decimals = res[1]; - st.controller = res[2]; - st.totalSupply = res[3]; - st.parentToken = res[4]; - st.controller = res[5]; - st.parentSnapShotBlock = res[6]; - const accounts = res[7]; - - const calls = accounts.map(account => this.$token.balanceOf(account)); - - const balances = await Promise.all(calls); - - for (let i = 0; i < accounts.length; i += 1) { - st.balances[accounts[i]] = balances[i]; - } - - return st; - } -} - -module.exports = MiniMeTokenState; - diff --git a/truebit-implementation/node_modules/minimetoken/package.json b/truebit-implementation/node_modules/minimetoken/package.json deleted file mode 100644 index 65a25afb..00000000 --- a/truebit-implementation/node_modules/minimetoken/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "minimetoken@^0.2.0", - "_id": "minimetoken@0.2.0", - "_inBundle": false, - "_integrity": "sha512-oRwMg4tbr4sAznQ8+eS6ZQbrIQNt2Qn0wTFHQJVlPCCQ1cgq24h1B2KIaUtqIUu/eKZi7a5NE1MOcv0tZQxYFQ==", - "_location": "/minimetoken", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "minimetoken@^0.2.0", - "name": "minimetoken", - "escapedName": "minimetoken", - "rawSpec": "^0.2.0", - "saveSpec": null, - "fetchSpec": "^0.2.0" - }, - "_requiredBy": [ - "/kleros-interaction" - ], - "_resolved": "https://registry.npmjs.org/minimetoken/-/minimetoken-0.2.0.tgz", - "_shasum": "c182231eae93e752e5d8801c2967e6d6ef6a0e6f", - "_spec": "minimetoken@^0.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/kleros-interaction", - "author": { - "name": "Jordi Baylina" - }, - "bugs": { - "url": "https://github.com/Giveth/minimi/issues" - }, - "bundleDependencies": false, - "dependencies": { - "eth-contract-class": "0.0.6" - }, - "deprecated": false, - "description": "MiniMe contract", - "devDependencies": { - "babel-eslint": "^7.2.3", - "chai": "^4.1.0", - "eslint-config-airbnb": "^15.0.1", - "eslint-plugin-import": "^2.6.0", - "eslint-plugin-jsx-a11y": "^6.0.2", - "eslint-plugin-react": "^7.1.0", - "ethereumjs-testrpc": "git://github.com/perissology/testrpc.git#81216dbc", - "lerna": "^2.2.0", - "mocha": "^3.5.0", - "random-bytes": "^1.0.0", - "solcpiler": "0.0.6", - "web3": "git://github.com/perissology/web3.js.git#all_fixes" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/Giveth/minime", - "keywords": [ - "dao", - "solidity", - "token", - "charity", - "smart", - "contract", - "minime", - "giveth", - "ethereum" - ], - "license": "GPL-3.0", - "main": "dist/minimetoken.js", - "name": "minimetoken", - "repository": { - "type": "git", - "url": "git+https://github.com/Giveth/minime.git" - }, - "scripts": { - "build": "solcpiler", - "test": "solcpiler; mocha --harmony" - }, - "version": "0.2.0" -} diff --git a/truebit-implementation/node_modules/minimetoken/readme-header.png b/truebit-implementation/node_modules/minimetoken/readme-header.png deleted file mode 100755 index f6a24800..00000000 Binary files a/truebit-implementation/node_modules/minimetoken/readme-header.png and /dev/null differ diff --git a/truebit-implementation/node_modules/minimetoken/test/minimetoken_normal.js b/truebit-implementation/node_modules/minimetoken/test/minimetoken_normal.js deleted file mode 100644 index cf89062f..00000000 --- a/truebit-implementation/node_modules/minimetoken/test/minimetoken_normal.js +++ /dev/null @@ -1,218 +0,0 @@ -/* eslint-env mocha */ -/* eslint-disable no-await-in-loop */ -const TestRPC = require('ethereumjs-testrpc'); -const Web3 = require('web3'); -const chai = require('chai'); - -const MiniMeToken = require('../index.js').MiniMeToken; -const MiniMeTokenFactory = require('../index.js').MiniMeTokenFactory; -const MiniMeTokenState = require('../index.js').MiniMeTokenState; - -const assert = chai.assert; -const { utils } = Web3; - -const verbose = false; - -const log = (S) => { - if (verbose) { - console.log(S); - } -}; - -// b[0] -> 0, 0, 0, 0 -// b[1] -> 0,10, 0, 0 -// b[2] -> 0, 8, 2, 0 -// b[3] -> 0, 9, 1, 0 -// b[4] -> 0, 6, 1, 0 -// Clone token -// b[5] -> 0, 6, 1, 0 -// b[6] -> 0, 2, 5. 0 - -describe('MiniMeToken test', () => { - let testrpc; - let web3; - let accounts; - let miniMeToken; - let miniMeTokenState; - let miniMeTokenClone; - let miniMeTokenCloneState; - const b = []; - - before(async () => { - testrpc = TestRPC.server({ - ws: true, - gasLimit: 5800000, - total_accounts: 10, - }); - - testrpc.listen(8546, '127.0.0.1'); - - web3 = new Web3('ws://localhost:8546'); - accounts = await web3.eth.getAccounts(); - }); - - after((done) => { - testrpc.close(); - done(); - }); - - it('should deploy all the contracts', async () => { - const tokenFactory = await MiniMeTokenFactory.new(web3); - miniMeToken = await MiniMeToken.new(web3, - tokenFactory.$address, - 0, - 0, - 'MiniMe Test Token', - 18, - 'MMT', - true); - assert.ok(miniMeToken.$address); - miniMeTokenState = new MiniMeTokenState(miniMeToken); - }).timeout(20000); - - it('Should generate tokens for address 1', async () => { - b[0] = await web3.eth.getBlockNumber(); - log(`b[0]-> ${b[0]}`); - - await miniMeToken.generateTokens(accounts[1], 10); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 10); - assert.equal(st.balances[accounts[1]], 10); - b[1] = await web3.eth.getBlockNumber(); - }).timeout(6000); - - it('Should transfer tokens from address 1 to address 2', async () => { - await miniMeToken.transfer(accounts[2], 2, { from: accounts[1], gas: 200000 }); - b[2] = await web3.eth.getBlockNumber(); - log(`b[2]-> ${b[3]}`); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 10); - assert.equal(st.balances[accounts[1]], 8); - assert.equal(st.balances[accounts[2]], 2); - - const balance = await miniMeToken.balanceOfAt(accounts[1], b[1]); - assert.equal(balance, 10); - }).timeout(6000); - - it('Should allow and transfer tokens from address 2 to address 1 allowed to 3', async () => { - await miniMeToken.approve(accounts[3], 2, { from: accounts[2] }); - const allowed = await miniMeToken.allowance(accounts[2], accounts[3]); - assert.equal(allowed, 2); - - await miniMeToken.transferFrom(accounts[2], accounts[1], 1, { from: accounts[3] }); - - const allowed2 = await miniMeToken.allowance(accounts[2], accounts[3]); - assert.equal(allowed2, 1); - - b[3] = await web3.eth.getBlockNumber(); - log(`b[3]-> ${b[3]}`); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 10); - assert.equal(st.balances[accounts[1]], 9); - assert.equal(st.balances[accounts[2]], 1); - - let balance; - - balance = await miniMeToken.balanceOfAt(accounts[1], b[2]); - assert.equal(balance, 8); - balance = await miniMeToken.balanceOfAt(accounts[2], b[2]); - assert.equal(balance, 2); - balance = await miniMeToken.balanceOfAt(accounts[1], b[1]); - assert.equal(balance, 10); - balance = await miniMeToken.balanceOfAt(accounts[2], b[1]); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[1], b[0]); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[2], b[0]); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[1], 0); - assert.equal(balance, 0); - balance = await miniMeToken.balanceOfAt(accounts[2], 0); - assert.equal(balance, 0); - }); - - it('Should Destroy 3 tokens from 1 and 1 from 2', async () => { - await miniMeToken.destroyTokens(accounts[1], 3, { from: accounts[0], gas: 200000 }); - b[4] = await web3.eth.getBlockNumber(); - log(`b[4]-> ${b[4]}`); - const st = await miniMeTokenState.getState(); - assert.equal(st.totalSupply, 7); - assert.equal(st.balances[accounts[1]], 6); - }); - - it('Should Create the clone token', async () => { - const miniMeTokenCloneTx = await miniMeToken.createCloneToken( - 'Clone Token 1', - 18, - 'MMTc', - 0, - true); - - let addr = miniMeTokenCloneTx.events.NewCloneToken.raw.topics[1]; - addr = `0x${addr.slice(26)}`; - addr = utils.toChecksumAddress(addr); - miniMeTokenClone = new MiniMeToken(web3, addr); - - miniMeTokenCloneState = new MiniMeTokenState(miniMeTokenClone); - - b[5] = await web3.eth.getBlockNumber(); - log(`b[5]-> ${b[5]}`); - const st = await miniMeTokenCloneState.getState(); - - assert.equal(st.parentToken, miniMeToken.$address); - assert.equal(st.parentSnapShotBlock, b[5]); - assert.equal(st.totalSupply, 7); - assert.equal(st.balances[accounts[1]], 6); - - const totalSupply = await miniMeTokenClone.totalSupplyAt(b[4]); - - assert.equal(totalSupply, 7); - - const balance = await miniMeTokenClone.balanceOfAt(accounts[2], b[4]); - assert.equal(balance, 1); - }).timeout(6000); - - it('Should mine one block to take effect clone', async () => { - await miniMeToken.transfer(accounts[1], 1, { from: accounts[1] }); - }); - - it('Should move tokens in the clone token from 2 to 3', async () => { - await miniMeTokenClone.transfer(accounts[2], 4, { from: accounts[1] }); - b[6] = await web3.eth.getBlockNumber(); - log(`b[6]-> ${b[6]}`); - - const st = await miniMeTokenCloneState.getState(); - assert.equal(st.totalSupply, 7); - assert.equal(st.balances[accounts[1]], 2); - assert.equal(st.balances[accounts[2]], 5); - - let balance; - - balance = await miniMeToken.balanceOfAt(accounts[1], b[5]); - assert.equal(balance, 6); - balance = await miniMeToken.balanceOfAt(accounts[2], b[5]); - assert.equal(balance, 1); - balance = await miniMeTokenClone.balanceOfAt(accounts[1], b[5]); - assert.equal(balance, 6); - balance = await miniMeTokenClone.balanceOfAt(accounts[2], b[5]); - assert.equal(balance, 1); - balance = await miniMeTokenClone.balanceOfAt(accounts[1], b[4]); - assert.equal(balance, 6); - balance = await miniMeTokenClone.balanceOfAt(accounts[2], b[4]); - assert.equal(balance, 1); - - let totalSupply; - totalSupply = await miniMeTokenClone.totalSupplyAt(b[5]); - assert.equal(totalSupply, 7); - totalSupply = await miniMeTokenClone.totalSupplyAt(b[4]); - assert.equal(totalSupply, 7); - }).timeout(6000); - - it('Should create tokens in the child token', async () => { - await miniMeTokenClone.generateTokens(accounts[1], 10, { from: accounts[0], gas: 300000 }); - const st = await miniMeTokenCloneState.getState(); - assert.equal(st.totalSupply, 17); - assert.equal(st.balances[accounts[1]], 12); - assert.equal(st.balances[accounts[2]], 5); - }); -}); diff --git a/truebit-implementation/node_modules/minimist/.travis.yml b/truebit-implementation/node_modules/minimist/.travis.yml deleted file mode 100644 index cc4dba29..00000000 --- a/truebit-implementation/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/truebit-implementation/node_modules/minimist/LICENSE b/truebit-implementation/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b..00000000 --- a/truebit-implementation/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/minimist/example/parse.js b/truebit-implementation/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8e..00000000 --- a/truebit-implementation/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/truebit-implementation/node_modules/minimist/index.js b/truebit-implementation/node_modules/minimist/index.js deleted file mode 100644 index 584f551a..00000000 --- a/truebit-implementation/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {} }; - - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - }); - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function setArg (key, val) { - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - setArg(m[1], m[2]); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && (aliases[key] ? !flags.bools[aliases[key]] : true)) { - setArg(key, next); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true'); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2)); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !flags.bools[aliases[key]] : true)) { - setArg(key, args[i+1]); - i++; - } - else if (args[i+1] && /true|false/.test(args[i+1])) { - setArg(key, args[i+1] === 'true'); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true); - } - } - } - else { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - notFlags.forEach(function(key) { - argv._.push(key); - }); - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function setKey (obj, keys, value) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - if (o[key] === undefined) o[key] = {}; - o = o[key]; - }); - - var key = keys[keys.length - 1]; - if (o[key] === undefined || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - -function longest (xs) { - return Math.max.apply(null, xs.map(function (x) { return x.length })); -} diff --git a/truebit-implementation/node_modules/minimist/package.json b/truebit-implementation/node_modules/minimist/package.json deleted file mode 100644 index 21cc82c9..00000000 --- a/truebit-implementation/node_modules/minimist/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "minimist@0.0.8", - "_id": "minimist@0.0.8", - "_inBundle": false, - "_integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "_location": "/minimist", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "minimist@0.0.8", - "name": "minimist", - "escapedName": "minimist", - "rawSpec": "0.0.8", - "saveSpec": null, - "fetchSpec": "0.0.8" - }, - "_requiredBy": [ - "/mkdirp" - ], - "_resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", - "_spec": "minimist@0.0.8", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/mkdirp", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/minimist/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "parse argument options", - "devDependencies": { - "tap": "~0.4.0", - "tape": "~1.0.4" - }, - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "license": "MIT", - "main": "index.js", - "name": "minimist", - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ] - }, - "version": "0.0.8" -} diff --git a/truebit-implementation/node_modules/minimist/readme.markdown b/truebit-implementation/node_modules/minimist/readme.markdown deleted file mode 100644 index c2563532..00000000 --- a/truebit-implementation/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) - -[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.dir(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a string or array of strings to always treat as booleans -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff --git a/truebit-implementation/node_modules/minimist/test/dash.js b/truebit-implementation/node_modules/minimist/test/dash.js deleted file mode 100644 index 8b034b99..00000000 --- a/truebit-implementation/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(5); - t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); - t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); - t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); - t.deepEqual( - parse([ '-b', '-' ], { boolean: 'b' }), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - parse([ '-s', '-' ], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(3); - t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); -}); diff --git a/truebit-implementation/node_modules/minimist/test/default_bool.js b/truebit-implementation/node_modules/minimist/test/default_bool.js deleted file mode 100644 index f0041ee4..00000000 --- a/truebit-implementation/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true } - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false } - }); - t.equal(argv.somefalse, false); - t.end(); -}); diff --git a/truebit-implementation/node_modules/minimist/test/dotted.js b/truebit-implementation/node_modules/minimist/test/dotted.js deleted file mode 100644 index ef0ae349..00000000 --- a/truebit-implementation/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); diff --git a/truebit-implementation/node_modules/minimist/test/long.js b/truebit-implementation/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09..00000000 --- a/truebit-implementation/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse([ '--bool' ]), - { bool : true, _ : [] }, - 'long boolean' - ); - t.deepEqual( - parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture sp' - ); - t.deepEqual( - parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture eq' - ); - t.deepEqual( - parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures sp' - ); - t.deepEqual( - parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures eq' - ); - t.end(); -}); diff --git a/truebit-implementation/node_modules/minimist/test/parse.js b/truebit-implementation/node_modules/minimist/test/parse.js deleted file mode 100644 index 8a906466..00000000 --- a/truebit-implementation/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,318 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse([ '--no-moo' ]), - { moo : false, _ : [] }, - 'no' - ); - t.deepEqual( - parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ] - } - ); - t.end(); -}); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789' - ]); - t.deepEqual(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ] - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse([ '-t', 'moo' ], { boolean: 't' }); - t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: [ 't', 'verbose' ], - default: { verbose: true } - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false } - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { - boolean: ['x','y','z'] - }); - - t.deepEqual(argv, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ] - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = parse([ '-s', "X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse([ "--s=X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - t.end(); -}); - -test('strings' , function (t) { - var s = parse([ '-s', '0001234' ], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse([ '-x', '56' ], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([ ' ', ' ' ], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function(t) { - var s = parse([ '-s' ], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse([ '--str' ], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse([ '-art' ], { - string: [ 'a', 't' ] - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - - -test('slashBreak', function (t) { - t.same( - parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [] } - ); - t.same( - parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: 'zoom' } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: [ 'zm', 'zoom' ] } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]); - - t.same(argv.foo, { - bar : 3, - baz : 4, - quux : { - quibble : 5, - o_O : true - } - }); - t.same(argv.beep, { boop : true }); - t.end(); -}); - -test('boolean and alias with chainable api', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - alias: { 'h': 'herp' }, - boolean: 'herp' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = [ '-h', 'true' ]; - var regular = [ '--herp', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function(t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); diff --git a/truebit-implementation/node_modules/minimist/test/parse_modified.js b/truebit-implementation/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 21851b03..00000000 --- a/truebit-implementation/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = parse([ '-b', '123' ], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: ['123'] }); -}); diff --git a/truebit-implementation/node_modules/minimist/test/short.js b/truebit-implementation/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c2..00000000 --- a/truebit-implementation/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); - t.deepEqual( - parse([ '-123', '456' ]), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse([ '-b' ]), - { b : true, _ : [] }, - 'short boolean' - ); - t.deepEqual( - parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ] }, - 'bare' - ); - t.deepEqual( - parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [] }, - 'group' - ); - t.deepEqual( - parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [] }, - 'short group next' - ); - t.deepEqual( - parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [] }, - 'short capture' - ); - t.deepEqual( - parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); diff --git a/truebit-implementation/node_modules/minimist/test/whitespace.js b/truebit-implementation/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58c..00000000 --- a/truebit-implementation/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff --git a/truebit-implementation/node_modules/mkdirp-promise/LICENSE b/truebit-implementation/node_modules/mkdirp-promise/LICENSE deleted file mode 100755 index ca55c91a..00000000 --- a/truebit-implementation/node_modules/mkdirp-promise/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Ahmad Nassri - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/mkdirp-promise/README.md b/truebit-implementation/node_modules/mkdirp-promise/README.md deleted file mode 100644 index cdf1b9db..00000000 --- a/truebit-implementation/node_modules/mkdirp-promise/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# mkdirp-promise [![version][npm-version]][npm-url] [![License][license-image]][license-url] - -[Promise] version of [mkdirp]: - -> Like mkdir -p, but in node.js! - -[![Build Status][travis-image]][travis-url] -[![Downloads][npm-downloads]][npm-url] -[![Code Climate][codeclimate-quality]][codeclimate-url] -[![Coverage Status][codeclimate-coverage]][codeclimate-url] -[![Dependency Status][dependencyci-image]][dependencyci-url] -[![Dependencies][david-image]][david-url] - -## Install - -```bash -npm install --only=production --save mkdirp-promise -``` - -## API - -```js -const mkdirp = require('mkdirp-promise') -``` - -### `mkdirp(dir, [, options])` - -*pattern*: `String` -*options*: `Object` or `String` -Return: `Object` ([Promise]) - -When it finishes, it will be [*fulfilled*](http://promisesaplus.com/#point-26) with the first directory made that had to be created, if any. - -When it fails, it will be [*rejected*](http://promisesaplus.com/#point-30) with an error as its first argument. - -```js -mkdirp('/tmp/foo/bar/baz') - .then(console.log) //=> '/tmp/foo' - .catch(console.error) -``` - -#### `options` - -The `option` object will be directly passed to [mkdirp](https://github.com/substack/node-mkdirp#mkdirpdir-opts-cb). - ---- -> :copyright: [ahmadnassri.com](https://www.ahmadnassri.com/)  ·  -> License: [ISC][license-url]  ·  -> Github: [@ahmadnassri](https://github.com/ahmadnassri)  ·  -> Twitter: [@ahmadnassri](https://twitter.com/ahmadnassri) - -[license-url]: http://choosealicense.com/licenses/isc/ -[license-image]: https://img.shields.io/github/license/ahmadnassri/mkdirp-promise.svg?style=flat-square - -[travis-url]: https://travis-ci.org/ahmadnassri/mkdirp-promise -[travis-image]: https://img.shields.io/travis/ahmadnassri/mkdirp-promise.svg?style=flat-square - -[npm-url]: https://www.npmjs.com/package/mkdirp-promise -[npm-version]: https://img.shields.io/npm/v/mkdirp-promise.svg?style=flat-square -[npm-downloads]: https://img.shields.io/npm/dm/mkdirp-promise.svg?style=flat-square - -[codeclimate-url]: https://codeclimate.com/github/ahmadnassri/mkdirp-promise -[codeclimate-quality]: https://img.shields.io/codeclimate/github/ahmadnassri/mkdirp-promise.svg?style=flat-square -[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/ahmadnassri/mkdirp-promise.svg?style=flat-square - -[david-url]: https://david-dm.org/ahmadnassri/mkdirp-promise -[david-image]: https://img.shields.io/david/ahmadnassri/mkdirp-promise.svg?style=flat-square - -[dependencyci-url]: https://dependencyci.com/github/ahmadnassri/mkdirp-promise -[dependencyci-image]: https://dependencyci.com/github/ahmadnassri/mkdirp-promise/badge?style=flat-square - -[mkdirp]: https://github.com/substack/node-mkdirp -[Promise]: http://promisesaplus.com/ diff --git a/truebit-implementation/node_modules/mkdirp-promise/lib/index.js b/truebit-implementation/node_modules/mkdirp-promise/lib/index.js deleted file mode 100755 index ae57ddff..00000000 --- a/truebit-implementation/node_modules/mkdirp-promise/lib/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict' - -const mkdirp = require('mkdirp') - -module.exports = function (dir, opts) { - return new Promise((resolve, reject) => { - mkdirp(dir, opts, (err, made) => err === null ? resolve(made) : reject(err)) - }) -} diff --git a/truebit-implementation/node_modules/mkdirp-promise/package.json b/truebit-implementation/node_modules/mkdirp-promise/package.json deleted file mode 100644 index c0000d6c..00000000 --- a/truebit-implementation/node_modules/mkdirp-promise/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "mkdirp-promise@^5.0.1", - "_id": "mkdirp-promise@5.0.1", - "_inBundle": false, - "_integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "_location": "/mkdirp-promise", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mkdirp-promise@^5.0.1", - "name": "mkdirp-promise", - "escapedName": "mkdirp-promise", - "rawSpec": "^5.0.1", - "saveSpec": null, - "fetchSpec": "^5.0.1" - }, - "_requiredBy": [ - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "_shasum": "e9b8f68e552c68a9c1713b84883f7a1dd039b8a1", - "_spec": "mkdirp-promise@^5.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Ahmad Nassri", - "email": "ahmad@ahmadnassri.com", - "url": "https://www.ahmadnassri.com/" - }, - "bugs": { - "url": "https://github.com/ahmadnassri/mkdirp-promise/issues" - }, - "bundleDependencies": false, - "dependencies": { - "mkdirp": "*" - }, - "deprecated": false, - "description": "Promise version of mkdirp", - "devDependencies": { - "echint": "^2.1.0", - "rimraf": "^2.5.4", - "snazzy": "^6.0.0", - "tap": "^9.0.2" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/ahmadnassri/mkdirp-promise", - "keywords": [ - "mkdirp", - "promise" - ], - "license": "ISC", - "main": "lib/index.js", - "name": "mkdirp-promise", - "repository": { - "type": "git", - "url": "git+https://github.com/ahmadnassri/mkdirp-promise.git" - }, - "scripts": { - "coverage": "tap test --reporter silent --coverage", - "pretest": "snazzy && echint", - "test": "tap test" - }, - "version": "5.0.1" -} diff --git a/truebit-implementation/node_modules/mkdirp/.travis.yml b/truebit-implementation/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 74c57bf1..00000000 --- a/truebit-implementation/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.12" - - "iojs" -before_install: - - npm install -g npm@~1.4.6 diff --git a/truebit-implementation/node_modules/mkdirp/LICENSE b/truebit-implementation/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb..00000000 --- a/truebit-implementation/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/mkdirp/bin/cmd.js b/truebit-implementation/node_modules/mkdirp/bin/cmd.js deleted file mode 100755 index d95de15a..00000000 --- a/truebit-implementation/node_modules/mkdirp/bin/cmd.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env node - -var mkdirp = require('../'); -var minimist = require('minimist'); -var fs = require('fs'); - -var argv = minimist(process.argv.slice(2), { - alias: { m: 'mode', h: 'help' }, - string: [ 'mode' ] -}); -if (argv.help) { - fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); - return; -} - -var paths = argv._.slice(); -var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; - -(function next () { - if (paths.length === 0) return; - var p = paths.shift(); - - if (mode === undefined) mkdirp(p, cb) - else mkdirp(p, mode, cb) - - function cb (err) { - if (err) { - console.error(err.message); - process.exit(1); - } - else next(); - } -})(); diff --git a/truebit-implementation/node_modules/mkdirp/bin/usage.txt b/truebit-implementation/node_modules/mkdirp/bin/usage.txt deleted file mode 100644 index f952aa2c..00000000 --- a/truebit-implementation/node_modules/mkdirp/bin/usage.txt +++ /dev/null @@ -1,12 +0,0 @@ -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - diff --git a/truebit-implementation/node_modules/mkdirp/examples/pow.js b/truebit-implementation/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212..00000000 --- a/truebit-implementation/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/truebit-implementation/node_modules/mkdirp/index.js b/truebit-implementation/node_modules/mkdirp/index.js deleted file mode 100644 index 6ce241b5..00000000 --- a/truebit-implementation/node_modules/mkdirp/index.js +++ /dev/null @@ -1,98 +0,0 @@ -var path = require('path'); -var fs = require('fs'); -var _0777 = parseInt('0777', 8); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, opts, f, made) { - if (typeof opts === 'function') { - f = opts; - opts = {}; - } - else if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 & (~process.umask()); - } - if (!made) made = null; - - var cb = f || function () {}; - p = path.resolve(p); - - xfs.mkdir(p, mode, function (er) { - if (!er) { - made = made || p; - return cb(null, made); - } - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), opts, function (er, made) { - if (er) cb(er, made); - else mkdirP(p, opts, cb, made); - }); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - xfs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) cb(er, made) - else cb(null, made); - }); - break; - } - }); -} - -mkdirP.sync = function sync (p, opts, made) { - if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 & (~process.umask()); - } - if (!made) made = null; - - p = path.resolve(p); - - try { - xfs.mkdirSync(p, mode); - made = made || p; - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - made = sync(path.dirname(p), opts, made); - sync(p, opts, made); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - var stat; - try { - stat = xfs.statSync(p); - } - catch (err1) { - throw err0; - } - if (!stat.isDirectory()) throw err0; - break; - } - } - - return made; -}; diff --git a/truebit-implementation/node_modules/mkdirp/package.json b/truebit-implementation/node_modules/mkdirp/package.json deleted file mode 100644 index 7d3ebcb6..00000000 --- a/truebit-implementation/node_modules/mkdirp/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "mkdirp@*", - "_id": "mkdirp@0.5.1", - "_inBundle": false, - "_integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "_location": "/mkdirp", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mkdirp@*", - "name": "mkdirp", - "escapedName": "mkdirp", - "rawSpec": "*", - "saveSpec": null, - "fetchSpec": "*" - }, - "_requiredBy": [ - "/fstream", - "/mkdirp-promise" - ], - "_resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "_shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", - "_spec": "mkdirp@*", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/mkdirp-promise", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "bugs": { - "url": "https://github.com/substack/node-mkdirp/issues" - }, - "bundleDependencies": false, - "dependencies": { - "minimist": "0.0.8" - }, - "deprecated": false, - "description": "Recursively mkdir, like `mkdir -p`", - "devDependencies": { - "mock-fs": "2 >=2.7.0", - "tap": "1" - }, - "homepage": "https://github.com/substack/node-mkdirp#readme", - "keywords": [ - "mkdir", - "directory" - ], - "license": "MIT", - "main": "index.js", - "name": "mkdirp", - "repository": { - "type": "git", - "url": "git+https://github.com/substack/node-mkdirp.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "0.5.1" -} diff --git a/truebit-implementation/node_modules/mkdirp/readme.markdown b/truebit-implementation/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 3cc13153..00000000 --- a/truebit-implementation/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,100 +0,0 @@ -# mkdirp - -Like `mkdir -p`, but in node.js! - -[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) - -# example - -## pow.js - -```js -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); -``` - -Output - -``` -pow! -``` - -And now /tmp/foo/bar/baz exists, huzzah! - -# methods - -```js -var mkdirp = require('mkdirp'); -``` - -## mkdirp(dir, opts, cb) - -Create a new directory and any necessary subdirectories at `dir` with octal -permission string `opts.mode`. If `opts` is a non-object, it will be treated as -the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -`cb(err, made)` fires with the error or the first directory `made` -that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and -`opts.fs.stat(path, cb)`. - -## mkdirp.sync(dir, opts) - -Synchronously create a new directory and any necessary subdirectories at `dir` -with octal permission string `opts.mode`. If `opts` is a non-object, it will be -treated as the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -Returns the first directory that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and -`opts.fs.statSync(path)`. - -# usage - -This package also ships with a `mkdirp` command. - -``` -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - -``` - -# install - -With [npm](http://npmjs.org) do: - -``` -npm install mkdirp -``` - -to get the library, or - -``` -npm install -g mkdirp -``` - -to get the command. - -# license - -MIT diff --git a/truebit-implementation/node_modules/mkdirp/test/chmod.js b/truebit-implementation/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 6a404b93..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,41 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); -var _0744 = parseInt('0744', 8); - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -test('chmod-pre', function (t) { - var mode = _0744 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & _0777, mode, 'should be 0744'); - t.end(); - }); - }); -}); - -test('chmod', function (t) { - var mode = _0755 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.end(); - }); - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/clobber.js b/truebit-implementation/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 2433b9ad..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,38 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; -var _0755 = parseInt('0755', 8); - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -// a file in the way -var itw = ps.slice(0, 3).join('/'); - - -test('clobber-pre', function (t) { - console.error("about to write to "+itw) - fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); - - fs.stat(itw, function (er, stat) { - t.ifError(er) - t.ok(stat && stat.isFile(), 'should be file') - t.end() - }) -}) - -test('clobber', function (t) { - t.plan(2); - mkdirp(file, _0755, function (err) { - t.ok(err); - t.equal(err.code, 'ENOTDIR'); - t.end(); - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/mkdirp.js b/truebit-implementation/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index eaa8921c..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('woo', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/opts_fs.js b/truebit-implementation/node_modules/mkdirp/test/opts_fs.js deleted file mode 100644 index 97186b62..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/opts_fs.js +++ /dev/null @@ -1,29 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var test = require('tap').test; -var mockfs = require('mock-fs'); -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('opts.fs', function (t) { - t.plan(5); - - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/beep/boop/' + [x,y,z].join('/'); - var xfs = mockfs.fs(); - - mkdirp(file, { fs: xfs, mode: _0755 }, function (err) { - t.ifError(err); - xfs.exists(file, function (ex) { - t.ok(ex, 'created file'); - xfs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/opts_fs_sync.js b/truebit-implementation/node_modules/mkdirp/test/opts_fs_sync.js deleted file mode 100644 index 6c370aa6..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/opts_fs_sync.js +++ /dev/null @@ -1,27 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var test = require('tap').test; -var mockfs = require('mock-fs'); -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('opts.fs sync', function (t) { - t.plan(4); - - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/beep/boop/' + [x,y,z].join('/'); - var xfs = mockfs.fs(); - - mkdirp.sync(file, { fs: xfs, mode: _0755 }); - xfs.exists(file, function (ex) { - t.ok(ex, 'created file'); - xfs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/perm.js b/truebit-implementation/node_modules/mkdirp/test/perm.js deleted file mode 100644 index fbce44b8..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('async perm', function (t) { - t.plan(5); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); - - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); - -test('async root perm', function (t) { - mkdirp('/tmp', _0755, function (err) { - if (err) t.fail(err); - t.end(); - }); - t.end(); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/perm_sync.js b/truebit-implementation/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index 398229fe..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,36 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('sync perm', function (t) { - t.plan(4); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; - - mkdirp.sync(file, _0755); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); - -test('sync root perm', function (t) { - t.plan(3); - - var file = '/tmp'; - mkdirp.sync(file, _0755); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/race.js b/truebit-implementation/node_modules/mkdirp/test/race.js deleted file mode 100644 index b0b9e183..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,37 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('race', function (t) { - t.plan(10); - var ps = [ '', 'tmp' ]; - - for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); - } - var file = ps.join('/'); - - var res = 2; - mk(file); - - mk(file); - - function mk (file, cb) { - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }) - }); - } -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/rel.js b/truebit-implementation/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 4ddb3427..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('rel', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var cwd = process.cwd(); - process.chdir('/tmp'); - - var file = [x,y,z].join('/'); - - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - process.chdir(cwd); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/return.js b/truebit-implementation/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e56..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, '/tmp/' + x); - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, null); - }); - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/return_sync.js b/truebit-implementation/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d35..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - // Note that this will throw on failure, which will fail the test. - var made = mkdirp.sync(file); - t.equal(made, '/tmp/' + x); - - // making the same file again should have no effect. - made = mkdirp.sync(file); - t.equal(made, null); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/root.js b/truebit-implementation/node_modules/mkdirp/test/root.js deleted file mode 100644 index 9e7d079d..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,19 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; -var _0755 = parseInt('0755', 8); - -test('root', function (t) { - // '/' on unix, 'c:/' on windows. - var file = path.resolve('/'); - - mkdirp(file, _0755, function (err) { - if (err) throw err - fs.stat(file, function (er, stat) { - if (er) throw er - t.ok(stat.isDirectory(), 'target is a directory'); - t.end(); - }) - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/sync.js b/truebit-implementation/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 8c8dc938..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('sync', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file, _0755); - } catch (err) { - t.fail(err); - return t.end(); - } - - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/umask.js b/truebit-implementation/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 2033c63a..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('implicit mode from umask', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0777 & (~process.umask())); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }) - }); -}); diff --git a/truebit-implementation/node_modules/mkdirp/test/umask_sync.js b/truebit-implementation/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 11a76147..00000000 --- a/truebit-implementation/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('umask sync modes', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file); - } catch (err) { - t.fail(err); - return t.end(); - } - - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, (_0777 & (~process.umask()))); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/mock-fs/changelog.md b/truebit-implementation/node_modules/mock-fs/changelog.md deleted file mode 100644 index ad581e7a..00000000 --- a/truebit-implementation/node_modules/mock-fs/changelog.md +++ /dev/null @@ -1,236 +0,0 @@ -# Change Log - -## 4.7.0 - - * Fix for readdir on Node 10.10 (thanks @maxwellgerber [#251][#251]) - * Fix for reading and writing using Uint8Array (thanks @maxwellgerber [#249][#249]) - * Document how to properly restore the fs with Jest snapshot testing (thanks @tricoder42 [#247][#247]) - * More informative error when opening a directory (thanks @maxwellgerber [#242][#242]) - -## 4.6.0 - -Note that the mocked fs.createReadStream and fs.createWriteStream are not working properly with Node 10.5+. - - * Implement binding.copyFile ([#243][#243]) - * Stat fixes for Node 10.5 (thanks @tomhughes, see [#241][#241]) - -## 4.5.0 - - * Updates for Node 10 compatibility ([#237][#237]) - * Throw ENOENT in readlink when item is missing (thanks @deployable, see [#232][#232]) - * Add path to errors when it exists (thanks @deployable, see [#230][#230]) - -## 4.4.2 - - * Throw if item content is invalid in config (thanks @mutantcornholio, see [#221][#221]) - * Use const in readme (thanks @denar90, see [#222][#222]) - -## 4.4.1 - - * Document that tests are run on Node 8.x as well. - -## 4.4.0 - - * Fix stat issue with Node 8 (thanks @AGrzes, see [#209][#209]) - * Make code prettier (see [#210][#210]) - -## 4.3.0 - - * Add support for fs.mkdtemp() and fs.mkdtempSync (see [#207][#207]) - -## 4.2.0 - - * Update fs.stat(), fs.lstat(), and fs.fstat() for Node 7.7+ (thanks @not-an-aardvark, see [#198][#198]) - -## 4.1.0 - - * Correctly follow a symlink chain in `binding.open()` (thanks @vlindhol, see [#195][#195]) - -## 4.0.0 - -In earlier versions of `mock-fs`, a monkey-patched version of the `fs` module was used to provide an in-memory filesystem. With each major release of Node, the `mock-fs` package needed to include a modified copy of the `fs` module. With the `mock-fs@4` release, this package no longer includes a modified copy of the `fs` module. Instead, this package overrides `process.binding('fs')`. While this is not part of Node's stable API, it has proven to be a more stable interface than the `fs` module itself (based on experience implementing it with Node 0.8 through 7.0). - -Upgrading from 3.x to 4.0 should be straightforward for most applications. There are several breaking changes that may be restored in future releases: - - * The `mock.fs()` function has been removed. - * The object created by `fs.stat()` and friends is no longer an instance of `fs.Stats` (though it behaves as one). - * Lazy `require()` calls do not work consistently. - -Detailed changes: - - * Only override `process.binding('fs')` ([#182][#182]) - * Expose the root of the mocked filesystem (thanks @ciaranj, see [#194][#194]) - -## 3.12.1 - - * Revert the require cache clearing behavior ([#181][#181]). - -## 3.12.0 - - * Support for Node 7.x (thanks @goliney, see [#174][#174]). - * Remove calls to `printDeprecation` ([#175][#175]). - * Break early when checking version (thanks @isiahmeadows, see [#157][#157]). - * Add a note about restoring `fs` (thanks @matheuss, see [#147][#147]). - * Clear the require cache before overriding fs functions ([#141][#141]) - -## 3.11.0 - - * Make `require()` calls use the real filesystem ([#139][#139]). - * Reduce the manual `fs` module patching ([#140][#140]). - -## 3.10.0 - - * Fixes for Node 6.3 ([#138][#138]). - * Fix permissions issues on directories (thanks @as3richa, see [#105][#105]). - -## 3.9.0 - - * Support for Node 6.x (thanks @tmcw, see [#107][#107]). - -## 3.8.0 - - * Implement `binding.writeBuffers()` (see [#94][#94]). - -## 3.7.0 - - * Add support for `fs.access()` and `fs.accessSync()` (thanks @shyiko, see [#78][#78] and [#80][#80]). - -## 3.6.0 - - * Add `createCwd` and `createTmp` options to control the creation of `process.cwd()` and `os.tmpdir()` directories in the mocked filesystem (see [#72][#72]). - * Update Travis and AppVeyor configurations (see [#73][#73]) - * Remove unused dev dependency (see [#75][#75]) - -## 3.5.0 - - * Support for Node 5.x (thanks @tmcw, see [#69][#69]). - -## 3.4.0 - - * Support for Node 4.x (thanks @AlexMeah, see [#65][#65]). - -## 3.3.0 - - * Traverse symlinks recursively (thanks @caitp, see [#57][#57]). - * Upgrade to rewire@2.3.4 (thanks @mbarlock, see [#60][#60]). - -## 3.2.0 - - * Support for io.js 3.0 (thanks @JustBlackBird, see [#61][#61]). - -## 3.1.0 - - * Follow symlinks in `readdir()` and `readdirSync()` (thanks @caitp, see [#56][#56]). - -## 3.0.0 - - * Override `process.cwd()` and `process.chdir()` to work with mocked filesystem (thanks @timkendrick, see [#41][#41]). - * Add note about known incompatibilities (thanks @psalaets, see [#45][#45]). - -## 2.7.0 - - * Support for io.js 2.0 (thanks @jwilsson, see [#38][#38]). - -## 2.6.0 - - * Add `birthtime` to `Stats` objects (thanks @meandmycode, see [#33][#33]). - -## 2.5.0 - - * Support for io.js 1.1 (thanks @andrewblond, see [#21][#21]). - * Testing on Windows with AppVeyor (thanks @andrewblond, see [#22][#22]). - -## 2.4.0 - - * Support for Node 0.12 (thanks @mlegenhausen, see [#18][#18]). - -## 2.3.1 - - * Preserve arity of callbacks (see [#11][#11]). - -## 2.3.0 - - * Fixes for Node 0.11.13 (see [#9][#9]). - -## 2.2.0 - - * Respect file mode on POSIX-compliant systems (see [#7][#7]). - * Add benchmarks comparing mock-fs and fs modules (see [#6][#6]). - -## 2.1.2 - - * Added more complete license text. - * Test on Node 0.9 and 0.11 in addition to 0.8 and 0.10. - -## 2.1.1 - - * Added this changelog. - * Removed unused gruntfile.js. - -## 2.1.0 - - * Directory mtime is now updated when items are added, removed, or modified ([#2][#2]). - * Fixed several issues on Windows (see [#3][#3]). One issue remains on Windows with Node 0.8 (see [#4][#4]). - * Swapped out Grunt with a single script to run tasks (see [#5][#5]). - -## 2.0.0 - - * Simplified API (see [#1][#1]). - - -[#1]: https://github.com/tschaub/mock-fs/pull/1 -[#2]: https://github.com/tschaub/mock-fs/pull/2 -[#3]: https://github.com/tschaub/mock-fs/pull/3 -[#4]: https://github.com/tschaub/mock-fs/issues/4 -[#5]: https://github.com/tschaub/mock-fs/pull/5 -[#6]: https://github.com/tschaub/mock-fs/pull/6 -[#7]: https://github.com/tschaub/mock-fs/pull/7 -[#9]: https://github.com/tschaub/mock-fs/issues/9 -[#11]: https://github.com/tschaub/mock-fs/pull/11 -[#18]: https://github.com/tschaub/mock-fs/pull/18 -[#21]: https://github.com/tschaub/mock-fs/pull/21 -[#22]: https://github.com/tschaub/mock-fs/pull/22 -[#33]: https://github.com/tschaub/mock-fs/pull/33 -[#38]: https://github.com/tschaub/mock-fs/pull/38 -[#41]: https://github.com/tschaub/mock-fs/pull/41 -[#45]: https://github.com/tschaub/mock-fs/pull/45 -[#56]: https://github.com/tschaub/mock-fs/pull/56 -[#61]: https://github.com/tschaub/mock-fs/pull/61 -[#60]: https://github.com/tschaub/mock-fs/pull/60 -[#57]: https://github.com/tschaub/mock-fs/pull/57 -[#65]: https://github.com/tschaub/mock-fs/pull/65 -[#69]: https://github.com/tschaub/mock-fs/pull/69 -[#72]: https://github.com/tschaub/mock-fs/pull/72 -[#73]: https://github.com/tschaub/mock-fs/pull/73 -[#75]: https://github.com/tschaub/mock-fs/pull/75 -[#78]: https://github.com/tschaub/mock-fs/pull/78 -[#80]: https://github.com/tschaub/mock-fs/pull/80 -[#94]: https://github.com/tschaub/mock-fs/pull/94 -[#107]: https://github.com/tschaub/mock-fs/pull/107 -[#105]: https://github.com/tschaub/mock-fs/pull/105 -[#138]: https://github.com/tschaub/mock-fs/pull/138 -[#139]: https://github.com/tschaub/mock-fs/pull/139 -[#140]: https://github.com/tschaub/mock-fs/pull/140 -[#141]: https://github.com/tschaub/mock-fs/pull/141 -[#147]: https://github.com/tschaub/mock-fs/pull/147 -[#157]: https://github.com/tschaub/mock-fs/pull/157 -[#174]: https://github.com/tschaub/mock-fs/pull/174 -[#175]: https://github.com/tschaub/mock-fs/pull/175 -[#181]: https://github.com/tschaub/mock-fs/pull/181 -[#182]: https://github.com/tschaub/mock-fs/pull/182 -[#194]: https://github.com/tschaub/mock-fs/pull/194 -[#195]: https://github.com/tschaub/mock-fs/pull/195 -[#198]: https://github.com/tschaub/mock-fs/pull/198 -[#207]: https://github.com/tschaub/mock-fs/pull/207 -[#209]: https://github.com/tschaub/mock-fs/pull/209 -[#210]: https://github.com/tschaub/mock-fs/pull/210 -[#221]: https://github.com/tschaub/mock-fs/pull/221 -[#222]: https://github.com/tschaub/mock-fs/pull/222 -[#230]: https://github.com/tschaub/mock-fs/pull/230 -[#232]: https://github.com/tschaub/mock-fs/pull/232 -[#237]: https://github.com/tschaub/mock-fs/pull/237 -[#243]: https://github.com/tschaub/mock-fs/pull/243 -[#242]: https://github.com/tschaub/mock-fs/pull/242 -[#247]: https://github.com/tschaub/mock-fs/pull/247 -[#249]: https://github.com/tschaub/mock-fs/pull/249 -[#251]: https://github.com/tschaub/mock-fs/pull/251 diff --git a/truebit-implementation/node_modules/mock-fs/lib/binding.js b/truebit-implementation/node_modules/mock-fs/lib/binding.js deleted file mode 100644 index a6d2e4f7..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/binding.js +++ /dev/null @@ -1,1235 +0,0 @@ -'use strict'; - -var path = require('path'); - -var File = require('./file'); -var FileDescriptor = require('./descriptor'); -var Directory = require('./directory'); -var SymbolicLink = require('./symlink'); -var FSError = require('./error'); -var constants = require('constants'); -var getPathParts = require('./filesystem').getPathParts; -var bufferFrom = require('./buffer').from; -var bufferAlloc = require('./buffer').alloc; - -/** Workaround for optimizations in node 8+ */ -var fsBinding = process.binding('fs'); -var statValues; -if (fsBinding.statValues) { - statValues = fsBinding.statValues; // node 10 -} else if (fsBinding.getStatValues) { - statValues = fsBinding.getStatValues(); // node 8 -} else { - statValues = []; -} - -/** Introduction of BigUint64Array in 10.5 */ -var BigUint64Array; -if (global.BigUint64Array) { - BigUint64Array = global.BigUint64Array; -} else { - BigUint64Array = function() {}; -} - -var MAX_LINKS = 50; - -/** - * Call the provided function and either return the result or call the callback - * with it (depending on if a callback is provided). - * @param {function()} callback Optional callback. - * @param {Object} thisArg This argument for the following function. - * @param {function()} func Function to call. - * @return {*} Return (if callback is not provided). - */ -function maybeCallback(callback, thisArg, func) { - if (callback && typeof callback === 'function') { - var err = null; - var val; - try { - val = func.call(thisArg); - } catch (e) { - err = e; - } - process.nextTick(function() { - if (val === undefined) { - callback(err); - } else { - callback(err, val); - } - }); - } else { - return func.call(thisArg); - } -} - -/** - * Handle FSReqWrap oncomplete. - * @param {Function} callback The callback. - * @return {Function} The normalized callback. - */ -function normalizeCallback(callback) { - if (callback && typeof callback.oncomplete === 'function') { - // Unpack callback from FSReqWrap - callback = callback.oncomplete.bind(callback); - } - return callback; -} - -/** - * Handle stat optimizations introduced in Node 8. - * See https://github.com/nodejs/node/pull/11665. - * @param {Function} callback The callback. - * @return {Function} The wrapped callback. - */ -function wrapStatsCallback(callback) { - if (callback && typeof callback.oncomplete === 'function') { - // Unpack callback from FSReqWrap - callback = callback.oncomplete.bind(callback); - } - if (typeof callback === 'function') { - return function(err, stats) { - if (stats) { - fillStatsArray(stats, statValues); - } - callback.apply(this, arguments); - }; - } else { - return callback; - } -} - -function notImplemented() { - throw new Error('Method not implemented'); -} - -/** - * Create a new stats object. - * @param {Object} config Stats properties. - * @constructor - */ -function Stats(config) { - for (var key in config) { - this[key] = config[key]; - } - // node 10 expects an array internally - // see https://github.com/nodejs/node/pull/19714 - fillStatsArray(config, this); -} - -/** - * Check if mode indicates property. - * @param {number} property Property to check. - * @return {boolean} Property matches mode. - */ -Stats.prototype._checkModeProperty = function(property) { - return (this.mode & constants.S_IFMT) === property; -}; - -/** - * @return {Boolean} Is a directory. - */ -Stats.prototype.isDirectory = function() { - return this._checkModeProperty(constants.S_IFDIR); -}; - -/** - * @return {Boolean} Is a regular file. - */ -Stats.prototype.isFile = function() { - return this._checkModeProperty(constants.S_IFREG); -}; - -/** - * @return {Boolean} Is a block device. - */ -Stats.prototype.isBlockDevice = function() { - return this._checkModeProperty(constants.S_IFBLK); -}; - -/** - * @return {Boolean} Is a character device. - */ -Stats.prototype.isCharacterDevice = function() { - return this._checkModeProperty(constants.S_IFCHR); -}; - -/** - * @return {Boolean} Is a symbolic link. - */ -Stats.prototype.isSymbolicLink = function() { - return this._checkModeProperty(constants.S_IFLNK); -}; - -/** - * @return {Boolean} Is a named pipe. - */ -Stats.prototype.isFIFO = function() { - return this._checkModeProperty(constants.S_IFIFO); -}; - -/** - * @return {Boolean} Is a socket. - */ -Stats.prototype.isSocket = function() { - return this._checkModeProperty(constants.S_IFSOCK); -}; - -/** - * Create a new binding with the given file system. - * @param {FileSystem} system Mock file system. - * @constructor - */ -function Binding(system) { - /** - * Mock file system. - * @type {FileSystem} - */ - this._system = system; - - /** - * Stats constructor. - * @type {function} - */ - this.Stats = Stats; - - /** - * Lookup of open files. - * @type {Object.} - */ - this._openFiles = {}; - - /** - * Counter for file descriptors. - * @type {number} - */ - this._counter = 0; -} - -/** - * Get the file system underlying this binding. - * @return {FileSystem} The underlying file system. - */ -Binding.prototype.getSystem = function() { - return this._system; -}; - -/** - * Reset the file system underlying this binding. - * @param {FileSystem} system The new file system. - */ -Binding.prototype.setSystem = function(system) { - this._system = system; -}; - -/** - * Get a file descriptor. - * @param {number} fd File descriptor identifier. - * @return {FileDescriptor} File descriptor. - */ -Binding.prototype._getDescriptorById = function(fd) { - if (!this._openFiles.hasOwnProperty(fd)) { - throw new FSError('EBADF'); - } - return this._openFiles[fd]; -}; - -/** - * Keep track of a file descriptor as open. - * @param {FileDescriptor} descriptor The file descriptor. - * @return {number} Identifier for file descriptor. - */ -Binding.prototype._trackDescriptor = function(descriptor) { - var fd = ++this._counter; - this._openFiles[fd] = descriptor; - return fd; -}; - -/** - * Stop tracking a file descriptor as open. - * @param {number} fd Identifier for file descriptor. - */ -Binding.prototype._untrackDescriptorById = function(fd) { - if (!this._openFiles.hasOwnProperty(fd)) { - throw new FSError('EBADF'); - } - delete this._openFiles[fd]; -}; - -/** - * Resolve the canonicalized absolute pathname. - * @param {string|Buffer} filepath The file path. - * @param {string} encoding The encoding for the return. - * @return {string|Buffer} The real path. - */ -Binding.prototype.realpath = function(filepath, encoding, callback) { - return maybeCallback(normalizeCallback(callback), this, function() { - var realPath; - if (Buffer.isBuffer(filepath)) { - filepath = filepath.toString(); - } - var resolved = path.resolve(filepath); - var parts = getPathParts(resolved); - var item = this._system.getRoot(); - var itemPath = '/'; - var name, i, ii; - for (i = 0, ii = parts.length; i < ii; ++i) { - name = parts[i]; - while (item instanceof SymbolicLink) { - itemPath = path.resolve(path.dirname(itemPath), item.getPath()); - item = this._system.getItem(itemPath); - } - if (!item) { - throw new FSError('ENOENT', filepath); - } - if (item instanceof Directory) { - itemPath = path.resolve(itemPath, name); - item = item.getItem(name); - } else { - throw new FSError('ENOTDIR', filepath); - } - } - if (item) { - while (item instanceof SymbolicLink) { - itemPath = path.resolve(path.dirname(itemPath), item.getPath()); - item = this._system.getItem(itemPath); - } - realPath = itemPath; - } else { - throw new FSError('ENOENT', filepath); - } - - if (encoding === 'buffer') { - realPath = bufferFrom(realPath); - } - return realPath; - }); -}; - -/** - * Fill a Float64Array with stat information - * This is based on the internal FillStatsArray function in Node. - * https://github.com/nodejs/node/blob/4e05952a8a75af6df625415db612d3a9a1322682/src/node_file.cc#L533 - * @param {Object} stats An object with file stats - * @param {Float64Array} statValues A Float64Array where stat values should be inserted - * @returns {void} - */ -function fillStatsArray(stats, statValues) { - statValues[0] = stats.dev; - statValues[1] = stats.mode; - statValues[2] = stats.nlink; - statValues[3] = stats.uid; - statValues[4] = stats.gid; - statValues[5] = stats.rdev; - statValues[6] = stats.blksize; - statValues[7] = stats.ino; - statValues[8] = stats.size; - statValues[9] = stats.blocks; - statValues[10] = +stats.atime; - statValues[11] = +stats.mtime; - statValues[12] = +stats.ctime; - statValues[13] = +stats.birthtime; -} - -/** - * Stat an item. - * @param {string} filepath Path. - * @param {function(Error, Stats)|Float64Array|BigUint64Array} callback Callback (optional). In Node 7.7.0+ this will be a Float64Array - * that should be filled with stat values. - * @return {Stats|undefined} Stats or undefined (if sync). - */ -Binding.prototype.stat = function(filepath, options, callback) { - if (arguments.length < 3) { - callback = options; - options = {}; - } - return maybeCallback(wrapStatsCallback(callback), this, function() { - var item = this._system.getItem(filepath); - if (item instanceof SymbolicLink) { - item = this._system.getItem( - path.resolve(path.dirname(filepath), item.getPath()) - ); - } - if (!item) { - throw new FSError('ENOENT', filepath); - } - var stats = item.getStats(); - - // In Node 7.7.0+, binding.stat accepts a Float64Array as the second argument, - // which should be filled with stat values. - // In prior versions of Node, binding.stat simply returns a Stats instance. - if ( - callback instanceof Float64Array || - callback instanceof BigUint64Array - ) { - fillStatsArray(stats, callback); - } else { - fillStatsArray(stats, statValues); - return new Stats(stats); - } - }); -}; - -/** - * Stat an item. - * @param {number} fd File descriptor. - * @param {function(Error, Stats)|Float64Array|BigUint64Array} callback Callback (optional). In Node 7.7.0+ this will be a Float64Array - * that should be filled with stat values. - * @return {Stats|undefined} Stats or undefined (if sync). - */ -Binding.prototype.fstat = function(fd, options, callback) { - if (arguments.length < 3) { - callback = options; - options = {}; - } - return maybeCallback(wrapStatsCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - var item = descriptor.getItem(); - var stats = item.getStats(); - - // In Node 7.7.0+, binding.stat accepts a Float64Array as the second argument, - // which should be filled with stat values. - // In prior versions of Node, binding.stat simply returns a Stats instance. - if ( - callback instanceof Float64Array || - callback instanceof BigUint64Array - ) { - fillStatsArray(stats, callback); - } else { - fillStatsArray(stats, statValues); - return new Stats(stats); - } - }); -}; - -/** - * Close a file descriptor. - * @param {number} fd File descriptor. - * @param {function(Error)} callback Callback (optional). - */ -Binding.prototype.close = function(fd, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - this._untrackDescriptorById(fd); - }); -}; - -/** - * Open and possibly create a file. - * @param {string} pathname File path. - * @param {number} flags Flags. - * @param {number} mode Mode. - * @param {function(Error, string)} callback Callback (optional). - * @return {string} File descriptor (if sync). - */ -Binding.prototype.open = function(pathname, flags, mode, callback) { - return maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = new FileDescriptor(flags); - var item = this._system.getItem(pathname); - while (item instanceof SymbolicLink) { - item = this._system.getItem( - path.resolve(path.dirname(pathname), item.getPath()) - ); - } - if (descriptor.isExclusive() && item) { - throw new FSError('EEXIST', pathname); - } - if (descriptor.isCreate() && !item) { - var parent = this._system.getItem(path.dirname(pathname)); - if (!parent) { - throw new FSError('ENOENT', pathname); - } - if (!(parent instanceof Directory)) { - throw new FSError('ENOTDIR', pathname); - } - item = new File(); - if (mode) { - item.setMode(mode); - } - parent.addItem(path.basename(pathname), item); - } - if (descriptor.isRead()) { - if (!item) { - throw new FSError('ENOENT', pathname); - } - if (!item.canRead()) { - throw new FSError('EACCES', pathname); - } - } - if (descriptor.isWrite() && !item.canWrite()) { - throw new FSError('EACCES', pathname); - } - if ( - item instanceof Directory && - (descriptor.isTruncate() || descriptor.isAppend()) - ) { - throw new FSError('EISDIR', pathname); - } - if (descriptor.isTruncate()) { - if (!(item instanceof File)) { - throw new FSError('EBADF'); - } - item.setContent(''); - } - if (descriptor.isTruncate() || descriptor.isAppend()) { - descriptor.setPosition(item.getContent().length); - } - descriptor.setItem(item); - return this._trackDescriptor(descriptor); - }); -}; - -/** - * Read from a file descriptor. - * @param {string} fd File descriptor. - * @param {Buffer} buffer Buffer that the contents will be written to. - * @param {number} offset Offset in the buffer to start writing to. - * @param {number} length Number of bytes to read. - * @param {?number} position Where to begin reading in the file. If null, - * data will be read from the current file position. - * @param {function(Error, number, Buffer)} callback Callback (optional) called - * with any error, number of bytes read, and the buffer. - * @return {number} Number of bytes read (if sync). - */ -Binding.prototype.read = function( - fd, - buffer, - offset, - length, - position, - callback -) { - return maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - if (!descriptor.isRead()) { - throw new FSError('EBADF'); - } - var file = descriptor.getItem(); - if (!(file instanceof File)) { - // deleted or not a regular file - throw new FSError('EBADF'); - } - if (typeof position !== 'number' || position < 0) { - position = descriptor.getPosition(); - } - var content = file.getContent(); - var start = Math.min(position, content.length); - var end = Math.min(position + length, content.length); - var read = start < end ? content.copy(buffer, offset, start, end) : 0; - descriptor.setPosition(position + read); - return read; - }); -}; - -/** - * Write to a file descriptor given a buffer. - * @param {string} src Source file. - * @param {string} dest Destination file. - * @param {number} flags Modifiers for copy operation. - * @param {function(Error)} callback Callback (optional) called - * with any error. - */ -Binding.prototype.copyFile = function(src, dest, flags, callback) { - return maybeCallback(normalizeCallback(callback), this, function() { - var srcFd = this.open(src, constants.O_RDONLY); - - try { - var srcDescriptor = this._getDescriptorById(srcFd); - if (!srcDescriptor.isRead()) { - throw new FSError('EBADF'); - } - var srcFile = srcDescriptor.getItem(); - if (!(srcFile instanceof File)) { - throw new FSError('EBADF'); - } - var srcContent = srcFile.getContent(); - - var destFlags = - constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC; - - if ((flags & constants.COPYFILE_EXCL) === constants.COPYFILE_EXCL) { - destFlags |= constants.O_EXCL; - } - - var destFd = this.open(dest, destFlags); - - try { - this.write(destFd, srcContent, 0, srcContent.length, 0); - } finally { - this.close(destFd); - } - } finally { - this.close(srcFd); - } - }); -}; - -/** - * Write to a file descriptor given a buffer. - * @param {string} fd File descriptor. - * @param {Array} buffers Array of buffers with contents to write. - * @param {?number} position Where to begin writing in the file. If null, - * data will be written to the current file position. - * @param {function(Error, number, Buffer)} callback Callback (optional) called - * with any error, number of bytes written, and the buffer. - * @return {number} Number of bytes written (if sync). - */ -Binding.prototype.writeBuffers = function(fd, buffers, position, callback) { - return maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - if (!descriptor.isWrite()) { - throw new FSError('EBADF'); - } - var file = descriptor.getItem(); - if (!(file instanceof File)) { - // not a regular file - throw new FSError('EBADF'); - } - if (typeof position !== 'number' || position < 0) { - position = descriptor.getPosition(); - } - var content = file.getContent(); - var newContent = Buffer.concat(buffers); - var newLength = position + newContent.length; - if (content.length < newLength) { - var tempContent = bufferAlloc(newLength); - content.copy(tempContent); - content = tempContent; - } - var written = newContent.copy(content, position); - file.setContent(content); - descriptor.setPosition(newLength); - return written; - }); -}; - -/** - * Write to a file descriptor given a buffer. - * @param {string} fd File descriptor. - * @param {Buffer} buffer Buffer with contents to write. - * @param {number} offset Offset in the buffer to start writing from. - * @param {number} length Number of bytes to write. - * @param {?number} position Where to begin writing in the file. If null, - * data will be written to the current file position. - * @param {function(Error, number, Buffer)} callback Callback (optional) called - * with any error, number of bytes written, and the buffer. - * @return {number} Number of bytes written (if sync). - */ -Binding.prototype.writeBuffer = function( - fd, - buffer, - offset, - length, - position, - callback -) { - return maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - if (!descriptor.isWrite()) { - throw new FSError('EBADF'); - } - var file = descriptor.getItem(); - if (!(file instanceof File)) { - // not a regular file - throw new FSError('EBADF'); - } - if (typeof position !== 'number' || position < 0) { - position = descriptor.getPosition(); - } - var content = file.getContent(); - var newLength = position + length; - if (content.length < newLength) { - var newContent = bufferAlloc(newLength); - content.copy(newContent); - content = newContent; - } - var sourceEnd = Math.min(offset + length, buffer.length); - var written = bufferFrom(buffer).copy(content, position, offset, sourceEnd); - file.setContent(content); - descriptor.setPosition(newLength); - return written; - }); -}; - -/** - * Alias for writeBuffer (used in Node <= 0.10). - * @param {string} fd File descriptor. - * @param {Buffer} buffer Buffer with contents to write. - * @param {number} offset Offset in the buffer to start writing from. - * @param {number} length Number of bytes to write. - * @param {?number} position Where to begin writing in the file. If null, - * data will be written to the current file position. - * @param {function(Error, number, Buffer)} callback Callback (optional) called - * with any error, number of bytes written, and the buffer. - * @return {number} Number of bytes written (if sync). - */ -Binding.prototype.write = Binding.prototype.writeBuffer; - -/** - * Write to a file descriptor given a string. - * @param {string} fd File descriptor. - * @param {string} string String with contents to write. - * @param {number} position Where to begin writing in the file. If null, - * data will be written to the current file position. - * @param {string} encoding String encoding. - * @param {function(Error, number, string)} callback Callback (optional) called - * with any error, number of bytes written, and the string. - * @return {number} Number of bytes written (if sync). - */ -Binding.prototype.writeString = function( - fd, - string, - position, - encoding, - callback -) { - var buffer = bufferFrom(string, encoding); - var wrapper; - if (callback) { - if (callback.oncomplete) { - callback = callback.oncomplete.bind(callback); - } - wrapper = function(err, written, returned) { - callback(err, written, returned && string); - }; - } - return this.writeBuffer(fd, buffer, 0, string.length, position, wrapper); -}; - -/** - * Rename a file. - * @param {string} oldPath Old pathname. - * @param {string} newPath New pathname. - * @param {function(Error)} callback Callback (optional). - * @return {undefined} - */ -Binding.prototype.rename = function(oldPath, newPath, callback) { - return maybeCallback(normalizeCallback(callback), this, function() { - var oldItem = this._system.getItem(oldPath); - if (!oldItem) { - throw new FSError('ENOENT', oldPath); - } - var oldParent = this._system.getItem(path.dirname(oldPath)); - var oldName = path.basename(oldPath); - var newItem = this._system.getItem(newPath); - var newParent = this._system.getItem(path.dirname(newPath)); - var newName = path.basename(newPath); - if (newItem) { - // make sure they are the same type - if (oldItem instanceof File) { - if (newItem instanceof Directory) { - throw new FSError('EISDIR', newPath); - } - } else if (oldItem instanceof Directory) { - if (!(newItem instanceof Directory)) { - throw new FSError('ENOTDIR', newPath); - } - if (newItem.list().length > 0) { - throw new FSError('ENOTEMPTY', newPath); - } - } - newParent.removeItem(newName); - } else { - if (!newParent) { - throw new FSError('ENOENT', newPath); - } - if (!(newParent instanceof Directory)) { - throw new FSError('ENOTDIR', newPath); - } - } - oldParent.removeItem(oldName); - newParent.addItem(newName, oldItem); - }); -}; - -/** - * Read a directory. - * @param {string} dirpath Path to directory. - * @param {string} encoding The encoding ('utf-8' or 'buffer'). - * @param {boolean} withFileTypes whether or not to return fs.Dirent objects - * @param {function(Error, (Array.|Array.)} callback Callback - * (optional) called with any error or array of items in the directory. - * @return {Array.|Array.} Array of items in directory (if sync). - */ -Binding.prototype.readdir = function( - dirpath, - encoding, - withFileTypes, - callback -) { - if (arguments.length === 2) { - callback = encoding; - encoding = 'utf-8'; - } else if (arguments.length === 3) { - callback = withFileTypes; - } - if (withFileTypes === true) { - notImplemented(); - } - return maybeCallback(normalizeCallback(callback), this, function() { - var dpath = dirpath; - var dir = this._system.getItem(dirpath); - while (dir instanceof SymbolicLink) { - dpath = path.resolve(path.dirname(dpath), dir.getPath()); - dir = this._system.getItem(dpath); - } - if (!dir) { - throw new FSError('ENOENT', dirpath); - } - if (!(dir instanceof Directory)) { - throw new FSError('ENOTDIR', dirpath); - } - var list = dir.list(); - if (encoding === 'buffer') { - list = list.map(function(item) { - return bufferFrom(item); - }); - } - return list; - }); -}; - -/** - * Create a directory. - * @param {string} pathname Path to new directory. - * @param {number} mode Permissions. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.mkdir = function(pathname, mode, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(pathname); - if (item) { - throw new FSError('EEXIST', pathname); - } - var parent = this._system.getItem(path.dirname(pathname)); - if (!parent) { - throw new FSError('ENOENT', pathname); - } - this.access(path.dirname(pathname), parseInt('0002', 8)); - var dir = new Directory(); - if (mode) { - dir.setMode(mode); - } - parent.addItem(path.basename(pathname), dir); - }); -}; - -/** - * Remove a directory. - * @param {string} pathname Path to directory. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.rmdir = function(pathname, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(pathname); - if (!item) { - throw new FSError('ENOENT', pathname); - } - if (!(item instanceof Directory)) { - throw new FSError('ENOTDIR', pathname); - } - if (item.list().length > 0) { - throw new FSError('ENOTEMPTY', pathname); - } - this.access(path.dirname(pathname), parseInt('0002', 8)); - var parent = this._system.getItem(path.dirname(pathname)); - parent.removeItem(path.basename(pathname)); - }); -}; - -var PATH_CHARS = - 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - -var MAX_ATTEMPTS = 62 * 62 * 62; - -/** - * Create a directory based on a template. - * See http://web.mit.edu/freebsd/head/lib/libc/stdio/mktemp.c - * @param {string} template Path template (trailing Xs will be replaced). - * @param {string} encoding The encoding ('utf-8' or 'buffer'). - * @param {function(Error, string)} callback Optional callback. - */ -Binding.prototype.mkdtemp = function(prefix, encoding, callback) { - if (encoding && typeof encoding !== 'string') { - callback = encoding; - encoding = 'utf-8'; - } - return maybeCallback(normalizeCallback(callback), this, function() { - prefix = prefix.replace(/X{0,6}$/, 'XXXXXX'); - var parentPath = path.dirname(prefix); - var parent = this._system.getItem(parentPath); - if (!parent) { - throw new FSError('ENOENT', prefix); - } - if (!(parent instanceof Directory)) { - throw new FSError('ENOTDIR', prefix); - } - this.access(parentPath, parseInt('0002', 8)); - var template = path.basename(prefix); - var unique = false; - var count = 0; - var name; - while (!unique && count < MAX_ATTEMPTS) { - var position = template.length - 1; - var replacement = ''; - while (template.charAt(position) === 'X') { - replacement += PATH_CHARS.charAt( - Math.floor(PATH_CHARS.length * Math.random()) - ); - position -= 1; - } - var candidate = template.slice(0, position + 1) + replacement; - if (!parent.getItem(candidate)) { - name = candidate; - unique = true; - } - count += 1; - } - if (!name) { - throw new FSError('EEXIST', prefix); - } - var dir = new Directory(); - parent.addItem(name, dir); - var uniquePath = path.join(parentPath, name); - if (encoding === 'buffer') { - uniquePath = bufferFrom(uniquePath); - } - return uniquePath; - }); -}; - -/** - * Truncate a file. - * @param {number} fd File descriptor. - * @param {number} len Number of bytes. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.ftruncate = function(fd, len, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - if (!descriptor.isWrite()) { - throw new FSError('EINVAL'); - } - var file = descriptor.getItem(); - if (!(file instanceof File)) { - throw new FSError('EINVAL'); - } - var content = file.getContent(); - var newContent = bufferAlloc(len); - content.copy(newContent); - file.setContent(newContent); - }); -}; - -/** - * Legacy support. - * @param {number} fd File descriptor. - * @param {number} len Number of bytes. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.truncate = Binding.prototype.ftruncate; - -/** - * Change user and group owner. - * @param {string} pathname Path. - * @param {number} uid User id. - * @param {number} gid Group id. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.chown = function(pathname, uid, gid, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(pathname); - if (!item) { - throw new FSError('ENOENT', pathname); - } - item.setUid(uid); - item.setGid(gid); - }); -}; - -/** - * Change user and group owner. - * @param {number} fd File descriptor. - * @param {number} uid User id. - * @param {number} gid Group id. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.fchown = function(fd, uid, gid, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - var item = descriptor.getItem(); - item.setUid(uid); - item.setGid(gid); - }); -}; - -/** - * Change permissions. - * @param {string} pathname Path. - * @param {number} mode Mode. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.chmod = function(pathname, mode, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(pathname); - if (!item) { - throw new FSError('ENOENT', pathname); - } - item.setMode(mode); - }); -}; - -/** - * Change permissions. - * @param {number} fd File descriptor. - * @param {number} mode Mode. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.fchmod = function(fd, mode, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - var item = descriptor.getItem(); - item.setMode(mode); - }); -}; - -/** - * Delete a named item. - * @param {string} pathname Path to item. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.unlink = function(pathname, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(pathname); - if (!item) { - throw new FSError('ENOENT', pathname); - } - if (item instanceof Directory) { - throw new FSError('EPERM', pathname); - } - var parent = this._system.getItem(path.dirname(pathname)); - parent.removeItem(path.basename(pathname)); - }); -}; - -/** - * Update timestamps. - * @param {string} pathname Path to item. - * @param {number} atime Access time (in seconds). - * @param {number} mtime Modification time (in seconds). - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.utimes = function(pathname, atime, mtime, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(pathname); - if (!item) { - throw new FSError('ENOENT', pathname); - } - item.setATime(new Date(atime * 1000)); - item.setMTime(new Date(mtime * 1000)); - }); -}; - -/** - * Update timestamps. - * @param {number} fd File descriptor. - * @param {number} atime Access time (in seconds). - * @param {number} mtime Modification time (in seconds). - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.futimes = function(fd, atime, mtime, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var descriptor = this._getDescriptorById(fd); - var item = descriptor.getItem(); - item.setATime(new Date(atime * 1000)); - item.setMTime(new Date(mtime * 1000)); - }); -}; - -/** - * Synchronize in-core state with storage device. - * @param {number} fd File descriptor. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.fsync = function(fd, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - this._getDescriptorById(fd); - }); -}; - -/** - * Synchronize in-core metadata state with storage device. - * @param {number} fd File descriptor. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.fdatasync = function(fd, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - this._getDescriptorById(fd); - }); -}; - -/** - * Create a hard link. - * @param {string} srcPath The existing file. - * @param {string} destPath The new link to create. - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.link = function(srcPath, destPath, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(srcPath); - if (!item) { - throw new FSError('ENOENT', srcPath); - } - if (item instanceof Directory) { - throw new FSError('EPERM', srcPath); - } - if (this._system.getItem(destPath)) { - throw new FSError('EEXIST', destPath); - } - var parent = this._system.getItem(path.dirname(destPath)); - if (!parent) { - throw new FSError('ENOENT', destPath); - } - if (!(parent instanceof Directory)) { - throw new FSError('ENOTDIR', destPath); - } - parent.addItem(path.basename(destPath), item); - }); -}; - -/** - * Create a symbolic link. - * @param {string} srcPath Path from link to the source file. - * @param {string} destPath Path for the generated link. - * @param {string} type Ignored (used for Windows only). - * @param {function(Error)} callback Optional callback. - */ -Binding.prototype.symlink = function(srcPath, destPath, type, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - if (this._system.getItem(destPath)) { - throw new FSError('EEXIST', destPath); - } - var parent = this._system.getItem(path.dirname(destPath)); - if (!parent) { - throw new FSError('ENOENT', destPath); - } - if (!(parent instanceof Directory)) { - throw new FSError('ENOTDIR', destPath); - } - var link = new SymbolicLink(); - link.setPath(srcPath); - parent.addItem(path.basename(destPath), link); - }); -}; - -/** - * Read the contents of a symbolic link. - * @param {string} pathname Path to symbolic link. - * @param {string} encoding The encoding ('utf-8' or 'buffer'). - * @param {function(Error, (string|Buffer))} callback Optional callback. - * @return {string|Buffer} Symbolic link contents (path to source). - */ -Binding.prototype.readlink = function(pathname, encoding, callback) { - if (encoding && typeof encoding !== 'string') { - callback = encoding; - encoding = 'utf-8'; - } - return maybeCallback(normalizeCallback(callback), this, function() { - var link = this._system.getItem(pathname); - if (!link) { - throw new FSError('ENOENT', pathname); - } - if (!(link instanceof SymbolicLink)) { - throw new FSError('EINVAL', pathname); - } - var linkPath = link.getPath(); - if (encoding === 'buffer') { - linkPath = bufferFrom(linkPath); - } - return linkPath; - }); -}; - -/** - * Stat an item. - * @param {string} filepath Path. - * @param {function(Error, Stats)|Float64Array|BigUint64Array} callback Callback (optional). In Node 7.7.0+ this will be a Float64Array - * that should be filled with stat values. - * @return {Stats|undefined} Stats or undefined (if sync). - */ -Binding.prototype.lstat = function(filepath, options, callback) { - if (arguments.length < 3) { - callback = options; - options = {}; - } - return maybeCallback(wrapStatsCallback(callback), this, function() { - var item = this._system.getItem(filepath); - if (!item) { - throw new FSError('ENOENT', filepath); - } - var stats = item.getStats(); - - // In Node 7.7.0+, binding.stat accepts a Float64Array as the second argument, - // which should be filled with stat values. - // In prior versions of Node, binding.stat simply returns a Stats instance. - if ( - callback instanceof Float64Array || - callback instanceof BigUint64Array - ) { - fillStatsArray(stats, callback); - } else { - fillStatsArray(stats, statValues); - return new Stats(item.getStats()); - } - }); -}; - -/** - * Tests user permissions. - * @param {string} filepath Path. - * @param {number} mode Mode. - * @param {function(Error)} callback Callback (optional). - */ -Binding.prototype.access = function(filepath, mode, callback) { - maybeCallback(normalizeCallback(callback), this, function() { - var item = this._system.getItem(filepath); - var links = 0; - while (item instanceof SymbolicLink) { - if (links > MAX_LINKS) { - throw new FSError('ELOOP', filepath); - } - filepath = path.resolve(path.dirname(filepath), item.getPath()); - item = this._system.getItem(filepath); - ++links; - } - if (!item) { - throw new FSError('ENOENT', filepath); - } - if (mode && process.getuid && process.getgid) { - var itemMode = item.getMode(); - if (item.getUid() === process.getuid()) { - if ((itemMode & (mode * 64)) !== mode * 64) { - throw new FSError('EACCES', filepath); - } - } else if (item.getGid() === process.getgid()) { - if ((itemMode & (mode * 8)) !== mode * 8) { - throw new FSError('EACCES', filepath); - } - } else { - if ((itemMode & mode) !== mode) { - throw new FSError('EACCES', filepath); - } - } - } - }); -}; - -/** - * Not yet implemented. - * @type {function()} - */ -Binding.prototype.StatWatcher = notImplemented; - -/** - * Export the binding constructor. - * @type {function()} - */ -exports = module.exports = Binding; diff --git a/truebit-implementation/node_modules/mock-fs/lib/buffer.js b/truebit-implementation/node_modules/mock-fs/lib/buffer.js deleted file mode 100644 index 64d25cbe..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/buffer.js +++ /dev/null @@ -1,14 +0,0 @@ -exports.from = - Buffer.from || - function(value, encoding) { - if (encoding) { - return new Buffer(value, encoding); - } - return new Buffer(value); - }; - -exports.alloc = - Buffer.alloc || - function(size) { - return new Buffer(size); - }; diff --git a/truebit-implementation/node_modules/mock-fs/lib/descriptor.js b/truebit-implementation/node_modules/mock-fs/lib/descriptor.js deleted file mode 100644 index 50f90474..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/descriptor.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -var constants = require('constants'); - -/** - * Create a new file descriptor. - * @param {number} flags Flags. - * @constructor - */ -function FileDescriptor(flags) { - /** - * Flags. - * @type {number} - */ - this._flags = flags; - - /** - * File system item. - * @type {Item} - */ - this._item = null; - - /** - * Current file position. - * @type {number} - */ - this._position = 0; -} - -/** - * Set the item. - * @param {Item} item File system item. - */ -FileDescriptor.prototype.setItem = function(item) { - this._item = item; -}; - -/** - * Get the item. - * @return {Item} File system item. - */ -FileDescriptor.prototype.getItem = function() { - return this._item; -}; - -/** - * Get the current file position. - * @return {number} File position. - */ -FileDescriptor.prototype.getPosition = function() { - return this._position; -}; - -/** - * Set the current file position. - * @param {number} position File position. - */ -FileDescriptor.prototype.setPosition = function(position) { - this._position = position; -}; - -/** - * Check if file opened for appending. - * @return {boolean} Opened for appending. - */ -FileDescriptor.prototype.isAppend = function() { - return (this._flags & constants.O_APPEND) === constants.O_APPEND; -}; - -/** - * Check if file opened for creation. - * @return {boolean} Opened for creation. - */ -FileDescriptor.prototype.isCreate = function() { - return (this._flags & constants.O_CREAT) === constants.O_CREAT; -}; - -/** - * Check if file opened for reading. - * @return {boolean} Opened for reading. - */ -FileDescriptor.prototype.isRead = function() { - // special treatment because O_RDONLY is 0 - return ( - this._flags === constants.O_RDONLY || - this._flags === (constants.O_RDONLY | constants.O_SYNC) || - (this._flags & constants.O_RDWR) === constants.O_RDWR - ); -}; - -/** - * Check if file opened for writing. - * @return {boolean} Opened for writing. - */ -FileDescriptor.prototype.isWrite = function() { - return ( - (this._flags & constants.O_WRONLY) === constants.O_WRONLY || - (this._flags & constants.O_RDWR) === constants.O_RDWR - ); -}; - -/** - * Check if file opened for truncating. - * @return {boolean} Opened for truncating. - */ -FileDescriptor.prototype.isTruncate = function() { - return (this._flags & constants.O_TRUNC) === constants.O_TRUNC; -}; - -/** - * Check if file opened with exclusive flag. - * @return {boolean} Opened with exclusive. - */ -FileDescriptor.prototype.isExclusive = function() { - return (this._flags & constants.O_EXCL) === constants.O_EXCL; -}; - -/** - * Export the constructor. - * @type {function()} - */ -exports = module.exports = FileDescriptor; diff --git a/truebit-implementation/node_modules/mock-fs/lib/directory.js b/truebit-implementation/node_modules/mock-fs/lib/directory.js deleted file mode 100644 index bd58f1f0..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/directory.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; - -var util = require('util'); - -var Item = require('./item'); - -var constants = require('constants'); - -/** - * A directory. - * @constructor - */ -function Directory() { - Item.call(this); - - /** - * Items in this directory. - * @type {Object.} - */ - this._items = {}; - - /** - * Permissions. - */ - this._mode = 511; // 0777 -} -util.inherits(Directory, Item); - -/** - * Add an item to the directory. - * @param {string} name The name to give the item. - * @param {Item} item The item to add. - * @return {Item} The added item. - */ -Directory.prototype.addItem = function(name, item) { - if (this._items.hasOwnProperty(name)) { - throw new Error('Item with the same name already exists: ' + name); - } - this._items[name] = item; - ++item.links; - if (item instanceof Directory) { - // for '.' entry - ++item.links; - // for subdirectory - ++this.links; - } - this.setMTime(new Date()); - return item; -}; - -/** - * Get a named item. - * @param {string} name Item name. - * @return {Item} The named item (or null if none). - */ -Directory.prototype.getItem = function(name) { - var item = null; - if (this._items.hasOwnProperty(name)) { - item = this._items[name]; - } - return item; -}; - -/** - * Remove an item. - * @param {string} name Name of item to remove. - * @return {Item} The orphan item. - */ -Directory.prototype.removeItem = function(name) { - if (!this._items.hasOwnProperty(name)) { - throw new Error('Item does not exist in directory: ' + name); - } - var item = this._items[name]; - delete this._items[name]; - --item.links; - if (item instanceof Directory) { - // for '.' entry - --item.links; - // for subdirectory - --this.links; - } - this.setMTime(new Date()); - return item; -}; - -/** - * Get list of item names in this directory. - * @return {Array.} Item names. - */ -Directory.prototype.list = function() { - return Object.keys(this._items).sort(); -}; - -/** - * Get directory stats. - * @return {Object} Stats properties. - */ -Directory.prototype.getStats = function() { - var stats = Item.prototype.getStats.call(this); - stats.mode = this.getMode() | constants.S_IFDIR; - stats.size = 1; - stats.blocks = 1; - return stats; -}; - -/** - * Export the constructor. - * @type {function()} - */ -exports = module.exports = Directory; diff --git a/truebit-implementation/node_modules/mock-fs/lib/error.js b/truebit-implementation/node_modules/mock-fs/lib/error.js deleted file mode 100644 index 20caab57..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/error.js +++ /dev/null @@ -1,275 +0,0 @@ -'use strict'; - -/** - * Error codes from libuv. - * @enum {number} - */ -var codes = { - UNKNOWN: { - errno: -1, - message: 'unknown error' - }, - OK: { - errno: 0, - message: 'success' - }, - EOF: { - errno: 1, - message: 'end of file' - }, - EADDRINFO: { - errno: 2, - message: 'getaddrinfo error' - }, - EACCES: { - errno: 3, - message: 'permission denied' - }, - EAGAIN: { - errno: 4, - message: 'resource temporarily unavailable' - }, - EADDRINUSE: { - errno: 5, - message: 'address already in use' - }, - EADDRNOTAVAIL: { - errno: 6, - message: 'address not available' - }, - EAFNOSUPPORT: { - errno: 7, - message: 'address family not supported' - }, - EALREADY: { - errno: 8, - message: 'connection already in progress' - }, - EBADF: { - errno: 9, - message: 'bad file descriptor' - }, - EBUSY: { - errno: 10, - message: 'resource busy or locked' - }, - ECONNABORTED: { - errno: 11, - message: 'software caused connection abort' - }, - ECONNREFUSED: { - errno: 12, - message: 'connection refused' - }, - ECONNRESET: { - errno: 13, - message: 'connection reset by peer' - }, - EDESTADDRREQ: { - errno: 14, - message: 'destination address required' - }, - EFAULT: { - errno: 15, - message: 'bad address in system call argument' - }, - EHOSTUNREACH: { - errno: 16, - message: 'host is unreachable' - }, - EINTR: { - errno: 17, - message: 'interrupted system call' - }, - EINVAL: { - errno: 18, - message: 'invalid argument' - }, - EISCONN: { - errno: 19, - message: 'socket is already connected' - }, - EMFILE: { - errno: 20, - message: 'too many open files' - }, - EMSGSIZE: { - errno: 21, - message: 'message too long' - }, - ENETDOWN: { - errno: 22, - message: 'network is down' - }, - ENETUNREACH: { - errno: 23, - message: 'network is unreachable' - }, - ENFILE: { - errno: 24, - message: 'file table overflow' - }, - ENOBUFS: { - errno: 25, - message: 'no buffer space available' - }, - ENOMEM: { - errno: 26, - message: 'not enough memory' - }, - ENOTDIR: { - errno: 27, - message: 'not a directory' - }, - EISDIR: { - errno: 28, - message: 'illegal operation on a directory' - }, - ENONET: { - errno: 29, - message: 'machine is not on the network' - }, - ENOTCONN: { - errno: 31, - message: 'socket is not connected' - }, - ENOTSOCK: { - errno: 32, - message: 'socket operation on non-socket' - }, - ENOTSUP: { - errno: 33, - message: 'operation not supported on socket' - }, - ENOENT: { - errno: 34, - message: 'no such file or directory' - }, - ENOSYS: { - errno: 35, - message: 'function not implemented' - }, - EPIPE: { - errno: 36, - message: 'broken pipe' - }, - EPROTO: { - errno: 37, - message: 'protocol error' - }, - EPROTONOSUPPORT: { - errno: 38, - message: 'protocol not supported' - }, - EPROTOTYPE: { - errno: 39, - message: 'protocol wrong type for socket' - }, - ETIMEDOUT: { - errno: 40, - message: 'connection timed out' - }, - ECHARSET: { - errno: 41, - message: 'invalid Unicode character' - }, - EAIFAMNOSUPPORT: { - errno: 42, - message: 'address family for hostname not supported' - }, - EAISERVICE: { - errno: 44, - message: 'servname not supported for ai_socktype' - }, - EAISOCKTYPE: { - errno: 45, - message: 'ai_socktype not supported' - }, - ESHUTDOWN: { - errno: 46, - message: 'cannot send after transport endpoint shutdown' - }, - EEXIST: { - errno: 47, - message: 'file already exists' - }, - ESRCH: { - errno: 48, - message: 'no such process' - }, - ENAMETOOLONG: { - errno: 49, - message: 'name too long' - }, - EPERM: { - errno: 50, - message: 'operation not permitted' - }, - ELOOP: { - errno: 51, - message: 'too many symbolic links encountered' - }, - EXDEV: { - errno: 52, - message: 'cross-device link not permitted' - }, - ENOTEMPTY: { - errno: 53, - message: 'directory not empty' - }, - ENOSPC: { - errno: 54, - message: 'no space left on device' - }, - EIO: { - errno: 55, - message: 'i/o error' - }, - EROFS: { - errno: 56, - message: 'read-only file system' - }, - ENODEV: { - errno: 57, - message: 'no such device' - }, - ESPIPE: { - errno: 58, - message: 'invalid seek' - }, - ECANCELED: { - errno: 59, - message: 'peration canceled' - } -}; - -/** - * Create an error. - * @param {string} code Error code. - * @param {string} path Path (optional). - * @constructor - */ -function FSError(code, path) { - if (!codes.hasOwnProperty(code)) { - throw new Error('Programmer error, invalid error code: ' + code); - } - Error.call(this); - var details = codes[code]; - var message = code + ', ' + details.message; - if (path) { - message += " '" + path + "'"; - } - this.message = message; - this.code = code; - this.errno = details.errno; - if (path !== undefined) { - this.path = path; - } - Error.captureStackTrace(this, FSError); -} -FSError.prototype = new Error(); - -/** - * Error constructor. - */ -exports = module.exports = FSError; diff --git a/truebit-implementation/node_modules/mock-fs/lib/file.js b/truebit-implementation/node_modules/mock-fs/lib/file.js deleted file mode 100644 index 791114a5..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/file.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; - -var util = require('util'); - -var Item = require('./item'); -var bufferFrom = require('./buffer').from; -var bufferAlloc = require('./buffer').alloc; - -var EMPTY = bufferAlloc(0); -var constants = require('constants'); - -/** - * A directory. - * @constructor - */ -function File() { - Item.call(this); - - /** - * File content. - * @type {Buffer} - */ - this._content = EMPTY; -} -util.inherits(File, Item); - -/** - * Get the file contents. - * @return {Buffer} File contents. - */ -File.prototype.getContent = function() { - this.setATime(new Date()); - return this._content; -}; - -/** - * Set the file contents. - * @param {string|Buffer} content File contents. - */ -File.prototype.setContent = function(content) { - if (typeof content === 'string') { - content = bufferFrom(content); - } else if (!Buffer.isBuffer(content)) { - throw new Error('File content must be a string or buffer'); - } - this._content = content; - var now = Date.now(); - this.setCTime(new Date(now)); - this.setMTime(new Date(now)); -}; - -/** - * Get file stats. - * @return {Object} Stats properties. - */ -File.prototype.getStats = function() { - var size = this._content.length; - var stats = Item.prototype.getStats.call(this); - stats.mode = this.getMode() | constants.S_IFREG; - stats.size = size; - stats.blocks = Math.ceil(size / 512); - return stats; -}; - -/** - * Export the constructor. - * @type {function()} - */ -exports = module.exports = File; diff --git a/truebit-implementation/node_modules/mock-fs/lib/filesystem.js b/truebit-implementation/node_modules/mock-fs/lib/filesystem.js deleted file mode 100644 index 08a856f1..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/filesystem.js +++ /dev/null @@ -1,322 +0,0 @@ -'use strict'; - -var os = require('os'); -var path = require('path'); - -var Directory = require('./directory'); -var File = require('./file'); -var FSError = require('./error'); -var SymbolicLink = require('./symlink'); - -var isWindows = process.platform === 'win32'; - -function getPathParts(filepath) { - var parts = path._makeLong(path.resolve(filepath)).split(path.sep); - parts.shift(); - if (isWindows) { - // parts currently looks like ['', '?', 'c:', ...] - parts.shift(); - var q = parts.shift(); // should be '?' - var base = '\\\\' + q + '\\' + parts.shift().toLowerCase(); - parts.unshift(base); - } - if (parts[parts.length - 1] === '') { - parts.pop(); - } - return parts; -} - -/** - * Create a new file system. - * @param {Object} options Any filesystem options. - * @param {boolean} options.createCwd Create a directory for `process.cwd()` - * (defaults to `true`). - * @param {boolean} options.createTmp Create a directory for `os.tmpdir()` - * (defaults to `true`). - * @constructor - */ -function FileSystem(options) { - options = options || {}; - - var createCwd = 'createCwd' in options ? options.createCwd : true; - var createTmp = 'createTmp' in options ? options.createTmp : true; - - var root = new Directory(); - - // populate with default directories - var defaults = []; - if (createCwd) { - defaults.push(process.cwd()); - } - - if (createTmp) { - defaults.push((os.tmpdir && os.tmpdir()) || os.tmpDir()); - } - - defaults.forEach(function(dir) { - var parts = getPathParts(dir); - var directory = root; - var i, ii, name, candidate; - for (i = 0, ii = parts.length; i < ii; ++i) { - name = parts[i]; - candidate = directory.getItem(name); - if (!candidate) { - directory = directory.addItem(name, new Directory()); - } else if (candidate instanceof Directory) { - directory = candidate; - } else { - throw new Error('Failed to create directory: ' + dir); - } - } - }); - - /** - * Root directory. - * @type {Directory} - */ - this._root = root; -} - -/** - * Get the root directory. - * @return {Directory} The root directory. - */ -FileSystem.prototype.getRoot = function() { - return this._root; -}; - -/** - * Get a file system item. - * @param {string} filepath Path to item. - * @return {Item} The item (or null if not found). - */ -FileSystem.prototype.getItem = function(filepath) { - var parts = getPathParts(filepath); - var currentParts = getPathParts(process.cwd()); - var item = this._root; - var itemPath = '/'; - var name; - for (var i = 0, ii = parts.length; i < ii; ++i) { - name = parts[i]; - while (item instanceof SymbolicLink) { - // Symbolic link being traversed as a directory --- If link targets - // another symbolic link, resolve target's path relative to the original - // link's target, otherwise relative to the current item. - itemPath = path.resolve(path.dirname(itemPath), item.getPath()); - item = this.getItem(itemPath); - } - if (item) { - if (item instanceof Directory && name !== currentParts[i]) { - // make sure traversal is allowed - if (!item.canExecute()) { - throw new FSError('EACCES', filepath); - } - } - item = item.getItem(name); - } - if (!item) { - break; - } - itemPath = path.resolve(itemPath, name); - } - return item; -}; - -/** - * Populate a directory with an item. - * @param {Directory} directory The directory to populate. - * @param {string} name The name of the item. - * @param {string|Buffer|function|Object} obj Instructions for creating the - * item. - */ -function populate(directory, name, obj) { - var item; - if (typeof obj === 'string' || Buffer.isBuffer(obj)) { - // contents for a file - item = new File(); - item.setContent(obj); - } else if (typeof obj === 'function') { - // item factory - item = obj(); - } else if (typeof obj === 'object') { - // directory with more to populate - item = new Directory(); - for (var key in obj) { - populate(item, key, obj[key]); - } - } else { - throw new Error('Unsupported type: ' + typeof obj + ' of item ' + name); - } - /** - * Special exception for redundant adding of empty directories. - */ - if ( - item instanceof Directory && - item.list().length === 0 && - directory.getItem(name) instanceof Directory - ) { - // pass - } else { - directory.addItem(name, item); - } -} - -/** - * Configure a mock file system. - * @param {Object} paths Config object. - * @param {Object} options Any filesystem options. - * @param {boolean} options.createCwd Create a directory for `process.cwd()` - * (defaults to `true`). - * @param {boolean} options.createTmp Create a directory for `os.tmpdir()` - * (defaults to `true`). - * @return {FileSystem} Mock file system. - */ -FileSystem.create = function(paths, options) { - var system = new FileSystem(options); - - for (var filepath in paths) { - var parts = getPathParts(filepath); - var directory = system._root; - var i, ii, name, candidate; - for (i = 0, ii = parts.length - 1; i < ii; ++i) { - name = parts[i]; - candidate = directory.getItem(name); - if (!candidate) { - directory = directory.addItem(name, new Directory()); - } else if (candidate instanceof Directory) { - directory = candidate; - } else { - throw new Error('Failed to create directory: ' + filepath); - } - } - populate(directory, parts[i], paths[filepath]); - } - - return system; -}; - -/** - * Generate a factory for new files. - * @param {Object} config File config. - * @return {function():File} Factory that creates a new file. - */ -FileSystem.file = function(config) { - config = config || {}; - return function() { - var file = new File(); - if (config.hasOwnProperty('content')) { - file.setContent(config.content); - } - if (config.hasOwnProperty('mode')) { - file.setMode(config.mode); - } else { - file.setMode(438); // 0666 - } - if (config.hasOwnProperty('uid')) { - file.setUid(config.uid); - } - if (config.hasOwnProperty('gid')) { - file.setGid(config.gid); - } - if (config.hasOwnProperty('atime')) { - file.setATime(config.atime); - } - if (config.hasOwnProperty('ctime')) { - file.setCTime(config.ctime); - } - if (config.hasOwnProperty('mtime')) { - file.setMTime(config.mtime); - } - if (config.hasOwnProperty('birthtime')) { - file.setBirthtime(config.birthtime); - } - return file; - }; -}; - -/** - * Generate a factory for new symbolic links. - * @param {Object} config File config. - * @return {function():File} Factory that creates a new symbolic link. - */ -FileSystem.symlink = function(config) { - config = config || {}; - return function() { - var link = new SymbolicLink(); - if (config.hasOwnProperty('mode')) { - link.setMode(config.mode); - } else { - link.setMode(438); // 0666 - } - if (config.hasOwnProperty('uid')) { - link.setUid(config.uid); - } - if (config.hasOwnProperty('gid')) { - link.setGid(config.gid); - } - if (config.hasOwnProperty('path')) { - link.setPath(config.path); - } else { - throw new Error('Missing "path" property'); - } - if (config.hasOwnProperty('atime')) { - link.setATime(config.atime); - } - if (config.hasOwnProperty('ctime')) { - link.setCTime(config.ctime); - } - if (config.hasOwnProperty('mtime')) { - link.setMTime(config.mtime); - } - if (config.hasOwnProperty('birthtime')) { - link.setBirthtime(config.birthtime); - } - return link; - }; -}; - -/** - * Generate a factory for new directories. - * @param {Object} config File config. - * @return {function():Directory} Factory that creates a new directory. - */ -FileSystem.directory = function(config) { - config = config || {}; - return function() { - var dir = new Directory(); - if (config.hasOwnProperty('mode')) { - dir.setMode(config.mode); - } - if (config.hasOwnProperty('uid')) { - dir.setUid(config.uid); - } - if (config.hasOwnProperty('gid')) { - dir.setGid(config.gid); - } - if (config.hasOwnProperty('items')) { - for (var name in config.items) { - populate(dir, name, config.items[name]); - } - } - if (config.hasOwnProperty('atime')) { - dir.setATime(config.atime); - } - if (config.hasOwnProperty('ctime')) { - dir.setCTime(config.ctime); - } - if (config.hasOwnProperty('mtime')) { - dir.setMTime(config.mtime); - } - if (config.hasOwnProperty('birthtime')) { - dir.setBirthtime(config.birthtime); - } - return dir; - }; -}; - -/** - * Module exports. - * @type {function} - */ -var exports = (module.exports = FileSystem); -exports.getPathParts = getPathParts; diff --git a/truebit-implementation/node_modules/mock-fs/lib/index.js b/truebit-implementation/node_modules/mock-fs/lib/index.js deleted file mode 100644 index 38258e03..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/index.js +++ /dev/null @@ -1,111 +0,0 @@ -'use strict'; - -var Binding = require('./binding'); -var FSError = require('./error'); -var FileSystem = require('./filesystem'); -var realBinding = process.binding('fs'); -var path = require('path'); - -var realBindingProps = Object.assign({}, realBinding); -var realProcessProps = { - cwd: process.cwd, - chdir: process.chdir -}; - -function overrideBinding(binding) { - for (var key in binding) { - if (typeof binding[key] === 'function') { - realBinding[key] = binding[key].bind(binding); - } else { - realBinding[key] = binding[key]; - } - } -} - -function overrideProcess(cwd, chdir) { - process.cwd = cwd; - process.chdir = chdir; -} - -function restoreBinding() { - var key; - for (key in realBindingProps) { - realBinding[key] = realBindingProps[key]; - } - // Delete excess keys that came in when the binding was originally applied. - for (key in realBinding) { - if (typeof realBindingProps[key] === 'undefined') { - delete realBinding[key]; - } - } -} - -function restoreProcess() { - for (var key in realProcessProps) { - process[key] = realProcessProps[key]; - } -} - -/** - * Swap out the fs bindings for a mock file system. - * @param {Object} config Mock file system configuration. - * @param {Object} options Any filesystem options. - * @param {boolean} options.createCwd Create a directory for `process.cwd()` - * (defaults to `true`). - * @param {boolean} options.createTmp Create a directory for `os.tmpdir()` - * (defaults to `true`). - */ -var exports = (module.exports = function mock(config, options) { - var system = FileSystem.create(config, options); - var binding = new Binding(system); - - overrideBinding(binding); - - var currentPath = process.cwd(); - overrideProcess( - function cwd() { - return currentPath; - }, - function chdir(directory) { - if (!binding.stat(path._makeLong(directory)).isDirectory()) { - throw new FSError('ENOTDIR'); - } - currentPath = path.resolve(currentPath, directory); - } - ); -}); - -/** - * Get hold of the mocked filesystem's 'root' - * If fs hasn't currently been replaced, this will return an empty object - */ -exports.getMockRoot = function() { - if (typeof realBinding.getSystem === 'undefined') { - return {}; - } else { - return realBinding.getSystem().getRoot(); - } -}; - -/** - * Restore the fs bindings for the real file system. - */ -exports.restore = function() { - restoreBinding(); - restoreProcess(); -}; - -/** - * Create a file factory. - */ -exports.file = FileSystem.file; - -/** - * Create a directory factory. - */ -exports.directory = FileSystem.directory; - -/** - * Create a symbolic link factory. - */ -exports.symlink = FileSystem.symlink; diff --git a/truebit-implementation/node_modules/mock-fs/lib/item.js b/truebit-implementation/node_modules/mock-fs/lib/item.js deleted file mode 100644 index 3b7e10e1..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/item.js +++ /dev/null @@ -1,296 +0,0 @@ -'use strict'; - -var counter = 0; - -/** - * Permissions. - * @enum {number} - */ -var permissions = { - USER_READ: 256, // 0400 - USER_WRITE: 128, // 0200 - USER_EXEC: 64, // 0100 - GROUP_READ: 32, // 0040 - GROUP_WRITE: 16, // 0020 - GROUP_EXEC: 8, // 0010 - OTHER_READ: 4, // 0004 - OTHER_WRITE: 2, // 0002 - OTHER_EXEC: 1 // 0001 -}; - -function getUid() { - return process.getuid && process.getuid(); -} - -function getGid() { - return process.getgid && process.getgid(); -} - -/** - * A filesystem item. - * @constructor - */ -function Item() { - var now = Date.now(); - - /** - * Access time. - * @type {Date} - */ - this._atime = new Date(now); - - /** - * Change time. - * @type {Date} - */ - this._ctime = new Date(now); - - /** - * Birth time. - * @type {Date} - */ - this._birthtime = new Date(now); - - /** - * Modification time. - * @type {Date} - */ - this._mtime = new Date(now); - - /** - * Permissions. - */ - this._mode = 438; // 0666 - - /** - * User id. - * @type {number} - */ - this._uid = getUid(); - - /** - * Group id. - * @type {number} - */ - this._gid = getGid(); - - /** - * Item number. - * @type {number} - */ - this._id = ++counter; - - /** - * Number of links to this item. - */ - this.links = 0; -} - -/** - * Determine if the current user has read permission. - * @return {boolean} The current user can read. - */ -Item.prototype.canRead = function() { - var uid = getUid(); - var gid = getGid(); - var can = false; - if (uid === 0) { - can = true; - } else if (uid === this._uid) { - can = (permissions.USER_READ & this._mode) === permissions.USER_READ; - } else if (gid === this._gid) { - can = (permissions.GROUP_READ & this._mode) === permissions.GROUP_READ; - } else { - can = (permissions.OTHER_READ & this._mode) === permissions.OTHER_READ; - } - return can; -}; - -/** - * Determine if the current user has write permission. - * @return {boolean} The current user can write. - */ -Item.prototype.canWrite = function() { - var uid = getUid(); - var gid = getGid(); - var can = false; - if (uid === 0) { - can = true; - } else if (uid === this._uid) { - can = (permissions.USER_WRITE & this._mode) === permissions.USER_WRITE; - } else if (gid === this._gid) { - can = (permissions.GROUP_WRITE & this._mode) === permissions.GROUP_WRITE; - } else { - can = (permissions.OTHER_WRITE & this._mode) === permissions.OTHER_WRITE; - } - return can; -}; - -/** - * Determine if the current user has execute permission. - * @return {boolean} The current user can execute. - */ -Item.prototype.canExecute = function() { - var uid = getUid(); - var gid = getGid(); - var can = false; - if (uid === 0) { - can = true; - } else if (uid === this._uid) { - can = (permissions.USER_EXEC & this._mode) === permissions.USER_EXEC; - } else if (gid === this._gid) { - can = (permissions.GROUP_EXEC & this._mode) === permissions.GROUP_EXEC; - } else { - can = (permissions.OTHER_EXEC & this._mode) === permissions.OTHER_EXEC; - } - return can; -}; - -/** - * Get access time. - * @return {Date} Access time. - */ -Item.prototype.getATime = function() { - return this._atime; -}; - -/** - * Set access time. - * @param {Date} atime Access time. - */ -Item.prototype.setATime = function(atime) { - this._atime = atime; -}; - -/** - * Get change time. - * @return {Date} Change time. - */ -Item.prototype.getCTime = function() { - return this._ctime; -}; - -/** - * Set change time. - * @param {Date} ctime Change time. - */ -Item.prototype.setCTime = function(ctime) { - this._ctime = ctime; -}; - -/** - * Get birth time. - * @return {Date} Birth time. - */ -Item.prototype.getBirthtime = function() { - return this._birthtime; -}; - -/** - * Set change time. - * @param {Date} birthtime Birth time. - */ -Item.prototype.setBirthtime = function(birthtime) { - this._birthtime = birthtime; -}; - -/** - * Get modification time. - * @return {Date} Modification time. - */ -Item.prototype.getMTime = function() { - return this._mtime; -}; - -/** - * Set modification time. - * @param {Date} mtime Modification time. - */ -Item.prototype.setMTime = function(mtime) { - this._mtime = mtime; -}; - -/** - * Get mode (permission only, e.g 0666). - * @return {number} Mode. - */ -Item.prototype.getMode = function() { - return this._mode; -}; - -/** - * Set mode (permission only, e.g 0666). - * @param {Date} mode Mode. - */ -Item.prototype.setMode = function(mode) { - this.setCTime(new Date()); - this._mode = mode; -}; - -/** - * Get user id. - * @return {number} User id. - */ -Item.prototype.getUid = function() { - return this._uid; -}; - -/** - * Set user id. - * @param {number} uid User id. - */ -Item.prototype.setUid = function(uid) { - this.setCTime(new Date()); - this._uid = uid; -}; - -/** - * Get group id. - * @return {number} Group id. - */ -Item.prototype.getGid = function() { - return this._gid; -}; - -/** - * Set group id. - * @param {number} gid Group id. - */ -Item.prototype.setGid = function(gid) { - this.setCTime(new Date()); - this._gid = gid; -}; - -/** - * Get item stats. - * @return {Object} Stats properties. - */ -Item.prototype.getStats = function() { - return { - dev: 8675309, - nlink: this.links, - uid: this.getUid(), - gid: this.getGid(), - rdev: 0, - blksize: 4096, - ino: this._id, - atime: this.getATime(), - mtime: this.getMTime(), - ctime: this.getCTime(), - birthtime: this.getBirthtime() - }; -}; - -/** - * Get the item's string representation. - * @return {string} String representation. - */ -Item.prototype.toString = function() { - return '[' + this.constructor.name + ']'; -}; - -/** - * Export the constructor. - * @type {function()} - */ -exports = module.exports = Item; diff --git a/truebit-implementation/node_modules/mock-fs/lib/symlink.js b/truebit-implementation/node_modules/mock-fs/lib/symlink.js deleted file mode 100644 index 36886d82..00000000 --- a/truebit-implementation/node_modules/mock-fs/lib/symlink.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var util = require('util'); - -var Item = require('./item'); - -var constants = require('constants'); - -/** - * A directory. - * @constructor - */ -function SymbolicLink() { - Item.call(this); - - /** - * Relative path to source. - * @type {string} - */ - this._path = undefined; -} -util.inherits(SymbolicLink, Item); - -/** - * Set the path to the source. - * @param {string} pathname Path to source. - */ -SymbolicLink.prototype.setPath = function(pathname) { - this._path = pathname; -}; - -/** - * Get the path to the source. - * @return {string} Path to source. - */ -SymbolicLink.prototype.getPath = function() { - return this._path; -}; - -/** - * Get symbolic link stats. - * @return {Object} Stats properties. - */ -SymbolicLink.prototype.getStats = function() { - var size = this._path.length; - var stats = Item.prototype.getStats.call(this); - stats.mode = this.getMode() | constants.S_IFLNK; - stats.size = size; - stats.blocks = Math.ceil(size / 512); - return stats; -}; - -/** - * Export the constructor. - * @type {function()} - */ -exports = module.exports = SymbolicLink; diff --git a/truebit-implementation/node_modules/mock-fs/license.md b/truebit-implementation/node_modules/mock-fs/license.md deleted file mode 100644 index 0758f337..00000000 --- a/truebit-implementation/node_modules/mock-fs/license.md +++ /dev/null @@ -1,49 +0,0 @@ -# License for mock-fs - -The mock-fs module is distributed under the MIT license. Find the full source -here: http://tschaub.mit-license.org/ - -Copyright Tim Schaub. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the “Software”), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - - -# Node's license - -This module includes parts of the Node library itself (specifically, the fs -module is included from several different versions of Node). Find Node's -license below: - -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/mock-fs/package.json b/truebit-implementation/node_modules/mock-fs/package.json deleted file mode 100644 index be80f5e5..00000000 --- a/truebit-implementation/node_modules/mock-fs/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "mock-fs@^4.1.0", - "_id": "mock-fs@4.7.0", - "_inBundle": false, - "_integrity": "sha512-WlQNtUlzMRpvLHf8dqeUmNqfdPjGY29KrJF50Ldb4AcL+vQeR8QH3wQcFMgrhTwb1gHjZn9xggho+84tBskLgA==", - "_location": "/mock-fs", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mock-fs@^4.1.0", - "name": "mock-fs", - "escapedName": "mock-fs", - "rawSpec": "^4.1.0", - "saveSpec": null, - "fetchSpec": "^4.1.0" - }, - "_requiredBy": [ - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.7.0.tgz", - "_shasum": "9f17e219cacb8094f4010e0a8c38589e2b33c299", - "_spec": "mock-fs@^4.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Tim Schaub", - "url": "http://tschaub.net/" - }, - "bugs": { - "url": "https://github.com/tschaub/mock-fs/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A configurable mock file system. You know, for testing.", - "devDependencies": { - "chai": "^4.1.2", - "eslint": "^4.8.0", - "eslint-config-tschaub": "^8.0.0", - "mocha": "^4.0.1", - "rimraf": "^2.6.2", - "semver": "^5.4.1" - }, - "eslintConfig": { - "extends": "tschaub" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/tschaub/mock-fs", - "keywords": [ - "mock", - "fs", - "test", - "fixtures", - "file system", - "memory" - ], - "license": "MIT", - "main": "lib/index.js", - "name": "mock-fs", - "repository": { - "type": "git", - "url": "git://github.com/tschaub/mock-fs.git" - }, - "scripts": { - "lint": "eslint benchmarks lib test", - "pretest": "npm run lint", - "test": "mocha --recursive test" - }, - "version": "4.7.0" -} diff --git a/truebit-implementation/node_modules/mock-fs/readme.md b/truebit-implementation/node_modules/mock-fs/readme.md deleted file mode 100644 index a9a24d40..00000000 --- a/truebit-implementation/node_modules/mock-fs/readme.md +++ /dev/null @@ -1,227 +0,0 @@ -# `mock-fs` - -The `mock-fs` module allows Node's built-in [`fs` module](http://nodejs.org/api/fs.html) to be backed temporarily by an in-memory, mock file system. This lets you run tests against a set of mock files and directories instead of lugging around a bunch of test fixtures. - -## Example - -The code below makes it so the `fs` module is temporarily backed by a mock file system with a few files and directories. - -```js -const mock = require('mock-fs'); - -mock({ - 'path/to/fake/dir': { - 'some-file.txt': 'file content here', - 'empty-dir': {/** empty directory */} - }, - 'path/to/some.png': Buffer.from([8, 6, 7, 5, 3, 0, 9]), - 'some/other/path': {/** another empty directory */} -}); -``` - -When you are ready to restore the `fs` module (so that it is backed by your real file system), call [`mock.restore()`](#mockrestore). Note that calling this may be **mandatory** in some cases. See [istanbuljs/nyc#324](https://github.com/istanbuljs/nyc/issues/324#issuecomment-234018654) - -```js -// after a test runs -mock.restore(); -``` - -## Upgrading to version 4 - -Instead of overriding all methods of the built-in `fs` module, the library now overrides `process.binding('fs')`. The purpose of this change is to avoid conflicts with other libraries that override `fs` methods (e.g. `graceful-fs`) and to make it possible to work with multiple Node releases without maintaining copied and slightly modified versions of Node's `fs` module. - -Breaking changes: - - * The `mock.fs()` function has been removed. This returned an object with `fs`-like methods without overriding the built-in `fs` module. - * The object created by `fs.Stats` is no longer an instance of `fs.Stats` (though it has all the same properties and methods). - * Lazy `require()` do not use the real filesystem. - * Tests are no longer run in Node < 4. - -Some of these breaking changes may be restored in a future release. - -## Docs - -### `mock(config, options)` - -Configure the `fs` module so it is backed by an in-memory file system. - -Calling `mock` sets up a mock file system with two directories by default: `process.cwd()` and `os.tmpdir()` (or `os.tmpDir()` for older Node). When called with no arguments, just these two directories are created. When called with a `config` object, additional files, directories, and symlinks are created. To avoid creating a directory for `process.cwd()` and `os.tmpdir()`, see the [`options`](#options) below. - -Property names of the `config` object are interpreted as relative paths to resources (relative from `process.cwd()`). Property values of the `config` object are interpreted as content or configuration for the generated resources. - -*Note that paths should always use forward slashes (`/`) - even on Windows.* - -### `options` - -The second (optional) argument may include the properties below. - - * `createCwd` - `boolean` Create a directory for `process.cwd()`. This is `true` by default. - * `createTmp` - `boolean` Create a directory for `os.tmpdir()`. This is `true` by default. - -### Creating files - -When `config` property values are a `string` or `Buffer`, a file is created with the provided content. For example, the following configuration creates a single file with string content (in addition to the two default directories). -```js -mock({ - 'path/to/file.txt': 'file content here' -}); -``` - -To create a file with additional properties (owner, permissions, atime, etc.), use the [`mock.file()`](#mockfileproperties) function described below. - -### `mock.file(properties)` - -Create a factory for new files. Supported properties: - - * **content** - `string|Buffer` File contents. - * **mode** - `number` File mode (permission and sticky bits). Defaults to `0666`. - * **uid** - `number` The user id. Defaults to `process.getuid()`. - * **gid** - `number` The group id. Defaults to `process.getgid()`. - * **atime** - `Date` The last file access time. Defaults to `new Date()`. Updated when file contents are accessed. - * **ctime** - `Date` The last file change time. Defaults to `new Date()`. Updated when file owner or permissions change. - * **mtime** - `Date` The last file modification time. Defaults to `new Date()`. Updated when file contents change. - * **birthtime** - `Date` The time of file creation. Defaults to `new Date()`. - -To create a mock filesystem with a very old file named `foo`, you could do something like this: -```js -mock({ - foo: mock.file({ - content: 'file content here', - ctime: new Date(1), - mtime: new Date(1) - }) -}); -``` - -Note that if you want to create a file with the default properties, you can provide a `string` or `Buffer` directly instead of calling `mock.file()`. - -### Creating directories - -When `config` property values are an `Object`, a directory is created. The structure of the object is the same as the `config` object itself. So an empty directory can be created with a simple object literal (`{}`). The following configuration creates a directory containing two files (in addition to the two default directories): -```js -// note that this could also be written as -// mock({'path/to/dir': { /** config */ }}) -mock({ - path: { - to: { - dir: { - file1: 'text content', - file2: Buffer.from([1, 2, 3, 4]) - } - } - } -}); -``` - -To create a directory with additional properties (owner, permissions, atime, etc.), use the [`mock.directory()`](mockdirectoryproperties) function described below. - -### `mock.directory(properties)` - -Create a factory for new directories. Supported properties: - - * **mode** - `number` Directory mode (permission and sticky bits). Defaults to `0777`. - * **uid** - `number` The user id. Defaults to `process.getuid()`. - * **gid** - `number` The group id. Defaults to `process.getgid()`. - * **atime** - `Date` The last directory access time. Defaults to `new Date()`. - * **ctime** - `Date` The last directory change time. Defaults to `new Date()`. Updated when owner or permissions change. - * **mtime** - `Date` The last directory modification time. Defaults to `new Date()`. Updated when an item is added, removed, or renamed. - * **birthtime** - `Date` The time of directory creation. Defaults to `new Date()`. - * **items** - `Object` Directory contents. Members will generate additional files, directories, or symlinks. - -To create a mock filesystem with a directory with the relative path `some/dir` that has a mode of `0755` and two child files, you could do something like this: -```js -mock({ - 'some/dir': mock.directory({ - mode: 0755, - items: { - file1: 'file one content', - file2: Buffer.from([8, 6, 7, 5, 3, 0, 9]) - } - }) -}); -``` - -Note that if you want to create a directory with the default properties, you can provide an `Object` directly instead of calling `mock.directory()`. - -### Creating symlinks - -Using a `string` or a `Buffer` is a shortcut for creating files with default properties. Using an `Object` is a shortcut for creating a directory with default properties. There is no shortcut for creating symlinks. To create a symlink, you need to call the [`mock.symlink()`](#mocksymlinkproperties) function described below. - -### `mock.symlink(properties)` - -Create a factory for new symlinks. Supported properties: - - * **path** - `string` Path to the source (required). - * **mode** - `number` Symlink mode (permission and sticky bits). Defaults to `0666`. - * **uid** - `number` The user id. Defaults to `process.getuid()`. - * **gid** - `number` The group id. Defaults to `process.getgid()`. - * **atime** - `Date` The last symlink access time. Defaults to `new Date()`. - * **ctime** - `Date` The last symlink change time. Defaults to `new Date()`. - * **mtime** - `Date` The last symlink modification time. Defaults to `new Date()`. - * **birthtime** - `Date` The time of symlink creation. Defaults to `new Date()`. - -To create a mock filesystem with a file and a symlink, you could do something like this: -```js -mock({ - 'some/dir': { - 'regular-file': 'file contents', - 'a-symlink': mock.symlink({ - path: 'regular-file' - }) - } -}); -``` - -### Restoring the file system - -### `mock.restore()` - -Restore the `fs` binding to the real file system. This undoes the effect of calling `mock()`. Typically, you would set up a mock file system before running a test and restore the original after. Using a test runner with `beforeEach` and `afterEach` hooks, this might look like the following: - -```js -beforeEach(function() { - mock({ - 'fake-file': 'file contents' - }); -}); -afterEach(mock.restore); -``` - -## Install - -Using `npm`: - -``` -npm install mock-fs --save-dev -``` - -## Caveats - -When you require `mock-fs`, Node's own `fs` module is patched to allow the binding to the underlying file system to be swapped out. If you require `mock-fs` *before* any other modules that modify `fs` (e.g. `graceful-fs`), the mock should behave as expected. - -**Note** `mock-fs` is not compatible with `graceful-fs@3.x` but works with `graceful-fs@4.x`. - -Mock `fs.Stats` objects have the following properties: `dev`, `ino`, `nlink`, `mode`, `size`, `rdev`, `blksize`, `blocks`, `atime`, `ctime`, `mtime`, `birthtime`, `uid`, and `gid`. In addition, all of the `is*()` method are provided (e.g. `isDirectory()`, `isFile()`, et al.). - -Mock file access is controlled based on file mode where `process.getuid()` and `process.getgid()` are available (POSIX systems). On other systems (e.g. Windows) the file mode has no effect. - -Tested on Linux, OSX, and Windows using Node 0.10 through 10.x. Check the tickets for a list of [known issues](https://github.com/tschaub/mock-fs/issues). - -### Using with Jest Snapshot Testing - -`.toMatchSnapshot` in [Jest](https://jestjs.io/docs/en/snapshot-testing) uses `fs` to load existing snapshots. -If `mockFs` is active, Jest isn't able to load existing snapshots. In such case it accepts all snapshots -without diffing the old ones, which breaks the concept of snapshot testing. - -Calling `mock.restore()` in `afterEach` is too late and it's necessary to call it before snapshot matching: - -```js -const actual = testedFunction() -mock.restore() -expect(actual).toMatchSnapshot() -``` - -Note: it's safe to call `mock.restore` multiple times, so it can still be called in `afterEach` and then manually -in test cases which use snapshot testing. - -[![Current Status](https://secure.travis-ci.org/tschaub/mock-fs.png?branch=master)](https://travis-ci.org/tschaub/mock-fs) diff --git a/truebit-implementation/node_modules/mout/.editorconfig b/truebit-implementation/node_modules/mout/.editorconfig deleted file mode 100644 index faaf0d3a..00000000 --- a/truebit-implementation/node_modules/mout/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -; EditorConfig is awesome: http://EditorConfig.org - -; top-most EditorConfig file -root = true - -; base rules -[*] -end_of_line = lf -insert_final_newline = false -indent_style = space -indent_size = 4 -charset = utf-8 -trim_trailing_whitespace = true - -; The default indent on package.json is 2 spaces, better to keep it so we can -; use `npm install --save` and other features that rewrites the package.json -; file automatically -[{bower,package}.json] -indent_style = space -indent_size = 2 diff --git a/truebit-implementation/node_modules/mout/.jshintrc b/truebit-implementation/node_modules/mout/.jshintrc deleted file mode 100644 index bbdb29cf..00000000 --- a/truebit-implementation/node_modules/mout/.jshintrc +++ /dev/null @@ -1,69 +0,0 @@ -{ - // Settings - "passfail" : false, // Stop on first error. - "maxerr" : 50, // Maximum error before stopping. - - - // Predefined globals whom JSHint will ignore. - "browser" : true, // Standard browser globals e.g. `window`, `document`. - "couch" : false, - "dojo" : false, - "jquery" : true, - "mootools" : false, - "node" : false, - "prototypejs" : false, - "rhino" : false, - "wsh" : false, - - // Custom globals. - "predef" : [ - "define", - "require" - ], - - - // Development. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "devel" : false, // Allow developments statements e.g. `console.log();`. - - - // EcmaScript 5. - "es5" : false, // Allow EcmaScript 5 syntax. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - "strict" : false, // Require `use strict` pragma in every file. - - - // The Good Parts. - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "bitwise" : false, // Prohibit bitwise operators (&, |, ^, etc.). - "boss" : true, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "curly" : false, // Require {} for every new block or scope. - "eqeqeq" : true, // Require triple equals i.e. `===`. - "eqnull" : true, // Tolerate use of `== null`. - "evil" : false, // Tolerate use of `eval`. - "expr" : false, // Tolerate `ExpressionStatement` as Programs. - "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : false, // Prohibit variable use before definition. - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "loopfunc" : false, // Allow functions to be defined within loops. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "regexdash" : true, // Tolerate unescaped last dash i.e. `[-...]`. - "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions. - "scripturl" : false, // Tolerate script-targeted URLs. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "undef" : false, // Require all non-global variables be declared before they are used. - - - // Personal styling prefrences. - "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. - "noempty" : true, // Prohipit use of empty blocks. - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "nonew" : true, // Prohibit use of constructors for side-effects. - "onevar" : false, // Allow only one `var` statement per function. - "plusplus" : false, // Prohibit use of `++` & `--`. - "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false // Check against strict whitespace and indentation rules. -} diff --git a/truebit-implementation/node_modules/mout/.npmignore b/truebit-implementation/node_modules/mout/.npmignore deleted file mode 100644 index 1341acd9..00000000 --- a/truebit-implementation/node_modules/mout/.npmignore +++ /dev/null @@ -1,30 +0,0 @@ -# dumb files -# ========== - -.tmp* -.project -.settings/ -.livereload -.DS_Store? -ehthumbs.db -Icon? -Thumbs.db - - -# stuff not needed by node -# ======================== - -node_modules/ -tests/ -_build/ -doc_html/ -coverage/ - -# we keep the doc/ folder in case npm decides to display it in the future -# also good in case user is using an old version or working offline - -# we also keep the src/ folder in case the user still needs the AMD modules -# after build (see issue #102) - -bower.json -build.js diff --git a/truebit-implementation/node_modules/mout/.travis.yml b/truebit-implementation/node_modules/mout/.travis.yml deleted file mode 100644 index 2ea0044f..00000000 --- a/truebit-implementation/node_modules/mout/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ - language: node_js - node_js: - - "iojs" - - "0.10" - - "0.12" - script: - - "npm test --coverage" - - "jshint src" - notifications: - irc: - channels: - - "irc.freenode.org#moutjs" - on_success: change - on_failure: always - use_notice: true - skip_join: true - git: - depth: 10 diff --git a/truebit-implementation/node_modules/mout/CHANGELOG.md b/truebit-implementation/node_modules/mout/CHANGELOG.md deleted file mode 100644 index f4059154..00000000 --- a/truebit-implementation/node_modules/mout/CHANGELOG.md +++ /dev/null @@ -1,189 +0,0 @@ -mout changelog -============== - -v0.11.0 (2014/11/17) --------------------- - - - add `array/take`; - - remove unused variable from `date/totalDaysInMonth`; - - fix case insensitive RegExp cloning on `lang/clone`; - - -v0.10.0 (2014/09/02) --------------------- - - - add `array/equals`; - - add `array/groupBy`; - - add `array/last`; - - add `function/wrap`; - - add `lang/GLOBAL`; - - add `lang/isPrimitive`; - - add `number/MAX_SAFE_INTEGER`; - - add `object/omit`; - - add `object/result`; - - add `object/result`; - - add `random/randString`; - - change `lang/isEmpty` behavior to return `true` for any value that isn't - a collection. - - fix `array/findLastIndex` to stop at zero index; - - improve `function/partial` to accept placeholders; - - improve `math.norm` behavior for values outside the range and for cases - where `val === min === max`; - - improve `object/get` behavior to return properties from any value that is - not `null` or `undefined`; - - move `object/deepEquals` to `lang/deepEquals` (improving the behavior); - - -v0.9.1 (2014/04/08) -------------------- - - - fix `array/slice` behavior when start and end are higher than length. - - -v0.9.0 (2014/02/04) -------------------- - - - add `date/quarter`; - - add `function/constant`; - - add `random/randBool`; - - add un-padded 12-hour (`%l`) to `date/strftime`; - - fix `array/slice` on IE < 9 by using a custom implementation. - - fix `object/forIn` iteration for IE < 9 constructor property; - - improve `lang/inheritPrototype` by returning the `prototype`; - - improve `string/removeNonWord` to cover more chars; - - improve `string/repeat` performance; - - improve `string/unescapeHtml` by accepting leading zeros for `'`; - - -v0.8.0 (2013/11/22) -------------------- - - - add `array/findLast`. - - add `array/findLastIndex`. - - add `array/slice` and use it internally. - - add `array/sortBy` - - add `function/awaitDelay`. - - add `function/identity` - - add `number/isNaN`. - - add `number/nth`. - - add `number/ordinal`. - - allows nested replacement patterns in `string/interpolate`. - - change `function/makeIterator_` behavior (uses `identity` by default). - - simplify `string/escapeRegExp`. - - support custom equality on `array/compare`. - - -v0.7.1 (2013/09/18) -------------------- - - - fix `null` value handling in object/get. - - -v0.7.0 (2013/09/05) -------------------- - - - add bower ignores. - - add german translation for date localization. - - alias `function` package as `fn` since "function" is a reserved keyword. - - allow second argument on `array/pick`. - - improve `string/makePath` to not remove "//" after protocol. - - make sure methods inside `number` package works with mixed types. - - support arrays on `queryString/encode`. - - support multiple values for same property on `queryString/decode`. - - add `cancel()` method to `throttled/debounced` functions. - - add `function/times`. - - add `lang/toNumber`. - - add `string/insert`. - - add `super_` to constructor on `lang/inheritPrototype`. - - -v0.6.0 (2013/05/22) -------------------- - - - add optional delimeter to `string/unCamelCase` - - allow custom char on `number/pad` - - allow underscore characters in `string/removeNonWord` - - accept `level` on `array/flatten` instead of a flag - - convert underscores to camelCase in `string/camelCase` - - remove `create()` from number/currencyFormat - - add `date/dayOfTheYear` - - add `date/diff` - - add `date/isSame` - - add `date/startOf` - - add `date/strftime` - - add `date/timezoneAbbr` - - add `date/timezoneOffset` - - add `date/totalDaysInYear` - - add `date/weekOfTheYear` - - add `function/timeout` - - add `object/bindAll` - - add `object/functions` - - add `time/convert` - - -v0.5.0 (2013/04/04) -------------------- - - - add `array/collect` - - add `callback` parameter to `object/equals` and `object/deepEquals` to allow - custom compare operations. - - normalize behavior in `array/*` methods to treat `null` values as empty - arrays when reading from array - - add `date/parseIso` - - add `date/isLeapYear` - - add `date/totalDaysInMonth` - - add `object/deepMatches` - - change `function/makeIterator_` to use `deepMatches` (affects nearly all - iteration methods) - - add `thisObj` parameter to `array/min` and `array/max` - - -v0.4.0 (2013/02/26) -------------------- - - - add `object/equals` - - add `object/deepEquals` - - add `object/matches`. - - add `lang/is` and `lang/isnt`. - - add `lang/isInteger`. - - add `array/findIndex`. - - add shorthand syntax to `array/*`, `object/*` and `collection/*` methods. - - improve `number/sign` behavior when value is NaN or +0 or -0. - - improve `lang/isNaN` to actually check if value *is not a number* without - coercing value; so `[]`, `""`, `null` and `"12"` are considered NaN (#39). - - improve `string/contains` to match ES6 behavior (add fromIndex argument). - - -v0.3.0 (2013/02/01) -------------------- - - - add `lang/clone`. - - add `lang/toString`. - - add `string/replace`. - - add `string/WHITE_SPACES` - - rename `function/curry` to `function/partial`. - - allow custom chars in `string/trim`, `ltrim`, and `rtrim`. - - convert values to strings in the `string/*` functions. - - -v0.2.0 (2013/01/13) -------------------- - - - fix bug in `math/ceil` for negative radixes. - - change `object/deepFillIn` and `object/deepMixIn` to recurse only if both - existing and new values are plain objects. Will not recurse into arrays - or objects not created by the Object constructor. - - add `lang/isPlainObject` to check if a file is a valid object and is created - by the Object constructor - - change `lang/clone` behavior when dealing with custom types (avoid cloning - it by default) and add second argument to allow custom behavior if needed. - - rename `lang/clone` to `lang/deepClone`. - - add VERSION property to index.js - - simplify `math/floor`, `math/round`, `math/ceil` and `math/countSteps`. - - -v0.1.0 (2013/01/09) -------------------- - -- Rename project from "amd-utils" to "mout" - diff --git a/truebit-implementation/node_modules/mout/CONTRIBUTING.md b/truebit-implementation/node_modules/mout/CONTRIBUTING.md deleted file mode 100644 index 65d9add1..00000000 --- a/truebit-implementation/node_modules/mout/CONTRIBUTING.md +++ /dev/null @@ -1,61 +0,0 @@ -# Contributing - -Fork the repo at https://github.com/mout/mout - - > "Write clearly, don't be too clever" - The Elements of Programming Style - -Avoid unnamed functions and follow the other modules structure. By only using named functions it will be easier to extract the code from the AMD module if needed and it will also give better error messages, JavaScript minifiers like [Google Closure Compiler](http://code.google.com/closure/compiler/) and [UglifyJS](https://github.com/mishoo/UglifyJS) will make sure code is as small/optimized as possible. - - > "Make it clear before you make it faster." - The Elements of Programming Style - -Be sure to always create tests for each proposed module. Features will only be merged if they contain proper tests and documentation. - - > "Good code is its own best documentation." - Steve McConnell - -We should do a code review before merging to make sure names makes sense and implementation is as good as possible. - -Try to split your pull requests into logical groups, the smaller the easier to be reviewed/merged. - - - -## Tests & Code Coverage ## - -Tests can be found inside the `tests` folder, to execute them in the browser open the `tests/runner.html`. The same tests also work on node.js by running `npm test`. - -We should have tests for all methods and ensure we have a high code coverage through our continuous integration server ([travis](https://travis-ci.org/mout/mout)). When you ask for a pull request Travis will automatically run the tests on node.js and check the code coverage as well. - -We run `node build pkg` automatically before any `npm test`, so specs and packages should always be in sync. (will avoid human mistakes) - -To check code coverage run `npm test --coverage`, it will generate the reports inside the `coverage` folder and also log the results. Please note that node.js doesn't execute all code branches since we have some conditionals that are only met on old JavaScript engines (eg. IE 7-8), so we will never have 100% code coverage (but should be close to it). - - - -## Build Script ## - -The [build script](https://github.com/mout/mout/wiki/Build-Script) can be extremely helpful and can avoid human mistakes, use it. - - - -## Admins / Pull Requests ## - -Even if you are an admin (have commit rights) please do pull requests when adding new features or changing current behavior, that way we can review the work and discuss. Feel free to push changes that doesn't affect behavior without asking for a pull request (readme, changelog, build script, typos, refactoring, ...). - - - -## Large changes ## - -If you are proposing some major change, please create an issue to discuss it first. (maybe it's outside the scope of the project) - - - -## Questions / IRC / Wiki / Issue Tracker ## - -When in doubt ask someone on IRC to help you ([#moutjs on irc.freenode.net](http://webchat.freenode.net/?channels=moutjs)) or create a [new issue](http://github.com/mout/mout/issues). - -The [project wiki](https://github.com/mout/mout/wiki) can also be a good resource of information. - - ---- - -Check the [contributors list at github](https://github.com/mout/mout/contributors). - diff --git a/truebit-implementation/node_modules/mout/LICENSE.md b/truebit-implementation/node_modules/mout/LICENSE.md deleted file mode 100644 index e9ccc2be..00000000 --- a/truebit-implementation/node_modules/mout/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# The MIT License (MIT) -## Copyright (c) 2012, 2013 moutjs team and contributors (http://moutjs.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/mout/README.md b/truebit-implementation/node_modules/mout/README.md deleted file mode 100644 index ebc3a9ec..00000000 --- a/truebit-implementation/node_modules/mout/README.md +++ /dev/null @@ -1,63 +0,0 @@ -![mout](http://moutjs.com/logo.png "Modular JavaScript Utilties") - -http://moutjs.com/ - -[![Build Status](https://travis-ci.org/mout/mout.svg?branch=master)](https://travis-ci.org/mout/mout) - -All code is library agnostic and consist mostly of helper methods that aren't -directly related with the DOM, the purpose of this library isn't to replace -Dojo, jQuery, YUI, Mootools, etc, but to provide modular solutions for common -problems that aren't solved by most of them. Consider it as a crossbrowser -JavaScript standard library. - - - -## Main goals ## - - - increase code reuse; - - be clear (code should be clean/readable); - - be easy to debug; - - be easy to maintain; - - follow best practices; - - follow standards when possible; - - **don't convert JavaScript into another language!** - - be compatible with other frameworks; - - be modular; - - have unit tests for all modules; - - work on multiple environments (IE7+, modern browsers, node.js); - - - -## What shouldn't be here ## - - - UI components; - - CSS selector engine; - - Event system - pub/sub; - - Template engine; - - Anything that isn't generic enough to be on a standard library; - - Anything that could be a separate library and/or isn't a modular utility... - - - -## API Documentation ## - -Online documentation can be found at http://moutjs.com/ or inside the -`doc` folder. - - - -## FAQ / Wiki / IRC ## - -For more info about project structure, design decisions, tips, how to -contribute, build system, etc, please check the [project -wiki](https://github.com/mout/mout/wiki). - -We also have an IRC channel [#moutjs on -irc.freenode.net](http://webchat.freenode.net/?channels=moutjs) - - - -## License ## - -Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php). - diff --git a/truebit-implementation/node_modules/mout/array.js b/truebit-implementation/node_modules/mout/array.js deleted file mode 100644 index d0b7c047..00000000 --- a/truebit-implementation/node_modules/mout/array.js +++ /dev/null @@ -1,55 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'equals' : require('./array/equals'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'findLast' : require('./array/findLast'), - 'findLastIndex' : require('./array/findLastIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'groupBy' : require('./array/groupBy'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'last' : require('./array/last'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'reverse' : require('./array/reverse'), - 'shuffle' : require('./array/shuffle'), - 'slice' : require('./array/slice'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'sortBy' : require('./array/sortBy'), - 'split' : require('./array/split'), - 'take' : require('./array/take'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - - diff --git a/truebit-implementation/node_modules/mout/array/append.js b/truebit-implementation/node_modules/mout/array/append.js deleted file mode 100644 index bf74037e..00000000 --- a/truebit-implementation/node_modules/mout/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ - - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - module.exports = append; - diff --git a/truebit-implementation/node_modules/mout/array/collect.js b/truebit-implementation/node_modules/mout/array/collect.js deleted file mode 100644 index 58637493..00000000 --- a/truebit-implementation/node_modules/mout/array/collect.js +++ /dev/null @@ -1,27 +0,0 @@ -var append = require('./append'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - module.exports = collect; - - diff --git a/truebit-implementation/node_modules/mout/array/combine.js b/truebit-implementation/node_modules/mout/array/combine.js deleted file mode 100644 index d66e6212..00000000 --- a/truebit-implementation/node_modules/mout/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - module.exports = combine; - diff --git a/truebit-implementation/node_modules/mout/array/compact.js b/truebit-implementation/node_modules/mout/array/compact.js deleted file mode 100644 index 74c176ed..00000000 --- a/truebit-implementation/node_modules/mout/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -var filter = require('./filter'); - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - module.exports = compact; - diff --git a/truebit-implementation/node_modules/mout/array/contains.js b/truebit-implementation/node_modules/mout/array/contains.js deleted file mode 100644 index 92bb6ad9..00000000 --- a/truebit-implementation/node_modules/mout/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - module.exports = contains; - diff --git a/truebit-implementation/node_modules/mout/array/difference.js b/truebit-implementation/node_modules/mout/array/difference.js deleted file mode 100644 index ca57524d..00000000 --- a/truebit-implementation/node_modules/mout/array/difference.js +++ /dev/null @@ -1,23 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var some = require('./some'); -var contains = require('./contains'); -var slice = require('./slice'); - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = slice(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = difference; - - diff --git a/truebit-implementation/node_modules/mout/array/equals.js b/truebit-implementation/node_modules/mout/array/equals.js deleted file mode 100644 index 1a204303..00000000 --- a/truebit-implementation/node_modules/mout/array/equals.js +++ /dev/null @@ -1,30 +0,0 @@ -var is = require('../lang/is'); -var isArray = require('../lang/isArray'); -var every = require('./every'); - - /** - * Compares if both arrays have the same elements - */ - function equals(a, b, callback){ - callback = callback || is; - - if (!isArray(a) || !isArray(b)) { - return callback(a, b); - } - - if (a.length !== b.length) { - return false; - } - - return every(a, makeCompare(callback), b); - } - - function makeCompare(callback) { - return function(value, i) { - return i in this && callback(value, this[i]); - }; - } - - module.exports = equals; - - diff --git a/truebit-implementation/node_modules/mout/array/every.js b/truebit-implementation/node_modules/mout/array/every.js deleted file mode 100644 index ac598832..00000000 --- a/truebit-implementation/node_modules/mout/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - module.exports = every; - diff --git a/truebit-implementation/node_modules/mout/array/filter.js b/truebit-implementation/node_modules/mout/array/filter.js deleted file mode 100644 index f0e74199..00000000 --- a/truebit-implementation/node_modules/mout/array/filter.js +++ /dev/null @@ -1,26 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = filter; - - diff --git a/truebit-implementation/node_modules/mout/array/find.js b/truebit-implementation/node_modules/mout/array/find.js deleted file mode 100644 index b4a73131..00000000 --- a/truebit-implementation/node_modules/mout/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -var findIndex = require('./findIndex'); - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - module.exports = find; - - diff --git a/truebit-implementation/node_modules/mout/array/findIndex.js b/truebit-implementation/node_modules/mout/array/findIndex.js deleted file mode 100644 index 53f22a5f..00000000 --- a/truebit-implementation/node_modules/mout/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - module.exports = findIndex; - diff --git a/truebit-implementation/node_modules/mout/array/findLast.js b/truebit-implementation/node_modules/mout/array/findLast.js deleted file mode 100644 index 84ba4bf1..00000000 --- a/truebit-implementation/node_modules/mout/array/findLast.js +++ /dev/null @@ -1,13 +0,0 @@ -var findLastIndex = require('./findLastIndex'); - - /** - * Returns last item that matches criteria - */ - function findLast(arr, iterator, thisObj){ - var idx = findLastIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - module.exports = findLast; - - diff --git a/truebit-implementation/node_modules/mout/array/findLastIndex.js b/truebit-implementation/node_modules/mout/array/findLastIndex.js deleted file mode 100644 index b8330f2f..00000000 --- a/truebit-implementation/node_modules/mout/array/findLastIndex.js +++ /dev/null @@ -1,24 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns the index of the last item that matches criteria - */ - function findLastIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var n = arr.length; - while (--n >= 0) { - if (iterator(arr[n], n, arr)) { - return n; - } - } - - return -1; - } - - module.exports = findLastIndex; - - diff --git a/truebit-implementation/node_modules/mout/array/flatten.js b/truebit-implementation/node_modules/mout/array/flatten.js deleted file mode 100644 index 3aad385d..00000000 --- a/truebit-implementation/node_modules/mout/array/flatten.js +++ /dev/null @@ -1,45 +0,0 @@ -var isArray = require('../lang/isArray'); -var append = require('./append'); - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If level is specified, it will only flatten up to that level. - */ - function flatten(arr, level) { - if (arr == null) { - return []; - } - - level = level == null ? -1 : level; - return flattenTo(arr, [], level); - } - - module.exports = flatten; - - - diff --git a/truebit-implementation/node_modules/mout/array/forEach.js b/truebit-implementation/node_modules/mout/array/forEach.js deleted file mode 100644 index 268e506f..00000000 --- a/truebit-implementation/node_modules/mout/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - module.exports = forEach; - - diff --git a/truebit-implementation/node_modules/mout/array/groupBy.js b/truebit-implementation/node_modules/mout/array/groupBy.js deleted file mode 100644 index af6f434e..00000000 --- a/truebit-implementation/node_modules/mout/array/groupBy.js +++ /dev/null @@ -1,30 +0,0 @@ -var forEach = require('../array/forEach'); -var identity = require('../function/identity'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Bucket the array values. - */ - function groupBy(arr, categorize, thisObj) { - if (categorize) { - categorize = makeIterator(categorize, thisObj); - } else { - // Default to identity function. - categorize = identity; - } - - var buckets = {}; - forEach(arr, function(element) { - var bucket = categorize(element); - if (!(bucket in buckets)) { - buckets[bucket] = []; - } - - buckets[bucket].push(element); - }); - - return buckets; - } - - module.exports = groupBy; - diff --git a/truebit-implementation/node_modules/mout/array/indexOf.js b/truebit-implementation/node_modules/mout/array/indexOf.js deleted file mode 100644 index 6a9ac832..00000000 --- a/truebit-implementation/node_modules/mout/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - module.exports = indexOf; - diff --git a/truebit-implementation/node_modules/mout/array/insert.js b/truebit-implementation/node_modules/mout/array/insert.js deleted file mode 100644 index 20bd442a..00000000 --- a/truebit-implementation/node_modules/mout/array/insert.js +++ /dev/null @@ -1,15 +0,0 @@ -var difference = require('./difference'); -var slice = require('./slice'); - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(slice(arguments, 1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - module.exports = insert; - diff --git a/truebit-implementation/node_modules/mout/array/intersection.js b/truebit-implementation/node_modules/mout/array/intersection.js deleted file mode 100644 index 34957ab1..00000000 --- a/truebit-implementation/node_modules/mout/array/intersection.js +++ /dev/null @@ -1,24 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var every = require('./every'); -var contains = require('./contains'); -var slice = require('./slice'); - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = slice(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - module.exports = intersection; - - diff --git a/truebit-implementation/node_modules/mout/array/invoke.js b/truebit-implementation/node_modules/mout/array/invoke.js deleted file mode 100644 index 32ec5841..00000000 --- a/truebit-implementation/node_modules/mout/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -var slice = require('./slice'); - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = slice(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - module.exports = invoke; - diff --git a/truebit-implementation/node_modules/mout/array/join.js b/truebit-implementation/node_modules/mout/array/join.js deleted file mode 100644 index 71d8bd20..00000000 --- a/truebit-implementation/node_modules/mout/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -var filter = require('./filter'); - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - module.exports = join; - diff --git a/truebit-implementation/node_modules/mout/array/last.js b/truebit-implementation/node_modules/mout/array/last.js deleted file mode 100644 index d80ab2b9..00000000 --- a/truebit-implementation/node_modules/mout/array/last.js +++ /dev/null @@ -1,16 +0,0 @@ - - - /** - * Returns last element of array. - */ - function last(arr){ - if (arr == null || arr.length < 1) { - return undefined; - } - - return arr[arr.length - 1]; - } - - module.exports = last; - - diff --git a/truebit-implementation/node_modules/mout/array/lastIndexOf.js b/truebit-implementation/node_modules/mout/array/lastIndexOf.js deleted file mode 100644 index ee44a25b..00000000 --- a/truebit-implementation/node_modules/mout/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - module.exports = lastIndexOf; - diff --git a/truebit-implementation/node_modules/mout/array/map.js b/truebit-implementation/node_modules/mout/array/map.js deleted file mode 100644 index 7b7fb331..00000000 --- a/truebit-implementation/node_modules/mout/array/map.js +++ /dev/null @@ -1,22 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - module.exports = map; - diff --git a/truebit-implementation/node_modules/mout/array/max.js b/truebit-implementation/node_modules/mout/array/max.js deleted file mode 100644 index 0b8f2594..00000000 --- a/truebit-implementation/node_modules/mout/array/max.js +++ /dev/null @@ -1,34 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = max; - - diff --git a/truebit-implementation/node_modules/mout/array/min.js b/truebit-implementation/node_modules/mout/array/min.js deleted file mode 100644 index ed6cc6a1..00000000 --- a/truebit-implementation/node_modules/mout/array/min.js +++ /dev/null @@ -1,34 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - module.exports = min; - - diff --git a/truebit-implementation/node_modules/mout/array/pick.js b/truebit-implementation/node_modules/mout/array/pick.js deleted file mode 100644 index 64086784..00000000 --- a/truebit-implementation/node_modules/mout/array/pick.js +++ /dev/null @@ -1,31 +0,0 @@ -var randInt = require('../random/randInt'); - - /** - * Remove random item(s) from the Array and return it. - * Returns an Array of items if [nItems] is provided or a single item if - * it isn't specified. - */ - function pick(arr, nItems){ - if (nItems != null) { - var result = []; - if (nItems > 0 && arr && arr.length) { - nItems = nItems > arr.length? arr.length : nItems; - while (nItems--) { - result.push( pickOne(arr) ); - } - } - return result; - } - return (arr && arr.length)? pickOne(arr) : void(0); - } - - - function pickOne(arr){ - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - - module.exports = pick; - - diff --git a/truebit-implementation/node_modules/mout/array/pluck.js b/truebit-implementation/node_modules/mout/array/pluck.js deleted file mode 100644 index fef4043b..00000000 --- a/truebit-implementation/node_modules/mout/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - module.exports = pluck; - - diff --git a/truebit-implementation/node_modules/mout/array/range.js b/truebit-implementation/node_modules/mout/array/range.js deleted file mode 100644 index 31d3c770..00000000 --- a/truebit-implementation/node_modules/mout/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - module.exports = range; - - diff --git a/truebit-implementation/node_modules/mout/array/reduce.js b/truebit-implementation/node_modules/mout/array/reduce.js deleted file mode 100644 index 827f428f..00000000 --- a/truebit-implementation/node_modules/mout/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ - - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - module.exports = reduce; - diff --git a/truebit-implementation/node_modules/mout/array/reduceRight.js b/truebit-implementation/node_modules/mout/array/reduceRight.js deleted file mode 100644 index e36fd4aa..00000000 --- a/truebit-implementation/node_modules/mout/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ - - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - module.exports = reduceRight; - diff --git a/truebit-implementation/node_modules/mout/array/reject.js b/truebit-implementation/node_modules/mout/array/reject.js deleted file mode 100644 index 0cfc8b1a..00000000 --- a/truebit-implementation/node_modules/mout/array/reject.js +++ /dev/null @@ -1,25 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - module.exports = reject; - diff --git a/truebit-implementation/node_modules/mout/array/remove.js b/truebit-implementation/node_modules/mout/array/remove.js deleted file mode 100644 index aa6517db..00000000 --- a/truebit-implementation/node_modules/mout/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - module.exports = remove; - diff --git a/truebit-implementation/node_modules/mout/array/removeAll.js b/truebit-implementation/node_modules/mout/array/removeAll.js deleted file mode 100644 index d5f7f3b6..00000000 --- a/truebit-implementation/node_modules/mout/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -var indexOf = require('./indexOf'); - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - module.exports = removeAll; - diff --git a/truebit-implementation/node_modules/mout/array/reverse.js b/truebit-implementation/node_modules/mout/array/reverse.js deleted file mode 100644 index a35cc1a3..00000000 --- a/truebit-implementation/node_modules/mout/array/reverse.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a copy of the array in reversed order. - */ - function reverse(array) { - var copy = array.slice(); - copy.reverse(); - return copy; - } - - module.exports = reverse; - - diff --git a/truebit-implementation/node_modules/mout/array/shuffle.js b/truebit-implementation/node_modules/mout/array/shuffle.js deleted file mode 100644 index 99d0660f..00000000 --- a/truebit-implementation/node_modules/mout/array/shuffle.js +++ /dev/null @@ -1,28 +0,0 @@ -var randInt = require('../random/randInt'); - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - module.exports = shuffle; - diff --git a/truebit-implementation/node_modules/mout/array/slice.js b/truebit-implementation/node_modules/mout/array/slice.js deleted file mode 100644 index 0a4d5cf7..00000000 --- a/truebit-implementation/node_modules/mout/array/slice.js +++ /dev/null @@ -1,35 +0,0 @@ - - - /** - * Create slice of source array or array-like object - */ - function slice(arr, start, end){ - var len = arr.length; - - if (start == null) { - start = 0; - } else if (start < 0) { - start = Math.max(len + start, 0); - } else { - start = Math.min(start, len); - } - - if (end == null) { - end = len; - } else if (end < 0) { - end = Math.max(len + end, 0); - } else { - end = Math.min(end, len); - } - - var result = []; - while (start < end) { - result.push(arr[start++]); - } - - return result; - } - - module.exports = slice; - - diff --git a/truebit-implementation/node_modules/mout/array/some.js b/truebit-implementation/node_modules/mout/array/some.js deleted file mode 100644 index 8d17772b..00000000 --- a/truebit-implementation/node_modules/mout/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -var makeIterator = require('../function/makeIterator_'); - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - module.exports = some; - diff --git a/truebit-implementation/node_modules/mout/array/sort.js b/truebit-implementation/node_modules/mout/array/sort.js deleted file mode 100644 index 7807339b..00000000 --- a/truebit-implementation/node_modules/mout/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ - - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - module.exports = mergeSort; - - diff --git a/truebit-implementation/node_modules/mout/array/sortBy.js b/truebit-implementation/node_modules/mout/array/sortBy.js deleted file mode 100644 index b84544c1..00000000 --- a/truebit-implementation/node_modules/mout/array/sortBy.js +++ /dev/null @@ -1,19 +0,0 @@ -var sort = require('./sort'); -var makeIterator = require('../function/makeIterator_'); - - /* - * Sort array by the result of the callback - */ - function sortBy(arr, callback, context){ - callback = makeIterator(callback, context); - - return sort(arr, function(a, b) { - a = callback(a); - b = callback(b); - return (a < b) ? -1 : ((a > b) ? 1 : 0); - }); - } - - module.exports = sortBy; - - diff --git a/truebit-implementation/node_modules/mout/array/split.js b/truebit-implementation/node_modules/mout/array/split.js deleted file mode 100644 index 4f3ba50c..00000000 --- a/truebit-implementation/node_modules/mout/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ - - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - module.exports = split; - diff --git a/truebit-implementation/node_modules/mout/array/take.js b/truebit-implementation/node_modules/mout/array/take.js deleted file mode 100644 index bd8eb071..00000000 --- a/truebit-implementation/node_modules/mout/array/take.js +++ /dev/null @@ -1,24 +0,0 @@ - - - /** - * Iterates over a callback a set amount of times - * returning the results - */ - function take(n, callback, thisObj){ - var i = -1; - var arr = []; - if( !thisObj ){ - while(++i < n){ - arr[i] = callback(i, n); - } - } else { - while(++i < n){ - arr[i] = callback.call(thisObj, i, n); - } - } - return arr; - } - - module.exports = take; - - diff --git a/truebit-implementation/node_modules/mout/array/toLookup.js b/truebit-implementation/node_modules/mout/array/toLookup.js deleted file mode 100644 index ce4c55dd..00000000 --- a/truebit-implementation/node_modules/mout/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -var isFunction = require('../lang/isFunction'); - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - module.exports = toLookup; - diff --git a/truebit-implementation/node_modules/mout/array/union.js b/truebit-implementation/node_modules/mout/array/union.js deleted file mode 100644 index f1334a91..00000000 --- a/truebit-implementation/node_modules/mout/array/union.js +++ /dev/null @@ -1,19 +0,0 @@ -var unique = require('./unique'); -var append = require('./append'); - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - module.exports = union; - - diff --git a/truebit-implementation/node_modules/mout/array/unique.js b/truebit-implementation/node_modules/mout/array/unique.js deleted file mode 100644 index 5db25103..00000000 --- a/truebit-implementation/node_modules/mout/array/unique.js +++ /dev/null @@ -1,25 +0,0 @@ -var filter = require('./filter'); - - /** - * @return {array} Array of unique items - */ - function unique(arr, compare){ - compare = compare || isEqual; - return filter(arr, function(item, i, arr){ - var n = arr.length; - while (++i < n) { - if ( compare(item, arr[i]) ) { - return false; - } - } - return true; - }); - } - - function isEqual(a, b){ - return a === b; - } - - module.exports = unique; - - diff --git a/truebit-implementation/node_modules/mout/array/xor.js b/truebit-implementation/node_modules/mout/array/xor.js deleted file mode 100644 index c125a996..00000000 --- a/truebit-implementation/node_modules/mout/array/xor.js +++ /dev/null @@ -1,26 +0,0 @@ -var unique = require('./unique'); -var filter = require('./filter'); -var contains = require('./contains'); - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - module.exports = xor; - - diff --git a/truebit-implementation/node_modules/mout/array/zip.js b/truebit-implementation/node_modules/mout/array/zip.js deleted file mode 100644 index 8bce9c07..00000000 --- a/truebit-implementation/node_modules/mout/array/zip.js +++ /dev/null @@ -1,28 +0,0 @@ -var max = require('./max'); -var map = require('./map'); - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1; - while (++i < len) { - // jshint loopfunc: true - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - module.exports = zip; - - diff --git a/truebit-implementation/node_modules/mout/collection.js b/truebit-implementation/node_modules/mout/collection.js deleted file mode 100644 index d5cf6cad..00000000 --- a/truebit-implementation/node_modules/mout/collection.js +++ /dev/null @@ -1,22 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - - diff --git a/truebit-implementation/node_modules/mout/collection/contains.js b/truebit-implementation/node_modules/mout/collection/contains.js deleted file mode 100644 index a73f994b..00000000 --- a/truebit-implementation/node_modules/mout/collection/contains.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrContains = require('../array/contains'); -var objContains = require('../object/contains'); - - /** - */ - module.exports = make(arrContains, objContains); - - diff --git a/truebit-implementation/node_modules/mout/collection/every.js b/truebit-implementation/node_modules/mout/collection/every.js deleted file mode 100644 index 300e03c5..00000000 --- a/truebit-implementation/node_modules/mout/collection/every.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrEvery = require('../array/every'); -var objEvery = require('../object/every'); - - /** - */ - module.exports = make(arrEvery, objEvery); - - diff --git a/truebit-implementation/node_modules/mout/collection/filter.js b/truebit-implementation/node_modules/mout/collection/filter.js deleted file mode 100644 index 38757005..00000000 --- a/truebit-implementation/node_modules/mout/collection/filter.js +++ /dev/null @@ -1,23 +0,0 @@ -var forEach = require('./forEach'); -var makeIterator = require('../function/makeIterator_'); - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - module.exports = filter; - - diff --git a/truebit-implementation/node_modules/mout/collection/find.js b/truebit-implementation/node_modules/mout/collection/find.js deleted file mode 100644 index 14317e64..00000000 --- a/truebit-implementation/node_modules/mout/collection/find.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrFind = require('../array/find'); -var objFind = require('../object/find'); - - /** - * Find value that returns true on iterator check. - */ - module.exports = make(arrFind, objFind); - - diff --git a/truebit-implementation/node_modules/mout/collection/forEach.js b/truebit-implementation/node_modules/mout/collection/forEach.js deleted file mode 100644 index 6e28dcb1..00000000 --- a/truebit-implementation/node_modules/mout/collection/forEach.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrForEach = require('../array/forEach'); -var objForEach = require('../object/forOwn'); - - /** - */ - module.exports = make(arrForEach, objForEach); - - diff --git a/truebit-implementation/node_modules/mout/collection/make_.js b/truebit-implementation/node_modules/mout/collection/make_.js deleted file mode 100644 index 4fb8a81d..00000000 --- a/truebit-implementation/node_modules/mout/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ -var slice = require('../array/slice'); - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = slice(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - module.exports = makeCollectionMethod; - - diff --git a/truebit-implementation/node_modules/mout/collection/map.js b/truebit-implementation/node_modules/mout/collection/map.js deleted file mode 100644 index fc157f53..00000000 --- a/truebit-implementation/node_modules/mout/collection/map.js +++ /dev/null @@ -1,23 +0,0 @@ -var isObject = require('../lang/isObject'); -var values = require('../object/values'); -var arrMap = require('../array/map'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - module.exports = map; - - diff --git a/truebit-implementation/node_modules/mout/collection/max.js b/truebit-implementation/node_modules/mout/collection/max.js deleted file mode 100644 index a8490e7e..00000000 --- a/truebit-implementation/node_modules/mout/collection/max.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMax = require('../array/max'); -var objMax = require('../object/max'); - - /** - * Get maximum value inside collection - */ - module.exports = make(arrMax, objMax); - - diff --git a/truebit-implementation/node_modules/mout/collection/min.js b/truebit-implementation/node_modules/mout/collection/min.js deleted file mode 100644 index 51d9f148..00000000 --- a/truebit-implementation/node_modules/mout/collection/min.js +++ /dev/null @@ -1,10 +0,0 @@ -var make = require('./make_'); -var arrMin = require('../array/min'); -var objMin = require('../object/min'); - - /** - * Get minimum value inside collection. - */ - module.exports = make(arrMin, objMin); - - diff --git a/truebit-implementation/node_modules/mout/collection/pluck.js b/truebit-implementation/node_modules/mout/collection/pluck.js deleted file mode 100644 index 9b283776..00000000 --- a/truebit-implementation/node_modules/mout/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -var map = require('./map'); - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - module.exports = pluck; - - diff --git a/truebit-implementation/node_modules/mout/collection/reduce.js b/truebit-implementation/node_modules/mout/collection/reduce.js deleted file mode 100644 index 4c075735..00000000 --- a/truebit-implementation/node_modules/mout/collection/reduce.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrReduce = require('../array/reduce'); -var objReduce = require('../object/reduce'); - - /** - */ - module.exports = make(arrReduce, objReduce); - - diff --git a/truebit-implementation/node_modules/mout/collection/reject.js b/truebit-implementation/node_modules/mout/collection/reject.js deleted file mode 100644 index 2a92e3b3..00000000 --- a/truebit-implementation/node_modules/mout/collection/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - module.exports = reject; - - diff --git a/truebit-implementation/node_modules/mout/collection/size.js b/truebit-implementation/node_modules/mout/collection/size.js deleted file mode 100644 index 244e33e6..00000000 --- a/truebit-implementation/node_modules/mout/collection/size.js +++ /dev/null @@ -1,19 +0,0 @@ -var isArray = require('../lang/isArray'); -var objSize = require('../object/size'); - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - module.exports = size; - - diff --git a/truebit-implementation/node_modules/mout/collection/some.js b/truebit-implementation/node_modules/mout/collection/some.js deleted file mode 100644 index 48fd252e..00000000 --- a/truebit-implementation/node_modules/mout/collection/some.js +++ /dev/null @@ -1,9 +0,0 @@ -var make = require('./make_'); -var arrSome = require('../array/some'); -var objSome = require('../object/some'); - - /** - */ - module.exports = make(arrSome, objSome); - - diff --git a/truebit-implementation/node_modules/mout/date.js b/truebit-implementation/node_modules/mout/date.js deleted file mode 100644 index 9c2efe95..00000000 --- a/truebit-implementation/node_modules/mout/date.js +++ /dev/null @@ -1,22 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'quarter' : require('./date/quarter'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - - diff --git a/truebit-implementation/node_modules/mout/date/dayOfTheYear.js b/truebit-implementation/node_modules/mout/date/dayOfTheYear.js deleted file mode 100644 index 85905c5a..00000000 --- a/truebit-implementation/node_modules/mout/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - module.exports = dayOfTheYear; - - diff --git a/truebit-implementation/node_modules/mout/date/diff.js b/truebit-implementation/node_modules/mout/date/diff.js deleted file mode 100644 index 1131cdcb..00000000 --- a/truebit-implementation/node_modules/mout/date/diff.js +++ /dev/null @@ -1,130 +0,0 @@ -var totalDaysInMonth = require('./totalDaysInMonth'); -var totalDaysInYear = require('./totalDaysInYear'); -var convert = require('../time/convert'); - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - module.exports = diff; - - diff --git a/truebit-implementation/node_modules/mout/date/i18n/de-DE.js b/truebit-implementation/node_modules/mout/date/i18n/de-DE.js deleted file mode 100644 index b3ab6207..00000000 --- a/truebit-implementation/node_modules/mout/date/i18n/de-DE.js +++ /dev/null @@ -1,61 +0,0 @@ - - // de-DE (German) - module.exports = { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Januar", - "Februar", - "März", - "April", - "Mai", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember" - ], - - "months_abbr" : [ - "Jan", - "Febr", - "März", - "Apr", - "Mai", - "Juni", - "Juli", - "Aug", - "Sept", - "Okt", - "Nov", - "Dez" - ], - - "days" : [ - "Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag" - ], - - "days_abbr" : [ - "So", - "Mo", - "Di", - "Mi", - "Do", - "Fr", - "Sa" - ] - }; - diff --git a/truebit-implementation/node_modules/mout/date/i18n/en-US.js b/truebit-implementation/node_modules/mout/date/i18n/en-US.js deleted file mode 100644 index f9526ce4..00000000 --- a/truebit-implementation/node_modules/mout/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ - - // en-US (English, United States) - module.exports = { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; - diff --git a/truebit-implementation/node_modules/mout/date/i18n/pt-BR.js b/truebit-implementation/node_modules/mout/date/i18n/pt-BR.js deleted file mode 100644 index 71ebadb5..00000000 --- a/truebit-implementation/node_modules/mout/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ - - // pt-BR (Brazillian Portuguese) - module.exports = { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; - diff --git a/truebit-implementation/node_modules/mout/date/i18n_.js b/truebit-implementation/node_modules/mout/date/i18n_.js deleted file mode 100644 index 723fc103..00000000 --- a/truebit-implementation/node_modules/mout/date/i18n_.js +++ /dev/null @@ -1,14 +0,0 @@ -var mixIn = require('../object/mixIn'); -var enUS = require('./i18n/en-US'); - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - module.exports = activeLocale; - - diff --git a/truebit-implementation/node_modules/mout/date/isLeapYear.js b/truebit-implementation/node_modules/mout/date/isLeapYear.js deleted file mode 100644 index 4212870b..00000000 --- a/truebit-implementation/node_modules/mout/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -var isDate = require('../lang/isDate'); - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - module.exports = isLeapYear; - - diff --git a/truebit-implementation/node_modules/mout/date/isSame.js b/truebit-implementation/node_modules/mout/date/isSame.js deleted file mode 100644 index 4097d29b..00000000 --- a/truebit-implementation/node_modules/mout/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -var startOf = require('./startOf'); - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - module.exports = isSame; - - diff --git a/truebit-implementation/node_modules/mout/date/parseIso.js b/truebit-implementation/node_modules/mout/date/parseIso.js deleted file mode 100644 index 40a70a88..00000000 --- a/truebit-implementation/node_modules/mout/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -var some = require('../array/some'); - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else { - match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - module.exports = parseISO8601; - - diff --git a/truebit-implementation/node_modules/mout/date/quarter.js b/truebit-implementation/node_modules/mout/date/quarter.js deleted file mode 100644 index 8f610761..00000000 --- a/truebit-implementation/node_modules/mout/date/quarter.js +++ /dev/null @@ -1,16 +0,0 @@ - - - /** - * gets date quarter - */ - function quarter(date){ - var month = date.getMonth(); - if (month < 3) return 1; - if (month < 6) return 2; - if (month < 9) return 3; - return 4; - } - - module.exports = quarter; - - diff --git a/truebit-implementation/node_modules/mout/date/startOf.js b/truebit-implementation/node_modules/mout/date/startOf.js deleted file mode 100644 index 072bc0ef..00000000 --- a/truebit-implementation/node_modules/mout/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -var clone = require('../lang/clone'); - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - module.exports = startOf; - - diff --git a/truebit-implementation/node_modules/mout/date/strftime.js b/truebit-implementation/node_modules/mout/date/strftime.js deleted file mode 100644 index 5e566332..00000000 --- a/truebit-implementation/node_modules/mout/date/strftime.js +++ /dev/null @@ -1,121 +0,0 @@ -var pad = require('../number/pad'); -var lpad = require('../string/lpad'); -var i18n = require('./i18n_'); -var dayOfTheYear = require('./dayOfTheYear'); -var timezoneOffset = require('./timezoneOffset'); -var timezoneAbbr = require('./timezoneAbbr'); -var weekOfTheYear = require('./weekOfTheYear'); - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'l': - return lpad(date.getHours() % 12, 2); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - module.exports = strftime; - - diff --git a/truebit-implementation/node_modules/mout/date/timezoneAbbr.js b/truebit-implementation/node_modules/mout/date/timezoneAbbr.js deleted file mode 100644 index b1006875..00000000 --- a/truebit-implementation/node_modules/mout/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -var timezoneOffset = require('./timezoneOffset'); - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - module.exports = timezoneAbbr; - - diff --git a/truebit-implementation/node_modules/mout/date/timezoneOffset.js b/truebit-implementation/node_modules/mout/date/timezoneOffset.js deleted file mode 100644 index 9492dceb..00000000 --- a/truebit-implementation/node_modules/mout/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -var pad = require('../number/pad'); - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - module.exports = timezoneOffset; - - diff --git a/truebit-implementation/node_modules/mout/date/totalDaysInMonth.js b/truebit-implementation/node_modules/mout/date/totalDaysInMonth.js deleted file mode 100644 index e5d53905..00000000 --- a/truebit-implementation/node_modules/mout/date/totalDaysInMonth.js +++ /dev/null @@ -1,23 +0,0 @@ -var isDate = require('../lang/isDate'); -var isLeapYear = require('./isLeapYear'); - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - monthIndex = fullYear.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - module.exports = totalDaysInMonth; - - diff --git a/truebit-implementation/node_modules/mout/date/totalDaysInYear.js b/truebit-implementation/node_modules/mout/date/totalDaysInYear.js deleted file mode 100644 index b4b7e9b7..00000000 --- a/truebit-implementation/node_modules/mout/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -var isLeapYear = require('./isLeapYear'); - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - module.exports = totalDaysInYear; - - diff --git a/truebit-implementation/node_modules/mout/date/weekOfTheYear.js b/truebit-implementation/node_modules/mout/date/weekOfTheYear.js deleted file mode 100644 index dd51b7f1..00000000 --- a/truebit-implementation/node_modules/mout/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -var dayOfTheYear = require('./dayOfTheYear'); - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - module.exports = weekOfTheYear; - - diff --git a/truebit-implementation/node_modules/mout/doc/array.md b/truebit-implementation/node_modules/mout/doc/array.md deleted file mode 100644 index 62ceb151..00000000 --- a/truebit-implementation/node_modules/mout/doc/array.md +++ /dev/null @@ -1,982 +0,0 @@ -# array # - -Array utilities. - - - - -## append(arr1, arr2):Array - -Appends an array to the end of the other. -The first array will be modified and will contain the appended items. - -See: [`union()`](#union), [`combine()`](#combine) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -append(foo, bar); // ['a', 'b', 'b', 'd'] -``` - - - -## collect(arr, callback, [thisObj]):Array - -Maps the items in `arr` and concatenates the resulting arrays. - -See: [`map()`](#map) - -```js -collect([1, 2, 3], function(val) { - return [val, val % 2]; -}); // [1, 1, 2, 0, 3, 1]; - -collect(['a', 'bb', ''], function(val) { - return val.split(''); -}); // ['a', 'b', 'b'] -``` - -It also supports a shorthand syntax: - -```js -var items = [{ a: [1] }, { b: 'foo' }, { a: [2, 3] }]; -collect(items, 'a'); // [1, 2, 3]; -``` - - - -## combine(arr1, arr2):Array - -Combines an array with all the items of another. -The first array will be modified and will contain the combined items. -Does not allow duplicates and is case and type sensitive. - -See: [`union()`](#union), [`append()`](#append) - -```js -var foo = ['a', 'b'], - bar = ['b', 'd']; - -combine(foo, bar); // ['a', 'b', 'd'] -``` - - - -## compact(arr):Array - -Returns a new Array without any `null` or `undefined` values. Note that it will -keep empty strings and other falsy values (simillar to Ruby Array#compact). - -```js -var arr = [0, 1, null, false, '', 'foo', undefined, 'bar']; -compact(arr); // [0, 1, false, '', 'foo', 'bar']; -``` - - - -## contains(arr, value):Boolean - -Checks if Array contains value. Alias to `indexOf(arr, val) !== -1`. - -```js -var arr = [1, 2, 3]; -contains(arr, 2); // true -contains(arr, 'foo'); // false -``` - - - -## difference(...arrs):Array - -Return a new Array with elements that aren't present in the other Arrays -besides the first one. - -Works like [Python set#difference](http://docs.python.org/library/stdtypes.html#set.difference). - -It will remove duplicates. - -See: [`xor()`](#xor), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -difference(a, b); // ['a', 'b'] -``` - - -## equals(a, b, [compare]):Boolean - -Checks if both arrays are equal. - -```js -equals([1, 2], [1, 2]); // true -equals([2, 4], [1, 2]); // false -``` - -By default it uses the [lang/is](lang.html#is) as the `compare` function but -you can pass a custom function to change the behavior. - -```js -function loose(a, b) { - return a == b; -} -equals(['1', 2], [1, 2], loose); // true -``` - -See: [object/equals](object.html#equals), [lang/deepEquals](lang.html#deepEquals) - - - -## every(arr, callback, [thisObj]):Array - -Crossbrowser `Array.every()`. - -Tests whether all elements in the array pass the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -every(items, isString); // false -every(items, isFunction); // false -every(items, function(val, key, arr){ - return val != null; -}); // true -``` - -more info at [MDN Array#every](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:true}, {id:8, active:true}]; -// all items with `id === 8` -every(items, {id:8}); // false -// `active` is truthy on all items -every(items, 'active'); // true -``` - - - -## filter(arr, callback, [thisObj]):Array - -Crossbrowser `Array.filter()`. - -Creates a new array with all elements that pass the callback test. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var nums = [1, 2, 3, 4, 5, 6]; -var oddNumbers = filter(nums, function(val, key, arr){ - return (val % 2) !== 0; -}); -// > [1, 3, 5] -``` - -more info at [MDN Array#filter](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter) - -Filter also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// filter item that matches all properties/values pairs -filter(arr, {name:'john', beard:false}); -// > [{name:'john', surnname:'connor', beard:false}] -// items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'doe', beard:true}] -``` - -See [`reject()`](#reject) - - - -## find(arr, callback, [thisObj]):* - -Loops through all the items in the Array and returns the first one that passes -a truth test (callback). - -```js -var arr = [123, {a:'b'}, 'foo', 'bar']; -find(arr, isString); // "foo" -find(arr, isNumber); // 123 -find(arr, isObject); // {a:'b'} -``` - -Find also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true} -]; -// first item that matches all properties/values pairs -find(arr, {name:'john'}); // {name:'john', surnname:'connor', beard:false} -// first item where 'beard' is a truthy value -find(arr, 'beard'); // {name:'john', surnname:'doe', beard:true} -``` - -See: [findIndex()](#findIndex), [findLast()](#findLast), -[findLastIndex()](#findLastIndex) - - - -## findLast(arr, callback, [thisObj]):* - -Loops through all the items in the Array (starting from last item) and returns -the first one that passes a truth test (callback). - -```js -var arr = [123, {a:'b'}, 'foo', 'bar']; -findLast(arr, isString); // "bar" -findLast(arr, isNumber); // 123 -findLast(arr, isObject); // {a:'b'} -``` - -`findLast` also supports shorthand notation: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true} -]; -// last item that matches all properties/values pairs -findLast(arr, {name:'john'}); // {name:'john', surnname:'doe', beard:true} -// last item where 'beard' is a truthy value -findLast(arr, 'beard'); // {name:'john', surnname:'doe', beard:true} -``` - -See: [find()](#find), [findIndex()](#findIndex), -[findLastIndex()](#findLastIndex) - - - -## findIndex(arr, iterator, [thisObj]):Number - -Loops through the items in the Array and returns the index of the first one -that passes a truth test (callback). - -Returns `-1` if no item was found that passes the truth test. - -```js -var arr = [1, { a: 1 }, 'foo', 'bar']; -findIndex(arr, isString); // 2 -findIndex(arr, isNumber); // 0 -findIndex(arr, isObject); // 1 -findIndex(arr, isRegExp); // -1 -``` - -`findIndex` also supports shorthand notation: - -```js -var pets = [ - { pet: 'dog', name: 'Sam' }, - { pet: 'dog', name: 'Maggie' } -]; - -findIndex(pets, { pet: 'dog' }); // 0 -findIndex(pets, { name: 'Maggie' }); // 1 -``` - -See: [find()](#find), [findLastIndex()](#findLastIndex) - - - -## findLastIndex(arr, iterator, [thisObj]):Number - -Loops through the items in the Array on the reverse order and returns the index -of the first one that passes a truth test (callback). - -Returns `-1` if no item was found that passes the truth test. - -```js -var arr = [1, { a: 1 }, 'foo', 'bar']; -findLastIndex(arr, isString); // 3 -findLastIndex(arr, isNumber); // 0 -findLastIndex(arr, isObject); // 1 -findLastIndex(arr, isRegExp); // -1 -``` - -`findLastndex` also supports shorthand notation: - -```js -var pets = [ - { pet: 'dog', name: 'Sam' }, - { pet: 'dog', name: 'Maggie' } -]; - -findLastIndex(pets, { pet: 'dog' }); // 1 -findLastIndex(pets, { name: 'Sam' }); // 0 -``` - -See: [find()](#find), [findIndex()](#findIndex) - - - -## flatten(arr, [level]):Array - -Recursively flattens an array. A new array containing all the elements is -returned. If `level` is specified, it will only flatten up to that level. -Note that arrays within objects will not be flattened. - -### Example - -```js -flatten([1, [2], [3, [4, 5]]]); -// > [1, 2, 3, 4, 5] -flatten([1, [2], [3, [4, 5]]], 1); -// > [1, 2, 3, [4, 5]] -``` - -See: [`object/flatten()`](./object.html#flatten) - - -## forEach(arr, callback, [thisObj]):void - -Crossbrowser `Array.forEach()`. - -It allows exiting the iteration early by returning `false` on the callback. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = ['foo', 'bar', 'lorem', 'ipsum']; -forEach(items, function(val, key, arr){ - console.log(key +' : '+ val); - if (val === 'lorem') { - // stop iteration (break) - return false; - } -}); -``` - -more info at [MDN Array#forEach](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/forEach) - - - -## groupBy(arr, [categorize=identity], [thisObj]):Object - -Groups array elements by the `key` returned from the `categorize` function. - -It will use the [function/identity](function.html#identity) as the default -`categorize` function. - -```js -var items = ['lorem', 'ipsum', 'foo', 'bar', 'baz']; -groupBy(items, function(val) { return val.length }); -// > {'3': ['foo', 'bar', 'baz'], '5': ['lorem', 'ipsum']} -``` - - - -## indexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.indexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#indexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf) - - - - -## insert(arr, ...items):Number - -Push items into array only if they aren't contained by it. Returns the new -`length` of the array. - -See: [`remove()`](#remove), [`removeAll()`](#removeAll), -[`contains()`](#contains) - -```js -var arr = ['a', 'b']; -insert(arr, 'a'); // 2 : ['a', 'b'] -insert(arr, 'c'); // 3 : ['a', 'b', 'c'] -insert(arr, 1, 2, 'b'); // 5 : ['a', 'b', 'c', 1, 2] -``` - - - -## intersection(...arrs):Array - -Return a new Array with elements common to all Arrays. - -Similar to Python set#intersection and underscore.js intersection. - -It will remove duplicates. - -See: [`difference()`](#difference), [`xor()`](#xor) - -```js -var a = ['a', 'b', 1], - b = ['c', 1], - c = [1, 2, 3]; -intersection(a, b, c); // [1] -``` - - - -## invoke(arr, methodName[, ...args]):Array - -Call `methodName` on each item of the array passing custom arguments if needed. - -```js -invoke([[3,2,1], [9,5,2]], 'sort'); // [[1,2,3], [2,5,9]] -``` - - - -## join(arr, [separator]):String - -Joins the strings in `arr`, inserting `separator` between each value. - -This ignores null values and empty strings that are in the array. `separator` -defaults to an empty string. This will convert all non-string objects in the -array to a string. - -### Example - -```js -join(['a', 'b', 'c']); // 'abc' -join(['foo', 'bar'], ', '); // 'foo, bar' -join([null, 'foo', '', 'bar', undefined], ':'); // 'foo:bar' -``` - - -## last(arr):* - -Returns the last element of an array without modifying the array. - - -```js -last( [1, 2, 3, 4] ) // > 4 -last( ['foo', 'bar'] ) // > 'bar' -``` - - -## lastIndexOf(arr, item, [fromIndex]):Number - -Crossbrowser `Array.lastIndexOf()`. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#lastIndexOf](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf) - - - -## map(arr, callback, [thisObj]]):Array - -Crossbrowser `Array.map()`. - -Creates a new array with the results of calling a provided function on every -element in this array. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -See: [`collect()`](#collect) - -```js -var nums = [1,2,3,4]; -var double = map(nums, function(val, key, arr){ - return val * 2; -}); -// > [2, 4, 6, 8] -``` - -more info at [MDN Array#map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) - -It also supports a shorthand notation which can be used to achieve same result -as [`array/pluck`](#pluck): - -```js -var src = ['lorem', 'ipsum', 'foo', 'amet']; -// grab the "length" property of all items -var lengths = map(src, 'length'); // [5, 5, 3, 4] -``` - - - -## max(arr, [iterator], [thisObj]):* - -Returns maximum value inside array or use a custom iterator to define how items -should be compared. - -See: [`min()`](#min) - -```js -max([10, 2, 7]); // 10 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - -It also supports a shorthand notation: - -```js -max(['foo', 'lorem', 'amet'], 'length'); // "lorem" -``` - - - -## min(arr, [iterator], [thisObj]):* - -Returns minimum value inside array or use a custom iterator to define how items -should be compared. - -See: [`max()`](#max) - -```js -min([10, 2, 7]); // 2 -min(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'foo' -``` - -It also supports a shorthand notation: - -```js -min(['foo', 'lorem', 'amet'], 'length'); // "foo" -``` - - - -## pick(arr, [nItems]):* - -Gets random item(s) and removes it from the original array. - -If `nItems` is specified it will return a new Array contained the *picked* -items otherwise it returns a single item. - -See: [`random/choice()`](./random.html#choice) - -### Example: - -```js -var arr = [1, 2, 3, 4, 5, 6]; -var item1 = pick(arr); // 4 -var item2 = pick(arr); // 1 -var items = pick(arr, 2); // [5, 2] -console.log(arr); // [3, 6] -``` - - - -## pluck(arr, propName):Array - -Extract a list of property values. - -See: [`function/prop()`](function.html#prop) - -```js -var users = [{name : 'John', age: 21}, {name: 'Jane', age : 27}]; -var names = pluck(users, 'name'); // ["John", "Jane"] -var ages = pluck(users, 'age'); // [21, 27] -``` - - - -## range([start], stop[, step]):Array - -Creates a new Array with all the values inside the range. Works similarly to -Python#range or PHP#range. - -### Arguments - - 1. `[start]` (Number) : Range start. Default is `0`. - 2. `stop` (Number) : Range limit. - 3. `[step]` (Number) : Step size. Default is `1`. - -### Example - -```js -range(5); // [0, 1, 2, 3, 4, 5] -range(0, 5); // [0, 1, 2, 3, 4, 5] -range(0, 5, 2); // [0, 2, 4] -range(20, 40, 5); // [20, 25, 30, 35, 40] -``` - - - -## reduce(arr, fn):* - -Crossbrowser `Array.reduce()`. - -Apply a function against an accumulator and each value of the array (from -left-to-right) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduce](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce) - - - -## reduceRight(arr, fn):* - -Crossbrowser `Array.reduceRight()`. - -Apply a function simultaneously against two values of the array (from -right-to-left) as to reduce it to a single value. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -more info at [MDN Array#reduceRight](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduceRight) - - - -## reject(arr, fn, thisObj):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var numbers = [1, 2, 3, 4, 5, 6]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4, 6] -``` - -It also supports a shorthand syntax: - -```js -var users = [ - {name:'john', surname:'connor', beard:false}, - {name:'john', surname:'doe', beard:true}, - {name:'jane', surname:'doe', beard:false} -]; -// reject items that matches all properties/values pairs -reject(arr, {name:'john'}); -// > [{name:'jane', surnname:'doe', beard:false}] -// reject items where 'beard' is a truthy value -filter(arr, 'beard'); -// > [{name:'john', surnname:'connor', beard:false}, -// {name:'jane', surname:'doe', beard:false}] -``` - - - -## remove(arr, item):void - -Remove a single item from the array. - -IMPORTANT: it won't remove duplicates, just a single item. - -### Example - -```js -var foo = [1, 2, 3, 4]; -remove(foo, 2); -console.log(foo); // [1, 3, 4] -``` - - - -## removeAll(arr, item):void - -Remove all instances of an item from the array. - -### Example - -```js -var foo = [1, 2, 3, 4, 2, 2]; -removeAll(foo, 2); -console.log(foo); // [1, 3, 4]; -``` - -## reverse(arr):void - -Returns a copy of the array with all elements in reversed order. - -### Example - -```js -var foo = [1, 2, 3, 4, 5]; -var bar = reverse(foo); -console.log(bar); // [5, 4, 3, 2, 1]; - -console.log(foo); // [1, 2, 3, 4, 5]; -``` - - - - -## shuffle(arr):Array - -Returns a new Array with items randomly sorted (shuffled). Similar to Ruby Array#shuffle. - -### Example - -```js -var arr = ['a', 'b', 'c', 'd', 'e']; -shuffle(arr); // ['b', 'd', 'e', 'c', 'a'] -``` - - - -## slice(arr, [start], [end]):Array - -Returns a new array containing the items from `arr` from the start index to the -end index. - -If `start` is omitted, it will start at `0`. If `end` is omitted, it will used -the last index of the array. If `start` or `end` is negative, it is used as an -offset from the end of the array. - -It will also convert array-like objects to arrays. - -### Example - -```js -slice([1, 2, 3, 4], 1, 2); // [2, 3] -slice([1, 2, 3], 1); // [2, 3] -slice([1, 2, 3]); // [1, 2, 3] -slice({ length: 2, 0: 'a', 1: 'b' }); // ['a', 'b'] -slice([1, 2, 3], 0, -1); // [1, 2] -slice([1, 2, 3], -2); // [2, 3] -``` - - - -## some(arr, callback, [thisObj]):Array - -Crossbrowser `Array.some()`. - -Tests whether some element in the array passes the test implemented by the provided function. - -It differs from ES5 since it will also loop over sparse items in the array to -normalize the behavior across browsers (avoid inconsistencies). - -```js -var items = [1, 'foo', 'bar']; -some(items, isString); // true -some(items, isFunction); // false -``` - -more info at [MDN Array#some](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some) - -It also supports a shorthand syntax: - -```js -var items = [{id:1, active:true}, {id:3, active:false}, {id:8, active:false}]; -// at least one item with `id === 8` -some(items, {id:8}); // true -// `active` is truthy on at least one item -some(items, 'active'); // true -``` - -see also: [`object/matches`](object.html#matches) - - - -## sort(arr, [compareFn]):Array - -Returns a sorted Array using the [Merge Sort](http://en.wikipedia.org/wiki/Merge_sort) algorithm (stable sort). - -The `Array.prototype.sort` browser implementations differ since the sorting algorithm isn't described in the ES spec - [in V8 it isn't stable](http://code.google.com/p/v8/issues/detail?id=90) and [on Firefox it is stable](https://bugzilla.mozilla.org/show_bug.cgi?id=224128) - so this function doesn't use the browser native implementation and is recommended in cases where a stable sort is required (items should preserve same order if already sorted). - -**Important:** It does logical comparisson by default (greater/less than) and -not a string comparisson like the native `Array#sort`. - -### compareFn - -If `compareFn` is supplied elements are sorted based on the value returned by -the `compareFn`. - - - If `compareFn(a, b)` is less than `0`, sort `a` to a lower index than `b`. - - If `compareFn(a, b)` returns `0`, leave `a` and `b` unchanged with respect - to each other, but sorted with respect to all different elements. - - If `compareFn(a, b)` is greater than `0`, sort `b` to a lower index than - `a`. - -See: [`sortBy`](#sortBy) - -### Example - -```js -sort([187, 23, 47, 987, 12, 59, 0]); // [0, 12, 23, 47, 59, 187, 987] -sort(['a', 'z', 'c', 'beta', 'b']); // ['a', 'b', 'beta', 'c', 'z'] - -// ['sit', 'amet', 'lorem', 'ipsum'] -sort(['lorem', 'ipsum', 'sit', 'amet'], function(a, b){ - // sort by length, items with same length - // will keep the relative order (stable) - return a.length - b.length; -}); - -// [4, 3, 2, 1] -sort([2, 3, 1, 4], function(a, b){ - // reverse sort - return b - a; -}); -``` - - - -## sortBy(arr, callback, [context]):Array - -Returns an array sorted by the result of the callback. - -The callback is called for each item that is to be sorted, and the -results of the callback are used to sort the array. The callback -is called with the item as the first parameter, optionally with -the provided context. - -It also supports a shorthand notation which can be used to sort by a property -name. - -See: [`sort`](#sort) - -```js -// Returns [{ a: 1 }, { a: 2 }, { a: 3 }] -sortBy([{ a: 1 }, { a: 3 }, { a: 2 }], - function(item) { return item.a; }); - -// Same as above, using shorthand notation -sortBy([{ a: 1 }, { a: 3 }, { a: 2 }], 'a'); -``` - - - -## split(arr, [segments]):Array - -Splits an array into a fixed number of segments. - -The number of segments is specified by `segments` and defaults to 2. If the -array cannot be evenly split, the first segments will contain the extra items. -If `arr` is empty, an empty array is returned. If `arr.length` is less than -`segments`, then the resulting array will have `arr.length` number of -single-element arrays. - -### Example -```js -split([1, 2, 3, 4, 5], 3) // [ [1, 2], [3, 4], [5] ] -split([1, 2, 3, 4, 5]) // [ [1, 2, 3], [4, 5] ] -split([]) // [] -split([1, 2], 3) // [ [1], [2] ] -``` - - - -## take(times, callback, [thisObj]):Array - -Builds a new array based on the returned values from the given `callback`. - -```js -take(4, function(i, total) { - return i / total; -}); -// > [0, 0.25, 0.5, 0.75] -``` - -see: [function/times](../function.html#times) - - - -## toLookup(arr, key):Object - -Create an object that indexes the items in the array by a key. If `key` is a function, the key for each value in the resulting object will be the result of calling the function with the value as an argument. Otherwise `key` specifies the property on each value to use as the key. - -### Example - -```js -var foo = [{ name: 'a', thing: 1 }, { name: 'b', thing: 2 }]; -// { a: { name: 'a', thing: 1 }, b: { name: 'b', thing: 2 } } -toLookup(foo, 'name'); -// same as above -toLookup(foo, function (value) { return value.name; }); -``` - - - -## union(...arrs):Array - -Concat multiple arrays removing duplicates. - -```js -var a = ['a', 'b'], - b = ['c', 'a'], - c = [1, 'b', 2, 3, 'a']; - -//note that unique remove from begin to end -union(a, b, c); // ['c', 1, 'b', 2, 3, 'a'] -``` - - - -## unique(arr, [compare]):Array - -Return a new Array of unique items. - -**IMPORTANT:** duplicates are removed starting from begining of array. - -```js -var arr = [1, 2, 3, 4, 2, 2, 4]; -var foo = unique(arr); -console.log(foo); -// > [1, 3, 2, 4]; - -// you also have the option to set a custom compare function -var users = [{name: 'john'}, {name: 'paul'}, {name: 'john'}]; -var uniqueNames = unique(arr, function(a, b){ - return a.name === b.name; -}); -console.log(uniqueNames); -// > [{name: 'paul'}, {name: 'john'}] -``` - - - -## xor(arr1, arr2):Array - -Exclusive OR. Returns items that are present in a single array. - -Works like [Python set#symmetric_difference](http://docs.python.org/library/stdtypes.html#set.symmetric_difference) renamed for brevity. - -It will remove duplicates. - -See: [`difference()`](#difference), [`intersection()`](#intersection) - -```js -var a = ['a', 'b', 1]; -var b = ['c', 1]; -xor(a, b); // ['a', 'b', 'c'] -``` - - - -## zip(...arrs):Array - -Groups the elements of each array at their corresponding indexes. - -Useful for separate data sources that are coordinated through matching array -indexes. For a matrix of nested arrays, `zip.apply(...)` can transpose the -matrix in a similar fashion. - -```js -// [['moe', 30, true], ['larry', 40, false], ['curly', 50, false]] -zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]); -``` - - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/truebit-implementation/node_modules/mout/doc/collection.md b/truebit-implementation/node_modules/mout/doc/collection.md deleted file mode 100644 index 2ffcab10..00000000 --- a/truebit-implementation/node_modules/mout/doc/collection.md +++ /dev/null @@ -1,233 +0,0 @@ -# collection # - -Methods for dealing with collections (Array or Objects). - - - -## contains(list, value):Boolean - -Checks if collection contains value. - -```js -contains({a: 1, b: 2, c: 'bar'}, 2); // true -contains([1, 2, 3], 'foo'); // false -``` - -See: [array/contains](array.html#contains), [object/contains](object.html#contains) - - - -## every(list, callback, [thisObj]):Boolean - -Tests whether all values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - -See: [array/every](array.html#every), [object/every](object.html#every) - - - -## filter(list, callback, [thisObj]):Array - -Filter collection properties. - -See: [array/filter](array.html#filter), [object/filter](object.html#filter) - - - -## find(list, callback, [thisObj]):* - -Loops through all the values in the collection and returns the first one that -passes a truth test (callback). - -**Important:** loop order over objects properties isn't guaranteed to be the -same on all environments. - -```js -find({a: 'foo', b: 12}, isString); // 'foo' -find(['foo', 12], isNumber); // 12 -``` - -See: [array/find](array.html#find), [object/find](object.html#find) - - - -## forEach(list, callback, [thisObj]) - -Loop through all values of the collection. - -See: [array/forEach](array.html#forEach), [object/forOwn](object.html#forOwn) - - - -## map(list, callback, [thisObj]):Array - -Returns a new collection where the properties values are the result of calling -the callback for each property in the original collection. - -See: [array/map](array.html#map), [object/map](object.html#map) - - - -## max(list, [iterator]):* - -Returns maximum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`min()`](#min), [array/max](array.html#max), [object/max](object.html#max) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max(['foo', 'lorem', 'amet'], function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(list, [iterator]):* - -Returns minimum value inside collection or use a custom iterator to define how -items should be compared. - -See: [`max()`](#max), [array/min](array.html#min), [object/min](object.html#min) - -```js -min([10, 2, 7]); // 2 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## pluck(list, propName):Array - -Extract a list of property values. - -```js -var users = [ - { - name : 'John', - age : 21 - }, - { - name : 'Jane', - age : 27 - } -]; - -pluck(users, 'name'); // ["John", "Jane"] -pluck(users, 'age'); // [21, 27] - -users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // ['John', 'Mary'] -``` - -See: [array/pluck](array.html#pluck), [object/pluck](object.html#pluck) - - - -## reduce(list, callback, initial, [thisObj]):* - -Apply a function against an accumulator and each value in the collection as to -reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - -See: [array/reduce](array.html#reduce), [object/reduce](object.html#reduce) - - - -## reject(list, fn, [thisObj]):Array - -Creates a new array with all the elements that do **not** pass the truth test. -Opposite of [`filter()`](#filter). - -### Example - -```js -var numbers = [1, 2, 3, 4, 5]; -reject(numbers, function(x) { return (x % 2) !== 0; }); // [2, 4] - -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // [2, 4] -``` - -See: [array/reject](array.html#reject), [object/reject](object.html#reject) - - - -## size(list):Number - -Returns the number of values in the collection. - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -size([1,2,3]); // 3 -size(null); // 0 -``` - -See: [object/size](object.html#size) - - - -## some(list, callback, [thisObj]):Boolean - -Tests whether any values in the collection pass the test implemented by the -provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -some(obj, isString); // true -some([1, 2, 3], isNumber) // true -some([1, 2, 3], isString) // false -``` - -See: [array/some](array.html#some), [object/some](object.html#some) - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/truebit-implementation/node_modules/mout/doc/date.md b/truebit-implementation/node_modules/mout/doc/date.md deleted file mode 100644 index e1403991..00000000 --- a/truebit-implementation/node_modules/mout/doc/date.md +++ /dev/null @@ -1,307 +0,0 @@ -# date # - -Date utilities. - - -## dayOfTheYear(date):Number - -How many days elapsed since begining of the year (following gregorian -calendar). - -```js -// Jan 1st -dayOfTheYear(new Date(2013, 0, 1)); // 1 -// Dec 31th -dayOfTheYear(new Date(2013, 11, 31)); // 364 -``` - - - -## diff(date1, date2, [unitName]):Number - -Calculate the difference between dates (range). - -The returned value is always positive. The default `unitName` is `"ms"`. - -Available units: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`, -`millisecond`. - -See: [`time/convert()`](time.html#convert) - -```js -var d1 = new Date(2012, 4, 5); -var d2 = new Date(2013, 4, 8); -diff(d1, d2); // 31795200000 -diff(d1, d2, 'hour'); // 8832 -diff(d1, d2, 'week'); // 52.57142857142857 -diff(d1, d2, 'month'); // 12.096774193548388 -diff(d1, d2, 'year'); // 1.0082191780821919 -``` - - - -## isLeapYear(fullYear|date):Boolean - -Checks if it's a [leap year](http://en.wikipedia.org/wiki/Leap_year) according -to the Gregorian calendar. - -see: [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -isLeapYear(2012); // true -isLeapYear(2013); // false -isLeapYear(new Date(2012, 2, 28)); // true -``` - - -## isSame(date1, date2[, period]):Boolean - -Check if both dates are the "same". - -You can pass an optional *period* used to set the comparisson precision. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -var date1 = new Date(2013, 1, 3); -var date2 = new Date(2013, 2, 9); -isSame(date1, date2); // false -isSame(date1, date2, 'day'); // false -isSame(date1, date2, 'month'); // false -isSame(date1, date2, 'year'); // true -``` - - - -## parseIso(str):Number - -Parses an [ISO8601](http://en.wikipedia.org/wiki/Iso8601) date and returns the -number of milliseconds since January 1, 1970, 00:00:00 UTC, or `NaN` if it is -not a valid ISO8601 date. - -This parses *all* ISO8601 dates, including dates without times, [ordinal -dates](https://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates), and the compact -representation (omitting delimeters). The only exception is [ISO week -dates](https://en.wikipedia.org/wiki/ISO_week_date), which are not parsed. - -If no time zone offset is specified, it assumes UTC time. - -```js -// Jan 01, 1970 00:00 GMT -parseIso('1970-01-01T00:00:00') // 0 -parseIso('1970-001') // 0 -parseIso('1970-01-01') // 0 -parseIso('19700101T000000.00') // 0 -parseIso('1970-01-01T02:00+02:00') // 0 - -// Jan 02, 2000 20:10 GMT+04:00 -parseIso('2000-01-02T20:10+04:00') // 946829400000 -``` - - -## quarter(date):Number - -Get a number between 1 to 4 that represents the quarter of the year. - -```js -quarter(new Date(2013, 1, 19)); // 1 -quarter(new Date(2013, 4, 12)); // 2 -quarter(new Date(2013, 7, 25)); // 3 -quarter(new Date(2013, 10, 8)); // 4 -``` - - -## startOf(date, period):Date - -Get a new Date at the start of the period. - -Available periods: `year`, `month`, `week`, `day`, `hour`, `minute`, `second`. - -```js -// Apr 05 2013 11:27:43 -var date = new Date(2013, 3, 5, 11, 27, 43, 123); -startOf(date, 'year'); // Jan 01 2013 00:00:00 -startOf(date, 'month'); // Apr 01 2013 00:00:00 -startOf(date, 'day'); // Apr 05 2013 00:00:00 -startOf(date, 'hour'); // Apr 05 2013 11:00:00 -``` - - - -## strftime(date, format, [l10n]):String - -Format date based on strftime format. - -Replaced tokens: - -
-
%a
locale's abbreviated weekday name.
-
%A
locale's full weekday name.
-
%b
locale's abbreviated month name.
-
%B
locale's full month name.
-
%c
locale's appropriate date and time representation.
-
%C
century number (the year divided by 100 and truncated -to an integer) as a decimal number [00..99].
-
%d
day of the month as a decimal number [01..31].
-
%D
same as %m/%d/%y.
-
%e
day of the month as a decimal number [1..31]; -a single digit is preceded by a space.
-
%F
The ISO 8601 date format (%Y-%m-%d)
-
%h
same as %b.
-
%H
hour (24-hour clock) as a decimal number [00..23].
-
%I
hour (12-hour clock) as a decimal number [01..12].
-
%j
day of the year as a decimal number [001..366].
-
%l
hour (12-hour clock) as a decimal number (range 1 to 12); single digits are preceded by a blank
-
%L
zero-padded milliseconds [000..999]
-
%m
month as a decimal number [01..12].
-
%M
minute as a decimal number [00..59].
-
%n
newline character.
-
%p
locale's equivalent of either "am" or "pm"
-
%P
locale's equivalent of either "AM" or "PM"
-
%r
time in a.m. and -p.m. notation; in the POSIX locale this is equivalent to %I:%M:%S %p.
-
%R
time in 24 hour notation (%H:%M).
-
%s
seconds since Epoch (1970-01-01 00:00:00 UTC)
-
%S
second as a decimal number [00..60].
-
%t
tab character.
-
%T
time (%H:%M:%S).
-
%u
weekday as a decimal number [1..7], with 1 representing -Monday.
-
%U
week number of the year (Sunday as the first day of -the week) as a decimal number [00..53].
-
%V
week number of the year (Monday as the first day of the -week) as a decimal number [01..53]. If the week containing 1 January has -four or more days in the new year, then it is considered week 1. Otherwise, -it is the last week of the previous year, and the next week is week 1.
-
%w
weekday as a decimal number [0..6], with 0 representing -Sunday.
-
%W
week number of the year (Monday as the first day of -the week) as a decimal number [00..53]. All days in a new year preceding -the first Monday are considered to be in week 0.
-
%x
locale's appropriate date representation.
-
%X
locale's appropriate time representation.
-
%y
year without century as a decimal number [00..99].
-
%Y
year with century as a decimal number.
-
%Z
timezone name or abbreviation, or by no bytes -if no timezone information exists.
-
%%
is replaced by %.
-
- -```js -var date = new Date(2013, 3, 8, 9, 2, 4); -strftime(date, '%Y-%m-%d'); // "2013-04-08" -strftime(date, '%R'); // "09:02" -strftime(date, '%Y-%m-%dT%H:%M:%S%z'); // "2013-04-08T09:02:04+0000" -``` - -You can also set a custom locale: - -```js -var ptBr = require('mout/date/i18n/pt-BR'); -strftime(date, '%a, %d %b', ptBr); // 'Seg, 08 Abr' -strftime(date, '%A, %d %B', ptBr); // 'Segunda, 08 Abril' -``` - -To set it globally: - -```js -require('mout/date/i18n_').set( customLocaleData ); -``` - -See [date/i18n](https://github.com/mout/mout/tree/master/src/date/i18n) -for localization examples. - - - -## timezoneAbbr(date):String - -Return timezone abbreviation or similar data. - -The result will vary based on the OS/browser since some environments doesn't -provide enough info about the current locale. - -```js -// IE 7-8 -timezoneAbbr(new Date()); // "-0500" -// Chrome, FF, V8 -timezoneAbbr(new Date()); // "EST" -``` - - - -## timezoneOffset(date):String - -Return time zone as hour and minute offset from UTC (e.g. +0900). - -It's important to note that JavaScript Date object will use the system locale -info to determinate the [timezone -offset](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) -and that daylight saving time affects the result. - -```js -// if system locale is EST -timezoneOffset(new Date()); // -0500 -``` - - - -## totalDaysInMonth(fullYear, monthIndex):Number - -Returns the amount of days in the month taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear) - -```js -totalDaysInMonth(2008, 1); // 29 (leap year) -totalDaysInMonth(2009, 1); // 28 - -// you can also pass a Date object as single argument -totalDaysInMonth( new Date(2013, 0, 1) ); // 31 -``` - - -## totalDaysInYear(fullYear):Number - -Returns the amount of days in the year taking into consideration leap years -(following Gregorian calendar). - -see: [`isLeapYear()`](#isLeapYear), [`totalDaysInMonth()`](#totalDaysInMonth) - -```js -totalDaysInYear(2008); // 366 (leap year) -totalDaysInYear(2009); // 365 - -// you can also pass a Date object as single argument -totalDaysInYear( new Date(2013, 0, 1) ); // 365 -``` - - - -## weekOfTheYear(date, [firstDayOfWeek]):Number - -Returns how many weeks elapsed since start of the year (`0..53`). - -`firstDayOfWeek` can be `0` (Sunday) or `1` (Monday). By default weeks start at -Sunday. - -It will return `0` if `date` is before the first `firstDayOfWeek` of the year. - -```js -// Tue Jan 01 2013 -weekOfTheYear( new Date(2013,0,1) ); // 0 -// Wed Jan 09 2013 -weekOfTheYear( new Date(2013,0,9) ); // 1 -// Sun Jan 01 2012 -weekOfTheYear( new Date(2012,0,1) ); // 1 -// Mon Jan 09 2012 -weekOfTheYear( new Date(2012,0,9) ); // 2 -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/truebit-implementation/node_modules/mout/doc/function.md b/truebit-implementation/node_modules/mout/doc/function.md deleted file mode 100644 index 5c55242c..00000000 --- a/truebit-implementation/node_modules/mout/doc/function.md +++ /dev/null @@ -1,293 +0,0 @@ -# function # - -Function*(al)* utilities. - - -## awaitDelay(fn, delay):Function - -Returns a function that ensures that `fn` is only called *after* `delay` -milliseconds have elapsed. When the returned function is called before the -delay has elapsed, it will wait until the delay has elapsed and then call `fn`. -When the returned function is called after the delay has elapsed, it will call -`fn` after the next "tick" (it will always be called asynchronously). The -context and arguments that the returned function is called in are applied to -`fn`. - -In the below example `onLoaded` will not be executed before a 1000 millisecond -delay. Even if `loadImages` loads and calls `callback` earlier. However, say -the images take 1500 milliseconds to load, it will trigger `onLoaded` -immediately. - -```js -var callback = awaitDelay(onLoaded, 1000); -loadImages(callback); -function onLoaded(){ - console.log('loaded'); -} -``` - -You can also cancel de delayed call by simply using the native `clearTimeout` -method (like a regular `setTimeout` call). - -```js -var timeoutId = callback(); -// onLoaded won't be called since it was canceled before the 1000ms delay -clearTimeout(timeoutId); -``` - -### Arguments: - - 1. `fn` (Function) : Target Function - 2. `delay` (Number) : Delay of execution in milliseconds - -See: [`debounce()`](#debounce) - - - -## bind(fn, context, [...args]):Function - -Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - -### Arguments - - 1. `fn` (Function) : Target Function - 2. `context` (Object) : Execution context (object used as `this`) - 3. `[...args]` (*) : Arguments (0...n arguments) - -See: [`partial()`](#partial), [object/bindAll](./object.html#bindAll) - - - -## compose(...fn):Function - -Returns the composition of a list of functions, where each function consumes -the return value of the function that follows. In math terms, composing the -functions `f()`, `g()`, and `h()` produces `f(g(h()))`. - -```js -function add2(x) { return x + 2 } -function multi2(x) { return x * 2 } -map([1, 2, 3], compose(add2, multi2)); // [4, 6, 8] - -//same as -map([1, 2, 3], function(x){ - return add2( multi2(x) ); -}); -``` - - - -## constant(value):Function - -Returns a new function that will always return `value` when called. - -```js -var f = constant('foo'); -f(); // 'foo' - -// Provided arguments are ignored; value is always returned -f(1); // 'foo' - -f = constant({ foo: 'bar' }); -f(); // { foo: 'bar' } -``` - - - -## debounce(fn, delay[, isAsap]):Function - -Creates a function that will delay the execution of `fn` until after `delay` -milliseconds have elapsed since the last time it was invoked. - -Subsequent calls to the debounced function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = debounce(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a debounced-function call and `X` is the actual -callback execution: - - Default - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - - Debounced with `isAsap == true`: - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X - -You also have the option to cancel the debounced call if it didn't happen yet: - -```js -lazyRedraw(); -// lazyRedraw won't be called since `cancel` was called before the `delay` -lazyRedraw.cancel(); -``` - -See: [`throttle()`](#throttle) - - -## func(name):Function - -Returns a function that calls a method with given `name` on supplied object. -Useful for iteration methods like `array/map` and `array/forEach`. - -See: [`prop()`](#prop) - -```js -// will call the method `getName()` for each `user` -var names = map(users, func('getName')); -``` - - - -## identity(val):* - -Returns the first argument provided to it. - -```js -identity(3); // 3 -identity(1,2,3); // 1 -identity('foo'); // "foo" -``` - - - -## partial(fn, [...args]):Function - -Return a partially applied function supplying default arguments. - -This method is similar to [`bind`](#bind), except it does not alter the this -binding. - -### Arguments - - 1. `fn` (Function) : Target Function - 2. `[...args]` (*) : Arguments (0...n arguments) - -See: [`bind()`](#bind) - -```js -function add(a, b){ return a + b } -var add10 = partial(add, 10); -console.log( add10(2) ); // 12 -``` - - - -## prop(name):Function - -Returns a function that gets a property with given `name` from supplied object. -Useful for using in conjunction with `array/map` and/or for creating getters. - -See: [`array/pluck()`](array.html#pluck) - -```js -var users = [{name:"John", age:21}, {name:"Jane", age:25}]; -// ["John", "Jane"] -var names = map(users, prop('name')); -``` - - - -## series(...fn):Function - -Returns a function that will execute all the supplied functions in order and -passing the same parameters to all of them. Useful for combining multiple -`array/forEach` into a single one and/or for debugging. - -```js -// call `console.log()` and `doStuff()` for each item item in the array -forEach(arr, series(console.log, doStuff)); -``` - - - -## throttle(fn, interval):Function - -Creates a function that, when executed, will only call the `fn` function at -most once per every `interval` milliseconds. - -If the throttled function is invoked more than once during the wait timeout, -`fn` will also be called on the trailing edge of the timeout. - -Subsequent calls to the throttled function will return the result of the last -`fn` call. - -```js -// sometimes less is more -var lazyRedraw = throttle(redraw, 300); -foo.on.resize.add(lazyRedraw); -``` - -In this visualization, `|` is a throttled-function call and `X` is the actual -`fn` execution: - - ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - X X X X X X X X X X X X - -You also have the option to cancel the throttled call if it didn't happen yet: - -```js -lazyRedraw(); -setTimeout(function(){ - lazyRedraw(); - // lazyRedraw will be called only once since `cancel` was called before - // the `interval` for 2nd call completed - lazyRedraw.cancel(); -}, 250); -``` - -See: [`debounce()`](#debounce) - - -## timeout(fn, millis, context, [...args]):Number - -Functions as a wrapper for `setTimeout`. Calls a the function `fn` after a given delay `millis` in milliseconds. -The function is called within the specified context. The return value can be used to clear the timeout using `clearTimeout`. - -```js -var id = timeout(doStuff, 300, this); - -clearTimeout(id); -``` - -## times(n, callback, [context]):void - -Iterates over a callback `n` times. - -### Arguments - - 1. `n` (Number) : Number of iterations - 2. `callback` (Function) : Closure executed for every iteration - 3. `context` (Object) : Execution context (object used as `this`) - -```js -var output = ''; -times(5, function(i) { - output += i.toString(); -}); -// output: 01234 -``` - -## wrap(fn, wrapper):Function - -Wraps the first `fn` inside of the `wrapper` function, passing it as the first argument. This allows the `wrapper` to execute code before and after the `fn` runs, adjust the arguments, and execute it conditionally. - -```js -var hello = function(name) { return "hello: " + name; }; -hello = wrap(hello, function(func) { - return "before, " + func("moe") + ", after"; -}); -hello(); -// output: 'before, hello: moe, after' -``` - -See: [`partial()`](#partial) -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/truebit-implementation/node_modules/mout/doc/lang.md b/truebit-implementation/node_modules/mout/doc/lang.md deleted file mode 100644 index 9324968d..00000000 --- a/truebit-implementation/node_modules/mout/doc/lang.md +++ /dev/null @@ -1,516 +0,0 @@ -# lang # - -Language Utilities. Easier inheritance, scope handling, type checks. - - - -## clone(val):* - -Clone native types like Object, Array, RegExp, Date and primitives. - -This method will not clone values that are referenced within `val`. It will -only copy the value reference to the new value. If the value is not a plain -object but is an object, it will return the value unchanged. - -### Example - -```js -var a = { foo: 'bar' }; -var b = clone(a); -console.log(a === b); // false -console.log(a.foo === b.foo); // true - -var c = [1, 2, 3]; -var d = clone(b); -console.log(c === d); // false -console.log(c); // [1, 2, 3] -``` - -See: [`deepClone()`](#deepClone) - - - -## createObject(parent, [props]):Object - -Create Object using prototypal inheritance and setting custom properties. - -Mix between [Douglas Crockford Prototypal Inheritance](http://javascript.crockford.com/prototypal.html) and [`object/mixIn`](./object.html#mixIn). - -### Arguments - - 1. `parent` (Object) : Parent Object - 2. `[props]` (Object) : Object properties - -### Example - -```js -var base = { - trace : function(){ - console.log(this.name); - } -}; - -var myObject = createObject(base, { - name : 'Lorem Ipsum' -}); - -myObject.trace(); // "Lorem Ipsum" -``` - - - -## ctorApply(constructor, args):Object - -Do `Function.prototype.apply()` on a constructor while maintaining prototype -chain. - -```js -function Person(name, surname) { - this.name = name; - this.surname = surname; -} - -Person.prototype.walk = function(){ - console.log(this.name +' is walking'); -}; - -var args = ['John', 'Doe']; - -// "similar" effect as calling `new Person("John", "Doe")` -var john = ctorApply(Person, args); -john.walk(); // "John is walking" -``` - - - -## deepClone(val, [instanceClone]):* - -Deep clone native types like Object, Array, RegExp, Date and primitives. - -The `instanceClone` function will be invoked to clone objects that are not -"plain" objects (as defined by [`isPlainObject`](#isPlainObject)) if it is -provided. If `instanceClone` is not specified, it will not attempt to clone -non-plain objects, and will copy the object reference. - -### Example - -```js -var a = {foo:'bar', obj: {a:1, b:2}}; -var b = deepClone(a); // {foo:'bar', obj: {a:1, b:2}} -console.log( a === b ); // false -console.log( a.obj === b.obj ); // false - -var c = [1, 2, [3, 4]]; -var d = deepClone(c); // [1, 2, [3, 4]] -var e = c.concat(); // [1, 2, [3, 4]] - -console.log( c[2] === d[2] ); // false -// concat doesn't do a deep clone, arrays are passed by reference -console.log( e[2] === d[2] ); // true - -function Custom() { } -function cloneCustom(x) { return new Custom(); } -var f = { test: new Custom() }; -var g = deepClone(f, cloneCustom); -g.test === f.test // false, since new Custom instance will be created -``` - -See: [`clone()`](#clone) - - - -## deepEquals(a, b, [callback]):Boolean - -Recursively tests whether two values contains the same keys and values. - -`callback` specifies the equality comparison function used to compare -non-object values. It defaults to using the [`is()`](#is) function. - -If the values are both an object or array, it will recurse into both values, -checking if their keys/values are equal. It will only check the keys and values -contained by the objects; it will not check the objects' prototypes. If either -of the values are not objects, they will be checked using the `callback` -function. - -Example: - -```js -deepEquals({ a: 1 }, { a: 1 }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 1 } }); // true -deepEquals({ value: { a: 1 } }, { value: { a: 2 } }); // false -deepEquals({ value: { a: 1 } }, { value: { a: 1, b: 2 } }); // false -deepEquals({}, null); // false -deepEquals(null, null); // true -deepEquals( - { a: { b: 1 } }, - { a: { b: '1' } }, - function(a, b) { return a == b; }); // true -``` - -See: [object/equals](object.html#equals), [array/equals](array.html#equals) - - - -## defaults(val, ...defaults):void - -Return first value that isn't `null` or `undefined`. - - function doSomethingAwesome(foo, bar) { - // default arguments - foo = defaults(foo, 'lorem'); - bar = defaults(bar, 123); - // ... - } - - - -## GLOBAL:Object - -Reference to the global context (`window` inside a browser, `global` on -node.js). Works on ES3 and ES5 strict-mode. - - - -## inheritPrototype(childCtor, parentCtor):Object - -Inherit the prototype methods from one constructor into another. - -Similar to [node.js util/inherits](http://nodejs.org/docs/latest/api/util.html#util_util_inherits_constructor_superconstructor). - -It returns the the `childCtor.prototype` for convenience. - -```js -function Foo(name){ - this.name = name; -} -Foo.prototype = { - getName : function(){ - return this.name; - } -}; - -function Bar(name){ - Foo.call(this, name); -} -//should be called before calling constructor -var proto = inheritPrototype(Bar, Foo); - -// for convenience we return the new prototype object -console.log(proto === Bar.prototype); // true - -var myObj = new Bar('lorem ipsum'); -myObj.getName(); // "lorem ipsum" - -console.log(myObj instanceof Foo); // true - -// you also have access to the "super" constructor -console.log(Bar.super_ === Foo); // true -``` - - -## is(x, y):Boolean - -Check if both values are identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -is(NaN, NaN); // true -is(-0, +0); // false -is('a', 'b'); // false -``` - -See: [`isnt()`](#isnt) - - - -## isnt(x, y):Boolean - -Check if both values are not identical/egal. - -```js -// wtfjs -NaN === NaN; // false --0 === +0; // true - -isnt(NaN, NaN); // false -isnt(-0, +0); // true -isnt('a', 'b'); // true -``` - -See: [`is()`](#is) - - - - -## isArguments(val):Boolean - -If value is an "Arguments" object. - - - -## isArray(val):Boolean - -If value is an Array. Uses native ES5 `Array.isArray()` if available. - - - -## isBoolean(val):Boolean - -If value is a Boolean. - - - -## isDate(val):Boolean - -If value is a Date. - - - -## isEmpty(val):Boolean - -Checks if Array/Object/String is empty. - -Will return `true` for any object that doesn't contain enumerable properties -and also to any type of value that isn't considered a collection (boolean, -null, undefined, function, etc). - -```js -isEmpty(''); // true -isEmpty('bar'); // false -isEmpty([]); // true -isEmpty([1, 2]); // false -isEmpty({}); // true -isEmpty({a:1, b:2}); // false -// null, undefined, booleans, numbers are considered as "empty" values -isEmpty(null); // true -isEmpty(undefined); // true -isEmpty(123); // true -isEmpty(true); // true -``` - - -## isFinite(val):Boolean - -Checks if value is Finite. - -**IMPORTANT:** This is not the same as native `isFinite`, which will return -`true` for values that can be coerced into finite numbers. See -http://es5.github.com/#x15.1.2.5. - -```js -isFinite(123); // true -isFinite(Infinity); // false - -// this is different than native behavior -isFinite(''); // false -isFinite(true); // false -isFinite([]); // false -isFinite(null); // false -``` - - -## isFunction(val):Boolean - -If value is a Function. - - - -## isKind(val, kind):Boolean - -If value is of "kind". (used internally by some of the *isSomething* checks). - -Favor the other methods since strings are commonly mistyped and also because -some "kinds" can only be accurately checked by using other methods (e.g. -`Arguments`), some of the other checks are also faster. - -```js -isKind([1,2], 'Array'); // true -isKind(3, 'Array'); // false -isKind(3, 'Number'); // true -``` - -See: [`kindOf()`](#kindOf) - - - -## isInteger(val):Boolean - -Check if value is an integer. - -```js -isInteger(123); // true -isInteger(123.45); // false -isInteger({}); // false -isInteger('foo'); // false -isInteger('123'); // false -``` - - - -## isNaN(val):Boolean - -Check if value is not a number. - -It doesn't coerce value into number before doing the check, giving better -results than native `isNaN`. Returns `true` for everything besides numeric -values. - -**IMPORTANT:** behavior is very different than the native `isNaN` and way more -useful!!! See: http://es5.github.io/#x15.1.2.4 - -```js -isNaN(123); // false - -isNaN(NaN); // true -isNaN({}); // true -isNaN(undefined); // true -isNaN([4,5]); // true - -// these are all "false" on native isNaN and main reason why this module exists -isNaN(''); // true -isNaN(null); // true -isNaN(true); // true -isNaN(false); // true -isNaN("123"); // true -isNaN([]); // true -isNaN([5]); // true -``` - - - -## isNull(val):Boolean - -If value is `null`. - - - -## isNumber(val):Boolean - -If value is a Number. - - - -## isObject(val):Boolean - -If value is an Object. - - - -## isPlainObject(val):Boolean - -If the value is an Object created by the Object constructor. - - - -## isRegExp(val):Boolean - -If value is a RegExp. - - - -## isString(val):Boolean - -If value is a String. - - - -## isUndefined(val):Boolean - -If value is `undefined`. - - - -## kindOf(val):String - -Gets kind of value (e.g. "String", "Number", "RegExp", "Null", "Date"). -Used internally by `isKind()` and most of the other *isSomething* checks. - -```js -kindOf([1,2]); // "Array" -kindOf('foo'); // "String" -kindOf(3); // "Number" -``` - -See: [`isKind()`](#isKind) - - -## toArray(val):Array - -Convert array-like object into Array or wrap value into Array. - -```js -toArray({ - "0" : "foo", - "1" : "bar", - "length" : 2 -}); // ["foo", "bar"] - -function foo(){ - return toArray(arguments); -} -foo("lorem", 123); // ["lorem", 123] - -toArray("lorem ipsum"); // ["lorem ipsum"] -toArray(window); // [window] -toArray({foo:"bar", lorem:123}); // [{foo:"bar", lorem:123}] -``` - -See: object/values() - - - -## toNumber(val):Number - -Convert value into number. - -```js -// numeric values are typecasted as Number -toNumber('123'); // 123 -toNumber(-567); // -567 - -// falsy values returns zero -toNumber(''); // 0 -toNumber(null); // 0 -toNumber(undefined); // 0 -toNumber(false); // 0 - -// non-numeric values returns NaN -toNumber('asd'); // NaN -toNumber({}); // NaN -toNumber([]); // NaN - -// Date objects return milliseconds since epoch -toNumber(new Date(1985, 6, 23)); // 490935600000 -``` - - - -## toString(val):String - -Convert any value to its string representation. - -Will return an empty string for `undefined` or `null`, otherwise will convert -the value to its string representation. - -```js -// null and undefined are converted into empty strings -toString(null); // "" -toString(undefined); // "" - -toString(1); // "1" -toString([1,2,3]); // "1,2,3" -toString(false); // "false" - -// uses `val.toString()` to convert value -toString({toString:funtion(){ return 'foo'; }}); // "foo" -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/truebit-implementation/node_modules/mout/doc/math.md b/truebit-implementation/node_modules/mout/doc/math.md deleted file mode 100644 index d6b9994b..00000000 --- a/truebit-implementation/node_modules/mout/doc/math.md +++ /dev/null @@ -1,303 +0,0 @@ -# math # - -Math utilities. - - -## ceil(val[, step]):Number - -Round value up to full steps. Similar to `Math.ceil()` but can round value -to an arbitrary *radix*. - - ceil(7.2); // 8 - ceil(7.8); // 8 - ceil(7, 5); // 10 - ceil(11, 5); // 15 - ceil(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`floor()`](#floor), [`countSteps()`](#countSteps) - - - -## clamp(val, min, max):Number - -Clamps value inside range. - -`clamp()` is extremely useful in cases where you need to limit a value inside -a certain range. So instead of doing a complex `if/else` to filter/process the -value you can restrict it to always be inside the desired range: - - clamp(-5, 0, 10); // 0 - clamp(7, 1, 10); // 7 - clamp(8, 1, 10); // 8 - clamp(10, 1, 10); // 10 - clamp(11, 1, 10); // 10 - -If the value is smaller than `min` it returns the `min`, if `val` is higher -than `max` it returns `max`. - -### Common use cases - -Any situation where you need to limit a number inside a range like: slider -position, image galleries (so user can't skip to an image that doesn't -exist), drag and drop, scroll boundaries, etc. - -See: [`loop()`](#loop) - - - - -## countSteps(val, step[, overflow]):Number - -Count number of full steps. - -### Arguments: - - 1. `val` (Number) : Value. - 2. `step` (Number) : Step size. - 3. `[overflow]` (Number) : Maximum number of steps, nSteps will loop if -`>=` than overflow. - - -Count steps is very useful for cases where you need to know how many "full -steps" the number *completed*. Think of it as a division that only returns -integers and ignore remainders. - - countSteps(3, 5); // 0 - countSteps(6, 5); // 1 - countSteps(12, 5); // 2 - countSteps(18, 5); // 3 - countSteps(21, 5); // 4 - -You can also set an `overflow` which will reset the *counter* before reaching -this number. - - countSteps(3, 5, 3); // 0 - countSteps(6, 5, 3); // 1 - countSteps(12, 5, 3); // 2 - countSteps(18, 5, 3); // 0 - countSteps(21, 5, 3); // 1 - -### Common use cases - -#### How many items fit inside an area: - - var containerWidth = 100; - var itemWidth = 8; - var howManyFit = countSteps(containerWidth, itemWidth); // 12 - -#### Split value into different scales or convert value from one scale to another - -From [mout/time/parseMs](time.html#parseMs): - - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - // {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} - parseMs(2348765454); - - - -## floor(val[, step]):Number - -Round value down to full steps. Similar to `Math.floor()` but can round value -to an arbitrary *radix*. (formerly `snap`) - - floor(7.2); // 7 - floor(7.8); // 7 - floor(7, 5); // 5 - floor(11, 5); // 10 - floor(15, 5); // 15 - -### Common use cases - -Round values by increments of 5/10/1000/etc. - -See: [`round()`](#round), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -## inRange(val, min, max[, threshold]):Boolean - -Checks if value is inside the range. - - inRange(-6, 1, 10); // false - inRange( 5, 1, 10); // true - inRange(12, 1, 10); // false - -The threshold can be useful when you want granular control of what should match -and/or the precision could change at runtime or by some configuration option, -avoids the clutter of adding/subtracting the `threshold` from `mix` and `max`. - - inRange(12, 1, 10, 2); // true - inRange(13, 1, 10, 2); // false - -### Common use cases - -Anything that needs to check if value is inside a range, be it collision -detection, limiting interaction by mouse position, ignoring parts of the logic -that shouldn't happen if value isn't valid, simplify `if/else` conditions, -making code more readable, etc... - - - - -## isNear(val, target, threshold):Boolean - -Check if value is close to target. - -Similar to `inRange()` but used to check if value is close to a certain value -or match the desired value. Basically to simplify `if/else` conditions and to -make code clearer. - - isNear( 10.2, 10, 0.5); // true - isNear( 10.5, 10, 0.5); // true - isNear(10.51, 10, 0.5); // false - -### Common use cases - -Games where a certain action should happen if an *actor* is close to a target, -gravity fields, any numeric check that has some tolerance. - - - - -## lerp(ratio, start, end):Number - -Linear interpolation. - - lerp(0.5, 0, 10); // 5 - lerp(0.75, 0, 10); // 7.5 - -### Common use cases - -Linear interpolation is commonly used to create animations of elements moving -from one point to another, where you simply update the current ratio (which in -this case represents time) and get back the position of the element at that -"frame". - -The core idea of `lerp` is that you are using a number that goes from `0` to -`1` to specify a ratio inside that scale. This concept can be applied to -convert numbers from different scales easily. - -See: [`map()`](#map), [`norm()`](#norm) - - - - -## loop(val, min, max):Number - -Loops value inside range. Will return `min` if `val > max` and `max` if `val -< min`, otherwise it returns `val`. - - loop(-1, 0, 10); // 10 - loop( 1, 0, 10); // 1 - loop( 5, 0, 10); // 5 - loop( 9, 0, 10); // 9 - loop(10, 0, 10); // 10 - loop(11, 0, 10); // 0 - -Similar to [`clamp()`](#clamp) but *loops* the value inside the range when an -overflow occurs. - -### Common use cases - -Image galleries, infinite scroll, any kind of logic that requires that the -first item should be displayed after the last one or the last one should be -displayed after first if going on the opposite direction. - -See: [`clamp()`](#clamp) - - - - -## map(val, min1, max1, min2, max2):Number - -Maps a number from one scale to another. - - map(3, 0, 4, -1, 1) // 0.5 - map(3, 0, 10, 0, 100) // 30 - -### Common use cases - -Very useful to convert values from/to multiple scales. - -Let's suppose we have a slider that needs to go from `2000` to `5000` and that slider -has `300px` of width, here is how we would translate the knob position into the -current value: - - var knobX = 123; - var sliderWid = 300; - var minVal = 2000; - var maxVal = 5000; - - var curVal = map(knobX, 0, sliderWid, minVal, maxVal); // 3230 - -See: [`lerp()`](#lerp), [`norm()`](#norm) - - - - -## norm(val, min, max):Number - -Gets normalized ratio of value inside range. - -If `val < min` or `val > max` it will throw a `RangeError` since we can't -normalize the value. - - norm(50, 0, 100); // 0.5 - norm(75, 0, 100); // 0.75 - norm(100, 0, 100); // 1 - norm(-50, 0, 100); // RangeError: value (-50) must be between 0 and 100 - -### Common use cases - -Convert values between scales, used by [`map()`](#map) internally. Direct -opposite of [`lerp()`](#lerp). - -See: [`lerp()`](#lerp), [`map()`](#map) - - - -## round(val[, step]):Number - -Round value to full steps. Similar to `Math.round()` but allow setting an -arbitrary *radix*. - - // default - round(0.22); // 0 - round(0.49); // 0 - round(0.51); // 1 - - // custom radix - round(0.22, 0.5); // 0 - round(0.49, 0.5); // 0.5 - round(0.51, 0.5); // 0.5 - round(0.74, 0.5); // 0.5 - round(0.75, 0.5); // 1 - round(1.24, 0.5); // 1 - round(1.25, 0.5); // 1.5 - round(1.74, 0.5); // 1.5 - -### Common use cases - -Round values by increments of 0.5/5/10/1000/etc. - -See: [`floor()`](#floor), [`ceil()`](#ceil), [`countSteps()`](#countSteps) - - - -------------------------------------------------------------------------------- - -For more usage more info check the specs and source code. - diff --git a/truebit-implementation/node_modules/mout/doc/number.md b/truebit-implementation/node_modules/mout/doc/number.md deleted file mode 100644 index 78e9c07c..00000000 --- a/truebit-implementation/node_modules/mout/doc/number.md +++ /dev/null @@ -1,279 +0,0 @@ -# number # - -Number utilities. - - -## abbreviate(val[, nDecimalDigits, dictionary]):String - -Abbreviate number to thousands (K), millions (M) or billions (B). - -The default value for `nDecimalDigits` is `1`. - -### Example - - abbreviate(123456); // "123.5K" - abbreviate(12345678); // "12.3M" - abbreviate(1234567890); // "1.2B" - -You can set the amount of decimal digits (default is `1`): - - abbreviate(543); // "0.5K" - abbreviate(543, 1); // "0.5K" - abbreviate(543, 2); // "0.54K" - abbreviate(543, 3); // "0.543K" - -You can customize the abbreviation by passing a custom "dictionary": - - var _ptbrDict = { - thousand: ' mil', - million: ' Mi', - billion: ' Bi' - }; - function customAbbr(val) { - return abbreviate(val, 1, _ptbrDict); - } - - customAbbr(123456); // "123.5 mil" - customAbbr(12345678); // "12.3 Mi" - customAbbr(1234567890); // "1.2 Bi" - - - -## currencyFormat(val[, nDecimalDigits, decimalSeparator, thousandsSeparator]):String - -Format a number as currency. - -### Example: - - currencyFormat(1000); // "1,000.00" - currencyFormat(1000, 1); // "1,000.0" - currencyFormat(1000, 2, ',', '.'); // "1.000,00" - - - -## enforcePrecision(val, nDecimalDigits):Number - -Enforce a specific amount of decimal digits and also fix floating point -rounding issues. - -### Example: - -```js -enforcePrecision(0.615, 2); // 0.62 -enforcePrecision(0.625, 2); // 0.63 -//floating point rounding "error" (rounds to odd number) -+(0.615).toFixed(2); // 0.61 -+(0.625).toFixed(2); // 0.63 -``` - - -## isNaN(val):Boolean - -ES6 `Number.isNaN()`, checks if supplied value is `NaN`. - -```js -// only returns `true` for `NaN` -isNaN(NaN); // true -isNaN(0 / 0); // true - -// everything else is `false` -isNaN(true); // false -isNaN(123); // false -isNaN('asd'); // false -isNaN('NaN'); // false -``` - - -## MAX_INT:Number - -Maximum 32-bit signed integer value. `Math.pow(2, 31) - 1` - -### Example: - -```js -console.log( MAX_INT ); // 2147483647 -``` - - -## MAX_SAFE_INTEGER:Number - -Maximum safe integer. `Math.pow(2,53) − 1` - - -## MAX_UINT:Number - -Maximum 32-bit unsigned integer value. `Math.pow(2, 32) - 1` - -### Example: - -```js -console.log( MAX_UINT ); // 4294967295 -``` - - -## MIN_INT:Number - -Minimum 32-bit signed integer value. `Math.pow(2, 31) * -1`. - -### Example: - -```js -console.log( MIN_INT ); // -2147483648 -``` - - -## nth(n):String - -Returns the "nth" of number. (`"st"`, `"nd"`, `"rd"`, `"th"`) - -```js -nth(1); // "st" -nth(2); // "nd" -nth(12); // "th" -nth(22); // "nd" -nth(23); // "rd" -nth(34); // "th" -``` - -See: [`ordinal()`](#ordinal) - - - -## ordinal(n):String - -Converts number into ordinal form (1st, 2nd, 3rd, 4th, ...) - -```js -ordinal(1); // "1st" -ordinal(2); // "2nd" -ordinal(3); // "3rd" -ordinal(14); // "14th" -ordinal(21); // "21st" -``` - -See: [`nth()`](#nth) - - - -## pad(n, minLength[, char]):String - -Add padding zeros if `n.length` < `minLength`. - -### Example: - -```js -pad(1, 5); // "00001" -pad(12, 5); // "00012" -pad(123, 5); // "00123" -pad(1234, 5); // "01234" -pad(12345, 5); // "12345" -pad(123456, 5); // "123456" - -// you can also specify the "char" used for padding -pad(12, 5, '_'); // "___12" -``` - -see: [string/lpad](./string.html#lpad) - - - -## rol(val, shift):Number - -Bitwise circular shift left. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## ror(val, shift):Number - -Bitwise circular shift right. - -More info at [Wikipedia#Circular_shift](http://en.wikipedia.org/wiki/Circular_shift) - - - -## sign(val):Number - -Returns `-1` if value is negative, `0` if the value is `0` and `1` if value is positive. Useful for -multiplications. - -```js -sign(-123); // -1 -sign(123); // 1 -sign(0); // 0 -``` - - - -## toInt(val):Number - -"Convert" value into an 32-bit integer. Works like `Math.floor` if `val > 0` and -`Math.ceil` if `val < 0`. - -**IMPORTANT:** val will wrap at [number/MIN_INT](#MIN_INT) and -[number/MAX_INT](#MAX_INT). - -Created because most people don't know bitwise operations and also because this -feature is commonly needed. - -[Perf tests](http://jsperf.com/vs-vs-parseint-bitwise-operators/7) - -### Example: - -```js -toInt(1.25); // 1 -toInt(0.75); // 0 -toInt(-0.55); // 0 -toInt(-5.0001) // -5 -``` - - - -## toUInt(val):Number - -"Convert" value into an 32-bit unsigned integer. - -Works like AS3#uint(). - -**IMPORTANT:** val will wrap at 2^32. - -### Example: - -```js -toUInt(1.25); // 1 -toUInt(0.75); // 0 -toUInt(-0.55); // 0 -toUInt(-5.0001); // 4294967291 -toUInt(Math.pow(2,32) - 0.5); // 4294967295 -toUInt(Math.pow(2,32) + 0.5); // 0 -``` - - -## toUInt31(val):Number - -"Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - -Useful since all bitwise operators besides `>>>` treat numbers as signed -integers. - -**IMPORTANT:** val will wrap at 2^31 and negative numbers will be treated as -`zero`. - -### Example: - -```js -toUInt31(1.25); // 1 -toUInt31(0.75); // 0 -toUInt31(-0.55); // 0 -toUInt31(-5.0001); // 0 -toUInt31(Math.pow(2,31) - 0.5); // 21474836470 -toUInt31(Math.pow(2,31) + 0.5); // 0 -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/truebit-implementation/node_modules/mout/doc/object.md b/truebit-implementation/node_modules/mout/doc/object.md deleted file mode 100644 index 02bf4e69..00000000 --- a/truebit-implementation/node_modules/mout/doc/object.md +++ /dev/null @@ -1,811 +0,0 @@ -# object # - -Object utilities. - - - -## bindAll(obj, [...methodNames]):void - -Bind methods of the target object to always execute on its own context -(ovewritting the original function). - -See: [function/bind](./function.html#bind) - -```js -var view = { - name: 'Lorem Ipsum', - logNameOnClick: function() { - console.log(this.name); - } -}; - -// binds all methods by default -bindAll(view); -jQuery('#docs').on('click', view.logNameOnClick); -``` - -You can also specify the list of methods that you want to bind (in case you -just want to bind a few of them). - -```js -// only the listed methods will be bound to `obj` context -bindAll(obj, 'logNameOnClick', 'doAwesomeStuffOnDrag'); -``` - - - -## contains(obj, value):Boolean - -Similar to [Array/contains](array.html#contains). Checks if Object contains -value. - -```js -var obj = { - a: 1, - b: 2, - c: 'bar' -}; -contains(obj, 2); // true -contains(obj, 'foo'); // false -``` - - - -## deepFillIn(target, ...objects):Object - -Fill missing properties recursively. - -It's different from `deepMixIn` since it won't override any existing property. -It's also different from `merge` since it won't clone child objects during the -process. - -It returns the target object and mutates it in place. - -See: [`fillIn()`](#fillIn), [`deepMixIn()`](#deepMixIn), [`merge()`](#merge) - -```js -var base = { - foo : { - bar : 123 - }, - lorem : 'ipsum' -}; -var options = deepFillIn({foo : { baz : 45 }, lorem : 'amet'}, base); -// > {foo: {bar:123, baz : 45}, lorem : 'amet'} -``` - - - -## deepMatches(target, pattern):Boolean - -Recursively checks if object contains all properties/value pairs. When both -the target and pattern values are arrays, it checks that the target value -contain matches for all the items in the pattern array (independent of order). - -```js -var john = { - name: 'John', - age: 22, - pets: [ - { type: 'cat', name: 'Grumpy Cat' }, - { type: 'dog', name: 'Hawk' } - ] -}; - -deepMatches(john, { name: 'John' }); // true -deepMatches(john, { age: 21 }); // false -deepMatches(john, { pets: [ { type: 'cat' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hawk' } ] }); // true -deepMatches(john, { pets: [ { name: 'Hairball' } ] }); // false -``` - -See [`matches()`](#matches) - - - -## deepMixIn(target, ...objects):Object - -Mixes objects into the target object, recursively mixing existing child objects -as well. - -It will only recursively mix objects if both (existing and new) values are -plain objects. - -Returns the target object. Like [`merge()`](#merge), but mutates the target -object, and does not clone child objects. - -```js -var target = { - foo: { - name: "foo", - id: 1 - } -}; - -deepMixIn(target, { foo: { id: 2 } }); -console.log(target); // { foo: { name: "foo", id: 2 } } -``` - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## equals(a, b, [callback]):Boolean - -Tests whether two objects contain the same keys and values. - -`callback` specifies the equality comparison function used to compare the -values. It defaults to using [lang/is](lang.html#is). - -It will only check the keys and values contained by the objects; it will not -check the objects' prototypes. If either of the values are not objects, they -will be compared using the `callback` function. - -```js -equals({}, {}); // true -equals({ a: 1 }, { a: 1 }); // true -equals({ a: 1 }, { a: 2 }); // false -equals({ a: 1, b: 2 }, { a: 1 }); // false -equals({ a: 1 }, { a: 1, b: 2 }); // false -equals(null, null); // true -equals(null, {}); // false -equals({ a: 1 }, { a: '1' }, function(a, b) { return a == b; }); // true -``` - -See: [array/equals](array.html#equals), [lang/deepEquals](lang.html#deepEquals) - - -## every(obj, callback, [thisObj]):Boolean - -Similar to [Array/every](array.html#every). Tests whether all properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -every(obj, isNumber); // false -``` - - - -## fillIn(obj, ...default):Object - -Fill in missing properties in object with values from the *defaults* objects. - - var base = { - foo : 'bar', - num : 123 - }; - - fillIn({foo:'ipsum'}, base); // {foo:'ipsum', num:123} - -PS: it allows merging multiple objects at once, the first ones will take -precedence. - -See: [`mixIn()`](#mixIn), [`merge()`](#merge), [`deepFillIn()`](#deepFillIn) - - - -## filter(obj, callback, [thisObj]) - -Returns a new object containing all properties where `callback` returns true, -similar to Array/filter. It does not use properties from the object's -prototype. - -Callback receives the same arguments as `forOwn()`. - -See: [`forOwn()`](#forOwn), [`forIn()`](#forIn), [`pick()`](#pick) - -```js -var obj = { - foo: 'value', - bar: 'bar value' -}; - -// returns { bar: 'bar value' } -filter(obj, function(v) { return v.length > 5; }); - -// returns { foo: 'value' } -filter(obj, function(v, k) { return k === 'foo'; }); -``` - - - -## find(obj, callback, [thisObj]) - -Loops through all the properties in the Object and returns the first one that -passes a truth test (callback), similar to [Array/find](array.html#find). -Unlike Array/find, order of iteration is not guaranteed. - -```js -var obj = { - a: 'foo', - b: 12 -}; - -find(obj, isString); // 'foo' -find(obj, isNumber); // 12 -``` - - - -## flatten(object, [level]):Object - -Recursively flattens an object. A new object containing all the values is -returned. If `level` is specified, it will only flatten up to that level. -Note that objects within arrays will not be flattened. - -### Example - -```js -flatten({ a: 1, b: { c: 2, d: { e: 3 } } }); -// > { a: 1, 'b.c': 2, 'b.d.e': 3 } -flatten({ a: 1, b: { c: 2, d: { e: 3 } } }, 1); -// > { a: 1, 'b.c': 2, 'b.d': { e: 3 } } -``` - -See: [`array/flatten()`](./array.html#flatten) - - -## forIn(obj, callback[, thisObj]) - -Iterate over all properties of an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -It **will** iterate over inherited (enumerable) properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forIn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 7 -console.log(keys); // ['foo', 'bar', 'lorem'] -``` - - - -## forOwn(obj, callback[, thisObj]) - -Iterate over all own properties from an Object, similar to -[Array/forEach](array.html#forEach). - -It [avoids don't enum bug on IE](https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug). -Notice that it **won't** iterate over properties from the prototype. - -It allows exiting the iteration early by returning `false` on the callback. - -See: [`forIn()`](#forIn), [`keys()`](#keys), [`values()`](#values) - -### Callback arguments - -Callback will receive the following arguments: - - 1. Property Value (*) - 2. Key name (String) - 3. Target object (Object) - -### Example - -```js -function Foo(){ - this.foo = 1; - this.bar = 2; -} - -// will be ignored -Foo.prototype.lorem = 4; - -var obj = new Foo(); - -var result = 0; -var keys = []; - -forOwn(obj, function(val, key, o){ - result += val; - keys.push(key); -}); - -console.log(result); // 3 -console.log(keys); // ['foo', 'bar'] -``` - - - -## functions(obj):Array - -Returns a sorted list of all enumerable properties that have function values -(including inherited properties). - -```js -var obj = { - foo : function(){}, - bar : 'baz' -}; -functions(obj); // ['foo'] -``` - - - -## get(obj, propName):* - -Returns nested property value. Will return `undefined` if property doesn't -exist. - -See: [`set()`](#set), [`namespace()`](#namespace), [`has()`](#has) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -get(lorem, 'ipsum.dolor.sit'); // "amet" -get(lorem, 'foo.bar'); // undefined -``` - - - -## has(obj, propName):Boolean - -Checks if object contains a child property. Useful for cases where you need to -check if an object contain a *nested* property. It will get properties -inherited by the prototype. - -see: [`hasOwn()`](#hasOwn), [`get()`](#get) - -```js -var a = { - b : { - c : 123 - } - }; - -has(a, 'b.c'); // true -has(a, 'foo.c'); // false -``` - -### Common use case - -```js -if( has(a, 'foo.c') ){ // false - // ... -} - -if( a.foo.c ){ // ReferenceError: `foo` is not defined - // ... -} -``` - - - -## hasOwn(obj, propName):Boolean - -Safer `Object.hasOwnProperty`. Returns a boolean indicating whether the object -has the specified property. - -see: [`has()`](#has) - -```js -var obj = { - foo: 1, - hasOwnProperty : 'bar' -}; - -obj.hasOwnProperty('foo'); // ERROR! hasOwnProperty is not a function - -hasOwn(obj, 'foo'); // true -hasOwn(obj, 'hasOwnProperty'); // true -hasOwn(obj, 'toString'); // false -``` - - - -## keys(obj):Array - -Returns an array of all own enumerable properties found upon a given object. -It will use the native `Object.keys` if present. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`values()`](#values) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -keys(obj); // ['foo', 'bar', 'lorem'] -``` - - - -## map(obj, callback, [thisObj]):Object - -Returns a new object where the property values are the result of calling the -callback for each property in the original object, similar to Array/map. - -The callback function receives the same arguments as in `forOwn()`. - -See: [`forOwn()`](#forOwn) - -```js -var obj = { foo: 1, bar: 2 }, - data = { foo: 0, bar: 1 }; - -map(obj, function(v) { return v + 1; }); // { foo: 2, bar: 3 } -map(obj, function(v, k) { return k; }); // { foo: "foo", bar: "bar" } -map(obj, function(v, k) { return this[k]; }, data); // { foo: 0, bar: 1 } -``` - - - -## matches(obj, props):Boolean - -Checks if object contains all properties/values pairs. Useful for validation -and filtering. - -```js -var john = {age:25, hair:'long', beard:true}; -var mark = {age:27, hair:'short', beard:false}; -var hippie = {hair:'long', beard:true}; -matches(john, hippie); // true -matches(mark, hippie); // false -``` - -See [`deepMatches()`](#deepMatches) - - - -## merge(...objects):Object - -Deep merges objects. Note that objects and properties will be cloned during the -process to avoid undesired side effects. It return a new object and won't -affect source objects. - -```js -var obj1 = {a: {b: 1, c: 1, d: {e: 1, f: 1}}}; -var obj2 = {a: {b: 2, d : {f : 'yeah'} }}; - -merge(obj1, obj2); // {a: {b : 2, c : 1, d : {e : 1, f : 'yeah'}}} -``` - -See: [`deepMixIn()`](#deepMixIn), [`deepFillIn()`](#deepFillIn) - - - -## max(obj[, iterator]):* - -Returns maximum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/max](array.html#max). - -See: [`min()`](#min) - -```js -max({a: 100, b: 2, c: 1, d: 3, e: 200}); // 200 -max({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'lorem' -``` - - - -## min(obj[, iterator]):* - -Returns minimum value inside object or use a custom iterator to define how -items should be compared. Similar to [Array/min](array.html#min). - -See: [`max()`](#max) - -```js -min({a: 100, b: 2, c: 1, d: 3, e: 200}); // 1 -min({a: 'foo', b: 'lorem', c: 'amet'}, function(val){ - return val.length; -}); // 'foo' -``` - - - -## mixIn(target, ...objects):Object - -Combine properties from all the objects into first one. - -This method affects target object in place, if you want to create a new Object -pass an empty object as first parameter. - -### Arguments - - 1. `target` (Object) : Target Object. - 2. `...objects` (...Object) : Objects to be combined (0...n objects). - -### Example - -```js -var a = {foo: "bar"}; -var b = {lorem: 123}; - -mixIn({}, a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar"} - -mixIn(a, b); // {foo: "bar", lorem: 123} -console.log(a); // {foo: "bar", lorem: 123} -``` - -See: [`fillIn()`](#fillIn), [`merge()`](#merge) - - - - -## namespace(obj, propName):Object - -Creates an empty object inside namespace if not existent. Will return created -object or existing object. - -See: [`get()`](#get), [`set()`](#set) - -```js -var obj = {}; -namespace(obj, 'foo.bar'); // {} -console.log(obj); // {foo:{bar:{}}} -``` - - -## omit(obj, ...keys):Object - -Return a copy of the object without the blacklisted keys. - -See: [`filter()`](#filter) - -```js -var user = { - firstName : 'John', - lastName : 'Doe', - dob : '1985/07/23', - gender : 'male' -}; - -// can pass an array of keys as second argument -var keys = ['firstName', 'dob'] -omit(user, keys); // {lastName : 'Doe', gender : 'male'} - -// or multiple arguments -omit(user, 'firstName', 'lastName'); // {dob : '1985/07/23', gender : 'male'} -``` - - - -## pick(obj, ...keys):Object - -Return a copy of the object that contains only the whitelisted keys. - -See: [`filter()`](#filter) - -```js -var user = { - firstName : 'John', - lastName : 'Doe', - dob : '1985/07/23', - gender : 'male' -}; - -// can pass an array of keys as second argument -var keys = ['firstName', 'dob'] -pick(user, keys); // {firstName:"John", dob: "1985/07/23"} - -// or multiple arguments -pick(user, 'firstName', 'lastName'); // {firstName:"John", lastName: "Doe"} -``` - - - -## pluck(obj, propName):Object - -Extract an object containing property values with keys as they appear in the -passed object. - -```js -var users = { - first: { - name : 'John', - age : 21 - }, - second: { - name : 'Mary', - age : 25 - } -}; - -pluck(users, 'name'); // {first: 'John', second: 'Mary'} ); -pluck(users, 'age'); // {first: 21, second: 25} ); -``` - - - -## reduce(obj, callback, initial, [thisObj]):* - -Similar to [Array/reduce](array.html#reduce). - -Apply a function against an accumulator and each property of the object (order -is undefined) as to reduce it to a single value. - -```js -var obj = {a: 1, b: 2, c: 3, d: 4}; - -function sum(prev, cur, key, list) { - compare1.push(prev); - return prev + cur; -} - -reduce(obj, sum); // 10 -``` - - - -## reject(obj, callback, thisObj):Object - -Returns a new object containing all properties where `callback` returns true, -similar to [Array/reject](array.html#reject). It does not use properties from -the object's prototype. Opposite of [`filter()`](#filter). - -See [`filter()`](#filter) - -### Example - -```js -var obj = {a: 1, b: 2, c: 3, d: 4, e: 5}; -reject(obj, function(x) { return (x % 2) !== 0; }); // {b: 2, d: 4} -``` - - - -## values(obj):Array - -Returns an array of all own enumerable properties values found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -values(obj); // [1, 2, 3] -``` - - - -## set(obj, propName, value) - -Sets a nested property value. - -See: [`get()`](#get), [`namespace()`](#namespace) - -```js -var obj = {}; -set(obj, 'foo.bar', 123); -console.log(obj.foo.bar); // 123 -console.log(obj); // {foo:{bar:123}} -``` - - - -## size(obj):Number - -Returns the count of own enumerable properties found upon a given object. - -PS: it won't return properties from the prototype. - -See: [`forOwn()`](#forOwn), [`keys()`](#keys) - -```js -var obj = { - foo : 1, - bar : 2, - lorem : 3 -}; -size(obj); // 3 -``` - - - -## some(obj, callback, [thisObj]):Boolean - -Similar to [Array/some](array.html#some). Tests whether any properties in the -object pass the test implemented by the provided callback. - -```js -var obj = { - a: 1, - b: 2, - c: 3, - d: 'string' -}; - -some(obj, isNumber); // true -``` - - - -## unset(obj, propName):Boolean - -Delete object property if existent and returns a boolean indicating succes. It -will also return `true` if property doesn't exist. - -Some properties can't be deleted, to understand why [check this -article](http://perfectionkills.com/understanding-delete/). - -See: [`set()`](#set) - -```js -var lorem = { - ipsum : { - dolor : { - sit : 'amet' - } - } - }; - -unset(lorem, 'ipsum.dolor.sit'); // true -console.log(lorem.ipsum.dolor); // {} -unset(lorem, 'foo.bar'); // true -``` - - - -## result(object, property):Mixed - -Evaluates an objects property and returns result. - -```js -var person = { - name: 'john', - - mood: function() { - // some dynamic calculated property. - return 'happy'; - } -}; - -var name = result(person, 'name'), // john - mood = result(person, 'mood'); // happy -``` diff --git a/truebit-implementation/node_modules/mout/doc/queryString.md b/truebit-implementation/node_modules/mout/doc/queryString.md deleted file mode 100644 index 1be3c102..00000000 --- a/truebit-implementation/node_modules/mout/doc/queryString.md +++ /dev/null @@ -1,115 +0,0 @@ -# queryString # - -Utilities for query string manipulation. - - - -## contains(url, paramName):Boolen - -Checks if query string contains parameter. - -### Arguments: - - 1. `url` (String) : URL or query string. - 2. `paramName` (String) : Parameter name. - -### Example: - -```js -var url = 'example.com/?lorem=ipsum'; -contains(url, 'lorem'); // true -contains(url, 'foo'); //false -``` - - - -## decode(queryStr[, shouldTypecast]):Object - -Parses query string and creates an object of keys => vals. - -Will typecast value with [`string/typecast`](string.html#typecast) by default -and decode string parameters using `decodeURIComponent()`. - -```js -var query = '?foo=bar&lorem=123'; -decode(query); // {foo: "bar", lorem: 123} -decode(query, false); // {foo: "bar", lorem: "123"} -``` - - -## encode(obj):String - -Encode object into a query string. - -Will encode parameters with `encodeURIComponent()`. - -```js -encode({foo: "bar", lorem: 123}); // "?foo=bar&lorem=123" -``` - - -## getParam(url, param[, shouldTypecast]):* - -Get query parameter value. - -Will typecast value with [`string/typecast`](string.html#typecast) by default. - -See: [`setParam()`](#setParam) - -### Arguments: - - 1. `url` (String) : Url. - 2. `param` (String) : Parameter name. - 3. `[shouldTypecast]` (Boolean) : If it should typecast value. - -### Example: - -```js -var url = 'example.com/?foo=bar&lorem=123&ipsum=false'; -getParam(url, 'dolor'); // "amet" -getParam(url, 'lorem'); // 123 -getParam(url, 'lorem', false); // "123" -``` - - -## parse(url[, shouldTypecast]):Object - -Parses URL, extracts query string and decodes it. - -It will typecast all properties of the query object unless second argument is -`false`. - -Alias to: `decode(getQuery(url))`. - -```js -var url = 'example.com/?lorem=ipsum&a=123'; -parse(url); // {lorem: "ipsum", a: 123} -parse(url, false); // {lorem: "ipsum", a: "123"} -``` - - -## getQuery(url):String - -Gets full query as string with all special chars decoded. - -```js -getQuery('example.com/?lorem=ipsum'); // "?lorem=ipsum" -``` - - -## setParam(url, paramName, value):String - -Add new query string parameter to URL or update existing value. - -See: [`getParam()`](#getParam) - -```js -setParam('?foo=bar&lorem=0', 'lorem', 'ipsum'); // '?foo=bar&lorem=ipsum' -setParam('?lorem=1', 'foo', 123); // '?lorem=1&foo=123' -``` - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/truebit-implementation/node_modules/mout/doc/random.md b/truebit-implementation/node_modules/mout/doc/random.md deleted file mode 100644 index cd32eb35..00000000 --- a/truebit-implementation/node_modules/mout/doc/random.md +++ /dev/null @@ -1,256 +0,0 @@ -# random # - -Pseudo-random generators. - -mout uses `Math.random` by default on all the pseudo-random generators, if -you need a seeded random or a better algorithm see the [`random()`](#random) -documentation for instructions. - - - -## choice(...items):* - -Returns a random element from the supplied arguments or from an array if single -argument is an array. - -### Example: - -```js -choice(1, 2, 3, 4, 5); // 3 - -var arr = ['lorem', 'ipsum', 'dolor']; -choice(arr); // 'dolor' -``` - - - -## guid():String - -Generates a pseudo-random [Globally Unique Identifier](http://en.wikipedia.org/wiki/Globally_unique_identifier) (v4). - -Since the total number of GUIDs is 2122 the chance of generating the -same value twice is negligible. - -**Important:** this method uses `Math.random` by default so the UUID isn't -*safe* (sequence of outputs can be predicted in some cases), check the -[`random()`](#random) documentation for more info on how to replace the default -PRNG if you need extra safety or need *seeded* results. - -See: [`randHex()`](#randHex), [`random()`](#random) - -### Example: - -```js -guid(); // 830e9f50-ac7f-4369-a14f-ed0e62b2fa0b -guid(); // 5de3d09b-e79c-4727-932b-48c49228d508 -``` - - - -## rand([min], [max]):Number - -Gets a random number inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -rand(); // 448740433.55274725 -rand(); // -31797596.097682 -rand(0, 10); // 7.369723 -rand(0, 10); // 5.987042 -``` - -See: [`random()`](#random) - - - -## randBit():Number - -Returns a random "bit" (0 or 1). Useful for addition/subtraction. - -It's slightly faster than `choice(0, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randBit(); // 1 -randBit(); // 0 - -//same effect as -choice(0, 1); -``` - - -## randBool():Boolean - -Returns a random Boolean (`true` or `false`). - -Since this is very common it makes sense to abstract it into a discrete method. - -### Example: - -```js -randBool(); // true -randBool(); // false -``` - - - -## randHex([size]):String - -Returns a random hexadecimal string. - -The default `size` is `6`. - -### Example: - -```js -randHex(); // "dd8575" -randHex(); // "e6baeb" -randHex(2); // "a2" -randHex(30); // "effd7e2ad9a4a3067e30525fab983a" -``` - - - -## randInt([min], [max]):Number - -Gets a random integer inside range or snap to min/max values. - -### Arguments: - - 1. `[min]` (Number) : Minimum value. Defaults to `number/MIN_INT`. - 2. `[max]` (Number) : Maximum value. Defaults to `number/MAX_INT`. - - -### Example: - -```js -randInt(); // 448740433 -randInt(); // -31797596 -randInt(0, 10); // 7 -randInt(0, 10); // 5 -``` - - - -## randSign():Number - -Returns a random "sign" (-1 or 1). Useful for multiplications. - -It's slightly faster than `choice(-1, 1)` since implementation is simpler (not -that it will make a huge difference in most cases). - -See: [`choice()`](#choice) - -### Example: - -```js -randSign(); // -1 -randSign(); // 1 - -//same effect as -choice(-1, 1); -``` - - - -## random():Number - -Returns a random number between `0` and `1`. Same as `Math.random()`. - -```js -random(); // 0.35435103671625257 -random(); // 0.8768321881070733 -``` - -**Important:** No methods inside mout should call `Math.random()` -directly, they all use `random/random` as a proxy, that way we can -inject/replace the pseudo-random number generator if needed (ie. in case we -need a seeded random or a better algorithm than the native one). - -### Replacing the PRNG - -In some cases we might need better/different algorithms than the one provided -by `Math.random` (ie. safer, seeded). - -Because of licensing issues, file size limitations and different needs we -decided to **not** implement a custom PRNG and instead provide a easy way to -override the default behavior. - [issue #99](https://github.com/millermedeiros/amd-utils/issues/99) - -If you are using mout with a loader that supports the [AMD map -config](https://github.com/amdjs/amdjs-api/wiki/Common-Config), such as -[RequireJS](http://requirejs.org/), you can use it to replace the PRNG -(recommended approach): - -```js -requirejs.config({ - map : { - // all modules will load "my_custom_prng" instead of - // "mout/random/random" - '*' : { - 'mout/random/random' : 'my_custom_prng' - } - } -}); -``` - -You also have the option to override `random.get` in case you are using -mout on node.js or with a loader which doesn't support the map config: - -```js -// replace the PRNG -var n = 0; -random.get = function(){ - return ++n % 2? 0 : 1; // not so random :P -}; -random(); // 0 -random(); // 1 -random(); // 0 -random(); // 1 -``` - -See this [detailed explanation about PRNG in -JavaScript](http://baagoe.org/en/w/index.php/Better_random_numbers_for_javascript) -to understand the issues with the native `Math.random` and also for a list of -algorithms that could be used instead. - - - -## randString([length, dictionary]):String - -Returns a random string. - -By default returns string containing alphanumeric characters (lowercase and uppercase) with a length of 8. - -### Arguments: - - 1. `[length]` (number) : Length of the string to return. Defaults to 8. - 2. `[dictionary]` (string) : A string containing all characters used as a dictionary for the random string construction. Defaults to alphanumeric characters (lowercase and uppercase). - -### Example: - -```js -randString(); // returns a string with length 8. -randString(12); // returns a string of length 12. -randString(-1); // returns a string of length 8. -randString(null, 'pew!'); // returns a random string of length 8 composed of 'p', 'e', 'w' and '!'. -randString(10, '0'); // always returns '0's of length 10. -randString(rand(8, 10)); // returns a random string with length between 8 and 10. -``` - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... diff --git a/truebit-implementation/node_modules/mout/doc/string.md b/truebit-implementation/node_modules/mout/doc/string.md deleted file mode 100644 index 70a36fc0..00000000 --- a/truebit-implementation/node_modules/mout/doc/string.md +++ /dev/null @@ -1,626 +0,0 @@ -# string # - -String utilities. - - -## camelCase(str):String - -Convert string to "camelCase" text. - -See: [`pascalCase()`](#pascalCase), [`unCamelCase()`](#unCamelCase) - -### Example - -```js -camelCase('lorem-ipsum-dolor'); // "loremIpsumDolor" -camelCase('lorem ipsum dolor'); // "loremIpsumDolor" -``` - - - -## contains(str, substring, [fromIndex]):Boolean - -Checks if string contains the given substring. - -See: [`startsWith()`](#startsWith), [`endsWith()`](#endsWith) - -### Example - -```js -contains('lorem', 'or'); // true -contains('lorem', 'bar'); // false -``` - - - -## crop(str, maxChars, [append]):String - -Truncate string at full words. Alias to `truncate(str, maxChars, append, true);`. - -See: [`truncate()`](#truncate) - -### Example - -```js -crop('lorem ipsum dolor', 10); // "lorem..." -crop('lorem ipsum dolor', 10, '+'); // "lorem+" -``` - - - -## endsWith(str, suffix):Boolean - -Checks if string ends with specified suffix. - -See: [`startsWith()`](#startsWith), [`contains()`](#contains) - -### Example - -```js -endsWith('lorem ipsum', 'lorem'); // false -endsWith('lorem ipsum', 'ipsum'); // true -``` - - - -## escapeHtml(str):String - -Escapes the following special characters for use in HTML: - -* `&` becomes `&` -* `<` becomes `<` -* `>` becomes `>` -* `'` becomes `'` -* `"` becomes `"` - -No other characters are escaped. To HTML-escape other characters as well, use a third-party library like [_he_](http://mths.be/he). - -See: [`unescapeHtml()`](#unescapeHtml) - -### Example - -```js -escapeHtml('lorem & "ipsum"'); // "lorem &amp; &quot;ipsum&quot;" -``` - - - -## escapeRegExp(str):String - -Escape special chars to be used as literals in RegExp constructors. - -### Example - -```js -str = escapeRegExp('[lorem.ipsum]'); // "\\[lorem\\.ipsum\\]" -reg = new RegExp(str); // /\[lorem\.ipsum\]/ -``` - - - -## escapeUnicode(str[, shouldEscapePrintable]):String - -Unicode escape chars. - -It will only escape non-printable ASCII chars unless `shouldEscapePrintable` is -set to `true`. - -See: [`unescapeUnicode()`](#unescapeUnicode) - -```js -escapeUnicode('føo bår'); -// > "f\u00f8o b\u00e5r" -escapeUnicode('føo bår', true); -// > "\u0066\u00f8\u006f\u0020\u0062\u00e5\u0072" -``` - - - -## hyphenate(str):String - -Replaces spaces with hyphens, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`underscore()`](#underscore), -[`unhyphenate`](#unhyphenate) - -```js -hyphenate(' %# lorem ipsum ? $ dolor'); // "lorem-ipsum-dolor" -hyphenate('spéçïãl çhârs'); // "special-chars" -hyphenate('loremIpsum'); // "lorem-ipsum" -``` - - - -## insert(str, index, partial):String - -Inserts a `partial` before the given `index` in the provided `str`. -If the index is larger than the length of the string the partial is appended at the end. -A negative index is treated as `length - index` where `length` is the length or the string. - -```js -insert('this is a sentence', 10, 'sample '); // "this is a sample sentence" -insert('foo', 100, 'bar'); // "foobar" -insert('image.png', -4, '-large'); // "image-large.png" -``` - -## interpolate(str, replacements[, syntax]):String - -String interpolation. Format/replace tokens with object properties. - -```js -var tmpl = 'Hello {{name}}!'; -interpolate(tmpl, {name: 'World'}); // "Hello World!" -interpolate(tmpl, {name: 'Lorem Ipsum'}); // "Hello Lorem Ipsum!" - -tmpl = 'Hello {{name.first}}!'; -interpolate(tmpl, {name: {first: 'Lorem'}}); // "Hello Lorem!" -``` - -It uses a mustache-like syntax by default but you can set your own format if -needed. You can also use Arrays for the replacements (since Arrays are -objects as well): - -```js -// matches everything inside "${}" -var syntax = /\$\{([^}]+)\}/g; -var tmpl = "Hello ${0}!"; -interpolate(tmpl, ['Foo Bar'], syntax); // "Hello Foo Bar!" -``` - - - -## lowerCase(str):String - -"Safer" `String.toLowerCase()`. (Used internally) - -### Example - -```js -(null).toLowerCase(); // Error! -(undefined).toLowerCase(); // Error! -lowerCase(null); // "" -lowerCase(undefined); // "" -``` - - - -## lpad(str, minLength[, char]):String - -Pad string from left with `char` if its' length is smaller than `minLen`. - -See: [`rpad()`](#rpad) - -### Example - -```js -lpad('a', 5); // " a" -lpad('a', 5, '-'); // "----a" -lpad('abc', 3, '-'); // "abc" -lpad('abc', 4, '-'); // "-abc" -``` - - - -## ltrim(str, [chars]):String - -Remove chars or white-spaces from beginning of string. - -`chars` is an array of chars to remove from the beginning of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`rtrim()`](#rtrim), [`trim()`](#trim) - -### Example - -```js -ltrim(' lorem ipsum '); // "lorem ipsum " -ltrim('--lorem ipsum--', ['-']); // "lorem ipsum--" -``` - - - -## makePath(...args):String - -Group arguments as path segments, if any of the args is `null` or `undefined` -it will be ignored from resulting path. It will also remove duplicate "/". - -See: [`array/join()`](array.html#join) - -### Example - -```js -makePath('lorem', 'ipsum', null, 'dolor'); // "lorem/ipsum/dolor" -makePath('foo///bar/'); // "foo/bar/" -``` - - - -## normalizeLineBreaks(str, [lineBreak]):String - -Normalize line breaks to a single format. Defaults to Unix `\n`. - -It handles DOS (`\r\n`), Mac (`\r`) and Unix (`\n`) formats. - -### Example - -```js -// "foo\nbar\nlorem\nipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum'); - -// "foo\rbar\rlorem\ripsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', '\r'); - -// "foo bar lorem ipsum" -normalizeLineBreaks('foo\nbar\r\nlorem\ripsum', ' '); -``` - - - -## pascalCase(str):String - -Convert string to "PascalCase" text. - -See: [`camelCase()`](#camelCase) - -### Example - -```js -pascalCase('lorem-ipsum-dolor'); // "LoremIpsumDolor" -pascalCase('lorem ipsum dolor'); // "LoremIpsumDolor" -``` - - - -## properCase(str):String - -UPPERCASE first char of each word, lowercase other chars. - -### Example - -```js -properCase('loRem iPSum'); // "Lorem Ipsum" -``` - - - -## removeNonASCII(str):String - -Remove [non-printable ASCII -chars](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters). - -### Example - -```js -removeNonASCII('äÄçÇéÉêlorem-ipsumöÖÐþúÚ'); // "lorem-ipsum" -``` - - - -## removeNonWord(str):String - -Remove non-word chars. - -### Example - -```js -var str = 'lorem ~!@#$%^&*()_+`-={}[]|\\:";\'/?><., ipsum'; -removeNonWord(str); // "lorem - ipsum" -``` - - - -## repeat(str, n):String - -Repeat string n-times. - -### Example - -```js -repeat('a', 3); // "aaa" -repeat('bc', 2); // "bcbc" -repeat('a', 0); // "" -``` - - - -## replace(str, search, replacements):String - -Replace string(s) with the replacement(s) in the source. - -`search` and `replacements` can be an array, or a single item. For every item -in `search`, it will call `str.replace` with the search item and the matching -replacement in `replacements`. If `replacements` only contains one replacement, -it will be used for all the searches, otherwise it will use the replacement at -the same index as the search. - -### Example - -```js -replace('foo bar', 'foo', 'test'); // "test bar" -replace('test 1 2', ['1', '2'], 'n'); // "test n n" -replace('test 1 2', ['1', '2'], ['one', 'two']); // "test one two" -replace('123abc', [/\d/g, /[a-z]/g], ['0', '.']); // "000..." -``` - - - -## replaceAccents(str):String - -Replaces all accented chars with regular ones. - -**Important:** Only covers **Basic Latin** and **Latin-1** unicode chars. - -### Example - -```js -replaceAccents('spéçïãl çhârs'); // "special chars" -``` - - - -## rpad(str, minLength[, char]):String - -Pad string from right with `char` if its' length is smaller than `minLen`. - -See: [`lpad()`](#lpad) - -### Example - -```js -rpad('a', 5); // "a " -rpad('a', 5, '-'); // "a----" -rpad('abc', 3, '-'); // "abc" -rpad('abc', 4, '-'); // "abc-" -``` - - - -## rtrim(str, [chars]):String - -Remove chars or white-spaces from end of string. - -`chars` is an array of chars to remove from the end of the string. If -`chars` is not specified, Unicode whitespace chars will be used instead. - -See: [`trim()`](#trim), [`ltrim()`](#ltrim) - -### Example - -```js -rtrim(' lorem ipsum '); // " lorem ipsum" -rtrim('--lorem ipsum--', ['-']); // "--lorem ipsum" -``` - - - -## sentenceCase(str):String - -UPPERCASE first char of each sentence and lowercase other chars. - -### Example - -```js -var str = 'Lorem IpSum DoLOr. maeCeNnas Ullamcor.'; -sentenceCase(str); // "Lorem ipsum dolor. Maecennas ullamcor." -``` - - - -## stripHtmlTags(str):String - -Remove HTML/XML tags from string. - -### Example - -```js -var str = '

lorem ipsum

'; -stripHtmlTags(str); // "lorem ipsum" -``` - - - -## startsWith(str, prefix):Boolean - -Checks if string starts with specified prefix. - -See: [`endsWith()`](#endsWith), [`contains()`](#contains) - -### Example - -```js -startsWith('lorem ipsum', 'lorem'); // true -startsWith('lorem ipsum', 'ipsum'); // false -``` - - - -## slugify(str[, delimeter]):String - -Convert to lower case, remove accents, remove non-word chars and replace spaces -with the delimeter. The default delimeter is a hyphen. - -Note that this does not split camelCase text. - -See: [`hyphenate()`](#hyphenate) and [`underscore()`](#underscore) - -### Example - -```js -var str = 'loremIpsum dolor spéçïãl chârs'; -slugify(str); // "loremipsum-dolor-special-chars" -slugify(str, '_'); // "loremipsum_dolor_special_chars" -``` - - - -## trim(str, [chars]):String - -Remove chars or white-spaces from beginning and end of string. - -`chars` is an array of chars to remove from the beginning and end of the -string. If `chars` is not specified, Unicode whitespace chars will be used -instead. - -See: [`rtrim()`](#rtrim), [`ltrim()`](#ltrim) - -### Example - -```js -trim(' lorem ipsum '); // "lorem ipsum" -trim('-+-lorem ipsum-+-', ['-', '+']); // "lorem ipsum" -``` - - - -## truncate(str, maxChars, [append], [onlyFullWords]):String - -Limit number of chars. Returned string `length` will be `<= maxChars`. - -See: [`crop()`](#crop) - -### Arguments - - 1. `str` (String) : String - 2. `maxChars` (Number) : Maximum number of characters including `append.length`. - 3. `[append]` (String) : Value that should be added to the end of string. - Defaults to "...". - 4. `[onlyFullWords]` (Boolean) : If it shouldn't break words. Default is - `false`. (favor [`crop()`](#crop) since code will be clearer). - -### Example - -```js -truncate('lorem ipsum dolor', 11); // "lorem ip..." -truncate('lorem ipsum dolor', 11, '+'); // "lorem ipsu+" -truncate('lorem ipsum dolor', 11, null, true); // "lorem..." -``` - - - -## typecast(str):* - -Parses string and convert it into a native value. - -### Example - -```js -typecast('lorem ipsum'); // "lorem ipsum" -typecast('123'); // 123 -typecast('123.45'); // 123.45 -typecast('false'); // false -typecast('true'); // true -typecast('null'); // null -typecast('undefined'); // undefined -``` - - - -## unCamelCase(str, [delimiter]):String - -Add the delimiter between camelCase text and convert first char of each word to -lower case. - -The delimiter defaults to a space character. - -See: [`camelCase()`][#camelCase] - -### Example - -```js -unCamelCase('loremIpsumDolor'); // "lorem ipsum dolor" -unCamelCase('loremIpsumDolor', '-'); // "lorem-ipsum-color" -``` - - -## underscore(str):String - -Replaces spaces with underscores, split camelCase text, remove non-word chars, -remove accents and convert to lower case. - -See: [`slugify()`](#slugify), [`hyphenate()`](#hyphenate) - -```js -underscore(' %# lorem ipsum ? $ dolor'); // "lorem_ipsum_dolor" -underscore('spéçïãl çhârs'); // "special_chars" -underscore('loremIpsum'); // "lorem_ipsum" -``` - - - -## unescapeHtml(str):String - -Unescapes the following HTML character references back into the raw symbol they map to: - -* `&` becomes `&` -* `<` becomes `<` -* `>` becomes `>` -* `'` becomes `'` -* `"` becomes `"` - -No other HTML character references are unescaped. To HTML-unescape other entities as well, use a third-party library like [_he_](http://mths.be/he). - - -See: [`escapeHtml()`](#escapeHtml) - -### Example - -```js -unescapeHtml('lorem &amp; &quot;ipsum&quot;'); // 'lorem & "ipsum"' -``` - - - -## unescapeUnicode(str):String - -Unescapes unicode char sequences. - -See: [`escapeUnicode()`](#escapeUnicode) - -```js -unescapeUnicode('\\u0066\\u00f8\\u006f\\u0020\\u0062\\u00e5\\u0072'); -// > 'føo bår' -``` - - - -## unhyphenate(str):String - -Replaces hyphens with spaces. (only hyphens between word chars) - -See : [`hyphenate()`](#hyphenate) - -### Example - -```js -unhyphenate('lorem-ipsum-dolor'); // "lorem ipsum dolor" -``` - - -## upperCase(str):String - -"Safer" `String.toUpperCase()`. (Used internally) - -### Example - -```js -(null).toUpperCase(); // Error! -(undefined).toUpperCase(); // Error! -upperCase(null); // "" -upperCase(undefined); // "" -``` - - - -## WHITE_SPACES:Array - -Constant array of all [Unicode white-space -characters](http://en.wikipedia.org/wiki/Whitespace_character). - - - -------------------------------------------------------------------------------- - -For more usage examples check specs inside `/tests` folder. Unit tests are the -best documentation you can get... - diff --git a/truebit-implementation/node_modules/mout/doc/time.md b/truebit-implementation/node_modules/mout/doc/time.md deleted file mode 100644 index 628c2a9b..00000000 --- a/truebit-implementation/node_modules/mout/doc/time.md +++ /dev/null @@ -1,64 +0,0 @@ -# time # - -Utilities for time manipulation. - - -## convert(value, sourceUnit, [destinationUnit]):Number - -Converts time between units. - -Available units: `millisecond`, `second`, `minute`, `hour`, `day`, `week`. -Abbreviations: `ms`, `s`, `m`, `h`, `d`, `w`. - -We do **not** support year and month as a time unit since their values are not -fixed. - -The default `destinationUnit` is `ms`. - -```js -convert(1, 'minute'); // 60000 -convert(2.5, 's', 'ms'); // 2500 -convert(2, 'm', 's'); // 120 -convert(500, 'ms', 's'); // 0.5 -``` - - - -## now():Number - -Returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC. -Uses `Date.now()` if available. - -### Example - -```js -now(); // 1335449614650 -``` - - - -## parseMs(ms):Object - -Parse timestamp (milliseconds) into an object `{milliseconds:number, -seconds:number, minutes:number, hours:number, days:number}`. - -### Example - -```js -// {days:27, hours:4, minutes:26, seconds:5, milliseconds:454} -parseMs(2348765454); -``` - - - -## toTimeString(ms):String - -Convert timestamp (milliseconds) into a time string in the format "[H:]MM:SS". - -### Example - -```js -toTimeString(12513); // "00:12" -toTimeString(951233); // "15:51" -toTimeString(8765235); // "2:26:05" -``` diff --git a/truebit-implementation/node_modules/mout/function.js b/truebit-implementation/node_modules/mout/function.js deleted file mode 100644 index f8de6388..00000000 --- a/truebit-implementation/node_modules/mout/function.js +++ /dev/null @@ -1,23 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'awaitDelay' : require('./function/awaitDelay'), - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'constant' : require('./function/constant'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'identity' : require('./function/identity'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout'), - 'times' : require('./function/times'), - 'wrap' : require('./function/wrap') -}; - - diff --git a/truebit-implementation/node_modules/mout/function/awaitDelay.js b/truebit-implementation/node_modules/mout/function/awaitDelay.js deleted file mode 100644 index 8c9b1a33..00000000 --- a/truebit-implementation/node_modules/mout/function/awaitDelay.js +++ /dev/null @@ -1,22 +0,0 @@ -var now = require('../time/now'); -var timeout = require('./timeout'); -var append = require('../array/append'); - - /** - * Ensure a minimum delay for callbacks - */ - function awaitDelay( callback, delay ){ - var baseTime = now() + delay; - return function() { - // ensure all browsers will execute it asynchronously (avoid hard - // to catch errors) not using "0" because of old browsers and also - // since new browsers increase the value to be at least "4" - // http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout - var ms = Math.max(baseTime - now(), 4); - return timeout.apply(this, append([callback, ms, this], arguments)); - }; - } - - module.exports = awaitDelay; - - diff --git a/truebit-implementation/node_modules/mout/function/bind.js b/truebit-implementation/node_modules/mout/function/bind.js deleted file mode 100644 index c6c47192..00000000 --- a/truebit-implementation/node_modules/mout/function/bind.js +++ /dev/null @@ -1,19 +0,0 @@ -var slice = require('../array/slice'); - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - module.exports = bind; - - diff --git a/truebit-implementation/node_modules/mout/function/compose.js b/truebit-implementation/node_modules/mout/function/compose.js deleted file mode 100644 index 8cd5c5f3..00000000 --- a/truebit-implementation/node_modules/mout/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - module.exports = compose; - - diff --git a/truebit-implementation/node_modules/mout/function/constant.js b/truebit-implementation/node_modules/mout/function/constant.js deleted file mode 100644 index ab932d9d..00000000 --- a/truebit-implementation/node_modules/mout/function/constant.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a new function that will return the value - */ - function constant(value){ - return function() { - return value; - }; - } - - module.exports = constant; - - diff --git a/truebit-implementation/node_modules/mout/function/debounce.js b/truebit-implementation/node_modules/mout/function/debounce.js deleted file mode 100644 index 7f6f3021..00000000 --- a/truebit-implementation/node_modules/mout/function/debounce.js +++ /dev/null @@ -1,32 +0,0 @@ - - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - debounced.cancel = function(){ - clearTimeout(timeout); - }; - return debounced; - } - - module.exports = debounce; - - diff --git a/truebit-implementation/node_modules/mout/function/func.js b/truebit-implementation/node_modules/mout/function/func.js deleted file mode 100644 index b81bf0a8..00000000 --- a/truebit-implementation/node_modules/mout/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - module.exports = func; - - diff --git a/truebit-implementation/node_modules/mout/function/identity.js b/truebit-implementation/node_modules/mout/function/identity.js deleted file mode 100644 index d07b01ad..00000000 --- a/truebit-implementation/node_modules/mout/function/identity.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Returns the first argument provided to it. - */ - function identity(val){ - return val; - } - - module.exports = identity; - - diff --git a/truebit-implementation/node_modules/mout/function/makeIterator_.js b/truebit-implementation/node_modules/mout/function/makeIterator_.js deleted file mode 100644 index 20cc0e7e..00000000 --- a/truebit-implementation/node_modules/mout/function/makeIterator_.js +++ /dev/null @@ -1,34 +0,0 @@ -var identity = require('./identity'); -var prop = require('./prop'); -var deepMatches = require('../object/deepMatches'); - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - if (src == null) { - return identity; - } - switch(typeof src) { - case 'function': - // function is the first to improve perf (most common case) - // also avoid using `Function#call` if not needed, which boosts - // perf a lot in some cases - return (typeof thisObj !== 'undefined')? function(val, i, arr){ - return src.call(thisObj, val, i, arr); - } : src; - case 'object': - return function(val){ - return deepMatches(val, src); - }; - case 'string': - case 'number': - return prop(src); - } - } - - module.exports = makeIterator; - - diff --git a/truebit-implementation/node_modules/mout/function/partial.js b/truebit-implementation/node_modules/mout/function/partial.js deleted file mode 100644 index a31dc129..00000000 --- a/truebit-implementation/node_modules/mout/function/partial.js +++ /dev/null @@ -1,23 +0,0 @@ -var slice = require('../array/slice'); - - /** - * Creates a partially applied function. - */ - function partial(f) { - var as = slice(arguments, 1); - return function() { - var args = as.concat(slice(arguments)); - for (var i = args.length; i--;) { - if (args[i] === partial._) { - args[i] = args.splice(-1)[0]; - } - } - return f.apply(this, args); - }; - } - - partial._ = {}; - - module.exports = partial; - - diff --git a/truebit-implementation/node_modules/mout/function/prop.js b/truebit-implementation/node_modules/mout/function/prop.js deleted file mode 100644 index 734acb7a..00000000 --- a/truebit-implementation/node_modules/mout/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - module.exports = prop; - - diff --git a/truebit-implementation/node_modules/mout/function/series.js b/truebit-implementation/node_modules/mout/function/series.js deleted file mode 100644 index 25159c2c..00000000 --- a/truebit-implementation/node_modules/mout/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ - - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - module.exports = series; - - diff --git a/truebit-implementation/node_modules/mout/function/throttle.js b/truebit-implementation/node_modules/mout/function/throttle.js deleted file mode 100644 index 0a5e1613..00000000 --- a/truebit-implementation/node_modules/mout/function/throttle.js +++ /dev/null @@ -1,33 +0,0 @@ -var now = require('../time/now'); - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - diff, prevCall = 0; - function delayed(){ - prevCall = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - diff = delay - (now() - prevCall); - if (diff <= 0) { - clearTimeout(timeout); - delayed(); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - throttled.cancel = function(){ - clearTimeout(timeout); - }; - return throttled; - } - - module.exports = throttle; - - diff --git a/truebit-implementation/node_modules/mout/function/timeout.js b/truebit-implementation/node_modules/mout/function/timeout.js deleted file mode 100644 index 509dd68c..00000000 --- a/truebit-implementation/node_modules/mout/function/timeout.js +++ /dev/null @@ -1,17 +0,0 @@ -var slice = require('../array/slice'); - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - module.exports = timeout; - - diff --git a/truebit-implementation/node_modules/mout/function/times.js b/truebit-implementation/node_modules/mout/function/times.js deleted file mode 100644 index 04a11c26..00000000 --- a/truebit-implementation/node_modules/mout/function/times.js +++ /dev/null @@ -1,17 +0,0 @@ - - - /** - * Iterates over a callback a set amount of times - */ - function times(n, callback, thisObj){ - var i = -1; - while (++i < n) { - if ( callback.call(thisObj, i) === false ) { - break; - } - } - } - - module.exports = times; - - diff --git a/truebit-implementation/node_modules/mout/function/wrap.js b/truebit-implementation/node_modules/mout/function/wrap.js deleted file mode 100644 index 82d77ff1..00000000 --- a/truebit-implementation/node_modules/mout/function/wrap.js +++ /dev/null @@ -1,14 +0,0 @@ -var partial = require('./partial'); - - /** - * Returns the first function passed as an argument to the second, - * allowing you to adjust arguments, run code before and after, and - * conditionally execute the original function. - */ - function wrap(fn, wrapper){ - return partial(wrapper, fn); - } - - module.exports = wrap; - - diff --git a/truebit-implementation/node_modules/mout/index.js b/truebit-implementation/node_modules/mout/index.js deleted file mode 100644 index 17ef9dd7..00000000 --- a/truebit-implementation/node_modules/mout/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/**@license - * mout v0.11.1 | http://moutjs.com | MIT license - */ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'VERSION' : '0.11.1', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time'), - 'fn' : require('./function') -}; - - diff --git a/truebit-implementation/node_modules/mout/lang.js b/truebit-implementation/node_modules/mout/lang.js deleted file mode 100644 index 150007f8..00000000 --- a/truebit-implementation/node_modules/mout/lang.js +++ /dev/null @@ -1,40 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'GLOBAL' : require('./lang/GLOBAL'), - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'deepEquals' : require('./lang/deepEquals'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isPrimitive' : require('./lang/isPrimitive'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toNumber' : require('./lang/toNumber'), - 'toString' : require('./lang/toString') -}; - - diff --git a/truebit-implementation/node_modules/mout/lang/GLOBAL.js b/truebit-implementation/node_modules/mout/lang/GLOBAL.js deleted file mode 100644 index 4d759ba9..00000000 --- a/truebit-implementation/node_modules/mout/lang/GLOBAL.js +++ /dev/null @@ -1,7 +0,0 @@ - - - // Reference to the global context (works on ES3 and ES5-strict mode) - //jshint -W061, -W064 - module.exports = Function('return this')(); - - diff --git a/truebit-implementation/node_modules/mout/lang/clone.js b/truebit-implementation/node_modules/mout/lang/clone.js deleted file mode 100644 index e5154872..00000000 --- a/truebit-implementation/node_modules/mout/lang/clone.js +++ /dev/null @@ -1,49 +0,0 @@ -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); -var mixIn = require('../object/mixIn'); - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignoreCase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - module.exports = clone; - - diff --git a/truebit-implementation/node_modules/mout/lang/createObject.js b/truebit-implementation/node_modules/mout/lang/createObject.js deleted file mode 100644 index bbc14c1d..00000000 --- a/truebit-implementation/node_modules/mout/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var mixIn = require('../object/mixIn'); - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - module.exports = createObject; - - diff --git a/truebit-implementation/node_modules/mout/lang/ctorApply.js b/truebit-implementation/node_modules/mout/lang/ctorApply.js deleted file mode 100644 index d68dc506..00000000 --- a/truebit-implementation/node_modules/mout/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ - - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - module.exports = ctorApply; - - diff --git a/truebit-implementation/node_modules/mout/lang/deepClone.js b/truebit-implementation/node_modules/mout/lang/deepClone.js deleted file mode 100644 index 25fd95f1..00000000 --- a/truebit-implementation/node_modules/mout/lang/deepClone.js +++ /dev/null @@ -1,48 +0,0 @@ -var clone = require('./clone'); -var forOwn = require('../object/forOwn'); -var kindOf = require('./kindOf'); -var isPlainObject = require('./isPlainObject'); - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - module.exports = deepClone; - - - diff --git a/truebit-implementation/node_modules/mout/lang/deepEquals.js b/truebit-implementation/node_modules/mout/lang/deepEquals.js deleted file mode 100644 index bf2b90dd..00000000 --- a/truebit-implementation/node_modules/mout/lang/deepEquals.js +++ /dev/null @@ -1,30 +0,0 @@ -var is = require('./is'); -var isObject = require('./isObject'); -var isArray = require('./isArray'); -var objEquals = require('../object/equals'); -var arrEquals = require('../array/equals'); - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || is; - - var bothObjects = isObject(a) && isObject(b); - var bothArrays = !bothObjects && isArray(a) && isArray(b); - - if (!bothObjects && !bothArrays) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - var method = bothObjects ? objEquals : arrEquals; - return method(a, b, compare); - } - - module.exports = deepEquals; - - diff --git a/truebit-implementation/node_modules/mout/lang/defaults.js b/truebit-implementation/node_modules/mout/lang/defaults.js deleted file mode 100644 index 1111b2ef..00000000 --- a/truebit-implementation/node_modules/mout/lang/defaults.js +++ /dev/null @@ -1,17 +0,0 @@ -var toArray = require('./toArray'); -var find = require('../array/find'); - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - module.exports = defaults; - - diff --git a/truebit-implementation/node_modules/mout/lang/inheritPrototype.js b/truebit-implementation/node_modules/mout/lang/inheritPrototype.js deleted file mode 100644 index 1c9da1f7..00000000 --- a/truebit-implementation/node_modules/mout/lang/inheritPrototype.js +++ /dev/null @@ -1,18 +0,0 @@ -var createObject = require('./createObject'); - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - child.super_ = parent; - return p; - } - - module.exports = inheritPrototype; - diff --git a/truebit-implementation/node_modules/mout/lang/is.js b/truebit-implementation/node_modules/mout/lang/is.js deleted file mode 100644 index 4a835739..00000000 --- a/truebit-implementation/node_modules/mout/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ - - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - module.exports = is; - - diff --git a/truebit-implementation/node_modules/mout/lang/isArguments.js b/truebit-implementation/node_modules/mout/lang/isArguments.js deleted file mode 100644 index f7b08ba4..00000000 --- a/truebit-implementation/node_modules/mout/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -var isKind = require('./isKind'); - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - module.exports = isArgs; - diff --git a/truebit-implementation/node_modules/mout/lang/isArray.js b/truebit-implementation/node_modules/mout/lang/isArray.js deleted file mode 100644 index 262ee400..00000000 --- a/truebit-implementation/node_modules/mout/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - module.exports = isArray; - diff --git a/truebit-implementation/node_modules/mout/lang/isBoolean.js b/truebit-implementation/node_modules/mout/lang/isBoolean.js deleted file mode 100644 index 86557cb9..00000000 --- a/truebit-implementation/node_modules/mout/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - module.exports = isBoolean; - diff --git a/truebit-implementation/node_modules/mout/lang/isDate.js b/truebit-implementation/node_modules/mout/lang/isDate.js deleted file mode 100644 index 4a5130f2..00000000 --- a/truebit-implementation/node_modules/mout/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - module.exports = isDate; - diff --git a/truebit-implementation/node_modules/mout/lang/isEmpty.js b/truebit-implementation/node_modules/mout/lang/isEmpty.js deleted file mode 100644 index c7854c6c..00000000 --- a/truebit-implementation/node_modules/mout/lang/isEmpty.js +++ /dev/null @@ -1,24 +0,0 @@ -var forOwn = require('../object/forOwn'); -var isArray = require('./isArray'); - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return true; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return true; - } - } - - module.exports = isEmpty; - - diff --git a/truebit-implementation/node_modules/mout/lang/isFinite.js b/truebit-implementation/node_modules/mout/lang/isFinite.js deleted file mode 100644 index 812e3177..00000000 --- a/truebit-implementation/node_modules/mout/lang/isFinite.js +++ /dev/null @@ -1,20 +0,0 @@ -var isNumber = require('./isNumber'); -var GLOBAL = require('./GLOBAL'); - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = GLOBAL.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = GLOBAL.isFinite( val ); - } - return is; - } - - module.exports = isFinite; - - diff --git a/truebit-implementation/node_modules/mout/lang/isFunction.js b/truebit-implementation/node_modules/mout/lang/isFunction.js deleted file mode 100644 index 216879f6..00000000 --- a/truebit-implementation/node_modules/mout/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - module.exports = isFunction; - diff --git a/truebit-implementation/node_modules/mout/lang/isInteger.js b/truebit-implementation/node_modules/mout/lang/isInteger.js deleted file mode 100644 index 29f95d96..00000000 --- a/truebit-implementation/node_modules/mout/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -var isNumber = require('./isNumber'); - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - module.exports = isInteger; - - diff --git a/truebit-implementation/node_modules/mout/lang/isKind.js b/truebit-implementation/node_modules/mout/lang/isKind.js deleted file mode 100644 index 02301e04..00000000 --- a/truebit-implementation/node_modules/mout/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -var kindOf = require('./kindOf'); - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - module.exports = isKind; - diff --git a/truebit-implementation/node_modules/mout/lang/isNaN.js b/truebit-implementation/node_modules/mout/lang/isNaN.js deleted file mode 100644 index b1018ec2..00000000 --- a/truebit-implementation/node_modules/mout/lang/isNaN.js +++ /dev/null @@ -1,16 +0,0 @@ -var isNumber = require('./isNumber'); -var $isNaN = require('../number/isNaN'); - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || $isNaN(Number(val)); - } - - module.exports = isNaN; - - diff --git a/truebit-implementation/node_modules/mout/lang/isNull.js b/truebit-implementation/node_modules/mout/lang/isNull.js deleted file mode 100644 index 6252f9ef..00000000 --- a/truebit-implementation/node_modules/mout/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - */ - function isNull(val){ - return val === null; - } - module.exports = isNull; - - diff --git a/truebit-implementation/node_modules/mout/lang/isNumber.js b/truebit-implementation/node_modules/mout/lang/isNumber.js deleted file mode 100644 index 126c1cce..00000000 --- a/truebit-implementation/node_modules/mout/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - module.exports = isNumber; - diff --git a/truebit-implementation/node_modules/mout/lang/isObject.js b/truebit-implementation/node_modules/mout/lang/isObject.js deleted file mode 100644 index 7350c891..00000000 --- a/truebit-implementation/node_modules/mout/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - module.exports = isObject; - diff --git a/truebit-implementation/node_modules/mout/lang/isPlainObject.js b/truebit-implementation/node_modules/mout/lang/isPlainObject.js deleted file mode 100644 index b81342ee..00000000 --- a/truebit-implementation/node_modules/mout/lang/isPlainObject.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value && typeof value === 'object' && - value.constructor === Object); - } - - module.exports = isPlainObject; - - diff --git a/truebit-implementation/node_modules/mout/lang/isPrimitive.js b/truebit-implementation/node_modules/mout/lang/isPrimitive.js deleted file mode 100644 index e255475b..00000000 --- a/truebit-implementation/node_modules/mout/lang/isPrimitive.js +++ /dev/null @@ -1,21 +0,0 @@ - - - /** - * Checks if the object is a primitive - */ - function isPrimitive(value) { - // Using switch fallthrough because it's simple to read and is - // generally fast: http://jsperf.com/testing-value-is-primitive/5 - switch (typeof value) { - case "string": - case "number": - case "boolean": - return true; - } - - return value == null; - } - - module.exports = isPrimitive; - - diff --git a/truebit-implementation/node_modules/mout/lang/isRegExp.js b/truebit-implementation/node_modules/mout/lang/isRegExp.js deleted file mode 100644 index fc5459a9..00000000 --- a/truebit-implementation/node_modules/mout/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - module.exports = isRegExp; - diff --git a/truebit-implementation/node_modules/mout/lang/isString.js b/truebit-implementation/node_modules/mout/lang/isString.js deleted file mode 100644 index f8906584..00000000 --- a/truebit-implementation/node_modules/mout/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -var isKind = require('./isKind'); - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - module.exports = isString; - diff --git a/truebit-implementation/node_modules/mout/lang/isUndefined.js b/truebit-implementation/node_modules/mout/lang/isUndefined.js deleted file mode 100644 index fb2261df..00000000 --- a/truebit-implementation/node_modules/mout/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ - - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - module.exports = isUndef; - diff --git a/truebit-implementation/node_modules/mout/lang/isnt.js b/truebit-implementation/node_modules/mout/lang/isnt.js deleted file mode 100644 index 9dad58ce..00000000 --- a/truebit-implementation/node_modules/mout/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -var is = require('./is'); - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - module.exports = isnt; - - diff --git a/truebit-implementation/node_modules/mout/lang/kindOf.js b/truebit-implementation/node_modules/mout/lang/kindOf.js deleted file mode 100644 index 663464d0..00000000 --- a/truebit-implementation/node_modules/mout/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ - - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - module.exports = kindOf; - diff --git a/truebit-implementation/node_modules/mout/lang/toArray.js b/truebit-implementation/node_modules/mout/lang/toArray.js deleted file mode 100644 index 1f3a2b6e..00000000 --- a/truebit-implementation/node_modules/mout/lang/toArray.js +++ /dev/null @@ -1,30 +0,0 @@ -var kindOf = require('./kindOf'); -var GLOBAL = require('./GLOBAL'); - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === GLOBAL ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - module.exports = toArray; - diff --git a/truebit-implementation/node_modules/mout/lang/toNumber.js b/truebit-implementation/node_modules/mout/lang/toNumber.js deleted file mode 100644 index 8b6df344..00000000 --- a/truebit-implementation/node_modules/mout/lang/toNumber.js +++ /dev/null @@ -1,20 +0,0 @@ -var isArray = require('./isArray'); - - /** - * covert value into number if numeric - */ - function toNumber(val){ - // numberic values should come first because of -0 - if (typeof val === 'number') return val; - // we want all falsy values (besides -0) to return zero to avoid - // headaches - if (!val) return 0; - if (typeof val === 'string') return parseFloat(val); - // arrays are edge cases. `Number([4]) === 4` - if (isArray(val)) return NaN; - return Number(val); - } - - module.exports = toNumber; - - diff --git a/truebit-implementation/node_modules/mout/lang/toString.js b/truebit-implementation/node_modules/mout/lang/toString.js deleted file mode 100644 index ae5c2b0f..00000000 --- a/truebit-implementation/node_modules/mout/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - module.exports = toString; - - diff --git a/truebit-implementation/node_modules/mout/math.js b/truebit-implementation/node_modules/mout/math.js deleted file mode 100644 index c6ee889b..00000000 --- a/truebit-implementation/node_modules/mout/math.js +++ /dev/null @@ -1,19 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - - diff --git a/truebit-implementation/node_modules/mout/math/ceil.js b/truebit-implementation/node_modules/mout/math/ceil.js deleted file mode 100644 index a279e158..00000000 --- a/truebit-implementation/node_modules/mout/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - module.exports = ceil; - diff --git a/truebit-implementation/node_modules/mout/math/clamp.js b/truebit-implementation/node_modules/mout/math/clamp.js deleted file mode 100644 index e929a9a6..00000000 --- a/truebit-implementation/node_modules/mout/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - module.exports = clamp; - diff --git a/truebit-implementation/node_modules/mout/math/countSteps.js b/truebit-implementation/node_modules/mout/math/countSteps.js deleted file mode 100644 index 60ac90c3..00000000 --- a/truebit-implementation/node_modules/mout/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ - - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - module.exports = countSteps; - diff --git a/truebit-implementation/node_modules/mout/math/floor.js b/truebit-implementation/node_modules/mout/math/floor.js deleted file mode 100644 index 9de50531..00000000 --- a/truebit-implementation/node_modules/mout/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - module.exports = floor; - diff --git a/truebit-implementation/node_modules/mout/math/inRange.js b/truebit-implementation/node_modules/mout/math/inRange.js deleted file mode 100644 index 763218f8..00000000 --- a/truebit-implementation/node_modules/mout/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - module.exports = inRange; - diff --git a/truebit-implementation/node_modules/mout/math/isNear.js b/truebit-implementation/node_modules/mout/math/isNear.js deleted file mode 100644 index 45486b6d..00000000 --- a/truebit-implementation/node_modules/mout/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ - - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - module.exports = isNear; - diff --git a/truebit-implementation/node_modules/mout/math/lerp.js b/truebit-implementation/node_modules/mout/math/lerp.js deleted file mode 100644 index 111e2717..00000000 --- a/truebit-implementation/node_modules/mout/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ - - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - module.exports = lerp; - diff --git a/truebit-implementation/node_modules/mout/math/loop.js b/truebit-implementation/node_modules/mout/math/loop.js deleted file mode 100644 index 35207c1a..00000000 --- a/truebit-implementation/node_modules/mout/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - module.exports = loop; - diff --git a/truebit-implementation/node_modules/mout/math/map.js b/truebit-implementation/node_modules/mout/math/map.js deleted file mode 100644 index 96c4b787..00000000 --- a/truebit-implementation/node_modules/mout/math/map.js +++ /dev/null @@ -1,11 +0,0 @@ -var lerp = require('./lerp'); -var norm = require('./norm'); - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - module.exports = map; - diff --git a/truebit-implementation/node_modules/mout/math/norm.js b/truebit-implementation/node_modules/mout/math/norm.js deleted file mode 100644 index 8ee53d82..00000000 --- a/truebit-implementation/node_modules/mout/math/norm.js +++ /dev/null @@ -1,13 +0,0 @@ - - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - if (val < min || val > max) { - throw new RangeError('value (' + val + ') must be between ' + min + ' and ' + max); - } - - return val === max ? 1 : (val - min) / (max - min); - } - module.exports = norm; - diff --git a/truebit-implementation/node_modules/mout/math/round.js b/truebit-implementation/node_modules/mout/math/round.js deleted file mode 100644 index d108e6cd..00000000 --- a/truebit-implementation/node_modules/mout/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - module.exports = round; - - diff --git a/truebit-implementation/node_modules/mout/number.js b/truebit-implementation/node_modules/mout/number.js deleted file mode 100644 index ba7034a7..00000000 --- a/truebit-implementation/node_modules/mout/number.js +++ /dev/null @@ -1,25 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_SAFE_INTEGER' : require('./number/MAX_SAFE_INTEGER'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'isNaN' : require('./number/isNaN'), - 'nth' : require('./number/nth'), - 'ordinal' : require('./number/ordinal'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - - diff --git a/truebit-implementation/node_modules/mout/number/MAX_INT.js b/truebit-implementation/node_modules/mout/number/MAX_INT.js deleted file mode 100644 index 1d6f0e48..00000000 --- a/truebit-implementation/node_modules/mout/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ - - module.exports = 2147483647; - diff --git a/truebit-implementation/node_modules/mout/number/MAX_SAFE_INTEGER.js b/truebit-implementation/node_modules/mout/number/MAX_SAFE_INTEGER.js deleted file mode 100644 index b13e538a..00000000 --- a/truebit-implementation/node_modules/mout/number/MAX_SAFE_INTEGER.js +++ /dev/null @@ -1,7 +0,0 @@ - - - // maximum safe integer (Math.pow(2, 53) - 1) - // see: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer - module.exports = 9007199254740991; - - diff --git a/truebit-implementation/node_modules/mout/number/MAX_UINT.js b/truebit-implementation/node_modules/mout/number/MAX_UINT.js deleted file mode 100644 index 700da0f6..00000000 --- a/truebit-implementation/node_modules/mout/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ - - module.exports = 4294967295; - diff --git a/truebit-implementation/node_modules/mout/number/MIN_INT.js b/truebit-implementation/node_modules/mout/number/MIN_INT.js deleted file mode 100644 index b34ab2ce..00000000 --- a/truebit-implementation/node_modules/mout/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ - - module.exports = -2147483648; - diff --git a/truebit-implementation/node_modules/mout/number/abbreviate.js b/truebit-implementation/node_modules/mout/number/abbreviate.js deleted file mode 100644 index dd6716b9..00000000 --- a/truebit-implementation/node_modules/mout/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -var enforcePrecision = require('./enforcePrecision'); - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - module.exports = abbreviateNumber; - - diff --git a/truebit-implementation/node_modules/mout/number/currencyFormat.js b/truebit-implementation/node_modules/mout/number/currencyFormat.js deleted file mode 100644 index c85a6685..00000000 --- a/truebit-implementation/node_modules/mout/number/currencyFormat.js +++ /dev/null @@ -1,27 +0,0 @@ -var toNumber = require('../lang/toNumber'); - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - val = toNumber(val); - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - module.exports = currencyFormat; - - diff --git a/truebit-implementation/node_modules/mout/number/enforcePrecision.js b/truebit-implementation/node_modules/mout/number/enforcePrecision.js deleted file mode 100644 index 3d3b2d40..00000000 --- a/truebit-implementation/node_modules/mout/number/enforcePrecision.js +++ /dev/null @@ -1,12 +0,0 @@ -var toNumber = require('../lang/toNumber'); - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - */ - function enforcePrecision(val, nDecimalDigits){ - val = toNumber(val); - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - module.exports = enforcePrecision; - diff --git a/truebit-implementation/node_modules/mout/number/isNaN.js b/truebit-implementation/node_modules/mout/number/isNaN.js deleted file mode 100644 index 3799f3b6..00000000 --- a/truebit-implementation/node_modules/mout/number/isNaN.js +++ /dev/null @@ -1,14 +0,0 @@ - - - /** - * ES6 Number.isNaN - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN - */ - function isNaN(val){ - // jshint eqeqeq:false - return typeof val === 'number' && val != val; - } - - module.exports = isNaN; - - diff --git a/truebit-implementation/node_modules/mout/number/nth.js b/truebit-implementation/node_modules/mout/number/nth.js deleted file mode 100644 index 43ffb214..00000000 --- a/truebit-implementation/node_modules/mout/number/nth.js +++ /dev/null @@ -1,25 +0,0 @@ - - - /** - * Returns "nth" of number (1 = "st", 2 = "nd", 3 = "rd", 4..10 = "th", ...) - */ - function nth(i) { - var t = (i % 100); - if (t >= 10 && t <= 20) { - return 'th'; - } - switch(i % 10) { - case 1: - return 'st'; - case 2: - return 'nd'; - case 3: - return 'rd'; - default: - return 'th'; - } - } - - module.exports = nth; - - diff --git a/truebit-implementation/node_modules/mout/number/ordinal.js b/truebit-implementation/node_modules/mout/number/ordinal.js deleted file mode 100644 index 939a0fa9..00000000 --- a/truebit-implementation/node_modules/mout/number/ordinal.js +++ /dev/null @@ -1,14 +0,0 @@ -var toInt = require('./toInt'); -var nth = require('./nth'); - - /** - * converts number into ordinal form (1st, 2nd, 3rd, 4th, ...) - */ - function ordinal(n){ - n = toInt(n); - return n + nth(n); - } - - module.exports = ordinal; - - diff --git a/truebit-implementation/node_modules/mout/number/pad.js b/truebit-implementation/node_modules/mout/number/pad.js deleted file mode 100644 index 1f83af45..00000000 --- a/truebit-implementation/node_modules/mout/number/pad.js +++ /dev/null @@ -1,14 +0,0 @@ -var lpad = require('../string/lpad'); -var toNumber = require('../lang/toNumber'); - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - n = toNumber(n); - return lpad(''+ n, minLength, char || '0'); - } - - module.exports = pad; - - diff --git a/truebit-implementation/node_modules/mout/number/rol.js b/truebit-implementation/node_modules/mout/number/rol.js deleted file mode 100644 index ecd58da4..00000000 --- a/truebit-implementation/node_modules/mout/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - module.exports = rol; - diff --git a/truebit-implementation/node_modules/mout/number/ror.js b/truebit-implementation/node_modules/mout/number/ror.js deleted file mode 100644 index 2eda81da..00000000 --- a/truebit-implementation/node_modules/mout/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ - - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - module.exports = ror; - diff --git a/truebit-implementation/node_modules/mout/number/sign.js b/truebit-implementation/node_modules/mout/number/sign.js deleted file mode 100644 index 7f9a1e2f..00000000 --- a/truebit-implementation/node_modules/mout/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ -var toNumber = require('../lang/toNumber'); - - /** - * Get sign of the value. - */ - function sign(val) { - var num = toNumber(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - module.exports = sign; - - diff --git a/truebit-implementation/node_modules/mout/number/toInt.js b/truebit-implementation/node_modules/mout/number/toInt.js deleted file mode 100644 index 72fd7de4..00000000 --- a/truebit-implementation/node_modules/mout/number/toInt.js +++ /dev/null @@ -1,17 +0,0 @@ - - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return ~~val; - } - - module.exports = toInt; - - diff --git a/truebit-implementation/node_modules/mout/number/toUInt.js b/truebit-implementation/node_modules/mout/number/toUInt.js deleted file mode 100644 index d2796563..00000000 --- a/truebit-implementation/node_modules/mout/number/toUInt.js +++ /dev/null @@ -1,15 +0,0 @@ - - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return val >>> 0; - } - - module.exports = toUInt; - - diff --git a/truebit-implementation/node_modules/mout/number/toUInt31.js b/truebit-implementation/node_modules/mout/number/toUInt31.js deleted file mode 100644 index 6cd3bb52..00000000 --- a/truebit-implementation/node_modules/mout/number/toUInt31.js +++ /dev/null @@ -1,15 +0,0 @@ -var MAX_INT = require('./MAX_INT'); - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - module.exports = toUInt31; - - diff --git a/truebit-implementation/node_modules/mout/object.js b/truebit-implementation/node_modules/mout/object.js deleted file mode 100644 index ee1e94ea..00000000 --- a/truebit-implementation/node_modules/mout/object.js +++ /dev/null @@ -1,44 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'flatten' : require('./object/flatten'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'omit' : require('./object/omit'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'result' : require('./object/result'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - - diff --git a/truebit-implementation/node_modules/mout/object/bindAll.js b/truebit-implementation/node_modules/mout/object/bindAll.js deleted file mode 100644 index c8a2034b..00000000 --- a/truebit-implementation/node_modules/mout/object/bindAll.js +++ /dev/null @@ -1,19 +0,0 @@ -var functions = require('./functions'); -var bind = require('../function/bind'); -var forEach = require('../array/forEach'); -var slice = require('../array/slice'); - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - slice(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - module.exports = bindAll; - - diff --git a/truebit-implementation/node_modules/mout/object/contains.js b/truebit-implementation/node_modules/mout/object/contains.js deleted file mode 100644 index 8076e2c5..00000000 --- a/truebit-implementation/node_modules/mout/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -var some = require('./some'); - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - module.exports = contains; - - diff --git a/truebit-implementation/node_modules/mout/object/deepFillIn.js b/truebit-implementation/node_modules/mout/object/deepFillIn.js deleted file mode 100644 index 6568ea87..00000000 --- a/truebit-implementation/node_modules/mout/object/deepFillIn.js +++ /dev/null @@ -1,33 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - // jshint loopfunc: true - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) && - isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - module.exports = deepFillIn; - - diff --git a/truebit-implementation/node_modules/mout/object/deepMatches.js b/truebit-implementation/node_modules/mout/object/deepMatches.js deleted file mode 100644 index 3366c52d..00000000 --- a/truebit-implementation/node_modules/mout/object/deepMatches.js +++ /dev/null @@ -1,55 +0,0 @@ -var forOwn = require('./forOwn'); -var isArray = require('../lang/isArray'); - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - module.exports = deepMatches; - - diff --git a/truebit-implementation/node_modules/mout/object/deepMixIn.js b/truebit-implementation/node_modules/mout/object/deepMixIn.js deleted file mode 100644 index a97e98d0..00000000 --- a/truebit-implementation/node_modules/mout/object/deepMixIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - module.exports = deepMixIn; - - diff --git a/truebit-implementation/node_modules/mout/object/equals.js b/truebit-implementation/node_modules/mout/object/equals.js deleted file mode 100644 index 7c89ab8c..00000000 --- a/truebit-implementation/node_modules/mout/object/equals.js +++ /dev/null @@ -1,33 +0,0 @@ -var hasOwn = require('./hasOwn'); -var every = require('./every'); -var isObject = require('../lang/isObject'); -var is = require('../lang/is'); - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || is; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - module.exports = equals; - diff --git a/truebit-implementation/node_modules/mout/object/every.js b/truebit-implementation/node_modules/mout/object/every.js deleted file mode 100644 index 01106e5f..00000000 --- a/truebit-implementation/node_modules/mout/object/every.js +++ /dev/null @@ -1,23 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - module.exports = every; - - diff --git a/truebit-implementation/node_modules/mout/object/fillIn.js b/truebit-implementation/node_modules/mout/object/fillIn.js deleted file mode 100644 index 4010e284..00000000 --- a/truebit-implementation/node_modules/mout/object/fillIn.js +++ /dev/null @@ -1,21 +0,0 @@ -var forEach = require('../array/forEach'); -var slice = require('../array/slice'); -var forOwn = require('./forOwn'); - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(slice(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - module.exports = fillIn; - - diff --git a/truebit-implementation/node_modules/mout/object/filter.js b/truebit-implementation/node_modules/mout/object/filter.js deleted file mode 100644 index 3a83a92f..00000000 --- a/truebit-implementation/node_modules/mout/object/filter.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - module.exports = filterValues; - diff --git a/truebit-implementation/node_modules/mout/object/find.js b/truebit-implementation/node_modules/mout/object/find.js deleted file mode 100644 index d39c0706..00000000 --- a/truebit-implementation/node_modules/mout/object/find.js +++ /dev/null @@ -1,21 +0,0 @@ -var some = require('./some'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - module.exports = find; - - diff --git a/truebit-implementation/node_modules/mout/object/flatten.js b/truebit-implementation/node_modules/mout/object/flatten.js deleted file mode 100644 index a356f15f..00000000 --- a/truebit-implementation/node_modules/mout/object/flatten.js +++ /dev/null @@ -1,38 +0,0 @@ -var forOwn = require('./forOwn'); -var isPlainObject = require('../lang/isPlainObject'); - - /* - * Helper function to flatten to a destination object. - * Used to remove the need to create intermediate objects while flattening. - */ - function flattenTo(obj, result, prefix, level) { - forOwn(obj, function (value, key) { - var nestedPrefix = prefix ? prefix + '.' + key : key; - - if (level !== 0 && isPlainObject(value)) { - flattenTo(value, result, nestedPrefix, level - 1); - } else { - result[nestedPrefix] = value; - } - }); - - return result; - } - - /** - * Recursively flattens an object. - * A new object containing all the elements is returned. - * If level is specified, it will only flatten up to that level. - */ - function flatten(obj, level) { - if (obj == null) { - return {}; - } - - level = level == null ? -1 : level; - return flattenTo(obj, {}, '', level); - } - - module.exports = flatten; - - diff --git a/truebit-implementation/node_modules/mout/object/forIn.js b/truebit-implementation/node_modules/mout/object/forIn.js deleted file mode 100644 index 7fe96ce8..00000000 --- a/truebit-implementation/node_modules/mout/object/forIn.js +++ /dev/null @@ -1,76 +0,0 @@ -var hasOwn = require('./hasOwn'); - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - - if (_hasDontEnumBug) { - var ctor = obj.constructor, - isProto = !!ctor && obj === ctor.prototype; - - while (key = _dontEnums[i++]) { - // For constructor, if it is a prototype object the constructor - // is always non-enumerable unless defined otherwise (and - // enumerated above). For non-prototype objects, it will have - // to be defined on this object, since it cannot be defined on - // any prototype objects. - // - // For other [[DontEnum]] properties, check if the value is - // different than Object prototype value. - if ( - (key !== 'constructor' || - (!isProto && hasOwn(obj, key))) && - obj[key] !== Object.prototype[key] - ) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - module.exports = forIn; - - diff --git a/truebit-implementation/node_modules/mout/object/forOwn.js b/truebit-implementation/node_modules/mout/object/forOwn.js deleted file mode 100644 index 5f2dfbfc..00000000 --- a/truebit-implementation/node_modules/mout/object/forOwn.js +++ /dev/null @@ -1,19 +0,0 @@ -var hasOwn = require('./hasOwn'); -var forIn = require('./forIn'); - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - module.exports = forOwn; - - diff --git a/truebit-implementation/node_modules/mout/object/functions.js b/truebit-implementation/node_modules/mout/object/functions.js deleted file mode 100644 index f5717979..00000000 --- a/truebit-implementation/node_modules/mout/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -var forIn = require('./forIn'); - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - module.exports = functions; - - diff --git a/truebit-implementation/node_modules/mout/object/get.js b/truebit-implementation/node_modules/mout/object/get.js deleted file mode 100644 index 9c64e216..00000000 --- a/truebit-implementation/node_modules/mout/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ -var isPrimitive = require('../lang/isPrimitive'); - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (obj == null) return; - } - - return obj[last]; - } - - module.exports = get; - - diff --git a/truebit-implementation/node_modules/mout/object/has.js b/truebit-implementation/node_modules/mout/object/has.js deleted file mode 100644 index ca9f2289..00000000 --- a/truebit-implementation/node_modules/mout/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -var get = require('./get'); - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - module.exports = has; - - - diff --git a/truebit-implementation/node_modules/mout/object/hasOwn.js b/truebit-implementation/node_modules/mout/object/hasOwn.js deleted file mode 100644 index 7e3c82ae..00000000 --- a/truebit-implementation/node_modules/mout/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ - - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - module.exports = hasOwn; - - diff --git a/truebit-implementation/node_modules/mout/object/keys.js b/truebit-implementation/node_modules/mout/object/keys.js deleted file mode 100644 index dd2f4f55..00000000 --- a/truebit-implementation/node_modules/mout/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - module.exports = keys; - - diff --git a/truebit-implementation/node_modules/mout/object/map.js b/truebit-implementation/node_modules/mout/object/map.js deleted file mode 100644 index dd449a78..00000000 --- a/truebit-implementation/node_modules/mout/object/map.js +++ /dev/null @@ -1,18 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - module.exports = mapValues; - diff --git a/truebit-implementation/node_modules/mout/object/matches.js b/truebit-implementation/node_modules/mout/object/matches.js deleted file mode 100644 index 6074faa2..00000000 --- a/truebit-implementation/node_modules/mout/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - module.exports = matches; - - diff --git a/truebit-implementation/node_modules/mout/object/max.js b/truebit-implementation/node_modules/mout/object/max.js deleted file mode 100644 index 3e8e92c7..00000000 --- a/truebit-implementation/node_modules/mout/object/max.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMax = require('../array/max'); -var values = require('./values'); - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - module.exports = max; - diff --git a/truebit-implementation/node_modules/mout/object/merge.js b/truebit-implementation/node_modules/mout/object/merge.js deleted file mode 100644 index 6961f608..00000000 --- a/truebit-implementation/node_modules/mout/object/merge.js +++ /dev/null @@ -1,40 +0,0 @@ -var hasOwn = require('./hasOwn'); -var deepClone = require('../lang/deepClone'); -var isObject = require('../lang/isObject'); - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - module.exports = merge; - - diff --git a/truebit-implementation/node_modules/mout/object/min.js b/truebit-implementation/node_modules/mout/object/min.js deleted file mode 100644 index e1e66976..00000000 --- a/truebit-implementation/node_modules/mout/object/min.js +++ /dev/null @@ -1,12 +0,0 @@ -var arrMin = require('../array/min'); -var values = require('./values'); - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - module.exports = min; - diff --git a/truebit-implementation/node_modules/mout/object/mixIn.js b/truebit-implementation/node_modules/mout/object/mixIn.js deleted file mode 100644 index 55ec8fd5..00000000 --- a/truebit-implementation/node_modules/mout/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - module.exports = mixIn; - diff --git a/truebit-implementation/node_modules/mout/object/namespace.js b/truebit-implementation/node_modules/mout/object/namespace.js deleted file mode 100644 index c6e79f63..00000000 --- a/truebit-implementation/node_modules/mout/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -var forEach = require('../array/forEach'); - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - module.exports = namespace; - - diff --git a/truebit-implementation/node_modules/mout/object/omit.js b/truebit-implementation/node_modules/mout/object/omit.js deleted file mode 100644 index 7a5ef055..00000000 --- a/truebit-implementation/node_modules/mout/object/omit.js +++ /dev/null @@ -1,21 +0,0 @@ -var slice = require('../array/slice'); -var contains = require('../array/contains'); - - /** - * Return a copy of the object, filtered to only contain properties except the blacklisted keys. - */ - function omit(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : slice(arguments, 1), - out = {}; - - for (var property in obj) { - if (obj.hasOwnProperty(property) && !contains(keys, property)) { - out[property] = obj[property]; - } - } - return out; - } - - module.exports = omit; - - diff --git a/truebit-implementation/node_modules/mout/object/pick.js b/truebit-implementation/node_modules/mout/object/pick.js deleted file mode 100644 index da5a5640..00000000 --- a/truebit-implementation/node_modules/mout/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ -var slice = require('../array/slice'); - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : slice(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - module.exports = pick; - - diff --git a/truebit-implementation/node_modules/mout/object/pluck.js b/truebit-implementation/node_modules/mout/object/pluck.js deleted file mode 100644 index e844df47..00000000 --- a/truebit-implementation/node_modules/mout/object/pluck.js +++ /dev/null @@ -1,13 +0,0 @@ -var map = require('./map'); -var prop = require('../function/prop'); - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - module.exports = pluck; - - diff --git a/truebit-implementation/node_modules/mout/object/reduce.js b/truebit-implementation/node_modules/mout/object/reduce.js deleted file mode 100644 index 6f19a3a2..00000000 --- a/truebit-implementation/node_modules/mout/object/reduce.js +++ /dev/null @@ -1,29 +0,0 @@ -var forOwn = require('./forOwn'); -var size = require('./size'); - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - module.exports = reduce; - - diff --git a/truebit-implementation/node_modules/mout/object/reject.js b/truebit-implementation/node_modules/mout/object/reject.js deleted file mode 100644 index 74643795..00000000 --- a/truebit-implementation/node_modules/mout/object/reject.js +++ /dev/null @@ -1,16 +0,0 @@ -var filter = require('./filter'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - module.exports = reject; - - diff --git a/truebit-implementation/node_modules/mout/object/result.js b/truebit-implementation/node_modules/mout/object/result.js deleted file mode 100644 index 0efdd41b..00000000 --- a/truebit-implementation/node_modules/mout/object/result.js +++ /dev/null @@ -1,14 +0,0 @@ -var isFunction = require('../lang/isFunction'); - - function result(obj, prop) { - var property = obj[prop]; - - if(property === undefined) { - return; - } - - return isFunction(property) ? property.call(obj) : property; - } - - module.exports = result; - diff --git a/truebit-implementation/node_modules/mout/object/set.js b/truebit-implementation/node_modules/mout/object/set.js deleted file mode 100644 index 9b3cdc48..00000000 --- a/truebit-implementation/node_modules/mout/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -var namespace = require('./namespace'); - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - module.exports = set; - - diff --git a/truebit-implementation/node_modules/mout/object/size.js b/truebit-implementation/node_modules/mout/object/size.js deleted file mode 100644 index 97885953..00000000 --- a/truebit-implementation/node_modules/mout/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - module.exports = size; - - diff --git a/truebit-implementation/node_modules/mout/object/some.js b/truebit-implementation/node_modules/mout/object/some.js deleted file mode 100644 index 384c6f3c..00000000 --- a/truebit-implementation/node_modules/mout/object/some.js +++ /dev/null @@ -1,21 +0,0 @@ -var forOwn = require('./forOwn'); -var makeIterator = require('../function/makeIterator_'); - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - module.exports = some; - - diff --git a/truebit-implementation/node_modules/mout/object/unset.js b/truebit-implementation/node_modules/mout/object/unset.js deleted file mode 100644 index 343bca0a..00000000 --- a/truebit-implementation/node_modules/mout/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -var has = require('./has'); - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - module.exports = unset; - - diff --git a/truebit-implementation/node_modules/mout/object/values.js b/truebit-implementation/node_modules/mout/object/values.js deleted file mode 100644 index 265a6938..00000000 --- a/truebit-implementation/node_modules/mout/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -var forOwn = require('./forOwn'); - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - module.exports = values; - - diff --git a/truebit-implementation/node_modules/mout/package.json b/truebit-implementation/node_modules/mout/package.json deleted file mode 100644 index 458cb3c4..00000000 --- a/truebit-implementation/node_modules/mout/package.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "_from": "mout@^0.11.0", - "_id": "mout@0.11.1", - "_inBundle": false, - "_integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=", - "_location": "/mout", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mout@^0.11.0", - "name": "mout", - "escapedName": "mout", - "rawSpec": "^0.11.0", - "saveSpec": null, - "fetchSpec": "^0.11.0" - }, - "_requiredBy": [ - "/tar.gz" - ], - "_resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "_shasum": "ba3611df5f0e5b1ffbfd01166b8f02d1f5fa2b99", - "_spec": "mout@^0.11.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar.gz", - "bugs": { - "url": "https://github.com/mout/mout/issues/" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Adam Nowotny" - }, - { - "name": "André Cruz", - "email": "amdfcruz@gmail.com" - }, - { - "name": "Conrad Zimmerman", - "url": "http://www.conradz.com" - }, - { - "name": "Friedemann Altrock", - "email": "frodenius@gmail.com" - }, - { - "name": "Igor Almeida", - "email": "igor.p.almeida@gmail.com" - }, - { - "name": "Jarrod Overson", - "url": "http://jarrodoverson.com" - }, - { - "name": "Miller Medeiros", - "email": "contact@millermedeiros.com", - "url": "http://blog.millermedeiros.com" - }, - { - "name": "Mathias Paumgarten", - "email": "mail@mathias-paumgarten.com" - }, - { - "name": "Zach Shipley" - } - ], - "deprecated": false, - "description": "Modular Utilities", - "devDependencies": { - "commander": "~1.0.5", - "handlebars": "~1.0.6", - "istanbul": "~0.1.27", - "jasmine-node": "~1.14.5", - "jshint": "2.x", - "mdoc": "~0.3.2", - "nodefy": "*", - "regenerate": "~0.5.4", - "requirejs": "2.x", - "rimraf": "2.2.2", - "rocambole": "~0.2.3" - }, - "directories": { - "doc": "./doc" - }, - "homepage": "http://moutjs.com/", - "keywords": [ - "utilities", - "functional", - "amd-utils", - "stdlib" - ], - "license": "MIT", - "main": "./index.js", - "name": "mout", - "repository": { - "type": "git", - "url": "git://github.com/mout/mout.git" - }, - "scripts": { - "pretest": "node build pkg", - "test": "istanbul test tests/runner.js --hook-run-in-context" - }, - "testling": { - "preprocess": "node build testling", - "browsers": { - "ie": [ - 7, - 8, - 9, - 10 - ], - "firefox": [ - 17, - "nightly" - ], - "chrome": [ - 23, - "canary" - ], - "opera": [ - 12, - "next" - ], - "safari": [ - 5.1, - 6 - ], - "iphone": [ - 6 - ], - "ipad": [ - 6 - ] - }, - "scripts": [ - "tests/lib/jasmine/jasmine.js", - "tests/lib/jasmine/jasmine.async.js", - "tests/lib/jasmine/jasmine-tap.js", - "tests/lib/requirejs/require.js", - "tests/testling/src.js", - "tests/testling/specs.js", - "tests/runner.js" - ] - }, - "version": "0.11.1" -} diff --git a/truebit-implementation/node_modules/mout/queryString.js b/truebit-implementation/node_modules/mout/queryString.js deleted file mode 100644 index 22685a7f..00000000 --- a/truebit-implementation/node_modules/mout/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - - diff --git a/truebit-implementation/node_modules/mout/queryString/contains.js b/truebit-implementation/node_modules/mout/queryString/contains.js deleted file mode 100644 index da678cf4..00000000 --- a/truebit-implementation/node_modules/mout/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -var getQuery = require('./getQuery'); - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - module.exports = contains; - diff --git a/truebit-implementation/node_modules/mout/queryString/decode.js b/truebit-implementation/node_modules/mout/queryString/decode.js deleted file mode 100644 index c1b2cab6..00000000 --- a/truebit-implementation/node_modules/mout/queryString/decode.js +++ /dev/null @@ -1,36 +0,0 @@ -var typecast = require('../string/typecast'); -var isArray = require('../lang/isArray'); -var hasOwn = require('../object/hasOwn'); - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - reg = /([^=]+)=(.+)/, - i = -1, - obj = {}, - equalIndex, cur, pValue, pName; - - while ((cur = queryArr[++i])) { - equalIndex = cur.indexOf('='); - pName = cur.substring(0, equalIndex); - pValue = decodeURIComponent(cur.substring(equalIndex + 1)); - if (shouldTypecast !== false) { - pValue = typecast(pValue); - } - if (hasOwn(obj, pName)){ - if(isArray(obj[pName])){ - obj[pName].push(pValue); - } else { - obj[pName] = [obj[pName], pValue]; - } - } else { - obj[pName] = pValue; - } - } - return obj; - } - - module.exports = decode; - diff --git a/truebit-implementation/node_modules/mout/queryString/encode.js b/truebit-implementation/node_modules/mout/queryString/encode.js deleted file mode 100644 index 3a4fd0a6..00000000 --- a/truebit-implementation/node_modules/mout/queryString/encode.js +++ /dev/null @@ -1,27 +0,0 @@ -var forOwn = require('../object/forOwn'); -var isArray = require('../lang/isArray'); -var forEach = require('../array/forEach'); - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = [], - arrValues, reg; - forOwn(obj, function (val, key) { - if (isArray(val)) { - arrValues = key + '='; - reg = new RegExp('&'+key+'+=$'); - forEach(val, function (aValue) { - arrValues += encodeURIComponent(aValue) + '&' + key + '='; - }); - query.push(arrValues.replace(reg, '')); - } else { - query.push(key + '=' + encodeURIComponent(val)); - } - }); - return (query.length) ? '?' + query.join('&') : ''; - } - - module.exports = encode; - diff --git a/truebit-implementation/node_modules/mout/queryString/getParam.js b/truebit-implementation/node_modules/mout/queryString/getParam.js deleted file mode 100644 index f149c3ea..00000000 --- a/truebit-implementation/node_modules/mout/queryString/getParam.js +++ /dev/null @@ -1,15 +0,0 @@ -var typecast = require('../string/typecast'); -var getQuery = require('./getQuery'); - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - module.exports = getParam; - diff --git a/truebit-implementation/node_modules/mout/queryString/getQuery.js b/truebit-implementation/node_modules/mout/queryString/getQuery.js deleted file mode 100644 index 62140fa6..00000000 --- a/truebit-implementation/node_modules/mout/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ - - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0].replace(/\+/g,' ')) : ''; - } - - module.exports = getQuery; - diff --git a/truebit-implementation/node_modules/mout/queryString/parse.js b/truebit-implementation/node_modules/mout/queryString/parse.js deleted file mode 100644 index 532906c0..00000000 --- a/truebit-implementation/node_modules/mout/queryString/parse.js +++ /dev/null @@ -1,13 +0,0 @@ -var decode = require('./decode'); -var getQuery = require('./getQuery'); - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - module.exports = parse; - - diff --git a/truebit-implementation/node_modules/mout/queryString/setParam.js b/truebit-implementation/node_modules/mout/queryString/setParam.js deleted file mode 100644 index 052a9ba6..00000000 --- a/truebit-implementation/node_modules/mout/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ - - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - module.exports = setParam; - - diff --git a/truebit-implementation/node_modules/mout/random.js b/truebit-implementation/node_modules/mout/random.js deleted file mode 100644 index a924a10b..00000000 --- a/truebit-implementation/node_modules/mout/random.js +++ /dev/null @@ -1,18 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randBool' : require('./random/randBool'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'randString' : require('./random/randString'), - 'random' : require('./random/random') -}; - - diff --git a/truebit-implementation/node_modules/mout/random/choice.js b/truebit-implementation/node_modules/mout/random/choice.js deleted file mode 100644 index 51aa82a2..00000000 --- a/truebit-implementation/node_modules/mout/random/choice.js +++ /dev/null @@ -1,15 +0,0 @@ -var randInt = require('./randInt'); -var isArray = require('../lang/isArray'); - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - module.exports = choice; - - diff --git a/truebit-implementation/node_modules/mout/random/guid.js b/truebit-implementation/node_modules/mout/random/guid.js deleted file mode 100644 index 41f6eddc..00000000 --- a/truebit-implementation/node_modules/mout/random/guid.js +++ /dev/null @@ -1,24 +0,0 @@ -var randHex = require('./randHex'); -var choice = require('./choice'); - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - module.exports = guid; - diff --git a/truebit-implementation/node_modules/mout/random/rand.js b/truebit-implementation/node_modules/mout/random/rand.js deleted file mode 100644 index 782dec88..00000000 --- a/truebit-implementation/node_modules/mout/random/rand.js +++ /dev/null @@ -1,15 +0,0 @@ -var random = require('./random'); -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - module.exports = rand; - diff --git a/truebit-implementation/node_modules/mout/random/randBit.js b/truebit-implementation/node_modules/mout/random/randBit.js deleted file mode 100644 index 04f7aa52..00000000 --- a/truebit-implementation/node_modules/mout/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -var randBool = require('./randBool'); - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return randBool()? 1 : 0; - } - - module.exports = randomBit; - diff --git a/truebit-implementation/node_modules/mout/random/randBool.js b/truebit-implementation/node_modules/mout/random/randBool.js deleted file mode 100644 index d3d35cbc..00000000 --- a/truebit-implementation/node_modules/mout/random/randBool.js +++ /dev/null @@ -1,12 +0,0 @@ -var random = require('./random'); - - /** - * returns a random boolean value (true or false) - */ - function randBool(){ - return random() >= 0.5; - } - - module.exports = randBool; - - diff --git a/truebit-implementation/node_modules/mout/random/randHex.js b/truebit-implementation/node_modules/mout/random/randHex.js deleted file mode 100644 index d8d711c3..00000000 --- a/truebit-implementation/node_modules/mout/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -var choice = require('./choice'); - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - module.exports = randHex; - - diff --git a/truebit-implementation/node_modules/mout/random/randInt.js b/truebit-implementation/node_modules/mout/random/randInt.js deleted file mode 100644 index e237d964..00000000 --- a/truebit-implementation/node_modules/mout/random/randInt.js +++ /dev/null @@ -1,18 +0,0 @@ -var MIN_INT = require('../number/MIN_INT'); -var MAX_INT = require('../number/MAX_INT'); -var rand = require('./rand'); - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - module.exports = randInt; - diff --git a/truebit-implementation/node_modules/mout/random/randSign.js b/truebit-implementation/node_modules/mout/random/randSign.js deleted file mode 100644 index 75a1a51e..00000000 --- a/truebit-implementation/node_modules/mout/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -var randBool = require('./randBool'); - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return randBool()? 1 : -1; - } - - module.exports = randomSign; - diff --git a/truebit-implementation/node_modules/mout/random/randString.js b/truebit-implementation/node_modules/mout/random/randString.js deleted file mode 100644 index e3c35976..00000000 --- a/truebit-implementation/node_modules/mout/random/randString.js +++ /dev/null @@ -1,27 +0,0 @@ -var isNumber = require('../lang/isNumber'); -var isString = require('../lang/isString'); -var randInt = require('./randInt'); - - var defaultDictionary = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - function randomString(length, dictionary) { - if(!isNumber(length) || length <= 0) { - length = 8; - } - - if(!isString(dictionary) || dictionary.length < 1) { - dictionary = defaultDictionary; - } - - var result = '', - domain = dictionary.length - 1; - - while(length--) { - result += dictionary[randInt(0, domain)]; - } - - return result; - } - - module.exports = randomString; - diff --git a/truebit-implementation/node_modules/mout/random/random.js b/truebit-implementation/node_modules/mout/random/random.js deleted file mode 100644 index 670a3cc4..00000000 --- a/truebit-implementation/node_modules/mout/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - module.exports = random; - - diff --git a/truebit-implementation/node_modules/mout/src/array.js b/truebit-implementation/node_modules/mout/src/array.js deleted file mode 100644 index 794dcecb..00000000 --- a/truebit-implementation/node_modules/mout/src/array.js +++ /dev/null @@ -1,55 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'append' : require('./array/append'), - 'collect' : require('./array/collect'), - 'combine' : require('./array/combine'), - 'compact' : require('./array/compact'), - 'contains' : require('./array/contains'), - 'difference' : require('./array/difference'), - 'equals' : require('./array/equals'), - 'every' : require('./array/every'), - 'filter' : require('./array/filter'), - 'find' : require('./array/find'), - 'findIndex' : require('./array/findIndex'), - 'findLast' : require('./array/findLast'), - 'findLastIndex' : require('./array/findLastIndex'), - 'flatten' : require('./array/flatten'), - 'forEach' : require('./array/forEach'), - 'groupBy' : require('./array/groupBy'), - 'indexOf' : require('./array/indexOf'), - 'insert' : require('./array/insert'), - 'intersection' : require('./array/intersection'), - 'invoke' : require('./array/invoke'), - 'join' : require('./array/join'), - 'last' : require('./array/last'), - 'lastIndexOf' : require('./array/lastIndexOf'), - 'map' : require('./array/map'), - 'max' : require('./array/max'), - 'min' : require('./array/min'), - 'pick' : require('./array/pick'), - 'pluck' : require('./array/pluck'), - 'range' : require('./array/range'), - 'reduce' : require('./array/reduce'), - 'reduceRight' : require('./array/reduceRight'), - 'reject' : require('./array/reject'), - 'remove' : require('./array/remove'), - 'removeAll' : require('./array/removeAll'), - 'reverse' : require('./array/reverse'), - 'shuffle' : require('./array/shuffle'), - 'slice' : require('./array/slice'), - 'some' : require('./array/some'), - 'sort' : require('./array/sort'), - 'sortBy' : require('./array/sortBy'), - 'split' : require('./array/split'), - 'take' : require('./array/take'), - 'toLookup' : require('./array/toLookup'), - 'union' : require('./array/union'), - 'unique' : require('./array/unique'), - 'xor' : require('./array/xor'), - 'zip' : require('./array/zip') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/append.js b/truebit-implementation/node_modules/mout/src/array/append.js deleted file mode 100644 index 549d8754..00000000 --- a/truebit-implementation/node_modules/mout/src/array/append.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function () { - - /** - * Appends an array to the end of another. - * The first array will be modified. - */ - function append(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var pad = arr1.length, - i = -1, - len = arr2.length; - while (++i < len) { - arr1[pad + i] = arr2[i]; - } - return arr1; - } - return append; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/collect.js b/truebit-implementation/node_modules/mout/src/array/collect.js deleted file mode 100644 index 8f60cda2..00000000 --- a/truebit-implementation/node_modules/mout/src/array/collect.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./append', '../function/makeIterator_'], function (append, makeIterator) { - - /** - * Maps the items in the array and concatenates the result arrays. - */ - function collect(arr, callback, thisObj){ - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - var value = callback(arr[i], i, arr); - if (value != null) { - append(results, value); - } - } - - return results; - } - - return collect; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/combine.js b/truebit-implementation/node_modules/mout/src/array/combine.js deleted file mode 100644 index 22efb860..00000000 --- a/truebit-implementation/node_modules/mout/src/array/combine.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * Combines an array with all the items of another. - * Does not allow duplicates and is case and type sensitive. - */ - function combine(arr1, arr2) { - if (arr2 == null) { - return arr1; - } - - var i = -1, len = arr2.length; - while (++i < len) { - if (indexOf(arr1, arr2[i]) === -1) { - arr1.push(arr2[i]); - } - } - - return arr1; - } - return combine; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/compact.js b/truebit-implementation/node_modules/mout/src/array/compact.js deleted file mode 100644 index 02a81098..00000000 --- a/truebit-implementation/node_modules/mout/src/array/compact.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./filter'], function (filter) { - - /** - * Remove all null/undefined items from array. - */ - function compact(arr) { - return filter(arr, function(val){ - return (val != null); - }); - } - - return compact; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/contains.js b/truebit-implementation/node_modules/mout/src/array/contains.js deleted file mode 100644 index fca4f7cb..00000000 --- a/truebit-implementation/node_modules/mout/src/array/contains.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./indexOf'], function (indexOf) { - - /** - * If array contains values. - */ - function contains(arr, val) { - return indexOf(arr, val) !== -1; - } - return contains; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/difference.js b/truebit-implementation/node_modules/mout/src/array/difference.js deleted file mode 100644 index 0d52c251..00000000 --- a/truebit-implementation/node_modules/mout/src/array/difference.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./unique', './filter', './some', './contains', './slice'], function (unique, filter, some, contains, slice) { - - - /** - * Return a new Array with elements that aren't present in the other Arrays. - */ - function difference(arr) { - var arrs = slice(arguments, 1), - result = filter(unique(arr), function(needle){ - return !some(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return difference; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/equals.js b/truebit-implementation/node_modules/mout/src/array/equals.js deleted file mode 100644 index 0e3e148a..00000000 --- a/truebit-implementation/node_modules/mout/src/array/equals.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../lang/is', '../lang/isArray', './every'], function(is, isArray, every) { - - /** - * Compares if both arrays have the same elements - */ - function equals(a, b, callback){ - callback = callback || is; - - if (!isArray(a) || !isArray(b)) { - return callback(a, b); - } - - if (a.length !== b.length) { - return false; - } - - return every(a, makeCompare(callback), b); - } - - function makeCompare(callback) { - return function(value, i) { - return i in this && callback(value, this[i]); - }; - } - - return equals; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/every.js b/truebit-implementation/node_modules/mout/src/array/every.js deleted file mode 100644 index 78ba46d3..00000000 --- a/truebit-implementation/node_modules/mout/src/array/every.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array every - */ - function every(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (!callback(arr[i], i, arr) ) { - result = false; - break; - } - } - - return result; - } - - return every; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/filter.js b/truebit-implementation/node_modules/mout/src/array/filter.js deleted file mode 100644 index 38add180..00000000 --- a/truebit-implementation/node_modules/mout/src/array/filter.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array filter - */ - function filter(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return filter; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/find.js b/truebit-implementation/node_modules/mout/src/array/find.js deleted file mode 100644 index 3957dcd5..00000000 --- a/truebit-implementation/node_modules/mout/src/array/find.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./findIndex'], function (findIndex) { - - /** - * Returns first item that matches criteria - */ - function find(arr, iterator, thisObj){ - var idx = findIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - return find; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/findIndex.js b/truebit-implementation/node_modules/mout/src/array/findIndex.js deleted file mode 100644 index 59dfeeb9..00000000 --- a/truebit-implementation/node_modules/mout/src/array/findIndex.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Returns the index of the first item that matches criteria - */ - function findIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var i = -1, len = arr.length; - while (++i < len) { - if (iterator(arr[i], i, arr)) { - return i; - } - } - - return -1; - } - - return findIndex; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/findLast.js b/truebit-implementation/node_modules/mout/src/array/findLast.js deleted file mode 100644 index 9308fa67..00000000 --- a/truebit-implementation/node_modules/mout/src/array/findLast.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./findLastIndex'], function (findLastIndex) { - - /** - * Returns last item that matches criteria - */ - function findLast(arr, iterator, thisObj){ - var idx = findLastIndex(arr, iterator, thisObj); - return idx >= 0? arr[idx] : void(0); - } - - return findLast; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/findLastIndex.js b/truebit-implementation/node_modules/mout/src/array/findLastIndex.js deleted file mode 100644 index 45f266e6..00000000 --- a/truebit-implementation/node_modules/mout/src/array/findLastIndex.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Returns the index of the last item that matches criteria - */ - function findLastIndex(arr, iterator, thisObj){ - iterator = makeIterator(iterator, thisObj); - if (arr == null) { - return -1; - } - - var n = arr.length; - while (--n >= 0) { - if (iterator(arr[n], n, arr)) { - return n; - } - } - - return -1; - } - - return findLastIndex; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/flatten.js b/truebit-implementation/node_modules/mout/src/array/flatten.js deleted file mode 100644 index 3035b335..00000000 --- a/truebit-implementation/node_modules/mout/src/array/flatten.js +++ /dev/null @@ -1,44 +0,0 @@ -define(['../lang/isArray', './append'], function (isArray, append) { - - /* - * Helper function to flatten to a destination array. - * Used to remove the need to create intermediate arrays while flattening. - */ - function flattenTo(arr, result, level) { - if (level === 0) { - append(result, arr); - return result; - } - - var value, - i = -1, - len = arr.length; - while (++i < len) { - value = arr[i]; - if (isArray(value)) { - flattenTo(value, result, level - 1); - } else { - result.push(value); - } - } - return result; - } - - /** - * Recursively flattens an array. - * A new array containing all the elements is returned. - * If level is specified, it will only flatten up to that level. - */ - function flatten(arr, level) { - if (arr == null) { - return []; - } - - level = level == null ? -1 : level; - return flattenTo(arr, [], level); - } - - return flatten; - -}); - diff --git a/truebit-implementation/node_modules/mout/src/array/forEach.js b/truebit-implementation/node_modules/mout/src/array/forEach.js deleted file mode 100644 index 0e045868..00000000 --- a/truebit-implementation/node_modules/mout/src/array/forEach.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Array forEach - */ - function forEach(arr, callback, thisObj) { - if (arr == null) { - return; - } - var i = -1, - len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback.call(thisObj, arr[i], i, arr) === false ) { - break; - } - } - } - - return forEach; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/groupBy.js b/truebit-implementation/node_modules/mout/src/array/groupBy.js deleted file mode 100644 index 47906be6..00000000 --- a/truebit-implementation/node_modules/mout/src/array/groupBy.js +++ /dev/null @@ -1,32 +0,0 @@ -define([ - '../array/forEach', - '../function/identity', - '../function/makeIterator_' -], function(forEach, identity, makeIterator) { - - /** - * Bucket the array values. - */ - function groupBy(arr, categorize, thisObj) { - if (categorize) { - categorize = makeIterator(categorize, thisObj); - } else { - // Default to identity function. - categorize = identity; - } - - var buckets = {}; - forEach(arr, function(element) { - var bucket = categorize(element); - if (!(bucket in buckets)) { - buckets[bucket] = []; - } - - buckets[bucket].push(element); - }); - - return buckets; - } - - return groupBy; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/indexOf.js b/truebit-implementation/node_modules/mout/src/array/indexOf.js deleted file mode 100644 index 0e75f99b..00000000 --- a/truebit-implementation/node_modules/mout/src/array/indexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array.indexOf - */ - function indexOf(arr, item, fromIndex) { - fromIndex = fromIndex || 0; - if (arr == null) { - return -1; - } - - var len = arr.length, - i = fromIndex < 0 ? len + fromIndex : fromIndex; - while (i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[i] === item) { - return i; - } - - i++; - } - - return -1; - } - - return indexOf; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/insert.js b/truebit-implementation/node_modules/mout/src/array/insert.js deleted file mode 100644 index a3d7196c..00000000 --- a/truebit-implementation/node_modules/mout/src/array/insert.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./difference', './slice'], function (difference, slice) { - - /** - * Insert item into array if not already present. - */ - function insert(arr, rest_items) { - var diff = difference(slice(arguments, 1), arr); - if (diff.length) { - Array.prototype.push.apply(arr, diff); - } - return arr.length; - } - return insert; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/intersection.js b/truebit-implementation/node_modules/mout/src/array/intersection.js deleted file mode 100644 index 8d0baa4d..00000000 --- a/truebit-implementation/node_modules/mout/src/array/intersection.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./unique', './filter', './every', './contains', './slice'], function (unique, filter, every, contains, slice) { - - - /** - * Return a new Array with elements common to all Arrays. - * - based on underscore.js implementation - */ - function intersection(arr) { - var arrs = slice(arguments, 1), - result = filter(unique(arr), function(needle){ - return every(arrs, function(haystack){ - return contains(haystack, needle); - }); - }); - return result; - } - - return intersection; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/invoke.js b/truebit-implementation/node_modules/mout/src/array/invoke.js deleted file mode 100644 index 860d72a5..00000000 --- a/truebit-implementation/node_modules/mout/src/array/invoke.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./slice'], function (slice) { - - /** - * Call `methodName` on each item of the array passing custom arguments if - * needed. - */ - function invoke(arr, methodName, var_args){ - if (arr == null) { - return arr; - } - - var args = slice(arguments, 2); - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - value[methodName].apply(value, args); - } - - return arr; - } - - return invoke; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/join.js b/truebit-implementation/node_modules/mout/src/array/join.js deleted file mode 100644 index 2c618d29..00000000 --- a/truebit-implementation/node_modules/mout/src/array/join.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./filter'], function(filter) { - - function isValidString(val) { - return (val != null && val !== ''); - } - - /** - * Joins strings with the specified separator inserted between each value. - * Null values and empty strings will be excluded. - */ - function join(items, separator) { - separator = separator || ''; - return filter(items, isValidString).join(separator); - } - - return join; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/last.js b/truebit-implementation/node_modules/mout/src/array/last.js deleted file mode 100644 index 2c852967..00000000 --- a/truebit-implementation/node_modules/mout/src/array/last.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function () { - - /** - * Returns last element of array. - */ - function last(arr){ - if (arr == null || arr.length < 1) { - return undefined; - } - - return arr[arr.length - 1]; - } - - return last; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/lastIndexOf.js b/truebit-implementation/node_modules/mout/src/array/lastIndexOf.js deleted file mode 100644 index 931235f4..00000000 --- a/truebit-implementation/node_modules/mout/src/array/lastIndexOf.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Array lastIndexOf - */ - function lastIndexOf(arr, item, fromIndex) { - if (arr == null) { - return -1; - } - - var len = arr.length; - fromIndex = (fromIndex == null || fromIndex >= len)? len - 1 : fromIndex; - fromIndex = (fromIndex < 0)? len + fromIndex : fromIndex; - - while (fromIndex >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if (arr[fromIndex] === item) { - return fromIndex; - } - fromIndex--; - } - - return -1; - } - - return lastIndexOf; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/map.js b/truebit-implementation/node_modules/mout/src/array/map.js deleted file mode 100644 index 14377ab6..00000000 --- a/truebit-implementation/node_modules/mout/src/array/map.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array map - */ - function map(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null){ - return results; - } - - var i = -1, len = arr.length; - while (++i < len) { - results[i] = callback(arr[i], i, arr); - } - - return results; - } - - return map; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/max.js b/truebit-implementation/node_modules/mout/src/array/max.js deleted file mode 100644 index d0628f0a..00000000 --- a/truebit-implementation/node_modules/mout/src/array/max.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Return maximum value inside array - */ - function max(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return Infinity; - } else if (arr.length && !iterator) { - return Math.max.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = -Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp > compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return max; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/min.js b/truebit-implementation/node_modules/mout/src/array/min.js deleted file mode 100644 index 07a0c71f..00000000 --- a/truebit-implementation/node_modules/mout/src/array/min.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Return minimum value inside array - */ - function min(arr, iterator, thisObj){ - if (arr == null || !arr.length) { - return -Infinity; - } else if (arr.length && !iterator) { - return Math.min.apply(Math, arr); - } else { - iterator = makeIterator(iterator, thisObj); - var result, - compare = Infinity, - value, - temp; - - var i = -1, len = arr.length; - while (++i < len) { - value = arr[i]; - temp = iterator(value, i, arr); - if (temp < compare) { - compare = temp; - result = value; - } - } - - return result; - } - } - - return min; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/pick.js b/truebit-implementation/node_modules/mout/src/array/pick.js deleted file mode 100644 index dc5b222f..00000000 --- a/truebit-implementation/node_modules/mout/src/array/pick.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['../random/randInt'], function (randInt) { - - /** - * Remove random item(s) from the Array and return it. - * Returns an Array of items if [nItems] is provided or a single item if - * it isn't specified. - */ - function pick(arr, nItems){ - if (nItems != null) { - var result = []; - if (nItems > 0 && arr && arr.length) { - nItems = nItems > arr.length? arr.length : nItems; - while (nItems--) { - result.push( pickOne(arr) ); - } - } - return result; - } - return (arr && arr.length)? pickOne(arr) : void(0); - } - - - function pickOne(arr){ - var idx = randInt(0, arr.length - 1); - return arr.splice(idx, 1)[0]; - } - - - return pick; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/pluck.js b/truebit-implementation/node_modules/mout/src/array/pluck.js deleted file mode 100644 index c908856e..00000000 --- a/truebit-implementation/node_modules/mout/src/array/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(arr, propName){ - return map(arr, propName); - } - - return pluck; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/range.js b/truebit-implementation/node_modules/mout/src/array/range.js deleted file mode 100644 index 148ebf96..00000000 --- a/truebit-implementation/node_modules/mout/src/array/range.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../math/countSteps'], function (countSteps) { - - /** - * Returns an Array of numbers inside range. - */ - function range(start, stop, step) { - if (stop == null) { - stop = start; - start = 0; - } - step = step || 1; - - var result = [], - nSteps = countSteps(stop - start, step), - i = start; - - while (i <= stop) { - result.push(i); - i += step; - } - - return result; - } - - return range; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/reduce.js b/truebit-implementation/node_modules/mout/src/array/reduce.js deleted file mode 100644 index 5f97ae8e..00000000 --- a/truebit-implementation/node_modules/mout/src/array/reduce.js +++ /dev/null @@ -1,33 +0,0 @@ -define(function () { - - /** - * Array reduce - */ - function reduce(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2, - result = initVal; - - if (arr == null || !arr.length) { - if (!hasInit) { - throw new Error('reduce of empty array with no initial value'); - } else { - return initVal; - } - } - - var i = -1, len = arr.length; - while (++i < len) { - if (!hasInit) { - result = arr[i]; - hasInit = true; - } else { - result = fn(result, arr[i], i, arr); - } - } - - return result; - } - - return reduce; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/reduceRight.js b/truebit-implementation/node_modules/mout/src/array/reduceRight.js deleted file mode 100644 index ddae0e7f..00000000 --- a/truebit-implementation/node_modules/mout/src/array/reduceRight.js +++ /dev/null @@ -1,34 +0,0 @@ -define(function () { - - /** - * Array reduceRight - */ - function reduceRight(arr, fn, initVal) { - // check for args.length since initVal might be "undefined" see #gh-57 - var hasInit = arguments.length > 2; - - if (arr == null || !arr.length) { - if (hasInit) { - return initVal; - } else { - throw new Error('reduce of empty array with no initial value'); - } - } - - var i = arr.length, result = initVal, value; - while (--i >= 0) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - value = arr[i]; - if (!hasInit) { - result = value; - hasInit = true; - } else { - result = fn(result, value, i, arr); - } - } - return result; - } - - return reduceRight; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/reject.js b/truebit-implementation/node_modules/mout/src/array/reject.js deleted file mode 100644 index cad40384..00000000 --- a/truebit-implementation/node_modules/mout/src/array/reject.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['../function/makeIterator_'], function(makeIterator) { - - /** - * Array reject - */ - function reject(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var results = []; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - value = arr[i]; - if (!callback(value, i, arr)) { - results.push(value); - } - } - - return results; - } - - return reject; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/remove.js b/truebit-implementation/node_modules/mout/src/array/remove.js deleted file mode 100644 index dec9134d..00000000 --- a/truebit-implementation/node_modules/mout/src/array/remove.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove a single item from the array. - * (it won't remove duplicates, just a single item) - */ - function remove(arr, item){ - var idx = indexOf(arr, item); - if (idx !== -1) arr.splice(idx, 1); - } - - return remove; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/removeAll.js b/truebit-implementation/node_modules/mout/src/array/removeAll.js deleted file mode 100644 index e81022b8..00000000 --- a/truebit-implementation/node_modules/mout/src/array/removeAll.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./indexOf'], function(indexOf){ - - /** - * Remove all instances of an item from array. - */ - function removeAll(arr, item){ - var idx = indexOf(arr, item); - while (idx !== -1) { - arr.splice(idx, 1); - idx = indexOf(arr, item, idx); - } - } - - return removeAll; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/reverse.js b/truebit-implementation/node_modules/mout/src/array/reverse.js deleted file mode 100644 index b970427e..00000000 --- a/truebit-implementation/node_modules/mout/src/array/reverse.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a copy of the array in reversed order. - */ - function reverse(array) { - var copy = array.slice(); - copy.reverse(); - return copy; - } - - return reverse; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/shuffle.js b/truebit-implementation/node_modules/mout/src/array/shuffle.js deleted file mode 100644 index 891d1677..00000000 --- a/truebit-implementation/node_modules/mout/src/array/shuffle.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../random/randInt'], function (randInt) { - - /** - * Shuffle array items. - */ - function shuffle(arr) { - var results = [], - rnd; - if (arr == null) { - return results; - } - - var i = -1, len = arr.length, value; - while (++i < len) { - if (!i) { - results[0] = arr[0]; - } else { - rnd = randInt(0, i); - results[i] = results[rnd]; - results[rnd] = arr[i]; - } - } - - return results; - } - - return shuffle; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/slice.js b/truebit-implementation/node_modules/mout/src/array/slice.js deleted file mode 100644 index 994caba1..00000000 --- a/truebit-implementation/node_modules/mout/src/array/slice.js +++ /dev/null @@ -1,35 +0,0 @@ -define(function () { - - /** - * Create slice of source array or array-like object - */ - function slice(arr, start, end){ - var len = arr.length; - - if (start == null) { - start = 0; - } else if (start < 0) { - start = Math.max(len + start, 0); - } else { - start = Math.min(start, len); - } - - if (end == null) { - end = len; - } else if (end < 0) { - end = Math.max(len + end, 0); - } else { - end = Math.min(end, len); - } - - var result = []; - while (start < end) { - result.push(arr[start++]); - } - - return result; - } - - return slice; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/some.js b/truebit-implementation/node_modules/mout/src/array/some.js deleted file mode 100644 index e46a9781..00000000 --- a/truebit-implementation/node_modules/mout/src/array/some.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../function/makeIterator_'], function (makeIterator) { - - /** - * Array some - */ - function some(arr, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length; - while (++i < len) { - // we iterate over sparse items since there is no way to make it - // work properly on IE 7-8. see #64 - if ( callback(arr[i], i, arr) ) { - result = true; - break; - } - } - - return result; - } - - return some; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/sort.js b/truebit-implementation/node_modules/mout/src/array/sort.js deleted file mode 100644 index 4c194042..00000000 --- a/truebit-implementation/node_modules/mout/src/array/sort.js +++ /dev/null @@ -1,55 +0,0 @@ -define(function () { - - /** - * Merge sort (http://en.wikipedia.org/wiki/Merge_sort) - */ - function mergeSort(arr, compareFn) { - if (arr == null) { - return []; - } else if (arr.length < 2) { - return arr; - } - - if (compareFn == null) { - compareFn = defaultCompare; - } - - var mid, left, right; - - mid = ~~(arr.length / 2); - left = mergeSort( arr.slice(0, mid), compareFn ); - right = mergeSort( arr.slice(mid, arr.length), compareFn ); - - return merge(left, right, compareFn); - } - - function defaultCompare(a, b) { - return a < b ? -1 : (a > b? 1 : 0); - } - - function merge(left, right, compareFn) { - var result = []; - - while (left.length && right.length) { - if (compareFn(left[0], right[0]) <= 0) { - // if 0 it should preserve same order (stable) - result.push(left.shift()); - } else { - result.push(right.shift()); - } - } - - if (left.length) { - result.push.apply(result, left); - } - - if (right.length) { - result.push.apply(result, right); - } - - return result; - } - - return mergeSort; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/sortBy.js b/truebit-implementation/node_modules/mout/src/array/sortBy.js deleted file mode 100644 index 27971942..00000000 --- a/truebit-implementation/node_modules/mout/src/array/sortBy.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./sort', '../function/makeIterator_'], function (sort, makeIterator) { - - /* - * Sort array by the result of the callback - */ - function sortBy(arr, callback, context){ - callback = makeIterator(callback, context); - - return sort(arr, function(a, b) { - a = callback(a); - b = callback(b); - return (a < b) ? -1 : ((a > b) ? 1 : 0); - }); - } - - return sortBy; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/split.js b/truebit-implementation/node_modules/mout/src/array/split.js deleted file mode 100644 index a17275eb..00000000 --- a/truebit-implementation/node_modules/mout/src/array/split.js +++ /dev/null @@ -1,35 +0,0 @@ -define(function() { - - /** - * Split array into a fixed number of segments. - */ - function split(array, segments) { - segments = segments || 2; - var results = []; - if (array == null) { - return results; - } - - var minLength = Math.floor(array.length / segments), - remainder = array.length % segments, - i = 0, - len = array.length, - segmentIndex = 0, - segmentLength; - - while (i < len) { - segmentLength = minLength; - if (segmentIndex < remainder) { - segmentLength++; - } - - results.push(array.slice(i, i + segmentLength)); - - segmentIndex++; - i += segmentLength; - } - - return results; - } - return split; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/take.js b/truebit-implementation/node_modules/mout/src/array/take.js deleted file mode 100644 index 74b82419..00000000 --- a/truebit-implementation/node_modules/mout/src/array/take.js +++ /dev/null @@ -1,24 +0,0 @@ -define(function () { - - /** - * Iterates over a callback a set amount of times - * returning the results - */ - function take(n, callback, thisObj){ - var i = -1; - var arr = []; - if( !thisObj ){ - while(++i < n){ - arr[i] = callback(i, n); - } - } else { - while(++i < n){ - arr[i] = callback.call(thisObj, i, n); - } - } - return arr; - } - - return take; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/toLookup.js b/truebit-implementation/node_modules/mout/src/array/toLookup.js deleted file mode 100644 index aac8fd1d..00000000 --- a/truebit-implementation/node_modules/mout/src/array/toLookup.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['../lang/isFunction'], function (isFunction) { - - /** - * Creates an object that holds a lookup for the objects in the array. - */ - function toLookup(arr, key) { - var result = {}; - if (arr == null) { - return result; - } - - var i = -1, len = arr.length, value; - if (isFunction(key)) { - while (++i < len) { - value = arr[i]; - result[key(value)] = value; - } - } else { - while (++i < len) { - value = arr[i]; - result[value[key]] = value; - } - } - - return result; - } - return toLookup; -}); diff --git a/truebit-implementation/node_modules/mout/src/array/union.js b/truebit-implementation/node_modules/mout/src/array/union.js deleted file mode 100644 index 5f9922e5..00000000 --- a/truebit-implementation/node_modules/mout/src/array/union.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./unique', './append'], function (unique, append) { - - /** - * Concat multiple arrays and remove duplicates - */ - function union(arrs) { - var results = []; - var i = -1, len = arguments.length; - while (++i < len) { - append(results, arguments[i]); - } - - return unique(results); - } - - return union; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/unique.js b/truebit-implementation/node_modules/mout/src/array/unique.js deleted file mode 100644 index c4a011a0..00000000 --- a/truebit-implementation/node_modules/mout/src/array/unique.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['./filter'], function(filter){ - - /** - * @return {array} Array of unique items - */ - function unique(arr, compare){ - compare = compare || isEqual; - return filter(arr, function(item, i, arr){ - var n = arr.length; - while (++i < n) { - if ( compare(item, arr[i]) ) { - return false; - } - } - return true; - }); - } - - function isEqual(a, b){ - return a === b; - } - - return unique; -}); - diff --git a/truebit-implementation/node_modules/mout/src/array/xor.js b/truebit-implementation/node_modules/mout/src/array/xor.js deleted file mode 100644 index 7df89d9c..00000000 --- a/truebit-implementation/node_modules/mout/src/array/xor.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['./unique', './filter', './contains'], function (unique, filter, contains) { - - - /** - * Exclusive OR. Returns items that are present in a single array. - * - like ptyhon's `symmetric_difference` - */ - function xor(arr1, arr2) { - arr1 = unique(arr1); - arr2 = unique(arr2); - - var a1 = filter(arr1, function(item){ - return !contains(arr2, item); - }), - a2 = filter(arr2, function(item){ - return !contains(arr1, item); - }); - - return a1.concat(a2); - } - - return xor; - -}); diff --git a/truebit-implementation/node_modules/mout/src/array/zip.js b/truebit-implementation/node_modules/mout/src/array/zip.js deleted file mode 100644 index bd0dbb84..00000000 --- a/truebit-implementation/node_modules/mout/src/array/zip.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['./max', './map'], function (max, map) { - - function getLength(arr) { - return arr == null ? 0 : arr.length; - } - - /** - * Merges together the values of each of the arrays with the values at the - * corresponding position. - */ - function zip(arr){ - var len = arr ? max(map(arguments, getLength)) : 0, - results = [], - i = -1; - while (++i < len) { - // jshint loopfunc: true - results.push(map(arguments, function(item) { - return item == null ? undefined : item[i]; - })); - } - - return results; - } - - return zip; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection.js b/truebit-implementation/node_modules/mout/src/collection.js deleted file mode 100644 index 386e6da9..00000000 --- a/truebit-implementation/node_modules/mout/src/collection.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./collection/contains'), - 'every' : require('./collection/every'), - 'filter' : require('./collection/filter'), - 'find' : require('./collection/find'), - 'forEach' : require('./collection/forEach'), - 'make_' : require('./collection/make_'), - 'map' : require('./collection/map'), - 'max' : require('./collection/max'), - 'min' : require('./collection/min'), - 'pluck' : require('./collection/pluck'), - 'reduce' : require('./collection/reduce'), - 'reject' : require('./collection/reject'), - 'size' : require('./collection/size'), - 'some' : require('./collection/some') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/contains.js b/truebit-implementation/node_modules/mout/src/collection/contains.js deleted file mode 100644 index 192167e8..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/contains.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/contains', '../object/contains'], function (make, arrContains, objContains) { - - /** - */ - return make(arrContains, objContains); - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/every.js b/truebit-implementation/node_modules/mout/src/collection/every.js deleted file mode 100644 index 6317f503..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/every.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/every', '../object/every'], function (make, arrEvery, objEvery) { - - /** - */ - return make(arrEvery, objEvery); - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/filter.js b/truebit-implementation/node_modules/mout/src/collection/filter.js deleted file mode 100644 index 4e7fadc8..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/filter.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forEach', '../function/makeIterator_'], function (forEach, makeIterator) { - - /** - * filter collection values, returns array. - */ - function filter(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - var results = []; - if (!list) { - return results; - } - forEach(list, function(value, index, list) { - if (iterator(value, index, list)) { - results[results.length] = value; - } - }); - return results; - } - - return filter; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/find.js b/truebit-implementation/node_modules/mout/src/collection/find.js deleted file mode 100644 index 681f9414..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/find.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/find', '../object/find'], function(make, arrFind, objFind) { - - /** - * Find value that returns true on iterator check. - */ - return make(arrFind, objFind); - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/forEach.js b/truebit-implementation/node_modules/mout/src/collection/forEach.js deleted file mode 100644 index 3b39d3ed..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/forEach.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/forEach', '../object/forOwn'], function (make, arrForEach, objForEach) { - - /** - */ - return make(arrForEach, objForEach); - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/make_.js b/truebit-implementation/node_modules/mout/src/collection/make_.js deleted file mode 100644 index 290a6511..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/make_.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/slice'], function(slice){ - - /** - * internal method used to create other collection modules. - */ - function makeCollectionMethod(arrMethod, objMethod, defaultReturn) { - return function(){ - var args = slice(arguments); - if (args[0] == null) { - return defaultReturn; - } - // array-like is treated as array - return (typeof args[0].length === 'number')? arrMethod.apply(null, args) : objMethod.apply(null, args); - }; - } - - return makeCollectionMethod; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/map.js b/truebit-implementation/node_modules/mout/src/collection/map.js deleted file mode 100644 index 96e24987..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/map.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/isObject', '../object/values', '../array/map', '../function/makeIterator_'], function (isObject, values, arrMap, makeIterator) { - - /** - * Map collection values, returns Array. - */ - function map(list, callback, thisObj) { - callback = makeIterator(callback, thisObj); - // list.length to check array-like object, if not array-like - // we simply map all the object values - if( isObject(list) && list.length == null ){ - list = values(list); - } - return arrMap(list, function (val, key, list) { - return callback(val, key, list); - }); - } - - return map; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/max.js b/truebit-implementation/node_modules/mout/src/collection/max.js deleted file mode 100644 index de9a6da5..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/max.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/max', '../object/max'], function (make, arrMax, objMax) { - - /** - * Get maximum value inside collection - */ - return make(arrMax, objMax); - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/min.js b/truebit-implementation/node_modules/mout/src/collection/min.js deleted file mode 100644 index f0c239a6..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/min.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./make_', '../array/min', '../object/min'], function (make, arrMin, objMin) { - - /** - * Get minimum value inside collection. - */ - return make(arrMin, objMin); - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/pluck.js b/truebit-implementation/node_modules/mout/src/collection/pluck.js deleted file mode 100644 index ef784a7a..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/pluck.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./map'], function (map) { - - /** - * Extract a list of property values. - */ - function pluck(list, key) { - return map(list, function(value) { - return value[key]; - }); - } - - return pluck; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/reduce.js b/truebit-implementation/node_modules/mout/src/collection/reduce.js deleted file mode 100644 index bd05d43d..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/reduce.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/reduce', '../object/reduce'], function (make, arrReduce, objReduce) { - - /** - */ - return make(arrReduce, objReduce); - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/reject.js b/truebit-implementation/node_modules/mout/src/collection/reject.js deleted file mode 100644 index 581adfdc..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Inverse or collection/filter - */ - function reject(list, iterator, thisObj) { - iterator = makeIterator(iterator, thisObj); - return filter(list, function(value, index, list) { - return !iterator(value, index, list); - }, thisObj); - } - - return reject; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/size.js b/truebit-implementation/node_modules/mout/src/collection/size.js deleted file mode 100644 index 4e5ab419..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/size.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/isArray', '../object/size'], function (isArray, objSize) { - - /** - * Get collection size - */ - function size(list) { - if (!list) { - return 0; - } - if (isArray(list)) { - return list.length; - } - return objSize(list); - } - - return size; - -}); diff --git a/truebit-implementation/node_modules/mout/src/collection/some.js b/truebit-implementation/node_modules/mout/src/collection/some.js deleted file mode 100644 index c0aebee2..00000000 --- a/truebit-implementation/node_modules/mout/src/collection/some.js +++ /dev/null @@ -1,7 +0,0 @@ -define(['./make_', '../array/some', '../object/some'], function (make, arrSome, objSome) { - - /** - */ - return make(arrSome, objSome); - -}); diff --git a/truebit-implementation/node_modules/mout/src/date.js b/truebit-implementation/node_modules/mout/src/date.js deleted file mode 100644 index b3038ee3..00000000 --- a/truebit-implementation/node_modules/mout/src/date.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'dayOfTheYear' : require('./date/dayOfTheYear'), - 'diff' : require('./date/diff'), - 'i18n_' : require('./date/i18n_'), - 'isLeapYear' : require('./date/isLeapYear'), - 'isSame' : require('./date/isSame'), - 'parseIso' : require('./date/parseIso'), - 'quarter' : require('./date/quarter'), - 'startOf' : require('./date/startOf'), - 'strftime' : require('./date/strftime'), - 'timezoneAbbr' : require('./date/timezoneAbbr'), - 'timezoneOffset' : require('./date/timezoneOffset'), - 'totalDaysInMonth' : require('./date/totalDaysInMonth'), - 'totalDaysInYear' : require('./date/totalDaysInYear'), - 'weekOfTheYear' : require('./date/weekOfTheYear') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/dayOfTheYear.js b/truebit-implementation/node_modules/mout/src/date/dayOfTheYear.js deleted file mode 100644 index dc77ae1b..00000000 --- a/truebit-implementation/node_modules/mout/src/date/dayOfTheYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * return the day of the year (1..366) - */ - function dayOfTheYear(date){ - return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) - - Date.UTC(date.getFullYear(), 0, 1)) / 86400000 + 1; - } - - return dayOfTheYear; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/diff.js b/truebit-implementation/node_modules/mout/src/date/diff.js deleted file mode 100644 index 667165fe..00000000 --- a/truebit-implementation/node_modules/mout/src/date/diff.js +++ /dev/null @@ -1,128 +0,0 @@ -define(['./totalDaysInMonth', './totalDaysInYear', '../time/convert'], function(totalDaysInMonth, totalDaysInYear, convert){ - - /** - * calculate the difference between dates (range) - */ - function diff(start, end, unitName){ - // sort the dates to make it easier to process (specially year/month) - if (start > end) { - var swap = start; - start = end; - end = swap; - } - - var output; - - if (unitName === 'month') { - output = getMonthsDiff(start, end); - } else if (unitName === 'year'){ - output = getYearsDiff(start, end); - } else if (unitName != null) { - if (unitName === 'day') { - // ignore timezone difference because of daylight savings time - start = toUtc(start); - end = toUtc(end); - } - output = convert(end - start, 'ms', unitName); - } else { - output = end - start; - } - - return output; - } - - - function toUtc(d){ - // we ignore timezone differences on purpose because of daylight - // savings time, otherwise it would return fractional days/weeks even - // if a full day elapsed. eg: - // Wed Feb 12 2014 00:00:00 GMT-0200 (BRST) - // Sun Feb 16 2014 00:00:00 GMT-0300 (BRT) - // diff should be 4 days and not 4.041666666666667 - return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), - d.getHours(), d.getMinutes(), d.getSeconds(), - d.getMilliseconds()); - } - - - function getMonthsDiff(start, end){ - return getElapsedMonths(start, end) + - getElapsedYears(start, end) * 12 + - getFractionalMonth(start, end); - } - - - function getYearsDiff(start, end){ - var elapsedYears = getElapsedYears(start, end); - return elapsedYears + getFractionalYear(start, end, elapsedYears); - } - - - function getElapsedMonths(start, end){ - var monthDiff = end.getMonth() - start.getMonth(); - if (monthDiff < 0) { - monthDiff += 12; - } - // less than a full month - if (start.getDate() > end.getDate()) { - monthDiff -= 1; - } - return monthDiff; - } - - - function getElapsedYears(start, end){ - var yearDiff = end.getFullYear() - start.getFullYear(); - // less than a full year - if (start.getMonth() > end.getMonth()) { - yearDiff -= 1; - } - return yearDiff; - } - - - function getFractionalMonth(start, end){ - var fractionalDiff = 0; - var startDay = start.getDate(); - var endDay = end.getDate(); - - if (startDay !== endDay) { - var startTotalDays = totalDaysInMonth(start); - var endTotalDays = totalDaysInMonth(end); - var totalDays; - var daysElapsed; - - if (startDay > endDay) { - // eg: Jan 29 - Feb 27 (29 days elapsed but not a full month) - var baseDay = startTotalDays - startDay; - daysElapsed = endDay + baseDay; - // total days should be relative to 1st day of next month if - // startDay > endTotalDays - totalDays = (startDay > endTotalDays)? - endTotalDays + baseDay + 1 : startDay + baseDay; - } else { - // fractional is only based on endMonth eg: Jan 12 - Feb 18 - // (6 fractional days, 28 days until next full month) - daysElapsed = endDay - startDay; - totalDays = endTotalDays; - } - - fractionalDiff = daysElapsed / totalDays; - } - - return fractionalDiff; - } - - - function getFractionalYear(start, end, elapsedYears){ - var base = elapsedYears? - new Date(end.getFullYear(), start.getMonth(), start.getDate()) : - start; - var elapsedDays = diff(base, end, 'day'); - return elapsedDays / totalDaysInYear(end); - } - - - return diff; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/i18n/de-DE.js b/truebit-implementation/node_modules/mout/src/date/i18n/de-DE.js deleted file mode 100644 index 46f5c6aa..00000000 --- a/truebit-implementation/node_modules/mout/src/date/i18n/de-DE.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // de-DE (German) - return { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Januar", - "Februar", - "März", - "April", - "Mai", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember" - ], - - "months_abbr" : [ - "Jan", - "Febr", - "März", - "Apr", - "Mai", - "Juni", - "Juli", - "Aug", - "Sept", - "Okt", - "Nov", - "Dez" - ], - - "days" : [ - "Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag" - ], - - "days_abbr" : [ - "So", - "Mo", - "Di", - "Mi", - "Do", - "Fr", - "Sa" - ] - }; -}); diff --git a/truebit-implementation/node_modules/mout/src/date/i18n/en-US.js b/truebit-implementation/node_modules/mout/src/date/i18n/en-US.js deleted file mode 100644 index 5e640c22..00000000 --- a/truebit-implementation/node_modules/mout/src/date/i18n/en-US.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // en-US (English, United States) - return { - "am" : "AM", - "pm" : "PM", - - "x": "%m/%d/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %I:%M:%S %p %Z", - - "months" : [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - - "months_abbr" : [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - - "days" : [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" - ], - - "days_abbr" : [ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - ] - }; -}); diff --git a/truebit-implementation/node_modules/mout/src/date/i18n/pt-BR.js b/truebit-implementation/node_modules/mout/src/date/i18n/pt-BR.js deleted file mode 100644 index 47256dd2..00000000 --- a/truebit-implementation/node_modules/mout/src/date/i18n/pt-BR.js +++ /dev/null @@ -1,61 +0,0 @@ -define(function(){ - // pt-BR (Brazillian Portuguese) - return { - "am" : "", - "pm" : "", - - "x": "%d/%m/%y", - "X": "%H:%M:%S", - "c": "%a %d %b %Y %H:%M:%S %Z", - - "months" : [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - - "months_abbr" : [ - "Jan", - "Fev", - "Mar", - "Abr", - "Mai", - "Jun", - "Jul", - "Ago", - "Set", - "Out", - "Nov", - "Dez" - ], - - "days" : [ - "Domingo", - "Segunda", - "Terça", - "Quarta", - "Quinta", - "Sexta", - "Sábado" - ], - - "days_abbr" : [ - "Dom", - "Seg", - "Ter", - "Qua", - "Qui", - "Sex", - "Sáb" - ] - }; -}); diff --git a/truebit-implementation/node_modules/mout/src/date/i18n_.js b/truebit-implementation/node_modules/mout/src/date/i18n_.js deleted file mode 100644 index c04ce885..00000000 --- a/truebit-implementation/node_modules/mout/src/date/i18n_.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../object/mixIn', './i18n/en-US'], function(mixIn, enUS){ - - // we also use mixIn to make sure we don't affect the original locale - var activeLocale = mixIn({}, enUS, { - // we expose a "set" method to allow overriding the global locale - set : function(localeData){ - mixIn(activeLocale, localeData); - } - }); - - return activeLocale; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/isLeapYear.js b/truebit-implementation/node_modules/mout/src/date/isLeapYear.js deleted file mode 100644 index e400b43d..00000000 --- a/truebit-implementation/node_modules/mout/src/date/isLeapYear.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/isDate'], function (isDate) { - - /** - * checks if it's a leap year - */ - function isLeapYear(fullYear){ - if (isDate(fullYear)) { - fullYear = fullYear.getFullYear(); - } - return fullYear % 400 === 0 || (fullYear % 100 !== 0 && fullYear % 4 === 0); - } - - return isLeapYear; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/isSame.js b/truebit-implementation/node_modules/mout/src/date/isSame.js deleted file mode 100644 index f30531fc..00000000 --- a/truebit-implementation/node_modules/mout/src/date/isSame.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./startOf'], function (startOf) { - - /** - * Check if date is "same" with optional period - */ - function isSame(date1, date2, period){ - if (period) { - date1 = startOf(date1, period); - date2 = startOf(date2, period); - } - return Number(date1) === Number(date2); - } - - return isSame; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/parseIso.js b/truebit-implementation/node_modules/mout/src/date/parseIso.js deleted file mode 100644 index b21c8797..00000000 --- a/truebit-implementation/node_modules/mout/src/date/parseIso.js +++ /dev/null @@ -1,146 +0,0 @@ -define(['../array/some'], function (some) { - - var datePatterns = [ - /^([0-9]{4})$/, // YYYY - /^([0-9]{4})-([0-9]{2})$/, // YYYY-MM (YYYYMM not allowed) - /^([0-9]{4})-?([0-9]{2})-?([0-9]{2})$/ // YYYY-MM-DD or YYYYMMDD - ]; - var ORD_DATE = /^([0-9]{4})-?([0-9]{3})$/; // YYYY-DDD - - var timePatterns = [ - /^([0-9]{2}(?:\.[0-9]*)?)$/, // HH.hh - /^([0-9]{2}):?([0-9]{2}(?:\.[0-9]*)?)$/, // HH:MM.mm - /^([0-9]{2}):?([0-9]{2}):?([0-9]{2}(\.[0-9]*)?)$/ // HH:MM:SS.ss - ]; - - var DATE_TIME = /^(.+)T(.+)$/; - var TIME_ZONE = /^(.+)([+\-])([0-9]{2}):?([0-9]{2})$/; - - function matchAll(str, patterns) { - var match; - var found = some(patterns, function(pattern) { - return !!(match = pattern.exec(str)); - }); - - return found ? match : null; - } - - function getDate(year, month, day) { - var date = new Date(Date.UTC(year, month, day)); - - // Explicitly set year to avoid Date.UTC making dates < 100 relative to - // 1900 - date.setUTCFullYear(year); - - var valid = - date.getUTCFullYear() === year && - date.getUTCMonth() === month && - date.getUTCDate() === day; - return valid ? +date : NaN; - } - - function parseOrdinalDate(str) { - var match = ORD_DATE.exec(str); - if (match ) { - var year = +match[1], - day = +match[2], - date = new Date(Date.UTC(year, 0, day)); - - if (date.getUTCFullYear() === year) { - return +date; - } - } - - return NaN; - } - - function parseDate(str) { - var match, year, month, day; - - match = matchAll(str, datePatterns); - if (match === null) { - // Ordinal dates are verified differently. - return parseOrdinalDate(str); - } - - year = (match[1] === void 0) ? 0 : +match[1]; - month = (match[2] === void 0) ? 0 : +match[2] - 1; - day = (match[3] === void 0) ? 1 : +match[3]; - - return getDate(year, month, day); - } - - function getTime(hr, min, sec) { - var valid = - (hr < 24 && hr >= 0 && - min < 60 && min >= 0 && - sec < 60 && min >= 0) || - (hr === 24 && min === 0 && sec === 0); - if (!valid) { - return NaN; - } - - return ((hr * 60 + min) * 60 + sec) * 1000; - } - - function parseOffset(str) { - var match; - if (str.charAt(str.length - 1) === 'Z') { - str = str.substring(0, str.length - 1); - } else { - match = TIME_ZONE.exec(str); - if (match) { - var hours = +match[3], - minutes = (match[4] === void 0) ? 0 : +match[4], - offset = getTime(hours, minutes, 0); - - if (match[2] === '-') { - offset *= -1; - } - - return { offset: offset, time: match[1] }; - } - } - - // No time zone specified, assume UTC - return { offset: 0, time: str }; - } - - function parseTime(str) { - var match; - var offset = parseOffset(str); - - str = offset.time; - offset = offset.offset; - if (isNaN(offset)) { - return NaN; - } - - match = matchAll(str, timePatterns); - if (match === null) { - return NaN; - } - - var hours = (match[1] === void 0) ? 0 : +match[1], - minutes = (match[2] === void 0) ? 0 : +match[2], - seconds = (match[3] === void 0) ? 0 : +match[3]; - - return getTime(hours, minutes, seconds) - offset; - } - - /** - * Parse an ISO8601 formatted date string, and return a Date object. - */ - function parseISO8601(str){ - var match = DATE_TIME.exec(str); - if (!match) { - // No time specified - return parseDate(str); - } - - return parseDate(match[1]) + parseTime(match[2]); - } - - return parseISO8601; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/quarter.js b/truebit-implementation/node_modules/mout/src/date/quarter.js deleted file mode 100644 index 62b92067..00000000 --- a/truebit-implementation/node_modules/mout/src/date/quarter.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function () { - - /** - * gets date quarter - */ - function quarter(date){ - var month = date.getMonth(); - if (month < 3) return 1; - if (month < 6) return 2; - if (month < 9) return 3; - return 4; - } - - return quarter; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/startOf.js b/truebit-implementation/node_modules/mout/src/date/startOf.js deleted file mode 100644 index 747f114d..00000000 --- a/truebit-implementation/node_modules/mout/src/date/startOf.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['../lang/clone'], function (clone) { - - /** - * get a new Date object representing start of period - */ - function startOf(date, period){ - date = clone(date); - - // intentionally removed "break" from switch since start of - // month/year/etc should also reset the following periods - switch (period) { - case 'year': - date.setMonth(0); - /* falls through */ - case 'month': - date.setDate(1); - /* falls through */ - case 'week': - case 'day': - date.setHours(0); - /* falls through */ - case 'hour': - date.setMinutes(0); - /* falls through */ - case 'minute': - date.setSeconds(0); - /* falls through */ - case 'second': - date.setMilliseconds(0); - break; - default: - throw new Error('"'+ period +'" is not a valid period'); - } - - // week is the only case that should reset the weekDay and maybe even - // overflow to previous month - if (period === 'week') { - var weekDay = date.getDay(); - var baseDate = date.getDate(); - if (weekDay) { - if (weekDay >= baseDate) { - //start of the week is on previous month - date.setDate(0); - } - date.setDate(date.getDate() - date.getDay()); - } - } - - return date; - } - - return startOf; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/strftime.js b/truebit-implementation/node_modules/mout/src/date/strftime.js deleted file mode 100644 index 9c09c693..00000000 --- a/truebit-implementation/node_modules/mout/src/date/strftime.js +++ /dev/null @@ -1,115 +0,0 @@ -define(['../number/pad', '../string/lpad', './i18n_', './dayOfTheYear', './timezoneOffset', './timezoneAbbr', './weekOfTheYear'], function (pad, lpad, i18n, dayOfTheYear, timezoneOffset, timezoneAbbr, weekOfTheYear) { - - var _combinations = { - 'D': '%m/%d/%y', - 'F': '%Y-%m-%d', - 'r': '%I:%M:%S %p', - 'R': '%H:%M', - 'T': '%H:%M:%S', - 'x': 'locale', - 'X': 'locale', - 'c': 'locale' - }; - - - /** - * format date based on strftime format - */ - function strftime(date, format, localeData){ - localeData = localeData || i18n; - var reToken = /%([a-z%])/gi; - - function makeIterator(fn) { - return function(match, token){ - return fn(date, token, localeData); - }; - } - - return format - .replace(reToken, makeIterator(expandCombinations)) - .replace(reToken, makeIterator(convertToken)); - } - - - function expandCombinations(date, token, l10n){ - if (token in _combinations) { - var expanded = _combinations[token]; - return expanded === 'locale'? l10n[token] : expanded; - } else { - return '%'+ token; - } - } - - - function convertToken(date, token, l10n){ - switch (token){ - case 'a': - return l10n.days_abbr[date.getDay()]; - case 'A': - return l10n.days[date.getDay()]; - case 'h': - case 'b': - return l10n.months_abbr[date.getMonth()]; - case 'B': - return l10n.months[date.getMonth()]; - case 'C': - return pad(Math.floor(date.getFullYear() / 100), 2); - case 'd': - return pad(date.getDate(), 2); - case 'e': - return pad(date.getDate(), 2, ' '); - case 'H': - return pad(date.getHours(), 2); - case 'I': - return pad(date.getHours() % 12, 2); - case 'j': - return pad(dayOfTheYear(date), 3); - case 'l': - return lpad(date.getHours() % 12, 2); - case 'L': - return pad(date.getMilliseconds(), 3); - case 'm': - return pad(date.getMonth() + 1, 2); - case 'M': - return pad(date.getMinutes(), 2); - case 'n': - return '\n'; - case 'p': - return date.getHours() >= 12? l10n.pm : l10n.am; - case 'P': - return convertToken(date, 'p', l10n).toLowerCase(); - case 's': - return date.getTime() / 1000; - case 'S': - return pad(date.getSeconds(), 2); - case 't': - return '\t'; - case 'u': - var day = date.getDay(); - return day === 0? 7 : day; - case 'U': - return pad(weekOfTheYear(date), 2); - case 'w': - return date.getDay(); - case 'W': - return pad(weekOfTheYear(date, 1), 2); - case 'y': - return pad(date.getFullYear() % 100, 2); - case 'Y': - return pad(date.getFullYear(), 4); - case 'z': - return timezoneOffset(date); - case 'Z': - return timezoneAbbr(date); - case '%': - return '%'; - default: - // keep unrecognized tokens - return '%'+ token; - } - } - - - return strftime; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/timezoneAbbr.js b/truebit-implementation/node_modules/mout/src/date/timezoneAbbr.js deleted file mode 100644 index 225a6856..00000000 --- a/truebit-implementation/node_modules/mout/src/date/timezoneAbbr.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./timezoneOffset'], function(timezoneOffset) { - - /** - * Abbreviated time zone name or similar information. - */ - function timezoneAbbr(date){ - // Date.toString gives different results depending on the - // browser/system so we fallback to timezone offset - // chrome: 'Mon Apr 08 2013 09:02:04 GMT-0300 (BRT)' - // IE: 'Mon Apr 8 09:02:04 UTC-0300 2013' - var tz = /\(([A-Z]{3,4})\)/.exec(date.toString()); - return tz? tz[1] : timezoneOffset(date); - } - - return timezoneAbbr; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/timezoneOffset.js b/truebit-implementation/node_modules/mout/src/date/timezoneOffset.js deleted file mode 100644 index ca06705d..00000000 --- a/truebit-implementation/node_modules/mout/src/date/timezoneOffset.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/pad'], function (pad) { - - /** - * time zone as hour and minute offset from UTC (e.g. +0900) - */ - function timezoneOffset(date){ - var offset = date.getTimezoneOffset(); - var abs = Math.abs(offset); - var h = pad(Math.floor(abs / 60), 2); - var m = pad(abs % 60, 2); - return (offset > 0? '-' : '+') + h + m; - } - - return timezoneOffset; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/totalDaysInMonth.js b/truebit-implementation/node_modules/mout/src/date/totalDaysInMonth.js deleted file mode 100644 index 9aaafd7b..00000000 --- a/truebit-implementation/node_modules/mout/src/date/totalDaysInMonth.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['../lang/isDate', './isLeapYear'], function (isDate, isLeapYear) { - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - - /** - * returns the total amount of days in the month (considering leap years) - */ - function totalDaysInMonth(fullYear, monthIndex){ - if (isDate(fullYear)) { - monthIndex = fullYear.getMonth(); - } - - if (monthIndex === 1 && isLeapYear(fullYear)) { - return 29; - } else { - return DAYS_IN_MONTH[monthIndex]; - } - } - - return totalDaysInMonth; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/totalDaysInYear.js b/truebit-implementation/node_modules/mout/src/date/totalDaysInYear.js deleted file mode 100644 index e9036b42..00000000 --- a/truebit-implementation/node_modules/mout/src/date/totalDaysInYear.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./isLeapYear'], function (isLeapYear) { - - /** - * return the amount of days in the year following the gregorian calendar - * and leap years - */ - function totalDaysInYear(fullYear){ - return isLeapYear(fullYear)? 366 : 365; - } - - return totalDaysInYear; - -}); diff --git a/truebit-implementation/node_modules/mout/src/date/weekOfTheYear.js b/truebit-implementation/node_modules/mout/src/date/weekOfTheYear.js deleted file mode 100644 index 8dabc458..00000000 --- a/truebit-implementation/node_modules/mout/src/date/weekOfTheYear.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./dayOfTheYear'], function (dayOfTheYear) { - - /** - * Return the week of the year based on given firstDayOfWeek - */ - function weekOfTheYear(date, firstDayOfWeek){ - firstDayOfWeek = firstDayOfWeek == null? 0 : firstDayOfWeek; - var doy = dayOfTheYear(date); - var dow = (7 + date.getDay() - firstDayOfWeek) % 7; - var relativeWeekDay = 6 - firstDayOfWeek - dow; - return Math.floor((doy + relativeWeekDay) / 7); - } - - return weekOfTheYear; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function.js b/truebit-implementation/node_modules/mout/src/function.js deleted file mode 100644 index 077a9242..00000000 --- a/truebit-implementation/node_modules/mout/src/function.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'awaitDelay' : require('./function/awaitDelay'), - 'bind' : require('./function/bind'), - 'compose' : require('./function/compose'), - 'constant' : require('./function/constant'), - 'debounce' : require('./function/debounce'), - 'func' : require('./function/func'), - 'identity' : require('./function/identity'), - 'makeIterator_' : require('./function/makeIterator_'), - 'partial' : require('./function/partial'), - 'prop' : require('./function/prop'), - 'series' : require('./function/series'), - 'throttle' : require('./function/throttle'), - 'timeout' : require('./function/timeout'), - 'times' : require('./function/times'), - 'wrap' : require('./function/wrap') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/awaitDelay.js b/truebit-implementation/node_modules/mout/src/function/awaitDelay.js deleted file mode 100644 index 88bea6ed..00000000 --- a/truebit-implementation/node_modules/mout/src/function/awaitDelay.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../time/now', './timeout', '../array/append'], function (now, timeout, append) { - - /** - * Ensure a minimum delay for callbacks - */ - function awaitDelay( callback, delay ){ - var baseTime = now() + delay; - return function() { - // ensure all browsers will execute it asynchronously (avoid hard - // to catch errors) not using "0" because of old browsers and also - // since new browsers increase the value to be at least "4" - // http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout - var ms = Math.max(baseTime - now(), 4); - return timeout.apply(this, append([callback, ms, this], arguments)); - }; - } - - return awaitDelay; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/bind.js b/truebit-implementation/node_modules/mout/src/function/bind.js deleted file mode 100644 index 787c2984..00000000 --- a/truebit-implementation/node_modules/mout/src/function/bind.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/slice'], function(slice){ - - /** - * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection. - * @param {Function} fn Function. - * @param {object} context Execution context. - * @param {rest} args Arguments (0...n arguments). - * @return {Function} Wrapped Function. - */ - function bind(fn, context, args){ - var argsArr = slice(arguments, 2); //curried args - return function(){ - return fn.apply(context, argsArr.concat(slice(arguments))); - }; - } - - return bind; -}); - diff --git a/truebit-implementation/node_modules/mout/src/function/compose.js b/truebit-implementation/node_modules/mout/src/function/compose.js deleted file mode 100644 index d8b228fa..00000000 --- a/truebit-implementation/node_modules/mout/src/function/compose.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Returns a function that composes multiple functions, passing results to - * each other. - */ - function compose() { - var fns = arguments; - return function(arg){ - // only cares about the first argument since the chain can only - // deal with a single return value anyway. It should start from - // the last fn. - var n = fns.length; - while (n--) { - arg = fns[n].call(this, arg); - } - return arg; - }; - } - - return compose; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/constant.js b/truebit-implementation/node_modules/mout/src/function/constant.js deleted file mode 100644 index addd412c..00000000 --- a/truebit-implementation/node_modules/mout/src/function/constant.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a new function that will return the value - */ - function constant(value){ - return function() { - return value; - }; - } - - return constant; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/debounce.js b/truebit-implementation/node_modules/mout/src/function/debounce.js deleted file mode 100644 index 8c5fd47f..00000000 --- a/truebit-implementation/node_modules/mout/src/function/debounce.js +++ /dev/null @@ -1,32 +0,0 @@ -define(function () { - - /** - * Debounce callback execution - */ - function debounce(fn, threshold, isAsap){ - var timeout, result; - function debounced(){ - var args = arguments, context = this; - function delayed(){ - if (! isAsap) { - result = fn.apply(context, args); - } - timeout = null; - } - if (timeout) { - clearTimeout(timeout); - } else if (isAsap) { - result = fn.apply(context, args); - } - timeout = setTimeout(delayed, threshold); - return result; - } - debounced.cancel = function(){ - clearTimeout(timeout); - }; - return debounced; - } - - return debounce; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/func.js b/truebit-implementation/node_modules/mout/src/function/func.js deleted file mode 100644 index b920e00e..00000000 --- a/truebit-implementation/node_modules/mout/src/function/func.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that call a method on the passed object - */ - function func(name){ - return function(obj){ - return obj[name](); - }; - } - - return func; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/identity.js b/truebit-implementation/node_modules/mout/src/function/identity.js deleted file mode 100644 index 59f7182c..00000000 --- a/truebit-implementation/node_modules/mout/src/function/identity.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Returns the first argument provided to it. - */ - function identity(val){ - return val; - } - - return identity; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/makeIterator_.js b/truebit-implementation/node_modules/mout/src/function/makeIterator_.js deleted file mode 100644 index 771ea199..00000000 --- a/truebit-implementation/node_modules/mout/src/function/makeIterator_.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['./identity', './prop', '../object/deepMatches'], function(identity, prop, deepMatches) { - - /** - * Converts argument into a valid iterator. - * Used internally on most array/object/collection methods that receives a - * callback/iterator providing a shortcut syntax. - */ - function makeIterator(src, thisObj){ - if (src == null) { - return identity; - } - switch(typeof src) { - case 'function': - // function is the first to improve perf (most common case) - // also avoid using `Function#call` if not needed, which boosts - // perf a lot in some cases - return (typeof thisObj !== 'undefined')? function(val, i, arr){ - return src.call(thisObj, val, i, arr); - } : src; - case 'object': - return function(val){ - return deepMatches(val, src); - }; - case 'string': - case 'number': - return prop(src); - } - } - - return makeIterator; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/partial.js b/truebit-implementation/node_modules/mout/src/function/partial.js deleted file mode 100644 index 7a6a4940..00000000 --- a/truebit-implementation/node_modules/mout/src/function/partial.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../array/slice'], function (slice) { - - /** - * Creates a partially applied function. - */ - function partial(f) { - var as = slice(arguments, 1); - return function() { - var args = as.concat(slice(arguments)); - for (var i = args.length; i--;) { - if (args[i] === partial._) { - args[i] = args.splice(-1)[0]; - } - } - return f.apply(this, args); - }; - } - - partial._ = {}; - - return partial; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/prop.js b/truebit-implementation/node_modules/mout/src/function/prop.js deleted file mode 100644 index c9df78ca..00000000 --- a/truebit-implementation/node_modules/mout/src/function/prop.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * Returns a function that gets a property of the passed object - */ - function prop(name){ - return function(obj){ - return obj[name]; - }; - } - - return prop; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/series.js b/truebit-implementation/node_modules/mout/src/function/series.js deleted file mode 100644 index c8856a27..00000000 --- a/truebit-implementation/node_modules/mout/src/function/series.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function () { - - /** - * Returns a function that will execute a list of functions in sequence - * passing the same arguments to each one. (useful for batch processing - * items during a forEach loop) - */ - function series(){ - var fns = arguments; - return function(){ - var i = 0, - n = fns.length; - while (i < n) { - fns[i].apply(this, arguments); - i += 1; - } - }; - } - - return series; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/throttle.js b/truebit-implementation/node_modules/mout/src/function/throttle.js deleted file mode 100644 index 9fb47b22..00000000 --- a/truebit-implementation/node_modules/mout/src/function/throttle.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['../time/now'], function (now) { - - /** - */ - function throttle(fn, delay){ - var context, timeout, result, args, - diff, prevCall = 0; - function delayed(){ - prevCall = now(); - timeout = null; - result = fn.apply(context, args); - } - function throttled(){ - context = this; - args = arguments; - diff = delay - (now() - prevCall); - if (diff <= 0) { - clearTimeout(timeout); - delayed(); - } else if (! timeout) { - timeout = setTimeout(delayed, diff); - } - return result; - } - throttled.cancel = function(){ - clearTimeout(timeout); - }; - return throttled; - } - - return throttle; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/timeout.js b/truebit-implementation/node_modules/mout/src/function/timeout.js deleted file mode 100644 index 61b832c5..00000000 --- a/truebit-implementation/node_modules/mout/src/function/timeout.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['../array/slice'], function (slice) { - - /** - * Delays the call of a function within a given context. - */ - function timeout(fn, millis, context){ - - var args = slice(arguments, 3); - - return setTimeout(function() { - fn.apply(context, args); - }, millis); - } - - return timeout; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/times.js b/truebit-implementation/node_modules/mout/src/function/times.js deleted file mode 100644 index ec10caeb..00000000 --- a/truebit-implementation/node_modules/mout/src/function/times.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function () { - - /** - * Iterates over a callback a set amount of times - */ - function times(n, callback, thisObj){ - var i = -1; - while (++i < n) { - if ( callback.call(thisObj, i) === false ) { - break; - } - } - } - - return times; - -}); diff --git a/truebit-implementation/node_modules/mout/src/function/wrap.js b/truebit-implementation/node_modules/mout/src/function/wrap.js deleted file mode 100644 index b2f54dd6..00000000 --- a/truebit-implementation/node_modules/mout/src/function/wrap.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./partial'], function (partial) { - - /** - * Returns the first function passed as an argument to the second, - * allowing you to adjust arguments, run code before and after, and - * conditionally execute the original function. - */ - function wrap(fn, wrapper){ - return partial(wrapper, fn); - } - - return wrap; - -}); diff --git a/truebit-implementation/node_modules/mout/src/index.js b/truebit-implementation/node_modules/mout/src/index.js deleted file mode 100644 index 40cd88e3..00000000 --- a/truebit-implementation/node_modules/mout/src/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/**@license - * mout v0.11.1 | http://moutjs.com | MIT license - */ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'VERSION' : '0.11.1', - 'array' : require('./array'), - 'collection' : require('./collection'), - 'date' : require('./date'), - 'function' : require('./function'), - 'lang' : require('./lang'), - 'math' : require('./math'), - 'number' : require('./number'), - 'object' : require('./object'), - 'queryString' : require('./queryString'), - 'random' : require('./random'), - 'string' : require('./string'), - 'time' : require('./time'), - 'fn' : require('./function') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang.js b/truebit-implementation/node_modules/mout/src/lang.js deleted file mode 100644 index df713a55..00000000 --- a/truebit-implementation/node_modules/mout/src/lang.js +++ /dev/null @@ -1,40 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'GLOBAL' : require('./lang/GLOBAL'), - 'clone' : require('./lang/clone'), - 'createObject' : require('./lang/createObject'), - 'ctorApply' : require('./lang/ctorApply'), - 'deepClone' : require('./lang/deepClone'), - 'deepEquals' : require('./lang/deepEquals'), - 'defaults' : require('./lang/defaults'), - 'inheritPrototype' : require('./lang/inheritPrototype'), - 'is' : require('./lang/is'), - 'isArguments' : require('./lang/isArguments'), - 'isArray' : require('./lang/isArray'), - 'isBoolean' : require('./lang/isBoolean'), - 'isDate' : require('./lang/isDate'), - 'isEmpty' : require('./lang/isEmpty'), - 'isFinite' : require('./lang/isFinite'), - 'isFunction' : require('./lang/isFunction'), - 'isInteger' : require('./lang/isInteger'), - 'isKind' : require('./lang/isKind'), - 'isNaN' : require('./lang/isNaN'), - 'isNull' : require('./lang/isNull'), - 'isNumber' : require('./lang/isNumber'), - 'isObject' : require('./lang/isObject'), - 'isPlainObject' : require('./lang/isPlainObject'), - 'isPrimitive' : require('./lang/isPrimitive'), - 'isRegExp' : require('./lang/isRegExp'), - 'isString' : require('./lang/isString'), - 'isUndefined' : require('./lang/isUndefined'), - 'isnt' : require('./lang/isnt'), - 'kindOf' : require('./lang/kindOf'), - 'toArray' : require('./lang/toArray'), - 'toNumber' : require('./lang/toNumber'), - 'toString' : require('./lang/toString') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/GLOBAL.js b/truebit-implementation/node_modules/mout/src/lang/GLOBAL.js deleted file mode 100644 index dcd4a42a..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/GLOBAL.js +++ /dev/null @@ -1,7 +0,0 @@ -define(function () { - - // Reference to the global context (works on ES3 and ES5-strict mode) - //jshint -W061, -W064 - return Function('return this')(); - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/clone.js b/truebit-implementation/node_modules/mout/src/lang/clone.js deleted file mode 100644 index d3429fdc..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/clone.js +++ /dev/null @@ -1,47 +0,0 @@ -define(['./kindOf', './isPlainObject', '../object/mixIn'], function (kindOf, isPlainObject, mixIn) { - - /** - * Clone native types. - */ - function clone(val){ - switch (kindOf(val)) { - case 'Object': - return cloneObject(val); - case 'Array': - return cloneArray(val); - case 'RegExp': - return cloneRegExp(val); - case 'Date': - return cloneDate(val); - default: - return val; - } - } - - function cloneObject(source) { - if (isPlainObject(source)) { - return mixIn({}, source); - } else { - return source; - } - } - - function cloneRegExp(r) { - var flags = ''; - flags += r.multiline ? 'm' : ''; - flags += r.global ? 'g' : ''; - flags += r.ignoreCase ? 'i' : ''; - return new RegExp(r.source, flags); - } - - function cloneDate(date) { - return new Date(+date); - } - - function cloneArray(arr) { - return arr.slice(); - } - - return clone; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/createObject.js b/truebit-implementation/node_modules/mout/src/lang/createObject.js deleted file mode 100644 index f7661500..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/createObject.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../object/mixIn'], function(mixIn){ - - /** - * Create Object using prototypal inheritance and setting custom properties. - * - Mix between Douglas Crockford Prototypal Inheritance and the EcmaScript 5 `Object.create()` method. - * @param {object} parent Parent Object. - * @param {object} [props] Object properties. - * @return {object} Created object. - */ - function createObject(parent, props){ - function F(){} - F.prototype = parent; - return mixIn(new F(), props); - - } - return createObject; -}); - diff --git a/truebit-implementation/node_modules/mout/src/lang/ctorApply.js b/truebit-implementation/node_modules/mout/src/lang/ctorApply.js deleted file mode 100644 index a9ac1c54..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/ctorApply.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function () { - - function F(){} - - /** - * Do fn.apply on a constructor. - */ - function ctorApply(ctor, args) { - F.prototype = ctor.prototype; - var instance = new F(); - ctor.apply(instance, args); - return instance; - } - - return ctorApply; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/deepClone.js b/truebit-implementation/node_modules/mout/src/lang/deepClone.js deleted file mode 100644 index d45c10aa..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/deepClone.js +++ /dev/null @@ -1,45 +0,0 @@ -define(['./clone', '../object/forOwn', './kindOf', './isPlainObject'], function (clone, forOwn, kindOf, isPlainObject) { - - /** - * Recursively clone native types. - */ - function deepClone(val, instanceClone) { - switch ( kindOf(val) ) { - case 'Object': - return cloneObject(val, instanceClone); - case 'Array': - return cloneArray(val, instanceClone); - default: - return clone(val); - } - } - - function cloneObject(source, instanceClone) { - if (isPlainObject(source)) { - var out = {}; - forOwn(source, function(val, key) { - this[key] = deepClone(val, instanceClone); - }, out); - return out; - } else if (instanceClone) { - return instanceClone(source); - } else { - return source; - } - } - - function cloneArray(arr, instanceClone) { - var out = [], - i = -1, - n = arr.length, - val; - while (++i < n) { - out[i] = deepClone(arr[i], instanceClone); - } - return out; - } - - return deepClone; - -}); - diff --git a/truebit-implementation/node_modules/mout/src/lang/deepEquals.js b/truebit-implementation/node_modules/mout/src/lang/deepEquals.js deleted file mode 100644 index f4eda1a3..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/deepEquals.js +++ /dev/null @@ -1,26 +0,0 @@ -define(['./is', './isObject', './isArray', '../object/equals', '../array/equals'], function (is, isObject, isArray, objEquals, arrEquals) { - - /** - * Recursively checks for same properties and values. - */ - function deepEquals(a, b, callback){ - callback = callback || is; - - var bothObjects = isObject(a) && isObject(b); - var bothArrays = !bothObjects && isArray(a) && isArray(b); - - if (!bothObjects && !bothArrays) { - return callback(a, b); - } - - function compare(a, b){ - return deepEquals(a, b, callback); - } - - var method = bothObjects ? objEquals : arrEquals; - return method(a, b, compare); - } - - return deepEquals; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/defaults.js b/truebit-implementation/node_modules/mout/src/lang/defaults.js deleted file mode 100644 index 5156b1bb..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/defaults.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./toArray', '../array/find'], function (toArray, find) { - - /** - * Return first non void argument - */ - function defaults(var_args){ - return find(toArray(arguments), nonVoid); - } - - function nonVoid(val){ - return val != null; - } - - return defaults; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/inheritPrototype.js b/truebit-implementation/node_modules/mout/src/lang/inheritPrototype.js deleted file mode 100644 index 64c91780..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/inheritPrototype.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./createObject'], function(createObject){ - - /** - * Inherit prototype from another Object. - * - inspired by Nicholas Zackas Solution - * @param {object} child Child object - * @param {object} parent Parent Object - */ - function inheritPrototype(child, parent){ - var p = createObject(parent.prototype); - p.constructor = child; - child.prototype = p; - child.super_ = parent; - return p; - } - - return inheritPrototype; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/is.js b/truebit-implementation/node_modules/mout/src/lang/is.js deleted file mode 100644 index 261a2077..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/is.js +++ /dev/null @@ -1,23 +0,0 @@ -define(function () { - - /** - * Check if both arguments are egal. - */ - function is(x, y){ - // implementation borrowed from harmony:egal spec - if (x === y) { - // 0 === -0, but they are not identical - return x !== 0 || 1 / x === 1 / y; - } - - // NaN !== NaN, but they are identical. - // NaNs are the only non-reflexive value, i.e., if x !== x, - // then x is a NaN. - // isNaN is broken: it converts its argument to number, so - // isNaN("foo") => true - return x !== x && y !== y; - } - - return is; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isArguments.js b/truebit-implementation/node_modules/mout/src/lang/isArguments.js deleted file mode 100644 index f889ee8e..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isArguments.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isKind'], function (isKind) { - - /** - */ - var isArgs = isKind(arguments, 'Arguments')? - function(val){ - return isKind(val, 'Arguments'); - } : - function(val){ - // Arguments is an Object on IE7 - return !!(val && Object.prototype.hasOwnProperty.call(val, 'callee')); - }; - - return isArgs; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isArray.js b/truebit-implementation/node_modules/mout/src/lang/isArray.js deleted file mode 100644 index 886e2aa5..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isArray.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - var isArray = Array.isArray || function (val) { - return isKind(val, 'Array'); - }; - return isArray; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isBoolean.js b/truebit-implementation/node_modules/mout/src/lang/isBoolean.js deleted file mode 100644 index 1ca27a69..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isBoolean.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isBoolean(val) { - return isKind(val, 'Boolean'); - } - return isBoolean; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isDate.js b/truebit-implementation/node_modules/mout/src/lang/isDate.js deleted file mode 100644 index 2708d676..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isDate.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isDate(val) { - return isKind(val, 'Date'); - } - return isDate; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isEmpty.js b/truebit-implementation/node_modules/mout/src/lang/isEmpty.js deleted file mode 100644 index 8b677506..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isEmpty.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../object/forOwn', './isArray'], function (forOwn, isArray) { - - function isEmpty(val){ - if (val == null) { - // typeof null == 'object' so we check it first - return true; - } else if ( typeof val === 'string' || isArray(val) ) { - return !val.length; - } else if ( typeof val === 'object' ) { - var result = true; - forOwn(val, function(){ - result = false; - return false; // break loop - }); - return result; - } else { - return true; - } - } - - return isEmpty; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isFinite.js b/truebit-implementation/node_modules/mout/src/lang/isFinite.js deleted file mode 100644 index 05c29ac1..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isFinite.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./isNumber', './GLOBAL'], function (isNumber, GLOBAL) { - - /** - * Check if value is finite - */ - function isFinite(val){ - var is = false; - if (typeof val === 'string' && val !== '') { - is = GLOBAL.isFinite( parseFloat(val) ); - } else if (isNumber(val)){ - // need to use isNumber because of Number constructor - is = GLOBAL.isFinite( val ); - } - return is; - } - - return isFinite; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isFunction.js b/truebit-implementation/node_modules/mout/src/lang/isFunction.js deleted file mode 100644 index ff5df7f0..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isFunction.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isFunction(val) { - return isKind(val, 'Function'); - } - return isFunction; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isInteger.js b/truebit-implementation/node_modules/mout/src/lang/isInteger.js deleted file mode 100644 index 1931f516..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isInteger.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./isNumber'], function (isNumber) { - - /** - * Check if value is an integer - */ - function isInteger(val){ - return isNumber(val) && (val % 1 === 0); - } - - return isInteger; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isKind.js b/truebit-implementation/node_modules/mout/src/lang/isKind.js deleted file mode 100644 index 6937a12f..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isKind.js +++ /dev/null @@ -1,9 +0,0 @@ -define(['./kindOf'], function (kindOf) { - /** - * Check if value is from a specific "kind". - */ - function isKind(val, kind){ - return kindOf(val) === kind; - } - return isKind; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isNaN.js b/truebit-implementation/node_modules/mout/src/lang/isNaN.js deleted file mode 100644 index 2219404d..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isNaN.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./isNumber', '../number/isNaN'], function (isNumber, $isNaN) { - - /** - * Check if value is NaN for realz - */ - function isNaN(val){ - // based on the fact that NaN !== NaN - // need to check if it's a number to avoid conflicts with host objects - // also need to coerce ToNumber to avoid edge case `new Number(NaN)` - return !isNumber(val) || $isNaN(Number(val)); - } - - return isNaN; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isNull.js b/truebit-implementation/node_modules/mout/src/lang/isNull.js deleted file mode 100644 index 506e05ea..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isNull.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function () { - /** - */ - function isNull(val){ - return val === null; - } - return isNull; -}); - diff --git a/truebit-implementation/node_modules/mout/src/lang/isNumber.js b/truebit-implementation/node_modules/mout/src/lang/isNumber.js deleted file mode 100644 index 9a832c5f..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isNumber.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isNumber(val) { - return isKind(val, 'Number'); - } - return isNumber; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isObject.js b/truebit-implementation/node_modules/mout/src/lang/isObject.js deleted file mode 100644 index 0befb063..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isObject.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isObject(val) { - return isKind(val, 'Object'); - } - return isObject; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isPlainObject.js b/truebit-implementation/node_modules/mout/src/lang/isPlainObject.js deleted file mode 100644 index 406a2797..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isPlainObject.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Checks if the value is created by the `Object` constructor. - */ - function isPlainObject(value) { - return (!!value && typeof value === 'object' && - value.constructor === Object); - } - - return isPlainObject; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isPrimitive.js b/truebit-implementation/node_modules/mout/src/lang/isPrimitive.js deleted file mode 100644 index c4035ea4..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isPrimitive.js +++ /dev/null @@ -1,21 +0,0 @@ -define(function() { - - /** - * Checks if the object is a primitive - */ - function isPrimitive(value) { - // Using switch fallthrough because it's simple to read and is - // generally fast: http://jsperf.com/testing-value-is-primitive/5 - switch (typeof value) { - case "string": - case "number": - case "boolean": - return true; - } - - return value == null; - } - - return isPrimitive; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isRegExp.js b/truebit-implementation/node_modules/mout/src/lang/isRegExp.js deleted file mode 100644 index d78a03da..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isRegExp.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isRegExp(val) { - return isKind(val, 'RegExp'); - } - return isRegExp; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isString.js b/truebit-implementation/node_modules/mout/src/lang/isString.js deleted file mode 100644 index 8a42fe01..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isString.js +++ /dev/null @@ -1,8 +0,0 @@ -define(['./isKind'], function (isKind) { - /** - */ - function isString(val) { - return isKind(val, 'String'); - } - return isString; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isUndefined.js b/truebit-implementation/node_modules/mout/src/lang/isUndefined.js deleted file mode 100644 index c57b28eb..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isUndefined.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function () { - var UNDEF; - - /** - */ - function isUndef(val){ - return val === UNDEF; - } - return isUndef; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/isnt.js b/truebit-implementation/node_modules/mout/src/lang/isnt.js deleted file mode 100644 index d4336222..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/isnt.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./is'], function (is) { - - /** - * Check if both values are not identical/egal - */ - function isnt(x, y){ - return !is(x, y); - } - - return isnt; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/kindOf.js b/truebit-implementation/node_modules/mout/src/lang/kindOf.js deleted file mode 100644 index 97d21d15..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/kindOf.js +++ /dev/null @@ -1,20 +0,0 @@ -define(function () { - - var _rKind = /^\[object (.*)\]$/, - _toString = Object.prototype.toString, - UNDEF; - - /** - * Gets the "kind" of value. (e.g. "String", "Number", etc) - */ - function kindOf(val) { - if (val === null) { - return 'Null'; - } else if (val === UNDEF) { - return 'Undefined'; - } else { - return _rKind.exec( _toString.call(val) )[1]; - } - } - return kindOf; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/toArray.js b/truebit-implementation/node_modules/mout/src/lang/toArray.js deleted file mode 100644 index ad04d073..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/toArray.js +++ /dev/null @@ -1,29 +0,0 @@ -define(['./kindOf', './GLOBAL'], function (kindOf, GLOBAL) { - - /** - * Convert array-like object into array - */ - function toArray(val){ - var ret = [], - kind = kindOf(val), - n; - - if (val != null) { - if ( val.length == null || kind === 'String' || kind === 'Function' || kind === 'RegExp' || val === GLOBAL ) { - //string, regexp, function have .length but user probably just want - //to wrap value into an array.. - ret[ret.length] = val; - } else { - //window returns true on isObject in IE7 and may have length - //property. `typeof NodeList` returns `function` on Safari so - //we can't use it (#58) - n = val.length; - while (n--) { - ret[n] = val[n]; - } - } - } - return ret; - } - return toArray; -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/toNumber.js b/truebit-implementation/node_modules/mout/src/lang/toNumber.js deleted file mode 100644 index 39767386..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/toNumber.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./isArray'], function (isArray) { - - /** - * covert value into number if numeric - */ - function toNumber(val){ - // numberic values should come first because of -0 - if (typeof val === 'number') return val; - // we want all falsy values (besides -0) to return zero to avoid - // headaches - if (!val) return 0; - if (typeof val === 'string') return parseFloat(val); - // arrays are edge cases. `Number([4]) === 4` - if (isArray(val)) return NaN; - return Number(val); - } - - return toNumber; - -}); diff --git a/truebit-implementation/node_modules/mout/src/lang/toString.js b/truebit-implementation/node_modules/mout/src/lang/toString.js deleted file mode 100644 index c28b89af..00000000 --- a/truebit-implementation/node_modules/mout/src/lang/toString.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Typecast a value to a String, using an empty string value for null or - * undefined. - */ - function toString(val){ - return val == null ? '' : val.toString(); - } - - return toString; - -}); diff --git a/truebit-implementation/node_modules/mout/src/math.js b/truebit-implementation/node_modules/mout/src/math.js deleted file mode 100644 index e2ba8705..00000000 --- a/truebit-implementation/node_modules/mout/src/math.js +++ /dev/null @@ -1,19 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'ceil' : require('./math/ceil'), - 'clamp' : require('./math/clamp'), - 'countSteps' : require('./math/countSteps'), - 'floor' : require('./math/floor'), - 'inRange' : require('./math/inRange'), - 'isNear' : require('./math/isNear'), - 'lerp' : require('./math/lerp'), - 'loop' : require('./math/loop'), - 'map' : require('./math/map'), - 'norm' : require('./math/norm'), - 'round' : require('./math/round') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/math/ceil.js b/truebit-implementation/node_modules/mout/src/math/ceil.js deleted file mode 100644 index d73b0581..00000000 --- a/truebit-implementation/node_modules/mout/src/math/ceil.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Round value up with a custom radix. - */ - function ceil(val, step){ - step = Math.abs(step || 1); - return Math.ceil(val / step) * step; - } - - return ceil; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/clamp.js b/truebit-implementation/node_modules/mout/src/math/clamp.js deleted file mode 100644 index fb5a1484..00000000 --- a/truebit-implementation/node_modules/mout/src/math/clamp.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Clamps value inside range. - */ - function clamp(val, min, max){ - return val < min? min : (val > max? max : val); - } - return clamp; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/countSteps.js b/truebit-implementation/node_modules/mout/src/math/countSteps.js deleted file mode 100644 index 0ecb32f6..00000000 --- a/truebit-implementation/node_modules/mout/src/math/countSteps.js +++ /dev/null @@ -1,16 +0,0 @@ -define(function(){ - /** - * Count number of full steps. - */ - function countSteps(val, step, overflow){ - val = Math.floor(val / step); - - if (overflow) { - return val % overflow; - } - - return val; - } - - return countSteps; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/floor.js b/truebit-implementation/node_modules/mout/src/math/floor.js deleted file mode 100644 index 8a4456b6..00000000 --- a/truebit-implementation/node_modules/mout/src/math/floor.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Floor value to full steps. - */ - function floor(val, step){ - step = Math.abs(step || 1); - return Math.floor(val / step) * step; - } - return floor; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/inRange.js b/truebit-implementation/node_modules/mout/src/math/inRange.js deleted file mode 100644 index 0c890536..00000000 --- a/truebit-implementation/node_modules/mout/src/math/inRange.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Checks if value is inside the range. - */ - function inRange(val, min, max, threshold){ - threshold = threshold || 0; - return (val + threshold >= min && val - threshold <= max); - } - - return inRange; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/isNear.js b/truebit-implementation/node_modules/mout/src/math/isNear.js deleted file mode 100644 index b308a0b0..00000000 --- a/truebit-implementation/node_modules/mout/src/math/isNear.js +++ /dev/null @@ -1,9 +0,0 @@ -define(function(){ - /** - * Check if value is close to target. - */ - function isNear(val, target, threshold){ - return (Math.abs(val - target) <= threshold); - } - return isNear; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/lerp.js b/truebit-implementation/node_modules/mout/src/math/lerp.js deleted file mode 100644 index 26b99d04..00000000 --- a/truebit-implementation/node_modules/mout/src/math/lerp.js +++ /dev/null @@ -1,11 +0,0 @@ -define(function(){ - /** - * Linear interpolation. - * IMPORTANT:will return `Infinity` if numbers overflow Number.MAX_VALUE - */ - function lerp(ratio, start, end){ - return start + (end - start) * ratio; - } - - return lerp; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/loop.js b/truebit-implementation/node_modules/mout/src/math/loop.js deleted file mode 100644 index c735ecf6..00000000 --- a/truebit-implementation/node_modules/mout/src/math/loop.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Loops value inside range. - */ - function loop(val, min, max){ - return val < min? max : (val > max? min : val); - } - - return loop; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/map.js b/truebit-implementation/node_modules/mout/src/math/map.js deleted file mode 100644 index bf7dc5d5..00000000 --- a/truebit-implementation/node_modules/mout/src/math/map.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['./lerp', './norm'], function(lerp, norm){ - /** - * Maps a number from one scale to another. - * @example map(3, 0, 4, -1, 1) -> 0.5 - */ - function map(val, min1, max1, min2, max2){ - return lerp( norm(val, min1, max1), min2, max2 ); - } - return map; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/norm.js b/truebit-implementation/node_modules/mout/src/math/norm.js deleted file mode 100644 index 724d4f59..00000000 --- a/truebit-implementation/node_modules/mout/src/math/norm.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function(){ - /** - * Gets normalized ratio of value inside range. - */ - function norm(val, min, max){ - if (val < min || val > max) { - throw new RangeError('value (' + val + ') must be between ' + min + ' and ' + max); - } - - return val === max ? 1 : (val - min) / (max - min); - } - return norm; -}); diff --git a/truebit-implementation/node_modules/mout/src/math/round.js b/truebit-implementation/node_modules/mout/src/math/round.js deleted file mode 100644 index b43e4ac2..00000000 --- a/truebit-implementation/node_modules/mout/src/math/round.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - /** - * Round number to a specific radix - */ - function round(value, radix){ - radix = radix || 1; // default round 1 - return Math.round(value / radix) * radix; - } - - return round; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number.js b/truebit-implementation/node_modules/mout/src/number.js deleted file mode 100644 index ffdb2cd9..00000000 --- a/truebit-implementation/node_modules/mout/src/number.js +++ /dev/null @@ -1,25 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'MAX_INT' : require('./number/MAX_INT'), - 'MAX_SAFE_INTEGER' : require('./number/MAX_SAFE_INTEGER'), - 'MAX_UINT' : require('./number/MAX_UINT'), - 'MIN_INT' : require('./number/MIN_INT'), - 'abbreviate' : require('./number/abbreviate'), - 'currencyFormat' : require('./number/currencyFormat'), - 'enforcePrecision' : require('./number/enforcePrecision'), - 'isNaN' : require('./number/isNaN'), - 'nth' : require('./number/nth'), - 'ordinal' : require('./number/ordinal'), - 'pad' : require('./number/pad'), - 'rol' : require('./number/rol'), - 'ror' : require('./number/ror'), - 'sign' : require('./number/sign'), - 'toInt' : require('./number/toInt'), - 'toUInt' : require('./number/toUInt'), - 'toUInt31' : require('./number/toUInt31') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/MAX_INT.js b/truebit-implementation/node_modules/mout/src/number/MAX_INT.js deleted file mode 100644 index 23a6e1a3..00000000 --- a/truebit-implementation/node_modules/mout/src/number/MAX_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit signed integer value. (2^31 - 1) - */ -define(function(){ - return 2147483647; -}); diff --git a/truebit-implementation/node_modules/mout/src/number/MAX_SAFE_INTEGER.js b/truebit-implementation/node_modules/mout/src/number/MAX_SAFE_INTEGER.js deleted file mode 100644 index ecdc62e6..00000000 --- a/truebit-implementation/node_modules/mout/src/number/MAX_SAFE_INTEGER.js +++ /dev/null @@ -1,7 +0,0 @@ -define(function () { - - // maximum safe integer (Math.pow(2, 53) - 1) - // see: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer - return 9007199254740991; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/MAX_UINT.js b/truebit-implementation/node_modules/mout/src/number/MAX_UINT.js deleted file mode 100644 index a035096c..00000000 --- a/truebit-implementation/node_modules/mout/src/number/MAX_UINT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Maximum 32-bit unsigned integet value (2^32 - 1) - */ -define(function(){ - return 4294967295; -}); diff --git a/truebit-implementation/node_modules/mout/src/number/MIN_INT.js b/truebit-implementation/node_modules/mout/src/number/MIN_INT.js deleted file mode 100644 index 9b3e9781..00000000 --- a/truebit-implementation/node_modules/mout/src/number/MIN_INT.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @constant Minimum 32-bit signed integer value (-2^31). - */ -define(function(){ - return -2147483648; -}); diff --git a/truebit-implementation/node_modules/mout/src/number/abbreviate.js b/truebit-implementation/node_modules/mout/src/number/abbreviate.js deleted file mode 100644 index 7e7405ad..00000000 --- a/truebit-implementation/node_modules/mout/src/number/abbreviate.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['./enforcePrecision'], function (enforcePrecision) { - - var _defaultDict = { - thousand : 'K', - million : 'M', - billion : 'B' - }; - - /** - * Abbreviate number if bigger than 1000. (eg: 2.5K, 17.5M, 3.4B, ...) - */ - function abbreviateNumber(val, nDecimals, dict){ - nDecimals = nDecimals != null? nDecimals : 1; - dict = dict || _defaultDict; - val = enforcePrecision(val, nDecimals); - - var str, mod; - - if (val < 1000000) { - mod = enforcePrecision(val / 1000, nDecimals); - // might overflow to next scale during rounding - str = mod < 1000? mod + dict.thousand : 1 + dict.million; - } else if (val < 1000000000) { - mod = enforcePrecision(val / 1000000, nDecimals); - str = mod < 1000? mod + dict.million : 1 + dict.billion; - } else { - str = enforcePrecision(val / 1000000000, nDecimals) + dict.billion; - } - - return str; - } - - return abbreviateNumber; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/currencyFormat.js b/truebit-implementation/node_modules/mout/src/number/currencyFormat.js deleted file mode 100644 index 1e5fecba..00000000 --- a/truebit-implementation/node_modules/mout/src/number/currencyFormat.js +++ /dev/null @@ -1,27 +0,0 @@ -define(['../lang/toNumber'], function (toNumber) { - - /** - * Converts number into currency format - */ - function currencyFormat(val, nDecimalDigits, decimalSeparator, thousandsSeparator) { - val = toNumber(val); - nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits; - decimalSeparator = decimalSeparator == null? '.' : decimalSeparator; - thousandsSeparator = thousandsSeparator == null? ',' : thousandsSeparator; - - //can't use enforce precision since it returns a number and we are - //doing a RegExp over the string - var fixed = val.toFixed(nDecimalDigits), - //separate begin [$1], middle [$2] and decimal digits [$4] - parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); - - if(parts){ //val >= 1000 || val <= -1000 - return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : ''); - }else{ - return fixed.replace('.', decimalSeparator); - } - } - - return currencyFormat; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/enforcePrecision.js b/truebit-implementation/node_modules/mout/src/number/enforcePrecision.js deleted file mode 100644 index 1e65e505..00000000 --- a/truebit-implementation/node_modules/mout/src/number/enforcePrecision.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toNumber'], function(toNumber){ - /** - * Enforce a specific amount of decimal digits and also fix floating - * point rounding issues. - */ - function enforcePrecision(val, nDecimalDigits){ - val = toNumber(val); - var pow = Math.pow(10, nDecimalDigits); - return +(Math.round(val * pow) / pow).toFixed(nDecimalDigits); - } - return enforcePrecision; -}); diff --git a/truebit-implementation/node_modules/mout/src/number/isNaN.js b/truebit-implementation/node_modules/mout/src/number/isNaN.js deleted file mode 100644 index 3f1ebb68..00000000 --- a/truebit-implementation/node_modules/mout/src/number/isNaN.js +++ /dev/null @@ -1,14 +0,0 @@ -define(function () { - - /** - * ES6 Number.isNaN - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN - */ - function isNaN(val){ - // jshint eqeqeq:false - return typeof val === 'number' && val != val; - } - - return isNaN; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/nth.js b/truebit-implementation/node_modules/mout/src/number/nth.js deleted file mode 100644 index e991e2b6..00000000 --- a/truebit-implementation/node_modules/mout/src/number/nth.js +++ /dev/null @@ -1,25 +0,0 @@ -define(function () { - - /** - * Returns "nth" of number (1 = "st", 2 = "nd", 3 = "rd", 4..10 = "th", ...) - */ - function nth(i) { - var t = (i % 100); - if (t >= 10 && t <= 20) { - return 'th'; - } - switch(i % 10) { - case 1: - return 'st'; - case 2: - return 'nd'; - case 3: - return 'rd'; - default: - return 'th'; - } - } - - return nth; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/ordinal.js b/truebit-implementation/node_modules/mout/src/number/ordinal.js deleted file mode 100644 index 17927fc0..00000000 --- a/truebit-implementation/node_modules/mout/src/number/ordinal.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./toInt', './nth'], function (toInt, nth) { - - /** - * converts number into ordinal form (1st, 2nd, 3rd, 4th, ...) - */ - function ordinal(n){ - n = toInt(n); - return n + nth(n); - } - - return ordinal; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/pad.js b/truebit-implementation/node_modules/mout/src/number/pad.js deleted file mode 100644 index 194a3df3..00000000 --- a/truebit-implementation/node_modules/mout/src/number/pad.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../string/lpad', '../lang/toNumber'], function(lpad, toNumber){ - - /** - * Add padding zeros if n.length < minLength. - */ - function pad(n, minLength, char){ - n = toNumber(n); - return lpad(''+ n, minLength, char || '0'); - } - - return pad; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/rol.js b/truebit-implementation/node_modules/mout/src/number/rol.js deleted file mode 100644 index a148f444..00000000 --- a/truebit-implementation/node_modules/mout/src/number/rol.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift left - * http://en.wikipedia.org/wiki/Circular_shift - */ - function rol(val, shift){ - return (val << shift) | (val >> (32 - shift)); - } - return rol; -}); diff --git a/truebit-implementation/node_modules/mout/src/number/ror.js b/truebit-implementation/node_modules/mout/src/number/ror.js deleted file mode 100644 index b5c66f92..00000000 --- a/truebit-implementation/node_modules/mout/src/number/ror.js +++ /dev/null @@ -1,10 +0,0 @@ -define(function(){ - /** - * Bitwise circular shift right - * http://en.wikipedia.org/wiki/Circular_shift - */ - function ror(val, shift){ - return (val >> shift) | (val << (32 - shift)); - } - return ror; -}); diff --git a/truebit-implementation/node_modules/mout/src/number/sign.js b/truebit-implementation/node_modules/mout/src/number/sign.js deleted file mode 100644 index b387c957..00000000 --- a/truebit-implementation/node_modules/mout/src/number/sign.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['../lang/toNumber'], function (toNumber) { - - /** - * Get sign of the value. - */ - function sign(val) { - var num = toNumber(val); - if (num === 0) return num; // +0 and +0 === 0 - if (isNaN(num)) return num; // NaN - return num < 0? -1 : 1; - } - - return sign; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/toInt.js b/truebit-implementation/node_modules/mout/src/number/toInt.js deleted file mode 100644 index 5ea59e51..00000000 --- a/truebit-implementation/node_modules/mout/src/number/toInt.js +++ /dev/null @@ -1,17 +0,0 @@ -define(function(){ - - /** - * "Convert" value into an 32-bit integer. - * Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0. - * IMPORTANT: val will wrap at 2^31 and -2^31. - * Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7 - */ - function toInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return ~~val; - } - - return toInt; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/toUInt.js b/truebit-implementation/node_modules/mout/src/number/toUInt.js deleted file mode 100644 index 36bbdadd..00000000 --- a/truebit-implementation/node_modules/mout/src/number/toUInt.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function () { - - /** - * "Convert" value into a 32-bit unsigned integer. - * IMPORTANT: Value will wrap at 2^32. - */ - function toUInt(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return val >>> 0; - } - - return toUInt; - -}); diff --git a/truebit-implementation/node_modules/mout/src/number/toUInt31.js b/truebit-implementation/node_modules/mout/src/number/toUInt31.js deleted file mode 100644 index c1c4affd..00000000 --- a/truebit-implementation/node_modules/mout/src/number/toUInt31.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./MAX_INT'], function(MAX_INT){ - - /** - * "Convert" value into an 31-bit unsigned integer (since 1 bit is used for sign). - * IMPORTANT: value wil wrap at 2^31, if negative will return 0. - */ - function toUInt31(val){ - // we do not use lang/toNumber because of perf and also because it - // doesn't break the functionality - return (val <= 0)? 0 : (val > MAX_INT? ~~(val % (MAX_INT + 1)) : ~~val); - } - - return toUInt31; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object.js b/truebit-implementation/node_modules/mout/src/object.js deleted file mode 100644 index 93cb49eb..00000000 --- a/truebit-implementation/node_modules/mout/src/object.js +++ /dev/null @@ -1,44 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'bindAll' : require('./object/bindAll'), - 'contains' : require('./object/contains'), - 'deepFillIn' : require('./object/deepFillIn'), - 'deepMatches' : require('./object/deepMatches'), - 'deepMixIn' : require('./object/deepMixIn'), - 'equals' : require('./object/equals'), - 'every' : require('./object/every'), - 'fillIn' : require('./object/fillIn'), - 'filter' : require('./object/filter'), - 'find' : require('./object/find'), - 'flatten' : require('./object/flatten'), - 'forIn' : require('./object/forIn'), - 'forOwn' : require('./object/forOwn'), - 'functions' : require('./object/functions'), - 'get' : require('./object/get'), - 'has' : require('./object/has'), - 'hasOwn' : require('./object/hasOwn'), - 'keys' : require('./object/keys'), - 'map' : require('./object/map'), - 'matches' : require('./object/matches'), - 'max' : require('./object/max'), - 'merge' : require('./object/merge'), - 'min' : require('./object/min'), - 'mixIn' : require('./object/mixIn'), - 'namespace' : require('./object/namespace'), - 'omit' : require('./object/omit'), - 'pick' : require('./object/pick'), - 'pluck' : require('./object/pluck'), - 'reduce' : require('./object/reduce'), - 'reject' : require('./object/reject'), - 'result' : require('./object/result'), - 'set' : require('./object/set'), - 'size' : require('./object/size'), - 'some' : require('./object/some'), - 'unset' : require('./object/unset'), - 'values' : require('./object/values') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/bindAll.js b/truebit-implementation/node_modules/mout/src/object/bindAll.js deleted file mode 100644 index 76576d61..00000000 --- a/truebit-implementation/node_modules/mout/src/object/bindAll.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./functions', '../function/bind', '../array/forEach', '../array/slice'], function (functions, bind, forEach, slice) { - - /** - * Binds methods of the object to be run in it's own context. - */ - function bindAll(obj, rest_methodNames){ - var keys = arguments.length > 1? - slice(arguments, 1) : functions(obj); - forEach(keys, function(key){ - obj[key] = bind(obj[key], obj); - }); - } - - return bindAll; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/contains.js b/truebit-implementation/node_modules/mout/src/object/contains.js deleted file mode 100644 index 297e8986..00000000 --- a/truebit-implementation/node_modules/mout/src/object/contains.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./some'], function (some) { - - /** - * Check if object contains value - */ - function contains(obj, needle) { - return some(obj, function(val) { - return (val === needle); - }); - } - return contains; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/deepFillIn.js b/truebit-implementation/node_modules/mout/src/object/deepFillIn.js deleted file mode 100644 index ee69c3d5..00000000 --- a/truebit-implementation/node_modules/mout/src/object/deepFillIn.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Deeply copy missing properties in the target from the defaults. - */ - function deepFillIn(target, defaults){ - var i = 0, - n = arguments.length, - obj; - - while(++i < n) { - obj = arguments[i]; - if (obj) { - // jshint loopfunc: true - forOwn(obj, function(newValue, key) { - var curValue = target[key]; - if (curValue == null) { - target[key] = newValue; - } else if (isPlainObject(curValue) && - isPlainObject(newValue)) { - deepFillIn(curValue, newValue); - } - }); - } - } - - return target; - } - - return deepFillIn; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/deepMatches.js b/truebit-implementation/node_modules/mout/src/object/deepMatches.js deleted file mode 100644 index 2eae6297..00000000 --- a/truebit-implementation/node_modules/mout/src/object/deepMatches.js +++ /dev/null @@ -1,54 +0,0 @@ -define(['./forOwn', '../lang/isArray'], function(forOwn, isArray) { - - function containsMatch(array, pattern) { - var i = -1, length = array.length; - while (++i < length) { - if (deepMatches(array[i], pattern)) { - return true; - } - } - - return false; - } - - function matchArray(target, pattern) { - var i = -1, patternLength = pattern.length; - while (++i < patternLength) { - if (!containsMatch(target, pattern[i])) { - return false; - } - } - - return true; - } - - function matchObject(target, pattern) { - var result = true; - forOwn(pattern, function(val, key) { - if (!deepMatches(target[key], val)) { - // Return false to break out of forOwn early - return (result = false); - } - }); - - return result; - } - - /** - * Recursively check if the objects match. - */ - function deepMatches(target, pattern){ - if (target && typeof target === 'object') { - if (isArray(target) && isArray(pattern)) { - return matchArray(target, pattern); - } else { - return matchObject(target, pattern); - } - } else { - return target === pattern; - } - } - - return deepMatches; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/deepMixIn.js b/truebit-implementation/node_modules/mout/src/object/deepMixIn.js deleted file mode 100644 index 1b4178ef..00000000 --- a/truebit-implementation/node_modules/mout/src/object/deepMixIn.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /** - * Mixes objects into the target object, recursively mixing existing child - * objects. - */ - function deepMixIn(target, objects) { - var i = 0, - n = arguments.length, - obj; - - while(++i < n){ - obj = arguments[i]; - if (obj) { - forOwn(obj, copyProp, target); - } - } - - return target; - } - - function copyProp(val, key) { - var existing = this[key]; - if (isPlainObject(val) && isPlainObject(existing)) { - deepMixIn(existing, val); - } else { - this[key] = val; - } - } - - return deepMixIn; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/equals.js b/truebit-implementation/node_modules/mout/src/object/equals.js deleted file mode 100644 index aeb87408..00000000 --- a/truebit-implementation/node_modules/mout/src/object/equals.js +++ /dev/null @@ -1,30 +0,0 @@ -define(['./hasOwn', './every', '../lang/isObject', '../lang/is'], function(hasOwn, every, isObject, is) { - - // Makes a function to compare the object values from the specified compare - // operation callback. - function makeCompare(callback) { - return function(value, key) { - return hasOwn(this, key) && callback(value, this[key]); - }; - } - - function checkProperties(value, key) { - return hasOwn(this, key); - } - - /** - * Checks if two objects have the same keys and values. - */ - function equals(a, b, callback) { - callback = callback || is; - - if (!isObject(a) || !isObject(b)) { - return callback(a, b); - } - - return (every(a, makeCompare(callback), b) && - every(b, checkProperties, a)); - } - - return equals; -}); diff --git a/truebit-implementation/node_modules/mout/src/object/every.js b/truebit-implementation/node_modules/mout/src/object/every.js deleted file mode 100644 index 52983a5e..00000000 --- a/truebit-implementation/node_modules/mout/src/object/every.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object every - */ - function every(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = true; - forOwn(obj, function(val, key) { - // we consider any falsy values as "false" on purpose so shorthand - // syntax can be used to check property existence - if (!callback(val, key, obj)) { - result = false; - return false; // break - } - }); - return result; - } - - return every; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/fillIn.js b/truebit-implementation/node_modules/mout/src/object/fillIn.js deleted file mode 100644 index 363beab2..00000000 --- a/truebit-implementation/node_modules/mout/src/object/fillIn.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach', '../array/slice', './forOwn'], function (forEach, slice, forOwn) { - - /** - * Copy missing properties in the obj from the defaults. - */ - function fillIn(obj, var_defaults){ - forEach(slice(arguments, 1), function(base){ - forOwn(base, function(val, key){ - if (obj[key] == null) { - obj[key] = val; - } - }); - }); - return obj; - } - - return fillIn; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/filter.js b/truebit-implementation/node_modules/mout/src/object/filter.js deleted file mode 100644 index f213b915..00000000 --- a/truebit-implementation/node_modules/mout/src/object/filter.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object with all the properties where the callback returns - * true. - */ - function filterValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - output[key] = value; - } - }); - - return output; - } - return filterValues; -}); diff --git a/truebit-implementation/node_modules/mout/src/object/find.js b/truebit-implementation/node_modules/mout/src/object/find.js deleted file mode 100644 index 47e6b09d..00000000 --- a/truebit-implementation/node_modules/mout/src/object/find.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./some', '../function/makeIterator_'], function(some, makeIterator) { - - /** - * Returns first item that matches criteria - */ - function find(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result; - some(obj, function(value, key, obj) { - if (callback(value, key, obj)) { - result = value; - return true; //break - } - }); - return result; - } - - return find; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/flatten.js b/truebit-implementation/node_modules/mout/src/object/flatten.js deleted file mode 100644 index 4fe07afd..00000000 --- a/truebit-implementation/node_modules/mout/src/object/flatten.js +++ /dev/null @@ -1,37 +0,0 @@ -define(['./forOwn', '../lang/isPlainObject'], function (forOwn, isPlainObject) { - - /* - * Helper function to flatten to a destination object. - * Used to remove the need to create intermediate objects while flattening. - */ - function flattenTo(obj, result, prefix, level) { - forOwn(obj, function (value, key) { - var nestedPrefix = prefix ? prefix + '.' + key : key; - - if (level !== 0 && isPlainObject(value)) { - flattenTo(value, result, nestedPrefix, level - 1); - } else { - result[nestedPrefix] = value; - } - }); - - return result; - } - - /** - * Recursively flattens an object. - * A new object containing all the elements is returned. - * If level is specified, it will only flatten up to that level. - */ - function flatten(obj, level) { - if (obj == null) { - return {}; - } - - level = level == null ? -1 : level; - return flattenTo(obj, {}, '', level); - } - - return flatten; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/forIn.js b/truebit-implementation/node_modules/mout/src/object/forIn.js deleted file mode 100644 index 90f27063..00000000 --- a/truebit-implementation/node_modules/mout/src/object/forIn.js +++ /dev/null @@ -1,76 +0,0 @@ -define(['./hasOwn'], function (hasOwn) { - - var _hasDontEnumBug, - _dontEnums; - - function checkDontEnum(){ - _dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - - _hasDontEnumBug = true; - - for (var key in {'toString': null}) { - _hasDontEnumBug = false; - } - } - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forIn(obj, fn, thisObj){ - var key, i = 0; - // no need to check if argument is a real object that way we can use - // it for arrays, functions, date, etc. - - //post-pone check till needed - if (_hasDontEnumBug == null) checkDontEnum(); - - for (key in obj) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - - - if (_hasDontEnumBug) { - var ctor = obj.constructor, - isProto = !!ctor && obj === ctor.prototype; - - while (key = _dontEnums[i++]) { - // For constructor, if it is a prototype object the constructor - // is always non-enumerable unless defined otherwise (and - // enumerated above). For non-prototype objects, it will have - // to be defined on this object, since it cannot be defined on - // any prototype objects. - // - // For other [[DontEnum]] properties, check if the value is - // different than Object prototype value. - if ( - (key !== 'constructor' || - (!isProto && hasOwn(obj, key))) && - obj[key] !== Object.prototype[key] - ) { - if (exec(fn, obj, key, thisObj) === false) { - break; - } - } - } - } - } - - function exec(fn, obj, key, thisObj){ - return fn.call(thisObj, obj[key], key, obj); - } - - return forIn; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/forOwn.js b/truebit-implementation/node_modules/mout/src/object/forOwn.js deleted file mode 100644 index b40cbaf1..00000000 --- a/truebit-implementation/node_modules/mout/src/object/forOwn.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./hasOwn', './forIn'], function (hasOwn, forIn) { - - /** - * Similar to Array/forEach but works over object properties and fixes Don't - * Enum bug on IE. - * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation - */ - function forOwn(obj, fn, thisObj){ - forIn(obj, function(val, key){ - if (hasOwn(obj, key)) { - return fn.call(thisObj, obj[key], key, obj); - } - }); - } - - return forOwn; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/functions.js b/truebit-implementation/node_modules/mout/src/object/functions.js deleted file mode 100644 index 60fee3dd..00000000 --- a/truebit-implementation/node_modules/mout/src/object/functions.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['./forIn'], function (forIn) { - - /** - * return a list of all enumerable properties that have function values - */ - function functions(obj){ - var keys = []; - forIn(obj, function(val, key){ - if (typeof val === 'function'){ - keys.push(key); - } - }); - return keys.sort(); - } - - return functions; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/get.js b/truebit-implementation/node_modules/mout/src/object/get.js deleted file mode 100644 index 464c7bce..00000000 --- a/truebit-implementation/node_modules/mout/src/object/get.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/isPrimitive'], function (isPrimitive) { - - /** - * get "nested" object property - */ - function get(obj, prop){ - var parts = prop.split('.'), - last = parts.pop(); - - while (prop = parts.shift()) { - obj = obj[prop]; - if (obj == null) return; - } - - return obj[last]; - } - - return get; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/has.js b/truebit-implementation/node_modules/mout/src/object/has.js deleted file mode 100644 index cc29817f..00000000 --- a/truebit-implementation/node_modules/mout/src/object/has.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./get'], function (get) { - - var UNDEF; - - /** - * Check if object has nested property. - */ - function has(obj, prop){ - return get(obj, prop) !== UNDEF; - } - - return has; - -}); - diff --git a/truebit-implementation/node_modules/mout/src/object/hasOwn.js b/truebit-implementation/node_modules/mout/src/object/hasOwn.js deleted file mode 100644 index 5c53bcf2..00000000 --- a/truebit-implementation/node_modules/mout/src/object/hasOwn.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function () { - - /** - * Safer Object.hasOwnProperty - */ - function hasOwn(obj, prop){ - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - return hasOwn; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/keys.js b/truebit-implementation/node_modules/mout/src/object/keys.js deleted file mode 100644 index ed7c4f91..00000000 --- a/truebit-implementation/node_modules/mout/src/object/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object keys - */ - var keys = Object.keys || function (obj) { - var keys = []; - forOwn(obj, function(val, key){ - keys.push(key); - }); - return keys; - }; - - return keys; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/map.js b/truebit-implementation/node_modules/mout/src/object/map.js deleted file mode 100644 index 2958f6b0..00000000 --- a/truebit-implementation/node_modules/mout/src/object/map.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Creates a new object where all the values are the result of calling - * `callback`. - */ - function mapValues(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var output = {}; - forOwn(obj, function(val, key, obj) { - output[key] = callback(val, key, obj); - }); - - return output; - } - return mapValues; -}); diff --git a/truebit-implementation/node_modules/mout/src/object/matches.js b/truebit-implementation/node_modules/mout/src/object/matches.js deleted file mode 100644 index 73ff427c..00000000 --- a/truebit-implementation/node_modules/mout/src/object/matches.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * checks if a object contains all given properties/values - */ - function matches(target, props){ - // can't use "object/every" because of circular dependency - var result = true; - forOwn(props, function(val, key){ - if (target[key] !== val) { - // break loop at first difference - return (result = false); - } - }); - return result; - } - - return matches; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/max.js b/truebit-implementation/node_modules/mout/src/object/max.js deleted file mode 100644 index ef311dcb..00000000 --- a/truebit-implementation/node_modules/mout/src/object/max.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/max', './values'], function(arrMax, values) { - - /** - * Returns maximum value inside object. - */ - function max(obj, compareFn) { - return arrMax(values(obj), compareFn); - } - - return max; -}); diff --git a/truebit-implementation/node_modules/mout/src/object/merge.js b/truebit-implementation/node_modules/mout/src/object/merge.js deleted file mode 100644 index d7cfedec..00000000 --- a/truebit-implementation/node_modules/mout/src/object/merge.js +++ /dev/null @@ -1,38 +0,0 @@ -define(['./hasOwn', '../lang/deepClone', '../lang/isObject'], function (hasOwn, deepClone, isObject) { - - /** - * Deep merge objects. - */ - function merge() { - var i = 1, - key, val, obj, target; - - // make sure we don't modify source element and it's properties - // objects are passed by reference - target = deepClone( arguments[0] ); - - while (obj = arguments[i++]) { - for (key in obj) { - if ( ! hasOwn(obj, key) ) { - continue; - } - - val = obj[key]; - - if ( isObject(val) && isObject(target[key]) ){ - // inception, deep merge objects - target[key] = merge(target[key], val); - } else { - // make sure arrays, regexp, date, objects are cloned - target[key] = deepClone(val); - } - - } - } - - return target; - } - - return merge; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/min.js b/truebit-implementation/node_modules/mout/src/object/min.js deleted file mode 100644 index 9fb4c1a3..00000000 --- a/truebit-implementation/node_modules/mout/src/object/min.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../array/min', './values'], function(arrMin, values) { - - /** - * Returns minimum value inside object. - */ - function min(obj, iterator) { - return arrMin(values(obj), iterator); - } - - return min; -}); diff --git a/truebit-implementation/node_modules/mout/src/object/mixIn.js b/truebit-implementation/node_modules/mout/src/object/mixIn.js deleted file mode 100644 index 6210b7e7..00000000 --- a/truebit-implementation/node_modules/mout/src/object/mixIn.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn'], function(forOwn){ - - /** - * Combine properties from all the objects into first one. - * - This method affects target object in place, if you want to create a new Object pass an empty object as first param. - * @param {object} target Target Object - * @param {...object} objects Objects to be combined (0...n objects). - * @return {object} Target Object. - */ - function mixIn(target, objects){ - var i = 0, - n = arguments.length, - obj; - while(++i < n){ - obj = arguments[i]; - if (obj != null) { - forOwn(obj, copyProp, target); - } - } - return target; - } - - function copyProp(val, key){ - this[key] = val; - } - - return mixIn; -}); diff --git a/truebit-implementation/node_modules/mout/src/object/namespace.js b/truebit-implementation/node_modules/mout/src/object/namespace.js deleted file mode 100644 index 7ed65db8..00000000 --- a/truebit-implementation/node_modules/mout/src/object/namespace.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['../array/forEach'], function (forEach) { - - /** - * Create nested object if non-existent - */ - function namespace(obj, path){ - if (!path) return obj; - forEach(path.split('.'), function(key){ - if (!obj[key]) { - obj[key] = {}; - } - obj = obj[key]; - }); - return obj; - } - - return namespace; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/omit.js b/truebit-implementation/node_modules/mout/src/object/omit.js deleted file mode 100644 index 829cc585..00000000 --- a/truebit-implementation/node_modules/mout/src/object/omit.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../array/slice', '../array/contains'], function(slice, contains){ - - /** - * Return a copy of the object, filtered to only contain properties except the blacklisted keys. - */ - function omit(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : slice(arguments, 1), - out = {}; - - for (var property in obj) { - if (obj.hasOwnProperty(property) && !contains(keys, property)) { - out[property] = obj[property]; - } - } - return out; - } - - return omit; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/pick.js b/truebit-implementation/node_modules/mout/src/object/pick.js deleted file mode 100644 index 9d5e3513..00000000 --- a/truebit-implementation/node_modules/mout/src/object/pick.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../array/slice'], function(slice){ - - /** - * Return a copy of the object, filtered to only have values for the whitelisted keys. - */ - function pick(obj, var_keys){ - var keys = typeof arguments[1] !== 'string'? arguments[1] : slice(arguments, 1), - out = {}, - i = 0, key; - while (key = keys[i++]) { - out[key] = obj[key]; - } - return out; - } - - return pick; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/pluck.js b/truebit-implementation/node_modules/mout/src/object/pluck.js deleted file mode 100644 index d47744bd..00000000 --- a/truebit-implementation/node_modules/mout/src/object/pluck.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./map', '../function/prop'], function (map, prop) { - - /** - * Extract a list of property values. - */ - function pluck(obj, propName){ - return map(obj, prop(propName)); - } - - return pluck; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/reduce.js b/truebit-implementation/node_modules/mout/src/object/reduce.js deleted file mode 100644 index d3a57788..00000000 --- a/truebit-implementation/node_modules/mout/src/object/reduce.js +++ /dev/null @@ -1,28 +0,0 @@ -define(['./forOwn', './size'], function(forOwn, size) { - - /** - * Object reduce - */ - function reduce(obj, callback, memo, thisObj) { - var initial = arguments.length > 2; - - if (!size(obj) && !initial) { - throw new Error('reduce of empty object with no initial value'); - } - - forOwn(obj, function(value, key, list) { - if (!initial) { - memo = value; - initial = true; - } - else { - memo = callback.call(thisObj, memo, value, key, list); - } - }); - - return memo; - } - - return reduce; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/reject.js b/truebit-implementation/node_modules/mout/src/object/reject.js deleted file mode 100644 index 84296428..00000000 --- a/truebit-implementation/node_modules/mout/src/object/reject.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['./filter', '../function/makeIterator_'], function (filter, makeIterator) { - - /** - * Object reject - */ - function reject(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - return filter(obj, function(value, index, obj) { - return !callback(value, index, obj); - }, thisObj); - } - - return reject; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/result.js b/truebit-implementation/node_modules/mout/src/object/result.js deleted file mode 100644 index 133572d8..00000000 --- a/truebit-implementation/node_modules/mout/src/object/result.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/isFunction'], function (isFunction) { - - function result(obj, prop) { - var property = obj[prop]; - - if(property === undefined) { - return; - } - - return isFunction(property) ? property.call(obj) : property; - } - - return result; -}); diff --git a/truebit-implementation/node_modules/mout/src/object/set.js b/truebit-implementation/node_modules/mout/src/object/set.js deleted file mode 100644 index b8fa25a3..00000000 --- a/truebit-implementation/node_modules/mout/src/object/set.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['./namespace'], function (namespace) { - - /** - * set "nested" object property - */ - function set(obj, prop, val){ - var parts = (/^(.+)\.(.+)$/).exec(prop); - if (parts){ - namespace(obj, parts[1])[parts[2]] = val; - } else { - obj[prop] = val; - } - } - - return set; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/size.js b/truebit-implementation/node_modules/mout/src/object/size.js deleted file mode 100644 index c6e377cf..00000000 --- a/truebit-implementation/node_modules/mout/src/object/size.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object size - */ - function size(obj) { - var count = 0; - forOwn(obj, function(){ - count++; - }); - return count; - } - - return size; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/some.js b/truebit-implementation/node_modules/mout/src/object/some.js deleted file mode 100644 index 1bd6fdae..00000000 --- a/truebit-implementation/node_modules/mout/src/object/some.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['./forOwn', '../function/makeIterator_'], function(forOwn, makeIterator) { - - /** - * Object some - */ - function some(obj, callback, thisObj) { - callback = makeIterator(callback, thisObj); - var result = false; - forOwn(obj, function(val, key) { - if (callback(val, key, obj)) { - result = true; - return false; // break - } - }); - return result; - } - - return some; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/unset.js b/truebit-implementation/node_modules/mout/src/object/unset.js deleted file mode 100644 index 787fc19a..00000000 --- a/truebit-implementation/node_modules/mout/src/object/unset.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./has'], function (has) { - - /** - * Unset object property. - */ - function unset(obj, prop){ - if (has(obj, prop)) { - var parts = prop.split('.'), - last = parts.pop(); - while (prop = parts.shift()) { - obj = obj[prop]; - } - return (delete obj[last]); - - } else { - // if property doesn't exist treat as deleted - return true; - } - } - - return unset; - -}); diff --git a/truebit-implementation/node_modules/mout/src/object/values.js b/truebit-implementation/node_modules/mout/src/object/values.js deleted file mode 100644 index b311fd09..00000000 --- a/truebit-implementation/node_modules/mout/src/object/values.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['./forOwn'], function (forOwn) { - - /** - * Get object values - */ - function values(obj) { - var vals = []; - forOwn(obj, function(val, key){ - vals.push(val); - }); - return vals; - } - - return values; - -}); diff --git a/truebit-implementation/node_modules/mout/src/queryString.js b/truebit-implementation/node_modules/mout/src/queryString.js deleted file mode 100644 index 44346127..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString.js +++ /dev/null @@ -1,15 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'contains' : require('./queryString/contains'), - 'decode' : require('./queryString/decode'), - 'encode' : require('./queryString/encode'), - 'getParam' : require('./queryString/getParam'), - 'getQuery' : require('./queryString/getQuery'), - 'parse' : require('./queryString/parse'), - 'setParam' : require('./queryString/setParam') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/queryString/contains.js b/truebit-implementation/node_modules/mout/src/queryString/contains.js deleted file mode 100644 index a6d11cce..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString/contains.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./getQuery'], function (getQuery) { - - /** - * Checks if query string contains parameter. - */ - function contains(url, paramName) { - var regex = new RegExp('(\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=` - return regex.test(getQuery(url)); - } - - return contains; -}); diff --git a/truebit-implementation/node_modules/mout/src/queryString/decode.js b/truebit-implementation/node_modules/mout/src/queryString/decode.js deleted file mode 100644 index a37c1231..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString/decode.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['../string/typecast', '../lang/isArray', '../object/hasOwn'], function (typecast, isArray, hasOwn) { - - /** - * Decode query string into an object of keys => vals. - */ - function decode(queryStr, shouldTypecast) { - var queryArr = (queryStr || '').replace('?', '').split('&'), - reg = /([^=]+)=(.+)/, - i = -1, - obj = {}, - equalIndex, cur, pValue, pName; - - while ((cur = queryArr[++i])) { - equalIndex = cur.indexOf('='); - pName = cur.substring(0, equalIndex); - pValue = decodeURIComponent(cur.substring(equalIndex + 1)); - if (shouldTypecast !== false) { - pValue = typecast(pValue); - } - if (hasOwn(obj, pName)){ - if(isArray(obj[pName])){ - obj[pName].push(pValue); - } else { - obj[pName] = [obj[pName], pValue]; - } - } else { - obj[pName] = pValue; - } - } - return obj; - } - - return decode; -}); diff --git a/truebit-implementation/node_modules/mout/src/queryString/encode.js b/truebit-implementation/node_modules/mout/src/queryString/encode.js deleted file mode 100644 index c249287a..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString/encode.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['../object/forOwn','../lang/isArray','../array/forEach'], function (forOwn,isArray,forEach) { - - /** - * Encode object into a query string. - */ - function encode(obj){ - var query = [], - arrValues, reg; - forOwn(obj, function (val, key) { - if (isArray(val)) { - arrValues = key + '='; - reg = new RegExp('&'+key+'+=$'); - forEach(val, function (aValue) { - arrValues += encodeURIComponent(aValue) + '&' + key + '='; - }); - query.push(arrValues.replace(reg, '')); - } else { - query.push(key + '=' + encodeURIComponent(val)); - } - }); - return (query.length) ? '?' + query.join('&') : ''; - } - - return encode; -}); diff --git a/truebit-implementation/node_modules/mout/src/queryString/getParam.js b/truebit-implementation/node_modules/mout/src/queryString/getParam.js deleted file mode 100644 index d9813724..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString/getParam.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../string/typecast', './getQuery'], function (typecast, getQuery) { - - /** - * Get query parameter value. - */ - function getParam(url, param, shouldTypecast){ - var regexp = new RegExp('(\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2 - result = regexp.exec( getQuery(url) ), - val = (result && result[2])? result[2] : null; - return shouldTypecast === false? val : typecast(val); - } - - return getParam; -}); diff --git a/truebit-implementation/node_modules/mout/src/queryString/getQuery.js b/truebit-implementation/node_modules/mout/src/queryString/getQuery.js deleted file mode 100644 index e8d70ff5..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString/getQuery.js +++ /dev/null @@ -1,13 +0,0 @@ -define(function () { - - /** - * Gets full query as string with all special chars decoded. - */ - function getQuery(url) { - url = url.replace(/#.*/, ''); //removes hash (to avoid getting hash query) - var queryString = /\?[a-zA-Z0-9\=\&\%\$\-\_\.\+\!\*\'\(\)\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt - return (queryString)? decodeURIComponent(queryString[0].replace(/\+/g,' ')) : ''; - } - - return getQuery; -}); diff --git a/truebit-implementation/node_modules/mout/src/queryString/parse.js b/truebit-implementation/node_modules/mout/src/queryString/parse.js deleted file mode 100644 index ac153e3f..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString/parse.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./decode', './getQuery'], function (decode, getQuery) { - - /** - * Get query string, parses and decodes it. - */ - function parse(url, shouldTypecast) { - return decode(getQuery(url), shouldTypecast); - } - - return parse; -}); - diff --git a/truebit-implementation/node_modules/mout/src/queryString/setParam.js b/truebit-implementation/node_modules/mout/src/queryString/setParam.js deleted file mode 100644 index 97081aa7..00000000 --- a/truebit-implementation/node_modules/mout/src/queryString/setParam.js +++ /dev/null @@ -1,28 +0,0 @@ -define(function () { - - /** - * Set query string parameter value - */ - function setParam(url, paramName, value){ - url = url || ''; - - var re = new RegExp('(\\?|&)'+ paramName +'=[^&]*' ); - var param = paramName +'='+ encodeURIComponent( value ); - - if ( re.test(url) ) { - return url.replace(re, '$1'+ param); - } else { - if (url.indexOf('?') === -1) { - url += '?'; - } - if (url.indexOf('=') !== -1) { - url += '&'; - } - return url + param; - } - - } - - return setParam; - -}); diff --git a/truebit-implementation/node_modules/mout/src/random.js b/truebit-implementation/node_modules/mout/src/random.js deleted file mode 100644 index b47f2035..00000000 --- a/truebit-implementation/node_modules/mout/src/random.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'choice' : require('./random/choice'), - 'guid' : require('./random/guid'), - 'rand' : require('./random/rand'), - 'randBit' : require('./random/randBit'), - 'randBool' : require('./random/randBool'), - 'randHex' : require('./random/randHex'), - 'randInt' : require('./random/randInt'), - 'randSign' : require('./random/randSign'), - 'randString' : require('./random/randString'), - 'random' : require('./random/random') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/random/choice.js b/truebit-implementation/node_modules/mout/src/random/choice.js deleted file mode 100644 index 0d0c38df..00000000 --- a/truebit-implementation/node_modules/mout/src/random/choice.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['./randInt', '../lang/isArray'], function (randInt, isArray) { - - /** - * Returns a random element from the supplied arguments - * or from the array (if single argument is an array). - */ - function choice(items) { - var target = (arguments.length === 1 && isArray(items))? items : arguments; - return target[ randInt(0, target.length - 1) ]; - } - - return choice; - -}); diff --git a/truebit-implementation/node_modules/mout/src/random/guid.js b/truebit-implementation/node_modules/mout/src/random/guid.js deleted file mode 100644 index 82f3a2db..00000000 --- a/truebit-implementation/node_modules/mout/src/random/guid.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['./randHex', './choice'], function (randHex, choice) { - - /** - * Returns pseudo-random guid (UUID v4) - * IMPORTANT: it's not totally "safe" since randHex/choice uses Math.random - * by default and sequences can be predicted in some cases. See the - * "random/random" documentation for more info about it and how to replace - * the default PRNG. - */ - function guid() { - return ( - randHex(8)+'-'+ - randHex(4)+'-'+ - // v4 UUID always contain "4" at this position to specify it was - // randomly generated - '4' + randHex(3) +'-'+ - // v4 UUID always contain chars [a,b,8,9] at this position - choice(8, 9, 'a', 'b') + randHex(3)+'-'+ - randHex(12) - ); - } - return guid; -}); diff --git a/truebit-implementation/node_modules/mout/src/random/rand.js b/truebit-implementation/node_modules/mout/src/random/rand.js deleted file mode 100644 index b8c231dd..00000000 --- a/truebit-implementation/node_modules/mout/src/random/rand.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['./random', '../number/MIN_INT', '../number/MAX_INT'], function(random, MIN_INT, MAX_INT){ - - /** - * Returns random number inside range - */ - function rand(min, max){ - min = min == null? MIN_INT : min; - max = max == null? MAX_INT : max; - return min + (max - min) * random(); - } - - return rand; -}); diff --git a/truebit-implementation/node_modules/mout/src/random/randBit.js b/truebit-implementation/node_modules/mout/src/random/randBit.js deleted file mode 100644 index 398fa2c6..00000000 --- a/truebit-implementation/node_modules/mout/src/random/randBit.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./randBool'], function (randBool) { - - /** - * Returns random bit (0 or 1) - */ - function randomBit() { - return randBool()? 1 : 0; - } - - return randomBit; -}); diff --git a/truebit-implementation/node_modules/mout/src/random/randBool.js b/truebit-implementation/node_modules/mout/src/random/randBool.js deleted file mode 100644 index 8d9be0b8..00000000 --- a/truebit-implementation/node_modules/mout/src/random/randBool.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['./random'], function (random) { - - /** - * returns a random boolean value (true or false) - */ - function randBool(){ - return random() >= 0.5; - } - - return randBool; - -}); diff --git a/truebit-implementation/node_modules/mout/src/random/randHex.js b/truebit-implementation/node_modules/mout/src/random/randHex.js deleted file mode 100644 index 6e9bf1c5..00000000 --- a/truebit-implementation/node_modules/mout/src/random/randHex.js +++ /dev/null @@ -1,19 +0,0 @@ -define(['./choice'], function (choice) { - - var _chars = '0123456789abcdef'.split(''); - - /** - * Returns a random hexadecimal string - */ - function randHex(size){ - size = size && size > 0? size : 6; - var str = ''; - while (size--) { - str += choice(_chars); - } - return str; - } - - return randHex; - -}); diff --git a/truebit-implementation/node_modules/mout/src/random/randInt.js b/truebit-implementation/node_modules/mout/src/random/randInt.js deleted file mode 100644 index 1750e9de..00000000 --- a/truebit-implementation/node_modules/mout/src/random/randInt.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../number/MIN_INT', '../number/MAX_INT', './rand'], function(MIN_INT, MAX_INT, rand){ - - /** - * Gets random integer inside range or snap to min/max values. - */ - function randInt(min, max){ - min = min == null? MIN_INT : ~~min; - max = max == null? MAX_INT : ~~max; - // can't be max + 0.5 otherwise it will round up if `rand` - // returns `max` causing it to overflow range. - // -0.5 and + 0.49 are required to avoid bias caused by rounding - return Math.round( rand(min - 0.5, max + 0.499999999999) ); - } - - return randInt; -}); diff --git a/truebit-implementation/node_modules/mout/src/random/randSign.js b/truebit-implementation/node_modules/mout/src/random/randSign.js deleted file mode 100644 index 1171b406..00000000 --- a/truebit-implementation/node_modules/mout/src/random/randSign.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['./randBool'], function (randBool) { - - /** - * Returns random sign (-1 or 1) - */ - function randomSign() { - return randBool()? 1 : -1; - } - - return randomSign; -}); diff --git a/truebit-implementation/node_modules/mout/src/random/randString.js b/truebit-implementation/node_modules/mout/src/random/randString.js deleted file mode 100644 index d309d08f..00000000 --- a/truebit-implementation/node_modules/mout/src/random/randString.js +++ /dev/null @@ -1,29 +0,0 @@ -define([ - '../lang/isNumber', - '../lang/isString', - './randInt' -], function (isNumber, isString, randInt) { - - var defaultDictionary = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - function randomString(length, dictionary) { - if(!isNumber(length) || length <= 0) { - length = 8; - } - - if(!isString(dictionary) || dictionary.length < 1) { - dictionary = defaultDictionary; - } - - var result = '', - domain = dictionary.length - 1; - - while(length--) { - result += dictionary[randInt(0, domain)]; - } - - return result; - } - - return randomString; -}); diff --git a/truebit-implementation/node_modules/mout/src/random/random.js b/truebit-implementation/node_modules/mout/src/random/random.js deleted file mode 100644 index 4270822e..00000000 --- a/truebit-implementation/node_modules/mout/src/random/random.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function () { - - /** - * Just a wrapper to Math.random. No methods inside mout/random should call - * Math.random() directly so we can inject the pseudo-random number - * generator if needed (ie. in case we need a seeded random or a better - * algorithm than the native one) - */ - function random(){ - return random.get(); - } - - // we expose the method so it can be swapped if needed - random.get = Math.random; - - return random; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string.js b/truebit-implementation/node_modules/mout/src/string.js deleted file mode 100644 index a157e4cc..00000000 --- a/truebit-implementation/node_modules/mout/src/string.js +++ /dev/null @@ -1,46 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'insert' : require('./string/insert'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/WHITE_SPACES.js b/truebit-implementation/node_modules/mout/src/string/WHITE_SPACES.js deleted file mode 100644 index e830d86d..00000000 --- a/truebit-implementation/node_modules/mout/src/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function() { - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - return [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/camelCase.js b/truebit-implementation/node_modules/mout/src/string/camelCase.js deleted file mode 100644 index 02e6c04d..00000000 --- a/truebit-implementation/node_modules/mout/src/string/camelCase.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './upperCase', './lowerCase'], function(toString, replaceAccents, removeNonWord, upperCase, lowerCase){ - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - return camelCase; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/contains.js b/truebit-implementation/node_modules/mout/src/string/contains.js deleted file mode 100644 index 825b5a5f..00000000 --- a/truebit-implementation/node_modules/mout/src/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - return contains; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/crop.js b/truebit-implementation/node_modules/mout/src/string/crop.js deleted file mode 100644 index 3c073f05..00000000 --- a/truebit-implementation/node_modules/mout/src/string/crop.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './truncate'], function (toString, truncate) { - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - return crop; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/endsWith.js b/truebit-implementation/node_modules/mout/src/string/endsWith.js deleted file mode 100644 index 31a73f20..00000000 --- a/truebit-implementation/node_modules/mout/src/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function(toString) { - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - return endsWith; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/escapeHtml.js b/truebit-implementation/node_modules/mout/src/string/escapeHtml.js deleted file mode 100644 index de34b61b..00000000 --- a/truebit-implementation/node_modules/mout/src/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - return escapeHtml; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/escapeRegExp.js b/truebit-implementation/node_modules/mout/src/string/escapeRegExp.js deleted file mode 100644 index 862655bf..00000000 --- a/truebit-implementation/node_modules/mout/src/string/escapeRegExp.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - return toString(str).replace(/\W/g,'\\$&'); - } - - return escapeRegExp; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/escapeUnicode.js b/truebit-implementation/node_modules/mout/src/string/escapeUnicode.js deleted file mode 100644 index bd5e8c4c..00000000 --- a/truebit-implementation/node_modules/mout/src/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - return escapeUnicode; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/hyphenate.js b/truebit-implementation/node_modules/mout/src/string/hyphenate.js deleted file mode 100644 index 679c405c..00000000 --- a/truebit-implementation/node_modules/mout/src/string/hyphenate.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - return hyphenate; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/insert.js b/truebit-implementation/node_modules/mout/src/string/insert.js deleted file mode 100644 index 79c45be7..00000000 --- a/truebit-implementation/node_modules/mout/src/string/insert.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../math/clamp', '../lang/toString'], function (clamp, toString) { - - /** - * Inserts a string at a given index. - */ - function insert(string, index, partial){ - string = toString(string); - - if (index < 0) { - index = string.length + index; - } - - index = clamp(index, 0, string.length); - - return string.substr(0, index) + partial + string.substr(index); - } - - return insert; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/interpolate.js b/truebit-implementation/node_modules/mout/src/string/interpolate.js deleted file mode 100644 index b5e7f4b8..00000000 --- a/truebit-implementation/node_modules/mout/src/string/interpolate.js +++ /dev/null @@ -1,21 +0,0 @@ -define([ - '../lang/toString', - '../object/get' -], function(toString, get) { - - var stache = /\{\{([^\}]+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return toString( get(replacements, prop) ); - }; - return template.replace(syntax || stache, replaceFn); - } - - return interpolate; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/lowerCase.js b/truebit-implementation/node_modules/mout/src/string/lowerCase.js deleted file mode 100644 index b045d69c..00000000 --- a/truebit-implementation/node_modules/mout/src/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - return lowerCase; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/lpad.js b/truebit-implementation/node_modules/mout/src/string/lpad.js deleted file mode 100644 index 134b4150..00000000 --- a/truebit-implementation/node_modules/mout/src/string/lpad.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString', './repeat'], function(toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return (str.length < minLen) ? - repeat(ch, minLen - str.length) + str : str; - } - - return lpad; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/ltrim.js b/truebit-implementation/node_modules/mout/src/string/ltrim.js deleted file mode 100644 index 477df953..00000000 --- a/truebit-implementation/node_modules/mout/src/string/ltrim.js +++ /dev/null @@ -1,33 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - return ltrim; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/makePath.js b/truebit-implementation/node_modules/mout/src/string/makePath.js deleted file mode 100644 index 3a6869e3..00000000 --- a/truebit-implementation/node_modules/mout/src/string/makePath.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../array/join', '../array/slice'], function(join, slice){ - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(slice(arguments), '/'); - // need to disconsider duplicate '/' after protocol (eg: 'http://') - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - - return makePath; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/normalizeLineBreaks.js b/truebit-implementation/node_modules/mout/src/string/normalizeLineBreaks.js deleted file mode 100644 index 44e4194f..00000000 --- a/truebit-implementation/node_modules/mout/src/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - return normalizeLineBreaks; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/pascalCase.js b/truebit-implementation/node_modules/mout/src/string/pascalCase.js deleted file mode 100644 index ead9ead4..00000000 --- a/truebit-implementation/node_modules/mout/src/string/pascalCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './camelCase', './upperCase'], function(toString, camelCase, upperCase){ - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - return pascalCase; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/properCase.js b/truebit-implementation/node_modules/mout/src/string/properCase.js deleted file mode 100644 index 2987b507..00000000 --- a/truebit-implementation/node_modules/mout/src/string/properCase.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - return properCase; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/removeNonASCII.js b/truebit-implementation/node_modules/mout/src/string/removeNonASCII.js deleted file mode 100644 index 4905869d..00000000 --- a/truebit-implementation/node_modules/mout/src/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - return removeNonASCII; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/removeNonWord.js b/truebit-implementation/node_modules/mout/src/string/removeNonWord.js deleted file mode 100644 index fb737d77..00000000 --- a/truebit-implementation/node_modules/mout/src/string/removeNonWord.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString'], function(toString){ - // This pattern is generated by the _build/pattern-removeNonWord.js script - var PATTERN = /[^\x20\x2D0-9A-Z\x5Fa-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/g; - - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(PATTERN, ''); - } - - return removeNonWord; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/repeat.js b/truebit-implementation/node_modules/mout/src/string/repeat.js deleted file mode 100644 index 0a25d836..00000000 --- a/truebit-implementation/node_modules/mout/src/string/repeat.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['../lang/toString', '../number/toInt'], function(toString, toInt){ - - /** - * Repeat string n times - */ - function repeat(str, n){ - var result = ''; - str = toString(str); - n = toInt(n); - if (n < 1) { - return ''; - } - while (n > 0) { - if (n % 2) { - result += str; - } - n = Math.floor(n / 2); - str += str; - } - return result; - } - - return repeat; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/replace.js b/truebit-implementation/node_modules/mout/src/string/replace.js deleted file mode 100644 index 8b762fdc..00000000 --- a/truebit-implementation/node_modules/mout/src/string/replace.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', '../lang/toArray'], function (toString, toArray) { - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - return replace; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/replaceAccents.js b/truebit-implementation/node_modules/mout/src/string/replaceAccents.js deleted file mode 100644 index 3a63f55a..00000000 --- a/truebit-implementation/node_modules/mout/src/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - return replaceAccents; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/rpad.js b/truebit-implementation/node_modules/mout/src/string/rpad.js deleted file mode 100644 index 2efd9c88..00000000 --- a/truebit-implementation/node_modules/mout/src/string/rpad.js +++ /dev/null @@ -1,14 +0,0 @@ -define(['../lang/toString', './repeat'], function (toString, repeat) { - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - return rpad; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/rtrim.js b/truebit-implementation/node_modules/mout/src/string/rtrim.js deleted file mode 100644 index a4cc282d..00000000 --- a/truebit-implementation/node_modules/mout/src/string/rtrim.js +++ /dev/null @@ -1,32 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES'], function(toString, WHITE_SPACES){ - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - return rtrim; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/sentenceCase.js b/truebit-implementation/node_modules/mout/src/string/sentenceCase.js deleted file mode 100644 index cfe45af5..00000000 --- a/truebit-implementation/node_modules/mout/src/string/sentenceCase.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString', './lowerCase', './upperCase'], function(toString, lowerCase, upperCase){ - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - return sentenceCase; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/slugify.js b/truebit-implementation/node_modules/mout/src/string/slugify.js deleted file mode 100644 index c6d68c7e..00000000 --- a/truebit-implementation/node_modules/mout/src/string/slugify.js +++ /dev/null @@ -1,21 +0,0 @@ -define(['../lang/toString', './replaceAccents', './removeNonWord', './trim'], function(toString, replaceAccents, removeNonWord, trim){ - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - return slugify; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/startsWith.js b/truebit-implementation/node_modules/mout/src/string/startsWith.js deleted file mode 100644 index 88ae5453..00000000 --- a/truebit-implementation/node_modules/mout/src/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -define(['../lang/toString'], function (toString) { - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - return startsWith; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/stripHtmlTags.js b/truebit-implementation/node_modules/mout/src/string/stripHtmlTags.js deleted file mode 100644 index e8da956d..00000000 --- a/truebit-implementation/node_modules/mout/src/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - return stripHtmlTags; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/trim.js b/truebit-implementation/node_modules/mout/src/string/trim.js deleted file mode 100644 index 55526041..00000000 --- a/truebit-implementation/node_modules/mout/src/string/trim.js +++ /dev/null @@ -1,12 +0,0 @@ -define(['../lang/toString', './WHITE_SPACES', './ltrim', './rtrim'], function(toString, WHITE_SPACES, ltrim, rtrim){ - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - return trim; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/truncate.js b/truebit-implementation/node_modules/mout/src/string/truncate.js deleted file mode 100644 index 34000d9f..00000000 --- a/truebit-implementation/node_modules/mout/src/string/truncate.js +++ /dev/null @@ -1,20 +0,0 @@ -define(['../lang/toString', './trim'], function(toString, trim){ - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - return truncate; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/typecast.js b/truebit-implementation/node_modules/mout/src/string/typecast.js deleted file mode 100644 index a7c83153..00000000 --- a/truebit-implementation/node_modules/mout/src/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ -define(function () { - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - return typecast; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/unCamelCase.js b/truebit-implementation/node_modules/mout/src/string/unCamelCase.js deleted file mode 100644 index eeef39b6..00000000 --- a/truebit-implementation/node_modules/mout/src/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../lang/toString'], function(toString){ - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - return unCamelCase; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/underscore.js b/truebit-implementation/node_modules/mout/src/string/underscore.js deleted file mode 100644 index 75dd4649..00000000 --- a/truebit-implementation/node_modules/mout/src/string/underscore.js +++ /dev/null @@ -1,11 +0,0 @@ -define(['../lang/toString', './slugify', './unCamelCase'], function(toString, slugify, unCamelCase){ - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - return underscore; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/unescapeHtml.js b/truebit-implementation/node_modules/mout/src/string/unescapeHtml.js deleted file mode 100644 index ca890423..00000000 --- a/truebit-implementation/node_modules/mout/src/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['../lang/toString'], function (toString) { - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/�*39;/g , "'") - .replace(/"/g, '"'); - return str; - } - - return unescapeHtml; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/unescapeUnicode.js b/truebit-implementation/node_modules/mout/src/string/unescapeUnicode.js deleted file mode 100644 index d4a7ba1d..00000000 --- a/truebit-implementation/node_modules/mout/src/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['../lang/toString'], function(toString) { - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - return unescapeUnicode; - -}); diff --git a/truebit-implementation/node_modules/mout/src/string/unhyphenate.js b/truebit-implementation/node_modules/mout/src/string/unhyphenate.js deleted file mode 100644 index 6ac2fa4c..00000000 --- a/truebit-implementation/node_modules/mout/src/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - return unhyphenate; -}); diff --git a/truebit-implementation/node_modules/mout/src/string/upperCase.js b/truebit-implementation/node_modules/mout/src/string/upperCase.js deleted file mode 100644 index 8b2073e6..00000000 --- a/truebit-implementation/node_modules/mout/src/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['../lang/toString'], function(toString){ - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - return upperCase; -}); diff --git a/truebit-implementation/node_modules/mout/src/time.js b/truebit-implementation/node_modules/mout/src/time.js deleted file mode 100644 index 67c90685..00000000 --- a/truebit-implementation/node_modules/mout/src/time.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function(require){ - -//automatically generated, do not edit! -//run `node build` instead -return { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - -}); diff --git a/truebit-implementation/node_modules/mout/src/time/convert.js b/truebit-implementation/node_modules/mout/src/time/convert.js deleted file mode 100644 index 2de0cf2e..00000000 --- a/truebit-implementation/node_modules/mout/src/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ -define(function () { - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - return convert; - -}); diff --git a/truebit-implementation/node_modules/mout/src/time/now.js b/truebit-implementation/node_modules/mout/src/time/now.js deleted file mode 100644 index 4b2d03ca..00000000 --- a/truebit-implementation/node_modules/mout/src/time/now.js +++ /dev/null @@ -1,18 +0,0 @@ -define(function () { - - /** - * Get current time in miliseconds - */ - function now(){ - // yes, we defer the work to another function to allow mocking it - // during the tests - return now.get(); - } - - now.get = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - return now; - -}); diff --git a/truebit-implementation/node_modules/mout/src/time/parseMs.js b/truebit-implementation/node_modules/mout/src/time/parseMs.js deleted file mode 100644 index 964929ae..00000000 --- a/truebit-implementation/node_modules/mout/src/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -define(['../math/countSteps'], function(countSteps){ - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - return parseMs; -}); diff --git a/truebit-implementation/node_modules/mout/src/time/toTimeString.js b/truebit-implementation/node_modules/mout/src/time/toTimeString.js deleted file mode 100644 index edf18218..00000000 --- a/truebit-implementation/node_modules/mout/src/time/toTimeString.js +++ /dev/null @@ -1,23 +0,0 @@ -define(['../math/countSteps', '../number/pad'], function(countSteps, pad){ - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - return toTimeString; -}); diff --git a/truebit-implementation/node_modules/mout/string.js b/truebit-implementation/node_modules/mout/string.js deleted file mode 100644 index 6115811a..00000000 --- a/truebit-implementation/node_modules/mout/string.js +++ /dev/null @@ -1,46 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'WHITE_SPACES' : require('./string/WHITE_SPACES'), - 'camelCase' : require('./string/camelCase'), - 'contains' : require('./string/contains'), - 'crop' : require('./string/crop'), - 'endsWith' : require('./string/endsWith'), - 'escapeHtml' : require('./string/escapeHtml'), - 'escapeRegExp' : require('./string/escapeRegExp'), - 'escapeUnicode' : require('./string/escapeUnicode'), - 'hyphenate' : require('./string/hyphenate'), - 'insert' : require('./string/insert'), - 'interpolate' : require('./string/interpolate'), - 'lowerCase' : require('./string/lowerCase'), - 'lpad' : require('./string/lpad'), - 'ltrim' : require('./string/ltrim'), - 'makePath' : require('./string/makePath'), - 'normalizeLineBreaks' : require('./string/normalizeLineBreaks'), - 'pascalCase' : require('./string/pascalCase'), - 'properCase' : require('./string/properCase'), - 'removeNonASCII' : require('./string/removeNonASCII'), - 'removeNonWord' : require('./string/removeNonWord'), - 'repeat' : require('./string/repeat'), - 'replace' : require('./string/replace'), - 'replaceAccents' : require('./string/replaceAccents'), - 'rpad' : require('./string/rpad'), - 'rtrim' : require('./string/rtrim'), - 'sentenceCase' : require('./string/sentenceCase'), - 'slugify' : require('./string/slugify'), - 'startsWith' : require('./string/startsWith'), - 'stripHtmlTags' : require('./string/stripHtmlTags'), - 'trim' : require('./string/trim'), - 'truncate' : require('./string/truncate'), - 'typecast' : require('./string/typecast'), - 'unCamelCase' : require('./string/unCamelCase'), - 'underscore' : require('./string/underscore'), - 'unescapeHtml' : require('./string/unescapeHtml'), - 'unescapeUnicode' : require('./string/unescapeUnicode'), - 'unhyphenate' : require('./string/unhyphenate'), - 'upperCase' : require('./string/upperCase') -}; - - diff --git a/truebit-implementation/node_modules/mout/string/WHITE_SPACES.js b/truebit-implementation/node_modules/mout/string/WHITE_SPACES.js deleted file mode 100644 index 03e01254..00000000 --- a/truebit-implementation/node_modules/mout/string/WHITE_SPACES.js +++ /dev/null @@ -1,12 +0,0 @@ - - /** - * Contains all Unicode white-spaces. Taken from - * http://en.wikipedia.org/wiki/Whitespace_character. - */ - module.exports = [ - ' ', '\n', '\r', '\t', '\f', '\v', '\u00A0', '\u1680', '\u180E', - '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', - '\u2007', '\u2008', '\u2009', '\u200A', '\u2028', '\u2029', '\u202F', - '\u205F', '\u3000' - ]; - diff --git a/truebit-implementation/node_modules/mout/string/camelCase.js b/truebit-implementation/node_modules/mout/string/camelCase.js deleted file mode 100644 index aadb69a2..00000000 --- a/truebit-implementation/node_modules/mout/string/camelCase.js +++ /dev/null @@ -1,20 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var upperCase = require('./upperCase'); -var lowerCase = require('./lowerCase'); - /** - * Convert string to camelCase text. - */ - function camelCase(str){ - str = toString(str); - str = replaceAccents(str); - str = removeNonWord(str) - .replace(/[\-_]/g, ' ') //convert all hyphens and underscores to spaces - .replace(/\s[a-z]/g, upperCase) //convert first char of each word to UPPERCASE - .replace(/\s+/g, '') //remove spaces - .replace(/^[A-Z]/g, lowerCase); //convert first char to lowercase - return str; - } - module.exports = camelCase; - diff --git a/truebit-implementation/node_modules/mout/string/contains.js b/truebit-implementation/node_modules/mout/string/contains.js deleted file mode 100644 index cb22cae4..00000000 --- a/truebit-implementation/node_modules/mout/string/contains.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Searches for a given substring - */ - function contains(str, substring, fromIndex){ - str = toString(str); - substring = toString(substring); - return str.indexOf(substring, fromIndex) !== -1; - } - - module.exports = contains; - - diff --git a/truebit-implementation/node_modules/mout/string/crop.js b/truebit-implementation/node_modules/mout/string/crop.js deleted file mode 100644 index 53b93b49..00000000 --- a/truebit-implementation/node_modules/mout/string/crop.js +++ /dev/null @@ -1,12 +0,0 @@ -var toString = require('../lang/toString'); -var truncate = require('./truncate'); - /** - * Truncate string at full words. - */ - function crop(str, maxChars, append) { - str = toString(str); - return truncate(str, maxChars, append, true); - } - - module.exports = crop; - diff --git a/truebit-implementation/node_modules/mout/string/endsWith.js b/truebit-implementation/node_modules/mout/string/endsWith.js deleted file mode 100644 index d504e9dd..00000000 --- a/truebit-implementation/node_modules/mout/string/endsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string ends with specified suffix. - */ - function endsWith(str, suffix) { - str = toString(str); - suffix = toString(suffix); - - return str.indexOf(suffix, str.length - suffix.length) !== -1; - } - - module.exports = endsWith; - diff --git a/truebit-implementation/node_modules/mout/string/escapeHtml.js b/truebit-implementation/node_modules/mout/string/escapeHtml.js deleted file mode 100644 index e67c4b21..00000000 --- a/truebit-implementation/node_modules/mout/string/escapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escapes a string for insertion into HTML. - */ - function escapeHtml(str){ - str = toString(str) - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/'/g, ''') - .replace(/"/g, '"'); - return str; - } - - module.exports = escapeHtml; - - diff --git a/truebit-implementation/node_modules/mout/string/escapeRegExp.js b/truebit-implementation/node_modules/mout/string/escapeRegExp.js deleted file mode 100644 index 02d743cd..00000000 --- a/truebit-implementation/node_modules/mout/string/escapeRegExp.js +++ /dev/null @@ -1,12 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escape RegExp string chars. - */ - function escapeRegExp(str) { - return toString(str).replace(/\W/g,'\\$&'); - } - - module.exports = escapeRegExp; - - diff --git a/truebit-implementation/node_modules/mout/string/escapeUnicode.js b/truebit-implementation/node_modules/mout/string/escapeUnicode.js deleted file mode 100644 index ec649adf..00000000 --- a/truebit-implementation/node_modules/mout/string/escapeUnicode.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Escape string into unicode sequences - */ - function escapeUnicode(str, shouldEscapePrintable){ - str = toString(str); - return str.replace(/[\s\S]/g, function(ch){ - // skip printable ASCII chars if we should not escape them - if (!shouldEscapePrintable && (/[\x20-\x7E]/).test(ch)) { - return ch; - } - // we use "000" and slice(-4) for brevity, need to pad zeros, - // unicode escape always have 4 chars after "\u" - return '\\u'+ ('000'+ ch.charCodeAt(0).toString(16)).slice(-4); - }); - } - - module.exports = escapeUnicode; - - diff --git a/truebit-implementation/node_modules/mout/string/hyphenate.js b/truebit-implementation/node_modules/mout/string/hyphenate.js deleted file mode 100644 index 95e32436..00000000 --- a/truebit-implementation/node_modules/mout/string/hyphenate.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with hyphens, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function hyphenate(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "-"); - } - - module.exports = hyphenate; - diff --git a/truebit-implementation/node_modules/mout/string/insert.js b/truebit-implementation/node_modules/mout/string/insert.js deleted file mode 100644 index 8f042c6d..00000000 --- a/truebit-implementation/node_modules/mout/string/insert.js +++ /dev/null @@ -1,21 +0,0 @@ -var clamp = require('../math/clamp'); -var toString = require('../lang/toString'); - - /** - * Inserts a string at a given index. - */ - function insert(string, index, partial){ - string = toString(string); - - if (index < 0) { - index = string.length + index; - } - - index = clamp(index, 0, string.length); - - return string.substr(0, index) + partial + string.substr(index); - } - - module.exports = insert; - - diff --git a/truebit-implementation/node_modules/mout/string/interpolate.js b/truebit-implementation/node_modules/mout/string/interpolate.js deleted file mode 100644 index efbbf7dc..00000000 --- a/truebit-implementation/node_modules/mout/string/interpolate.js +++ /dev/null @@ -1,19 +0,0 @@ -var toString = require('../lang/toString'); -var get = require('../object/get'); - - var stache = /\{\{([^\}]+)\}\}/g; //mustache-like - - /** - * String interpolation - */ - function interpolate(template, replacements, syntax){ - template = toString(template); - var replaceFn = function(match, prop){ - return toString( get(replacements, prop) ); - }; - return template.replace(syntax || stache, replaceFn); - } - - module.exports = interpolate; - - diff --git a/truebit-implementation/node_modules/mout/string/lowerCase.js b/truebit-implementation/node_modules/mout/string/lowerCase.js deleted file mode 100644 index 30bb7ad9..00000000 --- a/truebit-implementation/node_modules/mout/string/lowerCase.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toLowerCase() - */ - function lowerCase(str){ - str = toString(str); - return str.toLowerCase(); - } - - module.exports = lowerCase; - diff --git a/truebit-implementation/node_modules/mout/string/lpad.js b/truebit-implementation/node_modules/mout/string/lpad.js deleted file mode 100644 index 63641d3f..00000000 --- a/truebit-implementation/node_modules/mout/string/lpad.js +++ /dev/null @@ -1,17 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function lpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - - return (str.length < minLen) ? - repeat(ch, minLen - str.length) + str : str; - } - - module.exports = lpad; - - diff --git a/truebit-implementation/node_modules/mout/string/ltrim.js b/truebit-implementation/node_modules/mout/string/ltrim.js deleted file mode 100644 index 23d7b33f..00000000 --- a/truebit-implementation/node_modules/mout/string/ltrim.js +++ /dev/null @@ -1,34 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from beginning of string. - */ - function ltrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var start = 0, - len = str.length, - charLen = chars.length, - found = true, - i, c; - - while (found && start < len) { - found = false; - i = -1; - c = str.charAt(start); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - start++; - break; - } - } - } - - return (start >= len) ? '' : str.substr(start, len); - } - - module.exports = ltrim; - diff --git a/truebit-implementation/node_modules/mout/string/makePath.js b/truebit-implementation/node_modules/mout/string/makePath.js deleted file mode 100644 index c337cecc..00000000 --- a/truebit-implementation/node_modules/mout/string/makePath.js +++ /dev/null @@ -1,15 +0,0 @@ -var join = require('../array/join'); -var slice = require('../array/slice'); - - /** - * Group arguments as path segments, if any of the args is `null` or an - * empty string it will be ignored from resulting path. - */ - function makePath(var_args){ - var result = join(slice(arguments), '/'); - // need to disconsider duplicate '/' after protocol (eg: 'http://') - return result.replace(/([^:\/]|^)\/{2,}/g, '$1/'); - } - - module.exports = makePath; - diff --git a/truebit-implementation/node_modules/mout/string/normalizeLineBreaks.js b/truebit-implementation/node_modules/mout/string/normalizeLineBreaks.js deleted file mode 100644 index 8a8dccfd..00000000 --- a/truebit-implementation/node_modules/mout/string/normalizeLineBreaks.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Convert line-breaks from DOS/MAC to a single standard (UNIX by default) - */ - function normalizeLineBreaks(str, lineEnd) { - str = toString(str); - lineEnd = lineEnd || '\n'; - - return str - .replace(/\r\n/g, lineEnd) // DOS - .replace(/\r/g, lineEnd) // Mac - .replace(/\n/g, lineEnd); // Unix - } - - module.exports = normalizeLineBreaks; - - diff --git a/truebit-implementation/node_modules/mout/string/pascalCase.js b/truebit-implementation/node_modules/mout/string/pascalCase.js deleted file mode 100644 index fd190353..00000000 --- a/truebit-implementation/node_modules/mout/string/pascalCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var camelCase = require('./camelCase'); -var upperCase = require('./upperCase'); - /** - * camelCase + UPPERCASE first char - */ - function pascalCase(str){ - str = toString(str); - return camelCase(str).replace(/^[a-z]/, upperCase); - } - - module.exports = pascalCase; - diff --git a/truebit-implementation/node_modules/mout/string/properCase.js b/truebit-implementation/node_modules/mout/string/properCase.js deleted file mode 100644 index 61636be4..00000000 --- a/truebit-implementation/node_modules/mout/string/properCase.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each word. - */ - function properCase(str){ - str = toString(str); - return lowerCase(str).replace(/^\w|\s\w/g, upperCase); - } - - module.exports = properCase; - diff --git a/truebit-implementation/node_modules/mout/string/removeNonASCII.js b/truebit-implementation/node_modules/mout/string/removeNonASCII.js deleted file mode 100644 index fb463816..00000000 --- a/truebit-implementation/node_modules/mout/string/removeNonASCII.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove non-printable ASCII chars - */ - function removeNonASCII(str){ - str = toString(str); - - // Matches non-printable ASCII chars - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters - return str.replace(/[^\x20-\x7E]/g, ''); - } - - module.exports = removeNonASCII; - diff --git a/truebit-implementation/node_modules/mout/string/removeNonWord.js b/truebit-implementation/node_modules/mout/string/removeNonWord.js deleted file mode 100644 index ffb05a95..00000000 --- a/truebit-implementation/node_modules/mout/string/removeNonWord.js +++ /dev/null @@ -1,14 +0,0 @@ -var toString = require('../lang/toString'); - // This pattern is generated by the _build/pattern-removeNonWord.js script - var PATTERN = /[^\x20\x2D0-9A-Z\x5Fa-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]/g; - - /** - * Remove non-word chars. - */ - function removeNonWord(str){ - str = toString(str); - return str.replace(PATTERN, ''); - } - - module.exports = removeNonWord; - diff --git a/truebit-implementation/node_modules/mout/string/repeat.js b/truebit-implementation/node_modules/mout/string/repeat.js deleted file mode 100644 index df0dc1e5..00000000 --- a/truebit-implementation/node_modules/mout/string/repeat.js +++ /dev/null @@ -1,26 +0,0 @@ -var toString = require('../lang/toString'); -var toInt = require('../number/toInt'); - - /** - * Repeat string n times - */ - function repeat(str, n){ - var result = ''; - str = toString(str); - n = toInt(n); - if (n < 1) { - return ''; - } - while (n > 0) { - if (n % 2) { - result += str; - } - n = Math.floor(n / 2); - str += str; - } - return result; - } - - module.exports = repeat; - - diff --git a/truebit-implementation/node_modules/mout/string/replace.js b/truebit-implementation/node_modules/mout/string/replace.js deleted file mode 100644 index 14433fc7..00000000 --- a/truebit-implementation/node_modules/mout/string/replace.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var toArray = require('../lang/toArray'); - - /** - * Replace string(s) with the replacement(s) in the source. - */ - function replace(str, search, replacements) { - str = toString(str); - search = toArray(search); - replacements = toArray(replacements); - - var searchLength = search.length, - replacementsLength = replacements.length; - - if (replacementsLength !== 1 && searchLength !== replacementsLength) { - throw new Error('Unequal number of searches and replacements'); - } - - var i = -1; - while (++i < searchLength) { - // Use the first replacement for all searches if only one - // replacement is provided - str = str.replace( - search[i], - replacements[(replacementsLength === 1) ? 0 : i]); - } - - return str; - } - - module.exports = replace; - - diff --git a/truebit-implementation/node_modules/mout/string/replaceAccents.js b/truebit-implementation/node_modules/mout/string/replaceAccents.js deleted file mode 100644 index bb221265..00000000 --- a/truebit-implementation/node_modules/mout/string/replaceAccents.js +++ /dev/null @@ -1,36 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces all accented chars with regular ones - */ - function replaceAccents(str){ - str = toString(str); - - // verifies if the String has accents and replace them - if (str.search(/[\xC0-\xFF]/g) > -1) { - str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); - } - return str; - } - module.exports = replaceAccents; - diff --git a/truebit-implementation/node_modules/mout/string/rpad.js b/truebit-implementation/node_modules/mout/string/rpad.js deleted file mode 100644 index 99f6378d..00000000 --- a/truebit-implementation/node_modules/mout/string/rpad.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var repeat = require('./repeat'); - - /** - * Pad string with `char` if its' length is smaller than `minLen` - */ - function rpad(str, minLen, ch) { - str = toString(str); - ch = ch || ' '; - return (str.length < minLen)? str + repeat(ch, minLen - str.length) : str; - } - - module.exports = rpad; - - diff --git a/truebit-implementation/node_modules/mout/string/rtrim.js b/truebit-implementation/node_modules/mout/string/rtrim.js deleted file mode 100644 index 66ba80e9..00000000 --- a/truebit-implementation/node_modules/mout/string/rtrim.js +++ /dev/null @@ -1,33 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); - /** - * Remove chars from end of string. - */ - function rtrim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - - var end = str.length - 1, - charLen = chars.length, - found = true, - i, c; - - while (found && end >= 0) { - found = false; - i = -1; - c = str.charAt(end); - - while (++i < charLen) { - if (c === chars[i]) { - found = true; - end--; - break; - } - } - } - - return (end >= 0) ? str.substring(0, end + 1) : ''; - } - - module.exports = rtrim; - diff --git a/truebit-implementation/node_modules/mout/string/sentenceCase.js b/truebit-implementation/node_modules/mout/string/sentenceCase.js deleted file mode 100644 index 354104c6..00000000 --- a/truebit-implementation/node_modules/mout/string/sentenceCase.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var lowerCase = require('./lowerCase'); -var upperCase = require('./upperCase'); - /** - * UPPERCASE first char of each sentence and lowercase other chars. - */ - function sentenceCase(str){ - str = toString(str); - - // Replace first char of each sentence (new line or after '.\s+') to - // UPPERCASE - return lowerCase(str).replace(/(^\w)|\.\s+(\w)/gm, upperCase); - } - module.exports = sentenceCase; - diff --git a/truebit-implementation/node_modules/mout/string/slugify.js b/truebit-implementation/node_modules/mout/string/slugify.js deleted file mode 100644 index 142f0d9b..00000000 --- a/truebit-implementation/node_modules/mout/string/slugify.js +++ /dev/null @@ -1,24 +0,0 @@ -var toString = require('../lang/toString'); -var replaceAccents = require('./replaceAccents'); -var removeNonWord = require('./removeNonWord'); -var trim = require('./trim'); - /** - * Convert to lower case, remove accents, remove non-word chars and - * replace spaces with the specified delimeter. - * Does not split camelCase text. - */ - function slugify(str, delimeter){ - str = toString(str); - - if (delimeter == null) { - delimeter = "-"; - } - str = replaceAccents(str); - str = removeNonWord(str); - str = trim(str) //should come after removeNonWord - .replace(/ +/g, delimeter) //replace spaces with delimeter - .toLowerCase(); - return str; - } - module.exports = slugify; - diff --git a/truebit-implementation/node_modules/mout/string/startsWith.js b/truebit-implementation/node_modules/mout/string/startsWith.js deleted file mode 100644 index bce2bd20..00000000 --- a/truebit-implementation/node_modules/mout/string/startsWith.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Checks if string starts with specified prefix. - */ - function startsWith(str, prefix) { - str = toString(str); - prefix = toString(prefix); - - return str.indexOf(prefix) === 0; - } - - module.exports = startsWith; - diff --git a/truebit-implementation/node_modules/mout/string/stripHtmlTags.js b/truebit-implementation/node_modules/mout/string/stripHtmlTags.js deleted file mode 100644 index 01d17b0e..00000000 --- a/truebit-implementation/node_modules/mout/string/stripHtmlTags.js +++ /dev/null @@ -1,11 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Remove HTML tags from string. - */ - function stripHtmlTags(str){ - str = toString(str); - - return str.replace(/<[^>]*>/g, ''); - } - module.exports = stripHtmlTags; - diff --git a/truebit-implementation/node_modules/mout/string/trim.js b/truebit-implementation/node_modules/mout/string/trim.js deleted file mode 100644 index 9652b0c7..00000000 --- a/truebit-implementation/node_modules/mout/string/trim.js +++ /dev/null @@ -1,15 +0,0 @@ -var toString = require('../lang/toString'); -var WHITE_SPACES = require('./WHITE_SPACES'); -var ltrim = require('./ltrim'); -var rtrim = require('./rtrim'); - /** - * Remove white-spaces from beginning and end of string. - */ - function trim(str, chars) { - str = toString(str); - chars = chars || WHITE_SPACES; - return ltrim(rtrim(str, chars), chars); - } - - module.exports = trim; - diff --git a/truebit-implementation/node_modules/mout/string/truncate.js b/truebit-implementation/node_modules/mout/string/truncate.js deleted file mode 100644 index a98d6c7d..00000000 --- a/truebit-implementation/node_modules/mout/string/truncate.js +++ /dev/null @@ -1,21 +0,0 @@ -var toString = require('../lang/toString'); -var trim = require('./trim'); - /** - * Limit number of chars. - */ - function truncate(str, maxChars, append, onlyFullWords){ - str = toString(str); - append = append || '...'; - maxChars = onlyFullWords? maxChars + 1 : maxChars; - - str = trim(str); - if(str.length <= maxChars){ - return str; - } - str = str.substr(0, maxChars - append.length); - //crop at last space or remove trailing whitespace - str = onlyFullWords? str.substr(0, str.lastIndexOf(' ')) : trim(str); - return str + append; - } - module.exports = truncate; - diff --git a/truebit-implementation/node_modules/mout/string/typecast.js b/truebit-implementation/node_modules/mout/string/typecast.js deleted file mode 100644 index c1386a49..00000000 --- a/truebit-implementation/node_modules/mout/string/typecast.js +++ /dev/null @@ -1,29 +0,0 @@ - - - var UNDEF; - - /** - * Parses string and convert it into a native value. - */ - function typecast(val) { - var r; - if ( val === null || val === 'null' ) { - r = null; - } else if ( val === 'true' ) { - r = true; - } else if ( val === 'false' ) { - r = false; - } else if ( val === UNDEF || val === 'undefined' ) { - r = UNDEF; - } else if ( val === '' || isNaN(val) ) { - //isNaN('') returns false - r = val; - } else { - //parseFloat(null || '') returns NaN - r = parseFloat(val); - } - return r; - } - - module.exports = typecast; - diff --git a/truebit-implementation/node_modules/mout/string/unCamelCase.js b/truebit-implementation/node_modules/mout/string/unCamelCase.js deleted file mode 100644 index 4968f378..00000000 --- a/truebit-implementation/node_modules/mout/string/unCamelCase.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('../lang/toString'); - - var CAMEL_CASE_BORDER = /([a-z\xE0-\xFF])([A-Z\xC0\xDF])/g; - - /** - * Add space between camelCase text. - */ - function unCamelCase(str, delimiter){ - if (delimiter == null) { - delimiter = ' '; - } - - function join(str, c1, c2) { - return c1 + delimiter + c2; - } - - str = toString(str); - str = str.replace(CAMEL_CASE_BORDER, join); - str = str.toLowerCase(); //add space between camelCase text - return str; - } - module.exports = unCamelCase; - diff --git a/truebit-implementation/node_modules/mout/string/underscore.js b/truebit-implementation/node_modules/mout/string/underscore.js deleted file mode 100644 index ebd6e2b7..00000000 --- a/truebit-implementation/node_modules/mout/string/underscore.js +++ /dev/null @@ -1,13 +0,0 @@ -var toString = require('../lang/toString'); -var slugify = require('./slugify'); -var unCamelCase = require('./unCamelCase'); - /** - * Replaces spaces with underscores, split camelCase text, remove non-word chars, remove accents and convert to lower case. - */ - function underscore(str){ - str = toString(str); - str = unCamelCase(str); - return slugify(str, "_"); - } - module.exports = underscore; - diff --git a/truebit-implementation/node_modules/mout/string/unescapeHtml.js b/truebit-implementation/node_modules/mout/string/unescapeHtml.js deleted file mode 100644 index ad1987dd..00000000 --- a/truebit-implementation/node_modules/mout/string/unescapeHtml.js +++ /dev/null @@ -1,18 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescapes HTML special chars - */ - function unescapeHtml(str){ - str = toString(str) - .replace(/&/g , '&') - .replace(/</g , '<') - .replace(/>/g , '>') - .replace(/�*39;/g , "'") - .replace(/"/g, '"'); - return str; - } - - module.exports = unescapeHtml; - - diff --git a/truebit-implementation/node_modules/mout/string/unescapeUnicode.js b/truebit-implementation/node_modules/mout/string/unescapeUnicode.js deleted file mode 100644 index 0b7fb73b..00000000 --- a/truebit-implementation/node_modules/mout/string/unescapeUnicode.js +++ /dev/null @@ -1,16 +0,0 @@ -var toString = require('../lang/toString'); - - /** - * Unescape unicode char sequences - */ - function unescapeUnicode(str){ - str = toString(str); - return str.replace(/\\u[0-9a-f]{4}/g, function(ch){ - var code = parseInt(ch.slice(2), 16); - return String.fromCharCode(code); - }); - } - - module.exports = unescapeUnicode; - - diff --git a/truebit-implementation/node_modules/mout/string/unhyphenate.js b/truebit-implementation/node_modules/mout/string/unhyphenate.js deleted file mode 100644 index 311dfa17..00000000 --- a/truebit-implementation/node_modules/mout/string/unhyphenate.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * Replaces hyphens with spaces. (only hyphens between word chars) - */ - function unhyphenate(str){ - str = toString(str); - return str.replace(/(\w)(-)(\w)/g, '$1 $3'); - } - module.exports = unhyphenate; - diff --git a/truebit-implementation/node_modules/mout/string/upperCase.js b/truebit-implementation/node_modules/mout/string/upperCase.js deleted file mode 100644 index 6c92552c..00000000 --- a/truebit-implementation/node_modules/mout/string/upperCase.js +++ /dev/null @@ -1,10 +0,0 @@ -var toString = require('../lang/toString'); - /** - * "Safer" String.toUpperCase() - */ - function upperCase(str){ - str = toString(str); - return str.toUpperCase(); - } - module.exports = upperCase; - diff --git a/truebit-implementation/node_modules/mout/time.js b/truebit-implementation/node_modules/mout/time.js deleted file mode 100644 index 9f533296..00000000 --- a/truebit-implementation/node_modules/mout/time.js +++ /dev/null @@ -1,12 +0,0 @@ - - -//automatically generated, do not edit! -//run `node build` instead -module.exports = { - 'convert' : require('./time/convert'), - 'now' : require('./time/now'), - 'parseMs' : require('./time/parseMs'), - 'toTimeString' : require('./time/toTimeString') -}; - - diff --git a/truebit-implementation/node_modules/mout/time/convert.js b/truebit-implementation/node_modules/mout/time/convert.js deleted file mode 100644 index 852a0f03..00000000 --- a/truebit-implementation/node_modules/mout/time/convert.js +++ /dev/null @@ -1,41 +0,0 @@ - - - /** - * convert time into another unit - */ - function convert(val, sourceUnitName, destinationUnitName){ - destinationUnitName = destinationUnitName || 'ms'; - return (val * getUnit(sourceUnitName)) / getUnit(destinationUnitName); - } - - - //TODO: maybe extract to a separate module - function getUnit(unitName){ - switch(unitName){ - case 'ms': - case 'millisecond': - return 1; - case 's': - case 'second': - return 1000; - case 'm': - case 'minute': - return 60000; - case 'h': - case 'hour': - return 3600000; - case 'd': - case 'day': - return 86400000; - case 'w': - case 'week': - return 604800000; - default: - throw new Error('"'+ unitName + '" is not a valid unit'); - } - } - - - module.exports = convert; - - diff --git a/truebit-implementation/node_modules/mout/time/now.js b/truebit-implementation/node_modules/mout/time/now.js deleted file mode 100644 index 0cedb18d..00000000 --- a/truebit-implementation/node_modules/mout/time/now.js +++ /dev/null @@ -1,18 +0,0 @@ - - - /** - * Get current time in miliseconds - */ - function now(){ - // yes, we defer the work to another function to allow mocking it - // during the tests - return now.get(); - } - - now.get = (typeof Date.now === 'function')? Date.now : function(){ - return +(new Date()); - }; - - module.exports = now; - - diff --git a/truebit-implementation/node_modules/mout/time/parseMs.js b/truebit-implementation/node_modules/mout/time/parseMs.js deleted file mode 100644 index 6d997976..00000000 --- a/truebit-implementation/node_modules/mout/time/parseMs.js +++ /dev/null @@ -1,17 +0,0 @@ -var countSteps = require('../math/countSteps'); - - /** - * Parse timestamp into an object. - */ - function parseMs(ms){ - return { - milliseconds : countSteps(ms, 1, 1000), - seconds : countSteps(ms, 1000, 60), - minutes : countSteps(ms, 60000, 60), - hours : countSteps(ms, 3600000, 24), - days : countSteps(ms, 86400000) - }; - } - - module.exports = parseMs; - diff --git a/truebit-implementation/node_modules/mout/time/toTimeString.js b/truebit-implementation/node_modules/mout/time/toTimeString.js deleted file mode 100644 index 101d69fc..00000000 --- a/truebit-implementation/node_modules/mout/time/toTimeString.js +++ /dev/null @@ -1,24 +0,0 @@ -var countSteps = require('../math/countSteps'); -var pad = require('../number/pad'); - - var HOUR = 3600000, - MINUTE = 60000, - SECOND = 1000; - - /** - * Format timestamp into a time string. - */ - function toTimeString(ms){ - var h = ms < HOUR ? 0 : countSteps(ms, HOUR), - m = ms < MINUTE ? 0 : countSteps(ms, MINUTE, 60), - s = ms < SECOND ? 0 : countSteps(ms, SECOND, 60), - str = ''; - - str += h? h + ':' : ''; - str += pad(m, 2) + ':'; - str += pad(s, 2); - - return str; - } - module.exports = toTimeString; - diff --git a/truebit-implementation/node_modules/ms/index.js b/truebit-implementation/node_modules/ms/index.js deleted file mode 100644 index 6a522b16..00000000 --- a/truebit-implementation/node_modules/ms/index.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isNaN(val) === false) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd'; - } - if (ms >= h) { - return Math.round(ms / h) + 'h'; - } - if (ms >= m) { - return Math.round(ms / m) + 'm'; - } - if (ms >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - return plural(ms, d, 'day') || - plural(ms, h, 'hour') || - plural(ms, m, 'minute') || - plural(ms, s, 'second') || - ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name; - } - return Math.ceil(ms / n) + ' ' + name + 's'; -} diff --git a/truebit-implementation/node_modules/ms/license.md b/truebit-implementation/node_modules/ms/license.md deleted file mode 100644 index 69b61253..00000000 --- a/truebit-implementation/node_modules/ms/license.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/ms/package.json b/truebit-implementation/node_modules/ms/package.json deleted file mode 100644 index f660d0c5..00000000 --- a/truebit-implementation/node_modules/ms/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "ms@2.0.0", - "_id": "ms@2.0.0", - "_inBundle": false, - "_integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "_location": "/ms", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "ms@2.0.0", - "name": "ms", - "escapedName": "ms", - "rawSpec": "2.0.0", - "saveSpec": null, - "fetchSpec": "2.0.0" - }, - "_requiredBy": [ - "/debug", - "/send" - ], - "_resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "_shasum": "5608aeadfc00be6c2901df5f9861788de0d597c8", - "_spec": "ms@2.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/debug", - "bugs": { - "url": "https://github.com/zeit/ms/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Tiny milisecond conversion utility", - "devDependencies": { - "eslint": "3.19.0", - "expect.js": "0.3.1", - "husky": "0.13.3", - "lint-staged": "3.4.1", - "mocha": "3.4.1" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "node": true, - "es6": true - } - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/zeit/ms#readme", - "license": "MIT", - "lint-staged": { - "*.js": [ - "npm run lint", - "prettier --single-quote --write", - "git add" - ] - }, - "main": "./index", - "name": "ms", - "repository": { - "type": "git", - "url": "git+https://github.com/zeit/ms.git" - }, - "scripts": { - "lint": "eslint lib/* bin/*", - "precommit": "lint-staged", - "test": "mocha tests.js" - }, - "version": "2.0.0" -} diff --git a/truebit-implementation/node_modules/ms/readme.md b/truebit-implementation/node_modules/ms/readme.md deleted file mode 100644 index 84a9974c..00000000 --- a/truebit-implementation/node_modules/ms/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# ms - -[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) -[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -``` - -### Convert from milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(ms('10 hours')) // "10h" -``` - -### Time format written-out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [node](https://nodejs.org) and in the browser. -- If a number is supplied to `ms`, a string with a unit is returned. -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`). -- If you pass a string with a number and a valid unit, the number of equivalent ms is returned. - -## Caught a bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/truebit-implementation/node_modules/mz/HISTORY.md b/truebit-implementation/node_modules/mz/HISTORY.md deleted file mode 100644 index 6ebee21d..00000000 --- a/truebit-implementation/node_modules/mz/HISTORY.md +++ /dev/null @@ -1,66 +0,0 @@ - -2.7.0 / 2017-09-13 -================== - - * feat: support fs.copyFile (#58) - -2.6.0 / 2016-11-22 -================== - - * Added fdatasync to fs api (#46) - -2.5.0 / 2016-11-04 -================== - - * feat: support fs.mkdtemp - -2.4.0 / 2016-03-23 -================== - - * add `fs.truncate()` [#34](https://github.com/normalize/mz/pull/34) - -2.3.1 / 2016-02-01 -================== - - * update `any-promise@v1` - -2.3.0 / 2016-01-30 -================== - - * feat(package): switch to `any-promise` to support more promise engines - -2.2.0 / 2016-01-24 -================== - - * feat(package): add index.js to files - -2.1.0 / 2015-10-15 -================== - - * support for readline library - -2.0.0 / 2015-05-24 -================== - - * support callbacks as well - -1.2.0 / 2014-12-16 -================== - - * refactor promisification to `thenify` and `thenify-all` - -1.1.0 / 2014-11-14 -================== - - * use `graceful-fs` if available - -1.0.1 / 2014-08-18 -================== - - * don't use `bluebird.promisify()` - unnecessarily wraps runtime errors, causing issues - -1.0.0 / 2014-06-18 -================== - - * use `bluebird` by default if found - * support node 0.8 diff --git a/truebit-implementation/node_modules/mz/LICENSE b/truebit-implementation/node_modules/mz/LICENSE deleted file mode 100644 index 1835f3d9..00000000 --- a/truebit-implementation/node_modules/mz/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/mz/README.md b/truebit-implementation/node_modules/mz/README.md deleted file mode 100644 index 50d6557c..00000000 --- a/truebit-implementation/node_modules/mz/README.md +++ /dev/null @@ -1,106 +0,0 @@ - -# MZ - Modernize node.js - -[![NPM version][npm-image]][npm-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] -[![Dependency Status][david-image]][david-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -Modernize node.js to current ECMAScript specifications! -node.js will not update their API to ES6+ [for a while](https://github.com/joyent/node/issues/7549). -This library is a wrapper for various aspects of node.js' API. - -## Installation and Usage - -Set `mz` as a dependency and install it. - -```bash -npm i mz -``` - -Then prefix the relevant `require()`s with `mz/`: - -```js -var fs = require('mz/fs') - -fs.exists(__filename).then(function (exists) { - if (exists) // do something -}) -``` - -With ES2017, this will allow you to use async functions cleanly with node's core API: - -```js -const fs = require('mz/fs') - - -async function doSomething () { - if (await fs.exists(__filename)) // do something -} -``` - -## Promisification - -Many node methods are converted into promises. -Any properties that are deprecated or aren't asynchronous will simply be proxied. -The modules wrapped are: - -- `child_process` -- `crypto` -- `dns` -- `fs` (uses `graceful-fs` if available) -- `readline` -- `zlib` - -```js -var exec = require('mz/child_process').exec - -exec('node --version').then(function (stdout) { - console.log(stdout) -}) -``` - -## Promise Engine - -`mz` uses [`any-promise`](https://github.com/kevinbeaty/any-promise). - -## FAQ - -### Can I use this in production? - -Yes, Node 4.x ships with stable promises support. For older engines, -you should probably install your own promise implementation and register it with -`require('any-promise/register')('bluebird')`. - -### Will this make my app faster? - -Nope, probably slower actually. - -### Can I add more features? - -Sure. -Open an issue. - -Currently, the plans are to eventually support: - -- New APIs in node.js that are not available in older versions of node -- ECMAScript7 Streams - -[bluebird]: https://github.com/petkaantonov/bluebird - -[npm-image]: https://img.shields.io/npm/v/mz.svg?style=flat-square -[npm-url]: https://npmjs.org/package/mz -[github-tag]: http://img.shields.io/github/tag/normalize/mz.svg?style=flat-square -[github-url]: https://github.com/normalize/mz/tags -[travis-image]: https://img.shields.io/travis/normalize/mz.svg?style=flat-square -[travis-url]: https://travis-ci.org/normalize/mz -[coveralls-image]: https://img.shields.io/coveralls/normalize/mz.svg?style=flat-square -[coveralls-url]: https://coveralls.io/r/normalize/mz?branch=master -[david-image]: http://img.shields.io/david/normalize/mz.svg?style=flat-square -[david-url]: https://david-dm.org/normalize/mz -[license-image]: http://img.shields.io/npm/l/mz.svg?style=flat-square -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/mz.svg?style=flat-square -[downloads-url]: https://npmjs.org/package/mz diff --git a/truebit-implementation/node_modules/mz/child_process.js b/truebit-implementation/node_modules/mz/child_process.js deleted file mode 100644 index 06d5d9e3..00000000 --- a/truebit-implementation/node_modules/mz/child_process.js +++ /dev/null @@ -1,8 +0,0 @@ - -require('thenify-all').withCallback( - require('child_process'), - exports, [ - 'exec', - 'execFile', - ] -) diff --git a/truebit-implementation/node_modules/mz/crypto.js b/truebit-implementation/node_modules/mz/crypto.js deleted file mode 100644 index d8cff57f..00000000 --- a/truebit-implementation/node_modules/mz/crypto.js +++ /dev/null @@ -1,9 +0,0 @@ - -require('thenify-all').withCallback( - require('crypto'), - exports, [ - 'pbkdf2', - 'pseudoRandomBytes', - 'randomBytes' - ] -) diff --git a/truebit-implementation/node_modules/mz/dns.js b/truebit-implementation/node_modules/mz/dns.js deleted file mode 100644 index c1035822..00000000 --- a/truebit-implementation/node_modules/mz/dns.js +++ /dev/null @@ -1,16 +0,0 @@ - -require('thenify-all').withCallback( - require('dns'), - exports, [ - 'lookup', - 'resolve', - 'resolve4', - 'resolve6', - 'resolveCname', - 'resolveMx', - 'resolveNs', - 'resolveSrv', - 'resolveTxt', - 'reverse' - ] -) diff --git a/truebit-implementation/node_modules/mz/fs.js b/truebit-implementation/node_modules/mz/fs.js deleted file mode 100644 index 1cfd2d77..00000000 --- a/truebit-implementation/node_modules/mz/fs.js +++ /dev/null @@ -1,62 +0,0 @@ - -var Promise = require('any-promise') -var fs -try { - fs = require('graceful-fs') -} catch(err) { - fs = require('fs') -} - -var api = [ - 'appendFile', - 'chmod', - 'chown', - 'close', - 'fchmod', - 'fchown', - 'fdatasync', - 'fstat', - 'fsync', - 'ftruncate', - 'futimes', - 'lchown', - 'link', - 'lstat', - 'mkdir', - 'open', - 'read', - 'readFile', - 'readdir', - 'readlink', - 'realpath', - 'rename', - 'rmdir', - 'stat', - 'symlink', - 'truncate', - 'unlink', - 'utimes', - 'write', - 'writeFile' -] - -typeof fs.access === 'function' && api.push('access') -typeof fs.copyFile === 'function' && api.push('copyFile') -typeof fs.mkdtemp === 'function' && api.push('mkdtemp') - -require('thenify-all').withCallback(fs, exports, api) - -exports.exists = function (filename, callback) { - // callback - if (typeof callback === 'function') { - return fs.stat(filename, function (err) { - callback(null, !err); - }) - } - // or promise - return new Promise(function (resolve) { - fs.stat(filename, function (err) { - resolve(!err) - }) - }) -} diff --git a/truebit-implementation/node_modules/mz/index.js b/truebit-implementation/node_modules/mz/index.js deleted file mode 100644 index cef508dc..00000000 --- a/truebit-implementation/node_modules/mz/index.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - fs: require('./fs'), - dns: require('./dns'), - zlib: require('./zlib'), - crypto: require('./crypto'), - readline: require('./readline'), - child_process: require('./child_process') -} diff --git a/truebit-implementation/node_modules/mz/package.json b/truebit-implementation/node_modules/mz/package.json deleted file mode 100644 index 13234d65..00000000 --- a/truebit-implementation/node_modules/mz/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "mz@^2.6.0", - "_id": "mz@2.7.0", - "_inBundle": false, - "_integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "_location": "/mz", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mz@^2.6.0", - "name": "mz", - "escapedName": "mz", - "rawSpec": "^2.6.0", - "saveSpec": null, - "fetchSpec": "^2.6.0" - }, - "_requiredBy": [ - "/fs-promise" - ], - "_resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "_shasum": "95008057a56cafadc2bc63dde7f9ff6955948e32", - "_spec": "mz@^2.6.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/fs-promise", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/normalize/mz/issues" - }, - "bundleDependencies": false, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - }, - "deprecated": false, - "description": "modernize node.js to current ECMAScript standards", - "devDependencies": { - "bluebird": "^3.0.0", - "istanbul": "^0.4.0", - "mocha": "^3.0.0" - }, - "files": [ - "index.js", - "child_process.js", - "crypto.js", - "dns.js", - "fs.js", - "readline.js", - "zlib.js" - ], - "homepage": "https://github.com/normalize/mz#readme", - "keywords": [ - "promisify", - "promise", - "thenify", - "then", - "es6" - ], - "license": "MIT", - "name": "mz", - "repository": { - "type": "git", - "url": "git+https://github.com/normalize/mz.git" - }, - "scripts": { - "test": "mocha --reporter spec", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" - }, - "version": "2.7.0" -} diff --git a/truebit-implementation/node_modules/mz/readline.js b/truebit-implementation/node_modules/mz/readline.js deleted file mode 100644 index eb70c46f..00000000 --- a/truebit-implementation/node_modules/mz/readline.js +++ /dev/null @@ -1,64 +0,0 @@ -var readline = require('readline') -var Promise = require('any-promise') -var objectAssign = require('object-assign') -var Interface = readline.Interface - -function wrapCompleter (completer) { - if (completer.length === 2) return completer - - return function (line, cb) { - var result = completer(line) - - if (typeof result.then !== 'function') { - return cb(null, result) - } - - result.catch(cb).then(function (result) { - process.nextTick(function () { cb(null, result) }) - }) - } -} - -function InterfaceAsPromised (input, output, completer, terminal) { - if (arguments.length === 1) { - var options = input - - if (typeof options.completer === 'function') { - options = objectAssign({}, options, { - completer: wrapCompleter(options.completer) - }) - } - - Interface.call(this, options) - } else { - if (typeof completer === 'function') { - completer = wrapCompleter(completer) - } - - Interface.call(this, input, output, completer, terminal) - } -} - -InterfaceAsPromised.prototype = Object.create(Interface.prototype) - -InterfaceAsPromised.prototype.question = function (question, callback) { - if (typeof callback === 'function') { - return Interface.prototype.question.call(this, question, callback) - } - - var self = this - return new Promise(function (resolve) { - Interface.prototype.question.call(self, question, resolve) - }) -} - -objectAssign(exports, readline, { - Interface: InterfaceAsPromised, - createInterface: function (input, output, completer, terminal) { - if (arguments.length === 1) { - return new InterfaceAsPromised(input) - } - - return new InterfaceAsPromised(input, output, completer, terminal) - } -}) diff --git a/truebit-implementation/node_modules/mz/zlib.js b/truebit-implementation/node_modules/mz/zlib.js deleted file mode 100644 index a05c26a6..00000000 --- a/truebit-implementation/node_modules/mz/zlib.js +++ /dev/null @@ -1,13 +0,0 @@ - -require('thenify-all').withCallback( - require('zlib'), - exports, [ - 'deflate', - 'deflateRaw', - 'gzip', - 'gunzip', - 'inflate', - 'inflateRaw', - 'unzip', - ] -) diff --git a/truebit-implementation/node_modules/nan/CHANGELOG.md b/truebit-implementation/node_modules/nan/CHANGELOG.md deleted file mode 100644 index 091cdd1c..00000000 --- a/truebit-implementation/node_modules/nan/CHANGELOG.md +++ /dev/null @@ -1,492 +0,0 @@ -# NAN ChangeLog - -**Version 2.10.0: current Node 9.8.0, Node 0.12: 0.12.18, Node 0.10: 0.10.48, iojs: 3.3.1** - -### 2.10.0 Mar 16 2018 - - - Deprecation: Deprecate `MakeCallback` 5e92b19a59e194241d6a658bd6ff7bfbda372950 - - Feature: add `Nan::Call` overload 4482e1242fe124d166fc1a5b2be3c1cc849fe452 - - Feature: add more `Nan::Call` overloads 8584e63e6d04c7d2eb8c4a664e4ef57d70bf672b - - Feature: Fix deprecation warnings for Node 10 1caf258243b0602ed56922bde74f1c91b0cbcb6a - -### 2.9.2 Feb 22 2018 - - - Bugfix: Bandaid for async hooks 212bd2f849be14ef1b02fc85010b053daa24252b - -### 2.9.1 Feb 22 2018 - - - Bugfix: Avoid deprecation warnings in deprecated `Nan::Callback::operator()` 372b14d91289df4604b0f81780709708c45a9aa4 - - Bugfix: Avoid deprecation warnings in `Nan::JSON` 3bc294bce0b7d0a3ee4559926303e5ed4866fda2 - -### 2.9.0 Feb 22 2018 - - - Deprecation: Deprecate legacy `Callback::Call` 6dd5fa690af61ca3523004b433304c581b3ea309 - - Feature: introduce `AsyncResource` class 90c0a179c0d8cb5fd26f1a7d2b1d6231eb402d48o - - Feature: Add context aware `Nan::Callback::Call` functions 7169e09fb088418b6e388222e88b4c13f07ebaee - - Feature: Make `AsyncWorker` context aware 066ba21a6fb9e2b5230c9ed3a6fc51f1211736a4 - - Feature: add `Callback` overload to `Nan::Call` 5328daf66e202658c1dc0d916c3aaba99b3cc606 - - Bugfix: fix warning: suggest parentheses around `&&` within `||` b2bb63d68b8ae623a526b542764e1ac82319cb2c - - Bugfix: Fix compilation on io.js 3 d06114dba0a522fb436f0c5f47b994210968cd7b - -### 2.8.0 Nov 15 2017 - - - Deprecation: Deprecate `Nan::ForceSet` in favor of `Nan::DefineOwnProperty()` 95cbb976d6fbbba88ba0f86dd188223a8591b4e7 - - Feature: Add `Nan::AsyncProgressQueueWorker` a976636ecc2ef617d1b061ce4a6edf39923691cb - - Feature: Add `Nan::DefineOwnProperty()` 95cbb976d6fbbba88ba0f86dd188223a8591b4e7 - - Bugfix: Fix compiling on io.js 1 & 2 82705a64503ce60c62e98df5bd02972bba090900 - - Bugfix: Use DefineOwnProperty instead of ForceSet 95cbb976d6fbbba88ba0f86dd188223a8591b4e7 - -### 2.7.0 Aug 30 2017 - - - Feature: Add `Nan::To()` overload. b93280670c9f6da42ed4cf6cbf085ffdd87bd65b - - Bugfix: Fix ternary in `Nan::MaybeLocal::FromMaybe()`. 79a26f7d362e756a9524e672a82c3d603b542867 - -### 2.6.2 Apr 12 2017 - - - Bugfix: Fix v8::JSON::Parse() deprecation warning. 87f6a3c65815fa062296a994cc863e2fa124867d - -### 2.6.1 Apr 6 2017 - - - Bugfix: nan_json.h: fix build breakage in Node 6 ac8d47dc3c10bfbf3f15a6b951633120c0ee6d51 - -### 2.6.0 Apr 6 2017 - - - Feature: nan: add support for JSON::Parse & Stringify b533226c629cce70e1932a873bb6f849044a56c5 - -### 2.5.1 Jan 23 2017 - - - Bugfix: Fix disappearing handle for private value 6a80995694f162ef63dbc9948fbefd45d4485aa0 - - Bugfix: Add missing scopes a93b8bae6bc7d32a170db6e89228b7f60ee57112 - - Bugfix: Use string::data instead of string::front in NewOneByteString d5f920371e67e1f3b268295daee6e83af86b6e50 - -### 2.5.0 Dec 21 2016 - - - Feature: Support Private accessors a86255cb357e8ad8ccbf1f6a4a901c921e39a178 - - Bugfix: Abort in delete operators that shouldn't be called 0fe38215ff8581703967dfd26c12793feb960018 - -### 2.4.0 Jul 10 2016 - - - Feature: Rewrite Callback to add Callback::Reset c4cf44d61f8275cd5f7b0c911d7a806d4004f649 - - Feature: AsyncProgressWorker: add template types for .send 1242c9a11a7ed481c8f08ec06316385cacc513d0 - - Bugfix: Add constness to old Persistent comparison operators bd43cb9982c7639605d60fd073efe8cae165d9b2 - -### 2.3.5 May 31 2016 - - - Bugfix: Replace NAN_INLINE with 'inline' keyword. 71819d8725f822990f439479c9aba3b240804909 - -### 2.3.4 May 31 2016 - - - Bugfix: Remove V8 deprecation warnings 0592fb0a47f3a1c7763087ebea8e1138829f24f9 - - Bugfix: Fix new versions not to use WeakCallbackInfo::IsFirstPass 615c19d9e03d4be2049c10db0151edbc3b229246 - - Bugfix: Make ObjectWrap::handle() const d19af99595587fe7a26bd850af6595c2a7145afc - - Bugfix: Fix compilation errors related to 0592fb0a47f3a1c7763087ebea8e1138829f24f9 e9191c525b94f652718325e28610a1adcf90fed8 - -### 2.3.3 May 4 2016 - - - Bugfix: Refactor SetMethod() to deal with v8::Templates (#566) b9083cf6d5de6ebe6bcb49c7502fbb7c0d9ddda8 - -### 2.3.2 Apr 27 2016 - - - Bugfix: Fix compilation on outdated versions due to Handle removal f8b7c875d04d425a41dfd4f3f8345bc3a11e6c52 - -### 2.3.1 Apr 27 2016 - - - Bugfix: Don't use deprecated v8::Template::Set() in SetMethod a90951e9ea70fa1b3836af4b925322919159100e - -### 2.3.0 Apr 27 2016 - - - Feature: added Signal() for invoking async callbacks without sending data from AsyncProgressWorker d8adba45f20e077d00561b20199133620c990b38 - - Bugfix: Don't use deprecated v8::Template::Set() 00dacf0a4b86027415867fa7f1059acc499dcece - -### 2.2.1 Mar 29 2016 - - - Bugfix: Use NewFromUnsigned in ReturnValue::Set(uint32_t i) for pre_12 3a18f9bdce29826e0e4c217854bc476918241a58 - - Performance: Remove unneeeded nullptr checks b715ef44887931c94f0d1605b3b1a4156eebece9 - -### 2.2.0 Jan 9 2016 - - - Feature: Add Function::Call wrapper 4c157474dacf284d125c324177b45aa5dabc08c6 - - Feature: Rename GC*logueCallback to GCCallback for > 4.0 3603435109f981606d300eb88004ca101283acec - - Bugfix: Fix Global::Pass for old versions 367e82a60fbaa52716232cc89db1cc3f685d77d9 - - Bugfix: Remove weird MaybeLocal wrapping of what already is a MaybeLocal 23b4590db10c2ba66aee2338aebe9751c4cb190b - -### 2.1.0 Oct 8 2015 - - - Deprecation: Deprecate NanErrnoException in favor of ErrnoException 0af1ca4cf8b3f0f65ed31bc63a663ab3319da55c - - Feature: added helper class for accessing contents of typedarrays 17b51294c801e534479d5463697a73462d0ca555 - - Feature: [Maybe types] Add MakeMaybe(...) 48d7b53d9702b0c7a060e69ea10fea8fb48d814d - - Feature: new: allow utf16 string with length 66ac6e65c8ab9394ef588adfc59131b3b9d8347b - - Feature: Introduce SetCallHandler and SetCallAsFunctionHandler 7764a9a115d60ba10dc24d86feb0fbc9b4f75537 - - Bugfix: Enable creating Locals from Globals under Node 0.10. 9bf9b8b190821af889790fdc18ace57257e4f9ff - - Bugfix: Fix issue #462 where PropertyCallbackInfo data is not stored safely. 55f50adedd543098526c7b9f4fffd607d3f9861f - -### 2.0.9 Sep 8 2015 - - - Bugfix: EscapableHandleScope in Nan::NewBuffer for Node 0.8 and 0.10 b1654d7 - -### 2.0.8 Aug 28 2015 - - - Work around duplicate linking bug in clang 11902da - -### 2.0.7 Aug 26 2015 - - - Build: Repackage - -### 2.0.6 Aug 26 2015 - - - Bugfix: Properly handle null callback in FunctionTemplate factory 6e99cb1 - - Bugfix: Remove unused static std::map instances 525bddc - - Bugfix: Make better use of maybe versions of APIs bfba85b - - Bugfix: Fix shadowing issues with handle in ObjectWrap 0a9072d - -### 2.0.5 Aug 10 2015 - - - Bugfix: Reimplement weak callback in ObjectWrap 98d38c1 - - Bugfix: Make sure callback classes are not assignable, copyable or movable 81f9b1d - -### 2.0.4 Aug 6 2015 - - - Build: Repackage - -### 2.0.3 Aug 6 2015 - - - Bugfix: Don't use clang++ / g++ syntax extension. 231450e - -### 2.0.2 Aug 6 2015 - - - Build: Repackage - -### 2.0.1 Aug 6 2015 - - - Bugfix: Add workaround for missing REPLACE_INVALID_UTF8 60d6687 - - Bugfix: Reimplement ObjectWrap from scratch to prevent memory leaks 6484601 - - Bugfix: Fix Persistent leak in FunctionCallbackInfo and PropertyCallbackInfo 641ef5f - - Bugfix: Add missing overload for Nan::NewInstance that takes argc/argv 29450ed - -### 2.0.0 Jul 31 2015 - - - Change: Renamed identifiers with leading underscores b5932b4 - - Change: Replaced NanObjectWrapHandle with class NanObjectWrap 464f1e1 - - Change: Replace NanScope and NanEscpableScope macros with classes 47751c4 - - Change: Rename NanNewBufferHandle to NanNewBuffer 6745f99 - - Change: Rename NanBufferUse to NanNewBuffer 3e8b0a5 - - Change: Rename NanNewBuffer to NanCopyBuffer d6af78d - - Change: Remove Nan prefix from all names 72d1f67 - - Change: Update Buffer API for new upstream changes d5d3291 - - Change: Rename Scope and EscapableScope to HandleScope and EscapableHandleScope 21a7a6a - - Change: Get rid of Handles e6c0daf - - Feature: Support io.js 3 with V8 4.4 - - Feature: Introduce NanPersistent 7fed696 - - Feature: Introduce NanGlobal 4408da1 - - Feature: Added NanTryCatch 10f1ca4 - - Feature: Update for V8 v4.3 4b6404a - - Feature: Introduce NanNewOneByteString c543d32 - - Feature: Introduce namespace Nan 67ed1b1 - - Removal: Remove NanLocker and NanUnlocker dd6e401 - - Removal: Remove string converters, except NanUtf8String, which now follows the node implementation b5d00a9 - - Removal: Remove NanReturn* macros d90a25c - - Removal: Remove HasInstance e8f84fe - - -### 1.9.0 Jul 31 2015 - - - Feature: Added `NanFatalException` 81d4a2c - - Feature: Added more error types 4265f06 - - Feature: Added dereference and function call operators to NanCallback c4b2ed0 - - Feature: Added indexed GetFromPersistent and SaveToPersistent edd510c - - Feature: Added more overloads of SaveToPersistent and GetFromPersistent 8b1cef6 - - Feature: Added NanErrnoException dd87d9e - - Correctness: Prevent assign, copy, and move for classes that do not support it 1f55c59, 4b808cb, c96d9b2, fba4a29, 3357130 - - Deprecation: Deprecate `NanGetPointerSafe` and `NanSetPointerSafe` 81d4a2c - - Deprecation: Deprecate `NanBooleanOptionValue` and `NanUInt32OptionValue` 0ad254b - -### 1.8.4 Apr 26 2015 - - - Build: Repackage - -### 1.8.3 Apr 26 2015 - - - Bugfix: Include missing header 1af8648 - -### 1.8.2 Apr 23 2015 - - - Build: Repackage - -### 1.8.1 Apr 23 2015 - - - Bugfix: NanObjectWrapHandle should take a pointer 155f1d3 - -### 1.8.0 Apr 23 2015 - - - Feature: Allow primitives with NanReturnValue 2e4475e - - Feature: Added comparison operators to NanCallback 55b075e - - Feature: Backport thread local storage 15bb7fa - - Removal: Remove support for signatures with arguments 8a2069d - - Correcteness: Replaced NanObjectWrapHandle macro with function 0bc6d59 - -### 1.7.0 Feb 28 2015 - - - Feature: Made NanCallback::Call accept optional target 8d54da7 - - Feature: Support atom-shell 0.21 0b7f1bb - -### 1.6.2 Feb 6 2015 - - - Bugfix: NanEncode: fix argument type for node::Encode on io.js 2be8639 - -### 1.6.1 Jan 23 2015 - - - Build: version bump - -### 1.5.3 Jan 23 2015 - - - Build: repackage - -### 1.6.0 Jan 23 2015 - - - Deprecated `NanNewContextHandle` in favor of `NanNew` 49259af - - Support utility functions moved in newer v8 versions (Node 0.11.15, io.js 1.0) a0aa179 - - Added `NanEncode`, `NanDecodeBytes` and `NanDecodeWrite` 75e6fb9 - -### 1.5.2 Jan 23 2015 - - - Bugfix: Fix non-inline definition build error with clang++ 21d96a1, 60fadd4 - - Bugfix: Readded missing String constructors 18d828f - - Bugfix: Add overload handling NanNew(..) 5ef813b - - Bugfix: Fix uv_work_cb versioning 997e4ae - - Bugfix: Add function factory and test 4eca89c - - Bugfix: Add object template factory and test cdcb951 - - Correctness: Lifted an io.js related typedef c9490be - - Correctness: Make explicit downcasts of String lengths 00074e6 - - Windows: Limit the scope of disabled warning C4530 83d7deb - -### 1.5.1 Jan 15 2015 - - - Build: version bump - -### 1.4.3 Jan 15 2015 - - - Build: version bump - -### 1.4.2 Jan 15 2015 - - - Feature: Support io.js 0dbc5e8 - -### 1.5.0 Jan 14 2015 - - - Feature: Support io.js b003843 - - Correctness: Improved NanNew internals 9cd4f6a - - Feature: Implement progress to NanAsyncWorker 8d6a160 - -### 1.4.1 Nov 8 2014 - - - Bugfix: Handle DEBUG definition correctly - - Bugfix: Accept int as Boolean - -### 1.4.0 Nov 1 2014 - - - Feature: Added NAN_GC_CALLBACK 6a5c245 - - Performance: Removed unnecessary local handle creation 18a7243, 41fe2f8 - - Correctness: Added constness to references in NanHasInstance 02c61cd - - Warnings: Fixed spurious warnings from -Wundef and -Wshadow, 541b122, 99d8cb6 - - Windoze: Shut Visual Studio up when compiling 8d558c1 - - License: Switch to plain MIT from custom hacked MIT license 11de983 - - Build: Added test target to Makefile e232e46 - - Performance: Removed superfluous scope in NanAsyncWorker f4b7821 - - Sugar/Feature: Added NanReturnThis() and NanReturnHolder() shorthands 237a5ff, d697208 - - Feature: Added suitable overload of NanNew for v8::Integer::NewFromUnsigned b27b450 - -### 1.3.0 Aug 2 2014 - - - Added NanNew(std::string) - - Added NanNew(std::string&) - - Added NanAsciiString helper class - - Added NanUtf8String helper class - - Added NanUcs2String helper class - - Deprecated NanRawString() - - Deprecated NanCString() - - Added NanGetIsolateData(v8::Isolate *isolate) - - Added NanMakeCallback(v8::Handle target, v8::Handle func, int argc, v8::Handle* argv) - - Added NanMakeCallback(v8::Handle target, v8::Handle symbol, int argc, v8::Handle* argv) - - Added NanMakeCallback(v8::Handle target, const char* method, int argc, v8::Handle* argv) - - Added NanSetTemplate(v8::Handle templ, v8::Handle name , v8::Handle value, v8::PropertyAttribute attributes) - - Added NanSetPrototypeTemplate(v8::Local templ, v8::Handle name, v8::Handle value, v8::PropertyAttribute attributes) - - Added NanSetInstanceTemplate(v8::Local templ, const char *name, v8::Handle value) - - Added NanSetInstanceTemplate(v8::Local templ, v8::Handle name, v8::Handle value, v8::PropertyAttribute attributes) - -### 1.2.0 Jun 5 2014 - - - Add NanSetPrototypeTemplate - - Changed NAN_WEAK_CALLBACK internals, switched _NanWeakCallbackData to class, - introduced _NanWeakCallbackDispatcher - - Removed -Wno-unused-local-typedefs from test builds - - Made test builds Windows compatible ('Sleep()') - -### 1.1.2 May 28 2014 - - - Release to fix more stuff-ups in 1.1.1 - -### 1.1.1 May 28 2014 - - - Release to fix version mismatch in nan.h and lack of changelog entry for 1.1.0 - -### 1.1.0 May 25 2014 - - - Remove nan_isolate, use v8::Isolate::GetCurrent() internally instead - - Additional explicit overloads for NanNew(): (char*,int), (uint8_t*[,int]), - (uint16_t*[,int), double, int, unsigned int, bool, v8::String::ExternalStringResource*, - v8::String::ExternalAsciiStringResource* - - Deprecate NanSymbol() - - Added SetErrorMessage() and ErrorMessage() to NanAsyncWorker - -### 1.0.0 May 4 2014 - - - Heavy API changes for V8 3.25 / Node 0.11.13 - - Use cpplint.py - - Removed NanInitPersistent - - Removed NanPersistentToLocal - - Removed NanFromV8String - - Removed NanMakeWeak - - Removed NanNewLocal - - Removed NAN_WEAK_CALLBACK_OBJECT - - Removed NAN_WEAK_CALLBACK_DATA - - Introduce NanNew, replaces NanNewLocal, NanPersistentToLocal, adds many overloaded typed versions - - Introduce NanUndefined, NanNull, NanTrue and NanFalse - - Introduce NanEscapableScope and NanEscapeScope - - Introduce NanMakeWeakPersistent (requires a special callback to work on both old and new node) - - Introduce NanMakeCallback for node::MakeCallback - - Introduce NanSetTemplate - - Introduce NanGetCurrentContext - - Introduce NanCompileScript and NanRunScript - - Introduce NanAdjustExternalMemory - - Introduce NanAddGCEpilogueCallback, NanAddGCPrologueCallback, NanRemoveGCEpilogueCallback, NanRemoveGCPrologueCallback - - Introduce NanGetHeapStatistics - - Rename NanAsyncWorker#SavePersistent() to SaveToPersistent() - -### 0.8.0 Jan 9 2014 - - - NanDispose -> NanDisposePersistent, deprecate NanDispose - - Extract _NAN_*_RETURN_TYPE, pull up NAN_*() - -### 0.7.1 Jan 9 2014 - - - Fixes to work against debug builds of Node - - Safer NanPersistentToLocal (avoid reinterpret_cast) - - Speed up common NanRawString case by only extracting flattened string when necessary - -### 0.7.0 Dec 17 2013 - - - New no-arg form of NanCallback() constructor. - - NanCallback#Call takes Handle rather than Local - - Removed deprecated NanCallback#Run method, use NanCallback#Call instead - - Split off _NAN_*_ARGS_TYPE from _NAN_*_ARGS - - Restore (unofficial) Node 0.6 compatibility at NanCallback#Call() - - Introduce NanRawString() for char* (or appropriate void*) from v8::String - (replacement for NanFromV8String) - - Introduce NanCString() for null-terminated char* from v8::String - -### 0.6.0 Nov 21 2013 - - - Introduce NanNewLocal(v8::Handle value) for use in place of - v8::Local::New(...) since v8 started requiring isolate in Node 0.11.9 - -### 0.5.2 Nov 16 2013 - - - Convert SavePersistent and GetFromPersistent in NanAsyncWorker from protected and public - -### 0.5.1 Nov 12 2013 - - - Use node::MakeCallback() instead of direct v8::Function::Call() - -### 0.5.0 Nov 11 2013 - - - Added @TooTallNate as collaborator - - New, much simpler, "include_dirs" for binding.gyp - - Added full range of NAN_INDEX_* macros to match NAN_PROPERTY_* macros - -### 0.4.4 Nov 2 2013 - - - Isolate argument from v8::Persistent::MakeWeak removed for 0.11.8+ - -### 0.4.3 Nov 2 2013 - - - Include node_object_wrap.h, removed from node.h for Node 0.11.8. - -### 0.4.2 Nov 2 2013 - - - Handle deprecation of v8::Persistent::Dispose(v8::Isolate* isolate)) for - Node 0.11.8 release. - -### 0.4.1 Sep 16 2013 - - - Added explicit `#include ` as it was removed from node.h for v0.11.8 - -### 0.4.0 Sep 2 2013 - - - Added NAN_INLINE and NAN_DEPRECATED and made use of them - - Added NanError, NanTypeError and NanRangeError - - Cleaned up code - -### 0.3.2 Aug 30 2013 - - - Fix missing scope declaration in GetFromPersistent() and SaveToPersistent - in NanAsyncWorker - -### 0.3.1 Aug 20 2013 - - - fix "not all control paths return a value" compile warning on some platforms - -### 0.3.0 Aug 19 2013 - - - Made NAN work with NPM - - Lots of fixes to NanFromV8String, pulling in features from new Node core - - Changed node::encoding to Nan::Encoding in NanFromV8String to unify the API - - Added optional error number argument for NanThrowError() - - Added NanInitPersistent() - - Added NanReturnNull() and NanReturnEmptyString() - - Added NanLocker and NanUnlocker - - Added missing scopes - - Made sure to clear disposed Persistent handles - - Changed NanAsyncWorker to allocate error messages on the heap - - Changed NanThrowError(Local) to NanThrowError(Handle) - - Fixed leak in NanAsyncWorker when errmsg is used - -### 0.2.2 Aug 5 2013 - - - Fixed usage of undefined variable with node::BASE64 in NanFromV8String() - -### 0.2.1 Aug 5 2013 - - - Fixed 0.8 breakage, node::BUFFER encoding type not available in 0.8 for - NanFromV8String() - -### 0.2.0 Aug 5 2013 - - - Added NAN_PROPERTY_GETTER, NAN_PROPERTY_SETTER, NAN_PROPERTY_ENUMERATOR, - NAN_PROPERTY_DELETER, NAN_PROPERTY_QUERY - - Extracted _NAN_METHOD_ARGS, _NAN_GETTER_ARGS, _NAN_SETTER_ARGS, - _NAN_PROPERTY_GETTER_ARGS, _NAN_PROPERTY_SETTER_ARGS, - _NAN_PROPERTY_ENUMERATOR_ARGS, _NAN_PROPERTY_DELETER_ARGS, - _NAN_PROPERTY_QUERY_ARGS - - Added NanGetInternalFieldPointer, NanSetInternalFieldPointer - - Added NAN_WEAK_CALLBACK, NAN_WEAK_CALLBACK_OBJECT, - NAN_WEAK_CALLBACK_DATA, NanMakeWeak - - Renamed THROW_ERROR to _NAN_THROW_ERROR - - Added NanNewBufferHandle(char*, size_t, node::smalloc::FreeCallback, void*) - - Added NanBufferUse(char*, uint32_t) - - Added NanNewContextHandle(v8::ExtensionConfiguration*, - v8::Handle, v8::Handle) - - Fixed broken NanCallback#GetFunction() - - Added optional encoding and size arguments to NanFromV8String() - - Added NanGetPointerSafe() and NanSetPointerSafe() - - Added initial test suite (to be expanded) - - Allow NanUInt32OptionValue to convert any Number object - -### 0.1.0 Jul 21 2013 - - - Added `NAN_GETTER`, `NAN_SETTER` - - Added `NanThrowError` with single Local argument - - Added `NanNewBufferHandle` with single uint32_t argument - - Added `NanHasInstance(Persistent&, Handle)` - - Added `Local NanCallback#GetFunction()` - - Added `NanCallback#Call(int, Local[])` - - Deprecated `NanCallback#Run(int, Local[])` in favour of Call diff --git a/truebit-implementation/node_modules/nan/LICENSE.md b/truebit-implementation/node_modules/nan/LICENSE.md deleted file mode 100644 index dddd13d5..00000000 --- a/truebit-implementation/node_modules/nan/LICENSE.md +++ /dev/null @@ -1,13 +0,0 @@ -The MIT License (MIT) -===================== - -Copyright (c) 2018 NAN contributors ------------------------------------ - -*NAN contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/nan/README.md b/truebit-implementation/node_modules/nan/README.md deleted file mode 100644 index b4851baa..00000000 --- a/truebit-implementation/node_modules/nan/README.md +++ /dev/null @@ -1,456 +0,0 @@ -Native Abstractions for Node.js -=============================== - -**A header file filled with macro and utility goodness for making add-on development for Node.js easier across versions 0.8, 0.10, 0.12, 1, 2, 3, 4, 5, 6, 7, 8 and 9.** - -***Current version: 2.10.0*** - -*(See [CHANGELOG.md](https://github.com/nodejs/nan/blob/master/CHANGELOG.md) for complete ChangeLog)* - -[![NPM](https://nodei.co/npm/nan.png?downloads=true&downloadRank=true)](https://nodei.co/npm/nan/) [![NPM](https://nodei.co/npm-dl/nan.png?months=6&height=3)](https://nodei.co/npm/nan/) - -[![Build Status](https://api.travis-ci.org/nodejs/nan.svg?branch=master)](http://travis-ci.org/nodejs/nan) -[![Build status](https://ci.appveyor.com/api/projects/status/kh73pbm9dsju7fgh)](https://ci.appveyor.com/project/RodVagg/nan) - -Thanks to the crazy changes in V8 (and some in Node core), keeping native addons compiling happily across versions, particularly 0.10 to 0.12 to 4.0, is a minor nightmare. The goal of this project is to store all logic necessary to develop native Node.js addons without having to inspect `NODE_MODULE_VERSION` and get yourself into a macro-tangle. - -This project also contains some helper utilities that make addon development a bit more pleasant. - - * **[News & Updates](#news)** - * **[Usage](#usage)** - * **[Example](#example)** - * **[API](#api)** - * **[Tests](#tests)** - * **[Knowns issues](#issues)** - * **[Governance & Contributing](#governance)** - - - -## News & Updates - - - -## Usage - -Simply add **NAN** as a dependency in the *package.json* of your Node addon: - -``` bash -$ npm install --save nan -``` - -Pull in the path to **NAN** in your *binding.gyp* so that you can use `#include ` in your *.cpp* files: - -``` python -"include_dirs" : [ - "` when compiling your addon. - - - -## Example - -Just getting started with Nan? Take a look at the **[Node Add-on Examples](https://github.com/nodejs/node-addon-examples)**. - -Refer to a [quick-start **Nan** Boilerplate](https://github.com/fcanas/node-native-boilerplate) for a ready-to-go project that utilizes basic Nan functionality. - -For a simpler example, see the **[async pi estimation example](https://github.com/nodejs/nan/tree/master/examples/async_pi_estimate)** in the examples directory for full code and an explanation of what this Monte Carlo Pi estimation example does. Below are just some parts of the full example that illustrate the use of **NAN**. - -Yet another example is **[nan-example-eol](https://github.com/CodeCharmLtd/nan-example-eol)**. It shows newline detection implemented as a native addon. - -Also take a look at our comprehensive **[C++ test suite](https://github.com/nodejs/nan/tree/master/test/cpp)** which has a plethora of code snippets for your pasting pleasure. - - - -## API - -Additional to the NAN documentation below, please consult: - -* [The V8 Getting Started * Guide](https://github.com/v8/v8/wiki/Getting%20Started%20with%20Embedding) -* [The V8 Embedders * Guide](https://github.com/v8/v8/wiki/Embedder%27s%20Guide) -* [V8 API Documentation](http://v8docs.nodesource.com/) -* [Node Add-on Documentation](https://nodejs.org/api/addons.html) - - - -### JavaScript-accessible methods - -A _template_ is a blueprint for JavaScript functions and objects in a context. You can use a template to wrap C++ functions and data structures within JavaScript objects so that they can be manipulated from JavaScript. See the V8 Embedders Guide section on [Templates](https://github.com/v8/v8/wiki/Embedder%27s-Guide#templates) for further information. - -In order to expose functionality to JavaScript via a template, you must provide it to V8 in a form that it understands. Across the versions of V8 supported by NAN, JavaScript-accessible method signatures vary widely, NAN fully abstracts method declaration and provides you with an interface that is similar to the most recent V8 API but is backward-compatible with older versions that still use the now-deceased `v8::Argument` type. - -* **Method argument types** - - Nan::FunctionCallbackInfo - - Nan::PropertyCallbackInfo - - Nan::ReturnValue -* **Method declarations** - - Method declaration - - Getter declaration - - Setter declaration - - Property getter declaration - - Property setter declaration - - Property enumerator declaration - - Property deleter declaration - - Property query declaration - - Index getter declaration - - Index setter declaration - - Index enumerator declaration - - Index deleter declaration - - Index query declaration -* Method and template helpers - - Nan::SetMethod() - - Nan::SetPrototypeMethod() - - Nan::SetAccessor() - - Nan::SetNamedPropertyHandler() - - Nan::SetIndexedPropertyHandler() - - Nan::SetTemplate() - - Nan::SetPrototypeTemplate() - - Nan::SetInstanceTemplate() - - Nan::SetCallHandler() - - Nan::SetCallAsFunctionHandler() - -### Scopes - -A _local handle_ is a pointer to an object. All V8 objects are accessed using handles, they are necessary because of the way the V8 garbage collector works. - -A handle scope can be thought of as a container for any number of handles. When you've finished with your handles, instead of deleting each one individually you can simply delete their scope. - -The creation of `HandleScope` objects is different across the supported versions of V8. Therefore, NAN provides its own implementations that can be used safely across these. - - - Nan::HandleScope - - Nan::EscapableHandleScope - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://github.com/v8/v8/wiki/Embedder%27s%20Guide#handles-and-garbage-collection). - -### Persistent references - -An object reference that is independent of any `HandleScope` is a _persistent_ reference. Where a `Local` handle only lives as long as the `HandleScope` in which it was allocated, a `Persistent` handle remains valid until it is explicitly disposed. - -Due to the evolution of the V8 API, it is necessary for NAN to provide a wrapper implementation of the `Persistent` classes to supply compatibility across the V8 versions supported. - - - Nan::PersistentBase & v8::PersistentBase - - Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits - - Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits - - Nan::Persistent - - Nan::Global - - Nan::WeakCallbackInfo - - Nan::WeakCallbackType - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles). - -### New - -NAN provides a `Nan::New()` helper for the creation of new JavaScript objects in a way that's compatible across the supported versions of V8. - - - Nan::New() - - Nan::Undefined() - - Nan::Null() - - Nan::True() - - Nan::False() - - Nan::EmptyString() - - -### Converters - -NAN contains functions that convert `v8::Value`s to other `v8::Value` types and native types. Since type conversion is not guaranteed to succeed, they return `Nan::Maybe` types. These converters can be used in place of `value->ToX()` and `value->XValue()` (where `X` is one of the types, e.g. `Boolean`) in a way that provides a consistent interface across V8 versions. Newer versions of V8 use the new `v8::Maybe` and `v8::MaybeLocal` types for these conversions, older versions don't have this functionality so it is provided by NAN. - - - Nan::To() - -### Maybe Types - -The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Local` handles that _may be empty_. - -* **Maybe Types** - - Nan::MaybeLocal - - Nan::Maybe - - Nan::Nothing - - Nan::Just -* **Maybe Helpers** - - Nan::Call() - - Nan::ToDetailString() - - Nan::ToArrayIndex() - - Nan::Equals() - - Nan::NewInstance() - - Nan::GetFunction() - - Nan::Set() - - Nan::DefineOwnProperty() - - Nan::ForceSet() - - Nan::Get() - - Nan::GetPropertyAttributes() - - Nan::Has() - - Nan::Delete() - - Nan::GetPropertyNames() - - Nan::GetOwnPropertyNames() - - Nan::SetPrototype() - - Nan::ObjectProtoToString() - - Nan::HasOwnProperty() - - Nan::HasRealNamedProperty() - - Nan::HasRealIndexedProperty() - - Nan::HasRealNamedCallbackProperty() - - Nan::GetRealNamedPropertyInPrototypeChain() - - Nan::GetRealNamedProperty() - - Nan::CallAsFunction() - - Nan::CallAsConstructor() - - Nan::GetSourceLine() - - Nan::GetLineNumber() - - Nan::GetStartColumn() - - Nan::GetEndColumn() - - Nan::CloneElementAt() - - Nan::HasPrivate() - - Nan::GetPrivate() - - Nan::SetPrivate() - - Nan::DeletePrivate() - - Nan::MakeMaybe() - -### Script - -NAN provides a `v8::Script` helpers as the API has changed over the supported versions of V8. - - - Nan::CompileScript() - - Nan::RunScript() - - -### JSON - -The _JSON_ object provides the c++ versions of the methods offered by the `JSON` object in javascript. V8 exposes these methods via the `v8::JSON` object. - - - Nan::JSON.Parse - - Nan::JSON.Stringify - -Refer to the V8 JSON object in the [V8 documentation](https://v8docs.nodesource.com/node-7.4/da/d6f/classv8_1_1_j_s_o_n.html) for more information about these methods and their arguments. - -### Errors - -NAN includes helpers for creating, throwing and catching Errors as much of this functionality varies across the supported versions of V8 and must be abstracted. - -Note that an Error object is simply a specialized form of `v8::Value`. - -Also consult the V8 Embedders Guide section on [Exceptions](https://developers.google.com/v8/embed#exceptions) for more information. - - - Nan::Error() - - Nan::RangeError() - - Nan::ReferenceError() - - Nan::SyntaxError() - - Nan::TypeError() - - Nan::ThrowError() - - Nan::ThrowRangeError() - - Nan::ThrowReferenceError() - - Nan::ThrowSyntaxError() - - Nan::ThrowTypeError() - - Nan::FatalException() - - Nan::ErrnoException() - - Nan::TryCatch - - -### Buffers - -NAN's `node::Buffer` helpers exist as the API has changed across supported Node versions. Use these methods to ensure compatibility. - - - Nan::NewBuffer() - - Nan::CopyBuffer() - - Nan::FreeCallback() - -### Nan::Callback - -`Nan::Callback` makes it easier to use `v8::Function` handles as callbacks. A class that wraps a `v8::Function` handle, protecting it from garbage collection and making it particularly useful for storage and use across asynchronous execution. - - - Nan::Callback - -### Asynchronous work helpers - -`Nan::AsyncWorker`, `Nan::AsyncProgressWorker` and `Nan::AsyncProgressQueueWorker` are helper classes that make working with asynchronous code easier. - - - Nan::AsyncWorker - - Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker - - Nan::AsyncProgressQueueWorker - - Nan::AsyncQueueWorker - -### Strings & Bytes - -Miscellaneous string & byte encoding and decoding functionality provided for compatibility across supported versions of V8 and Node. Implemented by NAN to ensure that all encoding types are supported, even for older versions of Node where they are missing. - - - Nan::Encoding - - Nan::Encode() - - Nan::DecodeBytes() - - Nan::DecodeWrite() - - -### Object Wrappers - -The `ObjectWrap` class can be used to make wrapped C++ objects and a factory of wrapped objects. - - - Nan::ObjectWrap - - -### V8 internals - -The hooks to access V8 internals—including GC and statistics—are different across the supported versions of V8, therefore NAN provides its own hooks that call the appropriate V8 methods. - - - NAN_GC_CALLBACK() - - Nan::AddGCEpilogueCallback() - - Nan::RemoveGCEpilogueCallback() - - Nan::AddGCPrologueCallback() - - Nan::RemoveGCPrologueCallback() - - Nan::GetHeapStatistics() - - Nan::SetCounterFunction() - - Nan::SetCreateHistogramFunction() - - Nan::SetAddHistogramSampleFunction() - - Nan::IdleNotification() - - Nan::LowMemoryNotification() - - Nan::ContextDisposedNotification() - - Nan::GetInternalFieldPointer() - - Nan::SetInternalFieldPointer() - - Nan::AdjustExternalMemory() - - -### Miscellaneous V8 Helpers - - - Nan::Utf8String - - Nan::GetCurrentContext() - - Nan::SetIsolateData() - - Nan::GetIsolateData() - - Nan::TypedArrayContents - - -### Miscellaneous Node Helpers - - - Nan::AsyncResource - - Nan::MakeCallback() - - NAN_MODULE_INIT() - - Nan::Export() - - - - - - -### Tests - -To run the NAN tests do: - -``` sh -npm install -npm run-script rebuild-tests -npm test -``` - -Or just: - -``` sh -npm install -make test -``` - - - -## Known issues - -### Compiling against Node.js 0.12 on OSX - -With new enough compilers available on OSX, the versions of V8 headers corresponding to Node.js 0.12 -do not compile anymore. The error looks something like: - -``` -❯ CXX(target) Release/obj.target/accessors/cpp/accessors.o -In file included from ../cpp/accessors.cpp:9: -In file included from ../../nan.h:51: -In file included from /Users/ofrobots/.node-gyp/0.12.18/include/node/node.h:61: -/Users/ofrobots/.node-gyp/0.12.18/include/node/v8.h:5800:54: error: 'CreateHandle' is a protected member of 'v8::HandleScope' - return Handle(reinterpret_cast(HandleScope::CreateHandle( - ~~~~~~~~~~~~~^~~~~~~~~~~~ -``` - -This can be worked around by patching your local versions of v8.h corresponding to Node 0.12 to make -`v8::Handle` a friend of `v8::HandleScope`. Since neither Node.js not V8 support this release line anymore -this patch cannot be released by either project in an official release. - -For this reason, we do not test against Node.js 0.12 on OSX in this project's CI. If you need to support -that configuration, you will need to either get an older compiler, or apply a source patch to the version -of V8 headers as a workaround. - - - -## Governance & Contributing - -NAN is governed by the [Node.js Addon API Working Group](https://github.com/nodejs/CTC/blob/master/WORKING_GROUPS.md#addon-api) - -### Addon API Working Group (WG) - -The NAN project is jointly governed by a Working Group which is responsible for high-level guidance of the project. - -Members of the WG are also known as Collaborators, there is no distinction between the two, unlike other Node.js projects. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project [README.md](./README.md#collaborators). - -Individuals making significant and valuable contributions are made members of the WG and given commit-access to the project. These individuals are identified by the WG and their addition to the WG is discussed via GitHub and requires unanimous consensus amongst those WG members participating in the discussion with a quorum of 50% of WG members required for acceptance of the vote. - -_Note:_ If you make a significant contribution and are not considered for commit-access log an issue or contact a WG member directly. - -For the current list of WG members / Collaborators, see the project [README.md](./README.md#collaborators). - -### Consensus Seeking Process - -The WG follows a [Consensus Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) decision making model. - -Modifications of the contents of the NAN repository are made on a collaborative basis. Anybody with a GitHub account may propose a modification via pull request and it will be considered by the WG. All pull requests must be reviewed and accepted by a WG member with sufficient expertise who is able to take full responsibility for the change. In the case of pull requests proposed by an existing WG member, an additional WG member is required for sign-off. Consensus should be sought if additional WG members participate and there is disagreement around a particular modification. - -If a change proposal cannot reach a consensus, a WG member can call for a vote amongst the members of the WG. Simple majority wins. - - - -## Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - - - -### WG Members / Collaborators - - - - - - - - - - -
Rod VaggGitHub/rvaggTwitter/@rvagg
Benjamin ByholmGitHub/kkoopa-
Trevor NorrisGitHub/trevnorrisTwitter/@trevnorris
Nathan RajlichGitHub/TooTallNateTwitter/@TooTallNate
Brett LawsonGitHub/brett19Twitter/@brett19x
Ben NoordhuisGitHub/bnoordhuisTwitter/@bnoordhuis
David SiegelGitHub/agnatTwitter/@agnat
Michael Ira KrufkyGitHub/mkrufkyTwitter/@mkrufky
- -## Licence & copyright - -Copyright (c) 2018 NAN WG Members / Collaborators (listed above). - -Native Abstractions for Node.js is licensed under an MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. diff --git a/truebit-implementation/node_modules/nan/doc/asyncworker.md b/truebit-implementation/node_modules/nan/doc/asyncworker.md deleted file mode 100644 index 239de801..00000000 --- a/truebit-implementation/node_modules/nan/doc/asyncworker.md +++ /dev/null @@ -1,146 +0,0 @@ -## Asynchronous work helpers - -`Nan::AsyncWorker`, `Nan::AsyncProgressWorker` and `Nan::AsyncProgressQueueWorker` are helper classes that make working with asynchronous code easier. - - - Nan::AsyncWorker - - Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker - - Nan::AsyncProgressQueueWorker - - Nan::AsyncQueueWorker - - -### Nan::AsyncWorker - -`Nan::AsyncWorker` is an _abstract_ class that you can subclass to have much of the annoying asynchronous queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the asynchronous work is in progress. - -This class internally handles the details of creating an [`AsyncResource`][AsyncResource], and running the callback in the -correct async context. To be able to identify the async resources created by this class in async-hooks, provide a -`resource_name` to the constructor. It is recommended that the module name be used as a prefix to the `resource_name` to avoid -collisions in the names. For more details see [`AsyncResource`][AsyncResource] documentation. The `resource_name` needs to stay valid for the lifetime of the worker instance. - -Definition: - -```c++ -class AsyncWorker { - public: - explicit AsyncWorker(Callback *callback_, const char* resource_name = "nan:AsyncWorker"); - - virtual ~AsyncWorker(); - - virtual void WorkComplete(); - - void SaveToPersistent(const char *key, const v8::Local &value); - - void SaveToPersistent(const v8::Local &key, - const v8::Local &value); - - void SaveToPersistent(uint32_t index, - const v8::Local &value); - - v8::Local GetFromPersistent(const char *key) const; - - v8::Local GetFromPersistent(const v8::Local &key) const; - - v8::Local GetFromPersistent(uint32_t index) const; - - virtual void Execute() = 0; - - uv_work_t request; - - virtual void Destroy(); - - protected: - Persistent persistentHandle; - - Callback *callback; - - virtual void HandleOKCallback(); - - virtual void HandleErrorCallback(); - - void SetErrorMessage(const char *msg); - - const char* ErrorMessage(); -}; -``` - - -### Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker - -`Nan::AsyncProgressWorkerBase` is an _abstract_ class template that extends `Nan::AsyncWorker` and adds additional progress reporting callbacks that can be used during the asynchronous work execution to provide progress data back to JavaScript. - -Previously the definiton of `Nan::AsyncProgressWorker` only allowed sending `const char` data. Now extending `Nan::AsyncProgressWorker` will yield an instance of the implicit `Nan::AsyncProgressWorkerBase` template with type `` for compatibility. - -`Nan::AsyncProgressWorkerBase` & `Nan::AsyncProgressWorker` is intended for best-effort delivery of nonessential progress messages, e.g. a progress bar. The last event sent before the main thread is woken will be delivered. - -Definition: - -```c++ -template -class AsyncProgressWorkerBase : public AsyncWorker { - public: - explicit AsyncProgressWorkerBase(Callback *callback_, const char* resource_name = ...); - - virtual ~AsyncProgressWorkerBase(); - - void WorkProgress(); - - class ExecutionProgress { - public: - void Signal() const; - void Send(const T* data, size_t count) const; - }; - - virtual void Execute(const ExecutionProgress& progress) = 0; - - virtual void HandleProgressCallback(const T *data, size_t count) = 0; - - virtual void Destroy(); -}; - -typedef AsyncProgressWorkerBase AsyncProgressWorker; -``` - - -### Nan::AsyncProgressQueueWorker - -`Nan::AsyncProgressQueueWorker` is an _abstract_ class template that extends `Nan::AsyncWorker` and adds additional progress reporting callbacks that can be used during the asynchronous work execution to provide progress data back to JavaScript. - -`Nan::AsyncProgressQueueWorker` behaves exactly the same as `Nan::AsyncProgressWorker`, except all events are queued and delivered to the main thread. - -Definition: - -```c++ -template -class AsyncProgressQueueWorker : public AsyncWorker { - public: - explicit AsyncProgressQueueWorker(Callback *callback_, const char* resource_name = "nan:AsyncProgressQueueWorker"); - - virtual ~AsyncProgressQueueWorker(); - - void WorkProgress(); - - class ExecutionProgress { - public: - void Send(const T* data, size_t count) const; - }; - - virtual void Execute(const ExecutionProgress& progress) = 0; - - virtual void HandleProgressCallback(const T *data, size_t count) = 0; - - virtual void Destroy(); -}; -``` - - -### Nan::AsyncQueueWorker - -`Nan::AsyncQueueWorker` will run a `Nan::AsyncWorker` asynchronously via libuv. Both the `execute` and `after_work` steps are taken care of for you. Most of the logic for this is embedded in `Nan::AsyncWorker`. - -Definition: - -```c++ -void AsyncQueueWorker(AsyncWorker *); -``` - -[AsyncResource]: "node_misc.html#api_nan_asyncresource" diff --git a/truebit-implementation/node_modules/nan/doc/buffers.md b/truebit-implementation/node_modules/nan/doc/buffers.md deleted file mode 100644 index 8d8d25cf..00000000 --- a/truebit-implementation/node_modules/nan/doc/buffers.md +++ /dev/null @@ -1,54 +0,0 @@ -## Buffers - -NAN's `node::Buffer` helpers exist as the API has changed across supported Node versions. Use these methods to ensure compatibility. - - - Nan::NewBuffer() - - Nan::CopyBuffer() - - Nan::FreeCallback() - - -### Nan::NewBuffer() - -Allocate a new `node::Buffer` object with the specified size and optional data. Calls `node::Buffer::New()`. - -Note that when creating a `Buffer` using `Nan::NewBuffer()` and an existing `char*`, it is assumed that the ownership of the pointer is being transferred to the new `Buffer` for management. -When a `node::Buffer` instance is garbage collected and a `FreeCallback` has not been specified, `data` will be disposed of via a call to `free()`. -You _must not_ free the memory space manually once you have created a `Buffer` in this way. - -Signature: - -```c++ -Nan::MaybeLocal Nan::NewBuffer(uint32_t size) -Nan::MaybeLocal Nan::NewBuffer(char* data, uint32_t size) -Nan::MaybeLocal Nan::NewBuffer(char *data, - size_t length, - Nan::FreeCallback callback, - void *hint) -``` - - - -### Nan::CopyBuffer() - -Similar to [`Nan::NewBuffer()`](#api_nan_new_buffer) except that an implicit memcpy will occur within Node. Calls `node::Buffer::Copy()`. - -Management of the `char*` is left to the user, you should manually free the memory space if necessary as the new `Buffer` will have its own copy. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CopyBuffer(const char *data, uint32_t size) -``` - - - -### Nan::FreeCallback() - -A free callback that can be provided to [`Nan::NewBuffer()`](#api_nan_new_buffer). -The supplied callback will be invoked when the `Buffer` undergoes garbage collection. - -Signature: - -```c++ -typedef void (*FreeCallback)(char *data, void *hint); -``` diff --git a/truebit-implementation/node_modules/nan/doc/callback.md b/truebit-implementation/node_modules/nan/doc/callback.md deleted file mode 100644 index f7af0bfd..00000000 --- a/truebit-implementation/node_modules/nan/doc/callback.md +++ /dev/null @@ -1,76 +0,0 @@ -## Nan::Callback - -`Nan::Callback` makes it easier to use `v8::Function` handles as callbacks. A class that wraps a `v8::Function` handle, protecting it from garbage collection and making it particularly useful for storage and use across asynchronous execution. - - - Nan::Callback - - -### Nan::Callback - -```c++ -class Callback { - public: - Callback(); - - explicit Callback(const v8::Local &fn); - - ~Callback(); - - bool operator==(const Callback &other) const; - - bool operator!=(const Callback &other) const; - - v8::Local operator*() const; - - MaybeLocal operator()(AsyncResource* async_resource, - v8::Local target, - int argc = 0, - v8::Local argv[] = 0) const; - - MaybeLocal operator()(AsyncResource* async_resource, - int argc = 0, - v8::Local argv[] = 0) const; - - void SetFunction(const v8::Local &fn); - - v8::Local GetFunction() const; - - bool IsEmpty() const; - - void Reset(const v8::Local &fn); - - void Reset(); - - MaybeLocal Call(v8::Local target, - int argc, - v8::Local argv[], - AsyncResource* async_resource) const; - MaybeLocal Call(int argc, - v8::Local argv[], - AsyncResource* async_resource) const; - - // Deprecated versions. Use the versions that accept an async_resource instead - // as they run the callback in the correct async context as specified by the - // resource. If you want to call a synchronous JS function (i.e. on a - // non-empty JS stack), you can use Nan::Call instead. - v8::Local operator()(v8::Local target, - int argc = 0, - v8::Local argv[] = 0) const; - - v8::Local operator()(int argc = 0, - v8::Local argv[] = 0) const; - v8::Local Call(v8::Local target, - int argc, - v8::Local argv[]) const; - - v8::Local Call(int argc, v8::Local argv[]) const; -}; -``` - -Example usage: - -```c++ -v8::Local function; -Nan::Callback callback(function); -callback.Call(0, 0); -``` diff --git a/truebit-implementation/node_modules/nan/doc/converters.md b/truebit-implementation/node_modules/nan/doc/converters.md deleted file mode 100644 index d20861b5..00000000 --- a/truebit-implementation/node_modules/nan/doc/converters.md +++ /dev/null @@ -1,41 +0,0 @@ -## Converters - -NAN contains functions that convert `v8::Value`s to other `v8::Value` types and native types. Since type conversion is not guaranteed to succeed, they return `Nan::Maybe` types. These converters can be used in place of `value->ToX()` and `value->XValue()` (where `X` is one of the types, e.g. `Boolean`) in a way that provides a consistent interface across V8 versions. Newer versions of V8 use the new `v8::Maybe` and `v8::MaybeLocal` types for these conversions, older versions don't have this functionality so it is provided by NAN. - - - Nan::To() - - -### Nan::To() - -Converts a `v8::Local` to a different subtype of `v8::Value` or to a native data type. Returns a `Nan::MaybeLocal<>` or a `Nan::Maybe<>` accordingly. - -See [maybe_types.md](./maybe_types.md) for more information on `Nan::Maybe` types. - -Signatures: - -```c++ -// V8 types -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); -Nan::MaybeLocal Nan::To(v8::Local val); - -// Native types -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -Nan::Maybe Nan::To(v8::Local val); -``` - -### Example - -```c++ -v8::Local val; -Nan::MaybeLocal str = Nan::To(val); -Nan::Maybe d = Nan::To(val); -``` - diff --git a/truebit-implementation/node_modules/nan/doc/errors.md b/truebit-implementation/node_modules/nan/doc/errors.md deleted file mode 100644 index b93b3535..00000000 --- a/truebit-implementation/node_modules/nan/doc/errors.md +++ /dev/null @@ -1,226 +0,0 @@ -## Errors - -NAN includes helpers for creating, throwing and catching Errors as much of this functionality varies across the supported versions of V8 and must be abstracted. - -Note that an Error object is simply a specialized form of `v8::Value`. - -Also consult the V8 Embedders Guide section on [Exceptions](https://developers.google.com/v8/embed#exceptions) for more information. - - - Nan::Error() - - Nan::RangeError() - - Nan::ReferenceError() - - Nan::SyntaxError() - - Nan::TypeError() - - Nan::ThrowError() - - Nan::ThrowRangeError() - - Nan::ThrowReferenceError() - - Nan::ThrowSyntaxError() - - Nan::ThrowTypeError() - - Nan::FatalException() - - Nan::ErrnoException() - - Nan::TryCatch - - - -### Nan::Error() - -Create a new Error object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.3/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an Error object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::Error(const char *msg); -v8::Local Nan::Error(v8::Local msg); -``` - - - -### Nan::RangeError() - -Create a new RangeError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.3/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an RangeError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::RangeError(const char *msg); -v8::Local Nan::RangeError(v8::Local msg); -``` - - - -### Nan::ReferenceError() - -Create a new ReferenceError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.3/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an ReferenceError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::ReferenceError(const char *msg); -v8::Local Nan::ReferenceError(v8::Local msg); -``` - - - -### Nan::SyntaxError() - -Create a new SyntaxError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.3/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an SyntaxError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::SyntaxError(const char *msg); -v8::Local Nan::SyntaxError(v8::Local msg); -``` - - - -### Nan::TypeError() - -Create a new TypeError object using the [v8::Exception](https://v8docs.nodesource.com/io.js-3.3/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. - -Note that an TypeError object is simply a specialized form of `v8::Value`. - -Signature: - -```c++ -v8::Local Nan::TypeError(const char *msg); -v8::Local Nan::TypeError(v8::Local msg); -``` - - - -### Nan::ThrowError() - -Throw an Error object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new Error object will be created. - -Signature: - -```c++ -void Nan::ThrowError(const char *msg); -void Nan::ThrowError(v8::Local msg); -void Nan::ThrowError(v8::Local error); -``` - - - -### Nan::ThrowRangeError() - -Throw an RangeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new RangeError object will be created. - -Signature: - -```c++ -void Nan::ThrowRangeError(const char *msg); -void Nan::ThrowRangeError(v8::Local msg); -void Nan::ThrowRangeError(v8::Local error); -``` - - - -### Nan::ThrowReferenceError() - -Throw an ReferenceError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new ReferenceError object will be created. - -Signature: - -```c++ -void Nan::ThrowReferenceError(const char *msg); -void Nan::ThrowReferenceError(v8::Local msg); -void Nan::ThrowReferenceError(v8::Local error); -``` - - - -### Nan::ThrowSyntaxError() - -Throw an SyntaxError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new SyntaxError object will be created. - -Signature: - -```c++ -void Nan::ThrowSyntaxError(const char *msg); -void Nan::ThrowSyntaxError(v8::Local msg); -void Nan::ThrowSyntaxError(v8::Local error); -``` - - - -### Nan::ThrowTypeError() - -Throw an TypeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new TypeError object will be created. - -Signature: - -```c++ -void Nan::ThrowTypeError(const char *msg); -void Nan::ThrowTypeError(v8::Local msg); -void Nan::ThrowTypeError(v8::Local error); -``` - - -### Nan::FatalException() - -Replaces `node::FatalException()` which has a different API across supported versions of Node. For use with [`Nan::TryCatch`](#api_nan_try_catch). - -Signature: - -```c++ -void Nan::FatalException(const Nan::TryCatch& try_catch); -``` - - -### Nan::ErrnoException() - -Replaces `node::ErrnoException()` which has a different API across supported versions of Node. - -Signature: - -```c++ -v8::Local Nan::ErrnoException(int errorno, - const char* syscall = NULL, - const char* message = NULL, - const char* path = NULL); -``` - - - -### Nan::TryCatch - -A simple wrapper around [`v8::TryCatch`](https://v8docs.nodesource.com/io.js-3.3/d4/dc6/classv8_1_1_try_catch.html) compatible with all supported versions of V8. Can be used as a direct replacement in most cases. See also [`Nan::FatalException()`](#api_nan_fatal_exception) for an internal use compatible with `node::FatalException`. - -Signature: - -```c++ -class Nan::TryCatch { - public: - Nan::TryCatch(); - - bool HasCaught() const; - - bool CanContinue() const; - - v8::Local ReThrow(); - - v8::Local Exception() const; - - // Nan::MaybeLocal for older versions of V8 - v8::MaybeLocal StackTrace() const; - - v8::Local Message() const; - - void Reset(); - - void SetVerbose(bool value); - - void SetCaptureMessage(bool value); -}; -``` - diff --git a/truebit-implementation/node_modules/nan/doc/json.md b/truebit-implementation/node_modules/nan/doc/json.md deleted file mode 100644 index c916c4d1..00000000 --- a/truebit-implementation/node_modules/nan/doc/json.md +++ /dev/null @@ -1,62 +0,0 @@ -## JSON - -The _JSON_ object provides the c++ versions of the methods offered by the `JSON` object in javascript. V8 exposes these methods via the `v8::JSON` object. - - - Nan::JSON.Parse - - Nan::JSON.Stringify - -Refer to the V8 JSON object in the [V8 documentation](https://v8docs.nodesource.com/node-7.4/da/d6f/classv8_1_1_j_s_o_n.html) for more information about these methods and their arguments. - - - -### Nan::JSON.Parse - -A simple wrapper around [`v8::JSON::Parse`](https://v8docs.nodesource.com/node-7.4/da/d6f/classv8_1_1_j_s_o_n.html#a936310d2540fb630ed37d3ee3ffe4504). - -Definition: - -```c++ -Nan::MaybeLocal Nan::JSON::Parse(v8::Local json_string); -``` - -Use `JSON.Parse(json_string)` to parse a string into a `v8::Value`. - -Example: - -```c++ -v8::Local json_string = Nan::New("{ \"JSON\": \"object\" }").ToLocalChecked(); - -Nan::JSON NanJSON; -Nan::MaybeLocal result = NanJSON.Parse(json_string); -if (!result.IsEmpty()) { - v8::Local val = result.ToLocalChecked(); -} -``` - - - -### Nan::JSON.Stringify - -A simple wrapper around [`v8::JSON::Stringify`](https://v8docs.nodesource.com/node-7.4/da/d6f/classv8_1_1_j_s_o_n.html#a44b255c3531489ce43f6110209138860). - -Definition: - -```c++ -Nan::MaybeLocal Nan::JSON::Stringify(v8::Local json_object, v8::Local gap = v8::Local()); -``` - -Use `JSON.Stringify(value)` to stringify a `v8::Object`. - -Example: - -```c++ -// using `v8::Local val` from the `JSON::Parse` example -v8::Local obj = Nan::To(val).ToLocalChecked(); - -Nan::JSON NanJSON; -Nan::MaybeLocal result = NanJSON.Stringify(obj); -if (!result.IsEmpty()) { - v8::Local stringified = result.ToLocalChecked(); -} -``` - diff --git a/truebit-implementation/node_modules/nan/doc/maybe_types.md b/truebit-implementation/node_modules/nan/doc/maybe_types.md deleted file mode 100644 index f11df56d..00000000 --- a/truebit-implementation/node_modules/nan/doc/maybe_types.md +++ /dev/null @@ -1,583 +0,0 @@ -## Maybe Types - -The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Local` handles that _may be empty_. - -* **Maybe Types** - - Nan::MaybeLocal - - Nan::Maybe - - Nan::Nothing - - Nan::Just -* **Maybe Helpers** - - Nan::Call() - - Nan::ToDetailString() - - Nan::ToArrayIndex() - - Nan::Equals() - - Nan::NewInstance() - - Nan::GetFunction() - - Nan::Set() - - Nan::DefineOwnProperty() - - Nan::ForceSet() - - Nan::Get() - - Nan::GetPropertyAttributes() - - Nan::Has() - - Nan::Delete() - - Nan::GetPropertyNames() - - Nan::GetOwnPropertyNames() - - Nan::SetPrototype() - - Nan::ObjectProtoToString() - - Nan::HasOwnProperty() - - Nan::HasRealNamedProperty() - - Nan::HasRealIndexedProperty() - - Nan::HasRealNamedCallbackProperty() - - Nan::GetRealNamedPropertyInPrototypeChain() - - Nan::GetRealNamedProperty() - - Nan::CallAsFunction() - - Nan::CallAsConstructor() - - Nan::GetSourceLine() - - Nan::GetLineNumber() - - Nan::GetStartColumn() - - Nan::GetEndColumn() - - Nan::CloneElementAt() - - Nan::HasPrivate() - - Nan::GetPrivate() - - Nan::SetPrivate() - - Nan::DeletePrivate() - - Nan::MakeMaybe() - - -### Nan::MaybeLocal - -A `Nan::MaybeLocal` is a wrapper around [`v8::Local`](https://v8docs.nodesource.com/io.js-3.3/de/deb/classv8_1_1_local.html) that enforces a check that determines whether the `v8::Local` is empty before it can be used. - -If an API method returns a `Nan::MaybeLocal`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, an empty `Nan::MaybeLocal` is returned. - -Definition: - -```c++ -template class Nan::MaybeLocal { - public: - MaybeLocal(); - - template MaybeLocal(v8::Local that); - - bool IsEmpty() const; - - template bool ToLocal(v8::Local *out); - - // Will crash if the MaybeLocal<> is empty. - v8::Local ToLocalChecked(); - - template v8::Local FromMaybe(v8::Local default_value) const; -}; -``` - -See the documentation for [`v8::MaybeLocal`](https://v8docs.nodesource.com/io.js-3.3/d8/d7d/classv8_1_1_maybe_local.html) for further details. - - -### Nan::Maybe - -A simple `Nan::Maybe` type, representing an object which may or may not have a value, see https://hackage.haskell.org/package/base/docs/Data-Maybe.html. - -If an API method returns a `Nan::Maybe<>`, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a `v8::TerminateExecution` exception was thrown. In that case, a "Nothing" value is returned. - -Definition: - -```c++ -template class Nan::Maybe { - public: - bool IsNothing() const; - bool IsJust() const; - - // Will crash if the Maybe<> is nothing. - T FromJust(); - - T FromMaybe(const T& default_value); - - bool operator==(const Maybe &other); - - bool operator!=(const Maybe &other); -}; -``` - -See the documentation for [`v8::Maybe`](https://v8docs.nodesource.com/io.js-3.3/d9/d4b/classv8_1_1_maybe.html) for further details. - - -### Nan::Nothing - -Construct an empty `Nan::Maybe` type representing _nothing_. - -```c++ -template Nan::Maybe Nan::Nothing(); -``` - - -### Nan::Just - -Construct a `Nan::Maybe` type representing _just_ a value. - -```c++ -template Nan::Maybe Nan::Just(const T &t); -``` - - -### Nan::Call() - -A helper method for calling a synchronous [`v8::Function#Call()`](https://v8docs.nodesource.com/io.js-3.3/d5/d54/classv8_1_1_function.html#a468a89f737af0612db10132799c827c0) in a way compatible across supported versions of V8. - -For asynchronous callbacks, use Nan::Callback::Call along with an AsyncResource. - -Signature: - -```c++ -Nan::MaybeLocal Nan::Call(v8::Local fun, v8::Local recv, int argc, v8::Local argv[]); -Nan::MaybeLocal Nan::Call(const Nan::Callback& callback, v8::Local recv, - int argc, v8::Local argv[]); -Nan::MaybeLocal Nan::Call(const Nan::Callback& callback, int argc, v8::Local argv[]); -``` - - - -### Nan::ToDetailString() - -A helper method for calling [`v8::Value#ToDetailString()`](https://v8docs.nodesource.com/io.js-3.3/dc/d0a/classv8_1_1_value.html#a2f9770296dc2c8d274bc8cc0dca243e5) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::ToDetailString(v8::Local val); -``` - - - -### Nan::ToArrayIndex() - -A helper method for calling [`v8::Value#ToArrayIndex()`](https://v8docs.nodesource.com/io.js-3.3/dc/d0a/classv8_1_1_value.html#acc5bbef3c805ec458470c0fcd6f13493) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::ToArrayIndex(v8::Local val); -``` - - - -### Nan::Equals() - -A helper method for calling [`v8::Value#Equals()`](https://v8docs.nodesource.com/io.js-3.3/dc/d0a/classv8_1_1_value.html#a0d9616ab2de899d4e3047c30a10c9285) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Equals(v8::Local a, v8::Local(b)); -``` - - - -### Nan::NewInstance() - -A helper method for calling [`v8::Function#NewInstance()`](https://v8docs.nodesource.com/io.js-3.3/d5/d54/classv8_1_1_function.html#a691b13f7a553069732cbacf5ac8c62ec) and [`v8::ObjectTemplate#NewInstance()`](https://v8docs.nodesource.com/io.js-3.3/db/d5f/classv8_1_1_object_template.html#ad605a7543cfbc5dab54cdb0883d14ae4) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::NewInstance(v8::Local h); -Nan::MaybeLocal Nan::NewInstance(v8::Local h, int argc, v8::Local argv[]); -Nan::MaybeLocal Nan::NewInstance(v8::Local h); -``` - - - -### Nan::GetFunction() - -A helper method for calling [`v8::FunctionTemplate#GetFunction()`](https://v8docs.nodesource.com/io.js-3.3/d8/d83/classv8_1_1_function_template.html#a56d904662a86eca78da37d9bb0ed3705) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetFunction(v8::Local t); -``` - - - -### Nan::Set() - -A helper method for calling [`v8::Object#Set()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a67604ea3734f170c66026064ea808f20) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Set(v8::Local obj, - v8::Local key, - v8::Local value) -Nan::Maybe Nan::Set(v8::Local obj, - uint32_t index, - v8::Local value); -``` - - - -### Nan::DefineOwnProperty() - -A helper method for calling [`v8::Object#DefineOwnProperty()`](https://v8docs.nodesource.com/node-4.8/db/d85/classv8_1_1_object.html#a6f76b2ed605cb8f9185b92de0033a820) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::DefineOwnProperty(v8::Local obj, - v8::Local key, - v8::Local value, - v8::PropertyAttribute attribs = v8::None); -``` - - - -### Nan::ForceSet() - -Deprecated, use Nan::DefineOwnProperty(). - -A helper method for calling [`v8::Object#ForceSet()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a796b7b682896fb64bf1872747734e836) in a way compatible across supported versions of V8. - -Signature: - -```c++ -NAN_DEPRECATED Nan::Maybe Nan::ForceSet(v8::Local obj, - v8::Local key, - v8::Local value, - v8::PropertyAttribute attribs = v8::None); -``` - - - -### Nan::Get() - -A helper method for calling [`v8::Object#Get()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a2565f03e736694f6b1e1cf22a0b4eac2) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::Get(v8::Local obj, - v8::Local key); -Nan::MaybeLocal Nan::Get(v8::Local obj, uint32_t index); -``` - - - -### Nan::GetPropertyAttributes() - -A helper method for calling [`v8::Object#GetPropertyAttributes()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a9b898894da3d1db2714fd9325a54fe57) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetPropertyAttributes( - v8::Local obj, - v8::Local key); -``` - - - -### Nan::Has() - -A helper method for calling [`v8::Object#Has()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#ab3c3d89ea7c2f9afd08965bd7299a41d) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Has(v8::Local obj, v8::Local key); -Nan::Maybe Nan::Has(v8::Local obj, uint32_t index); -``` - - - -### Nan::Delete() - -A helper method for calling [`v8::Object#Delete()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a2fa0f5a592582434ed1ceceff7d891ef) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::Delete(v8::Local obj, - v8::Local key); -Nan::Maybe Nan::Delete(v8::Local obj, uint32_t index); -``` - - - -### Nan::GetPropertyNames() - -A helper method for calling [`v8::Object#GetPropertyNames()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#aced885270cfd2c956367b5eedc7fbfe8) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetPropertyNames(v8::Local obj); -``` - - - -### Nan::GetOwnPropertyNames() - -A helper method for calling [`v8::Object#GetOwnPropertyNames()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a79a6e4d66049b9aa648ed4dfdb23e6eb) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetOwnPropertyNames(v8::Local obj); -``` - - - -### Nan::SetPrototype() - -A helper method for calling [`v8::Object#SetPrototype()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a442706b22fceda6e6d1f632122a9a9f4) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::SetPrototype(v8::Local obj, - v8::Local prototype); -``` - - - -### Nan::ObjectProtoToString() - -A helper method for calling [`v8::Object#ObjectProtoToString()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#ab7a92b4dcf822bef72f6c0ac6fea1f0b) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::ObjectProtoToString(v8::Local obj); -``` - - - -### Nan::HasOwnProperty() - -A helper method for calling [`v8::Object#HasOwnProperty()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#ab7b7245442ca6de1e1c145ea3fd653ff) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasOwnProperty(v8::Local obj, - v8::Local key); -``` - - - -### Nan::HasRealNamedProperty() - -A helper method for calling [`v8::Object#HasRealNamedProperty()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#ad8b80a59c9eb3c1e6c3cd6c84571f767) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasRealNamedProperty(v8::Local obj, - v8::Local key); -``` - - - -### Nan::HasRealIndexedProperty() - -A helper method for calling [`v8::Object#HasRealIndexedProperty()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#af94fc1135a5e74a2193fb72c3a1b9855) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasRealIndexedProperty(v8::Local obj, - uint32_t index); -``` - - - -### Nan::HasRealNamedCallbackProperty() - -A helper method for calling [`v8::Object#HasRealNamedCallbackProperty()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#af743b7ea132b89f84d34d164d0668811) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasRealNamedCallbackProperty( - v8::Local obj, - v8::Local key); -``` - - - -### Nan::GetRealNamedPropertyInPrototypeChain() - -A helper method for calling [`v8::Object#GetRealNamedPropertyInPrototypeChain()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a8700b1862e6b4783716964ba4d5e6172) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetRealNamedPropertyInPrototypeChain( - v8::Local obj, - v8::Local key); -``` - - - -### Nan::GetRealNamedProperty() - -A helper method for calling [`v8::Object#GetRealNamedProperty()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a84471a824576a5994fdd0ffcbf99ccc0) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetRealNamedProperty(v8::Local obj, - v8::Local key); -``` - - - -### Nan::CallAsFunction() - -A helper method for calling [`v8::Object#CallAsFunction()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a9ef18be634e79b4f0cdffa1667a29f58) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CallAsFunction(v8::Local obj, - v8::Local recv, - int argc, - v8::Local argv[]); -``` - - - -### Nan::CallAsConstructor() - -A helper method for calling [`v8::Object#CallAsConstructor()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#a50d571de50d0b0dfb28795619d07a01b) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CallAsConstructor(v8::Local obj, - int argc, - v8::Local argv[]); -``` - - - -### Nan::GetSourceLine() - -A helper method for calling [`v8::Message#GetSourceLine()`](https://v8docs.nodesource.com/io.js-3.3/d9/d28/classv8_1_1_message.html#a849f7a6c41549d83d8159825efccd23a) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetSourceLine(v8::Local msg); -``` - - - -### Nan::GetLineNumber() - -A helper method for calling [`v8::Message#GetLineNumber()`](https://v8docs.nodesource.com/io.js-3.3/d9/d28/classv8_1_1_message.html#adbe46c10a88a6565f2732a2d2adf99b9) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetLineNumber(v8::Local msg); -``` - - - -### Nan::GetStartColumn() - -A helper method for calling [`v8::Message#GetStartColumn()`](https://v8docs.nodesource.com/io.js-3.3/d9/d28/classv8_1_1_message.html#a60ede616ba3822d712e44c7a74487ba6) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetStartColumn(v8::Local msg); -``` - - - -### Nan::GetEndColumn() - -A helper method for calling [`v8::Message#GetEndColumn()`](https://v8docs.nodesource.com/io.js-3.3/d9/d28/classv8_1_1_message.html#aaa004cf19e529da980bc19fcb76d93be) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::GetEndColumn(v8::Local msg); -``` - - - -### Nan::CloneElementAt() - -A helper method for calling [`v8::Array#CloneElementAt()`](https://v8docs.nodesource.com/io.js-3.3/d3/d32/classv8_1_1_array.html#a1d3a878d4c1c7cae974dd50a1639245e) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CloneElementAt(v8::Local array, uint32_t index); -``` - - -### Nan::HasPrivate() - -A helper method for calling [`v8::Object#HasPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#af68a0b98066cfdeb8f943e98a40ba08d) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::HasPrivate(v8::Local object, v8::Local key); -``` - - -### Nan::GetPrivate() - -A helper method for calling [`v8::Object#GetPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#a169f2da506acbec34deadd9149a1925a) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::GetPrivate(v8::Local object, v8::Local key); -``` - - -### Nan::SetPrivate() - -A helper method for calling [`v8::Object#SetPrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#ace1769b0f3b86bfe9fda1010916360ee) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::SetPrivate(v8::Local object, v8::Local key, v8::Local value); -``` - - -### Nan::DeletePrivate() - -A helper method for calling [`v8::Object#DeletePrivate()`](https://v8docs.nodesource.com/node-7.2/db/d85/classv8_1_1_object.html#a138bb32a304f3982be02ad499693b8fd) in a way compatible across supported versions of V8. - -Signature: - -```c++ -Nan::Maybe Nan::DeletePrivate(v8::Local object, v8::Local key); -``` - - -### Nan::MakeMaybe() - -Wraps a `v8::Local<>` in a `Nan::MaybeLocal<>`. When called with a `Nan::MaybeLocal<>` it just returns its argument. This is useful in generic template code that builds on NAN. - -Synopsis: - -```c++ - MaybeLocal someNumber = MakeMaybe(New(3.141592654)); - MaybeLocal someString = MakeMaybe(New("probably")); -``` - -Signature: - -```c++ -template class MaybeMaybe> -Nan::MaybeLocal Nan::MakeMaybe(MaybeMaybe v); -``` diff --git a/truebit-implementation/node_modules/nan/doc/methods.md b/truebit-implementation/node_modules/nan/doc/methods.md deleted file mode 100644 index bae46f26..00000000 --- a/truebit-implementation/node_modules/nan/doc/methods.md +++ /dev/null @@ -1,659 +0,0 @@ -## JavaScript-accessible methods - -A _template_ is a blueprint for JavaScript functions and objects in a context. You can use a template to wrap C++ functions and data structures within JavaScript objects so that they can be manipulated from JavaScript. See the V8 Embedders Guide section on [Templates](https://github.com/v8/v8/wiki/Embedder%27s-Guide#templates) for further information. - -In order to expose functionality to JavaScript via a template, you must provide it to V8 in a form that it understands. Across the versions of V8 supported by NAN, JavaScript-accessible method signatures vary widely, NAN fully abstracts method declaration and provides you with an interface that is similar to the most recent V8 API but is backward-compatible with older versions that still use the now-deceased `v8::Argument` type. - -* **Method argument types** - - Nan::FunctionCallbackInfo - - Nan::PropertyCallbackInfo - - Nan::ReturnValue -* **Method declarations** - - Method declaration - - Getter declaration - - Setter declaration - - Property getter declaration - - Property setter declaration - - Property enumerator declaration - - Property deleter declaration - - Property query declaration - - Index getter declaration - - Index setter declaration - - Index enumerator declaration - - Index deleter declaration - - Index query declaration -* Method and template helpers - - Nan::SetMethod() - - Nan::SetPrototypeMethod() - - Nan::SetAccessor() - - Nan::SetNamedPropertyHandler() - - Nan::SetIndexedPropertyHandler() - - Nan::SetTemplate() - - Nan::SetPrototypeTemplate() - - Nan::SetInstanceTemplate() - - Nan::SetCallHandler() - - Nan::SetCallAsFunctionHandler() - - -### Nan::FunctionCallbackInfo - -`Nan::FunctionCallbackInfo` should be used in place of [`v8::FunctionCallbackInfo`](https://v8docs.nodesource.com/node-8.0/dd/d0d/classv8_1_1_function_callback_info.html), even with older versions of Node where `v8::FunctionCallbackInfo` does not exist. - -Definition: - -```c++ -template class FunctionCallbackInfo { - public: - ReturnValue GetReturnValue() const; - v8::Local Callee(); - v8::Local Data(); - v8::Local Holder(); - bool IsConstructCall(); - int Length() const; - v8::Local operator[](int i) const; - v8::Local This() const; - v8::Isolate *GetIsolate() const; -}; -``` - -See the [`v8::FunctionCallbackInfo`](https://v8docs.nodesource.com/node-8.0/dd/d0d/classv8_1_1_function_callback_info.html) documentation for usage details on these. See [`Nan::ReturnValue`](#api_nan_return_value) for further information on how to set a return value from methods. - - -### Nan::PropertyCallbackInfo - -`Nan::PropertyCallbackInfo` should be used in place of [`v8::PropertyCallbackInfo`](https://v8docs.nodesource.com/node-8.0/d7/dc5/classv8_1_1_property_callback_info.html), even with older versions of Node where `v8::PropertyCallbackInfo` does not exist. - -Definition: - -```c++ -template class PropertyCallbackInfo : public PropertyCallbackInfoBase { - public: - ReturnValue GetReturnValue() const; - v8::Isolate* GetIsolate() const; - v8::Local Data() const; - v8::Local This() const; - v8::Local Holder() const; -}; -``` - -See the [`v8::PropertyCallbackInfo`](https://v8docs.nodesource.com/node-8.0/d7/dc5/classv8_1_1_property_callback_info.html) documentation for usage details on these. See [`Nan::ReturnValue`](#api_nan_return_value) for further information on how to set a return value from property accessor methods. - - -### Nan::ReturnValue - -`Nan::ReturnValue` is used in place of [`v8::ReturnValue`](https://v8docs.nodesource.com/node-8.0/da/da7/classv8_1_1_return_value.html) on both [`Nan::FunctionCallbackInfo`](#api_nan_function_callback_info) and [`Nan::PropertyCallbackInfo`](#api_nan_property_callback_info) as the return type of `GetReturnValue()`. - -Example usage: - -```c++ -void EmptyArray(const Nan::FunctionCallbackInfo& info) { - info.GetReturnValue().Set(Nan::New()); -} -``` - -Definition: - -```c++ -template class ReturnValue { - public: - // Handle setters - template void Set(const v8::Local &handle); - template void Set(const Nan::Global &handle); - - // Fast primitive setters - void Set(bool value); - void Set(double i); - void Set(int32_t i); - void Set(uint32_t i); - - // Fast JS primitive setters - void SetNull(); - void SetUndefined(); - void SetEmptyString(); - - // Convenience getter for isolate - v8::Isolate *GetIsolate() const; -}; -``` - -See the documentation on [`v8::ReturnValue`](https://v8docs.nodesource.com/node-8.0/da/da7/classv8_1_1_return_value.html) for further information on this. - - -### Method declaration - -JavaScript-accessible methods should be declared with the following signature to form a `Nan::FunctionCallback`: - -```c++ -typedef void(*FunctionCallback)(const FunctionCallbackInfo&); -``` - -Example: - -```c++ -void MethodName(const Nan::FunctionCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a method as one is implicitly created for you. - -**Example usage** - -```c++ -// .h: -class Foo : public Nan::ObjectWrap { - ... - - static void Bar(const Nan::FunctionCallbackInfo& info); - static void Baz(const Nan::FunctionCallbackInfo& info); -} - - -// .cc: -void Foo::Bar(const Nan::FunctionCallbackInfo& info) { - ... -} - -void Foo::Baz(const Nan::FunctionCallbackInfo& info) { - ... -} -``` - -A helper macro `NAN_METHOD(methodname)` exists, compatible with NAN v1 method declarations. - -**Example usage with `NAN_METHOD(methodname)`** - -```c++ -// .h: -class Foo : public Nan::ObjectWrap { - ... - - static NAN_METHOD(Bar); - static NAN_METHOD(Baz); -} - - -// .cc: -NAN_METHOD(Foo::Bar) { - ... -} - -NAN_METHOD(Foo::Baz) { - ... -} -``` - -Use [`Nan::SetPrototypeMethod`](#api_nan_set_prototype_method) to attach a method to a JavaScript function prototype or [`Nan::SetMethod`](#api_nan_set_method) to attach a method directly on a JavaScript object. - - -### Getter declaration - -JavaScript-accessible getters should be declared with the following signature to form a `Nan::GetterCallback`: - -```c++ -typedef void(*GetterCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void GetterName(v8::Local property, - const Nan::PropertyCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a getter as one is implicitly created for you. - -A helper macro `NAN_GETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on [Accessors](https://developers.google.com/v8/embed#accesssors). - - -### Setter declaration - -JavaScript-accessible setters should be declared with the following signature to form a Nan::SetterCallback: - -```c++ -typedef void(*SetterCallback)(v8::Local, - v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void SetterName(v8::Local property, - v8::Local value, - const Nan::PropertyCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a setter as one is implicitly created for you. - -A helper macro `NAN_SETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on [Accessors](https://developers.google.com/v8/embed#accesssors). - - -### Property getter declaration - -JavaScript-accessible property getters should be declared with the following signature to form a Nan::PropertyGetterCallback: - -```c++ -typedef void(*PropertyGetterCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyGetterName(v8::Local property, - const Nan::PropertyCallbackInfo& info) { - ... -} -``` - -You do not need to declare a new `HandleScope` within a property getter as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_GETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property setter declaration - -JavaScript-accessible property setters should be declared with the following signature to form a Nan::PropertySetterCallback: - -```c++ -typedef void(*PropertySetterCallback)(v8::Local, - v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertySetterName(v8::Local property, - v8::Local value, - const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property setter as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_SETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property enumerator declaration - -JavaScript-accessible property enumerators should be declared with the following signature to form a Nan::PropertyEnumeratorCallback: - -```c++ -typedef void(*PropertyEnumeratorCallback)(const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyEnumeratorName(const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property enumerator as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_ENUMERATOR(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property deleter declaration - -JavaScript-accessible property deleters should be declared with the following signature to form a Nan::PropertyDeleterCallback: - -```c++ -typedef void(*PropertyDeleterCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyDeleterName(v8::Local property, - const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property deleter as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_DELETER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Property query declaration - -JavaScript-accessible property query methods should be declared with the following signature to form a Nan::PropertyQueryCallback: - -```c++ -typedef void(*PropertyQueryCallback)(v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void PropertyQueryName(v8::Local property, - const Nan::PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a property query method as one is implicitly created for you. - -A helper macro `NAN_PROPERTY_QUERY(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on named property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index getter declaration - -JavaScript-accessible index getter methods should be declared with the following signature to form a Nan::IndexGetterCallback: - -```c++ -typedef void(*IndexGetterCallback)(uint32_t, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexGetterName(uint32_t index, const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index getter as one is implicitly created for you. - -A helper macro `NAN_INDEX_GETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index setter declaration - -JavaScript-accessible index setter methods should be declared with the following signature to form a Nan::IndexSetterCallback: - -```c++ -typedef void(*IndexSetterCallback)(uint32_t, - v8::Local, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexSetterName(uint32_t index, - v8::Local value, - const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index setter as one is implicitly created for you. - -A helper macro `NAN_INDEX_SETTER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index enumerator declaration - -JavaScript-accessible index enumerator methods should be declared with the following signature to form a Nan::IndexEnumeratorCallback: - -```c++ -typedef void(*IndexEnumeratorCallback)(const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexEnumeratorName(const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index enumerator as one is implicitly created for you. - -A helper macro `NAN_INDEX_ENUMERATOR(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index deleter declaration - -JavaScript-accessible index deleter methods should be declared with the following signature to form a Nan::IndexDeleterCallback: - -```c++ -typedef void(*IndexDeleterCallback)(uint32_t, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexDeleterName(uint32_t index, const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index deleter as one is implicitly created for you. - -A helper macro `NAN_INDEX_DELETER(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Index query declaration - -JavaScript-accessible index query methods should be declared with the following signature to form a Nan::IndexQueryCallback: - -```c++ -typedef void(*IndexQueryCallback)(uint32_t, - const PropertyCallbackInfo&); -``` - -Example: - -```c++ -void IndexQueryName(uint32_t index, const PropertyCallbackInfo& info); -``` - -You do not need to declare a new `HandleScope` within a index query method as one is implicitly created for you. - -A helper macro `NAN_INDEX_QUERY(methodname)` exists, compatible with NAN v1 method declarations. - -Also see the V8 Embedders Guide documentation on indexed property [Interceptors](https://developers.google.com/v8/embed#interceptors). - - -### Nan::SetMethod() - -Sets a method with a given name directly on a JavaScript object where the method has the `Nan::FunctionCallback` signature (see Method declaration). - -Signature: - -```c++ -void Nan::SetMethod(v8::Local recv, - const char *name, - Nan::FunctionCallback callback) -void Nan::SetMethod(v8::Local templ, - const char *name, - Nan::FunctionCallback callback) -``` - - -### Nan::SetPrototypeMethod() - -Sets a method with a given name on a `FunctionTemplate`'s prototype where the method has the `Nan::FunctionCallback` signature (see Method declaration). - -Signature: - -```c++ -void Nan::SetPrototypeMethod(v8::Local recv, - const char* name, - Nan::FunctionCallback callback) -``` - - -### Nan::SetAccessor() - -Sets getters and setters for a property with a given name on an `ObjectTemplate` or a plain `Object`. Accepts getters with the `Nan::GetterCallback` signature (see Getter declaration) and setters with the `Nan::SetterCallback` signature (see Setter declaration). - -Signature: - -```c++ -void SetAccessor(v8::Local tpl, - v8::Local name, - Nan::GetterCallback getter, - Nan::SetterCallback setter = 0, - v8::Local data = v8::Local(), - v8::AccessControl settings = v8::DEFAULT, - v8::PropertyAttribute attribute = v8::None, - imp::Sig signature = imp::Sig()); -bool SetAccessor(v8::Local obj, - v8::Local name, - Nan::GetterCallback getter, - Nan::SetterCallback setter = 0, - v8::Local data = v8::Local(), - v8::AccessControl settings = v8::DEFAULT, - v8::PropertyAttribute attribute = v8::None) -``` - -See the V8 [`ObjectTemplate#SetAccessor()`](https://v8docs.nodesource.com/node-8.0/db/d5f/classv8_1_1_object_template.html#aca0ed196f8a9adb1f68b1aadb6c9cd77) and [`Object#SetAccessor()`](https://v8docs.nodesource.com/node-8.0/db/d85/classv8_1_1_object.html#a3f9dee085f5ec346465f1dc924325043) for further information about how to use `Nan::SetAccessor()`. - - -### Nan::SetNamedPropertyHandler() - -Sets named property getters, setters, query, deleter and enumerator methods on an `ObjectTemplate`. Accepts: - -* Property getters with the `Nan::PropertyGetterCallback` signature (see Property getter declaration) -* Property setters with the `Nan::PropertySetterCallback` signature (see Property setter declaration) -* Property query methods with the `Nan::PropertyQueryCallback` signature (see Property query declaration) -* Property deleters with the `Nan::PropertyDeleterCallback` signature (see Property deleter declaration) -* Property enumerators with the `Nan::PropertyEnumeratorCallback` signature (see Property enumerator declaration) - -Signature: - -```c++ -void SetNamedPropertyHandler(v8::Local tpl, - Nan::PropertyGetterCallback getter, - Nan::PropertySetterCallback setter = 0, - Nan::PropertyQueryCallback query = 0, - Nan::PropertyDeleterCallback deleter = 0, - Nan::PropertyEnumeratorCallback enumerator = 0, - v8::Local data = v8::Local()) -``` - -See the V8 [`ObjectTemplate#SetNamedPropertyHandler()`](https://v8docs.nodesource.com/io.js-3.3/db/d5f/classv8_1_1_object_template.html#a34d1cc45b642cd131706663801aadd76) for further information about how to use `Nan::SetNamedPropertyHandler()`. - - -### Nan::SetIndexedPropertyHandler() - -Sets indexed property getters, setters, query, deleter and enumerator methods on an `ObjectTemplate`. Accepts: - -* Indexed property getters with the `Nan::IndexGetterCallback` signature (see Index getter declaration) -* Indexed property setters with the `Nan::IndexSetterCallback` signature (see Index setter declaration) -* Indexed property query methods with the `Nan::IndexQueryCallback` signature (see Index query declaration) -* Indexed property deleters with the `Nan::IndexDeleterCallback` signature (see Index deleter declaration) -* Indexed property enumerators with the `Nan::IndexEnumeratorCallback` signature (see Index enumerator declaration) - -Signature: - -```c++ -void SetIndexedPropertyHandler(v8::Local tpl, - Nan::IndexGetterCallback getter, - Nan::IndexSetterCallback setter = 0, - Nan::IndexQueryCallback query = 0, - Nan::IndexDeleterCallback deleter = 0, - Nan::IndexEnumeratorCallback enumerator = 0, - v8::Local data = v8::Local()) -``` - -See the V8 [`ObjectTemplate#SetIndexedPropertyHandler()`](https://v8docs.nodesource.com/node-8.0/db/d5f/classv8_1_1_object_template.html#ac89f06d634add0e890452033f7d17ff1) for further information about how to use `Nan::SetIndexedPropertyHandler()`. - - -### Nan::SetTemplate() - -Adds properties on an `Object`'s or `Function`'s template. - -Signature: - -```c++ -void Nan::SetTemplate(v8::Local templ, - const char *name, - v8::Local value); -void Nan::SetTemplate(v8::Local templ, - v8::Local name, - v8::Local value, - v8::PropertyAttribute attributes) -``` - -Calls the `Template`'s [`Set()`](https://v8docs.nodesource.com/node-8.0/db/df7/classv8_1_1_template.html#ae3fbaff137557aa6a0233bc7e52214ac). - - -### Nan::SetPrototypeTemplate() - -Adds properties on an `Object`'s or `Function`'s prototype template. - -Signature: - -```c++ -void Nan::SetPrototypeTemplate(v8::Local templ, - const char *name, - v8::Local value); -void Nan::SetPrototypeTemplate(v8::Local templ, - v8::Local name, - v8::Local value, - v8::PropertyAttribute attributes) -``` - -Calls the `FunctionTemplate`'s _PrototypeTemplate's_ [`Set()`](https://v8docs.nodesource.com/io.js-3.3/db/df7/classv8_1_1_template.html#a2db6a56597bf23c59659c0659e564ddf). - - -### Nan::SetInstanceTemplate() - -Use to add instance properties on `FunctionTemplate`'s. - -Signature: - -```c++ -void Nan::SetInstanceTemplate(v8::Local templ, - const char *name, - v8::Local value); -void Nan::SetInstanceTemplate(v8::Local templ, - v8::Local name, - v8::Local value, - v8::PropertyAttribute attributes) -``` - -Calls the `FunctionTemplate`'s _InstanceTemplate's_ [`Set()`](https://v8docs.nodesource.com/io.js-3.3/db/df7/classv8_1_1_template.html#a2db6a56597bf23c59659c0659e564ddf). - - -### Nan::SetCallHandler() - -Set the call-handler callback for a `v8::FunctionTemplate`. -This callback is called whenever the function created from this FunctionTemplate is called. - -Signature: - -```c++ -void Nan::SetCallHandler(v8::Local templ, Nan::FunctionCallback callback, v8::Local data = v8::Local()) -``` - -Calls the `FunctionTemplate`'s [`SetCallHandler()`](https://v8docs.nodesource.com/node-8.0/d8/d83/classv8_1_1_function_template.html#a2d3845db66392074c5a018a66efbfada). - - -### Nan::SetCallAsFunctionHandler() - -Sets the callback to be used when calling instances created from the `v8::ObjectTemplate` as a function. -If no callback is set, instances behave like normal JavaScript objects that cannot be called as a function. - -Signature: - -```c++ -void Nan::SetCallAsFunctionHandler(v8::Local templ, Nan::FunctionCallback callback, v8::Local data = v8::Local()) -``` - -Calls the `ObjectTemplate`'s [`SetCallAsFunctionHandler()`](https://v8docs.nodesource.com/node-8.0/db/d5f/classv8_1_1_object_template.html#a5e9612fc80bf6db8f2da199b9b0bd04e). - diff --git a/truebit-implementation/node_modules/nan/doc/new.md b/truebit-implementation/node_modules/nan/doc/new.md deleted file mode 100644 index 0804b62f..00000000 --- a/truebit-implementation/node_modules/nan/doc/new.md +++ /dev/null @@ -1,147 +0,0 @@ -## New - -NAN provides a `Nan::New()` helper for the creation of new JavaScript objects in a way that's compatible across the supported versions of V8. - - - Nan::New() - - Nan::Undefined() - - Nan::Null() - - Nan::True() - - Nan::False() - - Nan::EmptyString() - - - -### Nan::New() - -`Nan::New()` should be used to instantiate new JavaScript objects. - -Refer to the specific V8 type in the [V8 documentation](https://v8docs.nodesource.com/io.js-3.3/d1/d83/classv8_1_1_data.html) for information on the types of arguments required for instantiation. - -Signatures: - -Return types are mostly omitted from the signatures for simplicity. In most cases the type will be contained within a `v8::Local`. The following types will be contained within a `Nan::MaybeLocal`: `v8::String`, `v8::Date`, `v8::RegExp`, `v8::Script`, `v8::UnboundScript`. - -Empty objects: - -```c++ -Nan::New(); -``` - -Generic single and multiple-argument: - -```c++ -Nan::New(A0 arg0); -Nan::New(A0 arg0, A1 arg1); -Nan::New(A0 arg0, A1 arg1, A2 arg2); -Nan::New(A0 arg0, A1 arg1, A2 arg2, A3 arg3); -``` - -For creating `v8::FunctionTemplate` and `v8::Function` objects: - -_The definition of `Nan::FunctionCallback` can be found in the [Method declaration](./methods.md#api_nan_method) documentation._ - -```c++ -Nan::New(Nan::FunctionCallback callback, - v8::Local data = v8::Local()); -Nan::New(Nan::FunctionCallback callback, - v8::Local data = v8::Local(), - A2 a2 = A2()); -``` - -Native number types: - -```c++ -v8::Local Nan::New(bool value); -v8::Local Nan::New(int32_t value); -v8::Local Nan::New(uint32_t value); -v8::Local Nan::New(double value); -``` - -String types: - -```c++ -Nan::MaybeLocal Nan::New(std::string const& value); -Nan::MaybeLocal Nan::New(const char * value, int length); -Nan::MaybeLocal Nan::New(const char * value); -Nan::MaybeLocal Nan::New(const uint16_t * value); -Nan::MaybeLocal Nan::New(const uint16_t * value, int length); -``` - -Specialized types: - -```c++ -v8::Local Nan::New(v8::String::ExternalStringResource * value); -v8::Local Nan::New(Nan::ExternalOneByteStringResource * value); -v8::Local Nan::New(v8::Local pattern, v8::RegExp::Flags flags); -``` - -Note that `Nan::ExternalOneByteStringResource` maps to [`v8::String::ExternalOneByteStringResource`](https://v8docs.nodesource.com/io.js-3.3/d9/db3/classv8_1_1_string_1_1_external_one_byte_string_resource.html), and `v8::String::ExternalAsciiStringResource` in older versions of V8. - - - -### Nan::Undefined() - -A helper method to reference the `v8::Undefined` object in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::Undefined() -``` - - -### Nan::Null() - -A helper method to reference the `v8::Null` object in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::Null() -``` - - -### Nan::True() - -A helper method to reference the `v8::Boolean` object representing the `true` value in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::True() -``` - - -### Nan::False() - -A helper method to reference the `v8::Boolean` object representing the `false` value in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::False() -``` - - -### Nan::EmptyString() - -Call [`v8::String::Empty`](https://v8docs.nodesource.com/io.js-3.3/d2/db3/classv8_1_1_string.html#a7c1bc8886115d7ee46f1d571dd6ebc6d) to reference the empty string in a way that is compatible across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::EmptyString() -``` - - - -### Nan::NewOneByteString() - -An implementation of [`v8::String::NewFromOneByte()`](https://v8docs.nodesource.com/io.js-3.3/d2/db3/classv8_1_1_string.html#a5264d50b96d2c896ce525a734dc10f09) provided for consistent availability and API across supported versions of V8. Allocates a new string from Latin-1 data. - -Signature: - -```c++ -Nan::MaybeLocal Nan::NewOneByteString(const uint8_t * value, - int length = -1) -``` diff --git a/truebit-implementation/node_modules/nan/doc/node_misc.md b/truebit-implementation/node_modules/nan/doc/node_misc.md deleted file mode 100644 index 11a1990a..00000000 --- a/truebit-implementation/node_modules/nan/doc/node_misc.md +++ /dev/null @@ -1,123 +0,0 @@ -## Miscellaneous Node Helpers - - - Nan::AsyncResource - - Nan::MakeCallback() - - NAN_MODULE_INIT() - - Nan::Export() - - -### Nan::AsyncResource - -This class is analogous to the `AsyncResource` JavaScript class exposed by Node's [async_hooks][] API. - -When calling back into JavaScript asynchornously, special care must be taken to ensure that the runtime can properly track -async hops. `Nan::AsyncResource` is a class that provides an RAII wrapper around `node::EmitAsyncInit`, `node::EmitAsyncDestroy`, -and `node::MakeCallback`. Using this mechanism to call back into JavaScript, as opposed to `Nan::MakeCallback` or -`v8::Function::Call` ensures that the callback is executed in the correct async context. This ensures that async mechanisms -such as domains and [async_hooks][] function correctly. - -Definition: - -```c++ -class AsyncResource { - public: - AsyncResource(v8::Local name, - v8::Local resource = New()); - AsyncResource(const char* name, - v8::Local resource = New()); - ~AsyncResource(); - - v8::MaybeLocal runInAsyncScope(v8::Local target, - v8::Local func, - int argc, - v8::Local* argv); - v8::MaybeLocal runInAsyncScope(v8::Local target, - v8::Local symbol, - int argc, - v8::Local* argv); - v8::MaybeLocal runInAsyncScope(v8::Local target, - const char* method, - int argc, - v8::Local* argv); -}; -``` - -* `name`: Identifier for the kind of resource that is being provided for diagnostics information exposed by the [async_hooks][] - API. This will be passed to the possible `init` hook as the `type`. To avoid name collisions with other modules we recommend - that the name include the name of the owning module as a prefix. For example `mysql` module could use something like - `mysql:batch-db-query-resource`. -* `resource`: An optional object associated with the async work that will be passed to the possible [async_hooks][] - `init` hook. If this parameter is omitted, or an empty handle is provided, this object will be created automatically. -* When calling JS on behalf of this resource, one can use `runInAsyncScope`. This will ensure that the callback runs in the - correct async execution context. -* `AsyncDestroy` is automatically called when an AsyncResource object is destroyed. - -For more details, see the Node [async_hooks][] documentation. You might also want to take a look at the documentation for the -[N-API counterpart][napi]. For example usage, see the `asyncresource.cpp` example in the `test/cpp` directory. - - -### Nan::MakeCallback() - -Deprecated wrappers around the legacy `node::MakeCallback()` APIs. Node.js 10+ -has deprecated these legacy APIs as they do not provide a mechanism to preserve -async context. - -We recommend that you use the `AsyncResource` class and `AsyncResource::runInAsyncScope` instead of using `Nan::MakeCallback` or -`v8::Function#Call()` directly. `AsyncResource` properly takes care of running the callback in the correct async execution -context – something that is essential for functionality like domains, async_hooks and async debugging. - -Signatures: - -```c++ -NAN_DEPRECATED -v8::Local Nan::MakeCallback(v8::Local target, - v8::Local func, - int argc, - v8::Local* argv); -NAN_DEPRECATED -v8::Local Nan::MakeCallback(v8::Local target, - v8::Local symbol, - int argc, - v8::Local* argv); -NAN_DEPRECATED -v8::Local Nan::MakeCallback(v8::Local target, - const char* method, - int argc, - v8::Local* argv); -``` - - - -### NAN_MODULE_INIT() - -Used to define the entry point function to a Node add-on. Creates a function with a given `name` that receives a `target` object representing the equivalent of the JavaScript `exports` object. - -See example below. - - -### Nan::Export() - -A simple helper to register a `v8::FunctionTemplate` from a JavaScript-accessible method (see [Methods](./methods.md)) as a property on an object. Can be used in a way similar to assigning properties to `module.exports` in JavaScript. - -Signature: - -```c++ -void Export(v8::Local target, const char *name, Nan::FunctionCallback f) -``` - -Also available as the shortcut `NAN_EXPORT` macro. - -Example: - -```c++ -NAN_METHOD(Foo) { - ... -} - -NAN_MODULE_INIT(Init) { - NAN_EXPORT(target, Foo); -} -``` - -[async_hooks]: https://nodejs.org/dist/latest-v9.x/docs/api/async_hooks.html -[napi]: https://nodejs.org/dist/latest-v9.x/docs/api/n-api.html#n_api_custom_asynchronous_operations diff --git a/truebit-implementation/node_modules/nan/doc/object_wrappers.md b/truebit-implementation/node_modules/nan/doc/object_wrappers.md deleted file mode 100644 index e89832b6..00000000 --- a/truebit-implementation/node_modules/nan/doc/object_wrappers.md +++ /dev/null @@ -1,263 +0,0 @@ -## Object Wrappers - -The `ObjectWrap` class can be used to make wrapped C++ objects and a factory of wrapped objects. - - - Nan::ObjectWrap - - - -### Nan::ObjectWrap() - -A reimplementation of `node::ObjectWrap` that adds some API not present in older versions of Node. Should be preferred over `node::ObjectWrap` in all cases for consistency. - -Definition: - -```c++ -class ObjectWrap { - public: - ObjectWrap(); - - virtual ~ObjectWrap(); - - template - static inline T* Unwrap(v8::Local handle); - - inline v8::Local handle(); - - inline Nan::Persistent& persistent(); - - protected: - inline void Wrap(v8::Local handle); - - inline void MakeWeak(); - - /* Ref() marks the object as being attached to an event loop. - * Refed objects will not be garbage collected, even if - * all references are lost. - */ - virtual void Ref(); - - /* Unref() marks an object as detached from the event loop. This is its - * default state. When an object with a "weak" reference changes from - * attached to detached state it will be freed. Be careful not to access - * the object after making this call as it might be gone! - * (A "weak reference" means an object that only has a - * persistant handle.) - * - * DO NOT CALL THIS FROM DESTRUCTOR - */ - virtual void Unref(); - - int refs_; // ro -}; -``` - -See the Node documentation on [Wrapping C++ Objects](https://nodejs.org/api/addons.html#addons_wrapping_c_objects) for more details. - -### This vs. Holder - -When calling `Unwrap`, it is important that the argument is indeed some JavaScript object which got wrapped by a `Wrap` call for this class or any derived class. -The `Signature` installed by [`Nan::SetPrototypeMethod()`](methods.md#api_nan_set_prototype_method) does ensure that `info.Holder()` is just such an instance. -In Node 0.12 and later, `info.This()` will also be of such a type, since otherwise the invocation will get rejected. -However, in Node 0.10 and before it was possible to invoke a method on a JavaScript object which just had the extension type in its prototype chain. -In such a situation, calling `Unwrap` on `info.This()` will likely lead to a failed assertion causing a crash, but could lead to even more serious corruption. - -On the other hand, calling `Unwrap` in an [accessor](methods.md#api_nan_set_accessor) should not use `Holder()` if the accessor is defined on the prototype. -So either define your accessors on the instance template, -or use `This()` after verifying that it is indeed a valid object. - -### Examples - -#### Basic - -```c++ -class MyObject : public Nan::ObjectWrap { - public: - static NAN_MODULE_INIT(Init) { - v8::Local tpl = Nan::New(New); - tpl->SetClassName(Nan::New("MyObject").ToLocalChecked()); - tpl->InstanceTemplate()->SetInternalFieldCount(1); - - Nan::SetPrototypeMethod(tpl, "getHandle", GetHandle); - Nan::SetPrototypeMethod(tpl, "getValue", GetValue); - - constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked()); - Nan::Set(target, Nan::New("MyObject").ToLocalChecked(), - Nan::GetFunction(tpl).ToLocalChecked()); - } - - private: - explicit MyObject(double value = 0) : value_(value) {} - ~MyObject() {} - - static NAN_METHOD(New) { - if (info.IsConstructCall()) { - double value = info[0]->IsUndefined() ? 0 : Nan::To(info[0]).FromJust(); - MyObject *obj = new MyObject(value); - obj->Wrap(info.This()); - info.GetReturnValue().Set(info.This()); - } else { - const int argc = 1; - v8::Local argv[argc] = {info[0]}; - v8::Local cons = Nan::New(constructor()); - info.GetReturnValue().Set(cons->NewInstance(argc, argv)); - } - } - - static NAN_METHOD(GetHandle) { - MyObject* obj = Nan::ObjectWrap::Unwrap(info.Holder()); - info.GetReturnValue().Set(obj->handle()); - } - - static NAN_METHOD(GetValue) { - MyObject* obj = Nan::ObjectWrap::Unwrap(info.Holder()); - info.GetReturnValue().Set(obj->value_); - } - - static inline Nan::Persistent & constructor() { - static Nan::Persistent my_constructor; - return my_constructor; - } - - double value_; -}; - -NODE_MODULE(objectwrapper, MyObject::Init) -``` - -To use in Javascript: - -```Javascript -var objectwrapper = require('bindings')('objectwrapper'); - -var obj = new objectwrapper.MyObject(5); -console.log('Should be 5: ' + obj.getValue()); -``` - -#### Factory of wrapped objects - -```c++ -class MyFactoryObject : public Nan::ObjectWrap { - public: - static NAN_MODULE_INIT(Init) { - v8::Local tpl = Nan::New(New); - tpl->InstanceTemplate()->SetInternalFieldCount(1); - - Nan::SetPrototypeMethod(tpl, "getValue", GetValue); - - constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked()); - } - - static NAN_METHOD(NewInstance) { - v8::Local cons = Nan::New(constructor()); - double value = info[0]->IsNumber() ? Nan::To(info[0]).FromJust() : 0; - const int argc = 1; - v8::Local argv[1] = {Nan::New(value)}; - info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); - } - - // Needed for the next example: - inline double value() const { - return value_; - } - - private: - explicit MyFactoryObject(double value = 0) : value_(value) {} - ~MyFactoryObject() {} - - static NAN_METHOD(New) { - if (info.IsConstructCall()) { - double value = info[0]->IsNumber() ? Nan::To(info[0]).FromJust() : 0; - MyFactoryObject * obj = new MyFactoryObject(value); - obj->Wrap(info.This()); - info.GetReturnValue().Set(info.This()); - } else { - const int argc = 1; - v8::Local argv[argc] = {info[0]}; - v8::Local cons = Nan::New(constructor()); - info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); - } - } - - static NAN_METHOD(GetValue) { - MyFactoryObject* obj = ObjectWrap::Unwrap(info.Holder()); - info.GetReturnValue().Set(obj->value_); - } - - static inline Nan::Persistent & constructor() { - static Nan::Persistent my_constructor; - return my_constructor; - } - - double value_; -}; - -NAN_MODULE_INIT(Init) { - MyFactoryObject::Init(target); - Nan::Set(target, - Nan::New("newFactoryObjectInstance").ToLocalChecked(), - Nan::GetFunction( - Nan::New(MyFactoryObject::NewInstance)).ToLocalChecked() - ); -} - -NODE_MODULE(wrappedobjectfactory, Init) -``` - -To use in Javascript: - -```Javascript -var wrappedobjectfactory = require('bindings')('wrappedobjectfactory'); - -var obj = wrappedobjectfactory.newFactoryObjectInstance(10); -console.log('Should be 10: ' + obj.getValue()); -``` - -#### Passing wrapped objects around - -Use the `MyFactoryObject` class above along with the following: - -```c++ -static NAN_METHOD(Sum) { - Nan::MaybeLocal maybe1 = Nan::To(info[0]); - Nan::MaybeLocal maybe2 = Nan::To(info[1]); - - // Quick check: - if (maybe1.IsEmpty() || maybe2.IsEmpty()) { - // return value is undefined by default - return; - } - - MyFactoryObject* obj1 = - Nan::ObjectWrap::Unwrap(maybe1.ToLocalChecked()); - MyFactoryObject* obj2 = - Nan::ObjectWrap::Unwrap(maybe2.ToLocalChecked()); - - info.GetReturnValue().Set(Nan::New(obj1->value() + obj2->value())); -} - -NAN_MODULE_INIT(Init) { - MyFactoryObject::Init(target); - Nan::Set(target, - Nan::New("newFactoryObjectInstance").ToLocalChecked(), - Nan::GetFunction( - Nan::New(MyFactoryObject::NewInstance)).ToLocalChecked() - ); - Nan::Set(target, - Nan::New("sum").ToLocalChecked(), - Nan::GetFunction(Nan::New(Sum)).ToLocalChecked() - ); -} - -NODE_MODULE(myaddon, Init) -``` - -To use in Javascript: - -```Javascript -var myaddon = require('bindings')('myaddon'); - -var obj1 = myaddon.newFactoryObjectInstance(5); -var obj2 = myaddon.newFactoryObjectInstance(10); -console.log('sum of object values: ' + myaddon.sum(obj1, obj2)); -``` diff --git a/truebit-implementation/node_modules/nan/doc/persistent.md b/truebit-implementation/node_modules/nan/doc/persistent.md deleted file mode 100644 index f6ebefa0..00000000 --- a/truebit-implementation/node_modules/nan/doc/persistent.md +++ /dev/null @@ -1,295 +0,0 @@ -## Persistent references - -An object reference that is independent of any `HandleScope` is a _persistent_ reference. Where a `Local` handle only lives as long as the `HandleScope` in which it was allocated, a `Persistent` handle remains valid until it is explicitly disposed. - -Due to the evolution of the V8 API, it is necessary for NAN to provide a wrapper implementation of the `Persistent` classes to supply compatibility across the V8 versions supported. - - - Nan::PersistentBase & v8::PersistentBase - - Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits - - Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits - - Nan::Persistent - - Nan::Global - - Nan::WeakCallbackInfo - - Nan::WeakCallbackType - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://developers.google.com/v8/embed#handles). - - -### Nan::PersistentBase & v8::PersistentBase - -A persistent handle contains a reference to a storage cell in V8 which holds an object value and which is updated by the garbage collector whenever the object is moved. A new storage cell can be created using the constructor or `Nan::PersistentBase::Reset()`. Existing handles can be disposed using an argument-less `Nan::PersistentBase::Reset()`. - -Definition: - -_(note: this is implemented as `Nan::PersistentBase` for older versions of V8 and the native `v8::PersistentBase` is used for newer versions of V8)_ - -```c++ -template class PersistentBase { - public: - /** - * If non-empty, destroy the underlying storage cell - */ - void Reset(); - - /** - * If non-empty, destroy the underlying storage cell and create a new one with - * the contents of another if it is also non-empty - */ - template void Reset(const v8::Local &other); - - /** - * If non-empty, destroy the underlying storage cell and create a new one with - * the contents of another if it is also non-empty - */ - template void Reset(const PersistentBase &other); - - /** - * If non-empty, destroy the underlying storage cell - * IsEmpty() will return true after this call. - */ - bool IsEmpty(); - - void Empty(); - - template bool operator==(const PersistentBase &that); - - template bool operator==(const v8::Local &that); - - template bool operator!=(const PersistentBase &that); - - template bool operator!=(const v8::Local &that); - - /** - * Install a finalization callback on this object. - * NOTE: There is no guarantee as to *when* or even *if* the callback is - * invoked. The invocation is performed solely on a best effort basis. - * As always, GC-based finalization should *not* be relied upon for any - * critical form of resource management! At the moment you can either - * specify a parameter for the callback or the location of two internal - * fields in the dying object. - */ - template - void SetWeak(P *parameter, - typename WeakCallbackInfo

::Callback callback, - WeakCallbackType type); - - void ClearWeak(); - - /** - * Marks the reference to this object independent. Garbage collector is free - * to ignore any object groups containing this object. Weak callback for an - * independent handle should not assume that it will be preceded by a global - * GC prologue callback or followed by a global GC epilogue callback. - */ - void MarkIndependent() const; - - bool IsIndependent() const; - - /** Checks if the handle holds the only reference to an object. */ - bool IsNearDeath() const; - - /** Returns true if the handle's reference is weak. */ - bool IsWeak() const -}; -``` - -See the V8 documentation for [`PersistentBase`](https://v8docs.nodesource.com/io.js-3.3/d4/dca/classv8_1_1_persistent_base.html) for further information. - -**Tip:** To get a `v8::Local` reference to the original object back from a `PersistentBase` or `Persistent` object: - -```c++ -v8::Local object = Nan::New(persistent); -``` - - -### Nan::NonCopyablePersistentTraits & v8::NonCopyablePersistentTraits - -Default traits for `Nan::Persistent`. This class does not allow use of the a copy constructor or assignment operator. At present `kResetInDestructor` is not set, but that will change in a future version. - -Definition: - -_(note: this is implemented as `Nan::NonCopyablePersistentTraits` for older versions of V8 and the native `v8::NonCopyablePersistentTraits` is used for newer versions of V8)_ - -```c++ -template class NonCopyablePersistentTraits { - public: - typedef Persistent > NonCopyablePersistent; - - static const bool kResetInDestructor = false; - - template - static void Copy(const Persistent &source, - NonCopyablePersistent *dest); - - template static void Uncompilable(); -}; -``` - -See the V8 documentation for [`NonCopyablePersistentTraits`](https://v8docs.nodesource.com/io.js-3.3/de/d73/classv8_1_1_non_copyable_persistent_traits.html) for further information. - - -### Nan::CopyablePersistentTraits & v8::CopyablePersistentTraits - -A helper class of traits to allow copying and assignment of `Persistent`. This will clone the contents of storage cell, but not any of the flags, etc.. - -Definition: - -_(note: this is implemented as `Nan::CopyablePersistentTraits` for older versions of V8 and the native `v8::NonCopyablePersistentTraits` is used for newer versions of V8)_ - -```c++ -template -class CopyablePersistentTraits { - public: - typedef Persistent > CopyablePersistent; - - static const bool kResetInDestructor = true; - - template - static void Copy(const Persistent &source, - CopyablePersistent *dest); -}; -``` - -See the V8 documentation for [`CopyablePersistentTraits`](https://v8docs.nodesource.com/io.js-3.3/da/d5c/structv8_1_1_copyable_persistent_traits.html) for further information. - - -### Nan::Persistent - -A type of `PersistentBase` which allows copy and assignment. Copy, assignment and destructor behavior is controlled by the traits class `M`. - -Definition: - -```c++ -template > -class Persistent; - -template class Persistent : public PersistentBase { - public: - /** - * A Persistent with no storage cell. - */ - Persistent(); - - /** - * Construct a Persistent from a v8::Local. When the v8::Local is non-empty, a - * new storage cell is created pointing to the same object, and no flags are - * set. - */ - template Persistent(v8::Local that); - - /** - * Construct a Persistent from a Persistent. When the Persistent is non-empty, - * a new storage cell is created pointing to the same object, and no flags are - * set. - */ - Persistent(const Persistent &that); - - /** - * The copy constructors and assignment operator create a Persistent exactly - * as the Persistent constructor, but the Copy function from the traits class - * is called, allowing the setting of flags based on the copied Persistent. - */ - Persistent &operator=(const Persistent &that); - - template - Persistent &operator=(const Persistent &that); - - /** - * The destructor will dispose the Persistent based on the kResetInDestructor - * flags in the traits class. Since not calling dispose can result in a - * memory leak, it is recommended to always set this flag. - */ - ~Persistent(); -}; -``` - -See the V8 documentation for [`Persistent`](https://v8docs.nodesource.com/io.js-3.3/d2/d78/classv8_1_1_persistent.html) for further information. - - -### Nan::Global - -A type of `PersistentBase` which has move semantics. - -```c++ -template class Global : public PersistentBase { - public: - /** - * A Global with no storage cell. - */ - Global(); - - /** - * Construct a Global from a v8::Local. When the v8::Local is non-empty, a new - * storage cell is created pointing to the same object, and no flags are set. - */ - template Global(v8::Local that); - /** - * Construct a Global from a PersistentBase. When the Persistent is non-empty, - * a new storage cell is created pointing to the same object, and no flags are - * set. - */ - template Global(const PersistentBase &that); - - /** - * Pass allows returning globals from functions, etc. - */ - Global Pass(); -}; -``` - -See the V8 documentation for [`Global`](https://v8docs.nodesource.com/io.js-3.3/d5/d40/classv8_1_1_global.html) for further information. - - -### Nan::WeakCallbackInfo - -`Nan::WeakCallbackInfo` is used as an argument when setting a persistent reference as weak. You may need to free any external resources attached to the object. It is a mirror of `v8:WeakCallbackInfo` as found in newer versions of V8. - -Definition: - -```c++ -template class WeakCallbackInfo { - public: - typedef void (*Callback)(const WeakCallbackInfo& data); - - v8::Isolate *GetIsolate() const; - - /** - * Get the parameter that was associated with the weak handle. - */ - T *GetParameter() const; - - /** - * Get pointer from internal field, index can be 0 or 1. - */ - void *GetInternalField(int index) const; -}; -``` - -Example usage: - -```c++ -void weakCallback(const WeakCallbackInfo &data) { - int *parameter = data.GetParameter(); - delete parameter; -} - -Persistent obj; -int *data = new int(0); -obj.SetWeak(data, callback, WeakCallbackType::kParameter); -``` - -See the V8 documentation for [`WeakCallbackInfo`](https://v8docs.nodesource.com/io.js-3.3/d8/d06/classv8_1_1_weak_callback_info.html) for further information. - - -### Nan::WeakCallbackType - -Represents the type of a weak callback. -A weak callback of type `kParameter` makes the supplied parameter to `Nan::PersistentBase::SetWeak` available through `WeakCallbackInfo::GetParameter`. -A weak callback of type `kInternalFields` uses up to two internal fields at indices 0 and 1 on the `Nan::PersistentBase` being made weak. -Note that only `v8::Object`s and derivatives can have internal fields. - -Definition: - -```c++ -enum class WeakCallbackType { kParameter, kInternalFields }; -``` diff --git a/truebit-implementation/node_modules/nan/doc/scopes.md b/truebit-implementation/node_modules/nan/doc/scopes.md deleted file mode 100644 index 1dfb417c..00000000 --- a/truebit-implementation/node_modules/nan/doc/scopes.md +++ /dev/null @@ -1,73 +0,0 @@ -## Scopes - -A _local handle_ is a pointer to an object. All V8 objects are accessed using handles, they are necessary because of the way the V8 garbage collector works. - -A handle scope can be thought of as a container for any number of handles. When you've finished with your handles, instead of deleting each one individually you can simply delete their scope. - -The creation of `HandleScope` objects is different across the supported versions of V8. Therefore, NAN provides its own implementations that can be used safely across these. - - - Nan::HandleScope - - Nan::EscapableHandleScope - -Also see the V8 Embedders Guide section on [Handles and Garbage Collection](https://github.com/v8/v8/wiki/Embedder%27s%20Guide#handles-and-garbage-collection). - - -### Nan::HandleScope - -A simple wrapper around [`v8::HandleScope`](https://v8docs.nodesource.com/io.js-3.3/d3/d95/classv8_1_1_handle_scope.html). - -Definition: - -```c++ -class Nan::HandleScope { - public: - Nan::HandleScope(); - static int NumberOfHandles(); -}; -``` - -Allocate a new `Nan::HandleScope` whenever you are creating new V8 JavaScript objects. Note that an implicit `HandleScope` is created for you on JavaScript-accessible methods so you do not need to insert one yourself. - -Example: - -```c++ -// new object is created, it needs a new scope: -void Pointless() { - Nan::HandleScope scope; - v8::Local obj = Nan::New(); -} - -// JavaScript-accessible method already has a HandleScope -NAN_METHOD(Pointless2) { - v8::Local obj = Nan::New(); -} -``` - - -### Nan::EscapableHandleScope - -Similar to [`Nan::HandleScope`](#api_nan_handle_scope) but should be used in cases where a function needs to return a V8 JavaScript type that has been created within it. - -Definition: - -```c++ -class Nan::EscapableHandleScope { - public: - Nan::EscapableHandleScope(); - static int NumberOfHandles(); - template v8::Local Escape(v8::Local value); -} -``` - -Use `Escape(value)` to return the object. - -Example: - -```c++ -v8::Local EmptyObj() { - Nan::EscapableHandleScope scope; - v8::Local obj = Nan::New(); - return scope.Escape(obj); -} -``` - diff --git a/truebit-implementation/node_modules/nan/doc/script.md b/truebit-implementation/node_modules/nan/doc/script.md deleted file mode 100644 index e518505e..00000000 --- a/truebit-implementation/node_modules/nan/doc/script.md +++ /dev/null @@ -1,38 +0,0 @@ -## Script - -NAN provides a `v8::Script` helpers as the API has changed over the supported versions of V8. - - - Nan::CompileScript() - - Nan::RunScript() - - - -### Nan::CompileScript() - -A wrapper around [`v8::Script::Compile()`](https://v8docs.nodesource.com/io.js-3.3/da/da5/classv8_1_1_script_compiler.html#a93f5072a0db55d881b969e9fc98e564b). - -Note that `Nan::BoundScript` is an alias for `v8::Script`. - -Signature: - -```c++ -Nan::MaybeLocal Nan::CompileScript( - v8::Local s, - const v8::ScriptOrigin& origin); -Nan::MaybeLocal Nan::CompileScript(v8::Local s); -``` - - - -### Nan::RunScript() - -Calls `script->Run()` or `script->BindToCurrentContext()->Run(Nan::GetCurrentContext())`. - -Note that `Nan::BoundScript` is an alias for `v8::Script` and `Nan::UnboundScript` is an alias for `v8::UnboundScript` where available and `v8::Script` on older versions of V8. - -Signature: - -```c++ -Nan::MaybeLocal Nan::RunScript(v8::Local script) -Nan::MaybeLocal Nan::RunScript(v8::Local script) -``` diff --git a/truebit-implementation/node_modules/nan/doc/string_bytes.md b/truebit-implementation/node_modules/nan/doc/string_bytes.md deleted file mode 100644 index 7c1bd325..00000000 --- a/truebit-implementation/node_modules/nan/doc/string_bytes.md +++ /dev/null @@ -1,62 +0,0 @@ -## Strings & Bytes - -Miscellaneous string & byte encoding and decoding functionality provided for compatibility across supported versions of V8 and Node. Implemented by NAN to ensure that all encoding types are supported, even for older versions of Node where they are missing. - - - Nan::Encoding - - Nan::Encode() - - Nan::DecodeBytes() - - Nan::DecodeWrite() - - - -### Nan::Encoding - -An enum representing the supported encoding types. A copy of `node::encoding` that is consistent across versions of Node. - -Definition: - -```c++ -enum Nan::Encoding { ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER } -``` - - - -### Nan::Encode() - -A wrapper around `node::Encode()` that provides a consistent implementation across supported versions of Node. - -Signature: - -```c++ -v8::Local Nan::Encode(const void *buf, - size_t len, - enum Nan::Encoding encoding = BINARY); -``` - - - -### Nan::DecodeBytes() - -A wrapper around `node::DecodeBytes()` that provides a consistent implementation across supported versions of Node. - -Signature: - -```c++ -ssize_t Nan::DecodeBytes(v8::Local val, - enum Nan::Encoding encoding = BINARY); -``` - - - -### Nan::DecodeWrite() - -A wrapper around `node::DecodeWrite()` that provides a consistent implementation across supported versions of Node. - -Signature: - -```c++ -ssize_t Nan::DecodeWrite(char *buf, - size_t len, - v8::Local val, - enum Nan::Encoding encoding = BINARY); -``` diff --git a/truebit-implementation/node_modules/nan/doc/v8_internals.md b/truebit-implementation/node_modules/nan/doc/v8_internals.md deleted file mode 100644 index 430c4353..00000000 --- a/truebit-implementation/node_modules/nan/doc/v8_internals.md +++ /dev/null @@ -1,199 +0,0 @@ -## V8 internals - -The hooks to access V8 internals—including GC and statistics—are different across the supported versions of V8, therefore NAN provides its own hooks that call the appropriate V8 methods. - - - NAN_GC_CALLBACK() - - Nan::AddGCEpilogueCallback() - - Nan::RemoveGCEpilogueCallback() - - Nan::AddGCPrologueCallback() - - Nan::RemoveGCPrologueCallback() - - Nan::GetHeapStatistics() - - Nan::SetCounterFunction() - - Nan::SetCreateHistogramFunction() - - Nan::SetAddHistogramSampleFunction() - - Nan::IdleNotification() - - Nan::LowMemoryNotification() - - Nan::ContextDisposedNotification() - - Nan::GetInternalFieldPointer() - - Nan::SetInternalFieldPointer() - - Nan::AdjustExternalMemory() - - - -### NAN_GC_CALLBACK(callbackname) - -Use `NAN_GC_CALLBACK` to declare your callbacks for `Nan::AddGCPrologueCallback()` and `Nan::AddGCEpilogueCallback()`. Your new method receives the arguments `v8::GCType type` and `v8::GCCallbackFlags flags`. - -```c++ -static Nan::Persistent callback; - -NAN_GC_CALLBACK(gcPrologueCallback) { - v8::Local argv[] = { Nan::New("prologue").ToLocalChecked() }; - Nan::MakeCallback(Nan::GetCurrentContext()->Global(), Nan::New(callback), 1, argv); -} - -NAN_METHOD(Hook) { - callback.Reset(To(args[0]).ToLocalChecked()); - Nan::AddGCPrologueCallback(gcPrologueCallback); - info.GetReturnValue().Set(info.Holder()); -} -``` - - -### Nan::AddGCEpilogueCallback() - -Signature: - -```c++ -void Nan::AddGCEpilogueCallback(v8::Isolate::GCEpilogueCallback callback, v8::GCType gc_type_filter = v8::kGCTypeAll) -``` - -Calls V8's [`AddGCEpilogueCallback()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a90d1860babc76059c62514b422f56960). - - -### Nan::RemoveGCEpilogueCallback() - -Signature: - -```c++ -void Nan::RemoveGCEpilogueCallback(v8::Isolate::GCEpilogueCallback callback) -``` - -Calls V8's [`RemoveGCEpilogueCallback()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a05c60859fd4b8e96bfcd451281ed6c7c). - - -### Nan::AddGCPrologueCallback() - -Signature: - -```c++ -void Nan::AddGCPrologueCallback(v8::Isolate::GCPrologueCallback, v8::GCType gc_type_filter callback) -``` - -Calls V8's [`AddGCPrologueCallback()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#ab4b87b8f9f8e5bf95eba4009357e001f). - - -### Nan::RemoveGCPrologueCallback() - -Signature: - -```c++ -void Nan::RemoveGCPrologueCallback(v8::Isolate::GCPrologueCallback callback) -``` - -Calls V8's [`RemoveGCEpilogueCallback()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a9f6c51932811593f81ff30b949124186). - - -### Nan::GetHeapStatistics() - -Signature: - -```c++ -void Nan::GetHeapStatistics(v8::HeapStatistics *heap_statistics) -``` - -Calls V8's [`GetHeapStatistics()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a5593ac74687b713095c38987e5950b34). - - -### Nan::SetCounterFunction() - -Signature: - -```c++ -void Nan::SetCounterFunction(v8::CounterLookupCallback cb) -``` - -Calls V8's [`SetCounterFunction()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a045d7754e62fa0ec72ae6c259b29af94). - - -### Nan::SetCreateHistogramFunction() - -Signature: - -```c++ -void Nan::SetCreateHistogramFunction(v8::CreateHistogramCallback cb) -``` - -Calls V8's [`SetCreateHistogramFunction()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a542d67e85089cb3f92aadf032f99e732). - - -### Nan::SetAddHistogramSampleFunction() - -Signature: - -```c++ -void Nan::SetAddHistogramSampleFunction(v8::AddHistogramSampleCallback cb) -``` - -Calls V8's [`SetAddHistogramSampleFunction()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#aeb420b690bc2c216882d6fdd00ddd3ea). - - -### Nan::IdleNotification() - -Signature: - -```c++ -void Nan::IdleNotification(v8::HeapStatistics *heap_statistics) -``` - -Calls V8's [`IdleNotification()` or `IdleNotificationDeadline()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#ad6a2a02657f5425ad460060652a5a118) depending on V8 version. - - -### Nan::LowMemoryNotification() - -Signature: - -```c++ -void Nan::LowMemoryNotification() -``` - -Calls V8's [`LowMemoryNotification()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a24647f61d6b41f69668094bdcd6ea91f). - - -### Nan::ContextDisposedNotification() - -Signature: - -```c++ -void Nan::ContextDisposedNotification() -``` - -Calls V8's [`ContextDisposedNotification()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#ad7f5dc559866343fe6cd8db1f134d48b). - - -### Nan::GetInternalFieldPointer() - -Gets a pointer to the internal field with at `index` from a V8 `Object` handle. - -Signature: - -```c++ -void* Nan::GetInternalFieldPointer(v8::Local object, int index) -``` - -Calls the Object's [`GetAlignedPointerFromInternalField()` or `GetPointerFromInternalField()`](https://v8docs.nodesource.com/io.js-3.3/db/d85/classv8_1_1_object.html#ab3c57184263cf29963ef0017bec82281) depending on the version of V8. - - -### Nan::SetInternalFieldPointer() - -Sets the value of the internal field at `index` on a V8 `Object` handle. - -Signature: - -```c++ -void Nan::SetInternalFieldPointer(v8::Local object, int index, void* value) -``` - -Calls the Object's [`SetAlignedPointerInInternalField()` or `SetPointerInInternalField()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#ad7f5dc559866343fe6cd8db1f134d48b) depending on the version of V8. - - -### Nan::AdjustExternalMemory() - -Signature: - -```c++ -int Nan::AdjustExternalMemory(int bytesChange) -``` - -Calls V8's [`AdjustAmountOfExternalAllocatedMemory()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#ae1a59cac60409d3922582c4af675473e). - diff --git a/truebit-implementation/node_modules/nan/doc/v8_misc.md b/truebit-implementation/node_modules/nan/doc/v8_misc.md deleted file mode 100644 index 8aa6653f..00000000 --- a/truebit-implementation/node_modules/nan/doc/v8_misc.md +++ /dev/null @@ -1,85 +0,0 @@ -## Miscellaneous V8 Helpers - - - Nan::Utf8String - - Nan::GetCurrentContext() - - Nan::SetIsolateData() - - Nan::GetIsolateData() - - Nan::TypedArrayContents - - - -### Nan::Utf8String - -Converts an object to a UTF-8-encoded character array. If conversion to a string fails (e.g. due to an exception in the toString() method of the object) then the length() method returns 0 and the * operator returns NULL. The underlying memory used for this object is managed by the object. - -An implementation of [`v8::String::Utf8Value`](https://v8docs.nodesource.com/io.js-3.3/d4/d1b/classv8_1_1_string_1_1_utf8_value.html) that is consistent across all supported versions of V8. - -Definition: - -```c++ -class Nan::Utf8String { - public: - Nan::Utf8String(v8::Local from); - - int length() const; - - char* operator*(); - const char* operator*() const; -}; -``` - - -### Nan::GetCurrentContext() - -A call to [`v8::Isolate::GetCurrent()->GetCurrentContext()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a81c7a1ed7001ae2a65e89107f75fd053) that works across all supported versions of V8. - -Signature: - -```c++ -v8::Local Nan::GetCurrentContext() -``` - - -### Nan::SetIsolateData() - -A helper to provide a consistent API to [`v8::Isolate#SetData()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#a7acadfe7965997e9c386a05f098fbe36). - -Signature: - -```c++ -void Nan::SetIsolateData(v8::Isolate *isolate, T *data) -``` - - - -### Nan::GetIsolateData() - -A helper to provide a consistent API to [`v8::Isolate#GetData()`](https://v8docs.nodesource.com/io.js-3.3/d5/dda/classv8_1_1_isolate.html#aabd223436bc1100a787dadaa024c6257). - -Signature: - -```c++ -T *Nan::GetIsolateData(v8::Isolate *isolate) -``` - - -### Nan::TypedArrayContents - -A helper class for accessing the contents of an ArrayBufferView (aka a typedarray) from C++. If the input array is not a valid typedarray, then the data pointer of TypedArrayContents will default to `NULL` and the length will be 0. If the data pointer is not compatible with the alignment requirements of type, an assertion error will fail. - -Note that you must store a reference to the `array` object while you are accessing its contents. - -Definition: - -```c++ -template -class Nan::TypedArrayContents { - public: - TypedArrayContents(v8::Local array); - - size_t length() const; - - T* const operator*(); - const T* const operator*() const; -}; -``` diff --git a/truebit-implementation/node_modules/nan/include_dirs.js b/truebit-implementation/node_modules/nan/include_dirs.js deleted file mode 100644 index 4f1dfb41..00000000 --- a/truebit-implementation/node_modules/nan/include_dirs.js +++ /dev/null @@ -1 +0,0 @@ -console.log(require('path').relative('.', __dirname)); diff --git a/truebit-implementation/node_modules/nan/nan.h b/truebit-implementation/node_modules/nan/nan.h deleted file mode 100644 index 29f084e7..00000000 --- a/truebit-implementation/node_modules/nan/nan.h +++ /dev/null @@ -1,2761 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors: - * - Rod Vagg - * - Benjamin Byholm - * - Trevor Norris - * - Nathan Rajlich - * - Brett Lawson - * - Ben Noordhuis - * - David Siegel - * - Michael Ira Krufky - * - * MIT License - * - * Version 2.10.0: current Node 9.8.0, Node 12: 0.12.18, Node 10: 0.10.48, iojs: 3.3.1 - * - * See https://github.com/nodejs/nan for the latest update to this file - **********************************************************************************/ - -#ifndef NAN_H_ -#define NAN_H_ - -#include - -#define NODE_0_10_MODULE_VERSION 11 -#define NODE_0_12_MODULE_VERSION 14 -#define ATOM_0_21_MODULE_VERSION 41 -#define IOJS_1_0_MODULE_VERSION 42 -#define IOJS_1_1_MODULE_VERSION 43 -#define IOJS_2_0_MODULE_VERSION 44 -#define IOJS_3_0_MODULE_VERSION 45 -#define NODE_4_0_MODULE_VERSION 46 -#define NODE_5_0_MODULE_VERSION 47 -#define NODE_6_0_MODULE_VERSION 48 -#define NODE_7_0_MODULE_VERSION 51 -#define NODE_8_0_MODULE_VERSION 57 -#define NODE_9_0_MODULE_VERSION 59 - -#ifdef _MSC_VER -# define NAN_HAS_CPLUSPLUS_11 (_MSC_VER >= 1800) -#else -# define NAN_HAS_CPLUSPLUS_11 (__cplusplus >= 201103L) -#endif - -#if NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION && !NAN_HAS_CPLUSPLUS_11 -# error This version of node/NAN/v8 requires a C++11 compiler -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(_MSC_VER) -# pragma warning( push ) -# pragma warning( disable : 4530 ) -# include -# include -# include -# pragma warning( pop ) -#else -# include -# include -# include -#endif - -// uv helpers -#ifdef UV_VERSION_MAJOR -# ifndef UV_VERSION_PATCH -# define UV_VERSION_PATCH 0 -# endif -# define NAUV_UVVERSION ((UV_VERSION_MAJOR << 16) | \ - (UV_VERSION_MINOR << 8) | \ - (UV_VERSION_PATCH)) -#else -# define NAUV_UVVERSION 0x000b00 -#endif - -#if NAUV_UVVERSION < 0x000b0b -# ifdef WIN32 -# include -# else -# include -# endif -#endif - -namespace Nan { - -#define NAN_INLINE inline // TODO(bnoordhuis) Remove in v3.0.0. - -#if defined(__GNUC__) && \ - !(defined(V8_DISABLE_DEPRECATIONS) && V8_DISABLE_DEPRECATIONS) -# define NAN_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) && \ - !(defined(V8_DISABLE_DEPRECATIONS) && V8_DISABLE_DEPRECATIONS) -# define NAN_DEPRECATED __declspec(deprecated) -#else -# define NAN_DEPRECATED -#endif - -#if NAN_HAS_CPLUSPLUS_11 -# define NAN_DISALLOW_ASSIGN(CLASS) void operator=(const CLASS&) = delete; -# define NAN_DISALLOW_COPY(CLASS) CLASS(const CLASS&) = delete; -# define NAN_DISALLOW_MOVE(CLASS) \ - CLASS(CLASS&&) = delete; /* NOLINT(build/c++11) */ \ - void operator=(CLASS&&) = delete; -#else -# define NAN_DISALLOW_ASSIGN(CLASS) void operator=(const CLASS&); -# define NAN_DISALLOW_COPY(CLASS) CLASS(const CLASS&); -# define NAN_DISALLOW_MOVE(CLASS) -#endif - -#define NAN_DISALLOW_ASSIGN_COPY(CLASS) \ - NAN_DISALLOW_ASSIGN(CLASS) \ - NAN_DISALLOW_COPY(CLASS) - -#define NAN_DISALLOW_ASSIGN_MOVE(CLASS) \ - NAN_DISALLOW_ASSIGN(CLASS) \ - NAN_DISALLOW_MOVE(CLASS) - -#define NAN_DISALLOW_COPY_MOVE(CLASS) \ - NAN_DISALLOW_COPY(CLASS) \ - NAN_DISALLOW_MOVE(CLASS) - -#define NAN_DISALLOW_ASSIGN_COPY_MOVE(CLASS) \ - NAN_DISALLOW_ASSIGN(CLASS) \ - NAN_DISALLOW_COPY(CLASS) \ - NAN_DISALLOW_MOVE(CLASS) - -#define TYPE_CHECK(T, S) \ - while (false) { \ - *(static_cast(0)) = static_cast(0); \ - } - -//=== RegistrationFunction ===================================================== - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - typedef v8::Handle ADDON_REGISTER_FUNCTION_ARGS_TYPE; -#else - typedef v8::Local ADDON_REGISTER_FUNCTION_ARGS_TYPE; -#endif - -#define NAN_MODULE_INIT(name) \ - void name(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target) - -//=== CallbackInfo ============================================================= - -#include "nan_callbacks.h" // NOLINT(build/include) - -//============================================================================== - -#if (NODE_MODULE_VERSION < NODE_0_12_MODULE_VERSION) -typedef v8::Script UnboundScript; -typedef v8::Script BoundScript; -#else -typedef v8::UnboundScript UnboundScript; -typedef v8::Script BoundScript; -#endif - -#if (NODE_MODULE_VERSION < ATOM_0_21_MODULE_VERSION) -typedef v8::String::ExternalAsciiStringResource - ExternalOneByteStringResource; -#else -typedef v8::String::ExternalOneByteStringResource - ExternalOneByteStringResource; -#endif - -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) -template -class NonCopyablePersistentTraits : - public v8::NonCopyablePersistentTraits {}; -template -class CopyablePersistentTraits : - public v8::CopyablePersistentTraits {}; - -template -class PersistentBase : - public v8::PersistentBase {}; - -template > -class Persistent; -#else -template class NonCopyablePersistentTraits; -template class PersistentBase; -template class WeakCallbackData; -template > -class Persistent; -#endif // NODE_MODULE_VERSION - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -# include "nan_maybe_43_inl.h" // NOLINT(build/include) -#else -# include "nan_maybe_pre_43_inl.h" // NOLINT(build/include) -#endif - -#include "nan_converters.h" // NOLINT(build/include) -#include "nan_new.h" // NOLINT(build/include) - -#if NAUV_UVVERSION < 0x000b17 -#define NAUV_WORK_CB(func) \ - void func(uv_async_t *async, int) -#else -#define NAUV_WORK_CB(func) \ - void func(uv_async_t *async) -#endif - -#if NAUV_UVVERSION >= 0x000b0b - -typedef uv_key_t nauv_key_t; - -inline int nauv_key_create(nauv_key_t *key) { - return uv_key_create(key); -} - -inline void nauv_key_delete(nauv_key_t *key) { - uv_key_delete(key); -} - -inline void* nauv_key_get(nauv_key_t *key) { - return uv_key_get(key); -} - -inline void nauv_key_set(nauv_key_t *key, void *value) { - uv_key_set(key, value); -} - -#else - -/* Implement thread local storage for older versions of libuv. - * This is essentially a backport of libuv commit 5d2434bf - * written by Ben Noordhuis, adjusted for names and inline. - */ - -#ifndef WIN32 - -typedef pthread_key_t nauv_key_t; - -inline int nauv_key_create(nauv_key_t* key) { - return -pthread_key_create(key, NULL); -} - -inline void nauv_key_delete(nauv_key_t* key) { - if (pthread_key_delete(*key)) - abort(); -} - -inline void* nauv_key_get(nauv_key_t* key) { - return pthread_getspecific(*key); -} - -inline void nauv_key_set(nauv_key_t* key, void* value) { - if (pthread_setspecific(*key, value)) - abort(); -} - -#else - -typedef struct { - DWORD tls_index; -} nauv_key_t; - -inline int nauv_key_create(nauv_key_t* key) { - key->tls_index = TlsAlloc(); - if (key->tls_index == TLS_OUT_OF_INDEXES) - return UV_ENOMEM; - return 0; -} - -inline void nauv_key_delete(nauv_key_t* key) { - if (TlsFree(key->tls_index) == FALSE) - abort(); - key->tls_index = TLS_OUT_OF_INDEXES; -} - -inline void* nauv_key_get(nauv_key_t* key) { - void* value = TlsGetValue(key->tls_index); - if (value == NULL) - if (GetLastError() != ERROR_SUCCESS) - abort(); - return value; -} - -inline void nauv_key_set(nauv_key_t* key, void* value) { - if (TlsSetValue(key->tls_index, value) == FALSE) - abort(); -} - -#endif -#endif - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION -template -v8::Local New(v8::Handle); -#endif - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - typedef v8::WeakCallbackType WeakCallbackType; -#else -struct WeakCallbackType { - enum E {kParameter, kInternalFields}; - E type; - WeakCallbackType(E other) : type(other) {} // NOLINT(runtime/explicit) - inline bool operator==(E other) { return other == this->type; } - inline bool operator!=(E other) { return !operator==(other); } -}; -#endif - -template class WeakCallbackInfo; - -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -# include "nan_persistent_12_inl.h" // NOLINT(build/include) -#else -# include "nan_persistent_pre_12_inl.h" // NOLINT(build/include) -#endif - -namespace imp { - static const size_t kMaxLength = 0x3fffffff; - // v8::String::REPLACE_INVALID_UTF8 was introduced - // in node.js v0.10.29 and v0.8.27. -#if NODE_MAJOR_VERSION > 0 || \ - NODE_MINOR_VERSION > 10 || \ - NODE_MINOR_VERSION == 10 && NODE_PATCH_VERSION >= 29 || \ - NODE_MINOR_VERSION == 8 && NODE_PATCH_VERSION >= 27 - static const unsigned kReplaceInvalidUtf8 = v8::String::REPLACE_INVALID_UTF8; -#else - static const unsigned kReplaceInvalidUtf8 = 0; -#endif -} // end of namespace imp - -//=== HandleScope ============================================================== - -class HandleScope { - v8::HandleScope scope; - - public: -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - inline HandleScope() : scope(v8::Isolate::GetCurrent()) {} - inline static int NumberOfHandles() { - return v8::HandleScope::NumberOfHandles(v8::Isolate::GetCurrent()); - } -#else - inline HandleScope() : scope() {} - inline static int NumberOfHandles() { - return v8::HandleScope::NumberOfHandles(); - } -#endif - - private: - // Make it hard to create heap-allocated or illegal handle scopes by - // disallowing certain operations. - HandleScope(const HandleScope &); - void operator=(const HandleScope &); - void *operator new(size_t size); - void operator delete(void *, size_t) { - abort(); - } -}; - -class EscapableHandleScope { - public: -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - inline EscapableHandleScope() : scope(v8::Isolate::GetCurrent()) {} - - inline static int NumberOfHandles() { - return v8::EscapableHandleScope::NumberOfHandles(v8::Isolate::GetCurrent()); - } - - template - inline v8::Local Escape(v8::Local value) { - return scope.Escape(value); - } - - private: - v8::EscapableHandleScope scope; -#else - inline EscapableHandleScope() : scope() {} - - inline static int NumberOfHandles() { - return v8::HandleScope::NumberOfHandles(); - } - - template - inline v8::Local Escape(v8::Local value) { - return scope.Close(value); - } - - private: - v8::HandleScope scope; -#endif - - private: - // Make it hard to create heap-allocated or illegal handle scopes by - // disallowing certain operations. - EscapableHandleScope(const EscapableHandleScope &); - void operator=(const EscapableHandleScope &); - void *operator new(size_t size); - void operator delete(void *, size_t) { - abort(); - } -}; - -//=== TryCatch ================================================================= - -class TryCatch { - v8::TryCatch try_catch_; - friend void FatalException(const TryCatch&); - - public: -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - TryCatch() : try_catch_(v8::Isolate::GetCurrent()) {} -#endif - - inline bool HasCaught() const { return try_catch_.HasCaught(); } - - inline bool CanContinue() const { return try_catch_.CanContinue(); } - - inline v8::Local ReThrow() { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - return New(try_catch_.ReThrow()); -#else - return try_catch_.ReThrow(); -#endif - } - - inline v8::Local Exception() const { - return try_catch_.Exception(); - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - inline v8::MaybeLocal StackTrace() const { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(try_catch_.StackTrace(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); - } -#else - inline MaybeLocal StackTrace() const { - return try_catch_.StackTrace(); - } -#endif - - inline v8::Local Message() const { - return try_catch_.Message(); - } - - inline void Reset() { try_catch_.Reset(); } - - inline void SetVerbose(bool value) { try_catch_.SetVerbose(value); } - - inline void SetCaptureMessage(bool value) { - try_catch_.SetCaptureMessage(value); - } -}; - -v8::Local MakeCallback(v8::Local target, - v8::Local func, - int argc, - v8::Local* argv); -v8::Local MakeCallback(v8::Local target, - v8::Local symbol, - int argc, - v8::Local* argv); -v8::Local MakeCallback(v8::Local target, - const char* method, - int argc, - v8::Local* argv); - -// === AsyncResource =========================================================== - -class AsyncResource { - public: - AsyncResource( - v8::Local name - , v8::Local resource = New()) { -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - - if (resource.IsEmpty()) { - resource = New(); - } - - context = node::EmitAsyncInit(isolate, resource, name); -#endif - } - - AsyncResource( - const char* name - , v8::Local resource = New()) { -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - - if (resource.IsEmpty()) { - resource = New(); - } - - v8::Local name_string = - New(name).ToLocalChecked(); - context = node::EmitAsyncInit(isolate, resource, name_string); -#endif - } - - ~AsyncResource() { -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - node::EmitAsyncDestroy(isolate, context); -#endif - } - - inline MaybeLocal runInAsyncScope( - v8::Local target - , v8::Local func - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < NODE_9_0_MODULE_VERSION - return MakeCallback(target, func, argc, argv); -#else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, func, argc, argv, context); -#endif - } - - inline MaybeLocal runInAsyncScope( - v8::Local target - , v8::Local symbol - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < NODE_9_0_MODULE_VERSION - return MakeCallback(target, symbol, argc, argv); -#else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, symbol, argc, argv, context); -#endif - } - - inline MaybeLocal runInAsyncScope( - v8::Local target - , const char* method - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < NODE_9_0_MODULE_VERSION - return MakeCallback(target, method, argc, argv); -#else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, method, argc, argv, context); -#endif - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(AsyncResource) -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - node::async_context context; -#endif -}; - -//============ ================================================================= - -/* node 0.12 */ -#if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION - inline - void SetCounterFunction(v8::CounterLookupCallback cb) { - v8::Isolate::GetCurrent()->SetCounterFunction(cb); - } - - inline - void SetCreateHistogramFunction(v8::CreateHistogramCallback cb) { - v8::Isolate::GetCurrent()->SetCreateHistogramFunction(cb); - } - - inline - void SetAddHistogramSampleFunction(v8::AddHistogramSampleCallback cb) { - v8::Isolate::GetCurrent()->SetAddHistogramSampleFunction(cb); - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - inline bool IdleNotification(int idle_time_in_ms) { - return v8::Isolate::GetCurrent()->IdleNotificationDeadline( - idle_time_in_ms * 0.001); - } -# else - inline bool IdleNotification(int idle_time_in_ms) { - return v8::Isolate::GetCurrent()->IdleNotification(idle_time_in_ms); - } -#endif - - inline void LowMemoryNotification() { - v8::Isolate::GetCurrent()->LowMemoryNotification(); - } - - inline void ContextDisposedNotification() { - v8::Isolate::GetCurrent()->ContextDisposedNotification(); - } -#else - inline - void SetCounterFunction(v8::CounterLookupCallback cb) { - v8::V8::SetCounterFunction(cb); - } - - inline - void SetCreateHistogramFunction(v8::CreateHistogramCallback cb) { - v8::V8::SetCreateHistogramFunction(cb); - } - - inline - void SetAddHistogramSampleFunction(v8::AddHistogramSampleCallback cb) { - v8::V8::SetAddHistogramSampleFunction(cb); - } - - inline bool IdleNotification(int idle_time_in_ms) { - return v8::V8::IdleNotification(idle_time_in_ms); - } - - inline void LowMemoryNotification() { - v8::V8::LowMemoryNotification(); - } - - inline void ContextDisposedNotification() { - v8::V8::ContextDisposedNotification(); - } -#endif - -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) // Node 0.12 - inline v8::Local Undefined() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::Undefined(v8::Isolate::GetCurrent()))); -# else - return v8::Undefined(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local Null() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::Null(v8::Isolate::GetCurrent()))); -# else - return v8::Null(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local True() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::True(v8::Isolate::GetCurrent()))); -# else - return v8::True(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local False() { -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(v8::False(v8::Isolate::GetCurrent()))); -# else - return v8::False(v8::Isolate::GetCurrent()); -# endif - } - - inline v8::Local EmptyString() { - return v8::String::Empty(v8::Isolate::GetCurrent()); - } - - inline int AdjustExternalMemory(int bc) { - return static_cast( - v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(bc)); - } - - inline void SetTemplate( - v8::Local templ - , const char *name - , v8::Local value) { - templ->Set(v8::Isolate::GetCurrent(), name, value); - } - - inline void SetTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes) { - templ->Set(name, value, attributes); - } - - inline v8::Local GetCurrentContext() { - return v8::Isolate::GetCurrent()->GetCurrentContext(); - } - - inline void* GetInternalFieldPointer( - v8::Local object - , int index) { - return object->GetAlignedPointerFromInternalField(index); - } - - inline void SetInternalFieldPointer( - v8::Local object - , int index - , void* value) { - object->SetAlignedPointerInInternalField(index, value); - } - -# define NAN_GC_CALLBACK(name) \ - void name(v8::Isolate *isolate, v8::GCType type, v8::GCCallbackFlags flags) - -#if NODE_MODULE_VERSION <= NODE_4_0_MODULE_VERSION - typedef v8::Isolate::GCEpilogueCallback GCEpilogueCallback; - typedef v8::Isolate::GCPrologueCallback GCPrologueCallback; -#else - typedef v8::Isolate::GCCallback GCEpilogueCallback; - typedef v8::Isolate::GCCallback GCPrologueCallback; -#endif - - inline void AddGCEpilogueCallback( - GCEpilogueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::Isolate::GetCurrent()->AddGCEpilogueCallback(callback, gc_type_filter); - } - - inline void RemoveGCEpilogueCallback( - GCEpilogueCallback callback) { - v8::Isolate::GetCurrent()->RemoveGCEpilogueCallback(callback); - } - - inline void AddGCPrologueCallback( - GCPrologueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::Isolate::GetCurrent()->AddGCPrologueCallback(callback, gc_type_filter); - } - - inline void RemoveGCPrologueCallback( - GCPrologueCallback callback) { - v8::Isolate::GetCurrent()->RemoveGCPrologueCallback(callback); - } - - inline void GetHeapStatistics( - v8::HeapStatistics *heap_statistics) { - v8::Isolate::GetCurrent()->GetHeapStatistics(heap_statistics); - } - -# define X(NAME) \ - inline v8::Local NAME(const char *msg) { \ - EscapableHandleScope scope; \ - return scope.Escape(v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline \ - v8::Local NAME(v8::Local msg) { \ - return v8::Exception::NAME(msg); \ - } \ - \ - inline void Throw ## NAME(const char *msg) { \ - HandleScope scope; \ - v8::Isolate::GetCurrent()->ThrowException( \ - v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline void Throw ## NAME(v8::Local msg) { \ - HandleScope scope; \ - v8::Isolate::GetCurrent()->ThrowException( \ - v8::Exception::NAME(msg)); \ - } - - X(Error) - X(RangeError) - X(ReferenceError) - X(SyntaxError) - X(TypeError) - -# undef X - - inline void ThrowError(v8::Local error) { - v8::Isolate::GetCurrent()->ThrowException(error); - } - - inline MaybeLocal NewBuffer( - char *data - , size_t length -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - , node::Buffer::FreeCallback callback -#else - , node::smalloc::FreeCallback callback -#endif - , void *hint - ) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(length <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::New( - v8::Isolate::GetCurrent(), data, length, callback, hint); -#else - return node::Buffer::New(v8::Isolate::GetCurrent(), data, length, callback, - hint); -#endif - } - - inline MaybeLocal CopyBuffer( - const char *data - , uint32_t size - ) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::Copy( - v8::Isolate::GetCurrent(), data, size); -#else - return node::Buffer::New(v8::Isolate::GetCurrent(), data, size); -#endif - } - - inline MaybeLocal NewBuffer(uint32_t size) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::New( - v8::Isolate::GetCurrent(), size); -#else - return node::Buffer::New(v8::Isolate::GetCurrent(), size); -#endif - } - - inline MaybeLocal NewBuffer( - char* data - , uint32_t size - ) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION > IOJS_2_0_MODULE_VERSION - return node::Buffer::New(v8::Isolate::GetCurrent(), data, size); -#else - return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size); -#endif - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - inline MaybeLocal - NewOneByteString(const uint8_t * value, int length = -1) { - return v8::String::NewFromOneByte(v8::Isolate::GetCurrent(), value, - v8::NewStringType::kNormal, length); - } - - inline MaybeLocal CompileScript( - v8::Local s - , const v8::ScriptOrigin& origin - ) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::ScriptCompiler::Source source(s, origin); - return scope.Escape( - v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &source) - .FromMaybe(v8::Local())); - } - - inline MaybeLocal CompileScript( - v8::Local s - ) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::ScriptCompiler::Source source(s); - return scope.Escape( - v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &source) - .FromMaybe(v8::Local())); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(script->BindToCurrentContext() - ->Run(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(script->Run(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); - } -#else - inline MaybeLocal - NewOneByteString(const uint8_t * value, int length = -1) { - return v8::String::NewFromOneByte(v8::Isolate::GetCurrent(), value, - v8::String::kNormalString, length); - } - - inline MaybeLocal CompileScript( - v8::Local s - , const v8::ScriptOrigin& origin - ) { - v8::ScriptCompiler::Source source(s, origin); - return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source); - } - - inline MaybeLocal CompileScript( - v8::Local s - ) { - v8::ScriptCompiler::Source source(s); - return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &source); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - EscapableHandleScope scope; - return scope.Escape(script->BindToCurrentContext()->Run()); - } - - inline MaybeLocal RunScript( - v8::Local script - ) { - return script->Run(); - } -#endif - - NAN_DEPRECATED inline v8::Local MakeCallback( - v8::Local target - , v8::Local func - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(node::MakeCallback( - v8::Isolate::GetCurrent(), target, func, argc, argv))); -#else -# if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - AsyncResource res("nan:makeCallback"); - return res.runInAsyncScope(target, func, argc, argv) - .FromMaybe(v8::Local()); -# else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, func, argc, argv); -# endif // NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION -#endif // NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - } - - NAN_DEPRECATED inline v8::Local MakeCallback( - v8::Local target - , v8::Local symbol - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(node::MakeCallback( - v8::Isolate::GetCurrent(), target, symbol, argc, argv))); -#else -# if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - AsyncResource res("nan:makeCallback"); - return res.runInAsyncScope(target, symbol, argc, argv) - .FromMaybe(v8::Local()); -# else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, symbol, argc, argv); -# endif // NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION -#endif // NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - } - - NAN_DEPRECATED inline v8::Local MakeCallback( - v8::Local target - , const char* method - , int argc - , v8::Local* argv) { -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - return scope.Escape(New(node::MakeCallback( - v8::Isolate::GetCurrent(), target, method, argc, argv))); -#else -# if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - AsyncResource res("nan:makeCallback"); - return res.runInAsyncScope(target, method, argc, argv) - .FromMaybe(v8::Local()); -# else - return node::MakeCallback( - v8::Isolate::GetCurrent(), target, method, argc, argv); -# endif // NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION -#endif // NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - } - - inline void FatalException(const TryCatch& try_catch) { - node::FatalException(v8::Isolate::GetCurrent(), try_catch.try_catch_); - } - - inline v8::Local ErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return node::ErrnoException(v8::Isolate::GetCurrent(), errorno, syscall, - message, path); - } - - NAN_DEPRECATED inline v8::Local NanErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return ErrnoException(errorno, syscall, message, path); - } - - template - inline void SetIsolateData( - v8::Isolate *isolate - , T *data - ) { - isolate->SetData(0, data); - } - - template - inline T *GetIsolateData( - v8::Isolate *isolate - ) { - return static_cast(isolate->GetData(0)); - } - -class Utf8String { - public: - inline explicit Utf8String(v8::Local from) : - length_(0), str_(str_st_) { - HandleScope scope; - if (!from.IsEmpty()) { - v8::Local string = from->ToString(); - if (!string.IsEmpty()) { - size_t len = 3 * string->Length() + 1; - assert(len <= INT_MAX); - if (len > sizeof (str_st_)) { - str_ = static_cast(malloc(len)); - assert(str_ != 0); - } - const int flags = - v8::String::NO_NULL_TERMINATION | imp::kReplaceInvalidUtf8; - length_ = string->WriteUtf8(str_, static_cast(len), 0, flags); - str_[length_] = '\0'; - } - } - } - - inline int length() const { - return length_; - } - - inline char* operator*() { return str_; } - inline const char* operator*() const { return str_; } - - inline ~Utf8String() { - if (str_ != str_st_) { - free(str_); - } - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(Utf8String) - - int length_; - char *str_; - char str_st_[1024]; -}; - -#else // Node 0.8 and 0.10 - inline v8::Local Undefined() { - EscapableHandleScope scope; - return scope.Escape(New(v8::Undefined())); - } - - inline v8::Local Null() { - EscapableHandleScope scope; - return scope.Escape(New(v8::Null())); - } - - inline v8::Local True() { - EscapableHandleScope scope; - return scope.Escape(New(v8::True())); - } - - inline v8::Local False() { - EscapableHandleScope scope; - return scope.Escape(New(v8::False())); - } - - inline v8::Local EmptyString() { - return v8::String::Empty(); - } - - inline int AdjustExternalMemory(int bc) { - return static_cast(v8::V8::AdjustAmountOfExternalAllocatedMemory(bc)); - } - - inline void SetTemplate( - v8::Local templ - , const char *name - , v8::Local value) { - templ->Set(name, value); - } - - inline void SetTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes) { - templ->Set(name, value, attributes); - } - - inline v8::Local GetCurrentContext() { - return v8::Context::GetCurrent(); - } - - inline void* GetInternalFieldPointer( - v8::Local object - , int index) { - return object->GetPointerFromInternalField(index); - } - - inline void SetInternalFieldPointer( - v8::Local object - , int index - , void* value) { - object->SetPointerInInternalField(index, value); - } - -# define NAN_GC_CALLBACK(name) \ - void name(v8::GCType type, v8::GCCallbackFlags flags) - - inline void AddGCEpilogueCallback( - v8::GCEpilogueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::V8::AddGCEpilogueCallback(callback, gc_type_filter); - } - inline void RemoveGCEpilogueCallback( - v8::GCEpilogueCallback callback) { - v8::V8::RemoveGCEpilogueCallback(callback); - } - inline void AddGCPrologueCallback( - v8::GCPrologueCallback callback - , v8::GCType gc_type_filter = v8::kGCTypeAll) { - v8::V8::AddGCPrologueCallback(callback, gc_type_filter); - } - inline void RemoveGCPrologueCallback( - v8::GCPrologueCallback callback) { - v8::V8::RemoveGCPrologueCallback(callback); - } - inline void GetHeapStatistics( - v8::HeapStatistics *heap_statistics) { - v8::V8::GetHeapStatistics(heap_statistics); - } - -# define X(NAME) \ - inline v8::Local NAME(const char *msg) { \ - EscapableHandleScope scope; \ - return scope.Escape(v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline \ - v8::Local NAME(v8::Local msg) { \ - return v8::Exception::NAME(msg); \ - } \ - \ - inline void Throw ## NAME(const char *msg) { \ - HandleScope scope; \ - v8::ThrowException(v8::Exception::NAME(New(msg).ToLocalChecked())); \ - } \ - \ - inline \ - void Throw ## NAME(v8::Local errmsg) { \ - HandleScope scope; \ - v8::ThrowException(v8::Exception::NAME(errmsg)); \ - } - - X(Error) - X(RangeError) - X(ReferenceError) - X(SyntaxError) - X(TypeError) - -# undef X - - inline void ThrowError(v8::Local error) { - v8::ThrowException(error); - } - - inline MaybeLocal NewBuffer( - char *data - , size_t length - , node::Buffer::free_callback callback - , void *hint - ) { - EscapableHandleScope scope; - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(length <= imp::kMaxLength && "too large buffer"); - return scope.Escape( - New(node::Buffer::New(data, length, callback, hint)->handle_)); - } - - inline MaybeLocal CopyBuffer( - const char *data - , uint32_t size - ) { - EscapableHandleScope scope; - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); -#if NODE_MODULE_VERSION >= NODE_0_10_MODULE_VERSION - return scope.Escape(New(node::Buffer::New(data, size)->handle_)); -#else - return scope.Escape( - New(node::Buffer::New(const_cast(data), size)->handle_)); -#endif - } - - inline MaybeLocal NewBuffer(uint32_t size) { - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - EscapableHandleScope scope; - assert(size <= imp::kMaxLength && "too large buffer"); - return scope.Escape(New(node::Buffer::New(size)->handle_)); - } - - inline void FreeData(char *data, void *hint) { - (void) hint; // unused - delete[] data; - } - - inline MaybeLocal NewBuffer( - char* data - , uint32_t size - ) { - EscapableHandleScope scope; - // arbitrary buffer lengths requires - // NODE_MODULE_VERSION >= IOJS_3_0_MODULE_VERSION - assert(size <= imp::kMaxLength && "too large buffer"); - return scope.Escape( - New(node::Buffer::New(data, size, FreeData, NULL)->handle_)); - } - -namespace imp { -inline void -widenString(std::vector *ws, const uint8_t *s, int l) { - size_t len = static_cast(l); - if (l < 0) { - len = strlen(reinterpret_cast(s)); - } - assert(len <= INT_MAX && "string too long"); - ws->resize(len); - std::copy(s, s + len, ws->begin()); // NOLINT(build/include_what_you_use) -} -} // end of namespace imp - - inline MaybeLocal - NewOneByteString(const uint8_t * value, int length = -1) { - std::vector wideString; // NOLINT(build/include_what_you_use) - imp::widenString(&wideString, value, length); - return v8::String::New(wideString.data(), - static_cast(wideString.size())); - } - - inline MaybeLocal CompileScript( - v8::Local s - , const v8::ScriptOrigin& origin - ) { - return v8::Script::Compile(s, const_cast(&origin)); - } - - inline MaybeLocal CompileScript( - v8::Local s - ) { - return v8::Script::Compile(s); - } - - inline - MaybeLocal RunScript(v8::Local script) { - return script->Run(); - } - - inline v8::Local MakeCallback( - v8::Local target - , v8::Local func - , int argc - , v8::Local* argv) { - v8::HandleScope scope; - return scope.Close(New(node::MakeCallback(target, func, argc, argv))); - } - - inline v8::Local MakeCallback( - v8::Local target - , v8::Local symbol - , int argc - , v8::Local* argv) { - v8::HandleScope scope; - return scope.Close(New(node::MakeCallback(target, symbol, argc, argv))); - } - - inline v8::Local MakeCallback( - v8::Local target - , const char* method - , int argc - , v8::Local* argv) { - v8::HandleScope scope; - return scope.Close(New(node::MakeCallback(target, method, argc, argv))); - } - - inline void FatalException(const TryCatch& try_catch) { - node::FatalException(const_cast(try_catch.try_catch_)); - } - - inline v8::Local ErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return node::ErrnoException(errorno, syscall, message, path); - } - - NAN_DEPRECATED inline v8::Local NanErrnoException( - int errorno - , const char* syscall = NULL - , const char* message = NULL - , const char* path = NULL) { - return ErrnoException(errorno, syscall, message, path); - } - - - template - inline void SetIsolateData( - v8::Isolate *isolate - , T *data - ) { - isolate->SetData(data); - } - - template - inline T *GetIsolateData( - v8::Isolate *isolate - ) { - return static_cast(isolate->GetData()); - } - -class Utf8String { - public: - inline explicit Utf8String(v8::Local from) : - length_(0), str_(str_st_) { - v8::HandleScope scope; - if (!from.IsEmpty()) { - v8::Local string = from->ToString(); - if (!string.IsEmpty()) { - size_t len = 3 * string->Length() + 1; - assert(len <= INT_MAX); - if (len > sizeof (str_st_)) { - str_ = static_cast(malloc(len)); - assert(str_ != 0); - } - const int flags = - v8::String::NO_NULL_TERMINATION | imp::kReplaceInvalidUtf8; - length_ = string->WriteUtf8(str_, static_cast(len), 0, flags); - str_[length_] = '\0'; - } - } - } - - inline int length() const { - return length_; - } - - inline char* operator*() { return str_; } - inline const char* operator*() const { return str_; } - - inline ~Utf8String() { - if (str_ != str_st_) { - free(str_); - } - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(Utf8String) - - int length_; - char *str_; - char str_st_[1024]; -}; - -#endif // NODE_MODULE_VERSION - -typedef void (*FreeCallback)(char *data, void *hint); - -typedef const FunctionCallbackInfo& NAN_METHOD_ARGS_TYPE; -typedef void NAN_METHOD_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_GETTER_ARGS_TYPE; -typedef void NAN_GETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_SETTER_ARGS_TYPE; -typedef void NAN_SETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_GETTER_ARGS_TYPE; -typedef void NAN_PROPERTY_GETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_SETTER_ARGS_TYPE; -typedef void NAN_PROPERTY_SETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_ENUMERATOR_ARGS_TYPE; -typedef void NAN_PROPERTY_ENUMERATOR_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_DELETER_ARGS_TYPE; -typedef void NAN_PROPERTY_DELETER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_PROPERTY_QUERY_ARGS_TYPE; -typedef void NAN_PROPERTY_QUERY_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_INDEX_GETTER_ARGS_TYPE; -typedef void NAN_INDEX_GETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& NAN_INDEX_SETTER_ARGS_TYPE; -typedef void NAN_INDEX_SETTER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_INDEX_ENUMERATOR_ARGS_TYPE; -typedef void NAN_INDEX_ENUMERATOR_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_INDEX_DELETER_ARGS_TYPE; -typedef void NAN_INDEX_DELETER_RETURN_TYPE; - -typedef const PropertyCallbackInfo& - NAN_INDEX_QUERY_ARGS_TYPE; -typedef void NAN_INDEX_QUERY_RETURN_TYPE; - -#define NAN_METHOD(name) \ - Nan::NAN_METHOD_RETURN_TYPE name(Nan::NAN_METHOD_ARGS_TYPE info) -#define NAN_GETTER(name) \ - Nan::NAN_GETTER_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_GETTER_ARGS_TYPE info) -#define NAN_SETTER(name) \ - Nan::NAN_SETTER_RETURN_TYPE name( \ - v8::Local property \ - , v8::Local value \ - , Nan::NAN_SETTER_ARGS_TYPE info) -#define NAN_PROPERTY_GETTER(name) \ - Nan::NAN_PROPERTY_GETTER_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_PROPERTY_GETTER_ARGS_TYPE info) -#define NAN_PROPERTY_SETTER(name) \ - Nan::NAN_PROPERTY_SETTER_RETURN_TYPE name( \ - v8::Local property \ - , v8::Local value \ - , Nan::NAN_PROPERTY_SETTER_ARGS_TYPE info) -#define NAN_PROPERTY_ENUMERATOR(name) \ - Nan::NAN_PROPERTY_ENUMERATOR_RETURN_TYPE name( \ - Nan::NAN_PROPERTY_ENUMERATOR_ARGS_TYPE info) -#define NAN_PROPERTY_DELETER(name) \ - Nan::NAN_PROPERTY_DELETER_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_PROPERTY_DELETER_ARGS_TYPE info) -#define NAN_PROPERTY_QUERY(name) \ - Nan::NAN_PROPERTY_QUERY_RETURN_TYPE name( \ - v8::Local property \ - , Nan::NAN_PROPERTY_QUERY_ARGS_TYPE info) -# define NAN_INDEX_GETTER(name) \ - Nan::NAN_INDEX_GETTER_RETURN_TYPE name( \ - uint32_t index \ - , Nan::NAN_INDEX_GETTER_ARGS_TYPE info) -#define NAN_INDEX_SETTER(name) \ - Nan::NAN_INDEX_SETTER_RETURN_TYPE name( \ - uint32_t index \ - , v8::Local value \ - , Nan::NAN_INDEX_SETTER_ARGS_TYPE info) -#define NAN_INDEX_ENUMERATOR(name) \ - Nan::NAN_INDEX_ENUMERATOR_RETURN_TYPE \ - name(Nan::NAN_INDEX_ENUMERATOR_ARGS_TYPE info) -#define NAN_INDEX_DELETER(name) \ - Nan::NAN_INDEX_DELETER_RETURN_TYPE name( \ - uint32_t index \ - , Nan::NAN_INDEX_DELETER_ARGS_TYPE info) -#define NAN_INDEX_QUERY(name) \ - Nan::NAN_INDEX_QUERY_RETURN_TYPE name( \ - uint32_t index \ - , Nan::NAN_INDEX_QUERY_ARGS_TYPE info) - -class Callback { - public: - Callback() {} - - explicit Callback(const v8::Local &fn) : handle_(fn) {} - - ~Callback() { - handle_.Reset(); - } - - bool operator==(const Callback &other) const { - return handle_ == other.handle_; - } - - bool operator!=(const Callback &other) const { - return !operator==(other); - } - - inline - v8::Local operator*() const { return GetFunction(); } - - NAN_DEPRECATED inline v8::Local operator()( - v8::Local target - , int argc = 0 - , v8::Local argv[] = 0) const { -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); -# if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - AsyncResource async("nan:Callback:operator()"); - return Call_(isolate, target, argc, argv, &async) - .FromMaybe(v8::Local()); -# else - return Call_(isolate, target, argc, argv); -# endif // NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION -#else - return Call_(target, argc, argv); -#endif // NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - } - - NAN_DEPRECATED inline v8::Local operator()( - int argc = 0 - , v8::Local argv[] = 0) const { -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); -# if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - AsyncResource async("nan:Callback:operator()"); - return scope.Escape(Call_(isolate, isolate->GetCurrentContext()->Global(), - argc, argv, &async) - .FromMaybe(v8::Local())); -# else - return scope.Escape( - Call_(isolate, isolate->GetCurrentContext()->Global(), argc, argv)); -# endif // NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION -#else - v8::HandleScope scope; - return scope.Close(Call_(v8::Context::GetCurrent()->Global(), argc, argv)); -#endif // NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - } - - inline MaybeLocal operator()( - AsyncResource* resource - , int argc = 0 - , v8::Local argv[] = 0) const { - return this->Call(argc, argv, resource); - } - - inline MaybeLocal operator()( - AsyncResource* resource - , v8::Local target - , int argc = 0 - , v8::Local argv[] = 0) const { - return this->Call(target, argc, argv, resource); - } - - // TODO(kkoopa): remove - inline void SetFunction(const v8::Local &fn) { - Reset(fn); - } - - inline void Reset(const v8::Local &fn) { - handle_.Reset(fn); - } - - inline void Reset() { - handle_.Reset(); - } - - inline v8::Local GetFunction() const { - return New(handle_); - } - - inline bool IsEmpty() const { - return handle_.IsEmpty(); - } - - // Deprecated: For async callbacks Use the versions that accept an - // AsyncResource. If this callback does not correspond to an async resource, - // that is, it is a synchronous function call on a non-empty JS stack, you - // should Nan::Call instead. - NAN_DEPRECATED inline v8::Local - Call(v8::Local target - , int argc - , v8::Local argv[]) const { -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); -# if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - AsyncResource async("nan:Callback:Call"); - return Call_(isolate, target, argc, argv, &async) - .FromMaybe(v8::Local()); -# else - return Call_(isolate, target, argc, argv); -# endif // NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION -#else - return Call_(target, argc, argv); -#endif - } - - // Deprecated: For async callbacks Use the versions that accept an - // AsyncResource. If this callback does not correspond to an async resource, - // that is, it is a synchronous function call on a non-empty JS stack, you - // should Nan::Call instead. - NAN_DEPRECATED inline v8::Local - Call(int argc, v8::Local argv[]) const { -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); -# if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - AsyncResource async("nan:Callback:Call"); - return Call_(isolate, isolate->GetCurrentContext()->Global(), argc, argv, - &async) - .FromMaybe(v8::Local()); -# else - return scope.Escape( - Call_(isolate, isolate->GetCurrentContext()->Global(), argc, argv)); -# endif // NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION -#else - v8::HandleScope scope; - return scope.Close(Call_(v8::Context::GetCurrent()->Global(), argc, argv)); -#endif - } - - inline MaybeLocal - Call(v8::Local target - , int argc - , v8::Local argv[] - , AsyncResource* resource) const { -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - return Call_(isolate, target, argc, argv, resource); -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - return Call_(isolate, target, argc, argv); -#else - return Call_(target, argc, argv); -#endif - } - - inline MaybeLocal - Call(int argc, v8::Local argv[], AsyncResource* resource) const { -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - return Call(isolate->GetCurrentContext()->Global(), argc, argv, resource); -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape( - Call_(isolate, isolate->GetCurrentContext()->Global(), argc, argv)); -#else - v8::HandleScope scope; - return scope.Close(Call_(v8::Context::GetCurrent()->Global(), argc, argv)); -#endif - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(Callback) - Persistent handle_; - -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - MaybeLocal Call_(v8::Isolate *isolate - , v8::Local target - , int argc - , v8::Local argv[] - , AsyncResource* resource) const { - EscapableHandleScope scope; - v8::Local func = New(handle_); - auto maybe = resource->runInAsyncScope(target, func, argc, argv); - v8::Local local; - if (!maybe.ToLocal(&local)) return MaybeLocal(); - return scope.Escape(local); - } -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Local Call_(v8::Isolate *isolate - , v8::Local target - , int argc - , v8::Local argv[]) const { - EscapableHandleScope scope; - - v8::Local callback = New(handle_); -# if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION - return scope.Escape(New(node::MakeCallback( - isolate - , target - , callback - , argc - , argv - ))); -# else - return scope.Escape(node::MakeCallback( - isolate - , target - , callback - , argc - , argv - )); -# endif - } -#else - v8::Local Call_(v8::Local target - , int argc - , v8::Local argv[]) const { - EscapableHandleScope scope; - - v8::Local callback = New(handle_); - return scope.Escape(New(node::MakeCallback( - target - , callback - , argc - , argv - ))); - } -#endif -}; - -inline MaybeLocal Call( - const Nan::Callback& callback - , v8::Local recv - , int argc - , v8::Local argv[]) { - return Call(*callback, recv, argc, argv); -} - -inline MaybeLocal Call( - const Nan::Callback& callback - , int argc - , v8::Local argv[]) { -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape( - Call(*callback, isolate->GetCurrentContext()->Global(), argc, argv) - .FromMaybe(v8::Local())); -#else - EscapableHandleScope scope; - return scope.Escape( - Call(*callback, v8::Context::GetCurrent()->Global(), argc, argv) - .FromMaybe(v8::Local())); -#endif -} - -inline MaybeLocal Call( - v8::Local symbol - , v8::Local recv - , int argc - , v8::Local argv[]) { - EscapableHandleScope scope; - v8::Local fn_v = - Get(recv, symbol).FromMaybe(v8::Local()); - if (fn_v.IsEmpty() || !fn_v->IsFunction()) return v8::Local(); - v8::Local fn = fn_v.As(); - return scope.Escape( - Call(fn, recv, argc, argv).FromMaybe(v8::Local())); -} - -inline MaybeLocal Call( - const char* method - , v8::Local recv - , int argc - , v8::Local argv[]) { - EscapableHandleScope scope; - v8::Local method_string = - New(method).ToLocalChecked(); - return scope.Escape( - Call(method_string, recv, argc, argv).FromMaybe(v8::Local())); -} - -/* abstract */ class AsyncWorker { - public: - explicit AsyncWorker(Callback *callback_, - const char* resource_name = "nan:AsyncWorker") - : callback(callback_), errmsg_(NULL) { - request.data = this; - - HandleScope scope; - v8::Local obj = New(); - persistentHandle.Reset(obj); - async_resource = new AsyncResource(resource_name, obj); - } - - virtual ~AsyncWorker() { - HandleScope scope; - - if (!persistentHandle.IsEmpty()) - persistentHandle.Reset(); - delete callback; - delete[] errmsg_; - delete async_resource; - } - - virtual void WorkComplete() { - HandleScope scope; - - if (errmsg_ == NULL) - HandleOKCallback(); - else - HandleErrorCallback(); - delete callback; - callback = NULL; - } - - inline void SaveToPersistent( - const char *key, const v8::Local &value) { - HandleScope scope; - New(persistentHandle)->Set(New(key).ToLocalChecked(), value); - } - - inline void SaveToPersistent( - const v8::Local &key, const v8::Local &value) { - HandleScope scope; - New(persistentHandle)->Set(key, value); - } - - inline void SaveToPersistent( - uint32_t index, const v8::Local &value) { - HandleScope scope; - New(persistentHandle)->Set(index, value); - } - - inline v8::Local GetFromPersistent(const char *key) const { - EscapableHandleScope scope; - return scope.Escape( - New(persistentHandle)->Get(New(key).ToLocalChecked())); - } - - inline v8::Local - GetFromPersistent(const v8::Local &key) const { - EscapableHandleScope scope; - return scope.Escape(New(persistentHandle)->Get(key)); - } - - inline v8::Local GetFromPersistent(uint32_t index) const { - EscapableHandleScope scope; - return scope.Escape(New(persistentHandle)->Get(index)); - } - - virtual void Execute() = 0; - - uv_work_t request; - - virtual void Destroy() { - delete this; - } - - protected: - Persistent persistentHandle; - Callback *callback; - AsyncResource *async_resource; - - virtual void HandleOKCallback() { - HandleScope scope; - - callback->Call(0, NULL, async_resource); - } - - virtual void HandleErrorCallback() { - HandleScope scope; - - v8::Local argv[] = { - v8::Exception::Error(New(ErrorMessage()).ToLocalChecked()) - }; - callback->Call(1, argv, async_resource); - } - - void SetErrorMessage(const char *msg) { - delete[] errmsg_; - - size_t size = strlen(msg) + 1; - errmsg_ = new char[size]; - memcpy(errmsg_, msg, size); - } - - const char* ErrorMessage() const { - return errmsg_; - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(AsyncWorker) - char *errmsg_; -}; - -/* abstract */ class AsyncBareProgressWorkerBase : public AsyncWorker { - public: - explicit AsyncBareProgressWorkerBase( - Callback *callback_, - const char* resource_name = "nan:AsyncBareProgressWorkerBase") - : AsyncWorker(callback_, resource_name) { - uv_async_init( - uv_default_loop() - , &async - , AsyncProgress_ - ); - async.data = this; - } - - virtual ~AsyncBareProgressWorkerBase() { - } - - virtual void WorkProgress() = 0; - - virtual void Destroy() { - uv_close(reinterpret_cast(&async), AsyncClose_); - } - - private: - inline static NAUV_WORK_CB(AsyncProgress_) { - AsyncBareProgressWorkerBase *worker = - static_cast(async->data); - worker->WorkProgress(); - } - - inline static void AsyncClose_(uv_handle_t* handle) { - AsyncBareProgressWorkerBase *worker = - static_cast(handle->data); - delete worker; - } - - protected: - uv_async_t async; -}; - -template -/* abstract */ -class AsyncBareProgressWorker : public AsyncBareProgressWorkerBase { - public: - explicit AsyncBareProgressWorker( - Callback *callback_, - const char* resource_name = "nan:AsyncBareProgressWorker") - : AsyncBareProgressWorkerBase(callback_, resource_name) { - } - - virtual ~AsyncBareProgressWorker() { - } - - class ExecutionProgress { - friend class AsyncBareProgressWorker; - public: - void Signal() const { - uv_async_send(&that_->async); - } - - void Send(const T* data, size_t count) const { - that_->SendProgress_(data, count); - } - - private: - explicit ExecutionProgress(AsyncBareProgressWorker *that) : that_(that) {} - NAN_DISALLOW_ASSIGN_COPY_MOVE(ExecutionProgress) - AsyncBareProgressWorker* const that_; - }; - - virtual void Execute(const ExecutionProgress& progress) = 0; - virtual void HandleProgressCallback(const T *data, size_t size) = 0; - - private: - void Execute() /*final override*/ { - ExecutionProgress progress(this); - Execute(progress); - } - - virtual void SendProgress_(const T *data, size_t count) = 0; -}; - -template -/* abstract */ -class AsyncProgressWorkerBase : public AsyncBareProgressWorker { - public: - explicit AsyncProgressWorkerBase( - Callback *callback_, - const char* resource_name = "nan:AsyncProgressWorkerBase") - : AsyncBareProgressWorker(callback_, resource_name), asyncdata_(NULL), - asyncsize_(0) { - uv_mutex_init(&async_lock); - } - - virtual ~AsyncProgressWorkerBase() { - uv_mutex_destroy(&async_lock); - - delete[] asyncdata_; - } - - void WorkProgress() { - uv_mutex_lock(&async_lock); - T *data = asyncdata_; - size_t size = asyncsize_; - asyncdata_ = NULL; - uv_mutex_unlock(&async_lock); - - // Don't send progress events after we've already completed. - if (this->callback) { - this->HandleProgressCallback(data, size); - } - delete[] data; - } - - private: - void SendProgress_(const T *data, size_t count) { - T *new_data = new T[count]; - { - T *it = new_data; - std::copy(data, data + count, it); - } - - uv_mutex_lock(&async_lock); - T *old_data = asyncdata_; - asyncdata_ = new_data; - asyncsize_ = count; - uv_mutex_unlock(&async_lock); - - delete[] old_data; - uv_async_send(&this->async); - } - - uv_mutex_t async_lock; - T *asyncdata_; - size_t asyncsize_; -}; - -// This ensures compatibility to the previous un-templated AsyncProgressWorker -// class definition. -typedef AsyncProgressWorkerBase AsyncProgressWorker; - -template -/* abstract */ -class AsyncBareProgressQueueWorker : public AsyncBareProgressWorkerBase { - public: - explicit AsyncBareProgressQueueWorker( - Callback *callback_, - const char* resource_name = "nan:AsyncBareProgressQueueWorker") - : AsyncBareProgressWorkerBase(callback_, resource_name) { - } - - virtual ~AsyncBareProgressQueueWorker() { - } - - class ExecutionProgress { - friend class AsyncBareProgressQueueWorker; - public: - void Send(const T* data, size_t count) const { - that_->SendProgress_(data, count); - } - - private: - explicit ExecutionProgress(AsyncBareProgressQueueWorker *that) - : that_(that) {} - NAN_DISALLOW_ASSIGN_COPY_MOVE(ExecutionProgress) - AsyncBareProgressQueueWorker* const that_; - }; - - virtual void Execute(const ExecutionProgress& progress) = 0; - virtual void HandleProgressCallback(const T *data, size_t size) = 0; - - private: - void Execute() /*final override*/ { - ExecutionProgress progress(this); - Execute(progress); - } - - virtual void SendProgress_(const T *data, size_t count) = 0; -}; - -template -/* abstract */ -class AsyncProgressQueueWorker : public AsyncBareProgressQueueWorker { - public: - explicit AsyncProgressQueueWorker( - Callback *callback_, - const char* resource_name = "nan:AsyncProgressQueueWorker") - : AsyncBareProgressQueueWorker(callback_) { - uv_mutex_init(&async_lock); - } - - virtual ~AsyncProgressQueueWorker() { - uv_mutex_lock(&async_lock); - - while (!asyncdata_.empty()) { - std::pair &datapair = asyncdata_.front(); - T *data = datapair.first; - - asyncdata_.pop(); - - delete[] data; - } - - uv_mutex_unlock(&async_lock); - uv_mutex_destroy(&async_lock); - } - - void WorkComplete() { - WorkProgress(); - AsyncWorker::WorkComplete(); - } - - void WorkProgress() { - uv_mutex_lock(&async_lock); - - while (!asyncdata_.empty()) { - std::pair &datapair = asyncdata_.front(); - - T *data = datapair.first; - size_t size = datapair.second; - - asyncdata_.pop(); - uv_mutex_unlock(&async_lock); - - // Don't send progress events after we've already completed. - if (this->callback) { - this->HandleProgressCallback(data, size); - } - - delete[] data; - - uv_mutex_lock(&async_lock); - } - - uv_mutex_unlock(&async_lock); - } - - private: - void SendProgress_(const T *data, size_t count) { - T *new_data = new T[count]; - { - T *it = new_data; - std::copy(data, data + count, it); - } - - uv_mutex_lock(&async_lock); - asyncdata_.push(std::pair(new_data, count)); - uv_mutex_unlock(&async_lock); - - uv_async_send(&this->async); - } - - uv_mutex_t async_lock; - std::queue > asyncdata_; -}; - -inline void AsyncExecute (uv_work_t* req) { - AsyncWorker *worker = static_cast(req->data); - worker->Execute(); -} - -inline void AsyncExecuteComplete (uv_work_t* req) { - AsyncWorker* worker = static_cast(req->data); - worker->WorkComplete(); - worker->Destroy(); -} - -inline void AsyncQueueWorker (AsyncWorker* worker) { - uv_queue_work( - uv_default_loop() - , &worker->request - , AsyncExecute - , reinterpret_cast(AsyncExecuteComplete) - ); -} - -namespace imp { - -inline -ExternalOneByteStringResource const* -GetExternalResource(v8::Local str) { -#if NODE_MODULE_VERSION < ATOM_0_21_MODULE_VERSION - return str->GetExternalAsciiStringResource(); -#else - return str->GetExternalOneByteStringResource(); -#endif -} - -inline -bool -IsExternal(v8::Local str) { -#if NODE_MODULE_VERSION < ATOM_0_21_MODULE_VERSION - return str->IsExternalAscii(); -#else - return str->IsExternalOneByte(); -#endif -} - -} // end of namespace imp - -enum Encoding {ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER}; - -#if NODE_MODULE_VERSION < NODE_0_10_MODULE_VERSION -# include "nan_string_bytes.h" // NOLINT(build/include) -#endif - -inline v8::Local Encode( - const void *buf, size_t len, enum Encoding encoding = BINARY) { -#if (NODE_MODULE_VERSION >= ATOM_0_21_MODULE_VERSION) - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - node::encoding node_enc = static_cast(encoding); - - if (encoding == UCS2) { - return node::Encode( - isolate - , reinterpret_cast(buf) - , len / 2); - } else { - return node::Encode( - isolate - , reinterpret_cast(buf) - , len - , node_enc); - } -#elif (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - return node::Encode( - v8::Isolate::GetCurrent() - , buf, len - , static_cast(encoding)); -#else -# if NODE_MODULE_VERSION >= NODE_0_10_MODULE_VERSION - return node::Encode(buf, len, static_cast(encoding)); -# else - return imp::Encode(reinterpret_cast(buf), len, encoding); -# endif -#endif -} - -inline ssize_t DecodeBytes( - v8::Local val, enum Encoding encoding = BINARY) { -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - return node::DecodeBytes( - v8::Isolate::GetCurrent() - , val - , static_cast(encoding)); -#else -# if (NODE_MODULE_VERSION < NODE_0_10_MODULE_VERSION) - if (encoding == BUFFER) { - return node::DecodeBytes(val, node::BINARY); - } -# endif - return node::DecodeBytes(val, static_cast(encoding)); -#endif -} - -inline ssize_t DecodeWrite( - char *buf - , size_t len - , v8::Local val - , enum Encoding encoding = BINARY) { -#if (NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION) - return node::DecodeWrite( - v8::Isolate::GetCurrent() - , buf - , len - , val - , static_cast(encoding)); -#else -# if (NODE_MODULE_VERSION < NODE_0_10_MODULE_VERSION) - if (encoding == BUFFER) { - return node::DecodeWrite(buf, len, val, node::BINARY); - } -# endif - return node::DecodeWrite( - buf - , len - , val - , static_cast(encoding)); -#endif -} - -inline void SetPrototypeTemplate( - v8::Local templ - , const char *name - , v8::Local value -) { - HandleScope scope; - SetTemplate(templ->PrototypeTemplate(), name, value); -} - -inline void SetPrototypeTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes -) { - HandleScope scope; - SetTemplate(templ->PrototypeTemplate(), name, value, attributes); -} - -inline void SetInstanceTemplate( - v8::Local templ - , const char *name - , v8::Local value -) { - HandleScope scope; - SetTemplate(templ->InstanceTemplate(), name, value); -} - -inline void SetInstanceTemplate( - v8::Local templ - , v8::Local name - , v8::Local value - , v8::PropertyAttribute attributes -) { - HandleScope scope; - SetTemplate(templ->InstanceTemplate(), name, value, attributes); -} - -namespace imp { - -// Note(@agnat): Helper to distinguish different receiver types. The first -// version deals with receivers derived from v8::Template. The second version -// handles everything else. The final argument only serves as discriminator and -// is unused. -template -inline -void -SetMethodAux(T recv, - v8::Local name, - v8::Local tpl, - v8::Template *) { - recv->Set(name, tpl); -} - -template -inline -void -SetMethodAux(T recv, - v8::Local name, - v8::Local tpl, - ...) { - recv->Set(name, GetFunction(tpl).ToLocalChecked()); -} - -} // end of namespace imp - -template class HandleType> -inline void SetMethod( - HandleType recv - , const char *name - , FunctionCallback callback) { - HandleScope scope; - v8::Local t = New(callback); - v8::Local fn_name = New(name).ToLocalChecked(); - t->SetClassName(fn_name); - // Note(@agnat): Pass an empty T* as discriminator. See note on - // SetMethodAux(...) above - imp::SetMethodAux(recv, fn_name, t, static_cast(0)); -} - -inline void SetPrototypeMethod( - v8::Local recv - , const char* name, FunctionCallback callback) { - HandleScope scope; - v8::Local t = New( - callback - , v8::Local() - , New(recv)); - v8::Local fn_name = New(name).ToLocalChecked(); - recv->PrototypeTemplate()->Set(fn_name, t); - t->SetClassName(fn_name); -} - -//=== Accessors and Such ======================================================= - -inline void SetAccessor( - v8::Local tpl - , v8::Local name - , GetterCallback getter - , SetterCallback setter = 0 - , v8::Local data = v8::Local() - , v8::AccessControl settings = v8::DEFAULT - , v8::PropertyAttribute attribute = v8::None - , imp::Sig signature = imp::Sig()) { - HandleScope scope; - - imp::NativeGetter getter_ = - imp::GetterCallbackWrapper; - imp::NativeSetter setter_ = - setter ? imp::SetterCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kAccessorFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kGetterIndex - , New(reinterpret_cast(getter))); - - if (setter != 0) { - obj->SetInternalField( - imp::kSetterIndex - , New(reinterpret_cast(setter))); - } - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - - tpl->SetAccessor( - name - , getter_ - , setter_ - , obj - , settings - , attribute - , signature); -} - -inline bool SetAccessor( - v8::Local obj - , v8::Local name - , GetterCallback getter - , SetterCallback setter = 0 - , v8::Local data = v8::Local() - , v8::AccessControl settings = v8::DEFAULT - , v8::PropertyAttribute attribute = v8::None) { - HandleScope scope; - - imp::NativeGetter getter_ = - imp::GetterCallbackWrapper; - imp::NativeSetter setter_ = - setter ? imp::SetterCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kAccessorFieldCount); - v8::Local dataobj = NewInstance(otpl).ToLocalChecked(); - - dataobj->SetInternalField( - imp::kGetterIndex - , New(reinterpret_cast(getter))); - - if (!data.IsEmpty()) { - dataobj->SetInternalField(imp::kDataIndex, data); - } - - if (setter) { - dataobj->SetInternalField( - imp::kSetterIndex - , New(reinterpret_cast(setter))); - } - -#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION) - return obj->SetAccessor( - GetCurrentContext() - , name - , getter_ - , setter_ - , dataobj - , settings - , attribute).FromMaybe(false); -#else - return obj->SetAccessor( - name - , getter_ - , setter_ - , dataobj - , settings - , attribute); -#endif -} - -inline void SetNamedPropertyHandler( - v8::Local tpl - , PropertyGetterCallback getter - , PropertySetterCallback setter = 0 - , PropertyQueryCallback query = 0 - , PropertyDeleterCallback deleter = 0 - , PropertyEnumeratorCallback enumerator = 0 - , v8::Local data = v8::Local()) { - HandleScope scope; - - imp::NativePropertyGetter getter_ = - imp::PropertyGetterCallbackWrapper; - imp::NativePropertySetter setter_ = - setter ? imp::PropertySetterCallbackWrapper : 0; - imp::NativePropertyQuery query_ = - query ? imp::PropertyQueryCallbackWrapper : 0; - imp::NativePropertyDeleter *deleter_ = - deleter ? imp::PropertyDeleterCallbackWrapper : 0; - imp::NativePropertyEnumerator enumerator_ = - enumerator ? imp::PropertyEnumeratorCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kPropertyFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - obj->SetInternalField( - imp::kPropertyGetterIndex - , New(reinterpret_cast(getter))); - - if (setter) { - obj->SetInternalField( - imp::kPropertySetterIndex - , New(reinterpret_cast(setter))); - } - - if (query) { - obj->SetInternalField( - imp::kPropertyQueryIndex - , New(reinterpret_cast(query))); - } - - if (deleter) { - obj->SetInternalField( - imp::kPropertyDeleterIndex - , New(reinterpret_cast(deleter))); - } - - if (enumerator) { - obj->SetInternalField( - imp::kPropertyEnumeratorIndex - , New(reinterpret_cast(enumerator))); - } - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - tpl->SetHandler(v8::NamedPropertyHandlerConfiguration( - getter_, setter_, query_, deleter_, enumerator_, obj)); -#else - tpl->SetNamedPropertyHandler( - getter_ - , setter_ - , query_ - , deleter_ - , enumerator_ - , obj); -#endif -} - -inline void SetIndexedPropertyHandler( - v8::Local tpl - , IndexGetterCallback getter - , IndexSetterCallback setter = 0 - , IndexQueryCallback query = 0 - , IndexDeleterCallback deleter = 0 - , IndexEnumeratorCallback enumerator = 0 - , v8::Local data = v8::Local()) { - HandleScope scope; - - imp::NativeIndexGetter getter_ = - imp::IndexGetterCallbackWrapper; - imp::NativeIndexSetter setter_ = - setter ? imp::IndexSetterCallbackWrapper : 0; - imp::NativeIndexQuery query_ = - query ? imp::IndexQueryCallbackWrapper : 0; - imp::NativeIndexDeleter deleter_ = - deleter ? imp::IndexDeleterCallbackWrapper : 0; - imp::NativeIndexEnumerator enumerator_ = - enumerator ? imp::IndexEnumeratorCallbackWrapper : 0; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kIndexPropertyFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - obj->SetInternalField( - imp::kIndexPropertyGetterIndex - , New(reinterpret_cast(getter))); - - if (setter) { - obj->SetInternalField( - imp::kIndexPropertySetterIndex - , New(reinterpret_cast(setter))); - } - - if (query) { - obj->SetInternalField( - imp::kIndexPropertyQueryIndex - , New(reinterpret_cast(query))); - } - - if (deleter) { - obj->SetInternalField( - imp::kIndexPropertyDeleterIndex - , New(reinterpret_cast(deleter))); - } - - if (enumerator) { - obj->SetInternalField( - imp::kIndexPropertyEnumeratorIndex - , New(reinterpret_cast(enumerator))); - } - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - tpl->SetHandler(v8::IndexedPropertyHandlerConfiguration( - getter_, setter_, query_, deleter_, enumerator_, obj)); -#else - tpl->SetIndexedPropertyHandler( - getter_ - , setter_ - , query_ - , deleter_ - , enumerator_ - , obj); -#endif -} - -inline void SetCallHandler( - v8::Local tpl - , FunctionCallback callback - , v8::Local data = v8::Local()) { - HandleScope scope; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , New(reinterpret_cast(callback))); - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - - tpl->SetCallHandler(imp::FunctionCallbackWrapper, obj); -} - - -inline void SetCallAsFunctionHandler( - v8::Local tpl, - FunctionCallback callback, - v8::Local data = v8::Local()) { - HandleScope scope; - - v8::Local otpl = New(); - otpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(otpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , New(reinterpret_cast(callback))); - - if (!data.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, data); - } - - tpl->SetCallAsFunctionHandler(imp::FunctionCallbackWrapper, obj); -} - -//=== Weak Persistent Handling ================================================= - -#include "nan_weak.h" // NOLINT(build/include) - -//=== ObjectWrap =============================================================== - -#include "nan_object_wrap.h" // NOLINT(build/include) - -//=== HiddenValue/Private ====================================================== - -#include "nan_private.h" // NOLINT(build/include) - -//=== Export ================================================================== - -inline -void -Export(ADDON_REGISTER_FUNCTION_ARGS_TYPE target, const char *name, - FunctionCallback f) { - HandleScope scope; - - Set(target, New(name).ToLocalChecked(), - GetFunction(New(f)).ToLocalChecked()); -} - -//=== Tap Reverse Binding ===================================================== - -struct Tap { - explicit Tap(v8::Local t) : t_() { - HandleScope scope; - - t_.Reset(To(t).ToLocalChecked()); - } - - ~Tap() { t_.Reset(); } // not sure if neccessary - - inline void plan(int i) { - HandleScope scope; - v8::Local arg = New(i); - Call("plan", New(t_), 1, &arg); - } - - inline void ok(bool isOk, const char *msg = NULL) { - HandleScope scope; - v8::Local args[2]; - args[0] = New(isOk); - if (msg) args[1] = New(msg).ToLocalChecked(); - Call("ok", New(t_), msg ? 2 : 1, args); - } - - inline void pass(const char * msg = NULL) { - HandleScope scope; - v8::Local hmsg; - if (msg) hmsg = New(msg).ToLocalChecked(); - Call("pass", New(t_), msg ? 1 : 0, &hmsg); - } - - inline void end() { - HandleScope scope; - Call("end", New(t_), 0, NULL); - } - - private: - Persistent t_; -}; - -#define NAN_STRINGIZE2(x) #x -#define NAN_STRINGIZE(x) NAN_STRINGIZE2(x) -#define NAN_TEST_EXPRESSION(expression) \ - ( expression ), __FILE__ ":" NAN_STRINGIZE(__LINE__) ": " #expression - -#define NAN_EXPORT(target, function) Export(target, #function, function) - -#undef TYPE_CHECK - -//=== Generic Maybefication =================================================== - -namespace imp { - -template struct Maybefier; - -template struct Maybefier > { - inline static MaybeLocal convert(v8::Local v) { - return v; - } -}; - -template struct Maybefier > { - inline static MaybeLocal convert(MaybeLocal v) { - return v; - } -}; - -} // end of namespace imp - -template class MaybeMaybe> -inline MaybeLocal -MakeMaybe(MaybeMaybe v) { - return imp::Maybefier >::convert(v); -} - -//=== TypedArrayContents ======================================================= - -#include "nan_typedarray_contents.h" // NOLINT(build/include) - -//=== JSON ===================================================================== - -#include "nan_json.h" // NOLINT(build/include) - -} // end of namespace Nan - -#endif // NAN_H_ diff --git a/truebit-implementation/node_modules/nan/nan_callbacks.h b/truebit-implementation/node_modules/nan/nan_callbacks.h deleted file mode 100644 index 53ede846..00000000 --- a/truebit-implementation/node_modules/nan/nan_callbacks.h +++ /dev/null @@ -1,88 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CALLBACKS_H_ -#define NAN_CALLBACKS_H_ - -template class FunctionCallbackInfo; -template class PropertyCallbackInfo; -template class Global; - -typedef void(*FunctionCallback)(const FunctionCallbackInfo&); -typedef void(*GetterCallback) - (v8::Local, const PropertyCallbackInfo&); -typedef void(*SetterCallback)( - v8::Local, - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertyGetterCallback)( - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertySetterCallback)( - v8::Local, - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertyEnumeratorCallback) - (const PropertyCallbackInfo&); -typedef void(*PropertyDeleterCallback)( - v8::Local, - const PropertyCallbackInfo&); -typedef void(*PropertyQueryCallback)( - v8::Local, - const PropertyCallbackInfo&); -typedef void(*IndexGetterCallback)( - uint32_t, - const PropertyCallbackInfo&); -typedef void(*IndexSetterCallback)( - uint32_t, - v8::Local, - const PropertyCallbackInfo&); -typedef void(*IndexEnumeratorCallback) - (const PropertyCallbackInfo&); -typedef void(*IndexDeleterCallback)( - uint32_t, - const PropertyCallbackInfo&); -typedef void(*IndexQueryCallback)( - uint32_t, - const PropertyCallbackInfo&); - -namespace imp { -typedef v8::Local Sig; - -static const int kDataIndex = 0; - -static const int kFunctionIndex = 1; -static const int kFunctionFieldCount = 2; - -static const int kGetterIndex = 1; -static const int kSetterIndex = 2; -static const int kAccessorFieldCount = 3; - -static const int kPropertyGetterIndex = 1; -static const int kPropertySetterIndex = 2; -static const int kPropertyEnumeratorIndex = 3; -static const int kPropertyDeleterIndex = 4; -static const int kPropertyQueryIndex = 5; -static const int kPropertyFieldCount = 6; - -static const int kIndexPropertyGetterIndex = 1; -static const int kIndexPropertySetterIndex = 2; -static const int kIndexPropertyEnumeratorIndex = 3; -static const int kIndexPropertyDeleterIndex = 4; -static const int kIndexPropertyQueryIndex = 5; -static const int kIndexPropertyFieldCount = 6; - -} // end of namespace imp - -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -# include "nan_callbacks_12_inl.h" // NOLINT(build/include) -#else -# include "nan_callbacks_pre_12_inl.h" // NOLINT(build/include) -#endif - -#endif // NAN_CALLBACKS_H_ diff --git a/truebit-implementation/node_modules/nan/nan_callbacks_12_inl.h b/truebit-implementation/node_modules/nan/nan_callbacks_12_inl.h deleted file mode 100644 index d3df79aa..00000000 --- a/truebit-implementation/node_modules/nan/nan_callbacks_12_inl.h +++ /dev/null @@ -1,512 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CALLBACKS_12_INL_H_ -#define NAN_CALLBACKS_12_INL_H_ - -template -class ReturnValue { - v8::ReturnValue value_; - - public: - template - explicit inline ReturnValue(const v8::ReturnValue &value) : - value_(value) {} - template - explicit inline ReturnValue(const ReturnValue& that) - : value_(that.value_) { - TYPE_CHECK(T, S); - } - - // Handle setters - template inline void Set(const v8::Local &handle) { - TYPE_CHECK(T, S); - value_.Set(handle); - } - - template inline void Set(const Global &handle) { - TYPE_CHECK(T, S); -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && \ - (V8_MINOR_VERSION > 5 || (V8_MINOR_VERSION == 5 && \ - defined(V8_BUILD_NUMBER) && V8_BUILD_NUMBER >= 8)))) - value_.Set(handle); -#else - value_.Set(*reinterpret_cast*>(&handle)); - const_cast &>(handle).Reset(); -#endif - } - - // Fast primitive setters - inline void Set(bool value) { - TYPE_CHECK(T, v8::Boolean); - value_.Set(value); - } - - inline void Set(double i) { - TYPE_CHECK(T, v8::Number); - value_.Set(i); - } - - inline void Set(int32_t i) { - TYPE_CHECK(T, v8::Integer); - value_.Set(i); - } - - inline void Set(uint32_t i) { - TYPE_CHECK(T, v8::Integer); - value_.Set(i); - } - - // Fast JS primitive setters - inline void SetNull() { - TYPE_CHECK(T, v8::Primitive); - value_.SetNull(); - } - - inline void SetUndefined() { - TYPE_CHECK(T, v8::Primitive); - value_.SetUndefined(); - } - - inline void SetEmptyString() { - TYPE_CHECK(T, v8::String); - value_.SetEmptyString(); - } - - // Convenience getter for isolate - inline v8::Isolate *GetIsolate() const { - return value_.GetIsolate(); - } - - // Pointer setter: Uncompilable to prevent inadvertent misuse. - template - inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); } -}; - -template -class FunctionCallbackInfo { - const v8::FunctionCallbackInfo &info_; - const v8::Local data_; - - public: - explicit inline FunctionCallbackInfo( - const v8::FunctionCallbackInfo &info - , v8::Local data) : - info_(info) - , data_(data) {} - - inline ReturnValue GetReturnValue() const { - return ReturnValue(info_.GetReturnValue()); - } - - inline v8::Local Callee() const { return info_.Callee(); } - inline v8::Local Data() const { return data_; } - inline v8::Local Holder() const { return info_.Holder(); } - inline bool IsConstructCall() const { return info_.IsConstructCall(); } - inline int Length() const { return info_.Length(); } - inline v8::Local operator[](int i) const { return info_[i]; } - inline v8::Local This() const { return info_.This(); } - inline v8::Isolate *GetIsolate() const { return info_.GetIsolate(); } - - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kCalleeIndex = 5; - static const int kContextSaveIndex = 6; - static const int kArgsLength = 7; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo) -}; - -template -class PropertyCallbackInfo { - const v8::PropertyCallbackInfo &info_; - const v8::Local data_; - - public: - explicit inline PropertyCallbackInfo( - const v8::PropertyCallbackInfo &info - , const v8::Local data) : - info_(info) - , data_(data) {} - - inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); } - inline v8::Local Data() const { return data_; } - inline v8::Local This() const { return info_.This(); } - inline v8::Local Holder() const { return info_.Holder(); } - inline ReturnValue GetReturnValue() const { - return ReturnValue(info_.GetReturnValue()); - } - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kThisIndex = 5; - static const int kArgsLength = 6; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfo) -}; - -namespace imp { -static -void FunctionCallbackWrapper(const v8::FunctionCallbackInfo &info) { - v8::Local obj = info.Data().As(); - FunctionCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kFunctionIndex).As()->Value())); - FunctionCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - callback(cbinfo); -} - -typedef void (*NativeFunction)(const v8::FunctionCallbackInfo &); - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -static -void GetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - GetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kGetterIndex).As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (*NativeGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void SetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - SetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kSetterIndex).As()->Value())); - callback(property.As(), value, cbinfo); -} - -typedef void (*NativeSetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); -#else -static -void GetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - GetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kGetterIndex).As()->Value())); - callback(property, cbinfo); -} - -typedef void (*NativeGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void SetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - SetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kSetterIndex).As()->Value())); - callback(property, value, cbinfo); -} - -typedef void (*NativeSetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); -#endif - -#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -static -void PropertyGetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyGetterIndex) - .As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (*NativePropertyGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertySetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertySetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertySetterIndex) - .As()->Value())); - callback(property.As(), value, cbinfo); -} - -typedef void (*NativePropertySetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); - -static -void PropertyEnumeratorCallbackWrapper( - const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyEnumeratorCallback callback = - reinterpret_cast(reinterpret_cast( - obj->GetInternalField(kPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); -} - -typedef void (*NativePropertyEnumerator) - (const v8::PropertyCallbackInfo &); - -static -void PropertyDeleterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyDeleterIndex) - .As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (NativePropertyDeleter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertyQueryCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyQueryIndex) - .As()->Value())); - callback(property.As(), cbinfo); -} - -typedef void (*NativePropertyQuery) - (v8::Local, const v8::PropertyCallbackInfo &); -#else -static -void PropertyGetterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyGetterIndex) - .As()->Value())); - callback(property, cbinfo); -} - -typedef void (*NativePropertyGetter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertySetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertySetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertySetterIndex) - .As()->Value())); - callback(property, value, cbinfo); -} - -typedef void (*NativePropertySetter)( - v8::Local - , v8::Local - , const v8::PropertyCallbackInfo &); - -static -void PropertyEnumeratorCallbackWrapper( - const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyEnumeratorCallback callback = - reinterpret_cast(reinterpret_cast( - obj->GetInternalField(kPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); -} - -typedef void (*NativePropertyEnumerator) - (const v8::PropertyCallbackInfo &); - -static -void PropertyDeleterCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyDeleterIndex) - .As()->Value())); - callback(property, cbinfo); -} - -typedef void (NativePropertyDeleter) - (v8::Local, const v8::PropertyCallbackInfo &); - -static -void PropertyQueryCallbackWrapper( - v8::Local property - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyQueryIndex) - .As()->Value())); - callback(property, cbinfo); -} - -typedef void (*NativePropertyQuery) - (v8::Local, const v8::PropertyCallbackInfo &); -#endif - -static -void IndexGetterCallbackWrapper( - uint32_t index, const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyGetterIndex) - .As()->Value())); - callback(index, cbinfo); -} - -typedef void (*NativeIndexGetter) - (uint32_t, const v8::PropertyCallbackInfo &); - -static -void IndexSetterCallbackWrapper( - uint32_t index - , v8::Local value - , const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexSetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertySetterIndex) - .As()->Value())); - callback(index, value, cbinfo); -} - -typedef void (*NativeIndexSetter)( - uint32_t - , v8::Local - , const v8::PropertyCallbackInfo &); - -static -void IndexEnumeratorCallbackWrapper( - const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexEnumeratorCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField( - kIndexPropertyEnumeratorIndex).As()->Value())); - callback(cbinfo); -} - -typedef void (*NativeIndexEnumerator) - (const v8::PropertyCallbackInfo &); - -static -void IndexDeleterCallbackWrapper( - uint32_t index, const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyDeleterIndex) - .As()->Value())); - callback(index, cbinfo); -} - -typedef void (*NativeIndexDeleter) - (uint32_t, const v8::PropertyCallbackInfo &); - -static -void IndexQueryCallbackWrapper( - uint32_t index, const v8::PropertyCallbackInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyQueryIndex) - .As()->Value())); - callback(index, cbinfo); -} - -typedef void (*NativeIndexQuery) - (uint32_t, const v8::PropertyCallbackInfo &); -} // end of namespace imp - -#endif // NAN_CALLBACKS_12_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_callbacks_pre_12_inl.h b/truebit-implementation/node_modules/nan/nan_callbacks_pre_12_inl.h deleted file mode 100644 index c9ba4993..00000000 --- a/truebit-implementation/node_modules/nan/nan_callbacks_pre_12_inl.h +++ /dev/null @@ -1,520 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CALLBACKS_PRE_12_INL_H_ -#define NAN_CALLBACKS_PRE_12_INL_H_ - -namespace imp { -template class ReturnValueImp; -} // end of namespace imp - -template -class ReturnValue { - v8::Isolate *isolate_; - v8::Persistent *value_; - friend class imp::ReturnValueImp; - - public: - template - explicit inline ReturnValue(v8::Isolate *isolate, v8::Persistent *p) : - isolate_(isolate), value_(p) {} - template - explicit inline ReturnValue(const ReturnValue& that) - : isolate_(that.isolate_), value_(that.value_) { - TYPE_CHECK(T, S); - } - - // Handle setters - template inline void Set(const v8::Local &handle) { - TYPE_CHECK(T, S); - value_->Dispose(); - *value_ = v8::Persistent::New(handle); - } - - template inline void Set(const Global &handle) { - TYPE_CHECK(T, S); - value_->Dispose(); - *value_ = v8::Persistent::New(handle.persistent); - const_cast &>(handle).Reset(); - } - - // Fast primitive setters - inline void Set(bool value) { - v8::HandleScope scope; - - TYPE_CHECK(T, v8::Boolean); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Boolean::New(value)); - } - - inline void Set(double i) { - v8::HandleScope scope; - - TYPE_CHECK(T, v8::Number); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Number::New(i)); - } - - inline void Set(int32_t i) { - v8::HandleScope scope; - - TYPE_CHECK(T, v8::Integer); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Int32::New(i)); - } - - inline void Set(uint32_t i) { - v8::HandleScope scope; - - TYPE_CHECK(T, v8::Integer); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Uint32::NewFromUnsigned(i)); - } - - // Fast JS primitive setters - inline void SetNull() { - v8::HandleScope scope; - - TYPE_CHECK(T, v8::Primitive); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Null()); - } - - inline void SetUndefined() { - v8::HandleScope scope; - - TYPE_CHECK(T, v8::Primitive); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::Undefined()); - } - - inline void SetEmptyString() { - v8::HandleScope scope; - - TYPE_CHECK(T, v8::String); - value_->Dispose(); - *value_ = v8::Persistent::New(v8::String::Empty()); - } - - // Convenience getter for isolate - inline v8::Isolate *GetIsolate() const { - return isolate_; - } - - // Pointer setter: Uncompilable to prevent inadvertent misuse. - template - inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); } -}; - -template -class FunctionCallbackInfo { - const v8::Arguments &args_; - v8::Local data_; - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline FunctionCallbackInfo( - const v8::Arguments &args - , v8::Local data) : - args_(args) - , data_(data) - , return_value_(args.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Undefined())) {} - - inline ~FunctionCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return ReturnValue(return_value_); - } - - inline v8::Local Callee() const { return args_.Callee(); } - inline v8::Local Data() const { return data_; } - inline v8::Local Holder() const { return args_.Holder(); } - inline bool IsConstructCall() const { return args_.IsConstructCall(); } - inline int Length() const { return args_.Length(); } - inline v8::Local operator[](int i) const { return args_[i]; } - inline v8::Local This() const { return args_.This(); } - inline v8::Isolate *GetIsolate() const { return args_.GetIsolate(); } - - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kCalleeIndex = 5; - static const int kContextSaveIndex = 6; - static const int kArgsLength = 7; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo) -}; - -template -class PropertyCallbackInfoBase { - const v8::AccessorInfo &info_; - const v8::Local data_; - - public: - explicit inline PropertyCallbackInfoBase( - const v8::AccessorInfo &info - , const v8::Local data) : - info_(info) - , data_(data) {} - - inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); } - inline v8::Local Data() const { return data_; } - inline v8::Local This() const { return info_.This(); } - inline v8::Local Holder() const { return info_.Holder(); } - - protected: - static const int kHolderIndex = 0; - static const int kIsolateIndex = 1; - static const int kReturnValueDefaultValueIndex = 2; - static const int kReturnValueIndex = 3; - static const int kDataIndex = 4; - static const int kThisIndex = 5; - static const int kArgsLength = 6; - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfoBase) -}; - -template -class PropertyCallbackInfo : public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Undefined())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { return return_value_; } -}; - -template<> -class PropertyCallbackInfo : - public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Local())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return return_value_; - } -}; - -template<> -class PropertyCallbackInfo : - public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Local())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return return_value_; - } -}; - -template<> -class PropertyCallbackInfo : - public PropertyCallbackInfoBase { - ReturnValue return_value_; - v8::Persistent retval_; - - public: - explicit inline PropertyCallbackInfo( - const v8::AccessorInfo &info - , const v8::Local data) : - PropertyCallbackInfoBase(info, data) - , return_value_(info.GetIsolate(), &retval_) - , retval_(v8::Persistent::New(v8::Local())) {} - - inline ~PropertyCallbackInfo() { - retval_.Dispose(); - retval_.Clear(); - } - - inline ReturnValue GetReturnValue() const { - return return_value_; - } -}; - -namespace imp { -template -class ReturnValueImp : public ReturnValue { - public: - explicit ReturnValueImp(ReturnValue that) : - ReturnValue(that) {} - inline v8::Handle Value() { - return *ReturnValue::value_; - } -}; - -static -v8::Handle FunctionCallbackWrapper(const v8::Arguments &args) { - v8::Local obj = args.Data().As(); - FunctionCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kFunctionIndex).As()->Value())); - FunctionCallbackInfo - cbinfo(args, obj->GetInternalField(kDataIndex)); - callback(cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeFunction)(const v8::Arguments &); - -static -v8::Handle GetterCallbackWrapper( - v8::Local property, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - GetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kGetterIndex).As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeGetter) - (v8::Local, const v8::AccessorInfo &); - -static -void SetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - SetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kSetterIndex).As()->Value())); - callback(property, value, cbinfo); -} - -typedef void (*NativeSetter) - (v8::Local, v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertyGetterCallbackWrapper( - v8::Local property, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyGetterIndex) - .As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertyGetter) - (v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertySetterCallbackWrapper( - v8::Local property - , v8::Local value - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertySetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertySetterIndex) - .As()->Value())); - callback(property, value, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertySetter) - (v8::Local, v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertyEnumeratorCallbackWrapper( - const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyEnumeratorCallback callback = - reinterpret_cast(reinterpret_cast( - obj->GetInternalField(kPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertyEnumerator) - (const v8::AccessorInfo &); - -static -v8::Handle PropertyDeleterCallbackWrapper( - v8::Local property - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyDeleterIndex) - .As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (NativePropertyDeleter) - (v8::Local, const v8::AccessorInfo &); - -static -v8::Handle PropertyQueryCallbackWrapper( - v8::Local property, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - PropertyQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kPropertyQueryIndex) - .As()->Value())); - callback(property, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativePropertyQuery) - (v8::Local, const v8::AccessorInfo &); - -static -v8::Handle IndexGetterCallbackWrapper( - uint32_t index, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexGetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyGetterIndex) - .As()->Value())); - callback(index, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexGetter) - (uint32_t, const v8::AccessorInfo &); - -static -v8::Handle IndexSetterCallbackWrapper( - uint32_t index - , v8::Local value - , const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexSetterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertySetterIndex) - .As()->Value())); - callback(index, value, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexSetter) - (uint32_t, v8::Local, const v8::AccessorInfo &); - -static -v8::Handle IndexEnumeratorCallbackWrapper( - const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexEnumeratorCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyEnumeratorIndex) - .As()->Value())); - callback(cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexEnumerator) - (const v8::AccessorInfo &); - -static -v8::Handle IndexDeleterCallbackWrapper( - uint32_t index, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexDeleterCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyDeleterIndex) - .As()->Value())); - callback(index, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexDeleter) - (uint32_t, const v8::AccessorInfo &); - -static -v8::Handle IndexQueryCallbackWrapper( - uint32_t index, const v8::AccessorInfo &info) { - v8::Local obj = info.Data().As(); - PropertyCallbackInfo - cbinfo(info, obj->GetInternalField(kDataIndex)); - IndexQueryCallback callback = reinterpret_cast( - reinterpret_cast( - obj->GetInternalField(kIndexPropertyQueryIndex) - .As()->Value())); - callback(index, cbinfo); - return ReturnValueImp(cbinfo.GetReturnValue()).Value(); -} - -typedef v8::Handle (*NativeIndexQuery) - (uint32_t, const v8::AccessorInfo &); -} // end of namespace imp - -#endif // NAN_CALLBACKS_PRE_12_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_converters.h b/truebit-implementation/node_modules/nan/nan_converters.h deleted file mode 100644 index c0b32729..00000000 --- a/truebit-implementation/node_modules/nan/nan_converters.h +++ /dev/null @@ -1,72 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CONVERTERS_H_ -#define NAN_CONVERTERS_H_ - -namespace imp { -template struct ToFactoryBase { - typedef MaybeLocal return_t; -}; -template struct ValueFactoryBase { typedef Maybe return_t; }; - -template struct ToFactory; - -template<> -struct ToFactory : ToFactoryBase { - static inline return_t convert(v8::Local val) { - if (val.IsEmpty() || !val->IsFunction()) return MaybeLocal(); - return MaybeLocal(val.As()); - } -}; - -#define X(TYPE) \ - template<> \ - struct ToFactory : ToFactoryBase { \ - static inline return_t convert(v8::Local val); \ - }; - -X(Boolean) -X(Number) -X(String) -X(Object) -X(Integer) -X(Uint32) -X(Int32) - -#undef X - -#define X(TYPE) \ - template<> \ - struct ToFactory : ValueFactoryBase { \ - static inline return_t convert(v8::Local val); \ - }; - -X(bool) -X(double) -X(int64_t) -X(uint32_t) -X(int32_t) - -#undef X -} // end of namespace imp - -template -inline -typename imp::ToFactory::return_t To(v8::Local val) { - return imp::ToFactory::convert(val); -} - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -# include "nan_converters_43_inl.h" -#else -# include "nan_converters_pre_43_inl.h" -#endif - -#endif // NAN_CONVERTERS_H_ diff --git a/truebit-implementation/node_modules/nan/nan_converters_43_inl.h b/truebit-implementation/node_modules/nan/nan_converters_43_inl.h deleted file mode 100644 index 742f5432..00000000 --- a/truebit-implementation/node_modules/nan/nan_converters_43_inl.h +++ /dev/null @@ -1,48 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CONVERTERS_43_INL_H_ -#define NAN_CONVERTERS_43_INL_H_ - -#define X(TYPE) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - v8::Isolate *isolate = v8::Isolate::GetCurrent(); \ - v8::EscapableHandleScope scope(isolate); \ - return scope.Escape( \ - val->To ## TYPE(isolate->GetCurrentContext()) \ - .FromMaybe(v8::Local())); \ -} - -X(Boolean) -X(Number) -X(String) -X(Object) -X(Integer) -X(Uint32) -X(Int32) - -#undef X - -#define X(TYPE, NAME) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - v8::Isolate *isolate = v8::Isolate::GetCurrent(); \ - v8::HandleScope scope(isolate); \ - return val->NAME ## Value(isolate->GetCurrentContext()); \ -} - -X(bool, Boolean) -X(double, Number) -X(int64_t, Integer) -X(uint32_t, Uint32) -X(int32_t, Int32) - -#undef X - -#endif // NAN_CONVERTERS_43_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_converters_pre_43_inl.h b/truebit-implementation/node_modules/nan/nan_converters_pre_43_inl.h deleted file mode 100644 index ae0518aa..00000000 --- a/truebit-implementation/node_modules/nan/nan_converters_pre_43_inl.h +++ /dev/null @@ -1,42 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_CONVERTERS_PRE_43_INL_H_ -#define NAN_CONVERTERS_PRE_43_INL_H_ - -#define X(TYPE) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - return val->To ## TYPE(); \ -} - -X(Boolean) -X(Number) -X(String) -X(Object) -X(Integer) -X(Uint32) -X(Int32) - -#undef X - -#define X(TYPE, NAME) \ -imp::ToFactory::return_t \ -imp::ToFactory::convert(v8::Local val) { \ - return Just(val->NAME ## Value()); \ -} - -X(bool, Boolean) -X(double, Number) -X(int64_t, Integer) -X(uint32_t, Uint32) -X(int32_t, Int32) - -#undef X - -#endif // NAN_CONVERTERS_PRE_43_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_define_own_property_helper.h b/truebit-implementation/node_modules/nan/nan_define_own_property_helper.h deleted file mode 100644 index d710ef22..00000000 --- a/truebit-implementation/node_modules/nan/nan_define_own_property_helper.h +++ /dev/null @@ -1,29 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_DEFINE_OWN_PROPERTY_HELPER_H_ -#define NAN_DEFINE_OWN_PROPERTY_HELPER_H_ - -namespace imp { - -inline Maybe DefineOwnPropertyHelper( - v8::PropertyAttribute current - , v8::Handle obj - , v8::Handle key - , v8::Handle value - , v8::PropertyAttribute attribs = v8::None) { - return !(current & v8::DontDelete) || // configurable OR - (!(current & v8::ReadOnly) && // writable AND - !((attribs ^ current) & ~v8::ReadOnly)) // same excluding RO - ? Just(obj->ForceSet(key, value, attribs)) - : Nothing(); -} - -} // end of namespace imp - -#endif // NAN_DEFINE_OWN_PROPERTY_HELPER_H_ diff --git a/truebit-implementation/node_modules/nan/nan_implementation_12_inl.h b/truebit-implementation/node_modules/nan/nan_implementation_12_inl.h deleted file mode 100644 index baacb380..00000000 --- a/truebit-implementation/node_modules/nan/nan_implementation_12_inl.h +++ /dev/null @@ -1,399 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_IMPLEMENTATION_12_INL_H_ -#define NAN_IMPLEMENTATION_12_INL_H_ -//============================================================================== -// node v0.11 implementation -//============================================================================== - -namespace imp { - -//=== Array ==================================================================== - -Factory::return_t -Factory::New() { - return v8::Array::New(v8::Isolate::GetCurrent()); -} - -Factory::return_t -Factory::New(int length) { - return v8::Array::New(v8::Isolate::GetCurrent(), length); -} - -//=== Boolean ================================================================== - -Factory::return_t -Factory::New(bool value) { - return v8::Boolean::New(v8::Isolate::GetCurrent(), value); -} - -//=== Boolean Object =========================================================== - -Factory::return_t -Factory::New(bool value) { -#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION) - return v8::BooleanObject::New( - v8::Isolate::GetCurrent(), value).As(); -#else - return v8::BooleanObject::New(value).As(); -#endif -} - -//=== Context ================================================================== - -Factory::return_t -Factory::New( v8::ExtensionConfiguration* extensions - , v8::Local tmpl - , v8::Local obj) { - return v8::Context::New(v8::Isolate::GetCurrent(), extensions, tmpl, obj); -} - -//=== Date ===================================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New(double value) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(v8::Date::New(isolate->GetCurrentContext(), value) - .FromMaybe(v8::Local()).As()); -} -#else -Factory::return_t -Factory::New(double value) { - return v8::Date::New(v8::Isolate::GetCurrent(), value).As(); -} -#endif - -//=== External ================================================================= - -Factory::return_t -Factory::New(void * value) { - return v8::External::New(v8::Isolate::GetCurrent(), value); -} - -//=== Function ================================================================= - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::Local tpl = v8::ObjectTemplate::New(isolate); - tpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(tpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , v8::External::New(isolate, reinterpret_cast(callback))); - - v8::Local val = v8::Local::New(isolate, data); - - if (!val.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, val); - } - - return scope.Escape(v8::Function::New( isolate - , imp::FunctionCallbackWrapper - , obj)); -} - -//=== Function Template ======================================================== - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data - , v8::Local signature) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - if (callback) { - v8::EscapableHandleScope scope(isolate); - v8::Local tpl = v8::ObjectTemplate::New(isolate); - tpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = NewInstance(tpl).ToLocalChecked(); - - obj->SetInternalField( - imp::kFunctionIndex - , v8::External::New(isolate, reinterpret_cast(callback))); - v8::Local val = v8::Local::New(isolate, data); - - if (!val.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, val); - } - - return scope.Escape(v8::FunctionTemplate::New( isolate - , imp::FunctionCallbackWrapper - , obj - , signature)); - } else { - return v8::FunctionTemplate::New(isolate, 0, data, signature); - } -} - -//=== Number =================================================================== - -Factory::return_t -Factory::New(double value) { - return v8::Number::New(v8::Isolate::GetCurrent(), value); -} - -//=== Number Object ============================================================ - -Factory::return_t -Factory::New(double value) { - return v8::NumberObject::New( v8::Isolate::GetCurrent() - , value).As(); -} - -//=== Integer, Int32 and Uint32 ================================================ - -template -typename IntegerFactory::return_t -IntegerFactory::New(int32_t value) { - return To(T::New(v8::Isolate::GetCurrent(), value)); -} - -template -typename IntegerFactory::return_t -IntegerFactory::New(uint32_t value) { - return To(T::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); -} - -Factory::return_t -Factory::New(int32_t value) { - return To( - v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); -} - -Factory::return_t -Factory::New(uint32_t value) { - return To( - v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); -} - -//=== Object =================================================================== - -Factory::return_t -Factory::New() { - return v8::Object::New(v8::Isolate::GetCurrent()); -} - -//=== Object Template ========================================================== - -Factory::return_t -Factory::New() { - return v8::ObjectTemplate::New(v8::Isolate::GetCurrent()); -} - -//=== RegExp =================================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New( - v8::Local pattern - , v8::RegExp::Flags flags) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape( - v8::RegExp::New(isolate->GetCurrentContext(), pattern, flags) - .FromMaybe(v8::Local())); -} -#else -Factory::return_t -Factory::New( - v8::Local pattern - , v8::RegExp::Flags flags) { - return v8::RegExp::New(pattern, flags); -} -#endif - -//=== Script =================================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New( v8::Local source) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::ScriptCompiler::Source src(source); - return scope.Escape( - v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src) - .FromMaybe(v8::Local())); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::ScriptCompiler::Source src(source, origin); - return scope.Escape( - v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src) - .FromMaybe(v8::Local())); -} -#else -Factory::return_t -Factory::New( v8::Local source) { - v8::ScriptCompiler::Source src(source); - return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::ScriptCompiler::Source src(source, origin); - return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src); -} -#endif - -//=== Signature ================================================================ - -Factory::return_t -Factory::New(Factory::FTH receiver) { - return v8::Signature::New(v8::Isolate::GetCurrent(), receiver); -} - -//=== String =================================================================== - -Factory::return_t -Factory::New() { - return v8::String::Empty(v8::Isolate::GetCurrent()); -} - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New(const char * value, int length) { - return v8::String::NewFromUtf8( - v8::Isolate::GetCurrent(), value, v8::NewStringType::kNormal, length); -} - -Factory::return_t -Factory::New(std::string const& value) { - assert(value.size() <= INT_MAX && "string too long"); - return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), - value.data(), v8::NewStringType::kNormal, static_cast(value.size())); -} - -Factory::return_t -Factory::New(const uint16_t * value, int length) { - return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value, - v8::NewStringType::kNormal, length); -} - -Factory::return_t -Factory::New(v8::String::ExternalStringResource * value) { - return v8::String::NewExternalTwoByte(v8::Isolate::GetCurrent(), value); -} - -Factory::return_t -Factory::New(ExternalOneByteStringResource * value) { - return v8::String::NewExternalOneByte(v8::Isolate::GetCurrent(), value); -} -#else -Factory::return_t -Factory::New(const char * value, int length) { - return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value, - v8::String::kNormalString, length); -} - -Factory::return_t -Factory::New( - std::string const& value) /* NOLINT(build/include_what_you_use) */ { - assert(value.size() <= INT_MAX && "string too long"); - return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value.data(), - v8::String::kNormalString, - static_cast(value.size())); -} - -Factory::return_t -Factory::New(const uint16_t * value, int length) { - return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value, - v8::String::kNormalString, length); -} - -Factory::return_t -Factory::New(v8::String::ExternalStringResource * value) { - return v8::String::NewExternal(v8::Isolate::GetCurrent(), value); -} - -Factory::return_t -Factory::New(ExternalOneByteStringResource * value) { - return v8::String::NewExternal(v8::Isolate::GetCurrent(), value); -} -#endif - -//=== String Object ============================================================ - -Factory::return_t -Factory::New(v8::Local value) { - return v8::StringObject::New(value).As(); -} - -//=== Unbound Script =========================================================== - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -Factory::return_t -Factory::New(v8::Local source) { - v8::ScriptCompiler::Source src(source); - return v8::ScriptCompiler::CompileUnboundScript( - v8::Isolate::GetCurrent(), &src); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::ScriptCompiler::Source src(source, origin); - return v8::ScriptCompiler::CompileUnboundScript( - v8::Isolate::GetCurrent(), &src); -} -#else -Factory::return_t -Factory::New(v8::Local source) { - v8::ScriptCompiler::Source src(source); - return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src); -} - -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - v8::ScriptCompiler::Source src(source, origin); - return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src); -} -#endif - -} // end of namespace imp - -//=== Presistents and Handles ================================================== - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION -template -inline v8::Local New(v8::Handle h) { - return v8::Local::New(v8::Isolate::GetCurrent(), h); -} -#endif - -template -inline v8::Local New(v8::Persistent const& p) { - return v8::Local::New(v8::Isolate::GetCurrent(), p); -} - -template -inline v8::Local New(Persistent const& p) { - return v8::Local::New(v8::Isolate::GetCurrent(), p); -} - -template -inline v8::Local New(Global const& p) { - return v8::Local::New(v8::Isolate::GetCurrent(), p); -} - -#endif // NAN_IMPLEMENTATION_12_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_implementation_pre_12_inl.h b/truebit-implementation/node_modules/nan/nan_implementation_pre_12_inl.h deleted file mode 100644 index 1472421a..00000000 --- a/truebit-implementation/node_modules/nan/nan_implementation_pre_12_inl.h +++ /dev/null @@ -1,263 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_IMPLEMENTATION_PRE_12_INL_H_ -#define NAN_IMPLEMENTATION_PRE_12_INL_H_ - -//============================================================================== -// node v0.10 implementation -//============================================================================== - -namespace imp { - -//=== Array ==================================================================== - -Factory::return_t -Factory::New() { - return v8::Array::New(); -} - -Factory::return_t -Factory::New(int length) { - return v8::Array::New(length); -} - -//=== Boolean ================================================================== - -Factory::return_t -Factory::New(bool value) { - return v8::Boolean::New(value)->ToBoolean(); -} - -//=== Boolean Object =========================================================== - -Factory::return_t -Factory::New(bool value) { - return v8::BooleanObject::New(value).As(); -} - -//=== Context ================================================================== - -Factory::return_t -Factory::New( v8::ExtensionConfiguration* extensions - , v8::Local tmpl - , v8::Local obj) { - v8::Persistent ctx = v8::Context::New(extensions, tmpl, obj); - v8::Local lctx = v8::Local::New(ctx); - ctx.Dispose(); - return lctx; -} - -//=== Date ===================================================================== - -Factory::return_t -Factory::New(double value) { - return v8::Date::New(value).As(); -} - -//=== External ================================================================= - -Factory::return_t -Factory::New(void * value) { - return v8::External::New(value); -} - -//=== Function ================================================================= - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data) { - v8::HandleScope scope; - - return scope.Close(Factory::New( - callback, data, v8::Local()) - ->GetFunction()); -} - - -//=== FunctionTemplate ========================================================= - -Factory::return_t -Factory::New( FunctionCallback callback - , v8::Local data - , v8::Local signature) { - if (callback) { - v8::HandleScope scope; - - v8::Local tpl = v8::ObjectTemplate::New(); - tpl->SetInternalFieldCount(imp::kFunctionFieldCount); - v8::Local obj = tpl->NewInstance(); - - obj->SetInternalField( - imp::kFunctionIndex - , v8::External::New(reinterpret_cast(callback))); - - v8::Local val = v8::Local::New(data); - - if (!val.IsEmpty()) { - obj->SetInternalField(imp::kDataIndex, val); - } - - // Note(agnat): Emulate length argument here. Unfortunately, I couldn't find - // a way. Have at it though... - return scope.Close( - v8::FunctionTemplate::New(imp::FunctionCallbackWrapper - , obj - , signature)); - } else { - return v8::FunctionTemplate::New(0, data, signature); - } -} - -//=== Number =================================================================== - -Factory::return_t -Factory::New(double value) { - return v8::Number::New(value); -} - -//=== Number Object ============================================================ - -Factory::return_t -Factory::New(double value) { - return v8::NumberObject::New(value).As(); -} - -//=== Integer, Int32 and Uint32 ================================================ - -template -typename IntegerFactory::return_t -IntegerFactory::New(int32_t value) { - return To(T::New(value)); -} - -template -typename IntegerFactory::return_t -IntegerFactory::New(uint32_t value) { - return To(T::NewFromUnsigned(value)); -} - -Factory::return_t -Factory::New(int32_t value) { - return To(v8::Uint32::NewFromUnsigned(value)); -} - -Factory::return_t -Factory::New(uint32_t value) { - return To(v8::Uint32::NewFromUnsigned(value)); -} - - -//=== Object =================================================================== - -Factory::return_t -Factory::New() { - return v8::Object::New(); -} - -//=== Object Template ========================================================== - -Factory::return_t -Factory::New() { - return v8::ObjectTemplate::New(); -} - -//=== RegExp =================================================================== - -Factory::return_t -Factory::New( - v8::Local pattern - , v8::RegExp::Flags flags) { - return v8::RegExp::New(pattern, flags); -} - -//=== Script =================================================================== - -Factory::return_t -Factory::New( v8::Local source) { - return v8::Script::New(source); -} -Factory::return_t -Factory::New( v8::Local source - , v8::ScriptOrigin const& origin) { - return v8::Script::New(source, const_cast(&origin)); -} - -//=== Signature ================================================================ - -Factory::return_t -Factory::New(Factory::FTH receiver) { - return v8::Signature::New(receiver); -} - -//=== String =================================================================== - -Factory::return_t -Factory::New() { - return v8::String::Empty(); -} - -Factory::return_t -Factory::New(const char * value, int length) { - return v8::String::New(value, length); -} - -Factory::return_t -Factory::New( - std::string const& value) /* NOLINT(build/include_what_you_use) */ { - assert(value.size() <= INT_MAX && "string too long"); - return v8::String::New(value.data(), static_cast(value.size())); -} - -Factory::return_t -Factory::New(const uint16_t * value, int length) { - return v8::String::New(value, length); -} - -Factory::return_t -Factory::New(v8::String::ExternalStringResource * value) { - return v8::String::NewExternal(value); -} - -Factory::return_t -Factory::New(v8::String::ExternalAsciiStringResource * value) { - return v8::String::NewExternal(value); -} - -//=== String Object ============================================================ - -Factory::return_t -Factory::New(v8::Local value) { - return v8::StringObject::New(value).As(); -} - -} // end of namespace imp - -//=== Presistents and Handles ================================================== - -template -inline v8::Local New(v8::Handle h) { - return v8::Local::New(h); -} - -template -inline v8::Local New(v8::Persistent const& p) { - return v8::Local::New(p); -} - -template -inline v8::Local New(Persistent const& p) { - return v8::Local::New(p.persistent); -} - -template -inline v8::Local New(Global const& p) { - return v8::Local::New(p.persistent); -} - -#endif // NAN_IMPLEMENTATION_PRE_12_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_json.h b/truebit-implementation/node_modules/nan/nan_json.h deleted file mode 100644 index 33ac8ba6..00000000 --- a/truebit-implementation/node_modules/nan/nan_json.h +++ /dev/null @@ -1,166 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_JSON_H_ -#define NAN_JSON_H_ - -#if NODE_MODULE_VERSION < NODE_0_12_MODULE_VERSION -#define NAN_JSON_H_NEED_PARSE 1 -#else -#define NAN_JSON_H_NEED_PARSE 0 -#endif // NODE_MODULE_VERSION < NODE_0_12_MODULE_VERSION - -#if NODE_MODULE_VERSION >= NODE_7_0_MODULE_VERSION -#define NAN_JSON_H_NEED_STRINGIFY 0 -#else -#define NAN_JSON_H_NEED_STRINGIFY 1 -#endif // NODE_MODULE_VERSION >= NODE_7_0_MODULE_VERSION - -class JSON { - public: - JSON() { -#if NAN_JSON_H_NEED_PARSE + NAN_JSON_H_NEED_STRINGIFY - Nan::HandleScope scope; - - Nan::MaybeLocal maybe_global_json = Nan::Get( - Nan::GetCurrentContext()->Global(), - Nan::New("JSON").ToLocalChecked() - ); - - assert(!maybe_global_json.IsEmpty() && "global JSON is empty"); - v8::Local val_global_json = maybe_global_json.ToLocalChecked(); - - assert(val_global_json->IsObject() && "global JSON is not an object"); - Nan::MaybeLocal maybe_obj_global_json = - Nan::To(val_global_json); - - assert(!maybe_obj_global_json.IsEmpty() && "global JSON object is empty"); - v8::Local global_json = maybe_obj_global_json.ToLocalChecked(); - -#if NAN_JSON_H_NEED_PARSE - Nan::MaybeLocal maybe_parse_method = Nan::Get( - global_json, Nan::New("parse").ToLocalChecked() - ); - - assert(!maybe_parse_method.IsEmpty() && "JSON.parse is empty"); - v8::Local parse_method = maybe_parse_method.ToLocalChecked(); - - assert(parse_method->IsFunction() && "JSON.parse is not a function"); - parse_cb_.Reset(parse_method.As()); -#endif // NAN_JSON_H_NEED_PARSE - -#if NAN_JSON_H_NEED_STRINGIFY - Nan::MaybeLocal maybe_stringify_method = Nan::Get( - global_json, Nan::New("stringify").ToLocalChecked() - ); - - assert(!maybe_stringify_method.IsEmpty() && "JSON.stringify is empty"); - v8::Local stringify_method = - maybe_stringify_method.ToLocalChecked(); - - assert( - stringify_method->IsFunction() && "JSON.stringify is not a function" - ); - stringify_cb_.Reset(stringify_method.As()); -#endif // NAN_JSON_H_NEED_STRINGIFY -#endif // NAN_JSON_H_NEED_PARSE + NAN_JSON_H_NEED_STRINGIFY - } - - inline - Nan::MaybeLocal Parse(v8::Local json_string) { - Nan::EscapableHandleScope scope; -#if NAN_JSON_H_NEED_PARSE - return scope.Escape(parse(json_string)); -#else - Nan::MaybeLocal result; -#if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION && \ - NODE_MODULE_VERSION <= IOJS_2_0_MODULE_VERSION - result = v8::JSON::Parse(json_string); -#else -#if NODE_MODULE_VERSION > NODE_6_0_MODULE_VERSION - v8::Local context_or_isolate = Nan::GetCurrentContext(); -#else - v8::Isolate* context_or_isolate = v8::Isolate::GetCurrent(); -#endif // NODE_MODULE_VERSION > NODE_6_0_MODULE_VERSION - result = v8::JSON::Parse(context_or_isolate, json_string); -#endif // NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION && - // NODE_MODULE_VERSION <= IOJS_2_0_MODULE_VERSION - if (result.IsEmpty()) return v8::Local(); - return scope.Escape(result.ToLocalChecked()); -#endif // NAN_JSON_H_NEED_PARSE - } - - inline - Nan::MaybeLocal Stringify(v8::Local json_object) { - Nan::EscapableHandleScope scope; - Nan::MaybeLocal result = -#if NAN_JSON_H_NEED_STRINGIFY - Nan::To(stringify(json_object)); -#else - v8::JSON::Stringify(Nan::GetCurrentContext(), json_object); -#endif // NAN_JSON_H_NEED_STRINGIFY - if (result.IsEmpty()) return v8::Local(); - return scope.Escape(result.ToLocalChecked()); - } - - inline - Nan::MaybeLocal Stringify(v8::Local json_object, - v8::Local gap) { - Nan::EscapableHandleScope scope; - Nan::MaybeLocal result = -#if NAN_JSON_H_NEED_STRINGIFY - Nan::To(stringify(json_object, gap)); -#else - v8::JSON::Stringify(Nan::GetCurrentContext(), json_object, gap); -#endif // NAN_JSON_H_NEED_STRINGIFY - if (result.IsEmpty()) return v8::Local(); - return scope.Escape(result.ToLocalChecked()); - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(JSON) -#if NAN_JSON_H_NEED_PARSE - Nan::Callback parse_cb_; -#endif // NAN_JSON_H_NEED_PARSE -#if NAN_JSON_H_NEED_STRINGIFY - Nan::Callback stringify_cb_; -#endif // NAN_JSON_H_NEED_STRINGIFY - -#if NAN_JSON_H_NEED_PARSE - inline v8::Local parse(v8::Local arg) { - assert(!parse_cb_.IsEmpty() && "parse_cb_ is empty"); - AsyncResource resource("nan:JSON.parse"); - return parse_cb_.Call(1, &arg, &resource).FromMaybe(v8::Local()); - } -#endif // NAN_JSON_H_NEED_PARSE - -#if NAN_JSON_H_NEED_STRINGIFY - inline v8::Local stringify(v8::Local arg) { - assert(!stringify_cb_.IsEmpty() && "stringify_cb_ is empty"); - AsyncResource resource("nan:JSON.stringify"); - return stringify_cb_.Call(1, &arg, &resource) - .FromMaybe(v8::Local()); - } - - inline v8::Local stringify(v8::Local arg, - v8::Local gap) { - assert(!stringify_cb_.IsEmpty() && "stringify_cb_ is empty"); - - v8::Local argv[] = { - arg, - Nan::Null(), - gap - }; - AsyncResource resource("nan:JSON.stringify"); - return stringify_cb_.Call(3, argv, &resource) - .FromMaybe(v8::Local()); - } -#endif // NAN_JSON_H_NEED_STRINGIFY -}; - -#endif // NAN_JSON_H_ diff --git a/truebit-implementation/node_modules/nan/nan_maybe_43_inl.h b/truebit-implementation/node_modules/nan/nan_maybe_43_inl.h deleted file mode 100644 index 91783da6..00000000 --- a/truebit-implementation/node_modules/nan/nan_maybe_43_inl.h +++ /dev/null @@ -1,369 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_MAYBE_43_INL_H_ -#define NAN_MAYBE_43_INL_H_ - -template -using MaybeLocal = v8::MaybeLocal; - -template -using Maybe = v8::Maybe; - -template -inline Maybe Nothing() { - return v8::Nothing(); -} - -template -inline Maybe Just(const T& t) { - return v8::Just(t); -} - -inline -MaybeLocal ToDetailString(v8::Local val) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(val->ToDetailString(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline -MaybeLocal ToArrayIndex(v8::Local val) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(val->ToArrayIndex(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline -Maybe Equals(v8::Local a, v8::Local(b)) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return a->Equals(isolate->GetCurrentContext(), b); -} - -inline -MaybeLocal NewInstance(v8::Local h) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(h->NewInstance(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline -MaybeLocal NewInstance( - v8::Local h - , int argc - , v8::Local argv[]) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(h->NewInstance(isolate->GetCurrentContext(), argc, argv) - .FromMaybe(v8::Local())); -} - -inline -MaybeLocal NewInstance(v8::Local h) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(h->NewInstance(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - - -inline MaybeLocal GetFunction( - v8::Local t) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(t->GetFunction(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline Maybe Set( - v8::Local obj - , v8::Local key - , v8::Local value) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->Set(isolate->GetCurrentContext(), key, value); -} - -inline Maybe Set( - v8::Local obj - , uint32_t index - , v8::Local value) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->Set(isolate->GetCurrentContext(), index, value); -} - -#if NODE_MODULE_VERSION < NODE_4_0_MODULE_VERSION -#include "nan_define_own_property_helper.h" // NOLINT(build/include) -#endif - -inline Maybe DefineOwnProperty( - v8::Local obj - , v8::Local key - , v8::Local value - , v8::PropertyAttribute attribs = v8::None) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); -#if NODE_MODULE_VERSION >= NODE_4_0_MODULE_VERSION - return obj->DefineOwnProperty(isolate->GetCurrentContext(), key, value, - attribs); -#else - Maybe maybeCurrent = - obj->GetPropertyAttributes(isolate->GetCurrentContext(), key); - if (maybeCurrent.IsNothing()) { - return Nothing(); - } - v8::PropertyAttribute current = maybeCurrent.FromJust(); - return imp::DefineOwnPropertyHelper(current, obj, key, value, attribs); -#endif -} - -NAN_DEPRECATED inline Maybe ForceSet( - v8::Local obj - , v8::Local key - , v8::Local value - , v8::PropertyAttribute attribs = v8::None) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); -#if NODE_MODULE_VERSION >= NODE_9_0_MODULE_VERSION - return key->IsName() - ? obj->DefineOwnProperty(isolate->GetCurrentContext(), - key.As(), value, attribs) - : Nothing(); -#else - return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs); -#endif -} - -inline MaybeLocal Get( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(obj->Get(isolate->GetCurrentContext(), key) - .FromMaybe(v8::Local())); -} - -inline -MaybeLocal Get(v8::Local obj, uint32_t index) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(obj->Get(isolate->GetCurrentContext(), index) - .FromMaybe(v8::Local())); -} - -inline v8::PropertyAttribute GetPropertyAttributes( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->GetPropertyAttributes(isolate->GetCurrentContext(), key) - .FromJust(); -} - -inline Maybe Has( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->Has(isolate->GetCurrentContext(), key); -} - -inline Maybe Has(v8::Local obj, uint32_t index) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->Has(isolate->GetCurrentContext(), index); -} - -inline Maybe Delete( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->Delete(isolate->GetCurrentContext(), key); -} - -inline -Maybe Delete(v8::Local obj, uint32_t index) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->Delete(isolate->GetCurrentContext(), index); -} - -inline -MaybeLocal GetPropertyNames(v8::Local obj) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(obj->GetPropertyNames(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline -MaybeLocal GetOwnPropertyNames(v8::Local obj) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(obj->GetOwnPropertyNames(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline Maybe SetPrototype( - v8::Local obj - , v8::Local prototype) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->SetPrototype(isolate->GetCurrentContext(), prototype); -} - -inline MaybeLocal ObjectProtoToString( - v8::Local obj) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(obj->ObjectProtoToString(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline Maybe HasOwnProperty( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->HasOwnProperty(isolate->GetCurrentContext(), key); -} - -inline Maybe HasRealNamedProperty( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->HasRealNamedProperty(isolate->GetCurrentContext(), key); -} - -inline Maybe HasRealIndexedProperty( - v8::Local obj - , uint32_t index) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->HasRealIndexedProperty(isolate->GetCurrentContext(), index); -} - -inline Maybe HasRealNamedCallbackProperty( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return obj->HasRealNamedCallbackProperty(isolate->GetCurrentContext(), key); -} - -inline MaybeLocal GetRealNamedPropertyInPrototypeChain( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(obj->GetRealNamedPropertyInPrototypeChain( - isolate->GetCurrentContext(), key) - .FromMaybe(v8::Local())); -} - -inline MaybeLocal GetRealNamedProperty( - v8::Local obj - , v8::Local key) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape( - obj->GetRealNamedProperty(isolate->GetCurrentContext(), key) - .FromMaybe(v8::Local())); -} - -inline MaybeLocal CallAsFunction( - v8::Local obj - , v8::Local recv - , int argc - , v8::Local argv[]) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape( - obj->CallAsFunction(isolate->GetCurrentContext(), recv, argc, argv) - .FromMaybe(v8::Local())); -} - -inline MaybeLocal CallAsConstructor( - v8::Local obj - , int argc, v8::Local argv[]) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape( - obj->CallAsConstructor(isolate->GetCurrentContext(), argc, argv) - .FromMaybe(v8::Local())); -} - -inline -MaybeLocal GetSourceLine(v8::Local msg) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(msg->GetSourceLine(isolate->GetCurrentContext()) - .FromMaybe(v8::Local())); -} - -inline Maybe GetLineNumber(v8::Local msg) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return msg->GetLineNumber(isolate->GetCurrentContext()); -} - -inline Maybe GetStartColumn(v8::Local msg) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return msg->GetStartColumn(isolate->GetCurrentContext()); -} - -inline Maybe GetEndColumn(v8::Local msg) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::HandleScope scope(isolate); - return msg->GetEndColumn(isolate->GetCurrentContext()); -} - -inline MaybeLocal CloneElementAt( - v8::Local array - , uint32_t index) { -#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION) - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::Local context = isolate->GetCurrentContext(); - v8::Local elem; - v8::Local obj; - if (!array->Get(context, index).ToLocal(&elem)) { - return scope.Escape(obj); - } - if (!elem->ToObject(context).ToLocal(&obj)) { - return scope.Escape(v8::Local()); - } - return scope.Escape(obj->Clone()); -#else - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(array->CloneElementAt(isolate->GetCurrentContext(), index) - .FromMaybe(v8::Local())); -#endif -} - -inline MaybeLocal Call( - v8::Local fun - , v8::Local recv - , int argc - , v8::Local argv[]) { - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - return scope.Escape(fun->Call(isolate->GetCurrentContext(), recv, argc, argv) - .FromMaybe(v8::Local())); -} - -#endif // NAN_MAYBE_43_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_maybe_pre_43_inl.h b/truebit-implementation/node_modules/nan/nan_maybe_pre_43_inl.h deleted file mode 100644 index 3847296d..00000000 --- a/truebit-implementation/node_modules/nan/nan_maybe_pre_43_inl.h +++ /dev/null @@ -1,316 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_MAYBE_PRE_43_INL_H_ -#define NAN_MAYBE_PRE_43_INL_H_ - -template -class MaybeLocal { - public: - inline MaybeLocal() : val_(v8::Local()) {} - - template -# if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION - inline - MaybeLocal(v8::Local that) : val_(that) {} // NOLINT(runtime/explicit) -# else - inline - MaybeLocal(v8::Local that) : // NOLINT(runtime/explicit) - val_(*reinterpret_cast*>(&that)) {} -# endif - - inline bool IsEmpty() const { return val_.IsEmpty(); } - - template - inline bool ToLocal(v8::Local *out) const { - *out = val_; - return !IsEmpty(); - } - - inline v8::Local ToLocalChecked() const { -#if defined(V8_ENABLE_CHECKS) - assert(!IsEmpty() && "ToLocalChecked is Empty"); -#endif // V8_ENABLE_CHECKS - return val_; - } - - template - inline v8::Local FromMaybe(v8::Local default_value) const { - return IsEmpty() ? default_value : v8::Local(val_); - } - - private: - v8::Local val_; -}; - -template -class Maybe { - public: - inline bool IsNothing() const { return !has_value_; } - inline bool IsJust() const { return has_value_; } - - inline T FromJust() const { -#if defined(V8_ENABLE_CHECKS) - assert(IsJust() && "FromJust is Nothing"); -#endif // V8_ENABLE_CHECKS - return value_; - } - - inline T FromMaybe(const T& default_value) const { - return has_value_ ? value_ : default_value; - } - - inline bool operator==(const Maybe &other) const { - return (IsJust() == other.IsJust()) && - (!IsJust() || FromJust() == other.FromJust()); - } - - inline bool operator!=(const Maybe &other) const { - return !operator==(other); - } - - private: - Maybe() : has_value_(false) {} - explicit Maybe(const T& t) : has_value_(true), value_(t) {} - bool has_value_; - T value_; - - template - friend Maybe Nothing(); - template - friend Maybe Just(const U& u); -}; - -template -inline Maybe Nothing() { - return Maybe(); -} - -template -inline Maybe Just(const T& t) { - return Maybe(t); -} - -inline -MaybeLocal ToDetailString(v8::Handle val) { - return MaybeLocal(val->ToDetailString()); -} - -inline -MaybeLocal ToArrayIndex(v8::Handle val) { - return MaybeLocal(val->ToArrayIndex()); -} - -inline -Maybe Equals(v8::Handle a, v8::Handle(b)) { - return Just(a->Equals(b)); -} - -inline -MaybeLocal NewInstance(v8::Handle h) { - return MaybeLocal(h->NewInstance()); -} - -inline -MaybeLocal NewInstance( - v8::Local h - , int argc - , v8::Local argv[]) { - return MaybeLocal(h->NewInstance(argc, argv)); -} - -inline -MaybeLocal NewInstance(v8::Handle h) { - return MaybeLocal(h->NewInstance()); -} - -inline -MaybeLocal GetFunction(v8::Handle t) { - return MaybeLocal(t->GetFunction()); -} - -inline Maybe Set( - v8::Handle obj - , v8::Handle key - , v8::Handle value) { - return Just(obj->Set(key, value)); -} - -inline Maybe Set( - v8::Handle obj - , uint32_t index - , v8::Handle value) { - return Just(obj->Set(index, value)); -} - -#include "nan_define_own_property_helper.h" // NOLINT(build/include) - -inline Maybe DefineOwnProperty( - v8::Handle obj - , v8::Handle key - , v8::Handle value - , v8::PropertyAttribute attribs = v8::None) { - v8::PropertyAttribute current = obj->GetPropertyAttributes(key); - return imp::DefineOwnPropertyHelper(current, obj, key, value, attribs); -} - -NAN_DEPRECATED inline Maybe ForceSet( - v8::Handle obj - , v8::Handle key - , v8::Handle value - , v8::PropertyAttribute attribs = v8::None) { - return Just(obj->ForceSet(key, value, attribs)); -} - -inline MaybeLocal Get( - v8::Handle obj - , v8::Handle key) { - return MaybeLocal(obj->Get(key)); -} - -inline MaybeLocal Get( - v8::Handle obj - , uint32_t index) { - return MaybeLocal(obj->Get(index)); -} - -inline Maybe GetPropertyAttributes( - v8::Handle obj - , v8::Handle key) { - return Just(obj->GetPropertyAttributes(key)); -} - -inline Maybe Has( - v8::Handle obj - , v8::Handle key) { - return Just(obj->Has(key)); -} - -inline Maybe Has( - v8::Handle obj - , uint32_t index) { - return Just(obj->Has(index)); -} - -inline Maybe Delete( - v8::Handle obj - , v8::Handle key) { - return Just(obj->Delete(key)); -} - -inline Maybe Delete( - v8::Handle obj - , uint32_t index) { - return Just(obj->Delete(index)); -} - -inline -MaybeLocal GetPropertyNames(v8::Handle obj) { - return MaybeLocal(obj->GetPropertyNames()); -} - -inline -MaybeLocal GetOwnPropertyNames(v8::Handle obj) { - return MaybeLocal(obj->GetOwnPropertyNames()); -} - -inline Maybe SetPrototype( - v8::Handle obj - , v8::Handle prototype) { - return Just(obj->SetPrototype(prototype)); -} - -inline MaybeLocal ObjectProtoToString( - v8::Handle obj) { - return MaybeLocal(obj->ObjectProtoToString()); -} - -inline Maybe HasOwnProperty( - v8::Handle obj - , v8::Handle key) { - return Just(obj->HasOwnProperty(key)); -} - -inline Maybe HasRealNamedProperty( - v8::Handle obj - , v8::Handle key) { - return Just(obj->HasRealNamedProperty(key)); -} - -inline Maybe HasRealIndexedProperty( - v8::Handle obj - , uint32_t index) { - return Just(obj->HasRealIndexedProperty(index)); -} - -inline Maybe HasRealNamedCallbackProperty( - v8::Handle obj - , v8::Handle key) { - return Just(obj->HasRealNamedCallbackProperty(key)); -} - -inline MaybeLocal GetRealNamedPropertyInPrototypeChain( - v8::Handle obj - , v8::Handle key) { - return MaybeLocal( - obj->GetRealNamedPropertyInPrototypeChain(key)); -} - -inline MaybeLocal GetRealNamedProperty( - v8::Handle obj - , v8::Handle key) { - return MaybeLocal(obj->GetRealNamedProperty(key)); -} - -inline MaybeLocal CallAsFunction( - v8::Handle obj - , v8::Handle recv - , int argc - , v8::Handle argv[]) { - return MaybeLocal(obj->CallAsFunction(recv, argc, argv)); -} - -inline MaybeLocal CallAsConstructor( - v8::Handle obj - , int argc - , v8::Local argv[]) { - return MaybeLocal(obj->CallAsConstructor(argc, argv)); -} - -inline -MaybeLocal GetSourceLine(v8::Handle msg) { - return MaybeLocal(msg->GetSourceLine()); -} - -inline Maybe GetLineNumber(v8::Handle msg) { - return Just(msg->GetLineNumber()); -} - -inline Maybe GetStartColumn(v8::Handle msg) { - return Just(msg->GetStartColumn()); -} - -inline Maybe GetEndColumn(v8::Handle msg) { - return Just(msg->GetEndColumn()); -} - -inline MaybeLocal CloneElementAt( - v8::Handle array - , uint32_t index) { - return MaybeLocal(array->CloneElementAt(index)); -} - -inline MaybeLocal Call( - v8::Local fun - , v8::Local recv - , int argc - , v8::Local argv[]) { - return MaybeLocal(fun->Call(recv, argc, argv)); -} - -#endif // NAN_MAYBE_PRE_43_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_new.h b/truebit-implementation/node_modules/nan/nan_new.h deleted file mode 100644 index cdf8bbe4..00000000 --- a/truebit-implementation/node_modules/nan/nan_new.h +++ /dev/null @@ -1,340 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_NEW_H_ -#define NAN_NEW_H_ - -namespace imp { // scnr - -// TODO(agnat): Generalize -template v8::Local To(v8::Local i); - -template <> -inline -v8::Local -To(v8::Local i) { - return Nan::To(i).ToLocalChecked(); -} - -template <> -inline -v8::Local -To(v8::Local i) { - return Nan::To(i).ToLocalChecked(); -} - -template <> -inline -v8::Local -To(v8::Local i) { - return Nan::To(i).ToLocalChecked(); -} - -template struct FactoryBase { - typedef v8::Local return_t; -}; - -template struct MaybeFactoryBase { - typedef MaybeLocal return_t; -}; - -template struct Factory; - -template <> -struct Factory : FactoryBase { - static inline return_t New(); - static inline return_t New(int length); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(bool value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(bool value); -}; - -template <> -struct Factory : FactoryBase { - static inline - return_t - New( v8::ExtensionConfiguration* extensions = NULL - , v8::Local tmpl = v8::Local() - , v8::Local obj = v8::Local()); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New(double value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(void *value); -}; - -template <> -struct Factory : FactoryBase { - static inline - return_t - New( FunctionCallback callback - , v8::Local data = v8::Local()); -}; - -template <> -struct Factory : FactoryBase { - static inline - return_t - New( FunctionCallback callback = NULL - , v8::Local data = v8::Local() - , v8::Local signature = v8::Local()); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(double value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(double value); -}; - -template -struct IntegerFactory : FactoryBase { - typedef typename FactoryBase::return_t return_t; - static inline return_t New(int32_t value); - static inline return_t New(uint32_t value); -}; - -template <> -struct Factory : IntegerFactory {}; - -template <> -struct Factory : IntegerFactory {}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(int32_t value); - static inline return_t New(uint32_t value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New( - v8::Local pattern, v8::RegExp::Flags flags); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New( v8::Local source); - static inline return_t New( v8::Local source - , v8::ScriptOrigin const& origin); -}; - -template <> -struct Factory : FactoryBase { - typedef v8::Local FTH; - static inline return_t New(FTH receiver = FTH()); -}; - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New(); - static inline return_t New(const char *value, int length = -1); - static inline return_t New(const uint16_t *value, int length = -1); - static inline return_t New(std::string const& value); - - static inline return_t New(v8::String::ExternalStringResource * value); - static inline return_t New(ExternalOneByteStringResource * value); -}; - -template <> -struct Factory : FactoryBase { - static inline return_t New(v8::Local value); -}; - -} // end of namespace imp - -#if (NODE_MODULE_VERSION >= 12) - -namespace imp { - -template <> -struct Factory : MaybeFactoryBase { - static inline return_t New( v8::Local source); - static inline return_t New( v8::Local source - , v8::ScriptOrigin const& origin); -}; - -} // end of namespace imp - -# include "nan_implementation_12_inl.h" - -#else // NODE_MODULE_VERSION >= 12 - -# include "nan_implementation_pre_12_inl.h" - -#endif - -//=== API ====================================================================== - -template -typename imp::Factory::return_t -New() { - return imp::Factory::New(); -} - -template -typename imp::Factory::return_t -New(A0 arg0) { - return imp::Factory::New(arg0); -} - -template -typename imp::Factory::return_t -New(A0 arg0, A1 arg1) { - return imp::Factory::New(arg0, arg1); -} - -template -typename imp::Factory::return_t -New(A0 arg0, A1 arg1, A2 arg2) { - return imp::Factory::New(arg0, arg1, arg2); -} - -template -typename imp::Factory::return_t -New(A0 arg0, A1 arg1, A2 arg2, A3 arg3) { - return imp::Factory::New(arg0, arg1, arg2, arg3); -} - -// Note(agnat): When passing overloaded function pointers to template functions -// as generic arguments the compiler needs help in picking the right overload. -// These two functions handle New and New with -// all argument variations. - -// v8::Function and v8::FunctionTemplate with one or two arguments -template -typename imp::Factory::return_t -New( FunctionCallback callback - , v8::Local data = v8::Local()) { - return imp::Factory::New(callback, data); -} - -// v8::Function and v8::FunctionTemplate with three arguments -template -typename imp::Factory::return_t -New( FunctionCallback callback - , v8::Local data = v8::Local() - , A2 a2 = A2()) { - return imp::Factory::New(callback, data, a2); -} - -// Convenience - -#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION -template inline v8::Local New(v8::Handle h); -#endif - -#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -template - inline v8::Local New(v8::Persistent const& p); -#else -template inline v8::Local New(v8::Persistent const& p); -#endif -template -inline v8::Local New(Persistent const& p); -template -inline v8::Local New(Global const& p); - -inline -imp::Factory::return_t -New(bool value) { - return New(value); -} - -inline -imp::Factory::return_t -New(int32_t value) { - return New(value); -} - -inline -imp::Factory::return_t -New(uint32_t value) { - return New(value); -} - -inline -imp::Factory::return_t -New(double value) { - return New(value); -} - -inline -imp::Factory::return_t -New(std::string const& value) { // NOLINT(build/include_what_you_use) - return New(value); -} - -inline -imp::Factory::return_t -New(const char * value, int length) { - return New(value, length); -} - -inline -imp::Factory::return_t -New(const uint16_t * value, int length) { - return New(value, length); -} - -inline -imp::Factory::return_t -New(const char * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(const uint16_t * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(v8::String::ExternalStringResource * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(ExternalOneByteStringResource * value) { - return New(value); -} - -inline -imp::Factory::return_t -New(v8::Local pattern, v8::RegExp::Flags flags) { - return New(pattern, flags); -} - -#endif // NAN_NEW_H_ diff --git a/truebit-implementation/node_modules/nan/nan_object_wrap.h b/truebit-implementation/node_modules/nan/nan_object_wrap.h deleted file mode 100644 index a4d96178..00000000 --- a/truebit-implementation/node_modules/nan/nan_object_wrap.h +++ /dev/null @@ -1,155 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_OBJECT_WRAP_H_ -#define NAN_OBJECT_WRAP_H_ - -class ObjectWrap { - public: - ObjectWrap() { - refs_ = 0; - } - - - virtual ~ObjectWrap() { - if (persistent().IsEmpty()) { - return; - } - - assert(persistent().IsNearDeath()); - persistent().ClearWeak(); - persistent().Reset(); - } - - - template - static inline T* Unwrap(v8::Local object) { - assert(!object.IsEmpty()); - assert(object->InternalFieldCount() > 0); - // Cast to ObjectWrap before casting to T. A direct cast from void - // to T won't work right when T has more than one base class. - void* ptr = GetInternalFieldPointer(object, 0); - ObjectWrap* wrap = static_cast(ptr); - return static_cast(wrap); - } - - - inline v8::Local handle() const { - return New(handle_); - } - - - inline Persistent& persistent() { - return handle_; - } - - - protected: - inline void Wrap(v8::Local object) { - assert(persistent().IsEmpty()); - assert(object->InternalFieldCount() > 0); - SetInternalFieldPointer(object, 0, this); - persistent().Reset(object); - MakeWeak(); - } - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - - inline void MakeWeak() { - persistent().v8::PersistentBase::SetWeak( - this, WeakCallback, v8::WeakCallbackType::kParameter); - persistent().MarkIndependent(); - } - -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - - inline void MakeWeak() { - persistent().v8::PersistentBase::SetWeak(this, WeakCallback); - persistent().MarkIndependent(); - } - -#else - - inline void MakeWeak() { - persistent().persistent.MakeWeak(this, WeakCallback); - persistent().MarkIndependent(); - } - -#endif - - /* Ref() marks the object as being attached to an event loop. - * Refed objects will not be garbage collected, even if - * all references are lost. - */ - virtual void Ref() { - assert(!persistent().IsEmpty()); - persistent().ClearWeak(); - refs_++; - } - - /* Unref() marks an object as detached from the event loop. This is its - * default state. When an object with a "weak" reference changes from - * attached to detached state it will be freed. Be careful not to access - * the object after making this call as it might be gone! - * (A "weak reference" means an object that only has a - * persistant handle.) - * - * DO NOT CALL THIS FROM DESTRUCTOR - */ - virtual void Unref() { - assert(!persistent().IsEmpty()); - assert(!persistent().IsWeak()); - assert(refs_ > 0); - if (--refs_ == 0) - MakeWeak(); - } - - int refs_; // ro - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(ObjectWrap) -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - - static void - WeakCallback(v8::WeakCallbackInfo const& info) { - ObjectWrap* wrap = info.GetParameter(); - assert(wrap->refs_ == 0); - assert(wrap->handle_.IsNearDeath()); - wrap->handle_.Reset(); - delete wrap; - } - -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - - static void - WeakCallback(v8::WeakCallbackData const& data) { - ObjectWrap* wrap = data.GetParameter(); - assert(wrap->refs_ == 0); - assert(wrap->handle_.IsNearDeath()); - wrap->handle_.Reset(); - delete wrap; - } - -#else - - static void WeakCallback(v8::Persistent value, void *data) { - ObjectWrap *wrap = static_cast(data); - assert(wrap->refs_ == 0); - assert(wrap->handle_.IsNearDeath()); - wrap->handle_.Reset(); - delete wrap; - } - -#endif - Persistent handle_; -}; - - -#endif // NAN_OBJECT_WRAP_H_ diff --git a/truebit-implementation/node_modules/nan/nan_persistent_12_inl.h b/truebit-implementation/node_modules/nan/nan_persistent_12_inl.h deleted file mode 100644 index d9649e86..00000000 --- a/truebit-implementation/node_modules/nan/nan_persistent_12_inl.h +++ /dev/null @@ -1,132 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_PERSISTENT_12_INL_H_ -#define NAN_PERSISTENT_12_INL_H_ - -template class Persistent : - public v8::Persistent { - public: - inline Persistent() : v8::Persistent() {} - - template inline Persistent(v8::Local that) : - v8::Persistent(v8::Isolate::GetCurrent(), that) {} - - template - inline - Persistent(const v8::Persistent &that) : // NOLINT(runtime/explicit) - v8::Persistent(v8::Isolate::GetCurrent(), that) {} - - inline void Reset() { v8::PersistentBase::Reset(); } - - template - inline void Reset(const v8::Local &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void Reset(const v8::PersistentBase &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type); - - private: - inline T *operator*() const { return *PersistentBase::persistent; } - - template - inline void Copy(const Persistent &that) { - TYPE_CHECK(T, S); - - this->Reset(); - - if (!that.IsEmpty()) { - this->Reset(that); - M::Copy(that, this); - } - } -}; - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -template -class Global : public v8::Global { - public: - inline Global() : v8::Global() {} - - template inline Global(v8::Local that) : - v8::Global(v8::Isolate::GetCurrent(), that) {} - - template - inline - Global(const v8::PersistentBase &that) : // NOLINT(runtime/explicit) - v8::Global(v8::Isolate::GetCurrent(), that) {} - - inline void Reset() { v8::PersistentBase::Reset(); } - - template - inline void Reset(const v8::Local &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void Reset(const v8::PersistentBase &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type) { - reinterpret_cast*>(this)->SetWeak( - parameter, callback, type); - } -}; -#else -template -class Global : public v8::UniquePersistent { - public: - inline Global() : v8::UniquePersistent() {} - - template inline Global(v8::Local that) : - v8::UniquePersistent(v8::Isolate::GetCurrent(), that) {} - - template - inline - Global(const v8::PersistentBase &that) : // NOLINT(runtime/explicit) - v8::UniquePersistent(v8::Isolate::GetCurrent(), that) {} - - inline void Reset() { v8::PersistentBase::Reset(); } - - template - inline void Reset(const v8::Local &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void Reset(const v8::PersistentBase &other) { - v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type) { - reinterpret_cast*>(this)->SetWeak( - parameter, callback, type); - } -}; -#endif - -#endif // NAN_PERSISTENT_12_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_persistent_pre_12_inl.h b/truebit-implementation/node_modules/nan/nan_persistent_pre_12_inl.h deleted file mode 100644 index 4c9c59da..00000000 --- a/truebit-implementation/node_modules/nan/nan_persistent_pre_12_inl.h +++ /dev/null @@ -1,242 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_PERSISTENT_PRE_12_INL_H_ -#define NAN_PERSISTENT_PRE_12_INL_H_ - -template -class PersistentBase { - v8::Persistent persistent; - template - friend v8::Local New(const PersistentBase &p); - template - friend v8::Local New(const Persistent &p); - template - friend v8::Local New(const Global &p); - template friend class ReturnValue; - - public: - inline PersistentBase() : - persistent() {} - - inline void Reset() { - persistent.Dispose(); - persistent.Clear(); - } - - template - inline void Reset(const v8::Local &other) { - TYPE_CHECK(T, S); - - if (!persistent.IsEmpty()) { - persistent.Dispose(); - } - - if (other.IsEmpty()) { - persistent.Clear(); - } else { - persistent = v8::Persistent::New(other); - } - } - - template - inline void Reset(const PersistentBase &other) { - TYPE_CHECK(T, S); - - if (!persistent.IsEmpty()) { - persistent.Dispose(); - } - - if (other.IsEmpty()) { - persistent.Clear(); - } else { - persistent = v8::Persistent::New(other.persistent); - } - } - - inline bool IsEmpty() const { return persistent.IsEmpty(); } - - inline void Empty() { persistent.Clear(); } - - template - inline bool operator==(const PersistentBase &that) const { - return this->persistent == that.persistent; - } - - template - inline bool operator==(const v8::Local &that) const { - return this->persistent == that; - } - - template - inline bool operator!=(const PersistentBase &that) const { - return !operator==(that); - } - - template - inline bool operator!=(const v8::Local &that) const { - return !operator==(that); - } - - template - inline void SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type); - - inline void ClearWeak() { persistent.ClearWeak(); } - - inline void MarkIndependent() { persistent.MarkIndependent(); } - - inline bool IsIndependent() const { return persistent.IsIndependent(); } - - inline bool IsNearDeath() const { return persistent.IsNearDeath(); } - - inline bool IsWeak() const { return persistent.IsWeak(); } - - private: - inline explicit PersistentBase(v8::Persistent that) : - persistent(that) { } - inline explicit PersistentBase(T *val) : persistent(val) {} - template friend class Persistent; - template friend class Global; - friend class ObjectWrap; -}; - -template -class NonCopyablePersistentTraits { - public: - typedef Persistent > - NonCopyablePersistent; - static const bool kResetInDestructor = false; - template - inline static void Copy(const Persistent &source, - NonCopyablePersistent *dest) { - Uncompilable(); - } - - template inline static void Uncompilable() { - TYPE_CHECK(O, v8::Primitive); - } -}; - -template -struct CopyablePersistentTraits { - typedef Persistent > CopyablePersistent; - static const bool kResetInDestructor = true; - template - static inline void Copy(const Persistent &source, - CopyablePersistent *dest) {} -}; - -template class Persistent : - public PersistentBase { - public: - inline Persistent() {} - - template inline Persistent(v8::Handle that) - : PersistentBase(v8::Persistent::New(that)) { - TYPE_CHECK(T, S); - } - - inline Persistent(const Persistent &that) : PersistentBase() { - Copy(that); - } - - template - inline Persistent(const Persistent &that) : - PersistentBase() { - Copy(that); - } - - inline Persistent &operator=(const Persistent &that) { - Copy(that); - return *this; - } - - template - inline Persistent &operator=(const Persistent &that) { - Copy(that); - return *this; - } - - inline ~Persistent() { - if (M::kResetInDestructor) this->Reset(); - } - - private: - inline T *operator*() const { return *PersistentBase::persistent; } - - template - inline void Copy(const Persistent &that) { - TYPE_CHECK(T, S); - - this->Reset(); - - if (!that.IsEmpty()) { - this->persistent = v8::Persistent::New(that.persistent); - M::Copy(that, this); - } - } -}; - -template -class Global : public PersistentBase { - struct RValue { - inline explicit RValue(Global* obj) : object(obj) {} - Global* object; - }; - - public: - inline Global() : PersistentBase(0) { } - - template - inline Global(v8::Local that) // NOLINT(runtime/explicit) - : PersistentBase(v8::Persistent::New(that)) { - TYPE_CHECK(T, S); - } - - template - inline Global(const PersistentBase &that) // NOLINT(runtime/explicit) - : PersistentBase(that) { - TYPE_CHECK(T, S); - } - /** - * Move constructor. - */ - inline Global(RValue rvalue) // NOLINT(runtime/explicit) - : PersistentBase(rvalue.object->persistent) { - rvalue.object->Reset(); - } - inline ~Global() { this->Reset(); } - /** - * Move via assignment. - */ - template - inline Global &operator=(Global rhs) { - TYPE_CHECK(T, S); - this->Reset(rhs.persistent); - rhs.Reset(); - return *this; - } - /** - * Cast operator for moves. - */ - inline operator RValue() { return RValue(this); } - /** - * Pass allows returning uniques from functions, etc. - */ - Global Pass() { return Global(RValue(this)); } - - private: - Global(Global &); - void operator=(Global &); - template friend class ReturnValue; -}; - -#endif // NAN_PERSISTENT_PRE_12_INL_H_ diff --git a/truebit-implementation/node_modules/nan/nan_private.h b/truebit-implementation/node_modules/nan/nan_private.h deleted file mode 100644 index 15f44cc8..00000000 --- a/truebit-implementation/node_modules/nan/nan_private.h +++ /dev/null @@ -1,73 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_PRIVATE_H_ -#define NAN_PRIVATE_H_ - -inline Maybe -HasPrivate(v8::Local object, v8::Local key) { - HandleScope scope; -#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::Local context = isolate->GetCurrentContext(); - v8::Local private_key = v8::Private::ForApi(isolate, key); - return object->HasPrivate(context, private_key); -#else - return Just(!object->GetHiddenValue(key).IsEmpty()); -#endif -} - -inline MaybeLocal -GetPrivate(v8::Local object, v8::Local key) { -#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::EscapableHandleScope scope(isolate); - v8::Local context = isolate->GetCurrentContext(); - v8::Local private_key = v8::Private::ForApi(isolate, key); - v8::MaybeLocal v = object->GetPrivate(context, private_key); - return scope.Escape(v.ToLocalChecked()); -#else - EscapableHandleScope scope; - v8::Local v = object->GetHiddenValue(key); - if (v.IsEmpty()) { - v = Undefined(); - } - return scope.Escape(v); -#endif -} - -inline Maybe SetPrivate( - v8::Local object, - v8::Local key, - v8::Local value) { -#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION - HandleScope scope; - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::Local context = isolate->GetCurrentContext(); - v8::Local private_key = v8::Private::ForApi(isolate, key); - return object->SetPrivate(context, private_key, value); -#else - return Just(object->SetHiddenValue(key, value)); -#endif -} - -inline Maybe DeletePrivate( - v8::Local object, - v8::Local key) { -#if NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION - HandleScope scope; - v8::Isolate *isolate = v8::Isolate::GetCurrent(); - v8::Local private_key = v8::Private::ForApi(isolate, key); - return object->DeletePrivate(isolate->GetCurrentContext(), private_key); -#else - return Just(object->DeleteHiddenValue(key)); -#endif -} - -#endif // NAN_PRIVATE_H_ - diff --git a/truebit-implementation/node_modules/nan/nan_string_bytes.h b/truebit-implementation/node_modules/nan/nan_string_bytes.h deleted file mode 100644 index a2e6437d..00000000 --- a/truebit-implementation/node_modules/nan/nan_string_bytes.h +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -#ifndef NAN_STRING_BYTES_H_ -#define NAN_STRING_BYTES_H_ - -// Decodes a v8::Local or Buffer to a raw char* - -namespace imp { - -using v8::Local; -using v8::Object; -using v8::String; -using v8::Value; - - -//// Base 64 //// - -#define base64_encoded_size(size) ((size + 2 - ((size + 2) % 3)) / 3 * 4) - - - -//// HEX //// - -static bool contains_non_ascii_slow(const char* buf, size_t len) { - for (size_t i = 0; i < len; ++i) { - if (buf[i] & 0x80) return true; - } - return false; -} - - -static bool contains_non_ascii(const char* src, size_t len) { - if (len < 16) { - return contains_non_ascii_slow(src, len); - } - - const unsigned bytes_per_word = sizeof(void*); - const unsigned align_mask = bytes_per_word - 1; - const unsigned unaligned = reinterpret_cast(src) & align_mask; - - if (unaligned > 0) { - const unsigned n = bytes_per_word - unaligned; - if (contains_non_ascii_slow(src, n)) return true; - src += n; - len -= n; - } - - -#if defined(__x86_64__) || defined(_WIN64) - const uintptr_t mask = 0x8080808080808080ll; -#else - const uintptr_t mask = 0x80808080l; -#endif - - const uintptr_t* srcw = reinterpret_cast(src); - - for (size_t i = 0, n = len / bytes_per_word; i < n; ++i) { - if (srcw[i] & mask) return true; - } - - const unsigned remainder = len & align_mask; - if (remainder > 0) { - const size_t offset = len - remainder; - if (contains_non_ascii_slow(src + offset, remainder)) return true; - } - - return false; -} - - -static void force_ascii_slow(const char* src, char* dst, size_t len) { - for (size_t i = 0; i < len; ++i) { - dst[i] = src[i] & 0x7f; - } -} - - -static void force_ascii(const char* src, char* dst, size_t len) { - if (len < 16) { - force_ascii_slow(src, dst, len); - return; - } - - const unsigned bytes_per_word = sizeof(void*); - const unsigned align_mask = bytes_per_word - 1; - const unsigned src_unalign = reinterpret_cast(src) & align_mask; - const unsigned dst_unalign = reinterpret_cast(dst) & align_mask; - - if (src_unalign > 0) { - if (src_unalign == dst_unalign) { - const unsigned unalign = bytes_per_word - src_unalign; - force_ascii_slow(src, dst, unalign); - src += unalign; - dst += unalign; - len -= src_unalign; - } else { - force_ascii_slow(src, dst, len); - return; - } - } - -#if defined(__x86_64__) || defined(_WIN64) - const uintptr_t mask = ~0x8080808080808080ll; -#else - const uintptr_t mask = ~0x80808080l; -#endif - - const uintptr_t* srcw = reinterpret_cast(src); - uintptr_t* dstw = reinterpret_cast(dst); - - for (size_t i = 0, n = len / bytes_per_word; i < n; ++i) { - dstw[i] = srcw[i] & mask; - } - - const unsigned remainder = len & align_mask; - if (remainder > 0) { - const size_t offset = len - remainder; - force_ascii_slow(src + offset, dst + offset, remainder); - } -} - - -static size_t base64_encode(const char* src, - size_t slen, - char* dst, - size_t dlen) { - // We know how much we'll write, just make sure that there's space. - assert(dlen >= base64_encoded_size(slen) && - "not enough space provided for base64 encode"); - - dlen = base64_encoded_size(slen); - - unsigned a; - unsigned b; - unsigned c; - unsigned i; - unsigned k; - unsigned n; - - static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - - i = 0; - k = 0; - n = slen / 3 * 3; - - while (i < n) { - a = src[i + 0] & 0xff; - b = src[i + 1] & 0xff; - c = src[i + 2] & 0xff; - - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; - dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)]; - dst[k + 3] = table[c & 0x3f]; - - i += 3; - k += 4; - } - - if (n != slen) { - switch (slen - n) { - case 1: - a = src[i + 0] & 0xff; - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[(a & 3) << 4]; - dst[k + 2] = '='; - dst[k + 3] = '='; - break; - - case 2: - a = src[i + 0] & 0xff; - b = src[i + 1] & 0xff; - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; - dst[k + 2] = table[(b & 0x0f) << 2]; - dst[k + 3] = '='; - break; - } - } - - return dlen; -} - - -static size_t hex_encode(const char* src, size_t slen, char* dst, size_t dlen) { - // We know how much we'll write, just make sure that there's space. - assert(dlen >= slen * 2 && - "not enough space provided for hex encode"); - - dlen = slen * 2; - for (uint32_t i = 0, k = 0; k < dlen; i += 1, k += 2) { - static const char hex[] = "0123456789abcdef"; - uint8_t val = static_cast(src[i]); - dst[k + 0] = hex[val >> 4]; - dst[k + 1] = hex[val & 15]; - } - - return dlen; -} - - - -static Local Encode(const char* buf, - size_t buflen, - enum Encoding encoding) { - assert(buflen <= node::Buffer::kMaxLength); - if (!buflen && encoding != BUFFER) - return New("").ToLocalChecked(); - - Local val; - switch (encoding) { - case BUFFER: - return CopyBuffer(buf, buflen).ToLocalChecked(); - - case ASCII: - if (contains_non_ascii(buf, buflen)) { - char* out = new char[buflen]; - force_ascii(buf, out, buflen); - val = New(out, buflen).ToLocalChecked(); - delete[] out; - } else { - val = New(buf, buflen).ToLocalChecked(); - } - break; - - case UTF8: - val = New(buf, buflen).ToLocalChecked(); - break; - - case BINARY: { - // TODO(isaacs) use ExternalTwoByteString? - const unsigned char *cbuf = reinterpret_cast(buf); - uint16_t * twobytebuf = new uint16_t[buflen]; - for (size_t i = 0; i < buflen; i++) { - // XXX is the following line platform independent? - twobytebuf[i] = cbuf[i]; - } - val = New(twobytebuf, buflen).ToLocalChecked(); - delete[] twobytebuf; - break; - } - - case BASE64: { - size_t dlen = base64_encoded_size(buflen); - char* dst = new char[dlen]; - - size_t written = base64_encode(buf, buflen, dst, dlen); - assert(written == dlen); - - val = New(dst, dlen).ToLocalChecked(); - delete[] dst; - break; - } - - case UCS2: { - const uint16_t* data = reinterpret_cast(buf); - val = New(data, buflen / 2).ToLocalChecked(); - break; - } - - case HEX: { - size_t dlen = buflen * 2; - char* dst = new char[dlen]; - size_t written = hex_encode(buf, buflen, dst, dlen); - assert(written == dlen); - - val = New(dst, dlen).ToLocalChecked(); - delete[] dst; - break; - } - - default: - assert(0 && "unknown encoding"); - break; - } - - return val; -} - -#undef base64_encoded_size - -} // end of namespace imp - -#endif // NAN_STRING_BYTES_H_ diff --git a/truebit-implementation/node_modules/nan/nan_typedarray_contents.h b/truebit-implementation/node_modules/nan/nan_typedarray_contents.h deleted file mode 100644 index d28ae323..00000000 --- a/truebit-implementation/node_modules/nan/nan_typedarray_contents.h +++ /dev/null @@ -1,90 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_TYPEDARRAY_CONTENTS_H_ -#define NAN_TYPEDARRAY_CONTENTS_H_ - -template -class TypedArrayContents { - public: - inline explicit TypedArrayContents(v8::Local from) : - length_(0), data_(NULL) { - HandleScope scope; - - size_t length = 0; - void* data = NULL; - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - - if (from->IsArrayBufferView()) { - v8::Local array = - v8::Local::Cast(from); - - const size_t byte_length = array->ByteLength(); - const ptrdiff_t byte_offset = array->ByteOffset(); - v8::Local buffer = array->Buffer(); - - length = byte_length / sizeof(T); - data = static_cast(buffer->GetContents().Data()) + byte_offset; - } - -#else - - if (from->IsObject() && !from->IsNull()) { - v8::Local array = v8::Local::Cast(from); - - MaybeLocal buffer = Get(array, - New("buffer").ToLocalChecked()); - MaybeLocal byte_length = Get(array, - New("byteLength").ToLocalChecked()); - MaybeLocal byte_offset = Get(array, - New("byteOffset").ToLocalChecked()); - - if (!buffer.IsEmpty() && - !byte_length.IsEmpty() && byte_length.ToLocalChecked()->IsUint32() && - !byte_offset.IsEmpty() && byte_offset.ToLocalChecked()->IsUint32()) { - data = array->GetIndexedPropertiesExternalArrayData(); - if(data) { - length = byte_length.ToLocalChecked()->Uint32Value() / sizeof(T); - } - } - } - -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1900 || __cplusplus >= 201103L - assert(reinterpret_cast(data) % alignof (T) == 0); -#elif defined(_MSC_VER) && _MSC_VER >= 1600 || defined(__GNUC__) - assert(reinterpret_cast(data) % __alignof(T) == 0); -#else - assert(reinterpret_cast(data) % sizeof (T) == 0); -#endif - - length_ = length; - data_ = static_cast(data); - } - - inline size_t length() const { return length_; } - inline T* operator*() { return data_; } - inline const T* operator*() const { return data_; } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(TypedArrayContents) - - //Disable heap allocation - void *operator new(size_t size); - void operator delete(void *, size_t) { - abort(); - } - - size_t length_; - T* data_; -}; - -#endif // NAN_TYPEDARRAY_CONTENTS_H_ diff --git a/truebit-implementation/node_modules/nan/nan_weak.h b/truebit-implementation/node_modules/nan/nan_weak.h deleted file mode 100644 index 744ffd6e..00000000 --- a/truebit-implementation/node_modules/nan/nan_weak.h +++ /dev/null @@ -1,432 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -#ifndef NAN_WEAK_H_ -#define NAN_WEAK_H_ - -static const int kInternalFieldsInWeakCallback = 2; -static const int kNoInternalFieldIndex = -1; - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ - v8::WeakCallbackInfo > const& -# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > IOJS_1_1_MODULE_VERSION -# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ - v8::PhantomCallbackData > const& -# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ - v8::PhantomCallbackData > const& -# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ - v8::InternalFieldsCallbackData, void> const& -# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -# define NAN_WEAK_CALLBACK_DATA_TYPE_ \ - v8::WeakCallbackData > const& -# define NAN_WEAK_CALLBACK_SIG_ NAN_WEAK_CALLBACK_DATA_TYPE_ -#else -# define NAN_WEAK_CALLBACK_DATA_TYPE_ void * -# define NAN_WEAK_CALLBACK_SIG_ \ - v8::Persistent, NAN_WEAK_CALLBACK_DATA_TYPE_ -#endif - -template -class WeakCallbackInfo { - public: - typedef void (*Callback)(const WeakCallbackInfo& data); - WeakCallbackInfo( - Persistent *persistent - , Callback callback - , void *parameter - , void *field1 = 0 - , void *field2 = 0) : - callback_(callback), isolate_(0), parameter_(parameter) { - std::memcpy(&persistent_, persistent, sizeof (v8::Persistent)); - internal_fields_[0] = field1; - internal_fields_[1] = field2; - } - inline v8::Isolate *GetIsolate() const { return isolate_; } - inline T *GetParameter() const { return static_cast(parameter_); } - inline void *GetInternalField(int index) const { - assert((index == 0 || index == 1) && "internal field index out of bounds"); - if (index == 0) { - return internal_fields_[0]; - } else { - return internal_fields_[1]; - } - } - - private: - NAN_DISALLOW_ASSIGN_COPY_MOVE(WeakCallbackInfo) - Callback callback_; - v8::Isolate *isolate_; - void *parameter_; - void *internal_fields_[kInternalFieldsInWeakCallback]; - v8::Persistent persistent_; - template friend class Persistent; - template friend class PersistentBase; -#if NODE_MODULE_VERSION <= NODE_0_12_MODULE_VERSION -# if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - template - static void invoke(NAN_WEAK_CALLBACK_SIG_ data); - template - static WeakCallbackInfo *unwrap(NAN_WEAK_CALLBACK_DATA_TYPE_ data); -# else - static void invoke(NAN_WEAK_CALLBACK_SIG_ data); - static WeakCallbackInfo *unwrap(NAN_WEAK_CALLBACK_DATA_TYPE_ data); -# endif -#else -# if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - template - static void invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data); - template - static void invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data); -# else - static void invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data); - static void invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data); -# endif - static WeakCallbackInfo *unwrapparameter( - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data); - static WeakCallbackInfo *unwraptwofield( - NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data); -#endif -}; - - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) - -template -template -void -WeakCallbackInfo::invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrapparameter(data); - if (isFirstPass) { - cbinfo->persistent_.Reset(); - data.SetSecondPassCallback(invokeparameter); - } else { - cbinfo->callback_(*cbinfo); - delete cbinfo; - } -} - -template -template -void -WeakCallbackInfo::invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwraptwofield(data); - if (isFirstPass) { - cbinfo->persistent_.Reset(); - data.SetSecondPassCallback(invoketwofield); - } else { - cbinfo->callback_(*cbinfo); - delete cbinfo; - } -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwrapparameter( - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetParameter()); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwraptwofield( - NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetInternalField(0)); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -#undef NAN_WEAK_PARAMETER_CALLBACK_SIG_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_SIG_ -#undef NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -# elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION - -template -void -WeakCallbackInfo::invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrapparameter(data); - cbinfo->persistent_.Reset(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -void -WeakCallbackInfo::invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwraptwofield(data); - cbinfo->persistent_.Reset(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwrapparameter( - NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetParameter()); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwraptwofield( - NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data.GetInternalField1()); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -#undef NAN_WEAK_PARAMETER_CALLBACK_SIG_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_SIG_ -#undef NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ -#undef NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION - -template -template -void WeakCallbackInfo::invoke(NAN_WEAK_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrap(data); - cbinfo->persistent_.Reset(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -template -WeakCallbackInfo *WeakCallbackInfo::unwrap( - NAN_WEAK_CALLBACK_DATA_TYPE_ data) { - void *parameter = data.GetParameter(); - WeakCallbackInfo *cbinfo = - static_cast*>(parameter); - cbinfo->isolate_ = data.GetIsolate(); - return cbinfo; -} - -#undef NAN_WEAK_CALLBACK_SIG_ -#undef NAN_WEAK_CALLBACK_DATA_TYPE_ -#else - -template -void WeakCallbackInfo::invoke(NAN_WEAK_CALLBACK_SIG_ data) { - WeakCallbackInfo *cbinfo = unwrap(data); - cbinfo->persistent_.Dispose(); - cbinfo->persistent_.Clear(); - cbinfo->callback_(*cbinfo); - delete cbinfo; -} - -template -WeakCallbackInfo *WeakCallbackInfo::unwrap( - NAN_WEAK_CALLBACK_DATA_TYPE_ data) { - WeakCallbackInfo *cbinfo = - static_cast*>(data); - cbinfo->isolate_ = v8::Isolate::GetCurrent(); - return cbinfo; -} - -#undef NAN_WEAK_CALLBACK_SIG_ -#undef NAN_WEAK_CALLBACK_DATA_TYPE_ -#endif - -#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ - (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

*wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetWeak( - wcbd - , WeakCallbackInfo

::template invokeparameter - , type); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - (*self)->SetAlignedPointerInInternalField(0, wcbd); - v8::PersistentBase::SetWeak( - static_cast*>(0) - , WeakCallbackInfo

::template invoketwofield - , type); - } -} -#elif NODE_MODULE_VERSION > IOJS_1_1_MODULE_VERSION -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

*wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetPhantom( - wcbd - , WeakCallbackInfo

::invokeparameter); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - (*self)->SetAlignedPointerInInternalField(0, wcbd); - v8::PersistentBase::SetPhantom( - static_cast*>(0) - , WeakCallbackInfo

::invoketwofield - , 0 - , count > 1 ? 1 : kNoInternalFieldIndex); - } -} -#elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

*wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetPhantom( - wcbd - , WeakCallbackInfo

::invokeparameter); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - (*self)->SetAlignedPointerInInternalField(0, wcbd); - v8::PersistentBase::SetPhantom( - WeakCallbackInfo

::invoketwofield - , 0 - , count > 1 ? 1 : kNoInternalFieldIndex); - } -} -#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION -template -template -inline void Persistent::SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

*wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , parameter); - v8::PersistentBase::SetWeak(wcbd, WeakCallbackInfo

::invoke); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetAlignedPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - v8::PersistentBase::SetWeak(wcbd, WeakCallbackInfo

::invoke); - } -} -#else -template -template -inline void PersistentBase::SetWeak( - P *parameter - , typename WeakCallbackInfo

::Callback callback - , WeakCallbackType type) { - WeakCallbackInfo

*wcbd; - if (type == WeakCallbackType::kParameter) { - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , parameter); - persistent.MakeWeak(wcbd, WeakCallbackInfo

::invoke); - } else { - v8::Local* self = reinterpret_cast*>(this); - assert((*self)->IsObject()); - int count = (*self)->InternalFieldCount(); - void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; - for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { - internal_fields[i] = (*self)->GetPointerFromInternalField(i); - } - wcbd = new WeakCallbackInfo

( - reinterpret_cast*>(this) - , callback - , 0 - , internal_fields[0] - , internal_fields[1]); - persistent.MakeWeak(wcbd, WeakCallbackInfo

::invoke); - } -} -#endif - -#endif // NAN_WEAK_H_ diff --git a/truebit-implementation/node_modules/nan/package.json b/truebit-implementation/node_modules/nan/package.json deleted file mode 100644 index 7ea2f4a8..00000000 --- a/truebit-implementation/node_modules/nan/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_from": "nan@2.10.0", - "_id": "nan@2.10.0", - "_inBundle": false, - "_integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "_location": "/nan", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "nan@2.10.0", - "name": "nan", - "escapedName": "nan", - "rawSpec": "2.10.0", - "saveSpec": null, - "fetchSpec": "2.10.0" - }, - "_requiredBy": [ - "/scrypt", - "/sha3", - "/websocket" - ], - "_resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "_shasum": "96d0cd610ebd58d4b4de9cc0c6828cda99c7548f", - "_spec": "nan@2.10.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/sha3", - "bugs": { - "url": "https://github.com/nodejs/nan/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Rod Vagg", - "email": "r@va.gg", - "url": "https://github.com/rvagg" - }, - { - "name": "Benjamin Byholm", - "email": "bbyholm@abo.fi", - "url": "https://github.com/kkoopa/" - }, - { - "name": "Trevor Norris", - "email": "trev.norris@gmail.com", - "url": "https://github.com/trevnorris" - }, - { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "https://github.com/TooTallNate" - }, - { - "name": "Brett Lawson", - "email": "brett19@gmail.com", - "url": "https://github.com/brett19" - }, - { - "name": "Ben Noordhuis", - "email": "info@bnoordhuis.nl", - "url": "https://github.com/bnoordhuis" - }, - { - "name": "David Siegel", - "email": "david@artcom.de", - "url": "https://github.com/agnat" - }, - { - "name": "Michael Ira Krufky", - "email": "mkrufky@gmail.com", - "url": "https://github.com/mkrufky" - } - ], - "deprecated": false, - "description": "Native Abstractions for Node.js: C++ header for Node 0.8 -> 9 compatibility", - "devDependencies": { - "bindings": "~1.2.1", - "commander": "^2.8.1", - "glob": "^5.0.14", - "node-gyp": "~3.6.2", - "readable-stream": "^2.1.4", - "request": "=2.81.0", - "tap": "~0.7.1", - "xtend": "~4.0.0" - }, - "homepage": "https://github.com/nodejs/nan#readme", - "license": "MIT", - "main": "include_dirs.js", - "name": "nan", - "repository": { - "type": "git", - "url": "git://github.com/nodejs/nan.git" - }, - "scripts": { - "docs": "doc/.build.sh", - "rebuild-tests": "node-gyp rebuild --msvs_version=2015 --directory test", - "test": "tap --gc --stderr test/js/*-test.js" - }, - "version": "2.10.0" -} diff --git a/truebit-implementation/node_modules/nan/tools/1to2.js b/truebit-implementation/node_modules/nan/tools/1to2.js deleted file mode 100755 index 337f8bf2..00000000 --- a/truebit-implementation/node_modules/nan/tools/1to2.js +++ /dev/null @@ -1,412 +0,0 @@ -#!/usr/bin/env node -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2018 NAN contributors - * - * MIT License - ********************************************************************/ - -var commander = require('commander'), - fs = require('fs'), - glob = require('glob'), - groups = [], - total = 0, - warning1 = '/* ERROR: Rewrite using Buffer */\n', - warning2 = '\\/\\* ERROR\\: Rewrite using Buffer \\*\\/\\n', - length, - i; - -fs.readFile(__dirname + '/package.json', 'utf8', function (err, data) { - if (err) { - throw err; - } - - commander - .version(JSON.parse(data).version) - .usage('[options] ') - .parse(process.argv); - - if (!process.argv.slice(2).length) { - commander.outputHelp(); - } -}); - -/* construct strings representing regular expressions - each expression contains a unique group allowing for identification of the match - the index of this key group, relative to the regular expression in question, - is indicated by the first array member */ - -/* simple substistutions, key group is the entire match, 0 */ -groups.push([0, [ - '_NAN_', - 'NODE_SET_METHOD', - 'NODE_SET_PROTOTYPE_METHOD', - 'NanAsciiString', - 'NanEscapeScope', - 'NanReturnValue', - 'NanUcs2String'].join('|')]); - -/* substitutions of parameterless macros, key group is 1 */ -groups.push([1, ['(', [ - 'NanEscapableScope', - 'NanReturnNull', - 'NanReturnUndefined', - 'NanScope'].join('|'), ')\\(\\)'].join('')]); - -/* replace TryCatch with NanTryCatch once, gobbling possible namespace, key group 2 */ -groups.push([2, '(?:(?:v8\\:\\:)?|(Nan)?)(TryCatch)']); - -/* NanNew("string") will likely not fail a ToLocalChecked(), key group 1 */ -groups.push([1, ['(NanNew)', '(\\("[^\\"]*"[^\\)]*\\))(?!\\.ToLocalChecked\\(\\))'].join('')]); - -/* Removed v8 APIs, warn that the code needs rewriting using node::Buffer, key group 2 */ -groups.push([2, ['(', warning2, ')?', '^.*?(', [ - 'GetIndexedPropertiesExternalArrayDataLength', - 'GetIndexedPropertiesExternalArrayData', - 'GetIndexedPropertiesExternalArrayDataType', - 'GetIndexedPropertiesPixelData', - 'GetIndexedPropertiesPixelDataLength', - 'HasIndexedPropertiesInExternalArrayData', - 'HasIndexedPropertiesInPixelData', - 'SetIndexedPropertiesToExternalArrayData', - 'SetIndexedPropertiesToPixelData'].join('|'), ')'].join('')]); - -/* No need for NanScope in V8-exposed methods, key group 2 */ -groups.push([2, ['((', [ - 'NAN_METHOD', - 'NAN_GETTER', - 'NAN_SETTER', - 'NAN_PROPERTY_GETTER', - 'NAN_PROPERTY_SETTER', - 'NAN_PROPERTY_ENUMERATOR', - 'NAN_PROPERTY_DELETER', - 'NAN_PROPERTY_QUERY', - 'NAN_INDEX_GETTER', - 'NAN_INDEX_SETTER', - 'NAN_INDEX_ENUMERATOR', - 'NAN_INDEX_DELETER', - 'NAN_INDEX_QUERY'].join('|'), ')\\([^\\)]*\\)\\s*\\{)\\s*NanScope\\(\\)\\s*;'].join('')]); - -/* v8::Value::ToXXXXXXX returns v8::MaybeLocal, key group 3 */ -groups.push([3, ['([\\s\\(\\)])([^\\s\\(\\)]+)->(', [ - 'Boolean', - 'Number', - 'String', - 'Object', - 'Integer', - 'Uint32', - 'Int32'].join('|'), ')\\('].join('')]); - -/* v8::Value::XXXXXXXValue returns v8::Maybe, key group 3 */ -groups.push([3, ['([\\s\\(\\)])([^\\s\\(\\)]+)->((?:', [ - 'Boolean', - 'Number', - 'Integer', - 'Uint32', - 'Int32'].join('|'), ')Value)\\('].join('')]); - -/* NAN_WEAK_CALLBACK macro was removed, write out callback definition, key group 1 */ -groups.push([1, '(NAN_WEAK_CALLBACK)\\(([^\\s\\)]+)\\)']); - -/* node::ObjectWrap and v8::Persistent have been replaced with Nan implementations, key group 1 */ -groups.push([1, ['(', [ - 'NanDisposePersistent', - 'NanObjectWrapHandle'].join('|'), ')\\s*\\(\\s*([^\\s\\)]+)'].join('')]); - -/* Since NanPersistent there is no need for NanMakeWeakPersistent, key group 1 */ -groups.push([1, '(NanMakeWeakPersistent)\\s*\\(\\s*([^\\s,]+)\\s*,\\s*']); - -/* Many methods of v8::Object and others now return v8::MaybeLocal, key group 3 */ -groups.push([3, ['([\\s])([^\\s]+)->(', [ - 'GetEndColumn', - 'GetFunction', - 'GetLineNumber', - 'NewInstance', - 'GetPropertyNames', - 'GetOwnPropertyNames', - 'GetSourceLine', - 'GetStartColumn', - 'ObjectProtoToString', - 'ToArrayIndex', - 'ToDetailString', - 'CallAsConstructor', - 'CallAsFunction', - 'CloneElementAt', - 'Delete', - 'ForceSet', - 'Get', - 'GetPropertyAttributes', - 'GetRealNamedProperty', - 'GetRealNamedPropertyInPrototypeChain', - 'Has', - 'HasOwnProperty', - 'HasRealIndexedProperty', - 'HasRealNamedCallbackProperty', - 'HasRealNamedProperty', - 'Set', - 'SetAccessor', - 'SetIndexedPropertyHandler', - 'SetNamedPropertyHandler', - 'SetPrototype'].join('|'), ')\\('].join('')]); - -/* You should get an error if any of these fail anyways, - or handle the error better, it is indicated either way, key group 2 */ -groups.push([2, ['NanNew(<(?:v8\\:\\:)?(', ['Date', 'String', 'RegExp'].join('|'), ')>)(\\([^\\)]*\\))(?!\\.ToLocalChecked\\(\\))'].join('')]); - -/* v8::Value::Equals now returns a v8::Maybe, key group 3 */ -groups.push([3, '([\\s\\(\\)])([^\\s\\(\\)]+)->(Equals)\\(([^\\s\\)]+)']); - -/* NanPersistent makes this unnecessary, key group 1 */ -groups.push([1, '(NanAssignPersistent)(?:]+>)?\\(([^,]+),\\s*']); - -/* args has been renamed to info, key group 2 */ -groups.push([2, '(\\W)(args)(\\W)']) - -/* node::ObjectWrap was replaced with NanObjectWrap, key group 2 */ -groups.push([2, '(\\W)(?:node\\:\\:)?(ObjectWrap)(\\W)']); - -/* v8::Persistent was replaced with NanPersistent, key group 2 */ -groups.push([2, '(\\W)(?:v8\\:\\:)?(Persistent)(\\W)']); - -/* counts the number of capturing groups in a well-formed regular expression, - ignoring non-capturing groups and escaped parentheses */ -function groupcount(s) { - var positive = s.match(/\((?!\?)/g), - negative = s.match(/\\\(/g); - return (positive ? positive.length : 0) - (negative ? negative.length : 0); -} - -/* compute the absolute position of each key group in the joined master RegExp */ -for (i = 1, length = groups.length; i < length; i++) { - total += groupcount(groups[i - 1][1]); - groups[i][0] += total; -} - -/* create the master RegExp, whis is the union of all the groups' expressions */ -master = new RegExp(groups.map(function (a) { return a[1]; }).join('|'), 'gm'); - -/* replacement function for String.replace, receives 21 arguments */ -function replace() { - /* simple expressions */ - switch (arguments[groups[0][0]]) { - case '_NAN_': - return 'NAN_'; - case 'NODE_SET_METHOD': - return 'NanSetMethod'; - case 'NODE_SET_PROTOTYPE_METHOD': - return 'NanSetPrototypeMethod'; - case 'NanAsciiString': - return 'NanUtf8String'; - case 'NanEscapeScope': - return 'scope.Escape'; - case 'NanReturnNull': - return 'info.GetReturnValue().SetNull'; - case 'NanReturnValue': - return 'info.GetReturnValue().Set'; - case 'NanUcs2String': - return 'v8::String::Value'; - default: - } - - /* macros without arguments */ - switch (arguments[groups[1][0]]) { - case 'NanEscapableScope': - return 'NanEscapableScope scope' - case 'NanReturnUndefined': - return 'return'; - case 'NanScope': - return 'NanScope scope'; - default: - } - - /* TryCatch, emulate negative backref */ - if (arguments[groups[2][0]] === 'TryCatch') { - return arguments[groups[2][0] - 1] ? arguments[0] : 'NanTryCatch'; - } - - /* NanNew("foo") --> NanNew("foo").ToLocalChecked() */ - if (arguments[groups[3][0]] === 'NanNew') { - return [arguments[0], '.ToLocalChecked()'].join(''); - } - - /* insert warning for removed functions as comment on new line above */ - switch (arguments[groups[4][0]]) { - case 'GetIndexedPropertiesExternalArrayData': - case 'GetIndexedPropertiesExternalArrayDataLength': - case 'GetIndexedPropertiesExternalArrayDataType': - case 'GetIndexedPropertiesPixelData': - case 'GetIndexedPropertiesPixelDataLength': - case 'HasIndexedPropertiesInExternalArrayData': - case 'HasIndexedPropertiesInPixelData': - case 'SetIndexedPropertiesToExternalArrayData': - case 'SetIndexedPropertiesToPixelData': - return arguments[groups[4][0] - 1] ? arguments[0] : [warning1, arguments[0]].join(''); - default: - } - - /* remove unnecessary NanScope() */ - switch (arguments[groups[5][0]]) { - case 'NAN_GETTER': - case 'NAN_METHOD': - case 'NAN_SETTER': - case 'NAN_INDEX_DELETER': - case 'NAN_INDEX_ENUMERATOR': - case 'NAN_INDEX_GETTER': - case 'NAN_INDEX_QUERY': - case 'NAN_INDEX_SETTER': - case 'NAN_PROPERTY_DELETER': - case 'NAN_PROPERTY_ENUMERATOR': - case 'NAN_PROPERTY_GETTER': - case 'NAN_PROPERTY_QUERY': - case 'NAN_PROPERTY_SETTER': - return arguments[groups[5][0] - 1]; - default: - } - - /* Value converstion */ - switch (arguments[groups[6][0]]) { - case 'Boolean': - case 'Int32': - case 'Integer': - case 'Number': - case 'Object': - case 'String': - case 'Uint32': - return [arguments[groups[6][0] - 2], 'NanTo(', arguments[groups[6][0] - 1]].join(''); - default: - } - - /* other value conversion */ - switch (arguments[groups[7][0]]) { - case 'BooleanValue': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - case 'Int32Value': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - case 'IntegerValue': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - case 'Uint32Value': - return [arguments[groups[7][0] - 2], 'NanTo(', arguments[groups[7][0] - 1]].join(''); - default: - } - - /* NAN_WEAK_CALLBACK */ - if (arguments[groups[8][0]] === 'NAN_WEAK_CALLBACK') { - return ['template\nvoid ', - arguments[groups[8][0] + 1], '(const NanWeakCallbackInfo &data)'].join(''); - } - - /* use methods on NAN classes instead */ - switch (arguments[groups[9][0]]) { - case 'NanDisposePersistent': - return [arguments[groups[9][0] + 1], '.Reset('].join(''); - case 'NanObjectWrapHandle': - return [arguments[groups[9][0] + 1], '->handle('].join(''); - default: - } - - /* use method on NanPersistent instead */ - if (arguments[groups[10][0]] === 'NanMakeWeakPersistent') { - return arguments[groups[10][0] + 1] + '.SetWeak('; - } - - /* These return Maybes, the upper ones take no arguments */ - switch (arguments[groups[11][0]]) { - case 'GetEndColumn': - case 'GetFunction': - case 'GetLineNumber': - case 'GetOwnPropertyNames': - case 'GetPropertyNames': - case 'GetSourceLine': - case 'GetStartColumn': - case 'NewInstance': - case 'ObjectProtoToString': - case 'ToArrayIndex': - case 'ToDetailString': - return [arguments[groups[11][0] - 2], 'Nan', arguments[groups[11][0]], '(', arguments[groups[11][0] - 1]].join(''); - case 'CallAsConstructor': - case 'CallAsFunction': - case 'CloneElementAt': - case 'Delete': - case 'ForceSet': - case 'Get': - case 'GetPropertyAttributes': - case 'GetRealNamedProperty': - case 'GetRealNamedPropertyInPrototypeChain': - case 'Has': - case 'HasOwnProperty': - case 'HasRealIndexedProperty': - case 'HasRealNamedCallbackProperty': - case 'HasRealNamedProperty': - case 'Set': - case 'SetAccessor': - case 'SetIndexedPropertyHandler': - case 'SetNamedPropertyHandler': - case 'SetPrototype': - return [arguments[groups[11][0] - 2], 'Nan', arguments[groups[11][0]], '(', arguments[groups[11][0] - 1], ', '].join(''); - default: - } - - /* Automatic ToLocalChecked(), take it or leave it */ - switch (arguments[groups[12][0]]) { - case 'Date': - case 'String': - case 'RegExp': - return ['NanNew', arguments[groups[12][0] - 1], arguments[groups[12][0] + 1], '.ToLocalChecked()'].join(''); - default: - } - - /* NanEquals is now required for uniformity */ - if (arguments[groups[13][0]] === 'Equals') { - return [arguments[groups[13][0] - 1], 'NanEquals(', arguments[groups[13][0] - 1], ', ', arguments[groups[13][0] + 1]].join(''); - } - - /* use method on replacement class instead */ - if (arguments[groups[14][0]] === 'NanAssignPersistent') { - return [arguments[groups[14][0] + 1], '.Reset('].join(''); - } - - /* args --> info */ - if (arguments[groups[15][0]] === 'args') { - return [arguments[groups[15][0] - 1], 'info', arguments[groups[15][0] + 1]].join(''); - } - - /* ObjectWrap --> NanObjectWrap */ - if (arguments[groups[16][0]] === 'ObjectWrap') { - return [arguments[groups[16][0] - 1], 'NanObjectWrap', arguments[groups[16][0] + 1]].join(''); - } - - /* Persistent --> NanPersistent */ - if (arguments[groups[17][0]] === 'Persistent') { - return [arguments[groups[17][0] - 1], 'NanPersistent', arguments[groups[17][0] + 1]].join(''); - } - - /* This should not happen. A switch is probably missing a case if it does. */ - throw 'Unhandled match: ' + arguments[0]; -} - -/* reads a file, runs replacement and writes it back */ -function processFile(file) { - fs.readFile(file, {encoding: 'utf8'}, function (err, data) { - if (err) { - throw err; - } - - /* run replacement twice, might need more runs */ - fs.writeFile(file, data.replace(master, replace).replace(master, replace), function (err) { - if (err) { - throw err; - } - }); - }); -} - -/* process file names from command line and process the identified files */ -for (i = 2, length = process.argv.length; i < length; i++) { - glob(process.argv[i], function (err, matches) { - if (err) { - throw err; - } - matches.forEach(processFile); - }); -} diff --git a/truebit-implementation/node_modules/nan/tools/README.md b/truebit-implementation/node_modules/nan/tools/README.md deleted file mode 100644 index 7f07e4b8..00000000 --- a/truebit-implementation/node_modules/nan/tools/README.md +++ /dev/null @@ -1,14 +0,0 @@ -1to2 naively converts source code files from NAN 1 to NAN 2. There will be erroneous conversions, -false positives and missed opportunities. The input files are rewritten in place. Make sure that -you have backups. You will have to manually review the changes afterwards and do some touchups. - -```sh -$ tools/1to2.js - - Usage: 1to2 [options] - - Options: - - -h, --help output usage information - -V, --version output the version number -``` diff --git a/truebit-implementation/node_modules/nan/tools/package.json b/truebit-implementation/node_modules/nan/tools/package.json deleted file mode 100644 index 2dcdd789..00000000 --- a/truebit-implementation/node_modules/nan/tools/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "1to2", - "version": "1.0.0", - "description": "NAN 1 -> 2 Migration Script", - "main": "1to2.js", - "repository": { - "type": "git", - "url": "git://github.com/nodejs/nan.git" - }, - "contributors": [ - "Benjamin Byholm (https://github.com/kkoopa/)", - "Mathias Küsel (https://github.com/mathiask88/)" - ], - "dependencies": { - "glob": "~5.0.10", - "commander": "~2.8.1" - }, - "license": "MIT" -} diff --git a/truebit-implementation/node_modules/nano-json-stream-parser/LICENSE b/truebit-implementation/node_modules/nano-json-stream-parser/LICENSE deleted file mode 100644 index c6cef825..00000000 --- a/truebit-implementation/node_modules/nano-json-stream-parser/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2017 Victor Hernandes Silva Maia - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/nano-json-stream-parser/README.md b/truebit-implementation/node_modules/nano-json-stream-parser/README.md deleted file mode 100644 index b7cc2dd8..00000000 --- a/truebit-implementation/node_modules/nano-json-stream-parser/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# nano-json-stream-parser - -A complete, pure JavaScript, streamed JSON parser in about `750 bytes` (gzipped). It is similar to [Oboe.js](https://github.com/jimhigson/oboe.js/), a streaming JSON micro-library with a size of `4.8kb` (gzipped). While that alone isn't much, sizes add up quickly when you stack many libs. This lib achieves a 85% size reduction, while still offering the same main functionality. Uses ES6 arrows. - -## Install - - npm i nano-json-stream-parser - -## Usage - -Usage is self explanatory: - -```javascript -const njsp = require("nano-json-stream-parser"); - -// Callback is called when there is a complete JSON -const parse = njsp((json) => console.log(json)); - -parse('[1,2,3,4]'); - -parse('[1,2'); -parse(',3,4]'); - -parse("[::invalid_json_is_ignored::]"); - -parse('{"pos": {"x":'); -parse('1.70, "y": 2.'); -parse('49, "z": 2e3}}'); - -parse('[ "aaaa\\"abcd\\u0123\\\\aa\\/aa" ]') -``` - -Output: - -``` -[ 1, 2, 3, 4 ] -[ 1, 2, 3, 4 ] -{ pos: { x: 1.7, y: 2.49, z: 2000 } } -[ 'aaaa"abcdģ\\aa/aa' ] -``` - -## Disclaimer - -This library has no tests yet and could contain buggy edge-cases. diff --git a/truebit-implementation/node_modules/nano-json-stream-parser/dist/index.js b/truebit-implementation/node_modules/nano-json-stream-parser/dist/index.js deleted file mode 100644 index b3205932..00000000 --- a/truebit-implementation/node_modules/nano-json-stream-parser/dist/index.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports=((R,T,Z,A,B,C,D,E,F,G,H,I,J)=>{ -R={};T=()=>{throw ""};Y=(r,c)=>r.test(c);Z=x=>(typeof x)[0]=="f" -A=c=>$=>$(c||R,c=>Y(/\s/,c)?A("")($):c) -B=c=>$=>$(c||R,c=>Y(/[0-9]/,c)?$(B("")($),s=>[s[0],c+s[1]]):[c,""]) -C=c=>$=>$(c||R,c=>$(c=="-"?["","-"]:[c,""],([c,s])=>$(c||R,c=>$(c=="0"?["","0"]:Y(/[1-9]/,c)?B(c)($):T(),([c,b])=>$(c||R,c=>$(c=="."?$(B("")($),([c,s])=>[c,"."+s]):[c,""],([c,f])=>$(c||R,c=>$(Y(/[eE]/,c)?$($(R,c=>Y(/[+-]/,c)?["","e"+c]:[c,"e"]),([c,es])=>$(B(c)($),([c,s])=>[c,es+s])):[c,""],([c,e])=>[c,Number(s+b+f+e)])))))))) -D=$=>$(R,h=>Y(/[0-9a-fA-F]/,h)?parseInt(h,16):T()) -E=$=>$($(R,c=>c!=="\\"?c:$(R,c=>Y(/[\\"\/bfnrt]/,c)?({b:"\b",f:"\f",n:"\n",r:"\r",t:"\t","\\":"\\","/":"/",'"':''})[c]:Y(/u/,c)?$(D($),a=>$(D($),b=>$(D($),c=>$(D($),d=>String.fromCharCode(a*4096+b*256+c*16+d))))):T())),c=>c=='"'?"":$(E($),s=>(c||'"')+s)) -F=$=>{var a=[],g=c=>$=>$(c||R,c=>c=="]"?a:$(H(c)($),([c,v])=>(a.push(v),$(A(c)($),c=>Y(/[,\]]/,c)?g(c==","?"":c)($):T()))));return g("")($)} -G=$=>{var o={},g=c=>$=>$(c||R,c=>c=="}"?o:$(A(c)($),c=>c!=='"'?T():$(E($),k=>$(A("")($),c=>c!==':'?T():$(H("")($),([c,v])=>(o[k]=v,$(A(c)($),c=>Y(/[,}]/,c)?g(c==","?"":c)($):T())))))));return g("")($)} -H=c=>$=>$(A(c)($),c=>c=="["?$(F($),v=>["",v]):c=="{"?$(G($),v=>["",v]):c=='"'?$(E($),v=>["",v]):c=='t'?$(K("rue")(true)($),v=>["",v]):c=='f'?$(K("alse")(false)($),v=>["",v]):C(c)($)) -I=p=>{var $=(a,b)=>a==R?c=>b(c):Z(a)?c=>$(a(c),b):b(a);return p($)} -J=p=>j=>{var s=I(p),f=k=>{for(var i=0;k[i];++i){try{s=s(k[i])}catch(e){s=I(p),k=""}!Z(s)&&(j(s[1]),s=I(p))}return f};return f} -K=s=>r=>$=>!s?r:$(R,c=>c!==s[0]?T():K(s.slice(1))(r)($)); -return J(H("")) -})() diff --git a/truebit-implementation/node_modules/nano-json-stream-parser/example/a.js b/truebit-implementation/node_modules/nano-json-stream-parser/example/a.js deleted file mode 100644 index b02b92d8..00000000 --- a/truebit-implementation/node_modules/nano-json-stream-parser/example/a.js +++ /dev/null @@ -1,20 +0,0 @@ -const njsp = require("./../dist/index.js"); - -// Callback is called when there is a complete JSON -const parse = njsp((json) => console.log(json)); - -parse('[1,2,3,4]'); - -parse('[1,2'); -parse(',3,4]'); - -parse('[::invalid_json_is_ignored::]'); - -parse('{"pos": {"x":'); -parse('1.70, "y": 2.'); -parse('49, "z": 2e3}}'); - -parse('[ "aaaa\\"abcd\\u0123\\\\aa\\/aa" ]') - -parse('[true,0,false,0') -parse(',false,0,true]'); diff --git a/truebit-implementation/node_modules/nano-json-stream-parser/package.json b/truebit-implementation/node_modules/nano-json-stream-parser/package.json deleted file mode 100644 index 8e940072..00000000 --- a/truebit-implementation/node_modules/nano-json-stream-parser/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_from": "nano-json-stream-parser@^0.1.2", - "_id": "nano-json-stream-parser@0.1.2", - "_inBundle": false, - "_integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=", - "_location": "/nano-json-stream-parser", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "nano-json-stream-parser@^0.1.2", - "name": "nano-json-stream-parser", - "escapedName": "nano-json-stream-parser", - "rawSpec": "^0.1.2", - "saveSpec": null, - "fetchSpec": "^0.1.2" - }, - "_requiredBy": [ - "/eth-lib" - ], - "_resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "_shasum": "0cc8f6d0e2b622b479c40d499c46d64b755c6f5f", - "_spec": "nano-json-stream-parser@^0.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/eth-lib", - "author": { - "name": "Victor Maia" - }, - "bugs": { - "url": "https://github.com/maiavictor/nano-json-stream-parser/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Lightweight, streamed JSON parser in 748 bytes", - "homepage": "https://github.com/maiavictor/nano-json-stream-parser#readme", - "keywords": [ - "json", - "parse" - ], - "license": "MIT", - "main": "dist/index.js", - "name": "nano-json-stream-parser", - "repository": { - "type": "git", - "url": "git+https://github.com/maiavictor/nano-json-stream-parser.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "0.1.2" -} diff --git a/truebit-implementation/node_modules/nano-json-stream-parser/src/index.js b/truebit-implementation/node_modules/nano-json-stream-parser/src/index.js deleted file mode 100644 index 503c566d..00000000 --- a/truebit-implementation/node_modules/nano-json-stream-parser/src/index.js +++ /dev/null @@ -1,136 +0,0 @@ -// NJSP is just a straightforward monadic parser for JSON. - -const Read = {}; - -const error = () => { - throw "NoParse"; -} - -const readNonWhite = c => bind => - bind(c || Read, c => /\s/.test(c) - ? readNonWhite("")(bind) - : c); - -const parseDigits = c => bind => - bind(c || Read, c => /[0-9]/.test(c) - ? bind(parseDigits("")(bind), cs => [cs[0], c + cs[1]]) - : [c, ""]); - -// Well fuck, this is why the do-notation exists -const parseNumber = c => bind => - // Parses sign - bind(c || Read, c => bind(c === "-" - ? ["","-"] - : [c,""], - ([c,sign]) => - // Parses the base digits - bind(c || Read, c => bind(c === "0" - ? ["","0"] - : /[1-9]/.test(c) - ? parseDigits(c)(bind) - : error(), - ([c, base]) => - // Parses the decimal digits - bind(c || Read, c => bind(c === "." - ? bind(parseDigits("")(bind), ([c,ds]) => [c, "." + ds]) - : [c, ""], - ([c, frac]) => - // Parses the exponent - bind(c || Read, c => bind(/[eE]/.test(c) - ? bind(bind(Read, c => /[+-]/.test(c) ? ["", "e" + c] : [c, "e"]), ([c,es]) => - bind(parseDigits(c)(bind), ([c,ds]) => [c, es + ds])) - : [c, ""], - ([c, exp]) => - // Returns the number - [c, Number(sign + base + frac + exp)])))))))); - -const parseHex = bind => - bind(Read, h => - /[0-9a-fA-F]/.test(h) - ? parseInt(h,16) - : error()); - -const parseString = bind => - bind(bind(Read, c => c !== "\\" ? c : - bind(Read, c => - /[\\"\/bfnrt]/.test(c) - ? ({b:"\b",f:"\f",n:"\n",r:"\r",t:"\t","\\":"\\","/":"/",'"':''})[c] - : /u/.test(c) - ? bind(parseHex(bind), a => - bind(parseHex(bind), b => - bind(parseHex(bind), c => - bind(parseHex(bind), d => - String.fromCharCode(a*4096+b*256+c*16+d))))) - : error())), c => - c === '"' ? "" : bind(parseString(bind), s => (c||'"') + s)); - -const parseArray = bind => { - let array = []; - const go = c => bind => - bind(c || Read, c => c === "]" ? array : - bind(parseValue(c)(bind), ([c,value]) => (array.push(value), - bind(readNonWhite(c)(bind), c => /[,\]]/.test(c) - ? go(c === "," ? "" : c)(bind) - : error())))); - return go("")(bind); -} - -const parseObject = bind => { - let object = {}; - const go = c => bind => - bind(c || Read, c => c === "}" ? object : - bind(readNonWhite(c)(bind), c => c !== '"' ? error() : - bind(parseString(bind), key => - bind(readNonWhite("")(bind), c => c !== ':' ? error() : - bind(parseValue("")(bind), ([c,val]) => (object[key] = val, - bind(readNonWhite(c)(bind), c => /[,}]/.test(c) - ? go(c === "," ? "" : c)(bind) - : error()))))))); - return go("")(bind); -} - -const parseExact = str => ret => bind => !str - ? ret : bind(Read, c => c !== str[0] - ? error() - : parseExact(str.slice(1))(ret)(bind)); - -const parseValue = c => bind => - bind(readNonWhite(c)(bind), c => - c === "[" ? bind(parseArray(bind), v => ["",v]) : - c === "{" ? bind(parseObject(bind), v => ["",v]) : - c === '"' ? bind(parseString(bind), v => ["",v]) : - c === 't' ? bind(parseExact("rue")(true)(bind), v => ["",v]) : - c === 'f' ? bind(parseExact("alse")(false)(bind), v => ["",v]) : - parseNumber(c)(bind)); - -const parseStream = parser => { - const bind = (a, b) => - a === Read - ? c => b(c) - : typeof a === "function" - ? c => bind(a(c), b) - : b(a); - return parser(bind); -} - -const parser = parser => getJSON => { - let s = parseStream(parser); - const feed = str => { - for (let i = 0, l = str.length; i < l; ++i) { - try { - s = s(str[i]); - } catch (e) { - s = parseStream(parser); - break; - } - if (typeof s !== "function") { - getJSON(s[1]); - s = parseStream(parser); - } - } - return feed; - } - return feed; -} - -module.exports = parser(parseValue("")); diff --git a/truebit-implementation/node_modules/negotiator/HISTORY.md b/truebit-implementation/node_modules/negotiator/HISTORY.md deleted file mode 100644 index 10b69179..00000000 --- a/truebit-implementation/node_modules/negotiator/HISTORY.md +++ /dev/null @@ -1,98 +0,0 @@ -0.6.1 / 2016-05-02 -================== - - * perf: improve `Accept` parsing speed - * perf: improve `Accept-Charset` parsing speed - * perf: improve `Accept-Encoding` parsing speed - * perf: improve `Accept-Language` parsing speed - -0.6.0 / 2015-09-29 -================== - - * Fix including type extensions in parameters in `Accept` parsing - * Fix parsing `Accept` parameters with quoted equals - * Fix parsing `Accept` parameters with quoted semicolons - * Lazy-load modules from main entry point - * perf: delay type concatenation until needed - * perf: enable strict mode - * perf: hoist regular expressions - * perf: remove closures getting spec properties - * perf: remove a closure from media type parsing - * perf: remove property delete from media type parsing - -0.5.3 / 2015-05-10 -================== - - * Fix media type parameter matching to be case-insensitive - -0.5.2 / 2015-05-06 -================== - - * Fix comparing media types with quoted values - * Fix splitting media types with quoted commas - -0.5.1 / 2015-02-14 -================== - - * Fix preference sorting to be stable for long acceptable lists - -0.5.0 / 2014-12-18 -================== - - * Fix list return order when large accepted list - * Fix missing identity encoding when q=0 exists - * Remove dynamic building of Negotiator class - -0.4.9 / 2014-10-14 -================== - - * Fix error when media type has invalid parameter - -0.4.8 / 2014-09-28 -================== - - * Fix all negotiations to be case-insensitive - * Stable sort preferences of same quality according to client order - * Support Node.js 0.6 - -0.4.7 / 2014-06-24 -================== - - * Handle invalid provided languages - * Handle invalid provided media types - -0.4.6 / 2014-06-11 -================== - - * Order by specificity when quality is the same - -0.4.5 / 2014-05-29 -================== - - * Fix regression in empty header handling - -0.4.4 / 2014-05-29 -================== - - * Fix behaviors when headers are not present - -0.4.3 / 2014-04-16 -================== - - * Handle slashes on media params correctly - -0.4.2 / 2014-02-28 -================== - - * Fix media type sorting - * Handle media types params strictly - -0.4.1 / 2014-01-16 -================== - - * Use most specific matches - -0.4.0 / 2014-01-09 -================== - - * Remove preferred prefix from methods diff --git a/truebit-implementation/node_modules/negotiator/LICENSE b/truebit-implementation/node_modules/negotiator/LICENSE deleted file mode 100644 index ea6b9e2e..00000000 --- a/truebit-implementation/node_modules/negotiator/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2014 Federico Romero -Copyright (c) 2012-2014 Isaac Z. Schlueter -Copyright (c) 2014-2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/negotiator/README.md b/truebit-implementation/node_modules/negotiator/README.md deleted file mode 100644 index 04a67ff7..00000000 --- a/truebit-implementation/node_modules/negotiator/README.md +++ /dev/null @@ -1,203 +0,0 @@ -# negotiator - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -An HTTP content negotiator for Node.js - -## Installation - -```sh -$ npm install negotiator -``` - -## API - -```js -var Negotiator = require('negotiator') -``` - -### Accept Negotiation - -```js -availableMediaTypes = ['text/html', 'text/plain', 'application/json'] - -// The negotiator constructor receives a request object -negotiator = new Negotiator(request) - -// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8' - -negotiator.mediaTypes() -// -> ['text/html', 'image/jpeg', 'application/*'] - -negotiator.mediaTypes(availableMediaTypes) -// -> ['text/html', 'application/json'] - -negotiator.mediaType(availableMediaTypes) -// -> 'text/html' -``` - -You can check a working example at `examples/accept.js`. - -#### Methods - -##### mediaType() - -Returns the most preferred media type from the client. - -##### mediaType(availableMediaType) - -Returns the most preferred media type from a list of available media types. - -##### mediaTypes() - -Returns an array of preferred media types ordered by the client preference. - -##### mediaTypes(availableMediaTypes) - -Returns an array of preferred media types ordered by priority from a list of -available media types. - -### Accept-Language Negotiation - -```js -negotiator = new Negotiator(request) - -availableLanguages = ['en', 'es', 'fr'] - -// Let's say Accept-Language header is 'en;q=0.8, es, pt' - -negotiator.languages() -// -> ['es', 'pt', 'en'] - -negotiator.languages(availableLanguages) -// -> ['es', 'en'] - -language = negotiator.language(availableLanguages) -// -> 'es' -``` - -You can check a working example at `examples/language.js`. - -#### Methods - -##### language() - -Returns the most preferred language from the client. - -##### language(availableLanguages) - -Returns the most preferred language from a list of available languages. - -##### languages() - -Returns an array of preferred languages ordered by the client preference. - -##### languages(availableLanguages) - -Returns an array of preferred languages ordered by priority from a list of -available languages. - -### Accept-Charset Negotiation - -```js -availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] - -negotiator = new Negotiator(request) - -// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' - -negotiator.charsets() -// -> ['utf-8', 'iso-8859-1', 'utf-7'] - -negotiator.charsets(availableCharsets) -// -> ['utf-8', 'iso-8859-1'] - -negotiator.charset(availableCharsets) -// -> 'utf-8' -``` - -You can check a working example at `examples/charset.js`. - -#### Methods - -##### charset() - -Returns the most preferred charset from the client. - -##### charset(availableCharsets) - -Returns the most preferred charset from a list of available charsets. - -##### charsets() - -Returns an array of preferred charsets ordered by the client preference. - -##### charsets(availableCharsets) - -Returns an array of preferred charsets ordered by priority from a list of -available charsets. - -### Accept-Encoding Negotiation - -```js -availableEncodings = ['identity', 'gzip'] - -negotiator = new Negotiator(request) - -// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' - -negotiator.encodings() -// -> ['gzip', 'identity', 'compress'] - -negotiator.encodings(availableEncodings) -// -> ['gzip', 'identity'] - -negotiator.encoding(availableEncodings) -// -> 'gzip' -``` - -You can check a working example at `examples/encoding.js`. - -#### Methods - -##### encoding() - -Returns the most preferred encoding from the client. - -##### encoding(availableEncodings) - -Returns the most preferred encoding from a list of available encodings. - -##### encodings() - -Returns an array of preferred encodings ordered by the client preference. - -##### encodings(availableEncodings) - -Returns an array of preferred encodings ordered by priority from a list of -available encodings. - -## See Also - -The [accepts](https://npmjs.org/package/accepts#readme) module builds on -this module and provides an alternative interface, mime type validation, -and more. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/negotiator.svg -[npm-url]: https://npmjs.org/package/negotiator -[node-version-image]: https://img.shields.io/node/v/negotiator.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/negotiator/master.svg -[travis-url]: https://travis-ci.org/jshttp/negotiator -[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master -[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg -[downloads-url]: https://npmjs.org/package/negotiator diff --git a/truebit-implementation/node_modules/negotiator/index.js b/truebit-implementation/node_modules/negotiator/index.js deleted file mode 100644 index 8d4f6a22..00000000 --- a/truebit-implementation/node_modules/negotiator/index.js +++ /dev/null @@ -1,124 +0,0 @@ -/*! - * negotiator - * Copyright(c) 2012 Federico Romero - * Copyright(c) 2012-2014 Isaac Z. Schlueter - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Cached loaded submodules. - * @private - */ - -var modules = Object.create(null); - -/** - * Module exports. - * @public - */ - -module.exports = Negotiator; -module.exports.Negotiator = Negotiator; - -/** - * Create a Negotiator instance from a request. - * @param {object} request - * @public - */ - -function Negotiator(request) { - if (!(this instanceof Negotiator)) { - return new Negotiator(request); - } - - this.request = request; -} - -Negotiator.prototype.charset = function charset(available) { - var set = this.charsets(available); - return set && set[0]; -}; - -Negotiator.prototype.charsets = function charsets(available) { - var preferredCharsets = loadModule('charset').preferredCharsets; - return preferredCharsets(this.request.headers['accept-charset'], available); -}; - -Negotiator.prototype.encoding = function encoding(available) { - var set = this.encodings(available); - return set && set[0]; -}; - -Negotiator.prototype.encodings = function encodings(available) { - var preferredEncodings = loadModule('encoding').preferredEncodings; - return preferredEncodings(this.request.headers['accept-encoding'], available); -}; - -Negotiator.prototype.language = function language(available) { - var set = this.languages(available); - return set && set[0]; -}; - -Negotiator.prototype.languages = function languages(available) { - var preferredLanguages = loadModule('language').preferredLanguages; - return preferredLanguages(this.request.headers['accept-language'], available); -}; - -Negotiator.prototype.mediaType = function mediaType(available) { - var set = this.mediaTypes(available); - return set && set[0]; -}; - -Negotiator.prototype.mediaTypes = function mediaTypes(available) { - var preferredMediaTypes = loadModule('mediaType').preferredMediaTypes; - return preferredMediaTypes(this.request.headers.accept, available); -}; - -// Backwards compatibility -Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; -Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; -Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; -Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; -Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; -Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; -Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; -Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; - -/** - * Load the given module. - * @private - */ - -function loadModule(moduleName) { - var module = modules[moduleName]; - - if (module !== undefined) { - return module; - } - - // This uses a switch for static require analysis - switch (moduleName) { - case 'charset': - module = require('./lib/charset'); - break; - case 'encoding': - module = require('./lib/encoding'); - break; - case 'language': - module = require('./lib/language'); - break; - case 'mediaType': - module = require('./lib/mediaType'); - break; - default: - throw new Error('Cannot find module \'' + moduleName + '\''); - } - - // Store to prevent invoking require() - modules[moduleName] = module; - - return module; -} diff --git a/truebit-implementation/node_modules/negotiator/lib/charset.js b/truebit-implementation/node_modules/negotiator/lib/charset.js deleted file mode 100644 index ac4217b4..00000000 --- a/truebit-implementation/node_modules/negotiator/lib/charset.js +++ /dev/null @@ -1,169 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredCharsets; -module.exports.preferredCharsets = preferredCharsets; - -/** - * Module variables. - * @private - */ - -var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; - -/** - * Parse the Accept-Charset header. - * @private - */ - -function parseAcceptCharset(accept) { - var accepts = accept.split(','); - - for (var i = 0, j = 0; i < accepts.length; i++) { - var charset = parseCharset(accepts[i].trim(), i); - - if (charset) { - accepts[j++] = charset; - } - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse a charset from the Accept-Charset header. - * @private - */ - -function parseCharset(str, i) { - var match = simpleCharsetRegExp.exec(str); - if (!match) return null; - - var charset = match[1]; - var q = 1; - if (match[2]) { - var params = match[2].split(';') - for (var i = 0; i < params.length; i ++) { - var p = params[i].trim().split('='); - if (p[0] === 'q') { - q = parseFloat(p[1]); - break; - } - } - } - - return { - charset: charset, - q: q, - i: i - }; -} - -/** - * Get the priority of a charset. - * @private - */ - -function getCharsetPriority(charset, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(charset, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the charset. - * @private - */ - -function specify(charset, spec, index) { - var s = 0; - if(spec.charset.toLowerCase() === charset.toLowerCase()){ - s |= 1; - } else if (spec.charset !== '*' ) { - return null - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s - } -} - -/** - * Get the preferred charsets from an Accept-Charset header. - * @public - */ - -function preferredCharsets(accept, provided) { - // RFC 2616 sec 14.2: no header = * - var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || ''); - - if (!provided) { - // sorted list of all charsets - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullCharset); - } - - var priorities = provided.map(function getPriority(type, index) { - return getCharsetPriority(type, accepts, index); - }); - - // sorted list of accepted charsets - return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full charset string. - * @private - */ - -function getFullCharset(spec) { - return spec.charset; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} diff --git a/truebit-implementation/node_modules/negotiator/lib/encoding.js b/truebit-implementation/node_modules/negotiator/lib/encoding.js deleted file mode 100644 index 70ac3de6..00000000 --- a/truebit-implementation/node_modules/negotiator/lib/encoding.js +++ /dev/null @@ -1,184 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredEncodings; -module.exports.preferredEncodings = preferredEncodings; - -/** - * Module variables. - * @private - */ - -var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; - -/** - * Parse the Accept-Encoding header. - * @private - */ - -function parseAcceptEncoding(accept) { - var accepts = accept.split(','); - var hasIdentity = false; - var minQuality = 1; - - for (var i = 0, j = 0; i < accepts.length; i++) { - var encoding = parseEncoding(accepts[i].trim(), i); - - if (encoding) { - accepts[j++] = encoding; - hasIdentity = hasIdentity || specify('identity', encoding); - minQuality = Math.min(minQuality, encoding.q || 1); - } - } - - if (!hasIdentity) { - /* - * If identity doesn't explicitly appear in the accept-encoding header, - * it's added to the list of acceptable encoding with the lowest q - */ - accepts[j++] = { - encoding: 'identity', - q: minQuality, - i: i - }; - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse an encoding from the Accept-Encoding header. - * @private - */ - -function parseEncoding(str, i) { - var match = simpleEncodingRegExp.exec(str); - if (!match) return null; - - var encoding = match[1]; - var q = 1; - if (match[2]) { - var params = match[2].split(';'); - for (var i = 0; i < params.length; i ++) { - var p = params[i].trim().split('='); - if (p[0] === 'q') { - q = parseFloat(p[1]); - break; - } - } - } - - return { - encoding: encoding, - q: q, - i: i - }; -} - -/** - * Get the priority of an encoding. - * @private - */ - -function getEncodingPriority(encoding, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(encoding, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the encoding. - * @private - */ - -function specify(encoding, spec, index) { - var s = 0; - if(spec.encoding.toLowerCase() === encoding.toLowerCase()){ - s |= 1; - } else if (spec.encoding !== '*' ) { - return null - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s - } -}; - -/** - * Get the preferred encodings from an Accept-Encoding header. - * @public - */ - -function preferredEncodings(accept, provided) { - var accepts = parseAcceptEncoding(accept || ''); - - if (!provided) { - // sorted list of all encodings - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullEncoding); - } - - var priorities = provided.map(function getPriority(type, index) { - return getEncodingPriority(type, accepts, index); - }); - - // sorted list of accepted encodings - return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full encoding string. - * @private - */ - -function getFullEncoding(spec) { - return spec.encoding; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} diff --git a/truebit-implementation/node_modules/negotiator/lib/language.js b/truebit-implementation/node_modules/negotiator/lib/language.js deleted file mode 100644 index 1bd2d0e1..00000000 --- a/truebit-implementation/node_modules/negotiator/lib/language.js +++ /dev/null @@ -1,179 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredLanguages; -module.exports.preferredLanguages = preferredLanguages; - -/** - * Module variables. - * @private - */ - -var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; - -/** - * Parse the Accept-Language header. - * @private - */ - -function parseAcceptLanguage(accept) { - var accepts = accept.split(','); - - for (var i = 0, j = 0; i < accepts.length; i++) { - var langauge = parseLanguage(accepts[i].trim(), i); - - if (langauge) { - accepts[j++] = langauge; - } - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse a language from the Accept-Language header. - * @private - */ - -function parseLanguage(str, i) { - var match = simpleLanguageRegExp.exec(str); - if (!match) return null; - - var prefix = match[1], - suffix = match[2], - full = prefix; - - if (suffix) full += "-" + suffix; - - var q = 1; - if (match[3]) { - var params = match[3].split(';') - for (var i = 0; i < params.length; i ++) { - var p = params[i].split('='); - if (p[0] === 'q') q = parseFloat(p[1]); - } - } - - return { - prefix: prefix, - suffix: suffix, - q: q, - i: i, - full: full - }; -} - -/** - * Get the priority of a language. - * @private - */ - -function getLanguagePriority(language, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(language, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the language. - * @private - */ - -function specify(language, spec, index) { - var p = parseLanguage(language) - if (!p) return null; - var s = 0; - if(spec.full.toLowerCase() === p.full.toLowerCase()){ - s |= 4; - } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { - s |= 2; - } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { - s |= 1; - } else if (spec.full !== '*' ) { - return null - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s - } -}; - -/** - * Get the preferred languages from an Accept-Language header. - * @public - */ - -function preferredLanguages(accept, provided) { - // RFC 2616 sec 14.4: no header = * - var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); - - if (!provided) { - // sorted list of all languages - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullLanguage); - } - - var priorities = provided.map(function getPriority(type, index) { - return getLanguagePriority(type, accepts, index); - }); - - // sorted list of accepted languages - return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full language string. - * @private - */ - -function getFullLanguage(spec) { - return spec.full; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} diff --git a/truebit-implementation/node_modules/negotiator/lib/mediaType.js b/truebit-implementation/node_modules/negotiator/lib/mediaType.js deleted file mode 100644 index 67309dd7..00000000 --- a/truebit-implementation/node_modules/negotiator/lib/mediaType.js +++ /dev/null @@ -1,294 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredMediaTypes; -module.exports.preferredMediaTypes = preferredMediaTypes; - -/** - * Module variables. - * @private - */ - -var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; - -/** - * Parse the Accept header. - * @private - */ - -function parseAccept(accept) { - var accepts = splitMediaTypes(accept); - - for (var i = 0, j = 0; i < accepts.length; i++) { - var mediaType = parseMediaType(accepts[i].trim(), i); - - if (mediaType) { - accepts[j++] = mediaType; - } - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse a media type from the Accept header. - * @private - */ - -function parseMediaType(str, i) { - var match = simpleMediaTypeRegExp.exec(str); - if (!match) return null; - - var params = Object.create(null); - var q = 1; - var subtype = match[2]; - var type = match[1]; - - if (match[3]) { - var kvps = splitParameters(match[3]).map(splitKeyValuePair); - - for (var j = 0; j < kvps.length; j++) { - var pair = kvps[j]; - var key = pair[0].toLowerCase(); - var val = pair[1]; - - // get the value, unwrapping quotes - var value = val && val[0] === '"' && val[val.length - 1] === '"' - ? val.substr(1, val.length - 2) - : val; - - if (key === 'q') { - q = parseFloat(value); - break; - } - - // store parameter - params[key] = value; - } - } - - return { - type: type, - subtype: subtype, - params: params, - q: q, - i: i - }; -} - -/** - * Get the priority of a media type. - * @private - */ - -function getMediaTypePriority(type, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(type, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the media type. - * @private - */ - -function specify(type, spec, index) { - var p = parseMediaType(type); - var s = 0; - - if (!p) { - return null; - } - - if(spec.type.toLowerCase() == p.type.toLowerCase()) { - s |= 4 - } else if(spec.type != '*') { - return null; - } - - if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { - s |= 2 - } else if(spec.subtype != '*') { - return null; - } - - var keys = Object.keys(spec.params); - if (keys.length > 0) { - if (keys.every(function (k) { - return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase(); - })) { - s |= 1 - } else { - return null - } - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s, - } -} - -/** - * Get the preferred media types from an Accept header. - * @public - */ - -function preferredMediaTypes(accept, provided) { - // RFC 2616 sec 14.2: no header = */* - var accepts = parseAccept(accept === undefined ? '*/*' : accept || ''); - - if (!provided) { - // sorted list of all types - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullType); - } - - var priorities = provided.map(function getPriority(type, index) { - return getMediaTypePriority(type, accepts, index); - }); - - // sorted list of accepted types - return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full type string. - * @private - */ - -function getFullType(spec) { - return spec.type + '/' + spec.subtype; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} - -/** - * Count the number of quotes in a string. - * @private - */ - -function quoteCount(string) { - var count = 0; - var index = 0; - - while ((index = string.indexOf('"', index)) !== -1) { - count++; - index++; - } - - return count; -} - -/** - * Split a key value pair. - * @private - */ - -function splitKeyValuePair(str) { - var index = str.indexOf('='); - var key; - var val; - - if (index === -1) { - key = str; - } else { - key = str.substr(0, index); - val = str.substr(index + 1); - } - - return [key, val]; -} - -/** - * Split an Accept header into media types. - * @private - */ - -function splitMediaTypes(accept) { - var accepts = accept.split(','); - - for (var i = 1, j = 0; i < accepts.length; i++) { - if (quoteCount(accepts[j]) % 2 == 0) { - accepts[++j] = accepts[i]; - } else { - accepts[j] += ',' + accepts[i]; - } - } - - // trim accepts - accepts.length = j + 1; - - return accepts; -} - -/** - * Split a string of parameters. - * @private - */ - -function splitParameters(str) { - var parameters = str.split(';'); - - for (var i = 1, j = 0; i < parameters.length; i++) { - if (quoteCount(parameters[j]) % 2 == 0) { - parameters[++j] = parameters[i]; - } else { - parameters[j] += ';' + parameters[i]; - } - } - - // trim parameters - parameters.length = j + 1; - - for (var i = 0; i < parameters.length; i++) { - parameters[i] = parameters[i].trim(); - } - - return parameters; -} diff --git a/truebit-implementation/node_modules/negotiator/package.json b/truebit-implementation/node_modules/negotiator/package.json deleted file mode 100644 index fd1a96e3..00000000 --- a/truebit-implementation/node_modules/negotiator/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "negotiator@0.6.1", - "_id": "negotiator@0.6.1", - "_inBundle": false, - "_integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "_location": "/negotiator", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "negotiator@0.6.1", - "name": "negotiator", - "escapedName": "negotiator", - "rawSpec": "0.6.1", - "saveSpec": null, - "fetchSpec": "0.6.1" - }, - "_requiredBy": [ - "/accepts" - ], - "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "_shasum": "2b327184e8992101177b28563fb5e7102acd0ca9", - "_spec": "negotiator@0.6.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/accepts", - "bugs": { - "url": "https://github.com/jshttp/negotiator/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Federico Romero", - "email": "federico.romero@outboxlabs.com" - }, - { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - } - ], - "deprecated": false, - "description": "HTTP content negotiation", - "devDependencies": { - "istanbul": "0.4.3", - "mocha": "~1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "lib/", - "HISTORY.md", - "LICENSE", - "index.js", - "README.md" - ], - "homepage": "https://github.com/jshttp/negotiator#readme", - "keywords": [ - "http", - "content negotiation", - "accept", - "accept-language", - "accept-encoding", - "accept-charset" - ], - "license": "MIT", - "name": "negotiator", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/negotiator.git" - }, - "scripts": { - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "0.6.1" -} diff --git a/truebit-implementation/node_modules/number-to-bn/.editorconfig b/truebit-implementation/node_modules/number-to-bn/.editorconfig deleted file mode 100644 index d4eed840..00000000 --- a/truebit-implementation/node_modules/number-to-bn/.editorconfig +++ /dev/null @@ -1,7 +0,0 @@ -root = true - -[*] -end_of_line = lf -insert_final_newline = false -indent_style = space -indent_size = 2 diff --git a/truebit-implementation/node_modules/number-to-bn/.gitattributes b/truebit-implementation/node_modules/number-to-bn/.gitattributes deleted file mode 100644 index a29125a8..00000000 --- a/truebit-implementation/node_modules/number-to-bn/.gitattributes +++ /dev/null @@ -1,106 +0,0 @@ -# From https://github.com/Danimoth/gitattributes/blob/master/Web.gitattributes - -# Handle line endings automatically for files detected as text -# and leave all files detected as binary untouched. -* text=auto - -# -# The above will handle all files NOT found below -# - -# -## These files are text and should be normalized (Convert crlf => lf) -# - -# source code -*.php text -*.css text -*.sass text -*.scss text -*.less text -*.styl text -*.js text eol=lf -*.coffee text -*.json text -*.htm text -*.html text -*.xml text -*.svg text -*.txt text -*.ini text -*.inc text -*.pl text -*.rb text -*.py text -*.scm text -*.sql text -*.sh text -*.bat text - -# templates -*.ejs text -*.hbt text -*.jade text -*.haml text -*.hbs text -*.dot text -*.tmpl text -*.phtml text - -# server config -.htaccess text - -# git config -.gitattributes text -.gitignore text -.gitconfig text - -# code analysis config -.jshintrc text -.jscsrc text -.jshintignore text -.csslintrc text - -# misc config -*.yaml text -*.yml text -.editorconfig text - -# build config -*.npmignore text -*.bowerrc text - -# Heroku -Procfile text -.slugignore text - -# Documentation -*.md text -LICENSE text -AUTHORS text - - -# -## These files are binary and should be left untouched -# - -# (binary is a macro for -text -diff) -*.png binary -*.jpg binary -*.jpeg binary -*.gif binary -*.ico binary -*.mov binary -*.mp4 binary -*.mp3 binary -*.flv binary -*.fla binary -*.swf binary -*.gz binary -*.zip binary -*.7z binary -*.ttf binary -*.eot binary -*.woff binary -*.pyc binary -*.pdf binary diff --git a/truebit-implementation/node_modules/number-to-bn/.npmignore b/truebit-implementation/node_modules/number-to-bn/.npmignore deleted file mode 100644 index 3260b1f5..00000000 --- a/truebit-implementation/node_modules/number-to-bn/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -# Don't check auto-generated stuff into git -node_modules -coverage -lib - -# Cruft -.DS_Store -npm-debug.log diff --git a/truebit-implementation/node_modules/number-to-bn/.travis.yml b/truebit-implementation/node_modules/number-to-bn/.travis.yml deleted file mode 100644 index baeeccb7..00000000 --- a/truebit-implementation/node_modules/number-to-bn/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -sudo: true -language: node_js -node_js: - - "6" -after_success: npm run coveralls diff --git a/truebit-implementation/node_modules/number-to-bn/.zuul.yml b/truebit-implementation/node_modules/number-to-bn/.zuul.yml deleted file mode 100644 index 24d3fdac..00000000 --- a/truebit-implementation/node_modules/number-to-bn/.zuul.yml +++ /dev/null @@ -1,14 +0,0 @@ -ui: mocha-bdd -browsers: - - name: chrome - version: 39..latest - - name: firefox - version: 34..latest - - name: safari - version: 5..latest - - name: microsoftedge - version: latest - - name: ie - version: 8..latest - - name: android - version: 5.0..latest diff --git a/truebit-implementation/node_modules/number-to-bn/CHANGELOG.md b/truebit-implementation/node_modules/number-to-bn/CHANGELOG.md deleted file mode 100644 index 3e837f34..00000000 --- a/truebit-implementation/node_modules/number-to-bn/CHANGELOG.md +++ /dev/null @@ -1,41 +0,0 @@ -# 1.7.0 -- remove console log - -1. Remove bad console log - -# 1.6.0 -- empty hex to zero - -1. Empty hex 0x -> 0 - -# 1.5.0 -- hex number fix - -1. Fixed hex number convetion, now if hex prefixed, always assumes base 16 - -# 1.4.0 -- fix hex number - -1. Fix hex number shim -2. More test cases added - -# 1.3.0 -- better everythign - -1. Better error messages -2. Added umd builds -3. Far more comprehensive testing coverage -4. Far more support for hex string coverage -5. Far more support for number string coverage -6. Less lines of code, more bang for your buck -7. More config - -# 1.2.0 -- decimal number fix - -1. now throws under decimal number - -# 1.1.0 -- es5 support - -1. es5 support - -# 0.0.1 -- number-to-bn - -1. Basic testing -2. Basic docs -3. License -4. basic exports diff --git a/truebit-implementation/node_modules/number-to-bn/LICENSE b/truebit-implementation/node_modules/number-to-bn/LICENSE deleted file mode 100644 index b231a715..00000000 --- a/truebit-implementation/node_modules/number-to-bn/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) 2016 Nick Dodson. nickdodson.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/number-to-bn/README.md b/truebit-implementation/node_modules/number-to-bn/README.md deleted file mode 100644 index d395cee5..00000000 --- a/truebit-implementation/node_modules/number-to-bn/README.md +++ /dev/null @@ -1,116 +0,0 @@ -## number-to-bn - -

- - - Dependency Status - - - - - devDependency Status - - - - - Build Status - - - - - NPM version - - - - Test Coverage - - - - - js-airbnb-style - -
- -
- -A simple method to convert integer or hex integer numbers to BN.js object instances. Does not supprot decimal numbers. - -## Install - -``` -npm install --save number-to-bn -``` - -## Usage - -```js -const numberToBN = require('number-to-bn'); - -console.log(numberToBN('-1')); - -// result -1 - -console.log(numberToBN(1)); - -// result 1 - -console.log(numberToBN(new BN(100))); - -// result 100 - -console.log(numberToBN(new BigNumber(10000))); - -// result 10000 - -console.log(numberToBN('0x0a')); - -// result 10 - -console.log(numberToBN('-0x0a')); - -// result -10 - -console.log(numberToBN('0.9')); // or {}, [], undefined, 9.9 - -// throws new Error(...) - -console.log(numberToBN(null)); // or {}, [], undefined, 9.9 - -// throws new Error(...) -``` - -## Important documents - -- [Changelog](CHANGELOG.md) -- [License](https://raw.githubusercontent.com/silentcicero/number-to-bn/master/LICENSE) - -## Licence - -This project is licensed under the MIT license, Copyright (c) 2016 Nick Dodson. For more information see LICENSE.md. - -``` -The MIT License - -Copyright (c) 2016 Nick Dodson. nickdodson.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. -``` diff --git a/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.js b/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.js deleted file mode 100644 index b30b6e73..00000000 --- a/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.js +++ /dev/null @@ -1,5668 +0,0 @@ - /* eslint-disable */ - /* eslint-disable */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define("numberToBN", [], factory); - else if(typeof exports === 'object') - exports["numberToBN"] = factory(); - else - root["numberToBN"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.l = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // identity function for calling harmory imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; - -/******/ // define getter function for harmory exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ }; - -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 10); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(Buffer, global) {/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = __webpack_require__(2) -var ieee754 = __webpack_require__(4) -var isArray = __webpack_require__(6) - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Due to various browser bugs, sometimes the Object implementation will be used even - * when the browser supports typed arrays. - * - * Note: - * - * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. - - * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they - * get the Object implementation, which is slower but behaves correctly. - */ -Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined - ? global.TYPED_ARRAY_SUPPORT - : typedArraySupport() - -/* - * Export kMaxLength after typed array support is determined. - */ -exports.kMaxLength = kMaxLength() - -function typedArraySupport () { - try { - var arr = new Uint8Array(1) - arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} - return arr.foo() === 42 && // typed array instances can be augmented - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -} - -function kMaxLength () { - return Buffer.TYPED_ARRAY_SUPPORT - ? 0x7fffffff - : 0x3fffffff -} - -function createBuffer (that, length) { - if (kMaxLength() < length) { - throw new RangeError('Invalid typed array length') - } - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = new Uint8Array(length) - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - if (that === null) { - that = new Buffer(length) - } - that.length = length - } - - return that -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { - return new Buffer(arg, encodingOrOffset, length) - } - - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new Error( - 'If encoding is specified then the first argument must be a string' - ) - } - return allocUnsafe(this, arg) - } - return from(this, arg, encodingOrOffset, length) -} - -Buffer.poolSize = 8192 // not used by this implementation - -// TODO: Legacy, not needed anymore. Remove in next major version. -Buffer._augment = function (arr) { - arr.__proto__ = Buffer.prototype - return arr -} - -function from (that, value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number') - } - - if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { - return fromArrayBuffer(that, value, encodingOrOffset, length) - } - - if (typeof value === 'string') { - return fromString(that, value, encodingOrOffset) - } - - return fromObject(that, value) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(null, value, encodingOrOffset, length) -} - -if (Buffer.TYPED_ARRAY_SUPPORT) { - Buffer.prototype.__proto__ = Uint8Array.prototype - Buffer.__proto__ = Uint8Array - if (typeof Symbol !== 'undefined' && Symbol.species && - Buffer[Symbol.species] === Buffer) { - // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true - }) - } -} - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') - } else if (size < 0) { - throw new RangeError('"size" argument must not be negative') - } -} - -function alloc (that, size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(that, size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(that, size).fill(fill, encoding) - : createBuffer(that, size).fill(fill) - } - return createBuffer(that, size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(null, size, fill, encoding) -} - -function allocUnsafe (that, size) { - assertSize(size) - that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < size; ++i) { - that[i] = 0 - } - } - return that -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(null, size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(null, size) -} - -function fromString (that, string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding') - } - - var length = byteLength(string, encoding) | 0 - that = createBuffer(that, length) - - var actual = that.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - that = that.slice(0, actual) - } - - return that -} - -function fromArrayLike (that, array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - that = createBuffer(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -function fromArrayBuffer (that, array, byteOffset, length) { - array.byteLength // this throws if `array` is not a valid ArrayBuffer - - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('\'offset\' is out of bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('\'length\' is out of bounds') - } - - if (byteOffset === undefined && length === undefined) { - array = new Uint8Array(array) - } else if (length === undefined) { - array = new Uint8Array(array, byteOffset) - } else { - array = new Uint8Array(array, byteOffset, length) - } - - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = array - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - that = fromArrayLike(that, array) - } - return that -} - -function fromObject (that, obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - that = createBuffer(that, len) - - if (that.length === 0) { - return that - } - - obj.copy(that, 0, 0, len) - return that - } - - if (obj) { - if ((typeof ArrayBuffer !== 'undefined' && - obj.buffer instanceof ArrayBuffer) || 'length' in obj) { - if (typeof obj.length !== 'number' || isnan(obj.length)) { - return createBuffer(that, 0) - } - return fromArrayLike(that, obj) - } - - if (obj.type === 'Buffer' && isArray(obj.data)) { - return fromArrayLike(that, obj.data) - } - } - - throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') -} - -function checked (length) { - // Note: cannot use `length < kMaxLength()` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= kMaxLength()) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + kMaxLength().toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return !!(b != null && b._isBuffer) -} - -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && - (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { - return string.byteLength - } - if (typeof string !== 'string') { - string = '' + string - } - - var len = string.length - if (len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - case undefined: - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect -// Buffer instances. -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - var length = this.length | 0 - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } - return '' -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (!Buffer.isBuffer(target)) { - throw new TypeError('Argument must be a Buffer') - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) - - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (isNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (Buffer.TYPED_ARRAY_SUPPORT && - typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (isNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset | 0 - if (isFinite(length)) { - length = length | 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - // legacy write(string, encoding, offset, length) - remove in v0.13 - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf - if (Buffer.TYPED_ARRAY_SUPPORT) { - newBuf = this.subarray(start, end) - newBuf.__proto__ = Buffer.prototype - } else { - var sliceLen = end - start - newBuf = new Buffer(sliceLen, undefined) - for (var i = 0; i < sliceLen; ++i) { - newBuf[i] = this[i + start] - } - } - - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - this[offset] = (value & 0xff) - return offset + 1 -} - -function objectWriteUInt16 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { - buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -function objectWriteUInt32 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffffffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { - buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { - // ascending copy from start - for (i = 0; i < len; ++i) { - target[i + targetStart] = this[i + start] - } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, start + len), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if (code < 256) { - val = code - } - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - var bytes = Buffer.isBuffer(val) - ? val - : utf8ToBytes(new Buffer(val, encoding).toString()) - var len = bytes.length - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -function isnan (val) { - return val !== val // eslint-disable-line no-self-compare -} - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0).Buffer, __webpack_require__(8))) - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - -var BN = __webpack_require__(3); -var stripHexPrefix = __webpack_require__(7); - -/** - * Returns a BN object, converts a number value to a BN - * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object - * @return {Object} `output` BN object of the number - * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number - */ -module.exports = function numberToBN(arg) { - if (typeof arg === 'string' || typeof arg === 'number') { - var multiplier = new BN(1); // eslint-disable-line - var formattedString = String(arg).toLowerCase().trim(); - var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x'; - var stringArg = stripHexPrefix(formattedString); // eslint-disable-line - if (stringArg.substr(0, 1) === '-') { - stringArg = stripHexPrefix(stringArg.slice(1)); - multiplier = new BN(-1, 10); - } - stringArg = stringArg === '' ? '0' : stringArg; - - if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/)) - || stringArg.match(/^[a-fA-F]+$/) - || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) { - return new BN(stringArg, 16).mul(multiplier); - } - - if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) { - return new BN(stringArg, 10).mul(multiplier); - } - } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) { - if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) { - return new BN(arg.toString(10), 10); - } - } - - throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.'); -} - - -/***/ }, -/* 2 */ -/***/ function(module, exports) { - -"use strict"; -'use strict' - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function placeHoldersCount (b64) { - var len = b64.length - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 -} - -function byteLength (b64) { - // base64 is 4/3 + up to two characters of the original data - return b64.length * 3 / 4 - placeHoldersCount(b64) -} - -function toByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - var len = b64.length - placeHolders = placeHoldersCount(b64) - - arr = new Arr(len * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? len - 4 : len - - var L = 0 - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] - arr[L++] = (tmp >> 16) & 0xFF - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - if (placeHolders === 2) { - tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[L++] = tmp & 0xFF - } else if (placeHolders === 1) { - tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var output = '' - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - output += lookup[tmp >> 2] - output += lookup[(tmp << 4) & 0x3F] - output += '==' - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) - output += lookup[tmp >> 10] - output += lookup[(tmp >> 4) & 0x3F] - output += lookup[(tmp << 2) & 0x3F] - output += '=' - } - - parts.push(output) - - return parts.join('') -} - - -/***/ }, -/* 3 */ -/***/ function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module) {(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = __webpack_require__(0).Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9)(module))) - -/***/ }, -/* 4 */ -/***/ function(module, exports) { - -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - - -/***/ }, -/* 5 */ -/***/ function(module, exports) { - -/** - * Returns a `Boolean` on whether or not the a `String` starts with '0x' - * @param {String} str the string input value - * @return {Boolean} a boolean if it is or is not hex prefixed - * @throws if the str input is not a string - */ -module.exports = function isHexPrefixed(str) { - if (typeof str !== 'string') { - throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed."); - } - - return str.slice(0, 2) === '0x'; -} - - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; - - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - -var isHexPrefixed = __webpack_require__(5); - -/** - * Removes '0x' from a given `String` is present - * @param {String} str the string value - * @return {String|Optional} a string by pass if necessary - */ -module.exports = function stripHexPrefix(str) { - if (typeof str !== 'string') { - return str; - } - - return isHexPrefixed(str) ? str.slice(2) : str; -} - - -/***/ }, -/* 8 */ -/***/ function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { return this; })(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }, -/* 9 */ -/***/ function(module, exports) { - -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - configurable: false, - get: function() { return module.l; } - }); - Object.defineProperty(module, "id", { - enumerable: true, - configurable: false, - get: function() { return module.i; } - }); - module.webpackPolyfill = 1; - } - return module; -} - - -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(1); - - -/***/ } -/******/ ]) -}); -; -//# sourceMappingURL=number-to-bn.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.js.map b/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.js.map deleted file mode 100644 index 0d305405..00000000 --- a/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"number-to-bn.js","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 4175ac55832dfeb121ef","webpack:///./~/buffer/index.js","webpack:///./src/index.js","webpack:///./~/base64-js/index.js","webpack:///./~/bn.js/lib/bn.js","webpack:///./~/ieee754/index.js","webpack:///./~/is-hex-prefixed/src/index.js","webpack:///./~/isarray/index.js","webpack:///./~/strip-hex-prefix/src/index.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/module.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"numberToBN\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"numberToBN\"] = factory();\n\telse\n\t\troot[\"numberToBN\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmory imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmory exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tObject.defineProperty(exports, name, {\n \t\t\tconfigurable: false,\n \t\t\tenumerable: true,\n \t\t\tget: getter\n \t\t});\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 10);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4175ac55832dfeb121ef","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/buffer/index.js\n// module id = 0\n// module chunks = 0","var BN = require('bn.js');\nvar stripHexPrefix = require('strip-hex-prefix');\n\n/**\n * Returns a BN object, converts a number value to a BN\n * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object\n * @return {Object} `output` BN object of the number\n * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number\n */\nmodule.exports = function numberToBN(arg) {\n if (typeof arg === 'string' || typeof arg === 'number') {\n var multiplier = new BN(1); // eslint-disable-line\n var formattedString = String(arg).toLowerCase().trim();\n var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x';\n var stringArg = stripHexPrefix(formattedString); // eslint-disable-line\n if (stringArg.substr(0, 1) === '-') {\n stringArg = stripHexPrefix(stringArg.slice(1));\n multiplier = new BN(-1, 10);\n }\n stringArg = stringArg === '' ? '0' : stringArg;\n\n if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/))\n || stringArg.match(/^[a-fA-F]+$/)\n || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) {\n return new BN(stringArg, 16).mul(multiplier);\n }\n\n if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) {\n return new BN(stringArg, 10).mul(multiplier);\n }\n } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) {\n if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) {\n return new BN(arg.toString(10), 10);\n }\n }\n\n throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/index.js\n// module id = 1\n// module chunks = 0","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return b64.length * 3 / 4 - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/base64-js/index.js\n// module id = 2\n// module chunks = 0","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buf' + 'fer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/bn.js/lib/bn.js\n// module id = 3\n// module chunks = 0","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/ieee754/index.js\n// module id = 4\n// module chunks = 0","/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param {String} str the string input value\n * @return {Boolean} a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nmodule.exports = function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\"[is-hex-prefixed] value must be type 'string', is currently type \" + (typeof str) + \", while checking isHexPrefixed.\");\n }\n\n return str.slice(0, 2) === '0x';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/is-hex-prefixed/src/index.js\n// module id = 5\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/isarray/index.js\n// module id = 6\n// module chunks = 0","var isHexPrefixed = require('is-hex-prefixed');\n\n/**\n * Removes '0x' from a given `String` is present\n * @param {String} str the string value\n * @return {String|Optional} a string by pass if necessary\n */\nmodule.exports = function stripHexPrefix(str) {\n if (typeof str !== 'string') {\n return str;\n }\n\n return isHexPrefixed(str) ? str.slice(2) : str;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/strip-hex-prefix/src/index.js\n// module id = 7\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() { return this; })();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 8\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tconfigurable: false,\r\n\t\t\tget: function() { return module.l; }\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tconfigurable: false,\r\n\t\t\tget: function() { return module.i; }\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 9\n// module chunks = 0"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACp2GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACZA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;","sourceRoot":""} \ No newline at end of file diff --git a/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.min.js b/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.min.js deleted file mode 100644 index 862e8c70..00000000 --- a/truebit-implementation/node_modules/number-to-bn/dist/number-to-bn.min.js +++ /dev/null @@ -1,3 +0,0 @@ -!function(t,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define("numberToBN",[],r):"object"==typeof exports?exports.numberToBN=r():t.numberToBN=r()}(this,function(){return function(t){function r(e){if(i[e])return i[e].exports;var n=i[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}var i={};return r.m=t,r.c=i,r.i=function(t){return t},r.d=function(t,r,i){Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:i})},r.o=function(t,r){return Object.prototype.hasOwnProperty.call(t,r)},r.p="",r(r.s=10)}([function(t,r,i){"use strict";(function(t,e){function n(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(r){return!1}}function o(){return t.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function h(r,i){if(o()t)throw new RangeError('"size" argument must not be negative')}function a(t,r,i,e){return u(r),r>0&&void 0!==i?"string"==typeof e?h(t,r).fill(i,e):h(t,r).fill(i):h(t,r)}function f(r,i){if(u(i),r=h(r,0>i?0:0|c(i)),!t.TYPED_ARRAY_SUPPORT)for(var e=0;i>e;++e)r[e]=0;return r}function l(r,i,e){if("string"==typeof e&&""!==e||(e="utf8"),!t.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var n=0|v(i,e);r=h(r,n);var o=r.write(i,e);return o!==n&&(r=r.slice(0,o)),r}function m(t,r){var i=0>r.length?0:0|c(r.length);t=h(t,i);for(var e=0;i>e;e+=1)t[e]=255&r[e];return t}function p(r,i,e,n){if(0>e||e>i.byteLength)throw new RangeError("'offset' is out of bounds");if(e+(n||0)>i.byteLength)throw new RangeError("'length' is out of bounds");return i=void 0===e&&void 0===n?new Uint8Array(i):void 0===n?new Uint8Array(i,e):new Uint8Array(i,e,n),t.TYPED_ARRAY_SUPPORT?(r=i,r.__proto__=t.prototype):r=m(r,i),r}function d(r,i){if(t.isBuffer(i)){var e=0|c(i.length);return r=h(r,e),0===r.length?r:(i.copy(r,0,0,e),r)}if(i){if("undefined"!=typeof ArrayBuffer&&i.buffer instanceof ArrayBuffer||"length"in i)return"number"!=typeof i.length||X(i.length)?h(r,0):m(r,i);if("Buffer"===i.type&&W(i.data))return m(r,i.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function c(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function g(r){return+r!=r&&(r=0),t.alloc(+r)}function v(r,i){if(t.isBuffer(r))return r.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(r)||r instanceof ArrayBuffer))return r.byteLength;"string"!=typeof r&&(r=""+r);var e=r.length;if(0===e)return 0;for(var n=!1;;)switch(i){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return $(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return J(r).length;default:if(n)return $(r).length;i=(""+i).toLowerCase(),n=!0}}function y(t,r,i){var e=!1;if((void 0===r||0>r)&&(r=0),r>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),0>=i)return"";if(i>>>=0,r>>>=0,r>=i)return"";for(t||(t="utf8");;)switch(t){case"hex":return I(this,r,i);case"utf8":case"utf-8":return T(this,r,i);case"ascii":return k(this,r,i);case"latin1":case"binary":return U(this,r,i);case"base64":return P(this,r,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,r,i);default:if(e)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),e=!0}}function M(t,r,i){var e=t[r];t[r]=t[i],t[i]=e}function w(r,i,e,n,o){if(0===r.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:-2147483648>e&&(e=-2147483648),e=+e,isNaN(e)&&(e=o?0:r.length-1),0>e&&(e=r.length+e),r.length>e){if(0>e){if(!o)return-1;e=0}}else{if(o)return-1;e=r.length-1}if("string"==typeof i&&(i=t.from(i,n)),t.isBuffer(i))return 0===i.length?-1:b(r,i,e,n,o);if("number"==typeof i)return i=255&i,t.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(r,i,e):Uint8Array.prototype.lastIndexOf.call(r,i,e):b(r,[i],e,n,o);throw new TypeError("val must be string, number or Buffer")}function b(t,r,i,e,n){function o(t,r){return 1===h?t[r]:t.readUInt16BE(r*h)}var h=1,s=t.length,u=r.length;if(void 0!==e&&(e=(e+"").toLowerCase(),"ucs2"===e||"ucs-2"===e||"utf16le"===e||"utf-16le"===e)){if(2>t.length||2>r.length)return-1;h=2,s/=2,u/=2,i/=2}var a;if(n){var f=-1;for(a=i;s>a;a++)if(o(t,a)===o(r,f===-1?0:a-f)){if(f===-1&&(f=a),a-f+1===u)return f*h}else f!==-1&&(a-=a-f),f=-1}else for(i+u>s&&(i=s-u),a=i;a>=0;a--){for(var l=!0,m=0;u>m;m++)if(o(t,a+m)!==o(r,m)){l=!1;break}if(l)return a}return-1}function _(t,r,i,e){i=+i||0;var n=t.length-i;e?(e=+e,e>n&&(e=n)):e=n;var o=r.length;if(o%2!==0)throw new TypeError("Invalid hex string");e>o/2&&(e=o/2);for(var h=0;e>h;++h){var s=parseInt(r.substr(2*h,2),16);if(isNaN(s))return h;t[i+h]=s}return h}function A(t,r,i,e){return V($(r,t.length-i),t,i,e)}function E(t,r,i,e){return V(K(r),t,i,e)}function R(t,r,i,e){return E(t,r,i,e)}function B(t,r,i,e){return V(J(r),t,i,e)}function S(t,r,i,e){return V(H(r,t.length-i),t,i,e)}function P(t,r,i){return G.fromByteArray(0===r&&i===t.length?t:t.slice(r,i))}function T(t,r,i){i=Math.min(t.length,i);for(var e=[],n=r;i>n;){var o=t[n],h=null,s=o>239?4:o>223?3:o>191?2:1;if(i>=n+s){var u,a,f,l;switch(s){case 1:128>o&&(h=o);break;case 2:u=t[n+1],128===(192&u)&&(l=(31&o)<<6|63&u,l>127&&(h=l));break;case 3:u=t[n+1],a=t[n+2],128===(192&u)&&128===(192&a)&&(l=(15&o)<<12|(63&u)<<6|63&a,l>2047&&(55296>l||l>57343)&&(h=l));break;case 4:u=t[n+1],a=t[n+2],f=t[n+3],128===(192&u)&&128===(192&a)&&128===(192&f)&&(l=(15&o)<<18|(63&u)<<12|(63&a)<<6|63&f,l>65535&&1114112>l&&(h=l))}}null===h?(h=65533,s=1):h>65535&&(h-=65536,e.push(h>>>10&1023|55296),h=56320|1023&h),e.push(h),n+=s}return x(e)}function x(t){var r=t.length;if(tt>=r)return String.fromCharCode.apply(String,t);for(var i="",e=0;r>e;)i+=String.fromCharCode.apply(String,t.slice(e,e+=tt));return i}function k(t,r,i){var e="";i=Math.min(t.length,i);for(var n=r;i>n;++n)e+=String.fromCharCode(127&t[n]);return e}function U(t,r,i){var e="";i=Math.min(t.length,i);for(var n=r;i>n;++n)e+=String.fromCharCode(t[n]);return e}function I(t,r,i){var e=t.length;r&&r>=0||(r=0),(!i||0>i||i>e)&&(i=e);for(var n="",o=r;i>o;++o)n+=F(t[o]);return n}function L(t,r,i){for(var e=t.slice(r,i),n="",o=0;e.length>o;o+=2)n+=String.fromCharCode(e[o]+256*e[o+1]);return n}function Y(t,r,i){if(t%1!==0||0>t)throw new RangeError("offset is not uint");if(t+r>i)throw new RangeError("Trying to access beyond buffer length")}function O(r,i,e,n,o,h){if(!t.isBuffer(r))throw new TypeError('"buffer" argument must be a Buffer instance');if(i>o||h>i)throw new RangeError('"value" argument is out of bounds');if(e+n>r.length)throw new RangeError("Index out of range")}function N(t,r,i,e){0>r&&(r=65535+r+1);for(var n=0,o=Math.min(t.length-i,2);o>n;++n)t[i+n]=(r&255<<8*(e?n:1-n))>>>8*(e?n:1-n)}function C(t,r,i,e){0>r&&(r=4294967295+r+1);for(var n=0,o=Math.min(t.length-i,4);o>n;++n)t[i+n]=r>>>8*(e?n:3-n)&255}function D(t,r,i,e,n,o){if(i+e>t.length)throw new RangeError("Index out of range");if(0>i)throw new RangeError("Index out of range")}function Z(t,r,i,e,n){return n||D(t,r,i,4,3.4028234663852886e38,-3.4028234663852886e38),Q.write(t,r,i,e,23,4),i+4}function q(t,r,i,e,n){return n||D(t,r,i,8,1.7976931348623157e308,-1.7976931348623157e308),Q.write(t,r,i,e,52,8),i+8}function j(t){if(t=z(t).replace(rt,""),2>t.length)return"";for(;t.length%4!==0;)t+="=";return t}function z(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function F(t){return 16>t?"0"+t.toString(16):t.toString(16)}function $(t,r){r=r||1/0;for(var i,e=t.length,n=null,o=[],h=0;e>h;++h){if(i=t.charCodeAt(h),i>55295&&57344>i){if(!n){if(i>56319){(r-=3)>-1&&o.push(239,191,189);continue}if(h+1===e){(r-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(56320>i){(r-=3)>-1&&o.push(239,191,189),n=i;continue}i=(n-55296<<10|i-56320)+65536}else n&&(r-=3)>-1&&o.push(239,191,189);if(n=null,128>i){if((r-=1)<0)break;o.push(i)}else if(2048>i){if((r-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(65536>i){if((r-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(i>=1114112)throw Error("Invalid code point");if((r-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function K(t){for(var r=[],i=0;t.length>i;++i)r.push(255&t.charCodeAt(i));return r}function H(t,r){for(var i,e,n,o=[],h=0;t.length>h&&(r-=2)>=0;++h)i=t.charCodeAt(h),e=i>>8,n=i%256,o.push(n),o.push(e);return o}function J(t){return G.toByteArray(j(t))}function V(t,r,i,e){for(var n=0;e>n&&(n+io;++o)if(r[o]!==i[o]){e=r[o],n=i[o];break}return n>e?-1:e>n?1:0},t.isEncoding=function(t){switch((t+"").toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},t.concat=function(r,i){if(!W(r))throw new TypeError('"list" argument must be an Array of Buffers');if(0===r.length)return t.alloc(0);var e;if(void 0===i)for(i=0,e=0;r.length>e;++e)i+=r[e].length;var n=t.allocUnsafe(i),o=0;for(e=0;r.length>e;++e){var h=r[e];if(!t.isBuffer(h))throw new TypeError('"list" argument must be an Array of Buffers');h.copy(n,o),o+=h.length}return n},t.byteLength=v,t.prototype._isBuffer=!0,t.prototype.swap16=function(){var t=this.length;if(t%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var r=0;t>r;r+=2)M(this,r,r+1);return this},t.prototype.swap32=function(){var t=this.length;if(t%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var r=0;t>r;r+=4)M(this,r,r+3),M(this,r+1,r+2);return this},t.prototype.swap64=function(){var t=this.length;if(t%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var r=0;t>r;r+=8)M(this,r,r+7),M(this,r+1,r+6),M(this,r+2,r+5),M(this,r+3,r+4);return this},t.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?T(this,0,t):y.apply(this,arguments)},t.prototype.equals=function(r){if(!t.isBuffer(r))throw new TypeError("Argument must be a Buffer");return this===r||0===t.compare(this,r)},t.prototype.inspect=function(){var t="",i=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,i).match(/.{2}/g).join(" "),this.length>i&&(t+=" ... ")),""},t.prototype.compare=function(r,i,e,n,o){if(!t.isBuffer(r))throw new TypeError("Argument must be a Buffer");if(void 0===i&&(i=0),void 0===e&&(e=r?r.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),0>i||e>r.length||0>n||o>this.length)throw new RangeError("out of range index");if(n>=o&&i>=e)return 0;if(n>=o)return-1;if(i>=e)return 1;if(i>>>=0,e>>>=0,n>>>=0,o>>>=0,this===r)return 0;for(var h=o-n,s=e-i,u=Math.min(h,s),a=this.slice(n,o),f=r.slice(i,e),l=0;u>l;++l)if(a[l]!==f[l]){h=a[l],s=f[l];break}return s>h?-1:h>s?1:0},t.prototype.includes=function(t,r,i){return this.indexOf(t,r,i)!==-1},t.prototype.indexOf=function(t,r,i){return w(this,t,r,i,!0)},t.prototype.lastIndexOf=function(t,r,i){return w(this,t,r,i,!1)},t.prototype.write=function(t,r,i,e){if(void 0===r)e="utf8",i=this.length,r=0;else if(void 0===i&&"string"==typeof r)e=r,i=this.length,r=0;else{if(!isFinite(r))throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");r=0|r,isFinite(i)?(i=0|i,void 0===e&&(e="utf8")):(e=i,i=void 0)}var n=this.length-r;if((void 0===i||i>n)&&(i=n),t.length>0&&(0>i||0>r)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");e||(e="utf8");for(var o=!1;;)switch(e){case"hex":return _(this,t,r,i);case"utf8":case"utf-8":return A(this,t,r,i);case"ascii":return E(this,t,r,i);case"latin1":case"binary":return R(this,t,r,i);case"base64":return B(this,t,r,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,t,r,i);default:if(o)throw new TypeError("Unknown encoding: "+e);e=(""+e).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;t.prototype.slice=function(r,i){var e=this.length;r=~~r,i=void 0===i?e:~~i,0>r?(r+=e,0>r&&(r=0)):r>e&&(r=e),0>i?(i+=e,0>i&&(i=0)):i>e&&(i=e),r>i&&(i=r);var n;if(t.TYPED_ARRAY_SUPPORT)n=this.subarray(r,i),n.__proto__=t.prototype;else{var o=i-r;n=new t(o,(void 0));for(var h=0;o>h;++h)n[h]=this[h+r]}return n},t.prototype.readUIntLE=function(t,r,i){t=0|t,r=0|r,i||Y(t,r,this.length);for(var e=this[t],n=1,o=0;++o0&&(n*=256);)e+=this[t+--r]*n;return e},t.prototype.readUInt8=function(t,r){return r||Y(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,r){return r||Y(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,r){return r||Y(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,r){return r||Y(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,r){return r||Y(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,r,i){t=0|t,r=0|r,i||Y(t,r,this.length);for(var e=this[t],n=1,o=0;++oe||(e-=Math.pow(2,8*r)),e},t.prototype.readIntBE=function(t,r,i){t=0|t,r=0|r,i||Y(t,r,this.length);for(var e=r,n=1,o=this[t+--e];e>0&&(n*=256);)o+=this[t+--e]*n;return n*=128,n>o||(o-=Math.pow(2,8*r)),o},t.prototype.readInt8=function(t,r){return r||Y(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,r){r||Y(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},t.prototype.readInt16BE=function(t,r){r||Y(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},t.prototype.readInt32LE=function(t,r){return r||Y(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,r){return r||Y(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,r){return r||Y(t,4,this.length),Q.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,r){return r||Y(t,4,this.length),Q.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,r){return r||Y(t,8,this.length),Q.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,r){return r||Y(t,8,this.length),Q.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,r,i,e){if(t=+t,r=0|r,i=0|i,!e){var n=Math.pow(2,8*i)-1;O(this,t,r,i,n,0)}var o=1,h=0;for(this[r]=255&t;++h=0&&(h*=256);)this[r+o]=t/h&255;return r+i},t.prototype.writeUInt8=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,1,255,0),t.TYPED_ARRAY_SUPPORT||(r=Math.floor(r)),this[i]=255&r,i+1},t.prototype.writeUInt16LE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[i]=255&r,this[i+1]=r>>>8):N(this,r,i,!0),i+2},t.prototype.writeUInt16BE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>8,this[i+1]=255&r):N(this,r,i,!1),i+2},t.prototype.writeUInt32LE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[i+3]=r>>>24,this[i+2]=r>>>16,this[i+1]=r>>>8,this[i]=255&r):C(this,r,i,!0),i+4},t.prototype.writeUInt32BE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r):C(this,r,i,!1),i+4},t.prototype.writeIntLE=function(t,r,i,e){if(t=+t,r=0|r,!e){var n=Math.pow(2,8*i-1);O(this,t,r,i,n-1,-n)}var o=0,h=1,s=0;for(this[r]=255&t;++ot&&0===s&&0!==this[r+o-1]&&(s=1),this[r+o]=(t/h>>0)-s&255;return r+i},t.prototype.writeIntBE=function(t,r,i,e){if(t=+t,r=0|r,!e){var n=Math.pow(2,8*i-1);O(this,t,r,i,n-1,-n)}var o=i-1,h=1,s=0;for(this[r+o]=255&t;--o>=0&&(h*=256);)0>t&&0===s&&0!==this[r+o+1]&&(s=1),this[r+o]=(t/h>>0)-s&255;return r+i},t.prototype.writeInt8=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,1,127,-128),t.TYPED_ARRAY_SUPPORT||(r=Math.floor(r)),0>r&&(r=255+r+1),this[i]=255&r,i+1},t.prototype.writeInt16LE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[i]=255&r,this[i+1]=r>>>8):N(this,r,i,!0),i+2},t.prototype.writeInt16BE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>8,this[i+1]=255&r):N(this,r,i,!1),i+2},t.prototype.writeInt32LE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[i]=255&r,this[i+1]=r>>>8,this[i+2]=r>>>16,this[i+3]=r>>>24):C(this,r,i,!0),i+4},t.prototype.writeInt32BE=function(r,i,e){return r=+r,i=0|i,e||O(this,r,i,4,2147483647,-2147483648),0>r&&(r=4294967295+r+1),t.TYPED_ARRAY_SUPPORT?(this[i]=r>>>24,this[i+1]=r>>>16,this[i+2]=r>>>8,this[i+3]=255&r):C(this,r,i,!1),i+4},t.prototype.writeFloatLE=function(t,r,i){return Z(this,t,r,!0,i)},t.prototype.writeFloatBE=function(t,r,i){return Z(this,t,r,!1,i)},t.prototype.writeDoubleLE=function(t,r,i){return q(this,t,r,!0,i)},t.prototype.writeDoubleBE=function(t,r,i){return q(this,t,r,!1,i)},t.prototype.copy=function(r,i,e,n){if(e||(e=0),n||0===n||(n=this.length),r.length>i||(i=r.length),i||(i=0),n>0&&e>n&&(n=e),n===e)return 0;if(0===r.length||0===this.length)return 0;if(0>i)throw new RangeError("targetStart out of bounds");if(0>e||e>=this.length)throw new RangeError("sourceStart out of bounds");if(0>n)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),n-e>r.length-i&&(n=r.length-i+e);var o,h=n-e;if(this===r&&i>e&&n>i)for(o=h-1;o>=0;--o)r[o+i]=this[o+e];else if(1e3>h||!t.TYPED_ARRAY_SUPPORT)for(o=0;h>o;++o)r[o+i]=this[o+e];else Uint8Array.prototype.set.call(r,this.subarray(e,e+h),i);return h},t.prototype.fill=function(r,i,e,n){if("string"==typeof r){if("string"==typeof i?(n=i,i=0,e=this.length):"string"==typeof e&&(n=e,e=this.length),1===r.length){var o=r.charCodeAt(0);256>o&&(r=o)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!t.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof r&&(r=255&r);if(0>i||i>this.length||e>this.length)throw new RangeError("Out of range index");if(i>=e)return this;i>>>=0,e=void 0===e?this.length:e>>>0,r||(r=0);var h;if("number"==typeof r)for(h=i;e>h;++h)this[h]=r;else{var s=t.isBuffer(r)?r:$(""+new t(r,n)),u=s.length;for(h=0;e-i>h;++h)this[h+i]=s[h%u]}return this};var rt=/[^+\/0-9A-Za-z-_]/g}).call(r,i(0).Buffer,i(8))},function(t,r,i){var e=i(3),n=i(7);t.exports=function(t){if("string"==typeof t||"number"==typeof t){var r=new e(1),i=(t+"").toLowerCase().trim(),o="0x"===i.substr(0,2)||"-0x"===i.substr(0,3),h=n(i);if("-"===h.substr(0,1)&&(h=n(h.slice(1)),r=new e((-1),10)),h=""===h?"0":h,!h.match(/^-?[0-9]+$/)&&h.match(/^[0-9A-Fa-f]+$/)||h.match(/^[a-fA-F]+$/)||o===!0&&h.match(/^[0-9A-Fa-f]+$/))return new e(h,16).mul(r);if((h.match(/^-?[0-9]+$/)||""===h)&&o===!1)return new e(h,10).mul(r)}else if("object"==typeof t&&t.toString&&!t.pop&&!t.push&&t.toString(10).match(/^-?[0-9]+$/)&&(t.mul||t.dividedToIntegerBy))return new e(t.toString(10),10);throw Error("[number-to-bn] while converting number "+JSON.stringify(t)+" to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.")}},function(t,r){"use strict";function i(t){var r=t.length;if(r%4>0)throw Error("Invalid string. Length must be a multiple of 4");return"="===t[r-2]?2:"="===t[r-1]?1:0}function e(t){return 3*t.length/4-i(t)}function n(t){var r,e,n,o,h,s,u=t.length;h=i(t),s=new f(3*u/4-h),n=h>0?u-4:u;var l=0;for(r=0,e=0;n>r;r+=4,e+=3)o=a[t.charCodeAt(r)]<<18|a[t.charCodeAt(r+1)]<<12|a[t.charCodeAt(r+2)]<<6|a[t.charCodeAt(r+3)],s[l++]=o>>16&255,s[l++]=o>>8&255,s[l++]=255&o;return 2===h?(o=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,s[l++]=255&o):1===h&&(o=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,s[l++]=o>>8&255,s[l++]=255&o),s}function o(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function h(t,r,i){for(var e,n=[],h=r;i>h;h+=3)e=(t[h]<<16)+(t[h+1]<<8)+t[h+2],n.push(o(e));return n.join("")}function s(t){for(var r,i=t.length,e=i%3,n="",o=[],s=16383,a=0,f=i-e;f>a;a+=s)o.push(h(t,a,a+s>f?f:a+s));return 1===e?(r=t[i-1],n+=u[r>>2],n+=u[r<<4&63],n+="=="):2===e&&(r=(t[i-2]<<8)+t[i-1],n+=u[r>>10],n+=u[r>>4&63],n+=u[r<<2&63],n+="="),o.push(n),o.join("")}r.byteLength=e,r.toByteArray=n,r.fromByteArray=s;for(var u=[],a=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",m=0,p=l.length;p>m;++m)u[m]=l[m],a[l.charCodeAt(m)]=m;a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},function(t,r,i){(function(t){!function(t,r){"use strict";function e(t,r){if(!t)throw Error(r||"Assertion failed")}function n(t,r){t.super_=r;var i=function(){};i.prototype=r.prototype,t.prototype=new i,t.prototype.constructor=t}function o(t,r,i){return o.isBN(t)?t:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==t&&("le"!==r&&"be"!==r||(i=r,r=10),this._init(t||0,r||10,i||"be"))))}function h(t,r,i){for(var e=0,n=Math.min(t.length,i),o=r;n>o;o++){var h=t.charCodeAt(o)-48;e<<=4,e|=49>h||h>54?17>h||h>22?15&h:h-17+10:h-49+10}return e}function s(t,r,i,e){for(var n=0,o=Math.min(t.length,i),h=r;o>h;h++){var s=t.charCodeAt(h)-48;n*=e,n+=49>s?17>s?s:s-17+10:s-49+10}return n}function u(t){for(var r=Array(t.bitLength()),i=0;r.length>i;i++){var e=i/26|0,n=i%26;r[i]=(t.words[e]&1<>>n}return r}function a(t,r,i){i.negative=r.negative^t.negative;var e=t.length+r.length|0;i.length=e,e=e-1|0;var n=0|t.words[0],o=0|r.words[0],h=n*o,s=67108863&h,u=h/67108864|0;i.words[0]=s;for(var a=1;e>a;a++){for(var f=u>>>26,l=67108863&u,m=Math.min(a,r.length-1),p=Math.max(0,a-t.length+1);m>=p;p++){var d=a-p|0;n=0|t.words[d],o=0|r.words[p],h=n*o+l,f+=h/67108864|0,l=67108863&h}i.words[a]=0|l,u=0|f}return 0!==u?i.words[a]=0|u:i.length--,i.strip()}function f(t,r,i){i.negative=r.negative^t.negative,i.length=t.length+r.length;for(var e=0,n=0,o=0;i.length-1>o;o++){var h=n;n=0;for(var s=67108863&e,u=Math.min(o,r.length-1),a=Math.max(0,o-t.length+1);u>=a;a++){var f=o-a,l=0|t.words[f],m=0|r.words[a],p=l*m,d=67108863&p;h=h+(p/67108864|0)|0,d=d+s|0,s=67108863&d,h=h+(d>>>26)|0,n+=h>>>26,h&=67108863}i.words[o]=s,e=h,h=n}return 0!==e?i.words[o]=e:i.length--,i.strip()}function l(t,r,i){var e=new m;return e.mulp(t,r,i)}function m(t,r){this.x=t,this.y=r}function p(t,r){this.name=t,this.p=new o(r,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function d(){p.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function c(){p.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function g(){p.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function v(){p.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(t){if("string"==typeof t){var r=o._prime(t);this.m=r.p,this.prime=r}else e(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function M(t){y.call(this,t),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:r.BN=o,o.BN=o,o.wordSize=26;var w;try{w=i(0).Buffer}catch(b){}o.isBN=function(t){return t instanceof o||null!==t&&"object"==typeof t&&t.constructor.wordSize===o.wordSize&&Array.isArray(t.words)},o.max=function(t,r){return t.cmp(r)>0?t:r},o.min=function(t,r){return t.cmp(r)<0?t:r},o.prototype._init=function(t,r,i){if("number"==typeof t)return this._initNumber(t,r,i);if("object"==typeof t)return this._initArray(t,r,i);"hex"===r&&(r=16),e(r===(0|r)&&r>=2&&36>=r),t=(""+t).replace(/\s+/g,"");var n=0;"-"===t[0]&&n++,16===r?this._parseHex(t,n):this._parseBase(t,r,n),"-"===t[0]&&(this.negative=1),this.strip(),"le"===i&&this._initArray(this.toArray(),r,i)},o.prototype._initNumber=function(t,r,i){0>t&&(this.negative=1,t=-t),67108864>t?(this.words=[67108863&t],this.length=1):4503599627370496>t?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(e(9007199254740992>t),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),r,i)},o.prototype._initArray=function(t,r,i){if(e("number"==typeof t.length),0>=t.length)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=Array(this.length);for(var n=0;this.length>n;n++)this.words[n]=0;var o,h,s=0;if("be"===i)for(n=t.length-1,o=0;n>=0;n-=3)h=t[n]|t[n-1]<<8|t[n-2]<<16,this.words[o]|=h<>>26-s&67108863,s+=24,26>s||(s-=26,o++);else if("le"===i)for(n=0,o=0;t.length>n;n+=3)h=t[n]|t[n+1]<<8|t[n+2]<<16,this.words[o]|=h<>>26-s&67108863,s+=24,26>s||(s-=26,o++);return this.strip()},o.prototype._parseHex=function(t,r){this.length=Math.ceil((t.length-r)/6),this.words=Array(this.length);for(var i=0;this.length>i;i++)this.words[i]=0;var e,n,o=0;for(i=t.length-6,e=0;i>=r;i-=6)n=h(t,i,i+6),this.words[e]|=n<>>26-o&4194303,o+=24,26>o||(o-=26,e++);i+6!==r&&(n=h(t,r,i+6),this.words[e]|=n<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(t,r,i){this.words=[0],this.length=1;for(var e=0,n=1;67108863>=n;n*=r)e++;e--,n=n/r|0;for(var o=t.length-i,h=o%e,u=Math.min(o,o-h)+i,a=0,f=i;u>f;f+=e)a=s(t,f,f+e,r),this.imuln(n),67108864>this.words[0]+a?this.words[0]+=a:this._iaddn(a);if(0!==h){var l=1;for(a=s(t,f,t.length,r),f=0;h>f;f++)l*=r;this.imuln(l),67108864>this.words[0]+a?this.words[0]+=a:this._iaddn(a)}},o.prototype.copy=function(t){t.words=Array(this.length);for(var r=0;this.length>r;r++)t.words[r]=this.words[r];t.length=this.length,t.negative=this.negative,t.red=this.red},o.prototype.clone=function(){var t=new o(null);return this.copy(t),t},o.prototype._expand=function(t){for(;t>this.length;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],A=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],E=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(t,r){t=t||10,r=0|r||1;var i;if(16===t||"hex"===t){i="";for(var n=0,o=0,h=0;this.length>h;h++){var s=this.words[h],u=(16777215&(s<>>24-n&16777215,i=0!==o||h!==this.length-1?_[6-u.length]+u+i:u+i,n+=2,26>n||(n-=26,h--)}for(0!==o&&(i=o.toString(16)+i);i.length%r!==0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(t===(0|t)&&t>=2&&36>=t){var a=A[t],f=E[t];i="";var l=this.clone();for(l.negative=0;!l.isZero();){var m=l.modn(f).toString(t);l=l.idivn(f),i=l.isZero()?m+i:_[a-m.length]+m+i}for(this.isZero()&&(i="0"+i);i.length%r!==0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}e(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&e(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(t,r){return e(void 0!==w),this.toArrayLike(w,t,r)},o.prototype.toArray=function(t,r){return this.toArrayLike(Array,t,r)},o.prototype.toArrayLike=function(t,r,i){var n=this.byteLength(),o=i||Math.max(1,n);e(o>=n,"byte array longer than desired length"),e(o>0,"Requested array length <= 0"),this.strip();var h,s,u="le"===r,a=new t(o),f=this.clone();if(u){for(s=0;!f.isZero();s++)h=f.andln(255),f.iushrn(8),a[s]=h;for(;o>s;s++)a[s]=0}else{for(s=0;o-n>s;s++)a[s]=0;for(s=0;!f.isZero();s++)h=f.andln(255),f.iushrn(8),a[o-s-1]=h}return a},o.prototype._countBits=Math.clz32?function(t){return 32-Math.clz32(t)}:function(t){var r=t,i=0;return 4096>r||(i+=13,r>>>=13),64>r||(i+=7,r>>>=7),8>r||(i+=4,r>>>=4),2>r||(i+=2,r>>>=2),i+r},o.prototype._zeroBits=function(t){if(0===t)return 26;var r=t,i=0;return 0===(8191&r)&&(i+=13,r>>>=13),0===(127&r)&&(i+=7,r>>>=7),0===(15&r)&&(i+=4,r>>>=4),0===(3&r)&&(i+=2,r>>>=2),0===(1&r)&&i++,i},o.prototype.bitLength=function(){var t=this.words[this.length-1],r=this._countBits(t);return 26*(this.length-1)+r},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,r=0;this.length>r;r++){var i=this._zeroBits(this.words[r]);if(t+=i,26!==i)break}return t},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},o.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(t){ -for(;t.length>this.length;)this.words[this.length++]=0;for(var r=0;t.length>r;r++)this.words[r]=this.words[r]|t.words[r];return this.strip()},o.prototype.ior=function(t){return e(0===(this.negative|t.negative)),this.iuor(t)},o.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},o.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},o.prototype.iuand=function(t){var r;r=this.length>t.length?t:this;for(var i=0;r.length>i;i++)this.words[i]=this.words[i]&t.words[i];return this.length=r.length,this.strip()},o.prototype.iand=function(t){return e(0===(this.negative|t.negative)),this.iuand(t)},o.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},o.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},o.prototype.iuxor=function(t){var r,i;this.length>t.length?(r=this,i=t):(r=t,i=this);for(var e=0;i.length>e;e++)this.words[e]=r.words[e]^i.words[e];if(this!==r)for(;r.length>e;e++)this.words[e]=r.words[e];return this.length=r.length,this.strip()},o.prototype.ixor=function(t){return e(0===(this.negative|t.negative)),this.iuxor(t)},o.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},o.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},o.prototype.inotn=function(t){e("number"==typeof t&&t>=0);var r=0|Math.ceil(t/26),i=t%26;this._expand(r),i>0&&r--;for(var n=0;r>n;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},o.prototype.notn=function(t){return this.clone().inotn(t)},o.prototype.setn=function(t,r){e("number"==typeof t&&t>=0);var i=t/26|0,n=t%26;return this._expand(i+1),this.words[i]=r?this.words[i]|1<t.length?(i=this,e=t):(i=t,e=this);for(var n=0,o=0;e.length>o;o++)r=(0|i.words[o])+(0|e.words[o])+n,this.words[o]=67108863&r,n=r>>>26;for(;0!==n&&i.length>o;o++)r=(0|i.words[o])+n,this.words[o]=67108863&r,n=r>>>26;if(this.length=i.length,0!==n)this.words[this.length]=n,this.length++;else if(i!==this)for(;i.length>o;o++)this.words[o]=i.words[o];return this},o.prototype.add=function(t){var r;return 0!==t.negative&&0===this.negative?(t.negative=0,r=this.sub(t),t.negative^=1,r):0===t.negative&&0!==this.negative?(this.negative=0,r=t.sub(this),this.negative=1,r):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},o.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var r=this.iadd(t);return t.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var i=this.cmp(t);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;var e,n;i>0?(e=this,n=t):(e=t,n=this);for(var o=0,h=0;n.length>h;h++)r=(0|e.words[h])-(0|n.words[h])+o,o=r>>26,this.words[h]=67108863&r;for(;0!==o&&e.length>h;h++)r=(0|e.words[h])+o,o=r>>26,this.words[h]=67108863&r;if(0===o&&e.length>h&&e!==this)for(;e.length>h;h++)this.words[h]=e.words[h];return this.length=Math.max(this.length,h),e!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(t){return this.clone().isub(t)};var R=function(t,r,i){var e,n,o,h=t.words,s=r.words,u=i.words,a=0,f=0|h[0],l=8191&f,m=f>>>13,p=0|h[1],d=8191&p,c=p>>>13,g=0|h[2],v=8191&g,y=g>>>13,M=0|h[3],w=8191&M,b=M>>>13,_=0|h[4],A=8191&_,E=_>>>13,R=0|h[5],B=8191&R,S=R>>>13,P=0|h[6],T=8191&P,x=P>>>13,k=0|h[7],U=8191&k,I=k>>>13,L=0|h[8],Y=8191&L,O=L>>>13,N=0|h[9],C=8191&N,D=N>>>13,Z=0|s[0],q=8191&Z,j=Z>>>13,z=0|s[1],F=8191&z,$=z>>>13,K=0|s[2],H=8191&K,J=K>>>13,V=0|s[3],X=8191&V,G=V>>>13,Q=0|s[4],W=8191&Q,tt=Q>>>13,rt=0|s[5],it=8191&rt,et=rt>>>13,nt=0|s[6],ot=8191&nt,ht=nt>>>13,st=0|s[7],ut=8191&st,at=st>>>13,ft=0|s[8],lt=8191&ft,mt=ft>>>13,pt=0|s[9],dt=8191&pt,ct=pt>>>13;i.negative=t.negative^r.negative,i.length=19,e=Math.imul(l,q),n=Math.imul(l,j),n=n+Math.imul(m,q)|0,o=Math.imul(m,j);var gt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(gt>>>26)|0,gt&=67108863,e=Math.imul(d,q),n=Math.imul(d,j),n=n+Math.imul(c,q)|0,o=Math.imul(c,j),e=e+Math.imul(l,F)|0,n=n+Math.imul(l,$)|0,n=n+Math.imul(m,F)|0,o=o+Math.imul(m,$)|0;var vt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(vt>>>26)|0,vt&=67108863,e=Math.imul(v,q),n=Math.imul(v,j),n=n+Math.imul(y,q)|0,o=Math.imul(y,j),e=e+Math.imul(d,F)|0,n=n+Math.imul(d,$)|0,n=n+Math.imul(c,F)|0,o=o+Math.imul(c,$)|0,e=e+Math.imul(l,H)|0,n=n+Math.imul(l,J)|0,n=n+Math.imul(m,H)|0,o=o+Math.imul(m,J)|0;var yt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(yt>>>26)|0,yt&=67108863,e=Math.imul(w,q),n=Math.imul(w,j),n=n+Math.imul(b,q)|0,o=Math.imul(b,j),e=e+Math.imul(v,F)|0,n=n+Math.imul(v,$)|0,n=n+Math.imul(y,F)|0,o=o+Math.imul(y,$)|0,e=e+Math.imul(d,H)|0,n=n+Math.imul(d,J)|0,n=n+Math.imul(c,H)|0,o=o+Math.imul(c,J)|0,e=e+Math.imul(l,X)|0,n=n+Math.imul(l,G)|0,n=n+Math.imul(m,X)|0,o=o+Math.imul(m,G)|0;var Mt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,e=Math.imul(A,q),n=Math.imul(A,j),n=n+Math.imul(E,q)|0,o=Math.imul(E,j),e=e+Math.imul(w,F)|0,n=n+Math.imul(w,$)|0,n=n+Math.imul(b,F)|0,o=o+Math.imul(b,$)|0,e=e+Math.imul(v,H)|0,n=n+Math.imul(v,J)|0,n=n+Math.imul(y,H)|0,o=o+Math.imul(y,J)|0,e=e+Math.imul(d,X)|0,n=n+Math.imul(d,G)|0,n=n+Math.imul(c,X)|0,o=o+Math.imul(c,G)|0,e=e+Math.imul(l,W)|0,n=n+Math.imul(l,tt)|0,n=n+Math.imul(m,W)|0,o=o+Math.imul(m,tt)|0;var wt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(wt>>>26)|0,wt&=67108863,e=Math.imul(B,q),n=Math.imul(B,j),n=n+Math.imul(S,q)|0,o=Math.imul(S,j),e=e+Math.imul(A,F)|0,n=n+Math.imul(A,$)|0,n=n+Math.imul(E,F)|0,o=o+Math.imul(E,$)|0,e=e+Math.imul(w,H)|0,n=n+Math.imul(w,J)|0,n=n+Math.imul(b,H)|0,o=o+Math.imul(b,J)|0,e=e+Math.imul(v,X)|0,n=n+Math.imul(v,G)|0,n=n+Math.imul(y,X)|0,o=o+Math.imul(y,G)|0,e=e+Math.imul(d,W)|0,n=n+Math.imul(d,tt)|0,n=n+Math.imul(c,W)|0,o=o+Math.imul(c,tt)|0,e=e+Math.imul(l,it)|0,n=n+Math.imul(l,et)|0,n=n+Math.imul(m,it)|0,o=o+Math.imul(m,et)|0;var bt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(bt>>>26)|0,bt&=67108863,e=Math.imul(T,q),n=Math.imul(T,j),n=n+Math.imul(x,q)|0,o=Math.imul(x,j),e=e+Math.imul(B,F)|0,n=n+Math.imul(B,$)|0,n=n+Math.imul(S,F)|0,o=o+Math.imul(S,$)|0,e=e+Math.imul(A,H)|0,n=n+Math.imul(A,J)|0,n=n+Math.imul(E,H)|0,o=o+Math.imul(E,J)|0,e=e+Math.imul(w,X)|0,n=n+Math.imul(w,G)|0,n=n+Math.imul(b,X)|0,o=o+Math.imul(b,G)|0,e=e+Math.imul(v,W)|0,n=n+Math.imul(v,tt)|0,n=n+Math.imul(y,W)|0,o=o+Math.imul(y,tt)|0,e=e+Math.imul(d,it)|0,n=n+Math.imul(d,et)|0,n=n+Math.imul(c,it)|0,o=o+Math.imul(c,et)|0,e=e+Math.imul(l,ot)|0,n=n+Math.imul(l,ht)|0,n=n+Math.imul(m,ot)|0,o=o+Math.imul(m,ht)|0;var _t=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(_t>>>26)|0,_t&=67108863,e=Math.imul(U,q),n=Math.imul(U,j),n=n+Math.imul(I,q)|0,o=Math.imul(I,j),e=e+Math.imul(T,F)|0,n=n+Math.imul(T,$)|0,n=n+Math.imul(x,F)|0,o=o+Math.imul(x,$)|0,e=e+Math.imul(B,H)|0,n=n+Math.imul(B,J)|0,n=n+Math.imul(S,H)|0,o=o+Math.imul(S,J)|0,e=e+Math.imul(A,X)|0,n=n+Math.imul(A,G)|0,n=n+Math.imul(E,X)|0,o=o+Math.imul(E,G)|0,e=e+Math.imul(w,W)|0,n=n+Math.imul(w,tt)|0,n=n+Math.imul(b,W)|0,o=o+Math.imul(b,tt)|0,e=e+Math.imul(v,it)|0,n=n+Math.imul(v,et)|0,n=n+Math.imul(y,it)|0,o=o+Math.imul(y,et)|0,e=e+Math.imul(d,ot)|0,n=n+Math.imul(d,ht)|0,n=n+Math.imul(c,ot)|0,o=o+Math.imul(c,ht)|0,e=e+Math.imul(l,ut)|0,n=n+Math.imul(l,at)|0,n=n+Math.imul(m,ut)|0,o=o+Math.imul(m,at)|0;var At=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(At>>>26)|0,At&=67108863,e=Math.imul(Y,q),n=Math.imul(Y,j),n=n+Math.imul(O,q)|0,o=Math.imul(O,j),e=e+Math.imul(U,F)|0,n=n+Math.imul(U,$)|0,n=n+Math.imul(I,F)|0,o=o+Math.imul(I,$)|0,e=e+Math.imul(T,H)|0,n=n+Math.imul(T,J)|0,n=n+Math.imul(x,H)|0,o=o+Math.imul(x,J)|0,e=e+Math.imul(B,X)|0,n=n+Math.imul(B,G)|0,n=n+Math.imul(S,X)|0,o=o+Math.imul(S,G)|0,e=e+Math.imul(A,W)|0,n=n+Math.imul(A,tt)|0,n=n+Math.imul(E,W)|0,o=o+Math.imul(E,tt)|0,e=e+Math.imul(w,it)|0,n=n+Math.imul(w,et)|0,n=n+Math.imul(b,it)|0,o=o+Math.imul(b,et)|0,e=e+Math.imul(v,ot)|0,n=n+Math.imul(v,ht)|0,n=n+Math.imul(y,ot)|0,o=o+Math.imul(y,ht)|0,e=e+Math.imul(d,ut)|0,n=n+Math.imul(d,at)|0,n=n+Math.imul(c,ut)|0,o=o+Math.imul(c,at)|0,e=e+Math.imul(l,lt)|0,n=n+Math.imul(l,mt)|0,n=n+Math.imul(m,lt)|0,o=o+Math.imul(m,mt)|0;var Et=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Et>>>26)|0,Et&=67108863,e=Math.imul(C,q),n=Math.imul(C,j),n=n+Math.imul(D,q)|0,o=Math.imul(D,j),e=e+Math.imul(Y,F)|0,n=n+Math.imul(Y,$)|0,n=n+Math.imul(O,F)|0,o=o+Math.imul(O,$)|0,e=e+Math.imul(U,H)|0,n=n+Math.imul(U,J)|0,n=n+Math.imul(I,H)|0,o=o+Math.imul(I,J)|0,e=e+Math.imul(T,X)|0,n=n+Math.imul(T,G)|0,n=n+Math.imul(x,X)|0,o=o+Math.imul(x,G)|0,e=e+Math.imul(B,W)|0,n=n+Math.imul(B,tt)|0,n=n+Math.imul(S,W)|0,o=o+Math.imul(S,tt)|0,e=e+Math.imul(A,it)|0,n=n+Math.imul(A,et)|0,n=n+Math.imul(E,it)|0,o=o+Math.imul(E,et)|0,e=e+Math.imul(w,ot)|0,n=n+Math.imul(w,ht)|0,n=n+Math.imul(b,ot)|0,o=o+Math.imul(b,ht)|0,e=e+Math.imul(v,ut)|0,n=n+Math.imul(v,at)|0,n=n+Math.imul(y,ut)|0,o=o+Math.imul(y,at)|0,e=e+Math.imul(d,lt)|0,n=n+Math.imul(d,mt)|0,n=n+Math.imul(c,lt)|0,o=o+Math.imul(c,mt)|0,e=e+Math.imul(l,dt)|0,n=n+Math.imul(l,ct)|0,n=n+Math.imul(m,dt)|0,o=o+Math.imul(m,ct)|0;var Rt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Rt>>>26)|0,Rt&=67108863,e=Math.imul(C,F),n=Math.imul(C,$),n=n+Math.imul(D,F)|0,o=Math.imul(D,$),e=e+Math.imul(Y,H)|0,n=n+Math.imul(Y,J)|0,n=n+Math.imul(O,H)|0,o=o+Math.imul(O,J)|0,e=e+Math.imul(U,X)|0,n=n+Math.imul(U,G)|0,n=n+Math.imul(I,X)|0,o=o+Math.imul(I,G)|0,e=e+Math.imul(T,W)|0,n=n+Math.imul(T,tt)|0,n=n+Math.imul(x,W)|0,o=o+Math.imul(x,tt)|0,e=e+Math.imul(B,it)|0,n=n+Math.imul(B,et)|0,n=n+Math.imul(S,it)|0,o=o+Math.imul(S,et)|0,e=e+Math.imul(A,ot)|0,n=n+Math.imul(A,ht)|0,n=n+Math.imul(E,ot)|0,o=o+Math.imul(E,ht)|0,e=e+Math.imul(w,ut)|0,n=n+Math.imul(w,at)|0,n=n+Math.imul(b,ut)|0,o=o+Math.imul(b,at)|0,e=e+Math.imul(v,lt)|0,n=n+Math.imul(v,mt)|0,n=n+Math.imul(y,lt)|0,o=o+Math.imul(y,mt)|0,e=e+Math.imul(d,dt)|0,n=n+Math.imul(d,ct)|0,n=n+Math.imul(c,dt)|0,o=o+Math.imul(c,ct)|0;var Bt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Bt>>>26)|0,Bt&=67108863,e=Math.imul(C,H),n=Math.imul(C,J),n=n+Math.imul(D,H)|0,o=Math.imul(D,J),e=e+Math.imul(Y,X)|0,n=n+Math.imul(Y,G)|0,n=n+Math.imul(O,X)|0,o=o+Math.imul(O,G)|0,e=e+Math.imul(U,W)|0,n=n+Math.imul(U,tt)|0,n=n+Math.imul(I,W)|0,o=o+Math.imul(I,tt)|0,e=e+Math.imul(T,it)|0,n=n+Math.imul(T,et)|0,n=n+Math.imul(x,it)|0,o=o+Math.imul(x,et)|0,e=e+Math.imul(B,ot)|0,n=n+Math.imul(B,ht)|0,n=n+Math.imul(S,ot)|0,o=o+Math.imul(S,ht)|0,e=e+Math.imul(A,ut)|0,n=n+Math.imul(A,at)|0,n=n+Math.imul(E,ut)|0,o=o+Math.imul(E,at)|0,e=e+Math.imul(w,lt)|0,n=n+Math.imul(w,mt)|0,n=n+Math.imul(b,lt)|0,o=o+Math.imul(b,mt)|0,e=e+Math.imul(v,dt)|0,n=n+Math.imul(v,ct)|0,n=n+Math.imul(y,dt)|0,o=o+Math.imul(y,ct)|0;var St=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(St>>>26)|0,St&=67108863,e=Math.imul(C,X),n=Math.imul(C,G),n=n+Math.imul(D,X)|0,o=Math.imul(D,G),e=e+Math.imul(Y,W)|0,n=n+Math.imul(Y,tt)|0,n=n+Math.imul(O,W)|0,o=o+Math.imul(O,tt)|0,e=e+Math.imul(U,it)|0,n=n+Math.imul(U,et)|0,n=n+Math.imul(I,it)|0,o=o+Math.imul(I,et)|0,e=e+Math.imul(T,ot)|0,n=n+Math.imul(T,ht)|0,n=n+Math.imul(x,ot)|0,o=o+Math.imul(x,ht)|0,e=e+Math.imul(B,ut)|0,n=n+Math.imul(B,at)|0,n=n+Math.imul(S,ut)|0,o=o+Math.imul(S,at)|0,e=e+Math.imul(A,lt)|0,n=n+Math.imul(A,mt)|0,n=n+Math.imul(E,lt)|0,o=o+Math.imul(E,mt)|0,e=e+Math.imul(w,dt)|0,n=n+Math.imul(w,ct)|0,n=n+Math.imul(b,dt)|0,o=o+Math.imul(b,ct)|0;var Pt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,e=Math.imul(C,W),n=Math.imul(C,tt),n=n+Math.imul(D,W)|0,o=Math.imul(D,tt),e=e+Math.imul(Y,it)|0,n=n+Math.imul(Y,et)|0,n=n+Math.imul(O,it)|0,o=o+Math.imul(O,et)|0,e=e+Math.imul(U,ot)|0,n=n+Math.imul(U,ht)|0,n=n+Math.imul(I,ot)|0,o=o+Math.imul(I,ht)|0,e=e+Math.imul(T,ut)|0,n=n+Math.imul(T,at)|0,n=n+Math.imul(x,ut)|0,o=o+Math.imul(x,at)|0,e=e+Math.imul(B,lt)|0,n=n+Math.imul(B,mt)|0,n=n+Math.imul(S,lt)|0,o=o+Math.imul(S,mt)|0,e=e+Math.imul(A,dt)|0,n=n+Math.imul(A,ct)|0,n=n+Math.imul(E,dt)|0,o=o+Math.imul(E,ct)|0;var Tt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,e=Math.imul(C,it),n=Math.imul(C,et),n=n+Math.imul(D,it)|0,o=Math.imul(D,et),e=e+Math.imul(Y,ot)|0,n=n+Math.imul(Y,ht)|0,n=n+Math.imul(O,ot)|0,o=o+Math.imul(O,ht)|0,e=e+Math.imul(U,ut)|0,n=n+Math.imul(U,at)|0,n=n+Math.imul(I,ut)|0,o=o+Math.imul(I,at)|0,e=e+Math.imul(T,lt)|0,n=n+Math.imul(T,mt)|0,n=n+Math.imul(x,lt)|0,o=o+Math.imul(x,mt)|0,e=e+Math.imul(B,dt)|0,n=n+Math.imul(B,ct)|0,n=n+Math.imul(S,dt)|0,o=o+Math.imul(S,ct)|0;var xt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(xt>>>26)|0,xt&=67108863,e=Math.imul(C,ot),n=Math.imul(C,ht),n=n+Math.imul(D,ot)|0,o=Math.imul(D,ht),e=e+Math.imul(Y,ut)|0,n=n+Math.imul(Y,at)|0,n=n+Math.imul(O,ut)|0,o=o+Math.imul(O,at)|0,e=e+Math.imul(U,lt)|0,n=n+Math.imul(U,mt)|0,n=n+Math.imul(I,lt)|0,o=o+Math.imul(I,mt)|0,e=e+Math.imul(T,dt)|0,n=n+Math.imul(T,ct)|0,n=n+Math.imul(x,dt)|0,o=o+Math.imul(x,ct)|0;var kt=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(kt>>>26)|0,kt&=67108863,e=Math.imul(C,ut),n=Math.imul(C,at),n=n+Math.imul(D,ut)|0,o=Math.imul(D,at),e=e+Math.imul(Y,lt)|0,n=n+Math.imul(Y,mt)|0,n=n+Math.imul(O,lt)|0,o=o+Math.imul(O,mt)|0,e=e+Math.imul(U,dt)|0,n=n+Math.imul(U,ct)|0,n=n+Math.imul(I,dt)|0,o=o+Math.imul(I,ct)|0;var Ut=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(Ut>>>26)|0,Ut&=67108863,e=Math.imul(C,lt),n=Math.imul(C,mt),n=n+Math.imul(D,lt)|0,o=Math.imul(D,mt),e=e+Math.imul(Y,dt)|0,n=n+Math.imul(Y,ct)|0,n=n+Math.imul(O,dt)|0,o=o+Math.imul(O,ct)|0;var It=(a+e|0)+((8191&n)<<13)|0;a=(o+(n>>>13)|0)+(It>>>26)|0,It&=67108863,e=Math.imul(C,dt),n=Math.imul(C,ct),n=n+Math.imul(D,dt)|0,o=Math.imul(D,ct);var Lt=(a+e|0)+((8191&n)<<13)|0;return a=(o+(n>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,u[0]=gt,u[1]=vt,u[2]=yt,u[3]=Mt,u[4]=wt,u[5]=bt,u[6]=_t,u[7]=At,u[8]=Et,u[9]=Rt,u[10]=Bt,u[11]=St,u[12]=Pt,u[13]=Tt,u[14]=xt,u[15]=kt,u[16]=Ut,u[17]=It,u[18]=Lt,0!==a&&(u[19]=a,i.length++),i};Math.imul||(R=a),o.prototype.mulTo=function(t,r){var i,e=this.length+t.length;return i=10===this.length&&10===t.length?R(this,t,r):63>e?a(this,t,r):1024>e?f(this,t,r):l(this,t,r)},m.prototype.makeRBT=function(t){for(var r=Array(t),i=o.prototype._countBits(t)-1,e=0;t>e;e++)r[e]=this.revBin(e,i,t);return r},m.prototype.revBin=function(t,r,i){if(0===t||t===i-1)return t;for(var e=0,n=0;r>n;n++)e|=(1&t)<>=1;return e},m.prototype.permute=function(t,r,i,e,n,o){for(var h=0;o>h;h++)e[h]=r[t[h]],n[h]=i[t[h]]},m.prototype.transform=function(t,r,i,e,n,o){this.permute(o,t,r,i,e,n);for(var h=1;n>h;h<<=1)for(var s=h<<1,u=Math.cos(2*Math.PI/s),a=Math.sin(2*Math.PI/s),f=0;n>f;f+=s)for(var l=u,m=a,p=0;h>p;p++){var d=i[f+p],c=e[f+p],g=i[f+p+h],v=e[f+p+h],y=l*g-m*v;v=l*v+m*g,g=y,i[f+p]=d+g,e[f+p]=c+v,i[f+p+h]=d-g,e[f+p+h]=c-v,p!==s&&(y=u*l-a*m,m=u*m+a*l,l=y)}},m.prototype.guessLen13b=function(t,r){var i=1|Math.max(r,t),e=1&i,n=0;for(i=i/2|0;i;i>>>=1)n++;return 1<1)for(var e=0;i/2>e;e++){var n=t[e];t[e]=t[i-e-1],t[i-e-1]=n,n=r[e],r[e]=-r[i-e-1],r[i-e-1]=-n}},m.prototype.normalize13b=function(t,r){for(var i=0,e=0;r/2>e;e++){var n=8192*Math.round(t[2*e+1]/r)+Math.round(t[2*e]/r)+i;t[e]=67108863&n,i=67108864>n?0:n/67108864|0}return t},m.prototype.convert13b=function(t,r,i,n){for(var o=0,h=0;r>h;h++)o+=0|t[h],i[2*h]=8191&o,o>>>=13,i[2*h+1]=8191&o,o>>>=13;for(h=2*r;n>h;++h)i[h]=0;e(0===o),e(0===(o&-8192))},m.prototype.stub=function(t){for(var r=Array(t),i=0;t>i;i++)r[i]=0;return r},m.prototype.mulp=function(t,r,i){var e=2*this.guessLen13b(t.length,r.length),n=this.makeRBT(e),o=this.stub(e),h=Array(e),s=Array(e),u=Array(e),a=Array(e),f=Array(e),l=Array(e),m=i.words;m.length=e,this.convert13b(t.words,t.length,h,e),this.convert13b(r.words,r.length,a,e),this.transform(h,o,s,u,e,n),this.transform(a,o,f,l,e,n);for(var p=0;e>p;p++){var d=s[p]*f[p]-u[p]*l[p];u[p]=s[p]*l[p]+u[p]*f[p],s[p]=d}return this.conjugate(s,u,e),this.transform(s,u,m,o,e,n),this.conjugate(m,o,e),this.normalize13b(m,e),i.negative=t.negative^r.negative,i.length=t.length+r.length,i.strip()},o.prototype.mul=function(t){var r=new o(null);return r.words=Array(this.length+t.length),this.mulTo(t,r)},o.prototype.mulf=function(t){var r=new o(null);return r.words=Array(this.length+t.length),l(this,t,r)},o.prototype.imul=function(t){return this.clone().mulTo(t,this)},o.prototype.imuln=function(t){e("number"==typeof t),e(67108864>t);for(var r=0,i=0;this.length>i;i++){var n=(0|this.words[i])*t,o=(67108863&n)+(67108863&r);r>>=26,r+=n/67108864|0,r+=o>>>26,this.words[i]=67108863&o}return 0!==r&&(this.words[i]=r,this.length++),this},o.prototype.muln=function(t){return this.clone().imuln(t)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(t){var r=u(t);if(0===r.length)return new o(1);for(var i=this,e=0;r.length>e&&0===r[e];e++,i=i.sqr());if(++ee;e++,n=n.sqr())0!==r[e]&&(i=i.mul(n));return i},o.prototype.iushln=function(t){e("number"==typeof t&&t>=0);var r,i=t%26,n=(t-i)/26,o=67108863>>>26-i<<26-i;if(0!==i){var h=0;for(r=0;this.length>r;r++){var s=this.words[r]&o,u=(0|this.words[r])-s<>>26-i}h&&(this.words[r]=h,this.length++)}if(0!==n){for(r=this.length-1;r>=0;r--)this.words[r+n]=this.words[r];for(r=0;n>r;r++)this.words[r]=0;this.length+=n}return this.strip()},o.prototype.ishln=function(t){return e(0===this.negative),this.iushln(t)},o.prototype.iushrn=function(t,r,i){e("number"==typeof t&&t>=0);var n;n=r?(r-r%26)/26:0;var o=t%26,h=Math.min((t-o)/26,this.length),s=67108863^67108863>>>o<a;a++)u.words[a]=this.words[a];u.length=h}if(0===h);else if(this.length>h)for(this.length-=h,a=0;this.length>a;a++)this.words[a]=this.words[a+h];else this.words[0]=0,this.length=1;var f=0;for(a=this.length-1;!(0>a||0===f&&n>a);a--){var l=0|this.words[a];this.words[a]=f<<26-o|l>>>o,f=l&s}return u&&0!==f&&(u.words[u.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(t,r,i){return e(0===this.negative),this.iushrn(t,r,i)},o.prototype.shln=function(t){return this.clone().ishln(t)},o.prototype.ushln=function(t){return this.clone().iushln(t)},o.prototype.shrn=function(t){return this.clone().ishrn(t)},o.prototype.ushrn=function(t){return this.clone().iushrn(t)},o.prototype.testn=function(t){e("number"==typeof t&&t>=0);var r=t%26,i=(t-r)/26,n=1<=this.length)return!1;var o=this.words[i];return!!(o&n)},o.prototype.imaskn=function(t){e("number"==typeof t&&t>=0);var r=t%26,i=(t-r)/26;if(e(0===this.negative,"imaskn works only with positive numbers"),i>=this.length)return this;if(0!==r&&i++,this.length=Math.min(i,this.length),0!==r){var n=67108863^67108863>>>r<t),0>t?this.isubn(-t):0!==this.negative?1===this.length&&t>(0|this.words[0])?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},o.prototype._iaddn=function(t){this.words[0]+=t;for(var r=0;this.length>r&&this.words[r]>=67108864;r++)this.words[r]-=67108864,r===this.length-1?this.words[r+1]=1:this.words[r+1]++;return this.length=Math.max(this.length,r+1),this},o.prototype.isubn=function(t){if(e("number"==typeof t),e(67108864>t),0>t)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&0>this.words[0])this.words[0]=-this.words[0],this.negative=1;else for(var r=0;this.length>r&&0>this.words[r];r++)this.words[r]+=67108864,this.words[r+1]-=1;return this.strip()},o.prototype.addn=function(t){return this.clone().iaddn(t)},o.prototype.subn=function(t){return this.clone().isubn(t)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(t,r,i){var n,o=t.length+i;this._expand(o);var h,s=0;for(n=0;t.length>n;n++){h=(0|this.words[n+i])+s;var u=(0|t.words[n])*r;h-=67108863&u,s=(h>>26)-(u/67108864|0),this.words[n+i]=67108863&h}for(;this.length-i>n;n++)h=(0|this.words[n+i])+s,s=h>>26,this.words[n+i]=67108863&h;if(0===s)return this.strip();for(e(s===-1),s=0,n=0;this.length>n;n++)h=-(0|this.words[n])+s,s=h>>26,this.words[n]=67108863&h;return this.negative=1,this.strip()},o.prototype._wordDiv=function(t,r){var i=this.length-t.length,e=this.clone(),n=t,h=0|n.words[n.length-1],s=this._countBits(h);i=26-s,0!==i&&(n=n.ushln(i),e.iushln(i),h=0|n.words[n.length-1]);var u,a=e.length-n.length;if("mod"!==r){u=new o(null),u.length=a+1,u.words=Array(u.length);for(var f=0;u.length>f;f++)u.words[f]=0}var l=e.clone()._ishlnsubmul(n,1,a);0===l.negative&&(e=l,u&&(u.words[a]=1));for(var m=a-1;m>=0;m--){var p=67108864*(0|e.words[n.length+m])+(0|e.words[n.length+m-1]);for(p=Math.min(p/h|0,67108863),e._ishlnsubmul(n,p,m);0!==e.negative;)p--,e.negative=0,e._ishlnsubmul(n,1,m),e.isZero()||(e.negative^=1);u&&(u.words[m]=p)}return u&&u.strip(),e.strip(),"div"!==r&&0!==i&&e.iushrn(i),{div:u||null,mod:e}},o.prototype.divmod=function(t,r,i){if(e(!t.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var n,h,s;return 0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,r),"mod"!==r&&(n=s.div.neg()),"div"!==r&&(h=s.mod.neg(),i&&0!==h.negative&&h.iadd(t)),{div:n,mod:h}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),r),"mod"!==r&&(n=s.div.neg()),{div:n,mod:s.mod}):0!==(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),r),"div"!==r&&(h=s.mod.neg(),i&&0!==h.negative&&h.isub(t)),{div:s.div,mod:h}):t.length>this.length||this.cmp(t)<0?{div:new o(0),mod:this}:1===t.length?"div"===r?{div:this.divn(t.words[0]),mod:null}:"mod"===r?{div:null,mod:new o(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new o(this.modn(t.words[0]))}:this._wordDiv(t,r)},o.prototype.div=function(t){return this.divmod(t,"div",!1).div},o.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},o.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},o.prototype.divRound=function(t){var r=this.divmod(t);if(r.mod.isZero())return r.div;var i=0!==r.div.negative?r.mod.isub(t):r.mod,e=t.ushrn(1),n=t.andln(1),o=i.cmp(e);return 0>o||1===n&&0===o?r.div:0!==r.div.negative?r.div.isubn(1):r.div.iaddn(1)},o.prototype.modn=function(t){e(67108863>=t);for(var r=(1<<26)%t,i=0,n=this.length-1;n>=0;n--)i=(r*i+(0|this.words[n]))%t;return i},o.prototype.idivn=function(t){e(67108863>=t);for(var r=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*r;this.words[i]=n/t|0,r=n%t}return this.strip()},o.prototype.divn=function(t){return this.clone().idivn(t)},o.prototype.egcd=function(t){e(0===t.negative),e(!t.isZero());var r=this,i=t.clone();r=0!==r.negative?r.umod(t):r.clone();for(var n=new o(1),h=new o(0),s=new o(0),u=new o(1),a=0;r.isEven()&&i.isEven();)r.iushrn(1),i.iushrn(1),++a;for(var f=i.clone(),l=r.clone();!r.isZero();){for(var m=0,p=1;0===(r.words[0]&p)&&26>m;++m,p<<=1);if(m>0)for(r.iushrn(m);m-- >0;)(n.isOdd()||h.isOdd())&&(n.iadd(f),h.isub(l)),n.iushrn(1),h.iushrn(1);for(var d=0,c=1;0===(i.words[0]&c)&&26>d;++d,c<<=1);if(d>0)for(i.iushrn(d);d-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(f),u.isub(l)),s.iushrn(1),u.iushrn(1);r.cmp(i)<0?(i.isub(r),s.isub(n),u.isub(h)):(r.isub(i),n.isub(s),h.isub(u))}return{a:s,b:u,gcd:i.iushln(a)}},o.prototype._invmp=function(t){e(0===t.negative),e(!t.isZero());var r=this,i=t.clone();r=0!==r.negative?r.umod(t):r.clone();for(var n=new o(1),h=new o(0),s=i.clone();r.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,a=1;0===(r.words[0]&a)&&26>u;++u,a<<=1);if(u>0)for(r.iushrn(u);u-- >0;)n.isOdd()&&n.iadd(s),n.iushrn(1);for(var f=0,l=1;0===(i.words[0]&l)&&26>f;++f,l<<=1);if(f>0)for(i.iushrn(f);f-- >0;)h.isOdd()&&h.iadd(s),h.iushrn(1);r.cmp(i)<0?(i.isub(r),h.isub(n)):(r.isub(i),n.isub(h))}var m;return m=0===r.cmpn(1)?n:h,m.cmpn(0)<0&&m.iadd(t),m},o.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var r=this.clone(),i=t.clone();r.negative=0,i.negative=0;for(var e=0;r.isEven()&&i.isEven();e++)r.iushrn(1),i.iushrn(1);for(;;){for(;r.isEven();)r.iushrn(1);for(;i.isEven();)i.iushrn(1);var n=r.cmp(i);if(0>n){var o=r;r=i,i=o}else if(0===n||0===i.cmpn(1))break;r.isub(i)}return i.iushln(e)},o.prototype.invm=function(t){return this.egcd(t).a.umod(t)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(t){return this.words[0]&t},o.prototype.bincn=function(t){e("number"==typeof t);var r=t%26,i=(t-r)/26,n=1<=this.length)return this._expand(i+1),this.words[i]|=n,this;for(var o=n,h=i;0!==o&&this.length>h;h++){var s=0|this.words[h];s+=o,o=s>>>26,s&=67108863,this.words[h]=s}return 0!==o&&(this.words[h]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(t){var r=0>t;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;this.strip();var i;if(this.length>1)i=1;else{r&&(t=-t),e(67108863>=t,"Number is too big");var n=0|this.words[0];i=n===t?0:t>n?-1:1}return 0!==this.negative?0|-i:i},o.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var r=this.ucmp(t);return 0!==this.negative?0|-r:r},o.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(t.length>this.length)return-1;for(var r=0,i=this.length-1;i>=0;i--){var e=0|this.words[i],n=0|t.words[i];if(e!==n){n>e?r=-1:e>n&&(r=1);break}}return r},o.prototype.gtn=function(t){return 1===this.cmpn(t)},o.prototype.gt=function(t){return 1===this.cmp(t)},o.prototype.gten=function(t){return this.cmpn(t)>=0},o.prototype.gte=function(t){return this.cmp(t)>=0},o.prototype.ltn=function(t){return this.cmpn(t)===-1},o.prototype.lt=function(t){return this.cmp(t)===-1},o.prototype.lten=function(t){return this.cmpn(t)<=0},o.prototype.lte=function(t){return this.cmp(t)<=0},o.prototype.eqn=function(t){return 0===this.cmpn(t)},o.prototype.eq=function(t){return 0===this.cmp(t)},o.red=function(t){return new y(t)},o.prototype.toRed=function(t){return e(!this.red,"Already a number in reduction context"),e(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},o.prototype.fromRed=function(){return e(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(t){return this.red=t,this},o.prototype.forceRed=function(t){return e(!this.red,"Already a number in reduction context"),this._forceRed(t)},o.prototype.redAdd=function(t){return e(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},o.prototype.redIAdd=function(t){return e(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},o.prototype.redSub=function(t){return e(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},o.prototype.redISub=function(t){return e(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},o.prototype.redShl=function(t){return e(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},o.prototype.redMul=function(t){return e(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},o.prototype.redIMul=function(t){return e(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},o.prototype.redSqr=function(){return e(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return e(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return e(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return e(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return e(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(t){return e(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var B={k256:null,p224:null,p192:null,p25519:null};p.prototype._tmp=function(){var t=new o(null);return t.words=Array(Math.ceil(this.n/13)),t},p.prototype.ireduce=function(t){var r,i=t;do this.split(i,this.tmp),i=this.imulK(i),i=i.iadd(this.tmp),r=i.bitLength();while(r>this.n);var e=this.n>r?-1:i.ucmp(this.p);return 0===e?(i.words[0]=0,i.length=1):e>0?i.isub(this.p):i.strip(),i},p.prototype.split=function(t,r){t.iushrn(this.n,0,r)},p.prototype.imulK=function(t){return t.imul(this.k)},n(d,p),d.prototype.split=function(t,r){for(var i=4194303,e=Math.min(t.length,9),n=0;e>n;n++)r.words[n]=t.words[n];if(r.length=e,9>=t.length)return t.words[0]=0,void(t.length=1);var o=t.words[9];for(r.words[r.length++]=o&i,n=10;t.length>n;n++){var h=0|t.words[n];t.words[n-10]=(h&i)<<4|o>>>22,o=h}o>>>=22,t.words[n-10]=o,t.length-=0===o&&t.length>10?10:9},d.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var r=0,i=0;t.length>i;i++){var e=0|t.words[i];r+=977*e,t.words[i]=67108863&r,r=64*e+(r/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},n(c,p),n(g,p),n(v,p),v.prototype.imulK=function(t){for(var r=0,i=0;t.length>i;i++){var e=19*(0|t.words[i])+r,n=67108863&e;e>>>=26,t.words[i]=n,r=e}return 0!==r&&(t.words[t.length++]=r),t},o._prime=function S(t){if(B[t])return B[t];var S;if("k256"===t)S=new d;else if("p224"===t)S=new c;else if("p192"===t)S=new g;else{if("p25519"!==t)throw Error("Unknown prime "+t);S=new v}return B[t]=S,S},y.prototype._verify1=function(t){e(0===t.negative,"red works only with positives"),e(t.red,"red works only with red numbers")},y.prototype._verify2=function(t,r){e(0===(t.negative|r.negative),"red works only with positives"),e(t.red&&t.red===r.red,"red works only with red numbers")},y.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},y.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},y.prototype.add=function(t,r){this._verify2(t,r);var i=t.add(r);return i.cmp(this.m)<0||i.isub(this.m),i._forceRed(this)},y.prototype.iadd=function(t,r){this._verify2(t,r);var i=t.iadd(r);return i.cmp(this.m)<0||i.isub(this.m),i},y.prototype.sub=function(t,r){this._verify2(t,r);var i=t.sub(r);return i.cmpn(0)<0&&i.iadd(this.m),i._forceRed(this)},y.prototype.isub=function(t,r){this._verify2(t,r);var i=t.isub(r);return i.cmpn(0)<0&&i.iadd(this.m),i},y.prototype.shl=function(t,r){return this._verify1(t),this.imod(t.ushln(r))},y.prototype.imul=function(t,r){return this._verify2(t,r),this.imod(t.imul(r))},y.prototype.mul=function(t,r){return this._verify2(t,r),this.imod(t.mul(r))},y.prototype.isqr=function(t){return this.imul(t,t.clone())},y.prototype.sqr=function(t){return this.mul(t,t)},y.prototype.sqrt=function(t){if(t.isZero())return t.clone();var r=this.m.andln(3);if(e(r%2===1),3===r){var i=this.m.add(new o(1)).iushrn(2);return this.pow(t,i)}for(var n=this.m.subn(1),h=0;!n.isZero()&&0===n.andln(1);)h++,n.iushrn(1);e(!n.isZero());var s=new o(1).toRed(this),u=s.redNeg(),a=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new o(2*f*f).toRed(this);0!==this.pow(f,a).cmp(u);)f.redIAdd(u);for(var l=this.pow(f,n),m=this.pow(t,n.addn(1).iushrn(1)),p=this.pow(t,n),d=h;0!==p.cmp(s);){for(var c=p,g=0;0!==c.cmp(s);g++)c=c.redSqr();e(d>g);var v=this.pow(l,new o(1).iushln(d-g-1));m=m.redMul(v),l=v.redSqr(),p=p.redMul(l),d=g}return m},y.prototype.invm=function(t){ -var r=t._invmp(this.m);return 0!==r.negative?(r.negative=0,this.imod(r).redNeg()):this.imod(r)},y.prototype.pow=function(t,r){if(r.isZero())return new o(1);if(0===r.cmpn(1))return t.clone();var i=4,e=Array(1<n;n++)e[n]=this.mul(e[n-1],t);var h=e[0],s=0,u=0,a=r.bitLength()%26;for(0===a&&(a=26),n=r.length-1;n>=0;n--){for(var f=r.words[n],l=a-1;l>=0;l--){var m=f>>l&1;h!==e[0]&&(h=this.sqr(h)),0!==m||0!==s?(s<<=1,s|=m,u++,(u===i||0===n&&0===l)&&(h=this.mul(h,e[s]),u=0,s=0)):u=0}a=26}return h},y.prototype.convertTo=function(t){var r=t.umod(this.m);return r===t?r.clone():r},y.prototype.convertFrom=function(t){var r=t.clone();return r.red=null,r},o.mont=function(t){return new M(t)},n(M,y),M.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},M.prototype.convertFrom=function(t){var r=this.imod(t.mul(this.rinv));return r.red=null,r},M.prototype.imul=function(t,r){if(t.isZero()||r.isZero())return t.words[0]=0,t.length=1,t;var i=t.imul(r),e=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=i.isub(e).iushrn(this.shift),o=n;return n.cmp(this.m)<0?n.cmpn(0)<0&&(o=n.iadd(this.m)):o=n.isub(this.m),o._forceRed(this)},M.prototype.mul=function(t,r){if(t.isZero()||r.isZero())return new o(0)._forceRed(this);var i=t.mul(r),e=i.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=i.isub(e).iushrn(this.shift),h=n;return n.cmp(this.m)<0?n.cmpn(0)<0&&(h=n.iadd(this.m)):h=n.isub(this.m),h._forceRed(this)},M.prototype.invm=function(t){var r=this.imod(t._invmp(this.m).mul(this.r2));return r._forceRed(this)}}(void 0===t||t,this)}).call(r,i(9)(t))},function(t,r){r.read=function(t,r,i,e,n){var o,h,s=8*n-e-1,u=(1<>1,f=-7,l=i?n-1:0,m=i?-1:1,p=t[r+l];for(l+=m,o=p&(1<<-f)-1,p>>=-f,f+=s;f>0;o=256*o+t[r+l],l+=m,f-=8);for(h=o&(1<<-f)-1,o>>=-f,f+=e;f>0;h=256*h+t[r+l],l+=m,f-=8);if(0===o)o=1-a;else{if(o===u)return h?NaN:(p?-1:1)*(1/0);h+=Math.pow(2,e),o-=a}return(p?-1:1)*h*Math.pow(2,o-e)},r.write=function(t,r,i,e,n,o){var h,s,u,a=8*o-n-1,f=(1<>1,m=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,p=e?0:o-1,d=e?1:-1,c=0>r||0===r&&0>1/r?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(s=isNaN(r)?1:0,h=f):(h=Math.floor(Math.log(r)/Math.LN2),r*(u=Math.pow(2,-h))<1&&(h--,u*=2),r+=1>h+l?m*Math.pow(2,1-l):m/u,2>r*u||(h++,u/=2),f>h+l?1>h+l?(s=r*Math.pow(2,l-1)*Math.pow(2,n),h=0):(s=(r*u-1)*Math.pow(2,n),h+=l):(s=0,h=f));n>=8;t[i+p]=255&s,p+=d,s/=256,n-=8);for(h=h<0;t[i+p]=255&h,p+=d,h/=256,a-=8);t[i+p-d]|=128*c}},function(t,r){t.exports=function(t){if("string"!=typeof t)throw Error("[is-hex-prefixed] value must be type 'string', is currently type "+typeof t+", while checking isHexPrefixed.");return"0x"===t.slice(0,2)}},function(t,r){var i={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==i.call(t)}},function(t,r,i){var e=i(5);t.exports=function(t){return"string"!=typeof t?t:e(t)?t.slice(2):t}},function(t,r){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(i=window)}t.exports=i},function(t,r){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,configurable:!1,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,configurable:!1,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,r,i){t.exports=i(1)}])}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/number-to-bn/internals/webpack/webpack.config.js b/truebit-implementation/node_modules/number-to-bn/internals/webpack/webpack.config.js deleted file mode 100644 index 4fdb52b4..00000000 --- a/truebit-implementation/node_modules/number-to-bn/internals/webpack/webpack.config.js +++ /dev/null @@ -1,49 +0,0 @@ -var webpack = require('webpack'); // eslint-disable-line - -var env = process.env.NODE_ENV; // eslint-disable-line -var filename = 'number-to-bn'; // eslint-disable-line -var library = 'numberToBN'; // eslint-disable-line -var config = { - devtool: 'cheap-module-source-map', - entry: [ - './src/index.js', - ], - output: { - path: 'dist', - filename: filename + '.js', // eslint-disable-line - library: library, // eslint-disable-line - libraryTarget: 'umd', - umdNamedDefine: true, - }, - plugins: [ - new webpack.BannerPlugin({ banner: ' /* eslint-disable */ ', raw: true, entryOnly: true }), - new webpack.BannerPlugin({ banner: ' /* eslint-disable */ ', raw: true }), - new webpack.optimize.OccurrenceOrderPlugin(), - new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify(env), - }), - ], -}; - -if (env === 'production') { - config.output.filename = filename + '.min.js'; // eslint-disable-line - config.plugins - .push(new webpack.optimize.UglifyJsPlugin({ - compressor: { - pure_getters: true, - unsafe: true, - unsafe_comps: true, - warnings: false, - screw_ie8: false, - }, - mangle: { - screw_ie8: false, - }, - output: { - screw_ie8: false, - }, - })); - config.plugins.push(new webpack.optimize.DedupePlugin()); -} - -module.exports = config; diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/.npmignore b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/.npmignore deleted file mode 100644 index 6d1eebbd..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -benchmarks/ -coverage/ -node_modules/ -npm-debug.log -1.js -logo.png diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/.travis.yml b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/.travis.yml deleted file mode 100644 index 936b7b78..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -node_js: - - "0.10" - - "0.12" - - "4" - - "5" -env: - matrix: - - TEST_SUITE=unit -matrix: - include: - - node_js: "4" - env: TEST_SUITE=lint -script: npm run $TEST_SUITE diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/README.md b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/README.md deleted file mode 100644 index fee65baa..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# bn.js - -> BigNum in pure javascript - -[![Build Status](https://secure.travis-ci.org/indutny/bn.js.png)](http://travis-ci.org/indutny/bn.js) - -## Install -`npm install --save bn.js` - -## Usage - -```js -const BN = require('bn.js'); - -var a = new BN('dead', 16); -var b = new BN('101010', 2); - -var res = a.add(b); -console.log(res.toString(10)); // 57047 -``` - -**Note**: decimals are not supported in this library. - -## Notation - -### Prefixes - -There are several prefixes to instructions that affect the way the work. Here -is the list of them in the order of appearance in the function name: - -* `i` - perform operation in-place, storing the result in the host object (on - which the method was invoked). Might be used to avoid number allocation costs -* `u` - unsigned, ignore the sign of operands when performing operation, or - always return positive value. Second case applies to reduction operations - like `mod()`. In such cases if the result will be negative - modulo will be - added to the result to make it positive - -### Postfixes - -The only available postfix at the moment is: - -* `n` - which means that the argument of the function must be a plain JavaScript - number - -### Examples - -* `a.iadd(b)` - perform addition on `a` and `b`, storing the result in `a` -* `a.pmod(b)` - reduce `a` modulo `b`, returning positive value -* `a.iushln(13)` - shift bits of `a` left by 13 - -## Instructions - -Prefixes/postfixes are put in parens at the of the line. `endian` - could be -either `le` (little-endian) or `be` (big-endian). - -### Utilities - -* `a.clone()` - clone number -* `a.toString(base, length)` - convert to base-string and pad with zeroes -* `a.toNumber()` - convert to Javascript Number (limited to 53 bits) -* `a.toJSON()` - convert to JSON compatible hex string (alias of `toString(16)`) -* `a.toArray(endian, length)` - convert to byte `Array`, and optionally zero - pad to length, throwing if already exceeding -* `a.toArrayLike(type, endian, length)` - convert to an instance of `type`, - which must behave like an `Array` -* `a.toBuffer(endian, length)` - convert to Node.js Buffer (if available) -* `a.bitLength()` - get number of bits occupied -* `a.zeroBits()` - return number of less-significant consequent zero bits - (example: `1010000` has 4 zero bits) -* `a.byteLength()` - return number of bytes occupied -* `a.isNeg()` - true if the number is negative -* `a.isEven()` - no comments -* `a.isOdd()` - no comments -* `a.isZero()` - no comments -* `a.cmp(b)` - compare numbers and return `-1` (a `<` b), `0` (a `==` b), or `1` (a `>` b) - depending on the comparison result (`ucmp`, `cmpn`) -* `a.lt(b)` - `a` less than `b` (`n`) -* `a.lte(b)` - `a` less than or equals `b` (`n`) -* `a.gt(b)` - `a` greater than `b` (`n`) -* `a.gte(b)` - `a` greater than or equals `b` (`n`) -* `a.eq(b)` - `a` equals `b` (`n`) -* `a.toTwos(width)` - convert to two's complement representation, where `width` is bit width -* `a.fromTwos(width)` - convert from two's complement representation, where `width` is the bit width -* `a.isBN(object)` - returns true if the supplied `object` is a BN.js instance - -### Arithmetics - -* `a.neg()` - negate sign (`i`) -* `a.abs()` - absolute value (`i`) -* `a.add(b)` - addition (`i`, `n`, `in`) -* `a.sub(b)` - subtraction (`i`, `n`, `in`) -* `a.mul(b)` - multiply (`i`, `n`, `in`) -* `a.sqr()` - square (`i`) -* `a.pow(b)` - raise `a` to the power of `b` -* `a.div(b)` - divide (`divn`, `idivn`) -* `a.mod(b)` - reduct (`u`, `n`) (but no `umodn`) -* `a.divRound(b)` - rounded division - -### Bit operations - -* `a.or(b)` - or (`i`, `u`, `iu`) -* `a.and(b)` - and (`i`, `u`, `iu`, `andln`) (NOTE: `andln` is going to be replaced - with `andn` in future) -* `a.xor(b)` - xor (`i`, `u`, `iu`) -* `a.setn(b)` - set specified bit to `1` -* `a.shln(b)` - shift left (`i`, `u`, `iu`) -* `a.shrn(b)` - shift right (`i`, `u`, `iu`) -* `a.testn(b)` - test if specified bit is set -* `a.maskn(b)` - clear bits with indexes higher or equal to `b` (`i`) -* `a.bincn(b)` - add `1 << b` to the number -* `a.notn(w)` - not (for the width specified by `w`) (`i`) - -### Reduction - -* `a.gcd(b)` - GCD -* `a.egcd(b)` - Extended GCD results (`{ a: ..., b: ..., gcd: ... }`) -* `a.invm(b)` - inverse `a` modulo `b` - -## Fast reduction - -When doing lots of reductions using the same modulo, it might be beneficial to -use some tricks: like [Montgomery multiplication][0], or using special algorithm -for [Mersenne Prime][1]. - -### Reduction context - -To enable this tricks one should create a reduction context: - -```js -var red = BN.red(num); -``` -where `num` is just a BN instance. - -Or: - -```js -var red = BN.red(primeName); -``` - -Where `primeName` is either of these [Mersenne Primes][1]: - -* `'k256'` -* `'p224'` -* `'p192'` -* `'p25519'` - -Or: - -```js -var red = BN.mont(num); -``` - -To reduce numbers with [Montgomery trick][1]. `.mont()` is generally faster than -`.red(num)`, but slower than `BN.red(primeName)`. - -### Converting numbers - -Before performing anything in reduction context - numbers should be converted -to it. Usually, this means that one should: - -* Convert inputs to reducted ones -* Operate on them in reduction context -* Convert outputs back from the reduction context - -Here is how one may convert numbers to `red`: - -```js -var redA = a.toRed(red); -``` -Where `red` is a reduction context created using instructions above - -Here is how to convert them back: - -```js -var a = redA.fromRed(); -``` - -### Red instructions - -Most of the instructions from the very start of this readme have their -counterparts in red context: - -* `a.redAdd(b)`, `a.redIAdd(b)` -* `a.redSub(b)`, `a.redISub(b)` -* `a.redShl(num)` -* `a.redMul(b)`, `a.redIMul(b)` -* `a.redSqr()`, `a.redISqr()` -* `a.redSqrt()` - square root modulo reduction context's prime -* `a.redInvm()` - modular inverse of the number -* `a.redNeg()` -* `a.redPow(b)` - modular exponentiation - -## LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2015. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. - -[0]: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication -[1]: https://en.wikipedia.org/wiki/Mersenne_prime diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/lib/bn.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/lib/bn.js deleted file mode 100644 index 29a4c51a..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/lib/bn.js +++ /dev/null @@ -1,3427 +0,0 @@ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buf' + 'fer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/package.json b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/package.json deleted file mode 100644 index 5ca8a452..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "bn.js@4.11.6", - "_id": "bn.js@4.11.6", - "_inBundle": false, - "_integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "_location": "/number-to-bn/bn.js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "bn.js@4.11.6", - "name": "bn.js", - "escapedName": "bn.js", - "rawSpec": "4.11.6", - "saveSpec": null, - "fetchSpec": "4.11.6" - }, - "_requiredBy": [ - "/number-to-bn" - ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "_shasum": "53344adb14617a13f6e8dd2ce28905d1c0ba3215", - "_spec": "bn.js@4.11.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/number-to-bn", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/bn.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Big number implementation in pure javascript", - "devDependencies": { - "istanbul": "^0.3.5", - "mocha": "^2.1.0", - "semistandard": "^7.0.4" - }, - "homepage": "https://github.com/indutny/bn.js", - "keywords": [ - "BN", - "BigNum", - "Big number", - "Modulo", - "Montgomery" - ], - "license": "MIT", - "main": "lib/bn.js", - "name": "bn.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/bn.js.git" - }, - "scripts": { - "lint": "semistandard", - "test": "npm run lint && npm run unit", - "unit": "mocha --reporter=spec test/*-test.js" - }, - "version": "4.11.6" -} diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/arithmetic-test.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/arithmetic-test.js deleted file mode 100644 index c3a0d7d5..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/arithmetic-test.js +++ /dev/null @@ -1,635 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; -var fixtures = require('./fixtures'); - -describe('BN.js/Arithmetic', function () { - describe('.add()', function () { - it('should add numbers', function () { - assert.equal(new BN(14).add(new BN(26)).toString(16), '28'); - var k = new BN(0x1234); - var r = k; - - for (var i = 0; i < 257; i++) { - r = r.add(k); - } - - assert.equal(r.toString(16), '125868'); - }); - - it('should handle carry properly (in-place)', function () { - var k = new BN('abcdefabcdefabcdef', 16); - var r = new BN('deadbeef', 16); - - for (var i = 0; i < 257; i++) { - r.iadd(k); - } - - assert.equal(r.toString(16), 'ac79bd9b79be7a277bde'); - }); - - it('should properly do positive + negative', function () { - var a = new BN('abcd', 16); - var b = new BN('-abce', 16); - - assert.equal(a.iadd(b).toString(16), '-1'); - - a = new BN('abcd', 16); - b = new BN('-abce', 16); - - assert.equal(a.add(b).toString(16), '-1'); - assert.equal(b.add(a).toString(16), '-1'); - }); - }); - - describe('.iaddn()', function () { - it('should allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should add negative number', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(-200); - - assert.equal(a.toString(), '-300'); - }); - - it('should allow neg + pos with big number', function () { - var a = new BN('-1000000000', 10); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.toString(), '-999999800'); - }); - - it('should carry limb', function () { - var a = new BN('3ffffff', 16); - - assert.equal(a.iaddn(1).toString(16), '4000000'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).iaddn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.sub()', function () { - it('should subtract small numbers', function () { - assert.equal(new BN(26).sub(new BN(14)).toString(16), 'c'); - assert.equal(new BN(14).sub(new BN(26)).toString(16), '-c'); - assert.equal(new BN(26).sub(new BN(26)).toString(16), '0'); - assert.equal(new BN(-26).sub(new BN(26)).toString(16), '-34'); - }); - - var a = new BN( - '31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384' + - 'a7d8daef41395491e2', - 16); - var b = new BN( - '6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000', - 16); - var r = new BN( - '31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a67' + - '76281f34583ddb91e2', - 16); - - it('should subtract big numbers', function () { - assert.equal(a.sub(b).cmp(r), 0); - }); - - it('should subtract numbers in place', function () { - assert.equal(b.clone().isub(a).neg().cmp(r), 0); - }); - - it('should subtract with carry', function () { - // Carry and copy - var a = new BN('12345', 16); - var b = new BN('1000000000000', 16); - assert.equal(a.isub(b).toString(16), '-fffffffedcbb'); - - a = new BN('12345', 16); - b = new BN('1000000000000', 16); - assert.equal(b.isub(a).toString(16), 'fffffffedcbb'); - }); - }); - - describe('.isubn()', function () { - it('should subtract negative number', function () { - var r = new BN( - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16); - assert.equal(r.isubn(-1).toString(16), - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c'); - }); - - it('should work for positive numbers', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(200); - assert.equal(a.negative, 1); - assert.equal(a.toString(), '-300'); - }); - - it('should not allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(-200); - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should change sign on small numbers at 0', function () { - var a = new BN(0).subn(2); - assert.equal(a.toString(), '-2'); - }); - - it('should change sign on small numbers at 1', function () { - var a = new BN(1).subn(2); - assert.equal(a.toString(), '-1'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).isubn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - function testMethod (name, mul) { - describe(name, function () { - it('should multiply numbers of different signs', function () { - var offsets = [ - 1, // smallMulTo - 250, // comb10MulTo - 1000, // bigMulTo - 15000 // jumboMulTo - ]; - - for (var i = 0; i < offsets.length; ++i) { - var x = new BN(1).ishln(offsets[i]); - - assert.equal(mul(x, x).isNeg(), false); - assert.equal(mul(x, x.neg()).isNeg(), true); - assert.equal(mul(x.neg(), x).isNeg(), true); - assert.equal(mul(x.neg(), x.neg()).isNeg(), false); - } - }); - - it('should multiply with carry', function () { - var n = new BN(0x1001); - var r = n; - - for (var i = 0; i < 4; i++) { - r = mul(r, n); - } - - assert.equal(r.toString(16), '100500a00a005001'); - }); - - it('should correctly multiply big numbers', function () { - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal( - mul(n, n).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40'); - assert.equal( - mul(mul(n, n), n).toString(16), - '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b' + - '46e0cf2cb11667f795d5569482640fe5f628939467a01a612b02350' + - '0d0161e9730279a7561043af6197798e41b7432458463e64fa81158' + - '907322dc330562697d0d600'); - }); - - it('should multiply neg number on 0', function () { - assert.equal( - mul(new BN('-100000000000'), new BN('3').div(new BN('4'))) - .toString(16), - '0' - ); - }); - - it('should regress mul big numbers', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - assert.equal(mul(q, q).toString(16), qs); - }); - }); - } - - testMethod('.mul()', function (x, y) { - return BN.prototype.mul.apply(x, [ y ]); - }); - - testMethod('.mulf()', function (x, y) { - return BN.prototype.mulf.apply(x, [ y ]); - }); - - describe('.imul()', function () { - it('should multiply numbers in-place', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('deadbeefa551edebabba8', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - - a = new BN('abcdef01234567890abcd214a25123f512361e6d236', 16); - b = new BN('deadbeefa551edebabba8121234fd21bac0341324dd', 16); - c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should multiply by 0', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('0', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should regress mul big numbers in-place', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - - assert.equal(q.isqr().toString(16), qs); - }); - }); - - describe('.muln()', function () { - it('should multiply number by small number', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('dead', 16); - var c = a.mul(b); - - assert.equal(a.muln(0xdead).toString(16), c.toString(16)); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).imuln(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.pow()', function () { - it('should raise number to the power', function () { - var a = new BN('ab', 16); - var b = new BN('13', 10); - var c = a.pow(b); - - assert.equal(c.toString(16), '15963da06977df51909c9ba5b'); - }); - }); - - describe('.div()', function () { - it('should divide small numbers (<=26 bits)', function () { - assert.equal(new BN('256').div(new BN(10)).toString(10), - '25'); - assert.equal(new BN('-256').div(new BN(10)).toString(10), - '-25'); - assert.equal(new BN('256').div(new BN(-10)).toString(10), - '-25'); - assert.equal(new BN('-256').div(new BN(-10)).toString(10), - '25'); - - assert.equal(new BN('10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('10').div(new BN(-256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(-256)).toString(10), - '0'); - }); - - it('should divide large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').div(new BN('611111124969028')) - .toString(10), '1'); - assert.equal(new BN('-1222222225255589').div(new BN('611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('1222222225255589').div(new BN('-611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('-1222222225255589').div(new BN('-611111124969028')) - .toString(10), '1'); - - assert.equal(new BN('611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - }); - - it('should divide numbers', function () { - assert.equal(new BN('69527932928').div(new BN('16974594')).toString(16), - 'fff'); - assert.equal(new BN('-69527932928').div(new BN('16974594')).toString(16), - '-fff'); - - var b = new BN( - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40', - 16); - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal(b.div(n).toString(16), n.toString(16)); - - assert.equal(new BN('1').div(new BN('-5')).toString(10), '0'); - }); - - it('should not fail on regression after moving to _wordDiv', function () { - // Regression after moving to word div - var p = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', - 16); - var a = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16); - var as = a.sqr(); - assert.equal( - as.div(p).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9'); - - p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.div(p).toString(16), - 'ffffffff00000002000000000000000000000001000000000000000000000001'); - }); - }); - - describe('.idivn()', function () { - it('should divide numbers in-place', function () { - assert.equal(new BN('10', 16).idivn(3).toString(16), '5'); - assert.equal(new BN('12', 16).idivn(3).toString(16), '6'); - assert.equal(new BN('10000000000000000').idivn(3).toString(10), - '3333333333333333'); - assert.equal( - new BN('100000000000000000000000000000').idivn(3).toString(10), - '33333333333333333333333333333'); - - var t = new BN(3); - assert.equal( - new BN('12345678901234567890123456', 16).idivn(3).toString(16), - new BN('12345678901234567890123456', 16).div(t).toString(16)); - }); - }); - - describe('.divRound()', function () { - it('should divide numbers with rounding', function () { - assert.equal(new BN(9).divRound(new BN(20)).toString(10), - '0'); - assert.equal(new BN(10).divRound(new BN(20)).toString(10), - '1'); - assert.equal(new BN(150).divRound(new BN(20)).toString(10), - '8'); - assert.equal(new BN(149).divRound(new BN(20)).toString(10), - '7'); - assert.equal(new BN(149).divRound(new BN(17)).toString(10), - '9'); - assert.equal(new BN(144).divRound(new BN(17)).toString(10), - '8'); - assert.equal(new BN(-144).divRound(new BN(17)).toString(10), - '-8'); - }); - - it('should return 1 on exact division', function () { - assert.equal(new BN(144).divRound(new BN(144)).toString(10), '1'); - }); - }); - - describe('.mod()', function () { - it('should modulo small numbers (<=26 bits)', function () { - assert.equal(new BN('256').mod(new BN(10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(10)).toString(10), - '-6'); - assert.equal(new BN('256').mod(new BN(-10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(-10)).toString(10), - '-6'); - - assert.equal(new BN('10').mod(new BN(256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(256)).toString(10), - '-10'); - assert.equal(new BN('10').mod(new BN(-256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(-256)).toString(10), - '-10'); - }); - - it('should modulo large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').mod(new BN('611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('611111124969028')) - .toString(10), '-611111100286561'); - assert.equal(new BN('1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '-611111100286561'); - - assert.equal(new BN('611111124969028').mod(new BN('1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('1222222225255589')) - .toString(10), '-611111124969028'); - assert.equal(new BN('611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '-611111124969028'); - }); - - it('should mod numbers', function () { - assert.equal(new BN('10').mod(new BN(256)).toString(16), - 'a'); - assert.equal(new BN('69527932928').mod(new BN('16974594')).toString(16), - '102f302'); - - // 178 = 10 * 17 + 8 - assert.equal(new BN(178).div(new BN(10)).toNumber(), 17); - assert.equal(new BN(178).mod(new BN(10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(10)).toNumber(), 8); - - // -178 = 10 * (-17) + (-8) - assert.equal(new BN(-178).div(new BN(10)).toNumber(), -17); - assert.equal(new BN(-178).mod(new BN(10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(10)).toNumber(), 2); - - // 178 = -10 * (-17) + 8 - assert.equal(new BN(178).div(new BN(-10)).toNumber(), -17); - assert.equal(new BN(178).mod(new BN(-10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(-10)).toNumber(), 8); - - // -178 = -10 * (17) + (-8) - assert.equal(new BN(-178).div(new BN(-10)).toNumber(), 17); - assert.equal(new BN(-178).mod(new BN(-10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(-10)).toNumber(), 2); - - // -4 = 1 * (-3) + -1 - assert.equal(new BN(-4).div(new BN(-3)).toNumber(), 1); - assert.equal(new BN(-4).mod(new BN(-3)).toNumber(), -1); - - // -4 = -1 * (3) + -1 - assert.equal(new BN(-4).mod(new BN(3)).toNumber(), -1); - // -4 = 1 * (-3) + (-1 + 3) - assert.equal(new BN(-4).umod(new BN(-3)).toNumber(), 2); - - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.mod(p).toString(16), - '0'); - }); - - it('should properly carry the sign inside division', function () { - var a = new BN('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex'); - var b = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe', - 'hex'); - - assert.equal(a.mul(b).mod(a).cmpn(0), 0); - }); - }); - - describe('.modn()', function () { - it('should act like .mod() on small numbers', function () { - assert.equal(new BN('10', 16).modn(256).toString(16), '10'); - assert.equal(new BN('100', 16).modn(256).toString(16), '0'); - assert.equal(new BN('1001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(257).toString(16), - new BN('100000000001', 16).mod(new BN(257)).toString(16)); - assert.equal(new BN('123456789012', 16).modn(3).toString(16), - new BN('123456789012', 16).mod(new BN(3)).toString(16)); - }); - }); - - describe('.abs()', function () { - it('should return absolute value', function () { - assert.equal(new BN(0x1001).abs().toString(), '4097'); - assert.equal(new BN(-0x1001).abs().toString(), '4097'); - assert.equal(new BN('ffffffff', 16).abs().toString(), '4294967295'); - }); - }); - - describe('.invm()', function () { - it('should invert relatively-prime numbers', function () { - var p = new BN(257); - var a = new BN(3); - var b = a.invm(p); - assert.equal(a.mul(b).mod(p).toString(16), '1'); - - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - a = new BN('deadbeef', 16); - b = a.invm(p192); - assert.equal(a.mul(b).mod(p192).toString(16), '1'); - - // Even base - var phi = new BN('872d9b030ba368706b68932cf07a0e0c', 16); - var e = new BN(65537); - var d = e.invm(phi); - assert.equal(e.mul(d).mod(phi).toString(16), '1'); - - // Even base (take #2) - a = new BN('5'); - b = new BN('6'); - var r = a.invm(b); - assert.equal(r.mul(a).mod(b).toString(16), '1'); - }); - }); - - describe('.gcd()', function () { - it('should return GCD', function () { - assert.equal(new BN(3).gcd(new BN(2)).toString(10), '1'); - assert.equal(new BN(18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(-12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(0)).toString(10), '18'); - assert.equal(new BN(0).gcd(new BN(-18)).toString(10), '18'); - assert.equal(new BN(2).gcd(new BN(0)).toString(10), '2'); - assert.equal(new BN(0).gcd(new BN(3)).toString(10), '3'); - assert.equal(new BN(0).gcd(new BN(0)).toString(10), '0'); - }); - }); - - describe('.egcd()', function () { - it('should return EGCD', function () { - assert.equal(new BN(3).egcd(new BN(2)).gcd.toString(10), '1'); - assert.equal(new BN(18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(-18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(0).egcd(new BN(12)).gcd.toString(10), '12'); - }); - it('should not allow 0 input', function () { - assert.throws(function () { - new BN(1).egcd(0); - }, /^Error: Assertion failed$/); - }); - it('should not allow negative input', function () { - assert.throws(function () { - new BN(1).egcd(-1); - }, /^Error: Assertion failed$/); - }); - }); - - describe('BN.max(a, b)', function () { - it('should return maximum', function () { - assert.equal(BN.max(new BN(3), new BN(2)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(3)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.max(new BN(2), new BN(-2)).toString(16), '2'); - }); - }); - - describe('BN.min(a, b)', function () { - it('should return minimum', function () { - assert.equal(BN.min(new BN(3), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(3)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(-2)).toString(16), '-2'); - }); - }); - - describe('BN.ineg', function () { - it('shouldn\'t change sign for zero', function () { - assert.equal(new BN(0).ineg().toString(10), '0'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/binary-test.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/binary-test.js deleted file mode 100644 index 37b6421d..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/binary-test.js +++ /dev/null @@ -1,233 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Binary', function () { - describe('.shl()', function () { - it('should shl numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').shln(45).toString(16), - '206060200000000000000'); - }); - - it('should ushl numbers', function () { - assert.equal(new BN('69527932928').ushln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').ushln(45).toString(16), - '206060200000000000000'); - }); - }); - - describe('.shr()', function () { - it('should shr numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').shrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').shrn(256).toString(16), - '0'); - }); - - it('should ushr numbers', function () { - assert.equal(new BN('69527932928').ushrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').ushrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').ushrn(256).toString(16), - '0'); - }); - }); - - describe('.bincn()', function () { - it('should increment bit', function () { - assert.equal(new BN(0).bincn(1).toString(16), '2'); - assert.equal(new BN(2).bincn(1).toString(16), '4'); - assert.equal(new BN(2).bincn(1).bincn(1).toString(16), - new BN(2).bincn(2).toString(16)); - assert.equal(new BN(0xffffff).bincn(1).toString(16), '1000001'); - assert.equal(new BN(2).bincn(63).toString(16), - '8000000000000002'); - }); - }); - - describe('.imaskn()', function () { - it('should mask bits in-place', function () { - assert.equal(new BN(0).imaskn(1).toString(16), '0'); - assert.equal(new BN(3).imaskn(1).toString(16), '1'); - assert.equal(new BN('123456789', 16).imaskn(4).toString(16), '9'); - assert.equal(new BN('123456789', 16).imaskn(16).toString(16), '6789'); - assert.equal(new BN('123456789', 16).imaskn(28).toString(16), '3456789'); - }); - - it('should not mask when number is bigger than length', function () { - assert.equal(new BN(0xe3).imaskn(56).toString(16), 'e3'); - assert.equal(new BN(0xe3).imaskn(26).toString(16), 'e3'); - }); - }); - - describe('.testn()', function () { - it('should support test specific bit', function () { - [ - 'ff', - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' - ].forEach(function (hex) { - var bn = new BN(hex, 16); - var bl = bn.bitLength(); - - for (var i = 0; i < bl; ++i) { - assert.equal(bn.testn(i), true); - } - - // test off the end - assert.equal(bn.testn(bl), false); - }); - - var xbits = '01111001010111001001000100011101' + - '11010011101100011000111001011101' + - '10010100111000000001011000111101' + - '01011111001111100100011110000010' + - '01011010100111010001010011000100' + - '01101001011110100001001111100110' + - '001110010111'; - - var x = new BN( - '23478905234580795234378912401239784125643978256123048348957342' - ); - for (var i = 0; i < x.bitLength(); ++i) { - assert.equal(x.testn(i), (xbits.charAt(i) === '1'), 'Failed @ bit ' + i); - } - }); - - it('should have short-cuts', function () { - var x = new BN('abcd', 16); - assert(!x.testn(128)); - }); - }); - - describe('.and()', function () { - it('should and numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .and(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .and(new BN('abcd', 16)).toString(16), - 'abcd'); - }); - }); - - describe('.iand()', function () { - it('should iand numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .iand(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - assert.equal(new BN('1000000000000000000000000000000000000001', 2) - .iand(new BN('1', 2)) - .toString(2), '1'); - assert.equal(new BN('1', 2) - .iand(new BN('1000000000000000000000000000000000000001', 2)) - .toString(2), '1'); - }); - }); - - describe('.or()', function () { - it('should or numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .or(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - }); - - it('should or numbers of different limb-length', function () { - assert.equal( - new BN('abcd00000000', 16) - .or(new BN('abcd', 16)).toString(16), - 'abcd0000abcd'); - }); - }); - - describe('.ior()', function () { - it('should ior numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .ior(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - assert.equal(new BN('1000000000000000000000000000000000000000', 2) - .ior(new BN('1', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - assert.equal(new BN('1', 2) - .ior(new BN('1000000000000000000000000000000000000000', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - }); - }); - - describe('.xor()', function () { - it('should xor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .xor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - }); - }); - - describe('.ixor()', function () { - it('should ixor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1', 2)) - .toString(2), '11001100110011001100110011001101'); - assert.equal(new BN('1', 2) - .ixor(new BN('11001100110011001100110011001100', 2)) - .toString(2), '11001100110011001100110011001101'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .xor(new BN('abcd', 16)).toString(16), - 'abcd00005432'); - }); - }); - - describe('.setn()', function () { - it('should allow single bits to be set', function () { - assert.equal(new BN(0).setn(2, true).toString(2), '100'); - assert.equal(new BN(0).setn(27, true).toString(2), - '1000000000000000000000000000'); - assert.equal(new BN(0).setn(63, true).toString(16), - new BN(1).iushln(63).toString(16)); - assert.equal(new BN('1000000000000000000000000001', 2).setn(27, false) - .toString(2), '1'); - assert.equal(new BN('101', 2).setn(2, false).toString(2), '1'); - }); - }); - - describe('.notn()', function () { - it('should allow bitwise negation', function () { - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(32).toString(2), - '11111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(32).toString(2), - '11111111111111111111111111000111'); - assert.equal(new BN('111000111', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111111000111'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/constructor-test.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/constructor-test.js deleted file mode 100644 index 11c7df08..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/constructor-test.js +++ /dev/null @@ -1,149 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Constructor', function () { - describe('with Smi input', function () { - it('should accept one limb number', function () { - assert.equal(new BN(12345).toString(16), '3039'); - }); - - it('should accept two-limb number', function () { - assert.equal(new BN(0x4123456).toString(16), '4123456'); - }); - - it('should accept 52 bits of precision', function () { - var num = Math.pow(2, 52); - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should accept max safe integer', function () { - var num = Math.pow(2, 53) - 1; - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should not accept an unsafe integer', function () { - var num = Math.pow(2, 53); - - assert.throws(function () { - return new BN(num, 10); - }, /^Error: Assertion failed$/); - }); - - it('should accept two-limb LE number', function () { - assert.equal(new BN(0x4123456, null, 'le').toString(16), '56341204'); - }); - }); - - describe('with String input', function () { - it('should accept base-16', function () { - assert.equal(new BN('1A6B765D8CDF', 16).toString(16), '1a6b765d8cdf'); - assert.equal(new BN('1A6B765D8CDF', 16).toString(), '29048849665247'); - }); - - it('should accept base-hex', function () { - assert.equal(new BN('FF', 'hex').toString(), '255'); - }); - - it('should accept base-16 with spaces', function () { - var num = 'a89c e5af8724 c0a23e0e 0ff77500'; - assert.equal(new BN(num, 16).toString(16), num.replace(/ /g, '')); - }); - - it('should accept long base-16', function () { - var num = '123456789abcdef123456789abcdef123456789abcdef'; - assert.equal(new BN(num, 16).toString(16), num); - }); - - it('should accept positive base-10', function () { - assert.equal(new BN('10654321').toString(), '10654321'); - assert.equal(new BN('29048849665247').toString(16), '1a6b765d8cdf'); - }); - - it('should accept negative base-10', function () { - assert.equal(new BN('-29048849665247').toString(16), '-1a6b765d8cdf'); - }); - - it('should accept long base-10', function () { - var num = '10000000000000000'; - assert.equal(new BN(num).toString(10), num); - }); - - it('should accept base-2', function () { - var base2 = '11111111111111111111111111111111111111111111111111111'; - assert.equal(new BN(base2, 2).toString(2), base2); - }); - - it('should accept base-36', function () { - var base36 = 'zzZzzzZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; - assert.equal(new BN(base36, 36).toString(36), base36.toLowerCase()); - }); - - it('should not overflow limbs during base-10', function () { - var num = '65820182292848241686198767302293' + - '20890292528855852623664389292032'; - assert(new BN(num).words[0] < 0x4000000); - }); - - it('should accept base-16 LE integer', function () { - assert.equal(new BN('1A6B765D8CDF', 16, 'le').toString(16), - 'df8c5d766b1a'); - }); - }); - - describe('with Array input', function () { - it('should not fail on empty array', function () { - assert.equal(new BN([]).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN([ 1, 2, 3 ]).toString(16), '10203'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toString(16), '1020304'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ]).toString(16), '102030405'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toString(16), - '102030405060708'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray().join(','), '1,2,3,4'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray().join(','), - '1,2,3,4,5,6,7,8'); - }); - - it('should import little endian', function () { - assert.equal(new BN([ 1, 2, 3 ], 10, 'le').toString(16), '30201'); - assert.equal(new BN([ 1, 2, 3, 4 ], 10, 'le').toString(16), '4030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 10, 'le').toString(16), - '504030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ], 'le').toString(16), - '807060504030201'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray('le').join(','), '4,3,2,1'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray('le').join(','), - '8,7,6,5,4,3,2,1'); - }); - - it('should import big endian with implicit base', function () { - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 'le').toString(16), '504030201'); - }); - }); - - // the Array code is able to handle Buffer - describe('with Buffer input', function () { - it('should not fail on empty Buffer', function () { - assert.equal(new BN(new Buffer(0)).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex')).toString(16), '10203'); - }); - - it('should import little endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex'), 'le').toString(16), '30201'); - }); - }); - - describe('with BN input', function () { - it('should clone BN', function () { - var num = new BN(12345); - assert.equal(new BN(num).toString(10), '12345'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/fixtures.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/fixtures.js deleted file mode 100644 index 39fd661d..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/fixtures.js +++ /dev/null @@ -1,264 +0,0 @@ -exports.dhGroups = { - p16: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199' + - 'ffffffffffffffff', - priv: '6d5923e6449122cbbcc1b96093e0b7e4fd3e469f58daddae' + - '53b49b20664f4132675df9ce98ae0cfdcac0f4181ccb643b' + - '625f98104dcf6f7d8e81961e2cab4b5014895260cb977c7d' + - '2f981f8532fb5da60b3676dfe57f293f05d525866053ac7e' + - '65abfd19241146e92e64f309a97ef3b529af4d6189fa416c' + - '9e1a816c3bdf88e5edf48fbd8233ef9038bb46faa95122c0' + - '5a426be72039639cd2d53d37254b3d258960dcb33c255ede' + - '20e9d7b4b123c8b4f4b986f53cdd510d042166f7dd7dca98' + - '7c39ab36381ba30a5fdd027eb6128d2ef8e5802a2194d422' + - 'b05fe6e1cb4817789b923d8636c1ec4b7601c90da3ddc178' + - '52f59217ae070d87f2e75cbfb6ff92430ad26a71c8373452' + - 'ae1cc5c93350e2d7b87e0acfeba401aaf518580937bf0b6c' + - '341f8c49165a47e49ce50853989d07171c00f43dcddddf72' + - '94fb9c3f4e1124e98ef656b797ef48974ddcd43a21fa06d0' + - '565ae8ce494747ce9e0ea0166e76eb45279e5c6471db7df8' + - 'cc88764be29666de9c545e72da36da2f7a352fb17bdeb982' + - 'a6dc0193ec4bf00b2e533efd6cd4d46e6fb237b775615576' + - 'dd6c7c7bbc087a25e6909d1ebc6e5b38e5c8472c0fc429c6' + - 'f17da1838cbcd9bbef57c5b5522fd6053e62ba21fe97c826' + - 'd3889d0cc17e5fa00b54d8d9f0f46fb523698af965950f4b' + - '941369e180f0aece3870d9335f2301db251595d173902cad' + - '394eaa6ffef8be6c', - pub: 'd53703b7340bc89bfc47176d351e5cf86d5a18d9662eca3c' + - '9759c83b6ccda8859649a5866524d77f79e501db923416ca' + - '2636243836d3e6df752defc0fb19cc386e3ae48ad647753f' + - 'bf415e2612f8a9fd01efe7aca249589590c7e6a0332630bb' + - '29c5b3501265d720213790556f0f1d114a9e2071be3620bd' + - '4ee1e8bb96689ac9e226f0a4203025f0267adc273a43582b' + - '00b70b490343529eaec4dcff140773cd6654658517f51193' + - '13f21f0a8e04fe7d7b21ffeca85ff8f87c42bb8d9cb13a72' + - 'c00e9c6e9dfcedda0777af951cc8ccab90d35e915e707d8e' + - '4c2aca219547dd78e9a1a0730accdc9ad0b854e51edd1e91' + - '4756760bab156ca6e3cb9c625cf0870def34e9ac2e552800' + - 'd6ce506d43dbbc75acfa0c8d8fb12daa3c783fb726f187d5' + - '58131779239c912d389d0511e0f3a81969d12aeee670e48f' + - 'ba41f7ed9f10705543689c2506b976a8ffabed45e33795b0' + - '1df4f6b993a33d1deab1316a67419afa31fbb6fdd252ee8c' + - '7c7d1d016c44e3fcf6b41898d7f206aa33760b505e4eff2e' + - 'c624bc7fe636b1d59e45d6f904fc391419f13d1f0cdb5b6c' + - '2378b09434159917dde709f8a6b5dc30994d056e3f964371' + - '11587ac7af0a442b8367a7bd940f752ddabf31cf01171e24' + - 'd78df136e9681cd974ce4f858a5fb6efd3234a91857bb52d' + - '9e7b414a8bc66db4b5a73bbeccfb6eb764b4f0cbf0375136' + - 'b024b04e698d54a5' - }, - p17: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934028492' + - '36c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bd' + - 'f8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831' + - '179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1b' + - 'db7f1447e6cc254b332051512bd7af426fb8f401378cd2bf' + - '5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6' + - 'd55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f3' + - '23a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aa' + - 'cc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be328' + - '06a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55c' + - 'da56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee' + - '12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff', - priv: '6017f2bc23e1caff5b0a8b4e1fc72422b5204415787801dc' + - '025762b8dbb98ab57603aaaa27c4e6bdf742b4a1726b9375' + - 'a8ca3cf07771779589831d8bd18ddeb79c43e7e77d433950' + - 'e652e49df35b11fa09644874d71d62fdaffb580816c2c88c' + - '2c4a2eefd4a660360316741b05a15a2e37f236692ad3c463' + - 'fff559938fc6b77176e84e1bb47fb41af691c5eb7bb81bd8' + - 'c918f52625a1128f754b08f5a1403b84667231c4dfe07ed4' + - '326234c113931ce606037e960f35a2dfdec38a5f057884d3' + - '0af8fab3be39c1eeb390205fd65982191fc21d5aa30ddf51' + - 'a8e1c58c0c19fc4b4a7380ea9e836aaf671c90c29bc4bcc7' + - '813811aa436a7a9005de9b507957c56a9caa1351b6efc620' + - '7225a18f6e97f830fb6a8c4f03b82f4611e67ab9497b9271' + - 'd6ac252793cc3e5538990dbd894d2dbc2d152801937d9f74' + - 'da4b741b50b4d40e4c75e2ac163f7b397fd555648b249f97' + - 'ffe58ffb6d096aa84534c4c5729cff137759bd34e80db4ab' + - '47e2b9c52064e7f0bf677f72ac9e5d0c6606943683f9d12f' + - '180cf065a5cb8ec3179a874f358847a907f8471d15f1e728' + - '7023249d6d13c82da52628654438f47b8b5cdf4761fbf6ad' + - '9219eceac657dbd06cf2ab776ad4c968f81c3d039367f0a4' + - 'd77c7ec4435c27b6c147071665100063b5666e06eb2fb2cc' + - '3159ba34bc98ca346342195f6f1fb053ddc3bc1873564d40' + - '1c6738cdf764d6e1ff25ca5926f80102ea6593c17170966b' + - 'b5d7352dd7fb821230237ea3ebed1f920feaadbd21be295a' + - '69f2083deae9c5cdf5f4830eb04b7c1f80cc61c17232d79f' + - '7ecc2cc462a7965f804001c89982734e5abba2d31df1b012' + - '152c6b226dff34510b54be8c2cd68d795def66c57a3abfb6' + - '896f1d139e633417f8c694764974d268f46ece3a8d6616ea' + - 'a592144be48ee1e0a1595d3e5edfede5b27cec6c48ceb2ff' + - 'b42cb44275851b0ebf87dfc9aa2d0cb0805e9454b051dfe8' + - 'a29fadd82491a4b4c23f2d06ba45483ab59976da1433c9ce' + - '500164b957a04cf62dd67595319b512fc4b998424d1164dd' + - 'bbe5d1a0f7257cbb04ec9b5ed92079a1502d98725023ecb2', - pub: '3bf836229c7dd874fe37c1790d201e82ed8e192ed61571ca' + - '7285264974eb2a0171f3747b2fc23969a916cbd21e14f7e2' + - 'f0d72dcd2247affba926f9e7bb99944cb5609aed85e71b89' + - 'e89d2651550cb5bd8281bd3144066af78f194032aa777739' + - 'cccb7862a1af401f99f7e5c693f25ddce2dedd9686633820' + - 'd28d0f5ed0c6b5a094f5fe6170b8e2cbc9dff118398baee6' + - 'e895a6301cb6e881b3cae749a5bdf5c56fc897ff68bc73f2' + - '4811bb108b882872bade1f147d886a415cda2b93dd90190c' + - 'be5c2dd53fe78add5960e97f58ff2506afe437f4cf4c912a' + - '397c1a2139ac6207d3ab76e6b7ffd23bb6866dd7f87a9ae5' + - '578789084ff2d06ea0d30156d7a10496e8ebe094f5703539' + - '730f5fdbebc066de417be82c99c7da59953071f49da7878d' + - 'a588775ff2a7f0084de390f009f372af75cdeba292b08ea8' + - '4bd13a87e1ca678f9ad148145f7cef3620d69a891be46fbb' + - 'cad858e2401ec0fd72abdea2f643e6d0197b7646fbb83220' + - '0f4cf7a7f6a7559f9fb0d0f1680822af9dbd8dec4cd1b5e1' + - '7bc799e902d9fe746ddf41da3b7020350d3600347398999a' + - 'baf75d53e03ad2ee17de8a2032f1008c6c2e6618b62f225b' + - 'a2f350179445debe68500fcbb6cae970a9920e321b468b74' + - '5fb524fb88abbcacdca121d737c44d30724227a99745c209' + - 'b970d1ff93bbc9f28b01b4e714d6c9cbd9ea032d4e964d8e' + - '8fff01db095160c20b7646d9fcd314c4bc11bcc232aeccc0' + - 'fbedccbc786951025597522eef283e3f56b44561a0765783' + - '420128638c257e54b972a76e4261892d81222b3e2039c61a' + - 'ab8408fcaac3d634f848ab3ee65ea1bd13c6cd75d2e78060' + - 'e13cf67fbef8de66d2049e26c0541c679fff3e6afc290efe' + - '875c213df9678e4a7ec484bc87dae5f0a1c26d7583e38941' + - 'b7c68b004d4df8b004b666f9448aac1cc3ea21461f41ea5d' + - 'd0f7a9e6161cfe0f58bcfd304bdc11d78c2e9d542e86c0b5' + - '6985cc83f693f686eaac17411a8247bf62f5ccc7782349b5' + - 'cc1f20e312fa2acc0197154d1bfee507e8db77e8f2732f2d' + - '641440ccf248e8643b2bd1e1f9e8239356ab91098fcb431d', - q: 'a899c59999bf877d96442d284359783bdc64b5f878b688fe' + - '51407f0526e616553ad0aaaac4d5bed3046f10a1faaf42bb' + - '2342dc4b7908eea0c46e4c4576897675c2bfdc4467870d3d' + - 'cd90adaed4359237a4bc6924bfb99aa6bf5f5ede15b574ea' + - 'e977eac096f3c67d09bda574c6306c6123fa89d2f086b8dc' + - 'ff92bc570c18d83fe6c810ccfd22ce4c749ef5e6ead3fffe' + - 'c63d95e0e3fde1df9db6a35fa1d107058f37e41957769199' + - 'd945dd7a373622c65f0af3fd9eb1ddc5c764bbfaf7a3dc37' + - '2548e683b970dac4aa4b9869080d2376c9adecebb84e172c' + - '09aeeb25fb8df23e60033260c4f8aac6b8b98ab894b1fb84' + - 'ebb83c0fb2081c3f3eee07f44e24d8fabf76f19ed167b0d7' + - 'ff971565aa4efa3625fce5a43ceeaa3eebb3ce88a00f597f' + - '048c69292b38dba2103ecdd5ec4ccfe3b2d87fa6202f334b' + - 'c1cab83b608dfc875b650b69f2c7e23c0b2b4adf149a6100' + - 'db1b6dbad4679ecb1ea95eafaba3bd00db11c2134f5a8686' + - '358b8b2ab49a1b2e85e1e45caeac5cd4dc0b3b5fffba8871' + - '1c6baf399edd48dad5e5c313702737a6dbdcede80ca358e5' + - '1d1c4fe42e8948a084403f61baed38aa9a1a5ce2918e9f33' + - '100050a430b47bc592995606440272a4994677577a6aaa1b' + - 'a101045dbec5a4e9566dab5445d1af3ed19519f07ac4e2a8' + - 'bd0a84b01978f203a9125a0be020f71fab56c2c9e344d4f4' + - '12d53d3cd8eb74ca5122002e931e3cb0bd4b7492436be17a' + - 'd7ebe27148671f59432c36d8c56eb762655711cfc8471f70' + - '83a8b7283bcb3b1b1d47d37c23d030288cfcef05fbdb4e16' + - '652ee03ee7b77056a808cd700bc3d9ef826eca9a59be959c' + - '947c865d6b372a1ca2d503d7df6d7611b12111665438475a' + - '1c64145849b3da8c2d343410df892d958db232617f9896f1' + - 'de95b8b5a47132be80dd65298c7f2047858409bf762dbc05' + - 'a62ca392ac40cfb8201a0607a2cae07d99a307625f2b2d04' + - 'fe83fbd3ab53602263410f143b73d5b46fc761882e78c782' + - 'd2c36e716a770a7aefaf7f76cea872db7bffefdbc4c2f9e0' + - '39c19adac915e7a63dcb8c8c78c113f29a3e0bc10e100ce0', - qs: '6f0a2fb763eaeb8eb324d564f03d4a55fdcd709e5f1b65e9' + - '5702b0141182f9f945d71bc3e64a7dfdae7482a7dd5a4e58' + - 'bc38f78de2013f2c468a621f08536969d2c8d011bb3bc259' + - '2124692c91140a5472cad224acdacdeae5751dadfdf068b8' + - '77bfa7374694c6a7be159fc3d24ff9eeeecaf62580427ad8' + - '622d48c51a1c4b1701d768c79d8c819776e096d2694107a2' + - 'f3ec0c32224795b59d32894834039dacb369280afb221bc0' + - '90570a93cf409889b818bb30cccee98b2aa26dbba0f28499' + - '08e1a3cd43fa1f1fb71049e5c77c3724d74dc351d9989057' + - '37bbda3805bd6b1293da8774410fb66e3194e18cdb304dd9' + - 'a0b59b583dcbc9fc045ac9d56aea5cfc9f8a0b95da1e11b7' + - '574d1f976e45fe12294997fac66ca0b83fc056183549e850' + - 'a11413cc4abbe39a211e8c8cbf82f2a23266b3c10ab9e286' + - '07a1b6088909cddff856e1eb6b2cde8bdac53fa939827736' + - 'ca1b892f6c95899613442bd02dbdb747f02487718e2d3f22' + - 'f73734d29767ed8d0e346d0c4098b6fdcb4df7d0c4d29603' + - '5bffe80d6c65ae0a1b814150d349096baaf950f2caf298d2' + - 'b292a1d48cf82b10734fe8cedfa16914076dfe3e9b51337b' + - 'ed28ea1e6824bb717b641ca0e526e175d3e5ed7892aebab0' + - 'f207562cc938a821e2956107c09b6ce4049adddcd0b7505d' + - '49ae6c69a20122461102d465d93dc03db026be54c303613a' + - 'b8e5ce3fd4f65d0b6162ff740a0bf5469ffd442d8c509cd2' + - '3b40dab90f6776ca17fc0678774bd6eee1fa85ababa52ec1' + - 'a15031eb677c6c488661dddd8b83d6031fe294489ded5f08' + - '8ad1689a14baeae7e688afa3033899c81f58de39b392ca94' + - 'af6f15a46f19fa95c06f9493c8b96a9be25e78b9ea35013b' + - 'caa76de6303939299d07426a88a334278fc3d0d9fa71373e' + - 'be51d3c1076ab93a11d3d0d703366ff8cde4c11261d488e5' + - '60a2bdf3bfe2476032294800d6a4a39d306e65c6d7d8d66e' + - '5ec63eee94531e83a9bddc458a2b508285c0ee10b7bd94da' + - '2815a0c5bd5b2e15cbe66355e42f5af8955cdfc0b3a4996d' + - '288db1f4b32b15643b18193e378cb7491f3c3951cdd044b1' + - 'a519571bffac2da986f5f1d506c66530a55f70751e24fa8e' + - 'd83ac2347f4069fb561a5565e78c6f0207da24e889a93a96' + - '65f717d9fe8a2938a09ab5f81be7ccecf466c0397fc15a57' + - '469939793f302739765773c256a3ca55d0548afd117a7cae' + - '98ca7e0d749a130c7b743d376848e255f8fdbe4cb4480b63' + - 'cd2c015d1020cf095d175f3ca9dcdfbaf1b2a6e6468eee4c' + - 'c750f2132a77f376bd9782b9d0ff4da98621b898e251a263' + - '4301ba2214a8c430b2f7a79dbbfd6d7ff6e9b0c137b025ff' + - '587c0bf912f0b19d4fff96b1ecd2ca990c89b386055c60f2' + - '3b94214bd55096f17a7b2c0fa12b333235101cd6f28a128c' + - '782e8a72671adadebbd073ded30bd7f09fb693565dcf0bf3' + - '090c21d13e5b0989dd8956f18f17f4f69449a13549c9d80a' + - '77e5e61b5aeeee9528634100e7bc390672f0ded1ca53555b' + - 'abddbcf700b9da6192255bddf50a76b709fbed251dce4c7e' + - '1ca36b85d1e97c1bc9d38c887a5adf140f9eeef674c31422' + - 'e65f63cae719f8c1324e42fa5fd8500899ef5aa3f9856aa7' + - 'ce10c85600a040343204f36bfeab8cfa6e9deb8a2edd2a8e' + - '018d00c7c9fa3a251ad0f57183c37e6377797653f382ec7a' + - '2b0145e16d3c856bc3634b46d90d7198aff12aff88a30e34' + - 'e2bfaf62705f3382576a9d3eeb0829fca2387b5b654af46e' + - '5cf6316fb57d59e5ea6c369061ac64d99671b0e516529dd5' + - 'd9c48ea0503e55fee090d36c5ea8b5954f6fcc0060794e1c' + - 'b7bc24aa1e5c0142fd4ce6e8fd5aa92a7bf84317ea9e1642' + - 'b6995bac6705adf93cbce72433ed0871139970d640f67b78' + - 'e63a7a6d849db2567df69ac7d79f8c62664ac221df228289' + - 'd0a4f9ebd9acb4f87d49da64e51a619fd3f3baccbd9feb12' + - '5abe0cc2c8d17ed1d8546da2b6c641f4d3020a5f9b9f26ac' + - '16546c2d61385505612275ea344c2bbf1ce890023738f715' + - '5e9eba6a071678c8ebd009c328c3eb643679de86e69a9fa5' + - '67a9e146030ff03d546310a0a568c5ba0070e0da22f2cef8' + - '54714b04d399bbc8fd261f9e8efcd0e83bdbc3f5cfb2d024' + - '3e398478cc598e000124eb8858f9df8f52946c2a1ca5c400' - } -}; diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/pummel/dh-group-test.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/pummel/dh-group-test.js deleted file mode 100644 index 37a259ff..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/pummel/dh-group-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../../').BN; -var fixtures = require('../fixtures'); - -describe('BN.js/Slow DH test', function () { - var groups = fixtures.dhGroups; - Object.keys(groups).forEach(function (name) { - it('should match public key for ' + name + ' group', function () { - var group = groups[name]; - - this.timeout(3600 * 1000); - - var base = new BN(2); - var mont = BN.red(new BN(group.prime, 16)); - var priv = new BN(group.priv, 16); - var multed = base.toRed(mont).redPow(priv).fromRed(); - var actual = new Buffer(multed.toArray()); - assert.equal(actual.toString('hex'), group.pub); - }); - }); -}); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/red-test.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/red-test.js deleted file mode 100644 index fc2498c9..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/red-test.js +++ /dev/null @@ -1,263 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Reduction context', function () { - function testMethod (name, fn) { - describe(name + ' method', function () { - it('should support add, iadd, sub, isub operations', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(123).toRed(m); - var b = new BN(231).toRed(m); - - assert.equal(a.redAdd(b).fromRed().toString(10), '97'); - assert.equal(a.redSub(b).fromRed().toString(10), '149'); - assert.equal(b.redSub(a).fromRed().toString(10), '108'); - - assert.equal(a.clone().redIAdd(b).fromRed().toString(10), '97'); - assert.equal(a.clone().redISub(b).fromRed().toString(10), '149'); - assert.equal(b.clone().redISub(a).fromRed().toString(10), '108'); - }); - - it('should support pow and mul operations', function () { - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p192); - var a = new BN(123); - var b = new BN(231); - var c = a.toRed(m).redMul(b.toRed(m)).fromRed(); - assert(c.cmp(a.mul(b).mod(p192)) === 0); - - assert.equal(a.toRed(m).redPow(new BN(3)).fromRed() - .cmp(a.sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(4)).fromRed() - .cmp(a.sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(8)).fromRed() - .cmp(a.sqr().sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(9)).fromRed() - .cmp(a.sqr().sqr().sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(17)).fromRed() - .cmp(a.sqr().sqr().sqr().sqr().mul(a)), 0); - assert.equal( - a.toRed(m).redPow(new BN('deadbeefabbadead', 16)).fromRed() - .toString(16), - '3aa0e7e304e320b68ef61592bcb00341866d6fa66e11a4d6'); - }); - - it('should sqrtm numbers', function () { - var p = new BN(263); - var m = fn(p); - var q = new BN(11).toRed(m); - - var qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - m = fn(p); - - q = new BN(13).toRed(m); - qr = q.redSqrt(true, p); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(false, p); - assert.equal(qr.redSqr().cmp(q), 0); - - // Tonelli-shanks - p = new BN(13); - m = fn(p); - q = new BN(10).toRed(m); - assert.equal(q.redSqrt().fromRed().toString(10), '7'); - }); - - it('should invm numbers', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(3).toRed(m); - var b = a.redInvm(); - assert.equal(a.redMul(b).fromRed().toString(16), '1'); - }); - - it('should invm numbers (regression)', function () { - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'e1d969b8192fbac73ea5b7921896d6a2263d4d4077bb8e5055361d1f7f8163f3', - 16); - - var m = fn(p); - a = a.toRed(m); - - assert.equal(a.redInvm().fromRed().negative, 0); - }); - - it('should imul numbers', function () { - var p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p); - - var a = new BN('deadbeefabbadead', 16); - var b = new BN('abbadeadbeefdead', 16); - var c = a.mul(b).mod(p); - - assert.equal(a.toRed(m).redIMul(b.toRed(m)).fromRed().toString(16), - c.toString(16)); - }); - - it('should pow(base, 0) == 1', function () { - var base = new BN(256).toRed(BN.red('k256')); - var exponent = new BN(0); - var result = base.redPow(exponent); - assert.equal(result.toString(), '1'); - }); - - it('should shl numbers', function () { - var base = new BN(256).toRed(BN.red('k256')); - var result = base.redShl(1); - assert.equal(result.toString(), '512'); - }); - - it('should reduce when converting to red', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(5).toRed(m); - - assert.doesNotThrow(function () { - var b = a.redISub(new BN(512).toRed(m)); - b.redISub(new BN(512).toRed(m)); - }); - }); - - it('redNeg and zero value', function () { - var a = new BN(0).toRed(BN.red('k256')).redNeg(); - assert.equal(a.isZero(), true); - }); - - it('should not allow modulus <= 1', function () { - assert.throws(function () { - BN.red(new BN(0)); - }, /^Error: modulus must be greater than 1$/); - - assert.throws(function () { - BN.red(new BN(1)); - }, /^Error: modulus must be greater than 1$/); - - assert.doesNotThrow(function () { - BN.red(new BN(2)); - }); - }); - }); - } - - testMethod('Plain', BN.red); - testMethod('Montgomery', BN.mont); - - describe('Pseudo-Mersenne Primes', function () { - it('should reduce numbers mod k256', function () { - var p = BN._prime('k256'); - - assert.equal(p.ireduce(new BN(0xdead)).toString(16), 'dead'); - assert.equal(p.ireduce(new BN('deadbeef', 16)).toString(16), 'deadbeef'); - - var num = new BN('fedcba9876543210fedcba9876543210dead' + - 'fedcba9876543210fedcba9876543210dead', - 16); - var exp = num.mod(p.p).toString(16); - assert.equal(p.ireduce(num).toString(16), exp); - - var regr = new BN('f7e46df64c1815962bf7bc9c56128798' + - '3f4fcef9cb1979573163b477eab93959' + - '335dfb29ef07a4d835d22aa3b6797760' + - '70a8b8f59ba73d56d01a79af9', - 16); - exp = regr.mod(p.p).toString(16); - - assert.equal(p.ireduce(regr).toString(16), exp); - }); - - it('should not fail to invm number mod k256', function () { - var regr2 = new BN( - '6c150c4aa9a8cf1934485d40674d4a7cd494675537bda36d49405c5d2c6f496f', 16); - regr2 = regr2.toRed(BN.red('k256')); - assert.equal(regr2.redInvm().redMul(regr2).fromRed().cmpn(1), 0); - }); - - it('should correctly square the number', function () { - var p = BN._prime('k256').p; - var red = BN.red('k256'); - - var n = new BN('9cd8cb48c3281596139f147c1364a3ed' + - 'e88d3f310fdb0eb98c924e599ca1b3c9', - 16); - var expected = n.sqr().mod(p); - var actual = n.toRed(red).redSqr().fromRed(); - - assert.equal(actual.toString(16), expected.toString(16)); - }); - - it('redISqr should return right result', function () { - var n = new BN('30f28939', 16); - var actual = n.toRed(BN.red('k256')).redISqr().fromRed(); - assert.equal(actual.toString(16), '95bd93d19520eb1'); - }); - }); - - it('should avoid 4.1.0 regresion', function () { - function bits2int (obits, q) { - var bits = new BN(obits); - var shift = (obits.length << 3) - q.bitLength(); - if (shift > 0) { - bits.ishrn(shift); - } - return bits; - } - var t = new Buffer('aff1651e4cd6036d57aa8b2a05ccf1a9d5a40166340ecbbdc55' + - 'be10b568aa0aa3d05ce9a2fcec9df8ed018e29683c6051cb83e' + - '46ce31ba4edb045356a8d0d80b', 'hex'); - var g = new BN('5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670' + - '716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1' + - 'aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a' + - '338661d10461c0d135472085057f3494309ffa73c611f78b32adbb574' + - '0c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097b' + - 'c5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a3' + - '3afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd24871' + - '99874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f9' + - '96bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7', - 16); - var p = new BN('9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642' + - 'f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55' + - '757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9' + - 'f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b99' + - '3e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368' + - '213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca283716' + - '21cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d' + - '3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256' + - 'a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b', - 16); - var q = new BN('f2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde' + - '9998c1f', 16); - var k = bits2int(t, q); - var expectedR = '89ec4bb1400eccff8e7d9aa515cd1de7803f2daff09693ee7fd1353e' + - '90a68307'; - var r = g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); - assert.equal(r.toString(16), expectedR); - }); - - it('K256.split for 512 bits number should return equal numbers', function () { - var red = BN.red('k256'); - var input = new BN(1).iushln(512).subn(1); - assert.equal(input.bitLength(), 512); - var output = new BN(0); - red.prime.split(input, output); - assert.equal(input.cmp(output), 0); - }); -}); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/utils-test.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/utils-test.js deleted file mode 100644 index 8571905a..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/test/utils-test.js +++ /dev/null @@ -1,345 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Utils', function () { - describe('.toString()', function () { - describe('binary padding', function () { - it('should have a length of 256', function () { - var a = new BN(0); - - assert.equal(a.toString(2, 256).length, 256); - }); - }); - describe('hex padding', function () { - it('should have length of 8 from leading 15', function () { - var a = new BN('ffb9602', 16); - - assert.equal(a.toString('hex', 2).length, 8); - }); - - it('should have length of 8 from leading zero', function () { - var a = new BN('fb9604', 16); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 8 from leading zeros', function () { - var a = new BN(0); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 64 from leading 15', function () { - var a = new BN( - 'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 2).length, 64); - }); - - it('should have length of 64 from leading zero', function () { - var a = new BN( - 'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 64).length, 64); - }); - }); - }); - - describe('.isNeg()', function () { - it('should return true for negative numbers', function () { - assert.equal(new BN(-1).isNeg(), true); - assert.equal(new BN(1).isNeg(), false); - assert.equal(new BN(0).isNeg(), false); - assert.equal(new BN('-0', 10).isNeg(), false); - }); - }); - - describe('.isOdd()', function () { - it('should return true for odd numbers', function () { - assert.equal(new BN(0).isOdd(), false); - assert.equal(new BN(1).isOdd(), true); - assert.equal(new BN(2).isOdd(), false); - assert.equal(new BN('-0', 10).isOdd(), false); - assert.equal(new BN('-1', 10).isOdd(), true); - assert.equal(new BN('-2', 10).isOdd(), false); - }); - }); - - describe('.isEven()', function () { - it('should return true for even numbers', function () { - assert.equal(new BN(0).isEven(), true); - assert.equal(new BN(1).isEven(), false); - assert.equal(new BN(2).isEven(), true); - assert.equal(new BN('-0', 10).isEven(), true); - assert.equal(new BN('-1', 10).isEven(), false); - assert.equal(new BN('-2', 10).isEven(), true); - }); - }); - - describe('.isZero()', function () { - it('should return true for zero', function () { - assert.equal(new BN(0).isZero(), true); - assert.equal(new BN(1).isZero(), false); - assert.equal(new BN(0xffffffff).isZero(), false); - }); - }); - - describe('.bitLength()', function () { - it('should return proper bitLength', function () { - assert.equal(new BN(0).bitLength(), 0); - assert.equal(new BN(0x1).bitLength(), 1); - assert.equal(new BN(0x2).bitLength(), 2); - assert.equal(new BN(0x3).bitLength(), 2); - assert.equal(new BN(0x4).bitLength(), 3); - assert.equal(new BN(0x8).bitLength(), 4); - assert.equal(new BN(0x10).bitLength(), 5); - assert.equal(new BN(0x100).bitLength(), 9); - assert.equal(new BN(0x123456).bitLength(), 21); - assert.equal(new BN('123456789', 16).bitLength(), 33); - assert.equal(new BN('8023456789', 16).bitLength(), 40); - }); - }); - - describe('.byteLength()', function () { - it('should return proper byteLength', function () { - assert.equal(new BN(0).byteLength(), 0); - assert.equal(new BN(0x1).byteLength(), 1); - assert.equal(new BN(0x2).byteLength(), 1); - assert.equal(new BN(0x3).byteLength(), 1); - assert.equal(new BN(0x4).byteLength(), 1); - assert.equal(new BN(0x8).byteLength(), 1); - assert.equal(new BN(0x10).byteLength(), 1); - assert.equal(new BN(0x100).byteLength(), 2); - assert.equal(new BN(0x123456).byteLength(), 3); - assert.equal(new BN('123456789', 16).byteLength(), 5); - assert.equal(new BN('8023456789', 16).byteLength(), 5); - }); - }); - - describe('.toArray()', function () { - it('should return [ 0 ] for `0`', function () { - var n = new BN(0); - assert.deepEqual(n.toArray('be'), [ 0 ]); - assert.deepEqual(n.toArray('le'), [ 0 ]); - }); - - it('should zero pad to desired lengths', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toArray('be', 5), [ 0x00, 0x00, 0x12, 0x34, 0x56 ]); - assert.deepEqual(n.toArray('le', 5), [ 0x56, 0x34, 0x12, 0x00, 0x00 ]); - }); - - it('should throw when naturally larger than desired length', function () { - var n = new BN(0x123456); - assert.throws(function () { - n.toArray('be', 2); - }, /^Error: byte array longer than desired length$/); - }); - }); - - describe('.toBuffer', function () { - it('should return proper Buffer', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toBuffer('be', 5).toString('hex'), '0000123456'); - assert.deepEqual(n.toBuffer('le', 5).toString('hex'), '5634120000'); - }); - }); - - describe('.toNumber()', function () { - it('should return proper Number if below the limit', function () { - assert.deepEqual(new BN(0x123456).toNumber(), 0x123456); - assert.deepEqual(new BN(0x3ffffff).toNumber(), 0x3ffffff); - assert.deepEqual(new BN(0x4000000).toNumber(), 0x4000000); - assert.deepEqual(new BN(0x10000000000000).toNumber(), 0x10000000000000); - assert.deepEqual(new BN(0x10040004004000).toNumber(), 0x10040004004000); - assert.deepEqual(new BN(-0x123456).toNumber(), -0x123456); - assert.deepEqual(new BN(-0x3ffffff).toNumber(), -0x3ffffff); - assert.deepEqual(new BN(-0x4000000).toNumber(), -0x4000000); - assert.deepEqual(new BN(-0x10000000000000).toNumber(), -0x10000000000000); - assert.deepEqual(new BN(-0x10040004004000).toNumber(), -0x10040004004000); - }); - - it('should throw when number exceeds 53 bits', function () { - var n = new BN(1).iushln(54); - assert.throws(function () { - n.toNumber(); - }, /^Error: Number can only safely store up to 53 bits$/); - }); - }); - - describe('.zeroBits()', function () { - it('should return proper zeroBits', function () { - assert.equal(new BN(0).zeroBits(), 0); - assert.equal(new BN(0x1).zeroBits(), 0); - assert.equal(new BN(0x2).zeroBits(), 1); - assert.equal(new BN(0x3).zeroBits(), 0); - assert.equal(new BN(0x4).zeroBits(), 2); - assert.equal(new BN(0x8).zeroBits(), 3); - assert.equal(new BN(0x10).zeroBits(), 4); - assert.equal(new BN(0x100).zeroBits(), 8); - assert.equal(new BN(0x1000000).zeroBits(), 24); - assert.equal(new BN(0x123456).zeroBits(), 1); - }); - }); - - describe('.toJSON', function () { - it('should return hex string', function () { - assert.equal(new BN(0x123).toJSON(), '123'); - }); - }); - - describe('.cmpn', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmpn(42), 0); - assert.equal(new BN(42).cmpn(43), -1); - assert.equal(new BN(42).cmpn(41), 1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffe), 0); - assert.equal(new BN(0x3fffffe).cmpn(0x3ffffff), -1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffd), 1); - assert.throws(function () { - new BN(0x3fffffe).cmpn(0x4000000); - }, /^Error: Number is too big$/); - assert.equal(new BN(42).cmpn(-42), 1); - assert.equal(new BN(-42).cmpn(42), -1); - assert.equal(new BN(-42).cmpn(-42), 0); - assert.equal(1 / new BN(-42).cmpn(-42), Infinity); - }); - }); - - describe('.cmp', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmp(new BN(42)), 0); - assert.equal(new BN(42).cmp(new BN(43)), -1); - assert.equal(new BN(42).cmp(new BN(41)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffe)), 0); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3ffffff)), -1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffd)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x4000000)), -1); - assert.equal(new BN(42).cmp(new BN(-42)), 1); - assert.equal(new BN(-42).cmp(new BN(42)), -1); - assert.equal(new BN(-42).cmp(new BN(-42)), 0); - assert.equal(1 / new BN(-42).cmp(new BN(-42)), Infinity); - }); - }); - - describe('comparison shorthands', function () { - it('.gtn greater than', function () { - assert.equal(new BN(3).gtn(2), true); - assert.equal(new BN(3).gtn(3), false); - assert.equal(new BN(3).gtn(4), false); - }); - it('.gt greater than', function () { - assert.equal(new BN(3).gt(new BN(2)), true); - assert.equal(new BN(3).gt(new BN(3)), false); - assert.equal(new BN(3).gt(new BN(4)), false); - }); - it('.gten greater than or equal', function () { - assert.equal(new BN(3).gten(3), true); - assert.equal(new BN(3).gten(2), true); - assert.equal(new BN(3).gten(4), false); - }); - it('.gte greater than or equal', function () { - assert.equal(new BN(3).gte(new BN(3)), true); - assert.equal(new BN(3).gte(new BN(2)), true); - assert.equal(new BN(3).gte(new BN(4)), false); - }); - it('.ltn less than', function () { - assert.equal(new BN(2).ltn(3), true); - assert.equal(new BN(2).ltn(2), false); - assert.equal(new BN(2).ltn(1), false); - }); - it('.lt less than', function () { - assert.equal(new BN(2).lt(new BN(3)), true); - assert.equal(new BN(2).lt(new BN(2)), false); - assert.equal(new BN(2).lt(new BN(1)), false); - }); - it('.lten less than or equal', function () { - assert.equal(new BN(3).lten(3), true); - assert.equal(new BN(3).lten(2), false); - assert.equal(new BN(3).lten(4), true); - }); - it('.lte less than or equal', function () { - assert.equal(new BN(3).lte(new BN(3)), true); - assert.equal(new BN(3).lte(new BN(2)), false); - assert.equal(new BN(3).lte(new BN(4)), true); - }); - it('.eqn equal', function () { - assert.equal(new BN(3).eqn(3), true); - assert.equal(new BN(3).eqn(2), false); - assert.equal(new BN(3).eqn(4), false); - }); - it('.eq equal', function () { - assert.equal(new BN(3).eq(new BN(3)), true); - assert.equal(new BN(3).eq(new BN(2)), false); - assert.equal(new BN(3).eq(new BN(4)), false); - }); - }); - - describe('.fromTwos', function () { - it('should convert from two\'s complement to negative number', function () { - assert.equal(new BN('00000000', 16).fromTwos(32).toNumber(), 0); - assert.equal(new BN('00000001', 16).fromTwos(32).toNumber(), 1); - assert.equal(new BN('7fffffff', 16).fromTwos(32).toNumber(), 2147483647); - assert.equal(new BN('80000000', 16).fromTwos(32).toNumber(), -2147483648); - assert.equal(new BN('f0000000', 16).fromTwos(32).toNumber(), -268435456); - assert.equal(new BN('f1234567', 16).fromTwos(32).toNumber(), -249346713); - assert.equal(new BN('ffffffff', 16).fromTwos(32).toNumber(), -1); - assert.equal(new BN('fffffffe', 16).fromTwos(32).toNumber(), -2); - assert.equal(new BN('fffffffffffffffffffffffffffffffe', 16) - .fromTwos(128).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber(), -1); - assert.equal(new BN('7fffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10), - new BN('5789604461865809771178549250434395392663499' + - '2332820282019728792003956564819967', 10).toString(10)); - assert.equal(new BN('80000000000000000000000000000000' + - '00000000000000000000000000000000', 16).fromTwos(256).toString(10), - new BN('-578960446186580977117854925043439539266349' + - '92332820282019728792003956564819968', 10).toString(10)); - }); - }); - - describe('.toTwos', function () { - it('should convert from negative number to two\'s complement', function () { - assert.equal(new BN(0).toTwos(32).toString(16), '0'); - assert.equal(new BN(1).toTwos(32).toString(16), '1'); - assert.equal(new BN(2147483647).toTwos(32).toString(16), '7fffffff'); - assert.equal(new BN('-2147483648', 10).toTwos(32).toString(16), '80000000'); - assert.equal(new BN('-268435456', 10).toTwos(32).toString(16), 'f0000000'); - assert.equal(new BN('-249346713', 10).toTwos(32).toString(16), 'f1234567'); - assert.equal(new BN('-1', 10).toTwos(32).toString(16), 'ffffffff'); - assert.equal(new BN('-2', 10).toTwos(32).toString(16), 'fffffffe'); - assert.equal(new BN('-2', 10).toTwos(128).toString(16), - 'fffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-2', 10).toTwos(256).toString(16), - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-1', 10).toTwos(256).toString(16), - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('5789604461865809771178549250434395392663' + - '4992332820282019728792003956564819967', 10).toTwos(256).toString(16), - '7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('-578960446186580977117854925043439539266' + - '34992332820282019728792003956564819968', 10).toTwos(256).toString(16), - '8000000000000000000000000000000000000000000000000000000000000000'); - }); - }); - - describe('.isBN', function () { - it('should return true for BN', function () { - assert.equal(BN.isBN(new BN()), true); - }); - - it('should return false for everything else', function () { - assert.equal(BN.isBN(1), false); - assert.equal(BN.isBN([]), false); - assert.equal(BN.isBN({}), false); - }); - }); -}); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/util/genCombMulTo.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/util/genCombMulTo.js deleted file mode 100644 index 8b456c7c..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/util/genCombMulTo.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -// NOTE: This could be potentionally used to generate loop-less multiplications -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('var w' + k + ' = c;'); - src.push('c = 0;'); - for (var j = minJ; j <= maxJ; j++) { - i = k - j; - - src.push('lo = Math.imul(al' + i + ', bl' + j + ');'); - src.push('mid = Math.imul(al' + i + ', bh' + j + ');'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = Math.imul(ah' + i + ', bh' + j + ');'); - - src.push('w' + k + ' = (w' + k + ' + lo) | 0;'); - src.push('w' + k + ' = (w' + k + ' + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (c + hi) | 0;'); - src.push('c = (c + (mid >>> 13)) | 0;'); - src.push('c = (c + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/util/genCombMulTo10.js b/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/util/genCombMulTo10.js deleted file mode 100644 index cf2e6e80..00000000 --- a/truebit-implementation/node_modules/number-to-bn/node_modules/bn.js/util/genCombMulTo10.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');'); - src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');'); - src.push( - 'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;'); - src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');'); - - for (var j = minJ + 1; j <= maxJ; j++) { - i = k - j; - - src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;'); - } - - src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/number-to-bn/package.json b/truebit-implementation/node_modules/number-to-bn/package.json deleted file mode 100644 index f882c917..00000000 --- a/truebit-implementation/node_modules/number-to-bn/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_from": "number-to-bn@1.7.0", - "_id": "number-to-bn@1.7.0", - "_inBundle": false, - "_integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "_location": "/number-to-bn", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "number-to-bn@1.7.0", - "name": "number-to-bn", - "escapedName": "number-to-bn", - "rawSpec": "1.7.0", - "saveSpec": null, - "fetchSpec": "1.7.0" - }, - "_requiredBy": [ - "/ethjs-unit", - "/web3-utils" - ], - "_resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "_shasum": "bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0", - "_spec": "number-to-bn@1.7.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-utils", - "author": { - "name": "Nick Dodson", - "email": "thenickdodson@gmail.com" - }, - "bugs": { - "url": "https://github.com/SilentCicero/number-to-bn/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "deprecated": false, - "description": "A simple method that will convert numbers, hex, BN or bignumber.js object into a BN.js object.", - "devDependencies": { - "bignumber.js": "3.0.1", - "chai": "3.5.0", - "coveralls": "2.11.9", - "cross-env": "1.0.7", - "istanbul": "0.4.5", - "mocha": "3.2.0", - "pre-commit": "1.1.3", - "rimraf": "2.3.4", - "webpack": "2.1.0-beta.15", - "zuul": "3.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - }, - "homepage": "https://github.com/SilentCicero/number-to-bn#readme", - "keywords": [ - "number", - "to", - "bn", - "convert", - "hex", - "bn.js" - ], - "license": "MIT", - "main": "src/index.js", - "name": "number-to-bn", - "pre-commit": "build", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/SilentCicero/number-to-bn.git" - }, - "scripts": { - "build": "npm run build:umd && npm run build:umd:min", - "build:clean": "npm run test:clean && rimraf ./dist", - "build:stats": "cross-env BABEL_ENV=commonjs NODE_ENV=production webpack --config ./internals/webpack/webpack.config.js --progress --profile --json > dist/stats.json", - "build:umd": "cross-env BABEL_ENV=commonjs NODE_ENV=development webpack --config ./internals/webpack/webpack.config.js --progress", - "build:umd:min": "cross-env BABEL_ENV=commonjs NODE_ENV=production webpack --config ./internals/webpack/webpack.config.js --progress", - "coveralls": "npm run test-travis && cat ./coverage/lcov.info | coveralls", - "prebuild": "npm run build:clean && npm run test", - "prepublish": "npm run build", - "release": "npmpub", - "start": "npm test", - "test": "mocha ./src/tests/**/*.js -R spec --timeout 2000000", - "test-travis": "node ./node_modules/istanbul/lib/cli.js cover ./node_modules/mocha/bin/_mocha -- src/tests/**/*.js -R spec --timeout 2000000", - "test:browser": "zuul -- ./src/tests/*.js", - "test:browser-local": "zuul --local -- ./src/tests/*.js", - "test:clean": "rimraf ./coverage" - }, - "testling": { - "files": "src/tests/*.js" - }, - "version": "1.7.0" -} diff --git a/truebit-implementation/node_modules/number-to-bn/src/index.js b/truebit-implementation/node_modules/number-to-bn/src/index.js deleted file mode 100644 index bd099630..00000000 --- a/truebit-implementation/node_modules/number-to-bn/src/index.js +++ /dev/null @@ -1,38 +0,0 @@ -var BN = require('bn.js'); -var stripHexPrefix = require('strip-hex-prefix'); - -/** - * Returns a BN object, converts a number value to a BN - * @param {String|Number|Object} `arg` input a string number, hex string number, number, BigNumber or BN object - * @return {Object} `output` BN object of the number - * @throws if the argument is not an array, object that isn't a bignumber, not a string number or number - */ -module.exports = function numberToBN(arg) { - if (typeof arg === 'string' || typeof arg === 'number') { - var multiplier = new BN(1); // eslint-disable-line - var formattedString = String(arg).toLowerCase().trim(); - var isHexPrefixed = formattedString.substr(0, 2) === '0x' || formattedString.substr(0, 3) === '-0x'; - var stringArg = stripHexPrefix(formattedString); // eslint-disable-line - if (stringArg.substr(0, 1) === '-') { - stringArg = stripHexPrefix(stringArg.slice(1)); - multiplier = new BN(-1, 10); - } - stringArg = stringArg === '' ? '0' : stringArg; - - if ((!stringArg.match(/^-?[0-9]+$/) && stringArg.match(/^[0-9A-Fa-f]+$/)) - || stringArg.match(/^[a-fA-F]+$/) - || (isHexPrefixed === true && stringArg.match(/^[0-9A-Fa-f]+$/))) { - return new BN(stringArg, 16).mul(multiplier); - } - - if ((stringArg.match(/^-?[0-9]+$/) || stringArg === '') && isHexPrefixed === false) { - return new BN(stringArg, 10).mul(multiplier); - } - } else if (typeof arg === 'object' && arg.toString && (!arg.pop && !arg.push)) { - if (arg.toString(10).match(/^-?[0-9]+$/) && (arg.mul || arg.dividedToIntegerBy)) { - return new BN(arg.toString(10), 10); - } - } - - throw new Error('[number-to-bn] while converting number ' + JSON.stringify(arg) + ' to BN.js instance, error: invalid number value. Value must be an integer, hex string, BN or BigNumber instance. Note, decimals are not supported.'); -} diff --git a/truebit-implementation/node_modules/number-to-bn/src/tests/test.index.js b/truebit-implementation/node_modules/number-to-bn/src/tests/test.index.js deleted file mode 100644 index 4f20f19d..00000000 --- a/truebit-implementation/node_modules/number-to-bn/src/tests/test.index.js +++ /dev/null @@ -1,226 +0,0 @@ -const numberToBN = require('../index.js'); -const BigNumber = require('bignumber.js'); -const BN = require('bn.js'); -const assert = require('chai').assert; - -describe("numberToBN", () => { - describe("constructor", () => { - it("should be function export", () => { - assert.equal(typeof numberToBN, 'function'); - }); - }); - - const testCases = [ - { value: 0.1, expected: '0', shouldThrow: true }, - { value: '0.1', expected: '0', shouldThrow: true }, - { value: '-0.1', expected: '0', shouldThrow: true }, - { value: '.', expected: '0', shouldThrow: true }, - { value: [], expected: '0', shouldThrow: true }, - { value: undefined, expected: '0', shouldThrow: true }, - { value: null, expected: '0', shouldThrow: true }, - { value: {}, expected: '0', shouldThrow: true }, - { value: true, expected: '0', shouldThrow: true }, - { value: false, expected: '0', shouldThrow: true }, - { value: 'Z', expected: '0', shouldThrow: true }, - { value: 'z', expected: '0', shouldThrow: true }, - { value: 'zZZ', expected: '0', shouldThrow: true }, - { value: 'a.a', expected: '0', shouldThrow: true }, - { value: 'aA.af', expected: '0', shouldThrow: true }, - { value: '0xaA.af', expected: '0', shouldThrow: true }, - { value: '-0xaA.af', expected: '0', shouldThrow: true }, - { value: '-0xa.0a', expected: '0', shouldThrow: true }, - { value: '-0X0A.0a', expected: '0', shouldThrow: true }, - { value: '0x10', expected: '16', shouldThrow: false }, - { value: '-0x10', expected: '-16', shouldThrow: false }, - { value: '0X10', expected: '16', shouldThrow: false }, - { value: '0x', expected: '0', shouldThrow: false }, - { value: '0x10', expected: '16', shouldThrow: false }, - { value: '-0X10', expected: '-16', shouldThrow: false }, - { value: ' 0X10', expected: '16', shouldThrow: false }, - { value: ' -0X10', expected: '-16', shouldThrow: false }, - { value: "20938490284092380dfsjkZ", expected: '0', shouldThrow: true }, - { value: ":", expected: '0', shouldThrow: true }, - { value: "%", expected: '0', shouldThrow: true }, - { value: new BigNumber('100.001'), expected: '0', shouldThrow: true }, - { value: new BigNumber('-100.001'), expected: '0', shouldThrow: true }, - { value: new BigNumber('1.20'), expected: '0', shouldThrow: true }, - { value: 'Someone', expected: '0', shouldThrow: true }, - { value: '100.002fsdfdss', expected: '0', shouldThrow: true }, - { value: new Array(), expected: '-1', shouldThrow: true }, - { value: '0x9184e72a000', expected: new BN('9184e72a000', 16).toString(10) }, - { value: '0x15df', expected: new BN('15df', 16).toString(10) }, - { value: '0x57840CC2C', expected: new BN('57840CC2C', 16).toString(10) }, - { value: '9184E72a000', expected: new BN('9184e72a000', 16).toString(10) }, - { value: '15Df', expected: new BN('15df', 16).toString(10) }, - { value: '57840cC2C', expected: new BN('57840CC2C', 16).toString(10) }, - { value: '9184e72a000', expected: new BN('9184e72a000', 16).toString(10) }, - { value: '15df', expected: new BN('15df', 16).toString(10) }, - { value: '57840CC2C', expected: new BN('57840CC2C', 16).toString(10) }, - { value: ' -9184e72a000 ', expected: new BN('-9184e72a000', 16).toString(10) }, - { value: ' -15df ', expected: new BN('-15df', 16).toString(10) }, - { value: ' -57840CC2C ', expected: new BN('-57840CC2C', 16).toString(10) }, - { value: '-9184e72a000', expected: new BN('-9184e72a000', 16).toString(10) }, - { value: '-15df', expected: new BN('-15df', 16).toString(10) }, - { value: '-57840CC2C', expected: new BN('-57840CC2C', 16).toString(10) }, - { value: ' 0x9184e72a000', expected: new BN('9184e72a000', 16).toString(10) }, - { value: ' 0x15df', expected: new BN('15df', 16).toString(10) }, - { value: ' 0x57840CC2C', expected: new BN('57840CC2C', 16).toString(10) }, - { value: '-0x9184e72a000', expected: new BN('-9184e72a000', 16).toString(10) }, - { value: '-0x15df', expected: new BN('-15df', 16).toString(10) }, - { value: '-0x57840CC2C', expected: new BN('-57840CC2C', 16).toString(10) }, - { value: '', expected: '0', shouldThrow: false }, - { value: '-', expected: '0', shouldThrow: false }, - { value: 0, expected: '0', shouldThrow: false }, - { value: 1, expected: '1', shouldThrow: false }, - { value: -0, expected: '0', shouldThrow: false }, - { value: ' 0', expected: '0', shouldThrow: false }, - { value: ' 1', expected: '1', shouldThrow: false }, - { value: ' -0', expected: '0', shouldThrow: false }, - { value: ' -1 ', expected: '-1', shouldThrow: false }, - { value: ' 0 ', expected: '0', shouldThrow: false }, - { value: ' 1 ', expected: '1', shouldThrow: false }, - { value: ' -0 ', expected: '0', shouldThrow: false }, - { value: ' -1 ', expected: '-1', shouldThrow: false }, - { value: '0 ', expected: '0', shouldThrow: false }, - { value: '1 ', expected: '1', shouldThrow: false }, - { value: '-0 ', expected: '0', shouldThrow: false }, - { value: '-1 ', expected: '-1', shouldThrow: false }, - { value: '0', expected: '0', shouldThrow: false }, - { value: '1', expected: '1', shouldThrow: false }, - { value: '-0', expected: '0', shouldThrow: false }, - { value: '-1', expected: '-1', shouldThrow: false }, - { value: new BN(0), expected: '0', shouldThrow: false }, - { value: new BN(1), expected: '1', shouldThrow: false }, - { value: new BN(-1), expected: '-1', shouldThrow: false }, - { value: new BN(-0), expected: '0', shouldThrow: false }, - { value: new BigNumber(0), expected: '0', shouldThrow: false }, - { value: new BigNumber(1), expected: '1', shouldThrow: false }, - { value: new BigNumber('-1'), expected: '-1', shouldThrow: false }, - { value: new BigNumber('-0'), expected: '0', shouldThrow: false }, - { value: -92348723897, expected: '-92348723897', shouldThrow: false }, - { value: 24387298347, expected: '24387298347', shouldThrow: false }, - { value: 'a', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: '0a', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: '0xa', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: '0x0a', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: 'A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: '0A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: '0xA', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: '0x0A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: '0X0A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' a', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0a', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0xa', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0x0a', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0xA', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0x0A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0X0A', expected: new BN('a', 16).toString(10), shouldThrow: false }, - { value: ' 0aF', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' 0xaf', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' 0x0AF', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' Af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' 0Af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' 0xAf', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' 0x0AF', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: ' 0X0Af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: 'af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: '0af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: '0xaf', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: '0x0af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: 'Af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: '0Af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: '0xAf', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: '0x0Af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: '0X0Af', expected: new BN('af', 16).toString(10), shouldThrow: false }, - { value: new BigNumber('423879248942387943287923489724387987923'), expected: '423879248942387943287923489724387987923', shouldThrow: false }, - { value: new BN('423879248942387943287923489724387987923'), expected: '423879248942387943287923489724387987923', shouldThrow: false }, - { value: new BigNumber('24897234987'), expected: '24897234987', shouldThrow: false }, - { value: new BN('24897234987'), expected: '24897234987', shouldThrow: false }, - { value: new BigNumber('-423879248942387943287923489724387987923'), expected: '-423879248942387943287923489724387987923', shouldThrow: false }, - { value: new BN('-423879248942387943287923489724387987923'), expected: '-423879248942387943287923489724387987923', shouldThrow: false }, - { value: new BigNumber('-24897234987'), expected: '-24897234987', shouldThrow: false }, - { value: new BN('-24897234987'), expected: '-24897234987', shouldThrow: false }, - - // web3 tests - { value: 1, expected: '1' }, - { value: '1', expected: '1' }, - { value: '0x1', expected: '1'}, - { value: '0x01', expected: '1'}, - { value: 15, expected: '15'}, - { value: '15', expected: '15'}, - { value: '0xf', expected: '15'}, - { value: '0x0f', expected: '15'}, - { value: new BN('f', 16), expected: '15'}, - { value: new BigNumber('f', 16), expected: '15'}, - { value: -1, expected: '-1'}, - { value: '-1', expected: '-1'}, - { value: '-0x1', expected: '-1'}, - { value: '-0x01', expected: '-1'}, - { value: -15, expected: '-15'}, - { value: '-15', expected: '-15'}, - { value: '-0xf', expected: '-15'}, - { value: '-0x0f', expected: '-15'}, - { value: '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: '-0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: 0, expected: '0'}, - { value: '0', expected: '0'}, - { value: '0x0', expected: '0'}, - { value: -0, expected: '0'}, - { value: '-0', expected: '0'}, - { value: '-0x0', expected: '0'}, - { value: new BN(0), expected: '0'}, - { value: new BigNumber(0), expected: '0'}, - - { value: new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16), expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: new BN('fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', 16), expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: new BN('-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16), expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: new BN('-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', 16), expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - - // BigNumber found to improperly handle large hex nums... - // { value: new BigNumber('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16), expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - // { value: new BigNumber('fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', 16), expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - // { value: new BigNumber('-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16), expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - // { value: new BigNumber('-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd', 16), expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - - { value: ' 87234987239872349872489724897248972348972389472498728723897234', expected: '87234987239872349872489724897248972348972389472498728723897234', shouldThrow: false }, - { value: ' 0x87234987239872349872489724897248972348972389472498728723897234', expected: '238767897175128767816754103632273854819223082003987283874830606953481859636', shouldThrow: false }, - { value: ' -0x87234987239872349872489724897248972348972389472498728723897234 ', expected: '-238767897175128767816754103632273854819223082003987283874830606953481859636', shouldThrow: false }, - { value: ' 0xfffffffffFffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: ' 0xfffffffffffffffffffffffffffffffffffffffFfffffffffffffffffffffffD ', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: ' -0xfffffffffffffffffffFffffffffffffffffffffffffffffffffffffffffffff', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: ' -0xfffffffffffffffffffffffffffffffffffffffffffffffffFfffffffffffffd ', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: ' fffffffffFffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: ' fffffffffffffffffffffffffffffffffffffffFfffffffffffffffffffffffD ', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: ' -fffffffffffffffffffFffffffffffffffffffffffffffffffffffffffffffff', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: ' -fffffffffffffffffffffffffffffffffffffffffffffffffFfffffffffffffd ', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - - { value: '87234987239872349872489724897248972348972389472498728723897234', expected: '87234987239872349872489724897248972348972389472498728723897234', shouldThrow: false }, - { value: '0x87234987239872349872489724897248972348972389472498728723897234', expected: '238767897175128767816754103632273854819223082003987283874830606953481859636', shouldThrow: false }, - { value: '-0x87234987239872349872489724897248972348972389472498728723897234', expected: '-238767897175128767816754103632273854819223082003987283874830606953481859636', shouldThrow: false }, - { value: '0xfffffffffFffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: '0xfffffffffffffffffffffffffffffffffffffffFfffffffffffffffffffffffD', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: '-0xfffffffffffffffffffFffffffffffffffffffffffffffffffffffffffffffff', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: '-0xfffffffffffffffffffffffffffffffffffffffffffffffffFfffffffffffffd', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: 'fffffffffFffffffffffffffffffffffffffffffffffffffffffffffffffffff', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: 'fffffffffffffffffffffffffffffffffffffffFfffffffffffffffffffffffD', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - { value: '-fffffffffffffffffffFffffffffffffffffffffffffffffffffffffffffffff', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639935'}, - { value: '-fffffffffffffffffffffffffffffffffffffffffffffffffFfffffffffffffd', expected: '-115792089237316195423570985008687907853269984665640564039457584007913129639933'}, - ]; - - testCases.forEach(function (test) { - if (test.shouldThrow === true) { - it('should turn ' + test.value + ' to throw Error.. ', function () { - assert.throws(() => numberToBN(test.value), Error); - }); - } else { - it('should turn ' + test.value + ' to ' + test.expected, function () { - assert.equal(numberToBN(test.value).toString(10), test.expected); - }); - } - }); -}); diff --git a/truebit-implementation/node_modules/oauth-sign/LICENSE b/truebit-implementation/node_modules/oauth-sign/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/truebit-implementation/node_modules/oauth-sign/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/truebit-implementation/node_modules/oauth-sign/README.md b/truebit-implementation/node_modules/oauth-sign/README.md deleted file mode 100644 index 549cbbaf..00000000 --- a/truebit-implementation/node_modules/oauth-sign/README.md +++ /dev/null @@ -1,11 +0,0 @@ -oauth-sign -========== - -OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. - -## Supported Method Signatures - -- HMAC-SHA1 -- HMAC-SHA256 -- RSA-SHA1 -- PLAINTEXT \ No newline at end of file diff --git a/truebit-implementation/node_modules/oauth-sign/index.js b/truebit-implementation/node_modules/oauth-sign/index.js deleted file mode 100644 index 6482f77b..00000000 --- a/truebit-implementation/node_modules/oauth-sign/index.js +++ /dev/null @@ -1,146 +0,0 @@ -var crypto = require('crypto') - -function sha (key, body, algorithm) { - return crypto.createHmac(algorithm, key).update(body).digest('base64') -} - -function rsa (key, body) { - return crypto.createSign('RSA-SHA1').update(body).sign(key, 'base64') -} - -function rfc3986 (str) { - return encodeURIComponent(str) - .replace(/!/g,'%21') - .replace(/\*/g,'%2A') - .replace(/\(/g,'%28') - .replace(/\)/g,'%29') - .replace(/'/g,'%27') -} - -// Maps object to bi-dimensional array -// Converts { foo: 'A', bar: [ 'b', 'B' ]} to -// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ] -function map (obj) { - var key, val, arr = [] - for (key in obj) { - val = obj[key] - if (Array.isArray(val)) - for (var i = 0; i < val.length; i++) - arr.push([key, val[i]]) - else if (typeof val === 'object') - for (var prop in val) - arr.push([key + '[' + prop + ']', val[prop]]) - else - arr.push([key, val]) - } - return arr -} - -// Compare function for sort -function compare (a, b) { - return a > b ? 1 : a < b ? -1 : 0 -} - -function generateBase (httpMethod, base_uri, params) { - // adapted from https://dev.twitter.com/docs/auth/oauth and - // https://dev.twitter.com/docs/auth/creating-signature - - // Parameter normalization - // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2 - var normalized = map(params) - // 1. First, the name and value of each parameter are encoded - .map(function (p) { - return [ rfc3986(p[0]), rfc3986(p[1] || '') ] - }) - // 2. The parameters are sorted by name, using ascending byte value - // ordering. If two or more parameters share the same name, they - // are sorted by their value. - .sort(function (a, b) { - return compare(a[0], b[0]) || compare(a[1], b[1]) - }) - // 3. The name of each parameter is concatenated to its corresponding - // value using an "=" character (ASCII code 61) as a separator, even - // if the value is empty. - .map(function (p) { return p.join('=') }) - // 4. The sorted name/value pairs are concatenated together into a - // single string by using an "&" character (ASCII code 38) as - // separator. - .join('&') - - var base = [ - rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'), - rfc3986(base_uri), - rfc3986(normalized) - ].join('&') - - return base -} - -function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return sha(key, base, 'sha1') -} - -function hmacsign256 (httpMethod, base_uri, params, consumer_secret, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return sha(key, base, 'sha256') -} - -function rsasign (httpMethod, base_uri, params, private_key, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = private_key || '' - - return rsa(key, base) -} - -function plaintext (consumer_secret, token_secret) { - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return key -} - -function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) { - var method - var skipArgs = 1 - - switch (signMethod) { - case 'RSA-SHA1': - method = rsasign - break - case 'HMAC-SHA1': - method = hmacsign - break - case 'HMAC-SHA256': - method = hmacsign256 - break - case 'PLAINTEXT': - method = plaintext - skipArgs = 4 - break - default: - throw new Error('Signature method not supported: ' + signMethod) - } - - return method.apply(null, [].slice.call(arguments, skipArgs)) -} - -exports.hmacsign = hmacsign -exports.hmacsign256 = hmacsign256 -exports.rsasign = rsasign -exports.plaintext = plaintext -exports.sign = sign -exports.rfc3986 = rfc3986 -exports.generateBase = generateBase \ No newline at end of file diff --git a/truebit-implementation/node_modules/oauth-sign/package.json b/truebit-implementation/node_modules/oauth-sign/package.json deleted file mode 100644 index f7f1b5fc..00000000 --- a/truebit-implementation/node_modules/oauth-sign/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "_from": "oauth-sign@~0.9.0", - "_id": "oauth-sign@0.9.0", - "_inBundle": false, - "_integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "_location": "/oauth-sign", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "oauth-sign@~0.9.0", - "name": "oauth-sign", - "escapedName": "oauth-sign", - "rawSpec": "~0.9.0", - "saveSpec": null, - "fetchSpec": "~0.9.0" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "_shasum": "47a7b016baa68b5fa0ecf3dee08a85c679ac6455", - "_spec": "oauth-sign@~0.9.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/oauth-sign/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/mikeal/oauth-sign#readme", - "license": "Apache-2.0", - "main": "index.js", - "name": "oauth-sign", - "optionalDependencies": {}, - "repository": { - "url": "git+https://github.com/mikeal/oauth-sign.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "0.9.0" -} diff --git a/truebit-implementation/node_modules/object-assign/index.js b/truebit-implementation/node_modules/object-assign/index.js deleted file mode 100644 index 0930cf88..00000000 --- a/truebit-implementation/node_modules/object-assign/index.js +++ /dev/null @@ -1,90 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -'use strict'; -/* eslint-disable no-unused-vars */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); -} - -function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } -} - -module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; -}; diff --git a/truebit-implementation/node_modules/object-assign/license b/truebit-implementation/node_modules/object-assign/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/object-assign/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/object-assign/package.json b/truebit-implementation/node_modules/object-assign/package.json deleted file mode 100644 index 210bb4f5..00000000 --- a/truebit-implementation/node_modules/object-assign/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "_from": "object-assign@^4.0.1", - "_id": "object-assign@4.1.1", - "_inBundle": false, - "_integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "_location": "/object-assign", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "object-assign@^4.0.1", - "name": "object-assign", - "escapedName": "object-assign", - "rawSpec": "^4.0.1", - "saveSpec": null, - "fetchSpec": "^4.0.1" - }, - "_requiredBy": [ - "/cors", - "/decompress-unzip/get-stream", - "/mz", - "/query-string", - "/xhr-request" - ], - "_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "_shasum": "2109adc7965887cfc05cbbd442cac8bfbb360863", - "_spec": "object-assign@^4.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-unzip/node_modules/get-stream", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/object-assign/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "ES2015 `Object.assign()` ponyfill", - "devDependencies": { - "ava": "^0.16.0", - "lodash": "^4.16.4", - "matcha": "^0.7.0", - "xo": "^0.16.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/object-assign#readme", - "keywords": [ - "object", - "assign", - "extend", - "properties", - "es2015", - "ecmascript", - "harmony", - "ponyfill", - "prollyfill", - "polyfill", - "shim", - "browser" - ], - "license": "MIT", - "name": "object-assign", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/object-assign.git" - }, - "scripts": { - "bench": "matcha bench.js", - "test": "xo && ava" - }, - "version": "4.1.1" -} diff --git a/truebit-implementation/node_modules/object-assign/readme.md b/truebit-implementation/node_modules/object-assign/readme.md deleted file mode 100644 index 1be09d35..00000000 --- a/truebit-implementation/node_modules/object-assign/readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign) - -> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) [ponyfill](https://ponyfill.com) - - -## Use the built-in - -Node.js 4 and up, as well as every evergreen browser (Chrome, Edge, Firefox, Opera, Safari), -support `Object.assign()` :tada:. If you target only those environments, then by all -means, use `Object.assign()` instead of this package. - - -## Install - -``` -$ npm install --save object-assign -``` - - -## Usage - -```js -const objectAssign = require('object-assign'); - -objectAssign({foo: 0}, {bar: 1}); -//=> {foo: 0, bar: 1} - -// multiple sources -objectAssign({foo: 0}, {bar: 1}, {baz: 2}); -//=> {foo: 0, bar: 1, baz: 2} - -// overwrites equal keys -objectAssign({foo: 0}, {foo: 1}, {foo: 2}); -//=> {foo: 2} - -// ignores null and undefined sources -objectAssign({foo: 0}, null, {bar: 1}, undefined); -//=> {foo: 0, bar: 1} -``` - - -## API - -### objectAssign(target, [source, ...]) - -Assigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones. - - -## Resources - -- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign) - - -## Related - -- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/oboe/.npmignore b/truebit-implementation/node_modules/oboe/.npmignore deleted file mode 100644 index 7751ce36..00000000 --- a/truebit-implementation/node_modules/oboe/.npmignore +++ /dev/null @@ -1,12 +0,0 @@ -libpeerconnection.log -*.idea -*.iml -*.tidy -*.backup -.DS_Store -writing -dissertation -src -examples -build -benchmarking \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/.travis.yml b/truebit-implementation/node_modules/oboe/.travis.yml deleted file mode 100644 index 6e5919de..00000000 --- a/truebit-implementation/node_modules/oboe/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/truebit-implementation/node_modules/oboe/CONTRIBUTING.md b/truebit-implementation/node_modules/oboe/CONTRIBUTING.md deleted file mode 100644 index 2dae8c9c..00000000 --- a/truebit-implementation/node_modules/oboe/CONTRIBUTING.md +++ /dev/null @@ -1,71 +0,0 @@ -# Contributing to Oboe.js - -:+1::tada: First off, thanks for taking the time to contribute! :tada::+1: - -The following is a set of guidelines for contributing to Oboe.js. These are -just guidelines, not rules, use your best judgment and feel free to propose -changes to this document in a pull request. - -## Read the docs :) - -Oboe.js has some [awesome documentation](http://oboejs.com/) -explaining how and why to use the library. - -## Questions/Help - -Sometimes your question can be addressed by reading the -[API](http://oboejs.com/api) closely. It's short and nicely organized! - -Please post questions to [StackOverflow](http://stackoverflow.com/) -using the `oboe.js` and`javascript` tags. - -If you file an issue with an implementation question, it will be closed. -We're not trying to be mean, it just helps keep the issues tab cleaner so we can - keep improving the library. - -## Reporting Bugs / Requesting Features - -If you've found an issue, please submit it in -[the issues](https://github.com/jimhigson/oboe.js/issues). - -To increase our ability to help, please: -- If it's a server-side bug, fork our -[bug-template](https://github.com/JuanCaicedo/oboe-bug-template), recreate your -bug, and then provide a link to that repo. -- If it's a client-side template, provide a link to a -[jsbin](https://jsbin.com/)/[codepen](http://codepen.io/)/[plunkr](https://plnkr.co/) -that demonstrates the issue (if it's on the client), or a github repo -(if it's on the server), greatly increases our ability to help. - -## Pull Requests - -If you would like to add functionality, please submit -[an issue](https://github.com/jimhigson/oboe.js/issues) first to make sure it's -a direction we want to take. - -Please do the following: -* Follow the existing styles -* Create an example for that demonstrates your changes so people can see how -your changes work - -In your PR description include any information that will help a maintainer -understand and test your changes. The easier it is to read and run your PR, -the faster it can get merged! - -### What does Oboe need help with? - -#### Helping others! - -There is a [Google Group](https://groups.google.com/forum/#!forum/oboejs) for -general project discussion. If you have a moment to help other people using the -library, please stop in. - -#### Contributing to community - -- Write examples! The website has a [section](http://oboejs.com/examples) -showing common use-cases, and it could always use some more. Feel free to submit -a PR to [the website](https://github.com/jimhigson/oboe.js-website). -- We would also like to showcase applications using Oboe, so if you've published -one and want to share it, file it -[in the website issues](https://github.com/jimhigson/oboe.js-website/issues) -and we'll showcase it! diff --git a/truebit-implementation/node_modules/oboe/Gruntfile.js b/truebit-implementation/node_modules/oboe/Gruntfile.js deleted file mode 100644 index d9ec5448..00000000 --- a/truebit-implementation/node_modules/oboe/Gruntfile.js +++ /dev/null @@ -1,395 +0,0 @@ -module.exports = function (grunt) { - - var autoStartBrowsers = ['Chrome', 'Firefox', 'Safari']; - - var STREAM_SOURCE_PORT_HTTP = 4567; - - // NB: source files are order sensitive - var OBOE_BROWSER_SOURCE_FILES = [ - 'build/version.js' - , 'src/LICENCE.js' - , 'src/functional.js' - , 'src/util.js' - , 'src/lists.js' - , 'src/libs/clarinet.js' - , 'src/ascentManager.js' - , 'src/parseResponseHeaders.browser.js' - , 'src/detectCrossOrigin.browser.js' - , 'src/streamingHttp.browser.js' - , 'src/jsonPathSyntax.js' - , 'src/ascent.js' - , 'src/incrementalContentBuilder.js' - , 'src/jsonPath.js' - , 'src/singleEventPubSub.js' - , 'src/pubSub.js' - , 'src/events.js' - , 'src/patternAdapter.js' - , 'src/instanceApi.js' - , 'src/wire.js' - , 'src/defaults.js' - , 'src/publicApi.js' - ]; - - var OBOE_NODE_SOURCE_FILES = [ - 'build/version.js' - , 'src/LICENCE.js' - , 'src/functional.js' - , 'src/util.js' - , 'src/lists.js' - , 'src/libs/clarinet.js' - , 'src/ascentManager.js' - , 'src/streamingHttp.node.js' - , 'src/jsonPathSyntax.js' - , 'src/ascent.js' - , 'src/incrementalContentBuilder.js' - , 'src/jsonPath.js' - , 'src/singleEventPubSub.js' - , 'src/pubSub.js' - , 'src/events.js' - , 'src/patternAdapter.js' - , 'src/instanceApi.js' - , 'src/wire.js' - , 'src/defaults.js' - , 'src/publicApi.js' - ]; - - var FILES_TRIGGERING_KARMA = [ - 'src/**/*.js', - 'test/specs/*.spec.js', - 'test/libs/*.js' - ]; - - // load the wrapper file for packaging source targeted at either - // browser or node - function wrapper(target){ - return require('fs') - .readFileSync('src/wrapper.' + target + '.js', 'utf8') - .split('// ---contents--- //'); - } - - grunt.initConfig({ - - pkg:grunt.file.readJSON("package.json") - - , clean: ['dist/*.js', 'build/*.js'] - - , concat: { - browser:{ - src: OBOE_BROWSER_SOURCE_FILES, - dest: 'build/oboe-browser.concat.js' - }, - node:{ - src: OBOE_NODE_SOURCE_FILES, - dest: 'build/oboe-node.concat.js' - } - } - - , wrap: { - browserPackage: { - src: 'build/oboe-browser.concat.js', - dest: '.', - wrapper: wrapper('browser') - }, - - nodePackage: { - src: 'build/oboe-node.concat.js', - dest: '.', - wrapper: wrapper('node') - } - } - - - , uglify: { - build:{ - files:{ - 'build/oboe-browser.min.js': 'build/oboe-browser.concat.js' - } - } - } - - , karma: { - options:{ - singleRun: true, - proxies: { - '/testServer' : 'http://localhost:' + STREAM_SOURCE_PORT_HTTP - }, - // test results reporter to use - // possible values: 'dots', 'progress', 'junit' - reporters : ['progress'], - - // enable / disable colors in the output (reporters and logs) - colors : true - } - , - 'coverage':{ - reporters : ['coverage'], - preprocessors: { - // source files to generate coverage for - // (these files will be instrumented by Istanbul) - 'src/**/*.js': ['coverage'] - }, - 'browsers': ['PhantomJS'], - configFile: 'test/unit.conf.js' - } - - , - 'precaptured-dev': { - // for doing a single test run with already captured browsers during development. - // this is good for running tests in browsers karma can't easily start such as - // IE running inside a Windows VM on a unix dev environment - browsers: [], - configFile: 'test/unit.conf.js', - singleRun: 'true' - } - , - 'single-dev': { - browsers: autoStartBrowsers, - configFile: 'test/unit.conf.js' - } - , - 'single-concat': { - browsers: autoStartBrowsers, - configFile: 'test/concat.conf.js' - } - , - 'single-minified': { - browsers: autoStartBrowsers, - configFile: 'test/min.conf.js' - } - - , - 'single-amd': { - browsers: autoStartBrowsers, - configFile: 'test/amd.conf.js' - } - - , - 'single-browser-http': { - browsers: autoStartBrowsers, - configFile: 'test/http.conf.js' - } - - , - 'persist': { - // for setting up a persistent karma server. - // To start the server, the task is: - // karma:persist - // To run these, the task is: - // karma:persist:run - configFile: 'test/unit.conf.js', - browsers: [], - singleRun:false, - background:true - } - } - - , copy: { - browserDist: { - files: [ - {src: ['build/oboe-browser.min.js'], dest: 'dist/oboe-browser.min.js'} - , {src: ['build/oboe-browser.concat.js'], dest: 'dist/oboe-browser.js' } - ] - }, - nodeDist: { - files: [ - {src: ['build/oboe-node.concat.js'], dest: 'dist/oboe-node.js'} - ] - } - } - - , exec:{ - // these might not go too well on Windows :-) - get Cygwin. - reportMinifiedSize:{ - command: "echo minified size is `wc -c < dist/oboe-browser.min.js` bytes" - }, - reportMinifiedAndGzippedSize:{ - command: "echo Size after gzip is `gzip --best --stdout dist/oboe-browser.min.js | wc -c` bytes - max 5120" - }, - createGitVersionJs:{ - command: "echo \"// `git describe`\" > build/version.js" - } - } - - , watch:{ - karma:{ - files:FILES_TRIGGERING_KARMA, - tasks:['karma:persist:run'] - }, - - // like above but reports the file size. This is good for - // watching while developing to make sure it doesn't get - // too big. Doesn't run tests against minified. - karmaAndSize:{ - files: FILES_TRIGGERING_KARMA, - tasks:[ - 'karma:persist:run', - 'browser-build', - 'dist-sizes'] - }, - - // like above but reports the file size. This is good for - // watching while developing to make sure it doesn't get - // too big. Doesn't run tests against minified. - testNode:{ - files: FILES_TRIGGERING_KARMA, - tasks:[ - 'node-build'] - }, - - restartStreamSourceAndRunTests:{ - // this fails at the moment because start-stream-source - // fails if run more than once - the port is taken. - files: ['test/streamsource.js'], - tasks: ['start-stream-source', 'karma:persist:run'] - } - } - - , concurrent:{ - watchDev: { - tasks:[ 'watch:karmaAndSize', 'watch:restartStreamSourceAndRunTests' ], - options:{ - logConcurrentOutput: true - } - } - } - - }); - - require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); - - var streamSource; - - grunt.registerTask('start-stream-source', function () { - grunt.log.ok('do we have a streaming source already?', !!streamSource); - - // if we previously loaded the streamsource, stop it to let the new one in: - if( streamSource ) { - grunt.log.ok('there seems to be a streaming server already, let\'s stop it'); - streamSource.stop(); - } - - streamSource = require('./test/streamsource.js'); - streamSource.start(STREAM_SOURCE_PORT_HTTP, grunt); - }); - - grunt.registerTask("jasmine_node_oboe", "Runs jasmine-node.", function() { - - require('jasmine-node').executeSpecsInFolder({ - - "specFolders":[process.cwd() + '/test/specs/'], - "isVerbose":true, - "showColors":true, - "teamcity":false, - "useRequireJs":false, - "regExpSpec":/oboe\.(?:integration|performance)\.spec\.(js)$/, - "junitreport":{"report":false, "savePath":"./reports/", "useDotNotation":true, "consolidate":true}, - "includeStackTrace":true, - "growl":false, - onComplete: this.async() - - }); - }); - - // change the auto-starting browsers so that future tests will use - // phantomjs instead of actual browsers. Can do: - // grunt headless-mode default - // to run without any actual browsers - grunt.registerTask('headless-mode', function(){ - autoStartBrowsers.length = 0; - autoStartBrowsers.push('PhantomJS'); - }); - - grunt.registerTask('test-start-server', [ - 'karma:persist' - ]); - - grunt.registerTask('test-run', [ - 'karma:persist:run' - ]); - - grunt.registerTask('dist-sizes', [ - 'exec:reportMinifiedAndGzippedSize' - ]); - - grunt.registerTask('node-build', [ - 'exec:createGitVersionJs', - 'concat:node', - 'wrap:nodePackage', - 'copy:nodeDist' - ]); - - grunt.registerTask('node-build-test', [ - 'node-build', - 'jasmine_node_oboe' - ]); - - grunt.registerTask('node', [ - 'start-stream-source', - 'node-build-test' - ]); - - grunt.registerTask('browser-build', [ - 'exec:createGitVersionJs', - 'concat:browser', - 'concat:node', - 'wrap:browserPackage', - 'uglify', - 'copy:browserDist' - ]); - - grunt.registerTask('browser-build-test', [ - 'karma:single-dev', - 'karma:single-browser-http', - 'browser-build', - 'karma:single-concat', - 'karma:single-minified', - 'karma:single-amd' - ]); - - grunt.registerTask('build', [ - 'browser-build', - 'node-build' - ]); - - // build and run just the integration tests. - grunt.registerTask('build-integration-test', [ - 'build', - 'start-stream-source', - 'karma:single-concat', - 'jasmine_node_oboe', - 'dist-sizes' - ]); - - grunt.registerTask('default', [ - - 'clear', - 'clean', - 'start-stream-source', - - 'browser-build-test', - - 'node-build-test', - - 'dist-sizes' - ]); - - - - // browser-test-auto-run or node-test-auto-run - // - // The most useful for developing. Start this task, capture some browsers - // (unless node) then edit the code. Tests will be run as the code is - // saved. - grunt.registerTask('browser-test-auto-run', [ - 'start-stream-source', - 'karma:persist', - 'concurrent:watchDev' - ]); - grunt.registerTask('node-test-auto-run', [ - 'start-stream-source', - 'watch:testNode' - ]); - grunt.registerTask('coverage', [ - 'karma:coverage' - ]); -}; diff --git a/truebit-implementation/node_modules/oboe/LICENCE b/truebit-implementation/node_modules/oboe/LICENCE deleted file mode 100755 index b1c87b3e..00000000 --- a/truebit-implementation/node_modules/oboe/LICENCE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2013, Jim Higson -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. 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. - -THIS 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 OWNER 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. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/README.md b/truebit-implementation/node_modules/oboe/README.md deleted file mode 100644 index 094b88f1..00000000 --- a/truebit-implementation/node_modules/oboe/README.md +++ /dev/null @@ -1,24 +0,0 @@ -Oboe.js is an [open source](LICENCE) Javascript library -for loading JSON using streaming, combining the convenience of DOM with -the speed and fluidity of SAX. - -It can parse any JSON as a stream, is small enough to be a [micro-library](http://microjs.com/#), -doesn't have dependencies, and doesn't care which other libraries you need it to speak to. - -We can load trees [larger than the available memory](http://oboejs.com/examples#loading-json-trees-larger-than-the-available-ram). -Or we can [instantiate classical OOP models from JSON](http://oboejs.com/examples#demarshalling-json-to-an-oop-model), -or [completely transform your JSON](http://oboejs.com/examples#transforming-json-while-it-is-streaming) while it is being read. - -Oboe makes it really easy to start using json from a response before the ajax request completes. -Or even if it never completes. - -Where next? ------------ - -- [The website](http://oboejs.com) -- Visualise [faster web applications through streaming](http://oboejs.com/why) -- Visit the [project homepage](http://oboejs.com) -- Browse [code examples](http://oboejs.com/examples) -- Learn the Oboe.js [API](http://oboejs.com/api) -- [Download](http://oboejs.com/download) the library -- [Discuss](http://oboejs.com/discuss) Oboe.js diff --git a/truebit-implementation/node_modules/oboe/component.json b/truebit-implementation/node_modules/oboe/component.json deleted file mode 100644 index c124a8b5..00000000 --- a/truebit-implementation/node_modules/oboe/component.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "oboe", - "version": "2.1.2", - "main": "dist/oboe-browser.js", - "ignore": [ - "**/.*", - "node_modules", - "components", - "writing", - "src", - "examples", - "build", - "benchmarking", - "package.json", - "Gruntfile.js", - "test" - ] -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/dist/oboe-browser.js b/truebit-implementation/node_modules/oboe/dist/oboe-browser.js deleted file mode 100644 index 240f9e59..00000000 --- a/truebit-implementation/node_modules/oboe/dist/oboe-browser.js +++ /dev/null @@ -1,2702 +0,0 @@ -// This file is the concatenation of many js files. -// See http://github.com/jimhigson/oboe.js for the raw source - -// having a local undefined, window, Object etc allows slightly better minification: -(function (window, Object, Array, Error, JSON, undefined ) { - - // v2.1.3 - -/* - -Copyright (c) 2013, Jim Higson - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. 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. - -THIS 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. - -*/ - -/** - * Partially complete a function. - * - * var add3 = partialComplete( function add(a,b){return a+b}, 3 ); - * - * add3(4) // gives 7 - * - * function wrap(left, right, cen){return left + " " + cen + " " + right;} - * - * var pirateGreeting = partialComplete( wrap , "I'm", ", a mighty pirate!" ); - * - * pirateGreeting("Guybrush Threepwood"); - * // gives "I'm Guybrush Threepwood, a mighty pirate!" - */ -var partialComplete = varArgs(function( fn, args ) { - - // this isn't the shortest way to write this but it does - // avoid creating a new array each time to pass to fn.apply, - // otherwise could just call boundArgs.concat(callArgs) - - var numBoundArgs = args.length; - - return varArgs(function( callArgs ) { - - for (var i = 0; i < callArgs.length; i++) { - args[numBoundArgs + i] = callArgs[i]; - } - - args.length = numBoundArgs + callArgs.length; - - return fn.apply(this, args); - }); - }), - -/** - * Compose zero or more functions: - * - * compose(f1, f2, f3)(x) = f1(f2(f3(x)))) - * - * The last (inner-most) function may take more than one parameter: - * - * compose(f1, f2, f3)(x,y) = f1(f2(f3(x,y)))) - */ - compose = varArgs(function(fns) { - - var fnsList = arrayAsList(fns); - - function next(params, curFn) { - return [apply(params, curFn)]; - } - - return varArgs(function(startParams){ - - return foldR(next, startParams, fnsList)[0]; - }); - }); - -/** - * A more optimised version of compose that takes exactly two functions - * @param f1 - * @param f2 - */ -function compose2(f1, f2){ - return function(){ - return f1.call(this,f2.apply(this,arguments)); - } -} - -/** - * Generic form for a function to get a property from an object - * - * var o = { - * foo:'bar' - * } - * - * var getFoo = attr('foo') - * - * fetFoo(o) // returns 'bar' - * - * @param {String} key the property name - */ -function attr(key) { - return function(o) { return o[key]; }; -} - -/** - * Call a list of functions with the same args until one returns a - * truthy result. Similar to the || operator. - * - * So: - * lazyUnion([f1,f2,f3 ... fn])( p1, p2 ... pn ) - * - * Is equivalent to: - * apply([p1, p2 ... pn], f1) || - * apply([p1, p2 ... pn], f2) || - * apply([p1, p2 ... pn], f3) ... apply(fn, [p1, p2 ... pn]) - * - * @returns the first return value that is given that is truthy. - */ - var lazyUnion = varArgs(function(fns) { - - return varArgs(function(params){ - - var maybeValue; - - for (var i = 0; i < len(fns); i++) { - - maybeValue = apply(params, fns[i]); - - if( maybeValue ) { - return maybeValue; - } - } - }); - }); - -/** - * This file declares various pieces of functional programming. - * - * This isn't a general purpose functional library, to keep things small it - * has just the parts useful for Oboe.js. - */ - - -/** - * Call a single function with the given arguments array. - * Basically, a functional-style version of the OO-style Function#apply for - * when we don't care about the context ('this') of the call. - * - * The order of arguments allows partial completion of the arguments array - */ -function apply(args, fn) { - return fn.apply(undefined, args); -} - -/** - * Define variable argument functions but cut out all that tedious messing about - * with the arguments object. Delivers the variable-length part of the arguments - * list as an array. - * - * Eg: - * - * var myFunction = varArgs( - * function( fixedArgument, otherFixedArgument, variableNumberOfArguments ){ - * console.log( variableNumberOfArguments ); - * } - * ) - * - * myFunction('a', 'b', 1, 2, 3); // logs [1,2,3] - * - * var myOtherFunction = varArgs(function( variableNumberOfArguments ){ - * console.log( variableNumberOfArguments ); - * }) - * - * myFunction(1, 2, 3); // logs [1,2,3] - * - */ -function varArgs(fn){ - - var numberOfFixedArguments = fn.length -1, - slice = Array.prototype.slice; - - - if( numberOfFixedArguments == 0 ) { - // an optimised case for when there are no fixed args: - - return function(){ - return fn.call(this, slice.call(arguments)); - } - - } else if( numberOfFixedArguments == 1 ) { - // an optimised case for when there are is one fixed args: - - return function(){ - return fn.call(this, arguments[0], slice.call(arguments, 1)); - } - } - - // general case - - // we know how many arguments fn will always take. Create a - // fixed-size array to hold that many, to be re-used on - // every call to the returned function - var argsHolder = Array(fn.length); - - return function(){ - - for (var i = 0; i < numberOfFixedArguments; i++) { - argsHolder[i] = arguments[i]; - } - - argsHolder[numberOfFixedArguments] = - slice.call(arguments, numberOfFixedArguments); - - return fn.apply( this, argsHolder); - } -} - - -/** - * Swap the order of parameters to a binary function - * - * A bit like this flip: http://zvon.org/other/haskell/Outputprelude/flip_f.html - */ -function flip(fn){ - return function(a, b){ - return fn(b,a); - } -} - - -/** - * Create a function which is the intersection of two other functions. - * - * Like the && operator, if the first is truthy, the second is never called, - * otherwise the return value from the second is returned. - */ -function lazyIntersection(fn1, fn2) { - - return function (param) { - - return fn1(param) && fn2(param); - }; -} - -/** - * A function which does nothing - */ -function noop(){} - -/** - * A function which is always happy - */ -function always(){return true} - -/** - * Create a function which always returns the same - * value - * - * var return3 = functor(3); - * - * return3() // gives 3 - * return3() // still gives 3 - * return3() // will always give 3 - */ -function functor(val){ - return function(){ - return val; - } -} - -/** - * This file defines some loosely associated syntactic sugar for - * Javascript programming - */ - - -/** - * Returns true if the given candidate is of type T - */ -function isOfType(T, maybeSomething){ - return maybeSomething && maybeSomething.constructor === T; -} - -var len = attr('length'), - isString = partialComplete(isOfType, String); - -/** - * I don't like saying this: - * - * foo !=== undefined - * - * because of the double-negative. I find this: - * - * defined(foo) - * - * easier to read. - */ -function defined( value ) { - return value !== undefined; -} - -/** - * Returns true if object o has a key named like every property in - * the properties array. Will give false if any are missing, or if o - * is not an object. - */ -function hasAllProperties(fieldList, o) { - - return (o instanceof Object) - && - all(function (field) { - return (field in o); - }, fieldList); -} -/** - * Like cons in Lisp - */ -function cons(x, xs) { - - /* Internally lists are linked 2-element Javascript arrays. - - Ideally the return here would be Object.freeze([x,xs]) - so that bugs related to mutation are found fast. - However, cons is right on the critical path for - performance and this slows oboe-mark down by - ~25%. Under theoretical future JS engines that freeze more - efficiently (possibly even use immutability to - run faster) this should be considered for - restoration. - */ - - return [x,xs]; -} - -/** - * The empty list - */ -var emptyList = null, - -/** - * Get the head of a list. - * - * Ie, head(cons(a,b)) = a - */ - head = attr(0), - -/** - * Get the tail of a list. - * - * Ie, tail(cons(a,b)) = b - */ - tail = attr(1); - - -/** - * Converts an array to a list - * - * asList([a,b,c]) - * - * is equivalent to: - * - * cons(a, cons(b, cons(c, emptyList))) - **/ -function arrayAsList(inputArray){ - - return reverseList( - inputArray.reduce( - flip(cons), - emptyList - ) - ); -} - -/** - * A varargs version of arrayAsList. Works a bit like list - * in LISP. - * - * list(a,b,c) - * - * is equivalent to: - * - * cons(a, cons(b, cons(c, emptyList))) - */ -var list = varArgs(arrayAsList); - -/** - * Convert a list back to a js native array - */ -function listAsArray(list){ - - return foldR( function(arraySoFar, listItem){ - - arraySoFar.unshift(listItem); - return arraySoFar; - - }, [], list ); - -} - -/** - * Map a function over a list - */ -function map(fn, list) { - - return list - ? cons(fn(head(list)), map(fn,tail(list))) - : emptyList - ; -} - -/** - * foldR implementation. Reduce a list down to a single value. - * - * @pram {Function} fn (rightEval, curVal) -> result - */ -function foldR(fn, startValue, list) { - - return list - ? fn(foldR(fn, startValue, tail(list)), head(list)) - : startValue - ; -} - -/** - * foldR implementation. Reduce a list down to a single value. - * - * @pram {Function} fn (rightEval, curVal) -> result - */ -function foldR1(fn, list) { - - return tail(list) - ? fn(foldR1(fn, tail(list)), head(list)) - : head(list) - ; -} - - -/** - * Return a list like the one given but with the first instance equal - * to item removed - */ -function without(list, test, removedFn) { - - return withoutInner(list, removedFn || noop); - - function withoutInner(subList, removedFn) { - return subList - ? ( test(head(subList)) - ? (removedFn(head(subList)), tail(subList)) - : cons(head(subList), withoutInner(tail(subList), removedFn)) - ) - : emptyList - ; - } -} - -/** - * Returns true if the given function holds for every item in - * the list, false otherwise - */ -function all(fn, list) { - - return !list || - ( fn(head(list)) && all(fn, tail(list)) ); -} - -/** - * Call every function in a list of functions with the same arguments - * - * This doesn't make any sense if we're doing pure functional because - * it doesn't return anything. Hence, this is only really useful if the - * functions being called have side-effects. - */ -function applyEach(fnList, args) { - - if( fnList ) { - head(fnList).apply(null, args); - - applyEach(tail(fnList), args); - } -} - -/** - * Reverse the order of a list - */ -function reverseList(list){ - - // js re-implementation of 3rd solution from: - // http://www.haskell.org/haskellwiki/99_questions/Solutions/5 - function reverseInner( list, reversedAlready ) { - if( !list ) { - return reversedAlready; - } - - return reverseInner(tail(list), cons(head(list), reversedAlready)) - } - - return reverseInner(list, emptyList); -} - -function first(test, list) { - return list && - (test(head(list)) - ? head(list) - : first(test,tail(list))); -} - -/* - This is a slightly hacked-up browser only version of clarinet - - * some features removed to help keep browser Oboe under - the 5k micro-library limit - * plug directly into event bus - - For the original go here: - https://github.com/dscape/clarinet - - We receive the events: - STREAM_DATA - STREAM_END - - We emit the events: - SAX_KEY - SAX_VALUE_OPEN - SAX_VALUE_CLOSE - FAIL_EVENT - */ - -function clarinet(eventBus) { - "use strict"; - - var - // shortcut some events on the bus - emitSaxKey = eventBus(SAX_KEY).emit, - emitValueOpen = eventBus(SAX_VALUE_OPEN).emit, - emitValueClose = eventBus(SAX_VALUE_CLOSE).emit, - emitFail = eventBus(FAIL_EVENT).emit, - - MAX_BUFFER_LENGTH = 64 * 1024 - , stringTokenPattern = /[\\"\n]/g - , _n = 0 - - // states - , BEGIN = _n++ - , VALUE = _n++ // general stuff - , OPEN_OBJECT = _n++ // { - , CLOSE_OBJECT = _n++ // } - , OPEN_ARRAY = _n++ // [ - , CLOSE_ARRAY = _n++ // ] - , STRING = _n++ // "" - , OPEN_KEY = _n++ // , "a" - , CLOSE_KEY = _n++ // : - , TRUE = _n++ // r - , TRUE2 = _n++ // u - , TRUE3 = _n++ // e - , FALSE = _n++ // a - , FALSE2 = _n++ // l - , FALSE3 = _n++ // s - , FALSE4 = _n++ // e - , NULL = _n++ // u - , NULL2 = _n++ // l - , NULL3 = _n++ // l - , NUMBER_DECIMAL_POINT = _n++ // . - , NUMBER_DIGIT = _n // [0-9] - - // setup initial parser values - , bufferCheckPosition = MAX_BUFFER_LENGTH - , latestError - , c - , p - , textNode = undefined - , numberNode = "" - , slashed = false - , closed = false - , state = BEGIN - , stack = [] - , unicodeS = null - , unicodeI = 0 - , depth = 0 - , position = 0 - , column = 0 //mostly for error reporting - , line = 1 - ; - - function checkBufferLength () { - - var maxActual = 0; - - if (textNode !== undefined && textNode.length > MAX_BUFFER_LENGTH) { - emitError("Max buffer length exceeded: textNode"); - maxActual = Math.max(maxActual, textNode.length); - } - if (numberNode.length > MAX_BUFFER_LENGTH) { - emitError("Max buffer length exceeded: numberNode"); - maxActual = Math.max(maxActual, numberNode.length); - } - - bufferCheckPosition = (MAX_BUFFER_LENGTH - maxActual) - + position; - } - - eventBus(STREAM_DATA).on(handleData); - - /* At the end of the http content close the clarinet - This will provide an error if the total content provided was not - valid json, ie if not all arrays, objects and Strings closed properly */ - eventBus(STREAM_END).on(handleStreamEnd); - - function emitError (errorString) { - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - - latestError = Error(errorString + "\nLn: "+line+ - "\nCol: "+column+ - "\nChr: "+c); - - emitFail(errorReport(undefined, undefined, latestError)); - } - - function handleStreamEnd() { - if( state == BEGIN ) { - // Handle the case where the stream closes without ever receiving - // any input. This isn't an error - response bodies can be blank, - // particularly for 204 http responses - - // Because of how Oboe is currently implemented, we parse a - // completely empty stream as containing an empty object. - // This is because Oboe's done event is only fired when the - // root object of the JSON stream closes. - - // This should be decoupled and attached instead to the input stream - // from the http (or whatever) resource ending. - // If this decoupling could happen the SAX parser could simply emit - // zero events on a completely empty input. - emitValueOpen({}); - emitValueClose(); - - closed = true; - return; - } - - if (state !== VALUE || depth !== 0) - emitError("Unexpected end"); - - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - - closed = true; - } - - function whitespace(c){ - return c == '\r' || c == '\n' || c == ' ' || c == '\t'; - } - - function handleData (chunk) { - - // this used to throw the error but inside Oboe we will have already - // gotten the error when it was emitted. The important thing is to - // not continue with the parse. - if (latestError) - return; - - if (closed) { - return emitError("Cannot write after close"); - } - - var i = 0; - c = chunk[0]; - - while (c) { - p = c; - c = chunk[i++]; - if(!c) break; - - position ++; - if (c == "\n") { - line ++; - column = 0; - } else column ++; - switch (state) { - - case BEGIN: - if (c === "{") state = OPEN_OBJECT; - else if (c === "[") state = OPEN_ARRAY; - else if (!whitespace(c)) - return emitError("Non-whitespace before {[."); - continue; - - case OPEN_KEY: - case OPEN_OBJECT: - if (whitespace(c)) continue; - if(state === OPEN_KEY) stack.push(CLOSE_KEY); - else { - if(c === '}') { - emitValueOpen({}); - emitValueClose(); - state = stack.pop() || VALUE; - continue; - } else stack.push(CLOSE_OBJECT); - } - if(c === '"') - state = STRING; - else - return emitError("Malformed object key should start with \" "); - continue; - - case CLOSE_KEY: - case CLOSE_OBJECT: - if (whitespace(c)) continue; - - if(c===':') { - if(state === CLOSE_OBJECT) { - stack.push(CLOSE_OBJECT); - - if (textNode !== undefined) { - // was previously (in upstream Clarinet) one event - // - object open came with the text of the first - emitValueOpen({}); - emitSaxKey(textNode); - textNode = undefined; - } - depth++; - } else { - if (textNode !== undefined) { - emitSaxKey(textNode); - textNode = undefined; - } - } - state = VALUE; - } else if (c==='}') { - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - emitValueClose(); - depth--; - state = stack.pop() || VALUE; - } else if(c===',') { - if(state === CLOSE_OBJECT) - stack.push(CLOSE_OBJECT); - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - state = OPEN_KEY; - } else - return emitError('Bad object'); - continue; - - case OPEN_ARRAY: // after an array there always a value - case VALUE: - if (whitespace(c)) continue; - if(state===OPEN_ARRAY) { - emitValueOpen([]); - depth++; - state = VALUE; - if(c === ']') { - emitValueClose(); - depth--; - state = stack.pop() || VALUE; - continue; - } else { - stack.push(CLOSE_ARRAY); - } - } - if(c === '"') state = STRING; - else if(c === '{') state = OPEN_OBJECT; - else if(c === '[') state = OPEN_ARRAY; - else if(c === 't') state = TRUE; - else if(c === 'f') state = FALSE; - else if(c === 'n') state = NULL; - else if(c === '-') { // keep and continue - numberNode += c; - } else if(c==='0') { - numberNode += c; - state = NUMBER_DIGIT; - } else if('123456789'.indexOf(c) !== -1) { - numberNode += c; - state = NUMBER_DIGIT; - } else - return emitError("Bad value"); - continue; - - case CLOSE_ARRAY: - if(c===',') { - stack.push(CLOSE_ARRAY); - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - state = VALUE; - } else if (c===']') { - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - emitValueClose(); - depth--; - state = stack.pop() || VALUE; - } else if (whitespace(c)) - continue; - else - return emitError('Bad array'); - continue; - - case STRING: - if (textNode === undefined) { - textNode = ""; - } - - // thanks thejh, this is an about 50% performance improvement. - var starti = i-1; - - STRING_BIGLOOP: while (true) { - - // zero means "no unicode active". 1-4 mean "parse some more". end after 4. - while (unicodeI > 0) { - unicodeS += c; - c = chunk.charAt(i++); - if (unicodeI === 4) { - // TODO this might be slow? well, probably not used too often anyway - textNode += String.fromCharCode(parseInt(unicodeS, 16)); - unicodeI = 0; - starti = i-1; - } else { - unicodeI++; - } - // we can just break here: no stuff we skipped that still has to be sliced out or so - if (!c) break STRING_BIGLOOP; - } - if (c === '"' && !slashed) { - state = stack.pop() || VALUE; - textNode += chunk.substring(starti, i-1); - break; - } - if (c === '\\' && !slashed) { - slashed = true; - textNode += chunk.substring(starti, i-1); - c = chunk.charAt(i++); - if (!c) break; - } - if (slashed) { - slashed = false; - if (c === 'n') { textNode += '\n'; } - else if (c === 'r') { textNode += '\r'; } - else if (c === 't') { textNode += '\t'; } - else if (c === 'f') { textNode += '\f'; } - else if (c === 'b') { textNode += '\b'; } - else if (c === 'u') { - // \uxxxx. meh! - unicodeI = 1; - unicodeS = ''; - } else { - textNode += c; - } - c = chunk.charAt(i++); - starti = i-1; - if (!c) break; - else continue; - } - - stringTokenPattern.lastIndex = i; - var reResult = stringTokenPattern.exec(chunk); - if (!reResult) { - i = chunk.length+1; - textNode += chunk.substring(starti, i-1); - break; - } - i = reResult.index+1; - c = chunk.charAt(reResult.index); - if (!c) { - textNode += chunk.substring(starti, i-1); - break; - } - } - continue; - - case TRUE: - if (!c) continue; // strange buffers - if (c==='r') state = TRUE2; - else - return emitError( 'Invalid true started with t'+ c); - continue; - - case TRUE2: - if (!c) continue; - if (c==='u') state = TRUE3; - else - return emitError('Invalid true started with tr'+ c); - continue; - - case TRUE3: - if (!c) continue; - if(c==='e') { - emitValueOpen(true); - emitValueClose(); - state = stack.pop() || VALUE; - } else - return emitError('Invalid true started with tru'+ c); - continue; - - case FALSE: - if (!c) continue; - if (c==='a') state = FALSE2; - else - return emitError('Invalid false started with f'+ c); - continue; - - case FALSE2: - if (!c) continue; - if (c==='l') state = FALSE3; - else - return emitError('Invalid false started with fa'+ c); - continue; - - case FALSE3: - if (!c) continue; - if (c==='s') state = FALSE4; - else - return emitError('Invalid false started with fal'+ c); - continue; - - case FALSE4: - if (!c) continue; - if (c==='e') { - emitValueOpen(false); - emitValueClose(); - state = stack.pop() || VALUE; - } else - return emitError('Invalid false started with fals'+ c); - continue; - - case NULL: - if (!c) continue; - if (c==='u') state = NULL2; - else - return emitError('Invalid null started with n'+ c); - continue; - - case NULL2: - if (!c) continue; - if (c==='l') state = NULL3; - else - return emitError('Invalid null started with nu'+ c); - continue; - - case NULL3: - if (!c) continue; - if(c==='l') { - emitValueOpen(null); - emitValueClose(); - state = stack.pop() || VALUE; - } else - return emitError('Invalid null started with nul'+ c); - continue; - - case NUMBER_DECIMAL_POINT: - if(c==='.') { - numberNode += c; - state = NUMBER_DIGIT; - } else - return emitError('Leading zero not followed by .'); - continue; - - case NUMBER_DIGIT: - if('0123456789'.indexOf(c) !== -1) numberNode += c; - else if (c==='.') { - if(numberNode.indexOf('.')!==-1) - return emitError('Invalid number has two dots'); - numberNode += c; - } else if (c==='e' || c==='E') { - if(numberNode.indexOf('e')!==-1 || - numberNode.indexOf('E')!==-1 ) - return emitError('Invalid number has two exponential'); - numberNode += c; - } else if (c==="+" || c==="-") { - if(!(p==='e' || p==='E')) - return emitError('Invalid symbol in number'); - numberNode += c; - } else { - if (numberNode) { - emitValueOpen(parseFloat(numberNode)); - emitValueClose(); - numberNode = ""; - } - i--; // go back one - state = stack.pop() || VALUE; - } - continue; - - default: - return emitError("Unknown state: " + state); - } - } - if (position >= bufferCheckPosition) - checkBufferLength(); - } -} - - -/** - * A bridge used to assign stateless functions to listen to clarinet. - * - * As well as the parameter from clarinet, each callback will also be passed - * the result of the last callback. - * - * This may also be used to clear all listeners by assigning zero handlers: - * - * ascentManager( clarinet, {} ) - */ -function ascentManager(oboeBus, handlers){ - "use strict"; - - var listenerId = {}, - ascent; - - function stateAfter(handler) { - return function(param){ - ascent = handler( ascent, param); - } - } - - for( var eventName in handlers ) { - - oboeBus(eventName).on(stateAfter(handlers[eventName]), listenerId); - } - - oboeBus(NODE_SWAP).on(function(newNode) { - - var oldHead = head(ascent), - key = keyOf(oldHead), - ancestors = tail(ascent), - parentNode; - - if( ancestors ) { - parentNode = nodeOf(head(ancestors)); - parentNode[key] = newNode; - } - }); - - oboeBus(NODE_DROP).on(function() { - - var oldHead = head(ascent), - key = keyOf(oldHead), - ancestors = tail(ascent), - parentNode; - - if( ancestors ) { - parentNode = nodeOf(head(ancestors)); - - delete parentNode[key]; - } - }); - - oboeBus(ABORTING).on(function(){ - - for( var eventName in handlers ) { - oboeBus(eventName).un(listenerId); - } - }); -} - -// based on gist https://gist.github.com/monsur/706839 - -/** - * XmlHttpRequest's getAllResponseHeaders() method returns a string of response - * headers according to the format described here: - * http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders-method - * This method parses that string into a user-friendly key/value pair object. - */ -function parseResponseHeaders(headerStr) { - var headers = {}; - - headerStr && headerStr.split('\u000d\u000a') - .forEach(function(headerPair){ - - // Can't use split() here because it does the wrong thing - // if the header value has the string ": " in it. - var index = headerPair.indexOf('\u003a\u0020'); - - headers[headerPair.substring(0, index)] - = headerPair.substring(index + 2); - }); - - return headers; -} - -/** - * Detect if a given URL is cross-origin in the scope of the - * current page. - * - * Browser only (since cross-origin has no meaning in Node.js) - * - * @param {Object} pageLocation - as in window.location - * @param {Object} ajaxHost - an object like window.location describing the - * origin of the url that we want to ajax in - */ -function isCrossOrigin(pageLocation, ajaxHost) { - - /* - * NB: defaultPort only knows http and https. - * Returns undefined otherwise. - */ - function defaultPort(protocol) { - return {'http:':80, 'https:':443}[protocol]; - } - - function portOf(location) { - // pageLocation should always have a protocol. ajaxHost if no port or - // protocol is specified, should use the port of the containing page - - return location.port || defaultPort(location.protocol||pageLocation.protocol); - } - - // if ajaxHost doesn't give a domain, port is the same as pageLocation - // it can't give a protocol but not a domain - // it can't give a port but not a domain - - return !!( (ajaxHost.protocol && (ajaxHost.protocol != pageLocation.protocol)) || - (ajaxHost.host && (ajaxHost.host != pageLocation.host)) || - (ajaxHost.host && (portOf(ajaxHost) != portOf(pageLocation))) - ); -} - -/* turn any url into an object like window.location */ -function parseUrlOrigin(url) { - // url could be domain-relative - // url could give a domain - - // cross origin means: - // same domain - // same port - // some protocol - // so, same everything up to the first (single) slash - // if such is given - // - // can ignore everything after that - - var URL_HOST_PATTERN = /(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/, - - // if no match, use an empty array so that - // subexpressions 1,2,3 are all undefined - // and will ultimately return all empty - // strings as the parse result: - urlHostMatch = URL_HOST_PATTERN.exec(url) || []; - - return { - protocol: urlHostMatch[1] || '', - host: urlHostMatch[2] || '', - port: urlHostMatch[3] || '' - }; -} - -function httpTransport(){ - return new XMLHttpRequest(); -} - -/** - * A wrapper around the browser XmlHttpRequest object that raises an - * event whenever a new part of the response is available. - * - * In older browsers progressive reading is impossible so all the - * content is given in a single call. For newer ones several events - * should be raised, allowing progressive interpretation of the response. - * - * @param {Function} oboeBus an event bus local to this Oboe instance - * @param {XMLHttpRequest} xhr the xhr to use as the transport. Under normal - * operation, will have been created using httpTransport() above - * but for tests a stub can be provided instead. - * @param {String} method one of 'GET' 'POST' 'PUT' 'PATCH' 'DELETE' - * @param {String} url the url to make a request to - * @param {String|Null} data some content to be sent with the request. - * Only valid if method is POST or PUT. - * @param {Object} [headers] the http request headers to send - * @param {boolean} withCredentials the XHR withCredentials property will be - * set to this value - */ -function streamingHttp(oboeBus, xhr, method, url, data, headers, withCredentials) { - - "use strict"; - - var emitStreamData = oboeBus(STREAM_DATA).emit, - emitFail = oboeBus(FAIL_EVENT).emit, - numberOfCharsAlreadyGivenToCallback = 0, - stillToSendStartEvent = true; - - // When an ABORTING message is put on the event bus abort - // the ajax request - oboeBus( ABORTING ).on( function(){ - - // if we keep the onreadystatechange while aborting the XHR gives - // a callback like a successful call so first remove this listener - // by assigning null: - xhr.onreadystatechange = null; - - xhr.abort(); - }); - - /** - * Handle input from the underlying xhr: either a state change, - * the progress event or the request being complete. - */ - function handleProgress() { - - var textSoFar = xhr.responseText, - newText = textSoFar.substr(numberOfCharsAlreadyGivenToCallback); - - - /* Raise the event for new text. - - On older browsers, the new text is the whole response. - On newer/better ones, the fragment part that we got since - last progress. */ - - if( newText ) { - emitStreamData( newText ); - } - - numberOfCharsAlreadyGivenToCallback = len(textSoFar); - } - - - if('onprogress' in xhr){ // detect browser support for progressive delivery - xhr.onprogress = handleProgress; - } - - xhr.onreadystatechange = function() { - - function sendStartIfNotAlready() { - // Internet Explorer is very unreliable as to when xhr.status etc can - // be read so has to be protected with try/catch and tried again on - // the next readyState if it fails - try{ - stillToSendStartEvent && oboeBus( HTTP_START ).emit( - xhr.status, - parseResponseHeaders(xhr.getAllResponseHeaders()) ); - stillToSendStartEvent = false; - } catch(e){/* do nothing, will try again on next readyState*/} - } - - switch( xhr.readyState ) { - - case 2: // HEADERS_RECEIVED - case 3: // LOADING - return sendStartIfNotAlready(); - - case 4: // DONE - sendStartIfNotAlready(); // if xhr.status hasn't been available yet, it must be NOW, huh IE? - - // is this a 2xx http code? - var successful = String(xhr.status)[0] == 2; - - if( successful ) { - // In Chrome 29 (not 28) no onprogress is emitted when a response - // is complete before the onload. We need to always do handleInput - // in case we get the load but have not had a final progress event. - // This looks like a bug and may change in future but let's take - // the safest approach and assume we might not have received a - // progress event for each part of the response - handleProgress(); - - oboeBus(STREAM_END).emit(); - } else { - - emitFail( errorReport( - xhr.status, - xhr.responseText - )); - } - } - }; - - try{ - - xhr.open(method, url, true); - - for( var headerName in headers ){ - xhr.setRequestHeader(headerName, headers[headerName]); - } - - if( !isCrossOrigin(window.location, parseUrlOrigin(url)) ) { - xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - } - - xhr.withCredentials = withCredentials; - - xhr.send(data); - - } catch( e ) { - - // To keep a consistent interface with Node, we can't emit an event here. - // Node's streaming http adaptor receives the error as an asynchronous - // event rather than as an exception. If we emitted now, the Oboe user - // has had no chance to add a .fail listener so there is no way - // the event could be useful. For both these reasons defer the - // firing to the next JS frame. - window.setTimeout( - partialComplete(emitFail, errorReport(undefined, undefined, e)) - , 0 - ); - } -} - -var jsonPathSyntax = (function() { - - var - - /** - * Export a regular expression as a simple function by exposing just - * the Regex#exec. This allows regex tests to be used under the same - * interface as differently implemented tests, or for a user of the - * tests to not concern themselves with their implementation as regular - * expressions. - * - * This could also be expressed point-free as: - * Function.prototype.bind.bind(RegExp.prototype.exec), - * - * But that's far too confusing! (and not even smaller once minified - * and gzipped) - */ - regexDescriptor = function regexDescriptor(regex) { - return regex.exec.bind(regex); - } - - /** - * Join several regular expressions and express as a function. - * This allows the token patterns to reuse component regular expressions - * instead of being expressed in full using huge and confusing regular - * expressions. - */ - , jsonPathClause = varArgs(function( componentRegexes ) { - - // The regular expressions all start with ^ because we - // only want to find matches at the start of the - // JSONPath fragment we are inspecting - componentRegexes.unshift(/^/); - - return regexDescriptor( - RegExp( - componentRegexes.map(attr('source')).join('') - ) - ); - }) - - , possiblyCapturing = /(\$?)/ - , namedNode = /([\w-_]+|\*)/ - , namePlaceholder = /()/ - , nodeInArrayNotation = /\["([^"]+)"\]/ - , numberedNodeInArrayNotation = /\[(\d+|\*)\]/ - , fieldList = /{([\w ]*?)}/ - , optionalFieldList = /(?:{([\w ]*?)})?/ - - - // foo or * - , jsonPathNamedNodeInObjectNotation = jsonPathClause( - possiblyCapturing, - namedNode, - optionalFieldList - ) - - // ["foo"] - , jsonPathNamedNodeInArrayNotation = jsonPathClause( - possiblyCapturing, - nodeInArrayNotation, - optionalFieldList - ) - - // [2] or [*] - , jsonPathNumberedNodeInArrayNotation = jsonPathClause( - possiblyCapturing, - numberedNodeInArrayNotation, - optionalFieldList - ) - - // {a b c} - , jsonPathPureDuckTyping = jsonPathClause( - possiblyCapturing, - namePlaceholder, - fieldList - ) - - // .. - , jsonPathDoubleDot = jsonPathClause(/\.\./) - - // . - , jsonPathDot = jsonPathClause(/\./) - - // ! - , jsonPathBang = jsonPathClause( - possiblyCapturing, - /!/ - ) - - // nada! - , emptyString = jsonPathClause(/$/) - - ; - - - /* We export only a single function. When called, this function injects - into another function the descriptors from above. - */ - return function (fn){ - return fn( - lazyUnion( - jsonPathNamedNodeInObjectNotation - , jsonPathNamedNodeInArrayNotation - , jsonPathNumberedNodeInArrayNotation - , jsonPathPureDuckTyping - ) - , jsonPathDoubleDot - , jsonPathDot - , jsonPathBang - , emptyString - ); - }; - -}()); -/** - * Get a new key->node mapping - * - * @param {String|Number} key - * @param {Object|Array|String|Number|null} node a value found in the json - */ -function namedNode(key, node) { - return {key:key, node:node}; -} - -/** get the key of a namedNode */ -var keyOf = attr('key'); - -/** get the node from a namedNode */ -var nodeOf = attr('node'); -/** - * This file provides various listeners which can be used to build up - * a changing ascent based on the callbacks provided by Clarinet. It listens - * to the low-level events from Clarinet and emits higher-level ones. - * - * The building up is stateless so to track a JSON file - * ascentManager.js is required to store the ascent state - * between calls. - */ - - - -/** - * A special value to use in the path list to represent the path 'to' a root - * object (which doesn't really have any path). This prevents the need for - * special-casing detection of the root object and allows it to be treated - * like any other object. We might think of this as being similar to the - * 'unnamed root' domain ".", eg if I go to - * http://en.wikipedia.org./wiki/En/Main_page the dot after 'org' deliminates - * the unnamed root of the DNS. - * - * This is kept as an object to take advantage that in Javascript's OO objects - * are guaranteed to be distinct, therefore no other object can possibly clash - * with this one. Strings, numbers etc provide no such guarantee. - **/ -var ROOT_PATH = {}; - - -/** - * Create a new set of handlers for clarinet's events, bound to the emit - * function given. - */ -function incrementalContentBuilder( oboeBus ) { - - var emitNodeOpened = oboeBus(NODE_OPENED).emit, - emitNodeClosed = oboeBus(NODE_CLOSED).emit, - emitRootOpened = oboeBus(ROOT_PATH_FOUND).emit, - emitRootClosed = oboeBus(ROOT_NODE_FOUND).emit; - - function arrayIndicesAreKeys( possiblyInconsistentAscent, newDeepestNode) { - - /* for values in arrays we aren't pre-warned of the coming paths - (Clarinet gives no call to onkey like it does for values in objects) - so if we are in an array we need to create this path ourselves. The - key will be len(parentNode) because array keys are always sequential - numbers. */ - - var parentNode = nodeOf( head( possiblyInconsistentAscent)); - - return isOfType( Array, parentNode) - ? - keyFound( possiblyInconsistentAscent, - len(parentNode), - newDeepestNode - ) - : - // nothing needed, return unchanged - possiblyInconsistentAscent - ; - } - - function nodeOpened( ascent, newDeepestNode ) { - - if( !ascent ) { - // we discovered the root node, - emitRootOpened( newDeepestNode); - - return keyFound( ascent, ROOT_PATH, newDeepestNode); - } - - // we discovered a non-root node - - var arrayConsistentAscent = arrayIndicesAreKeys( ascent, newDeepestNode), - ancestorBranches = tail( arrayConsistentAscent), - previouslyUnmappedName = keyOf( head( arrayConsistentAscent)); - - appendBuiltContent( - ancestorBranches, - previouslyUnmappedName, - newDeepestNode - ); - - return cons( - namedNode( previouslyUnmappedName, newDeepestNode ), - ancestorBranches - ); - } - - - /** - * Add a new value to the object we are building up to represent the - * parsed JSON - */ - function appendBuiltContent( ancestorBranches, key, node ){ - - nodeOf( head( ancestorBranches))[key] = node; - } - - - /** - * For when we find a new key in the json. - * - * @param {String|Number|Object} newDeepestName the key. If we are in an - * array will be a number, otherwise a string. May take the special - * value ROOT_PATH if the root node has just been found - * - * @param {String|Number|Object|Array|Null|undefined} [maybeNewDeepestNode] - * usually this won't be known so can be undefined. Can't use null - * to represent unknown because null is a valid value in JSON - **/ - function keyFound(ascent, newDeepestName, maybeNewDeepestNode) { - - if( ascent ) { // if not root - - // If we have the key but (unless adding to an array) no known value - // yet. Put that key in the output but against no defined value: - appendBuiltContent( ascent, newDeepestName, maybeNewDeepestNode ); - } - - var ascentWithNewPath = cons( - namedNode( newDeepestName, - maybeNewDeepestNode), - ascent - ); - - emitNodeOpened( ascentWithNewPath); - - return ascentWithNewPath; - } - - - /** - * For when the current node ends. - */ - function nodeClosed( ascent ) { - - emitNodeClosed( ascent); - - return tail( ascent) || - // If there are no nodes left in the ascent the root node - // just closed. Emit a special event for this: - emitRootClosed(nodeOf(head(ascent))); - } - - var contentBuilderHandlers = {}; - contentBuilderHandlers[SAX_VALUE_OPEN] = nodeOpened; - contentBuilderHandlers[SAX_VALUE_CLOSE] = nodeClosed; - contentBuilderHandlers[SAX_KEY] = keyFound; - return contentBuilderHandlers; -} - -/** - * The jsonPath evaluator compiler used for Oboe.js. - * - * One function is exposed. This function takes a String JSONPath spec and - * returns a function to test candidate ascents for matches. - * - * String jsonPath -> (List ascent) -> Boolean|Object - * - * This file is coded in a pure functional style. That is, no function has - * side effects, every function evaluates to the same value for the same - * arguments and no variables are reassigned. - */ -// the call to jsonPathSyntax injects the token syntaxes that are needed -// inside the compiler -var jsonPathCompiler = jsonPathSyntax(function (pathNodeSyntax, - doubleDotSyntax, - dotSyntax, - bangSyntax, - emptySyntax ) { - - var CAPTURING_INDEX = 1; - var NAME_INDEX = 2; - var FIELD_LIST_INDEX = 3; - - var headKey = compose2(keyOf, head), - headNode = compose2(nodeOf, head); - - /** - * Create an evaluator function for a named path node, expressed in the - * JSONPath like: - * foo - * ["bar"] - * [2] - */ - function nameClause(previousExpr, detection ) { - - var name = detection[NAME_INDEX], - - matchesName = ( !name || name == '*' ) - ? always - : function(ascent){return headKey(ascent) == name}; - - - return lazyIntersection(matchesName, previousExpr); - } - - /** - * Create an evaluator function for a a duck-typed node, expressed like: - * - * {spin, taste, colour} - * .particle{spin, taste, colour} - * *{spin, taste, colour} - */ - function duckTypeClause(previousExpr, detection) { - - var fieldListStr = detection[FIELD_LIST_INDEX]; - - if (!fieldListStr) - return previousExpr; // don't wrap at all, return given expr as-is - - var hasAllrequiredFields = partialComplete( - hasAllProperties, - arrayAsList(fieldListStr.split(/\W+/)) - ), - - isMatch = compose2( - hasAllrequiredFields, - headNode - ); - - return lazyIntersection(isMatch, previousExpr); - } - - /** - * Expression for $, returns the evaluator function - */ - function capture( previousExpr, detection ) { - - // extract meaning from the detection - var capturing = !!detection[CAPTURING_INDEX]; - - if (!capturing) - return previousExpr; // don't wrap at all, return given expr as-is - - return lazyIntersection(previousExpr, head); - - } - - /** - * Create an evaluator function that moves onto the next item on the - * lists. This function is the place where the logic to move up a - * level in the ascent exists. - * - * Eg, for JSONPath ".foo" we need skip1(nameClause(always, [,'foo'])) - */ - function skip1(previousExpr) { - - - if( previousExpr == always ) { - /* If there is no previous expression this consume command - is at the start of the jsonPath. - Since JSONPath specifies what we'd like to find but not - necessarily everything leading down to it, when running - out of JSONPath to check against we default to true */ - return always; - } - - /** return true if the ascent we have contains only the JSON root, - * false otherwise - */ - function notAtRoot(ascent){ - return headKey(ascent) != ROOT_PATH; - } - - return lazyIntersection( - /* If we're already at the root but there are more - expressions to satisfy, can't consume any more. No match. - - This check is why none of the other exprs have to be able - to handle empty lists; skip1 is the only evaluator that - moves onto the next token and it refuses to do so once it - reaches the last item in the list. */ - notAtRoot, - - /* We are not at the root of the ascent yet. - Move to the next level of the ascent by handing only - the tail to the previous expression */ - compose2(previousExpr, tail) - ); - - } - - /** - * Create an evaluator function for the .. (double dot) token. Consumes - * zero or more levels of the ascent, the fewest that are required to find - * a match when given to previousExpr. - */ - function skipMany(previousExpr) { - - if( previousExpr == always ) { - /* If there is no previous expression this consume command - is at the start of the jsonPath. - Since JSONPath specifies what we'd like to find but not - necessarily everything leading down to it, when running - out of JSONPath to check against we default to true */ - return always; - } - - var - // In JSONPath .. is equivalent to !.. so if .. reaches the root - // the match has succeeded. Ie, we might write ..foo or !..foo - // and both should match identically. - terminalCaseWhenArrivingAtRoot = rootExpr(), - terminalCaseWhenPreviousExpressionIsSatisfied = previousExpr, - recursiveCase = skip1(function(ascent) { - return cases(ascent); - }), - - cases = lazyUnion( - terminalCaseWhenArrivingAtRoot - , terminalCaseWhenPreviousExpressionIsSatisfied - , recursiveCase - ); - - return cases; - } - - /** - * Generate an evaluator for ! - matches only the root element of the json - * and ignores any previous expressions since nothing may precede !. - */ - function rootExpr() { - - return function(ascent){ - return headKey(ascent) == ROOT_PATH; - }; - } - - /** - * Generate a statement wrapper to sit around the outermost - * clause evaluator. - * - * Handles the case where the capturing is implicit because the JSONPath - * did not contain a '$' by returning the last node. - */ - function statementExpr(lastClause) { - - return function(ascent) { - - // kick off the evaluation by passing through to the last clause - var exprMatch = lastClause(ascent); - - return exprMatch === true ? head(ascent) : exprMatch; - }; - } - - /** - * For when a token has been found in the JSONPath input. - * Compiles the parser for that token and returns in combination with the - * parser already generated. - * - * @param {Function} exprs a list of the clause evaluator generators for - * the token that was found - * @param {Function} parserGeneratedSoFar the parser already found - * @param {Array} detection the match given by the regex engine when - * the feature was found - */ - function expressionsReader( exprs, parserGeneratedSoFar, detection ) { - - // if exprs is zero-length foldR will pass back the - // parserGeneratedSoFar as-is so we don't need to treat - // this as a special case - - return foldR( - function( parserGeneratedSoFar, expr ){ - - return expr(parserGeneratedSoFar, detection); - }, - parserGeneratedSoFar, - exprs - ); - - } - - /** - * If jsonPath matches the given detector function, creates a function which - * evaluates against every clause in the clauseEvaluatorGenerators. The - * created function is propagated to the onSuccess function, along with - * the remaining unparsed JSONPath substring. - * - * The intended use is to create a clauseMatcher by filling in - * the first two arguments, thus providing a function that knows - * some syntax to match and what kind of generator to create if it - * finds it. The parameter list once completed is: - * - * (jsonPath, parserGeneratedSoFar, onSuccess) - * - * onSuccess may be compileJsonPathToFunction, to recursively continue - * parsing after finding a match or returnFoundParser to stop here. - */ - function generateClauseReaderIfTokenFound ( - - tokenDetector, clauseEvaluatorGenerators, - - jsonPath, parserGeneratedSoFar, onSuccess) { - - var detected = tokenDetector(jsonPath); - - if(detected) { - var compiledParser = expressionsReader( - clauseEvaluatorGenerators, - parserGeneratedSoFar, - detected - ), - - remainingUnparsedJsonPath = jsonPath.substr(len(detected[0])); - - return onSuccess(remainingUnparsedJsonPath, compiledParser); - } - } - - /** - * Partially completes generateClauseReaderIfTokenFound above. - */ - function clauseMatcher(tokenDetector, exprs) { - - return partialComplete( - generateClauseReaderIfTokenFound, - tokenDetector, - exprs - ); - } - - /** - * clauseForJsonPath is a function which attempts to match against - * several clause matchers in order until one matches. If non match the - * jsonPath expression is invalid and an error is thrown. - * - * The parameter list is the same as a single clauseMatcher: - * - * (jsonPath, parserGeneratedSoFar, onSuccess) - */ - var clauseForJsonPath = lazyUnion( - - clauseMatcher(pathNodeSyntax , list( capture, - duckTypeClause, - nameClause, - skip1 )) - - , clauseMatcher(doubleDotSyntax , list( skipMany)) - - // dot is a separator only (like whitespace in other languages) but - // rather than make it a special case, use an empty list of - // expressions when this token is found - , clauseMatcher(dotSyntax , list() ) - - , clauseMatcher(bangSyntax , list( capture, - rootExpr)) - - , clauseMatcher(emptySyntax , list( statementExpr)) - - , function (jsonPath) { - throw Error('"' + jsonPath + '" could not be tokenised') - } - ); - - - /** - * One of two possible values for the onSuccess argument of - * generateClauseReaderIfTokenFound. - * - * When this function is used, generateClauseReaderIfTokenFound simply - * returns the compiledParser that it made, regardless of if there is - * any remaining jsonPath to be compiled. - */ - function returnFoundParser(_remainingJsonPath, compiledParser){ - return compiledParser - } - - /** - * Recursively compile a JSONPath expression. - * - * This function serves as one of two possible values for the onSuccess - * argument of generateClauseReaderIfTokenFound, meaning continue to - * recursively compile. Otherwise, returnFoundParser is given and - * compilation terminates. - */ - function compileJsonPathToFunction( uncompiledJsonPath, - parserGeneratedSoFar ) { - - /** - * On finding a match, if there is remaining text to be compiled - * we want to either continue parsing using a recursive call to - * compileJsonPathToFunction. Otherwise, we want to stop and return - * the parser that we have found so far. - */ - var onFind = uncompiledJsonPath - ? compileJsonPathToFunction - : returnFoundParser; - - return clauseForJsonPath( - uncompiledJsonPath, - parserGeneratedSoFar, - onFind - ); - } - - /** - * This is the function that we expose to the rest of the library. - */ - return function(jsonPath){ - - try { - // Kick off the recursive parsing of the jsonPath - return compileJsonPathToFunction(jsonPath, always); - - } catch( e ) { - throw Error( 'Could not compile "' + jsonPath + - '" because ' + e.message - ); - } - } - -}); - -/** - * A pub/sub which is responsible for a single event type. A - * multi-event type event bus is created by pubSub by collecting - * several of these. - * - * @param {String} eventType - * the name of the events managed by this singleEventPubSub - * @param {singleEventPubSub} [newListener] - * place to notify of new listeners - * @param {singleEventPubSub} [removeListener] - * place to notify of when listeners are removed - */ -function singleEventPubSub(eventType, newListener, removeListener){ - - /** we are optimised for emitting events over firing them. - * As well as the tuple list which stores event ids and - * listeners there is a list with just the listeners which - * can be iterated more quickly when we are emitting - */ - var listenerTupleList, - listenerList; - - function hasId(id){ - return function(tuple) { - return tuple.id == id; - }; - } - - return { - - /** - * @param {Function} listener - * @param {*} listenerId - * an id that this listener can later by removed by. - * Can be of any type, to be compared to other ids using == - */ - on:function( listener, listenerId ) { - - var tuple = { - listener: listener - , id: listenerId || listener // when no id is given use the - // listener function as the id - }; - - if( newListener ) { - newListener.emit(eventType, listener, tuple.id); - } - - listenerTupleList = cons( tuple, listenerTupleList ); - listenerList = cons( listener, listenerList ); - - return this; // chaining - }, - - emit:function () { - applyEach( listenerList, arguments ); - }, - - un: function( listenerId ) { - - var removed; - - listenerTupleList = without( - listenerTupleList, - hasId(listenerId), - function(tuple){ - removed = tuple; - } - ); - - if( removed ) { - listenerList = without( listenerList, function(listener){ - return listener == removed.listener; - }); - - if( removeListener ) { - removeListener.emit(eventType, removed.listener, removed.id); - } - } - }, - - listeners: function(){ - // differs from Node EventEmitter: returns list, not array - return listenerList; - }, - - hasListener: function(listenerId){ - var test = listenerId? hasId(listenerId) : always; - - return defined(first( test, listenerTupleList)); - } - }; -} -/** - * pubSub is a curried interface for listening to and emitting - * events. - * - * If we get a bus: - * - * var bus = pubSub(); - * - * We can listen to event 'foo' like: - * - * bus('foo').on(myCallback) - * - * And emit event foo like: - * - * bus('foo').emit() - * - * or, with a parameter: - * - * bus('foo').emit('bar') - * - * All functions can be cached and don't need to be - * bound. Ie: - * - * var fooEmitter = bus('foo').emit - * fooEmitter('bar'); // emit an event - * fooEmitter('baz'); // emit another - * - * There's also an uncurried[1] shortcut for .emit and .on: - * - * bus.on('foo', callback) - * bus.emit('foo', 'bar') - * - * [1]: http://zvon.org/other/haskell/Outputprelude/uncurry_f.html - */ -function pubSub(){ - - var singles = {}, - newListener = newSingle('newListener'), - removeListener = newSingle('removeListener'); - - function newSingle(eventName) { - return singles[eventName] = singleEventPubSub( - eventName, - newListener, - removeListener - ); - } - - /** pubSub instances are functions */ - function pubSubInstance( eventName ){ - - return singles[eventName] || newSingle( eventName ); - } - - // add convenience EventEmitter-style uncurried form of 'emit' and 'on' - ['emit', 'on', 'un'].forEach(function(methodName){ - - pubSubInstance[methodName] = varArgs(function(eventName, parameters){ - apply( parameters, pubSubInstance( eventName )[methodName]); - }); - }); - - return pubSubInstance; -} - -/** - * This file declares some constants to use as names for event types. - */ - -var // the events which are never exported are kept as - // the smallest possible representation, in numbers: - _S = 1, - - // fired whenever a new node starts in the JSON stream: - NODE_OPENED = _S++, - - // fired whenever a node closes in the JSON stream: - NODE_CLOSED = _S++, - - // called if a .node callback returns a value - - NODE_SWAP = _S++, - NODE_DROP = _S++, - - FAIL_EVENT = 'fail', - - ROOT_NODE_FOUND = _S++, - ROOT_PATH_FOUND = _S++, - - HTTP_START = 'start', - STREAM_DATA = 'data', - STREAM_END = 'end', - ABORTING = _S++, - - // SAX events butchered from Clarinet - SAX_KEY = _S++, - SAX_VALUE_OPEN = _S++, - SAX_VALUE_CLOSE = _S++; - -function errorReport(statusCode, body, error) { - try{ - var jsonBody = JSON.parse(body); - }catch(e){} - - return { - statusCode:statusCode, - body:body, - jsonBody:jsonBody, - thrown:error - }; -} - -/** - * The pattern adaptor listens for newListener and removeListener - * events. When patterns are added or removed it compiles the JSONPath - * and wires them up. - * - * When nodes and paths are found it emits the fully-qualified match - * events with parameters ready to ship to the outside world - */ - -function patternAdapter(oboeBus, jsonPathCompiler) { - - var predicateEventMap = { - node:oboeBus(NODE_CLOSED) - , path:oboeBus(NODE_OPENED) - }; - - function emitMatchingNode(emitMatch, node, ascent) { - - /* - We're now calling to the outside world where Lisp-style - lists will not be familiar. Convert to standard arrays. - - Also, reverse the order because it is more common to - list paths "root to leaf" than "leaf to root" */ - var descent = reverseList(ascent); - - emitMatch( - node, - - // To make a path, strip off the last item which is the special - // ROOT_PATH token for the 'path' to the root node - listAsArray(tail(map(keyOf,descent))), // path - listAsArray(map(nodeOf, descent)) // ancestors - ); - } - - /* - * Set up the catching of events such as NODE_CLOSED and NODE_OPENED and, if - * matching the specified pattern, propagate to pattern-match events such as - * oboeBus('node:!') - * - * - * - * @param {Function} predicateEvent - * either oboeBus(NODE_CLOSED) or oboeBus(NODE_OPENED). - * @param {Function} compiledJsonPath - */ - function addUnderlyingListener( fullEventName, predicateEvent, compiledJsonPath ){ - - var emitMatch = oboeBus(fullEventName).emit; - - predicateEvent.on( function (ascent) { - - var maybeMatchingMapping = compiledJsonPath(ascent); - - /* Possible values for maybeMatchingMapping are now: - - false: - we did not match - - an object/array/string/number/null: - we matched and have the node that matched. - Because nulls are valid json values this can be null. - - undefined: - we matched but don't have the matching node yet. - ie, we know there is an upcoming node that matches but we - can't say anything else about it. - */ - if (maybeMatchingMapping !== false) { - - emitMatchingNode( - emitMatch, - nodeOf(maybeMatchingMapping), - ascent - ); - } - }, fullEventName); - - oboeBus('removeListener').on( function(removedEventName){ - - // if the fully qualified match event listener is later removed, clean up - // by removing the underlying listener if it was the last using that pattern: - - if( removedEventName == fullEventName ) { - - if( !oboeBus(removedEventName).listeners( )) { - predicateEvent.un( fullEventName ); - } - } - }); - } - - oboeBus('newListener').on( function(fullEventName){ - - var match = /(node|path):(.*)/.exec(fullEventName); - - if( match ) { - var predicateEvent = predicateEventMap[match[1]]; - - if( !predicateEvent.hasListener( fullEventName) ) { - - addUnderlyingListener( - fullEventName, - predicateEvent, - jsonPathCompiler( match[2] ) - ); - } - } - }) - -} - -/** - * The instance API is the thing that is returned when oboe() is called. - * it allows: - * - * - listeners for various events to be added and removed - * - the http response header/headers to be read - */ -function instanceApi(oboeBus, contentSource){ - - var oboeApi, - fullyQualifiedNamePattern = /^(node|path):./, - rootNodeFinishedEvent = oboeBus(ROOT_NODE_FOUND), - emitNodeDrop = oboeBus(NODE_DROP).emit, - emitNodeSwap = oboeBus(NODE_SWAP).emit, - - /** - * Add any kind of listener that the instance api exposes - */ - addListener = varArgs(function( eventId, parameters ){ - - if( oboeApi[eventId] ) { - - // for events added as .on(event, callback), if there is a - // .event() equivalent with special behaviour , pass through - // to that: - apply(parameters, oboeApi[eventId]); - } else { - - // we have a standard Node.js EventEmitter 2-argument call. - // The first parameter is the listener. - var event = oboeBus(eventId), - listener = parameters[0]; - - if( fullyQualifiedNamePattern.test(eventId) ) { - - // allow fully-qualified node/path listeners - // to be added - addForgettableCallback(event, listener); - } else { - - // the event has no special handling, pass through - // directly onto the event bus: - event.on( listener); - } - } - - return oboeApi; // chaining - }), - - /** - * Remove any kind of listener that the instance api exposes - */ - removeListener = function( eventId, p2, p3 ){ - - if( eventId == 'done' ) { - - rootNodeFinishedEvent.un(p2); - - } else if( eventId == 'node' || eventId == 'path' ) { - - // allow removal of node and path - oboeBus.un(eventId + ':' + p2, p3); - } else { - - // we have a standard Node.js EventEmitter 2-argument call. - // The second parameter is the listener. This may be a call - // to remove a fully-qualified node/path listener but requires - // no special handling - var listener = p2; - - oboeBus(eventId).un(listener); - } - - return oboeApi; // chaining - }; - - /** - * Add a callback, wrapped in a try/catch so as to not break the - * execution of Oboe if an exception is thrown (fail events are - * fired instead) - * - * The callback is used as the listener id so that it can later be - * removed using .un(callback) - */ - function addProtectedCallback(eventName, callback) { - oboeBus(eventName).on(protectedCallback(callback), callback); - return oboeApi; // chaining - } - - /** - * Add a callback where, if .forget() is called during the callback's - * execution, the callback will be de-registered - */ - function addForgettableCallback(event, callback, listenerId) { - - // listenerId is optional and if not given, the original - // callback will be used - listenerId = listenerId || callback; - - var safeCallback = protectedCallback(callback); - - event.on( function() { - - var discard = false; - - oboeApi.forget = function(){ - discard = true; - }; - - apply( arguments, safeCallback ); - - delete oboeApi.forget; - - if( discard ) { - event.un(listenerId); - } - }, listenerId); - - return oboeApi; // chaining - } - - /** - * wrap a callback so that if it throws, Oboe.js doesn't crash but instead - * throw the error in another event loop - */ - function protectedCallback( callback ) { - return function() { - try{ - return callback.apply(oboeApi, arguments); - }catch(e) { - setTimeout(function() { - throw e; - }); - } - } - } - - /** - * Return the fully qualified event for when a pattern matches - * either a node or a path - * - * @param type {String} either 'node' or 'path' - */ - function fullyQualifiedPatternMatchEvent(type, pattern) { - return oboeBus(type + ':' + pattern); - } - - function wrapCallbackToSwapNodeIfSomethingReturned( callback ) { - return function() { - var returnValueFromCallback = callback.apply(this, arguments); - - if( defined(returnValueFromCallback) ) { - - if( returnValueFromCallback == oboe.drop ) { - emitNodeDrop(); - } else { - emitNodeSwap(returnValueFromCallback); - } - } - } - } - - function addSingleNodeOrPathListener(eventId, pattern, callback) { - - var effectiveCallback; - - if( eventId == 'node' ) { - effectiveCallback = wrapCallbackToSwapNodeIfSomethingReturned(callback); - } else { - effectiveCallback = callback; - } - - addForgettableCallback( - fullyQualifiedPatternMatchEvent(eventId, pattern), - effectiveCallback, - callback - ); - } - - /** - * Add several listeners at a time, from a map - */ - function addMultipleNodeOrPathListeners(eventId, listenerMap) { - - for( var pattern in listenerMap ) { - addSingleNodeOrPathListener(eventId, pattern, listenerMap[pattern]); - } - } - - /** - * implementation behind .onPath() and .onNode() - */ - function addNodeOrPathListenerApi( eventId, jsonPathOrListenerMap, callback ){ - - if( isString(jsonPathOrListenerMap) ) { - addSingleNodeOrPathListener(eventId, jsonPathOrListenerMap, callback); - - } else { - addMultipleNodeOrPathListeners(eventId, jsonPathOrListenerMap); - } - - return oboeApi; // chaining - } - - - // some interface methods are only filled in after we receive - // values and are noops before that: - oboeBus(ROOT_PATH_FOUND).on( function(rootNode) { - oboeApi.root = functor(rootNode); - }); - - /** - * When content starts make the headers readable through the - * instance API - */ - oboeBus(HTTP_START).on( function(_statusCode, headers) { - - oboeApi.header = function(name) { - return name ? headers[name] - : headers - ; - } - }); - - /** - * Construct and return the public API of the Oboe instance to be - * returned to the calling application - */ - return oboeApi = { - on : addListener, - addListener : addListener, - removeListener : removeListener, - emit : oboeBus.emit, - - node : partialComplete(addNodeOrPathListenerApi, 'node'), - path : partialComplete(addNodeOrPathListenerApi, 'path'), - - done : partialComplete(addForgettableCallback, rootNodeFinishedEvent), - start : partialComplete(addProtectedCallback, HTTP_START ), - - // fail doesn't use protectedCallback because - // could lead to non-terminating loops - fail : oboeBus(FAIL_EVENT).on, - - // public api calling abort fires the ABORTING event - abort : oboeBus(ABORTING).emit, - - // initially return nothing for header and root - header : noop, - root : noop, - - source : contentSource - }; -} - -/** - * This file sits just behind the API which is used to attain a new - * Oboe instance. It creates the new components that are required - * and introduces them to each other. - */ - -function wire (httpMethodName, contentSource, body, headers, withCredentials){ - - var oboeBus = pubSub(); - - // Wire the input stream in if we are given a content source. - // This will usually be the case. If not, the instance created - // will have to be passed content from an external source. - - if( contentSource ) { - - streamingHttp( oboeBus, - httpTransport(), - httpMethodName, - contentSource, - body, - headers, - withCredentials - ); - } - - clarinet(oboeBus); - - ascentManager(oboeBus, incrementalContentBuilder(oboeBus)); - - patternAdapter(oboeBus, jsonPathCompiler); - - return instanceApi(oboeBus, contentSource); -} - -function applyDefaults( passthrough, url, httpMethodName, body, headers, withCredentials, cached ){ - - headers = headers ? - // Shallow-clone the headers array. This allows it to be - // modified without side effects to the caller. We don't - // want to change objects that the user passes in. - JSON.parse(JSON.stringify(headers)) - : {}; - - if( body ) { - if( !isString(body) ) { - - // If the body is not a string, stringify it. This allows objects to - // be given which will be sent as JSON. - body = JSON.stringify(body); - - // Default Content-Type to JSON unless given otherwise. - headers['Content-Type'] = headers['Content-Type'] || 'application/json'; - } - } else { - body = null; - } - - // support cache busting like jQuery.ajax({cache:false}) - function modifiedUrl(baseUrl, cached) { - - if( cached === false ) { - - if( baseUrl.indexOf('?') == -1 ) { - baseUrl += '?'; - } else { - baseUrl += '&'; - } - - baseUrl += '_=' + new Date().getTime(); - } - return baseUrl; - } - - return passthrough( httpMethodName || 'GET', modifiedUrl(url, cached), body, headers, withCredentials || false ); -} - -// export public API -function oboe(arg1) { - - // We use duck-typing to detect if the parameter given is a stream, with the - // below list of parameters. - // Unpipe and unshift would normally be present on a stream but this breaks - // compatibility with Request streams. - // See https://github.com/jimhigson/oboe.js/issues/65 - - var nodeStreamMethodNames = list('resume', 'pause', 'pipe'), - isStream = partialComplete( - hasAllProperties - , nodeStreamMethodNames - ); - - if( arg1 ) { - if (isStream(arg1) || isString(arg1)) { - - // simple version for GETs. Signature is: - // oboe( url ) - // or, under node: - // oboe( readableStream ) - return applyDefaults( - wire, - arg1 // url - ); - - } else { - - // method signature is: - // oboe({method:m, url:u, body:b, headers:{...}}) - - return applyDefaults( - wire, - arg1.url, - arg1.method, - arg1.body, - arg1.headers, - arg1.withCredentials, - arg1.cached - ); - - } - } else { - // wire up a no-AJAX, no-stream Oboe. Will have to have content - // fed in externally and using .emit. - return wire(); - } -} - -/* oboe.drop is a special value. If a node callback returns this value the - parsed node is deleted from the JSON - */ -oboe.drop = function() { - return oboe.drop; -}; - - - if ( typeof define === "function" && define.amd ) { - define( "oboe", [], function () { return oboe; } ); - } else if (typeof exports === 'object') { - module.exports = oboe; - } else { - window.oboe = oboe; - } -})((function(){ - // Access to the window object throws an exception in HTML5 web workers so - // point it to "self" if it runs in a web worker - try { - return window; - } catch (e) { - return self; - } - }()), Object, Array, Error, JSON); diff --git a/truebit-implementation/node_modules/oboe/dist/oboe-browser.min.js b/truebit-implementation/node_modules/oboe/dist/oboe-browser.min.js deleted file mode 100644 index 18f48d58..00000000 --- a/truebit-implementation/node_modules/oboe/dist/oboe-browser.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a,b,c,d,e,f){function g(a,b){return function(){return a.call(this,b.apply(this,arguments))}}function h(a){return function(b){return b[a]}}function i(a,b){return b.apply(f,a)}function j(a){var b=a.length-1,d=c.prototype.slice;if(0==b)return function(){return a.call(this,d.call(arguments))};if(1==b)return function(){return a.call(this,arguments[0],d.call(arguments,1))};var e=c(a.length);return function(){for(var c=0;b>c;c++)e[c]=arguments[c];return e[b]=d.call(arguments,b),a.apply(this,e)}}function k(a){return function(b,c){return a(c,b)}}function l(a,b){return function(c){return a(c)&&b(c)}}function m(){}function n(){return!0}function o(a){return function(){return a}}function p(a,b){return b&&b.constructor===a}function q(a){return a!==f}function r(a,c){return c instanceof b&&y(function(a){return a in c},a)}function s(a,b){return[a,b]}function t(a){return A(a.reduce(k(s),X))}function u(a){return w(function(a,b){return a.unshift(b),a},[],a)}function v(a,b){return b?s(a(Y(b)),v(a,Z(b))):X}function w(a,b,c){return c?a(w(a,b,Z(c)),Y(c)):b}function x(a,b,c){function d(a,c){return a?b(Y(a))?(c(Y(a)),Z(a)):s(Y(a),d(Z(a),c)):X}return d(a,c||m)}function y(a,b){return!b||a(Y(b))&&y(a,Z(b))}function z(a,b){a&&(Y(a).apply(null,b),z(Z(a),b))}function A(a){function b(a,c){return a?b(Z(a),s(Y(a),c)):c}return b(a,X)}function B(a,b){return b&&(a(Y(b))?Y(b):B(a,Z(b)))}function C(a){"use strict";function b(){var a=0;P!==f&&P.length>p&&(c("Max buffer length exceeded: textNode"),a=Math.max(a,P.length)),Q.length>p&&(c("Max buffer length exceeded: numberNode"),a=Math.max(a,Q.length)),O=p-a+Y}function c(a){P!==f&&(m(P),n(),P=f),i=d(a+"\nLn: "+$+"\nCol: "+Z+"\nChr: "+j),o(N(f,f,i))}function e(){return T==s?(m({}),n(),void(S=!0)):((T!==t||0!==X)&&c("Unexpected end"),P!==f&&(m(P),n(),P=f),void(S=!0))}function g(a){return"\r"==a||"\n"==a||" "==a||" "==a}function h(a){if(!i){if(S)return c("Cannot write after close");var d=0;for(j=a[0];j&&(k=j,j=a[d++]);)switch(Y++,"\n"==j?($++,Z=0):Z++,T){case s:if("{"===j)T=u;else if("["===j)T=w;else if(!g(j))return c("Non-whitespace before {[.");continue;case z:case u:if(g(j))continue;if(T===z)U.push(A);else{if("}"===j){m({}),n(),T=U.pop()||t;continue}U.push(v)}if('"'!==j)return c('Malformed object key should start with " ');T=y;continue;case A:case v:if(g(j))continue;if(":"===j)T===v?(U.push(v),P!==f&&(m({}),l(P),P=f),X++):P!==f&&(l(P),P=f),T=t;else if("}"===j)P!==f&&(m(P),n(),P=f),n(),X--,T=U.pop()||t;else{if(","!==j)return c("Bad object");T===v&&U.push(v),P!==f&&(m(P),n(),P=f),T=z}continue;case w:case t:if(g(j))continue;if(T===w){if(m([]),X++,T=t,"]"===j){n(),X--,T=U.pop()||t;continue}U.push(x)}if('"'===j)T=y;else if("{"===j)T=u;else if("["===j)T=w;else if("t"===j)T=B;else if("f"===j)T=E;else if("n"===j)T=I;else if("-"===j)Q+=j;else if("0"===j)Q+=j,T=M;else{if(-1==="123456789".indexOf(j))return c("Bad value");Q+=j,T=M}continue;case x:if(","===j)U.push(x),P!==f&&(m(P),n(),P=f),T=t;else{if("]"!==j){if(g(j))continue;return c("Bad array")}P!==f&&(m(P),n(),P=f),n(),X--,T=U.pop()||t}continue;case y:P===f&&(P="");var e=d-1;a:for(;;){for(;W>0;)if(V+=j,j=a.charAt(d++),4===W?(P+=String.fromCharCode(parseInt(V,16)),W=0,e=d-1):W++,!j)break a;if('"'===j&&!R){T=U.pop()||t,P+=a.substring(e,d-1);break}if("\\"===j&&!R&&(R=!0,P+=a.substring(e,d-1),j=a.charAt(d++),!j))break;if(R){if(R=!1,"n"===j?P+="\n":"r"===j?P+="\r":"t"===j?P+=" ":"f"===j?P+="\f":"b"===j?P+="\b":"u"===j?(W=1,V=""):P+=j,j=a.charAt(d++),e=d-1,j)continue;break}q.lastIndex=d;var h=q.exec(a);if(!h){d=a.length+1,P+=a.substring(e,d-1);break}if(d=h.index+1,j=a.charAt(h.index),!j){P+=a.substring(e,d-1);break}}continue;case B:if(!j)continue;if("r"!==j)return c("Invalid true started with t"+j);T=C;continue;case C:if(!j)continue;if("u"!==j)return c("Invalid true started with tr"+j);T=D;continue;case D:if(!j)continue;if("e"!==j)return c("Invalid true started with tru"+j);m(!0),n(),T=U.pop()||t;continue;case E:if(!j)continue;if("a"!==j)return c("Invalid false started with f"+j);T=F;continue;case F:if(!j)continue;if("l"!==j)return c("Invalid false started with fa"+j);T=G;continue;case G:if(!j)continue;if("s"!==j)return c("Invalid false started with fal"+j);T=H;continue;case H:if(!j)continue;if("e"!==j)return c("Invalid false started with fals"+j);m(!1),n(),T=U.pop()||t;continue;case I:if(!j)continue;if("u"!==j)return c("Invalid null started with n"+j);T=J;continue;case J:if(!j)continue;if("l"!==j)return c("Invalid null started with nu"+j);T=K;continue;case K:if(!j)continue;if("l"!==j)return c("Invalid null started with nul"+j);m(null),n(),T=U.pop()||t;continue;case L:if("."!==j)return c("Leading zero not followed by .");Q+=j,T=M;continue;case M:if(-1!=="0123456789".indexOf(j))Q+=j;else if("."===j){if(-1!==Q.indexOf("."))return c("Invalid number has two dots");Q+=j}else if("e"===j||"E"===j){if(-1!==Q.indexOf("e")||-1!==Q.indexOf("E"))return c("Invalid number has two exponential");Q+=j}else if("+"===j||"-"===j){if("e"!==k&&"E"!==k)return c("Invalid symbol in number");Q+=j}else Q&&(m(parseFloat(Q)),n(),Q=""),d--,T=U.pop()||t;continue;default:return c("Unknown state: "+T)}Y>=O&&b()}}var i,j,k,l=a(qa).emit,m=a(ra).emit,n=a(sa).emit,o=a(ja).emit,p=65536,q=/[\\"\n]/g,r=0,s=r++,t=r++,u=r++,v=r++,w=r++,x=r++,y=r++,z=r++,A=r++,B=r++,C=r++,D=r++,E=r++,F=r++,G=r++,H=r++,I=r++,J=r++,K=r++,L=r++,M=r,O=p,P=f,Q="",R=!1,S=!1,T=s,U=[],V=null,W=0,X=0,Y=0,Z=0,$=1;a(na).on(h),a(oa).on(e)}function D(a,b){"use strict";function c(a){return function(b){d=a(d,b)}}var d,e={};for(var f in b)a(f).on(c(b[f]),e);a(ha).on(function(a){var b,c=Y(d),e=aa(c),f=Z(d);f&&(b=ba(Y(f)),b[e]=a)}),a(ia).on(function(){var a,b=Y(d),c=aa(b),e=Z(d);e&&(a=ba(Y(e)),delete a[c])}),a(pa).on(function(){for(var c in b)a(c).un(e)})}function E(a){var b={};return a&&a.split("\r\n").forEach(function(a){var c=a.indexOf(": ");b[a.substring(0,c)]=a.substring(c+2)}),b}function F(a,b){function c(a){return{"http:":80,"https:":443}[a]}function d(b){return b.port||c(b.protocol||a.protocol)}return!!(b.protocol&&b.protocol!=a.protocol||b.host&&b.host!=a.host||b.host&&d(b)!=d(a))}function G(a){var b=/(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/,c=b.exec(a)||[];return{protocol:c[1]||"",host:c[2]||"",port:c[3]||""}}function H(){return new XMLHttpRequest}function I(b,c,d,e,g,h,i){"use strict";function j(){var a=c.responseText,b=a.substr(m);b&&k(b),m=V(a)}var k=b(na).emit,l=b(ja).emit,m=0,n=!0;b(pa).on(function(){c.onreadystatechange=null,c.abort()}),"onprogress"in c&&(c.onprogress=j),c.onreadystatechange=function(){function a(){try{n&&b(ma).emit(c.status,E(c.getAllResponseHeaders())),n=!1}catch(a){}}switch(c.readyState){case 2:case 3:return a();case 4:a();var d=2==String(c.status)[0];d?(j(),b(oa).emit()):l(N(c.status,c.responseText))}};try{c.open(d,e,!0);for(var o in h)c.setRequestHeader(o,h[o]);F(a.location,G(e))||c.setRequestHeader("X-Requested-With","XMLHttpRequest"),c.withCredentials=i,c.send(g)}catch(p){a.setTimeout(T(l,N(f,f,p)),0)}}function J(a,b){return{key:a,node:b}}function K(a){function b(a,b){var d=ba(Y(a));return p(c,d)?f(a,V(d),b):a}function d(a,c){if(!a)return j(c),f(a,ca,c);var d=b(a,c),g=Z(d),h=aa(Y(d));return e(g,h,c),s(J(h,c),g)}function e(a,b,c){ba(Y(a))[b]=c}function f(a,b,c){a&&e(a,b,c);var d=s(J(b,c),a);return h(d),d}function g(a){return i(a),Z(a)||k(ba(Y(a)))}var h=a(fa).emit,i=a(ga).emit,j=a(la).emit,k=a(ka).emit,l={};return l[ra]=d,l[sa]=g,l[qa]=f,l}function L(a,b,c){function d(a){return function(b){return b.id==a}}var e,f;return{on:function(c,d){var g={listener:c,id:d||c};return b&&b.emit(a,c,g.id),e=s(g,e),f=s(c,f),this},emit:function(){z(f,arguments)},un:function(b){var g;e=x(e,d(b),function(a){g=a}),g&&(f=x(f,function(a){return a==g.listener}),c&&c.emit(a,g.listener,g.id))},listeners:function(){return f},hasListener:function(a){var b=a?d(a):n;return q(B(b,e))}}}function M(){function a(a){return c[a]=L(a,d,e)}function b(b){return c[b]||a(b)}var c={},d=a("newListener"),e=a("removeListener");return["emit","on","un"].forEach(function(a){b[a]=j(function(c,d){i(d,b(c)[a])})}),b}function N(a,b,c){try{var d=e.parse(b)}catch(f){}return{statusCode:a,body:b,jsonBody:d,thrown:c}}function O(a,b){function c(a,b,c){var d=A(c);a(b,u(Z(v(aa,d))),u(v(ba,d)))}function d(b,d,e){var f=a(b).emit;d.on(function(a){var b=e(a);b!==!1&&c(f,ba(b),a)},b),a("removeListener").on(function(c){c==b&&(a(c).listeners()||d.un(b))})}var e={node:a(ga),path:a(fa)};a("newListener").on(function(a){var c=/(node|path):(.*)/.exec(a);if(c){var f=e[c[1]];f.hasListener(a)||d(a,f,b(c[2]))}})}function P(a,b){function c(b,c){return a(b).on(e(c),c),n}function d(a,b,c){c=c||b;var d=e(b);return a.on(function(){var b=!1;n.forget=function(){b=!0},i(arguments,d),delete n.forget,b&&a.un(c)},c),n}function e(a){return function(){try{return a.apply(n,arguments)}catch(b){setTimeout(function(){throw b})}}}function f(b,c){return a(b+":"+c)}function g(a){return function(){var b=a.apply(this,arguments);q(b)&&(b==S.drop?s():t(b))}}function h(a,b,c){var e;e="node"==a?g(c):c,d(f(a,b),e,c)}function k(a,b){for(var c in b)h(a,c,b[c])}function l(a,b,c){return W(b)?h(a,b,c):k(a,b),n}var n,p=/^(node|path):./,r=a(ka),s=a(ia).emit,t=a(ha).emit,u=j(function(b,c){if(n[b])i(c,n[b]);else{var e=a(b),f=c[0];p.test(b)?d(e,f):e.on(f)}return n}),v=function(b,c,d){if("done"==b)r.un(c);else if("node"==b||"path"==b)a.un(b+":"+c,d);else{var e=c;a(b).un(e)}return n};return a(la).on(function(a){n.root=o(a)}),a(ma).on(function(a,b){n.header=function(a){return a?b[a]:b}}),n={on:u,addListener:u,removeListener:v,emit:a.emit,node:T(l,"node"),path:T(l,"path"),done:T(d,r),start:T(c,ma),fail:a(ja).on,abort:a(pa).emit,header:m,root:m,source:b}}function Q(a,b,c,d,e){var f=M();return b&&I(f,H(),a,b,c,d,e),C(f),D(f,K(f)),O(f,da),P(f,b)}function R(a,b,c,d,f,g,h){function i(a,b){return b===!1&&(a+=-1==a.indexOf("?")?"?":"&",a+="_="+(new Date).getTime()),a}return f=f?e.parse(e.stringify(f)):{},d?W(d)||(d=e.stringify(d),f["Content-Type"]=f["Content-Type"]||"application/json"):d=null,a(c||"GET",i(b,h),d,f,g||!1)}function S(a){var b=$("resume","pause","pipe"),c=T(r,b);return a?c(a)||W(a)?R(Q,a):R(Q,a.url,a.method,a.body,a.headers,a.withCredentials,a.cached):Q()}var T=j(function(a,b){var c=b.length;return j(function(d){for(var e=0;e result - */ -function foldR(fn, startValue, list) { - - return list - ? fn(foldR(fn, startValue, tail(list)), head(list)) - : startValue - ; -} - -/** - * foldR implementation. Reduce a list down to a single value. - * - * @pram {Function} fn (rightEval, curVal) -> result - */ -function foldR1(fn, list) { - - return tail(list) - ? fn(foldR1(fn, tail(list)), head(list)) - : head(list) - ; -} - - -/** - * Return a list like the one given but with the first instance equal - * to item removed - */ -function without(list, test, removedFn) { - - return withoutInner(list, removedFn || noop); - - function withoutInner(subList, removedFn) { - return subList - ? ( test(head(subList)) - ? (removedFn(head(subList)), tail(subList)) - : cons(head(subList), withoutInner(tail(subList), removedFn)) - ) - : emptyList - ; - } -} - -/** - * Returns true if the given function holds for every item in - * the list, false otherwise - */ -function all(fn, list) { - - return !list || - ( fn(head(list)) && all(fn, tail(list)) ); -} - -/** - * Call every function in a list of functions with the same arguments - * - * This doesn't make any sense if we're doing pure functional because - * it doesn't return anything. Hence, this is only really useful if the - * functions being called have side-effects. - */ -function applyEach(fnList, args) { - - if( fnList ) { - head(fnList).apply(null, args); - - applyEach(tail(fnList), args); - } -} - -/** - * Reverse the order of a list - */ -function reverseList(list){ - - // js re-implementation of 3rd solution from: - // http://www.haskell.org/haskellwiki/99_questions/Solutions/5 - function reverseInner( list, reversedAlready ) { - if( !list ) { - return reversedAlready; - } - - return reverseInner(tail(list), cons(head(list), reversedAlready)) - } - - return reverseInner(list, emptyList); -} - -function first(test, list) { - return list && - (test(head(list)) - ? head(list) - : first(test,tail(list))); -} - -/* - This is a slightly hacked-up browser only version of clarinet - - * some features removed to help keep browser Oboe under - the 5k micro-library limit - * plug directly into event bus - - For the original go here: - https://github.com/dscape/clarinet - - We receive the events: - STREAM_DATA - STREAM_END - - We emit the events: - SAX_KEY - SAX_VALUE_OPEN - SAX_VALUE_CLOSE - FAIL_EVENT - */ - -function clarinet(eventBus) { - "use strict"; - - var - // shortcut some events on the bus - emitSaxKey = eventBus(SAX_KEY).emit, - emitValueOpen = eventBus(SAX_VALUE_OPEN).emit, - emitValueClose = eventBus(SAX_VALUE_CLOSE).emit, - emitFail = eventBus(FAIL_EVENT).emit, - - MAX_BUFFER_LENGTH = 64 * 1024 - , stringTokenPattern = /[\\"\n]/g - , _n = 0 - - // states - , BEGIN = _n++ - , VALUE = _n++ // general stuff - , OPEN_OBJECT = _n++ // { - , CLOSE_OBJECT = _n++ // } - , OPEN_ARRAY = _n++ // [ - , CLOSE_ARRAY = _n++ // ] - , STRING = _n++ // "" - , OPEN_KEY = _n++ // , "a" - , CLOSE_KEY = _n++ // : - , TRUE = _n++ // r - , TRUE2 = _n++ // u - , TRUE3 = _n++ // e - , FALSE = _n++ // a - , FALSE2 = _n++ // l - , FALSE3 = _n++ // s - , FALSE4 = _n++ // e - , NULL = _n++ // u - , NULL2 = _n++ // l - , NULL3 = _n++ // l - , NUMBER_DECIMAL_POINT = _n++ // . - , NUMBER_DIGIT = _n // [0-9] - - // setup initial parser values - , bufferCheckPosition = MAX_BUFFER_LENGTH - , latestError - , c - , p - , textNode = undefined - , numberNode = "" - , slashed = false - , closed = false - , state = BEGIN - , stack = [] - , unicodeS = null - , unicodeI = 0 - , depth = 0 - , position = 0 - , column = 0 //mostly for error reporting - , line = 1 - ; - - function checkBufferLength () { - - var maxActual = 0; - - if (textNode !== undefined && textNode.length > MAX_BUFFER_LENGTH) { - emitError("Max buffer length exceeded: textNode"); - maxActual = Math.max(maxActual, textNode.length); - } - if (numberNode.length > MAX_BUFFER_LENGTH) { - emitError("Max buffer length exceeded: numberNode"); - maxActual = Math.max(maxActual, numberNode.length); - } - - bufferCheckPosition = (MAX_BUFFER_LENGTH - maxActual) - + position; - } - - eventBus(STREAM_DATA).on(handleData); - - /* At the end of the http content close the clarinet - This will provide an error if the total content provided was not - valid json, ie if not all arrays, objects and Strings closed properly */ - eventBus(STREAM_END).on(handleStreamEnd); - - function emitError (errorString) { - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - - latestError = Error(errorString + "\nLn: "+line+ - "\nCol: "+column+ - "\nChr: "+c); - - emitFail(errorReport(undefined, undefined, latestError)); - } - - function handleStreamEnd() { - if( state == BEGIN ) { - // Handle the case where the stream closes without ever receiving - // any input. This isn't an error - response bodies can be blank, - // particularly for 204 http responses - - // Because of how Oboe is currently implemented, we parse a - // completely empty stream as containing an empty object. - // This is because Oboe's done event is only fired when the - // root object of the JSON stream closes. - - // This should be decoupled and attached instead to the input stream - // from the http (or whatever) resource ending. - // If this decoupling could happen the SAX parser could simply emit - // zero events on a completely empty input. - emitValueOpen({}); - emitValueClose(); - - closed = true; - return; - } - - if (state !== VALUE || depth !== 0) - emitError("Unexpected end"); - - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - - closed = true; - } - - function whitespace(c){ - return c == '\r' || c == '\n' || c == ' ' || c == '\t'; - } - - function handleData (chunk) { - - // this used to throw the error but inside Oboe we will have already - // gotten the error when it was emitted. The important thing is to - // not continue with the parse. - if (latestError) - return; - - if (closed) { - return emitError("Cannot write after close"); - } - - var i = 0; - c = chunk[0]; - - while (c) { - p = c; - c = chunk[i++]; - if(!c) break; - - position ++; - if (c == "\n") { - line ++; - column = 0; - } else column ++; - switch (state) { - - case BEGIN: - if (c === "{") state = OPEN_OBJECT; - else if (c === "[") state = OPEN_ARRAY; - else if (!whitespace(c)) - return emitError("Non-whitespace before {[."); - continue; - - case OPEN_KEY: - case OPEN_OBJECT: - if (whitespace(c)) continue; - if(state === OPEN_KEY) stack.push(CLOSE_KEY); - else { - if(c === '}') { - emitValueOpen({}); - emitValueClose(); - state = stack.pop() || VALUE; - continue; - } else stack.push(CLOSE_OBJECT); - } - if(c === '"') - state = STRING; - else - return emitError("Malformed object key should start with \" "); - continue; - - case CLOSE_KEY: - case CLOSE_OBJECT: - if (whitespace(c)) continue; - - if(c===':') { - if(state === CLOSE_OBJECT) { - stack.push(CLOSE_OBJECT); - - if (textNode !== undefined) { - // was previously (in upstream Clarinet) one event - // - object open came with the text of the first - emitValueOpen({}); - emitSaxKey(textNode); - textNode = undefined; - } - depth++; - } else { - if (textNode !== undefined) { - emitSaxKey(textNode); - textNode = undefined; - } - } - state = VALUE; - } else if (c==='}') { - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - emitValueClose(); - depth--; - state = stack.pop() || VALUE; - } else if(c===',') { - if(state === CLOSE_OBJECT) - stack.push(CLOSE_OBJECT); - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - state = OPEN_KEY; - } else - return emitError('Bad object'); - continue; - - case OPEN_ARRAY: // after an array there always a value - case VALUE: - if (whitespace(c)) continue; - if(state===OPEN_ARRAY) { - emitValueOpen([]); - depth++; - state = VALUE; - if(c === ']') { - emitValueClose(); - depth--; - state = stack.pop() || VALUE; - continue; - } else { - stack.push(CLOSE_ARRAY); - } - } - if(c === '"') state = STRING; - else if(c === '{') state = OPEN_OBJECT; - else if(c === '[') state = OPEN_ARRAY; - else if(c === 't') state = TRUE; - else if(c === 'f') state = FALSE; - else if(c === 'n') state = NULL; - else if(c === '-') { // keep and continue - numberNode += c; - } else if(c==='0') { - numberNode += c; - state = NUMBER_DIGIT; - } else if('123456789'.indexOf(c) !== -1) { - numberNode += c; - state = NUMBER_DIGIT; - } else - return emitError("Bad value"); - continue; - - case CLOSE_ARRAY: - if(c===',') { - stack.push(CLOSE_ARRAY); - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - state = VALUE; - } else if (c===']') { - if (textNode !== undefined) { - emitValueOpen(textNode); - emitValueClose(); - textNode = undefined; - } - emitValueClose(); - depth--; - state = stack.pop() || VALUE; - } else if (whitespace(c)) - continue; - else - return emitError('Bad array'); - continue; - - case STRING: - if (textNode === undefined) { - textNode = ""; - } - - // thanks thejh, this is an about 50% performance improvement. - var starti = i-1; - - STRING_BIGLOOP: while (true) { - - // zero means "no unicode active". 1-4 mean "parse some more". end after 4. - while (unicodeI > 0) { - unicodeS += c; - c = chunk.charAt(i++); - if (unicodeI === 4) { - // TODO this might be slow? well, probably not used too often anyway - textNode += String.fromCharCode(parseInt(unicodeS, 16)); - unicodeI = 0; - starti = i-1; - } else { - unicodeI++; - } - // we can just break here: no stuff we skipped that still has to be sliced out or so - if (!c) break STRING_BIGLOOP; - } - if (c === '"' && !slashed) { - state = stack.pop() || VALUE; - textNode += chunk.substring(starti, i-1); - break; - } - if (c === '\\' && !slashed) { - slashed = true; - textNode += chunk.substring(starti, i-1); - c = chunk.charAt(i++); - if (!c) break; - } - if (slashed) { - slashed = false; - if (c === 'n') { textNode += '\n'; } - else if (c === 'r') { textNode += '\r'; } - else if (c === 't') { textNode += '\t'; } - else if (c === 'f') { textNode += '\f'; } - else if (c === 'b') { textNode += '\b'; } - else if (c === 'u') { - // \uxxxx. meh! - unicodeI = 1; - unicodeS = ''; - } else { - textNode += c; - } - c = chunk.charAt(i++); - starti = i-1; - if (!c) break; - else continue; - } - - stringTokenPattern.lastIndex = i; - var reResult = stringTokenPattern.exec(chunk); - if (!reResult) { - i = chunk.length+1; - textNode += chunk.substring(starti, i-1); - break; - } - i = reResult.index+1; - c = chunk.charAt(reResult.index); - if (!c) { - textNode += chunk.substring(starti, i-1); - break; - } - } - continue; - - case TRUE: - if (!c) continue; // strange buffers - if (c==='r') state = TRUE2; - else - return emitError( 'Invalid true started with t'+ c); - continue; - - case TRUE2: - if (!c) continue; - if (c==='u') state = TRUE3; - else - return emitError('Invalid true started with tr'+ c); - continue; - - case TRUE3: - if (!c) continue; - if(c==='e') { - emitValueOpen(true); - emitValueClose(); - state = stack.pop() || VALUE; - } else - return emitError('Invalid true started with tru'+ c); - continue; - - case FALSE: - if (!c) continue; - if (c==='a') state = FALSE2; - else - return emitError('Invalid false started with f'+ c); - continue; - - case FALSE2: - if (!c) continue; - if (c==='l') state = FALSE3; - else - return emitError('Invalid false started with fa'+ c); - continue; - - case FALSE3: - if (!c) continue; - if (c==='s') state = FALSE4; - else - return emitError('Invalid false started with fal'+ c); - continue; - - case FALSE4: - if (!c) continue; - if (c==='e') { - emitValueOpen(false); - emitValueClose(); - state = stack.pop() || VALUE; - } else - return emitError('Invalid false started with fals'+ c); - continue; - - case NULL: - if (!c) continue; - if (c==='u') state = NULL2; - else - return emitError('Invalid null started with n'+ c); - continue; - - case NULL2: - if (!c) continue; - if (c==='l') state = NULL3; - else - return emitError('Invalid null started with nu'+ c); - continue; - - case NULL3: - if (!c) continue; - if(c==='l') { - emitValueOpen(null); - emitValueClose(); - state = stack.pop() || VALUE; - } else - return emitError('Invalid null started with nul'+ c); - continue; - - case NUMBER_DECIMAL_POINT: - if(c==='.') { - numberNode += c; - state = NUMBER_DIGIT; - } else - return emitError('Leading zero not followed by .'); - continue; - - case NUMBER_DIGIT: - if('0123456789'.indexOf(c) !== -1) numberNode += c; - else if (c==='.') { - if(numberNode.indexOf('.')!==-1) - return emitError('Invalid number has two dots'); - numberNode += c; - } else if (c==='e' || c==='E') { - if(numberNode.indexOf('e')!==-1 || - numberNode.indexOf('E')!==-1 ) - return emitError('Invalid number has two exponential'); - numberNode += c; - } else if (c==="+" || c==="-") { - if(!(p==='e' || p==='E')) - return emitError('Invalid symbol in number'); - numberNode += c; - } else { - if (numberNode) { - emitValueOpen(parseFloat(numberNode)); - emitValueClose(); - numberNode = ""; - } - i--; // go back one - state = stack.pop() || VALUE; - } - continue; - - default: - return emitError("Unknown state: " + state); - } - } - if (position >= bufferCheckPosition) - checkBufferLength(); - } -} - - -/** - * A bridge used to assign stateless functions to listen to clarinet. - * - * As well as the parameter from clarinet, each callback will also be passed - * the result of the last callback. - * - * This may also be used to clear all listeners by assigning zero handlers: - * - * ascentManager( clarinet, {} ) - */ -function ascentManager(oboeBus, handlers){ - "use strict"; - - var listenerId = {}, - ascent; - - function stateAfter(handler) { - return function(param){ - ascent = handler( ascent, param); - } - } - - for( var eventName in handlers ) { - - oboeBus(eventName).on(stateAfter(handlers[eventName]), listenerId); - } - - oboeBus(NODE_SWAP).on(function(newNode) { - - var oldHead = head(ascent), - key = keyOf(oldHead), - ancestors = tail(ascent), - parentNode; - - if( ancestors ) { - parentNode = nodeOf(head(ancestors)); - parentNode[key] = newNode; - } - }); - - oboeBus(NODE_DROP).on(function() { - - var oldHead = head(ascent), - key = keyOf(oldHead), - ancestors = tail(ascent), - parentNode; - - if( ancestors ) { - parentNode = nodeOf(head(ancestors)); - - delete parentNode[key]; - } - }); - - oboeBus(ABORTING).on(function(){ - - for( var eventName in handlers ) { - oboeBus(eventName).un(listenerId); - } - }); -} - -var httpTransport = functor(require('http-https')); - -/** - * A wrapper around the browser XmlHttpRequest object that raises an - * event whenever a new part of the response is available. - * - * In older browsers progressive reading is impossible so all the - * content is given in a single call. For newer ones several events - * should be raised, allowing progressive interpretation of the response. - * - * @param {Function} oboeBus an event bus local to this Oboe instance - * @param {XMLHttpRequest} transport the http implementation to use as the transport. Under normal - * operation, will have been created using httpTransport() above - * and therefore be Node's http - * but for tests a stub may be provided instead. - * @param {String} method one of 'GET' 'POST' 'PUT' 'PATCH' 'DELETE' - * @param {String} contentSource the url to make a request to, or a stream to read from - * @param {String|Null} data some content to be sent with the request. - * Only valid if method is POST or PUT. - * @param {Object} [headers] the http request headers to send - */ -function streamingHttp(oboeBus, transport, method, contentSource, data, headers) { - "use strict"; - - /* receiving data after calling .abort on Node's http has been observed in the - wild. Keep aborted as state so that if the request has been aborted we - can ignore new data from that point on */ - var aborted = false; - - function readStreamToEventBus(readableStream) { - - // use stream in flowing mode - readableStream.on('data', function (chunk) { - - // avoid reading the stream after aborting the request - if( !aborted ) { - oboeBus(STREAM_DATA).emit(chunk.toString()); - } - }); - - readableStream.on('end', function() { - - // avoid reading the stream after aborting the request - if( !aborted ) { - oboeBus(STREAM_END).emit(); - } - }); - } - - function readStreamToEnd(readableStream, callback){ - var content = ''; - - readableStream.on('data', function (chunk) { - - content += chunk.toString(); - }); - - readableStream.on('end', function() { - - callback( content ); - }); - } - - function openUrlAsStream( url ) { - - var parsedUrl = require('url').parse(url); - - return transport.request({ - hostname: parsedUrl.hostname, - port: parsedUrl.port, - path: parsedUrl.path, - method: method, - headers: headers, - protocol: parsedUrl.protocol - }); - } - - function fetchUrl() { - if( !contentSource.match(/https?:\/\//) ) { - throw new Error( - 'Supported protocols when passing a URL into Oboe are http and https. ' + - 'If you wish to use another protocol, please pass a ReadableStream ' + - '(http://nodejs.org/api/stream.html#stream_class_stream_readable) like ' + - 'oboe(fs.createReadStream("my_file")). I was given the URL: ' + - contentSource - ); - } - - var req = openUrlAsStream(contentSource); - - req.on('response', function(res){ - var statusCode = res.statusCode, - successful = String(statusCode)[0] == 2; - - oboeBus(HTTP_START).emit( res.statusCode, res.headers); - - if( successful ) { - - readStreamToEventBus(res) - - } else { - readStreamToEnd(res, function(errorBody){ - oboeBus(FAIL_EVENT).emit( - errorReport( statusCode, errorBody ) - ); - }); - } - }); - - req.on('error', function(e) { - oboeBus(FAIL_EVENT).emit( - errorReport(undefined, undefined, e ) - ); - }); - - oboeBus(ABORTING).on( function(){ - aborted = true; - req.abort(); - }); - - if( data ) { - req.write(data); - } - - req.end(); - } - - if( isString(contentSource) ) { - fetchUrl(contentSource); - } else { - // contentsource is a stream - readStreamToEventBus(contentSource); - } - -} - -var jsonPathSyntax = (function() { - - var - - /** - * Export a regular expression as a simple function by exposing just - * the Regex#exec. This allows regex tests to be used under the same - * interface as differently implemented tests, or for a user of the - * tests to not concern themselves with their implementation as regular - * expressions. - * - * This could also be expressed point-free as: - * Function.prototype.bind.bind(RegExp.prototype.exec), - * - * But that's far too confusing! (and not even smaller once minified - * and gzipped) - */ - regexDescriptor = function regexDescriptor(regex) { - return regex.exec.bind(regex); - } - - /** - * Join several regular expressions and express as a function. - * This allows the token patterns to reuse component regular expressions - * instead of being expressed in full using huge and confusing regular - * expressions. - */ - , jsonPathClause = varArgs(function( componentRegexes ) { - - // The regular expressions all start with ^ because we - // only want to find matches at the start of the - // JSONPath fragment we are inspecting - componentRegexes.unshift(/^/); - - return regexDescriptor( - RegExp( - componentRegexes.map(attr('source')).join('') - ) - ); - }) - - , possiblyCapturing = /(\$?)/ - , namedNode = /([\w-_]+|\*)/ - , namePlaceholder = /()/ - , nodeInArrayNotation = /\["([^"]+)"\]/ - , numberedNodeInArrayNotation = /\[(\d+|\*)\]/ - , fieldList = /{([\w ]*?)}/ - , optionalFieldList = /(?:{([\w ]*?)})?/ - - - // foo or * - , jsonPathNamedNodeInObjectNotation = jsonPathClause( - possiblyCapturing, - namedNode, - optionalFieldList - ) - - // ["foo"] - , jsonPathNamedNodeInArrayNotation = jsonPathClause( - possiblyCapturing, - nodeInArrayNotation, - optionalFieldList - ) - - // [2] or [*] - , jsonPathNumberedNodeInArrayNotation = jsonPathClause( - possiblyCapturing, - numberedNodeInArrayNotation, - optionalFieldList - ) - - // {a b c} - , jsonPathPureDuckTyping = jsonPathClause( - possiblyCapturing, - namePlaceholder, - fieldList - ) - - // .. - , jsonPathDoubleDot = jsonPathClause(/\.\./) - - // . - , jsonPathDot = jsonPathClause(/\./) - - // ! - , jsonPathBang = jsonPathClause( - possiblyCapturing, - /!/ - ) - - // nada! - , emptyString = jsonPathClause(/$/) - - ; - - - /* We export only a single function. When called, this function injects - into another function the descriptors from above. - */ - return function (fn){ - return fn( - lazyUnion( - jsonPathNamedNodeInObjectNotation - , jsonPathNamedNodeInArrayNotation - , jsonPathNumberedNodeInArrayNotation - , jsonPathPureDuckTyping - ) - , jsonPathDoubleDot - , jsonPathDot - , jsonPathBang - , emptyString - ); - }; - -}()); -/** - * Get a new key->node mapping - * - * @param {String|Number} key - * @param {Object|Array|String|Number|null} node a value found in the json - */ -function namedNode(key, node) { - return {key:key, node:node}; -} - -/** get the key of a namedNode */ -var keyOf = attr('key'); - -/** get the node from a namedNode */ -var nodeOf = attr('node'); -/** - * This file provides various listeners which can be used to build up - * a changing ascent based on the callbacks provided by Clarinet. It listens - * to the low-level events from Clarinet and emits higher-level ones. - * - * The building up is stateless so to track a JSON file - * ascentManager.js is required to store the ascent state - * between calls. - */ - - - -/** - * A special value to use in the path list to represent the path 'to' a root - * object (which doesn't really have any path). This prevents the need for - * special-casing detection of the root object and allows it to be treated - * like any other object. We might think of this as being similar to the - * 'unnamed root' domain ".", eg if I go to - * http://en.wikipedia.org./wiki/En/Main_page the dot after 'org' deliminates - * the unnamed root of the DNS. - * - * This is kept as an object to take advantage that in Javascript's OO objects - * are guaranteed to be distinct, therefore no other object can possibly clash - * with this one. Strings, numbers etc provide no such guarantee. - **/ -var ROOT_PATH = {}; - - -/** - * Create a new set of handlers for clarinet's events, bound to the emit - * function given. - */ -function incrementalContentBuilder( oboeBus ) { - - var emitNodeOpened = oboeBus(NODE_OPENED).emit, - emitNodeClosed = oboeBus(NODE_CLOSED).emit, - emitRootOpened = oboeBus(ROOT_PATH_FOUND).emit, - emitRootClosed = oboeBus(ROOT_NODE_FOUND).emit; - - function arrayIndicesAreKeys( possiblyInconsistentAscent, newDeepestNode) { - - /* for values in arrays we aren't pre-warned of the coming paths - (Clarinet gives no call to onkey like it does for values in objects) - so if we are in an array we need to create this path ourselves. The - key will be len(parentNode) because array keys are always sequential - numbers. */ - - var parentNode = nodeOf( head( possiblyInconsistentAscent)); - - return isOfType( Array, parentNode) - ? - keyFound( possiblyInconsistentAscent, - len(parentNode), - newDeepestNode - ) - : - // nothing needed, return unchanged - possiblyInconsistentAscent - ; - } - - function nodeOpened( ascent, newDeepestNode ) { - - if( !ascent ) { - // we discovered the root node, - emitRootOpened( newDeepestNode); - - return keyFound( ascent, ROOT_PATH, newDeepestNode); - } - - // we discovered a non-root node - - var arrayConsistentAscent = arrayIndicesAreKeys( ascent, newDeepestNode), - ancestorBranches = tail( arrayConsistentAscent), - previouslyUnmappedName = keyOf( head( arrayConsistentAscent)); - - appendBuiltContent( - ancestorBranches, - previouslyUnmappedName, - newDeepestNode - ); - - return cons( - namedNode( previouslyUnmappedName, newDeepestNode ), - ancestorBranches - ); - } - - - /** - * Add a new value to the object we are building up to represent the - * parsed JSON - */ - function appendBuiltContent( ancestorBranches, key, node ){ - - nodeOf( head( ancestorBranches))[key] = node; - } - - - /** - * For when we find a new key in the json. - * - * @param {String|Number|Object} newDeepestName the key. If we are in an - * array will be a number, otherwise a string. May take the special - * value ROOT_PATH if the root node has just been found - * - * @param {String|Number|Object|Array|Null|undefined} [maybeNewDeepestNode] - * usually this won't be known so can be undefined. Can't use null - * to represent unknown because null is a valid value in JSON - **/ - function keyFound(ascent, newDeepestName, maybeNewDeepestNode) { - - if( ascent ) { // if not root - - // If we have the key but (unless adding to an array) no known value - // yet. Put that key in the output but against no defined value: - appendBuiltContent( ascent, newDeepestName, maybeNewDeepestNode ); - } - - var ascentWithNewPath = cons( - namedNode( newDeepestName, - maybeNewDeepestNode), - ascent - ); - - emitNodeOpened( ascentWithNewPath); - - return ascentWithNewPath; - } - - - /** - * For when the current node ends. - */ - function nodeClosed( ascent ) { - - emitNodeClosed( ascent); - - return tail( ascent) || - // If there are no nodes left in the ascent the root node - // just closed. Emit a special event for this: - emitRootClosed(nodeOf(head(ascent))); - } - - var contentBuilderHandlers = {}; - contentBuilderHandlers[SAX_VALUE_OPEN] = nodeOpened; - contentBuilderHandlers[SAX_VALUE_CLOSE] = nodeClosed; - contentBuilderHandlers[SAX_KEY] = keyFound; - return contentBuilderHandlers; -} - -/** - * The jsonPath evaluator compiler used for Oboe.js. - * - * One function is exposed. This function takes a String JSONPath spec and - * returns a function to test candidate ascents for matches. - * - * String jsonPath -> (List ascent) -> Boolean|Object - * - * This file is coded in a pure functional style. That is, no function has - * side effects, every function evaluates to the same value for the same - * arguments and no variables are reassigned. - */ -// the call to jsonPathSyntax injects the token syntaxes that are needed -// inside the compiler -var jsonPathCompiler = jsonPathSyntax(function (pathNodeSyntax, - doubleDotSyntax, - dotSyntax, - bangSyntax, - emptySyntax ) { - - var CAPTURING_INDEX = 1; - var NAME_INDEX = 2; - var FIELD_LIST_INDEX = 3; - - var headKey = compose2(keyOf, head), - headNode = compose2(nodeOf, head); - - /** - * Create an evaluator function for a named path node, expressed in the - * JSONPath like: - * foo - * ["bar"] - * [2] - */ - function nameClause(previousExpr, detection ) { - - var name = detection[NAME_INDEX], - - matchesName = ( !name || name == '*' ) - ? always - : function(ascent){return headKey(ascent) == name}; - - - return lazyIntersection(matchesName, previousExpr); - } - - /** - * Create an evaluator function for a a duck-typed node, expressed like: - * - * {spin, taste, colour} - * .particle{spin, taste, colour} - * *{spin, taste, colour} - */ - function duckTypeClause(previousExpr, detection) { - - var fieldListStr = detection[FIELD_LIST_INDEX]; - - if (!fieldListStr) - return previousExpr; // don't wrap at all, return given expr as-is - - var hasAllrequiredFields = partialComplete( - hasAllProperties, - arrayAsList(fieldListStr.split(/\W+/)) - ), - - isMatch = compose2( - hasAllrequiredFields, - headNode - ); - - return lazyIntersection(isMatch, previousExpr); - } - - /** - * Expression for $, returns the evaluator function - */ - function capture( previousExpr, detection ) { - - // extract meaning from the detection - var capturing = !!detection[CAPTURING_INDEX]; - - if (!capturing) - return previousExpr; // don't wrap at all, return given expr as-is - - return lazyIntersection(previousExpr, head); - - } - - /** - * Create an evaluator function that moves onto the next item on the - * lists. This function is the place where the logic to move up a - * level in the ascent exists. - * - * Eg, for JSONPath ".foo" we need skip1(nameClause(always, [,'foo'])) - */ - function skip1(previousExpr) { - - - if( previousExpr == always ) { - /* If there is no previous expression this consume command - is at the start of the jsonPath. - Since JSONPath specifies what we'd like to find but not - necessarily everything leading down to it, when running - out of JSONPath to check against we default to true */ - return always; - } - - /** return true if the ascent we have contains only the JSON root, - * false otherwise - */ - function notAtRoot(ascent){ - return headKey(ascent) != ROOT_PATH; - } - - return lazyIntersection( - /* If we're already at the root but there are more - expressions to satisfy, can't consume any more. No match. - - This check is why none of the other exprs have to be able - to handle empty lists; skip1 is the only evaluator that - moves onto the next token and it refuses to do so once it - reaches the last item in the list. */ - notAtRoot, - - /* We are not at the root of the ascent yet. - Move to the next level of the ascent by handing only - the tail to the previous expression */ - compose2(previousExpr, tail) - ); - - } - - /** - * Create an evaluator function for the .. (double dot) token. Consumes - * zero or more levels of the ascent, the fewest that are required to find - * a match when given to previousExpr. - */ - function skipMany(previousExpr) { - - if( previousExpr == always ) { - /* If there is no previous expression this consume command - is at the start of the jsonPath. - Since JSONPath specifies what we'd like to find but not - necessarily everything leading down to it, when running - out of JSONPath to check against we default to true */ - return always; - } - - var - // In JSONPath .. is equivalent to !.. so if .. reaches the root - // the match has succeeded. Ie, we might write ..foo or !..foo - // and both should match identically. - terminalCaseWhenArrivingAtRoot = rootExpr(), - terminalCaseWhenPreviousExpressionIsSatisfied = previousExpr, - recursiveCase = skip1(function(ascent) { - return cases(ascent); - }), - - cases = lazyUnion( - terminalCaseWhenArrivingAtRoot - , terminalCaseWhenPreviousExpressionIsSatisfied - , recursiveCase - ); - - return cases; - } - - /** - * Generate an evaluator for ! - matches only the root element of the json - * and ignores any previous expressions since nothing may precede !. - */ - function rootExpr() { - - return function(ascent){ - return headKey(ascent) == ROOT_PATH; - }; - } - - /** - * Generate a statement wrapper to sit around the outermost - * clause evaluator. - * - * Handles the case where the capturing is implicit because the JSONPath - * did not contain a '$' by returning the last node. - */ - function statementExpr(lastClause) { - - return function(ascent) { - - // kick off the evaluation by passing through to the last clause - var exprMatch = lastClause(ascent); - - return exprMatch === true ? head(ascent) : exprMatch; - }; - } - - /** - * For when a token has been found in the JSONPath input. - * Compiles the parser for that token and returns in combination with the - * parser already generated. - * - * @param {Function} exprs a list of the clause evaluator generators for - * the token that was found - * @param {Function} parserGeneratedSoFar the parser already found - * @param {Array} detection the match given by the regex engine when - * the feature was found - */ - function expressionsReader( exprs, parserGeneratedSoFar, detection ) { - - // if exprs is zero-length foldR will pass back the - // parserGeneratedSoFar as-is so we don't need to treat - // this as a special case - - return foldR( - function( parserGeneratedSoFar, expr ){ - - return expr(parserGeneratedSoFar, detection); - }, - parserGeneratedSoFar, - exprs - ); - - } - - /** - * If jsonPath matches the given detector function, creates a function which - * evaluates against every clause in the clauseEvaluatorGenerators. The - * created function is propagated to the onSuccess function, along with - * the remaining unparsed JSONPath substring. - * - * The intended use is to create a clauseMatcher by filling in - * the first two arguments, thus providing a function that knows - * some syntax to match and what kind of generator to create if it - * finds it. The parameter list once completed is: - * - * (jsonPath, parserGeneratedSoFar, onSuccess) - * - * onSuccess may be compileJsonPathToFunction, to recursively continue - * parsing after finding a match or returnFoundParser to stop here. - */ - function generateClauseReaderIfTokenFound ( - - tokenDetector, clauseEvaluatorGenerators, - - jsonPath, parserGeneratedSoFar, onSuccess) { - - var detected = tokenDetector(jsonPath); - - if(detected) { - var compiledParser = expressionsReader( - clauseEvaluatorGenerators, - parserGeneratedSoFar, - detected - ), - - remainingUnparsedJsonPath = jsonPath.substr(len(detected[0])); - - return onSuccess(remainingUnparsedJsonPath, compiledParser); - } - } - - /** - * Partially completes generateClauseReaderIfTokenFound above. - */ - function clauseMatcher(tokenDetector, exprs) { - - return partialComplete( - generateClauseReaderIfTokenFound, - tokenDetector, - exprs - ); - } - - /** - * clauseForJsonPath is a function which attempts to match against - * several clause matchers in order until one matches. If non match the - * jsonPath expression is invalid and an error is thrown. - * - * The parameter list is the same as a single clauseMatcher: - * - * (jsonPath, parserGeneratedSoFar, onSuccess) - */ - var clauseForJsonPath = lazyUnion( - - clauseMatcher(pathNodeSyntax , list( capture, - duckTypeClause, - nameClause, - skip1 )) - - , clauseMatcher(doubleDotSyntax , list( skipMany)) - - // dot is a separator only (like whitespace in other languages) but - // rather than make it a special case, use an empty list of - // expressions when this token is found - , clauseMatcher(dotSyntax , list() ) - - , clauseMatcher(bangSyntax , list( capture, - rootExpr)) - - , clauseMatcher(emptySyntax , list( statementExpr)) - - , function (jsonPath) { - throw Error('"' + jsonPath + '" could not be tokenised') - } - ); - - - /** - * One of two possible values for the onSuccess argument of - * generateClauseReaderIfTokenFound. - * - * When this function is used, generateClauseReaderIfTokenFound simply - * returns the compiledParser that it made, regardless of if there is - * any remaining jsonPath to be compiled. - */ - function returnFoundParser(_remainingJsonPath, compiledParser){ - return compiledParser - } - - /** - * Recursively compile a JSONPath expression. - * - * This function serves as one of two possible values for the onSuccess - * argument of generateClauseReaderIfTokenFound, meaning continue to - * recursively compile. Otherwise, returnFoundParser is given and - * compilation terminates. - */ - function compileJsonPathToFunction( uncompiledJsonPath, - parserGeneratedSoFar ) { - - /** - * On finding a match, if there is remaining text to be compiled - * we want to either continue parsing using a recursive call to - * compileJsonPathToFunction. Otherwise, we want to stop and return - * the parser that we have found so far. - */ - var onFind = uncompiledJsonPath - ? compileJsonPathToFunction - : returnFoundParser; - - return clauseForJsonPath( - uncompiledJsonPath, - parserGeneratedSoFar, - onFind - ); - } - - /** - * This is the function that we expose to the rest of the library. - */ - return function(jsonPath){ - - try { - // Kick off the recursive parsing of the jsonPath - return compileJsonPathToFunction(jsonPath, always); - - } catch( e ) { - throw Error( 'Could not compile "' + jsonPath + - '" because ' + e.message - ); - } - } - -}); - -/** - * A pub/sub which is responsible for a single event type. A - * multi-event type event bus is created by pubSub by collecting - * several of these. - * - * @param {String} eventType - * the name of the events managed by this singleEventPubSub - * @param {singleEventPubSub} [newListener] - * place to notify of new listeners - * @param {singleEventPubSub} [removeListener] - * place to notify of when listeners are removed - */ -function singleEventPubSub(eventType, newListener, removeListener){ - - /** we are optimised for emitting events over firing them. - * As well as the tuple list which stores event ids and - * listeners there is a list with just the listeners which - * can be iterated more quickly when we are emitting - */ - var listenerTupleList, - listenerList; - - function hasId(id){ - return function(tuple) { - return tuple.id == id; - }; - } - - return { - - /** - * @param {Function} listener - * @param {*} listenerId - * an id that this listener can later by removed by. - * Can be of any type, to be compared to other ids using == - */ - on:function( listener, listenerId ) { - - var tuple = { - listener: listener - , id: listenerId || listener // when no id is given use the - // listener function as the id - }; - - if( newListener ) { - newListener.emit(eventType, listener, tuple.id); - } - - listenerTupleList = cons( tuple, listenerTupleList ); - listenerList = cons( listener, listenerList ); - - return this; // chaining - }, - - emit:function () { - applyEach( listenerList, arguments ); - }, - - un: function( listenerId ) { - - var removed; - - listenerTupleList = without( - listenerTupleList, - hasId(listenerId), - function(tuple){ - removed = tuple; - } - ); - - if( removed ) { - listenerList = without( listenerList, function(listener){ - return listener == removed.listener; - }); - - if( removeListener ) { - removeListener.emit(eventType, removed.listener, removed.id); - } - } - }, - - listeners: function(){ - // differs from Node EventEmitter: returns list, not array - return listenerList; - }, - - hasListener: function(listenerId){ - var test = listenerId? hasId(listenerId) : always; - - return defined(first( test, listenerTupleList)); - } - }; -} -/** - * pubSub is a curried interface for listening to and emitting - * events. - * - * If we get a bus: - * - * var bus = pubSub(); - * - * We can listen to event 'foo' like: - * - * bus('foo').on(myCallback) - * - * And emit event foo like: - * - * bus('foo').emit() - * - * or, with a parameter: - * - * bus('foo').emit('bar') - * - * All functions can be cached and don't need to be - * bound. Ie: - * - * var fooEmitter = bus('foo').emit - * fooEmitter('bar'); // emit an event - * fooEmitter('baz'); // emit another - * - * There's also an uncurried[1] shortcut for .emit and .on: - * - * bus.on('foo', callback) - * bus.emit('foo', 'bar') - * - * [1]: http://zvon.org/other/haskell/Outputprelude/uncurry_f.html - */ -function pubSub(){ - - var singles = {}, - newListener = newSingle('newListener'), - removeListener = newSingle('removeListener'); - - function newSingle(eventName) { - return singles[eventName] = singleEventPubSub( - eventName, - newListener, - removeListener - ); - } - - /** pubSub instances are functions */ - function pubSubInstance( eventName ){ - - return singles[eventName] || newSingle( eventName ); - } - - // add convenience EventEmitter-style uncurried form of 'emit' and 'on' - ['emit', 'on', 'un'].forEach(function(methodName){ - - pubSubInstance[methodName] = varArgs(function(eventName, parameters){ - apply( parameters, pubSubInstance( eventName )[methodName]); - }); - }); - - return pubSubInstance; -} - -/** - * This file declares some constants to use as names for event types. - */ - -var // the events which are never exported are kept as - // the smallest possible representation, in numbers: - _S = 1, - - // fired whenever a new node starts in the JSON stream: - NODE_OPENED = _S++, - - // fired whenever a node closes in the JSON stream: - NODE_CLOSED = _S++, - - // called if a .node callback returns a value - - NODE_SWAP = _S++, - NODE_DROP = _S++, - - FAIL_EVENT = 'fail', - - ROOT_NODE_FOUND = _S++, - ROOT_PATH_FOUND = _S++, - - HTTP_START = 'start', - STREAM_DATA = 'data', - STREAM_END = 'end', - ABORTING = _S++, - - // SAX events butchered from Clarinet - SAX_KEY = _S++, - SAX_VALUE_OPEN = _S++, - SAX_VALUE_CLOSE = _S++; - -function errorReport(statusCode, body, error) { - try{ - var jsonBody = JSON.parse(body); - }catch(e){} - - return { - statusCode:statusCode, - body:body, - jsonBody:jsonBody, - thrown:error - }; -} - -/** - * The pattern adaptor listens for newListener and removeListener - * events. When patterns are added or removed it compiles the JSONPath - * and wires them up. - * - * When nodes and paths are found it emits the fully-qualified match - * events with parameters ready to ship to the outside world - */ - -function patternAdapter(oboeBus, jsonPathCompiler) { - - var predicateEventMap = { - node:oboeBus(NODE_CLOSED) - , path:oboeBus(NODE_OPENED) - }; - - function emitMatchingNode(emitMatch, node, ascent) { - - /* - We're now calling to the outside world where Lisp-style - lists will not be familiar. Convert to standard arrays. - - Also, reverse the order because it is more common to - list paths "root to leaf" than "leaf to root" */ - var descent = reverseList(ascent); - - emitMatch( - node, - - // To make a path, strip off the last item which is the special - // ROOT_PATH token for the 'path' to the root node - listAsArray(tail(map(keyOf,descent))), // path - listAsArray(map(nodeOf, descent)) // ancestors - ); - } - - /* - * Set up the catching of events such as NODE_CLOSED and NODE_OPENED and, if - * matching the specified pattern, propagate to pattern-match events such as - * oboeBus('node:!') - * - * - * - * @param {Function} predicateEvent - * either oboeBus(NODE_CLOSED) or oboeBus(NODE_OPENED). - * @param {Function} compiledJsonPath - */ - function addUnderlyingListener( fullEventName, predicateEvent, compiledJsonPath ){ - - var emitMatch = oboeBus(fullEventName).emit; - - predicateEvent.on( function (ascent) { - - var maybeMatchingMapping = compiledJsonPath(ascent); - - /* Possible values for maybeMatchingMapping are now: - - false: - we did not match - - an object/array/string/number/null: - we matched and have the node that matched. - Because nulls are valid json values this can be null. - - undefined: - we matched but don't have the matching node yet. - ie, we know there is an upcoming node that matches but we - can't say anything else about it. - */ - if (maybeMatchingMapping !== false) { - - emitMatchingNode( - emitMatch, - nodeOf(maybeMatchingMapping), - ascent - ); - } - }, fullEventName); - - oboeBus('removeListener').on( function(removedEventName){ - - // if the fully qualified match event listener is later removed, clean up - // by removing the underlying listener if it was the last using that pattern: - - if( removedEventName == fullEventName ) { - - if( !oboeBus(removedEventName).listeners( )) { - predicateEvent.un( fullEventName ); - } - } - }); - } - - oboeBus('newListener').on( function(fullEventName){ - - var match = /(node|path):(.*)/.exec(fullEventName); - - if( match ) { - var predicateEvent = predicateEventMap[match[1]]; - - if( !predicateEvent.hasListener( fullEventName) ) { - - addUnderlyingListener( - fullEventName, - predicateEvent, - jsonPathCompiler( match[2] ) - ); - } - } - }) - -} - -/** - * The instance API is the thing that is returned when oboe() is called. - * it allows: - * - * - listeners for various events to be added and removed - * - the http response header/headers to be read - */ -function instanceApi(oboeBus, contentSource){ - - var oboeApi, - fullyQualifiedNamePattern = /^(node|path):./, - rootNodeFinishedEvent = oboeBus(ROOT_NODE_FOUND), - emitNodeDrop = oboeBus(NODE_DROP).emit, - emitNodeSwap = oboeBus(NODE_SWAP).emit, - - /** - * Add any kind of listener that the instance api exposes - */ - addListener = varArgs(function( eventId, parameters ){ - - if( oboeApi[eventId] ) { - - // for events added as .on(event, callback), if there is a - // .event() equivalent with special behaviour , pass through - // to that: - apply(parameters, oboeApi[eventId]); - } else { - - // we have a standard Node.js EventEmitter 2-argument call. - // The first parameter is the listener. - var event = oboeBus(eventId), - listener = parameters[0]; - - if( fullyQualifiedNamePattern.test(eventId) ) { - - // allow fully-qualified node/path listeners - // to be added - addForgettableCallback(event, listener); - } else { - - // the event has no special handling, pass through - // directly onto the event bus: - event.on( listener); - } - } - - return oboeApi; // chaining - }), - - /** - * Remove any kind of listener that the instance api exposes - */ - removeListener = function( eventId, p2, p3 ){ - - if( eventId == 'done' ) { - - rootNodeFinishedEvent.un(p2); - - } else if( eventId == 'node' || eventId == 'path' ) { - - // allow removal of node and path - oboeBus.un(eventId + ':' + p2, p3); - } else { - - // we have a standard Node.js EventEmitter 2-argument call. - // The second parameter is the listener. This may be a call - // to remove a fully-qualified node/path listener but requires - // no special handling - var listener = p2; - - oboeBus(eventId).un(listener); - } - - return oboeApi; // chaining - }; - - /** - * Add a callback, wrapped in a try/catch so as to not break the - * execution of Oboe if an exception is thrown (fail events are - * fired instead) - * - * The callback is used as the listener id so that it can later be - * removed using .un(callback) - */ - function addProtectedCallback(eventName, callback) { - oboeBus(eventName).on(protectedCallback(callback), callback); - return oboeApi; // chaining - } - - /** - * Add a callback where, if .forget() is called during the callback's - * execution, the callback will be de-registered - */ - function addForgettableCallback(event, callback, listenerId) { - - // listenerId is optional and if not given, the original - // callback will be used - listenerId = listenerId || callback; - - var safeCallback = protectedCallback(callback); - - event.on( function() { - - var discard = false; - - oboeApi.forget = function(){ - discard = true; - }; - - apply( arguments, safeCallback ); - - delete oboeApi.forget; - - if( discard ) { - event.un(listenerId); - } - }, listenerId); - - return oboeApi; // chaining - } - - /** - * wrap a callback so that if it throws, Oboe.js doesn't crash but instead - * throw the error in another event loop - */ - function protectedCallback( callback ) { - return function() { - try{ - return callback.apply(oboeApi, arguments); - }catch(e) { - setTimeout(function() { - throw e; - }); - } - } - } - - /** - * Return the fully qualified event for when a pattern matches - * either a node or a path - * - * @param type {String} either 'node' or 'path' - */ - function fullyQualifiedPatternMatchEvent(type, pattern) { - return oboeBus(type + ':' + pattern); - } - - function wrapCallbackToSwapNodeIfSomethingReturned( callback ) { - return function() { - var returnValueFromCallback = callback.apply(this, arguments); - - if( defined(returnValueFromCallback) ) { - - if( returnValueFromCallback == oboe.drop ) { - emitNodeDrop(); - } else { - emitNodeSwap(returnValueFromCallback); - } - } - } - } - - function addSingleNodeOrPathListener(eventId, pattern, callback) { - - var effectiveCallback; - - if( eventId == 'node' ) { - effectiveCallback = wrapCallbackToSwapNodeIfSomethingReturned(callback); - } else { - effectiveCallback = callback; - } - - addForgettableCallback( - fullyQualifiedPatternMatchEvent(eventId, pattern), - effectiveCallback, - callback - ); - } - - /** - * Add several listeners at a time, from a map - */ - function addMultipleNodeOrPathListeners(eventId, listenerMap) { - - for( var pattern in listenerMap ) { - addSingleNodeOrPathListener(eventId, pattern, listenerMap[pattern]); - } - } - - /** - * implementation behind .onPath() and .onNode() - */ - function addNodeOrPathListenerApi( eventId, jsonPathOrListenerMap, callback ){ - - if( isString(jsonPathOrListenerMap) ) { - addSingleNodeOrPathListener(eventId, jsonPathOrListenerMap, callback); - - } else { - addMultipleNodeOrPathListeners(eventId, jsonPathOrListenerMap); - } - - return oboeApi; // chaining - } - - - // some interface methods are only filled in after we receive - // values and are noops before that: - oboeBus(ROOT_PATH_FOUND).on( function(rootNode) { - oboeApi.root = functor(rootNode); - }); - - /** - * When content starts make the headers readable through the - * instance API - */ - oboeBus(HTTP_START).on( function(_statusCode, headers) { - - oboeApi.header = function(name) { - return name ? headers[name] - : headers - ; - } - }); - - /** - * Construct and return the public API of the Oboe instance to be - * returned to the calling application - */ - return oboeApi = { - on : addListener, - addListener : addListener, - removeListener : removeListener, - emit : oboeBus.emit, - - node : partialComplete(addNodeOrPathListenerApi, 'node'), - path : partialComplete(addNodeOrPathListenerApi, 'path'), - - done : partialComplete(addForgettableCallback, rootNodeFinishedEvent), - start : partialComplete(addProtectedCallback, HTTP_START ), - - // fail doesn't use protectedCallback because - // could lead to non-terminating loops - fail : oboeBus(FAIL_EVENT).on, - - // public api calling abort fires the ABORTING event - abort : oboeBus(ABORTING).emit, - - // initially return nothing for header and root - header : noop, - root : noop, - - source : contentSource - }; -} - -/** - * This file sits just behind the API which is used to attain a new - * Oboe instance. It creates the new components that are required - * and introduces them to each other. - */ - -function wire (httpMethodName, contentSource, body, headers, withCredentials){ - - var oboeBus = pubSub(); - - // Wire the input stream in if we are given a content source. - // This will usually be the case. If not, the instance created - // will have to be passed content from an external source. - - if( contentSource ) { - - streamingHttp( oboeBus, - httpTransport(), - httpMethodName, - contentSource, - body, - headers, - withCredentials - ); - } - - clarinet(oboeBus); - - ascentManager(oboeBus, incrementalContentBuilder(oboeBus)); - - patternAdapter(oboeBus, jsonPathCompiler); - - return instanceApi(oboeBus, contentSource); -} - -function applyDefaults( passthrough, url, httpMethodName, body, headers, withCredentials, cached ){ - - headers = headers ? - // Shallow-clone the headers array. This allows it to be - // modified without side effects to the caller. We don't - // want to change objects that the user passes in. - JSON.parse(JSON.stringify(headers)) - : {}; - - if( body ) { - if( !isString(body) ) { - - // If the body is not a string, stringify it. This allows objects to - // be given which will be sent as JSON. - body = JSON.stringify(body); - - // Default Content-Type to JSON unless given otherwise. - headers['Content-Type'] = headers['Content-Type'] || 'application/json'; - } - } else { - body = null; - } - - // support cache busting like jQuery.ajax({cache:false}) - function modifiedUrl(baseUrl, cached) { - - if( cached === false ) { - - if( baseUrl.indexOf('?') == -1 ) { - baseUrl += '?'; - } else { - baseUrl += '&'; - } - - baseUrl += '_=' + new Date().getTime(); - } - return baseUrl; - } - - return passthrough( httpMethodName || 'GET', modifiedUrl(url, cached), body, headers, withCredentials || false ); -} - -// export public API -function oboe(arg1) { - - // We use duck-typing to detect if the parameter given is a stream, with the - // below list of parameters. - // Unpipe and unshift would normally be present on a stream but this breaks - // compatibility with Request streams. - // See https://github.com/jimhigson/oboe.js/issues/65 - - var nodeStreamMethodNames = list('resume', 'pause', 'pipe'), - isStream = partialComplete( - hasAllProperties - , nodeStreamMethodNames - ); - - if( arg1 ) { - if (isStream(arg1) || isString(arg1)) { - - // simple version for GETs. Signature is: - // oboe( url ) - // or, under node: - // oboe( readableStream ) - return applyDefaults( - wire, - arg1 // url - ); - - } else { - - // method signature is: - // oboe({method:m, url:u, body:b, headers:{...}}) - - return applyDefaults( - wire, - arg1.url, - arg1.method, - arg1.body, - arg1.headers, - arg1.withCredentials, - arg1.cached - ); - - } - } else { - // wire up a no-AJAX, no-stream Oboe. Will have to have content - // fed in externally and using .emit. - return wire(); - } -} - -/* oboe.drop is a special value. If a node callback returns this value the - parsed node is deleted from the JSON - */ -oboe.drop = function() { - return oboe.drop; -}; - - - return oboe; -})(); diff --git a/truebit-implementation/node_modules/oboe/index.js b/truebit-implementation/node_modules/oboe/index.js deleted file mode 100644 index d1cc9476..00000000 --- a/truebit-implementation/node_modules/oboe/index.js +++ /dev/null @@ -1,3 +0,0 @@ -var oboe = require('./dist/oboe-node'); - -module.exports = oboe; diff --git a/truebit-implementation/node_modules/oboe/logo.png b/truebit-implementation/node_modules/oboe/logo.png deleted file mode 100644 index ecc5e539..00000000 Binary files a/truebit-implementation/node_modules/oboe/logo.png and /dev/null differ diff --git a/truebit-implementation/node_modules/oboe/package.json b/truebit-implementation/node_modules/oboe/package.json deleted file mode 100644 index 981fb201..00000000 --- a/truebit-implementation/node_modules/oboe/package.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "_from": "oboe@2.1.3", - "_id": "oboe@2.1.3", - "_inBundle": false, - "_integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", - "_location": "/oboe", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "oboe@2.1.3", - "name": "oboe", - "escapedName": "oboe", - "rawSpec": "2.1.3", - "saveSpec": null, - "fetchSpec": "2.1.3" - }, - "_requiredBy": [ - "/web3-providers-ipc" - ], - "_resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "_shasum": "2b4865dbd46be81225713f4e9bfe4bcf4f680a4f", - "_spec": "oboe@2.1.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-providers-ipc", - "author": { - "name": "Jim Higson" - }, - "browser": "./dist/oboe-browser.js", - "bugs": { - "url": "https://github.com/jimhigson/oboe.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "http-https": "^1.0.0" - }, - "deprecated": false, - "description": "Oboe.js reads json, giving you the objects as they are found without waiting for the stream to finish", - "devDependencies": { - "color": "~0.4.4", - "cors": "~2.1.1", - "doctoc": "~0.4.3", - "express": "~3.4.3", - "get-json": "0.0.1", - "grunt": "~0.4.1", - "grunt-clear": "~0.2.1", - "grunt-cli": "~0.1.9", - "grunt-concurrent": "~0.3.1", - "grunt-contrib-clean": "~0.5.0", - "grunt-contrib-concat": "~0.1.3", - "grunt-contrib-copy": "~0.4.1", - "grunt-contrib-uglify": "~0.2.0", - "grunt-contrib-watch": "~0.5.1", - "grunt-exec": "~0.4.2", - "grunt-karma": "~0.6.2", - "grunt-micro": "~0.1.0", - "grunt-wrap": "~0.2.0", - "jasmine-node": "~1.11.0", - "karma": "~0.10.0", - "karma-coverage": "^0.2.4", - "karma-firefox-launcher": "~0.1.0", - "karma-jasmine": "~0.1.5", - "karma-safari-launcher": "~0.1.1", - "matchdep": "~0.1.2", - "request": "^2.55.0" - }, - "homepage": "http://oboejs.com", - "jam": { - "main": "dist/oboe-browser.js", - "include": [ - "dist/oboe-browser.js", - "LICENCE", - "package.json", - "README.md" - ], - "dependencies": {}, - "categories": [ - "AJAX & Websockets", - "Parsers & Compilers" - ] - }, - "keywords": [ - "json", - "parser", - "stream", - "progressive", - "http", - "sax", - "event", - "emitter", - "async", - "browser" - ], - "license": "BSD", - "main": "./dist/oboe-node.js", - "name": "oboe", - "repository": { - "type": "git", - "url": "git+https://github.com/jimhigson/oboe.js.git" - }, - "scripts": { - "browser-test-auto-run": "node ./node_modules/grunt-cli/bin/grunt test-auto-run", - "dist-sizes": "node ./node_modules/grunt-cli/bin/grunt dist-sizes", - "node-test-auto-run": "node ./node_modules/grunt-cli/bin/grunt node-test-auto-run", - "test": "node ./node_modules/grunt-cli/bin/grunt headless-mode default", - "test-run": "node ./node_modules/grunt-cli/bin/grunt test-run", - "test-start-server": "node ./node_modules/grunt-cli/bin/grunt test-start-server" - }, - "title": "Oboe.js", - "version": "2.1.3" -} diff --git a/truebit-implementation/node_modules/oboe/test/README.md b/truebit-implementation/node_modules/oboe/test/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/truebit-implementation/node_modules/oboe/test/amd.conf.js b/truebit-implementation/node_modules/oboe/test/amd.conf.js deleted file mode 100644 index 889da38b..00000000 --- a/truebit-implementation/node_modules/oboe/test/amd.conf.js +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = function(config) { - config.set({ - - frameworks:['jasmine'], - - // base path, that will be used to resolve files and exclude - basePath : '..', - - // list of files / patterns to load in the browser - files : [ - 'test/libs/es5-shim.js' - , 'test/libs/es5-sham.js' - , 'test/libs/sinon.js' - , 'test/libs/sinon-ie.js' - , 'test/libs/*.js' - , 'test/require/require.js' - , 'dist/oboe-browser.min.js' - - , 'test/specs/amd.integration.spec.js' - ], - - // level of logging - // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG - logLevel : config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch : false, - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun : true - }); -}; diff --git a/truebit-implementation/node_modules/oboe/test/concat.conf.js b/truebit-implementation/node_modules/oboe/test/concat.conf.js deleted file mode 100644 index 5c274d56..00000000 --- a/truebit-implementation/node_modules/oboe/test/concat.conf.js +++ /dev/null @@ -1,34 +0,0 @@ -module.exports = function(config) { - config.set({ - - frameworks:['jasmine'], - - // base path, that will be used to resolve files and exclude - basePath : '..', - - // list of files / patterns to load in the browser - files : [ - 'test/libs/es5-shim.js' - , 'test/libs/es5-sham.js' - , 'test/libs/sinon.js' - , 'test/libs/sinon-ie.js' - , 'test/libs/*.js' - , 'dist/oboe-browser.js' - - , 'test/specs/oboe.component.spec.js' - , 'test/specs/oboe.integration.spec.js' - ], - - // level of logging - // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG - logLevel : config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch : false, - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun : true - - }); -}; diff --git a/truebit-implementation/node_modules/oboe/test/http.conf.js b/truebit-implementation/node_modules/oboe/test/http.conf.js deleted file mode 100644 index 70a8b68a..00000000 --- a/truebit-implementation/node_modules/oboe/test/http.conf.js +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = function(config) { - config.set({ - - frameworks:['jasmine'], - - // base path, that will be used to resolve files and exclude - basePath : '..', - - // list of files / patterns to load in the browser - files : [ - 'test/libs/es5-shim.js' - , 'test/libs/es5-sham.js' - , 'test/libs/sinon.js' - , 'test/libs/sinon-ie.js' - , 'test/libs/*.js' - - , 'src/events.js' - , 'src/functional.js' - , 'src/util.js' - , 'src/parseResponseHeaders.browser.js' - , 'src/detectCrossOrigin.browser.js' - , 'src/streamingHttp.browser.js' - - - , 'test/specs/streamingHttp.integration.spec.js' - ], - - // level of logging - // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG - logLevel : config.LOG_INFO, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch : false, - - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun : true - - }); -}; diff --git a/truebit-implementation/node_modules/oboe/test/json/allTypes.json b/truebit-implementation/node_modules/oboe/test/json/allTypes.json deleted file mode 100644 index abbb6ee0..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/allTypes.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "string": "ABCD" -, "number": 12345 -, "object": {} -, "array" : [] -, "true" : true -, "false" : false -, "null" : null -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/json/emptyKey.json b/truebit-implementation/node_modules/oboe/test/json/emptyKey.json deleted file mode 100644 index 36314d8a..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/emptyKey.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "myKey1": "myValue1", - "": "myValue2" -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/json/firstTenNaturalNumbers.json b/truebit-implementation/node_modules/oboe/test/json/firstTenNaturalNumbers.json deleted file mode 100644 index 0b5c0682..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/firstTenNaturalNumbers.json +++ /dev/null @@ -1 +0,0 @@ -[0,1,2,3,4,5,6,7,8,9] \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/json/incomplete.json b/truebit-implementation/node_modules/oboe/test/json/incomplete.json deleted file mode 100644 index 57947e14..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/incomplete.json +++ /dev/null @@ -1 +0,0 @@ -[[1,2,3],[4,5 diff --git a/truebit-implementation/node_modules/oboe/test/json/oneHundredRecords.json b/truebit-implementation/node_modules/oboe/test/json/oneHundredRecords.json deleted file mode 100644 index 7d0b366f..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/oneHundredRecords.json +++ /dev/null @@ -1,1007 +0,0 @@ -{ - "id": 1, - "jsonrpc": "2.0", - "total": 20000, - "result": [ - { - "id": 1, - "guid": "046447ee-da78-478c-b518-b612111942a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Murphy", - "company": "Robotomic", - "phone": "806-587-2379", - "email": "payton@robotomic.com" - }, - { - "id": 2, - "guid": "3d06a20a-c8b8-4a17-add5-e9a27b66d202", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Calhoun", - "company": "Conotomics", - "phone": "873-453-3007", - "email": "savannah@conotomics.com" - }, - { - "id": 3, - "guid": "18885904-5685-4cec-9182-a1f6509c5ce4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Carrington", - "company": "Genland", - "phone": "889-443-2207", - "email": "kaitlyn@genland.com" - }, - { - "id": 4, - "guid": "8378a1ff-d289-471d-b1aa-fe0809d8b2db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Goldman", - "company": "iQualcar", - "phone": "805-439-3302", - "email": "genesis@iqualcar.com" - }, - { - "id": 5, - "guid": "93e92a87-8512-4db8-940e-fedb7d64973f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Brooks", - "company": "Westgate", - "phone": "882-499-2432", - "email": "leah@westgate.com" - }, - { - "id": 6, - "guid": "31456de2-2fd4-4075-9f3b-9afef6a6747d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Carey", - "company": "Titanirola", - "phone": "823-450-3828", - "email": "madelyn@titanirola.com" - }, - { - "id": 7, - "guid": "416f7fec-a695-4652-b6a4-c663344941fd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Trinity Campbell", - "company": "eSteganoergy", - "phone": "824-540-3213", - "email": "trinity@esteganoergy.com" - }, - { - "id": 8, - "guid": "ce62e5ff-12ec-4097-82aa-2d5570653af7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Oldman", - "company": "Proline", - "phone": "820-584-2077", - "email": "savannah@proline.com" - }, - { - "id": 9, - "guid": "454cf0c8-0466-4703-8579-a6a97e6914b9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Samantha Chandter", - "company": "iOptystix", - "phone": "884-598-3615", - "email": "samantha@ioptystix.com" - }, - { - "id": 10, - "guid": "5ea1251f-ca94-4385-9ff7-99bf8c4b3707", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Thorndike", - "company": "Titanirola", - "phone": "807-439-3000", - "email": "layla@titanirola.com" - }, - { - "id": 11, - "guid": "79567436-45ec-4331-a707-4cb9272272ef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Fulton", - "company": "Titanirola", - "phone": "893-535-3674", - "email": "victoria@titanirola.com" - }, - { - "id": 12, - "guid": "1e3be706-e1f2-443b-8757-bf602ae7e89d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Thorndike", - "company": "Conrama", - "phone": "893-410-3150", - "email": "angelina@conrama.com" - }, - { - "id": 13, - "guid": "d31d10cc-089c-4432-969c-51ebf3570bd1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Fisher", - "company": "Inridium", - "phone": "852-514-2754", - "email": "makayla@inridium.com" - }, - { - "id": 14, - "guid": "23236036-1fb8-4691-a394-1f04c694e757", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Chapman", - "company": "Vencom", - "phone": "857-554-3909", - "email": "valeria@vencom.com" - }, - { - "id": 15, - "guid": "db1679a3-688d-4961-8d1b-711fdd98e4e3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Wallace", - "company": "Xeicon", - "phone": "800-445-3677", - "email": "alexandra@xeicon.com" - }, - { - "id": 16, - "guid": "82dabc5a-4cf1-4b41-9c45-500128c8b3df", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Vance", - "company": "Teraserv", - "phone": "836-513-3038", - "email": "kaitlyn@teraserv.com" - }, - { - "id": 17, - "guid": "049d3676-7708-4a5c-af8d-0738db178817", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Ogden", - "company": "Qualserve", - "phone": "808-571-2740", - "email": "avery@qualserve.com" - }, - { - "id": 18, - "guid": "a7eccc57-1a1c-4114-ae38-9ffba11c9246", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Gerald", - "company": "Cryptotegrity", - "phone": "876-411-2611", - "email": "savannah@cryptotegrity.com" - }, - { - "id": 19, - "guid": "f9bd1424-fe55-4c65-a1d6-f4943da1ba34", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Neal", - "company": "Tekcar", - "phone": "800-587-2691", - "email": "serenity@tekcar.com" - }, - { - "id": 20, - "guid": "c8286c32-95ba-4cc5-9186-5d3d61e1f62c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Carey", - "company": "Infragraph", - "phone": "875-545-2084", - "email": "jasmine@infragraph.com" - }, - { - "id": 21, - "guid": "bd380c03-8558-425b-84b1-ecd8142af14f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia WifKinson", - "company": "OpKeycomm", - "phone": "811-479-3113", - "email": "amelia@opkeycomm.com" - }, - { - "id": 22, - "guid": "30d856da-1843-4781-bf90-91360bf55dae", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Ogden", - "company": "Textiqua", - "phone": "835-422-2698", - "email": "emma@textiqua.com" - }, - { - "id": 23, - "guid": "3b0e71e6-dde1-4f9c-8563-53bc0fdf601e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Ford", - "company": "Fibroserve", - "phone": "810-471-3020", - "email": "evelyn@fibroserve.com" - }, - { - "id": 24, - "guid": "209bbb71-d5a3-458d-bf98-7a50a2f42bbd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Oliver", - "company": "Conrama", - "phone": "883-518-2720", - "email": "molly@conrama.com" - }, - { - "id": 25, - "guid": "1137ef18-6b98-41e6-bb94-5334f03526b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Carrington", - "company": "Mescaridic", - "phone": "806-592-2714", - "email": "melanie@mescaridic.com" - }, - { - "id": 26, - "guid": "1406fa4c-a0b7-403f-b1e2-af85b78cf2c1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Carroll", - "company": "Systheon", - "phone": "872-480-3718", - "email": "ashley@systheon.com" - }, - { - "id": 27, - "guid": "48532bf7-a9d5-4559-b7b4-6c857b807dcd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Higgins", - "company": "Allnet", - "phone": "809-409-2096", - "email": "katelyn@allnet.com" - }, - { - "id": 28, - "guid": "bf2256d9-e1c3-44f0-8458-f7759aafc571", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Mercer", - "company": "Xeicon", - "phone": "841-421-3710", - "email": "mya@xeicon.com" - }, - { - "id": 29, - "guid": "b755923a-f7d8-4cbf-82d4-eef76de5e674", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Galbraith", - "company": "Anaframe", - "phone": "813-420-2072", - "email": "gianna@anaframe.com" - }, - { - "id": 30, - "guid": "5a96819e-ce98-45b7-8d54-28c7dd90117c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Molligan", - "company": "US Omnigraphik", - "phone": "894-554-2996", - "email": "gabrielle@us omnigraphik.com" - }, - { - "id": 31, - "guid": "b55a1280-f555-44b6-8f1c-b2c00e1f60f2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Wainwright", - "company": "Navivacs", - "phone": "814-566-2925", - "email": "natalie@navivacs.com" - }, - { - "id": 32, - "guid": "e935551e-b106-4960-b69a-0422890e6880", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Molligan", - "company": "Proline", - "phone": "833-411-2666", - "email": "autumn@proline.com" - }, - { - "id": 33, - "guid": "063e653b-2335-4d07-bda4-75173eaa08da", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Miller", - "company": "Pericenta", - "phone": "851-547-3159", - "email": "ashley@pericenta.com" - }, - { - "id": 34, - "guid": "cf3dfe24-320b-4682-977d-5fd867bd5cb1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Webster", - "company": "Compuamerica", - "phone": "827-486-2808", - "email": "brooklyn@compuamerica.com" - }, - { - "id": 35, - "guid": "84f17bd0-b971-4be0-8f3f-28b73e53d4a5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Gibbs", - "company": "Videobanc", - "phone": "811-504-3512", - "email": "hailey@videobanc.com" - }, - { - "id": 36, - "guid": "0b2ce302-5cb1-479a-b1a3-8f492cb65283", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Morrison", - "company": "Teknoplexon", - "phone": "887-463-2120", - "email": "samantha@teknoplexon.com" - }, - { - "id": 37, - "guid": "f4f15e54-c16a-4e2f-b1cb-6505ae98ee37", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Oswald", - "company": "Xeicon", - "phone": "819-459-3112", - "email": "taylor@xeicon.com" - }, - { - "id": 38, - "guid": "fa104e34-97f7-4c34-8627-df4e07253302", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Waller", - "company": "Teratopia", - "phone": "837-594-2012", - "email": "camila@teratopia.com" - }, - { - "id": 39, - "guid": "6d478567-68ca-4c47-97dc-954bc8319b2d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Ford", - "company": "Unologic", - "phone": "874-440-2700", - "email": "zoey@unologic.com" - }, - { - "id": 40, - "guid": "f6ac734b-e475-487d-b3b5-37b6639c376b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Freeman", - "company": "Syssoft", - "phone": "898-459-3002", - "email": "abigail@syssoft.com" - }, - { - "id": 41, - "guid": "0203f330-8f2c-41a0-a99b-229bbc9b55dc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Milton", - "company": "Generola", - "phone": "816-447-3124", - "email": "zoey@generola.com" - }, - { - "id": 42, - "guid": "e88d7ffd-4625-4b3e-b829-e2f0a7d58680", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Thornton", - "company": "Fibroserve", - "phone": "866-513-2976", - "email": "payton@fibroserve.com" - }, - { - "id": 43, - "guid": "03fa6c0e-9a18-46ed-8313-8ce1de3d4a9a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Ogden", - "company": "Skydata", - "phone": "844-408-3290", - "email": "alyssa@skydata.com" - }, - { - "id": 44, - "guid": "0e7cfd86-184f-44ef-8c2c-808bb44a7c4d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Oldman", - "company": "Conrama", - "phone": "859-507-3860", - "email": "alexis@conrama.com" - }, - { - "id": 45, - "guid": "d8e7b890-a35f-4fc4-ad77-8b56e5c10de8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Turner", - "company": "Openserve", - "phone": "880-581-2353", - "email": "audrey@openserve.com" - }, - { - "id": 46, - "guid": "a6e83742-0a04-4993-8030-230514837caa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Miers", - "company": "OpKeycomm", - "phone": "803-460-3501", - "email": "maya@opkeycomm.com" - }, - { - "id": 47, - "guid": "332aa9d3-eb42-4343-b079-46628cb81696", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Wayne", - "company": "Proline", - "phone": "890-573-2886", - "email": "chloe@proline.com" - }, - { - "id": 48, - "guid": "67385697-bcb3-40f0-821a-f1d75dd62503", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison Brooks", - "company": "eSteganoergy", - "phone": "880-451-2793", - "email": "madison@esteganoergy.com" - }, - { - "id": 49, - "guid": "8af583f6-7929-40eb-a52c-010f14e25d0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Galbraith", - "company": "Netsystems", - "phone": "875-528-3158", - "email": "lillian@netsystems.com" - }, - { - "id": 50, - "guid": "c7fc495c-dedd-4c0a-9570-f14193a53886", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Daniels", - "company": "Compuamerica", - "phone": "826-585-2965", - "email": "addison@compuamerica.com" - }, - { - "id": 51, - "guid": "03781014-082e-42a3-8a1d-af957050536c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Sheldon", - "company": "US Infratouch", - "phone": "812-588-2969", - "email": "audrey@us infratouch.com" - }, - { - "id": 52, - "guid": "ff438497-453c-412a-980f-04836628915a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Hardman", - "company": "OpKeycomm", - "phone": "824-452-3622", - "email": "valeria@opkeycomm.com" - }, - { - "id": 53, - "guid": "b9922441-470f-4e7c-817e-d3827b7794bb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Michaelson", - "company": "Rapigrafix", - "phone": "808-596-2516", - "email": "kaylee@rapigrafix.com" - }, - { - "id": 54, - "guid": "955e4fe2-e595-459a-acdc-3ed19f5c69b2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Bailey Carrington", - "company": "Fibrotopia", - "phone": "870-472-2979", - "email": "bailey@fibrotopia.com" - }, - { - "id": 55, - "guid": "fa1a2554-409e-4ea3-a661-9629faa895db", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bella Hawkins", - "company": "Netsystems", - "phone": "822-481-3541", - "email": "bella@netsystems.com" - }, - { - "id": 56, - "guid": "54d8f80f-ce10-423f-b941-e6587bbc7e4f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Sheldon", - "company": "Quintegrity", - "phone": "891-555-2893", - "email": "kylie@quintegrity.com" - }, - { - "id": 57, - "guid": "a4d7811e-7030-4baa-bfa2-d6c420c25116", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Croftoon", - "company": "eEyetanic", - "phone": "862-484-3428", - "email": "gabriella@eeyetanic.com" - }, - { - "id": 58, - "guid": "f33d03ff-0737-4e24-a4ed-a1b6a073abe1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Ward", - "company": "Jamrola", - "phone": "800-450-2433", - "email": "chloe@jamrola.com" - }, - { - "id": 59, - "guid": "9861e563-1613-4fef-b117-36fe0afd4c37", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Hancock", - "company": "Openserve", - "phone": "893-592-3698", - "email": "khloe@openserve.com" - }, - { - "id": 60, - "guid": "c6332bab-7d46-4dfd-9850-5824d8d7640b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Milton", - "company": "Proline", - "phone": "836-414-2328", - "email": "andrea@proline.com" - }, - { - "id": 61, - "guid": "22bd60a1-0f48-4909-8c83-f55f291607db", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Miln", - "company": "Infraique", - "phone": "845-440-2597", - "email": "zoey@infraique.com" - }, - { - "id": 62, - "guid": "b6d62cfd-df30-4530-9f4c-870694700e4e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Day", - "company": "Videobanc", - "phone": "843-527-2382", - "email": "jocelyn@videobanc.com" - }, - { - "id": 63, - "guid": "14beb613-b8ec-4953-a46b-b373234149c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Gustman", - "company": "Pacwest", - "phone": "895-484-2126", - "email": "nevaeh@pacwest.com" - }, - { - "id": 64, - "guid": "bc1cd9cc-ae58-4b48-9a6c-3f441a254a27", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Hailey", - "company": "Truegate", - "phone": "840-560-2201", - "email": "avery@truegate.com" - }, - { - "id": 65, - "guid": "60905bde-f447-4eb7-a1d9-56027ea6b01c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Gardner", - "company": "Venconix", - "phone": "866-566-2532", - "email": "kaylee@venconix.com" - }, - { - "id": 66, - "guid": "8229f71a-3d4b-477e-b69b-c3d2cc994dcb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Chapman", - "company": "RoboAerlogix", - "phone": "829-483-2385", - "email": "melanie@roboaerlogix.com" - }, - { - "id": 67, - "guid": "f340a27c-a6bc-4419-887e-eb4974122b01", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Mercer", - "company": "Anagraph", - "phone": "879-549-2467", - "email": "sydney@anagraph.com" - }, - { - "id": 68, - "guid": "e9a4d060-8af8-40ec-92a0-3b7ba53d4fc0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Hailey", - "company": "eSteganoergy", - "phone": "818-409-2159", - "email": "gabriella@esteganoergy.com" - }, - { - "id": 69, - "guid": "2f553263-5440-4d0f-a27d-c0ab4cccb6da", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Winter", - "company": "OpKeycomm", - "phone": "888-560-2724", - "email": "ariana@opkeycomm.com" - }, - { - "id": 70, - "guid": "28a2bc9c-d7e3-4935-a942-25d8c73ce2da", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Valeria White", - "company": "SysUSA", - "phone": "866-461-2778", - "email": "valeria@sysusa.com" - }, - { - "id": 71, - "guid": "edf2bd2a-a1dd-4110-bced-ca898aabf8f1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Gustman", - "company": "Unologic", - "phone": "875-541-3769", - "email": "lily@unologic.com" - }, - { - "id": 72, - "guid": "b468f12e-4b4f-410c-98ee-e08bbc45993a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Daniels", - "company": "Anagraph", - "phone": "828-536-3011", - "email": "jasmine@anagraph.com" - }, - { - "id": 73, - "guid": "bcc8ecb6-3b57-4abb-8193-d6de5f9b6c84", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Carey", - "company": "Sontopia", - "phone": "898-514-2249", - "email": "autumn@sontopia.com" - }, - { - "id": 74, - "guid": "d115e8b7-7082-481a-981d-3d5c8b2cb638", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Chesterton", - "company": "Polytheon", - "phone": "831-552-2814", - "email": "genesis@polytheon.com" - }, - { - "id": 75, - "guid": "8dbcea88-84bf-4154-b95d-0bf5181210ca", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Brooks", - "company": "Sontopia", - "phone": "892-446-2969", - "email": "maya@sontopia.com" - }, - { - "id": 76, - "guid": "322e3297-e665-4c10-b0a2-2d5f256d1b48", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Cook", - "company": "Unconix", - "phone": "842-600-2909", - "email": "madelyn@unconix.com" - }, - { - "id": 77, - "guid": "8a2cc0a6-a316-4600-b673-1f9275e21432", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brianna Campbell", - "company": "Enlogia", - "phone": "877-405-2653", - "email": "brianna@enlogia.com" - }, - { - "id": 78, - "guid": "259ec896-0ae6-4707-991c-b9ee0c2ac42a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Eva Hailey", - "company": "Cryptotegrity", - "phone": "862-492-3121", - "email": "eva@cryptotegrity.com" - }, - { - "id": 79, - "guid": "80948ec6-f7b2-4436-9af5-6ea04fbb5716", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Wayne", - "company": "Skydata", - "phone": "843-466-2319", - "email": "angelina@skydata.com" - }, - { - "id": 80, - "guid": "df82f61e-ec34-4527-89d4-2666b6cf40d1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Adamson", - "company": "Fibroserve", - "phone": "874-566-2516", - "email": "molly@fibroserve.com" - }, - { - "id": 81, - "guid": "75351ef9-3ba6-4779-bde3-8927a566b7b8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Gustman", - "company": "Enlogia", - "phone": "823-579-3886", - "email": "eva@enlogia.com" - }, - { - "id": 82, - "guid": "a23bf0bd-7353-4f88-b041-a6a71c2ea20c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Morrison", - "company": "Anaframe", - "phone": "897-497-2540", - "email": "madelyn@anaframe.com" - }, - { - "id": 83, - "guid": "4652d92d-67b6-4e7f-aed4-a210d40238ac", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Smith", - "company": "Allnet", - "phone": "882-554-2473", - "email": "ava@allnet.com" - }, - { - "id": 84, - "guid": "76f782a8-9d92-4cc4-9e9c-c67281516a5e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Carey", - "company": "Jamrola", - "phone": "886-577-3461", - "email": "jessica@jamrola.com" - }, - { - "id": 85, - "guid": "cdbbf9fe-0c97-4944-a9d4-c47df2528f0a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alyssa Oliver", - "company": "Westgate", - "phone": "806-458-2960", - "email": "alyssa@westgate.com" - }, - { - "id": 86, - "guid": "2e8b9cb6-b741-4416-9023-9521d98ede2e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Winter", - "company": "Conotomics", - "phone": "813-514-3987", - "email": "jessica@conotomics.com" - }, - { - "id": 87, - "guid": "9078f6f7-7662-4e20-9044-682ac87496c8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Fisher", - "company": "Conotomics", - "phone": "845-523-2623", - "email": "molly@conotomics.com" - }, - { - "id": 88, - "guid": "5e5bf44a-f376-4374-831e-e3d7bd431d0e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Hancock", - "company": "Robotemplate", - "phone": "829-459-2458", - "email": "payton@robotemplate.com" - }, - { - "id": 89, - "guid": "34292e46-7da6-45c4-ae35-02584a76e38e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Day", - "company": "Steganoconiche", - "phone": "802-473-3320", - "email": "jasmine@steganoconiche.com" - }, - { - "id": 90, - "guid": "2cd013c4-cc30-4a29-99fd-4ca87cae443a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Miers", - "company": "Keytheon", - "phone": "833-468-3209", - "email": "avery@keytheon.com" - }, - { - "id": 91, - "guid": "e4cdeaa3-0a84-4df3-b414-ef274298b069", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ella Brown", - "company": "Jamconik", - "phone": "898-520-3724", - "email": "ella@jamconik.com" - }, - { - "id": 92, - "guid": "a4d3e9e2-8a49-43f3-9f41-2c212110111f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Nathan", - "company": "iEnland", - "phone": "881-405-2960", - "email": "evelyn@ienland.com" - }, - { - "id": 93, - "guid": "1e4e9d0f-f57d-454a-b4f7-d23ba8722288", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Milton", - "company": "iSkyvaco", - "phone": "881-436-3566", - "email": "leah@iskyvaco.com" - }, - { - "id": 94, - "guid": "9eff5d1a-1413-4a78-98ed-985dbf6f4516", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Waller", - "company": "Enlogia", - "phone": "825-560-3105", - "email": "riley@enlogia.com" - }, - { - "id": 95, - "guid": "03c259af-fae6-403d-8c8c-6564cd434990", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Nash", - "company": "Aprama", - "phone": "893-405-3053", - "email": "madeline@aprama.com" - }, - { - "id": 96, - "guid": "bcb29d86-e92a-4a41-8cb9-c9286a4a8f52", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Hodges", - "company": "Genland", - "phone": "837-445-3835", - "email": "mya@genland.com" - }, - { - "id": 97, - "guid": "7b9b60b7-cab5-4cfc-9b89-5f6979c2beaa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Owen", - "company": "Qualserve", - "phone": "851-548-3270", - "email": "zoe@qualserve.com" - }, - { - "id": 98, - "guid": "581c6600-ff61-4d37-9151-9fce171af488", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Chapman", - "company": "Transtouch", - "phone": "823-557-3299", - "email": "serenity@transtouch.com" - }, - { - "id": 99, - "guid": "008e837a-503f-43a0-8b10-c3f87a65d21a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Fisher", - "company": "Openserve", - "phone": "831-588-3294", - "email": "mackenzie@openserve.com" - }, - { - "id": 100, - "guid": "55f9d460-428f-422b-baa5-a78340b087e0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Fisher", - "company": "Gigaura", - "phone": "805-509-3468", - "email": "lillian@gigaura.com" - } - ] -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/json/smallestPossible.json b/truebit-implementation/node_modules/oboe/test/json/smallestPossible.json deleted file mode 100644 index 9e26dfee..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/smallestPossible.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/json/tenRecords.json b/truebit-implementation/node_modules/oboe/test/json/tenRecords.json deleted file mode 100644 index 1ed3a42e..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/tenRecords.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "id": 1, - "jsonrpc": "2.0", - "total": 20000, - "result": [ - { - "id": 1, - "guid": "046447ee-da78-478c-b518-b612111942a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Murphy", - "company": "Robotomic", - "phone": "806-587-2379", - "email": "payton@robotomic.com" - }, - { - "id": 2, - "guid": "3d06a20a-c8b8-4a17-add5-e9a27b66d202", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Calhoun", - "company": "Conotomics", - "phone": "873-453-3007", - "email": "savannah@conotomics.com" - }, - { - "id": 3, - "guid": "18885904-5685-4cec-9182-a1f6509c5ce4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Carrington", - "company": "Genland", - "phone": "889-443-2207", - "email": "kaitlyn@genland.com" - }, - { - "id": 4, - "guid": "8378a1ff-d289-471d-b1aa-fe0809d8b2db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Goldman", - "company": "iQualcar", - "phone": "805-439-3302", - "email": "genesis@iqualcar.com" - }, - { - "id": 5, - "guid": "93e92a87-8512-4db8-940e-fedb7d64973f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Brooks", - "company": "Westgate", - "phone": "882-499-2432", - "email": "leah@westgate.com" - }, - { - "id": 6, - "guid": "31456de2-2fd4-4075-9f3b-9afef6a6747d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Carey", - "company": "Titanirola", - "phone": "823-450-3828", - "email": "madelyn@titanirola.com" - }, - { - "id": 7, - "guid": "416f7fec-a695-4652-b6a4-c663344941fd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Trinity Campbell", - "company": "eSteganoergy", - "phone": "824-540-3213", - "email": "trinity@esteganoergy.com" - }, - { - "id": 8, - "guid": "ce62e5ff-12ec-4097-82aa-2d5570653af7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Oldman", - "company": "Proline", - "phone": "820-584-2077", - "email": "savannah@proline.com" - }, - { - "id": 9, - "guid": "454cf0c8-0466-4703-8579-a6a97e6914b9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Samantha Chandter", - "company": "iOptystix", - "phone": "884-598-3615", - "email": "samantha@ioptystix.com" - }, - { - "id": 10, - "guid": "5ea1251f-ca94-4385-9ff7-99bf8c4b3707", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Thorndike", - "company": "Titanirola", - "phone": "807-439-3000", - "email": "layla@titanirola.com" - } - ] -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/json/twentyThousandRecords.json b/truebit-implementation/node_modules/oboe/test/json/twentyThousandRecords.json deleted file mode 100644 index 5e811844..00000000 --- a/truebit-implementation/node_modules/oboe/test/json/twentyThousandRecords.json +++ /dev/null @@ -1,200007 +0,0 @@ -{ - "id": 1, - "jsonrpc": "2.0", - "total": 20000, - "result": [ - { - "id": 1, - "guid": "046447ee-da78-478c-b518-b612111942a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Murphy", - "company": "Robotomic", - "phone": "806-587-2379", - "email": "payton@robotomic.com" - }, - { - "id": 2, - "guid": "3d06a20a-c8b8-4a17-add5-e9a27b66d202", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Calhoun", - "company": "Conotomics", - "phone": "873-453-3007", - "email": "savannah@conotomics.com" - }, - { - "id": 3, - "guid": "18885904-5685-4cec-9182-a1f6509c5ce4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Carrington", - "company": "Genland", - "phone": "889-443-2207", - "email": "kaitlyn@genland.com" - }, - { - "id": 4, - "guid": "8378a1ff-d289-471d-b1aa-fe0809d8b2db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Goldman", - "company": "iQualcar", - "phone": "805-439-3302", - "email": "genesis@iqualcar.com" - }, - { - "id": 5, - "guid": "93e92a87-8512-4db8-940e-fedb7d64973f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Brooks", - "company": "Westgate", - "phone": "882-499-2432", - "email": "leah@westgate.com" - }, - { - "id": 6, - "guid": "31456de2-2fd4-4075-9f3b-9afef6a6747d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Carey", - "company": "Titanirola", - "phone": "823-450-3828", - "email": "madelyn@titanirola.com" - }, - { - "id": 7, - "guid": "416f7fec-a695-4652-b6a4-c663344941fd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Trinity Campbell", - "company": "eSteganoergy", - "phone": "824-540-3213", - "email": "trinity@esteganoergy.com" - }, - { - "id": 8, - "guid": "ce62e5ff-12ec-4097-82aa-2d5570653af7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Oldman", - "company": "Proline", - "phone": "820-584-2077", - "email": "savannah@proline.com" - }, - { - "id": 9, - "guid": "454cf0c8-0466-4703-8579-a6a97e6914b9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Samantha Chandter", - "company": "iOptystix", - "phone": "884-598-3615", - "email": "samantha@ioptystix.com" - }, - { - "id": 10, - "guid": "5ea1251f-ca94-4385-9ff7-99bf8c4b3707", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Thorndike", - "company": "Titanirola", - "phone": "807-439-3000", - "email": "layla@titanirola.com" - }, - { - "id": 11, - "guid": "79567436-45ec-4331-a707-4cb9272272ef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Fulton", - "company": "Titanirola", - "phone": "893-535-3674", - "email": "victoria@titanirola.com" - }, - { - "id": 12, - "guid": "1e3be706-e1f2-443b-8757-bf602ae7e89d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Thorndike", - "company": "Conrama", - "phone": "893-410-3150", - "email": "angelina@conrama.com" - }, - { - "id": 13, - "guid": "d31d10cc-089c-4432-969c-51ebf3570bd1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Fisher", - "company": "Inridium", - "phone": "852-514-2754", - "email": "makayla@inridium.com" - }, - { - "id": 14, - "guid": "23236036-1fb8-4691-a394-1f04c694e757", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Chapman", - "company": "Vencom", - "phone": "857-554-3909", - "email": "valeria@vencom.com" - }, - { - "id": 15, - "guid": "db1679a3-688d-4961-8d1b-711fdd98e4e3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Wallace", - "company": "Xeicon", - "phone": "800-445-3677", - "email": "alexandra@xeicon.com" - }, - { - "id": 16, - "guid": "82dabc5a-4cf1-4b41-9c45-500128c8b3df", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Vance", - "company": "Teraserv", - "phone": "836-513-3038", - "email": "kaitlyn@teraserv.com" - }, - { - "id": 17, - "guid": "049d3676-7708-4a5c-af8d-0738db178817", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Ogden", - "company": "Qualserve", - "phone": "808-571-2740", - "email": "avery@qualserve.com" - }, - { - "id": 18, - "guid": "a7eccc57-1a1c-4114-ae38-9ffba11c9246", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Gerald", - "company": "Cryptotegrity", - "phone": "876-411-2611", - "email": "savannah@cryptotegrity.com" - }, - { - "id": 19, - "guid": "f9bd1424-fe55-4c65-a1d6-f4943da1ba34", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Neal", - "company": "Tekcar", - "phone": "800-587-2691", - "email": "serenity@tekcar.com" - }, - { - "id": 20, - "guid": "c8286c32-95ba-4cc5-9186-5d3d61e1f62c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Carey", - "company": "Infragraph", - "phone": "875-545-2084", - "email": "jasmine@infragraph.com" - }, - { - "id": 21, - "guid": "bd380c03-8558-425b-84b1-ecd8142af14f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia WifKinson", - "company": "OpKeycomm", - "phone": "811-479-3113", - "email": "amelia@opkeycomm.com" - }, - { - "id": 22, - "guid": "30d856da-1843-4781-bf90-91360bf55dae", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Ogden", - "company": "Textiqua", - "phone": "835-422-2698", - "email": "emma@textiqua.com" - }, - { - "id": 23, - "guid": "3b0e71e6-dde1-4f9c-8563-53bc0fdf601e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Ford", - "company": "Fibroserve", - "phone": "810-471-3020", - "email": "evelyn@fibroserve.com" - }, - { - "id": 24, - "guid": "209bbb71-d5a3-458d-bf98-7a50a2f42bbd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Oliver", - "company": "Conrama", - "phone": "883-518-2720", - "email": "molly@conrama.com" - }, - { - "id": 25, - "guid": "1137ef18-6b98-41e6-bb94-5334f03526b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Carrington", - "company": "Mescaridic", - "phone": "806-592-2714", - "email": "melanie@mescaridic.com" - }, - { - "id": 26, - "guid": "1406fa4c-a0b7-403f-b1e2-af85b78cf2c1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Carroll", - "company": "Systheon", - "phone": "872-480-3718", - "email": "ashley@systheon.com" - }, - { - "id": 27, - "guid": "48532bf7-a9d5-4559-b7b4-6c857b807dcd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Higgins", - "company": "Allnet", - "phone": "809-409-2096", - "email": "katelyn@allnet.com" - }, - { - "id": 28, - "guid": "bf2256d9-e1c3-44f0-8458-f7759aafc571", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Mercer", - "company": "Xeicon", - "phone": "841-421-3710", - "email": "mya@xeicon.com" - }, - { - "id": 29, - "guid": "b755923a-f7d8-4cbf-82d4-eef76de5e674", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Galbraith", - "company": "Anaframe", - "phone": "813-420-2072", - "email": "gianna@anaframe.com" - }, - { - "id": 30, - "guid": "5a96819e-ce98-45b7-8d54-28c7dd90117c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Molligan", - "company": "US Omnigraphik", - "phone": "894-554-2996", - "email": "gabrielle@us omnigraphik.com" - }, - { - "id": 31, - "guid": "b55a1280-f555-44b6-8f1c-b2c00e1f60f2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Wainwright", - "company": "Navivacs", - "phone": "814-566-2925", - "email": "natalie@navivacs.com" - }, - { - "id": 32, - "guid": "e935551e-b106-4960-b69a-0422890e6880", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Molligan", - "company": "Proline", - "phone": "833-411-2666", - "email": "autumn@proline.com" - }, - { - "id": 33, - "guid": "063e653b-2335-4d07-bda4-75173eaa08da", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Miller", - "company": "Pericenta", - "phone": "851-547-3159", - "email": "ashley@pericenta.com" - }, - { - "id": 34, - "guid": "cf3dfe24-320b-4682-977d-5fd867bd5cb1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Webster", - "company": "Compuamerica", - "phone": "827-486-2808", - "email": "brooklyn@compuamerica.com" - }, - { - "id": 35, - "guid": "84f17bd0-b971-4be0-8f3f-28b73e53d4a5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Gibbs", - "company": "Videobanc", - "phone": "811-504-3512", - "email": "hailey@videobanc.com" - }, - { - "id": 36, - "guid": "0b2ce302-5cb1-479a-b1a3-8f492cb65283", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Morrison", - "company": "Teknoplexon", - "phone": "887-463-2120", - "email": "samantha@teknoplexon.com" - }, - { - "id": 37, - "guid": "f4f15e54-c16a-4e2f-b1cb-6505ae98ee37", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Oswald", - "company": "Xeicon", - "phone": "819-459-3112", - "email": "taylor@xeicon.com" - }, - { - "id": 38, - "guid": "fa104e34-97f7-4c34-8627-df4e07253302", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Waller", - "company": "Teratopia", - "phone": "837-594-2012", - "email": "camila@teratopia.com" - }, - { - "id": 39, - "guid": "6d478567-68ca-4c47-97dc-954bc8319b2d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Ford", - "company": "Unologic", - "phone": "874-440-2700", - "email": "zoey@unologic.com" - }, - { - "id": 40, - "guid": "f6ac734b-e475-487d-b3b5-37b6639c376b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Freeman", - "company": "Syssoft", - "phone": "898-459-3002", - "email": "abigail@syssoft.com" - }, - { - "id": 41, - "guid": "0203f330-8f2c-41a0-a99b-229bbc9b55dc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Milton", - "company": "Generola", - "phone": "816-447-3124", - "email": "zoey@generola.com" - }, - { - "id": 42, - "guid": "e88d7ffd-4625-4b3e-b829-e2f0a7d58680", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Thornton", - "company": "Fibroserve", - "phone": "866-513-2976", - "email": "payton@fibroserve.com" - }, - { - "id": 43, - "guid": "03fa6c0e-9a18-46ed-8313-8ce1de3d4a9a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Ogden", - "company": "Skydata", - "phone": "844-408-3290", - "email": "alyssa@skydata.com" - }, - { - "id": 44, - "guid": "0e7cfd86-184f-44ef-8c2c-808bb44a7c4d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Oldman", - "company": "Conrama", - "phone": "859-507-3860", - "email": "alexis@conrama.com" - }, - { - "id": 45, - "guid": "d8e7b890-a35f-4fc4-ad77-8b56e5c10de8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Turner", - "company": "Openserve", - "phone": "880-581-2353", - "email": "audrey@openserve.com" - }, - { - "id": 46, - "guid": "a6e83742-0a04-4993-8030-230514837caa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Miers", - "company": "OpKeycomm", - "phone": "803-460-3501", - "email": "maya@opkeycomm.com" - }, - { - "id": 47, - "guid": "332aa9d3-eb42-4343-b079-46628cb81696", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Wayne", - "company": "Proline", - "phone": "890-573-2886", - "email": "chloe@proline.com" - }, - { - "id": 48, - "guid": "67385697-bcb3-40f0-821a-f1d75dd62503", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison Brooks", - "company": "eSteganoergy", - "phone": "880-451-2793", - "email": "madison@esteganoergy.com" - }, - { - "id": 49, - "guid": "8af583f6-7929-40eb-a52c-010f14e25d0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Galbraith", - "company": "Netsystems", - "phone": "875-528-3158", - "email": "lillian@netsystems.com" - }, - { - "id": 50, - "guid": "c7fc495c-dedd-4c0a-9570-f14193a53886", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Daniels", - "company": "Compuamerica", - "phone": "826-585-2965", - "email": "addison@compuamerica.com" - }, - { - "id": 51, - "guid": "03781014-082e-42a3-8a1d-af957050536c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Sheldon", - "company": "US Infratouch", - "phone": "812-588-2969", - "email": "audrey@us infratouch.com" - }, - { - "id": 52, - "guid": "ff438497-453c-412a-980f-04836628915a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Hardman", - "company": "OpKeycomm", - "phone": "824-452-3622", - "email": "valeria@opkeycomm.com" - }, - { - "id": 53, - "guid": "b9922441-470f-4e7c-817e-d3827b7794bb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Michaelson", - "company": "Rapigrafix", - "phone": "808-596-2516", - "email": "kaylee@rapigrafix.com" - }, - { - "id": 54, - "guid": "955e4fe2-e595-459a-acdc-3ed19f5c69b2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Bailey Carrington", - "company": "Fibrotopia", - "phone": "870-472-2979", - "email": "bailey@fibrotopia.com" - }, - { - "id": 55, - "guid": "fa1a2554-409e-4ea3-a661-9629faa895db", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bella Hawkins", - "company": "Netsystems", - "phone": "822-481-3541", - "email": "bella@netsystems.com" - }, - { - "id": 56, - "guid": "54d8f80f-ce10-423f-b941-e6587bbc7e4f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Sheldon", - "company": "Quintegrity", - "phone": "891-555-2893", - "email": "kylie@quintegrity.com" - }, - { - "id": 57, - "guid": "a4d7811e-7030-4baa-bfa2-d6c420c25116", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Croftoon", - "company": "eEyetanic", - "phone": "862-484-3428", - "email": "gabriella@eeyetanic.com" - }, - { - "id": 58, - "guid": "f33d03ff-0737-4e24-a4ed-a1b6a073abe1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Ward", - "company": "Jamrola", - "phone": "800-450-2433", - "email": "chloe@jamrola.com" - }, - { - "id": 59, - "guid": "9861e563-1613-4fef-b117-36fe0afd4c37", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Hancock", - "company": "Openserve", - "phone": "893-592-3698", - "email": "khloe@openserve.com" - }, - { - "id": 60, - "guid": "c6332bab-7d46-4dfd-9850-5824d8d7640b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Milton", - "company": "Proline", - "phone": "836-414-2328", - "email": "andrea@proline.com" - }, - { - "id": 61, - "guid": "22bd60a1-0f48-4909-8c83-f55f291607db", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Miln", - "company": "Infraique", - "phone": "845-440-2597", - "email": "zoey@infraique.com" - }, - { - "id": 62, - "guid": "b6d62cfd-df30-4530-9f4c-870694700e4e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Day", - "company": "Videobanc", - "phone": "843-527-2382", - "email": "jocelyn@videobanc.com" - }, - { - "id": 63, - "guid": "14beb613-b8ec-4953-a46b-b373234149c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Gustman", - "company": "Pacwest", - "phone": "895-484-2126", - "email": "nevaeh@pacwest.com" - }, - { - "id": 64, - "guid": "bc1cd9cc-ae58-4b48-9a6c-3f441a254a27", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Hailey", - "company": "Truegate", - "phone": "840-560-2201", - "email": "avery@truegate.com" - }, - { - "id": 65, - "guid": "60905bde-f447-4eb7-a1d9-56027ea6b01c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Gardner", - "company": "Venconix", - "phone": "866-566-2532", - "email": "kaylee@venconix.com" - }, - { - "id": 66, - "guid": "8229f71a-3d4b-477e-b69b-c3d2cc994dcb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Chapman", - "company": "RoboAerlogix", - "phone": "829-483-2385", - "email": "melanie@roboaerlogix.com" - }, - { - "id": 67, - "guid": "f340a27c-a6bc-4419-887e-eb4974122b01", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Mercer", - "company": "Anagraph", - "phone": "879-549-2467", - "email": "sydney@anagraph.com" - }, - { - "id": 68, - "guid": "e9a4d060-8af8-40ec-92a0-3b7ba53d4fc0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Hailey", - "company": "eSteganoergy", - "phone": "818-409-2159", - "email": "gabriella@esteganoergy.com" - }, - { - "id": 69, - "guid": "2f553263-5440-4d0f-a27d-c0ab4cccb6da", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Winter", - "company": "OpKeycomm", - "phone": "888-560-2724", - "email": "ariana@opkeycomm.com" - }, - { - "id": 70, - "guid": "28a2bc9c-d7e3-4935-a942-25d8c73ce2da", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Valeria White", - "company": "SysUSA", - "phone": "866-461-2778", - "email": "valeria@sysusa.com" - }, - { - "id": 71, - "guid": "edf2bd2a-a1dd-4110-bced-ca898aabf8f1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Gustman", - "company": "Unologic", - "phone": "875-541-3769", - "email": "lily@unologic.com" - }, - { - "id": 72, - "guid": "b468f12e-4b4f-410c-98ee-e08bbc45993a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Daniels", - "company": "Anagraph", - "phone": "828-536-3011", - "email": "jasmine@anagraph.com" - }, - { - "id": 73, - "guid": "bcc8ecb6-3b57-4abb-8193-d6de5f9b6c84", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Carey", - "company": "Sontopia", - "phone": "898-514-2249", - "email": "autumn@sontopia.com" - }, - { - "id": 74, - "guid": "d115e8b7-7082-481a-981d-3d5c8b2cb638", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Chesterton", - "company": "Polytheon", - "phone": "831-552-2814", - "email": "genesis@polytheon.com" - }, - { - "id": 75, - "guid": "8dbcea88-84bf-4154-b95d-0bf5181210ca", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Brooks", - "company": "Sontopia", - "phone": "892-446-2969", - "email": "maya@sontopia.com" - }, - { - "id": 76, - "guid": "322e3297-e665-4c10-b0a2-2d5f256d1b48", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Cook", - "company": "Unconix", - "phone": "842-600-2909", - "email": "madelyn@unconix.com" - }, - { - "id": 77, - "guid": "8a2cc0a6-a316-4600-b673-1f9275e21432", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brianna Campbell", - "company": "Enlogia", - "phone": "877-405-2653", - "email": "brianna@enlogia.com" - }, - { - "id": 78, - "guid": "259ec896-0ae6-4707-991c-b9ee0c2ac42a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Eva Hailey", - "company": "Cryptotegrity", - "phone": "862-492-3121", - "email": "eva@cryptotegrity.com" - }, - { - "id": 79, - "guid": "80948ec6-f7b2-4436-9af5-6ea04fbb5716", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Wayne", - "company": "Skydata", - "phone": "843-466-2319", - "email": "angelina@skydata.com" - }, - { - "id": 80, - "guid": "df82f61e-ec34-4527-89d4-2666b6cf40d1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Adamson", - "company": "Fibroserve", - "phone": "874-566-2516", - "email": "molly@fibroserve.com" - }, - { - "id": 81, - "guid": "75351ef9-3ba6-4779-bde3-8927a566b7b8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Gustman", - "company": "Enlogia", - "phone": "823-579-3886", - "email": "eva@enlogia.com" - }, - { - "id": 82, - "guid": "a23bf0bd-7353-4f88-b041-a6a71c2ea20c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Morrison", - "company": "Anaframe", - "phone": "897-497-2540", - "email": "madelyn@anaframe.com" - }, - { - "id": 83, - "guid": "4652d92d-67b6-4e7f-aed4-a210d40238ac", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Smith", - "company": "Allnet", - "phone": "882-554-2473", - "email": "ava@allnet.com" - }, - { - "id": 84, - "guid": "76f782a8-9d92-4cc4-9e9c-c67281516a5e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Carey", - "company": "Jamrola", - "phone": "886-577-3461", - "email": "jessica@jamrola.com" - }, - { - "id": 85, - "guid": "cdbbf9fe-0c97-4944-a9d4-c47df2528f0a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alyssa Oliver", - "company": "Westgate", - "phone": "806-458-2960", - "email": "alyssa@westgate.com" - }, - { - "id": 86, - "guid": "2e8b9cb6-b741-4416-9023-9521d98ede2e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Winter", - "company": "Conotomics", - "phone": "813-514-3987", - "email": "jessica@conotomics.com" - }, - { - "id": 87, - "guid": "9078f6f7-7662-4e20-9044-682ac87496c8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Fisher", - "company": "Conotomics", - "phone": "845-523-2623", - "email": "molly@conotomics.com" - }, - { - "id": 88, - "guid": "5e5bf44a-f376-4374-831e-e3d7bd431d0e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Hancock", - "company": "Robotemplate", - "phone": "829-459-2458", - "email": "payton@robotemplate.com" - }, - { - "id": 89, - "guid": "34292e46-7da6-45c4-ae35-02584a76e38e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Day", - "company": "Steganoconiche", - "phone": "802-473-3320", - "email": "jasmine@steganoconiche.com" - }, - { - "id": 90, - "guid": "2cd013c4-cc30-4a29-99fd-4ca87cae443a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Miers", - "company": "Keytheon", - "phone": "833-468-3209", - "email": "avery@keytheon.com" - }, - { - "id": 91, - "guid": "e4cdeaa3-0a84-4df3-b414-ef274298b069", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ella Brown", - "company": "Jamconik", - "phone": "898-520-3724", - "email": "ella@jamconik.com" - }, - { - "id": 92, - "guid": "a4d3e9e2-8a49-43f3-9f41-2c212110111f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Nathan", - "company": "iEnland", - "phone": "881-405-2960", - "email": "evelyn@ienland.com" - }, - { - "id": 93, - "guid": "1e4e9d0f-f57d-454a-b4f7-d23ba8722288", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Milton", - "company": "iSkyvaco", - "phone": "881-436-3566", - "email": "leah@iskyvaco.com" - }, - { - "id": 94, - "guid": "9eff5d1a-1413-4a78-98ed-985dbf6f4516", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Waller", - "company": "Enlogia", - "phone": "825-560-3105", - "email": "riley@enlogia.com" - }, - { - "id": 95, - "guid": "03c259af-fae6-403d-8c8c-6564cd434990", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Nash", - "company": "Aprama", - "phone": "893-405-3053", - "email": "madeline@aprama.com" - }, - { - "id": 96, - "guid": "bcb29d86-e92a-4a41-8cb9-c9286a4a8f52", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Hodges", - "company": "Genland", - "phone": "837-445-3835", - "email": "mya@genland.com" - }, - { - "id": 97, - "guid": "7b9b60b7-cab5-4cfc-9b89-5f6979c2beaa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Owen", - "company": "Qualserve", - "phone": "851-548-3270", - "email": "zoe@qualserve.com" - }, - { - "id": 98, - "guid": "581c6600-ff61-4d37-9151-9fce171af488", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Chapman", - "company": "Transtouch", - "phone": "823-557-3299", - "email": "serenity@transtouch.com" - }, - { - "id": 99, - "guid": "008e837a-503f-43a0-8b10-c3f87a65d21a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Fisher", - "company": "Openserve", - "phone": "831-588-3294", - "email": "mackenzie@openserve.com" - }, - { - "id": 100, - "guid": "55f9d460-428f-422b-baa5-a78340b087e0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Fisher", - "company": "Gigaura", - "phone": "805-509-3468", - "email": "lillian@gigaura.com" - }, - { - "id": 101, - "guid": "48ab6663-51ba-4e64-b094-c4cfb4396e1d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaitlyn Turner", - "company": "Syssoft", - "phone": "809-434-2428", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 102, - "guid": "22a0101a-bd27-4ae5-92a0-7b080a580d03", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Ward", - "company": "Fibroserve", - "phone": "816-520-2796", - "email": "claire@fibroserve.com" - }, - { - "id": 103, - "guid": "5a15748a-5f3c-4890-a1db-4de756a66081", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Nelson", - "company": "Sontopia", - "phone": "809-578-2942", - "email": "hannah@sontopia.com" - }, - { - "id": 104, - "guid": "fc3d3c78-1edc-4e5d-a0ca-a8805d390c53", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Paige Day", - "company": "Ventanium", - "phone": "842-524-3998", - "email": "paige@ventanium.com" - }, - { - "id": 105, - "guid": "6c210e48-4e54-4a3c-b353-843ba6acd52a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Mercer", - "company": "Ventanium", - "phone": "858-459-2593", - "email": "mya@ventanium.com" - }, - { - "id": 106, - "guid": "039ff1aa-798e-4b23-a71b-60ca6737e3cd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Miller", - "company": "Mescatron", - "phone": "880-435-2217", - "email": "eva@mescatron.com" - }, - { - "id": 107, - "guid": "e39d68bd-4eee-4fdd-8f7a-40b7081d0007", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Miln", - "company": "Gigaura", - "phone": "832-522-2972", - "email": "sophia@gigaura.com" - }, - { - "id": 108, - "guid": "c2d28f87-51ce-49ee-8755-4c25375ea1fe", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Clapton", - "company": "Vencom", - "phone": "898-452-3452", - "email": "lily@vencom.com" - }, - { - "id": 109, - "guid": "1471696d-75e0-4943-b3b3-4762bbc2a77e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Morgan Vance", - "company": "Vencom", - "phone": "823-597-3042", - "email": "morgan@vencom.com" - }, - { - "id": 110, - "guid": "a83ece61-0480-45df-a7fa-cdbcb2ee840f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Chandter", - "company": "Conotomics", - "phone": "841-516-3308", - "email": "mia@conotomics.com" - }, - { - "id": 111, - "guid": "5004d484-8f32-4fd6-bb4b-069fc955402f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emily Crossman", - "company": "Venconix", - "phone": "895-545-3108", - "email": "emily@venconix.com" - }, - { - "id": 112, - "guid": "4816f3d0-35c7-48f6-9d12-43bc98f7f432", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Cramer", - "company": "Venconix", - "phone": "840-557-2913", - "email": "kimberly@venconix.com" - }, - { - "id": 113, - "guid": "562f288a-e95f-4023-a38e-4d1b3ec6afb9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Gilmore", - "company": "Westtomik", - "phone": "846-478-3796", - "email": "samantha@westtomik.com" - }, - { - "id": 114, - "guid": "0785e96c-ffdc-4ec1-9fcc-1d319821f998", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton White", - "company": "Hypervaco", - "phone": "819-407-3212", - "email": "peyton@hypervaco.com" - }, - { - "id": 115, - "guid": "a14ba82a-067e-40bc-92db-41934c9142d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Murphy", - "company": "Pericenta", - "phone": "860-558-2799", - "email": "kaylee@pericenta.com" - }, - { - "id": 116, - "guid": "ae5fa029-5595-47dc-8413-dc8d56974db2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Adamson", - "company": "Teratopia", - "phone": "893-442-3595", - "email": "addison@teratopia.com" - }, - { - "id": 117, - "guid": "5183aa64-04fe-4d79-94ee-8ff79de69fd0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Owen", - "company": "Systheon", - "phone": "846-404-3006", - "email": "leah@systheon.com" - }, - { - "id": 118, - "guid": "bf7df6ca-d919-4426-9c8c-40950e7bd06e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Fulton", - "company": "Nanobanc", - "phone": "886-534-3296", - "email": "sophia@nanobanc.com" - }, - { - "id": 119, - "guid": "213cc0c5-e44f-44b3-bffa-1baa4b0c9212", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Hailey", - "company": "Inridium", - "phone": "811-422-2439", - "email": "sophia@inridium.com" - }, - { - "id": 120, - "guid": "1f7d0d65-fa71-42cb-b348-daa2ee4021e7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Gilson", - "company": "Westmedia", - "phone": "864-506-2343", - "email": "olivia@westmedia.com" - }, - { - "id": 121, - "guid": "a94c0cb4-06c7-41e3-b116-8ce9c9f96e6a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Brickman", - "company": "Titanigraf", - "phone": "863-545-2128", - "email": "paige@titanigraf.com" - }, - { - "id": 122, - "guid": "15b930ec-c311-461a-8114-ed3a2525a445", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoey Carey", - "company": "iQualcar", - "phone": "892-530-2998", - "email": "zoey@iqualcar.com" - }, - { - "id": 123, - "guid": "f532ebd9-7c57-49bf-9a47-4cfaddafdf17", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Ford", - "company": "Netseco", - "phone": "891-479-3436", - "email": "ashley@netseco.com" - }, - { - "id": 124, - "guid": "0bac443e-8207-4115-8696-0799e61c9485", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Wainwright", - "company": "Truegate", - "phone": "811-433-2302", - "email": "addison@truegate.com" - }, - { - "id": 125, - "guid": "36838fcd-65c8-4a45-93bf-97d024402372", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Cramer", - "company": "Cryptotegrity", - "phone": "838-564-2523", - "email": "kaylee@cryptotegrity.com" - }, - { - "id": 126, - "guid": "e0ee0952-0317-4022-b552-f0a1bed4eace", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Wesley", - "company": "Systheon", - "phone": "842-564-2011", - "email": "alexa@systheon.com" - }, - { - "id": 127, - "guid": "fbc708b3-4f7c-404b-a544-58718f4b1435", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Hamphrey", - "company": "Idmax", - "phone": "898-467-2616", - "email": "audrey@idmax.com" - }, - { - "id": 128, - "guid": "cde19cff-0401-4a94-8882-80a873ab870a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Wallace", - "company": "Syssoft", - "phone": "893-419-2522", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 129, - "guid": "cc37cbeb-6a09-4c51-88d8-75610f0813a8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Carey", - "company": "Pacwest", - "phone": "854-500-2568", - "email": "autumn@pacwest.com" - }, - { - "id": 130, - "guid": "b2a06516-cd6e-402f-a16f-26aa9a54d736", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Sherlock", - "company": "Navivacs", - "phone": "846-581-3619", - "email": "rachel@navivacs.com" - }, - { - "id": 131, - "guid": "3becf22b-9449-4416-aad8-81833a10c99a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lily Thorndike", - "company": "Airdyne", - "phone": "814-415-2434", - "email": "lily@airdyne.com" - }, - { - "id": 132, - "guid": "4943f217-c6f1-418b-aab1-4775c8c83797", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Gardner", - "company": "Jamconik", - "phone": "801-491-3423", - "email": "julia@jamconik.com" - }, - { - "id": 133, - "guid": "85de8a98-3004-4f62-ad3b-64e996d44488", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Clapton", - "company": "Robotomic", - "phone": "827-495-2707", - "email": "samantha@robotomic.com" - }, - { - "id": 134, - "guid": "348b9d52-acbb-45bb-958e-60d1dd33cc49", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Chapman", - "company": "eEyetanic", - "phone": "802-413-2089", - "email": "charlotte@eeyetanic.com" - }, - { - "id": 135, - "guid": "aeafd222-fbb5-48f2-800e-fd63707c7c03", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Calhoun", - "company": "Allphysiche", - "phone": "845-511-2144", - "email": "sophia@allphysiche.com" - }, - { - "id": 136, - "guid": "f28c5006-031c-418b-8b7f-42a0680b7fa2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Otis", - "company": "Westmedia", - "phone": "831-557-2330", - "email": "elizabeth@westmedia.com" - }, - { - "id": 137, - "guid": "6872063a-a9cd-4ad6-b619-b67049e2848f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Campbell", - "company": "Westgate", - "phone": "814-442-2497", - "email": "layla@westgate.com" - }, - { - "id": 138, - "guid": "757ea430-62b4-4b2a-926a-41e61d5e25a9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Fulton", - "company": "Jamrola", - "phone": "897-453-3476", - "email": "jocelyn@jamrola.com" - }, - { - "id": 139, - "guid": "eb00dbe5-0cfb-4196-adcb-51882e1afb93", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Timmons", - "company": "Fibrotopia", - "phone": "847-521-2499", - "email": "abigail@fibrotopia.com" - }, - { - "id": 140, - "guid": "7f052ec6-353b-4ece-a7e7-0e91352ec33b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Young", - "company": "Westgate", - "phone": "850-589-2636", - "email": "ashley@westgate.com" - }, - { - "id": 141, - "guid": "9b68f665-8ab4-48a7-8c11-34c6522245fe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Charlotte Milton", - "company": "Teraserv", - "phone": "833-418-3055", - "email": "charlotte@teraserv.com" - }, - { - "id": 142, - "guid": "9aadf81e-f3cf-4e35-8679-1110dd4959b7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Calhoun", - "company": "RoboAerlogix", - "phone": "844-572-3514", - "email": "andrea@roboaerlogix.com" - }, - { - "id": 143, - "guid": "5add5451-5292-4a2a-a511-3d1b1030207c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Chapman", - "company": "Steganoconiche", - "phone": "804-546-3543", - "email": "sydney@steganoconiche.com" - }, - { - "id": 144, - "guid": "a58d5774-99b7-46f1-bb05-57b6009e9955", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Day", - "company": "US Infratouch", - "phone": "872-576-2517", - "email": "sarah@us infratouch.com" - }, - { - "id": 145, - "guid": "bf196fe2-950e-430c-98ba-68e38b8fdd13", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Warren", - "company": "iSkyvaco", - "phone": "843-592-3558", - "email": "katherine@iskyvaco.com" - }, - { - "id": 146, - "guid": "ea8a0a64-a2bc-4508-b084-365e6bca4cb2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Hailey", - "company": "Aprama", - "phone": "810-575-2223", - "email": "ashley@aprama.com" - }, - { - "id": 147, - "guid": "e1377182-54f6-4889-9044-2851e1c63a71", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Conors", - "company": "Polytheon", - "phone": "842-550-3830", - "email": "charlotte@polytheon.com" - }, - { - "id": 148, - "guid": "5db492b1-9d5c-44d1-8230-79ec4523c15c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Hailey", - "company": "Teratopia", - "phone": "860-511-3053", - "email": "melanie@teratopia.com" - }, - { - "id": 149, - "guid": "50d6c115-4396-4b29-9d38-1bce9ddd2195", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Thomson", - "company": "Pacwest", - "phone": "826-423-2254", - "email": "amelia@pacwest.com" - }, - { - "id": 150, - "guid": "512cd798-22f4-4931-9524-54213ed13787", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Caroline Wainwright", - "company": "Enlogia", - "phone": "888-420-3367", - "email": "caroline@enlogia.com" - }, - { - "id": 151, - "guid": "c3bd1c00-2d68-4339-bd5b-094f2268d754", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Cook", - "company": "Rapigrafix", - "phone": "874-499-3889", - "email": "audrey@rapigrafix.com" - }, - { - "id": 152, - "guid": "eb7c33bf-1a8c-4166-9986-c75abf85aa78", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Oswald", - "company": "Syssoft", - "phone": "833-434-2212", - "email": "katherine@syssoft.com" - }, - { - "id": 153, - "guid": "afac3da5-adca-4d37-9d84-0f0331cf924d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Davidson", - "company": "Thermotomic", - "phone": "840-591-3864", - "email": "nevaeh@thermotomic.com" - }, - { - "id": 154, - "guid": "3477bcf9-9e25-4a88-9a6a-22de56246809", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Autumn Davidson", - "company": "Unconix", - "phone": "843-506-3671", - "email": "autumn@unconix.com" - }, - { - "id": 155, - "guid": "2382a7c5-5d29-463d-a506-4c8327a37ef1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Sherlock", - "company": "US Infratouch", - "phone": "861-457-3348", - "email": "andrea@us infratouch.com" - }, - { - "id": 156, - "guid": "bd96ca9a-f419-46cf-9e76-300420ce559d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Timmons", - "company": "iQualcar", - "phone": "874-586-2552", - "email": "kylie@iqualcar.com" - }, - { - "id": 157, - "guid": "487eb7b4-b4e3-4228-a0e5-f84b8741c26c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Arianna Carey", - "company": "Idmax", - "phone": "825-437-2476", - "email": "arianna@idmax.com" - }, - { - "id": 158, - "guid": "480631db-c76e-4024-8adc-1dce0c9c2d2e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Higgins", - "company": "Titanirola", - "phone": "872-413-2568", - "email": "serenity@titanirola.com" - }, - { - "id": 159, - "guid": "eef33bbb-14a3-4a3a-b6e2-317fc04d63a3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Miller", - "company": "Xeicon", - "phone": "815-478-2549", - "email": "brianna@xeicon.com" - }, - { - "id": 160, - "guid": "eb6649f7-24fc-4e3f-a257-986c0dee1a43", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Gate", - "company": "Enlogia", - "phone": "880-436-3590", - "email": "katherine@enlogia.com" - }, - { - "id": 161, - "guid": "9344ef55-8557-4c94-8755-e3a665c7b371", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jessica Crossman", - "company": "Qualserve", - "phone": "852-547-3996", - "email": "jessica@qualserve.com" - }, - { - "id": 162, - "guid": "d1d64242-cb60-451e-a365-57cf06ccdad3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Vaughan", - "company": "iOptystix", - "phone": "851-452-2649", - "email": "zoey@ioptystix.com" - }, - { - "id": 163, - "guid": "99bbb71b-18f7-4f92-80f5-6b3976f1bb50", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Davidson", - "company": "Enlogia", - "phone": "882-488-2542", - "email": "genesis@enlogia.com" - }, - { - "id": 164, - "guid": "3f150a9a-6130-4616-8582-65bc0b859cc0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Audrey Sherlock", - "company": "Ameritron", - "phone": "830-498-3521", - "email": "audrey@ameritron.com" - }, - { - "id": 165, - "guid": "1fefe426-e317-4162-8bec-53aeaf9e43f9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ava Calhoun", - "company": "Thermotomic", - "phone": "832-583-2535", - "email": "ava@thermotomic.com" - }, - { - "id": 166, - "guid": "2409aa3e-919e-4cd8-b395-a4815e03a7c7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Crossman", - "company": "iSkyvaco", - "phone": "819-436-3226", - "email": "angelina@iskyvaco.com" - }, - { - "id": 167, - "guid": "39fb9665-97ef-4931-a9ea-9b13d0229792", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Brooks", - "company": "Navivacs", - "phone": "898-583-2422", - "email": "savannah@navivacs.com" - }, - { - "id": 168, - "guid": "4bbbd58f-22e9-4a6d-9413-840c8ba4e864", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Thorndike", - "company": "Idmax", - "phone": "807-524-3048", - "email": "chloe@idmax.com" - }, - { - "id": 169, - "guid": "31400273-d18d-4ea8-9dc5-4a8dfda71e7c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sarah Cook", - "company": "Vencom", - "phone": "881-537-2532", - "email": "sarah@vencom.com" - }, - { - "id": 170, - "guid": "8462ce07-d2d6-4a63-9919-9baaadae5161", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Gerald", - "company": "Indisco", - "phone": "832-489-2996", - "email": "ariana@indisco.com" - }, - { - "id": 171, - "guid": "208c79dd-e437-4121-ad33-5348ed993f42", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophie Hodges", - "company": "Thermotomic", - "phone": "894-505-2436", - "email": "sophie@thermotomic.com" - }, - { - "id": 172, - "guid": "148fabfa-779b-4f6e-a628-7a31d1009bad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Hancock", - "company": "Steganoconiche", - "phone": "825-510-3764", - "email": "leah@steganoconiche.com" - }, - { - "id": 173, - "guid": "f0c5b112-d65c-4b04-b856-1e4399d54a15", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Neal", - "company": "RoboAerlogix", - "phone": "828-433-3445", - "email": "avery@roboaerlogix.com" - }, - { - "id": 174, - "guid": "a0fbe84f-0b30-4f0d-b6a1-729218026536", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Neal", - "company": "Entcast", - "phone": "880-541-3921", - "email": "caroline@entcast.com" - }, - { - "id": 175, - "guid": "8a228b74-22e3-407f-a395-760e55ee1a9a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Oliver", - "company": "Nanobanc", - "phone": "874-490-3372", - "email": "mariah@nanobanc.com" - }, - { - "id": 176, - "guid": "73225fe2-68f7-4a66-a022-4b391998d60a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Miers", - "company": "Tekcar", - "phone": "898-573-2269", - "email": "makayla@tekcar.com" - }, - { - "id": 177, - "guid": "011c37e7-4187-45bd-85f7-b22ec1c78b2c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Carroll", - "company": "Tekcar", - "phone": "816-590-2349", - "email": "arianna@tekcar.com" - }, - { - "id": 178, - "guid": "59bea287-588d-4957-bc0e-c7f64e3c9115", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Calhoun", - "company": "Gigaura", - "phone": "847-486-2062", - "email": "andrea@gigaura.com" - }, - { - "id": 179, - "guid": "96ce6f5d-aec8-4068-98cd-cd4bb95d80f7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Sherlock", - "company": "Turbomart", - "phone": "800-419-2789", - "email": "abigail@turbomart.com" - }, - { - "id": 180, - "guid": "4d89d493-e601-4647-b80c-8b03ce2f2067", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Turner", - "company": "US Omnigraphik", - "phone": "848-429-2940", - "email": "riley@us omnigraphik.com" - }, - { - "id": 181, - "guid": "3e962c21-256c-4b22-acd7-df282ccd325a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Haig", - "company": "Multitiqua", - "phone": "828-489-2784", - "email": "lillian@multitiqua.com" - }, - { - "id": 182, - "guid": "449c2e9d-5dfb-4899-8f36-d389740f257e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alyssa Thomson", - "company": "Techtron", - "phone": "878-558-2392", - "email": "alyssa@techtron.com" - }, - { - "id": 183, - "guid": "2a4153d4-5f07-4498-8dc5-5bbf89480a44", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Oldman", - "company": "Raylog", - "phone": "895-412-3705", - "email": "lauren@raylog.com" - }, - { - "id": 184, - "guid": "b1940158-1e1c-45a6-97ca-f784f0bceb95", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Walkman", - "company": "Titanirola", - "phone": "864-478-2143", - "email": "khloe@titanirola.com" - }, - { - "id": 185, - "guid": "50d7e0b4-ae79-4f0e-a4b5-127508a8c08d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Campbell", - "company": "Gigaura", - "phone": "879-577-2541", - "email": "leah@gigaura.com" - }, - { - "id": 186, - "guid": "6b434845-c650-4326-856c-9b9fc9cfd6ec", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Miln", - "company": "Jamconik", - "phone": "801-584-3332", - "email": "elizabeth@jamconik.com" - }, - { - "id": 187, - "guid": "980d4b2e-db02-4a86-ad9a-3ec29dc455f8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kimberly Gilson", - "company": "Superscope", - "phone": "878-458-3877", - "email": "kimberly@superscope.com" - }, - { - "id": 188, - "guid": "59b839ac-5fcc-45a4-8b01-d8fa87cec51f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Haig", - "company": "Anaframe", - "phone": "870-541-2355", - "email": "gabrielle@anaframe.com" - }, - { - "id": 189, - "guid": "a8911a01-c2e7-40cf-ac8e-f48cedb61237", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia WifKinson", - "company": "Keytheon", - "phone": "869-578-2428", - "email": "mia@keytheon.com" - }, - { - "id": 190, - "guid": "3ce88b90-5fb7-4354-b53a-763e573bb42a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Carrington", - "company": "Fibrotopia", - "phone": "899-534-3430", - "email": "arianna@fibrotopia.com" - }, - { - "id": 191, - "guid": "8338a1e3-b334-4aa7-91d0-2edc07ffc7d3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Miln", - "company": "Entcast", - "phone": "873-539-2533", - "email": "victoria@entcast.com" - }, - { - "id": 192, - "guid": "a9383302-aee7-47ef-aa4f-cea3d88747d4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Carey", - "company": "Syssoft", - "phone": "822-523-2478", - "email": "madison@syssoft.com" - }, - { - "id": 193, - "guid": "93bd6423-0cc0-4d2e-b3bf-a23cb89a5010", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Molligan", - "company": "Quintegrity", - "phone": "877-574-2330", - "email": "leah@quintegrity.com" - }, - { - "id": 194, - "guid": "f11ce45a-a8ad-4e4b-81fb-d8019d492908", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Cook", - "company": "Multitiqua", - "phone": "850-525-3433", - "email": "isabella@multitiqua.com" - }, - { - "id": 195, - "guid": "fe5eb29f-a0f5-46b1-b47f-3a345b6ff872", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Milton", - "company": "Proline", - "phone": "811-554-2521", - "email": "claire@proline.com" - }, - { - "id": 196, - "guid": "b257c57f-efd2-42e6-8930-dcef96afde98", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Gilbert", - "company": "Openserve", - "phone": "833-400-2598", - "email": "vanessa@openserve.com" - }, - { - "id": 197, - "guid": "f2903c40-8c85-4137-8bc4-acc0f28e7539", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Hancock", - "company": "Pacwest", - "phone": "865-410-2759", - "email": "abigail@pacwest.com" - }, - { - "id": 198, - "guid": "d7e16674-28ac-44a0-b788-61c7f45e3adb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Oliver", - "company": "Thermotomic", - "phone": "862-506-2827", - "email": "vanessa@thermotomic.com" - }, - { - "id": 199, - "guid": "59d8947f-7f4b-4440-a285-90abffb9577a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Calhoun", - "company": "Polytheon", - "phone": "854-422-3837", - "email": "jessica@polytheon.com" - }, - { - "id": 200, - "guid": "c90e446f-01f9-428c-be53-f57648ea4d12", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Morrison", - "company": "SysUSA", - "phone": "824-583-3109", - "email": "ava@sysusa.com" - }, - { - "id": 201, - "guid": "8d017324-d0cc-4bec-857c-161216f01a5f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Higgins", - "company": "Keytheon", - "phone": "818-584-3730", - "email": "abigail@keytheon.com" - }, - { - "id": 202, - "guid": "40ba2ecd-0f11-42b8-a8b3-5005f6e3a886", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Winter", - "company": "Videobanc", - "phone": "833-545-3325", - "email": "camila@videobanc.com" - }, - { - "id": 203, - "guid": "634b1870-e44f-4992-9279-89be994aab0a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Payton Crossman", - "company": "Allnet", - "phone": "802-536-2014", - "email": "payton@allnet.com" - }, - { - "id": 204, - "guid": "2d9ac9ca-6b5d-4f92-a915-0ab8f0271022", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Goodman", - "company": "Steganoconiche", - "phone": "825-534-2333", - "email": "abigail@steganoconiche.com" - }, - { - "id": 205, - "guid": "91d735a5-47e9-48e7-bae6-92bb12ba9555", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Wallace", - "company": "Idmax", - "phone": "820-500-3304", - "email": "bella@idmax.com" - }, - { - "id": 206, - "guid": "3c4663e9-1c7f-4899-9079-9390817352ee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Cook", - "company": "iOptystix", - "phone": "896-600-3844", - "email": "amelia@ioptystix.com" - }, - { - "id": 207, - "guid": "f1afe725-191d-43c9-9337-2ecf0c811804", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brianna Young", - "company": "Netseco", - "phone": "896-530-3464", - "email": "brianna@netseco.com" - }, - { - "id": 208, - "guid": "5c2313e5-418d-4c88-ad5c-75f50727ad3b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Haig", - "company": "Aluco", - "phone": "824-415-3811", - "email": "riley@aluco.com" - }, - { - "id": 209, - "guid": "c1a3abf7-b84a-4c89-8515-ad13dc10216f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Young", - "company": "Qualserve", - "phone": "800-405-3553", - "email": "chloe@qualserve.com" - }, - { - "id": 210, - "guid": "64bf1675-2257-49a7-9599-74560a896d95", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Haig", - "company": "Superscope", - "phone": "807-491-3072", - "email": "vanessa@superscope.com" - }, - { - "id": 211, - "guid": "459321a0-bdd8-4209-b1dd-8dafaffe9373", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Owen", - "company": "Indisco", - "phone": "884-432-2847", - "email": "avery@indisco.com" - }, - { - "id": 212, - "guid": "5b8e1d50-9e93-4fff-868c-ec11e76cb34d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Bush", - "company": "Aprama", - "phone": "840-546-2706", - "email": "mariah@aprama.com" - }, - { - "id": 213, - "guid": "3a919bc4-6ac4-47a0-9323-e54f8833d959", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Vance", - "company": "Enlogia", - "phone": "812-431-3781", - "email": "eva@enlogia.com" - }, - { - "id": 214, - "guid": "a0ba9bda-5ac5-4222-81d0-d370ec4fc72c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Haig", - "company": "Generola", - "phone": "847-418-3062", - "email": "emma@generola.com" - }, - { - "id": 215, - "guid": "5c086e7a-6bf4-4825-8d6d-309d1eb4a945", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Haig", - "company": "Celgra", - "phone": "816-508-2481", - "email": "sophie@celgra.com" - }, - { - "id": 216, - "guid": "d2872e48-e83e-4297-b214-de2b437a72c9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Ford", - "company": "Anagraph", - "phone": "887-416-2618", - "email": "mariah@anagraph.com" - }, - { - "id": 217, - "guid": "d002774b-361d-45e5-a180-235fb95b5ee5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Youmans", - "company": "Cryptotegrity", - "phone": "899-542-2645", - "email": "katelyn@cryptotegrity.com" - }, - { - "id": 218, - "guid": "fad9e9b0-d9e0-4d27-951a-e711a4e4e45f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Warren", - "company": "Xeicon", - "phone": "856-509-3432", - "email": "rachel@xeicon.com" - }, - { - "id": 219, - "guid": "3c73f5f9-d46b-40c6-9875-7d75be3884ac", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Waller", - "company": "iOptystix", - "phone": "899-574-2899", - "email": "gabriella@ioptystix.com" - }, - { - "id": 220, - "guid": "8018f232-7474-4e20-a188-51b1851592c6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Oldridge", - "company": "Nanobanc", - "phone": "800-553-3680", - "email": "aubrey@nanobanc.com" - }, - { - "id": 221, - "guid": "47f158ec-6fd2-466d-8b69-fa3ebece0610", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Youmans", - "company": "Robotemplate", - "phone": "839-425-3642", - "email": "kimberly@robotemplate.com" - }, - { - "id": 222, - "guid": "68fa2d8c-8ad9-4fe7-87bd-70027a905141", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Daniels", - "company": "Robotomic", - "phone": "817-405-3784", - "email": "evelyn@robotomic.com" - }, - { - "id": 223, - "guid": "4a373d5f-5bf7-4db1-8cd3-2e4eee75b056", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Gilmore", - "company": "Unologic", - "phone": "800-481-2701", - "email": "kimberly@unologic.com" - }, - { - "id": 224, - "guid": "95f9cf9c-59d6-4ea5-87a8-76fa62bff911", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Gardner", - "company": "RoboAerlogix", - "phone": "837-557-2906", - "email": "caroline@roboaerlogix.com" - }, - { - "id": 225, - "guid": "da857a49-252f-486f-af57-01b65aea544c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella White", - "company": "Celgra", - "phone": "833-499-3860", - "email": "gabriella@celgra.com" - }, - { - "id": 226, - "guid": "0983de27-ad24-47f8-8318-ddc3cc4802e5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Neal", - "company": "Navivacs", - "phone": "842-556-3486", - "email": "madelyn@navivacs.com" - }, - { - "id": 227, - "guid": "f42c837b-1ebd-457b-9773-b9f3ea2ec9c4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabella White", - "company": "Truetomic", - "phone": "860-576-3322", - "email": "isabella@truetomic.com" - }, - { - "id": 228, - "guid": "34c50849-1501-4e2b-a7f1-0e36d48ea333", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Wainwright", - "company": "Titanirola", - "phone": "838-439-3488", - "email": "isabella@titanirola.com" - }, - { - "id": 229, - "guid": "74e2d8bf-107f-48a0-b0c0-345b78fdf554", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Galbraith", - "company": "Multitiqua", - "phone": "831-439-2325", - "email": "bailey@multitiqua.com" - }, - { - "id": 230, - "guid": "dce94125-a9e8-4e4c-a04c-ab387b403d63", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Fulton", - "company": "Pericenta", - "phone": "843-421-2775", - "email": "aubrey@pericenta.com" - }, - { - "id": 231, - "guid": "3348cfc0-7a3a-4839-96f5-ec7272d53f90", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Riley Miller", - "company": "iSkyvaco", - "phone": "833-442-2994", - "email": "riley@iskyvaco.com" - }, - { - "id": 232, - "guid": "b059ec43-2a16-42ce-b7fe-a714485ce109", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Gill", - "company": "Conotomics", - "phone": "850-409-2726", - "email": "molly@conotomics.com" - }, - { - "id": 233, - "guid": "e25fa00f-9bbc-452c-a893-95699a152492", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sofia Crossman", - "company": "Qualserve", - "phone": "873-481-2606", - "email": "sofia@qualserve.com" - }, - { - "id": 234, - "guid": "ac45588e-a444-4ac8-89a9-bc101f9cd8b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Gustman", - "company": "Hypervaco", - "phone": "850-445-2281", - "email": "vanessa@hypervaco.com" - }, - { - "id": 235, - "guid": "973a4062-1e5d-4ef6-8942-3d37d0b1190d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Miers", - "company": "Aprama", - "phone": "856-586-3867", - "email": "molly@aprama.com" - }, - { - "id": 236, - "guid": "37eced45-f083-4934-89c3-99ffee4d0be9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Gardner", - "company": "Truegate", - "phone": "840-400-3711", - "email": "faith@truegate.com" - }, - { - "id": 237, - "guid": "3e3fa092-3d19-4641-85d4-28f2faa11eed", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Sherlock", - "company": "Orthosoft", - "phone": "888-591-3382", - "email": "grace@orthosoft.com" - }, - { - "id": 238, - "guid": "3aa48707-e44e-428e-8393-cbc37136b8fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Waller", - "company": "iEnland", - "phone": "868-450-3388", - "email": "peyton@ienland.com" - }, - { - "id": 239, - "guid": "2d633104-cd60-4edf-97dd-34d084848938", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Brown", - "company": "Entcast", - "phone": "836-444-2029", - "email": "evelyn@entcast.com" - }, - { - "id": 240, - "guid": "8cd4d71d-4946-4eb5-aba7-0943db109f3d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Morrison", - "company": "Superscope", - "phone": "873-540-3012", - "email": "mariah@superscope.com" - }, - { - "id": 241, - "guid": "19eb8ee8-bf25-495e-a933-dd5dccb9555b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Sherlock", - "company": "Rapigrafix", - "phone": "875-562-2278", - "email": "taylor@rapigrafix.com" - }, - { - "id": 242, - "guid": "6cd7d278-0395-47e0-be57-a1edc60d855a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Crossman", - "company": "Keytheon", - "phone": "817-490-2366", - "email": "julia@keytheon.com" - }, - { - "id": 243, - "guid": "7087de46-4907-4acc-aec8-99ac939ec8fa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Nelson", - "company": "Idmax", - "phone": "832-473-3167", - "email": "rachel@idmax.com" - }, - { - "id": 244, - "guid": "72686b24-dfac-41e1-bac0-a9c0d178957f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Wesley", - "company": "iSkyvaco", - "phone": "822-541-2996", - "email": "katherine@iskyvaco.com" - }, - { - "id": 245, - "guid": "b9d687b0-bfa1-4b53-87ed-f8a32a97a68e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Peyton Chesterton", - "company": "Nanobanc", - "phone": "842-438-3285", - "email": "peyton@nanobanc.com" - }, - { - "id": 246, - "guid": "26708932-cb59-49e3-ab4f-9f0141bc40ba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madison Chandter", - "company": "Superscope", - "phone": "853-462-2994", - "email": "madison@superscope.com" - }, - { - "id": 247, - "guid": "1613c256-3d12-46f8-bd58-09f32091c724", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Oswald", - "company": "Mescatron", - "phone": "858-562-2642", - "email": "faith@mescatron.com" - }, - { - "id": 248, - "guid": "03c88bb3-e0ca-4535-b053-de1c4b2a5c04", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Wesley", - "company": "Teraserv", - "phone": "829-537-3072", - "email": "elizabeth@teraserv.com" - }, - { - "id": 249, - "guid": "6ec2abda-24d2-42d2-a8be-24e611d063e1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Brown", - "company": "Cryptotemplate", - "phone": "879-585-2152", - "email": "eva@cryptotemplate.com" - }, - { - "id": 250, - "guid": "5cb9a719-e688-4153-9bfa-81f9d9b0d842", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Hailey", - "company": "Technogra", - "phone": "890-483-3120", - "email": "sophia@technogra.com" - }, - { - "id": 251, - "guid": "0bb5433f-6406-4ddb-8811-6f628e8a78cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Day", - "company": "Venconix", - "phone": "824-521-2745", - "email": "sofia@venconix.com" - }, - { - "id": 252, - "guid": "cedaccae-4175-490e-8b2b-1e69d732de05", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Goodman", - "company": "Orthosoft", - "phone": "898-449-3960", - "email": "zoey@orthosoft.com" - }, - { - "id": 253, - "guid": "ce3db90d-3366-4f06-9e9e-63ba336ad6a2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina WifKinson", - "company": "Hypervaco", - "phone": "843-535-2357", - "email": "angelina@hypervaco.com" - }, - { - "id": 254, - "guid": "bfbb1289-bdfb-4f66-a761-bea6885c05ec", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Carter", - "company": "Dynarama", - "phone": "842-507-3224", - "email": "gianna@dynarama.com" - }, - { - "id": 255, - "guid": "fb9f5211-17c7-46cb-b303-4b1d1a28073f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Osborne", - "company": "Robotemplate", - "phone": "874-500-3557", - "email": "sarah@robotemplate.com" - }, - { - "id": 256, - "guid": "56581646-8043-48c5-9aea-957e9a8303f4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Bush", - "company": "Robocomm", - "phone": "822-573-3859", - "email": "allison@robocomm.com" - }, - { - "id": 257, - "guid": "cdec10ab-5e9e-48e9-b69d-dd5e9b034f40", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Calhoun", - "company": "Netseco", - "phone": "875-534-2054", - "email": "kylie@netseco.com" - }, - { - "id": 258, - "guid": "4a4b661b-5b86-4c6a-9cee-7cee84f19010", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Campbell", - "company": "Conrama", - "phone": "853-423-3814", - "email": "layla@conrama.com" - }, - { - "id": 259, - "guid": "2f7f07ac-4d36-4423-aafc-6e74424f5720", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Fisher", - "company": "Robotemplate", - "phone": "809-404-2497", - "email": "isabelle@robotemplate.com" - }, - { - "id": 260, - "guid": "e38f8c25-0f81-4810-972c-00893e4e7d24", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoey Freeman", - "company": "Infraique", - "phone": "827-598-2900", - "email": "zoey@infraique.com" - }, - { - "id": 261, - "guid": "e73230d7-6319-49e0-8012-a97f63069539", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Adamson", - "company": "Gigaura", - "phone": "828-566-3614", - "email": "alexandra@gigaura.com" - }, - { - "id": 262, - "guid": "f81d3782-7b71-4295-932c-6213e45e142e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Watson", - "company": "Truetomic", - "phone": "861-418-2291", - "email": "sophia@truetomic.com" - }, - { - "id": 263, - "guid": "db00c124-6631-428b-8348-8ccbe030eb7c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Higgins", - "company": "Fibrotopia", - "phone": "841-519-2895", - "email": "vanessa@fibrotopia.com" - }, - { - "id": 264, - "guid": "fddad935-0982-4c4f-836b-46b7ff521691", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna White", - "company": "Compuamerica", - "phone": "832-415-2513", - "email": "anna@compuamerica.com" - }, - { - "id": 265, - "guid": "02f3a200-0998-4485-b46b-a86ca6f3fc30", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Miln", - "company": "Anaframe", - "phone": "842-507-3937", - "email": "faith@anaframe.com" - }, - { - "id": 266, - "guid": "d936e01f-4269-4e5f-91cb-daec6efa4dba", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ariana Young", - "company": "Keytheon", - "phone": "818-404-2607", - "email": "ariana@keytheon.com" - }, - { - "id": 267, - "guid": "42fbd5c7-369e-4b8e-8a3c-88742820177d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Miller", - "company": "Robocomm", - "phone": "808-459-2018", - "email": "layla@robocomm.com" - }, - { - "id": 268, - "guid": "2c2c27d6-78d8-4299-b611-9aeb431f74de", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Hancock", - "company": "Gigaura", - "phone": "894-521-3559", - "email": "abigail@gigaura.com" - }, - { - "id": 269, - "guid": "48657f65-a4f1-4f23-8e04-e4d0396fe403", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Hawkins", - "company": "Robotomic", - "phone": "887-407-3545", - "email": "kylie@robotomic.com" - }, - { - "id": 270, - "guid": "fb5f31f2-6ae2-49e3-bd79-1e2a151657de", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Arianna Bush", - "company": "Openserve", - "phone": "812-590-3909", - "email": "arianna@openserve.com" - }, - { - "id": 271, - "guid": "3d165b6d-e021-4f95-947f-d27c3dfed3b6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Miller", - "company": "Turbomart", - "phone": "812-531-2023", - "email": "isabelle@turbomart.com" - }, - { - "id": 272, - "guid": "941f65f5-47d0-4df6-8fcf-a5f94b0f681a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Crossman", - "company": "Allnet", - "phone": "834-533-2857", - "email": "bella@allnet.com" - }, - { - "id": 273, - "guid": "6f495706-8e01-447b-b7e7-9455101e20d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Harrison", - "company": "Polytheon", - "phone": "828-514-3144", - "email": "gianna@polytheon.com" - }, - { - "id": 274, - "guid": "95c13cc6-acd7-42bc-9b07-ee7865eacc74", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Warren", - "company": "Xeicon", - "phone": "899-475-2029", - "email": "ariana@xeicon.com" - }, - { - "id": 275, - "guid": "d39556c9-ee2a-4882-a9d4-df0b8ac05ff9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Galbraith", - "company": "OpKeycomm", - "phone": "805-580-3120", - "email": "faith@opkeycomm.com" - }, - { - "id": 276, - "guid": "f086269e-7346-4f4b-9ab8-ee1af9f1f893", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Wood", - "company": "Interliant", - "phone": "895-540-2400", - "email": "serenity@interliant.com" - }, - { - "id": 277, - "guid": "9cb1bf1c-9c3d-4136-8ed9-c979fa55cece", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Ogden", - "company": "Allphysiche", - "phone": "864-517-3070", - "email": "sarah@allphysiche.com" - }, - { - "id": 278, - "guid": "63e114f9-81ee-42cb-a17a-ed8e3e28537b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Nash", - "company": "Raylog", - "phone": "846-420-3171", - "email": "isabelle@raylog.com" - }, - { - "id": 279, - "guid": "636dd7f8-74c0-468c-a510-cfff0c3645aa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Charlson", - "company": "Truegate", - "phone": "870-410-3405", - "email": "molly@truegate.com" - }, - { - "id": 280, - "guid": "24d57150-a5e2-48b4-8cee-f5ce8696ae69", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah Ford", - "company": "Aprama", - "phone": "837-513-3269", - "email": "mariah@aprama.com" - }, - { - "id": 281, - "guid": "13f9c776-0d3b-4762-92e3-1bde491c2116", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Fisher", - "company": "Airdyne", - "phone": "873-560-2519", - "email": "angelina@airdyne.com" - }, - { - "id": 282, - "guid": "8e8ce6ef-f994-4ec1-93e6-630562829612", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Sheldon", - "company": "Tekcar", - "phone": "844-472-2450", - "email": "mariah@tekcar.com" - }, - { - "id": 283, - "guid": "eefd1978-b90f-4e76-82ab-24281fc17338", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Goodman", - "company": "Quintegrity", - "phone": "899-556-3236", - "email": "katherine@quintegrity.com" - }, - { - "id": 284, - "guid": "d169f153-fc41-439e-9061-f874bc1cda42", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Cook", - "company": "Inridium", - "phone": "856-596-3742", - "email": "hailey@inridium.com" - }, - { - "id": 285, - "guid": "2df20b75-4966-4d3f-9e49-b045898a2b40", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Oliver", - "company": "SysVenamerica", - "phone": "823-434-2124", - "email": "hannah@sysvenamerica.com" - }, - { - "id": 286, - "guid": "e569dde1-db1c-4aea-bb15-c090f285e6b6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Oldman", - "company": "Robotomic", - "phone": "876-515-2865", - "email": "olivia@robotomic.com" - }, - { - "id": 287, - "guid": "a7090445-6a37-432f-82f9-d6cdabec243c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Fisher", - "company": "iSkyvaco", - "phone": "837-483-3810", - "email": "layla@iskyvaco.com" - }, - { - "id": 288, - "guid": "fbf29c83-7435-4bed-a139-eefd06a2208b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Young", - "company": "Xeicon", - "phone": "837-495-3366", - "email": "brooklyn@xeicon.com" - }, - { - "id": 289, - "guid": "4cd86608-537f-4fa4-ac17-df93d2b867c3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Walkman", - "company": "Celgra", - "phone": "823-523-2242", - "email": "kaylee@celgra.com" - }, - { - "id": 290, - "guid": "72afe924-defd-40b7-8d9d-595f0cccbaec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Cramer", - "company": "SysVenamerica", - "phone": "838-585-2778", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 291, - "guid": "3f8775e9-2af6-4fcd-a697-bed745bce912", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Clapton", - "company": "Systheon", - "phone": "869-456-2346", - "email": "angelina@systheon.com" - }, - { - "id": 292, - "guid": "48ec5e80-374c-4de5-aacf-88ddf1073984", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Gustman", - "company": "Truetomic", - "phone": "809-508-3010", - "email": "isabella@truetomic.com" - }, - { - "id": 293, - "guid": "6e29391b-cb9b-4433-b70c-0cfece1639f8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Oswald", - "company": "Interliant", - "phone": "813-468-2767", - "email": "molly@interliant.com" - }, - { - "id": 294, - "guid": "91d277da-0fa2-4d90-846b-92cb415ca002", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Campbell", - "company": "Jamconik", - "phone": "872-436-3471", - "email": "claire@jamconik.com" - }, - { - "id": 295, - "guid": "4a8e5681-4fb1-404c-962c-f27dd6cc6853", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Croftoon", - "company": "Allnet", - "phone": "801-501-3771", - "email": "charlotte@allnet.com" - }, - { - "id": 296, - "guid": "a011dce0-8f9d-4c78-9730-b5c134f37a3f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Carey", - "company": "Openserve", - "phone": "830-545-3968", - "email": "andrea@openserve.com" - }, - { - "id": 297, - "guid": "54d037b0-a69d-4458-ae7b-bad7294112b1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Nathan", - "company": "Teraserv", - "phone": "881-439-3557", - "email": "ava@teraserv.com" - }, - { - "id": 298, - "guid": "0331b041-30a1-4c06-b3be-cee959218e50", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Morrison", - "company": "Idmax", - "phone": "855-513-3817", - "email": "vanessa@idmax.com" - }, - { - "id": 299, - "guid": "91131352-3751-4031-8249-6cf2600f1869", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Ward", - "company": "Airdyne", - "phone": "853-516-2565", - "email": "zoe@airdyne.com" - }, - { - "id": 300, - "guid": "b496aa66-5be6-4010-8c52-d33357911992", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Fulton", - "company": "Transtouch", - "phone": "809-518-2370", - "email": "mariah@transtouch.com" - }, - { - "id": 301, - "guid": "58f974b5-a0e1-4448-a056-da8e8d7cfa09", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Young", - "company": "Westmedia", - "phone": "806-599-2559", - "email": "hailey@westmedia.com" - }, - { - "id": 302, - "guid": "0db0c8e7-23bf-4068-8fc4-766e76715599", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Goldman", - "company": "Allnet", - "phone": "824-455-2661", - "email": "destiny@allnet.com" - }, - { - "id": 303, - "guid": "ad5f87f1-10b2-4f4a-85f0-aa96054915a9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Natalie Carey", - "company": "Enlogia", - "phone": "857-424-2018", - "email": "natalie@enlogia.com" - }, - { - "id": 304, - "guid": "36688f40-6e96-4ed6-818c-304f838a3140", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Hardman", - "company": "Ameritron", - "phone": "873-474-3709", - "email": "kimberly@ameritron.com" - }, - { - "id": 305, - "guid": "de1a10cb-c5c1-4bdb-818d-fb1877c094f7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoe Milton", - "company": "Teraserv", - "phone": "838-485-2068", - "email": "zoe@teraserv.com" - }, - { - "id": 306, - "guid": "79b29a77-8c9e-4a5a-a441-018ab36e3493", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Waller", - "company": "Mescatron", - "phone": "830-578-2153", - "email": "autumn@mescatron.com" - }, - { - "id": 307, - "guid": "824b6a28-9b9f-4957-812f-28237cdd0c36", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Timmons", - "company": "Mescatron", - "phone": "898-546-2690", - "email": "anna@mescatron.com" - }, - { - "id": 308, - "guid": "7712bde3-57a9-43e5-adcf-d19051449672", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Young", - "company": "iOptystix", - "phone": "832-412-3561", - "email": "olivia@ioptystix.com" - }, - { - "id": 309, - "guid": "a802573f-ea55-4983-8892-75c09fa25d1a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Clapton", - "company": "Openserve", - "phone": "816-502-2656", - "email": "payton@openserve.com" - }, - { - "id": 310, - "guid": "062d7669-a3ca-4834-8890-b5bd10491954", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Webster", - "company": "eSteganoergy", - "phone": "806-549-2492", - "email": "melanie@esteganoergy.com" - }, - { - "id": 311, - "guid": "33a73593-c34e-457f-b032-8a7c52e205bc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Winter", - "company": "eEyetanic", - "phone": "897-585-3200", - "email": "molly@eeyetanic.com" - }, - { - "id": 312, - "guid": "73097105-a707-4251-a3f8-6b6bac64b529", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Oswald", - "company": "Rapigrafix", - "phone": "818-573-3602", - "email": "katelyn@rapigrafix.com" - }, - { - "id": 313, - "guid": "72126064-e4cd-425f-9268-3f8c77c9d8ba", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooke Davidson", - "company": "Sontopia", - "phone": "808-414-3848", - "email": "brooke@sontopia.com" - }, - { - "id": 314, - "guid": "809f64a5-57b7-4ba4-9425-5cb64c771818", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Gustman", - "company": "Entcast", - "phone": "846-580-3051", - "email": "hailey@entcast.com" - }, - { - "id": 315, - "guid": "2bed8055-1df6-41b9-840b-8df12ee76fd8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Fulton", - "company": "RoboAerlogix", - "phone": "814-489-3028", - "email": "ava@roboaerlogix.com" - }, - { - "id": 316, - "guid": "9dbe213e-7efd-492f-bf47-af39dcc14c87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Otis", - "company": "Aluco", - "phone": "808-599-2245", - "email": "hannah@aluco.com" - }, - { - "id": 317, - "guid": "515c6ba7-5be9-4d11-af26-7a717a568f95", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Murphy", - "company": "Transtouch", - "phone": "815-512-3856", - "email": "vanessa@transtouch.com" - }, - { - "id": 318, - "guid": "9986573e-1eb6-4f71-b644-9666e47ddb96", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Vance", - "company": "Openserve", - "phone": "811-537-2892", - "email": "natalie@openserve.com" - }, - { - "id": 319, - "guid": "1e47bdb9-6ead-4d80-8708-570639b16234", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra WifKinson", - "company": "US Omnigraphik", - "phone": "875-473-2839", - "email": "alexandra@us omnigraphik.com" - }, - { - "id": 320, - "guid": "96024e53-d7d4-4d98-9fd4-6d51c583e7d2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Thomson", - "company": "Anaframe", - "phone": "893-497-3082", - "email": "vanessa@anaframe.com" - }, - { - "id": 321, - "guid": "18fc65b0-0f1b-4fb5-9dc6-221e3325a528", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Webster", - "company": "Interliant", - "phone": "810-421-3486", - "email": "bella@interliant.com" - }, - { - "id": 322, - "guid": "49527fa0-3893-48ef-8a8d-5186f3eb0d06", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Savannah Hailey", - "company": "Pericenta", - "phone": "857-481-2018", - "email": "savannah@pericenta.com" - }, - { - "id": 323, - "guid": "a2ce759b-c113-49c5-b3c2-943d9dfef065", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney Wayne", - "company": "Teraserv", - "phone": "825-479-3336", - "email": "sydney@teraserv.com" - }, - { - "id": 324, - "guid": "521f30ab-bdab-4171-aac7-5cf5cf3f6642", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Charlson", - "company": "Mescatron", - "phone": "867-587-3280", - "email": "lily@mescatron.com" - }, - { - "id": 325, - "guid": "dc507f38-2bb6-462a-a4a7-81d56a74a560", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Owen", - "company": "Techtron", - "phone": "889-434-3552", - "email": "alexis@techtron.com" - }, - { - "id": 326, - "guid": "51f999bf-ebcc-4850-b960-0a9b7bd229e4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexis Goodman", - "company": "Rapigrafix", - "phone": "894-455-2828", - "email": "alexis@rapigrafix.com" - }, - { - "id": 327, - "guid": "42a68503-477e-40fe-a85f-7d445646afef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Carey", - "company": "Proline", - "phone": "858-536-3313", - "email": "paige@proline.com" - }, - { - "id": 328, - "guid": "4c2fed7a-6e85-45a9-99e0-cb1e3a6cdd63", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Brooks", - "company": "Nanobanc", - "phone": "808-448-3437", - "email": "evelyn@nanobanc.com" - }, - { - "id": 329, - "guid": "97c71701-8930-4fcd-9f9e-313621db234e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Oswald", - "company": "Cryptotemplate", - "phone": "824-566-2095", - "email": "jasmine@cryptotemplate.com" - }, - { - "id": 330, - "guid": "2b82ceca-ba07-4eea-b19b-42ab2170943b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jocelyn Wallace", - "company": "Truegate", - "phone": "816-444-3821", - "email": "jocelyn@truegate.com" - }, - { - "id": 331, - "guid": "39b10229-d0b6-46f3-b6d2-7c8e38107c88", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Gerald", - "company": "Airdyne", - "phone": "818-595-2598", - "email": "lillian@airdyne.com" - }, - { - "id": 332, - "guid": "445c10c5-6b98-4713-8f5c-c7270c8f33c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Bush", - "company": "iSkyvaco", - "phone": "838-508-2139", - "email": "allison@iskyvaco.com" - }, - { - "id": 333, - "guid": "fbf85fbe-2ce8-41f1-80c4-ca4c477de9b6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Croftoon", - "company": "iEnland", - "phone": "818-554-2410", - "email": "zoey@ienland.com" - }, - { - "id": 334, - "guid": "09a45f67-ce2e-4db2-853a-1831a67da22c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Mercer", - "company": "OpKeycomm", - "phone": "861-594-2789", - "email": "riley@opkeycomm.com" - }, - { - "id": 335, - "guid": "70286d21-c1d3-4f7d-8a47-c79a8a47c83f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Taylor Owen", - "company": "Raylog", - "phone": "847-535-2674", - "email": "taylor@raylog.com" - }, - { - "id": 336, - "guid": "181f0f27-2b91-4e3d-a24a-e9fdf9662e59", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Vance", - "company": "Textiqua", - "phone": "845-550-3586", - "email": "chloe@textiqua.com" - }, - { - "id": 337, - "guid": "6b5e8615-3af3-40a8-86f4-0a6282a9b8cb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Brickman", - "company": "Inridium", - "phone": "879-497-2650", - "email": "brianna@inridium.com" - }, - { - "id": 338, - "guid": "30ad8ae7-2adc-4a91-b7ae-ad4bf4e26016", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kayla Wainwright", - "company": "Cryptotemplate", - "phone": "870-435-3028", - "email": "kayla@cryptotemplate.com" - }, - { - "id": 339, - "guid": "b6df1351-a1b9-48d8-817b-8177da256432", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Vaughan", - "company": "Hypervaco", - "phone": "846-409-3685", - "email": "hannah@hypervaco.com" - }, - { - "id": 340, - "guid": "2e1d5336-7e4d-4624-aed3-e810ccc5ff3f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Ward", - "company": "Infraique", - "phone": "861-550-2465", - "email": "autumn@infraique.com" - }, - { - "id": 341, - "guid": "3e056c3d-4633-4f6a-ae79-24ee6f1fd2b4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Walkman", - "company": "Vencom", - "phone": "861-428-3358", - "email": "ella@vencom.com" - }, - { - "id": 342, - "guid": "d06192a1-0f0a-49de-96f9-bb3e62f54741", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Calhoun", - "company": "Syssoft", - "phone": "860-438-3362", - "email": "isabelle@syssoft.com" - }, - { - "id": 343, - "guid": "5c9f18d7-6c84-4c2a-b25e-f5948d4c8bd0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Timmons", - "company": "Vencom", - "phone": "824-460-3998", - "email": "vanessa@vencom.com" - }, - { - "id": 344, - "guid": "41eb84ee-bc11-4664-82b2-7b2db59d9981", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Carroll", - "company": "Raylog", - "phone": "892-471-2600", - "email": "kaitlyn@raylog.com" - }, - { - "id": 345, - "guid": "184111af-e551-496f-bcf6-9a91f79a3954", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Leah White", - "company": "Conotomics", - "phone": "843-471-2052", - "email": "leah@conotomics.com" - }, - { - "id": 346, - "guid": "4dfe4810-5a85-492d-975f-5443eb701785", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bailey Conors", - "company": "Infraique", - "phone": "802-479-3982", - "email": "bailey@infraique.com" - }, - { - "id": 347, - "guid": "6abad1ea-0fa2-4a5a-b81b-b7606b84a30c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Gill", - "company": "Nanobanc", - "phone": "894-537-2188", - "email": "kaylee@nanobanc.com" - }, - { - "id": 348, - "guid": "de692c94-cb51-4e48-9074-d2ee19b40e56", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Carroll", - "company": "SysVenamerica", - "phone": "885-471-2641", - "email": "kylie@sysvenamerica.com" - }, - { - "id": 349, - "guid": "73e81393-698c-4c63-bae1-5037862bbf14", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Goodman", - "company": "Fibrotouch", - "phone": "886-437-3221", - "email": "sydney@fibrotouch.com" - }, - { - "id": 350, - "guid": "422cd9a2-e11f-4392-86bb-08410ac59937", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Vaughan", - "company": "Infraique", - "phone": "862-592-2183", - "email": "emma@infraique.com" - }, - { - "id": 351, - "guid": "12eca356-b27e-4cbf-80ee-0391c21fd376", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Caroline Waller", - "company": "Inridium", - "phone": "895-504-3439", - "email": "caroline@inridium.com" - }, - { - "id": 352, - "guid": "8421195f-88f6-4356-8cb6-be3c743b64d3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Neal", - "company": "Textiqua", - "phone": "894-584-3163", - "email": "aaliyah@textiqua.com" - }, - { - "id": 353, - "guid": "80284cda-0d59-4611-82e2-51d73571ccaf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Timmons", - "company": "Celgra", - "phone": "800-495-2681", - "email": "bella@celgra.com" - }, - { - "id": 354, - "guid": "1a846786-c2f1-4d43-86af-01730f389bce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Miln", - "company": "US Omnigraphik", - "phone": "831-418-2719", - "email": "jocelyn@us omnigraphik.com" - }, - { - "id": 355, - "guid": "aaf4b4b7-044e-4dc1-a06c-33d18bac7fe2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Croftoon", - "company": "Cryptotegrity", - "phone": "863-422-4000", - "email": "arianna@cryptotegrity.com" - }, - { - "id": 356, - "guid": "319bc113-934b-4aca-895d-1b2521ba39e3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Haig", - "company": "Titanigraf", - "phone": "810-402-2972", - "email": "madeline@titanigraf.com" - }, - { - "id": 357, - "guid": "204bdddc-be70-43fa-ad7e-6f7c9edb1c38", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Eva Wallace", - "company": "Airdyne", - "phone": "898-562-3653", - "email": "eva@airdyne.com" - }, - { - "id": 358, - "guid": "9d1191bb-0a7a-483c-8ee6-50e0a4859923", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Brickman", - "company": "Keytheon", - "phone": "867-400-2734", - "email": "layla@keytheon.com" - }, - { - "id": 359, - "guid": "a7f86343-a145-4669-9dbf-c1f05958ec8f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Wayne", - "company": "InfoAirway", - "phone": "845-561-2461", - "email": "khloe@infoairway.com" - }, - { - "id": 360, - "guid": "9fed8a07-c363-4b80-9696-1bc907fbf099", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Oliver", - "company": "Anagraph", - "phone": "843-564-2974", - "email": "autumn@anagraph.com" - }, - { - "id": 361, - "guid": "812a38f9-8879-4c97-87ce-2e562d9f68c6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Adamson", - "company": "Compuamerica", - "phone": "870-436-3069", - "email": "alexis@compuamerica.com" - }, - { - "id": 362, - "guid": "39f899f3-8ad4-4256-a965-bece7d2d812d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madelyn Haig", - "company": "Entcast", - "phone": "873-489-3381", - "email": "madelyn@entcast.com" - }, - { - "id": 363, - "guid": "e733d648-0065-45df-b67e-ebd00885e790", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Samantha Thomson", - "company": "Pacwest", - "phone": "883-503-3596", - "email": "samantha@pacwest.com" - }, - { - "id": 364, - "guid": "ded39205-3eaa-4cd3-807c-25f9487483ba", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Brown", - "company": "Aluco", - "phone": "885-425-3287", - "email": "faith@aluco.com" - }, - { - "id": 365, - "guid": "d7fe8367-8e34-4f61-b920-ff831cb108c5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabella Gate", - "company": "Titanirola", - "phone": "871-429-2972", - "email": "isabella@titanirola.com" - }, - { - "id": 366, - "guid": "02fdb13c-e17a-49df-ac0b-f14fef748a9e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Miller", - "company": "Orthosoft", - "phone": "839-539-3117", - "email": "peyton@orthosoft.com" - }, - { - "id": 367, - "guid": "4658d990-ea15-43fd-832f-20fd41452a79", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Creighton", - "company": "Nanobanc", - "phone": "801-515-3669", - "email": "lauren@nanobanc.com" - }, - { - "id": 368, - "guid": "673edae0-dadf-4779-a2ff-4b0b4f10423f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Gilson", - "company": "Techtron", - "phone": "801-599-3077", - "email": "alexis@techtron.com" - }, - { - "id": 369, - "guid": "cfdae6ef-66ee-4930-a337-81d7ddfd5b28", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ariana Day", - "company": "Anaframe", - "phone": "838-552-3223", - "email": "ariana@anaframe.com" - }, - { - "id": 370, - "guid": "161787df-c52d-4d37-acf4-804ad40079dc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Crossman", - "company": "Teknoplexon", - "phone": "862-468-2304", - "email": "gabriella@teknoplexon.com" - }, - { - "id": 371, - "guid": "8861e67c-9814-4241-8cae-5cd7fab8142e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Miers", - "company": "iOptystix", - "phone": "889-516-3494", - "email": "jasmine@ioptystix.com" - }, - { - "id": 372, - "guid": "a7b01651-136c-4099-9c82-910aa73bf5e1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Clapton", - "company": "Ventanium", - "phone": "887-583-3453", - "email": "alexa@ventanium.com" - }, - { - "id": 373, - "guid": "962eea78-8eb9-432b-80eb-f3f326d6f900", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kayla Brooks", - "company": "Turbomart", - "phone": "832-586-2059", - "email": "kayla@turbomart.com" - }, - { - "id": 374, - "guid": "63e14fb6-a9cd-47f9-b3e2-17c25a61e8f0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Fisher", - "company": "Robotomic", - "phone": "864-537-2368", - "email": "mariah@robotomic.com" - }, - { - "id": 375, - "guid": "1a954303-d8cf-4fbd-bdf4-e2717bc46169", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Hamphrey", - "company": "Thermotomic", - "phone": "874-510-3812", - "email": "aaliyah@thermotomic.com" - }, - { - "id": 376, - "guid": "9dd9099e-965d-47da-a407-f641e443d0b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Gilson", - "company": "Transtouch", - "phone": "821-415-2921", - "email": "mya@transtouch.com" - }, - { - "id": 377, - "guid": "d228c970-1ca2-44ad-9a95-e17631439905", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Ford", - "company": "Ventanium", - "phone": "805-474-3418", - "email": "victoria@ventanium.com" - }, - { - "id": 378, - "guid": "62dcf9e1-4179-4802-9d16-3d2c20905814", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Wesley", - "company": "iOptystix", - "phone": "897-458-3262", - "email": "makayla@ioptystix.com" - }, - { - "id": 379, - "guid": "394c0a8d-68c5-442d-aae1-f5c36f67c47f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Croftoon", - "company": "Netseco", - "phone": "836-560-2066", - "email": "trinity@netseco.com" - }, - { - "id": 380, - "guid": "d1e60eb5-87da-4405-ad04-1d3a38962398", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Carey", - "company": "Orthomedia", - "phone": "852-451-3592", - "email": "amelia@orthomedia.com" - }, - { - "id": 381, - "guid": "1e8748ff-85fb-4236-abf6-aeb4b5b15f51", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Otis", - "company": "Techtron", - "phone": "866-561-2831", - "email": "evelyn@techtron.com" - }, - { - "id": 382, - "guid": "8e51bc1f-5cfe-4373-a9cb-56eebf35b81d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Chapman", - "company": "Infragraph", - "phone": "834-454-2738", - "email": "natalie@infragraph.com" - }, - { - "id": 383, - "guid": "0373dc6b-9253-4794-9d09-d990de9cdccf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Wood", - "company": "Westtomik", - "phone": "894-515-4000", - "email": "sophie@westtomik.com" - }, - { - "id": 384, - "guid": "e13b3fe8-2df6-47da-b12b-f470a52cbedd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Wayne", - "company": "Safetrust", - "phone": "836-481-3693", - "email": "trinity@safetrust.com" - }, - { - "id": 385, - "guid": "a8df06d8-ccf9-4721-82bf-684bbb5dc5ad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Davidson", - "company": "SysUSA", - "phone": "887-420-2849", - "email": "kimberly@sysusa.com" - }, - { - "id": 386, - "guid": "1b61680b-67a8-4000-84fa-37787f049d9c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Nathan", - "company": "Jamconik", - "phone": "847-508-3052", - "email": "serenity@jamconik.com" - }, - { - "id": 387, - "guid": "0e5c87cf-350e-45d2-b82f-c16abe26d0f1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Gill", - "company": "Titanirola", - "phone": "868-477-3171", - "email": "camila@titanirola.com" - }, - { - "id": 388, - "guid": "641c840e-eb94-4c94-af3e-0ec8f9db99c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Gilbert", - "company": "Mescatron", - "phone": "805-413-2126", - "email": "taylor@mescatron.com" - }, - { - "id": 389, - "guid": "dcd25273-8c52-409f-a18c-fd4d5b002379", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ariana Charlson", - "company": "Techtron", - "phone": "824-402-2607", - "email": "ariana@techtron.com" - }, - { - "id": 390, - "guid": "5d8402e0-596c-48e7-ad26-89955f45ba8f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Hoggarth", - "company": "Steganoconiche", - "phone": "853-489-2260", - "email": "brooke@steganoconiche.com" - }, - { - "id": 391, - "guid": "0dec5f1f-1e36-4c08-99a6-b742f8385c36", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ava Gustman", - "company": "Indisco", - "phone": "846-502-2886", - "email": "ava@indisco.com" - }, - { - "id": 392, - "guid": "2038a5b8-8595-4253-bf88-1c34e195e59a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Gill", - "company": "Anaframe", - "phone": "817-495-2707", - "email": "serenity@anaframe.com" - }, - { - "id": 393, - "guid": "b8144a2c-dcff-4f27-9117-da374346a60e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Higgins", - "company": "US Omnigraphik", - "phone": "833-475-3830", - "email": "grace@us omnigraphik.com" - }, - { - "id": 394, - "guid": "3628c2ba-99bd-46d6-ac3e-41c02f410384", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Waller", - "company": "Orthosoft", - "phone": "868-520-3063", - "email": "sofia@orthosoft.com" - }, - { - "id": 395, - "guid": "2ae44c71-3700-4e34-aa23-eff71c4d9d6f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Wayne", - "company": "iMedconik", - "phone": "867-532-3326", - "email": "ariana@imedconik.com" - }, - { - "id": 396, - "guid": "ebc7b661-53d7-4ff9-942e-255eb0864a0e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mackenzie Carter", - "company": "Conotomics", - "phone": "895-525-3606", - "email": "mackenzie@conotomics.com" - }, - { - "id": 397, - "guid": "4b8a5ae8-46cf-4b8a-9223-edb360c87ab7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Chapman", - "company": "Gigaura", - "phone": "835-406-2051", - "email": "audrey@gigaura.com" - }, - { - "id": 398, - "guid": "0ce372c7-2b12-4fb2-82a6-69b75b7fe2e8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Abramson", - "company": "Entcast", - "phone": "818-542-2724", - "email": "eva@entcast.com" - }, - { - "id": 399, - "guid": "dafb19a7-a430-492b-9ee1-d4761efc7f1a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Payton White", - "company": "Fibrotopia", - "phone": "880-460-2931", - "email": "payton@fibrotopia.com" - }, - { - "id": 400, - "guid": "5b8dcf85-f1d9-475c-ae95-6400eb0df8f0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Brickman", - "company": "eEyetanic", - "phone": "806-590-3580", - "email": "gabrielle@eeyetanic.com" - }, - { - "id": 401, - "guid": "0625684d-d38b-4006-94e1-5659cb2882fa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Vanessa Winter", - "company": "RoboAerlogix", - "phone": "808-596-3997", - "email": "vanessa@roboaerlogix.com" - }, - { - "id": 402, - "guid": "e38dd7e8-5525-47bb-b1a6-be7ae9f6df1d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth White", - "company": "Quintegrity", - "phone": "803-482-3837", - "email": "elizabeth@quintegrity.com" - }, - { - "id": 403, - "guid": "d5f6616a-c25f-44d8-8412-9911f73fe8b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Brickman", - "company": "Raylog", - "phone": "875-571-3360", - "email": "jessica@raylog.com" - }, - { - "id": 404, - "guid": "4b5f1484-4ea7-481b-a8ae-3c5e7288a640", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Young", - "company": "Robotemplate", - "phone": "884-483-3018", - "email": "hailey@robotemplate.com" - }, - { - "id": 405, - "guid": "e6ed58f0-2b25-43a3-af30-2480b77cb52a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Hardman", - "company": "Multitiqua", - "phone": "809-412-2206", - "email": "brooklyn@multitiqua.com" - }, - { - "id": 406, - "guid": "29d7bee8-128c-4d49-a219-2a55b64e54d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Nash", - "company": "Generola", - "phone": "892-564-2357", - "email": "jessica@generola.com" - }, - { - "id": 407, - "guid": "b1df64e0-50de-4658-b656-18a3e7a1dceb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Day", - "company": "Conotomics", - "phone": "835-560-2979", - "email": "abigail@conotomics.com" - }, - { - "id": 408, - "guid": "87367e00-1a71-49d5-a54f-12a92aa99a9a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Oldridge", - "company": "Venconix", - "phone": "802-578-2948", - "email": "lillian@venconix.com" - }, - { - "id": 409, - "guid": "add537f1-19ba-4503-9e34-73334321a489", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Paige Hoggarth", - "company": "Technogra", - "phone": "880-538-2215", - "email": "paige@technogra.com" - }, - { - "id": 410, - "guid": "692278f2-deb5-4dd0-9714-76d60c47f758", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Youmans", - "company": "iOptystix", - "phone": "830-567-3308", - "email": "angelina@ioptystix.com" - }, - { - "id": 411, - "guid": "40d016f3-4b93-4fe1-b459-c6606bbe31e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Abramson", - "company": "Unologic", - "phone": "811-575-3319", - "email": "nevaeh@unologic.com" - }, - { - "id": 412, - "guid": "bd79db95-1095-4556-9d42-60cd3a5e4483", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke Croftoon", - "company": "Superscope", - "phone": "879-402-3283", - "email": "brooke@superscope.com" - }, - { - "id": 413, - "guid": "ee144144-0995-4326-a912-7d5e237854ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Oliver", - "company": "Fibrotouch", - "phone": "860-553-2954", - "email": "samantha@fibrotouch.com" - }, - { - "id": 414, - "guid": "d2a1782f-6fa9-4259-80e4-efb45886c5af", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Olivia Hodges", - "company": "Truetomic", - "phone": "806-588-3662", - "email": "olivia@truetomic.com" - }, - { - "id": 415, - "guid": "a69b93f5-d9b7-4a5c-9a66-d86fae29440a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Warren", - "company": "Conrama", - "phone": "873-463-2360", - "email": "kaitlyn@conrama.com" - }, - { - "id": 416, - "guid": "0f38790f-bcc2-4890-a640-bbca66a6b480", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace Turner", - "company": "Westmedia", - "phone": "850-543-3766", - "email": "grace@westmedia.com" - }, - { - "id": 417, - "guid": "83bf014c-9e9c-41a9-b55b-932434db499d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Gate", - "company": "Robotomic", - "phone": "859-449-2102", - "email": "khloe@robotomic.com" - }, - { - "id": 418, - "guid": "d145ff16-0a7b-4658-bec2-e99881ab5c8c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Stanley", - "company": "Fibrotopia", - "phone": "868-487-2198", - "email": "khloe@fibrotopia.com" - }, - { - "id": 419, - "guid": "f4d3ff05-0021-4104-b6d6-c816041d30c8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Molligan", - "company": "Allnet", - "phone": "875-555-3634", - "email": "allison@allnet.com" - }, - { - "id": 420, - "guid": "d5d5b5ab-fbcd-41e5-b517-fd83c2d2d46c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Campbell", - "company": "Airdyne", - "phone": "842-433-3681", - "email": "kylie@airdyne.com" - }, - { - "id": 421, - "guid": "75ef5e96-98fb-4399-95d5-284fda7d25c4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Brooks", - "company": "Allnet", - "phone": "822-402-3774", - "email": "amelia@allnet.com" - }, - { - "id": 422, - "guid": "4c07f3d9-0696-4d7c-9fd5-8644683b7ec8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Gilson", - "company": "Aprama", - "phone": "856-566-2331", - "email": "emily@aprama.com" - }, - { - "id": 423, - "guid": "dfe89521-b0b2-4115-90ce-43551d008ef3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Olivia Thorndike", - "company": "US Omnigraphik", - "phone": "869-473-3241", - "email": "olivia@us omnigraphik.com" - }, - { - "id": 424, - "guid": "bb4bb4a7-ac95-4c73-9b0f-1ced1e13dbe7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Hawkins", - "company": "Inridium", - "phone": "825-457-3522", - "email": "valeria@inridium.com" - }, - { - "id": 425, - "guid": "ba038332-ba32-45bd-b236-45cbf4ef9d8e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Nash", - "company": "Thermotomic", - "phone": "825-449-3859", - "email": "mya@thermotomic.com" - }, - { - "id": 426, - "guid": "ae9bb7d3-480c-434b-b717-374395821d09", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madison Wayne", - "company": "Mescaridic", - "phone": "807-447-2648", - "email": "madison@mescaridic.com" - }, - { - "id": 427, - "guid": "f3c4f9a5-fe3e-4dd2-a6eb-1de281816574", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Vance", - "company": "Titanigraf", - "phone": "896-565-2378", - "email": "lily@titanigraf.com" - }, - { - "id": 428, - "guid": "8a621024-1c9a-471c-8349-f50d67385c0f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Adamson", - "company": "Dynarama", - "phone": "890-414-3370", - "email": "madison@dynarama.com" - }, - { - "id": 429, - "guid": "6c9b6a26-68b5-4f2c-bd84-c3ecb3fabc60", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava Miln", - "company": "Tekcar", - "phone": "856-557-2844", - "email": "ava@tekcar.com" - }, - { - "id": 430, - "guid": "abe4d2eb-5a58-4219-ba4f-b7d61fc9637b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Cook", - "company": "Textiqua", - "phone": "864-493-2340", - "email": "layla@textiqua.com" - }, - { - "id": 431, - "guid": "70855fe0-0853-4f5d-97e9-50fe7a0020c5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Cook", - "company": "Xeicon", - "phone": "869-501-3259", - "email": "lily@xeicon.com" - }, - { - "id": 432, - "guid": "ed31861b-573d-4258-95f2-b3545c8aea38", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Gilson", - "company": "Multitiqua", - "phone": "847-571-3894", - "email": "faith@multitiqua.com" - }, - { - "id": 433, - "guid": "692e5fd7-e646-46e4-a3bf-56cdd377c987", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace White", - "company": "Transtouch", - "phone": "805-420-3543", - "email": "grace@transtouch.com" - }, - { - "id": 434, - "guid": "5faa9473-8526-43e6-b9f2-7f88f3cf4b0c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Turner", - "company": "Rapigrafix", - "phone": "887-522-2793", - "email": "molly@rapigrafix.com" - }, - { - "id": 435, - "guid": "441c3b03-1f27-4a34-b289-0b00106de34c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabelle Smith", - "company": "Anaframe", - "phone": "868-564-2620", - "email": "isabelle@anaframe.com" - }, - { - "id": 436, - "guid": "125389ab-199e-48c3-9dd9-0020026be4d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Abigail Calhoun", - "company": "Nanobanc", - "phone": "839-558-2818", - "email": "abigail@nanobanc.com" - }, - { - "id": 437, - "guid": "f8c95546-b526-40bf-b107-1e64db11400b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Hamphrey", - "company": "Systheon", - "phone": "822-501-2041", - "email": "kylie@systheon.com" - }, - { - "id": 438, - "guid": "b8775c8f-decc-44b0-872f-9b45689d0a18", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Creighton", - "company": "Cryptotegrity", - "phone": "880-465-3822", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 439, - "guid": "a0d0b914-c549-42e6-bc5a-f6b53f0305cd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Carter", - "company": "Interliant", - "phone": "863-400-2782", - "email": "amelia@interliant.com" - }, - { - "id": 440, - "guid": "8b628975-0e81-4460-8d36-fa7bfceba795", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ashley Brooks", - "company": "US Infratouch", - "phone": "876-585-2185", - "email": "ashley@us infratouch.com" - }, - { - "id": 441, - "guid": "1b512a09-9293-414a-9a32-50d66353a6bb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Stanley", - "company": "Netsystems", - "phone": "804-589-3867", - "email": "savannah@netsystems.com" - }, - { - "id": 442, - "guid": "7be7cefb-6d15-4b78-a71a-6d00b514947e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Gate", - "company": "SysVenamerica", - "phone": "819-481-2373", - "email": "samantha@sysvenamerica.com" - }, - { - "id": 443, - "guid": "a3c31505-88d8-4445-b81a-ef5a8de803a4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Paige Owen", - "company": "Navivacs", - "phone": "839-513-3540", - "email": "paige@navivacs.com" - }, - { - "id": 444, - "guid": "6bead047-56f6-4fc5-bcdb-5e93c414ec59", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Chesterton", - "company": "Robotemplate", - "phone": "874-446-3096", - "email": "gabrielle@robotemplate.com" - }, - { - "id": 445, - "guid": "597bcdce-322d-44ab-b608-6ffb0361fbde", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Carter", - "company": "Xeicon", - "phone": "846-467-2443", - "email": "autumn@xeicon.com" - }, - { - "id": 446, - "guid": "1979b325-a593-49d7-9b19-b199fb882a88", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Makayla Hailey", - "company": "iQualcar", - "phone": "860-469-3354", - "email": "makayla@iqualcar.com" - }, - { - "id": 447, - "guid": "ab970628-f8bb-4c5f-9c30-4e11148f18c4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Ford", - "company": "Keytheon", - "phone": "845-537-2791", - "email": "melanie@keytheon.com" - }, - { - "id": 448, - "guid": "d19a0034-2ce2-46d9-8b59-ed328cbfaddd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Wesley", - "company": "Mescatron", - "phone": "873-512-3916", - "email": "alexandra@mescatron.com" - }, - { - "id": 449, - "guid": "92fc61d7-5976-47d6-b71c-8d59f2b6092e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Higgins", - "company": "Robocomm", - "phone": "839-531-3446", - "email": "morgan@robocomm.com" - }, - { - "id": 450, - "guid": "dc3ce3c8-9ab0-4e93-bb7c-1dadc554bafb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Carroll", - "company": "Robotemplate", - "phone": "810-507-3670", - "email": "avery@robotemplate.com" - }, - { - "id": 451, - "guid": "a7d8d296-c57d-4f88-80c9-88d9c453e8da", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kayla Freeman", - "company": "Syssoft", - "phone": "848-447-2376", - "email": "kayla@syssoft.com" - }, - { - "id": 452, - "guid": "9c808ff3-d02a-4978-88c7-c729dd3e12ec", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Wesley", - "company": "Polytheon", - "phone": "828-519-3725", - "email": "alexis@polytheon.com" - }, - { - "id": 453, - "guid": "00f73b9c-942e-407c-8239-20366114e918", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Gustman", - "company": "Sontopia", - "phone": "853-590-3259", - "email": "alexis@sontopia.com" - }, - { - "id": 454, - "guid": "52f2e8ea-f65a-44d0-a985-695c94301dd4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Turner", - "company": "Titanigraf", - "phone": "801-582-3673", - "email": "evelyn@titanigraf.com" - }, - { - "id": 455, - "guid": "d4de6e85-e788-48dc-b340-5a704cd72b2a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Daniels", - "company": "Proline", - "phone": "809-443-2588", - "email": "addison@proline.com" - }, - { - "id": 456, - "guid": "85a3906c-9949-473a-a04e-af0cd84e11a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Clapton", - "company": "Gigaura", - "phone": "801-429-2131", - "email": "charlotte@gigaura.com" - }, - { - "id": 457, - "guid": "e682ff2a-c877-4a05-9483-3dc541af3cc7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Carey", - "company": "Airdyne", - "phone": "834-505-2464", - "email": "rachel@airdyne.com" - }, - { - "id": 458, - "guid": "695615a3-e1ae-43f0-b427-a00e680dfc3e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Miln", - "company": "Sontopia", - "phone": "842-583-2066", - "email": "rachel@sontopia.com" - }, - { - "id": 459, - "guid": "5c7ca476-5463-48cb-a10f-49cf783df7cd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Wallace", - "company": "Vencom", - "phone": "873-593-2359", - "email": "melanie@vencom.com" - }, - { - "id": 460, - "guid": "8179b25d-3510-49f1-a92f-96e078b0845a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Savannah Daniels", - "company": "Robotomic", - "phone": "883-421-3681", - "email": "savannah@robotomic.com" - }, - { - "id": 461, - "guid": "f2ee0ba4-1e17-476b-9815-578952f20386", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Warren", - "company": "Aprama", - "phone": "889-447-2581", - "email": "hannah@aprama.com" - }, - { - "id": 462, - "guid": "d1f0570c-0bf4-463e-8c19-e9fc227ec02b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Owen", - "company": "Sontopia", - "phone": "838-591-2162", - "email": "payton@sontopia.com" - }, - { - "id": 463, - "guid": "24542ede-4b25-4149-937b-2155cdc218ac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Thornton", - "company": "Mescatron", - "phone": "864-518-2058", - "email": "victoria@mescatron.com" - }, - { - "id": 464, - "guid": "c51b43cc-92a1-43d0-8427-9b26c78701b5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Neal", - "company": "Safetrust", - "phone": "882-562-2965", - "email": "mackenzie@safetrust.com" - }, - { - "id": 465, - "guid": "f611a7e0-e7bb-48e8-b15e-ecfb912d4ba4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Chandter", - "company": "Quintegrity", - "phone": "829-446-3303", - "email": "mariah@quintegrity.com" - }, - { - "id": 466, - "guid": "4e29850f-4648-4f2b-a37c-facd3985113a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Gardner", - "company": "US Infratouch", - "phone": "888-582-3564", - "email": "audrey@us infratouch.com" - }, - { - "id": 467, - "guid": "91aeb5f6-e0f0-4869-993e-13c75a57f7b8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Hodges", - "company": "Venconix", - "phone": "853-445-2839", - "email": "savannah@venconix.com" - }, - { - "id": 468, - "guid": "53d31bc8-24f0-4662-9641-b820880925a9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Michaelson", - "company": "Vencom", - "phone": "824-424-3302", - "email": "payton@vencom.com" - }, - { - "id": 469, - "guid": "cf9c2d42-8441-45d0-aed5-0b0b2d04b094", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Abramson", - "company": "eSteganoergy", - "phone": "856-442-3523", - "email": "alyssa@esteganoergy.com" - }, - { - "id": 470, - "guid": "1a29979e-e8ca-43aa-9cc8-8133e679371d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Brickman", - "company": "Teknoplexon", - "phone": "884-537-3757", - "email": "addison@teknoplexon.com" - }, - { - "id": 471, - "guid": "ca6cc7e2-ac2d-460e-8673-e0ca858d1f4e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Crossman", - "company": "Inridium", - "phone": "887-521-3201", - "email": "jessica@inridium.com" - }, - { - "id": 472, - "guid": "132b9aa1-67e9-4118-a363-f713e84e4765", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Hailey", - "company": "Multitiqua", - "phone": "834-518-2783", - "email": "jasmine@multitiqua.com" - }, - { - "id": 473, - "guid": "2aa6043d-8873-4369-ba60-739ee4d15891", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Hawkins", - "company": "Syssoft", - "phone": "848-495-3404", - "email": "grace@syssoft.com" - }, - { - "id": 474, - "guid": "5eb6483b-7fe2-4a42-9df4-d08b88bc4088", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Neal", - "company": "Hypervaco", - "phone": "871-573-3690", - "email": "mackenzie@hypervaco.com" - }, - { - "id": 475, - "guid": "4b77dbea-b95e-4393-bf1d-ad2b2bc5a5f0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Murphy", - "company": "Truegate", - "phone": "803-411-2490", - "email": "camila@truegate.com" - }, - { - "id": 476, - "guid": "2f2bab9b-f6c6-4968-aadd-bf032325b938", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Charlson", - "company": "Venconix", - "phone": "877-464-3818", - "email": "layla@venconix.com" - }, - { - "id": 477, - "guid": "d5ac04d2-9207-4757-a87f-440eb14e41a1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Waller", - "company": "iEnland", - "phone": "834-458-3877", - "email": "hannah@ienland.com" - }, - { - "id": 478, - "guid": "398ddfec-7c7c-4e7e-81a3-66af4a8d8dc7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sarah Oswald", - "company": "US Omnigraphik", - "phone": "846-452-3998", - "email": "sarah@us omnigraphik.com" - }, - { - "id": 479, - "guid": "c8c98f10-e9c3-4d58-a868-f5d457b8ba40", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Melanie Nelson", - "company": "Mescaridic", - "phone": "857-487-2010", - "email": "melanie@mescaridic.com" - }, - { - "id": 480, - "guid": "fea818cf-cf0a-423e-9cc0-2d0ace06f3b5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Gardner", - "company": "Celgra", - "phone": "862-438-3821", - "email": "bailey@celgra.com" - }, - { - "id": 481, - "guid": "5f909f24-5798-4c69-bd6d-1188c9ec8793", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Gate", - "company": "Hypervaco", - "phone": "810-498-3184", - "email": "isabella@hypervaco.com" - }, - { - "id": 482, - "guid": "af61e0ce-4cb0-4fe6-88e0-fce5f85d6559", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Goodman", - "company": "InfoAirway", - "phone": "876-425-2230", - "email": "gabrielle@infoairway.com" - }, - { - "id": 483, - "guid": "2d63210c-626c-412b-8797-a5d316c74602", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Gilbert", - "company": "Compuamerica", - "phone": "805-535-2770", - "email": "vanessa@compuamerica.com" - }, - { - "id": 484, - "guid": "a48d2db9-b007-4c63-8063-e0c9bf69aa9e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Murphy", - "company": "Mescatron", - "phone": "896-548-3312", - "email": "kaitlyn@mescatron.com" - }, - { - "id": 485, - "guid": "36604beb-89d1-4c29-8147-5fff8d778544", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Conors", - "company": "Polytheon", - "phone": "872-446-3992", - "email": "mya@polytheon.com" - }, - { - "id": 486, - "guid": "0ba23415-cbae-4c49-9d0f-5b90bab00739", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Cook", - "company": "Technogra", - "phone": "839-590-3647", - "email": "gianna@technogra.com" - }, - { - "id": 487, - "guid": "b3fc191b-9ffb-44b6-95f9-9ac849756980", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Michaelson", - "company": "Jamrola", - "phone": "870-507-2785", - "email": "kaitlyn@jamrola.com" - }, - { - "id": 488, - "guid": "03dc11a2-d786-4f2b-97fc-13cb15ae794d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Gill", - "company": "Idmax", - "phone": "879-457-2544", - "email": "rachel@idmax.com" - }, - { - "id": 489, - "guid": "cb850818-1e15-4d22-ab81-dfb5c263e7d2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Conors", - "company": "Conotomics", - "phone": "845-569-2300", - "email": "peyton@conotomics.com" - }, - { - "id": 490, - "guid": "2a30a63d-8d26-4a91-bc74-cac5378768d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Watson", - "company": "Westmedia", - "phone": "860-502-2094", - "email": "andrea@westmedia.com" - }, - { - "id": 491, - "guid": "fa6d7cea-3bbd-4477-9819-c81a86fd192d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Miers", - "company": "Teratopia", - "phone": "810-556-3543", - "email": "avery@teratopia.com" - }, - { - "id": 492, - "guid": "13f3ce14-6621-4aa9-8586-9b8ae3571e18", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Miers", - "company": "Vencom", - "phone": "881-599-3956", - "email": "mariah@vencom.com" - }, - { - "id": 493, - "guid": "bbae3ea8-d18a-4df9-b25d-5dfb68d25a0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Goldman", - "company": "Orthosoft", - "phone": "887-473-3712", - "email": "layla@orthosoft.com" - }, - { - "id": 494, - "guid": "46d931e8-e207-4f8d-b0e1-a215b0e065ce", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Wesley", - "company": "Venconix", - "phone": "885-565-3629", - "email": "olivia@venconix.com" - }, - { - "id": 495, - "guid": "7979ef16-22f6-4b70-aa00-120dd5ca70fd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Crossman", - "company": "Truetomic", - "phone": "842-408-2786", - "email": "brooke@truetomic.com" - }, - { - "id": 496, - "guid": "c22a6697-c8cf-409c-84a5-31fa89af7bca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Winter", - "company": "Mescaridic", - "phone": "826-582-2290", - "email": "kaitlyn@mescaridic.com" - }, - { - "id": 497, - "guid": "289a4916-0446-4d9c-a841-b8858249f05c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Haig", - "company": "Syssoft", - "phone": "873-507-2485", - "email": "trinity@syssoft.com" - }, - { - "id": 498, - "guid": "adb7029b-8134-497c-8b01-d277c153661e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Croftoon", - "company": "Tekcar", - "phone": "818-536-3470", - "email": "kaitlyn@tekcar.com" - }, - { - "id": 499, - "guid": "f3b55543-2aa8-4a09-9572-c4d4ba7b99b6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Gilmore", - "company": "Teknoplexon", - "phone": "800-488-3520", - "email": "eva@teknoplexon.com" - }, - { - "id": 500, - "guid": "a1677b6a-c470-469b-a5de-5c9c05f95191", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Chandter", - "company": "Infragraph", - "phone": "862-531-3617", - "email": "sydney@infragraph.com" - }, - { - "id": 501, - "guid": "23c77f95-5ec6-464d-b26c-d9dd2a890dd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Waller", - "company": "Robocomm", - "phone": "822-505-2926", - "email": "molly@robocomm.com" - }, - { - "id": 502, - "guid": "ba6f826f-4ffa-4ac8-8305-8e1db489a5be", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Hodges", - "company": "Skydata", - "phone": "820-587-2001", - "email": "natalie@skydata.com" - }, - { - "id": 503, - "guid": "70fbd3ea-7b01-4646-a5d2-aabc9517595a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Gibbs", - "company": "RoboAerlogix", - "phone": "834-546-3385", - "email": "allison@roboaerlogix.com" - }, - { - "id": 504, - "guid": "7ddcb51e-7f07-44b1-914e-6a974b8feeff", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Wainwright", - "company": "InfoAirway", - "phone": "862-460-3946", - "email": "kimberly@infoairway.com" - }, - { - "id": 505, - "guid": "44a4dd81-12c4-4f27-825c-efab2378fbd7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Thorndike", - "company": "Robotemplate", - "phone": "876-456-3978", - "email": "serenity@robotemplate.com" - }, - { - "id": 506, - "guid": "cf1bcb18-d68d-4941-b2bc-cef8c3b4604a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Chapman", - "company": "Truetomic", - "phone": "867-588-3216", - "email": "audrey@truetomic.com" - }, - { - "id": 507, - "guid": "f60b5460-54b8-42d5-9ecb-0bcf4ac0956f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Autumn Gustman", - "company": "Robocomm", - "phone": "848-475-2231", - "email": "autumn@robocomm.com" - }, - { - "id": 508, - "guid": "517f344f-ddd2-44d3-a515-488aac7c2cb4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Watson", - "company": "Turbomart", - "phone": "838-463-2017", - "email": "lillian@turbomart.com" - }, - { - "id": 509, - "guid": "56e09e17-788c-4f6e-a079-a1afe41b2082", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Miln", - "company": "Indisco", - "phone": "852-474-2185", - "email": "hannah@indisco.com" - }, - { - "id": 510, - "guid": "61d04d36-b37c-4bc3-ab90-848aadb01602", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Youmans", - "company": "Robocomm", - "phone": "851-589-3399", - "email": "brianna@robocomm.com" - }, - { - "id": 511, - "guid": "58ca32d1-96f5-4383-9d59-3ad5d5055b00", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Mercer", - "company": "Ventanium", - "phone": "884-493-3750", - "email": "maria@ventanium.com" - }, - { - "id": 512, - "guid": "20862d3e-1d09-47b5-bd2c-48b23fa39ecf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Owen", - "company": "Westmedia", - "phone": "833-448-3217", - "email": "victoria@westmedia.com" - }, - { - "id": 513, - "guid": "c0f519b5-d6bc-4296-af6b-78b4bf8ea93b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Gilmore", - "company": "Superscope", - "phone": "860-489-3781", - "email": "claire@superscope.com" - }, - { - "id": 514, - "guid": "b056b0e1-91a9-46b9-ac83-8e0264fb26c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Hamphrey", - "company": "Sontopia", - "phone": "877-408-3292", - "email": "kaylee@sontopia.com" - }, - { - "id": 515, - "guid": "541f24e9-4617-4e2d-b446-56224a231e1c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Paige Carey", - "company": "Unologic", - "phone": "830-425-3285", - "email": "paige@unologic.com" - }, - { - "id": 516, - "guid": "a59b2209-f18b-4f2b-bc59-7561c9fe49d9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katelyn Nathan", - "company": "Polytheon", - "phone": "813-596-2157", - "email": "katelyn@polytheon.com" - }, - { - "id": 517, - "guid": "b4d7399e-4aff-4201-96ac-7f8d259d428f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Chapman", - "company": "Infragraph", - "phone": "816-515-2813", - "email": "kylie@infragraph.com" - }, - { - "id": 518, - "guid": "1b96d6e5-7c53-4044-a537-4ad52b6aee00", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Webster", - "company": "Cryptotemplate", - "phone": "818-562-2081", - "email": "rachel@cryptotemplate.com" - }, - { - "id": 519, - "guid": "a84411f7-d783-445c-8551-83e14b892b4b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Oliver", - "company": "Cryptotemplate", - "phone": "815-555-3039", - "email": "alexis@cryptotemplate.com" - }, - { - "id": 520, - "guid": "f24b3d1b-4d0f-44a5-8fa3-76a5146509a9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Warren", - "company": "Unconix", - "phone": "812-497-2280", - "email": "melanie@unconix.com" - }, - { - "id": 521, - "guid": "34193036-9bf6-4331-a2fe-4608fb4cd325", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Oldman", - "company": "Venconix", - "phone": "817-423-3565", - "email": "rachel@venconix.com" - }, - { - "id": 522, - "guid": "b784b550-fb0d-4955-b72c-9930d9b129cf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Nathan", - "company": "Unologic", - "phone": "844-422-3127", - "email": "brianna@unologic.com" - }, - { - "id": 523, - "guid": "f19d9641-655d-4060-a2e3-dae0f6568a3c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney Nash", - "company": "Techtron", - "phone": "897-540-3129", - "email": "sydney@techtron.com" - }, - { - "id": 524, - "guid": "fabfda42-d176-4420-a540-c42f9e01b20c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hailey Webster", - "company": "Netsystems", - "phone": "825-491-3156", - "email": "hailey@netsystems.com" - }, - { - "id": 525, - "guid": "205e8273-e4ff-4714-b3fa-cd2b50f19b94", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Oliver", - "company": "Unconix", - "phone": "881-530-2339", - "email": "autumn@unconix.com" - }, - { - "id": 526, - "guid": "706fb163-12ba-481c-bf2b-7267bd89c98e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Campbell", - "company": "Conotomics", - "phone": "896-573-2401", - "email": "faith@conotomics.com" - }, - { - "id": 527, - "guid": "a3d38524-3827-42b4-931f-8f71b9d9ed84", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Thornton", - "company": "Anaframe", - "phone": "807-555-2156", - "email": "emily@anaframe.com" - }, - { - "id": 528, - "guid": "323fd188-b7d8-4859-afdb-87a6ef0b81e7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Davidson", - "company": "Indisco", - "phone": "835-439-3755", - "email": "aaliyah@indisco.com" - }, - { - "id": 529, - "guid": "4d02e619-3f1d-4246-befb-f0a320e39e56", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Michaelson", - "company": "Safeagra", - "phone": "863-513-2224", - "email": "layla@safeagra.com" - }, - { - "id": 530, - "guid": "98886127-1236-4946-bed1-cea6fb3ab87e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Osborne", - "company": "Unconix", - "phone": "836-508-3580", - "email": "julia@unconix.com" - }, - { - "id": 531, - "guid": "1673822d-b6c0-4e01-918e-41d2e28836b7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Walkman", - "company": "Qualserve", - "phone": "838-534-2407", - "email": "victoria@qualserve.com" - }, - { - "id": 532, - "guid": "904bb087-7fc6-4f68-980e-fdd41cbb9b83", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Chandter", - "company": "iMedconik", - "phone": "846-538-2779", - "email": "natalie@imedconik.com" - }, - { - "id": 533, - "guid": "80497c4b-99eb-4731-997b-ce3dbbd3690e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley Carter", - "company": "Anagraph", - "phone": "883-575-2149", - "email": "ashley@anagraph.com" - }, - { - "id": 534, - "guid": "ffdc2ec0-0b02-43b9-9805-82da7b5aace5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Wayne", - "company": "iMedconik", - "phone": "802-432-2773", - "email": "allison@imedconik.com" - }, - { - "id": 535, - "guid": "028ba322-dc34-4f77-9bde-96a03a3ccdb0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Waller", - "company": "Transtouch", - "phone": "887-564-2074", - "email": "samantha@transtouch.com" - }, - { - "id": 536, - "guid": "3514c268-41b6-4962-84b5-63da4f3a42d3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Taylor Young", - "company": "iEnland", - "phone": "899-551-2661", - "email": "taylor@ienland.com" - }, - { - "id": 537, - "guid": "68a31a6e-b66a-411e-acbd-f0f8e4729353", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Higgins", - "company": "Enlogia", - "phone": "870-490-3400", - "email": "isabella@enlogia.com" - }, - { - "id": 538, - "guid": "5d1d8c72-1a89-4519-9178-d5447d5fa74d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Brooks", - "company": "eEyetanic", - "phone": "818-549-3041", - "email": "aaliyah@eeyetanic.com" - }, - { - "id": 539, - "guid": "a83ba736-a2c7-4468-86b5-e0d1397afbd7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Adamson", - "company": "Fibrotouch", - "phone": "879-479-3438", - "email": "sophie@fibrotouch.com" - }, - { - "id": 540, - "guid": "108fadda-5e61-4b8d-a231-cc9ba89ae1f0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Michaelson", - "company": "Transtouch", - "phone": "860-586-3606", - "email": "gabrielle@transtouch.com" - }, - { - "id": 541, - "guid": "0dc2bf93-ad8b-41df-9a66-a1795c84ae24", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Gill", - "company": "Dynarama", - "phone": "861-493-2129", - "email": "khloe@dynarama.com" - }, - { - "id": 542, - "guid": "6c6da50f-a16c-48bf-9266-c5705422b937", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Morrison", - "company": "eSteganoergy", - "phone": "884-559-3382", - "email": "allison@esteganoergy.com" - }, - { - "id": 543, - "guid": "528e332d-728f-405e-a0c2-17a3f58e8d13", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Gerald", - "company": "Aprama", - "phone": "804-432-2090", - "email": "ava@aprama.com" - }, - { - "id": 544, - "guid": "6ba458a9-372c-443b-964d-6320e065226f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Miers", - "company": "SysVenamerica", - "phone": "872-543-3125", - "email": "elizabeth@sysvenamerica.com" - }, - { - "id": 545, - "guid": "27f846b9-b960-43f2-b5eb-8230ea32c56b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Wallace", - "company": "iSkyvaco", - "phone": "806-522-3546", - "email": "avery@iskyvaco.com" - }, - { - "id": 546, - "guid": "fe0163da-82ac-4f58-8849-0a37341d4331", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Owen", - "company": "Steganoconiche", - "phone": "843-594-3751", - "email": "serenity@steganoconiche.com" - }, - { - "id": 547, - "guid": "03b3aa29-d724-4999-be7c-37b37b673cc6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Miller", - "company": "Ameritron", - "phone": "898-443-3142", - "email": "lauren@ameritron.com" - }, - { - "id": 548, - "guid": "a4be1b9f-dc38-4ea1-aae4-79afc6598a93", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Gerald", - "company": "Interliant", - "phone": "879-447-2897", - "email": "taylor@interliant.com" - }, - { - "id": 549, - "guid": "cedba827-b63b-4a07-b061-b913c3a56620", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Abigail Galbraith", - "company": "OpKeycomm", - "phone": "816-551-3320", - "email": "abigail@opkeycomm.com" - }, - { - "id": 550, - "guid": "bbf0b562-724d-439c-9d2d-10839dca17af", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Calhoun", - "company": "Fibrotopia", - "phone": "812-576-3849", - "email": "alexandra@fibrotopia.com" - }, - { - "id": 551, - "guid": "1fb3aef7-1777-44fa-b2d0-d2159f7eb4d0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Turner", - "company": "Titanirola", - "phone": "895-464-2048", - "email": "alexandra@titanirola.com" - }, - { - "id": 552, - "guid": "ddea3a01-0365-4736-8c98-318c36c54c59", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Cook", - "company": "Fibroserve", - "phone": "857-426-3280", - "email": "grace@fibroserve.com" - }, - { - "id": 553, - "guid": "8b3f4970-4d82-48b5-846f-65f73a3f64e3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Ogden", - "company": "Turbomart", - "phone": "887-566-3569", - "email": "jessica@turbomart.com" - }, - { - "id": 554, - "guid": "6d2bdacf-d549-4958-8cab-782607709383", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Carroll", - "company": "Polytheon", - "phone": "849-510-3541", - "email": "emily@polytheon.com" - }, - { - "id": 555, - "guid": "ea6f4c2c-1948-40e0-91cd-16864e5b5900", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Charlson", - "company": "US Infratouch", - "phone": "819-518-2109", - "email": "sofia@us infratouch.com" - }, - { - "id": 556, - "guid": "77f8c626-0e9a-4ad6-9c18-9f646f5c68a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Calhoun", - "company": "Anagraph", - "phone": "882-542-2216", - "email": "peyton@anagraph.com" - }, - { - "id": 557, - "guid": "b7383ee6-089b-4501-aae0-30d44c37466b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Creighton", - "company": "Pericenta", - "phone": "877-550-3813", - "email": "rachel@pericenta.com" - }, - { - "id": 558, - "guid": "855fe66d-ca2d-46a8-b2de-9788fcff8de1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Oliver", - "company": "Safeagra", - "phone": "890-456-3988", - "email": "avery@safeagra.com" - }, - { - "id": 559, - "guid": "53f7a512-70ef-4293-ac74-7594c8570e18", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Oswald", - "company": "Techtron", - "phone": "893-423-3144", - "email": "lauren@techtron.com" - }, - { - "id": 560, - "guid": "c9d1a218-4ccf-43fd-8bed-e1fe6f59b919", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Goldman", - "company": "Airdyne", - "phone": "851-516-2215", - "email": "makayla@airdyne.com" - }, - { - "id": 561, - "guid": "fdff02d4-4646-495c-a830-bc6bfbae2810", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Thorndike", - "company": "Navivacs", - "phone": "840-585-2711", - "email": "peyton@navivacs.com" - }, - { - "id": 562, - "guid": "3196ceed-05a6-4208-b5bf-6ebbf59edf9e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Turner", - "company": "Entcast", - "phone": "810-582-2758", - "email": "alyssa@entcast.com" - }, - { - "id": 563, - "guid": "bbf07988-c0f7-4da3-b664-05e86ad88ba7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Brooks", - "company": "Technogra", - "phone": "865-515-3606", - "email": "mariah@technogra.com" - }, - { - "id": 564, - "guid": "5b4beebe-c287-4448-8518-f079ff7cae79", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Hawkins", - "company": "Textiqua", - "phone": "818-440-3316", - "email": "gianna@textiqua.com" - }, - { - "id": 565, - "guid": "1bdeb691-d717-4dad-a0ba-2c611e966ba8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Carter", - "company": "Pacwest", - "phone": "870-467-2588", - "email": "aaliyah@pacwest.com" - }, - { - "id": 566, - "guid": "64bd6849-6ce8-43c2-85c5-d44f20fce25b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexandra Oldman", - "company": "Pericenta", - "phone": "832-485-2835", - "email": "alexandra@pericenta.com" - }, - { - "id": 567, - "guid": "1caa4564-f1cf-4261-844e-6f242e624a4f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Brown", - "company": "Westtomik", - "phone": "857-582-3341", - "email": "vanessa@westtomik.com" - }, - { - "id": 568, - "guid": "6ac89989-371e-4373-9748-1a79cb928060", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Carey", - "company": "Aluco", - "phone": "814-499-3384", - "email": "payton@aluco.com" - }, - { - "id": 569, - "guid": "ca3832b2-4a7d-4626-b4bc-62c343d26a43", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Neal", - "company": "Aluco", - "phone": "883-506-2911", - "email": "ava@aluco.com" - }, - { - "id": 570, - "guid": "2e9cb467-5ccc-4832-94a5-fed8114dab2b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Grace Walkman", - "company": "Dynarama", - "phone": "863-474-2820", - "email": "grace@dynarama.com" - }, - { - "id": 571, - "guid": "faf7b8d4-c1c6-4408-8236-0095f2d6a1a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Cook", - "company": "Tekcar", - "phone": "813-542-3106", - "email": "trinity@tekcar.com" - }, - { - "id": 572, - "guid": "3de8f5a7-10d7-4443-83bd-87eaae31af47", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Carroll", - "company": "Infragraph", - "phone": "873-452-2053", - "email": "brooklyn@infragraph.com" - }, - { - "id": 573, - "guid": "ccebe7da-8983-442f-9a71-73ee5d859f71", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Calhoun", - "company": "US Infratouch", - "phone": "891-581-2076", - "email": "chloe@us infratouch.com" - }, - { - "id": 574, - "guid": "5d0a309e-85b1-43b8-9227-051e94b0394d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Webster", - "company": "Unconix", - "phone": "893-587-2380", - "email": "alexis@unconix.com" - }, - { - "id": 575, - "guid": "237cf5e5-6fb6-4263-b1ca-148732106850", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Genesis Youmans", - "company": "Aluco", - "phone": "890-400-3912", - "email": "genesis@aluco.com" - }, - { - "id": 576, - "guid": "5df23c70-3586-4b2d-81f1-271dfa11d781", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bailey Wallace", - "company": "Keytheon", - "phone": "895-489-2383", - "email": "bailey@keytheon.com" - }, - { - "id": 577, - "guid": "f047d99c-77b0-4f75-9fad-ae39dda0acb3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Ogden", - "company": "Cryptotemplate", - "phone": "839-462-3196", - "email": "lauren@cryptotemplate.com" - }, - { - "id": 578, - "guid": "f8d65918-7fc0-42fd-b73c-fb46c813a756", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Ogden", - "company": "Truegate", - "phone": "871-522-2695", - "email": "mia@truegate.com" - }, - { - "id": 579, - "guid": "40433d88-c6e8-4d3a-bc7c-89cfec516376", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Hoggarth", - "company": "Techtron", - "phone": "864-442-2414", - "email": "mya@techtron.com" - }, - { - "id": 580, - "guid": "297fae19-6cdc-436a-8062-1160576b2da1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Bush", - "company": "US Infratouch", - "phone": "849-542-3684", - "email": "destiny@us infratouch.com" - }, - { - "id": 581, - "guid": "160044f5-4c92-46ae-a4d6-11900040f2f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabelle Hancock", - "company": "Textiqua", - "phone": "882-518-2198", - "email": "isabelle@textiqua.com" - }, - { - "id": 582, - "guid": "c0654727-9d7f-4bb2-ba7d-43cb526b86a3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Gilson", - "company": "Steganoconiche", - "phone": "824-587-3530", - "email": "taylor@steganoconiche.com" - }, - { - "id": 583, - "guid": "d6cc00f0-fce8-4ddb-aa3e-8d8b056b72c6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Miln", - "company": "Titanigraf", - "phone": "827-594-2290", - "email": "kayla@titanigraf.com" - }, - { - "id": 584, - "guid": "202237b4-e632-4dd2-98f2-58db0c5b12c8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Campbell", - "company": "Aluco", - "phone": "870-482-2726", - "email": "andrea@aluco.com" - }, - { - "id": 585, - "guid": "ecfec946-8c1b-4dbb-bfb0-021c645300a8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Galbraith", - "company": "Westmedia", - "phone": "814-476-2417", - "email": "maya@westmedia.com" - }, - { - "id": 586, - "guid": "ce201adc-4713-43b8-bb41-390d66f8a8c8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Wallace", - "company": "Ameritron", - "phone": "810-414-2188", - "email": "isabelle@ameritron.com" - }, - { - "id": 587, - "guid": "2d1cce98-915b-4472-9043-13ec6f4cc022", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Nelson", - "company": "Pacwest", - "phone": "822-473-2888", - "email": "claire@pacwest.com" - }, - { - "id": 588, - "guid": "1c7934cb-7697-464a-9df1-f502220359f2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Ward", - "company": "Robocomm", - "phone": "844-542-3080", - "email": "brooklyn@robocomm.com" - }, - { - "id": 589, - "guid": "59b15a69-0a2a-47b7-8da3-00bf6ca26b5f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Bush", - "company": "Steganoconiche", - "phone": "857-573-3624", - "email": "ava@steganoconiche.com" - }, - { - "id": 590, - "guid": "0b0d1363-ba1d-43c7-94d6-90277763be98", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Wesley", - "company": "Teraserv", - "phone": "810-466-2909", - "email": "chloe@teraserv.com" - }, - { - "id": 591, - "guid": "1a74802c-eb25-4d9d-a64c-0c707b9b825d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Timmons", - "company": "OpKeycomm", - "phone": "895-467-2157", - "email": "arianna@opkeycomm.com" - }, - { - "id": 592, - "guid": "16dcdb79-e6a5-4068-8509-9b077d548d58", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Daniels", - "company": "Teratopia", - "phone": "859-451-2043", - "email": "isabella@teratopia.com" - }, - { - "id": 593, - "guid": "907862b3-ba58-4d83-abb0-036dc1c97bc4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Wood", - "company": "Generola", - "phone": "830-531-3218", - "email": "mya@generola.com" - }, - { - "id": 594, - "guid": "887b6f1c-646a-440c-b7a1-f0c280a300be", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Hailey", - "company": "Tekcar", - "phone": "868-584-2749", - "email": "molly@tekcar.com" - }, - { - "id": 595, - "guid": "737cd66e-7e35-4274-9a17-60b427e7255d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Hawkins", - "company": "Fibrotopia", - "phone": "842-543-2399", - "email": "melanie@fibrotopia.com" - }, - { - "id": 596, - "guid": "2d835db7-2d33-41ae-b178-65cb93437e7a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Cramer", - "company": "Skydata", - "phone": "800-578-2655", - "email": "gabriella@skydata.com" - }, - { - "id": 597, - "guid": "d014052e-1c1c-4c46-bf8b-e9e4115a1424", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Wesley", - "company": "InfoAirway", - "phone": "839-553-2410", - "email": "isabelle@infoairway.com" - }, - { - "id": 598, - "guid": "334a54da-bafd-47f5-b45a-58e93bd86040", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Freeman", - "company": "US Omnigraphik", - "phone": "823-478-2753", - "email": "brianna@us omnigraphik.com" - }, - { - "id": 599, - "guid": "069e8939-099c-4bba-95b8-19fcfa9ebee3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Cramer", - "company": "Truetomic", - "phone": "839-572-3070", - "email": "sarah@truetomic.com" - }, - { - "id": 600, - "guid": "76fa85ae-85f4-406f-8115-88636e8ef73e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Murphy", - "company": "Fibrotopia", - "phone": "801-544-2608", - "email": "kylie@fibrotopia.com" - }, - { - "id": 601, - "guid": "1cc51ecb-ef5e-4045-9866-0e09ea315917", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Thomson", - "company": "Superscope", - "phone": "862-447-3875", - "email": "kaylee@superscope.com" - }, - { - "id": 602, - "guid": "e234350f-721e-4bb6-9b5a-4bc0004ee768", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Carroll", - "company": "Titanirola", - "phone": "813-475-3734", - "email": "morgan@titanirola.com" - }, - { - "id": 603, - "guid": "98d21ed5-c69f-416e-bc1c-07d9734d26f0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Gilbert", - "company": "iEnland", - "phone": "830-595-2787", - "email": "leah@ienland.com" - }, - { - "id": 604, - "guid": "0cc2d064-a614-4011-9f75-77cba49998f1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Wood", - "company": "Systheon", - "phone": "855-535-2262", - "email": "olivia@systheon.com" - }, - { - "id": 605, - "guid": "9e3c692d-c7b0-4318-972a-fe8a3571ce5e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Thorndike", - "company": "iOptystix", - "phone": "865-553-2791", - "email": "taylor@ioptystix.com" - }, - { - "id": 606, - "guid": "d748c039-2b29-4efa-bfb1-32fcb07819c2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Gustman", - "company": "Allphysiche", - "phone": "892-525-2702", - "email": "hailey@allphysiche.com" - }, - { - "id": 607, - "guid": "cca970ea-116d-40af-8cd0-d6e4cdfda5f9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity White", - "company": "Techtron", - "phone": "819-440-3601", - "email": "trinity@techtron.com" - }, - { - "id": 608, - "guid": "7f62907b-0ab6-41ce-822d-6779e78935fe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Waller", - "company": "Thermotomic", - "phone": "866-492-3206", - "email": "jessica@thermotomic.com" - }, - { - "id": 609, - "guid": "2aa79e02-2020-46b4-a37c-2545944c7d03", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Galbraith", - "company": "Skydata", - "phone": "877-538-2757", - "email": "addison@skydata.com" - }, - { - "id": 610, - "guid": "0d3f0364-523a-440c-9954-6a80b1779bb1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Ward", - "company": "Textiqua", - "phone": "890-431-3423", - "email": "lily@textiqua.com" - }, - { - "id": 611, - "guid": "414f6ef3-1345-4888-a34e-e7a4e0161fe5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Walkman", - "company": "Truetomic", - "phone": "811-454-3957", - "email": "evelyn@truetomic.com" - }, - { - "id": 612, - "guid": "2b720d19-1bca-4ee9-953f-7f0033698392", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Gustman", - "company": "Techtron", - "phone": "883-525-2756", - "email": "molly@techtron.com" - }, - { - "id": 613, - "guid": "bd4448b3-30ac-430d-89cb-36716b4dd71f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Harrison", - "company": "Orthosoft", - "phone": "857-580-3115", - "email": "vanessa@orthosoft.com" - }, - { - "id": 614, - "guid": "a2902c36-eb4e-483f-a872-28371a50b41b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Oldridge", - "company": "Aluco", - "phone": "884-559-2765", - "email": "brooklyn@aluco.com" - }, - { - "id": 615, - "guid": "e98e69e8-9e04-44fb-9e70-102e62f231c1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Chandter", - "company": "Gigaura", - "phone": "822-479-2707", - "email": "lillian@gigaura.com" - }, - { - "id": 616, - "guid": "ae8449b4-71f3-42de-b65f-6045c199178d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Oldman", - "company": "Ventanium", - "phone": "807-581-2250", - "email": "destiny@ventanium.com" - }, - { - "id": 617, - "guid": "6a0ba7c4-4a22-439b-bdf3-b602e42e60c6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Brooks", - "company": "Westtomik", - "phone": "874-428-2691", - "email": "peyton@westtomik.com" - }, - { - "id": 618, - "guid": "49832bf8-3fda-4bae-8539-50d1a1f4c273", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Smith", - "company": "Truegate", - "phone": "840-575-3538", - "email": "bailey@truegate.com" - }, - { - "id": 619, - "guid": "cd877b0b-3ad0-4b1f-b9eb-16b14ebf2b9b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Day", - "company": "US Infratouch", - "phone": "823-593-3963", - "email": "kaitlyn@us infratouch.com" - }, - { - "id": 620, - "guid": "32599503-92b6-4bdf-8c49-8e6e92c1a775", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Hodges", - "company": "Truetomic", - "phone": "864-407-2109", - "email": "abigail@truetomic.com" - }, - { - "id": 621, - "guid": "fa17401f-90e9-46ef-9af5-c1718967c12c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Carey", - "company": "Keytheon", - "phone": "845-590-2748", - "email": "rachel@keytheon.com" - }, - { - "id": 622, - "guid": "75471f9d-082d-4a51-9dce-e0b2317a0f40", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Goodman", - "company": "Ameritron", - "phone": "875-505-2456", - "email": "bailey@ameritron.com" - }, - { - "id": 623, - "guid": "7ffbe290-bc6c-4ed3-9507-ee9f87682961", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Serenity Gilbert", - "company": "Conrama", - "phone": "895-464-2925", - "email": "serenity@conrama.com" - }, - { - "id": 624, - "guid": "63e83b31-1c96-4b6e-9011-f3277f323fae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Molligan", - "company": "Idmax", - "phone": "842-467-3330", - "email": "khloe@idmax.com" - }, - { - "id": 625, - "guid": "38f97d80-4904-4ba1-8898-6be8ca547850", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Watson", - "company": "Robotomic", - "phone": "818-552-2102", - "email": "leah@robotomic.com" - }, - { - "id": 626, - "guid": "0ef5755c-5cd5-4f1f-93df-eb8d696ce240", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Davidson", - "company": "Titanigraf", - "phone": "812-555-3111", - "email": "alexis@titanigraf.com" - }, - { - "id": 627, - "guid": "dffd65d8-c351-422e-98ba-f9db54a7a7d8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Gardner", - "company": "Entcast", - "phone": "840-598-2100", - "email": "chloe@entcast.com" - }, - { - "id": 628, - "guid": "0e23bb23-9f97-49c7-a8fc-bfae5de4cba1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Faith Brickman", - "company": "Ventanium", - "phone": "867-457-2078", - "email": "faith@ventanium.com" - }, - { - "id": 629, - "guid": "aa1db425-33b6-44b5-bf15-b11c5604ea22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Abramson", - "company": "Teratopia", - "phone": "807-533-2367", - "email": "serenity@teratopia.com" - }, - { - "id": 630, - "guid": "8c4e5f66-c0cb-498b-af9a-1dce3dc95b2c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Nelson", - "company": "Inridium", - "phone": "825-581-2389", - "email": "mariah@inridium.com" - }, - { - "id": 631, - "guid": "ccd6e33a-b0b5-40e2-adfd-6708bf86746c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Hawkins", - "company": "Gigaura", - "phone": "887-533-3403", - "email": "gabrielle@gigaura.com" - }, - { - "id": 632, - "guid": "1897bcc5-b303-470e-bf1e-c219ed93f10e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Day", - "company": "Westmedia", - "phone": "850-524-2072", - "email": "serenity@westmedia.com" - }, - { - "id": 633, - "guid": "643b83f6-dcdd-4797-a44c-0d5ec6399486", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Wallace", - "company": "Teratopia", - "phone": "832-437-2927", - "email": "kimberly@teratopia.com" - }, - { - "id": 634, - "guid": "50af0e7f-85c6-4783-81c6-e7fa5c036cde", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Croftoon", - "company": "Mescatron", - "phone": "855-600-2174", - "email": "anna@mescatron.com" - }, - { - "id": 635, - "guid": "7df1b6fe-9748-4959-af21-2c91b6e5d925", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Milton", - "company": "Raylog", - "phone": "846-581-3593", - "email": "genesis@raylog.com" - }, - { - "id": 636, - "guid": "45103dc2-6094-4170-902a-6008ff0a90e7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Vance", - "company": "US Infratouch", - "phone": "821-413-2633", - "email": "mariah@us infratouch.com" - }, - { - "id": 637, - "guid": "34b5fccf-8c9f-4f86-9e52-46579342d1b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Vance", - "company": "Interliant", - "phone": "820-474-3719", - "email": "ashley@interliant.com" - }, - { - "id": 638, - "guid": "a14c63b4-a8a9-4ed4-a75f-8a557525a3b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Hoggarth", - "company": "Airdyne", - "phone": "879-599-2865", - "email": "lauren@airdyne.com" - }, - { - "id": 639, - "guid": "a6149635-b605-4c84-8979-c1d1bb6e2aa9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Thornton", - "company": "Inridium", - "phone": "801-596-3964", - "email": "taylor@inridium.com" - }, - { - "id": 640, - "guid": "e25ec264-88ad-4506-9760-835de9187c97", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Croftoon", - "company": "Generola", - "phone": "829-422-2255", - "email": "kaylee@generola.com" - }, - { - "id": 641, - "guid": "825ca8a3-9934-4eef-a1bb-e4c71f6d4b56", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Neal", - "company": "Cryptotegrity", - "phone": "852-428-3443", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 642, - "guid": "9e9e67bb-72bc-41c2-85cb-3f47f22d0cee", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Croftoon", - "company": "Westtomik", - "phone": "839-458-3717", - "email": "riley@westtomik.com" - }, - { - "id": 643, - "guid": "04fcc29c-c689-4c57-8763-d910027f3560", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Thomson", - "company": "Openserve", - "phone": "887-508-2320", - "email": "anna@openserve.com" - }, - { - "id": 644, - "guid": "44d35532-d15f-415b-82d4-bb8785ad4bd0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Natalie Freeman", - "company": "eSteganoergy", - "phone": "882-528-2474", - "email": "natalie@esteganoergy.com" - }, - { - "id": 645, - "guid": "628487c4-907e-4151-8c7a-88dedf142694", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Charlson", - "company": "Orthomedia", - "phone": "841-502-3945", - "email": "rachel@orthomedia.com" - }, - { - "id": 646, - "guid": "8e48ba23-034a-49cc-80d4-5095bdce1288", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Brickman", - "company": "Transtouch", - "phone": "891-473-3401", - "email": "julia@transtouch.com" - }, - { - "id": 647, - "guid": "42a9a944-3f5d-4e62-bdd0-993d63a55b8e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Abramson", - "company": "Aprama", - "phone": "888-499-3704", - "email": "emma@aprama.com" - }, - { - "id": 648, - "guid": "2ac384b1-5b2e-4676-b374-b8e42ee4818b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Fulton", - "company": "Superscope", - "phone": "850-414-2672", - "email": "nevaeh@superscope.com" - }, - { - "id": 649, - "guid": "fff102a9-1f91-4b87-9408-84d184405fd8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Gerald", - "company": "Videobanc", - "phone": "860-406-2090", - "email": "alyssa@videobanc.com" - }, - { - "id": 650, - "guid": "5cc6aa70-2d1e-4e39-8662-2b088b5b888a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Riley Campbell", - "company": "Netsystems", - "phone": "836-495-3715", - "email": "riley@netsystems.com" - }, - { - "id": 651, - "guid": "666d2759-3647-4afc-b05f-090fce0f11fe", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Hawkins", - "company": "Westmedia", - "phone": "887-596-2701", - "email": "hailey@westmedia.com" - }, - { - "id": 652, - "guid": "317a63ed-49de-447b-8676-493a0dc66f5b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Payton Oldridge", - "company": "Openserve", - "phone": "824-543-2730", - "email": "payton@openserve.com" - }, - { - "id": 653, - "guid": "ddf5ab00-cbbd-42ab-b9aa-9c467f4338cf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Michaelson", - "company": "Mescatron", - "phone": "868-410-3571", - "email": "jasmine@mescatron.com" - }, - { - "id": 654, - "guid": "964a3b68-e515-486a-b107-90dfb0b81553", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Taylor Gilson", - "company": "Aluco", - "phone": "851-411-2943", - "email": "taylor@aluco.com" - }, - { - "id": 655, - "guid": "b5eed914-8d96-492b-84f8-d94e3359ac45", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Andrea Day", - "company": "Unconix", - "phone": "831-546-3304", - "email": "andrea@unconix.com" - }, - { - "id": 656, - "guid": "b5862b95-1ba7-42e3-819d-70bd2b754973", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Waller", - "company": "Generola", - "phone": "822-456-2945", - "email": "mariah@generola.com" - }, - { - "id": 657, - "guid": "e127511c-8801-4b31-81c4-adb8623ab395", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabriella Carter", - "company": "Qualserve", - "phone": "830-573-2563", - "email": "gabriella@qualserve.com" - }, - { - "id": 658, - "guid": "8b435a1d-8d7b-44fb-94dc-b16674e3500a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Gilbert", - "company": "Infragraph", - "phone": "820-487-3757", - "email": "lillian@infragraph.com" - }, - { - "id": 659, - "guid": "8b1468fa-3f0f-42fa-afb9-73c3f194ddcc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Hamphrey", - "company": "US Infratouch", - "phone": "836-453-3619", - "email": "zoe@us infratouch.com" - }, - { - "id": 660, - "guid": "698acf68-ca7c-4f02-8015-6c118b698fe1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Walkman", - "company": "Safetrust", - "phone": "878-475-3167", - "email": "caroline@safetrust.com" - }, - { - "id": 661, - "guid": "1bcd8387-8ae4-477a-a7bc-aed81e92ce9f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Abramson", - "company": "Infraique", - "phone": "809-468-2626", - "email": "hannah@infraique.com" - }, - { - "id": 662, - "guid": "e9e49f16-2664-435a-a027-644ffb976876", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Morrison", - "company": "Titanirola", - "phone": "890-446-3527", - "email": "chloe@titanirola.com" - }, - { - "id": 663, - "guid": "b5c3324a-2c85-4b1c-8cc9-9a02c445cc1d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Nash", - "company": "Unologic", - "phone": "875-549-2248", - "email": "emma@unologic.com" - }, - { - "id": 664, - "guid": "ee002996-a8f0-4264-ac7c-7b619cb006dd", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Vaughan", - "company": "Inridium", - "phone": "802-468-2395", - "email": "katelyn@inridium.com" - }, - { - "id": 665, - "guid": "ce91bcad-6b5d-468a-a1bc-a540d4460d15", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Vaughan", - "company": "Anagraph", - "phone": "874-462-2718", - "email": "andrea@anagraph.com" - }, - { - "id": 666, - "guid": "6b598745-9c75-4718-90d0-147bd2afd7f6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Osborne", - "company": "Infragraph", - "phone": "879-529-2525", - "email": "anna@infragraph.com" - }, - { - "id": 667, - "guid": "c8e3e3db-9401-4cbf-86e5-5882e90efde8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Davidson", - "company": "Celgra", - "phone": "810-526-3097", - "email": "zoey@celgra.com" - }, - { - "id": 668, - "guid": "2734c399-72f8-45ea-a7dd-2dc17c80c19e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Thornton", - "company": "Entcast", - "phone": "823-454-2921", - "email": "alexa@entcast.com" - }, - { - "id": 669, - "guid": "bbbd9fc1-e5d5-4ec9-b770-36a7d7b06976", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Mercer", - "company": "Jamconik", - "phone": "831-453-2990", - "email": "lillian@jamconik.com" - }, - { - "id": 670, - "guid": "d3a0c565-a298-4b38-a18a-10fd38859adb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Hawkins", - "company": "Netseco", - "phone": "833-470-3174", - "email": "jessica@netseco.com" - }, - { - "id": 671, - "guid": "d57d65ff-5109-42af-a3c3-d60b209946cb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Gerald", - "company": "Quintegrity", - "phone": "882-590-2081", - "email": "layla@quintegrity.com" - }, - { - "id": 672, - "guid": "cd9f9848-b8b2-4038-8ade-34bb9d7e07f2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva White", - "company": "Fibrotopia", - "phone": "885-403-2968", - "email": "eva@fibrotopia.com" - }, - { - "id": 673, - "guid": "3949f475-aa58-48cf-82d6-f4932feb118a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jocelyn Turner", - "company": "Idmax", - "phone": "896-402-3134", - "email": "jocelyn@idmax.com" - }, - { - "id": 674, - "guid": "e743b9a4-05d6-4840-9655-18a0166bc212", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Carter", - "company": "eEyetanic", - "phone": "848-439-2904", - "email": "camila@eeyetanic.com" - }, - { - "id": 675, - "guid": "0319a35f-4170-4240-bd2e-219f3e5d057a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Brown", - "company": "Genland", - "phone": "872-504-2213", - "email": "ashley@genland.com" - }, - { - "id": 676, - "guid": "f9400ee0-8ecd-4ade-91ba-201207038346", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Goodman", - "company": "Polytheon", - "phone": "895-518-2434", - "email": "nevaeh@polytheon.com" - }, - { - "id": 677, - "guid": "7a4c4027-6ba7-4172-9891-ab4a4fb22d0e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Youmans", - "company": "US Omnigraphik", - "phone": "816-454-2227", - "email": "aubrey@us omnigraphik.com" - }, - { - "id": 678, - "guid": "40091a6b-c3b5-4201-a4ad-1fc1c44fe623", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Brooks", - "company": "Fibrotopia", - "phone": "899-455-3459", - "email": "rachel@fibrotopia.com" - }, - { - "id": 679, - "guid": "dbb57050-1a8a-407d-b243-04bfda730ba2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Stanley", - "company": "Robotemplate", - "phone": "844-594-3016", - "email": "paige@robotemplate.com" - }, - { - "id": 680, - "guid": "815e3b67-056a-4167-9445-4b525560fed8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Hodges", - "company": "Titanirola", - "phone": "819-560-3296", - "email": "madelyn@titanirola.com" - }, - { - "id": 681, - "guid": "d5c72a98-e58f-4d25-9708-5c3f5754d661", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Adamson", - "company": "iEnland", - "phone": "840-404-2701", - "email": "gabrielle@ienland.com" - }, - { - "id": 682, - "guid": "7dfb8f83-668b-405c-99b5-06c9a3f9cd8c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Gill", - "company": "Textiqua", - "phone": "871-426-2064", - "email": "valeria@textiqua.com" - }, - { - "id": 683, - "guid": "c0a501b9-e85f-4fcf-8f2d-6230040f4fb9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Bush", - "company": "Conotomics", - "phone": "836-569-3901", - "email": "katelyn@conotomics.com" - }, - { - "id": 684, - "guid": "e2b1249a-a439-463a-85bb-776ab64c6542", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Warren", - "company": "InfoAirway", - "phone": "894-553-3968", - "email": "evelyn@infoairway.com" - }, - { - "id": 685, - "guid": "eeed8131-75a6-4896-9e19-d539f55d999a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Stanley", - "company": "Mescaridic", - "phone": "848-543-2230", - "email": "caroline@mescaridic.com" - }, - { - "id": 686, - "guid": "fd1bb694-02f4-4d70-95d8-038b17eec21e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Oldman", - "company": "Raylog", - "phone": "814-442-2323", - "email": "khloe@raylog.com" - }, - { - "id": 687, - "guid": "87be4d4a-6065-47a2-8180-20cbcd6fceb1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe White", - "company": "Infragraph", - "phone": "855-585-3902", - "email": "khloe@infragraph.com" - }, - { - "id": 688, - "guid": "dd8429f9-b0aa-4783-a98d-5cd1e84045d2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ariana Higgins", - "company": "Pacwest", - "phone": "817-583-3337", - "email": "ariana@pacwest.com" - }, - { - "id": 689, - "guid": "1e8474fc-604b-43a1-9ca9-db27f620bd20", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Michaelson", - "company": "Truegate", - "phone": "839-494-2022", - "email": "gianna@truegate.com" - }, - { - "id": 690, - "guid": "6c4276cb-a260-49d6-86ad-e8d8305bc0b4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ella Calhoun", - "company": "Titanigraf", - "phone": "841-490-2639", - "email": "ella@titanigraf.com" - }, - { - "id": 691, - "guid": "27554640-0711-4c3e-b724-df04d1702863", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Creighton", - "company": "Teknoplexon", - "phone": "875-532-2484", - "email": "serenity@teknoplexon.com" - }, - { - "id": 692, - "guid": "00f4ec97-f011-4e5f-a357-c48fe4aada7a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Vance", - "company": "Fibroserve", - "phone": "866-514-3630", - "email": "brianna@fibroserve.com" - }, - { - "id": 693, - "guid": "e2b3e729-0e34-4441-bedb-ab18489ba97d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Gardner", - "company": "Polytheon", - "phone": "827-600-3958", - "email": "makayla@polytheon.com" - }, - { - "id": 694, - "guid": "a205fd38-429d-4067-bfb7-e7a18ab127a9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Michaelson", - "company": "Technogra", - "phone": "853-417-3478", - "email": "layla@technogra.com" - }, - { - "id": 695, - "guid": "99df96e6-1b84-42fe-934a-794de8283707", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Creighton", - "company": "Genland", - "phone": "884-474-2921", - "email": "lily@genland.com" - }, - { - "id": 696, - "guid": "e02201ba-d39b-42ba-bada-b94464a16ffb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Galbraith", - "company": "Netseco", - "phone": "812-522-2372", - "email": "chloe@netseco.com" - }, - { - "id": 697, - "guid": "d9e0636f-c510-495a-9aeb-fc0b3a35f855", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Nathan", - "company": "Netsystems", - "phone": "859-530-2387", - "email": "maya@netsystems.com" - }, - { - "id": 698, - "guid": "3e77a7b3-3e29-48ce-b21c-497638e2c690", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Stanley", - "company": "Jamrola", - "phone": "826-409-3376", - "email": "julia@jamrola.com" - }, - { - "id": 699, - "guid": "39c724b9-9a8e-4339-8d14-7ed657115852", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Chapman", - "company": "Nanobanc", - "phone": "800-462-2944", - "email": "eva@nanobanc.com" - }, - { - "id": 700, - "guid": "3872aa7e-1080-40b2-9134-2d8a217d938c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Clapton", - "company": "Conotomics", - "phone": "888-437-3398", - "email": "grace@conotomics.com" - }, - { - "id": 701, - "guid": "18aaef32-72ae-4523-b733-f95b83ff7a3c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Sheldon", - "company": "Anagraph", - "phone": "868-592-3072", - "email": "alexis@anagraph.com" - }, - { - "id": 702, - "guid": "85fd997b-1ba8-4875-81ac-2e68634cf6aa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Hailey", - "company": "Enlogia", - "phone": "828-520-2951", - "email": "sophia@enlogia.com" - }, - { - "id": 703, - "guid": "9d698e38-73e1-467a-93cd-a8b136eb7500", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Miln", - "company": "Inridium", - "phone": "871-420-3497", - "email": "jocelyn@inridium.com" - }, - { - "id": 704, - "guid": "cda0450e-16bb-4f9d-849b-4fe44eb12601", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Day", - "company": "Anagraph", - "phone": "831-493-2647", - "email": "kaylee@anagraph.com" - }, - { - "id": 705, - "guid": "db743d4c-9cef-4916-967e-fb5a7c363777", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Amelia Davidson", - "company": "iSkyvaco", - "phone": "809-514-3101", - "email": "amelia@iskyvaco.com" - }, - { - "id": 706, - "guid": "d6b2c0cb-fc97-42dc-ac48-6b03cdd95677", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Croftoon", - "company": "Robocomm", - "phone": "832-505-3934", - "email": "lauren@robocomm.com" - }, - { - "id": 707, - "guid": "2c746925-672e-4393-b95f-d6ba7a6682dd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Wallace", - "company": "Westtomik", - "phone": "854-426-2337", - "email": "brianna@westtomik.com" - }, - { - "id": 708, - "guid": "88780ef1-38b8-408a-9664-efb4da789e0c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Winter", - "company": "InfoAirway", - "phone": "810-481-3704", - "email": "sophie@infoairway.com" - }, - { - "id": 709, - "guid": "6ad8e5a3-4c45-45c1-8ca5-f3af8b0d73c8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Hoggarth", - "company": "iQualcar", - "phone": "824-516-2137", - "email": "anna@iqualcar.com" - }, - { - "id": 710, - "guid": "3092eafb-1f37-48e7-b4da-801e089c6140", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lillian Walkman", - "company": "Techtron", - "phone": "823-492-3943", - "email": "lillian@techtron.com" - }, - { - "id": 711, - "guid": "5657ef48-a7f4-4d65-bc2e-b368691e398e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Carroll", - "company": "SysVenamerica", - "phone": "808-493-2264", - "email": "julia@sysvenamerica.com" - }, - { - "id": 712, - "guid": "e2a6b7d7-b748-4ddd-84ba-b4d247b8ab5f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kayla Thornton", - "company": "SysVenamerica", - "phone": "853-474-3143", - "email": "kayla@sysvenamerica.com" - }, - { - "id": 713, - "guid": "7c118805-a4d6-4921-918e-e29154016cba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Oldridge", - "company": "Safeagra", - "phone": "880-513-3937", - "email": "gabrielle@safeagra.com" - }, - { - "id": 714, - "guid": "b30e9fd3-828d-4b8b-abb7-3007c81948b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Miln", - "company": "Netsystems", - "phone": "812-468-3023", - "email": "gianna@netsystems.com" - }, - { - "id": 715, - "guid": "9bccfe35-7ae3-4a28-abfc-0064ae9d87f2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Michaelson", - "company": "Ameritron", - "phone": "889-486-3962", - "email": "anna@ameritron.com" - }, - { - "id": 716, - "guid": "9c2b716c-ec1e-4dcb-8c12-795efcb4bf88", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Cramer", - "company": "Jamrola", - "phone": "867-544-3721", - "email": "maya@jamrola.com" - }, - { - "id": 717, - "guid": "be25a42d-0f63-48a6-b99d-d54cde8354a4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Brickman", - "company": "Syssoft", - "phone": "845-526-2210", - "email": "anna@syssoft.com" - }, - { - "id": 718, - "guid": "4cff5f91-0bcb-4a69-99a2-b07eb3d87c55", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Vance", - "company": "Anagraph", - "phone": "828-498-2563", - "email": "melanie@anagraph.com" - }, - { - "id": 719, - "guid": "8f6763f8-ad49-4709-a0cf-feb2b85e2468", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Miers", - "company": "Airdyne", - "phone": "820-425-3670", - "email": "gabriella@airdyne.com" - }, - { - "id": 720, - "guid": "fd445f24-c25b-4ebe-9b4d-f71112a65bc5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lily Young", - "company": "Openserve", - "phone": "896-521-2195", - "email": "lily@openserve.com" - }, - { - "id": 721, - "guid": "d6d5f4a8-dbe6-4a9d-ae63-8b5171aff4e4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Creighton", - "company": "Teraserv", - "phone": "880-522-3627", - "email": "gianna@teraserv.com" - }, - { - "id": 722, - "guid": "1d2d4f66-cfc8-4cf3-9352-ca03e35f0dda", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Wainwright", - "company": "Mescaridic", - "phone": "839-416-2249", - "email": "maya@mescaridic.com" - }, - { - "id": 723, - "guid": "1e35d282-9eff-4776-b807-7c0657d934d7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Carrington", - "company": "Techtron", - "phone": "883-437-3045", - "email": "chloe@techtron.com" - }, - { - "id": 724, - "guid": "9cf43e64-f16a-436c-b54d-b865c542b2c6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Clapton", - "company": "Anaframe", - "phone": "862-427-2535", - "email": "khloe@anaframe.com" - }, - { - "id": 725, - "guid": "a7577fe6-5ea8-42d1-a496-a5c02ea451af", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Caroline Sherlock", - "company": "Truegate", - "phone": "807-444-2858", - "email": "caroline@truegate.com" - }, - { - "id": 726, - "guid": "2948933c-b143-45f8-b588-43331bff1498", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Waller", - "company": "Aluco", - "phone": "818-600-2592", - "email": "brooklyn@aluco.com" - }, - { - "id": 727, - "guid": "ec13dee3-a9b5-4a3b-a907-07b2c542d084", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Day", - "company": "Inridium", - "phone": "852-589-2758", - "email": "katelyn@inridium.com" - }, - { - "id": 728, - "guid": "2970d0ad-73d1-45df-ab8b-dcf9cb9806d4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Vaughan", - "company": "Cryptotemplate", - "phone": "883-482-3144", - "email": "ella@cryptotemplate.com" - }, - { - "id": 729, - "guid": "a64e7628-f3fb-4159-a37e-91ab81d4b998", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Chapman", - "company": "Cryptotegrity", - "phone": "858-565-2979", - "email": "alyssa@cryptotegrity.com" - }, - { - "id": 730, - "guid": "bfcc3a20-e5bf-401a-9b45-29ce1302bce8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Freeman", - "company": "Truetomic", - "phone": "828-501-3431", - "email": "ella@truetomic.com" - }, - { - "id": 731, - "guid": "55070996-a3a5-4854-80d3-1a82421f7fab", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Fisher", - "company": "Netseco", - "phone": "825-548-2266", - "email": "jasmine@netseco.com" - }, - { - "id": 732, - "guid": "1a70f76b-2ec4-4a33-af07-e2a0b7b0b84d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Hoggarth", - "company": "Entcast", - "phone": "828-600-2645", - "email": "katherine@entcast.com" - }, - { - "id": 733, - "guid": "b0551293-4b8a-471a-b622-d502ba870149", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Carrington", - "company": "Teraserv", - "phone": "895-481-3396", - "email": "jocelyn@teraserv.com" - }, - { - "id": 734, - "guid": "6b8cf3a5-348d-494d-979f-1f575de567ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Fulton", - "company": "Teraserv", - "phone": "853-567-2666", - "email": "kaylee@teraserv.com" - }, - { - "id": 735, - "guid": "92f100da-bdf0-492d-86b1-d1783c8007a7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Brooks", - "company": "Teratopia", - "phone": "814-509-2005", - "email": "riley@teratopia.com" - }, - { - "id": 736, - "guid": "3550737d-a850-4efb-ac78-831be81c32b9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Otis", - "company": "Raylog", - "phone": "836-529-2475", - "email": "alexa@raylog.com" - }, - { - "id": 737, - "guid": "5feea123-b83c-4897-a65c-b41e36c0523a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Hodges", - "company": "Teraserv", - "phone": "894-424-2757", - "email": "sarah@teraserv.com" - }, - { - "id": 738, - "guid": "d674fadb-abfa-449a-b60e-fcb9ba93f5d3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Morrison", - "company": "InfoAirway", - "phone": "857-408-2795", - "email": "rachel@infoairway.com" - }, - { - "id": 739, - "guid": "5260d69c-97b9-4de8-890c-b30b4de8821f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maria Nash", - "company": "SysVenamerica", - "phone": "807-468-2640", - "email": "maria@sysvenamerica.com" - }, - { - "id": 740, - "guid": "f95111ca-e639-4123-ade6-b8b436f686fd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Murphy", - "company": "Aprama", - "phone": "875-499-3107", - "email": "kaitlyn@aprama.com" - }, - { - "id": 741, - "guid": "cb3ec47d-ad55-42a9-9e6b-7234da095438", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mackenzie Molligan", - "company": "Rapigrafix", - "phone": "866-411-3804", - "email": "mackenzie@rapigrafix.com" - }, - { - "id": 742, - "guid": "ced6b774-f3c7-4848-bf0f-7fd791e4c6f2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Otis", - "company": "Conrama", - "phone": "893-549-2008", - "email": "alexis@conrama.com" - }, - { - "id": 743, - "guid": "52835423-7e76-4559-9ca0-3799f3127886", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Gustman", - "company": "Qualserve", - "phone": "830-501-2398", - "email": "madelyn@qualserve.com" - }, - { - "id": 744, - "guid": "c3b3c149-3c18-4852-a22e-235266f70f10", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ava Clapton", - "company": "Netsystems", - "phone": "871-448-2664", - "email": "ava@netsystems.com" - }, - { - "id": 745, - "guid": "c8a5dc2a-7dfb-425b-9179-c147f9d6f955", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Croftoon", - "company": "Qualserve", - "phone": "825-512-2238", - "email": "charlotte@qualserve.com" - }, - { - "id": 746, - "guid": "5014697e-77bf-42be-8e92-3cd92023d994", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Sherlock", - "company": "Robotomic", - "phone": "835-453-3915", - "email": "ariana@robotomic.com" - }, - { - "id": 747, - "guid": "43a8fe55-b0f9-4b6c-8bbc-577a2c180662", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Bush", - "company": "Teraserv", - "phone": "816-541-3245", - "email": "natalie@teraserv.com" - }, - { - "id": 748, - "guid": "ae3364f5-3f61-4139-864c-23b4060f5521", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Vaughan", - "company": "Proline", - "phone": "820-433-3159", - "email": "lily@proline.com" - }, - { - "id": 749, - "guid": "f1442839-ffe0-450b-8f09-402aef49d1fa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Timmons", - "company": "US Omnigraphik", - "phone": "881-500-2287", - "email": "ava@us omnigraphik.com" - }, - { - "id": 750, - "guid": "ec95853c-d53b-4891-bf0c-61a68bd20d67", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Freeman", - "company": "Textiqua", - "phone": "887-525-2741", - "email": "sydney@textiqua.com" - }, - { - "id": 751, - "guid": "0b9f9882-8c1b-45ce-a679-899157853ef4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Grace Hailey", - "company": "Mescatron", - "phone": "849-431-3674", - "email": "grace@mescatron.com" - }, - { - "id": 752, - "guid": "ad35c12e-9c0a-463f-b911-b54386f8101a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Fulton", - "company": "Keytheon", - "phone": "830-459-3360", - "email": "brooke@keytheon.com" - }, - { - "id": 753, - "guid": "532dec7e-7fbf-4fd8-906d-15e32baa862d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Gilmore", - "company": "Teratopia", - "phone": "811-459-3177", - "email": "mariah@teratopia.com" - }, - { - "id": 754, - "guid": "7a28f3af-f9fd-4e56-89de-46bafeadc76e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Samantha Ward", - "company": "iOptystix", - "phone": "825-562-3446", - "email": "samantha@ioptystix.com" - }, - { - "id": 755, - "guid": "41f463ed-e71a-49b1-b532-8d9a10fbb4b5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Davidson", - "company": "Polytheon", - "phone": "855-530-2522", - "email": "lily@polytheon.com" - }, - { - "id": 756, - "guid": "9cb1c36e-f1d1-4df9-8b8f-68805aceed0f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Abramson", - "company": "Titanigraf", - "phone": "843-565-3661", - "email": "zoey@titanigraf.com" - }, - { - "id": 757, - "guid": "f40f2a89-5676-40fb-a7bb-b095b85b3388", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Oldman", - "company": "Conotomics", - "phone": "857-436-2685", - "email": "nevaeh@conotomics.com" - }, - { - "id": 758, - "guid": "a3e31e35-9b01-4f5a-b9e1-83859b1b7230", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Young", - "company": "Rapigrafix", - "phone": "868-413-3998", - "email": "arianna@rapigrafix.com" - }, - { - "id": 759, - "guid": "f208b0ec-7396-467a-bf6a-d34708486607", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lauren Charlson", - "company": "Interliant", - "phone": "806-575-3329", - "email": "lauren@interliant.com" - }, - { - "id": 760, - "guid": "af3e33e6-414d-4ec9-bb09-bc8ee69d3a78", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Miller", - "company": "Cryptotegrity", - "phone": "839-494-3920", - "email": "elizabeth@cryptotegrity.com" - }, - { - "id": 761, - "guid": "1f95ed27-feea-4955-9920-5c1375624bd6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Gibbs", - "company": "iQualcar", - "phone": "828-493-2018", - "email": "gabrielle@iqualcar.com" - }, - { - "id": 762, - "guid": "04368c42-aa29-47cc-b4ca-50922c98684d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Turner", - "company": "Polytheon", - "phone": "810-575-2775", - "email": "destiny@polytheon.com" - }, - { - "id": 763, - "guid": "0e989dd4-668e-4883-9287-9a87a2a6a935", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Higgins", - "company": "Multitiqua", - "phone": "840-435-3855", - "email": "kylie@multitiqua.com" - }, - { - "id": 764, - "guid": "61089ac8-cda4-4ce5-b065-ca74855148d6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Chapman", - "company": "Dynarama", - "phone": "826-529-3245", - "email": "destiny@dynarama.com" - }, - { - "id": 765, - "guid": "60288c79-6093-4f50-8dd9-a4b0f36ff92c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Allison Brooks", - "company": "Titanirola", - "phone": "885-566-3549", - "email": "allison@titanirola.com" - }, - { - "id": 766, - "guid": "0d198455-520c-4ac5-a595-70f13c415d90", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Taylor Wallace", - "company": "Inridium", - "phone": "871-447-2224", - "email": "taylor@inridium.com" - }, - { - "id": 767, - "guid": "6374d89b-1bf8-46f2-96f2-2f18e5efcede", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Thomson", - "company": "Skydata", - "phone": "877-474-2455", - "email": "kylie@skydata.com" - }, - { - "id": 768, - "guid": "76919033-5349-4dfe-8a36-0d25766f6523", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Gerald", - "company": "Anagraph", - "phone": "843-477-3054", - "email": "angelina@anagraph.com" - }, - { - "id": 769, - "guid": "dd77842b-f271-4a06-b543-0f87ab9cd747", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Murphy", - "company": "Pericenta", - "phone": "809-596-3393", - "email": "bailey@pericenta.com" - }, - { - "id": 770, - "guid": "a1573e13-9062-48b8-86a2-f3f8fd445318", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Gilson", - "company": "Proline", - "phone": "888-464-2738", - "email": "bella@proline.com" - }, - { - "id": 771, - "guid": "68d4ad23-8f86-4c5d-8dfa-dfec13fb281f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Hoggarth", - "company": "Navivacs", - "phone": "827-531-3088", - "email": "destiny@navivacs.com" - }, - { - "id": 772, - "guid": "f0edd6bb-75a3-405f-8554-e465ab22c0e6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Oldridge", - "company": "Videobanc", - "phone": "830-573-3259", - "email": "amelia@videobanc.com" - }, - { - "id": 773, - "guid": "5e4763ad-057d-4fa9-bc73-f9acf2a62c65", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Hailey", - "company": "Raylog", - "phone": "887-412-2778", - "email": "jocelyn@raylog.com" - }, - { - "id": 774, - "guid": "2a16dddb-7d2c-4211-88af-2507151c04c2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Chapman", - "company": "Truetomic", - "phone": "894-518-3068", - "email": "serenity@truetomic.com" - }, - { - "id": 775, - "guid": "5bddba5c-3592-4fde-8306-a0e61f6d7fbc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Wainwright", - "company": "Openserve", - "phone": "892-589-2996", - "email": "jocelyn@openserve.com" - }, - { - "id": 776, - "guid": "9c5b0bc1-1c93-4105-beae-4267cd311991", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Brooks", - "company": "Anaframe", - "phone": "894-514-3006", - "email": "maya@anaframe.com" - }, - { - "id": 777, - "guid": "33125d8f-1411-4377-baf9-5034bc200cf8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Audrey Michaelson", - "company": "Netseco", - "phone": "842-405-2160", - "email": "audrey@netseco.com" - }, - { - "id": 778, - "guid": "aa6fa8ed-db10-4a22-b3ab-4320b1b3f7ca", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Gustman", - "company": "Technogra", - "phone": "850-466-2528", - "email": "mya@technogra.com" - }, - { - "id": 779, - "guid": "2f90c71e-2c1d-4e2e-a54e-c06478736512", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Turner", - "company": "Raylog", - "phone": "816-475-3994", - "email": "grace@raylog.com" - }, - { - "id": 780, - "guid": "57d90ddb-b81b-43fe-aba7-1ebc524d3e20", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Gerald", - "company": "Unologic", - "phone": "841-419-3523", - "email": "khloe@unologic.com" - }, - { - "id": 781, - "guid": "d3bf856f-1867-49e1-a5f7-dc71a1955135", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabella Daniels", - "company": "Nanobanc", - "phone": "817-579-2608", - "email": "isabella@nanobanc.com" - }, - { - "id": 782, - "guid": "2762ccde-691c-4351-abfa-0a4994dd11c8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee White", - "company": "Aluco", - "phone": "817-558-2305", - "email": "kaylee@aluco.com" - }, - { - "id": 783, - "guid": "897da0f0-8be2-49cb-959f-49a59e9c67ca", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Gill", - "company": "Jamconik", - "phone": "866-404-3861", - "email": "hailey@jamconik.com" - }, - { - "id": 784, - "guid": "95a51fa6-675f-4d13-9914-2651ec6c83be", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Ogden", - "company": "Safeagra", - "phone": "884-493-2818", - "email": "emily@safeagra.com" - }, - { - "id": 785, - "guid": "50a490aa-eabe-4284-a61b-39c8bd1110e6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Crossman", - "company": "OpKeycomm", - "phone": "892-419-3039", - "email": "maria@opkeycomm.com" - }, - { - "id": 786, - "guid": "7f62065a-1f5c-4ec0-9b15-e685ca99779b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Haig", - "company": "Systheon", - "phone": "854-438-2500", - "email": "alexis@systheon.com" - }, - { - "id": 787, - "guid": "c3faeebf-1e94-4304-875b-ab3c60762fae", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Thornton", - "company": "Polytheon", - "phone": "884-407-3986", - "email": "olivia@polytheon.com" - }, - { - "id": 788, - "guid": "3dc457ad-c515-4ab8-955a-40eba7f35b3e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Peyton Murphy", - "company": "Idmax", - "phone": "810-441-2262", - "email": "peyton@idmax.com" - }, - { - "id": 789, - "guid": "f44358f9-a1f5-492e-9df0-8fc6696795c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Gill", - "company": "Netseco", - "phone": "853-578-2514", - "email": "gianna@netseco.com" - }, - { - "id": 790, - "guid": "dbfc8301-602c-414d-aa17-455906aa975d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Carrington", - "company": "iMedconik", - "phone": "895-535-2472", - "email": "makayla@imedconik.com" - }, - { - "id": 791, - "guid": "fbb4044e-50b0-4f57-8f70-768a15ec82b3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Galbraith", - "company": "Robocomm", - "phone": "807-559-2985", - "email": "hailey@robocomm.com" - }, - { - "id": 792, - "guid": "7bcbd66f-f063-47ab-9774-306b3f91e79d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Calhoun", - "company": "Safeagra", - "phone": "857-569-2295", - "email": "genesis@safeagra.com" - }, - { - "id": 793, - "guid": "2690c54c-a137-4401-8c34-e93ab2504eb8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Gilmore", - "company": "Pericenta", - "phone": "810-482-2047", - "email": "rachel@pericenta.com" - }, - { - "id": 794, - "guid": "71d6c355-d8fc-4ee6-aafd-3f8b8234b9b1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Owen", - "company": "iMedconik", - "phone": "867-500-3307", - "email": "chloe@imedconik.com" - }, - { - "id": 795, - "guid": "60ecc994-c15a-4282-8f62-e9daa3548f2a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Fulton", - "company": "Transtouch", - "phone": "822-591-3507", - "email": "leah@transtouch.com" - }, - { - "id": 796, - "guid": "549fca38-f151-4e41-9134-4f25b08e98a5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Wallace", - "company": "Allnet", - "phone": "862-594-3924", - "email": "anna@allnet.com" - }, - { - "id": 797, - "guid": "819dbc8e-df23-4eb3-8819-da3b39690b5c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabelle Gibbs", - "company": "Openserve", - "phone": "802-532-3484", - "email": "isabelle@openserve.com" - }, - { - "id": 798, - "guid": "7ff358d6-8f91-494d-a13b-a8853e5f451b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Gibbs", - "company": "Nanobanc", - "phone": "840-569-2383", - "email": "madeline@nanobanc.com" - }, - { - "id": 799, - "guid": "3ad3bdef-4c7d-4d02-b2f5-d7e1f5483344", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Brickman", - "company": "Teraserv", - "phone": "829-526-3191", - "email": "molly@teraserv.com" - }, - { - "id": 800, - "guid": "b435c50c-0d24-4c56-92c4-175586664780", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Chapman", - "company": "eSteganoergy", - "phone": "837-478-2272", - "email": "trinity@esteganoergy.com" - }, - { - "id": 801, - "guid": "d30c5bd1-ada2-453d-9e7f-e521c8d3c20a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Creighton", - "company": "Teknoplexon", - "phone": "806-418-3506", - "email": "taylor@teknoplexon.com" - }, - { - "id": 802, - "guid": "755a46e4-4c43-4d78-be7b-49316b1c7d23", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Bush", - "company": "Safetrust", - "phone": "837-578-3825", - "email": "julia@safetrust.com" - }, - { - "id": 803, - "guid": "27f38ed6-3321-43cd-94c0-8199b6168df1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Hawkins", - "company": "Ameritron", - "phone": "851-530-2912", - "email": "alexis@ameritron.com" - }, - { - "id": 804, - "guid": "cee10cc8-8bc1-4036-9fd1-bfdeb4819d6a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Oldman", - "company": "Skydata", - "phone": "845-465-2946", - "email": "destiny@skydata.com" - }, - { - "id": 805, - "guid": "7442f1d2-6608-4a79-bd8c-fb1055e15c43", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Morrison", - "company": "Tekcar", - "phone": "817-593-3129", - "email": "eva@tekcar.com" - }, - { - "id": 806, - "guid": "8be03cbf-86bf-4588-9b8e-6eabdd076e92", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Gibbs", - "company": "Systheon", - "phone": "848-554-2639", - "email": "olivia@systheon.com" - }, - { - "id": 807, - "guid": "47897170-cf30-45cd-ace8-32a9660ee03a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Daniels", - "company": "Anaframe", - "phone": "873-500-2556", - "email": "molly@anaframe.com" - }, - { - "id": 808, - "guid": "1d916600-b94f-4f54-8696-02d6eb3d9067", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Michaelson", - "company": "Westmedia", - "phone": "840-549-3360", - "email": "lily@westmedia.com" - }, - { - "id": 809, - "guid": "09c3593a-b33a-44c8-a725-f622938650b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Gerald", - "company": "Hypervaco", - "phone": "829-583-2682", - "email": "olivia@hypervaco.com" - }, - { - "id": 810, - "guid": "eacbfb2c-bf0b-48fb-ba20-8d17702ae97d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Watson", - "company": "Anagraph", - "phone": "834-404-2769", - "email": "kylie@anagraph.com" - }, - { - "id": 811, - "guid": "de02f6a7-6337-4b71-916c-4aec630abe41", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Galbraith", - "company": "RoboAerlogix", - "phone": "893-516-3438", - "email": "brooke@roboaerlogix.com" - }, - { - "id": 812, - "guid": "fa640ceb-cda1-44e8-b644-25a062571d4f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Carrington", - "company": "Superscope", - "phone": "838-510-3526", - "email": "maria@superscope.com" - }, - { - "id": 813, - "guid": "76c11f04-397a-47eb-b2dd-a0bfcbf66f58", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Oswald", - "company": "Videobanc", - "phone": "811-525-3394", - "email": "elizabeth@videobanc.com" - }, - { - "id": 814, - "guid": "7042be99-3db3-4449-84b5-94923d49be39", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Hailey", - "company": "SysUSA", - "phone": "859-562-3800", - "email": "julia@sysusa.com" - }, - { - "id": 815, - "guid": "a08489cc-27d1-4509-a379-fd675c2e31b7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Miller", - "company": "Infragraph", - "phone": "898-417-2130", - "email": "morgan@infragraph.com" - }, - { - "id": 816, - "guid": "610babcf-881f-4bf2-818d-61b358d089ae", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Fisher", - "company": "Turbomart", - "phone": "831-582-2873", - "email": "katelyn@turbomart.com" - }, - { - "id": 817, - "guid": "6ffef62d-ce32-4cef-8388-ffc2836706e2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Brooks", - "company": "Gigaura", - "phone": "831-576-3711", - "email": "angelina@gigaura.com" - }, - { - "id": 818, - "guid": "3edd09df-9374-4895-9584-362e6faeec60", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Carey", - "company": "Allphysiche", - "phone": "853-553-2065", - "email": "sophia@allphysiche.com" - }, - { - "id": 819, - "guid": "2fcf4b57-cd14-4486-ae1b-1fea84c70541", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maya Hardman", - "company": "Pericenta", - "phone": "872-529-2944", - "email": "maya@pericenta.com" - }, - { - "id": 820, - "guid": "cf114dc5-0400-4f90-9742-2f12f178a2f3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Sheldon", - "company": "RoboAerlogix", - "phone": "884-436-2144", - "email": "khloe@roboaerlogix.com" - }, - { - "id": 821, - "guid": "ca154651-6fbd-4ede-b22e-843ddcb1780f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Sheldon", - "company": "InfoAirway", - "phone": "871-502-3978", - "email": "bailey@infoairway.com" - }, - { - "id": 822, - "guid": "e820837d-83f3-4270-b5bf-3cadf3bf013c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Waller", - "company": "Systheon", - "phone": "883-418-3995", - "email": "kylie@systheon.com" - }, - { - "id": 823, - "guid": "561eea50-1757-40f5-9f42-bf128127d91b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Smith", - "company": "Superscope", - "phone": "802-491-3784", - "email": "jasmine@superscope.com" - }, - { - "id": 824, - "guid": "3d35fd9f-58b8-478f-9324-52b5624ce1b6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Daniels", - "company": "Generola", - "phone": "846-435-2130", - "email": "grace@generola.com" - }, - { - "id": 825, - "guid": "9384b966-c1c4-4b57-9dd4-755ec87fbb54", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Charlotte Hancock", - "company": "Westgate", - "phone": "870-409-2108", - "email": "charlotte@westgate.com" - }, - { - "id": 826, - "guid": "e379070c-d5e4-4e93-825e-93c1a985bcf1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoe Oliver", - "company": "Steganoconiche", - "phone": "858-552-2719", - "email": "zoe@steganoconiche.com" - }, - { - "id": 827, - "guid": "14a89c72-f311-42c0-a25e-90a004248fb1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Gill", - "company": "Pacwest", - "phone": "825-559-3697", - "email": "victoria@pacwest.com" - }, - { - "id": 828, - "guid": "0dd00bf6-77f3-4635-b4a3-8ed8486577aa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Brickman", - "company": "Westmedia", - "phone": "865-579-3079", - "email": "peyton@westmedia.com" - }, - { - "id": 829, - "guid": "9fe53a99-938f-4508-9687-1551562f1fc1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Rachel Gardner", - "company": "Fibrotouch", - "phone": "844-600-2204", - "email": "rachel@fibrotouch.com" - }, - { - "id": 830, - "guid": "c3c47e52-fd7d-4235-a05a-d3d5ceeae1ac", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Carey", - "company": "eSteganoergy", - "phone": "841-425-3463", - "email": "zoey@esteganoergy.com" - }, - { - "id": 831, - "guid": "11428d98-5063-447d-ba59-86b8da812d28", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Hamphrey", - "company": "Turbomart", - "phone": "811-423-2480", - "email": "ashley@turbomart.com" - }, - { - "id": 832, - "guid": "bcab6ca0-8ada-4e19-aa5c-8cc7964635fe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Thornton", - "company": "iOptystix", - "phone": "871-439-2838", - "email": "faith@ioptystix.com" - }, - { - "id": 833, - "guid": "40d578a1-8baf-41cd-a702-17bd7690894a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Gilbert", - "company": "Robotomic", - "phone": "822-564-3155", - "email": "isabella@robotomic.com" - }, - { - "id": 834, - "guid": "c12efdc4-8e45-4892-a2d6-664e02ec858f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Gill", - "company": "Netseco", - "phone": "851-407-3670", - "email": "serenity@netseco.com" - }, - { - "id": 835, - "guid": "9b060c1b-85b8-4361-a1b3-acd98be9221e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Clapton", - "company": "iMedconik", - "phone": "875-591-3373", - "email": "natalie@imedconik.com" - }, - { - "id": 836, - "guid": "a5aef930-52f1-460b-8ca8-7b09dbf16487", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Ogden", - "company": "Openserve", - "phone": "814-504-2747", - "email": "alexis@openserve.com" - }, - { - "id": 837, - "guid": "8d465584-7cc0-4ed8-b402-3b6e09b5e233", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Fulton", - "company": "Transtouch", - "phone": "875-528-2744", - "email": "emma@transtouch.com" - }, - { - "id": 838, - "guid": "d3f4aa49-5073-43e8-b5d0-67e67126fb9d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Hailey", - "company": "InfoAirway", - "phone": "832-413-2023", - "email": "ariana@infoairway.com" - }, - { - "id": 839, - "guid": "28a1f9ed-6789-4669-b9ff-9ee67ed87286", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Thorndike", - "company": "Westmedia", - "phone": "847-414-3615", - "email": "molly@westmedia.com" - }, - { - "id": 840, - "guid": "2d359c7d-b61f-49c6-b7d6-3d28b555a286", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Creighton", - "company": "Conotomics", - "phone": "815-506-3449", - "email": "paige@conotomics.com" - }, - { - "id": 841, - "guid": "c60802c5-ff31-466d-8d09-a65795c8dd8f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Sheldon", - "company": "Idmax", - "phone": "891-450-3397", - "email": "melanie@idmax.com" - }, - { - "id": 842, - "guid": "3820b423-049a-48ff-b969-6d572655087e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Youmans", - "company": "Jamconik", - "phone": "807-459-2905", - "email": "hailey@jamconik.com" - }, - { - "id": 843, - "guid": "dd7bfc3f-5200-4e31-b491-92ae14ece3b2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Hoggarth", - "company": "Robotemplate", - "phone": "814-425-2751", - "email": "maria@robotemplate.com" - }, - { - "id": 844, - "guid": "f05e24cb-bf64-4760-a003-725f1be95af4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Bush", - "company": "RoboAerlogix", - "phone": "898-456-2620", - "email": "evelyn@roboaerlogix.com" - }, - { - "id": 845, - "guid": "df0ab0b5-9004-4584-b6bb-465e6a8168c8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Autumn Gerald", - "company": "Cryptotegrity", - "phone": "854-432-2518", - "email": "autumn@cryptotegrity.com" - }, - { - "id": 846, - "guid": "7dae7688-d0c4-49d3-bb5b-13a310472753", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Conors", - "company": "Genland", - "phone": "879-523-2774", - "email": "autumn@genland.com" - }, - { - "id": 847, - "guid": "b3b7b362-7aad-4a61-9132-511fc46025b5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Carey", - "company": "Titanigraf", - "phone": "879-413-3051", - "email": "lillian@titanigraf.com" - }, - { - "id": 848, - "guid": "5b0de530-bb44-4e98-983b-41f8f5a5fb5f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Gibbs", - "company": "Superscope", - "phone": "853-527-3572", - "email": "sydney@superscope.com" - }, - { - "id": 849, - "guid": "752841d6-7870-4d27-8d1a-166134b6be2f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Carter", - "company": "Teraserv", - "phone": "863-577-2582", - "email": "jasmine@teraserv.com" - }, - { - "id": 850, - "guid": "e0da5799-e13e-4337-83b6-11073f41f211", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Otis", - "company": "Transtouch", - "phone": "801-537-2419", - "email": "mya@transtouch.com" - }, - { - "id": 851, - "guid": "fec68db4-8936-49fe-9e07-8c4f30643528", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Walkman", - "company": "Mescaridic", - "phone": "848-534-3928", - "email": "emma@mescaridic.com" - }, - { - "id": 852, - "guid": "a96043fc-ed6c-43d2-a628-e59533863799", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Youmans", - "company": "Inridium", - "phone": "816-468-3270", - "email": "vanessa@inridium.com" - }, - { - "id": 853, - "guid": "87a01eea-67df-4474-ae04-8974c4f4ea6d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Owen", - "company": "Keytheon", - "phone": "806-534-2355", - "email": "natalie@keytheon.com" - }, - { - "id": 854, - "guid": "23a818fc-db8e-4bf6-85b8-3fc536488ba0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Chandter", - "company": "Nanobanc", - "phone": "850-417-2431", - "email": "caroline@nanobanc.com" - }, - { - "id": 855, - "guid": "4e2d2934-799e-4671-9f9f-b2720334d2ff", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Brooks", - "company": "Proline", - "phone": "891-452-3847", - "email": "savannah@proline.com" - }, - { - "id": 856, - "guid": "a4d9d81d-e4b6-40a6-ba26-b3a75cb6cb82", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Wainwright", - "company": "Robocomm", - "phone": "813-446-2444", - "email": "ava@robocomm.com" - }, - { - "id": 857, - "guid": "5f3ab06c-bb38-4b37-8ff2-6f16cf3dd569", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Clapton", - "company": "Pericenta", - "phone": "802-403-2174", - "email": "evelyn@pericenta.com" - }, - { - "id": 858, - "guid": "3a7e3618-7b54-4b1d-b94a-f5e265163209", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Elizabeth Carter", - "company": "Sontopia", - "phone": "831-503-3946", - "email": "elizabeth@sontopia.com" - }, - { - "id": 859, - "guid": "fb780771-cca2-464d-bce1-0b01c2e74964", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Winter", - "company": "Skydata", - "phone": "819-461-3669", - "email": "olivia@skydata.com" - }, - { - "id": 860, - "guid": "7f16e74a-82f3-4cfa-af13-8a1bb431de36", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Hoggarth", - "company": "Teknoplexon", - "phone": "822-596-3540", - "email": "amelia@teknoplexon.com" - }, - { - "id": 861, - "guid": "98b66d8c-e04d-48df-86af-0b03f0e408da", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Nash", - "company": "Multitiqua", - "phone": "813-494-3183", - "email": "gabriella@multitiqua.com" - }, - { - "id": 862, - "guid": "b405aeac-7cc2-4231-83a7-043e1c8bacb2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Thornton", - "company": "Mescaridic", - "phone": "816-545-3824", - "email": "maria@mescaridic.com" - }, - { - "id": 863, - "guid": "27f1962a-d119-4628-95d8-50b5625d7a31", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Sherlock", - "company": "Ventanium", - "phone": "872-530-3137", - "email": "brooklyn@ventanium.com" - }, - { - "id": 864, - "guid": "7a697585-5358-4716-a52c-5429c504c97d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Haig", - "company": "Safeagra", - "phone": "823-583-2722", - "email": "evelyn@safeagra.com" - }, - { - "id": 865, - "guid": "beb01c32-7c9d-455d-b453-1af75cd2e221", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alyssa Oswald", - "company": "Dynarama", - "phone": "815-531-2545", - "email": "alyssa@dynarama.com" - }, - { - "id": 866, - "guid": "21af68dd-a7da-4b2e-8888-6db8477e7b15", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Gardner", - "company": "Keytheon", - "phone": "869-402-3429", - "email": "maya@keytheon.com" - }, - { - "id": 867, - "guid": "cdad4eab-f2c9-4862-b57c-e6902b1a594c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madison Miers", - "company": "Netseco", - "phone": "827-531-2105", - "email": "madison@netseco.com" - }, - { - "id": 868, - "guid": "438461ed-d246-49f0-845b-d1b5344c44ce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sofia Hardman", - "company": "Infragraph", - "phone": "835-576-2711", - "email": "sofia@infragraph.com" - }, - { - "id": 869, - "guid": "d2f40741-e0d1-484d-8a9a-03719bf14a0c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Oldman", - "company": "Gigaura", - "phone": "845-426-2966", - "email": "nevaeh@gigaura.com" - }, - { - "id": 870, - "guid": "bf7016a9-46fe-4b97-9e9c-e5170f8f782d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Ford", - "company": "Westtomik", - "phone": "862-470-2292", - "email": "destiny@westtomik.com" - }, - { - "id": 871, - "guid": "ace0c5da-bf27-41d0-97be-8f7967cf994c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Gilbert", - "company": "Polytheon", - "phone": "822-488-3030", - "email": "vanessa@polytheon.com" - }, - { - "id": 872, - "guid": "9678d299-0540-4153-87f4-839a33dd9d62", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Hawkins", - "company": "Allphysiche", - "phone": "828-515-2232", - "email": "kylie@allphysiche.com" - }, - { - "id": 873, - "guid": "17471b3a-c746-41b4-b523-c993773c1f29", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lillian Oliver", - "company": "Qualserve", - "phone": "868-560-3370", - "email": "lillian@qualserve.com" - }, - { - "id": 874, - "guid": "9e1a9647-05c3-4f0e-9f59-c02c285aedd8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Hawkins", - "company": "Raylog", - "phone": "830-521-2631", - "email": "bailey@raylog.com" - }, - { - "id": 875, - "guid": "e62d1235-e5f9-4d10-9dc0-639cc28cb54a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Nelson", - "company": "Techtron", - "phone": "807-541-2602", - "email": "sarah@techtron.com" - }, - { - "id": 876, - "guid": "8df05dbf-ab47-4ad6-8d0b-b25f3c33487f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Gilson", - "company": "Safetrust", - "phone": "864-586-3492", - "email": "katelyn@safetrust.com" - }, - { - "id": 877, - "guid": "e3b08fc9-3532-4e1f-885f-8f06570b0d9f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Cramer", - "company": "Netsystems", - "phone": "833-583-2640", - "email": "maya@netsystems.com" - }, - { - "id": 878, - "guid": "5c607cd6-d132-440f-aaf3-295379fda186", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Goldman", - "company": "Fibroserve", - "phone": "833-544-3866", - "email": "claire@fibroserve.com" - }, - { - "id": 879, - "guid": "4a41a9c2-4b23-499b-bbd5-2601f64f5ce7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Angelina Clapton", - "company": "Conrama", - "phone": "800-582-2572", - "email": "angelina@conrama.com" - }, - { - "id": 880, - "guid": "5274bc44-9a66-4758-b4fe-221dab188dce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Oldridge", - "company": "Openserve", - "phone": "869-433-3159", - "email": "kayla@openserve.com" - }, - { - "id": 881, - "guid": "c4e34070-ead9-4cfa-bbfa-5629fe291bd9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Owen", - "company": "Fibrotouch", - "phone": "822-585-2913", - "email": "charlotte@fibrotouch.com" - }, - { - "id": 882, - "guid": "51acc5e3-2cc0-49dc-ad3d-d2602288c48a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Thornton", - "company": "OpKeycomm", - "phone": "851-584-3939", - "email": "savannah@opkeycomm.com" - }, - { - "id": 883, - "guid": "891a6bf8-7985-4698-88e0-2e8118886644", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Freeman", - "company": "Compuamerica", - "phone": "878-422-2600", - "email": "grace@compuamerica.com" - }, - { - "id": 884, - "guid": "2274f232-3151-4337-b214-5f5c70ea700f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Webster", - "company": "Robotomic", - "phone": "839-509-2059", - "email": "emma@robotomic.com" - }, - { - "id": 885, - "guid": "c76b7100-536a-49ae-9fac-ec1fd082edb8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Gilmore", - "company": "Netsystems", - "phone": "885-486-3981", - "email": "aaliyah@netsystems.com" - }, - { - "id": 886, - "guid": "cc0135ee-2295-4d39-aa39-eb64afffda9f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Oswald", - "company": "Truegate", - "phone": "835-478-3561", - "email": "sophia@truegate.com" - }, - { - "id": 887, - "guid": "ac89678c-8d1e-4358-9530-e2dcf0fec45f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Carey", - "company": "Conotomics", - "phone": "820-488-2014", - "email": "elizabeth@conotomics.com" - }, - { - "id": 888, - "guid": "d03c139d-c12d-4bcf-9521-1487251fe6b8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Abramson", - "company": "Ameritron", - "phone": "863-547-3353", - "email": "alexis@ameritron.com" - }, - { - "id": 889, - "guid": "f80226c6-1a82-4895-bae4-ca2fccc4a70d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Wayne", - "company": "Hypervaco", - "phone": "874-598-3836", - "email": "katherine@hypervaco.com" - }, - { - "id": 890, - "guid": "858972a3-3182-4ba0-a9b7-d1f42ef9ffb5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooklyn Hodges", - "company": "Fibrotopia", - "phone": "814-413-3535", - "email": "brooklyn@fibrotopia.com" - }, - { - "id": 891, - "guid": "a14fbc6a-341d-48a4-a88a-5fd92849534e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jocelyn Hardman", - "company": "SysVenamerica", - "phone": "873-554-2225", - "email": "jocelyn@sysvenamerica.com" - }, - { - "id": 892, - "guid": "1b1992d6-b67d-492f-bf20-95a6c7a9a8f5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Watson", - "company": "Westmedia", - "phone": "889-543-2660", - "email": "morgan@westmedia.com" - }, - { - "id": 893, - "guid": "78aa78c5-7f0a-4a57-ac86-0f70dd91e89f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Oswald", - "company": "Safeagra", - "phone": "806-426-2108", - "email": "isabella@safeagra.com" - }, - { - "id": 894, - "guid": "ebc9ea4c-8dbd-46d4-8fa2-55f4990503e5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Gill", - "company": "Hypervaco", - "phone": "865-571-3792", - "email": "olivia@hypervaco.com" - }, - { - "id": 895, - "guid": "5d03caac-1b6d-4493-b2cf-1a33a08f6013", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Hancock", - "company": "Safetrust", - "phone": "888-482-2637", - "email": "alexis@safetrust.com" - }, - { - "id": 896, - "guid": "7af64709-f11c-49af-a24a-8dc0a10aebaa", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Calhoun", - "company": "Entcast", - "phone": "850-411-3075", - "email": "sophia@entcast.com" - }, - { - "id": 897, - "guid": "0993ae0e-30f8-4eac-af32-51196d96779f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Bush", - "company": "eSteganoergy", - "phone": "839-567-3595", - "email": "jasmine@esteganoergy.com" - }, - { - "id": 898, - "guid": "0baa27a5-30fd-4b7d-947e-597e18a1c88a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Campbell", - "company": "Dynarama", - "phone": "886-446-2962", - "email": "kimberly@dynarama.com" - }, - { - "id": 899, - "guid": "1633ae77-20d6-49a3-befd-2ca487ff93a3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Oliver", - "company": "Syssoft", - "phone": "825-420-3812", - "email": "isabelle@syssoft.com" - }, - { - "id": 900, - "guid": "a19964b2-408f-4a46-b70c-a2dc11aa4cec", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Cramer", - "company": "Safeagra", - "phone": "829-533-2626", - "email": "sydney@safeagra.com" - }, - { - "id": 901, - "guid": "149b9a3c-424b-4b61-8b15-2cb42ead9dab", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brianna Crossman", - "company": "Ameritron", - "phone": "814-512-2739", - "email": "brianna@ameritron.com" - }, - { - "id": 902, - "guid": "76a6747e-bce7-4e69-924f-ebd64b44e2be", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Wood", - "company": "Netsystems", - "phone": "837-565-2737", - "email": "leah@netsystems.com" - }, - { - "id": 903, - "guid": "e0fa974c-f76b-486c-9867-e313441ac50b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Gerald", - "company": "Dynarama", - "phone": "802-413-3739", - "email": "lauren@dynarama.com" - }, - { - "id": 904, - "guid": "61ea76a5-e7b2-4b12-98ed-c64f01040efa", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna WifKinson", - "company": "Navivacs", - "phone": "829-536-2350", - "email": "arianna@navivacs.com" - }, - { - "id": 905, - "guid": "88166843-bc9e-4283-b720-b0e9baf884a4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Harrison", - "company": "Techtron", - "phone": "848-595-3400", - "email": "mya@techtron.com" - }, - { - "id": 906, - "guid": "421a65dc-f831-4556-925a-5adac96e47f7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Brooks", - "company": "Inridium", - "phone": "876-600-3597", - "email": "katelyn@inridium.com" - }, - { - "id": 907, - "guid": "72ae195d-8583-428b-9bb8-1927c97b9ab5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Wood", - "company": "Conotomics", - "phone": "813-438-2628", - "email": "samantha@conotomics.com" - }, - { - "id": 908, - "guid": "e2bb0534-e013-4634-8c26-5b37d85b5e69", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Ogden", - "company": "Steganoconiche", - "phone": "815-404-3810", - "email": "avery@steganoconiche.com" - }, - { - "id": 909, - "guid": "4c42359a-fae5-4170-9785-f738928b1386", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Gilbert", - "company": "Skydata", - "phone": "861-511-3627", - "email": "brooklyn@skydata.com" - }, - { - "id": 910, - "guid": "5f4bc635-9aec-473d-bac5-a95d309cb70f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Oldman", - "company": "Videobanc", - "phone": "882-509-3996", - "email": "trinity@videobanc.com" - }, - { - "id": 911, - "guid": "62f141b5-0d44-454d-98e2-5308bd87b3ea", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Chapman", - "company": "Rapigrafix", - "phone": "889-504-2167", - "email": "olivia@rapigrafix.com" - }, - { - "id": 912, - "guid": "ce22ca08-4722-462e-9bb6-0b33042a4e3d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Chesterton", - "company": "iSkyvaco", - "phone": "815-532-3949", - "email": "serenity@iskyvaco.com" - }, - { - "id": 913, - "guid": "5d173fc5-25e1-4a4a-94d3-4175e9b2c787", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Young", - "company": "Nanobanc", - "phone": "821-502-3455", - "email": "gianna@nanobanc.com" - }, - { - "id": 914, - "guid": "77a709b1-f663-4be3-812d-877f683bcdf3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Gustman", - "company": "Mescatron", - "phone": "849-499-2278", - "email": "allison@mescatron.com" - }, - { - "id": 915, - "guid": "c08f0c28-2e0f-464c-9c09-e7d68f610c79", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Youmans", - "company": "Celgra", - "phone": "895-483-3706", - "email": "serenity@celgra.com" - }, - { - "id": 916, - "guid": "d1dbe1e2-891d-4694-ad68-9cdc54aedf25", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Campbell", - "company": "Unologic", - "phone": "890-523-2343", - "email": "katherine@unologic.com" - }, - { - "id": 917, - "guid": "073198ce-edcd-4700-ac6e-5404c11e265a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Youmans", - "company": "Sontopia", - "phone": "807-519-3570", - "email": "rachel@sontopia.com" - }, - { - "id": 918, - "guid": "184149f6-8ff3-45ce-ab14-a4361a6525d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabrielle Smith", - "company": "Unconix", - "phone": "801-583-3565", - "email": "gabrielle@unconix.com" - }, - { - "id": 919, - "guid": "1481192a-8d93-4401-8f73-de172abd1268", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Hailey", - "company": "eEyetanic", - "phone": "857-578-3384", - "email": "emma@eeyetanic.com" - }, - { - "id": 920, - "guid": "2fb8ac52-a51f-40b1-befc-2d668e802f3e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Allison Mercer", - "company": "eEyetanic", - "phone": "837-466-3639", - "email": "allison@eeyetanic.com" - }, - { - "id": 921, - "guid": "4a2c8d0c-9793-45f2-823a-5e5f2cacdf3f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Cook", - "company": "Genland", - "phone": "816-531-2283", - "email": "isabelle@genland.com" - }, - { - "id": 922, - "guid": "7d89a53c-1dbb-4bc9-9af7-1fbe04c62991", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Mercer", - "company": "Infraique", - "phone": "803-431-3539", - "email": "khloe@infraique.com" - }, - { - "id": 923, - "guid": "1464b00c-4917-4922-8bf5-af9e8d5c73e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Creighton", - "company": "Aprama", - "phone": "817-476-2723", - "email": "khloe@aprama.com" - }, - { - "id": 924, - "guid": "cf151f98-2580-4ad2-a8c0-fda2b9395a98", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Hodges", - "company": "Robotomic", - "phone": "868-487-2006", - "email": "sophia@robotomic.com" - }, - { - "id": 925, - "guid": "4f7f0789-16b8-4268-a32f-34dcc8b4fe2c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Carey", - "company": "Steganoconiche", - "phone": "847-575-3766", - "email": "audrey@steganoconiche.com" - }, - { - "id": 926, - "guid": "d99a327f-6c62-41b0-b961-75728f028341", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Gardner", - "company": "Conrama", - "phone": "810-414-2494", - "email": "taylor@conrama.com" - }, - { - "id": 927, - "guid": "bcbbe2a2-e2ee-44e0-8b25-214a9f92189b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Youmans", - "company": "Safeagra", - "phone": "872-400-3564", - "email": "autumn@safeagra.com" - }, - { - "id": 928, - "guid": "b439aaee-3050-4aa1-be89-a99bfdf43653", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie WifKinson", - "company": "Syssoft", - "phone": "881-446-3341", - "email": "melanie@syssoft.com" - }, - { - "id": 929, - "guid": "52f3aaa2-7d6c-4848-a6bd-39fd313c7953", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Oldridge", - "company": "Teraserv", - "phone": "858-544-3350", - "email": "elizabeth@teraserv.com" - }, - { - "id": 930, - "guid": "f1d2c7a1-1728-4e06-84f3-420d5b3f88c3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Sherlock", - "company": "Tekcar", - "phone": "843-561-3284", - "email": "emily@tekcar.com" - }, - { - "id": 931, - "guid": "c49e3d34-6e59-4968-b86b-ac3ba8f16f63", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Freeman", - "company": "Technogra", - "phone": "863-563-2375", - "email": "rachel@technogra.com" - }, - { - "id": 932, - "guid": "ae9c7fdc-d643-4959-9080-16cbcadd94a8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Timmons", - "company": "Raylog", - "phone": "845-522-2393", - "email": "kaylee@raylog.com" - }, - { - "id": 933, - "guid": "22c9ca28-3897-4972-9302-f0a90b555bf6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Clapton", - "company": "Rapigrafix", - "phone": "853-418-2125", - "email": "brooke@rapigrafix.com" - }, - { - "id": 934, - "guid": "0b499fc4-4568-43ef-89e0-a63df37e2a1f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Melanie Thomson", - "company": "Qualserve", - "phone": "850-487-2135", - "email": "melanie@qualserve.com" - }, - { - "id": 935, - "guid": "346cec2b-1fd4-46cc-a413-d999de360590", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Hodges", - "company": "Skydata", - "phone": "821-530-3613", - "email": "avery@skydata.com" - }, - { - "id": 936, - "guid": "519ee15e-8e2f-4892-807e-6cea6fe94319", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Nathan", - "company": "Allnet", - "phone": "854-546-3754", - "email": "autumn@allnet.com" - }, - { - "id": 937, - "guid": "b1579676-22dd-41b0-a6ec-7b0c24c1b6fc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Conors", - "company": "Mescaridic", - "phone": "872-488-3001", - "email": "bella@mescaridic.com" - }, - { - "id": 938, - "guid": "bbc0dc42-17a0-4dfb-9564-ee1ae23e95b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Otis", - "company": "Titanigraf", - "phone": "845-403-3384", - "email": "serenity@titanigraf.com" - }, - { - "id": 939, - "guid": "054c916f-1bec-4c39-aa5c-d92f8248a8ea", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Hamphrey", - "company": "Technogra", - "phone": "848-517-2396", - "email": "molly@technogra.com" - }, - { - "id": 940, - "guid": "e4f4f375-eafa-49cb-aa18-f6f4d9e54f5a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Webster", - "company": "Dynarama", - "phone": "841-490-3028", - "email": "maya@dynarama.com" - }, - { - "id": 941, - "guid": "055734c4-7bb7-4f1b-ab92-72bfdd695873", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Neal", - "company": "Turbomart", - "phone": "833-476-3564", - "email": "chloe@turbomart.com" - }, - { - "id": 942, - "guid": "08adb34b-7063-4854-992b-a04b9540ff99", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Eva Abramson", - "company": "Jamrola", - "phone": "843-444-2259", - "email": "eva@jamrola.com" - }, - { - "id": 943, - "guid": "2248f5b3-a14c-4923-a725-a09c14574515", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Hamphrey", - "company": "Teratopia", - "phone": "831-584-2648", - "email": "hannah@teratopia.com" - }, - { - "id": 944, - "guid": "db8d68cd-b859-4f12-a3ce-feaabdc63c3b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Wainwright", - "company": "Nanobanc", - "phone": "811-555-2035", - "email": "sarah@nanobanc.com" - }, - { - "id": 945, - "guid": "4b4bc01d-0980-4521-9d9f-d4d4f39ae8df", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabriella Wesley", - "company": "Orthomedia", - "phone": "845-448-2797", - "email": "gabriella@orthomedia.com" - }, - { - "id": 946, - "guid": "d29f66ba-fc64-4781-b31f-dd46fbb416b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Faith Higgins", - "company": "Pacwest", - "phone": "826-414-2399", - "email": "faith@pacwest.com" - }, - { - "id": 947, - "guid": "96361af3-993b-44a1-b3ec-6761a66df66c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Michaelson", - "company": "Syssoft", - "phone": "889-407-2246", - "email": "emily@syssoft.com" - }, - { - "id": 948, - "guid": "b7c5d293-99a6-49f8-842f-41ab26c752e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Winter", - "company": "Skydata", - "phone": "878-529-2208", - "email": "anna@skydata.com" - }, - { - "id": 949, - "guid": "d56976c3-e857-4bf7-96e4-9452a97a68fa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Sheldon", - "company": "Tekcar", - "phone": "870-402-2385", - "email": "hailey@tekcar.com" - }, - { - "id": 950, - "guid": "d5f37a04-ac8a-44d6-8a18-33ef4363bedb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Harrison", - "company": "Allnet", - "phone": "804-401-2618", - "email": "sarah@allnet.com" - }, - { - "id": 951, - "guid": "8d9a7ab3-2a27-4829-bd43-d3b0976628c9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Oldman", - "company": "Tekcar", - "phone": "892-541-3100", - "email": "serenity@tekcar.com" - }, - { - "id": 952, - "guid": "893d4b9c-5071-4c03-a3a8-68176c689358", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Smith", - "company": "RoboAerlogix", - "phone": "864-493-2232", - "email": "mya@roboaerlogix.com" - }, - { - "id": 953, - "guid": "9d84f8a4-2c16-4252-848a-71107528e4f4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Oldman", - "company": "iSkyvaco", - "phone": "866-537-2504", - "email": "payton@iskyvaco.com" - }, - { - "id": 954, - "guid": "727c4ef7-e232-4f59-aae4-d4f56a329e6b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Crossman", - "company": "Titanirola", - "phone": "806-480-3310", - "email": "natalie@titanirola.com" - }, - { - "id": 955, - "guid": "faae03d2-c29e-4291-ba51-5f00674d7fa0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Calhoun", - "company": "Genland", - "phone": "837-542-2720", - "email": "eva@genland.com" - }, - { - "id": 956, - "guid": "4719871f-8383-4764-8a33-de128069a221", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Oldman", - "company": "Videobanc", - "phone": "827-471-3334", - "email": "andrea@videobanc.com" - }, - { - "id": 957, - "guid": "c64763da-fcb9-4724-b6d7-06e52eb15153", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Vaughan", - "company": "Transtouch", - "phone": "838-408-3787", - "email": "autumn@transtouch.com" - }, - { - "id": 958, - "guid": "ddf8525a-fcc7-42b5-8ab6-3e3c94cb557f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Adamson", - "company": "Robotemplate", - "phone": "896-553-2689", - "email": "eva@robotemplate.com" - }, - { - "id": 959, - "guid": "6cf51a4e-a566-45f9-9a43-04bb92b35fc1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mariah Webster", - "company": "Inridium", - "phone": "848-431-2822", - "email": "mariah@inridium.com" - }, - { - "id": 960, - "guid": "e11d4e32-ef44-453b-b1d8-c40731523390", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Brooks", - "company": "Ameritron", - "phone": "870-548-3244", - "email": "caroline@ameritron.com" - }, - { - "id": 961, - "guid": "c9d13cf1-d3a0-4fe3-9b3b-bab88d702a45", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexandra Wesley", - "company": "RoboAerlogix", - "phone": "881-529-2764", - "email": "alexandra@roboaerlogix.com" - }, - { - "id": 962, - "guid": "5dfb3943-3694-432f-84a1-2b9ae14b2e14", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Gilson", - "company": "Openserve", - "phone": "887-459-3159", - "email": "isabella@openserve.com" - }, - { - "id": 963, - "guid": "0a48fde1-be68-49db-89d6-f57d8a8febe8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Nathan", - "company": "Polytheon", - "phone": "844-555-3928", - "email": "destiny@polytheon.com" - }, - { - "id": 964, - "guid": "39d6ca84-08a3-4def-946e-8f4a08c9354a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooke Oldman", - "company": "Venconix", - "phone": "852-553-3988", - "email": "brooke@venconix.com" - }, - { - "id": 965, - "guid": "8c3b2304-b47a-49cb-82cf-acb478490b09", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Harrison", - "company": "Sontopia", - "phone": "817-447-2271", - "email": "lily@sontopia.com" - }, - { - "id": 966, - "guid": "d612fbda-5a16-4ef7-b1cc-b62589df2bcc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Day", - "company": "iSkyvaco", - "phone": "860-545-3499", - "email": "brooke@iskyvaco.com" - }, - { - "id": 967, - "guid": "b83194f4-51ed-4da7-81dc-85fc3d4efab3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Miln", - "company": "Techtron", - "phone": "894-575-2515", - "email": "ella@techtron.com" - }, - { - "id": 968, - "guid": "94eac91a-e010-4884-ba6e-d9061bfacba7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Chesterton", - "company": "Robotomic", - "phone": "895-526-3321", - "email": "eva@robotomic.com" - }, - { - "id": 969, - "guid": "84b0927e-8590-42ec-b9a2-56c89edab7d3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Mercer", - "company": "Cryptotegrity", - "phone": "836-421-2536", - "email": "arianna@cryptotegrity.com" - }, - { - "id": 970, - "guid": "b9583517-2606-4df1-8bd5-beb0ab4f874a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Wesley", - "company": "Allnet", - "phone": "851-401-3849", - "email": "payton@allnet.com" - }, - { - "id": 971, - "guid": "98e49297-69f4-43b6-b9c8-fa5f32dbfc4c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Watson", - "company": "Raylog", - "phone": "808-445-2858", - "email": "layla@raylog.com" - }, - { - "id": 972, - "guid": "4652cc56-6ed3-4476-8fce-24fb2ff5b9be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Miln", - "company": "Conrama", - "phone": "878-522-2526", - "email": "natalie@conrama.com" - }, - { - "id": 973, - "guid": "310aa092-c848-45ea-ad22-50dd4efc36bf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Molly Gerald", - "company": "Vencom", - "phone": "886-453-3139", - "email": "molly@vencom.com" - }, - { - "id": 974, - "guid": "ac2bb01e-8b90-4571-a672-088aac98d849", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Goldman", - "company": "eEyetanic", - "phone": "847-455-3619", - "email": "madelyn@eeyetanic.com" - }, - { - "id": 975, - "guid": "e6e410ad-f8ab-4992-b7eb-0e9ef73d98c5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Amelia Wainwright", - "company": "Systheon", - "phone": "845-529-3762", - "email": "amelia@systheon.com" - }, - { - "id": 976, - "guid": "bcbfab4b-4f09-4ec9-ac4f-f4bfe3a1a3b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Owen", - "company": "iSkyvaco", - "phone": "813-442-2519", - "email": "eva@iskyvaco.com" - }, - { - "id": 977, - "guid": "324d088f-eb7b-4134-ab05-f8d186c8658d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Gilmore", - "company": "Nanobanc", - "phone": "896-485-3683", - "email": "katelyn@nanobanc.com" - }, - { - "id": 978, - "guid": "5871b38b-f7a4-487a-a2cd-96e0feb372c9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ella Galbraith", - "company": "iSkyvaco", - "phone": "888-540-2187", - "email": "ella@iskyvaco.com" - }, - { - "id": 979, - "guid": "fc731bcc-91f8-464d-bfac-148e235fa241", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Miln", - "company": "US Infratouch", - "phone": "816-536-3528", - "email": "ella@us infratouch.com" - }, - { - "id": 980, - "guid": "6e049b47-d080-4eba-b214-154ec52a5522", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Fisher", - "company": "Fibrotouch", - "phone": "830-587-3656", - "email": "brooklyn@fibrotouch.com" - }, - { - "id": 981, - "guid": "a857fd62-f56b-4273-8705-04911b2b3179", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Oswald", - "company": "Titanirola", - "phone": "896-441-2819", - "email": "zoey@titanirola.com" - }, - { - "id": 982, - "guid": "77eae683-5582-47d1-8ec0-fce80cab45b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Michaelson", - "company": "Videobanc", - "phone": "814-483-2961", - "email": "aaliyah@videobanc.com" - }, - { - "id": 983, - "guid": "a1165f08-35c1-47d1-ae96-ee46ca74d56a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Freeman", - "company": "RoboAerlogix", - "phone": "815-585-2737", - "email": "taylor@roboaerlogix.com" - }, - { - "id": 984, - "guid": "4d6f54e9-2bd6-448f-aabf-719a3da5f2ba", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Watson", - "company": "Westmedia", - "phone": "899-517-3599", - "email": "ava@westmedia.com" - }, - { - "id": 985, - "guid": "2b167e81-b3d7-4528-9296-a124bd1a825a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Osborne", - "company": "Pericenta", - "phone": "826-549-3657", - "email": "makayla@pericenta.com" - }, - { - "id": 986, - "guid": "1a463433-4a51-4dea-9366-70970d717c3c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Carey", - "company": "Superscope", - "phone": "846-446-2918", - "email": "mariah@superscope.com" - }, - { - "id": 987, - "guid": "07804def-94cb-4e87-9215-eb0156a0dd2d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Haig", - "company": "Keytheon", - "phone": "817-562-3338", - "email": "bella@keytheon.com" - }, - { - "id": 988, - "guid": "e6e6fa98-25d9-4191-a10b-75ec0bb53798", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Brickman", - "company": "Xeicon", - "phone": "813-541-3096", - "email": "alexa@xeicon.com" - }, - { - "id": 989, - "guid": "bde12fc6-f1cb-41c3-90cc-5c5f3ae99c8b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Galbraith", - "company": "Netsystems", - "phone": "812-583-2811", - "email": "katelyn@netsystems.com" - }, - { - "id": 990, - "guid": "a3bfecc3-e8d5-4212-8c97-cc9d44601c26", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Ward", - "company": "Airdyne", - "phone": "832-576-3421", - "email": "addison@airdyne.com" - }, - { - "id": 991, - "guid": "62e56270-9ff3-46a5-b0cf-b4d112d8302f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jasmine Hardman", - "company": "Turbomart", - "phone": "866-577-2348", - "email": "jasmine@turbomart.com" - }, - { - "id": 992, - "guid": "9e157044-28a5-4667-a3c3-f41216598b56", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Cook", - "company": "Tekcar", - "phone": "810-547-2973", - "email": "hannah@tekcar.com" - }, - { - "id": 993, - "guid": "226248a0-e502-433c-ab0d-5b63643e748d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Neal", - "company": "Titanigraf", - "phone": "856-480-3621", - "email": "katherine@titanigraf.com" - }, - { - "id": 994, - "guid": "24d6fb0d-7f54-4f49-9492-7227ac111c01", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Watson", - "company": "Polytheon", - "phone": "844-443-2924", - "email": "mya@polytheon.com" - }, - { - "id": 995, - "guid": "0fea3362-ef3f-45f8-99f2-613576c2c7e0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Vance", - "company": "Tekcar", - "phone": "882-448-2169", - "email": "jocelyn@tekcar.com" - }, - { - "id": 996, - "guid": "52e4e241-e8dd-4146-8f2e-513cc3239a22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Chesterton", - "company": "Jamrola", - "phone": "884-429-2640", - "email": "taylor@jamrola.com" - }, - { - "id": 997, - "guid": "e34a4c6f-3932-464b-be05-88aff3ba069b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alyssa Ford", - "company": "Westmedia", - "phone": "850-466-2410", - "email": "alyssa@westmedia.com" - }, - { - "id": 998, - "guid": "a26e0848-1785-4486-938f-68d5d0eb9d9b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Miers", - "company": "US Omnigraphik", - "phone": "878-531-2705", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 999, - "guid": "cc8c99c5-51fd-48be-a305-c67b54c4f86b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Wayne", - "company": "Openserve", - "phone": "882-600-2888", - "email": "kaitlyn@openserve.com" - }, - { - "id": 1000, - "guid": "90f9908f-2990-4037-8df5-32323a290b8b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Charlson", - "company": "Ventanium", - "phone": "832-428-3898", - "email": "sarah@ventanium.com" - }, - { - "id": 1001, - "guid": "cf18d88f-945e-4b85-87f0-80b4e6f3d6e6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jocelyn Calhoun", - "company": "InfoAirway", - "phone": "870-544-2165", - "email": "jocelyn@infoairway.com" - }, - { - "id": 1002, - "guid": "8b84a745-a220-4b4d-a54a-2d141a0f5a9e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Watson", - "company": "Vencom", - "phone": "886-544-3808", - "email": "paige@vencom.com" - }, - { - "id": 1003, - "guid": "f53e86ab-3efa-4335-ac06-445931e78055", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Hamphrey", - "company": "Keytheon", - "phone": "827-442-2717", - "email": "arianna@keytheon.com" - }, - { - "id": 1004, - "guid": "7606b209-4e08-4a52-a21d-90bb250871ae", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Goldman", - "company": "Sontopia", - "phone": "875-414-2900", - "email": "gabrielle@sontopia.com" - }, - { - "id": 1005, - "guid": "d9f512bf-753e-40a9-b136-b370f2419d98", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Brown", - "company": "Enlogia", - "phone": "851-578-3062", - "email": "isabella@enlogia.com" - }, - { - "id": 1006, - "guid": "1d9aa654-0f44-406c-8fef-eae5fa27c0a8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Samantha Hardman", - "company": "Westtomik", - "phone": "838-550-3248", - "email": "samantha@westtomik.com" - }, - { - "id": 1007, - "guid": "cfcacc9e-660e-450e-8198-d8e03d8cd5de", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Angelina Vance", - "company": "Venconix", - "phone": "846-501-2337", - "email": "angelina@venconix.com" - }, - { - "id": 1008, - "guid": "c04dff1b-a020-40e2-9c2a-c9615db97678", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Sheldon", - "company": "Unconix", - "phone": "813-455-2369", - "email": "arianna@unconix.com" - }, - { - "id": 1009, - "guid": "4395748e-8b20-4b4f-9d47-bffd2ff8209a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Caroline Freeman", - "company": "Hypervaco", - "phone": "862-556-3234", - "email": "caroline@hypervaco.com" - }, - { - "id": 1010, - "guid": "0a790b51-a502-41bd-a969-8b82453295f9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Freeman", - "company": "iQualcar", - "phone": "802-500-2818", - "email": "kaitlyn@iqualcar.com" - }, - { - "id": 1011, - "guid": "435b901a-d82f-45d2-ab4d-54bf5c473883", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Gustman", - "company": "Thermotomic", - "phone": "861-526-2797", - "email": "melanie@thermotomic.com" - }, - { - "id": 1012, - "guid": "d6ea8433-2007-47a6-9dc8-47932639edcf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Natalie Warren", - "company": "Superscope", - "phone": "858-515-3845", - "email": "natalie@superscope.com" - }, - { - "id": 1013, - "guid": "63be25a4-6f02-42e9-a4a9-14c2f3775877", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Smith", - "company": "Qualserve", - "phone": "829-562-3989", - "email": "avery@qualserve.com" - }, - { - "id": 1014, - "guid": "6f2bb65c-fd1a-4ed7-9975-7df04696f5a7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Miln", - "company": "Technogra", - "phone": "875-534-2084", - "email": "molly@technogra.com" - }, - { - "id": 1015, - "guid": "4254402e-2fc8-4653-8f71-e3e9dfda4282", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Campbell", - "company": "Openserve", - "phone": "894-488-2998", - "email": "camila@openserve.com" - }, - { - "id": 1016, - "guid": "1c2a4adf-b860-46e4-b850-2faa30d9eb70", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Melanie Hoggarth", - "company": "Fibrotouch", - "phone": "851-501-3226", - "email": "melanie@fibrotouch.com" - }, - { - "id": 1017, - "guid": "1c2c50f0-02fe-4c06-b402-bfb6df7fc3c8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Warren", - "company": "Dynarama", - "phone": "801-449-2149", - "email": "grace@dynarama.com" - }, - { - "id": 1018, - "guid": "602c9514-57db-4b46-ad31-23c78a420354", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Waller", - "company": "Rapigrafix", - "phone": "847-449-2659", - "email": "madelyn@rapigrafix.com" - }, - { - "id": 1019, - "guid": "f553e113-da6f-4aa6-9076-9b02828aa6f5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Oswald", - "company": "Titanigraf", - "phone": "880-590-2234", - "email": "kaylee@titanigraf.com" - }, - { - "id": 1020, - "guid": "729780b4-d055-4a2f-b35a-af7cbd29e8bc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Young", - "company": "Ameritron", - "phone": "829-503-2525", - "email": "ariana@ameritron.com" - }, - { - "id": 1021, - "guid": "85d516a3-f75a-4667-8892-cbc7ff2413aa", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Rachel Carroll", - "company": "Steganoconiche", - "phone": "890-495-2026", - "email": "rachel@steganoconiche.com" - }, - { - "id": 1022, - "guid": "93653c28-1366-40e0-b8b9-6fd455a04ed4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Cramer", - "company": "Fibroserve", - "phone": "874-461-2763", - "email": "chloe@fibroserve.com" - }, - { - "id": 1023, - "guid": "d195df6e-5552-45fd-8158-22d4586c413b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Cramer", - "company": "Cryptotemplate", - "phone": "835-596-3939", - "email": "bella@cryptotemplate.com" - }, - { - "id": 1024, - "guid": "9c82e2b3-1ea8-45ca-a102-ac5de511a6d4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Timmons", - "company": "Netsystems", - "phone": "815-591-2594", - "email": "claire@netsystems.com" - }, - { - "id": 1025, - "guid": "a630b389-2f50-4f00-ba69-ccc60ac07d70", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Daniels", - "company": "Airdyne", - "phone": "857-450-3356", - "email": "savannah@airdyne.com" - }, - { - "id": 1026, - "guid": "dc80ddd4-2e97-4382-a4e9-72e8f9e06000", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Owen", - "company": "Transtouch", - "phone": "893-557-3064", - "email": "katherine@transtouch.com" - }, - { - "id": 1027, - "guid": "885b1237-1516-4ade-974c-af9156843b36", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoe Chapman", - "company": "Inridium", - "phone": "802-503-3573", - "email": "zoe@inridium.com" - }, - { - "id": 1028, - "guid": "583ef78e-5f4d-4ace-b954-467b432d7f42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Watson", - "company": "iQualcar", - "phone": "827-543-2904", - "email": "taylor@iqualcar.com" - }, - { - "id": 1029, - "guid": "ddfe7cfe-1bf9-41a6-8606-4c9e58566219", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney White", - "company": "Raylog", - "phone": "892-524-2130", - "email": "sydney@raylog.com" - }, - { - "id": 1030, - "guid": "abea1162-635c-417e-8cc1-d02ed04cc6af", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Nelson", - "company": "Qualserve", - "phone": "822-428-2931", - "email": "jessica@qualserve.com" - }, - { - "id": 1031, - "guid": "a4b4faff-bad5-4fae-b2fb-5de283aa71f5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Molligan", - "company": "Netsystems", - "phone": "862-430-3470", - "email": "khloe@netsystems.com" - }, - { - "id": 1032, - "guid": "f3521ac2-bac5-4601-a757-196d1fc60393", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Waller", - "company": "Enlogia", - "phone": "864-496-3074", - "email": "ava@enlogia.com" - }, - { - "id": 1033, - "guid": "e4f305aa-eb0f-4e1e-bb55-617ffab58099", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Cramer", - "company": "Truetomic", - "phone": "856-448-3836", - "email": "ashley@truetomic.com" - }, - { - "id": 1034, - "guid": "d4c6e9c5-e02b-46a5-aae1-c524381edd5c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Carter", - "company": "Fibrotouch", - "phone": "825-405-3457", - "email": "mariah@fibrotouch.com" - }, - { - "id": 1035, - "guid": "ae3ce486-de59-4d0b-8f72-b1125bee0e2f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Gilson", - "company": "Airdyne", - "phone": "885-412-2364", - "email": "riley@airdyne.com" - }, - { - "id": 1036, - "guid": "475967a1-baad-40b1-bec4-c81e356c12e5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Wainwright", - "company": "US Omnigraphik", - "phone": "836-453-3748", - "email": "katherine@us omnigraphik.com" - }, - { - "id": 1037, - "guid": "21d498ed-1f8a-457b-aedb-b6bf6f078ec9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Hodges", - "company": "Xeicon", - "phone": "823-510-3385", - "email": "destiny@xeicon.com" - }, - { - "id": 1038, - "guid": "cf3d9023-757a-4408-93f0-4a3c0afb965c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Carrington", - "company": "Gigaura", - "phone": "884-456-3990", - "email": "anna@gigaura.com" - }, - { - "id": 1039, - "guid": "12387a3a-9697-42a8-9ff6-d1872f99b89d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Goodman", - "company": "Proline", - "phone": "810-449-2647", - "email": "angelina@proline.com" - }, - { - "id": 1040, - "guid": "7094833c-2624-4453-b45b-eefcc8ac3267", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Brickman", - "company": "Techtron", - "phone": "889-583-2960", - "email": "arianna@techtron.com" - }, - { - "id": 1041, - "guid": "eeb6f3ea-bbb7-4de8-8fa0-ddd4bdf3d664", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Chapman", - "company": "Titanirola", - "phone": "820-569-3121", - "email": "eva@titanirola.com" - }, - { - "id": 1042, - "guid": "725af95c-3d07-4c2d-9551-3a3163c377f0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Nelson", - "company": "Rapigrafix", - "phone": "859-505-3611", - "email": "andrea@rapigrafix.com" - }, - { - "id": 1043, - "guid": "3dca203a-6fda-40a9-8ba0-11d721746305", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Higgins", - "company": "Ameritron", - "phone": "884-443-3611", - "email": "ella@ameritron.com" - }, - { - "id": 1044, - "guid": "6b8b5b7d-8b8a-4799-9e2f-676c07534fe7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Neal", - "company": "eSteganoergy", - "phone": "894-499-3747", - "email": "caroline@esteganoergy.com" - }, - { - "id": 1045, - "guid": "afee5e4a-c41b-44e2-9a4c-405edd0c510b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Harrison", - "company": "Mescaridic", - "phone": "867-455-2187", - "email": "jasmine@mescaridic.com" - }, - { - "id": 1046, - "guid": "da22441b-024c-4619-817e-67d7e046e27d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Hamphrey", - "company": "Aluco", - "phone": "873-599-3479", - "email": "genesis@aluco.com" - }, - { - "id": 1047, - "guid": "a561197c-f474-449a-a51c-e1bc628082bd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Charlotte Brooks", - "company": "Westmedia", - "phone": "848-447-3000", - "email": "charlotte@westmedia.com" - }, - { - "id": 1048, - "guid": "de2eb7c5-7e18-4edf-87f9-f5081eb0eab9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Galbraith", - "company": "RoboAerlogix", - "phone": "811-439-3943", - "email": "ava@roboaerlogix.com" - }, - { - "id": 1049, - "guid": "f90adbca-c34c-44b2-af90-81f1e7cb4813", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Webster", - "company": "Mescaridic", - "phone": "887-423-3091", - "email": "caroline@mescaridic.com" - }, - { - "id": 1050, - "guid": "a2953a4e-c34c-4ded-9186-1f8773141763", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alyssa Vance", - "company": "Truegate", - "phone": "822-516-3577", - "email": "alyssa@truegate.com" - }, - { - "id": 1051, - "guid": "c1bd2d6e-d935-4499-8ea8-48a828ff3748", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Miln", - "company": "Gigaura", - "phone": "882-406-2967", - "email": "sophia@gigaura.com" - }, - { - "id": 1052, - "guid": "f70a06fe-d8bb-4a52-a4fd-a7551adc2681", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Hodges", - "company": "Allnet", - "phone": "802-526-2649", - "email": "brooklyn@allnet.com" - }, - { - "id": 1053, - "guid": "fc81cdec-f9e5-49ac-a78f-dacf0cb157af", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Galbraith", - "company": "eSteganoergy", - "phone": "841-525-3014", - "email": "alexa@esteganoergy.com" - }, - { - "id": 1054, - "guid": "c62ba905-27b7-42be-af69-a360693fbd7a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Paige Neal", - "company": "eSteganoergy", - "phone": "848-445-2507", - "email": "paige@esteganoergy.com" - }, - { - "id": 1055, - "guid": "ad9981d9-8f39-47a1-865b-e8d325f1368b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Hailey", - "company": "Genland", - "phone": "895-557-2879", - "email": "kaylee@genland.com" - }, - { - "id": 1056, - "guid": "4304e89c-cb3d-44e4-8c6d-234b8aa6de41", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Thorndike", - "company": "Teraserv", - "phone": "808-463-3524", - "email": "taylor@teraserv.com" - }, - { - "id": 1057, - "guid": "5926703e-7347-45ff-85a1-040a15a2c12c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Gilson", - "company": "Systheon", - "phone": "823-584-2444", - "email": "paige@systheon.com" - }, - { - "id": 1058, - "guid": "5eca478f-328a-486d-88c3-58b3a74414f1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Calhoun", - "company": "SysUSA", - "phone": "853-519-2524", - "email": "mackenzie@sysusa.com" - }, - { - "id": 1059, - "guid": "1a57b013-57f2-451c-aa65-38780ab7ef05", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Gibbs", - "company": "eSteganoergy", - "phone": "823-498-2790", - "email": "bella@esteganoergy.com" - }, - { - "id": 1060, - "guid": "ca1e5dd0-b61f-41a3-aaa1-b159e01196d5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Paige Clapton", - "company": "Xeicon", - "phone": "823-444-3331", - "email": "paige@xeicon.com" - }, - { - "id": 1061, - "guid": "c2b3eaa8-0260-4362-9386-fdebd59e03f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Gardner", - "company": "Netseco", - "phone": "874-471-2124", - "email": "julia@netseco.com" - }, - { - "id": 1062, - "guid": "9f97d255-f902-4ab6-9b85-af33808e8728", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Vaughan", - "company": "OpKeycomm", - "phone": "846-436-3490", - "email": "andrea@opkeycomm.com" - }, - { - "id": 1063, - "guid": "94e1e595-a5ea-407f-beeb-7c4da3a7bb9f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Walkman", - "company": "Aprama", - "phone": "878-459-3121", - "email": "samantha@aprama.com" - }, - { - "id": 1064, - "guid": "0cd97dd1-22cc-4fff-93a6-747021f6b6a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Angelina Walkman", - "company": "iMedconik", - "phone": "824-528-2503", - "email": "angelina@imedconik.com" - }, - { - "id": 1065, - "guid": "e65a70ac-c37e-4168-93a1-bdf65f590d26", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Miln", - "company": "RoboAerlogix", - "phone": "829-413-2182", - "email": "trinity@roboaerlogix.com" - }, - { - "id": 1066, - "guid": "bc3831da-2eb0-4213-9e42-56f43c62a0db", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Cook", - "company": "Aluco", - "phone": "854-400-3129", - "email": "sophie@aluco.com" - }, - { - "id": 1067, - "guid": "fd65edf8-18f7-41c3-85a2-2a614eadb133", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Chandter", - "company": "Mescatron", - "phone": "877-411-2507", - "email": "hailey@mescatron.com" - }, - { - "id": 1068, - "guid": "c6a7cccf-ff60-46f4-9be0-d0b8fe8a96f9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Conors", - "company": "Superscope", - "phone": "813-532-2956", - "email": "julia@superscope.com" - }, - { - "id": 1069, - "guid": "7ff3bb69-85bd-4557-8946-439c2a12f476", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Carter", - "company": "Aprama", - "phone": "801-425-2109", - "email": "valeria@aprama.com" - }, - { - "id": 1070, - "guid": "e0b29462-6d79-4ea1-bb0a-d0bec0d710ca", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Fisher", - "company": "Conrama", - "phone": "863-521-2911", - "email": "natalie@conrama.com" - }, - { - "id": 1071, - "guid": "45da4941-f9ba-4a49-a8da-75e678e837e5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Young", - "company": "Aprama", - "phone": "861-442-2290", - "email": "leah@aprama.com" - }, - { - "id": 1072, - "guid": "6fb7d179-479d-474c-8d53-ee8fe0892efe", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Fisher", - "company": "Steganoconiche", - "phone": "855-505-3399", - "email": "jocelyn@steganoconiche.com" - }, - { - "id": 1073, - "guid": "c6127ee5-8f75-479d-ad98-e250a7e2f7bc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Ogden", - "company": "Qualserve", - "phone": "847-540-3327", - "email": "madeline@qualserve.com" - }, - { - "id": 1074, - "guid": "12bc265f-29f1-4f78-88df-1319ecd20567", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Hardman", - "company": "Textiqua", - "phone": "888-528-2036", - "email": "brianna@textiqua.com" - }, - { - "id": 1075, - "guid": "9a82a9c7-33e2-435c-b28e-215f2e1004fb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Otis", - "company": "Openserve", - "phone": "875-592-2703", - "email": "kylie@openserve.com" - }, - { - "id": 1076, - "guid": "ffff553c-8e39-4677-96b1-569230754f90", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Thornton", - "company": "Ameritron", - "phone": "873-422-2632", - "email": "gabrielle@ameritron.com" - }, - { - "id": 1077, - "guid": "529cc2d0-ef2a-49e5-acfd-ab6a4e47fd30", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Goodman", - "company": "Jamconik", - "phone": "858-591-3800", - "email": "maria@jamconik.com" - }, - { - "id": 1078, - "guid": "65be58f0-9b07-4bc1-ac47-f340673aedf7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Walkman", - "company": "Proline", - "phone": "889-596-2454", - "email": "aaliyah@proline.com" - }, - { - "id": 1079, - "guid": "a825f130-9041-4189-bc25-be4c841b2191", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Charlson", - "company": "US Omnigraphik", - "phone": "875-447-3760", - "email": "nevaeh@us omnigraphik.com" - }, - { - "id": 1080, - "guid": "32ad25fa-45a4-41e7-becd-764550b61aed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Gilson", - "company": "Orthosoft", - "phone": "853-435-3943", - "email": "savannah@orthosoft.com" - }, - { - "id": 1081, - "guid": "9457a8e8-9c97-4e32-a4e7-3f89e2bfedd0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Davidson", - "company": "Westgate", - "phone": "800-559-3642", - "email": "vanessa@westgate.com" - }, - { - "id": 1082, - "guid": "87ba0759-5a45-4efe-b565-8d9810886832", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Young", - "company": "Teratopia", - "phone": "804-494-3664", - "email": "abigail@teratopia.com" - }, - { - "id": 1083, - "guid": "4172d1cc-93c1-44a2-9ec9-0b318d9e9d84", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Wayne", - "company": "SysVenamerica", - "phone": "875-497-3726", - "email": "bella@sysvenamerica.com" - }, - { - "id": 1084, - "guid": "723d93ab-10e4-40b4-9383-939ae1f09ef3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Camila Miln", - "company": "Generola", - "phone": "826-556-2431", - "email": "camila@generola.com" - }, - { - "id": 1085, - "guid": "357aaca0-6070-4e7f-b85e-602953973f1a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Haig", - "company": "SysVenamerica", - "phone": "885-542-2689", - "email": "addison@sysvenamerica.com" - }, - { - "id": 1086, - "guid": "8b75ab58-09a5-48c4-9de8-558be689f361", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Mercer", - "company": "Titanirola", - "phone": "828-413-2079", - "email": "layla@titanirola.com" - }, - { - "id": 1087, - "guid": "883bcaeb-1799-4bf2-8d75-794c4ca99050", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Davidson", - "company": "Steganoconiche", - "phone": "843-449-3673", - "email": "serenity@steganoconiche.com" - }, - { - "id": 1088, - "guid": "85cffe95-9db3-4f69-858a-0c39457042aa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Hardman", - "company": "SysUSA", - "phone": "893-439-2766", - "email": "madelyn@sysusa.com" - }, - { - "id": 1089, - "guid": "d4fde199-e5f2-46d6-aa70-adbb3bd84b8f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Hailey", - "company": "Unologic", - "phone": "830-568-2662", - "email": "rachel@unologic.com" - }, - { - "id": 1090, - "guid": "19edb23c-b11d-4a10-b7ab-6cdc581ab93b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Freeman", - "company": "Truegate", - "phone": "817-411-3379", - "email": "bella@truegate.com" - }, - { - "id": 1091, - "guid": "8c6ec4a8-c458-4b25-afe5-5952830f181b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Natalie Creighton", - "company": "Westtomik", - "phone": "801-583-3901", - "email": "natalie@westtomik.com" - }, - { - "id": 1092, - "guid": "a21a1cdd-a2d5-42a3-95f3-996d002d9c1d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Fulton", - "company": "Idmax", - "phone": "855-587-2641", - "email": "serenity@idmax.com" - }, - { - "id": 1093, - "guid": "f93f03ae-3be9-45b9-b01c-3751d774ddf8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Waller", - "company": "Multitiqua", - "phone": "892-571-3839", - "email": "abigail@multitiqua.com" - }, - { - "id": 1094, - "guid": "90f984ed-2ccd-48fe-974c-7f0ac909bdd9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Goldman", - "company": "Fibrotopia", - "phone": "833-452-2869", - "email": "anna@fibrotopia.com" - }, - { - "id": 1095, - "guid": "e3fa5bfb-29c2-4c94-be9f-f306b6382b06", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Chapman", - "company": "Techtron", - "phone": "882-433-2699", - "email": "gianna@techtron.com" - }, - { - "id": 1096, - "guid": "7d75186b-50f5-49f5-8f62-fb0dbe511827", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Molligan", - "company": "Robotomic", - "phone": "824-456-2526", - "email": "jessica@robotomic.com" - }, - { - "id": 1097, - "guid": "2768d485-1008-4b83-af4f-e5a3e23166d3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Wood", - "company": "Westgate", - "phone": "827-529-2203", - "email": "sophia@westgate.com" - }, - { - "id": 1098, - "guid": "41f7873b-7de2-4183-9a2e-6b11f4ca51cb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Waller", - "company": "Enlogia", - "phone": "856-566-2641", - "email": "avery@enlogia.com" - }, - { - "id": 1099, - "guid": "f9a0001d-85c6-45e6-8166-8f5dbf52c1bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Miller", - "company": "Techtron", - "phone": "822-505-2265", - "email": "ava@techtron.com" - }, - { - "id": 1100, - "guid": "2d4c3aa6-4d91-4d84-8c64-865ef21b8aa3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Fulton", - "company": "Safetrust", - "phone": "892-505-2738", - "email": "kaitlyn@safetrust.com" - }, - { - "id": 1101, - "guid": "a50224df-c1ea-4552-bca4-a87ce3b92915", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabelle Wayne", - "company": "Entcast", - "phone": "882-417-3506", - "email": "isabelle@entcast.com" - }, - { - "id": 1102, - "guid": "c64af336-c975-44bb-8ca8-1fcabb769922", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Crossman", - "company": "iSkyvaco", - "phone": "827-442-2935", - "email": "vanessa@iskyvaco.com" - }, - { - "id": 1103, - "guid": "6faf7546-df9c-421d-839f-c21def849260", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Youmans", - "company": "Westgate", - "phone": "804-582-3356", - "email": "angelina@westgate.com" - }, - { - "id": 1104, - "guid": "06e3f462-8fcf-4578-a0fa-1d31698dd95a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Otis", - "company": "US Infratouch", - "phone": "876-584-2673", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 1105, - "guid": "0c4f94a0-60b3-4df7-8903-41c0c7332d60", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Olivia Haig", - "company": "Teraserv", - "phone": "817-421-3759", - "email": "olivia@teraserv.com" - }, - { - "id": 1106, - "guid": "29f260ea-e886-4597-afd5-4270fa1f9080", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexa Wesley", - "company": "Aluco", - "phone": "868-562-2115", - "email": "alexa@aluco.com" - }, - { - "id": 1107, - "guid": "78ebe41d-6bc6-48b7-bbe9-ee87275c6ed4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hannah Gilbert", - "company": "Fibroserve", - "phone": "898-429-2180", - "email": "hannah@fibroserve.com" - }, - { - "id": 1108, - "guid": "ed2a41f9-d56f-4917-9b2c-c2ad7a925851", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lillian Winter", - "company": "Mescaridic", - "phone": "876-585-3175", - "email": "lillian@mescaridic.com" - }, - { - "id": 1109, - "guid": "1987251b-9821-4d01-a677-93a79b7fde1c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Fisher", - "company": "Fibrotouch", - "phone": "809-405-3307", - "email": "nevaeh@fibrotouch.com" - }, - { - "id": 1110, - "guid": "881e972b-0c24-4b13-8339-ab889454dfd2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Young", - "company": "Westtomik", - "phone": "848-475-3087", - "email": "isabelle@westtomik.com" - }, - { - "id": 1111, - "guid": "43c80fc6-cf1b-484b-864c-4cdf8e57ca02", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Wesley", - "company": "Conotomics", - "phone": "852-531-2300", - "email": "caroline@conotomics.com" - }, - { - "id": 1112, - "guid": "87da26c1-ab44-45a8-8d6a-e3262fa67f70", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Young", - "company": "Orthosoft", - "phone": "858-412-3822", - "email": "serenity@orthosoft.com" - }, - { - "id": 1113, - "guid": "eec2ecb7-61e6-491d-bd32-c13455d22467", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Winter", - "company": "Anagraph", - "phone": "865-583-3105", - "email": "nevaeh@anagraph.com" - }, - { - "id": 1114, - "guid": "efe36e9e-79ef-4011-b264-38291d369563", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Gate", - "company": "Robotemplate", - "phone": "860-513-2630", - "email": "lauren@robotemplate.com" - }, - { - "id": 1115, - "guid": "292ba9f3-eb94-45d7-b3bb-f6dca52a030c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Croftoon", - "company": "OpKeycomm", - "phone": "852-435-2799", - "email": "katherine@opkeycomm.com" - }, - { - "id": 1116, - "guid": "d08bc5c1-6f3a-434f-a581-c74598638cb3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Gilson", - "company": "Aprama", - "phone": "823-436-2258", - "email": "lauren@aprama.com" - }, - { - "id": 1117, - "guid": "8d9b5b5b-1995-47a3-9a4d-4b6ade6bdd3b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Camila Wesley", - "company": "iQualcar", - "phone": "864-581-2256", - "email": "camila@iqualcar.com" - }, - { - "id": 1118, - "guid": "bd391217-6f58-416c-bbcd-52701368431d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Gustman", - "company": "Truegate", - "phone": "884-469-2953", - "email": "andrea@truegate.com" - }, - { - "id": 1119, - "guid": "b134dbef-4840-4b3a-9f0b-f57720472ff0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Daniels", - "company": "eSteganoergy", - "phone": "816-556-3054", - "email": "anna@esteganoergy.com" - }, - { - "id": 1120, - "guid": "c913194a-9a52-4d6d-8b86-d445a4a9443b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ava Miln", - "company": "Polytheon", - "phone": "832-486-2369", - "email": "ava@polytheon.com" - }, - { - "id": 1121, - "guid": "f60df149-0ec3-444b-b205-496fc4184e17", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Otis", - "company": "Proline", - "phone": "858-474-3364", - "email": "andrea@proline.com" - }, - { - "id": 1122, - "guid": "d1feecb2-abe3-4497-954b-dc58c9469525", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Genesis Fulton", - "company": "Proline", - "phone": "853-518-2911", - "email": "genesis@proline.com" - }, - { - "id": 1123, - "guid": "2f0bbe2a-4084-4cbc-9fab-fa99f6e63bab", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gilbert", - "company": "Openserve", - "phone": "882-547-3053", - "email": "brooklyn@openserve.com" - }, - { - "id": 1124, - "guid": "8a27bd09-9f13-4bc1-9f9f-4c488d37c3e9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Walkman", - "company": "Multitiqua", - "phone": "833-481-3345", - "email": "ashley@multitiqua.com" - }, - { - "id": 1125, - "guid": "d0e19c65-6f89-4c3d-815f-4d9f72b4dff3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Warren", - "company": "eSteganoergy", - "phone": "868-461-2348", - "email": "trinity@esteganoergy.com" - }, - { - "id": 1126, - "guid": "80fff472-2ca7-4cf1-a8fe-7454109ffaa1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Makayla Hailey", - "company": "Videobanc", - "phone": "891-478-2519", - "email": "makayla@videobanc.com" - }, - { - "id": 1127, - "guid": "d3ffcafa-0b29-4fe3-8b61-e72b59a728bc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Higgins", - "company": "Mescaridic", - "phone": "899-486-3947", - "email": "andrea@mescaridic.com" - }, - { - "id": 1128, - "guid": "7db794ae-828c-4952-afd0-ff98aea62cd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Campbell", - "company": "Proline", - "phone": "880-586-3570", - "email": "alexandra@proline.com" - }, - { - "id": 1129, - "guid": "a88a1763-adf7-49ab-b91f-c14660da4bad", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle WifKinson", - "company": "Keytheon", - "phone": "827-503-3236", - "email": "gabrielle@keytheon.com" - }, - { - "id": 1130, - "guid": "21386e14-5d7f-4d6b-862b-7a5e62cb2271", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Hancock", - "company": "Netsystems", - "phone": "878-408-2672", - "email": "jasmine@netsystems.com" - }, - { - "id": 1131, - "guid": "9eb47092-5fd5-4911-adbb-b5bb445f9554", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Conors", - "company": "Cryptotegrity", - "phone": "862-444-2814", - "email": "addison@cryptotegrity.com" - }, - { - "id": 1132, - "guid": "8c0de3db-8cc1-4ce1-b8e1-9cdffb07c140", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Chloe Gibbs", - "company": "Orthomedia", - "phone": "840-568-2211", - "email": "chloe@orthomedia.com" - }, - { - "id": 1133, - "guid": "f6fdcf22-e4a8-4f79-a3a7-c4288c4b1f5d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alyssa Nash", - "company": "Anagraph", - "phone": "830-444-2053", - "email": "alyssa@anagraph.com" - }, - { - "id": 1134, - "guid": "2a445c63-47df-4b8b-b110-3daac2ed51be", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Olivia Gerald", - "company": "Cryptotegrity", - "phone": "810-421-3823", - "email": "olivia@cryptotegrity.com" - }, - { - "id": 1135, - "guid": "e31c92ad-c30e-4332-8875-4cb14585da62", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Wainwright", - "company": "Venconix", - "phone": "872-534-3213", - "email": "avery@venconix.com" - }, - { - "id": 1136, - "guid": "1f165511-a19a-43de-9f2b-0395b68ab96b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Grace Bush", - "company": "Conotomics", - "phone": "808-439-2058", - "email": "grace@conotomics.com" - }, - { - "id": 1137, - "guid": "941d06f5-b59f-4507-93e9-5037dd33102f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Carey", - "company": "Gigaura", - "phone": "833-450-2148", - "email": "audrey@gigaura.com" - }, - { - "id": 1138, - "guid": "3bbafdd9-2175-4320-bb04-830e98ff4da9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Milton", - "company": "Entcast", - "phone": "868-518-2224", - "email": "sydney@entcast.com" - }, - { - "id": 1139, - "guid": "6021133c-1d05-44af-ab77-ea118877db50", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Carroll", - "company": "Mescaridic", - "phone": "830-486-3959", - "email": "evelyn@mescaridic.com" - }, - { - "id": 1140, - "guid": "8ce68d3d-d409-462b-868a-1b3fa8799638", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Nathan", - "company": "Genland", - "phone": "807-497-2912", - "email": "nevaeh@genland.com" - }, - { - "id": 1141, - "guid": "92abb18c-ba28-4eb9-8f13-46ee89af24e5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Hailey", - "company": "Robocomm", - "phone": "804-407-2092", - "email": "brooke@robocomm.com" - }, - { - "id": 1142, - "guid": "5e0e23e1-30a1-4f01-a790-a0ed92329626", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Harrison", - "company": "Multitiqua", - "phone": "844-550-2499", - "email": "samantha@multitiqua.com" - }, - { - "id": 1143, - "guid": "c7eee51e-611b-4c74-861b-bdd563bd8d14", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Hawkins", - "company": "Enlogia", - "phone": "825-584-3935", - "email": "addison@enlogia.com" - }, - { - "id": 1144, - "guid": "922e60a4-bce9-4de7-9ea8-5be0baf216ce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Haig", - "company": "RoboAerlogix", - "phone": "830-505-2749", - "email": "gianna@roboaerlogix.com" - }, - { - "id": 1145, - "guid": "23d4df69-7514-4cdf-8e76-579dcbadf2ef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mackenzie Bush", - "company": "Titanirola", - "phone": "830-569-3917", - "email": "mackenzie@titanirola.com" - }, - { - "id": 1146, - "guid": "d4f74697-4aac-466b-a18e-d9e5bd00e010", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Chandter", - "company": "Generola", - "phone": "893-440-2535", - "email": "emma@generola.com" - }, - { - "id": 1147, - "guid": "df442edd-8846-4204-800e-27bbe72db1b0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Cramer", - "company": "Rapigrafix", - "phone": "849-595-2033", - "email": "sophia@rapigrafix.com" - }, - { - "id": 1148, - "guid": "ae2e3a14-451f-42d6-9c90-1addb744d105", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabrielle Miln", - "company": "Truegate", - "phone": "863-460-2654", - "email": "gabrielle@truegate.com" - }, - { - "id": 1149, - "guid": "01d39aff-77d2-4a79-a977-fecd905270ee", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Sherlock", - "company": "Truetomic", - "phone": "816-413-2640", - "email": "victoria@truetomic.com" - }, - { - "id": 1150, - "guid": "30e1c32e-648a-4535-ba22-6cbb4c3bf72f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Cramer", - "company": "Systheon", - "phone": "866-586-3697", - "email": "riley@systheon.com" - }, - { - "id": 1151, - "guid": "38e6b44f-c81d-452e-88e9-bc2f0bc928dc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Freeman", - "company": "Hypervaco", - "phone": "827-498-2683", - "email": "mia@hypervaco.com" - }, - { - "id": 1152, - "guid": "a0e91f80-7849-4269-aad5-cfb3a550411f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Cook", - "company": "Syssoft", - "phone": "833-411-2000", - "email": "sydney@syssoft.com" - }, - { - "id": 1153, - "guid": "5aef7e29-a876-46d1-8cb0-0fbf7181b7f1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Hoggarth", - "company": "Unconix", - "phone": "899-501-3357", - "email": "sophie@unconix.com" - }, - { - "id": 1154, - "guid": "5009a264-8f05-4646-81ff-efd97116804f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Rachel Stanley", - "company": "Netsystems", - "phone": "846-571-2914", - "email": "rachel@netsystems.com" - }, - { - "id": 1155, - "guid": "f090098e-8c21-4109-99b2-844e4aa9fe60", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke Warren", - "company": "Indisco", - "phone": "844-585-2036", - "email": "brooke@indisco.com" - }, - { - "id": 1156, - "guid": "9acb453f-60a6-4db0-91de-1bcc5467e9d1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Walkman", - "company": "Robocomm", - "phone": "823-577-3050", - "email": "molly@robocomm.com" - }, - { - "id": 1157, - "guid": "9a320f66-ae8c-4946-ac21-76e797f71c7b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Campbell", - "company": "Technogra", - "phone": "822-423-2344", - "email": "olivia@technogra.com" - }, - { - "id": 1158, - "guid": "cb52302f-6bc1-407f-bd06-ff7786d8bb0c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madison Winter", - "company": "Conrama", - "phone": "858-481-3447", - "email": "madison@conrama.com" - }, - { - "id": 1159, - "guid": "064e4a98-8d6f-4fd2-8fc6-c0e4f6cf2951", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Julia Wood", - "company": "Ventanium", - "phone": "831-429-2356", - "email": "julia@ventanium.com" - }, - { - "id": 1160, - "guid": "d85284fc-13a2-48b0-95e3-17e6232809fd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Wallace", - "company": "Teratopia", - "phone": "814-468-3517", - "email": "sydney@teratopia.com" - }, - { - "id": 1161, - "guid": "64c18473-ce98-4384-a035-c5cbdbc78fab", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Oswald", - "company": "Polytheon", - "phone": "849-543-3750", - "email": "kimberly@polytheon.com" - }, - { - "id": 1162, - "guid": "67316751-2a25-418c-b2af-f476f81e0574", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Hawkins", - "company": "Titanigraf", - "phone": "806-401-2675", - "email": "addison@titanigraf.com" - }, - { - "id": 1163, - "guid": "666f23db-6c1b-40cb-b51f-4f197b92bef1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Adamson", - "company": "Safetrust", - "phone": "818-505-3990", - "email": "ashley@safetrust.com" - }, - { - "id": 1164, - "guid": "eedc8330-08dc-4bc2-b5ea-fc5b871c3353", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Wainwright", - "company": "US Omnigraphik", - "phone": "838-574-3806", - "email": "sydney@us omnigraphik.com" - }, - { - "id": 1165, - "guid": "490c2283-3828-44f0-b7b8-26781bfe3705", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Chandter", - "company": "Transtouch", - "phone": "827-517-3917", - "email": "elizabeth@transtouch.com" - }, - { - "id": 1166, - "guid": "2f909ba8-03ea-43e0-ac71-406f29431882", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Brooks", - "company": "Titanigraf", - "phone": "894-532-3603", - "email": "mariah@titanigraf.com" - }, - { - "id": 1167, - "guid": "f71273a6-57c8-4422-8216-4831aee77ed7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Youmans", - "company": "Celgra", - "phone": "803-547-2686", - "email": "riley@celgra.com" - }, - { - "id": 1168, - "guid": "f9d0978f-d7b9-4392-bed2-bc5f2d2d397d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Thorndike", - "company": "Unologic", - "phone": "847-581-3223", - "email": "alexis@unologic.com" - }, - { - "id": 1169, - "guid": "673358d9-385b-4b5b-90d9-9a8efa23e56a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Hailey", - "company": "Syssoft", - "phone": "808-504-2768", - "email": "sydney@syssoft.com" - }, - { - "id": 1170, - "guid": "91c0eb11-f0ac-4d56-888b-d9670d102414", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Gilson", - "company": "Westgate", - "phone": "836-402-2986", - "email": "madeline@westgate.com" - }, - { - "id": 1171, - "guid": "214d8ddd-221b-41eb-9109-756eb51a001a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Owen", - "company": "Pericenta", - "phone": "832-497-2537", - "email": "kaylee@pericenta.com" - }, - { - "id": 1172, - "guid": "73ed9fc8-7631-41b6-bf50-38b8e9e7e923", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Thomson", - "company": "Robocomm", - "phone": "888-402-2417", - "email": "morgan@robocomm.com" - }, - { - "id": 1173, - "guid": "0e9bff14-bb67-4f4e-a37b-0666a1320229", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Carrington", - "company": "Hypervaco", - "phone": "848-538-3460", - "email": "chloe@hypervaco.com" - }, - { - "id": 1174, - "guid": "f28eb0fb-e422-4acf-a8bc-569003a33f28", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Chandter", - "company": "Infraique", - "phone": "835-407-3086", - "email": "katelyn@infraique.com" - }, - { - "id": 1175, - "guid": "7700687f-8ebb-4b4f-818e-59836ea32192", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Wood", - "company": "Turbomart", - "phone": "868-453-3702", - "email": "claire@turbomart.com" - }, - { - "id": 1176, - "guid": "9f5a5040-897d-4b5f-9d27-93fb2a6336c3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Crossman", - "company": "Teratopia", - "phone": "899-555-2186", - "email": "amelia@teratopia.com" - }, - { - "id": 1177, - "guid": "e06df382-1310-4d7f-934d-27e4bca65fa5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Savannah Chandter", - "company": "Generola", - "phone": "870-445-3170", - "email": "savannah@generola.com" - }, - { - "id": 1178, - "guid": "bebc7a7d-ffd4-4833-a577-49147b18e1db", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Miln", - "company": "Genland", - "phone": "824-515-2150", - "email": "jocelyn@genland.com" - }, - { - "id": 1179, - "guid": "e4245897-2c36-43f0-8687-e958e95f8995", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Ogden", - "company": "Xeicon", - "phone": "844-600-3102", - "email": "katelyn@xeicon.com" - }, - { - "id": 1180, - "guid": "03ad7429-e057-4ae7-a977-00aee47d548b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Gill", - "company": "Airdyne", - "phone": "866-559-3426", - "email": "addison@airdyne.com" - }, - { - "id": 1181, - "guid": "5ad9cf8e-a06b-44fa-8d24-4c4715330aa9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Molligan", - "company": "Navivacs", - "phone": "855-472-2027", - "email": "gabrielle@navivacs.com" - }, - { - "id": 1182, - "guid": "9d172093-3ae4-4e60-8ddb-993517f39995", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Hancock", - "company": "RoboAerlogix", - "phone": "837-577-2362", - "email": "leah@roboaerlogix.com" - }, - { - "id": 1183, - "guid": "2a4a8f89-06f0-47b4-9c8d-7f4beb99b584", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Otis", - "company": "Proline", - "phone": "849-421-2927", - "email": "alyssa@proline.com" - }, - { - "id": 1184, - "guid": "9701379d-6c04-462a-b1e2-26b685c4db96", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Chandter", - "company": "Mescaridic", - "phone": "887-487-2734", - "email": "madeline@mescaridic.com" - }, - { - "id": 1185, - "guid": "0e58b03e-92d5-4ca3-98b4-56c0dc66be39", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Clapton", - "company": "Allnet", - "phone": "834-438-3827", - "email": "savannah@allnet.com" - }, - { - "id": 1186, - "guid": "9cb9ff40-030a-4542-859e-46e07bc58215", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria WifKinson", - "company": "Westmedia", - "phone": "839-582-3490", - "email": "maria@westmedia.com" - }, - { - "id": 1187, - "guid": "bd4fc9ef-3233-4eb7-b62f-85225e362eaa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Milton", - "company": "Airdyne", - "phone": "837-447-2793", - "email": "maria@airdyne.com" - }, - { - "id": 1188, - "guid": "0ff1a6ad-c603-4b95-afa8-6712596310b1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Young", - "company": "US Omnigraphik", - "phone": "817-434-2521", - "email": "taylor@us omnigraphik.com" - }, - { - "id": 1189, - "guid": "d4514455-ae50-4337-9b1d-e0df07b91f95", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Milton", - "company": "Mescatron", - "phone": "818-426-2675", - "email": "evelyn@mescatron.com" - }, - { - "id": 1190, - "guid": "6ca8949a-1a7d-4a9c-8a21-3087713f93f2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooklyn Campbell", - "company": "Enlogia", - "phone": "862-453-2084", - "email": "brooklyn@enlogia.com" - }, - { - "id": 1191, - "guid": "e8d87c6b-8d96-4b4d-8ac4-44ad9f73d000", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Sheldon", - "company": "Systheon", - "phone": "882-591-3769", - "email": "kaylee@systheon.com" - }, - { - "id": 1192, - "guid": "e2bb9ecf-9297-405c-a3b0-70a566db195d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Carroll", - "company": "Navivacs", - "phone": "821-403-2097", - "email": "madeline@navivacs.com" - }, - { - "id": 1193, - "guid": "9020c743-507b-443a-8c01-dcd46a6022d6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Hailey", - "company": "Safeagra", - "phone": "879-540-2354", - "email": "gianna@safeagra.com" - }, - { - "id": 1194, - "guid": "1a83640f-090b-40b1-987b-d1b949f18e0a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Autumn Warren", - "company": "SysVenamerica", - "phone": "868-472-3629", - "email": "autumn@sysvenamerica.com" - }, - { - "id": 1195, - "guid": "17bf37c5-03a0-4381-87a3-bcb31cbecfc8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Chesterton", - "company": "Pericenta", - "phone": "835-418-3722", - "email": "katherine@pericenta.com" - }, - { - "id": 1196, - "guid": "61d7b1da-5de6-42da-90b0-976308a608c2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Abramson", - "company": "Transtouch", - "phone": "896-473-3941", - "email": "olivia@transtouch.com" - }, - { - "id": 1197, - "guid": "f2060fcd-142e-434f-a349-ee6d21b677f9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Miers", - "company": "Truetomic", - "phone": "879-588-3079", - "email": "natalie@truetomic.com" - }, - { - "id": 1198, - "guid": "fc68611c-4699-4875-ae26-cb03e1da81a4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Thorndike", - "company": "US Infratouch", - "phone": "847-409-2368", - "email": "addison@us infratouch.com" - }, - { - "id": 1199, - "guid": "196e8b3f-4ada-4286-9e0d-f257de43b307", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Morrison", - "company": "Navivacs", - "phone": "806-541-2158", - "email": "grace@navivacs.com" - }, - { - "id": 1200, - "guid": "5e96f8b9-d4e9-4582-9811-ea727365d501", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Oswald", - "company": "Pacwest", - "phone": "834-438-2090", - "email": "vanessa@pacwest.com" - }, - { - "id": 1201, - "guid": "52f0b020-541a-4257-ae9c-e42ceab63e57", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Michaelson", - "company": "Infraique", - "phone": "872-556-3090", - "email": "olivia@infraique.com" - }, - { - "id": 1202, - "guid": "566696d0-e4fe-44fa-9346-28ab39efadba", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Gill", - "company": "Dynarama", - "phone": "830-535-3490", - "email": "eva@dynarama.com" - }, - { - "id": 1203, - "guid": "990cc0eb-9169-4e34-a124-2a86ae079082", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Gilson", - "company": "Openserve", - "phone": "895-569-3773", - "email": "samantha@openserve.com" - }, - { - "id": 1204, - "guid": "8902191c-92d0-4a81-909b-1d33a6a29cfb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Gill", - "company": "Robotemplate", - "phone": "843-464-3505", - "email": "alexandra@robotemplate.com" - }, - { - "id": 1205, - "guid": "d2d3fba2-ca59-4f34-9940-355c4746880d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Nelson", - "company": "Titanirola", - "phone": "879-406-3694", - "email": "brianna@titanirola.com" - }, - { - "id": 1206, - "guid": "3bfa9a2b-3dd0-4f1a-982e-af7b814fcbd8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Nelson", - "company": "Venconix", - "phone": "884-565-2057", - "email": "molly@venconix.com" - }, - { - "id": 1207, - "guid": "39e673d8-9552-4dbd-ab11-8c389bf09083", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Abramson", - "company": "Tekcar", - "phone": "814-400-2718", - "email": "brianna@tekcar.com" - }, - { - "id": 1208, - "guid": "f6480c46-a870-4e12-bd16-cb403c011c69", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Winter", - "company": "Unologic", - "phone": "849-533-3540", - "email": "natalie@unologic.com" - }, - { - "id": 1209, - "guid": "2f1b29c4-7c05-4115-a8f9-ea45a523fed6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Carey", - "company": "eSteganoergy", - "phone": "840-534-2742", - "email": "amelia@esteganoergy.com" - }, - { - "id": 1210, - "guid": "5d6a5367-84ef-4237-a312-c3342b2ac257", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Thornton", - "company": "Netseco", - "phone": "863-570-2726", - "email": "nevaeh@netseco.com" - }, - { - "id": 1211, - "guid": "d54ffed1-6013-4c4e-86eb-2090d85a15fa", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Day", - "company": "Venconix", - "phone": "836-572-2533", - "email": "hannah@venconix.com" - }, - { - "id": 1212, - "guid": "20a041c0-2dcf-438d-ae1a-7388d05f19d2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Oliver", - "company": "Robotomic", - "phone": "814-422-3824", - "email": "allison@robotomic.com" - }, - { - "id": 1213, - "guid": "29bca858-aa77-4d50-9c7a-6171642fb52a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Freeman", - "company": "US Infratouch", - "phone": "846-411-3495", - "email": "grace@us infratouch.com" - }, - { - "id": 1214, - "guid": "e075d29c-fb34-4c51-bb5c-998bf37cc3c5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Hardman", - "company": "OpKeycomm", - "phone": "805-573-3048", - "email": "gabriella@opkeycomm.com" - }, - { - "id": 1215, - "guid": "2e90b981-43c0-4b19-9789-421854f5c4f3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Wallace", - "company": "Raylog", - "phone": "884-410-3160", - "email": "kayla@raylog.com" - }, - { - "id": 1216, - "guid": "d2e4a31e-0f2e-4baf-bd13-9292d4a513b0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Hamphrey", - "company": "Systheon", - "phone": "892-469-3136", - "email": "brianna@systheon.com" - }, - { - "id": 1217, - "guid": "cc4975f4-1c35-4930-b22d-7724a10db6c3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison WifKinson", - "company": "Fibrotopia", - "phone": "841-553-3858", - "email": "madison@fibrotopia.com" - }, - { - "id": 1218, - "guid": "cb74d362-5c49-4ada-a0cf-72d3a14995ba", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sofia Walkman", - "company": "Aluco", - "phone": "885-504-2922", - "email": "sofia@aluco.com" - }, - { - "id": 1219, - "guid": "d46bba17-013f-4c2b-8b51-c655614e2c90", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Youmans", - "company": "Steganoconiche", - "phone": "875-468-2750", - "email": "kayla@steganoconiche.com" - }, - { - "id": 1220, - "guid": "c4e3a6e8-8bcd-4a8d-847c-ea46e3d28a1b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Smith", - "company": "Entcast", - "phone": "849-496-3011", - "email": "hannah@entcast.com" - }, - { - "id": 1221, - "guid": "6463aa4e-12d9-49fd-a39a-7e7f9276a44c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Croftoon", - "company": "Aluco", - "phone": "828-505-3458", - "email": "isabelle@aluco.com" - }, - { - "id": 1222, - "guid": "ab098fe7-3ce4-4791-abf7-cbdc65780239", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Brooks", - "company": "Keytheon", - "phone": "817-600-2624", - "email": "vanessa@keytheon.com" - }, - { - "id": 1223, - "guid": "17332f05-4338-4152-a75d-090bd21f8e03", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Hancock", - "company": "Netsystems", - "phone": "852-517-3773", - "email": "isabella@netsystems.com" - }, - { - "id": 1224, - "guid": "7eb1e26a-dc35-436d-871c-7f40eba07f3f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Warren", - "company": "Inridium", - "phone": "825-442-2606", - "email": "evelyn@inridium.com" - }, - { - "id": 1225, - "guid": "5b6812ec-3db7-4a5a-9253-1c41d69dcb5c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Young", - "company": "Indisco", - "phone": "812-549-3429", - "email": "morgan@indisco.com" - }, - { - "id": 1226, - "guid": "d32eabff-7d9c-46f1-bbc2-f1bcffbcd13a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Bush", - "company": "Technogra", - "phone": "892-409-2687", - "email": "emily@technogra.com" - }, - { - "id": 1227, - "guid": "d2528d9c-97b8-4205-8a59-1fcf85f88fa1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Galbraith", - "company": "Compuamerica", - "phone": "806-485-3245", - "email": "alexandra@compuamerica.com" - }, - { - "id": 1228, - "guid": "e79829f4-b04c-4f42-9c5f-f33f1f0d375c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Cramer", - "company": "Cryptotegrity", - "phone": "887-468-2919", - "email": "sofia@cryptotegrity.com" - }, - { - "id": 1229, - "guid": "c4ca79b1-bc4d-496c-80d7-5e5a807a9397", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Oldridge", - "company": "InfoAirway", - "phone": "866-422-2598", - "email": "morgan@infoairway.com" - }, - { - "id": 1230, - "guid": "a018fcc6-42a6-46cb-aa48-e0d97af10098", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jessica Oldman", - "company": "Jamconik", - "phone": "867-449-2849", - "email": "jessica@jamconik.com" - }, - { - "id": 1231, - "guid": "e5272b0f-a0a6-410a-96b7-af14ba9bc1ee", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Smith", - "company": "Aluco", - "phone": "851-489-3723", - "email": "aaliyah@aluco.com" - }, - { - "id": 1232, - "guid": "cc6ff94b-abad-4f2a-bec5-51a353011f07", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Gilmore", - "company": "SysVenamerica", - "phone": "863-482-2743", - "email": "gianna@sysvenamerica.com" - }, - { - "id": 1233, - "guid": "8b0997a9-0a39-4b6c-978c-4b6dfe053807", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Chapman", - "company": "Sontopia", - "phone": "891-457-3199", - "email": "ashley@sontopia.com" - }, - { - "id": 1234, - "guid": "32af13e6-c008-48a0-baf3-7937bf08bae1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Youmans", - "company": "Multitiqua", - "phone": "818-530-2048", - "email": "rachel@multitiqua.com" - }, - { - "id": 1235, - "guid": "e5422fb1-4454-44c2-903d-1a72a03a2b51", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Chapman", - "company": "US Omnigraphik", - "phone": "840-511-3842", - "email": "kylie@us omnigraphik.com" - }, - { - "id": 1236, - "guid": "ae536fd9-2473-4a86-b11a-a3e1355c67c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Sherlock", - "company": "Venconix", - "phone": "842-477-2732", - "email": "hannah@venconix.com" - }, - { - "id": 1237, - "guid": "ffa47906-57c9-47a5-9a70-4499dbe15c12", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabrielle Galbraith", - "company": "Gigaura", - "phone": "885-579-2099", - "email": "gabrielle@gigaura.com" - }, - { - "id": 1238, - "guid": "ed105d20-157f-4efa-8c9b-054778dc8996", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Carrington", - "company": "Transtouch", - "phone": "858-563-3073", - "email": "jessica@transtouch.com" - }, - { - "id": 1239, - "guid": "1fe6ce21-915e-4755-86f6-fc50436daeff", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Gilmore", - "company": "RoboAerlogix", - "phone": "840-447-3279", - "email": "lauren@roboaerlogix.com" - }, - { - "id": 1240, - "guid": "c5cca240-92d0-4c1f-9a9d-46d616693497", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Gardner", - "company": "Polytheon", - "phone": "866-577-2203", - "email": "rachel@polytheon.com" - }, - { - "id": 1241, - "guid": "3e306228-0d2f-456c-81b9-10412514c10c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Sheldon", - "company": "eEyetanic", - "phone": "836-463-3171", - "email": "molly@eeyetanic.com" - }, - { - "id": 1242, - "guid": "9971c346-cfa6-4a30-9a77-294c7dd5fb6a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Abramson", - "company": "Sontopia", - "phone": "860-593-2257", - "email": "alexandra@sontopia.com" - }, - { - "id": 1243, - "guid": "cf319dd6-e467-42f4-b482-1a1c26ad6eeb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Higgins", - "company": "Fibrotouch", - "phone": "816-445-3339", - "email": "evelyn@fibrotouch.com" - }, - { - "id": 1244, - "guid": "dad45aea-2d5c-43cf-9abf-1dfd8a22fbc8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Gerald", - "company": "SysUSA", - "phone": "896-578-2840", - "email": "amelia@sysusa.com" - }, - { - "id": 1245, - "guid": "9127f1f1-b8fa-40f5-b27a-f0a7043ccf94", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria Walkman", - "company": "iOptystix", - "phone": "891-510-3273", - "email": "victoria@ioptystix.com" - }, - { - "id": 1246, - "guid": "5477b198-d34f-4e56-98c2-a895da2a9c29", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Chapman", - "company": "Navivacs", - "phone": "826-435-3317", - "email": "olivia@navivacs.com" - }, - { - "id": 1247, - "guid": "4d4aed08-c0d5-4778-93a1-43398f2ba34c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Oliver", - "company": "Navivacs", - "phone": "817-586-3457", - "email": "riley@navivacs.com" - }, - { - "id": 1248, - "guid": "fd309031-9b43-430c-a9a5-a5195d98067e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya Hoggarth", - "company": "Teratopia", - "phone": "822-450-2214", - "email": "mya@teratopia.com" - }, - { - "id": 1249, - "guid": "420f42f1-382e-4b0a-8bdc-c8f22f124a3f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Nash", - "company": "Hypervaco", - "phone": "888-522-3285", - "email": "vanessa@hypervaco.com" - }, - { - "id": 1250, - "guid": "9e046f91-b6fb-47fa-ae1b-cca1f6715648", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Crossman", - "company": "Sontopia", - "phone": "885-524-2444", - "email": "morgan@sontopia.com" - }, - { - "id": 1251, - "guid": "3aa863fb-1829-4ffa-8b0b-72be14b09618", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Charlson", - "company": "Nanobanc", - "phone": "880-549-2865", - "email": "maria@nanobanc.com" - }, - { - "id": 1252, - "guid": "a115f710-4f69-4bcb-8bf0-0fae59c63a27", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Youmans", - "company": "iEnland", - "phone": "884-566-2060", - "email": "rachel@ienland.com" - }, - { - "id": 1253, - "guid": "756c81ac-70ef-4da4-86ca-d1a365fae49a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alyssa Oliver", - "company": "Idmax", - "phone": "887-470-3825", - "email": "alyssa@idmax.com" - }, - { - "id": 1254, - "guid": "3cf1faa1-6a5a-45e9-bcba-d7f6486ac262", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Fulton", - "company": "Openserve", - "phone": "831-569-2063", - "email": "elizabeth@openserve.com" - }, - { - "id": 1255, - "guid": "66ba989c-6953-4b08-ae0c-733da80ac758", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Crossman", - "company": "Videobanc", - "phone": "869-480-3400", - "email": "maria@videobanc.com" - }, - { - "id": 1256, - "guid": "7ec2905c-b98f-4af1-9398-954aa8fef904", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Watson", - "company": "Fibrotopia", - "phone": "818-428-2596", - "email": "maria@fibrotopia.com" - }, - { - "id": 1257, - "guid": "c7284f35-267f-4636-a487-68920f6b3616", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Hodges", - "company": "eSteganoergy", - "phone": "846-584-2487", - "email": "eva@esteganoergy.com" - }, - { - "id": 1258, - "guid": "6e45f271-8c75-4e95-b092-7bac8ab98b53", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Nash", - "company": "Multitiqua", - "phone": "826-496-3864", - "email": "gabrielle@multitiqua.com" - }, - { - "id": 1259, - "guid": "9f353bcd-deb5-4c07-a4e6-7eab4163560a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Wood", - "company": "Aluco", - "phone": "821-416-3680", - "email": "trinity@aluco.com" - }, - { - "id": 1260, - "guid": "1a3b90e8-64f7-4df2-8b14-539c8917b971", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Thorndike", - "company": "Multitiqua", - "phone": "888-533-3772", - "email": "angelina@multitiqua.com" - }, - { - "id": 1261, - "guid": "0be132a9-b0ea-42e7-843c-368da0733dff", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Thornton", - "company": "Truegate", - "phone": "893-438-2054", - "email": "kaylee@truegate.com" - }, - { - "id": 1262, - "guid": "2d56e24c-0152-473a-a478-db9767a51f1d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Wainwright", - "company": "Westtomik", - "phone": "890-512-3404", - "email": "molly@westtomik.com" - }, - { - "id": 1263, - "guid": "8ba54c41-3b0b-4df9-a6f7-7a98a231569a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Miers", - "company": "eSteganoergy", - "phone": "860-421-3048", - "email": "camila@esteganoergy.com" - }, - { - "id": 1264, - "guid": "4d5f248e-56ae-4e38-9fc4-a0c503b12e19", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Claire Cramer", - "company": "Netseco", - "phone": "871-571-3075", - "email": "claire@netseco.com" - }, - { - "id": 1265, - "guid": "9693b014-3225-4747-b8f6-4910e287413b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Winter", - "company": "InfoAirway", - "phone": "831-426-2953", - "email": "gabriella@infoairway.com" - }, - { - "id": 1266, - "guid": "56e700d5-f573-4a8e-bb1f-36bbb89bfc4d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophie Owen", - "company": "Conotomics", - "phone": "886-568-3007", - "email": "sophie@conotomics.com" - }, - { - "id": 1267, - "guid": "29731994-48ac-4dbe-a4a3-5b5e551e559c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Turner", - "company": "Robotomic", - "phone": "826-513-2149", - "email": "allison@robotomic.com" - }, - { - "id": 1268, - "guid": "3bfec64e-d140-4ae3-ac4a-05a2a71207c2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Gilbert", - "company": "Robotemplate", - "phone": "835-475-2489", - "email": "riley@robotemplate.com" - }, - { - "id": 1269, - "guid": "ad545544-873b-4397-942c-8695f249f76d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Hailey", - "company": "Multitiqua", - "phone": "898-465-2346", - "email": "isabella@multitiqua.com" - }, - { - "id": 1270, - "guid": "f8d7648e-699c-4df2-bd00-e77baaf53933", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jocelyn Vaughan", - "company": "Syssoft", - "phone": "824-445-3879", - "email": "jocelyn@syssoft.com" - }, - { - "id": 1271, - "guid": "efcaaa91-8674-49c2-8f16-32cc9e1ad61e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Young", - "company": "Transtouch", - "phone": "830-519-2288", - "email": "maya@transtouch.com" - }, - { - "id": 1272, - "guid": "dcb6a01f-475f-451f-b665-f31dbc0fabdb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Nathan", - "company": "Venconix", - "phone": "873-590-3921", - "email": "paige@venconix.com" - }, - { - "id": 1273, - "guid": "a90d02da-15af-4233-95f5-29a5e694954b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Wood", - "company": "Mescaridic", - "phone": "861-527-2429", - "email": "camila@mescaridic.com" - }, - { - "id": 1274, - "guid": "bc7dde34-987f-44ab-a78a-c61ef96b02a0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Galbraith", - "company": "Titanirola", - "phone": "846-574-3691", - "email": "kaitlyn@titanirola.com" - }, - { - "id": 1275, - "guid": "5282c32d-15da-435b-8918-07e903aed8f6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Youmans", - "company": "Celgra", - "phone": "842-489-3337", - "email": "jessica@celgra.com" - }, - { - "id": 1276, - "guid": "ae7d0904-414e-4834-b8b9-a9601d1f7522", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Warren", - "company": "SysVenamerica", - "phone": "808-531-3049", - "email": "trinity@sysvenamerica.com" - }, - { - "id": 1277, - "guid": "1f86b582-5a55-405f-bc5b-914531cde4ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Bush", - "company": "Superscope", - "phone": "833-458-3560", - "email": "mya@superscope.com" - }, - { - "id": 1278, - "guid": "3599f405-3139-46dc-a724-e33c645e524b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Chandter", - "company": "Skydata", - "phone": "816-404-3940", - "email": "camila@skydata.com" - }, - { - "id": 1279, - "guid": "7ebb0464-926f-4617-8c09-000ed7dddd77", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Gilbert", - "company": "Pericenta", - "phone": "863-497-2055", - "email": "olivia@pericenta.com" - }, - { - "id": 1280, - "guid": "087b2bd8-84b8-4b18-9879-488eb62fdaa1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Miers", - "company": "iSkyvaco", - "phone": "856-411-2372", - "email": "allison@iskyvaco.com" - }, - { - "id": 1281, - "guid": "d16133e3-ad62-4937-909d-5b3874c4c6ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Wallace", - "company": "Mescaridic", - "phone": "884-480-2082", - "email": "alexa@mescaridic.com" - }, - { - "id": 1282, - "guid": "32c4e7e9-70b5-4276-952c-5fbcc30530fd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Abramson", - "company": "Netsystems", - "phone": "832-564-2519", - "email": "abigail@netsystems.com" - }, - { - "id": 1283, - "guid": "0987eeeb-5981-4bbe-83ea-ca23b1c59c4f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Wesley", - "company": "Vencom", - "phone": "848-505-2952", - "email": "mia@vencom.com" - }, - { - "id": 1284, - "guid": "447785da-08b6-4ec0-aa8d-161cb2578258", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaylee Thornton", - "company": "Orthomedia", - "phone": "878-556-3917", - "email": "kaylee@orthomedia.com" - }, - { - "id": 1285, - "guid": "715edc7a-c9e2-4003-b11a-78a452cfa302", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Fulton", - "company": "Mescatron", - "phone": "898-523-3066", - "email": "addison@mescatron.com" - }, - { - "id": 1286, - "guid": "d889bb6c-467d-491d-adac-13638219a9bc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Clapton", - "company": "Celgra", - "phone": "878-503-2297", - "email": "paige@celgra.com" - }, - { - "id": 1287, - "guid": "77ae95b5-e8c0-43ea-9e57-36ddc154325d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Wood", - "company": "Venconix", - "phone": "859-501-3125", - "email": "gianna@venconix.com" - }, - { - "id": 1288, - "guid": "cb40816a-8fb8-409e-bed9-91a4a9c10bb0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Wallace", - "company": "Pacwest", - "phone": "847-465-3204", - "email": "brooklyn@pacwest.com" - }, - { - "id": 1289, - "guid": "e2fa40bf-785e-4b1e-9401-c50b353c72b4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Ward", - "company": "eSteganoergy", - "phone": "827-546-3116", - "email": "layla@esteganoergy.com" - }, - { - "id": 1290, - "guid": "8902da97-5f39-4694-bd8b-eb75876c558f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexandra Wood", - "company": "Navivacs", - "phone": "836-463-3590", - "email": "alexandra@navivacs.com" - }, - { - "id": 1291, - "guid": "2cca4a3d-3865-477a-a215-b66e59bf31ff", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Sheldon", - "company": "Quintegrity", - "phone": "878-402-2508", - "email": "payton@quintegrity.com" - }, - { - "id": 1292, - "guid": "561a926c-7b0d-4fcd-8910-2006f1b136d9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Chesterton", - "company": "Jamrola", - "phone": "841-595-2743", - "email": "madeline@jamrola.com" - }, - { - "id": 1293, - "guid": "72a84895-8a2b-4690-ac22-56698236b7ad", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Michaelson", - "company": "Systheon", - "phone": "870-463-3414", - "email": "aubrey@systheon.com" - }, - { - "id": 1294, - "guid": "5b1b94bd-dae3-4811-9e3a-91a6f90d0544", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Hamphrey", - "company": "Safeagra", - "phone": "834-555-3635", - "email": "jessica@safeagra.com" - }, - { - "id": 1295, - "guid": "10baeb6c-346a-4809-9b63-2652a5955b1a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Crossman", - "company": "RoboAerlogix", - "phone": "840-435-2696", - "email": "autumn@roboaerlogix.com" - }, - { - "id": 1296, - "guid": "7b5912b2-2b62-4b27-bf67-175ff20e6a28", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Harrison", - "company": "Airdyne", - "phone": "832-499-2960", - "email": "serenity@airdyne.com" - }, - { - "id": 1297, - "guid": "2da51d3d-4188-49a4-bdda-098b0adec5f8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Hamphrey", - "company": "Robotomic", - "phone": "824-423-3339", - "email": "mariah@robotomic.com" - }, - { - "id": 1298, - "guid": "56f233e5-6329-484c-9e0f-1797947bee81", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Brickman", - "company": "Idmax", - "phone": "851-464-2399", - "email": "madelyn@idmax.com" - }, - { - "id": 1299, - "guid": "19735b48-276b-4eee-98b8-9b33e18c3537", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Crossman", - "company": "Systheon", - "phone": "893-425-3236", - "email": "destiny@systheon.com" - }, - { - "id": 1300, - "guid": "5e337263-d749-4f0e-add4-61ea276ab625", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Carroll", - "company": "Infragraph", - "phone": "871-516-3255", - "email": "jocelyn@infragraph.com" - }, - { - "id": 1301, - "guid": "895f4384-da62-425b-b3ff-a2bbf5d170a6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Cramer", - "company": "eSteganoergy", - "phone": "807-517-3467", - "email": "mariah@esteganoergy.com" - }, - { - "id": 1302, - "guid": "310d18ff-1289-498b-860f-f92972c8704d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Gill", - "company": "Skydata", - "phone": "867-525-3425", - "email": "faith@skydata.com" - }, - { - "id": 1303, - "guid": "35322274-9b8c-4120-b4ff-5bf4319f24ca", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Morrison", - "company": "Truetomic", - "phone": "883-570-2179", - "email": "lillian@truetomic.com" - }, - { - "id": 1304, - "guid": "9c96cf9d-4bcc-4715-8a2e-0185fa97dd88", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Miller", - "company": "Gigaura", - "phone": "831-560-3186", - "email": "zoe@gigaura.com" - }, - { - "id": 1305, - "guid": "3c9bc23e-255f-46be-901b-3b98a1d2627f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Smith", - "company": "Fibroserve", - "phone": "858-401-2798", - "email": "kylie@fibroserve.com" - }, - { - "id": 1306, - "guid": "103071dd-7d43-4fa6-bde3-b15fb2e211f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Chandter", - "company": "Technogra", - "phone": "803-490-3667", - "email": "lauren@technogra.com" - }, - { - "id": 1307, - "guid": "cafa33cf-68ae-4954-bef2-b346441fdee0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Davidson", - "company": "Technogra", - "phone": "877-590-3143", - "email": "leah@technogra.com" - }, - { - "id": 1308, - "guid": "8e1e5608-cbf1-4337-9669-020f19f38df7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Stanley", - "company": "Technogra", - "phone": "822-441-2334", - "email": "alyssa@technogra.com" - }, - { - "id": 1309, - "guid": "0e158aff-bd6b-451c-b6ee-5f3a4b02e6ea", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Wayne", - "company": "Robocomm", - "phone": "882-464-3664", - "email": "eva@robocomm.com" - }, - { - "id": 1310, - "guid": "cb7952cf-e9a3-48fb-9974-98b783c37a11", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Owen", - "company": "Westtomik", - "phone": "801-447-3032", - "email": "abigail@westtomik.com" - }, - { - "id": 1311, - "guid": "f6cd79a2-d4dd-4774-b63d-8dc78645e709", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Miln", - "company": "RoboAerlogix", - "phone": "840-528-3163", - "email": "savannah@roboaerlogix.com" - }, - { - "id": 1312, - "guid": "08ee63d2-5d71-46db-9473-5704c84baf43", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Walkman", - "company": "Airdyne", - "phone": "869-476-3357", - "email": "lauren@airdyne.com" - }, - { - "id": 1313, - "guid": "7c9d4e08-a95f-4385-8f81-8ec0fcd16d88", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaylee Brooks", - "company": "Nanobanc", - "phone": "845-543-2380", - "email": "kaylee@nanobanc.com" - }, - { - "id": 1314, - "guid": "9f79dc8b-8e5e-4f8e-ac0c-bd9a3e4e9fb9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Gill", - "company": "Multitiqua", - "phone": "883-475-3592", - "email": "jasmine@multitiqua.com" - }, - { - "id": 1315, - "guid": "3bfbc307-ea03-4c9f-8089-b895ee822018", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Nathan", - "company": "Fibroserve", - "phone": "861-517-2595", - "email": "chloe@fibroserve.com" - }, - { - "id": 1316, - "guid": "ccd79396-c032-457b-b3f0-5cbd2b26e410", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabella Michaelson", - "company": "Ventanium", - "phone": "853-498-2378", - "email": "isabella@ventanium.com" - }, - { - "id": 1317, - "guid": "91eb5d76-5e92-470c-9d52-41b7d2500531", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Gilmore", - "company": "Steganoconiche", - "phone": "817-552-2856", - "email": "sarah@steganoconiche.com" - }, - { - "id": 1318, - "guid": "8dee512f-4a87-4d65-ba49-b4c8ac44ef99", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Carey", - "company": "Sontopia", - "phone": "843-503-2922", - "email": "jasmine@sontopia.com" - }, - { - "id": 1319, - "guid": "78fe2dda-cc2e-4ca0-bc31-1ba337d7e9c9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Sheldon", - "company": "Proline", - "phone": "882-534-2599", - "email": "savannah@proline.com" - }, - { - "id": 1320, - "guid": "cc2b36d1-9c24-4974-b110-80f9c5a91cba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Goodman", - "company": "Inridium", - "phone": "882-435-2885", - "email": "angelina@inridium.com" - }, - { - "id": 1321, - "guid": "fed725a0-4a61-4258-b1dd-67679293cae9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Carey", - "company": "Safetrust", - "phone": "829-537-3823", - "email": "nevaeh@safetrust.com" - }, - { - "id": 1322, - "guid": "400cc4e2-c829-4619-b64a-9c231b491528", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Gardner", - "company": "Safeagra", - "phone": "839-502-3604", - "email": "gianna@safeagra.com" - }, - { - "id": 1323, - "guid": "9ee7e972-8cc0-4b2d-b011-abc433170f49", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maria Vaughan", - "company": "Truetomic", - "phone": "848-431-3735", - "email": "maria@truetomic.com" - }, - { - "id": 1324, - "guid": "f35ec7f4-6e35-4918-a74d-436f6e2bdbcd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Carey", - "company": "Techtron", - "phone": "800-540-2129", - "email": "lauren@techtron.com" - }, - { - "id": 1325, - "guid": "0d0f2a5b-babd-4a07-8589-0056723a8b34", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily WifKinson", - "company": "Titanirola", - "phone": "871-413-2498", - "email": "lily@titanirola.com" - }, - { - "id": 1326, - "guid": "f5ba6968-5564-4c18-a11d-f8a7c326ca20", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Bush", - "company": "SysUSA", - "phone": "804-524-2199", - "email": "sydney@sysusa.com" - }, - { - "id": 1327, - "guid": "10a2b6a4-ab0c-48b1-9d1f-8b58a9fb9917", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Ford", - "company": "Netsystems", - "phone": "841-492-3682", - "email": "aubrey@netsystems.com" - }, - { - "id": 1328, - "guid": "dac61be6-6c06-4542-b2c5-8b752732b562", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Thornton", - "company": "Titanigraf", - "phone": "804-446-3375", - "email": "nevaeh@titanigraf.com" - }, - { - "id": 1329, - "guid": "c75fb1ae-dc45-4c37-a4ed-675c24e14483", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Cook", - "company": "Netseco", - "phone": "874-587-3528", - "email": "allison@netseco.com" - }, - { - "id": 1330, - "guid": "0435f419-878b-45e0-9731-481497e81cd8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Conors", - "company": "Infragraph", - "phone": "802-578-3202", - "email": "natalie@infragraph.com" - }, - { - "id": 1331, - "guid": "e7aa1a39-68df-457b-890c-c2e9a6de20ea", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Hawkins", - "company": "Truetomic", - "phone": "897-473-3888", - "email": "allison@truetomic.com" - }, - { - "id": 1332, - "guid": "a634c6d2-a90e-4c9c-a9e0-238f902da6b8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Milton", - "company": "Entcast", - "phone": "868-425-3976", - "email": "vanessa@entcast.com" - }, - { - "id": 1333, - "guid": "94458218-9acd-470b-b4b7-82706e5b6db8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Morgan Goodman", - "company": "Steganoconiche", - "phone": "874-572-2228", - "email": "morgan@steganoconiche.com" - }, - { - "id": 1334, - "guid": "f11f3cdf-986e-47a0-baa1-5538431cf4e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Carrington", - "company": "Fibrotopia", - "phone": "865-563-2818", - "email": "abigail@fibrotopia.com" - }, - { - "id": 1335, - "guid": "1e5946ea-c5b2-4bc4-b205-68a21c8c997e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Nathan", - "company": "Vencom", - "phone": "880-442-3711", - "email": "sarah@vencom.com" - }, - { - "id": 1336, - "guid": "027717e2-e224-4ed3-81f2-f0bd305d66da", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Chesterton", - "company": "US Omnigraphik", - "phone": "891-519-2802", - "email": "khloe@us omnigraphik.com" - }, - { - "id": 1337, - "guid": "f3477032-9dd6-43f4-89ed-576c09dafa9d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Wallace", - "company": "InfoAirway", - "phone": "817-537-2174", - "email": "khloe@infoairway.com" - }, - { - "id": 1338, - "guid": "0799edc6-3d92-4c4e-80eb-24b35429f2ae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Webster", - "company": "Qualserve", - "phone": "872-564-2642", - "email": "charlotte@qualserve.com" - }, - { - "id": 1339, - "guid": "a7c07843-47a3-4fd6-9af6-b79812fac800", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Stanley", - "company": "Pacwest", - "phone": "854-470-3083", - "email": "hannah@pacwest.com" - }, - { - "id": 1340, - "guid": "9318679a-b931-430f-8bb4-218a621f0dad", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Miers", - "company": "Westgate", - "phone": "812-598-3929", - "email": "brooklyn@westgate.com" - }, - { - "id": 1341, - "guid": "2776f9b8-fe75-4ac1-9dcc-757e5df3c3b7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Brooks", - "company": "RoboAerlogix", - "phone": "838-448-3059", - "email": "eva@roboaerlogix.com" - }, - { - "id": 1342, - "guid": "a6ce6aa1-d188-4ba5-a7ff-fb6860346cf8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Brown", - "company": "Westgate", - "phone": "855-594-3672", - "email": "amelia@westgate.com" - }, - { - "id": 1343, - "guid": "5ece8d03-f631-46c7-8461-3b0348e872d9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Milton", - "company": "Idmax", - "phone": "885-565-3897", - "email": "aaliyah@idmax.com" - }, - { - "id": 1344, - "guid": "8161728d-3985-49e2-9275-fee356a212b1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Morrison", - "company": "Fibroserve", - "phone": "867-556-3299", - "email": "kaitlyn@fibroserve.com" - }, - { - "id": 1345, - "guid": "a0895fd0-0cae-4c8e-a1fa-65b129d89cae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Wesley", - "company": "eEyetanic", - "phone": "879-594-2327", - "email": "payton@eeyetanic.com" - }, - { - "id": 1346, - "guid": "549cc668-8bd0-4581-b814-ac6c01a7223e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Nelson", - "company": "Keytheon", - "phone": "898-480-2527", - "email": "taylor@keytheon.com" - }, - { - "id": 1347, - "guid": "0174924e-169d-4c56-93be-e1e5db9bbb5c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Osborne", - "company": "eSteganoergy", - "phone": "817-401-3803", - "email": "alexandra@esteganoergy.com" - }, - { - "id": 1348, - "guid": "264353c6-291b-40cd-ba02-e30681a323d5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Gustman", - "company": "iQualcar", - "phone": "847-412-2291", - "email": "faith@iqualcar.com" - }, - { - "id": 1349, - "guid": "a6faa420-0cb8-4f85-ba98-05386aaa4a89", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Vance", - "company": "Techtron", - "phone": "812-576-2402", - "email": "mya@techtron.com" - }, - { - "id": 1350, - "guid": "5e84d25b-7de7-476a-8668-804ece25edd0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Milton", - "company": "Safetrust", - "phone": "845-500-3442", - "email": "faith@safetrust.com" - }, - { - "id": 1351, - "guid": "626a096a-a8b5-46c2-ba1d-a0e1f6c8b9a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Ogden", - "company": "iSkyvaco", - "phone": "847-488-3833", - "email": "alyssa@iskyvaco.com" - }, - { - "id": 1352, - "guid": "dfac25ac-ade7-4fd2-add0-9b3832b8939d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Timmons", - "company": "Allphysiche", - "phone": "843-455-2501", - "email": "destiny@allphysiche.com" - }, - { - "id": 1353, - "guid": "8c4dc195-d83e-4abc-a5a6-ac4fc87f576c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Campbell", - "company": "Navivacs", - "phone": "805-481-2203", - "email": "alyssa@navivacs.com" - }, - { - "id": 1354, - "guid": "af10ab18-9cad-4805-a6eb-af2f44e5d739", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Wayne", - "company": "iMedconik", - "phone": "883-436-2021", - "email": "maria@imedconik.com" - }, - { - "id": 1355, - "guid": "38e9c5d5-09a9-4f16-91d4-3f770d3ecc4a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Croftoon", - "company": "iMedconik", - "phone": "842-415-2123", - "email": "rachel@imedconik.com" - }, - { - "id": 1356, - "guid": "a4493618-a321-464d-9ea9-7b3f796bc7b8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Hardman", - "company": "Teraserv", - "phone": "816-526-2704", - "email": "lillian@teraserv.com" - }, - { - "id": 1357, - "guid": "14fac417-be04-49ab-9b3a-9ff5548d0840", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Stanley", - "company": "Fibrotopia", - "phone": "836-484-2930", - "email": "chloe@fibrotopia.com" - }, - { - "id": 1358, - "guid": "8e0ad2f1-32d7-4f68-b7df-0bb9aeca553b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Youmans", - "company": "Steganoconiche", - "phone": "881-453-3998", - "email": "olivia@steganoconiche.com" - }, - { - "id": 1359, - "guid": "3d524616-01fa-4ee4-a490-176450f6e29e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Oswald", - "company": "Vencom", - "phone": "844-418-3716", - "email": "hannah@vencom.com" - }, - { - "id": 1360, - "guid": "aac72fa9-3b97-4521-81c4-45ec9abb6523", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Michaelson", - "company": "Techtron", - "phone": "800-580-3680", - "email": "molly@techtron.com" - }, - { - "id": 1361, - "guid": "d24fe94d-5b3c-4f61-a0f6-4589fca422bf", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Vaughan", - "company": "Videobanc", - "phone": "896-589-2574", - "email": "jessica@videobanc.com" - }, - { - "id": 1362, - "guid": "c41196d8-4462-4e0b-b407-ad3d72b038ed", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Gate", - "company": "RoboAerlogix", - "phone": "820-578-3558", - "email": "isabelle@roboaerlogix.com" - }, - { - "id": 1363, - "guid": "cb835771-5c2a-4db3-a73c-e1961ed01ba7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Charlotte Sherlock", - "company": "Qualserve", - "phone": "807-452-2205", - "email": "charlotte@qualserve.com" - }, - { - "id": 1364, - "guid": "7a551ce5-65ec-4f26-acb9-e1c55ff0f453", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Watson", - "company": "Westgate", - "phone": "812-537-2525", - "email": "kayla@westgate.com" - }, - { - "id": 1365, - "guid": "f80fbcdf-2435-4aec-a17e-ea0edc835260", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Thornton", - "company": "Mescaridic", - "phone": "848-557-3039", - "email": "sophia@mescaridic.com" - }, - { - "id": 1366, - "guid": "6df3111a-0374-4f5f-96fe-5313383999ff", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Goldman", - "company": "Techtron", - "phone": "889-507-3559", - "email": "jocelyn@techtron.com" - }, - { - "id": 1367, - "guid": "e481c166-e780-4554-bc62-68d761992aeb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Faith Stanley", - "company": "Transtouch", - "phone": "837-423-3644", - "email": "faith@transtouch.com" - }, - { - "id": 1368, - "guid": "48baa75b-a6fa-4c5d-905d-2b6fb14f7289", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hannah WifKinson", - "company": "Qualserve", - "phone": "800-489-3069", - "email": "hannah@qualserve.com" - }, - { - "id": 1369, - "guid": "bb0b2537-3112-4f8e-818c-3143084b68ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Brown", - "company": "Qualserve", - "phone": "895-572-3310", - "email": "caroline@qualserve.com" - }, - { - "id": 1370, - "guid": "839762f1-c6e9-4409-b86b-2fc565c8d497", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Sheldon", - "company": "Videobanc", - "phone": "830-556-3779", - "email": "sarah@videobanc.com" - }, - { - "id": 1371, - "guid": "bfd3e7d4-f482-4bba-a380-731c0aceb19e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Milton", - "company": "Orthomedia", - "phone": "862-542-2394", - "email": "grace@orthomedia.com" - }, - { - "id": 1372, - "guid": "386c65af-ee4e-44e9-a76a-3d75c359f962", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Crossman", - "company": "Transtouch", - "phone": "879-450-2343", - "email": "katelyn@transtouch.com" - }, - { - "id": 1373, - "guid": "28879d27-531d-4058-9635-32f210b4a0af", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Goldman", - "company": "Robocomm", - "phone": "816-522-2093", - "email": "arianna@robocomm.com" - }, - { - "id": 1374, - "guid": "8e4bf464-7f0b-425f-94fd-3ed0552586a0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Ward", - "company": "Jamconik", - "phone": "842-433-2913", - "email": "gabrielle@jamconik.com" - }, - { - "id": 1375, - "guid": "4cf2a481-53ca-4d9f-bf25-f87e8aaa3d2a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Hoggarth", - "company": "Westmedia", - "phone": "871-433-3994", - "email": "kayla@westmedia.com" - }, - { - "id": 1376, - "guid": "57db4bd5-da8c-4113-874a-bcac331ccfeb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mia Charlson", - "company": "iEnland", - "phone": "898-501-3066", - "email": "mia@ienland.com" - }, - { - "id": 1377, - "guid": "5a9b1872-f42a-4db5-a54e-ecb954ec964b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Nelson", - "company": "Unologic", - "phone": "847-442-3516", - "email": "alyssa@unologic.com" - }, - { - "id": 1378, - "guid": "bddc7827-b8c3-4f35-a53a-32111c0f5dbe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Higgins", - "company": "Dynarama", - "phone": "824-514-3857", - "email": "savannah@dynarama.com" - }, - { - "id": 1379, - "guid": "88b71bc5-e3cb-44bb-9e8e-abaf184894ea", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Osborne", - "company": "Multitiqua", - "phone": "835-592-2779", - "email": "molly@multitiqua.com" - }, - { - "id": 1380, - "guid": "a5d1a937-e860-4211-9ec5-f05afd9a5889", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Adamson", - "company": "Mescatron", - "phone": "864-473-3919", - "email": "isabelle@mescatron.com" - }, - { - "id": 1381, - "guid": "ead9c32f-d4f6-4347-85c2-8f513e4ca5d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bailey Otis", - "company": "Syssoft", - "phone": "867-480-2511", - "email": "bailey@syssoft.com" - }, - { - "id": 1382, - "guid": "3c8c9673-9abe-43c5-b4ec-6f2f9225240f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Chesterton", - "company": "Transtouch", - "phone": "847-455-2341", - "email": "mya@transtouch.com" - }, - { - "id": 1383, - "guid": "b63bac70-4fc1-4e1c-a2f6-f69d9c2cb62b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Osborne", - "company": "Cryptotegrity", - "phone": "805-522-3201", - "email": "melanie@cryptotegrity.com" - }, - { - "id": 1384, - "guid": "90e32f37-73c4-4f46-bc64-e74648c9ce45", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Campbell", - "company": "Compuamerica", - "phone": "898-438-2671", - "email": "aaliyah@compuamerica.com" - }, - { - "id": 1385, - "guid": "8d3bc5ad-0da2-4486-8830-de179285fc63", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Webster", - "company": "Enlogia", - "phone": "824-560-2437", - "email": "addison@enlogia.com" - }, - { - "id": 1386, - "guid": "0168d1af-cdd6-48ab-9cf6-90d473b52fd3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Creighton", - "company": "eSteganoergy", - "phone": "897-474-2515", - "email": "madeline@esteganoergy.com" - }, - { - "id": 1387, - "guid": "9243c1a6-66ac-4aef-9f6d-40241fa2e3ab", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Chesterton", - "company": "Robotomic", - "phone": "895-558-2252", - "email": "riley@robotomic.com" - }, - { - "id": 1388, - "guid": "679eee1e-464d-4210-b6b6-b0c3a3427d3b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Warren", - "company": "Venconix", - "phone": "863-575-3061", - "email": "abigail@venconix.com" - }, - { - "id": 1389, - "guid": "d35420ec-f11f-40c1-8e61-d1118768a662", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Goldman", - "company": "Gigaura", - "phone": "817-485-3528", - "email": "kaitlyn@gigaura.com" - }, - { - "id": 1390, - "guid": "befb6b4f-8bb9-4edf-a509-a67629c28cfd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Clapton", - "company": "SysVenamerica", - "phone": "892-473-2712", - "email": "sydney@sysvenamerica.com" - }, - { - "id": 1391, - "guid": "c0ddaff9-351c-41ae-969d-acd57c5cf96e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Waller", - "company": "Aprama", - "phone": "899-472-2040", - "email": "alexa@aprama.com" - }, - { - "id": 1392, - "guid": "7712bca6-4331-42d7-91be-8584895194ef", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Abramson", - "company": "Transtouch", - "phone": "813-512-3821", - "email": "emily@transtouch.com" - }, - { - "id": 1393, - "guid": "4643a1a0-947b-442f-bd74-0ed95c7c74b3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Oliver", - "company": "Ameritron", - "phone": "824-530-3796", - "email": "allison@ameritron.com" - }, - { - "id": 1394, - "guid": "b27c5fa7-c094-4352-838c-1271065aa18c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Hamphrey", - "company": "Proline", - "phone": "889-420-3503", - "email": "jessica@proline.com" - }, - { - "id": 1395, - "guid": "c9138693-e3a2-4e58-828e-9ed9f5f4ebaf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Stanley", - "company": "Transtouch", - "phone": "813-531-3087", - "email": "aubrey@transtouch.com" - }, - { - "id": 1396, - "guid": "a528fa60-9ec2-439f-bf4d-7543d9fe9ee7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Carter", - "company": "Idmax", - "phone": "888-548-2582", - "email": "valeria@idmax.com" - }, - { - "id": 1397, - "guid": "a00f6260-7718-40c6-8117-6f9fdb2e4bf1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Wesley", - "company": "Teratopia", - "phone": "875-529-3836", - "email": "claire@teratopia.com" - }, - { - "id": 1398, - "guid": "4eecba1e-bd91-4276-8b46-df1144875d1f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Elizabeth Brooks", - "company": "Superscope", - "phone": "831-446-3535", - "email": "elizabeth@superscope.com" - }, - { - "id": 1399, - "guid": "34c1ebe8-a257-4ba6-977a-14d0ab5bc3c1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hailey Croftoon", - "company": "Pacwest", - "phone": "846-556-3370", - "email": "hailey@pacwest.com" - }, - { - "id": 1400, - "guid": "38021e82-f400-4fe5-ba6a-0d06b2008012", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Galbraith", - "company": "Compuamerica", - "phone": "857-435-2017", - "email": "charlotte@compuamerica.com" - }, - { - "id": 1401, - "guid": "f6ba06d4-cbaa-406f-bc48-59f08a5500e4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Olivia Oswald", - "company": "InfoAirway", - "phone": "830-458-3901", - "email": "olivia@infoairway.com" - }, - { - "id": 1402, - "guid": "a43c67ea-e150-4079-bbd2-c315cd11028e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Youmans", - "company": "Teratopia", - "phone": "833-561-3459", - "email": "ariana@teratopia.com" - }, - { - "id": 1403, - "guid": "5c4a8f67-fde4-4a66-a24f-aac5f592f02e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Croftoon", - "company": "Orthosoft", - "phone": "815-467-3771", - "email": "trinity@orthosoft.com" - }, - { - "id": 1404, - "guid": "3a9f287d-180b-434b-941b-4597bff6af1e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Ford", - "company": "Westgate", - "phone": "861-405-3381", - "email": "layla@westgate.com" - }, - { - "id": 1405, - "guid": "56070470-e5bb-41cf-bd67-8a72638fe940", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Hawkins", - "company": "Anaframe", - "phone": "836-593-3706", - "email": "arianna@anaframe.com" - }, - { - "id": 1406, - "guid": "f05ea6ad-88e0-48a5-a698-25ccafb91b8c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Ford", - "company": "Entcast", - "phone": "846-459-3722", - "email": "bailey@entcast.com" - }, - { - "id": 1407, - "guid": "0c02d303-fa0b-40ea-bfe5-a8fc462cfa51", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Adamson", - "company": "Aprama", - "phone": "811-525-3544", - "email": "emma@aprama.com" - }, - { - "id": 1408, - "guid": "2cd26c6f-0f31-4123-8610-219337260ecb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Clapton", - "company": "Idmax", - "phone": "884-564-2708", - "email": "jessica@idmax.com" - }, - { - "id": 1409, - "guid": "e1162628-0c08-4413-b62a-8f079cd0b70c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Milton", - "company": "Skydata", - "phone": "830-582-3463", - "email": "sophie@skydata.com" - }, - { - "id": 1410, - "guid": "0c6a6272-6144-460f-85cc-cff219eb5d0f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Hawkins", - "company": "Dynarama", - "phone": "845-529-2774", - "email": "bella@dynarama.com" - }, - { - "id": 1411, - "guid": "077d1a05-989a-412c-ae56-45f86193a842", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Timmons", - "company": "Venconix", - "phone": "857-423-3806", - "email": "sarah@venconix.com" - }, - { - "id": 1412, - "guid": "6010a2e6-f345-4a24-b617-040d95da3491", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Campbell", - "company": "eEyetanic", - "phone": "800-436-2457", - "email": "autumn@eeyetanic.com" - }, - { - "id": 1413, - "guid": "4c9fcb69-b7de-4371-aec0-d40607927cdb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Osborne", - "company": "Gigaura", - "phone": "853-513-2161", - "email": "allison@gigaura.com" - }, - { - "id": 1414, - "guid": "6667cb35-d215-4d78-abd5-ff672f4cf814", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Gate", - "company": "Thermotomic", - "phone": "887-538-2201", - "email": "mackenzie@thermotomic.com" - }, - { - "id": 1415, - "guid": "51264fc5-a243-41ac-ba2c-4db226d6a37a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Miller", - "company": "Robotomic", - "phone": "808-553-3308", - "email": "alexis@robotomic.com" - }, - { - "id": 1416, - "guid": "e56d0713-8034-4f59-bd6d-3159f2bf43b1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine WifKinson", - "company": "iMedconik", - "phone": "856-524-3181", - "email": "katherine@imedconik.com" - }, - { - "id": 1417, - "guid": "4a0101c9-3d5c-472b-b02a-e780966bde3c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Youmans", - "company": "Multitiqua", - "phone": "898-529-3514", - "email": "evelyn@multitiqua.com" - }, - { - "id": 1418, - "guid": "f8fbd4de-868b-48e6-bf72-879baf8131ad", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia Wesley", - "company": "Fibrotouch", - "phone": "899-503-2863", - "email": "sofia@fibrotouch.com" - }, - { - "id": 1419, - "guid": "b65cfeba-beb8-41f4-8859-880318b78bef", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Hodges", - "company": "Fibrotopia", - "phone": "869-511-2935", - "email": "serenity@fibrotopia.com" - }, - { - "id": 1420, - "guid": "737f5fb0-14f3-4cb3-ad02-a65eea91d0bd", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Watson", - "company": "Indisco", - "phone": "834-546-2277", - "email": "morgan@indisco.com" - }, - { - "id": 1421, - "guid": "b44a049d-01e6-45fa-821b-8d76b7794c27", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Freeman", - "company": "Unconix", - "phone": "852-530-2848", - "email": "makayla@unconix.com" - }, - { - "id": 1422, - "guid": "67db89ed-1e09-429b-bf3c-9634f7fdf79a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Vaughan", - "company": "Teraserv", - "phone": "855-596-2824", - "email": "sofia@teraserv.com" - }, - { - "id": 1423, - "guid": "eef45917-5996-4020-9f4c-080082da55a9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Goldman", - "company": "Anaframe", - "phone": "882-569-2366", - "email": "makayla@anaframe.com" - }, - { - "id": 1424, - "guid": "0600dfa6-b002-47f7-b7d0-41343e9e9d16", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Wesley", - "company": "iSkyvaco", - "phone": "883-575-2604", - "email": "layla@iskyvaco.com" - }, - { - "id": 1425, - "guid": "dcf0be79-6414-41c7-920a-297e86f08efb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Bush", - "company": "Keytheon", - "phone": "801-511-3040", - "email": "molly@keytheon.com" - }, - { - "id": 1426, - "guid": "ee7f3e1d-8b3d-491d-8467-f3786ca404bf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Creighton", - "company": "Titanirola", - "phone": "809-567-3399", - "email": "charlotte@titanirola.com" - }, - { - "id": 1427, - "guid": "6cbdc5af-869d-4405-95f0-353fa4d76fa5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mya Wesley", - "company": "Cryptotegrity", - "phone": "893-576-3290", - "email": "mya@cryptotegrity.com" - }, - { - "id": 1428, - "guid": "abe4baa8-48b3-490f-92ea-b17e620a3055", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emily Owen", - "company": "Techtron", - "phone": "850-488-2995", - "email": "emily@techtron.com" - }, - { - "id": 1429, - "guid": "89dc3e4a-7554-4e86-80f7-88ae19dc1095", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Bush", - "company": "Systheon", - "phone": "847-473-3503", - "email": "isabelle@systheon.com" - }, - { - "id": 1430, - "guid": "baea6208-e7f8-417e-90a9-72f0026b47cf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Fulton", - "company": "iOptystix", - "phone": "847-424-3894", - "email": "genesis@ioptystix.com" - }, - { - "id": 1431, - "guid": "0344adf1-2e33-47fa-8caa-d0a44fb7381a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Wainwright", - "company": "SysVenamerica", - "phone": "822-449-2611", - "email": "sydney@sysvenamerica.com" - }, - { - "id": 1432, - "guid": "38824db4-92de-45bf-bf0c-586537e80daa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Campbell", - "company": "Cryptotemplate", - "phone": "859-418-2381", - "email": "gianna@cryptotemplate.com" - }, - { - "id": 1433, - "guid": "afbcfb2c-c788-4828-98f2-fcfc78c4dd74", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Cook", - "company": "Fibrotouch", - "phone": "853-400-2191", - "email": "victoria@fibrotouch.com" - }, - { - "id": 1434, - "guid": "bec82fb0-46cd-4562-a1c4-40bd58fa87c6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Gustman", - "company": "Celgra", - "phone": "806-584-3027", - "email": "aubrey@celgra.com" - }, - { - "id": 1435, - "guid": "fd3af931-468b-42b7-adba-1b3abe4910ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Thomson", - "company": "Vencom", - "phone": "873-405-3267", - "email": "aaliyah@vencom.com" - }, - { - "id": 1436, - "guid": "7f720ef6-928c-449d-983c-b3b6cc09aff6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Morrison", - "company": "Jamrola", - "phone": "885-554-3793", - "email": "addison@jamrola.com" - }, - { - "id": 1437, - "guid": "83bfcd64-d1fb-4b2a-a89e-a4342a40671a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Waller", - "company": "Syssoft", - "phone": "806-512-3936", - "email": "addison@syssoft.com" - }, - { - "id": 1438, - "guid": "f1fc0d87-bbe9-4986-a7eb-82ae4fe50684", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Thornton", - "company": "Techtron", - "phone": "826-475-3427", - "email": "leah@techtron.com" - }, - { - "id": 1439, - "guid": "49c20d29-9223-4999-8353-b4eb27597ef8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Goldman", - "company": "Turbomart", - "phone": "837-550-3591", - "email": "hailey@turbomart.com" - }, - { - "id": 1440, - "guid": "62554376-3426-4133-bc67-30aaab51f00e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Nathan", - "company": "Quintegrity", - "phone": "898-426-2093", - "email": "melanie@quintegrity.com" - }, - { - "id": 1441, - "guid": "46da1b10-e1ca-4fe0-a387-bca696d21dc7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Michaelson", - "company": "Teknoplexon", - "phone": "825-449-2751", - "email": "madelyn@teknoplexon.com" - }, - { - "id": 1442, - "guid": "8c984161-b237-468a-8c43-4bd1639dcf55", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Stanley", - "company": "Tekcar", - "phone": "846-458-3162", - "email": "isabelle@tekcar.com" - }, - { - "id": 1443, - "guid": "87a31d48-4d47-4b34-83dd-a8650fa1f91a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Miers", - "company": "Textiqua", - "phone": "898-540-2447", - "email": "maria@textiqua.com" - }, - { - "id": 1444, - "guid": "d5648731-d4ce-4d95-b690-fb51f16006dd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Brickman", - "company": "RoboAerlogix", - "phone": "887-558-3328", - "email": "avery@roboaerlogix.com" - }, - { - "id": 1445, - "guid": "53e2fda3-6773-4297-be21-3acd92749e07", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Oswald", - "company": "Unologic", - "phone": "874-414-2922", - "email": "alyssa@unologic.com" - }, - { - "id": 1446, - "guid": "6165f097-8e70-412c-8b40-8cfbf8696b9b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katherine Otis", - "company": "Conrama", - "phone": "837-558-3986", - "email": "katherine@conrama.com" - }, - { - "id": 1447, - "guid": "7d912b06-c51f-4b57-a25f-c35bdbdb6a7a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Vaughan", - "company": "Navivacs", - "phone": "839-569-3916", - "email": "molly@navivacs.com" - }, - { - "id": 1448, - "guid": "7b6c4cfb-3ff2-4ea6-aa98-9b21f97f431b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Carrington", - "company": "Allnet", - "phone": "822-436-2083", - "email": "gianna@allnet.com" - }, - { - "id": 1449, - "guid": "3be4a3ac-b5d9-4579-9075-826248778fcd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bailey Gate", - "company": "Westgate", - "phone": "824-522-3579", - "email": "bailey@westgate.com" - }, - { - "id": 1450, - "guid": "f0895651-519b-4bec-a1ae-bb05fa7ab25e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Gustman", - "company": "Jamrola", - "phone": "876-569-2244", - "email": "alyssa@jamrola.com" - }, - { - "id": 1451, - "guid": "ce36eb61-5d6a-44b3-98d0-61c0df558641", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Oliver", - "company": "Robocomm", - "phone": "844-425-2931", - "email": "paige@robocomm.com" - }, - { - "id": 1452, - "guid": "f8b5d77f-55dc-4cfd-a9a4-ff81687a80fe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Davidson", - "company": "Keytheon", - "phone": "821-471-3436", - "email": "isabella@keytheon.com" - }, - { - "id": 1453, - "guid": "eba57d8f-91e8-41f0-b5f0-40610ae541b4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emily Otis", - "company": "Qualserve", - "phone": "837-407-2846", - "email": "emily@qualserve.com" - }, - { - "id": 1454, - "guid": "80700382-3e48-4a87-b98f-ef53b40ddbcf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Webster", - "company": "Ameritron", - "phone": "876-407-2920", - "email": "mariah@ameritron.com" - }, - { - "id": 1455, - "guid": "e445973e-7c30-4440-a16a-cddfa26b391d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Campbell", - "company": "Inridium", - "phone": "820-497-3933", - "email": "khloe@inridium.com" - }, - { - "id": 1456, - "guid": "15dd4ca8-b110-4a05-b6e8-3e1488aace5d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Nathan", - "company": "Fibroserve", - "phone": "890-570-3610", - "email": "alexa@fibroserve.com" - }, - { - "id": 1457, - "guid": "5479d17e-2393-41e0-823e-cfc6a9cacea5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Charlson", - "company": "Netsystems", - "phone": "813-488-3897", - "email": "zoe@netsystems.com" - }, - { - "id": 1458, - "guid": "4434e80a-01b7-4b1b-a701-97fb49e60aa2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Watson", - "company": "Conrama", - "phone": "884-432-3421", - "email": "alyssa@conrama.com" - }, - { - "id": 1459, - "guid": "bd3feef9-d59e-4b3c-b55b-e1036e276c99", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Morrison", - "company": "Keytheon", - "phone": "893-556-3106", - "email": "nevaeh@keytheon.com" - }, - { - "id": 1460, - "guid": "00c9dab7-f3b6-4164-a305-46f7b1abf534", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Chapman", - "company": "Cryptotemplate", - "phone": "824-509-2404", - "email": "eva@cryptotemplate.com" - }, - { - "id": 1461, - "guid": "4ed6a3a9-3fe9-4ad9-9780-3629b0f0d8f9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Molligan", - "company": "Cryptotemplate", - "phone": "898-597-3796", - "email": "kaitlyn@cryptotemplate.com" - }, - { - "id": 1462, - "guid": "8433d102-0550-4a71-904a-9a01601c233f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Smith", - "company": "Polytheon", - "phone": "834-413-2975", - "email": "katherine@polytheon.com" - }, - { - "id": 1463, - "guid": "fec76e3b-7f50-4302-acc1-59e384ebe0c3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Michaelson", - "company": "Robotemplate", - "phone": "856-479-3713", - "email": "samantha@robotemplate.com" - }, - { - "id": 1464, - "guid": "db5bb696-720d-4299-be37-2e6786f53ffb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Conors", - "company": "Safeagra", - "phone": "862-509-3742", - "email": "vanessa@safeagra.com" - }, - { - "id": 1465, - "guid": "c505b8f8-412e-4965-834b-38efb7cea105", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Cramer", - "company": "Xeicon", - "phone": "832-413-2045", - "email": "payton@xeicon.com" - }, - { - "id": 1466, - "guid": "693a4c4a-28d0-422f-bf54-96b91c376683", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Savannah Turner", - "company": "Infragraph", - "phone": "846-483-2792", - "email": "savannah@infragraph.com" - }, - { - "id": 1467, - "guid": "689cd6ea-808f-4015-af69-9c6115816290", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Morrison", - "company": "Westtomik", - "phone": "801-402-3464", - "email": "autumn@westtomik.com" - }, - { - "id": 1468, - "guid": "1981a2b0-2f59-4138-a0b0-1ff0da06359d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Julia Carter", - "company": "Hypervaco", - "phone": "881-595-3312", - "email": "julia@hypervaco.com" - }, - { - "id": 1469, - "guid": "2c202645-10b4-4c0c-bb6f-7761887ffb27", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Neal", - "company": "Airdyne", - "phone": "808-598-3548", - "email": "kaitlyn@airdyne.com" - }, - { - "id": 1470, - "guid": "2b286ee9-bf9b-4c7c-86a2-1501ff414662", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Murphy", - "company": "Truetomic", - "phone": "802-464-3978", - "email": "claire@truetomic.com" - }, - { - "id": 1471, - "guid": "2eafec63-bb5f-46bb-9081-6f79ed5fb984", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Webster", - "company": "Aluco", - "phone": "806-586-2790", - "email": "gianna@aluco.com" - }, - { - "id": 1472, - "guid": "f0d32e06-c467-4245-a587-4f633d9082d3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Owen", - "company": "Aluco", - "phone": "868-487-3243", - "email": "maya@aluco.com" - }, - { - "id": 1473, - "guid": "7bb3f2dc-91d5-46f7-a578-6d45c1205e17", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Mercer", - "company": "Systheon", - "phone": "810-570-3413", - "email": "madelyn@systheon.com" - }, - { - "id": 1474, - "guid": "1ab3fbe5-3428-48a0-96f1-a0ccd118b2ae", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Osborne", - "company": "Airdyne", - "phone": "830-488-3490", - "email": "lily@airdyne.com" - }, - { - "id": 1475, - "guid": "4dca9939-26d2-42f6-be7d-425462f02dad", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Morrison", - "company": "Westmedia", - "phone": "801-441-2406", - "email": "natalie@westmedia.com" - }, - { - "id": 1476, - "guid": "58520232-7fb4-4948-a02f-636594f01fb8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Adamson", - "company": "iQualcar", - "phone": "864-539-3570", - "email": "vanessa@iqualcar.com" - }, - { - "id": 1477, - "guid": "c967dde1-24ed-4693-865d-2871e26b90ba", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Goldman", - "company": "Unologic", - "phone": "809-570-2184", - "email": "abigail@unologic.com" - }, - { - "id": 1478, - "guid": "cb3ef335-b86d-4340-8d9c-2b597bdaf7c1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Walkman", - "company": "Orthomedia", - "phone": "864-427-2306", - "email": "sophia@orthomedia.com" - }, - { - "id": 1479, - "guid": "36f6ff4f-194c-4602-9d35-b2cdfe5bdca3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Haig", - "company": "Netsystems", - "phone": "864-406-2220", - "email": "lauren@netsystems.com" - }, - { - "id": 1480, - "guid": "2db44a59-0d76-4365-92b3-23c3922e1067", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Carter", - "company": "Infraique", - "phone": "842-590-3348", - "email": "kimberly@infraique.com" - }, - { - "id": 1481, - "guid": "6812d0fd-b52b-48c2-ba00-7696af8bce2b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Grace Davidson", - "company": "Infragraph", - "phone": "801-442-3148", - "email": "grace@infragraph.com" - }, - { - "id": 1482, - "guid": "d614440d-0ba2-42a0-8bd4-0a65527d4d79", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Campbell", - "company": "Anaframe", - "phone": "818-551-2799", - "email": "madeline@anaframe.com" - }, - { - "id": 1483, - "guid": "ad78eaf5-a9e6-466d-aff0-a894dbe5dbbc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Morrison", - "company": "Jamrola", - "phone": "826-430-2441", - "email": "avery@jamrola.com" - }, - { - "id": 1484, - "guid": "26772da7-3961-4053-8378-4e20325f5e3b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alyssa Crossman", - "company": "Ameritron", - "phone": "829-536-2087", - "email": "alyssa@ameritron.com" - }, - { - "id": 1485, - "guid": "b0045cd0-bb31-4f7e-ba50-c5e601dea1bb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Riley Waller", - "company": "Conrama", - "phone": "812-510-2363", - "email": "riley@conrama.com" - }, - { - "id": 1486, - "guid": "25872d1b-550f-47a2-a899-7aa54c342657", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Crossman", - "company": "Nanobanc", - "phone": "879-454-3411", - "email": "sophie@nanobanc.com" - }, - { - "id": 1487, - "guid": "3322fd6d-d231-453c-b57e-caf108c187e7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Wood", - "company": "Cryptotegrity", - "phone": "815-490-3795", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 1488, - "guid": "0a2a2a8c-b098-43bf-a483-0f319541edaa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Clapton", - "company": "Hypervaco", - "phone": "819-525-2301", - "email": "madelyn@hypervaco.com" - }, - { - "id": 1489, - "guid": "0380f6c2-7548-4d3c-a1a2-1bb480a8483e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Gustman", - "company": "Allnet", - "phone": "803-559-3967", - "email": "emily@allnet.com" - }, - { - "id": 1490, - "guid": "d459dcbc-332c-4ba9-95b2-830b37a5a1c5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Webster", - "company": "Titanirola", - "phone": "850-577-2917", - "email": "arianna@titanirola.com" - }, - { - "id": 1491, - "guid": "079cd871-bfce-4a5d-82a3-33ba0be2da39", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Fisher", - "company": "US Infratouch", - "phone": "801-584-2766", - "email": "leah@us infratouch.com" - }, - { - "id": 1492, - "guid": "d7f9114b-c89a-4298-bf59-6ec90389616e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Ford", - "company": "Navivacs", - "phone": "811-446-3510", - "email": "melanie@navivacs.com" - }, - { - "id": 1493, - "guid": "16f45346-fd25-47ec-9461-24e7933c1479", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Gardner", - "company": "Mescatron", - "phone": "800-555-2528", - "email": "nevaeh@mescatron.com" - }, - { - "id": 1494, - "guid": "936270b7-cd69-4a1a-8d0f-45c10f74c631", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Hailey", - "company": "Titanigraf", - "phone": "879-557-3256", - "email": "natalie@titanigraf.com" - }, - { - "id": 1495, - "guid": "2294bb98-a4c9-4c37-bb7b-929d03dd5e55", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Ford", - "company": "Westmedia", - "phone": "827-526-3297", - "email": "sophia@westmedia.com" - }, - { - "id": 1496, - "guid": "be459faf-c9ad-4395-be3a-49092464b394", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Gilson", - "company": "InfoAirway", - "phone": "887-438-3254", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 1497, - "guid": "b9c3b904-092d-47f4-b3f1-d4164f9a7a26", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emily Waller", - "company": "Thermotomic", - "phone": "821-585-3554", - "email": "emily@thermotomic.com" - }, - { - "id": 1498, - "guid": "2779032d-ad3c-4320-b0d1-a22968076a4e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Gilmore", - "company": "Westmedia", - "phone": "870-407-3099", - "email": "claire@westmedia.com" - }, - { - "id": 1499, - "guid": "1c7a10c9-fc3c-4d2e-b3cb-7a7b29fc6a97", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Freeman", - "company": "Vencom", - "phone": "869-570-2593", - "email": "emily@vencom.com" - }, - { - "id": 1500, - "guid": "1618da74-1945-430a-a8c7-fe5f9c95e7fe", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Carrington", - "company": "Vencom", - "phone": "874-549-3612", - "email": "mariah@vencom.com" - }, - { - "id": 1501, - "guid": "da1fd2b9-527e-4be7-8b03-349248685b07", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Waller", - "company": "Orthomedia", - "phone": "861-428-3422", - "email": "madeline@orthomedia.com" - }, - { - "id": 1502, - "guid": "4af9bbd9-8a31-46c9-85d0-93ade03d9034", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Morrison", - "company": "Pericenta", - "phone": "830-566-3378", - "email": "bailey@pericenta.com" - }, - { - "id": 1503, - "guid": "e1eecca5-9350-4df9-9e5a-4d52aa9a7825", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Winter", - "company": "Nanobanc", - "phone": "822-584-2736", - "email": "victoria@nanobanc.com" - }, - { - "id": 1504, - "guid": "2b9a35c1-d097-4c4f-a2ea-043b7bd6a632", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Gardner", - "company": "Rapigrafix", - "phone": "805-515-3588", - "email": "abigail@rapigrafix.com" - }, - { - "id": 1505, - "guid": "e9dfae79-fdf8-444f-b829-1f78570247cf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Ford", - "company": "Aluco", - "phone": "817-525-2181", - "email": "aubrey@aluco.com" - }, - { - "id": 1506, - "guid": "f5d7e1bb-f609-41c7-bb1c-66b4c6baf945", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Hodges", - "company": "Allphysiche", - "phone": "879-418-3076", - "email": "gabriella@allphysiche.com" - }, - { - "id": 1507, - "guid": "dc741104-0a3c-4fa0-86e5-82e26b1789f2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kayla Calhoun", - "company": "Orthosoft", - "phone": "833-591-2757", - "email": "kayla@orthosoft.com" - }, - { - "id": 1508, - "guid": "84fc73ff-5623-47ce-9f9b-e5b962994f63", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Goodman", - "company": "Truegate", - "phone": "875-577-3301", - "email": "maria@truegate.com" - }, - { - "id": 1509, - "guid": "83a2c14a-233b-44f1-a9f9-3c615f8aabeb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Gill", - "company": "Systheon", - "phone": "886-560-2604", - "email": "molly@systheon.com" - }, - { - "id": 1510, - "guid": "04c73f1c-a43d-48cd-bef1-10b71cd04b3d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Chloe Daniels", - "company": "Fibrotouch", - "phone": "866-531-2729", - "email": "chloe@fibrotouch.com" - }, - { - "id": 1511, - "guid": "bfcc829b-1663-46b5-b575-fb1bad73af52", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexandra Higgins", - "company": "US Omnigraphik", - "phone": "894-405-3096", - "email": "alexandra@us omnigraphik.com" - }, - { - "id": 1512, - "guid": "2d09750b-ddab-4d0f-9537-0c66eec13260", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Cramer", - "company": "OpKeycomm", - "phone": "841-494-2041", - "email": "taylor@opkeycomm.com" - }, - { - "id": 1513, - "guid": "cbeb9cfb-dc72-40ca-adf1-3df6ebbb26f4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Croftoon", - "company": "Genland", - "phone": "851-436-2520", - "email": "abigail@genland.com" - }, - { - "id": 1514, - "guid": "2a7cb53c-e98b-4f6f-a6a4-cece0c9a7f44", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Carrington", - "company": "Polytheon", - "phone": "808-463-3170", - "email": "sofia@polytheon.com" - }, - { - "id": 1515, - "guid": "bfc827d7-3215-43d6-aeb7-46c4e2d0e395", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Gilbert", - "company": "SysVenamerica", - "phone": "853-493-2464", - "email": "payton@sysvenamerica.com" - }, - { - "id": 1516, - "guid": "4091ca1b-a4a3-4345-ab6d-0ff6e72b04d5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Chandter", - "company": "Rapigrafix", - "phone": "817-577-3953", - "email": "brooklyn@rapigrafix.com" - }, - { - "id": 1517, - "guid": "163941fa-8fa1-4de1-8fc3-96941d771a77", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Wainwright", - "company": "Allnet", - "phone": "862-525-2416", - "email": "sophie@allnet.com" - }, - { - "id": 1518, - "guid": "ef968e70-d9b4-4066-bb8a-6ce15de402db", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Smith", - "company": "Videobanc", - "phone": "830-486-2707", - "email": "amelia@videobanc.com" - }, - { - "id": 1519, - "guid": "498a8312-6104-4f70-b507-cf232ad8e6c3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Winter", - "company": "Idmax", - "phone": "885-439-3495", - "email": "evelyn@idmax.com" - }, - { - "id": 1520, - "guid": "0e9c1fee-f1b0-41fa-a332-b4c43d17a945", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Carey", - "company": "Robotomic", - "phone": "823-454-2925", - "email": "samantha@robotomic.com" - }, - { - "id": 1521, - "guid": "b6ec1bf4-4052-4ad0-99ff-7bff841f0401", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Hoggarth", - "company": "Mescatron", - "phone": "854-497-3757", - "email": "zoey@mescatron.com" - }, - { - "id": 1522, - "guid": "3a920dfd-d0cd-4e3b-b0cb-d5836592b755", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Smith", - "company": "Hypervaco", - "phone": "881-542-2967", - "email": "ava@hypervaco.com" - }, - { - "id": 1523, - "guid": "77bb697d-46ea-4a28-bcff-22ea99fb35ff", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Audrey Clapton", - "company": "Allphysiche", - "phone": "802-434-2569", - "email": "audrey@allphysiche.com" - }, - { - "id": 1524, - "guid": "79a64f60-0fa5-4173-aeee-db0d983928d2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mya Thomson", - "company": "Unconix", - "phone": "854-418-2984", - "email": "mya@unconix.com" - }, - { - "id": 1525, - "guid": "de652779-03d3-40bb-85ea-24805069d186", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Nash", - "company": "Westgate", - "phone": "812-522-2838", - "email": "caroline@westgate.com" - }, - { - "id": 1526, - "guid": "a3be5607-d578-4ce5-b09b-335259cf433e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Gilson", - "company": "Raylog", - "phone": "891-433-2589", - "email": "serenity@raylog.com" - }, - { - "id": 1527, - "guid": "5632a75b-f83c-49fe-83a2-dfc9708499cc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Gilbert", - "company": "Pacwest", - "phone": "836-448-3139", - "email": "andrea@pacwest.com" - }, - { - "id": 1528, - "guid": "6c219bfe-6672-48f0-a8fe-287c184f916f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Calhoun", - "company": "Navivacs", - "phone": "861-546-2468", - "email": "valeria@navivacs.com" - }, - { - "id": 1529, - "guid": "4d108a65-b9b6-454e-80e8-c56223f73b83", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Watson", - "company": "Keytheon", - "phone": "871-558-3497", - "email": "avery@keytheon.com" - }, - { - "id": 1530, - "guid": "fd353b2b-1154-4056-85e0-fb993a5ca1ea", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Winter", - "company": "iOptystix", - "phone": "868-428-2822", - "email": "aubrey@ioptystix.com" - }, - { - "id": 1531, - "guid": "13305b53-a606-497c-8b0b-1952255d421e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Miers", - "company": "Celgra", - "phone": "861-471-2981", - "email": "alexis@celgra.com" - }, - { - "id": 1532, - "guid": "b33b2a62-00c6-49e1-87b0-4d0da3894816", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Chandter", - "company": "Rapigrafix", - "phone": "841-472-2548", - "email": "khloe@rapigrafix.com" - }, - { - "id": 1533, - "guid": "146668dd-ebd9-40b5-bbf9-7e2c63f2bb6b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Carroll", - "company": "Mescatron", - "phone": "871-598-3025", - "email": "trinity@mescatron.com" - }, - { - "id": 1534, - "guid": "8ba98948-4ff1-4ea6-80d6-e6b9844a493b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Osborne", - "company": "iMedconik", - "phone": "872-553-3527", - "email": "faith@imedconik.com" - }, - { - "id": 1535, - "guid": "885ddd50-d0ec-4344-b423-9daa721a81c2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Natalie Day", - "company": "Westgate", - "phone": "840-582-2259", - "email": "natalie@westgate.com" - }, - { - "id": 1536, - "guid": "8ef68db1-0a36-4d23-a552-8e307a39611f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Gill", - "company": "Westtomik", - "phone": "833-536-2311", - "email": "charlotte@westtomik.com" - }, - { - "id": 1537, - "guid": "7dea7d6e-92b3-4239-a5b8-13531e6240b7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Smith", - "company": "Turbomart", - "phone": "834-590-3951", - "email": "emma@turbomart.com" - }, - { - "id": 1538, - "guid": "5b6c4334-15ee-4ea4-a7e4-e25f318e2faa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Hancock", - "company": "Transtouch", - "phone": "822-455-3419", - "email": "sofia@transtouch.com" - }, - { - "id": 1539, - "guid": "551b842a-70c8-4f09-bfd7-c151fd77ea07", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Murphy", - "company": "Robocomm", - "phone": "870-511-3814", - "email": "leah@robocomm.com" - }, - { - "id": 1540, - "guid": "2112d615-0660-4097-a180-f62fcac3d428", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kayla Gilson", - "company": "Qualserve", - "phone": "845-567-3457", - "email": "kayla@qualserve.com" - }, - { - "id": 1541, - "guid": "231d7ad0-63b6-4336-a596-658510e4b671", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Watson", - "company": "Allnet", - "phone": "825-421-3301", - "email": "vanessa@allnet.com" - }, - { - "id": 1542, - "guid": "4009d043-29f1-4950-b79a-2cdb2f8047f4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ava Owen", - "company": "Orthomedia", - "phone": "812-508-3045", - "email": "ava@orthomedia.com" - }, - { - "id": 1543, - "guid": "85d8cacd-f99f-4cee-9e60-bb656370cd13", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Thornton", - "company": "SysUSA", - "phone": "869-521-3505", - "email": "grace@sysusa.com" - }, - { - "id": 1544, - "guid": "f7edf8d1-c56f-45bc-90a9-c2ac95076008", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Miers", - "company": "Cryptotemplate", - "phone": "897-525-2646", - "email": "sophie@cryptotemplate.com" - }, - { - "id": 1545, - "guid": "f90108ff-435b-40cd-961d-f1f088caf959", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Creighton", - "company": "Superscope", - "phone": "898-555-3082", - "email": "serenity@superscope.com" - }, - { - "id": 1546, - "guid": "4752f779-8ec1-4330-a3b6-87e31ec65658", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Vaughan", - "company": "Videobanc", - "phone": "870-578-2425", - "email": "ella@videobanc.com" - }, - { - "id": 1547, - "guid": "a3a2eb84-3b99-4cd5-a974-089f21922de0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Haig", - "company": "Textiqua", - "phone": "844-469-2582", - "email": "sofia@textiqua.com" - }, - { - "id": 1548, - "guid": "22eaa3cf-f493-4ca6-bf81-53c24948d100", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Goldman", - "company": "Textiqua", - "phone": "818-458-3647", - "email": "emma@textiqua.com" - }, - { - "id": 1549, - "guid": "09533436-ed7b-4dbc-bc26-ca412686a929", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Miers", - "company": "Safeagra", - "phone": "818-523-2345", - "email": "emma@safeagra.com" - }, - { - "id": 1550, - "guid": "d81b4e66-bdea-4492-83b1-966489a2d00a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Calhoun", - "company": "Airdyne", - "phone": "870-581-2102", - "email": "sophie@airdyne.com" - }, - { - "id": 1551, - "guid": "dff50cd6-e0a6-4f5a-8f49-964a5f9a91de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Gill", - "company": "Jamrola", - "phone": "854-487-3136", - "email": "lily@jamrola.com" - }, - { - "id": 1552, - "guid": "488d6a04-54db-4e33-884a-7e0795647fcf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Cook", - "company": "Inridium", - "phone": "867-557-3580", - "email": "savannah@inridium.com" - }, - { - "id": 1553, - "guid": "25bcbab6-6c22-400f-bcbe-077dc0f3b929", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Day", - "company": "Hypervaco", - "phone": "871-568-2522", - "email": "gabrielle@hypervaco.com" - }, - { - "id": 1554, - "guid": "b50f1389-b8c8-4087-9f92-1b2aaaa72f14", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Gustman", - "company": "Idmax", - "phone": "854-460-2455", - "email": "abigail@idmax.com" - }, - { - "id": 1555, - "guid": "838a896d-2bad-4ec0-a821-7c829e635869", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Sherlock", - "company": "Mescaridic", - "phone": "843-584-2563", - "email": "melanie@mescaridic.com" - }, - { - "id": 1556, - "guid": "15a138fc-e45d-4b96-b99d-fa38f5f8bdbe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Hardman", - "company": "iEnland", - "phone": "836-508-3449", - "email": "layla@ienland.com" - }, - { - "id": 1557, - "guid": "142a11fb-749d-44e3-b758-36de301baf28", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Croftoon", - "company": "Openserve", - "phone": "828-552-3532", - "email": "madison@openserve.com" - }, - { - "id": 1558, - "guid": "b8eaea30-8f04-4068-8187-84f665d7d3a0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Molly Milton", - "company": "Multitiqua", - "phone": "877-496-3425", - "email": "molly@multitiqua.com" - }, - { - "id": 1559, - "guid": "a4ed3489-9f42-487a-ace5-ec44e3cc62a8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Brooks", - "company": "Keytheon", - "phone": "821-465-2279", - "email": "avery@keytheon.com" - }, - { - "id": 1560, - "guid": "3180809d-8471-4bb1-8d0a-9bb7d6aa8a3f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madeline Hawkins", - "company": "eEyetanic", - "phone": "857-522-2490", - "email": "madeline@eeyetanic.com" - }, - { - "id": 1561, - "guid": "a13875ea-13b5-4aff-a005-caa18c8b0f78", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Morrison", - "company": "Gigaura", - "phone": "877-514-3244", - "email": "eva@gigaura.com" - }, - { - "id": 1562, - "guid": "6a670976-3092-4d76-9125-72525293662f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Fulton", - "company": "Rapigrafix", - "phone": "871-434-3943", - "email": "layla@rapigrafix.com" - }, - { - "id": 1563, - "guid": "b0eb9341-4505-4c64-82ad-ab7b2bec24d7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Hamphrey", - "company": "Videobanc", - "phone": "897-481-2058", - "email": "gabriella@videobanc.com" - }, - { - "id": 1564, - "guid": "46363987-2c1d-4d9a-9fc4-f4abe7e29b59", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Mercer", - "company": "SysVenamerica", - "phone": "826-491-3247", - "email": "kaitlyn@sysvenamerica.com" - }, - { - "id": 1565, - "guid": "cc5360ff-de8f-4197-9079-cea602884d03", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Chesterton", - "company": "Proline", - "phone": "878-403-2143", - "email": "isabelle@proline.com" - }, - { - "id": 1566, - "guid": "a0c0f503-e6fd-4fe3-8b87-8279fc389e7f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Carroll", - "company": "Quintegrity", - "phone": "802-422-3858", - "email": "kaitlyn@quintegrity.com" - }, - { - "id": 1567, - "guid": "65b08ee9-8ff2-4689-8f85-7dc450612d4c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Campbell", - "company": "Unologic", - "phone": "841-527-2531", - "email": "bailey@unologic.com" - }, - { - "id": 1568, - "guid": "8f720f49-ade0-4feb-998b-14def8d75c07", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Walkman", - "company": "Xeicon", - "phone": "876-518-2418", - "email": "lily@xeicon.com" - }, - { - "id": 1569, - "guid": "ddfd88f4-1440-4ffc-8940-15182e7de623", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Miln", - "company": "Ventanium", - "phone": "857-565-2079", - "email": "caroline@ventanium.com" - }, - { - "id": 1570, - "guid": "23fb4fec-6b17-4c37-9c60-a15526ef441d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Carey", - "company": "Proline", - "phone": "821-536-3483", - "email": "sophia@proline.com" - }, - { - "id": 1571, - "guid": "1df2feaf-9ff7-43dc-a6e6-1f901d88aa34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Murphy", - "company": "Gigaura", - "phone": "808-438-2670", - "email": "emma@gigaura.com" - }, - { - "id": 1572, - "guid": "5f47daf6-c724-485c-a495-9906ea36ffdf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sofia Calhoun", - "company": "Entcast", - "phone": "898-511-2068", - "email": "sofia@entcast.com" - }, - { - "id": 1573, - "guid": "5208c7f1-cbb9-4d19-a2c5-f84804cc6700", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ella Hamphrey", - "company": "iSkyvaco", - "phone": "803-457-3422", - "email": "ella@iskyvaco.com" - }, - { - "id": 1574, - "guid": "7b4c9e9d-2cfc-4ff0-bed9-de79017768ae", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Croftoon", - "company": "Westmedia", - "phone": "839-561-3889", - "email": "alexis@westmedia.com" - }, - { - "id": 1575, - "guid": "0293a48d-6379-4405-b4dd-5caa4606e7ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Goldman", - "company": "OpKeycomm", - "phone": "833-577-3967", - "email": "addison@opkeycomm.com" - }, - { - "id": 1576, - "guid": "4fa350d7-102a-4fe3-ad8d-d99c2e43263c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Milton", - "company": "RoboAerlogix", - "phone": "841-522-2456", - "email": "gabriella@roboaerlogix.com" - }, - { - "id": 1577, - "guid": "2f1e8c04-b8fa-44c4-a71d-1ef7c5f01f17", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Crossman", - "company": "Robotemplate", - "phone": "816-594-2414", - "email": "bailey@robotemplate.com" - }, - { - "id": 1578, - "guid": "604af9ed-9cbd-4a2f-ad7e-7abcbe874acb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Cramer", - "company": "Multitiqua", - "phone": "823-408-2152", - "email": "alyssa@multitiqua.com" - }, - { - "id": 1579, - "guid": "afbe6c61-7d3b-4a08-93cc-2488fc8be20f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Murphy", - "company": "Entcast", - "phone": "866-406-3127", - "email": "khloe@entcast.com" - }, - { - "id": 1580, - "guid": "4e49a5db-2063-4b67-9b69-c8f8a79f3202", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Gilmore", - "company": "RoboAerlogix", - "phone": "811-584-3484", - "email": "julia@roboaerlogix.com" - }, - { - "id": 1581, - "guid": "f70e54b4-f7af-4fcd-af8a-0533af60b04c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Chesterton", - "company": "Allnet", - "phone": "888-540-2819", - "email": "aubrey@allnet.com" - }, - { - "id": 1582, - "guid": "a579d214-6430-4faa-a430-a3a42584c12f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Wesley", - "company": "Rapigrafix", - "phone": "825-494-3282", - "email": "bella@rapigrafix.com" - }, - { - "id": 1583, - "guid": "8c53e680-5e22-4777-aa8e-10b76eb317f8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Vance", - "company": "Idmax", - "phone": "859-584-2472", - "email": "leah@idmax.com" - }, - { - "id": 1584, - "guid": "45de76b7-282a-42d9-ab50-898b0eecad31", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Molligan", - "company": "US Infratouch", - "phone": "841-510-3516", - "email": "rachel@us infratouch.com" - }, - { - "id": 1585, - "guid": "4ae97586-49ed-4ff7-905f-01b412e044fd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Bush", - "company": "US Omnigraphik", - "phone": "852-433-2378", - "email": "katelyn@us omnigraphik.com" - }, - { - "id": 1586, - "guid": "a5de585f-aac1-4ded-b3bd-f7275b879e35", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Miers", - "company": "Genland", - "phone": "835-502-3944", - "email": "andrea@genland.com" - }, - { - "id": 1587, - "guid": "d63df234-38b1-4641-863e-7d7eef702912", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hailey Adamson", - "company": "Aprama", - "phone": "893-451-2584", - "email": "hailey@aprama.com" - }, - { - "id": 1588, - "guid": "c27ef7a7-f9f3-4c9b-88c5-a731416bec47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Mercer", - "company": "Jamrola", - "phone": "899-583-3634", - "email": "emma@jamrola.com" - }, - { - "id": 1589, - "guid": "3949c517-4f69-4e16-8713-5b1c94cd04b8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Wood", - "company": "Netseco", - "phone": "875-486-3048", - "email": "kayla@netseco.com" - }, - { - "id": 1590, - "guid": "c225c398-5ab4-4e11-a623-9cefcd73061b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Galbraith", - "company": "Enlogia", - "phone": "868-593-3139", - "email": "lillian@enlogia.com" - }, - { - "id": 1591, - "guid": "9e9f7c20-e1a5-4030-843b-674ff7de9a60", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Campbell", - "company": "Navivacs", - "phone": "821-552-2849", - "email": "allison@navivacs.com" - }, - { - "id": 1592, - "guid": "c0d37449-b0fe-4e76-9e5d-893b49074bdf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Milton", - "company": "Jamrola", - "phone": "894-471-2027", - "email": "lillian@jamrola.com" - }, - { - "id": 1593, - "guid": "ad4bcd77-43d8-4b16-afb8-77dc237e9e4b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Carter", - "company": "Syssoft", - "phone": "850-506-3386", - "email": "alexandra@syssoft.com" - }, - { - "id": 1594, - "guid": "51667a75-a320-4c95-b087-73bdb5471cda", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Chesterton", - "company": "Multitiqua", - "phone": "849-473-2022", - "email": "katherine@multitiqua.com" - }, - { - "id": 1595, - "guid": "03980a76-730c-4dff-9ae2-2716278af209", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Oliver", - "company": "Allphysiche", - "phone": "888-468-2572", - "email": "angelina@allphysiche.com" - }, - { - "id": 1596, - "guid": "1e1605e3-33a1-42e4-9844-25f1f06fa572", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Osborne", - "company": "Skydata", - "phone": "846-443-2607", - "email": "victoria@skydata.com" - }, - { - "id": 1597, - "guid": "82a29fc4-3fcc-4739-aac8-974d64f6f7ae", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Otis", - "company": "Aluco", - "phone": "834-443-3026", - "email": "ashley@aluco.com" - }, - { - "id": 1598, - "guid": "96246c89-3288-469e-8585-f33188534245", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Youmans", - "company": "Mescatron", - "phone": "876-494-3581", - "email": "maria@mescatron.com" - }, - { - "id": 1599, - "guid": "ae238cee-3f19-4805-84f8-66fac2df7ddb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ella Hawkins", - "company": "Qualserve", - "phone": "842-555-3080", - "email": "ella@qualserve.com" - }, - { - "id": 1600, - "guid": "83c09c13-8921-4acb-a059-1392596dfa46", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Milton", - "company": "Openserve", - "phone": "878-496-3190", - "email": "leah@openserve.com" - }, - { - "id": 1601, - "guid": "4a5bdd61-76f5-46a3-99b9-539d9797f14c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Croftoon", - "company": "iMedconik", - "phone": "844-553-3930", - "email": "isabella@imedconik.com" - }, - { - "id": 1602, - "guid": "482dd64d-d9e7-4cc1-92a2-4a5e3948a3a2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Walkman", - "company": "Allphysiche", - "phone": "804-508-3964", - "email": "mariah@allphysiche.com" - }, - { - "id": 1603, - "guid": "185f2726-1844-47d4-8188-13a26cf9b3aa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Watson", - "company": "Netseco", - "phone": "811-581-3065", - "email": "aaliyah@netseco.com" - }, - { - "id": 1604, - "guid": "d47baa7e-547c-4c37-afcd-fff845d1a954", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Morrison", - "company": "Skydata", - "phone": "847-412-2336", - "email": "katherine@skydata.com" - }, - { - "id": 1605, - "guid": "059c5f66-537c-49c0-b645-0ec879fdd506", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Gill", - "company": "Anaframe", - "phone": "802-413-3311", - "email": "ashley@anaframe.com" - }, - { - "id": 1606, - "guid": "847f457b-1fed-49b9-9a9a-24ea9504b9af", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Nelson", - "company": "Truetomic", - "phone": "830-512-2262", - "email": "destiny@truetomic.com" - }, - { - "id": 1607, - "guid": "59ba8251-60a3-4a14-9da4-88994cecce5e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Walkman", - "company": "RoboAerlogix", - "phone": "872-447-3371", - "email": "brooklyn@roboaerlogix.com" - }, - { - "id": 1608, - "guid": "c609d0f1-1d1a-487c-ad61-4c528b23b787", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Vance", - "company": "US Omnigraphik", - "phone": "893-523-2994", - "email": "abigail@us omnigraphik.com" - }, - { - "id": 1609, - "guid": "4a306a8a-fe45-4ef6-9540-2897909eb399", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Oliver", - "company": "Tekcar", - "phone": "873-423-3175", - "email": "amelia@tekcar.com" - }, - { - "id": 1610, - "guid": "3f646959-21a2-4832-a6fe-5dd44fb7dcf6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Molligan", - "company": "Fibroserve", - "phone": "838-415-3461", - "email": "ella@fibroserve.com" - }, - { - "id": 1611, - "guid": "3d692923-2582-4ef1-ae34-2a034f442824", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Molligan", - "company": "Infragraph", - "phone": "813-458-2116", - "email": "avery@infragraph.com" - }, - { - "id": 1612, - "guid": "5dc8a436-e959-4903-a0e6-d08040a7e902", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ashley Chesterton", - "company": "OpKeycomm", - "phone": "893-499-2793", - "email": "ashley@opkeycomm.com" - }, - { - "id": 1613, - "guid": "209f9890-27ef-4dc5-b1b2-06a15fff24ef", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Winter", - "company": "Idmax", - "phone": "845-490-3728", - "email": "julia@idmax.com" - }, - { - "id": 1614, - "guid": "b2ac1c91-2867-412c-be7a-f0af35138910", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Smith", - "company": "Jamconik", - "phone": "858-454-3358", - "email": "lily@jamconik.com" - }, - { - "id": 1615, - "guid": "22844b87-953c-4d4b-9045-d5c58081613a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Chapman", - "company": "Steganoconiche", - "phone": "806-424-3189", - "email": "andrea@steganoconiche.com" - }, - { - "id": 1616, - "guid": "94d85464-ec42-4afa-b2a6-c5669e10aaa4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Oldridge", - "company": "Robotemplate", - "phone": "862-550-3184", - "email": "katelyn@robotemplate.com" - }, - { - "id": 1617, - "guid": "d0426ed4-2712-4ac1-b0bd-34711002841f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexandra Adamson", - "company": "US Omnigraphik", - "phone": "897-531-3588", - "email": "alexandra@us omnigraphik.com" - }, - { - "id": 1618, - "guid": "8bf97bf7-3ab2-4928-b1fd-cb0a6dc06420", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Turner", - "company": "Quintegrity", - "phone": "867-431-3169", - "email": "layla@quintegrity.com" - }, - { - "id": 1619, - "guid": "04ad27a2-4cf9-48c5-b457-11c860b82333", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Wainwright", - "company": "Technogra", - "phone": "819-431-3099", - "email": "autumn@technogra.com" - }, - { - "id": 1620, - "guid": "711f540e-3dca-4359-8039-33a6f6f09689", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Brickman", - "company": "Techtron", - "phone": "838-523-3448", - "email": "evelyn@techtron.com" - }, - { - "id": 1621, - "guid": "f891394c-c4d8-4634-80d0-2e9e514b5dfc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Gate", - "company": "Conrama", - "phone": "898-561-2344", - "email": "avery@conrama.com" - }, - { - "id": 1622, - "guid": "a9c6ce33-dd67-4529-b971-141761c31390", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Taylor Galbraith", - "company": "Jamrola", - "phone": "845-478-2436", - "email": "taylor@jamrola.com" - }, - { - "id": 1623, - "guid": "ef090138-50e3-4413-812d-5386e654eb80", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Gilson", - "company": "Multitiqua", - "phone": "876-593-3595", - "email": "katherine@multitiqua.com" - }, - { - "id": 1624, - "guid": "afdf1735-7256-4f74-babb-a11cf278618a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Chloe Brooks", - "company": "Anaframe", - "phone": "802-516-2270", - "email": "chloe@anaframe.com" - }, - { - "id": 1625, - "guid": "e7a746a1-5126-4edb-8cf8-8e89284483dd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Gate", - "company": "Venconix", - "phone": "813-495-3144", - "email": "autumn@venconix.com" - }, - { - "id": 1626, - "guid": "50a163ae-a276-4274-b9b4-ea150fee9323", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Goodman", - "company": "InfoAirway", - "phone": "843-526-2143", - "email": "sophie@infoairway.com" - }, - { - "id": 1627, - "guid": "6901fb9d-73d0-465f-9e03-ef246411b840", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Young", - "company": "Westmedia", - "phone": "889-436-3772", - "email": "mackenzie@westmedia.com" - }, - { - "id": 1628, - "guid": "0638b76d-dd4e-48a6-a8ee-8ff0d834fb87", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Hawkins", - "company": "Truegate", - "phone": "805-408-3941", - "email": "victoria@truegate.com" - }, - { - "id": 1629, - "guid": "7f4ebb45-e85e-4378-ad53-bd9ce07f6dd9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alyssa Chesterton", - "company": "Robotemplate", - "phone": "877-536-3585", - "email": "alyssa@robotemplate.com" - }, - { - "id": 1630, - "guid": "54b5bf98-b853-4af4-bd2e-9ac4e2dda828", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Goodman", - "company": "Netseco", - "phone": "898-579-3169", - "email": "olivia@netseco.com" - }, - { - "id": 1631, - "guid": "a97e0476-090b-4c99-99a2-43d16a4ca22c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Thornton", - "company": "Anaframe", - "phone": "853-455-3624", - "email": "sofia@anaframe.com" - }, - { - "id": 1632, - "guid": "60899eaa-ce11-4ed3-bf43-5306dba4b43a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Youmans", - "company": "Keytheon", - "phone": "851-469-3419", - "email": "lauren@keytheon.com" - }, - { - "id": 1633, - "guid": "aed62a85-f82f-4e88-acab-a65bfb704d99", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Thomson", - "company": "Techtron", - "phone": "878-472-2812", - "email": "taylor@techtron.com" - }, - { - "id": 1634, - "guid": "2b54cf8b-a825-4911-a53b-14998233c36c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Wayne", - "company": "Orthosoft", - "phone": "800-570-3632", - "email": "genesis@orthosoft.com" - }, - { - "id": 1635, - "guid": "7f2fdaae-ecb5-441d-985f-20b565a2d63d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Chapman", - "company": "InfoAirway", - "phone": "874-534-2889", - "email": "hailey@infoairway.com" - }, - { - "id": 1636, - "guid": "620eafbf-7a29-4598-a5a2-98a503388f1a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Waller", - "company": "Infragraph", - "phone": "828-470-2295", - "email": "lillian@infragraph.com" - }, - { - "id": 1637, - "guid": "2e19371b-9bc0-4825-b843-027fb404c04a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Morrison", - "company": "Cryptotegrity", - "phone": "862-455-3899", - "email": "aaliyah@cryptotegrity.com" - }, - { - "id": 1638, - "guid": "272fd923-0298-48ee-925e-ac722b2e789b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Wallace", - "company": "Netseco", - "phone": "884-503-2549", - "email": "maria@netseco.com" - }, - { - "id": 1639, - "guid": "5b55e499-970b-460b-8e35-6f0bb4d8d483", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Miller", - "company": "Turbomart", - "phone": "832-529-3017", - "email": "abigail@turbomart.com" - }, - { - "id": 1640, - "guid": "1b45a21e-174c-41e9-a656-791fd476c53e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa White", - "company": "Anaframe", - "phone": "849-530-3639", - "email": "alyssa@anaframe.com" - }, - { - "id": 1641, - "guid": "659fad2b-c266-4691-b14a-d4c0d0b43243", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Walkman", - "company": "Compuamerica", - "phone": "820-490-3201", - "email": "mariah@compuamerica.com" - }, - { - "id": 1642, - "guid": "5be03c42-e25e-456c-9478-cc1a67c8afb2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Higgins", - "company": "Entcast", - "phone": "818-547-2319", - "email": "charlotte@entcast.com" - }, - { - "id": 1643, - "guid": "f7288de1-5548-431a-9f13-b43a2513c006", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Nathan", - "company": "Skydata", - "phone": "869-562-3108", - "email": "faith@skydata.com" - }, - { - "id": 1644, - "guid": "431de260-0a4e-4d97-a734-ea8ad5599197", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Brooks", - "company": "Cryptotemplate", - "phone": "813-549-2130", - "email": "maya@cryptotemplate.com" - }, - { - "id": 1645, - "guid": "81126a25-411f-4ed4-b48f-6132d4cb53ef", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Oldman", - "company": "Truetomic", - "phone": "873-463-2065", - "email": "gabriella@truetomic.com" - }, - { - "id": 1646, - "guid": "219d6464-5fae-41bf-832c-45744f283bae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Hailey", - "company": "Venconix", - "phone": "893-532-2269", - "email": "grace@venconix.com" - }, - { - "id": 1647, - "guid": "a925ecc0-4518-439d-8ef5-1c1b035ec1b0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Cramer", - "company": "Teratopia", - "phone": "856-530-3419", - "email": "mackenzie@teratopia.com" - }, - { - "id": 1648, - "guid": "1e30d0ef-0d04-436b-b954-63f71ca3b84d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Fulton", - "company": "Conotomics", - "phone": "816-403-2910", - "email": "aubrey@conotomics.com" - }, - { - "id": 1649, - "guid": "c9725dd5-34da-42bf-a1c9-77b44dc4e606", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Murphy", - "company": "SysVenamerica", - "phone": "868-471-2174", - "email": "maya@sysvenamerica.com" - }, - { - "id": 1650, - "guid": "7118f973-d722-4fb8-9372-707f06f59aef", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Creighton", - "company": "Multitiqua", - "phone": "866-531-3400", - "email": "alyssa@multitiqua.com" - }, - { - "id": 1651, - "guid": "90d9d96a-64ed-4be8-a8b0-16f1e0df22d5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Hardman", - "company": "Jamrola", - "phone": "846-527-2188", - "email": "samantha@jamrola.com" - }, - { - "id": 1652, - "guid": "8e87ecd4-478d-4a11-bddd-05f31d7109a5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Goodman", - "company": "InfoAirway", - "phone": "821-572-2369", - "email": "layla@infoairway.com" - }, - { - "id": 1653, - "guid": "bf36a590-843b-4d26-83ec-b133ea1f27bf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Thornton", - "company": "Aluco", - "phone": "827-447-2969", - "email": "bailey@aluco.com" - }, - { - "id": 1654, - "guid": "edb22104-c7f7-45de-bd35-397f63c4ee89", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Oldman", - "company": "Infragraph", - "phone": "884-592-2258", - "email": "amelia@infragraph.com" - }, - { - "id": 1655, - "guid": "cf467248-cc28-4d4f-86fb-5d447a07cdab", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Mercer", - "company": "Conotomics", - "phone": "818-548-3117", - "email": "addison@conotomics.com" - }, - { - "id": 1656, - "guid": "b3a66d50-7215-47c4-a2d7-19a1c9c08eba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Waller", - "company": "Robotemplate", - "phone": "886-474-2573", - "email": "alexandra@robotemplate.com" - }, - { - "id": 1657, - "guid": "7cf3d96b-fb9c-4fc1-ab09-d6d455eaa562", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Winter", - "company": "Generola", - "phone": "806-504-3180", - "email": "bailey@generola.com" - }, - { - "id": 1658, - "guid": "d8ae00f4-2e4d-4c07-99ad-ed54800c3be6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Milton", - "company": "Celgra", - "phone": "815-401-2994", - "email": "katelyn@celgra.com" - }, - { - "id": 1659, - "guid": "8541bebf-f13c-4b48-8068-35d6b539bdcd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Charlson", - "company": "Safeagra", - "phone": "810-413-3567", - "email": "madison@safeagra.com" - }, - { - "id": 1660, - "guid": "0b29b064-9ba1-4465-b989-509f25eee3e6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Croftoon", - "company": "Jamconik", - "phone": "876-574-2458", - "email": "melanie@jamconik.com" - }, - { - "id": 1661, - "guid": "ec12e0af-ab12-4ce6-9d29-c0da6a1c1b83", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Hoggarth", - "company": "Videobanc", - "phone": "818-451-3902", - "email": "hannah@videobanc.com" - }, - { - "id": 1662, - "guid": "e2a0bb1e-0c59-427a-98e5-a781b1f91634", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Gate", - "company": "Allphysiche", - "phone": "868-526-3501", - "email": "camila@allphysiche.com" - }, - { - "id": 1663, - "guid": "944a6e1e-e49b-4b48-8e73-648d19c127e9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Chapman", - "company": "Xeicon", - "phone": "836-491-2991", - "email": "molly@xeicon.com" - }, - { - "id": 1664, - "guid": "1d9aeabe-7356-4baf-a8ff-7528246e1695", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Higgins", - "company": "Sontopia", - "phone": "815-411-2293", - "email": "nevaeh@sontopia.com" - }, - { - "id": 1665, - "guid": "e0208923-59ce-46e0-b998-4b97cc60005a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Webster", - "company": "Titanigraf", - "phone": "864-451-3014", - "email": "kimberly@titanigraf.com" - }, - { - "id": 1666, - "guid": "1ecaf26a-e66a-42b4-bf19-022904615ae8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Crossman", - "company": "Netseco", - "phone": "848-451-2641", - "email": "nevaeh@netseco.com" - }, - { - "id": 1667, - "guid": "4a482243-3313-473c-982a-8ac1ad8fe522", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katelyn Waller", - "company": "Superscope", - "phone": "837-470-2693", - "email": "katelyn@superscope.com" - }, - { - "id": 1668, - "guid": "9597c6fc-481e-421a-b83f-79417c5dcdd6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Watson", - "company": "eEyetanic", - "phone": "843-488-3099", - "email": "serenity@eeyetanic.com" - }, - { - "id": 1669, - "guid": "6d01ac08-2ab0-44be-b9ed-ae85700ca4eb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Winter", - "company": "Techtron", - "phone": "822-417-3546", - "email": "maria@techtron.com" - }, - { - "id": 1670, - "guid": "1eb876d2-589a-46e2-9f37-fe843c5b3ade", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Wood", - "company": "Hypervaco", - "phone": "804-568-3740", - "email": "gianna@hypervaco.com" - }, - { - "id": 1671, - "guid": "3dff7de3-3c56-4b56-a1bd-04492d9386ee", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Chandter", - "company": "Unologic", - "phone": "882-401-2452", - "email": "valeria@unologic.com" - }, - { - "id": 1672, - "guid": "aa0d06e0-f036-43e4-a585-77b04a6418a1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Ford", - "company": "Fibrotopia", - "phone": "891-542-2649", - "email": "rachel@fibrotopia.com" - }, - { - "id": 1673, - "guid": "f2c095ca-03be-4041-9edd-01208fc27772", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Vance", - "company": "Teknoplexon", - "phone": "876-449-2414", - "email": "leah@teknoplexon.com" - }, - { - "id": 1674, - "guid": "73a759de-49d4-4c94-83a0-17a0856802f9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Brooks", - "company": "iEnland", - "phone": "867-476-3671", - "email": "avery@ienland.com" - }, - { - "id": 1675, - "guid": "1c932f58-2339-4905-a216-986a57b51963", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Cook", - "company": "Navivacs", - "phone": "887-590-3083", - "email": "trinity@navivacs.com" - }, - { - "id": 1676, - "guid": "00a02c4e-0344-4a4f-b563-c321851fcff7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophia Ward", - "company": "SysUSA", - "phone": "848-598-3417", - "email": "sophia@sysusa.com" - }, - { - "id": 1677, - "guid": "0434e8ae-0ba2-4073-872e-871d59bb3c31", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Julia Campbell", - "company": "Celgra", - "phone": "871-479-3239", - "email": "julia@celgra.com" - }, - { - "id": 1678, - "guid": "e62c107c-6f8d-4fd3-bd0c-7ce5541eff05", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Haig", - "company": "Multitiqua", - "phone": "844-556-2507", - "email": "makayla@multitiqua.com" - }, - { - "id": 1679, - "guid": "f74a9a53-43ed-4f64-a677-72d6392b0894", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Payton Gilson", - "company": "Transtouch", - "phone": "849-505-3720", - "email": "payton@transtouch.com" - }, - { - "id": 1680, - "guid": "7f682e52-96a5-42cb-aa0f-fca1ed80da30", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley White", - "company": "Robotemplate", - "phone": "884-442-2932", - "email": "ashley@robotemplate.com" - }, - { - "id": 1681, - "guid": "20fe44b5-dd89-4c9b-8fd2-cdb86086dfc2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Miers", - "company": "Turbomart", - "phone": "855-539-2294", - "email": "kylie@turbomart.com" - }, - { - "id": 1682, - "guid": "9faeb618-8704-445a-81f8-59324d410e9e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Miln", - "company": "Ventanium", - "phone": "838-414-3473", - "email": "serenity@ventanium.com" - }, - { - "id": 1683, - "guid": "3d642cef-df69-4ff0-97d6-14f3989e2e74", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Charlson", - "company": "Sontopia", - "phone": "839-467-2078", - "email": "audrey@sontopia.com" - }, - { - "id": 1684, - "guid": "09679cfa-393f-4e27-b432-238009238b03", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Gardner", - "company": "Unologic", - "phone": "868-465-2070", - "email": "layla@unologic.com" - }, - { - "id": 1685, - "guid": "f6264245-d996-4f55-bccd-623f2ab76690", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Julia Wallace", - "company": "Hypervaco", - "phone": "820-463-2176", - "email": "julia@hypervaco.com" - }, - { - "id": 1686, - "guid": "5fd755c1-3193-41d7-8212-e4df4ff466b9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Sherlock", - "company": "Gigaura", - "phone": "831-595-3141", - "email": "lily@gigaura.com" - }, - { - "id": 1687, - "guid": "a9ab2233-ef04-40ed-b171-ba81b1607ee0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Fulton", - "company": "iEnland", - "phone": "896-562-3481", - "email": "gabriella@ienland.com" - }, - { - "id": 1688, - "guid": "073242fd-dced-4c73-9e38-1aa37a1461e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Hancock", - "company": "Qualserve", - "phone": "885-548-3270", - "email": "layla@qualserve.com" - }, - { - "id": 1689, - "guid": "97805d58-99d6-4de7-a3d3-d81ed4bff307", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Turner", - "company": "OpKeycomm", - "phone": "880-582-3767", - "email": "riley@opkeycomm.com" - }, - { - "id": 1690, - "guid": "e6747a81-3c2c-44bf-99fc-8eecfee795ad", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Angelina Croftoon", - "company": "Proline", - "phone": "827-546-3467", - "email": "angelina@proline.com" - }, - { - "id": 1691, - "guid": "b7a3e44a-1b70-48f7-8544-35c5a3684771", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Walkman", - "company": "Cryptotemplate", - "phone": "863-448-3041", - "email": "zoe@cryptotemplate.com" - }, - { - "id": 1692, - "guid": "7ebb130c-558b-4dc4-80a7-b69104575cda", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Sheldon", - "company": "Genland", - "phone": "859-445-3996", - "email": "lauren@genland.com" - }, - { - "id": 1693, - "guid": "d695e1db-12d2-4a1b-81cf-1ffea3fdb015", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Valeria Timmons", - "company": "Orthosoft", - "phone": "844-479-3071", - "email": "valeria@orthosoft.com" - }, - { - "id": 1694, - "guid": "3182a659-9815-48bc-ae58-417c95d8063c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mia Miln", - "company": "Pacwest", - "phone": "808-491-3534", - "email": "mia@pacwest.com" - }, - { - "id": 1695, - "guid": "91dbec37-6198-4b9f-8451-9e2f64c419ac", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Gibbs", - "company": "iSkyvaco", - "phone": "896-586-3306", - "email": "chloe@iskyvaco.com" - }, - { - "id": 1696, - "guid": "ebfa3fec-c480-4f57-8f90-2beaf6489789", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Wainwright", - "company": "Jamrola", - "phone": "887-571-2327", - "email": "bailey@jamrola.com" - }, - { - "id": 1697, - "guid": "c24c887a-945e-4fcd-93eb-8d659dd88d17", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Oswald", - "company": "Keytheon", - "phone": "846-406-2636", - "email": "morgan@keytheon.com" - }, - { - "id": 1698, - "guid": "40441d97-9adc-4658-9651-41115ecd7269", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Timmons", - "company": "Safetrust", - "phone": "812-502-3745", - "email": "gabrielle@safetrust.com" - }, - { - "id": 1699, - "guid": "d6235aaf-3829-46a4-9a1a-dc68450ac17b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Cook", - "company": "Textiqua", - "phone": "810-542-3157", - "email": "lillian@textiqua.com" - }, - { - "id": 1700, - "guid": "d21f9384-89c1-4a6f-87e8-4bc316b83c8b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Daniels", - "company": "Raylog", - "phone": "884-428-2711", - "email": "destiny@raylog.com" - }, - { - "id": 1701, - "guid": "ae041b4c-fc59-4412-a8a9-88ea0f923d59", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Higgins", - "company": "Robotomic", - "phone": "805-430-2750", - "email": "jasmine@robotomic.com" - }, - { - "id": 1702, - "guid": "6282c92f-86da-477a-b430-24b1dee50c96", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Thomson", - "company": "Superscope", - "phone": "858-550-2393", - "email": "paige@superscope.com" - }, - { - "id": 1703, - "guid": "0fc7cbf3-1a05-4f71-9000-af075db211f1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Valeria Miers", - "company": "Generola", - "phone": "870-586-3300", - "email": "valeria@generola.com" - }, - { - "id": 1704, - "guid": "d8de03df-2256-460c-b0e2-6dd095e39adc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Wallace", - "company": "Openserve", - "phone": "826-577-3907", - "email": "gianna@openserve.com" - }, - { - "id": 1705, - "guid": "a906e910-c6bc-40f0-9236-5dc4746ac5c6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Gardner", - "company": "OpKeycomm", - "phone": "884-567-3575", - "email": "camila@opkeycomm.com" - }, - { - "id": 1706, - "guid": "2fb71268-b232-4ed9-8438-0aa05a836c9f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Oldridge", - "company": "Pericenta", - "phone": "889-598-3828", - "email": "molly@pericenta.com" - }, - { - "id": 1707, - "guid": "b8718c2c-44c2-4f33-bbbf-b4ecb4975223", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Day", - "company": "iMedconik", - "phone": "855-506-2599", - "email": "katherine@imedconik.com" - }, - { - "id": 1708, - "guid": "3866d321-f567-43d9-8cbf-d4026d7e2d73", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mackenzie Wallace", - "company": "Truegate", - "phone": "869-551-3466", - "email": "mackenzie@truegate.com" - }, - { - "id": 1709, - "guid": "9d07e58f-31c2-45d0-bdbe-7a6a3ad93d12", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kayla Morrison", - "company": "eSteganoergy", - "phone": "816-491-2900", - "email": "kayla@esteganoergy.com" - }, - { - "id": 1710, - "guid": "75199f26-cd01-4f64-8c0b-f1d72bd8721d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Croftoon", - "company": "Tekcar", - "phone": "861-546-2295", - "email": "valeria@tekcar.com" - }, - { - "id": 1711, - "guid": "f6f7c1e6-127e-4c6a-9391-6a2ad2deaa58", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Olivia Milton", - "company": "Quintegrity", - "phone": "824-457-3384", - "email": "olivia@quintegrity.com" - }, - { - "id": 1712, - "guid": "33bfd60f-d786-4f1f-a654-d2f18e1fdd92", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Miller", - "company": "Robotemplate", - "phone": "893-412-3511", - "email": "serenity@robotemplate.com" - }, - { - "id": 1713, - "guid": "1c0879d7-77e1-427c-9117-49ca545afa7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabelle Neal", - "company": "Thermotomic", - "phone": "815-583-2674", - "email": "isabelle@thermotomic.com" - }, - { - "id": 1714, - "guid": "42e6c0b1-cd7a-4ad1-b31c-5373afdb5d1d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Neal", - "company": "Polytheon", - "phone": "855-510-2285", - "email": "chloe@polytheon.com" - }, - { - "id": 1715, - "guid": "976986ba-acf5-4217-9664-313e9af31627", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Turner", - "company": "Vencom", - "phone": "804-517-2443", - "email": "leah@vencom.com" - }, - { - "id": 1716, - "guid": "72de1a56-0333-4984-b001-c957eaed8a49", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Oliver", - "company": "Venconix", - "phone": "843-597-3674", - "email": "kaitlyn@venconix.com" - }, - { - "id": 1717, - "guid": "33043c20-b5ad-4caf-8caa-1987c64956c9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Goodman", - "company": "eSteganoergy", - "phone": "815-550-3583", - "email": "paige@esteganoergy.com" - }, - { - "id": 1718, - "guid": "fb6b9da2-8458-4c58-8e9c-58bf661ed62a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Elizabeth Thomson", - "company": "SysUSA", - "phone": "803-576-3353", - "email": "elizabeth@sysusa.com" - }, - { - "id": 1719, - "guid": "dbee2f8c-7f4d-41a6-a7a3-5658cb577ae7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Winter", - "company": "Jamconik", - "phone": "869-514-2916", - "email": "abigail@jamconik.com" - }, - { - "id": 1720, - "guid": "105e7d3f-0c5f-49ca-b387-92102ffac4a4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ella Sheldon", - "company": "Videobanc", - "phone": "850-490-3428", - "email": "ella@videobanc.com" - }, - { - "id": 1721, - "guid": "637b9dd4-9b13-4cb9-b770-5da9f1f416a6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Gibbs", - "company": "Systheon", - "phone": "837-435-2446", - "email": "maria@systheon.com" - }, - { - "id": 1722, - "guid": "64f8ff6c-38f7-40d0-b3c5-fc870857f0cf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Chandter", - "company": "RoboAerlogix", - "phone": "884-555-2665", - "email": "hailey@roboaerlogix.com" - }, - { - "id": 1723, - "guid": "89bb1464-ae43-4c40-8f44-3d34d5fba1dc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Vance", - "company": "iOptystix", - "phone": "837-524-3941", - "email": "savannah@ioptystix.com" - }, - { - "id": 1724, - "guid": "3ddbdffd-f8ed-4eb6-8c11-6926f68d7bb5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Day", - "company": "SysUSA", - "phone": "817-528-3503", - "email": "sophie@sysusa.com" - }, - { - "id": 1725, - "guid": "ffa83e89-f383-4bd5-81ba-7fac8ec15572", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel WifKinson", - "company": "Unologic", - "phone": "844-482-3762", - "email": "rachel@unologic.com" - }, - { - "id": 1726, - "guid": "753d0175-97ab-438c-a4e4-be70e60ee370", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Gate", - "company": "Transtouch", - "phone": "811-487-2140", - "email": "jessica@transtouch.com" - }, - { - "id": 1727, - "guid": "5d6a710b-8c2c-4c08-9315-c5a327392225", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Hamphrey", - "company": "Fibroserve", - "phone": "839-452-3538", - "email": "rachel@fibroserve.com" - }, - { - "id": 1728, - "guid": "46740bfc-5b0c-4ad2-8a9a-af007a085f37", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Abramson", - "company": "Generola", - "phone": "815-479-2804", - "email": "gabrielle@generola.com" - }, - { - "id": 1729, - "guid": "2905cf19-b1bd-4ba2-91b0-d092dbe38a06", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Miller", - "company": "Keytheon", - "phone": "821-485-2761", - "email": "kimberly@keytheon.com" - }, - { - "id": 1730, - "guid": "e98073f0-2271-494b-bae7-892862a97dea", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Brooks", - "company": "Titanirola", - "phone": "871-473-3176", - "email": "katherine@titanirola.com" - }, - { - "id": 1731, - "guid": "a1e306df-fba5-4df1-b9c4-8423238cf476", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Gilmore", - "company": "Fibroserve", - "phone": "819-590-2393", - "email": "avery@fibroserve.com" - }, - { - "id": 1732, - "guid": "3b76a220-ab47-4ae9-aa61-655699995e5a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Charlotte Molligan", - "company": "SysVenamerica", - "phone": "876-451-2174", - "email": "charlotte@sysvenamerica.com" - }, - { - "id": 1733, - "guid": "080d0d9f-45b9-4f21-b5a7-054fcf617a69", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Freeman", - "company": "Robotomic", - "phone": "884-505-3225", - "email": "ella@robotomic.com" - }, - { - "id": 1734, - "guid": "c4d0c794-ddd5-4819-a298-e14969d14dd7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Claire Murphy", - "company": "Navivacs", - "phone": "877-578-3056", - "email": "claire@navivacs.com" - }, - { - "id": 1735, - "guid": "23567ff2-934c-49be-8f29-c4fa271b4ee5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Goodman", - "company": "Truetomic", - "phone": "826-464-2024", - "email": "mariah@truetomic.com" - }, - { - "id": 1736, - "guid": "ac0c7e16-bb51-4148-a310-76c914797d4c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Calhoun", - "company": "Titanigraf", - "phone": "812-471-2146", - "email": "lillian@titanigraf.com" - }, - { - "id": 1737, - "guid": "92cebaa4-5635-4bbe-8f78-de1f2a030577", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Harrison", - "company": "Westtomik", - "phone": "832-505-3343", - "email": "trinity@westtomik.com" - }, - { - "id": 1738, - "guid": "7f604665-f383-49b0-abfc-a229244ea84d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Galbraith", - "company": "Truegate", - "phone": "862-534-3158", - "email": "eva@truegate.com" - }, - { - "id": 1739, - "guid": "bf2ee2ae-500d-4bdd-bf31-c224d0ffc1b8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Thornton", - "company": "OpKeycomm", - "phone": "882-570-2964", - "email": "jessica@opkeycomm.com" - }, - { - "id": 1740, - "guid": "68dae87e-af73-4e46-95ff-80df61109c2c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Mercer", - "company": "Fibrotouch", - "phone": "833-574-3751", - "email": "alexis@fibrotouch.com" - }, - { - "id": 1741, - "guid": "f4e9bc16-dea2-4e1e-9bd7-42a254554a78", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Winter", - "company": "iEnland", - "phone": "800-551-2167", - "email": "trinity@ienland.com" - }, - { - "id": 1742, - "guid": "8fc32a44-8b88-40b8-8e55-7ac085554960", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Thornton", - "company": "Technogra", - "phone": "873-434-3113", - "email": "bailey@technogra.com" - }, - { - "id": 1743, - "guid": "13240f0e-46d9-4861-bb3b-b4cb1611e863", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Brickman", - "company": "Allphysiche", - "phone": "803-500-3098", - "email": "ava@allphysiche.com" - }, - { - "id": 1744, - "guid": "8c5f9dba-67cc-4286-bc2c-192a0c4e744d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Hodges", - "company": "Aprama", - "phone": "899-425-3732", - "email": "ariana@aprama.com" - }, - { - "id": 1745, - "guid": "8037b86e-8816-4462-bc8e-fa8f378473ea", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Hoggarth", - "company": "Pacwest", - "phone": "861-507-3443", - "email": "kaylee@pacwest.com" - }, - { - "id": 1746, - "guid": "b48527ef-60d7-41a6-9726-293d241c54e8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Davidson", - "company": "eSteganoergy", - "phone": "877-491-2075", - "email": "kylie@esteganoergy.com" - }, - { - "id": 1747, - "guid": "be1ce1ff-f7f4-41df-b1a2-507005739268", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Chesterton", - "company": "Jamconik", - "phone": "847-437-2457", - "email": "katherine@jamconik.com" - }, - { - "id": 1748, - "guid": "b717c9a0-a84b-4ea6-9871-8a74ec7751cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Youmans", - "company": "Fibrotouch", - "phone": "842-461-3535", - "email": "autumn@fibrotouch.com" - }, - { - "id": 1749, - "guid": "85703cf2-990a-4ad2-a60e-2966369d5131", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Hawkins", - "company": "Skydata", - "phone": "898-416-3305", - "email": "ashley@skydata.com" - }, - { - "id": 1750, - "guid": "a5c64bab-796e-4920-9a32-d28cce2f9364", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Carroll", - "company": "Tekcar", - "phone": "860-499-2977", - "email": "arianna@tekcar.com" - }, - { - "id": 1751, - "guid": "2d6c8199-e5dc-4600-8315-9769caea87d6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Ford", - "company": "Pacwest", - "phone": "819-475-2328", - "email": "gabriella@pacwest.com" - }, - { - "id": 1752, - "guid": "39dcf9f3-0597-40da-a8f2-bd7fbb2d44f0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Miers", - "company": "Systheon", - "phone": "847-503-3352", - "email": "autumn@systheon.com" - }, - { - "id": 1753, - "guid": "bff6f1a2-798e-457a-acf7-5e2c072c7998", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Oliver", - "company": "Teknoplexon", - "phone": "811-585-2482", - "email": "amelia@teknoplexon.com" - }, - { - "id": 1754, - "guid": "b1d1ba82-52cb-4daf-9f9b-223750900ddb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Cramer", - "company": "iEnland", - "phone": "875-595-3856", - "email": "ava@ienland.com" - }, - { - "id": 1755, - "guid": "d4d998b4-0a50-4eff-9e38-9ed190792245", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Ford", - "company": "Jamrola", - "phone": "892-572-2302", - "email": "sofia@jamrola.com" - }, - { - "id": 1756, - "guid": "06978a10-69d6-47c6-af37-99a8b84cf415", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Miller", - "company": "eEyetanic", - "phone": "838-595-3210", - "email": "autumn@eeyetanic.com" - }, - { - "id": 1757, - "guid": "94862085-2e64-4ccf-82cc-30cf0009b0cc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Gilson", - "company": "Syssoft", - "phone": "877-582-2423", - "email": "alexa@syssoft.com" - }, - { - "id": 1758, - "guid": "4ecae529-03b8-4ef6-9377-ea72eb0a76cf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Hoggarth", - "company": "Skydata", - "phone": "813-412-2303", - "email": "bailey@skydata.com" - }, - { - "id": 1759, - "guid": "d91d7fea-7eb1-4d39-a4ae-547d51760df1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Calhoun", - "company": "Allphysiche", - "phone": "842-466-3104", - "email": "khloe@allphysiche.com" - }, - { - "id": 1760, - "guid": "d3b2bcc2-153a-403a-bfe4-df747a4eca78", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Michaelson", - "company": "Westmedia", - "phone": "875-565-3194", - "email": "sarah@westmedia.com" - }, - { - "id": 1761, - "guid": "c78ebe71-6bd7-478f-a65c-be8358c1bb87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Brown", - "company": "Qualserve", - "phone": "806-469-3277", - "email": "amelia@qualserve.com" - }, - { - "id": 1762, - "guid": "e2aadc1e-00eb-4cfb-a048-f4be070451d1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Wainwright", - "company": "Allnet", - "phone": "840-546-2420", - "email": "aubrey@allnet.com" - }, - { - "id": 1763, - "guid": "a3132c67-9ef3-4973-a2e6-d6fb64be7bea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Galbraith", - "company": "Unologic", - "phone": "846-411-2398", - "email": "mia@unologic.com" - }, - { - "id": 1764, - "guid": "9a0316a2-ad36-4283-9184-26d8a3b0b615", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Nevaeh Molligan", - "company": "Dynarama", - "phone": "818-449-2593", - "email": "nevaeh@dynarama.com" - }, - { - "id": 1765, - "guid": "4db88540-af64-42ca-9e1d-6f4d57e1cb2b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Wayne", - "company": "eSteganoergy", - "phone": "891-599-3515", - "email": "vanessa@esteganoergy.com" - }, - { - "id": 1766, - "guid": "85575611-a45d-4fca-88b9-34509e0f87d6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Cramer", - "company": "Pacwest", - "phone": "861-581-2237", - "email": "makayla@pacwest.com" - }, - { - "id": 1767, - "guid": "d71a4959-dc91-438d-8bdf-d64f7a0cd445", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Conors", - "company": "Videobanc", - "phone": "897-548-3140", - "email": "makayla@videobanc.com" - }, - { - "id": 1768, - "guid": "2d2ab5b2-c02a-4968-bdcc-775eb5178b13", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Otis", - "company": "Techtron", - "phone": "877-585-3088", - "email": "genesis@techtron.com" - }, - { - "id": 1769, - "guid": "5c0fae13-773b-460e-b08a-6f2709abcd0e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Clapton", - "company": "Systheon", - "phone": "831-600-2939", - "email": "maya@systheon.com" - }, - { - "id": 1770, - "guid": "a3186817-4824-4a6f-82b5-88a0cf50de32", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Oldman", - "company": "Navivacs", - "phone": "810-558-2622", - "email": "camila@navivacs.com" - }, - { - "id": 1771, - "guid": "1ce584f3-071c-4c70-9754-bf66eef2853c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee WifKinson", - "company": "Xeicon", - "phone": "860-585-3036", - "email": "kaylee@xeicon.com" - }, - { - "id": 1772, - "guid": "edb759f8-3872-4dd8-ad5d-a4b0f058dd0e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Molligan", - "company": "Robocomm", - "phone": "867-591-3261", - "email": "alexis@robocomm.com" - }, - { - "id": 1773, - "guid": "99cb843c-0e40-4dcc-a9df-00b48d4091df", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Hawkins", - "company": "Titanirola", - "phone": "812-570-2541", - "email": "riley@titanirola.com" - }, - { - "id": 1774, - "guid": "78ef5a06-41ee-41b8-a1a0-8f98a5b64d9b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Davidson", - "company": "OpKeycomm", - "phone": "831-461-2972", - "email": "jasmine@opkeycomm.com" - }, - { - "id": 1775, - "guid": "8184cf5d-13e6-4b7b-8882-209503a24ffa", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Murphy", - "company": "Qualserve", - "phone": "837-559-3912", - "email": "victoria@qualserve.com" - }, - { - "id": 1776, - "guid": "0ac278b0-6333-4e2c-afa9-5568a573d604", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Davidson", - "company": "Cryptotemplate", - "phone": "856-587-3232", - "email": "kylie@cryptotemplate.com" - }, - { - "id": 1777, - "guid": "37ec6ee1-45be-43a5-adfe-61751a39e280", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Hoggarth", - "company": "Technogra", - "phone": "866-422-2230", - "email": "melanie@technogra.com" - }, - { - "id": 1778, - "guid": "699d7bdf-5f3b-4143-aaa4-d2abd5b31564", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Elizabeth Thornton", - "company": "Orthosoft", - "phone": "871-430-3855", - "email": "elizabeth@orthosoft.com" - }, - { - "id": 1779, - "guid": "b94ef23f-4834-40d3-b9ce-d5467769f34e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Harrison", - "company": "Qualserve", - "phone": "894-534-3038", - "email": "zoey@qualserve.com" - }, - { - "id": 1780, - "guid": "55d0b0b0-bf6f-4663-9fa9-a1ad49aef2c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Molligan", - "company": "US Omnigraphik", - "phone": "801-506-3288", - "email": "valeria@us omnigraphik.com" - }, - { - "id": 1781, - "guid": "8391869f-12f6-4050-bcc6-b95909301fdc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Oswald", - "company": "eEyetanic", - "phone": "870-498-2636", - "email": "makayla@eeyetanic.com" - }, - { - "id": 1782, - "guid": "97c640f5-5d7e-42eb-9897-a6db3ea5f6be", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Wayne", - "company": "iSkyvaco", - "phone": "832-546-3473", - "email": "ella@iskyvaco.com" - }, - { - "id": 1783, - "guid": "8e4cfcce-6558-4c81-a3f9-a46e2ed63532", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Milton", - "company": "Pericenta", - "phone": "824-406-3314", - "email": "kylie@pericenta.com" - }, - { - "id": 1784, - "guid": "1e9be328-330a-4ed5-88cd-bfd2e2a197fd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Sherlock", - "company": "Orthomedia", - "phone": "816-424-2231", - "email": "allison@orthomedia.com" - }, - { - "id": 1785, - "guid": "da9c7646-2e7a-4a52-a872-ae7e940e4690", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva White", - "company": "Infraique", - "phone": "814-467-3896", - "email": "eva@infraique.com" - }, - { - "id": 1786, - "guid": "83766062-ca40-4fe1-98d5-235035565cf0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison WifKinson", - "company": "Xeicon", - "phone": "830-580-2465", - "email": "addison@xeicon.com" - }, - { - "id": 1787, - "guid": "7008d1d7-67df-4efc-a05a-13ecc911e569", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Cook", - "company": "Titanirola", - "phone": "814-553-3674", - "email": "melanie@titanirola.com" - }, - { - "id": 1788, - "guid": "9bdc99cd-c096-4c28-bca2-9898093f391c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Hawkins", - "company": "Safeagra", - "phone": "804-485-3042", - "email": "zoe@safeagra.com" - }, - { - "id": 1789, - "guid": "daad71ed-bafa-4979-8606-68de8ccd5a2d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Young", - "company": "RoboAerlogix", - "phone": "851-514-3256", - "email": "sophie@roboaerlogix.com" - }, - { - "id": 1790, - "guid": "ac61f4ad-593d-4083-abd7-d2d9321f2d22", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Vance", - "company": "Idmax", - "phone": "842-496-3289", - "email": "serenity@idmax.com" - }, - { - "id": 1791, - "guid": "e4df4d66-0e2e-4ccd-84c0-cb53366d573d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Gate", - "company": "Pacwest", - "phone": "874-417-2904", - "email": "paige@pacwest.com" - }, - { - "id": 1792, - "guid": "705599ae-4a3d-4fe9-ada3-3f0c0feb3482", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Croftoon", - "company": "Cryptotemplate", - "phone": "864-526-3111", - "email": "kylie@cryptotemplate.com" - }, - { - "id": 1793, - "guid": "19cf2a54-f62c-4f2f-8011-d67694fc1c7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Wayne", - "company": "Inridium", - "phone": "877-437-2352", - "email": "victoria@inridium.com" - }, - { - "id": 1794, - "guid": "4b4744cf-4cc9-4dec-a518-ace57b773ad4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Michaelson", - "company": "Teraserv", - "phone": "818-420-3186", - "email": "kaylee@teraserv.com" - }, - { - "id": 1795, - "guid": "464a9b42-67dd-492f-9dc9-c751e81e0dee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila Clapton", - "company": "Truegate", - "phone": "894-437-3398", - "email": "camila@truegate.com" - }, - { - "id": 1796, - "guid": "09e0068d-12b5-42a9-a740-d764d986745c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Winter", - "company": "Ventanium", - "phone": "810-408-3220", - "email": "autumn@ventanium.com" - }, - { - "id": 1797, - "guid": "55988a03-51ec-4670-8375-8d84a3ca706c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Cramer", - "company": "Technogra", - "phone": "830-427-2766", - "email": "paige@technogra.com" - }, - { - "id": 1798, - "guid": "713c4742-b68f-4a31-bbcf-1d9776b6398e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Gilson", - "company": "Skydata", - "phone": "814-469-2738", - "email": "alexis@skydata.com" - }, - { - "id": 1799, - "guid": "94dada99-3e97-49c8-a8ea-14a54fb5907f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sarah Chesterton", - "company": "Transtouch", - "phone": "877-543-3967", - "email": "sarah@transtouch.com" - }, - { - "id": 1800, - "guid": "a4d74bcb-fc50-4172-a47c-e51295d45ee1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Chapman", - "company": "Allphysiche", - "phone": "875-572-2797", - "email": "natalie@allphysiche.com" - }, - { - "id": 1801, - "guid": "a2ba845a-d76c-49a0-aa74-6724510f81c8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Timmons", - "company": "SysUSA", - "phone": "822-530-2389", - "email": "claire@sysusa.com" - }, - { - "id": 1802, - "guid": "8957873b-b367-4e3e-bc5f-2be53e71537b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Gilmore", - "company": "Netseco", - "phone": "824-417-2832", - "email": "mya@netseco.com" - }, - { - "id": 1803, - "guid": "3cb59f61-1630-46e2-ab91-264925e6c1dc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Chesterton", - "company": "Unologic", - "phone": "815-474-2119", - "email": "mia@unologic.com" - }, - { - "id": 1804, - "guid": "83f78189-fa94-4d75-9c75-b686541fa866", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Daniels", - "company": "iMedconik", - "phone": "862-550-2583", - "email": "jocelyn@imedconik.com" - }, - { - "id": 1805, - "guid": "c5d3a6e8-7159-44e3-88a4-cbdaef023608", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Caroline Gilbert", - "company": "Compuamerica", - "phone": "813-472-3870", - "email": "caroline@compuamerica.com" - }, - { - "id": 1806, - "guid": "8f4573c2-9a78-4615-bf01-6ae9c9a5ad2f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Brooks", - "company": "Vencom", - "phone": "863-451-2463", - "email": "ashley@vencom.com" - }, - { - "id": 1807, - "guid": "b8323847-8d3d-4e77-822d-415710dbf6dc", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Hoggarth", - "company": "Fibroserve", - "phone": "813-483-2868", - "email": "lily@fibroserve.com" - }, - { - "id": 1808, - "guid": "16b92341-e1e8-49b7-9d16-317bb1b3ce0b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Cramer", - "company": "US Infratouch", - "phone": "877-411-3841", - "email": "amelia@us infratouch.com" - }, - { - "id": 1809, - "guid": "6a57acdb-d3f2-4e69-9cc3-e73500cccbdf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Chesterton", - "company": "Truetomic", - "phone": "873-430-3316", - "email": "mariah@truetomic.com" - }, - { - "id": 1810, - "guid": "0bf2dc50-f366-4124-9183-e37a942d866b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Brooks", - "company": "Steganoconiche", - "phone": "816-557-3482", - "email": "aubrey@steganoconiche.com" - }, - { - "id": 1811, - "guid": "985a92e0-f047-4f57-898e-6a1ee6ed99e3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Hamphrey", - "company": "Truetomic", - "phone": "895-599-3350", - "email": "sydney@truetomic.com" - }, - { - "id": 1812, - "guid": "ceb1867d-d5b8-412d-bc87-51bcad1e3886", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Carrington", - "company": "Jamrola", - "phone": "813-470-3926", - "email": "angelina@jamrola.com" - }, - { - "id": 1813, - "guid": "075ea153-bf4a-48f3-b107-8cc63c4ccd3f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Gilbert", - "company": "eEyetanic", - "phone": "821-506-2227", - "email": "sophie@eeyetanic.com" - }, - { - "id": 1814, - "guid": "63232682-09b4-4b03-a0f9-046c89f2d51f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Goldman", - "company": "Venconix", - "phone": "888-449-2665", - "email": "abigail@venconix.com" - }, - { - "id": 1815, - "guid": "39d0c7de-229a-4b5e-96ac-be522e91eb0a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Thorndike", - "company": "Ameritron", - "phone": "854-595-2409", - "email": "camila@ameritron.com" - }, - { - "id": 1816, - "guid": "da489624-075d-4ce2-a89d-1889c20ab3fa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Young", - "company": "Conotomics", - "phone": "885-527-3192", - "email": "morgan@conotomics.com" - }, - { - "id": 1817, - "guid": "60a0d1d5-5c4f-42fe-be73-368f74634bd5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Cook", - "company": "Jamconik", - "phone": "899-536-2007", - "email": "victoria@jamconik.com" - }, - { - "id": 1818, - "guid": "291ddf1b-8fde-4db2-be0b-0888dcf44ecd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Evelyn Clapton", - "company": "Gigaura", - "phone": "892-429-2737", - "email": "evelyn@gigaura.com" - }, - { - "id": 1819, - "guid": "0029b78c-74dc-4ac3-a399-e4aa1852acc0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Cook", - "company": "Multitiqua", - "phone": "856-555-2521", - "email": "aubrey@multitiqua.com" - }, - { - "id": 1820, - "guid": "4aabd36f-0297-4a3d-af96-7e38a8036a62", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Thomson", - "company": "Inridium", - "phone": "890-460-3992", - "email": "faith@inridium.com" - }, - { - "id": 1821, - "guid": "684bcc52-2ffc-45f0-ab21-9cf9ebf4827f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maria Wood", - "company": "Fibroserve", - "phone": "814-466-3036", - "email": "maria@fibroserve.com" - }, - { - "id": 1822, - "guid": "646fdd4e-4025-40a0-8029-dc5841c547f5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Trinity Oliver", - "company": "Ventanium", - "phone": "846-562-2630", - "email": "trinity@ventanium.com" - }, - { - "id": 1823, - "guid": "394ea0f4-e844-4038-8ee3-1acff64d6728", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Chesterton", - "company": "SysVenamerica", - "phone": "818-406-2301", - "email": "makayla@sysvenamerica.com" - }, - { - "id": 1824, - "guid": "54b4d376-ad37-4f5e-99c7-137a498b7b74", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Wood", - "company": "Fibrotopia", - "phone": "863-516-2969", - "email": "kimberly@fibrotopia.com" - }, - { - "id": 1825, - "guid": "64f67c66-5602-41e6-b225-a4305b3b90c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Gate", - "company": "Compuamerica", - "phone": "868-434-3272", - "email": "evelyn@compuamerica.com" - }, - { - "id": 1826, - "guid": "f23d01db-0637-4fa8-bb7f-bcd5a1f23c80", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bella Youmans", - "company": "Proline", - "phone": "886-542-2117", - "email": "bella@proline.com" - }, - { - "id": 1827, - "guid": "c1732dc5-48ad-4d41-95aa-da28f3e493db", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Oswald", - "company": "Technogra", - "phone": "852-518-2244", - "email": "hailey@technogra.com" - }, - { - "id": 1828, - "guid": "4cbaaac5-c090-483a-9614-56b8aa2c52fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Gilbert", - "company": "Turbomart", - "phone": "866-469-2981", - "email": "samantha@turbomart.com" - }, - { - "id": 1829, - "guid": "8923334b-9300-40a1-8f5d-5dd6ab7cb046", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Croftoon", - "company": "eEyetanic", - "phone": "842-572-3437", - "email": "kayla@eeyetanic.com" - }, - { - "id": 1830, - "guid": "05316bc7-5df8-460b-9fb6-f48608723ada", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brianna Gill", - "company": "iQualcar", - "phone": "887-431-3691", - "email": "brianna@iqualcar.com" - }, - { - "id": 1831, - "guid": "48cbcbab-a9a5-48a9-8ae9-f6852d5ca705", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Thorndike", - "company": "Fibroserve", - "phone": "884-517-3909", - "email": "mackenzie@fibroserve.com" - }, - { - "id": 1832, - "guid": "4fcd8be7-cce3-4ae9-810a-583419d860ee", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Molligan", - "company": "Textiqua", - "phone": "856-562-3340", - "email": "amelia@textiqua.com" - }, - { - "id": 1833, - "guid": "ea27e4b3-0e35-4c50-9374-a1ba4f258ca6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Murphy", - "company": "Teknoplexon", - "phone": "851-553-2402", - "email": "arianna@teknoplexon.com" - }, - { - "id": 1834, - "guid": "f7f1053c-b368-4a50-986a-3ac6188ea8d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Oswald", - "company": "US Infratouch", - "phone": "820-424-3929", - "email": "hannah@us infratouch.com" - }, - { - "id": 1835, - "guid": "2fa8c561-8e1b-4407-a30d-aa5bafde5f18", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Sherlock", - "company": "Safeagra", - "phone": "815-469-2821", - "email": "zoey@safeagra.com" - }, - { - "id": 1836, - "guid": "7c63ff5a-4a48-41d4-8b23-3122704ee963", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Milton", - "company": "Conotomics", - "phone": "862-526-3462", - "email": "madelyn@conotomics.com" - }, - { - "id": 1837, - "guid": "8b50831f-ca1e-4844-98f2-842b3f3134b0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Valeria Gilmore", - "company": "Ventanium", - "phone": "810-586-2457", - "email": "valeria@ventanium.com" - }, - { - "id": 1838, - "guid": "d995d7b4-a652-41f3-9fce-f108c5b9f561", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Sheldon", - "company": "Vencom", - "phone": "873-486-2453", - "email": "camila@vencom.com" - }, - { - "id": 1839, - "guid": "3faae64b-ee31-44d7-8d80-116970f9101d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Hardman", - "company": "Syssoft", - "phone": "856-541-3087", - "email": "mya@syssoft.com" - }, - { - "id": 1840, - "guid": "fa3f4b2e-7516-4206-bcab-bcb1e27e4da1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Brown", - "company": "Safeagra", - "phone": "857-593-2560", - "email": "ashley@safeagra.com" - }, - { - "id": 1841, - "guid": "ab9f9357-1779-48fd-9928-3bfa70bb8eef", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Neal", - "company": "Tekcar", - "phone": "887-517-2612", - "email": "chloe@tekcar.com" - }, - { - "id": 1842, - "guid": "d2bc55bd-b79f-4a52-a212-97cecf40c02b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Vanessa WifKinson", - "company": "Conrama", - "phone": "808-598-2202", - "email": "vanessa@conrama.com" - }, - { - "id": 1843, - "guid": "b077cd01-3d4c-4de9-ada7-aa2c625e6dee", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Chesterton", - "company": "Netsystems", - "phone": "810-421-2252", - "email": "kaitlyn@netsystems.com" - }, - { - "id": 1844, - "guid": "d18042ec-99cb-4d7c-9e8a-db45e47912c5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Clapton", - "company": "Jamrola", - "phone": "825-501-3354", - "email": "melanie@jamrola.com" - }, - { - "id": 1845, - "guid": "66dad598-54e6-40bd-8784-ea9e60f2bf81", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Turner", - "company": "Ameritron", - "phone": "868-590-3845", - "email": "khloe@ameritron.com" - }, - { - "id": 1846, - "guid": "3df87e78-a41d-43b8-95c3-521eb553fd86", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Molligan", - "company": "Cryptotemplate", - "phone": "861-530-3872", - "email": "aaliyah@cryptotemplate.com" - }, - { - "id": 1847, - "guid": "29045cfb-f60a-4f40-a0fa-dfeeed039dec", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Campbell", - "company": "Teknoplexon", - "phone": "831-456-2534", - "email": "savannah@teknoplexon.com" - }, - { - "id": 1848, - "guid": "29558cb8-293c-4081-a100-436e76b1e9ac", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Haig", - "company": "Turbomart", - "phone": "867-507-3138", - "email": "allison@turbomart.com" - }, - { - "id": 1849, - "guid": "173f49a7-73c8-46d6-acb6-82c377cb73b2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Hancock", - "company": "Aprama", - "phone": "824-428-2623", - "email": "audrey@aprama.com" - }, - { - "id": 1850, - "guid": "4624f510-5c3e-435e-82a8-1871af987d15", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Gilson", - "company": "Venconix", - "phone": "827-599-2406", - "email": "gabriella@venconix.com" - }, - { - "id": 1851, - "guid": "e7f043b0-cba8-474b-a36e-0e9b89717695", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Morrison", - "company": "Ameritron", - "phone": "815-480-3045", - "email": "brooke@ameritron.com" - }, - { - "id": 1852, - "guid": "a75afef4-7b65-4d6a-aa00-7145ec2a585e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Cook", - "company": "Titanirola", - "phone": "872-549-3127", - "email": "alexandra@titanirola.com" - }, - { - "id": 1853, - "guid": "f4f77a31-95ac-4d12-879e-8d39e7b4c408", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Warren", - "company": "US Infratouch", - "phone": "864-576-3880", - "email": "alexa@us infratouch.com" - }, - { - "id": 1854, - "guid": "9f179ca1-57ee-49c9-9655-b0b761010399", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Bush", - "company": "Superscope", - "phone": "823-531-2289", - "email": "brianna@superscope.com" - }, - { - "id": 1855, - "guid": "15ffdddf-66e4-4773-974c-1b9a629cfcf4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Gibbs", - "company": "iQualcar", - "phone": "834-521-2975", - "email": "mackenzie@iqualcar.com" - }, - { - "id": 1856, - "guid": "4efadbe1-b752-40f1-89e7-49cf071f9c1b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Osborne", - "company": "Vencom", - "phone": "811-597-2215", - "email": "camila@vencom.com" - }, - { - "id": 1857, - "guid": "0dd46bbe-0083-49f1-b8f2-08ee246716d5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Watson", - "company": "Interliant", - "phone": "882-464-3312", - "email": "taylor@interliant.com" - }, - { - "id": 1858, - "guid": "c78fe714-29d3-4f4b-ad06-201e2a0d8324", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Gilmore", - "company": "Nanobanc", - "phone": "862-442-3223", - "email": "allison@nanobanc.com" - }, - { - "id": 1859, - "guid": "dffa9db5-a88b-4d32-a0d3-618e90c842f1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Murphy", - "company": "Robotomic", - "phone": "820-517-3825", - "email": "zoey@robotomic.com" - }, - { - "id": 1860, - "guid": "eea4e577-a476-40d3-9645-05b0a43dc2bc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Calhoun", - "company": "Entcast", - "phone": "809-491-3015", - "email": "elizabeth@entcast.com" - }, - { - "id": 1861, - "guid": "ef92173b-b654-4abe-8e4b-25628229dc4b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Abramson", - "company": "Enlogia", - "phone": "883-522-3241", - "email": "serenity@enlogia.com" - }, - { - "id": 1862, - "guid": "59b9b36f-ad19-4668-b3e3-e9d576ce5b46", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Abramson", - "company": "Orthosoft", - "phone": "875-463-2098", - "email": "isabelle@orthosoft.com" - }, - { - "id": 1863, - "guid": "ac2172cc-81df-4959-bf73-dda7679e5651", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Fulton", - "company": "SysVenamerica", - "phone": "815-531-2208", - "email": "brooklyn@sysvenamerica.com" - }, - { - "id": 1864, - "guid": "e1fbbdc6-2510-4282-8645-6cb8bbdbd056", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Chapman", - "company": "InfoAirway", - "phone": "892-462-2486", - "email": "khloe@infoairway.com" - }, - { - "id": 1865, - "guid": "5825555e-2467-4835-8e0d-f5eeeb5e77de", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Hailey", - "company": "Teratopia", - "phone": "869-535-3522", - "email": "isabella@teratopia.com" - }, - { - "id": 1866, - "guid": "3955f277-4995-4eae-a039-1c5bbb6e2437", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Vaughan", - "company": "eEyetanic", - "phone": "849-589-2979", - "email": "aaliyah@eeyetanic.com" - }, - { - "id": 1867, - "guid": "f3f09628-45a4-44cf-afc6-29c7ac0ec9f7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Michaelson", - "company": "Teknoplexon", - "phone": "899-549-3352", - "email": "destiny@teknoplexon.com" - }, - { - "id": 1868, - "guid": "d3717247-63a2-4048-87c0-e7cda0cbcd1e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Sheldon", - "company": "Fibrotouch", - "phone": "864-519-3953", - "email": "madelyn@fibrotouch.com" - }, - { - "id": 1869, - "guid": "87e88381-54d5-4718-8cea-2fa07fb06773", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Gilbert", - "company": "Robotemplate", - "phone": "831-461-2578", - "email": "nevaeh@robotemplate.com" - }, - { - "id": 1870, - "guid": "a2b17cec-b581-4b61-9336-24ca9971f086", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Gill", - "company": "Jamrola", - "phone": "870-468-3592", - "email": "alexis@jamrola.com" - }, - { - "id": 1871, - "guid": "5f6cb358-06c1-4a17-80f2-b476bb57e75f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Hamphrey", - "company": "Enlogia", - "phone": "897-591-2716", - "email": "serenity@enlogia.com" - }, - { - "id": 1872, - "guid": "5966f0e7-4851-4509-b6e6-93a383ea9f50", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Neal", - "company": "Techtron", - "phone": "874-493-3784", - "email": "sophia@techtron.com" - }, - { - "id": 1873, - "guid": "68619422-4b22-4feb-a946-5c3404001d5d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Hannah Youmans", - "company": "SysUSA", - "phone": "888-480-3262", - "email": "hannah@sysusa.com" - }, - { - "id": 1874, - "guid": "295867cb-c033-4877-8150-2c663c1d1702", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Wallace", - "company": "Generola", - "phone": "849-581-3839", - "email": "kylie@generola.com" - }, - { - "id": 1875, - "guid": "0f68003c-ac3c-403f-a62b-98e726d453b2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Sherlock", - "company": "Robotemplate", - "phone": "845-595-2884", - "email": "hannah@robotemplate.com" - }, - { - "id": 1876, - "guid": "4fda0a0b-6af6-4488-89ab-32d129446b1a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Brickman", - "company": "Systheon", - "phone": "870-593-2846", - "email": "emma@systheon.com" - }, - { - "id": 1877, - "guid": "88b265e9-0b1c-4dad-bcc4-a94c6e5c574b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Young", - "company": "Westmedia", - "phone": "807-561-3193", - "email": "eva@westmedia.com" - }, - { - "id": 1878, - "guid": "92c2e68a-6815-4eb1-b0d4-5320ea1fb633", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Nathan", - "company": "Safeagra", - "phone": "859-422-2066", - "email": "jocelyn@safeagra.com" - }, - { - "id": 1879, - "guid": "fb14b2df-d7a1-49f4-8980-ab99b93fa63b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Oldman", - "company": "Aprama", - "phone": "897-597-3961", - "email": "arianna@aprama.com" - }, - { - "id": 1880, - "guid": "3965eba3-d8a6-4e1a-90bb-43e1d8d983c3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Adamson", - "company": "Xeicon", - "phone": "800-495-3243", - "email": "avery@xeicon.com" - }, - { - "id": 1881, - "guid": "ac9d05a7-7301-4306-9b38-fb28c42880c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexandra Owen", - "company": "Aprama", - "phone": "846-429-2334", - "email": "alexandra@aprama.com" - }, - { - "id": 1882, - "guid": "4e8c9fd6-fe61-4550-856d-d5e543751829", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Harrison", - "company": "Infraique", - "phone": "829-552-2454", - "email": "katelyn@infraique.com" - }, - { - "id": 1883, - "guid": "a9459b56-a923-4406-8014-c40740662244", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Melanie Youmans", - "company": "Technogra", - "phone": "858-410-3433", - "email": "melanie@technogra.com" - }, - { - "id": 1884, - "guid": "761743ba-a3b0-4803-8bee-3e5cf43eb319", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Campbell", - "company": "Generola", - "phone": "886-513-2158", - "email": "allison@generola.com" - }, - { - "id": 1885, - "guid": "69146579-85f1-4c32-9d6e-e43c12d6f28c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Turner", - "company": "Safeagra", - "phone": "847-544-3562", - "email": "kaylee@safeagra.com" - }, - { - "id": 1886, - "guid": "f1238878-bc54-4f25-8552-310feaf3b00f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Miln", - "company": "Unconix", - "phone": "821-476-2957", - "email": "lillian@unconix.com" - }, - { - "id": 1887, - "guid": "f03c58ea-2cd3-4433-b739-37e7ad4cfabf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline White", - "company": "Qualserve", - "phone": "860-517-3597", - "email": "madeline@qualserve.com" - }, - { - "id": 1888, - "guid": "5fba6531-2bcc-4fb5-90b8-84c8ae795859", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Thornton", - "company": "Titanirola", - "phone": "819-481-3211", - "email": "emily@titanirola.com" - }, - { - "id": 1889, - "guid": "aa3a103f-38ee-4f68-b4b5-978a1e26cfdf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Winter", - "company": "Allphysiche", - "phone": "842-451-3185", - "email": "camila@allphysiche.com" - }, - { - "id": 1890, - "guid": "0c2463e8-85ef-4514-b75e-b867edcfb224", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Chandter", - "company": "Safetrust", - "phone": "856-500-3488", - "email": "savannah@safetrust.com" - }, - { - "id": 1891, - "guid": "f3852f46-4ece-475a-bc3e-9fc0ef2b9812", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Wayne", - "company": "Robotemplate", - "phone": "813-402-2900", - "email": "kayla@robotemplate.com" - }, - { - "id": 1892, - "guid": "055d67e5-2e5f-4d69-b391-6a143c2a5c9e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Stanley", - "company": "Interliant", - "phone": "823-531-3858", - "email": "jessica@interliant.com" - }, - { - "id": 1893, - "guid": "463adc95-c163-443b-bf19-c27711006dd7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Campbell", - "company": "Compuamerica", - "phone": "812-540-2848", - "email": "emma@compuamerica.com" - }, - { - "id": 1894, - "guid": "0f840eb8-2240-4c20-bfc2-d168847ebc5a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Molligan", - "company": "Allnet", - "phone": "865-506-2871", - "email": "kaitlyn@allnet.com" - }, - { - "id": 1895, - "guid": "4b3acf7d-69e3-45a4-93bf-1e0f8b4a2ccc", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison Oswald", - "company": "Fibroserve", - "phone": "876-596-3119", - "email": "madison@fibroserve.com" - }, - { - "id": 1896, - "guid": "288ed800-72d4-4f84-bb8a-ffee407fc9f7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Abramson", - "company": "Technogra", - "phone": "801-527-3056", - "email": "gianna@technogra.com" - }, - { - "id": 1897, - "guid": "510d80cb-430b-4d63-8bb6-3afb3c0fd45e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Miln", - "company": "iSkyvaco", - "phone": "817-574-2637", - "email": "bailey@iskyvaco.com" - }, - { - "id": 1898, - "guid": "ec376119-d683-41a7-aadb-78dcf55fbda9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lauren Haig", - "company": "Safetrust", - "phone": "820-509-2078", - "email": "lauren@safetrust.com" - }, - { - "id": 1899, - "guid": "ee451366-aa2d-4d7d-9480-3dfa34ddbdd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Wainwright", - "company": "Fibrotopia", - "phone": "882-509-2189", - "email": "destiny@fibrotopia.com" - }, - { - "id": 1900, - "guid": "4bda02f8-d4ff-45d1-8c00-2ead619b556e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Sheldon", - "company": "Teraserv", - "phone": "808-496-3748", - "email": "katelyn@teraserv.com" - }, - { - "id": 1901, - "guid": "c255fc31-7ed1-46a4-9540-f609de795296", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Fulton", - "company": "Anaframe", - "phone": "866-486-3683", - "email": "makayla@anaframe.com" - }, - { - "id": 1902, - "guid": "0746d5e6-8a9c-4641-9c10-20860f1564c1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Gilmore", - "company": "eEyetanic", - "phone": "827-484-3868", - "email": "ariana@eeyetanic.com" - }, - { - "id": 1903, - "guid": "0b8fc40d-7833-4bab-b5b7-0a85da6a4748", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexa Haig", - "company": "Cryptotemplate", - "phone": "877-512-2526", - "email": "alexa@cryptotemplate.com" - }, - { - "id": 1904, - "guid": "89b66f85-ea4d-436a-8431-fe25c714e1dd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Walkman", - "company": "Robotomic", - "phone": "894-416-3919", - "email": "sophie@robotomic.com" - }, - { - "id": 1905, - "guid": "04ac5a27-6033-4be3-b659-505df3071e90", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Warren", - "company": "Techtron", - "phone": "806-498-3446", - "email": "aaliyah@techtron.com" - }, - { - "id": 1906, - "guid": "9cf51f6e-462d-4c8f-a4c0-fb8463bb6173", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Hailey", - "company": "Conotomics", - "phone": "864-422-2351", - "email": "hailey@conotomics.com" - }, - { - "id": 1907, - "guid": "04353748-01f1-4589-b280-679f3194b3bc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Higgins", - "company": "eSteganoergy", - "phone": "893-438-2595", - "email": "vanessa@esteganoergy.com" - }, - { - "id": 1908, - "guid": "0fbc3974-622f-4862-8e6f-8cb6575865ba", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Timmons", - "company": "Skydata", - "phone": "896-498-3617", - "email": "alexis@skydata.com" - }, - { - "id": 1909, - "guid": "70dcbff3-6106-4693-9005-b0ccfae8fc9c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Oldridge", - "company": "Orthosoft", - "phone": "866-409-2766", - "email": "serenity@orthosoft.com" - }, - { - "id": 1910, - "guid": "154bec42-417a-4308-809a-39daa9acc5c4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mia Hoggarth", - "company": "US Infratouch", - "phone": "848-508-3244", - "email": "mia@us infratouch.com" - }, - { - "id": 1911, - "guid": "cb6358b7-c13a-4b96-93a7-e1bb76708775", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Smith", - "company": "Compuamerica", - "phone": "819-471-3878", - "email": "arianna@compuamerica.com" - }, - { - "id": 1912, - "guid": "bc19aeb6-cb86-4603-be57-2b12061864c2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Gilmore", - "company": "Entcast", - "phone": "893-600-3079", - "email": "katherine@entcast.com" - }, - { - "id": 1913, - "guid": "e436a009-46f0-4e97-a77b-27f66b845086", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Hawkins", - "company": "Turbomart", - "phone": "800-425-2491", - "email": "trinity@turbomart.com" - }, - { - "id": 1914, - "guid": "a481f92c-3925-4b50-88d2-dce804c7229f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Neal", - "company": "Netsystems", - "phone": "838-561-2896", - "email": "zoe@netsystems.com" - }, - { - "id": 1915, - "guid": "854bf59d-7cf7-419d-a802-7c2b9738b989", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Nevaeh Harrison", - "company": "Quintegrity", - "phone": "876-526-2870", - "email": "nevaeh@quintegrity.com" - }, - { - "id": 1916, - "guid": "5ba6a399-2772-4b2b-98ae-fb9b68f77b81", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Miers", - "company": "Robotomic", - "phone": "874-411-2438", - "email": "sophia@robotomic.com" - }, - { - "id": 1917, - "guid": "c0830a0b-63a1-4305-abed-7ca64ca3f4f8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Goldman", - "company": "Airdyne", - "phone": "896-587-3026", - "email": "trinity@airdyne.com" - }, - { - "id": 1918, - "guid": "63211f2f-f520-4613-a8f1-20c31161e7da", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aubrey Oldman", - "company": "Fibrotouch", - "phone": "873-582-2052", - "email": "aubrey@fibrotouch.com" - }, - { - "id": 1919, - "guid": "72627dfb-7c62-472d-828d-ab95566e000e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Goldman", - "company": "Openserve", - "phone": "835-581-2648", - "email": "ariana@openserve.com" - }, - { - "id": 1920, - "guid": "ed1e2abc-bda0-4a7b-9f3a-1f483d33b363", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Gilson", - "company": "SysUSA", - "phone": "803-432-3429", - "email": "kaitlyn@sysusa.com" - }, - { - "id": 1921, - "guid": "899d9fa3-537f-47eb-8957-0bb1dc49447e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Gerald", - "company": "Idmax", - "phone": "806-487-2138", - "email": "katherine@idmax.com" - }, - { - "id": 1922, - "guid": "e7a2eb12-fc77-4b6c-99f6-9455996252b7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Galbraith", - "company": "Conotomics", - "phone": "845-517-3678", - "email": "victoria@conotomics.com" - }, - { - "id": 1923, - "guid": "d72c5b38-1eb1-4f75-9dbf-fcde9120f917", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emma Miln", - "company": "Orthomedia", - "phone": "817-422-3409", - "email": "emma@orthomedia.com" - }, - { - "id": 1924, - "guid": "c6f59d71-af59-4075-8924-66801443a6a8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Ford", - "company": "Compuamerica", - "phone": "897-536-2226", - "email": "khloe@compuamerica.com" - }, - { - "id": 1925, - "guid": "52fdc2a3-ce3f-4ef7-9f64-7c9e713b208f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Gilmore", - "company": "InfoAirway", - "phone": "847-411-3748", - "email": "autumn@infoairway.com" - }, - { - "id": 1926, - "guid": "c01a7bd9-50d6-4cb4-840d-19e25a90c88a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Fisher", - "company": "Inridium", - "phone": "832-494-3189", - "email": "kaitlyn@inridium.com" - }, - { - "id": 1927, - "guid": "7d005e76-7b33-40e9-a84f-c683f456fefd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Goodman", - "company": "Fibrotouch", - "phone": "808-407-3956", - "email": "madeline@fibrotouch.com" - }, - { - "id": 1928, - "guid": "d78eda19-dd63-4af5-9f33-b8a8f3f30225", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Chloe Ward", - "company": "iQualcar", - "phone": "834-546-3001", - "email": "chloe@iqualcar.com" - }, - { - "id": 1929, - "guid": "0ed78357-2f7f-421d-a415-b42af9ddfc39", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Gerald", - "company": "Proline", - "phone": "805-542-2657", - "email": "lily@proline.com" - }, - { - "id": 1930, - "guid": "73852537-7012-4bc5-9eb3-cc586b16d58a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Ogden", - "company": "Westgate", - "phone": "899-488-2780", - "email": "layla@westgate.com" - }, - { - "id": 1931, - "guid": "eb8b6896-02de-4727-a9ff-edfb57912a17", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Arianna Ogden", - "company": "Westtomik", - "phone": "872-494-3000", - "email": "arianna@westtomik.com" - }, - { - "id": 1932, - "guid": "1abb7b1c-d40a-4f4b-a18c-badaab66c57f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Webster", - "company": "Robocomm", - "phone": "827-529-3193", - "email": "gianna@robocomm.com" - }, - { - "id": 1933, - "guid": "29ded28a-570b-4981-9d5b-4245e2dd3776", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Turner", - "company": "Steganoconiche", - "phone": "819-508-2027", - "email": "gabrielle@steganoconiche.com" - }, - { - "id": 1934, - "guid": "f985bd7a-f1a7-456c-80ce-a3dcb1d597aa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Morrison", - "company": "Jamrola", - "phone": "828-568-2212", - "email": "addison@jamrola.com" - }, - { - "id": 1935, - "guid": "727f1343-cca1-496b-97c0-378da4494d7f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Wayne", - "company": "Idmax", - "phone": "847-581-3960", - "email": "trinity@idmax.com" - }, - { - "id": 1936, - "guid": "bfbc0a72-eef1-4e41-b187-e4022a130a57", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Higgins", - "company": "Teratopia", - "phone": "833-498-2219", - "email": "kaitlyn@teratopia.com" - }, - { - "id": 1937, - "guid": "6e9d979c-4ee5-4d59-8583-c80aa78832e3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Miers", - "company": "Sontopia", - "phone": "821-428-2473", - "email": "savannah@sontopia.com" - }, - { - "id": 1938, - "guid": "6fa1c345-d953-4b7f-8254-df2083e77c2e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Hoggarth", - "company": "Keytheon", - "phone": "861-581-3293", - "email": "autumn@keytheon.com" - }, - { - "id": 1939, - "guid": "81248de8-e2f2-41b6-98ab-cda89ee7eed7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Youmans", - "company": "Vencom", - "phone": "867-509-2608", - "email": "serenity@vencom.com" - }, - { - "id": 1940, - "guid": "284bf69e-2016-4a62-a411-451da4bfab4d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Youmans", - "company": "Unconix", - "phone": "860-503-2484", - "email": "katelyn@unconix.com" - }, - { - "id": 1941, - "guid": "04292be4-271f-4e8b-98df-f8043480c1a2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Neal", - "company": "Ameritron", - "phone": "898-473-3135", - "email": "olivia@ameritron.com" - }, - { - "id": 1942, - "guid": "70bcfe98-fb09-4272-87f5-60e0ba028484", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Payton Hawkins", - "company": "Nanobanc", - "phone": "868-543-3562", - "email": "payton@nanobanc.com" - }, - { - "id": 1943, - "guid": "811048dc-1555-4d1d-97bf-1f156e84eddc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Wood", - "company": "Syssoft", - "phone": "831-437-2939", - "email": "amelia@syssoft.com" - }, - { - "id": 1944, - "guid": "24d555ff-6e4e-4629-9070-dd3113e22ab5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Gardner", - "company": "Turbomart", - "phone": "869-485-2622", - "email": "genesis@turbomart.com" - }, - { - "id": 1945, - "guid": "14cc8fb5-a541-4083-9380-55f16417ded2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Andrea Wood", - "company": "Skydata", - "phone": "811-512-3996", - "email": "andrea@skydata.com" - }, - { - "id": 1946, - "guid": "a106a9ac-da8f-4f8d-a306-236e0b63c56b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Neal", - "company": "Titanirola", - "phone": "823-513-3231", - "email": "victoria@titanirola.com" - }, - { - "id": 1947, - "guid": "5ce52b51-1e88-48d5-867f-631064cfa35b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Ford", - "company": "Qualserve", - "phone": "815-475-2060", - "email": "ava@qualserve.com" - }, - { - "id": 1948, - "guid": "d63fb9a6-4987-4441-9249-8904829d6aa8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Gustman", - "company": "Steganoconiche", - "phone": "850-574-3541", - "email": "morgan@steganoconiche.com" - }, - { - "id": 1949, - "guid": "f6fdebb0-9bae-4452-bb22-1fdba8b43437", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Morrison", - "company": "US Infratouch", - "phone": "838-527-3071", - "email": "brianna@us infratouch.com" - }, - { - "id": 1950, - "guid": "7af45daa-50bd-4cbd-a8b8-78d1b9a8aea0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Thorndike", - "company": "Aluco", - "phone": "887-599-2532", - "email": "katelyn@aluco.com" - }, - { - "id": 1951, - "guid": "4488b18f-2326-40ad-84e8-7aeed61b826d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Youmans", - "company": "OpKeycomm", - "phone": "882-406-3961", - "email": "kaitlyn@opkeycomm.com" - }, - { - "id": 1952, - "guid": "9b5c133a-6776-4561-b485-b1c5e8fe7521", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Chandter", - "company": "Proline", - "phone": "870-595-2628", - "email": "audrey@proline.com" - }, - { - "id": 1953, - "guid": "ee4c6ce5-62e2-4297-9a56-7a26858aa4d7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Chesterton", - "company": "RoboAerlogix", - "phone": "863-448-2010", - "email": "madeline@roboaerlogix.com" - }, - { - "id": 1954, - "guid": "1177caea-eec4-4c48-9bf7-4030395306e3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Julia Oldridge", - "company": "Hypervaco", - "phone": "809-539-3769", - "email": "julia@hypervaco.com" - }, - { - "id": 1955, - "guid": "807d9f02-507e-4891-9e49-140e0228083a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Miln", - "company": "Keytheon", - "phone": "875-506-3969", - "email": "victoria@keytheon.com" - }, - { - "id": 1956, - "guid": "a5b23fba-ceee-4fdf-9801-46a6d4bde435", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabrielle Haig", - "company": "Skydata", - "phone": "822-401-3335", - "email": "gabrielle@skydata.com" - }, - { - "id": 1957, - "guid": "2510c3cb-1877-4c9d-bc5c-9a3b6f4b2fb4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Webster", - "company": "OpKeycomm", - "phone": "820-567-3249", - "email": "eva@opkeycomm.com" - }, - { - "id": 1958, - "guid": "c8ccd22e-2139-4e03-9f20-ae8b142abef8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya WifKinson", - "company": "InfoAirway", - "phone": "887-418-3452", - "email": "mya@infoairway.com" - }, - { - "id": 1959, - "guid": "5a4a283c-8991-4d66-830f-30a60e08eaaa", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexa Stanley", - "company": "Orthosoft", - "phone": "859-564-3338", - "email": "alexa@orthosoft.com" - }, - { - "id": 1960, - "guid": "c5701744-6ddc-40ec-a142-538d87566ef9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Campbell", - "company": "Celgra", - "phone": "821-492-2759", - "email": "ariana@celgra.com" - }, - { - "id": 1961, - "guid": "694ffb06-905c-4dc8-8f2b-e79edf395f7a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katherine Hodges", - "company": "Sontopia", - "phone": "810-554-3936", - "email": "katherine@sontopia.com" - }, - { - "id": 1962, - "guid": "770238df-b2a3-464c-be53-ccc050358ea5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Hodges", - "company": "US Omnigraphik", - "phone": "865-501-2346", - "email": "serenity@us omnigraphik.com" - }, - { - "id": 1963, - "guid": "0594cd43-9248-473e-8ed4-6bdf2192d2c2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Oldman", - "company": "Fibrotopia", - "phone": "885-471-3057", - "email": "zoey@fibrotopia.com" - }, - { - "id": 1964, - "guid": "9457c2ba-4933-4ce8-8b43-19fa85380854", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Conors", - "company": "Xeicon", - "phone": "845-528-2087", - "email": "paige@xeicon.com" - }, - { - "id": 1965, - "guid": "69db8cec-da27-439f-b0ef-ad5132db17b3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Goldman", - "company": "Technogra", - "phone": "873-498-3530", - "email": "julia@technogra.com" - }, - { - "id": 1966, - "guid": "48df98de-448c-403c-9967-a95db37aa739", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Harrison", - "company": "Jamconik", - "phone": "818-567-3517", - "email": "camila@jamconik.com" - }, - { - "id": 1967, - "guid": "9e4e69cf-9c43-4e23-b27e-cbd669e4f18b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Thomson", - "company": "Safeagra", - "phone": "820-546-2755", - "email": "faith@safeagra.com" - }, - { - "id": 1968, - "guid": "deb3a890-8937-425c-9b00-84657df4f880", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Gilson", - "company": "Venconix", - "phone": "804-581-2817", - "email": "molly@venconix.com" - }, - { - "id": 1969, - "guid": "e53b3ac3-3900-40a8-a0b7-3ea3b52d1c02", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Miller", - "company": "Robotomic", - "phone": "865-485-2081", - "email": "angelina@robotomic.com" - }, - { - "id": 1970, - "guid": "b9e68ca2-2bca-407d-9ada-eaaa1e0ae019", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Oldman", - "company": "US Omnigraphik", - "phone": "874-498-3961", - "email": "gabriella@us omnigraphik.com" - }, - { - "id": 1971, - "guid": "65efabba-8187-4f89-bb30-8762d3bb29bd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Day", - "company": "Gigaura", - "phone": "838-573-3711", - "email": "peyton@gigaura.com" - }, - { - "id": 1972, - "guid": "4ccd4704-3ca9-4b53-9921-a8926d2179e8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Webster", - "company": "SysUSA", - "phone": "860-597-2319", - "email": "alexis@sysusa.com" - }, - { - "id": 1973, - "guid": "de12f4aa-4fb4-4fc1-ab16-da66c638739b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Vaughan", - "company": "Allphysiche", - "phone": "897-592-2413", - "email": "audrey@allphysiche.com" - }, - { - "id": 1974, - "guid": "831593b7-701f-4544-93cd-02224004c2b5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Gate", - "company": "Tekcar", - "phone": "868-411-3503", - "email": "samantha@tekcar.com" - }, - { - "id": 1975, - "guid": "17067e9b-0997-4a9b-8120-a40f3926279c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Oswald", - "company": "Proline", - "phone": "894-567-3712", - "email": "angelina@proline.com" - }, - { - "id": 1976, - "guid": "2abf0389-10e0-494d-97dc-e919f5c3f338", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Gate", - "company": "Titanigraf", - "phone": "833-411-2140", - "email": "sarah@titanigraf.com" - }, - { - "id": 1977, - "guid": "b929a823-9ff9-4024-9959-2f5134622d5f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mya Waller", - "company": "Orthosoft", - "phone": "889-415-3191", - "email": "mya@orthosoft.com" - }, - { - "id": 1978, - "guid": "f9aa2b41-e5df-4122-824d-8f6040504700", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Gilson", - "company": "iEnland", - "phone": "891-483-2424", - "email": "vanessa@ienland.com" - }, - { - "id": 1979, - "guid": "96ffdde0-c169-4368-a836-7c45dd2d4e47", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Gilmore", - "company": "Jamrola", - "phone": "891-425-3802", - "email": "alyssa@jamrola.com" - }, - { - "id": 1980, - "guid": "2959f978-5fb4-4a76-8d44-6a6b7a79700c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Harrison", - "company": "Idmax", - "phone": "845-523-3639", - "email": "serenity@idmax.com" - }, - { - "id": 1981, - "guid": "cc8f5cdb-e99d-46a0-9a1b-3cbca9bd52f6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Freeman", - "company": "Teknoplexon", - "phone": "826-416-2969", - "email": "sofia@teknoplexon.com" - }, - { - "id": 1982, - "guid": "c3e72fef-4158-4f90-9d91-544eaf1bf797", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Davidson", - "company": "RoboAerlogix", - "phone": "899-542-2784", - "email": "ashley@roboaerlogix.com" - }, - { - "id": 1983, - "guid": "c12f853b-d242-45f1-929f-9dca0c4df103", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Carrington", - "company": "Turbomart", - "phone": "808-561-2082", - "email": "kimberly@turbomart.com" - }, - { - "id": 1984, - "guid": "99bb45aa-b0ff-4bdf-aa1e-ff1525931945", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Haig", - "company": "Robotemplate", - "phone": "850-596-3468", - "email": "riley@robotemplate.com" - }, - { - "id": 1985, - "guid": "7be23edf-1649-4ec1-9e8a-dc9b44ae051a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Makayla Creighton", - "company": "Vencom", - "phone": "843-430-2539", - "email": "makayla@vencom.com" - }, - { - "id": 1986, - "guid": "d14f3205-3e68-4bfb-8777-fed539542f5b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney WifKinson", - "company": "eSteganoergy", - "phone": "880-522-3730", - "email": "sydney@esteganoergy.com" - }, - { - "id": 1987, - "guid": "159e89fd-11ba-4fcc-86f4-fe561e4127ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Wesley", - "company": "Dynarama", - "phone": "807-460-3288", - "email": "ella@dynarama.com" - }, - { - "id": 1988, - "guid": "517a881c-b39f-43d8-a3c4-8b4653ae9343", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Gibbs", - "company": "Mescatron", - "phone": "893-438-2125", - "email": "zoey@mescatron.com" - }, - { - "id": 1989, - "guid": "57434b9f-25d5-4ba5-bddf-2125f1c19459", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Abramson", - "company": "Conrama", - "phone": "878-422-3967", - "email": "brooklyn@conrama.com" - }, - { - "id": 1990, - "guid": "afaa50f9-a828-4e3c-958a-3eaa2676dc86", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Cramer", - "company": "Venconix", - "phone": "889-498-2025", - "email": "audrey@venconix.com" - }, - { - "id": 1991, - "guid": "59872928-90a5-4038-b698-98b2b1ec11ff", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Hamphrey", - "company": "Truetomic", - "phone": "818-431-2653", - "email": "aaliyah@truetomic.com" - }, - { - "id": 1992, - "guid": "03a4cdb2-5125-4eb3-a190-2416efb61e9d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Hailey", - "company": "Fibrotopia", - "phone": "852-501-3585", - "email": "avery@fibrotopia.com" - }, - { - "id": 1993, - "guid": "c79b42e0-6506-485c-936e-33d2697fdf61", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Webster", - "company": "Fibroserve", - "phone": "854-548-2409", - "email": "mackenzie@fibroserve.com" - }, - { - "id": 1994, - "guid": "fefdc669-2f2d-4407-8e8d-c04ebc41ceac", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Brooks", - "company": "SysVenamerica", - "phone": "854-544-2665", - "email": "savannah@sysvenamerica.com" - }, - { - "id": 1995, - "guid": "67e40c1a-fee7-48cc-9fd2-8fde944346e1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Hodges", - "company": "Teratopia", - "phone": "841-496-3793", - "email": "nevaeh@teratopia.com" - }, - { - "id": 1996, - "guid": "d352f148-0c38-4f20-b1d1-2fcfa6a6fcf2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Haig", - "company": "Titanigraf", - "phone": "818-454-2479", - "email": "bailey@titanigraf.com" - }, - { - "id": 1997, - "guid": "305429db-1776-42e2-9b79-47733b9ab2ca", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kimberly Oswald", - "company": "Genland", - "phone": "814-449-3467", - "email": "kimberly@genland.com" - }, - { - "id": 1998, - "guid": "bc1e126c-43bb-4f73-993b-9be6dd7b0c8f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Walkman", - "company": "Ventanium", - "phone": "869-561-3951", - "email": "amelia@ventanium.com" - }, - { - "id": 1999, - "guid": "53da7105-36fc-4de6-8e7e-61008703033c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Audrey Winter", - "company": "Robocomm", - "phone": "828-588-2060", - "email": "audrey@robocomm.com" - }, - { - "id": 2000, - "guid": "91c8b1f1-6b01-45df-ae68-07ac589d9d4b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Ford", - "company": "Robocomm", - "phone": "834-439-3335", - "email": "avery@robocomm.com" - }, - { - "id": 2001, - "guid": "f93b0674-77c6-42f6-bb85-4e2863adb659", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Milton", - "company": "Techtron", - "phone": "812-542-2052", - "email": "chloe@techtron.com" - }, - { - "id": 2002, - "guid": "f5f4c552-6ce6-4b7a-9b46-6c13d881f1ee", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Charlotte Young", - "company": "OpKeycomm", - "phone": "878-599-3314", - "email": "charlotte@opkeycomm.com" - }, - { - "id": 2003, - "guid": "976e7738-ffff-492f-a1ce-36c2d5659acb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Chapman", - "company": "Quintegrity", - "phone": "852-562-2902", - "email": "lillian@quintegrity.com" - }, - { - "id": 2004, - "guid": "476717dc-31bb-40b5-a122-43ba5cf3f00e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Nathan", - "company": "Airdyne", - "phone": "849-590-2076", - "email": "eva@airdyne.com" - }, - { - "id": 2005, - "guid": "d74c64e4-80b2-4731-9e9d-e4f3ca7cdde4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Gerald", - "company": "Raylog", - "phone": "814-594-2999", - "email": "charlotte@raylog.com" - }, - { - "id": 2006, - "guid": "6818c009-db22-4b78-86f3-161f2a1d7243", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Thorndike", - "company": "Netsystems", - "phone": "820-426-3304", - "email": "mariah@netsystems.com" - }, - { - "id": 2007, - "guid": "61650b88-0fc4-49e3-815f-063fb03962d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Freeman", - "company": "Westtomik", - "phone": "855-485-3015", - "email": "maria@westtomik.com" - }, - { - "id": 2008, - "guid": "b1406034-7a94-4dc1-a208-ed3c748bcb9a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Wallace", - "company": "InfoAirway", - "phone": "811-562-3871", - "email": "leah@infoairway.com" - }, - { - "id": 2009, - "guid": "479f088e-be14-4bb6-a5f0-d7533410e633", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Michaelson", - "company": "iEnland", - "phone": "876-537-2736", - "email": "sydney@ienland.com" - }, - { - "id": 2010, - "guid": "a76fcffc-2f01-4ec7-a393-db1e1d0e57ca", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Paige Gilbert", - "company": "Teratopia", - "phone": "877-541-3897", - "email": "paige@teratopia.com" - }, - { - "id": 2011, - "guid": "dd8b84aa-8615-4555-92fd-1668cbc95fef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Vanessa Cramer", - "company": "Qualserve", - "phone": "875-534-2409", - "email": "vanessa@qualserve.com" - }, - { - "id": 2012, - "guid": "2f1d1952-29a2-4c04-96e9-d03b2296fd45", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Ogden", - "company": "Orthosoft", - "phone": "803-539-2032", - "email": "taylor@orthosoft.com" - }, - { - "id": 2013, - "guid": "8ae5860c-cae8-4703-a737-7a2875ec4448", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Cook", - "company": "Textiqua", - "phone": "856-450-2266", - "email": "addison@textiqua.com" - }, - { - "id": 2014, - "guid": "945557e0-a13b-4f73-830e-aac94faec5b6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Mercer", - "company": "Conrama", - "phone": "870-437-3381", - "email": "mackenzie@conrama.com" - }, - { - "id": 2015, - "guid": "000d78a7-8d8b-473c-a77b-59de97896d5c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Warren", - "company": "Fibrotopia", - "phone": "827-404-2653", - "email": "victoria@fibrotopia.com" - }, - { - "id": 2016, - "guid": "3b34c032-0f52-4b93-9d2a-2942f8344fcd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Mercer", - "company": "Qualserve", - "phone": "806-451-3219", - "email": "lily@qualserve.com" - }, - { - "id": 2017, - "guid": "fd2d225d-1fa5-44f1-af1d-0f740eeb7f10", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Amelia Smith", - "company": "Robotomic", - "phone": "870-585-3333", - "email": "amelia@robotomic.com" - }, - { - "id": 2018, - "guid": "66794cb2-fcef-43a4-9366-c93ee220c75b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Gustman", - "company": "Turbomart", - "phone": "872-512-3632", - "email": "jocelyn@turbomart.com" - }, - { - "id": 2019, - "guid": "70b39b71-86e9-4b22-84c8-fbd8b49a1cf9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Miller", - "company": "Quintegrity", - "phone": "829-495-2028", - "email": "samantha@quintegrity.com" - }, - { - "id": 2020, - "guid": "bd29f23b-ba71-4d22-af83-83c2d13edfc4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith WifKinson", - "company": "Mescatron", - "phone": "874-426-3319", - "email": "faith@mescatron.com" - }, - { - "id": 2021, - "guid": "2b668e65-33d6-4f02-b12c-f82686f22586", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Conors", - "company": "Multitiqua", - "phone": "830-599-3962", - "email": "bailey@multitiqua.com" - }, - { - "id": 2022, - "guid": "f15f048d-828c-48ef-aecb-6c3c5d7b5716", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Carey", - "company": "RoboAerlogix", - "phone": "834-526-3975", - "email": "olivia@roboaerlogix.com" - }, - { - "id": 2023, - "guid": "f6102a7f-bbc4-4a14-8bda-78ed4782fa02", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Hoggarth", - "company": "Robocomm", - "phone": "835-445-2400", - "email": "arianna@robocomm.com" - }, - { - "id": 2024, - "guid": "140d0f88-2a88-46f2-a064-5de73dcf8853", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Vaughan", - "company": "Jamrola", - "phone": "808-566-2827", - "email": "chloe@jamrola.com" - }, - { - "id": 2025, - "guid": "b30bcc10-9960-4911-b655-8c54548b6fdd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Owen", - "company": "Allnet", - "phone": "896-502-2511", - "email": "madeline@allnet.com" - }, - { - "id": 2026, - "guid": "9313c732-0fac-406b-93cc-bdd14da63b64", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Gustman", - "company": "Steganoconiche", - "phone": "877-514-3014", - "email": "amelia@steganoconiche.com" - }, - { - "id": 2027, - "guid": "ca7f4553-9df2-4ac7-8b29-abc509eb2473", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Crossman", - "company": "Mescaridic", - "phone": "846-580-2160", - "email": "kimberly@mescaridic.com" - }, - { - "id": 2028, - "guid": "367dfad6-d1b0-4545-aa59-f0cc8e65f9a3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Fisher", - "company": "Navivacs", - "phone": "841-505-3954", - "email": "mya@navivacs.com" - }, - { - "id": 2029, - "guid": "38518481-8c4d-4cd4-a06a-0551069a44b3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Osborne", - "company": "eEyetanic", - "phone": "883-518-3457", - "email": "madelyn@eeyetanic.com" - }, - { - "id": 2030, - "guid": "7cd32748-29ba-444a-b85d-458463ddc4ce", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Wallace", - "company": "SysUSA", - "phone": "821-577-2508", - "email": "addison@sysusa.com" - }, - { - "id": 2031, - "guid": "065cc5bc-2d14-49ec-9478-d3b05124a833", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Chesterton", - "company": "Hypervaco", - "phone": "834-426-3148", - "email": "zoe@hypervaco.com" - }, - { - "id": 2032, - "guid": "1cafb61a-5ae8-48e0-90dc-640567969831", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Grace Chesterton", - "company": "Robotemplate", - "phone": "897-452-3425", - "email": "grace@robotemplate.com" - }, - { - "id": 2033, - "guid": "116bc254-2e87-4c31-a7af-88f373f1d27f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Waller", - "company": "Titanirola", - "phone": "816-466-3128", - "email": "mya@titanirola.com" - }, - { - "id": 2034, - "guid": "4eae67dc-b4c7-4d37-8aeb-57aa7c2a238a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Hamphrey", - "company": "US Omnigraphik", - "phone": "896-521-2616", - "email": "gianna@us omnigraphik.com" - }, - { - "id": 2035, - "guid": "85c085f7-07b4-4bc1-999b-ac342cac5b84", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Carter", - "company": "Jamrola", - "phone": "874-562-3922", - "email": "katelyn@jamrola.com" - }, - { - "id": 2036, - "guid": "6f7bbed4-1450-48f8-833a-1b90d1fdd110", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Waller", - "company": "Conrama", - "phone": "826-458-3168", - "email": "camila@conrama.com" - }, - { - "id": 2037, - "guid": "a20233da-04d9-42ae-80f3-051c8de64c41", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Wayne", - "company": "Robocomm", - "phone": "832-483-3860", - "email": "peyton@robocomm.com" - }, - { - "id": 2038, - "guid": "a6301963-b4b3-4c4a-8477-c55fcb59b390", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Campbell", - "company": "Mescaridic", - "phone": "879-574-3448", - "email": "zoe@mescaridic.com" - }, - { - "id": 2039, - "guid": "781717da-3ad8-4608-ac57-4d2336cb144a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Hancock", - "company": "Anagraph", - "phone": "898-403-3742", - "email": "elizabeth@anagraph.com" - }, - { - "id": 2040, - "guid": "3d804008-f519-4957-b777-194c5a529879", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Thornton", - "company": "Raylog", - "phone": "876-545-2424", - "email": "natalie@raylog.com" - }, - { - "id": 2041, - "guid": "4547375f-9223-465a-a195-70cd9c51115d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Vaughan", - "company": "Jamconik", - "phone": "800-439-2847", - "email": "jasmine@jamconik.com" - }, - { - "id": 2042, - "guid": "c9421068-30f2-49bc-9fce-4469fdd840df", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Bush", - "company": "Titanirola", - "phone": "863-526-2236", - "email": "taylor@titanirola.com" - }, - { - "id": 2043, - "guid": "0fca72a2-9452-4b96-ae0a-785083f633e4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Milton", - "company": "SysVenamerica", - "phone": "824-529-2478", - "email": "allison@sysvenamerica.com" - }, - { - "id": 2044, - "guid": "0753a623-fb72-4ec0-8d1e-fc2e8e25a6c6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sarah Murphy", - "company": "Pacwest", - "phone": "858-451-2106", - "email": "sarah@pacwest.com" - }, - { - "id": 2045, - "guid": "ecd1c764-7330-4f4e-a79f-7def5a47f90c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Neal", - "company": "Teraserv", - "phone": "894-426-2181", - "email": "kimberly@teraserv.com" - }, - { - "id": 2046, - "guid": "4ecbba5b-4152-4219-8242-36ef26539307", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Ogden", - "company": "Teknoplexon", - "phone": "863-571-2242", - "email": "vanessa@teknoplexon.com" - }, - { - "id": 2047, - "guid": "9db9ede0-1c2b-4173-8f73-ba341f29d4ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Hoggarth", - "company": "US Omnigraphik", - "phone": "816-573-2603", - "email": "caroline@us omnigraphik.com" - }, - { - "id": 2048, - "guid": "4d25660b-82fc-4833-98c8-d4fdb56da376", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Neal", - "company": "SysVenamerica", - "phone": "858-561-2024", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 2049, - "guid": "2c03de92-925e-483c-9505-116b6501dd0c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Nathan", - "company": "Aprama", - "phone": "889-578-2622", - "email": "mia@aprama.com" - }, - { - "id": 2050, - "guid": "9336c3ef-c2ab-4e48-aec1-169bd017c1f6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Gate", - "company": "iOptystix", - "phone": "854-565-2000", - "email": "amelia@ioptystix.com" - }, - { - "id": 2051, - "guid": "5bd919e7-e13a-46a0-bcd6-77c653c67954", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Charlson", - "company": "Skydata", - "phone": "835-500-3103", - "email": "amelia@skydata.com" - }, - { - "id": 2052, - "guid": "8ed53295-08f5-4da4-aff1-310831df392e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Charlson", - "company": "Safetrust", - "phone": "840-517-3234", - "email": "amelia@safetrust.com" - }, - { - "id": 2053, - "guid": "65ccfc78-7412-41f1-b47d-88bdb276865d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Molligan", - "company": "Steganoconiche", - "phone": "808-457-2633", - "email": "katelyn@steganoconiche.com" - }, - { - "id": 2054, - "guid": "24ebba85-31fa-49ac-847f-ab096c635f0c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Miln", - "company": "Raylog", - "phone": "831-421-3920", - "email": "maya@raylog.com" - }, - { - "id": 2055, - "guid": "58136c09-f3b2-4603-ac13-51d8fe04ffe5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Waller", - "company": "Unconix", - "phone": "832-530-2932", - "email": "gabriella@unconix.com" - }, - { - "id": 2056, - "guid": "92008059-0123-49d5-a639-d3715f7f2746", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Creighton", - "company": "iSkyvaco", - "phone": "889-456-2601", - "email": "madelyn@iskyvaco.com" - }, - { - "id": 2057, - "guid": "85c86ee7-74ae-41a9-90b7-704f59e545d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Mercer", - "company": "Anaframe", - "phone": "840-516-3015", - "email": "rachel@anaframe.com" - }, - { - "id": 2058, - "guid": "bc22114c-1d1d-4618-a09f-ccfd69faf574", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Cook", - "company": "Teraserv", - "phone": "886-491-3680", - "email": "avery@teraserv.com" - }, - { - "id": 2059, - "guid": "67bc0ece-7197-44f3-a94a-3ec1f82e51b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Charlotte Young", - "company": "Titanirola", - "phone": "881-435-2206", - "email": "charlotte@titanirola.com" - }, - { - "id": 2060, - "guid": "072208a2-ea4f-4ab7-ad67-01e04fb5ace7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Wesley", - "company": "Westtomik", - "phone": "811-552-3738", - "email": "valeria@westtomik.com" - }, - { - "id": 2061, - "guid": "cee35d61-efb2-4360-bcf8-0d38863743bf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Morrison", - "company": "Conotomics", - "phone": "820-551-3829", - "email": "evelyn@conotomics.com" - }, - { - "id": 2062, - "guid": "2a88a104-98f0-45d3-a797-09e92adbf664", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Watson", - "company": "Skydata", - "phone": "841-524-3486", - "email": "molly@skydata.com" - }, - { - "id": 2063, - "guid": "312f0bcf-a418-40c6-a0b5-c24b1f29d448", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Gibbs", - "company": "Truegate", - "phone": "800-540-3304", - "email": "brooke@truegate.com" - }, - { - "id": 2064, - "guid": "b0cc249d-d504-4d08-8585-d94414b29be4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabrielle Timmons", - "company": "OpKeycomm", - "phone": "888-564-2402", - "email": "gabrielle@opkeycomm.com" - }, - { - "id": 2065, - "guid": "ac047297-012c-43aa-8256-0ac3ed890208", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Gilmore", - "company": "iMedconik", - "phone": "800-421-3490", - "email": "emma@imedconik.com" - }, - { - "id": 2066, - "guid": "b08e6f08-811d-4e8d-9cb7-b8f0cbe28ba9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Eva Mercer", - "company": "Inridium", - "phone": "844-517-2793", - "email": "eva@inridium.com" - }, - { - "id": 2067, - "guid": "6287a397-4b04-4345-8c0f-dadc0b4b731f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Youmans", - "company": "Raylog", - "phone": "874-401-3316", - "email": "kaitlyn@raylog.com" - }, - { - "id": 2068, - "guid": "07e73193-632f-4323-985b-52d21849f6ee", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Vance", - "company": "Sontopia", - "phone": "842-496-2709", - "email": "isabelle@sontopia.com" - }, - { - "id": 2069, - "guid": "7c68fd51-e8fc-4c3b-bce8-e4f08c2d5b14", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Nash", - "company": "Teratopia", - "phone": "838-463-3998", - "email": "sofia@teratopia.com" - }, - { - "id": 2070, - "guid": "7068465f-d292-4b88-b1b0-901f29c7bf4f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Peyton Cook", - "company": "Truegate", - "phone": "805-567-2075", - "email": "peyton@truegate.com" - }, - { - "id": 2071, - "guid": "b1f43473-6fa0-4132-9e34-01a7fc547972", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Molligan", - "company": "Steganoconiche", - "phone": "854-425-2036", - "email": "allison@steganoconiche.com" - }, - { - "id": 2072, - "guid": "ff5ae91c-e4b4-4f1f-8f30-abb1826bf293", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Molligan", - "company": "Videobanc", - "phone": "882-505-2059", - "email": "savannah@videobanc.com" - }, - { - "id": 2073, - "guid": "22e08abc-bedb-4e2f-a688-05f20e6032de", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Galbraith", - "company": "Pacwest", - "phone": "849-436-3126", - "email": "aubrey@pacwest.com" - }, - { - "id": 2074, - "guid": "2cb87e29-03f4-4387-af51-057711bdc1f3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Neal", - "company": "Westmedia", - "phone": "800-409-2241", - "email": "katherine@westmedia.com" - }, - { - "id": 2075, - "guid": "f12d21af-d178-4251-8552-728edf2a65a6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Thorndike", - "company": "Videobanc", - "phone": "859-503-2319", - "email": "ariana@videobanc.com" - }, - { - "id": 2076, - "guid": "6a92f7ee-7381-4118-a3af-6ae701790847", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Goodman", - "company": "Jamconik", - "phone": "848-574-2018", - "email": "sophia@jamconik.com" - }, - { - "id": 2077, - "guid": "9fb16333-f099-45f7-814a-90c2b657b78e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Creighton", - "company": "Jamrola", - "phone": "810-497-2766", - "email": "caroline@jamrola.com" - }, - { - "id": 2078, - "guid": "8eacce0a-a7f1-4e50-9c90-24b6450b571c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Molligan", - "company": "Airdyne", - "phone": "828-420-3011", - "email": "audrey@airdyne.com" - }, - { - "id": 2079, - "guid": "e14aec91-8588-41f5-8eee-73529dfb7ac1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Fulton", - "company": "Navivacs", - "phone": "833-516-3402", - "email": "mia@navivacs.com" - }, - { - "id": 2080, - "guid": "bf3eafc8-8308-48aa-bf6c-4bdd9c68fce0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Miln", - "company": "Teknoplexon", - "phone": "882-592-2441", - "email": "trinity@teknoplexon.com" - }, - { - "id": 2081, - "guid": "18f138b3-e008-4cb1-9d8b-c3e8182c5b1d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Carrington", - "company": "iMedconik", - "phone": "829-468-3743", - "email": "gianna@imedconik.com" - }, - { - "id": 2082, - "guid": "1a11dd62-55da-46f9-81d8-c36ac9a82d90", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Hamphrey", - "company": "Enlogia", - "phone": "844-420-2439", - "email": "grace@enlogia.com" - }, - { - "id": 2083, - "guid": "36a78a8c-e820-49ed-b066-4a55f12ed875", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Hailey", - "company": "Mescatron", - "phone": "815-437-3198", - "email": "kimberly@mescatron.com" - }, - { - "id": 2084, - "guid": "e4d2659f-1f22-449a-a1e3-4af25b23f628", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katherine Bush", - "company": "Allphysiche", - "phone": "833-470-3668", - "email": "katherine@allphysiche.com" - }, - { - "id": 2085, - "guid": "8642e50f-79c7-4e68-b956-3ddb424f7230", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Hailey", - "company": "Technogra", - "phone": "820-510-3424", - "email": "olivia@technogra.com" - }, - { - "id": 2086, - "guid": "690801fa-bbf0-45ca-93da-93ae8f5b2e0e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Day", - "company": "Robotemplate", - "phone": "817-565-3901", - "email": "autumn@robotemplate.com" - }, - { - "id": 2087, - "guid": "9fa86823-a33a-41d3-b34e-433e40109704", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Gerald", - "company": "Transtouch", - "phone": "850-520-3744", - "email": "emily@transtouch.com" - }, - { - "id": 2088, - "guid": "7943687d-4578-4bec-a2db-94d16d014696", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Ford", - "company": "Titanirola", - "phone": "844-573-2051", - "email": "brooklyn@titanirola.com" - }, - { - "id": 2089, - "guid": "ba37b8f0-4dbd-4d37-ba6b-9141b52c635c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Oldman", - "company": "Polytheon", - "phone": "874-501-2765", - "email": "evelyn@polytheon.com" - }, - { - "id": 2090, - "guid": "76b3b801-4cea-48f3-b933-7ad06b3ef1d2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Nelson", - "company": "InfoAirway", - "phone": "843-517-2988", - "email": "serenity@infoairway.com" - }, - { - "id": 2091, - "guid": "194040bb-1657-436c-aadc-1428a72be157", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Waller", - "company": "Technogra", - "phone": "801-451-3412", - "email": "mackenzie@technogra.com" - }, - { - "id": 2092, - "guid": "a3e3d3f4-924b-4af1-a2bc-d7d44beb831b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Cramer", - "company": "Safeagra", - "phone": "800-431-3130", - "email": "riley@safeagra.com" - }, - { - "id": 2093, - "guid": "d4645497-1733-4b42-8f7d-641e10335d8c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Andrea Hancock", - "company": "OpKeycomm", - "phone": "817-431-2933", - "email": "andrea@opkeycomm.com" - }, - { - "id": 2094, - "guid": "e71e613a-07ea-404c-83fc-477b31397c39", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Calhoun", - "company": "Gigaura", - "phone": "895-516-3190", - "email": "mackenzie@gigaura.com" - }, - { - "id": 2095, - "guid": "264c0407-df06-4d20-b5e0-9712238d7656", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Vaughan", - "company": "Gigaura", - "phone": "819-462-2699", - "email": "addison@gigaura.com" - }, - { - "id": 2096, - "guid": "971cd3e3-a28a-4c77-81a1-e45910b270e3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Brooks", - "company": "Anaframe", - "phone": "843-483-2858", - "email": "allison@anaframe.com" - }, - { - "id": 2097, - "guid": "59211d44-b703-4c32-97ce-ca7e22f4861c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Wesley", - "company": "eSteganoergy", - "phone": "839-511-2224", - "email": "kaylee@esteganoergy.com" - }, - { - "id": 2098, - "guid": "fc9a9f02-5530-41aa-ac92-92e7efb2dcb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Murphy", - "company": "Unconix", - "phone": "833-448-3926", - "email": "ariana@unconix.com" - }, - { - "id": 2099, - "guid": "ef7b2b49-2f2b-4ad1-8bde-c4efe9ee5b32", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Gill", - "company": "Sontopia", - "phone": "890-525-2248", - "email": "lauren@sontopia.com" - }, - { - "id": 2100, - "guid": "d5ec4056-cd8e-46a6-bfa9-cfc55cbd39ad", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Brickman", - "company": "Rapigrafix", - "phone": "839-540-3168", - "email": "natalie@rapigrafix.com" - }, - { - "id": 2101, - "guid": "9a8217fd-c5f4-4a42-8f33-634ddf700822", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Freeman", - "company": "Netseco", - "phone": "857-468-2382", - "email": "lily@netseco.com" - }, - { - "id": 2102, - "guid": "059e1409-f7dd-42dd-b695-2d672e6eeac6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Conors", - "company": "Conrama", - "phone": "883-500-3574", - "email": "hannah@conrama.com" - }, - { - "id": 2103, - "guid": "5590b77c-4e19-494c-b5c5-d47689e54bdd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Smith", - "company": "iEnland", - "phone": "831-434-2517", - "email": "allison@ienland.com" - }, - { - "id": 2104, - "guid": "498f0478-122b-40a3-ae01-2ca40781e4c6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Webster", - "company": "Qualserve", - "phone": "826-537-2728", - "email": "audrey@qualserve.com" - }, - { - "id": 2105, - "guid": "e3e43f24-7032-4f78-b3b5-b5286b55b5ff", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Miln", - "company": "eEyetanic", - "phone": "813-447-3884", - "email": "isabella@eeyetanic.com" - }, - { - "id": 2106, - "guid": "0415bcef-e649-48a9-ad2a-ef83759fabb9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Camila Oswald", - "company": "Tekcar", - "phone": "867-519-2799", - "email": "camila@tekcar.com" - }, - { - "id": 2107, - "guid": "d3614924-734e-40da-af3f-22951b0c66c1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Hamphrey", - "company": "Unconix", - "phone": "875-427-2688", - "email": "valeria@unconix.com" - }, - { - "id": 2108, - "guid": "208dccab-c033-4cba-865d-2a1afa65c74f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Thornton", - "company": "Xeicon", - "phone": "828-468-3816", - "email": "destiny@xeicon.com" - }, - { - "id": 2109, - "guid": "d7e0e9ec-ce07-43ec-8095-eb220f24707f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Ford", - "company": "Polytheon", - "phone": "840-526-3450", - "email": "makayla@polytheon.com" - }, - { - "id": 2110, - "guid": "85a1b4e8-2833-4af5-95b5-d4d2e7f34fe6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Hawkins", - "company": "Orthomedia", - "phone": "839-401-2652", - "email": "camila@orthomedia.com" - }, - { - "id": 2111, - "guid": "fb3aa3fd-c3d4-436b-8b9d-e064d6385943", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ashley Conors", - "company": "Conrama", - "phone": "847-514-3200", - "email": "ashley@conrama.com" - }, - { - "id": 2112, - "guid": "75c876f3-fa7d-4e9f-b385-bacca44f8b87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Winter", - "company": "Generola", - "phone": "869-461-3768", - "email": "amelia@generola.com" - }, - { - "id": 2113, - "guid": "4052c2e6-fe92-4ad2-88bc-b30657a6fd51", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Mercer", - "company": "Unologic", - "phone": "893-591-2635", - "email": "zoey@unologic.com" - }, - { - "id": 2114, - "guid": "6eced1b1-8518-4e2f-9c09-1e061a0b7a63", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Gilmore", - "company": "Techtron", - "phone": "877-561-2840", - "email": "valeria@techtron.com" - }, - { - "id": 2115, - "guid": "af574551-344d-4089-8a63-c1af74aa5094", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mia Cook", - "company": "Multitiqua", - "phone": "819-563-2836", - "email": "mia@multitiqua.com" - }, - { - "id": 2116, - "guid": "622e9da1-e706-42b5-a59d-4476f0ba9a4e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Hailey", - "company": "Titanigraf", - "phone": "899-519-2738", - "email": "genesis@titanigraf.com" - }, - { - "id": 2117, - "guid": "6ba6e6a2-d305-40da-abfa-098b5030a73d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Goldman", - "company": "Transtouch", - "phone": "884-413-3814", - "email": "alexandra@transtouch.com" - }, - { - "id": 2118, - "guid": "9494eb14-4b4c-4297-b9e3-0926c38d3592", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Miller", - "company": "Inridium", - "phone": "827-575-3183", - "email": "gabriella@inridium.com" - }, - { - "id": 2119, - "guid": "f86959c0-b4bb-4531-b5cf-83933f62f4b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Gilbert", - "company": "Hypervaco", - "phone": "804-477-3135", - "email": "destiny@hypervaco.com" - }, - { - "id": 2120, - "guid": "ca1da7bf-b8bb-400f-92f8-6a99e9fb8666", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mya Nathan", - "company": "Compuamerica", - "phone": "800-537-2851", - "email": "mya@compuamerica.com" - }, - { - "id": 2121, - "guid": "fa8f7835-924e-4ab4-9f89-6dcd107c9612", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Brown", - "company": "Sontopia", - "phone": "846-480-2839", - "email": "claire@sontopia.com" - }, - { - "id": 2122, - "guid": "d5d7a148-54c2-494b-9f83-5bcbb923bcfd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Miller", - "company": "Robocomm", - "phone": "868-466-3113", - "email": "aubrey@robocomm.com" - }, - { - "id": 2123, - "guid": "3fde4d65-40a0-4017-ab9f-3d9060e47106", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Gardner", - "company": "Entcast", - "phone": "832-410-2895", - "email": "vanessa@entcast.com" - }, - { - "id": 2124, - "guid": "a6b5c4d0-e08e-4512-add2-8ae818383f02", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Sherlock", - "company": "US Infratouch", - "phone": "834-406-3795", - "email": "addison@us infratouch.com" - }, - { - "id": 2125, - "guid": "e289b239-9773-4cba-b7ca-efcebf52cc7e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Creighton", - "company": "US Infratouch", - "phone": "832-513-2775", - "email": "maria@us infratouch.com" - }, - { - "id": 2126, - "guid": "53079062-1a2a-43c8-8c89-de8531042fd1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Charlson", - "company": "Multitiqua", - "phone": "889-456-2039", - "email": "alexandra@multitiqua.com" - }, - { - "id": 2127, - "guid": "c5240a04-1876-40ca-812d-1e5d6826de1a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Osborne", - "company": "SysUSA", - "phone": "893-566-3390", - "email": "sarah@sysusa.com" - }, - { - "id": 2128, - "guid": "5b2a6f0d-1d64-48be-9284-c97157378717", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Croftoon", - "company": "Celgra", - "phone": "886-586-2505", - "email": "hannah@celgra.com" - }, - { - "id": 2129, - "guid": "3a8b7646-ba8b-4ac8-8621-021ad1a384e5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gianna Brickman", - "company": "Safetrust", - "phone": "848-512-3538", - "email": "gianna@safetrust.com" - }, - { - "id": 2130, - "guid": "f3b653af-3ff0-4948-8bfb-7147e531de83", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Galbraith", - "company": "Conotomics", - "phone": "865-433-2118", - "email": "jasmine@conotomics.com" - }, - { - "id": 2131, - "guid": "08689933-389c-4c3e-8ccc-261a068363fe", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Harrison", - "company": "Mescaridic", - "phone": "874-571-2070", - "email": "isabelle@mescaridic.com" - }, - { - "id": 2132, - "guid": "fde10381-8581-4945-a267-1b9fa51dd41b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Addison Smith", - "company": "Robocomm", - "phone": "834-588-3878", - "email": "addison@robocomm.com" - }, - { - "id": 2133, - "guid": "69781adf-1abc-4f40-bccb-e785d204dca4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Ward", - "company": "SysVenamerica", - "phone": "845-493-2504", - "email": "aubrey@sysvenamerica.com" - }, - { - "id": 2134, - "guid": "25090f97-207f-4f99-8a80-27e9dc92ed23", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Croftoon", - "company": "Allphysiche", - "phone": "862-540-2327", - "email": "olivia@allphysiche.com" - }, - { - "id": 2135, - "guid": "84f06198-e639-4df3-9405-9156f8c10c66", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Wayne", - "company": "Generola", - "phone": "814-553-3421", - "email": "payton@generola.com" - }, - { - "id": 2136, - "guid": "b1ae2f96-5169-4f6b-b8d4-d30dad355344", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Chapman", - "company": "Infraique", - "phone": "893-434-2610", - "email": "lily@infraique.com" - }, - { - "id": 2137, - "guid": "e53791ec-f9c0-4f96-8a64-746b409c975e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Gibbs", - "company": "Jamrola", - "phone": "860-512-3018", - "email": "emma@jamrola.com" - }, - { - "id": 2138, - "guid": "775aa675-792b-4d69-9729-c8545857a25f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Youmans", - "company": "Westtomik", - "phone": "880-550-2144", - "email": "claire@westtomik.com" - }, - { - "id": 2139, - "guid": "b9ab872a-452f-4769-8092-7f73fbb4d5d7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Grace Fulton", - "company": "Openserve", - "phone": "845-548-3913", - "email": "grace@openserve.com" - }, - { - "id": 2140, - "guid": "5ee9e364-45e3-4bb5-846a-00eb9cf4e3c8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Gerald", - "company": "Polytheon", - "phone": "849-596-3660", - "email": "payton@polytheon.com" - }, - { - "id": 2141, - "guid": "c0152a0a-8353-4cf8-9ff5-5f85c4db720a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Carey", - "company": "eEyetanic", - "phone": "855-582-2125", - "email": "isabella@eeyetanic.com" - }, - { - "id": 2142, - "guid": "c6a5a942-dd2b-47ad-815d-b696183f7434", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Wallace", - "company": "Ventanium", - "phone": "838-469-3195", - "email": "chloe@ventanium.com" - }, - { - "id": 2143, - "guid": "1fd08386-267e-47ee-b372-c97fc87c94bf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Wayne", - "company": "iEnland", - "phone": "835-422-2186", - "email": "lauren@ienland.com" - }, - { - "id": 2144, - "guid": "34a048e3-edfd-4608-9d7e-e90bd5daeaba", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Chapman", - "company": "US Infratouch", - "phone": "858-500-2553", - "email": "leah@us infratouch.com" - }, - { - "id": 2145, - "guid": "74400992-ce1a-4815-8e05-3ac6c2ad28a9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Hoggarth", - "company": "Superscope", - "phone": "864-569-2951", - "email": "katherine@superscope.com" - }, - { - "id": 2146, - "guid": "dde7fcf2-582b-4562-a82a-dd7d913190d9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ariana Hailey", - "company": "Technogra", - "phone": "827-558-2296", - "email": "ariana@technogra.com" - }, - { - "id": 2147, - "guid": "35345e67-80b6-4cd4-b17d-4feefe2d2d19", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Hawkins", - "company": "Robotemplate", - "phone": "842-545-3487", - "email": "mya@robotemplate.com" - }, - { - "id": 2148, - "guid": "b9bea5ad-0117-42b0-af6b-108b7c2088e5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Brooks", - "company": "iSkyvaco", - "phone": "857-524-2824", - "email": "kaylee@iskyvaco.com" - }, - { - "id": 2149, - "guid": "a1ea8a17-bf3d-44ae-bfff-5e3d4d67bedf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Owen", - "company": "iOptystix", - "phone": "877-577-3511", - "email": "madelyn@ioptystix.com" - }, - { - "id": 2150, - "guid": "330cde8b-dcb2-4970-b9fe-6eb8f6966b20", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Chapman", - "company": "Aluco", - "phone": "889-491-2428", - "email": "jasmine@aluco.com" - }, - { - "id": 2151, - "guid": "d0f7c61a-eb86-4511-a90d-851c4e8cba40", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Mercer", - "company": "Fibroserve", - "phone": "899-503-3531", - "email": "vanessa@fibroserve.com" - }, - { - "id": 2152, - "guid": "c605990b-91a0-4e0f-9576-05de0d760047", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Charlson", - "company": "US Infratouch", - "phone": "812-595-3222", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 2153, - "guid": "49b4fbd0-5434-4f89-a6c3-309efbfdbc1c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Mercer", - "company": "Sontopia", - "phone": "840-586-2754", - "email": "vanessa@sontopia.com" - }, - { - "id": 2154, - "guid": "1dd82aa3-743f-4a06-8348-2013992d1b52", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kylie Miers", - "company": "Teratopia", - "phone": "883-518-2463", - "email": "kylie@teratopia.com" - }, - { - "id": 2155, - "guid": "52535ee9-c224-4074-a3a4-09e2408b8e3d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bella Ford", - "company": "Cryptotemplate", - "phone": "833-516-2445", - "email": "bella@cryptotemplate.com" - }, - { - "id": 2156, - "guid": "5e602780-7a9c-4981-88ca-b331a840151f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Galbraith", - "company": "Anaframe", - "phone": "813-563-2535", - "email": "amelia@anaframe.com" - }, - { - "id": 2157, - "guid": "c6a05b02-1e8b-4ba8-a164-a533e7cb3a60", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Otis", - "company": "Compuamerica", - "phone": "856-564-2155", - "email": "sophia@compuamerica.com" - }, - { - "id": 2158, - "guid": "5f4428f9-f161-4679-810b-1af0604702af", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Winter", - "company": "Hypervaco", - "phone": "824-503-3091", - "email": "zoe@hypervaco.com" - }, - { - "id": 2159, - "guid": "874626b1-17fc-4eed-b7d7-0751e3768226", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Oliver", - "company": "Xeicon", - "phone": "847-481-2884", - "email": "paige@xeicon.com" - }, - { - "id": 2160, - "guid": "0eaf12ee-0a80-4c54-82a4-c331623ccd66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Hardman", - "company": "Truegate", - "phone": "850-478-2626", - "email": "natalie@truegate.com" - }, - { - "id": 2161, - "guid": "49d22396-9db5-4175-b6f1-f7deca5f6854", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Mercer", - "company": "Teratopia", - "phone": "892-430-3074", - "email": "zoe@teratopia.com" - }, - { - "id": 2162, - "guid": "0e30bb01-bf3b-4b0f-934e-337dd21dee5e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Chapman", - "company": "iEnland", - "phone": "869-462-3512", - "email": "aubrey@ienland.com" - }, - { - "id": 2163, - "guid": "19f825bf-a1ac-461f-9970-46aa7a84d830", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Hawkins", - "company": "Gigaura", - "phone": "835-415-2712", - "email": "camila@gigaura.com" - }, - { - "id": 2164, - "guid": "447fdfd8-a460-414a-9427-ff75879038d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Waller", - "company": "Systheon", - "phone": "856-567-3333", - "email": "sophia@systheon.com" - }, - { - "id": 2165, - "guid": "9ebc2e8b-8344-45e6-abcb-91c48f77daa5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Oliver", - "company": "Mescatron", - "phone": "820-460-2623", - "email": "melanie@mescatron.com" - }, - { - "id": 2166, - "guid": "e0f6dbdc-4129-4dc3-9808-604b23a215a9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Bush", - "company": "Transtouch", - "phone": "880-447-3474", - "email": "zoe@transtouch.com" - }, - { - "id": 2167, - "guid": "eae7f113-73dd-4480-8b16-53fdb2069516", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Cramer", - "company": "Inridium", - "phone": "813-469-2153", - "email": "brooklyn@inridium.com" - }, - { - "id": 2168, - "guid": "16291699-ccf7-4a25-a583-7023c3bae793", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Nash", - "company": "Enlogia", - "phone": "882-483-2731", - "email": "katelyn@enlogia.com" - }, - { - "id": 2169, - "guid": "7ebaf381-a961-4ede-b957-e5f14650c4e9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Gilson", - "company": "Anaframe", - "phone": "843-432-2236", - "email": "morgan@anaframe.com" - }, - { - "id": 2170, - "guid": "d252ef02-96d0-477c-b802-92758e710912", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Clapton", - "company": "RoboAerlogix", - "phone": "872-479-2249", - "email": "gabriella@roboaerlogix.com" - }, - { - "id": 2171, - "guid": "0994b217-e6cf-450e-b578-909cc03700bc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Turner", - "company": "RoboAerlogix", - "phone": "873-407-3445", - "email": "hailey@roboaerlogix.com" - }, - { - "id": 2172, - "guid": "e2f5b28f-0389-40b5-9845-5c5bdeba59bd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Chandter", - "company": "Entcast", - "phone": "811-461-3842", - "email": "elizabeth@entcast.com" - }, - { - "id": 2173, - "guid": "5a025aff-f38e-409b-aa80-3ca188fde84d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Gilson", - "company": "Mescaridic", - "phone": "877-561-2027", - "email": "evelyn@mescaridic.com" - }, - { - "id": 2174, - "guid": "a400fe9d-7d76-45c1-a4cd-bfff280cf463", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Taylor Carey", - "company": "Transtouch", - "phone": "868-522-2262", - "email": "taylor@transtouch.com" - }, - { - "id": 2175, - "guid": "7ebcc6f8-1cb8-4967-99c8-a45d595efa63", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Morrison", - "company": "Mescaridic", - "phone": "864-452-3130", - "email": "brooklyn@mescaridic.com" - }, - { - "id": 2176, - "guid": "65198b8d-a0a6-4116-9f15-aa7f631f0c83", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia White", - "company": "Orthosoft", - "phone": "803-571-3059", - "email": "amelia@orthosoft.com" - }, - { - "id": 2177, - "guid": "0118f412-f675-47f3-9ecc-f63235298541", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Mercer", - "company": "Xeicon", - "phone": "857-540-2047", - "email": "angelina@xeicon.com" - }, - { - "id": 2178, - "guid": "484d3336-41ac-4156-b4bf-d585ea493eeb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Timmons", - "company": "Conotomics", - "phone": "887-517-3183", - "email": "brianna@conotomics.com" - }, - { - "id": 2179, - "guid": "c1cb6fc5-2af8-4245-8555-0e9fa40878d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Milton", - "company": "Celgra", - "phone": "877-576-2180", - "email": "emma@celgra.com" - }, - { - "id": 2180, - "guid": "99bcb806-ab61-4b9f-9c00-cb230b566fc9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Day", - "company": "Navivacs", - "phone": "870-569-3771", - "email": "ella@navivacs.com" - }, - { - "id": 2181, - "guid": "725d83be-f52b-4c6d-944f-1a0f843a5fef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Thornton", - "company": "Infragraph", - "phone": "865-518-3663", - "email": "genesis@infragraph.com" - }, - { - "id": 2182, - "guid": "ffd25bd9-309f-42ee-9f2e-e710adc90e3b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Gill", - "company": "Titanigraf", - "phone": "897-431-3774", - "email": "elizabeth@titanigraf.com" - }, - { - "id": 2183, - "guid": "c3a00a3f-92bc-44db-9d06-7334f80261f1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Amelia Cook", - "company": "Steganoconiche", - "phone": "869-585-2738", - "email": "amelia@steganoconiche.com" - }, - { - "id": 2184, - "guid": "ab8f2e0e-4eaf-415c-914a-23febd425c9f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Cramer", - "company": "Orthosoft", - "phone": "885-477-3744", - "email": "lily@orthosoft.com" - }, - { - "id": 2185, - "guid": "84b2f9d7-a943-4916-b831-a546db45e396", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Molligan", - "company": "Steganoconiche", - "phone": "877-462-3762", - "email": "caroline@steganoconiche.com" - }, - { - "id": 2186, - "guid": "4b0f8c7e-4e38-4b1e-8d07-51f1697f98e2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Gustman", - "company": "Generola", - "phone": "809-470-3883", - "email": "victoria@generola.com" - }, - { - "id": 2187, - "guid": "7f306cd6-af99-431d-b8ec-ddd370e4fb7f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Oswald", - "company": "Genland", - "phone": "873-413-2789", - "email": "destiny@genland.com" - }, - { - "id": 2188, - "guid": "205ca874-e273-4ab4-8ebe-0d03c0cf8fdf", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Nash", - "company": "Vencom", - "phone": "814-477-2450", - "email": "emma@vencom.com" - }, - { - "id": 2189, - "guid": "2bdb7d49-39f3-40db-b372-8354030bc6b7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Bush", - "company": "RoboAerlogix", - "phone": "844-495-3491", - "email": "mariah@roboaerlogix.com" - }, - { - "id": 2190, - "guid": "28d51f5b-37a2-4f8d-b57f-f9ea1a571a90", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Carey", - "company": "Steganoconiche", - "phone": "886-435-2839", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 2191, - "guid": "a2e1ce23-c4ff-41df-ab88-f90f3db0abdd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hannah Brickman", - "company": "Orthosoft", - "phone": "837-525-3943", - "email": "hannah@orthosoft.com" - }, - { - "id": 2192, - "guid": "499817cb-0040-48d4-beaa-ccb3054c3293", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Haig", - "company": "Raylog", - "phone": "872-418-3399", - "email": "vanessa@raylog.com" - }, - { - "id": 2193, - "guid": "85155b4d-179d-4a40-aa76-a4d894c389e1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Harrison", - "company": "Indisco", - "phone": "882-419-2495", - "email": "mya@indisco.com" - }, - { - "id": 2194, - "guid": "1e758445-15f2-473f-b021-5cd7905a326a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Thornton", - "company": "Netseco", - "phone": "816-467-2922", - "email": "camila@netseco.com" - }, - { - "id": 2195, - "guid": "a09c74b8-2810-4401-a566-a4aa7a668a93", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Clapton", - "company": "Allphysiche", - "phone": "807-582-2973", - "email": "alyssa@allphysiche.com" - }, - { - "id": 2196, - "guid": "fdbe4c8e-2124-4d6e-88a3-7f5c4974bab6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Riley Calhoun", - "company": "Robocomm", - "phone": "827-529-2341", - "email": "riley@robocomm.com" - }, - { - "id": 2197, - "guid": "8e7cd7d9-0f42-463b-a9e7-7a4ba27548f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Gilbert", - "company": "Airdyne", - "phone": "876-448-3737", - "email": "evelyn@airdyne.com" - }, - { - "id": 2198, - "guid": "9016493a-a862-4fe9-937e-98f584effcfa", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Valeria Gustman", - "company": "Qualserve", - "phone": "827-458-2601", - "email": "valeria@qualserve.com" - }, - { - "id": 2199, - "guid": "54454056-2bd6-42e2-a88c-32f109cc8df3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bella Sherlock", - "company": "Videobanc", - "phone": "801-408-3148", - "email": "bella@videobanc.com" - }, - { - "id": 2200, - "guid": "ed7c5422-08cc-42dd-a01c-6c6375194c7d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Goldman", - "company": "Allnet", - "phone": "815-496-3933", - "email": "addison@allnet.com" - }, - { - "id": 2201, - "guid": "c3ed4dff-b830-4660-b74b-5b7a1f18e007", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Wood", - "company": "Quintegrity", - "phone": "824-549-3005", - "email": "addison@quintegrity.com" - }, - { - "id": 2202, - "guid": "994a83a9-a170-4365-b89f-ef9b10ca5e80", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Hancock", - "company": "Gigaura", - "phone": "824-486-2839", - "email": "taylor@gigaura.com" - }, - { - "id": 2203, - "guid": "69156133-e7e9-4757-a874-85e7354a44c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Hailey", - "company": "Turbomart", - "phone": "885-477-2091", - "email": "madison@turbomart.com" - }, - { - "id": 2204, - "guid": "85452887-3f25-4093-895a-e9a3729e4083", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Neal", - "company": "Syssoft", - "phone": "804-540-2013", - "email": "ava@syssoft.com" - }, - { - "id": 2205, - "guid": "e3408085-a926-4d67-89a0-b94550f23c3b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Fulton", - "company": "Superscope", - "phone": "818-468-2810", - "email": "evelyn@superscope.com" - }, - { - "id": 2206, - "guid": "d8835b42-fc25-4fa1-aafc-e10243d85358", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Evelyn Goodman", - "company": "Genland", - "phone": "874-486-2367", - "email": "evelyn@genland.com" - }, - { - "id": 2207, - "guid": "af7267fd-9ce5-47f5-9f0e-48243b5d3d78", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Oliver", - "company": "Orthomedia", - "phone": "858-554-2405", - "email": "mackenzie@orthomedia.com" - }, - { - "id": 2208, - "guid": "069e8c54-f8c6-4adc-9bec-98c45a3968a6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Walkman", - "company": "Airdyne", - "phone": "840-599-3969", - "email": "audrey@airdyne.com" - }, - { - "id": 2209, - "guid": "a03cfc96-9594-48bf-9647-8d79ad409403", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Galbraith", - "company": "Gigaura", - "phone": "882-497-2158", - "email": "bella@gigaura.com" - }, - { - "id": 2210, - "guid": "038879a2-c593-49bd-9c22-30ecfa9a1601", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Hawkins", - "company": "Robotomic", - "phone": "876-599-3499", - "email": "leah@robotomic.com" - }, - { - "id": 2211, - "guid": "26c6a8fa-e2d8-4abc-9580-e77342bd433c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Wesley", - "company": "Superscope", - "phone": "889-512-2279", - "email": "arianna@superscope.com" - }, - { - "id": 2212, - "guid": "8e760ec2-8710-4739-af88-11aa46a448ac", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brianna Vaughan", - "company": "Robocomm", - "phone": "818-522-2571", - "email": "brianna@robocomm.com" - }, - { - "id": 2213, - "guid": "e3d40e6d-6f6e-4801-8a35-dc28016930ad", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Oswald", - "company": "iEnland", - "phone": "889-564-3237", - "email": "gabriella@ienland.com" - }, - { - "id": 2214, - "guid": "a35202b9-ad80-47ec-a887-3ee3bd12eb2f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Hoggarth", - "company": "Robotomic", - "phone": "862-489-3380", - "email": "kaitlyn@robotomic.com" - }, - { - "id": 2215, - "guid": "7f779fe2-d57d-405e-8521-4251fd843b94", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah WifKinson", - "company": "Hypervaco", - "phone": "813-513-3369", - "email": "mariah@hypervaco.com" - }, - { - "id": 2216, - "guid": "f65f5df0-c786-4d73-9a11-ee2d285d2848", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Goodman", - "company": "Techtron", - "phone": "835-472-3821", - "email": "andrea@techtron.com" - }, - { - "id": 2217, - "guid": "0b6c96fd-6c24-4aa6-bd47-7a6a76197b41", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Goodman", - "company": "Indisco", - "phone": "862-475-3133", - "email": "samantha@indisco.com" - }, - { - "id": 2218, - "guid": "acfa3561-dc88-414a-b7ab-6cc29b47cebd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madison Brickman", - "company": "Qualserve", - "phone": "848-527-2185", - "email": "madison@qualserve.com" - }, - { - "id": 2219, - "guid": "1baad4af-77da-4353-acb5-475408d3eee9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Charlson", - "company": "Thermotomic", - "phone": "837-556-2259", - "email": "serenity@thermotomic.com" - }, - { - "id": 2220, - "guid": "722e048f-5d49-4b95-bd87-e46a3af3beb6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Campbell", - "company": "eSteganoergy", - "phone": "838-487-2501", - "email": "natalie@esteganoergy.com" - }, - { - "id": 2221, - "guid": "85aa7ccd-720e-4d42-afe2-8fd2f29b7f9f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ariana Gerald", - "company": "Quintegrity", - "phone": "888-464-3152", - "email": "ariana@quintegrity.com" - }, - { - "id": 2222, - "guid": "9eeb435e-511c-4312-82b3-bfe60ebb3afb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Galbraith", - "company": "Aluco", - "phone": "833-558-2229", - "email": "brianna@aluco.com" - }, - { - "id": 2223, - "guid": "079b7579-b070-4d6f-a8f4-efb535cad3c6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Olivia Oldridge", - "company": "Fibrotouch", - "phone": "831-479-2928", - "email": "olivia@fibrotouch.com" - }, - { - "id": 2224, - "guid": "f3e5161f-77ef-42be-9aae-3d3fb22f85bb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Neal", - "company": "Unconix", - "phone": "806-496-2791", - "email": "sophia@unconix.com" - }, - { - "id": 2225, - "guid": "03124c55-441e-42b5-b2c3-2137b0a5d558", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Autumn Nash", - "company": "eSteganoergy", - "phone": "872-410-2186", - "email": "autumn@esteganoergy.com" - }, - { - "id": 2226, - "guid": "cd50f341-bf8f-4164-9724-11bd6c41e68c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Sherlock", - "company": "Xeicon", - "phone": "820-533-3653", - "email": "kayla@xeicon.com" - }, - { - "id": 2227, - "guid": "9671ca67-2113-4b10-85ad-19185c81dd10", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Ogden", - "company": "Robotemplate", - "phone": "826-441-3946", - "email": "brianna@robotemplate.com" - }, - { - "id": 2228, - "guid": "2009c009-60f2-495f-b6e3-f555a074dd2e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Hodges", - "company": "iQualcar", - "phone": "868-583-3977", - "email": "brooke@iqualcar.com" - }, - { - "id": 2229, - "guid": "758145d4-7800-4211-ac4a-d45d540b5df4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophie Daniels", - "company": "Indisco", - "phone": "855-441-3669", - "email": "sophie@indisco.com" - }, - { - "id": 2230, - "guid": "3ba1dbfc-c9f3-4abd-bd40-16d418d55661", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexa Miln", - "company": "Fibrotouch", - "phone": "864-486-2679", - "email": "alexa@fibrotouch.com" - }, - { - "id": 2231, - "guid": "3832dc16-e64c-453f-813a-cf935cfa78b1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Smith", - "company": "Turbomart", - "phone": "804-493-3963", - "email": "gabrielle@turbomart.com" - }, - { - "id": 2232, - "guid": "8bcee2c9-bc95-4198-a677-73b3b7d6d787", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Charlson", - "company": "Thermotomic", - "phone": "862-475-3767", - "email": "nevaeh@thermotomic.com" - }, - { - "id": 2233, - "guid": "742608cf-0719-4ed0-a5e9-5177a43ede04", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Thomson", - "company": "Nanobanc", - "phone": "812-591-3061", - "email": "gabriella@nanobanc.com" - }, - { - "id": 2234, - "guid": "bb309d9d-2650-4734-b118-c91ed8f42d8e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Croftoon", - "company": "Infragraph", - "phone": "888-448-3040", - "email": "taylor@infragraph.com" - }, - { - "id": 2235, - "guid": "3d5b172d-d440-4f01-a441-b9052e921732", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Young", - "company": "Titanigraf", - "phone": "835-512-2886", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 2236, - "guid": "08aee843-f544-488c-a44c-414fde79448e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madison Carrington", - "company": "Teratopia", - "phone": "882-547-3082", - "email": "madison@teratopia.com" - }, - { - "id": 2237, - "guid": "9eb75ccb-e89b-433a-b7f2-623f1ed04bda", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Morrison", - "company": "Raylog", - "phone": "871-564-3883", - "email": "gianna@raylog.com" - }, - { - "id": 2238, - "guid": "a69ac371-fcda-4068-9d05-c86cb0e740ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Riley Neal", - "company": "Vencom", - "phone": "864-436-3228", - "email": "riley@vencom.com" - }, - { - "id": 2239, - "guid": "e7e194fa-2c14-4b70-a263-a68dbc11bcf5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Carrington", - "company": "Quintegrity", - "phone": "877-461-3715", - "email": "maya@quintegrity.com" - }, - { - "id": 2240, - "guid": "e88a021e-9ec3-4810-a037-6ddff23b3e54", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Vaughan", - "company": "eEyetanic", - "phone": "890-573-2735", - "email": "abigail@eeyetanic.com" - }, - { - "id": 2241, - "guid": "aee66419-10bb-480a-b2f8-df121f7a1cb8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Sheldon", - "company": "Allnet", - "phone": "802-411-2014", - "email": "payton@allnet.com" - }, - { - "id": 2242, - "guid": "d1a461f6-2052-4b24-833f-7eaced79b130", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Gilbert", - "company": "Conotomics", - "phone": "801-588-2477", - "email": "bella@conotomics.com" - }, - { - "id": 2243, - "guid": "54c3ec54-744c-45fb-8ec3-53c34683f92d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Davidson", - "company": "Safeagra", - "phone": "821-480-3761", - "email": "kaylee@safeagra.com" - }, - { - "id": 2244, - "guid": "43a53f3e-c529-44e6-8895-6edda98f32c3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Higgins", - "company": "Nanobanc", - "phone": "821-599-3667", - "email": "aubrey@nanobanc.com" - }, - { - "id": 2245, - "guid": "4dc90a0e-5eb2-4fe8-9356-9717e36c2c7f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Abramson", - "company": "Airdyne", - "phone": "873-543-2831", - "email": "victoria@airdyne.com" - }, - { - "id": 2246, - "guid": "d9d496e1-0757-4267-a399-02902340b117", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Thorndike", - "company": "Indisco", - "phone": "837-444-3113", - "email": "melanie@indisco.com" - }, - { - "id": 2247, - "guid": "404a0c0e-df60-4847-9b5b-c3a11e351cc6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Oswald", - "company": "Ventanium", - "phone": "858-403-3045", - "email": "rachel@ventanium.com" - }, - { - "id": 2248, - "guid": "a2b68b5b-a25d-4a5b-8e8f-5313b0e572e1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Fulton", - "company": "Jamrola", - "phone": "876-428-3182", - "email": "savannah@jamrola.com" - }, - { - "id": 2249, - "guid": "7a09ac12-f04a-4200-84e1-504b6321e17b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Wallace", - "company": "Genland", - "phone": "878-404-3408", - "email": "hailey@genland.com" - }, - { - "id": 2250, - "guid": "5a37ab25-cabb-4baa-9d9d-2d05ae8975ef", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Hawkins", - "company": "Rapigrafix", - "phone": "841-517-3799", - "email": "gabrielle@rapigrafix.com" - }, - { - "id": 2251, - "guid": "4142d588-9cbf-4fea-b6b7-6d1e55235089", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maya Galbraith", - "company": "Teknoplexon", - "phone": "835-550-2077", - "email": "maya@teknoplexon.com" - }, - { - "id": 2252, - "guid": "2e60fe96-3edc-4de4-9b41-5c52160589a2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline White", - "company": "Westtomik", - "phone": "831-496-2876", - "email": "madeline@westtomik.com" - }, - { - "id": 2253, - "guid": "dd2c541b-268d-4e8a-ba10-e9ab13cdb4c7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Otis", - "company": "Infragraph", - "phone": "819-546-2546", - "email": "katherine@infragraph.com" - }, - { - "id": 2254, - "guid": "016dea0b-063c-45bf-ad5b-02553af843d7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Conors", - "company": "Airdyne", - "phone": "878-445-2674", - "email": "evelyn@airdyne.com" - }, - { - "id": 2255, - "guid": "738562fe-e47c-4806-b0aa-fff4e26fec6b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Miers", - "company": "eSteganoergy", - "phone": "838-436-3956", - "email": "evelyn@esteganoergy.com" - }, - { - "id": 2256, - "guid": "23dd4f8d-9eeb-48e3-9af8-4a0bc2cedf25", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Gustman", - "company": "Robocomm", - "phone": "816-419-2494", - "email": "maya@robocomm.com" - }, - { - "id": 2257, - "guid": "8f374765-ddfc-4c83-b0aa-4154d96b7b10", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooke Osborne", - "company": "Teratopia", - "phone": "845-505-3020", - "email": "brooke@teratopia.com" - }, - { - "id": 2258, - "guid": "fecf2d6b-c190-43a4-a4e7-1eea372127ae", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Oswald", - "company": "InfoAirway", - "phone": "861-412-3298", - "email": "kimberly@infoairway.com" - }, - { - "id": 2259, - "guid": "83ee7643-75c5-4f84-86bc-700f60d5be4b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Haig", - "company": "Entcast", - "phone": "893-460-2110", - "email": "rachel@entcast.com" - }, - { - "id": 2260, - "guid": "da45bcf8-9a7d-4e0c-918d-f28809f17704", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Galbraith", - "company": "Compuamerica", - "phone": "811-518-3597", - "email": "maria@compuamerica.com" - }, - { - "id": 2261, - "guid": "c7444444-6557-41ea-8d27-7248d1f5498e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Sheldon", - "company": "Westtomik", - "phone": "852-593-3978", - "email": "lillian@westtomik.com" - }, - { - "id": 2262, - "guid": "7b4458b4-09c1-4090-83ec-baeff79515bf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Oldman", - "company": "Truegate", - "phone": "884-403-3555", - "email": "faith@truegate.com" - }, - { - "id": 2263, - "guid": "d4310fbd-d429-40a4-87c1-c604c3a5622e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Timmons", - "company": "eEyetanic", - "phone": "836-591-3363", - "email": "sofia@eeyetanic.com" - }, - { - "id": 2264, - "guid": "90109dc9-aff5-4a00-b868-84277f1abaa7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Hailey", - "company": "Dynarama", - "phone": "869-509-3211", - "email": "nevaeh@dynarama.com" - }, - { - "id": 2265, - "guid": "c6793a13-fb2b-47b2-bbff-7fd5e214a17a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Clapton", - "company": "Celgra", - "phone": "825-561-2959", - "email": "makayla@celgra.com" - }, - { - "id": 2266, - "guid": "941f86ae-623a-49d8-bebf-55e42aa9db09", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Calhoun", - "company": "Keytheon", - "phone": "866-479-3464", - "email": "trinity@keytheon.com" - }, - { - "id": 2267, - "guid": "96955cab-16db-4fa6-8738-ea38264e78d3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Day", - "company": "iSkyvaco", - "phone": "803-598-2095", - "email": "sofia@iskyvaco.com" - }, - { - "id": 2268, - "guid": "967908e7-0ec0-4260-9a95-1bf72678ed9e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Owen", - "company": "Westmedia", - "phone": "867-556-2484", - "email": "katherine@westmedia.com" - }, - { - "id": 2269, - "guid": "34312941-c780-4981-a52f-70448f5edb1a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Gilson", - "company": "Mescatron", - "phone": "822-526-2584", - "email": "julia@mescatron.com" - }, - { - "id": 2270, - "guid": "30120edd-8881-4d71-9893-950e5d91e2a1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Freeman", - "company": "Cryptotemplate", - "phone": "881-585-2918", - "email": "layla@cryptotemplate.com" - }, - { - "id": 2271, - "guid": "f3addd6f-999a-443b-badd-cc782907d3b2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Gilmore", - "company": "Westgate", - "phone": "856-555-2673", - "email": "molly@westgate.com" - }, - { - "id": 2272, - "guid": "ec19c3e5-59a1-494b-9309-6bb9f6c55baa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Gilson", - "company": "Airdyne", - "phone": "896-400-2799", - "email": "gianna@airdyne.com" - }, - { - "id": 2273, - "guid": "702f5820-51ec-4e35-884e-a42e4dcd7446", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Molligan", - "company": "Compuamerica", - "phone": "838-503-3323", - "email": "victoria@compuamerica.com" - }, - { - "id": 2274, - "guid": "cacb11b2-7e85-41d3-a6fb-5519b9437918", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Haig", - "company": "eSteganoergy", - "phone": "827-484-2633", - "email": "amelia@esteganoergy.com" - }, - { - "id": 2275, - "guid": "f0ee3e6f-cf1a-47ba-9e5c-15e35b8bdc4e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Carter", - "company": "Pacwest", - "phone": "856-490-2861", - "email": "morgan@pacwest.com" - }, - { - "id": 2276, - "guid": "c98fd3b4-2b86-4c61-8910-35787c0208c4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Carrington", - "company": "Raylog", - "phone": "889-491-3461", - "email": "lillian@raylog.com" - }, - { - "id": 2277, - "guid": "da062741-b655-46c2-a451-77b58c59f966", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Adamson", - "company": "Generola", - "phone": "825-510-3127", - "email": "ava@generola.com" - }, - { - "id": 2278, - "guid": "fd09b672-a41c-49c6-9918-fe961e1c79fb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Bush", - "company": "Jamconik", - "phone": "806-512-2184", - "email": "mariah@jamconik.com" - }, - { - "id": 2279, - "guid": "d9a4901b-90c0-4b4d-90aa-27c45e0eb8f8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Milton", - "company": "Unconix", - "phone": "898-472-2092", - "email": "avery@unconix.com" - }, - { - "id": 2280, - "guid": "cdc7c825-9d3a-4a94-b9a6-7f936065a20b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Mercer", - "company": "Ventanium", - "phone": "832-532-2325", - "email": "julia@ventanium.com" - }, - { - "id": 2281, - "guid": "9a3c19c7-6e80-4524-bfbc-ca2e05b0313e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Gate", - "company": "Polytheon", - "phone": "894-410-2167", - "email": "peyton@polytheon.com" - }, - { - "id": 2282, - "guid": "ff7f69be-43db-4955-9db7-6ae9de59566d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Waller", - "company": "Mescaridic", - "phone": "876-587-3400", - "email": "vanessa@mescaridic.com" - }, - { - "id": 2283, - "guid": "00b24d01-8f7e-454d-a57e-1fbb3dac4733", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Gilbert", - "company": "Syssoft", - "phone": "893-545-3002", - "email": "allison@syssoft.com" - }, - { - "id": 2284, - "guid": "dde0e95d-9498-44e7-992e-3a499ada0424", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Miln", - "company": "Qualserve", - "phone": "800-511-3688", - "email": "samantha@qualserve.com" - }, - { - "id": 2285, - "guid": "db27c7a8-b2b4-4c61-b457-8dd01fd5c9f0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bella Webster", - "company": "Venconix", - "phone": "864-564-2363", - "email": "bella@venconix.com" - }, - { - "id": 2286, - "guid": "9519c7b8-9933-4de2-9a99-764106a32739", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Arianna Otis", - "company": "Infragraph", - "phone": "832-504-2613", - "email": "arianna@infragraph.com" - }, - { - "id": 2287, - "guid": "0d1bd7f6-7a14-4667-ace4-eab94bb8f46f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Miers", - "company": "Skydata", - "phone": "879-523-3546", - "email": "mackenzie@skydata.com" - }, - { - "id": 2288, - "guid": "5c86763d-4fa1-4348-b3e6-79880c789015", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Galbraith", - "company": "Qualserve", - "phone": "829-402-2598", - "email": "mya@qualserve.com" - }, - { - "id": 2289, - "guid": "447d310b-810e-4979-aeba-330726056d50", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Gilson", - "company": "Skydata", - "phone": "895-427-2606", - "email": "alexa@skydata.com" - }, - { - "id": 2290, - "guid": "ef86262e-bf1e-42b8-99ac-77d5352b7d0b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Harrison", - "company": "Conotomics", - "phone": "820-422-2125", - "email": "serenity@conotomics.com" - }, - { - "id": 2291, - "guid": "9f5ac049-9b4a-4129-a14e-603d59c759ea", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Carrington", - "company": "Truetomic", - "phone": "881-489-2906", - "email": "melanie@truetomic.com" - }, - { - "id": 2292, - "guid": "bf4521e2-0884-4a53-af63-30f627a3a1e4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Thorndike", - "company": "Jamrola", - "phone": "887-525-2817", - "email": "avery@jamrola.com" - }, - { - "id": 2293, - "guid": "34e7cb45-1a11-44f7-ad4b-edc8d6cac36b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Nathan", - "company": "iEnland", - "phone": "806-459-2925", - "email": "kaylee@ienland.com" - }, - { - "id": 2294, - "guid": "e14685fc-c5c5-4999-a687-cf08381633fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Carrington", - "company": "Keytheon", - "phone": "897-453-3678", - "email": "faith@keytheon.com" - }, - { - "id": 2295, - "guid": "5db9bf02-72b9-4196-b2cb-6fcb7032c728", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooklyn Creighton", - "company": "Enlogia", - "phone": "876-568-3797", - "email": "brooklyn@enlogia.com" - }, - { - "id": 2296, - "guid": "745da0ef-8261-41d7-a513-5b2cf0ff42bb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Murphy", - "company": "Unologic", - "phone": "883-470-2630", - "email": "peyton@unologic.com" - }, - { - "id": 2297, - "guid": "336c44c2-0f16-4f5c-8adc-eebdb6055e96", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Clapton", - "company": "InfoAirway", - "phone": "848-400-2687", - "email": "kimberly@infoairway.com" - }, - { - "id": 2298, - "guid": "e0a924d5-0cfa-4f40-9f42-0a373b987e36", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Mercer", - "company": "Gigaura", - "phone": "817-448-3375", - "email": "ariana@gigaura.com" - }, - { - "id": 2299, - "guid": "7f6a3ccd-bba6-4d08-ba67-b6549c1abbee", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Timmons", - "company": "Techtron", - "phone": "800-497-2432", - "email": "morgan@techtron.com" - }, - { - "id": 2300, - "guid": "56f0f62a-15a8-4cfc-b329-e19cbda54eaf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Adamson", - "company": "Gigaura", - "phone": "884-410-3723", - "email": "madelyn@gigaura.com" - }, - { - "id": 2301, - "guid": "fe844fea-50f4-4b23-8cd3-0cad84e35baf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Goldman", - "company": "Pacwest", - "phone": "852-446-3832", - "email": "maya@pacwest.com" - }, - { - "id": 2302, - "guid": "98ecb70f-5f93-40c3-8e5c-22732be6bb5d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Molligan", - "company": "Keytheon", - "phone": "819-558-3953", - "email": "melanie@keytheon.com" - }, - { - "id": 2303, - "guid": "2a1ab3b1-6675-4e5d-921a-9eb7a69cbbba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Daniels", - "company": "Textiqua", - "phone": "850-487-2562", - "email": "zoe@textiqua.com" - }, - { - "id": 2304, - "guid": "4d70e58b-07b9-45d5-9734-ceed99277fe8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Brooks", - "company": "Titanigraf", - "phone": "815-541-3399", - "email": "hannah@titanigraf.com" - }, - { - "id": 2305, - "guid": "6a7d6ef7-b5f1-4882-b721-b5e7d2d7ba8e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Carrington", - "company": "Quintegrity", - "phone": "855-526-2654", - "email": "kaylee@quintegrity.com" - }, - { - "id": 2306, - "guid": "93a202e1-9381-43b3-83ff-649b8b202d12", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Wood", - "company": "Idmax", - "phone": "877-447-3204", - "email": "samantha@idmax.com" - }, - { - "id": 2307, - "guid": "c4d80ce9-8541-4dca-815c-8b53060a9976", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Timmons", - "company": "RoboAerlogix", - "phone": "861-489-3383", - "email": "emily@roboaerlogix.com" - }, - { - "id": 2308, - "guid": "5f139ca7-cbe4-4056-a137-1c7642f2c084", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Cramer", - "company": "Nanobanc", - "phone": "813-404-2411", - "email": "kayla@nanobanc.com" - }, - { - "id": 2309, - "guid": "fbddd4ef-9780-4a96-b622-d39554f37fee", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Hodges", - "company": "Cryptotegrity", - "phone": "804-432-2346", - "email": "natalie@cryptotegrity.com" - }, - { - "id": 2310, - "guid": "761c5ed9-217f-45a6-88e1-3fa4cb35b6b9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brianna Fulton", - "company": "Ameritron", - "phone": "842-575-3709", - "email": "brianna@ameritron.com" - }, - { - "id": 2311, - "guid": "56633a7f-c553-4d87-98f2-ada78667742e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Oldridge", - "company": "Safeagra", - "phone": "880-430-3332", - "email": "lily@safeagra.com" - }, - { - "id": 2312, - "guid": "880b4fb2-2cb3-4f10-8538-ca49c12356b8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Harrison", - "company": "Unologic", - "phone": "822-433-2211", - "email": "trinity@unologic.com" - }, - { - "id": 2313, - "guid": "ddb51fc5-9106-4a82-b86f-80e42cefe55d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jocelyn Owen", - "company": "Vencom", - "phone": "840-432-2209", - "email": "jocelyn@vencom.com" - }, - { - "id": 2314, - "guid": "74d75c68-f386-43ff-b414-343842ba3779", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Davidson", - "company": "Rapigrafix", - "phone": "821-547-2101", - "email": "lillian@rapigrafix.com" - }, - { - "id": 2315, - "guid": "9963151f-9345-4fd5-b62e-c5735d3666b0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Hoggarth", - "company": "Transtouch", - "phone": "842-578-3055", - "email": "isabelle@transtouch.com" - }, - { - "id": 2316, - "guid": "4d7de366-ab2d-487d-9c61-1e763a119039", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Wood", - "company": "Infragraph", - "phone": "821-501-2450", - "email": "audrey@infragraph.com" - }, - { - "id": 2317, - "guid": "f4ef3217-228e-4ac9-8be2-fd05633b7d21", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Walkman", - "company": "Sontopia", - "phone": "883-567-3472", - "email": "brianna@sontopia.com" - }, - { - "id": 2318, - "guid": "e4ca0564-2db7-4eac-8d32-7fd80661f6e6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Vaughan", - "company": "Netseco", - "phone": "880-475-2238", - "email": "jasmine@netseco.com" - }, - { - "id": 2319, - "guid": "918ca87d-11b4-4728-b42e-a169f83fcec1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Cramer", - "company": "SysVenamerica", - "phone": "802-508-2973", - "email": "payton@sysvenamerica.com" - }, - { - "id": 2320, - "guid": "8d068bd0-dc90-4da5-81ad-f4e9d1d4935e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Nathan", - "company": "Truetomic", - "phone": "808-409-3318", - "email": "mariah@truetomic.com" - }, - { - "id": 2321, - "guid": "1a69b91e-a35d-4192-9d6d-5d8e24b86eed", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Hancock", - "company": "Infragraph", - "phone": "871-458-3750", - "email": "samantha@infragraph.com" - }, - { - "id": 2322, - "guid": "a4c59ddb-0c34-4148-a361-91133aff1054", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Oliver", - "company": "Anaframe", - "phone": "802-525-3674", - "email": "payton@anaframe.com" - }, - { - "id": 2323, - "guid": "f9dbbd47-a704-4682-a2b7-5835160acd14", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Cramer", - "company": "Transtouch", - "phone": "876-529-2880", - "email": "jessica@transtouch.com" - }, - { - "id": 2324, - "guid": "da502c38-ebc5-4be9-806e-3e90a5d6d791", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Oldman", - "company": "Netsystems", - "phone": "889-558-3258", - "email": "sofia@netsystems.com" - }, - { - "id": 2325, - "guid": "7f154d5f-6a17-47fe-8726-daeae9baf8e9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Brown", - "company": "Mescatron", - "phone": "840-545-3634", - "email": "kimberly@mescatron.com" - }, - { - "id": 2326, - "guid": "4de5c4de-2707-4091-a78e-cb30262f9df6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexandra White", - "company": "US Infratouch", - "phone": "803-538-3532", - "email": "alexandra@us infratouch.com" - }, - { - "id": 2327, - "guid": "62767ca9-6f1f-475b-9f2e-89943898aa76", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Warren", - "company": "Raylog", - "phone": "822-467-3550", - "email": "mia@raylog.com" - }, - { - "id": 2328, - "guid": "4011ad4f-fe2a-41d4-90d1-86c85f9b0f52", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Nelson", - "company": "Teraserv", - "phone": "808-520-2132", - "email": "valeria@teraserv.com" - }, - { - "id": 2329, - "guid": "82179da4-62b1-41bb-a880-e7b206ea3f50", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Fulton", - "company": "Westmedia", - "phone": "823-497-3397", - "email": "gianna@westmedia.com" - }, - { - "id": 2330, - "guid": "e0833d5c-036c-4c02-b12d-40b53bcc3d3d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Miln", - "company": "SysUSA", - "phone": "862-444-2685", - "email": "sydney@sysusa.com" - }, - { - "id": 2331, - "guid": "af4f8548-b3d1-4c2d-b1e0-28a21eaef602", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Miln", - "company": "Conotomics", - "phone": "867-457-3123", - "email": "lily@conotomics.com" - }, - { - "id": 2332, - "guid": "d0eb8aa8-5c4f-42a6-849f-90da923b6b26", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Morrison", - "company": "Technogra", - "phone": "870-597-3853", - "email": "brooke@technogra.com" - }, - { - "id": 2333, - "guid": "641d047d-f35c-4fe3-831d-e4663dc233b9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexandra Chesterton", - "company": "iQualcar", - "phone": "880-500-2233", - "email": "alexandra@iqualcar.com" - }, - { - "id": 2334, - "guid": "aded0e49-5b34-4a77-ba87-182c32ac4ecb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Hancock", - "company": "eSteganoergy", - "phone": "825-563-3391", - "email": "savannah@esteganoergy.com" - }, - { - "id": 2335, - "guid": "7011e7fc-7fad-4b9f-aaff-9846137ea00b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Hoggarth", - "company": "SysVenamerica", - "phone": "895-481-3882", - "email": "lillian@sysvenamerica.com" - }, - { - "id": 2336, - "guid": "a8f48eb0-f406-4e3a-b475-cc3aaf06c251", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Cook", - "company": "Cryptotegrity", - "phone": "892-554-2449", - "email": "rachel@cryptotegrity.com" - }, - { - "id": 2337, - "guid": "6df947ad-563b-4252-9024-3420e34a8fd9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Gerald", - "company": "Transtouch", - "phone": "819-440-3247", - "email": "sydney@transtouch.com" - }, - { - "id": 2338, - "guid": "3b53b08f-39c8-4ef3-9297-4f6bcc6af46e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Owen", - "company": "Raylog", - "phone": "853-530-3129", - "email": "mya@raylog.com" - }, - { - "id": 2339, - "guid": "49bc2000-68bb-4ef6-90e4-9eafab371dd5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Nelson", - "company": "Cryptotemplate", - "phone": "831-409-2160", - "email": "kaylee@cryptotemplate.com" - }, - { - "id": 2340, - "guid": "ea93fae4-cc31-47f0-912e-b6f87df605c7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Ford", - "company": "Aluco", - "phone": "801-571-3599", - "email": "kylie@aluco.com" - }, - { - "id": 2341, - "guid": "7128544b-812c-4b86-bcd5-efc227d68c73", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Gardner", - "company": "US Infratouch", - "phone": "803-528-3093", - "email": "audrey@us infratouch.com" - }, - { - "id": 2342, - "guid": "fe66baa6-06f9-46d4-a28c-bffa370081bf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gianna Abramson", - "company": "InfoAirway", - "phone": "859-498-3401", - "email": "gianna@infoairway.com" - }, - { - "id": 2343, - "guid": "011b8d76-c1f2-418c-ad4e-285bcc4aaebe", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Taylor Watson", - "company": "Superscope", - "phone": "850-439-2682", - "email": "taylor@superscope.com" - }, - { - "id": 2344, - "guid": "38422841-4431-4e3b-a686-2013ba9b5c3d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Nash", - "company": "Aluco", - "phone": "823-492-3403", - "email": "mya@aluco.com" - }, - { - "id": 2345, - "guid": "7332f7d5-3275-493f-b990-140097ca33aa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mackenzie Chesterton", - "company": "Compuamerica", - "phone": "858-589-3382", - "email": "mackenzie@compuamerica.com" - }, - { - "id": 2346, - "guid": "312173e1-83e3-42a2-b8c2-77193da55040", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Hancock", - "company": "US Infratouch", - "phone": "829-591-2482", - "email": "riley@us infratouch.com" - }, - { - "id": 2347, - "guid": "6d98138f-84e8-4977-8795-034a2fb83a05", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Clapton", - "company": "Xeicon", - "phone": "861-581-3265", - "email": "molly@xeicon.com" - }, - { - "id": 2348, - "guid": "02a1849d-6b2e-42be-8ae1-f7d102e2ef07", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Freeman", - "company": "Xeicon", - "phone": "865-593-2269", - "email": "brianna@xeicon.com" - }, - { - "id": 2349, - "guid": "a8e7500f-3e9b-4ea9-83ff-51ba77b7cf21", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Bush", - "company": "Gigaura", - "phone": "856-479-3432", - "email": "grace@gigaura.com" - }, - { - "id": 2350, - "guid": "f094cb38-b3c4-49a4-b261-e084cdd6786d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Oldman", - "company": "iSkyvaco", - "phone": "878-515-3614", - "email": "ava@iskyvaco.com" - }, - { - "id": 2351, - "guid": "239f011b-51cb-4de0-9571-0b23f09654d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Ogden", - "company": "Cryptotemplate", - "phone": "822-406-3371", - "email": "abigail@cryptotemplate.com" - }, - { - "id": 2352, - "guid": "f269653a-4e1b-4ac4-8832-38f9b875bbb0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Osborne", - "company": "Allnet", - "phone": "807-461-2524", - "email": "faith@allnet.com" - }, - { - "id": 2353, - "guid": "6c8b5594-f8d9-4a75-8ca2-d28665852347", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Wainwright", - "company": "Gigaura", - "phone": "878-586-2911", - "email": "lillian@gigaura.com" - }, - { - "id": 2354, - "guid": "3b9adbf2-45d3-4671-9fcc-0a6d0e43ad98", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooke Oliver", - "company": "Westmedia", - "phone": "814-524-3936", - "email": "brooke@westmedia.com" - }, - { - "id": 2355, - "guid": "1e1ea5d8-b4ba-4be0-9353-29c19cde20f4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Claire Galbraith", - "company": "SysVenamerica", - "phone": "853-600-3457", - "email": "claire@sysvenamerica.com" - }, - { - "id": 2356, - "guid": "55dd9673-f078-43cd-9c01-5865ee1dc91e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Turner", - "company": "Robocomm", - "phone": "865-545-2280", - "email": "alexa@robocomm.com" - }, - { - "id": 2357, - "guid": "140cd771-6d94-4db7-bc3b-3e32fd5bdfdf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Nelson", - "company": "Steganoconiche", - "phone": "856-405-3169", - "email": "gianna@steganoconiche.com" - }, - { - "id": 2358, - "guid": "8ea0b9a8-c432-4a79-8a20-64b137385d2d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Bush", - "company": "Dynarama", - "phone": "888-591-3294", - "email": "valeria@dynarama.com" - }, - { - "id": 2359, - "guid": "b25a7efe-3ec0-41d0-9378-3edef35d331f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Watson", - "company": "Indisco", - "phone": "896-582-2126", - "email": "alyssa@indisco.com" - }, - { - "id": 2360, - "guid": "48c5754a-8bf3-490a-a405-cd5e2f7b26ea", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoe Hawkins", - "company": "Safeagra", - "phone": "830-573-3610", - "email": "zoe@safeagra.com" - }, - { - "id": 2361, - "guid": "5131eeab-a5e2-4bc1-91dd-388a9442c3f6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Vaughan", - "company": "US Infratouch", - "phone": "825-557-3549", - "email": "jessica@us infratouch.com" - }, - { - "id": 2362, - "guid": "d0e5e21c-08e3-4796-9ef7-b6bfbb271783", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Chandter", - "company": "Idmax", - "phone": "800-440-3358", - "email": "genesis@idmax.com" - }, - { - "id": 2363, - "guid": "f68568b2-4ba7-4823-bfb3-74b0ec464d31", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Carey", - "company": "Quintegrity", - "phone": "841-585-3912", - "email": "sydney@quintegrity.com" - }, - { - "id": 2364, - "guid": "b949cc36-9f76-4319-ad94-e2196024cb16", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ashley Clapton", - "company": "Celgra", - "phone": "885-504-2350", - "email": "ashley@celgra.com" - }, - { - "id": 2365, - "guid": "66c3c981-f54c-4af1-bcc7-715123072ea4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabriella Gate", - "company": "Superscope", - "phone": "848-473-2668", - "email": "gabriella@superscope.com" - }, - { - "id": 2366, - "guid": "5042e00d-0313-434b-8b01-0f0b317dd6bc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Wainwright", - "company": "Xeicon", - "phone": "866-402-2668", - "email": "mia@xeicon.com" - }, - { - "id": 2367, - "guid": "70d1fea7-3261-4146-8cfd-8f21695b5114", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Osborne", - "company": "Teratopia", - "phone": "804-510-2558", - "email": "khloe@teratopia.com" - }, - { - "id": 2368, - "guid": "275606c3-8acd-491d-aaf1-8ec4909727c5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Anna Waller", - "company": "Inridium", - "phone": "860-591-3602", - "email": "anna@inridium.com" - }, - { - "id": 2369, - "guid": "98855dd6-e281-4348-91a2-cfd9e3838d4d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Clapton", - "company": "Quintegrity", - "phone": "802-426-2273", - "email": "mia@quintegrity.com" - }, - { - "id": 2370, - "guid": "ab03cb6e-9ccf-497c-935f-8ad127c6240b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Turner", - "company": "Xeicon", - "phone": "845-548-3500", - "email": "natalie@xeicon.com" - }, - { - "id": 2371, - "guid": "749be45a-cd46-40a4-83c8-c3e98e6c3866", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lauren Thomson", - "company": "Aluco", - "phone": "864-576-2258", - "email": "lauren@aluco.com" - }, - { - "id": 2372, - "guid": "24fc6c03-c74f-4981-9e03-9a0500bdc851", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madelyn Wood", - "company": "Aluco", - "phone": "856-497-2108", - "email": "madelyn@aluco.com" - }, - { - "id": 2373, - "guid": "9cf3ff98-7ce3-40cd-ad54-7944adc40fb2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Hoggarth", - "company": "Superscope", - "phone": "870-444-2365", - "email": "lillian@superscope.com" - }, - { - "id": 2374, - "guid": "82e74a5f-62c8-47f1-965b-7157b65a00ae", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Abramson", - "company": "Aprama", - "phone": "856-542-2534", - "email": "alexis@aprama.com" - }, - { - "id": 2375, - "guid": "f124d2eb-2c14-4781-9845-e418c0c0d565", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Day", - "company": "Westmedia", - "phone": "871-557-3058", - "email": "autumn@westmedia.com" - }, - { - "id": 2376, - "guid": "19ac84a6-f486-43ad-9fef-83ab230b10d6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maya Freeman", - "company": "Tekcar", - "phone": "833-571-3606", - "email": "maya@tekcar.com" - }, - { - "id": 2377, - "guid": "963224ba-4d4a-46a7-9485-5816c2551457", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Wesley", - "company": "Fibrotouch", - "phone": "842-509-2318", - "email": "trinity@fibrotouch.com" - }, - { - "id": 2378, - "guid": "18ec3d5e-b284-4393-8ce4-643d156d533c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maria Mercer", - "company": "SysUSA", - "phone": "803-491-2846", - "email": "maria@sysusa.com" - }, - { - "id": 2379, - "guid": "60298387-53db-4f68-9e63-9c49cdf9e034", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Carrington", - "company": "Technogra", - "phone": "864-425-2104", - "email": "destiny@technogra.com" - }, - { - "id": 2380, - "guid": "364187dd-97ec-40e0-a193-66eae59fc872", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Brown", - "company": "Unologic", - "phone": "812-443-2150", - "email": "allison@unologic.com" - }, - { - "id": 2381, - "guid": "ecadb9f2-c75f-4e71-bfbc-64cf2b62b820", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Sheldon", - "company": "Vencom", - "phone": "803-557-2251", - "email": "avery@vencom.com" - }, - { - "id": 2382, - "guid": "1a0e9748-0e25-42e0-ac48-3c484bfa4172", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Carey", - "company": "Qualserve", - "phone": "826-476-2790", - "email": "alexis@qualserve.com" - }, - { - "id": 2383, - "guid": "9830125d-218c-4273-80eb-499599786f06", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Hamphrey", - "company": "Teraserv", - "phone": "855-478-2459", - "email": "victoria@teraserv.com" - }, - { - "id": 2384, - "guid": "29562dd4-f9ae-4ad0-a6f0-9b46bd52f3c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Thorndike", - "company": "Netsystems", - "phone": "816-493-2507", - "email": "elizabeth@netsystems.com" - }, - { - "id": 2385, - "guid": "e5edac15-c2b0-49e3-9673-6d13daa9e65d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa WifKinson", - "company": "Techtron", - "phone": "827-499-2250", - "email": "vanessa@techtron.com" - }, - { - "id": 2386, - "guid": "6f56941e-44a5-468e-813d-da27c49b26dd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Campbell", - "company": "eSteganoergy", - "phone": "816-546-2748", - "email": "bailey@esteganoergy.com" - }, - { - "id": 2387, - "guid": "348b389d-5aef-4e7f-8ca7-50809d843ae0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Thornton", - "company": "Keytheon", - "phone": "835-461-2370", - "email": "savannah@keytheon.com" - }, - { - "id": 2388, - "guid": "1cc819e1-adce-480e-aef9-9ecc5f4b583e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Wayne", - "company": "iEnland", - "phone": "855-458-3636", - "email": "emily@ienland.com" - }, - { - "id": 2389, - "guid": "7773ca7e-8eb8-454c-b72d-c025787c43de", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Makayla Day", - "company": "Anagraph", - "phone": "814-552-3775", - "email": "makayla@anagraph.com" - }, - { - "id": 2390, - "guid": "29b6d436-4ca4-4bc6-9a8f-280109cc437f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Gilson", - "company": "Qualserve", - "phone": "800-403-3991", - "email": "alexa@qualserve.com" - }, - { - "id": 2391, - "guid": "4f1314fe-28dc-429e-9294-f67741e56e42", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Ogden", - "company": "Anaframe", - "phone": "803-595-3710", - "email": "alexis@anaframe.com" - }, - { - "id": 2392, - "guid": "97768af3-6523-4be8-a349-c04e09dab2bb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Vance", - "company": "OpKeycomm", - "phone": "823-458-2279", - "email": "riley@opkeycomm.com" - }, - { - "id": 2393, - "guid": "6ec9beaf-1109-4f36-a835-205fdc4c9072", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Neal", - "company": "Techtron", - "phone": "852-487-3880", - "email": "lily@techtron.com" - }, - { - "id": 2394, - "guid": "3bce658c-a8be-4b08-a4d2-53bb2ceb7a80", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Walkman", - "company": "Westgate", - "phone": "828-492-2161", - "email": "kaylee@westgate.com" - }, - { - "id": 2395, - "guid": "fffd9d14-2318-45d1-aa97-b3d98d25cc7f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Carter", - "company": "Interliant", - "phone": "801-591-3352", - "email": "maya@interliant.com" - }, - { - "id": 2396, - "guid": "76154e0f-91f2-45f5-bd0c-d5dfd176e409", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Conors", - "company": "Aprama", - "phone": "869-496-2184", - "email": "genesis@aprama.com" - }, - { - "id": 2397, - "guid": "e3f25ba0-44a9-4df0-bb7e-b4d31f9bfdd0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Goldman", - "company": "Indisco", - "phone": "844-527-2172", - "email": "brooke@indisco.com" - }, - { - "id": 2398, - "guid": "9c01cb56-625b-44d2-a462-f0fe76f579a5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Bush", - "company": "iEnland", - "phone": "809-549-2029", - "email": "grace@ienland.com" - }, - { - "id": 2399, - "guid": "91818fbf-5711-48bb-9a25-86356dc8c4b6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Otis", - "company": "Transtouch", - "phone": "802-586-3643", - "email": "hailey@transtouch.com" - }, - { - "id": 2400, - "guid": "22a7ad89-8191-425c-9a9d-fb1503aee5d9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Goodman", - "company": "Navivacs", - "phone": "859-473-3133", - "email": "trinity@navivacs.com" - }, - { - "id": 2401, - "guid": "a0b1f308-7541-4625-826b-6d83fc05f077", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Thorndike", - "company": "Airdyne", - "phone": "838-472-3827", - "email": "hailey@airdyne.com" - }, - { - "id": 2402, - "guid": "a4427795-1cb9-43f5-8b17-9b452158f9e2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Young", - "company": "Qualserve", - "phone": "806-420-3041", - "email": "julia@qualserve.com" - }, - { - "id": 2403, - "guid": "ee38fdaf-2aa7-4287-a890-42ff00adabdc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla White", - "company": "Textiqua", - "phone": "862-599-2572", - "email": "kayla@textiqua.com" - }, - { - "id": 2404, - "guid": "5de873e7-75ad-4279-a7db-72bb8e5e4173", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Gilson", - "company": "Airdyne", - "phone": "829-575-2183", - "email": "alexa@airdyne.com" - }, - { - "id": 2405, - "guid": "10d9b8ec-6689-4105-8b17-a523521af991", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Carrington", - "company": "Truegate", - "phone": "897-421-3830", - "email": "riley@truegate.com" - }, - { - "id": 2406, - "guid": "c5c112db-a581-4133-86f6-8916327d7f8d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Gate", - "company": "Pacwest", - "phone": "884-404-2829", - "email": "faith@pacwest.com" - }, - { - "id": 2407, - "guid": "47aa2d32-e739-4154-9fec-fd145330a62e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Layla Gilson", - "company": "Indisco", - "phone": "842-529-2738", - "email": "layla@indisco.com" - }, - { - "id": 2408, - "guid": "11bbaf4e-4419-4eb6-b557-3f4320cc9c46", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Carter", - "company": "Westtomik", - "phone": "810-598-2740", - "email": "andrea@westtomik.com" - }, - { - "id": 2409, - "guid": "47347f12-f25b-43ac-8c51-214471eec708", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaitlyn Timmons", - "company": "SysUSA", - "phone": "877-557-3737", - "email": "kaitlyn@sysusa.com" - }, - { - "id": 2410, - "guid": "8763185e-50e7-4371-9b28-70b7d497ea5a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Hancock", - "company": "RoboAerlogix", - "phone": "838-403-3383", - "email": "hailey@roboaerlogix.com" - }, - { - "id": 2411, - "guid": "b6ca38a3-f772-4eaf-9506-c8347f3e2e5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Thornton", - "company": "Compuamerica", - "phone": "821-570-3211", - "email": "lauren@compuamerica.com" - }, - { - "id": 2412, - "guid": "36731504-c308-4e42-bb88-871abd0cc1a8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Charlson", - "company": "Jamconik", - "phone": "867-464-2120", - "email": "olivia@jamconik.com" - }, - { - "id": 2413, - "guid": "49f91449-8863-4b61-b88c-09bbd15d1bce", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Gibbs", - "company": "Orthomedia", - "phone": "873-480-2971", - "email": "anna@orthomedia.com" - }, - { - "id": 2414, - "guid": "64a28187-8964-4bea-8daa-43fdcbfc8b8e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Harrison", - "company": "Safetrust", - "phone": "894-492-2197", - "email": "rachel@safetrust.com" - }, - { - "id": 2415, - "guid": "90cf205e-436f-4faf-a4b7-d398cb1ddd32", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mia Creighton", - "company": "eEyetanic", - "phone": "847-532-2831", - "email": "mia@eeyetanic.com" - }, - { - "id": 2416, - "guid": "49a2795b-8e91-424e-94e1-619295d28ff9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Harrison", - "company": "Fibroserve", - "phone": "863-577-3055", - "email": "madeline@fibroserve.com" - }, - { - "id": 2417, - "guid": "7f00e1ab-0a59-4473-bacc-c8f8ff212502", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia Fulton", - "company": "Westtomik", - "phone": "827-449-3561", - "email": "sophia@westtomik.com" - }, - { - "id": 2418, - "guid": "0faf0441-94d3-496d-ba6a-e87e94bea9c6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kayla Charlson", - "company": "Cryptotegrity", - "phone": "863-494-2671", - "email": "kayla@cryptotegrity.com" - }, - { - "id": 2419, - "guid": "59c01885-cdf8-49f9-aaac-d56576fca52f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Thorndike", - "company": "Cryptotemplate", - "phone": "892-578-2890", - "email": "maria@cryptotemplate.com" - }, - { - "id": 2420, - "guid": "7a5dff50-e121-4345-8303-2d94dcdf79bc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Timmons", - "company": "Robotomic", - "phone": "832-485-3006", - "email": "eva@robotomic.com" - }, - { - "id": 2421, - "guid": "96bd6ea6-bf13-4a22-86e6-0b4aa29bf450", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Davidson", - "company": "Allphysiche", - "phone": "856-545-2386", - "email": "ariana@allphysiche.com" - }, - { - "id": 2422, - "guid": "6b1987d3-55bf-49bc-9d70-e6574ae9f5f3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabriella Gibbs", - "company": "Tekcar", - "phone": "813-488-2963", - "email": "gabriella@tekcar.com" - }, - { - "id": 2423, - "guid": "57110bd2-b1ed-4467-adc7-a50146cb2a08", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ella Nelson", - "company": "Anagraph", - "phone": "837-563-3980", - "email": "ella@anagraph.com" - }, - { - "id": 2424, - "guid": "0dd3f270-69e0-4a6e-bc1b-2061b78910ba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Hawkins", - "company": "iEnland", - "phone": "899-573-2732", - "email": "paige@ienland.com" - }, - { - "id": 2425, - "guid": "3a0567e6-8b02-465b-9e73-1472bda4c61e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Nash", - "company": "Systheon", - "phone": "855-531-2677", - "email": "mya@systheon.com" - }, - { - "id": 2426, - "guid": "b1e6497a-0f2b-4390-b47d-479f04df8f1a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Thorndike", - "company": "Allphysiche", - "phone": "837-438-3533", - "email": "madison@allphysiche.com" - }, - { - "id": 2427, - "guid": "fbf73748-1eae-4087-9b40-940d450a33fd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Ward", - "company": "Rapigrafix", - "phone": "825-402-2949", - "email": "abigail@rapigrafix.com" - }, - { - "id": 2428, - "guid": "ba6b42cf-9ec2-420d-a5fa-233eec0e9ac9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Miln", - "company": "Anagraph", - "phone": "879-454-2830", - "email": "sophia@anagraph.com" - }, - { - "id": 2429, - "guid": "35687e09-4a96-4b94-bfde-0a9da0a798fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Nathan", - "company": "Xeicon", - "phone": "825-549-2358", - "email": "leah@xeicon.com" - }, - { - "id": 2430, - "guid": "c4e2a21a-3c8c-4ddc-aa27-0c88c8d92046", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Day", - "company": "Technogra", - "phone": "892-538-2671", - "email": "olivia@technogra.com" - }, - { - "id": 2431, - "guid": "e5d1f008-9cb8-4f34-820c-4b8227c22040", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Harrison", - "company": "OpKeycomm", - "phone": "809-468-3687", - "email": "khloe@opkeycomm.com" - }, - { - "id": 2432, - "guid": "1bb3c29c-1ab1-4023-92d0-9ee56a573f9f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaitlyn Nash", - "company": "Quintegrity", - "phone": "850-420-3632", - "email": "kaitlyn@quintegrity.com" - }, - { - "id": 2433, - "guid": "faa09f11-b938-41c6-95f5-d528c0bc9835", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Brickman", - "company": "iOptystix", - "phone": "815-434-3241", - "email": "sophia@ioptystix.com" - }, - { - "id": 2434, - "guid": "26c5ec56-0593-45dd-95b1-28d0f9e3673c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Youmans", - "company": "Steganoconiche", - "phone": "850-587-2959", - "email": "khloe@steganoconiche.com" - }, - { - "id": 2435, - "guid": "bd467357-339c-47f0-968e-df59b2bc1f0b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Miln", - "company": "Technogra", - "phone": "834-483-3434", - "email": "genesis@technogra.com" - }, - { - "id": 2436, - "guid": "6c7fe0f1-757c-4da9-b20c-3948f3617397", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Croftoon", - "company": "Techtron", - "phone": "879-477-3895", - "email": "brooke@techtron.com" - }, - { - "id": 2437, - "guid": "ae3a2c7e-1571-4294-adf6-f657b905f558", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Gilbert", - "company": "Xeicon", - "phone": "839-477-3551", - "email": "gabriella@xeicon.com" - }, - { - "id": 2438, - "guid": "ad0ffdad-c250-4660-85fd-a5be7603ff05", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Thomson", - "company": "Netsystems", - "phone": "846-502-2762", - "email": "savannah@netsystems.com" - }, - { - "id": 2439, - "guid": "635c5772-cf41-48a7-b774-072eeda7824d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria Carey", - "company": "Steganoconiche", - "phone": "895-554-2255", - "email": "maria@steganoconiche.com" - }, - { - "id": 2440, - "guid": "76db78d8-13ce-4568-b413-f37d45bffbcc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Calhoun", - "company": "iQualcar", - "phone": "881-558-3758", - "email": "aaliyah@iqualcar.com" - }, - { - "id": 2441, - "guid": "e922df25-0e68-4e01-b617-20686550629c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Campbell", - "company": "iEnland", - "phone": "869-561-2431", - "email": "aaliyah@ienland.com" - }, - { - "id": 2442, - "guid": "18e9a2a7-8418-45f8-a691-361323e55939", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Vaughan", - "company": "Robocomm", - "phone": "821-564-2130", - "email": "destiny@robocomm.com" - }, - { - "id": 2443, - "guid": "73201f21-be8b-4d2e-b84a-f3c4c1f67e77", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Fisher", - "company": "Robotemplate", - "phone": "892-594-2584", - "email": "genesis@robotemplate.com" - }, - { - "id": 2444, - "guid": "563bfd8c-f7b6-4c4c-84cf-7438d4e490e8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Evelyn Harrison", - "company": "Conotomics", - "phone": "892-558-2844", - "email": "evelyn@conotomics.com" - }, - { - "id": 2445, - "guid": "4ea7ce92-0c69-4eaa-915b-fe8f8ec2aa3c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Brickman", - "company": "Teknoplexon", - "phone": "803-571-2064", - "email": "molly@teknoplexon.com" - }, - { - "id": 2446, - "guid": "ae600cd3-50a8-4da0-9ceb-0d360d237673", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Chloe Molligan", - "company": "Keytheon", - "phone": "887-566-2315", - "email": "chloe@keytheon.com" - }, - { - "id": 2447, - "guid": "a9a7a1e2-38c0-40e4-b42c-6beabac76614", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Nelson", - "company": "Hypervaco", - "phone": "892-491-3582", - "email": "camila@hypervaco.com" - }, - { - "id": 2448, - "guid": "90a8e176-40b7-475a-ab27-32f1392b54ba", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maya Hodges", - "company": "Orthomedia", - "phone": "860-473-2871", - "email": "maya@orthomedia.com" - }, - { - "id": 2449, - "guid": "9a17a2a4-5fc5-4614-86eb-f25e05152eab", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Thornton", - "company": "Anaframe", - "phone": "806-432-2474", - "email": "riley@anaframe.com" - }, - { - "id": 2450, - "guid": "d93f0edb-94af-4122-8357-8ccd63515342", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Bush", - "company": "Mescatron", - "phone": "843-484-2751", - "email": "allison@mescatron.com" - }, - { - "id": 2451, - "guid": "5374cec8-2863-4761-97fd-bd0435d647d9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Higgins", - "company": "Gigaura", - "phone": "812-456-2719", - "email": "savannah@gigaura.com" - }, - { - "id": 2452, - "guid": "4c0f6c17-6aa3-4fcf-8451-f6d694b4073f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Gustman", - "company": "Interliant", - "phone": "884-424-3726", - "email": "paige@interliant.com" - }, - { - "id": 2453, - "guid": "b709e3c5-7aae-497a-ab0d-e6c8de8515f2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Wainwright", - "company": "Syssoft", - "phone": "863-559-2153", - "email": "faith@syssoft.com" - }, - { - "id": 2454, - "guid": "9c226a69-22af-4933-9b12-ade2be1aacbc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Day", - "company": "Ventanium", - "phone": "844-522-2886", - "email": "ashley@ventanium.com" - }, - { - "id": 2455, - "guid": "c3f3b635-c137-4479-a744-96154dc04d5e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Nevaeh Warren", - "company": "Fibrotopia", - "phone": "843-468-2088", - "email": "nevaeh@fibrotopia.com" - }, - { - "id": 2456, - "guid": "b007f07f-7195-41fe-9978-57d1f643b19c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Charlson", - "company": "Multitiqua", - "phone": "832-560-3532", - "email": "avery@multitiqua.com" - }, - { - "id": 2457, - "guid": "1b3337b0-e294-419b-aebd-321b1ae27247", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bella Sherlock", - "company": "iQualcar", - "phone": "824-593-2299", - "email": "bella@iqualcar.com" - }, - { - "id": 2458, - "guid": "1c1b5bd2-e3ab-447d-ae42-432e9dbdbc96", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Waller", - "company": "Compuamerica", - "phone": "850-438-2931", - "email": "aaliyah@compuamerica.com" - }, - { - "id": 2459, - "guid": "ba389b66-b91e-4543-82d7-317893207a74", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Oliver", - "company": "Interliant", - "phone": "861-556-3913", - "email": "victoria@interliant.com" - }, - { - "id": 2460, - "guid": "09da7214-782b-4769-a414-c0cd906ddd2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Gate", - "company": "Celgra", - "phone": "817-455-2035", - "email": "hailey@celgra.com" - }, - { - "id": 2461, - "guid": "8304cb2b-6cb5-4a49-aab0-99268fc83f15", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Nathan", - "company": "OpKeycomm", - "phone": "873-504-3958", - "email": "ella@opkeycomm.com" - }, - { - "id": 2462, - "guid": "1f2b44d4-d374-4ad6-af74-875ec3783971", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Hawkins", - "company": "Thermotomic", - "phone": "818-599-2445", - "email": "audrey@thermotomic.com" - }, - { - "id": 2463, - "guid": "36851347-5ff8-40f4-b4b8-97228193a2e5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Clapton", - "company": "Venconix", - "phone": "816-581-3233", - "email": "amelia@venconix.com" - }, - { - "id": 2464, - "guid": "2c2daf7a-4674-4142-acfe-7d6b68b44b0e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Brown", - "company": "Pericenta", - "phone": "879-467-3291", - "email": "mackenzie@pericenta.com" - }, - { - "id": 2465, - "guid": "74021277-c795-4d23-9b2a-43380e4c1d15", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Timmons", - "company": "Interliant", - "phone": "864-414-2562", - "email": "grace@interliant.com" - }, - { - "id": 2466, - "guid": "6030213b-7e6c-43e8-996b-62e40922af2a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Stanley", - "company": "Dynarama", - "phone": "888-598-2807", - "email": "avery@dynarama.com" - }, - { - "id": 2467, - "guid": "cc764b1b-0843-4b52-b962-6da8477eddec", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Brooks", - "company": "Indisco", - "phone": "866-545-2792", - "email": "chloe@indisco.com" - }, - { - "id": 2468, - "guid": "36d33bba-9986-4dc6-b72d-fc2499ac4877", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Gerald", - "company": "Turbomart", - "phone": "851-567-2893", - "email": "autumn@turbomart.com" - }, - { - "id": 2469, - "guid": "4502648c-a628-41a0-83d6-71338eb196c6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Cook", - "company": "Superscope", - "phone": "899-469-2155", - "email": "savannah@superscope.com" - }, - { - "id": 2470, - "guid": "34741f3d-30ca-41d0-b36c-53f2673d3cb0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Thornton", - "company": "Gigaura", - "phone": "885-593-3451", - "email": "maria@gigaura.com" - }, - { - "id": 2471, - "guid": "4a6ef09a-cda1-4057-bb9a-af3216dff498", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Calhoun", - "company": "Jamrola", - "phone": "818-523-2993", - "email": "avery@jamrola.com" - }, - { - "id": 2472, - "guid": "38da2088-f76d-42a3-90c9-deabb34a2fba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Brickman", - "company": "Keytheon", - "phone": "814-519-3909", - "email": "amelia@keytheon.com" - }, - { - "id": 2473, - "guid": "219a71ff-5da0-41b2-af63-6ca3f892e436", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Charlson", - "company": "Robocomm", - "phone": "895-436-2902", - "email": "sydney@robocomm.com" - }, - { - "id": 2474, - "guid": "34e19d0d-8dc8-4499-bd94-50f44c663645", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Gilmore", - "company": "Superscope", - "phone": "829-500-3202", - "email": "chloe@superscope.com" - }, - { - "id": 2475, - "guid": "3d584bf4-f972-4d12-b129-f6c4f8ed31e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Nash", - "company": "Fibroserve", - "phone": "874-485-3346", - "email": "camila@fibroserve.com" - }, - { - "id": 2476, - "guid": "f53bb177-ea52-4bda-9490-85f19509e987", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Fisher", - "company": "Anagraph", - "phone": "897-600-2686", - "email": "mariah@anagraph.com" - }, - { - "id": 2477, - "guid": "c332ab3a-8dc3-4092-9d53-257be2f500ab", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Wallace", - "company": "Generola", - "phone": "882-500-2955", - "email": "lily@generola.com" - }, - { - "id": 2478, - "guid": "605eb0fd-53b5-4313-a9d6-24245e9225fa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Abramson", - "company": "Tekcar", - "phone": "869-431-2857", - "email": "ashley@tekcar.com" - }, - { - "id": 2479, - "guid": "f9b4bdf1-2f0f-425f-af99-ffa9707d2000", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Gilson", - "company": "Compuamerica", - "phone": "854-416-2598", - "email": "maria@compuamerica.com" - }, - { - "id": 2480, - "guid": "86cef944-9a98-44c1-9bb2-4a0d091fffba", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kylie Chapman", - "company": "Steganoconiche", - "phone": "807-559-2159", - "email": "kylie@steganoconiche.com" - }, - { - "id": 2481, - "guid": "e602e3f6-619d-4acd-97f7-26c3905d4b6e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Miln", - "company": "Syssoft", - "phone": "804-533-2278", - "email": "maria@syssoft.com" - }, - { - "id": 2482, - "guid": "17a816f5-b229-4b90-a355-b13492cb2e5d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Bush", - "company": "Compuamerica", - "phone": "834-515-2278", - "email": "maya@compuamerica.com" - }, - { - "id": 2483, - "guid": "dffe0ec7-8d2c-4d88-b084-0fdb50b35e60", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sydney Cook", - "company": "SysUSA", - "phone": "843-582-2030", - "email": "sydney@sysusa.com" - }, - { - "id": 2484, - "guid": "f97a1ead-5789-4b7f-80f4-af5567ea64d9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Croftoon", - "company": "Openserve", - "phone": "817-474-2813", - "email": "eva@openserve.com" - }, - { - "id": 2485, - "guid": "53d6e041-0c91-4e4b-bc3b-543f6afb9a46", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Wallace", - "company": "SysVenamerica", - "phone": "888-514-3100", - "email": "makayla@sysvenamerica.com" - }, - { - "id": 2486, - "guid": "f16e4d70-ec15-46a5-bbcf-d460c1401a6a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Wood", - "company": "Proline", - "phone": "875-445-3886", - "email": "destiny@proline.com" - }, - { - "id": 2487, - "guid": "e638b849-fbea-40b4-b2ff-f89dcef2d8c5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Young", - "company": "iQualcar", - "phone": "813-412-3069", - "email": "victoria@iqualcar.com" - }, - { - "id": 2488, - "guid": "dd7454af-358f-4f44-b0bd-f0917feda2d9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Chapman", - "company": "Ameritron", - "phone": "819-479-2844", - "email": "kayla@ameritron.com" - }, - { - "id": 2489, - "guid": "acd979b2-182d-4030-8f96-9ac0d6241b2a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Neal", - "company": "Dynarama", - "phone": "887-537-3644", - "email": "molly@dynarama.com" - }, - { - "id": 2490, - "guid": "060e418b-98a2-4433-b543-384d6a178a92", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Timmons", - "company": "Polytheon", - "phone": "880-557-2912", - "email": "autumn@polytheon.com" - }, - { - "id": 2491, - "guid": "25866c8e-e9fe-4d3c-9aab-cee66c22f0f9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ava Chesterton", - "company": "Robocomm", - "phone": "820-489-3372", - "email": "ava@robocomm.com" - }, - { - "id": 2492, - "guid": "16cdf602-8e56-47b8-87a5-46e332700362", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Gilmore", - "company": "Turbomart", - "phone": "884-514-2641", - "email": "alexandra@turbomart.com" - }, - { - "id": 2493, - "guid": "653c3c2a-4411-470f-83b1-78e22f001eb9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Murphy", - "company": "Syssoft", - "phone": "820-493-3897", - "email": "ariana@syssoft.com" - }, - { - "id": 2494, - "guid": "47c9c9e3-efd4-4d4b-9a7a-1a4f68b4461b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Gustman", - "company": "Robocomm", - "phone": "807-481-2032", - "email": "kimberly@robocomm.com" - }, - { - "id": 2495, - "guid": "0c318c60-67f9-4ce2-9e97-9862088749a9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Creighton", - "company": "Keytheon", - "phone": "882-585-3354", - "email": "jocelyn@keytheon.com" - }, - { - "id": 2496, - "guid": "e729e3fc-cc4d-4ba9-9d5f-2a55e7c7eb2b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Watson", - "company": "Jamconik", - "phone": "856-564-2347", - "email": "evelyn@jamconik.com" - }, - { - "id": 2497, - "guid": "fcc87320-80ee-4df9-8001-376c06311ac0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Miers", - "company": "Videobanc", - "phone": "869-589-2403", - "email": "amelia@videobanc.com" - }, - { - "id": 2498, - "guid": "1156f112-cea4-4098-8044-7bbdab98ab7d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jasmine Chapman", - "company": "Systheon", - "phone": "872-517-3360", - "email": "jasmine@systheon.com" - }, - { - "id": 2499, - "guid": "b370ecea-7a21-4502-80d5-30df6a3f0e92", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Higgins", - "company": "Safeagra", - "phone": "853-435-3557", - "email": "brianna@safeagra.com" - }, - { - "id": 2500, - "guid": "8bce4c0e-b4a3-4cd1-afa5-da772fbbd078", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Gilson", - "company": "Navivacs", - "phone": "800-539-3597", - "email": "isabella@navivacs.com" - }, - { - "id": 2501, - "guid": "d1e8d0db-2ca9-4ae1-81e0-b983e5ecf54f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Osborne", - "company": "Proline", - "phone": "852-530-3863", - "email": "valeria@proline.com" - }, - { - "id": 2502, - "guid": "242538b2-2158-4664-a730-e753f1c1b94e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Bailey Morrison", - "company": "Robotomic", - "phone": "889-486-3768", - "email": "bailey@robotomic.com" - }, - { - "id": 2503, - "guid": "592609e4-041d-4fee-8348-9ab646732f12", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Ogden", - "company": "Rapigrafix", - "phone": "838-441-2143", - "email": "emily@rapigrafix.com" - }, - { - "id": 2504, - "guid": "0cd19076-b7ee-4d8c-849f-97da0274ebcf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Stanley", - "company": "Keytheon", - "phone": "896-443-2164", - "email": "gabriella@keytheon.com" - }, - { - "id": 2505, - "guid": "665f75b0-4957-40bf-a3cc-c83afc246b61", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Turner", - "company": "Unconix", - "phone": "836-493-3882", - "email": "emma@unconix.com" - }, - { - "id": 2506, - "guid": "cf1604e1-8b38-4821-8771-2837214e6889", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Oliver", - "company": "Cryptotegrity", - "phone": "812-600-3602", - "email": "nevaeh@cryptotegrity.com" - }, - { - "id": 2507, - "guid": "4351524e-cf2f-4b68-ad2e-9714ca52544c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Nathan", - "company": "eEyetanic", - "phone": "831-596-3357", - "email": "sophie@eeyetanic.com" - }, - { - "id": 2508, - "guid": "1adfde6f-48f7-4d74-b1de-46fec19371d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Thorndike", - "company": "Titanigraf", - "phone": "890-433-3289", - "email": "aaliyah@titanigraf.com" - }, - { - "id": 2509, - "guid": "65c04f93-20c5-41e9-abd4-9878b8ead6cd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Day", - "company": "Robotomic", - "phone": "857-545-2122", - "email": "gabriella@robotomic.com" - }, - { - "id": 2510, - "guid": "a6f7450a-f320-4dd9-bc9a-fea56064c088", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Cook", - "company": "Dynarama", - "phone": "832-402-2070", - "email": "rachel@dynarama.com" - }, - { - "id": 2511, - "guid": "a9111dc7-b299-4820-8df8-f07b7c093509", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Webster", - "company": "Steganoconiche", - "phone": "885-501-3385", - "email": "khloe@steganoconiche.com" - }, - { - "id": 2512, - "guid": "ade9d569-c62b-483c-910f-2ba8a8778236", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Charlson", - "company": "Hypervaco", - "phone": "833-578-3625", - "email": "sophia@hypervaco.com" - }, - { - "id": 2513, - "guid": "17f360f1-b038-4c73-8db1-7d923c8a8471", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Rachel Wayne", - "company": "Turbomart", - "phone": "897-584-2103", - "email": "rachel@turbomart.com" - }, - { - "id": 2514, - "guid": "3668d4a6-a930-4770-88ac-030331ed264c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Haig", - "company": "RoboAerlogix", - "phone": "809-538-2966", - "email": "sofia@roboaerlogix.com" - }, - { - "id": 2515, - "guid": "542e66bd-7e4c-4407-8eda-9ccc97a36010", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jocelyn Gate", - "company": "Rapigrafix", - "phone": "804-452-2960", - "email": "jocelyn@rapigrafix.com" - }, - { - "id": 2516, - "guid": "395794d6-9fba-4a3a-a9b4-4e187fc3251b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Gardner", - "company": "Fibroserve", - "phone": "831-595-2815", - "email": "payton@fibroserve.com" - }, - { - "id": 2517, - "guid": "63fd7a0f-28f4-4b46-a89b-e6ec5268694c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Vaughan", - "company": "Robotomic", - "phone": "815-525-2086", - "email": "madeline@robotomic.com" - }, - { - "id": 2518, - "guid": "e59e749b-22bc-483d-9516-bba34d500682", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexis Timmons", - "company": "Titanirola", - "phone": "829-465-3613", - "email": "alexis@titanirola.com" - }, - { - "id": 2519, - "guid": "d7f71658-c79d-4c4c-b1c3-8fd1f767003d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Wood", - "company": "Pacwest", - "phone": "834-489-3776", - "email": "kayla@pacwest.com" - }, - { - "id": 2520, - "guid": "98f4d7e4-da6c-4497-b5a0-3cbf661b5a26", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Wallace", - "company": "Infraique", - "phone": "872-420-3476", - "email": "kylie@infraique.com" - }, - { - "id": 2521, - "guid": "7d07de6f-f362-4a7a-8808-e4b0cd05a135", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Chapman", - "company": "Hypervaco", - "phone": "834-515-3536", - "email": "abigail@hypervaco.com" - }, - { - "id": 2522, - "guid": "8b1dbf1f-50e0-4187-b5d3-85ef79db7e84", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Evelyn Smith", - "company": "Truetomic", - "phone": "893-580-3995", - "email": "evelyn@truetomic.com" - }, - { - "id": 2523, - "guid": "7330a153-05d8-4aa7-a18d-8ea00e52c51a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Daniels", - "company": "Skydata", - "phone": "881-593-3252", - "email": "abigail@skydata.com" - }, - { - "id": 2524, - "guid": "caea4a57-7f0f-413e-8064-0662437a9512", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Bush", - "company": "Orthomedia", - "phone": "886-401-2021", - "email": "julia@orthomedia.com" - }, - { - "id": 2525, - "guid": "739cadb4-2847-4592-ac0d-933e94bf8a5d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Angelina Sherlock", - "company": "Westmedia", - "phone": "891-425-2207", - "email": "angelina@westmedia.com" - }, - { - "id": 2526, - "guid": "cc460dfe-7631-4a82-82b2-548317ef0341", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Thorndike", - "company": "Fibrotouch", - "phone": "889-506-2744", - "email": "valeria@fibrotouch.com" - }, - { - "id": 2527, - "guid": "53f82050-f7b5-45f5-8e7a-fce12298b901", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Ford", - "company": "Fibrotouch", - "phone": "830-547-3122", - "email": "jasmine@fibrotouch.com" - }, - { - "id": 2528, - "guid": "bc1a9df3-f14e-418b-8145-bbfc300d0ca2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hannah Gustman", - "company": "Skydata", - "phone": "869-573-3915", - "email": "hannah@skydata.com" - }, - { - "id": 2529, - "guid": "e4582447-c63f-401b-ab95-fd6c6245f032", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bella Nathan", - "company": "Titanirola", - "phone": "896-599-2312", - "email": "bella@titanirola.com" - }, - { - "id": 2530, - "guid": "7cea8673-4f37-48d0-8359-170e2eb306ad", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Galbraith", - "company": "Orthosoft", - "phone": "828-536-3747", - "email": "valeria@orthosoft.com" - }, - { - "id": 2531, - "guid": "c673912c-0814-4868-a902-8b54b3d05395", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Calhoun", - "company": "Quintegrity", - "phone": "817-451-2645", - "email": "camila@quintegrity.com" - }, - { - "id": 2532, - "guid": "328aaa90-e87f-48f6-a645-9b8d20aeceb6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Gilson", - "company": "Netsystems", - "phone": "827-527-3080", - "email": "valeria@netsystems.com" - }, - { - "id": 2533, - "guid": "87126585-648b-4a46-bb24-2adc8ee93504", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Brown", - "company": "Jamconik", - "phone": "868-547-2111", - "email": "kimberly@jamconik.com" - }, - { - "id": 2534, - "guid": "bc7f83f9-16a2-4c58-a398-56797c25a9cf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Abigail Wainwright", - "company": "Multitiqua", - "phone": "897-491-3536", - "email": "abigail@multitiqua.com" - }, - { - "id": 2535, - "guid": "5ddbf749-a9e3-481c-93b7-83d8d0d32215", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Carroll", - "company": "Qualserve", - "phone": "804-491-2690", - "email": "payton@qualserve.com" - }, - { - "id": 2536, - "guid": "d22fc991-115e-4131-bd51-617dda4fdcf0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Hancock", - "company": "Systheon", - "phone": "888-568-2106", - "email": "paige@systheon.com" - }, - { - "id": 2537, - "guid": "9b6030a8-795a-4981-b795-034d14a77102", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Neal", - "company": "Inridium", - "phone": "874-538-2022", - "email": "addison@inridium.com" - }, - { - "id": 2538, - "guid": "94de97c0-e4fb-4d6f-ad9b-195d1c477cd3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Vance", - "company": "Allphysiche", - "phone": "804-536-3707", - "email": "alexis@allphysiche.com" - }, - { - "id": 2539, - "guid": "46fdaceb-093a-4295-ac37-43fc91656d11", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Gill", - "company": "Systheon", - "phone": "852-559-2178", - "email": "maria@systheon.com" - }, - { - "id": 2540, - "guid": "d6fcb301-fbf8-4caf-a384-579f79c31875", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabriella Hamphrey", - "company": "Anaframe", - "phone": "830-462-2705", - "email": "gabriella@anaframe.com" - }, - { - "id": 2541, - "guid": "64d30d43-7084-4535-8a9b-cb73339e4110", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Nelson", - "company": "eSteganoergy", - "phone": "814-515-2954", - "email": "hannah@esteganoergy.com" - }, - { - "id": 2542, - "guid": "6aec2f46-f0ef-4dbd-9773-5f0017313fde", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Wayne", - "company": "Mescatron", - "phone": "846-489-3240", - "email": "katherine@mescatron.com" - }, - { - "id": 2543, - "guid": "1af776d7-2a38-483d-b9ab-c96dbf34fbe7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Calhoun", - "company": "Steganoconiche", - "phone": "875-585-3308", - "email": "faith@steganoconiche.com" - }, - { - "id": 2544, - "guid": "a08b888d-5e92-4948-8bd0-71661d09becf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Sheldon", - "company": "Thermotomic", - "phone": "888-531-2611", - "email": "katherine@thermotomic.com" - }, - { - "id": 2545, - "guid": "e165e613-a532-4732-a57d-d4adff1f7f51", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Fisher", - "company": "Indisco", - "phone": "887-598-2535", - "email": "genesis@indisco.com" - }, - { - "id": 2546, - "guid": "2da4b9d7-1a23-4eb5-8747-c694307b23c8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Miers", - "company": "Titanirola", - "phone": "857-401-3661", - "email": "claire@titanirola.com" - }, - { - "id": 2547, - "guid": "ef905606-6ad1-47ba-a5fb-7fccf4fad4aa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Waller", - "company": "Cryptotegrity", - "phone": "885-571-3678", - "email": "isabella@cryptotegrity.com" - }, - { - "id": 2548, - "guid": "d59dc0a5-de1e-46ad-8bd4-65175af4995d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Walkman", - "company": "iSkyvaco", - "phone": "885-522-2424", - "email": "sophia@iskyvaco.com" - }, - { - "id": 2549, - "guid": "c29b9d5a-f700-4818-8dbd-ee7bfc72c40d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Cook", - "company": "Interliant", - "phone": "896-486-2837", - "email": "madeline@interliant.com" - }, - { - "id": 2550, - "guid": "4fc1d6c3-cb4e-4fe5-a9d8-56d46e21e6ae", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Milton", - "company": "Hypervaco", - "phone": "808-516-3214", - "email": "kaitlyn@hypervaco.com" - }, - { - "id": 2551, - "guid": "6331d2f3-998e-4032-85e3-6a1961c63d5a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Angelina Oswald", - "company": "Skydata", - "phone": "838-563-2767", - "email": "angelina@skydata.com" - }, - { - "id": 2552, - "guid": "1af08bcd-03cc-4f5a-8d1d-77eb03f8d2b2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Waller", - "company": "Inridium", - "phone": "830-545-2885", - "email": "destiny@inridium.com" - }, - { - "id": 2553, - "guid": "a7ced112-f85e-467a-b532-1ed19419bfe4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Neal", - "company": "iMedconik", - "phone": "842-486-2629", - "email": "nevaeh@imedconik.com" - }, - { - "id": 2554, - "guid": "be0c4a92-3318-47b4-838a-1d86d029cc27", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Webster", - "company": "Robotemplate", - "phone": "825-580-2704", - "email": "hannah@robotemplate.com" - }, - { - "id": 2555, - "guid": "2160190b-f614-45f8-953e-6729b50c3308", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Hancock", - "company": "Robotemplate", - "phone": "802-512-2525", - "email": "vanessa@robotemplate.com" - }, - { - "id": 2556, - "guid": "b1652c0a-cc14-47b9-9cc8-d94f8bfb9d7a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Savannah Ogden", - "company": "Proline", - "phone": "803-574-3981", - "email": "savannah@proline.com" - }, - { - "id": 2557, - "guid": "720ad1be-d691-46e3-8824-fb2f635cc445", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mya Neal", - "company": "Mescatron", - "phone": "804-442-2922", - "email": "mya@mescatron.com" - }, - { - "id": 2558, - "guid": "70c01ce6-9463-4e36-b1c5-24cc36c54135", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Vance", - "company": "Aprama", - "phone": "816-480-2068", - "email": "gabrielle@aprama.com" - }, - { - "id": 2559, - "guid": "6e7c60e5-174a-499d-8bff-45b2b13a98b9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Wallace", - "company": "OpKeycomm", - "phone": "818-557-2582", - "email": "mia@opkeycomm.com" - }, - { - "id": 2560, - "guid": "58421683-f880-4b37-81c6-ebff776c58c1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Chapman", - "company": "Transtouch", - "phone": "867-599-2790", - "email": "jocelyn@transtouch.com" - }, - { - "id": 2561, - "guid": "99debcc6-72e2-4218-956a-c60711610c8e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Hodges", - "company": "Truetomic", - "phone": "850-490-3864", - "email": "genesis@truetomic.com" - }, - { - "id": 2562, - "guid": "d187a8de-1b36-4518-80b6-25004e8f16e6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Haig", - "company": "Gigaura", - "phone": "887-542-3463", - "email": "jessica@gigaura.com" - }, - { - "id": 2563, - "guid": "41f21ec5-3b2d-4f88-a87b-4bee31596203", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Abramson", - "company": "Genland", - "phone": "811-527-3245", - "email": "maria@genland.com" - }, - { - "id": 2564, - "guid": "5e511e76-75f9-41d1-a647-0ac73784eee1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Hailey", - "company": "Orthomedia", - "phone": "829-514-3640", - "email": "leah@orthomedia.com" - }, - { - "id": 2565, - "guid": "7c91dc8f-e353-4354-8adc-03c2df6be835", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Davidson", - "company": "Navivacs", - "phone": "889-484-2505", - "email": "avery@navivacs.com" - }, - { - "id": 2566, - "guid": "3ca48f5d-7eb1-41c3-a3e6-665fc0f8f74e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Brown", - "company": "OpKeycomm", - "phone": "815-599-3205", - "email": "faith@opkeycomm.com" - }, - { - "id": 2567, - "guid": "2bd9b799-22f6-4f6a-86f8-ed92a9ba0888", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Ogden", - "company": "Vencom", - "phone": "861-510-2818", - "email": "caroline@vencom.com" - }, - { - "id": 2568, - "guid": "c7569951-4d9d-4ee6-8565-5c1738c3e6f9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Gilbert", - "company": "OpKeycomm", - "phone": "800-431-3493", - "email": "destiny@opkeycomm.com" - }, - { - "id": 2569, - "guid": "f564163b-69e1-4506-81d7-256760fcf5d7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Michaelson", - "company": "iMedconik", - "phone": "852-510-3911", - "email": "jessica@imedconik.com" - }, - { - "id": 2570, - "guid": "71821a18-18cd-4bf1-bd97-92c5753fe993", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Smith", - "company": "Qualserve", - "phone": "817-411-2988", - "email": "victoria@qualserve.com" - }, - { - "id": 2571, - "guid": "26725287-7405-4398-9118-824ab57e55a4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Gardner", - "company": "Vencom", - "phone": "871-435-3647", - "email": "hannah@vencom.com" - }, - { - "id": 2572, - "guid": "6e9358df-11fa-4228-8378-fd3cdae9196f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Webster", - "company": "Indisco", - "phone": "801-423-3335", - "email": "caroline@indisco.com" - }, - { - "id": 2573, - "guid": "5770974d-67de-42d9-b9f5-b8e24ea4b2df", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Chandter", - "company": "Westgate", - "phone": "873-545-3876", - "email": "caroline@westgate.com" - }, - { - "id": 2574, - "guid": "9198d083-bbd4-46e1-aa27-5d658779b89b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Adamson", - "company": "US Omnigraphik", - "phone": "883-552-2373", - "email": "rachel@us omnigraphik.com" - }, - { - "id": 2575, - "guid": "4ce04835-9e66-40a8-9b10-af28ef52609e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Abramson", - "company": "Unologic", - "phone": "864-457-2269", - "email": "alyssa@unologic.com" - }, - { - "id": 2576, - "guid": "3d107ae5-0e5e-41b9-9d78-b33705fe87df", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Gilmore", - "company": "Genland", - "phone": "823-537-2977", - "email": "peyton@genland.com" - }, - { - "id": 2577, - "guid": "ee738ecd-0119-4ecf-8ffe-21e6261ca87f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Wainwright", - "company": "Pericenta", - "phone": "846-587-3272", - "email": "arianna@pericenta.com" - }, - { - "id": 2578, - "guid": "9040f92b-6b23-4905-a550-d3d2f743b677", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Gibbs", - "company": "Syssoft", - "phone": "804-579-2510", - "email": "alexa@syssoft.com" - }, - { - "id": 2579, - "guid": "f6a229b9-61b5-466d-8dda-bb21cdf233f7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Oliver", - "company": "Gigaura", - "phone": "802-589-3602", - "email": "layla@gigaura.com" - }, - { - "id": 2580, - "guid": "f0716d94-6843-4e7b-a428-34803c6d3be8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Neal", - "company": "Dynarama", - "phone": "898-448-2236", - "email": "kimberly@dynarama.com" - }, - { - "id": 2581, - "guid": "425a7784-e07b-4d08-be0c-b06452de4417", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Brickman", - "company": "Rapigrafix", - "phone": "838-435-3050", - "email": "brooke@rapigrafix.com" - }, - { - "id": 2582, - "guid": "0a175b62-d08f-43c4-bce2-67130adcf378", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Goodman", - "company": "Compuamerica", - "phone": "873-488-2328", - "email": "brooke@compuamerica.com" - }, - { - "id": 2583, - "guid": "d2d7c90d-5124-45b3-9c3d-71d9ef26b9c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooklyn Clapton", - "company": "Dynarama", - "phone": "842-421-3700", - "email": "brooklyn@dynarama.com" - }, - { - "id": 2584, - "guid": "2c652f7e-9a28-4b8e-8fd2-e03a2cc4f6c0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Morgan Haig", - "company": "Compuamerica", - "phone": "839-546-3009", - "email": "morgan@compuamerica.com" - }, - { - "id": 2585, - "guid": "9c271e6b-768a-4210-863a-550ff021d486", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Winter", - "company": "Proline", - "phone": "856-533-3316", - "email": "camila@proline.com" - }, - { - "id": 2586, - "guid": "4c3f1b8e-f8ce-4977-a968-0f856a320093", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Thomson", - "company": "Jamconik", - "phone": "802-549-3985", - "email": "hannah@jamconik.com" - }, - { - "id": 2587, - "guid": "2d2f088b-1e49-47a1-b779-dc63a006a267", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Milton", - "company": "Pericenta", - "phone": "856-489-2973", - "email": "bailey@pericenta.com" - }, - { - "id": 2588, - "guid": "9fba828d-ce02-4ba2-a75d-d6103535c52e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Sherlock", - "company": "Teraserv", - "phone": "802-510-2497", - "email": "brianna@teraserv.com" - }, - { - "id": 2589, - "guid": "6755f4d8-8a86-48ce-9904-f8b81ce2f4b3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Morrison", - "company": "Rapigrafix", - "phone": "817-438-3866", - "email": "amelia@rapigrafix.com" - }, - { - "id": 2590, - "guid": "3c80081d-f8a5-4189-a008-420858e49254", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Stanley", - "company": "Pericenta", - "phone": "888-419-3513", - "email": "avery@pericenta.com" - }, - { - "id": 2591, - "guid": "b522a0a8-c96d-46df-9d17-55a36e272057", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Charlson", - "company": "Teknoplexon", - "phone": "897-423-3912", - "email": "kylie@teknoplexon.com" - }, - { - "id": 2592, - "guid": "c8285785-9972-4c65-8688-d02719b3e28e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Cook", - "company": "Robotemplate", - "phone": "839-451-2030", - "email": "emma@robotemplate.com" - }, - { - "id": 2593, - "guid": "59e59bcf-8a97-4578-a55a-43b47476a18a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Milton", - "company": "SysUSA", - "phone": "806-412-3080", - "email": "aubrey@sysusa.com" - }, - { - "id": 2594, - "guid": "18fb05c5-57cb-44fa-8d64-e5b04499f361", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaylee Creighton", - "company": "Celgra", - "phone": "877-569-3961", - "email": "kaylee@celgra.com" - }, - { - "id": 2595, - "guid": "d584ee52-5faa-4a80-997b-2f5af9046684", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Nelson", - "company": "Sontopia", - "phone": "807-559-2046", - "email": "lily@sontopia.com" - }, - { - "id": 2596, - "guid": "d6045f0c-00c7-4768-8221-fb8fc7b4f1db", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Nelson", - "company": "Inridium", - "phone": "891-457-3190", - "email": "bailey@inridium.com" - }, - { - "id": 2597, - "guid": "7274856d-22ec-4540-ae66-acf8d1767f7a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Hoggarth", - "company": "US Omnigraphik", - "phone": "829-406-2215", - "email": "sophie@us omnigraphik.com" - }, - { - "id": 2598, - "guid": "fff35c90-6a58-4271-b65b-d565afbd15e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Campbell", - "company": "Teratopia", - "phone": "866-585-2905", - "email": "ava@teratopia.com" - }, - { - "id": 2599, - "guid": "4a488265-3152-4e15-9dfd-2aa75ce26b94", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Carter", - "company": "Conotomics", - "phone": "872-464-2435", - "email": "kaitlyn@conotomics.com" - }, - { - "id": 2600, - "guid": "59922a7b-35f2-4f67-bd12-a4c6a3bd7924", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Davidson", - "company": "Indisco", - "phone": "808-447-3688", - "email": "jocelyn@indisco.com" - }, - { - "id": 2601, - "guid": "45ffcd54-4d38-4580-b305-0c03ea01e600", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Carrington", - "company": "Interliant", - "phone": "854-582-3476", - "email": "faith@interliant.com" - }, - { - "id": 2602, - "guid": "33a3721d-061b-4bac-a2c3-73a3132b7703", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Oliver", - "company": "US Infratouch", - "phone": "858-596-3535", - "email": "angelina@us infratouch.com" - }, - { - "id": 2603, - "guid": "d059d0fd-211f-4265-a5c7-97604afdf861", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Brickman", - "company": "Indisco", - "phone": "854-522-3780", - "email": "madison@indisco.com" - }, - { - "id": 2604, - "guid": "5fcef885-68b3-4578-85ba-58075ccb25ef", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Cook", - "company": "Openserve", - "phone": "896-412-3903", - "email": "genesis@openserve.com" - }, - { - "id": 2605, - "guid": "1d6e0026-a8c5-4493-b3c7-1e3f6923362d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emily Hawkins", - "company": "Netsystems", - "phone": "873-410-3541", - "email": "emily@netsystems.com" - }, - { - "id": 2606, - "guid": "34ed7535-065c-4d57-8d84-a6daf78ce1ef", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Hodges", - "company": "Fibrotopia", - "phone": "846-411-3358", - "email": "samantha@fibrotopia.com" - }, - { - "id": 2607, - "guid": "5d28ee31-167f-4509-94cd-8b7b2aa3b43f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Gardner", - "company": "Orthomedia", - "phone": "842-543-2622", - "email": "isabelle@orthomedia.com" - }, - { - "id": 2608, - "guid": "156a8f8a-bc61-4142-bea5-4a9789fe0659", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Oswald", - "company": "Polytheon", - "phone": "896-551-3301", - "email": "layla@polytheon.com" - }, - { - "id": 2609, - "guid": "5a3ab7f7-21a4-492e-ba9c-572c1d18a96d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Hawkins", - "company": "Enlogia", - "phone": "853-439-2429", - "email": "isabelle@enlogia.com" - }, - { - "id": 2610, - "guid": "278d312c-6a95-44fb-9c79-49c55b5b39ba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Bush", - "company": "Polytheon", - "phone": "872-595-3094", - "email": "aubrey@polytheon.com" - }, - { - "id": 2611, - "guid": "f8670c9c-c7f0-40fd-8b41-0bddfe75c523", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Sherlock", - "company": "Anaframe", - "phone": "802-524-2586", - "email": "amelia@anaframe.com" - }, - { - "id": 2612, - "guid": "07bfbe01-a213-4b25-9989-540a189e6018", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Walkman", - "company": "Robotomic", - "phone": "855-442-3646", - "email": "natalie@robotomic.com" - }, - { - "id": 2613, - "guid": "14fc5668-a9a3-4038-b674-268e7966d70e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Carter", - "company": "Systheon", - "phone": "828-481-2526", - "email": "olivia@systheon.com" - }, - { - "id": 2614, - "guid": "b66ceadc-6314-4a2c-9b74-501da41ad0c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Paige WifKinson", - "company": "InfoAirway", - "phone": "833-514-2096", - "email": "paige@infoairway.com" - }, - { - "id": 2615, - "guid": "290da717-e3d1-4628-b97b-aa186a6b991b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Wainwright", - "company": "iMedconik", - "phone": "898-567-2755", - "email": "anna@imedconik.com" - }, - { - "id": 2616, - "guid": "72a29cc5-3921-45e2-a8a7-6214aaa1d0b8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Nash", - "company": "Airdyne", - "phone": "863-439-2077", - "email": "mariah@airdyne.com" - }, - { - "id": 2617, - "guid": "f95e3fab-2686-4b74-8703-e9f0bf2c3d4b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Hodges", - "company": "Videobanc", - "phone": "841-405-3290", - "email": "evelyn@videobanc.com" - }, - { - "id": 2618, - "guid": "93036dfb-2bf1-4bca-a17f-46b889dc4dd7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Warren", - "company": "Celgra", - "phone": "825-540-2724", - "email": "arianna@celgra.com" - }, - { - "id": 2619, - "guid": "f7bf2696-4a8e-4707-a201-c0678d341b28", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Crossman", - "company": "Jamrola", - "phone": "889-459-3812", - "email": "hailey@jamrola.com" - }, - { - "id": 2620, - "guid": "892a7b12-c1e7-45f5-b835-fa0724a8d5cb", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophie Hodges", - "company": "Pacwest", - "phone": "829-490-2524", - "email": "sophie@pacwest.com" - }, - { - "id": 2621, - "guid": "d2c085ea-c9ef-49b0-8e84-cbd77a21f5f4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Youmans", - "company": "Netseco", - "phone": "823-430-3908", - "email": "valeria@netseco.com" - }, - { - "id": 2622, - "guid": "7b8e076f-2ae3-494d-b7fc-035ac4d26447", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Sherlock", - "company": "Westtomik", - "phone": "839-489-2787", - "email": "natalie@westtomik.com" - }, - { - "id": 2623, - "guid": "d7938c73-70fe-49db-81d7-e0112efe5b90", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Wayne", - "company": "eSteganoergy", - "phone": "817-423-2765", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 2624, - "guid": "d047d0d5-f290-403f-98f1-e7c2fbf7ffc1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Adamson", - "company": "Fibrotopia", - "phone": "814-474-2486", - "email": "kaitlyn@fibrotopia.com" - }, - { - "id": 2625, - "guid": "00d60494-d7d5-433f-a357-0418b72170aa", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Milton", - "company": "Steganoconiche", - "phone": "836-582-2448", - "email": "kayla@steganoconiche.com" - }, - { - "id": 2626, - "guid": "1ad5c553-a5c1-476f-9868-343da71888f9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Crossman", - "company": "Pacwest", - "phone": "874-519-2379", - "email": "genesis@pacwest.com" - }, - { - "id": 2627, - "guid": "56157575-30fb-4441-a451-52572d1fb16d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Cramer", - "company": "Celgra", - "phone": "804-556-2052", - "email": "makayla@celgra.com" - }, - { - "id": 2628, - "guid": "b2f87b2b-8d64-4d47-9d1f-262f0b5c1aed", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily WifKinson", - "company": "Orthosoft", - "phone": "884-527-3944", - "email": "emily@orthosoft.com" - }, - { - "id": 2629, - "guid": "e8bd9b99-0acc-4e0a-9a47-b52b19502605", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Fulton", - "company": "Videobanc", - "phone": "824-434-2420", - "email": "mackenzie@videobanc.com" - }, - { - "id": 2630, - "guid": "a28347a6-0a56-4bbb-b336-b3b51ff030f1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Gardner", - "company": "Qualserve", - "phone": "884-476-3270", - "email": "aubrey@qualserve.com" - }, - { - "id": 2631, - "guid": "861a6d06-afb1-41a5-85c8-3d1d03d1636c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Fulton", - "company": "Titanigraf", - "phone": "822-416-2889", - "email": "zoey@titanigraf.com" - }, - { - "id": 2632, - "guid": "9523118b-f6ec-4f4f-afe2-2fab74a6ac88", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Riley Oliver", - "company": "Robocomm", - "phone": "892-576-2884", - "email": "riley@robocomm.com" - }, - { - "id": 2633, - "guid": "bf292b85-8c98-465f-9c9d-e73b19564d75", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Samantha Timmons", - "company": "Teratopia", - "phone": "816-580-2704", - "email": "samantha@teratopia.com" - }, - { - "id": 2634, - "guid": "674ed65d-5e67-4868-8b36-a899241385e6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Molligan", - "company": "Cryptotegrity", - "phone": "870-456-2944", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 2635, - "guid": "aace9160-9524-4e17-89ee-68d0bd2c14c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Wayne", - "company": "Cryptotegrity", - "phone": "865-549-2863", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 2636, - "guid": "40c51cc0-d2d4-4c38-9c76-e5a55bb7d5fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Wainwright", - "company": "Netseco", - "phone": "875-470-3675", - "email": "olivia@netseco.com" - }, - { - "id": 2637, - "guid": "6d4a17a0-6b42-4206-bf1e-ba9fdd4d92ea", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Vaughan", - "company": "Netseco", - "phone": "868-441-2324", - "email": "kylie@netseco.com" - }, - { - "id": 2638, - "guid": "807f7911-b06e-4921-adf3-86ff378fa8d9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Wesley", - "company": "eEyetanic", - "phone": "887-566-3812", - "email": "bailey@eeyetanic.com" - }, - { - "id": 2639, - "guid": "6893cf4c-cded-4457-b565-1bc178e51b12", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Davidson", - "company": "Tekcar", - "phone": "813-477-2966", - "email": "gabrielle@tekcar.com" - }, - { - "id": 2640, - "guid": "01d357d2-7262-40d4-bbad-305941ea71be", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Sheldon", - "company": "Steganoconiche", - "phone": "883-547-3701", - "email": "layla@steganoconiche.com" - }, - { - "id": 2641, - "guid": "bf955a21-7f3e-4a98-9c9d-b5babc3dd430", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Gilbert", - "company": "Rapigrafix", - "phone": "859-517-2204", - "email": "kimberly@rapigrafix.com" - }, - { - "id": 2642, - "guid": "a70087b8-6b56-4aad-8bb4-1d6c368c1506", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Creighton", - "company": "Xeicon", - "phone": "837-458-2103", - "email": "ashley@xeicon.com" - }, - { - "id": 2643, - "guid": "222d8fa6-aba9-4d2d-a171-9bc85ecc8830", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Chandter", - "company": "Anagraph", - "phone": "863-419-2098", - "email": "makayla@anagraph.com" - }, - { - "id": 2644, - "guid": "a8760a81-672b-4f15-a937-d5afb31b118f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexa Youmans", - "company": "Keytheon", - "phone": "851-408-2207", - "email": "alexa@keytheon.com" - }, - { - "id": 2645, - "guid": "08054aec-e453-4329-8da5-0dc97112ea46", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Waller", - "company": "Interliant", - "phone": "883-496-2780", - "email": "natalie@interliant.com" - }, - { - "id": 2646, - "guid": "66ddee37-cdce-4664-bc00-0e36140e731e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Warren", - "company": "Tekcar", - "phone": "896-468-3648", - "email": "camila@tekcar.com" - }, - { - "id": 2647, - "guid": "6da02aea-3ecb-4afd-9f86-fe3d1e6ae9e0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Carey", - "company": "Netsystems", - "phone": "831-511-3668", - "email": "khloe@netsystems.com" - }, - { - "id": 2648, - "guid": "3826bf5d-591f-447c-9a32-cd7ae2b4d40f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie WifKinson", - "company": "Proline", - "phone": "821-518-2833", - "email": "sophie@proline.com" - }, - { - "id": 2649, - "guid": "e8c4cc7c-656a-433b-a438-2f1171e390d3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Gilbert", - "company": "Pericenta", - "phone": "877-518-2390", - "email": "sarah@pericenta.com" - }, - { - "id": 2650, - "guid": "21832d1a-fb44-4d1f-9059-3a337a05475a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Carey", - "company": "Entcast", - "phone": "838-501-2118", - "email": "claire@entcast.com" - }, - { - "id": 2651, - "guid": "94555d2f-c207-4c91-b53a-e05d498c46f4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Young", - "company": "Keytheon", - "phone": "882-500-2022", - "email": "alyssa@keytheon.com" - }, - { - "id": 2652, - "guid": "4aa31776-b0c1-4c2f-a3ae-17599c810148", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Milton", - "company": "Teratopia", - "phone": "874-583-3334", - "email": "emily@teratopia.com" - }, - { - "id": 2653, - "guid": "d5c616b3-414a-4223-9613-791f10640832", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Gilmore", - "company": "Teknoplexon", - "phone": "890-540-2393", - "email": "nevaeh@teknoplexon.com" - }, - { - "id": 2654, - "guid": "9c3d2622-22ed-4145-80a1-5c4e0e4e6d69", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Carter", - "company": "eSteganoergy", - "phone": "890-579-3731", - "email": "brooke@esteganoergy.com" - }, - { - "id": 2655, - "guid": "4258952f-fca9-40b4-ad3a-3be40502c1af", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Ogden", - "company": "Indisco", - "phone": "891-426-2235", - "email": "madelyn@indisco.com" - }, - { - "id": 2656, - "guid": "9f814873-fb25-4b52-b484-942e38418111", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Neal", - "company": "Hypervaco", - "phone": "807-408-2429", - "email": "bella@hypervaco.com" - }, - { - "id": 2657, - "guid": "fa7a52cc-5c04-44d7-8b48-c0f262577244", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Watson", - "company": "Indisco", - "phone": "890-426-2838", - "email": "kaitlyn@indisco.com" - }, - { - "id": 2658, - "guid": "b8611947-53ff-4add-8759-b552ba5c2c3c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Thomson", - "company": "Titanigraf", - "phone": "862-484-2829", - "email": "anna@titanigraf.com" - }, - { - "id": 2659, - "guid": "cea2f1bc-5482-4539-8694-72ddb397c2a5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Charlson", - "company": "Netseco", - "phone": "807-579-2260", - "email": "alexa@netseco.com" - }, - { - "id": 2660, - "guid": "0d3cf692-29c5-4bb9-9d81-9bbe362db440", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Waller", - "company": "Robotomic", - "phone": "813-439-3743", - "email": "kayla@robotomic.com" - }, - { - "id": 2661, - "guid": "d7ec4df0-0b38-45cb-b376-d02fea1cf731", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Creighton", - "company": "Polytheon", - "phone": "845-572-3396", - "email": "riley@polytheon.com" - }, - { - "id": 2662, - "guid": "09c8ffd7-94b8-4aec-9994-7fe73649bae4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Payton Oliver", - "company": "Qualserve", - "phone": "822-451-2607", - "email": "payton@qualserve.com" - }, - { - "id": 2663, - "guid": "ad944af2-1ba6-4e45-af23-7437fbf5249c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Murphy", - "company": "Proline", - "phone": "808-533-2089", - "email": "bella@proline.com" - }, - { - "id": 2664, - "guid": "dddc34ea-6f65-4cd1-8c6b-a712f8539ca3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoe Wayne", - "company": "Truetomic", - "phone": "882-522-3053", - "email": "zoe@truetomic.com" - }, - { - "id": 2665, - "guid": "1b4938a4-ce07-4ceb-8869-462a43a28889", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Chapman", - "company": "OpKeycomm", - "phone": "874-587-3871", - "email": "morgan@opkeycomm.com" - }, - { - "id": 2666, - "guid": "68e73fa0-1973-46eb-b6c6-5537b795fb36", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Wesley", - "company": "Gigaura", - "phone": "889-510-2862", - "email": "emma@gigaura.com" - }, - { - "id": 2667, - "guid": "c4ea0560-4ecf-4b8c-a383-61237e502591", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Vance", - "company": "Technogra", - "phone": "880-529-2220", - "email": "destiny@technogra.com" - }, - { - "id": 2668, - "guid": "22929a06-a05e-42e8-904b-11e7871f4683", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Webster", - "company": "Anaframe", - "phone": "831-422-3091", - "email": "maria@anaframe.com" - }, - { - "id": 2669, - "guid": "27bdaacf-b519-4454-bafe-c2193d30ae4b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabelle Stanley", - "company": "Robocomm", - "phone": "857-409-2358", - "email": "isabelle@robocomm.com" - }, - { - "id": 2670, - "guid": "7c8019fd-df70-4168-826d-0f685003acf1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Vance", - "company": "Dynarama", - "phone": "851-413-3888", - "email": "katherine@dynarama.com" - }, - { - "id": 2671, - "guid": "3c94cb39-2e4b-4e30-9738-f46f2f0cd833", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Miller", - "company": "Polytheon", - "phone": "831-416-2886", - "email": "autumn@polytheon.com" - }, - { - "id": 2672, - "guid": "b33703ce-452a-474c-845a-bf4a4371521e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Carroll", - "company": "Syssoft", - "phone": "838-412-3451", - "email": "sofia@syssoft.com" - }, - { - "id": 2673, - "guid": "ced3f6cb-a942-4775-99eb-0974ccc3ac10", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Neal", - "company": "US Infratouch", - "phone": "812-515-3179", - "email": "alexandra@us infratouch.com" - }, - { - "id": 2674, - "guid": "f8bb96d0-4982-4156-aa6e-9295f07f5d70", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooke Otis", - "company": "eEyetanic", - "phone": "864-550-3676", - "email": "brooke@eeyetanic.com" - }, - { - "id": 2675, - "guid": "eb87b954-edaa-4eb0-80f1-93a431af59e9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Charlson", - "company": "Superscope", - "phone": "860-581-2247", - "email": "zoey@superscope.com" - }, - { - "id": 2676, - "guid": "26d6f44d-a575-4b43-b896-e8be2c9fa9ee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Wallace", - "company": "Truegate", - "phone": "837-539-3478", - "email": "eva@truegate.com" - }, - { - "id": 2677, - "guid": "51d5262a-e008-4c67-b226-6aead6fccde0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Morgan Cramer", - "company": "Cryptotegrity", - "phone": "898-416-2490", - "email": "morgan@cryptotegrity.com" - }, - { - "id": 2678, - "guid": "2994fb3b-8070-4c68-83bf-af8917280e08", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Hoggarth", - "company": "Allnet", - "phone": "890-432-3550", - "email": "mia@allnet.com" - }, - { - "id": 2679, - "guid": "66e6e4e8-2a23-43c8-8556-dbf03712f031", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Miller", - "company": "Robotomic", - "phone": "866-407-2288", - "email": "brooklyn@robotomic.com" - }, - { - "id": 2680, - "guid": "a5d735c2-5732-4dea-b2e4-80681bb07de8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Hoggarth", - "company": "Netseco", - "phone": "887-583-3653", - "email": "jessica@netseco.com" - }, - { - "id": 2681, - "guid": "d9bf5548-a008-4e18-91b4-008e3be02a26", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kylie Hodges", - "company": "Pericenta", - "phone": "887-576-3088", - "email": "kylie@pericenta.com" - }, - { - "id": 2682, - "guid": "7e527efb-6dd0-4d37-b5f1-eecb23557c6b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Thorndike", - "company": "Inridium", - "phone": "896-500-3604", - "email": "samantha@inridium.com" - }, - { - "id": 2683, - "guid": "c63b064f-6427-409a-a1b4-f8e0be3edd97", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Vaughan", - "company": "Steganoconiche", - "phone": "885-566-2461", - "email": "riley@steganoconiche.com" - }, - { - "id": 2684, - "guid": "dcf896b1-38a6-4371-83f1-40b8cccae34b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Hamphrey", - "company": "Raylog", - "phone": "848-586-2557", - "email": "julia@raylog.com" - }, - { - "id": 2685, - "guid": "0d2967d5-2526-48a0-a545-c87979581602", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Ford", - "company": "SysUSA", - "phone": "809-407-3945", - "email": "julia@sysusa.com" - }, - { - "id": 2686, - "guid": "3bab2d94-7be3-4243-9904-902ee4bbef00", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Hoggarth", - "company": "Jamconik", - "phone": "823-589-2920", - "email": "katherine@jamconik.com" - }, - { - "id": 2687, - "guid": "a889c140-2a57-4825-ba89-90727831cee3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Brickman", - "company": "Genland", - "phone": "871-434-2370", - "email": "makayla@genland.com" - }, - { - "id": 2688, - "guid": "41be4d36-b61d-4fef-b535-5cfa03cb624b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Oswald", - "company": "Textiqua", - "phone": "844-411-3831", - "email": "mya@textiqua.com" - }, - { - "id": 2689, - "guid": "e28f03f4-7e1d-4180-b91f-cf1612ab0480", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Thornton", - "company": "iSkyvaco", - "phone": "865-473-2239", - "email": "maya@iskyvaco.com" - }, - { - "id": 2690, - "guid": "a9e8f399-06c7-4222-94dd-d1ced519587e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Carrington", - "company": "Mescatron", - "phone": "859-471-2905", - "email": "camila@mescatron.com" - }, - { - "id": 2691, - "guid": "33ee96c8-1ac0-4385-a1fe-b320ad33ecfd", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Vaughan", - "company": "Fibrotopia", - "phone": "841-552-3565", - "email": "emma@fibrotopia.com" - }, - { - "id": 2692, - "guid": "310c4275-9a9a-4ce6-bebc-52eb1f56bf95", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Higgins", - "company": "Celgra", - "phone": "830-520-3743", - "email": "leah@celgra.com" - }, - { - "id": 2693, - "guid": "85f888a8-4c97-4e8d-afed-a5de5d9f6295", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Carter", - "company": "Venconix", - "phone": "857-401-3860", - "email": "ariana@venconix.com" - }, - { - "id": 2694, - "guid": "ebff7c68-20b2-463b-83a3-ad65e14fb29a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Milton", - "company": "Superscope", - "phone": "830-486-3893", - "email": "sophie@superscope.com" - }, - { - "id": 2695, - "guid": "cc578052-8816-46b7-ae85-5cf033c1a16b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Gilson", - "company": "Anagraph", - "phone": "890-572-2067", - "email": "paige@anagraph.com" - }, - { - "id": 2696, - "guid": "3cd6732e-2503-4ece-948f-f86ca6331ef1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alyssa Wallace", - "company": "Inridium", - "phone": "894-587-3386", - "email": "alyssa@inridium.com" - }, - { - "id": 2697, - "guid": "13e756c3-c2fd-47e0-b3f0-4ee8e8b14afd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Hawkins", - "company": "Xeicon", - "phone": "819-426-3558", - "email": "valeria@xeicon.com" - }, - { - "id": 2698, - "guid": "545c3493-4787-4ad8-a597-c8e9565778a3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Elizabeth Miln", - "company": "Videobanc", - "phone": "831-533-3572", - "email": "elizabeth@videobanc.com" - }, - { - "id": 2699, - "guid": "64fb2ee2-41ff-4ecc-ae91-fe726c70508a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Gardner", - "company": "Systheon", - "phone": "848-540-2317", - "email": "madelyn@systheon.com" - }, - { - "id": 2700, - "guid": "1bf871bf-797d-4f5e-b16a-362ca5fed364", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Gill", - "company": "Conrama", - "phone": "847-463-3143", - "email": "hailey@conrama.com" - }, - { - "id": 2701, - "guid": "a4c274e5-e3a3-4d62-ad94-cbcc68d89070", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Gilson", - "company": "SysUSA", - "phone": "848-512-2185", - "email": "victoria@sysusa.com" - }, - { - "id": 2702, - "guid": "1c1d8c08-9b6a-49c6-ae53-ccc8b21fad25", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Neal", - "company": "Cryptotemplate", - "phone": "823-459-2110", - "email": "emma@cryptotemplate.com" - }, - { - "id": 2703, - "guid": "f31fe087-6c68-4a4b-8a4f-c5797981020e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Vaughan", - "company": "Navivacs", - "phone": "870-424-3255", - "email": "sydney@navivacs.com" - }, - { - "id": 2704, - "guid": "7bcde154-0118-40dc-89d9-658d3f4a5350", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Brickman", - "company": "iMedconik", - "phone": "890-515-3234", - "email": "taylor@imedconik.com" - }, - { - "id": 2705, - "guid": "6e4b5fd5-6699-44a7-9679-422870358f5b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Molligan", - "company": "Unconix", - "phone": "815-554-2132", - "email": "payton@unconix.com" - }, - { - "id": 2706, - "guid": "d5368fad-1499-4f97-87e4-cceb40f60a13", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Davidson", - "company": "Xeicon", - "phone": "852-583-3785", - "email": "taylor@xeicon.com" - }, - { - "id": 2707, - "guid": "ca7fb19e-bca6-4fa2-8f90-bb66f39248bb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Watson", - "company": "Transtouch", - "phone": "855-597-3966", - "email": "julia@transtouch.com" - }, - { - "id": 2708, - "guid": "4f019483-cd97-48a7-96b9-1a362dcebd58", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Cook", - "company": "Conrama", - "phone": "861-413-3715", - "email": "mariah@conrama.com" - }, - { - "id": 2709, - "guid": "fbafd4bf-08f1-4953-831d-aa3fcf9880bc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Molly Young", - "company": "InfoAirway", - "phone": "882-468-2174", - "email": "molly@infoairway.com" - }, - { - "id": 2710, - "guid": "93e97fef-2024-466a-9296-2d458a3ca0a5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Hoggarth", - "company": "Orthosoft", - "phone": "839-556-2372", - "email": "valeria@orthosoft.com" - }, - { - "id": 2711, - "guid": "aef4f3f7-8c4d-49b5-af1d-c6bec25aabc6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooklyn Neal", - "company": "Infragraph", - "phone": "808-487-3915", - "email": "brooklyn@infragraph.com" - }, - { - "id": 2712, - "guid": "7773c4ba-babb-406a-8347-44dc720a3e35", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Carey", - "company": "US Infratouch", - "phone": "826-561-3238", - "email": "sarah@us infratouch.com" - }, - { - "id": 2713, - "guid": "c8973bca-f79d-438f-b16b-84610f9bd3d1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Gustman", - "company": "Fibroserve", - "phone": "852-542-2247", - "email": "riley@fibroserve.com" - }, - { - "id": 2714, - "guid": "d2100af4-6490-4f82-9a07-01110bc59b95", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Carter", - "company": "Airdyne", - "phone": "885-432-2537", - "email": "sarah@airdyne.com" - }, - { - "id": 2715, - "guid": "168e50a6-6f2f-4043-aeac-c0ab807e406c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Young", - "company": "US Infratouch", - "phone": "892-486-2763", - "email": "kylie@us infratouch.com" - }, - { - "id": 2716, - "guid": "39283f14-4033-42e7-b8dd-353a3c35beba", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Daniels", - "company": "Generola", - "phone": "833-472-2737", - "email": "charlotte@generola.com" - }, - { - "id": 2717, - "guid": "511dde86-a461-457c-aaa3-f7e6c585bc93", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Calhoun", - "company": "Generola", - "phone": "806-493-3684", - "email": "mackenzie@generola.com" - }, - { - "id": 2718, - "guid": "1b40cdf0-cb50-44f7-ab60-f7e8c5184692", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Smith", - "company": "eEyetanic", - "phone": "848-451-2688", - "email": "mya@eeyetanic.com" - }, - { - "id": 2719, - "guid": "2dfa4cde-8f1b-44f0-9cd3-04968bda3eac", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Charlotte Crossman", - "company": "Skydata", - "phone": "861-469-2644", - "email": "charlotte@skydata.com" - }, - { - "id": 2720, - "guid": "7629d54b-2e21-449c-9265-6b8b471a2410", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Chesterton", - "company": "Qualserve", - "phone": "831-541-3990", - "email": "emily@qualserve.com" - }, - { - "id": 2721, - "guid": "271d7483-e534-43b1-a55d-f115119466a5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Gill", - "company": "Celgra", - "phone": "833-433-3584", - "email": "camila@celgra.com" - }, - { - "id": 2722, - "guid": "62b5a82d-afbf-4832-9cf1-6b9674c2f8e3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Haig", - "company": "Xeicon", - "phone": "819-510-2327", - "email": "ava@xeicon.com" - }, - { - "id": 2723, - "guid": "1f47f352-30fc-4929-87c0-f51f9cd5029f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Vaughan", - "company": "Generola", - "phone": "825-421-2512", - "email": "sydney@generola.com" - }, - { - "id": 2724, - "guid": "36176222-6405-4781-b813-78a2c5751abd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Vance", - "company": "Mescatron", - "phone": "880-521-2574", - "email": "jessica@mescatron.com" - }, - { - "id": 2725, - "guid": "0385c759-caf3-4e30-b376-37cafab965b9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Melanie Sherlock", - "company": "Jamconik", - "phone": "853-581-2772", - "email": "melanie@jamconik.com" - }, - { - "id": 2726, - "guid": "4d295bc3-a315-4d95-aec5-87454f1b412a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Wainwright", - "company": "Genland", - "phone": "882-551-3640", - "email": "ella@genland.com" - }, - { - "id": 2727, - "guid": "db137c8f-cf9c-43d9-8917-5da89f313f05", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Turner", - "company": "Ventanium", - "phone": "861-496-2535", - "email": "gianna@ventanium.com" - }, - { - "id": 2728, - "guid": "a83561fd-7e01-4663-9461-9018fdf9e627", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Natalie Davidson", - "company": "Infraique", - "phone": "826-437-2179", - "email": "natalie@infraique.com" - }, - { - "id": 2729, - "guid": "7ea19b85-a31f-42d4-b804-5177904c1ba1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Caroline Wesley", - "company": "Idmax", - "phone": "881-503-3529", - "email": "caroline@idmax.com" - }, - { - "id": 2730, - "guid": "a35a970d-9def-4eb8-b95a-011c15f47b55", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Higgins", - "company": "Keytheon", - "phone": "866-586-2807", - "email": "sydney@keytheon.com" - }, - { - "id": 2731, - "guid": "d22828bf-100a-4f66-aa52-4b8368a298ce", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Thomson", - "company": "Multitiqua", - "phone": "823-436-2636", - "email": "emma@multitiqua.com" - }, - { - "id": 2732, - "guid": "be17b707-2d9d-4ce1-b6ef-e736c85017f1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Galbraith", - "company": "Dynarama", - "phone": "888-442-2539", - "email": "riley@dynarama.com" - }, - { - "id": 2733, - "guid": "0ea5b74e-f439-4a91-b383-1e703f512482", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Hamphrey", - "company": "Truegate", - "phone": "833-539-3727", - "email": "olivia@truegate.com" - }, - { - "id": 2734, - "guid": "604a57d9-7c7f-406b-a524-e4caae90e515", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Neal", - "company": "Westmedia", - "phone": "858-475-3352", - "email": "ava@westmedia.com" - }, - { - "id": 2735, - "guid": "13cc1ddc-0129-4cda-bbae-3152bbb8cb17", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Hardman", - "company": "Robocomm", - "phone": "827-570-2178", - "email": "brooklyn@robocomm.com" - }, - { - "id": 2736, - "guid": "46abc0f9-f96e-43e0-951d-933a2f1771ae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Nevaeh Gilmore", - "company": "iSkyvaco", - "phone": "844-424-2229", - "email": "nevaeh@iskyvaco.com" - }, - { - "id": 2737, - "guid": "a718a187-f7a9-4fe2-a4c8-e92094bdf212", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Makayla Bush", - "company": "Titanirola", - "phone": "844-580-2122", - "email": "makayla@titanirola.com" - }, - { - "id": 2738, - "guid": "686452f5-e0aa-4104-b660-99e5cf3fb016", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Daniels", - "company": "Infraique", - "phone": "827-580-3174", - "email": "charlotte@infraique.com" - }, - { - "id": 2739, - "guid": "d2a5f7af-f8ac-43fa-bd91-6bece43b2225", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Elizabeth Gate", - "company": "Keytheon", - "phone": "898-570-3200", - "email": "elizabeth@keytheon.com" - }, - { - "id": 2740, - "guid": "5f329e86-017d-4d94-897f-6eb95b9990ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Hamphrey", - "company": "Entcast", - "phone": "832-526-2361", - "email": "kayla@entcast.com" - }, - { - "id": 2741, - "guid": "f98a8890-e0d3-4573-b288-20e30e772765", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Hoggarth", - "company": "Ventanium", - "phone": "822-566-3498", - "email": "taylor@ventanium.com" - }, - { - "id": 2742, - "guid": "1eb2325a-5e00-43a2-bb98-fd701e63c3d8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Cramer", - "company": "SysVenamerica", - "phone": "826-577-3864", - "email": "mariah@sysvenamerica.com" - }, - { - "id": 2743, - "guid": "75ada26a-7044-49e0-b68a-27765dbb3ae8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Miers", - "company": "iEnland", - "phone": "808-407-3434", - "email": "angelina@ienland.com" - }, - { - "id": 2744, - "guid": "066ba133-32d5-4dbb-bec8-1dd14453fba1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Ogden", - "company": "Idmax", - "phone": "860-471-2986", - "email": "eva@idmax.com" - }, - { - "id": 2745, - "guid": "d157ee72-d7f5-44ad-bd46-d01eb59f7e69", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Ogden", - "company": "Nanobanc", - "phone": "808-429-3462", - "email": "addison@nanobanc.com" - }, - { - "id": 2746, - "guid": "f09256e6-77c9-415b-a934-9be8253cdff6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Otis", - "company": "Raylog", - "phone": "880-509-2622", - "email": "aaliyah@raylog.com" - }, - { - "id": 2747, - "guid": "27f50a75-6d7f-4356-a3e0-f9c7380a0e1e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Davidson", - "company": "Robotemplate", - "phone": "850-406-2145", - "email": "arianna@robotemplate.com" - }, - { - "id": 2748, - "guid": "f97f6374-81f2-40c0-a456-cd41fef1c2d1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Oliver", - "company": "Westmedia", - "phone": "805-424-2584", - "email": "anna@westmedia.com" - }, - { - "id": 2749, - "guid": "892dec2f-0eb2-4c84-89f3-19f97c0e175b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Hoggarth", - "company": "Anagraph", - "phone": "830-551-3378", - "email": "ariana@anagraph.com" - }, - { - "id": 2750, - "guid": "b4dee0b6-af18-456e-a47c-f12b82c15668", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Fulton", - "company": "Techtron", - "phone": "859-428-3747", - "email": "anna@techtron.com" - }, - { - "id": 2751, - "guid": "e3d84894-4170-4a9b-aa30-c6ccebf62f93", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Nash", - "company": "Teraserv", - "phone": "827-400-2354", - "email": "paige@teraserv.com" - }, - { - "id": 2752, - "guid": "fef12a6d-8517-4d46-920e-c588c4e0ff78", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Brickman", - "company": "iEnland", - "phone": "855-408-3767", - "email": "claire@ienland.com" - }, - { - "id": 2753, - "guid": "5f00ed08-dd8c-4ae1-9e24-74753754b3ba", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Goodman", - "company": "Unologic", - "phone": "808-557-2303", - "email": "madeline@unologic.com" - }, - { - "id": 2754, - "guid": "5e0cfe98-b063-4ea8-a58f-c9a78e7931f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Milton", - "company": "Genland", - "phone": "894-558-2960", - "email": "zoey@genland.com" - }, - { - "id": 2755, - "guid": "0760e2f6-6aaf-4aec-83b9-1a37779dd8be", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Galbraith", - "company": "Safeagra", - "phone": "877-429-2819", - "email": "sydney@safeagra.com" - }, - { - "id": 2756, - "guid": "c854faab-e8c4-4f06-8c2d-c9c1d5ed8738", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Fisher", - "company": "Ventanium", - "phone": "814-555-3334", - "email": "riley@ventanium.com" - }, - { - "id": 2757, - "guid": "779f7ccd-2364-4738-b04e-12301eaa57c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Hodges", - "company": "Dynarama", - "phone": "832-596-3255", - "email": "rachel@dynarama.com" - }, - { - "id": 2758, - "guid": "a3e6c952-e505-4dea-a5b2-83b2fbcb3a54", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Murphy", - "company": "Unologic", - "phone": "851-554-2051", - "email": "samantha@unologic.com" - }, - { - "id": 2759, - "guid": "7a32f257-e44e-4e12-a5e1-15d7f333fa71", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Genesis Chandter", - "company": "Tekcar", - "phone": "897-561-3671", - "email": "genesis@tekcar.com" - }, - { - "id": 2760, - "guid": "75bb5d5f-6525-406b-8732-f7ae4d01fc0b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Gilbert", - "company": "Teraserv", - "phone": "896-524-3040", - "email": "valeria@teraserv.com" - }, - { - "id": 2761, - "guid": "86195bd5-3466-4070-a68b-fa17c4389d94", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Carrington", - "company": "Westgate", - "phone": "827-577-2172", - "email": "avery@westgate.com" - }, - { - "id": 2762, - "guid": "168624fc-e536-43dd-b380-80b59c77ddb8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Haig", - "company": "Entcast", - "phone": "844-446-3899", - "email": "leah@entcast.com" - }, - { - "id": 2763, - "guid": "9cb279f0-2bdc-4afe-b662-4c9b2884c63b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Hailey", - "company": "US Infratouch", - "phone": "857-532-2969", - "email": "hannah@us infratouch.com" - }, - { - "id": 2764, - "guid": "3a075a8c-a392-412e-882d-bc1e61135e95", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Oswald", - "company": "Syssoft", - "phone": "893-434-3258", - "email": "evelyn@syssoft.com" - }, - { - "id": 2765, - "guid": "e41c452d-cfc0-44bc-8b13-ae29eabba127", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Goodman", - "company": "Skydata", - "phone": "891-500-3141", - "email": "payton@skydata.com" - }, - { - "id": 2766, - "guid": "26033364-2d7a-4599-8501-d9ef5fdd5bec", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Wesley", - "company": "Robotemplate", - "phone": "884-476-3480", - "email": "madeline@robotemplate.com" - }, - { - "id": 2767, - "guid": "2f0e8ad4-4d59-46fe-a98a-88d2f899a9e4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bailey Thorndike", - "company": "Entcast", - "phone": "834-417-3966", - "email": "bailey@entcast.com" - }, - { - "id": 2768, - "guid": "8a7d2b2d-1926-4899-869b-79384eb0d40a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Miers", - "company": "Textiqua", - "phone": "878-465-2080", - "email": "camila@textiqua.com" - }, - { - "id": 2769, - "guid": "0448d46d-2fc8-490e-a8af-7aeeefdf624f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Morgan Conors", - "company": "Fibrotouch", - "phone": "842-449-2683", - "email": "morgan@fibrotouch.com" - }, - { - "id": 2770, - "guid": "4c35eb07-599a-49a1-8d87-40cf9d637fcb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Day", - "company": "Cryptotemplate", - "phone": "888-596-3554", - "email": "bailey@cryptotemplate.com" - }, - { - "id": 2771, - "guid": "a36a3733-5a48-4cff-94f6-38b9c4d1f77c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Chesterton", - "company": "Orthosoft", - "phone": "896-484-3914", - "email": "olivia@orthosoft.com" - }, - { - "id": 2772, - "guid": "95c6fe20-2173-4f8b-8643-950d3408aa91", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Thorndike", - "company": "Titanirola", - "phone": "896-555-2681", - "email": "claire@titanirola.com" - }, - { - "id": 2773, - "guid": "b24cffaa-630f-41c4-90d0-0a5baff72beb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Nash", - "company": "SysUSA", - "phone": "882-529-3380", - "email": "peyton@sysusa.com" - }, - { - "id": 2774, - "guid": "9040955b-0efd-4df4-82ba-b8474bc29c73", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Oldman", - "company": "Keytheon", - "phone": "867-568-2898", - "email": "arianna@keytheon.com" - }, - { - "id": 2775, - "guid": "5888adb9-c4da-4f25-9a33-45e1b5ec3e55", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Davidson", - "company": "Ameritron", - "phone": "807-477-3942", - "email": "victoria@ameritron.com" - }, - { - "id": 2776, - "guid": "a5f7f4b4-84bd-40e8-97a0-36e4ef3408b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Watson", - "company": "Orthosoft", - "phone": "890-540-2952", - "email": "bella@orthosoft.com" - }, - { - "id": 2777, - "guid": "603970d9-2cf7-4025-9eed-f2c88bc0486c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Hardman", - "company": "Idmax", - "phone": "809-465-3630", - "email": "alexa@idmax.com" - }, - { - "id": 2778, - "guid": "a81f8d33-4a68-4b30-94bd-54708a9bf45f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Charlotte Gilbert", - "company": "Proline", - "phone": "805-532-3734", - "email": "charlotte@proline.com" - }, - { - "id": 2779, - "guid": "471811e6-4952-4021-ac63-ad9dff2ed94d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Sheldon", - "company": "eSteganoergy", - "phone": "835-401-2534", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 2780, - "guid": "41c12a09-f23d-461a-a113-8038cebb5076", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Thomson", - "company": "Jamrola", - "phone": "889-474-2484", - "email": "abigail@jamrola.com" - }, - { - "id": 2781, - "guid": "8224ae98-bc82-481a-b38e-dab85bb24b2c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Youmans", - "company": "Westmedia", - "phone": "833-523-3107", - "email": "isabelle@westmedia.com" - }, - { - "id": 2782, - "guid": "ee7b17c4-155f-483d-8d70-0ae84fcf2606", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Gardner", - "company": "Generola", - "phone": "811-426-3447", - "email": "alexandra@generola.com" - }, - { - "id": 2783, - "guid": "b6289e11-e717-4eae-9326-b48c850f6998", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Calhoun", - "company": "Syssoft", - "phone": "884-437-2397", - "email": "zoe@syssoft.com" - }, - { - "id": 2784, - "guid": "86607986-bf82-499e-b96a-a8cb03c33f5e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Thorndike", - "company": "Westtomik", - "phone": "847-400-3873", - "email": "khloe@westtomik.com" - }, - { - "id": 2785, - "guid": "1e7f967d-9254-4485-a340-e62ef1d04502", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Gate", - "company": "RoboAerlogix", - "phone": "894-496-3196", - "email": "katelyn@roboaerlogix.com" - }, - { - "id": 2786, - "guid": "481ceaa0-39f5-4943-b575-5cc7f29bb056", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Murphy", - "company": "Safetrust", - "phone": "893-548-3532", - "email": "kylie@safetrust.com" - }, - { - "id": 2787, - "guid": "f723bf8e-87dd-4d5d-89a9-d3431d67d3c4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Wood", - "company": "Xeicon", - "phone": "894-456-3468", - "email": "isabelle@xeicon.com" - }, - { - "id": 2788, - "guid": "40701a64-d555-4819-9775-6e5d967a7391", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Autumn Chesterton", - "company": "RoboAerlogix", - "phone": "879-512-3955", - "email": "autumn@roboaerlogix.com" - }, - { - "id": 2789, - "guid": "a31200d4-be82-4fc8-aa7b-dfa9af8eadba", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Wesley", - "company": "Aprama", - "phone": "815-493-3056", - "email": "elizabeth@aprama.com" - }, - { - "id": 2790, - "guid": "1a1e75a2-3781-4f38-8312-2f9b75d9b96a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Bush", - "company": "Enlogia", - "phone": "872-443-3393", - "email": "kimberly@enlogia.com" - }, - { - "id": 2791, - "guid": "79d0675f-b318-46d7-8d3c-3b311af40023", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Daniels", - "company": "Allphysiche", - "phone": "811-463-2215", - "email": "maya@allphysiche.com" - }, - { - "id": 2792, - "guid": "c39be522-fe52-4adb-bcb0-ffa966f97b1d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Vance", - "company": "Indisco", - "phone": "838-571-2591", - "email": "faith@indisco.com" - }, - { - "id": 2793, - "guid": "1cf491e0-8194-4538-a65a-2337c884b755", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Adamson", - "company": "Ventanium", - "phone": "820-564-2902", - "email": "valeria@ventanium.com" - }, - { - "id": 2794, - "guid": "d5f2df29-e31d-4eb7-94d5-3b0fa6d4891b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Vance", - "company": "Teknoplexon", - "phone": "827-468-2174", - "email": "evelyn@teknoplexon.com" - }, - { - "id": 2795, - "guid": "66d973b5-fe13-44a8-92bb-6dc78afbab7e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Turner", - "company": "Navivacs", - "phone": "898-566-2426", - "email": "natalie@navivacs.com" - }, - { - "id": 2796, - "guid": "d1463284-7bc4-482f-897d-cea7a96d0935", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Brown", - "company": "Westtomik", - "phone": "858-444-3437", - "email": "jessica@westtomik.com" - }, - { - "id": 2797, - "guid": "a2586555-3fef-43f4-8733-319c37dc0410", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Bush", - "company": "Infragraph", - "phone": "815-486-2201", - "email": "maria@infragraph.com" - }, - { - "id": 2798, - "guid": "3be6369a-f45d-4c11-9151-7196e5c15a73", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Smith", - "company": "Unconix", - "phone": "814-425-3665", - "email": "amelia@unconix.com" - }, - { - "id": 2799, - "guid": "4a6d702b-4e93-43b8-bc43-e16a14d21bf0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Nathan", - "company": "Inridium", - "phone": "838-539-2753", - "email": "sophia@inridium.com" - }, - { - "id": 2800, - "guid": "31c8d778-0f89-42af-a691-fa4f55ebde32", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Chapman", - "company": "Robotomic", - "phone": "852-431-3692", - "email": "camila@robotomic.com" - }, - { - "id": 2801, - "guid": "1f1dd446-5956-483c-887b-3c9434ed26d0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Paige Warren", - "company": "Jamrola", - "phone": "849-498-3302", - "email": "paige@jamrola.com" - }, - { - "id": 2802, - "guid": "6147ae6c-3403-4107-a4b7-0356db57125f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Timmons", - "company": "Allnet", - "phone": "880-507-3528", - "email": "avery@allnet.com" - }, - { - "id": 2803, - "guid": "eadf4a29-9f0e-4467-a662-0bed2cbfe1b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Fisher", - "company": "Fibroserve", - "phone": "820-543-2080", - "email": "madison@fibroserve.com" - }, - { - "id": 2804, - "guid": "de61d4ea-b050-48c2-80b4-f57556df881e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Morgan Wainwright", - "company": "Pericenta", - "phone": "878-547-2083", - "email": "morgan@pericenta.com" - }, - { - "id": 2805, - "guid": "c129e1f5-4a31-4bbe-ae8f-123cd1ab1ab2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Day", - "company": "eSteganoergy", - "phone": "847-407-2524", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 2806, - "guid": "1824a836-e181-4b0d-946a-39cc1b267984", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Hardman", - "company": "Fibrotopia", - "phone": "805-500-2484", - "email": "serenity@fibrotopia.com" - }, - { - "id": 2807, - "guid": "2ad3c5fa-9437-4569-aed1-8a5779574c5b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Vaughan", - "company": "Unologic", - "phone": "850-585-2918", - "email": "lillian@unologic.com" - }, - { - "id": 2808, - "guid": "7d2c832c-af5a-4f52-9df0-a1608d16ad48", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Hailey", - "company": "Keytheon", - "phone": "846-451-3425", - "email": "maria@keytheon.com" - }, - { - "id": 2809, - "guid": "802a62f1-cc61-42c2-9e52-3a0c668a2740", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Wood", - "company": "Safetrust", - "phone": "824-430-2916", - "email": "madison@safetrust.com" - }, - { - "id": 2810, - "guid": "2f234b1d-0552-4b14-9878-02f273a902e3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Waller", - "company": "iQualcar", - "phone": "852-600-3513", - "email": "camila@iqualcar.com" - }, - { - "id": 2811, - "guid": "dbc97b51-812d-4415-8c0a-4a6950192f11", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Hodges", - "company": "Thermotomic", - "phone": "852-414-2084", - "email": "gianna@thermotomic.com" - }, - { - "id": 2812, - "guid": "d5eb8808-df98-4161-9883-dda5e5f26150", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Angelina Cook", - "company": "Anaframe", - "phone": "801-487-3871", - "email": "angelina@anaframe.com" - }, - { - "id": 2813, - "guid": "1dd3f748-a4a6-4419-b920-ad556da74c61", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Goodman", - "company": "Orthosoft", - "phone": "856-582-3384", - "email": "ariana@orthosoft.com" - }, - { - "id": 2814, - "guid": "5e8fc737-ed62-44b9-9d66-afafe34a157c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail White", - "company": "InfoAirway", - "phone": "869-528-2171", - "email": "abigail@infoairway.com" - }, - { - "id": 2815, - "guid": "f44aae3b-d6c7-47ff-8ba0-ac960b6c318d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Carey", - "company": "Airdyne", - "phone": "876-486-3090", - "email": "julia@airdyne.com" - }, - { - "id": 2816, - "guid": "fa466e31-1f2e-4996-aeba-a6133221eddc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Anna Neal", - "company": "Truetomic", - "phone": "891-478-3676", - "email": "anna@truetomic.com" - }, - { - "id": 2817, - "guid": "48f5847c-895e-4337-92f9-3bb0a2e57125", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Gill", - "company": "Polytheon", - "phone": "897-478-3110", - "email": "aaliyah@polytheon.com" - }, - { - "id": 2818, - "guid": "025d7c69-f081-4eed-b7ea-ac6f83b5b8f4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Goodman", - "company": "Netseco", - "phone": "878-514-3860", - "email": "alexa@netseco.com" - }, - { - "id": 2819, - "guid": "3f07b98e-151c-4bbe-8e79-5ceab80d7e83", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Oldridge", - "company": "Robotemplate", - "phone": "800-488-3297", - "email": "julia@robotemplate.com" - }, - { - "id": 2820, - "guid": "2e84ec1c-f1d4-4eb3-977b-9d40db64eeca", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Chesterton", - "company": "Robotomic", - "phone": "813-497-3327", - "email": "maria@robotomic.com" - }, - { - "id": 2821, - "guid": "e0a93400-97bc-411d-8897-64d2015635e3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Abramson", - "company": "Truegate", - "phone": "881-417-3302", - "email": "elizabeth@truegate.com" - }, - { - "id": 2822, - "guid": "bb04efb0-9ecf-4fcc-b9a7-b27f0384bd11", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Cook", - "company": "Anagraph", - "phone": "809-528-3600", - "email": "emily@anagraph.com" - }, - { - "id": 2823, - "guid": "2fb7eeac-cd85-41ae-9587-f2fa45259341", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Hoggarth", - "company": "Jamrola", - "phone": "802-407-3837", - "email": "isabella@jamrola.com" - }, - { - "id": 2824, - "guid": "4dffe806-beda-4fd0-99a5-52c29ccb5ea1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa White", - "company": "Aluco", - "phone": "869-442-2367", - "email": "vanessa@aluco.com" - }, - { - "id": 2825, - "guid": "f139f95f-478e-42f7-ad0e-113337020d8b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Ward", - "company": "Raylog", - "phone": "814-578-2857", - "email": "isabella@raylog.com" - }, - { - "id": 2826, - "guid": "44a553c8-148e-4f74-969d-8a93a9174e1f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Hamphrey", - "company": "Polytheon", - "phone": "844-533-3982", - "email": "morgan@polytheon.com" - }, - { - "id": 2827, - "guid": "617045a1-7f1e-416c-bb07-92091b431d5f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Wallace", - "company": "Keytheon", - "phone": "868-574-2747", - "email": "ava@keytheon.com" - }, - { - "id": 2828, - "guid": "b4cbc8df-6397-4e20-b9c3-9a602d240671", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Warren", - "company": "Proline", - "phone": "890-575-3020", - "email": "claire@proline.com" - }, - { - "id": 2829, - "guid": "5e06d921-f413-4680-9192-60899bd2e5f7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Ward", - "company": "Netsystems", - "phone": "867-471-2180", - "email": "aubrey@netsystems.com" - }, - { - "id": 2830, - "guid": "628c6497-169c-48b9-9602-32887f843c6e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Fisher", - "company": "eEyetanic", - "phone": "867-480-2080", - "email": "angelina@eeyetanic.com" - }, - { - "id": 2831, - "guid": "2066b2c8-b242-4123-9d0b-cbd48f622713", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Watson", - "company": "Syssoft", - "phone": "866-600-2331", - "email": "charlotte@syssoft.com" - }, - { - "id": 2832, - "guid": "e7b862a1-2cc9-4a40-ba4e-8e802be1d688", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Waller", - "company": "Teratopia", - "phone": "802-444-2066", - "email": "faith@teratopia.com" - }, - { - "id": 2833, - "guid": "23b3d25b-eefd-4a96-b9cb-f9efe99239f6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Clapton", - "company": "Westgate", - "phone": "803-501-3645", - "email": "madison@westgate.com" - }, - { - "id": 2834, - "guid": "7b99684d-c070-40e6-87d1-9d9655cb2a3c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea WifKinson", - "company": "Westmedia", - "phone": "895-429-2919", - "email": "andrea@westmedia.com" - }, - { - "id": 2835, - "guid": "703dc270-29ed-49d1-91f4-3aee6b2bf3dd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Haig", - "company": "Jamrola", - "phone": "858-427-3938", - "email": "chloe@jamrola.com" - }, - { - "id": 2836, - "guid": "485b46fb-a2ef-4cc5-8bc5-1dfacb00d627", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Gibbs", - "company": "Jamconik", - "phone": "863-509-2355", - "email": "gabriella@jamconik.com" - }, - { - "id": 2837, - "guid": "01496617-7d97-414d-810f-f7460916dd73", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Natalie Freeman", - "company": "Sontopia", - "phone": "833-416-3371", - "email": "natalie@sontopia.com" - }, - { - "id": 2838, - "guid": "880f6f89-d3a1-434d-a5b2-3ae0a24bde30", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mariah Sherlock", - "company": "Venconix", - "phone": "836-403-3955", - "email": "mariah@venconix.com" - }, - { - "id": 2839, - "guid": "0cc94a17-5f4a-4aa8-8963-519557ca6960", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Oswald", - "company": "Fibroserve", - "phone": "880-512-3220", - "email": "morgan@fibroserve.com" - }, - { - "id": 2840, - "guid": "f11705ec-d7fc-47a8-abfb-551e2e858dda", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lillian Thorndike", - "company": "Teknoplexon", - "phone": "866-423-3511", - "email": "lillian@teknoplexon.com" - }, - { - "id": 2841, - "guid": "559da929-55b7-473b-a700-927f19b18504", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Sherlock", - "company": "Videobanc", - "phone": "833-517-2325", - "email": "morgan@videobanc.com" - }, - { - "id": 2842, - "guid": "bef667fe-daec-4744-8d76-ec610e6484d5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Conors", - "company": "Jamconik", - "phone": "845-455-2861", - "email": "julia@jamconik.com" - }, - { - "id": 2843, - "guid": "a6ba64a6-8c1d-45c5-84eb-d04821477a98", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Mercer", - "company": "Mescatron", - "phone": "886-494-2597", - "email": "eva@mescatron.com" - }, - { - "id": 2844, - "guid": "d8cefc36-5d0f-4619-9c75-9e5553d4e151", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Webster", - "company": "Robotomic", - "phone": "830-503-3157", - "email": "grace@robotomic.com" - }, - { - "id": 2845, - "guid": "d2356222-b917-41fe-a3a0-ca48489695ee", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Chapman", - "company": "Celgra", - "phone": "829-446-3318", - "email": "kayla@celgra.com" - }, - { - "id": 2846, - "guid": "6a685483-de1c-42cd-8b85-280339b87d3f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Daniels", - "company": "SysUSA", - "phone": "880-553-2238", - "email": "paige@sysusa.com" - }, - { - "id": 2847, - "guid": "d43518a3-d466-4dda-abaf-064bd9025e86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Gilson", - "company": "Unologic", - "phone": "822-597-3165", - "email": "mackenzie@unologic.com" - }, - { - "id": 2848, - "guid": "0a25e3aa-8646-496c-8eee-29db236cf7bb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Smith", - "company": "Celgra", - "phone": "880-579-3956", - "email": "natalie@celgra.com" - }, - { - "id": 2849, - "guid": "1c92d9e6-4546-477c-b4af-848b239e6ced", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Hawkins", - "company": "Idmax", - "phone": "883-527-2061", - "email": "alexa@idmax.com" - }, - { - "id": 2850, - "guid": "9d7f9102-bb9f-4e98-8502-a0e37f336d4b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Miln", - "company": "Titanigraf", - "phone": "839-478-2369", - "email": "zoey@titanigraf.com" - }, - { - "id": 2851, - "guid": "bb3b793a-ed89-4e6c-b9e7-2eac08c5d22d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Osborne", - "company": "Venconix", - "phone": "819-597-3652", - "email": "zoe@venconix.com" - }, - { - "id": 2852, - "guid": "7cb9c7c3-2b34-4d98-84d4-5670b3a6cf18", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Hancock", - "company": "Rapigrafix", - "phone": "812-587-2759", - "email": "taylor@rapigrafix.com" - }, - { - "id": 2853, - "guid": "4c13f915-0b62-45c6-8378-0741dd729d9e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Morrison", - "company": "Textiqua", - "phone": "838-490-2477", - "email": "layla@textiqua.com" - }, - { - "id": 2854, - "guid": "2ba8c7df-ab1e-4a8d-9efa-b42e768be0ab", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Abramson", - "company": "Robocomm", - "phone": "811-564-3112", - "email": "kimberly@robocomm.com" - }, - { - "id": 2855, - "guid": "5b1e2d69-d5d4-4fb8-878c-33ec21cad10c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Nash", - "company": "Textiqua", - "phone": "837-400-2431", - "email": "kylie@textiqua.com" - }, - { - "id": 2856, - "guid": "70de4065-3486-42ed-90ca-6d9b0edeab6b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Warren", - "company": "Safeagra", - "phone": "845-533-2274", - "email": "hannah@safeagra.com" - }, - { - "id": 2857, - "guid": "64fc6f2b-29ff-4130-b036-fbf48327ec9a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Harrison", - "company": "Safetrust", - "phone": "802-563-2726", - "email": "leah@safetrust.com" - }, - { - "id": 2858, - "guid": "c1d5af38-a6cc-48fd-b68d-04bbffbe372c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Gilbert", - "company": "Superscope", - "phone": "871-507-3306", - "email": "gianna@superscope.com" - }, - { - "id": 2859, - "guid": "37c59ab2-35df-4fd4-9c3a-147c523bd0ba", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Brown", - "company": "Infragraph", - "phone": "847-562-2043", - "email": "arianna@infragraph.com" - }, - { - "id": 2860, - "guid": "2ac20b4f-4946-426f-8008-3c61d2771cc2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Day", - "company": "Unologic", - "phone": "878-583-3798", - "email": "chloe@unologic.com" - }, - { - "id": 2861, - "guid": "80329b32-0f67-4a43-8bd5-fae90554dc6f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Nathan", - "company": "Hypervaco", - "phone": "800-555-2895", - "email": "mariah@hypervaco.com" - }, - { - "id": 2862, - "guid": "6245bce8-8259-4b0c-bec6-37753ed757af", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Hodges", - "company": "Techtron", - "phone": "863-504-2933", - "email": "sophia@techtron.com" - }, - { - "id": 2863, - "guid": "a0e257e7-d8b5-4c98-a4c5-a1c1d6b74041", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Rachel Gerald", - "company": "Syssoft", - "phone": "803-533-2166", - "email": "rachel@syssoft.com" - }, - { - "id": 2864, - "guid": "2d01e196-38e0-4270-b756-785abcc8ae6f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Hamphrey", - "company": "Unologic", - "phone": "872-564-3287", - "email": "samantha@unologic.com" - }, - { - "id": 2865, - "guid": "f8575756-6670-49d8-9287-e2d07fe7835f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mariah Crossman", - "company": "eSteganoergy", - "phone": "857-529-2293", - "email": "mariah@esteganoergy.com" - }, - { - "id": 2866, - "guid": "7979c0b8-2e26-4830-9034-08b941fc7d2c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Gilbert", - "company": "Systheon", - "phone": "804-587-3391", - "email": "charlotte@systheon.com" - }, - { - "id": 2867, - "guid": "6d705a6e-db48-4a53-a554-305455f95104", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Adamson", - "company": "Robotemplate", - "phone": "856-409-3233", - "email": "vanessa@robotemplate.com" - }, - { - "id": 2868, - "guid": "5ed6e10e-3397-4cbf-bcd0-a83fbf30f8ef", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Sherlock", - "company": "Pericenta", - "phone": "886-418-3739", - "email": "vanessa@pericenta.com" - }, - { - "id": 2869, - "guid": "97992ce1-5dbd-4722-b073-0fe94e1cd885", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Eva Youmans", - "company": "Nanobanc", - "phone": "884-529-3604", - "email": "eva@nanobanc.com" - }, - { - "id": 2870, - "guid": "fbfc99cc-d549-4ecb-826c-d0ef240fb757", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Thornton", - "company": "Allnet", - "phone": "899-419-3764", - "email": "trinity@allnet.com" - }, - { - "id": 2871, - "guid": "49293b7d-8881-4a2b-9f5a-456b8ccf31be", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madison Carrington", - "company": "Rapigrafix", - "phone": "874-456-3229", - "email": "madison@rapigrafix.com" - }, - { - "id": 2872, - "guid": "c8c4c9df-6265-42d6-a2ad-d41023b07e9d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ariana Campbell", - "company": "iEnland", - "phone": "817-564-2802", - "email": "ariana@ienland.com" - }, - { - "id": 2873, - "guid": "7bdcf202-fbb4-47aa-8477-3547acc3665c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Otis", - "company": "Thermotomic", - "phone": "856-544-2410", - "email": "jocelyn@thermotomic.com" - }, - { - "id": 2874, - "guid": "a6aa457b-946c-467b-a372-89bcece761ca", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily White", - "company": "Fibroserve", - "phone": "810-523-2313", - "email": "emily@fibroserve.com" - }, - { - "id": 2875, - "guid": "68649460-5ec2-48d8-b2d7-64c7c9922209", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Winter", - "company": "Robotemplate", - "phone": "882-561-3683", - "email": "bella@robotemplate.com" - }, - { - "id": 2876, - "guid": "ff68c561-ab02-421b-ae24-7644105ee25e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Morrison", - "company": "Videobanc", - "phone": "860-497-2254", - "email": "destiny@videobanc.com" - }, - { - "id": 2877, - "guid": "ad1fef63-6185-4765-9774-0ab23ba391af", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Thorndike", - "company": "Qualserve", - "phone": "856-484-3355", - "email": "chloe@qualserve.com" - }, - { - "id": 2878, - "guid": "c9e591c2-3236-48ec-a1ba-2850f66c95df", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Carey", - "company": "iEnland", - "phone": "815-447-3261", - "email": "katelyn@ienland.com" - }, - { - "id": 2879, - "guid": "7c47da51-afbc-46c1-8a17-72909bb3d102", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Hancock", - "company": "Westtomik", - "phone": "880-472-2020", - "email": "evelyn@westtomik.com" - }, - { - "id": 2880, - "guid": "06814673-4a6a-493d-8937-d664ba6d6da2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kimberly Warren", - "company": "Anaframe", - "phone": "882-579-2112", - "email": "kimberly@anaframe.com" - }, - { - "id": 2881, - "guid": "179fcb78-0fdb-483a-98c0-e21b524eaacd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Smith", - "company": "SysUSA", - "phone": "847-432-3142", - "email": "leah@sysusa.com" - }, - { - "id": 2882, - "guid": "b9719222-c6c9-4948-913c-243762d2710b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Vaughan", - "company": "Titanigraf", - "phone": "824-548-3648", - "email": "evelyn@titanigraf.com" - }, - { - "id": 2883, - "guid": "ce857dea-d995-4cf3-b99b-edb572fba322", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Miln", - "company": "Superscope", - "phone": "898-562-2696", - "email": "zoe@superscope.com" - }, - { - "id": 2884, - "guid": "d1a19066-fdcd-4d46-9968-54b2247fe0b0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Brickman", - "company": "Orthomedia", - "phone": "858-452-2089", - "email": "trinity@orthomedia.com" - }, - { - "id": 2885, - "guid": "0391d0f3-4002-476e-b588-d9880129bae4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Gill", - "company": "Orthosoft", - "phone": "842-406-3654", - "email": "alexis@orthosoft.com" - }, - { - "id": 2886, - "guid": "443d8f63-f7fe-4dd7-b5af-fbbc061585f4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Wayne", - "company": "Entcast", - "phone": "871-451-2265", - "email": "charlotte@entcast.com" - }, - { - "id": 2887, - "guid": "b1f7602a-0dbd-48b7-af18-eb280cdbd9eb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Ward", - "company": "Cryptotemplate", - "phone": "855-484-2086", - "email": "serenity@cryptotemplate.com" - }, - { - "id": 2888, - "guid": "fab87960-fec2-4cdd-ad0f-4837a05ae173", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Oldman", - "company": "Teratopia", - "phone": "861-582-2301", - "email": "taylor@teratopia.com" - }, - { - "id": 2889, - "guid": "75fb3ebc-2b04-4e29-a345-00ad64294a55", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Gustman", - "company": "iOptystix", - "phone": "863-461-2854", - "email": "hailey@ioptystix.com" - }, - { - "id": 2890, - "guid": "99c2340e-13da-41b8-a500-f3c9977be597", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madison Gilson", - "company": "Inridium", - "phone": "800-541-2699", - "email": "madison@inridium.com" - }, - { - "id": 2891, - "guid": "9cbc177a-250e-4d11-85db-d7bc7bb7b27a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Neal", - "company": "Infragraph", - "phone": "866-578-3527", - "email": "sophia@infragraph.com" - }, - { - "id": 2892, - "guid": "8a5d82a5-437e-4588-987c-ca4d0eb00907", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Warren", - "company": "Thermotomic", - "phone": "885-481-3297", - "email": "khloe@thermotomic.com" - }, - { - "id": 2893, - "guid": "48f198ea-5338-4a79-a981-02c7551bdd72", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Carrington", - "company": "Mescaridic", - "phone": "825-423-3797", - "email": "mya@mescaridic.com" - }, - { - "id": 2894, - "guid": "a2715155-1b73-437b-9ded-77e2e9cdf7a2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Morrison", - "company": "Netseco", - "phone": "846-584-3638", - "email": "khloe@netseco.com" - }, - { - "id": 2895, - "guid": "fed023a9-5d86-4dd6-b055-bad808db6115", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Stanley", - "company": "Polytheon", - "phone": "897-563-3645", - "email": "genesis@polytheon.com" - }, - { - "id": 2896, - "guid": "941d471d-89d5-4ee2-b86a-6bc2346f1388", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Croftoon", - "company": "Quintegrity", - "phone": "848-405-2988", - "email": "katherine@quintegrity.com" - }, - { - "id": 2897, - "guid": "2eafc10e-6218-4c91-b0de-7654cf624d27", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Nash", - "company": "Nanobanc", - "phone": "849-470-3931", - "email": "alexis@nanobanc.com" - }, - { - "id": 2898, - "guid": "ad474ebe-14f0-42b3-b234-63b0851bf5b9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Otis", - "company": "SysUSA", - "phone": "843-539-2297", - "email": "katelyn@sysusa.com" - }, - { - "id": 2899, - "guid": "12b5ec9b-c748-4550-8589-5d3a0d8528e7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Youmans", - "company": "Fibrotouch", - "phone": "877-483-3820", - "email": "anna@fibrotouch.com" - }, - { - "id": 2900, - "guid": "c7e7bdd1-8d04-4215-b7a3-4eda6251d35d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Faith Carter", - "company": "Vencom", - "phone": "815-533-2231", - "email": "faith@vencom.com" - }, - { - "id": 2901, - "guid": "1ba7ee79-1e56-494c-921d-89b8de9412ed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Miln", - "company": "Nanobanc", - "phone": "855-532-2517", - "email": "melanie@nanobanc.com" - }, - { - "id": 2902, - "guid": "63be2ef9-c007-4e0d-ad10-edced8ec7ea0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Gilmore", - "company": "Anaframe", - "phone": "834-528-2545", - "email": "molly@anaframe.com" - }, - { - "id": 2903, - "guid": "d9d72e50-12d1-4a1d-b994-e3d018e32d22", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Warren", - "company": "Anaframe", - "phone": "824-485-2852", - "email": "kylie@anaframe.com" - }, - { - "id": 2904, - "guid": "ad2e43ea-df18-4523-96a4-5a43b9db3378", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Chapman", - "company": "Syssoft", - "phone": "811-600-3553", - "email": "andrea@syssoft.com" - }, - { - "id": 2905, - "guid": "5a4d2135-5da3-46a3-9e7d-d57cb4e70d90", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madison Brooks", - "company": "Conotomics", - "phone": "836-574-2302", - "email": "madison@conotomics.com" - }, - { - "id": 2906, - "guid": "e53dc2a1-fdf9-4a9c-9901-b66736e979c6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hailey Wesley", - "company": "Rapigrafix", - "phone": "899-581-2094", - "email": "hailey@rapigrafix.com" - }, - { - "id": 2907, - "guid": "c3e3120e-5c8d-4858-a075-fa2b6a9367a8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Gilmore", - "company": "Interliant", - "phone": "855-429-2247", - "email": "layla@interliant.com" - }, - { - "id": 2908, - "guid": "ce9afb63-6e0d-4ccb-a268-9234f3ca3f1f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Cramer", - "company": "Quintegrity", - "phone": "882-558-2644", - "email": "gabrielle@quintegrity.com" - }, - { - "id": 2909, - "guid": "f2130d99-4fe4-4881-9e0d-baa648a97b1c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth Adamson", - "company": "Polytheon", - "phone": "823-509-2434", - "email": "elizabeth@polytheon.com" - }, - { - "id": 2910, - "guid": "78e61392-46e7-440f-9a3e-86cf8c010487", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Clapton", - "company": "Titanirola", - "phone": "829-553-3322", - "email": "isabella@titanirola.com" - }, - { - "id": 2911, - "guid": "99b83779-6af3-4dbd-8460-a18b5d529e5e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Warren", - "company": "OpKeycomm", - "phone": "828-481-2145", - "email": "sophia@opkeycomm.com" - }, - { - "id": 2912, - "guid": "fc9d83f0-7c44-410b-a0fb-a1caf7a0add7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Miller", - "company": "Jamrola", - "phone": "889-488-3536", - "email": "allison@jamrola.com" - }, - { - "id": 2913, - "guid": "482c49e1-66d2-4c01-9cde-a530a172e52f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Thorndike", - "company": "eEyetanic", - "phone": "802-481-2013", - "email": "alexa@eeyetanic.com" - }, - { - "id": 2914, - "guid": "b8a4e0a0-2c4b-45a9-bb13-1ada7176c872", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Otis", - "company": "Ameritron", - "phone": "846-519-3007", - "email": "isabella@ameritron.com" - }, - { - "id": 2915, - "guid": "638fa47a-5973-41d3-9286-9b3a874bd655", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Chloe Gilbert", - "company": "Keytheon", - "phone": "851-409-3300", - "email": "chloe@keytheon.com" - }, - { - "id": 2916, - "guid": "25b0299f-e5f4-440c-b288-16e79cdecb96", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Gustman", - "company": "Venconix", - "phone": "871-534-3860", - "email": "isabelle@venconix.com" - }, - { - "id": 2917, - "guid": "7f0f2e13-230d-45c0-b929-9caa5a79a8ad", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Conors", - "company": "Generola", - "phone": "880-488-2579", - "email": "aubrey@generola.com" - }, - { - "id": 2918, - "guid": "cc19c4d3-9a2d-4a73-a86c-1913ddb5ecce", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Brickman", - "company": "Videobanc", - "phone": "831-576-3216", - "email": "leah@videobanc.com" - }, - { - "id": 2919, - "guid": "f4899a40-9ac1-422a-9089-9babaefaa04e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Campbell", - "company": "Superscope", - "phone": "869-465-3641", - "email": "madison@superscope.com" - }, - { - "id": 2920, - "guid": "8e500c7e-a0d6-4508-afe0-57fce0ff7a23", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Creighton", - "company": "Gigaura", - "phone": "829-493-2872", - "email": "destiny@gigaura.com" - }, - { - "id": 2921, - "guid": "c2d6f8cb-465e-4044-aa86-6bbdbb9bf32a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Gerald", - "company": "Openserve", - "phone": "838-495-2855", - "email": "camila@openserve.com" - }, - { - "id": 2922, - "guid": "15ada0b1-1ec2-4326-acfa-ef94b4803819", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jocelyn Young", - "company": "Safeagra", - "phone": "824-499-3187", - "email": "jocelyn@safeagra.com" - }, - { - "id": 2923, - "guid": "aaafc85b-0cd9-4e49-9566-77c3fb088f7f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Daniels", - "company": "Skydata", - "phone": "855-485-2127", - "email": "serenity@skydata.com" - }, - { - "id": 2924, - "guid": "e4ccb2cd-33a3-42e6-90bf-3c1669dc3b2d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Hodges", - "company": "Titanigraf", - "phone": "806-465-3981", - "email": "abigail@titanigraf.com" - }, - { - "id": 2925, - "guid": "eeb14aed-6857-4c2b-8712-513fffd20000", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Creighton", - "company": "Xeicon", - "phone": "834-451-2310", - "email": "sydney@xeicon.com" - }, - { - "id": 2926, - "guid": "c759f038-deb5-4b41-9e23-802a611bbc3e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Leah Wainwright", - "company": "Unconix", - "phone": "857-542-2441", - "email": "leah@unconix.com" - }, - { - "id": 2927, - "guid": "1e9bb84c-fb7b-4ba3-8072-bc99aa2fe705", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Winter", - "company": "Cryptotemplate", - "phone": "849-536-3367", - "email": "ella@cryptotemplate.com" - }, - { - "id": 2928, - "guid": "0d55e74d-9d54-4495-9a0f-0d30c8e2e447", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Wood", - "company": "Systheon", - "phone": "867-424-3415", - "email": "ashley@systheon.com" - }, - { - "id": 2929, - "guid": "1ed920b9-41d7-4fe6-a210-c0d2c8f9492a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe White", - "company": "Robotemplate", - "phone": "851-426-2549", - "email": "zoe@robotemplate.com" - }, - { - "id": 2930, - "guid": "9d6b05a4-b264-471e-ace0-bbd8ca64ece1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Thomson", - "company": "Gigaura", - "phone": "808-495-3331", - "email": "sophia@gigaura.com" - }, - { - "id": 2931, - "guid": "bb7e869a-3c38-449d-8ec4-cad6d8a7caac", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Nelson", - "company": "Videobanc", - "phone": "858-520-3580", - "email": "katelyn@videobanc.com" - }, - { - "id": 2932, - "guid": "4549649d-a19f-48dc-abd9-fa882146a3f0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna WifKinson", - "company": "OpKeycomm", - "phone": "881-545-3222", - "email": "gianna@opkeycomm.com" - }, - { - "id": 2933, - "guid": "a70cde08-1f05-4133-9291-c7a0086dd82f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Hancock", - "company": "Aprama", - "phone": "855-478-2156", - "email": "charlotte@aprama.com" - }, - { - "id": 2934, - "guid": "6686d4ad-01af-4b51-8fb2-66f815718513", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Cook", - "company": "Videobanc", - "phone": "891-478-2916", - "email": "madeline@videobanc.com" - }, - { - "id": 2935, - "guid": "c6cde3b9-2083-498c-b7bf-8e2709b51c39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Brooks", - "company": "Multitiqua", - "phone": "809-544-2794", - "email": "eva@multitiqua.com" - }, - { - "id": 2936, - "guid": "3eb52efe-1e56-423c-89e5-c22d681b69d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophie Oldman", - "company": "Keytheon", - "phone": "826-599-2681", - "email": "sophie@keytheon.com" - }, - { - "id": 2937, - "guid": "423ffe3e-c689-4bd8-a55c-e239595b131d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Gardner", - "company": "Robotomic", - "phone": "857-461-2064", - "email": "faith@robotomic.com" - }, - { - "id": 2938, - "guid": "ece48f3d-9633-44e3-b7a3-6ca548e4819a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lily Sherlock", - "company": "Textiqua", - "phone": "899-493-2866", - "email": "lily@textiqua.com" - }, - { - "id": 2939, - "guid": "0ac303f0-4d98-439e-8b9e-f61c6b3de167", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Ford", - "company": "Robocomm", - "phone": "892-516-2921", - "email": "evelyn@robocomm.com" - }, - { - "id": 2940, - "guid": "edce93e4-7e68-49c0-9757-69cd16252fa2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Timmons", - "company": "Transtouch", - "phone": "832-438-2928", - "email": "serenity@transtouch.com" - }, - { - "id": 2941, - "guid": "5e6296d5-d19e-4580-b006-7bd52a180906", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Young", - "company": "eSteganoergy", - "phone": "879-409-2516", - "email": "riley@esteganoergy.com" - }, - { - "id": 2942, - "guid": "43a43b23-368f-4a03-b792-4b5c5147d81c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Mercer", - "company": "Openserve", - "phone": "881-583-3581", - "email": "kaylee@openserve.com" - }, - { - "id": 2943, - "guid": "f6162665-67cb-434f-8088-8bd4cb9fc0f3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Charlson", - "company": "Aluco", - "phone": "886-529-3131", - "email": "grace@aluco.com" - }, - { - "id": 2944, - "guid": "972b08f9-7aa8-4334-8b00-cee7e42350a0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Wainwright", - "company": "iQualcar", - "phone": "873-533-2394", - "email": "sydney@iqualcar.com" - }, - { - "id": 2945, - "guid": "fc9c9523-9a8a-45c4-ac25-24bb7dff150a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Brooks", - "company": "Anaframe", - "phone": "864-585-3019", - "email": "julia@anaframe.com" - }, - { - "id": 2946, - "guid": "c986ce9d-d675-464f-bd5c-0a9a27dd641f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Miers", - "company": "Westmedia", - "phone": "848-492-3619", - "email": "molly@westmedia.com" - }, - { - "id": 2947, - "guid": "f85c9535-5d6a-4b64-a8ee-3fecd0a2754b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Walkman", - "company": "Proline", - "phone": "890-481-3054", - "email": "maya@proline.com" - }, - { - "id": 2948, - "guid": "4dd41c6b-66fa-4b97-8a53-7cc0f3da1eef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Hawkins", - "company": "Teknoplexon", - "phone": "848-550-3939", - "email": "gianna@teknoplexon.com" - }, - { - "id": 2949, - "guid": "d7e0d03c-6127-49e7-b37b-b7c29297858d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Hamphrey", - "company": "Venconix", - "phone": "819-575-3687", - "email": "savannah@venconix.com" - }, - { - "id": 2950, - "guid": "39afb8fe-df35-4bea-a593-960523f748c6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Gilbert", - "company": "Westmedia", - "phone": "847-596-2629", - "email": "jasmine@westmedia.com" - }, - { - "id": 2951, - "guid": "8f02c3f1-3d54-4743-b451-606e320356d6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Higgins", - "company": "Rapigrafix", - "phone": "808-409-3523", - "email": "madison@rapigrafix.com" - }, - { - "id": 2952, - "guid": "a31e5dfd-74f1-49c6-91c6-de51f2ff8078", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Higgins", - "company": "Fibrotouch", - "phone": "885-445-3011", - "email": "sophie@fibrotouch.com" - }, - { - "id": 2953, - "guid": "011c1bac-ae71-44dc-84d7-4756f2ba8b0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Creighton", - "company": "Technogra", - "phone": "881-459-2541", - "email": "ava@technogra.com" - }, - { - "id": 2954, - "guid": "743d5d5b-6baf-4169-aa00-ed71feef024e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Oldridge", - "company": "Technogra", - "phone": "878-506-3184", - "email": "peyton@technogra.com" - }, - { - "id": 2955, - "guid": "0b03e27f-b392-4730-89de-660db24b6d1f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Gilmore", - "company": "Enlogia", - "phone": "816-436-2007", - "email": "khloe@enlogia.com" - }, - { - "id": 2956, - "guid": "81184b01-b7d2-457c-8909-8d61e91e8041", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Oldman", - "company": "eSteganoergy", - "phone": "818-488-2299", - "email": "sarah@esteganoergy.com" - }, - { - "id": 2957, - "guid": "404200f0-67bc-4c1d-ad37-4eef31cb8205", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Gill", - "company": "Videobanc", - "phone": "824-598-3532", - "email": "natalie@videobanc.com" - }, - { - "id": 2958, - "guid": "5b4350cb-6434-4c69-a2aa-b788a3e1c789", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ella Ford", - "company": "Westmedia", - "phone": "855-505-3223", - "email": "ella@westmedia.com" - }, - { - "id": 2959, - "guid": "f25b2cf5-baaf-4b55-838a-45f14c734598", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Milton", - "company": "Netseco", - "phone": "860-551-3514", - "email": "mia@netseco.com" - }, - { - "id": 2960, - "guid": "4fa391a6-5909-49ec-a51e-209816c3eea1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Samantha Higgins", - "company": "Westmedia", - "phone": "875-499-2710", - "email": "samantha@westmedia.com" - }, - { - "id": 2961, - "guid": "8783be0d-94cc-41e2-8659-38d034e117b4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Chesterton", - "company": "Xeicon", - "phone": "807-498-3071", - "email": "anna@xeicon.com" - }, - { - "id": 2962, - "guid": "d2e5e278-1529-4fb7-852e-44a6a06af53a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Carter", - "company": "iSkyvaco", - "phone": "899-429-2151", - "email": "ariana@iskyvaco.com" - }, - { - "id": 2963, - "guid": "d35953b6-4125-4296-9680-54fc0ede727c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Timmons", - "company": "Aluco", - "phone": "816-533-3661", - "email": "samantha@aluco.com" - }, - { - "id": 2964, - "guid": "c379d2d1-8757-4d6a-9dc5-9c9d29438f61", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Fulton", - "company": "Conotomics", - "phone": "890-470-2067", - "email": "serenity@conotomics.com" - }, - { - "id": 2965, - "guid": "3f58aa5c-6673-489e-a6c6-4d2bee6d9845", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Adamson", - "company": "Dynarama", - "phone": "824-488-3877", - "email": "kylie@dynarama.com" - }, - { - "id": 2966, - "guid": "18eb92c0-87cb-4ab7-aef6-51394ab84d19", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Audrey Murphy", - "company": "Thermotomic", - "phone": "830-421-3014", - "email": "audrey@thermotomic.com" - }, - { - "id": 2967, - "guid": "2c1ff0c4-1bd4-4bd8-8ae8-f9d0c9ba48ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Milton", - "company": "Netsystems", - "phone": "886-436-3559", - "email": "lauren@netsystems.com" - }, - { - "id": 2968, - "guid": "49474320-dcc9-4cc8-926a-378dfa6b9057", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Oldman", - "company": "Truetomic", - "phone": "838-490-2733", - "email": "natalie@truetomic.com" - }, - { - "id": 2969, - "guid": "a7e138c5-4c92-4202-a467-57e069281490", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Miln", - "company": "Robotemplate", - "phone": "854-517-2036", - "email": "elizabeth@robotemplate.com" - }, - { - "id": 2970, - "guid": "5d58a34a-51ea-48a7-83ea-66e625625603", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaitlyn Nash", - "company": "Nanobanc", - "phone": "803-578-3216", - "email": "kaitlyn@nanobanc.com" - }, - { - "id": 2971, - "guid": "26b4216f-cedf-4a1d-941d-fcb18557d8c8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaitlyn Molligan", - "company": "Interliant", - "phone": "894-428-3568", - "email": "kaitlyn@interliant.com" - }, - { - "id": 2972, - "guid": "3e79a2aa-2755-4f1e-94f9-a2bc8fe9be07", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Neal", - "company": "Thermotomic", - "phone": "805-464-3066", - "email": "bailey@thermotomic.com" - }, - { - "id": 2973, - "guid": "a4361f4e-270f-46a4-a625-1e290a68c64a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Carroll", - "company": "Robotomic", - "phone": "831-409-2612", - "email": "alyssa@robotomic.com" - }, - { - "id": 2974, - "guid": "992db7b1-9dbe-4a7a-b86d-16267ef777d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Brooks", - "company": "Steganoconiche", - "phone": "855-499-2813", - "email": "jocelyn@steganoconiche.com" - }, - { - "id": 2975, - "guid": "7749035c-3811-41e7-9227-82a89fba932a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Michaelson", - "company": "Sontopia", - "phone": "836-522-2681", - "email": "sydney@sontopia.com" - }, - { - "id": 2976, - "guid": "9b165204-45eb-42eb-938e-46a37423ff46", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Bush", - "company": "Technogra", - "phone": "801-497-3663", - "email": "amelia@technogra.com" - }, - { - "id": 2977, - "guid": "d58a5326-d68d-4abc-b075-23b75031973b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Charlson", - "company": "Proline", - "phone": "824-427-3175", - "email": "jasmine@proline.com" - }, - { - "id": 2978, - "guid": "b37374a4-ea9c-44af-ab3d-d7d33fa19870", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Chapman", - "company": "Syssoft", - "phone": "815-449-2775", - "email": "anna@syssoft.com" - }, - { - "id": 2979, - "guid": "70fc1b09-7a9f-4c32-96c4-1445592693bc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Gerald", - "company": "Inridium", - "phone": "844-583-3656", - "email": "natalie@inridium.com" - }, - { - "id": 2980, - "guid": "d14c1f48-3405-4456-996a-ae4e2a408b9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Watson", - "company": "Turbomart", - "phone": "879-520-3823", - "email": "gabrielle@turbomart.com" - }, - { - "id": 2981, - "guid": "2dd2dae5-f410-4555-928e-70d7365db358", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Chandter", - "company": "Netseco", - "phone": "877-434-2769", - "email": "lillian@netseco.com" - }, - { - "id": 2982, - "guid": "dc5b2a44-fcde-4b55-9099-a1f8d92de923", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Chandter", - "company": "Robotemplate", - "phone": "880-406-2480", - "email": "riley@robotemplate.com" - }, - { - "id": 2983, - "guid": "2a1d71a9-5404-4da0-ac6b-1d319f857466", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Miers", - "company": "Techtron", - "phone": "864-531-2435", - "email": "alyssa@techtron.com" - }, - { - "id": 2984, - "guid": "beb1093f-02d4-4f77-b067-292844aef6ae", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Timmons", - "company": "Jamconik", - "phone": "865-494-3658", - "email": "samantha@jamconik.com" - }, - { - "id": 2985, - "guid": "7a1e6ef3-be91-41da-88bb-f535a0d5c3cd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Mercer", - "company": "Teratopia", - "phone": "835-526-3625", - "email": "katelyn@teratopia.com" - }, - { - "id": 2986, - "guid": "2d571d05-ddc4-4dcd-8556-8b5962f489ae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Chapman", - "company": "Transtouch", - "phone": "845-434-3172", - "email": "isabella@transtouch.com" - }, - { - "id": 2987, - "guid": "3c613582-1133-4e42-b199-895cde67af27", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Abramson", - "company": "Titanigraf", - "phone": "860-451-3830", - "email": "melanie@titanigraf.com" - }, - { - "id": 2988, - "guid": "f598282b-0001-41b4-a1da-d518afb3deae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brianna Carroll", - "company": "Titanigraf", - "phone": "883-570-3015", - "email": "brianna@titanigraf.com" - }, - { - "id": 2989, - "guid": "2e73ddda-fb21-4a5d-94e2-36543c00d570", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Gilson", - "company": "Dynarama", - "phone": "867-519-3188", - "email": "leah@dynarama.com" - }, - { - "id": 2990, - "guid": "5c443f5f-b183-4269-afcb-e9967e1fe64d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Wainwright", - "company": "InfoAirway", - "phone": "825-432-3096", - "email": "kylie@infoairway.com" - }, - { - "id": 2991, - "guid": "80220334-8ae5-446f-88b7-ce996636cbd7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Chesterton", - "company": "US Omnigraphik", - "phone": "846-573-2479", - "email": "bella@us omnigraphik.com" - }, - { - "id": 2992, - "guid": "e48da050-2413-4156-bb80-e4f1429a62f8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Grace Mercer", - "company": "Quintegrity", - "phone": "880-477-3271", - "email": "grace@quintegrity.com" - }, - { - "id": 2993, - "guid": "bea0cece-5f63-4965-84f8-78faf36856b9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Crossman", - "company": "Qualserve", - "phone": "841-472-3145", - "email": "savannah@qualserve.com" - }, - { - "id": 2994, - "guid": "e184556f-c30e-4f32-956b-1ad4c66008c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Gerald", - "company": "Nanobanc", - "phone": "827-428-3290", - "email": "faith@nanobanc.com" - }, - { - "id": 2995, - "guid": "2fa65441-d71e-4439-90c1-a4e176fc738a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Wood", - "company": "OpKeycomm", - "phone": "818-439-3296", - "email": "samantha@opkeycomm.com" - }, - { - "id": 2996, - "guid": "bf0ad451-8a0c-4db0-8943-4bf7eea38486", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah WifKinson", - "company": "OpKeycomm", - "phone": "899-544-3045", - "email": "savannah@opkeycomm.com" - }, - { - "id": 2997, - "guid": "bb02ad05-670b-40a2-958a-0a3fe42518ab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Nathan", - "company": "Teraserv", - "phone": "853-469-3626", - "email": "caroline@teraserv.com" - }, - { - "id": 2998, - "guid": "dbb4707f-c022-4804-b23e-c082c5a073f0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Davidson", - "company": "Superscope", - "phone": "815-539-2766", - "email": "addison@superscope.com" - }, - { - "id": 2999, - "guid": "20a111b3-e37c-42e1-9a1c-11be64c6314b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Crossman", - "company": "Fibroserve", - "phone": "867-592-3362", - "email": "ashley@fibroserve.com" - }, - { - "id": 3000, - "guid": "16cb18d1-0eca-46ec-991f-d0afee0db000", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Adamson", - "company": "Tekcar", - "phone": "870-518-2471", - "email": "arianna@tekcar.com" - }, - { - "id": 3001, - "guid": "cbe3e549-17b7-4a83-9852-e92774696e6d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Hamphrey", - "company": "Keytheon", - "phone": "844-472-3829", - "email": "khloe@keytheon.com" - }, - { - "id": 3002, - "guid": "e380c1d7-40da-4fd9-a373-31bb38d1ba7e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny Hodges", - "company": "Hypervaco", - "phone": "881-551-2227", - "email": "destiny@hypervaco.com" - }, - { - "id": 3003, - "guid": "36a9ea72-1795-45fa-8b71-9944ecad6b05", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Oldman", - "company": "Techtron", - "phone": "887-462-3737", - "email": "serenity@techtron.com" - }, - { - "id": 3004, - "guid": "51aecd88-536c-4288-ae63-e55ec025a12e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Wainwright", - "company": "Venconix", - "phone": "820-485-3103", - "email": "savannah@venconix.com" - }, - { - "id": 3005, - "guid": "77e96fc4-6db5-4bde-8481-210e0839e21d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maya Gill", - "company": "Techtron", - "phone": "888-590-2714", - "email": "maya@techtron.com" - }, - { - "id": 3006, - "guid": "65cdeb33-6967-40fc-aa90-d8a7be8b17dc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Neal", - "company": "Westgate", - "phone": "834-400-2550", - "email": "addison@westgate.com" - }, - { - "id": 3007, - "guid": "7ebc28b6-8d48-413f-821d-c33770a197e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gill", - "company": "Titanirola", - "phone": "843-475-3518", - "email": "lauren@titanirola.com" - }, - { - "id": 3008, - "guid": "92dfc258-96bf-4d9e-be0c-148dbf35477d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Warren", - "company": "Allnet", - "phone": "802-544-3015", - "email": "madelyn@allnet.com" - }, - { - "id": 3009, - "guid": "5ef76075-5d40-4cad-953f-fba370ce53fa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney White", - "company": "Enlogia", - "phone": "843-516-3271", - "email": "sydney@enlogia.com" - }, - { - "id": 3010, - "guid": "04594563-4d6f-4f4b-9a3c-a4092f6d0973", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Webster", - "company": "Robotomic", - "phone": "836-425-3583", - "email": "kylie@robotomic.com" - }, - { - "id": 3011, - "guid": "417eff04-80cc-40bc-bc76-0df2ba6cec3c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Bush", - "company": "Inridium", - "phone": "897-430-3318", - "email": "morgan@inridium.com" - }, - { - "id": 3012, - "guid": "398da014-d642-4204-9fe5-0777e73f28ed", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Miln", - "company": "Truetomic", - "phone": "805-563-2942", - "email": "madison@truetomic.com" - }, - { - "id": 3013, - "guid": "22776bde-e5f0-4311-bdea-8d4cb667c2a8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Hodges", - "company": "Truetomic", - "phone": "842-433-2792", - "email": "elizabeth@truetomic.com" - }, - { - "id": 3014, - "guid": "d9e39829-2626-416b-bb65-c6472eb1b138", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Sherlock", - "company": "Polytheon", - "phone": "813-492-2081", - "email": "allison@polytheon.com" - }, - { - "id": 3015, - "guid": "9aa60c6a-eccd-4193-8ef2-34dc1cdf15c9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Adamson", - "company": "Westmedia", - "phone": "865-513-3277", - "email": "kaitlyn@westmedia.com" - }, - { - "id": 3016, - "guid": "69ecdd2d-f9e3-43b8-b978-97f859e0c67e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Brown", - "company": "Anaframe", - "phone": "870-559-3385", - "email": "chloe@anaframe.com" - }, - { - "id": 3017, - "guid": "1101810c-014f-4e05-a347-60e8a85d4b9c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Oliver", - "company": "Polytheon", - "phone": "875-479-3024", - "email": "taylor@polytheon.com" - }, - { - "id": 3018, - "guid": "2fbeb03e-1f7b-46aa-94dc-3bf8f54af0ba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Murphy", - "company": "Proline", - "phone": "803-433-2906", - "email": "ashley@proline.com" - }, - { - "id": 3019, - "guid": "764e25b3-7b76-493b-91c5-91608666536a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madeline Hoggarth", - "company": "Technogra", - "phone": "817-563-2239", - "email": "madeline@technogra.com" - }, - { - "id": 3020, - "guid": "561c0bbf-00ab-4011-8469-020a312d1728", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ava Milton", - "company": "Rapigrafix", - "phone": "879-460-2770", - "email": "ava@rapigrafix.com" - }, - { - "id": 3021, - "guid": "5df6a037-79cc-412d-8248-66062eed5438", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Chesterton", - "company": "Openserve", - "phone": "839-502-2429", - "email": "victoria@openserve.com" - }, - { - "id": 3022, - "guid": "11206a09-6245-4950-98fe-d24b16762906", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Smith", - "company": "Interliant", - "phone": "865-422-3821", - "email": "riley@interliant.com" - }, - { - "id": 3023, - "guid": "0c398530-6880-4ddc-be06-84af62935e9b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Nash", - "company": "OpKeycomm", - "phone": "812-436-2573", - "email": "sophia@opkeycomm.com" - }, - { - "id": 3024, - "guid": "c2d309d9-32fc-40bf-a533-d74f566747d8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Higgins", - "company": "iQualcar", - "phone": "877-416-3254", - "email": "sophie@iqualcar.com" - }, - { - "id": 3025, - "guid": "fdd11037-818b-4bcb-bb95-5ab796488e1b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Thomson", - "company": "Skydata", - "phone": "844-581-3197", - "email": "madelyn@skydata.com" - }, - { - "id": 3026, - "guid": "8b1a2ed2-0a76-424a-8a48-4c3b032e81f2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Carter", - "company": "Infragraph", - "phone": "841-446-3935", - "email": "allison@infragraph.com" - }, - { - "id": 3027, - "guid": "9045bfb1-b73d-4051-bc9e-ef6eee365268", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Oswald", - "company": "Enlogia", - "phone": "832-485-2189", - "email": "eva@enlogia.com" - }, - { - "id": 3028, - "guid": "b6115f6c-1301-443a-a61f-8f13a5696d24", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Thorndike", - "company": "Robocomm", - "phone": "855-493-3247", - "email": "genesis@robocomm.com" - }, - { - "id": 3029, - "guid": "45a3c1b6-8cdc-4b8c-b950-4bbf73ccea0e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Haig", - "company": "Steganoconiche", - "phone": "836-468-3154", - "email": "katelyn@steganoconiche.com" - }, - { - "id": 3030, - "guid": "7b48d160-d313-4276-aae9-0f68d1185601", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Hodges", - "company": "Airdyne", - "phone": "871-454-3157", - "email": "madison@airdyne.com" - }, - { - "id": 3031, - "guid": "c5e6240e-d11a-44d0-bfc7-8f261de2cb6b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Wainwright", - "company": "Proline", - "phone": "805-448-3156", - "email": "kaylee@proline.com" - }, - { - "id": 3032, - "guid": "99f93339-ff29-4f0e-97d7-3aa2d3ddda11", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Goldman", - "company": "iQualcar", - "phone": "802-540-3749", - "email": "savannah@iqualcar.com" - }, - { - "id": 3033, - "guid": "f17e1f6e-a4f2-4dc9-8ada-4cc0114396bd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Oliver", - "company": "Fibrotopia", - "phone": "883-450-2646", - "email": "serenity@fibrotopia.com" - }, - { - "id": 3034, - "guid": "224da4e4-dd68-4ced-87e7-ffe51d326023", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Caroline Goldman", - "company": "Anaframe", - "phone": "864-470-2982", - "email": "caroline@anaframe.com" - }, - { - "id": 3035, - "guid": "88b596ed-7ced-47e9-8bb0-23a62a2835d5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Hancock", - "company": "Anaframe", - "phone": "881-434-3742", - "email": "kaylee@anaframe.com" - }, - { - "id": 3036, - "guid": "57b2c68b-0591-46e2-9d31-83f883c437ca", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Oliver", - "company": "Entcast", - "phone": "825-553-3342", - "email": "eva@entcast.com" - }, - { - "id": 3037, - "guid": "a1ca8ff6-e4b4-40de-b4fb-5088387bb058", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Warren", - "company": "Fibrotopia", - "phone": "862-551-2882", - "email": "angelina@fibrotopia.com" - }, - { - "id": 3038, - "guid": "12461b0b-0ae6-4040-a6b2-ebcd903c52e2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Oswald", - "company": "Truetomic", - "phone": "898-584-2094", - "email": "bella@truetomic.com" - }, - { - "id": 3039, - "guid": "d673c69f-3c2f-425d-8081-196b4d9b0322", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Winter", - "company": "Pericenta", - "phone": "885-438-2839", - "email": "eva@pericenta.com" - }, - { - "id": 3040, - "guid": "d734efef-feca-464e-8f6e-5981eaf188ab", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Gustman", - "company": "Rapigrafix", - "phone": "884-435-2360", - "email": "angelina@rapigrafix.com" - }, - { - "id": 3041, - "guid": "831c4b84-b315-4c7d-929e-d884e1b74d83", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Waller", - "company": "Idmax", - "phone": "803-467-3917", - "email": "sofia@idmax.com" - }, - { - "id": 3042, - "guid": "1806f566-e81d-4dfa-801d-ac84efc22c36", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Oldman", - "company": "Teraserv", - "phone": "854-407-3453", - "email": "sarah@teraserv.com" - }, - { - "id": 3043, - "guid": "433f55f8-eeea-4453-8d30-d34bcfbd6227", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophia Brown", - "company": "Idmax", - "phone": "832-496-3361", - "email": "sophia@idmax.com" - }, - { - "id": 3044, - "guid": "c44a42b0-c7b4-4708-b880-0e1cb512c445", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Morrison", - "company": "Vencom", - "phone": "806-478-3893", - "email": "addison@vencom.com" - }, - { - "id": 3045, - "guid": "671c9257-ea58-459c-b790-b0cac42bdbfa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Carter", - "company": "Orthosoft", - "phone": "847-463-2658", - "email": "emma@orthosoft.com" - }, - { - "id": 3046, - "guid": "5edf16f5-7c6d-4c6c-9944-1b7cfdcdde65", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Young", - "company": "Fibrotopia", - "phone": "848-468-2363", - "email": "payton@fibrotopia.com" - }, - { - "id": 3047, - "guid": "d1c6cd70-e6fb-49a0-b836-8683ad12539a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Fulton", - "company": "Techtron", - "phone": "884-495-2299", - "email": "sophia@techtron.com" - }, - { - "id": 3048, - "guid": "c8bb6dbd-9a92-4fdd-b0b7-5e14c7f71fed", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Gill", - "company": "Mescaridic", - "phone": "823-507-3922", - "email": "isabelle@mescaridic.com" - }, - { - "id": 3049, - "guid": "771700a3-28d1-4e16-911c-2a4de05b5458", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Hancock", - "company": "Textiqua", - "phone": "889-483-2282", - "email": "alexis@textiqua.com" - }, - { - "id": 3050, - "guid": "f7323cc6-b9f4-4209-9c79-b632e24bfc90", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Gilmore", - "company": "Celgra", - "phone": "845-584-3101", - "email": "brooke@celgra.com" - }, - { - "id": 3051, - "guid": "1d50fd4e-d398-43b3-80a8-6855ce83582d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Gardner", - "company": "Pericenta", - "phone": "841-546-3067", - "email": "victoria@pericenta.com" - }, - { - "id": 3052, - "guid": "382f47c4-22c2-4c57-a82c-33d227a1392e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Chesterton", - "company": "Interliant", - "phone": "876-549-3900", - "email": "avery@interliant.com" - }, - { - "id": 3053, - "guid": "b4936ec9-343f-4be4-8fe9-112a47be13d6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Freeman", - "company": "Inridium", - "phone": "804-445-3220", - "email": "aubrey@inridium.com" - }, - { - "id": 3054, - "guid": "5cb04c64-4a0e-4fe3-a02a-c8875ea7b62c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Stanley", - "company": "Pericenta", - "phone": "881-447-4000", - "email": "elizabeth@pericenta.com" - }, - { - "id": 3055, - "guid": "386e18c3-8915-4e8e-aa8d-a14462b8b937", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Morgan Gustman", - "company": "SysVenamerica", - "phone": "830-529-2903", - "email": "morgan@sysvenamerica.com" - }, - { - "id": 3056, - "guid": "14aef245-0e31-4a1b-96ee-8ca80e7f2062", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Gibbs", - "company": "Cryptotemplate", - "phone": "839-469-2381", - "email": "mia@cryptotemplate.com" - }, - { - "id": 3057, - "guid": "0e057193-7762-4bc5-ab1d-9aee19d6cd23", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Brown", - "company": "US Infratouch", - "phone": "886-403-2427", - "email": "isabella@us infratouch.com" - }, - { - "id": 3058, - "guid": "81065838-b3e4-463c-9f4f-0b922e836c5b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Hancock", - "company": "Allnet", - "phone": "840-478-2236", - "email": "julia@allnet.com" - }, - { - "id": 3059, - "guid": "448cbe0b-0828-40e2-b928-53c6152dd357", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace Gardner", - "company": "Titanigraf", - "phone": "835-458-2045", - "email": "grace@titanigraf.com" - }, - { - "id": 3060, - "guid": "0af0134d-5d1a-4cee-b2bb-8cbb800ec17c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Miln", - "company": "Polytheon", - "phone": "899-496-2683", - "email": "isabelle@polytheon.com" - }, - { - "id": 3061, - "guid": "cb741984-59ab-4584-a052-add217331bd3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Amelia Youmans", - "company": "Aprama", - "phone": "854-504-2216", - "email": "amelia@aprama.com" - }, - { - "id": 3062, - "guid": "ed99376d-dfe8-44a7-91fc-e54e5edea4cc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Wayne", - "company": "iQualcar", - "phone": "884-476-3802", - "email": "katherine@iqualcar.com" - }, - { - "id": 3063, - "guid": "7a6794bb-5934-4944-979a-84fdc47fd38d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Samantha Goodman", - "company": "Indisco", - "phone": "806-561-2777", - "email": "samantha@indisco.com" - }, - { - "id": 3064, - "guid": "ede7d9dd-5ddc-4324-937b-c7ec1c39acef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Owen", - "company": "Venconix", - "phone": "824-499-2375", - "email": "claire@venconix.com" - }, - { - "id": 3065, - "guid": "a9d5967d-19c5-4ef6-8db5-3f050cd35756", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ariana Crossman", - "company": "Orthomedia", - "phone": "866-571-2755", - "email": "ariana@orthomedia.com" - }, - { - "id": 3066, - "guid": "89c72f46-2ab2-496a-b9e2-75e7ad92206a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Mercer", - "company": "Pericenta", - "phone": "874-554-2931", - "email": "isabelle@pericenta.com" - }, - { - "id": 3067, - "guid": "11a0c5c4-63f0-40d7-ba60-fa43580498ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Audrey Gill", - "company": "Mescatron", - "phone": "889-520-2888", - "email": "audrey@mescatron.com" - }, - { - "id": 3068, - "guid": "261f43dd-b107-40c1-98a9-d5da9ac9f8c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alyssa Ward", - "company": "Navivacs", - "phone": "808-416-3531", - "email": "alyssa@navivacs.com" - }, - { - "id": 3069, - "guid": "d9a35e8a-03b7-4bbf-aa53-bb61e03c6733", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Morrison", - "company": "Anaframe", - "phone": "854-482-2454", - "email": "taylor@anaframe.com" - }, - { - "id": 3070, - "guid": "d09ebf47-0b4b-4e4a-97d1-f8b410d70fb6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Oldman", - "company": "eEyetanic", - "phone": "811-438-3315", - "email": "brooklyn@eeyetanic.com" - }, - { - "id": 3071, - "guid": "44efcb7f-d9c7-41ca-b75c-c7356dad7417", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia WifKinson", - "company": "Superscope", - "phone": "868-436-2578", - "email": "julia@superscope.com" - }, - { - "id": 3072, - "guid": "96fc96f3-e443-4109-809d-9fd54e0c9350", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Vance", - "company": "Rapigrafix", - "phone": "863-540-2569", - "email": "caroline@rapigrafix.com" - }, - { - "id": 3073, - "guid": "1ad12343-37d8-4bc0-8f1c-bd23d4477de9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Gibbs", - "company": "Systheon", - "phone": "870-457-2514", - "email": "maria@systheon.com" - }, - { - "id": 3074, - "guid": "80cd6c66-835a-42a4-8bc7-0ca03e92e6e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Hamphrey", - "company": "US Infratouch", - "phone": "858-400-2968", - "email": "lauren@us infratouch.com" - }, - { - "id": 3075, - "guid": "6fd8080b-6f11-4a5d-a8e8-ba417d223bed", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Goldman", - "company": "Generola", - "phone": "882-554-2306", - "email": "morgan@generola.com" - }, - { - "id": 3076, - "guid": "87f317b5-a87b-4985-b86b-9b598c25c5d8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Milton", - "company": "Safeagra", - "phone": "870-433-3724", - "email": "ava@safeagra.com" - }, - { - "id": 3077, - "guid": "e26408fe-426a-494a-b594-6766bd6a5ff7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Harrison", - "company": "Celgra", - "phone": "831-545-2488", - "email": "avery@celgra.com" - }, - { - "id": 3078, - "guid": "6e12d48b-098b-4c86-81a6-2613440074b4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Molligan", - "company": "Conotomics", - "phone": "861-545-2079", - "email": "ashley@conotomics.com" - }, - { - "id": 3079, - "guid": "c4dffce2-67bb-44b9-8820-88de4c770ef5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Neal", - "company": "Qualserve", - "phone": "899-499-2499", - "email": "andrea@qualserve.com" - }, - { - "id": 3080, - "guid": "cb2d52b8-2c48-4fae-87c2-f2c896cfb9a9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sarah Gibbs", - "company": "Rapigrafix", - "phone": "887-424-3275", - "email": "sarah@rapigrafix.com" - }, - { - "id": 3081, - "guid": "34e4046e-7ca6-4eac-91a1-1448620a6787", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Nathan", - "company": "eSteganoergy", - "phone": "837-563-2711", - "email": "mya@esteganoergy.com" - }, - { - "id": 3082, - "guid": "a09365af-5b22-4a1f-b811-c2e27f0ee17b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila Oldman", - "company": "Idmax", - "phone": "895-481-2087", - "email": "camila@idmax.com" - }, - { - "id": 3083, - "guid": "dae2b1dd-b694-4199-9048-1f2242df8dd3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Goodman", - "company": "Mescatron", - "phone": "887-593-3882", - "email": "alexis@mescatron.com" - }, - { - "id": 3084, - "guid": "6bcda81f-ccb0-4111-b8fe-07b9a8ac27ca", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Waller", - "company": "Generola", - "phone": "840-470-2592", - "email": "layla@generola.com" - }, - { - "id": 3085, - "guid": "54f52f6c-a83e-4be3-a385-80bf388e0dd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Nathan", - "company": "Turbomart", - "phone": "899-481-3137", - "email": "anna@turbomart.com" - }, - { - "id": 3086, - "guid": "6dd9c1b6-c1ca-4274-9b48-50b6c119fefe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Warren", - "company": "Netseco", - "phone": "847-408-3573", - "email": "avery@netseco.com" - }, - { - "id": 3087, - "guid": "255c3dbd-b35a-4237-aafc-f2156e1817b6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Miller", - "company": "Celgra", - "phone": "892-440-3998", - "email": "amelia@celgra.com" - }, - { - "id": 3088, - "guid": "2278a6bb-72d4-4b24-b135-1aa8ab49402e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Gustman", - "company": "Infraique", - "phone": "825-565-2971", - "email": "aaliyah@infraique.com" - }, - { - "id": 3089, - "guid": "468efe19-4d46-4998-ab9b-dd8cc07a5a10", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Bush", - "company": "Quintegrity", - "phone": "880-464-2007", - "email": "bella@quintegrity.com" - }, - { - "id": 3090, - "guid": "4a131fdd-aee3-42dc-99e9-504116a636df", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Gibbs", - "company": "Compuamerica", - "phone": "869-449-2959", - "email": "nevaeh@compuamerica.com" - }, - { - "id": 3091, - "guid": "7d245502-b736-4ecf-9c73-bb9d34591a98", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Hawkins", - "company": "Hypervaco", - "phone": "806-568-3542", - "email": "brianna@hypervaco.com" - }, - { - "id": 3092, - "guid": "850a5d20-029d-4974-8f58-620ef73c5515", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Carey", - "company": "Mescatron", - "phone": "814-421-3759", - "email": "brooklyn@mescatron.com" - }, - { - "id": 3093, - "guid": "92c84cd3-fa02-4bee-80ee-f77451a722db", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Timmons", - "company": "Polytheon", - "phone": "884-446-3926", - "email": "claire@polytheon.com" - }, - { - "id": 3094, - "guid": "a46c9d01-885d-4bb2-adc6-86ff8d6489b1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Gustman", - "company": "Infragraph", - "phone": "852-500-2529", - "email": "evelyn@infragraph.com" - }, - { - "id": 3095, - "guid": "fd793347-a930-4627-9d29-54b459d818d1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Daniels", - "company": "SysUSA", - "phone": "881-434-2298", - "email": "kaylee@sysusa.com" - }, - { - "id": 3096, - "guid": "a0fa6c81-39c1-4810-b248-120a466bbb14", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Higgins", - "company": "RoboAerlogix", - "phone": "879-427-3897", - "email": "trinity@roboaerlogix.com" - }, - { - "id": 3097, - "guid": "8eb5581c-df17-4856-beb6-f86ba695eddb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Brickman", - "company": "Techtron", - "phone": "881-516-2192", - "email": "taylor@techtron.com" - }, - { - "id": 3098, - "guid": "1ee3f8a0-d0e9-478b-94df-bc0e4fb4ced2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Ward", - "company": "Navivacs", - "phone": "842-494-2134", - "email": "evelyn@navivacs.com" - }, - { - "id": 3099, - "guid": "59d86534-f964-4f8a-8ec4-5f9d7701cc4c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Gate", - "company": "Indisco", - "phone": "804-536-3033", - "email": "alyssa@indisco.com" - }, - { - "id": 3100, - "guid": "8e732064-afbd-419b-8608-7bd11797a532", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Stanley", - "company": "Turbomart", - "phone": "852-563-3163", - "email": "jasmine@turbomart.com" - }, - { - "id": 3101, - "guid": "2f5a4372-e46f-4583-8b94-c0268da24e4a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria Hardman", - "company": "Venconix", - "phone": "874-518-3806", - "email": "maria@venconix.com" - }, - { - "id": 3102, - "guid": "5eaf4b23-1bc5-4df0-9722-f85eaa848f34", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Chesterton", - "company": "Enlogia", - "phone": "801-561-3671", - "email": "molly@enlogia.com" - }, - { - "id": 3103, - "guid": "8896fb4f-4b9c-48f4-b38c-0d591628e557", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney White", - "company": "Robotemplate", - "phone": "806-514-2437", - "email": "sydney@robotemplate.com" - }, - { - "id": 3104, - "guid": "7594e115-68c1-4b4b-9153-e07d8b85a7c2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kimberly Waller", - "company": "Teraserv", - "phone": "879-505-3615", - "email": "kimberly@teraserv.com" - }, - { - "id": 3105, - "guid": "e2900714-53cf-419c-9fe7-16d132ef7f21", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Thomson", - "company": "Tekcar", - "phone": "880-428-3002", - "email": "sophie@tekcar.com" - }, - { - "id": 3106, - "guid": "6000f0ba-20b6-43dd-935d-6646b231c746", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Oliver", - "company": "Westtomik", - "phone": "862-522-3714", - "email": "victoria@westtomik.com" - }, - { - "id": 3107, - "guid": "66638c62-f487-4ef4-afc6-1a0f9b1a6397", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Higgins", - "company": "Fibroserve", - "phone": "872-481-3948", - "email": "layla@fibroserve.com" - }, - { - "id": 3108, - "guid": "7ef7aa73-2a93-47ff-a48f-2bcd642bfbd7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Webster", - "company": "Robotemplate", - "phone": "898-532-2022", - "email": "gabrielle@robotemplate.com" - }, - { - "id": 3109, - "guid": "9a6d4f22-a908-4ebb-894c-b9d24e85547a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Goodman", - "company": "Syssoft", - "phone": "877-512-2453", - "email": "anna@syssoft.com" - }, - { - "id": 3110, - "guid": "bda5dccd-73a5-4763-aa21-15598f45efd0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Vaughan", - "company": "Xeicon", - "phone": "892-403-3013", - "email": "paige@xeicon.com" - }, - { - "id": 3111, - "guid": "76e5e57d-c215-4745-ac4e-6de2f34bf578", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Thomson", - "company": "Openserve", - "phone": "819-434-3515", - "email": "aubrey@openserve.com" - }, - { - "id": 3112, - "guid": "72498c66-146f-45a9-809b-e50ac1e68d23", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Brickman", - "company": "Polytheon", - "phone": "802-464-3865", - "email": "morgan@polytheon.com" - }, - { - "id": 3113, - "guid": "b95eec84-c7b3-4f84-9248-6de51b3d0365", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Haig", - "company": "Ameritron", - "phone": "818-573-3639", - "email": "hailey@ameritron.com" - }, - { - "id": 3114, - "guid": "33ab6b10-0f19-41f8-8874-e28be4ed5010", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Conors", - "company": "Robocomm", - "phone": "899-515-3249", - "email": "taylor@robocomm.com" - }, - { - "id": 3115, - "guid": "ddb597d3-6d07-41c6-b868-a7825f2aa398", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Campbell", - "company": "Rapigrafix", - "phone": "836-523-2494", - "email": "isabelle@rapigrafix.com" - }, - { - "id": 3116, - "guid": "388faabc-33fb-489e-b161-04de478967e1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Wood", - "company": "Raylog", - "phone": "891-480-2072", - "email": "abigail@raylog.com" - }, - { - "id": 3117, - "guid": "64a859c5-0f40-4b64-8693-144abd710e28", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Watson", - "company": "Westgate", - "phone": "840-575-2456", - "email": "makayla@westgate.com" - }, - { - "id": 3118, - "guid": "4100e8db-2ceb-476a-bb04-e7b4a07bde74", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aubrey Miller", - "company": "Robotomic", - "phone": "840-449-3340", - "email": "aubrey@robotomic.com" - }, - { - "id": 3119, - "guid": "3fcb9972-c3a8-4547-89d0-0884e0b07c5d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Cramer", - "company": "Idmax", - "phone": "864-526-2347", - "email": "hailey@idmax.com" - }, - { - "id": 3120, - "guid": "8ef38639-5ce6-44b6-ba23-6a2ce06b55a9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Conors", - "company": "Aprama", - "phone": "836-547-3930", - "email": "serenity@aprama.com" - }, - { - "id": 3121, - "guid": "243b1449-7d6f-4ebc-85ce-9cffcc8d79c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Galbraith", - "company": "Fibrotouch", - "phone": "812-446-3051", - "email": "payton@fibrotouch.com" - }, - { - "id": 3122, - "guid": "9e9ebfae-7bde-452a-a4e1-04cc08e86017", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Waller", - "company": "Netsystems", - "phone": "846-400-2185", - "email": "bailey@netsystems.com" - }, - { - "id": 3123, - "guid": "73e8e9d5-fd82-4a5c-a9cd-00923db7207a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Stanley", - "company": "Multitiqua", - "phone": "890-481-2591", - "email": "addison@multitiqua.com" - }, - { - "id": 3124, - "guid": "87d3d68f-135a-4df0-ad7f-9677be7f553e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Gate", - "company": "Interliant", - "phone": "844-479-3308", - "email": "eva@interliant.com" - }, - { - "id": 3125, - "guid": "d738ade9-1ae0-4cb1-9f91-3f791dc4cb80", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Oldman", - "company": "Jamrola", - "phone": "842-489-3322", - "email": "emily@jamrola.com" - }, - { - "id": 3126, - "guid": "c11f5a0e-049a-4107-8dc1-53d3b3f7f26b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Goldman", - "company": "Anaframe", - "phone": "899-443-3323", - "email": "katherine@anaframe.com" - }, - { - "id": 3127, - "guid": "418b72b7-6708-4623-9f2c-9767ac577312", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Claire Gilbert", - "company": "iOptystix", - "phone": "802-579-3701", - "email": "claire@ioptystix.com" - }, - { - "id": 3128, - "guid": "0a92ed84-97df-489c-8f1e-bc77f32705b8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia Carroll", - "company": "Mescaridic", - "phone": "820-443-3405", - "email": "sofia@mescaridic.com" - }, - { - "id": 3129, - "guid": "b5170b8a-38a1-45e3-89a7-48369d2ec57b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lillian Hodges", - "company": "Pacwest", - "phone": "880-436-2130", - "email": "lillian@pacwest.com" - }, - { - "id": 3130, - "guid": "4113b297-4cf3-46ba-b9df-08dc7948e9ce", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Goldman", - "company": "Robotomic", - "phone": "850-599-3646", - "email": "katelyn@robotomic.com" - }, - { - "id": 3131, - "guid": "39256e69-1140-4aba-99b7-e5ab8d960167", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Clapton", - "company": "Robocomm", - "phone": "865-551-3335", - "email": "hannah@robocomm.com" - }, - { - "id": 3132, - "guid": "c3776a77-8c5c-4988-889e-1005b8b39b9e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Chesterton", - "company": "Sontopia", - "phone": "885-511-3040", - "email": "riley@sontopia.com" - }, - { - "id": 3133, - "guid": "3d43c4c2-68ff-4abb-9cf4-91f6e6d5f6c2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila Oldman", - "company": "Proline", - "phone": "872-570-2871", - "email": "camila@proline.com" - }, - { - "id": 3134, - "guid": "01e9f2aa-ea85-4e6c-a640-3fb57ddcf568", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Oliver", - "company": "Ameritron", - "phone": "857-498-2917", - "email": "camila@ameritron.com" - }, - { - "id": 3135, - "guid": "83690dfc-621a-464f-8958-2e71941cbd9a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Genesis Sheldon", - "company": "Nanobanc", - "phone": "813-578-3838", - "email": "genesis@nanobanc.com" - }, - { - "id": 3136, - "guid": "625af293-ac39-4853-b3db-65027e663fb9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Otis", - "company": "iQualcar", - "phone": "848-494-3163", - "email": "genesis@iqualcar.com" - }, - { - "id": 3137, - "guid": "aeaa1981-ecf2-499a-8ba4-41d8ba54358b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Day", - "company": "Polytheon", - "phone": "873-532-2466", - "email": "aaliyah@polytheon.com" - }, - { - "id": 3138, - "guid": "1329b11b-0481-46b9-899f-b8f858ffbd96", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Turner", - "company": "Unconix", - "phone": "895-529-2902", - "email": "faith@unconix.com" - }, - { - "id": 3139, - "guid": "85b2f86c-c4e7-492a-b585-12c499210fb2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Neal", - "company": "Polytheon", - "phone": "816-404-2320", - "email": "emily@polytheon.com" - }, - { - "id": 3140, - "guid": "27a347d8-deb5-4e32-8fbe-79d24885ae7b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Carter", - "company": "Gigaura", - "phone": "853-577-3706", - "email": "samantha@gigaura.com" - }, - { - "id": 3141, - "guid": "a6f4d7fd-cc1c-4e22-91ba-c3ad62d6773a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Adamson", - "company": "Xeicon", - "phone": "816-598-2496", - "email": "sofia@xeicon.com" - }, - { - "id": 3142, - "guid": "529b6f3e-5f6a-49f2-8f11-5e875eca3a8a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jocelyn Haig", - "company": "Technogra", - "phone": "884-558-3102", - "email": "jocelyn@technogra.com" - }, - { - "id": 3143, - "guid": "cf476ba7-fd70-4c36-acc2-857964bb27f0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Gilson", - "company": "US Omnigraphik", - "phone": "892-481-2977", - "email": "charlotte@us omnigraphik.com" - }, - { - "id": 3144, - "guid": "8bf9a5e2-c569-458c-8250-edda1bbfeaa3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Winter", - "company": "InfoAirway", - "phone": "880-551-2869", - "email": "mariah@infoairway.com" - }, - { - "id": 3145, - "guid": "f55180e8-c5d3-46a7-8eb9-3eb7333c954d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Freeman", - "company": "Teratopia", - "phone": "871-432-3555", - "email": "mia@teratopia.com" - }, - { - "id": 3146, - "guid": "e74f4a4d-9b30-4cf1-b042-c7a69c109588", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Clapton", - "company": "Teratopia", - "phone": "830-586-3087", - "email": "zoe@teratopia.com" - }, - { - "id": 3147, - "guid": "0ca896b8-e01b-4ede-ac2f-e4a37cf9c0fb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Oldman", - "company": "Robotomic", - "phone": "865-536-2516", - "email": "payton@robotomic.com" - }, - { - "id": 3148, - "guid": "6b0c45fd-a650-4eb6-be54-c456c47e368a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Oliver", - "company": "Fibrotouch", - "phone": "840-470-3563", - "email": "anna@fibrotouch.com" - }, - { - "id": 3149, - "guid": "4c0f4296-9f2c-4879-a95a-02c74b99bf76", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Bella Davidson", - "company": "Enlogia", - "phone": "879-512-3440", - "email": "bella@enlogia.com" - }, - { - "id": 3150, - "guid": "0d2897f4-ff18-4d97-b611-eedfc7dbb00c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Osborne", - "company": "iOptystix", - "phone": "821-514-3564", - "email": "amelia@ioptystix.com" - }, - { - "id": 3151, - "guid": "402c11f3-07fa-4956-8d79-e3b26f7ac6ad", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Abramson", - "company": "Videobanc", - "phone": "877-579-2261", - "email": "kaylee@videobanc.com" - }, - { - "id": 3152, - "guid": "1ea6ad7b-2614-499b-8136-0b656ec3741a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Sheldon", - "company": "Pacwest", - "phone": "888-436-3574", - "email": "kaylee@pacwest.com" - }, - { - "id": 3153, - "guid": "01f50a62-f767-42ec-b158-ac501490b432", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Sheldon", - "company": "InfoAirway", - "phone": "896-511-2385", - "email": "avery@infoairway.com" - }, - { - "id": 3154, - "guid": "e61818ff-7b7d-4e0e-bbb9-788e9d64e948", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Turner", - "company": "Westmedia", - "phone": "882-468-2732", - "email": "sarah@westmedia.com" - }, - { - "id": 3155, - "guid": "e69b154a-0157-4424-a6b4-c0512ecee5db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Oswald", - "company": "Cryptotegrity", - "phone": "809-505-3205", - "email": "lauren@cryptotegrity.com" - }, - { - "id": 3156, - "guid": "877539ea-75c0-45e4-be48-95b0ddfd3c76", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Cook", - "company": "Netsystems", - "phone": "872-415-3680", - "email": "sydney@netsystems.com" - }, - { - "id": 3157, - "guid": "75b045e1-4c32-4da9-ae4d-51e4ac9eb881", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Brown", - "company": "Truegate", - "phone": "861-522-2104", - "email": "leah@truegate.com" - }, - { - "id": 3158, - "guid": "8613e83f-a246-4870-a417-5c820d3deee5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Brooks", - "company": "Infraique", - "phone": "801-526-3543", - "email": "eva@infraique.com" - }, - { - "id": 3159, - "guid": "73b8a2a0-44dc-4238-bde8-b163a1053173", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Hodges", - "company": "Orthosoft", - "phone": "831-429-2304", - "email": "makayla@orthosoft.com" - }, - { - "id": 3160, - "guid": "ec8b106f-d332-4876-8eb3-22499cc7c5b1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Gibbs", - "company": "Xeicon", - "phone": "829-565-2577", - "email": "peyton@xeicon.com" - }, - { - "id": 3161, - "guid": "014882c1-c42d-46de-86d8-eb88eb0bc835", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Ford", - "company": "Multitiqua", - "phone": "888-509-3588", - "email": "nevaeh@multitiqua.com" - }, - { - "id": 3162, - "guid": "d8271cf4-9726-48c8-9ca5-b332f7778a47", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Vaughan", - "company": "Tekcar", - "phone": "889-478-2151", - "email": "peyton@tekcar.com" - }, - { - "id": 3163, - "guid": "90a793d9-d02e-4b73-808a-98061f5b3f89", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Carroll", - "company": "Mescatron", - "phone": "889-569-2189", - "email": "brooke@mescatron.com" - }, - { - "id": 3164, - "guid": "03c44a25-5b10-4b43-a24e-298583c07965", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Gilmore", - "company": "US Infratouch", - "phone": "896-418-3884", - "email": "madeline@us infratouch.com" - }, - { - "id": 3165, - "guid": "41e58cbd-8aec-4ec2-8aab-50118b701c21", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Chandter", - "company": "Anaframe", - "phone": "880-404-3028", - "email": "gianna@anaframe.com" - }, - { - "id": 3166, - "guid": "b60f1add-c542-4d5f-a0f6-b19f8f741c5d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Milton", - "company": "Netsystems", - "phone": "880-546-2313", - "email": "isabelle@netsystems.com" - }, - { - "id": 3167, - "guid": "c8b7adcb-8ab1-4afd-96fa-17ea850d9801", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Hawkins", - "company": "Transtouch", - "phone": "807-538-3989", - "email": "serenity@transtouch.com" - }, - { - "id": 3168, - "guid": "5b65ad3b-ad6f-49a9-8615-381318220174", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Sherlock", - "company": "Gigaura", - "phone": "824-450-2918", - "email": "faith@gigaura.com" - }, - { - "id": 3169, - "guid": "965ca948-1370-4e7e-8af7-01c81513d9c0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Conors", - "company": "Idmax", - "phone": "861-488-3191", - "email": "brianna@idmax.com" - }, - { - "id": 3170, - "guid": "08cd8375-ee36-4522-8d12-8aac1130ad92", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Ogden", - "company": "Navivacs", - "phone": "803-444-2864", - "email": "vanessa@navivacs.com" - }, - { - "id": 3171, - "guid": "5c5c2503-bad1-4569-8e57-f694865649ad", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Miln", - "company": "InfoAirway", - "phone": "804-431-2872", - "email": "sarah@infoairway.com" - }, - { - "id": 3172, - "guid": "d430182e-107c-4773-9ed7-060838a301c9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Harrison", - "company": "Quintegrity", - "phone": "802-468-2237", - "email": "abigail@quintegrity.com" - }, - { - "id": 3173, - "guid": "988c9ead-eb43-4277-a3de-2bda68c31d12", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Smith", - "company": "Robocomm", - "phone": "818-482-3170", - "email": "katherine@robocomm.com" - }, - { - "id": 3174, - "guid": "fc59127a-0bea-4617-9b3e-177d240a6750", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Clapton", - "company": "Anagraph", - "phone": "875-591-2886", - "email": "grace@anagraph.com" - }, - { - "id": 3175, - "guid": "624c5a88-db4f-4fea-b941-67f1603babb0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ava Timmons", - "company": "Allphysiche", - "phone": "890-477-2924", - "email": "ava@allphysiche.com" - }, - { - "id": 3176, - "guid": "9d0eb787-1890-43d8-a715-297cadac56f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Hodges", - "company": "Orthomedia", - "phone": "861-576-3677", - "email": "sophia@orthomedia.com" - }, - { - "id": 3177, - "guid": "5538f816-9e33-49d1-93c2-0eb1899db573", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Freeman", - "company": "Turbomart", - "phone": "879-431-2863", - "email": "lily@turbomart.com" - }, - { - "id": 3178, - "guid": "36169f54-2a2a-4438-b1f9-f5275012ea5c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Wood", - "company": "iOptystix", - "phone": "879-517-3841", - "email": "serenity@ioptystix.com" - }, - { - "id": 3179, - "guid": "a854b6ab-afc2-46e7-9c6b-2ca6f4a7fa84", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Warren", - "company": "Vencom", - "phone": "853-592-2513", - "email": "zoe@vencom.com" - }, - { - "id": 3180, - "guid": "aea29398-4895-4832-b16b-36ba5eab1399", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Owen", - "company": "Proline", - "phone": "828-597-3380", - "email": "gabriella@proline.com" - }, - { - "id": 3181, - "guid": "e22606b6-2b7e-4ab9-9c5f-d8398eb74ec6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Carroll", - "company": "Aluco", - "phone": "828-415-3801", - "email": "julia@aluco.com" - }, - { - "id": 3182, - "guid": "1a8640fc-7233-4a01-9dac-b8f596bd5eda", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Gate", - "company": "Fibrotopia", - "phone": "829-467-2449", - "email": "aaliyah@fibrotopia.com" - }, - { - "id": 3183, - "guid": "31da52d8-ecf0-46d9-939c-be514ec27e48", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Molligan", - "company": "Conotomics", - "phone": "871-444-2100", - "email": "destiny@conotomics.com" - }, - { - "id": 3184, - "guid": "d24679f9-c8f1-4d4e-978f-9ea64d7babaa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Smith", - "company": "Safetrust", - "phone": "816-437-2143", - "email": "katherine@safetrust.com" - }, - { - "id": 3185, - "guid": "af3ab3eb-bca1-4c0b-9bce-d1975a47fc5f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Hancock", - "company": "Superscope", - "phone": "885-414-2919", - "email": "serenity@superscope.com" - }, - { - "id": 3186, - "guid": "9fd504eb-5286-49fa-bf82-cdc413fcd4a6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooklyn Neal", - "company": "Gigaura", - "phone": "836-417-2573", - "email": "brooklyn@gigaura.com" - }, - { - "id": 3187, - "guid": "c5a86b19-4304-4f92-9cd0-265733805b41", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Youmans", - "company": "Xeicon", - "phone": "876-592-2796", - "email": "isabelle@xeicon.com" - }, - { - "id": 3188, - "guid": "28769102-3f37-4c76-867d-7348526931b9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Gilson", - "company": "Interliant", - "phone": "885-541-3144", - "email": "natalie@interliant.com" - }, - { - "id": 3189, - "guid": "1bcc5331-153b-4f50-bd45-d164f40b578e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Nelson", - "company": "Polytheon", - "phone": "837-571-3338", - "email": "jessica@polytheon.com" - }, - { - "id": 3190, - "guid": "ef68db8a-8bcd-4e0f-937a-3f8cc4158649", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Freeman", - "company": "Safeagra", - "phone": "815-578-3720", - "email": "emily@safeagra.com" - }, - { - "id": 3191, - "guid": "1483f530-422e-4bec-9f1d-2ec789432394", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Webster", - "company": "Robotomic", - "phone": "866-401-2425", - "email": "amelia@robotomic.com" - }, - { - "id": 3192, - "guid": "59f64ebb-4cf5-4ff6-bb5f-09934779de76", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Nathan", - "company": "Mescaridic", - "phone": "812-525-3099", - "email": "avery@mescaridic.com" - }, - { - "id": 3193, - "guid": "e8795a7d-85e8-4d6d-83a3-16c93fa354df", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Carroll", - "company": "Anaframe", - "phone": "880-482-3827", - "email": "serenity@anaframe.com" - }, - { - "id": 3194, - "guid": "429488b5-9ad4-4675-a207-7aa1089c9b53", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Clapton", - "company": "Infragraph", - "phone": "873-539-3086", - "email": "aaliyah@infragraph.com" - }, - { - "id": 3195, - "guid": "68928fa0-e557-48cc-9764-cffa66644076", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Miln", - "company": "Cryptotegrity", - "phone": "842-546-2069", - "email": "alexis@cryptotegrity.com" - }, - { - "id": 3196, - "guid": "1f7b1f5b-8938-4370-853b-414a61b2868e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Campbell", - "company": "iMedconik", - "phone": "893-468-3754", - "email": "sophie@imedconik.com" - }, - { - "id": 3197, - "guid": "6bb8e756-8d9f-4a41-9376-de9ab1a57f70", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Hamphrey", - "company": "Teknoplexon", - "phone": "802-499-2465", - "email": "brooke@teknoplexon.com" - }, - { - "id": 3198, - "guid": "036a7b38-8788-4419-80fe-1b160851a4e5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Harrison", - "company": "Fibrotouch", - "phone": "843-445-3729", - "email": "melanie@fibrotouch.com" - }, - { - "id": 3199, - "guid": "cb3d806b-63db-4f7a-bf2b-6ac9980702f8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Galbraith", - "company": "Nanobanc", - "phone": "886-467-2176", - "email": "julia@nanobanc.com" - }, - { - "id": 3200, - "guid": "1382f366-530c-4474-9405-5c444a271934", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Waller", - "company": "Multitiqua", - "phone": "866-573-2973", - "email": "olivia@multitiqua.com" - }, - { - "id": 3201, - "guid": "2278b6c8-c476-4160-b2e0-90ff1f774752", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mariah Carey", - "company": "Unologic", - "phone": "821-520-2160", - "email": "mariah@unologic.com" - }, - { - "id": 3202, - "guid": "f3264fb8-af61-40e3-a2a4-49048e92bcb2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Chesterton", - "company": "Idmax", - "phone": "818-474-2912", - "email": "ashley@idmax.com" - }, - { - "id": 3203, - "guid": "6f8010d3-2fe8-4c0d-9694-4ab4d9b7d1ab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Chapman", - "company": "Westmedia", - "phone": "821-585-3437", - "email": "brooklyn@westmedia.com" - }, - { - "id": 3204, - "guid": "84372ebc-a3ff-4853-b072-a51441e096a9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Croftoon", - "company": "Anaframe", - "phone": "824-486-2638", - "email": "gabriella@anaframe.com" - }, - { - "id": 3205, - "guid": "42ce6d9f-1007-4a8a-9455-87116ff51e94", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Thorndike", - "company": "Conrama", - "phone": "857-541-3004", - "email": "faith@conrama.com" - }, - { - "id": 3206, - "guid": "db9cf5f5-da89-42c0-a47f-f8a082f7d1ce", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Thomson", - "company": "Robocomm", - "phone": "806-505-3869", - "email": "riley@robocomm.com" - }, - { - "id": 3207, - "guid": "7f614952-9e1f-4b5b-a402-581d62d509dd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Sherlock", - "company": "iMedconik", - "phone": "840-400-2813", - "email": "mya@imedconik.com" - }, - { - "id": 3208, - "guid": "5ce5688c-bcad-4328-a767-08c8ed382aa7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Thomson", - "company": "Titanirola", - "phone": "827-412-2987", - "email": "sofia@titanirola.com" - }, - { - "id": 3209, - "guid": "0b314336-cac7-4023-aa56-dd6e5b5cfa4a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabrielle Carey", - "company": "Syssoft", - "phone": "884-481-3016", - "email": "gabrielle@syssoft.com" - }, - { - "id": 3210, - "guid": "a0ae9736-8ec4-4313-97a0-b19ec5b986e3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Davidson", - "company": "Superscope", - "phone": "852-592-3484", - "email": "lillian@superscope.com" - }, - { - "id": 3211, - "guid": "6745d75a-340e-4b6e-8ef7-cdf109d01bce", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Walkman", - "company": "Pericenta", - "phone": "880-572-3544", - "email": "emma@pericenta.com" - }, - { - "id": 3212, - "guid": "7178919a-231c-414e-9366-f412012eeeb3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Oswald", - "company": "Westmedia", - "phone": "890-406-3142", - "email": "morgan@westmedia.com" - }, - { - "id": 3213, - "guid": "1b14150e-8e9d-446e-a0a4-f064d820a842", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Ford", - "company": "Interliant", - "phone": "859-595-3130", - "email": "sydney@interliant.com" - }, - { - "id": 3214, - "guid": "dd771827-7af2-490a-a6d9-27a5bda062e6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Neal", - "company": "Sontopia", - "phone": "859-597-3329", - "email": "jasmine@sontopia.com" - }, - { - "id": 3215, - "guid": "5a6f9f25-459f-40b5-94b2-c33ae18c96b3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabriella Neal", - "company": "iSkyvaco", - "phone": "859-413-2553", - "email": "gabriella@iskyvaco.com" - }, - { - "id": 3216, - "guid": "150f3745-bf5a-4556-ac74-7851d963c7f0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Davidson", - "company": "US Omnigraphik", - "phone": "805-457-3427", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 3217, - "guid": "8c7433d1-5b8e-418f-a1e1-70ab23e2d0f6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jessica Wainwright", - "company": "InfoAirway", - "phone": "869-462-2520", - "email": "jessica@infoairway.com" - }, - { - "id": 3218, - "guid": "7f9baf01-a3c8-48e7-b921-336bca9e06db", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Haig", - "company": "Fibroserve", - "phone": "846-543-3075", - "email": "claire@fibroserve.com" - }, - { - "id": 3219, - "guid": "44e5a067-f92e-49a6-aab6-bc5b9cf4767e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Clapton", - "company": "Openserve", - "phone": "840-468-2757", - "email": "khloe@openserve.com" - }, - { - "id": 3220, - "guid": "bbba9886-574b-4667-ba55-21ff4c5cab13", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Young", - "company": "Anaframe", - "phone": "823-547-3182", - "email": "mackenzie@anaframe.com" - }, - { - "id": 3221, - "guid": "a7c5126d-0795-4b34-9af1-9d9a231583e1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Sheldon", - "company": "iOptystix", - "phone": "829-572-3359", - "email": "valeria@ioptystix.com" - }, - { - "id": 3222, - "guid": "f983f1a8-6f44-42d1-a656-554cc5bfbcf9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Webster", - "company": "Multitiqua", - "phone": "870-401-3620", - "email": "vanessa@multitiqua.com" - }, - { - "id": 3223, - "guid": "3f475c53-8299-467e-9ac6-7449b8c1fff3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Sheldon", - "company": "Anaframe", - "phone": "816-565-2286", - "email": "brooklyn@anaframe.com" - }, - { - "id": 3224, - "guid": "23e21f43-9017-484d-9c24-0582d534f91b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Elizabeth Oliver", - "company": "Steganoconiche", - "phone": "800-488-3246", - "email": "elizabeth@steganoconiche.com" - }, - { - "id": 3225, - "guid": "7b627e0a-b1d1-42b0-83c6-bdd0e2c44498", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Young", - "company": "Techtron", - "phone": "859-459-3284", - "email": "gabrielle@techtron.com" - }, - { - "id": 3226, - "guid": "0347f129-22e2-4547-997f-2adb26b78bf6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Milton", - "company": "Jamrola", - "phone": "844-486-2850", - "email": "abigail@jamrola.com" - }, - { - "id": 3227, - "guid": "0cfc466e-2d22-442e-b6df-1b7f3e27b8da", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Grace Carter", - "company": "Teraserv", - "phone": "810-505-2686", - "email": "grace@teraserv.com" - }, - { - "id": 3228, - "guid": "a42b07ee-acc6-43c2-8786-fe8d4d1209bd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Conors", - "company": "Allnet", - "phone": "851-544-2276", - "email": "leah@allnet.com" - }, - { - "id": 3229, - "guid": "1545b4a5-0fa6-4e47-beb6-42b639c670ac", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Owen", - "company": "Indisco", - "phone": "873-553-2087", - "email": "victoria@indisco.com" - }, - { - "id": 3230, - "guid": "34d904ef-1dc3-41a9-b4bc-0a9d250a3e42", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Freeman", - "company": "Mescatron", - "phone": "826-452-2186", - "email": "jasmine@mescatron.com" - }, - { - "id": 3231, - "guid": "90717cbd-9031-423f-8453-012ca1f47a93", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Thornton", - "company": "Videobanc", - "phone": "884-421-3147", - "email": "avery@videobanc.com" - }, - { - "id": 3232, - "guid": "df538998-c0ae-4f63-9e04-8dcef537c959", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Thomson", - "company": "Conotomics", - "phone": "870-547-2108", - "email": "katelyn@conotomics.com" - }, - { - "id": 3233, - "guid": "725110c0-b057-43f7-8991-7f58e6d0207d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Hardman", - "company": "Inridium", - "phone": "817-571-3844", - "email": "kimberly@inridium.com" - }, - { - "id": 3234, - "guid": "f4291212-17ac-4e23-a4ba-feed67e41816", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Stanley", - "company": "Compuamerica", - "phone": "860-525-3595", - "email": "charlotte@compuamerica.com" - }, - { - "id": 3235, - "guid": "f88d97a5-6541-4a52-86cf-fa678e92fe80", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah White", - "company": "Compuamerica", - "phone": "807-556-2655", - "email": "leah@compuamerica.com" - }, - { - "id": 3236, - "guid": "a1ade9cc-0423-424f-b7ca-5df291ff0487", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Conors", - "company": "Ameritron", - "phone": "870-531-2089", - "email": "trinity@ameritron.com" - }, - { - "id": 3237, - "guid": "ca648406-2f39-4b63-832a-3230af204dbd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Payton Timmons", - "company": "Unologic", - "phone": "857-522-2193", - "email": "payton@unologic.com" - }, - { - "id": 3238, - "guid": "9d2a391b-c574-4dd1-95fd-c9bb78f6b6eb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Warren", - "company": "Compuamerica", - "phone": "864-436-3920", - "email": "riley@compuamerica.com" - }, - { - "id": 3239, - "guid": "466d3770-0a97-4d0e-a080-589e908e5d87", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Cramer", - "company": "Robocomm", - "phone": "898-538-3246", - "email": "sophie@robocomm.com" - }, - { - "id": 3240, - "guid": "9e5ec22e-e8e8-42e0-a081-ee029c41cfb0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Gill", - "company": "Unconix", - "phone": "803-510-2892", - "email": "gabrielle@unconix.com" - }, - { - "id": 3241, - "guid": "4b99e1be-1f23-4a11-be77-042d76cff86c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Campbell", - "company": "Robotomic", - "phone": "892-489-2106", - "email": "jocelyn@robotomic.com" - }, - { - "id": 3242, - "guid": "44845400-34d8-41e1-86b1-44132ba176ab", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Molligan", - "company": "Pacwest", - "phone": "881-576-3390", - "email": "sophia@pacwest.com" - }, - { - "id": 3243, - "guid": "85fa309c-32cc-494c-866d-ba74ea7a5fdf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Brown", - "company": "Tekcar", - "phone": "876-590-3291", - "email": "molly@tekcar.com" - }, - { - "id": 3244, - "guid": "58854b35-95ac-4644-94c3-abfe7946f31a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Adamson", - "company": "Truetomic", - "phone": "852-454-2964", - "email": "katherine@truetomic.com" - }, - { - "id": 3245, - "guid": "c6d30e05-7e6a-4310-8039-f2e0118b1722", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Smith", - "company": "Quintegrity", - "phone": "805-598-2551", - "email": "anna@quintegrity.com" - }, - { - "id": 3246, - "guid": "d779ba5a-81f9-4aa0-a05f-1627caaecf8d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Abramson", - "company": "Openserve", - "phone": "826-422-2831", - "email": "caroline@openserve.com" - }, - { - "id": 3247, - "guid": "99e0819f-2ddf-4615-8fef-1ed1f6bdebb7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Goodman", - "company": "Inridium", - "phone": "886-570-2270", - "email": "ella@inridium.com" - }, - { - "id": 3248, - "guid": "55b1a257-4fbf-48a1-a479-2f26cdcfb160", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Galbraith", - "company": "Aluco", - "phone": "816-440-3145", - "email": "julia@aluco.com" - }, - { - "id": 3249, - "guid": "019321c6-c3f4-43bd-9d6c-c4d36a70805f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Michaelson", - "company": "Syssoft", - "phone": "804-593-3836", - "email": "abigail@syssoft.com" - }, - { - "id": 3250, - "guid": "348d2f36-3259-4eac-81b5-cfe815b67b2e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Young", - "company": "Compuamerica", - "phone": "836-454-3431", - "email": "brianna@compuamerica.com" - }, - { - "id": 3251, - "guid": "1ee430e0-2590-4dd1-a56d-0890abed50aa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Miln", - "company": "Qualserve", - "phone": "867-580-3210", - "email": "kayla@qualserve.com" - }, - { - "id": 3252, - "guid": "aa47726a-5e82-4ea1-b703-94eb890d6d55", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Brown", - "company": "Truegate", - "phone": "894-440-3792", - "email": "kaylee@truegate.com" - }, - { - "id": 3253, - "guid": "31560b59-2818-44a0-86d1-e24d0263eb80", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Cook", - "company": "Cryptotemplate", - "phone": "867-423-3944", - "email": "julia@cryptotemplate.com" - }, - { - "id": 3254, - "guid": "4223b326-3fa6-40fd-ac97-df9c9f3d29ec", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Warren", - "company": "Fibrotouch", - "phone": "881-511-2859", - "email": "alexa@fibrotouch.com" - }, - { - "id": 3255, - "guid": "08588213-2d8d-4d20-ab07-1d7906fd3af6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Brooks", - "company": "Technogra", - "phone": "855-578-3614", - "email": "julia@technogra.com" - }, - { - "id": 3256, - "guid": "7f37ed88-080d-4820-b7fe-3ac4a6b31549", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Miln", - "company": "Indisco", - "phone": "875-449-2355", - "email": "paige@indisco.com" - }, - { - "id": 3257, - "guid": "1e34bb7f-ac31-4471-b9d8-97b2d39a04d5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Murphy", - "company": "Entcast", - "phone": "810-595-2923", - "email": "paige@entcast.com" - }, - { - "id": 3258, - "guid": "99b9ae97-d3e7-4684-87e0-47a4e38831af", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Thomson", - "company": "Videobanc", - "phone": "896-477-2336", - "email": "grace@videobanc.com" - }, - { - "id": 3259, - "guid": "ba558328-29b2-4b0f-830f-5e33d50417e8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Thorndike", - "company": "Xeicon", - "phone": "875-465-2486", - "email": "peyton@xeicon.com" - }, - { - "id": 3260, - "guid": "e1688b5b-fe99-4e41-b631-2ff33917e008", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Carey", - "company": "Steganoconiche", - "phone": "893-533-3904", - "email": "claire@steganoconiche.com" - }, - { - "id": 3261, - "guid": "925e32de-6446-4cf3-b1bc-7a437679a1d2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Carey", - "company": "Cryptotegrity", - "phone": "851-462-3939", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 3262, - "guid": "3ff0d1f8-0487-4112-9831-979531bfc9cf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina Ford", - "company": "Fibrotopia", - "phone": "838-596-2980", - "email": "angelina@fibrotopia.com" - }, - { - "id": 3263, - "guid": "76025909-ba7b-42d6-926f-ee7dc45d646e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Youmans", - "company": "eSteganoergy", - "phone": "821-518-2336", - "email": "kaitlyn@esteganoergy.com" - }, - { - "id": 3264, - "guid": "71a8019f-61a3-4ad9-b15d-c04a6b73a37b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Wood", - "company": "Infraique", - "phone": "828-585-3349", - "email": "kaitlyn@infraique.com" - }, - { - "id": 3265, - "guid": "8feddbb8-8098-4364-a837-cb8ea1168d7e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Oswald", - "company": "Robotomic", - "phone": "882-482-2592", - "email": "lillian@robotomic.com" - }, - { - "id": 3266, - "guid": "2dedeffc-608d-4b2a-8532-d125a1a61e85", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Day", - "company": "iOptystix", - "phone": "876-451-2574", - "email": "caroline@ioptystix.com" - }, - { - "id": 3267, - "guid": "6908d211-4820-4c8c-bd20-360ad2e248d1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Oliver", - "company": "Infragraph", - "phone": "835-581-3670", - "email": "molly@infragraph.com" - }, - { - "id": 3268, - "guid": "fcad5699-5f17-413f-a652-c733108a17a2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Campbell", - "company": "Thermotomic", - "phone": "890-482-3460", - "email": "jocelyn@thermotomic.com" - }, - { - "id": 3269, - "guid": "939c6ad9-4bff-4e0a-b7d2-cba8b87ad440", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mariah Gate", - "company": "Infragraph", - "phone": "821-514-2967", - "email": "mariah@infragraph.com" - }, - { - "id": 3270, - "guid": "685f1f40-c5eb-4132-82a7-9fee5ae260a0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Creighton", - "company": "eSteganoergy", - "phone": "822-595-4000", - "email": "kylie@esteganoergy.com" - }, - { - "id": 3271, - "guid": "6c3ef35f-e7a6-4d7b-bb3a-9b639c4b4e5c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Thorndike", - "company": "Orthomedia", - "phone": "897-434-2526", - "email": "bailey@orthomedia.com" - }, - { - "id": 3272, - "guid": "30f11d2d-20fd-4398-9d8a-782ee2220c53", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Cook", - "company": "Xeicon", - "phone": "801-594-2922", - "email": "layla@xeicon.com" - }, - { - "id": 3273, - "guid": "45035d8d-01ea-449a-be9c-2e7a7a189cf7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Gilmore", - "company": "Nanobanc", - "phone": "806-440-2448", - "email": "jasmine@nanobanc.com" - }, - { - "id": 3274, - "guid": "84c4bd9e-5f0d-4570-bdfa-42e7bd22a577", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Timmons", - "company": "eSteganoergy", - "phone": "819-597-3452", - "email": "olivia@esteganoergy.com" - }, - { - "id": 3275, - "guid": "a86d9d44-bea6-4013-a551-cbce81ab5073", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Samantha Miln", - "company": "Westmedia", - "phone": "823-558-3899", - "email": "samantha@westmedia.com" - }, - { - "id": 3276, - "guid": "e00e9e36-37af-4557-8188-b81613645a8f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Sheldon", - "company": "Teraserv", - "phone": "846-599-2531", - "email": "aubrey@teraserv.com" - }, - { - "id": 3277, - "guid": "ab0f5861-374a-4be1-8d91-f217755bcc54", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Ford", - "company": "Ameritron", - "phone": "880-404-2433", - "email": "molly@ameritron.com" - }, - { - "id": 3278, - "guid": "36d00e6d-6707-4f2d-a140-cf43771158e2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Charlotte Molligan", - "company": "Westtomik", - "phone": "855-462-3778", - "email": "charlotte@westtomik.com" - }, - { - "id": 3279, - "guid": "28648627-2bb0-4cdb-92bf-949f88f7bad1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gianna Campbell", - "company": "US Omnigraphik", - "phone": "845-467-3607", - "email": "gianna@us omnigraphik.com" - }, - { - "id": 3280, - "guid": "90343ac5-4d05-432a-8674-8ed7fc75a829", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Thorndike", - "company": "Idmax", - "phone": "827-574-3183", - "email": "katelyn@idmax.com" - }, - { - "id": 3281, - "guid": "c848b2f7-eddb-4b27-b05d-aa2c36cd9206", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mackenzie Waller", - "company": "Inridium", - "phone": "824-528-2282", - "email": "mackenzie@inridium.com" - }, - { - "id": 3282, - "guid": "39094cea-009a-4dbb-a53d-2aa6f46bb95a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Otis", - "company": "Openserve", - "phone": "805-560-2143", - "email": "bella@openserve.com" - }, - { - "id": 3283, - "guid": "c5fbc95d-ea03-4d02-92d6-b450f00881ab", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Hancock", - "company": "Qualserve", - "phone": "823-600-2633", - "email": "kylie@qualserve.com" - }, - { - "id": 3284, - "guid": "70dd73bd-64a8-4a80-a299-ce691011f630", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Vaughan", - "company": "Qualserve", - "phone": "832-440-3325", - "email": "hannah@qualserve.com" - }, - { - "id": 3285, - "guid": "f9fa8691-62a1-493b-95d9-f02d66bbb256", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke Hancock", - "company": "Enlogia", - "phone": "805-588-3310", - "email": "brooke@enlogia.com" - }, - { - "id": 3286, - "guid": "ab14c766-12f6-4879-9072-b3f877c3a7b8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Nash", - "company": "Westtomik", - "phone": "856-539-3027", - "email": "melanie@westtomik.com" - }, - { - "id": 3287, - "guid": "65230856-d2d6-4dc5-afb8-8058ed074444", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Oswald", - "company": "Hypervaco", - "phone": "809-561-3800", - "email": "faith@hypervaco.com" - }, - { - "id": 3288, - "guid": "db2ce8ad-ece2-4a8a-8d21-2d847540de18", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Winter", - "company": "Netseco", - "phone": "816-407-3611", - "email": "alyssa@netseco.com" - }, - { - "id": 3289, - "guid": "580dc6cf-d65e-4f33-a3e0-06128f3dad87", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Milton", - "company": "Qualserve", - "phone": "845-543-2154", - "email": "taylor@qualserve.com" - }, - { - "id": 3290, - "guid": "40933ba8-598d-497f-9015-2820bd58d4b0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Milton", - "company": "Raylog", - "phone": "824-462-3906", - "email": "layla@raylog.com" - }, - { - "id": 3291, - "guid": "36fe8f4f-1b9a-4797-8f96-917db436a5c7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Conors", - "company": "Quintegrity", - "phone": "810-519-3805", - "email": "zoey@quintegrity.com" - }, - { - "id": 3292, - "guid": "9de31796-5d94-4551-8faa-1c0653ec74bd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Creighton", - "company": "OpKeycomm", - "phone": "862-445-3873", - "email": "emily@opkeycomm.com" - }, - { - "id": 3293, - "guid": "4604b0fc-6f85-43b8-a292-da0022b253b5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Gill", - "company": "Robocomm", - "phone": "865-419-2075", - "email": "angelina@robocomm.com" - }, - { - "id": 3294, - "guid": "97bf2275-84bf-43de-b3c5-9b83c12632fa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Stanley", - "company": "Fibroserve", - "phone": "852-500-2683", - "email": "abigail@fibroserve.com" - }, - { - "id": 3295, - "guid": "3f959cf8-68fe-4886-a4a2-6622955ed43d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Ford", - "company": "Fibroserve", - "phone": "856-424-3299", - "email": "ashley@fibroserve.com" - }, - { - "id": 3296, - "guid": "b3226c86-8f9b-4349-9f26-f3457468bc16", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophie Brooks", - "company": "Venconix", - "phone": "898-448-3087", - "email": "sophie@venconix.com" - }, - { - "id": 3297, - "guid": "485a49c0-912b-4716-9d9b-e79f547c83cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Nathan", - "company": "Compuamerica", - "phone": "866-593-3498", - "email": "aaliyah@compuamerica.com" - }, - { - "id": 3298, - "guid": "34934bab-3cb8-46e1-8e22-3421865b2b07", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Carrington", - "company": "Infraique", - "phone": "815-559-2485", - "email": "vanessa@infraique.com" - }, - { - "id": 3299, - "guid": "2e31b18d-0ba7-4b81-8d0c-28d8514889bb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Vance", - "company": "Teratopia", - "phone": "848-496-3604", - "email": "ashley@teratopia.com" - }, - { - "id": 3300, - "guid": "5cafdc54-16db-4769-9c65-0576c863d07d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alyssa Warren", - "company": "Ameritron", - "phone": "804-557-2972", - "email": "alyssa@ameritron.com" - }, - { - "id": 3301, - "guid": "098aab73-4bb4-4fbd-8912-5483e256f99b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Carey", - "company": "Turbomart", - "phone": "824-458-3820", - "email": "mackenzie@turbomart.com" - }, - { - "id": 3302, - "guid": "39b5f3c2-0f37-4f4d-a92b-c074aa741e57", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Wesley", - "company": "Conotomics", - "phone": "837-438-2181", - "email": "zoe@conotomics.com" - }, - { - "id": 3303, - "guid": "e2982c82-653b-4f0a-87cb-6d4597f5e875", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Freeman", - "company": "eEyetanic", - "phone": "862-513-3123", - "email": "aubrey@eeyetanic.com" - }, - { - "id": 3304, - "guid": "f2f3fd69-b56a-4493-adc5-1f3b91e15c31", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Hodges", - "company": "Airdyne", - "phone": "875-565-2178", - "email": "bailey@airdyne.com" - }, - { - "id": 3305, - "guid": "c9a2e9a9-27be-4b48-9349-625f67bc4c14", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Charlson", - "company": "Fibroserve", - "phone": "810-497-2038", - "email": "zoe@fibroserve.com" - }, - { - "id": 3306, - "guid": "ba823fc4-302c-4dba-adcb-4fded0e8b818", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Mercer", - "company": "Gigaura", - "phone": "885-570-2224", - "email": "serenity@gigaura.com" - }, - { - "id": 3307, - "guid": "bc06f2cb-953b-4263-9e2e-d89a48b83f67", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Thornton", - "company": "SysUSA", - "phone": "898-543-3118", - "email": "maya@sysusa.com" - }, - { - "id": 3308, - "guid": "49562ee2-5584-487d-a64b-475c3dfd2ca4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Vance", - "company": "Nanobanc", - "phone": "878-521-3771", - "email": "evelyn@nanobanc.com" - }, - { - "id": 3309, - "guid": "4d1f75f3-c8c9-4588-8ed1-d177c48bc087", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Stanley", - "company": "Openserve", - "phone": "822-435-3526", - "email": "lillian@openserve.com" - }, - { - "id": 3310, - "guid": "0559260e-9aa9-451f-b41b-c158ca891235", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Day", - "company": "Truegate", - "phone": "879-486-3735", - "email": "destiny@truegate.com" - }, - { - "id": 3311, - "guid": "cb6a930d-5702-4d82-88c9-2dde888a59a3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Gibbs", - "company": "Nanobanc", - "phone": "874-500-3436", - "email": "autumn@nanobanc.com" - }, - { - "id": 3312, - "guid": "8c23cce8-8741-46ab-9c98-aaf2d938e66d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Oliver", - "company": "Robotemplate", - "phone": "870-549-3351", - "email": "peyton@robotemplate.com" - }, - { - "id": 3313, - "guid": "8c0ee7e0-fd9f-4a82-b3a9-e4fce45e6da0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Youmans", - "company": "iMedconik", - "phone": "897-570-2504", - "email": "riley@imedconik.com" - }, - { - "id": 3314, - "guid": "672f926e-69c1-4e37-8302-e019c98ca89d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Timmons", - "company": "Mescaridic", - "phone": "844-516-2868", - "email": "ava@mescaridic.com" - }, - { - "id": 3315, - "guid": "4f7b0657-e513-499e-8bb5-34cf4a44dc92", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Molly Miers", - "company": "Anaframe", - "phone": "815-559-2898", - "email": "molly@anaframe.com" - }, - { - "id": 3316, - "guid": "c85cb057-c400-4252-b3ee-650a60df78de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Waller", - "company": "Teknoplexon", - "phone": "833-465-2505", - "email": "bella@teknoplexon.com" - }, - { - "id": 3317, - "guid": "c8c8595b-22fe-4beb-9d43-1bf58bb64636", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Young", - "company": "Conrama", - "phone": "828-440-3489", - "email": "kylie@conrama.com" - }, - { - "id": 3318, - "guid": "28f0553c-60bc-466a-a11b-90d51ccc196d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Hancock", - "company": "Venconix", - "phone": "892-484-3149", - "email": "madelyn@venconix.com" - }, - { - "id": 3319, - "guid": "d1ae7cbe-b6e9-4b4a-824e-1c98b092e269", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Owen", - "company": "Pericenta", - "phone": "842-519-3833", - "email": "faith@pericenta.com" - }, - { - "id": 3320, - "guid": "e52492ca-2710-4a75-8cb4-21486cccbdc6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Ogden", - "company": "Pericenta", - "phone": "849-506-2618", - "email": "mariah@pericenta.com" - }, - { - "id": 3321, - "guid": "69a77245-8f0b-494c-8cee-f55633dfa410", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Genesis Day", - "company": "Truegate", - "phone": "830-562-3524", - "email": "genesis@truegate.com" - }, - { - "id": 3322, - "guid": "0057b1d1-329b-4a03-a8af-e7b62694bda6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Nathan", - "company": "Interliant", - "phone": "870-596-2016", - "email": "anna@interliant.com" - }, - { - "id": 3323, - "guid": "d49a60ac-0d9a-463b-8e54-fe4078a88f39", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Hawkins", - "company": "Vencom", - "phone": "824-423-2864", - "email": "sarah@vencom.com" - }, - { - "id": 3324, - "guid": "019b00e1-43b6-45bb-af26-5cccb8ff1718", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Day", - "company": "Anagraph", - "phone": "816-441-3838", - "email": "victoria@anagraph.com" - }, - { - "id": 3325, - "guid": "a8ef212c-3dc5-4d3b-b466-33a0a5c10df6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Brickman", - "company": "Keytheon", - "phone": "843-504-3131", - "email": "alexandra@keytheon.com" - }, - { - "id": 3326, - "guid": "944e8a8c-9e6c-4097-8813-db6caff43787", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Fulton", - "company": "Mescatron", - "phone": "808-520-3203", - "email": "zoe@mescatron.com" - }, - { - "id": 3327, - "guid": "0b8e55d0-370a-4840-b2d0-ee2cde0fc713", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Oldridge", - "company": "Aluco", - "phone": "851-463-2476", - "email": "kayla@aluco.com" - }, - { - "id": 3328, - "guid": "fdf31abf-d726-4913-9e54-e817ffc8bd34", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Brown", - "company": "Westgate", - "phone": "806-567-3698", - "email": "mia@westgate.com" - }, - { - "id": 3329, - "guid": "6fcc9af4-d5d7-4f54-9c60-1b8617dfdff5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Hamphrey", - "company": "Conotomics", - "phone": "894-441-3597", - "email": "taylor@conotomics.com" - }, - { - "id": 3330, - "guid": "b9fe652e-ab5e-47a9-9132-d72be30192a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Campbell", - "company": "Interliant", - "phone": "853-539-3217", - "email": "payton@interliant.com" - }, - { - "id": 3331, - "guid": "1a2d1cfa-d650-4759-a53d-1f04547101fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Hodges", - "company": "Raylog", - "phone": "836-486-3066", - "email": "jessica@raylog.com" - }, - { - "id": 3332, - "guid": "6d0cf90a-01b4-44b4-87d9-84311400abf5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Brown", - "company": "eSteganoergy", - "phone": "817-460-3063", - "email": "genesis@esteganoergy.com" - }, - { - "id": 3333, - "guid": "76240f7c-f9cd-45bc-a549-7d8eb8501700", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Oldridge", - "company": "Raylog", - "phone": "834-571-3025", - "email": "morgan@raylog.com" - }, - { - "id": 3334, - "guid": "949cf8d6-91a8-48d3-aa65-258c6781b9f7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophie Day", - "company": "US Omnigraphik", - "phone": "837-592-2805", - "email": "sophie@us omnigraphik.com" - }, - { - "id": 3335, - "guid": "8680a878-3cd0-498c-8b63-7315e6765803", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ella Ford", - "company": "Infragraph", - "phone": "814-511-3543", - "email": "ella@infragraph.com" - }, - { - "id": 3336, - "guid": "903a86ae-996d-4500-b65e-ed421df95188", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Brickman", - "company": "Generola", - "phone": "864-402-2749", - "email": "payton@generola.com" - }, - { - "id": 3337, - "guid": "a7b53b50-6f92-441e-8ea8-54976d4153a3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Gill", - "company": "US Infratouch", - "phone": "843-479-3413", - "email": "paige@us infratouch.com" - }, - { - "id": 3338, - "guid": "091b6fab-6efc-4109-bbfc-d4254650b1f0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Owen", - "company": "Inridium", - "phone": "847-537-3657", - "email": "allison@inridium.com" - }, - { - "id": 3339, - "guid": "e2b1710f-3b89-441b-8d3d-d9a575f15b92", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Abigail Sheldon", - "company": "Aluco", - "phone": "801-469-2567", - "email": "abigail@aluco.com" - }, - { - "id": 3340, - "guid": "fc5c7361-7211-42a4-88e4-45ec62133b9a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aaliyah Fisher", - "company": "Multitiqua", - "phone": "878-549-3345", - "email": "aaliyah@multitiqua.com" - }, - { - "id": 3341, - "guid": "2d32e07e-39c8-46ac-9da5-d9b5a6f0cd64", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Stanley", - "company": "Inridium", - "phone": "867-405-2277", - "email": "aubrey@inridium.com" - }, - { - "id": 3342, - "guid": "a622a158-2b54-4d1e-9134-df17f8c829cb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Calhoun", - "company": "Truetomic", - "phone": "879-424-2433", - "email": "kylie@truetomic.com" - }, - { - "id": 3343, - "guid": "e123b049-afed-4444-a2c7-4e2b2b0452ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Gustman", - "company": "OpKeycomm", - "phone": "812-440-3827", - "email": "kimberly@opkeycomm.com" - }, - { - "id": 3344, - "guid": "7326edae-db20-47be-8932-d41a28b0bab4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Osborne", - "company": "Safetrust", - "phone": "831-562-3565", - "email": "eva@safetrust.com" - }, - { - "id": 3345, - "guid": "7a036067-fff6-4585-bd1d-e332316eec35", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Chesterton", - "company": "Navivacs", - "phone": "815-525-2801", - "email": "kimberly@navivacs.com" - }, - { - "id": 3346, - "guid": "c12186ee-0666-406c-8f46-8038ad07ec5f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria WifKinson", - "company": "Superscope", - "phone": "828-600-2019", - "email": "victoria@superscope.com" - }, - { - "id": 3347, - "guid": "1f4be0a0-3539-45b6-87df-1c7292e07c7e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madelyn Goodman", - "company": "US Omnigraphik", - "phone": "820-526-3621", - "email": "madelyn@us omnigraphik.com" - }, - { - "id": 3348, - "guid": "1ed9d0da-b326-4983-86e1-2a64218ab319", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Leah Cook", - "company": "US Infratouch", - "phone": "884-549-2834", - "email": "leah@us infratouch.com" - }, - { - "id": 3349, - "guid": "5a3ac022-8f95-4215-be73-9e576eef9fcf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Brown", - "company": "US Omnigraphik", - "phone": "890-447-3407", - "email": "faith@us omnigraphik.com" - }, - { - "id": 3350, - "guid": "466b85ed-1cba-4984-9b4e-c3498b8162e3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Oldman", - "company": "Truegate", - "phone": "881-471-3457", - "email": "sophie@truegate.com" - }, - { - "id": 3351, - "guid": "3c83ecf3-49db-4418-ad3b-9b048e6535d9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Adamson", - "company": "Openserve", - "phone": "817-439-3105", - "email": "zoe@openserve.com" - }, - { - "id": 3352, - "guid": "a5f356b7-358e-4931-8a9c-e03ff55672ab", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brianna Hardman", - "company": "Titanigraf", - "phone": "875-553-3865", - "email": "brianna@titanigraf.com" - }, - { - "id": 3353, - "guid": "74a72bb2-47c4-4f31-9fd3-d44d21524a93", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Calhoun", - "company": "Gigaura", - "phone": "836-544-2557", - "email": "sarah@gigaura.com" - }, - { - "id": 3354, - "guid": "a8ceff80-b2f3-45fc-b602-09e896a0d681", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Owen", - "company": "Multitiqua", - "phone": "877-589-2859", - "email": "brooke@multitiqua.com" - }, - { - "id": 3355, - "guid": "03b7b6e2-38c9-44d0-a528-660c16c17fa8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Wood", - "company": "Generola", - "phone": "886-508-3954", - "email": "abigail@generola.com" - }, - { - "id": 3356, - "guid": "05a0e167-ef6c-420b-8443-1c54c12a9cce", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Cramer", - "company": "Conrama", - "phone": "850-468-3127", - "email": "isabella@conrama.com" - }, - { - "id": 3357, - "guid": "393a20d7-b134-4ccb-a5fb-d8d23d4d9591", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Peyton Warren", - "company": "SysUSA", - "phone": "851-401-2387", - "email": "peyton@sysusa.com" - }, - { - "id": 3358, - "guid": "90da260a-fcf9-4c29-b802-c319b16bf4dc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brianna Galbraith", - "company": "Multitiqua", - "phone": "866-557-3080", - "email": "brianna@multitiqua.com" - }, - { - "id": 3359, - "guid": "06f02a0c-346c-4640-a190-0a5d21221c3d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Ford", - "company": "Textiqua", - "phone": "854-517-2975", - "email": "kaylee@textiqua.com" - }, - { - "id": 3360, - "guid": "ec93bfed-9a2e-4736-9f5e-9f9cd93de14a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Warren", - "company": "Netseco", - "phone": "850-585-2740", - "email": "trinity@netseco.com" - }, - { - "id": 3361, - "guid": "ca425c29-f6d2-4d81-ad8d-08de7e225a40", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Gerald", - "company": "Jamconik", - "phone": "820-497-2771", - "email": "sarah@jamconik.com" - }, - { - "id": 3362, - "guid": "3902cb7a-33d1-4cf4-b388-3b485bfb5f51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Thomson", - "company": "SysUSA", - "phone": "896-546-3624", - "email": "melanie@sysusa.com" - }, - { - "id": 3363, - "guid": "4db22e73-11ec-4a1b-9cd8-7a9e85313e04", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Brooks", - "company": "Robotemplate", - "phone": "838-519-2137", - "email": "leah@robotemplate.com" - }, - { - "id": 3364, - "guid": "b6c8309b-96a4-418d-afe1-141fd1a7562e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Wainwright", - "company": "Dynarama", - "phone": "842-426-3182", - "email": "rachel@dynarama.com" - }, - { - "id": 3365, - "guid": "ce674ef7-07f8-4259-b55c-8f25586a10d4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Michaelson", - "company": "Transtouch", - "phone": "897-559-2819", - "email": "natalie@transtouch.com" - }, - { - "id": 3366, - "guid": "2c6275d6-1723-4b74-ba08-58e6c6bc78ce", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Andrea Goodman", - "company": "Transtouch", - "phone": "820-538-3860", - "email": "andrea@transtouch.com" - }, - { - "id": 3367, - "guid": "3133b03d-8c06-419b-a91a-e6f56e5767cc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Day", - "company": "OpKeycomm", - "phone": "880-508-2437", - "email": "amelia@opkeycomm.com" - }, - { - "id": 3368, - "guid": "3e4af8dc-5c32-4886-be2a-b6b64de78965", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Fulton", - "company": "Cryptotemplate", - "phone": "878-445-2524", - "email": "brianna@cryptotemplate.com" - }, - { - "id": 3369, - "guid": "2c34a384-b32f-4923-bdb7-a5a6e2d0bc82", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Hancock", - "company": "Safetrust", - "phone": "858-450-2127", - "email": "brianna@safetrust.com" - }, - { - "id": 3370, - "guid": "58024911-d1b4-40d1-b281-1da6f8fc76df", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Sheldon", - "company": "Netseco", - "phone": "896-480-2802", - "email": "mackenzie@netseco.com" - }, - { - "id": 3371, - "guid": "97b826ce-18d8-47ae-a7ff-65323cf8d10b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Smith", - "company": "Interliant", - "phone": "823-582-2299", - "email": "kimberly@interliant.com" - }, - { - "id": 3372, - "guid": "057dbf58-fb8f-45c3-93c7-302c0a3b3561", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Chesterton", - "company": "Raylog", - "phone": "887-435-3346", - "email": "alexis@raylog.com" - }, - { - "id": 3373, - "guid": "dcb1b662-50ac-4639-8934-2465868d4b25", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia WifKinson", - "company": "Cryptotemplate", - "phone": "846-512-3534", - "email": "sofia@cryptotemplate.com" - }, - { - "id": 3374, - "guid": "a318bf53-1b4c-4f5f-8987-676a1196f981", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Calhoun", - "company": "Fibrotopia", - "phone": "878-511-3130", - "email": "caroline@fibrotopia.com" - }, - { - "id": 3375, - "guid": "2032b946-db4f-4130-a7ab-3a5ff35e5185", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Oldridge", - "company": "Teraserv", - "phone": "875-427-2056", - "email": "camila@teraserv.com" - }, - { - "id": 3376, - "guid": "1d87ce15-afc0-49ed-8bd0-2b6f8bb83c66", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Peyton Timmons", - "company": "Netseco", - "phone": "860-545-3220", - "email": "peyton@netseco.com" - }, - { - "id": 3377, - "guid": "a4de394c-f8ad-4c22-b488-0cd19e0ad2e7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Stanley", - "company": "Netseco", - "phone": "898-514-3613", - "email": "khloe@netseco.com" - }, - { - "id": 3378, - "guid": "6eef40b2-ee0a-4f20-8d1c-d2417d33105f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Nathan", - "company": "Raylog", - "phone": "829-499-2369", - "email": "savannah@raylog.com" - }, - { - "id": 3379, - "guid": "7d524f63-01e7-427f-925b-d81f98022f2a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Oswald", - "company": "Textiqua", - "phone": "832-588-2757", - "email": "ava@textiqua.com" - }, - { - "id": 3380, - "guid": "19b1d3e3-1e75-43f3-8fe4-8f28f9137fb0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Murphy", - "company": "Titanirola", - "phone": "832-576-2717", - "email": "gianna@titanirola.com" - }, - { - "id": 3381, - "guid": "7c6d1023-ca5e-423f-ba81-942cf184df0f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Clapton", - "company": "Navivacs", - "phone": "881-568-2096", - "email": "isabella@navivacs.com" - }, - { - "id": 3382, - "guid": "acb4329c-afbd-4f66-b261-bedf263d72d3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Molligan", - "company": "Ventanium", - "phone": "832-518-3635", - "email": "hannah@ventanium.com" - }, - { - "id": 3383, - "guid": "2ed2ef27-e1c5-48c5-80dd-ff9c8b01e661", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Gate", - "company": "Anaframe", - "phone": "832-590-3503", - "email": "bailey@anaframe.com" - }, - { - "id": 3384, - "guid": "e465a560-b5bf-43c0-8d76-77eb1afa3e15", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Adamson", - "company": "iEnland", - "phone": "850-553-3650", - "email": "abigail@ienland.com" - }, - { - "id": 3385, - "guid": "78bbacaa-ee44-4b2c-900f-4ff2a57c26ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Adamson", - "company": "Netseco", - "phone": "854-585-2425", - "email": "serenity@netseco.com" - }, - { - "id": 3386, - "guid": "459a9911-795a-40db-830f-b51a671a6f2c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Gill", - "company": "Syssoft", - "phone": "865-538-2694", - "email": "ella@syssoft.com" - }, - { - "id": 3387, - "guid": "66f24fa5-3f63-4894-a174-ce0217006192", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Valeria Harrison", - "company": "Ventanium", - "phone": "864-428-2950", - "email": "valeria@ventanium.com" - }, - { - "id": 3388, - "guid": "96ff1462-e56e-4578-adfc-836472a6ef80", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Owen", - "company": "Jamconik", - "phone": "849-510-2286", - "email": "madison@jamconik.com" - }, - { - "id": 3389, - "guid": "d2161f39-633b-4199-99fc-991c3bcca136", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Goodman", - "company": "Pericenta", - "phone": "884-441-3739", - "email": "emily@pericenta.com" - }, - { - "id": 3390, - "guid": "226cfb84-f1c4-4047-9051-74c4b5dd8b27", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison White", - "company": "Transtouch", - "phone": "806-581-2849", - "email": "addison@transtouch.com" - }, - { - "id": 3391, - "guid": "74ef5f23-81c1-430e-a5cc-ab840deafea5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Hamphrey", - "company": "Fibroserve", - "phone": "879-458-2183", - "email": "sophie@fibroserve.com" - }, - { - "id": 3392, - "guid": "7cda6544-7ec5-4acb-9d50-7d9261e402fd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Valeria Webster", - "company": "iMedconik", - "phone": "819-457-2295", - "email": "valeria@imedconik.com" - }, - { - "id": 3393, - "guid": "bb5b786c-bb21-4038-ad0f-a2d88867a0ce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Crossman", - "company": "Titanigraf", - "phone": "861-547-3482", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 3394, - "guid": "b60dc809-81af-4b98-b148-7a79233036f8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Hodges", - "company": "Robotemplate", - "phone": "840-559-3324", - "email": "katelyn@robotemplate.com" - }, - { - "id": 3395, - "guid": "ef5b07d2-cdf8-4022-96b9-dd9823016ce6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Carrington", - "company": "Robotemplate", - "phone": "823-420-3878", - "email": "anna@robotemplate.com" - }, - { - "id": 3396, - "guid": "980c452a-e9dc-46a2-a8ea-cfb55c2f92f8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Autumn Gardner", - "company": "US Infratouch", - "phone": "857-418-2038", - "email": "autumn@us infratouch.com" - }, - { - "id": 3397, - "guid": "42573459-25d1-4076-aa24-1cf393fda31f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Nelson", - "company": "Qualserve", - "phone": "811-415-2143", - "email": "kylie@qualserve.com" - }, - { - "id": 3398, - "guid": "138b80bc-65b0-4bd7-a137-6d3b21ba00c8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Sherlock", - "company": "Safeagra", - "phone": "876-566-2172", - "email": "layla@safeagra.com" - }, - { - "id": 3399, - "guid": "472c489c-488a-4793-8b80-e053adfd99a1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Michaelson", - "company": "Fibrotouch", - "phone": "894-526-3677", - "email": "emily@fibrotouch.com" - }, - { - "id": 3400, - "guid": "9ab84f12-6431-451a-b776-92b6f020efc9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Bush", - "company": "Truegate", - "phone": "871-467-3707", - "email": "amelia@truegate.com" - }, - { - "id": 3401, - "guid": "7b70f646-bc38-4047-a5c0-0e30944792c1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Youmans", - "company": "US Infratouch", - "phone": "865-403-2305", - "email": "destiny@us infratouch.com" - }, - { - "id": 3402, - "guid": "5b18682f-bb33-4bf6-bd86-1291f72bda21", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Adamson", - "company": "SysUSA", - "phone": "850-525-3780", - "email": "maria@sysusa.com" - }, - { - "id": 3403, - "guid": "cff1fd96-b713-4772-ad6a-880437e28066", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Chapman", - "company": "Truetomic", - "phone": "816-542-3710", - "email": "trinity@truetomic.com" - }, - { - "id": 3404, - "guid": "db037857-3743-4c90-918c-75f32453144d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Stanley", - "company": "eEyetanic", - "phone": "846-455-2514", - "email": "gabrielle@eeyetanic.com" - }, - { - "id": 3405, - "guid": "0fa6ec22-e552-4420-a522-88a53543601a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Smith", - "company": "Rapigrafix", - "phone": "812-496-3920", - "email": "taylor@rapigrafix.com" - }, - { - "id": 3406, - "guid": "c6b32f06-0f69-4e09-ac70-06ca00d9c88e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Nevaeh Gibbs", - "company": "US Infratouch", - "phone": "875-423-3961", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 3407, - "guid": "57b3cfd6-009f-4ee0-a568-7cfd4aafcb67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Payton Owen", - "company": "Skydata", - "phone": "866-525-2366", - "email": "payton@skydata.com" - }, - { - "id": 3408, - "guid": "7d28fd94-eea2-4476-968c-4316322e233b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Makayla Stanley", - "company": "InfoAirway", - "phone": "825-553-2717", - "email": "makayla@infoairway.com" - }, - { - "id": 3409, - "guid": "c1d3ceed-3f6f-4769-8530-51aeac6e96e2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Brown", - "company": "Orthomedia", - "phone": "851-531-2065", - "email": "leah@orthomedia.com" - }, - { - "id": 3410, - "guid": "ce390fb7-56ec-4a45-b321-18b2624bb02b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Harrison", - "company": "Tekcar", - "phone": "884-580-3460", - "email": "isabella@tekcar.com" - }, - { - "id": 3411, - "guid": "9f2c61ff-2c93-47b6-8773-0d9a4570af1c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Claire Murphy", - "company": "Truetomic", - "phone": "887-473-3904", - "email": "claire@truetomic.com" - }, - { - "id": 3412, - "guid": "eb83a40a-baf9-428c-8094-b433bb1ce2d8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Nelson", - "company": "Aprama", - "phone": "840-422-2166", - "email": "leah@aprama.com" - }, - { - "id": 3413, - "guid": "0f206a8b-3722-4ce3-a8bf-398c9152960b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Miln", - "company": "Conotomics", - "phone": "801-566-3028", - "email": "gianna@conotomics.com" - }, - { - "id": 3414, - "guid": "94af9249-7bc2-4f7f-b443-b82dc1236e33", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madelyn Nash", - "company": "Idmax", - "phone": "876-584-3216", - "email": "madelyn@idmax.com" - }, - { - "id": 3415, - "guid": "c7bcc5b9-6106-4937-9f8a-60d676dd740d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Bush", - "company": "Polytheon", - "phone": "869-485-2937", - "email": "sofia@polytheon.com" - }, - { - "id": 3416, - "guid": "e5485f10-19a0-4b5c-b42d-be4f9545d41c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison Gate", - "company": "Cryptotemplate", - "phone": "890-575-3419", - "email": "madison@cryptotemplate.com" - }, - { - "id": 3417, - "guid": "00808393-8ccb-4bb5-a561-932e5b9b1cc7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Stanley", - "company": "Aprama", - "phone": "859-560-3812", - "email": "chloe@aprama.com" - }, - { - "id": 3418, - "guid": "1c56364e-7f2b-4ac9-9a9c-1f45d82e6ecb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Turner", - "company": "OpKeycomm", - "phone": "896-404-3880", - "email": "molly@opkeycomm.com" - }, - { - "id": 3419, - "guid": "3efeb877-9eb8-4813-9eaa-e523f107ad16", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Gilson", - "company": "Orthosoft", - "phone": "842-504-2337", - "email": "mariah@orthosoft.com" - }, - { - "id": 3420, - "guid": "e90aedd0-43ca-4e42-8316-f41ce8443546", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Gilson", - "company": "Quintegrity", - "phone": "863-454-3531", - "email": "sofia@quintegrity.com" - }, - { - "id": 3421, - "guid": "1784c1f2-aba3-40ae-9f42-820822c24774", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Mercer", - "company": "Unologic", - "phone": "823-599-3159", - "email": "savannah@unologic.com" - }, - { - "id": 3422, - "guid": "143b1609-7ed6-46f5-bb58-69c9c2921c87", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya Cook", - "company": "Aluco", - "phone": "841-440-3578", - "email": "mya@aluco.com" - }, - { - "id": 3423, - "guid": "59af8b0c-4a14-4271-9e01-b9fbd07ca3ad", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Michaelson", - "company": "Safetrust", - "phone": "889-445-2648", - "email": "sophia@safetrust.com" - }, - { - "id": 3424, - "guid": "b3b650f4-372d-46fc-855e-d0778a172c04", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Chapman", - "company": "Allphysiche", - "phone": "814-537-2950", - "email": "claire@allphysiche.com" - }, - { - "id": 3425, - "guid": "ad63e162-4f94-4da4-80bf-9944680c2508", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Waller", - "company": "eEyetanic", - "phone": "896-448-2465", - "email": "abigail@eeyetanic.com" - }, - { - "id": 3426, - "guid": "7803861c-984a-4336-8b16-98e0ba9acc64", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Hancock", - "company": "Nanobanc", - "phone": "888-516-3586", - "email": "claire@nanobanc.com" - }, - { - "id": 3427, - "guid": "3dd4724a-4161-4e8f-819f-d59ce4a3d297", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Crossman", - "company": "Airdyne", - "phone": "884-414-2759", - "email": "isabella@airdyne.com" - }, - { - "id": 3428, - "guid": "ed9e9dcb-c844-431d-a60b-5b510bb61a5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Hoggarth", - "company": "Orthomedia", - "phone": "875-588-2749", - "email": "charlotte@orthomedia.com" - }, - { - "id": 3429, - "guid": "cf39eabb-84fe-459a-86b4-ffc416f362c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Thornton", - "company": "Venconix", - "phone": "841-494-3900", - "email": "madeline@venconix.com" - }, - { - "id": 3430, - "guid": "e2a7a405-0c89-4392-98df-e796a16f72ad", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Wood", - "company": "Truetomic", - "phone": "866-548-2602", - "email": "gabrielle@truetomic.com" - }, - { - "id": 3431, - "guid": "15c6b7c8-4f39-41e0-b97f-cfb0e24ef024", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aubrey Oldridge", - "company": "Generola", - "phone": "814-575-3286", - "email": "aubrey@generola.com" - }, - { - "id": 3432, - "guid": "041260bd-1407-4277-8843-f63829ae6b6d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn White", - "company": "Teratopia", - "phone": "871-493-2362", - "email": "kaitlyn@teratopia.com" - }, - { - "id": 3433, - "guid": "97ff3596-f519-4d9c-b41a-1f02f303be64", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Hoggarth", - "company": "Jamrola", - "phone": "816-400-3594", - "email": "isabelle@jamrola.com" - }, - { - "id": 3434, - "guid": "127a3b4c-f931-4de9-86f2-17447c47284c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Genesis Vaughan", - "company": "Keytheon", - "phone": "833-436-3967", - "email": "genesis@keytheon.com" - }, - { - "id": 3435, - "guid": "98266706-690d-46de-ae11-98c7de1c9e78", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Timmons", - "company": "Systheon", - "phone": "884-457-3079", - "email": "emma@systheon.com" - }, - { - "id": 3436, - "guid": "d47c04ec-50f7-4dd8-968c-06c59ed614e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Ward", - "company": "OpKeycomm", - "phone": "833-533-3063", - "email": "brooke@opkeycomm.com" - }, - { - "id": 3437, - "guid": "9b814b51-7adc-4478-8a98-ec76d7097ba6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Gilson", - "company": "Airdyne", - "phone": "831-533-2867", - "email": "serenity@airdyne.com" - }, - { - "id": 3438, - "guid": "2d50f088-6013-497f-9f71-d5d506565e7b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooklyn Morrison", - "company": "Qualserve", - "phone": "888-509-2817", - "email": "brooklyn@qualserve.com" - }, - { - "id": 3439, - "guid": "a0ff6c92-a37b-494a-a864-15726242389a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Miln", - "company": "eSteganoergy", - "phone": "870-550-2909", - "email": "melanie@esteganoergy.com" - }, - { - "id": 3440, - "guid": "fd8d8c39-832f-445f-a8c2-d5b003f0106c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Gustman", - "company": "SysUSA", - "phone": "876-520-2504", - "email": "alexandra@sysusa.com" - }, - { - "id": 3441, - "guid": "9201975a-63c7-4201-b3ee-35f69454e2a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Brooks", - "company": "iQualcar", - "phone": "857-534-3562", - "email": "bella@iqualcar.com" - }, - { - "id": 3442, - "guid": "05bab8e0-d1b0-4993-bd69-7b0c8868e641", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Stanley", - "company": "Inridium", - "phone": "868-538-3526", - "email": "emma@inridium.com" - }, - { - "id": 3443, - "guid": "fe42e5b5-d076-4e01-81d6-07ab7640590a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Bush", - "company": "Safetrust", - "phone": "819-445-2321", - "email": "alexis@safetrust.com" - }, - { - "id": 3444, - "guid": "df1c9f47-c900-4bec-ab4f-a3b4a0fccd93", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Milton", - "company": "eEyetanic", - "phone": "899-535-2186", - "email": "maya@eeyetanic.com" - }, - { - "id": 3445, - "guid": "c34d7b0f-df24-448d-ac86-cc21af6a15b4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Waller", - "company": "Indisco", - "phone": "898-576-3737", - "email": "molly@indisco.com" - }, - { - "id": 3446, - "guid": "5e63187d-e4e6-481a-8d78-9a4fcea81f19", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooklyn Gilmore", - "company": "iEnland", - "phone": "871-550-2955", - "email": "brooklyn@ienland.com" - }, - { - "id": 3447, - "guid": "b1ef59b6-78cb-4169-abb1-8cbb29955cdc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Chandter", - "company": "Airdyne", - "phone": "857-416-3508", - "email": "olivia@airdyne.com" - }, - { - "id": 3448, - "guid": "a8ae6188-947e-4b8d-ba20-5173dfa43cac", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mia Goodman", - "company": "Compuamerica", - "phone": "872-535-2442", - "email": "mia@compuamerica.com" - }, - { - "id": 3449, - "guid": "2860e866-e246-422c-8b35-0fd7a5fbf4e4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Freeman", - "company": "Titanirola", - "phone": "889-553-3522", - "email": "sophie@titanirola.com" - }, - { - "id": 3450, - "guid": "ff7ad299-f648-4eb4-837a-6ca6b0e5875c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Higgins", - "company": "Aluco", - "phone": "807-593-2846", - "email": "leah@aluco.com" - }, - { - "id": 3451, - "guid": "4f8e618a-4924-4823-addd-04b4b7855c00", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Stanley", - "company": "Infraique", - "phone": "802-526-3225", - "email": "allison@infraique.com" - }, - { - "id": 3452, - "guid": "de95a77c-b478-4606-8b13-765a8b1d43f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Evelyn Goodman", - "company": "Safetrust", - "phone": "842-554-3182", - "email": "evelyn@safetrust.com" - }, - { - "id": 3453, - "guid": "54a38dce-fe55-472a-bdf3-678c699c9c81", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Sheldon", - "company": "US Infratouch", - "phone": "844-459-2901", - "email": "gabrielle@us infratouch.com" - }, - { - "id": 3454, - "guid": "3489b220-ed22-4055-bcdc-4e94f1ff5bd0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Trinity Oliver", - "company": "Teratopia", - "phone": "805-500-3430", - "email": "trinity@teratopia.com" - }, - { - "id": 3455, - "guid": "600d87d9-0de6-47e2-b78d-0ee8f8c001d7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Abramson", - "company": "Titanigraf", - "phone": "878-529-2838", - "email": "faith@titanigraf.com" - }, - { - "id": 3456, - "guid": "04a5e730-8e18-47ce-9013-845a56bea59c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sydney Ogden", - "company": "Orthosoft", - "phone": "817-581-3349", - "email": "sydney@orthosoft.com" - }, - { - "id": 3457, - "guid": "ebc1c197-2b84-4147-b67f-c382633a0c53", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Hardman", - "company": "Conrama", - "phone": "813-553-3047", - "email": "madison@conrama.com" - }, - { - "id": 3458, - "guid": "7a7291d8-b91e-4c97-b3e4-e2494732f45e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Higgins", - "company": "Raylog", - "phone": "837-587-2859", - "email": "madelyn@raylog.com" - }, - { - "id": 3459, - "guid": "e340e14b-fbee-4795-973b-848083581744", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Gerald", - "company": "Idmax", - "phone": "877-495-3562", - "email": "khloe@idmax.com" - }, - { - "id": 3460, - "guid": "3703a854-fb0e-4ee2-8b5a-b5e93a6cf11e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Gardner", - "company": "Safeagra", - "phone": "840-505-2549", - "email": "genesis@safeagra.com" - }, - { - "id": 3461, - "guid": "b5acb6d9-ec0a-4114-b7f7-a37c400aa578", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Crossman", - "company": "Rapigrafix", - "phone": "856-454-3735", - "email": "sofia@rapigrafix.com" - }, - { - "id": 3462, - "guid": "f96cd884-4023-4669-9f84-4c96445683ad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Ford", - "company": "Tekcar", - "phone": "814-555-2263", - "email": "faith@tekcar.com" - }, - { - "id": 3463, - "guid": "3be13fd4-3d4e-4644-9442-0955cdcc19f5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Murphy", - "company": "Quintegrity", - "phone": "821-407-2388", - "email": "isabella@quintegrity.com" - }, - { - "id": 3464, - "guid": "03b1b898-b0df-4825-ae90-76a331e62cb8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kimberly Hamphrey", - "company": "Westtomik", - "phone": "852-529-2831", - "email": "kimberly@westtomik.com" - }, - { - "id": 3465, - "guid": "5427d8a3-4c10-4d1f-b33a-47bf9f9e8a16", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Warren", - "company": "Safeagra", - "phone": "820-543-3572", - "email": "grace@safeagra.com" - }, - { - "id": 3466, - "guid": "aaee7025-aef6-4b7a-8c94-a2a0d91d8b0a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Higgins", - "company": "Skydata", - "phone": "874-460-2111", - "email": "jasmine@skydata.com" - }, - { - "id": 3467, - "guid": "cfa8a7f7-7166-4e52-b3f5-434091d176b2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Turner", - "company": "Anagraph", - "phone": "869-552-3257", - "email": "ariana@anagraph.com" - }, - { - "id": 3468, - "guid": "8a88a129-4b10-49de-ac73-b657dc9628da", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Gibbs", - "company": "Aprama", - "phone": "883-458-2790", - "email": "brooke@aprama.com" - }, - { - "id": 3469, - "guid": "4491182b-9fc6-4ddf-b7fe-19b50e517505", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Carrington", - "company": "Infraique", - "phone": "861-411-2085", - "email": "ella@infraique.com" - }, - { - "id": 3470, - "guid": "f69d38fb-9ad2-4f30-827d-541a4af8412f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Carey", - "company": "Hypervaco", - "phone": "849-487-2872", - "email": "sophie@hypervaco.com" - }, - { - "id": 3471, - "guid": "c1ed7f38-e99a-47a8-a8d9-698c578e0fb6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Carrington", - "company": "Entcast", - "phone": "866-412-3982", - "email": "evelyn@entcast.com" - }, - { - "id": 3472, - "guid": "8da60768-5d92-4494-aa2a-51e302569e8e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Valeria Wainwright", - "company": "Pacwest", - "phone": "832-452-2347", - "email": "valeria@pacwest.com" - }, - { - "id": 3473, - "guid": "8be7de0f-c0a1-455f-99a9-bb5bdc82e774", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa Miln", - "company": "Orthomedia", - "phone": "896-408-2121", - "email": "vanessa@orthomedia.com" - }, - { - "id": 3474, - "guid": "e712d135-6133-4420-ba3b-c40c08488a68", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Gill", - "company": "Enlogia", - "phone": "858-402-2109", - "email": "avery@enlogia.com" - }, - { - "id": 3475, - "guid": "7db24375-618d-40df-a5f1-8c9ff999949f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Nathan", - "company": "Robotemplate", - "phone": "809-547-3544", - "email": "peyton@robotemplate.com" - }, - { - "id": 3476, - "guid": "8fcd7659-c533-4b29-901e-ea08713d015e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Chesterton", - "company": "Infragraph", - "phone": "820-504-2138", - "email": "jasmine@infragraph.com" - }, - { - "id": 3477, - "guid": "b20c31ae-6393-45ef-a6e7-16559da18a07", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Hamphrey", - "company": "iOptystix", - "phone": "840-424-3301", - "email": "andrea@ioptystix.com" - }, - { - "id": 3478, - "guid": "c2b64353-e723-47d0-891e-aa1fdd072bcd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Sherlock", - "company": "Venconix", - "phone": "882-465-2074", - "email": "madeline@venconix.com" - }, - { - "id": 3479, - "guid": "38c8044c-a1f7-482e-9e07-84c432cd9554", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Nathan", - "company": "Quintegrity", - "phone": "867-400-3290", - "email": "serenity@quintegrity.com" - }, - { - "id": 3480, - "guid": "1b836d15-9a15-430e-98ce-845a951167c5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Evelyn Michaelson", - "company": "Inridium", - "phone": "831-405-3097", - "email": "evelyn@inridium.com" - }, - { - "id": 3481, - "guid": "8a0b9afd-6072-4eba-a770-d50cf97e0656", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jocelyn Crossman", - "company": "Titanigraf", - "phone": "894-538-3378", - "email": "jocelyn@titanigraf.com" - }, - { - "id": 3482, - "guid": "9c695ddb-6a3a-4b4d-8f80-780ad5c78626", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley Sherlock", - "company": "Netseco", - "phone": "897-502-2253", - "email": "ashley@netseco.com" - }, - { - "id": 3483, - "guid": "cae8e47e-400c-4bc4-a455-5476c3d09d6d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Molligan", - "company": "Teraserv", - "phone": "856-564-3787", - "email": "peyton@teraserv.com" - }, - { - "id": 3484, - "guid": "d88e97b3-3310-4c13-84b5-0cca366fd925", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Stanley", - "company": "Celgra", - "phone": "805-548-3991", - "email": "lauren@celgra.com" - }, - { - "id": 3485, - "guid": "af6cc236-fc6c-46d6-bf5d-0e4eab018c03", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Ward", - "company": "RoboAerlogix", - "phone": "858-428-2431", - "email": "brooklyn@roboaerlogix.com" - }, - { - "id": 3486, - "guid": "56daa9b1-4171-494f-b534-7dd6eaf8e6bf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Davidson", - "company": "iQualcar", - "phone": "815-471-2840", - "email": "samantha@iqualcar.com" - }, - { - "id": 3487, - "guid": "e2141e7f-7345-4f0a-833d-b2f27d3d85be", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sydney Vaughan", - "company": "Conotomics", - "phone": "883-428-2964", - "email": "sydney@conotomics.com" - }, - { - "id": 3488, - "guid": "734148ce-3b55-494c-b7b6-996c6d712e78", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Wallace", - "company": "Netsystems", - "phone": "839-410-2886", - "email": "gabriella@netsystems.com" - }, - { - "id": 3489, - "guid": "7ddd9f70-9015-46dd-93f9-24700048852c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ariana Oswald", - "company": "Syssoft", - "phone": "884-555-3946", - "email": "ariana@syssoft.com" - }, - { - "id": 3490, - "guid": "1e580455-1ef9-411c-9840-16d6235eaf97", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kayla Bush", - "company": "Westgate", - "phone": "830-508-3687", - "email": "kayla@westgate.com" - }, - { - "id": 3491, - "guid": "82e1f17e-e946-4540-a50e-d33a2a04dd4c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila Croftoon", - "company": "Mescaridic", - "phone": "843-579-3504", - "email": "camila@mescaridic.com" - }, - { - "id": 3492, - "guid": "dadbd091-a2d8-41d2-9c67-7f850bb3802f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Carroll", - "company": "Qualserve", - "phone": "845-478-2316", - "email": "rachel@qualserve.com" - }, - { - "id": 3493, - "guid": "9e1fe47e-18b3-4005-a12c-22ebd6749513", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Chesterton", - "company": "Anaframe", - "phone": "818-549-3686", - "email": "maria@anaframe.com" - }, - { - "id": 3494, - "guid": "104cb9b8-a946-4664-a66d-77b7ec60c8a0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Nash", - "company": "SysVenamerica", - "phone": "824-463-2702", - "email": "katherine@sysvenamerica.com" - }, - { - "id": 3495, - "guid": "14711509-3d84-4f03-8574-b5b36764c3e4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Gill", - "company": "iSkyvaco", - "phone": "851-457-3835", - "email": "autumn@iskyvaco.com" - }, - { - "id": 3496, - "guid": "51d1a22c-2345-4690-aad0-2dd4a2ccff58", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Brown", - "company": "Unconix", - "phone": "838-447-2341", - "email": "khloe@unconix.com" - }, - { - "id": 3497, - "guid": "2bff97a7-3bb6-4439-a80e-5d30c311f3f4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Morrison", - "company": "Infragraph", - "phone": "848-519-2461", - "email": "paige@infragraph.com" - }, - { - "id": 3498, - "guid": "7c1255b6-7794-497c-956f-994f9c002b06", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Ford", - "company": "Venconix", - "phone": "854-576-2422", - "email": "layla@venconix.com" - }, - { - "id": 3499, - "guid": "d8389c81-ae26-4a1f-adc9-a3f92c6c4712", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Nash", - "company": "Celgra", - "phone": "848-451-2428", - "email": "zoey@celgra.com" - }, - { - "id": 3500, - "guid": "77d8f7e7-79cd-4184-8ec5-2a2db85a35f6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mariah Clapton", - "company": "Navivacs", - "phone": "843-408-2519", - "email": "mariah@navivacs.com" - }, - { - "id": 3501, - "guid": "8622bdd3-ede3-4c58-a4ef-0d659f5e2494", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Nelson", - "company": "Raylog", - "phone": "868-520-3144", - "email": "lauren@raylog.com" - }, - { - "id": 3502, - "guid": "3d43e856-3de2-4fc4-996b-c26eaed415a5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Oswald", - "company": "Textiqua", - "phone": "856-524-3041", - "email": "chloe@textiqua.com" - }, - { - "id": 3503, - "guid": "4930d674-0ced-4169-8459-d1bdecbb9bf0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Galbraith", - "company": "Entcast", - "phone": "821-457-2321", - "email": "anna@entcast.com" - }, - { - "id": 3504, - "guid": "c3ed5bd9-1716-4642-981e-34d81a9ef018", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mia Youmans", - "company": "Sontopia", - "phone": "898-441-2513", - "email": "mia@sontopia.com" - }, - { - "id": 3505, - "guid": "7dd5cf2f-d542-4f1f-8a7f-d52f3f3f01d3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Nelson", - "company": "Anaframe", - "phone": "895-509-3493", - "email": "ella@anaframe.com" - }, - { - "id": 3506, - "guid": "c0751f03-658f-4308-bebd-ae5a6b97e6d6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Thorndike", - "company": "Orthosoft", - "phone": "821-508-2767", - "email": "zoe@orthosoft.com" - }, - { - "id": 3507, - "guid": "fcd0f4ce-f694-4811-857e-5a78b27d8bb7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Osborne", - "company": "Sontopia", - "phone": "810-423-3848", - "email": "zoey@sontopia.com" - }, - { - "id": 3508, - "guid": "21db6c4c-0abc-446e-8036-18268ae6d66e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Caroline Watson", - "company": "Openserve", - "phone": "877-598-2111", - "email": "caroline@openserve.com" - }, - { - "id": 3509, - "guid": "a0a7d5d8-20f0-40a3-bc2d-441401f195f7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Osborne", - "company": "Aluco", - "phone": "820-463-2410", - "email": "victoria@aluco.com" - }, - { - "id": 3510, - "guid": "df7a1638-9081-4768-8dd7-36812ab53fac", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Fisher", - "company": "Orthomedia", - "phone": "854-427-2571", - "email": "camila@orthomedia.com" - }, - { - "id": 3511, - "guid": "53fc1d44-ab36-40ff-ad76-9aae4bd775bc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Molligan", - "company": "Robotemplate", - "phone": "804-495-3880", - "email": "autumn@robotemplate.com" - }, - { - "id": 3512, - "guid": "c1d9e020-0be8-4ed3-b230-84575e649d7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Walkman", - "company": "Sontopia", - "phone": "806-501-3466", - "email": "bailey@sontopia.com" - }, - { - "id": 3513, - "guid": "f8739f79-3ca2-4a1c-b59f-52ec9d03d8fc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Goodman", - "company": "Safetrust", - "phone": "881-405-3597", - "email": "angelina@safetrust.com" - }, - { - "id": 3514, - "guid": "a1afe1ff-079d-4e22-b9ce-87341373f27b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Cook", - "company": "Cryptotegrity", - "phone": "824-539-3679", - "email": "grace@cryptotegrity.com" - }, - { - "id": 3515, - "guid": "54486bee-c39e-4d8d-bdbc-952882086008", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Nelson", - "company": "Thermotomic", - "phone": "868-424-3596", - "email": "aubrey@thermotomic.com" - }, - { - "id": 3516, - "guid": "db9934ee-3a5e-4f77-bddf-d3b313240739", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Milton", - "company": "Tekcar", - "phone": "878-587-2880", - "email": "alexis@tekcar.com" - }, - { - "id": 3517, - "guid": "866e4f53-f9f3-4ee6-b776-0c7602586746", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Creighton", - "company": "Steganoconiche", - "phone": "845-513-2277", - "email": "julia@steganoconiche.com" - }, - { - "id": 3518, - "guid": "ed199d3c-30fd-4054-9c7a-037c848a03a3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Brooks", - "company": "Conotomics", - "phone": "853-472-2668", - "email": "katherine@conotomics.com" - }, - { - "id": 3519, - "guid": "fdc66544-440b-4a63-ac92-9e54a2d80bd4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Murphy", - "company": "SysVenamerica", - "phone": "823-461-2851", - "email": "savannah@sysvenamerica.com" - }, - { - "id": 3520, - "guid": "35a2b673-02f8-40c7-9f0e-52f86734485c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabriella Warren", - "company": "Titanirola", - "phone": "881-442-3455", - "email": "gabriella@titanirola.com" - }, - { - "id": 3521, - "guid": "59cbd889-3a3c-4ec8-b43a-84f4eb5ea8e2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Gustman", - "company": "Teraserv", - "phone": "833-493-2919", - "email": "makayla@teraserv.com" - }, - { - "id": 3522, - "guid": "b184b40f-571c-4ff1-8037-2a5242c47d99", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Sheldon", - "company": "US Omnigraphik", - "phone": "853-513-2703", - "email": "hailey@us omnigraphik.com" - }, - { - "id": 3523, - "guid": "9dda3d3a-7284-437a-80b2-dec1a2096a68", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Ford", - "company": "Nanobanc", - "phone": "878-460-3521", - "email": "maria@nanobanc.com" - }, - { - "id": 3524, - "guid": "fb1f9fe6-0cce-4572-9181-8518027c3bbb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Anna Ogden", - "company": "OpKeycomm", - "phone": "873-427-2515", - "email": "anna@opkeycomm.com" - }, - { - "id": 3525, - "guid": "c84010bc-a1c0-43ec-a309-055c86ff6da8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Gerald", - "company": "Teraserv", - "phone": "835-478-3307", - "email": "alexis@teraserv.com" - }, - { - "id": 3526, - "guid": "5a212e89-f409-404b-b08e-693870f8c549", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Gilbert", - "company": "Cryptotemplate", - "phone": "861-543-3475", - "email": "genesis@cryptotemplate.com" - }, - { - "id": 3527, - "guid": "b8b2dcf2-11dd-4181-aa76-ea911c6e9f46", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Nevaeh Adamson", - "company": "Vencom", - "phone": "828-546-2114", - "email": "nevaeh@vencom.com" - }, - { - "id": 3528, - "guid": "344a058d-98ed-4100-a97b-60ca142577b3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Carroll", - "company": "Dynarama", - "phone": "894-586-2703", - "email": "brianna@dynarama.com" - }, - { - "id": 3529, - "guid": "01f31595-b899-4ec6-b00b-b9b85635caf5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Galbraith", - "company": "Indisco", - "phone": "845-592-3868", - "email": "amelia@indisco.com" - }, - { - "id": 3530, - "guid": "a2e66ddb-5a3b-4f7e-be26-fa47ef29710b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Nash", - "company": "Cryptotemplate", - "phone": "839-598-2715", - "email": "sofia@cryptotemplate.com" - }, - { - "id": 3531, - "guid": "338e8846-b685-4f9a-b47d-6170392e2ed9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sydney Timmons", - "company": "Conotomics", - "phone": "876-540-3152", - "email": "sydney@conotomics.com" - }, - { - "id": 3532, - "guid": "30f93982-94bc-499d-9285-022900dfc7f3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mya Ward", - "company": "Idmax", - "phone": "877-429-2903", - "email": "mya@idmax.com" - }, - { - "id": 3533, - "guid": "10efc5de-d5e0-4187-b2ed-fad09b4a22aa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Morrison", - "company": "Pacwest", - "phone": "807-483-3553", - "email": "katelyn@pacwest.com" - }, - { - "id": 3534, - "guid": "e2c5f8e3-23fb-405d-b85e-897f2e6e0080", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Hoggarth", - "company": "Robocomm", - "phone": "816-465-3705", - "email": "kaitlyn@robocomm.com" - }, - { - "id": 3535, - "guid": "a3e21f18-7628-40bb-8fd6-ff4e20c3b42e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Cramer", - "company": "Dynarama", - "phone": "862-434-3282", - "email": "zoe@dynarama.com" - }, - { - "id": 3536, - "guid": "746d39ea-0691-499e-b3c0-05f3a32c0127", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Clapton", - "company": "Sontopia", - "phone": "881-410-2548", - "email": "lillian@sontopia.com" - }, - { - "id": 3537, - "guid": "cabb3d96-de68-4f27-aa52-bb5b22c36dc0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Milton", - "company": "US Omnigraphik", - "phone": "867-598-2973", - "email": "chloe@us omnigraphik.com" - }, - { - "id": 3538, - "guid": "cf0cef15-f985-40a9-aee2-f720e3c0deeb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline White", - "company": "Anaframe", - "phone": "827-521-2696", - "email": "caroline@anaframe.com" - }, - { - "id": 3539, - "guid": "5b015348-0af8-432a-b282-6942ea75c7b9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Hoggarth", - "company": "Steganoconiche", - "phone": "817-530-2653", - "email": "taylor@steganoconiche.com" - }, - { - "id": 3540, - "guid": "319e0b5a-ce51-4cb3-a4db-d2910929cfea", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Webster", - "company": "Multitiqua", - "phone": "855-405-3826", - "email": "trinity@multitiqua.com" - }, - { - "id": 3541, - "guid": "87deca7b-e143-4c07-876b-ff2aaecf6850", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Vance", - "company": "Allphysiche", - "phone": "831-594-3994", - "email": "gianna@allphysiche.com" - }, - { - "id": 3542, - "guid": "aa5287ac-8207-41a7-8157-ac23e6f6d4fa", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Cook", - "company": "Venconix", - "phone": "872-475-3761", - "email": "genesis@venconix.com" - }, - { - "id": 3543, - "guid": "0a4f0c6f-bc12-4f54-8651-13f43ae6017b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Hawkins", - "company": "Teratopia", - "phone": "874-518-3128", - "email": "andrea@teratopia.com" - }, - { - "id": 3544, - "guid": "d1cc005f-6e48-4c88-b77a-32b28f534c3a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Watson", - "company": "Venconix", - "phone": "817-522-2780", - "email": "khloe@venconix.com" - }, - { - "id": 3545, - "guid": "b28d48ec-4470-45e5-b017-8bdd54ff7fcc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Oliver", - "company": "Vencom", - "phone": "864-564-3290", - "email": "katelyn@vencom.com" - }, - { - "id": 3546, - "guid": "670723a0-c435-4eb2-9f95-f776d4bb080c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Mercer", - "company": "Rapigrafix", - "phone": "836-508-3392", - "email": "molly@rapigrafix.com" - }, - { - "id": 3547, - "guid": "231ecf59-d065-43b6-9f1b-8b8d5b5972ae", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Osborne", - "company": "Conrama", - "phone": "820-578-3439", - "email": "gabrielle@conrama.com" - }, - { - "id": 3548, - "guid": "83101460-1d69-46ba-adb8-6355ff2e0fc9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Freeman", - "company": "iEnland", - "phone": "878-515-2980", - "email": "isabelle@ienland.com" - }, - { - "id": 3549, - "guid": "886a2055-a8ec-44e6-aa22-742681d8a582", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Owen", - "company": "Truegate", - "phone": "851-461-2865", - "email": "kaitlyn@truegate.com" - }, - { - "id": 3550, - "guid": "7968c0c7-9fe3-48a5-9671-6a08f824e03b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Nathan", - "company": "Syssoft", - "phone": "890-464-2046", - "email": "gabrielle@syssoft.com" - }, - { - "id": 3551, - "guid": "9ff055a9-04b3-4a87-8f50-87ecfae1f806", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Smith", - "company": "iEnland", - "phone": "841-411-3405", - "email": "gabriella@ienland.com" - }, - { - "id": 3552, - "guid": "6f55a98e-5023-425b-9bb9-b773192f10b9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Nelson", - "company": "Westmedia", - "phone": "852-462-2264", - "email": "nevaeh@westmedia.com" - }, - { - "id": 3553, - "guid": "b541db56-8b7e-4ef3-99a4-13b2ec435f65", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Brown", - "company": "Orthosoft", - "phone": "827-569-3566", - "email": "morgan@orthosoft.com" - }, - { - "id": 3554, - "guid": "c96db4e1-6f3c-496c-b0aa-c46cea18d69f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Nathan", - "company": "Westtomik", - "phone": "817-449-3390", - "email": "autumn@westtomik.com" - }, - { - "id": 3555, - "guid": "08b83434-a2be-4b15-afdc-16a3946ec565", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Youmans", - "company": "Navivacs", - "phone": "818-401-3708", - "email": "olivia@navivacs.com" - }, - { - "id": 3556, - "guid": "9abf1f3c-dae4-421d-94d4-806fc0908b03", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Gardner", - "company": "Pericenta", - "phone": "826-599-2218", - "email": "paige@pericenta.com" - }, - { - "id": 3557, - "guid": "12cd0647-e69d-4f30-86fd-e2551dc8070e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Clapton", - "company": "Robotomic", - "phone": "804-520-2931", - "email": "rachel@robotomic.com" - }, - { - "id": 3558, - "guid": "9ca5cb4b-56d4-4da3-b033-01f47413d1f4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Gardner", - "company": "Venconix", - "phone": "853-589-2257", - "email": "angelina@venconix.com" - }, - { - "id": 3559, - "guid": "8c26b32d-3473-4afe-ba0f-65abdb40632c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Ford", - "company": "Conrama", - "phone": "894-438-2122", - "email": "molly@conrama.com" - }, - { - "id": 3560, - "guid": "0b97925d-ce2f-43f0-b7c5-43328acd6b24", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Thorndike", - "company": "Titanirola", - "phone": "892-444-2880", - "email": "victoria@titanirola.com" - }, - { - "id": 3561, - "guid": "440760bf-fc87-458a-b401-49b1735c11df", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Ford", - "company": "Conrama", - "phone": "882-582-2953", - "email": "brianna@conrama.com" - }, - { - "id": 3562, - "guid": "5845a19e-b6db-44f4-8670-70c41dae376e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Ford", - "company": "OpKeycomm", - "phone": "838-504-2248", - "email": "kayla@opkeycomm.com" - }, - { - "id": 3563, - "guid": "049fff41-2763-4064-bfcd-0d4de8530115", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Gardner", - "company": "Thermotomic", - "phone": "847-429-3538", - "email": "faith@thermotomic.com" - }, - { - "id": 3564, - "guid": "482bf6a4-32d5-44bd-9b1f-59a66c3460a3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Haig", - "company": "Nanobanc", - "phone": "886-577-3263", - "email": "jasmine@nanobanc.com" - }, - { - "id": 3565, - "guid": "71296707-193a-4a01-bc60-3d738ef2619c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Camila Waller", - "company": "Hypervaco", - "phone": "863-576-2730", - "email": "camila@hypervaco.com" - }, - { - "id": 3566, - "guid": "e06c3fe1-2bd1-4af1-b52d-8d902483371e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Chandter", - "company": "eEyetanic", - "phone": "829-484-3448", - "email": "addison@eeyetanic.com" - }, - { - "id": 3567, - "guid": "4efdcc95-9dcc-42f6-b518-58168138d937", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Michaelson", - "company": "Videobanc", - "phone": "854-571-2969", - "email": "melanie@videobanc.com" - }, - { - "id": 3568, - "guid": "5fefa229-fde8-4854-b092-9b1ad5cd5b51", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Cook", - "company": "Robotomic", - "phone": "848-445-3419", - "email": "gabriella@robotomic.com" - }, - { - "id": 3569, - "guid": "ad97c358-32dd-4e12-9afc-e01bfec3f5b6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Stanley", - "company": "Fibroserve", - "phone": "865-526-3658", - "email": "bailey@fibroserve.com" - }, - { - "id": 3570, - "guid": "2b2d3c0e-4ba3-46cc-9a6f-a311205d080b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoe Hardman", - "company": "Truegate", - "phone": "819-529-3279", - "email": "zoe@truegate.com" - }, - { - "id": 3571, - "guid": "9e9188a2-1d5f-4b0d-8fd9-0308d0250b16", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Brooks", - "company": "Videobanc", - "phone": "844-572-3863", - "email": "payton@videobanc.com" - }, - { - "id": 3572, - "guid": "28b80dce-02b5-4bc5-b947-d93b47f50911", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexa Morrison", - "company": "Aluco", - "phone": "883-491-3839", - "email": "alexa@aluco.com" - }, - { - "id": 3573, - "guid": "cac5a2a1-d12a-42c2-b224-2f43e5ef6eea", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Davidson", - "company": "Allnet", - "phone": "887-599-2446", - "email": "layla@allnet.com" - }, - { - "id": 3574, - "guid": "c6163a04-1a1d-4004-9015-2c287a5e5aad", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia White", - "company": "US Omnigraphik", - "phone": "814-483-2540", - "email": "amelia@us omnigraphik.com" - }, - { - "id": 3575, - "guid": "8c933754-639f-4ee3-a752-d8731d2f59b9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Daniels", - "company": "Cryptotemplate", - "phone": "871-548-2629", - "email": "jocelyn@cryptotemplate.com" - }, - { - "id": 3576, - "guid": "270ff3af-5692-4aa5-8be4-d3a3dcede698", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa Gilson", - "company": "Anagraph", - "phone": "831-495-2365", - "email": "vanessa@anagraph.com" - }, - { - "id": 3577, - "guid": "562564a9-8e78-45d1-9a5f-81090220ccdf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Waller", - "company": "Anagraph", - "phone": "813-542-3822", - "email": "alexa@anagraph.com" - }, - { - "id": 3578, - "guid": "3c747ccb-88a8-4e20-944a-f1dbc66d094c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bella Gerald", - "company": "Steganoconiche", - "phone": "871-471-3290", - "email": "bella@steganoconiche.com" - }, - { - "id": 3579, - "guid": "9f8cc5f0-4e2b-4e03-b31b-692aed444914", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Chapman", - "company": "Allphysiche", - "phone": "831-446-3878", - "email": "jasmine@allphysiche.com" - }, - { - "id": 3580, - "guid": "bbf9dc7d-d3ec-41c2-a87e-17297d84f2c1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Waller", - "company": "iOptystix", - "phone": "811-455-2857", - "email": "zoe@ioptystix.com" - }, - { - "id": 3581, - "guid": "183f8dcc-b79b-498a-8b75-d92423d7b459", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Conors", - "company": "Airdyne", - "phone": "833-478-3419", - "email": "elizabeth@airdyne.com" - }, - { - "id": 3582, - "guid": "e9a46237-1479-483e-9384-0b39e33f4a22", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Wood", - "company": "Westtomik", - "phone": "854-539-3736", - "email": "mya@westtomik.com" - }, - { - "id": 3583, - "guid": "a696231e-525c-4224-a8d6-34ba91343523", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Valeria Miller", - "company": "iQualcar", - "phone": "884-448-2374", - "email": "valeria@iqualcar.com" - }, - { - "id": 3584, - "guid": "48d0ac97-1408-4b51-b40a-7ca8fd1e9aab", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Hailey", - "company": "Hypervaco", - "phone": "851-492-2743", - "email": "jocelyn@hypervaco.com" - }, - { - "id": 3585, - "guid": "960b0669-6dd1-4ceb-8287-9cd501c0a56f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Day", - "company": "Titanirola", - "phone": "843-456-3455", - "email": "amelia@titanirola.com" - }, - { - "id": 3586, - "guid": "7a545295-2496-46ea-9838-ab58c621c7d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Wallace", - "company": "Proline", - "phone": "844-412-2836", - "email": "makayla@proline.com" - }, - { - "id": 3587, - "guid": "2be7e949-a7cb-4acf-93f5-1eda590a2153", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Miln", - "company": "Fibrotopia", - "phone": "803-590-2386", - "email": "andrea@fibrotopia.com" - }, - { - "id": 3588, - "guid": "92e71e40-45ce-4b26-89a4-e36a3f94539e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Oldman", - "company": "Dynarama", - "phone": "823-416-3885", - "email": "makayla@dynarama.com" - }, - { - "id": 3589, - "guid": "c82b5886-273c-4711-83e1-0e435a374250", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Wesley", - "company": "Transtouch", - "phone": "805-513-2102", - "email": "leah@transtouch.com" - }, - { - "id": 3590, - "guid": "5662f94c-473b-4e83-8e28-553733c50f23", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Gate", - "company": "Mescatron", - "phone": "897-595-3864", - "email": "serenity@mescatron.com" - }, - { - "id": 3591, - "guid": "f4183c3e-dfbe-494e-98c8-b17e512db9cc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Day", - "company": "Robotemplate", - "phone": "864-548-3724", - "email": "angelina@robotemplate.com" - }, - { - "id": 3592, - "guid": "6c9543c5-b765-4739-acbd-4a1944a8b3cf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Carroll", - "company": "Westgate", - "phone": "827-563-3517", - "email": "evelyn@westgate.com" - }, - { - "id": 3593, - "guid": "7fad25fc-c7ec-4aac-bb72-1e21e95b369b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Croftoon", - "company": "Vencom", - "phone": "838-477-2593", - "email": "allison@vencom.com" - }, - { - "id": 3594, - "guid": "71cc7c62-a1e1-4b44-b142-ffb739fb04c1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Destiny Cramer", - "company": "Infraique", - "phone": "825-467-3603", - "email": "destiny@infraique.com" - }, - { - "id": 3595, - "guid": "54b1983a-5da8-4a06-be8d-9d0dc2506741", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Gustman", - "company": "Polytheon", - "phone": "826-498-2061", - "email": "gianna@polytheon.com" - }, - { - "id": 3596, - "guid": "81386732-ad42-447b-82a7-a77171967cdc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Hamphrey", - "company": "Tekcar", - "phone": "805-431-2861", - "email": "emily@tekcar.com" - }, - { - "id": 3597, - "guid": "f60f53ec-c2fe-4fc5-bf02-0b1a8f9ed1da", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Brooks", - "company": "Syssoft", - "phone": "893-467-3911", - "email": "hannah@syssoft.com" - }, - { - "id": 3598, - "guid": "ee8ef2e0-c60c-4c12-81de-857b9e1c6d1a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Nathan", - "company": "iEnland", - "phone": "856-426-3989", - "email": "mia@ienland.com" - }, - { - "id": 3599, - "guid": "654857e7-a3b9-4b9c-a06f-55ac1bbcc7c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Goodman", - "company": "Mescatron", - "phone": "801-523-3985", - "email": "destiny@mescatron.com" - }, - { - "id": 3600, - "guid": "a2114c1f-f393-419e-b6fb-29764fabb44a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Fisher", - "company": "Mescaridic", - "phone": "892-595-2871", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 3601, - "guid": "2395bcc9-a8d8-465a-9ef9-bb3bce8eefa8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Thomson", - "company": "Gigaura", - "phone": "800-413-2490", - "email": "mia@gigaura.com" - }, - { - "id": 3602, - "guid": "5d7bf114-dff8-46a4-bbec-c267b688b641", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alyssa Day", - "company": "Hypervaco", - "phone": "889-468-2149", - "email": "alyssa@hypervaco.com" - }, - { - "id": 3603, - "guid": "08ab8c56-3f86-4c94-ac2e-daf855cede42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Wood", - "company": "Teknoplexon", - "phone": "808-531-3456", - "email": "taylor@teknoplexon.com" - }, - { - "id": 3604, - "guid": "13b0fe50-a1be-4796-b257-c00793b6e86b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Higgins", - "company": "Unologic", - "phone": "875-465-2956", - "email": "kayla@unologic.com" - }, - { - "id": 3605, - "guid": "d61396ab-9a8e-4cd2-9a0e-5248a90e2a45", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Haig", - "company": "Airdyne", - "phone": "834-526-2500", - "email": "riley@airdyne.com" - }, - { - "id": 3606, - "guid": "c56289a3-4480-4f21-be92-49903c003fa8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Nash", - "company": "Skydata", - "phone": "852-479-3379", - "email": "molly@skydata.com" - }, - { - "id": 3607, - "guid": "0e6afacd-8f3a-43eb-aba0-36d1140f7973", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Harrison", - "company": "Teratopia", - "phone": "885-412-2443", - "email": "allison@teratopia.com" - }, - { - "id": 3608, - "guid": "232874c8-dfb9-4b6d-8aa9-1b3cc072c08f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Fisher", - "company": "iSkyvaco", - "phone": "806-435-3266", - "email": "serenity@iskyvaco.com" - }, - { - "id": 3609, - "guid": "856ab1b0-1d38-4ced-b443-bc3e61f2ff61", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Gerald", - "company": "Ventanium", - "phone": "885-475-3706", - "email": "gabrielle@ventanium.com" - }, - { - "id": 3610, - "guid": "8529d9ae-0e68-445e-b7c6-ef27ebecd1fe", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Miller", - "company": "Hypervaco", - "phone": "814-527-3682", - "email": "charlotte@hypervaco.com" - }, - { - "id": 3611, - "guid": "8230a018-870a-4119-810a-7999341e3cab", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Gardner", - "company": "Westtomik", - "phone": "870-491-2174", - "email": "brooklyn@westtomik.com" - }, - { - "id": 3612, - "guid": "094162fb-8140-4023-8917-a5268761b517", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Goodman", - "company": "Aprama", - "phone": "850-446-3737", - "email": "valeria@aprama.com" - }, - { - "id": 3613, - "guid": "4ddd0596-1254-4427-8e4f-87e1afcc37e2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Hawkins", - "company": "Mescaridic", - "phone": "813-486-3322", - "email": "charlotte@mescaridic.com" - }, - { - "id": 3614, - "guid": "7c4466c6-1235-4091-8a00-dfcbc765f294", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Brown", - "company": "Titanigraf", - "phone": "882-510-2313", - "email": "aaliyah@titanigraf.com" - }, - { - "id": 3615, - "guid": "d51a3025-c6d0-4391-82e6-8d22ebb04429", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Waller", - "company": "eSteganoergy", - "phone": "800-516-2356", - "email": "sarah@esteganoergy.com" - }, - { - "id": 3616, - "guid": "9f8ff47a-98fc-42b8-898a-247a755bea2d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Evelyn Warren", - "company": "Xeicon", - "phone": "850-463-2856", - "email": "evelyn@xeicon.com" - }, - { - "id": 3617, - "guid": "980c1875-c891-4954-a479-6acfa289c0c9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Daniels", - "company": "Robotemplate", - "phone": "823-543-3852", - "email": "evelyn@robotemplate.com" - }, - { - "id": 3618, - "guid": "88abb8b5-76ef-48dd-aaaf-359bd5608c8d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Murphy", - "company": "Anagraph", - "phone": "809-463-3443", - "email": "mya@anagraph.com" - }, - { - "id": 3619, - "guid": "98a06a66-41b1-4288-86c8-245787f3123c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Ford", - "company": "Raylog", - "phone": "892-512-3057", - "email": "sydney@raylog.com" - }, - { - "id": 3620, - "guid": "379bc09e-4652-4b64-a0f0-6bc748035642", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Timmons", - "company": "Ameritron", - "phone": "839-509-2053", - "email": "angelina@ameritron.com" - }, - { - "id": 3621, - "guid": "3f70c865-08b2-49ee-9a1b-e6ccb9a8d8b9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Neal", - "company": "Ameritron", - "phone": "841-547-2042", - "email": "olivia@ameritron.com" - }, - { - "id": 3622, - "guid": "246f6f93-1a2e-4d0b-b8c2-f995d13aa098", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Turner", - "company": "InfoAirway", - "phone": "823-526-2324", - "email": "vanessa@infoairway.com" - }, - { - "id": 3623, - "guid": "4681f29a-fcd4-43ae-9b40-faf2eae283b5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Sherlock", - "company": "Keytheon", - "phone": "854-538-3411", - "email": "kylie@keytheon.com" - }, - { - "id": 3624, - "guid": "7d2cf65b-b8ca-476e-9d31-99d205589cfb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Watson", - "company": "Qualserve", - "phone": "854-478-3025", - "email": "brooke@qualserve.com" - }, - { - "id": 3625, - "guid": "176722aa-175c-4467-82a1-49e1be177536", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Gustman", - "company": "Westgate", - "phone": "825-484-2087", - "email": "leah@westgate.com" - }, - { - "id": 3626, - "guid": "c5e96b5f-02db-4f37-a6ea-e87e8862184d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Goldman", - "company": "Celgra", - "phone": "841-583-3369", - "email": "savannah@celgra.com" - }, - { - "id": 3627, - "guid": "5e476d6f-19fb-4e7c-9a82-bf70fc6db03c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Smith", - "company": "Jamconik", - "phone": "831-483-3297", - "email": "serenity@jamconik.com" - }, - { - "id": 3628, - "guid": "58040221-8e45-401d-a8ab-7774dad4564f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Gilmore", - "company": "Allnet", - "phone": "868-549-3439", - "email": "gabrielle@allnet.com" - }, - { - "id": 3629, - "guid": "2416be0f-b658-466c-a136-473a9aedd709", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Clapton", - "company": "Turbomart", - "phone": "839-470-3332", - "email": "leah@turbomart.com" - }, - { - "id": 3630, - "guid": "dcd5fc2a-0fed-45ba-b9dc-2c19e44dc998", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Riley White", - "company": "Anagraph", - "phone": "847-600-2263", - "email": "riley@anagraph.com" - }, - { - "id": 3631, - "guid": "44acff66-6d78-42f7-9801-d576142e9f12", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Webster", - "company": "Hypervaco", - "phone": "802-589-3982", - "email": "brooklyn@hypervaco.com" - }, - { - "id": 3632, - "guid": "9ca77b90-dd1e-4f7a-96c1-44416a823623", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Hodges", - "company": "Steganoconiche", - "phone": "861-491-2017", - "email": "nevaeh@steganoconiche.com" - }, - { - "id": 3633, - "guid": "b9d4aa00-b873-4975-b6f6-068b88720628", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Miln", - "company": "Proline", - "phone": "830-445-3325", - "email": "eva@proline.com" - }, - { - "id": 3634, - "guid": "f6c7a054-0d2f-4c4d-99ab-2ed72c9bb9df", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Gardner", - "company": "Teratopia", - "phone": "882-508-2043", - "email": "savannah@teratopia.com" - }, - { - "id": 3635, - "guid": "d9074072-2436-4b33-8869-61418377ee93", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Crossman", - "company": "eEyetanic", - "phone": "836-547-2950", - "email": "hailey@eeyetanic.com" - }, - { - "id": 3636, - "guid": "62dc52b2-af48-426c-89e3-75383e2e136a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Carter", - "company": "Aluco", - "phone": "868-415-3529", - "email": "jocelyn@aluco.com" - }, - { - "id": 3637, - "guid": "89533d38-e97d-4988-9c01-b213bc7ae7b5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Hancock", - "company": "Qualserve", - "phone": "857-442-2768", - "email": "andrea@qualserve.com" - }, - { - "id": 3638, - "guid": "05538492-8fab-4936-aa92-c75c2030efd1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Young", - "company": "Vencom", - "phone": "802-494-2129", - "email": "jocelyn@vencom.com" - }, - { - "id": 3639, - "guid": "6f390643-0934-47f7-b517-2352768980e3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ariana Miller", - "company": "Orthomedia", - "phone": "809-570-3666", - "email": "ariana@orthomedia.com" - }, - { - "id": 3640, - "guid": "b5475e72-c631-422c-99b9-176dd0c03118", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Brown", - "company": "Transtouch", - "phone": "818-483-2635", - "email": "alexa@transtouch.com" - }, - { - "id": 3641, - "guid": "765895a4-1a5d-45df-8498-f87e6165da6f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Gilbert", - "company": "Conrama", - "phone": "824-557-2201", - "email": "lillian@conrama.com" - }, - { - "id": 3642, - "guid": "64a1fd1f-cebf-446f-ac1b-6deddf889673", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Turner", - "company": "Thermotomic", - "phone": "895-505-2836", - "email": "alexis@thermotomic.com" - }, - { - "id": 3643, - "guid": "310f7587-b7d7-4071-bbc1-893d7e7a7187", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Wainwright", - "company": "Pacwest", - "phone": "875-545-2589", - "email": "brooklyn@pacwest.com" - }, - { - "id": 3644, - "guid": "21e44727-6277-4c76-b31e-bd2279999825", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Vanessa Fulton", - "company": "Allphysiche", - "phone": "834-560-3873", - "email": "vanessa@allphysiche.com" - }, - { - "id": 3645, - "guid": "4351e90e-fff5-42af-8a27-b286a7881996", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Elizabeth Cramer", - "company": "Titanirola", - "phone": "845-555-3951", - "email": "elizabeth@titanirola.com" - }, - { - "id": 3646, - "guid": "b3154917-0063-4ed9-b7fe-de6b990e8f49", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Owen", - "company": "Netseco", - "phone": "801-550-2598", - "email": "charlotte@netseco.com" - }, - { - "id": 3647, - "guid": "0a266bfc-0114-4c46-9113-4c4f3cf11f5c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Peyton Gilson", - "company": "iQualcar", - "phone": "842-464-2646", - "email": "peyton@iqualcar.com" - }, - { - "id": 3648, - "guid": "49a77f77-3849-4a5b-aecc-eea91ef7bc8a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Sheldon", - "company": "Indisco", - "phone": "870-533-2635", - "email": "ashley@indisco.com" - }, - { - "id": 3649, - "guid": "82a4bc06-29b6-410d-bb5b-5ba7232ac4f8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Carter", - "company": "Videobanc", - "phone": "867-412-3186", - "email": "sofia@videobanc.com" - }, - { - "id": 3650, - "guid": "7fbb377c-dfe3-4967-9911-045757e3bd03", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Vaughan", - "company": "Skydata", - "phone": "845-441-3895", - "email": "brianna@skydata.com" - }, - { - "id": 3651, - "guid": "1adc5caa-11f7-4afc-80d1-1574d082fcbe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Turner", - "company": "Idmax", - "phone": "829-560-3605", - "email": "paige@idmax.com" - }, - { - "id": 3652, - "guid": "f5c40056-52f1-476b-aeaa-4b1c39de8b73", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Brown", - "company": "iQualcar", - "phone": "878-500-3171", - "email": "maya@iqualcar.com" - }, - { - "id": 3653, - "guid": "e6096935-5f78-4a57-808d-5c7de35269bc", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Gate", - "company": "Enlogia", - "phone": "814-502-2769", - "email": "isabelle@enlogia.com" - }, - { - "id": 3654, - "guid": "4e421582-74f1-4348-b2fe-3c0847b397f4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Hardman", - "company": "Generola", - "phone": "819-406-2950", - "email": "isabelle@generola.com" - }, - { - "id": 3655, - "guid": "7b7ec2f3-cf3a-412b-a795-8a6112b27e20", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Walkman", - "company": "RoboAerlogix", - "phone": "817-405-3855", - "email": "alexandra@roboaerlogix.com" - }, - { - "id": 3656, - "guid": "58c20c95-178b-4713-90bc-67a4ae31d4d3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Avery Bush", - "company": "Mescatron", - "phone": "808-442-2411", - "email": "avery@mescatron.com" - }, - { - "id": 3657, - "guid": "25da7d7e-6223-4050-bd75-fa14cd539e41", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Brooks", - "company": "iMedconik", - "phone": "896-455-3175", - "email": "grace@imedconik.com" - }, - { - "id": 3658, - "guid": "c019b4cb-04f9-4de1-ba83-504de49536eb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Youmans", - "company": "Venconix", - "phone": "831-479-2732", - "email": "jasmine@venconix.com" - }, - { - "id": 3659, - "guid": "518af0e6-9c07-42b5-8ec9-6ab72465584a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Gilson", - "company": "InfoAirway", - "phone": "853-404-2329", - "email": "aubrey@infoairway.com" - }, - { - "id": 3660, - "guid": "d0074e8e-af35-4bb9-ad09-69a861a6a1e7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Wayne", - "company": "Sontopia", - "phone": "801-533-2639", - "email": "gianna@sontopia.com" - }, - { - "id": 3661, - "guid": "ffa2fc54-ded5-48db-b83b-ed27974f84b4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Webster", - "company": "Quintegrity", - "phone": "889-401-2234", - "email": "kaitlyn@quintegrity.com" - }, - { - "id": 3662, - "guid": "e2b258e8-37a9-43d8-8a43-9f41a252bb7d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Morrison", - "company": "US Infratouch", - "phone": "814-507-2153", - "email": "vanessa@us infratouch.com" - }, - { - "id": 3663, - "guid": "8a083563-30fc-4696-8a99-901152e9d170", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Hawkins", - "company": "iEnland", - "phone": "866-561-2478", - "email": "gianna@ienland.com" - }, - { - "id": 3664, - "guid": "bea173c8-b7bb-4bae-b6ed-384b2c01837c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Gardner", - "company": "Airdyne", - "phone": "800-423-2846", - "email": "kayla@airdyne.com" - }, - { - "id": 3665, - "guid": "739720ba-227a-460b-8cb0-2ddded0ea383", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Morrison", - "company": "SysUSA", - "phone": "826-478-2288", - "email": "emily@sysusa.com" - }, - { - "id": 3666, - "guid": "35a589f2-db64-4ecf-bc01-52ef886dade4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maya Calhoun", - "company": "Interliant", - "phone": "814-537-3014", - "email": "maya@interliant.com" - }, - { - "id": 3667, - "guid": "4e8cbbcc-1921-4e62-a7cb-6ad7335fb519", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Milton", - "company": "Ventanium", - "phone": "846-420-2439", - "email": "eva@ventanium.com" - }, - { - "id": 3668, - "guid": "11539faa-6351-4447-b4c2-6a37a62efd71", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Gilbert", - "company": "Allphysiche", - "phone": "813-452-3734", - "email": "alyssa@allphysiche.com" - }, - { - "id": 3669, - "guid": "23380a9e-37fe-47e9-ac03-7e5c8f6d8e7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Gate", - "company": "Entcast", - "phone": "818-473-2493", - "email": "kimberly@entcast.com" - }, - { - "id": 3670, - "guid": "eb4c5b1b-7418-4c76-aac0-3332415c3f1e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Winter", - "company": "Steganoconiche", - "phone": "868-402-2029", - "email": "andrea@steganoconiche.com" - }, - { - "id": 3671, - "guid": "0c5a4660-38d1-4385-b1cc-0955002f9f72", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Morgan Oldman", - "company": "Conotomics", - "phone": "844-440-2664", - "email": "morgan@conotomics.com" - }, - { - "id": 3672, - "guid": "93803d1c-dceb-4908-87ed-571e5a48da36", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Gerald", - "company": "Sontopia", - "phone": "811-473-2166", - "email": "emily@sontopia.com" - }, - { - "id": 3673, - "guid": "ad690ebc-3d68-4999-8d5b-3fb8c7850871", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Hodges", - "company": "Titanigraf", - "phone": "876-544-2635", - "email": "lauren@titanigraf.com" - }, - { - "id": 3674, - "guid": "c7dfdf3c-4da8-4e54-96b4-1f5a186f2e0c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Daniels", - "company": "Unologic", - "phone": "888-419-3006", - "email": "morgan@unologic.com" - }, - { - "id": 3675, - "guid": "114b45d8-b13b-494b-810f-9c00fad07d28", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Olivia Youmans", - "company": "Turbomart", - "phone": "893-579-3483", - "email": "olivia@turbomart.com" - }, - { - "id": 3676, - "guid": "da35d439-4cb0-4b60-830c-faa7fa7e91e4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Hawkins", - "company": "Teraserv", - "phone": "830-557-3290", - "email": "sophie@teraserv.com" - }, - { - "id": 3677, - "guid": "f707ac52-ae4d-4979-bb49-7a398a4d8b79", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Gibbs", - "company": "Conrama", - "phone": "864-470-3963", - "email": "mia@conrama.com" - }, - { - "id": 3678, - "guid": "20227c04-1ca8-44ae-bb24-b50b18b4da8c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Morrison", - "company": "US Infratouch", - "phone": "846-549-2775", - "email": "audrey@us infratouch.com" - }, - { - "id": 3679, - "guid": "db9a1933-f347-462b-bc3b-45fd4a35b53a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Nathan", - "company": "OpKeycomm", - "phone": "895-473-2945", - "email": "molly@opkeycomm.com" - }, - { - "id": 3680, - "guid": "775db749-a2b1-473b-97be-fa99aea40e18", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabrielle Watson", - "company": "Techtron", - "phone": "835-584-2464", - "email": "gabrielle@techtron.com" - }, - { - "id": 3681, - "guid": "db55245f-3ba4-447d-805b-ad8bf84eb2ff", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Smith", - "company": "Conotomics", - "phone": "867-542-2498", - "email": "sophia@conotomics.com" - }, - { - "id": 3682, - "guid": "ab954250-ba05-4f8a-a265-5b237aa3190a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Walkman", - "company": "Teratopia", - "phone": "819-549-3768", - "email": "khloe@teratopia.com" - }, - { - "id": 3683, - "guid": "5152895b-bfaa-48f3-93f3-50df7880401a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Hawkins", - "company": "Netseco", - "phone": "819-552-2697", - "email": "madelyn@netseco.com" - }, - { - "id": 3684, - "guid": "7abba28c-6d89-44ec-aa17-45e9e07cc1ca", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Arianna Wayne", - "company": "Conotomics", - "phone": "863-483-2528", - "email": "arianna@conotomics.com" - }, - { - "id": 3685, - "guid": "57254077-8dad-489c-822c-94020ebf3374", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Charlson", - "company": "Titanigraf", - "phone": "813-471-3494", - "email": "molly@titanigraf.com" - }, - { - "id": 3686, - "guid": "c162c708-f917-434f-a655-09ed215a6c93", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madelyn Winter", - "company": "Robotomic", - "phone": "803-509-3067", - "email": "madelyn@robotomic.com" - }, - { - "id": 3687, - "guid": "839f7a89-9491-4224-8d20-26496f27ed50", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Morrison", - "company": "Dynarama", - "phone": "827-477-2050", - "email": "autumn@dynarama.com" - }, - { - "id": 3688, - "guid": "39a56d5f-ceb7-42e1-9c51-0d878cebdadc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Goldman", - "company": "iSkyvaco", - "phone": "844-409-2355", - "email": "zoey@iskyvaco.com" - }, - { - "id": 3689, - "guid": "94d8fcda-9a89-48df-9ad2-a7d00e739741", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Daniels", - "company": "Truetomic", - "phone": "848-585-3284", - "email": "taylor@truetomic.com" - }, - { - "id": 3690, - "guid": "0e6a38ef-4c93-403c-9bf1-616e43d3e3a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Sherlock", - "company": "Unologic", - "phone": "852-453-3640", - "email": "khloe@unologic.com" - }, - { - "id": 3691, - "guid": "202bef1e-842a-450f-8b5a-013289e5703a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aaliyah Clapton", - "company": "Conotomics", - "phone": "812-562-3345", - "email": "aaliyah@conotomics.com" - }, - { - "id": 3692, - "guid": "f3e19f89-d377-402f-bb12-e45170598025", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Miln", - "company": "Venconix", - "phone": "874-567-3653", - "email": "nevaeh@venconix.com" - }, - { - "id": 3693, - "guid": "44732b04-a2f3-4ba6-8734-1f325ef43860", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Abramson", - "company": "RoboAerlogix", - "phone": "865-457-2791", - "email": "gianna@roboaerlogix.com" - }, - { - "id": 3694, - "guid": "5f7ce4b2-de3b-493e-8411-19a35e9fbea0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aubrey Neal", - "company": "Infragraph", - "phone": "863-585-2197", - "email": "aubrey@infragraph.com" - }, - { - "id": 3695, - "guid": "4347a3a9-776d-4c8c-8430-03b47e658441", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Morgan Oldman", - "company": "Fibrotouch", - "phone": "821-409-2304", - "email": "morgan@fibrotouch.com" - }, - { - "id": 3696, - "guid": "75b5984e-88f8-4c27-b6eb-c73c855bd0c9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Gilson", - "company": "Steganoconiche", - "phone": "865-442-2067", - "email": "destiny@steganoconiche.com" - }, - { - "id": 3697, - "guid": "41675c0c-dcc7-482c-9dc4-14cd96bca5d5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lillian Goodman", - "company": "Safeagra", - "phone": "890-489-2233", - "email": "lillian@safeagra.com" - }, - { - "id": 3698, - "guid": "0761f666-7f04-4b43-974a-82f906163dbd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jessica Nash", - "company": "Teratopia", - "phone": "852-515-3690", - "email": "jessica@teratopia.com" - }, - { - "id": 3699, - "guid": "b095e90b-0f6e-4f7d-ae64-21ecfa8ba025", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Young", - "company": "Anaframe", - "phone": "805-584-3561", - "email": "olivia@anaframe.com" - }, - { - "id": 3700, - "guid": "131cb5a0-73fe-4f81-9ffd-4c09547c0d72", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Day", - "company": "Aprama", - "phone": "828-474-2399", - "email": "kylie@aprama.com" - }, - { - "id": 3701, - "guid": "30a34596-ee0d-46c5-bafb-1f429e8ac4e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brianna Miller", - "company": "Truetomic", - "phone": "841-555-2902", - "email": "brianna@truetomic.com" - }, - { - "id": 3702, - "guid": "af2cd5b4-907a-4a1b-886b-17aac7e3ff02", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Webster", - "company": "Anagraph", - "phone": "871-582-3484", - "email": "eva@anagraph.com" - }, - { - "id": 3703, - "guid": "75736e06-47b8-475a-80dd-625d68272b8f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Sherlock", - "company": "eEyetanic", - "phone": "806-503-3637", - "email": "khloe@eeyetanic.com" - }, - { - "id": 3704, - "guid": "c588c624-a191-459d-ad84-c82fecf5f481", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sarah Waller", - "company": "Pericenta", - "phone": "800-489-2295", - "email": "sarah@pericenta.com" - }, - { - "id": 3705, - "guid": "e7826446-13dd-4d91-b1b8-0445a12fef0f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Cook", - "company": "Truetomic", - "phone": "845-484-3628", - "email": "kylie@truetomic.com" - }, - { - "id": 3706, - "guid": "86e927a8-591b-4034-bba1-c48799bed11b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Thornton", - "company": "Pacwest", - "phone": "849-545-2858", - "email": "riley@pacwest.com" - }, - { - "id": 3707, - "guid": "e263951f-63b4-4503-8173-6bf15af07940", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lauren Goodman", - "company": "Cryptotemplate", - "phone": "849-508-2887", - "email": "lauren@cryptotemplate.com" - }, - { - "id": 3708, - "guid": "b6e8dfb3-51fd-4f48-ae4d-60e4810b68b6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Ford", - "company": "US Omnigraphik", - "phone": "858-557-3455", - "email": "sofia@us omnigraphik.com" - }, - { - "id": 3709, - "guid": "40bdb982-845f-4947-aad9-52009d1fb894", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Goodman", - "company": "Videobanc", - "phone": "849-479-2506", - "email": "angelina@videobanc.com" - }, - { - "id": 3710, - "guid": "0b122991-e9d1-4f42-9fc5-fb9fe06e8d08", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabelle Carey", - "company": "Quintegrity", - "phone": "871-448-3186", - "email": "isabelle@quintegrity.com" - }, - { - "id": 3711, - "guid": "8540b8a7-4aa4-48b1-92d4-769cdfd641d9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maya Thornton", - "company": "Anaframe", - "phone": "884-600-3408", - "email": "maya@anaframe.com" - }, - { - "id": 3712, - "guid": "fb69a166-3c22-4700-98f6-2c1b9f1c879d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Vance", - "company": "Tekcar", - "phone": "800-510-2446", - "email": "melanie@tekcar.com" - }, - { - "id": 3713, - "guid": "92a9ad0a-e83c-4d20-a3e5-56015b923ec1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Harrison", - "company": "Compuamerica", - "phone": "862-465-3509", - "email": "samantha@compuamerica.com" - }, - { - "id": 3714, - "guid": "d1edef62-d03a-4889-93b4-b830d364bf99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Campbell", - "company": "iMedconik", - "phone": "852-577-3257", - "email": "payton@imedconik.com" - }, - { - "id": 3715, - "guid": "01e9a785-2fa4-45fb-b506-81f34a176b5f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Day", - "company": "Teknoplexon", - "phone": "841-528-2814", - "email": "sophie@teknoplexon.com" - }, - { - "id": 3716, - "guid": "e367a4ee-9f19-40ed-bdb6-7482ab71816e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Thorndike", - "company": "Westtomik", - "phone": "839-411-2351", - "email": "gabriella@westtomik.com" - }, - { - "id": 3717, - "guid": "e33dc4d2-de0f-492c-9341-767f530ea731", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Winter", - "company": "Nanobanc", - "phone": "846-485-2671", - "email": "morgan@nanobanc.com" - }, - { - "id": 3718, - "guid": "e84f7a37-7a2d-41ad-8e5a-14c755b8c8d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Walkman", - "company": "Allphysiche", - "phone": "829-466-2762", - "email": "natalie@allphysiche.com" - }, - { - "id": 3719, - "guid": "3a8fb630-bdb5-4653-8b9d-ec8c3b514929", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Croftoon", - "company": "Truetomic", - "phone": "879-599-3893", - "email": "lillian@truetomic.com" - }, - { - "id": 3720, - "guid": "d96609dd-e130-4171-a46d-dad2cf846bed", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Freeman", - "company": "Cryptotegrity", - "phone": "887-557-2306", - "email": "brianna@cryptotegrity.com" - }, - { - "id": 3721, - "guid": "00fafc43-ce16-4be7-bba1-6b28bdd02634", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria Daniels", - "company": "Westtomik", - "phone": "871-597-3879", - "email": "maria@westtomik.com" - }, - { - "id": 3722, - "guid": "64b1bd45-b6c8-4ce1-a912-eb525116792f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Waller", - "company": "Conotomics", - "phone": "818-420-3659", - "email": "paige@conotomics.com" - }, - { - "id": 3723, - "guid": "cd29303f-b985-48c9-bc90-9fe60f6ab565", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Hardman", - "company": "iSkyvaco", - "phone": "829-533-2803", - "email": "maria@iskyvaco.com" - }, - { - "id": 3724, - "guid": "8b1804ce-f820-4b8f-a4b4-2447b9c26950", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Hoggarth", - "company": "Allnet", - "phone": "800-578-2777", - "email": "ariana@allnet.com" - }, - { - "id": 3725, - "guid": "37b23610-16c1-4146-8ad7-0927bff6ec31", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Conors", - "company": "Teraserv", - "phone": "865-570-3808", - "email": "kaitlyn@teraserv.com" - }, - { - "id": 3726, - "guid": "f15ae1b2-570b-40d3-9023-1e20a1725f56", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Hawkins", - "company": "Orthosoft", - "phone": "899-472-2612", - "email": "claire@orthosoft.com" - }, - { - "id": 3727, - "guid": "4098f4db-6d00-4647-872d-0880cdb5838c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Youmans", - "company": "Teknoplexon", - "phone": "898-585-2506", - "email": "lily@teknoplexon.com" - }, - { - "id": 3728, - "guid": "ed18a552-6949-4d7d-9dca-85ba4c8a0af2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Sheldon", - "company": "Venconix", - "phone": "855-508-3396", - "email": "valeria@venconix.com" - }, - { - "id": 3729, - "guid": "17c60af2-813e-44bb-94ca-923120713a33", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Oldridge", - "company": "Xeicon", - "phone": "895-446-3202", - "email": "avery@xeicon.com" - }, - { - "id": 3730, - "guid": "313a9123-79f0-400a-b72f-8e6d3eebb5e7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Audrey Carey", - "company": "Polytheon", - "phone": "893-599-3518", - "email": "audrey@polytheon.com" - }, - { - "id": 3731, - "guid": "86310ece-4e4a-452e-b67c-c05ed5e58e0b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Watson", - "company": "Safeagra", - "phone": "861-591-2750", - "email": "ella@safeagra.com" - }, - { - "id": 3732, - "guid": "db7c1402-64db-4352-8419-7b3ebc5a2501", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Watson", - "company": "Allnet", - "phone": "825-445-3327", - "email": "ava@allnet.com" - }, - { - "id": 3733, - "guid": "61a53b67-9015-4eb7-afb6-1d543924d651", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Freeman", - "company": "Fibroserve", - "phone": "839-542-3319", - "email": "julia@fibroserve.com" - }, - { - "id": 3734, - "guid": "bf2ccf24-78ef-47d6-a98f-07d2ea454c7c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Walkman", - "company": "Nanobanc", - "phone": "847-471-3684", - "email": "alexa@nanobanc.com" - }, - { - "id": 3735, - "guid": "3dbd667a-5ae6-4c03-8537-4a1d8215bb55", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Oldridge", - "company": "Fibroserve", - "phone": "851-581-2451", - "email": "katherine@fibroserve.com" - }, - { - "id": 3736, - "guid": "d9f42674-f26e-4ab3-8f2b-ad3e958991c7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katherine Carter", - "company": "Westmedia", - "phone": "835-534-3968", - "email": "katherine@westmedia.com" - }, - { - "id": 3737, - "guid": "a0a9c075-65cc-49be-8e17-a5344a0cf06e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Timmons", - "company": "Polytheon", - "phone": "875-476-3579", - "email": "kaylee@polytheon.com" - }, - { - "id": 3738, - "guid": "b98dcf81-1868-47d7-9509-5df573cb94c0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Nash", - "company": "eEyetanic", - "phone": "838-574-3939", - "email": "arianna@eeyetanic.com" - }, - { - "id": 3739, - "guid": "d1b1ede5-0ad8-4cb7-bda9-bf31ec9a5f27", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Webster", - "company": "Polytheon", - "phone": "877-429-2728", - "email": "anna@polytheon.com" - }, - { - "id": 3740, - "guid": "c5a1db30-ffab-49f7-8c3f-8cb6acb638d8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Miln", - "company": "US Infratouch", - "phone": "860-532-2016", - "email": "payton@us infratouch.com" - }, - { - "id": 3741, - "guid": "2673e21a-1f0b-4567-b603-aa65ffc01550", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Croftoon", - "company": "Xeicon", - "phone": "830-417-3846", - "email": "sofia@xeicon.com" - }, - { - "id": 3742, - "guid": "ce1b50d8-4593-4359-b68b-31ea074dcb60", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Charlson", - "company": "Indisco", - "phone": "890-482-2811", - "email": "emma@indisco.com" - }, - { - "id": 3743, - "guid": "e14c62b0-8564-4f2c-85c7-9b2c7567f16f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Waller", - "company": "Rapigrafix", - "phone": "846-557-3767", - "email": "payton@rapigrafix.com" - }, - { - "id": 3744, - "guid": "0e811e01-5cff-4679-940a-b771e1a75f84", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Oswald", - "company": "RoboAerlogix", - "phone": "861-477-3246", - "email": "maria@roboaerlogix.com" - }, - { - "id": 3745, - "guid": "a1b4f355-8ef1-40d4-ab50-64df67ea6197", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Nelson", - "company": "Indisco", - "phone": "855-587-2114", - "email": "valeria@indisco.com" - }, - { - "id": 3746, - "guid": "7a3f4080-4fe6-4770-84ea-fc3361b3fdf6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Cook", - "company": "Systheon", - "phone": "864-560-2888", - "email": "alexa@systheon.com" - }, - { - "id": 3747, - "guid": "b7704432-79e2-45ac-a441-0c50234ef83c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah White", - "company": "Syssoft", - "phone": "884-477-3137", - "email": "savannah@syssoft.com" - }, - { - "id": 3748, - "guid": "0ae51bb8-8f76-42ff-a38f-f2ed771eeab8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Morrison", - "company": "Navivacs", - "phone": "818-521-2004", - "email": "serenity@navivacs.com" - }, - { - "id": 3749, - "guid": "54471769-1a59-493a-bd5b-4aabb4204bc2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Oldridge", - "company": "Turbomart", - "phone": "846-442-3120", - "email": "addison@turbomart.com" - }, - { - "id": 3750, - "guid": "e1242bf9-cdbc-48db-aa5a-588ddff2b43f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Hailey", - "company": "Nanobanc", - "phone": "875-487-3168", - "email": "arianna@nanobanc.com" - }, - { - "id": 3751, - "guid": "e3e7b323-65b4-4861-a005-71efbe7527c2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Watson", - "company": "Safetrust", - "phone": "806-579-3469", - "email": "alexa@safetrust.com" - }, - { - "id": 3752, - "guid": "3f396665-d4cd-4853-b9ea-73fd12bdf698", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Milton", - "company": "Infragraph", - "phone": "824-532-2509", - "email": "isabella@infragraph.com" - }, - { - "id": 3753, - "guid": "7e472105-541d-4920-81e9-ddb34a8fdcfe", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Conors", - "company": "iOptystix", - "phone": "860-470-3314", - "email": "natalie@ioptystix.com" - }, - { - "id": 3754, - "guid": "b0ce97ef-0031-40e0-a514-3206cbc48bd1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Ogden", - "company": "Safeagra", - "phone": "855-474-3174", - "email": "maya@safeagra.com" - }, - { - "id": 3755, - "guid": "dd0cad2e-74c7-4610-895f-0233f21481d4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Peyton Wayne", - "company": "SysVenamerica", - "phone": "888-563-2026", - "email": "peyton@sysvenamerica.com" - }, - { - "id": 3756, - "guid": "02a6df77-21e1-4709-81c3-d658c5ff5bfe", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Campbell", - "company": "Westmedia", - "phone": "823-464-2381", - "email": "khloe@westmedia.com" - }, - { - "id": 3757, - "guid": "3710c67c-0c8a-408e-b1b8-6fa518931bdf", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Wayne", - "company": "Teraserv", - "phone": "897-480-3196", - "email": "jasmine@teraserv.com" - }, - { - "id": 3758, - "guid": "53a74624-1bd8-40d3-b8c6-14e38b060827", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Oliver", - "company": "Pericenta", - "phone": "822-524-2790", - "email": "gabriella@pericenta.com" - }, - { - "id": 3759, - "guid": "825351d1-ed45-4413-a551-f354f7396fbe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Young", - "company": "iQualcar", - "phone": "838-575-2339", - "email": "victoria@iqualcar.com" - }, - { - "id": 3760, - "guid": "2968f3f4-4ac1-46be-89fd-9fcca20fb6a2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa Gilbert", - "company": "Keytheon", - "phone": "809-566-3686", - "email": "vanessa@keytheon.com" - }, - { - "id": 3761, - "guid": "5472b14c-745b-4ef2-8c9a-666dbfe73a32", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sarah Miers", - "company": "SysUSA", - "phone": "826-533-2885", - "email": "sarah@sysusa.com" - }, - { - "id": 3762, - "guid": "e5fe861c-bd61-4654-b2cf-7da8ff37f354", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Hamphrey", - "company": "Qualserve", - "phone": "834-507-2488", - "email": "avery@qualserve.com" - }, - { - "id": 3763, - "guid": "d0f290a6-626e-4f33-8479-2c278a45a759", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Gilbert", - "company": "Textiqua", - "phone": "817-534-2002", - "email": "bailey@textiqua.com" - }, - { - "id": 3764, - "guid": "472f5231-32e7-44a1-9939-9787d0373313", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Adamson", - "company": "iMedconik", - "phone": "811-498-2836", - "email": "katelyn@imedconik.com" - }, - { - "id": 3765, - "guid": "43b6338f-5cd8-480a-951c-5951b7dcb19d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jessica Brown", - "company": "Safetrust", - "phone": "822-463-2543", - "email": "jessica@safetrust.com" - }, - { - "id": 3766, - "guid": "a112de66-7b83-48a5-91cb-7be106eeedf7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Wesley", - "company": "Fibrotouch", - "phone": "853-595-3330", - "email": "gabriella@fibrotouch.com" - }, - { - "id": 3767, - "guid": "fb8eece1-fd66-432e-b2be-ff014792e7b5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Warren", - "company": "Cryptotegrity", - "phone": "863-583-3481", - "email": "victoria@cryptotegrity.com" - }, - { - "id": 3768, - "guid": "8b882bf0-f0bd-4368-8116-8f5c4ef375f3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Miln", - "company": "Anaframe", - "phone": "844-422-3664", - "email": "peyton@anaframe.com" - }, - { - "id": 3769, - "guid": "072f5aee-948a-4e3c-b49f-65ab46738665", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Crossman", - "company": "Anaframe", - "phone": "860-502-3223", - "email": "jasmine@anaframe.com" - }, - { - "id": 3770, - "guid": "95090d7f-b55a-4b53-b44b-e1305b55cdd0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie White", - "company": "Indisco", - "phone": "848-511-2418", - "email": "sophie@indisco.com" - }, - { - "id": 3771, - "guid": "0ca12279-0b69-4c0d-a8f2-d3cd2bb6f346", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Wallace", - "company": "Steganoconiche", - "phone": "819-550-3238", - "email": "hannah@steganoconiche.com" - }, - { - "id": 3772, - "guid": "36a4b67d-05a4-48dc-9585-7c796e81a450", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sydney Croftoon", - "company": "Orthomedia", - "phone": "811-447-2969", - "email": "sydney@orthomedia.com" - }, - { - "id": 3773, - "guid": "c01c9cb5-e027-412c-ba66-f8e07d4d80b6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Miller", - "company": "Fibroserve", - "phone": "886-495-2076", - "email": "victoria@fibroserve.com" - }, - { - "id": 3774, - "guid": "d4ca49eb-b6cf-408b-8371-e44d2c7e4bde", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Davidson", - "company": "Celgra", - "phone": "820-594-3921", - "email": "rachel@celgra.com" - }, - { - "id": 3775, - "guid": "ff7358b2-67ae-4723-b0b1-1c0d2d64075d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Miller", - "company": "Navivacs", - "phone": "827-458-3145", - "email": "ella@navivacs.com" - }, - { - "id": 3776, - "guid": "7f73c981-20f5-4267-8168-e8471774b1cb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Gate", - "company": "Fibrotopia", - "phone": "805-422-3695", - "email": "abigail@fibrotopia.com" - }, - { - "id": 3777, - "guid": "86ee4ea7-ae2f-45ee-82b4-1e335113c22a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Bush", - "company": "Qualserve", - "phone": "861-503-3095", - "email": "vanessa@qualserve.com" - }, - { - "id": 3778, - "guid": "64636d0d-dc89-4cb8-85a2-f0f0e94d380f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Hailey", - "company": "Ameritron", - "phone": "881-427-2275", - "email": "zoey@ameritron.com" - }, - { - "id": 3779, - "guid": "3feef1c7-5a00-44a3-9ca9-378e2525b18a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Chandter", - "company": "Cryptotegrity", - "phone": "893-450-3850", - "email": "kimberly@cryptotegrity.com" - }, - { - "id": 3780, - "guid": "a437c2ef-a134-47c6-bc3f-4a903f39d97b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madelyn Morrison", - "company": "Inridium", - "phone": "855-469-3968", - "email": "madelyn@inridium.com" - }, - { - "id": 3781, - "guid": "1cf21c6c-38cd-4c7f-8d47-98702e965f18", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Ogden", - "company": "Anaframe", - "phone": "895-600-2022", - "email": "caroline@anaframe.com" - }, - { - "id": 3782, - "guid": "8157329d-fa9d-4914-a1a1-3b36b1020119", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Ford", - "company": "Rapigrafix", - "phone": "860-407-2530", - "email": "jessica@rapigrafix.com" - }, - { - "id": 3783, - "guid": "753bad0a-be50-4691-80ea-cd3c5f42c0f6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Higgins", - "company": "Fibroserve", - "phone": "858-533-3498", - "email": "makayla@fibroserve.com" - }, - { - "id": 3784, - "guid": "40e0f054-55c9-4ac8-b30c-e7f77cc2856f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Warren", - "company": "Rapigrafix", - "phone": "879-572-3562", - "email": "lauren@rapigrafix.com" - }, - { - "id": 3785, - "guid": "a7aa1ac7-47a6-45ee-a0ab-d2298e92ae82", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Vanessa Nathan", - "company": "Orthomedia", - "phone": "831-438-2582", - "email": "vanessa@orthomedia.com" - }, - { - "id": 3786, - "guid": "daded1e2-aa6c-4b3c-b945-cc0188ddea18", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Young", - "company": "Celgra", - "phone": "800-530-3992", - "email": "addison@celgra.com" - }, - { - "id": 3787, - "guid": "1faeb56e-917e-4418-a31a-006d48160e2e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Oldman", - "company": "Fibroserve", - "phone": "805-581-2142", - "email": "khloe@fibroserve.com" - }, - { - "id": 3788, - "guid": "61957d84-212f-416c-ad90-568f1209eac6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Osborne", - "company": "Anagraph", - "phone": "888-498-2787", - "email": "aubrey@anagraph.com" - }, - { - "id": 3789, - "guid": "72de506e-9255-4348-bf94-00a290144b0d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Gilson", - "company": "Westmedia", - "phone": "810-424-3840", - "email": "nevaeh@westmedia.com" - }, - { - "id": 3790, - "guid": "a442556f-db24-4a5b-b239-7ef4d4d2cbed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Ward", - "company": "Keytheon", - "phone": "866-564-2855", - "email": "melanie@keytheon.com" - }, - { - "id": 3791, - "guid": "83a39c3f-c794-40e6-b173-67528c212abf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Higgins", - "company": "InfoAirway", - "phone": "813-558-3938", - "email": "lauren@infoairway.com" - }, - { - "id": 3792, - "guid": "99a09cd3-1829-4e47-bdf9-68d63e0fca9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Cook", - "company": "Airdyne", - "phone": "867-551-2058", - "email": "kaylee@airdyne.com" - }, - { - "id": 3793, - "guid": "7bacd582-cd35-443f-8a9e-997be334f79f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Miller", - "company": "Turbomart", - "phone": "866-449-3529", - "email": "victoria@turbomart.com" - }, - { - "id": 3794, - "guid": "0d1fe2c8-5096-4a4c-a380-cf6caba1a704", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Carroll", - "company": "Steganoconiche", - "phone": "803-516-3758", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 3795, - "guid": "bea3f281-5fc9-4438-a291-1074fc3326ec", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Miln", - "company": "Superscope", - "phone": "831-407-3718", - "email": "hailey@superscope.com" - }, - { - "id": 3796, - "guid": "4ddd0f93-4f7e-4b7b-8b37-40ae0d03012d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Haig", - "company": "SysVenamerica", - "phone": "803-543-2723", - "email": "payton@sysvenamerica.com" - }, - { - "id": 3797, - "guid": "0a4e8012-50ee-43ee-82ef-b3fcb6a35b92", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Charlson", - "company": "Compuamerica", - "phone": "890-514-3116", - "email": "chloe@compuamerica.com" - }, - { - "id": 3798, - "guid": "466d2eb5-444e-40f6-b1bf-9485160626c1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabriella Turner", - "company": "Steganoconiche", - "phone": "896-599-2332", - "email": "gabriella@steganoconiche.com" - }, - { - "id": 3799, - "guid": "2141b84d-cbbd-47a2-8472-68e879748cce", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Gardner", - "company": "Anagraph", - "phone": "841-467-2184", - "email": "isabelle@anagraph.com" - }, - { - "id": 3800, - "guid": "3bb41086-d71c-4658-918b-7502183eeebb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Ward", - "company": "iQualcar", - "phone": "836-406-3054", - "email": "julia@iqualcar.com" - }, - { - "id": 3801, - "guid": "94f8b483-3dc8-4b19-8358-8e8022056aee", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Milton", - "company": "Compuamerica", - "phone": "871-470-3736", - "email": "gabriella@compuamerica.com" - }, - { - "id": 3802, - "guid": "5d543333-d36c-4b2d-88cc-1b9291777ee1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gilmore", - "company": "Indisco", - "phone": "828-544-2235", - "email": "lauren@indisco.com" - }, - { - "id": 3803, - "guid": "70dda83f-3498-4280-a759-0aa2c772645a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Oswald", - "company": "Raylog", - "phone": "834-429-2737", - "email": "faith@raylog.com" - }, - { - "id": 3804, - "guid": "99de92d7-edf3-46cc-a4cf-0211c12b9821", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Carrington", - "company": "Netseco", - "phone": "842-596-2042", - "email": "audrey@netseco.com" - }, - { - "id": 3805, - "guid": "608c19ee-22b5-4d08-b89f-d00928e634c9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Sherlock", - "company": "Systheon", - "phone": "835-500-2909", - "email": "payton@systheon.com" - }, - { - "id": 3806, - "guid": "91e20ce2-9c44-4470-a3f5-bd6eaaa0bf90", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Caroline Bush", - "company": "Indisco", - "phone": "869-545-2215", - "email": "caroline@indisco.com" - }, - { - "id": 3807, - "guid": "c807f99d-b787-44f3-bc3c-659dacdcd86a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Bush", - "company": "iEnland", - "phone": "850-426-2812", - "email": "madeline@ienland.com" - }, - { - "id": 3808, - "guid": "2ca51713-e48b-479d-ac4c-a4fcfb4076f5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Wainwright", - "company": "Polytheon", - "phone": "802-550-3156", - "email": "khloe@polytheon.com" - }, - { - "id": 3809, - "guid": "3c85e6c3-61d1-422a-9270-d6b85bae2da1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Brown", - "company": "Conotomics", - "phone": "812-568-3476", - "email": "isabella@conotomics.com" - }, - { - "id": 3810, - "guid": "e9539489-c41d-40db-a749-50245960f836", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Hamphrey", - "company": "iSkyvaco", - "phone": "879-527-2179", - "email": "caroline@iskyvaco.com" - }, - { - "id": 3811, - "guid": "32687375-c7d3-4318-9dfe-2f9353d24faf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Bush", - "company": "Cryptotemplate", - "phone": "864-478-3231", - "email": "avery@cryptotemplate.com" - }, - { - "id": 3812, - "guid": "61fc8f27-9655-4549-99b3-b9c1f2f16adf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Warren", - "company": "Ventanium", - "phone": "851-468-2160", - "email": "brooklyn@ventanium.com" - }, - { - "id": 3813, - "guid": "4c4e39f5-6a29-4281-8f36-020e3f547e38", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Claire Hoggarth", - "company": "Tekcar", - "phone": "809-566-2808", - "email": "claire@tekcar.com" - }, - { - "id": 3814, - "guid": "a6649d37-a2d0-41ee-a37f-390d9b26eae6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Daniels", - "company": "Raylog", - "phone": "894-550-3823", - "email": "serenity@raylog.com" - }, - { - "id": 3815, - "guid": "763924f6-3f33-47ce-a0b9-8f5c69dc9a70", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Fisher", - "company": "Fibrotouch", - "phone": "884-456-3035", - "email": "amelia@fibrotouch.com" - }, - { - "id": 3816, - "guid": "faefe496-b55a-4d6c-a0c0-5e077e9cccb3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexis Gerald", - "company": "Pericenta", - "phone": "849-407-2156", - "email": "alexis@pericenta.com" - }, - { - "id": 3817, - "guid": "2e4290d8-e4a5-4f2b-9bcb-62ad71ec039a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Michaelson", - "company": "Superscope", - "phone": "878-560-2455", - "email": "nevaeh@superscope.com" - }, - { - "id": 3818, - "guid": "c12c4938-ad7e-4e1c-8a55-baa4fc8e5aa7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madison Brown", - "company": "Titanirola", - "phone": "852-535-3930", - "email": "madison@titanirola.com" - }, - { - "id": 3819, - "guid": "e9d7bd3d-da7a-43d0-960b-6d62036d9652", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Watson", - "company": "Syssoft", - "phone": "881-440-2019", - "email": "abigail@syssoft.com" - }, - { - "id": 3820, - "guid": "e0ef0d50-0a0c-4a8d-9ea9-7f7ab0bc021f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Owen", - "company": "Teratopia", - "phone": "828-477-3262", - "email": "sophie@teratopia.com" - }, - { - "id": 3821, - "guid": "b6af1822-2580-42d9-8280-5da621ff9019", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Fisher", - "company": "iEnland", - "phone": "866-595-2568", - "email": "abigail@ienland.com" - }, - { - "id": 3822, - "guid": "284958a2-8dee-4c07-996f-c48df691123d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooke Gilmore", - "company": "Textiqua", - "phone": "875-433-3703", - "email": "brooke@textiqua.com" - }, - { - "id": 3823, - "guid": "65ad95fa-89de-468d-8181-9007c3be0fa0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Bush", - "company": "Anagraph", - "phone": "885-409-2622", - "email": "melanie@anagraph.com" - }, - { - "id": 3824, - "guid": "84e6ea9a-61ef-4efa-8963-0fb7f4dc0ba7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Miln", - "company": "Cryptotemplate", - "phone": "890-471-3624", - "email": "katelyn@cryptotemplate.com" - }, - { - "id": 3825, - "guid": "0a188c1c-1bbf-414a-838d-49a9a2d6aa26", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Thornton", - "company": "Fibrotouch", - "phone": "821-539-3434", - "email": "brianna@fibrotouch.com" - }, - { - "id": 3826, - "guid": "41bd5469-184a-4b0f-9905-2edc7424ca3e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Gilmore", - "company": "SysVenamerica", - "phone": "803-435-2952", - "email": "kaylee@sysvenamerica.com" - }, - { - "id": 3827, - "guid": "c43a5ec6-c15b-4264-8747-1b8a741b0e2b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Carroll", - "company": "iQualcar", - "phone": "812-529-2554", - "email": "kaitlyn@iqualcar.com" - }, - { - "id": 3828, - "guid": "be771dcc-ae0f-4353-871d-59ea8d6ca0d5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Oliver", - "company": "Syssoft", - "phone": "840-499-3868", - "email": "vanessa@syssoft.com" - }, - { - "id": 3829, - "guid": "65010640-afd2-4a26-866e-8b23fee6c252", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Wallace", - "company": "Entcast", - "phone": "808-556-3964", - "email": "paige@entcast.com" - }, - { - "id": 3830, - "guid": "d4297e35-4700-4bac-ae6a-95d4fd3d21ad", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Ward", - "company": "Videobanc", - "phone": "857-538-2884", - "email": "khloe@videobanc.com" - }, - { - "id": 3831, - "guid": "b44fe34f-b88a-48c6-9cc7-85469a14d691", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton White", - "company": "Dynarama", - "phone": "838-524-3293", - "email": "payton@dynarama.com" - }, - { - "id": 3832, - "guid": "04934c4c-f96b-4a3d-b674-3c51913683a6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alyssa Nash", - "company": "Syssoft", - "phone": "836-581-3878", - "email": "alyssa@syssoft.com" - }, - { - "id": 3833, - "guid": "f9a18de5-149c-4656-8d1a-17c231694d84", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Miln", - "company": "Nanobanc", - "phone": "804-402-2693", - "email": "bella@nanobanc.com" - }, - { - "id": 3834, - "guid": "72bbbf97-1bcb-4bdf-b490-c362d4ef1570", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Brooks", - "company": "Robocomm", - "phone": "878-583-2430", - "email": "riley@robocomm.com" - }, - { - "id": 3835, - "guid": "fa073ad1-3e66-429e-a0ba-29b914ae2bc1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Timmons", - "company": "Xeicon", - "phone": "859-573-3491", - "email": "alexa@xeicon.com" - }, - { - "id": 3836, - "guid": "0a579856-ef32-4037-aeb5-21648ed2d82c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Ogden", - "company": "Openserve", - "phone": "828-503-3736", - "email": "evelyn@openserve.com" - }, - { - "id": 3837, - "guid": "3d6ec89c-c2bb-4ec1-b962-91579809f006", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Hoggarth", - "company": "Xeicon", - "phone": "888-568-3361", - "email": "abigail@xeicon.com" - }, - { - "id": 3838, - "guid": "67867f1f-5641-4230-b683-16b60f2d7d8a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Hawkins", - "company": "Teknoplexon", - "phone": "863-573-3379", - "email": "serenity@teknoplexon.com" - }, - { - "id": 3839, - "guid": "13af754c-4e21-4715-ac75-811204854f66", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexa Young", - "company": "Westmedia", - "phone": "837-432-2154", - "email": "alexa@westmedia.com" - }, - { - "id": 3840, - "guid": "1499a67a-9bbd-4488-a196-8d4163362e3e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Carey", - "company": "Inridium", - "phone": "845-418-2030", - "email": "destiny@inridium.com" - }, - { - "id": 3841, - "guid": "0b22d761-a611-48f3-9d51-ef0b031fb5b9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Young", - "company": "Nanobanc", - "phone": "891-451-2007", - "email": "bailey@nanobanc.com" - }, - { - "id": 3842, - "guid": "4550fabe-0225-4694-8939-1bc8560954f5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Chandter", - "company": "Allphysiche", - "phone": "836-580-2364", - "email": "ella@allphysiche.com" - }, - { - "id": 3843, - "guid": "9b8c1b5b-821d-4fdc-8a48-ec5e69693e16", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Carroll", - "company": "RoboAerlogix", - "phone": "815-476-2875", - "email": "khloe@roboaerlogix.com" - }, - { - "id": 3844, - "guid": "d4270c01-bbb1-4bfc-9319-9f3bfeb4e07a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Watson", - "company": "Titanirola", - "phone": "892-467-3825", - "email": "chloe@titanirola.com" - }, - { - "id": 3845, - "guid": "ea49feca-e304-4192-9a58-dc2a4857bcc3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Daniels", - "company": "Hypervaco", - "phone": "857-576-3995", - "email": "sofia@hypervaco.com" - }, - { - "id": 3846, - "guid": "c23e74b7-a0bc-424f-87ca-119261552ba6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Neal", - "company": "eEyetanic", - "phone": "879-437-3835", - "email": "madeline@eeyetanic.com" - }, - { - "id": 3847, - "guid": "ac4f6b75-a505-4beb-884e-ac75402d7f8c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Carey", - "company": "eSteganoergy", - "phone": "854-427-3225", - "email": "katherine@esteganoergy.com" - }, - { - "id": 3848, - "guid": "8ab08872-ab24-4005-bbcc-01b484624b71", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Chesterton", - "company": "Safetrust", - "phone": "853-451-3892", - "email": "kayla@safetrust.com" - }, - { - "id": 3849, - "guid": "3a58bf62-c0a5-484a-bac8-abcee92df04e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Samantha Nathan", - "company": "Qualserve", - "phone": "838-497-2003", - "email": "samantha@qualserve.com" - }, - { - "id": 3850, - "guid": "e25bf78f-4fcb-4508-991b-d4ae7df1ad73", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Smith", - "company": "Westtomik", - "phone": "807-579-2066", - "email": "autumn@westtomik.com" - }, - { - "id": 3851, - "guid": "68c6624a-ff8c-4bf3-aadc-b39f0fe6b99f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Owen", - "company": "Dynarama", - "phone": "839-432-2583", - "email": "katelyn@dynarama.com" - }, - { - "id": 3852, - "guid": "5a0b2811-840b-4658-b8cb-178716fb7e07", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Gate", - "company": "Superscope", - "phone": "866-482-2722", - "email": "maria@superscope.com" - }, - { - "id": 3853, - "guid": "ec92c35d-602c-41de-8a73-f91a65006a49", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Fulton", - "company": "Truegate", - "phone": "844-561-3583", - "email": "andrea@truegate.com" - }, - { - "id": 3854, - "guid": "64eff63e-0376-43a7-be10-463e58488335", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Abramson", - "company": "Steganoconiche", - "phone": "855-490-2476", - "email": "ariana@steganoconiche.com" - }, - { - "id": 3855, - "guid": "553a4c65-3a8d-42b8-a1af-6ae3fbee5635", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Morrison", - "company": "InfoAirway", - "phone": "824-427-2346", - "email": "amelia@infoairway.com" - }, - { - "id": 3856, - "guid": "2fce32d8-3f50-4642-96f9-640cc1e37e0c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Carter", - "company": "Conrama", - "phone": "896-534-3662", - "email": "natalie@conrama.com" - }, - { - "id": 3857, - "guid": "f5bb83f7-cf72-4195-a25f-2004b775ab89", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katelyn Brickman", - "company": "Allnet", - "phone": "843-506-3583", - "email": "katelyn@allnet.com" - }, - { - "id": 3858, - "guid": "3118c93b-ad1e-4d25-b674-284a39b63b24", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Young", - "company": "Compuamerica", - "phone": "809-420-3597", - "email": "bella@compuamerica.com" - }, - { - "id": 3859, - "guid": "56e7201e-0a0d-4195-b316-39dee3c06829", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Carter", - "company": "RoboAerlogix", - "phone": "876-426-3819", - "email": "jasmine@roboaerlogix.com" - }, - { - "id": 3860, - "guid": "c4e54d51-7150-4247-bfb3-d11c9d18470d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Miln", - "company": "Cryptotemplate", - "phone": "838-401-3633", - "email": "mia@cryptotemplate.com" - }, - { - "id": 3861, - "guid": "b0800b48-fbe4-4c5c-95d6-41c9e73e7b27", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Freeman", - "company": "Multitiqua", - "phone": "830-542-2410", - "email": "madelyn@multitiqua.com" - }, - { - "id": 3862, - "guid": "66d5fd4b-7aeb-4f05-be42-1feee3dab33b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Campbell", - "company": "Robotomic", - "phone": "825-427-2335", - "email": "amelia@robotomic.com" - }, - { - "id": 3863, - "guid": "af9e7025-30d6-41f5-98ab-89f117110e87", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Hoggarth", - "company": "Pacwest", - "phone": "818-497-2988", - "email": "amelia@pacwest.com" - }, - { - "id": 3864, - "guid": "ad731f67-cd51-485f-bdfa-6c10a9f3313d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Morrison", - "company": "Ameritron", - "phone": "829-573-3414", - "email": "jasmine@ameritron.com" - }, - { - "id": 3865, - "guid": "fee04ef7-a92a-408d-800b-7ceec71dd9de", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Smith", - "company": "Multitiqua", - "phone": "889-431-3759", - "email": "savannah@multitiqua.com" - }, - { - "id": 3866, - "guid": "1d5b05f0-801f-4a27-a34f-42d4d3ec45d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Ward", - "company": "Mescatron", - "phone": "858-473-2054", - "email": "samantha@mescatron.com" - }, - { - "id": 3867, - "guid": "0c6bec5a-4aca-455b-9f0f-a82977af4144", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Daniels", - "company": "Cryptotemplate", - "phone": "849-482-2943", - "email": "alexis@cryptotemplate.com" - }, - { - "id": 3868, - "guid": "b0263c33-c90d-488c-8f23-cfb71733e5ba", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Nathan", - "company": "Westmedia", - "phone": "814-467-2198", - "email": "sydney@westmedia.com" - }, - { - "id": 3869, - "guid": "bf37e22c-a133-42f3-b8bd-811f0aae758f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Webster", - "company": "RoboAerlogix", - "phone": "817-418-2600", - "email": "layla@roboaerlogix.com" - }, - { - "id": 3870, - "guid": "e9d0b6d7-57c3-4efe-87f4-014057cd0883", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Oldman", - "company": "Turbomart", - "phone": "815-596-3164", - "email": "rachel@turbomart.com" - }, - { - "id": 3871, - "guid": "192d4658-71d7-4e1a-8a75-62f3690fac22", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine Watson", - "company": "Interliant", - "phone": "888-520-2102", - "email": "jasmine@interliant.com" - }, - { - "id": 3872, - "guid": "73c0fa42-6519-45d4-b5b0-56a6f70e8c2c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katherine Hodges", - "company": "iOptystix", - "phone": "870-479-2365", - "email": "katherine@ioptystix.com" - }, - { - "id": 3873, - "guid": "3510616e-64b9-495d-8be6-f5b8e1a2d3b3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Charlotte Murphy", - "company": "Videobanc", - "phone": "848-536-3805", - "email": "charlotte@videobanc.com" - }, - { - "id": 3874, - "guid": "fb6e8891-84f2-4d97-a5c6-e81c35a3c6f6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Neal", - "company": "RoboAerlogix", - "phone": "849-412-2605", - "email": "jessica@roboaerlogix.com" - }, - { - "id": 3875, - "guid": "14a8d186-f0b9-40d3-b735-6a3498ceafcd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Brooks", - "company": "Compuamerica", - "phone": "849-466-2583", - "email": "alexis@compuamerica.com" - }, - { - "id": 3876, - "guid": "ba511762-4736-4c06-a2ac-6024b0d7a0e1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Turner", - "company": "Generola", - "phone": "865-570-3383", - "email": "angelina@generola.com" - }, - { - "id": 3877, - "guid": "246e5daa-b354-46ed-a17e-a641d4aa788c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Wood", - "company": "Techtron", - "phone": "880-519-3096", - "email": "sophie@techtron.com" - }, - { - "id": 3878, - "guid": "25d1ca47-b745-44e3-91a8-fa259da00cdd", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Molligan", - "company": "Dynarama", - "phone": "899-523-2364", - "email": "melanie@dynarama.com" - }, - { - "id": 3879, - "guid": "f42e0519-91a3-420f-b9d3-727f43dd30e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Fisher", - "company": "Infraique", - "phone": "879-574-2674", - "email": "riley@infraique.com" - }, - { - "id": 3880, - "guid": "115e7df4-216b-4c41-ae05-506849794572", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Young", - "company": "US Infratouch", - "phone": "899-467-3428", - "email": "mackenzie@us infratouch.com" - }, - { - "id": 3881, - "guid": "ddfe100d-0584-4a19-ba8a-ec2bf21957ce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Charlson", - "company": "Syssoft", - "phone": "819-528-3365", - "email": "jocelyn@syssoft.com" - }, - { - "id": 3882, - "guid": "8ce71427-037a-444c-a794-16d172b8b4d5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Miller", - "company": "SysVenamerica", - "phone": "884-553-2978", - "email": "genesis@sysvenamerica.com" - }, - { - "id": 3883, - "guid": "bef5f852-a7b7-44a6-bf4b-c1547e491cf3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Bush", - "company": "Quintegrity", - "phone": "815-426-3154", - "email": "sydney@quintegrity.com" - }, - { - "id": 3884, - "guid": "41ba6d11-8ada-45a5-aa3a-cc5f3840dd45", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Nathan", - "company": "Unologic", - "phone": "893-579-3737", - "email": "maya@unologic.com" - }, - { - "id": 3885, - "guid": "caf77d4b-26d6-481f-8cb9-00e580664600", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gate", - "company": "Aprama", - "phone": "864-497-3946", - "email": "lauren@aprama.com" - }, - { - "id": 3886, - "guid": "f46ec735-f0c5-43d9-aa48-36b41dcd091e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Turner", - "company": "Dynarama", - "phone": "877-515-2456", - "email": "sophia@dynarama.com" - }, - { - "id": 3887, - "guid": "4f607eab-a182-4dad-b37e-cda2c7d0db31", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Fulton", - "company": "Truegate", - "phone": "867-500-2998", - "email": "isabelle@truegate.com" - }, - { - "id": 3888, - "guid": "9b86e8ad-cf04-4780-b1f5-db471c6f1564", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Wainwright", - "company": "Qualserve", - "phone": "853-551-2209", - "email": "amelia@qualserve.com" - }, - { - "id": 3889, - "guid": "637039e7-f30d-4533-a816-2b60223a0f5d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Cramer", - "company": "Polytheon", - "phone": "823-538-2218", - "email": "julia@polytheon.com" - }, - { - "id": 3890, - "guid": "1b84d74b-7e0b-471b-be87-d21fb44849fd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Creighton", - "company": "Syssoft", - "phone": "868-584-3324", - "email": "evelyn@syssoft.com" - }, - { - "id": 3891, - "guid": "44261aea-1dac-42cb-8626-ad6d9d80665f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Oswald", - "company": "eEyetanic", - "phone": "867-406-3751", - "email": "zoe@eeyetanic.com" - }, - { - "id": 3892, - "guid": "94747b69-f3cd-4796-b713-908e0151e9ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Goldman", - "company": "Infragraph", - "phone": "867-457-2267", - "email": "lily@infragraph.com" - }, - { - "id": 3893, - "guid": "beabd95e-85ad-462b-8efd-eb3a92c24bd4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Gustman", - "company": "iEnland", - "phone": "897-563-3127", - "email": "mariah@ienland.com" - }, - { - "id": 3894, - "guid": "68ce4a6e-0d5d-45ed-9963-2667576b6992", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Gardner", - "company": "Multitiqua", - "phone": "808-596-2597", - "email": "hannah@multitiqua.com" - }, - { - "id": 3895, - "guid": "193c422b-573e-4d29-88d7-a8b7f98232ce", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mia Turner", - "company": "Anaframe", - "phone": "838-597-2879", - "email": "mia@anaframe.com" - }, - { - "id": 3896, - "guid": "e69216a7-8270-4b88-97e7-7d5c2da40960", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooklyn Haig", - "company": "Westtomik", - "phone": "802-505-2641", - "email": "brooklyn@westtomik.com" - }, - { - "id": 3897, - "guid": "944d9199-92ad-453c-b29b-b36c5c1f7aa0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Hodges", - "company": "Keytheon", - "phone": "848-455-2000", - "email": "kaitlyn@keytheon.com" - }, - { - "id": 3898, - "guid": "7e929ddf-06c2-4e7f-8fb4-0c6b7414cfd4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Wallace", - "company": "Celgra", - "phone": "856-528-3150", - "email": "layla@celgra.com" - }, - { - "id": 3899, - "guid": "5bf5862d-d8c4-4c0c-9354-2e73209ef426", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Daniels", - "company": "Vencom", - "phone": "831-469-2306", - "email": "maya@vencom.com" - }, - { - "id": 3900, - "guid": "f5058405-5769-44fc-ab81-933a8174c98d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Adamson", - "company": "Titanirola", - "phone": "854-511-3720", - "email": "victoria@titanirola.com" - }, - { - "id": 3901, - "guid": "c227f969-91eb-4f78-9063-82bb45eb0eac", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Crossman", - "company": "Interliant", - "phone": "829-472-2209", - "email": "nevaeh@interliant.com" - }, - { - "id": 3902, - "guid": "87dbd4d1-2334-44a7-b13a-884c81a6fa15", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Clapton", - "company": "Raylog", - "phone": "822-500-2053", - "email": "makayla@raylog.com" - }, - { - "id": 3903, - "guid": "643ee306-4b21-49fd-b5c5-eb10092c71ab", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Abramson", - "company": "Venconix", - "phone": "883-507-3269", - "email": "aubrey@venconix.com" - }, - { - "id": 3904, - "guid": "b9470fb3-76f7-4dbc-8052-28c97816bc8c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Gardner", - "company": "SysUSA", - "phone": "833-587-3664", - "email": "emily@sysusa.com" - }, - { - "id": 3905, - "guid": "8584f29c-19d9-402c-80eb-4ce647383764", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Timmons", - "company": "Interliant", - "phone": "859-556-3529", - "email": "emma@interliant.com" - }, - { - "id": 3906, - "guid": "cc0341e7-eb20-4df8-9667-e96c034964b3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Goldman", - "company": "iSkyvaco", - "phone": "808-576-3955", - "email": "alexandra@iskyvaco.com" - }, - { - "id": 3907, - "guid": "1c876c76-3ae0-43ca-afb0-99af7c80ffd1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Wainwright", - "company": "Hypervaco", - "phone": "867-591-3808", - "email": "madelyn@hypervaco.com" - }, - { - "id": 3908, - "guid": "2f352e3f-0514-4d16-a681-f05758024c94", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Croftoon", - "company": "eEyetanic", - "phone": "865-516-2629", - "email": "jocelyn@eeyetanic.com" - }, - { - "id": 3909, - "guid": "d0914d96-5cbf-488e-a991-d251176fca4e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Brown", - "company": "iMedconik", - "phone": "809-526-3928", - "email": "lillian@imedconik.com" - }, - { - "id": 3910, - "guid": "efdd45cb-9ca9-4ef7-b147-ced952e997a5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Brooks", - "company": "SysUSA", - "phone": "830-550-2601", - "email": "avery@sysusa.com" - }, - { - "id": 3911, - "guid": "63a3057b-87ec-465f-a71b-0380842cb790", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Chesterton", - "company": "Truetomic", - "phone": "830-545-3762", - "email": "addison@truetomic.com" - }, - { - "id": 3912, - "guid": "43c4265c-f5c5-4130-925d-020c0bf3678f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Day", - "company": "Aprama", - "phone": "896-584-3550", - "email": "mya@aprama.com" - }, - { - "id": 3913, - "guid": "0022b50e-6d1c-4e62-9944-2f20c637bb2b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Thornton", - "company": "Indisco", - "phone": "808-595-2530", - "email": "savannah@indisco.com" - }, - { - "id": 3914, - "guid": "5501bfba-43b6-443e-9f94-f561c226d226", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Nelson", - "company": "Rapigrafix", - "phone": "821-518-3139", - "email": "brianna@rapigrafix.com" - }, - { - "id": 3915, - "guid": "b4aee124-6d84-488e-856c-1160332e8bf7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Miln", - "company": "Navivacs", - "phone": "850-470-3134", - "email": "katelyn@navivacs.com" - }, - { - "id": 3916, - "guid": "4440b744-1b91-42c4-8976-802cb6effb78", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Miln", - "company": "Allnet", - "phone": "869-415-3100", - "email": "allison@allnet.com" - }, - { - "id": 3917, - "guid": "b01a6e3f-50f7-4b9d-85d4-2161c00e36fa", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Ward", - "company": "Keytheon", - "phone": "871-412-2151", - "email": "peyton@keytheon.com" - }, - { - "id": 3918, - "guid": "30721874-c8fd-4b76-95c5-600e58e5ca3a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Fulton", - "company": "Orthomedia", - "phone": "824-488-3461", - "email": "jessica@orthomedia.com" - }, - { - "id": 3919, - "guid": "625bb3ca-12ca-475e-be57-999c7479c92a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Gerald", - "company": "Multitiqua", - "phone": "875-559-3175", - "email": "katherine@multitiqua.com" - }, - { - "id": 3920, - "guid": "f7ac4dfe-04a5-45ce-9c6a-b658cefae522", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Chapman", - "company": "Orthosoft", - "phone": "807-456-3574", - "email": "vanessa@orthosoft.com" - }, - { - "id": 3921, - "guid": "3fc85a2e-c31d-4fbe-aa4a-a283fa833c9e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Watson", - "company": "Textiqua", - "phone": "840-519-3463", - "email": "riley@textiqua.com" - }, - { - "id": 3922, - "guid": "dfede54c-ba15-471b-bdba-b8175cf3ca1f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Goldman", - "company": "Syssoft", - "phone": "815-487-3476", - "email": "ella@syssoft.com" - }, - { - "id": 3923, - "guid": "2478ec67-7e1f-4d6f-9f0b-18510da6da50", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Wood", - "company": "iEnland", - "phone": "842-583-3825", - "email": "lily@ienland.com" - }, - { - "id": 3924, - "guid": "c50a74fc-514f-4a5c-ad5e-42bb1c4b5ee9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Vaughan", - "company": "iEnland", - "phone": "828-432-2736", - "email": "valeria@ienland.com" - }, - { - "id": 3925, - "guid": "17120742-83dc-4538-962a-6b4f9a0087a5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Thornton", - "company": "Keytheon", - "phone": "816-547-2683", - "email": "morgan@keytheon.com" - }, - { - "id": 3926, - "guid": "67dd52a8-c877-4897-abdb-946567d3605e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Osborne", - "company": "Qualserve", - "phone": "891-520-2905", - "email": "anna@qualserve.com" - }, - { - "id": 3927, - "guid": "031ba75b-f53a-413d-88af-e6a2548eede5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Mercer", - "company": "Infraique", - "phone": "877-545-2975", - "email": "vanessa@infraique.com" - }, - { - "id": 3928, - "guid": "3783b23f-bbff-4605-9d62-bfdbfdd37162", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Smith", - "company": "Interliant", - "phone": "821-472-3093", - "email": "jocelyn@interliant.com" - }, - { - "id": 3929, - "guid": "e7075619-0c71-4cab-b5da-9d59fe59245b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Gerald", - "company": "Mescaridic", - "phone": "839-446-2695", - "email": "sydney@mescaridic.com" - }, - { - "id": 3930, - "guid": "280f91a7-af2d-4b30-b61c-e7a29897265e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Otis", - "company": "OpKeycomm", - "phone": "867-426-3865", - "email": "kaylee@opkeycomm.com" - }, - { - "id": 3931, - "guid": "3329c077-d06c-4d58-8da8-803fc7b32142", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Oldridge", - "company": "Titanirola", - "phone": "852-512-2786", - "email": "maria@titanirola.com" - }, - { - "id": 3932, - "guid": "4091b649-4019-4d42-94ff-90d63ba46614", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Gardner", - "company": "Syssoft", - "phone": "804-574-2638", - "email": "nevaeh@syssoft.com" - }, - { - "id": 3933, - "guid": "c63bfbea-7fc1-4918-972a-dd4025d7744a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Paige Carrington", - "company": "Cryptotemplate", - "phone": "818-441-3340", - "email": "paige@cryptotemplate.com" - }, - { - "id": 3934, - "guid": "35715aa8-0a1b-4e2b-95a4-71cb8fbd489e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Hodges", - "company": "Raylog", - "phone": "855-447-3516", - "email": "allison@raylog.com" - }, - { - "id": 3935, - "guid": "5a6c9bbc-ffe7-4b2f-9a2b-db8edef9de5a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Cramer", - "company": "iEnland", - "phone": "820-567-2035", - "email": "isabelle@ienland.com" - }, - { - "id": 3936, - "guid": "03e4c9ea-bd0a-4359-ad82-b2a14c38fa9d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Brickman", - "company": "Genland", - "phone": "800-510-3735", - "email": "audrey@genland.com" - }, - { - "id": 3937, - "guid": "9af8fd33-2403-48e8-bb94-993240a350ce", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Croftoon", - "company": "Systheon", - "phone": "854-556-2474", - "email": "victoria@systheon.com" - }, - { - "id": 3938, - "guid": "a792b158-59e0-49e5-9596-ca33a2c173dd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Chandter", - "company": "Aluco", - "phone": "843-494-2216", - "email": "jasmine@aluco.com" - }, - { - "id": 3939, - "guid": "9a1705dc-4fe4-43c7-9ba1-ea0e7e48485d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Walkman", - "company": "Inridium", - "phone": "845-590-3155", - "email": "avery@inridium.com" - }, - { - "id": 3940, - "guid": "ff19e2a2-4693-4954-9767-2fdd071d795c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie Crossman", - "company": "Sontopia", - "phone": "817-578-3787", - "email": "natalie@sontopia.com" - }, - { - "id": 3941, - "guid": "ca5ce5b7-d602-4158-bf1e-b5ed17937a86", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Fulton", - "company": "Conrama", - "phone": "895-438-3333", - "email": "samantha@conrama.com" - }, - { - "id": 3942, - "guid": "52138d60-4947-4f2e-86a1-47f31588dba6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Carter", - "company": "Pacwest", - "phone": "847-554-2038", - "email": "gabriella@pacwest.com" - }, - { - "id": 3943, - "guid": "ba2a60ce-85be-468d-922b-4cb697cc5682", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Ford", - "company": "Pacwest", - "phone": "810-599-2604", - "email": "mackenzie@pacwest.com" - }, - { - "id": 3944, - "guid": "61a7b195-2b24-4225-b83d-0a2c3377cfe4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Higgins", - "company": "Orthosoft", - "phone": "888-468-3694", - "email": "hailey@orthosoft.com" - }, - { - "id": 3945, - "guid": "151fbed7-d8bc-492b-bc0e-45dafea5e3a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Ward", - "company": "InfoAirway", - "phone": "893-403-2804", - "email": "zoey@infoairway.com" - }, - { - "id": 3946, - "guid": "78695ca7-4e94-4a15-aa00-b8e4081335be", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Nathan", - "company": "Enlogia", - "phone": "883-570-3921", - "email": "aaliyah@enlogia.com" - }, - { - "id": 3947, - "guid": "f9eab70f-c54b-4c52-a6df-2e9f67d8225c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Young", - "company": "Fibrotouch", - "phone": "857-510-3051", - "email": "paige@fibrotouch.com" - }, - { - "id": 3948, - "guid": "4137d425-ea86-47ed-bd8a-9c04df1e50dd", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Gardner", - "company": "Vencom", - "phone": "836-404-3732", - "email": "ava@vencom.com" - }, - { - "id": 3949, - "guid": "e133135b-50b0-488e-86ac-c4c20642e092", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Miln", - "company": "Turbomart", - "phone": "867-467-2914", - "email": "riley@turbomart.com" - }, - { - "id": 3950, - "guid": "e3d22161-d0c8-4b7e-961e-63c86824eeff", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Caroline Gustman", - "company": "Allnet", - "phone": "897-419-3524", - "email": "caroline@allnet.com" - }, - { - "id": 3951, - "guid": "577c1c2e-a98d-4c14-8544-aefa861abe57", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Oswald", - "company": "Proline", - "phone": "828-524-2406", - "email": "hannah@proline.com" - }, - { - "id": 3952, - "guid": "829826aa-3559-47d7-afbe-3e3f8c594f6c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Day", - "company": "Systheon", - "phone": "867-432-3469", - "email": "elizabeth@systheon.com" - }, - { - "id": 3953, - "guid": "d149b7bb-5f82-45e0-8e63-9cac1cd33c70", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery White", - "company": "Ameritron", - "phone": "806-431-2849", - "email": "avery@ameritron.com" - }, - { - "id": 3954, - "guid": "e4201ae0-d11b-477b-8622-36305e60b267", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Carrington", - "company": "Safetrust", - "phone": "816-421-2937", - "email": "jasmine@safetrust.com" - }, - { - "id": 3955, - "guid": "eb108adb-96d3-4e07-b8cc-77c263824fab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Hamphrey", - "company": "Syssoft", - "phone": "843-471-3167", - "email": "bella@syssoft.com" - }, - { - "id": 3956, - "guid": "9a6f40d1-b011-48f8-900e-6e5483a6bfc7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Carey", - "company": "SysUSA", - "phone": "862-433-2321", - "email": "bailey@sysusa.com" - }, - { - "id": 3957, - "guid": "486f11f6-2dd3-4fa9-bb01-b21ebf909bab", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Chloe Abramson", - "company": "Pericenta", - "phone": "845-537-3952", - "email": "chloe@pericenta.com" - }, - { - "id": 3958, - "guid": "c65092ad-fa65-43a4-b2a4-3279a5bfdaf9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya Molligan", - "company": "Infragraph", - "phone": "863-431-3988", - "email": "mya@infragraph.com" - }, - { - "id": 3959, - "guid": "3f488359-0b3c-4772-a163-354471da8216", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Wayne", - "company": "iSkyvaco", - "phone": "842-498-2854", - "email": "audrey@iskyvaco.com" - }, - { - "id": 3960, - "guid": "a6e4d9ed-5933-4e88-9a93-c0a45e648cd7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Brooks", - "company": "iEnland", - "phone": "817-485-3200", - "email": "emily@ienland.com" - }, - { - "id": 3961, - "guid": "d6453be5-c395-4736-b205-5952d7580e7c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ava Charlson", - "company": "Textiqua", - "phone": "837-406-3005", - "email": "ava@textiqua.com" - }, - { - "id": 3962, - "guid": "8c2b137a-1c6e-4869-8a6c-41bd14a4146b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Clapton", - "company": "Transtouch", - "phone": "811-422-3312", - "email": "ella@transtouch.com" - }, - { - "id": 3963, - "guid": "30dd6aeb-bafa-45bc-afdc-6034f430e97b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Abramson", - "company": "Mescatron", - "phone": "874-593-2982", - "email": "peyton@mescatron.com" - }, - { - "id": 3964, - "guid": "7767ed75-236e-4c34-ac4b-fb8c43dc4e93", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Charlson", - "company": "Quintegrity", - "phone": "844-509-2766", - "email": "ella@quintegrity.com" - }, - { - "id": 3965, - "guid": "de3d998b-c521-4753-9f9d-1aa38c32e59f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Elizabeth Cook", - "company": "Mescatron", - "phone": "873-437-2016", - "email": "elizabeth@mescatron.com" - }, - { - "id": 3966, - "guid": "6f4be886-1f81-4698-8766-8d682d3142c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Harrison", - "company": "Raylog", - "phone": "800-559-3378", - "email": "trinity@raylog.com" - }, - { - "id": 3967, - "guid": "96832eb7-218b-4cb5-9b4c-c88baca21519", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Gilmore", - "company": "Sontopia", - "phone": "818-460-3920", - "email": "elizabeth@sontopia.com" - }, - { - "id": 3968, - "guid": "1faf8820-ff50-4513-823e-46b48a70c7c9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brianna Hailey", - "company": "Xeicon", - "phone": "854-458-2424", - "email": "brianna@xeicon.com" - }, - { - "id": 3969, - "guid": "ecb9ffcc-85f4-4c10-b085-9624b2c6fff9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Ford", - "company": "Navivacs", - "phone": "810-530-3118", - "email": "lily@navivacs.com" - }, - { - "id": 3970, - "guid": "bd6a766d-b1d5-48d8-abe3-6cf82d50f7b0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Abramson", - "company": "iOptystix", - "phone": "815-569-3827", - "email": "angelina@ioptystix.com" - }, - { - "id": 3971, - "guid": "0b1fa08f-02c7-49c4-8e91-048cd53ed7e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Gardner", - "company": "Genland", - "phone": "873-541-3929", - "email": "brooklyn@genland.com" - }, - { - "id": 3972, - "guid": "ecd10d92-696e-46d5-b8ab-a60cedacf978", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Ward", - "company": "Cryptotegrity", - "phone": "869-430-2415", - "email": "brooklyn@cryptotegrity.com" - }, - { - "id": 3973, - "guid": "8696560a-d90b-47a1-a512-1ccd55ea56c2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Vaughan", - "company": "Aluco", - "phone": "897-427-3275", - "email": "valeria@aluco.com" - }, - { - "id": 3974, - "guid": "4aa382d9-9155-4c4a-9301-d40521a51b1c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Wainwright", - "company": "Netsystems", - "phone": "849-494-2462", - "email": "gianna@netsystems.com" - }, - { - "id": 3975, - "guid": "89753068-35f5-43f7-801e-107be8685fe4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Daniels", - "company": "iSkyvaco", - "phone": "831-516-3083", - "email": "khloe@iskyvaco.com" - }, - { - "id": 3976, - "guid": "a72e7b8f-7e5b-4af1-982d-bc61b9c445ee", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Carey", - "company": "iSkyvaco", - "phone": "889-481-3390", - "email": "mackenzie@iskyvaco.com" - }, - { - "id": 3977, - "guid": "3cc97e49-b790-43f6-8b77-c2c6efb4d895", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Miers", - "company": "Technogra", - "phone": "839-594-2752", - "email": "aaliyah@technogra.com" - }, - { - "id": 3978, - "guid": "5603c6e3-83aa-4b63-98e2-11a8512c891d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Waller", - "company": "Aprama", - "phone": "808-463-3887", - "email": "peyton@aprama.com" - }, - { - "id": 3979, - "guid": "44bd6e6f-de04-4ce3-99e8-51b4235194fe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Cook", - "company": "Polytheon", - "phone": "867-495-2410", - "email": "bella@polytheon.com" - }, - { - "id": 3980, - "guid": "8289a8e8-ae6c-45d5-a5e0-325021e730c0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Watson", - "company": "Inridium", - "phone": "871-505-2823", - "email": "paige@inridium.com" - }, - { - "id": 3981, - "guid": "f1ce032b-a8ca-410c-899d-46c191b3357b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Creighton", - "company": "Anaframe", - "phone": "866-513-3949", - "email": "jessica@anaframe.com" - }, - { - "id": 3982, - "guid": "4593f20a-c2f2-4242-8f0c-0fe764adbecb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Otis", - "company": "Infragraph", - "phone": "815-587-3619", - "email": "makayla@infragraph.com" - }, - { - "id": 3983, - "guid": "77e843b6-98c1-4bb1-8f85-20e2f55ce130", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Morrison", - "company": "Cryptotegrity", - "phone": "877-409-2201", - "email": "alexa@cryptotegrity.com" - }, - { - "id": 3984, - "guid": "3d30ea40-947a-48bb-a7bb-8074ec2eb033", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bella Turner", - "company": "Enlogia", - "phone": "878-422-3006", - "email": "bella@enlogia.com" - }, - { - "id": 3985, - "guid": "c7e5cc21-0ef7-45a7-9133-363e3a197622", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Hodges", - "company": "iOptystix", - "phone": "894-453-2979", - "email": "ashley@ioptystix.com" - }, - { - "id": 3986, - "guid": "84ccbf55-da70-4c6b-a6ae-1f9f4fabf505", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Ford", - "company": "Polytheon", - "phone": "858-461-2214", - "email": "kylie@polytheon.com" - }, - { - "id": 3987, - "guid": "7f2dfc18-5ae5-4f37-a7d0-c9d8ade62b5a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Hardman", - "company": "Videobanc", - "phone": "813-575-2458", - "email": "kaitlyn@videobanc.com" - }, - { - "id": 3988, - "guid": "9dcad2e3-f779-46d2-a9e8-dd262ba2d71c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Hailey", - "company": "Truegate", - "phone": "842-532-2438", - "email": "makayla@truegate.com" - }, - { - "id": 3989, - "guid": "346aa23e-4291-4f35-ba46-4145a5317190", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Croftoon", - "company": "Westmedia", - "phone": "819-534-3906", - "email": "madison@westmedia.com" - }, - { - "id": 3990, - "guid": "71194bea-dc15-42ca-9b38-cbb280c99138", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Miller", - "company": "Xeicon", - "phone": "844-492-2789", - "email": "jessica@xeicon.com" - }, - { - "id": 3991, - "guid": "201e092f-efb3-47dd-862d-646333517f38", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Webster", - "company": "Generola", - "phone": "852-512-2689", - "email": "aubrey@generola.com" - }, - { - "id": 3992, - "guid": "f1e5ee29-5e18-43dd-bb81-300789773827", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Campbell", - "company": "Fibroserve", - "phone": "837-499-2960", - "email": "ashley@fibroserve.com" - }, - { - "id": 3993, - "guid": "3777d25d-7d17-4d58-be6f-e40991b6e755", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Crossman", - "company": "Interliant", - "phone": "863-452-2078", - "email": "sophie@interliant.com" - }, - { - "id": 3994, - "guid": "874f3600-8b50-43c9-a201-033852da7d32", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Hodges", - "company": "iMedconik", - "phone": "852-424-2329", - "email": "molly@imedconik.com" - }, - { - "id": 3995, - "guid": "9edcf7bb-d482-44d4-8ad1-ba90273d5b11", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Campbell", - "company": "Conotomics", - "phone": "864-417-2082", - "email": "evelyn@conotomics.com" - }, - { - "id": 3996, - "guid": "86e16d3d-ed50-4623-a07a-86a031f27a8a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Trinity Adamson", - "company": "Interliant", - "phone": "838-445-2669", - "email": "trinity@interliant.com" - }, - { - "id": 3997, - "guid": "3e149264-1363-4e9c-856b-64400bdcfbba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Charlson", - "company": "Titanigraf", - "phone": "876-524-2725", - "email": "arianna@titanigraf.com" - }, - { - "id": 3998, - "guid": "e8f3b8ee-124f-46f7-b3ab-e7164d89dbf6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Crossman", - "company": "Rapigrafix", - "phone": "872-596-2828", - "email": "peyton@rapigrafix.com" - }, - { - "id": 3999, - "guid": "59694102-4579-440d-b91d-39165b7bcbf4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Harrison", - "company": "Keytheon", - "phone": "836-547-3957", - "email": "gabriella@keytheon.com" - }, - { - "id": 4000, - "guid": "9d3a2205-d986-4cce-8fae-d160efa456aa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Adamson", - "company": "Textiqua", - "phone": "816-523-3666", - "email": "emma@textiqua.com" - }, - { - "id": 4001, - "guid": "16bb215a-ddc6-4193-bfdb-250b11c19d5c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Young", - "company": "Steganoconiche", - "phone": "853-531-3482", - "email": "audrey@steganoconiche.com" - }, - { - "id": 4002, - "guid": "0e81a166-ef53-4952-8ca2-16f4964af71e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabelle Ward", - "company": "Truetomic", - "phone": "851-533-2534", - "email": "isabelle@truetomic.com" - }, - { - "id": 4003, - "guid": "7437ec8e-a6ba-46db-8e56-a606312ba609", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Clapton", - "company": "Infragraph", - "phone": "887-557-2726", - "email": "vanessa@infragraph.com" - }, - { - "id": 4004, - "guid": "9c2b052c-b414-4936-a77f-1063f5ed5e75", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Calhoun", - "company": "Anagraph", - "phone": "893-492-3433", - "email": "olivia@anagraph.com" - }, - { - "id": 4005, - "guid": "a1d448b7-9a62-4043-88b3-e0f83637fb97", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Fisher", - "company": "Fibrotopia", - "phone": "810-507-3937", - "email": "angelina@fibrotopia.com" - }, - { - "id": 4006, - "guid": "c7b6fd4d-cf81-4766-90bb-d60c0a82ce6a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley White", - "company": "Celgra", - "phone": "832-460-3270", - "email": "riley@celgra.com" - }, - { - "id": 4007, - "guid": "b326c645-bfa4-4b46-98fb-a503f54c144c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Miers", - "company": "Ameritron", - "phone": "826-566-2819", - "email": "caroline@ameritron.com" - }, - { - "id": 4008, - "guid": "4d6f1705-a249-45aa-aac2-6efa9682b14f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Haig", - "company": "Anagraph", - "phone": "848-445-3978", - "email": "emily@anagraph.com" - }, - { - "id": 4009, - "guid": "f7b1d7a7-e0f9-4a40-9cd6-5d4a06d0813e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Chesterton", - "company": "Conrama", - "phone": "816-551-2229", - "email": "eva@conrama.com" - }, - { - "id": 4010, - "guid": "05fc6421-24b1-4f7c-a84b-35caeaafaa3b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Gibbs", - "company": "US Omnigraphik", - "phone": "893-512-2241", - "email": "morgan@us omnigraphik.com" - }, - { - "id": 4011, - "guid": "7dc1d83a-be8b-48f5-bd13-08ef51134c65", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Hoggarth", - "company": "Orthosoft", - "phone": "836-549-3336", - "email": "isabelle@orthosoft.com" - }, - { - "id": 4012, - "guid": "c48837ee-e2a6-4cc2-9f2a-dd53dae9994e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hannah Oldman", - "company": "Westmedia", - "phone": "863-406-3550", - "email": "hannah@westmedia.com" - }, - { - "id": 4013, - "guid": "651ab083-a9df-4baf-8ad0-68dcaf8b6f3c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Goodman", - "company": "Thermotomic", - "phone": "863-446-2509", - "email": "maria@thermotomic.com" - }, - { - "id": 4014, - "guid": "ee73d373-225d-472d-80ba-e30f0daf62b7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Wayne", - "company": "eSteganoergy", - "phone": "857-445-2726", - "email": "molly@esteganoergy.com" - }, - { - "id": 4015, - "guid": "d36d44bd-665d-4251-a52d-00c7953035a0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Sheldon", - "company": "Venconix", - "phone": "865-469-2733", - "email": "maya@venconix.com" - }, - { - "id": 4016, - "guid": "02928ab3-83aa-4edb-adbc-82331c12e883", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth Wayne", - "company": "Videobanc", - "phone": "834-534-2889", - "email": "elizabeth@videobanc.com" - }, - { - "id": 4017, - "guid": "5b1b363f-8a07-42f0-96c0-d4fabd4547ae", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Calhoun", - "company": "Polytheon", - "phone": "885-500-3422", - "email": "maria@polytheon.com" - }, - { - "id": 4018, - "guid": "baeb64f5-75da-4d17-ad35-14594beee848", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Osborne", - "company": "Westmedia", - "phone": "829-529-3829", - "email": "leah@westmedia.com" - }, - { - "id": 4019, - "guid": "236ea9a6-e807-4c77-8403-eb9c89f287b4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Walkman", - "company": "Turbomart", - "phone": "804-426-3663", - "email": "leah@turbomart.com" - }, - { - "id": 4020, - "guid": "ad6d9b06-9498-4d97-b5e3-7e19189d5c71", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Owen", - "company": "Transtouch", - "phone": "859-506-3576", - "email": "jessica@transtouch.com" - }, - { - "id": 4021, - "guid": "e86e4099-c1b4-41bb-8174-4f92b14e2d87", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Carter", - "company": "Steganoconiche", - "phone": "852-504-2527", - "email": "nevaeh@steganoconiche.com" - }, - { - "id": 4022, - "guid": "29d7d39b-2615-48bb-91a4-51d5cf9215de", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Gilson", - "company": "Aluco", - "phone": "834-515-2186", - "email": "kaylee@aluco.com" - }, - { - "id": 4023, - "guid": "f1d43056-8a6b-4bba-b9b4-7a389f787cf1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Gilmore", - "company": "Compuamerica", - "phone": "893-511-2354", - "email": "khloe@compuamerica.com" - }, - { - "id": 4024, - "guid": "fa48b1cd-dd4e-45ad-9fb9-120097415902", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Cook", - "company": "Netseco", - "phone": "806-495-2775", - "email": "allison@netseco.com" - }, - { - "id": 4025, - "guid": "ee046f37-db47-4c67-a3ef-00bde2416483", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Miller", - "company": "Netseco", - "phone": "820-549-2764", - "email": "lillian@netseco.com" - }, - { - "id": 4026, - "guid": "500824f0-ffe1-4a30-b42b-e9e6d3148632", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna WifKinson", - "company": "Gigaura", - "phone": "818-467-3887", - "email": "gianna@gigaura.com" - }, - { - "id": 4027, - "guid": "115fb9bd-a658-43ba-b821-5d9478669aed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brianna Gilmore", - "company": "Mescaridic", - "phone": "817-427-3806", - "email": "brianna@mescaridic.com" - }, - { - "id": 4028, - "guid": "1bd8e221-e33b-440f-a19f-5f7db2fb8eaa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Hamphrey", - "company": "Qualserve", - "phone": "862-543-2213", - "email": "chloe@qualserve.com" - }, - { - "id": 4029, - "guid": "b91d8494-2018-4c7b-ae64-eddef3bf0f42", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Goldman", - "company": "Titanirola", - "phone": "861-426-3435", - "email": "hannah@titanirola.com" - }, - { - "id": 4030, - "guid": "3c8e68fa-6bb3-4a3c-b941-a84b2e590e0e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Chesterton", - "company": "Aluco", - "phone": "875-579-2484", - "email": "abigail@aluco.com" - }, - { - "id": 4031, - "guid": "dbb8ef26-3666-4822-af3d-c2f87d4105c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Neal", - "company": "Fibrotopia", - "phone": "847-487-3585", - "email": "zoe@fibrotopia.com" - }, - { - "id": 4032, - "guid": "6edf5aa5-e7c9-4208-9a30-3e71f802c444", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Harrison", - "company": "Interliant", - "phone": "818-563-3010", - "email": "ava@interliant.com" - }, - { - "id": 4033, - "guid": "44164324-eec0-40e7-9cbd-545cb8f140f3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Wood", - "company": "US Infratouch", - "phone": "811-533-2645", - "email": "gianna@us infratouch.com" - }, - { - "id": 4034, - "guid": "d663e75a-d28d-4261-a1c2-4b56a84a247a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Wainwright", - "company": "Technogra", - "phone": "876-493-3221", - "email": "mariah@technogra.com" - }, - { - "id": 4035, - "guid": "a46ddf16-18c6-491f-a082-d873bb738254", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Brooks", - "company": "Safeagra", - "phone": "882-441-3414", - "email": "taylor@safeagra.com" - }, - { - "id": 4036, - "guid": "10dc1fd3-7e5b-4113-bc9c-6c702b1b89ee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Sheldon", - "company": "Cryptotemplate", - "phone": "851-441-3919", - "email": "riley@cryptotemplate.com" - }, - { - "id": 4037, - "guid": "6891e9c7-9151-4d69-b250-c1f36ae8e3fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Thomson", - "company": "Thermotomic", - "phone": "845-490-3211", - "email": "anna@thermotomic.com" - }, - { - "id": 4038, - "guid": "78eaccbe-9e08-42d9-b02c-8f929b8e425a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Gardner", - "company": "RoboAerlogix", - "phone": "806-562-2035", - "email": "bailey@roboaerlogix.com" - }, - { - "id": 4039, - "guid": "345d5d31-367d-4ae1-a8a2-c7eb58a59c62", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Galbraith", - "company": "Westmedia", - "phone": "886-548-3824", - "email": "gianna@westmedia.com" - }, - { - "id": 4040, - "guid": "6160dee4-180b-470f-9fe0-9adef2680d7f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Payton Harrison", - "company": "Westtomik", - "phone": "884-591-3843", - "email": "payton@westtomik.com" - }, - { - "id": 4041, - "guid": "4eb8ac42-0bfd-4665-8ef7-d3d51bb2254d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Abramson", - "company": "Ventanium", - "phone": "885-597-3172", - "email": "makayla@ventanium.com" - }, - { - "id": 4042, - "guid": "d5c8d7df-1a56-4c4d-857c-1407cea724d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Abramson", - "company": "Steganoconiche", - "phone": "843-418-3463", - "email": "trinity@steganoconiche.com" - }, - { - "id": 4043, - "guid": "d095c6bd-f900-4d04-81bf-bd3b29591974", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Carey", - "company": "Teraserv", - "phone": "831-584-3485", - "email": "leah@teraserv.com" - }, - { - "id": 4044, - "guid": "165df486-f14c-4b2c-a289-b766b091c38c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Gardner", - "company": "Indisco", - "phone": "874-510-2511", - "email": "gabrielle@indisco.com" - }, - { - "id": 4045, - "guid": "74b21ead-913a-4a96-9645-9781f960b5f1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Michaelson", - "company": "Fibroserve", - "phone": "894-509-2154", - "email": "gabriella@fibroserve.com" - }, - { - "id": 4046, - "guid": "76bf1a22-51f6-49a2-a548-fea8661b676f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Morrison", - "company": "Indisco", - "phone": "812-529-3393", - "email": "kaylee@indisco.com" - }, - { - "id": 4047, - "guid": "16484380-c87e-4778-a17d-e9470fd47098", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Daniels", - "company": "Ventanium", - "phone": "848-424-2042", - "email": "hannah@ventanium.com" - }, - { - "id": 4048, - "guid": "1be6f1b7-5930-4e03-9f5b-9abfb9d98e1b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Smith", - "company": "Anaframe", - "phone": "833-487-3950", - "email": "morgan@anaframe.com" - }, - { - "id": 4049, - "guid": "24e77b92-7a7d-4e57-9d50-8f5b0574431e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Gardner", - "company": "Rapigrafix", - "phone": "895-400-3305", - "email": "nevaeh@rapigrafix.com" - }, - { - "id": 4050, - "guid": "48103688-eead-48c1-af94-c677b33942cd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Fulton", - "company": "Netsystems", - "phone": "840-427-3958", - "email": "lily@netsystems.com" - }, - { - "id": 4051, - "guid": "dec38a0f-505d-46ac-8c4b-48e6b3fe8c3d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Samantha Neal", - "company": "Cryptotegrity", - "phone": "871-582-3189", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 4052, - "guid": "3c6258d5-cf41-4e2b-af20-34b930b7f51b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Charlson", - "company": "Transtouch", - "phone": "895-508-3221", - "email": "nevaeh@transtouch.com" - }, - { - "id": 4053, - "guid": "0f3853d3-b55d-4189-9f9e-9aa1f25314b7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Carroll", - "company": "Truetomic", - "phone": "809-444-3252", - "email": "arianna@truetomic.com" - }, - { - "id": 4054, - "guid": "975a3bbb-1a8a-489a-a7ca-34712ecb6410", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline WifKinson", - "company": "Unconix", - "phone": "884-576-3519", - "email": "madeline@unconix.com" - }, - { - "id": 4055, - "guid": "37cd7f4e-c90e-453c-a002-ec99b7fc048c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Watson", - "company": "Truegate", - "phone": "894-481-3042", - "email": "kaylee@truegate.com" - }, - { - "id": 4056, - "guid": "04fdcf38-7ece-4dd5-84a7-342d0ff7449d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Wayne", - "company": "Safeagra", - "phone": "874-543-2421", - "email": "isabella@safeagra.com" - }, - { - "id": 4057, - "guid": "c6b60db5-543b-4b90-a8d6-c7ef8fc12a29", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Osborne", - "company": "iSkyvaco", - "phone": "853-508-2620", - "email": "amelia@iskyvaco.com" - }, - { - "id": 4058, - "guid": "32c851e0-be03-442a-8de7-a91762569f28", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Webster", - "company": "Unconix", - "phone": "891-572-2680", - "email": "bella@unconix.com" - }, - { - "id": 4059, - "guid": "65a529a9-a5e3-477d-b684-df715c7637e7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Haig", - "company": "Inridium", - "phone": "841-465-2910", - "email": "mya@inridium.com" - }, - { - "id": 4060, - "guid": "d491cf8d-7ac6-4e84-b5bf-69a7edef57c8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Brooks", - "company": "Allphysiche", - "phone": "853-513-3080", - "email": "emma@allphysiche.com" - }, - { - "id": 4061, - "guid": "f6202b0d-ce96-4fbc-a594-7cd07961178f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Oldman", - "company": "Xeicon", - "phone": "850-587-2592", - "email": "isabelle@xeicon.com" - }, - { - "id": 4062, - "guid": "14434416-86d5-48fd-8150-7eb376043dc9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Miers", - "company": "Infragraph", - "phone": "801-537-2464", - "email": "destiny@infragraph.com" - }, - { - "id": 4063, - "guid": "f2a25171-36b8-4930-984c-f11cc27f62d6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Webster", - "company": "Allnet", - "phone": "827-563-2139", - "email": "olivia@allnet.com" - }, - { - "id": 4064, - "guid": "d2356372-4fd8-4a1a-919b-29067261e5be", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley Oswald", - "company": "Cryptotegrity", - "phone": "846-480-3998", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 4065, - "guid": "0dfda539-281e-4c3a-8830-342f3d96c4c7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Hoggarth", - "company": "Thermotomic", - "phone": "860-401-2875", - "email": "elizabeth@thermotomic.com" - }, - { - "id": 4066, - "guid": "98729758-d097-4553-bc91-27e9df6eb3d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Goldman", - "company": "Steganoconiche", - "phone": "858-495-3454", - "email": "destiny@steganoconiche.com" - }, - { - "id": 4067, - "guid": "578aee53-d71d-40bc-b54e-9a3223d454f0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Michaelson", - "company": "Infragraph", - "phone": "860-403-2798", - "email": "brooklyn@infragraph.com" - }, - { - "id": 4068, - "guid": "294727df-aa44-41e8-bf2b-02a284b6a9be", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Stanley", - "company": "Westmedia", - "phone": "840-583-3895", - "email": "mya@westmedia.com" - }, - { - "id": 4069, - "guid": "fdcd0a61-0f2f-4fa4-ab36-e008e7926d6f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Haig", - "company": "Enlogia", - "phone": "876-451-3710", - "email": "gabriella@enlogia.com" - }, - { - "id": 4070, - "guid": "da8e0733-b6e0-4403-adda-e109da5d0b15", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Brickman", - "company": "Truetomic", - "phone": "888-539-3567", - "email": "aubrey@truetomic.com" - }, - { - "id": 4071, - "guid": "f32a4013-737a-4469-966e-a7b6b7f3d30b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Gilbert", - "company": "Robocomm", - "phone": "806-495-2340", - "email": "caroline@robocomm.com" - }, - { - "id": 4072, - "guid": "c64e8398-f0da-4dfb-9591-70044cb4a8f5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Ford", - "company": "eEyetanic", - "phone": "865-458-2329", - "email": "bella@eeyetanic.com" - }, - { - "id": 4073, - "guid": "e916a7ce-4507-45db-b5a8-be091f318c0c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Webster", - "company": "iOptystix", - "phone": "803-519-2947", - "email": "jessica@ioptystix.com" - }, - { - "id": 4074, - "guid": "b2f640f6-3487-476f-8d63-321a7bb14667", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Grace Hailey", - "company": "Infraique", - "phone": "816-411-2787", - "email": "grace@infraique.com" - }, - { - "id": 4075, - "guid": "0f6adb24-450b-48cf-ad92-ee75bb93de4d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Cook", - "company": "Technogra", - "phone": "818-456-2854", - "email": "eva@technogra.com" - }, - { - "id": 4076, - "guid": "e7677801-11a6-4098-a034-3d603230059c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Daniels", - "company": "Turbomart", - "phone": "891-446-3808", - "email": "amelia@turbomart.com" - }, - { - "id": 4077, - "guid": "7b023840-07d0-4a48-bf3e-d25713c1dd07", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Hancock", - "company": "Thermotomic", - "phone": "847-584-2557", - "email": "destiny@thermotomic.com" - }, - { - "id": 4078, - "guid": "2c57c1f4-3aa2-430e-b7b4-d3dc6bb7ee6e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Sheldon", - "company": "US Omnigraphik", - "phone": "888-595-2267", - "email": "alexis@us omnigraphik.com" - }, - { - "id": 4079, - "guid": "2c3534cc-b221-44ae-9594-22de110b7583", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Smith", - "company": "Cryptotegrity", - "phone": "867-523-2399", - "email": "madeline@cryptotegrity.com" - }, - { - "id": 4080, - "guid": "0866977f-a476-4d00-b598-2de2e73ea7b4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Turner", - "company": "Orthosoft", - "phone": "825-585-3855", - "email": "serenity@orthosoft.com" - }, - { - "id": 4081, - "guid": "ca289220-f402-482a-b02d-a970b8e2b885", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexandra Adamson", - "company": "Skydata", - "phone": "833-559-3137", - "email": "alexandra@skydata.com" - }, - { - "id": 4082, - "guid": "858c4f56-4515-4c3c-97dd-a5ca782a0702", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Daniels", - "company": "Technogra", - "phone": "810-451-2503", - "email": "sydney@technogra.com" - }, - { - "id": 4083, - "guid": "876cbb5b-58a3-4736-9eb6-99dda2c26da7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Webster", - "company": "Cryptotegrity", - "phone": "818-445-2798", - "email": "taylor@cryptotegrity.com" - }, - { - "id": 4084, - "guid": "8015e10b-2203-484d-a311-199e8922745d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lillian White", - "company": "Robotomic", - "phone": "827-558-3123", - "email": "lillian@robotomic.com" - }, - { - "id": 4085, - "guid": "b3fbfd90-db78-4b87-8b7e-426694d67650", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Cramer", - "company": "Interliant", - "phone": "836-465-2623", - "email": "serenity@interliant.com" - }, - { - "id": 4086, - "guid": "cbf35617-89b9-4181-a47a-936e10cdfef0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Andrea Gibbs", - "company": "Jamrola", - "phone": "889-456-3035", - "email": "andrea@jamrola.com" - }, - { - "id": 4087, - "guid": "219b104b-b179-48ce-a26a-240cc9d463d9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Chapman", - "company": "Gigaura", - "phone": "832-462-2110", - "email": "zoey@gigaura.com" - }, - { - "id": 4088, - "guid": "3d706c6b-324e-4832-8a83-cf08fa9868d6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Nelson", - "company": "Conotomics", - "phone": "804-503-2398", - "email": "sydney@conotomics.com" - }, - { - "id": 4089, - "guid": "52b53b97-dc43-447f-af5f-387a12b7f2b1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Milton", - "company": "Interliant", - "phone": "861-589-3474", - "email": "riley@interliant.com" - }, - { - "id": 4090, - "guid": "bba90379-ac73-430d-9ef5-9b216d7c7372", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Abramson", - "company": "Westtomik", - "phone": "878-406-2399", - "email": "serenity@westtomik.com" - }, - { - "id": 4091, - "guid": "2f36ba6f-f20a-4802-a3a7-f7ad65ac5723", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Camila WifKinson", - "company": "Gigaura", - "phone": "862-435-3500", - "email": "camila@gigaura.com" - }, - { - "id": 4092, - "guid": "27626e0b-4ae4-4d30-a4bf-6179cb7d99ac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Freeman", - "company": "Jamconik", - "phone": "824-454-2197", - "email": "samantha@jamconik.com" - }, - { - "id": 4093, - "guid": "2b6a0d2b-8e53-46f7-9cfa-01b4d407bcaf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Oldridge", - "company": "Thermotomic", - "phone": "832-464-2324", - "email": "alexa@thermotomic.com" - }, - { - "id": 4094, - "guid": "bb1b07cd-02d2-4c02-be4c-f9a3a5ec0aa3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Sheldon", - "company": "Entcast", - "phone": "800-598-2333", - "email": "leah@entcast.com" - }, - { - "id": 4095, - "guid": "1ffd7840-d55a-4841-802d-75684ed2deaf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Carter", - "company": "Polytheon", - "phone": "836-546-2344", - "email": "katelyn@polytheon.com" - }, - { - "id": 4096, - "guid": "2b681f87-a74d-4151-a70c-972882d0f5fd", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Hamphrey", - "company": "Fibroserve", - "phone": "819-437-3010", - "email": "khloe@fibroserve.com" - }, - { - "id": 4097, - "guid": "f096d2b3-c4bf-45c9-9aeb-d83924c22774", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Gustman", - "company": "Infragraph", - "phone": "875-442-3135", - "email": "sarah@infragraph.com" - }, - { - "id": 4098, - "guid": "ced0397f-5c51-4964-aa1b-ec8144d23c6f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Chesterton", - "company": "Fibrotopia", - "phone": "837-547-3939", - "email": "autumn@fibrotopia.com" - }, - { - "id": 4099, - "guid": "48130075-caa5-4d77-a589-a4dfe2cf91f9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Carter", - "company": "SysVenamerica", - "phone": "858-468-3898", - "email": "layla@sysvenamerica.com" - }, - { - "id": 4100, - "guid": "959c949e-7a0b-46a9-88ce-d182ecd0a3e8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Daniels", - "company": "Titanigraf", - "phone": "815-405-3074", - "email": "abigail@titanigraf.com" - }, - { - "id": 4101, - "guid": "f791f60f-259a-4ac5-bfeb-e51d6b06471b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Winter", - "company": "Allnet", - "phone": "889-443-2253", - "email": "emma@allnet.com" - }, - { - "id": 4102, - "guid": "05545337-aebb-4dd3-bf6f-75bc1a437909", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Higgins", - "company": "Systheon", - "phone": "832-486-2959", - "email": "melanie@systheon.com" - }, - { - "id": 4103, - "guid": "537b2719-d2eb-4477-81c1-f376bda3f700", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Fulton", - "company": "Airdyne", - "phone": "836-415-2859", - "email": "katelyn@airdyne.com" - }, - { - "id": 4104, - "guid": "cb8815dc-c7f1-4a50-b281-34da25cd07b1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Hodges", - "company": "US Infratouch", - "phone": "868-457-3221", - "email": "jasmine@us infratouch.com" - }, - { - "id": 4105, - "guid": "9fcabcc1-a0e7-4fa2-aef4-519036c62c5e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Neal", - "company": "Quintegrity", - "phone": "800-565-2371", - "email": "jasmine@quintegrity.com" - }, - { - "id": 4106, - "guid": "eec47e69-c68b-45bf-8157-04bae41c137d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Molligan", - "company": "Hypervaco", - "phone": "882-574-2717", - "email": "abigail@hypervaco.com" - }, - { - "id": 4107, - "guid": "9bb062df-4dc1-4fe2-80d4-a6c44eecc093", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Clapton", - "company": "Gigaura", - "phone": "822-498-2327", - "email": "samantha@gigaura.com" - }, - { - "id": 4108, - "guid": "d4989763-b38a-459f-99b7-55efb7d70c66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Gate", - "company": "Hypervaco", - "phone": "853-412-2031", - "email": "isabella@hypervaco.com" - }, - { - "id": 4109, - "guid": "c86ae2e2-0dda-435d-940d-f2904015fc65", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Wainwright", - "company": "Truegate", - "phone": "882-514-2471", - "email": "melanie@truegate.com" - }, - { - "id": 4110, - "guid": "4ccb551b-1606-4f82-901d-1796ae48e691", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Carroll", - "company": "Textiqua", - "phone": "843-537-2212", - "email": "amelia@textiqua.com" - }, - { - "id": 4111, - "guid": "ffd9d179-5d13-4773-81c6-c63b2f6d0a7f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Croftoon", - "company": "eEyetanic", - "phone": "828-597-2815", - "email": "emma@eeyetanic.com" - }, - { - "id": 4112, - "guid": "91ba2980-6900-4bc0-b759-309b51d06e74", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Clapton", - "company": "Navivacs", - "phone": "879-407-2538", - "email": "katherine@navivacs.com" - }, - { - "id": 4113, - "guid": "21326049-b42a-468f-8252-910902090396", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Higgins", - "company": "Teraserv", - "phone": "878-449-2156", - "email": "serenity@teraserv.com" - }, - { - "id": 4114, - "guid": "025fc863-46b2-4763-8398-f35257e22f4a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Young", - "company": "Genland", - "phone": "813-447-2810", - "email": "evelyn@genland.com" - }, - { - "id": 4115, - "guid": "d086b805-bff7-4bd0-a857-53369fd03135", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Sherlock", - "company": "Gigaura", - "phone": "851-569-3996", - "email": "anna@gigaura.com" - }, - { - "id": 4116, - "guid": "d9853151-ce3b-45de-8a89-1748329f84be", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Wainwright", - "company": "Allnet", - "phone": "887-475-3954", - "email": "lily@allnet.com" - }, - { - "id": 4117, - "guid": "409e113a-3b22-40c6-aa31-436ede46eb35", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Sherlock", - "company": "Robotomic", - "phone": "892-546-3853", - "email": "evelyn@robotomic.com" - }, - { - "id": 4118, - "guid": "9379af78-3f06-4254-807f-049f938a0215", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Wallace", - "company": "Jamrola", - "phone": "852-543-2663", - "email": "melanie@jamrola.com" - }, - { - "id": 4119, - "guid": "4e216722-069b-491b-a4ad-e903019883ed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Melanie Clapton", - "company": "Superscope", - "phone": "842-424-3205", - "email": "melanie@superscope.com" - }, - { - "id": 4120, - "guid": "88179596-6034-48cd-9780-5b6cf1abac00", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Croftoon", - "company": "Quintegrity", - "phone": "845-472-2328", - "email": "avery@quintegrity.com" - }, - { - "id": 4121, - "guid": "2a1637b8-58aa-4c5c-b7d1-3f69b51096cb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Paige Brooks", - "company": "Ameritron", - "phone": "872-466-2564", - "email": "paige@ameritron.com" - }, - { - "id": 4122, - "guid": "021c5258-e929-4dd0-847f-ad7de1c6db3e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Haig", - "company": "Anaframe", - "phone": "895-426-3127", - "email": "kaylee@anaframe.com" - }, - { - "id": 4123, - "guid": "610ab397-fdcc-49aa-894c-0e7fa4acad6c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Harrison", - "company": "Ventanium", - "phone": "818-538-3931", - "email": "gianna@ventanium.com" - }, - { - "id": 4124, - "guid": "34ff089f-f745-4543-b2cc-f6f28ddf173f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Hoggarth", - "company": "Cryptotemplate", - "phone": "817-405-3254", - "email": "alexandra@cryptotemplate.com" - }, - { - "id": 4125, - "guid": "0dd61503-e70d-4354-9bc2-d5fbfbc38e9a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Brickman", - "company": "Airdyne", - "phone": "844-591-2839", - "email": "genesis@airdyne.com" - }, - { - "id": 4126, - "guid": "1e139f6a-b691-439e-ac41-b010e556f7a6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Daniels", - "company": "Xeicon", - "phone": "801-443-3299", - "email": "alyssa@xeicon.com" - }, - { - "id": 4127, - "guid": "b547d8d1-912b-4084-b702-df000591ed9e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Goodman", - "company": "Keytheon", - "phone": "897-479-3286", - "email": "isabelle@keytheon.com" - }, - { - "id": 4128, - "guid": "61ecdbda-f514-4760-8f34-a92adf8611aa", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Morrison", - "company": "Anagraph", - "phone": "867-447-3726", - "email": "kayla@anagraph.com" - }, - { - "id": 4129, - "guid": "b48cca36-8b80-435e-b591-ea5a021f72d6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ava Sheldon", - "company": "Polytheon", - "phone": "845-480-3436", - "email": "ava@polytheon.com" - }, - { - "id": 4130, - "guid": "a6740bee-6237-4cad-9094-ace3e6a10d45", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Charlotte Otis", - "company": "Teraserv", - "phone": "870-590-2421", - "email": "charlotte@teraserv.com" - }, - { - "id": 4131, - "guid": "b28d66e7-a7ca-4568-90e4-a85a023577b7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Taylor Owen", - "company": "Xeicon", - "phone": "818-466-3744", - "email": "taylor@xeicon.com" - }, - { - "id": 4132, - "guid": "8cfa99e1-1fc0-4dba-9580-7e30456e6681", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Julia Miller", - "company": "Robotomic", - "phone": "892-465-3498", - "email": "julia@robotomic.com" - }, - { - "id": 4133, - "guid": "36549030-facc-4568-a143-e6de1ef6891a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lily Vance", - "company": "InfoAirway", - "phone": "851-481-2340", - "email": "lily@infoairway.com" - }, - { - "id": 4134, - "guid": "8f54de03-862b-421e-9f92-19428ddc6b30", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Gilmore", - "company": "eSteganoergy", - "phone": "810-481-3738", - "email": "zoey@esteganoergy.com" - }, - { - "id": 4135, - "guid": "e56bf0ef-bae8-4b9a-b573-1e40dbe88165", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Oldridge", - "company": "Mescaridic", - "phone": "897-567-2457", - "email": "paige@mescaridic.com" - }, - { - "id": 4136, - "guid": "7d0df797-1d86-475b-bbee-eb259d085df9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Fisher", - "company": "Titanirola", - "phone": "851-523-2989", - "email": "camila@titanirola.com" - }, - { - "id": 4137, - "guid": "79a8c1ed-c50b-4ffd-b67e-c5a82b43e44e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Otis", - "company": "Navivacs", - "phone": "839-445-2301", - "email": "brooke@navivacs.com" - }, - { - "id": 4138, - "guid": "2442b073-173b-4e96-a85b-ad3627177726", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Brown", - "company": "Systheon", - "phone": "891-565-2889", - "email": "bailey@systheon.com" - }, - { - "id": 4139, - "guid": "93d02c09-807a-4902-bcf8-98c4d7fbb153", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Gustman", - "company": "Superscope", - "phone": "838-420-3701", - "email": "olivia@superscope.com" - }, - { - "id": 4140, - "guid": "0ca102c7-9fbf-4244-b2e1-db6267cbec16", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Oldridge", - "company": "Multitiqua", - "phone": "840-462-3928", - "email": "bella@multitiqua.com" - }, - { - "id": 4141, - "guid": "50dc94a0-d040-46b5-ae6b-32df0a8a2ae5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Hardman", - "company": "Anaframe", - "phone": "848-425-3377", - "email": "madeline@anaframe.com" - }, - { - "id": 4142, - "guid": "bd3d8072-e209-43bb-9542-589684a64043", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jessica Miln", - "company": "Teraserv", - "phone": "847-512-3387", - "email": "jessica@teraserv.com" - }, - { - "id": 4143, - "guid": "3709d5fa-46dc-4b0d-a73f-da2bf7be9aae", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Gerald", - "company": "Thermotomic", - "phone": "819-485-3130", - "email": "paige@thermotomic.com" - }, - { - "id": 4144, - "guid": "f3966b95-3e59-4d26-aa42-abd3a8b56cf0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Thomson", - "company": "Westgate", - "phone": "849-502-3343", - "email": "kimberly@westgate.com" - }, - { - "id": 4145, - "guid": "f647502c-deea-45b2-9052-a593ee875b3a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Thorndike", - "company": "Anaframe", - "phone": "830-592-2788", - "email": "peyton@anaframe.com" - }, - { - "id": 4146, - "guid": "ffa0bc79-d8b7-4e95-869a-a01118fe9e97", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Fulton", - "company": "iOptystix", - "phone": "827-537-2491", - "email": "chloe@ioptystix.com" - }, - { - "id": 4147, - "guid": "da0e2c95-42a6-43c7-824d-5bdbdd763e5e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Conors", - "company": "Dynarama", - "phone": "846-545-3077", - "email": "ella@dynarama.com" - }, - { - "id": 4148, - "guid": "5d66f87e-af3b-4945-ae85-f152ac2791d3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Day", - "company": "Mescaridic", - "phone": "802-546-3875", - "email": "maria@mescaridic.com" - }, - { - "id": 4149, - "guid": "acf97e77-93d3-4f06-8b38-e7410ee69616", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Gibbs", - "company": "iSkyvaco", - "phone": "874-438-3972", - "email": "kylie@iskyvaco.com" - }, - { - "id": 4150, - "guid": "7dcf3a5e-b663-4953-815b-65f22de8a24a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison White", - "company": "Safeagra", - "phone": "848-490-2149", - "email": "madison@safeagra.com" - }, - { - "id": 4151, - "guid": "7b02ef6e-f5b3-4225-8e0a-b74a9a9f5d58", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Young", - "company": "Cryptotegrity", - "phone": "840-498-2551", - "email": "katherine@cryptotegrity.com" - }, - { - "id": 4152, - "guid": "b520c590-62b4-4319-a30b-0be6ed3682ee", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Wood", - "company": "Videobanc", - "phone": "858-463-2806", - "email": "brooke@videobanc.com" - }, - { - "id": 4153, - "guid": "03a5f2f1-075a-4eef-8f2c-02d1c000cb9a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Day", - "company": "Proline", - "phone": "848-537-3176", - "email": "melanie@proline.com" - }, - { - "id": 4154, - "guid": "6debf29b-25c0-4285-b650-cf0d0b9842b5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Warren", - "company": "Teraserv", - "phone": "870-413-3562", - "email": "caroline@teraserv.com" - }, - { - "id": 4155, - "guid": "f49f743b-0ff6-43e5-b873-0f2dbb9380bf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Charlson", - "company": "Navivacs", - "phone": "883-506-3061", - "email": "sydney@navivacs.com" - }, - { - "id": 4156, - "guid": "f1e7a408-9071-412e-b79b-a914036b2210", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Hardman", - "company": "Pericenta", - "phone": "837-568-3980", - "email": "paige@pericenta.com" - }, - { - "id": 4157, - "guid": "bb5b4b12-60b4-424b-b109-672698c9a1bf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Carrington", - "company": "Techtron", - "phone": "827-490-3555", - "email": "leah@techtron.com" - }, - { - "id": 4158, - "guid": "1152a9e6-8ac1-4d5b-9f6f-f4320b7b6ac1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Gate", - "company": "Unologic", - "phone": "845-436-3227", - "email": "anna@unologic.com" - }, - { - "id": 4159, - "guid": "17e329f3-0c1f-4b5d-9b24-0f716a7f6103", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Hawkins", - "company": "iSkyvaco", - "phone": "852-598-2994", - "email": "sarah@iskyvaco.com" - }, - { - "id": 4160, - "guid": "975b8e41-c311-4d8f-8fe3-201969ecba99", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Camila Wallace", - "company": "Westmedia", - "phone": "825-516-3735", - "email": "camila@westmedia.com" - }, - { - "id": 4161, - "guid": "54659240-eea0-49ab-8789-e9783f66a8cd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Autumn Carey", - "company": "Steganoconiche", - "phone": "879-521-3541", - "email": "autumn@steganoconiche.com" - }, - { - "id": 4162, - "guid": "932eff90-6f61-41f0-b8c7-b3412d8904b2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Miln", - "company": "Thermotomic", - "phone": "832-564-2940", - "email": "kimberly@thermotomic.com" - }, - { - "id": 4163, - "guid": "ac76723a-466f-4ff3-b213-fa426b1337d3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sydney Wallace", - "company": "Navivacs", - "phone": "841-495-3746", - "email": "sydney@navivacs.com" - }, - { - "id": 4164, - "guid": "d6b4b459-4d7d-4ad5-9a65-7859e0f5568e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Hancock", - "company": "Anagraph", - "phone": "890-447-3335", - "email": "lily@anagraph.com" - }, - { - "id": 4165, - "guid": "013f3ece-320c-4c3f-bd11-02c7d8ebcb71", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Carter", - "company": "iQualcar", - "phone": "847-569-3881", - "email": "zoe@iqualcar.com" - }, - { - "id": 4166, - "guid": "22c5a66a-19d1-423f-a0c2-241c58e0b975", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Campbell", - "company": "Truetomic", - "phone": "870-499-3709", - "email": "julia@truetomic.com" - }, - { - "id": 4167, - "guid": "046d4da9-c100-4722-a708-ae3fd97ff4ec", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Thornton", - "company": "Proline", - "phone": "824-460-2509", - "email": "trinity@proline.com" - }, - { - "id": 4168, - "guid": "ef87726b-c37e-480d-afc4-27f218299f8d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Thorndike", - "company": "Cryptotemplate", - "phone": "804-410-3036", - "email": "natalie@cryptotemplate.com" - }, - { - "id": 4169, - "guid": "4ceea92b-61cc-44f1-9bcf-7e5a083af388", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Hodges", - "company": "Unconix", - "phone": "899-447-3205", - "email": "genesis@unconix.com" - }, - { - "id": 4170, - "guid": "6dc8da53-2c47-4b61-90ce-63e5b9ac8fbe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Miln", - "company": "Celgra", - "phone": "816-507-2682", - "email": "mackenzie@celgra.com" - }, - { - "id": 4171, - "guid": "854546b7-d9f0-4278-ada5-89138bdd8748", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Timmons", - "company": "eSteganoergy", - "phone": "844-567-2007", - "email": "serenity@esteganoergy.com" - }, - { - "id": 4172, - "guid": "a3a1ce6e-7190-4c37-be38-f3a56cd0107a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Higgins", - "company": "iEnland", - "phone": "871-545-3419", - "email": "valeria@ienland.com" - }, - { - "id": 4173, - "guid": "04724663-9ba6-4e4a-80af-b8c2aa7e300e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Gardner", - "company": "Fibroserve", - "phone": "839-493-3829", - "email": "autumn@fibroserve.com" - }, - { - "id": 4174, - "guid": "8e7b07ec-e170-4c07-b481-e5e629a494cf", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Molligan", - "company": "Hypervaco", - "phone": "870-527-3734", - "email": "chloe@hypervaco.com" - }, - { - "id": 4175, - "guid": "0d1ab6b9-5147-4393-b974-c68f4a376eca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Sherlock", - "company": "Xeicon", - "phone": "886-526-3904", - "email": "mya@xeicon.com" - }, - { - "id": 4176, - "guid": "9df19417-7dad-4b19-a090-ddf45687a7a4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Croftoon", - "company": "Teratopia", - "phone": "838-493-2317", - "email": "savannah@teratopia.com" - }, - { - "id": 4177, - "guid": "77ebeaf6-2aea-48a3-8822-5972e81e9b9d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Mercer", - "company": "Quintegrity", - "phone": "874-492-3955", - "email": "katherine@quintegrity.com" - }, - { - "id": 4178, - "guid": "c4a44417-7234-458d-a11c-6b178d6732cf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Sheldon", - "company": "Nanobanc", - "phone": "868-551-3925", - "email": "valeria@nanobanc.com" - }, - { - "id": 4179, - "guid": "056ec2f0-5019-4703-9f72-5eacb2825851", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Winter", - "company": "Mescaridic", - "phone": "859-501-3082", - "email": "natalie@mescaridic.com" - }, - { - "id": 4180, - "guid": "c593b91d-3845-48d9-96c2-d63dada6fa71", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Nelson", - "company": "Robotemplate", - "phone": "854-575-3694", - "email": "kayla@robotemplate.com" - }, - { - "id": 4181, - "guid": "9cb03a61-b61b-4654-aa5c-3ba9667f74d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Nelson", - "company": "OpKeycomm", - "phone": "808-506-3460", - "email": "emily@opkeycomm.com" - }, - { - "id": 4182, - "guid": "6c9860c6-7d3e-41f8-a187-ec32a83a455f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Wesley", - "company": "Technogra", - "phone": "823-446-2737", - "email": "zoey@technogra.com" - }, - { - "id": 4183, - "guid": "0e57d601-d1a9-469a-8de6-3e98509adb7b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Goodman", - "company": "Aluco", - "phone": "873-538-3308", - "email": "bella@aluco.com" - }, - { - "id": 4184, - "guid": "90d08bc1-5d28-47a2-b454-692ef8d2feef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Brickman", - "company": "Raylog", - "phone": "828-467-2278", - "email": "melanie@raylog.com" - }, - { - "id": 4185, - "guid": "6f20dcb2-2c96-420a-9422-345e07d633d7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Gilson", - "company": "Multitiqua", - "phone": "844-416-3415", - "email": "melanie@multitiqua.com" - }, - { - "id": 4186, - "guid": "39ef1cd0-4e48-492c-bb94-1a3ab5e50460", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Wood", - "company": "Unconix", - "phone": "843-583-2682", - "email": "eva@unconix.com" - }, - { - "id": 4187, - "guid": "6ab16617-7c4a-4b3d-b7d3-2c804468e94b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Brooks", - "company": "Orthomedia", - "phone": "833-512-2610", - "email": "leah@orthomedia.com" - }, - { - "id": 4188, - "guid": "39edc63f-7181-4b30-b52d-eb2648414f86", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Vance", - "company": "Steganoconiche", - "phone": "898-540-2158", - "email": "chloe@steganoconiche.com" - }, - { - "id": 4189, - "guid": "7d50adfc-9ce4-4900-a41a-1503e8f1e343", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Harrison", - "company": "Xeicon", - "phone": "887-474-2747", - "email": "hannah@xeicon.com" - }, - { - "id": 4190, - "guid": "07cdcfc2-4272-4c95-bbcb-712d779f1654", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Thornton", - "company": "Infragraph", - "phone": "822-588-3359", - "email": "ariana@infragraph.com" - }, - { - "id": 4191, - "guid": "82a81dfd-5845-433f-8224-0febbb15ea5b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Morrison", - "company": "Pericenta", - "phone": "884-568-2179", - "email": "katelyn@pericenta.com" - }, - { - "id": 4192, - "guid": "dc060e37-5d4a-4003-9e3c-8066916a3d81", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Goodman", - "company": "iOptystix", - "phone": "870-514-3018", - "email": "melanie@ioptystix.com" - }, - { - "id": 4193, - "guid": "194168cc-3f70-4131-a023-0ef772153590", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Morrison", - "company": "Superscope", - "phone": "897-583-2197", - "email": "angelina@superscope.com" - }, - { - "id": 4194, - "guid": "a2d2696a-7761-47d0-b3e2-bf83b32dca04", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Morrison", - "company": "Skydata", - "phone": "898-532-3025", - "email": "valeria@skydata.com" - }, - { - "id": 4195, - "guid": "46654ae4-7b5c-4f5c-b12f-7d8e0d261a0b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Sherlock", - "company": "Titanigraf", - "phone": "824-459-2733", - "email": "caroline@titanigraf.com" - }, - { - "id": 4196, - "guid": "1d96918a-3f54-4644-8e7e-571645c21fdf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Hawkins", - "company": "Fibroserve", - "phone": "870-431-3142", - "email": "angelina@fibroserve.com" - }, - { - "id": 4197, - "guid": "bc5fe72a-5fb4-4a96-9507-e8184e82e050", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Smith", - "company": "Titanigraf", - "phone": "800-435-2832", - "email": "evelyn@titanigraf.com" - }, - { - "id": 4198, - "guid": "6195d411-e0fc-4704-ac79-2c676b8ea19a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Gilmore", - "company": "Fibrotouch", - "phone": "805-506-3337", - "email": "serenity@fibrotouch.com" - }, - { - "id": 4199, - "guid": "26ee7700-a658-4ee7-a3fa-a0753bd03e0e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooklyn Conors", - "company": "SysVenamerica", - "phone": "854-522-3952", - "email": "brooklyn@sysvenamerica.com" - }, - { - "id": 4200, - "guid": "c9911dbc-e614-4929-866f-e821a0f89c0d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Hawkins", - "company": "Enlogia", - "phone": "895-577-2948", - "email": "mya@enlogia.com" - }, - { - "id": 4201, - "guid": "2ebef270-86a6-4a0c-a80b-d91d987b97b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Owen", - "company": "Inridium", - "phone": "872-599-3620", - "email": "amelia@inridium.com" - }, - { - "id": 4202, - "guid": "ddc64f55-7ddb-4097-a992-e918fa69a0a3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Young", - "company": "Airdyne", - "phone": "874-467-2425", - "email": "hailey@airdyne.com" - }, - { - "id": 4203, - "guid": "3070ed06-639e-48f9-ac42-b1f48c9f2919", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Galbraith", - "company": "Fibroserve", - "phone": "879-591-2535", - "email": "autumn@fibroserve.com" - }, - { - "id": 4204, - "guid": "557d325c-369d-43a4-96f2-5d7403082fbb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Conors", - "company": "US Infratouch", - "phone": "838-540-3372", - "email": "alexandra@us infratouch.com" - }, - { - "id": 4205, - "guid": "de38cc86-00c4-477b-b84c-07e176fa994c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Ogden", - "company": "Venconix", - "phone": "841-475-3409", - "email": "alexandra@venconix.com" - }, - { - "id": 4206, - "guid": "53598d9a-4bb0-4f83-9d48-6e2853d09837", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Waller", - "company": "Inridium", - "phone": "807-416-3966", - "email": "savannah@inridium.com" - }, - { - "id": 4207, - "guid": "91c312dc-d0b5-4f82-9e24-29be53c229b0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Hoggarth", - "company": "iOptystix", - "phone": "814-441-3535", - "email": "lauren@ioptystix.com" - }, - { - "id": 4208, - "guid": "59ab3719-9df7-4416-979d-4b10865550b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Youmans", - "company": "Dynarama", - "phone": "890-440-3592", - "email": "maya@dynarama.com" - }, - { - "id": 4209, - "guid": "8cdcdcc2-a099-4337-abba-0b2c477f21c3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Murphy", - "company": "Tekcar", - "phone": "826-530-2815", - "email": "ashley@tekcar.com" - }, - { - "id": 4210, - "guid": "bcb54d48-880d-4aeb-9ed2-325aed311455", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Freeman", - "company": "Fibrotouch", - "phone": "878-521-2588", - "email": "valeria@fibrotouch.com" - }, - { - "id": 4211, - "guid": "0c9a105a-9fce-445e-841f-4dc33baf2154", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Gardner", - "company": "Thermotomic", - "phone": "803-465-3693", - "email": "angelina@thermotomic.com" - }, - { - "id": 4212, - "guid": "28cb215e-388e-4972-8121-7e7db20805b7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Smith", - "company": "Qualserve", - "phone": "813-431-2905", - "email": "serenity@qualserve.com" - }, - { - "id": 4213, - "guid": "b6b7cae8-8f31-49e7-9c12-e06f9da3b885", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Clapton", - "company": "Textiqua", - "phone": "842-500-2564", - "email": "emma@textiqua.com" - }, - { - "id": 4214, - "guid": "3b3d576d-debb-40dc-84e7-04312b446ef3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Nelson", - "company": "Aluco", - "phone": "877-505-3460", - "email": "chloe@aluco.com" - }, - { - "id": 4215, - "guid": "9fb98ba0-138b-4de2-ba94-b6242e3b44dc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Mercer", - "company": "Multitiqua", - "phone": "869-600-2676", - "email": "destiny@multitiqua.com" - }, - { - "id": 4216, - "guid": "91946380-bd70-46ae-ab3e-6ed3c542a85e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Thomson", - "company": "Polytheon", - "phone": "841-574-3786", - "email": "riley@polytheon.com" - }, - { - "id": 4217, - "guid": "0fa14b12-a90c-424a-8c4f-5886e099ed31", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Oliver", - "company": "Proline", - "phone": "898-449-2443", - "email": "madeline@proline.com" - }, - { - "id": 4218, - "guid": "e2b19546-6cd9-443c-8bb0-182c0e25e6e0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Brown", - "company": "Entcast", - "phone": "820-566-2624", - "email": "hailey@entcast.com" - }, - { - "id": 4219, - "guid": "8cf2abbf-49a8-4bca-bed9-7b700db56d54", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Carter", - "company": "Venconix", - "phone": "812-567-2334", - "email": "kaylee@venconix.com" - }, - { - "id": 4220, - "guid": "9c5d9262-706c-4fde-beb5-f44df1078dff", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Gate", - "company": "Safetrust", - "phone": "862-562-2029", - "email": "mackenzie@safetrust.com" - }, - { - "id": 4221, - "guid": "dc468170-e956-47e9-87fb-4528a8cfa0e1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Mercer", - "company": "Fibrotopia", - "phone": "839-404-3499", - "email": "allison@fibrotopia.com" - }, - { - "id": 4222, - "guid": "35048a0b-5427-4de7-8f33-64f63f6cab4d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Warren", - "company": "US Omnigraphik", - "phone": "809-490-3339", - "email": "maya@us omnigraphik.com" - }, - { - "id": 4223, - "guid": "a24f4bee-c9a0-4a06-944a-25588ad093ee", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Osborne", - "company": "Truetomic", - "phone": "861-448-2487", - "email": "zoey@truetomic.com" - }, - { - "id": 4224, - "guid": "f61bb862-72e7-4244-bc2d-d4f2d28372c8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Cramer", - "company": "Conotomics", - "phone": "892-481-3851", - "email": "jocelyn@conotomics.com" - }, - { - "id": 4225, - "guid": "704dccf8-38df-4f41-a229-e796be3f0b21", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Chesterton", - "company": "Venconix", - "phone": "852-499-2691", - "email": "bailey@venconix.com" - }, - { - "id": 4226, - "guid": "bbc156d4-7ccd-4e18-bca2-073204bd3b8e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Carrington", - "company": "Navivacs", - "phone": "846-435-3634", - "email": "paige@navivacs.com" - }, - { - "id": 4227, - "guid": "9f48eea1-5b0b-44a3-bc31-7009bc18a778", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Wainwright", - "company": "Robotomic", - "phone": "815-507-3011", - "email": "layla@robotomic.com" - }, - { - "id": 4228, - "guid": "70ceaec2-d770-44a3-9aa6-b0051203d5e6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Hoggarth", - "company": "Polytheon", - "phone": "856-465-2959", - "email": "destiny@polytheon.com" - }, - { - "id": 4229, - "guid": "7c91dc6e-0354-46d3-b270-cd3ee965264d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Addison Oldridge", - "company": "Raylog", - "phone": "860-436-2799", - "email": "addison@raylog.com" - }, - { - "id": 4230, - "guid": "296e9ffb-abae-4f9e-a7b3-bcc9559fbc5c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katherine Nathan", - "company": "Netseco", - "phone": "818-560-3253", - "email": "katherine@netseco.com" - }, - { - "id": 4231, - "guid": "c3c399bd-45d9-46d5-9ee6-f6cd1639afb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Miller", - "company": "Steganoconiche", - "phone": "851-495-3836", - "email": "andrea@steganoconiche.com" - }, - { - "id": 4232, - "guid": "0d34765f-8fe6-4a38-a1da-b28033af3005", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Nelson", - "company": "eEyetanic", - "phone": "873-508-2758", - "email": "maya@eeyetanic.com" - }, - { - "id": 4233, - "guid": "c472fc3b-38b0-47d9-95da-db2d2dd846a9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ashley Winter", - "company": "Enlogia", - "phone": "811-570-2602", - "email": "ashley@enlogia.com" - }, - { - "id": 4234, - "guid": "3c69dd87-c292-4d52-bca1-0d078a239b51", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Miln", - "company": "Sontopia", - "phone": "893-586-2524", - "email": "charlotte@sontopia.com" - }, - { - "id": 4235, - "guid": "f5aa59ad-dc74-4adf-a48f-77c26afae557", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Stanley", - "company": "Interliant", - "phone": "832-562-2764", - "email": "valeria@interliant.com" - }, - { - "id": 4236, - "guid": "93343fae-9a68-4001-ad0a-66cadd9c99f9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Nelson", - "company": "US Infratouch", - "phone": "877-494-3213", - "email": "zoey@us infratouch.com" - }, - { - "id": 4237, - "guid": "cbeed46f-bbb4-4a01-abbd-8109a55de8d5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Chandter", - "company": "Truegate", - "phone": "854-419-2873", - "email": "kaylee@truegate.com" - }, - { - "id": 4238, - "guid": "cf1cc9a1-59c4-4718-ba61-5056e5e0cc3c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Morrison", - "company": "Robocomm", - "phone": "833-460-3225", - "email": "leah@robocomm.com" - }, - { - "id": 4239, - "guid": "64bf3141-f9ab-469c-a614-2d9d32b64c84", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Brooks", - "company": "Allphysiche", - "phone": "888-550-3433", - "email": "makayla@allphysiche.com" - }, - { - "id": 4240, - "guid": "50914982-b272-4974-8313-971235abab9f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Oldman", - "company": "Cryptotemplate", - "phone": "804-472-3064", - "email": "abigail@cryptotemplate.com" - }, - { - "id": 4241, - "guid": "eccef245-fd11-4cf1-bafc-21a25e0dedc8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Gilbert", - "company": "Aluco", - "phone": "860-403-3519", - "email": "maya@aluco.com" - }, - { - "id": 4242, - "guid": "b2aea37d-cc56-41a5-8a8c-74de025568cc", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Paige Bush", - "company": "Openserve", - "phone": "860-460-2124", - "email": "paige@openserve.com" - }, - { - "id": 4243, - "guid": "989e01f1-e305-474e-a320-cd1486a6e931", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Owen", - "company": "Dynarama", - "phone": "820-597-2036", - "email": "amelia@dynarama.com" - }, - { - "id": 4244, - "guid": "972973e1-0d6f-4923-821b-3c0af49a128e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Watson", - "company": "Syssoft", - "phone": "874-478-3439", - "email": "peyton@syssoft.com" - }, - { - "id": 4245, - "guid": "2dc220ab-c409-48f9-a864-22f43aec7c6c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Crossman", - "company": "Openserve", - "phone": "881-591-2441", - "email": "angelina@openserve.com" - }, - { - "id": 4246, - "guid": "33f6f036-c3ef-4564-8cf0-616b56253128", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Freeman", - "company": "Navivacs", - "phone": "847-466-3796", - "email": "maria@navivacs.com" - }, - { - "id": 4247, - "guid": "29982c63-8133-401c-b4a5-b44a08d9de5b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Nelson", - "company": "Mescatron", - "phone": "849-558-3650", - "email": "maya@mescatron.com" - }, - { - "id": 4248, - "guid": "7b26121a-c4e5-48d4-9704-281dbd4faa5d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lily Chandter", - "company": "Vencom", - "phone": "852-522-2782", - "email": "lily@vencom.com" - }, - { - "id": 4249, - "guid": "1a02ecfc-c014-4125-8321-5c7c76f91da2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Higgins", - "company": "Tekcar", - "phone": "868-551-3093", - "email": "audrey@tekcar.com" - }, - { - "id": 4250, - "guid": "7fdc7e38-656c-4e35-8d58-396e34b2f03c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Stanley", - "company": "Aluco", - "phone": "834-473-2031", - "email": "alyssa@aluco.com" - }, - { - "id": 4251, - "guid": "e1afdaf2-b547-4af9-b7fe-b97e275ddee6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Hailey", - "company": "Compuamerica", - "phone": "865-570-2607", - "email": "sophia@compuamerica.com" - }, - { - "id": 4252, - "guid": "f3938e92-2ff5-4101-9a0c-fa41ae678afc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Samantha Brown", - "company": "Unconix", - "phone": "879-452-3370", - "email": "samantha@unconix.com" - }, - { - "id": 4253, - "guid": "3c0f5ac6-8759-41d2-bc53-c2d41cfcb118", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Thomson", - "company": "Robotemplate", - "phone": "855-519-3431", - "email": "charlotte@robotemplate.com" - }, - { - "id": 4254, - "guid": "fbe1433b-fc43-41f3-ae8e-e6ba24d2d8f2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Wesley", - "company": "Anaframe", - "phone": "892-581-3427", - "email": "alyssa@anaframe.com" - }, - { - "id": 4255, - "guid": "4e929fc1-26c6-46b2-8e66-571c272aadfc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Hodges", - "company": "Teknoplexon", - "phone": "829-423-3991", - "email": "makayla@teknoplexon.com" - }, - { - "id": 4256, - "guid": "2572ff48-be21-4978-95dd-e2969dc69c99", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Gustman", - "company": "eSteganoergy", - "phone": "801-474-3773", - "email": "genesis@esteganoergy.com" - }, - { - "id": 4257, - "guid": "1452c108-5313-4274-88fb-016cc961ed7d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Murphy", - "company": "Navivacs", - "phone": "871-536-2923", - "email": "madeline@navivacs.com" - }, - { - "id": 4258, - "guid": "0b937004-2ba4-4d8a-af94-0f98a8716293", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Brooks", - "company": "Techtron", - "phone": "857-515-3103", - "email": "lillian@techtron.com" - }, - { - "id": 4259, - "guid": "2561ceeb-5929-4406-9702-d3f78c68f002", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Hoggarth", - "company": "Qualserve", - "phone": "803-537-3139", - "email": "emily@qualserve.com" - }, - { - "id": 4260, - "guid": "a4e5a2f8-caa1-4481-9c68-95ca34093428", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Miln", - "company": "Allnet", - "phone": "821-508-3231", - "email": "abigail@allnet.com" - }, - { - "id": 4261, - "guid": "23ced2a6-219a-4eb4-83b6-58b08848ab85", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Conors", - "company": "Celgra", - "phone": "841-443-2070", - "email": "evelyn@celgra.com" - }, - { - "id": 4262, - "guid": "9ec45801-6729-4fce-a769-a7f6714f6f73", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Murphy", - "company": "iSkyvaco", - "phone": "800-509-2525", - "email": "victoria@iskyvaco.com" - }, - { - "id": 4263, - "guid": "3012c4b7-054d-4d31-84dd-0faaa8313e8d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Waller", - "company": "Dynarama", - "phone": "847-422-2644", - "email": "charlotte@dynarama.com" - }, - { - "id": 4264, - "guid": "79628750-f13e-40f6-bfd9-ce6ae6802010", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Turner", - "company": "Techtron", - "phone": "833-403-2787", - "email": "ashley@techtron.com" - }, - { - "id": 4265, - "guid": "cc402f7a-ee5b-473b-b6ae-d3a011ee07a7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Hoggarth", - "company": "Technogra", - "phone": "882-531-2171", - "email": "mariah@technogra.com" - }, - { - "id": 4266, - "guid": "4b8d8a80-ee49-4ac1-90eb-fbb699dca030", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Molligan", - "company": "Orthomedia", - "phone": "807-589-2528", - "email": "eva@orthomedia.com" - }, - { - "id": 4267, - "guid": "b8696269-da03-46f1-812c-09464ea75d3e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Youmans", - "company": "Conotomics", - "phone": "871-496-2056", - "email": "mariah@conotomics.com" - }, - { - "id": 4268, - "guid": "e21fc682-ba4b-4e32-a8ce-2d3d56b1a4d2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Conors", - "company": "Genland", - "phone": "855-568-3502", - "email": "ashley@genland.com" - }, - { - "id": 4269, - "guid": "8fd1be84-9150-4638-bf04-91c5471fa6bf", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooklyn Nash", - "company": "Navivacs", - "phone": "872-508-3457", - "email": "brooklyn@navivacs.com" - }, - { - "id": 4270, - "guid": "288cc69f-e6e2-4f48-a6b7-2a24b89b7cc3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Cook", - "company": "Systheon", - "phone": "864-565-2829", - "email": "riley@systheon.com" - }, - { - "id": 4271, - "guid": "50c9fca7-c357-4780-b454-6f32eefabd98", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mya Young", - "company": "Teratopia", - "phone": "890-495-2523", - "email": "mya@teratopia.com" - }, - { - "id": 4272, - "guid": "e40a9677-388e-469e-8ede-9bff9f81adfe", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bella Oldridge", - "company": "Robotomic", - "phone": "856-587-3411", - "email": "bella@robotomic.com" - }, - { - "id": 4273, - "guid": "ba402da9-0223-48bb-b530-b1eb44948b74", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Goldman", - "company": "iMedconik", - "phone": "876-424-2266", - "email": "khloe@imedconik.com" - }, - { - "id": 4274, - "guid": "d2b9eff8-5e26-4aaa-805b-6224f5420c5b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Calhoun", - "company": "iSkyvaco", - "phone": "820-589-3461", - "email": "faith@iskyvaco.com" - }, - { - "id": 4275, - "guid": "bf71601a-b8b9-4a6f-9dfa-c61b6c718c3e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Freeman", - "company": "Proline", - "phone": "808-513-2918", - "email": "aaliyah@proline.com" - }, - { - "id": 4276, - "guid": "99b7d255-2293-4d7c-8892-2fb40e729149", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava Thorndike", - "company": "Venconix", - "phone": "894-464-3236", - "email": "ava@venconix.com" - }, - { - "id": 4277, - "guid": "a632f02c-9d5d-4154-9f63-11b39cabc7b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Wood", - "company": "Teraserv", - "phone": "877-515-3974", - "email": "gabrielle@teraserv.com" - }, - { - "id": 4278, - "guid": "cb49df6d-0392-45f8-b85b-d3cc7e711469", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Nathan", - "company": "RoboAerlogix", - "phone": "807-433-2716", - "email": "trinity@roboaerlogix.com" - }, - { - "id": 4279, - "guid": "c2ce5c2e-11dd-4eef-8c40-73ce20e69bd3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Gate", - "company": "Anaframe", - "phone": "869-481-2657", - "email": "samantha@anaframe.com" - }, - { - "id": 4280, - "guid": "2b670d54-f531-4f0c-9b0d-600e4e40890c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Abramson", - "company": "Jamconik", - "phone": "838-416-2715", - "email": "ashley@jamconik.com" - }, - { - "id": 4281, - "guid": "07c817d6-fb91-499e-9911-fbe9077a4ac5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella White", - "company": "Mescatron", - "phone": "849-479-3040", - "email": "isabella@mescatron.com" - }, - { - "id": 4282, - "guid": "95d0f5c0-6fa0-42ba-8744-a50fa6ea6f5a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sarah Hawkins", - "company": "Teknoplexon", - "phone": "801-573-2473", - "email": "sarah@teknoplexon.com" - }, - { - "id": 4283, - "guid": "a895ab7b-c0d7-487c-84ba-0d50bf9661e7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Daniels", - "company": "Indisco", - "phone": "831-533-2819", - "email": "evelyn@indisco.com" - }, - { - "id": 4284, - "guid": "419f9bd9-ca1d-4591-a861-5b6131e1bd72", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Miller", - "company": "Westtomik", - "phone": "893-509-3011", - "email": "gianna@westtomik.com" - }, - { - "id": 4285, - "guid": "40e06744-a136-4945-a92b-9d1336220df2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Timmons", - "company": "Cryptotemplate", - "phone": "853-531-3110", - "email": "angelina@cryptotemplate.com" - }, - { - "id": 4286, - "guid": "5f44aad7-1b3d-48be-8780-cd5d242884fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Creighton", - "company": "Quintegrity", - "phone": "897-506-2192", - "email": "melanie@quintegrity.com" - }, - { - "id": 4287, - "guid": "b84f3dc0-31b3-484f-b1c1-690b0f1e047f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Gilson", - "company": "Technogra", - "phone": "804-524-3910", - "email": "alyssa@technogra.com" - }, - { - "id": 4288, - "guid": "e1e208c0-fcc9-43e4-9168-111194d7e8de", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Carter", - "company": "Anaframe", - "phone": "856-519-2560", - "email": "alexis@anaframe.com" - }, - { - "id": 4289, - "guid": "3a76965c-2351-4a67-87e9-249682cfeaaf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Goodman", - "company": "Truetomic", - "phone": "867-599-3486", - "email": "bailey@truetomic.com" - }, - { - "id": 4290, - "guid": "73e92913-5646-442a-8093-f037fa52340f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine Freeman", - "company": "Openserve", - "phone": "860-414-2714", - "email": "jasmine@openserve.com" - }, - { - "id": 4291, - "guid": "df49ffde-c1c6-4a04-aabc-8531a825d3a3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sydney Cramer", - "company": "Robotemplate", - "phone": "828-462-3935", - "email": "sydney@robotemplate.com" - }, - { - "id": 4292, - "guid": "c3f52a25-b67b-4d47-83c8-a27b21297a91", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Walkman", - "company": "Generola", - "phone": "855-467-3370", - "email": "caroline@generola.com" - }, - { - "id": 4293, - "guid": "2fc16b41-61b0-4f6a-bb84-e99a9a75e058", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Mercer", - "company": "Systheon", - "phone": "825-440-3357", - "email": "sarah@systheon.com" - }, - { - "id": 4294, - "guid": "9dfd14c5-3ae2-47a9-9cb9-7a1dde671663", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Gilson", - "company": "InfoAirway", - "phone": "852-517-3907", - "email": "bella@infoairway.com" - }, - { - "id": 4295, - "guid": "c06ee2f2-be41-41bb-972d-180710ac1e13", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Abramson", - "company": "Anagraph", - "phone": "889-488-3607", - "email": "nevaeh@anagraph.com" - }, - { - "id": 4296, - "guid": "c8ee0574-25e8-4f89-992c-4ef78f2c7fa3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Hardman", - "company": "Jamrola", - "phone": "888-589-3482", - "email": "maya@jamrola.com" - }, - { - "id": 4297, - "guid": "bb9fcb2a-6d2f-4387-8633-1b0e19888036", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Vaughan", - "company": "Quintegrity", - "phone": "850-460-3403", - "email": "autumn@quintegrity.com" - }, - { - "id": 4298, - "guid": "2573ebc2-3baa-4fbc-ad6f-6a69d10c703d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Goodman", - "company": "Jamconik", - "phone": "859-486-3168", - "email": "katelyn@jamconik.com" - }, - { - "id": 4299, - "guid": "60ba2f65-aa4f-4a0a-ae1f-edbd18f18532", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Goldman", - "company": "Systheon", - "phone": "839-465-2205", - "email": "faith@systheon.com" - }, - { - "id": 4300, - "guid": "2ca6db28-6028-4d98-8c0d-f1bb533407ad", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Wayne", - "company": "Westmedia", - "phone": "815-503-3673", - "email": "allison@westmedia.com" - }, - { - "id": 4301, - "guid": "1328175b-3881-4f84-a47f-ae437d8cec01", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Bush", - "company": "Robocomm", - "phone": "810-479-3207", - "email": "faith@robocomm.com" - }, - { - "id": 4302, - "guid": "dcc5913f-388c-4b76-81f5-17147bc82ac7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Galbraith", - "company": "SysVenamerica", - "phone": "801-522-3546", - "email": "olivia@sysvenamerica.com" - }, - { - "id": 4303, - "guid": "b4b90280-450d-41b8-a27a-e19a1e433732", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Taylor Gilmore", - "company": "Titanigraf", - "phone": "833-528-2813", - "email": "taylor@titanigraf.com" - }, - { - "id": 4304, - "guid": "ece4cc48-94d6-47db-9f4e-176580e3f1ea", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Anna Morrison", - "company": "Keytheon", - "phone": "871-450-2340", - "email": "anna@keytheon.com" - }, - { - "id": 4305, - "guid": "ba565861-8670-4292-8b0d-ca0749c88c0b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Vance", - "company": "Navivacs", - "phone": "886-571-3951", - "email": "kimberly@navivacs.com" - }, - { - "id": 4306, - "guid": "b143ebca-7d71-439d-923a-24948de9782c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Hardman", - "company": "Polytheon", - "phone": "872-550-2359", - "email": "mackenzie@polytheon.com" - }, - { - "id": 4307, - "guid": "730708f6-37f9-41e0-aa0e-69c6eb31e555", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Timmons", - "company": "Navivacs", - "phone": "829-419-2925", - "email": "autumn@navivacs.com" - }, - { - "id": 4308, - "guid": "14b23ad2-303a-4974-a572-10a9d6e725fd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Cook", - "company": "Sontopia", - "phone": "851-454-2837", - "email": "madelyn@sontopia.com" - }, - { - "id": 4309, - "guid": "4b708f5d-78c2-4181-b31a-701d26475645", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Cramer", - "company": "Superscope", - "phone": "884-410-3060", - "email": "gianna@superscope.com" - }, - { - "id": 4310, - "guid": "62441bf8-4031-4a7c-ac3c-951bbfe701ec", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Creighton", - "company": "Unologic", - "phone": "885-429-2956", - "email": "bella@unologic.com" - }, - { - "id": 4311, - "guid": "f8cfe0eb-c0d9-4278-9f45-4c67ecd81b3f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Gilbert", - "company": "Keytheon", - "phone": "820-407-3885", - "email": "charlotte@keytheon.com" - }, - { - "id": 4312, - "guid": "e5852419-9a73-4c74-b2be-9758e1ab251c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Youmans", - "company": "Ameritron", - "phone": "857-424-3833", - "email": "maya@ameritron.com" - }, - { - "id": 4313, - "guid": "883e2a19-b4a9-405d-b9b6-0e09ec4967ca", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Watson", - "company": "Syssoft", - "phone": "883-424-3424", - "email": "lillian@syssoft.com" - }, - { - "id": 4314, - "guid": "a244a9a1-8fb4-40ed-a70b-1e508ee79146", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Vaughan", - "company": "Westtomik", - "phone": "812-539-2677", - "email": "elizabeth@westtomik.com" - }, - { - "id": 4315, - "guid": "922f861d-2eee-44d1-a073-6f86b734091c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Galbraith", - "company": "Westtomik", - "phone": "878-410-2686", - "email": "melanie@westtomik.com" - }, - { - "id": 4316, - "guid": "0da5002f-bf2c-4e9e-86dd-0c5d187252ae", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Sheldon", - "company": "Raylog", - "phone": "869-510-3612", - "email": "anna@raylog.com" - }, - { - "id": 4317, - "guid": "c82de87c-35f6-4ae6-8930-84086bcf8837", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Thorndike", - "company": "Teratopia", - "phone": "843-466-2823", - "email": "brooke@teratopia.com" - }, - { - "id": 4318, - "guid": "c9d1cf17-4340-4e31-aa6b-d92910c9d85a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Abramson", - "company": "Robotomic", - "phone": "847-576-2774", - "email": "ella@robotomic.com" - }, - { - "id": 4319, - "guid": "fb37308f-25f0-4858-a530-3a23fefe58f6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Murphy", - "company": "Airdyne", - "phone": "815-492-3394", - "email": "bailey@airdyne.com" - }, - { - "id": 4320, - "guid": "1f70e22b-6367-4904-b12e-d3563ba48d1b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Brooks", - "company": "Skydata", - "phone": "838-451-3627", - "email": "victoria@skydata.com" - }, - { - "id": 4321, - "guid": "90aecd5b-fe39-4065-a228-fabd38665bc1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Creighton", - "company": "Titanigraf", - "phone": "807-487-2675", - "email": "maria@titanigraf.com" - }, - { - "id": 4322, - "guid": "09981d62-2dcf-4661-8886-859c072f8fe1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Gilson", - "company": "Dynarama", - "phone": "893-491-3425", - "email": "lily@dynarama.com" - }, - { - "id": 4323, - "guid": "1f5c3181-7fce-424b-8d4a-f6368bef68d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Nathan", - "company": "SysUSA", - "phone": "883-537-2507", - "email": "taylor@sysusa.com" - }, - { - "id": 4324, - "guid": "62820dcc-d822-4127-9206-950d0798fcc5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Thorndike", - "company": "Mescaridic", - "phone": "838-503-3731", - "email": "ava@mescaridic.com" - }, - { - "id": 4325, - "guid": "57506984-cde0-4e3a-9b28-5288ec1d65b4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Thorndike", - "company": "Transtouch", - "phone": "897-440-2059", - "email": "aubrey@transtouch.com" - }, - { - "id": 4326, - "guid": "90fb46ee-e98d-4dee-a06a-d6c0cc6ff782", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ava Miln", - "company": "Mescatron", - "phone": "825-507-2527", - "email": "ava@mescatron.com" - }, - { - "id": 4327, - "guid": "06b0ff5c-6c8b-445c-ba73-19fef8d50ab5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kylie Davidson", - "company": "iQualcar", - "phone": "830-491-3583", - "email": "kylie@iqualcar.com" - }, - { - "id": 4328, - "guid": "97d3ae7e-0529-434a-a16e-5c209c9aa9f8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Freeman", - "company": "SysUSA", - "phone": "801-404-3955", - "email": "payton@sysusa.com" - }, - { - "id": 4329, - "guid": "12057d1b-eceb-4bcc-a290-bf0c2a819b79", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Daniels", - "company": "Idmax", - "phone": "828-533-2568", - "email": "angelina@idmax.com" - }, - { - "id": 4330, - "guid": "ba9bd67e-4ddd-438e-901c-42d9d4252a19", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Otis", - "company": "Raylog", - "phone": "812-507-3731", - "email": "anna@raylog.com" - }, - { - "id": 4331, - "guid": "335526ea-1ab1-4376-86bf-6c97859a1739", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Croftoon", - "company": "Aluco", - "phone": "856-506-3188", - "email": "makayla@aluco.com" - }, - { - "id": 4332, - "guid": "b7a27152-543f-4520-8947-37346c2ed4f0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexandra Youmans", - "company": "Westtomik", - "phone": "886-598-3915", - "email": "alexandra@westtomik.com" - }, - { - "id": 4333, - "guid": "2d6576ae-06f1-46b3-9622-da2d42aa2bfe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Cramer", - "company": "Systheon", - "phone": "857-522-3430", - "email": "zoey@systheon.com" - }, - { - "id": 4334, - "guid": "4d2bb0b2-6400-41c9-a46b-47b2314c86e6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Wayne", - "company": "iSkyvaco", - "phone": "861-551-2627", - "email": "maria@iskyvaco.com" - }, - { - "id": 4335, - "guid": "1b1d8633-9958-41ee-94a2-16c30ce689e6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Bush", - "company": "Anagraph", - "phone": "872-423-2229", - "email": "zoe@anagraph.com" - }, - { - "id": 4336, - "guid": "3493f2f0-282d-4d0d-8e23-cde849da235e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Abramson", - "company": "Conotomics", - "phone": "865-598-3787", - "email": "aaliyah@conotomics.com" - }, - { - "id": 4337, - "guid": "a8ae4fb8-7eca-4517-aaa6-410cb68b4294", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Wood", - "company": "Nanobanc", - "phone": "807-503-2919", - "email": "molly@nanobanc.com" - }, - { - "id": 4338, - "guid": "e0c565f3-d93e-472a-91d9-47139367290a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Peyton Turner", - "company": "Truegate", - "phone": "836-419-3345", - "email": "peyton@truegate.com" - }, - { - "id": 4339, - "guid": "e672e8f1-8832-4647-9bfd-675d034a3c26", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Wood", - "company": "Navivacs", - "phone": "842-501-3791", - "email": "chloe@navivacs.com" - }, - { - "id": 4340, - "guid": "7885b4d3-49aa-4d20-8ad3-4e23ef9e7553", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Fulton", - "company": "Techtron", - "phone": "856-535-2513", - "email": "destiny@techtron.com" - }, - { - "id": 4341, - "guid": "2b6b445f-be32-493b-a7c7-26ad3aaab633", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Owen", - "company": "Allnet", - "phone": "861-489-3221", - "email": "isabelle@allnet.com" - }, - { - "id": 4342, - "guid": "c6084f09-6161-4b13-8206-e7270894cd31", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Carrington", - "company": "Polytheon", - "phone": "867-571-3729", - "email": "faith@polytheon.com" - }, - { - "id": 4343, - "guid": "856373e0-cf8d-4cf4-961d-8f7423028bbf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooke Galbraith", - "company": "Anagraph", - "phone": "856-479-2342", - "email": "brooke@anagraph.com" - }, - { - "id": 4344, - "guid": "0bf950c7-cd60-42b2-b505-11be634a7584", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sofia Wesley", - "company": "Qualserve", - "phone": "860-415-2825", - "email": "sofia@qualserve.com" - }, - { - "id": 4345, - "guid": "e37b04a5-b927-4fae-a8ef-cb76f58d533f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Sherlock", - "company": "Enlogia", - "phone": "892-475-3439", - "email": "claire@enlogia.com" - }, - { - "id": 4346, - "guid": "a3950a47-1ef9-4ba7-8ad3-3c2ca77af63a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Goldman", - "company": "Cryptotegrity", - "phone": "840-424-2627", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 4347, - "guid": "fb204352-4c8c-4de6-95fe-26dc57a08895", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jessica Freeman", - "company": "Qualserve", - "phone": "890-414-2823", - "email": "jessica@qualserve.com" - }, - { - "id": 4348, - "guid": "44954272-7815-4778-bb2d-aa8c479ba85d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Mercer", - "company": "Technogra", - "phone": "842-482-2215", - "email": "mackenzie@technogra.com" - }, - { - "id": 4349, - "guid": "343bd6a8-093f-4b13-8b99-9decb09fddc1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Wood", - "company": "Fibroserve", - "phone": "858-424-2070", - "email": "gabriella@fibroserve.com" - }, - { - "id": 4350, - "guid": "d759acb7-2054-486a-8dfe-69a5256132f4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Owen", - "company": "Airdyne", - "phone": "820-467-2396", - "email": "layla@airdyne.com" - }, - { - "id": 4351, - "guid": "29b8eb73-70eb-42aa-b130-67f68dad69c4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Ward", - "company": "Interliant", - "phone": "850-555-3592", - "email": "alexa@interliant.com" - }, - { - "id": 4352, - "guid": "916d7ef4-6159-49d5-956f-c3357e23547f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Gate", - "company": "US Infratouch", - "phone": "867-474-3540", - "email": "kaitlyn@us infratouch.com" - }, - { - "id": 4353, - "guid": "1ca3fd71-d8ae-436b-8b69-3bc0844ab586", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Hoggarth", - "company": "Truegate", - "phone": "894-476-3432", - "email": "brooklyn@truegate.com" - }, - { - "id": 4354, - "guid": "59e110ef-9985-4226-926f-e679693396f2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Gardner", - "company": "Titanirola", - "phone": "810-489-3194", - "email": "bella@titanirola.com" - }, - { - "id": 4355, - "guid": "862428d7-3204-4fd7-be43-5afb15ce7366", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madeline Chapman", - "company": "Nanobanc", - "phone": "805-431-2397", - "email": "madeline@nanobanc.com" - }, - { - "id": 4356, - "guid": "01f8da99-e84f-4bf8-81e5-9c4a1c4560a3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Murphy", - "company": "Westmedia", - "phone": "883-423-3267", - "email": "samantha@westmedia.com" - }, - { - "id": 4357, - "guid": "7e68169c-7e2e-4558-969e-1538b645a041", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Carter", - "company": "Cryptotemplate", - "phone": "869-578-2147", - "email": "camila@cryptotemplate.com" - }, - { - "id": 4358, - "guid": "76d0ee1c-f84f-4769-9c78-a61230c17f0d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Gill", - "company": "Pericenta", - "phone": "813-591-2641", - "email": "angelina@pericenta.com" - }, - { - "id": 4359, - "guid": "63274f98-c2cc-4371-a50e-2d1c45362d46", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Miller", - "company": "Infraique", - "phone": "861-581-2613", - "email": "claire@infraique.com" - }, - { - "id": 4360, - "guid": "90f2e321-2a68-4f3f-9d12-b100ffafc218", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Hodges", - "company": "Westmedia", - "phone": "803-431-3550", - "email": "camila@westmedia.com" - }, - { - "id": 4361, - "guid": "04b7c092-3062-4291-9c6a-3902280c5ac7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Milton", - "company": "Thermotomic", - "phone": "855-455-2325", - "email": "hannah@thermotomic.com" - }, - { - "id": 4362, - "guid": "628c393d-8be3-4df3-b200-b91dacee4b1a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Nash", - "company": "Fibrotouch", - "phone": "868-533-2200", - "email": "autumn@fibrotouch.com" - }, - { - "id": 4363, - "guid": "5ca77312-e6d3-4431-9c17-4f8a1eacd3bf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Webster", - "company": "Cryptotegrity", - "phone": "845-462-3044", - "email": "lillian@cryptotegrity.com" - }, - { - "id": 4364, - "guid": "b59930a1-dd0b-4155-8cb1-b4b5fcde6c39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emily Freeman", - "company": "iOptystix", - "phone": "834-451-3130", - "email": "emily@ioptystix.com" - }, - { - "id": 4365, - "guid": "3a57fc80-06c1-4842-a14c-97d392517e95", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Haig", - "company": "Safetrust", - "phone": "891-599-2022", - "email": "alyssa@safetrust.com" - }, - { - "id": 4366, - "guid": "080bd1f4-ed59-4938-9ede-466043221caa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Gilbert", - "company": "US Infratouch", - "phone": "850-403-2631", - "email": "zoey@us infratouch.com" - }, - { - "id": 4367, - "guid": "d794861a-f89d-4e51-a4b3-3fa2ec2245b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Hodges", - "company": "eEyetanic", - "phone": "845-427-3744", - "email": "emma@eeyetanic.com" - }, - { - "id": 4368, - "guid": "291afe2f-22fc-4b2f-8a9a-bb9e046a94ad", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Hawkins", - "company": "RoboAerlogix", - "phone": "898-483-2542", - "email": "layla@roboaerlogix.com" - }, - { - "id": 4369, - "guid": "b970777e-a354-4046-9474-c948108b8c47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Ogden", - "company": "Titanirola", - "phone": "834-419-2416", - "email": "chloe@titanirola.com" - }, - { - "id": 4370, - "guid": "f5c494c0-232e-4cfc-ae65-18ed271a2bd1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Natalie Wesley", - "company": "Skydata", - "phone": "870-568-2053", - "email": "natalie@skydata.com" - }, - { - "id": 4371, - "guid": "49701a63-f6a2-47f0-afbd-1d40d5fc1b00", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Wayne", - "company": "US Omnigraphik", - "phone": "889-519-3177", - "email": "lily@us omnigraphik.com" - }, - { - "id": 4372, - "guid": "6c8885e8-3adb-4878-b2ef-c69952de176e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Leah Wallace", - "company": "Conrama", - "phone": "889-484-3392", - "email": "leah@conrama.com" - }, - { - "id": 4373, - "guid": "cf2f64d4-ad8a-4e2c-b26c-2fc3de6701c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Michaelson", - "company": "Pacwest", - "phone": "811-535-2984", - "email": "isabella@pacwest.com" - }, - { - "id": 4374, - "guid": "ce99a718-a17d-4317-9f18-0185a89713a0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Thomson", - "company": "Safetrust", - "phone": "871-529-3976", - "email": "abigail@safetrust.com" - }, - { - "id": 4375, - "guid": "4f56fd72-5a92-4f4d-b3c0-294526bd0f59", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Cook", - "company": "Teraserv", - "phone": "833-511-2215", - "email": "sophie@teraserv.com" - }, - { - "id": 4376, - "guid": "61b29b36-e6a2-4a11-8fe9-bae3e11b4766", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Waller", - "company": "Conotomics", - "phone": "888-580-2300", - "email": "ella@conotomics.com" - }, - { - "id": 4377, - "guid": "fe6439ff-2ac3-4338-83b0-5b07e438510d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Sherlock", - "company": "Skydata", - "phone": "853-459-3348", - "email": "isabelle@skydata.com" - }, - { - "id": 4378, - "guid": "60decdcf-19b9-45f8-89f4-6344b7db9815", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Daniels", - "company": "Generola", - "phone": "882-529-3644", - "email": "charlotte@generola.com" - }, - { - "id": 4379, - "guid": "b0665f0f-b65a-4b58-8f96-2d8919590429", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Gustman", - "company": "iEnland", - "phone": "832-431-3671", - "email": "mia@ienland.com" - }, - { - "id": 4380, - "guid": "88b73bc5-3075-43e7-aeb8-1d989160dbe0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Turner", - "company": "Navivacs", - "phone": "860-441-2604", - "email": "bella@navivacs.com" - }, - { - "id": 4381, - "guid": "63ef9454-6d1f-4efb-9bc7-411dcafd66e7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Cook", - "company": "Ventanium", - "phone": "858-458-3072", - "email": "avery@ventanium.com" - }, - { - "id": 4382, - "guid": "6a629264-6a73-46ae-8764-630e5d4c84cd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Turner", - "company": "Steganoconiche", - "phone": "866-571-3024", - "email": "maya@steganoconiche.com" - }, - { - "id": 4383, - "guid": "5a1cfdcb-1b55-4a24-93a3-c998bfa0c80c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Waller", - "company": "Pericenta", - "phone": "802-494-3128", - "email": "kayla@pericenta.com" - }, - { - "id": 4384, - "guid": "528ac214-f10f-4cee-a3c2-f2fba7543bca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Gerald", - "company": "Polytheon", - "phone": "802-490-2322", - "email": "layla@polytheon.com" - }, - { - "id": 4385, - "guid": "3acaa4eb-69a4-47e3-8dee-b40c2cc68a8a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Chesterton", - "company": "Aluco", - "phone": "806-596-3053", - "email": "valeria@aluco.com" - }, - { - "id": 4386, - "guid": "14197765-cf50-4568-bc36-95f434d1e488", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Gill", - "company": "Robotomic", - "phone": "828-476-2338", - "email": "jessica@robotomic.com" - }, - { - "id": 4387, - "guid": "1353f73e-8270-4ac3-b20e-6e1ea8525f5e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Michaelson", - "company": "US Omnigraphik", - "phone": "882-401-2071", - "email": "molly@us omnigraphik.com" - }, - { - "id": 4388, - "guid": "cc910548-f8fc-4a49-b10a-06faa316a085", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Carey", - "company": "Netseco", - "phone": "835-480-2498", - "email": "maya@netseco.com" - }, - { - "id": 4389, - "guid": "b874ffef-3f67-413b-b780-03898a11f31d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Calhoun", - "company": "Openserve", - "phone": "849-595-2335", - "email": "riley@openserve.com" - }, - { - "id": 4390, - "guid": "d856b43d-4457-43a9-bd7e-c5fbecae5ef6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Haig", - "company": "Robocomm", - "phone": "872-405-2075", - "email": "katherine@robocomm.com" - }, - { - "id": 4391, - "guid": "be942f81-0135-4bb2-b653-2e71c7bea946", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Bush", - "company": "Westmedia", - "phone": "859-594-2073", - "email": "faith@westmedia.com" - }, - { - "id": 4392, - "guid": "e77ad8c0-91d2-433d-8fc3-51ee177b6e48", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sofia Charlson", - "company": "Safeagra", - "phone": "881-552-2134", - "email": "sofia@safeagra.com" - }, - { - "id": 4393, - "guid": "05855d4b-ad76-4f53-bba9-d51b3569afa0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Gibbs", - "company": "Proline", - "phone": "884-507-2378", - "email": "destiny@proline.com" - }, - { - "id": 4394, - "guid": "415ff04a-ea44-49f4-b1ab-bf9b0adba7f9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Goodman", - "company": "Proline", - "phone": "885-449-2901", - "email": "alexis@proline.com" - }, - { - "id": 4395, - "guid": "b8898c9e-ecab-40ea-a020-b3ed93ea8377", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Haig", - "company": "US Infratouch", - "phone": "890-403-3555", - "email": "kayla@us infratouch.com" - }, - { - "id": 4396, - "guid": "289e790c-8035-465c-9b1e-45b862615348", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Charlson", - "company": "Enlogia", - "phone": "853-401-3127", - "email": "destiny@enlogia.com" - }, - { - "id": 4397, - "guid": "51d866b9-83a2-48d1-be91-78d839782bd1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Cook", - "company": "Dynarama", - "phone": "848-510-2280", - "email": "vanessa@dynarama.com" - }, - { - "id": 4398, - "guid": "c49e044a-1e0e-49a3-85ee-231d2a1c375b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Gill", - "company": "Westmedia", - "phone": "884-400-3791", - "email": "lillian@westmedia.com" - }, - { - "id": 4399, - "guid": "66e0f196-0eea-4c93-b90e-85b7141268e1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Hodges", - "company": "Airdyne", - "phone": "877-586-2381", - "email": "julia@airdyne.com" - }, - { - "id": 4400, - "guid": "5db18039-6e86-4bcf-bc46-d1359b11bf74", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Miln", - "company": "Fibrotouch", - "phone": "823-503-3036", - "email": "molly@fibrotouch.com" - }, - { - "id": 4401, - "guid": "c61658d2-20d8-431d-873a-1821236e2ac5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Cook", - "company": "iOptystix", - "phone": "844-418-2257", - "email": "melanie@ioptystix.com" - }, - { - "id": 4402, - "guid": "13409189-600e-4ae3-a4ee-1696de94c9ed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Freeman", - "company": "iOptystix", - "phone": "812-529-2356", - "email": "valeria@ioptystix.com" - }, - { - "id": 4403, - "guid": "99d41cbc-f654-4dff-b021-8e153705a8f8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Higgins", - "company": "Superscope", - "phone": "877-595-2666", - "email": "sofia@superscope.com" - }, - { - "id": 4404, - "guid": "d53eed9d-3798-46f4-b35d-e5db624d02c3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Youmans", - "company": "Jamrola", - "phone": "855-451-2786", - "email": "brianna@jamrola.com" - }, - { - "id": 4405, - "guid": "ae235198-f080-4aa2-a066-96c46274ef43", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Abramson", - "company": "Titanirola", - "phone": "893-527-2036", - "email": "mia@titanirola.com" - }, - { - "id": 4406, - "guid": "27f04ee5-20e0-4cb0-b445-ae9e6e1297eb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Leah Chapman", - "company": "Quintegrity", - "phone": "844-593-2787", - "email": "leah@quintegrity.com" - }, - { - "id": 4407, - "guid": "a3ab5562-9475-4f7f-918a-4b9d564935fc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis White", - "company": "Interliant", - "phone": "842-473-2960", - "email": "alexis@interliant.com" - }, - { - "id": 4408, - "guid": "62066d45-a892-459d-a0c5-a2eaef2518be", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Davidson", - "company": "iEnland", - "phone": "833-533-3295", - "email": "serenity@ienland.com" - }, - { - "id": 4409, - "guid": "230a333c-9159-4ecb-bec4-1a93ff65720d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Ogden", - "company": "Transtouch", - "phone": "846-594-3648", - "email": "kylie@transtouch.com" - }, - { - "id": 4410, - "guid": "6587d7cb-78cf-4126-ac29-883c0abf7ca0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Abigail Croftoon", - "company": "Orthomedia", - "phone": "849-539-2901", - "email": "abigail@orthomedia.com" - }, - { - "id": 4411, - "guid": "9f3217d9-a194-48dc-bbd6-c352735f168b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Walkman", - "company": "Navivacs", - "phone": "818-595-3446", - "email": "rachel@navivacs.com" - }, - { - "id": 4412, - "guid": "97cfcda8-73a8-40d7-9505-c99a9314c54c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lillian Chandter", - "company": "Hypervaco", - "phone": "891-583-2386", - "email": "lillian@hypervaco.com" - }, - { - "id": 4413, - "guid": "a7aa5dfd-639a-49a1-b678-c1ad75bbc8eb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Nash", - "company": "Aluco", - "phone": "827-465-2530", - "email": "addison@aluco.com" - }, - { - "id": 4414, - "guid": "9a60846a-bd5d-4713-9c91-38deaf496bc2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie Hawkins", - "company": "Tekcar", - "phone": "826-484-2114", - "email": "natalie@tekcar.com" - }, - { - "id": 4415, - "guid": "186e0473-cec4-4481-a325-378170a64fb7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Hardman", - "company": "Teknoplexon", - "phone": "833-450-2165", - "email": "emma@teknoplexon.com" - }, - { - "id": 4416, - "guid": "3251449c-dd37-4b0a-b1ba-0b3d1a1529eb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Neal", - "company": "Westmedia", - "phone": "814-534-3291", - "email": "madison@westmedia.com" - }, - { - "id": 4417, - "guid": "1bb45acb-20d7-411c-8c82-787f4c3e154e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Thorndike", - "company": "Transtouch", - "phone": "884-489-2795", - "email": "katelyn@transtouch.com" - }, - { - "id": 4418, - "guid": "8ef71e12-c0f3-429f-840d-a5297248b90d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Oldridge", - "company": "Ameritron", - "phone": "829-586-3526", - "email": "victoria@ameritron.com" - }, - { - "id": 4419, - "guid": "b518ff24-209b-43f2-b51f-48becc769e65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Vance", - "company": "Rapigrafix", - "phone": "830-516-3037", - "email": "abigail@rapigrafix.com" - }, - { - "id": 4420, - "guid": "789a447b-5a74-4264-be27-9c34a877038f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Gilson", - "company": "eSteganoergy", - "phone": "844-552-2086", - "email": "anna@esteganoergy.com" - }, - { - "id": 4421, - "guid": "2b80395a-ed8f-41eb-9379-fdcf029f1797", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Winter", - "company": "OpKeycomm", - "phone": "840-595-3199", - "email": "jessica@opkeycomm.com" - }, - { - "id": 4422, - "guid": "828bca38-1e36-4373-aa1d-96959e702589", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Osborne", - "company": "Westtomik", - "phone": "879-525-3567", - "email": "hannah@westtomik.com" - }, - { - "id": 4423, - "guid": "fe2bcb61-76ed-4b40-8616-1250848457c1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Freeman", - "company": "iSkyvaco", - "phone": "849-498-2983", - "email": "jessica@iskyvaco.com" - }, - { - "id": 4424, - "guid": "c150ce7e-f63e-4ef2-b73c-e5afd54a6e04", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexandra Nash", - "company": "OpKeycomm", - "phone": "891-513-2314", - "email": "alexandra@opkeycomm.com" - }, - { - "id": 4425, - "guid": "481731f9-d171-4559-b563-2163b45f6284", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Davidson", - "company": "US Infratouch", - "phone": "807-520-3533", - "email": "aaliyah@us infratouch.com" - }, - { - "id": 4426, - "guid": "d98cd435-6324-4eb1-9919-044b1badd3d5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Hardman", - "company": "Orthosoft", - "phone": "888-509-3701", - "email": "vanessa@orthosoft.com" - }, - { - "id": 4427, - "guid": "27f6aad0-3368-43fa-8e41-1dcf1fd24264", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brianna Charlson", - "company": "Raylog", - "phone": "819-417-3358", - "email": "brianna@raylog.com" - }, - { - "id": 4428, - "guid": "6f906585-cb2a-4bf9-9b54-d3c7398ca676", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Hancock", - "company": "Anaframe", - "phone": "856-421-2951", - "email": "andrea@anaframe.com" - }, - { - "id": 4429, - "guid": "b067364d-a8a0-4964-a724-af2e5309e87b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Brickman", - "company": "Conrama", - "phone": "853-407-2339", - "email": "victoria@conrama.com" - }, - { - "id": 4430, - "guid": "4a500aee-b694-4ef8-a4b3-93ec69e365cf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Nathan", - "company": "Xeicon", - "phone": "850-547-3458", - "email": "grace@xeicon.com" - }, - { - "id": 4431, - "guid": "4b2e91dc-556d-4bf4-8267-d862ca5eb0ca", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Conors", - "company": "Safetrust", - "phone": "892-441-2887", - "email": "gianna@safetrust.com" - }, - { - "id": 4432, - "guid": "e68ea3dc-67cb-41e7-a3e7-af58b92c9f42", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Cramer", - "company": "Vencom", - "phone": "850-472-3558", - "email": "gianna@vencom.com" - }, - { - "id": 4433, - "guid": "ed50b73d-4e60-4230-b32c-084f81f20f89", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Wallace", - "company": "Sontopia", - "phone": "886-518-2828", - "email": "maria@sontopia.com" - }, - { - "id": 4434, - "guid": "fb9c6ae7-22a8-4ec3-807d-9c632e8addd1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Wainwright", - "company": "Polytheon", - "phone": "896-411-2685", - "email": "hailey@polytheon.com" - }, - { - "id": 4435, - "guid": "2af39da5-dbfd-4852-8fcc-ac8225f2615e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Wayne", - "company": "Proline", - "phone": "849-593-2324", - "email": "evelyn@proline.com" - }, - { - "id": 4436, - "guid": "00afd9d2-34ee-4ca3-9233-9483dbc56120", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ariana Otis", - "company": "Anaframe", - "phone": "805-470-3437", - "email": "ariana@anaframe.com" - }, - { - "id": 4437, - "guid": "4c1ea6a7-2ce1-4d91-9f7c-98f21f7c14e6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooke Gill", - "company": "Polytheon", - "phone": "825-536-2208", - "email": "brooke@polytheon.com" - }, - { - "id": 4438, - "guid": "081257d3-1866-4304-8b8a-626e6cd9fe37", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Crossman", - "company": "Teratopia", - "phone": "835-441-2492", - "email": "melanie@teratopia.com" - }, - { - "id": 4439, - "guid": "e8022e99-2f67-4fe6-961f-0e4bba7ddc3a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria White", - "company": "iEnland", - "phone": "851-580-3201", - "email": "victoria@ienland.com" - }, - { - "id": 4440, - "guid": "6821c7f7-a9fb-4617-b30f-31ebd7e24358", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madeline Goodman", - "company": "US Infratouch", - "phone": "826-576-3997", - "email": "madeline@us infratouch.com" - }, - { - "id": 4441, - "guid": "b26dfbf9-548d-4c82-b5ae-835a9495bf6b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Thorndike", - "company": "Transtouch", - "phone": "811-548-3066", - "email": "emma@transtouch.com" - }, - { - "id": 4442, - "guid": "5a39854b-3a88-4c0a-8383-a5585e244d19", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Gilmore", - "company": "Mescatron", - "phone": "860-503-3646", - "email": "arianna@mescatron.com" - }, - { - "id": 4443, - "guid": "c6839191-44b0-41b5-b1ea-f006513ff4a0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aaliyah Goldman", - "company": "Westmedia", - "phone": "870-514-2948", - "email": "aaliyah@westmedia.com" - }, - { - "id": 4444, - "guid": "477b65a7-251a-4a16-86eb-3509c300c2f4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Makayla Morrison", - "company": "Robotemplate", - "phone": "861-449-2388", - "email": "makayla@robotemplate.com" - }, - { - "id": 4445, - "guid": "8b54c86b-c118-442e-b361-7812389c46d0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea White", - "company": "eSteganoergy", - "phone": "834-528-3398", - "email": "andrea@esteganoergy.com" - }, - { - "id": 4446, - "guid": "dec4486e-c1a8-4e3d-baac-31571d9c23c4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sarah Creighton", - "company": "Skydata", - "phone": "807-482-3196", - "email": "sarah@skydata.com" - }, - { - "id": 4447, - "guid": "6d5754a7-6028-4cbb-8271-6bf0479b5e7a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Crossman", - "company": "iEnland", - "phone": "891-457-2442", - "email": "charlotte@ienland.com" - }, - { - "id": 4448, - "guid": "f3eed885-797c-4de3-ab89-2f12c0842071", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Brooks", - "company": "Inridium", - "phone": "846-427-2988", - "email": "vanessa@inridium.com" - }, - { - "id": 4449, - "guid": "28a87680-5290-4b7f-8514-aab915a57f22", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Natalie Cramer", - "company": "Enlogia", - "phone": "857-521-3492", - "email": "natalie@enlogia.com" - }, - { - "id": 4450, - "guid": "0373e0ac-c71a-4d9e-a2a6-b9071f34a23c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Brooks", - "company": "Steganoconiche", - "phone": "810-404-2287", - "email": "kylie@steganoconiche.com" - }, - { - "id": 4451, - "guid": "df84e758-7bca-4e2f-bb52-bcd8059e47be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Chapman", - "company": "Transtouch", - "phone": "823-460-3817", - "email": "melanie@transtouch.com" - }, - { - "id": 4452, - "guid": "2f22eb19-1cb7-4588-8bda-475456da313a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava WifKinson", - "company": "eSteganoergy", - "phone": "885-519-2508", - "email": "ava@esteganoergy.com" - }, - { - "id": 4453, - "guid": "9ad3b8f6-5d71-4f35-8fae-7e77c13f5756", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Campbell", - "company": "iOptystix", - "phone": "883-476-2258", - "email": "caroline@ioptystix.com" - }, - { - "id": 4454, - "guid": "e2471f3c-23fc-48db-845f-5222416cd8d1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Fisher", - "company": "Unologic", - "phone": "859-585-3577", - "email": "kimberly@unologic.com" - }, - { - "id": 4455, - "guid": "414cc7c2-6391-487b-9f62-c07c8a5b796c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Brooks", - "company": "Generola", - "phone": "826-431-3527", - "email": "rachel@generola.com" - }, - { - "id": 4456, - "guid": "2489471a-c22a-42d1-a32d-e679274740a7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Conors", - "company": "Proline", - "phone": "874-508-2504", - "email": "ella@proline.com" - }, - { - "id": 4457, - "guid": "6fd1998a-3b2f-4f5b-b010-13ccaf3008a5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Wayne", - "company": "Mescatron", - "phone": "844-401-2313", - "email": "destiny@mescatron.com" - }, - { - "id": 4458, - "guid": "34a7e86a-2c79-4031-a648-5cd3fa3e9c88", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Owen", - "company": "Titanirola", - "phone": "859-501-3113", - "email": "trinity@titanirola.com" - }, - { - "id": 4459, - "guid": "629050bd-1a0e-4b1e-906a-ddb847fe1149", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Freeman", - "company": "Genland", - "phone": "833-564-2600", - "email": "gabrielle@genland.com" - }, - { - "id": 4460, - "guid": "a2186950-e517-42b7-a6bb-293bff8456d4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Carey", - "company": "Gigaura", - "phone": "834-531-2677", - "email": "layla@gigaura.com" - }, - { - "id": 4461, - "guid": "65d87b5b-4d6d-44da-92d5-4ec356977c10", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Harrison", - "company": "Jamrola", - "phone": "887-450-2318", - "email": "madelyn@jamrola.com" - }, - { - "id": 4462, - "guid": "a0cb907e-ff1b-420e-ac6d-2b94aa067a4e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie Goldman", - "company": "Skydata", - "phone": "820-403-3648", - "email": "natalie@skydata.com" - }, - { - "id": 4463, - "guid": "67dfc3d9-2681-4b9f-88ab-ed77820963a8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Gilmore", - "company": "Nanobanc", - "phone": "888-570-2327", - "email": "savannah@nanobanc.com" - }, - { - "id": 4464, - "guid": "4abdc81b-041a-40e3-a61b-2a30190321be", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Campbell", - "company": "Nanobanc", - "phone": "884-402-3203", - "email": "zoe@nanobanc.com" - }, - { - "id": 4465, - "guid": "d749ecd5-4ad2-4c2c-bf6b-124cac8e829c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Milton", - "company": "Steganoconiche", - "phone": "836-478-3687", - "email": "camila@steganoconiche.com" - }, - { - "id": 4466, - "guid": "5060e66f-c0e5-4622-a5f3-89f5e6efebf0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Gilbert", - "company": "Teknoplexon", - "phone": "848-491-2979", - "email": "grace@teknoplexon.com" - }, - { - "id": 4467, - "guid": "89b97feb-b058-4137-a1c5-3f528da2da7a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Hancock", - "company": "Genland", - "phone": "867-410-3389", - "email": "elizabeth@genland.com" - }, - { - "id": 4468, - "guid": "d05dd078-57da-4005-aa0a-fb5dba71500e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Miller", - "company": "Xeicon", - "phone": "807-597-2168", - "email": "leah@xeicon.com" - }, - { - "id": 4469, - "guid": "2e16476f-bf7f-43dd-9cac-5c0d652f5934", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Conors", - "company": "InfoAirway", - "phone": "877-511-2068", - "email": "sofia@infoairway.com" - }, - { - "id": 4470, - "guid": "580d86b0-f56c-4b27-9f6a-017ecc651c78", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Hoggarth", - "company": "eSteganoergy", - "phone": "875-498-3635", - "email": "ariana@esteganoergy.com" - }, - { - "id": 4471, - "guid": "c3bf8da7-d7ed-4016-bbb3-5f1c2ac2d602", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Brooks", - "company": "Gigaura", - "phone": "879-467-3401", - "email": "olivia@gigaura.com" - }, - { - "id": 4472, - "guid": "5c8b976b-d010-4733-84d2-c930e256927d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Miers", - "company": "Allphysiche", - "phone": "895-534-2500", - "email": "zoe@allphysiche.com" - }, - { - "id": 4473, - "guid": "3c9a8b5d-cb78-44a7-a74d-7e0a679e50b3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mackenzie Oldridge", - "company": "Allphysiche", - "phone": "846-515-3299", - "email": "mackenzie@allphysiche.com" - }, - { - "id": 4474, - "guid": "8f75df90-7f4a-4842-8e37-dd39df6569bb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Molly Daniels", - "company": "Pericenta", - "phone": "814-569-3431", - "email": "molly@pericenta.com" - }, - { - "id": 4475, - "guid": "70f2491b-1de5-4c54-a922-c9a56c5da838", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bella Gerald", - "company": "Unologic", - "phone": "868-600-2501", - "email": "bella@unologic.com" - }, - { - "id": 4476, - "guid": "4bf1a4c7-be64-4fed-8843-82aeca22c32d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Gilmore", - "company": "Turbomart", - "phone": "886-581-2920", - "email": "kaitlyn@turbomart.com" - }, - { - "id": 4477, - "guid": "705ddc0d-9ccf-48a3-9e45-47e58db07870", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Goodman", - "company": "Rapigrafix", - "phone": "806-509-3594", - "email": "hailey@rapigrafix.com" - }, - { - "id": 4478, - "guid": "8a9ef410-3bb3-4290-8912-179764cd68b1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Clapton", - "company": "Celgra", - "phone": "843-405-2947", - "email": "grace@celgra.com" - }, - { - "id": 4479, - "guid": "a0aeb80d-314a-416f-bfda-0b6e53ae4f33", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Rachel Charlson", - "company": "Robotomic", - "phone": "866-451-3066", - "email": "rachel@robotomic.com" - }, - { - "id": 4480, - "guid": "c2f0612a-56c3-4047-a6da-0d60b7374bbb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Creighton", - "company": "Keytheon", - "phone": "801-501-3224", - "email": "jessica@keytheon.com" - }, - { - "id": 4481, - "guid": "94a27cda-1537-428c-baa4-539ccd936caa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Thomson", - "company": "Generola", - "phone": "813-489-2693", - "email": "kaitlyn@generola.com" - }, - { - "id": 4482, - "guid": "0324ee13-ebd6-4aff-b1d3-abc04be31ed3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Brooks", - "company": "Safetrust", - "phone": "853-450-3438", - "email": "madeline@safetrust.com" - }, - { - "id": 4483, - "guid": "48aae915-2187-489c-953f-6e9f4b14093b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Grace Croftoon", - "company": "Compuamerica", - "phone": "844-462-2900", - "email": "grace@compuamerica.com" - }, - { - "id": 4484, - "guid": "6a4a4691-d729-46c6-a671-1d2cd02b3fa6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Freeman", - "company": "Gigaura", - "phone": "828-401-2506", - "email": "leah@gigaura.com" - }, - { - "id": 4485, - "guid": "e0de3a6d-5242-4add-94c0-eb3375d411e0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny Adamson", - "company": "Thermotomic", - "phone": "874-426-3369", - "email": "destiny@thermotomic.com" - }, - { - "id": 4486, - "guid": "ec91a3f6-58a1-4ca5-959b-617fc2e90315", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Miller", - "company": "eEyetanic", - "phone": "849-453-3810", - "email": "alexa@eeyetanic.com" - }, - { - "id": 4487, - "guid": "bc259200-d667-4a02-96dc-7629623da022", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Oldridge", - "company": "Hypervaco", - "phone": "877-523-2810", - "email": "ava@hypervaco.com" - }, - { - "id": 4488, - "guid": "38900d30-96dd-486e-8dfb-e60aca14bbf8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Wallace", - "company": "SysUSA", - "phone": "875-498-3625", - "email": "andrea@sysusa.com" - }, - { - "id": 4489, - "guid": "fb0d3fbc-5fa6-44fd-8101-7faa8390b3d2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Nathan", - "company": "Steganoconiche", - "phone": "851-532-2223", - "email": "sophie@steganoconiche.com" - }, - { - "id": 4490, - "guid": "f13c9490-afc8-4de9-bdfc-de7beb2fcac0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Wayne", - "company": "iSkyvaco", - "phone": "827-416-2877", - "email": "molly@iskyvaco.com" - }, - { - "id": 4491, - "guid": "2be5b647-9ced-4f63-be53-09c245b36d4e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Day", - "company": "Orthosoft", - "phone": "892-419-2937", - "email": "molly@orthosoft.com" - }, - { - "id": 4492, - "guid": "258c466a-c18f-4f23-bdf4-a3627103ada9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Chapman", - "company": "Enlogia", - "phone": "881-487-3568", - "email": "sarah@enlogia.com" - }, - { - "id": 4493, - "guid": "c1a9f9b7-8fea-432d-ab12-fe5a5ac60a86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Morrison", - "company": "eSteganoergy", - "phone": "811-507-2929", - "email": "brooke@esteganoergy.com" - }, - { - "id": 4494, - "guid": "2b1336e4-549f-4a16-954d-685418b4fc47", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Murphy", - "company": "Turbomart", - "phone": "821-532-3878", - "email": "natalie@turbomart.com" - }, - { - "id": 4495, - "guid": "97d47c03-9eb9-45f9-baf3-ca262d3f6bef", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Watson", - "company": "RoboAerlogix", - "phone": "869-460-2734", - "email": "kaylee@roboaerlogix.com" - }, - { - "id": 4496, - "guid": "f603f521-506c-4169-bc3e-a5cac58904a3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Miers", - "company": "iOptystix", - "phone": "874-546-2778", - "email": "sarah@ioptystix.com" - }, - { - "id": 4497, - "guid": "cb723ae1-855f-466c-9740-1b771ea89f01", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Thomson", - "company": "Compuamerica", - "phone": "879-400-2483", - "email": "arianna@compuamerica.com" - }, - { - "id": 4498, - "guid": "e2f81e85-d845-49a0-85af-179007e4c62b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Gill", - "company": "eEyetanic", - "phone": "880-466-2644", - "email": "sophie@eeyetanic.com" - }, - { - "id": 4499, - "guid": "1e519bce-8938-43bf-8f72-e1671973d77c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Sherlock", - "company": "Jamconik", - "phone": "861-423-2913", - "email": "ava@jamconik.com" - }, - { - "id": 4500, - "guid": "028d79c2-c28f-4372-9685-75bc6fa54bde", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Wesley", - "company": "Teknoplexon", - "phone": "841-501-2531", - "email": "layla@teknoplexon.com" - }, - { - "id": 4501, - "guid": "857d6881-2a09-41e5-b71f-b02de45c71a5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Higgins", - "company": "Robotomic", - "phone": "845-507-3920", - "email": "gianna@robotomic.com" - }, - { - "id": 4502, - "guid": "619fbfb2-4a10-4b78-a62a-e405030c3159", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Higgins", - "company": "Truegate", - "phone": "878-576-3641", - "email": "riley@truegate.com" - }, - { - "id": 4503, - "guid": "5a7e3d87-79d7-4836-963c-4ab71085fdf8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Hamphrey", - "company": "SysUSA", - "phone": "848-529-2528", - "email": "vanessa@sysusa.com" - }, - { - "id": 4504, - "guid": "19e30992-6dda-492b-bf11-459482b5067b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mya Molligan", - "company": "InfoAirway", - "phone": "889-500-2385", - "email": "mya@infoairway.com" - }, - { - "id": 4505, - "guid": "99c456d3-fd85-44c2-a5d2-be6257262fd5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Ward", - "company": "Pericenta", - "phone": "877-495-2341", - "email": "madeline@pericenta.com" - }, - { - "id": 4506, - "guid": "6cb3732b-4f4a-4618-a222-1ad3f7453477", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Miln", - "company": "Jamrola", - "phone": "822-539-2487", - "email": "julia@jamrola.com" - }, - { - "id": 4507, - "guid": "b31f5e3c-df31-441e-89b9-717b12f1979e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katherine Chesterton", - "company": "Jamconik", - "phone": "824-448-3694", - "email": "katherine@jamconik.com" - }, - { - "id": 4508, - "guid": "8011f110-467e-46cf-877f-90a67661132d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Hawkins", - "company": "Safeagra", - "phone": "863-450-2462", - "email": "khloe@safeagra.com" - }, - { - "id": 4509, - "guid": "6e859333-97bb-40e2-936d-033ec93364c6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Freeman", - "company": "Steganoconiche", - "phone": "804-481-3329", - "email": "kaylee@steganoconiche.com" - }, - { - "id": 4510, - "guid": "a75c85c2-0757-45ff-99d6-e658335953e1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophie Hancock", - "company": "Systheon", - "phone": "811-523-3003", - "email": "sophie@systheon.com" - }, - { - "id": 4511, - "guid": "c2faafbb-a5ce-49b5-9f83-5ad9daa35d8c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Fisher", - "company": "Mescaridic", - "phone": "807-509-3973", - "email": "serenity@mescaridic.com" - }, - { - "id": 4512, - "guid": "e921371b-9a46-4902-ba39-0f52c5e0a334", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Mercer", - "company": "Ameritron", - "phone": "879-441-3015", - "email": "alexa@ameritron.com" - }, - { - "id": 4513, - "guid": "8ad98968-c115-4d23-9a40-6e881df10cf4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Carter", - "company": "Turbomart", - "phone": "844-579-2771", - "email": "bailey@turbomart.com" - }, - { - "id": 4514, - "guid": "2bf6d234-657e-4963-b910-004c6a409b4c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Wallace", - "company": "Unconix", - "phone": "861-411-2481", - "email": "paige@unconix.com" - }, - { - "id": 4515, - "guid": "e9895456-b76f-4b3f-bc7e-5d355b851972", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Charlson", - "company": "Vencom", - "phone": "862-456-3933", - "email": "kaylee@vencom.com" - }, - { - "id": 4516, - "guid": "6c1d824d-eefa-4e52-87c8-2397ab61c3e1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Winter", - "company": "Truetomic", - "phone": "895-450-3896", - "email": "chloe@truetomic.com" - }, - { - "id": 4517, - "guid": "08c6588d-ea97-4e55-bed2-b44209a00f31", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Carter", - "company": "Netsystems", - "phone": "801-566-3470", - "email": "layla@netsystems.com" - }, - { - "id": 4518, - "guid": "61e7676d-80f7-4132-961f-6f31f8397d86", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Grace White", - "company": "Mescatron", - "phone": "812-533-2406", - "email": "grace@mescatron.com" - }, - { - "id": 4519, - "guid": "489cf5f7-dfe1-4fa8-b89c-ba18786679a9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Wesley", - "company": "Teknoplexon", - "phone": "876-533-2927", - "email": "julia@teknoplexon.com" - }, - { - "id": 4520, - "guid": "4dcdd322-9177-440d-bc17-865e3b569af3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Wayne", - "company": "US Omnigraphik", - "phone": "883-543-3964", - "email": "alyssa@us omnigraphik.com" - }, - { - "id": 4521, - "guid": "2cf76aaa-023e-440a-ac49-45232725f024", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mya Gill", - "company": "Teraserv", - "phone": "872-531-3321", - "email": "mya@teraserv.com" - }, - { - "id": 4522, - "guid": "04c06cd8-3567-4f8d-9ad9-ad8df20d0b55", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Hawkins", - "company": "Pacwest", - "phone": "892-402-2039", - "email": "claire@pacwest.com" - }, - { - "id": 4523, - "guid": "4f8aa70c-ec8a-4dbd-9577-397acfc9a3e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Hoggarth", - "company": "Entcast", - "phone": "871-594-2818", - "email": "jasmine@entcast.com" - }, - { - "id": 4524, - "guid": "227d1915-34fc-409e-afcb-72c156370c62", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sofia Creighton", - "company": "Videobanc", - "phone": "803-500-2650", - "email": "sofia@videobanc.com" - }, - { - "id": 4525, - "guid": "2392e4c5-f627-4712-9d34-d71437c8732b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Neal", - "company": "eSteganoergy", - "phone": "842-443-3011", - "email": "leah@esteganoergy.com" - }, - { - "id": 4526, - "guid": "4c659c10-a0d6-40dc-a347-f11325ed126f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Thorndike", - "company": "Teratopia", - "phone": "852-474-3368", - "email": "morgan@teratopia.com" - }, - { - "id": 4527, - "guid": "0620cfde-307d-4dc9-a3c8-36262d8f8a98", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Wood", - "company": "Netseco", - "phone": "898-423-2373", - "email": "samantha@netseco.com" - }, - { - "id": 4528, - "guid": "b563d250-44f3-40ce-b609-054e3ec45af8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Nelson", - "company": "Infraique", - "phone": "823-464-3963", - "email": "maria@infraique.com" - }, - { - "id": 4529, - "guid": "e1e876f6-cec2-4de2-95b3-7bfbfd24432d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Cook", - "company": "Openserve", - "phone": "864-494-2828", - "email": "melanie@openserve.com" - }, - { - "id": 4530, - "guid": "5c9bb273-5727-4733-9acb-0b9bd2dd4d17", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Murphy", - "company": "Robocomm", - "phone": "879-512-3676", - "email": "chloe@robocomm.com" - }, - { - "id": 4531, - "guid": "a914e68c-79a1-4699-b600-ca34b9e44f23", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Wood", - "company": "Navivacs", - "phone": "878-507-3599", - "email": "kylie@navivacs.com" - }, - { - "id": 4532, - "guid": "c381ad74-cb1c-437b-bd1c-1bee03a484ed", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Waller", - "company": "Proline", - "phone": "808-535-3174", - "email": "anna@proline.com" - }, - { - "id": 4533, - "guid": "4fa184d4-266c-4f46-a31e-0900792a04f4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Osborne", - "company": "Raylog", - "phone": "823-486-2898", - "email": "madison@raylog.com" - }, - { - "id": 4534, - "guid": "10791702-be93-43ae-af38-2a2851d4b1ad", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Gibbs", - "company": "Fibrotopia", - "phone": "887-409-2446", - "email": "aubrey@fibrotopia.com" - }, - { - "id": 4535, - "guid": "107599dc-7d78-49fe-b988-c40736d386e1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Audrey Brickman", - "company": "Textiqua", - "phone": "868-506-3518", - "email": "audrey@textiqua.com" - }, - { - "id": 4536, - "guid": "74277875-aa61-4c5b-bf22-98ea3082a127", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Wood", - "company": "Transtouch", - "phone": "862-420-3944", - "email": "alexis@transtouch.com" - }, - { - "id": 4537, - "guid": "902ded76-c0e5-4799-bedb-440350900164", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Brickman", - "company": "Techtron", - "phone": "802-427-2717", - "email": "isabella@techtron.com" - }, - { - "id": 4538, - "guid": "369cc1f7-6d33-4682-b553-a34a9a821ad9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Clapton", - "company": "Allphysiche", - "phone": "830-549-2351", - "email": "sofia@allphysiche.com" - }, - { - "id": 4539, - "guid": "14b71ee9-9573-4e54-ba6f-68684e367548", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brianna Hardman", - "company": "iMedconik", - "phone": "805-403-2574", - "email": "brianna@imedconik.com" - }, - { - "id": 4540, - "guid": "a0664b71-2587-4524-96d7-a098ae1053cf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Hardman", - "company": "iOptystix", - "phone": "887-471-3938", - "email": "sophie@ioptystix.com" - }, - { - "id": 4541, - "guid": "2fabf4db-aebe-4261-8f8f-9a793117a55a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Thorndike", - "company": "Westtomik", - "phone": "894-426-2607", - "email": "lauren@westtomik.com" - }, - { - "id": 4542, - "guid": "59f602f3-482c-4fcc-983a-54e07ed6560f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Young", - "company": "Titanigraf", - "phone": "869-513-2461", - "email": "jessica@titanigraf.com" - }, - { - "id": 4543, - "guid": "9f57699c-6610-4155-ba82-4eadf529ccd1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Goodman", - "company": "Titanirola", - "phone": "801-556-3817", - "email": "kaylee@titanirola.com" - }, - { - "id": 4544, - "guid": "90f260c3-3835-4af6-b138-83301f0b0c3c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Sheldon", - "company": "Titanirola", - "phone": "850-496-2913", - "email": "autumn@titanirola.com" - }, - { - "id": 4545, - "guid": "0bc14584-447f-4942-acc5-8172dd099230", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Davidson", - "company": "Interliant", - "phone": "888-519-3219", - "email": "chloe@interliant.com" - }, - { - "id": 4546, - "guid": "06960349-fbad-46a9-b94a-dd6633ee1a53", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Chapman", - "company": "Systheon", - "phone": "860-511-2640", - "email": "katherine@systheon.com" - }, - { - "id": 4547, - "guid": "96c8e62d-5f57-473d-b9df-5e6758486de1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Nathan", - "company": "iEnland", - "phone": "837-426-3826", - "email": "morgan@ienland.com" - }, - { - "id": 4548, - "guid": "e7e65532-81ba-4088-ac6d-20685e5da64e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Chesterton", - "company": "Ventanium", - "phone": "832-411-3489", - "email": "arianna@ventanium.com" - }, - { - "id": 4549, - "guid": "70836591-7e0a-4619-b8fa-bf49fb7f2ba7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Wainwright", - "company": "Mescaridic", - "phone": "879-532-3752", - "email": "amelia@mescaridic.com" - }, - { - "id": 4550, - "guid": "dc66fd8d-973a-4683-8198-cd21f1a2c370", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Gilbert", - "company": "Polytheon", - "phone": "867-471-3528", - "email": "autumn@polytheon.com" - }, - { - "id": 4551, - "guid": "7b8553aa-4111-41bc-a80d-17e718e2d2da", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Warren", - "company": "iSkyvaco", - "phone": "810-558-3124", - "email": "lillian@iskyvaco.com" - }, - { - "id": 4552, - "guid": "2fd36135-990e-433f-9abb-08956e5859d5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maya Day", - "company": "OpKeycomm", - "phone": "843-438-2294", - "email": "maya@opkeycomm.com" - }, - { - "id": 4553, - "guid": "f50dfdea-cf95-4e50-b501-99c0be0ecf9a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Riley Young", - "company": "Technogra", - "phone": "854-449-2791", - "email": "riley@technogra.com" - }, - { - "id": 4554, - "guid": "a9a37078-50bb-4a9c-86a4-6e1a7dd12592", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Wesley", - "company": "Systheon", - "phone": "846-501-2881", - "email": "layla@systheon.com" - }, - { - "id": 4555, - "guid": "29c53bbd-20b2-4073-80e8-6c3757ed18c6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Carrington", - "company": "Anaframe", - "phone": "847-459-2927", - "email": "andrea@anaframe.com" - }, - { - "id": 4556, - "guid": "ab780173-3cea-40ff-a8fa-720254fbb81d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Ford", - "company": "Xeicon", - "phone": "867-539-3617", - "email": "aaliyah@xeicon.com" - }, - { - "id": 4557, - "guid": "208dfda8-7e94-434c-8341-9fde5437cd7b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Young", - "company": "Quintegrity", - "phone": "843-593-2798", - "email": "melanie@quintegrity.com" - }, - { - "id": 4558, - "guid": "da8e3dd1-3cd3-4d60-b3a2-b1688494905b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabella Thomson", - "company": "Turbomart", - "phone": "812-457-2920", - "email": "isabella@turbomart.com" - }, - { - "id": 4559, - "guid": "1b804b40-d7f0-4700-8e36-73f271834bdd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Thomson", - "company": "iOptystix", - "phone": "894-593-3651", - "email": "kaylee@ioptystix.com" - }, - { - "id": 4560, - "guid": "aea2dec7-91ff-4183-b512-39162463b5b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Conors", - "company": "Inridium", - "phone": "851-593-3611", - "email": "alexis@inridium.com" - }, - { - "id": 4561, - "guid": "696a18f7-8a8e-426a-84c9-a27840ec48fb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sofia Gill", - "company": "Navivacs", - "phone": "854-417-3983", - "email": "sofia@navivacs.com" - }, - { - "id": 4562, - "guid": "bc108624-f639-4cc9-8b6f-dcc9938b215f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Walkman", - "company": "Fibroserve", - "phone": "831-514-2061", - "email": "payton@fibroserve.com" - }, - { - "id": 4563, - "guid": "e5adadfd-b4f1-4660-b01f-9aed7532ff68", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Higgins", - "company": "Titanigraf", - "phone": "815-476-2148", - "email": "nevaeh@titanigraf.com" - }, - { - "id": 4564, - "guid": "94d85029-0f04-4739-9d0f-b1344f4b6a39", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Daniels", - "company": "Keytheon", - "phone": "894-423-3054", - "email": "samantha@keytheon.com" - }, - { - "id": 4565, - "guid": "4161b498-ae8f-46f0-8559-5dfd9dd6314e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Wallace", - "company": "Skydata", - "phone": "877-544-3175", - "email": "lauren@skydata.com" - }, - { - "id": 4566, - "guid": "23b29464-64d0-4d76-bd70-4a4103b49ed5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Cook", - "company": "SysVenamerica", - "phone": "844-415-2558", - "email": "riley@sysvenamerica.com" - }, - { - "id": 4567, - "guid": "2ce7ec0c-1fdd-4c46-b292-b4d12d53224a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison WifKinson", - "company": "US Omnigraphik", - "phone": "823-454-3387", - "email": "allison@us omnigraphik.com" - }, - { - "id": 4568, - "guid": "aedec654-c303-49da-9a5d-99879f355111", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Carey", - "company": "Keytheon", - "phone": "875-427-2509", - "email": "madeline@keytheon.com" - }, - { - "id": 4569, - "guid": "6db6a382-dc25-4c06-aa89-c19a20677dab", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Gustman", - "company": "Raylog", - "phone": "850-456-2251", - "email": "sophia@raylog.com" - }, - { - "id": 4570, - "guid": "51a7c389-2ef8-4051-90ad-c6576326c11b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Carrington", - "company": "Robocomm", - "phone": "894-524-2028", - "email": "trinity@robocomm.com" - }, - { - "id": 4571, - "guid": "ce15ecfc-2cc4-4bbb-b973-94f80435793b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Nelson", - "company": "Skydata", - "phone": "828-489-3889", - "email": "chloe@skydata.com" - }, - { - "id": 4572, - "guid": "63ca5278-f093-4ca9-9e8c-607bbaaf0a81", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Chapman", - "company": "Ventanium", - "phone": "873-594-2168", - "email": "katherine@ventanium.com" - }, - { - "id": 4573, - "guid": "957b4feb-dfa5-4f94-a972-6882ed20c1fd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Brown", - "company": "Indisco", - "phone": "810-405-2321", - "email": "lillian@indisco.com" - }, - { - "id": 4574, - "guid": "5ff6b391-6cfc-487b-8252-b6efeb40ab6a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Gate", - "company": "Proline", - "phone": "855-489-3638", - "email": "kayla@proline.com" - }, - { - "id": 4575, - "guid": "45958a43-b5a4-4c09-8516-75a15d4fa064", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexandra Higgins", - "company": "Enlogia", - "phone": "858-583-2833", - "email": "alexandra@enlogia.com" - }, - { - "id": 4576, - "guid": "515bdfff-1db8-4a17-ad67-300e59859a85", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Makayla Brickman", - "company": "SysVenamerica", - "phone": "863-422-3376", - "email": "makayla@sysvenamerica.com" - }, - { - "id": 4577, - "guid": "7d47a971-2015-42a4-8011-f2025e68d160", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Chesterton", - "company": "Techtron", - "phone": "880-505-3898", - "email": "kylie@techtron.com" - }, - { - "id": 4578, - "guid": "0aadd652-4df1-45ac-8b8d-be9a0b940c00", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Timmons", - "company": "Inridium", - "phone": "873-547-2936", - "email": "chloe@inridium.com" - }, - { - "id": 4579, - "guid": "85461276-bced-48ca-9e2e-4646eda1fce5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Oliver", - "company": "Transtouch", - "phone": "890-548-3728", - "email": "lily@transtouch.com" - }, - { - "id": 4580, - "guid": "37a9c2c2-c2f2-470e-8536-be9b126d2612", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Miers", - "company": "Titanigraf", - "phone": "825-536-2213", - "email": "ava@titanigraf.com" - }, - { - "id": 4581, - "guid": "34a1ead9-460e-49ed-a832-c3e15664772a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Walkman", - "company": "US Infratouch", - "phone": "838-504-2945", - "email": "molly@us infratouch.com" - }, - { - "id": 4582, - "guid": "72cda66b-c44b-4b72-95d4-b6a4e53a115a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Smith", - "company": "Unologic", - "phone": "895-575-2366", - "email": "abigail@unologic.com" - }, - { - "id": 4583, - "guid": "75dedfa7-1504-4131-b841-3f3211d37e6a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Goodman", - "company": "Westtomik", - "phone": "809-597-3295", - "email": "claire@westtomik.com" - }, - { - "id": 4584, - "guid": "3a26dfad-235b-4805-a307-1495f9f88052", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Cook", - "company": "Openserve", - "phone": "839-436-2939", - "email": "melanie@openserve.com" - }, - { - "id": 4585, - "guid": "c96a3acf-7b36-4917-86d4-d2092c9ebbec", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Osborne", - "company": "Netsystems", - "phone": "808-526-3940", - "email": "julia@netsystems.com" - }, - { - "id": 4586, - "guid": "a994cd66-e9a4-4160-94d2-f6ee314e0ea7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Mercer", - "company": "Idmax", - "phone": "809-530-3510", - "email": "sophia@idmax.com" - }, - { - "id": 4587, - "guid": "8b22482a-870c-4468-bf00-5a03c91bdab8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Gilson", - "company": "Conotomics", - "phone": "886-493-3095", - "email": "mariah@conotomics.com" - }, - { - "id": 4588, - "guid": "7d591bbe-6e26-4096-9f82-db3e41d71a88", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Miln", - "company": "Hypervaco", - "phone": "892-566-3467", - "email": "isabelle@hypervaco.com" - }, - { - "id": 4589, - "guid": "41ba82dc-d14d-4c16-837d-ecd5d278bb6b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Miers", - "company": "Generola", - "phone": "841-600-3324", - "email": "lauren@generola.com" - }, - { - "id": 4590, - "guid": "2605ace6-5c36-4c23-afef-6e58fcbcd686", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabelle Carter", - "company": "iQualcar", - "phone": "841-484-3587", - "email": "isabelle@iqualcar.com" - }, - { - "id": 4591, - "guid": "67993e4f-fe9f-4715-afe2-438ac4dfdc2f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Chapman", - "company": "Mescaridic", - "phone": "848-424-3977", - "email": "emma@mescaridic.com" - }, - { - "id": 4592, - "guid": "2febb15b-bd30-4cd0-a830-e391ba976575", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Hailey", - "company": "Jamrola", - "phone": "806-494-3606", - "email": "nevaeh@jamrola.com" - }, - { - "id": 4593, - "guid": "2838d61b-6629-4b70-b418-a483971dfec2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Bush", - "company": "Jamrola", - "phone": "852-449-3053", - "email": "abigail@jamrola.com" - }, - { - "id": 4594, - "guid": "032dd2b9-838a-4c10-a3a3-f6a403ac7b28", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Walkman", - "company": "Sontopia", - "phone": "885-496-3091", - "email": "melanie@sontopia.com" - }, - { - "id": 4595, - "guid": "09f0479d-ccc2-4858-b4d6-9b67a4acff53", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Harrison", - "company": "SysUSA", - "phone": "871-410-3379", - "email": "zoe@sysusa.com" - }, - { - "id": 4596, - "guid": "646863ac-deb4-4c04-a233-15e202638271", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Sherlock", - "company": "Vencom", - "phone": "823-442-3654", - "email": "destiny@vencom.com" - }, - { - "id": 4597, - "guid": "5939936e-1aa4-4b81-bace-0288ca51f213", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Genesis Brooks", - "company": "Sontopia", - "phone": "870-434-3701", - "email": "genesis@sontopia.com" - }, - { - "id": 4598, - "guid": "521067a0-5570-4187-90da-d0e139952a05", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Oswald", - "company": "Compuamerica", - "phone": "864-441-3754", - "email": "rachel@compuamerica.com" - }, - { - "id": 4599, - "guid": "9a1a1cb5-ae62-49b7-b5db-74537e336e03", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Elizabeth WifKinson", - "company": "Airdyne", - "phone": "840-413-3565", - "email": "elizabeth@airdyne.com" - }, - { - "id": 4600, - "guid": "89166da8-99fb-4bf2-953e-8138583cec5e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Galbraith", - "company": "Qualserve", - "phone": "806-528-3891", - "email": "brooklyn@qualserve.com" - }, - { - "id": 4601, - "guid": "8ac3c12a-6b64-4ed6-8309-0678b3030187", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Hodges", - "company": "Allphysiche", - "phone": "827-592-2993", - "email": "alexandra@allphysiche.com" - }, - { - "id": 4602, - "guid": "0d940421-a15d-4cbd-9779-74e515d5e80b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Nash", - "company": "Tekcar", - "phone": "899-436-2350", - "email": "angelina@tekcar.com" - }, - { - "id": 4603, - "guid": "125fdbe5-152c-430e-90ed-6a3d225c6e53", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Sheldon", - "company": "iQualcar", - "phone": "887-466-3537", - "email": "brooke@iqualcar.com" - }, - { - "id": 4604, - "guid": "0725ea0f-b759-48d0-a242-4ba1a42c6bc8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Abramson", - "company": "Allnet", - "phone": "808-476-3015", - "email": "samantha@allnet.com" - }, - { - "id": 4605, - "guid": "1c47f6e8-032f-4abb-bcfd-510af924ab6c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah Gate", - "company": "US Infratouch", - "phone": "833-477-2727", - "email": "mariah@us infratouch.com" - }, - { - "id": 4606, - "guid": "38ccfe8e-f340-47dd-a8d0-e639fd84a413", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Julia Morrison", - "company": "Genland", - "phone": "818-545-3192", - "email": "julia@genland.com" - }, - { - "id": 4607, - "guid": "591efc85-6703-4a6c-8a06-9ed43be74b61", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Croftoon", - "company": "Jamrola", - "phone": "865-551-2219", - "email": "julia@jamrola.com" - }, - { - "id": 4608, - "guid": "a1a36999-d2be-4ff6-bc9b-a9628bd4261b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Murphy", - "company": "Fibrotouch", - "phone": "828-506-3361", - "email": "melanie@fibrotouch.com" - }, - { - "id": 4609, - "guid": "18f9336a-c7ce-411d-a7ad-ca298d495b9d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Neal", - "company": "Tekcar", - "phone": "822-471-2353", - "email": "eva@tekcar.com" - }, - { - "id": 4610, - "guid": "0758f261-49f1-424a-ae6b-9d09265773cb", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Thornton", - "company": "Keytheon", - "phone": "858-407-2230", - "email": "chloe@keytheon.com" - }, - { - "id": 4611, - "guid": "1aaebfb0-1026-436e-9673-2c70491c6d88", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Murphy", - "company": "iEnland", - "phone": "880-417-3156", - "email": "avery@ienland.com" - }, - { - "id": 4612, - "guid": "9f2c94bd-02d8-430e-a2d7-7b450f639e2f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Fulton", - "company": "Anagraph", - "phone": "858-523-2001", - "email": "olivia@anagraph.com" - }, - { - "id": 4613, - "guid": "ee965f43-243f-4036-acd5-982028f21065", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Fulton", - "company": "Unologic", - "phone": "866-523-2287", - "email": "avery@unologic.com" - }, - { - "id": 4614, - "guid": "02918557-8309-4d07-ae08-5cf5353eb21e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Clapton", - "company": "Venconix", - "phone": "865-470-2024", - "email": "brooke@venconix.com" - }, - { - "id": 4615, - "guid": "570f7827-c49f-4e6f-9ebd-b671459a23c1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Timmons", - "company": "Mescatron", - "phone": "891-589-2133", - "email": "chloe@mescatron.com" - }, - { - "id": 4616, - "guid": "874e52ca-fc71-46cd-ab12-1bfe70cf2f31", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Croftoon", - "company": "Teknoplexon", - "phone": "872-543-3905", - "email": "eva@teknoplexon.com" - }, - { - "id": 4617, - "guid": "c896c7e7-2097-45ab-8d4b-5f5c9384f3ff", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Hodges", - "company": "Polytheon", - "phone": "852-589-3285", - "email": "alexis@polytheon.com" - }, - { - "id": 4618, - "guid": "e6237b9f-0ebd-4ed0-b317-82cc74e5f01b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Goldman", - "company": "Xeicon", - "phone": "819-586-3884", - "email": "hailey@xeicon.com" - }, - { - "id": 4619, - "guid": "f3475be9-352a-4b9b-829b-6c268fab6248", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton White", - "company": "Orthosoft", - "phone": "831-412-3165", - "email": "peyton@orthosoft.com" - }, - { - "id": 4620, - "guid": "00e02514-f2f5-487f-ba2d-8eade878b2cf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mariah Gerald", - "company": "Navivacs", - "phone": "892-422-2240", - "email": "mariah@navivacs.com" - }, - { - "id": 4621, - "guid": "c1f18d99-fa8e-4121-970d-d13c59071f88", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Haig", - "company": "Openserve", - "phone": "876-445-3462", - "email": "charlotte@openserve.com" - }, - { - "id": 4622, - "guid": "78a3630e-89c5-465c-b267-c125fd9c20cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Evelyn Gilbert", - "company": "Unconix", - "phone": "814-557-3220", - "email": "evelyn@unconix.com" - }, - { - "id": 4623, - "guid": "c588cb20-1c27-4458-986d-b1f6fd6927a3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Chandter", - "company": "iEnland", - "phone": "830-413-3925", - "email": "sophia@ienland.com" - }, - { - "id": 4624, - "guid": "266150df-4829-4fcf-98b0-aa4bcc16c2e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Harrison", - "company": "Teratopia", - "phone": "843-412-3717", - "email": "melanie@teratopia.com" - }, - { - "id": 4625, - "guid": "52f599f5-0243-4be7-a002-b3a0522b1727", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Harrison", - "company": "Teratopia", - "phone": "806-474-2918", - "email": "aaliyah@teratopia.com" - }, - { - "id": 4626, - "guid": "ed1be164-8277-4b54-ba88-8a4045e024be", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Walkman", - "company": "Orthosoft", - "phone": "862-521-2701", - "email": "sydney@orthosoft.com" - }, - { - "id": 4627, - "guid": "af411dab-db4c-4a32-aad2-3ada933da6c1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Turner", - "company": "Systheon", - "phone": "841-434-2188", - "email": "makayla@systheon.com" - }, - { - "id": 4628, - "guid": "a6e1d9ad-5524-4141-b184-1efb90696f6e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Brooks", - "company": "iEnland", - "phone": "803-418-3642", - "email": "addison@ienland.com" - }, - { - "id": 4629, - "guid": "7c058f2f-83a4-461b-81b2-9abbc84368d6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoe Carroll", - "company": "Ventanium", - "phone": "838-499-2875", - "email": "zoe@ventanium.com" - }, - { - "id": 4630, - "guid": "c63eddbf-c0a4-44fe-92c5-51b2578e3cb5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Samantha Gerald", - "company": "Westtomik", - "phone": "832-551-3723", - "email": "samantha@westtomik.com" - }, - { - "id": 4631, - "guid": "a2304529-5bd8-41bb-bf34-510cfca45752", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Winter", - "company": "iMedconik", - "phone": "815-490-3796", - "email": "trinity@imedconik.com" - }, - { - "id": 4632, - "guid": "d805f5db-b207-42fd-b1a0-d48e4c22dccd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Fisher", - "company": "Aluco", - "phone": "881-443-3432", - "email": "mackenzie@aluco.com" - }, - { - "id": 4633, - "guid": "3d2eba02-6632-4a28-81ff-d2b864de41b8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Stanley", - "company": "Anagraph", - "phone": "866-486-2595", - "email": "victoria@anagraph.com" - }, - { - "id": 4634, - "guid": "6d3020a5-4b7c-4473-a65d-8ac5db439c18", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Ward", - "company": "Anagraph", - "phone": "840-440-2860", - "email": "julia@anagraph.com" - }, - { - "id": 4635, - "guid": "c70924bf-bec4-45fd-bf41-59e2f56a54bf", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey WifKinson", - "company": "Xeicon", - "phone": "844-427-3305", - "email": "hailey@xeicon.com" - }, - { - "id": 4636, - "guid": "06e30420-a8df-4449-839a-0ded30f2e310", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Wesley", - "company": "Inridium", - "phone": "860-556-2369", - "email": "aaliyah@inridium.com" - }, - { - "id": 4637, - "guid": "d2eb8863-47c9-4a64-a60e-5c84bc29c311", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha WifKinson", - "company": "Skydata", - "phone": "874-559-2323", - "email": "samantha@skydata.com" - }, - { - "id": 4638, - "guid": "83ea6d59-a8b2-4de5-af41-1ec04fbc2e85", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Oldman", - "company": "Teratopia", - "phone": "850-542-2934", - "email": "valeria@teratopia.com" - }, - { - "id": 4639, - "guid": "50287ee4-e8dc-4356-8f98-75d7acc9be41", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Wesley", - "company": "Infraique", - "phone": "872-580-3910", - "email": "eva@infraique.com" - }, - { - "id": 4640, - "guid": "850f111f-94d9-4cf1-a2cd-3f1571eaca06", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Ward", - "company": "Keytheon", - "phone": "860-583-2450", - "email": "ella@keytheon.com" - }, - { - "id": 4641, - "guid": "05d39f73-1d41-4087-95ff-69dea65970f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Gilmore", - "company": "Allnet", - "phone": "872-512-3222", - "email": "brooke@allnet.com" - }, - { - "id": 4642, - "guid": "ba7cbd1b-d531-4df5-9f12-4d40948cb21c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Miller", - "company": "InfoAirway", - "phone": "890-445-3296", - "email": "angelina@infoairway.com" - }, - { - "id": 4643, - "guid": "a55292e5-78d5-4a63-8233-8f9b10abadb3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Hancock", - "company": "Thermotomic", - "phone": "879-508-2268", - "email": "arianna@thermotomic.com" - }, - { - "id": 4644, - "guid": "7df724b9-18b3-47d3-a732-9c052a436e7a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Conors", - "company": "Safeagra", - "phone": "819-509-3418", - "email": "khloe@safeagra.com" - }, - { - "id": 4645, - "guid": "07a63028-25f0-4fd0-9584-dba34a4ed3f5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Goldman", - "company": "Westmedia", - "phone": "836-555-3329", - "email": "sophie@westmedia.com" - }, - { - "id": 4646, - "guid": "f2f3b190-f445-4e83-8d34-dec038cde522", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Nathan", - "company": "Infraique", - "phone": "846-431-2344", - "email": "alexis@infraique.com" - }, - { - "id": 4647, - "guid": "1cff68f3-19d4-4188-a242-e3d4e62c5c65", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Higgins", - "company": "Celgra", - "phone": "828-581-2721", - "email": "amelia@celgra.com" - }, - { - "id": 4648, - "guid": "7e633287-a1b6-4d25-955e-4fd296e20b61", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Hancock", - "company": "Conrama", - "phone": "840-440-2506", - "email": "arianna@conrama.com" - }, - { - "id": 4649, - "guid": "9f64caba-9117-43bf-aeb5-c2bf30b3dfb0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Miller", - "company": "Pericenta", - "phone": "851-513-3257", - "email": "taylor@pericenta.com" - }, - { - "id": 4650, - "guid": "3dbd27e1-cfe5-4dc3-8a72-527f0b2b201d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Hardman", - "company": "Infraique", - "phone": "855-404-3078", - "email": "emma@infraique.com" - }, - { - "id": 4651, - "guid": "90054c72-54ae-491e-90ad-53cd3b21508c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Morrison", - "company": "Inridium", - "phone": "801-443-3546", - "email": "amelia@inridium.com" - }, - { - "id": 4652, - "guid": "593740f8-2f82-4b10-8ae0-e72d18a8a0c9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Daniels", - "company": "Conotomics", - "phone": "815-423-2557", - "email": "allison@conotomics.com" - }, - { - "id": 4653, - "guid": "4217775b-fa68-4610-8b41-775e48940636", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Nash", - "company": "Robotomic", - "phone": "842-423-2215", - "email": "isabelle@robotomic.com" - }, - { - "id": 4654, - "guid": "1495d635-6a5c-48ad-8553-a493eb413a0a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Turner", - "company": "Textiqua", - "phone": "831-545-2392", - "email": "melanie@textiqua.com" - }, - { - "id": 4655, - "guid": "bfcf8804-50d4-420d-af82-aa39d1dc37e1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Otis", - "company": "Teratopia", - "phone": "846-544-3538", - "email": "sophie@teratopia.com" - }, - { - "id": 4656, - "guid": "e66b2353-695d-4e56-8493-78952344d0f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jasmine Miller", - "company": "Generola", - "phone": "895-586-2099", - "email": "jasmine@generola.com" - }, - { - "id": 4657, - "guid": "08a4c997-c939-43e7-b106-19c5284919ce", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Stanley", - "company": "Turbomart", - "phone": "854-560-2883", - "email": "vanessa@turbomart.com" - }, - { - "id": 4658, - "guid": "0fd41f35-5f4f-4ea9-b5ab-8718efcec851", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Chesterton", - "company": "eSteganoergy", - "phone": "808-498-2465", - "email": "madelyn@esteganoergy.com" - }, - { - "id": 4659, - "guid": "b4370e67-3803-44f0-a0a7-ed7985fc90d0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Miln", - "company": "Idmax", - "phone": "894-432-3826", - "email": "lauren@idmax.com" - }, - { - "id": 4660, - "guid": "bceb832e-8851-418b-95ef-0a5618f31bc5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Wood", - "company": "Aprama", - "phone": "868-578-3445", - "email": "gabriella@aprama.com" - }, - { - "id": 4661, - "guid": "0608360d-7442-4e70-b998-2ac12ad76910", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Ford", - "company": "Mescatron", - "phone": "863-526-3498", - "email": "eva@mescatron.com" - }, - { - "id": 4662, - "guid": "7e522102-e86e-44b7-b877-110ac2376263", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Charlson", - "company": "Techtron", - "phone": "879-541-3998", - "email": "brianna@techtron.com" - }, - { - "id": 4663, - "guid": "3bb845c8-fd61-4ca3-8313-bdc79b77a207", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Murphy", - "company": "Westtomik", - "phone": "800-544-2546", - "email": "layla@westtomik.com" - }, - { - "id": 4664, - "guid": "55b1edd1-5838-4481-9a6b-9074178821b4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Ogden", - "company": "Qualserve", - "phone": "888-594-2215", - "email": "brooklyn@qualserve.com" - }, - { - "id": 4665, - "guid": "2ecac4ea-509c-4e81-b8aa-a970d7d62a90", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mia Adamson", - "company": "Robotemplate", - "phone": "862-438-2145", - "email": "mia@robotemplate.com" - }, - { - "id": 4666, - "guid": "ed8315c7-21f9-49e3-bf94-8e6d653118d4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Ward", - "company": "SysVenamerica", - "phone": "810-474-3566", - "email": "angelina@sysvenamerica.com" - }, - { - "id": 4667, - "guid": "6bdd6b26-f762-4637-867e-4a5484e9837e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Goodman", - "company": "Technogra", - "phone": "879-562-2923", - "email": "payton@technogra.com" - }, - { - "id": 4668, - "guid": "9dbbe0e4-31e2-4216-a464-e37f83872046", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Walkman", - "company": "Robotemplate", - "phone": "841-588-3059", - "email": "eva@robotemplate.com" - }, - { - "id": 4669, - "guid": "6c3ef0a4-4f05-4c96-8657-249d39661c8c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Gill", - "company": "Videobanc", - "phone": "834-545-3466", - "email": "alyssa@videobanc.com" - }, - { - "id": 4670, - "guid": "e0a5eaf3-99dd-4b3e-a7c6-31ad854f26a4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Milton", - "company": "Multitiqua", - "phone": "801-467-3110", - "email": "lily@multitiqua.com" - }, - { - "id": 4671, - "guid": "3afc0a8c-30d5-4bed-bd94-3b6662e7ee98", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Croftoon", - "company": "Entcast", - "phone": "883-579-3614", - "email": "sarah@entcast.com" - }, - { - "id": 4672, - "guid": "ccbcfa65-6618-4256-8e3a-cc59a6e6efad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Freeman", - "company": "eEyetanic", - "phone": "885-406-2873", - "email": "lily@eeyetanic.com" - }, - { - "id": 4673, - "guid": "140ee657-3ab9-4522-9e16-4c0bda8b05f2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Watson", - "company": "Pacwest", - "phone": "888-547-3165", - "email": "gianna@pacwest.com" - }, - { - "id": 4674, - "guid": "bd30145a-bf9e-4c78-b29b-10d694ecfe95", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Otis", - "company": "Allnet", - "phone": "838-540-2603", - "email": "sophia@allnet.com" - }, - { - "id": 4675, - "guid": "a9d14aa3-c385-457d-ab78-bc74ee4fae71", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Creighton", - "company": "OpKeycomm", - "phone": "888-550-3877", - "email": "katherine@opkeycomm.com" - }, - { - "id": 4676, - "guid": "a0def78c-2086-4066-bcf4-035478715317", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Harrison", - "company": "Textiqua", - "phone": "877-400-3596", - "email": "khloe@textiqua.com" - }, - { - "id": 4677, - "guid": "36e1fcbf-0159-4ac2-81b5-508ceff72949", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoey Oswald", - "company": "Safeagra", - "phone": "811-402-3262", - "email": "zoey@safeagra.com" - }, - { - "id": 4678, - "guid": "d2aaf230-1e1e-4f8c-a38e-d08aaf7ba863", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Croftoon", - "company": "Aprama", - "phone": "880-509-3220", - "email": "bella@aprama.com" - }, - { - "id": 4679, - "guid": "07a73793-705c-4e96-828d-fb25d5aa71b7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Campbell", - "company": "Conotomics", - "phone": "854-527-2635", - "email": "elizabeth@conotomics.com" - }, - { - "id": 4680, - "guid": "d1b77e2c-aa91-46d2-a5fe-93c224b0b70a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Haig", - "company": "Ventanium", - "phone": "847-404-2109", - "email": "jocelyn@ventanium.com" - }, - { - "id": 4681, - "guid": "f992978c-ff5d-48d1-95bf-c865a2ff91cc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Osborne", - "company": "Rapigrafix", - "phone": "823-569-3741", - "email": "samantha@rapigrafix.com" - }, - { - "id": 4682, - "guid": "4ea72448-005f-489f-a54c-a295f771ef08", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Wallace", - "company": "Titanirola", - "phone": "883-420-3334", - "email": "victoria@titanirola.com" - }, - { - "id": 4683, - "guid": "20e54644-cb25-4a7e-bf06-7ee0b4ef4ec7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Chloe Wainwright", - "company": "iMedconik", - "phone": "881-524-3474", - "email": "chloe@imedconik.com" - }, - { - "id": 4684, - "guid": "abfbea8e-f742-4efe-9d06-a67c26340bb6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Wallace", - "company": "Interliant", - "phone": "879-531-2306", - "email": "kimberly@interliant.com" - }, - { - "id": 4685, - "guid": "78b0aacc-6383-4dd2-9052-ebedec769c65", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Hodges", - "company": "Idmax", - "phone": "876-469-3453", - "email": "lauren@idmax.com" - }, - { - "id": 4686, - "guid": "153524cf-008b-4287-921a-b1bd744736d8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Watson", - "company": "Conotomics", - "phone": "883-554-3692", - "email": "kylie@conotomics.com" - }, - { - "id": 4687, - "guid": "7583f760-bf8c-48d0-9fa2-9a61cae88cf0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Adamson", - "company": "Qualserve", - "phone": "840-530-2178", - "email": "mya@qualserve.com" - }, - { - "id": 4688, - "guid": "1a8488f0-c259-4a94-960a-74811af49aa7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Cramer", - "company": "Infragraph", - "phone": "818-574-3314", - "email": "taylor@infragraph.com" - }, - { - "id": 4689, - "guid": "b6eb7bd9-41cc-46fd-9fbf-5b0452426811", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Hardman", - "company": "Tekcar", - "phone": "806-535-3724", - "email": "gabriella@tekcar.com" - }, - { - "id": 4690, - "guid": "e40aa4f1-7255-4360-ad95-2431852466d3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Miller", - "company": "eSteganoergy", - "phone": "857-448-2730", - "email": "sarah@esteganoergy.com" - }, - { - "id": 4691, - "guid": "97886fb8-e346-43c5-a65d-bdcbf825a1bb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Crossman", - "company": "Jamrola", - "phone": "817-403-2810", - "email": "olivia@jamrola.com" - }, - { - "id": 4692, - "guid": "8efe395f-84a6-4f44-a4b6-9fc2de25cd3e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Clapton", - "company": "Anagraph", - "phone": "857-460-3121", - "email": "bella@anagraph.com" - }, - { - "id": 4693, - "guid": "3d471b2b-8543-4c5d-8cd8-11edf7fb1fa9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Miller", - "company": "Teknoplexon", - "phone": "804-592-2368", - "email": "hailey@teknoplexon.com" - }, - { - "id": 4694, - "guid": "cbb3b2ce-273d-41f0-94d0-1a5df421922a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Calhoun", - "company": "Venconix", - "phone": "819-483-3310", - "email": "brianna@venconix.com" - }, - { - "id": 4695, - "guid": "ef4cfc8b-d451-4dd4-a6c6-064172510f09", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gilson", - "company": "Sontopia", - "phone": "829-433-3402", - "email": "lauren@sontopia.com" - }, - { - "id": 4696, - "guid": "59513ae3-1d90-45e0-8147-dcfece68928d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Calhoun", - "company": "Xeicon", - "phone": "829-591-2621", - "email": "emma@xeicon.com" - }, - { - "id": 4697, - "guid": "ef999f74-0cdc-4c07-904a-a8c9fd516854", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Chandter", - "company": "Allnet", - "phone": "881-566-2518", - "email": "alexis@allnet.com" - }, - { - "id": 4698, - "guid": "3cde6a87-f22c-4da2-940a-d503fa25325c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabelle Fulton", - "company": "Infragraph", - "phone": "816-412-3129", - "email": "isabelle@infragraph.com" - }, - { - "id": 4699, - "guid": "5fb2bad3-cda6-4b29-80da-4e51cab5cb9e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Winter", - "company": "Ameritron", - "phone": "806-406-3681", - "email": "savannah@ameritron.com" - }, - { - "id": 4700, - "guid": "4af9fddc-571c-4acc-b63b-31c5f837e87d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Daniels", - "company": "Allphysiche", - "phone": "866-588-3963", - "email": "khloe@allphysiche.com" - }, - { - "id": 4701, - "guid": "71962b02-b725-4ade-bf30-d670e7251d50", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Chandter", - "company": "Westmedia", - "phone": "891-596-3233", - "email": "bailey@westmedia.com" - }, - { - "id": 4702, - "guid": "9bf00eed-5602-4c8f-af6c-a6614f28561e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Thornton", - "company": "Aprama", - "phone": "840-582-3732", - "email": "jessica@aprama.com" - }, - { - "id": 4703, - "guid": "7a70badc-c6c0-4e39-8487-766b35e089c6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooklyn Owen", - "company": "Allnet", - "phone": "890-425-3016", - "email": "brooklyn@allnet.com" - }, - { - "id": 4704, - "guid": "53caab1b-aa24-45dd-82c7-0716eb1594f5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Vanessa Youmans", - "company": "Xeicon", - "phone": "871-541-2542", - "email": "vanessa@xeicon.com" - }, - { - "id": 4705, - "guid": "f60faed1-3021-41a0-9a2c-5abdcf16e2fa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Chandter", - "company": "Truetomic", - "phone": "879-550-3496", - "email": "angelina@truetomic.com" - }, - { - "id": 4706, - "guid": "012f1768-ebac-4778-8d07-efe28283df2d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Chesterton", - "company": "US Infratouch", - "phone": "819-600-3553", - "email": "sydney@us infratouch.com" - }, - { - "id": 4707, - "guid": "719e966b-7b7c-4c66-ae73-5805df5bd158", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gardner", - "company": "Skydata", - "phone": "898-530-2893", - "email": "brooklyn@skydata.com" - }, - { - "id": 4708, - "guid": "f6800394-2695-4c23-b42d-93cd7e0bc151", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Sherlock", - "company": "Allphysiche", - "phone": "878-500-2210", - "email": "aubrey@allphysiche.com" - }, - { - "id": 4709, - "guid": "970a9cef-2bee-40ef-997b-f22ca8ecb0c1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabriella Ward", - "company": "Sontopia", - "phone": "853-444-2337", - "email": "gabriella@sontopia.com" - }, - { - "id": 4710, - "guid": "d85ae09b-5b67-40a0-ae4a-41fb6e88228c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Gustman", - "company": "Skydata", - "phone": "899-444-3530", - "email": "savannah@skydata.com" - }, - { - "id": 4711, - "guid": "cd4fe274-33de-4e01-b7fb-eebe1a396961", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Oldman", - "company": "Westgate", - "phone": "828-472-3261", - "email": "alexis@westgate.com" - }, - { - "id": 4712, - "guid": "376b8684-a27f-4784-a7dc-1032dbec1d6f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Thorndike", - "company": "Celgra", - "phone": "846-511-2470", - "email": "alexa@celgra.com" - }, - { - "id": 4713, - "guid": "9880087d-bf4b-45ae-9a94-c4fd613c7d5e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Croftoon", - "company": "Truegate", - "phone": "877-567-3430", - "email": "melanie@truegate.com" - }, - { - "id": 4714, - "guid": "a77a646b-a0d7-42b9-8a9d-464ec6b10dea", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Audrey Walkman", - "company": "Allnet", - "phone": "848-434-3993", - "email": "audrey@allnet.com" - }, - { - "id": 4715, - "guid": "e2c6bf53-87b9-4979-9141-5d1938403cf5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Daniels", - "company": "Textiqua", - "phone": "886-430-3365", - "email": "autumn@textiqua.com" - }, - { - "id": 4716, - "guid": "8fb063b7-80ae-4c9c-8cb6-4d24bc289b32", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Brooks", - "company": "Allnet", - "phone": "818-511-2268", - "email": "natalie@allnet.com" - }, - { - "id": 4717, - "guid": "5f2301da-32be-4efb-99de-743a38756c7d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hannah Winter", - "company": "Unologic", - "phone": "885-535-2986", - "email": "hannah@unologic.com" - }, - { - "id": 4718, - "guid": "57dcd6bd-59b9-4a49-8721-99a4108a5293", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Owen", - "company": "Mescatron", - "phone": "878-525-2917", - "email": "brooklyn@mescatron.com" - }, - { - "id": 4719, - "guid": "d141d161-6d45-4a58-924c-d5d46d501cbb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Miers", - "company": "Rapigrafix", - "phone": "819-506-2939", - "email": "kylie@rapigrafix.com" - }, - { - "id": 4720, - "guid": "4dc9a26d-dd6f-47df-9c00-58dc589edee4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Carrington", - "company": "Inridium", - "phone": "880-439-2651", - "email": "peyton@inridium.com" - }, - { - "id": 4721, - "guid": "86d92a76-b3a0-479b-b27a-6e6c199012f6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Gilmore", - "company": "Qualserve", - "phone": "855-432-2137", - "email": "andrea@qualserve.com" - }, - { - "id": 4722, - "guid": "e33c4fda-8667-4e74-a70d-34b052ae28db", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Carroll", - "company": "RoboAerlogix", - "phone": "854-555-3292", - "email": "mariah@roboaerlogix.com" - }, - { - "id": 4723, - "guid": "c09a8874-d044-4e37-a780-3e32f79f1a88", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Peyton Hailey", - "company": "Unologic", - "phone": "858-500-2216", - "email": "peyton@unologic.com" - }, - { - "id": 4724, - "guid": "b9c0bd0f-6dd1-4e7e-8b9e-771bd914d2a7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria White", - "company": "RoboAerlogix", - "phone": "884-595-2524", - "email": "maria@roboaerlogix.com" - }, - { - "id": 4725, - "guid": "dbc3b109-6d31-4a8f-a200-c963c1ae9d7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hailey Ward", - "company": "Safetrust", - "phone": "849-542-3108", - "email": "hailey@safetrust.com" - }, - { - "id": 4726, - "guid": "f434343e-52b4-4825-a1a1-d067a2ba8c14", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Walkman", - "company": "Fibrotouch", - "phone": "849-559-2360", - "email": "alexa@fibrotouch.com" - }, - { - "id": 4727, - "guid": "f6f342e7-5a89-4d13-8cc9-91a1b767657d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Goodman", - "company": "Unconix", - "phone": "805-599-2404", - "email": "khloe@unconix.com" - }, - { - "id": 4728, - "guid": "7a6efff7-14a1-46db-8d79-c4c19412b924", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Vance", - "company": "iOptystix", - "phone": "822-451-2027", - "email": "emma@ioptystix.com" - }, - { - "id": 4729, - "guid": "f8702456-e73f-4c70-8d74-4cfd4c2ce665", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Hailey", - "company": "Anaframe", - "phone": "894-509-2474", - "email": "claire@anaframe.com" - }, - { - "id": 4730, - "guid": "6d83e2d3-14a1-4a2c-bb92-0660d9b2e56b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ariana Croftoon", - "company": "Unconix", - "phone": "838-579-2237", - "email": "ariana@unconix.com" - }, - { - "id": 4731, - "guid": "d440c3fe-b829-4e92-b4f4-90b0924eec37", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Natalie Wainwright", - "company": "Conotomics", - "phone": "842-457-3708", - "email": "natalie@conotomics.com" - }, - { - "id": 4732, - "guid": "6dd719d2-c1ef-4b7d-824b-2e1bb1daf8ca", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Genesis Wainwright", - "company": "Gigaura", - "phone": "832-449-3440", - "email": "genesis@gigaura.com" - }, - { - "id": 4733, - "guid": "f597302a-f91c-497f-a81f-e8faf728bd3a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Charlson", - "company": "OpKeycomm", - "phone": "834-533-2913", - "email": "sophie@opkeycomm.com" - }, - { - "id": 4734, - "guid": "7dea7fab-f63d-4862-9ac9-358827c0b2af", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Goodman", - "company": "iSkyvaco", - "phone": "829-498-3404", - "email": "zoey@iskyvaco.com" - }, - { - "id": 4735, - "guid": "4fcb743b-f244-46ec-b2fb-816b07fdfad2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sofia Carroll", - "company": "SysVenamerica", - "phone": "806-400-3684", - "email": "sofia@sysvenamerica.com" - }, - { - "id": 4736, - "guid": "5839d68e-a5d0-4932-a952-f6b46b0c6d10", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Winter", - "company": "Transtouch", - "phone": "873-593-3882", - "email": "lauren@transtouch.com" - }, - { - "id": 4737, - "guid": "fb642745-b1cd-4a12-926b-7eb7ddeb6429", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Miller", - "company": "Openserve", - "phone": "895-519-3046", - "email": "aubrey@openserve.com" - }, - { - "id": 4738, - "guid": "77a7f68f-a906-474f-8a68-52c5834a42c2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna White", - "company": "Syssoft", - "phone": "827-488-3357", - "email": "arianna@syssoft.com" - }, - { - "id": 4739, - "guid": "e9bc5c23-6df3-4587-b24a-63d1806f822c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Hailey", - "company": "Westmedia", - "phone": "899-468-3072", - "email": "kaitlyn@westmedia.com" - }, - { - "id": 4740, - "guid": "8e517093-f3a0-4fc7-90cf-82636850444e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Warren", - "company": "Steganoconiche", - "phone": "888-469-3761", - "email": "alexandra@steganoconiche.com" - }, - { - "id": 4741, - "guid": "ea1c2167-449c-4d04-bcc7-b0b01a0f7216", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Haig", - "company": "Enlogia", - "phone": "819-427-2531", - "email": "sophie@enlogia.com" - }, - { - "id": 4742, - "guid": "b1d16c98-44f4-4182-a14f-d80733b379e9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Fisher", - "company": "Multitiqua", - "phone": "812-513-2941", - "email": "leah@multitiqua.com" - }, - { - "id": 4743, - "guid": "48c0d26e-ab4e-4d26-b50b-d5f8dde833d6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia White", - "company": "OpKeycomm", - "phone": "807-531-3497", - "email": "olivia@opkeycomm.com" - }, - { - "id": 4744, - "guid": "13ace08f-88b8-4df9-a9ee-c5a313cf40dd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Ford", - "company": "Infragraph", - "phone": "887-577-3140", - "email": "leah@infragraph.com" - }, - { - "id": 4745, - "guid": "ed406285-7062-4d84-86d6-731a69abcd1f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Gerald", - "company": "Quintegrity", - "phone": "827-520-2631", - "email": "alexis@quintegrity.com" - }, - { - "id": 4746, - "guid": "3fb5acd1-fac6-4353-83c6-518b4ab3d483", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Timmons", - "company": "Skydata", - "phone": "842-568-2017", - "email": "kaitlyn@skydata.com" - }, - { - "id": 4747, - "guid": "aec0fa81-6ed4-451c-b26f-e2d6486076a0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Higgins", - "company": "Allphysiche", - "phone": "855-556-3865", - "email": "gabrielle@allphysiche.com" - }, - { - "id": 4748, - "guid": "9c2b7c4d-8642-46c7-8223-603a12c181fe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Nash", - "company": "Navivacs", - "phone": "890-519-2810", - "email": "mackenzie@navivacs.com" - }, - { - "id": 4749, - "guid": "9ece28ac-b916-4840-9060-3b4da18eda82", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Higgins", - "company": "iMedconik", - "phone": "876-452-3343", - "email": "camila@imedconik.com" - }, - { - "id": 4750, - "guid": "8b212d40-e177-417b-b585-25154450e4c9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Vaughan", - "company": "SysVenamerica", - "phone": "812-516-2043", - "email": "mia@sysvenamerica.com" - }, - { - "id": 4751, - "guid": "289bb6dc-d944-4ed6-9f2b-419d9a4f5cc5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Hamphrey", - "company": "Steganoconiche", - "phone": "831-500-3318", - "email": "bella@steganoconiche.com" - }, - { - "id": 4752, - "guid": "ae783d49-514e-405d-8163-f372fb1a14c0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aaliyah Hailey", - "company": "Idmax", - "phone": "888-469-3238", - "email": "aaliyah@idmax.com" - }, - { - "id": 4753, - "guid": "76c62354-33da-4ab6-9754-92c176eca73e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Young", - "company": "Titanigraf", - "phone": "885-534-2547", - "email": "melanie@titanigraf.com" - }, - { - "id": 4754, - "guid": "fb5f094d-d884-4508-9439-55cb07ea33f8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Trinity Vaughan", - "company": "Unconix", - "phone": "854-574-2861", - "email": "trinity@unconix.com" - }, - { - "id": 4755, - "guid": "2d9028b5-2314-413b-863a-6bbe18d2a794", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Freeman", - "company": "eEyetanic", - "phone": "879-407-2555", - "email": "aubrey@eeyetanic.com" - }, - { - "id": 4756, - "guid": "6249ba6c-2908-4275-beca-5b67ea52354e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Chapman", - "company": "Truegate", - "phone": "846-445-3198", - "email": "destiny@truegate.com" - }, - { - "id": 4757, - "guid": "3aa4497c-1fe5-4308-8282-a5c2993a9d08", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Peyton Conors", - "company": "Sontopia", - "phone": "871-478-3019", - "email": "peyton@sontopia.com" - }, - { - "id": 4758, - "guid": "78329a99-a23d-43f1-b11a-bad8ceea0e10", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Ford", - "company": "Conrama", - "phone": "865-400-2959", - "email": "bailey@conrama.com" - }, - { - "id": 4759, - "guid": "a1f8b173-3870-42d8-a5ea-d3f32ab0c026", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria Molligan", - "company": "Cryptotegrity", - "phone": "877-410-3493", - "email": "victoria@cryptotegrity.com" - }, - { - "id": 4760, - "guid": "0daa9a0f-8017-45b9-8550-7280603a4f01", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Nathan", - "company": "Fibrotopia", - "phone": "874-416-2705", - "email": "alyssa@fibrotopia.com" - }, - { - "id": 4761, - "guid": "f3c90253-343f-4084-8ba4-c3b1bae7287d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Thornton", - "company": "Titanigraf", - "phone": "880-425-2438", - "email": "layla@titanigraf.com" - }, - { - "id": 4762, - "guid": "38636353-b053-4554-839e-fd85b2d04156", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Ogden", - "company": "Inridium", - "phone": "818-574-3012", - "email": "hannah@inridium.com" - }, - { - "id": 4763, - "guid": "95300726-e4d6-40c5-9c26-bab57b2fab62", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Crossman", - "company": "Interliant", - "phone": "894-422-2474", - "email": "gabriella@interliant.com" - }, - { - "id": 4764, - "guid": "27d05c58-c82c-4d63-a515-77dd749773ec", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Chandter", - "company": "iMedconik", - "phone": "897-532-2229", - "email": "destiny@imedconik.com" - }, - { - "id": 4765, - "guid": "7877c3b7-a433-435a-ac2b-f343cc0c812e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie White", - "company": "Tekcar", - "phone": "867-555-3652", - "email": "natalie@tekcar.com" - }, - { - "id": 4766, - "guid": "4e75fad6-1acd-4f3e-9b44-349fa358495c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Bush", - "company": "Aprama", - "phone": "833-451-2639", - "email": "sophie@aprama.com" - }, - { - "id": 4767, - "guid": "27f00dcb-7343-4ece-b311-5e02a32bc69d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Natalie Daniels", - "company": "Openserve", - "phone": "802-580-2064", - "email": "natalie@openserve.com" - }, - { - "id": 4768, - "guid": "2fd3646b-449b-428e-aa54-bfaf6c3e0ce7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Youmans", - "company": "Safeagra", - "phone": "898-504-2212", - "email": "sophia@safeagra.com" - }, - { - "id": 4769, - "guid": "95feb8ab-fb4c-4d0f-b373-0eece0690af8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Miller", - "company": "Raylog", - "phone": "836-475-2207", - "email": "sophia@raylog.com" - }, - { - "id": 4770, - "guid": "a86e1fa9-d4f0-457f-8019-559efd0d12d8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Hoggarth", - "company": "Fibrotouch", - "phone": "888-513-2717", - "email": "hailey@fibrotouch.com" - }, - { - "id": 4771, - "guid": "1a534d0e-1ee1-490f-b9cd-c33019d6cccb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Waller", - "company": "Robotomic", - "phone": "802-436-3972", - "email": "sydney@robotomic.com" - }, - { - "id": 4772, - "guid": "ea9e711d-0b0a-479e-8197-f790155e1145", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ava Murphy", - "company": "Raylog", - "phone": "872-562-2863", - "email": "ava@raylog.com" - }, - { - "id": 4773, - "guid": "abd5f048-4ce7-42e8-a3b2-0d56eb842643", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Winter", - "company": "Titanirola", - "phone": "898-412-3241", - "email": "katelyn@titanirola.com" - }, - { - "id": 4774, - "guid": "0f213619-3a00-46f8-8ee7-a01b496f85c0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Watson", - "company": "Fibroserve", - "phone": "893-549-3043", - "email": "amelia@fibroserve.com" - }, - { - "id": 4775, - "guid": "0450674b-0ae1-43d1-b35e-86b0f018a8f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Ward", - "company": "Allphysiche", - "phone": "833-585-2558", - "email": "zoe@allphysiche.com" - }, - { - "id": 4776, - "guid": "9ec65b8f-7385-4b91-8b1b-77209f43ae1f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Waller", - "company": "eSteganoergy", - "phone": "857-481-3071", - "email": "gabriella@esteganoergy.com" - }, - { - "id": 4777, - "guid": "2bbc069c-f2b8-41d6-b1d5-f12a9d769bf8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bailey Thorndike", - "company": "RoboAerlogix", - "phone": "813-449-3818", - "email": "bailey@roboaerlogix.com" - }, - { - "id": 4778, - "guid": "07937682-e057-40d2-b936-b2522f178d39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Gilbert", - "company": "iOptystix", - "phone": "866-490-3895", - "email": "ava@ioptystix.com" - }, - { - "id": 4779, - "guid": "8f923403-d01e-4659-8ced-c12b73cf4a3c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Wood", - "company": "Jamconik", - "phone": "848-521-2037", - "email": "madison@jamconik.com" - }, - { - "id": 4780, - "guid": "8ee5f065-576e-44b2-aec3-5003e9f76817", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lillian Goldman", - "company": "Truetomic", - "phone": "811-515-3940", - "email": "lillian@truetomic.com" - }, - { - "id": 4781, - "guid": "f45c5abd-787c-490d-9262-b9759cd3d1c5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Gilson", - "company": "Aprama", - "phone": "828-505-2492", - "email": "morgan@aprama.com" - }, - { - "id": 4782, - "guid": "f46a847e-f648-447b-914c-6c4baf430fcd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Bush", - "company": "Robotemplate", - "phone": "831-466-3670", - "email": "isabelle@robotemplate.com" - }, - { - "id": 4783, - "guid": "e9656584-43a7-4099-8021-90beb77d4540", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Miers", - "company": "Technogra", - "phone": "830-490-2203", - "email": "isabella@technogra.com" - }, - { - "id": 4784, - "guid": "27794c57-10aa-4226-8206-d8ec5f1507ea", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte WifKinson", - "company": "Safetrust", - "phone": "846-432-3176", - "email": "charlotte@safetrust.com" - }, - { - "id": 4785, - "guid": "a0542ff0-c645-4ae3-be01-ea98193add0b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Day", - "company": "Fibrotouch", - "phone": "812-560-3888", - "email": "peyton@fibrotouch.com" - }, - { - "id": 4786, - "guid": "cf35ba18-2452-4d6d-99a8-b20303756a49", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Carter", - "company": "Cryptotegrity", - "phone": "859-551-3382", - "email": "caroline@cryptotegrity.com" - }, - { - "id": 4787, - "guid": "2649d513-99d5-4f34-88ee-a3afc762ea8f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Audrey Creighton", - "company": "iEnland", - "phone": "822-424-2527", - "email": "audrey@ienland.com" - }, - { - "id": 4788, - "guid": "7b5965ae-1d15-4996-b89c-4cc43c9e430c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Miers", - "company": "Infraique", - "phone": "811-456-2332", - "email": "kaylee@infraique.com" - }, - { - "id": 4789, - "guid": "42446ab1-66a1-40c8-8ccd-af46056a7871", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Cook", - "company": "Westgate", - "phone": "893-581-2359", - "email": "madeline@westgate.com" - }, - { - "id": 4790, - "guid": "3dd07854-7014-4de7-a25b-00bc2b41acd3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Galbraith", - "company": "Tekcar", - "phone": "823-547-2059", - "email": "samantha@tekcar.com" - }, - { - "id": 4791, - "guid": "020df386-90e8-4656-890e-1bfab7c6a284", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Conors", - "company": "Teraserv", - "phone": "815-427-3565", - "email": "alexis@teraserv.com" - }, - { - "id": 4792, - "guid": "3c610c41-a1d5-4bbf-b45a-0ea6305623d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Molligan", - "company": "Truetomic", - "phone": "830-421-2190", - "email": "lillian@truetomic.com" - }, - { - "id": 4793, - "guid": "9c15eb83-a002-44bf-b9c3-cdffbc2e23ab", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Hancock", - "company": "Allnet", - "phone": "801-523-2530", - "email": "sofia@allnet.com" - }, - { - "id": 4794, - "guid": "7d0b0f20-a5b1-4279-91bc-562789b83b38", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Freeman", - "company": "Dynarama", - "phone": "884-415-3256", - "email": "charlotte@dynarama.com" - }, - { - "id": 4795, - "guid": "0de8f968-e288-4d62-a5f3-4dff49d9c3f2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Gill", - "company": "Teknoplexon", - "phone": "851-574-2886", - "email": "zoe@teknoplexon.com" - }, - { - "id": 4796, - "guid": "9e385297-3b34-42ca-824e-7d53bb21abef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Miller", - "company": "Conotomics", - "phone": "823-598-2007", - "email": "sophia@conotomics.com" - }, - { - "id": 4797, - "guid": "6357dff9-db11-4853-90d3-1f887ca5c3fa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madelyn Vance", - "company": "Anagraph", - "phone": "886-581-3261", - "email": "madelyn@anagraph.com" - }, - { - "id": 4798, - "guid": "3c28f6f4-d17f-453e-9cb5-b8f0fd09d813", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Miers", - "company": "Westtomik", - "phone": "807-469-3235", - "email": "trinity@westtomik.com" - }, - { - "id": 4799, - "guid": "960d80ea-eca9-4872-b270-0c0f32add00d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Cramer", - "company": "Conrama", - "phone": "805-514-2604", - "email": "claire@conrama.com" - }, - { - "id": 4800, - "guid": "1e575b7d-c0f4-414f-a0a4-cfedd1e7bf46", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Higgins", - "company": "iEnland", - "phone": "860-592-2882", - "email": "isabelle@ienland.com" - }, - { - "id": 4801, - "guid": "5e1e3f59-bbd7-413c-b2b2-b1cd481a0e20", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Sherlock", - "company": "Fibrotopia", - "phone": "875-583-3601", - "email": "ava@fibrotopia.com" - }, - { - "id": 4802, - "guid": "74925249-09a3-4851-8e9c-a10dfe674a0f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Morrison", - "company": "Infraique", - "phone": "835-436-3674", - "email": "serenity@infraique.com" - }, - { - "id": 4803, - "guid": "e0242b4b-d02f-4dc0-b1ba-46e9c62b1f91", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Gilmore", - "company": "Conotomics", - "phone": "881-414-3081", - "email": "mya@conotomics.com" - }, - { - "id": 4804, - "guid": "287afa27-1c1d-4ebc-8dcf-e111b266e7a9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jocelyn Turner", - "company": "Orthosoft", - "phone": "840-497-2147", - "email": "jocelyn@orthosoft.com" - }, - { - "id": 4805, - "guid": "d77ed25c-121d-4dbb-aa5f-f5e13963d208", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Haig", - "company": "Textiqua", - "phone": "838-525-2032", - "email": "makayla@textiqua.com" - }, - { - "id": 4806, - "guid": "729957df-7faa-4826-bf03-d6a603bdd622", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Gilbert", - "company": "Superscope", - "phone": "810-589-2213", - "email": "grace@superscope.com" - }, - { - "id": 4807, - "guid": "ebe7ba8b-a2e1-45d5-8c1a-ba745ca588ca", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Conors", - "company": "iQualcar", - "phone": "825-458-3205", - "email": "paige@iqualcar.com" - }, - { - "id": 4808, - "guid": "0f56eec1-2121-448b-8728-e64a163be62f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Charlson", - "company": "Safeagra", - "phone": "858-421-2594", - "email": "molly@safeagra.com" - }, - { - "id": 4809, - "guid": "0302d62e-e8f7-4bc1-8967-acd1cf15fd74", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Bush", - "company": "Technogra", - "phone": "830-494-2101", - "email": "isabelle@technogra.com" - }, - { - "id": 4810, - "guid": "a5f0fdd3-3807-4faf-8e53-73e8deeccfac", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Youmans", - "company": "iOptystix", - "phone": "819-449-3315", - "email": "brooklyn@ioptystix.com" - }, - { - "id": 4811, - "guid": "39ac09a1-45e4-4374-8613-b59409408ff9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia WifKinson", - "company": "InfoAirway", - "phone": "862-488-2151", - "email": "olivia@infoairway.com" - }, - { - "id": 4812, - "guid": "6359afdc-4216-4e73-a0c3-1a090157c4d4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Nathan", - "company": "Turbomart", - "phone": "845-558-3472", - "email": "camila@turbomart.com" - }, - { - "id": 4813, - "guid": "6b64539c-47af-47ba-9f50-5ca25c67dc9a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Waller", - "company": "Idmax", - "phone": "866-574-2077", - "email": "brooke@idmax.com" - }, - { - "id": 4814, - "guid": "fd77756f-ca49-4096-b7bc-1685df837108", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Warren", - "company": "Raylog", - "phone": "871-506-2288", - "email": "genesis@raylog.com" - }, - { - "id": 4815, - "guid": "f3714650-831b-4237-ba18-960e18c55073", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kimberly Webster", - "company": "Fibroserve", - "phone": "802-443-2236", - "email": "kimberly@fibroserve.com" - }, - { - "id": 4816, - "guid": "322a98f4-f50f-4081-9ecf-027c987ea5f7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Timmons", - "company": "Turbomart", - "phone": "836-476-3137", - "email": "makayla@turbomart.com" - }, - { - "id": 4817, - "guid": "11ff06ca-a943-454a-8fcd-52a63f890949", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Vance", - "company": "Infragraph", - "phone": "840-469-2719", - "email": "kimberly@infragraph.com" - }, - { - "id": 4818, - "guid": "8daec70a-069e-484a-9f27-28f639e4c1e1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Carrington", - "company": "Compuamerica", - "phone": "822-401-2632", - "email": "julia@compuamerica.com" - }, - { - "id": 4819, - "guid": "7a774cf2-4858-477a-9457-832f273df585", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Creighton", - "company": "Openserve", - "phone": "861-419-3157", - "email": "arianna@openserve.com" - }, - { - "id": 4820, - "guid": "bd7fd0ac-01fe-4653-bd93-a9e7a7f618f8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Youmans", - "company": "Raylog", - "phone": "866-559-2370", - "email": "mackenzie@raylog.com" - }, - { - "id": 4821, - "guid": "c17ac8c3-c0eb-4811-a93e-f277b8e7901d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Oldman", - "company": "Pacwest", - "phone": "820-482-2715", - "email": "serenity@pacwest.com" - }, - { - "id": 4822, - "guid": "76e5cebd-726b-46a7-8c8f-1d07eebbed95", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney Ogden", - "company": "eSteganoergy", - "phone": "834-556-3035", - "email": "sydney@esteganoergy.com" - }, - { - "id": 4823, - "guid": "189ef840-c969-4099-bf72-ecb3b20ae961", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Charlson", - "company": "InfoAirway", - "phone": "854-530-2495", - "email": "kimberly@infoairway.com" - }, - { - "id": 4824, - "guid": "3420e1aa-0598-4d21-b413-66ae67ff0562", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Brickman", - "company": "Qualserve", - "phone": "816-416-3166", - "email": "sophia@qualserve.com" - }, - { - "id": 4825, - "guid": "816c3dd8-e87c-4957-944a-e148ccac26a4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Nathan", - "company": "Truetomic", - "phone": "825-568-2353", - "email": "jasmine@truetomic.com" - }, - { - "id": 4826, - "guid": "6573fe58-b352-461f-acfe-c40d18b02f05", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila Nathan", - "company": "Nanobanc", - "phone": "857-407-2131", - "email": "camila@nanobanc.com" - }, - { - "id": 4827, - "guid": "32e57566-52d4-421b-abd0-4e876ffb0776", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Chapman", - "company": "Allphysiche", - "phone": "864-456-3441", - "email": "arianna@allphysiche.com" - }, - { - "id": 4828, - "guid": "307e55b6-e52e-4bf8-b871-2f5cb9d50e39", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Milton", - "company": "Westtomik", - "phone": "825-562-2169", - "email": "alexa@westtomik.com" - }, - { - "id": 4829, - "guid": "046c9bf0-17a5-4325-865a-9a37f0291047", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Grace Turner", - "company": "RoboAerlogix", - "phone": "866-481-3004", - "email": "grace@roboaerlogix.com" - }, - { - "id": 4830, - "guid": "2eb33fd3-e5d6-4393-8165-84d503b5ed8a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Genesis Brickman", - "company": "eSteganoergy", - "phone": "822-483-3583", - "email": "genesis@esteganoergy.com" - }, - { - "id": 4831, - "guid": "2438311d-5d7e-4e38-80c5-6e36c428a219", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Hancock", - "company": "Westmedia", - "phone": "811-546-2187", - "email": "sydney@westmedia.com" - }, - { - "id": 4832, - "guid": "48e3c84a-3dd4-47ae-9866-60c0fe665845", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Vance", - "company": "US Infratouch", - "phone": "868-435-3150", - "email": "mya@us infratouch.com" - }, - { - "id": 4833, - "guid": "c87e1cc1-942e-4590-9a32-114589633ed4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Walkman", - "company": "Systheon", - "phone": "804-531-2101", - "email": "ava@systheon.com" - }, - { - "id": 4834, - "guid": "72d781b2-bf7f-4d08-91ee-97d3f0e830d7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Freeman", - "company": "InfoAirway", - "phone": "823-459-3232", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 4835, - "guid": "c4a5afe5-28aa-4323-a369-cd9baa0ed032", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Ogden", - "company": "Unologic", - "phone": "806-422-2137", - "email": "arianna@unologic.com" - }, - { - "id": 4836, - "guid": "f64833d6-cae1-4024-ab7e-4e6afb60e01d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Autumn Brickman", - "company": "Aluco", - "phone": "894-596-2046", - "email": "autumn@aluco.com" - }, - { - "id": 4837, - "guid": "03ad11d6-31f6-47d8-bdeb-e68ceda478cc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Ogden", - "company": "iQualcar", - "phone": "888-503-2336", - "email": "hailey@iqualcar.com" - }, - { - "id": 4838, - "guid": "b98d579d-72e7-45ce-b684-568dc578ccb6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Walkman", - "company": "Textiqua", - "phone": "812-427-3742", - "email": "paige@textiqua.com" - }, - { - "id": 4839, - "guid": "98eff9ce-9106-4640-a1c5-97f5f9395673", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Harrison", - "company": "US Infratouch", - "phone": "892-521-3416", - "email": "isabelle@us infratouch.com" - }, - { - "id": 4840, - "guid": "fe1325f0-6af6-4e1f-a943-c857e5893f2b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Chandter", - "company": "Hypervaco", - "phone": "816-406-2462", - "email": "molly@hypervaco.com" - }, - { - "id": 4841, - "guid": "0d25fafc-a591-49a5-a92c-172f37696e85", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Vance", - "company": "Mescatron", - "phone": "815-591-2813", - "email": "andrea@mescatron.com" - }, - { - "id": 4842, - "guid": "22c02530-2133-46ee-9ef4-80dbed0698e8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoe Turner", - "company": "Allphysiche", - "phone": "892-498-3366", - "email": "zoe@allphysiche.com" - }, - { - "id": 4843, - "guid": "296d0815-f6cd-4602-b405-d289e7fb114a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Gibbs", - "company": "Pacwest", - "phone": "847-499-3921", - "email": "gabriella@pacwest.com" - }, - { - "id": 4844, - "guid": "38378ae4-ac22-4a45-bc4e-8a5bf447f48c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Smith", - "company": "Fibrotouch", - "phone": "846-439-3367", - "email": "abigail@fibrotouch.com" - }, - { - "id": 4845, - "guid": "6ebedb4b-c0b3-4ea5-b933-0672f7ced328", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jessica Sherlock", - "company": "iOptystix", - "phone": "864-524-2942", - "email": "jessica@ioptystix.com" - }, - { - "id": 4846, - "guid": "2d814d52-fbd2-4524-afbb-87be099b8dae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Destiny WifKinson", - "company": "SysVenamerica", - "phone": "805-563-2824", - "email": "destiny@sysvenamerica.com" - }, - { - "id": 4847, - "guid": "644da121-ebb7-4140-81fa-45ee824a76e7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Abramson", - "company": "Enlogia", - "phone": "845-423-3693", - "email": "ashley@enlogia.com" - }, - { - "id": 4848, - "guid": "544ad763-1f78-4a42-96dd-c934d5540c64", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Stanley", - "company": "Dynarama", - "phone": "864-512-2585", - "email": "alexis@dynarama.com" - }, - { - "id": 4849, - "guid": "3f41d782-3539-478b-956f-83b04d959846", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Warren", - "company": "InfoAirway", - "phone": "887-593-2122", - "email": "riley@infoairway.com" - }, - { - "id": 4850, - "guid": "0bc4c961-c73d-43c7-b1c7-247d5bdad670", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Thomson", - "company": "Ventanium", - "phone": "808-595-3580", - "email": "madelyn@ventanium.com" - }, - { - "id": 4851, - "guid": "d31039a4-8187-445f-8c95-3e7be3b0444d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Gilson", - "company": "Turbomart", - "phone": "809-412-2760", - "email": "isabella@turbomart.com" - }, - { - "id": 4852, - "guid": "826e57b8-3eaa-4c95-8879-1e8218bc3692", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bella Thorndike", - "company": "Ventanium", - "phone": "895-437-2119", - "email": "bella@ventanium.com" - }, - { - "id": 4853, - "guid": "da1eb1fe-74da-4c94-b0f6-c8076e5a70b2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Thorndike", - "company": "Truetomic", - "phone": "893-549-3380", - "email": "sarah@truetomic.com" - }, - { - "id": 4854, - "guid": "a4ee4c44-f0ef-47e8-8c3e-c43afe45c40b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Carrington", - "company": "Robotemplate", - "phone": "850-476-3185", - "email": "sydney@robotemplate.com" - }, - { - "id": 4855, - "guid": "a54a2bf5-d545-4af6-a078-eda1b0c1ea87", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Vance", - "company": "Dynarama", - "phone": "802-500-2085", - "email": "destiny@dynarama.com" - }, - { - "id": 4856, - "guid": "bc9aa851-bccb-473c-9168-9a1a0fa1a108", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Carroll", - "company": "Skydata", - "phone": "872-561-2118", - "email": "katherine@skydata.com" - }, - { - "id": 4857, - "guid": "92a4e4f3-9091-415c-8776-22169f289696", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Stanley", - "company": "Skydata", - "phone": "887-566-3412", - "email": "valeria@skydata.com" - }, - { - "id": 4858, - "guid": "6797c74b-318b-4bcd-8e3d-5323a7d5b068", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Freeman", - "company": "Genland", - "phone": "826-495-2050", - "email": "sophia@genland.com" - }, - { - "id": 4859, - "guid": "2e1100c2-9927-4b94-a16e-e0496fa4071c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Nelson", - "company": "Jamrola", - "phone": "890-533-2924", - "email": "destiny@jamrola.com" - }, - { - "id": 4860, - "guid": "ef79c861-f6c1-4370-95b5-c60293855751", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabrielle Gate", - "company": "Netsystems", - "phone": "835-462-2814", - "email": "gabrielle@netsystems.com" - }, - { - "id": 4861, - "guid": "18d8d653-2f6e-4f4d-b5f9-8f350d173bd9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Vance", - "company": "Generola", - "phone": "890-495-3761", - "email": "jocelyn@generola.com" - }, - { - "id": 4862, - "guid": "730128d8-6ad4-4257-96b4-92fe630afcc0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra White", - "company": "Conotomics", - "phone": "897-471-3858", - "email": "alexandra@conotomics.com" - }, - { - "id": 4863, - "guid": "24729f6a-d279-4b11-9712-5daa0fdd70c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Thomson", - "company": "Entcast", - "phone": "808-401-3414", - "email": "madelyn@entcast.com" - }, - { - "id": 4864, - "guid": "7bc79bf6-9860-48d4-b334-adda5eb1539a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Wesley", - "company": "Pacwest", - "phone": "839-424-2874", - "email": "kylie@pacwest.com" - }, - { - "id": 4865, - "guid": "f5ba824f-a51c-4d54-9415-c9bc16cdb283", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Wainwright", - "company": "Skydata", - "phone": "805-592-2295", - "email": "makayla@skydata.com" - }, - { - "id": 4866, - "guid": "0ee3b654-7d0c-4509-9513-3696caf55f5b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabrielle Sheldon", - "company": "Westmedia", - "phone": "823-577-2299", - "email": "gabrielle@westmedia.com" - }, - { - "id": 4867, - "guid": "5b43c223-a54e-41bf-b27c-3083c88c8898", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Osborne", - "company": "Videobanc", - "phone": "804-469-3448", - "email": "gabriella@videobanc.com" - }, - { - "id": 4868, - "guid": "9249fc85-29de-475e-a89c-fa8743633f62", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Molligan", - "company": "Steganoconiche", - "phone": "841-598-3088", - "email": "alexa@steganoconiche.com" - }, - { - "id": 4869, - "guid": "f4d30e80-8b5a-4cd0-966b-2b195b616c09", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Campbell", - "company": "OpKeycomm", - "phone": "832-413-2174", - "email": "maya@opkeycomm.com" - }, - { - "id": 4870, - "guid": "127899aa-cb79-4c9b-be2c-7aab12ea6308", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Hodges", - "company": "Unologic", - "phone": "865-587-2894", - "email": "emily@unologic.com" - }, - { - "id": 4871, - "guid": "40585d45-9bd4-4bdd-a8df-778500d72b33", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Miller", - "company": "Technogra", - "phone": "880-566-2584", - "email": "trinity@technogra.com" - }, - { - "id": 4872, - "guid": "53250ce8-6c03-49e0-8bb4-cf3b21aede7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Timmons", - "company": "Dynarama", - "phone": "890-598-3177", - "email": "hannah@dynarama.com" - }, - { - "id": 4873, - "guid": "86ae4362-2dd8-4540-80ca-224cac57156f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Gilmore", - "company": "Cryptotegrity", - "phone": "841-578-3259", - "email": "aubrey@cryptotegrity.com" - }, - { - "id": 4874, - "guid": "e619df8c-cf17-44a8-bdb5-13b6aad6aff8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Miller", - "company": "US Omnigraphik", - "phone": "800-434-2906", - "email": "olivia@us omnigraphik.com" - }, - { - "id": 4875, - "guid": "ff2d1062-a1db-4ffe-ba74-8d6d15893a7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Miller", - "company": "Compuamerica", - "phone": "863-503-3246", - "email": "autumn@compuamerica.com" - }, - { - "id": 4876, - "guid": "0f04f50b-8879-498d-b474-5c173b9d2749", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Gerald", - "company": "Genland", - "phone": "892-495-2536", - "email": "andrea@genland.com" - }, - { - "id": 4877, - "guid": "dc575cbe-9fa9-4ca3-bab1-4532fa5fb920", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kylie Hancock", - "company": "Westmedia", - "phone": "871-444-3578", - "email": "kylie@westmedia.com" - }, - { - "id": 4878, - "guid": "f1bdf42d-5013-4100-a57a-c95ba333b641", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Oldman", - "company": "US Infratouch", - "phone": "843-435-3904", - "email": "lauren@us infratouch.com" - }, - { - "id": 4879, - "guid": "b3f73c2a-a671-4047-80dc-838c49799bb5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Carey", - "company": "Ameritron", - "phone": "849-526-2479", - "email": "gabriella@ameritron.com" - }, - { - "id": 4880, - "guid": "5eddd9e2-8433-499f-9a7f-8b961ed9813e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Higgins", - "company": "Thermotomic", - "phone": "888-573-3674", - "email": "autumn@thermotomic.com" - }, - { - "id": 4881, - "guid": "5b79f553-e223-475b-8356-4fb2b3a7470b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Oswald", - "company": "Westmedia", - "phone": "884-549-2766", - "email": "sydney@westmedia.com" - }, - { - "id": 4882, - "guid": "e1abcc78-d924-45af-9412-f8106ed833d0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Gerald", - "company": "Inridium", - "phone": "899-580-2179", - "email": "jasmine@inridium.com" - }, - { - "id": 4883, - "guid": "58b44a1b-8490-411a-82f0-9354761f85ce", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Goldman", - "company": "Genland", - "phone": "829-541-3470", - "email": "rachel@genland.com" - }, - { - "id": 4884, - "guid": "8323ccd6-6787-4d30-9118-c1aadf73b731", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Murphy", - "company": "Superscope", - "phone": "817-486-2248", - "email": "brooklyn@superscope.com" - }, - { - "id": 4885, - "guid": "d73dcfa9-67db-4741-880e-6dbee8753ea9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Thomson", - "company": "Teratopia", - "phone": "848-499-3808", - "email": "caroline@teratopia.com" - }, - { - "id": 4886, - "guid": "3589026e-ed29-4bca-b911-618b243c62ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Wallace", - "company": "Westgate", - "phone": "884-423-2028", - "email": "maria@westgate.com" - }, - { - "id": 4887, - "guid": "44a40f20-8bd3-496d-875f-e444dcf8993f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Oldridge", - "company": "RoboAerlogix", - "phone": "877-432-3764", - "email": "kayla@roboaerlogix.com" - }, - { - "id": 4888, - "guid": "c197deed-5e3d-4c00-aeea-53effd275c0a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Young", - "company": "Textiqua", - "phone": "870-528-2926", - "email": "sophie@textiqua.com" - }, - { - "id": 4889, - "guid": "85e73c6d-296b-44ea-b91b-4b0f3dbd495d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Fulton", - "company": "Superscope", - "phone": "864-595-2993", - "email": "addison@superscope.com" - }, - { - "id": 4890, - "guid": "427c78bd-2556-44a2-bc4c-91a2b416f158", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Oldman", - "company": "US Omnigraphik", - "phone": "899-400-3212", - "email": "zoey@us omnigraphik.com" - }, - { - "id": 4891, - "guid": "4f992a3e-f0e7-4fd9-b8ab-dfc0ac9ad658", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Cook", - "company": "Anagraph", - "phone": "832-594-3800", - "email": "ava@anagraph.com" - }, - { - "id": 4892, - "guid": "295b0d8d-7ba9-4285-b158-e29059339971", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Harrison", - "company": "Syssoft", - "phone": "820-404-2546", - "email": "natalie@syssoft.com" - }, - { - "id": 4893, - "guid": "a0cb15bc-300e-4b0c-9a3b-828d7f8e6e6d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Hodges", - "company": "Idmax", - "phone": "802-525-2976", - "email": "eva@idmax.com" - }, - { - "id": 4894, - "guid": "c3a6b3d5-bad5-45df-b25f-942639c19063", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Sheldon", - "company": "Teraserv", - "phone": "833-443-3425", - "email": "sophie@teraserv.com" - }, - { - "id": 4895, - "guid": "447a85fc-3d0d-48f9-9bf9-514f7621c17f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Harrison", - "company": "Conotomics", - "phone": "825-414-3773", - "email": "elizabeth@conotomics.com" - }, - { - "id": 4896, - "guid": "75f1e9d9-ee20-45a4-bf35-b36882e38817", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Charlson", - "company": "Robotemplate", - "phone": "883-509-2379", - "email": "chloe@robotemplate.com" - }, - { - "id": 4897, - "guid": "1d206fb0-d2f0-49af-a662-ac4e8b506802", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Harrison", - "company": "Celgra", - "phone": "892-538-2083", - "email": "aubrey@celgra.com" - }, - { - "id": 4898, - "guid": "deedeb21-5479-4d4c-ae05-9f28b8a9797d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Adamson", - "company": "Transtouch", - "phone": "870-538-3576", - "email": "alexis@transtouch.com" - }, - { - "id": 4899, - "guid": "dba4a2f6-cc9e-4932-96d0-51c61fd241cd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Oliver", - "company": "Truetomic", - "phone": "887-491-2045", - "email": "maria@truetomic.com" - }, - { - "id": 4900, - "guid": "fdbcb81e-d63d-4192-b2d4-40d8c8507076", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ella WifKinson", - "company": "Orthosoft", - "phone": "886-498-3080", - "email": "ella@orthosoft.com" - }, - { - "id": 4901, - "guid": "2037ce05-cdfb-468f-9be1-607dc7cee4a8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Oldridge", - "company": "Orthosoft", - "phone": "820-422-3735", - "email": "serenity@orthosoft.com" - }, - { - "id": 4902, - "guid": "8de7c025-91c3-486f-b170-9adcda93f265", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Fisher", - "company": "Systheon", - "phone": "802-585-2469", - "email": "victoria@systheon.com" - }, - { - "id": 4903, - "guid": "0cc1648c-00c5-4e61-8e99-47d64c335b51", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Freeman", - "company": "Qualserve", - "phone": "819-576-2547", - "email": "natalie@qualserve.com" - }, - { - "id": 4904, - "guid": "36b41129-f9e4-4c69-a7c6-38c6bca75116", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Young", - "company": "Entcast", - "phone": "889-491-2805", - "email": "genesis@entcast.com" - }, - { - "id": 4905, - "guid": "366ddff2-8644-4174-9821-253d8b74c767", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Chesterton", - "company": "Netsystems", - "phone": "848-489-2928", - "email": "vanessa@netsystems.com" - }, - { - "id": 4906, - "guid": "a0d792db-ecc2-4df3-be41-331a904cb0c9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Morrison", - "company": "Interliant", - "phone": "820-588-3006", - "email": "morgan@interliant.com" - }, - { - "id": 4907, - "guid": "4c4ea241-5635-4177-b45c-1f7775475cbb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Freeman", - "company": "eEyetanic", - "phone": "849-569-2650", - "email": "julia@eeyetanic.com" - }, - { - "id": 4908, - "guid": "eef8d454-aa09-4834-ac27-ea8b64b9d3e2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Croftoon", - "company": "Raylog", - "phone": "809-496-2144", - "email": "kimberly@raylog.com" - }, - { - "id": 4909, - "guid": "13e85c33-f850-44c9-b473-43a84bc6204b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Winter", - "company": "Openserve", - "phone": "815-437-3100", - "email": "claire@openserve.com" - }, - { - "id": 4910, - "guid": "9dca4b51-2ff0-479f-a42d-2470d855c546", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Miln", - "company": "Aluco", - "phone": "876-559-2643", - "email": "allison@aluco.com" - }, - { - "id": 4911, - "guid": "91043085-f53a-4b8a-a02f-51db9ea906e5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Hardman", - "company": "Safetrust", - "phone": "884-465-3998", - "email": "kaylee@safetrust.com" - }, - { - "id": 4912, - "guid": "8727cdba-4adf-4af6-8fd4-f60e7f085d2d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Crossman", - "company": "iOptystix", - "phone": "842-539-3821", - "email": "katherine@ioptystix.com" - }, - { - "id": 4913, - "guid": "023b712d-448c-493f-ba1e-0ee84372a1ed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Nelson", - "company": "Transtouch", - "phone": "829-527-3534", - "email": "elizabeth@transtouch.com" - }, - { - "id": 4914, - "guid": "eae82375-6565-4376-8ad6-640f31150d0d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Wesley", - "company": "Infragraph", - "phone": "821-582-2904", - "email": "zoey@infragraph.com" - }, - { - "id": 4915, - "guid": "f53452a8-a26d-422b-b1cc-d22278e4a0e4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Hancock", - "company": "Skydata", - "phone": "857-599-2476", - "email": "morgan@skydata.com" - }, - { - "id": 4916, - "guid": "95371d53-f971-4951-947e-d9e1a65a9202", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexa Hardman", - "company": "Fibrotouch", - "phone": "899-533-2132", - "email": "alexa@fibrotouch.com" - }, - { - "id": 4917, - "guid": "0419aa86-9c9a-4024-b0f1-5362ca77db9e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Stanley", - "company": "Dynarama", - "phone": "822-535-2509", - "email": "riley@dynarama.com" - }, - { - "id": 4918, - "guid": "57fbc8d3-7d80-4e3a-ab5a-81966df65942", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Murphy", - "company": "Ameritron", - "phone": "888-477-3271", - "email": "hannah@ameritron.com" - }, - { - "id": 4919, - "guid": "34b4a008-85d2-4a4c-b366-50b36f5494b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Evelyn Thomson", - "company": "Raylog", - "phone": "800-447-2273", - "email": "evelyn@raylog.com" - }, - { - "id": 4920, - "guid": "35e14229-3b0f-40e3-a196-ee9c45721cb5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Molly Freeman", - "company": "Jamrola", - "phone": "849-538-2709", - "email": "molly@jamrola.com" - }, - { - "id": 4921, - "guid": "2f86daf0-097b-468c-86ad-f0375aca3dcf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Wesley", - "company": "Fibrotopia", - "phone": "880-598-3529", - "email": "mackenzie@fibrotopia.com" - }, - { - "id": 4922, - "guid": "748fa539-128a-45fe-91e3-9be50d73ec83", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Freeman", - "company": "Orthomedia", - "phone": "848-455-3064", - "email": "jocelyn@orthomedia.com" - }, - { - "id": 4923, - "guid": "0d41212a-dd4a-477c-86b5-2fb662621cf7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Cook", - "company": "Safetrust", - "phone": "821-401-3756", - "email": "anna@safetrust.com" - }, - { - "id": 4924, - "guid": "c286506a-5794-444f-8af7-b06095045282", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Elizabeth Milton", - "company": "Inridium", - "phone": "899-596-2744", - "email": "elizabeth@inridium.com" - }, - { - "id": 4925, - "guid": "f0b542c5-05fa-4c84-8082-b6e7b73232a4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Harrison", - "company": "Polytheon", - "phone": "883-432-3942", - "email": "ava@polytheon.com" - }, - { - "id": 4926, - "guid": "434ab34e-0d4e-4ee7-903f-656599c5af4f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Oswald", - "company": "US Infratouch", - "phone": "848-460-3820", - "email": "arianna@us infratouch.com" - }, - { - "id": 4927, - "guid": "2b1e0c3a-b2b1-41be-8166-92b8222d3132", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Sherlock", - "company": "Videobanc", - "phone": "842-400-2493", - "email": "brooke@videobanc.com" - }, - { - "id": 4928, - "guid": "59565038-3036-4760-95c0-6496bf050b4d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Calhoun", - "company": "Truegate", - "phone": "831-538-2306", - "email": "bailey@truegate.com" - }, - { - "id": 4929, - "guid": "18f3c47e-1a77-4b6c-ac02-8f328d2d6de8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Miers", - "company": "Conotomics", - "phone": "823-586-2128", - "email": "grace@conotomics.com" - }, - { - "id": 4930, - "guid": "ba53489c-1716-4885-bef4-1aa4d72ebaac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Timmons", - "company": "Turbomart", - "phone": "815-598-3728", - "email": "leah@turbomart.com" - }, - { - "id": 4931, - "guid": "32276149-0bf0-49da-b196-67e3ffdeeddc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Hawkins", - "company": "Unconix", - "phone": "851-433-2717", - "email": "ariana@unconix.com" - }, - { - "id": 4932, - "guid": "88ac39c4-3969-4af1-9bf2-eea29f48d184", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Calhoun", - "company": "Polytheon", - "phone": "867-488-2399", - "email": "payton@polytheon.com" - }, - { - "id": 4933, - "guid": "3f9a01fc-0ed2-435d-9c49-7a7fd43fc6c5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Milton", - "company": "iEnland", - "phone": "854-431-2890", - "email": "audrey@ienland.com" - }, - { - "id": 4934, - "guid": "66574d70-55d1-4212-aeb0-360bb35c2725", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Ford", - "company": "Interliant", - "phone": "850-475-3394", - "email": "mariah@interliant.com" - }, - { - "id": 4935, - "guid": "6cf69efe-99b4-4074-b577-ba48d02227c7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabella Hailey", - "company": "Rapigrafix", - "phone": "806-560-2822", - "email": "isabella@rapigrafix.com" - }, - { - "id": 4936, - "guid": "3cdac6de-34d4-492d-b636-8b1cdd12cb51", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Oliver", - "company": "iQualcar", - "phone": "832-501-2770", - "email": "katelyn@iqualcar.com" - }, - { - "id": 4937, - "guid": "d7ae154c-5d42-4744-b7de-24b2bca21ecd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Sheldon", - "company": "Robotomic", - "phone": "837-572-2634", - "email": "molly@robotomic.com" - }, - { - "id": 4938, - "guid": "dd0c8dca-99c1-4e98-be0d-85e2b80b45cf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Gardner", - "company": "Openserve", - "phone": "851-452-3440", - "email": "makayla@openserve.com" - }, - { - "id": 4939, - "guid": "ca7200db-05a8-4d54-b797-b4d505ee06ae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aaliyah Chandter", - "company": "Tekcar", - "phone": "837-514-2737", - "email": "aaliyah@tekcar.com" - }, - { - "id": 4940, - "guid": "ba844cb0-2c6f-48f8-9518-f06dcc6cb405", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Carter", - "company": "Infraique", - "phone": "842-481-2509", - "email": "sophia@infraique.com" - }, - { - "id": 4941, - "guid": "c01b25a0-872b-4a5a-b399-80221be2e994", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Otis", - "company": "Anagraph", - "phone": "807-563-2618", - "email": "rachel@anagraph.com" - }, - { - "id": 4942, - "guid": "63f39fc7-6d1a-46de-9cf7-c9447150e4e2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Stanley", - "company": "iMedconik", - "phone": "835-503-2045", - "email": "angelina@imedconik.com" - }, - { - "id": 4943, - "guid": "579ad741-e7a6-4cde-a05e-7d4fd3debb0e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Michaelson", - "company": "Unconix", - "phone": "815-447-2972", - "email": "samantha@unconix.com" - }, - { - "id": 4944, - "guid": "6c0de725-5af5-40d5-9e5f-edbe56b5e84c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Gilbert", - "company": "iOptystix", - "phone": "824-476-2700", - "email": "madeline@ioptystix.com" - }, - { - "id": 4945, - "guid": "d41b7b6d-fc39-49a9-87f6-f8e1d5d4ff18", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Nevaeh Sherlock", - "company": "iOptystix", - "phone": "801-516-3864", - "email": "nevaeh@ioptystix.com" - }, - { - "id": 4946, - "guid": "9781a5a0-a107-45ec-a2b6-5c34d88d9d6c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabriella Youmans", - "company": "Robocomm", - "phone": "818-516-3065", - "email": "gabriella@robocomm.com" - }, - { - "id": 4947, - "guid": "b873caaf-672c-4a74-9740-c6716c46b6d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jasmine Thorndike", - "company": "Celgra", - "phone": "857-565-2431", - "email": "jasmine@celgra.com" - }, - { - "id": 4948, - "guid": "40543cf8-6efa-40dc-b8ba-3d522de8eb64", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Walkman", - "company": "Mescaridic", - "phone": "875-524-2460", - "email": "evelyn@mescaridic.com" - }, - { - "id": 4949, - "guid": "709d1c5d-6588-4ef8-aee9-c22f57ad0305", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Calhoun", - "company": "Interliant", - "phone": "860-491-3043", - "email": "addison@interliant.com" - }, - { - "id": 4950, - "guid": "6374b611-1a32-4395-a707-bec57ea619f1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Webster", - "company": "iMedconik", - "phone": "864-518-2374", - "email": "claire@imedconik.com" - }, - { - "id": 4951, - "guid": "5a156ce1-09fe-42ef-8ac2-bb4c923f91e8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Gilmore", - "company": "Truetomic", - "phone": "845-523-3269", - "email": "madeline@truetomic.com" - }, - { - "id": 4952, - "guid": "384e9246-fe41-47d2-bfe4-ed8cf656c107", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Gate", - "company": "US Infratouch", - "phone": "886-416-3698", - "email": "taylor@us infratouch.com" - }, - { - "id": 4953, - "guid": "6559f170-fffa-4a62-8e15-2f5598b3e0fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Turner", - "company": "Robotemplate", - "phone": "845-408-2387", - "email": "trinity@robotemplate.com" - }, - { - "id": 4954, - "guid": "44505ca6-7dd7-49bc-a06b-b7b48b4081a2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Adamson", - "company": "Transtouch", - "phone": "802-447-2681", - "email": "serenity@transtouch.com" - }, - { - "id": 4955, - "guid": "53f21a65-80d4-420e-a36b-d7960fc15d02", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke WifKinson", - "company": "Enlogia", - "phone": "876-590-3047", - "email": "brooke@enlogia.com" - }, - { - "id": 4956, - "guid": "b4e4be81-bd5d-40e9-b6cf-e579230fd3a4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Vance", - "company": "Robocomm", - "phone": "856-435-3869", - "email": "gabrielle@robocomm.com" - }, - { - "id": 4957, - "guid": "0efe2589-b2c7-48a1-b839-bad6601a7adf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Davidson", - "company": "Venconix", - "phone": "899-474-2482", - "email": "alexandra@venconix.com" - }, - { - "id": 4958, - "guid": "e057a7c6-28a9-48df-966a-5388dd698ba5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Oswald", - "company": "Mescaridic", - "phone": "879-524-3139", - "email": "taylor@mescaridic.com" - }, - { - "id": 4959, - "guid": "06bb5862-041d-4536-ad27-a7a10ff68261", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Gibbs", - "company": "Teratopia", - "phone": "861-591-3318", - "email": "riley@teratopia.com" - }, - { - "id": 4960, - "guid": "c41c80ad-d612-4384-ae21-614c7964cbdd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Croftoon", - "company": "Cryptotegrity", - "phone": "829-550-3801", - "email": "eva@cryptotegrity.com" - }, - { - "id": 4961, - "guid": "0e167648-2df1-4718-914e-fc94c8f5ad4c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Miller", - "company": "Conrama", - "phone": "846-580-2393", - "email": "makayla@conrama.com" - }, - { - "id": 4962, - "guid": "921e2700-189a-45d5-a97b-e0fca55cae83", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Turner", - "company": "eSteganoergy", - "phone": "816-596-2433", - "email": "eva@esteganoergy.com" - }, - { - "id": 4963, - "guid": "0b440209-cdab-4ded-a86b-3c44e4eac34e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle WifKinson", - "company": "Jamrola", - "phone": "893-568-3379", - "email": "isabelle@jamrola.com" - }, - { - "id": 4964, - "guid": "36ea9d9d-b000-4f59-b0ad-8164b55015ea", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Nathan", - "company": "Keytheon", - "phone": "841-437-3556", - "email": "katelyn@keytheon.com" - }, - { - "id": 4965, - "guid": "15d4e2ad-6c67-468c-b26a-0f3ba56f2aa4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jocelyn Abramson", - "company": "Robotomic", - "phone": "826-442-2725", - "email": "jocelyn@robotomic.com" - }, - { - "id": 4966, - "guid": "88752123-8bfb-4b98-9aae-f18d8931a42c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gibbs", - "company": "Pericenta", - "phone": "899-550-3371", - "email": "lauren@pericenta.com" - }, - { - "id": 4967, - "guid": "b10c8bf5-bfb1-4bc0-b7c7-800347812eee", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Miers", - "company": "US Omnigraphik", - "phone": "843-561-2125", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 4968, - "guid": "03e1d85f-8708-456f-8efc-79ee32c6b375", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jocelyn Thornton", - "company": "Robotomic", - "phone": "819-563-2973", - "email": "jocelyn@robotomic.com" - }, - { - "id": 4969, - "guid": "79a2ba0a-fe44-4674-9ac8-63380e456fa3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Crossman", - "company": "SysVenamerica", - "phone": "845-571-2451", - "email": "zoe@sysvenamerica.com" - }, - { - "id": 4970, - "guid": "c4543401-b444-4747-9fc6-3ec5610f2388", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Valeria Sheldon", - "company": "Jamrola", - "phone": "827-576-3882", - "email": "valeria@jamrola.com" - }, - { - "id": 4971, - "guid": "72eb2a3c-aea2-43e3-9ed0-df4fe57e205d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Hodges", - "company": "Aprama", - "phone": "816-438-2512", - "email": "makayla@aprama.com" - }, - { - "id": 4972, - "guid": "8f70641b-1dfa-4bb4-b94d-8aa05822c382", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Charlson", - "company": "Aluco", - "phone": "887-556-3464", - "email": "ella@aluco.com" - }, - { - "id": 4973, - "guid": "93995bb7-2a40-4fd4-971f-55f827c8605c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Brooks", - "company": "OpKeycomm", - "phone": "884-406-2771", - "email": "ashley@opkeycomm.com" - }, - { - "id": 4974, - "guid": "9e4bcbaa-d5f0-482c-87c0-217183a49d5e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Ogden", - "company": "Turbomart", - "phone": "859-597-3380", - "email": "camila@turbomart.com" - }, - { - "id": 4975, - "guid": "d61bf8cd-8893-4a45-a597-232669800965", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Sheldon", - "company": "Orthosoft", - "phone": "870-461-2838", - "email": "samantha@orthosoft.com" - }, - { - "id": 4976, - "guid": "56a77d02-a9c3-477d-9fb9-26bfbfd03b53", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaitlyn Carrington", - "company": "Superscope", - "phone": "850-510-2786", - "email": "kaitlyn@superscope.com" - }, - { - "id": 4977, - "guid": "fe6519ca-2c21-4c66-a74a-b55fe377a137", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Oldridge", - "company": "Pericenta", - "phone": "882-457-2026", - "email": "lillian@pericenta.com" - }, - { - "id": 4978, - "guid": "0753a257-029a-431e-8d52-a3dba47c98fe", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Gate", - "company": "Qualserve", - "phone": "838-592-3984", - "email": "katelyn@qualserve.com" - }, - { - "id": 4979, - "guid": "fd88d8e5-79e5-4605-af0e-af78c381ed67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Vanessa Cramer", - "company": "Aprama", - "phone": "875-482-3950", - "email": "vanessa@aprama.com" - }, - { - "id": 4980, - "guid": "f579c5d9-93d4-459a-abd8-37e52ee1d91b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Goodman", - "company": "OpKeycomm", - "phone": "854-471-2007", - "email": "lillian@opkeycomm.com" - }, - { - "id": 4981, - "guid": "429a9898-645b-4f4e-88a0-aaf1b26bff06", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Neal", - "company": "Infragraph", - "phone": "825-446-3046", - "email": "nevaeh@infragraph.com" - }, - { - "id": 4982, - "guid": "0e25f9c4-585b-4c93-a30b-fa96d627f649", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Conors", - "company": "Systheon", - "phone": "874-548-3729", - "email": "leah@systheon.com" - }, - { - "id": 4983, - "guid": "8c915a02-b43b-49b2-97be-d3d8aacb6a7c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Molligan", - "company": "Technogra", - "phone": "843-414-3647", - "email": "hailey@technogra.com" - }, - { - "id": 4984, - "guid": "ba537897-5db3-4930-bb65-6d54eae0f831", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Hawkins", - "company": "iOptystix", - "phone": "859-563-3458", - "email": "charlotte@ioptystix.com" - }, - { - "id": 4985, - "guid": "de05d032-a09d-4486-8088-b6c3cb0cafa7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Gilmore", - "company": "OpKeycomm", - "phone": "847-540-3105", - "email": "addison@opkeycomm.com" - }, - { - "id": 4986, - "guid": "114c7341-b7a9-40ea-8f0e-20839b437298", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Neal", - "company": "Syssoft", - "phone": "840-500-3460", - "email": "sophie@syssoft.com" - }, - { - "id": 4987, - "guid": "21f4dca7-a1c1-4ed1-a648-0411f53e4d13", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Allison Galbraith", - "company": "Rapigrafix", - "phone": "823-485-3649", - "email": "allison@rapigrafix.com" - }, - { - "id": 4988, - "guid": "4f32d465-4bf8-4718-a6e3-1bd9be1271bd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Oliver", - "company": "Syssoft", - "phone": "836-523-3188", - "email": "claire@syssoft.com" - }, - { - "id": 4989, - "guid": "b8619986-97c4-4d1a-a6fa-d93b18a56e3d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Paige Hawkins", - "company": "Multitiqua", - "phone": "896-462-3762", - "email": "paige@multitiqua.com" - }, - { - "id": 4990, - "guid": "d51cda4d-fbea-4a1b-9406-b875d94e8541", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Carrington", - "company": "Techtron", - "phone": "884-447-2438", - "email": "destiny@techtron.com" - }, - { - "id": 4991, - "guid": "9ec5c56e-b22e-4648-b64c-c2358665006f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Clapton", - "company": "Teraserv", - "phone": "832-524-3022", - "email": "madison@teraserv.com" - }, - { - "id": 4992, - "guid": "b9b25522-7573-403d-a4ee-98a5d458599c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava Wainwright", - "company": "Fibroserve", - "phone": "871-444-3452", - "email": "ava@fibroserve.com" - }, - { - "id": 4993, - "guid": "79f8dc17-643c-4440-9b39-fead77e3e092", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Layla Wallace", - "company": "Robotemplate", - "phone": "895-432-3793", - "email": "layla@robotemplate.com" - }, - { - "id": 4994, - "guid": "abaa2ba0-5f63-4c2b-a4f3-eca8c68278cc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Miers", - "company": "Safetrust", - "phone": "839-440-2651", - "email": "isabelle@safetrust.com" - }, - { - "id": 4995, - "guid": "e8dae909-b367-4edd-b709-fac60490ec73", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Hancock", - "company": "iEnland", - "phone": "804-404-3546", - "email": "faith@ienland.com" - }, - { - "id": 4996, - "guid": "0be55b76-6394-4aea-b12b-11c7014fa419", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Freeman", - "company": "iEnland", - "phone": "832-427-2021", - "email": "aubrey@ienland.com" - }, - { - "id": 4997, - "guid": "70768526-f914-4948-b348-50920f296809", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoey Nathan", - "company": "SysVenamerica", - "phone": "824-408-2855", - "email": "zoey@sysvenamerica.com" - }, - { - "id": 4998, - "guid": "6bee8cb7-8cec-46cc-82b1-e4edb7a8fe30", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Warren", - "company": "Westtomik", - "phone": "816-485-3497", - "email": "maya@westtomik.com" - }, - { - "id": 4999, - "guid": "1c686342-07ef-4b85-9dc1-56204b06929a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ariana Fisher", - "company": "Superscope", - "phone": "851-531-2832", - "email": "ariana@superscope.com" - }, - { - "id": 5000, - "guid": "de07c65e-4758-4e71-b30b-fab6d6ef6153", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Nash", - "company": "Robotomic", - "phone": "814-404-2229", - "email": "mariah@robotomic.com" - }, - { - "id": 5001, - "guid": "b03341bf-fea0-49a5-871b-b6c189b399c6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Owen", - "company": "Interliant", - "phone": "806-559-2470", - "email": "vanessa@interliant.com" - }, - { - "id": 5002, - "guid": "49f02626-64a0-4405-b5ba-49b4cb905fc8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Michaelson", - "company": "iOptystix", - "phone": "896-467-2937", - "email": "genesis@ioptystix.com" - }, - { - "id": 5003, - "guid": "b60b7f1b-caf1-4e24-bd21-9306ad07d09b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Gardner", - "company": "Orthomedia", - "phone": "836-456-3334", - "email": "trinity@orthomedia.com" - }, - { - "id": 5004, - "guid": "3ac2c0cb-abf2-4bbb-bad2-8ed91634bb41", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Oliver", - "company": "Orthomedia", - "phone": "822-519-2106", - "email": "hannah@orthomedia.com" - }, - { - "id": 5005, - "guid": "90711a68-630f-47c7-bb91-4d04bf19ec42", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Michaelson", - "company": "Safetrust", - "phone": "891-567-2071", - "email": "zoe@safetrust.com" - }, - { - "id": 5006, - "guid": "96baecbe-10f2-4e1a-afcb-f53f9bce7957", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kimberly Croftoon", - "company": "Safeagra", - "phone": "803-563-2053", - "email": "kimberly@safeagra.com" - }, - { - "id": 5007, - "guid": "7518793a-19af-49e8-beb0-7247315e2219", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Youmans", - "company": "Truetomic", - "phone": "896-434-3267", - "email": "madelyn@truetomic.com" - }, - { - "id": 5008, - "guid": "f4aab42d-65d1-4345-9025-1e7b552c154a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Youmans", - "company": "Vencom", - "phone": "841-542-2760", - "email": "hannah@vencom.com" - }, - { - "id": 5009, - "guid": "ed2e63d5-4678-4869-906d-86618380c076", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Gerald", - "company": "US Infratouch", - "phone": "829-568-2147", - "email": "peyton@us infratouch.com" - }, - { - "id": 5010, - "guid": "eab6e684-0899-44b9-8398-9d901e3c0e87", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Valeria Goodman", - "company": "iSkyvaco", - "phone": "813-413-2848", - "email": "valeria@iskyvaco.com" - }, - { - "id": 5011, - "guid": "fdf3da2a-bcf2-4976-8818-aec41b01e0ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Vaughan", - "company": "Aprama", - "phone": "815-518-2688", - "email": "bailey@aprama.com" - }, - { - "id": 5012, - "guid": "9bd7940b-167c-4a58-af70-8dfc549d60af", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Campbell", - "company": "Hypervaco", - "phone": "846-554-2483", - "email": "ariana@hypervaco.com" - }, - { - "id": 5013, - "guid": "1f18f033-cb07-47c2-baa2-a171d5a5ec54", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Adamson", - "company": "Hypervaco", - "phone": "880-411-3488", - "email": "gianna@hypervaco.com" - }, - { - "id": 5014, - "guid": "1a3ff9c4-1d3a-41d4-9a99-865b2c747779", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Miller", - "company": "Rapigrafix", - "phone": "811-480-2524", - "email": "kylie@rapigrafix.com" - }, - { - "id": 5015, - "guid": "a31bfa00-182d-489e-9058-9337f0d0329d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Gilson", - "company": "Teratopia", - "phone": "890-580-2084", - "email": "riley@teratopia.com" - }, - { - "id": 5016, - "guid": "3127056a-2332-4c59-a809-30cb3b58dcd9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Wood", - "company": "Fibrotopia", - "phone": "815-454-2523", - "email": "lillian@fibrotopia.com" - }, - { - "id": 5017, - "guid": "03db1a17-f15f-4d79-bc9b-697d6eff3e17", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Gill", - "company": "Skydata", - "phone": "865-597-2407", - "email": "samantha@skydata.com" - }, - { - "id": 5018, - "guid": "dc7d85ac-7c8b-4f7d-9fac-e280c09b61ae", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Galbraith", - "company": "Xeicon", - "phone": "840-418-3887", - "email": "jasmine@xeicon.com" - }, - { - "id": 5019, - "guid": "2685215b-b636-4076-b290-f739ad48383a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Oswald", - "company": "Anaframe", - "phone": "895-532-3025", - "email": "kylie@anaframe.com" - }, - { - "id": 5020, - "guid": "7cc870fc-f064-422e-b398-547fe028e204", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Bush", - "company": "Rapigrafix", - "phone": "810-468-2304", - "email": "katherine@rapigrafix.com" - }, - { - "id": 5021, - "guid": "3d995784-3d10-4c75-a4b9-3193205b6d7d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Miln", - "company": "Unologic", - "phone": "813-448-2794", - "email": "ava@unologic.com" - }, - { - "id": 5022, - "guid": "ebe956db-08eb-4072-8311-714019ad3ad1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke Carroll", - "company": "Rapigrafix", - "phone": "848-470-3349", - "email": "brooke@rapigrafix.com" - }, - { - "id": 5023, - "guid": "16a2923f-9b95-46f7-b459-8a1425275579", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Brooks", - "company": "Steganoconiche", - "phone": "844-445-3512", - "email": "alexis@steganoconiche.com" - }, - { - "id": 5024, - "guid": "1393f1dc-c292-454f-a0a8-502da4b5fcd3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Goldman", - "company": "OpKeycomm", - "phone": "881-563-2759", - "email": "allison@opkeycomm.com" - }, - { - "id": 5025, - "guid": "129b2810-8201-4d73-9455-8c17575c6e18", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Thornton", - "company": "Netseco", - "phone": "854-404-2410", - "email": "layla@netseco.com" - }, - { - "id": 5026, - "guid": "f55184f9-55f1-4548-ae4a-b69f57a0a961", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Calhoun", - "company": "Raylog", - "phone": "828-587-3077", - "email": "faith@raylog.com" - }, - { - "id": 5027, - "guid": "c90b067c-cd00-4270-96a8-ac25a9b7f104", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Watson", - "company": "Inridium", - "phone": "867-595-2928", - "email": "alexis@inridium.com" - }, - { - "id": 5028, - "guid": "0bc20720-e859-47d8-a360-2c329f3a0c1d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Nevaeh Otis", - "company": "Infraique", - "phone": "862-554-2611", - "email": "nevaeh@infraique.com" - }, - { - "id": 5029, - "guid": "37543a5c-55a1-47e9-87de-6e784bcb96ab", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Thomson", - "company": "Conrama", - "phone": "864-507-2943", - "email": "leah@conrama.com" - }, - { - "id": 5030, - "guid": "c00c05cc-b7f9-4be3-a944-a44598173d39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Winter", - "company": "Westgate", - "phone": "824-487-3341", - "email": "sophie@westgate.com" - }, - { - "id": 5031, - "guid": "a481fe52-fef2-4108-97de-5dd0c392dfbe", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Wesley", - "company": "iOptystix", - "phone": "847-451-3335", - "email": "grace@ioptystix.com" - }, - { - "id": 5032, - "guid": "a10e195d-d604-4611-85e7-1336f8de3cb4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Gill", - "company": "Steganoconiche", - "phone": "855-401-3136", - "email": "faith@steganoconiche.com" - }, - { - "id": 5033, - "guid": "b952e0b5-b422-45b0-b0c5-ae08b8f62f8c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Charlotte Higgins", - "company": "iSkyvaco", - "phone": "855-407-3708", - "email": "charlotte@iskyvaco.com" - }, - { - "id": 5034, - "guid": "3332acc7-ce2a-4630-8fff-984e82fe843d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Thorndike", - "company": "OpKeycomm", - "phone": "813-428-2530", - "email": "katherine@opkeycomm.com" - }, - { - "id": 5035, - "guid": "7bfba274-cb18-4df5-a470-8c3146e40796", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Adamson", - "company": "Genland", - "phone": "837-438-3306", - "email": "abigail@genland.com" - }, - { - "id": 5036, - "guid": "cb83e832-357c-4abb-be9b-12a8d6b82814", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Gate", - "company": "Enlogia", - "phone": "872-497-3658", - "email": "molly@enlogia.com" - }, - { - "id": 5037, - "guid": "b51a5e39-ed63-454a-958f-78c0c8e9c033", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Miers", - "company": "SysVenamerica", - "phone": "892-405-2016", - "email": "anna@sysvenamerica.com" - }, - { - "id": 5038, - "guid": "a9143697-55b8-4493-8302-3fcdff3d64b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Carey", - "company": "Technogra", - "phone": "806-411-2306", - "email": "molly@technogra.com" - }, - { - "id": 5039, - "guid": "de5ccb63-422f-4461-917f-019ecbe22dc6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Wallace", - "company": "Steganoconiche", - "phone": "841-519-2003", - "email": "autumn@steganoconiche.com" - }, - { - "id": 5040, - "guid": "a528fe11-438b-4b01-ad26-76cbdc457803", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Charlson", - "company": "Fibrotouch", - "phone": "838-472-2581", - "email": "julia@fibrotouch.com" - }, - { - "id": 5041, - "guid": "e61b2058-c47e-4470-8ae8-f62499f2d0b9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Vance", - "company": "Venconix", - "phone": "852-557-3508", - "email": "zoey@venconix.com" - }, - { - "id": 5042, - "guid": "f4100bad-9e55-42dd-aebc-06b50626cd7b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Thomson", - "company": "OpKeycomm", - "phone": "837-435-3829", - "email": "ella@opkeycomm.com" - }, - { - "id": 5043, - "guid": "322dfcc4-382a-4133-934e-8e437a3db245", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Nathan", - "company": "Superscope", - "phone": "841-522-2082", - "email": "addison@superscope.com" - }, - { - "id": 5044, - "guid": "210e322a-b06c-4d85-b40d-c70ade2740d5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Hailey", - "company": "RoboAerlogix", - "phone": "898-593-3229", - "email": "natalie@roboaerlogix.com" - }, - { - "id": 5045, - "guid": "252d157d-4fcd-4312-9f5c-ebf070c3dee8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Hamphrey", - "company": "iSkyvaco", - "phone": "889-568-2138", - "email": "maria@iskyvaco.com" - }, - { - "id": 5046, - "guid": "e8a33a35-87da-4b0f-92e6-caaa7b765813", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Hawkins", - "company": "Venconix", - "phone": "889-460-3855", - "email": "samantha@venconix.com" - }, - { - "id": 5047, - "guid": "e4d4fcf2-c626-4cea-a85a-d09ca7036f9e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Brickman", - "company": "Infraique", - "phone": "880-470-2483", - "email": "hannah@infraique.com" - }, - { - "id": 5048, - "guid": "10da0e8c-5d20-4368-87c9-b3401db178d6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Ogden", - "company": "Netseco", - "phone": "880-464-2841", - "email": "ella@netseco.com" - }, - { - "id": 5049, - "guid": "d7d665ef-730c-450e-823c-84d0b5cff8b5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Harrison", - "company": "Orthomedia", - "phone": "834-480-3720", - "email": "paige@orthomedia.com" - }, - { - "id": 5050, - "guid": "51f6b082-977c-42e5-b6eb-3577f71fcae3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Higgins", - "company": "iEnland", - "phone": "803-405-3943", - "email": "khloe@ienland.com" - }, - { - "id": 5051, - "guid": "691300e8-b853-4654-a599-fec77a91d09d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Davidson", - "company": "Airdyne", - "phone": "855-470-2396", - "email": "katelyn@airdyne.com" - }, - { - "id": 5052, - "guid": "979c1703-154a-4a69-8155-3acdb8dff7e4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Mercer", - "company": "Openserve", - "phone": "854-510-2361", - "email": "ava@openserve.com" - }, - { - "id": 5053, - "guid": "0b597eb9-3652-4e04-8262-730a43c7d02e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Gill", - "company": "Navivacs", - "phone": "898-404-2221", - "email": "amelia@navivacs.com" - }, - { - "id": 5054, - "guid": "2e913a8e-92df-4600-921a-6fa50564c4ab", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Thorndike", - "company": "Technogra", - "phone": "833-565-3910", - "email": "allison@technogra.com" - }, - { - "id": 5055, - "guid": "6c78f695-d140-4651-ac7c-5696a48ebe49", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabelle Davidson", - "company": "Idmax", - "phone": "843-498-3269", - "email": "isabelle@idmax.com" - }, - { - "id": 5056, - "guid": "f4d257ee-1583-4973-beae-ab0ce9ee68bd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Cramer", - "company": "Teratopia", - "phone": "813-541-3116", - "email": "morgan@teratopia.com" - }, - { - "id": 5057, - "guid": "f16ce59f-e31f-494a-a057-215b7d8d6141", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Wainwright", - "company": "Proline", - "phone": "802-542-3408", - "email": "madelyn@proline.com" - }, - { - "id": 5058, - "guid": "41d0a436-17bf-417d-af29-bbfb559c8c37", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Warren", - "company": "Truegate", - "phone": "858-461-2830", - "email": "madeline@truegate.com" - }, - { - "id": 5059, - "guid": "acb6878c-ff59-4011-976f-d8b81c9dbe60", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Taylor Vance", - "company": "Infragraph", - "phone": "839-414-2172", - "email": "taylor@infragraph.com" - }, - { - "id": 5060, - "guid": "634cb1e0-024d-4b44-85e0-faa1cfdd6e59", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Young", - "company": "Raylog", - "phone": "884-482-3824", - "email": "layla@raylog.com" - }, - { - "id": 5061, - "guid": "d2713d14-d407-45d7-b67d-b4a720fe031b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Ward", - "company": "Keytheon", - "phone": "875-565-2721", - "email": "jocelyn@keytheon.com" - }, - { - "id": 5062, - "guid": "d509cb79-03a4-46e5-9e77-1a520c4ae1c1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Young", - "company": "Teraserv", - "phone": "850-537-3242", - "email": "sofia@teraserv.com" - }, - { - "id": 5063, - "guid": "859bf867-fe66-4667-81a6-93bda07c203f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Waller", - "company": "Infragraph", - "phone": "879-568-2688", - "email": "taylor@infragraph.com" - }, - { - "id": 5064, - "guid": "313e8ac9-8f9e-4f50-b5a3-d2cff3daa215", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Miller", - "company": "US Omnigraphik", - "phone": "891-447-3990", - "email": "katherine@us omnigraphik.com" - }, - { - "id": 5065, - "guid": "fb23e2dd-dfed-409a-9860-34f94e4cdb23", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Avery Adamson", - "company": "Netseco", - "phone": "883-531-2731", - "email": "avery@netseco.com" - }, - { - "id": 5066, - "guid": "c8050575-6520-409e-89e3-2bbacf3bbb23", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Nathan", - "company": "Pericenta", - "phone": "830-598-2479", - "email": "evelyn@pericenta.com" - }, - { - "id": 5067, - "guid": "e34c2814-9bff-4c90-b842-3567a3d95605", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Conors", - "company": "Gigaura", - "phone": "876-586-3066", - "email": "natalie@gigaura.com" - }, - { - "id": 5068, - "guid": "ac7ec8ba-ee65-4000-a020-4ccad7561c1e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Mercer", - "company": "Skydata", - "phone": "829-590-3234", - "email": "emily@skydata.com" - }, - { - "id": 5069, - "guid": "5008d7b6-97f2-4b31-9182-2f05c9c21b8a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brianna Bush", - "company": "Anagraph", - "phone": "834-467-2234", - "email": "brianna@anagraph.com" - }, - { - "id": 5070, - "guid": "96419310-6c93-409d-91f4-8146926ebc25", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Neal", - "company": "Turbomart", - "phone": "862-409-3980", - "email": "khloe@turbomart.com" - }, - { - "id": 5071, - "guid": "28b92d40-037c-4c9a-8ea0-174719900ff7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Hoggarth", - "company": "iQualcar", - "phone": "845-518-3489", - "email": "lauren@iqualcar.com" - }, - { - "id": 5072, - "guid": "8dce652b-c295-4504-b05d-f4d2bbd2ea1b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Sheldon", - "company": "Anaframe", - "phone": "873-574-2623", - "email": "brooklyn@anaframe.com" - }, - { - "id": 5073, - "guid": "27772dad-b72d-438b-adfa-75f1a7b6cdb3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Milton", - "company": "Tekcar", - "phone": "894-549-3891", - "email": "mariah@tekcar.com" - }, - { - "id": 5074, - "guid": "7b72b83c-2e52-406a-bf7a-539bec82e24f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Hawkins", - "company": "Teknoplexon", - "phone": "813-440-3122", - "email": "hailey@teknoplexon.com" - }, - { - "id": 5075, - "guid": "ba521fa5-714b-45ed-a2a9-3c3b8fc97355", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Goodman", - "company": "Ventanium", - "phone": "819-591-3215", - "email": "madelyn@ventanium.com" - }, - { - "id": 5076, - "guid": "203ea99d-eff9-4fe4-a2cc-9383eb1cf439", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Carter", - "company": "Raylog", - "phone": "874-509-2148", - "email": "victoria@raylog.com" - }, - { - "id": 5077, - "guid": "e93d1e67-c579-48d2-b4cf-1e2c8f69fa80", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Chesterton", - "company": "Conotomics", - "phone": "846-539-2535", - "email": "anna@conotomics.com" - }, - { - "id": 5078, - "guid": "77f822b9-0e7e-4506-9260-5655949e75e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Wallace", - "company": "iEnland", - "phone": "846-583-2934", - "email": "gabrielle@ienland.com" - }, - { - "id": 5079, - "guid": "b933d03c-c86a-41d0-b4aa-ede087da038c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Charlson", - "company": "Unconix", - "phone": "823-412-2773", - "email": "lillian@unconix.com" - }, - { - "id": 5080, - "guid": "696a073c-7966-4485-9078-ad3649ea5846", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Victoria Abramson", - "company": "Entcast", - "phone": "815-438-3895", - "email": "victoria@entcast.com" - }, - { - "id": 5081, - "guid": "7db579cd-cbe1-4830-bee0-f7d16cc69774", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Nash", - "company": "Hypervaco", - "phone": "898-480-2529", - "email": "chloe@hypervaco.com" - }, - { - "id": 5082, - "guid": "0e8e32d7-f5df-43d5-bc49-53fd2a428b93", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Cramer", - "company": "Textiqua", - "phone": "827-461-2384", - "email": "zoe@textiqua.com" - }, - { - "id": 5083, - "guid": "f38aa583-c4d5-48b5-b344-173314a423dd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Webster", - "company": "Ventanium", - "phone": "882-423-2898", - "email": "alexis@ventanium.com" - }, - { - "id": 5084, - "guid": "7fa13b47-0069-40a4-b2ef-9afae4e4e456", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Genesis Turner", - "company": "Mescatron", - "phone": "804-482-3994", - "email": "genesis@mescatron.com" - }, - { - "id": 5085, - "guid": "706d03c5-aba5-479a-9711-44bd7cbafe3a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Hoggarth", - "company": "Genland", - "phone": "873-503-2733", - "email": "isabelle@genland.com" - }, - { - "id": 5086, - "guid": "e0bd89a1-1347-4372-b562-be001120990a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Nathan", - "company": "Inridium", - "phone": "816-442-3960", - "email": "molly@inridium.com" - }, - { - "id": 5087, - "guid": "4c7b18c9-0182-4376-a2c9-2f24a2f42e61", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Morrison", - "company": "Westtomik", - "phone": "845-491-2353", - "email": "amelia@westtomik.com" - }, - { - "id": 5088, - "guid": "28657e96-f265-4209-bdce-732c21d4dbd9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Wayne", - "company": "Anaframe", - "phone": "822-416-3910", - "email": "zoe@anaframe.com" - }, - { - "id": 5089, - "guid": "9e9bcad4-b548-4750-ae9f-b83e19132a07", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Ford", - "company": "Infraique", - "phone": "832-465-3311", - "email": "mia@infraique.com" - }, - { - "id": 5090, - "guid": "874d7b3b-1db8-4206-acfc-d1cbcb5153ef", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Hamphrey", - "company": "Westtomik", - "phone": "885-424-2241", - "email": "serenity@westtomik.com" - }, - { - "id": 5091, - "guid": "4bb0bde7-f323-4e93-8a47-04baf7b6efaf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Neal", - "company": "Westtomik", - "phone": "836-574-3765", - "email": "ava@westtomik.com" - }, - { - "id": 5092, - "guid": "1494ab13-8746-45ea-a8de-61c868f6302e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Hamphrey", - "company": "Multitiqua", - "phone": "842-461-3239", - "email": "isabelle@multitiqua.com" - }, - { - "id": 5093, - "guid": "8e12101f-a0b5-41fc-881b-03930ff7e65c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Freeman", - "company": "Allnet", - "phone": "868-525-2925", - "email": "olivia@allnet.com" - }, - { - "id": 5094, - "guid": "7db6bc64-fece-4832-8990-5629ea692fa3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Otis", - "company": "Infraique", - "phone": "871-589-2025", - "email": "maria@infraique.com" - }, - { - "id": 5095, - "guid": "1c50bb26-6dd5-42f5-8c2c-8af22c2f9cb6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Sheldon", - "company": "SysVenamerica", - "phone": "847-502-3960", - "email": "audrey@sysvenamerica.com" - }, - { - "id": 5096, - "guid": "42d93207-1c5c-447d-b347-ecfffe359b55", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Freeman", - "company": "Safeagra", - "phone": "815-570-2295", - "email": "madelyn@safeagra.com" - }, - { - "id": 5097, - "guid": "e303ac7a-dbce-4029-9703-80d3652a0e3a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Hamphrey", - "company": "Gigaura", - "phone": "898-494-2551", - "email": "ella@gigaura.com" - }, - { - "id": 5098, - "guid": "46fc7b6c-7f9c-425d-987e-ba17f8a85605", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Ford", - "company": "SysVenamerica", - "phone": "866-430-2829", - "email": "ava@sysvenamerica.com" - }, - { - "id": 5099, - "guid": "c52b6be3-4b1e-4abf-95f9-6c4c3c50d233", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Chapman", - "company": "Orthomedia", - "phone": "824-480-2647", - "email": "mackenzie@orthomedia.com" - }, - { - "id": 5100, - "guid": "d4b8a638-0651-4f6c-b8e3-99ce39acf1c7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Addison Chapman", - "company": "Transtouch", - "phone": "827-550-2573", - "email": "addison@transtouch.com" - }, - { - "id": 5101, - "guid": "959c9e41-b884-43fe-816f-5ce547c989dc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Galbraith", - "company": "OpKeycomm", - "phone": "883-460-2197", - "email": "lily@opkeycomm.com" - }, - { - "id": 5102, - "guid": "2ce01a6a-4369-49e6-8192-754857c089e8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Young", - "company": "Fibrotopia", - "phone": "812-483-2584", - "email": "isabella@fibrotopia.com" - }, - { - "id": 5103, - "guid": "d2828716-89b0-4250-aef2-914fab675b6d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Crossman", - "company": "Steganoconiche", - "phone": "824-400-3208", - "email": "leah@steganoconiche.com" - }, - { - "id": 5104, - "guid": "ac2ba105-cc21-4f2e-9517-ec5d41583ecd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Gilson", - "company": "RoboAerlogix", - "phone": "814-517-2452", - "email": "faith@roboaerlogix.com" - }, - { - "id": 5105, - "guid": "4351366e-3a01-4135-9ff9-e12cb65145ab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Sherlock", - "company": "Fibroserve", - "phone": "861-496-2870", - "email": "savannah@fibroserve.com" - }, - { - "id": 5106, - "guid": "63397d3c-26ba-49b5-9932-b66826946858", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Warren", - "company": "eEyetanic", - "phone": "896-571-3635", - "email": "amelia@eeyetanic.com" - }, - { - "id": 5107, - "guid": "263c4c1d-4ef4-4d62-a5d9-e2f92946704e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Bush", - "company": "Infraique", - "phone": "805-574-2087", - "email": "trinity@infraique.com" - }, - { - "id": 5108, - "guid": "e3da21fb-0ade-4b35-9023-ad7ec2534ed1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Croftoon", - "company": "Tekcar", - "phone": "899-502-2657", - "email": "vanessa@tekcar.com" - }, - { - "id": 5109, - "guid": "141af265-795d-442d-b692-c6a3edd81b2a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Hardman", - "company": "Anaframe", - "phone": "870-455-3244", - "email": "camila@anaframe.com" - }, - { - "id": 5110, - "guid": "ce652005-7db3-43e7-95ae-8f97c59463bd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Thomson", - "company": "Allnet", - "phone": "876-404-2060", - "email": "angelina@allnet.com" - }, - { - "id": 5111, - "guid": "f55aa1b7-1094-4d22-b7f9-f24b6f735388", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Vance", - "company": "Quintegrity", - "phone": "821-457-2351", - "email": "ashley@quintegrity.com" - }, - { - "id": 5112, - "guid": "1bd77826-66df-4e2c-92e6-9e649e299267", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney Harrison", - "company": "Fibroserve", - "phone": "823-401-3185", - "email": "sydney@fibroserve.com" - }, - { - "id": 5113, - "guid": "f145fdd0-4925-4454-8b17-5e70e7bf5bd6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Clapton", - "company": "Pericenta", - "phone": "865-515-3735", - "email": "audrey@pericenta.com" - }, - { - "id": 5114, - "guid": "3f7aa4a7-03e2-451e-91d9-d0bb0bb58e8c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Calhoun", - "company": "Pacwest", - "phone": "842-542-3563", - "email": "bella@pacwest.com" - }, - { - "id": 5115, - "guid": "773c67e5-d2f9-4db6-935d-31347d441fe7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Miller", - "company": "Hypervaco", - "phone": "894-513-2801", - "email": "kylie@hypervaco.com" - }, - { - "id": 5116, - "guid": "7eeff7df-bc74-4dab-8fba-0efbf99f1043", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Ogden", - "company": "Infragraph", - "phone": "898-491-2426", - "email": "eva@infragraph.com" - }, - { - "id": 5117, - "guid": "f0630a9d-6083-4372-a9ca-1b39e42f47e8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Hailey", - "company": "US Omnigraphik", - "phone": "851-443-2488", - "email": "morgan@us omnigraphik.com" - }, - { - "id": 5118, - "guid": "e231d54e-a669-449e-8761-ff11b5d76834", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Morrison", - "company": "Entcast", - "phone": "817-522-2907", - "email": "khloe@entcast.com" - }, - { - "id": 5119, - "guid": "649fb38c-9b96-437c-a348-ad18c59c4b9b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Gardner", - "company": "Multitiqua", - "phone": "877-555-2955", - "email": "serenity@multitiqua.com" - }, - { - "id": 5120, - "guid": "f61f92f6-5399-46d3-bdbb-d5eca0686037", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Hancock", - "company": "Anagraph", - "phone": "826-493-3499", - "email": "autumn@anagraph.com" - }, - { - "id": 5121, - "guid": "64499884-2c4c-4d30-9079-1436e977bad9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Campbell", - "company": "SysUSA", - "phone": "894-427-3439", - "email": "savannah@sysusa.com" - }, - { - "id": 5122, - "guid": "78c0a81f-5ebe-4797-8e97-9caf1655effc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Gilbert", - "company": "Rapigrafix", - "phone": "869-424-2835", - "email": "peyton@rapigrafix.com" - }, - { - "id": 5123, - "guid": "938bece4-6ed1-4d85-aff6-3ae00cb9a8f5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Ogden", - "company": "Netseco", - "phone": "809-530-2761", - "email": "faith@netseco.com" - }, - { - "id": 5124, - "guid": "a2f55d77-c821-4d48-8f15-105246e278be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Gilson", - "company": "Robotomic", - "phone": "807-477-2738", - "email": "caroline@robotomic.com" - }, - { - "id": 5125, - "guid": "cb6b9b38-e655-4c9a-9009-8c133ff245e6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Chandter", - "company": "Safeagra", - "phone": "888-545-2378", - "email": "serenity@safeagra.com" - }, - { - "id": 5126, - "guid": "ab31ba76-924a-4c44-a144-a2d2efcdd510", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Oswald", - "company": "Proline", - "phone": "859-519-3308", - "email": "katherine@proline.com" - }, - { - "id": 5127, - "guid": "bd06dc6c-b902-4e13-bd5b-812f9778d7b5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Bush", - "company": "Cryptotegrity", - "phone": "881-532-2230", - "email": "madelyn@cryptotegrity.com" - }, - { - "id": 5128, - "guid": "789b4e6b-7444-4e7f-958c-0ee36b31c77c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Oldman", - "company": "Robotemplate", - "phone": "815-552-2513", - "email": "andrea@robotemplate.com" - }, - { - "id": 5129, - "guid": "5c00601c-28fd-486a-9ff6-80d1f62bd0f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Goodman", - "company": "US Omnigraphik", - "phone": "826-516-3756", - "email": "maya@us omnigraphik.com" - }, - { - "id": 5130, - "guid": "75852b1e-33a9-49b5-a2d8-001d6d3adb67", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Brickman", - "company": "Gigaura", - "phone": "838-520-3257", - "email": "abigail@gigaura.com" - }, - { - "id": 5131, - "guid": "e16b62a2-1a6d-4608-9d51-3d547d11c987", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Charlson", - "company": "Infragraph", - "phone": "866-429-2047", - "email": "grace@infragraph.com" - }, - { - "id": 5132, - "guid": "989a419e-56dc-4bb1-a088-6304bc42d523", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Grace Murphy", - "company": "Compuamerica", - "phone": "823-435-2512", - "email": "grace@compuamerica.com" - }, - { - "id": 5133, - "guid": "5d611fa6-68c2-4125-b85e-c5e36cae5c58", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Gibbs", - "company": "Enlogia", - "phone": "870-488-2219", - "email": "zoey@enlogia.com" - }, - { - "id": 5134, - "guid": "fc73f24f-da14-48d2-8343-786ae0edf299", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Bush", - "company": "Pericenta", - "phone": "827-400-3229", - "email": "emily@pericenta.com" - }, - { - "id": 5135, - "guid": "16bc99d5-6f23-437b-b1f9-a33dbf52c337", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Morrison", - "company": "Orthomedia", - "phone": "837-432-2402", - "email": "riley@orthomedia.com" - }, - { - "id": 5136, - "guid": "c4db7f8c-ab81-4ac5-bbab-6d11acecd027", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Day", - "company": "Conrama", - "phone": "885-473-3976", - "email": "elizabeth@conrama.com" - }, - { - "id": 5137, - "guid": "f01fbfa4-caa4-4cd2-9d78-6ed8e555752e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Gate", - "company": "Cryptotegrity", - "phone": "892-435-3486", - "email": "melanie@cryptotegrity.com" - }, - { - "id": 5138, - "guid": "d7624322-097f-4468-becf-973c70029994", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Charlotte Thorndike", - "company": "Dynarama", - "phone": "809-467-2554", - "email": "charlotte@dynarama.com" - }, - { - "id": 5139, - "guid": "c21bd991-6137-4473-ae92-309c58690960", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Smith", - "company": "InfoAirway", - "phone": "845-484-2792", - "email": "rachel@infoairway.com" - }, - { - "id": 5140, - "guid": "b44e5bb5-16e3-4aad-9a11-b8ae826f1d89", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Bush", - "company": "eSteganoergy", - "phone": "804-579-2794", - "email": "ariana@esteganoergy.com" - }, - { - "id": 5141, - "guid": "64585567-613e-4d57-a0f8-d2204d5e4bbe", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Miln", - "company": "Netseco", - "phone": "810-483-3613", - "email": "addison@netseco.com" - }, - { - "id": 5142, - "guid": "61278c94-b616-489c-8368-25620a9dab58", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Crossman", - "company": "Titanirola", - "phone": "888-467-2924", - "email": "leah@titanirola.com" - }, - { - "id": 5143, - "guid": "c1df0f18-83dd-4d35-90db-73f910f13e9f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Oswald", - "company": "Compuamerica", - "phone": "896-473-3891", - "email": "mackenzie@compuamerica.com" - }, - { - "id": 5144, - "guid": "96bae1c8-0e0a-464f-adaf-2b6eea157430", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Gate", - "company": "Infragraph", - "phone": "881-467-2703", - "email": "zoe@infragraph.com" - }, - { - "id": 5145, - "guid": "98cf2020-e264-4257-8af6-f0b77db31b15", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Hardman", - "company": "Airdyne", - "phone": "830-505-2683", - "email": "melanie@airdyne.com" - }, - { - "id": 5146, - "guid": "ebf0e408-4f6b-4a76-9199-1307c60021f7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alyssa Oldman", - "company": "US Infratouch", - "phone": "844-536-2463", - "email": "alyssa@us infratouch.com" - }, - { - "id": 5147, - "guid": "a3dd9849-7b96-43e1-86c7-7fd1480a0267", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Hancock", - "company": "Cryptotemplate", - "phone": "811-594-2760", - "email": "sarah@cryptotemplate.com" - }, - { - "id": 5148, - "guid": "9cdd353e-113d-44a8-aab9-1351d92fd9e7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Fisher", - "company": "Multitiqua", - "phone": "857-418-3928", - "email": "trinity@multitiqua.com" - }, - { - "id": 5149, - "guid": "c9b6595c-bc4a-4fcb-a0bc-22620964cd2f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Galbraith", - "company": "Fibrotouch", - "phone": "807-472-2415", - "email": "sarah@fibrotouch.com" - }, - { - "id": 5150, - "guid": "09dc95b9-f963-4728-94d2-93470699dd38", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Brooks", - "company": "Fibrotopia", - "phone": "877-457-2772", - "email": "emily@fibrotopia.com" - }, - { - "id": 5151, - "guid": "62dba11c-c058-4c43-bb19-dafe41b5c407", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Goldman", - "company": "Enlogia", - "phone": "851-500-2346", - "email": "kylie@enlogia.com" - }, - { - "id": 5152, - "guid": "3dd33288-ca88-49e6-ab31-35d12154e365", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Galbraith", - "company": "Interliant", - "phone": "813-472-2257", - "email": "serenity@interliant.com" - }, - { - "id": 5153, - "guid": "6749a6a0-c1ee-4d55-af82-94bb014798fe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Galbraith", - "company": "Fibrotopia", - "phone": "859-426-3136", - "email": "caroline@fibrotopia.com" - }, - { - "id": 5154, - "guid": "063a6981-a175-441e-8ae0-7454ef522d78", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Morrison", - "company": "Syssoft", - "phone": "875-518-2556", - "email": "rachel@syssoft.com" - }, - { - "id": 5155, - "guid": "a42b7405-0f76-4590-b9d4-ba83e636293d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Creighton", - "company": "Robotemplate", - "phone": "898-441-2376", - "email": "allison@robotemplate.com" - }, - { - "id": 5156, - "guid": "3cbe622f-cde1-45fa-bf53-611972d008dc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Sheldon", - "company": "Netsystems", - "phone": "888-474-3924", - "email": "isabella@netsystems.com" - }, - { - "id": 5157, - "guid": "8841224e-9720-4f3b-938e-80f56516094d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Murphy", - "company": "Syssoft", - "phone": "857-461-3838", - "email": "sophie@syssoft.com" - }, - { - "id": 5158, - "guid": "f777ca89-74ff-46b7-93f1-3567555781b3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Gill", - "company": "Interliant", - "phone": "858-570-2167", - "email": "claire@interliant.com" - }, - { - "id": 5159, - "guid": "aec27cfd-7030-4371-8fc7-9d23d5a62d96", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Chesterton", - "company": "Nanobanc", - "phone": "888-572-3667", - "email": "kylie@nanobanc.com" - }, - { - "id": 5160, - "guid": "6f956ebc-04c7-4d0a-9ef2-1d45de24a6f6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila Abramson", - "company": "Ameritron", - "phone": "831-496-2721", - "email": "camila@ameritron.com" - }, - { - "id": 5161, - "guid": "b1c74aa9-6375-4147-93e4-b3d66cac4d01", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Watson", - "company": "Unologic", - "phone": "809-547-2397", - "email": "anna@unologic.com" - }, - { - "id": 5162, - "guid": "0d2e9063-53e4-4c78-a512-b7cbcc91e2ed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Mercer", - "company": "Hypervaco", - "phone": "890-567-2955", - "email": "rachel@hypervaco.com" - }, - { - "id": 5163, - "guid": "393d461a-7037-4420-bdbe-d56825d17662", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Carey", - "company": "Skydata", - "phone": "836-545-2296", - "email": "bailey@skydata.com" - }, - { - "id": 5164, - "guid": "b569b3b1-2527-4e05-b6d6-c17a56fc4b2f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Neal", - "company": "SysUSA", - "phone": "866-559-2364", - "email": "ella@sysusa.com" - }, - { - "id": 5165, - "guid": "34ea3607-f762-440b-954a-64297255c988", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Young", - "company": "Netseco", - "phone": "889-591-3804", - "email": "sophia@netseco.com" - }, - { - "id": 5166, - "guid": "2d7913d6-af3c-4ba0-80ea-e7fbd45ef276", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Turner", - "company": "SysVenamerica", - "phone": "812-560-3205", - "email": "layla@sysvenamerica.com" - }, - { - "id": 5167, - "guid": "a9e71308-80cc-4eee-9b0c-93b8ca8da12f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Calhoun", - "company": "iMedconik", - "phone": "820-529-2622", - "email": "angelina@imedconik.com" - }, - { - "id": 5168, - "guid": "72715f97-a5c0-461a-9e10-d49d00676980", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emily Ford", - "company": "Quintegrity", - "phone": "827-551-2818", - "email": "emily@quintegrity.com" - }, - { - "id": 5169, - "guid": "7e2f5c37-f9bc-45e9-ad33-42eb209398b2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Turner", - "company": "Orthomedia", - "phone": "859-443-2984", - "email": "mariah@orthomedia.com" - }, - { - "id": 5170, - "guid": "cd1b1c88-182e-45ed-9f6e-b559a9e6054b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Neal", - "company": "Generola", - "phone": "859-552-2774", - "email": "lily@generola.com" - }, - { - "id": 5171, - "guid": "bd411668-c83a-4a1b-9dce-63f65d924d07", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Victoria Milton", - "company": "Textiqua", - "phone": "892-550-3006", - "email": "victoria@textiqua.com" - }, - { - "id": 5172, - "guid": "5a00b3d2-a1bb-4cd0-ad1d-b5ea6b1dac5f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Wainwright", - "company": "Jamrola", - "phone": "822-581-3534", - "email": "madelyn@jamrola.com" - }, - { - "id": 5173, - "guid": "fa1056de-fdc4-4ca2-aa17-15646b996eaf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maria Hodges", - "company": "Genland", - "phone": "833-534-3690", - "email": "maria@genland.com" - }, - { - "id": 5174, - "guid": "f8a209b1-a52b-4f5c-946d-69ded94bb2f5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Nathan", - "company": "Transtouch", - "phone": "869-420-3867", - "email": "paige@transtouch.com" - }, - { - "id": 5175, - "guid": "e7727fd4-1efa-4b65-a55a-f1b41b239518", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Croftoon", - "company": "Polytheon", - "phone": "876-557-2371", - "email": "lillian@polytheon.com" - }, - { - "id": 5176, - "guid": "78390244-00ed-495b-b372-7db7ad11d48e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Day", - "company": "Xeicon", - "phone": "853-550-3997", - "email": "vanessa@xeicon.com" - }, - { - "id": 5177, - "guid": "78ecd9b7-93eb-4478-9bf3-74cfbf865348", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Walkman", - "company": "Techtron", - "phone": "811-569-2945", - "email": "vanessa@techtron.com" - }, - { - "id": 5178, - "guid": "3bcbf3d4-09d8-4ff4-89bb-4aacd51efe7a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mia Vance", - "company": "OpKeycomm", - "phone": "875-510-3830", - "email": "mia@opkeycomm.com" - }, - { - "id": 5179, - "guid": "fafc7faa-2708-450d-87c7-5c8973dafd94", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Stanley", - "company": "Mescaridic", - "phone": "884-538-3656", - "email": "alexis@mescaridic.com" - }, - { - "id": 5180, - "guid": "10aef799-55e7-43d3-b06a-7145a0d4df8c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Young", - "company": "Navivacs", - "phone": "898-475-2465", - "email": "molly@navivacs.com" - }, - { - "id": 5181, - "guid": "ce49ccc6-3521-4a3b-908b-5be4bfa2ad8d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Gilmore", - "company": "Titanigraf", - "phone": "874-572-3588", - "email": "hailey@titanigraf.com" - }, - { - "id": 5182, - "guid": "30b25af9-fe32-4160-9988-692cd789a21d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Vance", - "company": "Truetomic", - "phone": "867-431-2200", - "email": "vanessa@truetomic.com" - }, - { - "id": 5183, - "guid": "2e9f1f6e-11e8-4ecd-a2c0-fd69b4bf5585", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia Nelson", - "company": "Mescaridic", - "phone": "880-464-2798", - "email": "sophia@mescaridic.com" - }, - { - "id": 5184, - "guid": "d297fe8c-4a6e-40fd-afc9-d4c1114e22da", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sydney Campbell", - "company": "Fibrotouch", - "phone": "880-575-2667", - "email": "sydney@fibrotouch.com" - }, - { - "id": 5185, - "guid": "055eed7c-a286-4aea-9713-eaf9d5ac5e5e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Day", - "company": "Netseco", - "phone": "814-429-2484", - "email": "paige@netseco.com" - }, - { - "id": 5186, - "guid": "4828b260-ef98-4825-abd2-1603ac251520", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Timmons", - "company": "Robotemplate", - "phone": "892-551-3208", - "email": "ariana@robotemplate.com" - }, - { - "id": 5187, - "guid": "c8314286-0654-483d-9ef6-196af9a4bde3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Morrison", - "company": "Rapigrafix", - "phone": "835-439-3986", - "email": "gabrielle@rapigrafix.com" - }, - { - "id": 5188, - "guid": "a93e8805-c8e7-4fde-89d8-233552e4f108", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Adamson", - "company": "Thermotomic", - "phone": "835-560-3019", - "email": "eva@thermotomic.com" - }, - { - "id": 5189, - "guid": "18f5f077-493b-4e5b-a5c2-30bb56b2f809", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Gibbs", - "company": "Generola", - "phone": "811-549-2605", - "email": "angelina@generola.com" - }, - { - "id": 5190, - "guid": "ac9d0966-58d8-4be6-816c-8662315c04ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Molligan", - "company": "Unconix", - "phone": "884-589-3975", - "email": "emma@unconix.com" - }, - { - "id": 5191, - "guid": "876a5238-4599-4cfe-bd9b-083e0855b67d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison Morrison", - "company": "Robotomic", - "phone": "888-424-2804", - "email": "addison@robotomic.com" - }, - { - "id": 5192, - "guid": "d02c9de4-1121-49e4-8e71-b3a92f6c6f73", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoey Morrison", - "company": "US Omnigraphik", - "phone": "860-583-3611", - "email": "zoey@us omnigraphik.com" - }, - { - "id": 5193, - "guid": "592e2569-b9f3-4377-b24a-29806e17b5de", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Cramer", - "company": "Technogra", - "phone": "887-528-2636", - "email": "lily@technogra.com" - }, - { - "id": 5194, - "guid": "c4c242bf-5451-4c5b-8103-3be0443e1fe3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Crossman", - "company": "Anaframe", - "phone": "847-597-3681", - "email": "lauren@anaframe.com" - }, - { - "id": 5195, - "guid": "2f6dee35-8c83-4e36-8057-a09a6e6e85ce", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Bush", - "company": "Fibrotopia", - "phone": "820-513-3461", - "email": "serenity@fibrotopia.com" - }, - { - "id": 5196, - "guid": "b6ba7062-0659-4bef-95b0-d028740a7b6f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Milton", - "company": "Orthosoft", - "phone": "879-474-2624", - "email": "caroline@orthosoft.com" - }, - { - "id": 5197, - "guid": "f9b9b890-fbd6-4388-98de-d695a3feb21b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Campbell", - "company": "Unologic", - "phone": "846-527-3623", - "email": "elizabeth@unologic.com" - }, - { - "id": 5198, - "guid": "bf11469b-d0ed-4120-b9dc-dae461fcc143", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana WifKinson", - "company": "Netseco", - "phone": "853-519-2343", - "email": "ariana@netseco.com" - }, - { - "id": 5199, - "guid": "35e54363-cc17-4b27-a5be-3caa81ef760d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Molly Smith", - "company": "Sontopia", - "phone": "893-563-3128", - "email": "molly@sontopia.com" - }, - { - "id": 5200, - "guid": "c545315a-bd6f-41bc-8f03-e94c24d6019f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Hancock", - "company": "Techtron", - "phone": "858-537-3584", - "email": "katelyn@techtron.com" - }, - { - "id": 5201, - "guid": "5b2d6d7b-5b84-4f1c-bd9b-f637b7c9eac4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Otis", - "company": "Xeicon", - "phone": "899-448-3660", - "email": "molly@xeicon.com" - }, - { - "id": 5202, - "guid": "41144c7f-7e54-42a6-8f44-9e73ee4f3cd3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Carrington", - "company": "RoboAerlogix", - "phone": "885-560-3448", - "email": "chloe@roboaerlogix.com" - }, - { - "id": 5203, - "guid": "9e240705-6b4d-4d51-a45f-65f37b6b4d7a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Adamson", - "company": "iQualcar", - "phone": "852-413-3911", - "email": "camila@iqualcar.com" - }, - { - "id": 5204, - "guid": "b2a967db-cf66-4936-988e-95ef5b374b97", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Brickman", - "company": "RoboAerlogix", - "phone": "894-445-3060", - "email": "isabelle@roboaerlogix.com" - }, - { - "id": 5205, - "guid": "be666de5-1e8e-47c4-9bd4-7b552156cce6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Oswald", - "company": "Hypervaco", - "phone": "850-479-3223", - "email": "mariah@hypervaco.com" - }, - { - "id": 5206, - "guid": "10f481fb-8350-45d4-9690-8c3ac7ce5bc1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Gerald", - "company": "Netseco", - "phone": "820-484-3019", - "email": "amelia@netseco.com" - }, - { - "id": 5207, - "guid": "f98daf87-2756-4446-8920-a5652d5eee4b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Melanie Nash", - "company": "Ameritron", - "phone": "806-517-2534", - "email": "melanie@ameritron.com" - }, - { - "id": 5208, - "guid": "7ae7e8e6-6605-41b8-8ffe-44f4575a3034", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brianna Timmons", - "company": "Mescaridic", - "phone": "859-564-3170", - "email": "brianna@mescaridic.com" - }, - { - "id": 5209, - "guid": "af1059b8-0ec3-4cd5-be91-55ab21e98f52", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Smith", - "company": "Turbomart", - "phone": "863-512-2968", - "email": "victoria@turbomart.com" - }, - { - "id": 5210, - "guid": "63309d49-ad24-4dbd-ad62-9045f477ded1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Adamson", - "company": "Proline", - "phone": "880-491-3686", - "email": "makayla@proline.com" - }, - { - "id": 5211, - "guid": "3de29741-312f-4be9-91ae-08ad56d2b5c6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Chesterton", - "company": "Entcast", - "phone": "823-450-2065", - "email": "alexandra@entcast.com" - }, - { - "id": 5212, - "guid": "98909aaf-10db-4958-ba17-0ff43c82b572", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ashley Timmons", - "company": "eSteganoergy", - "phone": "875-458-3323", - "email": "ashley@esteganoergy.com" - }, - { - "id": 5213, - "guid": "7c3daee7-d17f-4f16-af4d-b9ef8381bb53", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Gate", - "company": "Idmax", - "phone": "844-596-2334", - "email": "valeria@idmax.com" - }, - { - "id": 5214, - "guid": "ed0fba07-e84d-4f2e-a936-c422f76d6eba", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Ford", - "company": "Pacwest", - "phone": "805-581-2201", - "email": "madelyn@pacwest.com" - }, - { - "id": 5215, - "guid": "c7e3dd3e-2178-4cba-ab08-7babf40225f3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Daniels", - "company": "Videobanc", - "phone": "800-502-2838", - "email": "layla@videobanc.com" - }, - { - "id": 5216, - "guid": "52892960-22ff-4c66-8016-6786a55dc6f3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Otis", - "company": "Idmax", - "phone": "886-457-2448", - "email": "mackenzie@idmax.com" - }, - { - "id": 5217, - "guid": "22f3767a-80aa-4073-8f3c-f117e0028af3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Freeman", - "company": "Rapigrafix", - "phone": "887-547-3344", - "email": "zoey@rapigrafix.com" - }, - { - "id": 5218, - "guid": "7aa517a0-347c-43a2-8dd7-4953319c4039", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Gibbs", - "company": "Conrama", - "phone": "866-593-2856", - "email": "khloe@conrama.com" - }, - { - "id": 5219, - "guid": "4f342774-d532-4910-8fa9-e887d25746ec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Carter", - "company": "iOptystix", - "phone": "896-404-3472", - "email": "destiny@ioptystix.com" - }, - { - "id": 5220, - "guid": "fa009b75-a3d4-4f2e-b9e2-525bcb8b857c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Miers", - "company": "iSkyvaco", - "phone": "843-411-3503", - "email": "addison@iskyvaco.com" - }, - { - "id": 5221, - "guid": "59a3e223-4e09-4550-b735-0db001147f4c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Nelson", - "company": "Celgra", - "phone": "894-490-3980", - "email": "leah@celgra.com" - }, - { - "id": 5222, - "guid": "8af297fc-9337-4f13-a0ad-94093bd66c93", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton White", - "company": "Jamrola", - "phone": "885-492-2642", - "email": "peyton@jamrola.com" - }, - { - "id": 5223, - "guid": "6b33451e-493c-4753-9fa2-d3021b26b7f4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Haig", - "company": "Allphysiche", - "phone": "861-425-2345", - "email": "olivia@allphysiche.com" - }, - { - "id": 5224, - "guid": "4db541c0-2fc4-446f-8cfb-cc52b650d183", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Miller", - "company": "Ameritron", - "phone": "870-573-3827", - "email": "madelyn@ameritron.com" - }, - { - "id": 5225, - "guid": "72a75333-eb34-400f-815d-674e1f8aea43", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Carroll", - "company": "Unologic", - "phone": "816-549-2259", - "email": "riley@unologic.com" - }, - { - "id": 5226, - "guid": "f1798469-34df-4b48-b5d5-3545aaa8865a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Molligan", - "company": "Ventanium", - "phone": "855-460-3886", - "email": "zoe@ventanium.com" - }, - { - "id": 5227, - "guid": "ab24f689-5e12-42af-a1aa-f76c0d87fff4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Cramer", - "company": "Truetomic", - "phone": "850-449-2401", - "email": "addison@truetomic.com" - }, - { - "id": 5228, - "guid": "0daf5590-4c68-4068-8714-3f42e733390a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Carey", - "company": "Polytheon", - "phone": "887-576-2967", - "email": "katelyn@polytheon.com" - }, - { - "id": 5229, - "guid": "562982aa-bc1b-4541-a1f8-0d334805ecc2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sarah Gilbert", - "company": "Conrama", - "phone": "891-444-3564", - "email": "sarah@conrama.com" - }, - { - "id": 5230, - "guid": "b3a7725a-0ac3-4d6b-aca1-4c4a6f2e1e75", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Winter", - "company": "Orthomedia", - "phone": "850-591-2742", - "email": "hailey@orthomedia.com" - }, - { - "id": 5231, - "guid": "117c5b61-a661-4c6b-8ef7-e46e86f1ef4b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Carter", - "company": "Jamrola", - "phone": "802-556-2551", - "email": "molly@jamrola.com" - }, - { - "id": 5232, - "guid": "179d5392-6d93-444c-b2ee-42d901eb7510", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lillian Smith", - "company": "Anagraph", - "phone": "870-520-3350", - "email": "lillian@anagraph.com" - }, - { - "id": 5233, - "guid": "7a5c2f51-8a7e-4f41-a884-ec04500748ff", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alyssa Hamphrey", - "company": "Westmedia", - "phone": "884-446-3008", - "email": "alyssa@westmedia.com" - }, - { - "id": 5234, - "guid": "2b45320a-1b9c-4775-853b-66a88da9336c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Timmons", - "company": "Allnet", - "phone": "836-520-2538", - "email": "brianna@allnet.com" - }, - { - "id": 5235, - "guid": "6c611736-ce55-46b5-b3c8-2d5e83f0431d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Gill", - "company": "Allnet", - "phone": "822-443-3051", - "email": "alexa@allnet.com" - }, - { - "id": 5236, - "guid": "8489fce3-da32-4d9f-9aab-c8f0d7118901", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Carrington", - "company": "Ameritron", - "phone": "820-455-2617", - "email": "angelina@ameritron.com" - }, - { - "id": 5237, - "guid": "282ecc0d-bf0f-454f-a8bf-2b0013c2356a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Day", - "company": "Genland", - "phone": "839-531-2725", - "email": "kaylee@genland.com" - }, - { - "id": 5238, - "guid": "72658b38-2622-4f33-8d0e-a2e5edb70871", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katelyn Galbraith", - "company": "Raylog", - "phone": "870-587-3087", - "email": "katelyn@raylog.com" - }, - { - "id": 5239, - "guid": "9fa7d464-af08-41a9-ac41-1b3c1fdeb8fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Abramson", - "company": "Orthosoft", - "phone": "885-538-2875", - "email": "aaliyah@orthosoft.com" - }, - { - "id": 5240, - "guid": "7dd6baae-eddf-4476-8910-94c17dab7f8b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Chandter", - "company": "Sontopia", - "phone": "818-417-2736", - "email": "samantha@sontopia.com" - }, - { - "id": 5241, - "guid": "82c1f185-220a-415c-bf4b-ceca60ca3abc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Murphy", - "company": "Fibroserve", - "phone": "866-587-3720", - "email": "genesis@fibroserve.com" - }, - { - "id": 5242, - "guid": "6fc61e61-4ebc-421b-b6ff-b328c531dab5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ella Nelson", - "company": "Allphysiche", - "phone": "824-584-3811", - "email": "ella@allphysiche.com" - }, - { - "id": 5243, - "guid": "12807a3a-d035-4c49-99b8-741feb606f1d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Davidson", - "company": "Systheon", - "phone": "856-578-2015", - "email": "khloe@systheon.com" - }, - { - "id": 5244, - "guid": "63b5fef7-5f17-4d7d-b2b6-0c017d4ddf70", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Webster", - "company": "Unologic", - "phone": "852-567-3591", - "email": "emily@unologic.com" - }, - { - "id": 5245, - "guid": "9ec68329-ee5f-4274-9709-2e93bb916bff", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Milton", - "company": "Fibrotopia", - "phone": "848-574-3004", - "email": "kaitlyn@fibrotopia.com" - }, - { - "id": 5246, - "guid": "1e8f838e-2a79-4af4-9b54-40fa99c50bd6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Oliver", - "company": "US Omnigraphik", - "phone": "869-503-3425", - "email": "destiny@us omnigraphik.com" - }, - { - "id": 5247, - "guid": "e6c8e131-4460-42ae-b11a-db1c6a4597b9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Warren", - "company": "Celgra", - "phone": "855-564-3036", - "email": "gabriella@celgra.com" - }, - { - "id": 5248, - "guid": "2711dc45-5d3e-48ae-b41e-7308b86e9f4e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Abramson", - "company": "Titanirola", - "phone": "833-487-2568", - "email": "olivia@titanirola.com" - }, - { - "id": 5249, - "guid": "048e3dd8-ceb8-4e8d-9444-da719f390037", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Carrington", - "company": "Cryptotemplate", - "phone": "802-590-2456", - "email": "mackenzie@cryptotemplate.com" - }, - { - "id": 5250, - "guid": "23ec17d6-37c5-41ef-a92a-5017b2f0d257", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Brooks", - "company": "Titanigraf", - "phone": "814-487-3845", - "email": "maria@titanigraf.com" - }, - { - "id": 5251, - "guid": "891c2264-e62a-4c97-9fd2-2045ba54594d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Ward", - "company": "Aprama", - "phone": "881-426-3534", - "email": "jocelyn@aprama.com" - }, - { - "id": 5252, - "guid": "d0dc7736-acf7-445d-b90a-30f72aff9754", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Stanley", - "company": "iMedconik", - "phone": "884-419-3434", - "email": "grace@imedconik.com" - }, - { - "id": 5253, - "guid": "dbddfa92-a688-4e67-a427-8aae04af822f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Gilmore", - "company": "Navivacs", - "phone": "817-535-2337", - "email": "mia@navivacs.com" - }, - { - "id": 5254, - "guid": "4539dee4-61af-488b-ab95-738e9732be8f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Caroline Gardner", - "company": "Conotomics", - "phone": "843-515-3432", - "email": "caroline@conotomics.com" - }, - { - "id": 5255, - "guid": "3c52a40b-d312-4865-aa6a-3068331b7b48", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Walkman", - "company": "Interliant", - "phone": "853-429-2531", - "email": "serenity@interliant.com" - }, - { - "id": 5256, - "guid": "a34a7fe8-8ea5-4c35-8ec4-fc8349f3416f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Higgins", - "company": "Multitiqua", - "phone": "890-565-2345", - "email": "katelyn@multitiqua.com" - }, - { - "id": 5257, - "guid": "12792876-43a2-403b-87df-e63935e20ef7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Chesterton", - "company": "Anaframe", - "phone": "869-552-2039", - "email": "taylor@anaframe.com" - }, - { - "id": 5258, - "guid": "8f0355c2-b76a-4d2b-9d26-558cbcabc9f4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Thorndike", - "company": "Xeicon", - "phone": "868-412-2799", - "email": "sophia@xeicon.com" - }, - { - "id": 5259, - "guid": "45ae20db-189b-4a24-ada7-3ea5e91ca612", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Sheldon", - "company": "Truetomic", - "phone": "855-441-3932", - "email": "audrey@truetomic.com" - }, - { - "id": 5260, - "guid": "d07a1228-945a-4ff9-8b56-6e67b16ed64e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Anna Waller", - "company": "Navivacs", - "phone": "805-525-2452", - "email": "anna@navivacs.com" - }, - { - "id": 5261, - "guid": "15c7d668-7f62-4966-b753-521bf9950f22", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Gilmore", - "company": "Fibrotopia", - "phone": "819-572-2602", - "email": "khloe@fibrotopia.com" - }, - { - "id": 5262, - "guid": "914cb678-f713-491f-b236-3db9209e1c79", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Hodges", - "company": "iOptystix", - "phone": "818-564-3216", - "email": "caroline@ioptystix.com" - }, - { - "id": 5263, - "guid": "b65a93f7-a4ae-4481-a262-dcdd43e1a716", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Turner", - "company": "Keytheon", - "phone": "854-590-3261", - "email": "alexa@keytheon.com" - }, - { - "id": 5264, - "guid": "57514d2a-51b2-4283-9662-14b4a7f3d799", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Wesley", - "company": "Inridium", - "phone": "818-425-2541", - "email": "gabrielle@inridium.com" - }, - { - "id": 5265, - "guid": "5a4515a6-c65a-4355-a334-a42c9eb1b4b4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Bush", - "company": "Fibrotopia", - "phone": "857-424-3916", - "email": "mia@fibrotopia.com" - }, - { - "id": 5266, - "guid": "2f8a73f6-b0f2-41f9-8111-7fe5c34a78f4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Michaelson", - "company": "Inridium", - "phone": "873-559-2181", - "email": "isabelle@inridium.com" - }, - { - "id": 5267, - "guid": "5547b3e3-fcc0-42b4-8017-ce28dc7eea9a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Chandter", - "company": "Unologic", - "phone": "883-431-3919", - "email": "madison@unologic.com" - }, - { - "id": 5268, - "guid": "91314eee-b54c-46c8-b638-5bd9fad2c925", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Michaelson", - "company": "Xeicon", - "phone": "822-544-3724", - "email": "aaliyah@xeicon.com" - }, - { - "id": 5269, - "guid": "59b477a1-1238-462d-b33e-bdbae7ae273e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Brown", - "company": "SysVenamerica", - "phone": "878-582-2026", - "email": "brooke@sysvenamerica.com" - }, - { - "id": 5270, - "guid": "2f9798aa-eb7e-4c4f-828c-e1d58d7e2b0e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Hancock", - "company": "Multitiqua", - "phone": "844-542-2611", - "email": "valeria@multitiqua.com" - }, - { - "id": 5271, - "guid": "c5fb4c56-8d88-4f33-8c18-2e160a6594bc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Gilbert", - "company": "Teknoplexon", - "phone": "853-504-2749", - "email": "zoe@teknoplexon.com" - }, - { - "id": 5272, - "guid": "5d0ad42a-ce94-466a-96f6-fd831dd66380", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Hancock", - "company": "Orthomedia", - "phone": "817-577-3959", - "email": "emma@orthomedia.com" - }, - { - "id": 5273, - "guid": "081eb32d-313b-4ef4-bc01-689ca22bcffa", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Young", - "company": "Unconix", - "phone": "839-402-3026", - "email": "jasmine@unconix.com" - }, - { - "id": 5274, - "guid": "df40e4e6-b707-421f-9f5a-c2ee6f63af2e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Molligan", - "company": "Teknoplexon", - "phone": "802-515-3409", - "email": "grace@teknoplexon.com" - }, - { - "id": 5275, - "guid": "127f8f19-40f2-475f-b283-a7c2c63901c0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Cramer", - "company": "Qualserve", - "phone": "815-574-2967", - "email": "ashley@qualserve.com" - }, - { - "id": 5276, - "guid": "eb258dc0-44ea-4956-aff9-a39f8c6271c1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Ford", - "company": "Netseco", - "phone": "889-541-3818", - "email": "ella@netseco.com" - }, - { - "id": 5277, - "guid": "105997d4-65b9-445e-b1c6-1c407f46592e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Higgins", - "company": "iEnland", - "phone": "808-570-2791", - "email": "maya@ienland.com" - }, - { - "id": 5278, - "guid": "31baa8b0-132c-4c95-9b90-adabcd4f4d4e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Oldridge", - "company": "Allnet", - "phone": "894-537-2131", - "email": "alexis@allnet.com" - }, - { - "id": 5279, - "guid": "a79d1d9e-94bd-49c9-9e9c-e588adf64aa3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Gill", - "company": "Pericenta", - "phone": "894-428-3448", - "email": "sophia@pericenta.com" - }, - { - "id": 5280, - "guid": "67c43390-c153-4df7-8c01-0533ac7c2491", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Ward", - "company": "Venconix", - "phone": "875-423-2252", - "email": "lauren@venconix.com" - }, - { - "id": 5281, - "guid": "834818ee-ca7c-40e9-b633-f86d90afd098", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Campbell", - "company": "Netsystems", - "phone": "853-593-3626", - "email": "payton@netsystems.com" - }, - { - "id": 5282, - "guid": "502f8fa7-121b-43fc-89d5-6716dc4dc089", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Conors", - "company": "Navivacs", - "phone": "856-496-3714", - "email": "kaylee@navivacs.com" - }, - { - "id": 5283, - "guid": "e9348ca2-13c5-49b2-b51c-ea96b3cf4fc9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Mercer", - "company": "Rapigrafix", - "phone": "860-587-3165", - "email": "valeria@rapigrafix.com" - }, - { - "id": 5284, - "guid": "43a25314-e31d-4208-b201-70aa9b47bdca", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Carey", - "company": "Entcast", - "phone": "868-593-2159", - "email": "eva@entcast.com" - }, - { - "id": 5285, - "guid": "d51270c8-798c-4dba-8c62-5cfb9b994037", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Murphy", - "company": "Unologic", - "phone": "848-522-3682", - "email": "eva@unologic.com" - }, - { - "id": 5286, - "guid": "8a44782e-7e0c-4c27-ac8f-fea35a4d479c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Michaelson", - "company": "Pericenta", - "phone": "835-429-3018", - "email": "bailey@pericenta.com" - }, - { - "id": 5287, - "guid": "5438fa56-d72f-489f-825c-b4e99404281c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Bush", - "company": "InfoAirway", - "phone": "805-568-3198", - "email": "khloe@infoairway.com" - }, - { - "id": 5288, - "guid": "c04df62a-374a-42cf-ad43-1b710773a872", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Claire Day", - "company": "Compuamerica", - "phone": "852-432-3445", - "email": "claire@compuamerica.com" - }, - { - "id": 5289, - "guid": "2377e5ac-c06e-4a46-a740-3ce2bfe5e542", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Hodges", - "company": "Qualserve", - "phone": "834-409-2790", - "email": "angelina@qualserve.com" - }, - { - "id": 5290, - "guid": "3a3578ab-ced1-46b8-86ca-ec7c044c4af9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Sherlock", - "company": "Technogra", - "phone": "860-576-2397", - "email": "riley@technogra.com" - }, - { - "id": 5291, - "guid": "f0358ed5-54c4-4e48-adcf-eeb81889e919", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Hardman", - "company": "eEyetanic", - "phone": "887-509-2777", - "email": "jasmine@eeyetanic.com" - }, - { - "id": 5292, - "guid": "f3243e09-c2ae-4a3b-9712-98f29128ccf8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kayla Chapman", - "company": "Cryptotegrity", - "phone": "836-435-2097", - "email": "kayla@cryptotegrity.com" - }, - { - "id": 5293, - "guid": "e62e5d97-47f7-42e8-9e09-4b71c35db46a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Higgins", - "company": "Celgra", - "phone": "838-404-2954", - "email": "julia@celgra.com" - }, - { - "id": 5294, - "guid": "7297b065-9780-4caf-b7dc-43436202728e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Gilson", - "company": "Genland", - "phone": "802-488-3384", - "email": "sarah@genland.com" - }, - { - "id": 5295, - "guid": "688f522b-3c23-4c3a-b34e-6d096c7aa23b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maya Ford", - "company": "Allphysiche", - "phone": "890-494-2940", - "email": "maya@allphysiche.com" - }, - { - "id": 5296, - "guid": "05f086f5-8412-422f-84a1-e8f24df44dd0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Thorndike", - "company": "SysUSA", - "phone": "863-496-2184", - "email": "ashley@sysusa.com" - }, - { - "id": 5297, - "guid": "f021fc14-bbe5-4bbe-ae76-a256e2a9b6e2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Hawkins", - "company": "Fibrotopia", - "phone": "880-416-3277", - "email": "jasmine@fibrotopia.com" - }, - { - "id": 5298, - "guid": "7d76b1c5-dbf7-4e9e-bf95-2a56ed1bfa4c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Carroll", - "company": "Netsystems", - "phone": "855-542-3320", - "email": "andrea@netsystems.com" - }, - { - "id": 5299, - "guid": "a788d21f-7752-4961-b4c2-cf1cd7fa18f7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Wesley", - "company": "Truegate", - "phone": "839-544-2450", - "email": "alexandra@truegate.com" - }, - { - "id": 5300, - "guid": "934b706a-e8c6-4f7d-8494-c39e1bc0b691", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Fulton", - "company": "Truetomic", - "phone": "897-562-2020", - "email": "mackenzie@truetomic.com" - }, - { - "id": 5301, - "guid": "1f739e9e-e29b-4e68-bcb1-b9567b968bc1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Hodges", - "company": "iQualcar", - "phone": "854-510-3232", - "email": "kaitlyn@iqualcar.com" - }, - { - "id": 5302, - "guid": "79b2b996-b0e3-4ff0-9265-f713bebb9698", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Riley Molligan", - "company": "Technogra", - "phone": "880-588-2834", - "email": "riley@technogra.com" - }, - { - "id": 5303, - "guid": "cabf7223-07d8-4583-831d-f79124ddba2c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Campbell", - "company": "iSkyvaco", - "phone": "818-518-3663", - "email": "isabelle@iskyvaco.com" - }, - { - "id": 5304, - "guid": "413db688-c567-4bde-a04d-70f72e575ba0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Harrison", - "company": "Pericenta", - "phone": "810-434-2310", - "email": "mackenzie@pericenta.com" - }, - { - "id": 5305, - "guid": "34dcdd2f-8826-46e2-81c2-4488dfe36430", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Wood", - "company": "iQualcar", - "phone": "894-480-3331", - "email": "camila@iqualcar.com" - }, - { - "id": 5306, - "guid": "01f520c4-f734-4042-ab6d-d0cf7d46a9d0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Charlson", - "company": "Interliant", - "phone": "824-544-2886", - "email": "emily@interliant.com" - }, - { - "id": 5307, - "guid": "4627a455-a9bd-4d3d-a9ae-db055e93b6a3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Camila Sheldon", - "company": "Rapigrafix", - "phone": "810-509-3941", - "email": "camila@rapigrafix.com" - }, - { - "id": 5308, - "guid": "2fc4a7e3-cdb6-4bc1-b63c-09698f8b7cef", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Carey", - "company": "Robotemplate", - "phone": "858-512-3231", - "email": "zoey@robotemplate.com" - }, - { - "id": 5309, - "guid": "24afdd97-2f6f-425a-ac68-8a1bb65cedd9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Oliver", - "company": "Titanigraf", - "phone": "853-465-2807", - "email": "sarah@titanigraf.com" - }, - { - "id": 5310, - "guid": "f0eb731a-875d-47a5-8c0e-deeff3d8a1f5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Clapton", - "company": "Thermotomic", - "phone": "857-487-3169", - "email": "emily@thermotomic.com" - }, - { - "id": 5311, - "guid": "5bf7cc5f-65df-42f5-9972-1b37ebd8f749", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Oswald", - "company": "Netsystems", - "phone": "849-451-2709", - "email": "lily@netsystems.com" - }, - { - "id": 5312, - "guid": "4b488058-211d-4240-953d-088d1e50aa73", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Hoggarth", - "company": "Orthosoft", - "phone": "896-439-2184", - "email": "ella@orthosoft.com" - }, - { - "id": 5313, - "guid": "568a9ea3-6c15-43fd-a081-f74864acae75", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Michaelson", - "company": "Cryptotemplate", - "phone": "803-458-3445", - "email": "sophia@cryptotemplate.com" - }, - { - "id": 5314, - "guid": "2b38f55a-2fc8-45ca-8e5d-4241c5f4ad71", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lillian Walkman", - "company": "Conrama", - "phone": "811-562-3749", - "email": "lillian@conrama.com" - }, - { - "id": 5315, - "guid": "1b8e450e-3b8e-4ba7-8919-a931adfc4cb3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Miln", - "company": "OpKeycomm", - "phone": "822-444-2968", - "email": "katherine@opkeycomm.com" - }, - { - "id": 5316, - "guid": "6ac9da77-202f-44a8-b739-8dfe697d9949", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Osborne", - "company": "Anaframe", - "phone": "815-487-3201", - "email": "chloe@anaframe.com" - }, - { - "id": 5317, - "guid": "c79f8b63-8e60-4d7a-b411-4bd48370b818", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Gilmore", - "company": "Teknoplexon", - "phone": "856-453-2004", - "email": "mariah@teknoplexon.com" - }, - { - "id": 5318, - "guid": "099dca3c-e72a-43f6-afc7-e37921c4da44", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Mercer", - "company": "InfoAirway", - "phone": "890-487-2135", - "email": "makayla@infoairway.com" - }, - { - "id": 5319, - "guid": "ef21e6c4-0642-46e6-9a98-8d68c99e1e96", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Hoggarth", - "company": "Techtron", - "phone": "853-544-3988", - "email": "lillian@techtron.com" - }, - { - "id": 5320, - "guid": "3e0be006-faaf-46ad-bf9f-79efb615130f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Calhoun", - "company": "Vencom", - "phone": "834-459-2790", - "email": "kaylee@vencom.com" - }, - { - "id": 5321, - "guid": "d6c27bce-f1af-477f-8cfa-6be8ebc41040", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Wallace", - "company": "Mescatron", - "phone": "853-446-2798", - "email": "ava@mescatron.com" - }, - { - "id": 5322, - "guid": "25185ff9-4647-414f-b8a1-69d243b961c5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mariah Neal", - "company": "Tekcar", - "phone": "893-559-3975", - "email": "mariah@tekcar.com" - }, - { - "id": 5323, - "guid": "7f248ada-6f11-4e25-b47a-c79763214a19", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Carey", - "company": "Interliant", - "phone": "888-510-3820", - "email": "arianna@interliant.com" - }, - { - "id": 5324, - "guid": "e8f73d00-929a-4b5b-849d-9fddf1610e4d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Miln", - "company": "Fibrotopia", - "phone": "856-423-2144", - "email": "savannah@fibrotopia.com" - }, - { - "id": 5325, - "guid": "10d62a92-f4e4-44a5-947c-d312f0c1f755", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Harrison", - "company": "SysVenamerica", - "phone": "872-510-2598", - "email": "claire@sysvenamerica.com" - }, - { - "id": 5326, - "guid": "7fb37391-3874-48b6-913c-aef0e5576830", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Hawkins", - "company": "Teratopia", - "phone": "869-498-3886", - "email": "valeria@teratopia.com" - }, - { - "id": 5327, - "guid": "0c8bccd4-d29d-432c-82e8-e22b3f2b7b8d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Youmans", - "company": "Tekcar", - "phone": "831-414-2196", - "email": "sophia@tekcar.com" - }, - { - "id": 5328, - "guid": "c2079824-ab6f-4bea-a9da-5d36d96fa1eb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Clapton", - "company": "Aprama", - "phone": "805-571-2887", - "email": "riley@aprama.com" - }, - { - "id": 5329, - "guid": "ff53f036-3b68-4401-b583-5ba67b5c3f4f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Wayne", - "company": "Allphysiche", - "phone": "842-435-3038", - "email": "kylie@allphysiche.com" - }, - { - "id": 5330, - "guid": "899bec12-2840-4e9f-95f7-4219436eb6ac", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alyssa Gustman", - "company": "Entcast", - "phone": "842-476-2452", - "email": "alyssa@entcast.com" - }, - { - "id": 5331, - "guid": "088a0e60-202d-4406-8a9b-b03e4d6759a5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Nelson", - "company": "Transtouch", - "phone": "891-591-2971", - "email": "mya@transtouch.com" - }, - { - "id": 5332, - "guid": "f812e62c-4572-430e-8eb5-d44348c12fb5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Higgins", - "company": "Infragraph", - "phone": "877-561-2376", - "email": "katelyn@infragraph.com" - }, - { - "id": 5333, - "guid": "4637201d-48f7-4caa-8328-ed195e609a73", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Vaughan", - "company": "Allnet", - "phone": "807-497-2257", - "email": "julia@allnet.com" - }, - { - "id": 5334, - "guid": "2361e87a-cdd9-4e9a-8cf0-fbc904a620dc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Chandter", - "company": "Thermotomic", - "phone": "852-495-3397", - "email": "ava@thermotomic.com" - }, - { - "id": 5335, - "guid": "08ea23f2-9ed2-4b9a-9d31-2ca09e95ed44", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna WifKinson", - "company": "Westtomik", - "phone": "870-528-2553", - "email": "anna@westtomik.com" - }, - { - "id": 5336, - "guid": "c8a81684-c732-48b6-b629-8e356b0d2fea", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Gerald", - "company": "Techtron", - "phone": "894-516-3648", - "email": "isabella@techtron.com" - }, - { - "id": 5337, - "guid": "aa3aaa85-437d-4c0a-b654-0e79daf45c78", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Chandter", - "company": "Jamrola", - "phone": "833-428-2196", - "email": "lauren@jamrola.com" - }, - { - "id": 5338, - "guid": "a53b2ad4-b39a-4818-8968-05de12f87982", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Murphy", - "company": "Orthomedia", - "phone": "800-503-2859", - "email": "ella@orthomedia.com" - }, - { - "id": 5339, - "guid": "cc30e2a5-9651-440f-b918-947ea4b1f1a3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hannah Carter", - "company": "Dynarama", - "phone": "850-554-2819", - "email": "hannah@dynarama.com" - }, - { - "id": 5340, - "guid": "5d1bf295-c0b4-4700-9da0-4c03b02c1d34", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Carter", - "company": "Videobanc", - "phone": "888-553-3099", - "email": "kayla@videobanc.com" - }, - { - "id": 5341, - "guid": "c193f2c2-4025-413f-b6d1-5c91172b6a77", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Watson", - "company": "Infragraph", - "phone": "850-541-2897", - "email": "ava@infragraph.com" - }, - { - "id": 5342, - "guid": "a1b75a43-7943-42f3-86fd-8f56104982f9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth Wallace", - "company": "Safetrust", - "phone": "894-499-2026", - "email": "elizabeth@safetrust.com" - }, - { - "id": 5343, - "guid": "ca9eabff-2ac2-4a34-b366-682e95a9e61e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Thornton", - "company": "Gigaura", - "phone": "809-508-2103", - "email": "alyssa@gigaura.com" - }, - { - "id": 5344, - "guid": "7a260d99-8732-4056-885e-c0363332a2fc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Warren", - "company": "Robotomic", - "phone": "857-439-3351", - "email": "alexandra@robotomic.com" - }, - { - "id": 5345, - "guid": "f5387007-aea4-4358-8814-b95b56c4a50f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Sheldon", - "company": "Rapigrafix", - "phone": "856-514-2556", - "email": "brooke@rapigrafix.com" - }, - { - "id": 5346, - "guid": "521471b7-37e7-4c66-8a5b-a72a0c9bd4f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Hancock", - "company": "iSkyvaco", - "phone": "840-524-3463", - "email": "ashley@iskyvaco.com" - }, - { - "id": 5347, - "guid": "ffe0515c-5132-4a25-adca-b996f46765c7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Wesley", - "company": "Allphysiche", - "phone": "899-514-2103", - "email": "kimberly@allphysiche.com" - }, - { - "id": 5348, - "guid": "515864d2-aba9-439e-8972-22da7671d227", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Brickman", - "company": "Airdyne", - "phone": "885-490-3724", - "email": "gabriella@airdyne.com" - }, - { - "id": 5349, - "guid": "28564fe1-ac8d-4758-af43-b76e80f25af0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Wayne", - "company": "Netseco", - "phone": "836-402-2919", - "email": "sarah@netseco.com" - }, - { - "id": 5350, - "guid": "2a8bd761-3de3-4f4f-9743-6c47159040fe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Wayne", - "company": "Conrama", - "phone": "859-496-3954", - "email": "audrey@conrama.com" - }, - { - "id": 5351, - "guid": "099a5d3e-f224-4031-801b-546fd4bbf7ff", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Sheldon", - "company": "Anaframe", - "phone": "868-478-2513", - "email": "trinity@anaframe.com" - }, - { - "id": 5352, - "guid": "f6716298-370a-4728-ac54-af53efd34ff1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Osborne", - "company": "Robotemplate", - "phone": "866-548-3911", - "email": "victoria@robotemplate.com" - }, - { - "id": 5353, - "guid": "9d989335-4957-4cd8-9f82-39c864fba199", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Smith", - "company": "eSteganoergy", - "phone": "835-424-2308", - "email": "molly@esteganoergy.com" - }, - { - "id": 5354, - "guid": "8b10bfa4-e413-470d-a8bc-5fed6b421c3a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Milton", - "company": "Safeagra", - "phone": "855-587-2973", - "email": "bella@safeagra.com" - }, - { - "id": 5355, - "guid": "051e1515-dbd4-4fe9-8d71-da31c6cb9537", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Waller", - "company": "Orthosoft", - "phone": "810-515-3540", - "email": "taylor@orthosoft.com" - }, - { - "id": 5356, - "guid": "02d180f9-1df6-434b-9404-a796df44c1a5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Ward", - "company": "Truetomic", - "phone": "810-584-3567", - "email": "charlotte@truetomic.com" - }, - { - "id": 5357, - "guid": "43485a4e-0426-4d5c-93f7-fe1273c3c8c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Neal", - "company": "Steganoconiche", - "phone": "879-476-2672", - "email": "ella@steganoconiche.com" - }, - { - "id": 5358, - "guid": "85c2118f-5905-4982-91e4-27655aa9e7fb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Owen", - "company": "Nanobanc", - "phone": "821-522-2604", - "email": "charlotte@nanobanc.com" - }, - { - "id": 5359, - "guid": "15ae5cae-9d9f-417a-bc0f-85d0c1cbe6ae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Thorndike", - "company": "Thermotomic", - "phone": "841-502-2719", - "email": "anna@thermotomic.com" - }, - { - "id": 5360, - "guid": "02f422f2-a916-4e22-8184-9a08dde5813a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Day", - "company": "iQualcar", - "phone": "804-524-2216", - "email": "mia@iqualcar.com" - }, - { - "id": 5361, - "guid": "a7f586bf-e681-46a7-af16-f98620cfbbd8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Adamson", - "company": "Unologic", - "phone": "886-523-3475", - "email": "amelia@unologic.com" - }, - { - "id": 5362, - "guid": "2ea3325b-1ce6-4f58-b726-9b15cc3fd410", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Wesley", - "company": "Robotomic", - "phone": "815-407-2444", - "email": "aaliyah@robotomic.com" - }, - { - "id": 5363, - "guid": "4aee05c8-9f21-44f4-bde1-ee80d2070436", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aubrey Thornton", - "company": "iQualcar", - "phone": "843-451-2547", - "email": "aubrey@iqualcar.com" - }, - { - "id": 5364, - "guid": "73b51b97-9329-4253-9ec8-68b2603716ec", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Hamphrey", - "company": "Venconix", - "phone": "842-489-3225", - "email": "aubrey@venconix.com" - }, - { - "id": 5365, - "guid": "461d0953-1d19-4a3d-b2a6-abad77fbf3dc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Higgins", - "company": "Anagraph", - "phone": "828-413-3885", - "email": "lillian@anagraph.com" - }, - { - "id": 5366, - "guid": "c4a3e91a-0270-4201-8399-fbc725f369bd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Fisher", - "company": "Proline", - "phone": "842-596-3579", - "email": "hailey@proline.com" - }, - { - "id": 5367, - "guid": "eab82a16-7742-4f0a-b41b-d59ee13905cd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Clapton", - "company": "Celgra", - "phone": "864-539-2567", - "email": "rachel@celgra.com" - }, - { - "id": 5368, - "guid": "dbb99f40-9991-4533-9831-b6b5a1aea9bf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Sheldon", - "company": "Polytheon", - "phone": "890-495-3048", - "email": "madeline@polytheon.com" - }, - { - "id": 5369, - "guid": "4a6208fb-b00c-4a67-958a-d79a979d1699", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Clapton", - "company": "eSteganoergy", - "phone": "871-417-3294", - "email": "andrea@esteganoergy.com" - }, - { - "id": 5370, - "guid": "3754cba5-ff48-4a5f-acc1-c3fc52c4fe18", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Young", - "company": "Ameritron", - "phone": "827-587-3801", - "email": "isabella@ameritron.com" - }, - { - "id": 5371, - "guid": "eca92512-3c4c-447b-8dcf-c4f15dcb439f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Wallace", - "company": "SysVenamerica", - "phone": "816-537-2004", - "email": "brooke@sysvenamerica.com" - }, - { - "id": 5372, - "guid": "4bf10cdf-d7d0-4237-8da9-2544f0a031a2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Daniels", - "company": "Hypervaco", - "phone": "861-530-3325", - "email": "katherine@hypervaco.com" - }, - { - "id": 5373, - "guid": "5fd0d29a-a09d-42fc-aefb-bcd7280a0ac0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Osborne", - "company": "Unologic", - "phone": "853-598-3448", - "email": "madelyn@unologic.com" - }, - { - "id": 5374, - "guid": "b83a4921-5bb3-4cbf-a858-479b874841ec", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Gill", - "company": "US Infratouch", - "phone": "831-575-3671", - "email": "emma@us infratouch.com" - }, - { - "id": 5375, - "guid": "705f8ab5-49c9-4866-90eb-74fe1c66f1ea", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Ford", - "company": "Infragraph", - "phone": "825-447-3598", - "email": "mariah@infragraph.com" - }, - { - "id": 5376, - "guid": "8352d7c9-2d55-4eef-b016-959fe7b5c2e2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Wood", - "company": "Raylog", - "phone": "845-436-3280", - "email": "arianna@raylog.com" - }, - { - "id": 5377, - "guid": "4b208da2-d74d-4747-87ed-b8b1cc3459a5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Galbraith", - "company": "Mescatron", - "phone": "852-400-3779", - "email": "katelyn@mescatron.com" - }, - { - "id": 5378, - "guid": "966b11d6-11f0-400e-958d-a66fd53b59f3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Nelson", - "company": "Celgra", - "phone": "875-422-3072", - "email": "chloe@celgra.com" - }, - { - "id": 5379, - "guid": "63c3c27e-5cdc-468a-a0bf-b1656e90e059", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Khloe Abramson", - "company": "Gigaura", - "phone": "874-437-2294", - "email": "khloe@gigaura.com" - }, - { - "id": 5380, - "guid": "b968bb63-46d2-4f42-9003-9f72e5d1c2af", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Brooks", - "company": "Netseco", - "phone": "808-598-2094", - "email": "maria@netseco.com" - }, - { - "id": 5381, - "guid": "4d0a4e4b-720f-41eb-8f16-1a1c18680e08", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Sherlock", - "company": "Netseco", - "phone": "878-444-3197", - "email": "anna@netseco.com" - }, - { - "id": 5382, - "guid": "5d19e546-30a8-4dff-afb6-6193ec0f772d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Abramson", - "company": "Multitiqua", - "phone": "810-494-2142", - "email": "alexis@multitiqua.com" - }, - { - "id": 5383, - "guid": "5d556413-0acb-429f-9633-f2271cac5366", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Webster", - "company": "Technogra", - "phone": "895-596-2622", - "email": "claire@technogra.com" - }, - { - "id": 5384, - "guid": "5b5d4ea6-d5d1-443e-8099-2262f1218945", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Gill", - "company": "Orthomedia", - "phone": "803-550-2958", - "email": "lauren@orthomedia.com" - }, - { - "id": 5385, - "guid": "f373e41f-d033-465f-81f8-80c3523a826a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Hancock", - "company": "US Infratouch", - "phone": "890-450-3367", - "email": "layla@us infratouch.com" - }, - { - "id": 5386, - "guid": "f8ba5d8a-f49c-488c-b1b2-82aae1f87fb7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Cook", - "company": "Infragraph", - "phone": "839-592-3316", - "email": "charlotte@infragraph.com" - }, - { - "id": 5387, - "guid": "29ba56b5-438d-42b4-9d9d-5f56300fdd53", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Webster", - "company": "SysUSA", - "phone": "870-599-3848", - "email": "kayla@sysusa.com" - }, - { - "id": 5388, - "guid": "5a31b5df-2b4d-4c39-9005-4273fe985876", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Day", - "company": "Navivacs", - "phone": "860-453-3462", - "email": "bailey@navivacs.com" - }, - { - "id": 5389, - "guid": "aa3d6510-36c3-4503-9311-d0aac590d444", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Miller", - "company": "Teknoplexon", - "phone": "868-582-2000", - "email": "peyton@teknoplexon.com" - }, - { - "id": 5390, - "guid": "ffb9625c-bd30-4aaa-b2cd-08f61bc223e3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Brickman", - "company": "iMedconik", - "phone": "896-424-3510", - "email": "khloe@imedconik.com" - }, - { - "id": 5391, - "guid": "392b7014-9d56-46a4-9934-cb6898a67534", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Turner", - "company": "Turbomart", - "phone": "868-491-3151", - "email": "alexis@turbomart.com" - }, - { - "id": 5392, - "guid": "a59d895f-d611-4259-b9a8-37015a5d471e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Gibbs", - "company": "Jamrola", - "phone": "874-413-2440", - "email": "destiny@jamrola.com" - }, - { - "id": 5393, - "guid": "53144916-5dda-4345-910c-8f4303c68fb2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Freeman", - "company": "Proline", - "phone": "897-458-2235", - "email": "julia@proline.com" - }, - { - "id": 5394, - "guid": "04f9a169-a287-4004-8d45-2664b9a4cfa3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Conors", - "company": "iEnland", - "phone": "890-445-3412", - "email": "mya@ienland.com" - }, - { - "id": 5395, - "guid": "df2bdca9-53ca-423f-b1b4-5894d307141a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mya Wainwright", - "company": "Celgra", - "phone": "877-585-3120", - "email": "mya@celgra.com" - }, - { - "id": 5396, - "guid": "209c3094-01be-4a3d-a41e-05db560937ca", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Oliver", - "company": "Textiqua", - "phone": "812-538-2506", - "email": "camila@textiqua.com" - }, - { - "id": 5397, - "guid": "76dc41c5-0375-4163-9c24-5d4243063556", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Morrison", - "company": "Transtouch", - "phone": "861-483-3085", - "email": "gabrielle@transtouch.com" - }, - { - "id": 5398, - "guid": "f83f5425-39b9-4bdc-b3ac-d09bc28582f2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Carey", - "company": "Techtron", - "phone": "829-457-3778", - "email": "jessica@techtron.com" - }, - { - "id": 5399, - "guid": "5d1102ec-969c-4e2a-8ba1-34d925773305", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Taylor WifKinson", - "company": "Polytheon", - "phone": "812-558-2553", - "email": "taylor@polytheon.com" - }, - { - "id": 5400, - "guid": "0d2412f3-1910-482d-b34b-129e34d39d91", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Abigail Campbell", - "company": "Conrama", - "phone": "886-596-2946", - "email": "abigail@conrama.com" - }, - { - "id": 5401, - "guid": "6701c480-3bba-41af-b3d5-12803815548e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Wainwright", - "company": "eSteganoergy", - "phone": "881-592-2646", - "email": "grace@esteganoergy.com" - }, - { - "id": 5402, - "guid": "4a645169-1211-451c-8d86-84397be87502", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Youmans", - "company": "Superscope", - "phone": "892-484-2687", - "email": "kylie@superscope.com" - }, - { - "id": 5403, - "guid": "a25a83c1-2322-4df2-83e8-76d0b313d654", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Thorndike", - "company": "Ameritron", - "phone": "894-597-3215", - "email": "riley@ameritron.com" - }, - { - "id": 5404, - "guid": "3727a48a-f4bf-4045-97d9-32a7076961f0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Thornton", - "company": "Technogra", - "phone": "867-499-2206", - "email": "paige@technogra.com" - }, - { - "id": 5405, - "guid": "d4ba38de-fe4a-4555-9cc9-2a76e87828e0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Vaughan", - "company": "Transtouch", - "phone": "886-560-3583", - "email": "lillian@transtouch.com" - }, - { - "id": 5406, - "guid": "aecf89b0-90c5-4c87-a8bf-4be1c49813df", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Daniels", - "company": "Titanigraf", - "phone": "899-491-2934", - "email": "alyssa@titanigraf.com" - }, - { - "id": 5407, - "guid": "12716a9b-44ff-428d-a406-d37f87f55813", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mackenzie Campbell", - "company": "Entcast", - "phone": "801-516-3198", - "email": "mackenzie@entcast.com" - }, - { - "id": 5408, - "guid": "0fbf7fda-fac7-443e-b262-d036853c0ee2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Murphy", - "company": "Teknoplexon", - "phone": "878-580-3581", - "email": "nevaeh@teknoplexon.com" - }, - { - "id": 5409, - "guid": "eea1bd6f-17c3-4d1f-a968-d8ce6e13a0bc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Owen", - "company": "Pericenta", - "phone": "801-530-3840", - "email": "allison@pericenta.com" - }, - { - "id": 5410, - "guid": "c4342ec8-969a-4430-9e82-bd0fa52b9838", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Neal", - "company": "iEnland", - "phone": "854-516-3073", - "email": "riley@ienland.com" - }, - { - "id": 5411, - "guid": "aa4f14b7-fd16-45b5-9ce5-00013ebf08fe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire White", - "company": "Systheon", - "phone": "874-566-3197", - "email": "claire@systheon.com" - }, - { - "id": 5412, - "guid": "e9769c6b-7299-4109-bdf9-8f4c33f5c499", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maya Hailey", - "company": "Fibrotopia", - "phone": "886-519-2443", - "email": "maya@fibrotopia.com" - }, - { - "id": 5413, - "guid": "1b2d407f-75a5-44f8-95ce-afc751e9caa0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Sherlock", - "company": "Jamconik", - "phone": "859-562-3211", - "email": "emma@jamconik.com" - }, - { - "id": 5414, - "guid": "17d20357-f0bf-49bf-aaf9-619c76c6e86f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Michaelson", - "company": "Vencom", - "phone": "818-433-2242", - "email": "mariah@vencom.com" - }, - { - "id": 5415, - "guid": "b4edcbfa-2c04-4340-8756-3ccb37e5a60e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Carroll", - "company": "Teknoplexon", - "phone": "817-510-2075", - "email": "savannah@teknoplexon.com" - }, - { - "id": 5416, - "guid": "fb361ec7-b121-4784-97f4-88ef3f9cb853", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Wood", - "company": "Jamconik", - "phone": "837-563-2215", - "email": "isabella@jamconik.com" - }, - { - "id": 5417, - "guid": "9d67bcdc-3622-4d2a-9525-69106fbfe8e1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Young", - "company": "Netseco", - "phone": "851-464-3965", - "email": "zoe@netseco.com" - }, - { - "id": 5418, - "guid": "bee5dcaf-7ca8-49ad-a614-1864d4dc5d8b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Morrison", - "company": "iEnland", - "phone": "870-587-3472", - "email": "aaliyah@ienland.com" - }, - { - "id": 5419, - "guid": "83b29306-85dc-45d8-9264-85142128e588", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Chapman", - "company": "Entcast", - "phone": "873-512-2792", - "email": "audrey@entcast.com" - }, - { - "id": 5420, - "guid": "8a36be57-53ac-45de-a091-e5455820006e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Gilson", - "company": "Truegate", - "phone": "800-424-2152", - "email": "sydney@truegate.com" - }, - { - "id": 5421, - "guid": "d4ece06e-0aa4-4581-b8ba-1dfe7723568a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Rachel Neal", - "company": "Interliant", - "phone": "887-509-3228", - "email": "rachel@interliant.com" - }, - { - "id": 5422, - "guid": "d81f5803-252b-4216-89b4-40fba1dee198", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Vaughan", - "company": "Teknoplexon", - "phone": "852-466-3785", - "email": "trinity@teknoplexon.com" - }, - { - "id": 5423, - "guid": "49c9a500-9a95-4a53-9f72-f7d47bd47d2d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Bush", - "company": "Teknoplexon", - "phone": "804-593-3638", - "email": "madeline@teknoplexon.com" - }, - { - "id": 5424, - "guid": "edc5b968-9bd6-49e5-8d24-0b6df196b372", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Bush", - "company": "Conrama", - "phone": "887-437-2914", - "email": "ava@conrama.com" - }, - { - "id": 5425, - "guid": "6880aaac-6418-4517-a079-2f8e440a10d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Fulton", - "company": "US Omnigraphik", - "phone": "845-429-3451", - "email": "ava@us omnigraphik.com" - }, - { - "id": 5426, - "guid": "c58cbfd9-57fc-49d4-b02b-0ad19132244a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Otis", - "company": "Keytheon", - "phone": "822-564-3178", - "email": "madison@keytheon.com" - }, - { - "id": 5427, - "guid": "a1ff1ab8-5f4b-443a-946e-bbfd4da45847", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jessica Brooks", - "company": "Allnet", - "phone": "865-435-2742", - "email": "jessica@allnet.com" - }, - { - "id": 5428, - "guid": "50fc7d34-bb81-4d1a-90c2-ccb7dc0e4acb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Thornton", - "company": "Netseco", - "phone": "809-557-3667", - "email": "gianna@netseco.com" - }, - { - "id": 5429, - "guid": "7b7bafd0-e1ca-4c04-80ea-44b87fc3963f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Timmons", - "company": "Raylog", - "phone": "813-435-3368", - "email": "emma@raylog.com" - }, - { - "id": 5430, - "guid": "27f04d3e-dbe6-4b5b-a03f-9a4e00e791b3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Cramer", - "company": "Airdyne", - "phone": "877-516-3269", - "email": "evelyn@airdyne.com" - }, - { - "id": 5431, - "guid": "be93f326-cad4-4fc7-93c0-573d18c67176", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Vanessa Hawkins", - "company": "Quintegrity", - "phone": "897-453-3924", - "email": "vanessa@quintegrity.com" - }, - { - "id": 5432, - "guid": "6c4628f1-00ce-45c2-8557-a83c22739169", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Gerald", - "company": "Idmax", - "phone": "840-462-3038", - "email": "lily@idmax.com" - }, - { - "id": 5433, - "guid": "c7e99293-7e67-415a-93f4-98314ae9e918", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Molly Vaughan", - "company": "Syssoft", - "phone": "858-552-3515", - "email": "molly@syssoft.com" - }, - { - "id": 5434, - "guid": "61febd68-0e1f-4abb-8fb9-090fc19b96e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Gustman", - "company": "Jamconik", - "phone": "858-448-3345", - "email": "bailey@jamconik.com" - }, - { - "id": 5435, - "guid": "e21bf9ea-e645-40be-80ee-0de18445df0e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gianna Creighton", - "company": "Robocomm", - "phone": "846-507-3234", - "email": "gianna@robocomm.com" - }, - { - "id": 5436, - "guid": "0cce8077-e7a0-4a2b-b47a-501d0c63fba3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madeline WifKinson", - "company": "Dynarama", - "phone": "827-551-3086", - "email": "madeline@dynarama.com" - }, - { - "id": 5437, - "guid": "89440693-a477-486e-bb63-89c393954f3e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Warren", - "company": "Dynarama", - "phone": "860-581-2656", - "email": "kimberly@dynarama.com" - }, - { - "id": 5438, - "guid": "e10780ac-e1d3-4426-b40e-c6a69bac7a77", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Charlotte Chesterton", - "company": "Technogra", - "phone": "876-512-2824", - "email": "charlotte@technogra.com" - }, - { - "id": 5439, - "guid": "ed4eea16-97d9-4531-bc40-eb5df16b33de", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Chandter", - "company": "Thermotomic", - "phone": "853-558-2550", - "email": "julia@thermotomic.com" - }, - { - "id": 5440, - "guid": "2b87c01e-481a-4550-8518-fb0774e9729f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Gibbs", - "company": "Nanobanc", - "phone": "868-587-3692", - "email": "bella@nanobanc.com" - }, - { - "id": 5441, - "guid": "b64223a1-3a85-4bb7-8795-4af389fba536", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Charlson", - "company": "Titanigraf", - "phone": "895-472-2307", - "email": "valeria@titanigraf.com" - }, - { - "id": 5442, - "guid": "e7df4a5b-09f6-4e70-a950-cab1cf723144", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine WifKinson", - "company": "Generola", - "phone": "872-418-2996", - "email": "jasmine@generola.com" - }, - { - "id": 5443, - "guid": "5b310fbd-6a6a-4525-bca8-f086d8017c5d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Wainwright", - "company": "Tekcar", - "phone": "838-544-2589", - "email": "brooke@tekcar.com" - }, - { - "id": 5444, - "guid": "65bd0588-9c12-4cbd-befe-048ecbd255e1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Hamphrey", - "company": "Unologic", - "phone": "884-581-3331", - "email": "melanie@unologic.com" - }, - { - "id": 5445, - "guid": "9e4cb2e7-c652-44d0-b942-ecc1847c54ac", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Morrison", - "company": "iOptystix", - "phone": "840-564-2591", - "email": "molly@ioptystix.com" - }, - { - "id": 5446, - "guid": "29890dbd-ada3-4b6b-b3cf-b3bf74c1515e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Wood", - "company": "eEyetanic", - "phone": "858-492-2277", - "email": "savannah@eeyetanic.com" - }, - { - "id": 5447, - "guid": "163ada72-54ed-4376-bea9-153bdcd1ddf1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Eva Oliver", - "company": "Steganoconiche", - "phone": "864-435-2151", - "email": "eva@steganoconiche.com" - }, - { - "id": 5448, - "guid": "44236ce1-987f-41e2-8a66-a84187b6217c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Otis", - "company": "OpKeycomm", - "phone": "805-511-2806", - "email": "bella@opkeycomm.com" - }, - { - "id": 5449, - "guid": "fd978804-a917-4563-8c67-108fe4522651", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Chapman", - "company": "Navivacs", - "phone": "827-587-2919", - "email": "vanessa@navivacs.com" - }, - { - "id": 5450, - "guid": "00992bb9-e0c4-4332-b27d-5c0f2804d6de", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Hoggarth", - "company": "Titanigraf", - "phone": "801-596-3134", - "email": "gabriella@titanigraf.com" - }, - { - "id": 5451, - "guid": "73bdaa96-b7ca-4e1e-be71-a93a3a03f2aa", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Day", - "company": "iSkyvaco", - "phone": "844-471-3776", - "email": "paige@iskyvaco.com" - }, - { - "id": 5452, - "guid": "c8b38904-f99b-4918-8f07-bf2ab4c5c9bd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Hancock", - "company": "Generola", - "phone": "816-523-3276", - "email": "sarah@generola.com" - }, - { - "id": 5453, - "guid": "72df8fcf-4a8e-4ab0-986e-d12a27ed60f7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Harrison", - "company": "Westtomik", - "phone": "841-465-2598", - "email": "sophie@westtomik.com" - }, - { - "id": 5454, - "guid": "fa0842cd-2f9e-4d74-9c51-2866449332dd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Neal", - "company": "Anagraph", - "phone": "888-533-2043", - "email": "ella@anagraph.com" - }, - { - "id": 5455, - "guid": "cc7c1744-0788-4d15-a6bd-531c4839a359", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Brickman", - "company": "Textiqua", - "phone": "860-470-2478", - "email": "grace@textiqua.com" - }, - { - "id": 5456, - "guid": "92be49b4-e809-4a88-a8ca-318275087f5e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Smith", - "company": "Sontopia", - "phone": "859-465-3294", - "email": "gianna@sontopia.com" - }, - { - "id": 5457, - "guid": "89f2a4d9-a955-46ec-b733-138eb6631924", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Goldman", - "company": "Westtomik", - "phone": "813-574-3717", - "email": "peyton@westtomik.com" - }, - { - "id": 5458, - "guid": "de499a08-d320-400a-a958-817bd2d4d46c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Waller", - "company": "Allnet", - "phone": "876-466-2008", - "email": "abigail@allnet.com" - }, - { - "id": 5459, - "guid": "23b21293-285f-4d85-b8ea-d7c1048304df", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Webster", - "company": "Xeicon", - "phone": "867-539-3334", - "email": "charlotte@xeicon.com" - }, - { - "id": 5460, - "guid": "b74416f0-7008-4fc7-989b-3fb7ae9e1b9d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Freeman", - "company": "Fibrotopia", - "phone": "844-597-3668", - "email": "sophia@fibrotopia.com" - }, - { - "id": 5461, - "guid": "488b2a8f-9f9e-47d1-ac4d-314a56945f22", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Freeman", - "company": "Teknoplexon", - "phone": "843-511-2046", - "email": "khloe@teknoplexon.com" - }, - { - "id": 5462, - "guid": "e58a500d-abf9-4e79-b7f4-05ddaf34d9a7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Oldman", - "company": "Safeagra", - "phone": "836-453-3314", - "email": "evelyn@safeagra.com" - }, - { - "id": 5463, - "guid": "71e5e350-5a5f-437d-9a75-bd884ba9dc37", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Watson", - "company": "Safetrust", - "phone": "825-483-3781", - "email": "kaitlyn@safetrust.com" - }, - { - "id": 5464, - "guid": "cb8ca14c-61f9-4863-9666-6140bc423126", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Gill", - "company": "Idmax", - "phone": "843-421-3785", - "email": "aaliyah@idmax.com" - }, - { - "id": 5465, - "guid": "71c8ee4c-1a58-4749-9904-36c9d2203127", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Gate", - "company": "Thermotomic", - "phone": "889-567-2327", - "email": "audrey@thermotomic.com" - }, - { - "id": 5466, - "guid": "415947b1-fd23-448e-a4b0-87d3b7cf7a30", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Cook", - "company": "Qualserve", - "phone": "816-520-2312", - "email": "makayla@qualserve.com" - }, - { - "id": 5467, - "guid": "9b11bd8b-7026-42ba-8e6c-28b49d6c9e2c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Molligan", - "company": "Transtouch", - "phone": "837-505-2529", - "email": "leah@transtouch.com" - }, - { - "id": 5468, - "guid": "f8f43dbf-8d7b-4dab-9c81-623b97a3c555", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail WifKinson", - "company": "eEyetanic", - "phone": "803-545-2828", - "email": "abigail@eeyetanic.com" - }, - { - "id": 5469, - "guid": "c617db33-6640-44a4-9bb4-26f4b803dea3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Conors", - "company": "Superscope", - "phone": "838-463-3983", - "email": "ava@superscope.com" - }, - { - "id": 5470, - "guid": "dc3aa3d0-4e49-4952-9733-7523df870270", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Crossman", - "company": "Orthosoft", - "phone": "826-539-3993", - "email": "khloe@orthosoft.com" - }, - { - "id": 5471, - "guid": "6ef59960-edc9-4e4f-9038-5e894f924b81", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Wainwright", - "company": "Enlogia", - "phone": "825-496-2282", - "email": "melanie@enlogia.com" - }, - { - "id": 5472, - "guid": "cf7b5deb-3ff8-4fc5-9c2d-5ffd9ed2c424", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Hodges", - "company": "Textiqua", - "phone": "849-486-3588", - "email": "katelyn@textiqua.com" - }, - { - "id": 5473, - "guid": "88ab367e-1c39-4d11-89f3-434250cca58b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Campbell", - "company": "Indisco", - "phone": "811-511-2733", - "email": "kylie@indisco.com" - }, - { - "id": 5474, - "guid": "cd89d9a9-0349-4876-8caf-02f09a4a4273", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Chandter", - "company": "iSkyvaco", - "phone": "833-566-2055", - "email": "savannah@iskyvaco.com" - }, - { - "id": 5475, - "guid": "e26808be-6648-44d5-89ab-b3d918f81c83", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Conors", - "company": "Quintegrity", - "phone": "811-419-2539", - "email": "camila@quintegrity.com" - }, - { - "id": 5476, - "guid": "964f08fe-1f26-43c4-8e26-0a4871d48c69", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Wallace", - "company": "Titanirola", - "phone": "879-485-3409", - "email": "brooklyn@titanirola.com" - }, - { - "id": 5477, - "guid": "03ebc087-facd-4c94-8f49-8e1b147963b5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Wesley", - "company": "iEnland", - "phone": "845-542-3701", - "email": "amelia@ienland.com" - }, - { - "id": 5478, - "guid": "d6e32899-71b2-430d-8a73-8c2e5802a5b8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Walkman", - "company": "Robotemplate", - "phone": "821-598-3194", - "email": "vanessa@robotemplate.com" - }, - { - "id": 5479, - "guid": "94ca3fca-7653-4073-ba26-cc5f5d6250eb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Osborne", - "company": "Inridium", - "phone": "882-572-3681", - "email": "lauren@inridium.com" - }, - { - "id": 5480, - "guid": "185416cc-76cd-4d2a-80fb-0ca6d9ba3830", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Carter", - "company": "Mescatron", - "phone": "828-427-2104", - "email": "lauren@mescatron.com" - }, - { - "id": 5481, - "guid": "018bc247-9e14-4eb9-a741-9351d5981c1a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Crossman", - "company": "Proline", - "phone": "893-572-3792", - "email": "rachel@proline.com" - }, - { - "id": 5482, - "guid": "5ef2ed54-c4b5-434d-b253-624a4f79b4ef", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hailey Sherlock", - "company": "Inridium", - "phone": "860-439-3970", - "email": "hailey@inridium.com" - }, - { - "id": 5483, - "guid": "8ec54ecb-03f9-40ec-995a-716f043d51bd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Ogden", - "company": "iEnland", - "phone": "815-591-3387", - "email": "mariah@ienland.com" - }, - { - "id": 5484, - "guid": "9b2cd584-d73d-4dc6-8a7f-11f5241d4edd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Wayne", - "company": "SysVenamerica", - "phone": "883-556-2792", - "email": "maya@sysvenamerica.com" - }, - { - "id": 5485, - "guid": "520aa19b-d0b7-4908-b9b8-22a1dfca88da", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Timmons", - "company": "Fibrotopia", - "phone": "800-483-3951", - "email": "alyssa@fibrotopia.com" - }, - { - "id": 5486, - "guid": "c9b4f61d-08d3-40b0-b86c-719637c33e35", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Oldridge", - "company": "Textiqua", - "phone": "854-467-2331", - "email": "alexa@textiqua.com" - }, - { - "id": 5487, - "guid": "7b438ec8-d7fb-4c0a-9e0e-5d9a0d89d7ac", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Wayne", - "company": "Ameritron", - "phone": "801-433-3417", - "email": "madelyn@ameritron.com" - }, - { - "id": 5488, - "guid": "c022931c-113d-466e-97a0-97383f14548c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Turner", - "company": "Fibrotouch", - "phone": "882-565-3799", - "email": "leah@fibrotouch.com" - }, - { - "id": 5489, - "guid": "7bc32731-bb6b-493f-94aa-eac57b512075", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Cook", - "company": "Hypervaco", - "phone": "882-565-2098", - "email": "nevaeh@hypervaco.com" - }, - { - "id": 5490, - "guid": "ef6e9697-577e-48ac-b8f9-90d5f6a9a495", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Oliver", - "company": "Nanobanc", - "phone": "810-530-2192", - "email": "aaliyah@nanobanc.com" - }, - { - "id": 5491, - "guid": "59125c7d-3a7e-46ed-b704-54c01ea0353c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Thorndike", - "company": "iOptystix", - "phone": "876-465-2101", - "email": "andrea@ioptystix.com" - }, - { - "id": 5492, - "guid": "694026f0-762d-4e79-9ab9-52cf182e0140", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Freeman", - "company": "Genland", - "phone": "843-503-2326", - "email": "jasmine@genland.com" - }, - { - "id": 5493, - "guid": "88868b84-cf62-4de2-bffa-62ec8a46638e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Abramson", - "company": "Xeicon", - "phone": "890-540-2742", - "email": "madeline@xeicon.com" - }, - { - "id": 5494, - "guid": "51e92e1d-8f02-48bb-b67e-acfcfdf74fa8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Morrison", - "company": "Orthosoft", - "phone": "888-535-2723", - "email": "samantha@orthosoft.com" - }, - { - "id": 5495, - "guid": "a5642bdc-bfb8-46d1-ae17-f820155d3a8a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Chandter", - "company": "SysUSA", - "phone": "895-417-2559", - "email": "khloe@sysusa.com" - }, - { - "id": 5496, - "guid": "7cc1da4b-9469-44db-8e43-7ccd70e40a6d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hailey Vance", - "company": "Superscope", - "phone": "809-464-2182", - "email": "hailey@superscope.com" - }, - { - "id": 5497, - "guid": "897fb7e6-e6f8-4a9f-8878-fecaa3033a2c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Hamphrey", - "company": "Enlogia", - "phone": "867-526-2484", - "email": "amelia@enlogia.com" - }, - { - "id": 5498, - "guid": "5805f5b4-bc32-46c5-bdc6-80ee22a9dc60", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Milton", - "company": "iMedconik", - "phone": "807-564-2425", - "email": "khloe@imedconik.com" - }, - { - "id": 5499, - "guid": "045bee60-d2bc-4ccc-b9fd-a9565142f761", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Clapton", - "company": "Skydata", - "phone": "896-525-3096", - "email": "emma@skydata.com" - }, - { - "id": 5500, - "guid": "c68115de-bf59-41a0-ab7d-6a3ab9e925bc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Wood", - "company": "Syssoft", - "phone": "805-434-2190", - "email": "ashley@syssoft.com" - }, - { - "id": 5501, - "guid": "46052d99-adf4-4cc2-a16e-f57bfc4f2f74", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Hancock", - "company": "Turbomart", - "phone": "888-457-3235", - "email": "savannah@turbomart.com" - }, - { - "id": 5502, - "guid": "c384bfd1-0ca0-4ee9-921d-699397e6b2d5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Gilson", - "company": "Fibrotopia", - "phone": "881-448-2179", - "email": "victoria@fibrotopia.com" - }, - { - "id": 5503, - "guid": "39e2e858-3d8b-46eb-b03e-d92c5714686b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Abramson", - "company": "iMedconik", - "phone": "871-551-2493", - "email": "olivia@imedconik.com" - }, - { - "id": 5504, - "guid": "0386b1f6-0524-4444-b03a-45081bd135c3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Haig", - "company": "Anaframe", - "phone": "833-495-2220", - "email": "peyton@anaframe.com" - }, - { - "id": 5505, - "guid": "77c53260-6c29-4f97-84df-5eee76028a44", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Abramson", - "company": "iOptystix", - "phone": "835-506-2757", - "email": "zoey@ioptystix.com" - }, - { - "id": 5506, - "guid": "08c4a578-7ec7-4954-af3e-892a0c5a0da4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Mercer", - "company": "Systheon", - "phone": "840-454-3846", - "email": "lillian@systheon.com" - }, - { - "id": 5507, - "guid": "6763425d-3ff6-4f55-b385-20a4a8a89a7f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Brickman", - "company": "Technogra", - "phone": "836-522-3319", - "email": "sydney@technogra.com" - }, - { - "id": 5508, - "guid": "1b273f12-dac7-45ad-800c-f117458c0a00", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Cook", - "company": "Raylog", - "phone": "847-436-3868", - "email": "madison@raylog.com" - }, - { - "id": 5509, - "guid": "f2ce4826-7d16-4df4-93d8-7fbb1bd9c2f9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Davidson", - "company": "Ventanium", - "phone": "831-400-2702", - "email": "elizabeth@ventanium.com" - }, - { - "id": 5510, - "guid": "839057ae-95e3-4cbf-9908-1c622daffce6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Miller", - "company": "Robocomm", - "phone": "849-548-2695", - "email": "madeline@robocomm.com" - }, - { - "id": 5511, - "guid": "3d441fed-684b-4d23-9da1-387e0179feb9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Hawkins", - "company": "Teknoplexon", - "phone": "816-543-2394", - "email": "brianna@teknoplexon.com" - }, - { - "id": 5512, - "guid": "fd20319c-d415-4788-aea8-c23836d43b9e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Brown", - "company": "iQualcar", - "phone": "837-561-2459", - "email": "leah@iqualcar.com" - }, - { - "id": 5513, - "guid": "76d053a0-0b60-4009-9eac-e542d28bffe0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila Carter", - "company": "RoboAerlogix", - "phone": "817-540-3093", - "email": "camila@roboaerlogix.com" - }, - { - "id": 5514, - "guid": "cc8e7942-e30d-4573-8f04-734316c3f68b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexandra Gill", - "company": "Robotomic", - "phone": "828-439-3579", - "email": "alexandra@robotomic.com" - }, - { - "id": 5515, - "guid": "eec01658-15c7-4c70-84c6-10e4c2cc43c7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Harrison", - "company": "Titanirola", - "phone": "880-541-2688", - "email": "emily@titanirola.com" - }, - { - "id": 5516, - "guid": "be0c7648-c04e-4e65-8a5d-5391fc60b43d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Campbell", - "company": "Techtron", - "phone": "824-572-3720", - "email": "hailey@techtron.com" - }, - { - "id": 5517, - "guid": "8e3316f9-3dc4-4e32-b478-d12c39d31e7a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Hardman", - "company": "Safeagra", - "phone": "893-580-3243", - "email": "bailey@safeagra.com" - }, - { - "id": 5518, - "guid": "48466dbc-3ff0-4850-8af5-80dde6f72bb9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Hodges", - "company": "Robotomic", - "phone": "845-422-2642", - "email": "molly@robotomic.com" - }, - { - "id": 5519, - "guid": "fdf67f20-6225-4262-a6e8-2638dfa9522a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Hawkins", - "company": "Thermotomic", - "phone": "882-438-2884", - "email": "audrey@thermotomic.com" - }, - { - "id": 5520, - "guid": "ff41be1c-453b-4b80-ab6d-79396ddf7d8b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Carey", - "company": "Compuamerica", - "phone": "873-584-2985", - "email": "alexandra@compuamerica.com" - }, - { - "id": 5521, - "guid": "9567e6ec-a193-49dc-bbf2-d530b7d90a7d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Charlson", - "company": "Videobanc", - "phone": "887-548-2284", - "email": "arianna@videobanc.com" - }, - { - "id": 5522, - "guid": "aee3e4fa-5909-485b-8d90-57430a145f2d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Carter", - "company": "Venconix", - "phone": "895-425-3487", - "email": "nevaeh@venconix.com" - }, - { - "id": 5523, - "guid": "f93c1285-8955-419e-b99b-e56c69668a39", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Nash", - "company": "Netsystems", - "phone": "857-522-2232", - "email": "sarah@netsystems.com" - }, - { - "id": 5524, - "guid": "16a1764a-fb2e-4fdf-9c45-80ea429246e7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Gill", - "company": "Netsystems", - "phone": "888-456-3807", - "email": "madison@netsystems.com" - }, - { - "id": 5525, - "guid": "18a9f3e8-2004-45b2-ba63-2068d3f2b5a3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Morrison", - "company": "Teratopia", - "phone": "880-475-3726", - "email": "sofia@teratopia.com" - }, - { - "id": 5526, - "guid": "953a0a40-13ac-4d61-ac54-217fead571ce", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Carroll", - "company": "Netsystems", - "phone": "839-564-2153", - "email": "madeline@netsystems.com" - }, - { - "id": 5527, - "guid": "3e86dd77-328e-4328-a674-b1b486135050", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Oliver", - "company": "Conotomics", - "phone": "805-527-3921", - "email": "mya@conotomics.com" - }, - { - "id": 5528, - "guid": "59d2fd3a-f590-41c8-becb-cc8e5fc5c5ca", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Thomson", - "company": "Superscope", - "phone": "874-420-2639", - "email": "madeline@superscope.com" - }, - { - "id": 5529, - "guid": "8fed4a9f-c9a9-42be-96fa-3923001a5bd1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Hoggarth", - "company": "SysVenamerica", - "phone": "892-401-2952", - "email": "valeria@sysvenamerica.com" - }, - { - "id": 5530, - "guid": "c2583dcc-2dcf-4d28-ab43-f8b310efdbf6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Gibbs", - "company": "InfoAirway", - "phone": "844-503-3847", - "email": "caroline@infoairway.com" - }, - { - "id": 5531, - "guid": "ad1fd1c4-fc21-43db-a839-d750ca53574a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Vaughan", - "company": "Genland", - "phone": "825-540-2466", - "email": "brooke@genland.com" - }, - { - "id": 5532, - "guid": "a4a7e888-673e-4f0c-9beb-526b55fa19b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Osborne", - "company": "Teknoplexon", - "phone": "878-471-2860", - "email": "gabriella@teknoplexon.com" - }, - { - "id": 5533, - "guid": "cb2bce2a-1045-4337-9169-ad9c7ecd8635", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Carter", - "company": "Venconix", - "phone": "801-534-2400", - "email": "sophia@venconix.com" - }, - { - "id": 5534, - "guid": "62496239-5f17-4951-89b4-9b799270a11c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Ward", - "company": "Safeagra", - "phone": "866-571-2561", - "email": "julia@safeagra.com" - }, - { - "id": 5535, - "guid": "8567102e-e645-439e-8f54-5fd033623379", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Miln", - "company": "Robocomm", - "phone": "866-519-3669", - "email": "layla@robocomm.com" - }, - { - "id": 5536, - "guid": "269b24de-deee-4e88-8428-80bd45393cd3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Daniels", - "company": "Jamconik", - "phone": "862-495-2456", - "email": "kaylee@jamconik.com" - }, - { - "id": 5537, - "guid": "941ddc52-fc6c-4e11-9fa7-cadadc4462d0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Carter", - "company": "Qualserve", - "phone": "848-545-2204", - "email": "genesis@qualserve.com" - }, - { - "id": 5538, - "guid": "dfcb451a-064d-485f-b999-eabb18aa5bc0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Gibbs", - "company": "Rapigrafix", - "phone": "803-581-3432", - "email": "isabelle@rapigrafix.com" - }, - { - "id": 5539, - "guid": "f7ac4154-8952-417c-ba54-a5fdd513ebb5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Timmons", - "company": "iSkyvaco", - "phone": "855-542-3940", - "email": "alexandra@iskyvaco.com" - }, - { - "id": 5540, - "guid": "b0e507d9-9a8e-4b9b-8283-0a06f187065a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Wayne", - "company": "Pacwest", - "phone": "820-412-3985", - "email": "faith@pacwest.com" - }, - { - "id": 5541, - "guid": "fc50cb72-233f-4b1d-9c52-42cca280320b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Brickman", - "company": "Quintegrity", - "phone": "857-413-2176", - "email": "serenity@quintegrity.com" - }, - { - "id": 5542, - "guid": "c88b318a-33fc-43b5-9e73-644bac73ef7a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Thorndike", - "company": "Unologic", - "phone": "859-494-3157", - "email": "leah@unologic.com" - }, - { - "id": 5543, - "guid": "daca2cca-a7c8-4a3a-b03e-8d0c5e639c7a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Goldman", - "company": "Orthosoft", - "phone": "820-550-2643", - "email": "gianna@orthosoft.com" - }, - { - "id": 5544, - "guid": "c986bfe1-7528-4550-8b32-38bf5f8a8639", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Carey", - "company": "Titanigraf", - "phone": "864-597-2898", - "email": "victoria@titanigraf.com" - }, - { - "id": 5545, - "guid": "963c130b-1bfd-4a50-bd11-1592161829c3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kayla Charlson", - "company": "Robotemplate", - "phone": "802-461-3166", - "email": "kayla@robotemplate.com" - }, - { - "id": 5546, - "guid": "fbee6d39-8263-40c1-a151-3bd7783175eb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Hardman", - "company": "eSteganoergy", - "phone": "860-527-2513", - "email": "ashley@esteganoergy.com" - }, - { - "id": 5547, - "guid": "0e338f0f-7115-442c-8e88-512ec0020dbb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Charlson", - "company": "Systheon", - "phone": "809-586-3174", - "email": "alyssa@systheon.com" - }, - { - "id": 5548, - "guid": "04488b07-5dd0-4442-bb3b-27b0fed4d004", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Leah Winter", - "company": "Genland", - "phone": "852-558-3823", - "email": "leah@genland.com" - }, - { - "id": 5549, - "guid": "6be1229d-ad6e-4528-aa01-368d4f368e0b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Gill", - "company": "Netseco", - "phone": "880-531-2829", - "email": "melanie@netseco.com" - }, - { - "id": 5550, - "guid": "603e735b-bed3-4063-b838-4d176c33f185", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Osborne", - "company": "Robotomic", - "phone": "839-586-3650", - "email": "isabelle@robotomic.com" - }, - { - "id": 5551, - "guid": "bd936129-ba68-4dc0-a454-cf78b0550c22", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey WifKinson", - "company": "Entcast", - "phone": "856-536-2084", - "email": "aubrey@entcast.com" - }, - { - "id": 5552, - "guid": "ad0863da-65e5-4337-84f7-aaefe9953f7f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Smith", - "company": "eSteganoergy", - "phone": "813-548-3750", - "email": "chloe@esteganoergy.com" - }, - { - "id": 5553, - "guid": "735b3424-e603-42ca-af58-76539eda6705", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Walkman", - "company": "InfoAirway", - "phone": "862-449-2443", - "email": "avery@infoairway.com" - }, - { - "id": 5554, - "guid": "fb366bfc-1a93-46fc-b50a-730502d6ae98", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Oliver", - "company": "Safeagra", - "phone": "883-403-2994", - "email": "arianna@safeagra.com" - }, - { - "id": 5555, - "guid": "c4d966bc-23b9-426d-99d4-793a0bece12f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Turner", - "company": "Westmedia", - "phone": "877-404-2371", - "email": "kaylee@westmedia.com" - }, - { - "id": 5556, - "guid": "66b6cc6c-a9a1-4001-8f99-d5051d5759d9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Adamson", - "company": "Dynarama", - "phone": "861-566-2887", - "email": "khloe@dynarama.com" - }, - { - "id": 5557, - "guid": "b4b70775-f4b9-4279-af78-930fbc12df13", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Timmons", - "company": "RoboAerlogix", - "phone": "820-548-3554", - "email": "mia@roboaerlogix.com" - }, - { - "id": 5558, - "guid": "a92c1e9f-a933-4144-bbf1-0d6dc88ee566", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Miln", - "company": "iMedconik", - "phone": "857-461-2913", - "email": "eva@imedconik.com" - }, - { - "id": 5559, - "guid": "10faa50e-d754-409e-931a-91e215d4f968", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Wainwright", - "company": "Celgra", - "phone": "896-568-3761", - "email": "nevaeh@celgra.com" - }, - { - "id": 5560, - "guid": "d5557aaa-10fd-48ba-8143-bd7ab1dcb473", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Gustman", - "company": "Inridium", - "phone": "831-451-2332", - "email": "addison@inridium.com" - }, - { - "id": 5561, - "guid": "49010d0f-f25b-4966-a10b-ddf1ff81e482", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Michaelson", - "company": "US Omnigraphik", - "phone": "898-499-2046", - "email": "ava@us omnigraphik.com" - }, - { - "id": 5562, - "guid": "d2af0e89-be66-4e1d-a8fb-9b7ab7a60980", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Chapman", - "company": "Skydata", - "phone": "853-550-2719", - "email": "isabelle@skydata.com" - }, - { - "id": 5563, - "guid": "68def9d4-fa26-4bf8-a148-232a6c9ec5fd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Murphy", - "company": "Westtomik", - "phone": "898-594-3201", - "email": "caroline@westtomik.com" - }, - { - "id": 5564, - "guid": "9bca3d51-34e7-471a-bdfa-3ef2e4715a38", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Freeman", - "company": "Allphysiche", - "phone": "813-452-2006", - "email": "aaliyah@allphysiche.com" - }, - { - "id": 5565, - "guid": "acdc6582-5a52-4c0d-839e-ac5bd0311052", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Oswald", - "company": "Rapigrafix", - "phone": "809-530-3917", - "email": "brooke@rapigrafix.com" - }, - { - "id": 5566, - "guid": "73465530-fa78-43a0-8c62-2a4c92d9b279", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Gill", - "company": "Fibrotopia", - "phone": "876-441-3943", - "email": "bailey@fibrotopia.com" - }, - { - "id": 5567, - "guid": "a6203fdd-364f-45c5-bb63-fb723a613a0f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Gustman", - "company": "Airdyne", - "phone": "808-422-2003", - "email": "kimberly@airdyne.com" - }, - { - "id": 5568, - "guid": "dc343e09-3f13-4076-9c7f-6370d9774307", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Andrea Hawkins", - "company": "SysVenamerica", - "phone": "807-474-2295", - "email": "andrea@sysvenamerica.com" - }, - { - "id": 5569, - "guid": "8b606006-c531-43c7-a6d0-a6bf5fd81808", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Sherlock", - "company": "Allphysiche", - "phone": "854-442-2411", - "email": "eva@allphysiche.com" - }, - { - "id": 5570, - "guid": "53b947bd-ca14-40d7-bff2-735d068af7e7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Galbraith", - "company": "Navivacs", - "phone": "841-423-3927", - "email": "ariana@navivacs.com" - }, - { - "id": 5571, - "guid": "f7b50536-74c7-4bce-bbe3-b8615fd0b111", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Wallace", - "company": "Fibrotopia", - "phone": "837-486-2348", - "email": "savannah@fibrotopia.com" - }, - { - "id": 5572, - "guid": "5d66ce2c-18ae-4d86-8a10-8424da119ea5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Stanley", - "company": "Titanirola", - "phone": "889-421-3811", - "email": "evelyn@titanirola.com" - }, - { - "id": 5573, - "guid": "119d5a78-e72f-47d0-8ba6-4b26f566145c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Conors", - "company": "Entcast", - "phone": "881-406-3526", - "email": "trinity@entcast.com" - }, - { - "id": 5574, - "guid": "1c4d4d90-7f54-411c-a3a3-6d1509ebfd57", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madeline Oldridge", - "company": "Unconix", - "phone": "866-448-2970", - "email": "madeline@unconix.com" - }, - { - "id": 5575, - "guid": "15de727a-e669-45ed-9d3a-356286522193", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Carter", - "company": "Videobanc", - "phone": "802-495-3571", - "email": "madelyn@videobanc.com" - }, - { - "id": 5576, - "guid": "bfbbe02e-e902-4ba6-8020-d227a9015d7a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Hancock", - "company": "Openserve", - "phone": "805-532-3501", - "email": "kaylee@openserve.com" - }, - { - "id": 5577, - "guid": "c356dda1-8e0a-4cc9-aaed-b02994d8f17b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Osborne", - "company": "SysUSA", - "phone": "894-426-3659", - "email": "leah@sysusa.com" - }, - { - "id": 5578, - "guid": "5318e886-ec2b-4921-b4fd-21de79079cbb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Miers", - "company": "Vencom", - "phone": "845-542-3808", - "email": "lauren@vencom.com" - }, - { - "id": 5579, - "guid": "0d42fe90-555e-4799-b20a-8ec71f681570", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Davidson", - "company": "Anagraph", - "phone": "890-554-2024", - "email": "caroline@anagraph.com" - }, - { - "id": 5580, - "guid": "754eb2b6-b4c6-4ccb-a554-a0e3e9647711", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina Neal", - "company": "iMedconik", - "phone": "834-416-2682", - "email": "angelina@imedconik.com" - }, - { - "id": 5581, - "guid": "330a86ca-9898-4d33-96f6-b89916f3966b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Gibbs", - "company": "Technogra", - "phone": "847-423-3674", - "email": "mia@technogra.com" - }, - { - "id": 5582, - "guid": "f2e16b04-33aa-4e99-92d5-0a65522ae52c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Young", - "company": "Interliant", - "phone": "879-564-3881", - "email": "molly@interliant.com" - }, - { - "id": 5583, - "guid": "9ffb4d55-e73b-49fa-b2eb-6718a979d5db", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Neal", - "company": "Technogra", - "phone": "869-572-3969", - "email": "kaylee@technogra.com" - }, - { - "id": 5584, - "guid": "b9ce2e32-f6f9-4330-999f-37817d89847c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Creighton", - "company": "OpKeycomm", - "phone": "870-425-3388", - "email": "kylie@opkeycomm.com" - }, - { - "id": 5585, - "guid": "7a4c5ce6-6c53-4234-a976-4dff57e2eb0e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Sherlock", - "company": "US Infratouch", - "phone": "817-485-3493", - "email": "layla@us infratouch.com" - }, - { - "id": 5586, - "guid": "2b049852-20bf-4436-bd1a-0529a74a04bb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Hardman", - "company": "Dynarama", - "phone": "831-469-3590", - "email": "jessica@dynarama.com" - }, - { - "id": 5587, - "guid": "3c4b9647-e67a-4ff2-97b6-052ff50d2b56", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Carroll", - "company": "Qualserve", - "phone": "869-573-2075", - "email": "kylie@qualserve.com" - }, - { - "id": 5588, - "guid": "a9f134e9-7f8a-4127-8ab8-f2b1c209199e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Miers", - "company": "Fibrotouch", - "phone": "874-561-3967", - "email": "katelyn@fibrotouch.com" - }, - { - "id": 5589, - "guid": "7b08fb61-6445-4e93-9956-fdc81579fc17", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Morgan Owen", - "company": "Superscope", - "phone": "896-427-2923", - "email": "morgan@superscope.com" - }, - { - "id": 5590, - "guid": "d397e2ba-7f70-4b14-92b3-a8514661ac2d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Sheldon", - "company": "Conotomics", - "phone": "896-586-2311", - "email": "julia@conotomics.com" - }, - { - "id": 5591, - "guid": "37fca473-4992-4a5b-8464-82d641b407ec", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Hoggarth", - "company": "SysVenamerica", - "phone": "853-467-2791", - "email": "jessica@sysvenamerica.com" - }, - { - "id": 5592, - "guid": "3b256e03-dad8-4b5f-acad-5cc7ae5bff18", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Ford", - "company": "Sontopia", - "phone": "889-448-2140", - "email": "mia@sontopia.com" - }, - { - "id": 5593, - "guid": "5cc80853-6816-4e9e-8784-06001fad67a7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Fulton", - "company": "Safeagra", - "phone": "848-431-3789", - "email": "madeline@safeagra.com" - }, - { - "id": 5594, - "guid": "b5e9f10a-b1e6-4cbd-9029-9fd317601708", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooklyn Hardman", - "company": "Idmax", - "phone": "846-499-3928", - "email": "brooklyn@idmax.com" - }, - { - "id": 5595, - "guid": "db82f1c8-5811-4b5c-bada-075c29920a0e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Thornton", - "company": "Netsystems", - "phone": "821-453-3267", - "email": "mackenzie@netsystems.com" - }, - { - "id": 5596, - "guid": "f6d7f699-5b23-44be-9c54-876e7ffebc32", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Abramson", - "company": "Jamconik", - "phone": "808-412-3065", - "email": "kylie@jamconik.com" - }, - { - "id": 5597, - "guid": "439bd8d8-3102-42d7-beed-c2b9841bdfaf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Nevaeh Ward", - "company": "Syssoft", - "phone": "835-588-3324", - "email": "nevaeh@syssoft.com" - }, - { - "id": 5598, - "guid": "ce72dda7-ef97-4a92-a5ce-d7106bdbb5a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Nevaeh Wayne", - "company": "Unconix", - "phone": "858-525-3024", - "email": "nevaeh@unconix.com" - }, - { - "id": 5599, - "guid": "28375100-5b3a-40f0-9398-7b223f9d02e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie White", - "company": "Truetomic", - "phone": "896-517-2471", - "email": "mackenzie@truetomic.com" - }, - { - "id": 5600, - "guid": "a588787f-8951-41eb-bb81-a28eade8b00e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Brooks", - "company": "Westtomik", - "phone": "814-541-3246", - "email": "allison@westtomik.com" - }, - { - "id": 5601, - "guid": "ebae3cd5-5e19-4a23-866f-e11f0bd4d600", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Walkman", - "company": "Truegate", - "phone": "881-561-2821", - "email": "sydney@truegate.com" - }, - { - "id": 5602, - "guid": "572867b5-125f-4c0a-8184-3c750b02b4d5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Wesley", - "company": "Steganoconiche", - "phone": "827-585-2310", - "email": "layla@steganoconiche.com" - }, - { - "id": 5603, - "guid": "333624e1-00d4-4977-86b4-8b10965e8fda", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Hancock", - "company": "Keytheon", - "phone": "817-589-2982", - "email": "peyton@keytheon.com" - }, - { - "id": 5604, - "guid": "f7a8fc6a-7d4d-47ab-8223-2f71649132bc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Hawkins", - "company": "Robotomic", - "phone": "831-562-3201", - "email": "alexis@robotomic.com" - }, - { - "id": 5605, - "guid": "ed6de349-8c9a-490b-8cad-d4441dd32780", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Molligan", - "company": "OpKeycomm", - "phone": "859-591-3361", - "email": "caroline@opkeycomm.com" - }, - { - "id": 5606, - "guid": "bf60cf4e-a698-4f1b-8470-36f39481f8d6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Otis", - "company": "Robotomic", - "phone": "883-448-2882", - "email": "trinity@robotomic.com" - }, - { - "id": 5607, - "guid": "74235290-ec3f-4600-a063-5ff84e873ac4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Ford", - "company": "Anagraph", - "phone": "809-436-3202", - "email": "emma@anagraph.com" - }, - { - "id": 5608, - "guid": "d2c2f383-c4b1-4c5e-a438-78279fa93737", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Oswald", - "company": "Nanobanc", - "phone": "877-596-2302", - "email": "abigail@nanobanc.com" - }, - { - "id": 5609, - "guid": "cec4382f-d0c0-49ca-816e-1487d7f59da1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Winter", - "company": "Gigaura", - "phone": "862-573-2753", - "email": "layla@gigaura.com" - }, - { - "id": 5610, - "guid": "e999ee5f-3b22-4ed0-8257-49f777411be8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Youmans", - "company": "Westtomik", - "phone": "882-555-2328", - "email": "camila@westtomik.com" - }, - { - "id": 5611, - "guid": "325669e8-6be9-4b5c-9551-bdfca6226042", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Higgins", - "company": "Anaframe", - "phone": "810-568-2186", - "email": "rachel@anaframe.com" - }, - { - "id": 5612, - "guid": "75442fc4-96dd-40c8-829f-518c304ee700", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Fisher", - "company": "Titanigraf", - "phone": "846-561-3781", - "email": "julia@titanigraf.com" - }, - { - "id": 5613, - "guid": "a43ebb6d-fa12-4f69-882c-4cf117ffe0de", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Nathan", - "company": "Vencom", - "phone": "817-410-2213", - "email": "samantha@vencom.com" - }, - { - "id": 5614, - "guid": "d4334e07-0693-4905-8e10-0045badeb217", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Day", - "company": "Steganoconiche", - "phone": "836-485-2350", - "email": "chloe@steganoconiche.com" - }, - { - "id": 5615, - "guid": "bade124d-82e1-4a4a-9427-a872acb96c44", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Wayne", - "company": "Navivacs", - "phone": "833-437-3115", - "email": "zoe@navivacs.com" - }, - { - "id": 5616, - "guid": "15acdd7b-b80d-476a-98c2-7197a4585bb3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Thomson", - "company": "Ventanium", - "phone": "840-513-2854", - "email": "ashley@ventanium.com" - }, - { - "id": 5617, - "guid": "a72d860f-6b06-4c18-aef9-69338bd7cdcc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Oldman", - "company": "Orthosoft", - "phone": "865-481-2938", - "email": "katelyn@orthosoft.com" - }, - { - "id": 5618, - "guid": "10a4db08-6efc-410b-bfdb-455c8f7d5f2a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Gate", - "company": "US Omnigraphik", - "phone": "853-517-3802", - "email": "audrey@us omnigraphik.com" - }, - { - "id": 5619, - "guid": "642ee4c7-ebb1-4147-90d4-08a4d9257a20", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Higgins", - "company": "Orthomedia", - "phone": "859-559-2656", - "email": "sophia@orthomedia.com" - }, - { - "id": 5620, - "guid": "e08c0b25-62a9-4e10-a526-046970cfe64e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Davidson", - "company": "Enlogia", - "phone": "890-487-3494", - "email": "emma@enlogia.com" - }, - { - "id": 5621, - "guid": "d1ee1e85-efde-4f74-8a50-5f7f35a01575", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa WifKinson", - "company": "Pacwest", - "phone": "863-490-3003", - "email": "vanessa@pacwest.com" - }, - { - "id": 5622, - "guid": "945133fb-9ce9-4e77-81a5-a41f4bbc20bf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Miller", - "company": "Truegate", - "phone": "880-470-2795", - "email": "abigail@truegate.com" - }, - { - "id": 5623, - "guid": "060d25b9-b8a2-4046-a6a0-ce253095aedd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Murphy", - "company": "Allnet", - "phone": "819-598-2105", - "email": "payton@allnet.com" - }, - { - "id": 5624, - "guid": "ac6bf882-255b-456e-856f-93e54966f98e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Destiny Daniels", - "company": "Westgate", - "phone": "826-487-3555", - "email": "destiny@westgate.com" - }, - { - "id": 5625, - "guid": "29a747ea-7fff-4507-845e-cb6a815e0c2b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Harrison", - "company": "US Infratouch", - "phone": "887-563-3185", - "email": "anna@us infratouch.com" - }, - { - "id": 5626, - "guid": "dc658d8a-ac8e-4d86-ae55-112d04fbee2d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Gardner", - "company": "Syssoft", - "phone": "849-458-3300", - "email": "sophie@syssoft.com" - }, - { - "id": 5627, - "guid": "7a7be12f-a25d-441f-a83c-037a7971769a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Sherlock", - "company": "Syssoft", - "phone": "821-595-3312", - "email": "aubrey@syssoft.com" - }, - { - "id": 5628, - "guid": "324319bd-bd7b-467a-a525-967048dd6ff5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Carrington", - "company": "Mescaridic", - "phone": "814-563-3221", - "email": "angelina@mescaridic.com" - }, - { - "id": 5629, - "guid": "936f492c-f007-4500-b8f6-1987dc480065", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Hancock", - "company": "Anagraph", - "phone": "825-456-3732", - "email": "gabrielle@anagraph.com" - }, - { - "id": 5630, - "guid": "0ec5e098-ba87-4f62-b029-b77670962b8a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Gilson", - "company": "Teratopia", - "phone": "801-475-2337", - "email": "kayla@teratopia.com" - }, - { - "id": 5631, - "guid": "414ae5cb-586a-40e8-8c17-5415c0a2f49c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Walkman", - "company": "iOptystix", - "phone": "879-563-3685", - "email": "aaliyah@ioptystix.com" - }, - { - "id": 5632, - "guid": "99d565eb-988b-450b-a8a2-00860418e0ff", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aaliyah Miller", - "company": "Fibrotouch", - "phone": "867-414-3441", - "email": "aaliyah@fibrotouch.com" - }, - { - "id": 5633, - "guid": "6af8fe04-edd3-4b31-b108-10913994d9b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Brickman", - "company": "iMedconik", - "phone": "866-542-2353", - "email": "faith@imedconik.com" - }, - { - "id": 5634, - "guid": "d4e9f6d0-01b3-459c-a682-ab4ee3cff542", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Turner", - "company": "Mescaridic", - "phone": "818-447-2828", - "email": "victoria@mescaridic.com" - }, - { - "id": 5635, - "guid": "6f3bc7c4-05b6-48bd-a2a1-cfd441030980", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Brooks", - "company": "iMedconik", - "phone": "829-433-2171", - "email": "brianna@imedconik.com" - }, - { - "id": 5636, - "guid": "cbfedea2-ed8e-4f79-9032-8410d0451f3c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Walkman", - "company": "Tekcar", - "phone": "875-485-2523", - "email": "lauren@tekcar.com" - }, - { - "id": 5637, - "guid": "786a9df2-2b50-43d6-9345-b7aaf8356123", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Goldman", - "company": "Thermotomic", - "phone": "845-477-2692", - "email": "olivia@thermotomic.com" - }, - { - "id": 5638, - "guid": "45529308-5465-46d5-aae5-59e6d7f0700a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Galbraith", - "company": "eSteganoergy", - "phone": "879-451-2282", - "email": "destiny@esteganoergy.com" - }, - { - "id": 5639, - "guid": "0c7244c2-9b72-48d6-b970-38299c55f23d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Higgins", - "company": "Fibroserve", - "phone": "824-407-3813", - "email": "julia@fibroserve.com" - }, - { - "id": 5640, - "guid": "a67df446-d86b-4395-b7f4-e201e786dc9e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bailey Gardner", - "company": "Genland", - "phone": "875-517-3906", - "email": "bailey@genland.com" - }, - { - "id": 5641, - "guid": "1a52aab8-518d-489a-b28e-d9f7687fe99e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Owen", - "company": "Compuamerica", - "phone": "807-575-2620", - "email": "katherine@compuamerica.com" - }, - { - "id": 5642, - "guid": "9abd8ec5-e4c3-4f22-98f7-a0527ddd4fc3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Croftoon", - "company": "Technogra", - "phone": "854-438-3645", - "email": "gabriella@technogra.com" - }, - { - "id": 5643, - "guid": "6d4c93ef-6afe-411b-bb10-7a899c794648", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Harrison", - "company": "Westgate", - "phone": "801-406-3560", - "email": "arianna@westgate.com" - }, - { - "id": 5644, - "guid": "2b4608d0-3c41-4930-8d6d-b036643d080b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Gibbs", - "company": "iQualcar", - "phone": "847-585-3299", - "email": "sophia@iqualcar.com" - }, - { - "id": 5645, - "guid": "1164280c-d1da-4b7b-9bc5-f5b8bac6d07c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lillian Brooks", - "company": "Conotomics", - "phone": "850-485-3827", - "email": "lillian@conotomics.com" - }, - { - "id": 5646, - "guid": "8ad6a8c5-7e8f-4659-9820-047865c90fc9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alyssa Vance", - "company": "Robocomm", - "phone": "833-408-2134", - "email": "alyssa@robocomm.com" - }, - { - "id": 5647, - "guid": "f9842f93-2b72-43f9-8870-21d147747c31", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Murphy", - "company": "Rapigrafix", - "phone": "840-410-2006", - "email": "kylie@rapigrafix.com" - }, - { - "id": 5648, - "guid": "2788825a-22f9-48e2-b061-ab2ab218bd4e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Oldman", - "company": "Generola", - "phone": "885-472-3169", - "email": "sydney@generola.com" - }, - { - "id": 5649, - "guid": "71d5453d-c9ce-44d4-8928-76ae9091adc9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Gilmore", - "company": "Netseco", - "phone": "817-589-2697", - "email": "hannah@netseco.com" - }, - { - "id": 5650, - "guid": "f76a5fb7-7cb0-4dc3-b612-824d45e38072", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Nash", - "company": "Techtron", - "phone": "801-511-2288", - "email": "kylie@techtron.com" - }, - { - "id": 5651, - "guid": "5f083893-363c-47ab-8eac-8501c99ac99d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Chandter", - "company": "Anagraph", - "phone": "892-447-3776", - "email": "alexa@anagraph.com" - }, - { - "id": 5652, - "guid": "895ad524-589d-4b33-8c75-fe494cda0b46", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Winter", - "company": "Nanobanc", - "phone": "893-534-2198", - "email": "amelia@nanobanc.com" - }, - { - "id": 5653, - "guid": "54bba75b-62fc-47f9-ae59-3c38e33a0157", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Gilson", - "company": "Unologic", - "phone": "803-495-2407", - "email": "anna@unologic.com" - }, - { - "id": 5654, - "guid": "6b3ee512-7b25-453b-84b1-ccd575161a1f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Gardner", - "company": "Aprama", - "phone": "810-589-3802", - "email": "elizabeth@aprama.com" - }, - { - "id": 5655, - "guid": "1da76b7e-6a89-4794-ba75-135acce29db1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Brooks", - "company": "Westgate", - "phone": "846-508-2318", - "email": "madison@westgate.com" - }, - { - "id": 5656, - "guid": "353ff7bc-7256-4a5d-9850-58db8643d543", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Young", - "company": "Jamconik", - "phone": "823-436-2275", - "email": "samantha@jamconik.com" - }, - { - "id": 5657, - "guid": "c2f4e6cc-0b54-499d-86c8-152f1931db0a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Galbraith", - "company": "Multitiqua", - "phone": "841-544-2128", - "email": "chloe@multitiqua.com" - }, - { - "id": 5658, - "guid": "54a69d1f-8e18-4deb-85ce-709935164a12", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Miln", - "company": "Celgra", - "phone": "884-457-2127", - "email": "victoria@celgra.com" - }, - { - "id": 5659, - "guid": "70fd0373-9477-4515-a485-94a3f3338cd5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Brooks", - "company": "RoboAerlogix", - "phone": "849-516-2553", - "email": "isabella@roboaerlogix.com" - }, - { - "id": 5660, - "guid": "e5c03e2d-ba6d-4e6d-8cf0-2aab779f59bc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Nelson", - "company": "Orthomedia", - "phone": "818-427-3201", - "email": "eva@orthomedia.com" - }, - { - "id": 5661, - "guid": "88789fc6-4ad9-4771-857b-9a34fde98efd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Hancock", - "company": "Sontopia", - "phone": "803-450-2400", - "email": "jocelyn@sontopia.com" - }, - { - "id": 5662, - "guid": "6e120728-fb0d-4a35-8777-e2ed44ee88d4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Sheldon", - "company": "Steganoconiche", - "phone": "814-404-2650", - "email": "layla@steganoconiche.com" - }, - { - "id": 5663, - "guid": "df60242d-ecf1-4113-a71a-20fdb77b9e68", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Thorndike", - "company": "Conrama", - "phone": "858-406-2027", - "email": "caroline@conrama.com" - }, - { - "id": 5664, - "guid": "ace29b52-64c7-401b-a76c-f217b8f8078b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Webster", - "company": "Safeagra", - "phone": "895-453-2192", - "email": "valeria@safeagra.com" - }, - { - "id": 5665, - "guid": "d19b5f99-a40c-455d-a562-cec4addade4c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Crossman", - "company": "Fibroserve", - "phone": "855-565-2741", - "email": "khloe@fibroserve.com" - }, - { - "id": 5666, - "guid": "1843f396-faeb-4a72-b9aa-26c813201597", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Wayne", - "company": "Ameritron", - "phone": "814-573-3437", - "email": "peyton@ameritron.com" - }, - { - "id": 5667, - "guid": "0cd2c124-4e77-42c2-8968-2b5348f885e4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kimberly Smith", - "company": "Aluco", - "phone": "839-576-3935", - "email": "kimberly@aluco.com" - }, - { - "id": 5668, - "guid": "b4be3788-e777-4868-a35c-ef34434e5cbf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Gerald", - "company": "Unologic", - "phone": "814-434-2627", - "email": "ashley@unologic.com" - }, - { - "id": 5669, - "guid": "942310e8-7eb6-40b3-acf9-65870d8cf73a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Day", - "company": "Hypervaco", - "phone": "820-445-3103", - "email": "riley@hypervaco.com" - }, - { - "id": 5670, - "guid": "55172cf6-4959-478c-9286-d66a864ba035", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Daniels", - "company": "Vencom", - "phone": "876-485-3177", - "email": "gabrielle@vencom.com" - }, - { - "id": 5671, - "guid": "0e9e2dea-b8ea-431a-ac0e-b9a4f09b04aa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jocelyn Wood", - "company": "Gigaura", - "phone": "805-490-2174", - "email": "jocelyn@gigaura.com" - }, - { - "id": 5672, - "guid": "6dbb2ac5-606c-4cab-b6e5-2777de3770e6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Oldridge", - "company": "Allnet", - "phone": "816-405-2692", - "email": "gabriella@allnet.com" - }, - { - "id": 5673, - "guid": "9640f2b6-2314-46ee-a22a-ef71c099be34", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie White", - "company": "Rapigrafix", - "phone": "805-585-2730", - "email": "sophie@rapigrafix.com" - }, - { - "id": 5674, - "guid": "f03b10cc-ffbd-4bcd-8ef7-ffc2c4b9becf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Otis", - "company": "iOptystix", - "phone": "826-501-3799", - "email": "paige@ioptystix.com" - }, - { - "id": 5675, - "guid": "0581460a-03af-4a89-8dbd-57d135d74b13", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Chandter", - "company": "Mescatron", - "phone": "806-502-2804", - "email": "jessica@mescatron.com" - }, - { - "id": 5676, - "guid": "9d2ab957-a2dd-47e6-8519-68aeb056ee70", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Chandter", - "company": "Syssoft", - "phone": "849-561-3377", - "email": "victoria@syssoft.com" - }, - { - "id": 5677, - "guid": "3166cadd-1f87-48d4-8dc0-bcbdab11d194", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Fulton", - "company": "Generola", - "phone": "831-435-2180", - "email": "grace@generola.com" - }, - { - "id": 5678, - "guid": "b8600e1e-9eec-483a-8381-965f4ab1022c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Makayla Thornton", - "company": "Polytheon", - "phone": "848-544-3129", - "email": "makayla@polytheon.com" - }, - { - "id": 5679, - "guid": "4ba6c505-6eba-4a05-84b5-071730e3c36c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Thorndike", - "company": "Xeicon", - "phone": "808-586-2275", - "email": "kylie@xeicon.com" - }, - { - "id": 5680, - "guid": "ba84be84-67c3-4542-a401-e5267223ae1d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Trinity Freeman", - "company": "Jamrola", - "phone": "840-507-2729", - "email": "trinity@jamrola.com" - }, - { - "id": 5681, - "guid": "fd711ba6-bc7f-4bef-b4ac-bab9651ed9f3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Wainwright", - "company": "Infragraph", - "phone": "899-405-2652", - "email": "vanessa@infragraph.com" - }, - { - "id": 5682, - "guid": "022a5c3f-3588-4242-802a-6ee3f8e8ae9b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophia Carrington", - "company": "Conrama", - "phone": "882-585-2182", - "email": "sophia@conrama.com" - }, - { - "id": 5683, - "guid": "43e01b40-21d1-4772-833a-428aa1e39a63", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaylee Hodges", - "company": "InfoAirway", - "phone": "836-483-3774", - "email": "kaylee@infoairway.com" - }, - { - "id": 5684, - "guid": "a77c3620-6ae2-43fe-9199-4828fe0666e6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Clapton", - "company": "Inridium", - "phone": "803-559-3324", - "email": "serenity@inridium.com" - }, - { - "id": 5685, - "guid": "80d34ae8-8c32-45cf-96ba-a0cbe8e12d42", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Croftoon", - "company": "Unologic", - "phone": "805-447-2194", - "email": "arianna@unologic.com" - }, - { - "id": 5686, - "guid": "52643843-7231-449a-8904-9b2326c628b5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Freeman", - "company": "Westgate", - "phone": "812-540-3575", - "email": "evelyn@westgate.com" - }, - { - "id": 5687, - "guid": "2a303f15-7a38-4bbf-818a-48ec113f84c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Morrison", - "company": "Rapigrafix", - "phone": "896-531-2209", - "email": "maya@rapigrafix.com" - }, - { - "id": 5688, - "guid": "afe03297-a722-4ffb-a13d-e30ee8942804", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Webster", - "company": "iSkyvaco", - "phone": "801-400-3192", - "email": "chloe@iskyvaco.com" - }, - { - "id": 5689, - "guid": "84e7c39e-e9c9-4b15-a748-b01dc8743c1a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Mercer", - "company": "Ameritron", - "phone": "848-408-2324", - "email": "samantha@ameritron.com" - }, - { - "id": 5690, - "guid": "d5b66250-19d0-41bc-8165-7fe31022bc10", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Youmans", - "company": "Titanirola", - "phone": "814-475-2580", - "email": "julia@titanirola.com" - }, - { - "id": 5691, - "guid": "694fbd40-c802-43a9-83eb-fb7cd48a347e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Miller", - "company": "Orthomedia", - "phone": "846-439-2214", - "email": "allison@orthomedia.com" - }, - { - "id": 5692, - "guid": "c31ec2c6-83c1-4fcf-9706-c84293e85c24", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Owen", - "company": "Safeagra", - "phone": "847-597-3334", - "email": "kimberly@safeagra.com" - }, - { - "id": 5693, - "guid": "49c58597-1121-4e74-b0d9-bcbaa7765c73", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mya Nash", - "company": "Quintegrity", - "phone": "859-407-2036", - "email": "mya@quintegrity.com" - }, - { - "id": 5694, - "guid": "c08b094e-ea68-4dc2-b78f-e0adf1c98098", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Chandter", - "company": "Netseco", - "phone": "866-517-2744", - "email": "victoria@netseco.com" - }, - { - "id": 5695, - "guid": "a51b16b5-4d16-4a68-86a8-1b427dd3a7fc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Genesis Freeman", - "company": "Genland", - "phone": "887-561-3512", - "email": "genesis@genland.com" - }, - { - "id": 5696, - "guid": "5487364a-36ea-4c30-a1e1-30989df90156", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Paige Freeman", - "company": "Mescatron", - "phone": "861-428-2421", - "email": "paige@mescatron.com" - }, - { - "id": 5697, - "guid": "7743eae6-1872-48f3-8b3b-6b17bf3e8771", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Milton", - "company": "Safetrust", - "phone": "849-568-2812", - "email": "chloe@safetrust.com" - }, - { - "id": 5698, - "guid": "bfbc542a-ae59-4c86-a750-c175e133312b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Turner", - "company": "Entcast", - "phone": "881-423-2644", - "email": "arianna@entcast.com" - }, - { - "id": 5699, - "guid": "5a65050a-5573-4af7-8168-0d9eb0c75e99", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Goldman", - "company": "US Omnigraphik", - "phone": "899-404-3640", - "email": "autumn@us omnigraphik.com" - }, - { - "id": 5700, - "guid": "987d0c63-72f9-46d5-ac9b-5881e005cf70", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Brown", - "company": "SysUSA", - "phone": "835-575-3368", - "email": "taylor@sysusa.com" - }, - { - "id": 5701, - "guid": "67c1707e-371d-445b-b40f-03157a60b49e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Gate", - "company": "Celgra", - "phone": "874-406-3137", - "email": "kimberly@celgra.com" - }, - { - "id": 5702, - "guid": "97d46d8c-1d62-42d3-b87e-fc1b7494a1a9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie White", - "company": "Infraique", - "phone": "811-493-2543", - "email": "sophie@infraique.com" - }, - { - "id": 5703, - "guid": "e4129d7c-cc71-4eb6-bfb6-58214160637d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Makayla Youmans", - "company": "Airdyne", - "phone": "820-563-2488", - "email": "makayla@airdyne.com" - }, - { - "id": 5704, - "guid": "4aab5ff5-c6aa-49a5-929d-7f876554ee9a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Brooks", - "company": "Conotomics", - "phone": "816-534-2678", - "email": "lillian@conotomics.com" - }, - { - "id": 5705, - "guid": "732d5a8a-e5ad-4724-b19c-ac45359e6b70", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Harrison", - "company": "Allnet", - "phone": "891-529-3316", - "email": "ariana@allnet.com" - }, - { - "id": 5706, - "guid": "e0f932be-0c75-4290-8273-f807f46a90b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Faith Gibbs", - "company": "Indisco", - "phone": "871-495-2061", - "email": "faith@indisco.com" - }, - { - "id": 5707, - "guid": "4677158a-121d-47f1-b327-705e1777baee", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Gate", - "company": "Thermotomic", - "phone": "874-459-3166", - "email": "mariah@thermotomic.com" - }, - { - "id": 5708, - "guid": "87941eee-d409-461b-a3d1-5c65710f5d2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Davidson", - "company": "Airdyne", - "phone": "860-551-2414", - "email": "kaylee@airdyne.com" - }, - { - "id": 5709, - "guid": "efe0ca43-e0c2-4167-94cf-5ec4983b217d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Clapton", - "company": "Unconix", - "phone": "872-552-3504", - "email": "alexa@unconix.com" - }, - { - "id": 5710, - "guid": "a6c719e7-2b81-4fc4-8ff6-23cb7c0a88f2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mya Young", - "company": "Aprama", - "phone": "880-463-2831", - "email": "mya@aprama.com" - }, - { - "id": 5711, - "guid": "91cbac45-591f-4ac2-a0b6-801681448c2d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Carrington", - "company": "Robotomic", - "phone": "827-522-3622", - "email": "samantha@robotomic.com" - }, - { - "id": 5712, - "guid": "f2824d6b-b834-48e5-93b8-6529077e8e82", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Michaelson", - "company": "Enlogia", - "phone": "872-400-3392", - "email": "faith@enlogia.com" - }, - { - "id": 5713, - "guid": "c511b026-b234-4147-b579-854c816b3ae3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Timmons", - "company": "Titanirola", - "phone": "865-401-2426", - "email": "khloe@titanirola.com" - }, - { - "id": 5714, - "guid": "14a5f732-8aa5-4e76-8d1b-1d3928178652", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Vance", - "company": "Interliant", - "phone": "843-441-2956", - "email": "aubrey@interliant.com" - }, - { - "id": 5715, - "guid": "3bf5539a-7ecc-416f-9c67-d38a8368509a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jasmine Freeman", - "company": "iQualcar", - "phone": "823-564-2500", - "email": "jasmine@iqualcar.com" - }, - { - "id": 5716, - "guid": "e0673789-6c28-4208-a272-ea3a4111e45d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Carrington", - "company": "Technogra", - "phone": "885-591-2105", - "email": "paige@technogra.com" - }, - { - "id": 5717, - "guid": "ee869f62-d2a9-41a7-aa84-b06a08ce5381", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Carroll", - "company": "Videobanc", - "phone": "857-440-3113", - "email": "aaliyah@videobanc.com" - }, - { - "id": 5718, - "guid": "16e18225-f342-4533-aac6-5abf59ced45a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Wainwright", - "company": "Aluco", - "phone": "845-507-2358", - "email": "amelia@aluco.com" - }, - { - "id": 5719, - "guid": "261b9000-4863-4d34-b0d9-9bae2c5d28ba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Webster", - "company": "Proline", - "phone": "818-550-3817", - "email": "sofia@proline.com" - }, - { - "id": 5720, - "guid": "6fe45633-2b11-44d8-be9c-55a15412bbb1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Vaughan", - "company": "Navivacs", - "phone": "862-474-2843", - "email": "jessica@navivacs.com" - }, - { - "id": 5721, - "guid": "eaa63e06-dc90-4396-b298-88d9734a13bb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Gilson", - "company": "eSteganoergy", - "phone": "872-572-2826", - "email": "camila@esteganoergy.com" - }, - { - "id": 5722, - "guid": "1e07573b-ee92-4ca8-8501-7c81d7faeadb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Clapton", - "company": "Syssoft", - "phone": "838-591-2639", - "email": "destiny@syssoft.com" - }, - { - "id": 5723, - "guid": "603fe255-6025-4abb-820d-635cdddba06f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Avery Nash", - "company": "Celgra", - "phone": "842-431-3992", - "email": "avery@celgra.com" - }, - { - "id": 5724, - "guid": "6ebb45ba-b7b9-413f-9066-ebdce6111200", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bella Higgins", - "company": "Unologic", - "phone": "859-549-3118", - "email": "bella@unologic.com" - }, - { - "id": 5725, - "guid": "844284da-fbd8-4776-bcf8-c7abce872085", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Creighton", - "company": "Orthosoft", - "phone": "828-568-2226", - "email": "anna@orthosoft.com" - }, - { - "id": 5726, - "guid": "c7fa6d16-1040-4afd-84f9-677509062314", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Thomson", - "company": "Truegate", - "phone": "811-468-2538", - "email": "kaitlyn@truegate.com" - }, - { - "id": 5727, - "guid": "6d96e8d3-866a-4cc5-96b6-ee18a5e95b5b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Gilbert", - "company": "Anagraph", - "phone": "859-556-2286", - "email": "jasmine@anagraph.com" - }, - { - "id": 5728, - "guid": "172d68f5-a07a-4d18-ba4c-acf02c23d0b1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gianna Conors", - "company": "iEnland", - "phone": "840-469-3714", - "email": "gianna@ienland.com" - }, - { - "id": 5729, - "guid": "8d1bfefe-673f-476e-b6a4-250e66580626", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Osborne", - "company": "Allphysiche", - "phone": "880-417-3007", - "email": "julia@allphysiche.com" - }, - { - "id": 5730, - "guid": "8d60cdee-48a6-41f4-8d18-fdcee5f78e7b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Hoggarth", - "company": "Westgate", - "phone": "899-544-3920", - "email": "valeria@westgate.com" - }, - { - "id": 5731, - "guid": "7f6977c2-8600-4188-b79b-c6a87c9f431f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Oldridge", - "company": "Thermotomic", - "phone": "832-500-2501", - "email": "kaylee@thermotomic.com" - }, - { - "id": 5732, - "guid": "b0efdff9-0dd1-426a-bd73-a2e201f13e78", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Evelyn Harrison", - "company": "Raylog", - "phone": "868-478-3590", - "email": "evelyn@raylog.com" - }, - { - "id": 5733, - "guid": "84dc8b77-1aa7-4073-b1f7-49101db96e09", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Haig", - "company": "Vencom", - "phone": "817-527-2071", - "email": "madeline@vencom.com" - }, - { - "id": 5734, - "guid": "75d12391-a71a-4f5b-9d29-cdc7c72c7e5f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Vance", - "company": "Steganoconiche", - "phone": "876-517-3674", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 5735, - "guid": "295048d1-49fd-4e5c-86a1-c9b57f4f8354", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophie WifKinson", - "company": "Unconix", - "phone": "891-553-3949", - "email": "sophie@unconix.com" - }, - { - "id": 5736, - "guid": "ceb03f81-4a79-4471-a8ed-b8ca993a3ce4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Webster", - "company": "SysUSA", - "phone": "879-515-3362", - "email": "brooklyn@sysusa.com" - }, - { - "id": 5737, - "guid": "9cad62e5-c48a-4c83-b20b-4463a7f710d4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mariah Carter", - "company": "Unconix", - "phone": "811-470-2635", - "email": "mariah@unconix.com" - }, - { - "id": 5738, - "guid": "c6a1d8a7-62c2-4fb4-84f4-98b69a6b116e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Thornton", - "company": "InfoAirway", - "phone": "802-513-2357", - "email": "isabella@infoairway.com" - }, - { - "id": 5739, - "guid": "9698f605-bdc3-41a0-9468-7f870f806e0c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Chesterton", - "company": "Xeicon", - "phone": "869-452-3031", - "email": "brianna@xeicon.com" - }, - { - "id": 5740, - "guid": "366e4816-8ea0-444e-be1c-d391234c13e6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Carroll", - "company": "Ameritron", - "phone": "886-431-2159", - "email": "eva@ameritron.com" - }, - { - "id": 5741, - "guid": "12e567fb-6a15-4161-9471-cc3608c6a863", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabelle Thornton", - "company": "Airdyne", - "phone": "813-545-2284", - "email": "isabelle@airdyne.com" - }, - { - "id": 5742, - "guid": "44ad3d84-8fe7-4065-95a1-356419570793", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Brickman", - "company": "eSteganoergy", - "phone": "886-403-3524", - "email": "abigail@esteganoergy.com" - }, - { - "id": 5743, - "guid": "c7b81422-4d92-4506-a9d7-62463d5f7d0b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Gate", - "company": "Indisco", - "phone": "826-402-2690", - "email": "brianna@indisco.com" - }, - { - "id": 5744, - "guid": "6568ee4c-6184-4921-b284-3b911261dd2f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Sherlock", - "company": "Syssoft", - "phone": "829-470-2190", - "email": "kylie@syssoft.com" - }, - { - "id": 5745, - "guid": "9688a00a-bcab-48cf-a315-beed86d45d52", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Osborne", - "company": "Idmax", - "phone": "830-535-3582", - "email": "faith@idmax.com" - }, - { - "id": 5746, - "guid": "b4a4422e-d95c-4777-94af-7fa78d34c911", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Wayne", - "company": "Multitiqua", - "phone": "898-559-3434", - "email": "lily@multitiqua.com" - }, - { - "id": 5747, - "guid": "dbe396dd-6a07-491a-b8ff-ef040a11bdb3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Calhoun", - "company": "iSkyvaco", - "phone": "893-596-2135", - "email": "alexis@iskyvaco.com" - }, - { - "id": 5748, - "guid": "f2cfafff-f668-4061-9521-e02b6c13220f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Milton", - "company": "Fibroserve", - "phone": "849-479-3088", - "email": "aaliyah@fibroserve.com" - }, - { - "id": 5749, - "guid": "1ee1d86d-d029-4402-9522-295331aa58c8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Gate", - "company": "Orthomedia", - "phone": "863-588-2264", - "email": "paige@orthomedia.com" - }, - { - "id": 5750, - "guid": "0d53bc88-2482-4b73-99fa-0a0dc056826b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Gate", - "company": "Teknoplexon", - "phone": "834-491-3677", - "email": "amelia@teknoplexon.com" - }, - { - "id": 5751, - "guid": "48dd56f9-ed24-4332-b787-9cc311b25591", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Wainwright", - "company": "Cryptotegrity", - "phone": "824-562-2293", - "email": "arianna@cryptotegrity.com" - }, - { - "id": 5752, - "guid": "9f146141-b9b4-439e-a7fe-328e6de385de", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Gerald", - "company": "Navivacs", - "phone": "829-467-2119", - "email": "addison@navivacs.com" - }, - { - "id": 5753, - "guid": "3bd1ea31-496e-4286-b216-d182d1682665", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Wesley", - "company": "Skydata", - "phone": "802-598-3165", - "email": "autumn@skydata.com" - }, - { - "id": 5754, - "guid": "e3846119-2d84-469e-80e5-662da3672394", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Youmans", - "company": "Teknoplexon", - "phone": "829-472-3471", - "email": "valeria@teknoplexon.com" - }, - { - "id": 5755, - "guid": "aafbf246-e6a8-470f-94ca-9f53aa20fee8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ariana Hodges", - "company": "Cryptotegrity", - "phone": "872-461-2770", - "email": "ariana@cryptotegrity.com" - }, - { - "id": 5756, - "guid": "d395bf29-3ad1-402e-a3bb-b94fd87d0128", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Carter", - "company": "Cryptotemplate", - "phone": "832-499-3593", - "email": "kaylee@cryptotemplate.com" - }, - { - "id": 5757, - "guid": "04b78413-8198-4efc-8288-8c397819f508", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Oswald", - "company": "Cryptotemplate", - "phone": "853-577-3633", - "email": "addison@cryptotemplate.com" - }, - { - "id": 5758, - "guid": "294eaac6-a7f5-4429-9a25-2637e188dd22", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Claire Bush", - "company": "Infraique", - "phone": "841-546-2574", - "email": "claire@infraique.com" - }, - { - "id": 5759, - "guid": "ccf997b0-eaa1-410c-967a-5b0c5bf6f8b6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Adamson", - "company": "RoboAerlogix", - "phone": "899-544-2530", - "email": "arianna@roboaerlogix.com" - }, - { - "id": 5760, - "guid": "ce6ead7f-edc1-4b17-92d5-a0dc1a8eadef", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Miller", - "company": "Netseco", - "phone": "863-595-3893", - "email": "julia@netseco.com" - }, - { - "id": 5761, - "guid": "f0a88dcb-f6ab-46c3-aa99-4721a581e224", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Charlson", - "company": "Navivacs", - "phone": "801-520-2994", - "email": "kaitlyn@navivacs.com" - }, - { - "id": 5762, - "guid": "2f21b7d5-eb57-48e4-b92a-5e257d9952cc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Brickman", - "company": "Textiqua", - "phone": "898-446-2372", - "email": "grace@textiqua.com" - }, - { - "id": 5763, - "guid": "8e27038a-5aca-4691-b3d8-b178d16bd3d8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Osborne", - "company": "Robotomic", - "phone": "863-450-3897", - "email": "autumn@robotomic.com" - }, - { - "id": 5764, - "guid": "9eb95559-8c95-4e6a-b32a-371258bee3b6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Gate", - "company": "Allnet", - "phone": "899-543-2444", - "email": "katherine@allnet.com" - }, - { - "id": 5765, - "guid": "970a51e0-76bb-4a54-af06-625aa6d5c042", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Avery Young", - "company": "Anaframe", - "phone": "823-521-3543", - "email": "avery@anaframe.com" - }, - { - "id": 5766, - "guid": "738dac9c-6c80-4754-9bd3-8538808bde24", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Nathan", - "company": "SysVenamerica", - "phone": "884-589-3137", - "email": "emma@sysvenamerica.com" - }, - { - "id": 5767, - "guid": "f106190e-a0c6-4db1-8809-34509aae75f5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Watson", - "company": "RoboAerlogix", - "phone": "824-559-2118", - "email": "mia@roboaerlogix.com" - }, - { - "id": 5768, - "guid": "5f2b0f00-9dfc-4e79-a039-9464093fd1a5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Ford", - "company": "Mescatron", - "phone": "876-476-3404", - "email": "khloe@mescatron.com" - }, - { - "id": 5769, - "guid": "84ed56b6-1652-41ad-a7f3-b0778df57e4f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Gill", - "company": "Robotemplate", - "phone": "865-551-3507", - "email": "aubrey@robotemplate.com" - }, - { - "id": 5770, - "guid": "bd5280de-d77f-444e-b13e-d5ee17687ca9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Oldridge", - "company": "Westmedia", - "phone": "862-526-3404", - "email": "hannah@westmedia.com" - }, - { - "id": 5771, - "guid": "47f5fe5d-3a38-49d7-98dc-3e373f53f491", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Crossman", - "company": "Transtouch", - "phone": "843-475-2719", - "email": "sophie@transtouch.com" - }, - { - "id": 5772, - "guid": "cbcad04b-a195-4108-9b6d-37be318979f3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Nash", - "company": "Genland", - "phone": "831-598-2983", - "email": "aaliyah@genland.com" - }, - { - "id": 5773, - "guid": "b000fd91-5017-45c7-a6c9-5c7feef9f502", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Croftoon", - "company": "iMedconik", - "phone": "878-521-2624", - "email": "molly@imedconik.com" - }, - { - "id": 5774, - "guid": "916b51c4-9e93-405e-9c08-b522e0851bc6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Murphy", - "company": "Turbomart", - "phone": "877-537-2382", - "email": "bailey@turbomart.com" - }, - { - "id": 5775, - "guid": "94aa87e7-af8d-4a7d-8b9b-22b517465eac", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Youmans", - "company": "Polytheon", - "phone": "859-477-2556", - "email": "autumn@polytheon.com" - }, - { - "id": 5776, - "guid": "24d7c407-662e-4ec6-acaf-710e20ba4d47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Youmans", - "company": "Xeicon", - "phone": "894-526-2232", - "email": "savannah@xeicon.com" - }, - { - "id": 5777, - "guid": "400ea65b-1b61-424f-8d3d-4574df1e6511", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Otis", - "company": "Quintegrity", - "phone": "821-401-3235", - "email": "taylor@quintegrity.com" - }, - { - "id": 5778, - "guid": "40b2b83a-f499-4de0-97d0-abcd3004ac6b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Hannah Goodman", - "company": "Aluco", - "phone": "896-425-3243", - "email": "hannah@aluco.com" - }, - { - "id": 5779, - "guid": "cea9f1d8-4204-4dea-b82a-228aee0d9108", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Higgins", - "company": "Orthosoft", - "phone": "862-452-2176", - "email": "jessica@orthosoft.com" - }, - { - "id": 5780, - "guid": "81575ea8-aa3d-4c31-b2b5-3f8b1bb96e22", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Bush", - "company": "Nanobanc", - "phone": "839-503-2273", - "email": "makayla@nanobanc.com" - }, - { - "id": 5781, - "guid": "b8b8d86b-05d3-49b0-81a9-46c355b39ec0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Carter", - "company": "Allphysiche", - "phone": "838-425-3125", - "email": "kaitlyn@allphysiche.com" - }, - { - "id": 5782, - "guid": "c77d3e97-79c6-4b59-89ef-a202a6a90c99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Hamphrey", - "company": "Tekcar", - "phone": "853-513-3898", - "email": "victoria@tekcar.com" - }, - { - "id": 5783, - "guid": "c31d5db8-41af-4ff2-a415-8d7f370a1c9f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith WifKinson", - "company": "Textiqua", - "phone": "812-513-3615", - "email": "faith@textiqua.com" - }, - { - "id": 5784, - "guid": "06ca88d8-e06e-4653-94d0-02f13009419c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Bush", - "company": "Thermotomic", - "phone": "885-544-2563", - "email": "olivia@thermotomic.com" - }, - { - "id": 5785, - "guid": "7e0c0d3e-fec4-4277-ae9f-d636f5f0a117", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Nelson", - "company": "Compuamerica", - "phone": "882-540-3295", - "email": "emma@compuamerica.com" - }, - { - "id": 5786, - "guid": "72005e2b-bea1-4942-adf2-e69170e38e84", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Turner", - "company": "Superscope", - "phone": "807-568-3424", - "email": "mackenzie@superscope.com" - }, - { - "id": 5787, - "guid": "b53f1a5e-c663-41ce-b9be-4d8fb77e8c48", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Harrison", - "company": "RoboAerlogix", - "phone": "849-495-3694", - "email": "nevaeh@roboaerlogix.com" - }, - { - "id": 5788, - "guid": "b16487f5-465f-49d3-87af-d30f57cb7076", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Conors", - "company": "Indisco", - "phone": "854-500-3301", - "email": "nevaeh@indisco.com" - }, - { - "id": 5789, - "guid": "80dda5ae-e992-4728-8be3-909fb433c5c8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Charlson", - "company": "OpKeycomm", - "phone": "851-481-3904", - "email": "addison@opkeycomm.com" - }, - { - "id": 5790, - "guid": "94f7e6dd-1372-442d-9b91-e2332c75d009", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Charlotte Ford", - "company": "Titanigraf", - "phone": "878-467-3706", - "email": "charlotte@titanigraf.com" - }, - { - "id": 5791, - "guid": "cbd95899-5c51-45a9-8b4a-20e53c84a19d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aaliyah White", - "company": "Cryptotemplate", - "phone": "863-564-3192", - "email": "aaliyah@cryptotemplate.com" - }, - { - "id": 5792, - "guid": "bbaa3b90-703c-4ffa-9476-f99102ccbcb6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katherine Creighton", - "company": "Navivacs", - "phone": "886-597-2768", - "email": "katherine@navivacs.com" - }, - { - "id": 5793, - "guid": "9823a87f-778d-452f-925d-c32aeefa3491", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Daniels", - "company": "RoboAerlogix", - "phone": "807-403-2432", - "email": "savannah@roboaerlogix.com" - }, - { - "id": 5794, - "guid": "fb20f968-b994-4994-abe6-3980026fc9d6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Molligan", - "company": "Fibrotopia", - "phone": "854-544-3497", - "email": "chloe@fibrotopia.com" - }, - { - "id": 5795, - "guid": "394006b3-6ec7-45b3-ad73-244765c52927", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Hancock", - "company": "Xeicon", - "phone": "819-444-3329", - "email": "madison@xeicon.com" - }, - { - "id": 5796, - "guid": "0bb9ed48-cf72-4516-93ce-82b1e3f90b7e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Hamphrey", - "company": "iEnland", - "phone": "846-462-3658", - "email": "sophie@ienland.com" - }, - { - "id": 5797, - "guid": "c0ea83d9-6611-42d9-8e1a-e2255cc40628", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Miller", - "company": "Fibrotopia", - "phone": "846-561-3617", - "email": "brooke@fibrotopia.com" - }, - { - "id": 5798, - "guid": "62888a7f-1ece-4368-832b-33e1f5e45ece", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Oldman", - "company": "Ameritron", - "phone": "859-433-3465", - "email": "katherine@ameritron.com" - }, - { - "id": 5799, - "guid": "fcd7fd33-a50e-48bd-952e-9bceb5ca60e1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Morrison", - "company": "Fibroserve", - "phone": "833-450-2636", - "email": "addison@fibroserve.com" - }, - { - "id": 5800, - "guid": "533481d2-b880-419b-9c5d-4a190240b73b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Carrington", - "company": "eSteganoergy", - "phone": "852-575-3746", - "email": "vanessa@esteganoergy.com" - }, - { - "id": 5801, - "guid": "a0e58989-3ae6-490d-a47d-2b93b3c3c7c8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Haig", - "company": "Westmedia", - "phone": "894-507-2864", - "email": "emily@westmedia.com" - }, - { - "id": 5802, - "guid": "d5670aaf-206b-4c3f-9da5-3260acb8304b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Sheldon", - "company": "Techtron", - "phone": "857-495-2584", - "email": "jessica@techtron.com" - }, - { - "id": 5803, - "guid": "79bde3d8-1763-4cc3-8598-9a495c5779a0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lily Gilmore", - "company": "Multitiqua", - "phone": "823-507-3562", - "email": "lily@multitiqua.com" - }, - { - "id": 5804, - "guid": "2e1be4fa-777f-4bb0-85c4-7f4da833e48a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Wainwright", - "company": "Syssoft", - "phone": "837-581-2411", - "email": "madeline@syssoft.com" - }, - { - "id": 5805, - "guid": "3e338e72-d8f1-4d72-83ad-67b79c994e48", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Wesley", - "company": "Techtron", - "phone": "857-536-2861", - "email": "mia@techtron.com" - }, - { - "id": 5806, - "guid": "7232ac06-8b27-40d6-ac74-135cdaaac6f4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Chapman", - "company": "Skydata", - "phone": "818-587-2366", - "email": "destiny@skydata.com" - }, - { - "id": 5807, - "guid": "836204ee-f836-43cc-80e1-9141c15a7f9b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Fulton", - "company": "US Omnigraphik", - "phone": "896-536-3644", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 5808, - "guid": "6431bf3e-48e2-4c81-a5c9-a70a68191da7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Faith Haig", - "company": "Infragraph", - "phone": "811-405-2710", - "email": "faith@infragraph.com" - }, - { - "id": 5809, - "guid": "7d1d5690-4a1a-4209-a68e-ee7f672dba01", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Hoggarth", - "company": "Proline", - "phone": "813-459-3990", - "email": "allison@proline.com" - }, - { - "id": 5810, - "guid": "109a4221-1ead-4d4b-a555-84f7a37f2e76", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Smith", - "company": "Mescaridic", - "phone": "842-452-2997", - "email": "jocelyn@mescaridic.com" - }, - { - "id": 5811, - "guid": "7507a71f-f95c-4984-80d4-5b1c2de48e7a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Timmons", - "company": "Robotemplate", - "phone": "875-596-2502", - "email": "riley@robotemplate.com" - }, - { - "id": 5812, - "guid": "24e047ef-b158-444d-b292-b490d93b807f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Creighton", - "company": "Conotomics", - "phone": "899-531-2250", - "email": "addison@conotomics.com" - }, - { - "id": 5813, - "guid": "4b577d26-e02d-481b-91f4-98bd88b0a33d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Clapton", - "company": "RoboAerlogix", - "phone": "804-574-3393", - "email": "riley@roboaerlogix.com" - }, - { - "id": 5814, - "guid": "13f0e2a2-8fb8-42df-970f-15dc351f1965", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Chesterton", - "company": "Gigaura", - "phone": "863-490-2375", - "email": "madeline@gigaura.com" - }, - { - "id": 5815, - "guid": "a03d6fb9-4834-4ae3-9797-3f1c8b13e907", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Claire Hodges", - "company": "Unologic", - "phone": "866-426-2480", - "email": "claire@unologic.com" - }, - { - "id": 5816, - "guid": "218e8cfe-6f42-492c-9f1c-535d22ed0f04", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Hailey", - "company": "Interliant", - "phone": "813-467-2502", - "email": "arianna@interliant.com" - }, - { - "id": 5817, - "guid": "f9e2142d-28b2-4c26-a7e9-b4b187ff95bd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Thomson", - "company": "iOptystix", - "phone": "860-489-2290", - "email": "gabrielle@ioptystix.com" - }, - { - "id": 5818, - "guid": "e1a33376-e24c-4db2-b2b5-4697ab085429", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Murphy", - "company": "Vencom", - "phone": "843-575-2900", - "email": "jasmine@vencom.com" - }, - { - "id": 5819, - "guid": "94a08d04-9468-42fa-a624-6f3913ca4946", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Chapman", - "company": "Technogra", - "phone": "836-569-3947", - "email": "leah@technogra.com" - }, - { - "id": 5820, - "guid": "b894b8de-ce46-459c-8245-a9e571116c9b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Gilbert", - "company": "Genland", - "phone": "804-464-3734", - "email": "destiny@genland.com" - }, - { - "id": 5821, - "guid": "26bcff52-50b6-41cf-a9e8-ff8abcd3a136", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Watson", - "company": "Jamrola", - "phone": "881-441-3704", - "email": "morgan@jamrola.com" - }, - { - "id": 5822, - "guid": "609bd354-3ddd-4f51-9a20-f115da3c8b4a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Chandter", - "company": "US Omnigraphik", - "phone": "833-524-3628", - "email": "brooklyn@us omnigraphik.com" - }, - { - "id": 5823, - "guid": "9d80c0dc-04a8-415e-994c-2d956d83a015", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Campbell", - "company": "InfoAirway", - "phone": "803-532-3184", - "email": "savannah@infoairway.com" - }, - { - "id": 5824, - "guid": "4edefe4b-e3bb-417a-8663-5e871ec4bf47", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Nelson", - "company": "iEnland", - "phone": "813-449-3671", - "email": "molly@ienland.com" - }, - { - "id": 5825, - "guid": "a5c4af12-54c6-46a1-a90e-3f2286342b19", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Youmans", - "company": "Idmax", - "phone": "899-596-2794", - "email": "lauren@idmax.com" - }, - { - "id": 5826, - "guid": "ab91973f-5c8b-4c82-aeaa-f14974609e53", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Gilson", - "company": "Skydata", - "phone": "809-515-2801", - "email": "payton@skydata.com" - }, - { - "id": 5827, - "guid": "8f44d22b-9917-41bd-a1d0-e3a53084ff63", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Brickman", - "company": "Mescaridic", - "phone": "868-566-2363", - "email": "trinity@mescaridic.com" - }, - { - "id": 5828, - "guid": "c18a7dfd-910f-444a-99c3-dee6cebce980", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mackenzie Neal", - "company": "Orthosoft", - "phone": "861-478-3590", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 5829, - "guid": "d314e235-0139-4130-ac8b-7644539cd3b3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Oliver", - "company": "Superscope", - "phone": "824-468-2217", - "email": "eva@superscope.com" - }, - { - "id": 5830, - "guid": "88b380b1-d3ed-4db7-9e46-dfe39b9caf9e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Gill", - "company": "Conotomics", - "phone": "863-469-3977", - "email": "makayla@conotomics.com" - }, - { - "id": 5831, - "guid": "8df66848-f653-4d11-8c35-0e8622b2ed7b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Young", - "company": "Thermotomic", - "phone": "800-561-3385", - "email": "bella@thermotomic.com" - }, - { - "id": 5832, - "guid": "4ee38eeb-25ee-43ec-94cc-726ed114f0c9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Hodges", - "company": "Safetrust", - "phone": "885-530-2816", - "email": "alexandra@safetrust.com" - }, - { - "id": 5833, - "guid": "799c7ca8-9a32-4f0f-a22c-19279d0f0c88", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Oliver", - "company": "Tekcar", - "phone": "823-550-2960", - "email": "jessica@tekcar.com" - }, - { - "id": 5834, - "guid": "73ef3af4-6e96-46f4-a268-e1c57ec0d4b1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Nelson", - "company": "Fibrotopia", - "phone": "803-593-3763", - "email": "kaitlyn@fibrotopia.com" - }, - { - "id": 5835, - "guid": "8fae7ddf-0109-4d0c-a72c-626e71be36e1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Nathan", - "company": "Westgate", - "phone": "838-407-3015", - "email": "hannah@westgate.com" - }, - { - "id": 5836, - "guid": "0d32e9f8-20d1-49ac-8369-99da8e228eb7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Hancock", - "company": "Allphysiche", - "phone": "872-554-3593", - "email": "victoria@allphysiche.com" - }, - { - "id": 5837, - "guid": "95412c6e-c8f3-4183-be85-e1164dc53d2e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Charlson", - "company": "Textiqua", - "phone": "847-435-2685", - "email": "samantha@textiqua.com" - }, - { - "id": 5838, - "guid": "f400079c-c813-4aba-8363-ca070fd9543c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Miller", - "company": "Infragraph", - "phone": "858-457-2225", - "email": "morgan@infragraph.com" - }, - { - "id": 5839, - "guid": "d4ad793b-b06a-4625-bee4-06b93ffe9da1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Higgins", - "company": "Xeicon", - "phone": "899-474-2749", - "email": "lily@xeicon.com" - }, - { - "id": 5840, - "guid": "bec778b5-2310-4dea-99a2-6cba33ee0c59", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Stanley", - "company": "iSkyvaco", - "phone": "866-511-3126", - "email": "vanessa@iskyvaco.com" - }, - { - "id": 5841, - "guid": "3bbbd95d-1518-4657-9f19-04a022bb9d8f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Brickman", - "company": "Turbomart", - "phone": "867-579-2938", - "email": "serenity@turbomart.com" - }, - { - "id": 5842, - "guid": "812b551d-64cf-46e5-b240-010d6010cbfb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Haig", - "company": "Proline", - "phone": "816-533-2276", - "email": "grace@proline.com" - }, - { - "id": 5843, - "guid": "38511734-bf84-417c-861e-bd785090ad04", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Smith", - "company": "Ameritron", - "phone": "818-589-2648", - "email": "amelia@ameritron.com" - }, - { - "id": 5844, - "guid": "424a1019-0a7c-4692-8ba4-751ab36deaec", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Miln", - "company": "Truetomic", - "phone": "822-462-3378", - "email": "mackenzie@truetomic.com" - }, - { - "id": 5845, - "guid": "340d658f-4adb-4f8f-9046-72ab4c8f859a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Brooks", - "company": "Dynarama", - "phone": "833-524-3976", - "email": "ariana@dynarama.com" - }, - { - "id": 5846, - "guid": "a383492f-cd1b-4aec-b865-0378111d047f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Molligan", - "company": "Orthomedia", - "phone": "806-513-3593", - "email": "hannah@orthomedia.com" - }, - { - "id": 5847, - "guid": "36d5cb19-72ff-44e5-8b6e-703de3f1ac76", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Nevaeh Oldridge", - "company": "Titanigraf", - "phone": "868-463-3122", - "email": "nevaeh@titanigraf.com" - }, - { - "id": 5848, - "guid": "4dedfd22-5877-4016-b0d2-8409983670c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Young", - "company": "Aluco", - "phone": "841-441-2210", - "email": "katherine@aluco.com" - }, - { - "id": 5849, - "guid": "21311319-27b3-4d56-8c2c-86b4b3fc9495", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gustman", - "company": "Teknoplexon", - "phone": "883-586-3177", - "email": "brooklyn@teknoplexon.com" - }, - { - "id": 5850, - "guid": "e05ff141-cf98-4602-8795-03f556bcf3fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Goldman", - "company": "Pericenta", - "phone": "812-400-2134", - "email": "vanessa@pericenta.com" - }, - { - "id": 5851, - "guid": "7caae2c8-4519-4f7f-905b-aa6f07d3d265", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Day", - "company": "Xeicon", - "phone": "845-405-2134", - "email": "maria@xeicon.com" - }, - { - "id": 5852, - "guid": "f33ece1a-cb9e-4b20-aec1-564ba3143df0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Turner", - "company": "eSteganoergy", - "phone": "866-488-2460", - "email": "alexa@esteganoergy.com" - }, - { - "id": 5853, - "guid": "552b1d6f-8651-4a4a-acc2-4f1c0a20852e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie WifKinson", - "company": "Allnet", - "phone": "875-409-3209", - "email": "sophie@allnet.com" - }, - { - "id": 5854, - "guid": "9403cf6b-21b1-4806-ad54-6e3c617ac142", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Gilmore", - "company": "Turbomart", - "phone": "887-507-2805", - "email": "ashley@turbomart.com" - }, - { - "id": 5855, - "guid": "beece2de-19b3-41b1-a583-9171cb1d0ca8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Calhoun", - "company": "Skydata", - "phone": "836-426-2216", - "email": "brooklyn@skydata.com" - }, - { - "id": 5856, - "guid": "144c76df-65c1-417e-a3a2-9860c1f44aba", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Gerald", - "company": "Fibrotopia", - "phone": "862-563-2860", - "email": "maya@fibrotopia.com" - }, - { - "id": 5857, - "guid": "1c354e87-145d-4ff8-9089-e25d75d100fc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Valeria Ford", - "company": "SysUSA", - "phone": "847-542-3546", - "email": "valeria@sysusa.com" - }, - { - "id": 5858, - "guid": "77178c7b-21ec-41bb-8a3b-e86dd3bacbae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Fisher", - "company": "Robotomic", - "phone": "821-472-2737", - "email": "ella@robotomic.com" - }, - { - "id": 5859, - "guid": "7b693ce1-be80-49ec-9274-1bef232af075", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Gerald", - "company": "Transtouch", - "phone": "877-474-2845", - "email": "kaylee@transtouch.com" - }, - { - "id": 5860, - "guid": "ad196f09-001d-4d4b-a659-4dce4ee10885", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Oldridge", - "company": "Quintegrity", - "phone": "840-521-2478", - "email": "sophie@quintegrity.com" - }, - { - "id": 5861, - "guid": "f5c3fd83-c372-4a03-9798-8316f995e44b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emily Murphy", - "company": "Steganoconiche", - "phone": "899-448-3198", - "email": "emily@steganoconiche.com" - }, - { - "id": 5862, - "guid": "5129ef08-8edc-4ca6-b764-8b26e793f0e3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Cramer", - "company": "Conotomics", - "phone": "870-593-3658", - "email": "faith@conotomics.com" - }, - { - "id": 5863, - "guid": "cd1e787c-0f07-43c1-abfd-1c0072003b5a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Young", - "company": "Videobanc", - "phone": "858-567-2500", - "email": "valeria@videobanc.com" - }, - { - "id": 5864, - "guid": "1d98971d-af82-443e-b201-a00bee9d9275", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Carey", - "company": "Westtomik", - "phone": "886-540-2662", - "email": "alexa@westtomik.com" - }, - { - "id": 5865, - "guid": "cff623c2-6274-4621-bd07-f575a405c923", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Creighton", - "company": "Hypervaco", - "phone": "898-489-3225", - "email": "isabella@hypervaco.com" - }, - { - "id": 5866, - "guid": "d5f5ee1b-9c4d-4a3a-a243-fdbd2e420da9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Autumn Goodman", - "company": "Robotemplate", - "phone": "884-435-2378", - "email": "autumn@robotemplate.com" - }, - { - "id": 5867, - "guid": "c258bbc0-9f45-449e-8dcf-55eb4d6df8ef", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna White", - "company": "OpKeycomm", - "phone": "881-550-2380", - "email": "brianna@opkeycomm.com" - }, - { - "id": 5868, - "guid": "4954bae0-f081-4747-bd9c-da7f839677bd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Smith", - "company": "Openserve", - "phone": "807-464-3499", - "email": "isabella@openserve.com" - }, - { - "id": 5869, - "guid": "69ff89ac-ad4e-4f3d-afe5-07c8d2d7fa23", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Oldridge", - "company": "Systheon", - "phone": "872-534-2084", - "email": "ariana@systheon.com" - }, - { - "id": 5870, - "guid": "23284958-6854-4fb6-b010-b782981f28b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Webster", - "company": "iQualcar", - "phone": "811-460-2577", - "email": "bella@iqualcar.com" - }, - { - "id": 5871, - "guid": "300607e7-f9b3-4b37-a3e0-1e283b02140c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ella Watson", - "company": "eSteganoergy", - "phone": "892-530-2387", - "email": "ella@esteganoergy.com" - }, - { - "id": 5872, - "guid": "ed301c47-8492-45e3-a568-9be76b6861f6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Gilson", - "company": "Systheon", - "phone": "849-466-3845", - "email": "bailey@systheon.com" - }, - { - "id": 5873, - "guid": "7a8f01db-416c-4545-ae3c-9c93345ca70d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Natalie Goldman", - "company": "SysUSA", - "phone": "887-590-3572", - "email": "natalie@sysusa.com" - }, - { - "id": 5874, - "guid": "3000d394-bcf6-453f-87c0-3922ded9c660", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Gilson", - "company": "eSteganoergy", - "phone": "840-569-2546", - "email": "amelia@esteganoergy.com" - }, - { - "id": 5875, - "guid": "1c360ab2-97c8-441b-a011-dc0ac54ed050", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Thorndike", - "company": "Aluco", - "phone": "812-481-3191", - "email": "kaylee@aluco.com" - }, - { - "id": 5876, - "guid": "d32a03b3-45a0-4ade-9725-d5b52c9f0752", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Evelyn Miln", - "company": "Allnet", - "phone": "866-429-2090", - "email": "evelyn@allnet.com" - }, - { - "id": 5877, - "guid": "82f64118-4ec9-4e1c-8797-789da6c94462", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Sheldon", - "company": "iOptystix", - "phone": "840-428-3312", - "email": "aubrey@ioptystix.com" - }, - { - "id": 5878, - "guid": "902afa77-1ba3-4385-aa7b-e207a54da494", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla White", - "company": "SysUSA", - "phone": "811-549-2039", - "email": "kayla@sysusa.com" - }, - { - "id": 5879, - "guid": "a55ea928-f48c-48be-9d2f-dc42682653b8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Nelson", - "company": "Pacwest", - "phone": "810-493-3280", - "email": "anna@pacwest.com" - }, - { - "id": 5880, - "guid": "b8a68199-103b-48ee-bd0c-6dde8ab6e7c4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Hancock", - "company": "Pacwest", - "phone": "823-548-2219", - "email": "mariah@pacwest.com" - }, - { - "id": 5881, - "guid": "e7de7f10-ac80-48cd-96fb-b0bd9051b81a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Evelyn Adamson", - "company": "Indisco", - "phone": "809-589-2888", - "email": "evelyn@indisco.com" - }, - { - "id": 5882, - "guid": "2c7624ae-f19a-4a52-8434-7f947eea8b80", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Morrison", - "company": "Unconix", - "phone": "855-467-3644", - "email": "morgan@unconix.com" - }, - { - "id": 5883, - "guid": "2993f7bb-7df8-4804-92b9-8b1039629a4e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Andrea Mercer", - "company": "Enlogia", - "phone": "832-464-3332", - "email": "andrea@enlogia.com" - }, - { - "id": 5884, - "guid": "3f6aff59-f0f5-446d-8a95-3994767fb4a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Hardman", - "company": "Fibrotopia", - "phone": "821-585-3354", - "email": "olivia@fibrotopia.com" - }, - { - "id": 5885, - "guid": "eada161f-0bf4-4e32-8dff-dcfe5f167439", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Michaelson", - "company": "Robotomic", - "phone": "818-476-3327", - "email": "allison@robotomic.com" - }, - { - "id": 5886, - "guid": "713d37d7-7189-458f-9a96-c951356140db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Walkman", - "company": "Unconix", - "phone": "864-566-2496", - "email": "emily@unconix.com" - }, - { - "id": 5887, - "guid": "7278acf5-6e29-47f9-9614-c8c8e5045c23", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Gibbs", - "company": "Jamconik", - "phone": "878-428-3793", - "email": "mia@jamconik.com" - }, - { - "id": 5888, - "guid": "1cd7ba29-c099-439d-aa1e-f5078f1086ac", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Ogden", - "company": "Allnet", - "phone": "899-595-2386", - "email": "aubrey@allnet.com" - }, - { - "id": 5889, - "guid": "09b370df-d9dc-46bc-b1ac-b62676ff3714", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Davidson", - "company": "Superscope", - "phone": "876-558-2575", - "email": "ella@superscope.com" - }, - { - "id": 5890, - "guid": "49affe19-ba09-4e55-a1d4-eff4e539a9de", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Wallace", - "company": "Teratopia", - "phone": "834-458-3201", - "email": "emily@teratopia.com" - }, - { - "id": 5891, - "guid": "9794ee07-92a5-49d8-ba5f-7afcfe9c55e9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Carroll", - "company": "iQualcar", - "phone": "808-483-2846", - "email": "olivia@iqualcar.com" - }, - { - "id": 5892, - "guid": "a772f3ba-a38a-4683-95c3-52f11520c4be", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Brooks", - "company": "iQualcar", - "phone": "872-427-3027", - "email": "vanessa@iqualcar.com" - }, - { - "id": 5893, - "guid": "22b99b85-e964-48be-bc09-1c98376d3c6b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brianna Cramer", - "company": "Rapigrafix", - "phone": "876-590-2616", - "email": "brianna@rapigrafix.com" - }, - { - "id": 5894, - "guid": "2e010a78-3606-4a71-948f-4c129ffb9320", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Watson", - "company": "Pacwest", - "phone": "857-462-3186", - "email": "kimberly@pacwest.com" - }, - { - "id": 5895, - "guid": "ce3b05c3-6ec6-4b47-95a0-091684fbe84d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Miln", - "company": "iQualcar", - "phone": "866-537-2604", - "email": "lily@iqualcar.com" - }, - { - "id": 5896, - "guid": "5743deb4-c331-4dae-afbc-7d122ed69074", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Abigail Wallace", - "company": "Techtron", - "phone": "845-459-2162", - "email": "abigail@techtron.com" - }, - { - "id": 5897, - "guid": "163129c6-d496-4898-8c83-ffbea10c4473", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Hodges", - "company": "Teknoplexon", - "phone": "893-564-2159", - "email": "riley@teknoplexon.com" - }, - { - "id": 5898, - "guid": "5471ce4a-434c-4dcf-bfe3-c1538a5c0cfe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Claire Galbraith", - "company": "US Omnigraphik", - "phone": "819-586-3792", - "email": "claire@us omnigraphik.com" - }, - { - "id": 5899, - "guid": "a8b0107c-5407-43ed-8b4a-2612e639c429", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ava Young", - "company": "Robocomm", - "phone": "886-520-3678", - "email": "ava@robocomm.com" - }, - { - "id": 5900, - "guid": "8c65a756-16e5-4474-8aeb-6b951ff51fe3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Goldman", - "company": "RoboAerlogix", - "phone": "840-469-2809", - "email": "rachel@roboaerlogix.com" - }, - { - "id": 5901, - "guid": "6609a2d2-a1d5-4d03-bae7-5d8d035a6eab", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Adamson", - "company": "eSteganoergy", - "phone": "839-441-2593", - "email": "victoria@esteganoergy.com" - }, - { - "id": 5902, - "guid": "dd1025d0-6ffd-42a7-ba67-f6cba27786be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Oldman", - "company": "Aluco", - "phone": "868-561-3205", - "email": "olivia@aluco.com" - }, - { - "id": 5903, - "guid": "83e5d204-736d-49c2-80fa-07ba0c3f2ae3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Miers", - "company": "Navivacs", - "phone": "890-440-3761", - "email": "camila@navivacs.com" - }, - { - "id": 5904, - "guid": "222b8e86-8abc-484d-8767-292bb973cf26", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Audrey White", - "company": "Unconix", - "phone": "839-490-3003", - "email": "audrey@unconix.com" - }, - { - "id": 5905, - "guid": "4d3b5bd2-d1b6-4c85-bd62-d1b825d8a140", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Adamson", - "company": "Vencom", - "phone": "889-503-3060", - "email": "khloe@vencom.com" - }, - { - "id": 5906, - "guid": "78109c69-808c-48cc-97f0-cff183bb6f33", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Gilmore", - "company": "Skydata", - "phone": "868-406-2419", - "email": "lillian@skydata.com" - }, - { - "id": 5907, - "guid": "9b119a02-47a8-4711-bc5d-dfb8d21bf7cd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Mercer", - "company": "Hypervaco", - "phone": "860-520-2976", - "email": "sydney@hypervaco.com" - }, - { - "id": 5908, - "guid": "f927f4d0-56e9-4818-84f3-6bcfd77fd7a5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Nash", - "company": "Orthosoft", - "phone": "846-414-2408", - "email": "mia@orthosoft.com" - }, - { - "id": 5909, - "guid": "552f9253-fc56-4099-8c39-798356e86c0a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Brown", - "company": "SysVenamerica", - "phone": "865-523-2384", - "email": "kaitlyn@sysvenamerica.com" - }, - { - "id": 5910, - "guid": "86cb2853-733a-4ed0-93ad-4f3af9720f97", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Hamphrey", - "company": "Vencom", - "phone": "880-445-3295", - "email": "anna@vencom.com" - }, - { - "id": 5911, - "guid": "e51c1d8c-a952-48b5-bcdb-df20dd77f996", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Oldman", - "company": "Mescaridic", - "phone": "864-563-4000", - "email": "amelia@mescaridic.com" - }, - { - "id": 5912, - "guid": "5a651050-14e9-48b9-977a-cbb7e86627cf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Hodges", - "company": "OpKeycomm", - "phone": "896-569-3860", - "email": "ella@opkeycomm.com" - }, - { - "id": 5913, - "guid": "8bc63d5b-2df7-4150-a31b-72fbc9fb3558", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Chapman", - "company": "Mescatron", - "phone": "821-415-2235", - "email": "jessica@mescatron.com" - }, - { - "id": 5914, - "guid": "1401654a-8fa8-4577-a022-ed4b26f52bd1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Gilmore", - "company": "Hypervaco", - "phone": "850-481-3065", - "email": "alexandra@hypervaco.com" - }, - { - "id": 5915, - "guid": "79c5da5c-b0ac-464f-9f67-fa6fbdac5fde", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Carroll", - "company": "Proline", - "phone": "890-428-2982", - "email": "sydney@proline.com" - }, - { - "id": 5916, - "guid": "c427a613-a9f8-4fb5-8d3e-9a43691a2b5a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Gustman", - "company": "Interliant", - "phone": "858-551-2926", - "email": "amelia@interliant.com" - }, - { - "id": 5917, - "guid": "e7406461-4d98-4604-b165-6da6d0a2ca77", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aubrey Ogden", - "company": "Netseco", - "phone": "872-541-3877", - "email": "aubrey@netseco.com" - }, - { - "id": 5918, - "guid": "b441b203-0bc4-4f01-8f57-cfc0df413744", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Wainwright", - "company": "Ameritron", - "phone": "867-548-2763", - "email": "madeline@ameritron.com" - }, - { - "id": 5919, - "guid": "86e57c84-350b-47a0-95a2-5b42fb062df6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah WifKinson", - "company": "Unconix", - "phone": "816-496-3822", - "email": "leah@unconix.com" - }, - { - "id": 5920, - "guid": "00360aba-728e-4176-844d-ad37c66e224b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Oliver", - "company": "Genland", - "phone": "807-556-3562", - "email": "molly@genland.com" - }, - { - "id": 5921, - "guid": "b8c46719-5058-4ea9-b293-7696644a15e2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Creighton", - "company": "Syssoft", - "phone": "841-500-2348", - "email": "gabrielle@syssoft.com" - }, - { - "id": 5922, - "guid": "8f86eeda-ae5b-4376-a9ef-71e49d14d490", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Adamson", - "company": "Polytheon", - "phone": "849-414-3051", - "email": "katherine@polytheon.com" - }, - { - "id": 5923, - "guid": "1bcc3493-2cc6-4e0a-98da-0efc2baf48a6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Michaelson", - "company": "iOptystix", - "phone": "860-571-2800", - "email": "nevaeh@ioptystix.com" - }, - { - "id": 5924, - "guid": "fec0ff6e-48b9-47d3-9072-917a205aaa54", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh WifKinson", - "company": "Unconix", - "phone": "875-507-3838", - "email": "nevaeh@unconix.com" - }, - { - "id": 5925, - "guid": "827014a3-bc1b-4bf2-89c7-60eb5b1c98ec", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Crossman", - "company": "Generola", - "phone": "869-596-2243", - "email": "maya@generola.com" - }, - { - "id": 5926, - "guid": "afc227fe-7972-4212-b91f-f4acacdd900d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Sherlock", - "company": "US Omnigraphik", - "phone": "852-543-3882", - "email": "lily@us omnigraphik.com" - }, - { - "id": 5927, - "guid": "a035956c-a4e2-4313-8fbd-9a21bd9b7912", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Daniels", - "company": "eEyetanic", - "phone": "862-448-3384", - "email": "madelyn@eeyetanic.com" - }, - { - "id": 5928, - "guid": "03f230c3-8569-4051-a6b4-bfba2ed2a32e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Charlson", - "company": "Nanobanc", - "phone": "809-418-3590", - "email": "melanie@nanobanc.com" - }, - { - "id": 5929, - "guid": "26d70b1d-3a0f-4d30-b66a-f4e373a3d68c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Brickman", - "company": "Unconix", - "phone": "822-541-2949", - "email": "samantha@unconix.com" - }, - { - "id": 5930, - "guid": "78c1176a-56ed-43e2-a899-d10f15d585a9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Murphy", - "company": "US Omnigraphik", - "phone": "853-448-2491", - "email": "sophie@us omnigraphik.com" - }, - { - "id": 5931, - "guid": "e0541bfe-ff13-49c3-a7ab-1837b2d1519d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Young", - "company": "Teraserv", - "phone": "888-438-2160", - "email": "makayla@teraserv.com" - }, - { - "id": 5932, - "guid": "c72ea8e1-78d2-4ee3-97e8-0d6571c14309", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabelle Hamphrey", - "company": "Pericenta", - "phone": "813-589-2531", - "email": "isabelle@pericenta.com" - }, - { - "id": 5933, - "guid": "bfd90cda-7df6-4ba4-addd-138d0432579a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Wallace", - "company": "Jamconik", - "phone": "893-506-2757", - "email": "ashley@jamconik.com" - }, - { - "id": 5934, - "guid": "d7115680-58f1-4cab-8879-4a43c7d76e5a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna White", - "company": "Steganoconiche", - "phone": "866-479-3073", - "email": "anna@steganoconiche.com" - }, - { - "id": 5935, - "guid": "9b7d9529-fc5b-4bb2-9007-ee0f2073a329", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Wainwright", - "company": "Xeicon", - "phone": "860-511-3818", - "email": "alexis@xeicon.com" - }, - { - "id": 5936, - "guid": "05c64c39-0328-411d-a8b5-1792d1cb6c48", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Fulton", - "company": "Teraserv", - "phone": "834-538-3505", - "email": "evelyn@teraserv.com" - }, - { - "id": 5937, - "guid": "3e4cc7fa-315a-41cd-aff7-18f3acbda12b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Adamson", - "company": "Jamrola", - "phone": "816-586-3048", - "email": "emily@jamrola.com" - }, - { - "id": 5938, - "guid": "7763fd05-ac73-4fad-bafd-3572903bb9a6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Winter", - "company": "InfoAirway", - "phone": "838-441-2068", - "email": "trinity@infoairway.com" - }, - { - "id": 5939, - "guid": "891cbe50-0f1e-4600-9111-4bf132b218f6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Timmons", - "company": "Openserve", - "phone": "804-547-3374", - "email": "melanie@openserve.com" - }, - { - "id": 5940, - "guid": "aa82e612-26cb-4180-8726-8b0fd8679f1f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Oswald", - "company": "US Infratouch", - "phone": "878-447-3483", - "email": "elizabeth@us infratouch.com" - }, - { - "id": 5941, - "guid": "684267af-8994-4d04-bfb2-7201eb588769", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Charlson", - "company": "Qualserve", - "phone": "810-434-3968", - "email": "chloe@qualserve.com" - }, - { - "id": 5942, - "guid": "553fb962-cdc4-4db4-96c3-50d8be5aae3e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Neal", - "company": "Navivacs", - "phone": "878-437-2027", - "email": "arianna@navivacs.com" - }, - { - "id": 5943, - "guid": "5bc4a8d2-6bca-4615-a672-6ed188602c6e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Miln", - "company": "Cryptotegrity", - "phone": "838-487-2449", - "email": "valeria@cryptotegrity.com" - }, - { - "id": 5944, - "guid": "b3a046c1-e1ce-4a2b-9cf0-f3a0990ff3a0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Hardman", - "company": "Genland", - "phone": "884-571-2764", - "email": "emily@genland.com" - }, - { - "id": 5945, - "guid": "c9e52d51-f94d-4e23-9638-c3ff779b8c9f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Carey", - "company": "Keytheon", - "phone": "806-490-3568", - "email": "chloe@keytheon.com" - }, - { - "id": 5946, - "guid": "4e02d9c7-504f-4906-bfa8-93f1a3f14e8f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Audrey Gardner", - "company": "Fibrotouch", - "phone": "829-445-3197", - "email": "audrey@fibrotouch.com" - }, - { - "id": 5947, - "guid": "85280e36-00df-47ec-aca0-5b7f634cc2ec", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Gerald", - "company": "Skydata", - "phone": "834-468-3026", - "email": "allison@skydata.com" - }, - { - "id": 5948, - "guid": "54e81df0-30d0-4e21-bf01-3cdd2a27d257", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Webster", - "company": "Superscope", - "phone": "824-544-3690", - "email": "julia@superscope.com" - }, - { - "id": 5949, - "guid": "3cf1d45e-5918-4210-9fc5-8de24315a30b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Daniels", - "company": "Orthomedia", - "phone": "889-482-3665", - "email": "sophie@orthomedia.com" - }, - { - "id": 5950, - "guid": "ee48388b-40f6-4dd1-b362-829381c5a4d9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Fisher", - "company": "Steganoconiche", - "phone": "896-489-3729", - "email": "leah@steganoconiche.com" - }, - { - "id": 5951, - "guid": "45bb11d1-36e0-4262-ac09-cfc43b729dfa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia Chesterton", - "company": "Generola", - "phone": "896-501-3079", - "email": "mia@generola.com" - }, - { - "id": 5952, - "guid": "79eb7b8f-5241-4e2a-a166-a4a7de78ee2f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Day", - "company": "Jamconik", - "phone": "821-408-3622", - "email": "angelina@jamconik.com" - }, - { - "id": 5953, - "guid": "70999298-80ca-44be-8565-06411a14a102", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Campbell", - "company": "Keytheon", - "phone": "806-445-2562", - "email": "isabella@keytheon.com" - }, - { - "id": 5954, - "guid": "2881daa7-e67d-453a-848c-1f1405403eee", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Ogden", - "company": "Interliant", - "phone": "828-458-2295", - "email": "charlotte@interliant.com" - }, - { - "id": 5955, - "guid": "1c1f47d4-34f9-4d0e-a372-69fdb5cfb457", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Calhoun", - "company": "Cryptotegrity", - "phone": "872-549-3258", - "email": "abigail@cryptotegrity.com" - }, - { - "id": 5956, - "guid": "1e0e109b-ed4b-425c-b7cd-a14ccca44061", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Wainwright", - "company": "Netseco", - "phone": "801-545-2625", - "email": "katherine@netseco.com" - }, - { - "id": 5957, - "guid": "f347ec81-830c-4c39-bd28-6688c09db5e9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Brickman", - "company": "Indisco", - "phone": "860-449-3492", - "email": "katherine@indisco.com" - }, - { - "id": 5958, - "guid": "08e5beea-b5d5-4efc-965c-3ddfb6babf92", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Bush", - "company": "Indisco", - "phone": "861-488-2149", - "email": "avery@indisco.com" - }, - { - "id": 5959, - "guid": "15552522-f741-4c79-b05b-6a7c55137006", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Fisher", - "company": "Teratopia", - "phone": "896-498-3706", - "email": "melanie@teratopia.com" - }, - { - "id": 5960, - "guid": "ef222e69-24fb-416e-a720-73c62bb5f6c8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Brickman", - "company": "Fibrotouch", - "phone": "819-540-3541", - "email": "emma@fibrotouch.com" - }, - { - "id": 5961, - "guid": "52debf47-c4d6-4876-a203-ec3dbb31a492", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Oswald", - "company": "Openserve", - "phone": "806-476-2128", - "email": "paige@openserve.com" - }, - { - "id": 5962, - "guid": "854b0952-5c40-4e17-b740-5d45edd2bcc1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Gibbs", - "company": "Technogra", - "phone": "800-444-3042", - "email": "destiny@technogra.com" - }, - { - "id": 5963, - "guid": "98a2294f-3199-49cd-b8fa-54ebaa84c663", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Milton", - "company": "Thermotomic", - "phone": "811-450-3337", - "email": "zoe@thermotomic.com" - }, - { - "id": 5964, - "guid": "eafc4295-6bf1-40cd-b1dc-933ef1a2c172", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Thorndike", - "company": "US Omnigraphik", - "phone": "875-593-2834", - "email": "ashley@us omnigraphik.com" - }, - { - "id": 5965, - "guid": "2e6406a5-a61d-4ccc-8779-83a78f7928c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Wayne", - "company": "Infragraph", - "phone": "807-405-3246", - "email": "brooke@infragraph.com" - }, - { - "id": 5966, - "guid": "fb69f66e-ac0c-4382-9e2b-501671ccd276", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Hancock", - "company": "Transtouch", - "phone": "823-580-2930", - "email": "zoey@transtouch.com" - }, - { - "id": 5967, - "guid": "0570c145-c8f4-4479-aa50-e009efe22c8b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Timmons", - "company": "Fibroserve", - "phone": "838-446-3946", - "email": "addison@fibroserve.com" - }, - { - "id": 5968, - "guid": "7ac68b27-9751-4629-ac1a-435637905b56", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Gerald", - "company": "Unconix", - "phone": "882-477-2257", - "email": "sydney@unconix.com" - }, - { - "id": 5969, - "guid": "f2bc65ea-f0a6-4c96-b976-d06a96f115c4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Galbraith", - "company": "Inridium", - "phone": "841-569-3393", - "email": "molly@inridium.com" - }, - { - "id": 5970, - "guid": "d6597d58-a3c7-48b4-82c9-c01130718a21", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Oldman", - "company": "Fibroserve", - "phone": "836-456-2908", - "email": "audrey@fibroserve.com" - }, - { - "id": 5971, - "guid": "25084ce6-7314-4d41-bf65-9a74fbbe584c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Gerald", - "company": "Fibrotouch", - "phone": "850-445-2604", - "email": "kylie@fibrotouch.com" - }, - { - "id": 5972, - "guid": "2147d3f3-ae18-4d5c-9e18-fa2bc33d6e22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Vance", - "company": "Thermotomic", - "phone": "853-502-3838", - "email": "trinity@thermotomic.com" - }, - { - "id": 5973, - "guid": "b693e975-91c3-4318-a533-9556e96f574a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth WifKinson", - "company": "Entcast", - "phone": "825-571-2774", - "email": "elizabeth@entcast.com" - }, - { - "id": 5974, - "guid": "381bb758-0fea-49be-8f4b-f1008d2b26a1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Cook", - "company": "Allnet", - "phone": "803-410-3284", - "email": "emily@allnet.com" - }, - { - "id": 5975, - "guid": "ded639f7-eac5-4bc7-ae84-95a91b5c5259", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Waller", - "company": "Anagraph", - "phone": "868-566-3412", - "email": "ashley@anagraph.com" - }, - { - "id": 5976, - "guid": "4f2b9149-ca37-40cc-9571-dc5553b81d82", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Cook", - "company": "eEyetanic", - "phone": "810-437-2753", - "email": "isabella@eeyetanic.com" - }, - { - "id": 5977, - "guid": "5cf24025-06da-47c4-91bb-5c517fe0bb44", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Haig", - "company": "Techtron", - "phone": "815-522-3506", - "email": "lillian@techtron.com" - }, - { - "id": 5978, - "guid": "2d1e129e-1e56-4b46-b49a-e023f251cf56", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Gerald", - "company": "Westgate", - "phone": "861-504-3594", - "email": "taylor@westgate.com" - }, - { - "id": 5979, - "guid": "267197d6-7e85-45ab-b50b-4be0220f44d9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Watson", - "company": "Multitiqua", - "phone": "868-479-3594", - "email": "khloe@multitiqua.com" - }, - { - "id": 5980, - "guid": "046071f6-33dd-4a77-813d-85cb1106a776", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Sherlock", - "company": "Genland", - "phone": "813-509-2177", - "email": "abigail@genland.com" - }, - { - "id": 5981, - "guid": "01e36fa3-8791-44cd-ad9f-b683405d3f66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Goldman", - "company": "Polytheon", - "phone": "841-470-3210", - "email": "andrea@polytheon.com" - }, - { - "id": 5982, - "guid": "ac924f5b-3754-4fe8-a1bd-f63d89093eb4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Otis", - "company": "Polytheon", - "phone": "826-589-3442", - "email": "alexa@polytheon.com" - }, - { - "id": 5983, - "guid": "7dfc3a51-f946-4483-9680-9b0aef78067c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Goodman", - "company": "Openserve", - "phone": "842-426-3830", - "email": "faith@openserve.com" - }, - { - "id": 5984, - "guid": "3b7af4a7-f725-48a3-90d9-01b9393be5e4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Milton", - "company": "Vencom", - "phone": "855-549-2536", - "email": "hannah@vencom.com" - }, - { - "id": 5985, - "guid": "c96418f3-3cc8-46f9-879b-7d6b6a21e083", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Day", - "company": "Thermotomic", - "phone": "849-550-3777", - "email": "andrea@thermotomic.com" - }, - { - "id": 5986, - "guid": "f19e7175-2f73-487a-8af1-1d2edbeb547b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke White", - "company": "Teknoplexon", - "phone": "808-411-2700", - "email": "brooke@teknoplexon.com" - }, - { - "id": 5987, - "guid": "dca586ac-5a56-4957-ae23-7f3373cc5c6f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Wainwright", - "company": "Dynarama", - "phone": "836-509-3231", - "email": "alexis@dynarama.com" - }, - { - "id": 5988, - "guid": "1538f2fe-8db4-4b80-98fa-2745c2d92f1b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Gerald", - "company": "Ventanium", - "phone": "879-482-3994", - "email": "lillian@ventanium.com" - }, - { - "id": 5989, - "guid": "6b9df824-451b-478d-ad3b-bf10f57dfae7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison Thorndike", - "company": "Openserve", - "phone": "822-533-3186", - "email": "addison@openserve.com" - }, - { - "id": 5990, - "guid": "3eed0568-cb72-408c-8990-8f2008ef057e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Bush", - "company": "InfoAirway", - "phone": "832-509-2925", - "email": "hannah@infoairway.com" - }, - { - "id": 5991, - "guid": "5fe8c444-1b2b-4f23-a770-c9691ebe2f0d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Chandter", - "company": "Robotomic", - "phone": "816-444-3667", - "email": "destiny@robotomic.com" - }, - { - "id": 5992, - "guid": "2cfc9506-16a2-4e52-94bc-bb850cb7d8b2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Oldman", - "company": "Infragraph", - "phone": "824-571-2064", - "email": "savannah@infragraph.com" - }, - { - "id": 5993, - "guid": "800c5988-d65a-4fe2-9d74-7ffb7540a2f9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Gibbs", - "company": "OpKeycomm", - "phone": "870-442-2630", - "email": "claire@opkeycomm.com" - }, - { - "id": 5994, - "guid": "0216a64f-dc6c-4701-aea5-a077f4c1c374", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Brown", - "company": "Techtron", - "phone": "827-594-2918", - "email": "faith@techtron.com" - }, - { - "id": 5995, - "guid": "379fb21a-b376-4feb-8245-31db2270f9fc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Mercer", - "company": "InfoAirway", - "phone": "844-518-2808", - "email": "sophia@infoairway.com" - }, - { - "id": 5996, - "guid": "7ae95799-c8e0-45ba-8905-b90b9f544c34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Abigail Cramer", - "company": "OpKeycomm", - "phone": "880-518-3567", - "email": "abigail@opkeycomm.com" - }, - { - "id": 5997, - "guid": "328a32e6-fe6f-4830-a922-4d74c11e40af", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Goodman", - "company": "Unologic", - "phone": "854-430-2531", - "email": "mya@unologic.com" - }, - { - "id": 5998, - "guid": "2c7fcea7-b7aa-4ba0-a60c-2075bb8e499d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Miln", - "company": "Xeicon", - "phone": "876-421-2023", - "email": "sophie@xeicon.com" - }, - { - "id": 5999, - "guid": "d6ef0d1c-5eee-4d71-bf11-6398f6a3503a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica White", - "company": "Ameritron", - "phone": "872-403-3527", - "email": "jessica@ameritron.com" - }, - { - "id": 6000, - "guid": "41a43466-2d9d-4b94-ae1b-ab12b2a55191", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Turner", - "company": "iOptystix", - "phone": "890-546-2226", - "email": "bella@ioptystix.com" - }, - { - "id": 6001, - "guid": "c700d6d1-c61a-4d7c-baa9-48f60cf9a3db", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Mercer", - "company": "RoboAerlogix", - "phone": "842-426-3774", - "email": "grace@roboaerlogix.com" - }, - { - "id": 6002, - "guid": "317b20bc-080b-47ca-8321-102d055fde48", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Adamson", - "company": "Truetomic", - "phone": "828-565-2500", - "email": "melanie@truetomic.com" - }, - { - "id": 6003, - "guid": "fea34ea6-7a89-4817-8798-a4bef4059079", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexa Gardner", - "company": "Teratopia", - "phone": "889-406-3311", - "email": "alexa@teratopia.com" - }, - { - "id": 6004, - "guid": "6fbd55d3-401a-44ee-8b75-c1871b04a039", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Morrison", - "company": "iQualcar", - "phone": "822-507-3228", - "email": "avery@iqualcar.com" - }, - { - "id": 6005, - "guid": "baa4ecc9-9218-4352-9863-c7dcb355d10a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Freeman", - "company": "Orthosoft", - "phone": "836-481-3174", - "email": "isabelle@orthosoft.com" - }, - { - "id": 6006, - "guid": "689f06d3-46ea-4519-bb52-8f32180f1056", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Haig", - "company": "Pericenta", - "phone": "869-401-3548", - "email": "kaylee@pericenta.com" - }, - { - "id": 6007, - "guid": "c9186a4c-1549-44de-bf22-1200d0c9bbb7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Gilmore", - "company": "Titanigraf", - "phone": "893-518-3871", - "email": "kayla@titanigraf.com" - }, - { - "id": 6008, - "guid": "d230975b-8b99-4f69-be30-a6cc6c691628", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Miln", - "company": "Airdyne", - "phone": "805-461-3628", - "email": "gabriella@airdyne.com" - }, - { - "id": 6009, - "guid": "b76c28f2-1b8e-4482-8a48-fa0be68c1461", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Hawkins", - "company": "Fibrotouch", - "phone": "812-454-2177", - "email": "bailey@fibrotouch.com" - }, - { - "id": 6010, - "guid": "06f4fc6d-b6dc-4751-96f2-d285e32cf7ee", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Morrison", - "company": "Allnet", - "phone": "834-521-3132", - "email": "ella@allnet.com" - }, - { - "id": 6011, - "guid": "4eb64c8f-9e26-4a57-84db-81989ae72c80", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Osborne", - "company": "Safeagra", - "phone": "803-417-2577", - "email": "melanie@safeagra.com" - }, - { - "id": 6012, - "guid": "969abd8c-b269-438c-b921-4ade7af7c000", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Adamson", - "company": "Indisco", - "phone": "862-478-3789", - "email": "alexandra@indisco.com" - }, - { - "id": 6013, - "guid": "d1c8a07a-1bb1-4b72-86d0-1fdda5b1e8e2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Creighton", - "company": "Turbomart", - "phone": "865-431-3169", - "email": "leah@turbomart.com" - }, - { - "id": 6014, - "guid": "970062cd-d554-4f0d-8924-78fdcdc0f528", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Crossman", - "company": "Mescaridic", - "phone": "832-590-2038", - "email": "maria@mescaridic.com" - }, - { - "id": 6015, - "guid": "2e4ad455-bcde-4113-b6d1-36301e58e7fc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jocelyn Warren", - "company": "Rapigrafix", - "phone": "881-534-3460", - "email": "jocelyn@rapigrafix.com" - }, - { - "id": 6016, - "guid": "6b49d6bd-b568-4af7-96b9-e4a9cf9c4c5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Audrey Oldridge", - "company": "Robocomm", - "phone": "818-493-3000", - "email": "audrey@robocomm.com" - }, - { - "id": 6017, - "guid": "c1fa0627-4c99-4f34-a7ea-ce1f3e3cd50b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Gustman", - "company": "Mescaridic", - "phone": "857-563-3917", - "email": "khloe@mescaridic.com" - }, - { - "id": 6018, - "guid": "015d2e64-4031-4cdc-aaa3-871f42888bf4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Nelson", - "company": "Skydata", - "phone": "840-576-3249", - "email": "gianna@skydata.com" - }, - { - "id": 6019, - "guid": "ffa67495-d07a-4d26-88b0-9f4b4094cd43", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Wallace", - "company": "Infraique", - "phone": "837-423-3298", - "email": "isabella@infraique.com" - }, - { - "id": 6020, - "guid": "7c947dd5-a56f-4180-914d-f6ce55d311e0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Ogden", - "company": "Polytheon", - "phone": "816-455-3463", - "email": "molly@polytheon.com" - }, - { - "id": 6021, - "guid": "aefd8781-e405-4eef-91e9-047637aa7317", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Owen", - "company": "Westmedia", - "phone": "812-523-2022", - "email": "camila@westmedia.com" - }, - { - "id": 6022, - "guid": "feeb4bf8-c435-4064-b81c-012e3d877838", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Hardman", - "company": "Netseco", - "phone": "894-555-3462", - "email": "emma@netseco.com" - }, - { - "id": 6023, - "guid": "9529464b-34e3-4152-bbed-21c8c6af1167", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Cramer", - "company": "iQualcar", - "phone": "867-441-2806", - "email": "julia@iqualcar.com" - }, - { - "id": 6024, - "guid": "58346127-6b56-4140-9115-f2542e83f49b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Youmans", - "company": "Syssoft", - "phone": "834-417-3683", - "email": "lauren@syssoft.com" - }, - { - "id": 6025, - "guid": "a8d697b5-066c-4320-b4d7-8c06a0145628", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah WifKinson", - "company": "iOptystix", - "phone": "877-416-3856", - "email": "savannah@ioptystix.com" - }, - { - "id": 6026, - "guid": "45307c92-16da-4f2d-b123-26e7d56063ad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Neal", - "company": "Gigaura", - "phone": "847-418-3228", - "email": "kylie@gigaura.com" - }, - { - "id": 6027, - "guid": "9b834f7a-8294-48cb-b949-ac03ac66e097", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Haig", - "company": "Anaframe", - "phone": "816-472-3508", - "email": "charlotte@anaframe.com" - }, - { - "id": 6028, - "guid": "1096f2b4-04c7-4d3a-8c4c-58fbdeff3f79", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Miller", - "company": "Safeagra", - "phone": "817-432-3799", - "email": "brooklyn@safeagra.com" - }, - { - "id": 6029, - "guid": "e6173373-52ca-4f70-8384-7cdfe43e1bbb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Gill", - "company": "Safeagra", - "phone": "852-495-3176", - "email": "avery@safeagra.com" - }, - { - "id": 6030, - "guid": "f949e939-5006-4bcc-bf3e-900a274cb2e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Ward", - "company": "Vencom", - "phone": "841-454-3121", - "email": "zoey@vencom.com" - }, - { - "id": 6031, - "guid": "8d4100e1-8852-4a81-b82a-e7da6c6542a5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Haig", - "company": "Textiqua", - "phone": "818-497-2164", - "email": "brooklyn@textiqua.com" - }, - { - "id": 6032, - "guid": "9b6c64dd-6427-45ca-a570-91168a056a82", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabelle Gustman", - "company": "Teratopia", - "phone": "833-403-3225", - "email": "isabelle@teratopia.com" - }, - { - "id": 6033, - "guid": "15484c16-43d3-4c39-a42c-83d330a0064b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Andrea Brooks", - "company": "Teratopia", - "phone": "858-442-2503", - "email": "andrea@teratopia.com" - }, - { - "id": 6034, - "guid": "aaf7039d-89eb-4391-8784-5cc487feabbc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Wayne", - "company": "iSkyvaco", - "phone": "851-593-2656", - "email": "mariah@iskyvaco.com" - }, - { - "id": 6035, - "guid": "9922a74c-cd90-4179-a0e5-559de6dc3322", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Wood", - "company": "InfoAirway", - "phone": "871-484-3932", - "email": "evelyn@infoairway.com" - }, - { - "id": 6036, - "guid": "9e7f9f5f-1258-420f-936a-a157e06785f9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Molly Bush", - "company": "Ventanium", - "phone": "835-513-2347", - "email": "molly@ventanium.com" - }, - { - "id": 6037, - "guid": "60d9a825-4984-47e6-be68-14fbfef8dc4a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Calhoun", - "company": "Fibroserve", - "phone": "839-489-3986", - "email": "maya@fibroserve.com" - }, - { - "id": 6038, - "guid": "9fdc9f4a-fe28-4f4b-9f8e-d31d87b2958b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Layla Haig", - "company": "iSkyvaco", - "phone": "841-468-2954", - "email": "layla@iskyvaco.com" - }, - { - "id": 6039, - "guid": "a5a722be-acec-4403-829d-08bf53ffb998", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Neal", - "company": "Unologic", - "phone": "832-568-3351", - "email": "natalie@unologic.com" - }, - { - "id": 6040, - "guid": "f450ea1b-6ebf-4776-aeb5-50a4fc0cd74b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooklyn Gilson", - "company": "Indisco", - "phone": "859-564-3221", - "email": "brooklyn@indisco.com" - }, - { - "id": 6041, - "guid": "0761c16e-e4d7-493b-b633-10c1851f18c9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Hancock", - "company": "Mescatron", - "phone": "825-439-3683", - "email": "victoria@mescatron.com" - }, - { - "id": 6042, - "guid": "c3e7a14f-e8aa-4ccf-b227-4fc905e0a749", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Ford", - "company": "Allphysiche", - "phone": "802-499-2102", - "email": "sarah@allphysiche.com" - }, - { - "id": 6043, - "guid": "5a96c3a9-0c7f-4e8c-9621-bc63a9449430", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Carey", - "company": "Fibrotopia", - "phone": "886-457-3848", - "email": "madeline@fibrotopia.com" - }, - { - "id": 6044, - "guid": "5864cf4c-6055-466f-89e1-3a4e767809c6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Fisher", - "company": "Allnet", - "phone": "807-589-3949", - "email": "gabriella@allnet.com" - }, - { - "id": 6045, - "guid": "31a61a0c-7dc0-47fe-aeb8-e94200816aba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Hodges", - "company": "Multitiqua", - "phone": "822-495-3900", - "email": "addison@multitiqua.com" - }, - { - "id": 6046, - "guid": "63f33ec9-297f-482d-a001-c5968b8ae5a8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Creighton", - "company": "Mescaridic", - "phone": "808-420-3372", - "email": "ashley@mescaridic.com" - }, - { - "id": 6047, - "guid": "1db52c23-e876-4d77-927a-9257d053600e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney Turner", - "company": "Unconix", - "phone": "884-537-3622", - "email": "sydney@unconix.com" - }, - { - "id": 6048, - "guid": "1ee485f4-5af9-4d10-95ec-0581d3dcc5b7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Goldman", - "company": "Techtron", - "phone": "885-495-3634", - "email": "victoria@techtron.com" - }, - { - "id": 6049, - "guid": "78b0053a-b5cd-4b3f-9033-2715e4f75124", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Stanley", - "company": "iQualcar", - "phone": "860-464-2031", - "email": "maya@iqualcar.com" - }, - { - "id": 6050, - "guid": "b740ea38-ecba-4bfb-b117-f92ce4356057", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Gibbs", - "company": "Teknoplexon", - "phone": "822-430-2538", - "email": "sofia@teknoplexon.com" - }, - { - "id": 6051, - "guid": "77db99b8-c34c-45ab-a7d6-770979e37d80", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Campbell", - "company": "Sontopia", - "phone": "893-575-2266", - "email": "alexis@sontopia.com" - }, - { - "id": 6052, - "guid": "81fe5cfe-0755-4d93-bfb1-cffef9e32afc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Smith", - "company": "OpKeycomm", - "phone": "858-556-3881", - "email": "riley@opkeycomm.com" - }, - { - "id": 6053, - "guid": "7b3c8912-a8e3-46cd-bda7-880cc463e044", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maya Gardner", - "company": "InfoAirway", - "phone": "832-455-2768", - "email": "maya@infoairway.com" - }, - { - "id": 6054, - "guid": "597cba1d-254a-4489-bd4c-17d4741f67a6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Conors", - "company": "Robocomm", - "phone": "811-469-2145", - "email": "allison@robocomm.com" - }, - { - "id": 6055, - "guid": "503fab7f-27e6-4fdf-8ab0-e7114b92b182", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Otis", - "company": "US Omnigraphik", - "phone": "814-540-3373", - "email": "charlotte@us omnigraphik.com" - }, - { - "id": 6056, - "guid": "0e3a5ae9-117b-4fa4-a914-54fa0255f78a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Galbraith", - "company": "Robocomm", - "phone": "874-533-2672", - "email": "arianna@robocomm.com" - }, - { - "id": 6057, - "guid": "23329808-ba0f-4f94-9f25-f5e21d8b8cb3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Chandter", - "company": "Jamconik", - "phone": "820-561-2302", - "email": "sofia@jamconik.com" - }, - { - "id": 6058, - "guid": "3c7794f6-80e6-4a82-8a7e-baa50d490bf6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Molligan", - "company": "Truetomic", - "phone": "859-504-3628", - "email": "gabriella@truetomic.com" - }, - { - "id": 6059, - "guid": "e11046b7-5998-470b-934b-1225cc4aae8b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke WifKinson", - "company": "Inridium", - "phone": "864-548-2010", - "email": "brooke@inridium.com" - }, - { - "id": 6060, - "guid": "2b8dec9a-920d-49fa-a4eb-8dd8cb733c86", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Chapman", - "company": "Cryptotegrity", - "phone": "808-430-3294", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 6061, - "guid": "b5b2db16-5bb0-4cd5-8178-9511665a672c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sarah Higgins", - "company": "Technogra", - "phone": "857-598-3330", - "email": "sarah@technogra.com" - }, - { - "id": 6062, - "guid": "c2dd13dd-fb66-433a-be0b-8ca8f49fc1ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Clapton", - "company": "Netseco", - "phone": "854-424-3440", - "email": "leah@netseco.com" - }, - { - "id": 6063, - "guid": "f966696b-5ee9-49fd-a00f-cb08b6aa67a2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Freeman", - "company": "Systheon", - "phone": "868-581-2228", - "email": "payton@systheon.com" - }, - { - "id": 6064, - "guid": "7ead47b4-6b58-464b-9d18-08eed4dd31b1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Brickman", - "company": "Compuamerica", - "phone": "876-459-3092", - "email": "lily@compuamerica.com" - }, - { - "id": 6065, - "guid": "62ab6fab-60bb-4b58-815c-8bb930f1a1cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Otis", - "company": "Anagraph", - "phone": "823-597-3128", - "email": "aaliyah@anagraph.com" - }, - { - "id": 6066, - "guid": "56e0e56e-bdd7-42a1-bcfa-9441cbc688b3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Gilmore", - "company": "Pacwest", - "phone": "865-437-2303", - "email": "paige@pacwest.com" - }, - { - "id": 6067, - "guid": "8fd96c12-bf23-432e-b76a-491ebaba57f8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Thomson", - "company": "Allnet", - "phone": "885-600-3503", - "email": "taylor@allnet.com" - }, - { - "id": 6068, - "guid": "08aabe51-c1d4-4aab-853c-1eadb76d2d1c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Gilson", - "company": "Fibrotopia", - "phone": "803-600-2551", - "email": "audrey@fibrotopia.com" - }, - { - "id": 6069, - "guid": "8f04d373-bf35-4b67-b9c3-34e92e8f106b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Gilson", - "company": "Truegate", - "phone": "852-402-2118", - "email": "julia@truegate.com" - }, - { - "id": 6070, - "guid": "8f83e1cf-7ba4-4bf6-9b09-501f1e813b02", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Abigail Wayne", - "company": "US Infratouch", - "phone": "878-554-3815", - "email": "abigail@us infratouch.com" - }, - { - "id": 6071, - "guid": "a6f486a4-cd0c-4f7e-97f1-c65107b42311", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Watson", - "company": "Conrama", - "phone": "877-565-2609", - "email": "faith@conrama.com" - }, - { - "id": 6072, - "guid": "1826b99b-5dcf-4a60-b056-541a7af12129", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Grace Clapton", - "company": "Westmedia", - "phone": "816-517-3522", - "email": "grace@westmedia.com" - }, - { - "id": 6073, - "guid": "a7bebb4a-b323-4ae4-baea-f28526789354", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Khloe Oswald", - "company": "eEyetanic", - "phone": "851-469-3743", - "email": "khloe@eeyetanic.com" - }, - { - "id": 6074, - "guid": "65db131d-e68c-413a-be39-0f3adf492444", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Fisher", - "company": "Generola", - "phone": "864-533-2122", - "email": "caroline@generola.com" - }, - { - "id": 6075, - "guid": "91a21cda-1d1a-4a0f-a266-075eb3d5655d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Smith", - "company": "Aluco", - "phone": "808-475-2416", - "email": "khloe@aluco.com" - }, - { - "id": 6076, - "guid": "fe60ed23-1557-46a4-b88f-29a91bc95179", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Gustman", - "company": "iQualcar", - "phone": "884-416-2542", - "email": "zoey@iqualcar.com" - }, - { - "id": 6077, - "guid": "a32a6900-182c-41c8-9f34-4a8ddacb474b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Oswald", - "company": "Fibrotouch", - "phone": "804-417-2517", - "email": "molly@fibrotouch.com" - }, - { - "id": 6078, - "guid": "e5378c96-8571-435f-8a97-99fd150efde9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Goodman", - "company": "Safetrust", - "phone": "890-544-3579", - "email": "arianna@safetrust.com" - }, - { - "id": 6079, - "guid": "c62fb92a-7107-4984-8551-5e2441d5de65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Michaelson", - "company": "Thermotomic", - "phone": "846-600-2758", - "email": "alexis@thermotomic.com" - }, - { - "id": 6080, - "guid": "e47ef0ca-e7eb-463a-96c0-1084a330b592", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Anna Cramer", - "company": "Textiqua", - "phone": "820-440-2631", - "email": "anna@textiqua.com" - }, - { - "id": 6081, - "guid": "ecfeeb26-460b-4205-bede-0016b77528b1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Webster", - "company": "Allnet", - "phone": "815-474-2044", - "email": "mya@allnet.com" - }, - { - "id": 6082, - "guid": "127337d2-4e19-4785-b229-40bbdb172d6b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Abramson", - "company": "Keytheon", - "phone": "851-499-2648", - "email": "kaylee@keytheon.com" - }, - { - "id": 6083, - "guid": "8b0b908d-169d-407f-a2c3-5c8c90db4b16", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophia Davidson", - "company": "Nanobanc", - "phone": "804-489-2399", - "email": "sophia@nanobanc.com" - }, - { - "id": 6084, - "guid": "abc29715-f8ba-47ee-b5f0-a70c9107302a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Daniels", - "company": "Conrama", - "phone": "849-461-2355", - "email": "mya@conrama.com" - }, - { - "id": 6085, - "guid": "6b40bf2f-a281-48c7-9fea-ad67b08521cf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Thornton", - "company": "Raylog", - "phone": "839-457-2357", - "email": "lauren@raylog.com" - }, - { - "id": 6086, - "guid": "bd3ac91d-6dc3-496f-bded-5279b996aa38", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Wallace", - "company": "Hypervaco", - "phone": "818-528-3649", - "email": "melanie@hypervaco.com" - }, - { - "id": 6087, - "guid": "a37492b4-7ab8-4fa4-85c0-4c89619ca69e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Oldman", - "company": "Transtouch", - "phone": "899-402-2888", - "email": "emily@transtouch.com" - }, - { - "id": 6088, - "guid": "6c094442-841f-4cff-85ba-896a668a769f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Gustman", - "company": "Polytheon", - "phone": "822-480-2539", - "email": "aaliyah@polytheon.com" - }, - { - "id": 6089, - "guid": "83d6440c-5391-4d5c-8ad5-3c93135a5fd6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Charlson", - "company": "Pacwest", - "phone": "889-577-2352", - "email": "faith@pacwest.com" - }, - { - "id": 6090, - "guid": "f8a3ff5e-3623-4b00-86d9-65e1fadad54c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Milton", - "company": "Orthomedia", - "phone": "842-546-3963", - "email": "emma@orthomedia.com" - }, - { - "id": 6091, - "guid": "bf5e7689-459e-4de0-895b-0e508d2d9365", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Nelson", - "company": "Infragraph", - "phone": "877-597-2135", - "email": "hailey@infragraph.com" - }, - { - "id": 6092, - "guid": "c34850e4-5b36-4073-bf59-756f1ee6f6ec", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Stanley", - "company": "Dynarama", - "phone": "871-414-3790", - "email": "grace@dynarama.com" - }, - { - "id": 6093, - "guid": "65ac526e-90b8-4e21-9a06-6abb0cd14321", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Hailey", - "company": "Turbomart", - "phone": "874-533-3124", - "email": "evelyn@turbomart.com" - }, - { - "id": 6094, - "guid": "e12fd97b-d972-4437-9b91-9db43e5c9362", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Mercer", - "company": "Venconix", - "phone": "810-421-3373", - "email": "alyssa@venconix.com" - }, - { - "id": 6095, - "guid": "0cdba729-15d0-4677-a9eb-56a66dc9b469", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Charlson", - "company": "Generola", - "phone": "887-534-2579", - "email": "mia@generola.com" - }, - { - "id": 6096, - "guid": "98355a36-d88d-4924-af0d-61c28592252f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Haig", - "company": "Generola", - "phone": "844-587-2621", - "email": "makayla@generola.com" - }, - { - "id": 6097, - "guid": "17218822-27d9-4ed0-b430-db2bdc660a4d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis White", - "company": "Aprama", - "phone": "888-566-3403", - "email": "alexis@aprama.com" - }, - { - "id": 6098, - "guid": "e97499be-a87b-4a9d-b030-c740cfad7c3a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Thorndike", - "company": "Textiqua", - "phone": "829-453-3973", - "email": "emily@textiqua.com" - }, - { - "id": 6099, - "guid": "097efe7b-6fe2-4aa2-bdff-ff190e18dcea", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Osborne", - "company": "Airdyne", - "phone": "897-583-3848", - "email": "rachel@airdyne.com" - }, - { - "id": 6100, - "guid": "ee2b70d2-6ecb-426e-a7e7-12a973ed841f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Nash", - "company": "Genland", - "phone": "830-443-2768", - "email": "bailey@genland.com" - }, - { - "id": 6101, - "guid": "6fbd7bcb-8cce-4d6d-867f-3bcac668170e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Gate", - "company": "Systheon", - "phone": "819-419-2373", - "email": "emma@systheon.com" - }, - { - "id": 6102, - "guid": "36fe4ce0-d894-4477-ac96-8ed6f43703c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Warren", - "company": "Quintegrity", - "phone": "806-407-2339", - "email": "avery@quintegrity.com" - }, - { - "id": 6103, - "guid": "e1d10ccb-bb95-4466-aba3-b3d6c26c57a7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Freeman", - "company": "Rapigrafix", - "phone": "877-508-3974", - "email": "melanie@rapigrafix.com" - }, - { - "id": 6104, - "guid": "9d046a0a-7abe-4463-9cc9-424c57e08405", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Milton", - "company": "Robocomm", - "phone": "842-568-3528", - "email": "anna@robocomm.com" - }, - { - "id": 6105, - "guid": "0697bd45-49cb-4a5d-a31a-ff6316833c91", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Gate", - "company": "eSteganoergy", - "phone": "815-520-3947", - "email": "gianna@esteganoergy.com" - }, - { - "id": 6106, - "guid": "8d324333-4727-4499-b5e6-93a28f8c8831", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Michaelson", - "company": "Airdyne", - "phone": "870-427-3684", - "email": "sophia@airdyne.com" - }, - { - "id": 6107, - "guid": "29ac70e9-ed3f-4826-835e-160519d6c03f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Chesterton", - "company": "Xeicon", - "phone": "803-413-3225", - "email": "serenity@xeicon.com" - }, - { - "id": 6108, - "guid": "cede6527-4ec0-43b0-aba0-d86afb940e87", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Nathan", - "company": "Hypervaco", - "phone": "808-540-2237", - "email": "hannah@hypervaco.com" - }, - { - "id": 6109, - "guid": "4e3da260-2991-44c7-95cc-1a644c294c82", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Carey", - "company": "Airdyne", - "phone": "859-487-2315", - "email": "arianna@airdyne.com" - }, - { - "id": 6110, - "guid": "87196cd4-f267-4003-a37d-3c5d0dd9a29a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Oliver", - "company": "Airdyne", - "phone": "810-416-2714", - "email": "brianna@airdyne.com" - }, - { - "id": 6111, - "guid": "e09c15a0-7739-4958-9def-60017911c977", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Sherlock", - "company": "Truetomic", - "phone": "804-422-2991", - "email": "trinity@truetomic.com" - }, - { - "id": 6112, - "guid": "90cf5aef-c5e8-42b6-b352-0e1a715ede9b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Freeman", - "company": "Navivacs", - "phone": "823-556-2727", - "email": "alexis@navivacs.com" - }, - { - "id": 6113, - "guid": "f26310fb-c00f-4a5e-83db-b1f731ddda6c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Freeman", - "company": "Truegate", - "phone": "879-558-3938", - "email": "allison@truegate.com" - }, - { - "id": 6114, - "guid": "c5f2fea9-bca2-479e-820a-5f2264debb4e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Melanie Webster", - "company": "Pacwest", - "phone": "880-574-2357", - "email": "melanie@pacwest.com" - }, - { - "id": 6115, - "guid": "a5d7dd0d-55e5-4114-93a9-c6b01fb57d9a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Freeman", - "company": "eSteganoergy", - "phone": "807-415-3936", - "email": "jasmine@esteganoergy.com" - }, - { - "id": 6116, - "guid": "06b015df-ce16-489c-b645-888fcde28e27", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Day", - "company": "Technogra", - "phone": "848-514-2852", - "email": "aaliyah@technogra.com" - }, - { - "id": 6117, - "guid": "1376b2e0-44e0-4da9-bd23-e1e113b2b555", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Higgins", - "company": "Airdyne", - "phone": "890-475-3853", - "email": "grace@airdyne.com" - }, - { - "id": 6118, - "guid": "d7ac7484-b014-4458-bc4b-ffafdc1fed35", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Oswald", - "company": "Techtron", - "phone": "846-590-3230", - "email": "lily@techtron.com" - }, - { - "id": 6119, - "guid": "d5a61a74-191f-4438-b887-9248bdd70bde", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Timmons", - "company": "Indisco", - "phone": "852-433-3445", - "email": "jasmine@indisco.com" - }, - { - "id": 6120, - "guid": "66a0792c-c390-4916-9457-afc1ceefeadb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Thornton", - "company": "Safeagra", - "phone": "850-577-2302", - "email": "allison@safeagra.com" - }, - { - "id": 6121, - "guid": "edeadf23-6206-44a1-b370-cd6acfb3ef80", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Valeria Otis", - "company": "Interliant", - "phone": "890-535-3896", - "email": "valeria@interliant.com" - }, - { - "id": 6122, - "guid": "29f0554e-973a-4bd1-bace-d7d362bf81f5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Miln", - "company": "Nanobanc", - "phone": "846-467-2066", - "email": "peyton@nanobanc.com" - }, - { - "id": 6123, - "guid": "4a161e0a-653a-4f48-b38a-5f8316b7758a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Nash", - "company": "Cryptotegrity", - "phone": "853-432-2285", - "email": "layla@cryptotegrity.com" - }, - { - "id": 6124, - "guid": "33543e77-551c-4f34-804d-03dec324b1fe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Fisher", - "company": "Xeicon", - "phone": "894-449-2530", - "email": "alyssa@xeicon.com" - }, - { - "id": 6125, - "guid": "7fb08a2a-6d65-41d1-a8e0-2d40622d2501", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lily Oldridge", - "company": "Teratopia", - "phone": "895-405-2315", - "email": "lily@teratopia.com" - }, - { - "id": 6126, - "guid": "e273d87b-5ea2-4d26-ac08-7d451b7dbcf7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Thomson", - "company": "Nanobanc", - "phone": "849-483-3102", - "email": "ava@nanobanc.com" - }, - { - "id": 6127, - "guid": "e5207e0c-0e22-4175-93b7-8a71d88ba165", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Valeria Davidson", - "company": "Airdyne", - "phone": "813-509-3783", - "email": "valeria@airdyne.com" - }, - { - "id": 6128, - "guid": "fb8be7c8-6152-426c-991f-5028bc7c2805", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Thornton", - "company": "Westmedia", - "phone": "809-574-3891", - "email": "melanie@westmedia.com" - }, - { - "id": 6129, - "guid": "23c04ddf-7a73-40fb-93be-585ff8cf9bfd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Brickman", - "company": "Skydata", - "phone": "887-539-2947", - "email": "riley@skydata.com" - }, - { - "id": 6130, - "guid": "f1548e66-6a90-441f-9c22-8aa2e8351cb0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lillian Miller", - "company": "Qualserve", - "phone": "843-425-2135", - "email": "lillian@qualserve.com" - }, - { - "id": 6131, - "guid": "908815be-5c2e-422c-8aa3-2080c66ef333", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Carey", - "company": "Indisco", - "phone": "863-463-3697", - "email": "sophie@indisco.com" - }, - { - "id": 6132, - "guid": "8d8a45fd-08ee-49b5-8676-93db99d1541b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Abramson", - "company": "Teknoplexon", - "phone": "828-411-3819", - "email": "jasmine@teknoplexon.com" - }, - { - "id": 6133, - "guid": "6f8db153-a8ba-41ae-a1a6-10159a68c7fe", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Hancock", - "company": "Teratopia", - "phone": "837-579-2314", - "email": "nevaeh@teratopia.com" - }, - { - "id": 6134, - "guid": "ebd919f3-745d-4b7d-9ec6-0471da6948b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Sheldon", - "company": "Conrama", - "phone": "883-450-2386", - "email": "leah@conrama.com" - }, - { - "id": 6135, - "guid": "3686c080-5c5a-4ee8-9415-ddaeaeba2bed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Vaughan", - "company": "Westgate", - "phone": "899-592-2573", - "email": "brooke@westgate.com" - }, - { - "id": 6136, - "guid": "d19848e9-9b98-47cf-a91d-eb5a5be514f3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Gustman", - "company": "Safetrust", - "phone": "818-408-3942", - "email": "riley@safetrust.com" - }, - { - "id": 6137, - "guid": "455a5e74-df60-480a-a769-98b06aa9f8a8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Gilson", - "company": "Allnet", - "phone": "811-574-3085", - "email": "isabelle@allnet.com" - }, - { - "id": 6138, - "guid": "27dad08b-d1a1-474f-9aac-85d217f8d8f9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Sheldon", - "company": "Superscope", - "phone": "894-401-3192", - "email": "leah@superscope.com" - }, - { - "id": 6139, - "guid": "5132459b-5140-4823-9d26-e83a0e7a2a60", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Valeria Gerald", - "company": "Netseco", - "phone": "892-437-2264", - "email": "valeria@netseco.com" - }, - { - "id": 6140, - "guid": "51948d66-95b8-402f-a080-351d7db901a7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Evelyn Oliver", - "company": "Pericenta", - "phone": "800-557-3881", - "email": "evelyn@pericenta.com" - }, - { - "id": 6141, - "guid": "9372d062-bb6b-49c1-adfb-25a1c5446034", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Miller", - "company": "Celgra", - "phone": "866-418-2130", - "email": "lillian@celgra.com" - }, - { - "id": 6142, - "guid": "0e7cf7c9-b17b-49f1-aacd-443c48601742", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Turner", - "company": "Unconix", - "phone": "848-428-2062", - "email": "brooke@unconix.com" - }, - { - "id": 6143, - "guid": "e56e2dd0-3d26-47c5-9af7-23b7f5b5059e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Walkman", - "company": "Technogra", - "phone": "838-474-2884", - "email": "andrea@technogra.com" - }, - { - "id": 6144, - "guid": "b72c0f3b-19d3-4ffe-8cb5-c7b58576eed9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Charlson", - "company": "Allphysiche", - "phone": "838-509-3627", - "email": "gianna@allphysiche.com" - }, - { - "id": 6145, - "guid": "ebe9212c-913b-4b25-b5c4-da00a5ebc20a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Miller", - "company": "Entcast", - "phone": "897-407-2758", - "email": "hailey@entcast.com" - }, - { - "id": 6146, - "guid": "ac0763aa-df8f-4825-a99a-90f1a1469470", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Brown", - "company": "Navivacs", - "phone": "815-516-3169", - "email": "melanie@navivacs.com" - }, - { - "id": 6147, - "guid": "2e3b6de2-caee-455c-abfe-db72efa0003a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia WifKinson", - "company": "iSkyvaco", - "phone": "800-453-2700", - "email": "sofia@iskyvaco.com" - }, - { - "id": 6148, - "guid": "c0d472f5-cf16-4f7f-9f91-3920e775790b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Carey", - "company": "Multitiqua", - "phone": "872-405-3251", - "email": "kaylee@multitiqua.com" - }, - { - "id": 6149, - "guid": "a28b3dd4-5309-4003-bac2-53e46665c520", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Nelson", - "company": "eSteganoergy", - "phone": "893-422-2029", - "email": "maria@esteganoergy.com" - }, - { - "id": 6150, - "guid": "8e651f08-2e69-4142-8d92-d58de066d756", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Brickman", - "company": "iSkyvaco", - "phone": "820-496-2471", - "email": "eva@iskyvaco.com" - }, - { - "id": 6151, - "guid": "a1a38cc5-79d0-4cae-adcc-7a6c7c2b3991", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Conors", - "company": "Titanirola", - "phone": "833-428-2706", - "email": "caroline@titanirola.com" - }, - { - "id": 6152, - "guid": "53a05e3f-1e07-41db-aaae-5ee8ff2c78b4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Turner", - "company": "iEnland", - "phone": "843-584-2825", - "email": "olivia@ienland.com" - }, - { - "id": 6153, - "guid": "4527c9cd-41a4-438d-b16d-6878960e95f5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Watson", - "company": "Westmedia", - "phone": "842-502-2798", - "email": "aubrey@westmedia.com" - }, - { - "id": 6154, - "guid": "b19d58d4-94f7-4343-a91a-f6e0ed3c0d74", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Clapton", - "company": "Teratopia", - "phone": "811-453-3600", - "email": "bella@teratopia.com" - }, - { - "id": 6155, - "guid": "e1261b67-ad62-4f9a-9d08-94c1eab617cb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Warren", - "company": "Robocomm", - "phone": "889-593-3957", - "email": "gianna@robocomm.com" - }, - { - "id": 6156, - "guid": "29c66663-a6fa-4614-9750-0272c6864ea5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Miln", - "company": "Inridium", - "phone": "823-509-3707", - "email": "allison@inridium.com" - }, - { - "id": 6157, - "guid": "0b9e8b9f-2944-4715-8d59-1b5ae44d4b3e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Brickman", - "company": "Tekcar", - "phone": "825-545-3604", - "email": "brooke@tekcar.com" - }, - { - "id": 6158, - "guid": "292a3b8f-8f47-478e-a1a8-365818f9ac3a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Adamson", - "company": "SysVenamerica", - "phone": "896-570-3525", - "email": "genesis@sysvenamerica.com" - }, - { - "id": 6159, - "guid": "a10ad7c3-be66-4fc1-9745-53e23ff30303", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Nelson", - "company": "US Infratouch", - "phone": "886-411-3508", - "email": "ashley@us infratouch.com" - }, - { - "id": 6160, - "guid": "a31fc43d-7a61-40ff-aa50-c650dbaf271c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Nathan", - "company": "Qualserve", - "phone": "897-535-3505", - "email": "gabrielle@qualserve.com" - }, - { - "id": 6161, - "guid": "3468b919-47b5-471f-8c37-45f2af24b85d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Angelina Fulton", - "company": "Infraique", - "phone": "874-592-2284", - "email": "angelina@infraique.com" - }, - { - "id": 6162, - "guid": "d9376df8-c5fa-4b8c-b599-1a7040dbbaa3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Wayne", - "company": "Westgate", - "phone": "850-512-3375", - "email": "savannah@westgate.com" - }, - { - "id": 6163, - "guid": "428728a1-0da9-4f94-9e0b-9b0aa6e7925a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Hodges", - "company": "Venconix", - "phone": "872-407-3963", - "email": "leah@venconix.com" - }, - { - "id": 6164, - "guid": "2e29e913-2394-4365-b238-ce74c76b8807", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Miers", - "company": "Netseco", - "phone": "864-421-2416", - "email": "destiny@netseco.com" - }, - { - "id": 6165, - "guid": "4f817017-b706-4d7b-b069-cc0d349b9fb1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Abramson", - "company": "Infraique", - "phone": "825-406-3510", - "email": "kayla@infraique.com" - }, - { - "id": 6166, - "guid": "2de825f2-4cb9-44ce-97c7-0aa9499fdf65", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Carrington", - "company": "Westmedia", - "phone": "883-580-2487", - "email": "zoey@westmedia.com" - }, - { - "id": 6167, - "guid": "933b9e8b-4a5f-4d7b-8325-04794b367f32", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah Gilson", - "company": "Fibrotopia", - "phone": "867-528-2851", - "email": "mariah@fibrotopia.com" - }, - { - "id": 6168, - "guid": "cb639b0a-9118-41c4-b258-301c24adea7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Carrington", - "company": "Ventanium", - "phone": "843-447-3814", - "email": "katelyn@ventanium.com" - }, - { - "id": 6169, - "guid": "cbe23a82-12be-41cc-a99c-8cf3f07e84b3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katelyn Neal", - "company": "Qualserve", - "phone": "894-443-2790", - "email": "katelyn@qualserve.com" - }, - { - "id": 6170, - "guid": "7229a13e-f9d3-4f98-8110-ac1f9e0612be", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Olivia Owen", - "company": "Teraserv", - "phone": "840-595-3690", - "email": "olivia@teraserv.com" - }, - { - "id": 6171, - "guid": "a8f2ca78-228b-46d7-ab4e-bc324833a3d9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Thornton", - "company": "Jamrola", - "phone": "860-599-3761", - "email": "vanessa@jamrola.com" - }, - { - "id": 6172, - "guid": "10e7801f-b1f4-47d5-bc89-b260be89ccd4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Young", - "company": "Allphysiche", - "phone": "870-571-3577", - "email": "allison@allphysiche.com" - }, - { - "id": 6173, - "guid": "a8ada6fa-2076-4ff8-9e79-260ee27071a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Carter", - "company": "Syssoft", - "phone": "836-492-2094", - "email": "natalie@syssoft.com" - }, - { - "id": 6174, - "guid": "5f5395ad-bd14-4c50-a212-e2046fe14e67", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Osborne", - "company": "US Infratouch", - "phone": "850-586-3538", - "email": "gabrielle@us infratouch.com" - }, - { - "id": 6175, - "guid": "423b6c3b-8c33-456d-92c8-30fe39d1204f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Haig", - "company": "Idmax", - "phone": "897-510-3615", - "email": "samantha@idmax.com" - }, - { - "id": 6176, - "guid": "ae9902a4-2f6c-42a6-891c-69fa8be1560c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Natalie Chesterton", - "company": "Westtomik", - "phone": "898-460-3186", - "email": "natalie@westtomik.com" - }, - { - "id": 6177, - "guid": "48b57786-067f-4954-b28d-395863780c82", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Winter", - "company": "Conotomics", - "phone": "834-574-2625", - "email": "madelyn@conotomics.com" - }, - { - "id": 6178, - "guid": "0348b1fe-21f7-40c2-9969-76ae1a7dff2a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Abramson", - "company": "Fibrotopia", - "phone": "886-562-2212", - "email": "julia@fibrotopia.com" - }, - { - "id": 6179, - "guid": "64fc5b05-686b-434b-a980-47de713d1612", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Watson", - "company": "Truetomic", - "phone": "875-448-2670", - "email": "kimberly@truetomic.com" - }, - { - "id": 6180, - "guid": "109da185-e941-445b-8515-b03a382b0572", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Gerald", - "company": "Aprama", - "phone": "897-484-3519", - "email": "payton@aprama.com" - }, - { - "id": 6181, - "guid": "3a0e0797-0926-4e5c-af1e-8387f032eb7c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Youmans", - "company": "Tekcar", - "phone": "835-533-3872", - "email": "melanie@tekcar.com" - }, - { - "id": 6182, - "guid": "71dc9bf7-28f8-4643-837a-967d7c96d2ae", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Vaughan", - "company": "Videobanc", - "phone": "889-488-3339", - "email": "gianna@videobanc.com" - }, - { - "id": 6183, - "guid": "209b5f33-4f66-4ec3-8545-ea0a9d3af9cd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Galbraith", - "company": "Technogra", - "phone": "834-428-2667", - "email": "jocelyn@technogra.com" - }, - { - "id": 6184, - "guid": "b83e8a44-d128-4a06-ba04-07e84275dd42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Walkman", - "company": "Entcast", - "phone": "823-531-2736", - "email": "hannah@entcast.com" - }, - { - "id": 6185, - "guid": "6ebb44f4-ffa1-49bc-86a5-12c849826055", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Galbraith", - "company": "Robocomm", - "phone": "855-598-3226", - "email": "grace@robocomm.com" - }, - { - "id": 6186, - "guid": "23e32035-fc59-4428-8cea-9b15aeec5c8e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Camila Gardner", - "company": "Thermotomic", - "phone": "841-470-3919", - "email": "camila@thermotomic.com" - }, - { - "id": 6187, - "guid": "1c536df6-6358-41f3-976c-d7fed3db28b5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Bush", - "company": "Openserve", - "phone": "856-528-2566", - "email": "trinity@openserve.com" - }, - { - "id": 6188, - "guid": "21459788-6881-44a6-b2c6-d51bf5a0647b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Camila Charlson", - "company": "Infragraph", - "phone": "850-524-2228", - "email": "camila@infragraph.com" - }, - { - "id": 6189, - "guid": "cc4a829b-2de4-41ed-8085-548c05d2d9fc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Oswald", - "company": "Pericenta", - "phone": "898-415-3473", - "email": "zoey@pericenta.com" - }, - { - "id": 6190, - "guid": "24120894-5e8c-4d49-9205-8ec6539fd92e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mia Carrington", - "company": "Safeagra", - "phone": "899-448-3615", - "email": "mia@safeagra.com" - }, - { - "id": 6191, - "guid": "e4af081f-db08-4a3d-9816-34f5d1ec742e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Ford", - "company": "Netsystems", - "phone": "871-513-3698", - "email": "mackenzie@netsystems.com" - }, - { - "id": 6192, - "guid": "ad964fb4-2a01-4b58-89bc-a2ddc6d576a3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Hodges", - "company": "Conotomics", - "phone": "857-551-3102", - "email": "nevaeh@conotomics.com" - }, - { - "id": 6193, - "guid": "9a534041-d031-4761-81a9-4e9b363201d4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Waller", - "company": "Westtomik", - "phone": "830-520-3025", - "email": "leah@westtomik.com" - }, - { - "id": 6194, - "guid": "1190cf5a-a441-4634-bda5-4d6bc4da6dfd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Oldman", - "company": "Anagraph", - "phone": "847-402-2055", - "email": "chloe@anagraph.com" - }, - { - "id": 6195, - "guid": "fbe4bba3-a064-4ba9-a2df-598c06c56109", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Creighton", - "company": "Inridium", - "phone": "867-406-3393", - "email": "savannah@inridium.com" - }, - { - "id": 6196, - "guid": "53d8a99e-72e5-4982-8955-ae05775dafd9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Faith Campbell", - "company": "Celgra", - "phone": "879-490-3441", - "email": "faith@celgra.com" - }, - { - "id": 6197, - "guid": "be6981c7-ba6e-4fa3-b4c0-a1c63ebbdbd7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Sherlock", - "company": "Teraserv", - "phone": "802-463-2379", - "email": "valeria@teraserv.com" - }, - { - "id": 6198, - "guid": "461a67d1-2fc4-4c67-8ec8-791d01209e3e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Davidson", - "company": "Proline", - "phone": "866-467-2883", - "email": "maya@proline.com" - }, - { - "id": 6199, - "guid": "5d45500f-02ee-487f-9c2e-a11e56db7e94", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Milton", - "company": "Teratopia", - "phone": "891-418-2918", - "email": "emma@teratopia.com" - }, - { - "id": 6200, - "guid": "07cd6cc0-31e5-4b92-bfd3-4adff1007a97", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Gate", - "company": "Anaframe", - "phone": "862-561-2896", - "email": "victoria@anaframe.com" - }, - { - "id": 6201, - "guid": "e7bf27bf-1484-4b45-8da6-9b885fdd2aef", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Miers", - "company": "Westmedia", - "phone": "812-571-2801", - "email": "camila@westmedia.com" - }, - { - "id": 6202, - "guid": "4d93a477-4cf1-4dc8-ad10-e3215000170e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Vance", - "company": "Raylog", - "phone": "815-483-3764", - "email": "zoey@raylog.com" - }, - { - "id": 6203, - "guid": "6cdbe0eb-4233-4e7e-856c-e2be9b03c0a2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Hailey", - "company": "iOptystix", - "phone": "814-452-3547", - "email": "mariah@ioptystix.com" - }, - { - "id": 6204, - "guid": "d37c0406-7316-42a7-8dd6-05878ab94fff", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabriella Brooks", - "company": "Infraique", - "phone": "863-441-3747", - "email": "gabriella@infraique.com" - }, - { - "id": 6205, - "guid": "84f3e070-19c8-4d96-bd4d-c52bcf0e25c3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Michaelson", - "company": "eEyetanic", - "phone": "808-507-2719", - "email": "olivia@eeyetanic.com" - }, - { - "id": 6206, - "guid": "86def5f4-157b-476b-b7bb-f6eae854c350", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gate", - "company": "Openserve", - "phone": "803-480-2212", - "email": "lauren@openserve.com" - }, - { - "id": 6207, - "guid": "37a64073-556b-4936-bba1-a2e206639b63", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Michaelson", - "company": "Safeagra", - "phone": "853-487-3734", - "email": "samantha@safeagra.com" - }, - { - "id": 6208, - "guid": "1fa38eb9-1d11-4099-beeb-7c1a772915fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Wayne", - "company": "Multitiqua", - "phone": "847-524-2072", - "email": "samantha@multitiqua.com" - }, - { - "id": 6209, - "guid": "ffe7e24b-d974-4d81-b35f-7ce4d727fe96", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Brown", - "company": "Raylog", - "phone": "893-584-2768", - "email": "emily@raylog.com" - }, - { - "id": 6210, - "guid": "740c9857-d80d-4b48-a165-03b1e970856d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Nash", - "company": "Teraserv", - "phone": "885-524-3640", - "email": "mackenzie@teraserv.com" - }, - { - "id": 6211, - "guid": "ad0de2d8-cf7b-464d-9c00-4ff746b34c50", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Thomson", - "company": "US Omnigraphik", - "phone": "811-482-3180", - "email": "peyton@us omnigraphik.com" - }, - { - "id": 6212, - "guid": "61e1f00e-e91c-4390-9d23-ad0d00cfe082", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hailey Waller", - "company": "Conotomics", - "phone": "856-422-3131", - "email": "hailey@conotomics.com" - }, - { - "id": 6213, - "guid": "c2b5c4ea-bb08-4403-ac91-873f8554a5e8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Crossman", - "company": "Truetomic", - "phone": "849-401-3734", - "email": "zoe@truetomic.com" - }, - { - "id": 6214, - "guid": "cac940cd-bdee-4e1a-8488-23de43451952", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Ogden", - "company": "Titanirola", - "phone": "855-493-3158", - "email": "mia@titanirola.com" - }, - { - "id": 6215, - "guid": "fadfd959-9686-4486-9dbc-6ad6505490f5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Thomson", - "company": "Safetrust", - "phone": "863-445-2774", - "email": "lauren@safetrust.com" - }, - { - "id": 6216, - "guid": "3d765eca-c9b2-414d-bd3c-b8c218ca5def", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Wallace", - "company": "SysVenamerica", - "phone": "801-537-2749", - "email": "ava@sysvenamerica.com" - }, - { - "id": 6217, - "guid": "a1adb8f2-78cb-49a8-93b8-43608a1ce70c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Milton", - "company": "Allnet", - "phone": "897-591-2945", - "email": "ava@allnet.com" - }, - { - "id": 6218, - "guid": "0fcd7330-42a2-44e2-b35d-3d61b7d82870", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kimberly Gerald", - "company": "Syssoft", - "phone": "810-403-3104", - "email": "kimberly@syssoft.com" - }, - { - "id": 6219, - "guid": "a17fbb95-b150-4cfb-a103-de876a196a19", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Wallace", - "company": "Idmax", - "phone": "854-439-2436", - "email": "layla@idmax.com" - }, - { - "id": 6220, - "guid": "bbaf8f48-72ae-44a4-8726-42f5b4b5dfe7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mia Oldman", - "company": "Tekcar", - "phone": "897-471-3809", - "email": "mia@tekcar.com" - }, - { - "id": 6221, - "guid": "1d749cb3-7eca-4c33-b03c-4ee88a1aa0d2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Crossman", - "company": "Indisco", - "phone": "839-468-2067", - "email": "samantha@indisco.com" - }, - { - "id": 6222, - "guid": "4c484e1d-30bd-4407-9e6e-77828b3d24bc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Morgan Mercer", - "company": "Allnet", - "phone": "890-598-2283", - "email": "morgan@allnet.com" - }, - { - "id": 6223, - "guid": "7dfc4635-c875-43cb-8065-e9db0e18e560", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Brooks", - "company": "Conotomics", - "phone": "889-464-2564", - "email": "morgan@conotomics.com" - }, - { - "id": 6224, - "guid": "b0d33560-1dde-43d1-a3de-616a6a1dc596", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Gibbs", - "company": "Videobanc", - "phone": "840-573-3128", - "email": "eva@videobanc.com" - }, - { - "id": 6225, - "guid": "8fb57414-8bda-4ca4-b4d2-fbfbdc20aa1c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Hodges", - "company": "iOptystix", - "phone": "806-531-3540", - "email": "kimberly@ioptystix.com" - }, - { - "id": 6226, - "guid": "199047e3-a675-4031-b3fb-b9fe2e66e9a1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Hardman", - "company": "Sontopia", - "phone": "818-596-3586", - "email": "grace@sontopia.com" - }, - { - "id": 6227, - "guid": "99e419e9-6d85-4ea4-8919-9a6283dfc562", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Samantha Oliver", - "company": "Cryptotegrity", - "phone": "884-499-2822", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 6228, - "guid": "6b697dfc-b5f1-43e8-ad49-af2e5ccfe56b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Warren", - "company": "InfoAirway", - "phone": "806-405-2376", - "email": "zoey@infoairway.com" - }, - { - "id": 6229, - "guid": "6a9807e3-2d52-4f9d-a175-5021bb8e0226", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Conors", - "company": "OpKeycomm", - "phone": "886-433-3693", - "email": "autumn@opkeycomm.com" - }, - { - "id": 6230, - "guid": "0b408ea0-a41b-4e4d-b349-9aa90f6f685b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Goldman", - "company": "Netsystems", - "phone": "834-445-2462", - "email": "jessica@netsystems.com" - }, - { - "id": 6231, - "guid": "ab3db238-2033-48f8-8480-cbd19c978cf3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Wainwright", - "company": "Netseco", - "phone": "863-562-2908", - "email": "hailey@netseco.com" - }, - { - "id": 6232, - "guid": "967dfaf1-c4ee-4469-b91b-41bda54ad0a3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Warren", - "company": "Ameritron", - "phone": "871-417-2192", - "email": "abigail@ameritron.com" - }, - { - "id": 6233, - "guid": "6a913134-3983-4708-b05c-cae04a1816b2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Wood", - "company": "iQualcar", - "phone": "826-446-2712", - "email": "elizabeth@iqualcar.com" - }, - { - "id": 6234, - "guid": "cf3bb7c8-8a1c-4cdb-9bad-d23914d3b2f1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Higgins", - "company": "Idmax", - "phone": "821-442-2985", - "email": "genesis@idmax.com" - }, - { - "id": 6235, - "guid": "754e82d1-a33a-4e8b-8ff2-299dcce888e6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Fulton", - "company": "Systheon", - "phone": "888-442-3379", - "email": "jasmine@systheon.com" - }, - { - "id": 6236, - "guid": "1446eaa0-7fd9-49f7-8925-fb74d22def59", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline Galbraith", - "company": "Vencom", - "phone": "851-412-2984", - "email": "madeline@vencom.com" - }, - { - "id": 6237, - "guid": "aa084f54-80fb-4f80-a68d-6dab33bce6c9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Webster", - "company": "Polytheon", - "phone": "861-400-2432", - "email": "layla@polytheon.com" - }, - { - "id": 6238, - "guid": "0b9e4991-477b-4430-8ca6-1dc9b657dd3c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Otis", - "company": "Titanirola", - "phone": "851-600-2355", - "email": "isabella@titanirola.com" - }, - { - "id": 6239, - "guid": "5371861f-92d0-4acf-ab67-c2fcd9a312a8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Brooks", - "company": "Pericenta", - "phone": "867-477-3589", - "email": "ariana@pericenta.com" - }, - { - "id": 6240, - "guid": "42a7b1d3-5fd0-46a5-b506-5e915547264b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Gerald", - "company": "Anagraph", - "phone": "890-416-3614", - "email": "brooke@anagraph.com" - }, - { - "id": 6241, - "guid": "a2164d48-686a-415c-b78d-bc616b5a43ea", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Miln", - "company": "Keytheon", - "phone": "860-407-3675", - "email": "elizabeth@keytheon.com" - }, - { - "id": 6242, - "guid": "5b997165-3916-41c4-9f8f-751badb2af5d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooke Adamson", - "company": "Navivacs", - "phone": "857-512-2242", - "email": "brooke@navivacs.com" - }, - { - "id": 6243, - "guid": "336bf232-6789-4d74-bca8-91ffe4d44469", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Hoggarth", - "company": "Indisco", - "phone": "840-439-3331", - "email": "kylie@indisco.com" - }, - { - "id": 6244, - "guid": "5d160fc0-e498-4543-8577-5741433fc989", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gianna Thomson", - "company": "iMedconik", - "phone": "873-595-3607", - "email": "gianna@imedconik.com" - }, - { - "id": 6245, - "guid": "e8162514-6318-4ebc-ba2b-07a50a011a54", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Brown", - "company": "Robocomm", - "phone": "869-562-2591", - "email": "hannah@robocomm.com" - }, - { - "id": 6246, - "guid": "e16a4c25-9699-42c2-bab7-6b50d36732c5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Galbraith", - "company": "Robotomic", - "phone": "894-533-2440", - "email": "bailey@robotomic.com" - }, - { - "id": 6247, - "guid": "be3b3659-3c64-4b2c-ae77-fedd5d44d0bb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Clapton", - "company": "Ameritron", - "phone": "899-575-3118", - "email": "bailey@ameritron.com" - }, - { - "id": 6248, - "guid": "6e4ca54d-eb20-4485-b100-d812239c60e2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Brickman", - "company": "Enlogia", - "phone": "893-417-3870", - "email": "brooklyn@enlogia.com" - }, - { - "id": 6249, - "guid": "2c766102-b7a3-4016-b6c3-56b76e9941f6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Hoggarth", - "company": "Pericenta", - "phone": "855-482-3773", - "email": "alyssa@pericenta.com" - }, - { - "id": 6250, - "guid": "e1f62831-0bb3-428f-b90f-1ab357ebd3c1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Wainwright", - "company": "Teknoplexon", - "phone": "845-456-2003", - "email": "destiny@teknoplexon.com" - }, - { - "id": 6251, - "guid": "6847a768-0537-4176-92e9-2eb13a459837", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Sheldon", - "company": "iEnland", - "phone": "816-489-3314", - "email": "sofia@ienland.com" - }, - { - "id": 6252, - "guid": "5b8588d9-fa36-4f36-bddf-212c186216c8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Conors", - "company": "Teratopia", - "phone": "853-592-3587", - "email": "emma@teratopia.com" - }, - { - "id": 6253, - "guid": "deff5124-778c-4538-87fc-bf3722079dbe", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Higgins", - "company": "Openserve", - "phone": "838-438-2289", - "email": "lily@openserve.com" - }, - { - "id": 6254, - "guid": "ad11d376-a245-4131-9c45-46d521fe7fd6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Carter", - "company": "Orthomedia", - "phone": "853-468-2559", - "email": "ashley@orthomedia.com" - }, - { - "id": 6255, - "guid": "c4a6aa0f-c884-49ab-b54e-2cd99b59f2b6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Oldridge", - "company": "Multitiqua", - "phone": "817-525-3959", - "email": "paige@multitiqua.com" - }, - { - "id": 6256, - "guid": "60e4d2bc-a766-4053-b26d-55fa7bf537e5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe White", - "company": "Infragraph", - "phone": "832-463-2273", - "email": "khloe@infragraph.com" - }, - { - "id": 6257, - "guid": "74105648-bd65-4c91-a9c9-4a9594a1d34c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Miller", - "company": "Aprama", - "phone": "867-458-3959", - "email": "audrey@aprama.com" - }, - { - "id": 6258, - "guid": "5a1ad17f-3114-4e37-b339-191122b4f4c8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Carey", - "company": "Aluco", - "phone": "884-410-2614", - "email": "camila@aluco.com" - }, - { - "id": 6259, - "guid": "e2df319f-ee63-44b0-9145-3afdbc52257c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Molligan", - "company": "Robotemplate", - "phone": "827-575-3391", - "email": "savannah@robotemplate.com" - }, - { - "id": 6260, - "guid": "938af42b-3064-42b0-a17f-92b9fb0cecf1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Ford", - "company": "Unologic", - "phone": "821-526-2356", - "email": "payton@unologic.com" - }, - { - "id": 6261, - "guid": "73fa3b11-bf0e-4b39-985f-2e11566ded85", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Molligan", - "company": "Titanirola", - "phone": "831-561-3140", - "email": "charlotte@titanirola.com" - }, - { - "id": 6262, - "guid": "0d802382-44b4-4fb5-ba88-3bd198b5ff45", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Cramer", - "company": "Ameritron", - "phone": "829-502-2045", - "email": "kaylee@ameritron.com" - }, - { - "id": 6263, - "guid": "23946a02-c0f5-4252-bdb9-a8db945442e3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Youmans", - "company": "OpKeycomm", - "phone": "848-538-2658", - "email": "maria@opkeycomm.com" - }, - { - "id": 6264, - "guid": "e7bfc93b-2476-4b5f-8ebd-a050b58adefe", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Morrison", - "company": "Teknoplexon", - "phone": "893-598-3540", - "email": "autumn@teknoplexon.com" - }, - { - "id": 6265, - "guid": "ceec8f1b-e6ca-493c-a101-17a187aa8319", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Taylor Davidson", - "company": "Inridium", - "phone": "891-422-2390", - "email": "taylor@inridium.com" - }, - { - "id": 6266, - "guid": "ede1617e-d3ac-4bd1-a2b9-cc9a0e268551", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail White", - "company": "Xeicon", - "phone": "886-460-3216", - "email": "abigail@xeicon.com" - }, - { - "id": 6267, - "guid": "085a766f-c45b-4ed3-bf9a-799707f8116a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Wood", - "company": "eSteganoergy", - "phone": "888-470-3795", - "email": "trinity@esteganoergy.com" - }, - { - "id": 6268, - "guid": "1dfbc3b1-205b-4848-855d-d3237f5a8988", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Hawkins", - "company": "Quintegrity", - "phone": "845-439-2732", - "email": "abigail@quintegrity.com" - }, - { - "id": 6269, - "guid": "01756e38-c45d-46d3-b05d-45e12a04fdc7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Wood", - "company": "Teratopia", - "phone": "864-493-2367", - "email": "sophie@teratopia.com" - }, - { - "id": 6270, - "guid": "3bdaf336-b13a-49d1-b0d0-323e0c5fd5fd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sofia Nash", - "company": "Westtomik", - "phone": "862-518-3216", - "email": "sofia@westtomik.com" - }, - { - "id": 6271, - "guid": "4ae25bfb-d79a-4b8b-bb79-16d668c2a35c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Gilson", - "company": "Teknoplexon", - "phone": "856-472-3133", - "email": "gabrielle@teknoplexon.com" - }, - { - "id": 6272, - "guid": "0ae41d02-d283-4e2c-a190-e6ed5a52428b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Gibbs", - "company": "iOptystix", - "phone": "801-430-2058", - "email": "claire@ioptystix.com" - }, - { - "id": 6273, - "guid": "4df0d60d-d7c5-44c3-9f96-8888b7cc94e5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Carey", - "company": "Netsystems", - "phone": "850-538-3939", - "email": "lauren@netsystems.com" - }, - { - "id": 6274, - "guid": "0ae91121-3199-4aed-8da4-99061149fe12", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Ward", - "company": "Westmedia", - "phone": "890-452-3750", - "email": "lily@westmedia.com" - }, - { - "id": 6275, - "guid": "96aa600c-25a1-4952-b33b-738427e6605f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Hamphrey", - "company": "Fibroserve", - "phone": "867-414-2809", - "email": "addison@fibroserve.com" - }, - { - "id": 6276, - "guid": "7f09d567-c457-4f02-8bde-2371a487099f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Camila Campbell", - "company": "Robotemplate", - "phone": "864-585-2993", - "email": "camila@robotemplate.com" - }, - { - "id": 6277, - "guid": "3313eb90-6fc6-46ab-a528-da563ac44658", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Riley Miln", - "company": "Titanirola", - "phone": "852-577-2177", - "email": "riley@titanirola.com" - }, - { - "id": 6278, - "guid": "44b3741e-ba34-4835-a719-76345fdedcfe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Wallace", - "company": "Teratopia", - "phone": "861-547-3967", - "email": "alyssa@teratopia.com" - }, - { - "id": 6279, - "guid": "b096c2e3-00a7-483b-984a-e0563f761a86", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Ward", - "company": "Turbomart", - "phone": "801-557-2357", - "email": "zoey@turbomart.com" - }, - { - "id": 6280, - "guid": "c3c5e929-f380-45e6-b58f-67bcfc17d37b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoe Gustman", - "company": "Polytheon", - "phone": "893-527-2558", - "email": "zoe@polytheon.com" - }, - { - "id": 6281, - "guid": "6219aa21-5385-448e-ab89-f27c0dce04bf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Brickman", - "company": "Allnet", - "phone": "834-578-2261", - "email": "khloe@allnet.com" - }, - { - "id": 6282, - "guid": "87eb91de-c507-46d3-84df-cc4f14fea0bc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Young", - "company": "Conrama", - "phone": "854-515-3830", - "email": "victoria@conrama.com" - }, - { - "id": 6283, - "guid": "6ef3c3e8-2112-44ec-892a-aac216844b5d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Goodman", - "company": "Robocomm", - "phone": "891-530-2445", - "email": "kaitlyn@robocomm.com" - }, - { - "id": 6284, - "guid": "1fe875a4-ecd7-46c6-97a5-4e96295a7387", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Miln", - "company": "SysUSA", - "phone": "838-569-3633", - "email": "kaitlyn@sysusa.com" - }, - { - "id": 6285, - "guid": "1406c44e-c4f9-41a6-9e34-1e8ebcc6878d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Gate", - "company": "Robotomic", - "phone": "853-492-2877", - "email": "arianna@robotomic.com" - }, - { - "id": 6286, - "guid": "f243dc7a-30fb-494b-af6a-7c9887b1f60e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Gilbert", - "company": "Technogra", - "phone": "891-557-3531", - "email": "zoe@technogra.com" - }, - { - "id": 6287, - "guid": "4b6146a6-47c7-480f-adec-a1236c54578c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Milton", - "company": "Qualserve", - "phone": "890-476-2041", - "email": "makayla@qualserve.com" - }, - { - "id": 6288, - "guid": "aa2b2752-12b7-4f77-9aea-5b1ba2526065", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Wayne", - "company": "Safeagra", - "phone": "870-566-2213", - "email": "isabella@safeagra.com" - }, - { - "id": 6289, - "guid": "41124849-9579-422a-a51a-74d74ecff029", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Sheldon", - "company": "Enlogia", - "phone": "808-505-2442", - "email": "gabriella@enlogia.com" - }, - { - "id": 6290, - "guid": "87330bbd-30b7-46d9-a81b-a3286bbd7162", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Warren", - "company": "Generola", - "phone": "836-565-2444", - "email": "zoey@generola.com" - }, - { - "id": 6291, - "guid": "df0d174f-2cbc-4c09-85a6-635171f67ac2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Young", - "company": "US Infratouch", - "phone": "845-441-3588", - "email": "madelyn@us infratouch.com" - }, - { - "id": 6292, - "guid": "d599c290-4b23-41d9-95f7-c8a92cde0cdb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Conors", - "company": "eSteganoergy", - "phone": "866-591-3132", - "email": "layla@esteganoergy.com" - }, - { - "id": 6293, - "guid": "49143f12-8975-4af6-ace9-1d9b61784f5f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Wood", - "company": "Teratopia", - "phone": "804-538-3758", - "email": "gianna@teratopia.com" - }, - { - "id": 6294, - "guid": "3ebf71e1-6953-4312-9d42-42096aad549c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Sheldon", - "company": "Unologic", - "phone": "833-496-2165", - "email": "caroline@unologic.com" - }, - { - "id": 6295, - "guid": "8e035d49-17e8-4b9f-b31e-f60133dad79b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Sherlock", - "company": "Venconix", - "phone": "854-406-2968", - "email": "madeline@venconix.com" - }, - { - "id": 6296, - "guid": "a92b07ab-650c-4add-81eb-61d34722c30e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Carrington", - "company": "Truegate", - "phone": "858-421-3343", - "email": "ariana@truegate.com" - }, - { - "id": 6297, - "guid": "f5911e55-d8b6-4f3e-b9b5-9d9cf7073e43", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Chesterton", - "company": "Allnet", - "phone": "821-406-2086", - "email": "allison@allnet.com" - }, - { - "id": 6298, - "guid": "0850cb3f-68ac-4f4d-9aaf-555fb4fc422f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Carter", - "company": "eSteganoergy", - "phone": "843-578-2788", - "email": "lauren@esteganoergy.com" - }, - { - "id": 6299, - "guid": "9f569e4e-5fb9-4d5b-8b18-7782b9a13c83", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Molligan", - "company": "Titanirola", - "phone": "884-458-3618", - "email": "brooke@titanirola.com" - }, - { - "id": 6300, - "guid": "c7d60b46-2e9f-428b-8c9d-e0d795ba6fc4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Ward", - "company": "Vencom", - "phone": "888-492-3643", - "email": "avery@vencom.com" - }, - { - "id": 6301, - "guid": "e8328ca3-f53a-4e55-83aa-27637af8b7c8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Galbraith", - "company": "eSteganoergy", - "phone": "815-530-2444", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 6302, - "guid": "6ce0e3a6-521d-409d-ac91-024e18cfd484", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mya Adamson", - "company": "Skydata", - "phone": "833-534-3513", - "email": "mya@skydata.com" - }, - { - "id": 6303, - "guid": "16879783-dcf8-4bdd-87e1-8692d44cf6c8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Ogden", - "company": "eSteganoergy", - "phone": "850-567-3156", - "email": "alexis@esteganoergy.com" - }, - { - "id": 6304, - "guid": "ee5e2c23-2e71-46f9-8669-6a36b5bb7d09", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Vance", - "company": "Gigaura", - "phone": "888-526-3836", - "email": "mariah@gigaura.com" - }, - { - "id": 6305, - "guid": "343c2570-928a-49cc-a817-35f487986013", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jessica Carey", - "company": "Anaframe", - "phone": "892-557-3754", - "email": "jessica@anaframe.com" - }, - { - "id": 6306, - "guid": "1fe6edad-e29e-4544-a8eb-bead8b4510c4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Fisher", - "company": "Dynarama", - "phone": "885-502-2224", - "email": "angelina@dynarama.com" - }, - { - "id": 6307, - "guid": "49fb3ef4-3e4b-4d7e-8f86-4168185ea6d9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Hawkins", - "company": "iSkyvaco", - "phone": "886-587-2047", - "email": "allison@iskyvaco.com" - }, - { - "id": 6308, - "guid": "7dbc4325-93a7-47bb-ac5e-e995576157a3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kayla Clapton", - "company": "Technogra", - "phone": "825-576-3052", - "email": "kayla@technogra.com" - }, - { - "id": 6309, - "guid": "f279c5ae-50cd-4d9b-b07d-fada277a4187", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Webster", - "company": "Anaframe", - "phone": "893-590-2127", - "email": "camila@anaframe.com" - }, - { - "id": 6310, - "guid": "bfb923f1-4670-489b-8d87-da99aaaa8f1c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Amelia Miers", - "company": "Unologic", - "phone": "828-525-3101", - "email": "amelia@unologic.com" - }, - { - "id": 6311, - "guid": "5c84119c-c316-4048-87e2-0a7f34dcb316", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Oswald", - "company": "Airdyne", - "phone": "804-533-2989", - "email": "isabelle@airdyne.com" - }, - { - "id": 6312, - "guid": "7d3a52a3-8b27-4b5a-ba6f-8b78fd71b3f5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Cramer", - "company": "Enlogia", - "phone": "875-540-2877", - "email": "bailey@enlogia.com" - }, - { - "id": 6313, - "guid": "cab5e70b-951f-447f-8622-1afa8adaaf71", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Oldman", - "company": "Titanigraf", - "phone": "860-562-3781", - "email": "angelina@titanigraf.com" - }, - { - "id": 6314, - "guid": "9e924a5d-2524-452f-9fe9-5d2e1bb1715e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Sherlock", - "company": "Netseco", - "phone": "859-455-3347", - "email": "isabelle@netseco.com" - }, - { - "id": 6315, - "guid": "8747da1b-ead6-4960-9d31-8f33bacd5277", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Sheldon", - "company": "Celgra", - "phone": "861-425-3780", - "email": "madelyn@celgra.com" - }, - { - "id": 6316, - "guid": "67f085a0-3d2d-4e9d-a83b-a8f3fe4002b1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Freeman", - "company": "Openserve", - "phone": "896-551-2407", - "email": "ariana@openserve.com" - }, - { - "id": 6317, - "guid": "f03054ad-a8fd-4aa0-a0ec-9db2f7583c90", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Sheldon", - "company": "Compuamerica", - "phone": "837-446-3931", - "email": "payton@compuamerica.com" - }, - { - "id": 6318, - "guid": "fac5faed-07b3-4328-acd8-90be6c584361", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maya Thornton", - "company": "Fibrotouch", - "phone": "850-550-2420", - "email": "maya@fibrotouch.com" - }, - { - "id": 6319, - "guid": "79949a6c-9a2b-4513-a414-0aaca1c48d3a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Andrea Gilson", - "company": "SysUSA", - "phone": "823-432-3734", - "email": "andrea@sysusa.com" - }, - { - "id": 6320, - "guid": "30a2fd9a-a238-487a-9454-31d2a20ab91e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Daniels", - "company": "eSteganoergy", - "phone": "807-587-2761", - "email": "andrea@esteganoergy.com" - }, - { - "id": 6321, - "guid": "e30b75c6-f38c-4a71-8505-c1493bf98231", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Oldridge", - "company": "Robotemplate", - "phone": "873-443-3739", - "email": "allison@robotemplate.com" - }, - { - "id": 6322, - "guid": "91089716-4ab7-4b2a-b304-50fe81384466", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madison WifKinson", - "company": "Celgra", - "phone": "884-441-2438", - "email": "madison@celgra.com" - }, - { - "id": 6323, - "guid": "1c186410-48f7-49e7-9925-431f2118d93b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Miers", - "company": "Titanigraf", - "phone": "821-473-3913", - "email": "mya@titanigraf.com" - }, - { - "id": 6324, - "guid": "36419eb4-0e9c-48a8-8850-a763c32d6f67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Oswald", - "company": "Indisco", - "phone": "844-418-3682", - "email": "chloe@indisco.com" - }, - { - "id": 6325, - "guid": "8d06e51f-450f-4724-8802-bc787ff55223", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Campbell", - "company": "Unologic", - "phone": "824-500-3873", - "email": "bailey@unologic.com" - }, - { - "id": 6326, - "guid": "be575c28-d761-43d8-9185-72f8d56b10b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Oswald", - "company": "Netseco", - "phone": "818-402-3703", - "email": "morgan@netseco.com" - }, - { - "id": 6327, - "guid": "d03bffc4-da21-48e2-89fe-53e40f5cd0ea", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Hailey", - "company": "Orthomedia", - "phone": "869-582-3805", - "email": "olivia@orthomedia.com" - }, - { - "id": 6328, - "guid": "2df6fe11-b7d3-4bdf-9be0-4d2839844e05", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Hancock", - "company": "Orthomedia", - "phone": "821-459-2624", - "email": "aubrey@orthomedia.com" - }, - { - "id": 6329, - "guid": "9527c6bd-6b4f-4541-9528-b2ccf197b2b9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Carter", - "company": "eEyetanic", - "phone": "806-417-3055", - "email": "emma@eeyetanic.com" - }, - { - "id": 6330, - "guid": "d17c6c31-7652-427e-8f1a-0a8757f5468c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Turner", - "company": "Systheon", - "phone": "845-479-2970", - "email": "victoria@systheon.com" - }, - { - "id": 6331, - "guid": "0a0260d8-34be-4233-a71b-b5171f0b2b04", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Freeman", - "company": "Nanobanc", - "phone": "818-506-2406", - "email": "angelina@nanobanc.com" - }, - { - "id": 6332, - "guid": "9a5ca585-137b-4cb6-b0b6-9101fc5ecde0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Cramer", - "company": "Dynarama", - "phone": "804-502-3855", - "email": "hailey@dynarama.com" - }, - { - "id": 6333, - "guid": "951f260f-e90b-4550-aba5-a6b564cfb787", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Charlson", - "company": "Robocomm", - "phone": "894-558-2783", - "email": "kylie@robocomm.com" - }, - { - "id": 6334, - "guid": "fc7abd16-e655-4a50-a0bb-326f761fda0b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Cook", - "company": "Unologic", - "phone": "827-434-2098", - "email": "serenity@unologic.com" - }, - { - "id": 6335, - "guid": "b9d3118b-c9b3-4cbf-bde1-25db267b9d14", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Hailey", - "company": "iEnland", - "phone": "842-548-2577", - "email": "olivia@ienland.com" - }, - { - "id": 6336, - "guid": "af0fc9b4-019c-47bd-99c2-5c98f7420eec", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Calhoun", - "company": "Anagraph", - "phone": "886-437-3304", - "email": "ella@anagraph.com" - }, - { - "id": 6337, - "guid": "49dd7ef4-3e97-4b99-b19f-0896a399bf51", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Galbraith", - "company": "Orthomedia", - "phone": "842-571-2217", - "email": "layla@orthomedia.com" - }, - { - "id": 6338, - "guid": "9e169813-f956-48a0-990c-b9d1f4c0f57c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Calhoun", - "company": "Vencom", - "phone": "867-552-3959", - "email": "jocelyn@vencom.com" - }, - { - "id": 6339, - "guid": "013f6088-e864-4b52-9f7d-1e23f065fb75", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Hoggarth", - "company": "Xeicon", - "phone": "806-540-3323", - "email": "serenity@xeicon.com" - }, - { - "id": 6340, - "guid": "b2878728-1a90-41b1-ae47-ccb56419401d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Gibbs", - "company": "Qualserve", - "phone": "886-598-3657", - "email": "alexis@qualserve.com" - }, - { - "id": 6341, - "guid": "569f94f6-e50f-46ab-8a8c-f6a1d028f516", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Chloe Brickman", - "company": "Teknoplexon", - "phone": "821-471-2979", - "email": "chloe@teknoplexon.com" - }, - { - "id": 6342, - "guid": "79b3b61f-e2c6-4020-b0c8-013e0d591f4f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Thornton", - "company": "Videobanc", - "phone": "876-526-3992", - "email": "nevaeh@videobanc.com" - }, - { - "id": 6343, - "guid": "6ff31b0b-7277-49eb-bdd9-36c11d634b34", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Oliver", - "company": "Vencom", - "phone": "810-424-2547", - "email": "madeline@vencom.com" - }, - { - "id": 6344, - "guid": "34973d23-d954-40c2-9d6e-f7b8ee4c16a5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Gilbert", - "company": "Robotemplate", - "phone": "859-576-2070", - "email": "caroline@robotemplate.com" - }, - { - "id": 6345, - "guid": "9a0de865-a37f-485c-85d5-716636438a26", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Croftoon", - "company": "Dynarama", - "phone": "894-507-2663", - "email": "gabrielle@dynarama.com" - }, - { - "id": 6346, - "guid": "ef71dfc1-3cb7-498f-b5b1-508562583376", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Olivia Goodman", - "company": "Nanobanc", - "phone": "883-578-3683", - "email": "olivia@nanobanc.com" - }, - { - "id": 6347, - "guid": "f4692130-2c7b-477d-9f62-e804feaf1281", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Warren", - "company": "Aprama", - "phone": "846-546-3789", - "email": "isabella@aprama.com" - }, - { - "id": 6348, - "guid": "f6ac8ce9-ce94-4d10-8d34-c02187f80df3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Vance", - "company": "Steganoconiche", - "phone": "845-489-3225", - "email": "madison@steganoconiche.com" - }, - { - "id": 6349, - "guid": "5e4587c9-1c5f-4c20-8f34-28b19c8ec99f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Eva Gilson", - "company": "Qualserve", - "phone": "845-587-3839", - "email": "eva@qualserve.com" - }, - { - "id": 6350, - "guid": "680707e2-80eb-4f57-a355-e61d5696f16c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Timmons", - "company": "Robocomm", - "phone": "876-569-3067", - "email": "victoria@robocomm.com" - }, - { - "id": 6351, - "guid": "7519be3d-5446-49ed-ae56-d44ec9792b84", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Nelson", - "company": "Ventanium", - "phone": "804-551-3536", - "email": "mackenzie@ventanium.com" - }, - { - "id": 6352, - "guid": "1bdbac38-8592-42da-8819-bf534898c98f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Natalie Carrington", - "company": "iOptystix", - "phone": "895-582-2876", - "email": "natalie@ioptystix.com" - }, - { - "id": 6353, - "guid": "236027ce-9eb1-47e7-b762-0c263d502412", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Gate", - "company": "Fibroserve", - "phone": "895-426-2667", - "email": "valeria@fibroserve.com" - }, - { - "id": 6354, - "guid": "a606a419-61ad-4d4a-91d3-3e741a9509df", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Ward", - "company": "Orthosoft", - "phone": "815-550-2207", - "email": "isabelle@orthosoft.com" - }, - { - "id": 6355, - "guid": "d09ee8f5-56b9-4871-b650-579b0f7397d8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Oliver", - "company": "Tekcar", - "phone": "822-573-2541", - "email": "layla@tekcar.com" - }, - { - "id": 6356, - "guid": "7beb4f6f-7424-4a33-b3f1-8b7762ca1ec2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Hamphrey", - "company": "Netsystems", - "phone": "830-449-2591", - "email": "madison@netsystems.com" - }, - { - "id": 6357, - "guid": "c75eba82-1d28-4aef-81dd-4859ef071a00", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine Chesterton", - "company": "Safeagra", - "phone": "849-451-2301", - "email": "jasmine@safeagra.com" - }, - { - "id": 6358, - "guid": "ba647e7f-ad9d-4e13-b246-0c0196c71883", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Carroll", - "company": "Jamrola", - "phone": "854-490-3969", - "email": "hannah@jamrola.com" - }, - { - "id": 6359, - "guid": "8bbfb226-03f3-4932-b7d3-edfb3e8e9c29", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Brooks", - "company": "Skydata", - "phone": "838-407-2547", - "email": "julia@skydata.com" - }, - { - "id": 6360, - "guid": "8d6d1a91-8fdd-43c3-9130-eec73ccbbb0c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Ogden", - "company": "Openserve", - "phone": "873-539-3139", - "email": "sydney@openserve.com" - }, - { - "id": 6361, - "guid": "4ef308d4-caae-4368-ad8d-159ec45cb061", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Genesis Wood", - "company": "Syssoft", - "phone": "835-442-2339", - "email": "genesis@syssoft.com" - }, - { - "id": 6362, - "guid": "45b22ee8-4cb6-4397-9b82-1e5a33eeab65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Abramson", - "company": "Technogra", - "phone": "836-544-2405", - "email": "victoria@technogra.com" - }, - { - "id": 6363, - "guid": "fec9456c-d563-491f-ad9e-518b772fdfda", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Goodman", - "company": "Infragraph", - "phone": "849-480-2196", - "email": "kylie@infragraph.com" - }, - { - "id": 6364, - "guid": "1615267f-bfb6-4d33-86c5-83242f6a2f01", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Thorndike", - "company": "Pacwest", - "phone": "883-594-2016", - "email": "jasmine@pacwest.com" - }, - { - "id": 6365, - "guid": "806b1e46-a753-468e-8165-1c945557f5ae", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Haig", - "company": "Syssoft", - "phone": "856-563-3178", - "email": "layla@syssoft.com" - }, - { - "id": 6366, - "guid": "25eab491-6bc3-4282-8c96-d1265607bb0a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Gerald", - "company": "Rapigrafix", - "phone": "842-466-2084", - "email": "elizabeth@rapigrafix.com" - }, - { - "id": 6367, - "guid": "681201d3-f459-493f-932f-be6ff01db632", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Creighton", - "company": "Pericenta", - "phone": "837-527-2086", - "email": "makayla@pericenta.com" - }, - { - "id": 6368, - "guid": "087ca51d-db22-47ca-ac55-a113700d0e99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Croftoon", - "company": "Techtron", - "phone": "885-541-2008", - "email": "mariah@techtron.com" - }, - { - "id": 6369, - "guid": "47331938-93ff-4b6b-bd34-9885b829cb2f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Carrington", - "company": "Jamrola", - "phone": "895-472-2598", - "email": "allison@jamrola.com" - }, - { - "id": 6370, - "guid": "8fa2cfd0-4d06-4e2b-98b1-c9853d81231d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Nash", - "company": "Syssoft", - "phone": "897-594-2897", - "email": "alexis@syssoft.com" - }, - { - "id": 6371, - "guid": "0c97c2b6-9778-4eac-a51e-d02de7b56d43", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Carroll", - "company": "Polytheon", - "phone": "813-499-2990", - "email": "addison@polytheon.com" - }, - { - "id": 6372, - "guid": "d4594aef-f0d3-4317-b692-b0c741e97ab0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Carter", - "company": "Airdyne", - "phone": "810-411-2424", - "email": "brooke@airdyne.com" - }, - { - "id": 6373, - "guid": "1fa78acb-b485-4051-8709-851539798322", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Oswald", - "company": "Cryptotegrity", - "phone": "866-419-2047", - "email": "kaitlyn@cryptotegrity.com" - }, - { - "id": 6374, - "guid": "0bf9414e-cb97-43fb-bbcf-2e95d14c5618", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Gardner", - "company": "Sontopia", - "phone": "890-534-3776", - "email": "allison@sontopia.com" - }, - { - "id": 6375, - "guid": "d5486465-6f0e-4fff-b7c4-ae9d27c0bdd1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Miller", - "company": "Inridium", - "phone": "845-537-3828", - "email": "gianna@inridium.com" - }, - { - "id": 6376, - "guid": "6671e069-f68a-4753-a316-3f49579e1042", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Hodges", - "company": "Aprama", - "phone": "898-542-2206", - "email": "audrey@aprama.com" - }, - { - "id": 6377, - "guid": "8b3450db-da43-40dd-b873-7c817115002c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Miller", - "company": "Venconix", - "phone": "832-475-3260", - "email": "zoe@venconix.com" - }, - { - "id": 6378, - "guid": "bd2eb6f0-caaa-4981-99d1-0bc028a7f36c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Gill", - "company": "Venconix", - "phone": "862-450-3772", - "email": "eva@venconix.com" - }, - { - "id": 6379, - "guid": "77e87c45-a9e4-4631-b02c-3a4afa7d52ec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Sheldon", - "company": "iSkyvaco", - "phone": "855-509-2971", - "email": "isabelle@iskyvaco.com" - }, - { - "id": 6380, - "guid": "8a47f65d-ce8f-42a6-b532-e8991add0a53", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Murphy", - "company": "Nanobanc", - "phone": "898-418-3523", - "email": "bailey@nanobanc.com" - }, - { - "id": 6381, - "guid": "b87d00ad-e6a4-46dc-a1e4-ae2c402d0039", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoey Ogden", - "company": "Inridium", - "phone": "831-522-3653", - "email": "zoey@inridium.com" - }, - { - "id": 6382, - "guid": "575799ad-87f1-43f7-b192-4007c974ce41", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Vaughan", - "company": "Truegate", - "phone": "816-466-3541", - "email": "nevaeh@truegate.com" - }, - { - "id": 6383, - "guid": "3d60df60-6105-4296-95c4-b0f5e9bdffd3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Thorndike", - "company": "Aluco", - "phone": "871-472-3796", - "email": "kayla@aluco.com" - }, - { - "id": 6384, - "guid": "b5bb0ff2-cfc4-46b7-b999-d743460db3d5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Wallace", - "company": "Thermotomic", - "phone": "817-533-2705", - "email": "alexa@thermotomic.com" - }, - { - "id": 6385, - "guid": "9c027ec2-d19b-4e40-92ef-0bf73d0e2e5d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Nash", - "company": "Proline", - "phone": "881-466-3285", - "email": "kylie@proline.com" - }, - { - "id": 6386, - "guid": "f72d8311-169a-4e62-9f4d-ee1b6fe5f88a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Harrison", - "company": "Quintegrity", - "phone": "880-491-3976", - "email": "isabella@quintegrity.com" - }, - { - "id": 6387, - "guid": "15a41d86-b523-4b94-801b-0875c1e5a6af", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Oldridge", - "company": "Conrama", - "phone": "848-425-3967", - "email": "morgan@conrama.com" - }, - { - "id": 6388, - "guid": "083a4da8-f1e8-41e0-a38e-a3978742a678", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Hailey", - "company": "OpKeycomm", - "phone": "849-463-3724", - "email": "olivia@opkeycomm.com" - }, - { - "id": 6389, - "guid": "db19d34a-f520-4233-a7f5-5127fd98db22", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Hodges", - "company": "Westtomik", - "phone": "871-426-3427", - "email": "abigail@westtomik.com" - }, - { - "id": 6390, - "guid": "1f6a42df-d2b3-4e9f-baed-6177b82a9df0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Waller", - "company": "iEnland", - "phone": "807-436-3658", - "email": "nevaeh@ienland.com" - }, - { - "id": 6391, - "guid": "ad1e01cf-4f6c-4455-b308-e68252712abd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Michaelson", - "company": "Conrama", - "phone": "857-544-2836", - "email": "nevaeh@conrama.com" - }, - { - "id": 6392, - "guid": "019bf392-7ce1-44ee-8926-f0ace0f0b5d3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Oswald", - "company": "Ameritron", - "phone": "892-560-2124", - "email": "brooke@ameritron.com" - }, - { - "id": 6393, - "guid": "400dfbf1-edba-46f4-a7dc-85efb1ee89c9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Hailey", - "company": "iEnland", - "phone": "855-527-2244", - "email": "aubrey@ienland.com" - }, - { - "id": 6394, - "guid": "091f2e82-65a8-4f1d-85e3-b456bd6f6e40", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Neal", - "company": "Rapigrafix", - "phone": "846-482-3196", - "email": "arianna@rapigrafix.com" - }, - { - "id": 6395, - "guid": "07c5a2bc-b4d4-4ba2-aa0d-9758d2f9227a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brianna Hardman", - "company": "Unologic", - "phone": "858-410-2610", - "email": "brianna@unologic.com" - }, - { - "id": 6396, - "guid": "09306d24-85ff-4c0c-bbcd-e26e8cb6e9ca", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Rachel Bush", - "company": "iSkyvaco", - "phone": "855-448-3199", - "email": "rachel@iskyvaco.com" - }, - { - "id": 6397, - "guid": "1b3b5c2c-d7f1-4eee-a96c-3b6f9b2cafe6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Webster", - "company": "Westgate", - "phone": "801-535-2226", - "email": "molly@westgate.com" - }, - { - "id": 6398, - "guid": "c08d18c5-7f49-4b33-b923-a00b9416f0d5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Mercer", - "company": "Generola", - "phone": "875-549-3698", - "email": "claire@generola.com" - }, - { - "id": 6399, - "guid": "c95d5dfe-a49a-41a6-a3e3-fea790c37767", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hannah Fisher", - "company": "US Omnigraphik", - "phone": "889-560-3843", - "email": "hannah@us omnigraphik.com" - }, - { - "id": 6400, - "guid": "ca99fdfb-c641-49e0-bf42-3a6b53d42e0d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Turner", - "company": "Superscope", - "phone": "881-524-3144", - "email": "mackenzie@superscope.com" - }, - { - "id": 6401, - "guid": "d1b4d931-82b0-4b7e-a22c-f1def44e2eca", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophia Carrington", - "company": "Fibrotopia", - "phone": "874-416-3172", - "email": "sophia@fibrotopia.com" - }, - { - "id": 6402, - "guid": "00894d52-6c05-4fb0-9fc0-2dae2143db83", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Gate", - "company": "Ameritron", - "phone": "898-402-3454", - "email": "sophie@ameritron.com" - }, - { - "id": 6403, - "guid": "c1c4ef82-9171-4cb7-979f-50cd9a98df22", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Ford", - "company": "Raylog", - "phone": "854-474-3868", - "email": "ava@raylog.com" - }, - { - "id": 6404, - "guid": "f2e15fc3-192c-4f77-84f9-60f5a441d7c9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Arianna Vance", - "company": "Techtron", - "phone": "868-462-3600", - "email": "arianna@techtron.com" - }, - { - "id": 6405, - "guid": "5c1ac962-49fb-479a-bcab-c114d4bd82ed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Serenity Abramson", - "company": "RoboAerlogix", - "phone": "896-511-3620", - "email": "serenity@roboaerlogix.com" - }, - { - "id": 6406, - "guid": "52e52a15-7f94-48d9-9815-702702229a81", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Croftoon", - "company": "Fibrotouch", - "phone": "878-505-3624", - "email": "riley@fibrotouch.com" - }, - { - "id": 6407, - "guid": "4c184d0f-cc2b-4c81-81e1-1b445e17a294", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Gate", - "company": "Genland", - "phone": "873-589-2895", - "email": "maya@genland.com" - }, - { - "id": 6408, - "guid": "43d57411-0290-4569-9782-7fd318b2cf96", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Young", - "company": "Titanigraf", - "phone": "801-531-2405", - "email": "ashley@titanigraf.com" - }, - { - "id": 6409, - "guid": "b06b7058-5456-4bcd-9a84-7bb184b5cc9d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth Galbraith", - "company": "Teknoplexon", - "phone": "808-585-3349", - "email": "elizabeth@teknoplexon.com" - }, - { - "id": 6410, - "guid": "fe7f5bbf-edee-451c-a30f-a9c95b978cce", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Haig", - "company": "Pericenta", - "phone": "802-480-2455", - "email": "aubrey@pericenta.com" - }, - { - "id": 6411, - "guid": "6366ee08-fbca-4500-94bf-56208a9d3b21", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Hardman", - "company": "Interliant", - "phone": "878-555-3435", - "email": "zoey@interliant.com" - }, - { - "id": 6412, - "guid": "2370f011-1ee0-4587-b65c-fb941d5e1d6e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Vance", - "company": "Generola", - "phone": "842-561-2698", - "email": "madison@generola.com" - }, - { - "id": 6413, - "guid": "7d6a0c76-0377-44a4-83fb-9cf648d546df", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Turner", - "company": "US Omnigraphik", - "phone": "891-435-3095", - "email": "abigail@us omnigraphik.com" - }, - { - "id": 6414, - "guid": "c2940c20-d7d0-452d-9bea-a750809cd9b4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Calhoun", - "company": "Unologic", - "phone": "808-457-2830", - "email": "zoey@unologic.com" - }, - { - "id": 6415, - "guid": "82fe3d9a-ccc8-4296-9a76-4624d46cb29f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe White", - "company": "Pericenta", - "phone": "835-549-2580", - "email": "zoe@pericenta.com" - }, - { - "id": 6416, - "guid": "d8228a3d-65a0-4219-9c8b-41eeca1c7761", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Adamson", - "company": "Multitiqua", - "phone": "882-430-2796", - "email": "layla@multitiqua.com" - }, - { - "id": 6417, - "guid": "71e3cd96-bd57-4bb8-9f14-5948e4dc8f95", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maria Calhoun", - "company": "Videobanc", - "phone": "898-474-3277", - "email": "maria@videobanc.com" - }, - { - "id": 6418, - "guid": "a89ff524-c5e3-4538-9b27-adb469b353e4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bella Cook", - "company": "Unologic", - "phone": "887-439-2248", - "email": "bella@unologic.com" - }, - { - "id": 6419, - "guid": "5580fef3-2931-4383-ac99-cccd3269f711", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Wayne", - "company": "iEnland", - "phone": "821-414-3414", - "email": "alyssa@ienland.com" - }, - { - "id": 6420, - "guid": "4210c19b-9a30-415c-8c5a-bd39ffe1a1db", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Brooks", - "company": "Tekcar", - "phone": "895-472-2920", - "email": "avery@tekcar.com" - }, - { - "id": 6421, - "guid": "fb68ebb2-e864-4e33-9ceb-c03fff0ea520", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ariana Brooks", - "company": "Anagraph", - "phone": "837-501-3195", - "email": "ariana@anagraph.com" - }, - { - "id": 6422, - "guid": "670f8c28-7ca4-40ba-84a6-77329a1a2f0f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Smith", - "company": "Raylog", - "phone": "820-472-3844", - "email": "ashley@raylog.com" - }, - { - "id": 6423, - "guid": "a2cb247d-4336-4abb-8bf0-bf2524257036", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Day", - "company": "Proline", - "phone": "811-522-3966", - "email": "faith@proline.com" - }, - { - "id": 6424, - "guid": "ce50efcb-a742-44b0-bf09-cfb1e923d1bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Fisher", - "company": "Tekcar", - "phone": "850-454-3282", - "email": "layla@tekcar.com" - }, - { - "id": 6425, - "guid": "330fa75d-5e97-4bcc-abde-8a6ede318b9c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Higgins", - "company": "Genland", - "phone": "875-493-2757", - "email": "jasmine@genland.com" - }, - { - "id": 6426, - "guid": "dec9c1f6-3e07-4ef7-8d5d-3976611982da", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kimberly Nash", - "company": "Openserve", - "phone": "830-500-3402", - "email": "kimberly@openserve.com" - }, - { - "id": 6427, - "guid": "1aa9907f-0b53-4da6-b54f-7705b776352f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Calhoun", - "company": "Rapigrafix", - "phone": "824-517-2019", - "email": "angelina@rapigrafix.com" - }, - { - "id": 6428, - "guid": "817e138f-d0c8-4675-a3af-15b8a02e8d88", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Wesley", - "company": "Jamrola", - "phone": "822-433-3982", - "email": "sophia@jamrola.com" - }, - { - "id": 6429, - "guid": "6321012e-dc3f-4a28-9c04-651df0f111a0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Thomson", - "company": "Titanigraf", - "phone": "801-490-2242", - "email": "brooke@titanigraf.com" - }, - { - "id": 6430, - "guid": "20952ccb-d42f-4367-a998-acc4b43d7c44", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Gate", - "company": "Ameritron", - "phone": "834-416-2577", - "email": "gianna@ameritron.com" - }, - { - "id": 6431, - "guid": "e536c94f-93df-41e2-9ca8-3623dce416c8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Chandter", - "company": "Textiqua", - "phone": "807-419-3030", - "email": "lillian@textiqua.com" - }, - { - "id": 6432, - "guid": "fff63ac6-77b6-47cc-be3c-e50d20e22b93", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Goldman", - "company": "Cryptotemplate", - "phone": "898-480-3509", - "email": "mackenzie@cryptotemplate.com" - }, - { - "id": 6433, - "guid": "eb791093-9705-4de6-9cae-50e08f191099", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Otis", - "company": "Steganoconiche", - "phone": "868-416-3037", - "email": "evelyn@steganoconiche.com" - }, - { - "id": 6434, - "guid": "9623ff5c-7966-4fa3-9860-c4f365571dc4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Oldridge", - "company": "Venconix", - "phone": "809-473-3978", - "email": "aubrey@venconix.com" - }, - { - "id": 6435, - "guid": "1d0f8aa8-9640-43a0-81a5-07804c265411", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Daniels", - "company": "InfoAirway", - "phone": "807-550-3988", - "email": "makayla@infoairway.com" - }, - { - "id": 6436, - "guid": "dce9b46e-836c-4c5f-b4dc-96749016a737", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Charlson", - "company": "SysUSA", - "phone": "850-424-3765", - "email": "zoey@sysusa.com" - }, - { - "id": 6437, - "guid": "f2977503-9381-4c48-9903-bd81dd18aebd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Abramson", - "company": "Openserve", - "phone": "870-541-3196", - "email": "jasmine@openserve.com" - }, - { - "id": 6438, - "guid": "40de42a2-1c05-4a60-9f68-5b5851575e56", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Mercer", - "company": "Qualserve", - "phone": "839-524-2168", - "email": "sophia@qualserve.com" - }, - { - "id": 6439, - "guid": "c823f60e-9d8c-4c80-b49a-a714a4c3b770", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Wood", - "company": "Steganoconiche", - "phone": "886-527-2381", - "email": "sydney@steganoconiche.com" - }, - { - "id": 6440, - "guid": "147c06fb-d930-436c-8346-1ab8a5c72d40", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Bush", - "company": "Teraserv", - "phone": "859-530-3948", - "email": "autumn@teraserv.com" - }, - { - "id": 6441, - "guid": "afd43915-c9f7-4346-9ffa-3a1c07ef874e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Allison WifKinson", - "company": "Mescaridic", - "phone": "898-464-3014", - "email": "allison@mescaridic.com" - }, - { - "id": 6442, - "guid": "a4de637e-27c2-4e35-a43b-ff79f284c964", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Molligan", - "company": "Ventanium", - "phone": "880-525-2454", - "email": "jocelyn@ventanium.com" - }, - { - "id": 6443, - "guid": "db1b90d5-3e9a-4af1-93ee-83a02b2da0c4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Ogden", - "company": "Netsystems", - "phone": "806-567-2394", - "email": "olivia@netsystems.com" - }, - { - "id": 6444, - "guid": "a79b35fc-aee7-4872-8e7d-29479cd10713", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Thorndike", - "company": "Cryptotegrity", - "phone": "874-536-2647", - "email": "sydney@cryptotegrity.com" - }, - { - "id": 6445, - "guid": "03ed6502-37e7-4ff1-bb70-28370de44e09", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Nathan", - "company": "Safeagra", - "phone": "895-580-3818", - "email": "riley@safeagra.com" - }, - { - "id": 6446, - "guid": "588f7030-dab9-46a5-b115-817bb52c1e4a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Angelina Freeman", - "company": "Anaframe", - "phone": "856-575-3119", - "email": "angelina@anaframe.com" - }, - { - "id": 6447, - "guid": "12486d80-1507-43b0-a3d3-b14777fc5f6b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Thorndike", - "company": "Entcast", - "phone": "881-472-3648", - "email": "molly@entcast.com" - }, - { - "id": 6448, - "guid": "095eaa11-f7e8-4161-b760-568952f61191", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Calhoun", - "company": "Fibrotouch", - "phone": "852-446-2495", - "email": "kaylee@fibrotouch.com" - }, - { - "id": 6449, - "guid": "c0893cb0-bfca-4d3c-b902-53d1a6896986", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Morrison", - "company": "Multitiqua", - "phone": "804-538-2814", - "email": "mia@multitiqua.com" - }, - { - "id": 6450, - "guid": "82e5c259-a3b6-4f9e-9729-c5e07d464172", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Timmons", - "company": "Navivacs", - "phone": "810-426-3689", - "email": "emily@navivacs.com" - }, - { - "id": 6451, - "guid": "9fea99b1-4bdd-4d6f-abf8-f29b1f4211f4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Crossman", - "company": "Unconix", - "phone": "884-593-3099", - "email": "gabriella@unconix.com" - }, - { - "id": 6452, - "guid": "91d1c51b-ee78-4da1-a115-8a3f24e0fc67", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Hardman", - "company": "Fibrotopia", - "phone": "885-569-3987", - "email": "bailey@fibrotopia.com" - }, - { - "id": 6453, - "guid": "115c1c21-1e4b-4f40-a196-a5ac17e0b662", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Gibbs", - "company": "Technogra", - "phone": "887-408-2687", - "email": "allison@technogra.com" - }, - { - "id": 6454, - "guid": "2180909d-2d58-4b2d-a1da-eab48fce3902", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Hardman", - "company": "Entcast", - "phone": "808-427-2125", - "email": "claire@entcast.com" - }, - { - "id": 6455, - "guid": "632cd7d2-1b2e-4b7e-94bc-252110ada0d2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla White", - "company": "Enlogia", - "phone": "858-405-2920", - "email": "layla@enlogia.com" - }, - { - "id": 6456, - "guid": "f6a315b5-f995-4c54-b4ee-78993e16ed58", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jocelyn Goodman", - "company": "Transtouch", - "phone": "844-457-2239", - "email": "jocelyn@transtouch.com" - }, - { - "id": 6457, - "guid": "ad831159-8ea3-4f0a-8be1-0cfd1093828b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooklyn Carey", - "company": "Nanobanc", - "phone": "876-562-2613", - "email": "brooklyn@nanobanc.com" - }, - { - "id": 6458, - "guid": "8923651c-afe2-41ea-bf23-bcb001a26cfc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Abramson", - "company": "Netsystems", - "phone": "837-420-3636", - "email": "jessica@netsystems.com" - }, - { - "id": 6459, - "guid": "b1806aca-5859-4374-968f-66d99a7525a2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Ford", - "company": "Fibrotouch", - "phone": "812-473-2040", - "email": "andrea@fibrotouch.com" - }, - { - "id": 6460, - "guid": "33ed9d91-18af-4389-8de9-d365e469d607", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Freeman", - "company": "Celgra", - "phone": "894-419-3867", - "email": "maria@celgra.com" - }, - { - "id": 6461, - "guid": "cf92eebc-4215-4702-809f-12e1ef1b88dd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Turner", - "company": "Multitiqua", - "phone": "873-486-2609", - "email": "taylor@multitiqua.com" - }, - { - "id": 6462, - "guid": "c0ce137a-78de-4de7-a387-51aed34dace0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Osborne", - "company": "Pericenta", - "phone": "837-429-3592", - "email": "evelyn@pericenta.com" - }, - { - "id": 6463, - "guid": "6472fdda-76e8-42e4-8570-b477737d5bd1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Vance", - "company": "Fibroserve", - "phone": "817-570-3675", - "email": "mariah@fibroserve.com" - }, - { - "id": 6464, - "guid": "aa83248a-da10-4f0e-aa32-67816077a5a3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Oldman", - "company": "eEyetanic", - "phone": "851-466-2209", - "email": "khloe@eeyetanic.com" - }, - { - "id": 6465, - "guid": "628080a2-731c-4027-8e37-4a3694c89968", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Carroll", - "company": "Anagraph", - "phone": "813-523-2300", - "email": "makayla@anagraph.com" - }, - { - "id": 6466, - "guid": "6457febf-ccc8-4a15-94de-5b2d0320b903", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Crossman", - "company": "Orthosoft", - "phone": "803-566-2928", - "email": "gabrielle@orthosoft.com" - }, - { - "id": 6467, - "guid": "1443b1f8-9d71-454b-b748-1b81c6f09bae", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Freeman", - "company": "US Omnigraphik", - "phone": "802-510-2979", - "email": "hannah@us omnigraphik.com" - }, - { - "id": 6468, - "guid": "9a92b541-84e5-4608-893f-e411170443f3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Gilbert", - "company": "Conotomics", - "phone": "838-505-2463", - "email": "valeria@conotomics.com" - }, - { - "id": 6469, - "guid": "625da167-2e31-40ba-a2da-4576a6aba62a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke WifKinson", - "company": "Techtron", - "phone": "834-517-3134", - "email": "brooke@techtron.com" - }, - { - "id": 6470, - "guid": "3b49d9ed-8587-4630-9e0f-084796f474f0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Nash", - "company": "US Infratouch", - "phone": "809-421-2345", - "email": "rachel@us infratouch.com" - }, - { - "id": 6471, - "guid": "34d9e968-121f-4af6-b984-e64f41636a7e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Nash", - "company": "Teratopia", - "phone": "884-559-2412", - "email": "jasmine@teratopia.com" - }, - { - "id": 6472, - "guid": "3f82c110-71b2-4b75-b729-6c6fd7cade42", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Miers", - "company": "Fibroserve", - "phone": "816-574-3185", - "email": "kaitlyn@fibroserve.com" - }, - { - "id": 6473, - "guid": "9af2049f-f0aa-4647-a496-5a61cdfac970", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Destiny Morrison", - "company": "Conrama", - "phone": "825-453-2876", - "email": "destiny@conrama.com" - }, - { - "id": 6474, - "guid": "876c43cf-c0a1-47ed-a44d-f131fca4e0fa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Oldman", - "company": "OpKeycomm", - "phone": "839-552-2481", - "email": "brooklyn@opkeycomm.com" - }, - { - "id": 6475, - "guid": "6e630b6e-e935-4e22-84a1-7719087d992d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Carter", - "company": "Unologic", - "phone": "832-462-3739", - "email": "bailey@unologic.com" - }, - { - "id": 6476, - "guid": "97b00470-04f2-4f01-b6ee-6217ebf3b405", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabrielle Osborne", - "company": "Titanigraf", - "phone": "859-444-2094", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 6477, - "guid": "ae8553a7-934d-4ee4-bfff-7a51050449c6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Wesley", - "company": "Robotemplate", - "phone": "870-457-2239", - "email": "allison@robotemplate.com" - }, - { - "id": 6478, - "guid": "6e28d518-e2b3-43cb-819b-7c28f0c46934", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Cook", - "company": "Enlogia", - "phone": "852-490-3043", - "email": "amelia@enlogia.com" - }, - { - "id": 6479, - "guid": "ec41e364-f0a0-4929-ada3-add6749eb4f0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Goldman", - "company": "Fibroserve", - "phone": "889-576-2694", - "email": "mariah@fibroserve.com" - }, - { - "id": 6480, - "guid": "2144af39-5606-4a24-a6a9-d1da2d627707", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Wainwright", - "company": "Mescatron", - "phone": "861-485-2316", - "email": "ashley@mescatron.com" - }, - { - "id": 6481, - "guid": "68c4eeec-4458-4669-a89d-da5005308d0c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Wesley", - "company": "Westtomik", - "phone": "809-451-3084", - "email": "sydney@westtomik.com" - }, - { - "id": 6482, - "guid": "9f68e353-bea3-4697-8afd-5f6b36cad058", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Chapman", - "company": "Textiqua", - "phone": "815-521-2983", - "email": "kimberly@textiqua.com" - }, - { - "id": 6483, - "guid": "0bf359f9-7e78-4fe3-84d3-4c2b89da00e5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Day", - "company": "Jamrola", - "phone": "809-494-3937", - "email": "zoey@jamrola.com" - }, - { - "id": 6484, - "guid": "0c6f1384-91e1-4054-b320-73f080382ce7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Anna Wayne", - "company": "Compuamerica", - "phone": "805-480-2770", - "email": "anna@compuamerica.com" - }, - { - "id": 6485, - "guid": "1e5c474f-2ac3-4dc7-b35f-a435cc996962", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Higgins", - "company": "Teknoplexon", - "phone": "871-408-3287", - "email": "alexis@teknoplexon.com" - }, - { - "id": 6486, - "guid": "26f7550f-8150-4c4e-9287-d196b6f32511", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kimberly Gilson", - "company": "Aprama", - "phone": "859-592-2127", - "email": "kimberly@aprama.com" - }, - { - "id": 6487, - "guid": "0a8167f2-abae-4170-a91e-a323e40ac70f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Watson", - "company": "Safeagra", - "phone": "899-580-2398", - "email": "faith@safeagra.com" - }, - { - "id": 6488, - "guid": "65478d03-cd74-4e0c-8e83-a1cf01507836", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Sheldon", - "company": "Fibrotouch", - "phone": "861-448-2452", - "email": "mariah@fibrotouch.com" - }, - { - "id": 6489, - "guid": "c847b4e2-58af-49de-987b-6afdececf69e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Hodges", - "company": "Keytheon", - "phone": "856-435-2231", - "email": "savannah@keytheon.com" - }, - { - "id": 6490, - "guid": "2ffdf62e-0fb9-42a4-b9d3-87208cd25d2a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Wesley", - "company": "OpKeycomm", - "phone": "859-553-3460", - "email": "audrey@opkeycomm.com" - }, - { - "id": 6491, - "guid": "7b0c2058-45b0-4380-8c05-6ed7626ffb0e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Fulton", - "company": "Safetrust", - "phone": "826-419-2936", - "email": "mackenzie@safetrust.com" - }, - { - "id": 6492, - "guid": "c6ed66d3-995b-4fbf-895e-a3e9a1e425bf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Gardner", - "company": "US Infratouch", - "phone": "813-564-3766", - "email": "audrey@us infratouch.com" - }, - { - "id": 6493, - "guid": "5ac304d8-458e-49f9-a0b8-7a2f739ba81a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Harrison", - "company": "Keytheon", - "phone": "863-539-2277", - "email": "morgan@keytheon.com" - }, - { - "id": 6494, - "guid": "4c35f002-ddc8-4d72-8076-e649f7d6d51f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Carter", - "company": "Safeagra", - "phone": "881-564-3545", - "email": "emily@safeagra.com" - }, - { - "id": 6495, - "guid": "fcdb9882-7e22-4a1d-a7f0-6bba8d23c550", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ariana Carroll", - "company": "Teraserv", - "phone": "867-499-3381", - "email": "ariana@teraserv.com" - }, - { - "id": 6496, - "guid": "adbd6235-30e6-42f5-a7ed-138d2a5ed7de", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Carter", - "company": "Robocomm", - "phone": "868-499-3900", - "email": "andrea@robocomm.com" - }, - { - "id": 6497, - "guid": "5a0eb72d-e2d0-4a5c-9eac-82d35f9158dc", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Natalie Winter", - "company": "Gigaura", - "phone": "826-584-3365", - "email": "natalie@gigaura.com" - }, - { - "id": 6498, - "guid": "59c15970-989c-46fe-b225-cdcffd0bc70c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophia Carrington", - "company": "Aprama", - "phone": "840-562-3114", - "email": "sophia@aprama.com" - }, - { - "id": 6499, - "guid": "13564335-b331-4ec0-8969-a7fd431570d9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Adamson", - "company": "Orthosoft", - "phone": "820-428-3808", - "email": "kimberly@orthosoft.com" - }, - { - "id": 6500, - "guid": "6e1df132-dd49-48a1-8fdc-26ce705e1204", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Gill", - "company": "Teratopia", - "phone": "889-514-3210", - "email": "katelyn@teratopia.com" - }, - { - "id": 6501, - "guid": "bacf618a-dd13-48f8-941f-b1c962e20663", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Hodges", - "company": "Westtomik", - "phone": "816-424-2481", - "email": "caroline@westtomik.com" - }, - { - "id": 6502, - "guid": "d918b36f-6e8d-4404-a513-be6339cef2cb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Ogden", - "company": "Transtouch", - "phone": "895-559-3618", - "email": "isabelle@transtouch.com" - }, - { - "id": 6503, - "guid": "ca56d284-beca-4126-ae72-b664e95c7b47", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Hailey", - "company": "Raylog", - "phone": "808-545-3410", - "email": "lauren@raylog.com" - }, - { - "id": 6504, - "guid": "b1415a14-8bb9-4898-bf1e-6e77a8943391", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Wallace", - "company": "Nanobanc", - "phone": "883-582-3525", - "email": "chloe@nanobanc.com" - }, - { - "id": 6505, - "guid": "4b54c3df-e8af-4e58-b3c3-4ff09ac1f203", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexis Ford", - "company": "Systheon", - "phone": "872-432-2658", - "email": "alexis@systheon.com" - }, - { - "id": 6506, - "guid": "08e05f35-8ec4-4d07-9d73-c0d524c5c468", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Sheldon", - "company": "Hypervaco", - "phone": "800-413-2637", - "email": "amelia@hypervaco.com" - }, - { - "id": 6507, - "guid": "55d8e601-7570-47ee-9b67-acf406e39d4b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Hardman", - "company": "Vencom", - "phone": "897-594-2212", - "email": "taylor@vencom.com" - }, - { - "id": 6508, - "guid": "57341da0-9408-4a9a-9d72-1f24f2925185", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Ogden", - "company": "Tekcar", - "phone": "880-436-2612", - "email": "brooke@tekcar.com" - }, - { - "id": 6509, - "guid": "7555499f-b16b-444c-839d-52000c92a5fa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth Fisher", - "company": "Aluco", - "phone": "808-407-3516", - "email": "elizabeth@aluco.com" - }, - { - "id": 6510, - "guid": "1128470c-bc05-4a92-b856-fa4da7f46894", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Waller", - "company": "Mescaridic", - "phone": "806-504-3257", - "email": "ariana@mescaridic.com" - }, - { - "id": 6511, - "guid": "d615d9b8-3527-457d-8151-e8adf292f4ef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Julia Gibbs", - "company": "Netseco", - "phone": "849-450-2155", - "email": "julia@netseco.com" - }, - { - "id": 6512, - "guid": "0e93736c-0f12-4d0b-a2b6-4f88b2cfbe2a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Chesterton", - "company": "Airdyne", - "phone": "852-543-3025", - "email": "peyton@airdyne.com" - }, - { - "id": 6513, - "guid": "6bb3cfb1-445c-4f99-8d83-f2863bea105b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sarah Smith", - "company": "Fibrotopia", - "phone": "894-454-3300", - "email": "sarah@fibrotopia.com" - }, - { - "id": 6514, - "guid": "331831c6-1b3c-40ac-8134-e4e622a1b957", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Gerald", - "company": "iMedconik", - "phone": "847-495-2312", - "email": "victoria@imedconik.com" - }, - { - "id": 6515, - "guid": "c389e3a9-74da-4a26-bb8c-d2305832b4c8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Watson", - "company": "Syssoft", - "phone": "823-542-2507", - "email": "layla@syssoft.com" - }, - { - "id": 6516, - "guid": "7db0ff94-10ea-4e01-bf66-7f9ea472dcfc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Smith", - "company": "Enlogia", - "phone": "846-496-3058", - "email": "kylie@enlogia.com" - }, - { - "id": 6517, - "guid": "d24b30d8-b9cf-4055-ab9d-fe4ac969aed5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Hodges", - "company": "Celgra", - "phone": "850-433-2296", - "email": "amelia@celgra.com" - }, - { - "id": 6518, - "guid": "46fa216a-3f7b-4366-9fa5-f5fe8cb978b0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Gibbs", - "company": "SysVenamerica", - "phone": "829-466-2481", - "email": "brianna@sysvenamerica.com" - }, - { - "id": 6519, - "guid": "47691d9a-c9ff-4d2c-a6d6-aa7d819dda81", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Nelson", - "company": "RoboAerlogix", - "phone": "838-418-3251", - "email": "brooke@roboaerlogix.com" - }, - { - "id": 6520, - "guid": "2fae51a7-9e83-4d90-98a6-4238a23cfc61", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Morrison", - "company": "Allnet", - "phone": "863-489-3190", - "email": "ariana@allnet.com" - }, - { - "id": 6521, - "guid": "f70e390d-4028-413d-b712-42ab4657c71b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Cook", - "company": "Westmedia", - "phone": "834-564-2580", - "email": "elizabeth@westmedia.com" - }, - { - "id": 6522, - "guid": "ea1297e5-4c88-49e4-a335-fab002949480", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Waller", - "company": "Generola", - "phone": "893-531-2462", - "email": "ava@generola.com" - }, - { - "id": 6523, - "guid": "a5b8c9bb-27dc-4eff-8640-289eaf669d77", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Stanley", - "company": "Cryptotemplate", - "phone": "853-586-3434", - "email": "trinity@cryptotemplate.com" - }, - { - "id": 6524, - "guid": "a9ee9b83-c7d6-48a3-96db-4c046dfc1af6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Sherlock", - "company": "Transtouch", - "phone": "892-531-3412", - "email": "serenity@transtouch.com" - }, - { - "id": 6525, - "guid": "be57eeeb-cdcf-49e7-9760-d67fd920f7a4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn White", - "company": "Openserve", - "phone": "881-422-2849", - "email": "katelyn@openserve.com" - }, - { - "id": 6526, - "guid": "5ce6aa37-52b6-435b-83de-06b30b739eda", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Julia Vance", - "company": "Hypervaco", - "phone": "845-530-3796", - "email": "julia@hypervaco.com" - }, - { - "id": 6527, - "guid": "2cd14936-6bcf-403a-97dc-004729918767", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Chandter", - "company": "Syssoft", - "phone": "820-418-3890", - "email": "madeline@syssoft.com" - }, - { - "id": 6528, - "guid": "3d9b3f07-d105-446b-bf09-6f1738bf7e00", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Faith Fulton", - "company": "iSkyvaco", - "phone": "847-426-2098", - "email": "faith@iskyvaco.com" - }, - { - "id": 6529, - "guid": "266ee76f-9674-41e6-9868-40b3e8309747", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Otis", - "company": "Conotomics", - "phone": "818-591-3946", - "email": "trinity@conotomics.com" - }, - { - "id": 6530, - "guid": "6043224b-0c1c-4416-8cc9-00444b3e41c2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Carey", - "company": "Superscope", - "phone": "832-555-2780", - "email": "madelyn@superscope.com" - }, - { - "id": 6531, - "guid": "6d22ca88-c612-4e5f-95a7-060a36223ad2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Smith", - "company": "Fibroserve", - "phone": "826-491-2262", - "email": "zoey@fibroserve.com" - }, - { - "id": 6532, - "guid": "9cdf1e57-ec66-4f8f-b8de-c06682795a67", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Milton", - "company": "Openserve", - "phone": "864-552-3498", - "email": "claire@openserve.com" - }, - { - "id": 6533, - "guid": "170755bc-a8c2-4a3a-9474-3bf3513c3f68", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Gilbert", - "company": "Skydata", - "phone": "876-411-3264", - "email": "elizabeth@skydata.com" - }, - { - "id": 6534, - "guid": "e0f8073b-ae8f-4a83-b32b-68a70e899a7a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Young", - "company": "Ventanium", - "phone": "875-528-3979", - "email": "molly@ventanium.com" - }, - { - "id": 6535, - "guid": "880d9b8e-6eaa-45c8-8401-d2891753ce4d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Waller", - "company": "Idmax", - "phone": "849-431-3390", - "email": "leah@idmax.com" - }, - { - "id": 6536, - "guid": "16619cd8-2873-41f3-a306-ce9f5cb26310", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Angelina Wallace", - "company": "Raylog", - "phone": "889-475-2676", - "email": "angelina@raylog.com" - }, - { - "id": 6537, - "guid": "5b7f7d5f-9a30-44e8-9a0f-eff764a1b831", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Gill", - "company": "Fibroserve", - "phone": "861-564-2524", - "email": "lillian@fibroserve.com" - }, - { - "id": 6538, - "guid": "c5ba2f05-0337-46f7-a3a4-87bff729e7c4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Gerald", - "company": "Cryptotemplate", - "phone": "802-541-3736", - "email": "bailey@cryptotemplate.com" - }, - { - "id": 6539, - "guid": "7317bfa3-7ec3-463b-8bed-456df12f82fe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Otis", - "company": "Generola", - "phone": "890-483-3583", - "email": "chloe@generola.com" - }, - { - "id": 6540, - "guid": "99e7183a-32b4-4402-ad32-b940a606a951", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Fulton", - "company": "Unconix", - "phone": "850-421-2891", - "email": "riley@unconix.com" - }, - { - "id": 6541, - "guid": "3e24a35d-59cc-4e32-bb2c-1f7795fa4150", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Day", - "company": "Textiqua", - "phone": "812-532-2232", - "email": "katherine@textiqua.com" - }, - { - "id": 6542, - "guid": "4aafff2d-423c-4910-a0db-5b8e3b048dcd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Oldridge", - "company": "Gigaura", - "phone": "888-429-3105", - "email": "amelia@gigaura.com" - }, - { - "id": 6543, - "guid": "775cf6a5-da51-4893-922b-044c41dcd2e9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Carroll", - "company": "Thermotomic", - "phone": "850-494-3339", - "email": "emily@thermotomic.com" - }, - { - "id": 6544, - "guid": "df53c835-a92a-467d-9c75-4b2a9be22e33", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Watson", - "company": "iQualcar", - "phone": "814-597-2467", - "email": "julia@iqualcar.com" - }, - { - "id": 6545, - "guid": "c2748f76-03f5-4ce7-99f7-95f31264938b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Miller", - "company": "Mescatron", - "phone": "804-454-2146", - "email": "zoe@mescatron.com" - }, - { - "id": 6546, - "guid": "8e047aff-27a3-4513-befe-579b702ffe6f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lillian Walkman", - "company": "Unologic", - "phone": "839-416-2425", - "email": "lillian@unologic.com" - }, - { - "id": 6547, - "guid": "0104a09c-e63d-4fc3-bc04-5cc09df7d45d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Chapman", - "company": "Fibroserve", - "phone": "896-508-2475", - "email": "kaitlyn@fibroserve.com" - }, - { - "id": 6548, - "guid": "2aeda66b-adde-471e-9bdc-50329ba4e8ba", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Grace Mercer", - "company": "Nanobanc", - "phone": "871-482-2605", - "email": "grace@nanobanc.com" - }, - { - "id": 6549, - "guid": "2906e786-2ff6-4ad1-a0a6-5d1d05e2276f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Hailey", - "company": "Fibroserve", - "phone": "887-587-3745", - "email": "eva@fibroserve.com" - }, - { - "id": 6550, - "guid": "f3d47fd1-68ab-4cfb-a01f-ee068b91a9c0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Nash", - "company": "Westgate", - "phone": "849-445-2073", - "email": "isabella@westgate.com" - }, - { - "id": 6551, - "guid": "6127b6ae-35a5-40de-8b96-65e3866e829a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Miers", - "company": "iMedconik", - "phone": "816-576-2694", - "email": "emily@imedconik.com" - }, - { - "id": 6552, - "guid": "5b302088-5fb4-4da7-94a8-2765605e596a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Carroll", - "company": "Conotomics", - "phone": "810-583-3468", - "email": "jessica@conotomics.com" - }, - { - "id": 6553, - "guid": "73cb5a38-3cb4-489d-9670-cf39898a798d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaitlyn White", - "company": "Allphysiche", - "phone": "864-480-2653", - "email": "kaitlyn@allphysiche.com" - }, - { - "id": 6554, - "guid": "22122607-ec3d-4b6c-9f32-728b62267473", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Conors", - "company": "Teraserv", - "phone": "874-464-2843", - "email": "vanessa@teraserv.com" - }, - { - "id": 6555, - "guid": "4fe4c324-19e1-4da1-b108-0b2dee79bc28", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Daniels", - "company": "Aluco", - "phone": "869-423-3201", - "email": "kaylee@aluco.com" - }, - { - "id": 6556, - "guid": "05290dee-09b0-4621-86a0-dbe34b1ee757", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Stanley", - "company": "Polytheon", - "phone": "887-513-2991", - "email": "rachel@polytheon.com" - }, - { - "id": 6557, - "guid": "25adfb0d-dae6-4514-aac5-73d08e20c058", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Gustman", - "company": "RoboAerlogix", - "phone": "806-555-3808", - "email": "alexa@roboaerlogix.com" - }, - { - "id": 6558, - "guid": "37f31c3a-8f91-4f04-9e76-40d83949d86f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Nash", - "company": "Airdyne", - "phone": "829-415-3661", - "email": "bella@airdyne.com" - }, - { - "id": 6559, - "guid": "b6c00245-5664-42aa-b8ff-09106cd2631c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Hodges", - "company": "Navivacs", - "phone": "847-540-3377", - "email": "eva@navivacs.com" - }, - { - "id": 6560, - "guid": "189b630a-3d41-41b8-8e9d-7230a7440fea", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Michaelson", - "company": "InfoAirway", - "phone": "820-456-2682", - "email": "allison@infoairway.com" - }, - { - "id": 6561, - "guid": "c8ea8e1a-b65c-4162-baa6-ad46598005ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Carey", - "company": "Netsystems", - "phone": "889-534-2980", - "email": "julia@netsystems.com" - }, - { - "id": 6562, - "guid": "534d56f2-8c87-4d5b-bcb0-8d6a78759136", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Webster", - "company": "Jamrola", - "phone": "878-564-2524", - "email": "kaylee@jamrola.com" - }, - { - "id": 6563, - "guid": "571a01a8-dde7-47c8-9cb0-6166ecf53da7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Murphy", - "company": "Steganoconiche", - "phone": "881-448-2470", - "email": "alexis@steganoconiche.com" - }, - { - "id": 6564, - "guid": "ecc7ccb4-26d9-4bb5-8939-95907359c2e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Goldman", - "company": "US Infratouch", - "phone": "897-402-3280", - "email": "audrey@us infratouch.com" - }, - { - "id": 6565, - "guid": "345b0c56-71fc-4b01-8897-6c63e43426e0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Owen", - "company": "Anaframe", - "phone": "849-577-3111", - "email": "gabriella@anaframe.com" - }, - { - "id": 6566, - "guid": "52e1475c-fe54-4507-8413-16d4df04f5ac", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Walkman", - "company": "RoboAerlogix", - "phone": "894-522-2251", - "email": "anna@roboaerlogix.com" - }, - { - "id": 6567, - "guid": "93adbb3d-a917-4528-83fe-051f188bee46", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Waller", - "company": "Cryptotegrity", - "phone": "837-416-3930", - "email": "emily@cryptotegrity.com" - }, - { - "id": 6568, - "guid": "1bf71a44-1315-42f0-8e9f-ebcf95d6208a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Thomson", - "company": "Hypervaco", - "phone": "871-593-3530", - "email": "sophia@hypervaco.com" - }, - { - "id": 6569, - "guid": "51b9b61c-874e-4e8e-b055-53c32ab2e399", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Conors", - "company": "Teknoplexon", - "phone": "881-504-2148", - "email": "lauren@teknoplexon.com" - }, - { - "id": 6570, - "guid": "5e1dc0b6-af9c-43ea-9f77-6a33e2df7cc5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Adamson", - "company": "Unologic", - "phone": "891-563-2380", - "email": "addison@unologic.com" - }, - { - "id": 6571, - "guid": "f5977525-9379-40d1-a28e-b9f64de6aaa0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Osborne", - "company": "Robotemplate", - "phone": "801-591-2662", - "email": "brianna@robotemplate.com" - }, - { - "id": 6572, - "guid": "f9055199-bc4e-448a-88ee-0d8ecb007d57", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Thomson", - "company": "iEnland", - "phone": "860-567-2395", - "email": "madeline@ienland.com" - }, - { - "id": 6573, - "guid": "4aa38506-53ba-451a-a1af-e2b906fabdc8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Nelson", - "company": "iSkyvaco", - "phone": "809-433-2855", - "email": "kaylee@iskyvaco.com" - }, - { - "id": 6574, - "guid": "7ac902fa-1384-4be0-b63f-79f5842d52d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Oldman", - "company": "Orthomedia", - "phone": "885-556-3854", - "email": "brianna@orthomedia.com" - }, - { - "id": 6575, - "guid": "834b3299-7f96-42cc-bebd-cd7f2e2be0f9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Layla Crossman", - "company": "Videobanc", - "phone": "841-497-2376", - "email": "layla@videobanc.com" - }, - { - "id": 6576, - "guid": "b3ba726d-062b-4fee-ab23-bba9db370b11", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Oswald", - "company": "eEyetanic", - "phone": "854-523-2137", - "email": "alexandra@eeyetanic.com" - }, - { - "id": 6577, - "guid": "e6d7c193-1c31-4d48-9980-90051741777d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Gerald", - "company": "Netsystems", - "phone": "859-432-3888", - "email": "katherine@netsystems.com" - }, - { - "id": 6578, - "guid": "ac55e48a-eaaa-404d-8515-d2fe9bd4a130", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Hailey", - "company": "Qualserve", - "phone": "815-476-3313", - "email": "morgan@qualserve.com" - }, - { - "id": 6579, - "guid": "d163e7e2-aefa-44b2-8a12-98ec44c57654", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Goodman", - "company": "Venconix", - "phone": "855-513-2911", - "email": "gabriella@venconix.com" - }, - { - "id": 6580, - "guid": "2f06eebf-c8f0-4a44-81f8-df7962588112", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Wallace", - "company": "Mescaridic", - "phone": "819-515-2005", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 6581, - "guid": "35c31620-3796-4080-84c0-3bf58698dc87", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Gilmore", - "company": "Technogra", - "phone": "808-426-2840", - "email": "ava@technogra.com" - }, - { - "id": 6582, - "guid": "2ac0bd14-e6a1-44c3-9d4d-b4a9c087185c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Miln", - "company": "Superscope", - "phone": "802-540-3354", - "email": "audrey@superscope.com" - }, - { - "id": 6583, - "guid": "10cb5fdf-eefd-42a3-8e78-5f6d80bdedb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Stanley", - "company": "Aprama", - "phone": "816-586-3167", - "email": "audrey@aprama.com" - }, - { - "id": 6584, - "guid": "96bae200-1461-4e8c-9c90-601cb572fdee", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Chandter", - "company": "Pericenta", - "phone": "890-438-3698", - "email": "katelyn@pericenta.com" - }, - { - "id": 6585, - "guid": "44dbd36d-5230-4c7a-80f6-d18cec63f4a8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Gibbs", - "company": "Unologic", - "phone": "822-405-2963", - "email": "audrey@unologic.com" - }, - { - "id": 6586, - "guid": "ffd77920-bf5a-4a14-9c49-37df776d824f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Miller", - "company": "iSkyvaco", - "phone": "828-445-3102", - "email": "audrey@iskyvaco.com" - }, - { - "id": 6587, - "guid": "2e9366d4-78a0-496e-9365-cbf2a2a1e54c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Stanley", - "company": "Genland", - "phone": "812-440-2432", - "email": "avery@genland.com" - }, - { - "id": 6588, - "guid": "71b13ed1-aa15-40ce-a477-ceb9e43328f1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Brooks", - "company": "Turbomart", - "phone": "886-502-3046", - "email": "nevaeh@turbomart.com" - }, - { - "id": 6589, - "guid": "d9dc9a39-b5a1-4f83-a04f-f0e47c7030bd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Oliver", - "company": "iSkyvaco", - "phone": "872-594-2808", - "email": "sofia@iskyvaco.com" - }, - { - "id": 6590, - "guid": "80d03411-329b-439e-b1de-5e9dd206b5bf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Chesterton", - "company": "Celgra", - "phone": "877-532-3271", - "email": "caroline@celgra.com" - }, - { - "id": 6591, - "guid": "a0e038ea-d109-4ca7-a525-6d475646fa0b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Hamphrey", - "company": "Enlogia", - "phone": "893-457-3795", - "email": "layla@enlogia.com" - }, - { - "id": 6592, - "guid": "78bed2cd-0154-464b-88f1-297dd2433c0b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Milton", - "company": "Teratopia", - "phone": "863-449-2585", - "email": "bailey@teratopia.com" - }, - { - "id": 6593, - "guid": "299679e0-2a54-40e6-8097-7a9fc8aa06b4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Michaelson", - "company": "Interliant", - "phone": "820-565-2934", - "email": "peyton@interliant.com" - }, - { - "id": 6594, - "guid": "23e75806-7f47-4611-b671-421b9b71273f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Oldridge", - "company": "Anagraph", - "phone": "811-431-2662", - "email": "isabelle@anagraph.com" - }, - { - "id": 6595, - "guid": "7dad18de-e895-4852-a567-14b6771a4156", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Wesley", - "company": "Compuamerica", - "phone": "887-427-3817", - "email": "lily@compuamerica.com" - }, - { - "id": 6596, - "guid": "1c9d2d66-b03a-4225-ac07-f760d45bfd24", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Nelson", - "company": "Transtouch", - "phone": "838-540-3788", - "email": "savannah@transtouch.com" - }, - { - "id": 6597, - "guid": "7ba8eae8-3df7-4895-893d-0e2a9a50db86", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Brown", - "company": "Skydata", - "phone": "813-490-3535", - "email": "zoe@skydata.com" - }, - { - "id": 6598, - "guid": "b91bc708-06c5-47e1-937b-8fb80520bcc8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Vance", - "company": "Aluco", - "phone": "832-599-2717", - "email": "julia@aluco.com" - }, - { - "id": 6599, - "guid": "479ebd03-4421-49d0-98cf-eba8c6456baa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emma Creighton", - "company": "Fibrotouch", - "phone": "897-594-3189", - "email": "emma@fibrotouch.com" - }, - { - "id": 6600, - "guid": "ef1dacca-1f46-44f4-9528-4770b5610f75", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoe Thorndike", - "company": "Qualserve", - "phone": "856-515-3263", - "email": "zoe@qualserve.com" - }, - { - "id": 6601, - "guid": "c91bd5f5-0562-4d57-a4ba-27cfb3694580", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Warren", - "company": "Compuamerica", - "phone": "812-432-2873", - "email": "camila@compuamerica.com" - }, - { - "id": 6602, - "guid": "47a7bc39-aed5-4be1-aa96-864ea4741928", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Stanley", - "company": "Polytheon", - "phone": "803-576-2512", - "email": "lauren@polytheon.com" - }, - { - "id": 6603, - "guid": "48dff6c5-dd4d-4e73-ab29-72f373fc9168", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Brickman", - "company": "Teraserv", - "phone": "809-423-3216", - "email": "maria@teraserv.com" - }, - { - "id": 6604, - "guid": "4fa2dc95-dbbe-4673-9052-f7039c71a326", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Michaelson", - "company": "Compuamerica", - "phone": "872-530-3546", - "email": "emily@compuamerica.com" - }, - { - "id": 6605, - "guid": "13687f84-d275-4fba-9862-acc22c576574", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison Turner", - "company": "Pacwest", - "phone": "881-510-3213", - "email": "addison@pacwest.com" - }, - { - "id": 6606, - "guid": "782458ac-36af-4360-8743-f1f28fca4fb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Wayne", - "company": "Cryptotemplate", - "phone": "846-459-3677", - "email": "ava@cryptotemplate.com" - }, - { - "id": 6607, - "guid": "90512c2f-1062-49f4-882b-03ed96e3bb5e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Goldman", - "company": "Ventanium", - "phone": "885-581-2544", - "email": "avery@ventanium.com" - }, - { - "id": 6608, - "guid": "3d053caf-f9cb-4056-93a2-e687c14dfd0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Wainwright", - "company": "Conotomics", - "phone": "876-463-2806", - "email": "jasmine@conotomics.com" - }, - { - "id": 6609, - "guid": "a3b5d90e-1bf5-478a-b879-dfe3a8f71ad8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Higgins", - "company": "Genland", - "phone": "826-548-3908", - "email": "ava@genland.com" - }, - { - "id": 6610, - "guid": "a9f9d2ff-c427-4450-aeed-b4daa06bce57", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bella Day", - "company": "Idmax", - "phone": "823-448-3538", - "email": "bella@idmax.com" - }, - { - "id": 6611, - "guid": "3c7f5e9a-6ba5-4b8d-8eb5-2d24b095f266", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison White", - "company": "eSteganoergy", - "phone": "843-565-2459", - "email": "madison@esteganoergy.com" - }, - { - "id": 6612, - "guid": "7da9d762-4dce-44bb-ac78-09cb7b8578e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Nelson", - "company": "Nanobanc", - "phone": "875-401-2969", - "email": "alexa@nanobanc.com" - }, - { - "id": 6613, - "guid": "a5274d8d-3c79-422b-802f-51f324a3ef94", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Otis", - "company": "Ameritron", - "phone": "809-486-3817", - "email": "elizabeth@ameritron.com" - }, - { - "id": 6614, - "guid": "b78c5abc-a014-4808-a042-6345378c4ec4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gianna Vance", - "company": "Teratopia", - "phone": "894-406-3256", - "email": "gianna@teratopia.com" - }, - { - "id": 6615, - "guid": "4d427add-4505-4492-bd35-946bcc4b8b65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Murphy", - "company": "Pericenta", - "phone": "809-470-2090", - "email": "ava@pericenta.com" - }, - { - "id": 6616, - "guid": "6547502a-c951-4c15-81e8-2ccb4a92266f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Vanessa Cook", - "company": "US Infratouch", - "phone": "835-440-2706", - "email": "vanessa@us infratouch.com" - }, - { - "id": 6617, - "guid": "3869a5a5-e923-430c-9ad7-aefc61254481", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Chandter", - "company": "Infragraph", - "phone": "861-581-2878", - "email": "caroline@infragraph.com" - }, - { - "id": 6618, - "guid": "19aae19a-ff90-41e8-ab2f-420fa21dc894", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Michaelson", - "company": "Inridium", - "phone": "804-415-3139", - "email": "sophie@inridium.com" - }, - { - "id": 6619, - "guid": "a66daa26-1882-4645-843a-c742b8ccc7f6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Warren", - "company": "eEyetanic", - "phone": "815-417-2802", - "email": "camila@eeyetanic.com" - }, - { - "id": 6620, - "guid": "b817c242-a600-40a3-983a-3ef0c9a7eb76", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mia Oswald", - "company": "Indisco", - "phone": "862-502-3243", - "email": "mia@indisco.com" - }, - { - "id": 6621, - "guid": "4fb8d535-f333-43ae-818a-7cd955936952", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Hoggarth", - "company": "Safetrust", - "phone": "888-533-2761", - "email": "charlotte@safetrust.com" - }, - { - "id": 6622, - "guid": "304bf264-509d-410d-9a61-62c4c256e52e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Brickman", - "company": "Netsystems", - "phone": "808-568-3310", - "email": "katherine@netsystems.com" - }, - { - "id": 6623, - "guid": "e5fe140d-fdaf-4e5c-a36b-8dda10ef1a84", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Gate", - "company": "Hypervaco", - "phone": "888-552-2699", - "email": "kylie@hypervaco.com" - }, - { - "id": 6624, - "guid": "e91edf3b-3e67-41ce-8fdd-63572076145d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Turner", - "company": "Aprama", - "phone": "881-506-3074", - "email": "anna@aprama.com" - }, - { - "id": 6625, - "guid": "2018c76f-2c1f-4fb7-af04-c1e503cc7650", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Gibbs", - "company": "Westgate", - "phone": "864-593-2996", - "email": "kaitlyn@westgate.com" - }, - { - "id": 6626, - "guid": "badde910-4f4a-43de-b646-752e2b2d1877", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Stanley", - "company": "Netseco", - "phone": "828-588-3890", - "email": "lauren@netseco.com" - }, - { - "id": 6627, - "guid": "16876115-4578-4c1c-9800-0c20d286d355", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Waller", - "company": "Pericenta", - "phone": "859-485-3131", - "email": "julia@pericenta.com" - }, - { - "id": 6628, - "guid": "b19d9c5e-337f-4d37-8982-a6c0cfc751b0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Thomson", - "company": "Teraserv", - "phone": "823-405-3963", - "email": "olivia@teraserv.com" - }, - { - "id": 6629, - "guid": "051cd5c1-f15e-4bc8-a389-83b1642c7126", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Gardner", - "company": "Proline", - "phone": "889-508-2242", - "email": "alexis@proline.com" - }, - { - "id": 6630, - "guid": "1a4c3865-dca6-4bdc-ba07-c88a8055b4ef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Ogden", - "company": "Quintegrity", - "phone": "868-572-3665", - "email": "trinity@quintegrity.com" - }, - { - "id": 6631, - "guid": "6295497e-7960-4183-89fb-1a329aff193c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Carey", - "company": "Conotomics", - "phone": "817-537-2660", - "email": "brooke@conotomics.com" - }, - { - "id": 6632, - "guid": "79b4447d-c21a-43af-9180-89f5d01866c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Ward", - "company": "Aluco", - "phone": "898-455-3175", - "email": "melanie@aluco.com" - }, - { - "id": 6633, - "guid": "4f8982ac-cbc4-4246-98ae-5c5b0821d77e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Chandter", - "company": "Gigaura", - "phone": "871-413-2730", - "email": "hailey@gigaura.com" - }, - { - "id": 6634, - "guid": "8fbfbc10-c386-4802-9b27-8f467c44e0d2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Hawkins", - "company": "Proline", - "phone": "864-489-2562", - "email": "faith@proline.com" - }, - { - "id": 6635, - "guid": "a7a691dd-ca1f-4cb5-9ea4-6ee1a6721453", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Hawkins", - "company": "Fibroserve", - "phone": "857-479-3894", - "email": "payton@fibroserve.com" - }, - { - "id": 6636, - "guid": "00234482-cc87-4757-a92b-0b9d4fc0a3d4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Nash", - "company": "Tekcar", - "phone": "838-576-2256", - "email": "arianna@tekcar.com" - }, - { - "id": 6637, - "guid": "fdc4ea0b-b2dd-48b4-adb1-a3f88c52ee33", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Sherlock", - "company": "Navivacs", - "phone": "858-416-2455", - "email": "evelyn@navivacs.com" - }, - { - "id": 6638, - "guid": "fb88a0ab-cabb-43a3-8865-c5f06d60e586", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Campbell", - "company": "Sontopia", - "phone": "839-579-2038", - "email": "nevaeh@sontopia.com" - }, - { - "id": 6639, - "guid": "ac95d936-0184-43b8-b153-7f934f364dca", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Clapton", - "company": "Robocomm", - "phone": "842-584-2346", - "email": "maria@robocomm.com" - }, - { - "id": 6640, - "guid": "cb6fe098-1d8e-4c67-b328-83086fada5b1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Gustman", - "company": "Technogra", - "phone": "845-412-2971", - "email": "savannah@technogra.com" - }, - { - "id": 6641, - "guid": "025ec749-23e5-4cab-aaf3-aa3c25ad342e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Autumn Walkman", - "company": "Infraique", - "phone": "884-444-3481", - "email": "autumn@infraique.com" - }, - { - "id": 6642, - "guid": "fe6e68ea-0cdf-4b42-8489-21a10b416510", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Gardner", - "company": "RoboAerlogix", - "phone": "830-546-2497", - "email": "kaylee@roboaerlogix.com" - }, - { - "id": 6643, - "guid": "57423275-1117-49b2-8e52-e96dc656b979", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hannah Brooks", - "company": "Dynarama", - "phone": "883-469-3775", - "email": "hannah@dynarama.com" - }, - { - "id": 6644, - "guid": "b41695c6-7171-4f00-a36d-60cabd124a11", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Gibbs", - "company": "Mescaridic", - "phone": "888-475-3819", - "email": "mackenzie@mescaridic.com" - }, - { - "id": 6645, - "guid": "a0ec2b2e-27c6-4b52-896a-b323d7c62f23", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Angelina Adamson", - "company": "eEyetanic", - "phone": "827-443-3077", - "email": "angelina@eeyetanic.com" - }, - { - "id": 6646, - "guid": "8ac11717-47ca-4080-bb7d-f5bfbd4480d4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Grace Oliver", - "company": "Technogra", - "phone": "840-491-3098", - "email": "grace@technogra.com" - }, - { - "id": 6647, - "guid": "e26d6445-bb4c-4818-9200-2e0850035ec7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Hamphrey", - "company": "Conrama", - "phone": "882-575-3404", - "email": "gianna@conrama.com" - }, - { - "id": 6648, - "guid": "f1bd19ed-b897-45a5-9ab2-21caf7523e23", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Oswald", - "company": "Keytheon", - "phone": "821-460-3259", - "email": "isabelle@keytheon.com" - }, - { - "id": 6649, - "guid": "b8b43b36-08a9-472b-88d7-52b1cbc03dc8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Clapton", - "company": "Jamrola", - "phone": "893-432-3730", - "email": "arianna@jamrola.com" - }, - { - "id": 6650, - "guid": "8de801c7-3d24-43c8-a7e1-830171eeb38e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Chesterton", - "company": "Openserve", - "phone": "813-451-3470", - "email": "ariana@openserve.com" - }, - { - "id": 6651, - "guid": "80ee8240-2d1c-4997-935f-3ed890e39cb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Gardner", - "company": "SysVenamerica", - "phone": "830-412-3040", - "email": "olivia@sysvenamerica.com" - }, - { - "id": 6652, - "guid": "b832854c-c8e8-4588-adb4-fc9b4b0f2a0e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Brooks", - "company": "Jamrola", - "phone": "862-556-3636", - "email": "gabriella@jamrola.com" - }, - { - "id": 6653, - "guid": "8d69b960-a35b-4dd0-85a3-3213e63af810", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Vance", - "company": "RoboAerlogix", - "phone": "823-566-3043", - "email": "destiny@roboaerlogix.com" - }, - { - "id": 6654, - "guid": "e3fb4461-33c9-4b5a-9351-e15e303d627e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Timmons", - "company": "Robotomic", - "phone": "882-462-3646", - "email": "katelyn@robotomic.com" - }, - { - "id": 6655, - "guid": "ea9a0272-1589-405e-b3d5-52cf8ec4bd63", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Thomson", - "company": "US Omnigraphik", - "phone": "841-486-2889", - "email": "destiny@us omnigraphik.com" - }, - { - "id": 6656, - "guid": "236e83bd-3e26-491b-9198-bb3397a8b9dd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Osborne", - "company": "Ventanium", - "phone": "843-490-2829", - "email": "lillian@ventanium.com" - }, - { - "id": 6657, - "guid": "1d676578-f752-412c-83b5-b5f42dc77384", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine White", - "company": "Mescatron", - "phone": "840-584-3371", - "email": "jasmine@mescatron.com" - }, - { - "id": 6658, - "guid": "9b3fe83b-7866-4ea2-a7ee-433ae2bbfe7a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Timmons", - "company": "Anagraph", - "phone": "879-482-2524", - "email": "elizabeth@anagraph.com" - }, - { - "id": 6659, - "guid": "984ea477-7823-4dbc-a0d9-81d7fb67607b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Smith", - "company": "Thermotomic", - "phone": "801-495-2928", - "email": "audrey@thermotomic.com" - }, - { - "id": 6660, - "guid": "bb6eb46f-c985-4119-b02a-2604780b97bc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Miller", - "company": "OpKeycomm", - "phone": "843-511-2066", - "email": "nevaeh@opkeycomm.com" - }, - { - "id": 6661, - "guid": "27be0f18-950c-420f-ba93-e93547cca19e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Cramer", - "company": "SysVenamerica", - "phone": "803-568-3664", - "email": "trinity@sysvenamerica.com" - }, - { - "id": 6662, - "guid": "db56ced9-5de4-466b-968f-742f028a17e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Morrison", - "company": "Netseco", - "phone": "824-520-2295", - "email": "aubrey@netseco.com" - }, - { - "id": 6663, - "guid": "ef2723ca-2f73-478b-afb4-f8a9620fc335", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Stanley", - "company": "OpKeycomm", - "phone": "897-467-3657", - "email": "sarah@opkeycomm.com" - }, - { - "id": 6664, - "guid": "cbc06751-80d6-4436-bc97-6a91a3da8a9d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaitlyn White", - "company": "Interliant", - "phone": "846-440-3886", - "email": "kaitlyn@interliant.com" - }, - { - "id": 6665, - "guid": "089caafa-85f2-4609-b4b0-66e31961a337", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Watson", - "company": "Thermotomic", - "phone": "816-551-2513", - "email": "morgan@thermotomic.com" - }, - { - "id": 6666, - "guid": "ed8893c3-8383-4c31-8d78-29bd5e2f0ae6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sofia Nathan", - "company": "Unologic", - "phone": "855-591-3097", - "email": "sofia@unologic.com" - }, - { - "id": 6667, - "guid": "c7335648-840c-4ccd-95b4-7f34b884ffde", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Nathan", - "company": "Tekcar", - "phone": "851-525-3433", - "email": "mya@tekcar.com" - }, - { - "id": 6668, - "guid": "4af4c7eb-7314-4d46-aa08-ec4c9a66f293", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Carey", - "company": "Superscope", - "phone": "831-484-3875", - "email": "hannah@superscope.com" - }, - { - "id": 6669, - "guid": "e24dcb1b-13d1-414b-8804-8fec94043b8d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madeline Bush", - "company": "Westgate", - "phone": "893-547-3761", - "email": "madeline@westgate.com" - }, - { - "id": 6670, - "guid": "591d5fb3-7a85-4a55-8f39-d39350a518f3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Sheldon", - "company": "RoboAerlogix", - "phone": "883-483-3540", - "email": "peyton@roboaerlogix.com" - }, - { - "id": 6671, - "guid": "cd660227-2e0e-4733-bd4f-734a58807ae4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Chesterton", - "company": "Unconix", - "phone": "841-411-3667", - "email": "grace@unconix.com" - }, - { - "id": 6672, - "guid": "f9c5f8bb-23d8-4854-bb66-f17919cfac75", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Neal", - "company": "Westgate", - "phone": "891-596-2785", - "email": "allison@westgate.com" - }, - { - "id": 6673, - "guid": "d6b0a26d-7474-4792-b300-09cddf491f48", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Wood", - "company": "Raylog", - "phone": "870-547-3600", - "email": "madison@raylog.com" - }, - { - "id": 6674, - "guid": "e8426c3e-8865-4183-9ac6-1f10e90804ce", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria White", - "company": "Ameritron", - "phone": "867-530-2790", - "email": "maria@ameritron.com" - }, - { - "id": 6675, - "guid": "d21ac4be-0f7d-497f-9fdf-f3cf6efb5351", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Day", - "company": "Hypervaco", - "phone": "877-463-3700", - "email": "natalie@hypervaco.com" - }, - { - "id": 6676, - "guid": "f3ab42b3-ad88-49d0-84aa-7569f9705e54", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Webster", - "company": "Syssoft", - "phone": "875-429-2617", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 6677, - "guid": "42535e32-59a7-4fb5-b415-84ad6f9d5879", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Michaelson", - "company": "Netseco", - "phone": "862-490-2211", - "email": "mia@netseco.com" - }, - { - "id": 6678, - "guid": "75264e76-d755-443a-9bc9-04b981bdf56b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Neal", - "company": "OpKeycomm", - "phone": "892-539-3772", - "email": "savannah@opkeycomm.com" - }, - { - "id": 6679, - "guid": "af6783e0-e295-4dfb-a994-4c80a27601ee", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Goodman", - "company": "Superscope", - "phone": "819-503-3115", - "email": "peyton@superscope.com" - }, - { - "id": 6680, - "guid": "c91d489f-eba9-4c77-964a-74e00e918195", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity Otis", - "company": "Sontopia", - "phone": "840-409-3429", - "email": "trinity@sontopia.com" - }, - { - "id": 6681, - "guid": "34996a31-b2c6-402c-989a-cfb58c56cdb1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Victoria Warren", - "company": "Safetrust", - "phone": "827-582-3281", - "email": "victoria@safetrust.com" - }, - { - "id": 6682, - "guid": "78a8ed89-4b3f-43d9-a1ef-dba9720491c3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe White", - "company": "Dynarama", - "phone": "871-535-2224", - "email": "khloe@dynarama.com" - }, - { - "id": 6683, - "guid": "8a4af13d-4177-4de2-bdda-b1bbac6c93f7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Davidson", - "company": "Anagraph", - "phone": "890-600-2057", - "email": "genesis@anagraph.com" - }, - { - "id": 6684, - "guid": "0d715016-a501-41d9-8258-f0d0eec19ad2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Charlson", - "company": "Truegate", - "phone": "829-509-3770", - "email": "ariana@truegate.com" - }, - { - "id": 6685, - "guid": "065306eb-6e89-4708-b478-856682f2a195", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Crossman", - "company": "Fibrotopia", - "phone": "877-453-2417", - "email": "mia@fibrotopia.com" - }, - { - "id": 6686, - "guid": "13ecbfce-33af-4c98-8daf-1f18b9fd9cd1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Clapton", - "company": "Steganoconiche", - "phone": "830-499-2171", - "email": "leah@steganoconiche.com" - }, - { - "id": 6687, - "guid": "0eb776d8-10ed-48e3-ba39-e6be09c34b55", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Campbell", - "company": "Cryptotemplate", - "phone": "839-421-3911", - "email": "katherine@cryptotemplate.com" - }, - { - "id": 6688, - "guid": "f4de3e90-b575-4a75-b210-c32c51056836", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Young", - "company": "Anagraph", - "phone": "852-520-3436", - "email": "sarah@anagraph.com" - }, - { - "id": 6689, - "guid": "07326c2b-ce80-4f7f-978a-ab5bd9ed7f35", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Nathan", - "company": "Enlogia", - "phone": "879-414-3187", - "email": "sydney@enlogia.com" - }, - { - "id": 6690, - "guid": "4cb67ba6-bbd7-4803-8ee3-1d177e3c6825", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Neal", - "company": "SysUSA", - "phone": "894-451-3096", - "email": "gabrielle@sysusa.com" - }, - { - "id": 6691, - "guid": "62722068-b8c1-42cb-bff1-c16d7d948e84", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Young", - "company": "Textiqua", - "phone": "849-562-3544", - "email": "bella@textiqua.com" - }, - { - "id": 6692, - "guid": "f443f52a-68cf-42c6-a4f1-674d2c4569eb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Chandter", - "company": "Interliant", - "phone": "808-438-3784", - "email": "leah@interliant.com" - }, - { - "id": 6693, - "guid": "730bbcbd-e319-47b1-a321-676a124d4acb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Clapton", - "company": "Openserve", - "phone": "819-580-2773", - "email": "katelyn@openserve.com" - }, - { - "id": 6694, - "guid": "70aca44d-c42e-43f3-a9e8-ef6755991b66", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Daniels", - "company": "Anagraph", - "phone": "844-525-2589", - "email": "emily@anagraph.com" - }, - { - "id": 6695, - "guid": "61c501da-25a7-4f69-987a-61efd0ccd039", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Oldman", - "company": "Dynarama", - "phone": "840-487-2979", - "email": "nevaeh@dynarama.com" - }, - { - "id": 6696, - "guid": "519bfb03-89ac-4249-9d86-68f63e9339e8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Young", - "company": "Truetomic", - "phone": "843-525-3807", - "email": "katherine@truetomic.com" - }, - { - "id": 6697, - "guid": "cfa08d3b-d388-4ef4-9a4d-16de98573a33", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Michaelson", - "company": "iEnland", - "phone": "872-489-3594", - "email": "alexis@ienland.com" - }, - { - "id": 6698, - "guid": "a6db6339-ce65-454d-a754-4637baf6fa79", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Campbell", - "company": "Textiqua", - "phone": "845-409-3602", - "email": "madelyn@textiqua.com" - }, - { - "id": 6699, - "guid": "89acadf9-9a0d-4ad9-9696-1af843433bb8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ashley Milton", - "company": "Raylog", - "phone": "899-585-2986", - "email": "ashley@raylog.com" - }, - { - "id": 6700, - "guid": "faf48131-67ec-40a2-a544-a38d44dfdfe6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Molligan", - "company": "Nanobanc", - "phone": "805-595-3094", - "email": "gabriella@nanobanc.com" - }, - { - "id": 6701, - "guid": "81c294d5-9c43-4a5e-a90f-a73829064a5d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Nathan", - "company": "Techtron", - "phone": "801-485-2403", - "email": "molly@techtron.com" - }, - { - "id": 6702, - "guid": "97d68ce8-f04d-4561-a980-1bbda97e1d5c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Morrison", - "company": "RoboAerlogix", - "phone": "862-439-3437", - "email": "maya@roboaerlogix.com" - }, - { - "id": 6703, - "guid": "18e4e16f-da48-4797-99ff-9ba5ae78ce4f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Hardman", - "company": "SysVenamerica", - "phone": "893-530-3517", - "email": "valeria@sysvenamerica.com" - }, - { - "id": 6704, - "guid": "9b91a841-3a0c-47ff-9e99-5820dc971d2d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Vance", - "company": "iSkyvaco", - "phone": "890-498-2520", - "email": "zoe@iskyvaco.com" - }, - { - "id": 6705, - "guid": "c15dcc75-8159-4118-b634-5d323c911729", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alyssa Hardman", - "company": "Teratopia", - "phone": "881-526-2995", - "email": "alyssa@teratopia.com" - }, - { - "id": 6706, - "guid": "dea2192c-f8a8-45d1-9739-18ec043a6703", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Turner", - "company": "Conrama", - "phone": "848-598-2539", - "email": "charlotte@conrama.com" - }, - { - "id": 6707, - "guid": "cae39584-bdb0-43fe-8df2-9642b0a57d92", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Hardman", - "company": "Venconix", - "phone": "820-595-3690", - "email": "gabriella@venconix.com" - }, - { - "id": 6708, - "guid": "84f2f496-1035-4b3b-9601-2650b2330462", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mia Young", - "company": "Teratopia", - "phone": "890-584-3007", - "email": "mia@teratopia.com" - }, - { - "id": 6709, - "guid": "e0aa1efb-ec74-4294-8170-ddc67268f06a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Valeria Brown", - "company": "Cryptotegrity", - "phone": "810-478-3739", - "email": "valeria@cryptotegrity.com" - }, - { - "id": 6710, - "guid": "4a49caf6-b028-45ae-9ddb-c0390ee92c65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madison Milton", - "company": "Robocomm", - "phone": "861-429-3792", - "email": "madison@robocomm.com" - }, - { - "id": 6711, - "guid": "91c208de-4ee3-4f3d-9d6a-f9cf044d707b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Conors", - "company": "iQualcar", - "phone": "826-405-3121", - "email": "audrey@iqualcar.com" - }, - { - "id": 6712, - "guid": "e65a0ca9-53db-40f4-93d4-b14830589758", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Morrison", - "company": "Robotemplate", - "phone": "853-423-2817", - "email": "julia@robotemplate.com" - }, - { - "id": 6713, - "guid": "96ddb955-a81c-42e5-9cb8-5f6ccdacba24", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Wood", - "company": "Compuamerica", - "phone": "889-544-2606", - "email": "hannah@compuamerica.com" - }, - { - "id": 6714, - "guid": "1b4f6fdf-c442-4aa6-ab37-81d2134b27b5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Adamson", - "company": "Generola", - "phone": "811-519-3018", - "email": "valeria@generola.com" - }, - { - "id": 6715, - "guid": "20e6247e-b448-427b-a12e-654267e12936", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Croftoon", - "company": "Aluco", - "phone": "814-424-2137", - "email": "camila@aluco.com" - }, - { - "id": 6716, - "guid": "f3ecaa66-fe57-4c4d-800d-aabb457b4e31", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Galbraith", - "company": "Pericenta", - "phone": "876-472-2251", - "email": "kayla@pericenta.com" - }, - { - "id": 6717, - "guid": "26c7a034-e952-4bb7-a689-a29fe9d698ce", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Youmans", - "company": "Fibrotouch", - "phone": "831-409-2286", - "email": "evelyn@fibrotouch.com" - }, - { - "id": 6718, - "guid": "9d4d99ce-7f18-4908-91aa-7f04e874f881", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Daniels", - "company": "Safetrust", - "phone": "882-457-2435", - "email": "claire@safetrust.com" - }, - { - "id": 6719, - "guid": "ef46572e-1476-4349-99c2-e68657486e4c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Gilson", - "company": "Infraique", - "phone": "805-402-3198", - "email": "claire@infraique.com" - }, - { - "id": 6720, - "guid": "0db41569-a0e3-457f-9982-a19fe6bc06cc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Miers", - "company": "Generola", - "phone": "897-450-3859", - "email": "taylor@generola.com" - }, - { - "id": 6721, - "guid": "0ca63805-e09b-4685-afff-3ff302f9f9aa", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Wood", - "company": "Pacwest", - "phone": "897-484-3454", - "email": "alexa@pacwest.com" - }, - { - "id": 6722, - "guid": "bc0992ae-3c6a-4fc9-a658-4f95a1f537f3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexa Croftoon", - "company": "Aprama", - "phone": "820-502-3773", - "email": "alexa@aprama.com" - }, - { - "id": 6723, - "guid": "cce4a3f4-6514-4c1d-8ed1-ce8997849813", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Calhoun", - "company": "iSkyvaco", - "phone": "861-558-3971", - "email": "sophie@iskyvaco.com" - }, - { - "id": 6724, - "guid": "0fc22477-c488-4a46-80df-8b770c7cadad", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Abigail Wesley", - "company": "Sontopia", - "phone": "885-500-3335", - "email": "abigail@sontopia.com" - }, - { - "id": 6725, - "guid": "6e7cc48b-13a6-44d1-b250-2e5216a0e84b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Timmons", - "company": "Entcast", - "phone": "830-410-3062", - "email": "bella@entcast.com" - }, - { - "id": 6726, - "guid": "983068bb-918f-4d47-b90a-141a85e85f6f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Abramson", - "company": "Qualserve", - "phone": "811-438-2263", - "email": "emily@qualserve.com" - }, - { - "id": 6727, - "guid": "4c64b195-f1c6-4b66-a840-e0bb58952b3e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Morrison", - "company": "Mescaridic", - "phone": "889-453-3479", - "email": "grace@mescaridic.com" - }, - { - "id": 6728, - "guid": "6bf21fe4-1218-4372-b048-d24fb917cf57", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Gerald", - "company": "Orthosoft", - "phone": "802-441-3256", - "email": "olivia@orthosoft.com" - }, - { - "id": 6729, - "guid": "5febb8f6-5934-485b-ae1d-21aeaf29bd81", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Fulton", - "company": "Cryptotegrity", - "phone": "830-528-2697", - "email": "camila@cryptotegrity.com" - }, - { - "id": 6730, - "guid": "14c31303-04eb-466b-a353-3cff2d82b6a6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Brickman", - "company": "Robotomic", - "phone": "891-407-2305", - "email": "sydney@robotomic.com" - }, - { - "id": 6731, - "guid": "2118376f-7e5a-42ce-9709-147ba2f9866b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Brickman", - "company": "Robotomic", - "phone": "881-556-3966", - "email": "sarah@robotomic.com" - }, - { - "id": 6732, - "guid": "d15cc7c8-92d7-45ae-8709-fec9cecaf5d3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kimberly Sheldon", - "company": "Cryptotemplate", - "phone": "825-496-3831", - "email": "kimberly@cryptotemplate.com" - }, - { - "id": 6733, - "guid": "022f2be6-a8b1-44f3-a726-babbaa0ea09e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mia Wesley", - "company": "Infragraph", - "phone": "867-520-2504", - "email": "mia@infragraph.com" - }, - { - "id": 6734, - "guid": "0b071a15-a9e3-45d3-9296-6f6cf225a79c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Galbraith", - "company": "Truetomic", - "phone": "836-590-3796", - "email": "kaylee@truetomic.com" - }, - { - "id": 6735, - "guid": "584058e3-320a-487d-8923-3eb711e41ee0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Hamphrey", - "company": "Polytheon", - "phone": "800-509-2490", - "email": "alyssa@polytheon.com" - }, - { - "id": 6736, - "guid": "39b679ff-c91e-466a-9f0b-722bdc506112", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Gerald", - "company": "Ventanium", - "phone": "897-540-2839", - "email": "emma@ventanium.com" - }, - { - "id": 6737, - "guid": "9f5b2b18-d212-4b2c-a51a-85ffdf6123ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Goodman", - "company": "Entcast", - "phone": "884-502-2637", - "email": "charlotte@entcast.com" - }, - { - "id": 6738, - "guid": "85329e12-67b4-4b76-81a8-c24fdc65b299", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Stanley", - "company": "Teratopia", - "phone": "869-430-3241", - "email": "emma@teratopia.com" - }, - { - "id": 6739, - "guid": "28fb830a-7dfc-4ded-bcbe-7dff17643217", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ashley Daniels", - "company": "Compuamerica", - "phone": "864-501-3478", - "email": "ashley@compuamerica.com" - }, - { - "id": 6740, - "guid": "227ed7a3-7b74-4f67-9e57-19f42620be24", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Goldman", - "company": "Skydata", - "phone": "856-567-3149", - "email": "lauren@skydata.com" - }, - { - "id": 6741, - "guid": "70e9accd-106c-4131-b49e-b422bde4cec1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Vaughan", - "company": "Generola", - "phone": "848-418-3094", - "email": "paige@generola.com" - }, - { - "id": 6742, - "guid": "5c989632-a70a-45a8-b0a8-667d5c75909c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Murphy", - "company": "Entcast", - "phone": "861-541-3388", - "email": "madeline@entcast.com" - }, - { - "id": 6743, - "guid": "ecd35919-b8f4-4bd7-ad42-ebec7e553c71", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Addison Day", - "company": "Rapigrafix", - "phone": "860-427-2802", - "email": "addison@rapigrafix.com" - }, - { - "id": 6744, - "guid": "30cc326e-bbcc-4f1f-bfd1-b86a704e0e13", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Wainwright", - "company": "Syssoft", - "phone": "864-477-3138", - "email": "olivia@syssoft.com" - }, - { - "id": 6745, - "guid": "d32eee18-23d6-457e-bacc-2ee5c2a0e428", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Wood", - "company": "Steganoconiche", - "phone": "804-508-3421", - "email": "caroline@steganoconiche.com" - }, - { - "id": 6746, - "guid": "028b7726-ed61-4364-b951-7968f6e0f9a1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Conors", - "company": "Aprama", - "phone": "803-444-3760", - "email": "amelia@aprama.com" - }, - { - "id": 6747, - "guid": "36101e9b-593b-45be-b251-624d9f9e283c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Mercer", - "company": "Orthomedia", - "phone": "870-598-2569", - "email": "chloe@orthomedia.com" - }, - { - "id": 6748, - "guid": "05c011cf-8bc6-4381-9d51-0e822073ef60", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Wayne", - "company": "Fibrotopia", - "phone": "846-519-2215", - "email": "natalie@fibrotopia.com" - }, - { - "id": 6749, - "guid": "04ee71fa-4287-41ce-b1ac-89b11bf125a5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Hailey", - "company": "Generola", - "phone": "895-572-2944", - "email": "jasmine@generola.com" - }, - { - "id": 6750, - "guid": "d43dfaf7-8cd4-488d-932c-8b59275f4cae", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Creighton", - "company": "Teratopia", - "phone": "851-582-2613", - "email": "rachel@teratopia.com" - }, - { - "id": 6751, - "guid": "a197e045-0035-49ea-834d-4d729eed1e3e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Stanley", - "company": "Safeagra", - "phone": "820-548-3001", - "email": "leah@safeagra.com" - }, - { - "id": 6752, - "guid": "90982423-23ca-4043-9951-7f99b99b30cb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Valeria Davidson", - "company": "Vencom", - "phone": "809-555-2347", - "email": "valeria@vencom.com" - }, - { - "id": 6753, - "guid": "989c67a3-1f3a-46a1-94ef-8786081f92f6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Day", - "company": "Compuamerica", - "phone": "880-511-3288", - "email": "julia@compuamerica.com" - }, - { - "id": 6754, - "guid": "6816ad0d-8f63-4240-b3c5-c85ee15b1553", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Payton Timmons", - "company": "Westmedia", - "phone": "841-585-2455", - "email": "payton@westmedia.com" - }, - { - "id": 6755, - "guid": "36eb4681-9e65-4580-ae6e-b0d2486de9a2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Peyton Walkman", - "company": "Conotomics", - "phone": "893-531-2267", - "email": "peyton@conotomics.com" - }, - { - "id": 6756, - "guid": "29229ea1-3856-4f54-8c2e-ce0284a427b2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Miers", - "company": "InfoAirway", - "phone": "898-522-2156", - "email": "serenity@infoairway.com" - }, - { - "id": 6757, - "guid": "4d48c672-52b5-4759-a7bb-1cfd52e9c0c0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Michaelson", - "company": "Anaframe", - "phone": "803-459-2572", - "email": "ashley@anaframe.com" - }, - { - "id": 6758, - "guid": "23b3dbaf-b3f9-46cb-b58f-26c9835e00cf", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Brooks", - "company": "Vencom", - "phone": "823-408-3582", - "email": "julia@vencom.com" - }, - { - "id": 6759, - "guid": "a993f5e6-0b8d-48cf-9880-b87ac0cc5c12", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Carrington", - "company": "Safeagra", - "phone": "891-423-2982", - "email": "kaylee@safeagra.com" - }, - { - "id": 6760, - "guid": "f568c992-73c5-44e4-af8a-d4116cdb0712", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Hailey", - "company": "Allnet", - "phone": "889-426-3710", - "email": "ashley@allnet.com" - }, - { - "id": 6761, - "guid": "458a4e46-b8ed-48f7-b93b-a247a544ba1d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Cramer", - "company": "Systheon", - "phone": "842-495-2127", - "email": "gabrielle@systheon.com" - }, - { - "id": 6762, - "guid": "f90fa24e-2bd3-4e8a-8df1-735ee1ff9376", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Thorndike", - "company": "Titanigraf", - "phone": "875-488-3221", - "email": "makayla@titanigraf.com" - }, - { - "id": 6763, - "guid": "1d17e9fb-e18c-4164-ae62-28f03f25cc9e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Chesterton", - "company": "Entcast", - "phone": "829-442-2935", - "email": "sophie@entcast.com" - }, - { - "id": 6764, - "guid": "4751c160-f41d-40eb-95e5-f6b94edd048f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Wesley", - "company": "Openserve", - "phone": "883-540-2589", - "email": "gabrielle@openserve.com" - }, - { - "id": 6765, - "guid": "88f85502-20c5-4d48-a463-5269c4e77fec", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Timmons", - "company": "Nanobanc", - "phone": "839-432-3404", - "email": "samantha@nanobanc.com" - }, - { - "id": 6766, - "guid": "75bc246d-5100-4a03-aa77-37b8b94a509c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Smith", - "company": "Thermotomic", - "phone": "811-466-3552", - "email": "layla@thermotomic.com" - }, - { - "id": 6767, - "guid": "eb9afb63-6c99-43c7-8d61-0f198fd8884c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Milton", - "company": "Generola", - "phone": "871-576-3777", - "email": "ava@generola.com" - }, - { - "id": 6768, - "guid": "8c084b70-9665-43eb-96af-7ff4afa56df2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Carey", - "company": "Skydata", - "phone": "805-414-3458", - "email": "mya@skydata.com" - }, - { - "id": 6769, - "guid": "6ec2727b-9839-4d7a-8b76-67120680b83b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Gilmore", - "company": "eSteganoergy", - "phone": "869-537-2965", - "email": "alexandra@esteganoergy.com" - }, - { - "id": 6770, - "guid": "e8cdba9b-7c16-4cbe-bf46-ea3b994c4ed5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aubrey Osborne", - "company": "Compuamerica", - "phone": "827-413-2421", - "email": "aubrey@compuamerica.com" - }, - { - "id": 6771, - "guid": "d9fcd2eb-bff9-42da-b0b9-d171968c341e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mackenzie Otis", - "company": "Dynarama", - "phone": "852-473-2921", - "email": "mackenzie@dynarama.com" - }, - { - "id": 6772, - "guid": "697e2bf3-a022-4881-89e3-559c47d3b5a1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Gilbert", - "company": "Robocomm", - "phone": "833-578-2969", - "email": "anna@robocomm.com" - }, - { - "id": 6773, - "guid": "eb23fd7f-1459-4ea1-b144-a7d549431d9d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Cramer", - "company": "Truegate", - "phone": "897-432-3890", - "email": "gianna@truegate.com" - }, - { - "id": 6774, - "guid": "3da5b5e4-f0e2-4fbf-affe-71c67b27a3f3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Ford", - "company": "Xeicon", - "phone": "862-567-3379", - "email": "brooke@xeicon.com" - }, - { - "id": 6775, - "guid": "b242abe2-3b36-49f9-85d1-df09265f6754", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Nathan", - "company": "Techtron", - "phone": "832-406-2075", - "email": "chloe@techtron.com" - }, - { - "id": 6776, - "guid": "cd291118-528a-4099-82d0-48624b365099", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Fisher", - "company": "Anaframe", - "phone": "805-553-2342", - "email": "eva@anaframe.com" - }, - { - "id": 6777, - "guid": "ae32b6db-fcb4-4b7b-91ed-02f6a68cb119", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Galbraith", - "company": "Fibroserve", - "phone": "885-457-3715", - "email": "eva@fibroserve.com" - }, - { - "id": 6778, - "guid": "27153e13-310a-4532-9894-819423579e6a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Gardner", - "company": "Titanirola", - "phone": "847-580-3479", - "email": "aaliyah@titanirola.com" - }, - { - "id": 6779, - "guid": "05569b7e-cd00-410d-a549-1c69fe8af140", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Layla Carey", - "company": "US Infratouch", - "phone": "889-483-2440", - "email": "layla@us infratouch.com" - }, - { - "id": 6780, - "guid": "81126982-58b3-4f0f-be69-a6f26308bc69", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Young", - "company": "Westgate", - "phone": "821-447-3121", - "email": "amelia@westgate.com" - }, - { - "id": 6781, - "guid": "e78dbeb5-51d6-403d-9e6a-20231c8eac4c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Hardman", - "company": "Infragraph", - "phone": "895-426-3858", - "email": "kaylee@infragraph.com" - }, - { - "id": 6782, - "guid": "a3133be5-0a7e-4fe0-beaa-a7370ae33a85", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Goldman", - "company": "Safetrust", - "phone": "875-446-3602", - "email": "trinity@safetrust.com" - }, - { - "id": 6783, - "guid": "35dc3fa0-752d-455d-82b7-bd6438fcf728", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Hardman", - "company": "Teknoplexon", - "phone": "836-445-2528", - "email": "sophie@teknoplexon.com" - }, - { - "id": 6784, - "guid": "f98f817e-74f0-4a00-b7f4-8d87e38263e2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Wayne", - "company": "SysVenamerica", - "phone": "849-548-3330", - "email": "khloe@sysvenamerica.com" - }, - { - "id": 6785, - "guid": "a0054bea-3755-4fcb-8e6b-27c143bdfe45", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Ogden", - "company": "Multitiqua", - "phone": "801-475-3085", - "email": "jasmine@multitiqua.com" - }, - { - "id": 6786, - "guid": "1cb4777d-7e4f-45f3-8ec0-6c2a1a1b8290", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Gibbs", - "company": "Qualserve", - "phone": "884-513-2355", - "email": "anna@qualserve.com" - }, - { - "id": 6787, - "guid": "86fcca65-8f31-4134-9256-a326df5ee370", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ella Stanley", - "company": "Systheon", - "phone": "846-498-2832", - "email": "ella@systheon.com" - }, - { - "id": 6788, - "guid": "16ff2b6f-874e-4139-bc2a-7a85833e7f0a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Daniels", - "company": "Fibrotopia", - "phone": "880-445-2554", - "email": "valeria@fibrotopia.com" - }, - { - "id": 6789, - "guid": "bbaed2f7-9cd8-4d48-879a-2063ef657bd3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Gustman", - "company": "Jamrola", - "phone": "828-526-3805", - "email": "peyton@jamrola.com" - }, - { - "id": 6790, - "guid": "9b4696f7-c011-4827-af1d-8574b7a2460b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Waller", - "company": "Pericenta", - "phone": "800-543-2264", - "email": "olivia@pericenta.com" - }, - { - "id": 6791, - "guid": "40f18a12-f5b9-40ee-8bb0-e2f4c1cf06c8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Morrison", - "company": "Enlogia", - "phone": "865-490-2901", - "email": "mackenzie@enlogia.com" - }, - { - "id": 6792, - "guid": "521aca35-3143-403e-927a-c037d8ba1651", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Otis", - "company": "Gigaura", - "phone": "803-456-3808", - "email": "khloe@gigaura.com" - }, - { - "id": 6793, - "guid": "2669adf9-65dd-4cab-a4b8-2da80fa7a092", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Leah Thornton", - "company": "Teknoplexon", - "phone": "828-593-3571", - "email": "leah@teknoplexon.com" - }, - { - "id": 6794, - "guid": "9d957eca-233d-4320-8f9c-829f760d7baf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Carey", - "company": "Westtomik", - "phone": "830-589-2840", - "email": "caroline@westtomik.com" - }, - { - "id": 6795, - "guid": "eae52199-1923-4083-a012-c677d6c0d49e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Goodman", - "company": "iQualcar", - "phone": "894-538-2000", - "email": "gianna@iqualcar.com" - }, - { - "id": 6796, - "guid": "3d3db9a8-9a90-4fe2-ba14-7ab3a3ba012c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Osborne", - "company": "Aprama", - "phone": "833-565-3301", - "email": "zoey@aprama.com" - }, - { - "id": 6797, - "guid": "24c2a9f2-7cf3-4343-aaf8-af22e493d31e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Charlson", - "company": "Dynarama", - "phone": "843-448-3664", - "email": "camila@dynarama.com" - }, - { - "id": 6798, - "guid": "17a8d10d-76ae-4466-b808-81671d1b54ec", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Oldridge", - "company": "RoboAerlogix", - "phone": "800-437-3444", - "email": "serenity@roboaerlogix.com" - }, - { - "id": 6799, - "guid": "54ed9e34-916f-4620-b7f5-fb20a91f2321", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Chandter", - "company": "iSkyvaco", - "phone": "882-536-2401", - "email": "evelyn@iskyvaco.com" - }, - { - "id": 6800, - "guid": "e38a5054-71c5-4a0a-a68e-bfd8b674d0cf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Carter", - "company": "Generola", - "phone": "801-506-3367", - "email": "mia@generola.com" - }, - { - "id": 6801, - "guid": "4ada1686-8a1a-4e9c-97d0-b44162e0e543", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Calhoun", - "company": "Pacwest", - "phone": "899-549-3654", - "email": "mariah@pacwest.com" - }, - { - "id": 6802, - "guid": "90468bfd-cb85-4d5d-9cf7-4592d7d2d77a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Makayla Vance", - "company": "Netsystems", - "phone": "803-592-3339", - "email": "makayla@netsystems.com" - }, - { - "id": 6803, - "guid": "1f44d9e1-0c75-4558-9cc2-c737b1d22d8d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Destiny Vaughan", - "company": "Allnet", - "phone": "810-435-2930", - "email": "destiny@allnet.com" - }, - { - "id": 6804, - "guid": "4cd69cf2-8e28-49ce-a5fb-1eb7381152af", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Michaelson", - "company": "Keytheon", - "phone": "809-537-3208", - "email": "andrea@keytheon.com" - }, - { - "id": 6805, - "guid": "0cf5d58e-7748-45fe-8a04-0231009677fa", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Wainwright", - "company": "iEnland", - "phone": "865-430-3808", - "email": "olivia@ienland.com" - }, - { - "id": 6806, - "guid": "9470d509-8f22-42a6-a02c-10d03566b2d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Oldman", - "company": "Airdyne", - "phone": "829-402-2943", - "email": "gabrielle@airdyne.com" - }, - { - "id": 6807, - "guid": "8c1b9cbb-6ade-4c7a-a8d0-1ea3d1b14ac3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Calhoun", - "company": "Netseco", - "phone": "810-564-2291", - "email": "angelina@netseco.com" - }, - { - "id": 6808, - "guid": "1ca87a80-4a7d-4157-8864-c67a5717b06d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Thomson", - "company": "Fibrotopia", - "phone": "874-539-3843", - "email": "charlotte@fibrotopia.com" - }, - { - "id": 6809, - "guid": "af7a212c-7fd4-4321-9170-34bc22f05d9c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Cook", - "company": "Ameritron", - "phone": "883-457-3499", - "email": "gabriella@ameritron.com" - }, - { - "id": 6810, - "guid": "3c5c7003-535b-4b55-ad32-13814e1188b5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Webster", - "company": "Celgra", - "phone": "873-400-2674", - "email": "bella@celgra.com" - }, - { - "id": 6811, - "guid": "26db5677-dd52-42a3-8ffa-997a99ce7787", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Molligan", - "company": "Syssoft", - "phone": "875-586-2633", - "email": "allison@syssoft.com" - }, - { - "id": 6812, - "guid": "a386547a-76ac-476f-b475-f9ac69acffeb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Webster", - "company": "Nanobanc", - "phone": "888-474-2143", - "email": "mya@nanobanc.com" - }, - { - "id": 6813, - "guid": "b8338ca9-c530-4b71-908c-53ee1455ffe3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Crossman", - "company": "Safeagra", - "phone": "872-579-2494", - "email": "mackenzie@safeagra.com" - }, - { - "id": 6814, - "guid": "102ab36e-1357-4aef-94f8-f14cb9c94905", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Sherlock", - "company": "Conotomics", - "phone": "851-566-3862", - "email": "camila@conotomics.com" - }, - { - "id": 6815, - "guid": "3332dc7a-997b-4dc6-a068-014a11411f66", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Carter", - "company": "Keytheon", - "phone": "814-585-2679", - "email": "angelina@keytheon.com" - }, - { - "id": 6816, - "guid": "7e4096c2-b417-4e9e-8715-cb094592dbb3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Hoggarth", - "company": "iMedconik", - "phone": "864-573-3919", - "email": "payton@imedconik.com" - }, - { - "id": 6817, - "guid": "2061afc1-8bc0-4db5-a3b8-bed8a3d7685a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Winter", - "company": "Mescatron", - "phone": "885-463-2141", - "email": "bailey@mescatron.com" - }, - { - "id": 6818, - "guid": "6e049364-2c75-4379-b69a-c340ac209d0a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ava Wallace", - "company": "SysVenamerica", - "phone": "866-597-3727", - "email": "ava@sysvenamerica.com" - }, - { - "id": 6819, - "guid": "71823f45-3e31-492e-8d42-87fc94725751", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Wayne", - "company": "Genland", - "phone": "864-480-2352", - "email": "aubrey@genland.com" - }, - { - "id": 6820, - "guid": "2f28c64f-e03e-4988-be0e-9c1e5cb2563b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kayla Goodman", - "company": "Tekcar", - "phone": "845-539-3038", - "email": "kayla@tekcar.com" - }, - { - "id": 6821, - "guid": "8a51b18b-5a62-4a7a-a99b-3ebbb7476a05", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Young", - "company": "Infraique", - "phone": "893-442-2944", - "email": "sofia@infraique.com" - }, - { - "id": 6822, - "guid": "04d52c4c-530e-4d2b-9bdd-d228d0863110", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Hancock", - "company": "Idmax", - "phone": "859-411-2630", - "email": "autumn@idmax.com" - }, - { - "id": 6823, - "guid": "2dca4929-9ff1-4126-b261-8eea1859858c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Vance", - "company": "Pericenta", - "phone": "858-464-3410", - "email": "hannah@pericenta.com" - }, - { - "id": 6824, - "guid": "1e5579ed-4907-4cae-8753-2c471ba3e45d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava WifKinson", - "company": "Infraique", - "phone": "885-542-2680", - "email": "ava@infraique.com" - }, - { - "id": 6825, - "guid": "d6d76e24-0300-4e5d-8870-ce466df565a3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Campbell", - "company": "Superscope", - "phone": "868-580-2319", - "email": "olivia@superscope.com" - }, - { - "id": 6826, - "guid": "ccc200cf-4bf5-48f7-b198-165dd78d29f4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Stanley", - "company": "Rapigrafix", - "phone": "874-429-3399", - "email": "brooke@rapigrafix.com" - }, - { - "id": 6827, - "guid": "9fe1c1fc-58bd-495e-a6ba-2df29cc1c70e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton WifKinson", - "company": "Safeagra", - "phone": "809-531-2806", - "email": "peyton@safeagra.com" - }, - { - "id": 6828, - "guid": "869138e1-bc08-419e-adb7-07e3af86e95f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Conors", - "company": "Truegate", - "phone": "836-455-3000", - "email": "addison@truegate.com" - }, - { - "id": 6829, - "guid": "bcd7f089-9872-4ec7-9529-ec4de6678d50", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Wainwright", - "company": "Safetrust", - "phone": "869-434-3197", - "email": "julia@safetrust.com" - }, - { - "id": 6830, - "guid": "f8942bec-4151-4285-a78e-82d53a959589", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Winter", - "company": "Videobanc", - "phone": "863-491-2969", - "email": "bella@videobanc.com" - }, - { - "id": 6831, - "guid": "0bd3e701-1c07-4db4-80d3-8805403d96ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Wayne", - "company": "Turbomart", - "phone": "834-508-3684", - "email": "camila@turbomart.com" - }, - { - "id": 6832, - "guid": "b7f9e631-aeb9-4c1e-a2e3-d14d7691577a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Thomson", - "company": "Dynarama", - "phone": "858-542-3162", - "email": "vanessa@dynarama.com" - }, - { - "id": 6833, - "guid": "643e1369-ffd2-448e-a7cf-3f11de0f2f11", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Claire Neal", - "company": "Pericenta", - "phone": "807-523-3662", - "email": "claire@pericenta.com" - }, - { - "id": 6834, - "guid": "bc64cb01-4ff1-44d4-bbd9-694ba3f27f98", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Clapton", - "company": "Inridium", - "phone": "817-564-3695", - "email": "isabella@inridium.com" - }, - { - "id": 6835, - "guid": "9053ec99-162e-4a39-b84b-7cf3ba3a6401", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Conors", - "company": "iQualcar", - "phone": "880-404-2579", - "email": "eva@iqualcar.com" - }, - { - "id": 6836, - "guid": "cbe28b6b-9106-4eb3-9323-7baccd760a25", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Vaughan", - "company": "Robocomm", - "phone": "899-424-2707", - "email": "riley@robocomm.com" - }, - { - "id": 6837, - "guid": "001ea65f-87d9-4a76-aeb6-d3a1347b2f86", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ella Clapton", - "company": "Proline", - "phone": "800-561-3912", - "email": "ella@proline.com" - }, - { - "id": 6838, - "guid": "babe2c1e-6dcb-4ca2-b8d5-b4cbc3087a8d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Campbell", - "company": "US Omnigraphik", - "phone": "806-407-2979", - "email": "destiny@us omnigraphik.com" - }, - { - "id": 6839, - "guid": "ba344225-0905-45cc-be29-b60f37563c58", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Turner", - "company": "Airdyne", - "phone": "834-555-3472", - "email": "emma@airdyne.com" - }, - { - "id": 6840, - "guid": "c6c0dec4-95f2-4739-80ed-77eb3c67e98a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Miln", - "company": "Indisco", - "phone": "887-581-3498", - "email": "olivia@indisco.com" - }, - { - "id": 6841, - "guid": "57edfad1-3a16-444d-8d09-31ed9aa72229", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Gardner", - "company": "Netsystems", - "phone": "895-497-3259", - "email": "molly@netsystems.com" - }, - { - "id": 6842, - "guid": "98de04b4-1904-40f8-8193-3a44ee2535c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Hodges", - "company": "Qualserve", - "phone": "864-590-3597", - "email": "abigail@qualserve.com" - }, - { - "id": 6843, - "guid": "a76714b9-453b-4eeb-9b5d-b00d9539b3eb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Owen", - "company": "Ameritron", - "phone": "894-420-3542", - "email": "alexa@ameritron.com" - }, - { - "id": 6844, - "guid": "abffe708-fcd9-4d2a-bebb-2610fcda4063", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Conors", - "company": "Allphysiche", - "phone": "812-445-3755", - "email": "gabriella@allphysiche.com" - }, - { - "id": 6845, - "guid": "9f5fa1b3-40c8-4ddc-8a00-02d55d01cda6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Abramson", - "company": "Videobanc", - "phone": "842-430-3294", - "email": "katherine@videobanc.com" - }, - { - "id": 6846, - "guid": "ba243aed-35e7-4901-b1c8-662959698f1a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Hailey", - "company": "Polytheon", - "phone": "832-477-3781", - "email": "samantha@polytheon.com" - }, - { - "id": 6847, - "guid": "192212f6-998d-43ed-992a-45bec4be02b9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Thorndike", - "company": "Syssoft", - "phone": "825-419-3439", - "email": "hailey@syssoft.com" - }, - { - "id": 6848, - "guid": "96a9ffc3-0e56-4fe9-b6ce-a8c20241ecef", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Miller", - "company": "Aluco", - "phone": "859-474-3115", - "email": "gabriella@aluco.com" - }, - { - "id": 6849, - "guid": "2cdfa66d-4311-49bf-88a7-9793ddba8285", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Thomson", - "company": "Airdyne", - "phone": "899-487-2889", - "email": "emily@airdyne.com" - }, - { - "id": 6850, - "guid": "d27ec863-5999-43d6-bc24-19de71d0fc50", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Vaughan", - "company": "Transtouch", - "phone": "819-571-2401", - "email": "amelia@transtouch.com" - }, - { - "id": 6851, - "guid": "fec66a66-b7d0-4191-a196-f11f602e5b7c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Calhoun", - "company": "Robotomic", - "phone": "855-460-2079", - "email": "arianna@robotomic.com" - }, - { - "id": 6852, - "guid": "d3acbb2e-7153-4a0a-8117-012954755cb4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ariana Sherlock", - "company": "Turbomart", - "phone": "844-445-3479", - "email": "ariana@turbomart.com" - }, - { - "id": 6853, - "guid": "13315527-5aa8-4a7f-8cb4-d896d1180523", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Abramson", - "company": "Pacwest", - "phone": "884-445-2480", - "email": "jocelyn@pacwest.com" - }, - { - "id": 6854, - "guid": "5390121a-2d20-4213-a4de-e43d184fb968", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Miln", - "company": "Tekcar", - "phone": "858-582-2656", - "email": "samantha@tekcar.com" - }, - { - "id": 6855, - "guid": "7f94d8c0-584c-44e7-a92d-7caccb7d3e53", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katelyn Wayne", - "company": "iOptystix", - "phone": "834-548-2459", - "email": "katelyn@ioptystix.com" - }, - { - "id": 6856, - "guid": "8aacd33d-d786-415d-a55f-080588b6d1df", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Haig", - "company": "Multitiqua", - "phone": "810-499-2701", - "email": "sarah@multitiqua.com" - }, - { - "id": 6857, - "guid": "59dde9db-3d85-462f-ad5e-a2eeb90f8afd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Wayne", - "company": "Teraserv", - "phone": "890-417-2290", - "email": "faith@teraserv.com" - }, - { - "id": 6858, - "guid": "df4d19b6-4eab-4933-ae57-6dd5c5949b6c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Stanley", - "company": "Cryptotegrity", - "phone": "857-467-2705", - "email": "lily@cryptotegrity.com" - }, - { - "id": 6859, - "guid": "187dbec5-fb72-430f-a86b-9f77aa03a459", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Sherlock", - "company": "Aprama", - "phone": "850-542-2305", - "email": "kimberly@aprama.com" - }, - { - "id": 6860, - "guid": "d4ca8bbd-f431-4686-9d8f-4d161592c60e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Wesley", - "company": "Robotomic", - "phone": "806-551-3884", - "email": "mariah@robotomic.com" - }, - { - "id": 6861, - "guid": "77ac8c9e-0f53-4368-94f7-499887e0419b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke White", - "company": "Orthomedia", - "phone": "858-542-2523", - "email": "brooke@orthomedia.com" - }, - { - "id": 6862, - "guid": "d9737495-3561-4c63-96a3-8013a3292b34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Nash", - "company": "Robotemplate", - "phone": "881-430-2992", - "email": "destiny@robotemplate.com" - }, - { - "id": 6863, - "guid": "60dff6fe-efa6-45be-b23e-2f819b93d09e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Cook", - "company": "Genland", - "phone": "835-461-3226", - "email": "riley@genland.com" - }, - { - "id": 6864, - "guid": "723ed9ba-cbb4-4b37-95b5-dd6ab5980dc8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Nathan", - "company": "Openserve", - "phone": "811-575-3310", - "email": "emily@openserve.com" - }, - { - "id": 6865, - "guid": "695ab7aa-6591-493c-9598-bbfb4388f7ee", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Goldman", - "company": "Xeicon", - "phone": "899-527-3878", - "email": "destiny@xeicon.com" - }, - { - "id": 6866, - "guid": "fdcd51a4-0c59-4cce-9c78-91a149ae2ab7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Carey", - "company": "Navivacs", - "phone": "872-462-2621", - "email": "kylie@navivacs.com" - }, - { - "id": 6867, - "guid": "bc37a719-6840-4319-9620-a365c446583f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Gilson", - "company": "Openserve", - "phone": "815-596-3565", - "email": "kaylee@openserve.com" - }, - { - "id": 6868, - "guid": "a718c859-1e9b-4667-bfd2-bbaa98686ffb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Smith", - "company": "Unconix", - "phone": "842-486-2613", - "email": "katherine@unconix.com" - }, - { - "id": 6869, - "guid": "e1a14157-45cc-4daa-a172-2c69db9d1e1f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Gustman", - "company": "InfoAirway", - "phone": "828-497-3678", - "email": "lauren@infoairway.com" - }, - { - "id": 6870, - "guid": "405c1ac3-98b5-404f-867c-486878b9f0df", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Haig", - "company": "Vencom", - "phone": "856-567-2981", - "email": "riley@vencom.com" - }, - { - "id": 6871, - "guid": "a9e901c1-01c3-4f68-b568-0bd3f9458c13", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Molligan", - "company": "Gigaura", - "phone": "818-599-2786", - "email": "autumn@gigaura.com" - }, - { - "id": 6872, - "guid": "23ea6aa3-ea43-4140-8780-1e54bfd70697", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Wainwright", - "company": "Fibrotouch", - "phone": "858-528-3497", - "email": "jasmine@fibrotouch.com" - }, - { - "id": 6873, - "guid": "fff19d1b-aa9f-4af0-8ad6-8457091eb811", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooklyn Wainwright", - "company": "iQualcar", - "phone": "876-599-3924", - "email": "brooklyn@iqualcar.com" - }, - { - "id": 6874, - "guid": "f2b27228-61de-4979-ad55-637f77efe598", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Wainwright", - "company": "Aprama", - "phone": "849-550-2484", - "email": "grace@aprama.com" - }, - { - "id": 6875, - "guid": "a4a2fba6-4c4d-4c45-8727-89647096535d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Miers", - "company": "Allnet", - "phone": "802-573-2353", - "email": "madelyn@allnet.com" - }, - { - "id": 6876, - "guid": "c091af7e-7e55-4f11-9dab-dfd1d77ce32d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Thorndike", - "company": "Indisco", - "phone": "896-528-3514", - "email": "charlotte@indisco.com" - }, - { - "id": 6877, - "guid": "74604416-a37c-4cf2-bafa-03c61e3237d3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Anna Gate", - "company": "Videobanc", - "phone": "868-569-2990", - "email": "anna@videobanc.com" - }, - { - "id": 6878, - "guid": "9fb7ec41-a3cf-4a97-9e94-d176f802dc9a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Conors", - "company": "Netsystems", - "phone": "876-529-3810", - "email": "eva@netsystems.com" - }, - { - "id": 6879, - "guid": "e6b3bbcd-a9e1-4e6e-89a0-5d311eb26013", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Paige Conors", - "company": "Aprama", - "phone": "861-514-2407", - "email": "paige@aprama.com" - }, - { - "id": 6880, - "guid": "4e5d6086-bec2-43e1-b480-bffdd0281cf3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Gilbert", - "company": "Enlogia", - "phone": "891-483-2086", - "email": "leah@enlogia.com" - }, - { - "id": 6881, - "guid": "ac41e71b-bd29-420b-ad9b-a25d155b5cbf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Audrey Wesley", - "company": "Thermotomic", - "phone": "843-566-3121", - "email": "audrey@thermotomic.com" - }, - { - "id": 6882, - "guid": "5c031e6e-34bc-4b0b-bc15-970f9a38d66a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Crossman", - "company": "Nanobanc", - "phone": "854-587-2891", - "email": "emily@nanobanc.com" - }, - { - "id": 6883, - "guid": "0b027c29-66f7-4811-a5a2-dc8db4aa2bff", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Bush", - "company": "Titanigraf", - "phone": "808-430-2219", - "email": "zoey@titanigraf.com" - }, - { - "id": 6884, - "guid": "fabf07a7-486f-4624-9890-b4ca13d79d62", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Wayne", - "company": "Westtomik", - "phone": "871-600-3105", - "email": "bella@westtomik.com" - }, - { - "id": 6885, - "guid": "ec35e08a-d892-454a-896f-8a5f992cf055", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Wainwright", - "company": "Videobanc", - "phone": "837-540-3134", - "email": "rachel@videobanc.com" - }, - { - "id": 6886, - "guid": "2f17f89f-e7bd-4f6b-b5b6-ec242c331fe8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Neal", - "company": "Skydata", - "phone": "898-576-2542", - "email": "kylie@skydata.com" - }, - { - "id": 6887, - "guid": "9ded0ca9-134c-4941-915b-bc954be30f0d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Sherlock", - "company": "iEnland", - "phone": "805-450-2575", - "email": "isabella@ienland.com" - }, - { - "id": 6888, - "guid": "f0a6aa5b-5e7e-4138-a1be-413b7803e12c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Oldridge", - "company": "Polytheon", - "phone": "851-463-3728", - "email": "aaliyah@polytheon.com" - }, - { - "id": 6889, - "guid": "395bd003-aba9-486f-b0bd-94f497334eda", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Osborne", - "company": "Robotemplate", - "phone": "839-560-3159", - "email": "savannah@robotemplate.com" - }, - { - "id": 6890, - "guid": "56a166fc-0be7-495f-b5bd-9ee0bedbcee4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Carroll", - "company": "Fibrotouch", - "phone": "813-551-2812", - "email": "peyton@fibrotouch.com" - }, - { - "id": 6891, - "guid": "eaa1fcba-cb5b-45de-8a44-73091757f7e3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Hancock", - "company": "Nanobanc", - "phone": "817-419-3789", - "email": "melanie@nanobanc.com" - }, - { - "id": 6892, - "guid": "0ce1f1ad-a985-4bb5-b1c5-e83e9e9b81ce", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Creighton", - "company": "Teratopia", - "phone": "853-495-3433", - "email": "lillian@teratopia.com" - }, - { - "id": 6893, - "guid": "5a4f22af-00ee-4286-892e-536eb9039416", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Hardman", - "company": "Sontopia", - "phone": "828-424-2936", - "email": "autumn@sontopia.com" - }, - { - "id": 6894, - "guid": "5f50e6dd-3c66-4011-80fb-d04324ea6812", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Campbell", - "company": "Infraique", - "phone": "823-594-2183", - "email": "peyton@infraique.com" - }, - { - "id": 6895, - "guid": "e77a04ba-eb30-45fa-ab4b-2b8d9fdb6fbb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Daniels", - "company": "US Infratouch", - "phone": "899-439-3897", - "email": "ariana@us infratouch.com" - }, - { - "id": 6896, - "guid": "0dace0ee-9e12-40d4-9b23-335a479299cb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Gilbert", - "company": "iEnland", - "phone": "827-487-2172", - "email": "sophie@ienland.com" - }, - { - "id": 6897, - "guid": "80c9224d-2811-482c-82b5-e4feb5fe408a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Khloe Carter", - "company": "Compuamerica", - "phone": "843-447-3291", - "email": "khloe@compuamerica.com" - }, - { - "id": 6898, - "guid": "5ab39d7e-c7f1-4af8-9d3b-149dd2305485", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Bush", - "company": "Anagraph", - "phone": "875-461-3197", - "email": "emily@anagraph.com" - }, - { - "id": 6899, - "guid": "93f1e51c-caa4-4f8b-bb96-eb4773df48eb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Fulton", - "company": "Qualserve", - "phone": "868-560-2086", - "email": "alexandra@qualserve.com" - }, - { - "id": 6900, - "guid": "4d7e7b4b-d978-484e-93d6-5e60f5fc7d67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Hawkins", - "company": "Transtouch", - "phone": "869-481-2079", - "email": "eva@transtouch.com" - }, - { - "id": 6901, - "guid": "60e36fe6-56fd-4c0a-9d07-0938d57e3d86", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Ford", - "company": "RoboAerlogix", - "phone": "873-422-2706", - "email": "lillian@roboaerlogix.com" - }, - { - "id": 6902, - "guid": "f5f46110-2616-44cd-9431-5b47d2956d80", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Carter", - "company": "Interliant", - "phone": "813-559-2180", - "email": "mya@interliant.com" - }, - { - "id": 6903, - "guid": "8098e2c8-6cf2-4d43-b61c-5d7d5b92bfb1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Webster", - "company": "Keytheon", - "phone": "870-442-3179", - "email": "ava@keytheon.com" - }, - { - "id": 6904, - "guid": "8fa53489-cc65-4ae4-8b4c-0a5922f273b9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Thorndike", - "company": "Proline", - "phone": "824-472-3083", - "email": "genesis@proline.com" - }, - { - "id": 6905, - "guid": "dfdf7ae0-5171-4745-8c32-f88eb3fbf686", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Addison Day", - "company": "Fibrotopia", - "phone": "837-591-3694", - "email": "addison@fibrotopia.com" - }, - { - "id": 6906, - "guid": "65edf1fa-2f79-42ed-8b1d-e595d0f9ec73", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Hodges", - "company": "Aluco", - "phone": "832-578-2951", - "email": "samantha@aluco.com" - }, - { - "id": 6907, - "guid": "4c9a112d-3a57-4cb4-8114-c734589819f2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Hancock", - "company": "Fibrotopia", - "phone": "845-406-2271", - "email": "alexis@fibrotopia.com" - }, - { - "id": 6908, - "guid": "0fefa260-9ba4-4a87-8fdd-cddfcfd02bf8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Vaughan", - "company": "Techtron", - "phone": "899-447-2041", - "email": "bailey@techtron.com" - }, - { - "id": 6909, - "guid": "eb013a9b-576f-4b56-8dd1-5f50bdb11e59", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Wesley", - "company": "Teraserv", - "phone": "895-429-2670", - "email": "maria@teraserv.com" - }, - { - "id": 6910, - "guid": "91a00b8b-02eb-45d5-9e1d-8d730dbae9b5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Leah Fisher", - "company": "Dynarama", - "phone": "897-587-3364", - "email": "leah@dynarama.com" - }, - { - "id": 6911, - "guid": "70477c40-e953-4b2c-bd61-49f2226dd900", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Molligan", - "company": "Enlogia", - "phone": "891-567-3202", - "email": "nevaeh@enlogia.com" - }, - { - "id": 6912, - "guid": "9fc763f5-6d82-46e2-aad8-b23249237f10", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Gilbert", - "company": "Venconix", - "phone": "840-507-3314", - "email": "abigail@venconix.com" - }, - { - "id": 6913, - "guid": "23ce03ec-cb8b-4662-b2e4-e567bbe81e88", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Nathan", - "company": "Turbomart", - "phone": "856-480-2550", - "email": "ava@turbomart.com" - }, - { - "id": 6914, - "guid": "57f1950a-aa4d-4b46-9033-ec3aaa69f025", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Nash", - "company": "Syssoft", - "phone": "803-591-2255", - "email": "sophia@syssoft.com" - }, - { - "id": 6915, - "guid": "4a0f161a-d1fd-43f4-af07-c0c3b51f7963", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Mercer", - "company": "Westtomik", - "phone": "808-457-3320", - "email": "faith@westtomik.com" - }, - { - "id": 6916, - "guid": "a513e25d-da30-467c-ba4d-23685b620282", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Webster", - "company": "iQualcar", - "phone": "804-495-2141", - "email": "avery@iqualcar.com" - }, - { - "id": 6917, - "guid": "71274c04-5675-4d53-9920-e47b7ab9c3e9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Wesley", - "company": "Pacwest", - "phone": "829-473-2027", - "email": "hailey@pacwest.com" - }, - { - "id": 6918, - "guid": "312eb3f9-45dd-4887-8e6a-a9363956ecd0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brianna Hancock", - "company": "Jamrola", - "phone": "809-404-3456", - "email": "brianna@jamrola.com" - }, - { - "id": 6919, - "guid": "445e0e19-64ce-4f58-be09-cc4c31c9b4ef", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Neal", - "company": "Navivacs", - "phone": "861-551-3588", - "email": "aubrey@navivacs.com" - }, - { - "id": 6920, - "guid": "e65bd611-22e2-4bed-962c-e26552b80583", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Hailey", - "company": "Qualserve", - "phone": "831-547-3958", - "email": "zoe@qualserve.com" - }, - { - "id": 6921, - "guid": "a6028e8a-be18-41e7-a9b4-dbf1451eb395", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Gerald", - "company": "Mescatron", - "phone": "844-570-3912", - "email": "caroline@mescatron.com" - }, - { - "id": 6922, - "guid": "f7817ca9-25f3-4bf8-8e66-26d4754bf854", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Nash", - "company": "Fibroserve", - "phone": "895-428-3622", - "email": "leah@fibroserve.com" - }, - { - "id": 6923, - "guid": "12b26638-871a-40b0-9f73-e52a2db8d61c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Autumn Owen", - "company": "Polytheon", - "phone": "888-469-2993", - "email": "autumn@polytheon.com" - }, - { - "id": 6924, - "guid": "58dcf942-b239-46a9-a53a-bc7f92fb2739", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Murphy", - "company": "Mescaridic", - "phone": "825-557-3766", - "email": "faith@mescaridic.com" - }, - { - "id": 6925, - "guid": "0920c9e8-2d0c-4416-83c2-6267ee74ec4a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Trinity Gustman", - "company": "Netsystems", - "phone": "824-526-3629", - "email": "trinity@netsystems.com" - }, - { - "id": 6926, - "guid": "d6658464-f460-4ec9-bd3c-a6d96dba655e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Gilson", - "company": "Superscope", - "phone": "889-450-2637", - "email": "brooke@superscope.com" - }, - { - "id": 6927, - "guid": "0ddc0129-c8bb-4910-a49b-37484570c081", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Young", - "company": "Mescaridic", - "phone": "896-510-2215", - "email": "evelyn@mescaridic.com" - }, - { - "id": 6928, - "guid": "9363a373-d9b2-4a03-8acb-e077a0d81866", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Adamson", - "company": "Tekcar", - "phone": "803-407-3492", - "email": "kimberly@tekcar.com" - }, - { - "id": 6929, - "guid": "90e1594c-b20a-4095-88d5-8e1be450b051", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Gibbs", - "company": "Multitiqua", - "phone": "887-556-3943", - "email": "vanessa@multitiqua.com" - }, - { - "id": 6930, - "guid": "59a14cb6-0cfa-4606-aa7e-2e19f5ee6258", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Waller", - "company": "Infraique", - "phone": "836-453-2244", - "email": "olivia@infraique.com" - }, - { - "id": 6931, - "guid": "402a16df-5077-4e9f-aa4c-2e6f799ee6a2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Ogden", - "company": "Allnet", - "phone": "868-441-2325", - "email": "avery@allnet.com" - }, - { - "id": 6932, - "guid": "42b40ba7-cd79-4ac7-946f-0a230b0cfe2c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Watson", - "company": "iSkyvaco", - "phone": "805-446-3681", - "email": "melanie@iskyvaco.com" - }, - { - "id": 6933, - "guid": "54923876-de14-49e4-a49f-bc580db3e98f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Gate", - "company": "eEyetanic", - "phone": "803-591-3781", - "email": "grace@eeyetanic.com" - }, - { - "id": 6934, - "guid": "3f17f2a9-b74c-4b3f-862a-9bde26c4a924", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Oswald", - "company": "Ameritron", - "phone": "849-536-3416", - "email": "vanessa@ameritron.com" - }, - { - "id": 6935, - "guid": "cf85410e-540c-4a07-9b40-35237d1deb67", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jessica Watson", - "company": "Raylog", - "phone": "800-591-3061", - "email": "jessica@raylog.com" - }, - { - "id": 6936, - "guid": "f703f740-f6b9-4b31-a963-a3f43d9d320c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Hancock", - "company": "Unologic", - "phone": "883-501-3814", - "email": "nevaeh@unologic.com" - }, - { - "id": 6937, - "guid": "ba07ced6-f3ea-425e-9cc9-710deb8250b9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Andrea Goodman", - "company": "Technogra", - "phone": "808-546-2887", - "email": "andrea@technogra.com" - }, - { - "id": 6938, - "guid": "82e7ec97-cf05-4a29-b57a-bf1b9d77737c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Abramson", - "company": "Cryptotemplate", - "phone": "873-574-3654", - "email": "hailey@cryptotemplate.com" - }, - { - "id": 6939, - "guid": "7391dae3-f351-4684-9459-27d592e5d4bb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Thomson", - "company": "Ameritron", - "phone": "855-434-2600", - "email": "olivia@ameritron.com" - }, - { - "id": 6940, - "guid": "bed81977-953c-4e7f-8c23-eb715226b496", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Brickman", - "company": "Raylog", - "phone": "843-494-2629", - "email": "sofia@raylog.com" - }, - { - "id": 6941, - "guid": "790cf2d8-6cd0-4803-873b-65caaa6c6c07", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Camila Hamphrey", - "company": "Thermotomic", - "phone": "868-560-3741", - "email": "camila@thermotomic.com" - }, - { - "id": 6942, - "guid": "8a3283df-db51-474a-ba37-aa1bade179df", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Charlson", - "company": "Orthosoft", - "phone": "854-433-2233", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 6943, - "guid": "abf0df0a-2db0-4f0a-af79-bab94b269eb5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mya Vaughan", - "company": "Aprama", - "phone": "861-537-3233", - "email": "mya@aprama.com" - }, - { - "id": 6944, - "guid": "c618032c-fb05-4b17-96f3-59146d0835f0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Morgan Creighton", - "company": "Truegate", - "phone": "825-582-2092", - "email": "morgan@truegate.com" - }, - { - "id": 6945, - "guid": "d5ac9590-8178-4c1c-83a4-a5284b683504", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Bush", - "company": "Anaframe", - "phone": "878-413-3273", - "email": "hannah@anaframe.com" - }, - { - "id": 6946, - "guid": "42730389-cf5f-47ab-8faa-1b03ffc0847e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Youmans", - "company": "Indisco", - "phone": "807-456-3572", - "email": "paige@indisco.com" - }, - { - "id": 6947, - "guid": "532b5a66-3e23-4c13-8b69-48e32bd284a2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Croftoon", - "company": "Orthomedia", - "phone": "851-513-2463", - "email": "julia@orthomedia.com" - }, - { - "id": 6948, - "guid": "1235a878-46b3-4773-8a11-b02fc111cb1c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Hawkins", - "company": "Videobanc", - "phone": "811-432-3498", - "email": "arianna@videobanc.com" - }, - { - "id": 6949, - "guid": "9257e266-dd76-4ba3-bff6-8407ddf13305", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Goldman", - "company": "Sontopia", - "phone": "861-511-2577", - "email": "claire@sontopia.com" - }, - { - "id": 6950, - "guid": "30496c70-da9f-4630-9837-e6fe3e22134b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Chesterton", - "company": "Xeicon", - "phone": "820-496-2990", - "email": "emma@xeicon.com" - }, - { - "id": 6951, - "guid": "7b2173ca-1ca3-446f-8973-4a5215cce769", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Thorndike", - "company": "Orthomedia", - "phone": "840-411-3925", - "email": "zoe@orthomedia.com" - }, - { - "id": 6952, - "guid": "2b445e09-64e1-44b4-bccd-a022890a71eb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Michaelson", - "company": "Aprama", - "phone": "801-599-3424", - "email": "genesis@aprama.com" - }, - { - "id": 6953, - "guid": "16c6c241-828d-4e27-ac70-02a890028df8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Carroll", - "company": "Jamconik", - "phone": "899-441-3921", - "email": "zoe@jamconik.com" - }, - { - "id": 6954, - "guid": "539c1e1e-e801-4bbb-ba50-22df7509d8b3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Croftoon", - "company": "Unologic", - "phone": "891-517-3452", - "email": "elizabeth@unologic.com" - }, - { - "id": 6955, - "guid": "4a8cb102-5f21-40cd-83d2-1b1048470d96", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Rachel Goodman", - "company": "SysVenamerica", - "phone": "800-456-2699", - "email": "rachel@sysvenamerica.com" - }, - { - "id": 6956, - "guid": "b642db08-0b78-485f-9f33-1088e483555a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Nathan", - "company": "iEnland", - "phone": "892-520-2297", - "email": "amelia@ienland.com" - }, - { - "id": 6957, - "guid": "ecf67851-aca7-44a0-889c-a7664de29e47", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Nash", - "company": "RoboAerlogix", - "phone": "845-441-3966", - "email": "nevaeh@roboaerlogix.com" - }, - { - "id": 6958, - "guid": "70718ca9-d62a-472e-8a46-b8f39b5480b2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Creighton", - "company": "Ventanium", - "phone": "857-440-2969", - "email": "abigail@ventanium.com" - }, - { - "id": 6959, - "guid": "c64b71c6-56ac-44f0-9128-806ed32ba146", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Adamson", - "company": "Anaframe", - "phone": "833-557-3810", - "email": "caroline@anaframe.com" - }, - { - "id": 6960, - "guid": "3770828d-505c-441a-b178-867a5dd6fc66", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Hodges", - "company": "SysUSA", - "phone": "840-547-2336", - "email": "victoria@sysusa.com" - }, - { - "id": 6961, - "guid": "99dc4aad-4026-4297-bdda-1ba19fbca7b9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Thomson", - "company": "Cryptotemplate", - "phone": "889-478-2387", - "email": "nevaeh@cryptotemplate.com" - }, - { - "id": 6962, - "guid": "82b52e94-f28c-457d-98bc-d9aace1fef8d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily WifKinson", - "company": "iQualcar", - "phone": "828-418-2780", - "email": "emily@iqualcar.com" - }, - { - "id": 6963, - "guid": "0351cf77-4541-485e-8da5-d183607586f6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooke Creighton", - "company": "Ameritron", - "phone": "891-575-2017", - "email": "brooke@ameritron.com" - }, - { - "id": 6964, - "guid": "c6ea6182-95c8-44c0-8a18-4da632c9e711", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Gill", - "company": "Robotomic", - "phone": "868-439-2466", - "email": "genesis@robotomic.com" - }, - { - "id": 6965, - "guid": "6a8ad04c-8ae5-4ee8-b877-5a21efb28ff9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Milton", - "company": "Netsystems", - "phone": "846-509-3439", - "email": "valeria@netsystems.com" - }, - { - "id": 6966, - "guid": "89510eb3-ffdf-41e1-856e-63d4921890fb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Haig", - "company": "iOptystix", - "phone": "828-455-2261", - "email": "aubrey@ioptystix.com" - }, - { - "id": 6967, - "guid": "0d46b941-62bf-4b66-af66-b6b53d2e9bb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Nelson", - "company": "Generola", - "phone": "889-505-2219", - "email": "aaliyah@generola.com" - }, - { - "id": 6968, - "guid": "dd7364df-98fb-4602-a748-d21b60ecdeb8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Galbraith", - "company": "Truegate", - "phone": "859-567-3887", - "email": "destiny@truegate.com" - }, - { - "id": 6969, - "guid": "6b279552-6008-489f-bdf9-65f8fd71cdf1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jessica Stanley", - "company": "Teratopia", - "phone": "848-433-2173", - "email": "jessica@teratopia.com" - }, - { - "id": 6970, - "guid": "a9ef6339-35b9-449b-938a-ff22354ca4b7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Davidson", - "company": "Robotomic", - "phone": "876-520-3062", - "email": "vanessa@robotomic.com" - }, - { - "id": 6971, - "guid": "83a1bcee-3f32-414d-a6a1-2f73f572ae7d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Avery Abramson", - "company": "Robotemplate", - "phone": "863-543-3552", - "email": "avery@robotemplate.com" - }, - { - "id": 6972, - "guid": "cace8b13-dcdb-4c08-a117-e48ad09b2b6d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Haig", - "company": "iMedconik", - "phone": "855-446-3349", - "email": "maya@imedconik.com" - }, - { - "id": 6973, - "guid": "669650f1-6d8d-41f2-80cc-6bb6929b60fd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Fisher", - "company": "Syssoft", - "phone": "821-449-2614", - "email": "valeria@syssoft.com" - }, - { - "id": 6974, - "guid": "98670fad-68bb-4898-8833-7e385e99d15d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Webster", - "company": "Generola", - "phone": "827-530-2254", - "email": "kylie@generola.com" - }, - { - "id": 6975, - "guid": "634b9094-eb21-441a-a42a-b3b629d222ec", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Brickman", - "company": "Inridium", - "phone": "873-486-2485", - "email": "ashley@inridium.com" - }, - { - "id": 6976, - "guid": "8cfef2ba-82ca-4e46-855a-27ed7dc622dd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Oliver", - "company": "Navivacs", - "phone": "867-484-3891", - "email": "aubrey@navivacs.com" - }, - { - "id": 6977, - "guid": "89e9ab2d-361c-485d-bfb5-20a691a41a9b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooklyn Chapman", - "company": "Orthosoft", - "phone": "800-401-3476", - "email": "brooklyn@orthosoft.com" - }, - { - "id": 6978, - "guid": "59fbfcf6-1dfd-439d-a753-c63f3080ddb9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Nash", - "company": "Titanirola", - "phone": "888-531-2469", - "email": "evelyn@titanirola.com" - }, - { - "id": 6979, - "guid": "517c0bcf-cdc4-4edf-96f0-173f93bbbd75", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Watson", - "company": "Vencom", - "phone": "825-483-2185", - "email": "sofia@vencom.com" - }, - { - "id": 6980, - "guid": "873f0c31-cb21-4e95-a694-fce8d219079f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Bush", - "company": "SysUSA", - "phone": "883-472-2497", - "email": "camila@sysusa.com" - }, - { - "id": 6981, - "guid": "76ad50b4-5ba1-4f73-be5b-44d2eff0bf64", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Fisher", - "company": "RoboAerlogix", - "phone": "890-462-2479", - "email": "kaylee@roboaerlogix.com" - }, - { - "id": 6982, - "guid": "3ca49421-cc44-44d7-a7cf-58520b643d6e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Nelson", - "company": "Steganoconiche", - "phone": "826-557-3820", - "email": "kaitlyn@steganoconiche.com" - }, - { - "id": 6983, - "guid": "61f777a3-faed-4262-aa1d-22fcccb57a07", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jocelyn Fulton", - "company": "Orthomedia", - "phone": "883-523-2951", - "email": "jocelyn@orthomedia.com" - }, - { - "id": 6984, - "guid": "cdc042c1-f1c1-40a5-8ea2-62c04e88e480", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Webster", - "company": "Tekcar", - "phone": "893-543-2079", - "email": "arianna@tekcar.com" - }, - { - "id": 6985, - "guid": "663fe054-7856-41aa-af15-60b69b09b07d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Bush", - "company": "Jamrola", - "phone": "813-462-2654", - "email": "julia@jamrola.com" - }, - { - "id": 6986, - "guid": "b46f2515-99de-40a3-9c1a-192b17ddc39b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Milton", - "company": "Teratopia", - "phone": "865-598-3988", - "email": "molly@teratopia.com" - }, - { - "id": 6987, - "guid": "564029c5-517b-4651-a53b-467559518ce3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Freeman", - "company": "Anagraph", - "phone": "849-466-3462", - "email": "abigail@anagraph.com" - }, - { - "id": 6988, - "guid": "5c067024-a0db-4a5e-8e12-27a036665abc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Murphy", - "company": "Anagraph", - "phone": "852-567-3455", - "email": "ava@anagraph.com" - }, - { - "id": 6989, - "guid": "b065f9fd-1c92-4ff8-b92b-4239f623c191", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Wood", - "company": "Jamconik", - "phone": "827-430-2793", - "email": "molly@jamconik.com" - }, - { - "id": 6990, - "guid": "fca02883-6375-4ce3-bd08-563f1229dfd8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Gustman", - "company": "Quintegrity", - "phone": "862-443-3090", - "email": "brianna@quintegrity.com" - }, - { - "id": 6991, - "guid": "96e0404a-7ba0-4b6e-b3c5-a3bfad22d5b0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Gilmore", - "company": "Venconix", - "phone": "885-536-3363", - "email": "serenity@venconix.com" - }, - { - "id": 6992, - "guid": "8319b47f-a2cd-4f0f-a1db-b3ad7b6dc1a3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Fisher", - "company": "Genland", - "phone": "803-567-3366", - "email": "hailey@genland.com" - }, - { - "id": 6993, - "guid": "773c5de3-5084-495c-9748-931921eab2d2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily WifKinson", - "company": "Conrama", - "phone": "817-479-2547", - "email": "emily@conrama.com" - }, - { - "id": 6994, - "guid": "f5ec8529-645b-4d11-8df6-8e7918695d90", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Winter", - "company": "Raylog", - "phone": "883-512-2344", - "email": "emma@raylog.com" - }, - { - "id": 6995, - "guid": "7a9860d2-c5bb-4e9c-9c2f-70076e19aaa8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emily Watson", - "company": "Cryptotemplate", - "phone": "802-469-3878", - "email": "emily@cryptotemplate.com" - }, - { - "id": 6996, - "guid": "e26569ea-88de-4ec0-a56f-89279be9ac8c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Creighton", - "company": "Cryptotegrity", - "phone": "811-422-3652", - "email": "amelia@cryptotegrity.com" - }, - { - "id": 6997, - "guid": "3cadaf85-148e-42c0-91bf-5884950a8dd9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Gibbs", - "company": "Systheon", - "phone": "805-558-3821", - "email": "paige@systheon.com" - }, - { - "id": 6998, - "guid": "1b3179e6-205b-4cc2-9bc3-eddbe5959a2a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Miln", - "company": "Truetomic", - "phone": "866-531-3340", - "email": "emma@truetomic.com" - }, - { - "id": 6999, - "guid": "70bcad2f-ffd3-45ac-82ce-7f44b8a7a61d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Hamphrey", - "company": "Sontopia", - "phone": "818-470-2858", - "email": "jessica@sontopia.com" - }, - { - "id": 7000, - "guid": "5f97d674-76b3-440a-a5c0-69629e26a970", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Crossman", - "company": "Proline", - "phone": "882-431-3249", - "email": "serenity@proline.com" - }, - { - "id": 7001, - "guid": "245ec7fe-3500-47e1-9e9c-08bdc157581f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lauren Chapman", - "company": "Turbomart", - "phone": "818-406-3701", - "email": "lauren@turbomart.com" - }, - { - "id": 7002, - "guid": "ed8ed047-2a21-4ec8-8a9a-7c0df1de1f0d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Timmons", - "company": "Steganoconiche", - "phone": "802-416-3153", - "email": "mya@steganoconiche.com" - }, - { - "id": 7003, - "guid": "48e0624a-920f-461b-b3b0-522a4609c307", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Goldman", - "company": "Cryptotegrity", - "phone": "899-459-2222", - "email": "gabriella@cryptotegrity.com" - }, - { - "id": 7004, - "guid": "fbbe6c0c-99e3-4ed0-acb4-d2416bce0719", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Hancock", - "company": "Aprama", - "phone": "871-596-3542", - "email": "emily@aprama.com" - }, - { - "id": 7005, - "guid": "d59e76cb-4003-4294-97b6-1cdcca8f35a5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madeline Cook", - "company": "Syssoft", - "phone": "893-404-2378", - "email": "madeline@syssoft.com" - }, - { - "id": 7006, - "guid": "c3a6aee4-930f-4096-b6fc-30c62c260903", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Wainwright", - "company": "Videobanc", - "phone": "858-503-3441", - "email": "samantha@videobanc.com" - }, - { - "id": 7007, - "guid": "03167d33-6e62-460a-8b72-29ed001807b7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Winter", - "company": "Nanobanc", - "phone": "807-580-3035", - "email": "amelia@nanobanc.com" - }, - { - "id": 7008, - "guid": "d01d6acb-4ea6-451e-a852-9620889baf16", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila WifKinson", - "company": "Rapigrafix", - "phone": "801-485-3951", - "email": "camila@rapigrafix.com" - }, - { - "id": 7009, - "guid": "7108e4a4-90a7-4877-b6df-c0a6345fa07f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Wayne", - "company": "Orthosoft", - "phone": "874-457-2734", - "email": "payton@orthosoft.com" - }, - { - "id": 7010, - "guid": "7930283c-5e63-49f8-b814-f9297fc9e5b7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Waller", - "company": "iOptystix", - "phone": "897-525-3182", - "email": "bailey@ioptystix.com" - }, - { - "id": 7011, - "guid": "6d9a1daa-ac8d-4870-bce9-5c53cb9d07cf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Owen", - "company": "Fibrotouch", - "phone": "857-482-3556", - "email": "lillian@fibrotouch.com" - }, - { - "id": 7012, - "guid": "f8f0edb9-3aa8-441a-ad2d-ddd4f780d168", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Crossman", - "company": "Dynarama", - "phone": "889-422-2467", - "email": "natalie@dynarama.com" - }, - { - "id": 7013, - "guid": "6ff0d737-8f3d-41ac-aabc-0c90e641bc9d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley Milton", - "company": "Robocomm", - "phone": "854-409-3786", - "email": "ashley@robocomm.com" - }, - { - "id": 7014, - "guid": "adf9c3b3-619f-4113-a01b-e1a66a54c0aa", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Adamson", - "company": "Anagraph", - "phone": "811-412-3927", - "email": "sophia@anagraph.com" - }, - { - "id": 7015, - "guid": "6f974d6e-6451-4335-beae-a38102f1f0ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Chapman", - "company": "Polytheon", - "phone": "887-600-2274", - "email": "addison@polytheon.com" - }, - { - "id": 7016, - "guid": "848e9b70-21a6-4357-858f-11ace0d14fa6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Thornton", - "company": "iEnland", - "phone": "807-567-3374", - "email": "katelyn@ienland.com" - }, - { - "id": 7017, - "guid": "72ecba36-8b17-44f5-8437-48f846d0d4d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Watson", - "company": "Venconix", - "phone": "807-493-2665", - "email": "maria@venconix.com" - }, - { - "id": 7018, - "guid": "0f0b74cd-e6ef-4892-95f7-5b751b3373e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Gibbs", - "company": "Gigaura", - "phone": "859-419-2234", - "email": "peyton@gigaura.com" - }, - { - "id": 7019, - "guid": "7005d39e-0e19-4efe-9580-d68bb165989c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Gate", - "company": "Superscope", - "phone": "832-472-3679", - "email": "sophie@superscope.com" - }, - { - "id": 7020, - "guid": "fd886789-8f61-42ad-9bff-0b2646913c57", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Turner", - "company": "Qualserve", - "phone": "889-596-3684", - "email": "natalie@qualserve.com" - }, - { - "id": 7021, - "guid": "715be3ac-ce67-47be-b887-5b429c840b49", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Croftoon", - "company": "Rapigrafix", - "phone": "820-504-2475", - "email": "addison@rapigrafix.com" - }, - { - "id": 7022, - "guid": "d5fa66da-c4f6-47c3-bf27-d6d341d2f216", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Miers", - "company": "Entcast", - "phone": "895-501-3455", - "email": "khloe@entcast.com" - }, - { - "id": 7023, - "guid": "2344dd27-cd4e-4d7c-b7cf-53460504abd0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Neal", - "company": "Robotemplate", - "phone": "836-421-3484", - "email": "paige@robotemplate.com" - }, - { - "id": 7024, - "guid": "8bd3e23b-45df-4d8c-82f3-4f0247a9aa15", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Webster", - "company": "Cryptotegrity", - "phone": "878-422-2486", - "email": "emma@cryptotegrity.com" - }, - { - "id": 7025, - "guid": "1ce08dda-9d7e-4c3d-9eee-1c1c98684e19", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Oliver", - "company": "Unologic", - "phone": "864-481-2497", - "email": "addison@unologic.com" - }, - { - "id": 7026, - "guid": "817dfb0f-5825-4d80-b456-c392d3c57c7a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Gilson", - "company": "Hypervaco", - "phone": "846-584-3324", - "email": "gianna@hypervaco.com" - }, - { - "id": 7027, - "guid": "1fa71362-9563-40dd-9686-5fcdac449acd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Higgins", - "company": "Robotomic", - "phone": "891-581-3167", - "email": "allison@robotomic.com" - }, - { - "id": 7028, - "guid": "c1c95b37-519e-4330-84e6-9512ae9639b9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Vance", - "company": "iEnland", - "phone": "819-481-3618", - "email": "kimberly@ienland.com" - }, - { - "id": 7029, - "guid": "a295634f-c910-47c6-9324-39e3a07a696c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Hancock", - "company": "Proline", - "phone": "815-420-3320", - "email": "ariana@proline.com" - }, - { - "id": 7030, - "guid": "a8b3eb73-0e68-42ec-b927-0c65d8e64c10", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Chesterton", - "company": "Thermotomic", - "phone": "827-458-2234", - "email": "serenity@thermotomic.com" - }, - { - "id": 7031, - "guid": "aeacfc34-dd8c-4575-98b6-e0ad709a765a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Vance", - "company": "Safeagra", - "phone": "854-511-2495", - "email": "sydney@safeagra.com" - }, - { - "id": 7032, - "guid": "9073217d-106e-45ff-985d-af68666594e1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Galbraith", - "company": "Westmedia", - "phone": "850-560-3747", - "email": "charlotte@westmedia.com" - }, - { - "id": 7033, - "guid": "38c68575-b1e4-4610-9f82-7a9f3f671df4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mya Chesterton", - "company": "Safeagra", - "phone": "832-428-2381", - "email": "mya@safeagra.com" - }, - { - "id": 7034, - "guid": "a22df2a1-0961-4840-84a8-b8ce463f90be", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Goodman", - "company": "Syssoft", - "phone": "863-589-3050", - "email": "sophia@syssoft.com" - }, - { - "id": 7035, - "guid": "8181b19f-ae4b-4abf-b19d-0133444faa1b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Carrington", - "company": "Entcast", - "phone": "893-598-3617", - "email": "charlotte@entcast.com" - }, - { - "id": 7036, - "guid": "ae0f0cee-d9a8-4e5a-a371-55ed4e19f0f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Wainwright", - "company": "Netseco", - "phone": "895-597-2521", - "email": "emily@netseco.com" - }, - { - "id": 7037, - "guid": "7a4200dc-babd-4c0e-b73e-1d8d12342afa", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Conors", - "company": "Hypervaco", - "phone": "817-429-2592", - "email": "faith@hypervaco.com" - }, - { - "id": 7038, - "guid": "2de78d05-f04b-4433-a1d5-70726646b730", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Claire Hancock", - "company": "Compuamerica", - "phone": "815-564-3008", - "email": "claire@compuamerica.com" - }, - { - "id": 7039, - "guid": "a6f902db-3e9b-4711-8c4e-54338586961e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Mercer", - "company": "Ameritron", - "phone": "843-445-3082", - "email": "brianna@ameritron.com" - }, - { - "id": 7040, - "guid": "64c11d1a-47f5-4773-8ca9-ada03ad899ac", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia White", - "company": "InfoAirway", - "phone": "811-428-3567", - "email": "sophia@infoairway.com" - }, - { - "id": 7041, - "guid": "b5547bc6-dfc2-4a89-91fc-92a4662d4e19", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Gerald", - "company": "Mescaridic", - "phone": "832-525-3090", - "email": "nevaeh@mescaridic.com" - }, - { - "id": 7042, - "guid": "dbf4e2c2-0222-4893-9ca5-feee2a439175", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Charlson", - "company": "Idmax", - "phone": "860-551-2973", - "email": "amelia@idmax.com" - }, - { - "id": 7043, - "guid": "7f4219d5-40b3-4bb5-91e9-113d1185f82f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Michaelson", - "company": "InfoAirway", - "phone": "899-480-3232", - "email": "serenity@infoairway.com" - }, - { - "id": 7044, - "guid": "1f8cdfd7-6742-4d82-a627-8a1310c33650", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Cook", - "company": "Infragraph", - "phone": "800-462-2818", - "email": "aubrey@infragraph.com" - }, - { - "id": 7045, - "guid": "0c9d58b1-9f50-40cb-8de4-8a350d807c89", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maya Goodman", - "company": "Gigaura", - "phone": "861-523-2934", - "email": "maya@gigaura.com" - }, - { - "id": 7046, - "guid": "560034dd-a4a6-4ddf-8ad5-e5ab62602a5d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aaliyah Calhoun", - "company": "iQualcar", - "phone": "882-461-3524", - "email": "aaliyah@iqualcar.com" - }, - { - "id": 7047, - "guid": "610b963a-f054-456c-b021-9ca76fb55e9b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Michaelson", - "company": "Textiqua", - "phone": "889-582-2282", - "email": "gianna@textiqua.com" - }, - { - "id": 7048, - "guid": "9bfb3be0-aabd-460e-a2bb-18be259670aa", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Hamphrey", - "company": "OpKeycomm", - "phone": "800-419-2366", - "email": "savannah@opkeycomm.com" - }, - { - "id": 7049, - "guid": "7dfe885a-db5c-46e2-aacc-f8b00e02b7e9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Winter", - "company": "Technogra", - "phone": "895-432-3791", - "email": "amelia@technogra.com" - }, - { - "id": 7050, - "guid": "ae73ffc0-201c-41f2-b748-a39ef7adabb2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Molligan", - "company": "Proline", - "phone": "858-476-2981", - "email": "mackenzie@proline.com" - }, - { - "id": 7051, - "guid": "f120b921-5902-4db6-b313-306a8df1a71e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Nelson", - "company": "Venconix", - "phone": "880-443-2557", - "email": "arianna@venconix.com" - }, - { - "id": 7052, - "guid": "20ce442a-c6cc-4c28-8265-c0ff563d91f2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Young", - "company": "Netsystems", - "phone": "856-564-3983", - "email": "ella@netsystems.com" - }, - { - "id": 7053, - "guid": "63389cdf-19a2-49ba-8f67-f510ed4d4307", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Audrey Morrison", - "company": "Robotemplate", - "phone": "827-435-3596", - "email": "audrey@robotemplate.com" - }, - { - "id": 7054, - "guid": "c93358e3-bd7f-4bcb-88a9-a5343a588ffb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Mercer", - "company": "Navivacs", - "phone": "868-491-2316", - "email": "madeline@navivacs.com" - }, - { - "id": 7055, - "guid": "fa6bc959-f1a4-4cea-ac87-1167cd94291a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Mercer", - "company": "Anagraph", - "phone": "815-440-3575", - "email": "payton@anagraph.com" - }, - { - "id": 7056, - "guid": "7e0f72c5-97ee-42a8-bc50-520b9a2bb41e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Daniels", - "company": "Pacwest", - "phone": "888-521-3811", - "email": "brooklyn@pacwest.com" - }, - { - "id": 7057, - "guid": "bbc0324b-7e9d-4d7e-b29e-4b8e9adc741c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Oliver", - "company": "Westtomik", - "phone": "823-511-3228", - "email": "amelia@westtomik.com" - }, - { - "id": 7058, - "guid": "efa88c3d-f11d-4a8d-9291-9101e4faf34d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Chesterton", - "company": "Vencom", - "phone": "808-434-2796", - "email": "kylie@vencom.com" - }, - { - "id": 7059, - "guid": "6f96dc94-9368-484a-ac50-2accf0877465", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Owen", - "company": "Conrama", - "phone": "887-441-2447", - "email": "katherine@conrama.com" - }, - { - "id": 7060, - "guid": "15a44620-eb0f-4d09-8716-9011684e3f77", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lauren Davidson", - "company": "Safeagra", - "phone": "837-600-2650", - "email": "lauren@safeagra.com" - }, - { - "id": 7061, - "guid": "f46ac0e7-a4e0-4329-b0dd-9e8ea3eb27a2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madison WifKinson", - "company": "Mescaridic", - "phone": "845-475-3293", - "email": "madison@mescaridic.com" - }, - { - "id": 7062, - "guid": "5b94eda8-88ca-48a5-ae47-b6a52f8f464e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Freeman", - "company": "Pacwest", - "phone": "834-413-3578", - "email": "arianna@pacwest.com" - }, - { - "id": 7063, - "guid": "f0dc6c5a-63ab-4020-b85e-f203bb54da5a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Creighton", - "company": "Interliant", - "phone": "839-551-2086", - "email": "victoria@interliant.com" - }, - { - "id": 7064, - "guid": "b830f6f0-671e-4880-a2c4-efa6f4be2968", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Goldman", - "company": "Conotomics", - "phone": "836-492-3224", - "email": "kimberly@conotomics.com" - }, - { - "id": 7065, - "guid": "4d0af3a4-8c05-42a4-b0b0-2e5fd996bdd3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brianna Gilmore", - "company": "Mescatron", - "phone": "827-600-3139", - "email": "brianna@mescatron.com" - }, - { - "id": 7066, - "guid": "d9b3a78f-641f-4546-a924-163964887127", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katelyn Fisher", - "company": "Allnet", - "phone": "840-556-3097", - "email": "katelyn@allnet.com" - }, - { - "id": 7067, - "guid": "dcc85449-1bd6-4339-b7c9-53b7cf8acba7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Fisher", - "company": "Openserve", - "phone": "845-543-3761", - "email": "riley@openserve.com" - }, - { - "id": 7068, - "guid": "5a889bdd-9755-4331-945c-f3148b9b2b4d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Oldridge", - "company": "Thermotomic", - "phone": "899-438-3299", - "email": "andrea@thermotomic.com" - }, - { - "id": 7069, - "guid": "ef64653d-4a14-46f2-bd22-eaf9c7761c50", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Webster", - "company": "OpKeycomm", - "phone": "838-554-2068", - "email": "makayla@opkeycomm.com" - }, - { - "id": 7070, - "guid": "227d1c2d-f236-4255-af16-d4e21a1bb5f6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Turner", - "company": "Superscope", - "phone": "889-543-2465", - "email": "valeria@superscope.com" - }, - { - "id": 7071, - "guid": "b9ec453f-bd92-48a1-814c-36f5a316cb41", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Croftoon", - "company": "Infragraph", - "phone": "860-545-3820", - "email": "isabella@infragraph.com" - }, - { - "id": 7072, - "guid": "9c32fdf2-a7a3-4c12-b88c-f5fb13df5829", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alyssa Galbraith", - "company": "Xeicon", - "phone": "847-590-3954", - "email": "alyssa@xeicon.com" - }, - { - "id": 7073, - "guid": "d8b4b4c3-0a21-48d3-9e13-316233bfd197", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Haig", - "company": "Titanirola", - "phone": "871-510-2079", - "email": "abigail@titanirola.com" - }, - { - "id": 7074, - "guid": "ac60a3aa-475a-4d41-9ad3-b7762018255d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jocelyn Carrington", - "company": "Jamrola", - "phone": "854-508-2071", - "email": "jocelyn@jamrola.com" - }, - { - "id": 7075, - "guid": "95001d8f-2ac5-451b-817d-3d81e2febaba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Carroll", - "company": "SysUSA", - "phone": "851-530-2339", - "email": "evelyn@sysusa.com" - }, - { - "id": 7076, - "guid": "5b736d2f-9de0-4ad2-ad98-66a1451e9114", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Michaelson", - "company": "Qualserve", - "phone": "864-447-3560", - "email": "bailey@qualserve.com" - }, - { - "id": 7077, - "guid": "af24b305-9ffa-415b-ba87-4af712bc05c3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabella Carter", - "company": "Teratopia", - "phone": "823-429-2925", - "email": "isabella@teratopia.com" - }, - { - "id": 7078, - "guid": "623d4464-6b23-49f1-869e-65f87a06b762", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Creighton", - "company": "Techtron", - "phone": "876-407-2182", - "email": "emma@techtron.com" - }, - { - "id": 7079, - "guid": "03a0a6bc-c6d9-474a-907b-aaae5155e835", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Milton", - "company": "US Infratouch", - "phone": "841-402-2452", - "email": "olivia@us infratouch.com" - }, - { - "id": 7080, - "guid": "bc712a50-51ca-4ac5-9bb0-1a90761e7183", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jasmine Oldman", - "company": "Titanirola", - "phone": "879-448-3017", - "email": "jasmine@titanirola.com" - }, - { - "id": 7081, - "guid": "24def9aa-ac3c-497a-8209-d501cbe1b6c6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Hodges", - "company": "Raylog", - "phone": "807-587-2341", - "email": "taylor@raylog.com" - }, - { - "id": 7082, - "guid": "6f0f8d89-3065-4267-b044-555ff6a9f43e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Gill", - "company": "Allnet", - "phone": "884-432-2472", - "email": "mackenzie@allnet.com" - }, - { - "id": 7083, - "guid": "0d0661c7-da16-4518-bb15-60eb6eff9bf0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Gustman", - "company": "Fibrotopia", - "phone": "805-475-2881", - "email": "abigail@fibrotopia.com" - }, - { - "id": 7084, - "guid": "b5b00fce-603f-432e-bf96-d60c578f7cbc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Brown", - "company": "Pacwest", - "phone": "899-520-3905", - "email": "gianna@pacwest.com" - }, - { - "id": 7085, - "guid": "af22afc9-0ae8-4fab-b5f5-437e689a8294", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Watson", - "company": "Dynarama", - "phone": "840-555-3302", - "email": "isabella@dynarama.com" - }, - { - "id": 7086, - "guid": "12b1ae2e-f6d2-4ff0-b494-044efba07fb6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Clapton", - "company": "Westmedia", - "phone": "877-580-3233", - "email": "lauren@westmedia.com" - }, - { - "id": 7087, - "guid": "041d4230-d91d-4119-b124-1fd5a0f15387", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Oldman", - "company": "Anaframe", - "phone": "805-477-2402", - "email": "andrea@anaframe.com" - }, - { - "id": 7088, - "guid": "6de27dbf-9466-49d1-8ec0-def5a6bbdd37", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Hardman", - "company": "Genland", - "phone": "818-439-2795", - "email": "grace@genland.com" - }, - { - "id": 7089, - "guid": "74db2752-c877-4ec5-abe6-bb711763bff7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Fulton", - "company": "Truegate", - "phone": "830-446-2563", - "email": "taylor@truegate.com" - }, - { - "id": 7090, - "guid": "c11b28d5-bc5d-4565-998e-f3ed74963a5e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Davidson", - "company": "Techtron", - "phone": "824-433-2385", - "email": "kaylee@techtron.com" - }, - { - "id": 7091, - "guid": "ba3e5a5d-27b7-403f-b560-ee94ec7f206e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Nelson", - "company": "Conotomics", - "phone": "829-419-3885", - "email": "julia@conotomics.com" - }, - { - "id": 7092, - "guid": "ef3f87b3-04df-4374-a8ad-fc566c69919a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Brown", - "company": "Mescatron", - "phone": "835-427-2565", - "email": "bella@mescatron.com" - }, - { - "id": 7093, - "guid": "b2af5feb-0ba1-456b-8bab-da26339ca68b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoey Chandter", - "company": "Teraserv", - "phone": "863-583-3685", - "email": "zoey@teraserv.com" - }, - { - "id": 7094, - "guid": "b2eb79e9-07b5-4009-80ec-7ae38ba7b7eb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Wesley", - "company": "Teknoplexon", - "phone": "898-555-3159", - "email": "melanie@teknoplexon.com" - }, - { - "id": 7095, - "guid": "6aaca020-72c5-4a4b-9dae-eabe765a090d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Sherlock", - "company": "Teratopia", - "phone": "872-457-3533", - "email": "emily@teratopia.com" - }, - { - "id": 7096, - "guid": "5633656d-c047-4cd2-bb3c-ac697f99d0ef", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Abigail Nash", - "company": "Jamconik", - "phone": "840-530-3808", - "email": "abigail@jamconik.com" - }, - { - "id": 7097, - "guid": "1dd5333d-d40b-4b93-b3a5-224deb60deb4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Michaelson", - "company": "Safeagra", - "phone": "852-565-2539", - "email": "peyton@safeagra.com" - }, - { - "id": 7098, - "guid": "5e4e1ab6-05e3-486f-bd8b-ee8cb5f74155", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Murphy", - "company": "Systheon", - "phone": "840-499-2594", - "email": "aubrey@systheon.com" - }, - { - "id": 7099, - "guid": "c90f583c-8538-4d1e-9f44-606b34dcffa0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Carey", - "company": "Fibrotopia", - "phone": "832-550-3673", - "email": "arianna@fibrotopia.com" - }, - { - "id": 7100, - "guid": "1aa441b2-856d-4d61-be7f-6e906584ef85", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Harrison", - "company": "Gigaura", - "phone": "817-439-3262", - "email": "aubrey@gigaura.com" - }, - { - "id": 7101, - "guid": "1e56e10d-6690-44c8-900c-f469ecd5c34f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Oldridge", - "company": "Genland", - "phone": "845-406-3941", - "email": "chloe@genland.com" - }, - { - "id": 7102, - "guid": "f3474727-8a12-4a99-adba-2ccc102ad7b8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Neal", - "company": "Rapigrafix", - "phone": "867-553-3580", - "email": "sophie@rapigrafix.com" - }, - { - "id": 7103, - "guid": "99bc0817-67be-4b80-81a9-6c179c12585e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Abramson", - "company": "Airdyne", - "phone": "843-508-2591", - "email": "paige@airdyne.com" - }, - { - "id": 7104, - "guid": "6a00aa70-a411-42e9-8c9f-bbadae00f2a2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Oldman", - "company": "Jamrola", - "phone": "827-483-2484", - "email": "sarah@jamrola.com" - }, - { - "id": 7105, - "guid": "e0abb45e-54f8-4212-8bd9-0885feca9be7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sofia Gill", - "company": "Jamrola", - "phone": "868-445-2240", - "email": "sofia@jamrola.com" - }, - { - "id": 7106, - "guid": "04383963-d7df-4a88-8347-838e8d144c0f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Hawkins", - "company": "Skydata", - "phone": "884-554-2270", - "email": "gianna@skydata.com" - }, - { - "id": 7107, - "guid": "183dd6dc-a27a-44ac-8c5f-f1a4929b2148", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Allison Timmons", - "company": "Compuamerica", - "phone": "863-510-2672", - "email": "allison@compuamerica.com" - }, - { - "id": 7108, - "guid": "3082e99d-aef0-4bca-8a3d-910bf848c10d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Taylor Harrison", - "company": "Jamconik", - "phone": "870-450-2453", - "email": "taylor@jamconik.com" - }, - { - "id": 7109, - "guid": "70afbd7a-5e71-47b3-9391-4d53987060fe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Gilmore", - "company": "Fibrotopia", - "phone": "839-512-2906", - "email": "zoe@fibrotopia.com" - }, - { - "id": 7110, - "guid": "1630fa14-a0a8-44ab-96bc-092c86987528", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Miln", - "company": "eEyetanic", - "phone": "879-404-2748", - "email": "melanie@eeyetanic.com" - }, - { - "id": 7111, - "guid": "2020b921-b757-48be-896d-5a49228787bf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Victoria Osborne", - "company": "Fibrotopia", - "phone": "876-436-2989", - "email": "victoria@fibrotopia.com" - }, - { - "id": 7112, - "guid": "dc479f1a-6b9d-42f2-b37f-eda618f2f958", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Conors", - "company": "Qualserve", - "phone": "864-468-2186", - "email": "autumn@qualserve.com" - }, - { - "id": 7113, - "guid": "961d915a-6fc9-48db-a896-844cb7a897de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Cook", - "company": "Quintegrity", - "phone": "813-469-3043", - "email": "julia@quintegrity.com" - }, - { - "id": 7114, - "guid": "056502b1-6d00-4535-b4c2-d7b07f1df2a8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Fisher", - "company": "Conotomics", - "phone": "821-412-3818", - "email": "lillian@conotomics.com" - }, - { - "id": 7115, - "guid": "694127d8-0f2d-4f17-898c-4d3f95af3aed", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Miller", - "company": "Keytheon", - "phone": "879-452-3779", - "email": "morgan@keytheon.com" - }, - { - "id": 7116, - "guid": "da9374e7-8878-49c6-be3c-223d80f32ca5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Chandter", - "company": "Teratopia", - "phone": "850-599-3395", - "email": "valeria@teratopia.com" - }, - { - "id": 7117, - "guid": "6210280d-611d-42d0-8c64-de409362eaea", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley Murphy", - "company": "Enlogia", - "phone": "857-503-3152", - "email": "ashley@enlogia.com" - }, - { - "id": 7118, - "guid": "cbe70fa9-04b2-46d4-879b-2d74c3f3f489", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ashley Vance", - "company": "Ventanium", - "phone": "887-551-3874", - "email": "ashley@ventanium.com" - }, - { - "id": 7119, - "guid": "f07d6b5c-0898-401e-9117-b9993edab5be", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Young", - "company": "RoboAerlogix", - "phone": "855-404-2492", - "email": "aubrey@roboaerlogix.com" - }, - { - "id": 7120, - "guid": "f9212691-d809-410f-b0dd-3ec9f040dbbf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Bush", - "company": "Allnet", - "phone": "830-569-3741", - "email": "mariah@allnet.com" - }, - { - "id": 7121, - "guid": "856cc12d-6e36-4f66-99ab-165296be1925", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Morrison", - "company": "Titanigraf", - "phone": "860-563-2366", - "email": "ella@titanigraf.com" - }, - { - "id": 7122, - "guid": "a6fb16df-ad08-41c4-98c0-563e3e43deb4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Miller", - "company": "Ventanium", - "phone": "864-517-2311", - "email": "kaylee@ventanium.com" - }, - { - "id": 7123, - "guid": "955486bb-aac8-4d62-969e-6b5fd5f753f5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Wayne", - "company": "Sontopia", - "phone": "832-459-3084", - "email": "destiny@sontopia.com" - }, - { - "id": 7124, - "guid": "c77988c3-bafe-43cf-91d0-a2e28c46ad8d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Turner", - "company": "Interliant", - "phone": "887-556-3693", - "email": "alexis@interliant.com" - }, - { - "id": 7125, - "guid": "57262c76-1eb7-4d4e-84ae-61c30236af9b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Owen", - "company": "Aluco", - "phone": "887-447-2599", - "email": "emma@aluco.com" - }, - { - "id": 7126, - "guid": "24e9eaad-965e-4644-a7e6-4c6f2d126a9a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Nathan", - "company": "Celgra", - "phone": "899-468-2764", - "email": "destiny@celgra.com" - }, - { - "id": 7127, - "guid": "ee2b8cf2-fe80-40c5-8b8b-827785236175", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Fisher", - "company": "Turbomart", - "phone": "886-417-2988", - "email": "lillian@turbomart.com" - }, - { - "id": 7128, - "guid": "788cd160-d636-4751-a57e-14e663d470de", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Freeman", - "company": "Truegate", - "phone": "862-416-3945", - "email": "valeria@truegate.com" - }, - { - "id": 7129, - "guid": "93e5b76f-2a34-48a6-8ddc-acf3e092ca28", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madelyn Youmans", - "company": "Anaframe", - "phone": "847-432-2012", - "email": "madelyn@anaframe.com" - }, - { - "id": 7130, - "guid": "40e7670c-1795-4459-a6b1-81a7b366a527", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Watson", - "company": "Vencom", - "phone": "886-531-2612", - "email": "emma@vencom.com" - }, - { - "id": 7131, - "guid": "0fd21d00-a5bf-410a-9649-a5a482f41670", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Hoggarth", - "company": "Navivacs", - "phone": "878-441-3157", - "email": "morgan@navivacs.com" - }, - { - "id": 7132, - "guid": "2bff2a8e-8a10-4c35-b9e1-17cd71b85299", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Peyton Wood", - "company": "Allphysiche", - "phone": "849-519-3837", - "email": "peyton@allphysiche.com" - }, - { - "id": 7133, - "guid": "ac55851f-a7f3-4459-b99a-0faa9f303d14", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Gilson", - "company": "InfoAirway", - "phone": "860-523-2157", - "email": "claire@infoairway.com" - }, - { - "id": 7134, - "guid": "aeaa915c-f90e-4fef-923b-f7934f47cc34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Hancock", - "company": "Fibrotopia", - "phone": "821-426-3829", - "email": "jasmine@fibrotopia.com" - }, - { - "id": 7135, - "guid": "b0eb2cf7-ad77-4500-b5e1-c525f97797a5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Walkman", - "company": "Titanigraf", - "phone": "884-400-3966", - "email": "leah@titanigraf.com" - }, - { - "id": 7136, - "guid": "bbf08c77-81c7-478e-a1e1-e76f94633768", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Stanley", - "company": "iSkyvaco", - "phone": "803-431-2335", - "email": "sophie@iskyvaco.com" - }, - { - "id": 7137, - "guid": "be698229-261e-4e6d-9528-3919d29c199e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Charlson", - "company": "Multitiqua", - "phone": "880-494-2767", - "email": "jasmine@multitiqua.com" - }, - { - "id": 7138, - "guid": "34548a49-fb45-451c-8c02-140c325ecf51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Bush", - "company": "Polytheon", - "phone": "805-486-2383", - "email": "peyton@polytheon.com" - }, - { - "id": 7139, - "guid": "2d094bf9-fa5f-4850-9255-6dae00a03b1a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline WifKinson", - "company": "iQualcar", - "phone": "803-566-3593", - "email": "madeline@iqualcar.com" - }, - { - "id": 7140, - "guid": "845b409d-6515-43d6-959b-e4cd8dc1765a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Brickman", - "company": "iQualcar", - "phone": "815-496-2525", - "email": "elizabeth@iqualcar.com" - }, - { - "id": 7141, - "guid": "9301e9da-ed27-4509-a0c0-9841586227b9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Cramer", - "company": "Anagraph", - "phone": "815-471-3998", - "email": "caroline@anagraph.com" - }, - { - "id": 7142, - "guid": "d4e69d19-f454-4011-a215-d1040547e53a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Hailey", - "company": "Systheon", - "phone": "883-515-2650", - "email": "allison@systheon.com" - }, - { - "id": 7143, - "guid": "e38a8411-33bd-4f56-9f7d-b79b07c4a8fb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Crossman", - "company": "Polytheon", - "phone": "896-447-3827", - "email": "madison@polytheon.com" - }, - { - "id": 7144, - "guid": "46ad7b16-8ff7-4280-8b7a-287f66e95e27", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Young", - "company": "Vencom", - "phone": "852-476-2327", - "email": "trinity@vencom.com" - }, - { - "id": 7145, - "guid": "afbb2b87-94f6-4946-af6d-aacd17b51a3e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Chandter", - "company": "iEnland", - "phone": "841-424-2442", - "email": "gabriella@ienland.com" - }, - { - "id": 7146, - "guid": "527349fc-a936-4451-83f3-10c88c762e5a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Anna Youmans", - "company": "Jamrola", - "phone": "846-518-2120", - "email": "anna@jamrola.com" - }, - { - "id": 7147, - "guid": "f7ac1f7e-896c-45d2-b713-3df95ac0a6a5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Michaelson", - "company": "Aprama", - "phone": "821-543-3453", - "email": "mariah@aprama.com" - }, - { - "id": 7148, - "guid": "833200e7-5d94-40ed-a0b9-bd21be2af5cc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Haig", - "company": "Teraserv", - "phone": "816-542-3448", - "email": "kaitlyn@teraserv.com" - }, - { - "id": 7149, - "guid": "db16bffc-abf0-4da6-8d4a-969cdd7e5af8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ashley Watson", - "company": "Infragraph", - "phone": "811-448-3364", - "email": "ashley@infragraph.com" - }, - { - "id": 7150, - "guid": "5d714cbb-9dd0-4c72-8a87-3b8f9d494ae2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Young", - "company": "Polytheon", - "phone": "829-427-2722", - "email": "morgan@polytheon.com" - }, - { - "id": 7151, - "guid": "e6b1d55f-ca5c-434c-8904-9742760e5b7d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Neal", - "company": "Transtouch", - "phone": "885-461-3028", - "email": "hailey@transtouch.com" - }, - { - "id": 7152, - "guid": "fc702eb2-014f-4c9b-80b1-f49943c918c4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Nash", - "company": "Safetrust", - "phone": "866-552-2984", - "email": "katelyn@safetrust.com" - }, - { - "id": 7153, - "guid": "044b9e22-7e80-4a7d-b7f1-c8668c1ae863", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jessica Ford", - "company": "eSteganoergy", - "phone": "871-479-3769", - "email": "jessica@esteganoergy.com" - }, - { - "id": 7154, - "guid": "dca0b57c-6b00-4722-96a2-fd67fdd63e6e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Wayne", - "company": "Orthomedia", - "phone": "848-465-3592", - "email": "kaitlyn@orthomedia.com" - }, - { - "id": 7155, - "guid": "e6d48988-9d8d-4fbf-80ad-1c3fbad15eb1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Otis", - "company": "Multitiqua", - "phone": "888-441-2337", - "email": "kylie@multitiqua.com" - }, - { - "id": 7156, - "guid": "c39cca13-6ab6-4c87-878e-a3b6cb43d2f0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Hamphrey", - "company": "Teknoplexon", - "phone": "805-592-3090", - "email": "allison@teknoplexon.com" - }, - { - "id": 7157, - "guid": "d85d8f33-039a-4402-a5fb-fe389e5f020a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Mercer", - "company": "iMedconik", - "phone": "800-494-2603", - "email": "madelyn@imedconik.com" - }, - { - "id": 7158, - "guid": "bde2640c-2a72-41be-a5fd-038f9c06b035", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Creighton", - "company": "SysUSA", - "phone": "892-508-3206", - "email": "ariana@sysusa.com" - }, - { - "id": 7159, - "guid": "835582be-4cbf-4bcb-80dd-5924917ac25f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Thorndike", - "company": "Teratopia", - "phone": "870-448-3822", - "email": "zoey@teratopia.com" - }, - { - "id": 7160, - "guid": "24e5afaf-9119-4374-929a-6f7de07bfdea", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Genesis Abramson", - "company": "Generola", - "phone": "863-551-3089", - "email": "genesis@generola.com" - }, - { - "id": 7161, - "guid": "c69b814b-f20d-48ec-8989-bc24781b10dc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Sheldon", - "company": "Sontopia", - "phone": "825-438-3355", - "email": "peyton@sontopia.com" - }, - { - "id": 7162, - "guid": "caac94be-4c6a-4768-9696-63cb684048aa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Youmans", - "company": "Vencom", - "phone": "851-445-2697", - "email": "genesis@vencom.com" - }, - { - "id": 7163, - "guid": "1f965168-cdea-4ac6-b1d6-229a486a424a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Brickman", - "company": "Truetomic", - "phone": "872-424-2246", - "email": "gianna@truetomic.com" - }, - { - "id": 7164, - "guid": "ac2696d2-49cd-437b-adfa-82b7f68fab97", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Nash", - "company": "RoboAerlogix", - "phone": "846-586-3010", - "email": "jocelyn@roboaerlogix.com" - }, - { - "id": 7165, - "guid": "7711850e-1501-42c6-820a-2630f0b20ccc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Mercer", - "company": "Fibrotopia", - "phone": "841-403-2324", - "email": "makayla@fibrotopia.com" - }, - { - "id": 7166, - "guid": "3c40e860-3c75-41f3-9a92-d8946a9fb390", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Nathan", - "company": "Westmedia", - "phone": "804-489-2221", - "email": "leah@westmedia.com" - }, - { - "id": 7167, - "guid": "6f2dc213-7c1d-479a-8459-71661f0a4504", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Morrison", - "company": "Aprama", - "phone": "881-474-2105", - "email": "gabriella@aprama.com" - }, - { - "id": 7168, - "guid": "95b12424-d849-4ed3-9e5b-a9b074ae0dcb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Chesterton", - "company": "Interliant", - "phone": "894-569-2528", - "email": "mia@interliant.com" - }, - { - "id": 7169, - "guid": "dca882d9-dacb-489c-be94-0e395d0cf617", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Day", - "company": "Anagraph", - "phone": "896-420-2487", - "email": "peyton@anagraph.com" - }, - { - "id": 7170, - "guid": "87e18f5e-8b51-499a-a180-7122b4bef6c7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Webster", - "company": "Teraserv", - "phone": "867-542-3148", - "email": "melanie@teraserv.com" - }, - { - "id": 7171, - "guid": "faaf2da3-b8c2-479c-a9f0-6543f2e04ab9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Hodges", - "company": "Xeicon", - "phone": "874-588-3315", - "email": "anna@xeicon.com" - }, - { - "id": 7172, - "guid": "c3cac73d-fce7-4ac2-b4a9-3b188266158f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Crossman", - "company": "OpKeycomm", - "phone": "884-460-3082", - "email": "brooke@opkeycomm.com" - }, - { - "id": 7173, - "guid": "9ab173f0-6334-4d1e-9357-410835533134", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Claire Hailey", - "company": "Pericenta", - "phone": "853-416-2745", - "email": "claire@pericenta.com" - }, - { - "id": 7174, - "guid": "aa64faf8-5ea2-4015-aa82-ca88ae4f4875", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Wesley", - "company": "Unconix", - "phone": "891-533-2933", - "email": "charlotte@unconix.com" - }, - { - "id": 7175, - "guid": "848db3bc-d402-40ee-a0c2-db728f7fb750", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madison Sherlock", - "company": "Indisco", - "phone": "830-417-2771", - "email": "madison@indisco.com" - }, - { - "id": 7176, - "guid": "2dccf8dc-0a29-4e1b-ba67-2a65b684a7f1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Smith", - "company": "Allnet", - "phone": "896-431-2639", - "email": "nevaeh@allnet.com" - }, - { - "id": 7177, - "guid": "557d8b9f-9245-4c42-9338-56c25825ddd2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Nathan", - "company": "Generola", - "phone": "833-560-2671", - "email": "melanie@generola.com" - }, - { - "id": 7178, - "guid": "ad7535d4-9185-47ee-902f-f2a233929965", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brianna Freeman", - "company": "Westmedia", - "phone": "802-558-3143", - "email": "brianna@westmedia.com" - }, - { - "id": 7179, - "guid": "39143fd8-fcd7-43b4-9291-4234f9825961", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Timmons", - "company": "Robotemplate", - "phone": "819-459-3023", - "email": "alexa@robotemplate.com" - }, - { - "id": 7180, - "guid": "09c013a9-5d0a-4029-bc49-ca8457856a8d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Gibbs", - "company": "Orthosoft", - "phone": "830-439-2595", - "email": "bella@orthosoft.com" - }, - { - "id": 7181, - "guid": "4d8098e0-210c-4d95-bd38-221fd3bc6d48", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Winter", - "company": "Transtouch", - "phone": "806-404-2699", - "email": "emily@transtouch.com" - }, - { - "id": 7182, - "guid": "35b8f08d-9cb4-494e-97d0-fbd31545f999", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Julia Neal", - "company": "Safetrust", - "phone": "874-404-3440", - "email": "julia@safetrust.com" - }, - { - "id": 7183, - "guid": "fafe460b-4782-4692-98ee-ddcbc4029ddb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Caroline Freeman", - "company": "Entcast", - "phone": "846-407-3737", - "email": "caroline@entcast.com" - }, - { - "id": 7184, - "guid": "eeecc35e-65d6-4cf4-9762-8146b3c04a77", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Genesis Chapman", - "company": "Jamconik", - "phone": "894-508-2144", - "email": "genesis@jamconik.com" - }, - { - "id": 7185, - "guid": "c676db80-a4eb-4dc0-a69d-513a11e33f21", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aubrey Gardner", - "company": "iOptystix", - "phone": "842-405-3092", - "email": "aubrey@ioptystix.com" - }, - { - "id": 7186, - "guid": "f48371ff-28f1-4f91-ad15-281ee5dee51b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Freeman", - "company": "Infraique", - "phone": "870-534-3944", - "email": "lauren@infraique.com" - }, - { - "id": 7187, - "guid": "be0a6f6c-a421-412d-851d-8eafd1e3733e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Youmans", - "company": "Proline", - "phone": "813-447-3483", - "email": "victoria@proline.com" - }, - { - "id": 7188, - "guid": "1ddee731-0fd1-4d58-a679-2e1678c08550", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Young", - "company": "Xeicon", - "phone": "871-426-3773", - "email": "maya@xeicon.com" - }, - { - "id": 7189, - "guid": "3a8d68f3-14dc-4db0-8102-23a4f32835d8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Nash", - "company": "Cryptotegrity", - "phone": "875-498-3144", - "email": "ava@cryptotegrity.com" - }, - { - "id": 7190, - "guid": "496b0bb9-c47f-4263-9750-b19f381308f8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Carrington", - "company": "Teraserv", - "phone": "842-495-2193", - "email": "isabella@teraserv.com" - }, - { - "id": 7191, - "guid": "28048e29-74e6-4fa6-a790-9568e934f0a8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Wayne", - "company": "Orthomedia", - "phone": "878-533-3954", - "email": "claire@orthomedia.com" - }, - { - "id": 7192, - "guid": "359e832c-5c05-4fe9-8803-014a018323f7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Chandter", - "company": "Safetrust", - "phone": "873-586-2653", - "email": "jocelyn@safetrust.com" - }, - { - "id": 7193, - "guid": "408659c2-6fd2-4986-a10d-d022b0240cea", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Charlson", - "company": "Enlogia", - "phone": "861-577-2686", - "email": "vanessa@enlogia.com" - }, - { - "id": 7194, - "guid": "2f6388b2-10d3-4b58-bcd4-862d201516d0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Goldman", - "company": "Idmax", - "phone": "818-454-2147", - "email": "julia@idmax.com" - }, - { - "id": 7195, - "guid": "ba248d2d-568c-4281-a31c-833e2c4ac317", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Galbraith", - "company": "Skydata", - "phone": "894-576-2437", - "email": "alexandra@skydata.com" - }, - { - "id": 7196, - "guid": "3e604146-9800-4fb2-91e9-0a512400a32b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Owen", - "company": "Transtouch", - "phone": "818-425-3673", - "email": "mya@transtouch.com" - }, - { - "id": 7197, - "guid": "5c291210-58ec-4f03-9153-e0de7671d3ec", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Watson", - "company": "eEyetanic", - "phone": "889-571-3031", - "email": "kayla@eeyetanic.com" - }, - { - "id": 7198, - "guid": "6d7083c0-8ef5-48c1-aa88-7816ee3d38c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Miln", - "company": "RoboAerlogix", - "phone": "862-521-2372", - "email": "rachel@roboaerlogix.com" - }, - { - "id": 7199, - "guid": "edcc5397-2dae-4864-b538-d2b9befb9c2a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Campbell", - "company": "SysVenamerica", - "phone": "888-529-3687", - "email": "faith@sysvenamerica.com" - }, - { - "id": 7200, - "guid": "49980d23-ea15-4a3a-b9b5-b40567706ff4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mia Carey", - "company": "iEnland", - "phone": "864-501-3460", - "email": "mia@ienland.com" - }, - { - "id": 7201, - "guid": "66de9927-c4dc-4fcd-99dc-7c56e8e3bdc6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Neal", - "company": "Entcast", - "phone": "863-461-3727", - "email": "claire@entcast.com" - }, - { - "id": 7202, - "guid": "9b92e1ea-0d50-4c1c-bd03-497c1292bf8e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Waller", - "company": "Syssoft", - "phone": "822-566-2362", - "email": "arianna@syssoft.com" - }, - { - "id": 7203, - "guid": "76f09ffa-7c72-493a-a369-bb401fc0a1fb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Wood", - "company": "Ventanium", - "phone": "877-545-2837", - "email": "katherine@ventanium.com" - }, - { - "id": 7204, - "guid": "acc2214d-0ab9-4ba8-8103-e0adc38d49fa", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Anna WifKinson", - "company": "Generola", - "phone": "878-454-3391", - "email": "anna@generola.com" - }, - { - "id": 7205, - "guid": "605ce645-24fb-4b18-9832-44302132b9da", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Morrison", - "company": "Systheon", - "phone": "802-596-2592", - "email": "mia@systheon.com" - }, - { - "id": 7206, - "guid": "ccc01656-c513-4143-a991-95aecf064545", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Wayne", - "company": "Cryptotegrity", - "phone": "885-592-3125", - "email": "addison@cryptotegrity.com" - }, - { - "id": 7207, - "guid": "883d9c14-081d-4822-950e-6d88c8d35fa4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Vance", - "company": "Pacwest", - "phone": "831-440-3813", - "email": "elizabeth@pacwest.com" - }, - { - "id": 7208, - "guid": "90ec9740-0408-4f2d-af57-ceb4ded51447", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Gibbs", - "company": "Allnet", - "phone": "863-448-3019", - "email": "ariana@allnet.com" - }, - { - "id": 7209, - "guid": "537b56fb-bf66-40cf-adb7-f89c4cb95b38", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Hailey", - "company": "Robocomm", - "phone": "864-430-3617", - "email": "riley@robocomm.com" - }, - { - "id": 7210, - "guid": "3c919d44-02f3-43ff-bb80-1679b07833be", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Gibbs", - "company": "Genland", - "phone": "820-597-2951", - "email": "destiny@genland.com" - }, - { - "id": 7211, - "guid": "eba48d73-4a07-42f0-8634-1f1004cb0061", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Thornton", - "company": "Venconix", - "phone": "803-427-2863", - "email": "emily@venconix.com" - }, - { - "id": 7212, - "guid": "4d05aa1d-a449-4aa1-87eb-fffef5fdfbb6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Walkman", - "company": "Videobanc", - "phone": "867-418-2990", - "email": "caroline@videobanc.com" - }, - { - "id": 7213, - "guid": "5d3266fe-a63d-411d-85f4-4b5993ee35ed", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Oliver", - "company": "Nanobanc", - "phone": "811-474-2925", - "email": "arianna@nanobanc.com" - }, - { - "id": 7214, - "guid": "ea804226-8da7-4b70-b444-4a09e4ebbe9f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Gilbert", - "company": "Thermotomic", - "phone": "866-547-2117", - "email": "samantha@thermotomic.com" - }, - { - "id": 7215, - "guid": "d689c247-caa7-4737-b005-5dc735992860", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Molligan", - "company": "Techtron", - "phone": "831-571-2506", - "email": "jocelyn@techtron.com" - }, - { - "id": 7216, - "guid": "837e22ba-b4b3-438a-a973-5c838e35b419", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Croftoon", - "company": "Genland", - "phone": "891-419-3776", - "email": "gabrielle@genland.com" - }, - { - "id": 7217, - "guid": "3b15b59b-fc69-4544-9954-ae3d923e3532", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Oliver", - "company": "Sontopia", - "phone": "813-510-3085", - "email": "mariah@sontopia.com" - }, - { - "id": 7218, - "guid": "ec8423a9-86e2-47c8-bbae-33874743cb2d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Gate", - "company": "Teratopia", - "phone": "890-422-3891", - "email": "sophia@teratopia.com" - }, - { - "id": 7219, - "guid": "eb339372-dc26-4ff0-9380-1dd4aaad55ab", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Croftoon", - "company": "Turbomart", - "phone": "818-571-2460", - "email": "brianna@turbomart.com" - }, - { - "id": 7220, - "guid": "38ba4efa-b816-4652-ad0f-b20a7e527e72", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Galbraith", - "company": "Teraserv", - "phone": "817-570-3476", - "email": "ariana@teraserv.com" - }, - { - "id": 7221, - "guid": "6eaf66e6-00e3-4790-a33d-a6b2143caa11", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Waller", - "company": "Infraique", - "phone": "836-565-2296", - "email": "maya@infraique.com" - }, - { - "id": 7222, - "guid": "903c398e-eeff-4c9a-935b-33b07604136a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Daniels", - "company": "Cryptotegrity", - "phone": "883-439-3787", - "email": "vanessa@cryptotegrity.com" - }, - { - "id": 7223, - "guid": "85c20e6b-f845-4286-94f3-b5b5118bc859", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Wallace", - "company": "Safeagra", - "phone": "808-582-2779", - "email": "savannah@safeagra.com" - }, - { - "id": 7224, - "guid": "db7b9025-a36f-4107-93af-c2b7a03d0bd1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Molly White", - "company": "Safetrust", - "phone": "815-579-2589", - "email": "molly@safetrust.com" - }, - { - "id": 7225, - "guid": "51030350-d695-4536-8b08-4e1dc7a5a133", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Gerald", - "company": "Ameritron", - "phone": "831-587-2492", - "email": "paige@ameritron.com" - }, - { - "id": 7226, - "guid": "b962951e-3888-433c-b391-bf8c235cb7e0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Sheldon", - "company": "Cryptotegrity", - "phone": "827-433-3895", - "email": "sophia@cryptotegrity.com" - }, - { - "id": 7227, - "guid": "1891943f-40f8-42c3-9a48-cde3526e0d42", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Warren", - "company": "SysVenamerica", - "phone": "884-406-2888", - "email": "madeline@sysvenamerica.com" - }, - { - "id": 7228, - "guid": "f2bf56b9-e40a-4ba8-bbc7-7808f769af4c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Conors", - "company": "Westmedia", - "phone": "844-503-2298", - "email": "mackenzie@westmedia.com" - }, - { - "id": 7229, - "guid": "ba69b28b-6f95-4aa9-adee-f964af4267b3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Morrison", - "company": "OpKeycomm", - "phone": "861-505-2125", - "email": "ariana@opkeycomm.com" - }, - { - "id": 7230, - "guid": "91a38989-028e-44e4-a50d-546e9a28c202", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ava Brooks", - "company": "Rapigrafix", - "phone": "869-452-2193", - "email": "ava@rapigrafix.com" - }, - { - "id": 7231, - "guid": "496c11eb-7841-41b3-a09a-f943a7f12924", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sofia Otis", - "company": "Westgate", - "phone": "889-530-3460", - "email": "sofia@westgate.com" - }, - { - "id": 7232, - "guid": "9941d69b-9397-4ea8-8831-f58edc6ab7af", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Gardner", - "company": "Technogra", - "phone": "815-427-3137", - "email": "camila@technogra.com" - }, - { - "id": 7233, - "guid": "cc5192a0-581b-43bb-bdaf-f59afe6ed076", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Thomson", - "company": "Rapigrafix", - "phone": "841-415-3865", - "email": "victoria@rapigrafix.com" - }, - { - "id": 7234, - "guid": "e27af243-f715-4d90-b2a8-f5c7a1b774cb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Michaelson", - "company": "US Infratouch", - "phone": "864-509-2270", - "email": "mariah@us infratouch.com" - }, - { - "id": 7235, - "guid": "41b59fa2-a3c2-4cbe-969e-a3845b15ac06", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Abramson", - "company": "Jamrola", - "phone": "819-405-2957", - "email": "madison@jamrola.com" - }, - { - "id": 7236, - "guid": "27b429c8-4286-4cad-b2c5-3b9b38ea17a0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Osborne", - "company": "Netseco", - "phone": "880-560-2166", - "email": "ava@netseco.com" - }, - { - "id": 7237, - "guid": "15e00660-84b2-455e-a980-9b76a7ded58e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Nathan", - "company": "Teknoplexon", - "phone": "808-576-3673", - "email": "gabriella@teknoplexon.com" - }, - { - "id": 7238, - "guid": "e7580ab1-62d4-4bd5-a62f-15cbe8522c5e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Oswald", - "company": "Nanobanc", - "phone": "886-451-3980", - "email": "mariah@nanobanc.com" - }, - { - "id": 7239, - "guid": "5b2360fc-9282-41b5-9618-6c6f0ef62630", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katelyn Fisher", - "company": "Teratopia", - "phone": "892-524-3850", - "email": "katelyn@teratopia.com" - }, - { - "id": 7240, - "guid": "656b3c92-48b9-4d35-b249-bbeea7ce22be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Charlson", - "company": "Ameritron", - "phone": "830-434-2903", - "email": "serenity@ameritron.com" - }, - { - "id": 7241, - "guid": "d307f835-ae1a-4e83-9310-ef99963b299f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Paige Carey", - "company": "eSteganoergy", - "phone": "880-504-3876", - "email": "paige@esteganoergy.com" - }, - { - "id": 7242, - "guid": "7652da6a-bbb9-48a9-b24d-45c29f74f0af", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Haig", - "company": "Hypervaco", - "phone": "874-467-2209", - "email": "katelyn@hypervaco.com" - }, - { - "id": 7243, - "guid": "3feb3635-8b00-431a-9c1c-a23f69dac869", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Gustman", - "company": "OpKeycomm", - "phone": "869-506-2109", - "email": "amelia@opkeycomm.com" - }, - { - "id": 7244, - "guid": "d224b44d-c243-4313-846c-681a50ea0edb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Miln", - "company": "Turbomart", - "phone": "804-548-3822", - "email": "madelyn@turbomart.com" - }, - { - "id": 7245, - "guid": "baec2ee2-75a1-4440-a4b1-981bcb3251e3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Neal", - "company": "Vencom", - "phone": "808-412-3274", - "email": "serenity@vencom.com" - }, - { - "id": 7246, - "guid": "516f13ac-a6cf-4b56-b530-235037dfecbc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Wainwright", - "company": "Fibrotopia", - "phone": "824-580-3996", - "email": "sarah@fibrotopia.com" - }, - { - "id": 7247, - "guid": "dbb73087-a172-43c1-902c-087189d8504f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Miers", - "company": "Syssoft", - "phone": "813-483-3790", - "email": "addison@syssoft.com" - }, - { - "id": 7248, - "guid": "8a477333-f81d-4c42-9550-930b49625580", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Wallace", - "company": "Celgra", - "phone": "855-431-3826", - "email": "evelyn@celgra.com" - }, - { - "id": 7249, - "guid": "51b15675-1809-4e83-bcce-89e14d362eb9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Oldridge", - "company": "iEnland", - "phone": "878-571-3044", - "email": "bailey@ienland.com" - }, - { - "id": 7250, - "guid": "f0f3750c-ac1e-4b36-b3b0-b49f432f9497", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Wesley", - "company": "Gigaura", - "phone": "813-592-2232", - "email": "savannah@gigaura.com" - }, - { - "id": 7251, - "guid": "64361074-e392-425c-bcf3-717c95449654", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Brown", - "company": "SysVenamerica", - "phone": "887-482-2463", - "email": "mya@sysvenamerica.com" - }, - { - "id": 7252, - "guid": "e52a8ed1-4aef-45d5-9bc7-87c64f5057e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Clapton", - "company": "Airdyne", - "phone": "817-435-3952", - "email": "claire@airdyne.com" - }, - { - "id": 7253, - "guid": "5ce23fd8-c80b-4aee-a67b-cc43ab78c747", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Carroll", - "company": "Westmedia", - "phone": "835-401-3632", - "email": "aaliyah@westmedia.com" - }, - { - "id": 7254, - "guid": "089edd57-ec62-4b12-b86e-3e9695668ee1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Molligan", - "company": "Robotemplate", - "phone": "879-530-3124", - "email": "emily@robotemplate.com" - }, - { - "id": 7255, - "guid": "b1ce90d9-997f-4c9e-ade9-99568edd7ca6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Osborne", - "company": "Pericenta", - "phone": "805-476-3638", - "email": "zoe@pericenta.com" - }, - { - "id": 7256, - "guid": "e32af01b-b756-4793-b5f9-cfc5711628bc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Gibbs", - "company": "Celgra", - "phone": "809-581-3491", - "email": "serenity@celgra.com" - }, - { - "id": 7257, - "guid": "d42fc115-03dc-44d0-82bd-4c8c308397c6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Freeman", - "company": "Generola", - "phone": "870-569-2069", - "email": "avery@generola.com" - }, - { - "id": 7258, - "guid": "ebb81408-5714-414d-8b08-255ae67967c9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Haig", - "company": "Hypervaco", - "phone": "846-491-2744", - "email": "riley@hypervaco.com" - }, - { - "id": 7259, - "guid": "63cb1099-ace2-4339-b52c-0424048fca66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Hoggarth", - "company": "Techtron", - "phone": "819-501-2762", - "email": "serenity@techtron.com" - }, - { - "id": 7260, - "guid": "5f65f33f-e9e3-4448-b4eb-16fc4014666c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Waller", - "company": "Titanirola", - "phone": "857-491-3186", - "email": "serenity@titanirola.com" - }, - { - "id": 7261, - "guid": "d679facc-faab-4d4d-be1a-bd8e227e2cec", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Carrington", - "company": "iMedconik", - "phone": "822-505-3272", - "email": "brianna@imedconik.com" - }, - { - "id": 7262, - "guid": "b6f68352-3a87-44f3-b1ce-5de28d71803b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Charlson", - "company": "Rapigrafix", - "phone": "890-494-3491", - "email": "olivia@rapigrafix.com" - }, - { - "id": 7263, - "guid": "fe19ae8e-55c3-4bc2-8e18-d0ef88d34b2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Rachel Davidson", - "company": "Openserve", - "phone": "874-582-2963", - "email": "rachel@openserve.com" - }, - { - "id": 7264, - "guid": "f21ca9a1-5ba6-4bad-81ce-883f4eae45b7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Milton", - "company": "Safetrust", - "phone": "812-530-2595", - "email": "emma@safetrust.com" - }, - { - "id": 7265, - "guid": "c1308b95-a96a-4138-8ad1-8ecd8ab1ff48", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Wayne", - "company": "Allnet", - "phone": "813-421-3416", - "email": "lauren@allnet.com" - }, - { - "id": 7266, - "guid": "6685c0c9-6bd1-4a16-ae92-2d790c1771b8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Milton", - "company": "Xeicon", - "phone": "847-523-3268", - "email": "morgan@xeicon.com" - }, - { - "id": 7267, - "guid": "0b461073-d8f8-4dfc-9903-62014f24a397", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Young", - "company": "Gigaura", - "phone": "805-547-3930", - "email": "destiny@gigaura.com" - }, - { - "id": 7268, - "guid": "0b760d43-3692-49e7-8e26-90c87611b215", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Ford", - "company": "Aprama", - "phone": "862-423-2340", - "email": "alexa@aprama.com" - }, - { - "id": 7269, - "guid": "0492368b-db3a-4c2e-9c31-0a1e97444c60", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Mercer", - "company": "Keytheon", - "phone": "847-550-3394", - "email": "genesis@keytheon.com" - }, - { - "id": 7270, - "guid": "ccfa3400-5c6e-4732-b9c6-a1737ad00946", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Miller", - "company": "Hypervaco", - "phone": "820-574-3633", - "email": "paige@hypervaco.com" - }, - { - "id": 7271, - "guid": "5a622919-ea21-4fb1-8cc0-d2433dc51193", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Adamson", - "company": "Hypervaco", - "phone": "873-511-3501", - "email": "katherine@hypervaco.com" - }, - { - "id": 7272, - "guid": "aac73e98-68db-4dd0-8f08-a779c413b1db", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Miln", - "company": "iSkyvaco", - "phone": "805-481-2453", - "email": "mariah@iskyvaco.com" - }, - { - "id": 7273, - "guid": "ad059a7c-d81c-4aa3-9a85-4d88c404a334", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Gibbs", - "company": "OpKeycomm", - "phone": "801-487-2269", - "email": "vanessa@opkeycomm.com" - }, - { - "id": 7274, - "guid": "e87c9406-4004-493d-9cd0-5601f2a95147", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Addison Hancock", - "company": "Enlogia", - "phone": "893-404-2986", - "email": "addison@enlogia.com" - }, - { - "id": 7275, - "guid": "13ba9636-4064-4975-aaed-16fbed9b4816", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Thornton", - "company": "Venconix", - "phone": "823-595-3622", - "email": "mya@venconix.com" - }, - { - "id": 7276, - "guid": "42f4ffe3-d6e3-4365-81f7-95b6a86117b2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Gill", - "company": "Celgra", - "phone": "832-438-3124", - "email": "molly@celgra.com" - }, - { - "id": 7277, - "guid": "2483c534-027a-45f2-8a94-71811d2e0c4b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Chesterton", - "company": "Venconix", - "phone": "871-409-3205", - "email": "maria@venconix.com" - }, - { - "id": 7278, - "guid": "b81401ad-2940-4ba4-b00b-95b462d38826", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Wainwright", - "company": "Idmax", - "phone": "834-555-2827", - "email": "khloe@idmax.com" - }, - { - "id": 7279, - "guid": "ab5de607-0c87-4e45-abb9-de5acdca4de2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Fisher", - "company": "Westmedia", - "phone": "840-568-3366", - "email": "olivia@westmedia.com" - }, - { - "id": 7280, - "guid": "e34a37f2-02de-437a-a1f4-0d50bd48360a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Waller", - "company": "Mescaridic", - "phone": "849-401-3914", - "email": "molly@mescaridic.com" - }, - { - "id": 7281, - "guid": "1ab48a42-93d4-495d-8b07-2b0511d0339d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aaliyah Hardman", - "company": "Interliant", - "phone": "841-412-3239", - "email": "aaliyah@interliant.com" - }, - { - "id": 7282, - "guid": "05916494-7606-4a79-8e27-59a85ab4c828", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Ogden", - "company": "Robotomic", - "phone": "841-478-2882", - "email": "ava@robotomic.com" - }, - { - "id": 7283, - "guid": "f21cb89f-9079-4b9c-a894-4aad252d0c88", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Oldman", - "company": "Westgate", - "phone": "884-585-2534", - "email": "autumn@westgate.com" - }, - { - "id": 7284, - "guid": "c898141e-f254-4556-a53b-2b7c4a14baae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Nash", - "company": "Allnet", - "phone": "807-547-2845", - "email": "caroline@allnet.com" - }, - { - "id": 7285, - "guid": "9b27687f-4193-4d0e-b99c-fe6bae31be8a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Hoggarth", - "company": "Westmedia", - "phone": "835-513-3000", - "email": "faith@westmedia.com" - }, - { - "id": 7286, - "guid": "450c0b7d-e95e-47bb-b52d-40cac5b9fde4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Croftoon", - "company": "Anaframe", - "phone": "836-495-3129", - "email": "paige@anaframe.com" - }, - { - "id": 7287, - "guid": "372493e1-22dd-401a-86ed-cc47d297f6cb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooklyn Goldman", - "company": "Turbomart", - "phone": "848-469-2632", - "email": "brooklyn@turbomart.com" - }, - { - "id": 7288, - "guid": "4b72573d-4d91-4b98-b749-ae9d5cb4a4fd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Morrison", - "company": "US Infratouch", - "phone": "886-592-2180", - "email": "chloe@us infratouch.com" - }, - { - "id": 7289, - "guid": "38431150-5fc5-436c-b929-61b8d7e43592", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Allison Hodges", - "company": "Transtouch", - "phone": "801-463-2320", - "email": "allison@transtouch.com" - }, - { - "id": 7290, - "guid": "d8f9afb0-e08f-4da5-96bf-2e4342ef101c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Campbell", - "company": "Teratopia", - "phone": "886-404-3464", - "email": "aaliyah@teratopia.com" - }, - { - "id": 7291, - "guid": "de139282-5d36-45ce-bec8-ccfcbf039c6f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katherine Turner", - "company": "Infraique", - "phone": "892-442-3739", - "email": "katherine@infraique.com" - }, - { - "id": 7292, - "guid": "69dd8ad5-9500-4ad4-8dc0-ba7770dea8bc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Abramson", - "company": "Unologic", - "phone": "825-513-2685", - "email": "kayla@unologic.com" - }, - { - "id": 7293, - "guid": "63ca21ba-5c4b-42fd-a1e6-7676236bdb14", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Goldman", - "company": "Orthosoft", - "phone": "877-424-3751", - "email": "emma@orthosoft.com" - }, - { - "id": 7294, - "guid": "bdeab22f-d54b-402b-a7ff-38325db0f0e1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Higgins", - "company": "Raylog", - "phone": "873-412-2597", - "email": "rachel@raylog.com" - }, - { - "id": 7295, - "guid": "25b3643f-e267-4581-8072-02ef05145698", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Gill", - "company": "Quintegrity", - "phone": "809-418-3206", - "email": "samantha@quintegrity.com" - }, - { - "id": 7296, - "guid": "8ca3e1f9-7fc1-4e71-92ba-999dc234cb7a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Ward", - "company": "Syssoft", - "phone": "861-594-2133", - "email": "victoria@syssoft.com" - }, - { - "id": 7297, - "guid": "f5696aad-af42-454d-9817-5077751248cb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Hoggarth", - "company": "Tekcar", - "phone": "844-555-2933", - "email": "hannah@tekcar.com" - }, - { - "id": 7298, - "guid": "1040bcb6-ad0e-4d3a-8d76-f576563f904b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Crossman", - "company": "SysUSA", - "phone": "867-453-2638", - "email": "gabriella@sysusa.com" - }, - { - "id": 7299, - "guid": "6db2de95-7983-4c37-afdf-7fbb66d234d3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Hoggarth", - "company": "InfoAirway", - "phone": "879-560-2460", - "email": "julia@infoairway.com" - }, - { - "id": 7300, - "guid": "91823e11-6e1c-411e-a6c0-e9d0e9dd77ed", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Otis", - "company": "Rapigrafix", - "phone": "857-461-2023", - "email": "amelia@rapigrafix.com" - }, - { - "id": 7301, - "guid": "cc7daf1a-ec55-4c05-8a7a-c9458a771dec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Walkman", - "company": "Keytheon", - "phone": "898-502-2569", - "email": "mya@keytheon.com" - }, - { - "id": 7302, - "guid": "a64846a4-420d-4c45-8f08-2f57ca929c71", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mia Neal", - "company": "Qualserve", - "phone": "835-545-3801", - "email": "mia@qualserve.com" - }, - { - "id": 7303, - "guid": "74d90b09-99f3-4919-96ab-dd4607bc81b6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Gerald", - "company": "eEyetanic", - "phone": "894-513-2944", - "email": "lauren@eeyetanic.com" - }, - { - "id": 7304, - "guid": "d3e4c776-cc30-4844-ac28-33b850828fab", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Conors", - "company": "Idmax", - "phone": "820-435-3976", - "email": "ava@idmax.com" - }, - { - "id": 7305, - "guid": "21959a7b-2843-48cc-b97b-182528c484f9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Carey", - "company": "iQualcar", - "phone": "800-593-3990", - "email": "eva@iqualcar.com" - }, - { - "id": 7306, - "guid": "27e8a892-ffbb-4812-a8da-e5c747d890d2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoey Oliver", - "company": "Orthomedia", - "phone": "833-446-2616", - "email": "zoey@orthomedia.com" - }, - { - "id": 7307, - "guid": "230fc682-f107-4c2a-85dd-f17ec85e672a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Chesterton", - "company": "Unconix", - "phone": "813-523-3255", - "email": "paige@unconix.com" - }, - { - "id": 7308, - "guid": "61e45223-80b1-4554-986f-4e48d1b821f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Audrey Miller", - "company": "Dynarama", - "phone": "871-423-3362", - "email": "audrey@dynarama.com" - }, - { - "id": 7309, - "guid": "b23915bd-9f44-4e4f-a9a1-4398ab0c34b4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Cook", - "company": "Truetomic", - "phone": "879-498-3484", - "email": "grace@truetomic.com" - }, - { - "id": 7310, - "guid": "cafc2c63-2886-47d8-be47-7d50692d1227", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Gibbs", - "company": "Generola", - "phone": "803-512-2960", - "email": "bailey@generola.com" - }, - { - "id": 7311, - "guid": "be7acf1e-c611-4c8d-bf6e-34bbb46eaf10", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Young", - "company": "Vencom", - "phone": "855-487-3085", - "email": "nevaeh@vencom.com" - }, - { - "id": 7312, - "guid": "df39ac34-8956-4325-87a0-4ed964acb959", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Chloe Milton", - "company": "iMedconik", - "phone": "890-501-3061", - "email": "chloe@imedconik.com" - }, - { - "id": 7313, - "guid": "d9755a5d-730f-42f0-9c8a-813af19bf679", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Milton", - "company": "Idmax", - "phone": "812-427-3210", - "email": "grace@idmax.com" - }, - { - "id": 7314, - "guid": "c0f421f4-adf7-4414-b98f-4cc193e155d5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sarah Ogden", - "company": "Genland", - "phone": "843-484-2027", - "email": "sarah@genland.com" - }, - { - "id": 7315, - "guid": "b21131cd-6048-4832-92dc-c038fce457cf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Watson", - "company": "Unologic", - "phone": "861-497-2505", - "email": "kaitlyn@unologic.com" - }, - { - "id": 7316, - "guid": "b2aed946-78d3-4efa-ba41-dfacbcd6d837", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Hawkins", - "company": "Entcast", - "phone": "891-467-3851", - "email": "mackenzie@entcast.com" - }, - { - "id": 7317, - "guid": "006ad094-2964-4609-9d19-6eba9c3c6d71", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Ogden", - "company": "iEnland", - "phone": "813-468-3730", - "email": "lillian@ienland.com" - }, - { - "id": 7318, - "guid": "fe8e58d7-2947-4595-ae3e-887c9e5e920c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Winter", - "company": "Ventanium", - "phone": "880-461-2584", - "email": "chloe@ventanium.com" - }, - { - "id": 7319, - "guid": "8bf22226-00ac-4103-a23f-6438ae181b27", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Miln", - "company": "Titanigraf", - "phone": "859-484-2909", - "email": "claire@titanigraf.com" - }, - { - "id": 7320, - "guid": "13bcaa9f-4313-4a18-afd8-ba6e696ea7bf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Watson", - "company": "SysVenamerica", - "phone": "888-485-3243", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 7321, - "guid": "176c1805-6b1d-4d06-be16-2e6fee1f3523", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Oswald", - "company": "Infraique", - "phone": "818-502-2527", - "email": "ariana@infraique.com" - }, - { - "id": 7322, - "guid": "0dac5d06-2d73-4014-aa91-4d9159e91849", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Campbell", - "company": "Fibrotopia", - "phone": "807-432-3899", - "email": "sarah@fibrotopia.com" - }, - { - "id": 7323, - "guid": "d8a66fd4-bfef-44ee-86f8-7569b181f2e0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Addison Gardner", - "company": "Idmax", - "phone": "846-499-3544", - "email": "addison@idmax.com" - }, - { - "id": 7324, - "guid": "71fecdf2-273d-4169-a8f6-f050c556894a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Carter", - "company": "US Infratouch", - "phone": "830-570-3535", - "email": "hannah@us infratouch.com" - }, - { - "id": 7325, - "guid": "851888aa-163b-4700-acf3-bd536d4cebfc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sofia Winter", - "company": "Westmedia", - "phone": "865-428-3868", - "email": "sofia@westmedia.com" - }, - { - "id": 7326, - "guid": "98e024e8-d708-4ab9-855f-8bfd574417c2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Brickman", - "company": "Mescatron", - "phone": "867-472-3802", - "email": "aubrey@mescatron.com" - }, - { - "id": 7327, - "guid": "e4441fcb-06a9-408f-aa82-947558d45977", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Nelson", - "company": "Pericenta", - "phone": "820-523-2125", - "email": "ella@pericenta.com" - }, - { - "id": 7328, - "guid": "d5794eee-3613-4b02-8004-92aed7cd29e1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Brooks", - "company": "Hypervaco", - "phone": "852-600-2114", - "email": "mackenzie@hypervaco.com" - }, - { - "id": 7329, - "guid": "7464664f-4c42-40af-8f80-df4bf4ae8bb9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Nash", - "company": "Interliant", - "phone": "890-469-3654", - "email": "abigail@interliant.com" - }, - { - "id": 7330, - "guid": "ee0c386e-767b-470f-b4b8-7c33e1c5c5ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Freeman", - "company": "Multitiqua", - "phone": "842-414-3525", - "email": "samantha@multitiqua.com" - }, - { - "id": 7331, - "guid": "ca3cb945-330b-464d-b78a-f5bb5eb284d6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Carroll", - "company": "Dynarama", - "phone": "852-536-2008", - "email": "paige@dynarama.com" - }, - { - "id": 7332, - "guid": "823687aa-611e-46f2-a9d1-1a35f185f3c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Galbraith", - "company": "Genland", - "phone": "836-580-2245", - "email": "aubrey@genland.com" - }, - { - "id": 7333, - "guid": "b4c21721-6f63-44fe-941c-3c2f551171fd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Miln", - "company": "Polytheon", - "phone": "866-599-3731", - "email": "brooke@polytheon.com" - }, - { - "id": 7334, - "guid": "6ec739c9-b78b-4b58-a70c-32eb07ca3eba", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Creighton", - "company": "iQualcar", - "phone": "813-411-3828", - "email": "olivia@iqualcar.com" - }, - { - "id": 7335, - "guid": "8c22ddb0-c10a-47c6-9b95-7ee755f718e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ashley Day", - "company": "Celgra", - "phone": "834-435-2934", - "email": "ashley@celgra.com" - }, - { - "id": 7336, - "guid": "36a2e591-2be1-4eac-9983-4402773b0786", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Conors", - "company": "Nanobanc", - "phone": "800-426-3577", - "email": "evelyn@nanobanc.com" - }, - { - "id": 7337, - "guid": "f685a016-12a7-4d18-a2d9-0074e8539938", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Gill", - "company": "US Infratouch", - "phone": "870-517-2902", - "email": "mackenzie@us infratouch.com" - }, - { - "id": 7338, - "guid": "b0427e4c-436d-42a2-bcc3-b30c8e0c11fd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Crossman", - "company": "iMedconik", - "phone": "838-487-2157", - "email": "autumn@imedconik.com" - }, - { - "id": 7339, - "guid": "16255765-c58f-419b-b3bd-273941715c63", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Hailey", - "company": "Multitiqua", - "phone": "833-559-2665", - "email": "mya@multitiqua.com" - }, - { - "id": 7340, - "guid": "cb469630-ff6f-4d91-9e1f-ec91b70247b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Adamson", - "company": "Orthosoft", - "phone": "852-461-2850", - "email": "ashley@orthosoft.com" - }, - { - "id": 7341, - "guid": "b64fdf14-1504-43d4-addf-d933bd4b3330", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Campbell", - "company": "Systheon", - "phone": "800-527-2346", - "email": "charlotte@systheon.com" - }, - { - "id": 7342, - "guid": "98c59270-4b22-4de4-9a5e-5c8d1cb31b6b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Chapman", - "company": "Rapigrafix", - "phone": "872-473-2128", - "email": "makayla@rapigrafix.com" - }, - { - "id": 7343, - "guid": "6b9b9a9d-b60e-4de1-a350-e2674e2487ef", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Sherlock", - "company": "Techtron", - "phone": "834-400-2956", - "email": "jasmine@techtron.com" - }, - { - "id": 7344, - "guid": "155a5daa-f716-44a1-baeb-152b2dbef188", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Higgins", - "company": "Compuamerica", - "phone": "849-410-3597", - "email": "faith@compuamerica.com" - }, - { - "id": 7345, - "guid": "96ce7038-8f8b-43e2-899e-284374685fd3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Vaughan", - "company": "Rapigrafix", - "phone": "839-518-3261", - "email": "katelyn@rapigrafix.com" - }, - { - "id": 7346, - "guid": "11da3e5c-7299-40d9-a278-7e7faf6573a9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Smith", - "company": "eEyetanic", - "phone": "881-447-2171", - "email": "madison@eeyetanic.com" - }, - { - "id": 7347, - "guid": "4265a480-3ccd-4a2b-b142-17f718c19d0e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Sherlock", - "company": "Hypervaco", - "phone": "805-409-3332", - "email": "aubrey@hypervaco.com" - }, - { - "id": 7348, - "guid": "5a4b5a02-4f8e-422f-9985-541b71a435c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Vaughan", - "company": "Xeicon", - "phone": "868-431-3717", - "email": "lauren@xeicon.com" - }, - { - "id": 7349, - "guid": "6cf2cddc-77a8-4263-b411-c01e3fb499af", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Hancock", - "company": "Ameritron", - "phone": "804-409-2240", - "email": "allison@ameritron.com" - }, - { - "id": 7350, - "guid": "b70be37d-df7f-4df4-9982-a81fef384977", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Stanley", - "company": "Xeicon", - "phone": "820-524-3148", - "email": "amelia@xeicon.com" - }, - { - "id": 7351, - "guid": "5e1d4620-837a-43eb-a180-0fb12e7dc084", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Gustman", - "company": "Teraserv", - "phone": "831-567-3819", - "email": "faith@teraserv.com" - }, - { - "id": 7352, - "guid": "aea39360-640b-41ab-93c1-d8a952cddc5b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Trinity Campbell", - "company": "US Omnigraphik", - "phone": "835-507-3225", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 7353, - "guid": "47ded8d6-2070-4e97-818e-1ec7f2b04476", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Nathan", - "company": "Truegate", - "phone": "832-469-3797", - "email": "jessica@truegate.com" - }, - { - "id": 7354, - "guid": "3d3620bc-bf44-4e5e-b1be-0ba27e1bd881", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Miln", - "company": "Pericenta", - "phone": "872-495-2266", - "email": "aubrey@pericenta.com" - }, - { - "id": 7355, - "guid": "270fca96-0eeb-4081-b183-91d1a3e2ec1d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emily Crossman", - "company": "US Infratouch", - "phone": "810-455-3872", - "email": "emily@us infratouch.com" - }, - { - "id": 7356, - "guid": "f79b5ae1-b746-4f17-b4d3-cd5fff30eaf5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Gardner", - "company": "Transtouch", - "phone": "853-438-2748", - "email": "avery@transtouch.com" - }, - { - "id": 7357, - "guid": "c3d87182-eaa5-4166-bad2-387856d6158b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Victoria Bush", - "company": "Sontopia", - "phone": "846-483-2023", - "email": "victoria@sontopia.com" - }, - { - "id": 7358, - "guid": "c5b67f56-3ad5-4937-ad5d-d3c5dd1bcb0b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Carrington", - "company": "Conotomics", - "phone": "824-430-2589", - "email": "addison@conotomics.com" - }, - { - "id": 7359, - "guid": "f60ca54f-b7b9-427d-84bd-8e7b195dfb83", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Walkman", - "company": "Netsystems", - "phone": "872-444-3966", - "email": "ella@netsystems.com" - }, - { - "id": 7360, - "guid": "9debeb47-fb6d-4561-8ff3-e32ba0fdb591", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Ogden", - "company": "US Infratouch", - "phone": "847-583-3612", - "email": "arianna@us infratouch.com" - }, - { - "id": 7361, - "guid": "ac932791-9dd7-4b80-a4c1-e705ad25aab0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Ford", - "company": "Conrama", - "phone": "847-577-2027", - "email": "kaylee@conrama.com" - }, - { - "id": 7362, - "guid": "3bceef23-0e8d-4c63-b9a4-1a1f49837cdd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Crossman", - "company": "Anagraph", - "phone": "882-514-3903", - "email": "paige@anagraph.com" - }, - { - "id": 7363, - "guid": "799ea62d-2ccf-4093-aead-e979d94d447a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Charlson", - "company": "Airdyne", - "phone": "825-536-2489", - "email": "taylor@airdyne.com" - }, - { - "id": 7364, - "guid": "1f295d29-bb41-4b8b-8363-11119b490a98", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaylee Hawkins", - "company": "Syssoft", - "phone": "833-570-2146", - "email": "kaylee@syssoft.com" - }, - { - "id": 7365, - "guid": "d478db02-d326-42cd-9db4-fea287e56df9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Goodman", - "company": "Truegate", - "phone": "870-575-2269", - "email": "rachel@truegate.com" - }, - { - "id": 7366, - "guid": "95ecbef2-2d80-4189-a94a-cea99341cdad", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Abramson", - "company": "Teraserv", - "phone": "891-558-2160", - "email": "madelyn@teraserv.com" - }, - { - "id": 7367, - "guid": "24ba6f63-3293-4668-adf6-65121706dec3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Ward", - "company": "Orthomedia", - "phone": "845-564-3002", - "email": "addison@orthomedia.com" - }, - { - "id": 7368, - "guid": "1ad96526-bb38-4388-ae8c-f669d0ecc6f5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Nevaeh Cook", - "company": "Celgra", - "phone": "877-595-3455", - "email": "nevaeh@celgra.com" - }, - { - "id": 7369, - "guid": "7aa7b8e6-dd3a-451c-a960-57d29eddf069", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ariana Crossman", - "company": "Safeagra", - "phone": "840-574-2968", - "email": "ariana@safeagra.com" - }, - { - "id": 7370, - "guid": "296e35d3-777a-4d0b-9285-d2c4a8492613", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Clapton", - "company": "US Infratouch", - "phone": "830-529-3595", - "email": "kylie@us infratouch.com" - }, - { - "id": 7371, - "guid": "565d2679-21a1-4e00-9230-e08802c7b8b4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Neal", - "company": "Hypervaco", - "phone": "810-551-2257", - "email": "ella@hypervaco.com" - }, - { - "id": 7372, - "guid": "a0e1e3ba-747c-4c61-b98a-c8d153bd56c7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Vaughan", - "company": "Safetrust", - "phone": "865-478-3293", - "email": "isabelle@safetrust.com" - }, - { - "id": 7373, - "guid": "3046bc29-9dac-4505-8137-98614a984400", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Carter", - "company": "Aluco", - "phone": "807-518-3146", - "email": "zoey@aluco.com" - }, - { - "id": 7374, - "guid": "eac1c229-3dff-47d4-9c66-48787b169119", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Hodges", - "company": "Hypervaco", - "phone": "811-410-2664", - "email": "evelyn@hypervaco.com" - }, - { - "id": 7375, - "guid": "f665a399-6855-4e8b-9f23-c8cf63ad8d1a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Wainwright", - "company": "Aprama", - "phone": "806-583-2930", - "email": "brooklyn@aprama.com" - }, - { - "id": 7376, - "guid": "d866830f-92db-4f2d-a7d8-66173e7d4b63", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alyssa Calhoun", - "company": "Compuamerica", - "phone": "853-535-3831", - "email": "alyssa@compuamerica.com" - }, - { - "id": 7377, - "guid": "79a4980d-583f-4dda-916d-5a66dfe7f4ee", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Turner", - "company": "Venconix", - "phone": "861-473-2904", - "email": "allison@venconix.com" - }, - { - "id": 7378, - "guid": "0e0c6b76-420f-4b66-b437-ba167d5ca1e5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Wallace", - "company": "Truetomic", - "phone": "894-443-2754", - "email": "maya@truetomic.com" - }, - { - "id": 7379, - "guid": "0e7ac0b3-8b5b-4a7e-97b0-388a73232ffb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla White", - "company": "Inridium", - "phone": "887-494-3972", - "email": "makayla@inridium.com" - }, - { - "id": 7380, - "guid": "3e077fbf-1595-4bea-baed-e6b0d7df7354", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sofia WifKinson", - "company": "Pacwest", - "phone": "882-427-2248", - "email": "sofia@pacwest.com" - }, - { - "id": 7381, - "guid": "c6339947-8da1-4c81-8c95-10c98af47b77", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Hodges", - "company": "Entcast", - "phone": "891-452-3101", - "email": "claire@entcast.com" - }, - { - "id": 7382, - "guid": "6cbfabf3-a42c-499f-ba58-37069321829c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Carey", - "company": "Tekcar", - "phone": "803-514-3286", - "email": "payton@tekcar.com" - }, - { - "id": 7383, - "guid": "8874bcc0-36e7-4f9f-8183-0433481d0aba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexandra Brickman", - "company": "Teratopia", - "phone": "881-520-3727", - "email": "alexandra@teratopia.com" - }, - { - "id": 7384, - "guid": "7b2afb1a-a238-4771-b743-3a58ba2c3040", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Vance", - "company": "Anaframe", - "phone": "807-511-2692", - "email": "camila@anaframe.com" - }, - { - "id": 7385, - "guid": "41035e7b-bb7d-4ea1-9a86-43d5f6489746", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Payton Conors", - "company": "Mescaridic", - "phone": "835-447-2276", - "email": "payton@mescaridic.com" - }, - { - "id": 7386, - "guid": "8b0f0768-ab80-4d1d-861b-6437707d3ec4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Anna Walkman", - "company": "Mescatron", - "phone": "802-433-3593", - "email": "anna@mescatron.com" - }, - { - "id": 7387, - "guid": "e2adc030-1f10-4117-8a6d-66420c685af3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Young", - "company": "Openserve", - "phone": "861-485-2320", - "email": "chloe@openserve.com" - }, - { - "id": 7388, - "guid": "ed23c2a1-dc34-47a4-9c81-0628eabcc48e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kylie Owen", - "company": "Tekcar", - "phone": "860-406-2994", - "email": "kylie@tekcar.com" - }, - { - "id": 7389, - "guid": "cb57b797-8d8e-4df6-94a1-2ac54c0cf49c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Ford", - "company": "Mescaridic", - "phone": "865-544-2880", - "email": "brianna@mescaridic.com" - }, - { - "id": 7390, - "guid": "f7669724-14b4-4422-8e8e-831880ca1f89", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Nelson", - "company": "Superscope", - "phone": "867-481-2487", - "email": "zoe@superscope.com" - }, - { - "id": 7391, - "guid": "97102f43-e8cc-40a9-bb3d-21d3464d0300", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Young", - "company": "Videobanc", - "phone": "818-481-2319", - "email": "brianna@videobanc.com" - }, - { - "id": 7392, - "guid": "1d9043c4-dc0c-4c1c-aa99-cf8a048c4c9e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Calhoun", - "company": "Techtron", - "phone": "825-447-2031", - "email": "julia@techtron.com" - }, - { - "id": 7393, - "guid": "70a592e0-d2e2-4424-b730-54be6593528d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Campbell", - "company": "Syssoft", - "phone": "873-480-2280", - "email": "valeria@syssoft.com" - }, - { - "id": 7394, - "guid": "c5a8ef8c-e014-4fc0-9bb8-34e6e1f6cf14", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Miers", - "company": "Technogra", - "phone": "867-538-3694", - "email": "angelina@technogra.com" - }, - { - "id": 7395, - "guid": "6c86508e-60bd-48cf-8a61-9fb12a2f079b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Clapton", - "company": "SysVenamerica", - "phone": "838-456-3002", - "email": "isabella@sysvenamerica.com" - }, - { - "id": 7396, - "guid": "1a3fba3e-cd2b-41b3-b7dd-88e403d3deae", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Haig", - "company": "Enlogia", - "phone": "800-522-2681", - "email": "khloe@enlogia.com" - }, - { - "id": 7397, - "guid": "7aaa3654-66fb-497b-8500-aa6971c9e7cf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Daniels", - "company": "Textiqua", - "phone": "836-526-2329", - "email": "aubrey@textiqua.com" - }, - { - "id": 7398, - "guid": "f6207f27-be40-4088-885d-e1a3f24df9ce", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Creighton", - "company": "Infraique", - "phone": "894-441-2697", - "email": "sophia@infraique.com" - }, - { - "id": 7399, - "guid": "b9281057-3385-4231-89e3-7611c37c32fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Conors", - "company": "Unologic", - "phone": "885-550-2225", - "email": "caroline@unologic.com" - }, - { - "id": 7400, - "guid": "c46b169e-6897-4702-9069-007b938d228a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Gustman", - "company": "Safeagra", - "phone": "862-488-3935", - "email": "brianna@safeagra.com" - }, - { - "id": 7401, - "guid": "04fc557d-377d-47cc-b73b-bc7b58423d03", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Calhoun", - "company": "Techtron", - "phone": "894-434-3993", - "email": "isabelle@techtron.com" - }, - { - "id": 7402, - "guid": "701078c1-af4b-4324-8f90-b08600ccee6c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Brooks", - "company": "Dynarama", - "phone": "877-432-2748", - "email": "rachel@dynarama.com" - }, - { - "id": 7403, - "guid": "4ac0bf35-6927-4ed7-9501-43e9b3aa974a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Miers", - "company": "Techtron", - "phone": "874-562-2280", - "email": "sophie@techtron.com" - }, - { - "id": 7404, - "guid": "8d37c3af-bc77-458b-8118-9f97cef52abc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Charlson", - "company": "Mescaridic", - "phone": "880-418-2656", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 7405, - "guid": "131e21b2-e1e7-47b8-bf5d-8324b292e3de", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Sheldon", - "company": "Fibrotouch", - "phone": "852-420-2820", - "email": "zoe@fibrotouch.com" - }, - { - "id": 7406, - "guid": "c704579b-e084-4032-835b-e3726f90c01a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Gerald", - "company": "Teknoplexon", - "phone": "802-502-2232", - "email": "faith@teknoplexon.com" - }, - { - "id": 7407, - "guid": "de8037e1-0c04-4f8f-a3c8-0dff8953e39c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Oldman", - "company": "Transtouch", - "phone": "894-414-3804", - "email": "chloe@transtouch.com" - }, - { - "id": 7408, - "guid": "bddc2c29-3a01-436d-bbd8-7119881f89c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Campbell", - "company": "eSteganoergy", - "phone": "897-529-2837", - "email": "alyssa@esteganoergy.com" - }, - { - "id": 7409, - "guid": "ddad9f7d-6bb3-4515-b0b6-67e9e2110dad", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Wallace", - "company": "Westmedia", - "phone": "800-426-2034", - "email": "kimberly@westmedia.com" - }, - { - "id": 7410, - "guid": "dd5c85ba-3de3-41d9-9166-1cb1e5ae4716", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth WifKinson", - "company": "Netsystems", - "phone": "881-550-2965", - "email": "elizabeth@netsystems.com" - }, - { - "id": 7411, - "guid": "e69fb7a3-0436-433a-8697-4ea6aaee92f7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Sherlock", - "company": "Rapigrafix", - "phone": "827-564-3646", - "email": "savannah@rapigrafix.com" - }, - { - "id": 7412, - "guid": "5d898a3b-4d05-4c6a-803f-6fa0365c1b3b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey White", - "company": "iMedconik", - "phone": "887-559-3007", - "email": "aubrey@imedconik.com" - }, - { - "id": 7413, - "guid": "2aa5541d-c821-463c-90ef-417f3f867184", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Abramson", - "company": "iQualcar", - "phone": "823-467-2650", - "email": "alexandra@iqualcar.com" - }, - { - "id": 7414, - "guid": "63ec9e8e-cf34-49f0-931c-8dbfce790ed1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Hawkins", - "company": "Videobanc", - "phone": "853-408-3050", - "email": "katelyn@videobanc.com" - }, - { - "id": 7415, - "guid": "de442d19-7b99-491c-96b5-bb53750c577a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Owen", - "company": "Robocomm", - "phone": "876-447-3941", - "email": "maria@robocomm.com" - }, - { - "id": 7416, - "guid": "fbf6e8c2-3006-42d1-9564-9f5317500ac8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Gilmore", - "company": "Ventanium", - "phone": "890-408-2927", - "email": "samantha@ventanium.com" - }, - { - "id": 7417, - "guid": "3b3f91c6-5f9e-4eec-90cd-607d171d8712", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Hailey", - "company": "Compuamerica", - "phone": "805-521-2424", - "email": "molly@compuamerica.com" - }, - { - "id": 7418, - "guid": "b9930e4f-b1a9-424a-a3f4-9425e80a1ff5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Wood", - "company": "Genland", - "phone": "826-443-3358", - "email": "paige@genland.com" - }, - { - "id": 7419, - "guid": "282f2374-42e8-45bb-97fb-8055bb4b82db", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Gilmore", - "company": "Infraique", - "phone": "853-519-3098", - "email": "alexis@infraique.com" - }, - { - "id": 7420, - "guid": "4a76f396-a48a-44fc-95d7-2721ee1d96aa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Crossman", - "company": "Aluco", - "phone": "815-443-2148", - "email": "destiny@aluco.com" - }, - { - "id": 7421, - "guid": "dedca403-079e-4426-8465-44f5e103c0d6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Higgins", - "company": "Multitiqua", - "phone": "865-536-3652", - "email": "riley@multitiqua.com" - }, - { - "id": 7422, - "guid": "550f1a7f-3434-4696-aa26-68e3bff5999d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Harrison", - "company": "Syssoft", - "phone": "800-496-3021", - "email": "emma@syssoft.com" - }, - { - "id": 7423, - "guid": "0718789c-fa79-4c9e-b0f7-65e6ccd03c91", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bailey Winter", - "company": "US Infratouch", - "phone": "849-587-2808", - "email": "bailey@us infratouch.com" - }, - { - "id": 7424, - "guid": "405cf8ca-eb85-4adf-b619-6c473c119e71", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Timmons", - "company": "Conrama", - "phone": "898-455-2979", - "email": "bella@conrama.com" - }, - { - "id": 7425, - "guid": "c40aee27-979e-484f-8702-02e6ca4657e2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Owen", - "company": "Allnet", - "phone": "891-526-2293", - "email": "lily@allnet.com" - }, - { - "id": 7426, - "guid": "57dc99ce-32ea-4c30-8d28-6658f3dc1421", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Watson", - "company": "Videobanc", - "phone": "836-430-2955", - "email": "trinity@videobanc.com" - }, - { - "id": 7427, - "guid": "b67f49da-c476-4cc3-9852-ea44e929f3f6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Campbell", - "company": "Genland", - "phone": "882-517-2795", - "email": "emily@genland.com" - }, - { - "id": 7428, - "guid": "3625d583-8f34-4f89-bf93-14677976a7da", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Thornton", - "company": "OpKeycomm", - "phone": "871-511-3296", - "email": "kaitlyn@opkeycomm.com" - }, - { - "id": 7429, - "guid": "2f19c707-13b4-425a-9907-abd6c5ef8cce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Ward", - "company": "Conotomics", - "phone": "820-517-2525", - "email": "amelia@conotomics.com" - }, - { - "id": 7430, - "guid": "c56aef74-51a4-4aa1-be15-f8de80ba83fc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Abramson", - "company": "SysVenamerica", - "phone": "805-527-3924", - "email": "gianna@sysvenamerica.com" - }, - { - "id": 7431, - "guid": "c19a238e-0669-475a-b5d3-08e2a7cf1b76", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Thomson", - "company": "Allnet", - "phone": "810-542-3381", - "email": "layla@allnet.com" - }, - { - "id": 7432, - "guid": "34b7d8d3-b750-48f3-ae00-6d2a08b7034c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Charlson", - "company": "Compuamerica", - "phone": "809-582-3816", - "email": "bailey@compuamerica.com" - }, - { - "id": 7433, - "guid": "c5cb0dfa-6cfc-4c65-a0aa-7cf9aaa17992", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Miller", - "company": "Cryptotegrity", - "phone": "821-417-2933", - "email": "gianna@cryptotegrity.com" - }, - { - "id": 7434, - "guid": "bdceb254-f9d3-4735-bb8c-1fd16da5964b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Hoggarth", - "company": "Videobanc", - "phone": "833-496-3308", - "email": "victoria@videobanc.com" - }, - { - "id": 7435, - "guid": "7c8408b4-5c54-4055-be67-9332248ae743", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Caroline Nathan", - "company": "Videobanc", - "phone": "894-516-2789", - "email": "caroline@videobanc.com" - }, - { - "id": 7436, - "guid": "40adb753-3e9c-44f7-bc21-783781ac770a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Gilbert", - "company": "Safetrust", - "phone": "873-426-2517", - "email": "sarah@safetrust.com" - }, - { - "id": 7437, - "guid": "f6809485-ba31-4176-b4d8-6259a3a64e74", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Youmans", - "company": "Xeicon", - "phone": "808-440-3523", - "email": "gianna@xeicon.com" - }, - { - "id": 7438, - "guid": "81880fa1-d6d0-4be2-9e3a-05a7466d1702", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Croftoon", - "company": "Rapigrafix", - "phone": "831-499-3920", - "email": "chloe@rapigrafix.com" - }, - { - "id": 7439, - "guid": "7c23783f-286d-4b69-a359-2aa52d8f4760", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Gilbert", - "company": "Proline", - "phone": "868-471-3634", - "email": "molly@proline.com" - }, - { - "id": 7440, - "guid": "01bcaa42-a1c9-4dd0-97e4-5ab1f43a903e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Payton Harrison", - "company": "Netsystems", - "phone": "876-435-2966", - "email": "payton@netsystems.com" - }, - { - "id": 7441, - "guid": "658a6594-512d-4117-b031-706b995d5bbc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Wayne", - "company": "Jamrola", - "phone": "821-579-3971", - "email": "avery@jamrola.com" - }, - { - "id": 7442, - "guid": "472e9879-483a-49c5-8a1f-5dbe7deb7936", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Oswald", - "company": "Titanigraf", - "phone": "851-553-2144", - "email": "chloe@titanigraf.com" - }, - { - "id": 7443, - "guid": "f964c2b1-1ea9-4125-8a9d-1e100e79aedb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Cramer", - "company": "Thermotomic", - "phone": "884-540-3635", - "email": "layla@thermotomic.com" - }, - { - "id": 7444, - "guid": "b01fc946-35d0-428b-8546-177e127e0c64", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hannah Conors", - "company": "eSteganoergy", - "phone": "833-528-3721", - "email": "hannah@esteganoergy.com" - }, - { - "id": 7445, - "guid": "d8894389-8645-4e8b-ac04-f6bb132b8f9d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Wayne", - "company": "Xeicon", - "phone": "846-490-2453", - "email": "peyton@xeicon.com" - }, - { - "id": 7446, - "guid": "a0e45974-a6e6-4737-b5c8-2c07739b5ba8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Abramson", - "company": "Qualserve", - "phone": "866-410-3261", - "email": "olivia@qualserve.com" - }, - { - "id": 7447, - "guid": "7a34470d-cab1-42e9-803b-9042b3fe4449", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Gilbert", - "company": "Genland", - "phone": "866-490-3438", - "email": "paige@genland.com" - }, - { - "id": 7448, - "guid": "51287e0c-fe21-4410-b9f5-3c6b07c4a6ba", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Creighton", - "company": "Syssoft", - "phone": "802-427-2029", - "email": "jasmine@syssoft.com" - }, - { - "id": 7449, - "guid": "c05264cb-1e60-443f-8e88-877f56df6990", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Gill", - "company": "Videobanc", - "phone": "801-538-2229", - "email": "hannah@videobanc.com" - }, - { - "id": 7450, - "guid": "78500b89-b5f6-4dfa-aec8-c13310197592", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Creighton", - "company": "Polytheon", - "phone": "839-437-2524", - "email": "morgan@polytheon.com" - }, - { - "id": 7451, - "guid": "067bcf6f-dca1-4f8c-9d13-f24061822327", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Osborne", - "company": "Unconix", - "phone": "800-447-3480", - "email": "aaliyah@unconix.com" - }, - { - "id": 7452, - "guid": "81b9fb57-ae6f-47bc-bfde-1a7ece615298", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Gilmore", - "company": "Jamconik", - "phone": "861-506-3571", - "email": "makayla@jamconik.com" - }, - { - "id": 7453, - "guid": "2c8d4103-050a-40f8-80d7-63a888debcac", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Nathan", - "company": "Robotomic", - "phone": "845-566-2083", - "email": "camila@robotomic.com" - }, - { - "id": 7454, - "guid": "06edbf53-f206-486b-8464-9288e6a27a68", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Chandter", - "company": "Gigaura", - "phone": "861-580-3474", - "email": "payton@gigaura.com" - }, - { - "id": 7455, - "guid": "f0069985-ee72-4887-8d2e-ff0c9defc8b8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Carey", - "company": "Enlogia", - "phone": "826-552-2519", - "email": "emma@enlogia.com" - }, - { - "id": 7456, - "guid": "7ae284a0-96c6-4fd3-9398-69742644dabd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Watson", - "company": "Netseco", - "phone": "886-547-2036", - "email": "madeline@netseco.com" - }, - { - "id": 7457, - "guid": "65311106-f530-4453-917b-5ab14039db0f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia Vance", - "company": "Westmedia", - "phone": "857-471-2202", - "email": "sofia@westmedia.com" - }, - { - "id": 7458, - "guid": "81b628b5-e1d8-4550-b7c8-4a6436b0da29", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Thornton", - "company": "Fibrotopia", - "phone": "882-439-2499", - "email": "grace@fibrotopia.com" - }, - { - "id": 7459, - "guid": "35f9dea7-9e5f-4d14-82f9-d29961ce0b3d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Layla Thomson", - "company": "Ameritron", - "phone": "896-437-2777", - "email": "layla@ameritron.com" - }, - { - "id": 7460, - "guid": "81c054bd-9697-4dc5-aaa6-7f86df916d4a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Vance", - "company": "Compuamerica", - "phone": "873-416-2760", - "email": "kimberly@compuamerica.com" - }, - { - "id": 7461, - "guid": "47a96240-bafe-4920-a754-c66e2bc2c6e9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Daniels", - "company": "Thermotomic", - "phone": "841-575-3540", - "email": "ella@thermotomic.com" - }, - { - "id": 7462, - "guid": "f890e31b-0e71-4781-a0d0-7414d24fd6ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Nelson", - "company": "Infragraph", - "phone": "887-564-3688", - "email": "chloe@infragraph.com" - }, - { - "id": 7463, - "guid": "955bb2b0-b226-4cd0-b40e-184c0e2a3e28", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Gilmore", - "company": "Qualserve", - "phone": "827-570-2820", - "email": "hannah@qualserve.com" - }, - { - "id": 7464, - "guid": "d9f76196-0429-4400-b84b-41f49173ca6e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Chandter", - "company": "Aprama", - "phone": "874-437-2400", - "email": "charlotte@aprama.com" - }, - { - "id": 7465, - "guid": "76cc65a2-3503-4eab-8278-6a4a675a9b73", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Vance", - "company": "Netseco", - "phone": "847-493-3781", - "email": "isabella@netseco.com" - }, - { - "id": 7466, - "guid": "54773a7c-caf0-45db-b3c1-e8bc7cf52f37", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Caroline WifKinson", - "company": "Unconix", - "phone": "803-538-2093", - "email": "caroline@unconix.com" - }, - { - "id": 7467, - "guid": "6d4acbe8-5126-4f4f-903d-3ec45bba67d4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Payton Timmons", - "company": "Vencom", - "phone": "891-548-3650", - "email": "payton@vencom.com" - }, - { - "id": 7468, - "guid": "7a5c9903-3339-4e6a-bcc6-625b1e3fa18b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Carrington", - "company": "Ventanium", - "phone": "838-452-2678", - "email": "madelyn@ventanium.com" - }, - { - "id": 7469, - "guid": "f5eecbe6-601a-4acb-81ec-eb1282ed8701", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Carrington", - "company": "Ventanium", - "phone": "873-563-3916", - "email": "lillian@ventanium.com" - }, - { - "id": 7470, - "guid": "ace5d408-b29e-4a23-85fd-9e365a4a19c5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Haig", - "company": "Transtouch", - "phone": "873-440-3400", - "email": "emma@transtouch.com" - }, - { - "id": 7471, - "guid": "7cca516a-b809-41af-b493-ceda5a09b33a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brianna Cook", - "company": "Venconix", - "phone": "896-505-2646", - "email": "brianna@venconix.com" - }, - { - "id": 7472, - "guid": "bd40070a-e8b0-423e-bb89-0c58bf8dd55f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Cramer", - "company": "Anaframe", - "phone": "889-404-3972", - "email": "khloe@anaframe.com" - }, - { - "id": 7473, - "guid": "32e868ff-ed77-4a56-9d33-d72934509a0c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Fulton", - "company": "Xeicon", - "phone": "861-526-2024", - "email": "evelyn@xeicon.com" - }, - { - "id": 7474, - "guid": "3b6329c7-c2a7-46bd-93ce-1f5d1b3596d7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Otis", - "company": "Rapigrafix", - "phone": "807-458-3045", - "email": "abigail@rapigrafix.com" - }, - { - "id": 7475, - "guid": "a48595c4-2440-4e96-81d7-e162af5300da", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Gardner", - "company": "Mescatron", - "phone": "834-542-3337", - "email": "addison@mescatron.com" - }, - { - "id": 7476, - "guid": "9fad2024-a6dd-4d35-beef-fd66d057332e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emma Haig", - "company": "Mescaridic", - "phone": "858-590-2157", - "email": "emma@mescaridic.com" - }, - { - "id": 7477, - "guid": "cd220345-af6b-4d8a-a94f-d137c4d0c5be", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Hailey", - "company": "Superscope", - "phone": "824-595-3707", - "email": "ariana@superscope.com" - }, - { - "id": 7478, - "guid": "abce3f3e-6344-4fb7-8b75-91c8e2592015", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Ford", - "company": "Thermotomic", - "phone": "897-497-3789", - "email": "isabella@thermotomic.com" - }, - { - "id": 7479, - "guid": "3f138f67-4b35-4c9a-b7d6-c20fe8024e08", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Gardner", - "company": "Truetomic", - "phone": "888-402-2866", - "email": "morgan@truetomic.com" - }, - { - "id": 7480, - "guid": "fabc0f82-8e0a-4c1d-b666-a1f8ac8de9f5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Oliver", - "company": "Compuamerica", - "phone": "866-514-3266", - "email": "abigail@compuamerica.com" - }, - { - "id": 7481, - "guid": "f70efa3e-724f-40cd-bead-78460b48d6a1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Gibbs", - "company": "Steganoconiche", - "phone": "876-468-3478", - "email": "katherine@steganoconiche.com" - }, - { - "id": 7482, - "guid": "2b4315e1-7d65-4bfb-9041-39f48eb3f705", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Davidson", - "company": "InfoAirway", - "phone": "871-432-3481", - "email": "katherine@infoairway.com" - }, - { - "id": 7483, - "guid": "d9b80477-3604-4c51-9fa7-a2a4dd5ade49", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Carter", - "company": "SysVenamerica", - "phone": "887-585-2405", - "email": "avery@sysvenamerica.com" - }, - { - "id": 7484, - "guid": "28fe926a-baf9-409e-b1de-def0b5bc3c49", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Goodman", - "company": "RoboAerlogix", - "phone": "851-440-3119", - "email": "kayla@roboaerlogix.com" - }, - { - "id": 7485, - "guid": "dfed877c-1242-47f3-8b40-92e5506e49b5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Wallace", - "company": "Tekcar", - "phone": "881-571-3915", - "email": "eva@tekcar.com" - }, - { - "id": 7486, - "guid": "b7740b87-5cbe-4537-9787-a538979dc58e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Brooks", - "company": "Tekcar", - "phone": "864-557-2785", - "email": "lauren@tekcar.com" - }, - { - "id": 7487, - "guid": "be0a46bb-636b-404b-a0c0-4c2353523f2e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Hancock", - "company": "Indisco", - "phone": "813-544-3284", - "email": "lauren@indisco.com" - }, - { - "id": 7488, - "guid": "31e87168-29df-4526-88d7-46c202ad8f36", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Nash", - "company": "Techtron", - "phone": "820-552-2184", - "email": "jessica@techtron.com" - }, - { - "id": 7489, - "guid": "a9a37694-9595-4030-a506-db68ae7956ad", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Hamphrey", - "company": "Safetrust", - "phone": "835-569-3786", - "email": "victoria@safetrust.com" - }, - { - "id": 7490, - "guid": "0a063306-0c97-43ae-9336-9f537dbd78c0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Wood", - "company": "Teraserv", - "phone": "840-528-3225", - "email": "molly@teraserv.com" - }, - { - "id": 7491, - "guid": "406559e7-79eb-4a07-b6f4-46f555a33eef", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Carroll", - "company": "Aluco", - "phone": "828-467-2398", - "email": "savannah@aluco.com" - }, - { - "id": 7492, - "guid": "c6717ec8-7b64-4d6f-a10b-0980cc60224a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Hamphrey", - "company": "Allphysiche", - "phone": "859-585-3270", - "email": "jasmine@allphysiche.com" - }, - { - "id": 7493, - "guid": "66e0dea6-f1eb-44c3-9e3f-3ae72c0b8304", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jocelyn Smith", - "company": "Xeicon", - "phone": "823-403-2983", - "email": "jocelyn@xeicon.com" - }, - { - "id": 7494, - "guid": "eee2169c-8728-42e2-b674-14d4eb8625b1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Haig", - "company": "Raylog", - "phone": "812-558-3883", - "email": "layla@raylog.com" - }, - { - "id": 7495, - "guid": "218e5bba-8578-47e0-b37a-f16e4470058c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Brickman", - "company": "Nanobanc", - "phone": "871-484-3448", - "email": "andrea@nanobanc.com" - }, - { - "id": 7496, - "guid": "cbadc653-bc84-4426-9d84-9ef200a2649c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Hawkins", - "company": "Textiqua", - "phone": "878-412-2933", - "email": "hannah@textiqua.com" - }, - { - "id": 7497, - "guid": "8f875490-d2d6-4ae7-a6b8-0a1d762911c7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Stanley", - "company": "Jamrola", - "phone": "854-526-3537", - "email": "katherine@jamrola.com" - }, - { - "id": 7498, - "guid": "154b771c-4f36-4f5a-9735-154b03f7e596", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Harrison", - "company": "Gigaura", - "phone": "872-479-3263", - "email": "isabelle@gigaura.com" - }, - { - "id": 7499, - "guid": "153d6346-192f-4876-9b84-1a845da55bce", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Chandter", - "company": "Thermotomic", - "phone": "894-441-2550", - "email": "alexa@thermotomic.com" - }, - { - "id": 7500, - "guid": "dc25df37-1bcf-4a88-aaff-49dab60e8049", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Carter", - "company": "Aprama", - "phone": "863-580-2886", - "email": "katelyn@aprama.com" - }, - { - "id": 7501, - "guid": "b0eb7a9a-f63c-4ca1-b374-7ed215afe665", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Osborne", - "company": "Allphysiche", - "phone": "888-427-3500", - "email": "anna@allphysiche.com" - }, - { - "id": 7502, - "guid": "6857ec92-5fce-4484-a500-920997e96a20", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Cramer", - "company": "Aluco", - "phone": "893-418-3810", - "email": "evelyn@aluco.com" - }, - { - "id": 7503, - "guid": "50bceed5-978a-4d42-8200-7900616f0d0a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Vaughan", - "company": "Celgra", - "phone": "804-473-2930", - "email": "vanessa@celgra.com" - }, - { - "id": 7504, - "guid": "5430e292-d0aa-4575-83b5-c03b31c41b08", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Goodman", - "company": "Videobanc", - "phone": "862-462-2532", - "email": "mariah@videobanc.com" - }, - { - "id": 7505, - "guid": "be64c517-97cc-44b3-9fa3-86425ce00ef6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Turner", - "company": "Truetomic", - "phone": "806-512-2558", - "email": "audrey@truetomic.com" - }, - { - "id": 7506, - "guid": "b24150bc-459b-4148-be7d-3c59acba980f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Gardner", - "company": "Robocomm", - "phone": "891-514-3776", - "email": "elizabeth@robocomm.com" - }, - { - "id": 7507, - "guid": "01db3de0-c0da-4842-8d51-8300c4f70f92", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Croftoon", - "company": "Videobanc", - "phone": "855-420-3107", - "email": "claire@videobanc.com" - }, - { - "id": 7508, - "guid": "c3d73db8-8b6f-4f41-95fa-8691750bce28", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Miers", - "company": "Transtouch", - "phone": "852-521-2283", - "email": "lillian@transtouch.com" - }, - { - "id": 7509, - "guid": "63c5e317-2e96-474a-8f87-1aa5b21713e2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline Gate", - "company": "Generola", - "phone": "856-540-2773", - "email": "madeline@generola.com" - }, - { - "id": 7510, - "guid": "2f0c8b67-6643-4341-8250-b1a3bedafb23", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Miln", - "company": "Proline", - "phone": "802-462-3971", - "email": "allison@proline.com" - }, - { - "id": 7511, - "guid": "01d4a0ca-5678-4496-ab4e-631b31fe8d29", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Wood", - "company": "Jamconik", - "phone": "860-584-2208", - "email": "alyssa@jamconik.com" - }, - { - "id": 7512, - "guid": "49d42c31-d1fc-4e34-955e-54e823366931", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Milton", - "company": "Conrama", - "phone": "896-504-2322", - "email": "ariana@conrama.com" - }, - { - "id": 7513, - "guid": "3c775a0f-c347-4dde-b085-cb051e55f413", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Wallace", - "company": "Proline", - "phone": "849-440-2122", - "email": "madeline@proline.com" - }, - { - "id": 7514, - "guid": "cca8fad6-40ee-4344-9e7f-a02a8d3b63da", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Oldman", - "company": "Keytheon", - "phone": "839-573-3347", - "email": "madelyn@keytheon.com" - }, - { - "id": 7515, - "guid": "c86dd3f2-bc0a-47c2-973b-093f02886501", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Gibbs", - "company": "Pacwest", - "phone": "811-457-3706", - "email": "ariana@pacwest.com" - }, - { - "id": 7516, - "guid": "d22e7819-9045-4942-974c-2043b4c8e520", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Victoria Sherlock", - "company": "Infraique", - "phone": "804-599-3544", - "email": "victoria@infraique.com" - }, - { - "id": 7517, - "guid": "7dbf129f-4441-4868-ac5d-4efdc6661808", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Gill", - "company": "Navivacs", - "phone": "824-484-3469", - "email": "kayla@navivacs.com" - }, - { - "id": 7518, - "guid": "9b3ba793-8157-4bf7-8d9e-ed561cf2489c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Wainwright", - "company": "Qualserve", - "phone": "829-520-2636", - "email": "brooklyn@qualserve.com" - }, - { - "id": 7519, - "guid": "5d8db5a8-7ea1-4fb2-acae-9fd921ee527e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Croftoon", - "company": "Ventanium", - "phone": "893-487-2503", - "email": "brooke@ventanium.com" - }, - { - "id": 7520, - "guid": "0d44e86e-0148-4b98-b5b5-9f4a618027ba", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Wood", - "company": "Safetrust", - "phone": "846-401-2624", - "email": "gabriella@safetrust.com" - }, - { - "id": 7521, - "guid": "3083988a-6cfe-4f13-a167-c63857048a2c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Waller", - "company": "Safeagra", - "phone": "802-598-3557", - "email": "samantha@safeagra.com" - }, - { - "id": 7522, - "guid": "b70a1245-c343-41e9-bbcf-46c2a736090b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Ward", - "company": "Steganoconiche", - "phone": "855-457-2353", - "email": "vanessa@steganoconiche.com" - }, - { - "id": 7523, - "guid": "0555ac7e-d7ac-4438-847a-32b34bc1c944", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Thomson", - "company": "Quintegrity", - "phone": "822-584-2251", - "email": "ariana@quintegrity.com" - }, - { - "id": 7524, - "guid": "1514c127-2468-4194-8073-f00617269a31", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Chapman", - "company": "Ventanium", - "phone": "846-597-3422", - "email": "kaylee@ventanium.com" - }, - { - "id": 7525, - "guid": "f616d6d2-208e-4d1d-8336-df19a041bba5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Bush", - "company": "eSteganoergy", - "phone": "879-593-2115", - "email": "evelyn@esteganoergy.com" - }, - { - "id": 7526, - "guid": "9519d4a9-3b3c-42d1-aecb-d5cd8d240483", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Smith", - "company": "Safeagra", - "phone": "848-532-3000", - "email": "madeline@safeagra.com" - }, - { - "id": 7527, - "guid": "86658d4b-d4ed-443c-9369-d13bc3c8091b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Freeman", - "company": "InfoAirway", - "phone": "829-473-2652", - "email": "payton@infoairway.com" - }, - { - "id": 7528, - "guid": "f0a4fd63-311d-44cc-a4f3-cf01b9e96d03", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Angelina Clapton", - "company": "Videobanc", - "phone": "838-579-3917", - "email": "angelina@videobanc.com" - }, - { - "id": 7529, - "guid": "d59aa2ff-5b49-479c-bf20-b4f2ab248055", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madeline Freeman", - "company": "Pacwest", - "phone": "826-442-3793", - "email": "madeline@pacwest.com" - }, - { - "id": 7530, - "guid": "9a911bef-e3b7-4ea2-8d65-27fd4c473d4a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Hailey", - "company": "SysVenamerica", - "phone": "868-586-3366", - "email": "samantha@sysvenamerica.com" - }, - { - "id": 7531, - "guid": "a1bfa9ab-eb89-4192-b836-c1f6294d3823", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Timmons", - "company": "Thermotomic", - "phone": "834-451-2787", - "email": "faith@thermotomic.com" - }, - { - "id": 7532, - "guid": "d5a5b13d-788e-4857-83c3-cab482959e87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Abramson", - "company": "Mescaridic", - "phone": "804-466-3864", - "email": "bella@mescaridic.com" - }, - { - "id": 7533, - "guid": "ec9be5ca-02a8-4363-b857-eb26bfa0d732", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Youmans", - "company": "Aluco", - "phone": "867-548-2799", - "email": "andrea@aluco.com" - }, - { - "id": 7534, - "guid": "5b36f6e6-f031-4744-bd54-4e0af561b5e2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Stanley", - "company": "Allnet", - "phone": "881-581-2629", - "email": "taylor@allnet.com" - }, - { - "id": 7535, - "guid": "96d6d578-16b0-4e96-8393-7cb444851345", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Owen", - "company": "SysUSA", - "phone": "815-596-2411", - "email": "zoey@sysusa.com" - }, - { - "id": 7536, - "guid": "3e0b976f-6c36-468e-88b9-1f580394d430", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Wayne", - "company": "Robocomm", - "phone": "873-568-3347", - "email": "ariana@robocomm.com" - }, - { - "id": 7537, - "guid": "c7991eb5-be91-4875-8542-702f43daecdb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Goldman", - "company": "Compuamerica", - "phone": "844-594-2878", - "email": "morgan@compuamerica.com" - }, - { - "id": 7538, - "guid": "9caf5e82-8e9c-4e84-ac12-6ef30e182fdc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Gilbert", - "company": "Teratopia", - "phone": "842-426-2528", - "email": "emma@teratopia.com" - }, - { - "id": 7539, - "guid": "5ee00f9a-6e6f-44f8-a2e1-25419fe5659a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Murphy", - "company": "eEyetanic", - "phone": "893-506-3888", - "email": "claire@eeyetanic.com" - }, - { - "id": 7540, - "guid": "93b1ba0a-9e89-4a25-98d9-b1d1f711a6f3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Sherlock", - "company": "Aprama", - "phone": "818-549-2450", - "email": "ella@aprama.com" - }, - { - "id": 7541, - "guid": "89d2b607-1c41-45f1-a9dd-257d99f292bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Morgan Warren", - "company": "Superscope", - "phone": "864-419-2812", - "email": "morgan@superscope.com" - }, - { - "id": 7542, - "guid": "f048607f-5e5d-4709-869e-a1146ced5729", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Olivia Gibbs", - "company": "Westtomik", - "phone": "882-569-2666", - "email": "olivia@westtomik.com" - }, - { - "id": 7543, - "guid": "38102dc0-f5db-482f-ae8e-007838120eed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Carter", - "company": "Gigaura", - "phone": "828-410-2369", - "email": "bella@gigaura.com" - }, - { - "id": 7544, - "guid": "878fa865-6bef-4226-a7f0-97e73c80bf4a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Fulton", - "company": "Generola", - "phone": "818-470-3471", - "email": "jocelyn@generola.com" - }, - { - "id": 7545, - "guid": "68ba6aee-b4d3-4cf8-880b-1f5abca12ab1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Day", - "company": "Truetomic", - "phone": "876-486-3252", - "email": "serenity@truetomic.com" - }, - { - "id": 7546, - "guid": "9ce09c8a-93e1-4820-a328-56f8144c6ef2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mya Youmans", - "company": "Navivacs", - "phone": "811-403-3317", - "email": "mya@navivacs.com" - }, - { - "id": 7547, - "guid": "5fc1352c-9c17-416d-bdfe-72d873878c69", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Ford", - "company": "Qualserve", - "phone": "852-459-3344", - "email": "autumn@qualserve.com" - }, - { - "id": 7548, - "guid": "3d29e0c1-ca1f-4646-8fee-0ffeeb8b1d7b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Brickman", - "company": "Sontopia", - "phone": "835-438-2495", - "email": "riley@sontopia.com" - }, - { - "id": 7549, - "guid": "b5ab6f63-5ca9-4279-be2e-4b037f9d6277", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Oldridge", - "company": "Skydata", - "phone": "898-405-2365", - "email": "alyssa@skydata.com" - }, - { - "id": 7550, - "guid": "e42c7ad4-b08a-47b4-97c4-2db974550895", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Rachel Hawkins", - "company": "Anagraph", - "phone": "800-521-2863", - "email": "rachel@anagraph.com" - }, - { - "id": 7551, - "guid": "fc1b0e9f-1990-43d3-a8c5-3faa99666f50", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Goodman", - "company": "Robotemplate", - "phone": "805-458-2280", - "email": "melanie@robotemplate.com" - }, - { - "id": 7552, - "guid": "6db799b2-3be8-4cc5-ae4e-a420f9347c49", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Otis", - "company": "Proline", - "phone": "829-507-3575", - "email": "molly@proline.com" - }, - { - "id": 7553, - "guid": "8dfabf9b-4dbe-4706-bdc6-a552f36cdb8c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Claire Hodges", - "company": "Fibrotouch", - "phone": "804-530-3802", - "email": "claire@fibrotouch.com" - }, - { - "id": 7554, - "guid": "a102eba3-ad46-4abb-aaae-ad1dd38ac06f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Smith", - "company": "Netseco", - "phone": "880-446-3243", - "email": "julia@netseco.com" - }, - { - "id": 7555, - "guid": "6a9f031d-635a-4374-be90-d36359eaf362", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Gill", - "company": "Interliant", - "phone": "875-487-2462", - "email": "makayla@interliant.com" - }, - { - "id": 7556, - "guid": "bfbca81d-c049-464e-865e-d1aaeddd7198", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Ford", - "company": "Conrama", - "phone": "873-559-2952", - "email": "victoria@conrama.com" - }, - { - "id": 7557, - "guid": "dd81f385-3760-4b46-9d44-414f0caa3253", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Stanley", - "company": "Indisco", - "phone": "874-469-2634", - "email": "andrea@indisco.com" - }, - { - "id": 7558, - "guid": "30d20e28-2bbd-46c9-9640-13c121cfb568", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Camila Brickman", - "company": "Aprama", - "phone": "846-600-3036", - "email": "camila@aprama.com" - }, - { - "id": 7559, - "guid": "766cd433-0f5e-4157-8b10-ff011e6a04e7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Thornton", - "company": "Proline", - "phone": "860-434-3206", - "email": "maya@proline.com" - }, - { - "id": 7560, - "guid": "abc4a6d5-7f9a-4940-aad6-376ff3d4424d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Wallace", - "company": "Infraique", - "phone": "836-473-2984", - "email": "gabrielle@infraique.com" - }, - { - "id": 7561, - "guid": "b259c20d-6329-4010-b7f7-7bdf2b4cb8ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Owen", - "company": "Truetomic", - "phone": "839-496-2550", - "email": "savannah@truetomic.com" - }, - { - "id": 7562, - "guid": "177e4819-e23e-4699-9d75-503c8662daba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Milton", - "company": "Conotomics", - "phone": "896-446-2349", - "email": "genesis@conotomics.com" - }, - { - "id": 7563, - "guid": "d72a087a-5974-4edc-8813-4c6977537cc9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Neal", - "company": "Unologic", - "phone": "855-564-2143", - "email": "mariah@unologic.com" - }, - { - "id": 7564, - "guid": "b5add8ae-c189-4c04-8901-591c51dd2b2b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Galbraith", - "company": "SysVenamerica", - "phone": "812-505-2265", - "email": "faith@sysvenamerica.com" - }, - { - "id": 7565, - "guid": "60eb4dd8-293e-4896-9e79-2635db70f137", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sofia Clapton", - "company": "Techtron", - "phone": "844-563-2178", - "email": "sofia@techtron.com" - }, - { - "id": 7566, - "guid": "c14d9cdc-fe69-4d6a-a39d-34608e149610", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Bush", - "company": "Westmedia", - "phone": "842-510-3262", - "email": "kylie@westmedia.com" - }, - { - "id": 7567, - "guid": "910bc933-af58-4909-b020-a08300704d24", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Youmans", - "company": "Anaframe", - "phone": "849-548-2390", - "email": "sophie@anaframe.com" - }, - { - "id": 7568, - "guid": "57fcade4-58d2-4c56-8fd0-ae8869775690", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Galbraith", - "company": "Skydata", - "phone": "809-466-3706", - "email": "angelina@skydata.com" - }, - { - "id": 7569, - "guid": "f8a6c269-ea2a-45ec-934e-c5f886ab20ba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Osborne", - "company": "Unconix", - "phone": "804-528-2745", - "email": "ava@unconix.com" - }, - { - "id": 7570, - "guid": "6af0d2b3-8737-4a70-82e5-44c3b90bc370", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Wayne", - "company": "Polytheon", - "phone": "887-419-2001", - "email": "brooklyn@polytheon.com" - }, - { - "id": 7571, - "guid": "22feb4ff-0e21-419b-ae64-c0fbbe56eb62", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Gate", - "company": "Navivacs", - "phone": "811-468-3964", - "email": "leah@navivacs.com" - }, - { - "id": 7572, - "guid": "5d3734ec-a2d0-4f65-9d2d-ba61c35605d7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Mercer", - "company": "Fibrotopia", - "phone": "871-501-2030", - "email": "chloe@fibrotopia.com" - }, - { - "id": 7573, - "guid": "5815672b-a8db-4b04-a539-664479320c8e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Wayne", - "company": "Orthosoft", - "phone": "851-488-3216", - "email": "khloe@orthosoft.com" - }, - { - "id": 7574, - "guid": "9802369a-b61c-4bb1-a22e-6edcf0948d02", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Youmans", - "company": "Syssoft", - "phone": "860-510-3589", - "email": "alexis@syssoft.com" - }, - { - "id": 7575, - "guid": "df2227b1-f3b1-4c93-b32c-3aad303144a0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Carter", - "company": "Technogra", - "phone": "867-588-3213", - "email": "leah@technogra.com" - }, - { - "id": 7576, - "guid": "1e6084b1-10f4-45b4-b12b-5b2ec75e58c8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Brown", - "company": "Netseco", - "phone": "849-471-3689", - "email": "bailey@netseco.com" - }, - { - "id": 7577, - "guid": "03c43b99-4b4b-4500-ab71-ab3cc20a0a40", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Campbell", - "company": "Rapigrafix", - "phone": "812-435-2980", - "email": "madison@rapigrafix.com" - }, - { - "id": 7578, - "guid": "739a8db8-c069-4d85-8bd9-47223421bb34", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Wayne", - "company": "Aluco", - "phone": "866-485-3274", - "email": "camila@aluco.com" - }, - { - "id": 7579, - "guid": "1982af9c-7f75-4a49-88ed-21e2d965c8b9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Walkman", - "company": "Turbomart", - "phone": "886-432-3655", - "email": "abigail@turbomart.com" - }, - { - "id": 7580, - "guid": "3265c661-688c-455f-8da7-4ead81363e40", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Youmans", - "company": "Robotemplate", - "phone": "866-547-2349", - "email": "victoria@robotemplate.com" - }, - { - "id": 7581, - "guid": "5c954e89-31fd-4b87-9c76-1fd337070b34", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lauren Oldridge", - "company": "Inridium", - "phone": "870-440-2129", - "email": "lauren@inridium.com" - }, - { - "id": 7582, - "guid": "c5184ee3-26e5-48bf-89dd-e3a521f0ad85", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Sherlock", - "company": "Westmedia", - "phone": "863-451-3347", - "email": "nevaeh@westmedia.com" - }, - { - "id": 7583, - "guid": "162d3d35-f1c9-4599-9cd9-87a88fdb533e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Thornton", - "company": "Infraique", - "phone": "876-470-2118", - "email": "ella@infraique.com" - }, - { - "id": 7584, - "guid": "fcff640e-a034-4cae-954f-e0c2d848cf0c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Oldridge", - "company": "Pacwest", - "phone": "883-494-2448", - "email": "katelyn@pacwest.com" - }, - { - "id": 7585, - "guid": "48f83eb4-8fea-4c8b-9a20-93208fcb7170", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Oldridge", - "company": "Navivacs", - "phone": "873-488-2082", - "email": "destiny@navivacs.com" - }, - { - "id": 7586, - "guid": "ef1246db-b532-4e6c-8c1e-c485b0663c59", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Smith", - "company": "Netsystems", - "phone": "822-413-3719", - "email": "sophie@netsystems.com" - }, - { - "id": 7587, - "guid": "aff96891-75e2-443d-8216-7e3738678a31", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Hancock", - "company": "Fibroserve", - "phone": "810-428-3439", - "email": "angelina@fibroserve.com" - }, - { - "id": 7588, - "guid": "be3861cb-0be9-4255-926e-2232015e4f58", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Sheldon", - "company": "Xeicon", - "phone": "894-559-2887", - "email": "brooklyn@xeicon.com" - }, - { - "id": 7589, - "guid": "06879bd9-3896-44f9-a2bb-e59a511a0195", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Hoggarth", - "company": "Raylog", - "phone": "875-410-3307", - "email": "evelyn@raylog.com" - }, - { - "id": 7590, - "guid": "7fb2482d-68e5-45ef-b7b9-59756255ba5f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Vaughan", - "company": "Unologic", - "phone": "832-502-2969", - "email": "abigail@unologic.com" - }, - { - "id": 7591, - "guid": "912f581c-3a6a-4183-8227-b33657fdafb2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Peyton Fisher", - "company": "Anaframe", - "phone": "855-568-3071", - "email": "peyton@anaframe.com" - }, - { - "id": 7592, - "guid": "85e80d76-ad11-4694-bda7-5c806a46ac57", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Oliver", - "company": "Tekcar", - "phone": "841-443-2605", - "email": "paige@tekcar.com" - }, - { - "id": 7593, - "guid": "9f9647ab-25a4-4bc2-a68e-92acb8c99d3d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Ward", - "company": "SysUSA", - "phone": "826-435-3707", - "email": "destiny@sysusa.com" - }, - { - "id": 7594, - "guid": "f7a3f67c-fc45-4f6d-8b9e-f63fa0fef43c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Wayne", - "company": "Technogra", - "phone": "806-442-3499", - "email": "alexis@technogra.com" - }, - { - "id": 7595, - "guid": "87367ae0-b182-4e40-8081-80ed00ac0bc4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Oliver", - "company": "Technogra", - "phone": "874-448-3218", - "email": "natalie@technogra.com" - }, - { - "id": 7596, - "guid": "1ab9eed7-dc55-420e-b627-e04f4424ddd2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Morrison", - "company": "Jamconik", - "phone": "876-442-3535", - "email": "brooklyn@jamconik.com" - }, - { - "id": 7597, - "guid": "355b6c92-8508-4efa-b0df-d64d3525b961", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Amelia Youmans", - "company": "SysUSA", - "phone": "841-492-3909", - "email": "amelia@sysusa.com" - }, - { - "id": 7598, - "guid": "363e1535-0782-4261-9bb9-55b2ebfb36f3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Wood", - "company": "Multitiqua", - "phone": "892-546-2930", - "email": "mia@multitiqua.com" - }, - { - "id": 7599, - "guid": "832b6efe-2a5e-475c-b57b-0c3b54f8ba8d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Creighton", - "company": "iOptystix", - "phone": "892-512-3667", - "email": "kaylee@ioptystix.com" - }, - { - "id": 7600, - "guid": "ffe25672-8f82-4908-991d-04562b393b82", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Charlson", - "company": "Nanobanc", - "phone": "885-488-3012", - "email": "jessica@nanobanc.com" - }, - { - "id": 7601, - "guid": "07d043f2-c095-4d5f-a045-73211f21958b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Harrison", - "company": "Videobanc", - "phone": "814-547-2377", - "email": "alexis@videobanc.com" - }, - { - "id": 7602, - "guid": "185adb33-c69f-4956-a4c9-1693c31c81c2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Gilbert", - "company": "Systheon", - "phone": "862-404-3613", - "email": "andrea@systheon.com" - }, - { - "id": 7603, - "guid": "5e8cf22e-58ef-4d60-aab3-0453c131734e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Abramson", - "company": "Steganoconiche", - "phone": "891-599-3715", - "email": "savannah@steganoconiche.com" - }, - { - "id": 7604, - "guid": "88e5c7ad-dd97-4102-95ad-ce131d6faa5e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Smith", - "company": "Rapigrafix", - "phone": "856-517-2492", - "email": "alexa@rapigrafix.com" - }, - { - "id": 7605, - "guid": "36ebf29b-1daf-4a74-b347-913b7d34c94b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny WifKinson", - "company": "Superscope", - "phone": "852-538-3063", - "email": "destiny@superscope.com" - }, - { - "id": 7606, - "guid": "f3a3b88b-76f9-415d-91bf-e92ddac7dc4a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Thomson", - "company": "Polytheon", - "phone": "881-459-2220", - "email": "natalie@polytheon.com" - }, - { - "id": 7607, - "guid": "859e37e3-9ec0-4d67-89de-5b8548befa38", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Higgins", - "company": "Anagraph", - "phone": "840-451-3705", - "email": "serenity@anagraph.com" - }, - { - "id": 7608, - "guid": "a1fd6f59-8dad-41c5-a1ae-a05a15ec04ef", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Hodges", - "company": "Fibrotopia", - "phone": "856-581-2923", - "email": "mya@fibrotopia.com" - }, - { - "id": 7609, - "guid": "f59eb9e8-740f-4338-8dad-361f87964e92", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity WifKinson", - "company": "Anaframe", - "phone": "863-419-3756", - "email": "serenity@anaframe.com" - }, - { - "id": 7610, - "guid": "eced5ccc-1518-453d-8932-f4bc00ce060a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Ogden", - "company": "Robotemplate", - "phone": "894-407-2671", - "email": "kaitlyn@robotemplate.com" - }, - { - "id": 7611, - "guid": "162aad5e-4a52-4a8c-b3bf-d4b69e414a97", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabrielle Hoggarth", - "company": "iOptystix", - "phone": "882-400-3890", - "email": "gabrielle@ioptystix.com" - }, - { - "id": 7612, - "guid": "9cecd403-b092-4ed2-affd-9b6cfd4ab8ed", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Crossman", - "company": "Unconix", - "phone": "898-548-3550", - "email": "charlotte@unconix.com" - }, - { - "id": 7613, - "guid": "b25c580f-f0c3-410f-a522-71854615cafc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Charlson", - "company": "iMedconik", - "phone": "889-499-2856", - "email": "sophie@imedconik.com" - }, - { - "id": 7614, - "guid": "933d9419-9d70-471c-84f2-a3bdf277dc2a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Molligan", - "company": "Allphysiche", - "phone": "811-470-2315", - "email": "sarah@allphysiche.com" - }, - { - "id": 7615, - "guid": "b6417bd0-3e89-449c-8c19-29336e199130", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ella Otis", - "company": "Keytheon", - "phone": "869-591-3772", - "email": "ella@keytheon.com" - }, - { - "id": 7616, - "guid": "da3152ce-d59d-4286-8b8d-a7f5a2302ddd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Oswald", - "company": "Systheon", - "phone": "886-431-3947", - "email": "madeline@systheon.com" - }, - { - "id": 7617, - "guid": "a5cd97dd-28a2-40af-b291-4dfe1a052610", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Winter", - "company": "iMedconik", - "phone": "891-558-3241", - "email": "mackenzie@imedconik.com" - }, - { - "id": 7618, - "guid": "06e305ce-76e7-45e2-91b1-24a9226c5fe6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Hancock", - "company": "Titanigraf", - "phone": "899-576-3232", - "email": "isabella@titanigraf.com" - }, - { - "id": 7619, - "guid": "ca230fdb-8883-43c1-ade0-7e23faf12cbc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Miller", - "company": "Multitiqua", - "phone": "875-441-3718", - "email": "faith@multitiqua.com" - }, - { - "id": 7620, - "guid": "23f25e6c-f799-4864-895d-3d2be3575700", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Andrea Miller", - "company": "Transtouch", - "phone": "888-421-2162", - "email": "andrea@transtouch.com" - }, - { - "id": 7621, - "guid": "5c372aef-a7f6-4333-884f-c0e1e6c28a03", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis White", - "company": "Westgate", - "phone": "851-416-3693", - "email": "alexis@westgate.com" - }, - { - "id": 7622, - "guid": "3c271098-9fb1-4165-8cfb-9e058f009f11", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Croftoon", - "company": "Conrama", - "phone": "846-473-3971", - "email": "abigail@conrama.com" - }, - { - "id": 7623, - "guid": "a178d3d9-b4ab-4093-b9c6-52bfccd6394b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Hailey", - "company": "Safeagra", - "phone": "894-442-2596", - "email": "molly@safeagra.com" - }, - { - "id": 7624, - "guid": "24855a14-6323-44dc-96a9-5632fb7e05ea", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Conors", - "company": "Robotomic", - "phone": "873-444-3085", - "email": "mackenzie@robotomic.com" - }, - { - "id": 7625, - "guid": "97a95f6a-81cd-428a-8067-8f4c7dd4ecc0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Wallace", - "company": "Cryptotemplate", - "phone": "820-559-3809", - "email": "mia@cryptotemplate.com" - }, - { - "id": 7626, - "guid": "37ea1200-65ef-426a-9cfd-3c4a843ab644", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexandra Gilmore", - "company": "InfoAirway", - "phone": "846-465-2164", - "email": "alexandra@infoairway.com" - }, - { - "id": 7627, - "guid": "032f08f4-15ba-430e-8347-57eea20c3a3a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Wayne", - "company": "Compuamerica", - "phone": "807-464-3546", - "email": "ava@compuamerica.com" - }, - { - "id": 7628, - "guid": "2ecd8130-a753-4e4b-a707-b04616c4a346", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Day", - "company": "Anaframe", - "phone": "852-571-2319", - "email": "mya@anaframe.com" - }, - { - "id": 7629, - "guid": "7f06d02d-29dc-4809-8b47-50f81559d07c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Warren", - "company": "Idmax", - "phone": "831-598-2468", - "email": "vanessa@idmax.com" - }, - { - "id": 7630, - "guid": "e88922f5-bfd2-4434-9279-a3d393f54268", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Ward", - "company": "Openserve", - "phone": "821-474-2064", - "email": "gabriella@openserve.com" - }, - { - "id": 7631, - "guid": "f42db03c-7aef-4ab1-ab4a-04b64927d12c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Carroll", - "company": "Mescatron", - "phone": "840-577-3564", - "email": "riley@mescatron.com" - }, - { - "id": 7632, - "guid": "9a311bbd-0340-480d-860f-bb5d9f5c3273", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Miers", - "company": "Aluco", - "phone": "874-426-2099", - "email": "eva@aluco.com" - }, - { - "id": 7633, - "guid": "78a64487-92be-472e-981f-e1c371ca4726", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Galbraith", - "company": "Westtomik", - "phone": "835-472-3125", - "email": "faith@westtomik.com" - }, - { - "id": 7634, - "guid": "f70e908e-3901-4f59-963a-4f9f76ca0317", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Hawkins", - "company": "Teraserv", - "phone": "824-564-3690", - "email": "abigail@teraserv.com" - }, - { - "id": 7635, - "guid": "7bb1f737-239a-4f5f-9a5d-7d6b8ea60c34", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Campbell", - "company": "Inridium", - "phone": "818-598-2176", - "email": "jessica@inridium.com" - }, - { - "id": 7636, - "guid": "9c5e70d4-9c52-404e-b0d8-9cfb70b6753e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Gerald", - "company": "Skydata", - "phone": "820-549-2041", - "email": "melanie@skydata.com" - }, - { - "id": 7637, - "guid": "e21d48be-11af-41a0-a9ef-e8bfb6dc45f6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Chapman", - "company": "Generola", - "phone": "877-419-2988", - "email": "alexa@generola.com" - }, - { - "id": 7638, - "guid": "ad3b907d-08bb-4968-88a8-7e75b6c3eb67", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Caroline Vaughan", - "company": "Fibrotopia", - "phone": "869-516-2512", - "email": "caroline@fibrotopia.com" - }, - { - "id": 7639, - "guid": "21fd2925-4e47-4465-ad8f-6355ada31e9b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Clapton", - "company": "Infraique", - "phone": "819-518-3056", - "email": "vanessa@infraique.com" - }, - { - "id": 7640, - "guid": "da35f78a-6824-413d-8772-58116bcdcac5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Timmons", - "company": "Aluco", - "phone": "806-422-3828", - "email": "leah@aluco.com" - }, - { - "id": 7641, - "guid": "347f220f-9953-42ea-bb56-47725192a95a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Sherlock", - "company": "Titanigraf", - "phone": "844-442-3580", - "email": "angelina@titanigraf.com" - }, - { - "id": 7642, - "guid": "3c509cae-894d-4daf-8b28-846b287e9bd4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Brown", - "company": "Thermotomic", - "phone": "851-436-3643", - "email": "melanie@thermotomic.com" - }, - { - "id": 7643, - "guid": "65525f0e-74fb-4279-acf0-0d9895355848", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Wesley", - "company": "US Infratouch", - "phone": "803-565-3542", - "email": "chloe@us infratouch.com" - }, - { - "id": 7644, - "guid": "14d5cf8b-4fee-4f30-85df-211676ce8275", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Creighton", - "company": "OpKeycomm", - "phone": "847-435-3523", - "email": "avery@opkeycomm.com" - }, - { - "id": 7645, - "guid": "863aa066-7ea9-4963-b44d-037f7851858b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Nash", - "company": "Indisco", - "phone": "806-493-2860", - "email": "ashley@indisco.com" - }, - { - "id": 7646, - "guid": "254d2535-1310-44eb-b417-a64781533a5a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Goldman", - "company": "Airdyne", - "phone": "840-534-2409", - "email": "katelyn@airdyne.com" - }, - { - "id": 7647, - "guid": "82bfb035-d164-45c5-a17d-6e69ffea8f86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Taylor Brooks", - "company": "Anaframe", - "phone": "843-593-3539", - "email": "taylor@anaframe.com" - }, - { - "id": 7648, - "guid": "d7db91ed-5d55-4a8b-b939-d6b0367da03f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Oliver", - "company": "Thermotomic", - "phone": "864-420-3232", - "email": "gabriella@thermotomic.com" - }, - { - "id": 7649, - "guid": "999e88c7-c9de-4798-8c0c-7d5f807f2fb5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mia Clapton", - "company": "Titanirola", - "phone": "809-582-2956", - "email": "mia@titanirola.com" - }, - { - "id": 7650, - "guid": "fda6cc86-a102-4db4-866c-51c131cc00f8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Chapman", - "company": "Compuamerica", - "phone": "818-499-3111", - "email": "mya@compuamerica.com" - }, - { - "id": 7651, - "guid": "83b393b5-faae-47ba-83e3-ae703a0d3931", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hailey Ward", - "company": "Xeicon", - "phone": "833-427-3389", - "email": "hailey@xeicon.com" - }, - { - "id": 7652, - "guid": "444ba61e-7edb-4c36-8f49-45207db343d7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Gate", - "company": "iOptystix", - "phone": "857-447-2581", - "email": "savannah@ioptystix.com" - }, - { - "id": 7653, - "guid": "b6e5dfe6-1e7e-4408-a5c2-e0fbc487faa3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Stanley", - "company": "iOptystix", - "phone": "800-573-3274", - "email": "alexis@ioptystix.com" - }, - { - "id": 7654, - "guid": "205b5f1b-56ee-4ee7-a81a-435d2549b2cc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Goldman", - "company": "Airdyne", - "phone": "819-481-2291", - "email": "hailey@airdyne.com" - }, - { - "id": 7655, - "guid": "8b73bada-7c23-4de2-9870-5701298840ce", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Chesterton", - "company": "Indisco", - "phone": "896-462-3415", - "email": "charlotte@indisco.com" - }, - { - "id": 7656, - "guid": "b06ff15c-566e-404d-b6ce-4c21c2c4d5fb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Abramson", - "company": "iSkyvaco", - "phone": "854-547-2250", - "email": "caroline@iskyvaco.com" - }, - { - "id": 7657, - "guid": "6ca0d58c-69e1-4ba2-9d3a-75183395b3bd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Nelson", - "company": "Gigaura", - "phone": "861-450-2094", - "email": "kaylee@gigaura.com" - }, - { - "id": 7658, - "guid": "7d165cce-5feb-429c-b84b-58317ab4749d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Gustman", - "company": "Pacwest", - "phone": "844-419-3956", - "email": "allison@pacwest.com" - }, - { - "id": 7659, - "guid": "6c0086f8-2373-47db-a8d4-4ff45e4984f8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabrielle Smith", - "company": "Allphysiche", - "phone": "874-461-2061", - "email": "gabrielle@allphysiche.com" - }, - { - "id": 7660, - "guid": "40db4ee7-a18f-4042-bef2-5b42f1d85b2e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Oldman", - "company": "Steganoconiche", - "phone": "868-470-2174", - "email": "nevaeh@steganoconiche.com" - }, - { - "id": 7661, - "guid": "33856128-3f5a-407a-b9e1-ebd1fde0aea6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Waller", - "company": "Netsystems", - "phone": "817-522-2558", - "email": "chloe@netsystems.com" - }, - { - "id": 7662, - "guid": "d6565435-d6a6-4e3e-a04b-3676417d23ee", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Young", - "company": "Orthomedia", - "phone": "835-475-2200", - "email": "zoe@orthomedia.com" - }, - { - "id": 7663, - "guid": "9282f375-4f96-4d5e-888b-ea674edcc998", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Molligan", - "company": "Westtomik", - "phone": "857-405-3873", - "email": "grace@westtomik.com" - }, - { - "id": 7664, - "guid": "18cc955a-9a62-447c-963e-38a2a9f2a88d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Thomson", - "company": "Safetrust", - "phone": "874-438-2293", - "email": "destiny@safetrust.com" - }, - { - "id": 7665, - "guid": "9262f065-0501-4eee-b92e-8f0a7bfeacf1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Nelson", - "company": "Teratopia", - "phone": "898-456-3605", - "email": "jasmine@teratopia.com" - }, - { - "id": 7666, - "guid": "bca43ad0-bcbc-43b8-9614-c58b4a9844f5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Grace Thomson", - "company": "Jamconik", - "phone": "871-501-2962", - "email": "grace@jamconik.com" - }, - { - "id": 7667, - "guid": "ed685a73-ee58-406b-9019-6102e23ac503", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Daniels", - "company": "SysUSA", - "phone": "825-416-3775", - "email": "gabriella@sysusa.com" - }, - { - "id": 7668, - "guid": "b17c16a3-2ed5-4619-8e61-4ecc357cd2d9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Abramson", - "company": "iOptystix", - "phone": "811-433-3183", - "email": "chloe@ioptystix.com" - }, - { - "id": 7669, - "guid": "df8c5773-3fd1-4726-af21-65d9e092f343", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mariah Gibbs", - "company": "Jamrola", - "phone": "835-486-3524", - "email": "mariah@jamrola.com" - }, - { - "id": 7670, - "guid": "949e081d-e890-4da9-a628-78f2a4b1a667", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Campbell", - "company": "Nanobanc", - "phone": "851-526-3757", - "email": "kylie@nanobanc.com" - }, - { - "id": 7671, - "guid": "74fa4ee6-339d-4aad-870c-9abd3d78d8b0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Gill", - "company": "Celgra", - "phone": "850-491-3409", - "email": "emma@celgra.com" - }, - { - "id": 7672, - "guid": "ac881b7b-c79f-4471-98d9-8a973b35f163", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Cook", - "company": "Multitiqua", - "phone": "875-458-3335", - "email": "hannah@multitiqua.com" - }, - { - "id": 7673, - "guid": "6fcb9595-2626-476a-94e2-f0b47c0dadb0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Chesterton", - "company": "Nanobanc", - "phone": "878-489-2360", - "email": "eva@nanobanc.com" - }, - { - "id": 7674, - "guid": "66baba06-e84a-4801-a14f-103e8d87b0e9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Hardman", - "company": "Cryptotegrity", - "phone": "846-484-3011", - "email": "jasmine@cryptotegrity.com" - }, - { - "id": 7675, - "guid": "47aa8cff-5ae1-4ae5-9e90-c33fe0038a01", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Mercer", - "company": "Hypervaco", - "phone": "849-439-3458", - "email": "zoe@hypervaco.com" - }, - { - "id": 7676, - "guid": "5a1640c7-c271-4dbe-91a7-92076ca21fd1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophie Molligan", - "company": "Polytheon", - "phone": "882-571-3305", - "email": "sophie@polytheon.com" - }, - { - "id": 7677, - "guid": "2a5ea8aa-accc-4fdc-8744-de4391f0516e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Hailey", - "company": "Safeagra", - "phone": "859-550-3325", - "email": "autumn@safeagra.com" - }, - { - "id": 7678, - "guid": "457239a1-01ea-408c-a72f-df8888b0ffd3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Morrison", - "company": "Superscope", - "phone": "869-561-3672", - "email": "eva@superscope.com" - }, - { - "id": 7679, - "guid": "95b51da4-db8d-4b8d-bb67-8a7e49b5e79a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Charlotte Adamson", - "company": "Titanigraf", - "phone": "832-429-3816", - "email": "charlotte@titanigraf.com" - }, - { - "id": 7680, - "guid": "fb83f566-dc10-4d7d-8a7a-1a37d58cee49", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emily Brickman", - "company": "Technogra", - "phone": "840-478-2906", - "email": "emily@technogra.com" - }, - { - "id": 7681, - "guid": "6d7e233d-a9f3-4c6a-baf6-0677a8222962", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Crossman", - "company": "Anaframe", - "phone": "849-531-2111", - "email": "serenity@anaframe.com" - }, - { - "id": 7682, - "guid": "1cf76473-a5c3-45ca-a083-d9e4bf924d09", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Nash", - "company": "Fibrotouch", - "phone": "814-567-3604", - "email": "riley@fibrotouch.com" - }, - { - "id": 7683, - "guid": "883edece-06c4-4f20-a092-9f71670723f7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Vaughan", - "company": "US Omnigraphik", - "phone": "898-464-3934", - "email": "riley@us omnigraphik.com" - }, - { - "id": 7684, - "guid": "dc711415-0468-4d18-82dc-1248c9689876", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Thorndike", - "company": "Conotomics", - "phone": "815-401-2409", - "email": "kaitlyn@conotomics.com" - }, - { - "id": 7685, - "guid": "cf93d890-14cd-4731-b6a6-c7dc1b1ec9bf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Higgins", - "company": "Multitiqua", - "phone": "837-475-3551", - "email": "eva@multitiqua.com" - }, - { - "id": 7686, - "guid": "808cf68d-d77e-4147-93d9-abf8daa1a917", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Young", - "company": "InfoAirway", - "phone": "818-422-3688", - "email": "andrea@infoairway.com" - }, - { - "id": 7687, - "guid": "1d1b3fe2-b5fc-4d6e-bad0-fa623bde06ba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Gardner", - "company": "Videobanc", - "phone": "840-435-3025", - "email": "lauren@videobanc.com" - }, - { - "id": 7688, - "guid": "e6ba68f9-8a7e-4b11-8c30-f25970e2696a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Thomson", - "company": "SysUSA", - "phone": "842-456-3132", - "email": "avery@sysusa.com" - }, - { - "id": 7689, - "guid": "177fbbd9-451f-44eb-a9cc-8584b69d0ffb", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Hancock", - "company": "Aprama", - "phone": "880-435-3998", - "email": "alexa@aprama.com" - }, - { - "id": 7690, - "guid": "0c79e942-2e88-41a8-af96-a6f5d80e72df", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Hodges", - "company": "Techtron", - "phone": "821-476-2752", - "email": "makayla@techtron.com" - }, - { - "id": 7691, - "guid": "37b81689-7ff6-4e03-a37e-7c02f3293b40", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Crossman", - "company": "Safeagra", - "phone": "892-531-3760", - "email": "aubrey@safeagra.com" - }, - { - "id": 7692, - "guid": "b3466ef8-1191-4347-9c55-c04cb51723d0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Smith", - "company": "Westmedia", - "phone": "824-537-3947", - "email": "brianna@westmedia.com" - }, - { - "id": 7693, - "guid": "27912e20-e07a-49ce-aff3-8fc0d588df46", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Ogden", - "company": "iMedconik", - "phone": "885-534-3387", - "email": "sophia@imedconik.com" - }, - { - "id": 7694, - "guid": "6c2a480a-96b0-4135-a91e-468f03f9b485", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Daniels", - "company": "Conrama", - "phone": "894-494-2862", - "email": "brooke@conrama.com" - }, - { - "id": 7695, - "guid": "7d5d5c38-3201-412a-b9e8-caace62ec97b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Miller", - "company": "Tekcar", - "phone": "855-547-2810", - "email": "madeline@tekcar.com" - }, - { - "id": 7696, - "guid": "13c98f02-699f-4f37-8cb0-4e338d00d0b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Gilbert", - "company": "iMedconik", - "phone": "876-571-2004", - "email": "hannah@imedconik.com" - }, - { - "id": 7697, - "guid": "5ebdc74f-49be-4254-a8fb-d14427486959", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Molligan", - "company": "Safeagra", - "phone": "840-488-3140", - "email": "sarah@safeagra.com" - }, - { - "id": 7698, - "guid": "b0a5138a-1681-4fed-b908-79bda2a76cff", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Audrey Hawkins", - "company": "Textiqua", - "phone": "862-501-2786", - "email": "audrey@textiqua.com" - }, - { - "id": 7699, - "guid": "4995802c-194c-4085-b74e-3a257d6cc51d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah White", - "company": "Titanirola", - "phone": "826-569-2582", - "email": "leah@titanirola.com" - }, - { - "id": 7700, - "guid": "3f8d23c0-f338-4250-980f-2ea3c9564407", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Owen", - "company": "iQualcar", - "phone": "822-464-3078", - "email": "mariah@iqualcar.com" - }, - { - "id": 7701, - "guid": "a0a66450-5de1-47eb-9dce-6bb51ef56867", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Oliver", - "company": "Robotomic", - "phone": "898-552-3102", - "email": "riley@robotomic.com" - }, - { - "id": 7702, - "guid": "de326c55-24ce-4333-92c9-a561c3a857c4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Conors", - "company": "iEnland", - "phone": "854-496-2774", - "email": "sophia@ienland.com" - }, - { - "id": 7703, - "guid": "49eea403-cf44-47f6-85e6-d57670e42fbe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Carrington", - "company": "Mescatron", - "phone": "816-431-3996", - "email": "angelina@mescatron.com" - }, - { - "id": 7704, - "guid": "511379c3-87b5-4906-9d09-a1cfafcdf7a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Higgins", - "company": "Fibroserve", - "phone": "895-439-2141", - "email": "eva@fibroserve.com" - }, - { - "id": 7705, - "guid": "17b142c2-a139-49e3-ba4a-af07ec4229ae", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Campbell", - "company": "Inridium", - "phone": "872-420-3368", - "email": "elizabeth@inridium.com" - }, - { - "id": 7706, - "guid": "4f394bce-ae4e-4f4a-a15e-27c1ab839ba0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Gilbert", - "company": "Transtouch", - "phone": "869-545-3151", - "email": "ava@transtouch.com" - }, - { - "id": 7707, - "guid": "34a7408d-c9c7-467d-a64c-eda12d35154b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jasmine Vaughan", - "company": "Robocomm", - "phone": "872-479-3794", - "email": "jasmine@robocomm.com" - }, - { - "id": 7708, - "guid": "a6704ae8-7aec-48f3-88ea-1488f96dc5da", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Nathan", - "company": "Teknoplexon", - "phone": "828-591-2822", - "email": "anna@teknoplexon.com" - }, - { - "id": 7709, - "guid": "9f0cb340-c546-4d67-9b24-1587c4765a79", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Ogden", - "company": "Enlogia", - "phone": "817-409-2621", - "email": "savannah@enlogia.com" - }, - { - "id": 7710, - "guid": "3e81d014-6f35-430a-be7c-550e0f2e2ed3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Walkman", - "company": "Allnet", - "phone": "846-479-3961", - "email": "amelia@allnet.com" - }, - { - "id": 7711, - "guid": "346eb4ee-a355-4cfa-849d-f45526cf123a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Harrison", - "company": "Genland", - "phone": "832-409-2199", - "email": "riley@genland.com" - }, - { - "id": 7712, - "guid": "9924e0ed-49eb-4f82-8b72-7d22b35564fe", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Wainwright", - "company": "Technogra", - "phone": "874-497-3710", - "email": "ashley@technogra.com" - }, - { - "id": 7713, - "guid": "e2e171f5-3d6b-4040-8010-b242f65b6cff", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Nash", - "company": "Fibrotouch", - "phone": "831-520-3071", - "email": "arianna@fibrotouch.com" - }, - { - "id": 7714, - "guid": "a9a177ce-b7ad-47e1-8c29-f5f214b1a7e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Miers", - "company": "Polytheon", - "phone": "873-542-3912", - "email": "maya@polytheon.com" - }, - { - "id": 7715, - "guid": "96f0d843-1722-492a-85af-04df46876014", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Hodges", - "company": "Videobanc", - "phone": "800-521-3948", - "email": "alexa@videobanc.com" - }, - { - "id": 7716, - "guid": "198085c7-ec06-47e1-a598-def7c8d63e50", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Abramson", - "company": "Truegate", - "phone": "823-567-2552", - "email": "samantha@truegate.com" - }, - { - "id": 7717, - "guid": "10f7eb2e-ec83-4b0d-ba58-e94ae6bce4a9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Nash", - "company": "Idmax", - "phone": "801-568-2341", - "email": "alyssa@idmax.com" - }, - { - "id": 7718, - "guid": "f361560e-cbc1-436a-b065-df6e0c6617e7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Croftoon", - "company": "iSkyvaco", - "phone": "815-549-2817", - "email": "alexa@iskyvaco.com" - }, - { - "id": 7719, - "guid": "29b9ad16-0d4c-4b47-9506-48e8ae5dd6ad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ariana Youmans", - "company": "Truegate", - "phone": "867-474-2233", - "email": "ariana@truegate.com" - }, - { - "id": 7720, - "guid": "6affb596-313b-477a-9d85-4183d567258a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Sherlock", - "company": "Netseco", - "phone": "873-422-3887", - "email": "lillian@netseco.com" - }, - { - "id": 7721, - "guid": "976fe721-fceb-4954-b42f-fe5125ef7b5a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Thornton", - "company": "Infraique", - "phone": "894-540-3945", - "email": "taylor@infraique.com" - }, - { - "id": 7722, - "guid": "fc4345f6-ede8-4fcc-936c-b3a0822626e4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Stanley", - "company": "Cryptotemplate", - "phone": "826-531-2077", - "email": "madeline@cryptotemplate.com" - }, - { - "id": 7723, - "guid": "fd28b147-938d-489f-91b2-f2f10523d183", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Cramer", - "company": "Idmax", - "phone": "818-473-2147", - "email": "payton@idmax.com" - }, - { - "id": 7724, - "guid": "953e5bbe-a895-484a-8d9f-607aca6b4da5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Haig", - "company": "Orthosoft", - "phone": "854-428-3959", - "email": "hannah@orthosoft.com" - }, - { - "id": 7725, - "guid": "4a64c8ac-4dde-48c1-ae67-cbe6dc434190", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Bush", - "company": "Superscope", - "phone": "868-580-3447", - "email": "mya@superscope.com" - }, - { - "id": 7726, - "guid": "5b63b370-dc1b-4915-acd8-c36d378556ed", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Turner", - "company": "Truetomic", - "phone": "870-429-2837", - "email": "samantha@truetomic.com" - }, - { - "id": 7727, - "guid": "3c956b1d-966b-4807-8b68-23ee8bb987e8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Nelson", - "company": "iQualcar", - "phone": "863-559-3053", - "email": "addison@iqualcar.com" - }, - { - "id": 7728, - "guid": "a9dea506-8dac-438f-85de-af555e14397b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Carter", - "company": "iEnland", - "phone": "881-547-3639", - "email": "kaylee@ienland.com" - }, - { - "id": 7729, - "guid": "2260c697-52a0-492f-ae09-cbc0495c7ada", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Waller", - "company": "Jamrola", - "phone": "888-429-3034", - "email": "kaitlyn@jamrola.com" - }, - { - "id": 7730, - "guid": "74be5811-e28f-4ce1-a0e7-4a0cd1c5a278", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Murphy", - "company": "Rapigrafix", - "phone": "804-459-2830", - "email": "molly@rapigrafix.com" - }, - { - "id": 7731, - "guid": "dc90c384-524a-43af-8ba0-94c1f81b1d7d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madelyn Hailey", - "company": "Superscope", - "phone": "883-402-2257", - "email": "madelyn@superscope.com" - }, - { - "id": 7732, - "guid": "051d2b0c-51b1-4f17-be05-4d8c833b640c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Youmans", - "company": "Venconix", - "phone": "841-586-2606", - "email": "alyssa@venconix.com" - }, - { - "id": 7733, - "guid": "184f9558-3fde-4bdb-9227-174ed3198fee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Croftoon", - "company": "Orthomedia", - "phone": "849-477-2306", - "email": "katherine@orthomedia.com" - }, - { - "id": 7734, - "guid": "8c48e550-e00b-4d7d-9d33-49b261a04174", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Gerald", - "company": "Systheon", - "phone": "878-457-2196", - "email": "nevaeh@systheon.com" - }, - { - "id": 7735, - "guid": "2aecc240-50d4-4dad-9583-54cab5d740b8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Oliver", - "company": "Genland", - "phone": "861-496-3930", - "email": "riley@genland.com" - }, - { - "id": 7736, - "guid": "f153820e-46e9-4ce1-98e7-d76480a30fcb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Webster", - "company": "Celgra", - "phone": "823-439-2514", - "email": "kayla@celgra.com" - }, - { - "id": 7737, - "guid": "90da797f-b650-496e-b5b6-2ea6564d0514", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Carter", - "company": "US Omnigraphik", - "phone": "859-449-3059", - "email": "genesis@us omnigraphik.com" - }, - { - "id": 7738, - "guid": "8403a0da-0495-4604-bb67-5d13abfd6cbd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Webster", - "company": "Pacwest", - "phone": "844-511-2897", - "email": "khloe@pacwest.com" - }, - { - "id": 7739, - "guid": "a5c89dd0-97d1-4368-a08c-8e772c1ae8ec", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Galbraith", - "company": "Vencom", - "phone": "851-591-3709", - "email": "vanessa@vencom.com" - }, - { - "id": 7740, - "guid": "3f4a4c63-90f8-448d-aee5-cd29e2bbcfd8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Brown", - "company": "RoboAerlogix", - "phone": "822-538-3928", - "email": "destiny@roboaerlogix.com" - }, - { - "id": 7741, - "guid": "4c5c625b-8b31-446d-9f42-126a0b156268", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Hancock", - "company": "SysUSA", - "phone": "844-439-3769", - "email": "emily@sysusa.com" - }, - { - "id": 7742, - "guid": "3c4f9afb-0f4f-4ec5-8882-f588c7a8627e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Stanley", - "company": "Polytheon", - "phone": "844-453-2034", - "email": "zoe@polytheon.com" - }, - { - "id": 7743, - "guid": "c7685a6c-1fd5-46d7-bc89-57163206f007", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Brickman", - "company": "Fibrotopia", - "phone": "832-559-3322", - "email": "isabella@fibrotopia.com" - }, - { - "id": 7744, - "guid": "f46fe732-1721-44c8-9601-039d478d8381", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mackenzie Timmons", - "company": "iMedconik", - "phone": "877-565-2181", - "email": "mackenzie@imedconik.com" - }, - { - "id": 7745, - "guid": "18fe06ce-9615-4704-9095-425092513c11", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Conors", - "company": "Generola", - "phone": "836-545-2421", - "email": "angelina@generola.com" - }, - { - "id": 7746, - "guid": "37a3b4d4-3722-437d-a5a0-358dc94bf05c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Gibbs", - "company": "Robotemplate", - "phone": "880-443-2260", - "email": "natalie@robotemplate.com" - }, - { - "id": 7747, - "guid": "c51b5e89-ba73-4fa5-828e-ca6048e975ad", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Wood", - "company": "Ameritron", - "phone": "877-457-2153", - "email": "maria@ameritron.com" - }, - { - "id": 7748, - "guid": "c2824b20-1e06-42d1-bbc8-da5df6495d43", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Walkman", - "company": "Robotemplate", - "phone": "858-534-2223", - "email": "kaitlyn@robotemplate.com" - }, - { - "id": 7749, - "guid": "53ea04d4-3633-4a63-86bd-118ea4d18b58", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Owen", - "company": "Ameritron", - "phone": "866-483-2253", - "email": "valeria@ameritron.com" - }, - { - "id": 7750, - "guid": "8207d2c0-db29-409d-8a5e-4a0246afafca", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Goldman", - "company": "Venconix", - "phone": "869-402-2352", - "email": "faith@venconix.com" - }, - { - "id": 7751, - "guid": "3f280fe1-dbb4-4a92-abb4-c55d1a6573d7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Walkman", - "company": "Airdyne", - "phone": "890-552-3130", - "email": "ariana@airdyne.com" - }, - { - "id": 7752, - "guid": "5d48b8b6-3121-40d1-98a6-b1c1bf5cc202", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Vaughan", - "company": "Conrama", - "phone": "806-455-3276", - "email": "taylor@conrama.com" - }, - { - "id": 7753, - "guid": "bb92ad11-c8ad-48d2-b913-a1f374ddc69b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Higgins", - "company": "Sontopia", - "phone": "808-534-2559", - "email": "leah@sontopia.com" - }, - { - "id": 7754, - "guid": "ddfa3dce-d126-46be-995b-cc98722568c4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Wallace", - "company": "Fibrotopia", - "phone": "892-468-2373", - "email": "emily@fibrotopia.com" - }, - { - "id": 7755, - "guid": "2e1ad7b9-5e80-4fb0-a907-c2caa2a1455c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Goodman", - "company": "Transtouch", - "phone": "801-423-3134", - "email": "khloe@transtouch.com" - }, - { - "id": 7756, - "guid": "9e036507-b67f-4f19-b2cb-1436f594f5b8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Milton", - "company": "Dynarama", - "phone": "894-519-3080", - "email": "zoe@dynarama.com" - }, - { - "id": 7757, - "guid": "dd970f19-62d2-4dd2-b235-0f731fa7a078", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Morrison", - "company": "Techtron", - "phone": "818-490-2624", - "email": "madeline@techtron.com" - }, - { - "id": 7758, - "guid": "f2eedfc6-9bb2-4de3-9b03-8f75ba578cd1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Claire Creighton", - "company": "Hypervaco", - "phone": "874-451-2129", - "email": "claire@hypervaco.com" - }, - { - "id": 7759, - "guid": "3b14fa7c-9ae5-4689-b6f7-53a89298032a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Conors", - "company": "Ameritron", - "phone": "809-423-3341", - "email": "lily@ameritron.com" - }, - { - "id": 7760, - "guid": "6ed160b6-daca-4bad-a8c2-a6e70227dadf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Michaelson", - "company": "Interliant", - "phone": "808-412-2340", - "email": "anna@interliant.com" - }, - { - "id": 7761, - "guid": "893ae498-b906-46f4-9f23-1810ee5dbc86", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Nathan", - "company": "Unologic", - "phone": "810-599-3727", - "email": "alexa@unologic.com" - }, - { - "id": 7762, - "guid": "a654901d-bbbf-4537-897a-cb4816f867fa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Chandter", - "company": "Safetrust", - "phone": "879-527-2881", - "email": "jasmine@safetrust.com" - }, - { - "id": 7763, - "guid": "27314384-9f5d-4971-826a-6d3fdfcc048e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Owen", - "company": "Sontopia", - "phone": "851-486-2967", - "email": "makayla@sontopia.com" - }, - { - "id": 7764, - "guid": "05455d16-2646-4645-aacf-012e97d95389", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Carrington", - "company": "Steganoconiche", - "phone": "899-530-3347", - "email": "sophie@steganoconiche.com" - }, - { - "id": 7765, - "guid": "30461f16-237d-489c-9e09-3e22520777f8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Melanie Conors", - "company": "Steganoconiche", - "phone": "885-590-3993", - "email": "melanie@steganoconiche.com" - }, - { - "id": 7766, - "guid": "186a886a-596c-4f87-9ef0-3564b3d0e60f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Gilson", - "company": "Turbomart", - "phone": "850-572-2579", - "email": "hannah@turbomart.com" - }, - { - "id": 7767, - "guid": "2e12ee6e-5914-4f49-94a6-c6259d2027b8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Waller", - "company": "Thermotomic", - "phone": "804-600-2016", - "email": "makayla@thermotomic.com" - }, - { - "id": 7768, - "guid": "96199844-4c17-42c8-a540-6f20d41e2556", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Owen", - "company": "Keytheon", - "phone": "895-537-2304", - "email": "alyssa@keytheon.com" - }, - { - "id": 7769, - "guid": "697da8c6-1e6e-4829-a12a-0b086c532829", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Thorndike", - "company": "Polytheon", - "phone": "841-478-2030", - "email": "angelina@polytheon.com" - }, - { - "id": 7770, - "guid": "04639744-f324-4c85-9314-e5c4625988e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Morrison", - "company": "Keytheon", - "phone": "852-585-2902", - "email": "eva@keytheon.com" - }, - { - "id": 7771, - "guid": "8ae141cd-7efa-4529-8d2a-8b4d1eb2801b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Brown", - "company": "iOptystix", - "phone": "805-466-2791", - "email": "khloe@ioptystix.com" - }, - { - "id": 7772, - "guid": "9b053323-b60d-4843-af98-4cfde93b7ba2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Carey", - "company": "Hypervaco", - "phone": "855-432-2115", - "email": "molly@hypervaco.com" - }, - { - "id": 7773, - "guid": "8e1a171e-376b-4211-ae35-1bade07d27ef", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Gibbs", - "company": "Netsystems", - "phone": "896-554-3115", - "email": "ariana@netsystems.com" - }, - { - "id": 7774, - "guid": "dadbdb58-c0e9-45fc-8d37-a5aa326f1b30", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Rachel Milton", - "company": "Sontopia", - "phone": "881-454-3644", - "email": "rachel@sontopia.com" - }, - { - "id": 7775, - "guid": "119832e1-5e8e-453e-8d43-e80447fb520f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Brickman", - "company": "Infraique", - "phone": "808-504-2349", - "email": "paige@infraique.com" - }, - { - "id": 7776, - "guid": "1b5eff64-9dd4-4dca-8748-13df43bfbfb4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Goodman", - "company": "Orthomedia", - "phone": "832-429-2920", - "email": "mia@orthomedia.com" - }, - { - "id": 7777, - "guid": "74e76eb9-4277-4c96-9bd8-08290f0bc8da", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace Fulton", - "company": "Keytheon", - "phone": "862-502-2051", - "email": "grace@keytheon.com" - }, - { - "id": 7778, - "guid": "616448a8-6808-4d03-92f9-644db4b2e6de", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Elizabeth Chapman", - "company": "Superscope", - "phone": "806-451-2077", - "email": "elizabeth@superscope.com" - }, - { - "id": 7779, - "guid": "76cfc710-440b-4fc1-bdc5-d5cb27e1bcc6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Vance", - "company": "Technogra", - "phone": "871-436-2402", - "email": "ashley@technogra.com" - }, - { - "id": 7780, - "guid": "964c3780-559c-45bc-ae70-f80ea50382b3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Carter", - "company": "Xeicon", - "phone": "843-412-3434", - "email": "jasmine@xeicon.com" - }, - { - "id": 7781, - "guid": "4ecc4d33-a7b5-4730-af4e-2584a6cabec9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Campbell", - "company": "eEyetanic", - "phone": "881-416-3852", - "email": "evelyn@eeyetanic.com" - }, - { - "id": 7782, - "guid": "644cc064-cf4e-4179-bb9a-588ea01b9621", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Stanley", - "company": "OpKeycomm", - "phone": "831-438-3758", - "email": "bailey@opkeycomm.com" - }, - { - "id": 7783, - "guid": "f24d886b-0c00-4c8a-9143-7843c2ab27d0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Croftoon", - "company": "Jamrola", - "phone": "804-545-2144", - "email": "mya@jamrola.com" - }, - { - "id": 7784, - "guid": "a1e7d4e8-06e9-4ad3-bd20-a9ad2a67282c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Watson", - "company": "Aprama", - "phone": "870-558-2851", - "email": "lily@aprama.com" - }, - { - "id": 7785, - "guid": "730982de-c21a-431d-89dc-c72774af57b5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Nelson", - "company": "Transtouch", - "phone": "833-504-2214", - "email": "zoe@transtouch.com" - }, - { - "id": 7786, - "guid": "eac580e3-ad7e-483c-8e0b-9ff962588557", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Otis", - "company": "Superscope", - "phone": "844-429-2309", - "email": "arianna@superscope.com" - }, - { - "id": 7787, - "guid": "9800a1ee-4181-471e-a0f6-18b433094491", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hannah Bush", - "company": "Safeagra", - "phone": "806-561-3764", - "email": "hannah@safeagra.com" - }, - { - "id": 7788, - "guid": "6022383b-768d-4b39-9f81-e8bff5de4565", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Hardman", - "company": "Robotomic", - "phone": "886-498-2718", - "email": "maria@robotomic.com" - }, - { - "id": 7789, - "guid": "a43099a7-f6ad-4d54-a40c-7b1cd10f16a2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Nelson", - "company": "Titanigraf", - "phone": "828-473-2176", - "email": "layla@titanigraf.com" - }, - { - "id": 7790, - "guid": "a74700c7-d3b7-4e4c-b477-6cddd5f8a8ce", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Fulton", - "company": "Thermotomic", - "phone": "823-530-3578", - "email": "mya@thermotomic.com" - }, - { - "id": 7791, - "guid": "31fddb49-d4fc-4189-99a1-a4ec6541c787", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Ford", - "company": "Techtron", - "phone": "884-447-2454", - "email": "faith@techtron.com" - }, - { - "id": 7792, - "guid": "5cb16015-8e42-4eb7-b902-cb64b29f66b8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Gustman", - "company": "Interliant", - "phone": "817-525-3616", - "email": "caroline@interliant.com" - }, - { - "id": 7793, - "guid": "7e0ea543-bca1-41e1-be41-29ba93af1665", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline WifKinson", - "company": "Pacwest", - "phone": "834-537-2683", - "email": "madeline@pacwest.com" - }, - { - "id": 7794, - "guid": "61b3a9e7-fef6-44df-be10-b7d5e5120d29", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Haig", - "company": "Jamrola", - "phone": "868-481-2801", - "email": "jasmine@jamrola.com" - }, - { - "id": 7795, - "guid": "25637b6b-5735-4176-be1c-c1b6ecaeb533", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Oliver", - "company": "Pericenta", - "phone": "802-498-2979", - "email": "katherine@pericenta.com" - }, - { - "id": 7796, - "guid": "2010e30c-3820-4bd3-956a-12ac802958cf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Gill", - "company": "eSteganoergy", - "phone": "878-428-3566", - "email": "olivia@esteganoergy.com" - }, - { - "id": 7797, - "guid": "02585197-183c-4d4c-ade3-bff2b5255f51", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Wallace", - "company": "Netseco", - "phone": "862-499-3215", - "email": "addison@netseco.com" - }, - { - "id": 7798, - "guid": "7b0aea7f-edaa-4fce-acbe-b076c7095ad4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Carrington", - "company": "Infraique", - "phone": "805-539-3181", - "email": "anna@infraique.com" - }, - { - "id": 7799, - "guid": "b7ebb796-dece-48ce-b9d7-e42fa8abfb4c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Brickman", - "company": "Venconix", - "phone": "860-408-3801", - "email": "allison@venconix.com" - }, - { - "id": 7800, - "guid": "2cc78ee2-a32b-4964-87f7-6ff1e7e4cdda", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Carrington", - "company": "Inridium", - "phone": "851-503-2760", - "email": "riley@inridium.com" - }, - { - "id": 7801, - "guid": "5293c81a-6acf-48fc-83c5-b2989521cabe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Gibbs", - "company": "Ameritron", - "phone": "899-451-3146", - "email": "katelyn@ameritron.com" - }, - { - "id": 7802, - "guid": "d0d99214-e89f-408c-92c5-a957e6c9e52f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Gilmore", - "company": "Westmedia", - "phone": "871-525-3814", - "email": "mariah@westmedia.com" - }, - { - "id": 7803, - "guid": "320fe793-a447-4f54-bbf8-32417f3dcd40", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Gibbs", - "company": "Truetomic", - "phone": "871-447-2734", - "email": "payton@truetomic.com" - }, - { - "id": 7804, - "guid": "f1249fb8-4a8d-4241-811d-3f319871f5e8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Milton", - "company": "Airdyne", - "phone": "879-574-3921", - "email": "katherine@airdyne.com" - }, - { - "id": 7805, - "guid": "91759d8f-72be-402b-b54b-6f5640673089", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Turner", - "company": "Proline", - "phone": "869-456-2577", - "email": "khloe@proline.com" - }, - { - "id": 7806, - "guid": "4701816f-ce20-46c9-960f-3b0edbb839f6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Owen", - "company": "Videobanc", - "phone": "862-503-3318", - "email": "madeline@videobanc.com" - }, - { - "id": 7807, - "guid": "f02dd9a0-d7b6-4371-a8cb-0208cccb9705", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Fisher", - "company": "Steganoconiche", - "phone": "859-588-3246", - "email": "gabrielle@steganoconiche.com" - }, - { - "id": 7808, - "guid": "46de6dc8-baa0-4f7e-ab37-4facaa069d74", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Higgins", - "company": "Jamconik", - "phone": "846-441-2403", - "email": "madelyn@jamconik.com" - }, - { - "id": 7809, - "guid": "2e1c1907-de55-44c6-bcff-4a550529f03b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Thomson", - "company": "Ameritron", - "phone": "852-513-3036", - "email": "madison@ameritron.com" - }, - { - "id": 7810, - "guid": "d363aaec-1b96-4ffb-a490-b105c7acc05a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Bush", - "company": "Multitiqua", - "phone": "899-549-3368", - "email": "caroline@multitiqua.com" - }, - { - "id": 7811, - "guid": "cc58b91f-bc7d-40c2-a11d-90e64df607f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Hamphrey", - "company": "Systheon", - "phone": "853-498-2073", - "email": "eva@systheon.com" - }, - { - "id": 7812, - "guid": "3d50d714-703c-41cf-8e26-2eed66281c98", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Webster", - "company": "Celgra", - "phone": "800-478-3671", - "email": "maya@celgra.com" - }, - { - "id": 7813, - "guid": "76f10172-d861-4110-837a-0afaa763d8fb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bella Wainwright", - "company": "Openserve", - "phone": "869-409-3407", - "email": "bella@openserve.com" - }, - { - "id": 7814, - "guid": "1b33f0db-9c37-4344-84d5-478544f827c8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Eva Ogden", - "company": "Teratopia", - "phone": "872-581-3576", - "email": "eva@teratopia.com" - }, - { - "id": 7815, - "guid": "c342aaff-567e-4103-9495-93a1523aaacf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Wood", - "company": "Openserve", - "phone": "891-556-2047", - "email": "maya@openserve.com" - }, - { - "id": 7816, - "guid": "1921615d-ea89-45f1-b797-6c550e1f10ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Vaughan", - "company": "US Infratouch", - "phone": "887-422-2486", - "email": "katelyn@us infratouch.com" - }, - { - "id": 7817, - "guid": "1c4caf7c-ebc9-430b-ab66-bbd65daa47b1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Carroll", - "company": "Anagraph", - "phone": "877-419-2743", - "email": "charlotte@anagraph.com" - }, - { - "id": 7818, - "guid": "820f94e9-cc0f-4a4f-8c89-4be2d753babd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Thorndike", - "company": "Conrama", - "phone": "878-548-2219", - "email": "camila@conrama.com" - }, - { - "id": 7819, - "guid": "296d5370-98e8-4dd5-b7c2-1f853a33f91c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Miers", - "company": "Aprama", - "phone": "805-444-3604", - "email": "serenity@aprama.com" - }, - { - "id": 7820, - "guid": "4e8381b7-d56b-42df-a33e-55abbc79b815", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Nathan", - "company": "Xeicon", - "phone": "832-500-2200", - "email": "olivia@xeicon.com" - }, - { - "id": 7821, - "guid": "1d7f5b68-e6f3-4d83-b1dc-1f9fa9cb31df", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Timmons", - "company": "Ventanium", - "phone": "810-540-3484", - "email": "camila@ventanium.com" - }, - { - "id": 7822, - "guid": "aad75040-d60c-40bd-b5ce-5c4aeebd99d9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Campbell", - "company": "Nanobanc", - "phone": "841-579-2686", - "email": "payton@nanobanc.com" - }, - { - "id": 7823, - "guid": "99c65963-c7bd-478a-9a7f-938443b8ab14", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kimberly Charlson", - "company": "Tekcar", - "phone": "869-550-3413", - "email": "kimberly@tekcar.com" - }, - { - "id": 7824, - "guid": "56677b0c-e66c-47a7-b8dd-8695a66f65d5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Gardner", - "company": "Ameritron", - "phone": "844-533-2096", - "email": "mya@ameritron.com" - }, - { - "id": 7825, - "guid": "f0423844-f983-47b8-b389-96509562ae3d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Hancock", - "company": "Rapigrafix", - "phone": "823-590-2047", - "email": "genesis@rapigrafix.com" - }, - { - "id": 7826, - "guid": "0fa383f6-5e51-4583-b540-2e0962ad5309", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Samantha Carter", - "company": "eSteganoergy", - "phone": "822-449-3887", - "email": "samantha@esteganoergy.com" - }, - { - "id": 7827, - "guid": "180a1fce-44ba-4e78-9bca-54df0c4686e2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Nelson", - "company": "Jamrola", - "phone": "850-525-3518", - "email": "bailey@jamrola.com" - }, - { - "id": 7828, - "guid": "c4c4c237-1e9e-413c-a81f-0cf4981b1608", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Wayne", - "company": "Celgra", - "phone": "807-422-3490", - "email": "destiny@celgra.com" - }, - { - "id": 7829, - "guid": "000ac5dd-1619-487f-bf3a-6cf63987a786", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Vaughan", - "company": "Mescatron", - "phone": "877-445-2108", - "email": "bailey@mescatron.com" - }, - { - "id": 7830, - "guid": "3d776955-3398-4720-ad3c-51ea4b640b21", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Gardner", - "company": "Unologic", - "phone": "815-531-2419", - "email": "destiny@unologic.com" - }, - { - "id": 7831, - "guid": "d6a70abe-cb43-436b-82f9-cce55a890144", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Thornton", - "company": "Cryptotegrity", - "phone": "841-492-3923", - "email": "khloe@cryptotegrity.com" - }, - { - "id": 7832, - "guid": "6a9331b2-7164-4ddd-94d3-d20bbff0509f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Webster", - "company": "iEnland", - "phone": "829-545-2300", - "email": "katelyn@ienland.com" - }, - { - "id": 7833, - "guid": "3ae22c7a-cf61-46e4-996e-dc1e03c3a222", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Carter", - "company": "Allnet", - "phone": "876-493-2129", - "email": "gianna@allnet.com" - }, - { - "id": 7834, - "guid": "8d1ff690-a97a-480e-9257-6add6922f74e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ella Oswald", - "company": "RoboAerlogix", - "phone": "892-592-2107", - "email": "ella@roboaerlogix.com" - }, - { - "id": 7835, - "guid": "94a092a4-f97f-4e9c-abe8-32dad49f684f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Wesley", - "company": "Techtron", - "phone": "866-543-3835", - "email": "payton@techtron.com" - }, - { - "id": 7836, - "guid": "39391ce5-a641-4d00-a8a8-8280963789e5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Ogden", - "company": "Navivacs", - "phone": "831-537-3882", - "email": "nevaeh@navivacs.com" - }, - { - "id": 7837, - "guid": "38106332-b6f2-483e-ab08-15a2659b14d5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Chandter", - "company": "Aluco", - "phone": "881-572-2431", - "email": "zoey@aluco.com" - }, - { - "id": 7838, - "guid": "5e81fb91-8ff9-4158-be4d-315ff742b46b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aaliyah Hancock", - "company": "Allnet", - "phone": "806-586-2843", - "email": "aaliyah@allnet.com" - }, - { - "id": 7839, - "guid": "479f5e32-c9da-4727-8047-b3ef5c82f8bd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Ford", - "company": "Qualserve", - "phone": "815-453-2159", - "email": "maya@qualserve.com" - }, - { - "id": 7840, - "guid": "b200c8ca-7053-46d6-bcc7-d39856c217f9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Sherlock", - "company": "Inridium", - "phone": "817-550-3401", - "email": "arianna@inridium.com" - }, - { - "id": 7841, - "guid": "5248f5d8-dd48-4d9c-9da9-fc2d783f7f4e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Gilmore", - "company": "Hypervaco", - "phone": "833-547-2939", - "email": "katelyn@hypervaco.com" - }, - { - "id": 7842, - "guid": "6af599c9-44a9-47c8-be4c-eb2032937865", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Molligan", - "company": "Dynarama", - "phone": "836-534-3854", - "email": "audrey@dynarama.com" - }, - { - "id": 7843, - "guid": "70e33081-1baf-4b8c-adc9-b86138f4fd12", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Miln", - "company": "Superscope", - "phone": "873-513-3622", - "email": "avery@superscope.com" - }, - { - "id": 7844, - "guid": "cf5df45d-bd1a-4b8f-be31-550428ed305a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Hancock", - "company": "iEnland", - "phone": "814-499-3306", - "email": "ella@ienland.com" - }, - { - "id": 7845, - "guid": "5a976513-48bc-4638-ad9d-307f7b6895e2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Chandter", - "company": "iMedconik", - "phone": "806-488-3172", - "email": "taylor@imedconik.com" - }, - { - "id": 7846, - "guid": "bd28baaa-3aa5-47d7-9117-666174b277f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Croftoon", - "company": "OpKeycomm", - "phone": "888-556-2442", - "email": "mackenzie@opkeycomm.com" - }, - { - "id": 7847, - "guid": "46f8ca6c-fb90-4b42-834a-84edc26e5780", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Gilbert", - "company": "Unologic", - "phone": "843-583-3906", - "email": "isabella@unologic.com" - }, - { - "id": 7848, - "guid": "4bd4d0ac-42ec-4e7b-874f-60e118c6e347", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Abramson", - "company": "Mescatron", - "phone": "836-444-3529", - "email": "ashley@mescatron.com" - }, - { - "id": 7849, - "guid": "b1ae9f93-3563-4e8c-bbc6-e1736b463022", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Nathan", - "company": "Cryptotemplate", - "phone": "876-419-2317", - "email": "mariah@cryptotemplate.com" - }, - { - "id": 7850, - "guid": "40552ef8-c655-4f61-a8b7-f87048e4c06a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Gerald", - "company": "RoboAerlogix", - "phone": "832-432-3226", - "email": "kayla@roboaerlogix.com" - }, - { - "id": 7851, - "guid": "fe4bc964-7c7e-4fdf-a618-29c703242eff", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella White", - "company": "Mescaridic", - "phone": "812-476-2856", - "email": "ella@mescaridic.com" - }, - { - "id": 7852, - "guid": "87a1d246-5da1-4bbd-ae7e-dcf38177ada5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Hailey", - "company": "Robocomm", - "phone": "896-416-3682", - "email": "madeline@robocomm.com" - }, - { - "id": 7853, - "guid": "7c9dd8a7-6445-4e3e-9931-494e76f47a96", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Gill", - "company": "Westgate", - "phone": "894-429-2051", - "email": "madelyn@westgate.com" - }, - { - "id": 7854, - "guid": "cf766b19-36d8-414d-aab4-da573d96fa27", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Clapton", - "company": "Generola", - "phone": "879-482-3532", - "email": "alyssa@generola.com" - }, - { - "id": 7855, - "guid": "9b3b80a6-aea3-4d7e-85d5-ffa088b2dca5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooke Harrison", - "company": "Fibroserve", - "phone": "802-502-2594", - "email": "brooke@fibroserve.com" - }, - { - "id": 7856, - "guid": "94251e9d-8b20-4972-ad24-aadd48ba905e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Freeman", - "company": "SysVenamerica", - "phone": "864-495-2886", - "email": "emma@sysvenamerica.com" - }, - { - "id": 7857, - "guid": "13120f45-c198-4c00-aac9-a31c99f969a6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Webster", - "company": "Aprama", - "phone": "829-423-2868", - "email": "zoey@aprama.com" - }, - { - "id": 7858, - "guid": "66622c79-4dfc-4904-8da4-a27f7f9a0d7d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Calhoun", - "company": "Truegate", - "phone": "823-401-2112", - "email": "faith@truegate.com" - }, - { - "id": 7859, - "guid": "5c4df5ec-e0de-4a64-97d7-e16133d60b37", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Milton", - "company": "Fibrotouch", - "phone": "822-542-3656", - "email": "olivia@fibrotouch.com" - }, - { - "id": 7860, - "guid": "23a286cc-e082-4965-800a-246db0975e82", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Oldridge", - "company": "iMedconik", - "phone": "893-565-2072", - "email": "nevaeh@imedconik.com" - }, - { - "id": 7861, - "guid": "255e18ec-1d67-4dcf-8478-bb524faecbae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Otis", - "company": "Anagraph", - "phone": "887-457-3580", - "email": "vanessa@anagraph.com" - }, - { - "id": 7862, - "guid": "ff5b149d-e5f5-457e-910c-1b2dba9c6e1a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Nash", - "company": "Truegate", - "phone": "806-513-2816", - "email": "isabelle@truegate.com" - }, - { - "id": 7863, - "guid": "8ab27d89-11a6-4623-89e6-a3da436fd628", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Hancock", - "company": "Pericenta", - "phone": "818-573-2897", - "email": "alexis@pericenta.com" - }, - { - "id": 7864, - "guid": "f678ead3-8903-4a6e-8641-8bc9d5ba0bd8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Autumn Oswald", - "company": "Jamconik", - "phone": "834-552-3254", - "email": "autumn@jamconik.com" - }, - { - "id": 7865, - "guid": "607bb6f6-f28a-4609-8870-e9d7af3f68b9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabrielle Crossman", - "company": "Xeicon", - "phone": "884-512-2758", - "email": "gabrielle@xeicon.com" - }, - { - "id": 7866, - "guid": "569d897f-2232-41ac-a0b9-d3d9501325f2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Wesley", - "company": "Tekcar", - "phone": "851-500-3502", - "email": "taylor@tekcar.com" - }, - { - "id": 7867, - "guid": "ae82d1b7-8927-4a38-944e-9245413e8a9a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Oswald", - "company": "Teraserv", - "phone": "886-567-3147", - "email": "kimberly@teraserv.com" - }, - { - "id": 7868, - "guid": "9cd01856-5964-4da9-87e7-ebee02b5b1ca", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Gibbs", - "company": "Pericenta", - "phone": "858-445-3647", - "email": "kylie@pericenta.com" - }, - { - "id": 7869, - "guid": "a39f96b2-8e75-4bc1-bc25-87ee00c9d03b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Chapman", - "company": "Quintegrity", - "phone": "890-590-2689", - "email": "andrea@quintegrity.com" - }, - { - "id": 7870, - "guid": "af59b34b-ffa7-4ec7-ae92-165ded19a963", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Galbraith", - "company": "Mescatron", - "phone": "813-428-3011", - "email": "vanessa@mescatron.com" - }, - { - "id": 7871, - "guid": "5ad6f84f-672f-42ed-b8e3-855d50ac550f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Murphy", - "company": "Xeicon", - "phone": "805-519-3374", - "email": "isabelle@xeicon.com" - }, - { - "id": 7872, - "guid": "a0ba3a81-2f94-47a7-b3c0-205a8de600fc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Morrison", - "company": "Venconix", - "phone": "850-517-2185", - "email": "trinity@venconix.com" - }, - { - "id": 7873, - "guid": "c0623b85-86b9-415f-bda7-10f833798e2b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Audrey Haig", - "company": "Unconix", - "phone": "833-526-2487", - "email": "audrey@unconix.com" - }, - { - "id": 7874, - "guid": "79ccdaf2-d1f3-46bc-9508-6b379e9aa3cb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Ogden", - "company": "Conrama", - "phone": "888-477-2527", - "email": "charlotte@conrama.com" - }, - { - "id": 7875, - "guid": "966d7dac-dcce-40c6-bccc-9e4bb2b3e6d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabrielle Smith", - "company": "Syssoft", - "phone": "810-483-2853", - "email": "gabrielle@syssoft.com" - }, - { - "id": 7876, - "guid": "1218614a-2754-4c83-82df-658f4e27f947", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Hodges", - "company": "Fibroserve", - "phone": "885-495-2424", - "email": "sophia@fibroserve.com" - }, - { - "id": 7877, - "guid": "a3b310ee-ff91-45fc-95ae-dd721bd16eb7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Goodman", - "company": "Techtron", - "phone": "814-403-2795", - "email": "bella@techtron.com" - }, - { - "id": 7878, - "guid": "57926fae-6090-454c-9979-5977eb69003a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Hodges", - "company": "Raylog", - "phone": "846-506-3236", - "email": "sofia@raylog.com" - }, - { - "id": 7879, - "guid": "19281393-08e2-41e6-a5d1-1bf4324c8345", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Day", - "company": "Robotemplate", - "phone": "875-507-2917", - "email": "autumn@robotemplate.com" - }, - { - "id": 7880, - "guid": "65c9c0cb-3866-4317-9c3f-c6d7e7e9bb3f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Day", - "company": "Syssoft", - "phone": "808-430-2356", - "email": "madison@syssoft.com" - }, - { - "id": 7881, - "guid": "c0de0e53-18a7-4045-a212-7807e3fef3f5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Otis", - "company": "US Infratouch", - "phone": "832-577-2434", - "email": "kimberly@us infratouch.com" - }, - { - "id": 7882, - "guid": "c512f148-e83c-498c-82dc-8ff6c7243f03", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Nathan", - "company": "Aprama", - "phone": "899-564-2411", - "email": "vanessa@aprama.com" - }, - { - "id": 7883, - "guid": "9e98366c-1ce9-4a61-ab8d-be008f822f58", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Goldman", - "company": "Multitiqua", - "phone": "898-571-3539", - "email": "amelia@multitiqua.com" - }, - { - "id": 7884, - "guid": "cf1307a9-aa3b-4feb-8606-92c0507c7e51", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Hamphrey", - "company": "RoboAerlogix", - "phone": "895-515-3554", - "email": "valeria@roboaerlogix.com" - }, - { - "id": 7885, - "guid": "1ee11dda-b1ab-45ce-b0f3-1d3712f73dae", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Walkman", - "company": "SysUSA", - "phone": "800-429-2756", - "email": "paige@sysusa.com" - }, - { - "id": 7886, - "guid": "789c21dc-92d9-482d-b306-f65979568085", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Nelson", - "company": "Unologic", - "phone": "884-460-2239", - "email": "isabella@unologic.com" - }, - { - "id": 7887, - "guid": "f6fd384b-6239-42c6-81c5-55f54468a00b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Oldridge", - "company": "Techtron", - "phone": "886-400-3899", - "email": "aaliyah@techtron.com" - }, - { - "id": 7888, - "guid": "d433153e-8efe-4f13-ac4e-8cf0511eafa5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Day", - "company": "eEyetanic", - "phone": "896-454-2958", - "email": "mackenzie@eeyetanic.com" - }, - { - "id": 7889, - "guid": "7fbfecad-ddbb-4275-b985-66a2e1879420", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Stanley", - "company": "Allphysiche", - "phone": "814-480-2699", - "email": "alexa@allphysiche.com" - }, - { - "id": 7890, - "guid": "06f9c194-8a78-4afa-9146-b0a2075c2497", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Goldman", - "company": "Rapigrafix", - "phone": "866-431-2232", - "email": "mya@rapigrafix.com" - }, - { - "id": 7891, - "guid": "53723b24-752c-4187-b7cb-f57617bb4393", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Youmans", - "company": "Aluco", - "phone": "820-446-3093", - "email": "julia@aluco.com" - }, - { - "id": 7892, - "guid": "361d09bc-9b26-40f4-b1b4-0cd3ec57a028", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Wainwright", - "company": "Systheon", - "phone": "835-441-2641", - "email": "autumn@systheon.com" - }, - { - "id": 7893, - "guid": "17ae6907-c6f7-4307-af56-57f366ec752d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Hoggarth", - "company": "Pacwest", - "phone": "880-472-3213", - "email": "rachel@pacwest.com" - }, - { - "id": 7894, - "guid": "bea9ba86-9cf7-46a1-aa92-c42f56651433", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Davidson", - "company": "Anaframe", - "phone": "810-550-2653", - "email": "bella@anaframe.com" - }, - { - "id": 7895, - "guid": "075f5b1c-6ab7-4659-9af8-5900c44f9b7b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Otis", - "company": "US Infratouch", - "phone": "831-412-3945", - "email": "kylie@us infratouch.com" - }, - { - "id": 7896, - "guid": "aefaf94f-ad32-42f7-b4e3-ce4d00ebd69c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Autumn Hodges", - "company": "Pericenta", - "phone": "832-545-2851", - "email": "autumn@pericenta.com" - }, - { - "id": 7897, - "guid": "467c6a17-a410-41ab-802d-1468209433ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Oldridge", - "company": "Inridium", - "phone": "829-465-2386", - "email": "kimberly@inridium.com" - }, - { - "id": 7898, - "guid": "7641dea0-8dd0-4deb-adbd-c1f9b4bca9af", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Gate", - "company": "Aluco", - "phone": "827-437-2786", - "email": "kylie@aluco.com" - }, - { - "id": 7899, - "guid": "4ea9822e-b55b-4e21-8b5c-2fb0fd6f3f67", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Hodges", - "company": "Rapigrafix", - "phone": "894-405-2930", - "email": "layla@rapigrafix.com" - }, - { - "id": 7900, - "guid": "13dfa9dd-768f-48b9-a87d-3e6637b70b6f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Calhoun", - "company": "Venconix", - "phone": "882-565-3675", - "email": "andrea@venconix.com" - }, - { - "id": 7901, - "guid": "7c18f36c-7379-465e-aa27-ef9b83a64d42", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Youmans", - "company": "Aluco", - "phone": "858-405-2318", - "email": "gianna@aluco.com" - }, - { - "id": 7902, - "guid": "ca2c0d34-6677-4e59-ad52-492b5afdffc3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Sherlock", - "company": "Jamrola", - "phone": "866-476-3053", - "email": "serenity@jamrola.com" - }, - { - "id": 7903, - "guid": "557392c8-bd79-4c66-ad1f-6e1236d72b11", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia Miller", - "company": "Qualserve", - "phone": "816-472-3249", - "email": "mia@qualserve.com" - }, - { - "id": 7904, - "guid": "97af2569-3db5-4108-a0ea-b7d72b95cf1c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Youmans", - "company": "Entcast", - "phone": "855-485-3344", - "email": "faith@entcast.com" - }, - { - "id": 7905, - "guid": "a0be07e3-87e1-4423-99e7-2814a3616091", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaylee Mercer", - "company": "Rapigrafix", - "phone": "812-435-3818", - "email": "kaylee@rapigrafix.com" - }, - { - "id": 7906, - "guid": "fba67414-4170-4155-af1e-77303e91640d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Goldman", - "company": "Westmedia", - "phone": "840-409-2617", - "email": "morgan@westmedia.com" - }, - { - "id": 7907, - "guid": "b55b1a6f-0542-474a-9057-fba3fb360bb5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Turner", - "company": "InfoAirway", - "phone": "893-569-3419", - "email": "addison@infoairway.com" - }, - { - "id": 7908, - "guid": "f1893369-0eb2-4de7-b0e3-1dc885c07373", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Hailey", - "company": "Idmax", - "phone": "854-567-2406", - "email": "kylie@idmax.com" - }, - { - "id": 7909, - "guid": "6253d31c-9e1c-4b52-9ace-78e8149c2ae5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Wesley", - "company": "Proline", - "phone": "834-522-2679", - "email": "abigail@proline.com" - }, - { - "id": 7910, - "guid": "bceba3d0-a5f6-45f6-892a-6b3e854fe9c0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Wainwright", - "company": "Teraserv", - "phone": "845-403-3070", - "email": "charlotte@teraserv.com" - }, - { - "id": 7911, - "guid": "99974ffb-df62-4d3d-af47-8f4e95319229", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Fisher", - "company": "Navivacs", - "phone": "882-403-2882", - "email": "sofia@navivacs.com" - }, - { - "id": 7912, - "guid": "4fcb2ac6-c106-415d-899d-157957b661d8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Warren", - "company": "RoboAerlogix", - "phone": "839-447-2564", - "email": "isabella@roboaerlogix.com" - }, - { - "id": 7913, - "guid": "a0a3a048-e649-460d-b3e5-35217360fa81", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Carroll", - "company": "eEyetanic", - "phone": "882-480-3602", - "email": "kaitlyn@eeyetanic.com" - }, - { - "id": 7914, - "guid": "2577a3d7-abbc-454e-a71c-75b30fc77454", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Creighton", - "company": "Inridium", - "phone": "825-462-3454", - "email": "rachel@inridium.com" - }, - { - "id": 7915, - "guid": "f55df275-c613-4a2d-b62d-4f0396c0371f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Timmons", - "company": "Mescatron", - "phone": "815-418-3202", - "email": "rachel@mescatron.com" - }, - { - "id": 7916, - "guid": "ed76a193-f18d-4c18-b703-18325e1d3f1f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Smith", - "company": "Unconix", - "phone": "887-428-3027", - "email": "nevaeh@unconix.com" - }, - { - "id": 7917, - "guid": "06fababc-ba20-4cdf-ba41-fefe10cca1c3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ariana Walkman", - "company": "Jamconik", - "phone": "875-487-3920", - "email": "ariana@jamconik.com" - }, - { - "id": 7918, - "guid": "b25a796d-beb5-4a14-a60f-eb525d8c61d4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Hawkins", - "company": "Venconix", - "phone": "898-548-3592", - "email": "melanie@venconix.com" - }, - { - "id": 7919, - "guid": "1e9847ef-02cd-4158-8e65-badf7aaa56f7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Bush", - "company": "Indisco", - "phone": "899-574-3601", - "email": "alyssa@indisco.com" - }, - { - "id": 7920, - "guid": "11343452-8914-482a-b986-63057d53073c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Adamson", - "company": "Westmedia", - "phone": "807-462-3902", - "email": "molly@westmedia.com" - }, - { - "id": 7921, - "guid": "9e90d0c7-0ab1-4830-915b-fedf637ec157", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Thorndike", - "company": "Textiqua", - "phone": "892-559-2874", - "email": "jasmine@textiqua.com" - }, - { - "id": 7922, - "guid": "294093ec-f136-40fa-a3d3-71d6446d3fe6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Cramer", - "company": "Idmax", - "phone": "889-479-3602", - "email": "makayla@idmax.com" - }, - { - "id": 7923, - "guid": "d47fc6ac-8dbe-43b6-861d-1e32ce6fcac1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Thornton", - "company": "Videobanc", - "phone": "822-477-2717", - "email": "lillian@videobanc.com" - }, - { - "id": 7924, - "guid": "6993206f-d345-48a0-96fc-a2fb773e3170", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Vance", - "company": "Superscope", - "phone": "890-555-3448", - "email": "grace@superscope.com" - }, - { - "id": 7925, - "guid": "6d7db331-8417-401f-873a-af81cdb7dc85", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabriella Thornton", - "company": "RoboAerlogix", - "phone": "866-466-2854", - "email": "gabriella@roboaerlogix.com" - }, - { - "id": 7926, - "guid": "d0e27d1f-de8f-4861-b380-b02e9cf07a6f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Waller", - "company": "Generola", - "phone": "895-492-2813", - "email": "maria@generola.com" - }, - { - "id": 7927, - "guid": "31debef8-d9e2-4b05-aab8-401b28c87ea0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke Winter", - "company": "Textiqua", - "phone": "839-545-2251", - "email": "brooke@textiqua.com" - }, - { - "id": 7928, - "guid": "883de06b-fc0f-4b5d-9e9b-dcaf8e1768ec", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Oliver", - "company": "iEnland", - "phone": "883-436-2777", - "email": "aaliyah@ienland.com" - }, - { - "id": 7929, - "guid": "1b964c67-e38b-4759-9f1a-3e3f1159df4a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mya Osborne", - "company": "Entcast", - "phone": "826-414-3774", - "email": "mya@entcast.com" - }, - { - "id": 7930, - "guid": "f2ca7df5-e116-47a7-8385-9dd9d5ce4f7a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabella Gill", - "company": "Robotemplate", - "phone": "885-402-2903", - "email": "isabella@robotemplate.com" - }, - { - "id": 7931, - "guid": "e7f3c404-6010-4a1f-b910-186b4057969c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Winter", - "company": "Fibrotopia", - "phone": "852-596-2234", - "email": "alexa@fibrotopia.com" - }, - { - "id": 7932, - "guid": "d430265c-acf1-44e0-ad20-c78481231eae", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Hardman", - "company": "OpKeycomm", - "phone": "864-474-3897", - "email": "gianna@opkeycomm.com" - }, - { - "id": 7933, - "guid": "1eb806e0-6266-4c13-9bac-cecb8a90b527", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Andrea Oldridge", - "company": "Textiqua", - "phone": "863-521-2145", - "email": "andrea@textiqua.com" - }, - { - "id": 7934, - "guid": "3c145c2e-5d37-48a6-8299-ee9fa1fb21f6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Watson", - "company": "Vencom", - "phone": "871-464-2708", - "email": "kimberly@vencom.com" - }, - { - "id": 7935, - "guid": "5e4d02cc-56dd-46f4-b598-098d0b631e5e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Thorndike", - "company": "Anagraph", - "phone": "828-477-3484", - "email": "khloe@anagraph.com" - }, - { - "id": 7936, - "guid": "4920c0f7-fdd6-4b1e-8a3a-fb7539538819", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Nash", - "company": "iQualcar", - "phone": "803-414-3948", - "email": "layla@iqualcar.com" - }, - { - "id": 7937, - "guid": "93e5cf2d-9f74-416e-9de6-4194677ee066", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mariah Hancock", - "company": "Quintegrity", - "phone": "846-591-2663", - "email": "mariah@quintegrity.com" - }, - { - "id": 7938, - "guid": "60672526-d5b0-495f-8800-aa14e38f96fb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Carter", - "company": "Celgra", - "phone": "851-568-3549", - "email": "mariah@celgra.com" - }, - { - "id": 7939, - "guid": "518af87e-6e57-477d-80f3-179d6b29aed4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Genesis Day", - "company": "Safeagra", - "phone": "835-409-3692", - "email": "genesis@safeagra.com" - }, - { - "id": 7940, - "guid": "a538ea46-ec10-45f5-b2d3-d4a0a224d8ad", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Gerald", - "company": "Technogra", - "phone": "803-497-3430", - "email": "grace@technogra.com" - }, - { - "id": 7941, - "guid": "0f761c88-2b3f-4a68-95f0-7b3da03ccfdc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Olivia Turner", - "company": "Interliant", - "phone": "818-565-3200", - "email": "olivia@interliant.com" - }, - { - "id": 7942, - "guid": "e6883815-c199-4852-9fe2-7f76e2047f97", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Daniels", - "company": "Polytheon", - "phone": "896-575-2586", - "email": "amelia@polytheon.com" - }, - { - "id": 7943, - "guid": "b04b0b9b-0bce-4025-a52e-126c46339990", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Trinity Goldman", - "company": "Titanirola", - "phone": "801-487-3250", - "email": "trinity@titanirola.com" - }, - { - "id": 7944, - "guid": "4d2d5c05-b474-4904-ae94-41c71ebb7474", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Trinity Chandter", - "company": "Sontopia", - "phone": "826-488-2851", - "email": "trinity@sontopia.com" - }, - { - "id": 7945, - "guid": "96a88972-dec5-448a-a81d-ab4ef97677e8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Gill", - "company": "Nanobanc", - "phone": "870-541-2493", - "email": "brooklyn@nanobanc.com" - }, - { - "id": 7946, - "guid": "8f043f54-ea92-4825-b183-2c89a94e05d1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Freeman", - "company": "Tekcar", - "phone": "860-472-2494", - "email": "melanie@tekcar.com" - }, - { - "id": 7947, - "guid": "de386055-77ee-4ac4-b9a4-f64a7f70747b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Goodman", - "company": "Fibrotouch", - "phone": "835-459-2671", - "email": "faith@fibrotouch.com" - }, - { - "id": 7948, - "guid": "045e5cad-7d62-4fc5-8037-1b1c51224436", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexis Hamphrey", - "company": "Textiqua", - "phone": "885-565-2480", - "email": "alexis@textiqua.com" - }, - { - "id": 7949, - "guid": "94a5b89c-e868-44b1-a2a5-acd863e8e512", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Clapton", - "company": "Safetrust", - "phone": "891-511-2244", - "email": "lauren@safetrust.com" - }, - { - "id": 7950, - "guid": "76cb8615-5e36-493f-a4a4-22a9fb452376", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Thomson", - "company": "RoboAerlogix", - "phone": "832-482-3145", - "email": "brooklyn@roboaerlogix.com" - }, - { - "id": 7951, - "guid": "57f4592d-c16a-4105-848e-8d92acf44b42", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Creighton", - "company": "eEyetanic", - "phone": "845-569-3344", - "email": "katherine@eeyetanic.com" - }, - { - "id": 7952, - "guid": "2850a9a5-7ee9-418f-bcfa-6c12564c3775", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Wesley", - "company": "InfoAirway", - "phone": "850-450-2791", - "email": "aaliyah@infoairway.com" - }, - { - "id": 7953, - "guid": "07411d04-6714-403b-b7c1-57475343db5c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Savannah Turner", - "company": "Compuamerica", - "phone": "886-586-2211", - "email": "savannah@compuamerica.com" - }, - { - "id": 7954, - "guid": "3da2185b-2097-431a-b2ea-42829737ed51", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Vance", - "company": "Truegate", - "phone": "844-513-2908", - "email": "kaitlyn@truegate.com" - }, - { - "id": 7955, - "guid": "f0716838-055d-4578-b939-cd6472406284", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Clapton", - "company": "Aprama", - "phone": "843-577-2807", - "email": "sydney@aprama.com" - }, - { - "id": 7956, - "guid": "ba024067-1b9a-4acc-8273-61fc0f945ebe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia Abramson", - "company": "Interliant", - "phone": "899-575-3257", - "email": "mia@interliant.com" - }, - { - "id": 7957, - "guid": "9485ac02-0372-4213-a4d0-f73fc771b481", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Milton", - "company": "Robocomm", - "phone": "809-501-2320", - "email": "leah@robocomm.com" - }, - { - "id": 7958, - "guid": "439a2039-f761-446b-a9ed-02a084da5d83", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Chapman", - "company": "iQualcar", - "phone": "813-401-2516", - "email": "morgan@iqualcar.com" - }, - { - "id": 7959, - "guid": "3e6ee003-1527-409c-8249-3b34a0aca1c6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Conors", - "company": "Robocomm", - "phone": "897-407-2688", - "email": "natalie@robocomm.com" - }, - { - "id": 7960, - "guid": "467733ba-1b6d-4734-ae64-f07226c4cc7d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Bush", - "company": "Superscope", - "phone": "888-435-2304", - "email": "genesis@superscope.com" - }, - { - "id": 7961, - "guid": "69a4ffcf-c633-4987-a770-56e035532f53", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooklyn Youmans", - "company": "Teratopia", - "phone": "844-447-2561", - "email": "brooklyn@teratopia.com" - }, - { - "id": 7962, - "guid": "346046b9-cef2-4588-a29b-0b647db0d652", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Warren", - "company": "Pericenta", - "phone": "847-561-2183", - "email": "khloe@pericenta.com" - }, - { - "id": 7963, - "guid": "16f5b8bd-83e4-41b7-bee7-737f5d6d795a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Riley Osborne", - "company": "Fibrotouch", - "phone": "848-551-2592", - "email": "riley@fibrotouch.com" - }, - { - "id": 7964, - "guid": "771eb827-ff13-4d00-ac4b-9644340557f9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Galbraith", - "company": "Celgra", - "phone": "884-432-3547", - "email": "kylie@celgra.com" - }, - { - "id": 7965, - "guid": "b6648827-7a1a-4a64-b0d3-3059faf783b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Brickman", - "company": "Jamconik", - "phone": "825-495-3101", - "email": "savannah@jamconik.com" - }, - { - "id": 7966, - "guid": "b2906a28-aa62-496a-9907-0656cab620d4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Youmans", - "company": "Venconix", - "phone": "872-400-3534", - "email": "addison@venconix.com" - }, - { - "id": 7967, - "guid": "e0c2ad4c-8bf9-4285-b37d-6ec5ab2648e8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley White", - "company": "Interliant", - "phone": "802-472-2091", - "email": "ashley@interliant.com" - }, - { - "id": 7968, - "guid": "95c64647-746f-44d6-a379-eecf7fd5c6c3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Thomson", - "company": "Interliant", - "phone": "836-402-3668", - "email": "bella@interliant.com" - }, - { - "id": 7969, - "guid": "cf26a463-dae7-43dd-9aef-86f81e4a3df2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Gardner", - "company": "Rapigrafix", - "phone": "801-420-3876", - "email": "katelyn@rapigrafix.com" - }, - { - "id": 7970, - "guid": "47f9fef8-ec84-48ed-a833-1d8af1adb8a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Crossman", - "company": "Entcast", - "phone": "853-494-2554", - "email": "savannah@entcast.com" - }, - { - "id": 7971, - "guid": "92194e25-f095-422d-afa7-39679a32457a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Gill", - "company": "Cryptotegrity", - "phone": "891-468-3585", - "email": "kaitlyn@cryptotegrity.com" - }, - { - "id": 7972, - "guid": "1a5349bd-4a8a-4849-99c3-17878582e9f4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Goodman", - "company": "Proline", - "phone": "886-561-2941", - "email": "kaitlyn@proline.com" - }, - { - "id": 7973, - "guid": "180b9f61-36ff-4ae2-a781-7b095591ecc3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Hancock", - "company": "Infragraph", - "phone": "823-543-3302", - "email": "hannah@infragraph.com" - }, - { - "id": 7974, - "guid": "59a76900-b0dc-4be3-84f9-33b33712af36", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Timmons", - "company": "Idmax", - "phone": "868-568-2444", - "email": "savannah@idmax.com" - }, - { - "id": 7975, - "guid": "4fb8e22a-b968-44a0-a7bb-312b95f62444", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabella Morrison", - "company": "Netsystems", - "phone": "893-479-2683", - "email": "isabella@netsystems.com" - }, - { - "id": 7976, - "guid": "8f5c0527-b970-4116-80d5-062f25925a7f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Hamphrey", - "company": "Technogra", - "phone": "869-401-3559", - "email": "jessica@technogra.com" - }, - { - "id": 7977, - "guid": "f49f17b7-85c9-4081-aea7-368b224f5def", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Turner", - "company": "iOptystix", - "phone": "812-574-3711", - "email": "emma@ioptystix.com" - }, - { - "id": 7978, - "guid": "c124f5fb-d484-4cc4-a5d1-26e21ddee89a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Cook", - "company": "Conotomics", - "phone": "816-410-3019", - "email": "genesis@conotomics.com" - }, - { - "id": 7979, - "guid": "a19820f9-c002-4290-bbb8-de98f443b334", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Gilbert", - "company": "Thermotomic", - "phone": "893-407-2063", - "email": "zoe@thermotomic.com" - }, - { - "id": 7980, - "guid": "9156a35b-a7cd-44c5-b140-4ccf4e3e51ef", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lily Nelson", - "company": "Superscope", - "phone": "839-489-2683", - "email": "lily@superscope.com" - }, - { - "id": 7981, - "guid": "d5008cc7-9977-4494-8302-445902c3ddb2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Galbraith", - "company": "Unologic", - "phone": "853-467-2833", - "email": "bella@unologic.com" - }, - { - "id": 7982, - "guid": "109d9d54-0f8f-40c8-9910-33ec1a1aebaa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Watson", - "company": "Robotemplate", - "phone": "837-519-3452", - "email": "morgan@robotemplate.com" - }, - { - "id": 7983, - "guid": "11d479d9-04b5-41a1-80f6-9847393db7ab", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Murphy", - "company": "Techtron", - "phone": "866-400-2817", - "email": "makayla@techtron.com" - }, - { - "id": 7984, - "guid": "67b512f5-ead6-40dc-a050-d0dc89776277", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Osborne", - "company": "InfoAirway", - "phone": "807-566-2852", - "email": "madeline@infoairway.com" - }, - { - "id": 7985, - "guid": "c13f5a59-a84e-4095-b9f0-81dc37fd8ac2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Youmans", - "company": "RoboAerlogix", - "phone": "882-432-2099", - "email": "angelina@roboaerlogix.com" - }, - { - "id": 7986, - "guid": "462ea9e0-1f70-4069-a625-d7c5ea3377d9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Gustman", - "company": "Qualserve", - "phone": "866-497-3960", - "email": "mariah@qualserve.com" - }, - { - "id": 7987, - "guid": "a2d032a9-b7f8-42fd-ab84-7c266f77eab7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Chesterton", - "company": "iMedconik", - "phone": "893-579-3715", - "email": "natalie@imedconik.com" - }, - { - "id": 7988, - "guid": "c65e7dc7-128d-42d7-8e32-1dd6d2553002", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Sherlock", - "company": "Ventanium", - "phone": "880-461-2495", - "email": "gabrielle@ventanium.com" - }, - { - "id": 7989, - "guid": "b345bacb-dc78-4643-835c-e0127e259283", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Hamphrey", - "company": "Superscope", - "phone": "857-427-2617", - "email": "anna@superscope.com" - }, - { - "id": 7990, - "guid": "2ca7fade-bae5-40c1-bfa5-ee150edabd4f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Gardner", - "company": "Entcast", - "phone": "814-586-2229", - "email": "samantha@entcast.com" - }, - { - "id": 7991, - "guid": "36e5b4ae-a5a1-4ae9-abc8-5f42e6f7933f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Gill", - "company": "iSkyvaco", - "phone": "800-441-3600", - "email": "aaliyah@iskyvaco.com" - }, - { - "id": 7992, - "guid": "5cbe12b6-7d2b-4cd2-b350-304e70d4616c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Payton Milton", - "company": "US Omnigraphik", - "phone": "868-470-2319", - "email": "payton@us omnigraphik.com" - }, - { - "id": 7993, - "guid": "44c2bd08-5a78-48c9-90d2-ec09b3d24220", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hannah Morrison", - "company": "Enlogia", - "phone": "853-596-3835", - "email": "hannah@enlogia.com" - }, - { - "id": 7994, - "guid": "b5a9218d-d522-4c18-ba65-c1d08bae3640", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Davidson", - "company": "Xeicon", - "phone": "883-539-3647", - "email": "mackenzie@xeicon.com" - }, - { - "id": 7995, - "guid": "94377570-a2a9-44f4-ae1b-fd5cbfe3843d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Young", - "company": "Celgra", - "phone": "822-413-2391", - "email": "lauren@celgra.com" - }, - { - "id": 7996, - "guid": "0f903117-583e-4e57-b6a3-7e4dcf54225d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Winter", - "company": "Hypervaco", - "phone": "833-453-2544", - "email": "amelia@hypervaco.com" - }, - { - "id": 7997, - "guid": "efe81c70-fc23-4208-847b-ba8baf48ea01", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Savannah Charlson", - "company": "Xeicon", - "phone": "850-519-3146", - "email": "savannah@xeicon.com" - }, - { - "id": 7998, - "guid": "6ae11d28-d3d3-4755-9f7b-6451e90bc8c7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Stanley", - "company": "Netseco", - "phone": "860-443-2367", - "email": "vanessa@netseco.com" - }, - { - "id": 7999, - "guid": "7427de9a-26c2-4763-8097-5c52fb6bd220", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Oswald", - "company": "RoboAerlogix", - "phone": "826-492-3045", - "email": "samantha@roboaerlogix.com" - }, - { - "id": 8000, - "guid": "38cd656d-6019-4d55-a071-b36b823c32ee", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Miers", - "company": "Anaframe", - "phone": "862-502-3923", - "email": "savannah@anaframe.com" - }, - { - "id": 8001, - "guid": "8f881e50-47ec-4c81-8c70-4d086c4d12fd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Miller", - "company": "Unconix", - "phone": "887-424-3361", - "email": "allison@unconix.com" - }, - { - "id": 8002, - "guid": "1662fddc-84b5-4b4e-8406-8cabb47f346b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Miln", - "company": "Pacwest", - "phone": "833-550-2271", - "email": "bailey@pacwest.com" - }, - { - "id": 8003, - "guid": "0667efa0-7a1b-437a-bb49-6476921b305a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Daniels", - "company": "Robotemplate", - "phone": "842-594-3970", - "email": "jocelyn@robotemplate.com" - }, - { - "id": 8004, - "guid": "89dbdbf6-ebd8-4b4d-9cab-594adf264ea2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Charlotte Carey", - "company": "Multitiqua", - "phone": "818-593-2767", - "email": "charlotte@multitiqua.com" - }, - { - "id": 8005, - "guid": "6d74f253-c0f0-4396-9b81-6a02503e8e10", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabella Sherlock", - "company": "Compuamerica", - "phone": "837-496-3542", - "email": "isabella@compuamerica.com" - }, - { - "id": 8006, - "guid": "b84f4074-7de9-4594-becc-e46900cf406f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Amelia Hancock", - "company": "Anaframe", - "phone": "801-444-2293", - "email": "amelia@anaframe.com" - }, - { - "id": 8007, - "guid": "ccf7c0ec-0b32-44d0-9131-b47932c50aec", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa White", - "company": "Unologic", - "phone": "813-481-2335", - "email": "alexa@unologic.com" - }, - { - "id": 8008, - "guid": "fdcf4a81-e0b0-46d8-a41d-228ca234d12b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Hancock", - "company": "Netsystems", - "phone": "894-483-2175", - "email": "hannah@netsystems.com" - }, - { - "id": 8009, - "guid": "17fb3320-b5f0-44e0-b75b-8cbc59296704", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maria White", - "company": "Techtron", - "phone": "813-501-2757", - "email": "maria@techtron.com" - }, - { - "id": 8010, - "guid": "b42d8569-1e30-4a3d-9bff-272a88ff04a6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Brown", - "company": "SysUSA", - "phone": "819-560-2391", - "email": "isabella@sysusa.com" - }, - { - "id": 8011, - "guid": "ac4976c7-bb31-4207-868c-e7c9c21b2a2e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Neal", - "company": "Airdyne", - "phone": "823-437-3129", - "email": "caroline@airdyne.com" - }, - { - "id": 8012, - "guid": "825d6d6e-28d9-4ec9-8a75-d241fedbc4ba", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Morrison", - "company": "Cryptotegrity", - "phone": "876-445-3838", - "email": "lauren@cryptotegrity.com" - }, - { - "id": 8013, - "guid": "b9264989-07f2-459c-8cda-1eea77742696", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Davidson", - "company": "iMedconik", - "phone": "834-425-3657", - "email": "khloe@imedconik.com" - }, - { - "id": 8014, - "guid": "0722e3a1-1b0a-44c8-801e-81406bef84e2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Fulton", - "company": "Multitiqua", - "phone": "818-422-2056", - "email": "arianna@multitiqua.com" - }, - { - "id": 8015, - "guid": "0fa83630-fea6-4acc-ae9b-538f02465e6d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Goldman", - "company": "Qualserve", - "phone": "806-456-3374", - "email": "gabrielle@qualserve.com" - }, - { - "id": 8016, - "guid": "920c2714-0e11-45bb-8f78-5d3c40bcb058", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Grace Molligan", - "company": "SysUSA", - "phone": "853-528-2724", - "email": "grace@sysusa.com" - }, - { - "id": 8017, - "guid": "b43c6240-f2dc-4680-b9ff-ff5d1a01fbde", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Miller", - "company": "RoboAerlogix", - "phone": "885-409-3227", - "email": "alexis@roboaerlogix.com" - }, - { - "id": 8018, - "guid": "9fa6625c-a6c0-44a6-b23f-86ee47f7b72d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Neal", - "company": "eEyetanic", - "phone": "805-504-2379", - "email": "allison@eeyetanic.com" - }, - { - "id": 8019, - "guid": "10292e2b-c3c2-4be7-8480-7882399c8ef9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Crossman", - "company": "Dynarama", - "phone": "873-462-3241", - "email": "morgan@dynarama.com" - }, - { - "id": 8020, - "guid": "5d1378d9-8930-4785-b458-1d00acebd543", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Freeman", - "company": "Conrama", - "phone": "803-460-2885", - "email": "madeline@conrama.com" - }, - { - "id": 8021, - "guid": "cdbb1e86-9fb5-4e47-8913-f873d7198b34", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Bush", - "company": "Westmedia", - "phone": "896-575-2501", - "email": "peyton@westmedia.com" - }, - { - "id": 8022, - "guid": "a8748546-662d-4b4c-82c1-b62988eb1827", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Miln", - "company": "Indisco", - "phone": "820-595-2397", - "email": "katelyn@indisco.com" - }, - { - "id": 8023, - "guid": "af69de02-ab84-4f80-8d48-c51e5ec3aff6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Wayne", - "company": "Technogra", - "phone": "825-456-3050", - "email": "olivia@technogra.com" - }, - { - "id": 8024, - "guid": "af30d902-32bf-4c7f-a783-e2ece3b5f296", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Webster", - "company": "Mescaridic", - "phone": "831-552-2498", - "email": "zoe@mescaridic.com" - }, - { - "id": 8025, - "guid": "6d217a9f-d203-49b2-9238-704ffcece62d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Hailey", - "company": "Teknoplexon", - "phone": "814-472-2047", - "email": "sophia@teknoplexon.com" - }, - { - "id": 8026, - "guid": "c54702e9-635d-4e30-ad76-c0861b68adaf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Thornton", - "company": "iSkyvaco", - "phone": "824-484-3316", - "email": "camila@iskyvaco.com" - }, - { - "id": 8027, - "guid": "4e246242-946b-4d78-9c0d-8feaf6b52fe4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Fisher", - "company": "Thermotomic", - "phone": "815-588-2498", - "email": "gianna@thermotomic.com" - }, - { - "id": 8028, - "guid": "73ef0cfe-5e7f-47fc-908f-88d8bbd1ea12", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Higgins", - "company": "Xeicon", - "phone": "862-558-3227", - "email": "bailey@xeicon.com" - }, - { - "id": 8029, - "guid": "a49ece04-d253-491a-abdf-14dc3863a122", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Webster", - "company": "Cryptotegrity", - "phone": "860-420-3914", - "email": "savannah@cryptotegrity.com" - }, - { - "id": 8030, - "guid": "7da3ff1a-3a3a-4904-b0b7-bed927384a69", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Smith", - "company": "Fibrotouch", - "phone": "853-452-2511", - "email": "mia@fibrotouch.com" - }, - { - "id": 8031, - "guid": "a4c50e38-6178-4af3-b997-fa9f7fbcf88f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Hoggarth", - "company": "Keytheon", - "phone": "800-541-3283", - "email": "serenity@keytheon.com" - }, - { - "id": 8032, - "guid": "39f8d33c-eccf-4a00-82c5-0ca3ee0bdcc0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Chapman", - "company": "Orthosoft", - "phone": "811-477-3673", - "email": "peyton@orthosoft.com" - }, - { - "id": 8033, - "guid": "8efbc334-9801-4205-bd02-222563356e1f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Bush", - "company": "Hypervaco", - "phone": "800-506-2219", - "email": "camila@hypervaco.com" - }, - { - "id": 8034, - "guid": "5eae949f-b8c1-41ff-8960-50b4bc422743", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Michaelson", - "company": "Mescaridic", - "phone": "837-430-3870", - "email": "chloe@mescaridic.com" - }, - { - "id": 8035, - "guid": "d6133730-e4a4-4235-8d19-e6783034e138", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jocelyn Ogden", - "company": "Tekcar", - "phone": "806-462-2299", - "email": "jocelyn@tekcar.com" - }, - { - "id": 8036, - "guid": "2ef84047-904d-420e-a1a2-d74412a36849", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Chandter", - "company": "Venconix", - "phone": "850-543-3740", - "email": "serenity@venconix.com" - }, - { - "id": 8037, - "guid": "d5803df8-83b3-4b7d-9092-6e5207628637", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Oldridge", - "company": "Multitiqua", - "phone": "851-574-2843", - "email": "katherine@multitiqua.com" - }, - { - "id": 8038, - "guid": "199a4f74-c565-4433-851b-aeaf48660fd9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Cook", - "company": "Steganoconiche", - "phone": "815-422-3809", - "email": "hailey@steganoconiche.com" - }, - { - "id": 8039, - "guid": "46a8025b-4a1e-40a1-b4d3-6bc7e8d73519", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Galbraith", - "company": "Anagraph", - "phone": "857-501-3965", - "email": "nevaeh@anagraph.com" - }, - { - "id": 8040, - "guid": "67ea179b-f834-403c-855f-08cb9df5a3b0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Olivia Thornton", - "company": "Cryptotemplate", - "phone": "863-423-2827", - "email": "olivia@cryptotemplate.com" - }, - { - "id": 8041, - "guid": "b2676b4f-d205-49e5-81e4-b12ebaa41455", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Crossman", - "company": "InfoAirway", - "phone": "891-548-3068", - "email": "gabrielle@infoairway.com" - }, - { - "id": 8042, - "guid": "581a9805-0a51-4a3d-b006-1fe35a5a3220", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Morrison", - "company": "Jamrola", - "phone": "834-520-2129", - "email": "gabrielle@jamrola.com" - }, - { - "id": 8043, - "guid": "6430500c-c1be-4d99-b917-c55f2fbbf479", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Creighton", - "company": "Nanobanc", - "phone": "825-531-2286", - "email": "madeline@nanobanc.com" - }, - { - "id": 8044, - "guid": "2cfc1153-2ddf-42cd-bc8a-ead85a4d8e3f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Genesis Hailey", - "company": "Thermotomic", - "phone": "825-474-3440", - "email": "genesis@thermotomic.com" - }, - { - "id": 8045, - "guid": "05dccc83-1edd-4802-b6c2-57d2219b199b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Wayne", - "company": "Allphysiche", - "phone": "899-465-3644", - "email": "vanessa@allphysiche.com" - }, - { - "id": 8046, - "guid": "e6d5ebca-03a7-4591-a1fe-6cda0f83daf2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Charlotte Cook", - "company": "Syssoft", - "phone": "871-431-2953", - "email": "charlotte@syssoft.com" - }, - { - "id": 8047, - "guid": "1381a9b8-b2db-4ed3-8464-9da0b01333f9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Osborne", - "company": "Robocomm", - "phone": "803-497-3717", - "email": "kaylee@robocomm.com" - }, - { - "id": 8048, - "guid": "3ee7609f-240e-40b3-bf71-9c9c9d4da6bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Wood", - "company": "Teraserv", - "phone": "816-410-3689", - "email": "sydney@teraserv.com" - }, - { - "id": 8049, - "guid": "d9d5c7c7-f24d-4d16-90cc-d9ad092a5273", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Clapton", - "company": "Conrama", - "phone": "835-593-3113", - "email": "nevaeh@conrama.com" - }, - { - "id": 8050, - "guid": "aff291c9-e4db-495c-9c71-88ebeb66c300", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Miers", - "company": "Vencom", - "phone": "880-410-2463", - "email": "katherine@vencom.com" - }, - { - "id": 8051, - "guid": "bf1816c2-3d72-4708-b24b-a6d5fbf73e51", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Murphy", - "company": "Aprama", - "phone": "855-450-3453", - "email": "vanessa@aprama.com" - }, - { - "id": 8052, - "guid": "8e7cb09e-a08f-4169-9f64-b8667510e318", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Adamson", - "company": "OpKeycomm", - "phone": "839-479-3140", - "email": "abigail@opkeycomm.com" - }, - { - "id": 8053, - "guid": "23d2eef4-55c8-4382-9d6f-59cf7d69891f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Winter", - "company": "iSkyvaco", - "phone": "847-512-2276", - "email": "isabella@iskyvaco.com" - }, - { - "id": 8054, - "guid": "f8485cce-18c1-4951-abe5-f27566f9b5e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Winter", - "company": "Orthomedia", - "phone": "889-440-3747", - "email": "addison@orthomedia.com" - }, - { - "id": 8055, - "guid": "a91eb5fd-debe-4e02-bc0f-f3b4a08cbdc4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Anna Chapman", - "company": "Infragraph", - "phone": "872-533-3468", - "email": "anna@infragraph.com" - }, - { - "id": 8056, - "guid": "3995bdb4-0189-4be4-bcfb-cc3b96a8c59e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Wesley", - "company": "Syssoft", - "phone": "897-548-3562", - "email": "allison@syssoft.com" - }, - { - "id": 8057, - "guid": "43f4505c-051c-4045-b3af-b275a95e0604", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Milton", - "company": "Titanigraf", - "phone": "842-521-3762", - "email": "maria@titanigraf.com" - }, - { - "id": 8058, - "guid": "385da824-6744-4cd5-8572-0fe16d245331", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Sheldon", - "company": "Conotomics", - "phone": "831-465-2416", - "email": "jasmine@conotomics.com" - }, - { - "id": 8059, - "guid": "5eba0ece-0244-4a19-a1e6-14a45f275b77", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Thomson", - "company": "Mescatron", - "phone": "821-588-2531", - "email": "makayla@mescatron.com" - }, - { - "id": 8060, - "guid": "e5a924db-0b4c-4fe6-843b-3cfeada3573e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Bush", - "company": "Aluco", - "phone": "892-477-3113", - "email": "kimberly@aluco.com" - }, - { - "id": 8061, - "guid": "4adbcdfa-7dfd-4b41-bb0d-02fe737992ee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Conors", - "company": "Compuamerica", - "phone": "812-415-3180", - "email": "emma@compuamerica.com" - }, - { - "id": 8062, - "guid": "03e39b65-543e-459c-bb14-15c1baac1da8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Hardman", - "company": "eSteganoergy", - "phone": "840-488-3033", - "email": "avery@esteganoergy.com" - }, - { - "id": 8063, - "guid": "f8db28ca-13f5-491e-aa0a-063f8767e926", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Oswald", - "company": "Compuamerica", - "phone": "864-531-3654", - "email": "audrey@compuamerica.com" - }, - { - "id": 8064, - "guid": "53bee8b6-f7cd-4bfe-9517-7a4df98d1e67", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Abramson", - "company": "Conotomics", - "phone": "899-405-2453", - "email": "sydney@conotomics.com" - }, - { - "id": 8065, - "guid": "7e12da42-c3bd-476f-af5e-020284f0d9d6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Chapman", - "company": "Systheon", - "phone": "800-552-3108", - "email": "hailey@systheon.com" - }, - { - "id": 8066, - "guid": "aa2a6c56-8ff2-474f-88cf-a12b704608e3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Gate", - "company": "Fibrotopia", - "phone": "813-580-3559", - "email": "aaliyah@fibrotopia.com" - }, - { - "id": 8067, - "guid": "e45867e4-f62f-4866-8f01-a5bbc43bedf2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Clapton", - "company": "Inridium", - "phone": "834-512-3941", - "email": "lillian@inridium.com" - }, - { - "id": 8068, - "guid": "56a58dc4-3b7f-450a-9976-23f4a46a6d2d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Gilmore", - "company": "Safetrust", - "phone": "851-486-3802", - "email": "kylie@safetrust.com" - }, - { - "id": 8069, - "guid": "1142467b-fbcf-4021-86a2-68d2aededab1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Chesterton", - "company": "Nanobanc", - "phone": "880-549-2384", - "email": "jasmine@nanobanc.com" - }, - { - "id": 8070, - "guid": "5b1bf81b-c07b-4a55-99ac-884f9b5d42d6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexa Gate", - "company": "Westtomik", - "phone": "884-407-3861", - "email": "alexa@westtomik.com" - }, - { - "id": 8071, - "guid": "7aea7b2b-6cb3-4cf7-9e5b-dd54c862ba01", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooklyn Calhoun", - "company": "eEyetanic", - "phone": "888-411-2379", - "email": "brooklyn@eeyetanic.com" - }, - { - "id": 8072, - "guid": "c99e55e9-714c-4b11-98a8-615792fe262e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Owen", - "company": "Celgra", - "phone": "812-402-2151", - "email": "kimberly@celgra.com" - }, - { - "id": 8073, - "guid": "74d30991-53b8-4cbf-9932-9b8fd9cf9a4a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Fulton", - "company": "Westgate", - "phone": "878-528-2408", - "email": "claire@westgate.com" - }, - { - "id": 8074, - "guid": "4ace3aac-b5e9-4298-8f0b-eb1feb098164", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Neal", - "company": "eEyetanic", - "phone": "895-599-3446", - "email": "peyton@eeyetanic.com" - }, - { - "id": 8075, - "guid": "87676675-2b64-47fb-ab47-69502dac06f5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lily Carter", - "company": "Fibrotouch", - "phone": "813-494-2390", - "email": "lily@fibrotouch.com" - }, - { - "id": 8076, - "guid": "9c626cbd-fa0c-455d-ae73-b260b23eb16e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Nash", - "company": "iOptystix", - "phone": "838-577-3454", - "email": "caroline@ioptystix.com" - }, - { - "id": 8077, - "guid": "69ed7833-c729-406f-bd52-fea6f5690d3b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Vance", - "company": "Videobanc", - "phone": "816-581-3983", - "email": "gianna@videobanc.com" - }, - { - "id": 8078, - "guid": "936baafa-3c11-4ab9-96a4-5f9bb6dfc24b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Ward", - "company": "Ventanium", - "phone": "865-451-3203", - "email": "valeria@ventanium.com" - }, - { - "id": 8079, - "guid": "f8c1dd91-c76f-4335-9bf8-bfea01f80ce6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Angelina Wesley", - "company": "Quintegrity", - "phone": "890-504-3884", - "email": "angelina@quintegrity.com" - }, - { - "id": 8080, - "guid": "87954b80-37e3-42e1-8029-3f63b3e2c139", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Hoggarth", - "company": "Dynarama", - "phone": "829-553-2271", - "email": "anna@dynarama.com" - }, - { - "id": 8081, - "guid": "479d822f-0367-4075-b3a8-47a114d4dd85", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Hawkins", - "company": "Proline", - "phone": "833-515-3812", - "email": "alyssa@proline.com" - }, - { - "id": 8082, - "guid": "25964503-cb04-4be0-9503-b2727699acbb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Walkman", - "company": "Conotomics", - "phone": "852-436-3792", - "email": "katelyn@conotomics.com" - }, - { - "id": 8083, - "guid": "b560a379-def4-4ae8-b2d1-542e87d042d0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabriella Oswald", - "company": "iQualcar", - "phone": "852-450-3447", - "email": "gabriella@iqualcar.com" - }, - { - "id": 8084, - "guid": "c63fca5c-a773-4dad-b049-faec425adddc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Andrea Gate", - "company": "Idmax", - "phone": "805-544-2389", - "email": "andrea@idmax.com" - }, - { - "id": 8085, - "guid": "bc1bb7b5-2d79-498b-82c8-9e421057052c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sarah Thorndike", - "company": "Sontopia", - "phone": "831-419-3947", - "email": "sarah@sontopia.com" - }, - { - "id": 8086, - "guid": "ef126cec-e037-40fd-b9bf-5e1013369cad", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Gilbert", - "company": "Fibrotouch", - "phone": "862-463-3250", - "email": "molly@fibrotouch.com" - }, - { - "id": 8087, - "guid": "03719441-b96b-4120-a403-354a78337b90", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Winter", - "company": "Fibrotopia", - "phone": "891-460-2412", - "email": "layla@fibrotopia.com" - }, - { - "id": 8088, - "guid": "272665cb-96c7-43df-a9b9-d8fb4a0e31da", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Osborne", - "company": "Cryptotegrity", - "phone": "806-472-2366", - "email": "brooklyn@cryptotegrity.com" - }, - { - "id": 8089, - "guid": "f5b4a1cb-fdc4-4ff3-be52-6e4ff7eee78f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Paige Wood", - "company": "Syssoft", - "phone": "817-406-2374", - "email": "paige@syssoft.com" - }, - { - "id": 8090, - "guid": "2d187814-68b3-42af-8a44-9dfc3c667f75", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Audrey Warren", - "company": "Jamconik", - "phone": "840-545-2221", - "email": "audrey@jamconik.com" - }, - { - "id": 8091, - "guid": "355ff6db-dda1-41fb-ab13-9a1ac066ec7d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Oldman", - "company": "Truetomic", - "phone": "858-538-2645", - "email": "serenity@truetomic.com" - }, - { - "id": 8092, - "guid": "f9dee953-bcf7-4c52-9d75-4fb36e4a56d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Hoggarth", - "company": "Quintegrity", - "phone": "895-497-3079", - "email": "riley@quintegrity.com" - }, - { - "id": 8093, - "guid": "469798da-22ee-42c4-96ea-e9b98ac98f87", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Nelson", - "company": "Orthosoft", - "phone": "851-509-2033", - "email": "layla@orthosoft.com" - }, - { - "id": 8094, - "guid": "8b347c31-3506-4b80-bd71-0d4b5d419023", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Gilmore", - "company": "Netsystems", - "phone": "813-537-2575", - "email": "camila@netsystems.com" - }, - { - "id": 8095, - "guid": "8a477c28-f24f-4d5f-9627-2457974f4848", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Warren", - "company": "Keytheon", - "phone": "896-575-2567", - "email": "victoria@keytheon.com" - }, - { - "id": 8096, - "guid": "e86ede52-5f00-46e2-a71d-1609e0adfa30", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Owen", - "company": "Robotemplate", - "phone": "837-591-2813", - "email": "abigail@robotemplate.com" - }, - { - "id": 8097, - "guid": "66ec5f5c-e07c-4749-9a1c-1687b5276cd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Otis", - "company": "Allnet", - "phone": "882-571-3199", - "email": "emma@allnet.com" - }, - { - "id": 8098, - "guid": "7b93a1b6-bee6-4df0-8b0d-a5df4a05fd6a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Vance", - "company": "Ameritron", - "phone": "882-463-3665", - "email": "alexandra@ameritron.com" - }, - { - "id": 8099, - "guid": "6ba8aacf-db1d-447e-9dd4-6a41a57b8469", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Oldman", - "company": "Dynarama", - "phone": "892-490-3193", - "email": "emma@dynarama.com" - }, - { - "id": 8100, - "guid": "28681f33-f2bc-41c1-935f-f46e53ea2b58", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Carroll", - "company": "Unconix", - "phone": "889-415-3375", - "email": "lillian@unconix.com" - }, - { - "id": 8101, - "guid": "1ccfc931-aabd-453c-bc8d-b99d6587267a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Ogden", - "company": "Syssoft", - "phone": "825-427-2927", - "email": "grace@syssoft.com" - }, - { - "id": 8102, - "guid": "fb23bb26-6a8c-4351-9afd-87e7e0ce787f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Neal", - "company": "Idmax", - "phone": "820-576-2481", - "email": "natalie@idmax.com" - }, - { - "id": 8103, - "guid": "34cc0905-8fb0-446e-845d-4eea0d5bd0fe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Ogden", - "company": "Teratopia", - "phone": "866-465-2259", - "email": "audrey@teratopia.com" - }, - { - "id": 8104, - "guid": "128bb517-416e-4068-aef5-87dd43c1cca7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sofia Osborne", - "company": "Multitiqua", - "phone": "825-419-2583", - "email": "sofia@multitiqua.com" - }, - { - "id": 8105, - "guid": "93221e9c-b86d-4cf4-8f34-07d8f2e73380", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley Michaelson", - "company": "SysVenamerica", - "phone": "830-476-3219", - "email": "ashley@sysvenamerica.com" - }, - { - "id": 8106, - "guid": "79d6ac36-fbf1-4ede-9b43-d0f8347138cb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Avery Nathan", - "company": "Fibrotopia", - "phone": "828-571-3764", - "email": "avery@fibrotopia.com" - }, - { - "id": 8107, - "guid": "a3d6f939-7ccb-49c6-9e0b-989c59b4d93d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mya Campbell", - "company": "Technogra", - "phone": "857-491-3850", - "email": "mya@technogra.com" - }, - { - "id": 8108, - "guid": "27c8a0ca-9d30-41fc-9ebc-37a39309846b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Wesley", - "company": "iSkyvaco", - "phone": "890-409-3580", - "email": "elizabeth@iskyvaco.com" - }, - { - "id": 8109, - "guid": "f13e8637-4c4a-421b-841a-7a63c47d94ca", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Oswald", - "company": "Compuamerica", - "phone": "852-502-3350", - "email": "bailey@compuamerica.com" - }, - { - "id": 8110, - "guid": "0e8ec181-c0e8-4a3c-9a06-5f5864a02caf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Gerald", - "company": "iEnland", - "phone": "859-441-3125", - "email": "melanie@ienland.com" - }, - { - "id": 8111, - "guid": "1346d4de-5ca1-4458-ae20-6bda3f0f09fb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Chesterton", - "company": "Thermotomic", - "phone": "885-437-3415", - "email": "anna@thermotomic.com" - }, - { - "id": 8112, - "guid": "52216d56-c8ab-42f6-ab31-16d5b5d33450", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny Smith", - "company": "Thermotomic", - "phone": "898-402-2276", - "email": "destiny@thermotomic.com" - }, - { - "id": 8113, - "guid": "08b848c4-3961-4a6d-b67e-2f5948403d3a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Hawkins", - "company": "Infraique", - "phone": "850-568-2671", - "email": "maria@infraique.com" - }, - { - "id": 8114, - "guid": "2cdbba1a-e4b7-4d96-91f2-c37da59ea93a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Higgins", - "company": "Orthomedia", - "phone": "859-525-2365", - "email": "katherine@orthomedia.com" - }, - { - "id": 8115, - "guid": "2343fb7b-12f6-4aea-8ed5-5b753df0cb9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Cramer", - "company": "Teratopia", - "phone": "870-405-3117", - "email": "ava@teratopia.com" - }, - { - "id": 8116, - "guid": "2fd1d683-ac54-4bac-b407-d02f46cebe87", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Croftoon", - "company": "InfoAirway", - "phone": "862-598-2507", - "email": "mia@infoairway.com" - }, - { - "id": 8117, - "guid": "daea86ce-7195-4352-aaa1-ee502af071d1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Vance", - "company": "Teknoplexon", - "phone": "873-514-2033", - "email": "arianna@teknoplexon.com" - }, - { - "id": 8118, - "guid": "0c409d00-d2ea-4f69-aead-1eb18d257e15", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Gilson", - "company": "Cryptotemplate", - "phone": "825-444-2416", - "email": "grace@cryptotemplate.com" - }, - { - "id": 8119, - "guid": "bbbf90fc-f99a-4606-9ff0-83244d95caaf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Brown", - "company": "Celgra", - "phone": "815-580-2780", - "email": "lauren@celgra.com" - }, - { - "id": 8120, - "guid": "82579d69-a673-4388-bd8b-cc8cda286eda", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Morrison", - "company": "Robotemplate", - "phone": "836-429-3581", - "email": "paige@robotemplate.com" - }, - { - "id": 8121, - "guid": "be6a43ca-c8cc-4ea9-8631-4290dc655bfe", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaylee Wallace", - "company": "Thermotomic", - "phone": "882-451-3216", - "email": "kaylee@thermotomic.com" - }, - { - "id": 8122, - "guid": "c0d85695-3577-4809-8ba7-ccda9636ea2c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Goodman", - "company": "InfoAirway", - "phone": "879-573-2119", - "email": "brianna@infoairway.com" - }, - { - "id": 8123, - "guid": "2f8d91b8-545b-4353-864e-29852cb21349", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Bush", - "company": "Westtomik", - "phone": "852-527-3084", - "email": "bella@westtomik.com" - }, - { - "id": 8124, - "guid": "9bf76114-d797-4e95-868b-13c715338be8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Day", - "company": "Infragraph", - "phone": "849-514-3824", - "email": "genesis@infragraph.com" - }, - { - "id": 8125, - "guid": "f11f7fc7-1ea8-4c36-9115-f126d9755cd4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Youmans", - "company": "Teratopia", - "phone": "821-481-2061", - "email": "autumn@teratopia.com" - }, - { - "id": 8126, - "guid": "df436ab8-b9de-47a6-a419-fe322f2359b1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Ward", - "company": "iEnland", - "phone": "866-595-3641", - "email": "autumn@ienland.com" - }, - { - "id": 8127, - "guid": "38bb448e-34c7-4559-8c99-62d7b4265a8a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Wood", - "company": "InfoAirway", - "phone": "825-448-3611", - "email": "sophie@infoairway.com" - }, - { - "id": 8128, - "guid": "4380eddd-6a4c-42bb-8d1f-7e21f5c7ed07", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Brown", - "company": "Pacwest", - "phone": "840-478-2602", - "email": "hailey@pacwest.com" - }, - { - "id": 8129, - "guid": "9a0b5c3d-e952-44e8-bf8b-c802e1552712", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabrielle Davidson", - "company": "Thermotomic", - "phone": "803-485-2052", - "email": "gabrielle@thermotomic.com" - }, - { - "id": 8130, - "guid": "95dfcb92-7d7b-4d15-8631-f0b2bc5b26fc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Wallace", - "company": "US Omnigraphik", - "phone": "800-478-3031", - "email": "grace@us omnigraphik.com" - }, - { - "id": 8131, - "guid": "75d4f931-1be7-4ef6-87bf-ba301917c1a5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Nash", - "company": "Pericenta", - "phone": "864-497-3621", - "email": "faith@pericenta.com" - }, - { - "id": 8132, - "guid": "1b7f68d7-7d08-411c-97eb-ee5e709fe1ba", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Clapton", - "company": "Aluco", - "phone": "849-479-2431", - "email": "leah@aluco.com" - }, - { - "id": 8133, - "guid": "fee867e7-456a-42f4-966d-687f1fd07662", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emily Timmons", - "company": "Navivacs", - "phone": "835-412-2200", - "email": "emily@navivacs.com" - }, - { - "id": 8134, - "guid": "1f1aaf78-33e3-4d80-a3f5-63eed21ccdab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Gustman", - "company": "Airdyne", - "phone": "879-406-3859", - "email": "amelia@airdyne.com" - }, - { - "id": 8135, - "guid": "c8234010-64d7-45e6-a974-e08b5ced1367", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Olivia Oldman", - "company": "Interliant", - "phone": "816-556-2032", - "email": "olivia@interliant.com" - }, - { - "id": 8136, - "guid": "06d79441-e601-4aae-a8e4-78e6b548866d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Nash", - "company": "Unconix", - "phone": "876-544-3164", - "email": "mya@unconix.com" - }, - { - "id": 8137, - "guid": "db9554fa-8a8f-472a-bf51-d6e4790d23ab", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Sherlock", - "company": "Sontopia", - "phone": "852-522-3315", - "email": "kylie@sontopia.com" - }, - { - "id": 8138, - "guid": "f066184c-5c66-4f9c-b2dd-4b272d60fe51", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Turner", - "company": "Allnet", - "phone": "874-543-3810", - "email": "aubrey@allnet.com" - }, - { - "id": 8139, - "guid": "a8c6dd1b-6ae5-4433-8138-d833c6926932", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Croftoon", - "company": "Celgra", - "phone": "877-494-3990", - "email": "anna@celgra.com" - }, - { - "id": 8140, - "guid": "3e43751d-94a7-4593-a13e-e33232313743", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mya Sheldon", - "company": "Robotemplate", - "phone": "826-591-3112", - "email": "mya@robotemplate.com" - }, - { - "id": 8141, - "guid": "c711b00b-093c-49bf-bd19-2397d0a12c76", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Carey", - "company": "Jamrola", - "phone": "877-548-2090", - "email": "bella@jamrola.com" - }, - { - "id": 8142, - "guid": "de582b69-755b-4e50-842f-b4ece91c1923", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Youmans", - "company": "Anagraph", - "phone": "885-566-3293", - "email": "aaliyah@anagraph.com" - }, - { - "id": 8143, - "guid": "74cd5d46-99a8-4617-a9f7-3c9d7d047061", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Winter", - "company": "Superscope", - "phone": "868-579-3488", - "email": "claire@superscope.com" - }, - { - "id": 8144, - "guid": "279d15fa-af64-40bb-8dbe-523c26689dd8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaitlyn Osborne", - "company": "Xeicon", - "phone": "896-537-3810", - "email": "kaitlyn@xeicon.com" - }, - { - "id": 8145, - "guid": "75df740c-f033-4410-b553-2f1087090b39", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Davidson", - "company": "Celgra", - "phone": "825-562-2815", - "email": "melanie@celgra.com" - }, - { - "id": 8146, - "guid": "cd2df65b-963f-4903-a9fd-fede2eb26f0e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Oliver", - "company": "iOptystix", - "phone": "816-594-3388", - "email": "katherine@ioptystix.com" - }, - { - "id": 8147, - "guid": "4ded8597-ab59-4e45-b2db-12ba5c3b05e7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Hodges", - "company": "Inridium", - "phone": "840-506-3721", - "email": "taylor@inridium.com" - }, - { - "id": 8148, - "guid": "c9a7e56a-7e40-4dd4-856e-a3b9ca220b17", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Bush", - "company": "iSkyvaco", - "phone": "843-599-2133", - "email": "madison@iskyvaco.com" - }, - { - "id": 8149, - "guid": "951f9887-db00-4866-a6a4-69274bedd4bd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Morrison", - "company": "Superscope", - "phone": "866-423-3155", - "email": "valeria@superscope.com" - }, - { - "id": 8150, - "guid": "26f3900b-891a-4fcf-866e-9e764c07ded5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Nelson", - "company": "Syssoft", - "phone": "861-547-2363", - "email": "bella@syssoft.com" - }, - { - "id": 8151, - "guid": "b656e9a6-96cd-4056-ae8a-8dc23ce8b95e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Young", - "company": "Idmax", - "phone": "868-501-3219", - "email": "aaliyah@idmax.com" - }, - { - "id": 8152, - "guid": "9ce466b6-ee94-470a-99cd-aae0dce1e59f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Michaelson", - "company": "SysUSA", - "phone": "852-550-2611", - "email": "abigail@sysusa.com" - }, - { - "id": 8153, - "guid": "f3e5682e-04c5-430e-b931-17183817cc71", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Thorndike", - "company": "Netseco", - "phone": "813-547-2120", - "email": "claire@netseco.com" - }, - { - "id": 8154, - "guid": "d0150734-ec15-4ab8-a8a1-a85269e8a42c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Hamphrey", - "company": "Infraique", - "phone": "802-421-2166", - "email": "sofia@infraique.com" - }, - { - "id": 8155, - "guid": "153186c7-1787-4e70-8d49-4cadb4637819", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Khloe Goodman", - "company": "Qualserve", - "phone": "854-429-3044", - "email": "khloe@qualserve.com" - }, - { - "id": 8156, - "guid": "44511cd9-db1a-44d8-a198-b44854a05020", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Hardman", - "company": "Vencom", - "phone": "857-538-3624", - "email": "emma@vencom.com" - }, - { - "id": 8157, - "guid": "13db1bf4-4b0a-4a65-a3fd-3b552b34fcb4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Chandter", - "company": "Allnet", - "phone": "849-484-2601", - "email": "alexis@allnet.com" - }, - { - "id": 8158, - "guid": "a7832e72-3378-4c86-8be8-f090fc2664f7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Michaelson", - "company": "Vencom", - "phone": "892-480-2984", - "email": "valeria@vencom.com" - }, - { - "id": 8159, - "guid": "94cb5ca5-eea1-4552-aee8-58dcd1e6259b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Hailey", - "company": "Airdyne", - "phone": "826-542-2626", - "email": "peyton@airdyne.com" - }, - { - "id": 8160, - "guid": "aa55cdb4-dcb5-43b8-bb90-0da6d6f77c80", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Wesley", - "company": "Proline", - "phone": "830-501-2560", - "email": "mia@proline.com" - }, - { - "id": 8161, - "guid": "c64fc3d3-b4c6-4206-8360-766b73208a3d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabrielle Miller", - "company": "Infragraph", - "phone": "817-580-2689", - "email": "gabrielle@infragraph.com" - }, - { - "id": 8162, - "guid": "ae69a487-dd97-4fbf-b819-6b0e0b9dae52", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Carter", - "company": "iSkyvaco", - "phone": "802-449-3719", - "email": "gabrielle@iskyvaco.com" - }, - { - "id": 8163, - "guid": "3c99087c-21b9-449c-a3c7-01c78cbf60b8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Charlson", - "company": "Aluco", - "phone": "875-588-2959", - "email": "evelyn@aluco.com" - }, - { - "id": 8164, - "guid": "cee5628a-7f0f-49a7-ae6d-ec41e9f4cbe8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Gustman", - "company": "Cryptotegrity", - "phone": "874-552-2716", - "email": "olivia@cryptotegrity.com" - }, - { - "id": 8165, - "guid": "82519c6e-d2cc-456a-9286-26f442f24346", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Sheldon", - "company": "Fibroserve", - "phone": "853-460-2950", - "email": "lily@fibroserve.com" - }, - { - "id": 8166, - "guid": "24105968-fe43-40f8-b073-59a4099a0974", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Young", - "company": "Fibrotouch", - "phone": "892-502-3449", - "email": "katherine@fibrotouch.com" - }, - { - "id": 8167, - "guid": "2d686b07-16ca-4253-a7d8-f2753764503b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Thornton", - "company": "Titanigraf", - "phone": "863-443-3940", - "email": "angelina@titanigraf.com" - }, - { - "id": 8168, - "guid": "b46d9b07-3339-4dd0-aa57-9bbe82c6f2a8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Gilson", - "company": "Robocomm", - "phone": "862-487-2305", - "email": "sydney@robocomm.com" - }, - { - "id": 8169, - "guid": "39a66434-5b08-435e-ac6a-bb428d9e9891", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Taylor Cook", - "company": "eSteganoergy", - "phone": "879-450-2068", - "email": "taylor@esteganoergy.com" - }, - { - "id": 8170, - "guid": "93be2a42-92cb-4cad-bb6c-1774851a7cee", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Miller", - "company": "Robocomm", - "phone": "840-472-3973", - "email": "destiny@robocomm.com" - }, - { - "id": 8171, - "guid": "525b11f8-7d44-4018-828b-5a1d75a59723", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Murphy", - "company": "Nanobanc", - "phone": "878-457-2149", - "email": "aaliyah@nanobanc.com" - }, - { - "id": 8172, - "guid": "9e015b82-5f62-478a-a960-d8d0fdef1453", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Oldridge", - "company": "Venconix", - "phone": "880-445-3809", - "email": "angelina@venconix.com" - }, - { - "id": 8173, - "guid": "4f8065a9-0c4e-4b41-87dd-94c3268132ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Chapman", - "company": "Superscope", - "phone": "818-443-3146", - "email": "zoe@superscope.com" - }, - { - "id": 8174, - "guid": "7873d25b-3f00-488e-a1a2-2fdd20767f5c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Carrington", - "company": "Thermotomic", - "phone": "879-460-3316", - "email": "gabriella@thermotomic.com" - }, - { - "id": 8175, - "guid": "81ad4f14-ec89-4c32-bd79-176a56d5040f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Layla Wesley", - "company": "Westmedia", - "phone": "841-498-3649", - "email": "layla@westmedia.com" - }, - { - "id": 8176, - "guid": "abead14a-3cde-489d-b4df-08fb081ba4e7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Fulton", - "company": "Infraique", - "phone": "819-493-2415", - "email": "gianna@infraique.com" - }, - { - "id": 8177, - "guid": "3552ce13-be6e-41cd-8cbf-44c0cbe4cc34", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Nelson", - "company": "OpKeycomm", - "phone": "833-480-3624", - "email": "emma@opkeycomm.com" - }, - { - "id": 8178, - "guid": "e84cd07f-42cc-4c17-835b-2dde7690bd84", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah WifKinson", - "company": "Enlogia", - "phone": "803-581-3978", - "email": "aaliyah@enlogia.com" - }, - { - "id": 8179, - "guid": "130e458d-7c91-45fa-8520-c821a4a2206e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly WifKinson", - "company": "Textiqua", - "phone": "838-600-3671", - "email": "kimberly@textiqua.com" - }, - { - "id": 8180, - "guid": "d192c515-5715-46b1-b9ed-34838c698bc7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooklyn Molligan", - "company": "Infragraph", - "phone": "827-579-3044", - "email": "brooklyn@infragraph.com" - }, - { - "id": 8181, - "guid": "a1cecb9d-3d8b-4f9e-835a-dec1bf99e9ed", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Wallace", - "company": "Robotemplate", - "phone": "887-547-3428", - "email": "maya@robotemplate.com" - }, - { - "id": 8182, - "guid": "34d8e311-d2dd-40b1-afe2-d843067a7abf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Eva Harrison", - "company": "Steganoconiche", - "phone": "803-588-3218", - "email": "eva@steganoconiche.com" - }, - { - "id": 8183, - "guid": "41dec8ea-fae1-475d-95c2-6eb66550f8a9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Smith", - "company": "Titanirola", - "phone": "813-430-2504", - "email": "emma@titanirola.com" - }, - { - "id": 8184, - "guid": "a292a499-92ff-46b0-b812-3de6f10ad801", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Hoggarth", - "company": "Titanirola", - "phone": "872-455-3542", - "email": "gianna@titanirola.com" - }, - { - "id": 8185, - "guid": "ccff9319-9728-4421-afed-63b61f866159", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Conors", - "company": "Truetomic", - "phone": "806-460-2136", - "email": "addison@truetomic.com" - }, - { - "id": 8186, - "guid": "da1bc43b-4f51-4dcf-8dbe-c1c1661064b9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Harrison", - "company": "Tekcar", - "phone": "896-471-3375", - "email": "mia@tekcar.com" - }, - { - "id": 8187, - "guid": "4a027c77-82e2-4bb4-b503-6e00b536931e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ashley Hodges", - "company": "Conotomics", - "phone": "823-537-3319", - "email": "ashley@conotomics.com" - }, - { - "id": 8188, - "guid": "1a90d87c-29fd-4269-938d-38b7334bd0e2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Gustman", - "company": "Syssoft", - "phone": "899-424-2507", - "email": "hannah@syssoft.com" - }, - { - "id": 8189, - "guid": "6c9d722c-ec08-4513-8bb1-7056cf46ce55", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Oliver", - "company": "SysUSA", - "phone": "856-507-3773", - "email": "taylor@sysusa.com" - }, - { - "id": 8190, - "guid": "269d196a-fb71-44d4-b73b-fd5ed1a6d1a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Hoggarth", - "company": "Quintegrity", - "phone": "821-442-3799", - "email": "destiny@quintegrity.com" - }, - { - "id": 8191, - "guid": "c2ab1c0e-bea2-447d-a911-5ef2f0a58f69", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brianna Hodges", - "company": "Pacwest", - "phone": "816-531-3595", - "email": "brianna@pacwest.com" - }, - { - "id": 8192, - "guid": "3eb7eec9-acb1-4cc4-a2cc-df95aedef816", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Oliver", - "company": "Infraique", - "phone": "835-583-3233", - "email": "taylor@infraique.com" - }, - { - "id": 8193, - "guid": "9f9a584e-b3d8-4c3f-a302-7124fa893389", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Turner", - "company": "Vencom", - "phone": "870-555-2755", - "email": "abigail@vencom.com" - }, - { - "id": 8194, - "guid": "d3a0ac7f-8800-471d-a9e4-e76499a02260", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Gardner", - "company": "Enlogia", - "phone": "813-529-2815", - "email": "kylie@enlogia.com" - }, - { - "id": 8195, - "guid": "27a1721c-77c8-4f10-aa2f-4fcae1d6f07d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Vaughan", - "company": "Systheon", - "phone": "823-510-3424", - "email": "mariah@systheon.com" - }, - { - "id": 8196, - "guid": "7c149b97-187f-4947-a8fd-46db54ffc292", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Day", - "company": "Robocomm", - "phone": "864-513-2391", - "email": "payton@robocomm.com" - }, - { - "id": 8197, - "guid": "2dc33af0-db9d-4796-a3ee-140fd9ed322f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Winter", - "company": "OpKeycomm", - "phone": "805-447-2067", - "email": "taylor@opkeycomm.com" - }, - { - "id": 8198, - "guid": "1ad7e690-e982-4c37-8cc6-e82254f710c7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Gate", - "company": "Safetrust", - "phone": "823-446-3252", - "email": "serenity@safetrust.com" - }, - { - "id": 8199, - "guid": "5b7233f0-b7bd-4248-be03-e1f77b18946e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Goldman", - "company": "Steganoconiche", - "phone": "860-480-3578", - "email": "sophie@steganoconiche.com" - }, - { - "id": 8200, - "guid": "1ee30b48-6535-481c-beeb-14211e2c2618", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Carter", - "company": "Transtouch", - "phone": "886-577-3353", - "email": "gabriella@transtouch.com" - }, - { - "id": 8201, - "guid": "dc493559-8812-4a96-8206-867d178cf362", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Hodges", - "company": "Pericenta", - "phone": "827-504-2547", - "email": "serenity@pericenta.com" - }, - { - "id": 8202, - "guid": "8949d9c3-ed8c-4dc1-ad86-ea8876984249", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Smith", - "company": "OpKeycomm", - "phone": "808-475-3391", - "email": "morgan@opkeycomm.com" - }, - { - "id": 8203, - "guid": "1d0a8391-49a1-4860-a788-cb382cdfc7fd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Michaelson", - "company": "Anaframe", - "phone": "841-561-3798", - "email": "olivia@anaframe.com" - }, - { - "id": 8204, - "guid": "adf4b710-eb9e-4c6b-b9cd-cbf25b4a0f61", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Gate", - "company": "Venconix", - "phone": "823-517-3675", - "email": "molly@venconix.com" - }, - { - "id": 8205, - "guid": "1db44870-192a-4998-a796-97de5fa19321", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Winter", - "company": "Compuamerica", - "phone": "857-504-2641", - "email": "elizabeth@compuamerica.com" - }, - { - "id": 8206, - "guid": "fd2763de-f4d5-4ea2-babe-df6c79cde289", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Sherlock", - "company": "Rapigrafix", - "phone": "837-510-2735", - "email": "molly@rapigrafix.com" - }, - { - "id": 8207, - "guid": "5e43b27c-9e75-4956-af1e-8c09b4c08483", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Milton", - "company": "Thermotomic", - "phone": "810-459-2803", - "email": "isabella@thermotomic.com" - }, - { - "id": 8208, - "guid": "58005f49-7858-4ee6-b396-3d2b1a361821", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Hamphrey", - "company": "Textiqua", - "phone": "893-559-2378", - "email": "emma@textiqua.com" - }, - { - "id": 8209, - "guid": "74519a9c-0e30-477c-8c40-ddb99b97dc63", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Charlson", - "company": "Westtomik", - "phone": "880-480-3018", - "email": "peyton@westtomik.com" - }, - { - "id": 8210, - "guid": "603bbf8a-12de-4797-acd9-9765b607c320", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Wayne", - "company": "Videobanc", - "phone": "821-522-2388", - "email": "alexa@videobanc.com" - }, - { - "id": 8211, - "guid": "329bda42-8bcb-47b6-bce0-cb2ee1d95ac3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Clapton", - "company": "Allnet", - "phone": "859-404-2663", - "email": "mya@allnet.com" - }, - { - "id": 8212, - "guid": "c76a6e87-b83c-4131-b398-36a6e1cb4a12", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Croftoon", - "company": "Robotomic", - "phone": "838-509-2014", - "email": "brooklyn@robotomic.com" - }, - { - "id": 8213, - "guid": "97249e3f-dc86-4c62-ad01-c450b41e3f77", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Smith", - "company": "Titanigraf", - "phone": "845-518-2643", - "email": "taylor@titanigraf.com" - }, - { - "id": 8214, - "guid": "f618357a-3fd2-4fab-b842-96a3a8dfaabf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Ward", - "company": "Jamrola", - "phone": "873-512-3682", - "email": "melanie@jamrola.com" - }, - { - "id": 8215, - "guid": "4085b82a-c863-4c16-a38e-9b1264ad6d9f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Thorndike", - "company": "Allphysiche", - "phone": "846-518-2200", - "email": "lauren@allphysiche.com" - }, - { - "id": 8216, - "guid": "65c027f2-154e-4b0a-8afc-7c4079ec1c78", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Turner", - "company": "Vencom", - "phone": "898-447-3644", - "email": "chloe@vencom.com" - }, - { - "id": 8217, - "guid": "1970483a-dcfd-45c5-8ddb-f39cb1f6f756", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila Wallace", - "company": "Fibroserve", - "phone": "888-420-3991", - "email": "camila@fibroserve.com" - }, - { - "id": 8218, - "guid": "0b447ea3-b628-447b-8427-37df7e8bd1b3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Gardner", - "company": "Interliant", - "phone": "886-568-3752", - "email": "genesis@interliant.com" - }, - { - "id": 8219, - "guid": "10d24d92-ed3b-4019-919f-a5b49468f911", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Gilbert", - "company": "Conotomics", - "phone": "813-551-3137", - "email": "riley@conotomics.com" - }, - { - "id": 8220, - "guid": "09c0ccf7-704f-4c60-9483-33605f47c1e7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Brooks", - "company": "Airdyne", - "phone": "893-478-3494", - "email": "lauren@airdyne.com" - }, - { - "id": 8221, - "guid": "97dd10ee-f5cb-4d12-b5be-f530b43d643c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Gill", - "company": "Dynarama", - "phone": "851-552-3485", - "email": "maya@dynarama.com" - }, - { - "id": 8222, - "guid": "40f1f769-bb96-4179-b7c7-1cc46492f10f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Waller", - "company": "Robotomic", - "phone": "893-405-2960", - "email": "sophia@robotomic.com" - }, - { - "id": 8223, - "guid": "971db92b-d8e9-486a-badf-065f769f04b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Miller", - "company": "Safetrust", - "phone": "892-537-2190", - "email": "mya@safetrust.com" - }, - { - "id": 8224, - "guid": "5ee1c361-7c77-450f-9610-86bd188dc39b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Stanley", - "company": "Mescaridic", - "phone": "870-561-3803", - "email": "riley@mescaridic.com" - }, - { - "id": 8225, - "guid": "32e4a4a5-5ed7-455e-bc32-24876ff16af0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Chesterton", - "company": "Thermotomic", - "phone": "839-589-2256", - "email": "sophie@thermotomic.com" - }, - { - "id": 8226, - "guid": "1410cb1b-cbb7-431d-a881-964e71240584", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Freeman", - "company": "Jamrola", - "phone": "822-595-2760", - "email": "bella@jamrola.com" - }, - { - "id": 8227, - "guid": "58c611d6-f9db-4ae4-9db8-7e27e94573d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Warren", - "company": "Skydata", - "phone": "859-487-2064", - "email": "mariah@skydata.com" - }, - { - "id": 8228, - "guid": "304e29dc-a5d2-484f-96b1-4170d2e9e0fe", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Brickman", - "company": "Navivacs", - "phone": "856-583-2610", - "email": "victoria@navivacs.com" - }, - { - "id": 8229, - "guid": "61c6e659-9086-4591-9d84-0c498f449670", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Cramer", - "company": "Qualserve", - "phone": "858-598-3266", - "email": "trinity@qualserve.com" - }, - { - "id": 8230, - "guid": "d5308ea3-3872-492f-8c0e-7f5a8d390ff4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Nelson", - "company": "Fibrotopia", - "phone": "878-447-3961", - "email": "victoria@fibrotopia.com" - }, - { - "id": 8231, - "guid": "a7670f97-44d7-49da-afe0-18f051bed6f5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Otis", - "company": "eSteganoergy", - "phone": "852-406-2126", - "email": "sophia@esteganoergy.com" - }, - { - "id": 8232, - "guid": "87a4540e-3174-49a4-95f5-31a71b712b22", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Carter", - "company": "iSkyvaco", - "phone": "885-570-3380", - "email": "lauren@iskyvaco.com" - }, - { - "id": 8233, - "guid": "91224df4-023e-4cef-b94e-1935b6f8ec96", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Haig", - "company": "Thermotomic", - "phone": "860-516-2690", - "email": "morgan@thermotomic.com" - }, - { - "id": 8234, - "guid": "c091f652-8a75-4cfb-9943-23e9c947b5d1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Mercer", - "company": "Proline", - "phone": "896-592-2466", - "email": "mia@proline.com" - }, - { - "id": 8235, - "guid": "92a5aaba-69cc-435f-9a08-235768273607", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila WifKinson", - "company": "US Omnigraphik", - "phone": "887-405-2235", - "email": "camila@us omnigraphik.com" - }, - { - "id": 8236, - "guid": "97a4f630-7a05-4453-adec-29c94de488e9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Fisher", - "company": "Polytheon", - "phone": "834-508-2048", - "email": "hannah@polytheon.com" - }, - { - "id": 8237, - "guid": "946d0345-4b7f-45b5-83d0-d77bc223359e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Higgins", - "company": "Ventanium", - "phone": "813-590-2101", - "email": "lily@ventanium.com" - }, - { - "id": 8238, - "guid": "8ea71cdc-103d-430a-b21f-366fe051eea7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Fisher", - "company": "Tekcar", - "phone": "809-541-3811", - "email": "caroline@tekcar.com" - }, - { - "id": 8239, - "guid": "5223e194-39b6-417e-b82b-d699ce3beb7c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Crossman", - "company": "Orthomedia", - "phone": "834-544-2950", - "email": "makayla@orthomedia.com" - }, - { - "id": 8240, - "guid": "2a9b87fc-5c8f-406a-a8e5-e4e6513987ce", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Molligan", - "company": "Airdyne", - "phone": "820-410-3709", - "email": "audrey@airdyne.com" - }, - { - "id": 8241, - "guid": "cf5715cc-89eb-4943-b426-6b7f2f23b5f7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Nash", - "company": "Conrama", - "phone": "836-567-2808", - "email": "avery@conrama.com" - }, - { - "id": 8242, - "guid": "d64ad197-03e4-4157-994c-eb595e67df67", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Avery Goldman", - "company": "Steganoconiche", - "phone": "835-591-2419", - "email": "avery@steganoconiche.com" - }, - { - "id": 8243, - "guid": "c1a867a1-493f-49dc-9ed8-f78fe97380a0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Gate", - "company": "Syssoft", - "phone": "876-434-3382", - "email": "caroline@syssoft.com" - }, - { - "id": 8244, - "guid": "4590ee1e-179d-429d-8275-4f800e0e6a00", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Elizabeth Milton", - "company": "Safetrust", - "phone": "855-516-2403", - "email": "elizabeth@safetrust.com" - }, - { - "id": 8245, - "guid": "c92f9004-91d9-4d22-ae1e-3695b38e85a0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Owen", - "company": "Pericenta", - "phone": "838-474-2655", - "email": "layla@pericenta.com" - }, - { - "id": 8246, - "guid": "b7d563bc-a667-4ca1-b224-06260fec3e86", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sydney Charlson", - "company": "iEnland", - "phone": "849-488-2662", - "email": "sydney@ienland.com" - }, - { - "id": 8247, - "guid": "d8efb23d-6f44-4188-8e83-82f866ad3283", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Vance", - "company": "Gigaura", - "phone": "803-447-3980", - "email": "gabrielle@gigaura.com" - }, - { - "id": 8248, - "guid": "cfdcb18c-1287-4b23-b1d1-8be06cd07d68", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mackenzie Oliver", - "company": "Conrama", - "phone": "830-483-3137", - "email": "mackenzie@conrama.com" - }, - { - "id": 8249, - "guid": "3174309f-7025-494f-bca0-ef90cb6b7d1e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sydney Gilson", - "company": "Unconix", - "phone": "836-444-3984", - "email": "sydney@unconix.com" - }, - { - "id": 8250, - "guid": "5cfd6623-6511-4165-8baa-a841af5889fe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Hailey", - "company": "Teraserv", - "phone": "815-431-3273", - "email": "arianna@teraserv.com" - }, - { - "id": 8251, - "guid": "33fd6c0e-b98f-4de3-b7e6-7ba3a46d9baa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Miller", - "company": "Aprama", - "phone": "839-475-2189", - "email": "eva@aprama.com" - }, - { - "id": 8252, - "guid": "ca154d63-f8a5-45c7-b2d3-e83ee5e81001", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Hawkins", - "company": "Westtomik", - "phone": "837-530-2540", - "email": "alexa@westtomik.com" - }, - { - "id": 8253, - "guid": "95a45313-c51e-405a-8cd4-34844df7a0cc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Hailey", - "company": "Proline", - "phone": "887-514-3612", - "email": "zoey@proline.com" - }, - { - "id": 8254, - "guid": "385136f1-275a-4ba3-a48e-e9d7912d781b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Abramson", - "company": "Jamrola", - "phone": "836-499-3301", - "email": "olivia@jamrola.com" - }, - { - "id": 8255, - "guid": "c75b9625-0f8c-4261-944f-62c9a88ab5b5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Higgins", - "company": "Keytheon", - "phone": "871-432-3303", - "email": "allison@keytheon.com" - }, - { - "id": 8256, - "guid": "812a49e6-f46f-4075-a3ad-af72c0aabdef", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Gilson", - "company": "Westmedia", - "phone": "858-505-2381", - "email": "kylie@westmedia.com" - }, - { - "id": 8257, - "guid": "7f749422-7f95-450b-a38f-7b5eac3e84ef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Waller", - "company": "Titanirola", - "phone": "837-496-2989", - "email": "maya@titanirola.com" - }, - { - "id": 8258, - "guid": "669518fc-468d-48ad-9320-2e95e5f1b4bc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Molly Adamson", - "company": "Venconix", - "phone": "807-572-2070", - "email": "molly@venconix.com" - }, - { - "id": 8259, - "guid": "2250d16e-00c3-465b-9bd2-4b733975d54e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Smith", - "company": "Polytheon", - "phone": "822-431-3272", - "email": "melanie@polytheon.com" - }, - { - "id": 8260, - "guid": "c4437961-3d22-407c-bb92-091754cd65d9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Miln", - "company": "Orthomedia", - "phone": "814-457-2781", - "email": "valeria@orthomedia.com" - }, - { - "id": 8261, - "guid": "f514b451-ae71-474f-9d25-b752bfc21421", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Hoggarth", - "company": "Aluco", - "phone": "829-403-3855", - "email": "mia@aluco.com" - }, - { - "id": 8262, - "guid": "8c366e9d-6e48-4215-81a9-dc3d1fb6a6e5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Smith", - "company": "Ameritron", - "phone": "827-586-2158", - "email": "madeline@ameritron.com" - }, - { - "id": 8263, - "guid": "cd645cd0-963d-4826-811b-dd4f117f2f01", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Otis", - "company": "Celgra", - "phone": "899-504-3980", - "email": "alexis@celgra.com" - }, - { - "id": 8264, - "guid": "ba00c9c1-0e0e-4966-9e27-2fc15e5b0093", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Morrison", - "company": "eSteganoergy", - "phone": "862-402-3365", - "email": "kylie@esteganoergy.com" - }, - { - "id": 8265, - "guid": "30ff3e4f-d63a-4ec0-bdef-8cc01ad581a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Claire Calhoun", - "company": "Syssoft", - "phone": "872-494-2456", - "email": "claire@syssoft.com" - }, - { - "id": 8266, - "guid": "2a640d6f-b0a5-41ae-9748-b4de91e18e5a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Goldman", - "company": "Polytheon", - "phone": "842-576-3343", - "email": "lily@polytheon.com" - }, - { - "id": 8267, - "guid": "c58c2285-6005-418c-9579-564432de911e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Morgan Abramson", - "company": "Titanirola", - "phone": "837-418-3259", - "email": "morgan@titanirola.com" - }, - { - "id": 8268, - "guid": "3a4394ed-cdb3-4b85-94ab-f2800f813e54", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Gardner", - "company": "Thermotomic", - "phone": "803-403-3211", - "email": "lauren@thermotomic.com" - }, - { - "id": 8269, - "guid": "0bc6c01b-db5a-48ca-953c-83001f2d7d42", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Wood", - "company": "Turbomart", - "phone": "870-544-2690", - "email": "melanie@turbomart.com" - }, - { - "id": 8270, - "guid": "cd764012-ba99-49a3-a4cd-3123ae5e3cbf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Freeman", - "company": "Orthomedia", - "phone": "819-440-3403", - "email": "gabriella@orthomedia.com" - }, - { - "id": 8271, - "guid": "152db238-b317-4b45-acdd-44988c326a87", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Walkman", - "company": "Tekcar", - "phone": "841-484-3031", - "email": "melanie@tekcar.com" - }, - { - "id": 8272, - "guid": "fd069cb7-092e-4fb4-a5f9-7ab1cc0f3c2d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Carey", - "company": "Interliant", - "phone": "891-439-2985", - "email": "brianna@interliant.com" - }, - { - "id": 8273, - "guid": "09853e25-9197-40f7-820a-3f12d44952b2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Smith", - "company": "Ventanium", - "phone": "883-471-3306", - "email": "lillian@ventanium.com" - }, - { - "id": 8274, - "guid": "581e3c84-44f6-4dcc-ae89-46906c834bda", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Wallace", - "company": "US Omnigraphik", - "phone": "862-526-3431", - "email": "serenity@us omnigraphik.com" - }, - { - "id": 8275, - "guid": "4198fcc6-894a-42fb-b270-12cd3804eab0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Anna Gerald", - "company": "Airdyne", - "phone": "872-557-3718", - "email": "anna@airdyne.com" - }, - { - "id": 8276, - "guid": "73d96dd7-5565-4d6f-a2c2-b7684c4670b2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Chandter", - "company": "Ventanium", - "phone": "886-484-2525", - "email": "brooklyn@ventanium.com" - }, - { - "id": 8277, - "guid": "1066dff8-32a4-4e82-a2cd-f44c0f5e2944", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Hardman", - "company": "Orthomedia", - "phone": "848-483-2977", - "email": "samantha@orthomedia.com" - }, - { - "id": 8278, - "guid": "3458f457-d921-4dbd-96c0-67f3c6dc3dfb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Carey", - "company": "iQualcar", - "phone": "830-558-2203", - "email": "sarah@iqualcar.com" - }, - { - "id": 8279, - "guid": "bb684ddb-1e7a-4730-af76-05a9a33eb499", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madelyn Hardman", - "company": "eSteganoergy", - "phone": "832-482-2922", - "email": "madelyn@esteganoergy.com" - }, - { - "id": 8280, - "guid": "ab425991-7940-4379-a764-caf96a874580", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Conors", - "company": "SysUSA", - "phone": "817-552-3530", - "email": "evelyn@sysusa.com" - }, - { - "id": 8281, - "guid": "550887cf-3b54-4ddb-803d-e34326de84f4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Thornton", - "company": "Titanigraf", - "phone": "831-572-2028", - "email": "gabriella@titanigraf.com" - }, - { - "id": 8282, - "guid": "4eedc39d-5b52-4b40-9d5d-b3deb3a7786b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Oldridge", - "company": "Vencom", - "phone": "886-531-3825", - "email": "lillian@vencom.com" - }, - { - "id": 8283, - "guid": "825ba9ff-1bf2-43e8-bbd4-f2b6a6704e99", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Higgins", - "company": "Turbomart", - "phone": "868-600-2357", - "email": "kaitlyn@turbomart.com" - }, - { - "id": 8284, - "guid": "ff2da5b1-4576-4fbe-90f9-cf5be4a906bc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Brown", - "company": "Teratopia", - "phone": "898-510-2547", - "email": "faith@teratopia.com" - }, - { - "id": 8285, - "guid": "baebac28-e1c1-4567-a91e-5403e50a93d0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Chesterton", - "company": "Proline", - "phone": "889-454-3267", - "email": "sydney@proline.com" - }, - { - "id": 8286, - "guid": "6fb72b5b-66fe-49c1-9d15-f6fe3c3bf03e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Hawkins", - "company": "Tekcar", - "phone": "848-421-3092", - "email": "lily@tekcar.com" - }, - { - "id": 8287, - "guid": "55dd6703-22b1-446c-931b-70afb4e5980f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Harrison", - "company": "Tekcar", - "phone": "823-453-3764", - "email": "ashley@tekcar.com" - }, - { - "id": 8288, - "guid": "8609b6b5-7956-4015-88fb-5e17974c9800", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Freeman", - "company": "Syssoft", - "phone": "870-552-3762", - "email": "mya@syssoft.com" - }, - { - "id": 8289, - "guid": "aec8d166-76c1-43ed-93e4-e9d287fdd262", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ashley Neal", - "company": "Thermotomic", - "phone": "830-498-2430", - "email": "ashley@thermotomic.com" - }, - { - "id": 8290, - "guid": "491db45e-701c-4179-bd32-fe4b10a20277", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Thorndike", - "company": "Keytheon", - "phone": "865-566-3863", - "email": "sophie@keytheon.com" - }, - { - "id": 8291, - "guid": "b0853501-d57a-4dcb-8581-184f930db60f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Oldman", - "company": "Jamrola", - "phone": "860-531-3538", - "email": "makayla@jamrola.com" - }, - { - "id": 8292, - "guid": "09d7bc1d-9af5-41a7-bf66-6d03e0427954", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Oliver", - "company": "Inridium", - "phone": "842-546-3781", - "email": "kayla@inridium.com" - }, - { - "id": 8293, - "guid": "879e7b12-6724-4d11-8692-315ea105d5c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Goldman", - "company": "iQualcar", - "phone": "876-556-3962", - "email": "elizabeth@iqualcar.com" - }, - { - "id": 8294, - "guid": "735b1191-cefe-41f7-ba07-4ea2e7ad4132", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Daniels", - "company": "Genland", - "phone": "806-575-2611", - "email": "allison@genland.com" - }, - { - "id": 8295, - "guid": "8906bc47-0289-44e7-9d45-783c1571a632", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ariana Oliver", - "company": "Pacwest", - "phone": "890-489-2046", - "email": "ariana@pacwest.com" - }, - { - "id": 8296, - "guid": "517b6d4c-235a-4454-8ade-24c175f4dbc1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Carroll", - "company": "Infraique", - "phone": "830-484-2844", - "email": "peyton@infraique.com" - }, - { - "id": 8297, - "guid": "770bc7ad-8f86-45f4-ad4a-0863ae785169", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Camila Oldridge", - "company": "Techtron", - "phone": "842-407-2670", - "email": "camila@techtron.com" - }, - { - "id": 8298, - "guid": "b435d598-79a0-4108-97cc-2bb96365de4d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Davidson", - "company": "Netseco", - "phone": "838-420-2543", - "email": "autumn@netseco.com" - }, - { - "id": 8299, - "guid": "5a0c2d5b-47d6-4b54-b631-1f70db73f2db", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Ogden", - "company": "Cryptotegrity", - "phone": "871-545-3142", - "email": "peyton@cryptotegrity.com" - }, - { - "id": 8300, - "guid": "37c2776b-c301-46e6-9b31-40839f0400ca", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Trinity Carroll", - "company": "Safeagra", - "phone": "845-500-3679", - "email": "trinity@safeagra.com" - }, - { - "id": 8301, - "guid": "5eb87781-90f2-4dd6-a5c1-647307efcb52", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Carroll", - "company": "Orthomedia", - "phone": "832-468-2398", - "email": "julia@orthomedia.com" - }, - { - "id": 8302, - "guid": "472cd54f-dc7e-4b45-9622-6cfd7d46e8ae", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Davidson", - "company": "eEyetanic", - "phone": "843-439-2507", - "email": "eva@eeyetanic.com" - }, - { - "id": 8303, - "guid": "832c0728-fba9-4063-b002-a49ca38fa1e3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Chapman", - "company": "InfoAirway", - "phone": "811-408-3492", - "email": "chloe@infoairway.com" - }, - { - "id": 8304, - "guid": "178d9335-512e-4940-b49c-c269196d1d89", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Sherlock", - "company": "Xeicon", - "phone": "888-426-2242", - "email": "jessica@xeicon.com" - }, - { - "id": 8305, - "guid": "8cc48ec8-981d-439a-8714-162097e5a097", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Hawkins", - "company": "Netsystems", - "phone": "870-402-2162", - "email": "ava@netsystems.com" - }, - { - "id": 8306, - "guid": "521c21d1-e04e-40c2-9591-84755dfeddda", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Thorndike", - "company": "Nanobanc", - "phone": "894-502-2516", - "email": "gabrielle@nanobanc.com" - }, - { - "id": 8307, - "guid": "5121f28a-639a-4721-aad8-45d06810b0d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabelle Daniels", - "company": "Quintegrity", - "phone": "835-493-3116", - "email": "isabelle@quintegrity.com" - }, - { - "id": 8308, - "guid": "23e6a965-27c6-4d6d-90c4-46974779c0e2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Hoggarth", - "company": "Turbomart", - "phone": "883-464-2886", - "email": "madeline@turbomart.com" - }, - { - "id": 8309, - "guid": "5636e404-45a2-49a5-a18d-5baca429a8d0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Carrington", - "company": "Entcast", - "phone": "844-499-3792", - "email": "caroline@entcast.com" - }, - { - "id": 8310, - "guid": "1280f16c-890c-4a33-8b19-fa4f6a6a380b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Miller", - "company": "iSkyvaco", - "phone": "826-407-3520", - "email": "andrea@iskyvaco.com" - }, - { - "id": 8311, - "guid": "aa5a4fd5-4ee0-417e-81be-552f4adf1b3a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Croftoon", - "company": "Gigaura", - "phone": "898-468-2415", - "email": "trinity@gigaura.com" - }, - { - "id": 8312, - "guid": "0f4cd99b-66b1-44f1-9134-fa85920a1be2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sofia Miln", - "company": "Technogra", - "phone": "823-406-2880", - "email": "sofia@technogra.com" - }, - { - "id": 8313, - "guid": "e508494f-ee34-4b78-b57a-77b483a42f7e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Milton", - "company": "Titanirola", - "phone": "833-584-2155", - "email": "katherine@titanirola.com" - }, - { - "id": 8314, - "guid": "20bc9dc0-ad55-45f3-80ff-d5ed4ee91502", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Brickman", - "company": "Textiqua", - "phone": "808-521-2085", - "email": "savannah@textiqua.com" - }, - { - "id": 8315, - "guid": "b8c0dfbe-2c86-4c6d-978c-b6907099e344", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Wallace", - "company": "Keytheon", - "phone": "836-457-2541", - "email": "payton@keytheon.com" - }, - { - "id": 8316, - "guid": "880a47b4-4b4a-4f29-848b-13b5567db036", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Miers", - "company": "Safetrust", - "phone": "877-440-2909", - "email": "savannah@safetrust.com" - }, - { - "id": 8317, - "guid": "6aa57c8c-e08c-4a8e-8168-10f693fed1bb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Hamphrey", - "company": "US Omnigraphik", - "phone": "820-494-2883", - "email": "angelina@us omnigraphik.com" - }, - { - "id": 8318, - "guid": "f6545775-f7ea-48e2-91a3-ec15c2ae2c58", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Wayne", - "company": "Ameritron", - "phone": "808-465-3903", - "email": "ava@ameritron.com" - }, - { - "id": 8319, - "guid": "41a6976b-d33d-43c7-99f9-d710d8f8ffdc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Webster", - "company": "iOptystix", - "phone": "853-425-3170", - "email": "kaitlyn@ioptystix.com" - }, - { - "id": 8320, - "guid": "c7631fa4-1208-4058-ac59-004997ca720c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Thorndike", - "company": "Aprama", - "phone": "882-501-2889", - "email": "lauren@aprama.com" - }, - { - "id": 8321, - "guid": "9e923bbc-5386-43ad-8821-050f36b4dc55", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Hamphrey", - "company": "Syssoft", - "phone": "801-466-2853", - "email": "molly@syssoft.com" - }, - { - "id": 8322, - "guid": "69a233c3-3914-4b11-bc7a-cd9278731903", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Nelson", - "company": "Syssoft", - "phone": "855-598-3879", - "email": "sophia@syssoft.com" - }, - { - "id": 8323, - "guid": "47bdd5c9-28ab-4e73-9820-07a42e53e29a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe White", - "company": "Mescatron", - "phone": "822-401-3216", - "email": "zoe@mescatron.com" - }, - { - "id": 8324, - "guid": "d7e932a2-36d3-4090-a321-bd77d347c1eb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Taylor Cramer", - "company": "Mescatron", - "phone": "889-541-2592", - "email": "taylor@mescatron.com" - }, - { - "id": 8325, - "guid": "0ff5f9a3-fce1-4f69-a815-fa774d13ebb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Hardman", - "company": "Thermotomic", - "phone": "837-485-2000", - "email": "audrey@thermotomic.com" - }, - { - "id": 8326, - "guid": "ed74a878-65e0-4992-904f-6612b6b27c5a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Carroll", - "company": "Quintegrity", - "phone": "882-474-2912", - "email": "sophie@quintegrity.com" - }, - { - "id": 8327, - "guid": "9c426b08-b4f0-44a0-8ec5-598b4948ddec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Higgins", - "company": "Venconix", - "phone": "832-555-3262", - "email": "ella@venconix.com" - }, - { - "id": 8328, - "guid": "1b66c283-2d3c-4eaa-b4e8-4185545a2944", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Galbraith", - "company": "iSkyvaco", - "phone": "884-449-2173", - "email": "lily@iskyvaco.com" - }, - { - "id": 8329, - "guid": "9c616093-3209-473e-92fe-c7c3673bb702", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Hodges", - "company": "SysVenamerica", - "phone": "862-525-3957", - "email": "mia@sysvenamerica.com" - }, - { - "id": 8330, - "guid": "8d95f14f-dec8-44ba-b1a2-2c428a22d192", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Vaughan", - "company": "Interliant", - "phone": "871-400-3471", - "email": "peyton@interliant.com" - }, - { - "id": 8331, - "guid": "87b15e14-9f92-4861-8acd-8cd5980d39ff", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Waller", - "company": "Robotomic", - "phone": "869-529-2829", - "email": "mya@robotomic.com" - }, - { - "id": 8332, - "guid": "99ce1951-436c-431d-9461-f3f38a681b41", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Timmons", - "company": "Unconix", - "phone": "880-564-3312", - "email": "sophia@unconix.com" - }, - { - "id": 8333, - "guid": "77780412-7763-4c88-9d01-c7c10a10bfb2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Gibbs", - "company": "Conrama", - "phone": "817-579-2017", - "email": "aaliyah@conrama.com" - }, - { - "id": 8334, - "guid": "578c3a34-c970-4e45-92b4-fcb093f86d60", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Higgins", - "company": "Videobanc", - "phone": "847-458-3209", - "email": "makayla@videobanc.com" - }, - { - "id": 8335, - "guid": "9354420b-20b6-4b8b-9322-b361d35ad02f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Calhoun", - "company": "Xeicon", - "phone": "811-432-3237", - "email": "gabriella@xeicon.com" - }, - { - "id": 8336, - "guid": "9eab17d4-4b95-4642-b446-157ab361f5b7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Hamphrey", - "company": "Vencom", - "phone": "872-546-2440", - "email": "kaylee@vencom.com" - }, - { - "id": 8337, - "guid": "402e0e2c-05c9-4b68-9c4a-fd234769034a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Harrison", - "company": "Mescaridic", - "phone": "881-493-2712", - "email": "madeline@mescaridic.com" - }, - { - "id": 8338, - "guid": "1d593d96-cd0d-46b2-abbc-d5d0f97111b1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Gill", - "company": "Vencom", - "phone": "854-481-3270", - "email": "mackenzie@vencom.com" - }, - { - "id": 8339, - "guid": "b45fa5bf-06da-4617-aed7-be46df279c3d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Fisher", - "company": "Interliant", - "phone": "886-484-2431", - "email": "khloe@interliant.com" - }, - { - "id": 8340, - "guid": "87582b1d-01bf-49db-8705-09abfab77696", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Chapman", - "company": "Netseco", - "phone": "830-481-3224", - "email": "natalie@netseco.com" - }, - { - "id": 8341, - "guid": "349b4d66-89c8-42a6-b25e-588fcc16f348", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Thorndike", - "company": "Pacwest", - "phone": "805-572-2234", - "email": "maria@pacwest.com" - }, - { - "id": 8342, - "guid": "b59becbf-cfaa-4bf1-89a7-17e23aea7682", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Wallace", - "company": "Techtron", - "phone": "805-448-3893", - "email": "kayla@techtron.com" - }, - { - "id": 8343, - "guid": "468dfea4-24ad-4074-9c4c-b6e6d37fc880", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Abramson", - "company": "Gigaura", - "phone": "869-557-2320", - "email": "alyssa@gigaura.com" - }, - { - "id": 8344, - "guid": "7cdb6fe5-99e4-4041-9331-8c3bfabeacb0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Wood", - "company": "Quintegrity", - "phone": "867-574-2064", - "email": "sofia@quintegrity.com" - }, - { - "id": 8345, - "guid": "d2a432cf-8e6f-4381-ae23-8f435f19fcd2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Riley Chandter", - "company": "Inridium", - "phone": "843-582-2726", - "email": "riley@inridium.com" - }, - { - "id": 8346, - "guid": "1e56aa78-46e0-4808-b043-b03fcea37096", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Gilmore", - "company": "Steganoconiche", - "phone": "836-432-3112", - "email": "emma@steganoconiche.com" - }, - { - "id": 8347, - "guid": "06245622-b78f-4d22-974e-d10f7c0231ef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Timmons", - "company": "Unologic", - "phone": "842-506-2037", - "email": "ariana@unologic.com" - }, - { - "id": 8348, - "guid": "0fc82a2c-1352-445c-a965-7413ab09b773", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Brown", - "company": "SysVenamerica", - "phone": "879-428-3631", - "email": "kylie@sysvenamerica.com" - }, - { - "id": 8349, - "guid": "a749c5a2-3ee8-4ea0-a7a0-5454f1c622c9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Otis", - "company": "Fibroserve", - "phone": "853-563-3401", - "email": "lauren@fibroserve.com" - }, - { - "id": 8350, - "guid": "0aca1d58-e4ee-4529-8839-0d1afacc1455", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Payton Michaelson", - "company": "Dynarama", - "phone": "832-440-2131", - "email": "payton@dynarama.com" - }, - { - "id": 8351, - "guid": "c4058261-0dfe-4e01-a02b-24b0b7e34066", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Watson", - "company": "Gigaura", - "phone": "800-523-3747", - "email": "jocelyn@gigaura.com" - }, - { - "id": 8352, - "guid": "e2800346-3dc7-4a17-9bdd-9c97304ac480", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Charlson", - "company": "Anaframe", - "phone": "813-450-3573", - "email": "bella@anaframe.com" - }, - { - "id": 8353, - "guid": "7a477a0a-97e9-4e7b-8da6-ed128e7785b6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Nash", - "company": "Interliant", - "phone": "833-577-2274", - "email": "isabelle@interliant.com" - }, - { - "id": 8354, - "guid": "1f3693c2-6fef-42f1-a1b6-85dc49a99ef7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Gilmore", - "company": "Mescatron", - "phone": "809-423-3821", - "email": "taylor@mescatron.com" - }, - { - "id": 8355, - "guid": "7911e479-8b41-484a-aca6-3f5349553408", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Crossman", - "company": "Vencom", - "phone": "891-592-3828", - "email": "abigail@vencom.com" - }, - { - "id": 8356, - "guid": "17b512b5-6fa2-4346-908a-39288c7264c3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Vance", - "company": "Systheon", - "phone": "889-559-2881", - "email": "brooklyn@systheon.com" - }, - { - "id": 8357, - "guid": "7c0f79c2-35b6-4a06-b3f2-0c2a671485a7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Chesterton", - "company": "Robotomic", - "phone": "873-577-2917", - "email": "autumn@robotomic.com" - }, - { - "id": 8358, - "guid": "0befe9e6-6c5c-44bd-a9f2-4dd7a5167b5d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Galbraith", - "company": "Anagraph", - "phone": "856-509-3023", - "email": "arianna@anagraph.com" - }, - { - "id": 8359, - "guid": "48bd543c-07fc-4382-8eb9-37f22082008c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Cook", - "company": "Allnet", - "phone": "898-448-2579", - "email": "abigail@allnet.com" - }, - { - "id": 8360, - "guid": "971684a9-1e2a-4398-9dfc-8b09110ebfdd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Gustman", - "company": "Mescatron", - "phone": "887-568-3025", - "email": "emily@mescatron.com" - }, - { - "id": 8361, - "guid": "3b9b5363-31c5-4b75-a42a-4d4ef45d9e24", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maya Haig", - "company": "Robotomic", - "phone": "819-572-2230", - "email": "maya@robotomic.com" - }, - { - "id": 8362, - "guid": "dc075ef7-570e-44fa-ab7a-46e72dda572c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Harrison", - "company": "Anaframe", - "phone": "832-544-2245", - "email": "natalie@anaframe.com" - }, - { - "id": 8363, - "guid": "d48d07a0-6c68-472b-93af-aac57a88a0df", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Young", - "company": "Nanobanc", - "phone": "823-435-3237", - "email": "brooklyn@nanobanc.com" - }, - { - "id": 8364, - "guid": "3fd35aef-737c-41cf-a6b1-7080f9c77563", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Wesley", - "company": "Fibrotopia", - "phone": "861-563-2712", - "email": "victoria@fibrotopia.com" - }, - { - "id": 8365, - "guid": "f082dfb9-83a4-4c11-9580-7196b0d452a1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mia Hancock", - "company": "Titanigraf", - "phone": "840-533-2626", - "email": "mia@titanigraf.com" - }, - { - "id": 8366, - "guid": "12c8e014-fcba-4cac-ba5b-1df255d579eb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Abigail Gerald", - "company": "Anagraph", - "phone": "806-521-3942", - "email": "abigail@anagraph.com" - }, - { - "id": 8367, - "guid": "ddcfd112-53d1-4a45-86a3-6eaf533fbba0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Higgins", - "company": "Teraserv", - "phone": "810-477-3063", - "email": "sofia@teraserv.com" - }, - { - "id": 8368, - "guid": "f2db81b1-63cb-412c-bc3b-c014ec57ebc8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Hamphrey", - "company": "Xeicon", - "phone": "824-572-3593", - "email": "allison@xeicon.com" - }, - { - "id": 8369, - "guid": "e2bf675e-a114-45cd-85c1-0072b44d352d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Hawkins", - "company": "Proline", - "phone": "876-572-3280", - "email": "molly@proline.com" - }, - { - "id": 8370, - "guid": "d161c3c5-102e-4140-8eb8-615ae44244a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Nelson", - "company": "eSteganoergy", - "phone": "836-505-2128", - "email": "destiny@esteganoergy.com" - }, - { - "id": 8371, - "guid": "b38a8731-9381-48f5-83b9-a6cd75574dad", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Sherlock", - "company": "SysVenamerica", - "phone": "867-568-3304", - "email": "grace@sysvenamerica.com" - }, - { - "id": 8372, - "guid": "0cf63de4-5fdf-4f38-a43d-5f604430d421", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Walkman", - "company": "Multitiqua", - "phone": "827-450-2705", - "email": "isabelle@multitiqua.com" - }, - { - "id": 8373, - "guid": "32b84f4f-785b-42c0-b79a-029ed97d90d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Hancock", - "company": "Gigaura", - "phone": "883-418-2616", - "email": "ava@gigaura.com" - }, - { - "id": 8374, - "guid": "b9a7358a-e0f7-408d-9133-299a712261aa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Gerald", - "company": "Teknoplexon", - "phone": "815-581-2764", - "email": "natalie@teknoplexon.com" - }, - { - "id": 8375, - "guid": "24126d08-f957-42a0-b101-3c72de66748b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Walkman", - "company": "Anagraph", - "phone": "840-511-2787", - "email": "avery@anagraph.com" - }, - { - "id": 8376, - "guid": "b4ba721c-eab9-4673-9197-1f15e0345419", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Carrington", - "company": "Turbomart", - "phone": "852-557-2658", - "email": "eva@turbomart.com" - }, - { - "id": 8377, - "guid": "89f046ee-1fe7-4a25-88b8-aa390e3e5447", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Mercer", - "company": "Anagraph", - "phone": "815-448-3436", - "email": "trinity@anagraph.com" - }, - { - "id": 8378, - "guid": "1d224353-d32d-4a2c-8d83-1ec16b8ee4d0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Sheldon", - "company": "Navivacs", - "phone": "820-519-3659", - "email": "aaliyah@navivacs.com" - }, - { - "id": 8379, - "guid": "95383f98-9bad-463f-9404-a356dfe961d7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Hamphrey", - "company": "Cryptotemplate", - "phone": "875-593-3775", - "email": "layla@cryptotemplate.com" - }, - { - "id": 8380, - "guid": "44cb20ed-1bca-424a-a94b-f7741a5b36c2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Gibbs", - "company": "Cryptotemplate", - "phone": "807-574-3838", - "email": "jessica@cryptotemplate.com" - }, - { - "id": 8381, - "guid": "5b827ee2-5ae7-48a5-b5de-4d99d55c7680", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Clapton", - "company": "US Omnigraphik", - "phone": "814-582-2787", - "email": "ashley@us omnigraphik.com" - }, - { - "id": 8382, - "guid": "c5025147-9286-4ce2-9949-a31bec384976", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Wallace", - "company": "Cryptotemplate", - "phone": "892-484-2228", - "email": "lauren@cryptotemplate.com" - }, - { - "id": 8383, - "guid": "4a6d7dbb-7e27-492c-b123-75d4d78bb289", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia WifKinson", - "company": "InfoAirway", - "phone": "806-462-3834", - "email": "mia@infoairway.com" - }, - { - "id": 8384, - "guid": "f57cf4d7-8f70-4e0a-82a1-d1be15418486", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Hawkins", - "company": "Sontopia", - "phone": "830-455-3949", - "email": "kaylee@sontopia.com" - }, - { - "id": 8385, - "guid": "505bf157-8e29-401a-8e4a-2e337716a682", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mia Warren", - "company": "iEnland", - "phone": "811-516-2243", - "email": "mia@ienland.com" - }, - { - "id": 8386, - "guid": "b9d19f0f-52e9-47a5-81d4-a99dd8691a2f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Goldman", - "company": "OpKeycomm", - "phone": "800-590-2260", - "email": "alexa@opkeycomm.com" - }, - { - "id": 8387, - "guid": "75e7fc8f-12ff-4a6c-8ad9-62b08a66c0ef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooke Owen", - "company": "Mescaridic", - "phone": "887-581-2846", - "email": "brooke@mescaridic.com" - }, - { - "id": 8388, - "guid": "172f7e9d-2925-428d-80b8-37ac29cb9995", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Hamphrey", - "company": "SysUSA", - "phone": "850-597-3160", - "email": "madelyn@sysusa.com" - }, - { - "id": 8389, - "guid": "6d15c688-c0fc-4ac5-a4e7-c35b05b1fdaa", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Warren", - "company": "Qualserve", - "phone": "805-597-3911", - "email": "sophia@qualserve.com" - }, - { - "id": 8390, - "guid": "50704eec-3fed-4ba4-9bdb-5af1997cccc8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Wallace", - "company": "Celgra", - "phone": "803-475-2280", - "email": "gianna@celgra.com" - }, - { - "id": 8391, - "guid": "a00c6d52-c4b8-4c8d-9c70-1a5a33603ea3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Fulton", - "company": "Vencom", - "phone": "879-540-2010", - "email": "chloe@vencom.com" - }, - { - "id": 8392, - "guid": "4d6cf8b6-ee99-4f41-9549-f8b3adacf05a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Oswald", - "company": "iMedconik", - "phone": "865-440-3625", - "email": "allison@imedconik.com" - }, - { - "id": 8393, - "guid": "daa879ab-d8f1-4796-b5ea-80a7bbe9e2e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Winter", - "company": "Genland", - "phone": "863-439-2214", - "email": "sofia@genland.com" - }, - { - "id": 8394, - "guid": "b5214487-c768-4973-b6d9-5252e3a2bbd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Higgins", - "company": "Cryptotemplate", - "phone": "829-483-3097", - "email": "brooke@cryptotemplate.com" - }, - { - "id": 8395, - "guid": "80c18b47-ee5d-4de1-b54a-6a6635c1b8e9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Nathan", - "company": "Polytheon", - "phone": "824-453-3595", - "email": "emily@polytheon.com" - }, - { - "id": 8396, - "guid": "82b7fe13-b712-4d01-a333-a300ac7abc22", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Mercer", - "company": "Gigaura", - "phone": "867-514-3771", - "email": "evelyn@gigaura.com" - }, - { - "id": 8397, - "guid": "20b56bc8-704e-4212-9eaa-8fb860268a4b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Hawkins", - "company": "Aprama", - "phone": "882-432-2564", - "email": "gabrielle@aprama.com" - }, - { - "id": 8398, - "guid": "cf30626d-23d9-4048-b802-1d91cf831d0e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madison Thomson", - "company": "Indisco", - "phone": "851-455-3990", - "email": "madison@indisco.com" - }, - { - "id": 8399, - "guid": "79eaa55e-98b9-460c-a9e8-8244d7629ba6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Young", - "company": "Netsystems", - "phone": "839-486-3534", - "email": "emma@netsystems.com" - }, - { - "id": 8400, - "guid": "28ae7458-f315-4ead-b7a4-088aeac8f565", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Vance", - "company": "Truetomic", - "phone": "895-489-3905", - "email": "eva@truetomic.com" - }, - { - "id": 8401, - "guid": "ddad6457-cf4b-487d-be21-b957aaa24cf1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Goldman", - "company": "Multitiqua", - "phone": "875-494-2905", - "email": "madelyn@multitiqua.com" - }, - { - "id": 8402, - "guid": "d470356f-c081-4ff3-9014-9f0e66ed8e62", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Timmons", - "company": "Orthomedia", - "phone": "856-479-3936", - "email": "claire@orthomedia.com" - }, - { - "id": 8403, - "guid": "8ccb4b88-7406-44c8-9794-2c1cc4164d48", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Hodges", - "company": "Idmax", - "phone": "803-557-2649", - "email": "katelyn@idmax.com" - }, - { - "id": 8404, - "guid": "32ad24a1-68aa-48cb-b2ab-143f40cd65f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Owen", - "company": "Fibrotopia", - "phone": "835-445-2867", - "email": "angelina@fibrotopia.com" - }, - { - "id": 8405, - "guid": "8c78993f-0f13-4360-8330-b286398c44c9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Vance", - "company": "Multitiqua", - "phone": "838-534-2525", - "email": "trinity@multitiqua.com" - }, - { - "id": 8406, - "guid": "e75ee1d1-1d9c-4589-92c0-125b781344c3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Vaughan", - "company": "Conrama", - "phone": "833-473-2564", - "email": "khloe@conrama.com" - }, - { - "id": 8407, - "guid": "d447b0bd-95b2-45d2-8b95-9f2f6f2a5f76", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica White", - "company": "Westgate", - "phone": "805-441-2052", - "email": "jessica@westgate.com" - }, - { - "id": 8408, - "guid": "a4f6c130-6928-4f56-94af-37adcdb0b8da", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Vaughan", - "company": "Ventanium", - "phone": "868-598-2327", - "email": "evelyn@ventanium.com" - }, - { - "id": 8409, - "guid": "34b969cb-628c-4abc-8bbc-a858c6a736a3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Higgins", - "company": "Enlogia", - "phone": "808-419-3088", - "email": "lily@enlogia.com" - }, - { - "id": 8410, - "guid": "4652f74b-aa0f-4a9c-a12a-1b64b642c77d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hannah Oldman", - "company": "Superscope", - "phone": "855-454-2704", - "email": "hannah@superscope.com" - }, - { - "id": 8411, - "guid": "a26feea1-60ff-4053-88a7-1deec28244b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Conors", - "company": "Qualserve", - "phone": "870-550-2459", - "email": "trinity@qualserve.com" - }, - { - "id": 8412, - "guid": "3e3b292b-efcd-4a8b-93d6-673dde3568b5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Mercer", - "company": "Pacwest", - "phone": "888-464-2611", - "email": "leah@pacwest.com" - }, - { - "id": 8413, - "guid": "21476c30-07dc-40fa-90c9-eceb7529e025", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Miller", - "company": "Indisco", - "phone": "838-437-2765", - "email": "alexis@indisco.com" - }, - { - "id": 8414, - "guid": "211fea93-b218-432c-b3dd-8961b5cb1098", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Winter", - "company": "Nanobanc", - "phone": "895-572-2627", - "email": "destiny@nanobanc.com" - }, - { - "id": 8415, - "guid": "8d3fff5d-03cc-48da-9521-eb0b68ff2a69", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Murphy", - "company": "eEyetanic", - "phone": "871-590-2939", - "email": "serenity@eeyetanic.com" - }, - { - "id": 8416, - "guid": "727c4c86-1c65-4193-979e-bf5824e70b2a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Carroll", - "company": "iMedconik", - "phone": "873-464-3291", - "email": "andrea@imedconik.com" - }, - { - "id": 8417, - "guid": "4e5421df-0433-4bf6-9f2a-1bcbb5834594", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabella Carter", - "company": "Aluco", - "phone": "886-589-3808", - "email": "isabella@aluco.com" - }, - { - "id": 8418, - "guid": "0006d6c2-9d4d-46ff-9e3f-5734c582a1df", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Adamson", - "company": "Teratopia", - "phone": "889-435-3089", - "email": "chloe@teratopia.com" - }, - { - "id": 8419, - "guid": "29f832d9-89ed-4010-98b1-63efa3c2c0f4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Chandter", - "company": "Qualserve", - "phone": "818-526-3000", - "email": "zoey@qualserve.com" - }, - { - "id": 8420, - "guid": "be6a6b12-1318-4546-aa28-e30479ee3e3c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Elizabeth Ford", - "company": "Conrama", - "phone": "848-412-3133", - "email": "elizabeth@conrama.com" - }, - { - "id": 8421, - "guid": "48ec226f-37bf-40ca-a87d-a3233067d3f7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Gerald", - "company": "Entcast", - "phone": "886-469-3984", - "email": "camila@entcast.com" - }, - { - "id": 8422, - "guid": "c0c1a992-067b-42ed-8f2d-4fa4a93e6bfb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Chapman", - "company": "iOptystix", - "phone": "839-519-2814", - "email": "alexis@ioptystix.com" - }, - { - "id": 8423, - "guid": "1737e16e-5a16-4a87-a7bc-8900eed2790c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Young", - "company": "Truetomic", - "phone": "849-510-2566", - "email": "emily@truetomic.com" - }, - { - "id": 8424, - "guid": "24707085-4fea-469a-ac1f-a0ec804666fe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Adamson", - "company": "Tekcar", - "phone": "873-521-2511", - "email": "katherine@tekcar.com" - }, - { - "id": 8425, - "guid": "fe3cd75f-3368-408c-9b47-1f866255fd9f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Vance", - "company": "Navivacs", - "phone": "880-453-3605", - "email": "samantha@navivacs.com" - }, - { - "id": 8426, - "guid": "7debe49e-9d5b-4ae2-808b-24a21d7ec0a9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Carrington", - "company": "eEyetanic", - "phone": "844-543-3843", - "email": "mya@eeyetanic.com" - }, - { - "id": 8427, - "guid": "cf91f2ce-10f1-4cf0-89d8-12ecbde79ac7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Walkman", - "company": "Quintegrity", - "phone": "871-554-3687", - "email": "angelina@quintegrity.com" - }, - { - "id": 8428, - "guid": "bed228cb-c4c6-45d7-84c7-e600f848b140", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Gill", - "company": "Airdyne", - "phone": "800-550-3506", - "email": "khloe@airdyne.com" - }, - { - "id": 8429, - "guid": "632ec299-f0c3-459b-8823-458fc4b1f874", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Owen", - "company": "Netsystems", - "phone": "872-425-3624", - "email": "victoria@netsystems.com" - }, - { - "id": 8430, - "guid": "9a3c725c-9107-4818-8926-849c86211451", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Warren", - "company": "Westmedia", - "phone": "836-596-3975", - "email": "ashley@westmedia.com" - }, - { - "id": 8431, - "guid": "1c6d3f26-f088-4a83-854b-b09fbd0c83f0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Nelson", - "company": "iSkyvaco", - "phone": "835-490-3480", - "email": "genesis@iskyvaco.com" - }, - { - "id": 8432, - "guid": "b55ab5b1-587c-4f21-aa56-6d60820e1343", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Hodges", - "company": "Superscope", - "phone": "892-426-3146", - "email": "kimberly@superscope.com" - }, - { - "id": 8433, - "guid": "15ce9f77-0563-4432-9123-f5129f0dd2be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Chapman", - "company": "SysVenamerica", - "phone": "822-481-3175", - "email": "olivia@sysvenamerica.com" - }, - { - "id": 8434, - "guid": "812a0f77-c7b1-4b03-b9fc-66cdbd8355c0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Carrington", - "company": "Videobanc", - "phone": "897-511-2266", - "email": "abigail@videobanc.com" - }, - { - "id": 8435, - "guid": "68cc7795-3d89-4797-8d25-ccf5a058a676", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Bush", - "company": "Pericenta", - "phone": "868-408-2627", - "email": "elizabeth@pericenta.com" - }, - { - "id": 8436, - "guid": "f8c4d8e1-ece5-4b91-96e7-22f7ae423c71", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Fulton", - "company": "Aprama", - "phone": "847-551-3288", - "email": "allison@aprama.com" - }, - { - "id": 8437, - "guid": "ca62e716-925f-4437-b737-d312dbfcf8eb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Galbraith", - "company": "SysUSA", - "phone": "835-483-3635", - "email": "abigail@sysusa.com" - }, - { - "id": 8438, - "guid": "59e1d71b-8c1b-40f9-bb5d-c63ea1e9df6a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Gibbs", - "company": "Multitiqua", - "phone": "853-560-3993", - "email": "addison@multitiqua.com" - }, - { - "id": 8439, - "guid": "e0083284-9416-47de-9bc0-0bbf46c77425", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Wesley", - "company": "Entcast", - "phone": "801-492-3895", - "email": "madelyn@entcast.com" - }, - { - "id": 8440, - "guid": "e8923056-1f38-4954-a9f4-14d0e8b57938", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kayla Oldridge", - "company": "Westmedia", - "phone": "890-556-3714", - "email": "kayla@westmedia.com" - }, - { - "id": 8441, - "guid": "2a5f81c8-4c8c-4fac-9a6b-90bb4a55f26a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe WifKinson", - "company": "iSkyvaco", - "phone": "808-479-2994", - "email": "chloe@iskyvaco.com" - }, - { - "id": 8442, - "guid": "d2468288-8823-45cb-9325-f1e2fc43598b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sofia Charlson", - "company": "Techtron", - "phone": "898-451-3336", - "email": "sofia@techtron.com" - }, - { - "id": 8443, - "guid": "23e68d34-e55c-4873-83ae-306859ac8eaa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Chandter", - "company": "eEyetanic", - "phone": "878-410-2010", - "email": "amelia@eeyetanic.com" - }, - { - "id": 8444, - "guid": "b99a9cdb-4a54-4d62-a17b-9921e2520d1d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Abramson", - "company": "Techtron", - "phone": "838-536-3978", - "email": "kylie@techtron.com" - }, - { - "id": 8445, - "guid": "e64e8b54-444d-487d-ba48-a6432a8ebc57", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mariah Thomson", - "company": "Pacwest", - "phone": "884-520-2014", - "email": "mariah@pacwest.com" - }, - { - "id": 8446, - "guid": "3349701f-9639-4cdd-8eb8-3c20e9f14a94", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Eva Molligan", - "company": "iMedconik", - "phone": "804-522-3757", - "email": "eva@imedconik.com" - }, - { - "id": 8447, - "guid": "9b42ffd2-6c6a-4351-94e6-c3161c0dccc4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Fisher", - "company": "Westtomik", - "phone": "815-488-3666", - "email": "kaitlyn@westtomik.com" - }, - { - "id": 8448, - "guid": "766c4be9-b119-4a11-9244-be0310b443ce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Faith Gilson", - "company": "Netseco", - "phone": "836-498-3003", - "email": "faith@netseco.com" - }, - { - "id": 8449, - "guid": "fd136c97-9f2e-4810-b12a-e9cd594fbc20", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Hamphrey", - "company": "Compuamerica", - "phone": "831-451-2383", - "email": "makayla@compuamerica.com" - }, - { - "id": 8450, - "guid": "4f176e66-a2ea-49bc-9e91-c1c13686260f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Waller", - "company": "Systheon", - "phone": "884-523-3604", - "email": "kimberly@systheon.com" - }, - { - "id": 8451, - "guid": "f7af45b1-7686-48f0-b56b-741ffe68c6d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexandra Carrington", - "company": "Rapigrafix", - "phone": "829-542-2112", - "email": "alexandra@rapigrafix.com" - }, - { - "id": 8452, - "guid": "bae57a58-1fa1-4179-80c8-9ee773f6fe82", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Oswald", - "company": "Mescaridic", - "phone": "845-426-2644", - "email": "julia@mescaridic.com" - }, - { - "id": 8453, - "guid": "95a4656d-7330-414e-8b91-19e746657ad3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity Goldman", - "company": "Infraique", - "phone": "891-589-2710", - "email": "trinity@infraique.com" - }, - { - "id": 8454, - "guid": "2ff105ad-8c09-499d-94bc-1e118bb86d60", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Gerald", - "company": "US Infratouch", - "phone": "813-497-2189", - "email": "evelyn@us infratouch.com" - }, - { - "id": 8455, - "guid": "d53232bf-258f-4a3c-a176-e7d5b4c91529", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Adamson", - "company": "Mescatron", - "phone": "891-465-3389", - "email": "bailey@mescatron.com" - }, - { - "id": 8456, - "guid": "0e73d66b-8faf-4562-8277-e9f4c2152906", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Gibbs", - "company": "Robotemplate", - "phone": "815-511-3601", - "email": "avery@robotemplate.com" - }, - { - "id": 8457, - "guid": "b862ad6a-d2d0-4570-afad-eaf2d59e7294", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Calhoun", - "company": "RoboAerlogix", - "phone": "834-464-2629", - "email": "vanessa@roboaerlogix.com" - }, - { - "id": 8458, - "guid": "f77d8bad-3e8a-4003-ab09-ee9a85b3067f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Waller", - "company": "US Omnigraphik", - "phone": "876-516-3754", - "email": "julia@us omnigraphik.com" - }, - { - "id": 8459, - "guid": "f87e4041-d8be-4c12-ac4a-db648038f67d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Neal", - "company": "Allnet", - "phone": "818-463-2524", - "email": "gabriella@allnet.com" - }, - { - "id": 8460, - "guid": "7321de90-1ba6-4944-81af-6ea4d1370343", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Goodman", - "company": "Entcast", - "phone": "899-550-3150", - "email": "katherine@entcast.com" - }, - { - "id": 8461, - "guid": "61844b72-bfa1-411d-8f07-6755cc87c57c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Stanley", - "company": "SysUSA", - "phone": "845-450-3933", - "email": "mia@sysusa.com" - }, - { - "id": 8462, - "guid": "b29fa8e1-295b-46cb-8f28-a815e8d19d23", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaylee Youmans", - "company": "Fibroserve", - "phone": "896-581-3675", - "email": "kaylee@fibroserve.com" - }, - { - "id": 8463, - "guid": "db35bb9c-37cb-4440-8703-5b50af96f983", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Chandter", - "company": "Teknoplexon", - "phone": "822-471-3752", - "email": "brianna@teknoplexon.com" - }, - { - "id": 8464, - "guid": "89f79127-3eaa-4f3b-af80-d2da47226d83", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Nelson", - "company": "Systheon", - "phone": "808-594-3343", - "email": "sarah@systheon.com" - }, - { - "id": 8465, - "guid": "ed6b789b-4b96-43e5-96bc-8bb19514519a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Goldman", - "company": "Ventanium", - "phone": "815-410-2199", - "email": "mackenzie@ventanium.com" - }, - { - "id": 8466, - "guid": "969663d9-13b4-43d2-a672-5ddd035a0e50", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Nathan", - "company": "Conotomics", - "phone": "816-458-2790", - "email": "melanie@conotomics.com" - }, - { - "id": 8467, - "guid": "2b2feeb3-3cd9-4c91-929a-873b8a56b862", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Gate", - "company": "Gigaura", - "phone": "821-509-2489", - "email": "mia@gigaura.com" - }, - { - "id": 8468, - "guid": "6628f728-34ed-4e9c-beb5-fcd32eb6b55a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Gate", - "company": "Hypervaco", - "phone": "831-521-2546", - "email": "zoe@hypervaco.com" - }, - { - "id": 8469, - "guid": "046bc5eb-8784-4ede-b14b-53544cea3028", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Vaughan", - "company": "Unconix", - "phone": "875-454-2973", - "email": "lillian@unconix.com" - }, - { - "id": 8470, - "guid": "4d844da9-28ad-445c-af5b-8e5cc3d0bf5f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Gate", - "company": "Steganoconiche", - "phone": "810-559-3191", - "email": "julia@steganoconiche.com" - }, - { - "id": 8471, - "guid": "bf979522-2769-484d-baaf-9a331467f035", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Hailey", - "company": "Enlogia", - "phone": "899-434-2394", - "email": "rachel@enlogia.com" - }, - { - "id": 8472, - "guid": "abb05269-cc27-4432-a0c3-af3bf434d838", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Neal", - "company": "Thermotomic", - "phone": "823-587-2870", - "email": "destiny@thermotomic.com" - }, - { - "id": 8473, - "guid": "f63802a6-0d94-42d2-ba9b-7a968e4e131f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Michaelson", - "company": "eSteganoergy", - "phone": "895-486-3117", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 8474, - "guid": "f358a762-23d5-4b5b-8df3-1b7781a94e8a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Hodges", - "company": "Technogra", - "phone": "800-424-3975", - "email": "kylie@technogra.com" - }, - { - "id": 8475, - "guid": "168a4e43-016a-4dd9-8926-41596f4b0d04", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Gibbs", - "company": "Nanobanc", - "phone": "812-541-3348", - "email": "mia@nanobanc.com" - }, - { - "id": 8476, - "guid": "a951d5bb-9b8d-4bdf-9ad9-f34e81b841f8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Bush", - "company": "Navivacs", - "phone": "841-473-3760", - "email": "madison@navivacs.com" - }, - { - "id": 8477, - "guid": "2ae9b120-8f7d-4df6-9951-7e39da0542a8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Sherlock", - "company": "Orthomedia", - "phone": "868-536-3856", - "email": "hailey@orthomedia.com" - }, - { - "id": 8478, - "guid": "2b41f018-0a15-4b32-9a7c-ab85dbbd4afb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Brooks", - "company": "Navivacs", - "phone": "888-447-2934", - "email": "andrea@navivacs.com" - }, - { - "id": 8479, - "guid": "9836b104-c21d-4490-ab7f-28510b2d6df7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Bush", - "company": "Compuamerica", - "phone": "809-462-3990", - "email": "jasmine@compuamerica.com" - }, - { - "id": 8480, - "guid": "174fee5b-fd3f-4f22-bfe9-1214bb9365d9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Brown", - "company": "iEnland", - "phone": "827-461-3316", - "email": "brooke@ienland.com" - }, - { - "id": 8481, - "guid": "3fce9540-baab-4179-9c12-dc976c521d4d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Oldridge", - "company": "Infraique", - "phone": "835-468-3486", - "email": "evelyn@infraique.com" - }, - { - "id": 8482, - "guid": "48ba0dbc-4c70-4f83-b941-f419891245a0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Oliver", - "company": "Robocomm", - "phone": "804-462-3938", - "email": "khloe@robocomm.com" - }, - { - "id": 8483, - "guid": "6db9ebc9-831f-4179-8e2d-e058cda006be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Timmons", - "company": "Teraserv", - "phone": "887-555-3516", - "email": "alexis@teraserv.com" - }, - { - "id": 8484, - "guid": "3e23303c-1e5c-4ef1-9759-64e3cd298ff8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Neal", - "company": "iOptystix", - "phone": "898-426-3963", - "email": "autumn@ioptystix.com" - }, - { - "id": 8485, - "guid": "81af92c7-65a7-46ab-8b7d-9e9ad2a14f4b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Day", - "company": "Inridium", - "phone": "892-520-3580", - "email": "julia@inridium.com" - }, - { - "id": 8486, - "guid": "45764b83-9489-4068-82b9-6cea5c25bfc4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Freeman", - "company": "Conrama", - "phone": "815-597-3622", - "email": "morgan@conrama.com" - }, - { - "id": 8487, - "guid": "1ab6af48-a061-4920-85eb-11e31c01f806", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Wainwright", - "company": "Tekcar", - "phone": "857-476-3610", - "email": "morgan@tekcar.com" - }, - { - "id": 8488, - "guid": "478ce3e3-cbf4-4342-93cd-d85400f297e1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Goodman", - "company": "Pericenta", - "phone": "861-474-3086", - "email": "aubrey@pericenta.com" - }, - { - "id": 8489, - "guid": "eda33811-c447-4408-8581-498ab84b1eb3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Webster", - "company": "Jamrola", - "phone": "818-544-2608", - "email": "sophia@jamrola.com" - }, - { - "id": 8490, - "guid": "5e720abc-fab8-4a0f-962f-a74d594e4f37", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle WifKinson", - "company": "Steganoconiche", - "phone": "863-434-3893", - "email": "gabrielle@steganoconiche.com" - }, - { - "id": 8491, - "guid": "15484965-0d4c-4b6d-a0a7-85b7695e3b6b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Haig", - "company": "SysUSA", - "phone": "826-518-2663", - "email": "brooke@sysusa.com" - }, - { - "id": 8492, - "guid": "7967e561-ad17-4b66-867d-a33da89a58d2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Bush", - "company": "iSkyvaco", - "phone": "826-499-3855", - "email": "emily@iskyvaco.com" - }, - { - "id": 8493, - "guid": "bfd2c57f-fad2-4f93-a8f8-6f0936a5d1ee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Gate", - "company": "Transtouch", - "phone": "894-503-2994", - "email": "gabrielle@transtouch.com" - }, - { - "id": 8494, - "guid": "63cdabc5-5cdc-4d22-8961-abfe49c68232", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Michaelson", - "company": "Allnet", - "phone": "824-440-2073", - "email": "savannah@allnet.com" - }, - { - "id": 8495, - "guid": "13d7a86a-4f27-4975-b5f3-f30415305d48", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Nathan", - "company": "Ventanium", - "phone": "847-410-2480", - "email": "kayla@ventanium.com" - }, - { - "id": 8496, - "guid": "0fc38905-f050-48e4-a24e-a355db369561", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Calhoun", - "company": "Conotomics", - "phone": "892-489-2952", - "email": "sophia@conotomics.com" - }, - { - "id": 8497, - "guid": "92a86ca2-2d75-4d32-bfb1-9b62af72deb2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Ogden", - "company": "Hypervaco", - "phone": "816-456-2267", - "email": "makayla@hypervaco.com" - }, - { - "id": 8498, - "guid": "e03437ff-c570-46b7-99ee-78d5d310194a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Chapman", - "company": "Orthosoft", - "phone": "838-571-3584", - "email": "madison@orthosoft.com" - }, - { - "id": 8499, - "guid": "8eaa81ee-9f15-4aaa-858b-fc7677596622", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Day", - "company": "Cryptotegrity", - "phone": "870-516-2238", - "email": "avery@cryptotegrity.com" - }, - { - "id": 8500, - "guid": "3415a5ae-47f2-4fbd-bd9f-09796c1c9096", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Calhoun", - "company": "Indisco", - "phone": "842-437-3088", - "email": "molly@indisco.com" - }, - { - "id": 8501, - "guid": "059f11c5-54fd-4fa4-befe-4c9c1d89fd28", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Elizabeth Gilbert", - "company": "Netsystems", - "phone": "816-495-2878", - "email": "elizabeth@netsystems.com" - }, - { - "id": 8502, - "guid": "300ac36a-1533-462a-b783-c8041d1c1889", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Higgins", - "company": "Jamrola", - "phone": "886-523-2747", - "email": "lily@jamrola.com" - }, - { - "id": 8503, - "guid": "fde95b3a-33a9-4a6e-a7fb-ecdb777a93d3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Ward", - "company": "Fibrotouch", - "phone": "889-520-2712", - "email": "vanessa@fibrotouch.com" - }, - { - "id": 8504, - "guid": "2dcf19b7-1375-43db-9a0e-a89c94692800", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Oswald", - "company": "Skydata", - "phone": "850-442-2519", - "email": "jocelyn@skydata.com" - }, - { - "id": 8505, - "guid": "2f5c935e-5c9b-4fb1-bb6b-a43351fc9019", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Charlson", - "company": "Robocomm", - "phone": "816-470-3756", - "email": "brooke@robocomm.com" - }, - { - "id": 8506, - "guid": "5856b9ce-d7d9-47fb-b693-8a3e7d04ff74", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Hawkins", - "company": "Technogra", - "phone": "846-461-3584", - "email": "sophia@technogra.com" - }, - { - "id": 8507, - "guid": "f63087e8-3c55-4ab6-8cf8-097f219ffd63", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Gill", - "company": "Teratopia", - "phone": "818-573-3552", - "email": "chloe@teratopia.com" - }, - { - "id": 8508, - "guid": "f385c785-15ea-444f-9d74-538fd3c0b225", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Campbell", - "company": "Proline", - "phone": "807-533-2765", - "email": "emily@proline.com" - }, - { - "id": 8509, - "guid": "798ce5a5-47f1-4f4c-9194-814c6ccdaee4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Faith Gerald", - "company": "Hypervaco", - "phone": "880-593-2819", - "email": "faith@hypervaco.com" - }, - { - "id": 8510, - "guid": "bd72b070-44e3-4115-b19b-bbb3610f1e61", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Oliver", - "company": "Robotemplate", - "phone": "888-553-2643", - "email": "aaliyah@robotemplate.com" - }, - { - "id": 8511, - "guid": "2da2ec79-23b1-478e-b459-e535d0a9c4f5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Otis", - "company": "Truegate", - "phone": "816-567-3246", - "email": "trinity@truegate.com" - }, - { - "id": 8512, - "guid": "b84bc1d8-cbb0-4a24-9d47-5693c8ba186f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Galbraith", - "company": "Videobanc", - "phone": "822-539-2167", - "email": "chloe@videobanc.com" - }, - { - "id": 8513, - "guid": "ee514c3b-ba26-4997-8147-044d5a01e806", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Sherlock", - "company": "Titanirola", - "phone": "877-490-2149", - "email": "khloe@titanirola.com" - }, - { - "id": 8514, - "guid": "4b441586-86b8-4ae9-8436-953b97d30ff5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Cook", - "company": "Openserve", - "phone": "850-566-3680", - "email": "khloe@openserve.com" - }, - { - "id": 8515, - "guid": "9c68c7a1-13fc-4dd3-85b6-4657af75e271", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Neal", - "company": "Pericenta", - "phone": "859-510-2247", - "email": "kaitlyn@pericenta.com" - }, - { - "id": 8516, - "guid": "1cb6672e-b024-41bf-b93a-d41c7f05d362", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brianna Hamphrey", - "company": "Keytheon", - "phone": "811-508-3125", - "email": "brianna@keytheon.com" - }, - { - "id": 8517, - "guid": "a9115097-ae35-44ec-8951-ec465240bef0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Higgins", - "company": "Videobanc", - "phone": "872-513-2904", - "email": "arianna@videobanc.com" - }, - { - "id": 8518, - "guid": "444f300a-4750-419f-b212-3605a40a08c1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Miller", - "company": "iEnland", - "phone": "837-429-3792", - "email": "kylie@ienland.com" - }, - { - "id": 8519, - "guid": "00533b6d-1525-445a-a879-4c9f6fac2266", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Fisher", - "company": "Aprama", - "phone": "835-412-2114", - "email": "morgan@aprama.com" - }, - { - "id": 8520, - "guid": "40118223-421e-427d-aeba-7c5923e80c8b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Freeman", - "company": "Openserve", - "phone": "896-543-3596", - "email": "lily@openserve.com" - }, - { - "id": 8521, - "guid": "a521c13e-76cd-4cc9-a680-75e54dcf6f1b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Adamson", - "company": "Safeagra", - "phone": "840-539-2091", - "email": "andrea@safeagra.com" - }, - { - "id": 8522, - "guid": "3d529510-9f39-497a-b162-77b6ee525572", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Gerald", - "company": "RoboAerlogix", - "phone": "810-482-2947", - "email": "claire@roboaerlogix.com" - }, - { - "id": 8523, - "guid": "eb60cc99-5e31-444d-a8f0-1a0002a8d14d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Timmons", - "company": "Skydata", - "phone": "860-587-2141", - "email": "molly@skydata.com" - }, - { - "id": 8524, - "guid": "27f8365e-0ba1-41a7-8ca0-3fd886ed6676", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sydney Gibbs", - "company": "Nanobanc", - "phone": "875-522-3614", - "email": "sydney@nanobanc.com" - }, - { - "id": 8525, - "guid": "2d12cee5-24c2-4163-80ee-15e38d0e5c80", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ava Brooks", - "company": "Conrama", - "phone": "845-446-3155", - "email": "ava@conrama.com" - }, - { - "id": 8526, - "guid": "dff78594-d933-41b9-9ea4-0ac915ff2b58", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Michaelson", - "company": "Enlogia", - "phone": "805-476-3839", - "email": "katelyn@enlogia.com" - }, - { - "id": 8527, - "guid": "8277b8bd-f568-4901-844f-d7cb6f8cf56f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Vaughan", - "company": "Inridium", - "phone": "856-467-3115", - "email": "chloe@inridium.com" - }, - { - "id": 8528, - "guid": "0128f6a5-95f3-4390-8741-3681a3dc4d51", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Wallace", - "company": "Skydata", - "phone": "875-554-2353", - "email": "gabriella@skydata.com" - }, - { - "id": 8529, - "guid": "031e4591-4b08-4cdd-887a-7858a12fad16", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Walkman", - "company": "Safeagra", - "phone": "871-514-3516", - "email": "mya@safeagra.com" - }, - { - "id": 8530, - "guid": "df8e3273-d690-4a69-a715-30ce4551401c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Hoggarth", - "company": "Cryptotegrity", - "phone": "877-497-2333", - "email": "jessica@cryptotegrity.com" - }, - { - "id": 8531, - "guid": "82358941-e260-4c0e-ba9c-21938a0fa2b9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sofia Chandter", - "company": "Mescatron", - "phone": "839-457-3833", - "email": "sofia@mescatron.com" - }, - { - "id": 8532, - "guid": "b5febdb1-5511-4870-a7b2-8973661a8f35", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Youmans", - "company": "Proline", - "phone": "876-521-3557", - "email": "alexis@proline.com" - }, - { - "id": 8533, - "guid": "656577d5-acd0-40b0-9dbd-f992104da9a5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Sheldon", - "company": "Indisco", - "phone": "863-432-2262", - "email": "lily@indisco.com" - }, - { - "id": 8534, - "guid": "984c2514-6034-492a-84e8-da75de427836", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Oliver", - "company": "Polytheon", - "phone": "845-483-2186", - "email": "julia@polytheon.com" - }, - { - "id": 8535, - "guid": "dbeda92f-96f4-4d3e-b346-6b0b4b424905", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Milton", - "company": "Textiqua", - "phone": "877-522-2287", - "email": "kimberly@textiqua.com" - }, - { - "id": 8536, - "guid": "0c1ecb69-9628-4778-a541-708478ac2945", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophie Fulton", - "company": "Qualserve", - "phone": "828-578-2655", - "email": "sophie@qualserve.com" - }, - { - "id": 8537, - "guid": "a60bac0e-36d5-4269-95e4-12dd75c35be4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Harrison", - "company": "Airdyne", - "phone": "802-426-3018", - "email": "zoe@airdyne.com" - }, - { - "id": 8538, - "guid": "315869b6-5faa-4d9a-b996-3d5892890bbf", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Crossman", - "company": "InfoAirway", - "phone": "897-418-2287", - "email": "alexis@infoairway.com" - }, - { - "id": 8539, - "guid": "b05d55c1-b473-4bff-908e-6af017a6a9cb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Miers", - "company": "Generola", - "phone": "829-577-3937", - "email": "maya@generola.com" - }, - { - "id": 8540, - "guid": "cf54a312-58b1-4297-aade-bb289d05d012", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Carrington", - "company": "iEnland", - "phone": "819-558-3070", - "email": "isabella@ienland.com" - }, - { - "id": 8541, - "guid": "e0b76449-024e-4166-b77d-89fa095ee699", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Hoggarth", - "company": "Mescaridic", - "phone": "870-455-2348", - "email": "isabella@mescaridic.com" - }, - { - "id": 8542, - "guid": "9ca26011-bc4b-44f6-be4a-f04bdf1e64cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Chloe Miers", - "company": "Robocomm", - "phone": "895-511-3407", - "email": "chloe@robocomm.com" - }, - { - "id": 8543, - "guid": "0d73dfb6-0041-40bf-b0e1-1a3c511ac22b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Hancock", - "company": "Fibrotopia", - "phone": "884-494-2409", - "email": "natalie@fibrotopia.com" - }, - { - "id": 8544, - "guid": "1925ccf5-764d-4931-b144-b2bdeb8000d4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Gerald", - "company": "Gigaura", - "phone": "840-400-2404", - "email": "alexa@gigaura.com" - }, - { - "id": 8545, - "guid": "8cfc5519-d3e7-4fa4-9695-7acd17734278", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Hamphrey", - "company": "Pacwest", - "phone": "830-438-2809", - "email": "riley@pacwest.com" - }, - { - "id": 8546, - "guid": "14bcf7b5-f2ad-4c89-bfc6-e72f86873eae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Crossman", - "company": "iQualcar", - "phone": "887-495-3233", - "email": "taylor@iqualcar.com" - }, - { - "id": 8547, - "guid": "1d418ab9-30a3-44d3-9548-06f7c34c435a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Hailey", - "company": "Steganoconiche", - "phone": "824-494-2978", - "email": "layla@steganoconiche.com" - }, - { - "id": 8548, - "guid": "93d67fdc-0bfd-4f4f-8677-26021b9b8532", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Hardman", - "company": "Robocomm", - "phone": "888-536-3912", - "email": "gabrielle@robocomm.com" - }, - { - "id": 8549, - "guid": "695faf89-1526-4174-9348-14ce93382dd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gilbert", - "company": "Openserve", - "phone": "852-522-2209", - "email": "lauren@openserve.com" - }, - { - "id": 8550, - "guid": "e84b8773-0760-4c11-8609-a0df4e127163", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hailey Thomson", - "company": "Indisco", - "phone": "822-505-3864", - "email": "hailey@indisco.com" - }, - { - "id": 8551, - "guid": "9b5f5f22-82cf-4a58-b66c-ae16772919f6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Ford", - "company": "Netsystems", - "phone": "846-406-2396", - "email": "maria@netsystems.com" - }, - { - "id": 8552, - "guid": "2ea5e94b-8aff-40b4-9d01-779ef2b69f34", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Chesterton", - "company": "Thermotomic", - "phone": "864-455-3914", - "email": "molly@thermotomic.com" - }, - { - "id": 8553, - "guid": "d4b9f81c-61c7-437c-8600-3a903298e545", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Owen", - "company": "Titanigraf", - "phone": "833-470-2636", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 8554, - "guid": "b27d5e9c-c3e5-4b97-897e-96d467d9ae43", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Samantha Wallace", - "company": "eEyetanic", - "phone": "833-450-2015", - "email": "samantha@eeyetanic.com" - }, - { - "id": 8555, - "guid": "22d5eda9-859d-4fdb-8314-702a11ae246c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Hodges", - "company": "Teratopia", - "phone": "890-504-3088", - "email": "rachel@teratopia.com" - }, - { - "id": 8556, - "guid": "d42e18e2-7ff7-4b49-97e0-7dba90009d88", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Hodges", - "company": "Infragraph", - "phone": "829-402-3796", - "email": "gianna@infragraph.com" - }, - { - "id": 8557, - "guid": "fd6b6816-2acc-4047-87ba-20962ebed3ac", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Abramson", - "company": "Videobanc", - "phone": "837-462-3122", - "email": "angelina@videobanc.com" - }, - { - "id": 8558, - "guid": "9b56774a-ba97-4ef6-bd63-736c056aae2d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Milton", - "company": "Syssoft", - "phone": "859-469-3279", - "email": "ashley@syssoft.com" - }, - { - "id": 8559, - "guid": "352979c7-91c2-4879-abdf-5201e9b8a24c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Destiny Hawkins", - "company": "Technogra", - "phone": "864-562-2818", - "email": "destiny@technogra.com" - }, - { - "id": 8560, - "guid": "c2580f0c-38e0-4440-971b-1a52ec3e523f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Calhoun", - "company": "Generola", - "phone": "821-465-3331", - "email": "autumn@generola.com" - }, - { - "id": 8561, - "guid": "73487cbe-68ed-4558-9d5d-5d8d2f9c7e31", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Freeman", - "company": "Orthosoft", - "phone": "890-416-2733", - "email": "maya@orthosoft.com" - }, - { - "id": 8562, - "guid": "a63ec5a4-5785-4cd2-af1e-9dfb7de75a2b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Gerald", - "company": "Anaframe", - "phone": "841-565-2662", - "email": "katelyn@anaframe.com" - }, - { - "id": 8563, - "guid": "3066f223-cad5-4da1-a827-2998149345bb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Neal", - "company": "iEnland", - "phone": "848-455-3822", - "email": "allison@ienland.com" - }, - { - "id": 8564, - "guid": "4b814d7f-d050-48b6-832d-82fdb8c72e21", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaylee Hawkins", - "company": "iOptystix", - "phone": "809-408-2254", - "email": "kaylee@ioptystix.com" - }, - { - "id": 8565, - "guid": "2f2fd307-a5e2-4482-90c7-23a07840230a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Ogden", - "company": "SysUSA", - "phone": "865-458-2129", - "email": "hannah@sysusa.com" - }, - { - "id": 8566, - "guid": "f38d2c72-b614-42b2-9947-17e9313f0d5d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Haig", - "company": "RoboAerlogix", - "phone": "869-587-3004", - "email": "morgan@roboaerlogix.com" - }, - { - "id": 8567, - "guid": "374496ee-216f-4fa5-b50a-63edc550b652", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Hardman", - "company": "Compuamerica", - "phone": "894-513-2212", - "email": "natalie@compuamerica.com" - }, - { - "id": 8568, - "guid": "183acf1c-ae23-49d0-b73e-5bf5bfde7f85", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Anna Freeman", - "company": "US Infratouch", - "phone": "877-412-3832", - "email": "anna@us infratouch.com" - }, - { - "id": 8569, - "guid": "86c12017-fdbe-4f48-89a7-a5197cebebe7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Wesley", - "company": "Xeicon", - "phone": "889-491-3609", - "email": "angelina@xeicon.com" - }, - { - "id": 8570, - "guid": "01f98363-0c1d-4172-9010-2b79a7b9c958", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Watson", - "company": "Textiqua", - "phone": "855-449-2521", - "email": "lauren@textiqua.com" - }, - { - "id": 8571, - "guid": "e75aad1a-dea3-45f0-bbd3-fe07498d0f8a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Wesley", - "company": "Thermotomic", - "phone": "825-441-2853", - "email": "lauren@thermotomic.com" - }, - { - "id": 8572, - "guid": "39e49ca4-f20f-4d8d-b7bb-d170768088d0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Gilmore", - "company": "Truetomic", - "phone": "883-563-2224", - "email": "emily@truetomic.com" - }, - { - "id": 8573, - "guid": "3007d8fb-3d9b-4779-a9f8-b6d9fcf9d2f5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Morrison", - "company": "Celgra", - "phone": "813-559-3806", - "email": "alyssa@celgra.com" - }, - { - "id": 8574, - "guid": "747504ef-af40-48ba-94cc-cd40c7a3fdb2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Haig", - "company": "Proline", - "phone": "800-456-3351", - "email": "isabelle@proline.com" - }, - { - "id": 8575, - "guid": "2bf565a0-fe5a-4bf3-b4ed-03aa85e19acc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Vaughan", - "company": "Techtron", - "phone": "823-595-3440", - "email": "isabelle@techtron.com" - }, - { - "id": 8576, - "guid": "5567de2d-507e-45ca-a0fe-6ec7330e23ae", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Thorndike", - "company": "Enlogia", - "phone": "886-473-3188", - "email": "peyton@enlogia.com" - }, - { - "id": 8577, - "guid": "201449dd-6759-430f-9404-dc7f95552cc0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Milton", - "company": "Xeicon", - "phone": "841-473-3224", - "email": "destiny@xeicon.com" - }, - { - "id": 8578, - "guid": "bc76fb37-a57e-415e-93ce-6c51ceae5176", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Adamson", - "company": "Systheon", - "phone": "806-577-2357", - "email": "zoe@systheon.com" - }, - { - "id": 8579, - "guid": "fdf0e357-d7ab-4b80-aee8-9151bab8bd5f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Warren", - "company": "Ventanium", - "phone": "891-562-3253", - "email": "zoe@ventanium.com" - }, - { - "id": 8580, - "guid": "523bde9c-13f2-430e-9e22-4bc454d26233", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Crossman", - "company": "Celgra", - "phone": "810-476-2801", - "email": "madeline@celgra.com" - }, - { - "id": 8581, - "guid": "b611f259-e5e5-4f2b-b753-7ce645a85d80", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Goodman", - "company": "Orthomedia", - "phone": "841-530-3533", - "email": "faith@orthomedia.com" - }, - { - "id": 8582, - "guid": "0316e2a9-24c7-4653-8b37-1e227103fe12", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Gill", - "company": "Anaframe", - "phone": "815-542-3875", - "email": "sofia@anaframe.com" - }, - { - "id": 8583, - "guid": "e4a60fe6-b971-4c99-b36b-ba6304bf0581", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Fisher", - "company": "iSkyvaco", - "phone": "894-485-2295", - "email": "emma@iskyvaco.com" - }, - { - "id": 8584, - "guid": "ce27d9d2-1a2a-4e6d-8f53-cea1a4cd208a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Makayla Otis", - "company": "Safeagra", - "phone": "872-524-3994", - "email": "makayla@safeagra.com" - }, - { - "id": 8585, - "guid": "5c927ccc-9073-49bd-aba2-79892633b36c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Gibbs", - "company": "US Omnigraphik", - "phone": "871-467-2038", - "email": "kaitlyn@us omnigraphik.com" - }, - { - "id": 8586, - "guid": "13a2b70e-9d5a-4e2b-94b7-85980b377d63", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Nelson", - "company": "Infraique", - "phone": "827-599-2994", - "email": "elizabeth@infraique.com" - }, - { - "id": 8587, - "guid": "6e395e28-4802-471a-8bb3-e67539f9c087", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Chandter", - "company": "Gigaura", - "phone": "831-578-2523", - "email": "melanie@gigaura.com" - }, - { - "id": 8588, - "guid": "df91c777-9c8d-40f2-9f11-1cdfdba8c23d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jessica Gerald", - "company": "Mescatron", - "phone": "810-434-2317", - "email": "jessica@mescatron.com" - }, - { - "id": 8589, - "guid": "0ba41066-bb82-4488-8ec7-f5d530fc6723", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Creighton", - "company": "Gigaura", - "phone": "834-595-3853", - "email": "alexa@gigaura.com" - }, - { - "id": 8590, - "guid": "19bdc713-8e26-4703-8983-6119421d5b47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Hardman", - "company": "Titanirola", - "phone": "860-473-2495", - "email": "mariah@titanirola.com" - }, - { - "id": 8591, - "guid": "3d874cc3-13c9-4deb-ba7a-026bfb5c1ade", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Chapman", - "company": "Venconix", - "phone": "836-419-2881", - "email": "madison@venconix.com" - }, - { - "id": 8592, - "guid": "90fd9d31-59f1-44cb-a9c5-2863a05805f2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Cramer", - "company": "Truegate", - "phone": "846-410-2828", - "email": "serenity@truegate.com" - }, - { - "id": 8593, - "guid": "c5c7df07-51c3-492b-87c2-f894d5620b40", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Ward", - "company": "Orthosoft", - "phone": "827-575-2380", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 8594, - "guid": "4c19cf54-5ce5-4eb5-baec-f681fee40c00", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Fisher", - "company": "Jamrola", - "phone": "833-536-3626", - "email": "makayla@jamrola.com" - }, - { - "id": 8595, - "guid": "a73f5de1-4750-4955-a42d-5a1448ed934a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Sherlock", - "company": "Xeicon", - "phone": "866-447-2844", - "email": "maya@xeicon.com" - }, - { - "id": 8596, - "guid": "74cf733d-4098-44c2-a0dd-1a026dc35ac8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Daniels", - "company": "Entcast", - "phone": "848-578-2012", - "email": "camila@entcast.com" - }, - { - "id": 8597, - "guid": "9c88dc80-a074-4b0d-938a-4a99bc37d033", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Gilson", - "company": "iOptystix", - "phone": "818-566-3872", - "email": "maya@ioptystix.com" - }, - { - "id": 8598, - "guid": "5530fde3-fbfb-4669-8876-f5de20e24c7e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Otis", - "company": "Superscope", - "phone": "841-454-2780", - "email": "alexandra@superscope.com" - }, - { - "id": 8599, - "guid": "ee93476a-f852-44ff-921f-30bb189a84e7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Miln", - "company": "Robocomm", - "phone": "820-447-2391", - "email": "taylor@robocomm.com" - }, - { - "id": 8600, - "guid": "b8cf9ed6-3894-4986-9dc4-8ca9d7841340", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Brooks", - "company": "Aluco", - "phone": "820-478-3861", - "email": "molly@aluco.com" - }, - { - "id": 8601, - "guid": "d6c2c6ad-1b5a-466f-a397-8426ac4fa380", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Hancock", - "company": "Mescatron", - "phone": "809-453-2036", - "email": "zoey@mescatron.com" - }, - { - "id": 8602, - "guid": "46ce300f-797c-4787-9b90-5bc9f67a24d0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Winter", - "company": "Raylog", - "phone": "845-447-2899", - "email": "rachel@raylog.com" - }, - { - "id": 8603, - "guid": "4dc6b31a-f725-4792-b70a-185fbeacbc88", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Gate", - "company": "Mescatron", - "phone": "865-547-3834", - "email": "mariah@mescatron.com" - }, - { - "id": 8604, - "guid": "3749beb7-a8c3-4488-9132-86280022e35c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Ogden", - "company": "iQualcar", - "phone": "828-427-3758", - "email": "madeline@iqualcar.com" - }, - { - "id": 8605, - "guid": "fe9e9167-0da2-45fa-be39-6c53b3be032d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Eva Oldman", - "company": "eSteganoergy", - "phone": "862-481-2668", - "email": "eva@esteganoergy.com" - }, - { - "id": 8606, - "guid": "81848eb2-dddc-4eb3-83ff-1d12d4c24c39", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Timmons", - "company": "Unologic", - "phone": "822-449-3217", - "email": "chloe@unologic.com" - }, - { - "id": 8607, - "guid": "15e19520-8fd8-41e2-9e1b-36c5a77353df", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Owen", - "company": "InfoAirway", - "phone": "834-541-3676", - "email": "katherine@infoairway.com" - }, - { - "id": 8608, - "guid": "cafce564-5683-4c9c-9cbf-d62fb4275552", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Oliver", - "company": "Compuamerica", - "phone": "889-595-2825", - "email": "jasmine@compuamerica.com" - }, - { - "id": 8609, - "guid": "4dfcb9dd-2bc7-40b8-b375-6cbaa1071603", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Hardman", - "company": "Robotomic", - "phone": "868-591-3969", - "email": "addison@robotomic.com" - }, - { - "id": 8610, - "guid": "af6791aa-5185-4e71-89f4-785cd75af95f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Destiny Smith", - "company": "Idmax", - "phone": "887-464-3584", - "email": "destiny@idmax.com" - }, - { - "id": 8611, - "guid": "1b3d8145-0c70-4b81-9f4c-80f8d4d6bf42", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Morrison", - "company": "Hypervaco", - "phone": "882-551-2953", - "email": "mariah@hypervaco.com" - }, - { - "id": 8612, - "guid": "ff7486c0-9793-41e1-9c34-6145eb9f8100", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Waller", - "company": "Xeicon", - "phone": "814-407-3086", - "email": "zoey@xeicon.com" - }, - { - "id": 8613, - "guid": "e9d7f12e-2b33-437f-9384-3e9fdbf18663", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Gerald", - "company": "SysVenamerica", - "phone": "870-585-2351", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 8614, - "guid": "4dc495b2-8873-43c9-8292-de78d20ef8e1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Day", - "company": "Turbomart", - "phone": "814-579-2267", - "email": "abigail@turbomart.com" - }, - { - "id": 8615, - "guid": "3dc16901-fbc4-40ea-85a8-6781a9a4a078", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Young", - "company": "Textiqua", - "phone": "857-549-3157", - "email": "zoey@textiqua.com" - }, - { - "id": 8616, - "guid": "7014b3d6-65ce-4762-a303-f0bfd05cf165", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Miers", - "company": "Syssoft", - "phone": "846-592-3949", - "email": "sophia@syssoft.com" - }, - { - "id": 8617, - "guid": "71b59733-0e62-4a30-b62b-b2ad39a1715a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Thorndike", - "company": "Safeagra", - "phone": "867-549-2495", - "email": "isabella@safeagra.com" - }, - { - "id": 8618, - "guid": "b125c98d-216e-48c9-9984-a61fbd2c4b07", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Young", - "company": "iMedconik", - "phone": "882-516-2321", - "email": "bailey@imedconik.com" - }, - { - "id": 8619, - "guid": "c97c49aa-9fd7-43bc-84ae-aa5fb66812c1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Campbell", - "company": "Pacwest", - "phone": "884-503-3022", - "email": "chloe@pacwest.com" - }, - { - "id": 8620, - "guid": "b58cb025-dd13-433c-aeb4-3bdef0d28a2b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Hancock", - "company": "Westmedia", - "phone": "850-435-2095", - "email": "evelyn@westmedia.com" - }, - { - "id": 8621, - "guid": "76ccb129-7c9b-4559-bd9e-2ac7087b4328", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Hodges", - "company": "Inridium", - "phone": "892-547-2906", - "email": "alexa@inridium.com" - }, - { - "id": 8622, - "guid": "74244231-07c8-4941-a8bd-aa685019b027", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Smith", - "company": "Jamrola", - "phone": "869-542-3104", - "email": "taylor@jamrola.com" - }, - { - "id": 8623, - "guid": "f546e0ee-9692-44ec-b008-8e2ccb0055df", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Miller", - "company": "iMedconik", - "phone": "819-580-2483", - "email": "emily@imedconik.com" - }, - { - "id": 8624, - "guid": "91533688-a37c-4ac1-9dba-e5b6654202f0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Brooks", - "company": "Pericenta", - "phone": "804-538-3890", - "email": "peyton@pericenta.com" - }, - { - "id": 8625, - "guid": "93fb94c9-9883-445e-90cd-4357257a90a9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Mercer", - "company": "Fibroserve", - "phone": "850-453-3649", - "email": "molly@fibroserve.com" - }, - { - "id": 8626, - "guid": "48eee11e-388a-4039-a757-67a6290e6237", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Trinity Calhoun", - "company": "US Infratouch", - "phone": "858-496-2380", - "email": "trinity@us infratouch.com" - }, - { - "id": 8627, - "guid": "a9abf056-8873-4cf3-aa80-acc7bc4adb7d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Vaughan", - "company": "InfoAirway", - "phone": "874-595-3459", - "email": "autumn@infoairway.com" - }, - { - "id": 8628, - "guid": "1477eedd-9428-40dd-ad3b-4cf53f70efe7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Chandter", - "company": "Westgate", - "phone": "845-442-3090", - "email": "khloe@westgate.com" - }, - { - "id": 8629, - "guid": "0b8ff6a2-a729-4f0d-9a8b-b2b6aaf9663b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Otis", - "company": "Teratopia", - "phone": "819-572-2760", - "email": "caroline@teratopia.com" - }, - { - "id": 8630, - "guid": "2031d3e1-c63d-40a9-b636-554c6774372d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny WifKinson", - "company": "Netseco", - "phone": "894-489-2274", - "email": "destiny@netseco.com" - }, - { - "id": 8631, - "guid": "fe332cc6-9eb7-4b09-a0e7-227fe55cd89f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Wesley", - "company": "iOptystix", - "phone": "846-558-3099", - "email": "alexis@ioptystix.com" - }, - { - "id": 8632, - "guid": "a598b20f-1c52-414f-a260-d693d41bb47a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Carter", - "company": "Entcast", - "phone": "828-460-3669", - "email": "serenity@entcast.com" - }, - { - "id": 8633, - "guid": "ffdb9c98-9c74-40a4-b80e-081453e3a20b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Murphy", - "company": "Idmax", - "phone": "861-406-2519", - "email": "abigail@idmax.com" - }, - { - "id": 8634, - "guid": "ecfc141a-aa2b-4fb5-8f27-7789a8c04888", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Neal", - "company": "Genland", - "phone": "868-553-2497", - "email": "jasmine@genland.com" - }, - { - "id": 8635, - "guid": "e7a5b2e1-a235-4039-b1e7-13b802ece755", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Fulton", - "company": "Celgra", - "phone": "882-477-2346", - "email": "angelina@celgra.com" - }, - { - "id": 8636, - "guid": "17c3c61a-ba7c-4e6d-bf26-ac8392d038cb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Croftoon", - "company": "Fibrotouch", - "phone": "865-589-2523", - "email": "kayla@fibrotouch.com" - }, - { - "id": 8637, - "guid": "59eff461-7670-4501-8572-61af558d2240", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Warren", - "company": "Fibrotouch", - "phone": "841-522-3689", - "email": "anna@fibrotouch.com" - }, - { - "id": 8638, - "guid": "54cc7624-5991-431c-bdcb-5b5cd4320a98", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Wood", - "company": "Cryptotegrity", - "phone": "894-576-3207", - "email": "andrea@cryptotegrity.com" - }, - { - "id": 8639, - "guid": "ad65aca4-24f2-4330-8fed-6c149b8a45c6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Fulton", - "company": "Keytheon", - "phone": "827-417-3062", - "email": "vanessa@keytheon.com" - }, - { - "id": 8640, - "guid": "11e0a64c-2dba-47f5-8baf-05746a5555c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Chandter", - "company": "Infraique", - "phone": "862-419-2074", - "email": "elizabeth@infraique.com" - }, - { - "id": 8641, - "guid": "25661819-6fe0-4929-8362-0ddd5b8d8d73", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Charlson", - "company": "SysUSA", - "phone": "801-411-3166", - "email": "gabrielle@sysusa.com" - }, - { - "id": 8642, - "guid": "d9b5c341-49d5-4615-bc57-8acb7b634684", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Warren", - "company": "Fibrotopia", - "phone": "812-554-2602", - "email": "nevaeh@fibrotopia.com" - }, - { - "id": 8643, - "guid": "b983897c-736f-41ab-8e89-dc71c1116ddc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Ward", - "company": "Fibrotopia", - "phone": "887-543-2744", - "email": "chloe@fibrotopia.com" - }, - { - "id": 8644, - "guid": "c7611531-526c-46c4-af48-d4f11d1d83db", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Wood", - "company": "Rapigrafix", - "phone": "885-428-3556", - "email": "addison@rapigrafix.com" - }, - { - "id": 8645, - "guid": "1a2446f3-013d-4858-a605-0865f8d361b1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Wood", - "company": "Genland", - "phone": "896-541-3929", - "email": "chloe@genland.com" - }, - { - "id": 8646, - "guid": "47de666a-0895-4139-82ba-e537f65e1799", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Hancock", - "company": "Conotomics", - "phone": "894-460-2558", - "email": "arianna@conotomics.com" - }, - { - "id": 8647, - "guid": "8a09c8b6-5a68-4e55-934b-72b9fde58f90", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jasmine Gilbert", - "company": "iMedconik", - "phone": "836-448-2646", - "email": "jasmine@imedconik.com" - }, - { - "id": 8648, - "guid": "7e959fb1-b82f-4641-a28b-696225b97174", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Brooks", - "company": "Infraique", - "phone": "820-531-3576", - "email": "taylor@infraique.com" - }, - { - "id": 8649, - "guid": "826de13c-4e54-4e90-a1a5-0cbd69fe570e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kayla Gustman", - "company": "Celgra", - "phone": "893-598-2052", - "email": "kayla@celgra.com" - }, - { - "id": 8650, - "guid": "1e8d33dd-b1e3-4d7f-8176-886ac29210f8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Smith", - "company": "Syssoft", - "phone": "896-493-2696", - "email": "sophia@syssoft.com" - }, - { - "id": 8651, - "guid": "31896e51-2f5d-4ef1-a470-0d3aac90cef7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Carrington", - "company": "US Infratouch", - "phone": "833-550-3184", - "email": "payton@us infratouch.com" - }, - { - "id": 8652, - "guid": "427bde85-8b3a-4b32-9496-e27db90ef504", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Gill", - "company": "Infraique", - "phone": "868-437-2710", - "email": "addison@infraique.com" - }, - { - "id": 8653, - "guid": "317a4f7b-ef08-4f04-ac4b-6a4e105377ef", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Youmans", - "company": "Truegate", - "phone": "861-543-3408", - "email": "mariah@truegate.com" - }, - { - "id": 8654, - "guid": "56a1305b-103e-4a61-a9cf-fde17425e9e1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Chapman", - "company": "Openserve", - "phone": "822-409-2355", - "email": "samantha@openserve.com" - }, - { - "id": 8655, - "guid": "445e2536-3991-4cad-b62a-891dbd562eb0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Wayne", - "company": "Ameritron", - "phone": "835-499-2612", - "email": "trinity@ameritron.com" - }, - { - "id": 8656, - "guid": "63a33c07-4fe7-4343-b176-19c351491c81", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Hoggarth", - "company": "Sontopia", - "phone": "836-522-2129", - "email": "kylie@sontopia.com" - }, - { - "id": 8657, - "guid": "6089b05d-511d-4830-aeca-0fd7f748c779", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Murphy", - "company": "Robotemplate", - "phone": "840-440-2342", - "email": "jasmine@robotemplate.com" - }, - { - "id": 8658, - "guid": "6fbc7015-afea-48a0-9393-83cb26e4183e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Chapman", - "company": "Skydata", - "phone": "841-523-3575", - "email": "sophia@skydata.com" - }, - { - "id": 8659, - "guid": "09d844eb-c830-4bc5-bed4-fa624f1d4dec", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Winter", - "company": "Tekcar", - "phone": "801-597-3596", - "email": "jessica@tekcar.com" - }, - { - "id": 8660, - "guid": "97c1045e-5237-481f-a9bc-a69e60527810", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Thorndike", - "company": "Proline", - "phone": "838-463-3416", - "email": "emma@proline.com" - }, - { - "id": 8661, - "guid": "8d8b06e2-d868-46d7-86b5-99ffe5a59330", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Gilbert", - "company": "RoboAerlogix", - "phone": "818-482-2917", - "email": "sarah@roboaerlogix.com" - }, - { - "id": 8662, - "guid": "a161aa5c-3475-42cf-8338-844fe9b74287", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Goodman", - "company": "Indisco", - "phone": "884-479-2372", - "email": "sofia@indisco.com" - }, - { - "id": 8663, - "guid": "027b4523-a14c-4b6a-b615-523c09092fd0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Morgan Croftoon", - "company": "Dynarama", - "phone": "892-454-3025", - "email": "morgan@dynarama.com" - }, - { - "id": 8664, - "guid": "923c9c04-76fa-4833-862d-3153513548d8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Morrison", - "company": "Transtouch", - "phone": "889-527-2598", - "email": "lauren@transtouch.com" - }, - { - "id": 8665, - "guid": "ad49407f-5bc9-4f47-aa0c-b3373ec7f293", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Oswald", - "company": "Steganoconiche", - "phone": "882-477-3475", - "email": "hailey@steganoconiche.com" - }, - { - "id": 8666, - "guid": "f9043d20-5110-47ea-806b-e1bfa1c85478", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Anna Carrington", - "company": "Generola", - "phone": "839-586-3333", - "email": "anna@generola.com" - }, - { - "id": 8667, - "guid": "b69043ce-49e6-43fa-b34b-2fee952f28f3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Molligan", - "company": "Jamrola", - "phone": "899-429-3017", - "email": "ava@jamrola.com" - }, - { - "id": 8668, - "guid": "1ae22bc2-44f3-47cc-b308-18c9632d5fbd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Gilbert", - "company": "Nanobanc", - "phone": "874-511-3807", - "email": "kaylee@nanobanc.com" - }, - { - "id": 8669, - "guid": "231d6271-d45c-43bb-a535-bdaa17e22b68", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madelyn Osborne", - "company": "RoboAerlogix", - "phone": "838-564-3735", - "email": "madelyn@roboaerlogix.com" - }, - { - "id": 8670, - "guid": "d2e78d2b-1902-4de5-b458-cf7f7f8668b0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Walkman", - "company": "Multitiqua", - "phone": "880-521-3844", - "email": "kayla@multitiqua.com" - }, - { - "id": 8671, - "guid": "ecdcc894-8996-4cec-b031-e732816bd7c0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Vance", - "company": "Orthomedia", - "phone": "898-463-2966", - "email": "andrea@orthomedia.com" - }, - { - "id": 8672, - "guid": "d666817c-1bee-4cc7-8446-f821328f07a4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Nathan", - "company": "Westgate", - "phone": "851-553-3993", - "email": "bailey@westgate.com" - }, - { - "id": 8673, - "guid": "591cac81-94d0-46ab-ae5c-787f795df9d1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Cook", - "company": "Truetomic", - "phone": "809-501-2027", - "email": "khloe@truetomic.com" - }, - { - "id": 8674, - "guid": "62981cc2-8ea4-4a6b-a7f6-595271a34325", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Oliver", - "company": "Tekcar", - "phone": "848-491-2572", - "email": "payton@tekcar.com" - }, - { - "id": 8675, - "guid": "00fc873e-c696-4435-8ee3-9343a2b5c185", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Charlson", - "company": "Qualserve", - "phone": "830-455-2795", - "email": "allison@qualserve.com" - }, - { - "id": 8676, - "guid": "4a5d41a9-41b4-42b2-9923-a0470ec0b4c8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Conors", - "company": "Titanigraf", - "phone": "881-574-3725", - "email": "gabriella@titanigraf.com" - }, - { - "id": 8677, - "guid": "4e8f632d-b7cd-46f9-ae37-13d4cefafa7a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Chandter", - "company": "Mescaridic", - "phone": "885-505-2310", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 8678, - "guid": "dd934d2c-bc47-43c0-988e-54aaa9757d71", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Gerald", - "company": "Westgate", - "phone": "862-423-2421", - "email": "zoey@westgate.com" - }, - { - "id": 8679, - "guid": "35d1a3d1-fcb3-4698-bcc5-e5a1e875cd11", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Gustman", - "company": "Robocomm", - "phone": "810-495-3106", - "email": "melanie@robocomm.com" - }, - { - "id": 8680, - "guid": "30cb7666-f001-4332-a403-0fa885ea45f4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Gustman", - "company": "Titanigraf", - "phone": "892-421-2126", - "email": "faith@titanigraf.com" - }, - { - "id": 8681, - "guid": "80090f5d-d3de-4000-8da8-ef81ed73880f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Gill", - "company": "iEnland", - "phone": "897-449-3141", - "email": "bailey@ienland.com" - }, - { - "id": 8682, - "guid": "8bb36a07-2e05-4325-a3b7-0cea91337572", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Thomson", - "company": "Pericenta", - "phone": "838-543-2691", - "email": "brooke@pericenta.com" - }, - { - "id": 8683, - "guid": "36dcc537-4e46-4918-8695-287cdb01075d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Hawkins", - "company": "Inridium", - "phone": "850-494-3543", - "email": "kylie@inridium.com" - }, - { - "id": 8684, - "guid": "846fd3b6-318f-4fc2-9978-d8bcee10b230", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Harrison", - "company": "Teraserv", - "phone": "800-510-3592", - "email": "savannah@teraserv.com" - }, - { - "id": 8685, - "guid": "4e6db245-d2a2-4649-a47e-66453389a3c3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Nathan", - "company": "OpKeycomm", - "phone": "807-514-2653", - "email": "avery@opkeycomm.com" - }, - { - "id": 8686, - "guid": "028d8b89-bfa2-4350-8833-9713c6a7b323", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Gate", - "company": "US Infratouch", - "phone": "871-435-2435", - "email": "payton@us infratouch.com" - }, - { - "id": 8687, - "guid": "ab7c824a-6048-43f6-9214-30cfa6db83bb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Carey", - "company": "Turbomart", - "phone": "896-502-3517", - "email": "emily@turbomart.com" - }, - { - "id": 8688, - "guid": "6e889bba-4bfe-4385-8902-e400769801ba", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Ford", - "company": "Safeagra", - "phone": "862-559-3968", - "email": "anna@safeagra.com" - }, - { - "id": 8689, - "guid": "2f7ef788-c705-41ce-bf0a-b0a906582836", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Valeria Oliver", - "company": "iOptystix", - "phone": "848-428-3933", - "email": "valeria@ioptystix.com" - }, - { - "id": 8690, - "guid": "4dc6cc99-4de9-42fb-acf6-d2862443206a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Charlotte Oldridge", - "company": "Openserve", - "phone": "811-530-3453", - "email": "charlotte@openserve.com" - }, - { - "id": 8691, - "guid": "b8527fe0-c48c-4ec0-985d-e1007ae0bbea", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Turner", - "company": "Westtomik", - "phone": "854-454-2016", - "email": "trinity@westtomik.com" - }, - { - "id": 8692, - "guid": "ed0be1ca-a06c-4e13-92a1-f919daa43507", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Rachel Michaelson", - "company": "Westtomik", - "phone": "882-597-2186", - "email": "rachel@westtomik.com" - }, - { - "id": 8693, - "guid": "f5861758-3b3f-4b85-8af8-d4d7c2ec609d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Chesterton", - "company": "Unconix", - "phone": "846-524-2970", - "email": "isabella@unconix.com" - }, - { - "id": 8694, - "guid": "c5d0b6bd-d2d5-4788-a619-afbd3a17b7ed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Fisher", - "company": "Quintegrity", - "phone": "873-592-3193", - "email": "gianna@quintegrity.com" - }, - { - "id": 8695, - "guid": "99092010-4b0f-42a5-ba1e-b9718ff41121", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Chapman", - "company": "Ameritron", - "phone": "886-508-2072", - "email": "sydney@ameritron.com" - }, - { - "id": 8696, - "guid": "f730985e-217c-439d-8205-bf9d309175f3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Mercer", - "company": "Infraique", - "phone": "867-544-2600", - "email": "peyton@infraique.com" - }, - { - "id": 8697, - "guid": "1e46163d-2cee-4134-add3-18dc32920d0a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Andrea Campbell", - "company": "Anagraph", - "phone": "888-564-3908", - "email": "andrea@anagraph.com" - }, - { - "id": 8698, - "guid": "8bb57834-df37-4818-8f64-781350988bb3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Ford", - "company": "Proline", - "phone": "844-573-2936", - "email": "trinity@proline.com" - }, - { - "id": 8699, - "guid": "a70edab7-244b-46a0-8ee2-72012edee6f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Oldridge", - "company": "Proline", - "phone": "868-458-2069", - "email": "allison@proline.com" - }, - { - "id": 8700, - "guid": "6ec6f4a5-c36e-4cf0-a20d-51f780464cf2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Gibbs", - "company": "Unologic", - "phone": "895-468-3330", - "email": "molly@unologic.com" - }, - { - "id": 8701, - "guid": "2bb2544d-9bd1-4cc6-adef-e39ed8b278ec", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Wesley", - "company": "Syssoft", - "phone": "860-433-2627", - "email": "gabriella@syssoft.com" - }, - { - "id": 8702, - "guid": "06eec316-bcc7-4f48-8004-fca3e00747d1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Thorndike", - "company": "Allphysiche", - "phone": "838-555-3029", - "email": "gabriella@allphysiche.com" - }, - { - "id": 8703, - "guid": "ca042c0d-04dc-4ab8-9096-e9e992184d2c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Rachel Gustman", - "company": "Anaframe", - "phone": "826-457-2458", - "email": "rachel@anaframe.com" - }, - { - "id": 8704, - "guid": "20088635-c3b4-4246-8f50-ac2c892cae94", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Walkman", - "company": "Hypervaco", - "phone": "849-458-2092", - "email": "trinity@hypervaco.com" - }, - { - "id": 8705, - "guid": "d541cdb2-cd48-4038-a030-f35b4a94fb70", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Hodges", - "company": "Navivacs", - "phone": "880-589-3420", - "email": "madeline@navivacs.com" - }, - { - "id": 8706, - "guid": "30a52e9f-f577-4970-9e5d-bf776841a9fa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Higgins", - "company": "Sontopia", - "phone": "881-566-3573", - "email": "makayla@sontopia.com" - }, - { - "id": 8707, - "guid": "4761a428-31b7-4256-98b2-e764f6dcb1d2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Gilmore", - "company": "Quintegrity", - "phone": "841-454-3359", - "email": "valeria@quintegrity.com" - }, - { - "id": 8708, - "guid": "b617d8a5-ac0d-4da9-99ab-4e7a6dc53693", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katelyn Morrison", - "company": "Superscope", - "phone": "832-433-3414", - "email": "katelyn@superscope.com" - }, - { - "id": 8709, - "guid": "b4504572-8cbe-4f4d-b145-df110e7bf9a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Hamphrey", - "company": "Multitiqua", - "phone": "850-413-3139", - "email": "hannah@multitiqua.com" - }, - { - "id": 8710, - "guid": "60420a28-040e-4be2-aa4f-37f36542eec6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Smith", - "company": "Multitiqua", - "phone": "843-516-3607", - "email": "allison@multitiqua.com" - }, - { - "id": 8711, - "guid": "434d0086-ce29-45a8-9c7f-e509cb0ca333", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Carroll", - "company": "Entcast", - "phone": "838-566-2525", - "email": "leah@entcast.com" - }, - { - "id": 8712, - "guid": "a9f6d811-5e21-45ea-ae20-f2a50518cee9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Oldman", - "company": "Enlogia", - "phone": "831-426-3903", - "email": "kylie@enlogia.com" - }, - { - "id": 8713, - "guid": "f8701fcb-9ff7-4d46-a616-cc9d6f5d3bb8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Oldridge", - "company": "Steganoconiche", - "phone": "891-401-2673", - "email": "faith@steganoconiche.com" - }, - { - "id": 8714, - "guid": "127c9cba-9c1c-47af-a8bf-6b02e4174470", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Chapman", - "company": "SysVenamerica", - "phone": "889-511-2406", - "email": "katelyn@sysvenamerica.com" - }, - { - "id": 8715, - "guid": "e5f32096-4972-4c7a-8e30-b8904d356837", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Freeman", - "company": "iMedconik", - "phone": "811-444-2421", - "email": "leah@imedconik.com" - }, - { - "id": 8716, - "guid": "bfee4ff4-031f-4bab-9992-95a603210897", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Audrey Adamson", - "company": "Quintegrity", - "phone": "857-490-3730", - "email": "audrey@quintegrity.com" - }, - { - "id": 8717, - "guid": "5da377ca-3d92-49ba-ac35-2a83334c6746", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Conors", - "company": "Genland", - "phone": "804-405-2026", - "email": "morgan@genland.com" - }, - { - "id": 8718, - "guid": "99efedfe-b6c4-41b2-9548-39055531a826", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Hancock", - "company": "Orthosoft", - "phone": "846-498-2178", - "email": "anna@orthosoft.com" - }, - { - "id": 8719, - "guid": "2423568d-dcbd-4d6f-a24f-97b1d6fd3e8e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Gate", - "company": "Titanigraf", - "phone": "884-511-3754", - "email": "isabella@titanigraf.com" - }, - { - "id": 8720, - "guid": "f5caa2c1-1148-4790-864e-e88843e1eb57", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Ogden", - "company": "eSteganoergy", - "phone": "836-423-3580", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 8721, - "guid": "bda4f5af-ebb3-4174-8113-99b64e5e4991", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Milton", - "company": "eSteganoergy", - "phone": "893-515-2424", - "email": "gabriella@esteganoergy.com" - }, - { - "id": 8722, - "guid": "314a3ec3-0ec2-4ff2-a88c-4de95f15ce54", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Crossman", - "company": "Conotomics", - "phone": "828-490-2685", - "email": "jocelyn@conotomics.com" - }, - { - "id": 8723, - "guid": "2e0218d4-e891-49d6-b942-d9cd271b5fc2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katelyn Chandter", - "company": "Ameritron", - "phone": "827-574-2840", - "email": "katelyn@ameritron.com" - }, - { - "id": 8724, - "guid": "0ec8c918-a7c7-49da-aed7-0154bb7a0277", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Miller", - "company": "Netseco", - "phone": "804-456-3452", - "email": "vanessa@netseco.com" - }, - { - "id": 8725, - "guid": "c175dfd4-634a-4a57-a968-563f275f5267", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Miers", - "company": "Jamrola", - "phone": "887-427-2346", - "email": "morgan@jamrola.com" - }, - { - "id": 8726, - "guid": "15f07203-d5c3-4fb5-a9cb-0643cb3643bd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Vaughan", - "company": "Quintegrity", - "phone": "870-569-2150", - "email": "trinity@quintegrity.com" - }, - { - "id": 8727, - "guid": "a8110813-4e90-4d0c-97ca-1bea6eadc2e9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Goldman", - "company": "Safetrust", - "phone": "892-536-2629", - "email": "riley@safetrust.com" - }, - { - "id": 8728, - "guid": "a2b612ce-fdb1-44e4-a97a-11d6339638ac", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Sherlock", - "company": "Titanigraf", - "phone": "863-528-2455", - "email": "taylor@titanigraf.com" - }, - { - "id": 8729, - "guid": "8605b3b8-65f6-421d-9ec6-fd5ade1db50a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Waller", - "company": "US Infratouch", - "phone": "890-449-2852", - "email": "sarah@us infratouch.com" - }, - { - "id": 8730, - "guid": "27c56790-3a23-44e4-8498-72c20feca562", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Galbraith", - "company": "Inridium", - "phone": "863-544-3702", - "email": "payton@inridium.com" - }, - { - "id": 8731, - "guid": "91420fe5-52fc-43a7-9434-b0308be97287", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Neal", - "company": "iMedconik", - "phone": "820-418-2560", - "email": "autumn@imedconik.com" - }, - { - "id": 8732, - "guid": "085b2605-d93a-4bfa-a799-7186fb45923d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Carter", - "company": "Qualserve", - "phone": "878-594-3609", - "email": "elizabeth@qualserve.com" - }, - { - "id": 8733, - "guid": "7c1d0a0e-f8ce-4aac-97a5-0d2a1ffd0086", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaylee Osborne", - "company": "Cryptotemplate", - "phone": "844-461-3645", - "email": "kaylee@cryptotemplate.com" - }, - { - "id": 8734, - "guid": "2944ad0a-a2b1-412f-8e86-c33c4f0c030c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Ogden", - "company": "Syssoft", - "phone": "822-532-2885", - "email": "rachel@syssoft.com" - }, - { - "id": 8735, - "guid": "a750b167-f26f-48c9-9fe6-08ed9da3039b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Molligan", - "company": "Airdyne", - "phone": "883-402-3306", - "email": "lily@airdyne.com" - }, - { - "id": 8736, - "guid": "8efe3218-781c-4125-b378-ebe4244cb944", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Hailey", - "company": "iOptystix", - "phone": "836-538-2783", - "email": "grace@ioptystix.com" - }, - { - "id": 8737, - "guid": "5667f87e-f62f-4e09-95f4-64f6b15e7d9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Higgins", - "company": "Truegate", - "phone": "858-596-2514", - "email": "samantha@truegate.com" - }, - { - "id": 8738, - "guid": "57109875-100c-432c-a377-b43925110ce5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jasmine Oliver", - "company": "Unologic", - "phone": "881-575-2090", - "email": "jasmine@unologic.com" - }, - { - "id": 8739, - "guid": "b7b69d67-6d40-49bf-b6cf-d6bdf1163cf9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Thornton", - "company": "Infragraph", - "phone": "840-423-2027", - "email": "ariana@infragraph.com" - }, - { - "id": 8740, - "guid": "ad4c7966-8228-43b9-843b-6127dc1ac56e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Davidson", - "company": "Infragraph", - "phone": "836-581-2627", - "email": "chloe@infragraph.com" - }, - { - "id": 8741, - "guid": "4e9218e4-9895-43de-a7e6-15ed028dbbeb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Hoggarth", - "company": "Orthosoft", - "phone": "895-592-2564", - "email": "hannah@orthosoft.com" - }, - { - "id": 8742, - "guid": "417a1a19-862a-4976-9e12-2bdd0f4f9817", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Davidson", - "company": "Robotemplate", - "phone": "867-438-2893", - "email": "faith@robotemplate.com" - }, - { - "id": 8743, - "guid": "ff2150c7-a675-4aff-ad4c-fb55c3f92a09", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Carter", - "company": "SysVenamerica", - "phone": "814-528-3359", - "email": "mia@sysvenamerica.com" - }, - { - "id": 8744, - "guid": "082233a0-c8a4-4193-a178-d5036e69213c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Ogden", - "company": "Ventanium", - "phone": "841-594-2534", - "email": "serenity@ventanium.com" - }, - { - "id": 8745, - "guid": "7da04544-35b0-406b-80c1-6ccdd15d57c8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Walkman", - "company": "iOptystix", - "phone": "841-553-3941", - "email": "mariah@ioptystix.com" - }, - { - "id": 8746, - "guid": "9d62092d-817a-4390-aee5-9fc5a3fbbecc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Harrison", - "company": "Turbomart", - "phone": "878-417-3208", - "email": "alexandra@turbomart.com" - }, - { - "id": 8747, - "guid": "85aa8487-5065-45e4-9f77-d865d77aaba5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brianna Gilmore", - "company": "SysUSA", - "phone": "877-487-3853", - "email": "brianna@sysusa.com" - }, - { - "id": 8748, - "guid": "e07a5c3e-af91-47a8-aaa9-385cd3f6c60e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Gerald", - "company": "Compuamerica", - "phone": "820-472-2355", - "email": "emily@compuamerica.com" - }, - { - "id": 8749, - "guid": "228cca7c-f7c4-416d-87c1-a89dd8d7bdd3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jocelyn White", - "company": "Xeicon", - "phone": "850-508-2404", - "email": "jocelyn@xeicon.com" - }, - { - "id": 8750, - "guid": "24aea4d9-3b60-45f2-9445-0da1cb2991f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Hodges", - "company": "Indisco", - "phone": "860-515-2656", - "email": "alexandra@indisco.com" - }, - { - "id": 8751, - "guid": "b1654e5d-c333-48f9-aaa3-11e7e59512ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Michaelson", - "company": "Conrama", - "phone": "827-566-2279", - "email": "claire@conrama.com" - }, - { - "id": 8752, - "guid": "8653abb8-fc9c-4a5c-a8f6-611f9802c45e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Abigail Waller", - "company": "Quintegrity", - "phone": "848-486-2250", - "email": "abigail@quintegrity.com" - }, - { - "id": 8753, - "guid": "4be4f0aa-08bb-46fc-b3cf-93804c402614", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Hoggarth", - "company": "Compuamerica", - "phone": "802-531-3359", - "email": "sophie@compuamerica.com" - }, - { - "id": 8754, - "guid": "bca53c1b-2923-47c8-a8ae-a1cfeba63854", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Chapman", - "company": "Inridium", - "phone": "871-567-2251", - "email": "caroline@inridium.com" - }, - { - "id": 8755, - "guid": "ac4fdd14-75db-427e-8880-e422432b0534", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Chapman", - "company": "Westtomik", - "phone": "868-508-2377", - "email": "andrea@westtomik.com" - }, - { - "id": 8756, - "guid": "198faeb8-1953-423c-a259-453435567f81", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Hawkins", - "company": "Keytheon", - "phone": "853-422-2303", - "email": "savannah@keytheon.com" - }, - { - "id": 8757, - "guid": "7181e0db-43e9-4d31-a1c7-630d6dfd79d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Hawkins", - "company": "Navivacs", - "phone": "806-492-3086", - "email": "serenity@navivacs.com" - }, - { - "id": 8758, - "guid": "50bd5455-d619-4a7d-ac49-fea7cc19b039", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Watson", - "company": "Cryptotegrity", - "phone": "889-433-2504", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 8759, - "guid": "f053a763-2acc-4b17-b615-6bf03fe67889", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Higgins", - "company": "SysVenamerica", - "phone": "871-578-3436", - "email": "khloe@sysvenamerica.com" - }, - { - "id": 8760, - "guid": "64d91a1a-ff6b-4897-aefa-446a3d078f46", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Clapton", - "company": "Syssoft", - "phone": "831-466-3260", - "email": "brooklyn@syssoft.com" - }, - { - "id": 8761, - "guid": "3b390b04-7101-4822-840d-4cafdf2472f2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Young", - "company": "Hypervaco", - "phone": "827-409-3631", - "email": "riley@hypervaco.com" - }, - { - "id": 8762, - "guid": "4d37f0b8-ca65-4b07-a5bd-85bf74195863", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Hoggarth", - "company": "eSteganoergy", - "phone": "885-496-3416", - "email": "mia@esteganoergy.com" - }, - { - "id": 8763, - "guid": "fb68ddc6-4768-4d8a-a423-ce19f40c5e50", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mackenzie Young", - "company": "Teknoplexon", - "phone": "811-497-2928", - "email": "mackenzie@teknoplexon.com" - }, - { - "id": 8764, - "guid": "da75a316-7676-4a74-bf2f-eb6ea295f5b1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Calhoun", - "company": "Allnet", - "phone": "866-401-3136", - "email": "kaitlyn@allnet.com" - }, - { - "id": 8765, - "guid": "a87e6650-1ecc-49ce-ba26-c44bbd57244f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Oswald", - "company": "Ventanium", - "phone": "863-583-3963", - "email": "grace@ventanium.com" - }, - { - "id": 8766, - "guid": "758fea71-69ba-4dc6-9e6e-e2b4a1612743", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Youmans", - "company": "Conotomics", - "phone": "847-520-2390", - "email": "isabelle@conotomics.com" - }, - { - "id": 8767, - "guid": "1a369bd5-8bc9-46c8-b4bf-64593829a6d8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Bush", - "company": "Skydata", - "phone": "873-554-3041", - "email": "leah@skydata.com" - }, - { - "id": 8768, - "guid": "ad832760-a997-464e-88cb-ca130927132d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Molligan", - "company": "Thermotomic", - "phone": "899-509-3472", - "email": "payton@thermotomic.com" - }, - { - "id": 8769, - "guid": "0e827b43-2a24-4e7b-96b7-7e37bba0f0a6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Morrison", - "company": "Vencom", - "phone": "830-588-3860", - "email": "vanessa@vencom.com" - }, - { - "id": 8770, - "guid": "4102cade-1bbe-4ea1-8c83-f36f560c6c03", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Higgins", - "company": "Jamconik", - "phone": "884-433-2811", - "email": "khloe@jamconik.com" - }, - { - "id": 8771, - "guid": "23776005-8854-4b85-831e-03e28a95e02f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Oswald", - "company": "Hypervaco", - "phone": "824-567-3583", - "email": "madeline@hypervaco.com" - }, - { - "id": 8772, - "guid": "9efdbc2e-097a-47f7-a32d-71a18b055b64", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Carey", - "company": "iOptystix", - "phone": "893-426-2394", - "email": "brianna@ioptystix.com" - }, - { - "id": 8773, - "guid": "8617f804-90cd-4ffa-ba19-2f8dde701dea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Riley Miers", - "company": "Orthomedia", - "phone": "812-493-2722", - "email": "riley@orthomedia.com" - }, - { - "id": 8774, - "guid": "b3b53f73-3912-4723-8d46-5c89102d044f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alyssa Nash", - "company": "US Infratouch", - "phone": "820-594-3908", - "email": "alyssa@us infratouch.com" - }, - { - "id": 8775, - "guid": "aa6159fe-cedf-4aa9-b487-9af996de6bd5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexandra Galbraith", - "company": "Qualserve", - "phone": "841-414-3751", - "email": "alexandra@qualserve.com" - }, - { - "id": 8776, - "guid": "659f0f27-eeff-45b8-bd3e-a3621c42aec7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Olivia Vance", - "company": "Ventanium", - "phone": "815-574-2525", - "email": "olivia@ventanium.com" - }, - { - "id": 8777, - "guid": "c207611a-4ead-4419-ba6c-e48c9e2bc4e6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Gilbert", - "company": "Genland", - "phone": "816-467-3336", - "email": "kylie@genland.com" - }, - { - "id": 8778, - "guid": "29a1bd8d-7823-4bd4-9fbb-ba24502d8192", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Nash", - "company": "Polytheon", - "phone": "837-520-3614", - "email": "nevaeh@polytheon.com" - }, - { - "id": 8779, - "guid": "5ea4fc37-7eda-402a-ac05-13769c28d453", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Timmons", - "company": "iEnland", - "phone": "884-504-2522", - "email": "brooklyn@ienland.com" - }, - { - "id": 8780, - "guid": "afad02ce-2e80-40f4-9e28-2e6349dc902f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Gate", - "company": "Vencom", - "phone": "801-471-3586", - "email": "chloe@vencom.com" - }, - { - "id": 8781, - "guid": "1737859c-bddf-47d4-8672-aa1645926517", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Walkman", - "company": "Westmedia", - "phone": "813-403-2317", - "email": "sophie@westmedia.com" - }, - { - "id": 8782, - "guid": "630087ed-dec3-46f1-a0d9-58d62283dcc4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Walkman", - "company": "Celgra", - "phone": "862-470-3752", - "email": "genesis@celgra.com" - }, - { - "id": 8783, - "guid": "acace6b3-83d1-49d5-9dfe-0da936196cd0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Gustman", - "company": "US Infratouch", - "phone": "806-537-3752", - "email": "victoria@us infratouch.com" - }, - { - "id": 8784, - "guid": "b491bcb0-4f9c-4fa9-8112-5004f19ef60a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Fulton", - "company": "Teraserv", - "phone": "814-481-3806", - "email": "sophie@teraserv.com" - }, - { - "id": 8785, - "guid": "d010d44b-ed42-43b0-9db1-2e9afdfa4aba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Cramer", - "company": "Videobanc", - "phone": "820-579-2327", - "email": "kaylee@videobanc.com" - }, - { - "id": 8786, - "guid": "99288248-31f4-4617-824c-36b637347bb1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Goodman", - "company": "Titanigraf", - "phone": "890-448-2091", - "email": "alexandra@titanigraf.com" - }, - { - "id": 8787, - "guid": "323bce62-1117-4075-8002-bb3576bd7246", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Watson", - "company": "Nanobanc", - "phone": "830-501-2847", - "email": "peyton@nanobanc.com" - }, - { - "id": 8788, - "guid": "5e7003c7-2d87-41dc-b90e-eaad4fef9b29", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabelle Gill", - "company": "Interliant", - "phone": "849-401-3011", - "email": "isabelle@interliant.com" - }, - { - "id": 8789, - "guid": "9dfc10df-4c23-4c78-990e-a822ad0de9d1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Fulton", - "company": "US Infratouch", - "phone": "869-426-3945", - "email": "zoey@us infratouch.com" - }, - { - "id": 8790, - "guid": "007d375a-2575-419d-a17e-928b958b5422", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Hoggarth", - "company": "Infraique", - "phone": "893-475-3866", - "email": "brooklyn@infraique.com" - }, - { - "id": 8791, - "guid": "fcadf158-2c05-44f8-bc48-1faaff8422dc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Adamson", - "company": "Inridium", - "phone": "826-578-2737", - "email": "morgan@inridium.com" - }, - { - "id": 8792, - "guid": "fe9ae140-6b1c-4ded-bcda-c9cd76a02222", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Brooks", - "company": "Netsystems", - "phone": "884-462-3792", - "email": "avery@netsystems.com" - }, - { - "id": 8793, - "guid": "8bbd8618-74b5-432c-a3cd-803f0e91e190", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Wayne", - "company": "Robotomic", - "phone": "869-487-2736", - "email": "katherine@robotomic.com" - }, - { - "id": 8794, - "guid": "1b4c9679-80d1-4abf-9153-68b6955ee7ba", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Galbraith", - "company": "Fibrotopia", - "phone": "840-574-2250", - "email": "andrea@fibrotopia.com" - }, - { - "id": 8795, - "guid": "94205e64-fba0-4b37-9595-30971e3aecd4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Vaughan", - "company": "SysUSA", - "phone": "806-529-2106", - "email": "camila@sysusa.com" - }, - { - "id": 8796, - "guid": "8357cd4a-e8b9-4afe-8f8a-17d5884a0d78", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Watson", - "company": "Keytheon", - "phone": "860-449-2328", - "email": "gabrielle@keytheon.com" - }, - { - "id": 8797, - "guid": "b4335a78-3995-486a-88fd-0250ae2ba18c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Gibbs", - "company": "Systheon", - "phone": "856-522-3597", - "email": "genesis@systheon.com" - }, - { - "id": 8798, - "guid": "d7b08e71-1807-4a0b-be49-bfde51b28a92", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Osborne", - "company": "Airdyne", - "phone": "865-447-2737", - "email": "ella@airdyne.com" - }, - { - "id": 8799, - "guid": "010e23ad-5ca6-4143-bf2e-df7ec1b71b1c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Hawkins", - "company": "iSkyvaco", - "phone": "878-580-2816", - "email": "allison@iskyvaco.com" - }, - { - "id": 8800, - "guid": "343af1e1-4810-4044-aecf-677b95849614", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Morrison", - "company": "Infraique", - "phone": "877-428-3744", - "email": "amelia@infraique.com" - }, - { - "id": 8801, - "guid": "c4d5fd89-442d-4882-b944-057762bd4e70", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Waller", - "company": "Ameritron", - "phone": "870-545-3228", - "email": "trinity@ameritron.com" - }, - { - "id": 8802, - "guid": "b5e8d746-8daa-45d7-b221-b608a9485828", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Day", - "company": "Fibrotopia", - "phone": "837-571-3624", - "email": "sarah@fibrotopia.com" - }, - { - "id": 8803, - "guid": "86e562c3-45b2-40d2-8893-fcf56aa6f43e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Sherlock", - "company": "Safeagra", - "phone": "850-511-3025", - "email": "serenity@safeagra.com" - }, - { - "id": 8804, - "guid": "0fbb4eb6-d95b-455c-a037-7b1a599b6558", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley White", - "company": "Netsystems", - "phone": "860-579-2010", - "email": "riley@netsystems.com" - }, - { - "id": 8805, - "guid": "9ae45d29-26d0-4173-b40b-0738a8611c1f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Victoria White", - "company": "Titanirola", - "phone": "888-434-3407", - "email": "victoria@titanirola.com" - }, - { - "id": 8806, - "guid": "51275ae9-ad9e-44ea-a70f-a0a2f1546fcc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace White", - "company": "Robotomic", - "phone": "803-594-2428", - "email": "grace@robotomic.com" - }, - { - "id": 8807, - "guid": "b88b1ff9-b96e-46d0-babc-4b5328268765", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Chandter", - "company": "Anaframe", - "phone": "828-488-2614", - "email": "zoey@anaframe.com" - }, - { - "id": 8808, - "guid": "082c9f89-2e93-4a02-b965-28de4674bf16", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Nash", - "company": "Techtron", - "phone": "881-431-3940", - "email": "alexa@techtron.com" - }, - { - "id": 8809, - "guid": "70bc0cf8-7584-4a9d-8ad9-ef070db3ae70", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Murphy", - "company": "InfoAirway", - "phone": "885-583-3664", - "email": "morgan@infoairway.com" - }, - { - "id": 8810, - "guid": "110065a3-0787-403c-b147-fae7e5308db1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Gate", - "company": "Safetrust", - "phone": "809-489-3668", - "email": "maria@safetrust.com" - }, - { - "id": 8811, - "guid": "202001f1-803d-4832-8beb-f28483e0ce08", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Wayne", - "company": "Keytheon", - "phone": "807-420-2424", - "email": "anna@keytheon.com" - }, - { - "id": 8812, - "guid": "8148fd81-3eeb-455d-8d3f-7a8909b2d478", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Hardman", - "company": "OpKeycomm", - "phone": "840-511-2500", - "email": "emily@opkeycomm.com" - }, - { - "id": 8813, - "guid": "c943f1a2-b0f4-4af5-a192-14b63d65a590", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Carey", - "company": "Generola", - "phone": "854-423-3669", - "email": "gianna@generola.com" - }, - { - "id": 8814, - "guid": "bf0b4532-f30b-464d-9870-e9d790e4887c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Valeria Oldman", - "company": "Robotemplate", - "phone": "834-448-3921", - "email": "valeria@robotemplate.com" - }, - { - "id": 8815, - "guid": "5a51f967-abdc-4da9-ac45-08a6113ca48a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Daniels", - "company": "iOptystix", - "phone": "871-536-2781", - "email": "evelyn@ioptystix.com" - }, - { - "id": 8816, - "guid": "806e32a8-6deb-4493-8e7d-a332dbd84fd2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Gardner", - "company": "Technogra", - "phone": "854-483-3270", - "email": "bella@technogra.com" - }, - { - "id": 8817, - "guid": "c5fff96f-b600-47d7-a655-4e6f69343f76", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Waller", - "company": "Sontopia", - "phone": "871-554-2637", - "email": "kaitlyn@sontopia.com" - }, - { - "id": 8818, - "guid": "30c39ee1-3a01-45c1-87c6-adea27e25b29", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Young", - "company": "Cryptotemplate", - "phone": "887-455-3885", - "email": "lily@cryptotemplate.com" - }, - { - "id": 8819, - "guid": "a16e5c15-20a1-4184-8516-485def224dd5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Adamson", - "company": "iEnland", - "phone": "827-458-2638", - "email": "caroline@ienland.com" - }, - { - "id": 8820, - "guid": "039eb966-7c9e-4f48-95a6-4bf11eb690c7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Creighton", - "company": "Thermotomic", - "phone": "812-463-3695", - "email": "allison@thermotomic.com" - }, - { - "id": 8821, - "guid": "77d95ddd-2090-4e3b-8ee5-18c68f05f6ac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Hancock", - "company": "Allnet", - "phone": "856-578-2446", - "email": "jessica@allnet.com" - }, - { - "id": 8822, - "guid": "5c72a270-4a50-4052-9fa8-a0cd2e23f7f6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Hancock", - "company": "Truetomic", - "phone": "814-565-2522", - "email": "caroline@truetomic.com" - }, - { - "id": 8823, - "guid": "8c406bb0-1e62-4453-bf12-b59401d4fedc", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jessica Walkman", - "company": "Navivacs", - "phone": "800-479-2231", - "email": "jessica@navivacs.com" - }, - { - "id": 8824, - "guid": "b7225c4e-3ed2-4f79-8b10-fa0f2c54755c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Hardman", - "company": "Tekcar", - "phone": "817-401-2428", - "email": "leah@tekcar.com" - }, - { - "id": 8825, - "guid": "f0f14678-cf0a-4f84-a942-2ba6e346239c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Creighton", - "company": "US Infratouch", - "phone": "883-583-2539", - "email": "jocelyn@us infratouch.com" - }, - { - "id": 8826, - "guid": "aa90ca6b-49d3-4b08-a223-fbc15bc2bfcf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Adamson", - "company": "Techtron", - "phone": "872-505-3840", - "email": "maya@techtron.com" - }, - { - "id": 8827, - "guid": "dfa1071c-caad-4b66-b14e-d5614419872a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Hardman", - "company": "Cryptotegrity", - "phone": "843-402-2145", - "email": "allison@cryptotegrity.com" - }, - { - "id": 8828, - "guid": "162375a3-e230-4744-a3a7-89b48c1df686", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Gilbert", - "company": "iQualcar", - "phone": "891-547-3468", - "email": "ella@iqualcar.com" - }, - { - "id": 8829, - "guid": "841912b2-b21e-49ca-9b3b-d4c031cd00c6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Watson", - "company": "Venconix", - "phone": "820-418-2220", - "email": "lauren@venconix.com" - }, - { - "id": 8830, - "guid": "2bf1f3d4-1536-461a-89ae-5bdc3ffb69ce", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Murphy", - "company": "Idmax", - "phone": "898-475-3205", - "email": "sophia@idmax.com" - }, - { - "id": 8831, - "guid": "b6a29d21-9965-4702-a216-898f401688b5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Miers", - "company": "Orthomedia", - "phone": "822-450-3096", - "email": "evelyn@orthomedia.com" - }, - { - "id": 8832, - "guid": "14c3b278-9f11-4a60-9d32-e3019f98d87a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Brown", - "company": "Interliant", - "phone": "814-482-2633", - "email": "riley@interliant.com" - }, - { - "id": 8833, - "guid": "18db32f9-78ce-4f62-a266-975bbd1f93ea", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madison Crossman", - "company": "RoboAerlogix", - "phone": "819-530-2406", - "email": "madison@roboaerlogix.com" - }, - { - "id": 8834, - "guid": "82966a80-04f3-4ca2-a51c-f4fff26d6be3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Brickman", - "company": "Enlogia", - "phone": "802-443-2394", - "email": "faith@enlogia.com" - }, - { - "id": 8835, - "guid": "831e5342-ef0b-41b6-8f64-3007aeeeae87", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Wallace", - "company": "Orthomedia", - "phone": "895-485-2212", - "email": "grace@orthomedia.com" - }, - { - "id": 8836, - "guid": "9e076318-1c04-4c4f-b048-a12dc5339560", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Gate", - "company": "Idmax", - "phone": "876-482-2219", - "email": "maria@idmax.com" - }, - { - "id": 8837, - "guid": "00c61dd2-1cc2-409e-8de3-2bbe6f3eed45", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bella Oswald", - "company": "Syssoft", - "phone": "893-543-2111", - "email": "bella@syssoft.com" - }, - { - "id": 8838, - "guid": "66824818-205f-4d6e-b319-f8496ea6a42d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Hamphrey", - "company": "Conrama", - "phone": "811-580-3434", - "email": "kayla@conrama.com" - }, - { - "id": 8839, - "guid": "345beb6b-32b3-4b4f-8c91-b605069abc1b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Timmons", - "company": "Quintegrity", - "phone": "861-420-3742", - "email": "lauren@quintegrity.com" - }, - { - "id": 8840, - "guid": "dc0de5fe-4e1d-42c1-bb59-5037d6774731", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity Brown", - "company": "Robocomm", - "phone": "843-505-2079", - "email": "trinity@robocomm.com" - }, - { - "id": 8841, - "guid": "9b9a63a4-97a6-4c31-8f5b-07cc53667bf1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Owen", - "company": "Quintegrity", - "phone": "883-462-3682", - "email": "mya@quintegrity.com" - }, - { - "id": 8842, - "guid": "626a174e-07b7-4061-af2d-cc89cd0a37e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Fulton", - "company": "Genland", - "phone": "825-568-3114", - "email": "sarah@genland.com" - }, - { - "id": 8843, - "guid": "51b7853e-6a6b-4e98-958e-97de991feb17", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Haig", - "company": "Westtomik", - "phone": "844-484-3328", - "email": "nevaeh@westtomik.com" - }, - { - "id": 8844, - "guid": "5e73db91-3737-474e-b462-f8708c266d9c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Molligan", - "company": "Genland", - "phone": "859-430-2398", - "email": "serenity@genland.com" - }, - { - "id": 8845, - "guid": "a2d02355-6b8e-4a81-aa1a-c027792cea6e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Nathan", - "company": "Anagraph", - "phone": "843-468-2817", - "email": "brooke@anagraph.com" - }, - { - "id": 8846, - "guid": "a19f2aa2-2779-4005-98fc-5d679e2869fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Gilmore", - "company": "Generola", - "phone": "813-539-3660", - "email": "victoria@generola.com" - }, - { - "id": 8847, - "guid": "10bf3456-d25b-466e-a758-ac2e5e8252eb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Vaughan", - "company": "Conrama", - "phone": "856-490-3561", - "email": "addison@conrama.com" - }, - { - "id": 8848, - "guid": "09ab56d0-678a-4f1d-ade0-aa1415744e43", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Brooks", - "company": "Tekcar", - "phone": "880-436-3181", - "email": "lillian@tekcar.com" - }, - { - "id": 8849, - "guid": "2ce232a4-9842-409e-803a-2cee21f5a64a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Milton", - "company": "Celgra", - "phone": "837-486-3649", - "email": "destiny@celgra.com" - }, - { - "id": 8850, - "guid": "9ed7e01d-e56a-434f-bab2-8f75682ab24f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Neal", - "company": "Unconix", - "phone": "853-528-3600", - "email": "avery@unconix.com" - }, - { - "id": 8851, - "guid": "d39b766b-1d65-414e-949e-800a64df8096", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jocelyn Conors", - "company": "Cryptotemplate", - "phone": "810-473-2735", - "email": "jocelyn@cryptotemplate.com" - }, - { - "id": 8852, - "guid": "3c9988ae-9c06-4666-8064-d7af1f8ab397", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Charlson", - "company": "Netseco", - "phone": "809-486-2099", - "email": "makayla@netseco.com" - }, - { - "id": 8853, - "guid": "7bdbd94a-aa52-4238-97ae-b2a7d260379b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Gate", - "company": "Safeagra", - "phone": "881-465-2638", - "email": "vanessa@safeagra.com" - }, - { - "id": 8854, - "guid": "e71573a8-33cf-4508-8a40-412ed35eb237", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Wallace", - "company": "Conotomics", - "phone": "828-531-3104", - "email": "audrey@conotomics.com" - }, - { - "id": 8855, - "guid": "4f5cb61c-66eb-42f9-b106-16c82207f2e7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kayla Morrison", - "company": "Fibroserve", - "phone": "898-456-3680", - "email": "kayla@fibroserve.com" - }, - { - "id": 8856, - "guid": "9357add6-2fa1-4a8f-ab00-4dfd46f9043f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Milton", - "company": "Allphysiche", - "phone": "819-495-3766", - "email": "molly@allphysiche.com" - }, - { - "id": 8857, - "guid": "faf0fe61-2605-4ddf-a871-4235e624cec7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Otis", - "company": "Mescatron", - "phone": "853-540-2126", - "email": "kaitlyn@mescatron.com" - }, - { - "id": 8858, - "guid": "07ee27db-5510-462e-b1fd-5f8fdf888d69", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Fisher", - "company": "Titanirola", - "phone": "815-549-2183", - "email": "alexandra@titanirola.com" - }, - { - "id": 8859, - "guid": "c6214139-76b2-4a4f-a8b3-e9476549e643", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexandra Hamphrey", - "company": "Unconix", - "phone": "898-571-3595", - "email": "alexandra@unconix.com" - }, - { - "id": 8860, - "guid": "3b17acce-a9cc-4184-a522-6a130bf80c7d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Warren", - "company": "Orthomedia", - "phone": "869-467-2536", - "email": "elizabeth@orthomedia.com" - }, - { - "id": 8861, - "guid": "3450c38f-aa77-4227-b341-a72a8937fb7c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Croftoon", - "company": "Unologic", - "phone": "810-478-2921", - "email": "nevaeh@unologic.com" - }, - { - "id": 8862, - "guid": "2d66ae1a-899b-4fed-83b3-7020230ee1b2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Ford", - "company": "iSkyvaco", - "phone": "862-554-2585", - "email": "makayla@iskyvaco.com" - }, - { - "id": 8863, - "guid": "f15fe1d7-2ea0-43af-acbc-bc777c3a0ede", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Oliver", - "company": "Fibrotouch", - "phone": "855-426-3092", - "email": "payton@fibrotouch.com" - }, - { - "id": 8864, - "guid": "98dd119f-9a18-4de7-a524-f4a854be656e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Calhoun", - "company": "Safeagra", - "phone": "899-422-3091", - "email": "kaylee@safeagra.com" - }, - { - "id": 8865, - "guid": "1fe69d17-7446-47ce-9d26-0c939ec98602", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie WifKinson", - "company": "Nanobanc", - "phone": "853-408-2777", - "email": "mackenzie@nanobanc.com" - }, - { - "id": 8866, - "guid": "5a07472f-eb5d-4906-8e66-d40085c653c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jasmine Cook", - "company": "Gigaura", - "phone": "866-404-3026", - "email": "jasmine@gigaura.com" - }, - { - "id": 8867, - "guid": "9c0b630a-633a-411d-ba69-8aa112e6bfad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Cook", - "company": "Robocomm", - "phone": "855-581-3758", - "email": "anna@robocomm.com" - }, - { - "id": 8868, - "guid": "b2260ac4-513c-41e4-ba26-365957c7e8a6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Youmans", - "company": "Unologic", - "phone": "812-534-3965", - "email": "kaitlyn@unologic.com" - }, - { - "id": 8869, - "guid": "ea87c66e-f97c-4385-896b-b77871c95031", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Winter", - "company": "Multitiqua", - "phone": "804-465-3538", - "email": "victoria@multitiqua.com" - }, - { - "id": 8870, - "guid": "46882256-bcbb-4759-b976-59a5d7924c4b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Day", - "company": "Pericenta", - "phone": "883-493-2646", - "email": "addison@pericenta.com" - }, - { - "id": 8871, - "guid": "804062cd-e251-4eb6-8098-606c2c5dc14f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Bush", - "company": "Aluco", - "phone": "863-436-3101", - "email": "alexa@aluco.com" - }, - { - "id": 8872, - "guid": "25fc7a2a-f698-4227-a35e-1591881f4503", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophia Gilbert", - "company": "iEnland", - "phone": "810-482-3934", - "email": "sophia@ienland.com" - }, - { - "id": 8873, - "guid": "a997847e-701c-4186-8170-52a22f2a45ab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoey Winter", - "company": "Airdyne", - "phone": "877-497-2128", - "email": "zoey@airdyne.com" - }, - { - "id": 8874, - "guid": "ab4b0144-69ff-4953-9eaf-cda3b8325bbc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Hodges", - "company": "Keytheon", - "phone": "864-425-3140", - "email": "lily@keytheon.com" - }, - { - "id": 8875, - "guid": "52c63d02-9d56-434c-b1a6-fbda7726375c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Gibbs", - "company": "Raylog", - "phone": "856-515-3364", - "email": "gabrielle@raylog.com" - }, - { - "id": 8876, - "guid": "1eaff0b5-0597-4274-87e2-bf8eee47d5b2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Oliver", - "company": "iEnland", - "phone": "869-590-2937", - "email": "savannah@ienland.com" - }, - { - "id": 8877, - "guid": "044eba01-5aa0-454f-96df-fd4058869582", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Chapman", - "company": "Thermotomic", - "phone": "803-495-2242", - "email": "mya@thermotomic.com" - }, - { - "id": 8878, - "guid": "f4da29f7-5cde-4903-8663-8bb1d23fadd8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Galbraith", - "company": "Westgate", - "phone": "801-453-3050", - "email": "vanessa@westgate.com" - }, - { - "id": 8879, - "guid": "ee31b70f-ffac-4dfd-870b-674331eb2f7a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Wesley", - "company": "Unologic", - "phone": "806-521-3872", - "email": "savannah@unologic.com" - }, - { - "id": 8880, - "guid": "003514dd-1043-4bc1-843e-50c5dca4e638", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mariah Goodman", - "company": "Ameritron", - "phone": "822-589-3750", - "email": "mariah@ameritron.com" - }, - { - "id": 8881, - "guid": "676e936d-4e7b-4ffc-a144-a76e07ed02f3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Charlson", - "company": "Gigaura", - "phone": "869-580-2511", - "email": "grace@gigaura.com" - }, - { - "id": 8882, - "guid": "8a4609bc-4e54-407e-b19f-d1b3c2d2350c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Higgins", - "company": "Ameritron", - "phone": "877-564-3264", - "email": "melanie@ameritron.com" - }, - { - "id": 8883, - "guid": "6e476687-df69-4224-ad62-27ddcfbb1315", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Mercer", - "company": "Thermotomic", - "phone": "887-465-3272", - "email": "alexis@thermotomic.com" - }, - { - "id": 8884, - "guid": "a1f0a928-7ebe-46d3-b240-86dca03ae693", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Oldridge", - "company": "Tekcar", - "phone": "848-411-2387", - "email": "zoey@tekcar.com" - }, - { - "id": 8885, - "guid": "acaee3ce-7e62-4956-8377-a74f8a092a71", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Gerald", - "company": "Xeicon", - "phone": "826-597-3657", - "email": "rachel@xeicon.com" - }, - { - "id": 8886, - "guid": "15a69bfb-3d71-4f2b-b2e7-a149d08bbf85", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Genesis Hoggarth", - "company": "Jamconik", - "phone": "832-580-2298", - "email": "genesis@jamconik.com" - }, - { - "id": 8887, - "guid": "d46fbd3f-9a77-4ccd-9d61-deb82b5da32d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Higgins", - "company": "Pericenta", - "phone": "844-578-2260", - "email": "khloe@pericenta.com" - }, - { - "id": 8888, - "guid": "bd2a9340-106f-4de2-bafb-07629563ddad", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Hoggarth", - "company": "Indisco", - "phone": "836-596-3561", - "email": "mariah@indisco.com" - }, - { - "id": 8889, - "guid": "d6b0acd6-8a8f-4a53-85da-831ba0b3308d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Harrison", - "company": "Keytheon", - "phone": "891-514-2153", - "email": "ariana@keytheon.com" - }, - { - "id": 8890, - "guid": "bbd133ca-55f4-44ad-a988-ad52596579a9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Ogden", - "company": "Orthomedia", - "phone": "880-497-3547", - "email": "eva@orthomedia.com" - }, - { - "id": 8891, - "guid": "6237bd77-968b-4a58-a6d7-a905257bc20c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Davidson", - "company": "Ameritron", - "phone": "805-474-2592", - "email": "kaitlyn@ameritron.com" - }, - { - "id": 8892, - "guid": "dd125378-c2b2-4038-9c9a-e384819cb1f5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Avery Turner", - "company": "Unologic", - "phone": "844-422-3245", - "email": "avery@unologic.com" - }, - { - "id": 8893, - "guid": "ea444a26-78bc-4abc-b0c2-c8cc33d26524", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lauren Gilson", - "company": "Entcast", - "phone": "860-593-2798", - "email": "lauren@entcast.com" - }, - { - "id": 8894, - "guid": "730a4827-31c9-43ec-a490-e086f6458806", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Adamson", - "company": "Sontopia", - "phone": "827-533-2314", - "email": "serenity@sontopia.com" - }, - { - "id": 8895, - "guid": "e7045cf9-cb29-4b2f-abc4-74f086434f40", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kayla Abramson", - "company": "US Omnigraphik", - "phone": "836-444-2638", - "email": "kayla@us omnigraphik.com" - }, - { - "id": 8896, - "guid": "3148cf6c-2b7e-436d-80c2-2b37695ebab2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Abramson", - "company": "Teraserv", - "phone": "835-575-2414", - "email": "madison@teraserv.com" - }, - { - "id": 8897, - "guid": "73401169-9e85-4f85-8c63-d305ab772a1d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Sherlock", - "company": "Sontopia", - "phone": "867-428-2402", - "email": "zoe@sontopia.com" - }, - { - "id": 8898, - "guid": "48709b5b-d54a-4e4d-8def-34843acc5d87", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Carrington", - "company": "Pacwest", - "phone": "808-524-2377", - "email": "aubrey@pacwest.com" - }, - { - "id": 8899, - "guid": "4bb0a298-a60a-4923-8067-8d3e34b22831", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Gibbs", - "company": "US Omnigraphik", - "phone": "876-523-2502", - "email": "kayla@us omnigraphik.com" - }, - { - "id": 8900, - "guid": "030519cd-32a1-45fa-b5c8-86e30ac2b236", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Chapman", - "company": "Systheon", - "phone": "872-567-2422", - "email": "mariah@systheon.com" - }, - { - "id": 8901, - "guid": "366f616d-e10f-4308-8b43-13c66c299885", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Carroll", - "company": "Aluco", - "phone": "842-415-2577", - "email": "maya@aluco.com" - }, - { - "id": 8902, - "guid": "6388bafc-440b-4058-8b6f-8361f911cc9a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Hancock", - "company": "Videobanc", - "phone": "888-525-3673", - "email": "arianna@videobanc.com" - }, - { - "id": 8903, - "guid": "0be0c6af-dc87-43ba-9421-b287d76ae9a9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Brooks", - "company": "Jamconik", - "phone": "882-537-2836", - "email": "evelyn@jamconik.com" - }, - { - "id": 8904, - "guid": "34df624e-02fc-4fb4-a0f6-41e9da853bde", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Wesley", - "company": "Unologic", - "phone": "804-517-2711", - "email": "ava@unologic.com" - }, - { - "id": 8905, - "guid": "d5236b30-57f2-4f1e-ba80-9674c8fb7b0a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Vaughan", - "company": "Nanobanc", - "phone": "861-590-2289", - "email": "valeria@nanobanc.com" - }, - { - "id": 8906, - "guid": "a0c50579-a6df-4dbd-8e81-473b4c25c0a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Carey", - "company": "SysUSA", - "phone": "850-526-2922", - "email": "kylie@sysusa.com" - }, - { - "id": 8907, - "guid": "6301b069-e930-42cf-819e-82f3c4c070b4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Oldridge", - "company": "Pacwest", - "phone": "816-589-3621", - "email": "madeline@pacwest.com" - }, - { - "id": 8908, - "guid": "516f1086-6458-447b-96f9-83568a4571a1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Audrey Adamson", - "company": "iEnland", - "phone": "823-559-2106", - "email": "audrey@ienland.com" - }, - { - "id": 8909, - "guid": "32773459-427d-4e0f-9382-638e245f29db", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Davidson", - "company": "iSkyvaco", - "phone": "810-416-2004", - "email": "allison@iskyvaco.com" - }, - { - "id": 8910, - "guid": "b37ca76f-2dfd-4dc1-9e13-d515aa8c2327", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Creighton", - "company": "iQualcar", - "phone": "888-556-3894", - "email": "natalie@iqualcar.com" - }, - { - "id": 8911, - "guid": "fc16a44e-d77f-4cee-a02c-3e4aec699cea", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Daniels", - "company": "Anaframe", - "phone": "817-479-2210", - "email": "sarah@anaframe.com" - }, - { - "id": 8912, - "guid": "b7a641c7-8619-4587-9032-ed8aae00c6e8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Youmans", - "company": "Netseco", - "phone": "857-562-2561", - "email": "kaylee@netseco.com" - }, - { - "id": 8913, - "guid": "479cf290-5d2f-4db5-924f-5cda40c7050f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Vaughan", - "company": "OpKeycomm", - "phone": "859-421-3305", - "email": "avery@opkeycomm.com" - }, - { - "id": 8914, - "guid": "37701dd0-c842-46b0-adeb-aa25f73659d9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Smith", - "company": "Superscope", - "phone": "886-469-3424", - "email": "claire@superscope.com" - }, - { - "id": 8915, - "guid": "a6737e37-7398-4588-853c-a571653d71c2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Cramer", - "company": "Conrama", - "phone": "806-420-3531", - "email": "molly@conrama.com" - }, - { - "id": 8916, - "guid": "e7e1a0e6-566d-4bc3-80a5-15e18947b180", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Nelson", - "company": "Interliant", - "phone": "808-593-2845", - "email": "isabelle@interliant.com" - }, - { - "id": 8917, - "guid": "380e736e-7355-401a-bb57-c2c290153aaa", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Oldridge", - "company": "Technogra", - "phone": "855-596-3251", - "email": "kaylee@technogra.com" - }, - { - "id": 8918, - "guid": "55936df7-ae52-47ee-b039-5d44de300e20", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Angelina Wayne", - "company": "Westtomik", - "phone": "862-526-3811", - "email": "angelina@westtomik.com" - }, - { - "id": 8919, - "guid": "e1fdeb44-a704-478c-b2f3-9bd4f4051daf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Riley Thorndike", - "company": "Proline", - "phone": "851-516-2551", - "email": "riley@proline.com" - }, - { - "id": 8920, - "guid": "b087cc76-3e40-4fe3-b6bb-c4bc7cb448a7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Day", - "company": "RoboAerlogix", - "phone": "841-473-2334", - "email": "samantha@roboaerlogix.com" - }, - { - "id": 8921, - "guid": "99b123e9-e391-4552-a0b5-721a7b542974", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Ogden", - "company": "Rapigrafix", - "phone": "896-510-3073", - "email": "alexis@rapigrafix.com" - }, - { - "id": 8922, - "guid": "08e7045d-4507-43c5-b188-c676a2371a7b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Owen", - "company": "Transtouch", - "phone": "829-459-2338", - "email": "maya@transtouch.com" - }, - { - "id": 8923, - "guid": "e4b022fb-d7ca-4c5a-af32-efb96a705da5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Goodman", - "company": "Entcast", - "phone": "812-423-2056", - "email": "julia@entcast.com" - }, - { - "id": 8924, - "guid": "38bfdb90-3641-4200-81a2-8eb7d6c55a03", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Croftoon", - "company": "Proline", - "phone": "881-515-3280", - "email": "madelyn@proline.com" - }, - { - "id": 8925, - "guid": "d3f38132-320b-4a05-ae61-58d5e0ebecdb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Hawkins", - "company": "Infragraph", - "phone": "825-503-3677", - "email": "olivia@infragraph.com" - }, - { - "id": 8926, - "guid": "3e7f3a52-c4e0-4afd-99ce-6a077848bbe7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Turner", - "company": "Netseco", - "phone": "826-502-3524", - "email": "arianna@netseco.com" - }, - { - "id": 8927, - "guid": "1fc359bb-e92e-4a9b-a077-6bc6aad7fb54", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Neal", - "company": "Generola", - "phone": "866-589-2072", - "email": "alexa@generola.com" - }, - { - "id": 8928, - "guid": "288ae37b-00ab-4b5e-b71d-43c3a299ba81", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Hancock", - "company": "Teratopia", - "phone": "857-534-2669", - "email": "eva@teratopia.com" - }, - { - "id": 8929, - "guid": "4783cde8-38e0-4d8d-9af6-8ab1555a6f0c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Gustman", - "company": "Fibrotouch", - "phone": "833-530-2268", - "email": "rachel@fibrotouch.com" - }, - { - "id": 8930, - "guid": "54171105-86f7-43ea-b7ae-67c68b23d341", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Daniels", - "company": "Jamrola", - "phone": "843-457-3579", - "email": "mackenzie@jamrola.com" - }, - { - "id": 8931, - "guid": "cb6c4ba8-0796-45c3-aff2-552abfa53b9c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Fisher", - "company": "Anagraph", - "phone": "820-445-3098", - "email": "sofia@anagraph.com" - }, - { - "id": 8932, - "guid": "92b65195-320f-42b9-9c73-4d9debaad8c3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Carroll", - "company": "Idmax", - "phone": "831-562-2896", - "email": "hannah@idmax.com" - }, - { - "id": 8933, - "guid": "3f2b3637-e5a2-45ce-80a7-3a89c698e102", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Hodges", - "company": "Robotemplate", - "phone": "846-421-2474", - "email": "molly@robotemplate.com" - }, - { - "id": 8934, - "guid": "83e7a93a-325f-47fa-b30e-15e5cd58e4f8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Miller", - "company": "Hypervaco", - "phone": "872-418-2762", - "email": "zoey@hypervaco.com" - }, - { - "id": 8935, - "guid": "54cfaca1-8e42-4d66-b886-c2d8520a98c7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Thomson", - "company": "Videobanc", - "phone": "833-564-2922", - "email": "katelyn@videobanc.com" - }, - { - "id": 8936, - "guid": "d9e8975c-ece1-4810-bf3e-b2782038538f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia Harrison", - "company": "Mescatron", - "phone": "834-487-3791", - "email": "sophia@mescatron.com" - }, - { - "id": 8937, - "guid": "ddf85d98-7a2f-4cb4-928a-708a2b3ea4c1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Galbraith", - "company": "Westmedia", - "phone": "807-400-3242", - "email": "trinity@westmedia.com" - }, - { - "id": 8938, - "guid": "fb5e47fe-4088-4ecc-9869-5128df7a895a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Clapton", - "company": "Superscope", - "phone": "848-441-2619", - "email": "aubrey@superscope.com" - }, - { - "id": 8939, - "guid": "8a70ea44-00f6-4f1f-8a8d-62d1b545ebf9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Carter", - "company": "Xeicon", - "phone": "873-457-3659", - "email": "anna@xeicon.com" - }, - { - "id": 8940, - "guid": "65ce3f90-1c3b-4e90-9bd6-f68642765bf5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Higgins", - "company": "iMedconik", - "phone": "889-540-3012", - "email": "peyton@imedconik.com" - }, - { - "id": 8941, - "guid": "65a67d5f-4e34-4b85-adfc-4e99197c6fae", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Waller", - "company": "Airdyne", - "phone": "832-451-2227", - "email": "paige@airdyne.com" - }, - { - "id": 8942, - "guid": "0c75b12c-5f54-4844-b7d6-13fe3573e8e9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kylie Oswald", - "company": "Robotomic", - "phone": "800-556-3110", - "email": "kylie@robotomic.com" - }, - { - "id": 8943, - "guid": "f2af0848-0a61-46e1-af3d-cbcb1bad5794", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Webster", - "company": "iOptystix", - "phone": "869-508-3173", - "email": "emily@ioptystix.com" - }, - { - "id": 8944, - "guid": "267913b5-008f-46f4-8111-6f53c2c94a8b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Conors", - "company": "Thermotomic", - "phone": "834-584-3332", - "email": "valeria@thermotomic.com" - }, - { - "id": 8945, - "guid": "993a26d4-8ef0-4222-8486-9f6588a3a1b0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Creighton", - "company": "OpKeycomm", - "phone": "836-510-2276", - "email": "layla@opkeycomm.com" - }, - { - "id": 8946, - "guid": "cd6d07dc-d028-4d91-b15a-12895b66e4fa", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Gerald", - "company": "Idmax", - "phone": "897-540-3809", - "email": "payton@idmax.com" - }, - { - "id": 8947, - "guid": "889769fa-70fb-4cb5-b09e-662ce92624c1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Oliver", - "company": "Ventanium", - "phone": "814-574-2598", - "email": "caroline@ventanium.com" - }, - { - "id": 8948, - "guid": "6f1aef2c-f788-4ad0-934c-319102c176a4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Destiny Nash", - "company": "Mescatron", - "phone": "833-483-3244", - "email": "destiny@mescatron.com" - }, - { - "id": 8949, - "guid": "a7f59da1-9aa2-467d-ae19-0ff008e2a1f4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Gill", - "company": "Orthosoft", - "phone": "884-524-3745", - "email": "maya@orthosoft.com" - }, - { - "id": 8950, - "guid": "7c36de3d-e5aa-4775-a59a-3521a88a6e22", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Osborne", - "company": "Pacwest", - "phone": "890-580-3077", - "email": "autumn@pacwest.com" - }, - { - "id": 8951, - "guid": "d0f087a7-13e8-4390-8295-e9800434e698", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Hoggarth", - "company": "Skydata", - "phone": "879-429-3318", - "email": "molly@skydata.com" - }, - { - "id": 8952, - "guid": "a32be629-10e7-4a5f-ae91-35f267f4099f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Otis", - "company": "Airdyne", - "phone": "852-512-3507", - "email": "destiny@airdyne.com" - }, - { - "id": 8953, - "guid": "4f4dc774-4ea8-4b1e-b6c5-88118e001a31", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Webster", - "company": "Xeicon", - "phone": "803-506-3668", - "email": "trinity@xeicon.com" - }, - { - "id": 8954, - "guid": "67b0a750-1d3b-46e6-8d29-535f81c213db", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Winter", - "company": "Celgra", - "phone": "801-551-2562", - "email": "alexis@celgra.com" - }, - { - "id": 8955, - "guid": "beb38966-7b97-4355-ba74-10ca7d2c317f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Wood", - "company": "Allphysiche", - "phone": "801-467-2130", - "email": "katherine@allphysiche.com" - }, - { - "id": 8956, - "guid": "7773eccd-ee91-42cf-9271-72569531444a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Melanie Oswald", - "company": "Aluco", - "phone": "892-432-2463", - "email": "melanie@aluco.com" - }, - { - "id": 8957, - "guid": "61211f65-9b13-4703-b053-46d9ee6641d3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sofia Harrison", - "company": "Westgate", - "phone": "894-511-3026", - "email": "sofia@westgate.com" - }, - { - "id": 8958, - "guid": "10cb3429-0674-4763-a7bc-883142449f3a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Angelina Wayne", - "company": "eSteganoergy", - "phone": "829-464-2328", - "email": "angelina@esteganoergy.com" - }, - { - "id": 8959, - "guid": "03d05636-4159-4406-85cb-050d5b7f97c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Young", - "company": "Robotemplate", - "phone": "887-528-3199", - "email": "abigail@robotemplate.com" - }, - { - "id": 8960, - "guid": "50ee6a40-16b4-4604-bdb2-61f933c92153", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Hardman", - "company": "Robotomic", - "phone": "833-560-2650", - "email": "leah@robotomic.com" - }, - { - "id": 8961, - "guid": "4366736f-d3c8-4f65-8bb9-d8f2b6ccb5a8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Morrison", - "company": "Conotomics", - "phone": "839-559-2822", - "email": "emma@conotomics.com" - }, - { - "id": 8962, - "guid": "80924487-3daf-4319-8d96-330dd0fa2f79", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Payton Gill", - "company": "iQualcar", - "phone": "895-530-3359", - "email": "payton@iqualcar.com" - }, - { - "id": 8963, - "guid": "8607966e-7f29-40c8-af51-a44f836c759e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Nash", - "company": "Turbomart", - "phone": "898-597-3194", - "email": "gianna@turbomart.com" - }, - { - "id": 8964, - "guid": "d8904346-3ff6-4c02-878f-d655a468ac31", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Turner", - "company": "Safetrust", - "phone": "828-410-3577", - "email": "emma@safetrust.com" - }, - { - "id": 8965, - "guid": "b62740ba-70b9-41af-84c0-9bac47eac200", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Youmans", - "company": "Cryptotegrity", - "phone": "857-496-2535", - "email": "riley@cryptotegrity.com" - }, - { - "id": 8966, - "guid": "9d427321-dea5-4272-957d-825a3a0cdbce", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Molligan", - "company": "Jamrola", - "phone": "836-479-2820", - "email": "lily@jamrola.com" - }, - { - "id": 8967, - "guid": "40bf14f0-52b9-4eb2-bd85-132481f51d43", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Adamson", - "company": "Rapigrafix", - "phone": "829-432-3134", - "email": "valeria@rapigrafix.com" - }, - { - "id": 8968, - "guid": "de8418ba-faa6-42c4-ae5f-dfc6b80cad5a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Wallace", - "company": "Entcast", - "phone": "871-498-3884", - "email": "gianna@entcast.com" - }, - { - "id": 8969, - "guid": "b1fd626a-9a29-4eb5-a56e-bb0ce7ee215f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Gilson", - "company": "Transtouch", - "phone": "855-497-3691", - "email": "zoey@transtouch.com" - }, - { - "id": 8970, - "guid": "38aefad9-6a98-4630-9da2-dfa7ba46363d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Haig", - "company": "Thermotomic", - "phone": "832-515-2421", - "email": "lauren@thermotomic.com" - }, - { - "id": 8971, - "guid": "83d90c92-0110-452c-8ecf-844b5148fa7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Gilmore", - "company": "Safeagra", - "phone": "879-415-2224", - "email": "serenity@safeagra.com" - }, - { - "id": 8972, - "guid": "aca0bf20-2b5c-4074-8fdd-a3ccfad16a9a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Caroline Molligan", - "company": "SysVenamerica", - "phone": "864-558-3198", - "email": "caroline@sysvenamerica.com" - }, - { - "id": 8973, - "guid": "47fd216a-a85f-4d22-b091-a5305fc0be9a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Morrison", - "company": "Transtouch", - "phone": "892-574-3952", - "email": "layla@transtouch.com" - }, - { - "id": 8974, - "guid": "385c3bec-676a-4d7c-b172-e16372cb4a86", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Nathan", - "company": "SysUSA", - "phone": "839-428-2293", - "email": "kaylee@sysusa.com" - }, - { - "id": 8975, - "guid": "5a12fca5-ae17-4b2d-a1ac-b3c484ba30dd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Creighton", - "company": "Interliant", - "phone": "811-420-3619", - "email": "victoria@interliant.com" - }, - { - "id": 8976, - "guid": "cc92d6d0-430c-4fbc-98eb-7e60c46760e2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lillian Carey", - "company": "Mescaridic", - "phone": "837-490-3176", - "email": "lillian@mescaridic.com" - }, - { - "id": 8977, - "guid": "7d891f62-8464-44f0-bece-04ae39fe4e4c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Trinity Thorndike", - "company": "Airdyne", - "phone": "821-533-2623", - "email": "trinity@airdyne.com" - }, - { - "id": 8978, - "guid": "95444e4f-1356-4eec-a43c-5025fa542cb7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Watson", - "company": "Thermotomic", - "phone": "811-528-2416", - "email": "elizabeth@thermotomic.com" - }, - { - "id": 8979, - "guid": "6327978b-2915-4d33-8b2d-115e93f2d582", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Conors", - "company": "Hypervaco", - "phone": "830-497-2223", - "email": "katherine@hypervaco.com" - }, - { - "id": 8980, - "guid": "e108f2e6-d4c2-40d9-b355-fd17ffa9784f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Conors", - "company": "Videobanc", - "phone": "871-508-2315", - "email": "kaitlyn@videobanc.com" - }, - { - "id": 8981, - "guid": "8a4e8b8f-1e23-4b6f-9b1b-6f77d16d7471", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Adamson", - "company": "eSteganoergy", - "phone": "847-523-2914", - "email": "olivia@esteganoergy.com" - }, - { - "id": 8982, - "guid": "d9696760-7b75-40ff-8b21-68091b3fb5cf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Brown", - "company": "Anagraph", - "phone": "868-425-3011", - "email": "charlotte@anagraph.com" - }, - { - "id": 8983, - "guid": "64d51a5c-e0a6-4170-a82d-eaa7ef6553ff", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Cook", - "company": "Fibroserve", - "phone": "880-443-2257", - "email": "mariah@fibroserve.com" - }, - { - "id": 8984, - "guid": "40e54c6c-0e47-424b-a3e9-fafa7723b9ad", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Crossman", - "company": "Pacwest", - "phone": "818-573-3073", - "email": "paige@pacwest.com" - }, - { - "id": 8985, - "guid": "85aa6a66-dfd7-4642-90ff-11103034ea15", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Gill", - "company": "Fibrotouch", - "phone": "860-588-2093", - "email": "faith@fibrotouch.com" - }, - { - "id": 8986, - "guid": "d2faa103-13ba-4488-950a-bbd8f8a6dd54", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Otis", - "company": "Ventanium", - "phone": "863-497-3991", - "email": "kimberly@ventanium.com" - }, - { - "id": 8987, - "guid": "acfc17e3-08b4-4dc5-b2a8-50aabdd11b11", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Audrey Ford", - "company": "Inridium", - "phone": "851-493-2365", - "email": "audrey@inridium.com" - }, - { - "id": 8988, - "guid": "6cbd83aa-b09e-4d42-87de-ede989b9429f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Murphy", - "company": "Fibrotopia", - "phone": "879-563-3609", - "email": "vanessa@fibrotopia.com" - }, - { - "id": 8989, - "guid": "b7b5af3f-07ef-44c4-9a88-c2de4303c066", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Adamson", - "company": "Conrama", - "phone": "808-443-3665", - "email": "kylie@conrama.com" - }, - { - "id": 8990, - "guid": "5d0012a1-26f9-4414-b2e5-95f4762e087b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Crossman", - "company": "Technogra", - "phone": "865-489-3885", - "email": "claire@technogra.com" - }, - { - "id": 8991, - "guid": "14daf91c-c631-49ee-a519-1806c1721a57", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Miln", - "company": "Systheon", - "phone": "859-553-3388", - "email": "ashley@systheon.com" - }, - { - "id": 8992, - "guid": "51b2b55a-d6c5-4256-808f-9e6dd5b62eed", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Turner", - "company": "Safeagra", - "phone": "870-545-2887", - "email": "alyssa@safeagra.com" - }, - { - "id": 8993, - "guid": "6e2a567d-4a7c-42c5-b8df-997a84cf01e8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Gerald", - "company": "Videobanc", - "phone": "898-548-2230", - "email": "lauren@videobanc.com" - }, - { - "id": 8994, - "guid": "26b7fc8f-9266-4119-9a8b-79e304e7a686", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Smith", - "company": "Truetomic", - "phone": "839-489-3730", - "email": "alyssa@truetomic.com" - }, - { - "id": 8995, - "guid": "1ef340a6-d753-4664-8a71-e7cf95215ef3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Watson", - "company": "Orthomedia", - "phone": "861-562-3057", - "email": "makayla@orthomedia.com" - }, - { - "id": 8996, - "guid": "c192b660-811f-4806-b0dc-c02413b44e7a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maria Gardner", - "company": "Aluco", - "phone": "806-547-2471", - "email": "maria@aluco.com" - }, - { - "id": 8997, - "guid": "700b9d8b-6b36-4ce6-80dd-5400e353d245", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Wesley", - "company": "Hypervaco", - "phone": "867-568-2659", - "email": "maya@hypervaco.com" - }, - { - "id": 8998, - "guid": "c2420ddf-9f58-4497-b37e-62f242b1803b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Nash", - "company": "Orthosoft", - "phone": "867-591-3324", - "email": "kylie@orthosoft.com" - }, - { - "id": 8999, - "guid": "bee754c0-2a1d-4e28-bebb-0a2cfb0abccf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Oswald", - "company": "Netsystems", - "phone": "849-535-2677", - "email": "taylor@netsystems.com" - }, - { - "id": 9000, - "guid": "112ed03f-3864-4a11-a4fb-a07ca4f8cb0c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Crossman", - "company": "Truetomic", - "phone": "852-444-2886", - "email": "bella@truetomic.com" - }, - { - "id": 9001, - "guid": "d891c730-0141-4a1f-aa3c-b4efc3ed6e49", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Daniels", - "company": "Qualserve", - "phone": "844-414-3559", - "email": "zoey@qualserve.com" - }, - { - "id": 9002, - "guid": "42585dcb-28cc-4840-92df-cd98f98e771a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Adamson", - "company": "Multitiqua", - "phone": "839-516-3719", - "email": "hannah@multitiqua.com" - }, - { - "id": 9003, - "guid": "76b70861-b42c-422b-9a66-0cba98c8b405", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Chandter", - "company": "Airdyne", - "phone": "882-556-2592", - "email": "eva@airdyne.com" - }, - { - "id": 9004, - "guid": "123a0b68-d51b-44e8-b9e1-473af6fad797", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Gustman", - "company": "Raylog", - "phone": "837-579-3324", - "email": "maya@raylog.com" - }, - { - "id": 9005, - "guid": "874e297c-d7ab-461b-b29d-0de1148d93db", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bailey Goodman", - "company": "Teraserv", - "phone": "865-581-2604", - "email": "bailey@teraserv.com" - }, - { - "id": 9006, - "guid": "a65d479a-cd4a-40a3-8db7-60c91f0e49a9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Ogden", - "company": "Netseco", - "phone": "812-559-2404", - "email": "natalie@netseco.com" - }, - { - "id": 9007, - "guid": "2f148006-accd-43e2-99c6-3013560bf016", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Miers", - "company": "Textiqua", - "phone": "865-493-2773", - "email": "samantha@textiqua.com" - }, - { - "id": 9008, - "guid": "9693f211-2490-4ead-9e31-e4d6f907c2c0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Thorndike", - "company": "Multitiqua", - "phone": "824-416-2034", - "email": "kayla@multitiqua.com" - }, - { - "id": 9009, - "guid": "78f6051d-a16a-4c31-85e6-f44ae2fd71a9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Miller", - "company": "Enlogia", - "phone": "847-482-2064", - "email": "taylor@enlogia.com" - }, - { - "id": 9010, - "guid": "712772c7-6039-43a8-acc9-b24179f5ef50", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kayla Gustman", - "company": "Anaframe", - "phone": "890-537-2730", - "email": "kayla@anaframe.com" - }, - { - "id": 9011, - "guid": "103e21dd-fdf3-47b6-8965-16826c3f02e6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Goldman", - "company": "Truegate", - "phone": "817-451-3505", - "email": "aubrey@truegate.com" - }, - { - "id": 9012, - "guid": "23c0b8e7-7b85-4cce-a354-d447972dfde6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Neal", - "company": "Nanobanc", - "phone": "833-587-2998", - "email": "lillian@nanobanc.com" - }, - { - "id": 9013, - "guid": "940d989b-0c92-4b7a-b262-f602d4b40632", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Webster", - "company": "Raylog", - "phone": "836-432-3100", - "email": "chloe@raylog.com" - }, - { - "id": 9014, - "guid": "fd4a4fa6-f26c-4d1d-856c-2c8d2c87bcf3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Day", - "company": "Idmax", - "phone": "867-404-3118", - "email": "julia@idmax.com" - }, - { - "id": 9015, - "guid": "b2c667f6-997a-4569-aa0a-595e0327265e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Autumn Calhoun", - "company": "iEnland", - "phone": "823-435-3623", - "email": "autumn@ienland.com" - }, - { - "id": 9016, - "guid": "f60da5a3-6eb2-47fb-a828-cf70791e08c3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooklyn Warren", - "company": "Pericenta", - "phone": "803-423-3199", - "email": "brooklyn@pericenta.com" - }, - { - "id": 9017, - "guid": "6ad7b01e-a460-4c9c-b9fc-fc4ec77914e0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Gilbert", - "company": "Aluco", - "phone": "848-438-3173", - "email": "autumn@aluco.com" - }, - { - "id": 9018, - "guid": "b1cf9658-f782-45eb-8b46-418c2c8d3d53", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Ward", - "company": "Robocomm", - "phone": "803-571-3004", - "email": "layla@robocomm.com" - }, - { - "id": 9019, - "guid": "458954a4-4e92-4138-b18e-9b2a81b9efc8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Wesley", - "company": "Compuamerica", - "phone": "816-430-2394", - "email": "addison@compuamerica.com" - }, - { - "id": 9020, - "guid": "fe9d967e-5212-46b2-ad5c-fc7e9249eabe", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Hardman", - "company": "Ventanium", - "phone": "808-561-3507", - "email": "ashley@ventanium.com" - }, - { - "id": 9021, - "guid": "ef7f0471-3706-44cf-b80a-fa396e23ff1a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Watson", - "company": "Anaframe", - "phone": "805-489-3042", - "email": "gabrielle@anaframe.com" - }, - { - "id": 9022, - "guid": "db996be3-8627-4d43-8663-78ad93270852", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Ford", - "company": "Openserve", - "phone": "837-555-3064", - "email": "angelina@openserve.com" - }, - { - "id": 9023, - "guid": "49eaab0c-8d89-4030-ae4c-465c3e9dddee", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Sheldon", - "company": "US Infratouch", - "phone": "890-490-3108", - "email": "layla@us infratouch.com" - }, - { - "id": 9024, - "guid": "b7e7c412-278b-4228-8610-a15a6ddd937c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Carter", - "company": "Vencom", - "phone": "811-432-3919", - "email": "brianna@vencom.com" - }, - { - "id": 9025, - "guid": "ccab5224-e251-4b48-849e-9726b160f1ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Gustman", - "company": "Orthomedia", - "phone": "871-483-2080", - "email": "alyssa@orthomedia.com" - }, - { - "id": 9026, - "guid": "31fd91e6-a448-4b2d-ad36-715816096489", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Gustman", - "company": "Allnet", - "phone": "821-400-2978", - "email": "riley@allnet.com" - }, - { - "id": 9027, - "guid": "47edb618-2dff-4798-bdee-798afa8c6153", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Youmans", - "company": "Unconix", - "phone": "875-528-3795", - "email": "bailey@unconix.com" - }, - { - "id": 9028, - "guid": "b68a51ae-7c9f-4797-b91e-8e6765222dab", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Carroll", - "company": "Generola", - "phone": "836-568-3741", - "email": "valeria@generola.com" - }, - { - "id": 9029, - "guid": "d522f672-f79b-415f-b008-27fd97c3d690", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Gardner", - "company": "Polytheon", - "phone": "896-471-2659", - "email": "brooklyn@polytheon.com" - }, - { - "id": 9030, - "guid": "ab684df3-15f4-44ed-975a-3217f0f32b49", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Hardman", - "company": "Allphysiche", - "phone": "859-495-2685", - "email": "abigail@allphysiche.com" - }, - { - "id": 9031, - "guid": "79637660-7089-4a9e-9582-0a1da144bcfb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Gill", - "company": "Entcast", - "phone": "807-443-2963", - "email": "sofia@entcast.com" - }, - { - "id": 9032, - "guid": "4fbee00e-6f4b-40bb-a33b-f3e1c7ae4b4c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Higgins", - "company": "Techtron", - "phone": "896-470-3597", - "email": "maya@techtron.com" - }, - { - "id": 9033, - "guid": "f10a4f3d-998f-442b-a93b-da5104f9348f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoey Chapman", - "company": "Titanirola", - "phone": "801-575-3701", - "email": "zoey@titanirola.com" - }, - { - "id": 9034, - "guid": "db85eb07-3894-46d1-884a-8bbe50e53e2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Miers", - "company": "Mescaridic", - "phone": "879-584-2911", - "email": "aaliyah@mescaridic.com" - }, - { - "id": 9035, - "guid": "d0e8e320-7ea2-4db0-97d8-54f513f1c916", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Oliver", - "company": "Turbomart", - "phone": "885-568-2438", - "email": "hailey@turbomart.com" - }, - { - "id": 9036, - "guid": "77ccd7d6-8077-48b2-96b8-356e72ea5190", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica White", - "company": "iQualcar", - "phone": "851-407-3822", - "email": "jessica@iqualcar.com" - }, - { - "id": 9037, - "guid": "1a1cc512-f842-472f-a46f-941d786d5045", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Cook", - "company": "Netseco", - "phone": "899-571-2508", - "email": "andrea@netseco.com" - }, - { - "id": 9038, - "guid": "d5f37434-fa1e-47b9-b361-2c6caaf6daad", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jasmine Smith", - "company": "Cryptotegrity", - "phone": "885-494-3824", - "email": "jasmine@cryptotegrity.com" - }, - { - "id": 9039, - "guid": "ea067cff-66b7-48e5-a6c8-ea2bc9010d67", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Vaughan", - "company": "Qualserve", - "phone": "842-591-3887", - "email": "ashley@qualserve.com" - }, - { - "id": 9040, - "guid": "74181988-e78c-4d4b-ae6a-e18dbdf8903e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Bush", - "company": "Conotomics", - "phone": "854-467-3794", - "email": "khloe@conotomics.com" - }, - { - "id": 9041, - "guid": "3ff3ab01-c605-4d40-9bb3-b3772b60c0f6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis WifKinson", - "company": "Celgra", - "phone": "859-555-3864", - "email": "alexis@celgra.com" - }, - { - "id": 9042, - "guid": "8c6c3f83-25e7-44ab-9b7c-14385d4cb9c6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Young", - "company": "Quintegrity", - "phone": "839-412-2383", - "email": "evelyn@quintegrity.com" - }, - { - "id": 9043, - "guid": "a5ecc2e6-807d-4826-b6b7-6eb25d22f5c9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Thorndike", - "company": "Mescaridic", - "phone": "800-454-2460", - "email": "katherine@mescaridic.com" - }, - { - "id": 9044, - "guid": "7c1524bf-eb75-4093-a7e1-ba2757c6dab8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Conors", - "company": "Aluco", - "phone": "841-533-2248", - "email": "makayla@aluco.com" - }, - { - "id": 9045, - "guid": "3176982d-0867-4147-8f15-25a8d341d3cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Abramson", - "company": "Netseco", - "phone": "838-542-3055", - "email": "grace@netseco.com" - }, - { - "id": 9046, - "guid": "687deb8d-1845-46fe-a21e-846d1e545a99", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Webster", - "company": "Textiqua", - "phone": "885-422-2743", - "email": "elizabeth@textiqua.com" - }, - { - "id": 9047, - "guid": "3e2c895b-1284-4fc4-b541-f07160dd099d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Hailey", - "company": "Openserve", - "phone": "844-488-3578", - "email": "grace@openserve.com" - }, - { - "id": 9048, - "guid": "e55d63ed-1d61-4d96-80b8-ebce22d0ecfa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Galbraith", - "company": "Tekcar", - "phone": "891-546-2889", - "email": "maya@tekcar.com" - }, - { - "id": 9049, - "guid": "f1916670-a447-41a2-a1ed-4808b7520d9f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Osborne", - "company": "Conrama", - "phone": "804-527-3501", - "email": "zoey@conrama.com" - }, - { - "id": 9050, - "guid": "d3e81b90-6615-4af2-b00e-4bb074aca31a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Paige Ford", - "company": "Qualserve", - "phone": "883-576-3009", - "email": "paige@qualserve.com" - }, - { - "id": 9051, - "guid": "fcdcbb71-1aa5-49ca-aa13-89d19e36ed04", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Miller", - "company": "eSteganoergy", - "phone": "861-495-2000", - "email": "lillian@esteganoergy.com" - }, - { - "id": 9052, - "guid": "8f699b42-3807-43ae-8bad-22e8d9249825", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Nash", - "company": "Inridium", - "phone": "813-573-3013", - "email": "emily@inridium.com" - }, - { - "id": 9053, - "guid": "cfb747fa-e1c8-48b2-8dba-cb7deace3cbc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabelle Brooks", - "company": "Superscope", - "phone": "850-400-3037", - "email": "isabelle@superscope.com" - }, - { - "id": 9054, - "guid": "c034ae89-17d8-4951-a9ca-77529b69ccb5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva White", - "company": "US Infratouch", - "phone": "818-525-2394", - "email": "eva@us infratouch.com" - }, - { - "id": 9055, - "guid": "b09ab643-4e17-4e53-8a3c-e75467923403", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Galbraith", - "company": "Technogra", - "phone": "875-560-3617", - "email": "aaliyah@technogra.com" - }, - { - "id": 9056, - "guid": "2c8a78ec-0e88-43a4-85d8-f92775ebf05b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Webster", - "company": "Fibrotouch", - "phone": "865-584-2828", - "email": "andrea@fibrotouch.com" - }, - { - "id": 9057, - "guid": "2204be85-3798-4bde-963f-5ff4ab1f9fde", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Ward", - "company": "Conrama", - "phone": "887-492-3953", - "email": "sophia@conrama.com" - }, - { - "id": 9058, - "guid": "3b5d2039-79e0-4bb3-ab11-13206b0f03cf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Carter", - "company": "Pacwest", - "phone": "882-502-3603", - "email": "gabriella@pacwest.com" - }, - { - "id": 9059, - "guid": "f229fbd5-5d08-4176-b5d7-4bff6a337ff8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Warren", - "company": "Tekcar", - "phone": "878-408-3557", - "email": "abigail@tekcar.com" - }, - { - "id": 9060, - "guid": "41bcd114-08ce-4d17-bfe8-640d74aea480", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Wayne", - "company": "Transtouch", - "phone": "849-413-2897", - "email": "leah@transtouch.com" - }, - { - "id": 9061, - "guid": "2b755b42-f088-46f9-b3e9-f73f24cc19dc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Croftoon", - "company": "Robotomic", - "phone": "855-565-2496", - "email": "victoria@robotomic.com" - }, - { - "id": 9062, - "guid": "db58337b-7cab-4762-a77e-2da111abd574", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Turner", - "company": "Anaframe", - "phone": "848-538-3260", - "email": "kimberly@anaframe.com" - }, - { - "id": 9063, - "guid": "1e2692bc-7894-495b-8639-cbf2d5a7cc8f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Sheldon", - "company": "Titanirola", - "phone": "846-579-2725", - "email": "destiny@titanirola.com" - }, - { - "id": 9064, - "guid": "17e00e9d-7bf7-4c90-9ed3-06886555ee83", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Audrey Sherlock", - "company": "Conotomics", - "phone": "851-512-3755", - "email": "audrey@conotomics.com" - }, - { - "id": 9065, - "guid": "1eb5a121-45a9-4bcf-b0b2-c2a329331271", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emily WifKinson", - "company": "Fibrotopia", - "phone": "869-596-2007", - "email": "emily@fibrotopia.com" - }, - { - "id": 9066, - "guid": "0820e456-a503-4df3-bcf6-b64bf209d67c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Carrington", - "company": "Truetomic", - "phone": "888-508-2017", - "email": "taylor@truetomic.com" - }, - { - "id": 9067, - "guid": "564ef0ff-f7ca-4770-a827-7428f521f041", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Gill", - "company": "Rapigrafix", - "phone": "824-449-3983", - "email": "hannah@rapigrafix.com" - }, - { - "id": 9068, - "guid": "0fbc2374-4130-45ab-9185-6f6f5edc3a24", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Wood", - "company": "Textiqua", - "phone": "844-410-3058", - "email": "zoey@textiqua.com" - }, - { - "id": 9069, - "guid": "1a109338-e797-49d1-a378-75202adccfa9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexis Ward", - "company": "Robotomic", - "phone": "845-580-2402", - "email": "alexis@robotomic.com" - }, - { - "id": 9070, - "guid": "8c0d81ba-7026-421d-a627-927677a3e408", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Charlson", - "company": "Westgate", - "phone": "838-520-2127", - "email": "emma@westgate.com" - }, - { - "id": 9071, - "guid": "fc4caee1-d871-4804-8f99-d13381850e6f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Conors", - "company": "iOptystix", - "phone": "807-544-3198", - "email": "camila@ioptystix.com" - }, - { - "id": 9072, - "guid": "26e96704-7b72-4bf1-b282-43cbf657cc24", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Timmons", - "company": "Titanigraf", - "phone": "881-456-2857", - "email": "brooke@titanigraf.com" - }, - { - "id": 9073, - "guid": "1fb5f516-485b-47a5-98e6-efaeb1a8424d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ella Campbell", - "company": "Infraique", - "phone": "829-571-2612", - "email": "ella@infraique.com" - }, - { - "id": 9074, - "guid": "0a4a61bc-dcd6-4881-846e-69a7be76016c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Murphy", - "company": "Keytheon", - "phone": "812-443-2686", - "email": "peyton@keytheon.com" - }, - { - "id": 9075, - "guid": "e4e72701-a1b4-4c9b-b1f0-52eefcc4dcfe", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Day", - "company": "Celgra", - "phone": "877-578-2002", - "email": "kayla@celgra.com" - }, - { - "id": 9076, - "guid": "90d45a76-c3e5-4c29-91d5-c0d645afc563", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Otis", - "company": "Pericenta", - "phone": "871-525-2110", - "email": "mackenzie@pericenta.com" - }, - { - "id": 9077, - "guid": "a295ac69-4e3e-4259-8d15-664a87b5011c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Murphy", - "company": "Transtouch", - "phone": "859-541-3285", - "email": "gianna@transtouch.com" - }, - { - "id": 9078, - "guid": "fbb9f59f-5ca6-425e-86de-d7eb7f199231", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alyssa Charlson", - "company": "Openserve", - "phone": "810-428-3349", - "email": "alyssa@openserve.com" - }, - { - "id": 9079, - "guid": "41cd36db-f671-4644-9198-e8c5766600a9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Hawkins", - "company": "Transtouch", - "phone": "886-553-2150", - "email": "sarah@transtouch.com" - }, - { - "id": 9080, - "guid": "ed726701-4d61-4961-8dbf-911aa41e7b78", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabriella Miln", - "company": "Multitiqua", - "phone": "859-508-3537", - "email": "gabriella@multitiqua.com" - }, - { - "id": 9081, - "guid": "f1d3a5ff-1c94-4155-8fe6-6ac7938ac5bb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Ogden", - "company": "SysUSA", - "phone": "887-403-2409", - "email": "jasmine@sysusa.com" - }, - { - "id": 9082, - "guid": "3eb6ce4b-4c96-4aee-a070-23f0aec35323", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Carroll", - "company": "Idmax", - "phone": "831-433-3310", - "email": "emma@idmax.com" - }, - { - "id": 9083, - "guid": "9c15e679-0fd3-46a1-aab0-23d7cbdff7eb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Carrington", - "company": "Allnet", - "phone": "807-534-2125", - "email": "alyssa@allnet.com" - }, - { - "id": 9084, - "guid": "af015149-9a87-4f24-9311-7ab1f45f5582", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia WifKinson", - "company": "Superscope", - "phone": "801-472-2399", - "email": "amelia@superscope.com" - }, - { - "id": 9085, - "guid": "03d88023-9bb5-403a-8a09-f50534476dc2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Creighton", - "company": "Hypervaco", - "phone": "852-492-3125", - "email": "bailey@hypervaco.com" - }, - { - "id": 9086, - "guid": "0b397ac9-b350-4118-b394-beb71f7f7ff7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brianna Cook", - "company": "Mescatron", - "phone": "813-586-3882", - "email": "brianna@mescatron.com" - }, - { - "id": 9087, - "guid": "fb8d5948-9a3e-41fb-8d0f-619722c42c0e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Brickman", - "company": "Aluco", - "phone": "836-558-3717", - "email": "zoey@aluco.com" - }, - { - "id": 9088, - "guid": "c73d7c31-0f1f-428a-a333-091b6f370fd5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lillian Carey", - "company": "iEnland", - "phone": "878-412-3775", - "email": "lillian@ienland.com" - }, - { - "id": 9089, - "guid": "9e2e0e55-e268-4d13-a47d-26b41f5f29dd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Camila Oswald", - "company": "SysVenamerica", - "phone": "843-450-2649", - "email": "camila@sysvenamerica.com" - }, - { - "id": 9090, - "guid": "1f6a2491-a7e5-4893-beaf-754df976bbad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Brooks", - "company": "Allphysiche", - "phone": "829-471-3251", - "email": "elizabeth@allphysiche.com" - }, - { - "id": 9091, - "guid": "337e6ce2-4bfe-4aba-919e-bedcd684e989", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Otis", - "company": "Skydata", - "phone": "886-468-2500", - "email": "trinity@skydata.com" - }, - { - "id": 9092, - "guid": "7460f21d-0338-4a9e-b528-5876fdaa4236", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Chandter", - "company": "Pericenta", - "phone": "823-551-2809", - "email": "valeria@pericenta.com" - }, - { - "id": 9093, - "guid": "9c376093-4eb5-4b74-82ac-1c1b9c3c6b5f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mackenzie Michaelson", - "company": "US Omnigraphik", - "phone": "829-412-3897", - "email": "mackenzie@us omnigraphik.com" - }, - { - "id": 9094, - "guid": "cad07d5b-50e0-40c7-8d80-a829a943ed37", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Murphy", - "company": "Indisco", - "phone": "890-464-3222", - "email": "paige@indisco.com" - }, - { - "id": 9095, - "guid": "e35eec40-9549-44f7-9dd5-e413aa881a5f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Wayne", - "company": "Indisco", - "phone": "849-455-2586", - "email": "faith@indisco.com" - }, - { - "id": 9096, - "guid": "afeacd7b-eac4-4e18-9c94-be08c3d11183", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Higgins", - "company": "Steganoconiche", - "phone": "850-515-2834", - "email": "julia@steganoconiche.com" - }, - { - "id": 9097, - "guid": "ef2de116-7e8a-4ad3-8648-a50a07bc174c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Hamphrey", - "company": "eEyetanic", - "phone": "899-516-2299", - "email": "zoey@eeyetanic.com" - }, - { - "id": 9098, - "guid": "7771e07d-f901-4e71-be3b-c07963d138ef", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Bush", - "company": "Raylog", - "phone": "863-537-2391", - "email": "peyton@raylog.com" - }, - { - "id": 9099, - "guid": "211c4db7-e13f-449b-8dec-a89b435b3e88", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Molligan", - "company": "Orthosoft", - "phone": "876-438-3860", - "email": "melanie@orthosoft.com" - }, - { - "id": 9100, - "guid": "e17b8d0d-cb90-40d1-a36f-c5e54e7aa10e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Mercer", - "company": "Qualserve", - "phone": "843-459-2529", - "email": "aubrey@qualserve.com" - }, - { - "id": 9101, - "guid": "04ecf962-43c4-475b-ad73-64bb6d7691fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Gardner", - "company": "Titanirola", - "phone": "811-400-3629", - "email": "maya@titanirola.com" - }, - { - "id": 9102, - "guid": "c0ef238d-ee3b-4e76-99a1-861eb537ec4c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Wesley", - "company": "Truetomic", - "phone": "899-550-3337", - "email": "lily@truetomic.com" - }, - { - "id": 9103, - "guid": "958f564f-99ca-4068-9e55-0e4d0a018550", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Carroll", - "company": "Raylog", - "phone": "860-450-2648", - "email": "emily@raylog.com" - }, - { - "id": 9104, - "guid": "deff2d0e-b89c-44b6-a1a5-a55b9ffa6f9f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Galbraith", - "company": "SysUSA", - "phone": "892-452-3869", - "email": "khloe@sysusa.com" - }, - { - "id": 9105, - "guid": "3c4aeb14-c6aa-422f-bc7d-faa56a996640", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Natalie Vaughan", - "company": "Teraserv", - "phone": "874-576-2987", - "email": "natalie@teraserv.com" - }, - { - "id": 9106, - "guid": "c6a9a877-6fb7-46b4-a492-4e22b5f2af1b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Neal", - "company": "Raylog", - "phone": "811-474-3363", - "email": "genesis@raylog.com" - }, - { - "id": 9107, - "guid": "08c1151f-865d-4736-bea6-23d93e716497", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Morgan Goodman", - "company": "Safetrust", - "phone": "879-417-3767", - "email": "morgan@safetrust.com" - }, - { - "id": 9108, - "guid": "da1086d3-c637-4a0b-8a37-b5591bec9763", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth Michaelson", - "company": "Openserve", - "phone": "875-505-3437", - "email": "elizabeth@openserve.com" - }, - { - "id": 9109, - "guid": "8033c673-3a9c-4d0a-9267-7de05e462c66", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Freeman", - "company": "Techtron", - "phone": "812-520-2238", - "email": "alexa@techtron.com" - }, - { - "id": 9110, - "guid": "82392044-892c-49b1-b6b0-c3fbbb81450b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Vance", - "company": "Westgate", - "phone": "846-417-3655", - "email": "hailey@westgate.com" - }, - { - "id": 9111, - "guid": "b8b126b3-bc6a-4ab7-8298-8742ab0cb201", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Freeman", - "company": "Keytheon", - "phone": "826-439-3257", - "email": "avery@keytheon.com" - }, - { - "id": 9112, - "guid": "f2265170-7d55-4db2-b426-ec13bc7a4332", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Sheldon", - "company": "Cryptotegrity", - "phone": "888-425-3094", - "email": "evelyn@cryptotegrity.com" - }, - { - "id": 9113, - "guid": "b222f4ad-390f-4697-8f62-b5f2e8390e81", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Miller", - "company": "Vencom", - "phone": "834-418-3192", - "email": "vanessa@vencom.com" - }, - { - "id": 9114, - "guid": "16dfa318-b84e-40d4-b5d3-c4ed5d6d1565", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Waller", - "company": "Hypervaco", - "phone": "896-434-3780", - "email": "aubrey@hypervaco.com" - }, - { - "id": 9115, - "guid": "354ebee5-d19e-4a0d-830e-819155a06ad5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Davidson", - "company": "Infraique", - "phone": "833-473-2110", - "email": "charlotte@infraique.com" - }, - { - "id": 9116, - "guid": "75054605-10fb-4978-be34-225e80a97f42", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Gardner", - "company": "US Omnigraphik", - "phone": "801-477-2640", - "email": "zoe@us omnigraphik.com" - }, - { - "id": 9117, - "guid": "51ecf242-d82e-43ff-9fff-680ff4b7ad47", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Cook", - "company": "US Infratouch", - "phone": "882-529-2421", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 9118, - "guid": "7a15c8de-08df-487d-b584-ff5a19e9de94", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Hoggarth", - "company": "InfoAirway", - "phone": "889-532-3569", - "email": "khloe@infoairway.com" - }, - { - "id": 9119, - "guid": "fcab4c9d-bef9-4119-9d2d-7eaedbf4d6c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Nash", - "company": "Westtomik", - "phone": "821-578-2771", - "email": "madelyn@westtomik.com" - }, - { - "id": 9120, - "guid": "10101374-22b5-4d3e-8f80-3cafc2f7f5c2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Fulton", - "company": "Allnet", - "phone": "845-490-2351", - "email": "kayla@allnet.com" - }, - { - "id": 9121, - "guid": "daadd526-5a83-4492-96e3-84628c103240", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Day", - "company": "Allnet", - "phone": "868-501-3947", - "email": "morgan@allnet.com" - }, - { - "id": 9122, - "guid": "86e15806-36ee-4982-bd41-de6e44f86fe0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Vaughan", - "company": "iOptystix", - "phone": "800-518-3858", - "email": "emily@ioptystix.com" - }, - { - "id": 9123, - "guid": "b041439e-8085-4021-952b-578daede660e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Croftoon", - "company": "Unconix", - "phone": "868-553-2056", - "email": "zoey@unconix.com" - }, - { - "id": 9124, - "guid": "3d501c3e-7b2e-41c1-b9bd-4384dbf087be", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Gilmore", - "company": "Westgate", - "phone": "826-583-3077", - "email": "emma@westgate.com" - }, - { - "id": 9125, - "guid": "8d23b95a-67c5-49ff-83e0-ddae212b32ca", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Serenity Smith", - "company": "Ameritron", - "phone": "839-436-3138", - "email": "serenity@ameritron.com" - }, - { - "id": 9126, - "guid": "553034fb-5c02-4beb-8ff1-cdc3caf667fe", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Cramer", - "company": "iMedconik", - "phone": "882-455-3956", - "email": "molly@imedconik.com" - }, - { - "id": 9127, - "guid": "aa119590-6b04-4b05-9b8c-7c065dfe5a92", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Bush", - "company": "Truegate", - "phone": "888-548-2280", - "email": "elizabeth@truegate.com" - }, - { - "id": 9128, - "guid": "9b73437e-3072-44e9-99cd-95a29cbcf1ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Hardman", - "company": "Sontopia", - "phone": "838-509-3544", - "email": "melanie@sontopia.com" - }, - { - "id": 9129, - "guid": "26d5bdeb-8e7f-4c48-8fd5-0678dfb4153d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Wayne", - "company": "Allphysiche", - "phone": "802-557-3265", - "email": "jessica@allphysiche.com" - }, - { - "id": 9130, - "guid": "20958520-9eb3-4150-9260-54b170e68b8a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Owen", - "company": "Entcast", - "phone": "846-471-3964", - "email": "lauren@entcast.com" - }, - { - "id": 9131, - "guid": "2c404314-b27d-487c-ad5d-c07fa8ae1334", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Carroll", - "company": "Mescatron", - "phone": "843-539-3212", - "email": "camila@mescatron.com" - }, - { - "id": 9132, - "guid": "714d82c5-7945-4829-937e-8489a30e6575", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Day", - "company": "Generola", - "phone": "809-512-2048", - "email": "bella@generola.com" - }, - { - "id": 9133, - "guid": "4a491a9f-fe8c-4522-9bc3-119708cc5fe5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Hawkins", - "company": "iEnland", - "phone": "886-403-2453", - "email": "arianna@ienland.com" - }, - { - "id": 9134, - "guid": "7ca9bf9f-f383-4253-bc2b-fe59b97b2c79", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Owen", - "company": "Entcast", - "phone": "864-423-3165", - "email": "charlotte@entcast.com" - }, - { - "id": 9135, - "guid": "8ef69fab-15c5-4125-8097-890cf8ffddba", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke Brooks", - "company": "Hypervaco", - "phone": "840-497-2957", - "email": "brooke@hypervaco.com" - }, - { - "id": 9136, - "guid": "70777339-1ba4-449f-9270-1c2ef6d35214", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Peyton Thornton", - "company": "Openserve", - "phone": "867-482-3481", - "email": "peyton@openserve.com" - }, - { - "id": 9137, - "guid": "4b4d742a-4cf6-4ae0-85f4-b33a5a6cdccf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Osborne", - "company": "Titanirola", - "phone": "854-505-3180", - "email": "julia@titanirola.com" - }, - { - "id": 9138, - "guid": "7fcf139d-69ad-4aef-867c-d2a20044d428", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Gate", - "company": "Teknoplexon", - "phone": "820-507-3375", - "email": "alexa@teknoplexon.com" - }, - { - "id": 9139, - "guid": "c9366443-6272-437d-8e43-6a79c8b4b6da", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Sheldon", - "company": "Truetomic", - "phone": "835-539-2135", - "email": "genesis@truetomic.com" - }, - { - "id": 9140, - "guid": "ccce89b9-c8c0-4951-977c-5e08f11dcc4a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Nelson", - "company": "Conotomics", - "phone": "829-475-2179", - "email": "sydney@conotomics.com" - }, - { - "id": 9141, - "guid": "845119ff-e989-43ee-b1a3-3d12cca8489a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Chesterton", - "company": "Xeicon", - "phone": "887-414-3287", - "email": "genesis@xeicon.com" - }, - { - "id": 9142, - "guid": "52f0fa82-369a-4b0f-bd09-c0b5230f2073", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Chloe Thomson", - "company": "Truegate", - "phone": "805-539-3104", - "email": "chloe@truegate.com" - }, - { - "id": 9143, - "guid": "2b6b3be7-f179-40fd-a655-377b21e59e1a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Timmons", - "company": "Inridium", - "phone": "836-532-3296", - "email": "lily@inridium.com" - }, - { - "id": 9144, - "guid": "d469bceb-39ba-4c93-9ff2-c5e161bb8cbb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Wesley", - "company": "Tekcar", - "phone": "889-471-2370", - "email": "sophia@tekcar.com" - }, - { - "id": 9145, - "guid": "4d76ec95-6514-4baa-b9d1-07789cda0482", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Audrey Nelson", - "company": "Genland", - "phone": "878-553-2066", - "email": "audrey@genland.com" - }, - { - "id": 9146, - "guid": "a2428287-f2e1-49df-a51e-ad95b8d1dabd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brianna Smith", - "company": "Unologic", - "phone": "829-546-3272", - "email": "brianna@unologic.com" - }, - { - "id": 9147, - "guid": "3975fe72-e1c7-45ad-944d-b3dc43cc32bb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Crossman", - "company": "Videobanc", - "phone": "829-413-2157", - "email": "destiny@videobanc.com" - }, - { - "id": 9148, - "guid": "3999fc30-b357-4865-9fd8-db0ec250352b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Hardman", - "company": "Unconix", - "phone": "888-540-2355", - "email": "peyton@unconix.com" - }, - { - "id": 9149, - "guid": "ec583d15-c0a6-4690-82f2-2495ae554e27", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Rachel Walkman", - "company": "Pacwest", - "phone": "810-537-3677", - "email": "rachel@pacwest.com" - }, - { - "id": 9150, - "guid": "7a20fb23-9133-4a7d-8835-bc6c90316be9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Clapton", - "company": "Technogra", - "phone": "897-467-2257", - "email": "faith@technogra.com" - }, - { - "id": 9151, - "guid": "8e3a7edb-b8d6-4841-a929-2b6886a02d73", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Milton", - "company": "Fibrotopia", - "phone": "895-593-3113", - "email": "arianna@fibrotopia.com" - }, - { - "id": 9152, - "guid": "e30b2656-f0c0-49f5-a5ad-021368cc6462", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Goodman", - "company": "Dynarama", - "phone": "899-439-3714", - "email": "avery@dynarama.com" - }, - { - "id": 9153, - "guid": "c8010792-2b24-468a-8d8d-148e0ad056d2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Oldridge", - "company": "Venconix", - "phone": "887-497-2813", - "email": "peyton@venconix.com" - }, - { - "id": 9154, - "guid": "9dd0cbc5-d28a-4f7c-ae81-0763ed94f9f9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Owen", - "company": "Robotemplate", - "phone": "865-435-3682", - "email": "katelyn@robotemplate.com" - }, - { - "id": 9155, - "guid": "e0efb809-08d0-44e9-9418-1ac532cf002d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Sheldon", - "company": "Allnet", - "phone": "893-593-3550", - "email": "zoe@allnet.com" - }, - { - "id": 9156, - "guid": "2cf12d5d-5a80-408c-b7a8-ac192916bdf6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Milton", - "company": "Technogra", - "phone": "814-424-3655", - "email": "sophia@technogra.com" - }, - { - "id": 9157, - "guid": "9aa8bcf9-be0a-4cb7-acb5-60bf52055f3a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Fisher", - "company": "Netseco", - "phone": "845-483-2997", - "email": "jocelyn@netseco.com" - }, - { - "id": 9158, - "guid": "0c0a1914-1c41-4744-adb2-a85f16a338b2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Webster", - "company": "Infraique", - "phone": "804-415-2095", - "email": "natalie@infraique.com" - }, - { - "id": 9159, - "guid": "71bc2ee5-0bbe-4c05-86ac-d19ab35e3d6f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Hodges", - "company": "Unconix", - "phone": "898-478-2239", - "email": "kayla@unconix.com" - }, - { - "id": 9160, - "guid": "4d569571-10ac-45a2-a356-bc2545bf830f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kayla Otis", - "company": "Gigaura", - "phone": "898-429-3948", - "email": "kayla@gigaura.com" - }, - { - "id": 9161, - "guid": "74c4af92-c8c6-416e-8a02-dd7e1fd8aef9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Nash", - "company": "Infraique", - "phone": "873-506-2826", - "email": "ariana@infraique.com" - }, - { - "id": 9162, - "guid": "7e140a30-a797-4a4b-9e2a-1fb0c51779f9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Miller", - "company": "Proline", - "phone": "831-428-2036", - "email": "bella@proline.com" - }, - { - "id": 9163, - "guid": "45dd468d-f3cd-4751-bc2f-222cbac9d3b1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Higgins", - "company": "Teraserv", - "phone": "837-557-2736", - "email": "destiny@teraserv.com" - }, - { - "id": 9164, - "guid": "aff02aa7-172d-482b-b5d1-2bf2916c859d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Natalie Carter", - "company": "Navivacs", - "phone": "895-575-3516", - "email": "natalie@navivacs.com" - }, - { - "id": 9165, - "guid": "df1ee505-1f8c-433c-8e71-c8b4a12e41c7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Walkman", - "company": "Enlogia", - "phone": "828-489-3478", - "email": "isabella@enlogia.com" - }, - { - "id": 9166, - "guid": "716214c5-85cd-484f-b0a9-1d7d08b6973e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Timmons", - "company": "Inridium", - "phone": "847-571-3922", - "email": "kaitlyn@inridium.com" - }, - { - "id": 9167, - "guid": "6dd4c467-9b8a-44ae-b036-3efa12820dd4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Thorndike", - "company": "Aprama", - "phone": "805-504-2397", - "email": "madeline@aprama.com" - }, - { - "id": 9168, - "guid": "4326d766-5a29-48bd-92aa-8156df24c62e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Daniels", - "company": "Conrama", - "phone": "871-525-3242", - "email": "aaliyah@conrama.com" - }, - { - "id": 9169, - "guid": "e9d0eb31-eed1-41ae-a050-28630f02e337", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Davidson", - "company": "Nanobanc", - "phone": "881-474-3246", - "email": "natalie@nanobanc.com" - }, - { - "id": 9170, - "guid": "4b06854a-a27f-4154-8ab4-b5d66a8d3326", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Smith", - "company": "iSkyvaco", - "phone": "856-446-2203", - "email": "brooke@iskyvaco.com" - }, - { - "id": 9171, - "guid": "1df7752a-0570-405f-a4db-6f703c1378be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Gibbs", - "company": "Transtouch", - "phone": "889-454-3313", - "email": "jessica@transtouch.com" - }, - { - "id": 9172, - "guid": "56b9d44a-7a80-496b-bd03-09fe57deb3e4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Clapton", - "company": "Teratopia", - "phone": "867-559-2030", - "email": "ella@teratopia.com" - }, - { - "id": 9173, - "guid": "db881f4c-91d1-4a39-b562-1128b679b709", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Croftoon", - "company": "Hypervaco", - "phone": "833-561-2189", - "email": "addison@hypervaco.com" - }, - { - "id": 9174, - "guid": "e49f1304-0d28-4a7b-bea8-95c3c8dc4081", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Vance", - "company": "Titanirola", - "phone": "847-528-2099", - "email": "angelina@titanirola.com" - }, - { - "id": 9175, - "guid": "7b36280c-fe95-4548-b147-85984095c72e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Gilmore", - "company": "RoboAerlogix", - "phone": "852-460-3180", - "email": "gianna@roboaerlogix.com" - }, - { - "id": 9176, - "guid": "de41cf07-67ff-4490-867d-7b15a59d8559", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Paige Turner", - "company": "Rapigrafix", - "phone": "883-524-2034", - "email": "paige@rapigrafix.com" - }, - { - "id": 9177, - "guid": "853e5fce-6a15-47b3-99d0-d886d6da7fd9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Thorndike", - "company": "Safeagra", - "phone": "825-435-3929", - "email": "serenity@safeagra.com" - }, - { - "id": 9178, - "guid": "b8038b6f-4a8e-408d-a9bf-40e32d5ff6bd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Stanley", - "company": "Genland", - "phone": "846-540-2406", - "email": "elizabeth@genland.com" - }, - { - "id": 9179, - "guid": "b49ae69a-d4f1-4d9a-8b21-5f7d9eebf3ce", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Fisher", - "company": "Robotemplate", - "phone": "877-431-3540", - "email": "lily@robotemplate.com" - }, - { - "id": 9180, - "guid": "f1f83bc8-7699-4f4f-8a0e-181f5188ff58", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Carroll", - "company": "Unologic", - "phone": "868-543-3267", - "email": "layla@unologic.com" - }, - { - "id": 9181, - "guid": "75dd26be-1115-476e-b379-6cfb94c28bd4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Day", - "company": "Pericenta", - "phone": "898-563-2508", - "email": "melanie@pericenta.com" - }, - { - "id": 9182, - "guid": "0ef5e373-8dfb-471b-865e-d4e220da5098", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Hancock", - "company": "Airdyne", - "phone": "816-594-3671", - "email": "brooklyn@airdyne.com" - }, - { - "id": 9183, - "guid": "cbf1bde5-73c2-4965-9ffb-cc839a29b673", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Adamson", - "company": "iEnland", - "phone": "852-461-2446", - "email": "paige@ienland.com" - }, - { - "id": 9184, - "guid": "14736154-f578-4808-9d17-d6eef68ce6c4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Mercer", - "company": "Videobanc", - "phone": "890-443-2122", - "email": "peyton@videobanc.com" - }, - { - "id": 9185, - "guid": "24439e9a-b385-4124-a1df-2e2de8d4a764", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Carey", - "company": "Allphysiche", - "phone": "864-415-2290", - "email": "bailey@allphysiche.com" - }, - { - "id": 9186, - "guid": "8ae69bda-7227-47a4-8729-e41d6dde36d6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Chesterton", - "company": "Turbomart", - "phone": "864-467-2829", - "email": "bailey@turbomart.com" - }, - { - "id": 9187, - "guid": "1205297e-56c8-4df8-8701-b146dd3689ec", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mia Abramson", - "company": "Aluco", - "phone": "844-493-2913", - "email": "mia@aluco.com" - }, - { - "id": 9188, - "guid": "cfbd3b27-e41b-494c-9fc4-0a328d7fc8c5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Nash", - "company": "Truegate", - "phone": "864-465-3769", - "email": "maya@truegate.com" - }, - { - "id": 9189, - "guid": "06300ff9-6ae5-4c6a-b86b-d8548c107f7a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya WifKinson", - "company": "Gigaura", - "phone": "846-469-3284", - "email": "mya@gigaura.com" - }, - { - "id": 9190, - "guid": "184ba1aa-1b02-41df-97a1-61d3aed6b74c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Gilmore", - "company": "Netseco", - "phone": "813-509-3591", - "email": "makayla@netseco.com" - }, - { - "id": 9191, - "guid": "3fa2e688-5557-4d66-9a1f-d2207e7a6568", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Carey", - "company": "Superscope", - "phone": "804-496-3311", - "email": "nevaeh@superscope.com" - }, - { - "id": 9192, - "guid": "2413dce6-de72-486c-b33c-60dc2ed555f2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Fisher", - "company": "Syssoft", - "phone": "877-542-2424", - "email": "gabrielle@syssoft.com" - }, - { - "id": 9193, - "guid": "cfe2807a-38f4-4f31-8ea7-eb8252cd13cf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Calhoun", - "company": "Conrama", - "phone": "863-449-2625", - "email": "destiny@conrama.com" - }, - { - "id": 9194, - "guid": "d770405c-908f-4617-902f-74d51266a9a7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Miers", - "company": "Pericenta", - "phone": "870-544-2824", - "email": "gianna@pericenta.com" - }, - { - "id": 9195, - "guid": "6c324367-bc0f-4b10-a2e4-002468a3fab9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Miers", - "company": "Anagraph", - "phone": "829-521-2374", - "email": "natalie@anagraph.com" - }, - { - "id": 9196, - "guid": "de00b264-a8be-4b20-8892-35ead678fe6b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis WifKinson", - "company": "Inridium", - "phone": "867-466-2235", - "email": "genesis@inridium.com" - }, - { - "id": 9197, - "guid": "25a908a0-1d58-488f-854f-1854146e5a47", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Cramer", - "company": "Enlogia", - "phone": "802-538-3229", - "email": "lauren@enlogia.com" - }, - { - "id": 9198, - "guid": "84ad58e1-b224-4200-b836-fe9c9ffaf73f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Waller", - "company": "Allphysiche", - "phone": "831-594-3294", - "email": "abigail@allphysiche.com" - }, - { - "id": 9199, - "guid": "29c99b84-c135-4bfc-a318-c039dd754773", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooklyn Gill", - "company": "InfoAirway", - "phone": "830-551-3420", - "email": "brooklyn@infoairway.com" - }, - { - "id": 9200, - "guid": "a4924cc2-a2f5-4fb3-b2ef-4c96c411f415", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Gibbs", - "company": "Steganoconiche", - "phone": "812-430-2141", - "email": "evelyn@steganoconiche.com" - }, - { - "id": 9201, - "guid": "f0869e0d-d30c-4154-8da2-97ee2fce5f02", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Milton", - "company": "Westgate", - "phone": "846-410-3289", - "email": "kylie@westgate.com" - }, - { - "id": 9202, - "guid": "8b5adc11-a730-4a54-bb12-7854470e0cd4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Hodges", - "company": "Mescatron", - "phone": "876-554-2617", - "email": "lillian@mescatron.com" - }, - { - "id": 9203, - "guid": "7675f4e4-8b41-477f-b406-45736e8191ce", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Abramson", - "company": "Steganoconiche", - "phone": "872-483-3258", - "email": "jocelyn@steganoconiche.com" - }, - { - "id": 9204, - "guid": "72935409-a434-4e96-b0ce-fedf8f929ebf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Owen", - "company": "Jamconik", - "phone": "810-420-2868", - "email": "mackenzie@jamconik.com" - }, - { - "id": 9205, - "guid": "ef04808a-893f-41fe-8ff6-1403b011c41e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Hawkins", - "company": "Anagraph", - "phone": "885-429-2900", - "email": "allison@anagraph.com" - }, - { - "id": 9206, - "guid": "8ecb3f73-f6af-4d6f-973d-a0db3882e563", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Crossman", - "company": "Steganoconiche", - "phone": "870-517-3941", - "email": "mya@steganoconiche.com" - }, - { - "id": 9207, - "guid": "f0de3541-1e32-48c9-8baf-9b39cadcf8d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Chandter", - "company": "Syssoft", - "phone": "886-464-2715", - "email": "eva@syssoft.com" - }, - { - "id": 9208, - "guid": "a6366da4-aced-4a40-abc9-02803b071267", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Youmans", - "company": "Gigaura", - "phone": "892-519-2504", - "email": "madeline@gigaura.com" - }, - { - "id": 9209, - "guid": "bb4b9755-67a5-410a-9e28-537022caf37e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Croftoon", - "company": "iSkyvaco", - "phone": "889-495-3279", - "email": "ella@iskyvaco.com" - }, - { - "id": 9210, - "guid": "a261eafa-15ca-466c-9f28-bf76f42eaa25", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Brown", - "company": "iSkyvaco", - "phone": "827-586-2037", - "email": "alexis@iskyvaco.com" - }, - { - "id": 9211, - "guid": "83203b1c-0472-46ae-ba31-667ff1b90981", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Turner", - "company": "Jamconik", - "phone": "858-430-3781", - "email": "leah@jamconik.com" - }, - { - "id": 9212, - "guid": "82ba6529-ac3a-4b92-ae1d-9123897971f3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Michaelson", - "company": "Safetrust", - "phone": "817-495-2855", - "email": "claire@safetrust.com" - }, - { - "id": 9213, - "guid": "bc4d977f-adbf-4b24-83d9-a0bc9e46394a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Harrison", - "company": "Videobanc", - "phone": "815-437-3867", - "email": "paige@videobanc.com" - }, - { - "id": 9214, - "guid": "f3ad8605-46a3-4804-b932-f34e31f6efde", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Day", - "company": "Textiqua", - "phone": "872-467-2347", - "email": "jessica@textiqua.com" - }, - { - "id": 9215, - "guid": "0def5a2a-43a9-481e-843c-e8f5e874bf99", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Warren", - "company": "Robotomic", - "phone": "894-504-3856", - "email": "chloe@robotomic.com" - }, - { - "id": 9216, - "guid": "7b86e5ab-069f-44e0-8b9a-786bed449069", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Watson", - "company": "Steganoconiche", - "phone": "827-490-3716", - "email": "zoe@steganoconiche.com" - }, - { - "id": 9217, - "guid": "28f21b6f-87dd-4ae4-8eea-9253b2b61c5d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey WifKinson", - "company": "Jamconik", - "phone": "812-540-2224", - "email": "bailey@jamconik.com" - }, - { - "id": 9218, - "guid": "3f5afce1-4bc6-4f8a-baef-7bbf94a0ef8f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Galbraith", - "company": "Aprama", - "phone": "897-459-2112", - "email": "amelia@aprama.com" - }, - { - "id": 9219, - "guid": "876ce489-34b9-4932-93af-f7431902b5ce", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Hamphrey", - "company": "Enlogia", - "phone": "839-408-3473", - "email": "mya@enlogia.com" - }, - { - "id": 9220, - "guid": "9dc51971-2ed6-4735-bf54-cd8a908a394c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Murphy", - "company": "Skydata", - "phone": "825-600-2980", - "email": "audrey@skydata.com" - }, - { - "id": 9221, - "guid": "4596b7f9-6dbc-492c-90cd-9e4924b74799", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Brooks", - "company": "Proline", - "phone": "823-401-3987", - "email": "allison@proline.com" - }, - { - "id": 9222, - "guid": "b542dd50-1f4e-44fc-8d33-9c92603b68c8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Genesis Creighton", - "company": "Safeagra", - "phone": "809-578-2877", - "email": "genesis@safeagra.com" - }, - { - "id": 9223, - "guid": "10b8b3c0-db59-4b79-85de-d5c77e09aa71", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Olivia Vance", - "company": "Allphysiche", - "phone": "844-456-2955", - "email": "olivia@allphysiche.com" - }, - { - "id": 9224, - "guid": "cf9e2405-24c5-418b-8bab-211bf8ff2afb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katelyn Brickman", - "company": "RoboAerlogix", - "phone": "846-593-3982", - "email": "katelyn@roboaerlogix.com" - }, - { - "id": 9225, - "guid": "d4c5cbda-26da-44e1-9426-1138eaa93007", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Nelson", - "company": "Polytheon", - "phone": "834-560-3588", - "email": "payton@polytheon.com" - }, - { - "id": 9226, - "guid": "42f5515f-512c-488b-9b5c-fc14e742233e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah White", - "company": "Netseco", - "phone": "839-533-3714", - "email": "savannah@netseco.com" - }, - { - "id": 9227, - "guid": "5fac3c3f-f72a-4314-8f17-a27d3d8b60db", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Gibbs", - "company": "Multitiqua", - "phone": "871-555-3666", - "email": "jasmine@multitiqua.com" - }, - { - "id": 9228, - "guid": "8f4c73b0-994f-4520-9ecd-3c2fb0599d00", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Hawkins", - "company": "Allnet", - "phone": "830-511-2563", - "email": "jocelyn@allnet.com" - }, - { - "id": 9229, - "guid": "fa6f9e7b-088d-4f6a-aa82-2bc8d129f456", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Morrison", - "company": "iQualcar", - "phone": "866-497-2585", - "email": "zoey@iqualcar.com" - }, - { - "id": 9230, - "guid": "baee88d5-94bf-4f1e-b960-4a2a5f35579e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Thorndike", - "company": "SysUSA", - "phone": "889-422-3846", - "email": "sofia@sysusa.com" - }, - { - "id": 9231, - "guid": "4af901a6-e262-4d45-a42c-b0c5a548ad19", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Adamson", - "company": "Polytheon", - "phone": "895-579-2723", - "email": "mariah@polytheon.com" - }, - { - "id": 9232, - "guid": "e0a860d7-5675-4056-ad68-448dca272cf8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Young", - "company": "Pericenta", - "phone": "869-598-3654", - "email": "khloe@pericenta.com" - }, - { - "id": 9233, - "guid": "44328f83-9664-4420-b60e-e8c5ef960e5c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ashley Otis", - "company": "Infraique", - "phone": "800-458-3216", - "email": "ashley@infraique.com" - }, - { - "id": 9234, - "guid": "f3c4a22d-8800-431c-8078-7c2185ed9d2c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Creighton", - "company": "Xeicon", - "phone": "813-507-2210", - "email": "natalie@xeicon.com" - }, - { - "id": 9235, - "guid": "40b81651-c1b2-472e-bf92-9125c4e53833", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Fulton", - "company": "Jamrola", - "phone": "878-430-2781", - "email": "kayla@jamrola.com" - }, - { - "id": 9236, - "guid": "b04ce453-698c-4c19-9245-d7f214a756fe", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Turner", - "company": "Orthomedia", - "phone": "846-555-3048", - "email": "layla@orthomedia.com" - }, - { - "id": 9237, - "guid": "cec92e5a-0eee-40af-bbff-a67523b151d7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Campbell", - "company": "Keytheon", - "phone": "894-519-2378", - "email": "vanessa@keytheon.com" - }, - { - "id": 9238, - "guid": "c1ebd748-4b03-41a8-b533-c3b03c5a8f71", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Murphy", - "company": "Westgate", - "phone": "887-483-3059", - "email": "jasmine@westgate.com" - }, - { - "id": 9239, - "guid": "eaf5e47d-633a-4c12-b226-452f1f41ccb0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Bush", - "company": "eSteganoergy", - "phone": "868-534-3920", - "email": "emma@esteganoergy.com" - }, - { - "id": 9240, - "guid": "fa6cef30-dc5d-425c-8c90-988c0f191296", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Charlson", - "company": "Teknoplexon", - "phone": "878-524-3861", - "email": "alexandra@teknoplexon.com" - }, - { - "id": 9241, - "guid": "acf891fe-c429-4446-bf3a-0f5dba3b280d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Bush", - "company": "Hypervaco", - "phone": "816-461-2245", - "email": "lauren@hypervaco.com" - }, - { - "id": 9242, - "guid": "fb246fc3-3542-4731-a2fb-aaf0bc7ca6d1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Thorndike", - "company": "InfoAirway", - "phone": "805-532-2477", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 9243, - "guid": "8218f3bb-eeaa-4f29-83a1-766659074eff", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Elizabeth Michaelson", - "company": "Inridium", - "phone": "835-425-3111", - "email": "elizabeth@inridium.com" - }, - { - "id": 9244, - "guid": "5b419ca7-17b3-4dca-a65c-770d02a6db6c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Cook", - "company": "Technogra", - "phone": "876-496-2826", - "email": "layla@technogra.com" - }, - { - "id": 9245, - "guid": "7dcd52bf-f1f1-4c6b-8931-408bdb6267e8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoe Chesterton", - "company": "Mescatron", - "phone": "865-408-2769", - "email": "zoe@mescatron.com" - }, - { - "id": 9246, - "guid": "02b6cf41-fc06-4d99-9f7d-4f987597c709", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Clapton", - "company": "Netsystems", - "phone": "892-436-2047", - "email": "kaitlyn@netsystems.com" - }, - { - "id": 9247, - "guid": "299ceeb1-24f4-4cdb-b199-cb75ae6e29a5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoey Fisher", - "company": "Entcast", - "phone": "834-596-2217", - "email": "zoey@entcast.com" - }, - { - "id": 9248, - "guid": "cfab6fb8-1804-48b7-8cce-bc8053f76254", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Carter", - "company": "Cryptotegrity", - "phone": "822-573-3383", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 9249, - "guid": "492dc677-59bf-4601-82fd-1d97898969b9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Brooks", - "company": "Tekcar", - "phone": "833-500-3820", - "email": "khloe@tekcar.com" - }, - { - "id": 9250, - "guid": "f53cfa66-a320-436e-bef9-7cb8f3bee33a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madelyn Smith", - "company": "Fibrotouch", - "phone": "850-455-3999", - "email": "madelyn@fibrotouch.com" - }, - { - "id": 9251, - "guid": "28dfe6cd-b726-4e01-952e-5d0d558cc643", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Evelyn Hoggarth", - "company": "Mescaridic", - "phone": "832-499-2084", - "email": "evelyn@mescaridic.com" - }, - { - "id": 9252, - "guid": "8b298080-5824-456b-b32d-dab52ef339d7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Timmons", - "company": "Indisco", - "phone": "856-514-3119", - "email": "paige@indisco.com" - }, - { - "id": 9253, - "guid": "b677f361-c9ef-435b-8ad2-9cb0dec7a343", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Charlson", - "company": "Openserve", - "phone": "853-421-2144", - "email": "avery@openserve.com" - }, - { - "id": 9254, - "guid": "1bf1d34c-a44d-41b2-a0d2-a964e5276f42", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Sheldon", - "company": "Celgra", - "phone": "815-471-2290", - "email": "gianna@celgra.com" - }, - { - "id": 9255, - "guid": "676c7761-7d26-46a9-911f-980713278758", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Nash", - "company": "Dynarama", - "phone": "852-531-3423", - "email": "sophie@dynarama.com" - }, - { - "id": 9256, - "guid": "c731e027-8808-4996-b191-3e538413b7ff", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Youmans", - "company": "Systheon", - "phone": "898-468-3776", - "email": "destiny@systheon.com" - }, - { - "id": 9257, - "guid": "72ada880-7d03-4ed0-be03-29b892e3153e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Hailey", - "company": "Conotomics", - "phone": "888-481-2792", - "email": "claire@conotomics.com" - }, - { - "id": 9258, - "guid": "dc929dce-a6fd-45ce-9fc3-3e2ab921558b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Vaughan", - "company": "Textiqua", - "phone": "835-514-3882", - "email": "trinity@textiqua.com" - }, - { - "id": 9259, - "guid": "cc88753c-26d2-4b15-a09c-3a32f563146f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Hawkins", - "company": "Vencom", - "phone": "874-511-3839", - "email": "katherine@vencom.com" - }, - { - "id": 9260, - "guid": "9453ee59-5943-4039-bc6e-a9b22089fc84", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Gill", - "company": "Allphysiche", - "phone": "829-512-2459", - "email": "gianna@allphysiche.com" - }, - { - "id": 9261, - "guid": "8c1208a9-b9ff-477f-a389-329eb080f342", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Gustman", - "company": "Syssoft", - "phone": "830-476-3864", - "email": "hailey@syssoft.com" - }, - { - "id": 9262, - "guid": "f23d361b-f1b8-4d06-8c84-5ea95baa22da", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Wesley", - "company": "Qualserve", - "phone": "833-579-3636", - "email": "claire@qualserve.com" - }, - { - "id": 9263, - "guid": "13def011-bec6-46d7-a1cd-97cd275de512", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madison Day", - "company": "Textiqua", - "phone": "875-582-2557", - "email": "madison@textiqua.com" - }, - { - "id": 9264, - "guid": "0b1cbb51-e88e-4de4-8c5a-cd5cc0282bf2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Adamson", - "company": "Indisco", - "phone": "888-441-3413", - "email": "layla@indisco.com" - }, - { - "id": 9265, - "guid": "fdfb30df-f301-475f-9dc7-1786a217d7d6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Clapton", - "company": "Infragraph", - "phone": "857-428-2868", - "email": "maria@infragraph.com" - }, - { - "id": 9266, - "guid": "e9a3531f-5e28-4203-84e0-a5808f7f0894", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Gilmore", - "company": "eEyetanic", - "phone": "898-578-2688", - "email": "arianna@eeyetanic.com" - }, - { - "id": 9267, - "guid": "dde9bd7d-57bd-4943-ad52-3a314ba2b6a0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Fulton", - "company": "Skydata", - "phone": "852-596-3266", - "email": "sydney@skydata.com" - }, - { - "id": 9268, - "guid": "d634c647-478e-4cf4-9a73-961b94777e8c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Campbell", - "company": "Celgra", - "phone": "880-595-3449", - "email": "allison@celgra.com" - }, - { - "id": 9269, - "guid": "efd6fafc-453f-4a9f-96e6-06031576f777", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Freeman", - "company": "eSteganoergy", - "phone": "818-532-3061", - "email": "layla@esteganoergy.com" - }, - { - "id": 9270, - "guid": "32b676ff-3504-4b76-8f3f-a3c5eee949a5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Oldman", - "company": "Safetrust", - "phone": "829-474-2718", - "email": "aaliyah@safetrust.com" - }, - { - "id": 9271, - "guid": "fc8467ff-71a0-417f-96ba-67e9d6b80cf4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Oldman", - "company": "Generola", - "phone": "804-523-3946", - "email": "alexa@generola.com" - }, - { - "id": 9272, - "guid": "b384eaab-28fa-49ab-ba66-5585bb88647c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Gill", - "company": "Conrama", - "phone": "881-566-2475", - "email": "payton@conrama.com" - }, - { - "id": 9273, - "guid": "52b6bef0-4b89-4229-96c4-101595e0ba8c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Brown", - "company": "Robotomic", - "phone": "896-591-3302", - "email": "aubrey@robotomic.com" - }, - { - "id": 9274, - "guid": "5d9ee993-39e0-4092-a716-03f469b15bd1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Ford", - "company": "Pacwest", - "phone": "808-419-2500", - "email": "addison@pacwest.com" - }, - { - "id": 9275, - "guid": "c6955531-a34f-4481-8bf8-7b2ad07a0863", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Oldman", - "company": "Vencom", - "phone": "857-403-3104", - "email": "madelyn@vencom.com" - }, - { - "id": 9276, - "guid": "5d727647-84fc-4545-b92e-aec7b00cbac9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Turner", - "company": "Fibroserve", - "phone": "868-598-2883", - "email": "rachel@fibroserve.com" - }, - { - "id": 9277, - "guid": "57a39e45-b0a4-4e84-908a-6f9c07ecc3fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Oswald", - "company": "Fibroserve", - "phone": "874-425-2075", - "email": "katelyn@fibroserve.com" - }, - { - "id": 9278, - "guid": "10cc7fc9-ad18-4e05-b041-f2b45271bd0f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Carey", - "company": "SysVenamerica", - "phone": "857-473-2327", - "email": "claire@sysvenamerica.com" - }, - { - "id": 9279, - "guid": "1ac905ef-b7f8-436f-b361-a493b80c5577", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Nash", - "company": "Multitiqua", - "phone": "827-586-2685", - "email": "gabriella@multitiqua.com" - }, - { - "id": 9280, - "guid": "8205201d-df72-4b01-bc90-60fc97d4d29a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Waller", - "company": "Sontopia", - "phone": "889-418-3903", - "email": "mia@sontopia.com" - }, - { - "id": 9281, - "guid": "4153e218-5095-43c2-ab39-b3bf40af7a8c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madeline Youmans", - "company": "Venconix", - "phone": "846-422-2191", - "email": "madeline@venconix.com" - }, - { - "id": 9282, - "guid": "22a3db29-a5e9-4ab8-9d75-be5aeb6f0858", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Winter", - "company": "Interliant", - "phone": "880-506-3920", - "email": "savannah@interliant.com" - }, - { - "id": 9283, - "guid": "7f21cfb1-1ae6-451b-8823-684ce3b3d010", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Carey", - "company": "Westtomik", - "phone": "801-537-3268", - "email": "valeria@westtomik.com" - }, - { - "id": 9284, - "guid": "34120489-ef1e-4929-9d37-0e9a0f78aede", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Winter", - "company": "Navivacs", - "phone": "856-521-2414", - "email": "madeline@navivacs.com" - }, - { - "id": 9285, - "guid": "0c263661-421d-4624-9884-c2d4227c9be4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Thomson", - "company": "Pericenta", - "phone": "878-416-3575", - "email": "hannah@pericenta.com" - }, - { - "id": 9286, - "guid": "bc897f17-cc5b-4325-b29d-0e9dbe0b70da", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Gate", - "company": "Dynarama", - "phone": "873-401-3452", - "email": "alexa@dynarama.com" - }, - { - "id": 9287, - "guid": "9f616e2e-cf4c-44dd-b477-37b1e4ceef5a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Hancock", - "company": "Jamrola", - "phone": "834-463-2240", - "email": "autumn@jamrola.com" - }, - { - "id": 9288, - "guid": "c428d691-d5ae-43f1-a47b-c7d7f75c78c1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Wayne", - "company": "Technogra", - "phone": "833-569-3902", - "email": "autumn@technogra.com" - }, - { - "id": 9289, - "guid": "5021f7ca-d467-43c3-99a3-e858091f41f6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Wainwright", - "company": "Enlogia", - "phone": "865-409-3082", - "email": "alyssa@enlogia.com" - }, - { - "id": 9290, - "guid": "ab3ef647-e1d1-4c3e-8984-544cec7657e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Watson", - "company": "Conrama", - "phone": "812-534-2942", - "email": "riley@conrama.com" - }, - { - "id": 9291, - "guid": "618b2b97-d1e5-4274-b969-a2fa134ae995", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Campbell", - "company": "Pericenta", - "phone": "868-594-3005", - "email": "samantha@pericenta.com" - }, - { - "id": 9292, - "guid": "ef43d592-9824-42f0-a8b0-7956ad26850a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Calhoun", - "company": "Airdyne", - "phone": "876-495-3574", - "email": "kylie@airdyne.com" - }, - { - "id": 9293, - "guid": "389193ed-936f-48ff-ba7a-171370e48f7a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Carter", - "company": "Celgra", - "phone": "862-433-3286", - "email": "faith@celgra.com" - }, - { - "id": 9294, - "guid": "0caa67a6-84a6-4f31-97c7-29b987475f44", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Gilmore", - "company": "Cryptotemplate", - "phone": "870-508-2591", - "email": "kylie@cryptotemplate.com" - }, - { - "id": 9295, - "guid": "8db1f25d-b2c4-4fe6-b608-77bfe9467369", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Carey", - "company": "Tekcar", - "phone": "841-412-2976", - "email": "ella@tekcar.com" - }, - { - "id": 9296, - "guid": "99dce0f7-5c3c-48a5-8c82-4c63dc40b3eb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Gardner", - "company": "Polytheon", - "phone": "889-492-2519", - "email": "kylie@polytheon.com" - }, - { - "id": 9297, - "guid": "afef6091-7e72-4383-a734-16f576ffa9c4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Carter", - "company": "Openserve", - "phone": "858-418-3547", - "email": "mackenzie@openserve.com" - }, - { - "id": 9298, - "guid": "5a24dea4-ee73-4d55-9905-827757addbf5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Stanley", - "company": "Allnet", - "phone": "817-418-2036", - "email": "aaliyah@allnet.com" - }, - { - "id": 9299, - "guid": "32fed91b-daa6-4b1b-b60c-4ef7be784d9d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Conors", - "company": "Conrama", - "phone": "823-460-3183", - "email": "gianna@conrama.com" - }, - { - "id": 9300, - "guid": "91c34c1d-663c-4666-b608-0cb4be9dfbf0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney Nash", - "company": "Robocomm", - "phone": "858-460-3264", - "email": "sydney@robocomm.com" - }, - { - "id": 9301, - "guid": "1ab1228e-9d04-4265-9ece-ba981c3bd6ef", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Neal", - "company": "Multitiqua", - "phone": "813-443-3595", - "email": "abigail@multitiqua.com" - }, - { - "id": 9302, - "guid": "741a1753-0639-43d0-88df-f4bcea8760bf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Hoggarth", - "company": "Airdyne", - "phone": "871-484-2298", - "email": "hannah@airdyne.com" - }, - { - "id": 9303, - "guid": "f594eab3-9316-4081-9539-138dbd1c0f47", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Autumn Waller", - "company": "iSkyvaco", - "phone": "842-541-2038", - "email": "autumn@iskyvaco.com" - }, - { - "id": 9304, - "guid": "abf737d0-e28f-4635-a31d-3df0b913c895", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Gerald", - "company": "iEnland", - "phone": "876-493-2763", - "email": "andrea@ienland.com" - }, - { - "id": 9305, - "guid": "c76ead35-a1d6-438d-8309-c31077a32105", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Day", - "company": "Navivacs", - "phone": "850-486-2929", - "email": "maria@navivacs.com" - }, - { - "id": 9306, - "guid": "6ea56ffe-100a-4167-bfba-9708b62d89ca", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Clapton", - "company": "Aprama", - "phone": "870-567-3883", - "email": "trinity@aprama.com" - }, - { - "id": 9307, - "guid": "40c7ed81-95b9-4639-9ac8-c49417f3c16d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Miller", - "company": "Teratopia", - "phone": "869-487-2317", - "email": "lillian@teratopia.com" - }, - { - "id": 9308, - "guid": "693d58dd-a185-4c64-bdb5-e68f1951ea70", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Gilson", - "company": "Infraique", - "phone": "868-437-2198", - "email": "emily@infraique.com" - }, - { - "id": 9309, - "guid": "ae58e289-7e42-4330-986c-6241834bc609", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Hailey", - "company": "Indisco", - "phone": "850-545-3061", - "email": "sofia@indisco.com" - }, - { - "id": 9310, - "guid": "18ea53ac-33ae-446e-83db-192b922dfe74", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Croftoon", - "company": "Technogra", - "phone": "801-507-2517", - "email": "hailey@technogra.com" - }, - { - "id": 9311, - "guid": "763586b2-f1d4-443b-86e1-08358e6ffc73", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Oswald", - "company": "Robotemplate", - "phone": "881-493-3182", - "email": "victoria@robotemplate.com" - }, - { - "id": 9312, - "guid": "babab58b-74e8-400b-953d-ce0247938d26", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Molligan", - "company": "Openserve", - "phone": "807-479-3076", - "email": "emma@openserve.com" - }, - { - "id": 9313, - "guid": "b5a6e370-3630-4eb3-8fab-922259063bca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Carter", - "company": "Allphysiche", - "phone": "818-492-2241", - "email": "kimberly@allphysiche.com" - }, - { - "id": 9314, - "guid": "ad8611cf-69c1-4911-900c-5159e0dd61ed", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee White", - "company": "Videobanc", - "phone": "831-540-2076", - "email": "kaylee@videobanc.com" - }, - { - "id": 9315, - "guid": "5199e8f9-3806-4f83-ad86-fd5cedc9f04e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Turner", - "company": "Videobanc", - "phone": "833-406-3398", - "email": "kayla@videobanc.com" - }, - { - "id": 9316, - "guid": "ada7b808-9a08-447d-9fc0-8b68475e6737", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Nelson", - "company": "Technogra", - "phone": "881-482-2991", - "email": "destiny@technogra.com" - }, - { - "id": 9317, - "guid": "5ca2cf83-1095-44fd-8be8-c0eb46f23334", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Gibbs", - "company": "Sontopia", - "phone": "834-558-2649", - "email": "allison@sontopia.com" - }, - { - "id": 9318, - "guid": "b9500aa8-9b14-4ef4-9f93-68e66dda6f48", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Cramer", - "company": "Skydata", - "phone": "814-590-2270", - "email": "sophie@skydata.com" - }, - { - "id": 9319, - "guid": "7e75331f-b3ea-4e1a-a093-03ff266e6fc1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Conors", - "company": "US Infratouch", - "phone": "825-432-3023", - "email": "katherine@us infratouch.com" - }, - { - "id": 9320, - "guid": "b9d092a0-0ae3-42dc-a5e2-3d07411d5ba4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Otis", - "company": "Xeicon", - "phone": "822-567-2561", - "email": "vanessa@xeicon.com" - }, - { - "id": 9321, - "guid": "5b0cfac0-f809-4f13-93d8-3efc509d3474", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Hardman", - "company": "Celgra", - "phone": "874-548-2920", - "email": "charlotte@celgra.com" - }, - { - "id": 9322, - "guid": "1b8c1a92-276e-426f-a34f-17b9a3273c8c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Warren", - "company": "Westgate", - "phone": "850-431-2882", - "email": "destiny@westgate.com" - }, - { - "id": 9323, - "guid": "ee61a122-e846-4575-a1cf-9be1a717bec1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Hamphrey", - "company": "Textiqua", - "phone": "866-554-3945", - "email": "avery@textiqua.com" - }, - { - "id": 9324, - "guid": "b9395293-856c-4cce-9b32-b743363b5fbd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Thornton", - "company": "Netsystems", - "phone": "837-444-2676", - "email": "katelyn@netsystems.com" - }, - { - "id": 9325, - "guid": "fb8ec06b-51db-46cc-ba1b-99360af3bc67", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabelle Charlson", - "company": "eSteganoergy", - "phone": "853-436-3516", - "email": "isabelle@esteganoergy.com" - }, - { - "id": 9326, - "guid": "7ac505a6-ad78-4a1a-9e08-c0eefdead26d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Waller", - "company": "Transtouch", - "phone": "897-561-2137", - "email": "trinity@transtouch.com" - }, - { - "id": 9327, - "guid": "153efa07-77e5-49d2-971c-b712d1dd6a5c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Gerald", - "company": "US Infratouch", - "phone": "852-524-2008", - "email": "alexa@us infratouch.com" - }, - { - "id": 9328, - "guid": "15bd73bd-5034-4618-a18b-714d78c13086", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Fulton", - "company": "Rapigrafix", - "phone": "852-581-3460", - "email": "allison@rapigrafix.com" - }, - { - "id": 9329, - "guid": "a8e319d2-0571-4510-88ca-04206a69792d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Claire Warren", - "company": "Technogra", - "phone": "889-570-2748", - "email": "claire@technogra.com" - }, - { - "id": 9330, - "guid": "f5600909-e02d-475d-ba0e-1c414cd83a54", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lily Chesterton", - "company": "Nanobanc", - "phone": "833-599-2164", - "email": "lily@nanobanc.com" - }, - { - "id": 9331, - "guid": "08e70898-de63-41ec-9d75-f7a9c8d7cb16", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila WifKinson", - "company": "Inridium", - "phone": "809-580-2861", - "email": "camila@inridium.com" - }, - { - "id": 9332, - "guid": "34f8085f-3224-49f4-8045-4b28c2448c8f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madison Miers", - "company": "Conotomics", - "phone": "828-565-2176", - "email": "madison@conotomics.com" - }, - { - "id": 9333, - "guid": "e963546f-e1a1-4d40-8fc5-732149820652", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Gerald", - "company": "Jamconik", - "phone": "805-521-2433", - "email": "addison@jamconik.com" - }, - { - "id": 9334, - "guid": "8611e77d-4f11-45ed-a5b9-2d613d686a8d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Winter", - "company": "Nanobanc", - "phone": "820-441-2222", - "email": "eva@nanobanc.com" - }, - { - "id": 9335, - "guid": "0aaf1861-4ac8-47e2-b2a0-7611a553c4cb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Murphy", - "company": "Superscope", - "phone": "813-456-2116", - "email": "avery@superscope.com" - }, - { - "id": 9336, - "guid": "288aa271-c8a7-4500-8bb7-fa3bbdf56db3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Turner", - "company": "Thermotomic", - "phone": "851-594-2072", - "email": "kylie@thermotomic.com" - }, - { - "id": 9337, - "guid": "32c3618e-df40-4081-93f8-bbb4c791f936", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Wesley", - "company": "Multitiqua", - "phone": "874-505-3626", - "email": "destiny@multitiqua.com" - }, - { - "id": 9338, - "guid": "6ecd24b0-eea4-433b-9707-5504a4400b25", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Winter", - "company": "Robotemplate", - "phone": "812-558-3925", - "email": "leah@robotemplate.com" - }, - { - "id": 9339, - "guid": "82f71e83-cebe-4d98-a0f0-863e3134a1a0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Calhoun", - "company": "Turbomart", - "phone": "897-587-2744", - "email": "aubrey@turbomart.com" - }, - { - "id": 9340, - "guid": "2c418575-79ec-4d2b-9ad1-0dcd5b45c18f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Daniels", - "company": "Robotomic", - "phone": "817-452-3066", - "email": "sophia@robotomic.com" - }, - { - "id": 9341, - "guid": "68d334fe-a417-4836-8989-3a27dc74b991", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Hoggarth", - "company": "Jamconik", - "phone": "898-440-3857", - "email": "peyton@jamconik.com" - }, - { - "id": 9342, - "guid": "3fedce47-efd0-40a2-a9f3-6362a76747ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Ogden", - "company": "Fibroserve", - "phone": "863-506-2401", - "email": "aaliyah@fibroserve.com" - }, - { - "id": 9343, - "guid": "d4f10d40-507a-4ce5-8c9e-f5cd51bc1596", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Thomson", - "company": "Mescaridic", - "phone": "809-499-2087", - "email": "claire@mescaridic.com" - }, - { - "id": 9344, - "guid": "50b1e174-ee26-40a6-a94b-cc3c5c35de5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Milton", - "company": "Venconix", - "phone": "875-526-2780", - "email": "mariah@venconix.com" - }, - { - "id": 9345, - "guid": "16b56385-bd18-4bd9-8691-f0b82bc6d4b6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Claire Nash", - "company": "Skydata", - "phone": "836-592-2124", - "email": "claire@skydata.com" - }, - { - "id": 9346, - "guid": "6ef49fcd-d80d-4840-8505-664985c0a60b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Campbell", - "company": "US Infratouch", - "phone": "854-498-2315", - "email": "jasmine@us infratouch.com" - }, - { - "id": 9347, - "guid": "724bf993-d9f1-4876-9d39-97915bc03315", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Gerald", - "company": "Truegate", - "phone": "856-577-2379", - "email": "lillian@truegate.com" - }, - { - "id": 9348, - "guid": "1a3d17c1-bc8b-445e-ae8d-a36ef2a05222", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Nelson", - "company": "Allnet", - "phone": "887-468-3520", - "email": "isabella@allnet.com" - }, - { - "id": 9349, - "guid": "35db7d57-e6c8-4c3a-997a-1c8da8c8597e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Hancock", - "company": "Mescaridic", - "phone": "811-562-2455", - "email": "peyton@mescaridic.com" - }, - { - "id": 9350, - "guid": "d15e5d9b-1d9e-46a2-9d3b-d039357df0b5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Oswald", - "company": "Truegate", - "phone": "820-496-3724", - "email": "gabrielle@truegate.com" - }, - { - "id": 9351, - "guid": "24604570-1e1e-4ca2-8c5e-22701cfa7ad9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Campbell", - "company": "Dynarama", - "phone": "828-416-2807", - "email": "brianna@dynarama.com" - }, - { - "id": 9352, - "guid": "800e3cf2-e1e8-4aad-a72b-df2d4e84d98c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Hamphrey", - "company": "Cryptotegrity", - "phone": "852-457-2479", - "email": "allison@cryptotegrity.com" - }, - { - "id": 9353, - "guid": "bae9bf64-eded-43bc-b6c3-085ebb297609", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brianna Fisher", - "company": "Entcast", - "phone": "816-527-3370", - "email": "brianna@entcast.com" - }, - { - "id": 9354, - "guid": "e669c931-b390-4220-9c57-3006778ab017", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lillian Wayne", - "company": "Cryptotegrity", - "phone": "869-466-2516", - "email": "lillian@cryptotegrity.com" - }, - { - "id": 9355, - "guid": "3b7e7632-0c42-4295-ae1d-020182e06517", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Goldman", - "company": "Technogra", - "phone": "895-503-2391", - "email": "lauren@technogra.com" - }, - { - "id": 9356, - "guid": "c12af9eb-b995-4202-8d36-fdc4bb573874", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Youmans", - "company": "iOptystix", - "phone": "853-416-3329", - "email": "sophia@ioptystix.com" - }, - { - "id": 9357, - "guid": "df193bd6-02fa-424a-8966-79663c6e51bb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Miln", - "company": "Aluco", - "phone": "816-534-3883", - "email": "madeline@aluco.com" - }, - { - "id": 9358, - "guid": "47a4bbdf-8b48-44fe-996e-269f61d24f3b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Thornton", - "company": "Mescatron", - "phone": "862-591-2309", - "email": "allison@mescatron.com" - }, - { - "id": 9359, - "guid": "5eada09e-2799-44d3-8b28-047757fc2ffd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Hancock", - "company": "Technogra", - "phone": "806-566-2277", - "email": "abigail@technogra.com" - }, - { - "id": 9360, - "guid": "f954b7dc-eee8-45c8-afb3-43d9eac7f772", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Gardner", - "company": "Conrama", - "phone": "810-565-2690", - "email": "kayla@conrama.com" - }, - { - "id": 9361, - "guid": "ee74f9b7-9aa8-4373-b19a-759747e43471", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Nathan", - "company": "Systheon", - "phone": "833-572-3626", - "email": "arianna@systheon.com" - }, - { - "id": 9362, - "guid": "b17cd6e1-e33b-42b6-b824-a70b1d132317", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Winter", - "company": "SysUSA", - "phone": "847-474-3691", - "email": "aaliyah@sysusa.com" - }, - { - "id": 9363, - "guid": "98a1428e-b1a3-4d04-acdd-7d1a80749809", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Bush", - "company": "Idmax", - "phone": "813-600-2545", - "email": "maya@idmax.com" - }, - { - "id": 9364, - "guid": "64984e76-850c-4acb-88c5-7d68ea4a5ff7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Owen", - "company": "Anaframe", - "phone": "836-475-3886", - "email": "julia@anaframe.com" - }, - { - "id": 9365, - "guid": "c86f6eec-82bf-441b-80d5-30a008c8f63f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Milton", - "company": "Nanobanc", - "phone": "895-413-2159", - "email": "addison@nanobanc.com" - }, - { - "id": 9366, - "guid": "5e8c2452-ab7f-4440-b8e8-15eb7dfaa76b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Nathan", - "company": "Unologic", - "phone": "871-536-2270", - "email": "sarah@unologic.com" - }, - { - "id": 9367, - "guid": "d3448008-91c5-4823-836f-efb788e41513", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison White", - "company": "SysVenamerica", - "phone": "823-508-2004", - "email": "madison@sysvenamerica.com" - }, - { - "id": 9368, - "guid": "3cf042db-a0ba-4e2f-87b2-78c2db4105e3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Neal", - "company": "Compuamerica", - "phone": "814-540-3473", - "email": "savannah@compuamerica.com" - }, - { - "id": 9369, - "guid": "ff1cd3fb-51d6-444e-bddd-a025c588a60b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Sheldon", - "company": "Airdyne", - "phone": "849-542-3223", - "email": "jessica@airdyne.com" - }, - { - "id": 9370, - "guid": "9e5d8080-35c5-4a09-9060-d03de2759aeb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Daniels", - "company": "Unconix", - "phone": "824-402-2079", - "email": "layla@unconix.com" - }, - { - "id": 9371, - "guid": "c0d057b0-9acd-4c1e-a5fb-5ce257e6edeb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Thornton", - "company": "Textiqua", - "phone": "847-434-2596", - "email": "melanie@textiqua.com" - }, - { - "id": 9372, - "guid": "d40c00c6-04c1-4be0-9931-39f4edf9ade1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Ford", - "company": "Techtron", - "phone": "889-462-3096", - "email": "makayla@techtron.com" - }, - { - "id": 9373, - "guid": "241cd71b-0b5c-4476-ac19-2b039cbc695f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Carroll", - "company": "Truetomic", - "phone": "883-513-3391", - "email": "emily@truetomic.com" - }, - { - "id": 9374, - "guid": "96b56bcd-ffa9-4ae6-9e09-18f8bca43d0e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Brickman", - "company": "Polytheon", - "phone": "892-555-3010", - "email": "lillian@polytheon.com" - }, - { - "id": 9375, - "guid": "08aa7c33-a1be-422e-8a4b-90ba12cacf45", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Gustman", - "company": "Vencom", - "phone": "861-475-3914", - "email": "audrey@vencom.com" - }, - { - "id": 9376, - "guid": "40e38cb4-9d03-42ac-b478-6c05bde9cf14", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Gustman", - "company": "Enlogia", - "phone": "858-451-2151", - "email": "genesis@enlogia.com" - }, - { - "id": 9377, - "guid": "10527778-0e8e-4131-8763-50a57f44d39d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Timmons", - "company": "Systheon", - "phone": "844-493-2591", - "email": "aaliyah@systheon.com" - }, - { - "id": 9378, - "guid": "51ff7253-72c2-40c2-89e0-6a0d3e60b34c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Sherlock", - "company": "eSteganoergy", - "phone": "819-415-3842", - "email": "ava@esteganoergy.com" - }, - { - "id": 9379, - "guid": "7d4c5bff-b63a-4e5e-96a5-0d3670605501", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Destiny Haig", - "company": "Pacwest", - "phone": "891-524-3223", - "email": "destiny@pacwest.com" - }, - { - "id": 9380, - "guid": "ddd58209-6fb8-4e19-a47a-7cd63f77f4f8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Turner", - "company": "Orthomedia", - "phone": "867-508-3093", - "email": "peyton@orthomedia.com" - }, - { - "id": 9381, - "guid": "8995b202-a641-48d2-9878-f25fec68ba68", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Thornton", - "company": "Vencom", - "phone": "847-478-3239", - "email": "avery@vencom.com" - }, - { - "id": 9382, - "guid": "3b64aaa4-e424-4d96-829b-7dfaf6dee09d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabrielle Michaelson", - "company": "Polytheon", - "phone": "896-440-3759", - "email": "gabrielle@polytheon.com" - }, - { - "id": 9383, - "guid": "14920cb3-fe95-4da0-9cb9-dcc59cd16c84", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Gilmore", - "company": "Hypervaco", - "phone": "828-587-3080", - "email": "chloe@hypervaco.com" - }, - { - "id": 9384, - "guid": "5a4c90dd-6608-4f7b-aa40-dd235c50bd1f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Julia Campbell", - "company": "Conrama", - "phone": "815-525-2988", - "email": "julia@conrama.com" - }, - { - "id": 9385, - "guid": "04bfe0d1-8fe2-4b43-9e0d-22ba8ef76d1e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Trinity Carrington", - "company": "Rapigrafix", - "phone": "804-464-2277", - "email": "trinity@rapigrafix.com" - }, - { - "id": 9386, - "guid": "35051d7d-f8d9-492d-8b7f-f6df713e7c90", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Osborne", - "company": "Interliant", - "phone": "887-534-2617", - "email": "elizabeth@interliant.com" - }, - { - "id": 9387, - "guid": "3fb3d849-3811-4cb4-ba6b-de69d607db12", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Stanley", - "company": "Celgra", - "phone": "810-555-3407", - "email": "emily@celgra.com" - }, - { - "id": 9388, - "guid": "68542703-6cac-45dc-91f5-5220af057953", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Wallace", - "company": "Truegate", - "phone": "807-483-2601", - "email": "eva@truegate.com" - }, - { - "id": 9389, - "guid": "c2a6362a-9737-49e0-95c7-b4230bf5dc07", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ava Goldman", - "company": "Titanigraf", - "phone": "895-445-2261", - "email": "ava@titanigraf.com" - }, - { - "id": 9390, - "guid": "74f6ce21-b7a0-4c64-aa54-db620b4956b7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Daniels", - "company": "Westgate", - "phone": "872-505-3058", - "email": "kayla@westgate.com" - }, - { - "id": 9391, - "guid": "98f1a498-30d2-4a2f-b3e3-7bea38505cfd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Gilbert", - "company": "Robotemplate", - "phone": "834-500-3454", - "email": "julia@robotemplate.com" - }, - { - "id": 9392, - "guid": "2268a44f-5a81-4ad6-b352-44247f991e05", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Wood", - "company": "Jamrola", - "phone": "869-433-3892", - "email": "natalie@jamrola.com" - }, - { - "id": 9393, - "guid": "e7278835-bce6-4e50-af4c-729f8a2a72ad", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Genesis Warren", - "company": "Pacwest", - "phone": "810-574-3638", - "email": "genesis@pacwest.com" - }, - { - "id": 9394, - "guid": "2177c540-2488-4ca7-8e7f-aeb7904009e0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Cook", - "company": "Mescatron", - "phone": "874-409-3459", - "email": "gianna@mescatron.com" - }, - { - "id": 9395, - "guid": "52fa618f-bc03-4763-8b3e-4af09d4eb66d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Oswald", - "company": "Genland", - "phone": "848-443-3875", - "email": "emma@genland.com" - }, - { - "id": 9396, - "guid": "50621225-600f-42ce-bacc-bf83104e5012", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Walkman", - "company": "Airdyne", - "phone": "879-410-2604", - "email": "kayla@airdyne.com" - }, - { - "id": 9397, - "guid": "cacd2c8f-51d1-4bb5-956c-9f6fbfee6aee", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Harrison", - "company": "Proline", - "phone": "899-483-2433", - "email": "allison@proline.com" - }, - { - "id": 9398, - "guid": "f72334cf-ee9b-49fd-91af-f521fae531a4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kylie Haig", - "company": "Interliant", - "phone": "848-495-3989", - "email": "kylie@interliant.com" - }, - { - "id": 9399, - "guid": "a2805a22-3000-4c63-b98e-1638adc5462f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Charlson", - "company": "Westmedia", - "phone": "876-430-3760", - "email": "amelia@westmedia.com" - }, - { - "id": 9400, - "guid": "9c419155-4189-4883-9152-bfdef4950afa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Nash", - "company": "Superscope", - "phone": "807-481-3495", - "email": "aaliyah@superscope.com" - }, - { - "id": 9401, - "guid": "7eb2ae57-7433-4357-910c-29bbc53cfe05", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Smith", - "company": "Raylog", - "phone": "839-403-3144", - "email": "chloe@raylog.com" - }, - { - "id": 9402, - "guid": "246d0e82-6c85-45b4-98d5-ed072989f40f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Timmons", - "company": "Mescaridic", - "phone": "867-595-2408", - "email": "samantha@mescaridic.com" - }, - { - "id": 9403, - "guid": "a691a3e6-a36a-430a-b12a-825d90c0e5fb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Gilbert", - "company": "Titanirola", - "phone": "870-505-2427", - "email": "julia@titanirola.com" - }, - { - "id": 9404, - "guid": "6792cdd4-0139-48e1-a3cd-44752887c5a3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Chesterton", - "company": "iSkyvaco", - "phone": "823-525-3494", - "email": "anna@iskyvaco.com" - }, - { - "id": 9405, - "guid": "563c4bdc-91b0-4128-adda-33155dd73d8b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Mercer", - "company": "Polytheon", - "phone": "867-581-2717", - "email": "alexis@polytheon.com" - }, - { - "id": 9406, - "guid": "3a4e795b-10f8-4ef2-910e-c8388ba3558e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hailey Goodman", - "company": "iMedconik", - "phone": "803-442-2289", - "email": "hailey@imedconik.com" - }, - { - "id": 9407, - "guid": "58ca1997-d13d-4eb3-871c-4b3e77269f85", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Hancock", - "company": "Navivacs", - "phone": "828-531-2010", - "email": "alexis@navivacs.com" - }, - { - "id": 9408, - "guid": "1470304a-3ac7-439f-8ec2-4d21643bce99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Gibbs", - "company": "eEyetanic", - "phone": "897-448-3582", - "email": "maria@eeyetanic.com" - }, - { - "id": 9409, - "guid": "3aa3a02c-3215-47ca-bd1f-7fcb1a6eed19", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Gilson", - "company": "Robocomm", - "phone": "896-557-3239", - "email": "hailey@robocomm.com" - }, - { - "id": 9410, - "guid": "0b5e06fc-fbf5-47a5-a2d7-16c7b24da2d4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Natalie Brown", - "company": "Techtron", - "phone": "891-556-3405", - "email": "natalie@techtron.com" - }, - { - "id": 9411, - "guid": "2d810d31-6ae5-4c24-b705-7331b55e3196", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Chapman", - "company": "Rapigrafix", - "phone": "870-557-2904", - "email": "aaliyah@rapigrafix.com" - }, - { - "id": 9412, - "guid": "ce6ea90c-fa33-4f26-978c-ebcd90dc86e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Charlson", - "company": "Robocomm", - "phone": "861-442-3434", - "email": "samantha@robocomm.com" - }, - { - "id": 9413, - "guid": "8de62252-7b91-45f7-8eeb-dbeac4bfe066", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Mercer", - "company": "iOptystix", - "phone": "861-479-2159", - "email": "victoria@ioptystix.com" - }, - { - "id": 9414, - "guid": "04c972b5-dac6-40a2-9531-8e860005182c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Wallace", - "company": "Interliant", - "phone": "832-520-2770", - "email": "rachel@interliant.com" - }, - { - "id": 9415, - "guid": "498e95be-ffb4-420a-a9bf-497e004c2db1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Clapton", - "company": "Cryptotemplate", - "phone": "872-480-3248", - "email": "amelia@cryptotemplate.com" - }, - { - "id": 9416, - "guid": "2d7770bd-557a-43cd-9704-7f2b2b97116c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Gardner", - "company": "iQualcar", - "phone": "872-456-3073", - "email": "katelyn@iqualcar.com" - }, - { - "id": 9417, - "guid": "c0ec24c8-0e30-4d88-a5b5-8702204597aa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Riley Carrington", - "company": "Teknoplexon", - "phone": "819-511-3432", - "email": "riley@teknoplexon.com" - }, - { - "id": 9418, - "guid": "6ec43d3c-2a8f-43dc-a4b2-e97ea650ba5e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Owen", - "company": "Jamconik", - "phone": "853-507-2446", - "email": "valeria@jamconik.com" - }, - { - "id": 9419, - "guid": "f5fccdc1-822f-4375-b9bf-f90371422655", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Nathan", - "company": "Safeagra", - "phone": "867-404-3316", - "email": "alexa@safeagra.com" - }, - { - "id": 9420, - "guid": "e5a68fb0-b95d-488f-8679-804434838ef7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine WifKinson", - "company": "Enlogia", - "phone": "838-480-3983", - "email": "jasmine@enlogia.com" - }, - { - "id": 9421, - "guid": "87614921-3bb5-4b73-b703-96fd6651d85b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Vance", - "company": "Teknoplexon", - "phone": "845-526-2389", - "email": "kaitlyn@teknoplexon.com" - }, - { - "id": 9422, - "guid": "e4e8f127-e8aa-40c3-829d-db0282be157d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Haig", - "company": "Hypervaco", - "phone": "848-533-3524", - "email": "brooklyn@hypervaco.com" - }, - { - "id": 9423, - "guid": "e72cfc30-4027-4848-b919-53e746a33d1b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Croftoon", - "company": "Skydata", - "phone": "819-493-3335", - "email": "audrey@skydata.com" - }, - { - "id": 9424, - "guid": "8f551a1f-21a6-4502-9d62-e289d5d8bffa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Molligan", - "company": "Entcast", - "phone": "849-401-2658", - "email": "evelyn@entcast.com" - }, - { - "id": 9425, - "guid": "7ed1b3ce-bcb1-4da0-9bca-19ad680ee5de", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Miers", - "company": "Interliant", - "phone": "806-583-3751", - "email": "rachel@interliant.com" - }, - { - "id": 9426, - "guid": "671f710b-dd8b-4bba-ac58-07695c2399d6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Nash", - "company": "Superscope", - "phone": "876-470-3026", - "email": "riley@superscope.com" - }, - { - "id": 9427, - "guid": "a6525632-6304-4102-a048-5d1099a8f89d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Gustman", - "company": "Titanirola", - "phone": "826-518-3658", - "email": "alyssa@titanirola.com" - }, - { - "id": 9428, - "guid": "cae17307-dbbb-4466-b7af-6cd3e995472d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Gardner", - "company": "Teratopia", - "phone": "820-532-3929", - "email": "molly@teratopia.com" - }, - { - "id": 9429, - "guid": "28df0cb8-61f5-4d8e-b008-ab62519aa8ac", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Timmons", - "company": "Jamrola", - "phone": "824-580-3084", - "email": "chloe@jamrola.com" - }, - { - "id": 9430, - "guid": "40a8c287-7d03-4eef-a730-e628436b1666", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Hailey", - "company": "Raylog", - "phone": "805-458-3380", - "email": "payton@raylog.com" - }, - { - "id": 9431, - "guid": "baa3bd43-8589-42aa-b8c6-84195c6d1d58", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Molligan", - "company": "Enlogia", - "phone": "889-556-2452", - "email": "sophie@enlogia.com" - }, - { - "id": 9432, - "guid": "cf373397-5fb1-495f-b78d-d7fdb8f4d396", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Vance", - "company": "Videobanc", - "phone": "873-509-2018", - "email": "katherine@videobanc.com" - }, - { - "id": 9433, - "guid": "417ce12b-551c-4186-a7ba-1ee683d30eb9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Thorndike", - "company": "Orthosoft", - "phone": "848-478-2976", - "email": "bailey@orthosoft.com" - }, - { - "id": 9434, - "guid": "3dde39a3-c136-452d-b340-5cdd5dfb89a2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Hailey Oldridge", - "company": "iMedconik", - "phone": "883-540-3394", - "email": "hailey@imedconik.com" - }, - { - "id": 9435, - "guid": "229640ef-409d-4b39-a864-71a036838d59", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Mercer", - "company": "OpKeycomm", - "phone": "813-504-3826", - "email": "jocelyn@opkeycomm.com" - }, - { - "id": 9436, - "guid": "64f7edcd-b102-4474-806a-7d682dc141c2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Chesterton", - "company": "Robocomm", - "phone": "856-493-3934", - "email": "katherine@robocomm.com" - }, - { - "id": 9437, - "guid": "a043aea0-bab7-487c-8d21-946d46b00a41", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Wayne", - "company": "Systheon", - "phone": "841-585-2483", - "email": "amelia@systheon.com" - }, - { - "id": 9438, - "guid": "88d2e14f-ef3b-42e5-9078-c36d4f52ae52", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Freeman", - "company": "eEyetanic", - "phone": "853-408-3054", - "email": "kayla@eeyetanic.com" - }, - { - "id": 9439, - "guid": "4ecc9262-2217-4b08-8b48-b1575b62ce4c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Carroll", - "company": "Indisco", - "phone": "848-597-3931", - "email": "mia@indisco.com" - }, - { - "id": 9440, - "guid": "8b645c97-3331-493d-a24d-9fa45073afa5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Oldman", - "company": "Safeagra", - "phone": "834-485-2219", - "email": "trinity@safeagra.com" - }, - { - "id": 9441, - "guid": "cbcccb5a-d78c-47e1-974f-cb3813bcab39", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Carey", - "company": "Technogra", - "phone": "830-557-2162", - "email": "katelyn@technogra.com" - }, - { - "id": 9442, - "guid": "d39d538b-30e2-421c-b654-22595ab2967a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Freeman", - "company": "Enlogia", - "phone": "832-502-2325", - "email": "madeline@enlogia.com" - }, - { - "id": 9443, - "guid": "4d2a5d94-7754-428f-b8e3-2998c8e1d09b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Youmans", - "company": "Teraserv", - "phone": "875-519-2702", - "email": "mariah@teraserv.com" - }, - { - "id": 9444, - "guid": "6dff6932-9291-42e1-b058-54ef56d0b0cf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Gilbert", - "company": "Westgate", - "phone": "860-455-2631", - "email": "nevaeh@westgate.com" - }, - { - "id": 9445, - "guid": "45529e84-3f14-49b7-9f48-f66f9c6734a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Daniels", - "company": "Navivacs", - "phone": "847-439-3530", - "email": "serenity@navivacs.com" - }, - { - "id": 9446, - "guid": "e1b64f41-c381-47b1-a71c-9dc5925fe78f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Owen", - "company": "SysUSA", - "phone": "853-475-3608", - "email": "ava@sysusa.com" - }, - { - "id": 9447, - "guid": "69c7f156-17eb-4309-9d86-92bcb78e2763", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Gardner", - "company": "Compuamerica", - "phone": "860-420-3665", - "email": "madelyn@compuamerica.com" - }, - { - "id": 9448, - "guid": "c6c0be00-000e-47f0-b614-13ffe636b6e2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Freeman", - "company": "Genland", - "phone": "865-476-2725", - "email": "eva@genland.com" - }, - { - "id": 9449, - "guid": "affd5305-ddd3-47bb-a049-6e32f9c35d05", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Molly Young", - "company": "Infraique", - "phone": "807-488-3306", - "email": "molly@infraique.com" - }, - { - "id": 9450, - "guid": "8a899692-4d76-4485-8ad8-b413de5f7d2b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Adamson", - "company": "eSteganoergy", - "phone": "869-534-2651", - "email": "hailey@esteganoergy.com" - }, - { - "id": 9451, - "guid": "56117cbb-78a6-402c-af3d-246018fb78ef", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Mercer", - "company": "Titanirola", - "phone": "834-435-3529", - "email": "hailey@titanirola.com" - }, - { - "id": 9452, - "guid": "6f33261e-2dae-4ee2-8b22-2b99913ef3f7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Thornton", - "company": "Idmax", - "phone": "881-415-2799", - "email": "andrea@idmax.com" - }, - { - "id": 9453, - "guid": "c105c131-dacb-43b8-95c3-1a65a95fbcf4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Michaelson", - "company": "Technogra", - "phone": "871-443-2146", - "email": "alexandra@technogra.com" - }, - { - "id": 9454, - "guid": "7c1fbd52-48e7-462a-826d-7a10648aea58", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Oldman", - "company": "Unologic", - "phone": "816-550-3867", - "email": "jocelyn@unologic.com" - }, - { - "id": 9455, - "guid": "96c861af-798e-471d-8d5e-4253c14d508a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Victoria Brown", - "company": "Systheon", - "phone": "897-589-3333", - "email": "victoria@systheon.com" - }, - { - "id": 9456, - "guid": "b0301f8a-78aa-47f3-b202-d51be5000fdb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Ogden", - "company": "Technogra", - "phone": "849-582-2213", - "email": "zoey@technogra.com" - }, - { - "id": 9457, - "guid": "2ce1538d-6fe5-4ce4-9533-7c13fe971b3a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Oldman", - "company": "Vencom", - "phone": "868-569-2080", - "email": "mya@vencom.com" - }, - { - "id": 9458, - "guid": "2f594270-6c7d-495a-a365-7a787d1d3a9a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Charlson", - "company": "SysUSA", - "phone": "839-597-2337", - "email": "taylor@sysusa.com" - }, - { - "id": 9459, - "guid": "daa4a7f4-813c-471a-99b6-cbc4695b252f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Molligan", - "company": "Raylog", - "phone": "849-536-3003", - "email": "kayla@raylog.com" - }, - { - "id": 9460, - "guid": "a0af47e4-a8de-452a-9027-a29b4d54f8d6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Goodman", - "company": "Westgate", - "phone": "815-518-3002", - "email": "gianna@westgate.com" - }, - { - "id": 9461, - "guid": "fb246d7c-c333-4789-a030-d4d59cc58c32", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Calhoun", - "company": "Teratopia", - "phone": "837-401-2773", - "email": "destiny@teratopia.com" - }, - { - "id": 9462, - "guid": "0bf77909-f7dd-4e9c-931c-0cc2658e3526", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Molligan", - "company": "Safeagra", - "phone": "824-547-3719", - "email": "katherine@safeagra.com" - }, - { - "id": 9463, - "guid": "f240661b-bfe2-4a8a-8715-d6aeb24683b1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Charlson", - "company": "Teraserv", - "phone": "839-499-2079", - "email": "katelyn@teraserv.com" - }, - { - "id": 9464, - "guid": "ef7188ad-871d-4c85-b108-64f4ff219d0d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Osborne", - "company": "Titanigraf", - "phone": "895-560-3313", - "email": "isabella@titanigraf.com" - }, - { - "id": 9465, - "guid": "e43c0944-34c0-4830-bb33-b43909578885", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Hoggarth", - "company": "RoboAerlogix", - "phone": "824-481-3560", - "email": "isabella@roboaerlogix.com" - }, - { - "id": 9466, - "guid": "44a83639-d761-4c36-b73b-f78887e7f3a1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Thomson", - "company": "Indisco", - "phone": "831-515-3076", - "email": "madelyn@indisco.com" - }, - { - "id": 9467, - "guid": "ccb12583-8303-471a-9207-95e1530aeabc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Day", - "company": "Aprama", - "phone": "844-583-3242", - "email": "rachel@aprama.com" - }, - { - "id": 9468, - "guid": "3887683f-b3aa-4d82-b563-83a4c2d5dd02", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Watson", - "company": "Unologic", - "phone": "892-595-3168", - "email": "serenity@unologic.com" - }, - { - "id": 9469, - "guid": "cfe92bd3-8520-495b-84d4-ed1fbc557342", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gilbert", - "company": "Mescatron", - "phone": "881-449-3647", - "email": "brooklyn@mescatron.com" - }, - { - "id": 9470, - "guid": "174f14dd-84c2-4348-8ae0-022340bea1a2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Davidson", - "company": "Enlogia", - "phone": "832-573-3602", - "email": "alexandra@enlogia.com" - }, - { - "id": 9471, - "guid": "1563e004-254d-4958-810e-d490740c6532", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Vance", - "company": "Raylog", - "phone": "876-513-2075", - "email": "madeline@raylog.com" - }, - { - "id": 9472, - "guid": "65cc1633-a764-4f60-83ee-ae99d8b53be0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Thornton", - "company": "Orthomedia", - "phone": "871-405-2561", - "email": "sophie@orthomedia.com" - }, - { - "id": 9473, - "guid": "2203e443-6131-4953-950b-bb48a0ad13e3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Harrison", - "company": "Technogra", - "phone": "816-586-2530", - "email": "gabrielle@technogra.com" - }, - { - "id": 9474, - "guid": "d945e285-988a-4010-b439-1f747fed4c22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Brooks", - "company": "Westmedia", - "phone": "834-475-3109", - "email": "autumn@westmedia.com" - }, - { - "id": 9475, - "guid": "bac67158-ddb2-4938-b38c-58e64f3fd80a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Angelina Cook", - "company": "Jamrola", - "phone": "834-595-3146", - "email": "angelina@jamrola.com" - }, - { - "id": 9476, - "guid": "7f3580db-76dd-40b2-8a58-aeb7be418373", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Campbell", - "company": "Celgra", - "phone": "855-529-2848", - "email": "andrea@celgra.com" - }, - { - "id": 9477, - "guid": "3d790179-e4b0-4580-9d69-7dabe2393504", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Abramson", - "company": "Textiqua", - "phone": "872-466-3843", - "email": "riley@textiqua.com" - }, - { - "id": 9478, - "guid": "deaa1b25-f7dd-4ed2-a994-477005cdbf86", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Miers", - "company": "iQualcar", - "phone": "817-408-3018", - "email": "riley@iqualcar.com" - }, - { - "id": 9479, - "guid": "3a935b0d-8e03-46d5-8b2b-d62e3bca6fe4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Conors", - "company": "Robotemplate", - "phone": "889-472-3023", - "email": "ashley@robotemplate.com" - }, - { - "id": 9480, - "guid": "fee460e0-852d-4290-896b-70fc70714642", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Gate", - "company": "Enlogia", - "phone": "850-554-3534", - "email": "gianna@enlogia.com" - }, - { - "id": 9481, - "guid": "af368c0d-8902-48ab-92eb-3e9c1e1a145f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Adamson", - "company": "iMedconik", - "phone": "813-534-3320", - "email": "aubrey@imedconik.com" - }, - { - "id": 9482, - "guid": "9049b216-3e6e-46c9-bc9f-351ce5721baf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia WifKinson", - "company": "Anaframe", - "phone": "816-506-3058", - "email": "julia@anaframe.com" - }, - { - "id": 9483, - "guid": "6871cbf1-ea51-45c9-a77d-f30f8d8aa4c8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Fulton", - "company": "Rapigrafix", - "phone": "869-439-3905", - "email": "lauren@rapigrafix.com" - }, - { - "id": 9484, - "guid": "33467938-ba1a-4987-924d-759836ddf6de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Osborne", - "company": "eEyetanic", - "phone": "823-470-2191", - "email": "grace@eeyetanic.com" - }, - { - "id": 9485, - "guid": "cbba6951-b06b-4590-bc12-272719e9a6c0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila Galbraith", - "company": "Celgra", - "phone": "841-537-3389", - "email": "camila@celgra.com" - }, - { - "id": 9486, - "guid": "e575f8b6-0cee-4628-9c74-5a68e952c1b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Stanley", - "company": "iSkyvaco", - "phone": "863-451-2317", - "email": "abigail@iskyvaco.com" - }, - { - "id": 9487, - "guid": "65bbf7a1-0a57-4474-9251-5b03bebf58eb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Sherlock", - "company": "Teratopia", - "phone": "835-530-2610", - "email": "madelyn@teratopia.com" - }, - { - "id": 9488, - "guid": "1731e92e-87bd-4d9a-a650-b4edb5f0bef9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Payton White", - "company": "Transtouch", - "phone": "815-425-3046", - "email": "payton@transtouch.com" - }, - { - "id": 9489, - "guid": "4da3d44c-cf57-4557-8610-239174d56546", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Miers", - "company": "Conotomics", - "phone": "864-589-2313", - "email": "genesis@conotomics.com" - }, - { - "id": 9490, - "guid": "d1d33cee-2bff-44a3-8ea6-d65717532671", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Miller", - "company": "Keytheon", - "phone": "895-468-3807", - "email": "hannah@keytheon.com" - }, - { - "id": 9491, - "guid": "3d5dbf8e-c3a7-40f4-9b3f-3ed4a5fe25c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Charlotte Turner", - "company": "Westtomik", - "phone": "809-436-2917", - "email": "charlotte@westtomik.com" - }, - { - "id": 9492, - "guid": "158f3e53-2c19-455a-a2c0-25a4e36d0125", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Thorndike", - "company": "iOptystix", - "phone": "886-592-3077", - "email": "madison@ioptystix.com" - }, - { - "id": 9493, - "guid": "52008ecb-57af-400d-ba3d-d898f6a4df09", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Miers", - "company": "eSteganoergy", - "phone": "862-487-3820", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 9494, - "guid": "c77efd71-c280-4cf2-9b10-12f3029f2579", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Crossman", - "company": "Textiqua", - "phone": "828-559-3536", - "email": "paige@textiqua.com" - }, - { - "id": 9495, - "guid": "fa012b2e-deb9-453c-bd80-7171dfe37da4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Osborne", - "company": "Teratopia", - "phone": "848-580-2325", - "email": "brooke@teratopia.com" - }, - { - "id": 9496, - "guid": "66a8db73-5f4b-40e5-b618-fb906b7fb8be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Cramer", - "company": "Robocomm", - "phone": "825-566-3516", - "email": "ashley@robocomm.com" - }, - { - "id": 9497, - "guid": "6ee1b25d-8fb7-494a-b87b-1fadb47fc3a7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Murphy", - "company": "Cryptotemplate", - "phone": "886-414-2473", - "email": "gianna@cryptotemplate.com" - }, - { - "id": 9498, - "guid": "24efd7c4-114f-438f-8551-909e54f5fc1d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Miller", - "company": "Generola", - "phone": "835-461-2061", - "email": "zoey@generola.com" - }, - { - "id": 9499, - "guid": "e9883943-8f64-46a5-8791-b6ecad080ff6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Watson", - "company": "Cryptotemplate", - "phone": "805-408-2757", - "email": "destiny@cryptotemplate.com" - }, - { - "id": 9500, - "guid": "1c7610c6-9697-46ce-8386-4c1d1f274146", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Vaughan", - "company": "iMedconik", - "phone": "868-475-2908", - "email": "jessica@imedconik.com" - }, - { - "id": 9501, - "guid": "6fee57e8-3744-4da8-b3b6-f255e3e10f18", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Michaelson", - "company": "Textiqua", - "phone": "831-503-3897", - "email": "katelyn@textiqua.com" - }, - { - "id": 9502, - "guid": "cbcfe8b3-3bbf-4feb-81ec-2d6462ed4ab1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Goldman", - "company": "Airdyne", - "phone": "887-548-3180", - "email": "payton@airdyne.com" - }, - { - "id": 9503, - "guid": "e6a1ec80-0578-4cc2-a0d6-64972d4f3476", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mackenzie Cramer", - "company": "Textiqua", - "phone": "811-537-2800", - "email": "mackenzie@textiqua.com" - }, - { - "id": 9504, - "guid": "0be80f6d-95dc-49b5-aba9-8a861a519f13", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Miln", - "company": "Gigaura", - "phone": "855-416-3465", - "email": "ashley@gigaura.com" - }, - { - "id": 9505, - "guid": "e0463af5-36a5-4044-9133-a15e20bd1fdc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Goldman", - "company": "Truetomic", - "phone": "856-485-3672", - "email": "brooklyn@truetomic.com" - }, - { - "id": 9506, - "guid": "4a3009e2-39f5-44b8-9a65-f246c06bc8ab", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Nash", - "company": "iOptystix", - "phone": "845-573-3051", - "email": "sophie@ioptystix.com" - }, - { - "id": 9507, - "guid": "b656c16d-64c8-4b72-ad54-b941257c0040", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Wood", - "company": "Xeicon", - "phone": "823-432-3974", - "email": "madison@xeicon.com" - }, - { - "id": 9508, - "guid": "86b9d6af-8b3e-4570-8779-04f0dbc00752", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Hodges", - "company": "Inridium", - "phone": "841-596-2407", - "email": "alexa@inridium.com" - }, - { - "id": 9509, - "guid": "4c7601ea-cf2c-4410-bca7-aa7d2966d2b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Nelson", - "company": "iQualcar", - "phone": "895-561-2341", - "email": "makayla@iqualcar.com" - }, - { - "id": 9510, - "guid": "7e5225f8-7f3d-4ac0-bb26-e1e81119096f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Gilmore", - "company": "Ameritron", - "phone": "868-486-2899", - "email": "chloe@ameritron.com" - }, - { - "id": 9511, - "guid": "6a41220a-3011-45be-96bb-ee88688af787", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Gilbert", - "company": "Syssoft", - "phone": "845-455-3768", - "email": "trinity@syssoft.com" - }, - { - "id": 9512, - "guid": "6167add3-3caf-4f29-bccb-633ec9b3ab44", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Timmons", - "company": "Unologic", - "phone": "826-562-2053", - "email": "madeline@unologic.com" - }, - { - "id": 9513, - "guid": "9eac0a8f-c5e4-417d-9b77-dadff7fa4c74", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Fisher", - "company": "Airdyne", - "phone": "830-446-2397", - "email": "anna@airdyne.com" - }, - { - "id": 9514, - "guid": "f669cbdd-5206-4ff3-959c-4f643201fd8e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Chesterton", - "company": "Unconix", - "phone": "851-404-2133", - "email": "molly@unconix.com" - }, - { - "id": 9515, - "guid": "e385ba10-1a1c-44e7-9228-e2ae8ba2da32", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Ward", - "company": "Venconix", - "phone": "866-496-2472", - "email": "mya@venconix.com" - }, - { - "id": 9516, - "guid": "887bf756-b670-4980-87c4-c28b9a23761e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Carroll", - "company": "OpKeycomm", - "phone": "834-448-3629", - "email": "lillian@opkeycomm.com" - }, - { - "id": 9517, - "guid": "277c8198-e250-4be7-8f2d-c35f58c97d62", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Smith", - "company": "Multitiqua", - "phone": "890-485-2918", - "email": "peyton@multitiqua.com" - }, - { - "id": 9518, - "guid": "e4326a9c-c914-4020-9264-236e1191a399", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emily Clapton", - "company": "US Omnigraphik", - "phone": "847-442-3984", - "email": "emily@us omnigraphik.com" - }, - { - "id": 9519, - "guid": "918c9f78-a028-43a4-996c-12fa8ab9098f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Hawkins", - "company": "Jamconik", - "phone": "881-599-2148", - "email": "olivia@jamconik.com" - }, - { - "id": 9520, - "guid": "37c7e7c5-a41d-4564-9f2a-fd595e1b43a5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Hancock", - "company": "Indisco", - "phone": "855-516-3425", - "email": "alexis@indisco.com" - }, - { - "id": 9521, - "guid": "c8d5a30f-c48d-477b-a99e-af02455bb857", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Warren", - "company": "eSteganoergy", - "phone": "811-525-3003", - "email": "savannah@esteganoergy.com" - }, - { - "id": 9522, - "guid": "df9857ac-1448-459c-8971-410e590773a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Cramer", - "company": "Techtron", - "phone": "851-443-3560", - "email": "bella@techtron.com" - }, - { - "id": 9523, - "guid": "d89ea8dd-3bfa-4088-9ed5-68b83e106814", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Brooks", - "company": "Allnet", - "phone": "881-451-2732", - "email": "isabelle@allnet.com" - }, - { - "id": 9524, - "guid": "c8d21822-f073-4949-b8d1-a8f726dd0b54", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Sherlock", - "company": "Robotemplate", - "phone": "836-498-2352", - "email": "lauren@robotemplate.com" - }, - { - "id": 9525, - "guid": "9bc71db5-7624-411e-90b7-5dcc8578c7ec", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Abramson", - "company": "Teraserv", - "phone": "859-481-3007", - "email": "brianna@teraserv.com" - }, - { - "id": 9526, - "guid": "d52f30f9-ce25-4a6e-8eca-3fa1da8a887b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Thorndike", - "company": "Cryptotemplate", - "phone": "885-471-2940", - "email": "hannah@cryptotemplate.com" - }, - { - "id": 9527, - "guid": "3f80c5b0-4810-4273-9c19-f7a6a7f95fe3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexa Wayne", - "company": "Techtron", - "phone": "828-467-2772", - "email": "alexa@techtron.com" - }, - { - "id": 9528, - "guid": "18ef656e-b47b-4408-8d2e-dff09109c27a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Chandter", - "company": "Interliant", - "phone": "864-420-3545", - "email": "allison@interliant.com" - }, - { - "id": 9529, - "guid": "097cfeff-c65e-40f7-ba4e-8ebfa67ac031", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Osborne", - "company": "Titanigraf", - "phone": "887-464-2334", - "email": "sarah@titanigraf.com" - }, - { - "id": 9530, - "guid": "510b7545-5410-49b1-a187-f9221a6f6b4a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mia Thomson", - "company": "Raylog", - "phone": "868-453-3680", - "email": "mia@raylog.com" - }, - { - "id": 9531, - "guid": "5718fd39-40b2-4a02-ae8b-39fe7023e426", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Crossman", - "company": "Unologic", - "phone": "815-597-3468", - "email": "madeline@unologic.com" - }, - { - "id": 9532, - "guid": "5cc16dad-327c-4f53-b733-7651d32b7f7f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaitlyn Carroll", - "company": "Airdyne", - "phone": "899-477-2829", - "email": "kaitlyn@airdyne.com" - }, - { - "id": 9533, - "guid": "e43965a5-5aa4-43a8-aba5-a6d616af3988", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Hailey", - "company": "Netseco", - "phone": "898-590-2227", - "email": "sophia@netseco.com" - }, - { - "id": 9534, - "guid": "27b75a09-836b-4f09-ba54-1f618ee78dac", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Walkman", - "company": "Thermotomic", - "phone": "813-600-2589", - "email": "claire@thermotomic.com" - }, - { - "id": 9535, - "guid": "1372f7f5-81ea-40af-9857-3904bf4658de", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Adamson", - "company": "Westgate", - "phone": "861-568-3568", - "email": "kaylee@westgate.com" - }, - { - "id": 9536, - "guid": "ff2b175b-dbc6-4901-b0de-db98a56bae72", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Sherlock", - "company": "SysUSA", - "phone": "831-547-2292", - "email": "emma@sysusa.com" - }, - { - "id": 9537, - "guid": "1f296dc8-49f6-4cca-aa8b-0237e1108c98", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Oldridge", - "company": "Gigaura", - "phone": "853-476-2826", - "email": "emily@gigaura.com" - }, - { - "id": 9538, - "guid": "e01513ff-cac8-4256-9942-f1255ec30022", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Wainwright", - "company": "Dynarama", - "phone": "892-494-2867", - "email": "jessica@dynarama.com" - }, - { - "id": 9539, - "guid": "670c9fe8-25cc-4e02-a623-0453c5af0420", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Webster", - "company": "Interliant", - "phone": "841-544-3171", - "email": "gianna@interliant.com" - }, - { - "id": 9540, - "guid": "7f82a5eb-6322-48e6-8029-8a632bfd3a7d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Davidson", - "company": "Navivacs", - "phone": "876-567-3101", - "email": "alexandra@navivacs.com" - }, - { - "id": 9541, - "guid": "449468be-339b-4198-ad94-0bc778ee433d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Gill", - "company": "Fibrotouch", - "phone": "828-453-2466", - "email": "mackenzie@fibrotouch.com" - }, - { - "id": 9542, - "guid": "51c72039-b259-41fd-83b8-d0352216a154", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Hardman", - "company": "Westmedia", - "phone": "846-486-3077", - "email": "jocelyn@westmedia.com" - }, - { - "id": 9543, - "guid": "5db2d528-2a0a-423e-8bfa-b8320d97f7ad", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Rachel Bush", - "company": "Multitiqua", - "phone": "854-495-3223", - "email": "rachel@multitiqua.com" - }, - { - "id": 9544, - "guid": "4fc80f37-f849-4ea0-a565-7a1ec6b6c294", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Wayne", - "company": "Robotomic", - "phone": "831-591-2473", - "email": "julia@robotomic.com" - }, - { - "id": 9545, - "guid": "52ea3fe6-2cfb-4f8f-a92a-53c57e02e452", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Miln", - "company": "Robotomic", - "phone": "845-564-2964", - "email": "amelia@robotomic.com" - }, - { - "id": 9546, - "guid": "14173b18-8a63-4b18-946f-bbd2ff7e5592", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Warren", - "company": "Safeagra", - "phone": "815-516-2426", - "email": "leah@safeagra.com" - }, - { - "id": 9547, - "guid": "dabbcc37-b229-4b6a-8990-0f679a4c45d8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sofia Bush", - "company": "SysVenamerica", - "phone": "889-575-2584", - "email": "sofia@sysvenamerica.com" - }, - { - "id": 9548, - "guid": "0744774f-dc6b-42a9-8afe-70cb3af70ccc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Chapman", - "company": "Truetomic", - "phone": "876-500-3840", - "email": "gianna@truetomic.com" - }, - { - "id": 9549, - "guid": "4671f239-f100-4e4b-895c-a2d85b763ce8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Abigail Goldman", - "company": "Cryptotemplate", - "phone": "855-419-3688", - "email": "abigail@cryptotemplate.com" - }, - { - "id": 9550, - "guid": "e04e05bc-2dfa-4e3f-8eaf-74ddd402a345", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Oswald", - "company": "Steganoconiche", - "phone": "876-439-2323", - "email": "taylor@steganoconiche.com" - }, - { - "id": 9551, - "guid": "d641e853-efe6-4ffa-9479-8acd883ab6f2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Haig", - "company": "Interliant", - "phone": "831-461-2159", - "email": "gianna@interliant.com" - }, - { - "id": 9552, - "guid": "b23c90a1-dcba-4630-8b13-225344079958", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Waller", - "company": "Ventanium", - "phone": "879-584-3050", - "email": "madeline@ventanium.com" - }, - { - "id": 9553, - "guid": "be2e7ca5-64e9-469a-add7-efa23372ad66", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hailey Molligan", - "company": "Turbomart", - "phone": "882-400-2403", - "email": "hailey@turbomart.com" - }, - { - "id": 9554, - "guid": "af6ffb4d-e558-464d-a89d-781eab868aa4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Harrison", - "company": "eEyetanic", - "phone": "880-405-2517", - "email": "destiny@eeyetanic.com" - }, - { - "id": 9555, - "guid": "8626f19d-03e0-4a24-a456-2cd0165388ba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Michaelson", - "company": "Westtomik", - "phone": "880-422-2557", - "email": "kaitlyn@westtomik.com" - }, - { - "id": 9556, - "guid": "5fde2d9d-34ca-45dc-b122-3adf0a244be0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Thornton", - "company": "Quintegrity", - "phone": "866-567-3556", - "email": "aubrey@quintegrity.com" - }, - { - "id": 9557, - "guid": "cc545908-d676-4ffa-aab7-59b8d5c66bed", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Conors", - "company": "Unconix", - "phone": "875-541-2801", - "email": "ella@unconix.com" - }, - { - "id": 9558, - "guid": "24cf09d7-aad2-4a4c-9399-64144575f94c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Warren", - "company": "Entcast", - "phone": "849-402-2342", - "email": "mackenzie@entcast.com" - }, - { - "id": 9559, - "guid": "5d7f054e-a4de-485c-a245-67d126836b0c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Creighton", - "company": "Enlogia", - "phone": "839-570-2643", - "email": "maria@enlogia.com" - }, - { - "id": 9560, - "guid": "15696f3e-a2a6-411d-88cf-22ab7e28abbf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Chesterton", - "company": "Celgra", - "phone": "803-400-2014", - "email": "aubrey@celgra.com" - }, - { - "id": 9561, - "guid": "24b25dc3-00b3-4b99-80bd-a9527c203ab5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Nelson", - "company": "Truegate", - "phone": "871-566-2768", - "email": "victoria@truegate.com" - }, - { - "id": 9562, - "guid": "9a0637b6-7062-4cb8-b8d4-4aba2dca8d37", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Cook", - "company": "eEyetanic", - "phone": "854-404-2729", - "email": "gabrielle@eeyetanic.com" - }, - { - "id": 9563, - "guid": "d9d82b0a-7ff5-4986-84c1-37730c77dbab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Smith", - "company": "Netsystems", - "phone": "819-581-2951", - "email": "mya@netsystems.com" - }, - { - "id": 9564, - "guid": "182fcd1b-4876-4d20-94aa-dd740ca3ccab", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Wayne", - "company": "Technogra", - "phone": "881-468-2221", - "email": "bailey@technogra.com" - }, - { - "id": 9565, - "guid": "f2cd8c65-cf80-4926-b511-d8480fd17f8b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Oswald", - "company": "Genland", - "phone": "832-461-3654", - "email": "aubrey@genland.com" - }, - { - "id": 9566, - "guid": "242090bd-b422-4856-ab98-d1f13c37e5d9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Goldman", - "company": "Tekcar", - "phone": "866-598-3562", - "email": "lily@tekcar.com" - }, - { - "id": 9567, - "guid": "1b6a20dc-da25-417b-b562-e31fc4292181", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Day", - "company": "Safeagra", - "phone": "811-487-3230", - "email": "chloe@safeagra.com" - }, - { - "id": 9568, - "guid": "22564c2b-43ed-4a2f-bdbb-e4543a024c7e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Oliver", - "company": "Steganoconiche", - "phone": "853-523-3300", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 9569, - "guid": "c78c13f3-117e-4211-b343-cd4459bf7948", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Genesis Turner", - "company": "Navivacs", - "phone": "813-485-3375", - "email": "genesis@navivacs.com" - }, - { - "id": 9570, - "guid": "9c542c53-93be-4faf-b2e3-0bacf06ac452", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Bush", - "company": "Robocomm", - "phone": "861-429-3851", - "email": "alexis@robocomm.com" - }, - { - "id": 9571, - "guid": "2802953a-9b3a-47f9-b6d0-871ec35ad156", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Conors", - "company": "Transtouch", - "phone": "846-563-2231", - "email": "rachel@transtouch.com" - }, - { - "id": 9572, - "guid": "b34ef01a-334f-40f7-ad15-f4d85672599f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Audrey Otis", - "company": "Infragraph", - "phone": "873-592-3369", - "email": "audrey@infragraph.com" - }, - { - "id": 9573, - "guid": "7b0bea88-1df4-4311-9182-7e613f0bda39", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Chesterton", - "company": "Interliant", - "phone": "802-557-3029", - "email": "kaitlyn@interliant.com" - }, - { - "id": 9574, - "guid": "5f41f9b8-6216-4036-944a-b8932e54d2a3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Daniels", - "company": "iSkyvaco", - "phone": "883-474-2030", - "email": "nevaeh@iskyvaco.com" - }, - { - "id": 9575, - "guid": "7c7d9a94-3bae-4073-864b-d11cba535ec5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Campbell", - "company": "Westmedia", - "phone": "869-599-2101", - "email": "mya@westmedia.com" - }, - { - "id": 9576, - "guid": "872a5cd0-043f-4f30-b9b5-8de03b0f8492", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella White", - "company": "Skydata", - "phone": "862-502-2949", - "email": "bella@skydata.com" - }, - { - "id": 9577, - "guid": "5d7d2182-564f-4847-93c0-c16e34703726", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Hailey", - "company": "RoboAerlogix", - "phone": "850-435-3250", - "email": "madison@roboaerlogix.com" - }, - { - "id": 9578, - "guid": "4993269a-e8cf-4aa8-bccf-601d3f695628", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Wainwright", - "company": "InfoAirway", - "phone": "866-438-2184", - "email": "gianna@infoairway.com" - }, - { - "id": 9579, - "guid": "3fc92ee4-579d-401b-9c41-33883d2036f7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Warren", - "company": "Polytheon", - "phone": "888-458-2880", - "email": "abigail@polytheon.com" - }, - { - "id": 9580, - "guid": "24dfdcc9-357a-411c-8679-38faff975945", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Oswald", - "company": "OpKeycomm", - "phone": "872-549-3473", - "email": "hannah@opkeycomm.com" - }, - { - "id": 9581, - "guid": "8d109031-500d-4e23-9cb4-f266f39edd9a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hailey Miller", - "company": "Unologic", - "phone": "854-413-2222", - "email": "hailey@unologic.com" - }, - { - "id": 9582, - "guid": "4cffbdd5-6a9f-4dae-8e64-88e82267821d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Mercer", - "company": "Quintegrity", - "phone": "824-463-2529", - "email": "madison@quintegrity.com" - }, - { - "id": 9583, - "guid": "b5ac9a92-f04f-4a5d-bd22-55c1831f2ab7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Wood", - "company": "InfoAirway", - "phone": "877-463-3907", - "email": "hannah@infoairway.com" - }, - { - "id": 9584, - "guid": "02073969-1f5b-4091-9764-7d68ba8bdfd5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Thornton", - "company": "Technogra", - "phone": "852-416-3995", - "email": "ariana@technogra.com" - }, - { - "id": 9585, - "guid": "4120cfeb-4963-42e6-bdc4-837d8655ed5b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madison Webster", - "company": "Qualserve", - "phone": "899-573-2313", - "email": "madison@qualserve.com" - }, - { - "id": 9586, - "guid": "ec3cf2e6-0d9d-4f84-9d0b-ebdb00746342", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Gilbert", - "company": "Orthosoft", - "phone": "866-528-2913", - "email": "mia@orthosoft.com" - }, - { - "id": 9587, - "guid": "24f2430f-b9d4-45ed-9e33-8ecb87c9b6c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Cramer", - "company": "iMedconik", - "phone": "894-424-3208", - "email": "claire@imedconik.com" - }, - { - "id": 9588, - "guid": "6dba34e9-d788-409a-88dd-019ad03edc30", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Galbraith", - "company": "Multitiqua", - "phone": "847-484-2597", - "email": "genesis@multitiqua.com" - }, - { - "id": 9589, - "guid": "19280359-d88f-4a58-8ed5-fb02be8ab629", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Thornton", - "company": "Compuamerica", - "phone": "826-550-2578", - "email": "julia@compuamerica.com" - }, - { - "id": 9590, - "guid": "8efa3f1c-cadf-41b4-ad5a-fe6dfdb7891f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Charlson", - "company": "Allphysiche", - "phone": "876-588-2228", - "email": "vanessa@allphysiche.com" - }, - { - "id": 9591, - "guid": "c5a29daa-ad0c-4706-a7e5-ae6ba001e58f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Sherlock", - "company": "Pacwest", - "phone": "860-403-3913", - "email": "isabella@pacwest.com" - }, - { - "id": 9592, - "guid": "60ec1e67-3dab-43f2-8a8e-1dcb21648a5f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ashley Osborne", - "company": "iOptystix", - "phone": "831-565-2746", - "email": "ashley@ioptystix.com" - }, - { - "id": 9593, - "guid": "5cbade22-655f-44a2-b560-4f49c7dc1bf6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooklyn Conors", - "company": "Inridium", - "phone": "828-560-3181", - "email": "brooklyn@inridium.com" - }, - { - "id": 9594, - "guid": "1c26071b-a53b-41a6-811a-1bd690048ef8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Michaelson", - "company": "Safetrust", - "phone": "845-523-2286", - "email": "morgan@safetrust.com" - }, - { - "id": 9595, - "guid": "04092695-b4be-4e49-80fe-3b922c590624", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoe Daniels", - "company": "iSkyvaco", - "phone": "888-471-2489", - "email": "zoe@iskyvaco.com" - }, - { - "id": 9596, - "guid": "7c6b2b95-4a49-47a4-93fd-1526466ea23d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Campbell", - "company": "Steganoconiche", - "phone": "803-471-3330", - "email": "katherine@steganoconiche.com" - }, - { - "id": 9597, - "guid": "2b9020a3-ecfe-45f8-9b6d-f9a0410dfb44", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Oldridge", - "company": "Vencom", - "phone": "890-580-2746", - "email": "katelyn@vencom.com" - }, - { - "id": 9598, - "guid": "106b3a97-bbb0-4c17-b383-08887b85c0a6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Oliver", - "company": "Techtron", - "phone": "832-589-2128", - "email": "hailey@techtron.com" - }, - { - "id": 9599, - "guid": "0d762ef9-a37b-4dc4-8c0d-6906ccc4d23c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Brickman", - "company": "Mescatron", - "phone": "876-513-2740", - "email": "paige@mescatron.com" - }, - { - "id": 9600, - "guid": "91da25e5-0698-401a-a367-87df990f63f5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kayla Carey", - "company": "eEyetanic", - "phone": "890-485-2305", - "email": "kayla@eeyetanic.com" - }, - { - "id": 9601, - "guid": "9d90d48d-009c-4d1a-a5f9-733a0797cca2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sofia Nash", - "company": "iQualcar", - "phone": "897-598-3971", - "email": "sofia@iqualcar.com" - }, - { - "id": 9602, - "guid": "5f9df8fc-44a0-4047-9fc6-a843e196e6ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Galbraith", - "company": "Compuamerica", - "phone": "829-424-3813", - "email": "brooke@compuamerica.com" - }, - { - "id": 9603, - "guid": "4c0173af-8ed4-43d4-8381-6afc9877e5a0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Carey", - "company": "Entcast", - "phone": "821-559-3024", - "email": "vanessa@entcast.com" - }, - { - "id": 9604, - "guid": "d5fce6e3-a66e-4f3f-9825-3d6d4cf82628", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Layla Miln", - "company": "Entcast", - "phone": "893-578-3618", - "email": "layla@entcast.com" - }, - { - "id": 9605, - "guid": "f913e224-6529-4d07-9a83-a58b38995c9f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Addison Day", - "company": "Polytheon", - "phone": "881-598-2806", - "email": "addison@polytheon.com" - }, - { - "id": 9606, - "guid": "15d5bfc2-d123-49a9-b546-e6a390d6384e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoey Gilbert", - "company": "eEyetanic", - "phone": "844-514-3135", - "email": "zoey@eeyetanic.com" - }, - { - "id": 9607, - "guid": "3df6c1a5-7af6-4985-afa1-e6bddd0cda85", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Ward", - "company": "Quintegrity", - "phone": "827-599-3335", - "email": "riley@quintegrity.com" - }, - { - "id": 9608, - "guid": "7882fd44-543d-4bcd-9b27-a89f1806d9e7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Bush", - "company": "Polytheon", - "phone": "886-576-2034", - "email": "addison@polytheon.com" - }, - { - "id": 9609, - "guid": "a3b211a5-8113-40b0-9495-927e6f3f54f4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Sheldon", - "company": "Fibrotopia", - "phone": "840-519-3324", - "email": "jasmine@fibrotopia.com" - }, - { - "id": 9610, - "guid": "35979deb-d043-406e-815c-f5d386988f22", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Ogden", - "company": "Netseco", - "phone": "844-594-2473", - "email": "alyssa@netseco.com" - }, - { - "id": 9611, - "guid": "8b2e4150-5da4-4d53-8dd3-461c8fd4d0b6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Hodges", - "company": "Safeagra", - "phone": "874-547-2080", - "email": "aaliyah@safeagra.com" - }, - { - "id": 9612, - "guid": "9661c8a8-53fd-46e4-a6d7-3fab25701ab2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Valeria Gustman", - "company": "Jamrola", - "phone": "836-592-3260", - "email": "valeria@jamrola.com" - }, - { - "id": 9613, - "guid": "3debe8aa-9879-451b-8729-902fa13d47ba", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Adamson", - "company": "Titanirola", - "phone": "889-492-3158", - "email": "lily@titanirola.com" - }, - { - "id": 9614, - "guid": "6164954d-54be-4e76-b144-0234db44a006", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Turner", - "company": "eSteganoergy", - "phone": "830-576-3004", - "email": "alexa@esteganoergy.com" - }, - { - "id": 9615, - "guid": "7eb0fbf4-36c0-4600-9bbf-44c842c6dc1a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Freeman", - "company": "US Omnigraphik", - "phone": "852-560-3681", - "email": "brianna@us omnigraphik.com" - }, - { - "id": 9616, - "guid": "083ba1ba-45d8-4b3f-b9c0-96e9235da3e0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madelyn Wallace", - "company": "Orthosoft", - "phone": "868-455-3487", - "email": "madelyn@orthosoft.com" - }, - { - "id": 9617, - "guid": "e5c22535-2a79-46ff-a848-e42955d459bb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Haig", - "company": "Venconix", - "phone": "847-411-2808", - "email": "genesis@venconix.com" - }, - { - "id": 9618, - "guid": "e6bfbe84-04ee-4c2d-9ab2-fd6d8a71d05c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Carrington", - "company": "Rapigrafix", - "phone": "886-498-3280", - "email": "mackenzie@rapigrafix.com" - }, - { - "id": 9619, - "guid": "20ab695a-fc69-4d90-bf62-8a98ca9f6134", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabella Otis", - "company": "Conrama", - "phone": "859-595-3752", - "email": "isabella@conrama.com" - }, - { - "id": 9620, - "guid": "e5939431-b5a1-40c0-a609-6f161814e139", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Wesley", - "company": "Robocomm", - "phone": "804-589-2206", - "email": "hannah@robocomm.com" - }, - { - "id": 9621, - "guid": "72ed205f-a9fb-4505-b94a-642a68a62fb7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Creighton", - "company": "Superscope", - "phone": "896-524-3908", - "email": "isabelle@superscope.com" - }, - { - "id": 9622, - "guid": "eadd0a46-39a1-433e-ad04-ca175ed0b0ca", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Osborne", - "company": "Cryptotegrity", - "phone": "875-414-3753", - "email": "hailey@cryptotegrity.com" - }, - { - "id": 9623, - "guid": "d3846d3c-4142-492b-8dae-55cf03a396c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Stanley", - "company": "Syssoft", - "phone": "897-578-2379", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 9624, - "guid": "7d8d6dc9-4b5c-4d0e-85ef-ff1f044b90f6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Higgins", - "company": "Airdyne", - "phone": "852-401-2732", - "email": "julia@airdyne.com" - }, - { - "id": 9625, - "guid": "36dae3b9-f646-419e-a8fe-9ff8ab9e4b63", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna WifKinson", - "company": "SysVenamerica", - "phone": "824-455-2290", - "email": "gianna@sysvenamerica.com" - }, - { - "id": 9626, - "guid": "638b60bf-5b60-4477-a68d-84cbb8120ef4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Stanley", - "company": "Textiqua", - "phone": "851-593-2285", - "email": "avery@textiqua.com" - }, - { - "id": 9627, - "guid": "ad937c91-2704-4079-9240-7908a3b11396", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Wainwright", - "company": "Titanirola", - "phone": "809-592-3894", - "email": "nevaeh@titanirola.com" - }, - { - "id": 9628, - "guid": "f343f575-6ef0-45a4-bb56-b04727d5d32b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Arianna Murphy", - "company": "Pacwest", - "phone": "868-428-3183", - "email": "arianna@pacwest.com" - }, - { - "id": 9629, - "guid": "68669a9e-d56a-4c70-98b4-20955cc1d255", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Osborne", - "company": "Dynarama", - "phone": "827-420-3878", - "email": "emily@dynarama.com" - }, - { - "id": 9630, - "guid": "1b7f3f4e-4210-485f-8667-88fbfd574153", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Daniels", - "company": "Gigaura", - "phone": "895-476-2194", - "email": "hailey@gigaura.com" - }, - { - "id": 9631, - "guid": "f515488f-beeb-454e-8587-a2f7fa6a424c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Peyton Brickman", - "company": "Keytheon", - "phone": "826-406-3958", - "email": "peyton@keytheon.com" - }, - { - "id": 9632, - "guid": "d1b74a11-66e7-47bf-8b0e-b1fd93008ea9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Brooks", - "company": "Superscope", - "phone": "872-418-3764", - "email": "zoey@superscope.com" - }, - { - "id": 9633, - "guid": "5251646b-dcbf-4127-9b7c-9c978244dfca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Oldman", - "company": "SysVenamerica", - "phone": "840-561-2148", - "email": "sarah@sysvenamerica.com" - }, - { - "id": 9634, - "guid": "bdc2bd56-adfe-4534-9547-521ad420fbf3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Murphy", - "company": "Safeagra", - "phone": "875-499-3129", - "email": "kylie@safeagra.com" - }, - { - "id": 9635, - "guid": "9d523320-8ef3-4694-9a16-f5472b62f650", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Cramer", - "company": "Cryptotegrity", - "phone": "818-430-2350", - "email": "peyton@cryptotegrity.com" - }, - { - "id": 9636, - "guid": "db6ac80a-4e8f-4824-a873-072c25e588ad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Wayne", - "company": "Ventanium", - "phone": "804-440-2384", - "email": "elizabeth@ventanium.com" - }, - { - "id": 9637, - "guid": "b92cf2e5-d0a6-43fe-8363-dd121a3a76a9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Cook", - "company": "Infraique", - "phone": "892-442-3953", - "email": "peyton@infraique.com" - }, - { - "id": 9638, - "guid": "fef7b138-5758-4c4b-be89-39688aeb5c1a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Mercer", - "company": "Techtron", - "phone": "821-581-2611", - "email": "hailey@techtron.com" - }, - { - "id": 9639, - "guid": "20f210e9-ab97-41f6-8e0e-7bcbc34f32a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Andrea White", - "company": "Orthomedia", - "phone": "824-544-2811", - "email": "andrea@orthomedia.com" - }, - { - "id": 9640, - "guid": "b762cf4e-25ed-46b1-b620-8f2bcad19216", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Fulton", - "company": "SysUSA", - "phone": "819-463-3150", - "email": "savannah@sysusa.com" - }, - { - "id": 9641, - "guid": "23fb4906-793a-4d56-9992-ccf36ece609d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Gilbert", - "company": "Pericenta", - "phone": "800-467-2832", - "email": "bella@pericenta.com" - }, - { - "id": 9642, - "guid": "091b3114-fddb-4731-a099-d4a970264c79", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Neal", - "company": "Infragraph", - "phone": "852-500-3173", - "email": "gabrielle@infragraph.com" - }, - { - "id": 9643, - "guid": "0e05963e-7901-4de0-b8b7-96e3e2d007e3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Wesley", - "company": "Anaframe", - "phone": "828-529-3840", - "email": "charlotte@anaframe.com" - }, - { - "id": 9644, - "guid": "acac9502-8466-4c65-8f12-331aa295e2e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Walkman", - "company": "Conrama", - "phone": "872-505-3871", - "email": "arianna@conrama.com" - }, - { - "id": 9645, - "guid": "99d886c6-2216-4b77-8794-72a8f37ab752", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Caroline Day", - "company": "Conrama", - "phone": "823-465-2826", - "email": "caroline@conrama.com" - }, - { - "id": 9646, - "guid": "7d7c8206-6276-4353-9a2f-0b837bd3697c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Milton", - "company": "Westmedia", - "phone": "877-546-2941", - "email": "hannah@westmedia.com" - }, - { - "id": 9647, - "guid": "c0f8cc5a-b172-46a4-b0ce-d98730a8baf7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ariana Owen", - "company": "Systheon", - "phone": "856-506-3060", - "email": "ariana@systheon.com" - }, - { - "id": 9648, - "guid": "02cd72eb-7636-4b18-95b9-191427d2cd58", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bailey Sherlock", - "company": "Compuamerica", - "phone": "848-535-2369", - "email": "bailey@compuamerica.com" - }, - { - "id": 9649, - "guid": "67e2c782-a0c7-4757-a548-4b685726e724", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Oswald", - "company": "eSteganoergy", - "phone": "818-447-2787", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 9650, - "guid": "8c284b2a-3248-480a-bcfe-c5b3c95936e7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Oldman", - "company": "Videobanc", - "phone": "836-597-3203", - "email": "grace@videobanc.com" - }, - { - "id": 9651, - "guid": "93bacc09-bdd1-498d-8010-980cdb2a4f0c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lillian Hardman", - "company": "Generola", - "phone": "882-473-2404", - "email": "lillian@generola.com" - }, - { - "id": 9652, - "guid": "0a826474-bc88-4f1d-adf1-1d2479498681", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Walkman", - "company": "US Infratouch", - "phone": "894-450-2751", - "email": "jessica@us infratouch.com" - }, - { - "id": 9653, - "guid": "4f3ca17a-35af-4971-b82a-37ebe22598a3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Milton", - "company": "Safeagra", - "phone": "840-543-2825", - "email": "zoe@safeagra.com" - }, - { - "id": 9654, - "guid": "61cda98c-5ef1-4ef0-b055-a986e849c7f4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Ford", - "company": "Conrama", - "phone": "830-426-3248", - "email": "melanie@conrama.com" - }, - { - "id": 9655, - "guid": "76e66414-2527-493d-8bb9-39056483db87", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Gate", - "company": "eEyetanic", - "phone": "812-528-2994", - "email": "sarah@eeyetanic.com" - }, - { - "id": 9656, - "guid": "f334beca-c5bd-478c-a23c-a895b2d5a44a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Eva Goodman", - "company": "InfoAirway", - "phone": "813-439-3602", - "email": "eva@infoairway.com" - }, - { - "id": 9657, - "guid": "89fd8b71-7177-424d-b352-6d1ef11ca17d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Galbraith", - "company": "Syssoft", - "phone": "823-504-2733", - "email": "molly@syssoft.com" - }, - { - "id": 9658, - "guid": "77350744-17f4-4f93-accd-f47f87c37ec5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Andrea Gill", - "company": "Fibrotouch", - "phone": "814-579-2095", - "email": "andrea@fibrotouch.com" - }, - { - "id": 9659, - "guid": "14584ce7-248d-4d07-8606-992f99bf4eb7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Clapton", - "company": "Anaframe", - "phone": "850-544-2782", - "email": "khloe@anaframe.com" - }, - { - "id": 9660, - "guid": "5746a7d0-4aef-4367-8edf-424131d51274", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lauren Clapton", - "company": "Raylog", - "phone": "841-511-3380", - "email": "lauren@raylog.com" - }, - { - "id": 9661, - "guid": "229de8d9-a62e-47b5-a5bd-2cce61251965", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Carey", - "company": "Truegate", - "phone": "808-484-2220", - "email": "brooke@truegate.com" - }, - { - "id": 9662, - "guid": "82abae8f-890d-4234-a1c8-a35b5baf1bc0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Wainwright", - "company": "Teratopia", - "phone": "859-405-3922", - "email": "angelina@teratopia.com" - }, - { - "id": 9663, - "guid": "bf338515-4d2f-4bb5-9acd-a771f2a7a95c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Wood", - "company": "Multitiqua", - "phone": "813-574-2373", - "email": "julia@multitiqua.com" - }, - { - "id": 9664, - "guid": "e74199b0-5078-4c47-a13f-596d6aed1426", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Clapton", - "company": "Keytheon", - "phone": "833-468-2393", - "email": "taylor@keytheon.com" - }, - { - "id": 9665, - "guid": "fea6037a-2935-4480-94fb-be15982ff4b5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Brickman", - "company": "Indisco", - "phone": "831-405-2898", - "email": "arianna@indisco.com" - }, - { - "id": 9666, - "guid": "0870a050-af1d-40a6-bb44-5ab2b315ec86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Harrison", - "company": "Interliant", - "phone": "887-566-3756", - "email": "victoria@interliant.com" - }, - { - "id": 9667, - "guid": "642699bc-22c1-4878-8015-cd8c92d2affe", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Waller", - "company": "Airdyne", - "phone": "833-423-3181", - "email": "isabella@airdyne.com" - }, - { - "id": 9668, - "guid": "ef1b9a97-7257-4b1d-9158-626c5ca9481d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Hoggarth", - "company": "Conrama", - "phone": "880-599-3419", - "email": "makayla@conrama.com" - }, - { - "id": 9669, - "guid": "bc5c3f16-0ad4-4596-975e-abca007844fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Nash", - "company": "eSteganoergy", - "phone": "883-446-2293", - "email": "payton@esteganoergy.com" - }, - { - "id": 9670, - "guid": "2138897a-2d8d-4c48-9832-87aa048cbc7d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Wesley", - "company": "Multitiqua", - "phone": "877-506-2053", - "email": "victoria@multitiqua.com" - }, - { - "id": 9671, - "guid": "2ea8a0e3-0922-48b0-887d-82478e82129f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Miers", - "company": "Allnet", - "phone": "807-468-3578", - "email": "brooke@allnet.com" - }, - { - "id": 9672, - "guid": "de59a406-0317-4412-863d-cd74d21badf3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Youmans", - "company": "Entcast", - "phone": "886-481-3317", - "email": "maya@entcast.com" - }, - { - "id": 9673, - "guid": "e32644af-0571-4fdb-b932-72212fb24a50", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabrielle Timmons", - "company": "Interliant", - "phone": "866-568-3414", - "email": "gabrielle@interliant.com" - }, - { - "id": 9674, - "guid": "a3580fa8-a1e1-47e7-ae69-d7d9e50e3abd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Brown", - "company": "Polytheon", - "phone": "870-425-3965", - "email": "emma@polytheon.com" - }, - { - "id": 9675, - "guid": "9f152581-8cb6-4918-adb4-3e6f0b334b79", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gardner", - "company": "SysVenamerica", - "phone": "820-551-2632", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 9676, - "guid": "b77b22e1-da93-491d-be65-a7783a3260b6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Carter", - "company": "Quintegrity", - "phone": "847-411-2811", - "email": "emily@quintegrity.com" - }, - { - "id": 9677, - "guid": "543e818f-14a2-4721-9434-d14853587d6f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoe Miers", - "company": "Enlogia", - "phone": "853-563-2650", - "email": "zoe@enlogia.com" - }, - { - "id": 9678, - "guid": "f68aa135-b79f-4223-819c-b7ec6f777169", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Gilmore", - "company": "Robotomic", - "phone": "825-546-3323", - "email": "sarah@robotomic.com" - }, - { - "id": 9679, - "guid": "664b5d7e-2a05-4a73-ba49-c9ef33096ba7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Molligan", - "company": "Allphysiche", - "phone": "826-594-2249", - "email": "angelina@allphysiche.com" - }, - { - "id": 9680, - "guid": "34a29165-6236-4684-94fa-4320f96eca10", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Wood", - "company": "Teraserv", - "phone": "879-413-3086", - "email": "isabella@teraserv.com" - }, - { - "id": 9681, - "guid": "78533ef5-3904-46d3-a932-d2ec4869fe3c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Mercer", - "company": "Jamconik", - "phone": "812-401-3366", - "email": "madelyn@jamconik.com" - }, - { - "id": 9682, - "guid": "b0a5b98a-19ef-4163-819b-941d55d5769a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Neal", - "company": "Titanigraf", - "phone": "819-471-2467", - "email": "aubrey@titanigraf.com" - }, - { - "id": 9683, - "guid": "d7dc8fb6-0665-4770-9315-e2f97e93d905", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Chapman", - "company": "RoboAerlogix", - "phone": "824-565-3218", - "email": "katelyn@roboaerlogix.com" - }, - { - "id": 9684, - "guid": "a0f9c3ea-196c-4f58-9b06-8a52684c24da", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Fulton", - "company": "Anagraph", - "phone": "800-533-3918", - "email": "hailey@anagraph.com" - }, - { - "id": 9685, - "guid": "ab6cc5e5-372f-47b4-afa4-c2812c5c2094", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Carter", - "company": "iEnland", - "phone": "899-461-3111", - "email": "samantha@ienland.com" - }, - { - "id": 9686, - "guid": "677cd461-c612-432c-a1f8-0d501f3aaba1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Wayne", - "company": "Jamconik", - "phone": "801-407-2372", - "email": "eva@jamconik.com" - }, - { - "id": 9687, - "guid": "19614b26-c604-4b54-aec6-510ed5263797", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hailey Wesley", - "company": "InfoAirway", - "phone": "826-435-2906", - "email": "hailey@infoairway.com" - }, - { - "id": 9688, - "guid": "d70210f4-227d-48d5-ad77-d1853784cf35", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Davidson", - "company": "Robocomm", - "phone": "890-479-2386", - "email": "jessica@robocomm.com" - }, - { - "id": 9689, - "guid": "b448b1d0-b658-4816-baf0-ccbe0db835cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Carey", - "company": "Truetomic", - "phone": "822-428-2931", - "email": "caroline@truetomic.com" - }, - { - "id": 9690, - "guid": "f59a14e0-1a69-4929-89a3-9b9be4e7f689", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Higgins", - "company": "Orthosoft", - "phone": "876-581-3154", - "email": "sophia@orthosoft.com" - }, - { - "id": 9691, - "guid": "d24ef1eb-7364-4029-8546-8e6ca1886e6e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Gibbs", - "company": "Dynarama", - "phone": "876-468-3004", - "email": "eva@dynarama.com" - }, - { - "id": 9692, - "guid": "772104e8-ec75-45e4-83b7-7905948e7736", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Wallace", - "company": "Teratopia", - "phone": "854-523-2405", - "email": "sarah@teratopia.com" - }, - { - "id": 9693, - "guid": "70d2264a-e937-4691-9d1c-5b62ba8c54a4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Freeman", - "company": "Xeicon", - "phone": "824-453-3359", - "email": "mackenzie@xeicon.com" - }, - { - "id": 9694, - "guid": "7a32c351-183d-4753-bfb6-50803f7f095d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Nelson", - "company": "Sontopia", - "phone": "840-484-2036", - "email": "brooklyn@sontopia.com" - }, - { - "id": 9695, - "guid": "c24e3885-9144-4d8b-96cc-f7da0e06f3db", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Carter", - "company": "iEnland", - "phone": "824-494-2780", - "email": "abigail@ienland.com" - }, - { - "id": 9696, - "guid": "28fba140-5ae4-45b8-bd51-34608d1c667d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Oliver", - "company": "Nanobanc", - "phone": "895-571-3066", - "email": "jasmine@nanobanc.com" - }, - { - "id": 9697, - "guid": "5fb0bb2b-ec26-48f5-8178-57f6ee2a669d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Nash", - "company": "Orthosoft", - "phone": "872-516-2927", - "email": "kaitlyn@orthosoft.com" - }, - { - "id": 9698, - "guid": "a710936b-f042-4d51-9712-b71dea872d95", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Harrison", - "company": "Superscope", - "phone": "821-553-2954", - "email": "valeria@superscope.com" - }, - { - "id": 9699, - "guid": "ff5059fc-4efd-4e28-81ed-0d5ebf175f83", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Layla Clapton", - "company": "Technogra", - "phone": "808-490-2357", - "email": "layla@technogra.com" - }, - { - "id": 9700, - "guid": "214229b0-61fb-4aba-98e5-3d6ff1543a46", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Gibbs", - "company": "Anaframe", - "phone": "807-579-2454", - "email": "sophie@anaframe.com" - }, - { - "id": 9701, - "guid": "b4873717-14cb-4273-bd8b-5a0180e7411a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Samantha Gibbs", - "company": "Teratopia", - "phone": "891-556-2269", - "email": "samantha@teratopia.com" - }, - { - "id": 9702, - "guid": "c98d6eaf-0879-462c-ac4d-be30d45ed226", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Oldman", - "company": "Pacwest", - "phone": "898-445-2363", - "email": "mia@pacwest.com" - }, - { - "id": 9703, - "guid": "59f638d5-d460-42b4-99fe-ea77f26dd097", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madison Gill", - "company": "iEnland", - "phone": "869-491-3483", - "email": "madison@ienland.com" - }, - { - "id": 9704, - "guid": "ef35da57-653b-42ed-b2f6-1c934a0c0d1f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Gerald", - "company": "Fibroserve", - "phone": "805-461-3824", - "email": "madeline@fibroserve.com" - }, - { - "id": 9705, - "guid": "b9074bbb-b20a-411b-8744-c168aaaced00", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Thomson", - "company": "Aluco", - "phone": "831-477-2641", - "email": "evelyn@aluco.com" - }, - { - "id": 9706, - "guid": "88a1d44c-ebe7-4f6d-8ac4-b1ee6635033b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Carrington", - "company": "Netsystems", - "phone": "847-517-3134", - "email": "leah@netsystems.com" - }, - { - "id": 9707, - "guid": "f998a17d-2264-4a6f-8e82-378feedd0caf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Morrison", - "company": "Superscope", - "phone": "829-541-2070", - "email": "sophia@superscope.com" - }, - { - "id": 9708, - "guid": "dcd59dd3-8d1c-4b5b-88a5-49c213879e4e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Osborne", - "company": "Interliant", - "phone": "841-542-2133", - "email": "kayla@interliant.com" - }, - { - "id": 9709, - "guid": "0d12d8a7-4110-4b60-b541-837d02863b3a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Bush", - "company": "Entcast", - "phone": "876-554-3032", - "email": "paige@entcast.com" - }, - { - "id": 9710, - "guid": "60b4d51d-3beb-46fc-ab1e-a1571b7bf887", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bailey Sherlock", - "company": "Qualserve", - "phone": "881-503-3584", - "email": "bailey@qualserve.com" - }, - { - "id": 9711, - "guid": "114c820e-4576-4c7b-a06e-cacc9911e00f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Day", - "company": "Compuamerica", - "phone": "845-536-3935", - "email": "olivia@compuamerica.com" - }, - { - "id": 9712, - "guid": "782a5819-adb4-4e3c-8752-4f06337e8149", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexandra Gilbert", - "company": "Venconix", - "phone": "879-519-3894", - "email": "alexandra@venconix.com" - }, - { - "id": 9713, - "guid": "328f2622-e722-45ce-867a-bc2b39bcad34", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Campbell", - "company": "SysVenamerica", - "phone": "823-539-2611", - "email": "alexis@sysvenamerica.com" - }, - { - "id": 9714, - "guid": "8e83f8aa-12ad-4354-a557-5728d5137566", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ella Davidson", - "company": "Thermotomic", - "phone": "838-497-3856", - "email": "ella@thermotomic.com" - }, - { - "id": 9715, - "guid": "226b6e5e-a447-4aaf-ab0c-2e9eeb11295d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Mercer", - "company": "SysVenamerica", - "phone": "866-495-2579", - "email": "evelyn@sysvenamerica.com" - }, - { - "id": 9716, - "guid": "8b31dcd5-1e56-453b-a9ad-b594b2874f7a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Oliver", - "company": "Inridium", - "phone": "878-481-3845", - "email": "destiny@inridium.com" - }, - { - "id": 9717, - "guid": "734ca1db-aace-4529-9d35-45b76eeec08c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Goldman", - "company": "Turbomart", - "phone": "883-407-2409", - "email": "aubrey@turbomart.com" - }, - { - "id": 9718, - "guid": "ba539f24-f159-43cc-a0b0-eb0f819668f1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Gibbs", - "company": "Truegate", - "phone": "899-575-3455", - "email": "angelina@truegate.com" - }, - { - "id": 9719, - "guid": "178bf2e1-d3e8-4fe8-9b28-6bef554b81b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Young", - "company": "Ameritron", - "phone": "837-546-2865", - "email": "madison@ameritron.com" - }, - { - "id": 9720, - "guid": "fbfaab1c-89cf-4558-96bb-4e3b531fb8e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Ward", - "company": "eSteganoergy", - "phone": "868-477-2136", - "email": "faith@esteganoergy.com" - }, - { - "id": 9721, - "guid": "3a9e6049-5a23-4c99-9b5d-e33254fe95cc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Hailey", - "company": "Vencom", - "phone": "895-576-2108", - "email": "trinity@vencom.com" - }, - { - "id": 9722, - "guid": "08acd113-621a-4a7f-8ba2-c4c7820793bc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Charlson", - "company": "Unconix", - "phone": "877-505-2038", - "email": "zoey@unconix.com" - }, - { - "id": 9723, - "guid": "cc41a578-a368-439d-b394-31b19803f9b3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Warren", - "company": "Infragraph", - "phone": "834-440-2498", - "email": "riley@infragraph.com" - }, - { - "id": 9724, - "guid": "3fd93302-0f77-4d44-acc0-06102d108d7d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Sherlock", - "company": "Inridium", - "phone": "833-574-2960", - "email": "aaliyah@inridium.com" - }, - { - "id": 9725, - "guid": "56c8069e-78b2-4bdb-8db9-32516da23bfa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Andrea Davidson", - "company": "Mescaridic", - "phone": "892-593-2757", - "email": "andrea@mescaridic.com" - }, - { - "id": 9726, - "guid": "de6ad98a-5061-45ac-b5db-bd351b064382", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Vaughan", - "company": "SysVenamerica", - "phone": "886-455-2578", - "email": "destiny@sysvenamerica.com" - }, - { - "id": 9727, - "guid": "8803bd63-ffe7-4953-b051-f86760ed35b9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Chesterton", - "company": "Inridium", - "phone": "865-440-2728", - "email": "andrea@inridium.com" - }, - { - "id": 9728, - "guid": "a345848b-4c91-4f96-a075-348065be1263", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Hawkins", - "company": "Jamrola", - "phone": "828-405-2096", - "email": "madeline@jamrola.com" - }, - { - "id": 9729, - "guid": "d83293b9-cb2f-420b-8b40-19527443b584", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoey Galbraith", - "company": "Robocomm", - "phone": "898-558-2725", - "email": "zoey@robocomm.com" - }, - { - "id": 9730, - "guid": "50ad7f73-1d74-4cb9-8237-1455a2aa5db0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Charlson", - "company": "Anaframe", - "phone": "836-409-3800", - "email": "emma@anaframe.com" - }, - { - "id": 9731, - "guid": "08f40f47-7a46-4ce8-a52f-819ca3ccde51", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Gerald", - "company": "Openserve", - "phone": "838-554-2852", - "email": "katherine@openserve.com" - }, - { - "id": 9732, - "guid": "c45eb71e-1e37-4536-a2aa-2014c668459f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Andrea Owen", - "company": "Westmedia", - "phone": "865-598-3528", - "email": "andrea@westmedia.com" - }, - { - "id": 9733, - "guid": "2a1cf063-4b9b-48a6-ba55-06cc9d5688ad", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Harrison", - "company": "Infragraph", - "phone": "891-592-3956", - "email": "peyton@infragraph.com" - }, - { - "id": 9734, - "guid": "716a04f9-14f5-4797-a196-00b1c64846d7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Creighton", - "company": "Inridium", - "phone": "873-499-2243", - "email": "angelina@inridium.com" - }, - { - "id": 9735, - "guid": "fb1ed191-6dab-4b98-ba11-bb86e5b3e52b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Gardner", - "company": "Aluco", - "phone": "871-462-2407", - "email": "emily@aluco.com" - }, - { - "id": 9736, - "guid": "e2fb1155-efc0-4f40-babb-669736368011", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Miers", - "company": "Celgra", - "phone": "832-583-3459", - "email": "avery@celgra.com" - }, - { - "id": 9737, - "guid": "8d678286-86e0-49c4-bb3e-d2fccdcbf5f5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mia Chapman", - "company": "Pacwest", - "phone": "873-431-3078", - "email": "mia@pacwest.com" - }, - { - "id": 9738, - "guid": "521fae26-31b7-448f-a79e-f0becf75ce68", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Olivia Oswald", - "company": "Ameritron", - "phone": "892-452-2033", - "email": "olivia@ameritron.com" - }, - { - "id": 9739, - "guid": "3d0248cd-6dde-4d61-a276-96ad114db4bd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Higgins", - "company": "Quintegrity", - "phone": "886-587-2109", - "email": "avery@quintegrity.com" - }, - { - "id": 9740, - "guid": "68659480-4827-451c-92dc-93138ee4eb0c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Michaelson", - "company": "Nanobanc", - "phone": "837-520-2646", - "email": "bailey@nanobanc.com" - }, - { - "id": 9741, - "guid": "d6a1459f-b061-431c-bd4d-12ea5915d30f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Young", - "company": "Multitiqua", - "phone": "864-584-3261", - "email": "sophie@multitiqua.com" - }, - { - "id": 9742, - "guid": "a5d609a8-b54e-45f3-9e14-13f9f0b69896", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Clapton", - "company": "Hypervaco", - "phone": "805-407-3665", - "email": "lauren@hypervaco.com" - }, - { - "id": 9743, - "guid": "3ef2e1eb-68c5-4b42-bc9d-21518fa88a42", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Morrison", - "company": "Ventanium", - "phone": "814-522-2553", - "email": "madelyn@ventanium.com" - }, - { - "id": 9744, - "guid": "9f7f58d2-3225-4ee0-a861-731d5a049611", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Wesley", - "company": "Robocomm", - "phone": "864-472-3744", - "email": "valeria@robocomm.com" - }, - { - "id": 9745, - "guid": "f8a1b8b4-b04b-4e5a-8c59-626388012736", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Turner", - "company": "Robocomm", - "phone": "840-468-3963", - "email": "gabrielle@robocomm.com" - }, - { - "id": 9746, - "guid": "24522e5f-84cf-4bfb-b70c-4b54ba5f3050", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Turner", - "company": "Turbomart", - "phone": "883-462-2017", - "email": "andrea@turbomart.com" - }, - { - "id": 9747, - "guid": "822e3544-1e7e-4cde-8be9-2c5403ef04d3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Leah Wainwright", - "company": "Fibroserve", - "phone": "824-530-3029", - "email": "leah@fibroserve.com" - }, - { - "id": 9748, - "guid": "bb237d18-2397-4993-9003-7a170c6aa5f7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Miln", - "company": "Dynarama", - "phone": "845-404-2051", - "email": "zoe@dynarama.com" - }, - { - "id": 9749, - "guid": "f4ee3152-7276-4760-aa6c-6b23a8c1f648", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Smith", - "company": "Robotomic", - "phone": "818-577-3323", - "email": "anna@robotomic.com" - }, - { - "id": 9750, - "guid": "1ffca76a-84db-4f2d-9a25-f1d8a058284d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Timmons", - "company": "Allnet", - "phone": "877-414-3900", - "email": "addison@allnet.com" - }, - { - "id": 9751, - "guid": "48e81e0c-65b2-4e61-beb4-67c46ed564d7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Carey", - "company": "Ventanium", - "phone": "893-451-2755", - "email": "alexandra@ventanium.com" - }, - { - "id": 9752, - "guid": "87fa90c6-04ba-4a82-a063-da09f06b8d55", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Carrington", - "company": "Celgra", - "phone": "804-597-3482", - "email": "trinity@celgra.com" - }, - { - "id": 9753, - "guid": "06d2cbe9-3847-4b32-944a-0a385127f10b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Chapman", - "company": "Technogra", - "phone": "892-424-2743", - "email": "zoe@technogra.com" - }, - { - "id": 9754, - "guid": "bd213185-86d6-4085-8f23-5f82cea9b9fb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Haig", - "company": "Raylog", - "phone": "895-424-3772", - "email": "isabella@raylog.com" - }, - { - "id": 9755, - "guid": "ee1b1c9a-0ce7-4fd7-840c-976894bdfe15", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Thornton", - "company": "Conrama", - "phone": "849-526-2118", - "email": "jessica@conrama.com" - }, - { - "id": 9756, - "guid": "50cdd66c-f043-48f1-a5bd-e3eed27354e4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Freeman", - "company": "Multitiqua", - "phone": "889-443-2485", - "email": "kaitlyn@multitiqua.com" - }, - { - "id": 9757, - "guid": "582f8a68-e361-4fda-98c0-95708adab5d8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Hawkins", - "company": "Cryptotegrity", - "phone": "838-540-3679", - "email": "bailey@cryptotegrity.com" - }, - { - "id": 9758, - "guid": "10343a95-3444-4c3e-87e2-1c179db72c51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Thomson", - "company": "Pericenta", - "phone": "800-452-2967", - "email": "hailey@pericenta.com" - }, - { - "id": 9759, - "guid": "eab0c35c-7be4-4a7f-b9cf-d43573cdd5a0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Goldman", - "company": "Orthosoft", - "phone": "865-444-2540", - "email": "gianna@orthosoft.com" - }, - { - "id": 9760, - "guid": "a2c48055-c743-4cc6-9ebb-e65c033c0741", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Morrison", - "company": "Teraserv", - "phone": "815-510-3766", - "email": "sophie@teraserv.com" - }, - { - "id": 9761, - "guid": "6b93823a-75bd-44d6-9196-4668a450c5ab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Gill", - "company": "Celgra", - "phone": "881-405-2512", - "email": "autumn@celgra.com" - }, - { - "id": 9762, - "guid": "12547552-d885-41ae-befb-a98c3f042523", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Molligan", - "company": "Tekcar", - "phone": "896-564-3819", - "email": "savannah@tekcar.com" - }, - { - "id": 9763, - "guid": "53b8fe96-9601-4a00-bbf9-849f0797a5f2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hannah Wesley", - "company": "Interliant", - "phone": "827-585-2657", - "email": "hannah@interliant.com" - }, - { - "id": 9764, - "guid": "f501a065-9b59-4b89-a5a4-f0c6f3558a3b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Thorndike", - "company": "Westgate", - "phone": "881-456-2208", - "email": "makayla@westgate.com" - }, - { - "id": 9765, - "guid": "f23ac418-615a-4e13-8829-e0ff2ef07c10", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madelyn Wesley", - "company": "Teraserv", - "phone": "892-536-2209", - "email": "madelyn@teraserv.com" - }, - { - "id": 9766, - "guid": "960dab98-a1c9-4dfb-b50a-a3816b295be7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Stanley", - "company": "Multitiqua", - "phone": "897-472-3373", - "email": "evelyn@multitiqua.com" - }, - { - "id": 9767, - "guid": "30c041cc-2c44-47b7-b6e7-63767c918b69", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria Youmans", - "company": "Multitiqua", - "phone": "800-468-2258", - "email": "victoria@multitiqua.com" - }, - { - "id": 9768, - "guid": "1c91408d-af70-4fd9-a877-2b8309598a2e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Thomson", - "company": "Allnet", - "phone": "839-532-3853", - "email": "katherine@allnet.com" - }, - { - "id": 9769, - "guid": "999f138f-3bec-4f77-9d15-988ee979d74a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Mercer", - "company": "Allphysiche", - "phone": "814-419-2934", - "email": "hannah@allphysiche.com" - }, - { - "id": 9770, - "guid": "650a4485-c151-4b5e-a5f5-d513acc1dab3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Oliver", - "company": "Raylog", - "phone": "843-578-3831", - "email": "sarah@raylog.com" - }, - { - "id": 9771, - "guid": "bacc800b-c413-4211-912c-b2d5bf019d76", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Chesterton", - "company": "Mescatron", - "phone": "814-567-2275", - "email": "isabella@mescatron.com" - }, - { - "id": 9772, - "guid": "8e7d54ab-8212-4837-b88b-0ccabd67cdb7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Bush", - "company": "iMedconik", - "phone": "855-451-3486", - "email": "leah@imedconik.com" - }, - { - "id": 9773, - "guid": "d6676149-fed8-49ba-9690-a4821d99f2dd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Timmons", - "company": "Ameritron", - "phone": "817-462-2889", - "email": "savannah@ameritron.com" - }, - { - "id": 9774, - "guid": "e9516599-3c0b-4c45-954b-f68a7defe18c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madison Thorndike", - "company": "Titanigraf", - "phone": "859-576-2238", - "email": "madison@titanigraf.com" - }, - { - "id": 9775, - "guid": "d4e68e2c-d394-4a5f-9113-f2362aa647ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Murphy", - "company": "Infraique", - "phone": "848-474-2152", - "email": "alexa@infraique.com" - }, - { - "id": 9776, - "guid": "dccdc4b5-0512-400f-a461-c79b46f060ff", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Wallace", - "company": "Unologic", - "phone": "839-473-3305", - "email": "sophia@unologic.com" - }, - { - "id": 9777, - "guid": "a484998a-378c-44b9-95d0-3c721f22d21b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Gilson", - "company": "Unconix", - "phone": "809-481-3669", - "email": "emma@unconix.com" - }, - { - "id": 9778, - "guid": "d956904f-7767-40ff-8ac1-1ad61cbb86d1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Chandter", - "company": "Netsystems", - "phone": "807-522-3005", - "email": "madeline@netsystems.com" - }, - { - "id": 9779, - "guid": "dd930aed-86ba-405d-9ca9-8de0fa43c207", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Audrey Waller", - "company": "Ventanium", - "phone": "859-416-3258", - "email": "audrey@ventanium.com" - }, - { - "id": 9780, - "guid": "f7e38607-6e09-4dd5-89c3-efb07eebdad3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Owen", - "company": "Robotemplate", - "phone": "860-577-2202", - "email": "jocelyn@robotemplate.com" - }, - { - "id": 9781, - "guid": "5198def4-4cc3-44f4-a391-aa4cbd90fcb8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Charlson", - "company": "Superscope", - "phone": "867-454-2657", - "email": "maria@superscope.com" - }, - { - "id": 9782, - "guid": "73f83af7-6264-4cf7-8e35-d2a393b9db33", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mia Michaelson", - "company": "iMedconik", - "phone": "846-443-3316", - "email": "mia@imedconik.com" - }, - { - "id": 9783, - "guid": "796cf870-f352-457f-901c-a2cda4b60a5a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Miller", - "company": "Superscope", - "phone": "846-433-3615", - "email": "madeline@superscope.com" - }, - { - "id": 9784, - "guid": "c6618a05-7409-4901-8102-385ce75e2961", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Young", - "company": "Robotomic", - "phone": "827-443-3342", - "email": "sofia@robotomic.com" - }, - { - "id": 9785, - "guid": "8c702460-7cea-4dcc-909f-3706d5ed6900", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Gate", - "company": "eSteganoergy", - "phone": "888-416-3241", - "email": "mya@esteganoergy.com" - }, - { - "id": 9786, - "guid": "ad6c0195-b5cb-4577-97fe-455e6c6d56ab", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Miller", - "company": "Entcast", - "phone": "818-421-2836", - "email": "bella@entcast.com" - }, - { - "id": 9787, - "guid": "1eedb2b0-c66b-4a32-9404-9a8eb4ad5301", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Abramson", - "company": "Proline", - "phone": "824-561-3670", - "email": "mariah@proline.com" - }, - { - "id": 9788, - "guid": "5549d282-f53f-445a-88de-c84c1d414460", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Grace Carter", - "company": "Videobanc", - "phone": "859-490-2533", - "email": "grace@videobanc.com" - }, - { - "id": 9789, - "guid": "29e17a77-6a1e-4454-a7a0-51dcbcf2ea8a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Thornton", - "company": "Polytheon", - "phone": "891-405-3440", - "email": "camila@polytheon.com" - }, - { - "id": 9790, - "guid": "755bd3e7-1a09-42f3-b118-b3d3bb7f0c50", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Haig", - "company": "Techtron", - "phone": "812-572-2339", - "email": "serenity@techtron.com" - }, - { - "id": 9791, - "guid": "7584a4fc-1d5a-4b5a-82fc-bfa7c3bce809", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Galbraith", - "company": "SysVenamerica", - "phone": "803-587-3736", - "email": "jasmine@sysvenamerica.com" - }, - { - "id": 9792, - "guid": "4f7f4c6d-6608-4b53-9db1-01c39d70e534", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Nevaeh Gate", - "company": "Conrama", - "phone": "837-527-2540", - "email": "nevaeh@conrama.com" - }, - { - "id": 9793, - "guid": "80d74514-70fa-4b62-89ac-90e35a2d9f35", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Nathan", - "company": "Technogra", - "phone": "850-535-2619", - "email": "claire@technogra.com" - }, - { - "id": 9794, - "guid": "39c763a6-dd67-4f25-ae3e-f6a3ac197bd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Thornton", - "company": "OpKeycomm", - "phone": "855-510-2341", - "email": "ava@opkeycomm.com" - }, - { - "id": 9795, - "guid": "14073ccc-e195-4c77-98b1-34b42bf9ea53", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Bush", - "company": "Allnet", - "phone": "838-496-2927", - "email": "aubrey@allnet.com" - }, - { - "id": 9796, - "guid": "8c855597-8669-4e47-a6cb-78748245db9c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexa Oldman", - "company": "Videobanc", - "phone": "899-428-2618", - "email": "alexa@videobanc.com" - }, - { - "id": 9797, - "guid": "71d6be82-3e8d-4cc8-820d-f2e857176e54", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Molligan", - "company": "US Omnigraphik", - "phone": "868-436-3010", - "email": "charlotte@us omnigraphik.com" - }, - { - "id": 9798, - "guid": "5b217be7-ed49-4b4d-b4a0-920d7b898181", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mackenzie White", - "company": "Westgate", - "phone": "830-481-3122", - "email": "mackenzie@westgate.com" - }, - { - "id": 9799, - "guid": "3029977d-8637-4f17-b409-1ea08b7bcddb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Gilbert", - "company": "Techtron", - "phone": "861-441-2695", - "email": "kaitlyn@techtron.com" - }, - { - "id": 9800, - "guid": "c7b378dc-30a3-4147-bff0-70c7f7212e63", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lauren Youmans", - "company": "Nanobanc", - "phone": "852-515-3325", - "email": "lauren@nanobanc.com" - }, - { - "id": 9801, - "guid": "c70275fd-ed3f-432f-ba0f-2ebac3dec0eb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Hancock", - "company": "Inridium", - "phone": "859-451-3225", - "email": "brooklyn@inridium.com" - }, - { - "id": 9802, - "guid": "ddae181e-89af-4036-9f69-184717070970", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Brooks", - "company": "Hypervaco", - "phone": "893-573-3495", - "email": "emily@hypervaco.com" - }, - { - "id": 9803, - "guid": "5b59ea40-d75e-467d-8042-92d6456fa470", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Thomson", - "company": "Idmax", - "phone": "876-417-2112", - "email": "jocelyn@idmax.com" - }, - { - "id": 9804, - "guid": "6c340b64-f8c0-40cc-aa9c-e03d7ee05bb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Oliver", - "company": "Indisco", - "phone": "871-432-3165", - "email": "katelyn@indisco.com" - }, - { - "id": 9805, - "guid": "39b52c26-f458-4ed3-b13c-df1ffd41be2e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Webster", - "company": "Robocomm", - "phone": "834-595-2757", - "email": "melanie@robocomm.com" - }, - { - "id": 9806, - "guid": "16b287d6-86d4-4216-aa91-f332c6303620", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Calhoun", - "company": "Technogra", - "phone": "875-568-2793", - "email": "emma@technogra.com" - }, - { - "id": 9807, - "guid": "12275193-20e5-4e1f-9a9d-65f23dcaf671", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maya Morrison", - "company": "eEyetanic", - "phone": "872-576-2853", - "email": "maya@eeyetanic.com" - }, - { - "id": 9808, - "guid": "69cdb514-0a4c-45ff-886f-1a84ef9d8ae5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Oswald", - "company": "Transtouch", - "phone": "801-420-2313", - "email": "maya@transtouch.com" - }, - { - "id": 9809, - "guid": "a63e7ba5-a794-4e00-9fdc-d9339c6522c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Walkman", - "company": "Pericenta", - "phone": "899-560-3968", - "email": "natalie@pericenta.com" - }, - { - "id": 9810, - "guid": "5d2cdb68-96db-4416-beac-07ea742391bc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Timmons", - "company": "RoboAerlogix", - "phone": "840-479-2340", - "email": "claire@roboaerlogix.com" - }, - { - "id": 9811, - "guid": "7665db69-837f-4654-9dbf-2517383f4a6a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Watson", - "company": "iQualcar", - "phone": "871-433-3662", - "email": "savannah@iqualcar.com" - }, - { - "id": 9812, - "guid": "9ecf90ec-44d7-4ec4-9e7e-43d6aae463b5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Taylor Carey", - "company": "Dynarama", - "phone": "823-505-3193", - "email": "taylor@dynarama.com" - }, - { - "id": 9813, - "guid": "578e4a80-6bad-4379-b527-a316801c15eb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Carey", - "company": "InfoAirway", - "phone": "828-567-2341", - "email": "sophia@infoairway.com" - }, - { - "id": 9814, - "guid": "ea4aaa48-9ea7-4c6f-a761-96ccbe8dd87e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Winter", - "company": "Multitiqua", - "phone": "857-497-2679", - "email": "kayla@multitiqua.com" - }, - { - "id": 9815, - "guid": "cefdf625-5574-48d4-8b17-e67f7f757e0c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Young", - "company": "Infragraph", - "phone": "874-456-3538", - "email": "morgan@infragraph.com" - }, - { - "id": 9816, - "guid": "cdc5ebfb-f4ac-4417-bf10-77b71933425e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Wayne", - "company": "Westmedia", - "phone": "835-423-3670", - "email": "sofia@westmedia.com" - }, - { - "id": 9817, - "guid": "c8fdd51b-e907-478a-9f00-58f7ba5f96df", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Ogden", - "company": "Conrama", - "phone": "843-494-3057", - "email": "evelyn@conrama.com" - }, - { - "id": 9818, - "guid": "fb3fe580-bb03-487e-a1fa-25c31e2881c4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Abramson", - "company": "Raylog", - "phone": "895-509-2198", - "email": "gabrielle@raylog.com" - }, - { - "id": 9819, - "guid": "2b159042-94c0-447e-8f44-375515a91ad0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Bush", - "company": "Jamrola", - "phone": "815-490-3100", - "email": "mya@jamrola.com" - }, - { - "id": 9820, - "guid": "b4b5c17f-ec23-4df6-8fe7-af3def96e33f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Wayne", - "company": "Enlogia", - "phone": "805-531-2304", - "email": "kylie@enlogia.com" - }, - { - "id": 9821, - "guid": "29b99562-f466-4bd4-86b3-7e4fb87b3865", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Wood", - "company": "Titanirola", - "phone": "823-585-2156", - "email": "genesis@titanirola.com" - }, - { - "id": 9822, - "guid": "6c02d98b-a38e-4ad9-ad13-1712560930f4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Gilson", - "company": "Proline", - "phone": "824-560-3073", - "email": "zoe@proline.com" - }, - { - "id": 9823, - "guid": "60a02a95-841d-4b58-b83e-d639e0e768a7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Day", - "company": "Keytheon", - "phone": "885-563-3890", - "email": "maya@keytheon.com" - }, - { - "id": 9824, - "guid": "527f2d51-e8a7-4657-b51d-574d2198447b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Creighton", - "company": "iMedconik", - "phone": "885-536-2557", - "email": "makayla@imedconik.com" - }, - { - "id": 9825, - "guid": "aa058d63-6c2c-4cd9-a5d7-c687c9a7ffcb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Otis", - "company": "Qualserve", - "phone": "872-479-2617", - "email": "chloe@qualserve.com" - }, - { - "id": 9826, - "guid": "5d6d1715-161c-4c92-8f19-c96e575a31d5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Winter", - "company": "Cryptotemplate", - "phone": "827-424-2152", - "email": "olivia@cryptotemplate.com" - }, - { - "id": 9827, - "guid": "007f60cc-77d4-4e98-a189-76516b311fb3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Brooks", - "company": "Openserve", - "phone": "896-465-3761", - "email": "lily@openserve.com" - }, - { - "id": 9828, - "guid": "69955367-735d-4b61-8313-f0b72fc22c59", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Sheldon", - "company": "Unconix", - "phone": "853-556-2600", - "email": "evelyn@unconix.com" - }, - { - "id": 9829, - "guid": "ee59f93f-b924-47fa-887a-f748eb0d00cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Ward", - "company": "Anagraph", - "phone": "836-436-2213", - "email": "kayla@anagraph.com" - }, - { - "id": 9830, - "guid": "0141975d-f179-444f-97cf-e9b87a78d45b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Waller", - "company": "iQualcar", - "phone": "824-580-3540", - "email": "anna@iqualcar.com" - }, - { - "id": 9831, - "guid": "d9023478-9ac7-4821-aba4-7290975847f5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Waller", - "company": "US Infratouch", - "phone": "885-417-2493", - "email": "isabelle@us infratouch.com" - }, - { - "id": 9832, - "guid": "6df180f1-09e3-436a-9f2d-d17e7461d864", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Nelson", - "company": "Truegate", - "phone": "865-400-3407", - "email": "zoe@truegate.com" - }, - { - "id": 9833, - "guid": "74280344-f55a-43b4-b2f2-bf2d3a084b2a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Neal", - "company": "Dynarama", - "phone": "839-469-2452", - "email": "brianna@dynarama.com" - }, - { - "id": 9834, - "guid": "51faba49-0a63-46d8-ad89-59a73040728c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Gerald", - "company": "Safeagra", - "phone": "868-503-3978", - "email": "maya@safeagra.com" - }, - { - "id": 9835, - "guid": "4a26fad1-3e4f-4f86-8342-73e3049fa908", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Wesley", - "company": "Orthosoft", - "phone": "816-408-2248", - "email": "isabelle@orthosoft.com" - }, - { - "id": 9836, - "guid": "10633b6e-507c-4275-9229-74ae6fc0cde4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Nash", - "company": "Unologic", - "phone": "848-479-3923", - "email": "avery@unologic.com" - }, - { - "id": 9837, - "guid": "742d85fa-b119-43a5-bcb3-65950faec539", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Hancock", - "company": "Cryptotemplate", - "phone": "804-592-3977", - "email": "julia@cryptotemplate.com" - }, - { - "id": 9838, - "guid": "a1d2f499-a02f-42eb-8de5-3ad22e8cc5c7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Nathan", - "company": "Unconix", - "phone": "848-471-3731", - "email": "andrea@unconix.com" - }, - { - "id": 9839, - "guid": "2fb3d688-e200-4248-b058-49846ecdd3da", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Bush", - "company": "Aluco", - "phone": "864-431-2283", - "email": "abigail@aluco.com" - }, - { - "id": 9840, - "guid": "4cc46b95-3f2e-486c-92d2-a39c7cd5617f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Turner", - "company": "Robocomm", - "phone": "838-444-2348", - "email": "mya@robocomm.com" - }, - { - "id": 9841, - "guid": "b27faea4-d9f6-4235-9a57-2f4cf6018c5c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aaliyah Freeman", - "company": "OpKeycomm", - "phone": "831-438-3617", - "email": "aaliyah@opkeycomm.com" - }, - { - "id": 9842, - "guid": "61c9a92a-20a7-476e-a9df-d5318f2b6916", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Vanessa Oldridge", - "company": "Orthomedia", - "phone": "845-436-3548", - "email": "vanessa@orthomedia.com" - }, - { - "id": 9843, - "guid": "bb8dce99-9ab8-424a-b539-a88477bec78d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Morrison", - "company": "InfoAirway", - "phone": "842-529-2793", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 9844, - "guid": "dfe1a9fa-15c9-4c01-90ef-32f09a6d46ff", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Miers", - "company": "US Omnigraphik", - "phone": "894-403-3065", - "email": "nevaeh@us omnigraphik.com" - }, - { - "id": 9845, - "guid": "79adacd8-d5fb-4ee2-a78c-e3be2be2958b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina Clapton", - "company": "Netsystems", - "phone": "893-402-3912", - "email": "angelina@netsystems.com" - }, - { - "id": 9846, - "guid": "8ad105fd-a138-41c4-b1da-d20dfe2ed104", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Conors", - "company": "Interliant", - "phone": "800-542-3479", - "email": "avery@interliant.com" - }, - { - "id": 9847, - "guid": "cad5a905-3600-40d3-8881-3c8502b2ef75", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Ford", - "company": "Polytheon", - "phone": "835-468-2833", - "email": "julia@polytheon.com" - }, - { - "id": 9848, - "guid": "a588be80-2aee-4162-ac89-a786336169b1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Hawkins", - "company": "Quintegrity", - "phone": "854-433-2149", - "email": "lauren@quintegrity.com" - }, - { - "id": 9849, - "guid": "b649fe74-9cd7-4a62-ac44-0411d04696a7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Sheldon", - "company": "Enlogia", - "phone": "870-585-3223", - "email": "alexis@enlogia.com" - }, - { - "id": 9850, - "guid": "1d9df9d9-1cf1-4e0e-9f64-33ffe0740740", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Youmans", - "company": "Videobanc", - "phone": "801-520-2734", - "email": "kayla@videobanc.com" - }, - { - "id": 9851, - "guid": "b42d3cde-3e29-4d50-adea-a6b382e07363", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Ward", - "company": "Openserve", - "phone": "874-431-2350", - "email": "victoria@openserve.com" - }, - { - "id": 9852, - "guid": "658e9b11-97c3-4f79-9bd7-ac3a4e9fed10", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Haig", - "company": "OpKeycomm", - "phone": "881-594-2852", - "email": "alexandra@opkeycomm.com" - }, - { - "id": 9853, - "guid": "0d943fc1-b3d1-44b3-ab68-d03c93823aac", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Vaughan", - "company": "Turbomart", - "phone": "835-424-2126", - "email": "khloe@turbomart.com" - }, - { - "id": 9854, - "guid": "c04992bd-2727-4825-b2ff-46f1848019dc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Wayne", - "company": "Openserve", - "phone": "856-599-2394", - "email": "alexandra@openserve.com" - }, - { - "id": 9855, - "guid": "227aff4b-be25-47b2-abd7-866e6c7663f5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Gilbert", - "company": "Pacwest", - "phone": "845-410-2442", - "email": "hailey@pacwest.com" - }, - { - "id": 9856, - "guid": "73786860-fc96-4d5c-b44e-2ee2475e8da3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Gilmore", - "company": "Turbomart", - "phone": "840-574-2199", - "email": "molly@turbomart.com" - }, - { - "id": 9857, - "guid": "286b68eb-bcb3-4226-8f48-95530784d2d6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Calhoun", - "company": "Aluco", - "phone": "879-482-2429", - "email": "destiny@aluco.com" - }, - { - "id": 9858, - "guid": "f582d61a-aadc-4965-abcb-c02c537d09bf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Crossman", - "company": "Ventanium", - "phone": "811-560-2503", - "email": "bailey@ventanium.com" - }, - { - "id": 9859, - "guid": "7f69418d-66bb-4ac6-827c-52b867fa1799", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Warren", - "company": "Ameritron", - "phone": "810-461-3166", - "email": "eva@ameritron.com" - }, - { - "id": 9860, - "guid": "a97d3618-58af-4b77-8466-db00f05008bb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Waller", - "company": "Aprama", - "phone": "811-418-2854", - "email": "savannah@aprama.com" - }, - { - "id": 9861, - "guid": "f96cba5a-a10e-47c7-a4a8-5f54346f8721", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Nelson", - "company": "Mescaridic", - "phone": "818-525-3372", - "email": "kaitlyn@mescaridic.com" - }, - { - "id": 9862, - "guid": "762ca8f6-6144-4cf8-b868-b8cb61231e04", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Hancock", - "company": "Techtron", - "phone": "809-593-3597", - "email": "alexandra@techtron.com" - }, - { - "id": 9863, - "guid": "d17b6f35-626d-41ec-93b9-b587c1c9059f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Clapton", - "company": "Netseco", - "phone": "833-518-3186", - "email": "lillian@netseco.com" - }, - { - "id": 9864, - "guid": "4764486b-cbf9-4cdc-a2d3-c2f68341c370", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Day", - "company": "Navivacs", - "phone": "871-511-2249", - "email": "alexa@navivacs.com" - }, - { - "id": 9865, - "guid": "543f3656-f7b3-445d-95dc-9f688dd5455c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Gardner", - "company": "Airdyne", - "phone": "861-590-3748", - "email": "mackenzie@airdyne.com" - }, - { - "id": 9866, - "guid": "6a529774-0660-42fb-9878-688d89685d9d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Ford", - "company": "Enlogia", - "phone": "860-404-3103", - "email": "kaitlyn@enlogia.com" - }, - { - "id": 9867, - "guid": "bd086f7c-8bb6-4e09-ba29-5a9aa76de973", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hannah Milton", - "company": "Ameritron", - "phone": "850-514-2412", - "email": "hannah@ameritron.com" - }, - { - "id": 9868, - "guid": "bd87fbe1-0308-40e8-a05a-bf53f70457ba", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Conors", - "company": "Keytheon", - "phone": "819-404-3981", - "email": "gabrielle@keytheon.com" - }, - { - "id": 9869, - "guid": "2258c7d9-8bb1-45af-833e-e29a3ec2f3da", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Wallace", - "company": "Syssoft", - "phone": "847-403-2043", - "email": "addison@syssoft.com" - }, - { - "id": 9870, - "guid": "f3b5af4b-92ac-4027-a21f-761f3e72018a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Peyton Carter", - "company": "Genland", - "phone": "884-463-3143", - "email": "peyton@genland.com" - }, - { - "id": 9871, - "guid": "3e189888-be06-4b1d-9f4b-9577e0fbb357", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Carter", - "company": "Pericenta", - "phone": "816-404-2442", - "email": "kimberly@pericenta.com" - }, - { - "id": 9872, - "guid": "56e37fd2-e573-4464-8d39-da35f260dda0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Carter", - "company": "Netseco", - "phone": "846-566-2970", - "email": "kaylee@netseco.com" - }, - { - "id": 9873, - "guid": "69f49a52-54da-4371-9a45-a3461757d42c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Hodges", - "company": "Vencom", - "phone": "871-403-3438", - "email": "sophie@vencom.com" - }, - { - "id": 9874, - "guid": "6c891f77-6306-49b1-b86a-dfe9b5c13299", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Haig", - "company": "iQualcar", - "phone": "865-526-3096", - "email": "aubrey@iqualcar.com" - }, - { - "id": 9875, - "guid": "443d9ec8-f825-4c1b-82f3-eb9727280bbc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Oldman", - "company": "Robotemplate", - "phone": "811-560-2994", - "email": "alexis@robotemplate.com" - }, - { - "id": 9876, - "guid": "1ec3fabe-218e-41f3-8598-5f803c9b2cf0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Gilmore", - "company": "Anaframe", - "phone": "884-484-3898", - "email": "autumn@anaframe.com" - }, - { - "id": 9877, - "guid": "328539b5-b472-4578-96c2-61c1edb8b8d0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Wainwright", - "company": "Mescatron", - "phone": "840-491-2586", - "email": "julia@mescatron.com" - }, - { - "id": 9878, - "guid": "c0205808-7757-4001-b406-517e5a1d92b1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Hamphrey", - "company": "Compuamerica", - "phone": "810-458-3927", - "email": "madison@compuamerica.com" - }, - { - "id": 9879, - "guid": "c9497b09-3711-43e7-9430-8700f5f43b3c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Galbraith", - "company": "Truetomic", - "phone": "838-481-3292", - "email": "chloe@truetomic.com" - }, - { - "id": 9880, - "guid": "9db43c95-a7db-4abf-be4f-ca1bfdfc1c2c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Ward", - "company": "Westmedia", - "phone": "824-412-2357", - "email": "addison@westmedia.com" - }, - { - "id": 9881, - "guid": "53cd720d-6020-44f4-8216-03d861606b6d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Charlson", - "company": "Fibrotouch", - "phone": "816-412-3879", - "email": "kaylee@fibrotouch.com" - }, - { - "id": 9882, - "guid": "661cc35e-3207-4119-90af-1e20ca3c5a81", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Nathan", - "company": "iEnland", - "phone": "835-555-3579", - "email": "sydney@ienland.com" - }, - { - "id": 9883, - "guid": "c666f4ad-285c-4381-88cd-eed9a0dbc115", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Eva Gate", - "company": "Orthosoft", - "phone": "878-417-2342", - "email": "eva@orthosoft.com" - }, - { - "id": 9884, - "guid": "e5a36dd9-288c-4bc4-8543-2b325fee335d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Genesis Hamphrey", - "company": "Videobanc", - "phone": "884-540-2167", - "email": "genesis@videobanc.com" - }, - { - "id": 9885, - "guid": "c819f5b3-778b-4585-b509-98aeb208f565", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Julia Murphy", - "company": "Interliant", - "phone": "806-478-2608", - "email": "julia@interliant.com" - }, - { - "id": 9886, - "guid": "2ef85973-819b-4507-8035-97f4569c4e02", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Wallace", - "company": "Ameritron", - "phone": "858-417-3423", - "email": "ashley@ameritron.com" - }, - { - "id": 9887, - "guid": "2b310ea9-c170-4d86-86f8-051ec4cccc94", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kayla Hodges", - "company": "iEnland", - "phone": "897-473-2558", - "email": "kayla@ienland.com" - }, - { - "id": 9888, - "guid": "e67fa941-1dbb-4a16-9e32-c79ddaa72bac", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Wainwright", - "company": "Netseco", - "phone": "853-523-3172", - "email": "taylor@netseco.com" - }, - { - "id": 9889, - "guid": "28fb7bfc-40a6-4bfa-a23e-3bbfebf4cada", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Ford", - "company": "iOptystix", - "phone": "803-534-2812", - "email": "chloe@ioptystix.com" - }, - { - "id": 9890, - "guid": "22365f78-213a-49be-8a7e-6ee773bf7b2c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mia Hamphrey", - "company": "Infragraph", - "phone": "824-405-3568", - "email": "mia@infragraph.com" - }, - { - "id": 9891, - "guid": "811e3821-8d10-44a6-854c-75f0a890a6d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Gilmore", - "company": "iMedconik", - "phone": "879-430-3709", - "email": "kylie@imedconik.com" - }, - { - "id": 9892, - "guid": "7b917876-ca48-4b02-af03-191102e3238e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Hodges", - "company": "Fibroserve", - "phone": "853-476-2124", - "email": "trinity@fibroserve.com" - }, - { - "id": 9893, - "guid": "0b9c5d5d-27d9-4cda-9db1-492759070e92", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Gustman", - "company": "Transtouch", - "phone": "855-406-2679", - "email": "amelia@transtouch.com" - }, - { - "id": 9894, - "guid": "647385f2-ec94-40bd-8df6-98da3904bf42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Wesley", - "company": "Mescatron", - "phone": "877-415-2519", - "email": "grace@mescatron.com" - }, - { - "id": 9895, - "guid": "7c1dd05c-6f6a-463f-b1bf-b70a884d711c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Bush", - "company": "iSkyvaco", - "phone": "804-591-3104", - "email": "kaylee@iskyvaco.com" - }, - { - "id": 9896, - "guid": "ee179327-7465-47e6-88e9-860825514bfb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Hancock", - "company": "Truetomic", - "phone": "894-476-3554", - "email": "amelia@truetomic.com" - }, - { - "id": 9897, - "guid": "a789875a-7256-41ef-90b5-e2efd3966c3d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Sherlock", - "company": "Westgate", - "phone": "890-566-3275", - "email": "caroline@westgate.com" - }, - { - "id": 9898, - "guid": "01cbf650-e04a-48d3-85dd-c87133752e74", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Brown", - "company": "Robotomic", - "phone": "866-597-2897", - "email": "mya@robotomic.com" - }, - { - "id": 9899, - "guid": "2d624312-0a60-4419-98c8-548eb041866c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brianna Thomson", - "company": "Sontopia", - "phone": "861-578-3857", - "email": "brianna@sontopia.com" - }, - { - "id": 9900, - "guid": "ca6e7450-559b-4d06-8b74-9f622e2a561e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Freeman", - "company": "eSteganoergy", - "phone": "807-406-3664", - "email": "anna@esteganoergy.com" - }, - { - "id": 9901, - "guid": "0fe551a0-ad39-435b-8c3e-0f17e1cc0d3b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Goodman", - "company": "Technogra", - "phone": "804-535-2049", - "email": "sarah@technogra.com" - }, - { - "id": 9902, - "guid": "70d95451-7030-4937-af75-68185fe9f74b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Gill", - "company": "Ameritron", - "phone": "882-536-3733", - "email": "katelyn@ameritron.com" - }, - { - "id": 9903, - "guid": "b54a616c-89bb-4be5-b443-296d61f565c1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Gibbs", - "company": "Compuamerica", - "phone": "846-489-3724", - "email": "valeria@compuamerica.com" - }, - { - "id": 9904, - "guid": "d513ca35-6dd4-4d63-aab4-11e7ace7bda9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Audrey Sherlock", - "company": "US Omnigraphik", - "phone": "873-473-3815", - "email": "audrey@us omnigraphik.com" - }, - { - "id": 9905, - "guid": "2c56f2b9-6c09-422f-b346-63f179fabf52", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Nelson", - "company": "Truetomic", - "phone": "809-413-2874", - "email": "samantha@truetomic.com" - }, - { - "id": 9906, - "guid": "485a5f2d-e74e-4bb9-ab6d-c05f2710bea4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Hardman", - "company": "Allnet", - "phone": "826-518-3192", - "email": "molly@allnet.com" - }, - { - "id": 9907, - "guid": "23e51b91-7a83-4c48-8228-eb562e6dc92f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Otis", - "company": "Titanirola", - "phone": "848-494-3269", - "email": "madison@titanirola.com" - }, - { - "id": 9908, - "guid": "c3b2c4c8-da62-4ed3-8e84-32374c7dd265", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Walkman", - "company": "Idmax", - "phone": "859-477-2123", - "email": "ashley@idmax.com" - }, - { - "id": 9909, - "guid": "1cde343e-8354-497b-bf2a-40e68c384897", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Gilson", - "company": "Robocomm", - "phone": "894-527-2193", - "email": "mya@robocomm.com" - }, - { - "id": 9910, - "guid": "72bdfaa1-5981-4d59-9783-74c2613d5f9e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madison Campbell", - "company": "InfoAirway", - "phone": "820-441-3529", - "email": "madison@infoairway.com" - }, - { - "id": 9911, - "guid": "8b8cc378-b05e-4644-875e-2fae9daae70f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Hamphrey", - "company": "SysVenamerica", - "phone": "824-589-3506", - "email": "melanie@sysvenamerica.com" - }, - { - "id": 9912, - "guid": "065ded78-81cc-49a2-b7ae-9bda3ad8091d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maria Molligan", - "company": "Celgra", - "phone": "811-496-2753", - "email": "maria@celgra.com" - }, - { - "id": 9913, - "guid": "76fb32eb-61ef-433b-b3da-5b682ea31b3b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Calhoun", - "company": "Polytheon", - "phone": "881-574-2183", - "email": "serenity@polytheon.com" - }, - { - "id": 9914, - "guid": "5d6ff175-f83d-4546-9eda-eb68d1c93bf3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Croftoon", - "company": "Infraique", - "phone": "891-443-2174", - "email": "katelyn@infraique.com" - }, - { - "id": 9915, - "guid": "80929aee-e336-4b92-befe-cfb6ba422531", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Nevaeh Wayne", - "company": "Infraique", - "phone": "874-505-2004", - "email": "nevaeh@infraique.com" - }, - { - "id": 9916, - "guid": "44c5a0a6-8b79-43a6-9d74-307b3a42555b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Neal", - "company": "Hypervaco", - "phone": "843-543-2258", - "email": "savannah@hypervaco.com" - }, - { - "id": 9917, - "guid": "60109d55-c324-4b64-a399-1290fbc6976f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Oliver", - "company": "Ventanium", - "phone": "837-440-3030", - "email": "sophie@ventanium.com" - }, - { - "id": 9918, - "guid": "fd624950-8b00-4fae-bfbe-8677914becb8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Mercer", - "company": "Gigaura", - "phone": "879-600-2991", - "email": "morgan@gigaura.com" - }, - { - "id": 9919, - "guid": "786d7d70-7f86-4aba-aa40-720ad5d313df", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mya Vaughan", - "company": "Dynarama", - "phone": "857-435-2797", - "email": "mya@dynarama.com" - }, - { - "id": 9920, - "guid": "538aa817-f784-415b-b35f-3fec08639611", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Creighton", - "company": "Vencom", - "phone": "876-412-2140", - "email": "sofia@vencom.com" - }, - { - "id": 9921, - "guid": "42213da9-5bd4-4e42-929a-5e8484eda44f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mia Gustman", - "company": "Titanigraf", - "phone": "852-485-3079", - "email": "mia@titanigraf.com" - }, - { - "id": 9922, - "guid": "1c3fec75-6a0e-418f-942d-efe9e2f72c82", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Vance", - "company": "iEnland", - "phone": "867-547-3959", - "email": "angelina@ienland.com" - }, - { - "id": 9923, - "guid": "3ca16555-239c-42ce-a768-089f04f72d51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Thorndike", - "company": "Truegate", - "phone": "892-527-2627", - "email": "ava@truegate.com" - }, - { - "id": 9924, - "guid": "a028df80-f0ce-45cd-b194-0d546e62bebc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Ward", - "company": "Sontopia", - "phone": "863-419-3401", - "email": "claire@sontopia.com" - }, - { - "id": 9925, - "guid": "44f6905f-3d24-4e68-a6f4-fdbc29db07f9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brianna Conors", - "company": "Teknoplexon", - "phone": "813-528-2212", - "email": "brianna@teknoplexon.com" - }, - { - "id": 9926, - "guid": "c16f48c5-b060-480a-b794-e2507af55819", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Owen", - "company": "Transtouch", - "phone": "882-519-3936", - "email": "aaliyah@transtouch.com" - }, - { - "id": 9927, - "guid": "56a9d19e-a44f-4553-b6f8-ed91fbd2e039", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Oliver", - "company": "Skydata", - "phone": "879-582-2797", - "email": "lily@skydata.com" - }, - { - "id": 9928, - "guid": "51cb648f-0784-4f24-8737-a61646881863", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Chesterton", - "company": "Pacwest", - "phone": "892-582-3498", - "email": "addison@pacwest.com" - }, - { - "id": 9929, - "guid": "f40caea6-9b71-4e6e-8384-f8250f29ba84", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Ward", - "company": "Westtomik", - "phone": "894-504-2539", - "email": "madeline@westtomik.com" - }, - { - "id": 9930, - "guid": "d9f60091-7b87-43b1-878a-ece7d8d5187b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Oswald", - "company": "Orthosoft", - "phone": "893-553-2341", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 9931, - "guid": "27e8ec92-969e-433c-9150-04b2200f73d0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabrielle Murphy", - "company": "Hypervaco", - "phone": "820-455-2560", - "email": "gabrielle@hypervaco.com" - }, - { - "id": 9932, - "guid": "f239e1b4-f495-4cc5-9eaf-b80c32d779a1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Ford", - "company": "Netseco", - "phone": "801-585-2442", - "email": "hailey@netseco.com" - }, - { - "id": 9933, - "guid": "59ad0906-139f-4791-a86d-b6af1b967c92", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Abramson", - "company": "Robocomm", - "phone": "895-472-3237", - "email": "kaitlyn@robocomm.com" - }, - { - "id": 9934, - "guid": "195843be-d25f-46d9-a55a-3e5a731c924e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia WifKinson", - "company": "Entcast", - "phone": "892-431-3870", - "email": "sophia@entcast.com" - }, - { - "id": 9935, - "guid": "9cb59e21-9fd8-4661-a4af-6d401a0358c6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Timmons", - "company": "Airdyne", - "phone": "810-488-2542", - "email": "hannah@airdyne.com" - }, - { - "id": 9936, - "guid": "c3acaf8a-a481-4463-a311-be6f4d5b7c8e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Rachel Carrington", - "company": "Netsystems", - "phone": "853-549-2669", - "email": "rachel@netsystems.com" - }, - { - "id": 9937, - "guid": "fdc1f3c1-8ec0-4767-83dd-ed1d12c1ea36", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Gilmore", - "company": "Conrama", - "phone": "833-526-3384", - "email": "amelia@conrama.com" - }, - { - "id": 9938, - "guid": "152ed4e4-ebcd-4784-9f78-3ec980373b0a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Daniels", - "company": "Anagraph", - "phone": "839-483-2265", - "email": "isabelle@anagraph.com" - }, - { - "id": 9939, - "guid": "e1e0debb-5e01-4ef4-aef4-38de2e2ce45d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Peyton Osborne", - "company": "Indisco", - "phone": "814-556-2656", - "email": "peyton@indisco.com" - }, - { - "id": 9940, - "guid": "f9330485-ceaf-49de-9717-f13f115bc00f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Hamphrey", - "company": "Aluco", - "phone": "898-566-2706", - "email": "olivia@aluco.com" - }, - { - "id": 9941, - "guid": "53408f64-8960-4785-bbfe-f58cc3394fc1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Wayne", - "company": "Truetomic", - "phone": "820-455-2892", - "email": "eva@truetomic.com" - }, - { - "id": 9942, - "guid": "587adc41-47e8-4f48-a381-877ce7295b03", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Milton", - "company": "Allphysiche", - "phone": "818-480-3944", - "email": "maya@allphysiche.com" - }, - { - "id": 9943, - "guid": "095fe5ca-ecd1-4a3f-b8d5-e4bbabac7eba", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Cook", - "company": "Cryptotegrity", - "phone": "889-482-2152", - "email": "victoria@cryptotegrity.com" - }, - { - "id": 9944, - "guid": "f85595ee-2309-4a89-8008-ad88c9ff47a3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Miln", - "company": "OpKeycomm", - "phone": "829-556-3593", - "email": "faith@opkeycomm.com" - }, - { - "id": 9945, - "guid": "5e230c57-fd04-438a-bdb4-33c10de44949", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Brown", - "company": "Netsystems", - "phone": "870-524-2471", - "email": "ashley@netsystems.com" - }, - { - "id": 9946, - "guid": "6d71a154-6499-42f1-a9df-36a5a247f84e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Ogden", - "company": "Dynarama", - "phone": "834-523-3792", - "email": "payton@dynarama.com" - }, - { - "id": 9947, - "guid": "fa11d4db-1b0f-46b6-bbc8-22303efc81b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Michaelson", - "company": "Vencom", - "phone": "803-554-2206", - "email": "lily@vencom.com" - }, - { - "id": 9948, - "guid": "5f2fdc6e-effd-44c4-aa16-c49a134b1aee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Miln", - "company": "iSkyvaco", - "phone": "806-475-2362", - "email": "sarah@iskyvaco.com" - }, - { - "id": 9949, - "guid": "a606dba0-bf87-4c87-9fd7-9c635a4dcb24", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Thomson", - "company": "Titanirola", - "phone": "877-499-3840", - "email": "isabella@titanirola.com" - }, - { - "id": 9950, - "guid": "c1102f1d-34fa-4869-8356-11470626fd46", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Murphy", - "company": "Safetrust", - "phone": "850-434-2539", - "email": "isabella@safetrust.com" - }, - { - "id": 9951, - "guid": "1d5d550e-d3e4-4c9f-993e-7779eafcb52e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Carrington", - "company": "Infraique", - "phone": "822-487-3216", - "email": "avery@infraique.com" - }, - { - "id": 9952, - "guid": "d170dd0e-d1c6-4927-b803-c04f014a157a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Molligan", - "company": "Allphysiche", - "phone": "885-570-2293", - "email": "elizabeth@allphysiche.com" - }, - { - "id": 9953, - "guid": "f3101e83-ce8e-4a1e-8c0c-ae25e68b8be5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Chesterton", - "company": "Celgra", - "phone": "845-449-3971", - "email": "aubrey@celgra.com" - }, - { - "id": 9954, - "guid": "ad8cb734-5599-46be-9d62-93f7c0020a2f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Bush", - "company": "iMedconik", - "phone": "824-413-2933", - "email": "kaitlyn@imedconik.com" - }, - { - "id": 9955, - "guid": "029b9d90-f923-44fa-9fb4-9f0ab7aa200d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Higgins", - "company": "iOptystix", - "phone": "833-450-2557", - "email": "olivia@ioptystix.com" - }, - { - "id": 9956, - "guid": "a02ff2ac-4052-4b72-8077-8dbfffc9b2c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Chapman", - "company": "Tekcar", - "phone": "823-425-2737", - "email": "elizabeth@tekcar.com" - }, - { - "id": 9957, - "guid": "eda6953e-41f9-40a4-bf35-84c9b300fc34", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Cook", - "company": "US Omnigraphik", - "phone": "878-533-2526", - "email": "aubrey@us omnigraphik.com" - }, - { - "id": 9958, - "guid": "22f3b266-8b91-420c-a865-468012c8e557", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Gill", - "company": "Unconix", - "phone": "845-493-2043", - "email": "valeria@unconix.com" - }, - { - "id": 9959, - "guid": "0718745e-dc1c-4a00-bb12-7b94e2864bd3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Gilson", - "company": "Cryptotemplate", - "phone": "832-411-2078", - "email": "lily@cryptotemplate.com" - }, - { - "id": 9960, - "guid": "0c2a3ab8-92e7-493f-9f2d-fba1a5044a66", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Ward", - "company": "Fibrotopia", - "phone": "879-528-2335", - "email": "rachel@fibrotopia.com" - }, - { - "id": 9961, - "guid": "c3a8d485-a2ae-4533-b981-08b64dd78a67", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra WifKinson", - "company": "Polytheon", - "phone": "821-511-2720", - "email": "alexandra@polytheon.com" - }, - { - "id": 9962, - "guid": "b274e275-8798-4ec5-ba04-7df87d9fe0db", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Winter", - "company": "RoboAerlogix", - "phone": "813-534-3390", - "email": "abigail@roboaerlogix.com" - }, - { - "id": 9963, - "guid": "eed8ca6e-736e-4d87-afeb-9c0afd373d24", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ariana Oldridge", - "company": "Keytheon", - "phone": "862-453-3635", - "email": "ariana@keytheon.com" - }, - { - "id": 9964, - "guid": "c0c3c4b2-baf8-434a-b409-62cf2b22301d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Turner", - "company": "Ventanium", - "phone": "812-526-3323", - "email": "autumn@ventanium.com" - }, - { - "id": 9965, - "guid": "228a4600-89fe-49da-96c9-344e2e0f1902", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Stanley", - "company": "Truetomic", - "phone": "892-541-2799", - "email": "emma@truetomic.com" - }, - { - "id": 9966, - "guid": "c7540a3c-bdf5-4864-9817-39a941a9253c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Natalie Young", - "company": "Multitiqua", - "phone": "865-484-2664", - "email": "natalie@multitiqua.com" - }, - { - "id": 9967, - "guid": "9164a583-2618-4f5a-ba4b-fc05328343c0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Higgins", - "company": "Cryptotemplate", - "phone": "839-508-3713", - "email": "layla@cryptotemplate.com" - }, - { - "id": 9968, - "guid": "cf0c9a82-b137-4d4c-a7fd-aaea210a5562", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Young", - "company": "Aprama", - "phone": "815-459-3900", - "email": "alyssa@aprama.com" - }, - { - "id": 9969, - "guid": "b942dff8-2e30-4a2b-a1b3-a354770d63de", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Mercer", - "company": "Robocomm", - "phone": "843-424-3111", - "email": "zoe@robocomm.com" - }, - { - "id": 9970, - "guid": "f27693d8-300d-4992-89c1-7ff6ca7d35b3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Brooks", - "company": "Skydata", - "phone": "814-541-2140", - "email": "khloe@skydata.com" - }, - { - "id": 9971, - "guid": "00b3b3ce-ecb2-46d4-85c1-52428833827a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Payton Youmans", - "company": "Hypervaco", - "phone": "809-542-2060", - "email": "payton@hypervaco.com" - }, - { - "id": 9972, - "guid": "4e0559c2-b5ed-479c-a520-4d1639588c22", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Gustman", - "company": "Titanirola", - "phone": "817-572-2590", - "email": "alexis@titanirola.com" - }, - { - "id": 9973, - "guid": "ae14bb75-4d57-4041-9391-019837d235aa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Youmans", - "company": "Fibrotopia", - "phone": "843-580-2593", - "email": "sarah@fibrotopia.com" - }, - { - "id": 9974, - "guid": "ef34213d-66a5-4851-ad36-2cae7de0a037", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Calhoun", - "company": "Genland", - "phone": "821-558-2103", - "email": "lily@genland.com" - }, - { - "id": 9975, - "guid": "989955d0-c142-4f56-8c38-f8b7378ce53a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Gilson", - "company": "Titanirola", - "phone": "864-579-2174", - "email": "khloe@titanirola.com" - }, - { - "id": 9976, - "guid": "b6de3e1f-b8a4-40c5-801f-d5b2d5c629b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Nash", - "company": "iEnland", - "phone": "802-598-3359", - "email": "sofia@ienland.com" - }, - { - "id": 9977, - "guid": "8175374f-ab14-4117-a53a-31374b438c96", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Conors", - "company": "Teraserv", - "phone": "878-402-3468", - "email": "leah@teraserv.com" - }, - { - "id": 9978, - "guid": "9776ac92-a7b8-46de-b27b-13ade119a2ff", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Miln", - "company": "Generola", - "phone": "857-456-2643", - "email": "samantha@generola.com" - }, - { - "id": 9979, - "guid": "2ddfa94d-97b6-48c5-ba5d-e9609350652f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Savannah Cramer", - "company": "Westtomik", - "phone": "884-462-3504", - "email": "savannah@westtomik.com" - }, - { - "id": 9980, - "guid": "dd6b38f3-de17-4527-b945-73233322a567", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Miln", - "company": "Superscope", - "phone": "811-464-3207", - "email": "serenity@superscope.com" - }, - { - "id": 9981, - "guid": "d72c0940-5c11-40db-9e90-045a62aafbdb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madelyn Turner", - "company": "US Omnigraphik", - "phone": "849-553-2409", - "email": "madelyn@us omnigraphik.com" - }, - { - "id": 9982, - "guid": "69969bc7-8e47-46e5-a92c-4dd3a7fa2849", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Oldman", - "company": "Infraique", - "phone": "871-413-2220", - "email": "lauren@infraique.com" - }, - { - "id": 9983, - "guid": "aadfe8a1-7c52-47cc-9f92-48508f1ad2e4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Sheldon", - "company": "iOptystix", - "phone": "833-478-3454", - "email": "natalie@ioptystix.com" - }, - { - "id": 9984, - "guid": "b3c608d0-eef8-423b-89e8-fafcbff60133", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Molly Ford", - "company": "Hypervaco", - "phone": "803-549-2265", - "email": "molly@hypervaco.com" - }, - { - "id": 9985, - "guid": "8ba071e2-4b7f-4a9e-937c-a81436d612a5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Calhoun", - "company": "Inridium", - "phone": "847-575-3770", - "email": "faith@inridium.com" - }, - { - "id": 9986, - "guid": "8b83d9a6-6fa1-4d13-8387-dad421dd3049", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emily Sherlock", - "company": "Westmedia", - "phone": "818-558-2415", - "email": "emily@westmedia.com" - }, - { - "id": 9987, - "guid": "a2465842-db94-4d2a-bd34-1911f4de4af5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Hancock", - "company": "RoboAerlogix", - "phone": "881-549-2181", - "email": "elizabeth@roboaerlogix.com" - }, - { - "id": 9988, - "guid": "211ffa5d-9610-4e1c-9049-6e0d39cf6525", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Conors", - "company": "Technogra", - "phone": "824-599-2100", - "email": "anna@technogra.com" - }, - { - "id": 9989, - "guid": "9f38e5c5-86ab-44be-ae02-aca51b27974a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria White", - "company": "eSteganoergy", - "phone": "855-461-2011", - "email": "maria@esteganoergy.com" - }, - { - "id": 9990, - "guid": "2c6e6847-38bf-4646-9dec-d5d7e474eb98", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Mercer", - "company": "Mescatron", - "phone": "839-486-3459", - "email": "mackenzie@mescatron.com" - }, - { - "id": 9991, - "guid": "81d77f63-f908-4f4c-a69d-a0d670c4ea79", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Gilbert", - "company": "OpKeycomm", - "phone": "807-422-2141", - "email": "layla@opkeycomm.com" - }, - { - "id": 9992, - "guid": "df2cda1d-4ca9-4035-9961-9a6962465b70", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sofia Sherlock", - "company": "Ventanium", - "phone": "874-424-3867", - "email": "sofia@ventanium.com" - }, - { - "id": 9993, - "guid": "95609191-2c52-4e06-b5b1-fb80cc3a7cfe", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Crossman", - "company": "Airdyne", - "phone": "806-405-3107", - "email": "aubrey@airdyne.com" - }, - { - "id": 9994, - "guid": "c0b75fa4-f19e-493a-8b13-93256fe3da20", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Molligan", - "company": "Indisco", - "phone": "861-531-2351", - "email": "maria@indisco.com" - }, - { - "id": 9995, - "guid": "65fcae57-6040-4e73-985f-104a5d5f4cc6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Faith Gate", - "company": "Titanigraf", - "phone": "801-539-2772", - "email": "faith@titanigraf.com" - }, - { - "id": 9996, - "guid": "84517666-06af-4f43-96e1-ab9c249f69f1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Gardner", - "company": "Truetomic", - "phone": "834-429-3698", - "email": "alexa@truetomic.com" - }, - { - "id": 9997, - "guid": "c2dbfbcb-c6a0-40a4-bc8e-59f5b9c3f2ee", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Goodman", - "company": "Orthomedia", - "phone": "853-469-2640", - "email": "kimberly@orthomedia.com" - }, - { - "id": 9998, - "guid": "64e7a5c7-f9a9-497e-af8d-18efa50ac6e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Walkman", - "company": "Robotemplate", - "phone": "813-467-3895", - "email": "sarah@robotemplate.com" - }, - { - "id": 9999, - "guid": "25a658ae-86d1-4de7-af75-8b560d564774", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Osborne", - "company": "Teraserv", - "phone": "853-568-2057", - "email": "brianna@teraserv.com" - }, - { - "id": 10000, - "guid": "71284fec-690c-48a2-903b-5a4b44ed1349", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Gustman", - "company": "Venconix", - "phone": "875-470-2265", - "email": "faith@venconix.com" - }, -{ - "id": 1, - "guid": "046447ee-da78-478c-b518-b612111942a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Murphy", - "company": "Robotomic", - "phone": "806-587-2379", - "email": "payton@robotomic.com" - }, - { - "id": 2, - "guid": "3d06a20a-c8b8-4a17-add5-e9a27b66d202", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Calhoun", - "company": "Conotomics", - "phone": "873-453-3007", - "email": "savannah@conotomics.com" - }, - { - "id": 3, - "guid": "18885904-5685-4cec-9182-a1f6509c5ce4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Carrington", - "company": "Genland", - "phone": "889-443-2207", - "email": "kaitlyn@genland.com" - }, - { - "id": 4, - "guid": "8378a1ff-d289-471d-b1aa-fe0809d8b2db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Goldman", - "company": "iQualcar", - "phone": "805-439-3302", - "email": "genesis@iqualcar.com" - }, - { - "id": 5, - "guid": "93e92a87-8512-4db8-940e-fedb7d64973f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Brooks", - "company": "Westgate", - "phone": "882-499-2432", - "email": "leah@westgate.com" - }, - { - "id": 6, - "guid": "31456de2-2fd4-4075-9f3b-9afef6a6747d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Carey", - "company": "Titanirola", - "phone": "823-450-3828", - "email": "madelyn@titanirola.com" - }, - { - "id": 7, - "guid": "416f7fec-a695-4652-b6a4-c663344941fd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Trinity Campbell", - "company": "eSteganoergy", - "phone": "824-540-3213", - "email": "trinity@esteganoergy.com" - }, - { - "id": 8, - "guid": "ce62e5ff-12ec-4097-82aa-2d5570653af7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Oldman", - "company": "Proline", - "phone": "820-584-2077", - "email": "savannah@proline.com" - }, - { - "id": 9, - "guid": "454cf0c8-0466-4703-8579-a6a97e6914b9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Samantha Chandter", - "company": "iOptystix", - "phone": "884-598-3615", - "email": "samantha@ioptystix.com" - }, - { - "id": 10, - "guid": "5ea1251f-ca94-4385-9ff7-99bf8c4b3707", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Thorndike", - "company": "Titanirola", - "phone": "807-439-3000", - "email": "layla@titanirola.com" - }, - { - "id": 11, - "guid": "79567436-45ec-4331-a707-4cb9272272ef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Fulton", - "company": "Titanirola", - "phone": "893-535-3674", - "email": "victoria@titanirola.com" - }, - { - "id": 12, - "guid": "1e3be706-e1f2-443b-8757-bf602ae7e89d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Thorndike", - "company": "Conrama", - "phone": "893-410-3150", - "email": "angelina@conrama.com" - }, - { - "id": 13, - "guid": "d31d10cc-089c-4432-969c-51ebf3570bd1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Fisher", - "company": "Inridium", - "phone": "852-514-2754", - "email": "makayla@inridium.com" - }, - { - "id": 14, - "guid": "23236036-1fb8-4691-a394-1f04c694e757", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Chapman", - "company": "Vencom", - "phone": "857-554-3909", - "email": "valeria@vencom.com" - }, - { - "id": 15, - "guid": "db1679a3-688d-4961-8d1b-711fdd98e4e3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Wallace", - "company": "Xeicon", - "phone": "800-445-3677", - "email": "alexandra@xeicon.com" - }, - { - "id": 16, - "guid": "82dabc5a-4cf1-4b41-9c45-500128c8b3df", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Vance", - "company": "Teraserv", - "phone": "836-513-3038", - "email": "kaitlyn@teraserv.com" - }, - { - "id": 17, - "guid": "049d3676-7708-4a5c-af8d-0738db178817", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Ogden", - "company": "Qualserve", - "phone": "808-571-2740", - "email": "avery@qualserve.com" - }, - { - "id": 18, - "guid": "a7eccc57-1a1c-4114-ae38-9ffba11c9246", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Gerald", - "company": "Cryptotegrity", - "phone": "876-411-2611", - "email": "savannah@cryptotegrity.com" - }, - { - "id": 19, - "guid": "f9bd1424-fe55-4c65-a1d6-f4943da1ba34", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Neal", - "company": "Tekcar", - "phone": "800-587-2691", - "email": "serenity@tekcar.com" - }, - { - "id": 20, - "guid": "c8286c32-95ba-4cc5-9186-5d3d61e1f62c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Carey", - "company": "Infragraph", - "phone": "875-545-2084", - "email": "jasmine@infragraph.com" - }, - { - "id": 21, - "guid": "bd380c03-8558-425b-84b1-ecd8142af14f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia WifKinson", - "company": "OpKeycomm", - "phone": "811-479-3113", - "email": "amelia@opkeycomm.com" - }, - { - "id": 22, - "guid": "30d856da-1843-4781-bf90-91360bf55dae", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Ogden", - "company": "Textiqua", - "phone": "835-422-2698", - "email": "emma@textiqua.com" - }, - { - "id": 23, - "guid": "3b0e71e6-dde1-4f9c-8563-53bc0fdf601e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Ford", - "company": "Fibroserve", - "phone": "810-471-3020", - "email": "evelyn@fibroserve.com" - }, - { - "id": 24, - "guid": "209bbb71-d5a3-458d-bf98-7a50a2f42bbd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Oliver", - "company": "Conrama", - "phone": "883-518-2720", - "email": "molly@conrama.com" - }, - { - "id": 25, - "guid": "1137ef18-6b98-41e6-bb94-5334f03526b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Carrington", - "company": "Mescaridic", - "phone": "806-592-2714", - "email": "melanie@mescaridic.com" - }, - { - "id": 26, - "guid": "1406fa4c-a0b7-403f-b1e2-af85b78cf2c1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Carroll", - "company": "Systheon", - "phone": "872-480-3718", - "email": "ashley@systheon.com" - }, - { - "id": 27, - "guid": "48532bf7-a9d5-4559-b7b4-6c857b807dcd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Higgins", - "company": "Allnet", - "phone": "809-409-2096", - "email": "katelyn@allnet.com" - }, - { - "id": 28, - "guid": "bf2256d9-e1c3-44f0-8458-f7759aafc571", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Mercer", - "company": "Xeicon", - "phone": "841-421-3710", - "email": "mya@xeicon.com" - }, - { - "id": 29, - "guid": "b755923a-f7d8-4cbf-82d4-eef76de5e674", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Galbraith", - "company": "Anaframe", - "phone": "813-420-2072", - "email": "gianna@anaframe.com" - }, - { - "id": 30, - "guid": "5a96819e-ce98-45b7-8d54-28c7dd90117c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Molligan", - "company": "US Omnigraphik", - "phone": "894-554-2996", - "email": "gabrielle@us omnigraphik.com" - }, - { - "id": 31, - "guid": "b55a1280-f555-44b6-8f1c-b2c00e1f60f2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Wainwright", - "company": "Navivacs", - "phone": "814-566-2925", - "email": "natalie@navivacs.com" - }, - { - "id": 32, - "guid": "e935551e-b106-4960-b69a-0422890e6880", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Molligan", - "company": "Proline", - "phone": "833-411-2666", - "email": "autumn@proline.com" - }, - { - "id": 33, - "guid": "063e653b-2335-4d07-bda4-75173eaa08da", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Miller", - "company": "Pericenta", - "phone": "851-547-3159", - "email": "ashley@pericenta.com" - }, - { - "id": 34, - "guid": "cf3dfe24-320b-4682-977d-5fd867bd5cb1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Webster", - "company": "Compuamerica", - "phone": "827-486-2808", - "email": "brooklyn@compuamerica.com" - }, - { - "id": 35, - "guid": "84f17bd0-b971-4be0-8f3f-28b73e53d4a5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Gibbs", - "company": "Videobanc", - "phone": "811-504-3512", - "email": "hailey@videobanc.com" - }, - { - "id": 36, - "guid": "0b2ce302-5cb1-479a-b1a3-8f492cb65283", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Morrison", - "company": "Teknoplexon", - "phone": "887-463-2120", - "email": "samantha@teknoplexon.com" - }, - { - "id": 37, - "guid": "f4f15e54-c16a-4e2f-b1cb-6505ae98ee37", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Oswald", - "company": "Xeicon", - "phone": "819-459-3112", - "email": "taylor@xeicon.com" - }, - { - "id": 38, - "guid": "fa104e34-97f7-4c34-8627-df4e07253302", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Waller", - "company": "Teratopia", - "phone": "837-594-2012", - "email": "camila@teratopia.com" - }, - { - "id": 39, - "guid": "6d478567-68ca-4c47-97dc-954bc8319b2d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Ford", - "company": "Unologic", - "phone": "874-440-2700", - "email": "zoey@unologic.com" - }, - { - "id": 40, - "guid": "f6ac734b-e475-487d-b3b5-37b6639c376b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Freeman", - "company": "Syssoft", - "phone": "898-459-3002", - "email": "abigail@syssoft.com" - }, - { - "id": 41, - "guid": "0203f330-8f2c-41a0-a99b-229bbc9b55dc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Milton", - "company": "Generola", - "phone": "816-447-3124", - "email": "zoey@generola.com" - }, - { - "id": 42, - "guid": "e88d7ffd-4625-4b3e-b829-e2f0a7d58680", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Thornton", - "company": "Fibroserve", - "phone": "866-513-2976", - "email": "payton@fibroserve.com" - }, - { - "id": 43, - "guid": "03fa6c0e-9a18-46ed-8313-8ce1de3d4a9a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Ogden", - "company": "Skydata", - "phone": "844-408-3290", - "email": "alyssa@skydata.com" - }, - { - "id": 44, - "guid": "0e7cfd86-184f-44ef-8c2c-808bb44a7c4d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Oldman", - "company": "Conrama", - "phone": "859-507-3860", - "email": "alexis@conrama.com" - }, - { - "id": 45, - "guid": "d8e7b890-a35f-4fc4-ad77-8b56e5c10de8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Turner", - "company": "Openserve", - "phone": "880-581-2353", - "email": "audrey@openserve.com" - }, - { - "id": 46, - "guid": "a6e83742-0a04-4993-8030-230514837caa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Miers", - "company": "OpKeycomm", - "phone": "803-460-3501", - "email": "maya@opkeycomm.com" - }, - { - "id": 47, - "guid": "332aa9d3-eb42-4343-b079-46628cb81696", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Wayne", - "company": "Proline", - "phone": "890-573-2886", - "email": "chloe@proline.com" - }, - { - "id": 48, - "guid": "67385697-bcb3-40f0-821a-f1d75dd62503", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison Brooks", - "company": "eSteganoergy", - "phone": "880-451-2793", - "email": "madison@esteganoergy.com" - }, - { - "id": 49, - "guid": "8af583f6-7929-40eb-a52c-010f14e25d0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Galbraith", - "company": "Netsystems", - "phone": "875-528-3158", - "email": "lillian@netsystems.com" - }, - { - "id": 50, - "guid": "c7fc495c-dedd-4c0a-9570-f14193a53886", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Daniels", - "company": "Compuamerica", - "phone": "826-585-2965", - "email": "addison@compuamerica.com" - }, - { - "id": 51, - "guid": "03781014-082e-42a3-8a1d-af957050536c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Sheldon", - "company": "US Infratouch", - "phone": "812-588-2969", - "email": "audrey@us infratouch.com" - }, - { - "id": 52, - "guid": "ff438497-453c-412a-980f-04836628915a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Hardman", - "company": "OpKeycomm", - "phone": "824-452-3622", - "email": "valeria@opkeycomm.com" - }, - { - "id": 53, - "guid": "b9922441-470f-4e7c-817e-d3827b7794bb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Michaelson", - "company": "Rapigrafix", - "phone": "808-596-2516", - "email": "kaylee@rapigrafix.com" - }, - { - "id": 54, - "guid": "955e4fe2-e595-459a-acdc-3ed19f5c69b2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Bailey Carrington", - "company": "Fibrotopia", - "phone": "870-472-2979", - "email": "bailey@fibrotopia.com" - }, - { - "id": 55, - "guid": "fa1a2554-409e-4ea3-a661-9629faa895db", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bella Hawkins", - "company": "Netsystems", - "phone": "822-481-3541", - "email": "bella@netsystems.com" - }, - { - "id": 56, - "guid": "54d8f80f-ce10-423f-b941-e6587bbc7e4f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Sheldon", - "company": "Quintegrity", - "phone": "891-555-2893", - "email": "kylie@quintegrity.com" - }, - { - "id": 57, - "guid": "a4d7811e-7030-4baa-bfa2-d6c420c25116", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Croftoon", - "company": "eEyetanic", - "phone": "862-484-3428", - "email": "gabriella@eeyetanic.com" - }, - { - "id": 58, - "guid": "f33d03ff-0737-4e24-a4ed-a1b6a073abe1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Ward", - "company": "Jamrola", - "phone": "800-450-2433", - "email": "chloe@jamrola.com" - }, - { - "id": 59, - "guid": "9861e563-1613-4fef-b117-36fe0afd4c37", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Hancock", - "company": "Openserve", - "phone": "893-592-3698", - "email": "khloe@openserve.com" - }, - { - "id": 60, - "guid": "c6332bab-7d46-4dfd-9850-5824d8d7640b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Milton", - "company": "Proline", - "phone": "836-414-2328", - "email": "andrea@proline.com" - }, - { - "id": 61, - "guid": "22bd60a1-0f48-4909-8c83-f55f291607db", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Miln", - "company": "Infraique", - "phone": "845-440-2597", - "email": "zoey@infraique.com" - }, - { - "id": 62, - "guid": "b6d62cfd-df30-4530-9f4c-870694700e4e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Day", - "company": "Videobanc", - "phone": "843-527-2382", - "email": "jocelyn@videobanc.com" - }, - { - "id": 63, - "guid": "14beb613-b8ec-4953-a46b-b373234149c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Gustman", - "company": "Pacwest", - "phone": "895-484-2126", - "email": "nevaeh@pacwest.com" - }, - { - "id": 64, - "guid": "bc1cd9cc-ae58-4b48-9a6c-3f441a254a27", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Hailey", - "company": "Truegate", - "phone": "840-560-2201", - "email": "avery@truegate.com" - }, - { - "id": 65, - "guid": "60905bde-f447-4eb7-a1d9-56027ea6b01c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Gardner", - "company": "Venconix", - "phone": "866-566-2532", - "email": "kaylee@venconix.com" - }, - { - "id": 66, - "guid": "8229f71a-3d4b-477e-b69b-c3d2cc994dcb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Chapman", - "company": "RoboAerlogix", - "phone": "829-483-2385", - "email": "melanie@roboaerlogix.com" - }, - { - "id": 67, - "guid": "f340a27c-a6bc-4419-887e-eb4974122b01", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Mercer", - "company": "Anagraph", - "phone": "879-549-2467", - "email": "sydney@anagraph.com" - }, - { - "id": 68, - "guid": "e9a4d060-8af8-40ec-92a0-3b7ba53d4fc0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Hailey", - "company": "eSteganoergy", - "phone": "818-409-2159", - "email": "gabriella@esteganoergy.com" - }, - { - "id": 69, - "guid": "2f553263-5440-4d0f-a27d-c0ab4cccb6da", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Winter", - "company": "OpKeycomm", - "phone": "888-560-2724", - "email": "ariana@opkeycomm.com" - }, - { - "id": 70, - "guid": "28a2bc9c-d7e3-4935-a942-25d8c73ce2da", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Valeria White", - "company": "SysUSA", - "phone": "866-461-2778", - "email": "valeria@sysusa.com" - }, - { - "id": 71, - "guid": "edf2bd2a-a1dd-4110-bced-ca898aabf8f1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Gustman", - "company": "Unologic", - "phone": "875-541-3769", - "email": "lily@unologic.com" - }, - { - "id": 72, - "guid": "b468f12e-4b4f-410c-98ee-e08bbc45993a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Daniels", - "company": "Anagraph", - "phone": "828-536-3011", - "email": "jasmine@anagraph.com" - }, - { - "id": 73, - "guid": "bcc8ecb6-3b57-4abb-8193-d6de5f9b6c84", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Carey", - "company": "Sontopia", - "phone": "898-514-2249", - "email": "autumn@sontopia.com" - }, - { - "id": 74, - "guid": "d115e8b7-7082-481a-981d-3d5c8b2cb638", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Chesterton", - "company": "Polytheon", - "phone": "831-552-2814", - "email": "genesis@polytheon.com" - }, - { - "id": 75, - "guid": "8dbcea88-84bf-4154-b95d-0bf5181210ca", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Brooks", - "company": "Sontopia", - "phone": "892-446-2969", - "email": "maya@sontopia.com" - }, - { - "id": 76, - "guid": "322e3297-e665-4c10-b0a2-2d5f256d1b48", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Cook", - "company": "Unconix", - "phone": "842-600-2909", - "email": "madelyn@unconix.com" - }, - { - "id": 77, - "guid": "8a2cc0a6-a316-4600-b673-1f9275e21432", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brianna Campbell", - "company": "Enlogia", - "phone": "877-405-2653", - "email": "brianna@enlogia.com" - }, - { - "id": 78, - "guid": "259ec896-0ae6-4707-991c-b9ee0c2ac42a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Eva Hailey", - "company": "Cryptotegrity", - "phone": "862-492-3121", - "email": "eva@cryptotegrity.com" - }, - { - "id": 79, - "guid": "80948ec6-f7b2-4436-9af5-6ea04fbb5716", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Wayne", - "company": "Skydata", - "phone": "843-466-2319", - "email": "angelina@skydata.com" - }, - { - "id": 80, - "guid": "df82f61e-ec34-4527-89d4-2666b6cf40d1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Adamson", - "company": "Fibroserve", - "phone": "874-566-2516", - "email": "molly@fibroserve.com" - }, - { - "id": 81, - "guid": "75351ef9-3ba6-4779-bde3-8927a566b7b8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Gustman", - "company": "Enlogia", - "phone": "823-579-3886", - "email": "eva@enlogia.com" - }, - { - "id": 82, - "guid": "a23bf0bd-7353-4f88-b041-a6a71c2ea20c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Morrison", - "company": "Anaframe", - "phone": "897-497-2540", - "email": "madelyn@anaframe.com" - }, - { - "id": 83, - "guid": "4652d92d-67b6-4e7f-aed4-a210d40238ac", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Smith", - "company": "Allnet", - "phone": "882-554-2473", - "email": "ava@allnet.com" - }, - { - "id": 84, - "guid": "76f782a8-9d92-4cc4-9e9c-c67281516a5e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Carey", - "company": "Jamrola", - "phone": "886-577-3461", - "email": "jessica@jamrola.com" - }, - { - "id": 85, - "guid": "cdbbf9fe-0c97-4944-a9d4-c47df2528f0a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alyssa Oliver", - "company": "Westgate", - "phone": "806-458-2960", - "email": "alyssa@westgate.com" - }, - { - "id": 86, - "guid": "2e8b9cb6-b741-4416-9023-9521d98ede2e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Winter", - "company": "Conotomics", - "phone": "813-514-3987", - "email": "jessica@conotomics.com" - }, - { - "id": 87, - "guid": "9078f6f7-7662-4e20-9044-682ac87496c8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Fisher", - "company": "Conotomics", - "phone": "845-523-2623", - "email": "molly@conotomics.com" - }, - { - "id": 88, - "guid": "5e5bf44a-f376-4374-831e-e3d7bd431d0e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Hancock", - "company": "Robotemplate", - "phone": "829-459-2458", - "email": "payton@robotemplate.com" - }, - { - "id": 89, - "guid": "34292e46-7da6-45c4-ae35-02584a76e38e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Day", - "company": "Steganoconiche", - "phone": "802-473-3320", - "email": "jasmine@steganoconiche.com" - }, - { - "id": 90, - "guid": "2cd013c4-cc30-4a29-99fd-4ca87cae443a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Miers", - "company": "Keytheon", - "phone": "833-468-3209", - "email": "avery@keytheon.com" - }, - { - "id": 91, - "guid": "e4cdeaa3-0a84-4df3-b414-ef274298b069", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ella Brown", - "company": "Jamconik", - "phone": "898-520-3724", - "email": "ella@jamconik.com" - }, - { - "id": 92, - "guid": "a4d3e9e2-8a49-43f3-9f41-2c212110111f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Nathan", - "company": "iEnland", - "phone": "881-405-2960", - "email": "evelyn@ienland.com" - }, - { - "id": 93, - "guid": "1e4e9d0f-f57d-454a-b4f7-d23ba8722288", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Milton", - "company": "iSkyvaco", - "phone": "881-436-3566", - "email": "leah@iskyvaco.com" - }, - { - "id": 94, - "guid": "9eff5d1a-1413-4a78-98ed-985dbf6f4516", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Waller", - "company": "Enlogia", - "phone": "825-560-3105", - "email": "riley@enlogia.com" - }, - { - "id": 95, - "guid": "03c259af-fae6-403d-8c8c-6564cd434990", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Nash", - "company": "Aprama", - "phone": "893-405-3053", - "email": "madeline@aprama.com" - }, - { - "id": 96, - "guid": "bcb29d86-e92a-4a41-8cb9-c9286a4a8f52", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Hodges", - "company": "Genland", - "phone": "837-445-3835", - "email": "mya@genland.com" - }, - { - "id": 97, - "guid": "7b9b60b7-cab5-4cfc-9b89-5f6979c2beaa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Owen", - "company": "Qualserve", - "phone": "851-548-3270", - "email": "zoe@qualserve.com" - }, - { - "id": 98, - "guid": "581c6600-ff61-4d37-9151-9fce171af488", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Chapman", - "company": "Transtouch", - "phone": "823-557-3299", - "email": "serenity@transtouch.com" - }, - { - "id": 99, - "guid": "008e837a-503f-43a0-8b10-c3f87a65d21a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Fisher", - "company": "Openserve", - "phone": "831-588-3294", - "email": "mackenzie@openserve.com" - }, - { - "id": 100, - "guid": "55f9d460-428f-422b-baa5-a78340b087e0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Fisher", - "company": "Gigaura", - "phone": "805-509-3468", - "email": "lillian@gigaura.com" - }, - { - "id": 101, - "guid": "48ab6663-51ba-4e64-b094-c4cfb4396e1d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaitlyn Turner", - "company": "Syssoft", - "phone": "809-434-2428", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 102, - "guid": "22a0101a-bd27-4ae5-92a0-7b080a580d03", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Ward", - "company": "Fibroserve", - "phone": "816-520-2796", - "email": "claire@fibroserve.com" - }, - { - "id": 103, - "guid": "5a15748a-5f3c-4890-a1db-4de756a66081", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Nelson", - "company": "Sontopia", - "phone": "809-578-2942", - "email": "hannah@sontopia.com" - }, - { - "id": 104, - "guid": "fc3d3c78-1edc-4e5d-a0ca-a8805d390c53", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Paige Day", - "company": "Ventanium", - "phone": "842-524-3998", - "email": "paige@ventanium.com" - }, - { - "id": 105, - "guid": "6c210e48-4e54-4a3c-b353-843ba6acd52a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Mercer", - "company": "Ventanium", - "phone": "858-459-2593", - "email": "mya@ventanium.com" - }, - { - "id": 106, - "guid": "039ff1aa-798e-4b23-a71b-60ca6737e3cd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Miller", - "company": "Mescatron", - "phone": "880-435-2217", - "email": "eva@mescatron.com" - }, - { - "id": 107, - "guid": "e39d68bd-4eee-4fdd-8f7a-40b7081d0007", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Miln", - "company": "Gigaura", - "phone": "832-522-2972", - "email": "sophia@gigaura.com" - }, - { - "id": 108, - "guid": "c2d28f87-51ce-49ee-8755-4c25375ea1fe", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Clapton", - "company": "Vencom", - "phone": "898-452-3452", - "email": "lily@vencom.com" - }, - { - "id": 109, - "guid": "1471696d-75e0-4943-b3b3-4762bbc2a77e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Morgan Vance", - "company": "Vencom", - "phone": "823-597-3042", - "email": "morgan@vencom.com" - }, - { - "id": 110, - "guid": "a83ece61-0480-45df-a7fa-cdbcb2ee840f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Chandter", - "company": "Conotomics", - "phone": "841-516-3308", - "email": "mia@conotomics.com" - }, - { - "id": 111, - "guid": "5004d484-8f32-4fd6-bb4b-069fc955402f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emily Crossman", - "company": "Venconix", - "phone": "895-545-3108", - "email": "emily@venconix.com" - }, - { - "id": 112, - "guid": "4816f3d0-35c7-48f6-9d12-43bc98f7f432", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Cramer", - "company": "Venconix", - "phone": "840-557-2913", - "email": "kimberly@venconix.com" - }, - { - "id": 113, - "guid": "562f288a-e95f-4023-a38e-4d1b3ec6afb9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Gilmore", - "company": "Westtomik", - "phone": "846-478-3796", - "email": "samantha@westtomik.com" - }, - { - "id": 114, - "guid": "0785e96c-ffdc-4ec1-9fcc-1d319821f998", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton White", - "company": "Hypervaco", - "phone": "819-407-3212", - "email": "peyton@hypervaco.com" - }, - { - "id": 115, - "guid": "a14ba82a-067e-40bc-92db-41934c9142d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Murphy", - "company": "Pericenta", - "phone": "860-558-2799", - "email": "kaylee@pericenta.com" - }, - { - "id": 116, - "guid": "ae5fa029-5595-47dc-8413-dc8d56974db2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Adamson", - "company": "Teratopia", - "phone": "893-442-3595", - "email": "addison@teratopia.com" - }, - { - "id": 117, - "guid": "5183aa64-04fe-4d79-94ee-8ff79de69fd0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Owen", - "company": "Systheon", - "phone": "846-404-3006", - "email": "leah@systheon.com" - }, - { - "id": 118, - "guid": "bf7df6ca-d919-4426-9c8c-40950e7bd06e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Fulton", - "company": "Nanobanc", - "phone": "886-534-3296", - "email": "sophia@nanobanc.com" - }, - { - "id": 119, - "guid": "213cc0c5-e44f-44b3-bffa-1baa4b0c9212", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Hailey", - "company": "Inridium", - "phone": "811-422-2439", - "email": "sophia@inridium.com" - }, - { - "id": 120, - "guid": "1f7d0d65-fa71-42cb-b348-daa2ee4021e7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Gilson", - "company": "Westmedia", - "phone": "864-506-2343", - "email": "olivia@westmedia.com" - }, - { - "id": 121, - "guid": "a94c0cb4-06c7-41e3-b116-8ce9c9f96e6a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Brickman", - "company": "Titanigraf", - "phone": "863-545-2128", - "email": "paige@titanigraf.com" - }, - { - "id": 122, - "guid": "15b930ec-c311-461a-8114-ed3a2525a445", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoey Carey", - "company": "iQualcar", - "phone": "892-530-2998", - "email": "zoey@iqualcar.com" - }, - { - "id": 123, - "guid": "f532ebd9-7c57-49bf-9a47-4cfaddafdf17", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Ford", - "company": "Netseco", - "phone": "891-479-3436", - "email": "ashley@netseco.com" - }, - { - "id": 124, - "guid": "0bac443e-8207-4115-8696-0799e61c9485", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Wainwright", - "company": "Truegate", - "phone": "811-433-2302", - "email": "addison@truegate.com" - }, - { - "id": 125, - "guid": "36838fcd-65c8-4a45-93bf-97d024402372", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Cramer", - "company": "Cryptotegrity", - "phone": "838-564-2523", - "email": "kaylee@cryptotegrity.com" - }, - { - "id": 126, - "guid": "e0ee0952-0317-4022-b552-f0a1bed4eace", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Wesley", - "company": "Systheon", - "phone": "842-564-2011", - "email": "alexa@systheon.com" - }, - { - "id": 127, - "guid": "fbc708b3-4f7c-404b-a544-58718f4b1435", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Hamphrey", - "company": "Idmax", - "phone": "898-467-2616", - "email": "audrey@idmax.com" - }, - { - "id": 128, - "guid": "cde19cff-0401-4a94-8882-80a873ab870a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Wallace", - "company": "Syssoft", - "phone": "893-419-2522", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 129, - "guid": "cc37cbeb-6a09-4c51-88d8-75610f0813a8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Carey", - "company": "Pacwest", - "phone": "854-500-2568", - "email": "autumn@pacwest.com" - }, - { - "id": 130, - "guid": "b2a06516-cd6e-402f-a16f-26aa9a54d736", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Sherlock", - "company": "Navivacs", - "phone": "846-581-3619", - "email": "rachel@navivacs.com" - }, - { - "id": 131, - "guid": "3becf22b-9449-4416-aad8-81833a10c99a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lily Thorndike", - "company": "Airdyne", - "phone": "814-415-2434", - "email": "lily@airdyne.com" - }, - { - "id": 132, - "guid": "4943f217-c6f1-418b-aab1-4775c8c83797", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Gardner", - "company": "Jamconik", - "phone": "801-491-3423", - "email": "julia@jamconik.com" - }, - { - "id": 133, - "guid": "85de8a98-3004-4f62-ad3b-64e996d44488", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Clapton", - "company": "Robotomic", - "phone": "827-495-2707", - "email": "samantha@robotomic.com" - }, - { - "id": 134, - "guid": "348b9d52-acbb-45bb-958e-60d1dd33cc49", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Chapman", - "company": "eEyetanic", - "phone": "802-413-2089", - "email": "charlotte@eeyetanic.com" - }, - { - "id": 135, - "guid": "aeafd222-fbb5-48f2-800e-fd63707c7c03", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Calhoun", - "company": "Allphysiche", - "phone": "845-511-2144", - "email": "sophia@allphysiche.com" - }, - { - "id": 136, - "guid": "f28c5006-031c-418b-8b7f-42a0680b7fa2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Otis", - "company": "Westmedia", - "phone": "831-557-2330", - "email": "elizabeth@westmedia.com" - }, - { - "id": 137, - "guid": "6872063a-a9cd-4ad6-b619-b67049e2848f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Campbell", - "company": "Westgate", - "phone": "814-442-2497", - "email": "layla@westgate.com" - }, - { - "id": 138, - "guid": "757ea430-62b4-4b2a-926a-41e61d5e25a9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Fulton", - "company": "Jamrola", - "phone": "897-453-3476", - "email": "jocelyn@jamrola.com" - }, - { - "id": 139, - "guid": "eb00dbe5-0cfb-4196-adcb-51882e1afb93", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Timmons", - "company": "Fibrotopia", - "phone": "847-521-2499", - "email": "abigail@fibrotopia.com" - }, - { - "id": 140, - "guid": "7f052ec6-353b-4ece-a7e7-0e91352ec33b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Young", - "company": "Westgate", - "phone": "850-589-2636", - "email": "ashley@westgate.com" - }, - { - "id": 141, - "guid": "9b68f665-8ab4-48a7-8c11-34c6522245fe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Charlotte Milton", - "company": "Teraserv", - "phone": "833-418-3055", - "email": "charlotte@teraserv.com" - }, - { - "id": 142, - "guid": "9aadf81e-f3cf-4e35-8679-1110dd4959b7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Calhoun", - "company": "RoboAerlogix", - "phone": "844-572-3514", - "email": "andrea@roboaerlogix.com" - }, - { - "id": 143, - "guid": "5add5451-5292-4a2a-a511-3d1b1030207c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Chapman", - "company": "Steganoconiche", - "phone": "804-546-3543", - "email": "sydney@steganoconiche.com" - }, - { - "id": 144, - "guid": "a58d5774-99b7-46f1-bb05-57b6009e9955", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Day", - "company": "US Infratouch", - "phone": "872-576-2517", - "email": "sarah@us infratouch.com" - }, - { - "id": 145, - "guid": "bf196fe2-950e-430c-98ba-68e38b8fdd13", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Warren", - "company": "iSkyvaco", - "phone": "843-592-3558", - "email": "katherine@iskyvaco.com" - }, - { - "id": 146, - "guid": "ea8a0a64-a2bc-4508-b084-365e6bca4cb2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Hailey", - "company": "Aprama", - "phone": "810-575-2223", - "email": "ashley@aprama.com" - }, - { - "id": 147, - "guid": "e1377182-54f6-4889-9044-2851e1c63a71", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Conors", - "company": "Polytheon", - "phone": "842-550-3830", - "email": "charlotte@polytheon.com" - }, - { - "id": 148, - "guid": "5db492b1-9d5c-44d1-8230-79ec4523c15c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Hailey", - "company": "Teratopia", - "phone": "860-511-3053", - "email": "melanie@teratopia.com" - }, - { - "id": 149, - "guid": "50d6c115-4396-4b29-9d38-1bce9ddd2195", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Thomson", - "company": "Pacwest", - "phone": "826-423-2254", - "email": "amelia@pacwest.com" - }, - { - "id": 150, - "guid": "512cd798-22f4-4931-9524-54213ed13787", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Caroline Wainwright", - "company": "Enlogia", - "phone": "888-420-3367", - "email": "caroline@enlogia.com" - }, - { - "id": 151, - "guid": "c3bd1c00-2d68-4339-bd5b-094f2268d754", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Cook", - "company": "Rapigrafix", - "phone": "874-499-3889", - "email": "audrey@rapigrafix.com" - }, - { - "id": 152, - "guid": "eb7c33bf-1a8c-4166-9986-c75abf85aa78", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Oswald", - "company": "Syssoft", - "phone": "833-434-2212", - "email": "katherine@syssoft.com" - }, - { - "id": 153, - "guid": "afac3da5-adca-4d37-9d84-0f0331cf924d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Davidson", - "company": "Thermotomic", - "phone": "840-591-3864", - "email": "nevaeh@thermotomic.com" - }, - { - "id": 154, - "guid": "3477bcf9-9e25-4a88-9a6a-22de56246809", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Autumn Davidson", - "company": "Unconix", - "phone": "843-506-3671", - "email": "autumn@unconix.com" - }, - { - "id": 155, - "guid": "2382a7c5-5d29-463d-a506-4c8327a37ef1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Sherlock", - "company": "US Infratouch", - "phone": "861-457-3348", - "email": "andrea@us infratouch.com" - }, - { - "id": 156, - "guid": "bd96ca9a-f419-46cf-9e76-300420ce559d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Timmons", - "company": "iQualcar", - "phone": "874-586-2552", - "email": "kylie@iqualcar.com" - }, - { - "id": 157, - "guid": "487eb7b4-b4e3-4228-a0e5-f84b8741c26c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Arianna Carey", - "company": "Idmax", - "phone": "825-437-2476", - "email": "arianna@idmax.com" - }, - { - "id": 158, - "guid": "480631db-c76e-4024-8adc-1dce0c9c2d2e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Higgins", - "company": "Titanirola", - "phone": "872-413-2568", - "email": "serenity@titanirola.com" - }, - { - "id": 159, - "guid": "eef33bbb-14a3-4a3a-b6e2-317fc04d63a3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Miller", - "company": "Xeicon", - "phone": "815-478-2549", - "email": "brianna@xeicon.com" - }, - { - "id": 160, - "guid": "eb6649f7-24fc-4e3f-a257-986c0dee1a43", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Gate", - "company": "Enlogia", - "phone": "880-436-3590", - "email": "katherine@enlogia.com" - }, - { - "id": 161, - "guid": "9344ef55-8557-4c94-8755-e3a665c7b371", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jessica Crossman", - "company": "Qualserve", - "phone": "852-547-3996", - "email": "jessica@qualserve.com" - }, - { - "id": 162, - "guid": "d1d64242-cb60-451e-a365-57cf06ccdad3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Vaughan", - "company": "iOptystix", - "phone": "851-452-2649", - "email": "zoey@ioptystix.com" - }, - { - "id": 163, - "guid": "99bbb71b-18f7-4f92-80f5-6b3976f1bb50", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Davidson", - "company": "Enlogia", - "phone": "882-488-2542", - "email": "genesis@enlogia.com" - }, - { - "id": 164, - "guid": "3f150a9a-6130-4616-8582-65bc0b859cc0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Audrey Sherlock", - "company": "Ameritron", - "phone": "830-498-3521", - "email": "audrey@ameritron.com" - }, - { - "id": 165, - "guid": "1fefe426-e317-4162-8bec-53aeaf9e43f9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ava Calhoun", - "company": "Thermotomic", - "phone": "832-583-2535", - "email": "ava@thermotomic.com" - }, - { - "id": 166, - "guid": "2409aa3e-919e-4cd8-b395-a4815e03a7c7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Crossman", - "company": "iSkyvaco", - "phone": "819-436-3226", - "email": "angelina@iskyvaco.com" - }, - { - "id": 167, - "guid": "39fb9665-97ef-4931-a9ea-9b13d0229792", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Brooks", - "company": "Navivacs", - "phone": "898-583-2422", - "email": "savannah@navivacs.com" - }, - { - "id": 168, - "guid": "4bbbd58f-22e9-4a6d-9413-840c8ba4e864", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Thorndike", - "company": "Idmax", - "phone": "807-524-3048", - "email": "chloe@idmax.com" - }, - { - "id": 169, - "guid": "31400273-d18d-4ea8-9dc5-4a8dfda71e7c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sarah Cook", - "company": "Vencom", - "phone": "881-537-2532", - "email": "sarah@vencom.com" - }, - { - "id": 170, - "guid": "8462ce07-d2d6-4a63-9919-9baaadae5161", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Gerald", - "company": "Indisco", - "phone": "832-489-2996", - "email": "ariana@indisco.com" - }, - { - "id": 171, - "guid": "208c79dd-e437-4121-ad33-5348ed993f42", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophie Hodges", - "company": "Thermotomic", - "phone": "894-505-2436", - "email": "sophie@thermotomic.com" - }, - { - "id": 172, - "guid": "148fabfa-779b-4f6e-a628-7a31d1009bad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Hancock", - "company": "Steganoconiche", - "phone": "825-510-3764", - "email": "leah@steganoconiche.com" - }, - { - "id": 173, - "guid": "f0c5b112-d65c-4b04-b856-1e4399d54a15", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Neal", - "company": "RoboAerlogix", - "phone": "828-433-3445", - "email": "avery@roboaerlogix.com" - }, - { - "id": 174, - "guid": "a0fbe84f-0b30-4f0d-b6a1-729218026536", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Neal", - "company": "Entcast", - "phone": "880-541-3921", - "email": "caroline@entcast.com" - }, - { - "id": 175, - "guid": "8a228b74-22e3-407f-a395-760e55ee1a9a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Oliver", - "company": "Nanobanc", - "phone": "874-490-3372", - "email": "mariah@nanobanc.com" - }, - { - "id": 176, - "guid": "73225fe2-68f7-4a66-a022-4b391998d60a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Miers", - "company": "Tekcar", - "phone": "898-573-2269", - "email": "makayla@tekcar.com" - }, - { - "id": 177, - "guid": "011c37e7-4187-45bd-85f7-b22ec1c78b2c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Carroll", - "company": "Tekcar", - "phone": "816-590-2349", - "email": "arianna@tekcar.com" - }, - { - "id": 178, - "guid": "59bea287-588d-4957-bc0e-c7f64e3c9115", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Calhoun", - "company": "Gigaura", - "phone": "847-486-2062", - "email": "andrea@gigaura.com" - }, - { - "id": 179, - "guid": "96ce6f5d-aec8-4068-98cd-cd4bb95d80f7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Sherlock", - "company": "Turbomart", - "phone": "800-419-2789", - "email": "abigail@turbomart.com" - }, - { - "id": 180, - "guid": "4d89d493-e601-4647-b80c-8b03ce2f2067", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Turner", - "company": "US Omnigraphik", - "phone": "848-429-2940", - "email": "riley@us omnigraphik.com" - }, - { - "id": 181, - "guid": "3e962c21-256c-4b22-acd7-df282ccd325a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Haig", - "company": "Multitiqua", - "phone": "828-489-2784", - "email": "lillian@multitiqua.com" - }, - { - "id": 182, - "guid": "449c2e9d-5dfb-4899-8f36-d389740f257e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alyssa Thomson", - "company": "Techtron", - "phone": "878-558-2392", - "email": "alyssa@techtron.com" - }, - { - "id": 183, - "guid": "2a4153d4-5f07-4498-8dc5-5bbf89480a44", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Oldman", - "company": "Raylog", - "phone": "895-412-3705", - "email": "lauren@raylog.com" - }, - { - "id": 184, - "guid": "b1940158-1e1c-45a6-97ca-f784f0bceb95", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Walkman", - "company": "Titanirola", - "phone": "864-478-2143", - "email": "khloe@titanirola.com" - }, - { - "id": 185, - "guid": "50d7e0b4-ae79-4f0e-a4b5-127508a8c08d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Campbell", - "company": "Gigaura", - "phone": "879-577-2541", - "email": "leah@gigaura.com" - }, - { - "id": 186, - "guid": "6b434845-c650-4326-856c-9b9fc9cfd6ec", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Miln", - "company": "Jamconik", - "phone": "801-584-3332", - "email": "elizabeth@jamconik.com" - }, - { - "id": 187, - "guid": "980d4b2e-db02-4a86-ad9a-3ec29dc455f8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kimberly Gilson", - "company": "Superscope", - "phone": "878-458-3877", - "email": "kimberly@superscope.com" - }, - { - "id": 188, - "guid": "59b839ac-5fcc-45a4-8b01-d8fa87cec51f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Haig", - "company": "Anaframe", - "phone": "870-541-2355", - "email": "gabrielle@anaframe.com" - }, - { - "id": 189, - "guid": "a8911a01-c2e7-40cf-ac8e-f48cedb61237", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia WifKinson", - "company": "Keytheon", - "phone": "869-578-2428", - "email": "mia@keytheon.com" - }, - { - "id": 190, - "guid": "3ce88b90-5fb7-4354-b53a-763e573bb42a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Carrington", - "company": "Fibrotopia", - "phone": "899-534-3430", - "email": "arianna@fibrotopia.com" - }, - { - "id": 191, - "guid": "8338a1e3-b334-4aa7-91d0-2edc07ffc7d3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Miln", - "company": "Entcast", - "phone": "873-539-2533", - "email": "victoria@entcast.com" - }, - { - "id": 192, - "guid": "a9383302-aee7-47ef-aa4f-cea3d88747d4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Carey", - "company": "Syssoft", - "phone": "822-523-2478", - "email": "madison@syssoft.com" - }, - { - "id": 193, - "guid": "93bd6423-0cc0-4d2e-b3bf-a23cb89a5010", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Molligan", - "company": "Quintegrity", - "phone": "877-574-2330", - "email": "leah@quintegrity.com" - }, - { - "id": 194, - "guid": "f11ce45a-a8ad-4e4b-81fb-d8019d492908", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Cook", - "company": "Multitiqua", - "phone": "850-525-3433", - "email": "isabella@multitiqua.com" - }, - { - "id": 195, - "guid": "fe5eb29f-a0f5-46b1-b47f-3a345b6ff872", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Milton", - "company": "Proline", - "phone": "811-554-2521", - "email": "claire@proline.com" - }, - { - "id": 196, - "guid": "b257c57f-efd2-42e6-8930-dcef96afde98", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Gilbert", - "company": "Openserve", - "phone": "833-400-2598", - "email": "vanessa@openserve.com" - }, - { - "id": 197, - "guid": "f2903c40-8c85-4137-8bc4-acc0f28e7539", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Hancock", - "company": "Pacwest", - "phone": "865-410-2759", - "email": "abigail@pacwest.com" - }, - { - "id": 198, - "guid": "d7e16674-28ac-44a0-b788-61c7f45e3adb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Oliver", - "company": "Thermotomic", - "phone": "862-506-2827", - "email": "vanessa@thermotomic.com" - }, - { - "id": 199, - "guid": "59d8947f-7f4b-4440-a285-90abffb9577a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Calhoun", - "company": "Polytheon", - "phone": "854-422-3837", - "email": "jessica@polytheon.com" - }, - { - "id": 200, - "guid": "c90e446f-01f9-428c-be53-f57648ea4d12", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Morrison", - "company": "SysUSA", - "phone": "824-583-3109", - "email": "ava@sysusa.com" - }, - { - "id": 201, - "guid": "8d017324-d0cc-4bec-857c-161216f01a5f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Higgins", - "company": "Keytheon", - "phone": "818-584-3730", - "email": "abigail@keytheon.com" - }, - { - "id": 202, - "guid": "40ba2ecd-0f11-42b8-a8b3-5005f6e3a886", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Winter", - "company": "Videobanc", - "phone": "833-545-3325", - "email": "camila@videobanc.com" - }, - { - "id": 203, - "guid": "634b1870-e44f-4992-9279-89be994aab0a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Payton Crossman", - "company": "Allnet", - "phone": "802-536-2014", - "email": "payton@allnet.com" - }, - { - "id": 204, - "guid": "2d9ac9ca-6b5d-4f92-a915-0ab8f0271022", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Goodman", - "company": "Steganoconiche", - "phone": "825-534-2333", - "email": "abigail@steganoconiche.com" - }, - { - "id": 205, - "guid": "91d735a5-47e9-48e7-bae6-92bb12ba9555", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Wallace", - "company": "Idmax", - "phone": "820-500-3304", - "email": "bella@idmax.com" - }, - { - "id": 206, - "guid": "3c4663e9-1c7f-4899-9079-9390817352ee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Cook", - "company": "iOptystix", - "phone": "896-600-3844", - "email": "amelia@ioptystix.com" - }, - { - "id": 207, - "guid": "f1afe725-191d-43c9-9337-2ecf0c811804", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brianna Young", - "company": "Netseco", - "phone": "896-530-3464", - "email": "brianna@netseco.com" - }, - { - "id": 208, - "guid": "5c2313e5-418d-4c88-ad5c-75f50727ad3b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Haig", - "company": "Aluco", - "phone": "824-415-3811", - "email": "riley@aluco.com" - }, - { - "id": 209, - "guid": "c1a3abf7-b84a-4c89-8515-ad13dc10216f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Young", - "company": "Qualserve", - "phone": "800-405-3553", - "email": "chloe@qualserve.com" - }, - { - "id": 210, - "guid": "64bf1675-2257-49a7-9599-74560a896d95", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Haig", - "company": "Superscope", - "phone": "807-491-3072", - "email": "vanessa@superscope.com" - }, - { - "id": 211, - "guid": "459321a0-bdd8-4209-b1dd-8dafaffe9373", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Owen", - "company": "Indisco", - "phone": "884-432-2847", - "email": "avery@indisco.com" - }, - { - "id": 212, - "guid": "5b8e1d50-9e93-4fff-868c-ec11e76cb34d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Bush", - "company": "Aprama", - "phone": "840-546-2706", - "email": "mariah@aprama.com" - }, - { - "id": 213, - "guid": "3a919bc4-6ac4-47a0-9323-e54f8833d959", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Vance", - "company": "Enlogia", - "phone": "812-431-3781", - "email": "eva@enlogia.com" - }, - { - "id": 214, - "guid": "a0ba9bda-5ac5-4222-81d0-d370ec4fc72c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Haig", - "company": "Generola", - "phone": "847-418-3062", - "email": "emma@generola.com" - }, - { - "id": 215, - "guid": "5c086e7a-6bf4-4825-8d6d-309d1eb4a945", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Haig", - "company": "Celgra", - "phone": "816-508-2481", - "email": "sophie@celgra.com" - }, - { - "id": 216, - "guid": "d2872e48-e83e-4297-b214-de2b437a72c9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Ford", - "company": "Anagraph", - "phone": "887-416-2618", - "email": "mariah@anagraph.com" - }, - { - "id": 217, - "guid": "d002774b-361d-45e5-a180-235fb95b5ee5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Youmans", - "company": "Cryptotegrity", - "phone": "899-542-2645", - "email": "katelyn@cryptotegrity.com" - }, - { - "id": 218, - "guid": "fad9e9b0-d9e0-4d27-951a-e711a4e4e45f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Warren", - "company": "Xeicon", - "phone": "856-509-3432", - "email": "rachel@xeicon.com" - }, - { - "id": 219, - "guid": "3c73f5f9-d46b-40c6-9875-7d75be3884ac", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Waller", - "company": "iOptystix", - "phone": "899-574-2899", - "email": "gabriella@ioptystix.com" - }, - { - "id": 220, - "guid": "8018f232-7474-4e20-a188-51b1851592c6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Oldridge", - "company": "Nanobanc", - "phone": "800-553-3680", - "email": "aubrey@nanobanc.com" - }, - { - "id": 221, - "guid": "47f158ec-6fd2-466d-8b69-fa3ebece0610", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Youmans", - "company": "Robotemplate", - "phone": "839-425-3642", - "email": "kimberly@robotemplate.com" - }, - { - "id": 222, - "guid": "68fa2d8c-8ad9-4fe7-87bd-70027a905141", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Daniels", - "company": "Robotomic", - "phone": "817-405-3784", - "email": "evelyn@robotomic.com" - }, - { - "id": 223, - "guid": "4a373d5f-5bf7-4db1-8cd3-2e4eee75b056", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Gilmore", - "company": "Unologic", - "phone": "800-481-2701", - "email": "kimberly@unologic.com" - }, - { - "id": 224, - "guid": "95f9cf9c-59d6-4ea5-87a8-76fa62bff911", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Gardner", - "company": "RoboAerlogix", - "phone": "837-557-2906", - "email": "caroline@roboaerlogix.com" - }, - { - "id": 225, - "guid": "da857a49-252f-486f-af57-01b65aea544c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella White", - "company": "Celgra", - "phone": "833-499-3860", - "email": "gabriella@celgra.com" - }, - { - "id": 226, - "guid": "0983de27-ad24-47f8-8318-ddc3cc4802e5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Neal", - "company": "Navivacs", - "phone": "842-556-3486", - "email": "madelyn@navivacs.com" - }, - { - "id": 227, - "guid": "f42c837b-1ebd-457b-9773-b9f3ea2ec9c4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabella White", - "company": "Truetomic", - "phone": "860-576-3322", - "email": "isabella@truetomic.com" - }, - { - "id": 228, - "guid": "34c50849-1501-4e2b-a7f1-0e36d48ea333", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Wainwright", - "company": "Titanirola", - "phone": "838-439-3488", - "email": "isabella@titanirola.com" - }, - { - "id": 229, - "guid": "74e2d8bf-107f-48a0-b0c0-345b78fdf554", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Galbraith", - "company": "Multitiqua", - "phone": "831-439-2325", - "email": "bailey@multitiqua.com" - }, - { - "id": 230, - "guid": "dce94125-a9e8-4e4c-a04c-ab387b403d63", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Fulton", - "company": "Pericenta", - "phone": "843-421-2775", - "email": "aubrey@pericenta.com" - }, - { - "id": 231, - "guid": "3348cfc0-7a3a-4839-96f5-ec7272d53f90", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Riley Miller", - "company": "iSkyvaco", - "phone": "833-442-2994", - "email": "riley@iskyvaco.com" - }, - { - "id": 232, - "guid": "b059ec43-2a16-42ce-b7fe-a714485ce109", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Gill", - "company": "Conotomics", - "phone": "850-409-2726", - "email": "molly@conotomics.com" - }, - { - "id": 233, - "guid": "e25fa00f-9bbc-452c-a893-95699a152492", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sofia Crossman", - "company": "Qualserve", - "phone": "873-481-2606", - "email": "sofia@qualserve.com" - }, - { - "id": 234, - "guid": "ac45588e-a444-4ac8-89a9-bc101f9cd8b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Gustman", - "company": "Hypervaco", - "phone": "850-445-2281", - "email": "vanessa@hypervaco.com" - }, - { - "id": 235, - "guid": "973a4062-1e5d-4ef6-8942-3d37d0b1190d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Miers", - "company": "Aprama", - "phone": "856-586-3867", - "email": "molly@aprama.com" - }, - { - "id": 236, - "guid": "37eced45-f083-4934-89c3-99ffee4d0be9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Gardner", - "company": "Truegate", - "phone": "840-400-3711", - "email": "faith@truegate.com" - }, - { - "id": 237, - "guid": "3e3fa092-3d19-4641-85d4-28f2faa11eed", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Sherlock", - "company": "Orthosoft", - "phone": "888-591-3382", - "email": "grace@orthosoft.com" - }, - { - "id": 238, - "guid": "3aa48707-e44e-428e-8393-cbc37136b8fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Waller", - "company": "iEnland", - "phone": "868-450-3388", - "email": "peyton@ienland.com" - }, - { - "id": 239, - "guid": "2d633104-cd60-4edf-97dd-34d084848938", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Brown", - "company": "Entcast", - "phone": "836-444-2029", - "email": "evelyn@entcast.com" - }, - { - "id": 240, - "guid": "8cd4d71d-4946-4eb5-aba7-0943db109f3d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Morrison", - "company": "Superscope", - "phone": "873-540-3012", - "email": "mariah@superscope.com" - }, - { - "id": 241, - "guid": "19eb8ee8-bf25-495e-a933-dd5dccb9555b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Sherlock", - "company": "Rapigrafix", - "phone": "875-562-2278", - "email": "taylor@rapigrafix.com" - }, - { - "id": 242, - "guid": "6cd7d278-0395-47e0-be57-a1edc60d855a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Crossman", - "company": "Keytheon", - "phone": "817-490-2366", - "email": "julia@keytheon.com" - }, - { - "id": 243, - "guid": "7087de46-4907-4acc-aec8-99ac939ec8fa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Nelson", - "company": "Idmax", - "phone": "832-473-3167", - "email": "rachel@idmax.com" - }, - { - "id": 244, - "guid": "72686b24-dfac-41e1-bac0-a9c0d178957f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Wesley", - "company": "iSkyvaco", - "phone": "822-541-2996", - "email": "katherine@iskyvaco.com" - }, - { - "id": 245, - "guid": "b9d687b0-bfa1-4b53-87ed-f8a32a97a68e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Peyton Chesterton", - "company": "Nanobanc", - "phone": "842-438-3285", - "email": "peyton@nanobanc.com" - }, - { - "id": 246, - "guid": "26708932-cb59-49e3-ab4f-9f0141bc40ba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madison Chandter", - "company": "Superscope", - "phone": "853-462-2994", - "email": "madison@superscope.com" - }, - { - "id": 247, - "guid": "1613c256-3d12-46f8-bd58-09f32091c724", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Oswald", - "company": "Mescatron", - "phone": "858-562-2642", - "email": "faith@mescatron.com" - }, - { - "id": 248, - "guid": "03c88bb3-e0ca-4535-b053-de1c4b2a5c04", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Wesley", - "company": "Teraserv", - "phone": "829-537-3072", - "email": "elizabeth@teraserv.com" - }, - { - "id": 249, - "guid": "6ec2abda-24d2-42d2-a8be-24e611d063e1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Brown", - "company": "Cryptotemplate", - "phone": "879-585-2152", - "email": "eva@cryptotemplate.com" - }, - { - "id": 250, - "guid": "5cb9a719-e688-4153-9bfa-81f9d9b0d842", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Hailey", - "company": "Technogra", - "phone": "890-483-3120", - "email": "sophia@technogra.com" - }, - { - "id": 251, - "guid": "0bb5433f-6406-4ddb-8811-6f628e8a78cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Day", - "company": "Venconix", - "phone": "824-521-2745", - "email": "sofia@venconix.com" - }, - { - "id": 252, - "guid": "cedaccae-4175-490e-8b2b-1e69d732de05", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Goodman", - "company": "Orthosoft", - "phone": "898-449-3960", - "email": "zoey@orthosoft.com" - }, - { - "id": 253, - "guid": "ce3db90d-3366-4f06-9e9e-63ba336ad6a2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina WifKinson", - "company": "Hypervaco", - "phone": "843-535-2357", - "email": "angelina@hypervaco.com" - }, - { - "id": 254, - "guid": "bfbb1289-bdfb-4f66-a761-bea6885c05ec", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Carter", - "company": "Dynarama", - "phone": "842-507-3224", - "email": "gianna@dynarama.com" - }, - { - "id": 255, - "guid": "fb9f5211-17c7-46cb-b303-4b1d1a28073f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Osborne", - "company": "Robotemplate", - "phone": "874-500-3557", - "email": "sarah@robotemplate.com" - }, - { - "id": 256, - "guid": "56581646-8043-48c5-9aea-957e9a8303f4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Bush", - "company": "Robocomm", - "phone": "822-573-3859", - "email": "allison@robocomm.com" - }, - { - "id": 257, - "guid": "cdec10ab-5e9e-48e9-b69d-dd5e9b034f40", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Calhoun", - "company": "Netseco", - "phone": "875-534-2054", - "email": "kylie@netseco.com" - }, - { - "id": 258, - "guid": "4a4b661b-5b86-4c6a-9cee-7cee84f19010", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Campbell", - "company": "Conrama", - "phone": "853-423-3814", - "email": "layla@conrama.com" - }, - { - "id": 259, - "guid": "2f7f07ac-4d36-4423-aafc-6e74424f5720", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Fisher", - "company": "Robotemplate", - "phone": "809-404-2497", - "email": "isabelle@robotemplate.com" - }, - { - "id": 260, - "guid": "e38f8c25-0f81-4810-972c-00893e4e7d24", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoey Freeman", - "company": "Infraique", - "phone": "827-598-2900", - "email": "zoey@infraique.com" - }, - { - "id": 261, - "guid": "e73230d7-6319-49e0-8012-a97f63069539", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Adamson", - "company": "Gigaura", - "phone": "828-566-3614", - "email": "alexandra@gigaura.com" - }, - { - "id": 262, - "guid": "f81d3782-7b71-4295-932c-6213e45e142e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Watson", - "company": "Truetomic", - "phone": "861-418-2291", - "email": "sophia@truetomic.com" - }, - { - "id": 263, - "guid": "db00c124-6631-428b-8348-8ccbe030eb7c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Higgins", - "company": "Fibrotopia", - "phone": "841-519-2895", - "email": "vanessa@fibrotopia.com" - }, - { - "id": 264, - "guid": "fddad935-0982-4c4f-836b-46b7ff521691", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna White", - "company": "Compuamerica", - "phone": "832-415-2513", - "email": "anna@compuamerica.com" - }, - { - "id": 265, - "guid": "02f3a200-0998-4485-b46b-a86ca6f3fc30", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Miln", - "company": "Anaframe", - "phone": "842-507-3937", - "email": "faith@anaframe.com" - }, - { - "id": 266, - "guid": "d936e01f-4269-4e5f-91cb-daec6efa4dba", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ariana Young", - "company": "Keytheon", - "phone": "818-404-2607", - "email": "ariana@keytheon.com" - }, - { - "id": 267, - "guid": "42fbd5c7-369e-4b8e-8a3c-88742820177d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Miller", - "company": "Robocomm", - "phone": "808-459-2018", - "email": "layla@robocomm.com" - }, - { - "id": 268, - "guid": "2c2c27d6-78d8-4299-b611-9aeb431f74de", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Hancock", - "company": "Gigaura", - "phone": "894-521-3559", - "email": "abigail@gigaura.com" - }, - { - "id": 269, - "guid": "48657f65-a4f1-4f23-8e04-e4d0396fe403", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Hawkins", - "company": "Robotomic", - "phone": "887-407-3545", - "email": "kylie@robotomic.com" - }, - { - "id": 270, - "guid": "fb5f31f2-6ae2-49e3-bd79-1e2a151657de", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Arianna Bush", - "company": "Openserve", - "phone": "812-590-3909", - "email": "arianna@openserve.com" - }, - { - "id": 271, - "guid": "3d165b6d-e021-4f95-947f-d27c3dfed3b6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Miller", - "company": "Turbomart", - "phone": "812-531-2023", - "email": "isabelle@turbomart.com" - }, - { - "id": 272, - "guid": "941f65f5-47d0-4df6-8fcf-a5f94b0f681a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Crossman", - "company": "Allnet", - "phone": "834-533-2857", - "email": "bella@allnet.com" - }, - { - "id": 273, - "guid": "6f495706-8e01-447b-b7e7-9455101e20d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Harrison", - "company": "Polytheon", - "phone": "828-514-3144", - "email": "gianna@polytheon.com" - }, - { - "id": 274, - "guid": "95c13cc6-acd7-42bc-9b07-ee7865eacc74", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Warren", - "company": "Xeicon", - "phone": "899-475-2029", - "email": "ariana@xeicon.com" - }, - { - "id": 275, - "guid": "d39556c9-ee2a-4882-a9d4-df0b8ac05ff9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Galbraith", - "company": "OpKeycomm", - "phone": "805-580-3120", - "email": "faith@opkeycomm.com" - }, - { - "id": 276, - "guid": "f086269e-7346-4f4b-9ab8-ee1af9f1f893", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Wood", - "company": "Interliant", - "phone": "895-540-2400", - "email": "serenity@interliant.com" - }, - { - "id": 277, - "guid": "9cb1bf1c-9c3d-4136-8ed9-c979fa55cece", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Ogden", - "company": "Allphysiche", - "phone": "864-517-3070", - "email": "sarah@allphysiche.com" - }, - { - "id": 278, - "guid": "63e114f9-81ee-42cb-a17a-ed8e3e28537b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Nash", - "company": "Raylog", - "phone": "846-420-3171", - "email": "isabelle@raylog.com" - }, - { - "id": 279, - "guid": "636dd7f8-74c0-468c-a510-cfff0c3645aa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Charlson", - "company": "Truegate", - "phone": "870-410-3405", - "email": "molly@truegate.com" - }, - { - "id": 280, - "guid": "24d57150-a5e2-48b4-8cee-f5ce8696ae69", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah Ford", - "company": "Aprama", - "phone": "837-513-3269", - "email": "mariah@aprama.com" - }, - { - "id": 281, - "guid": "13f9c776-0d3b-4762-92e3-1bde491c2116", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Fisher", - "company": "Airdyne", - "phone": "873-560-2519", - "email": "angelina@airdyne.com" - }, - { - "id": 282, - "guid": "8e8ce6ef-f994-4ec1-93e6-630562829612", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Sheldon", - "company": "Tekcar", - "phone": "844-472-2450", - "email": "mariah@tekcar.com" - }, - { - "id": 283, - "guid": "eefd1978-b90f-4e76-82ab-24281fc17338", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Goodman", - "company": "Quintegrity", - "phone": "899-556-3236", - "email": "katherine@quintegrity.com" - }, - { - "id": 284, - "guid": "d169f153-fc41-439e-9061-f874bc1cda42", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Cook", - "company": "Inridium", - "phone": "856-596-3742", - "email": "hailey@inridium.com" - }, - { - "id": 285, - "guid": "2df20b75-4966-4d3f-9e49-b045898a2b40", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Oliver", - "company": "SysVenamerica", - "phone": "823-434-2124", - "email": "hannah@sysvenamerica.com" - }, - { - "id": 286, - "guid": "e569dde1-db1c-4aea-bb15-c090f285e6b6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Oldman", - "company": "Robotomic", - "phone": "876-515-2865", - "email": "olivia@robotomic.com" - }, - { - "id": 287, - "guid": "a7090445-6a37-432f-82f9-d6cdabec243c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Fisher", - "company": "iSkyvaco", - "phone": "837-483-3810", - "email": "layla@iskyvaco.com" - }, - { - "id": 288, - "guid": "fbf29c83-7435-4bed-a139-eefd06a2208b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Young", - "company": "Xeicon", - "phone": "837-495-3366", - "email": "brooklyn@xeicon.com" - }, - { - "id": 289, - "guid": "4cd86608-537f-4fa4-ac17-df93d2b867c3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Walkman", - "company": "Celgra", - "phone": "823-523-2242", - "email": "kaylee@celgra.com" - }, - { - "id": 290, - "guid": "72afe924-defd-40b7-8d9d-595f0cccbaec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Cramer", - "company": "SysVenamerica", - "phone": "838-585-2778", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 291, - "guid": "3f8775e9-2af6-4fcd-a697-bed745bce912", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Clapton", - "company": "Systheon", - "phone": "869-456-2346", - "email": "angelina@systheon.com" - }, - { - "id": 292, - "guid": "48ec5e80-374c-4de5-aacf-88ddf1073984", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Gustman", - "company": "Truetomic", - "phone": "809-508-3010", - "email": "isabella@truetomic.com" - }, - { - "id": 293, - "guid": "6e29391b-cb9b-4433-b70c-0cfece1639f8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Oswald", - "company": "Interliant", - "phone": "813-468-2767", - "email": "molly@interliant.com" - }, - { - "id": 294, - "guid": "91d277da-0fa2-4d90-846b-92cb415ca002", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Campbell", - "company": "Jamconik", - "phone": "872-436-3471", - "email": "claire@jamconik.com" - }, - { - "id": 295, - "guid": "4a8e5681-4fb1-404c-962c-f27dd6cc6853", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Croftoon", - "company": "Allnet", - "phone": "801-501-3771", - "email": "charlotte@allnet.com" - }, - { - "id": 296, - "guid": "a011dce0-8f9d-4c78-9730-b5c134f37a3f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Carey", - "company": "Openserve", - "phone": "830-545-3968", - "email": "andrea@openserve.com" - }, - { - "id": 297, - "guid": "54d037b0-a69d-4458-ae7b-bad7294112b1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Nathan", - "company": "Teraserv", - "phone": "881-439-3557", - "email": "ava@teraserv.com" - }, - { - "id": 298, - "guid": "0331b041-30a1-4c06-b3be-cee959218e50", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Morrison", - "company": "Idmax", - "phone": "855-513-3817", - "email": "vanessa@idmax.com" - }, - { - "id": 299, - "guid": "91131352-3751-4031-8249-6cf2600f1869", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Ward", - "company": "Airdyne", - "phone": "853-516-2565", - "email": "zoe@airdyne.com" - }, - { - "id": 300, - "guid": "b496aa66-5be6-4010-8c52-d33357911992", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Fulton", - "company": "Transtouch", - "phone": "809-518-2370", - "email": "mariah@transtouch.com" - }, - { - "id": 301, - "guid": "58f974b5-a0e1-4448-a056-da8e8d7cfa09", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Young", - "company": "Westmedia", - "phone": "806-599-2559", - "email": "hailey@westmedia.com" - }, - { - "id": 302, - "guid": "0db0c8e7-23bf-4068-8fc4-766e76715599", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Goldman", - "company": "Allnet", - "phone": "824-455-2661", - "email": "destiny@allnet.com" - }, - { - "id": 303, - "guid": "ad5f87f1-10b2-4f4a-85f0-aa96054915a9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Natalie Carey", - "company": "Enlogia", - "phone": "857-424-2018", - "email": "natalie@enlogia.com" - }, - { - "id": 304, - "guid": "36688f40-6e96-4ed6-818c-304f838a3140", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Hardman", - "company": "Ameritron", - "phone": "873-474-3709", - "email": "kimberly@ameritron.com" - }, - { - "id": 305, - "guid": "de1a10cb-c5c1-4bdb-818d-fb1877c094f7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoe Milton", - "company": "Teraserv", - "phone": "838-485-2068", - "email": "zoe@teraserv.com" - }, - { - "id": 306, - "guid": "79b29a77-8c9e-4a5a-a441-018ab36e3493", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Waller", - "company": "Mescatron", - "phone": "830-578-2153", - "email": "autumn@mescatron.com" - }, - { - "id": 307, - "guid": "824b6a28-9b9f-4957-812f-28237cdd0c36", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Timmons", - "company": "Mescatron", - "phone": "898-546-2690", - "email": "anna@mescatron.com" - }, - { - "id": 308, - "guid": "7712bde3-57a9-43e5-adcf-d19051449672", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Young", - "company": "iOptystix", - "phone": "832-412-3561", - "email": "olivia@ioptystix.com" - }, - { - "id": 309, - "guid": "a802573f-ea55-4983-8892-75c09fa25d1a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Clapton", - "company": "Openserve", - "phone": "816-502-2656", - "email": "payton@openserve.com" - }, - { - "id": 310, - "guid": "062d7669-a3ca-4834-8890-b5bd10491954", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Webster", - "company": "eSteganoergy", - "phone": "806-549-2492", - "email": "melanie@esteganoergy.com" - }, - { - "id": 311, - "guid": "33a73593-c34e-457f-b032-8a7c52e205bc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Winter", - "company": "eEyetanic", - "phone": "897-585-3200", - "email": "molly@eeyetanic.com" - }, - { - "id": 312, - "guid": "73097105-a707-4251-a3f8-6b6bac64b529", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Oswald", - "company": "Rapigrafix", - "phone": "818-573-3602", - "email": "katelyn@rapigrafix.com" - }, - { - "id": 313, - "guid": "72126064-e4cd-425f-9268-3f8c77c9d8ba", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooke Davidson", - "company": "Sontopia", - "phone": "808-414-3848", - "email": "brooke@sontopia.com" - }, - { - "id": 314, - "guid": "809f64a5-57b7-4ba4-9425-5cb64c771818", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Gustman", - "company": "Entcast", - "phone": "846-580-3051", - "email": "hailey@entcast.com" - }, - { - "id": 315, - "guid": "2bed8055-1df6-41b9-840b-8df12ee76fd8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Fulton", - "company": "RoboAerlogix", - "phone": "814-489-3028", - "email": "ava@roboaerlogix.com" - }, - { - "id": 316, - "guid": "9dbe213e-7efd-492f-bf47-af39dcc14c87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Otis", - "company": "Aluco", - "phone": "808-599-2245", - "email": "hannah@aluco.com" - }, - { - "id": 317, - "guid": "515c6ba7-5be9-4d11-af26-7a717a568f95", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Murphy", - "company": "Transtouch", - "phone": "815-512-3856", - "email": "vanessa@transtouch.com" - }, - { - "id": 318, - "guid": "9986573e-1eb6-4f71-b644-9666e47ddb96", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Vance", - "company": "Openserve", - "phone": "811-537-2892", - "email": "natalie@openserve.com" - }, - { - "id": 319, - "guid": "1e47bdb9-6ead-4d80-8708-570639b16234", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra WifKinson", - "company": "US Omnigraphik", - "phone": "875-473-2839", - "email": "alexandra@us omnigraphik.com" - }, - { - "id": 320, - "guid": "96024e53-d7d4-4d98-9fd4-6d51c583e7d2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Thomson", - "company": "Anaframe", - "phone": "893-497-3082", - "email": "vanessa@anaframe.com" - }, - { - "id": 321, - "guid": "18fc65b0-0f1b-4fb5-9dc6-221e3325a528", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Webster", - "company": "Interliant", - "phone": "810-421-3486", - "email": "bella@interliant.com" - }, - { - "id": 322, - "guid": "49527fa0-3893-48ef-8a8d-5186f3eb0d06", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Savannah Hailey", - "company": "Pericenta", - "phone": "857-481-2018", - "email": "savannah@pericenta.com" - }, - { - "id": 323, - "guid": "a2ce759b-c113-49c5-b3c2-943d9dfef065", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney Wayne", - "company": "Teraserv", - "phone": "825-479-3336", - "email": "sydney@teraserv.com" - }, - { - "id": 324, - "guid": "521f30ab-bdab-4171-aac7-5cf5cf3f6642", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Charlson", - "company": "Mescatron", - "phone": "867-587-3280", - "email": "lily@mescatron.com" - }, - { - "id": 325, - "guid": "dc507f38-2bb6-462a-a4a7-81d56a74a560", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Owen", - "company": "Techtron", - "phone": "889-434-3552", - "email": "alexis@techtron.com" - }, - { - "id": 326, - "guid": "51f999bf-ebcc-4850-b960-0a9b7bd229e4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexis Goodman", - "company": "Rapigrafix", - "phone": "894-455-2828", - "email": "alexis@rapigrafix.com" - }, - { - "id": 327, - "guid": "42a68503-477e-40fe-a85f-7d445646afef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Carey", - "company": "Proline", - "phone": "858-536-3313", - "email": "paige@proline.com" - }, - { - "id": 328, - "guid": "4c2fed7a-6e85-45a9-99e0-cb1e3a6cdd63", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Brooks", - "company": "Nanobanc", - "phone": "808-448-3437", - "email": "evelyn@nanobanc.com" - }, - { - "id": 329, - "guid": "97c71701-8930-4fcd-9f9e-313621db234e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Oswald", - "company": "Cryptotemplate", - "phone": "824-566-2095", - "email": "jasmine@cryptotemplate.com" - }, - { - "id": 330, - "guid": "2b82ceca-ba07-4eea-b19b-42ab2170943b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jocelyn Wallace", - "company": "Truegate", - "phone": "816-444-3821", - "email": "jocelyn@truegate.com" - }, - { - "id": 331, - "guid": "39b10229-d0b6-46f3-b6d2-7c8e38107c88", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Gerald", - "company": "Airdyne", - "phone": "818-595-2598", - "email": "lillian@airdyne.com" - }, - { - "id": 332, - "guid": "445c10c5-6b98-4713-8f5c-c7270c8f33c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Bush", - "company": "iSkyvaco", - "phone": "838-508-2139", - "email": "allison@iskyvaco.com" - }, - { - "id": 333, - "guid": "fbf85fbe-2ce8-41f1-80c4-ca4c477de9b6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Croftoon", - "company": "iEnland", - "phone": "818-554-2410", - "email": "zoey@ienland.com" - }, - { - "id": 334, - "guid": "09a45f67-ce2e-4db2-853a-1831a67da22c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Mercer", - "company": "OpKeycomm", - "phone": "861-594-2789", - "email": "riley@opkeycomm.com" - }, - { - "id": 335, - "guid": "70286d21-c1d3-4f7d-8a47-c79a8a47c83f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Taylor Owen", - "company": "Raylog", - "phone": "847-535-2674", - "email": "taylor@raylog.com" - }, - { - "id": 336, - "guid": "181f0f27-2b91-4e3d-a24a-e9fdf9662e59", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Vance", - "company": "Textiqua", - "phone": "845-550-3586", - "email": "chloe@textiqua.com" - }, - { - "id": 337, - "guid": "6b5e8615-3af3-40a8-86f4-0a6282a9b8cb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Brickman", - "company": "Inridium", - "phone": "879-497-2650", - "email": "brianna@inridium.com" - }, - { - "id": 338, - "guid": "30ad8ae7-2adc-4a91-b7ae-ad4bf4e26016", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kayla Wainwright", - "company": "Cryptotemplate", - "phone": "870-435-3028", - "email": "kayla@cryptotemplate.com" - }, - { - "id": 339, - "guid": "b6df1351-a1b9-48d8-817b-8177da256432", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Vaughan", - "company": "Hypervaco", - "phone": "846-409-3685", - "email": "hannah@hypervaco.com" - }, - { - "id": 340, - "guid": "2e1d5336-7e4d-4624-aed3-e810ccc5ff3f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Ward", - "company": "Infraique", - "phone": "861-550-2465", - "email": "autumn@infraique.com" - }, - { - "id": 341, - "guid": "3e056c3d-4633-4f6a-ae79-24ee6f1fd2b4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Walkman", - "company": "Vencom", - "phone": "861-428-3358", - "email": "ella@vencom.com" - }, - { - "id": 342, - "guid": "d06192a1-0f0a-49de-96f9-bb3e62f54741", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Calhoun", - "company": "Syssoft", - "phone": "860-438-3362", - "email": "isabelle@syssoft.com" - }, - { - "id": 343, - "guid": "5c9f18d7-6c84-4c2a-b25e-f5948d4c8bd0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Timmons", - "company": "Vencom", - "phone": "824-460-3998", - "email": "vanessa@vencom.com" - }, - { - "id": 344, - "guid": "41eb84ee-bc11-4664-82b2-7b2db59d9981", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Carroll", - "company": "Raylog", - "phone": "892-471-2600", - "email": "kaitlyn@raylog.com" - }, - { - "id": 345, - "guid": "184111af-e551-496f-bcf6-9a91f79a3954", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Leah White", - "company": "Conotomics", - "phone": "843-471-2052", - "email": "leah@conotomics.com" - }, - { - "id": 346, - "guid": "4dfe4810-5a85-492d-975f-5443eb701785", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bailey Conors", - "company": "Infraique", - "phone": "802-479-3982", - "email": "bailey@infraique.com" - }, - { - "id": 347, - "guid": "6abad1ea-0fa2-4a5a-b81b-b7606b84a30c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Gill", - "company": "Nanobanc", - "phone": "894-537-2188", - "email": "kaylee@nanobanc.com" - }, - { - "id": 348, - "guid": "de692c94-cb51-4e48-9074-d2ee19b40e56", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Carroll", - "company": "SysVenamerica", - "phone": "885-471-2641", - "email": "kylie@sysvenamerica.com" - }, - { - "id": 349, - "guid": "73e81393-698c-4c63-bae1-5037862bbf14", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Goodman", - "company": "Fibrotouch", - "phone": "886-437-3221", - "email": "sydney@fibrotouch.com" - }, - { - "id": 350, - "guid": "422cd9a2-e11f-4392-86bb-08410ac59937", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Vaughan", - "company": "Infraique", - "phone": "862-592-2183", - "email": "emma@infraique.com" - }, - { - "id": 351, - "guid": "12eca356-b27e-4cbf-80ee-0391c21fd376", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Caroline Waller", - "company": "Inridium", - "phone": "895-504-3439", - "email": "caroline@inridium.com" - }, - { - "id": 352, - "guid": "8421195f-88f6-4356-8cb6-be3c743b64d3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Neal", - "company": "Textiqua", - "phone": "894-584-3163", - "email": "aaliyah@textiqua.com" - }, - { - "id": 353, - "guid": "80284cda-0d59-4611-82e2-51d73571ccaf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Timmons", - "company": "Celgra", - "phone": "800-495-2681", - "email": "bella@celgra.com" - }, - { - "id": 354, - "guid": "1a846786-c2f1-4d43-86af-01730f389bce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Miln", - "company": "US Omnigraphik", - "phone": "831-418-2719", - "email": "jocelyn@us omnigraphik.com" - }, - { - "id": 355, - "guid": "aaf4b4b7-044e-4dc1-a06c-33d18bac7fe2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Croftoon", - "company": "Cryptotegrity", - "phone": "863-422-4000", - "email": "arianna@cryptotegrity.com" - }, - { - "id": 356, - "guid": "319bc113-934b-4aca-895d-1b2521ba39e3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Haig", - "company": "Titanigraf", - "phone": "810-402-2972", - "email": "madeline@titanigraf.com" - }, - { - "id": 357, - "guid": "204bdddc-be70-43fa-ad7e-6f7c9edb1c38", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Eva Wallace", - "company": "Airdyne", - "phone": "898-562-3653", - "email": "eva@airdyne.com" - }, - { - "id": 358, - "guid": "9d1191bb-0a7a-483c-8ee6-50e0a4859923", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Brickman", - "company": "Keytheon", - "phone": "867-400-2734", - "email": "layla@keytheon.com" - }, - { - "id": 359, - "guid": "a7f86343-a145-4669-9dbf-c1f05958ec8f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Wayne", - "company": "InfoAirway", - "phone": "845-561-2461", - "email": "khloe@infoairway.com" - }, - { - "id": 360, - "guid": "9fed8a07-c363-4b80-9696-1bc907fbf099", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Oliver", - "company": "Anagraph", - "phone": "843-564-2974", - "email": "autumn@anagraph.com" - }, - { - "id": 361, - "guid": "812a38f9-8879-4c97-87ce-2e562d9f68c6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Adamson", - "company": "Compuamerica", - "phone": "870-436-3069", - "email": "alexis@compuamerica.com" - }, - { - "id": 362, - "guid": "39f899f3-8ad4-4256-a965-bece7d2d812d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madelyn Haig", - "company": "Entcast", - "phone": "873-489-3381", - "email": "madelyn@entcast.com" - }, - { - "id": 363, - "guid": "e733d648-0065-45df-b67e-ebd00885e790", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Samantha Thomson", - "company": "Pacwest", - "phone": "883-503-3596", - "email": "samantha@pacwest.com" - }, - { - "id": 364, - "guid": "ded39205-3eaa-4cd3-807c-25f9487483ba", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Brown", - "company": "Aluco", - "phone": "885-425-3287", - "email": "faith@aluco.com" - }, - { - "id": 365, - "guid": "d7fe8367-8e34-4f61-b920-ff831cb108c5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabella Gate", - "company": "Titanirola", - "phone": "871-429-2972", - "email": "isabella@titanirola.com" - }, - { - "id": 366, - "guid": "02fdb13c-e17a-49df-ac0b-f14fef748a9e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Miller", - "company": "Orthosoft", - "phone": "839-539-3117", - "email": "peyton@orthosoft.com" - }, - { - "id": 367, - "guid": "4658d990-ea15-43fd-832f-20fd41452a79", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Creighton", - "company": "Nanobanc", - "phone": "801-515-3669", - "email": "lauren@nanobanc.com" - }, - { - "id": 368, - "guid": "673edae0-dadf-4779-a2ff-4b0b4f10423f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Gilson", - "company": "Techtron", - "phone": "801-599-3077", - "email": "alexis@techtron.com" - }, - { - "id": 369, - "guid": "cfdae6ef-66ee-4930-a337-81d7ddfd5b28", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ariana Day", - "company": "Anaframe", - "phone": "838-552-3223", - "email": "ariana@anaframe.com" - }, - { - "id": 370, - "guid": "161787df-c52d-4d37-acf4-804ad40079dc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Crossman", - "company": "Teknoplexon", - "phone": "862-468-2304", - "email": "gabriella@teknoplexon.com" - }, - { - "id": 371, - "guid": "8861e67c-9814-4241-8cae-5cd7fab8142e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Miers", - "company": "iOptystix", - "phone": "889-516-3494", - "email": "jasmine@ioptystix.com" - }, - { - "id": 372, - "guid": "a7b01651-136c-4099-9c82-910aa73bf5e1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Clapton", - "company": "Ventanium", - "phone": "887-583-3453", - "email": "alexa@ventanium.com" - }, - { - "id": 373, - "guid": "962eea78-8eb9-432b-80eb-f3f326d6f900", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kayla Brooks", - "company": "Turbomart", - "phone": "832-586-2059", - "email": "kayla@turbomart.com" - }, - { - "id": 374, - "guid": "63e14fb6-a9cd-47f9-b3e2-17c25a61e8f0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Fisher", - "company": "Robotomic", - "phone": "864-537-2368", - "email": "mariah@robotomic.com" - }, - { - "id": 375, - "guid": "1a954303-d8cf-4fbd-bdf4-e2717bc46169", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Hamphrey", - "company": "Thermotomic", - "phone": "874-510-3812", - "email": "aaliyah@thermotomic.com" - }, - { - "id": 376, - "guid": "9dd9099e-965d-47da-a407-f641e443d0b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Gilson", - "company": "Transtouch", - "phone": "821-415-2921", - "email": "mya@transtouch.com" - }, - { - "id": 377, - "guid": "d228c970-1ca2-44ad-9a95-e17631439905", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Ford", - "company": "Ventanium", - "phone": "805-474-3418", - "email": "victoria@ventanium.com" - }, - { - "id": 378, - "guid": "62dcf9e1-4179-4802-9d16-3d2c20905814", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Wesley", - "company": "iOptystix", - "phone": "897-458-3262", - "email": "makayla@ioptystix.com" - }, - { - "id": 379, - "guid": "394c0a8d-68c5-442d-aae1-f5c36f67c47f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Croftoon", - "company": "Netseco", - "phone": "836-560-2066", - "email": "trinity@netseco.com" - }, - { - "id": 380, - "guid": "d1e60eb5-87da-4405-ad04-1d3a38962398", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Carey", - "company": "Orthomedia", - "phone": "852-451-3592", - "email": "amelia@orthomedia.com" - }, - { - "id": 381, - "guid": "1e8748ff-85fb-4236-abf6-aeb4b5b15f51", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Otis", - "company": "Techtron", - "phone": "866-561-2831", - "email": "evelyn@techtron.com" - }, - { - "id": 382, - "guid": "8e51bc1f-5cfe-4373-a9cb-56eebf35b81d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Chapman", - "company": "Infragraph", - "phone": "834-454-2738", - "email": "natalie@infragraph.com" - }, - { - "id": 383, - "guid": "0373dc6b-9253-4794-9d09-d990de9cdccf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Wood", - "company": "Westtomik", - "phone": "894-515-4000", - "email": "sophie@westtomik.com" - }, - { - "id": 384, - "guid": "e13b3fe8-2df6-47da-b12b-f470a52cbedd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Wayne", - "company": "Safetrust", - "phone": "836-481-3693", - "email": "trinity@safetrust.com" - }, - { - "id": 385, - "guid": "a8df06d8-ccf9-4721-82bf-684bbb5dc5ad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Davidson", - "company": "SysUSA", - "phone": "887-420-2849", - "email": "kimberly@sysusa.com" - }, - { - "id": 386, - "guid": "1b61680b-67a8-4000-84fa-37787f049d9c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Nathan", - "company": "Jamconik", - "phone": "847-508-3052", - "email": "serenity@jamconik.com" - }, - { - "id": 387, - "guid": "0e5c87cf-350e-45d2-b82f-c16abe26d0f1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Gill", - "company": "Titanirola", - "phone": "868-477-3171", - "email": "camila@titanirola.com" - }, - { - "id": 388, - "guid": "641c840e-eb94-4c94-af3e-0ec8f9db99c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Gilbert", - "company": "Mescatron", - "phone": "805-413-2126", - "email": "taylor@mescatron.com" - }, - { - "id": 389, - "guid": "dcd25273-8c52-409f-a18c-fd4d5b002379", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ariana Charlson", - "company": "Techtron", - "phone": "824-402-2607", - "email": "ariana@techtron.com" - }, - { - "id": 390, - "guid": "5d8402e0-596c-48e7-ad26-89955f45ba8f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Hoggarth", - "company": "Steganoconiche", - "phone": "853-489-2260", - "email": "brooke@steganoconiche.com" - }, - { - "id": 391, - "guid": "0dec5f1f-1e36-4c08-99a6-b742f8385c36", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ava Gustman", - "company": "Indisco", - "phone": "846-502-2886", - "email": "ava@indisco.com" - }, - { - "id": 392, - "guid": "2038a5b8-8595-4253-bf88-1c34e195e59a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Gill", - "company": "Anaframe", - "phone": "817-495-2707", - "email": "serenity@anaframe.com" - }, - { - "id": 393, - "guid": "b8144a2c-dcff-4f27-9117-da374346a60e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Higgins", - "company": "US Omnigraphik", - "phone": "833-475-3830", - "email": "grace@us omnigraphik.com" - }, - { - "id": 394, - "guid": "3628c2ba-99bd-46d6-ac3e-41c02f410384", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Waller", - "company": "Orthosoft", - "phone": "868-520-3063", - "email": "sofia@orthosoft.com" - }, - { - "id": 395, - "guid": "2ae44c71-3700-4e34-aa23-eff71c4d9d6f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Wayne", - "company": "iMedconik", - "phone": "867-532-3326", - "email": "ariana@imedconik.com" - }, - { - "id": 396, - "guid": "ebc7b661-53d7-4ff9-942e-255eb0864a0e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mackenzie Carter", - "company": "Conotomics", - "phone": "895-525-3606", - "email": "mackenzie@conotomics.com" - }, - { - "id": 397, - "guid": "4b8a5ae8-46cf-4b8a-9223-edb360c87ab7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Chapman", - "company": "Gigaura", - "phone": "835-406-2051", - "email": "audrey@gigaura.com" - }, - { - "id": 398, - "guid": "0ce372c7-2b12-4fb2-82a6-69b75b7fe2e8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Abramson", - "company": "Entcast", - "phone": "818-542-2724", - "email": "eva@entcast.com" - }, - { - "id": 399, - "guid": "dafb19a7-a430-492b-9ee1-d4761efc7f1a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Payton White", - "company": "Fibrotopia", - "phone": "880-460-2931", - "email": "payton@fibrotopia.com" - }, - { - "id": 400, - "guid": "5b8dcf85-f1d9-475c-ae95-6400eb0df8f0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Brickman", - "company": "eEyetanic", - "phone": "806-590-3580", - "email": "gabrielle@eeyetanic.com" - }, - { - "id": 401, - "guid": "0625684d-d38b-4006-94e1-5659cb2882fa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Vanessa Winter", - "company": "RoboAerlogix", - "phone": "808-596-3997", - "email": "vanessa@roboaerlogix.com" - }, - { - "id": 402, - "guid": "e38dd7e8-5525-47bb-b1a6-be7ae9f6df1d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth White", - "company": "Quintegrity", - "phone": "803-482-3837", - "email": "elizabeth@quintegrity.com" - }, - { - "id": 403, - "guid": "d5f6616a-c25f-44d8-8412-9911f73fe8b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Brickman", - "company": "Raylog", - "phone": "875-571-3360", - "email": "jessica@raylog.com" - }, - { - "id": 404, - "guid": "4b5f1484-4ea7-481b-a8ae-3c5e7288a640", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Young", - "company": "Robotemplate", - "phone": "884-483-3018", - "email": "hailey@robotemplate.com" - }, - { - "id": 405, - "guid": "e6ed58f0-2b25-43a3-af30-2480b77cb52a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Hardman", - "company": "Multitiqua", - "phone": "809-412-2206", - "email": "brooklyn@multitiqua.com" - }, - { - "id": 406, - "guid": "29d7bee8-128c-4d49-a219-2a55b64e54d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Nash", - "company": "Generola", - "phone": "892-564-2357", - "email": "jessica@generola.com" - }, - { - "id": 407, - "guid": "b1df64e0-50de-4658-b656-18a3e7a1dceb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Day", - "company": "Conotomics", - "phone": "835-560-2979", - "email": "abigail@conotomics.com" - }, - { - "id": 408, - "guid": "87367e00-1a71-49d5-a54f-12a92aa99a9a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Oldridge", - "company": "Venconix", - "phone": "802-578-2948", - "email": "lillian@venconix.com" - }, - { - "id": 409, - "guid": "add537f1-19ba-4503-9e34-73334321a489", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Paige Hoggarth", - "company": "Technogra", - "phone": "880-538-2215", - "email": "paige@technogra.com" - }, - { - "id": 410, - "guid": "692278f2-deb5-4dd0-9714-76d60c47f758", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Youmans", - "company": "iOptystix", - "phone": "830-567-3308", - "email": "angelina@ioptystix.com" - }, - { - "id": 411, - "guid": "40d016f3-4b93-4fe1-b459-c6606bbe31e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Abramson", - "company": "Unologic", - "phone": "811-575-3319", - "email": "nevaeh@unologic.com" - }, - { - "id": 412, - "guid": "bd79db95-1095-4556-9d42-60cd3a5e4483", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke Croftoon", - "company": "Superscope", - "phone": "879-402-3283", - "email": "brooke@superscope.com" - }, - { - "id": 413, - "guid": "ee144144-0995-4326-a912-7d5e237854ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Oliver", - "company": "Fibrotouch", - "phone": "860-553-2954", - "email": "samantha@fibrotouch.com" - }, - { - "id": 414, - "guid": "d2a1782f-6fa9-4259-80e4-efb45886c5af", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Olivia Hodges", - "company": "Truetomic", - "phone": "806-588-3662", - "email": "olivia@truetomic.com" - }, - { - "id": 415, - "guid": "a69b93f5-d9b7-4a5c-9a66-d86fae29440a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Warren", - "company": "Conrama", - "phone": "873-463-2360", - "email": "kaitlyn@conrama.com" - }, - { - "id": 416, - "guid": "0f38790f-bcc2-4890-a640-bbca66a6b480", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace Turner", - "company": "Westmedia", - "phone": "850-543-3766", - "email": "grace@westmedia.com" - }, - { - "id": 417, - "guid": "83bf014c-9e9c-41a9-b55b-932434db499d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Gate", - "company": "Robotomic", - "phone": "859-449-2102", - "email": "khloe@robotomic.com" - }, - { - "id": 418, - "guid": "d145ff16-0a7b-4658-bec2-e99881ab5c8c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Stanley", - "company": "Fibrotopia", - "phone": "868-487-2198", - "email": "khloe@fibrotopia.com" - }, - { - "id": 419, - "guid": "f4d3ff05-0021-4104-b6d6-c816041d30c8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Molligan", - "company": "Allnet", - "phone": "875-555-3634", - "email": "allison@allnet.com" - }, - { - "id": 420, - "guid": "d5d5b5ab-fbcd-41e5-b517-fd83c2d2d46c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Campbell", - "company": "Airdyne", - "phone": "842-433-3681", - "email": "kylie@airdyne.com" - }, - { - "id": 421, - "guid": "75ef5e96-98fb-4399-95d5-284fda7d25c4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Brooks", - "company": "Allnet", - "phone": "822-402-3774", - "email": "amelia@allnet.com" - }, - { - "id": 422, - "guid": "4c07f3d9-0696-4d7c-9fd5-8644683b7ec8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Gilson", - "company": "Aprama", - "phone": "856-566-2331", - "email": "emily@aprama.com" - }, - { - "id": 423, - "guid": "dfe89521-b0b2-4115-90ce-43551d008ef3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Olivia Thorndike", - "company": "US Omnigraphik", - "phone": "869-473-3241", - "email": "olivia@us omnigraphik.com" - }, - { - "id": 424, - "guid": "bb4bb4a7-ac95-4c73-9b0f-1ced1e13dbe7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Hawkins", - "company": "Inridium", - "phone": "825-457-3522", - "email": "valeria@inridium.com" - }, - { - "id": 425, - "guid": "ba038332-ba32-45bd-b236-45cbf4ef9d8e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Nash", - "company": "Thermotomic", - "phone": "825-449-3859", - "email": "mya@thermotomic.com" - }, - { - "id": 426, - "guid": "ae9bb7d3-480c-434b-b717-374395821d09", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madison Wayne", - "company": "Mescaridic", - "phone": "807-447-2648", - "email": "madison@mescaridic.com" - }, - { - "id": 427, - "guid": "f3c4f9a5-fe3e-4dd2-a6eb-1de281816574", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Vance", - "company": "Titanigraf", - "phone": "896-565-2378", - "email": "lily@titanigraf.com" - }, - { - "id": 428, - "guid": "8a621024-1c9a-471c-8349-f50d67385c0f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Adamson", - "company": "Dynarama", - "phone": "890-414-3370", - "email": "madison@dynarama.com" - }, - { - "id": 429, - "guid": "6c9b6a26-68b5-4f2c-bd84-c3ecb3fabc60", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava Miln", - "company": "Tekcar", - "phone": "856-557-2844", - "email": "ava@tekcar.com" - }, - { - "id": 430, - "guid": "abe4d2eb-5a58-4219-ba4f-b7d61fc9637b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Cook", - "company": "Textiqua", - "phone": "864-493-2340", - "email": "layla@textiqua.com" - }, - { - "id": 431, - "guid": "70855fe0-0853-4f5d-97e9-50fe7a0020c5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Cook", - "company": "Xeicon", - "phone": "869-501-3259", - "email": "lily@xeicon.com" - }, - { - "id": 432, - "guid": "ed31861b-573d-4258-95f2-b3545c8aea38", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Gilson", - "company": "Multitiqua", - "phone": "847-571-3894", - "email": "faith@multitiqua.com" - }, - { - "id": 433, - "guid": "692e5fd7-e646-46e4-a3bf-56cdd377c987", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace White", - "company": "Transtouch", - "phone": "805-420-3543", - "email": "grace@transtouch.com" - }, - { - "id": 434, - "guid": "5faa9473-8526-43e6-b9f2-7f88f3cf4b0c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Turner", - "company": "Rapigrafix", - "phone": "887-522-2793", - "email": "molly@rapigrafix.com" - }, - { - "id": 435, - "guid": "441c3b03-1f27-4a34-b289-0b00106de34c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabelle Smith", - "company": "Anaframe", - "phone": "868-564-2620", - "email": "isabelle@anaframe.com" - }, - { - "id": 436, - "guid": "125389ab-199e-48c3-9dd9-0020026be4d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Abigail Calhoun", - "company": "Nanobanc", - "phone": "839-558-2818", - "email": "abigail@nanobanc.com" - }, - { - "id": 437, - "guid": "f8c95546-b526-40bf-b107-1e64db11400b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Hamphrey", - "company": "Systheon", - "phone": "822-501-2041", - "email": "kylie@systheon.com" - }, - { - "id": 438, - "guid": "b8775c8f-decc-44b0-872f-9b45689d0a18", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Creighton", - "company": "Cryptotegrity", - "phone": "880-465-3822", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 439, - "guid": "a0d0b914-c549-42e6-bc5a-f6b53f0305cd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Carter", - "company": "Interliant", - "phone": "863-400-2782", - "email": "amelia@interliant.com" - }, - { - "id": 440, - "guid": "8b628975-0e81-4460-8d36-fa7bfceba795", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ashley Brooks", - "company": "US Infratouch", - "phone": "876-585-2185", - "email": "ashley@us infratouch.com" - }, - { - "id": 441, - "guid": "1b512a09-9293-414a-9a32-50d66353a6bb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Stanley", - "company": "Netsystems", - "phone": "804-589-3867", - "email": "savannah@netsystems.com" - }, - { - "id": 442, - "guid": "7be7cefb-6d15-4b78-a71a-6d00b514947e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Gate", - "company": "SysVenamerica", - "phone": "819-481-2373", - "email": "samantha@sysvenamerica.com" - }, - { - "id": 443, - "guid": "a3c31505-88d8-4445-b81a-ef5a8de803a4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Paige Owen", - "company": "Navivacs", - "phone": "839-513-3540", - "email": "paige@navivacs.com" - }, - { - "id": 444, - "guid": "6bead047-56f6-4fc5-bcdb-5e93c414ec59", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Chesterton", - "company": "Robotemplate", - "phone": "874-446-3096", - "email": "gabrielle@robotemplate.com" - }, - { - "id": 445, - "guid": "597bcdce-322d-44ab-b608-6ffb0361fbde", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Carter", - "company": "Xeicon", - "phone": "846-467-2443", - "email": "autumn@xeicon.com" - }, - { - "id": 446, - "guid": "1979b325-a593-49d7-9b19-b199fb882a88", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Makayla Hailey", - "company": "iQualcar", - "phone": "860-469-3354", - "email": "makayla@iqualcar.com" - }, - { - "id": 447, - "guid": "ab970628-f8bb-4c5f-9c30-4e11148f18c4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Ford", - "company": "Keytheon", - "phone": "845-537-2791", - "email": "melanie@keytheon.com" - }, - { - "id": 448, - "guid": "d19a0034-2ce2-46d9-8b59-ed328cbfaddd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Wesley", - "company": "Mescatron", - "phone": "873-512-3916", - "email": "alexandra@mescatron.com" - }, - { - "id": 449, - "guid": "92fc61d7-5976-47d6-b71c-8d59f2b6092e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Higgins", - "company": "Robocomm", - "phone": "839-531-3446", - "email": "morgan@robocomm.com" - }, - { - "id": 450, - "guid": "dc3ce3c8-9ab0-4e93-bb7c-1dadc554bafb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Carroll", - "company": "Robotemplate", - "phone": "810-507-3670", - "email": "avery@robotemplate.com" - }, - { - "id": 451, - "guid": "a7d8d296-c57d-4f88-80c9-88d9c453e8da", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kayla Freeman", - "company": "Syssoft", - "phone": "848-447-2376", - "email": "kayla@syssoft.com" - }, - { - "id": 452, - "guid": "9c808ff3-d02a-4978-88c7-c729dd3e12ec", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Wesley", - "company": "Polytheon", - "phone": "828-519-3725", - "email": "alexis@polytheon.com" - }, - { - "id": 453, - "guid": "00f73b9c-942e-407c-8239-20366114e918", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Gustman", - "company": "Sontopia", - "phone": "853-590-3259", - "email": "alexis@sontopia.com" - }, - { - "id": 454, - "guid": "52f2e8ea-f65a-44d0-a985-695c94301dd4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Turner", - "company": "Titanigraf", - "phone": "801-582-3673", - "email": "evelyn@titanigraf.com" - }, - { - "id": 455, - "guid": "d4de6e85-e788-48dc-b340-5a704cd72b2a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Daniels", - "company": "Proline", - "phone": "809-443-2588", - "email": "addison@proline.com" - }, - { - "id": 456, - "guid": "85a3906c-9949-473a-a04e-af0cd84e11a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Clapton", - "company": "Gigaura", - "phone": "801-429-2131", - "email": "charlotte@gigaura.com" - }, - { - "id": 457, - "guid": "e682ff2a-c877-4a05-9483-3dc541af3cc7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Carey", - "company": "Airdyne", - "phone": "834-505-2464", - "email": "rachel@airdyne.com" - }, - { - "id": 458, - "guid": "695615a3-e1ae-43f0-b427-a00e680dfc3e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Miln", - "company": "Sontopia", - "phone": "842-583-2066", - "email": "rachel@sontopia.com" - }, - { - "id": 459, - "guid": "5c7ca476-5463-48cb-a10f-49cf783df7cd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Wallace", - "company": "Vencom", - "phone": "873-593-2359", - "email": "melanie@vencom.com" - }, - { - "id": 460, - "guid": "8179b25d-3510-49f1-a92f-96e078b0845a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Savannah Daniels", - "company": "Robotomic", - "phone": "883-421-3681", - "email": "savannah@robotomic.com" - }, - { - "id": 461, - "guid": "f2ee0ba4-1e17-476b-9815-578952f20386", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Warren", - "company": "Aprama", - "phone": "889-447-2581", - "email": "hannah@aprama.com" - }, - { - "id": 462, - "guid": "d1f0570c-0bf4-463e-8c19-e9fc227ec02b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Owen", - "company": "Sontopia", - "phone": "838-591-2162", - "email": "payton@sontopia.com" - }, - { - "id": 463, - "guid": "24542ede-4b25-4149-937b-2155cdc218ac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Thornton", - "company": "Mescatron", - "phone": "864-518-2058", - "email": "victoria@mescatron.com" - }, - { - "id": 464, - "guid": "c51b43cc-92a1-43d0-8427-9b26c78701b5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Neal", - "company": "Safetrust", - "phone": "882-562-2965", - "email": "mackenzie@safetrust.com" - }, - { - "id": 465, - "guid": "f611a7e0-e7bb-48e8-b15e-ecfb912d4ba4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Chandter", - "company": "Quintegrity", - "phone": "829-446-3303", - "email": "mariah@quintegrity.com" - }, - { - "id": 466, - "guid": "4e29850f-4648-4f2b-a37c-facd3985113a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Gardner", - "company": "US Infratouch", - "phone": "888-582-3564", - "email": "audrey@us infratouch.com" - }, - { - "id": 467, - "guid": "91aeb5f6-e0f0-4869-993e-13c75a57f7b8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Hodges", - "company": "Venconix", - "phone": "853-445-2839", - "email": "savannah@venconix.com" - }, - { - "id": 468, - "guid": "53d31bc8-24f0-4662-9641-b820880925a9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Michaelson", - "company": "Vencom", - "phone": "824-424-3302", - "email": "payton@vencom.com" - }, - { - "id": 469, - "guid": "cf9c2d42-8441-45d0-aed5-0b0b2d04b094", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Abramson", - "company": "eSteganoergy", - "phone": "856-442-3523", - "email": "alyssa@esteganoergy.com" - }, - { - "id": 470, - "guid": "1a29979e-e8ca-43aa-9cc8-8133e679371d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Brickman", - "company": "Teknoplexon", - "phone": "884-537-3757", - "email": "addison@teknoplexon.com" - }, - { - "id": 471, - "guid": "ca6cc7e2-ac2d-460e-8673-e0ca858d1f4e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Crossman", - "company": "Inridium", - "phone": "887-521-3201", - "email": "jessica@inridium.com" - }, - { - "id": 472, - "guid": "132b9aa1-67e9-4118-a363-f713e84e4765", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Hailey", - "company": "Multitiqua", - "phone": "834-518-2783", - "email": "jasmine@multitiqua.com" - }, - { - "id": 473, - "guid": "2aa6043d-8873-4369-ba60-739ee4d15891", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Hawkins", - "company": "Syssoft", - "phone": "848-495-3404", - "email": "grace@syssoft.com" - }, - { - "id": 474, - "guid": "5eb6483b-7fe2-4a42-9df4-d08b88bc4088", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Neal", - "company": "Hypervaco", - "phone": "871-573-3690", - "email": "mackenzie@hypervaco.com" - }, - { - "id": 475, - "guid": "4b77dbea-b95e-4393-bf1d-ad2b2bc5a5f0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Murphy", - "company": "Truegate", - "phone": "803-411-2490", - "email": "camila@truegate.com" - }, - { - "id": 476, - "guid": "2f2bab9b-f6c6-4968-aadd-bf032325b938", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Charlson", - "company": "Venconix", - "phone": "877-464-3818", - "email": "layla@venconix.com" - }, - { - "id": 477, - "guid": "d5ac04d2-9207-4757-a87f-440eb14e41a1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Waller", - "company": "iEnland", - "phone": "834-458-3877", - "email": "hannah@ienland.com" - }, - { - "id": 478, - "guid": "398ddfec-7c7c-4e7e-81a3-66af4a8d8dc7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sarah Oswald", - "company": "US Omnigraphik", - "phone": "846-452-3998", - "email": "sarah@us omnigraphik.com" - }, - { - "id": 479, - "guid": "c8c98f10-e9c3-4d58-a868-f5d457b8ba40", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Melanie Nelson", - "company": "Mescaridic", - "phone": "857-487-2010", - "email": "melanie@mescaridic.com" - }, - { - "id": 480, - "guid": "fea818cf-cf0a-423e-9cc0-2d0ace06f3b5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Gardner", - "company": "Celgra", - "phone": "862-438-3821", - "email": "bailey@celgra.com" - }, - { - "id": 481, - "guid": "5f909f24-5798-4c69-bd6d-1188c9ec8793", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Gate", - "company": "Hypervaco", - "phone": "810-498-3184", - "email": "isabella@hypervaco.com" - }, - { - "id": 482, - "guid": "af61e0ce-4cb0-4fe6-88e0-fce5f85d6559", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Goodman", - "company": "InfoAirway", - "phone": "876-425-2230", - "email": "gabrielle@infoairway.com" - }, - { - "id": 483, - "guid": "2d63210c-626c-412b-8797-a5d316c74602", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Gilbert", - "company": "Compuamerica", - "phone": "805-535-2770", - "email": "vanessa@compuamerica.com" - }, - { - "id": 484, - "guid": "a48d2db9-b007-4c63-8063-e0c9bf69aa9e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Murphy", - "company": "Mescatron", - "phone": "896-548-3312", - "email": "kaitlyn@mescatron.com" - }, - { - "id": 485, - "guid": "36604beb-89d1-4c29-8147-5fff8d778544", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Conors", - "company": "Polytheon", - "phone": "872-446-3992", - "email": "mya@polytheon.com" - }, - { - "id": 486, - "guid": "0ba23415-cbae-4c49-9d0f-5b90bab00739", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Cook", - "company": "Technogra", - "phone": "839-590-3647", - "email": "gianna@technogra.com" - }, - { - "id": 487, - "guid": "b3fc191b-9ffb-44b6-95f9-9ac849756980", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Michaelson", - "company": "Jamrola", - "phone": "870-507-2785", - "email": "kaitlyn@jamrola.com" - }, - { - "id": 488, - "guid": "03dc11a2-d786-4f2b-97fc-13cb15ae794d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Gill", - "company": "Idmax", - "phone": "879-457-2544", - "email": "rachel@idmax.com" - }, - { - "id": 489, - "guid": "cb850818-1e15-4d22-ab81-dfb5c263e7d2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Conors", - "company": "Conotomics", - "phone": "845-569-2300", - "email": "peyton@conotomics.com" - }, - { - "id": 490, - "guid": "2a30a63d-8d26-4a91-bc74-cac5378768d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Watson", - "company": "Westmedia", - "phone": "860-502-2094", - "email": "andrea@westmedia.com" - }, - { - "id": 491, - "guid": "fa6d7cea-3bbd-4477-9819-c81a86fd192d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Miers", - "company": "Teratopia", - "phone": "810-556-3543", - "email": "avery@teratopia.com" - }, - { - "id": 492, - "guid": "13f3ce14-6621-4aa9-8586-9b8ae3571e18", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Miers", - "company": "Vencom", - "phone": "881-599-3956", - "email": "mariah@vencom.com" - }, - { - "id": 493, - "guid": "bbae3ea8-d18a-4df9-b25d-5dfb68d25a0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Goldman", - "company": "Orthosoft", - "phone": "887-473-3712", - "email": "layla@orthosoft.com" - }, - { - "id": 494, - "guid": "46d931e8-e207-4f8d-b0e1-a215b0e065ce", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Wesley", - "company": "Venconix", - "phone": "885-565-3629", - "email": "olivia@venconix.com" - }, - { - "id": 495, - "guid": "7979ef16-22f6-4b70-aa00-120dd5ca70fd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Crossman", - "company": "Truetomic", - "phone": "842-408-2786", - "email": "brooke@truetomic.com" - }, - { - "id": 496, - "guid": "c22a6697-c8cf-409c-84a5-31fa89af7bca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Winter", - "company": "Mescaridic", - "phone": "826-582-2290", - "email": "kaitlyn@mescaridic.com" - }, - { - "id": 497, - "guid": "289a4916-0446-4d9c-a841-b8858249f05c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Haig", - "company": "Syssoft", - "phone": "873-507-2485", - "email": "trinity@syssoft.com" - }, - { - "id": 498, - "guid": "adb7029b-8134-497c-8b01-d277c153661e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Croftoon", - "company": "Tekcar", - "phone": "818-536-3470", - "email": "kaitlyn@tekcar.com" - }, - { - "id": 499, - "guid": "f3b55543-2aa8-4a09-9572-c4d4ba7b99b6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Gilmore", - "company": "Teknoplexon", - "phone": "800-488-3520", - "email": "eva@teknoplexon.com" - }, - { - "id": 500, - "guid": "a1677b6a-c470-469b-a5de-5c9c05f95191", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Chandter", - "company": "Infragraph", - "phone": "862-531-3617", - "email": "sydney@infragraph.com" - }, - { - "id": 501, - "guid": "23c77f95-5ec6-464d-b26c-d9dd2a890dd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Waller", - "company": "Robocomm", - "phone": "822-505-2926", - "email": "molly@robocomm.com" - }, - { - "id": 502, - "guid": "ba6f826f-4ffa-4ac8-8305-8e1db489a5be", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Hodges", - "company": "Skydata", - "phone": "820-587-2001", - "email": "natalie@skydata.com" - }, - { - "id": 503, - "guid": "70fbd3ea-7b01-4646-a5d2-aabc9517595a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Gibbs", - "company": "RoboAerlogix", - "phone": "834-546-3385", - "email": "allison@roboaerlogix.com" - }, - { - "id": 504, - "guid": "7ddcb51e-7f07-44b1-914e-6a974b8feeff", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Wainwright", - "company": "InfoAirway", - "phone": "862-460-3946", - "email": "kimberly@infoairway.com" - }, - { - "id": 505, - "guid": "44a4dd81-12c4-4f27-825c-efab2378fbd7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Thorndike", - "company": "Robotemplate", - "phone": "876-456-3978", - "email": "serenity@robotemplate.com" - }, - { - "id": 506, - "guid": "cf1bcb18-d68d-4941-b2bc-cef8c3b4604a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Chapman", - "company": "Truetomic", - "phone": "867-588-3216", - "email": "audrey@truetomic.com" - }, - { - "id": 507, - "guid": "f60b5460-54b8-42d5-9ecb-0bcf4ac0956f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Autumn Gustman", - "company": "Robocomm", - "phone": "848-475-2231", - "email": "autumn@robocomm.com" - }, - { - "id": 508, - "guid": "517f344f-ddd2-44d3-a515-488aac7c2cb4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Watson", - "company": "Turbomart", - "phone": "838-463-2017", - "email": "lillian@turbomart.com" - }, - { - "id": 509, - "guid": "56e09e17-788c-4f6e-a079-a1afe41b2082", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Miln", - "company": "Indisco", - "phone": "852-474-2185", - "email": "hannah@indisco.com" - }, - { - "id": 510, - "guid": "61d04d36-b37c-4bc3-ab90-848aadb01602", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Youmans", - "company": "Robocomm", - "phone": "851-589-3399", - "email": "brianna@robocomm.com" - }, - { - "id": 511, - "guid": "58ca32d1-96f5-4383-9d59-3ad5d5055b00", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Mercer", - "company": "Ventanium", - "phone": "884-493-3750", - "email": "maria@ventanium.com" - }, - { - "id": 512, - "guid": "20862d3e-1d09-47b5-bd2c-48b23fa39ecf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Owen", - "company": "Westmedia", - "phone": "833-448-3217", - "email": "victoria@westmedia.com" - }, - { - "id": 513, - "guid": "c0f519b5-d6bc-4296-af6b-78b4bf8ea93b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Gilmore", - "company": "Superscope", - "phone": "860-489-3781", - "email": "claire@superscope.com" - }, - { - "id": 514, - "guid": "b056b0e1-91a9-46b9-ac83-8e0264fb26c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Hamphrey", - "company": "Sontopia", - "phone": "877-408-3292", - "email": "kaylee@sontopia.com" - }, - { - "id": 515, - "guid": "541f24e9-4617-4e2d-b446-56224a231e1c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Paige Carey", - "company": "Unologic", - "phone": "830-425-3285", - "email": "paige@unologic.com" - }, - { - "id": 516, - "guid": "a59b2209-f18b-4f2b-bc59-7561c9fe49d9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katelyn Nathan", - "company": "Polytheon", - "phone": "813-596-2157", - "email": "katelyn@polytheon.com" - }, - { - "id": 517, - "guid": "b4d7399e-4aff-4201-96ac-7f8d259d428f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Chapman", - "company": "Infragraph", - "phone": "816-515-2813", - "email": "kylie@infragraph.com" - }, - { - "id": 518, - "guid": "1b96d6e5-7c53-4044-a537-4ad52b6aee00", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Webster", - "company": "Cryptotemplate", - "phone": "818-562-2081", - "email": "rachel@cryptotemplate.com" - }, - { - "id": 519, - "guid": "a84411f7-d783-445c-8551-83e14b892b4b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Oliver", - "company": "Cryptotemplate", - "phone": "815-555-3039", - "email": "alexis@cryptotemplate.com" - }, - { - "id": 520, - "guid": "f24b3d1b-4d0f-44a5-8fa3-76a5146509a9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Warren", - "company": "Unconix", - "phone": "812-497-2280", - "email": "melanie@unconix.com" - }, - { - "id": 521, - "guid": "34193036-9bf6-4331-a2fe-4608fb4cd325", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Oldman", - "company": "Venconix", - "phone": "817-423-3565", - "email": "rachel@venconix.com" - }, - { - "id": 522, - "guid": "b784b550-fb0d-4955-b72c-9930d9b129cf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Nathan", - "company": "Unologic", - "phone": "844-422-3127", - "email": "brianna@unologic.com" - }, - { - "id": 523, - "guid": "f19d9641-655d-4060-a2e3-dae0f6568a3c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney Nash", - "company": "Techtron", - "phone": "897-540-3129", - "email": "sydney@techtron.com" - }, - { - "id": 524, - "guid": "fabfda42-d176-4420-a540-c42f9e01b20c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hailey Webster", - "company": "Netsystems", - "phone": "825-491-3156", - "email": "hailey@netsystems.com" - }, - { - "id": 525, - "guid": "205e8273-e4ff-4714-b3fa-cd2b50f19b94", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Oliver", - "company": "Unconix", - "phone": "881-530-2339", - "email": "autumn@unconix.com" - }, - { - "id": 526, - "guid": "706fb163-12ba-481c-bf2b-7267bd89c98e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Campbell", - "company": "Conotomics", - "phone": "896-573-2401", - "email": "faith@conotomics.com" - }, - { - "id": 527, - "guid": "a3d38524-3827-42b4-931f-8f71b9d9ed84", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Thornton", - "company": "Anaframe", - "phone": "807-555-2156", - "email": "emily@anaframe.com" - }, - { - "id": 528, - "guid": "323fd188-b7d8-4859-afdb-87a6ef0b81e7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Davidson", - "company": "Indisco", - "phone": "835-439-3755", - "email": "aaliyah@indisco.com" - }, - { - "id": 529, - "guid": "4d02e619-3f1d-4246-befb-f0a320e39e56", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Michaelson", - "company": "Safeagra", - "phone": "863-513-2224", - "email": "layla@safeagra.com" - }, - { - "id": 530, - "guid": "98886127-1236-4946-bed1-cea6fb3ab87e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Osborne", - "company": "Unconix", - "phone": "836-508-3580", - "email": "julia@unconix.com" - }, - { - "id": 531, - "guid": "1673822d-b6c0-4e01-918e-41d2e28836b7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Walkman", - "company": "Qualserve", - "phone": "838-534-2407", - "email": "victoria@qualserve.com" - }, - { - "id": 532, - "guid": "904bb087-7fc6-4f68-980e-fdd41cbb9b83", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Chandter", - "company": "iMedconik", - "phone": "846-538-2779", - "email": "natalie@imedconik.com" - }, - { - "id": 533, - "guid": "80497c4b-99eb-4731-997b-ce3dbbd3690e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley Carter", - "company": "Anagraph", - "phone": "883-575-2149", - "email": "ashley@anagraph.com" - }, - { - "id": 534, - "guid": "ffdc2ec0-0b02-43b9-9805-82da7b5aace5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Wayne", - "company": "iMedconik", - "phone": "802-432-2773", - "email": "allison@imedconik.com" - }, - { - "id": 535, - "guid": "028ba322-dc34-4f77-9bde-96a03a3ccdb0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Waller", - "company": "Transtouch", - "phone": "887-564-2074", - "email": "samantha@transtouch.com" - }, - { - "id": 536, - "guid": "3514c268-41b6-4962-84b5-63da4f3a42d3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Taylor Young", - "company": "iEnland", - "phone": "899-551-2661", - "email": "taylor@ienland.com" - }, - { - "id": 537, - "guid": "68a31a6e-b66a-411e-acbd-f0f8e4729353", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Higgins", - "company": "Enlogia", - "phone": "870-490-3400", - "email": "isabella@enlogia.com" - }, - { - "id": 538, - "guid": "5d1d8c72-1a89-4519-9178-d5447d5fa74d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Brooks", - "company": "eEyetanic", - "phone": "818-549-3041", - "email": "aaliyah@eeyetanic.com" - }, - { - "id": 539, - "guid": "a83ba736-a2c7-4468-86b5-e0d1397afbd7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Adamson", - "company": "Fibrotouch", - "phone": "879-479-3438", - "email": "sophie@fibrotouch.com" - }, - { - "id": 540, - "guid": "108fadda-5e61-4b8d-a231-cc9ba89ae1f0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Michaelson", - "company": "Transtouch", - "phone": "860-586-3606", - "email": "gabrielle@transtouch.com" - }, - { - "id": 541, - "guid": "0dc2bf93-ad8b-41df-9a66-a1795c84ae24", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Gill", - "company": "Dynarama", - "phone": "861-493-2129", - "email": "khloe@dynarama.com" - }, - { - "id": 542, - "guid": "6c6da50f-a16c-48bf-9266-c5705422b937", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Morrison", - "company": "eSteganoergy", - "phone": "884-559-3382", - "email": "allison@esteganoergy.com" - }, - { - "id": 543, - "guid": "528e332d-728f-405e-a0c2-17a3f58e8d13", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Gerald", - "company": "Aprama", - "phone": "804-432-2090", - "email": "ava@aprama.com" - }, - { - "id": 544, - "guid": "6ba458a9-372c-443b-964d-6320e065226f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Miers", - "company": "SysVenamerica", - "phone": "872-543-3125", - "email": "elizabeth@sysvenamerica.com" - }, - { - "id": 545, - "guid": "27f846b9-b960-43f2-b5eb-8230ea32c56b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Wallace", - "company": "iSkyvaco", - "phone": "806-522-3546", - "email": "avery@iskyvaco.com" - }, - { - "id": 546, - "guid": "fe0163da-82ac-4f58-8849-0a37341d4331", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Owen", - "company": "Steganoconiche", - "phone": "843-594-3751", - "email": "serenity@steganoconiche.com" - }, - { - "id": 547, - "guid": "03b3aa29-d724-4999-be7c-37b37b673cc6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Miller", - "company": "Ameritron", - "phone": "898-443-3142", - "email": "lauren@ameritron.com" - }, - { - "id": 548, - "guid": "a4be1b9f-dc38-4ea1-aae4-79afc6598a93", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Gerald", - "company": "Interliant", - "phone": "879-447-2897", - "email": "taylor@interliant.com" - }, - { - "id": 549, - "guid": "cedba827-b63b-4a07-b061-b913c3a56620", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Abigail Galbraith", - "company": "OpKeycomm", - "phone": "816-551-3320", - "email": "abigail@opkeycomm.com" - }, - { - "id": 550, - "guid": "bbf0b562-724d-439c-9d2d-10839dca17af", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Calhoun", - "company": "Fibrotopia", - "phone": "812-576-3849", - "email": "alexandra@fibrotopia.com" - }, - { - "id": 551, - "guid": "1fb3aef7-1777-44fa-b2d0-d2159f7eb4d0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Turner", - "company": "Titanirola", - "phone": "895-464-2048", - "email": "alexandra@titanirola.com" - }, - { - "id": 552, - "guid": "ddea3a01-0365-4736-8c98-318c36c54c59", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Cook", - "company": "Fibroserve", - "phone": "857-426-3280", - "email": "grace@fibroserve.com" - }, - { - "id": 553, - "guid": "8b3f4970-4d82-48b5-846f-65f73a3f64e3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Ogden", - "company": "Turbomart", - "phone": "887-566-3569", - "email": "jessica@turbomart.com" - }, - { - "id": 554, - "guid": "6d2bdacf-d549-4958-8cab-782607709383", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Carroll", - "company": "Polytheon", - "phone": "849-510-3541", - "email": "emily@polytheon.com" - }, - { - "id": 555, - "guid": "ea6f4c2c-1948-40e0-91cd-16864e5b5900", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Charlson", - "company": "US Infratouch", - "phone": "819-518-2109", - "email": "sofia@us infratouch.com" - }, - { - "id": 556, - "guid": "77f8c626-0e9a-4ad6-9c18-9f646f5c68a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Calhoun", - "company": "Anagraph", - "phone": "882-542-2216", - "email": "peyton@anagraph.com" - }, - { - "id": 557, - "guid": "b7383ee6-089b-4501-aae0-30d44c37466b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Creighton", - "company": "Pericenta", - "phone": "877-550-3813", - "email": "rachel@pericenta.com" - }, - { - "id": 558, - "guid": "855fe66d-ca2d-46a8-b2de-9788fcff8de1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Oliver", - "company": "Safeagra", - "phone": "890-456-3988", - "email": "avery@safeagra.com" - }, - { - "id": 559, - "guid": "53f7a512-70ef-4293-ac74-7594c8570e18", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Oswald", - "company": "Techtron", - "phone": "893-423-3144", - "email": "lauren@techtron.com" - }, - { - "id": 560, - "guid": "c9d1a218-4ccf-43fd-8bed-e1fe6f59b919", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Goldman", - "company": "Airdyne", - "phone": "851-516-2215", - "email": "makayla@airdyne.com" - }, - { - "id": 561, - "guid": "fdff02d4-4646-495c-a830-bc6bfbae2810", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Thorndike", - "company": "Navivacs", - "phone": "840-585-2711", - "email": "peyton@navivacs.com" - }, - { - "id": 562, - "guid": "3196ceed-05a6-4208-b5bf-6ebbf59edf9e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Turner", - "company": "Entcast", - "phone": "810-582-2758", - "email": "alyssa@entcast.com" - }, - { - "id": 563, - "guid": "bbf07988-c0f7-4da3-b664-05e86ad88ba7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Brooks", - "company": "Technogra", - "phone": "865-515-3606", - "email": "mariah@technogra.com" - }, - { - "id": 564, - "guid": "5b4beebe-c287-4448-8518-f079ff7cae79", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Hawkins", - "company": "Textiqua", - "phone": "818-440-3316", - "email": "gianna@textiqua.com" - }, - { - "id": 565, - "guid": "1bdeb691-d717-4dad-a0ba-2c611e966ba8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Carter", - "company": "Pacwest", - "phone": "870-467-2588", - "email": "aaliyah@pacwest.com" - }, - { - "id": 566, - "guid": "64bd6849-6ce8-43c2-85c5-d44f20fce25b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexandra Oldman", - "company": "Pericenta", - "phone": "832-485-2835", - "email": "alexandra@pericenta.com" - }, - { - "id": 567, - "guid": "1caa4564-f1cf-4261-844e-6f242e624a4f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Brown", - "company": "Westtomik", - "phone": "857-582-3341", - "email": "vanessa@westtomik.com" - }, - { - "id": 568, - "guid": "6ac89989-371e-4373-9748-1a79cb928060", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Carey", - "company": "Aluco", - "phone": "814-499-3384", - "email": "payton@aluco.com" - }, - { - "id": 569, - "guid": "ca3832b2-4a7d-4626-b4bc-62c343d26a43", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Neal", - "company": "Aluco", - "phone": "883-506-2911", - "email": "ava@aluco.com" - }, - { - "id": 570, - "guid": "2e9cb467-5ccc-4832-94a5-fed8114dab2b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Grace Walkman", - "company": "Dynarama", - "phone": "863-474-2820", - "email": "grace@dynarama.com" - }, - { - "id": 571, - "guid": "faf7b8d4-c1c6-4408-8236-0095f2d6a1a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Cook", - "company": "Tekcar", - "phone": "813-542-3106", - "email": "trinity@tekcar.com" - }, - { - "id": 572, - "guid": "3de8f5a7-10d7-4443-83bd-87eaae31af47", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Carroll", - "company": "Infragraph", - "phone": "873-452-2053", - "email": "brooklyn@infragraph.com" - }, - { - "id": 573, - "guid": "ccebe7da-8983-442f-9a71-73ee5d859f71", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Calhoun", - "company": "US Infratouch", - "phone": "891-581-2076", - "email": "chloe@us infratouch.com" - }, - { - "id": 574, - "guid": "5d0a309e-85b1-43b8-9227-051e94b0394d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Webster", - "company": "Unconix", - "phone": "893-587-2380", - "email": "alexis@unconix.com" - }, - { - "id": 575, - "guid": "237cf5e5-6fb6-4263-b1ca-148732106850", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Genesis Youmans", - "company": "Aluco", - "phone": "890-400-3912", - "email": "genesis@aluco.com" - }, - { - "id": 576, - "guid": "5df23c70-3586-4b2d-81f1-271dfa11d781", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bailey Wallace", - "company": "Keytheon", - "phone": "895-489-2383", - "email": "bailey@keytheon.com" - }, - { - "id": 577, - "guid": "f047d99c-77b0-4f75-9fad-ae39dda0acb3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Ogden", - "company": "Cryptotemplate", - "phone": "839-462-3196", - "email": "lauren@cryptotemplate.com" - }, - { - "id": 578, - "guid": "f8d65918-7fc0-42fd-b73c-fb46c813a756", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Ogden", - "company": "Truegate", - "phone": "871-522-2695", - "email": "mia@truegate.com" - }, - { - "id": 579, - "guid": "40433d88-c6e8-4d3a-bc7c-89cfec516376", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Hoggarth", - "company": "Techtron", - "phone": "864-442-2414", - "email": "mya@techtron.com" - }, - { - "id": 580, - "guid": "297fae19-6cdc-436a-8062-1160576b2da1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Bush", - "company": "US Infratouch", - "phone": "849-542-3684", - "email": "destiny@us infratouch.com" - }, - { - "id": 581, - "guid": "160044f5-4c92-46ae-a4d6-11900040f2f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabelle Hancock", - "company": "Textiqua", - "phone": "882-518-2198", - "email": "isabelle@textiqua.com" - }, - { - "id": 582, - "guid": "c0654727-9d7f-4bb2-ba7d-43cb526b86a3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Gilson", - "company": "Steganoconiche", - "phone": "824-587-3530", - "email": "taylor@steganoconiche.com" - }, - { - "id": 583, - "guid": "d6cc00f0-fce8-4ddb-aa3e-8d8b056b72c6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Miln", - "company": "Titanigraf", - "phone": "827-594-2290", - "email": "kayla@titanigraf.com" - }, - { - "id": 584, - "guid": "202237b4-e632-4dd2-98f2-58db0c5b12c8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Campbell", - "company": "Aluco", - "phone": "870-482-2726", - "email": "andrea@aluco.com" - }, - { - "id": 585, - "guid": "ecfec946-8c1b-4dbb-bfb0-021c645300a8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Galbraith", - "company": "Westmedia", - "phone": "814-476-2417", - "email": "maya@westmedia.com" - }, - { - "id": 586, - "guid": "ce201adc-4713-43b8-bb41-390d66f8a8c8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Wallace", - "company": "Ameritron", - "phone": "810-414-2188", - "email": "isabelle@ameritron.com" - }, - { - "id": 587, - "guid": "2d1cce98-915b-4472-9043-13ec6f4cc022", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Nelson", - "company": "Pacwest", - "phone": "822-473-2888", - "email": "claire@pacwest.com" - }, - { - "id": 588, - "guid": "1c7934cb-7697-464a-9df1-f502220359f2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Ward", - "company": "Robocomm", - "phone": "844-542-3080", - "email": "brooklyn@robocomm.com" - }, - { - "id": 589, - "guid": "59b15a69-0a2a-47b7-8da3-00bf6ca26b5f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Bush", - "company": "Steganoconiche", - "phone": "857-573-3624", - "email": "ava@steganoconiche.com" - }, - { - "id": 590, - "guid": "0b0d1363-ba1d-43c7-94d6-90277763be98", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Wesley", - "company": "Teraserv", - "phone": "810-466-2909", - "email": "chloe@teraserv.com" - }, - { - "id": 591, - "guid": "1a74802c-eb25-4d9d-a64c-0c707b9b825d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Timmons", - "company": "OpKeycomm", - "phone": "895-467-2157", - "email": "arianna@opkeycomm.com" - }, - { - "id": 592, - "guid": "16dcdb79-e6a5-4068-8509-9b077d548d58", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Daniels", - "company": "Teratopia", - "phone": "859-451-2043", - "email": "isabella@teratopia.com" - }, - { - "id": 593, - "guid": "907862b3-ba58-4d83-abb0-036dc1c97bc4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Wood", - "company": "Generola", - "phone": "830-531-3218", - "email": "mya@generola.com" - }, - { - "id": 594, - "guid": "887b6f1c-646a-440c-b7a1-f0c280a300be", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Hailey", - "company": "Tekcar", - "phone": "868-584-2749", - "email": "molly@tekcar.com" - }, - { - "id": 595, - "guid": "737cd66e-7e35-4274-9a17-60b427e7255d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Hawkins", - "company": "Fibrotopia", - "phone": "842-543-2399", - "email": "melanie@fibrotopia.com" - }, - { - "id": 596, - "guid": "2d835db7-2d33-41ae-b178-65cb93437e7a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Cramer", - "company": "Skydata", - "phone": "800-578-2655", - "email": "gabriella@skydata.com" - }, - { - "id": 597, - "guid": "d014052e-1c1c-4c46-bf8b-e9e4115a1424", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Wesley", - "company": "InfoAirway", - "phone": "839-553-2410", - "email": "isabelle@infoairway.com" - }, - { - "id": 598, - "guid": "334a54da-bafd-47f5-b45a-58e93bd86040", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Freeman", - "company": "US Omnigraphik", - "phone": "823-478-2753", - "email": "brianna@us omnigraphik.com" - }, - { - "id": 599, - "guid": "069e8939-099c-4bba-95b8-19fcfa9ebee3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Cramer", - "company": "Truetomic", - "phone": "839-572-3070", - "email": "sarah@truetomic.com" - }, - { - "id": 600, - "guid": "76fa85ae-85f4-406f-8115-88636e8ef73e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Murphy", - "company": "Fibrotopia", - "phone": "801-544-2608", - "email": "kylie@fibrotopia.com" - }, - { - "id": 601, - "guid": "1cc51ecb-ef5e-4045-9866-0e09ea315917", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Thomson", - "company": "Superscope", - "phone": "862-447-3875", - "email": "kaylee@superscope.com" - }, - { - "id": 602, - "guid": "e234350f-721e-4bb6-9b5a-4bc0004ee768", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Carroll", - "company": "Titanirola", - "phone": "813-475-3734", - "email": "morgan@titanirola.com" - }, - { - "id": 603, - "guid": "98d21ed5-c69f-416e-bc1c-07d9734d26f0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Gilbert", - "company": "iEnland", - "phone": "830-595-2787", - "email": "leah@ienland.com" - }, - { - "id": 604, - "guid": "0cc2d064-a614-4011-9f75-77cba49998f1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Wood", - "company": "Systheon", - "phone": "855-535-2262", - "email": "olivia@systheon.com" - }, - { - "id": 605, - "guid": "9e3c692d-c7b0-4318-972a-fe8a3571ce5e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Thorndike", - "company": "iOptystix", - "phone": "865-553-2791", - "email": "taylor@ioptystix.com" - }, - { - "id": 606, - "guid": "d748c039-2b29-4efa-bfb1-32fcb07819c2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Gustman", - "company": "Allphysiche", - "phone": "892-525-2702", - "email": "hailey@allphysiche.com" - }, - { - "id": 607, - "guid": "cca970ea-116d-40af-8cd0-d6e4cdfda5f9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity White", - "company": "Techtron", - "phone": "819-440-3601", - "email": "trinity@techtron.com" - }, - { - "id": 608, - "guid": "7f62907b-0ab6-41ce-822d-6779e78935fe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Waller", - "company": "Thermotomic", - "phone": "866-492-3206", - "email": "jessica@thermotomic.com" - }, - { - "id": 609, - "guid": "2aa79e02-2020-46b4-a37c-2545944c7d03", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Galbraith", - "company": "Skydata", - "phone": "877-538-2757", - "email": "addison@skydata.com" - }, - { - "id": 610, - "guid": "0d3f0364-523a-440c-9954-6a80b1779bb1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Ward", - "company": "Textiqua", - "phone": "890-431-3423", - "email": "lily@textiqua.com" - }, - { - "id": 611, - "guid": "414f6ef3-1345-4888-a34e-e7a4e0161fe5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Walkman", - "company": "Truetomic", - "phone": "811-454-3957", - "email": "evelyn@truetomic.com" - }, - { - "id": 612, - "guid": "2b720d19-1bca-4ee9-953f-7f0033698392", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Gustman", - "company": "Techtron", - "phone": "883-525-2756", - "email": "molly@techtron.com" - }, - { - "id": 613, - "guid": "bd4448b3-30ac-430d-89cb-36716b4dd71f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Harrison", - "company": "Orthosoft", - "phone": "857-580-3115", - "email": "vanessa@orthosoft.com" - }, - { - "id": 614, - "guid": "a2902c36-eb4e-483f-a872-28371a50b41b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Oldridge", - "company": "Aluco", - "phone": "884-559-2765", - "email": "brooklyn@aluco.com" - }, - { - "id": 615, - "guid": "e98e69e8-9e04-44fb-9e70-102e62f231c1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Chandter", - "company": "Gigaura", - "phone": "822-479-2707", - "email": "lillian@gigaura.com" - }, - { - "id": 616, - "guid": "ae8449b4-71f3-42de-b65f-6045c199178d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Oldman", - "company": "Ventanium", - "phone": "807-581-2250", - "email": "destiny@ventanium.com" - }, - { - "id": 617, - "guid": "6a0ba7c4-4a22-439b-bdf3-b602e42e60c6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Brooks", - "company": "Westtomik", - "phone": "874-428-2691", - "email": "peyton@westtomik.com" - }, - { - "id": 618, - "guid": "49832bf8-3fda-4bae-8539-50d1a1f4c273", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Smith", - "company": "Truegate", - "phone": "840-575-3538", - "email": "bailey@truegate.com" - }, - { - "id": 619, - "guid": "cd877b0b-3ad0-4b1f-b9eb-16b14ebf2b9b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Day", - "company": "US Infratouch", - "phone": "823-593-3963", - "email": "kaitlyn@us infratouch.com" - }, - { - "id": 620, - "guid": "32599503-92b6-4bdf-8c49-8e6e92c1a775", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Hodges", - "company": "Truetomic", - "phone": "864-407-2109", - "email": "abigail@truetomic.com" - }, - { - "id": 621, - "guid": "fa17401f-90e9-46ef-9af5-c1718967c12c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Carey", - "company": "Keytheon", - "phone": "845-590-2748", - "email": "rachel@keytheon.com" - }, - { - "id": 622, - "guid": "75471f9d-082d-4a51-9dce-e0b2317a0f40", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Goodman", - "company": "Ameritron", - "phone": "875-505-2456", - "email": "bailey@ameritron.com" - }, - { - "id": 623, - "guid": "7ffbe290-bc6c-4ed3-9507-ee9f87682961", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Serenity Gilbert", - "company": "Conrama", - "phone": "895-464-2925", - "email": "serenity@conrama.com" - }, - { - "id": 624, - "guid": "63e83b31-1c96-4b6e-9011-f3277f323fae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Molligan", - "company": "Idmax", - "phone": "842-467-3330", - "email": "khloe@idmax.com" - }, - { - "id": 625, - "guid": "38f97d80-4904-4ba1-8898-6be8ca547850", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Watson", - "company": "Robotomic", - "phone": "818-552-2102", - "email": "leah@robotomic.com" - }, - { - "id": 626, - "guid": "0ef5755c-5cd5-4f1f-93df-eb8d696ce240", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Davidson", - "company": "Titanigraf", - "phone": "812-555-3111", - "email": "alexis@titanigraf.com" - }, - { - "id": 627, - "guid": "dffd65d8-c351-422e-98ba-f9db54a7a7d8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Gardner", - "company": "Entcast", - "phone": "840-598-2100", - "email": "chloe@entcast.com" - }, - { - "id": 628, - "guid": "0e23bb23-9f97-49c7-a8fc-bfae5de4cba1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Faith Brickman", - "company": "Ventanium", - "phone": "867-457-2078", - "email": "faith@ventanium.com" - }, - { - "id": 629, - "guid": "aa1db425-33b6-44b5-bf15-b11c5604ea22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Abramson", - "company": "Teratopia", - "phone": "807-533-2367", - "email": "serenity@teratopia.com" - }, - { - "id": 630, - "guid": "8c4e5f66-c0cb-498b-af9a-1dce3dc95b2c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Nelson", - "company": "Inridium", - "phone": "825-581-2389", - "email": "mariah@inridium.com" - }, - { - "id": 631, - "guid": "ccd6e33a-b0b5-40e2-adfd-6708bf86746c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Hawkins", - "company": "Gigaura", - "phone": "887-533-3403", - "email": "gabrielle@gigaura.com" - }, - { - "id": 632, - "guid": "1897bcc5-b303-470e-bf1e-c219ed93f10e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Day", - "company": "Westmedia", - "phone": "850-524-2072", - "email": "serenity@westmedia.com" - }, - { - "id": 633, - "guid": "643b83f6-dcdd-4797-a44c-0d5ec6399486", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Wallace", - "company": "Teratopia", - "phone": "832-437-2927", - "email": "kimberly@teratopia.com" - }, - { - "id": 634, - "guid": "50af0e7f-85c6-4783-81c6-e7fa5c036cde", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Croftoon", - "company": "Mescatron", - "phone": "855-600-2174", - "email": "anna@mescatron.com" - }, - { - "id": 635, - "guid": "7df1b6fe-9748-4959-af21-2c91b6e5d925", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Milton", - "company": "Raylog", - "phone": "846-581-3593", - "email": "genesis@raylog.com" - }, - { - "id": 636, - "guid": "45103dc2-6094-4170-902a-6008ff0a90e7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Vance", - "company": "US Infratouch", - "phone": "821-413-2633", - "email": "mariah@us infratouch.com" - }, - { - "id": 637, - "guid": "34b5fccf-8c9f-4f86-9e52-46579342d1b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Vance", - "company": "Interliant", - "phone": "820-474-3719", - "email": "ashley@interliant.com" - }, - { - "id": 638, - "guid": "a14c63b4-a8a9-4ed4-a75f-8a557525a3b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Hoggarth", - "company": "Airdyne", - "phone": "879-599-2865", - "email": "lauren@airdyne.com" - }, - { - "id": 639, - "guid": "a6149635-b605-4c84-8979-c1d1bb6e2aa9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Thornton", - "company": "Inridium", - "phone": "801-596-3964", - "email": "taylor@inridium.com" - }, - { - "id": 640, - "guid": "e25ec264-88ad-4506-9760-835de9187c97", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Croftoon", - "company": "Generola", - "phone": "829-422-2255", - "email": "kaylee@generola.com" - }, - { - "id": 641, - "guid": "825ca8a3-9934-4eef-a1bb-e4c71f6d4b56", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Neal", - "company": "Cryptotegrity", - "phone": "852-428-3443", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 642, - "guid": "9e9e67bb-72bc-41c2-85cb-3f47f22d0cee", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Croftoon", - "company": "Westtomik", - "phone": "839-458-3717", - "email": "riley@westtomik.com" - }, - { - "id": 643, - "guid": "04fcc29c-c689-4c57-8763-d910027f3560", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Thomson", - "company": "Openserve", - "phone": "887-508-2320", - "email": "anna@openserve.com" - }, - { - "id": 644, - "guid": "44d35532-d15f-415b-82d4-bb8785ad4bd0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Natalie Freeman", - "company": "eSteganoergy", - "phone": "882-528-2474", - "email": "natalie@esteganoergy.com" - }, - { - "id": 645, - "guid": "628487c4-907e-4151-8c7a-88dedf142694", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Charlson", - "company": "Orthomedia", - "phone": "841-502-3945", - "email": "rachel@orthomedia.com" - }, - { - "id": 646, - "guid": "8e48ba23-034a-49cc-80d4-5095bdce1288", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Brickman", - "company": "Transtouch", - "phone": "891-473-3401", - "email": "julia@transtouch.com" - }, - { - "id": 647, - "guid": "42a9a944-3f5d-4e62-bdd0-993d63a55b8e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Abramson", - "company": "Aprama", - "phone": "888-499-3704", - "email": "emma@aprama.com" - }, - { - "id": 648, - "guid": "2ac384b1-5b2e-4676-b374-b8e42ee4818b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Fulton", - "company": "Superscope", - "phone": "850-414-2672", - "email": "nevaeh@superscope.com" - }, - { - "id": 649, - "guid": "fff102a9-1f91-4b87-9408-84d184405fd8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Gerald", - "company": "Videobanc", - "phone": "860-406-2090", - "email": "alyssa@videobanc.com" - }, - { - "id": 650, - "guid": "5cc6aa70-2d1e-4e39-8662-2b088b5b888a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Riley Campbell", - "company": "Netsystems", - "phone": "836-495-3715", - "email": "riley@netsystems.com" - }, - { - "id": 651, - "guid": "666d2759-3647-4afc-b05f-090fce0f11fe", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Hawkins", - "company": "Westmedia", - "phone": "887-596-2701", - "email": "hailey@westmedia.com" - }, - { - "id": 652, - "guid": "317a63ed-49de-447b-8676-493a0dc66f5b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Payton Oldridge", - "company": "Openserve", - "phone": "824-543-2730", - "email": "payton@openserve.com" - }, - { - "id": 653, - "guid": "ddf5ab00-cbbd-42ab-b9aa-9c467f4338cf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Michaelson", - "company": "Mescatron", - "phone": "868-410-3571", - "email": "jasmine@mescatron.com" - }, - { - "id": 654, - "guid": "964a3b68-e515-486a-b107-90dfb0b81553", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Taylor Gilson", - "company": "Aluco", - "phone": "851-411-2943", - "email": "taylor@aluco.com" - }, - { - "id": 655, - "guid": "b5eed914-8d96-492b-84f8-d94e3359ac45", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Andrea Day", - "company": "Unconix", - "phone": "831-546-3304", - "email": "andrea@unconix.com" - }, - { - "id": 656, - "guid": "b5862b95-1ba7-42e3-819d-70bd2b754973", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Waller", - "company": "Generola", - "phone": "822-456-2945", - "email": "mariah@generola.com" - }, - { - "id": 657, - "guid": "e127511c-8801-4b31-81c4-adb8623ab395", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabriella Carter", - "company": "Qualserve", - "phone": "830-573-2563", - "email": "gabriella@qualserve.com" - }, - { - "id": 658, - "guid": "8b435a1d-8d7b-44fb-94dc-b16674e3500a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Gilbert", - "company": "Infragraph", - "phone": "820-487-3757", - "email": "lillian@infragraph.com" - }, - { - "id": 659, - "guid": "8b1468fa-3f0f-42fa-afb9-73c3f194ddcc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Hamphrey", - "company": "US Infratouch", - "phone": "836-453-3619", - "email": "zoe@us infratouch.com" - }, - { - "id": 660, - "guid": "698acf68-ca7c-4f02-8015-6c118b698fe1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Walkman", - "company": "Safetrust", - "phone": "878-475-3167", - "email": "caroline@safetrust.com" - }, - { - "id": 661, - "guid": "1bcd8387-8ae4-477a-a7bc-aed81e92ce9f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Abramson", - "company": "Infraique", - "phone": "809-468-2626", - "email": "hannah@infraique.com" - }, - { - "id": 662, - "guid": "e9e49f16-2664-435a-a027-644ffb976876", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Morrison", - "company": "Titanirola", - "phone": "890-446-3527", - "email": "chloe@titanirola.com" - }, - { - "id": 663, - "guid": "b5c3324a-2c85-4b1c-8cc9-9a02c445cc1d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Nash", - "company": "Unologic", - "phone": "875-549-2248", - "email": "emma@unologic.com" - }, - { - "id": 664, - "guid": "ee002996-a8f0-4264-ac7c-7b619cb006dd", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Vaughan", - "company": "Inridium", - "phone": "802-468-2395", - "email": "katelyn@inridium.com" - }, - { - "id": 665, - "guid": "ce91bcad-6b5d-468a-a1bc-a540d4460d15", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Vaughan", - "company": "Anagraph", - "phone": "874-462-2718", - "email": "andrea@anagraph.com" - }, - { - "id": 666, - "guid": "6b598745-9c75-4718-90d0-147bd2afd7f6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Osborne", - "company": "Infragraph", - "phone": "879-529-2525", - "email": "anna@infragraph.com" - }, - { - "id": 667, - "guid": "c8e3e3db-9401-4cbf-86e5-5882e90efde8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Davidson", - "company": "Celgra", - "phone": "810-526-3097", - "email": "zoey@celgra.com" - }, - { - "id": 668, - "guid": "2734c399-72f8-45ea-a7dd-2dc17c80c19e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Thornton", - "company": "Entcast", - "phone": "823-454-2921", - "email": "alexa@entcast.com" - }, - { - "id": 669, - "guid": "bbbd9fc1-e5d5-4ec9-b770-36a7d7b06976", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Mercer", - "company": "Jamconik", - "phone": "831-453-2990", - "email": "lillian@jamconik.com" - }, - { - "id": 670, - "guid": "d3a0c565-a298-4b38-a18a-10fd38859adb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Hawkins", - "company": "Netseco", - "phone": "833-470-3174", - "email": "jessica@netseco.com" - }, - { - "id": 671, - "guid": "d57d65ff-5109-42af-a3c3-d60b209946cb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Gerald", - "company": "Quintegrity", - "phone": "882-590-2081", - "email": "layla@quintegrity.com" - }, - { - "id": 672, - "guid": "cd9f9848-b8b2-4038-8ade-34bb9d7e07f2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva White", - "company": "Fibrotopia", - "phone": "885-403-2968", - "email": "eva@fibrotopia.com" - }, - { - "id": 673, - "guid": "3949f475-aa58-48cf-82d6-f4932feb118a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jocelyn Turner", - "company": "Idmax", - "phone": "896-402-3134", - "email": "jocelyn@idmax.com" - }, - { - "id": 674, - "guid": "e743b9a4-05d6-4840-9655-18a0166bc212", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Carter", - "company": "eEyetanic", - "phone": "848-439-2904", - "email": "camila@eeyetanic.com" - }, - { - "id": 675, - "guid": "0319a35f-4170-4240-bd2e-219f3e5d057a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Brown", - "company": "Genland", - "phone": "872-504-2213", - "email": "ashley@genland.com" - }, - { - "id": 676, - "guid": "f9400ee0-8ecd-4ade-91ba-201207038346", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Goodman", - "company": "Polytheon", - "phone": "895-518-2434", - "email": "nevaeh@polytheon.com" - }, - { - "id": 677, - "guid": "7a4c4027-6ba7-4172-9891-ab4a4fb22d0e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Youmans", - "company": "US Omnigraphik", - "phone": "816-454-2227", - "email": "aubrey@us omnigraphik.com" - }, - { - "id": 678, - "guid": "40091a6b-c3b5-4201-a4ad-1fc1c44fe623", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Brooks", - "company": "Fibrotopia", - "phone": "899-455-3459", - "email": "rachel@fibrotopia.com" - }, - { - "id": 679, - "guid": "dbb57050-1a8a-407d-b243-04bfda730ba2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Stanley", - "company": "Robotemplate", - "phone": "844-594-3016", - "email": "paige@robotemplate.com" - }, - { - "id": 680, - "guid": "815e3b67-056a-4167-9445-4b525560fed8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Hodges", - "company": "Titanirola", - "phone": "819-560-3296", - "email": "madelyn@titanirola.com" - }, - { - "id": 681, - "guid": "d5c72a98-e58f-4d25-9708-5c3f5754d661", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Adamson", - "company": "iEnland", - "phone": "840-404-2701", - "email": "gabrielle@ienland.com" - }, - { - "id": 682, - "guid": "7dfb8f83-668b-405c-99b5-06c9a3f9cd8c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Gill", - "company": "Textiqua", - "phone": "871-426-2064", - "email": "valeria@textiqua.com" - }, - { - "id": 683, - "guid": "c0a501b9-e85f-4fcf-8f2d-6230040f4fb9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Bush", - "company": "Conotomics", - "phone": "836-569-3901", - "email": "katelyn@conotomics.com" - }, - { - "id": 684, - "guid": "e2b1249a-a439-463a-85bb-776ab64c6542", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Warren", - "company": "InfoAirway", - "phone": "894-553-3968", - "email": "evelyn@infoairway.com" - }, - { - "id": 685, - "guid": "eeed8131-75a6-4896-9e19-d539f55d999a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Stanley", - "company": "Mescaridic", - "phone": "848-543-2230", - "email": "caroline@mescaridic.com" - }, - { - "id": 686, - "guid": "fd1bb694-02f4-4d70-95d8-038b17eec21e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Oldman", - "company": "Raylog", - "phone": "814-442-2323", - "email": "khloe@raylog.com" - }, - { - "id": 687, - "guid": "87be4d4a-6065-47a2-8180-20cbcd6fceb1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe White", - "company": "Infragraph", - "phone": "855-585-3902", - "email": "khloe@infragraph.com" - }, - { - "id": 688, - "guid": "dd8429f9-b0aa-4783-a98d-5cd1e84045d2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ariana Higgins", - "company": "Pacwest", - "phone": "817-583-3337", - "email": "ariana@pacwest.com" - }, - { - "id": 689, - "guid": "1e8474fc-604b-43a1-9ca9-db27f620bd20", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Michaelson", - "company": "Truegate", - "phone": "839-494-2022", - "email": "gianna@truegate.com" - }, - { - "id": 690, - "guid": "6c4276cb-a260-49d6-86ad-e8d8305bc0b4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ella Calhoun", - "company": "Titanigraf", - "phone": "841-490-2639", - "email": "ella@titanigraf.com" - }, - { - "id": 691, - "guid": "27554640-0711-4c3e-b724-df04d1702863", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Creighton", - "company": "Teknoplexon", - "phone": "875-532-2484", - "email": "serenity@teknoplexon.com" - }, - { - "id": 692, - "guid": "00f4ec97-f011-4e5f-a357-c48fe4aada7a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Vance", - "company": "Fibroserve", - "phone": "866-514-3630", - "email": "brianna@fibroserve.com" - }, - { - "id": 693, - "guid": "e2b3e729-0e34-4441-bedb-ab18489ba97d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Gardner", - "company": "Polytheon", - "phone": "827-600-3958", - "email": "makayla@polytheon.com" - }, - { - "id": 694, - "guid": "a205fd38-429d-4067-bfb7-e7a18ab127a9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Michaelson", - "company": "Technogra", - "phone": "853-417-3478", - "email": "layla@technogra.com" - }, - { - "id": 695, - "guid": "99df96e6-1b84-42fe-934a-794de8283707", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Creighton", - "company": "Genland", - "phone": "884-474-2921", - "email": "lily@genland.com" - }, - { - "id": 696, - "guid": "e02201ba-d39b-42ba-bada-b94464a16ffb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Galbraith", - "company": "Netseco", - "phone": "812-522-2372", - "email": "chloe@netseco.com" - }, - { - "id": 697, - "guid": "d9e0636f-c510-495a-9aeb-fc0b3a35f855", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Nathan", - "company": "Netsystems", - "phone": "859-530-2387", - "email": "maya@netsystems.com" - }, - { - "id": 698, - "guid": "3e77a7b3-3e29-48ce-b21c-497638e2c690", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Stanley", - "company": "Jamrola", - "phone": "826-409-3376", - "email": "julia@jamrola.com" - }, - { - "id": 699, - "guid": "39c724b9-9a8e-4339-8d14-7ed657115852", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Chapman", - "company": "Nanobanc", - "phone": "800-462-2944", - "email": "eva@nanobanc.com" - }, - { - "id": 700, - "guid": "3872aa7e-1080-40b2-9134-2d8a217d938c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Clapton", - "company": "Conotomics", - "phone": "888-437-3398", - "email": "grace@conotomics.com" - }, - { - "id": 701, - "guid": "18aaef32-72ae-4523-b733-f95b83ff7a3c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Sheldon", - "company": "Anagraph", - "phone": "868-592-3072", - "email": "alexis@anagraph.com" - }, - { - "id": 702, - "guid": "85fd997b-1ba8-4875-81ac-2e68634cf6aa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Hailey", - "company": "Enlogia", - "phone": "828-520-2951", - "email": "sophia@enlogia.com" - }, - { - "id": 703, - "guid": "9d698e38-73e1-467a-93cd-a8b136eb7500", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Miln", - "company": "Inridium", - "phone": "871-420-3497", - "email": "jocelyn@inridium.com" - }, - { - "id": 704, - "guid": "cda0450e-16bb-4f9d-849b-4fe44eb12601", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Day", - "company": "Anagraph", - "phone": "831-493-2647", - "email": "kaylee@anagraph.com" - }, - { - "id": 705, - "guid": "db743d4c-9cef-4916-967e-fb5a7c363777", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Amelia Davidson", - "company": "iSkyvaco", - "phone": "809-514-3101", - "email": "amelia@iskyvaco.com" - }, - { - "id": 706, - "guid": "d6b2c0cb-fc97-42dc-ac48-6b03cdd95677", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Croftoon", - "company": "Robocomm", - "phone": "832-505-3934", - "email": "lauren@robocomm.com" - }, - { - "id": 707, - "guid": "2c746925-672e-4393-b95f-d6ba7a6682dd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Wallace", - "company": "Westtomik", - "phone": "854-426-2337", - "email": "brianna@westtomik.com" - }, - { - "id": 708, - "guid": "88780ef1-38b8-408a-9664-efb4da789e0c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Winter", - "company": "InfoAirway", - "phone": "810-481-3704", - "email": "sophie@infoairway.com" - }, - { - "id": 709, - "guid": "6ad8e5a3-4c45-45c1-8ca5-f3af8b0d73c8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Hoggarth", - "company": "iQualcar", - "phone": "824-516-2137", - "email": "anna@iqualcar.com" - }, - { - "id": 710, - "guid": "3092eafb-1f37-48e7-b4da-801e089c6140", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lillian Walkman", - "company": "Techtron", - "phone": "823-492-3943", - "email": "lillian@techtron.com" - }, - { - "id": 711, - "guid": "5657ef48-a7f4-4d65-bc2e-b368691e398e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Carroll", - "company": "SysVenamerica", - "phone": "808-493-2264", - "email": "julia@sysvenamerica.com" - }, - { - "id": 712, - "guid": "e2a6b7d7-b748-4ddd-84ba-b4d247b8ab5f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kayla Thornton", - "company": "SysVenamerica", - "phone": "853-474-3143", - "email": "kayla@sysvenamerica.com" - }, - { - "id": 713, - "guid": "7c118805-a4d6-4921-918e-e29154016cba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Oldridge", - "company": "Safeagra", - "phone": "880-513-3937", - "email": "gabrielle@safeagra.com" - }, - { - "id": 714, - "guid": "b30e9fd3-828d-4b8b-abb7-3007c81948b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Miln", - "company": "Netsystems", - "phone": "812-468-3023", - "email": "gianna@netsystems.com" - }, - { - "id": 715, - "guid": "9bccfe35-7ae3-4a28-abfc-0064ae9d87f2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Michaelson", - "company": "Ameritron", - "phone": "889-486-3962", - "email": "anna@ameritron.com" - }, - { - "id": 716, - "guid": "9c2b716c-ec1e-4dcb-8c12-795efcb4bf88", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Cramer", - "company": "Jamrola", - "phone": "867-544-3721", - "email": "maya@jamrola.com" - }, - { - "id": 717, - "guid": "be25a42d-0f63-48a6-b99d-d54cde8354a4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Brickman", - "company": "Syssoft", - "phone": "845-526-2210", - "email": "anna@syssoft.com" - }, - { - "id": 718, - "guid": "4cff5f91-0bcb-4a69-99a2-b07eb3d87c55", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Vance", - "company": "Anagraph", - "phone": "828-498-2563", - "email": "melanie@anagraph.com" - }, - { - "id": 719, - "guid": "8f6763f8-ad49-4709-a0cf-feb2b85e2468", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Miers", - "company": "Airdyne", - "phone": "820-425-3670", - "email": "gabriella@airdyne.com" - }, - { - "id": 720, - "guid": "fd445f24-c25b-4ebe-9b4d-f71112a65bc5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lily Young", - "company": "Openserve", - "phone": "896-521-2195", - "email": "lily@openserve.com" - }, - { - "id": 721, - "guid": "d6d5f4a8-dbe6-4a9d-ae63-8b5171aff4e4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Creighton", - "company": "Teraserv", - "phone": "880-522-3627", - "email": "gianna@teraserv.com" - }, - { - "id": 722, - "guid": "1d2d4f66-cfc8-4cf3-9352-ca03e35f0dda", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Wainwright", - "company": "Mescaridic", - "phone": "839-416-2249", - "email": "maya@mescaridic.com" - }, - { - "id": 723, - "guid": "1e35d282-9eff-4776-b807-7c0657d934d7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Carrington", - "company": "Techtron", - "phone": "883-437-3045", - "email": "chloe@techtron.com" - }, - { - "id": 724, - "guid": "9cf43e64-f16a-436c-b54d-b865c542b2c6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Clapton", - "company": "Anaframe", - "phone": "862-427-2535", - "email": "khloe@anaframe.com" - }, - { - "id": 725, - "guid": "a7577fe6-5ea8-42d1-a496-a5c02ea451af", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Caroline Sherlock", - "company": "Truegate", - "phone": "807-444-2858", - "email": "caroline@truegate.com" - }, - { - "id": 726, - "guid": "2948933c-b143-45f8-b588-43331bff1498", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Waller", - "company": "Aluco", - "phone": "818-600-2592", - "email": "brooklyn@aluco.com" - }, - { - "id": 727, - "guid": "ec13dee3-a9b5-4a3b-a907-07b2c542d084", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Day", - "company": "Inridium", - "phone": "852-589-2758", - "email": "katelyn@inridium.com" - }, - { - "id": 728, - "guid": "2970d0ad-73d1-45df-ab8b-dcf9cb9806d4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Vaughan", - "company": "Cryptotemplate", - "phone": "883-482-3144", - "email": "ella@cryptotemplate.com" - }, - { - "id": 729, - "guid": "a64e7628-f3fb-4159-a37e-91ab81d4b998", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Chapman", - "company": "Cryptotegrity", - "phone": "858-565-2979", - "email": "alyssa@cryptotegrity.com" - }, - { - "id": 730, - "guid": "bfcc3a20-e5bf-401a-9b45-29ce1302bce8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Freeman", - "company": "Truetomic", - "phone": "828-501-3431", - "email": "ella@truetomic.com" - }, - { - "id": 731, - "guid": "55070996-a3a5-4854-80d3-1a82421f7fab", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Fisher", - "company": "Netseco", - "phone": "825-548-2266", - "email": "jasmine@netseco.com" - }, - { - "id": 732, - "guid": "1a70f76b-2ec4-4a33-af07-e2a0b7b0b84d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Hoggarth", - "company": "Entcast", - "phone": "828-600-2645", - "email": "katherine@entcast.com" - }, - { - "id": 733, - "guid": "b0551293-4b8a-471a-b622-d502ba870149", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Carrington", - "company": "Teraserv", - "phone": "895-481-3396", - "email": "jocelyn@teraserv.com" - }, - { - "id": 734, - "guid": "6b8cf3a5-348d-494d-979f-1f575de567ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Fulton", - "company": "Teraserv", - "phone": "853-567-2666", - "email": "kaylee@teraserv.com" - }, - { - "id": 735, - "guid": "92f100da-bdf0-492d-86b1-d1783c8007a7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Brooks", - "company": "Teratopia", - "phone": "814-509-2005", - "email": "riley@teratopia.com" - }, - { - "id": 736, - "guid": "3550737d-a850-4efb-ac78-831be81c32b9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Otis", - "company": "Raylog", - "phone": "836-529-2475", - "email": "alexa@raylog.com" - }, - { - "id": 737, - "guid": "5feea123-b83c-4897-a65c-b41e36c0523a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Hodges", - "company": "Teraserv", - "phone": "894-424-2757", - "email": "sarah@teraserv.com" - }, - { - "id": 738, - "guid": "d674fadb-abfa-449a-b60e-fcb9ba93f5d3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Morrison", - "company": "InfoAirway", - "phone": "857-408-2795", - "email": "rachel@infoairway.com" - }, - { - "id": 739, - "guid": "5260d69c-97b9-4de8-890c-b30b4de8821f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maria Nash", - "company": "SysVenamerica", - "phone": "807-468-2640", - "email": "maria@sysvenamerica.com" - }, - { - "id": 740, - "guid": "f95111ca-e639-4123-ade6-b8b436f686fd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Murphy", - "company": "Aprama", - "phone": "875-499-3107", - "email": "kaitlyn@aprama.com" - }, - { - "id": 741, - "guid": "cb3ec47d-ad55-42a9-9e6b-7234da095438", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mackenzie Molligan", - "company": "Rapigrafix", - "phone": "866-411-3804", - "email": "mackenzie@rapigrafix.com" - }, - { - "id": 742, - "guid": "ced6b774-f3c7-4848-bf0f-7fd791e4c6f2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Otis", - "company": "Conrama", - "phone": "893-549-2008", - "email": "alexis@conrama.com" - }, - { - "id": 743, - "guid": "52835423-7e76-4559-9ca0-3799f3127886", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Gustman", - "company": "Qualserve", - "phone": "830-501-2398", - "email": "madelyn@qualserve.com" - }, - { - "id": 744, - "guid": "c3b3c149-3c18-4852-a22e-235266f70f10", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ava Clapton", - "company": "Netsystems", - "phone": "871-448-2664", - "email": "ava@netsystems.com" - }, - { - "id": 745, - "guid": "c8a5dc2a-7dfb-425b-9179-c147f9d6f955", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Croftoon", - "company": "Qualserve", - "phone": "825-512-2238", - "email": "charlotte@qualserve.com" - }, - { - "id": 746, - "guid": "5014697e-77bf-42be-8e92-3cd92023d994", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Sherlock", - "company": "Robotomic", - "phone": "835-453-3915", - "email": "ariana@robotomic.com" - }, - { - "id": 747, - "guid": "43a8fe55-b0f9-4b6c-8bbc-577a2c180662", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Bush", - "company": "Teraserv", - "phone": "816-541-3245", - "email": "natalie@teraserv.com" - }, - { - "id": 748, - "guid": "ae3364f5-3f61-4139-864c-23b4060f5521", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Vaughan", - "company": "Proline", - "phone": "820-433-3159", - "email": "lily@proline.com" - }, - { - "id": 749, - "guid": "f1442839-ffe0-450b-8f09-402aef49d1fa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Timmons", - "company": "US Omnigraphik", - "phone": "881-500-2287", - "email": "ava@us omnigraphik.com" - }, - { - "id": 750, - "guid": "ec95853c-d53b-4891-bf0c-61a68bd20d67", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Freeman", - "company": "Textiqua", - "phone": "887-525-2741", - "email": "sydney@textiqua.com" - }, - { - "id": 751, - "guid": "0b9f9882-8c1b-45ce-a679-899157853ef4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Grace Hailey", - "company": "Mescatron", - "phone": "849-431-3674", - "email": "grace@mescatron.com" - }, - { - "id": 752, - "guid": "ad35c12e-9c0a-463f-b911-b54386f8101a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Fulton", - "company": "Keytheon", - "phone": "830-459-3360", - "email": "brooke@keytheon.com" - }, - { - "id": 753, - "guid": "532dec7e-7fbf-4fd8-906d-15e32baa862d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Gilmore", - "company": "Teratopia", - "phone": "811-459-3177", - "email": "mariah@teratopia.com" - }, - { - "id": 754, - "guid": "7a28f3af-f9fd-4e56-89de-46bafeadc76e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Samantha Ward", - "company": "iOptystix", - "phone": "825-562-3446", - "email": "samantha@ioptystix.com" - }, - { - "id": 755, - "guid": "41f463ed-e71a-49b1-b532-8d9a10fbb4b5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Davidson", - "company": "Polytheon", - "phone": "855-530-2522", - "email": "lily@polytheon.com" - }, - { - "id": 756, - "guid": "9cb1c36e-f1d1-4df9-8b8f-68805aceed0f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Abramson", - "company": "Titanigraf", - "phone": "843-565-3661", - "email": "zoey@titanigraf.com" - }, - { - "id": 757, - "guid": "f40f2a89-5676-40fb-a7bb-b095b85b3388", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Oldman", - "company": "Conotomics", - "phone": "857-436-2685", - "email": "nevaeh@conotomics.com" - }, - { - "id": 758, - "guid": "a3e31e35-9b01-4f5a-b9e1-83859b1b7230", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Young", - "company": "Rapigrafix", - "phone": "868-413-3998", - "email": "arianna@rapigrafix.com" - }, - { - "id": 759, - "guid": "f208b0ec-7396-467a-bf6a-d34708486607", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lauren Charlson", - "company": "Interliant", - "phone": "806-575-3329", - "email": "lauren@interliant.com" - }, - { - "id": 760, - "guid": "af3e33e6-414d-4ec9-bb09-bc8ee69d3a78", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Miller", - "company": "Cryptotegrity", - "phone": "839-494-3920", - "email": "elizabeth@cryptotegrity.com" - }, - { - "id": 761, - "guid": "1f95ed27-feea-4955-9920-5c1375624bd6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Gibbs", - "company": "iQualcar", - "phone": "828-493-2018", - "email": "gabrielle@iqualcar.com" - }, - { - "id": 762, - "guid": "04368c42-aa29-47cc-b4ca-50922c98684d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Turner", - "company": "Polytheon", - "phone": "810-575-2775", - "email": "destiny@polytheon.com" - }, - { - "id": 763, - "guid": "0e989dd4-668e-4883-9287-9a87a2a6a935", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Higgins", - "company": "Multitiqua", - "phone": "840-435-3855", - "email": "kylie@multitiqua.com" - }, - { - "id": 764, - "guid": "61089ac8-cda4-4ce5-b065-ca74855148d6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Chapman", - "company": "Dynarama", - "phone": "826-529-3245", - "email": "destiny@dynarama.com" - }, - { - "id": 765, - "guid": "60288c79-6093-4f50-8dd9-a4b0f36ff92c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Allison Brooks", - "company": "Titanirola", - "phone": "885-566-3549", - "email": "allison@titanirola.com" - }, - { - "id": 766, - "guid": "0d198455-520c-4ac5-a595-70f13c415d90", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Taylor Wallace", - "company": "Inridium", - "phone": "871-447-2224", - "email": "taylor@inridium.com" - }, - { - "id": 767, - "guid": "6374d89b-1bf8-46f2-96f2-2f18e5efcede", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Thomson", - "company": "Skydata", - "phone": "877-474-2455", - "email": "kylie@skydata.com" - }, - { - "id": 768, - "guid": "76919033-5349-4dfe-8a36-0d25766f6523", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Gerald", - "company": "Anagraph", - "phone": "843-477-3054", - "email": "angelina@anagraph.com" - }, - { - "id": 769, - "guid": "dd77842b-f271-4a06-b543-0f87ab9cd747", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Murphy", - "company": "Pericenta", - "phone": "809-596-3393", - "email": "bailey@pericenta.com" - }, - { - "id": 770, - "guid": "a1573e13-9062-48b8-86a2-f3f8fd445318", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Gilson", - "company": "Proline", - "phone": "888-464-2738", - "email": "bella@proline.com" - }, - { - "id": 771, - "guid": "68d4ad23-8f86-4c5d-8dfa-dfec13fb281f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Hoggarth", - "company": "Navivacs", - "phone": "827-531-3088", - "email": "destiny@navivacs.com" - }, - { - "id": 772, - "guid": "f0edd6bb-75a3-405f-8554-e465ab22c0e6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Oldridge", - "company": "Videobanc", - "phone": "830-573-3259", - "email": "amelia@videobanc.com" - }, - { - "id": 773, - "guid": "5e4763ad-057d-4fa9-bc73-f9acf2a62c65", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Hailey", - "company": "Raylog", - "phone": "887-412-2778", - "email": "jocelyn@raylog.com" - }, - { - "id": 774, - "guid": "2a16dddb-7d2c-4211-88af-2507151c04c2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Chapman", - "company": "Truetomic", - "phone": "894-518-3068", - "email": "serenity@truetomic.com" - }, - { - "id": 775, - "guid": "5bddba5c-3592-4fde-8306-a0e61f6d7fbc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Wainwright", - "company": "Openserve", - "phone": "892-589-2996", - "email": "jocelyn@openserve.com" - }, - { - "id": 776, - "guid": "9c5b0bc1-1c93-4105-beae-4267cd311991", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Brooks", - "company": "Anaframe", - "phone": "894-514-3006", - "email": "maya@anaframe.com" - }, - { - "id": 777, - "guid": "33125d8f-1411-4377-baf9-5034bc200cf8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Audrey Michaelson", - "company": "Netseco", - "phone": "842-405-2160", - "email": "audrey@netseco.com" - }, - { - "id": 778, - "guid": "aa6fa8ed-db10-4a22-b3ab-4320b1b3f7ca", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Gustman", - "company": "Technogra", - "phone": "850-466-2528", - "email": "mya@technogra.com" - }, - { - "id": 779, - "guid": "2f90c71e-2c1d-4e2e-a54e-c06478736512", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Turner", - "company": "Raylog", - "phone": "816-475-3994", - "email": "grace@raylog.com" - }, - { - "id": 780, - "guid": "57d90ddb-b81b-43fe-aba7-1ebc524d3e20", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Gerald", - "company": "Unologic", - "phone": "841-419-3523", - "email": "khloe@unologic.com" - }, - { - "id": 781, - "guid": "d3bf856f-1867-49e1-a5f7-dc71a1955135", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabella Daniels", - "company": "Nanobanc", - "phone": "817-579-2608", - "email": "isabella@nanobanc.com" - }, - { - "id": 782, - "guid": "2762ccde-691c-4351-abfa-0a4994dd11c8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee White", - "company": "Aluco", - "phone": "817-558-2305", - "email": "kaylee@aluco.com" - }, - { - "id": 783, - "guid": "897da0f0-8be2-49cb-959f-49a59e9c67ca", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Gill", - "company": "Jamconik", - "phone": "866-404-3861", - "email": "hailey@jamconik.com" - }, - { - "id": 784, - "guid": "95a51fa6-675f-4d13-9914-2651ec6c83be", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Ogden", - "company": "Safeagra", - "phone": "884-493-2818", - "email": "emily@safeagra.com" - }, - { - "id": 785, - "guid": "50a490aa-eabe-4284-a61b-39c8bd1110e6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Crossman", - "company": "OpKeycomm", - "phone": "892-419-3039", - "email": "maria@opkeycomm.com" - }, - { - "id": 786, - "guid": "7f62065a-1f5c-4ec0-9b15-e685ca99779b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Haig", - "company": "Systheon", - "phone": "854-438-2500", - "email": "alexis@systheon.com" - }, - { - "id": 787, - "guid": "c3faeebf-1e94-4304-875b-ab3c60762fae", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Thornton", - "company": "Polytheon", - "phone": "884-407-3986", - "email": "olivia@polytheon.com" - }, - { - "id": 788, - "guid": "3dc457ad-c515-4ab8-955a-40eba7f35b3e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Peyton Murphy", - "company": "Idmax", - "phone": "810-441-2262", - "email": "peyton@idmax.com" - }, - { - "id": 789, - "guid": "f44358f9-a1f5-492e-9df0-8fc6696795c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Gill", - "company": "Netseco", - "phone": "853-578-2514", - "email": "gianna@netseco.com" - }, - { - "id": 790, - "guid": "dbfc8301-602c-414d-aa17-455906aa975d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Carrington", - "company": "iMedconik", - "phone": "895-535-2472", - "email": "makayla@imedconik.com" - }, - { - "id": 791, - "guid": "fbb4044e-50b0-4f57-8f70-768a15ec82b3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Galbraith", - "company": "Robocomm", - "phone": "807-559-2985", - "email": "hailey@robocomm.com" - }, - { - "id": 792, - "guid": "7bcbd66f-f063-47ab-9774-306b3f91e79d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Calhoun", - "company": "Safeagra", - "phone": "857-569-2295", - "email": "genesis@safeagra.com" - }, - { - "id": 793, - "guid": "2690c54c-a137-4401-8c34-e93ab2504eb8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Gilmore", - "company": "Pericenta", - "phone": "810-482-2047", - "email": "rachel@pericenta.com" - }, - { - "id": 794, - "guid": "71d6c355-d8fc-4ee6-aafd-3f8b8234b9b1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Owen", - "company": "iMedconik", - "phone": "867-500-3307", - "email": "chloe@imedconik.com" - }, - { - "id": 795, - "guid": "60ecc994-c15a-4282-8f62-e9daa3548f2a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Fulton", - "company": "Transtouch", - "phone": "822-591-3507", - "email": "leah@transtouch.com" - }, - { - "id": 796, - "guid": "549fca38-f151-4e41-9134-4f25b08e98a5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Wallace", - "company": "Allnet", - "phone": "862-594-3924", - "email": "anna@allnet.com" - }, - { - "id": 797, - "guid": "819dbc8e-df23-4eb3-8819-da3b39690b5c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabelle Gibbs", - "company": "Openserve", - "phone": "802-532-3484", - "email": "isabelle@openserve.com" - }, - { - "id": 798, - "guid": "7ff358d6-8f91-494d-a13b-a8853e5f451b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Gibbs", - "company": "Nanobanc", - "phone": "840-569-2383", - "email": "madeline@nanobanc.com" - }, - { - "id": 799, - "guid": "3ad3bdef-4c7d-4d02-b2f5-d7e1f5483344", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Brickman", - "company": "Teraserv", - "phone": "829-526-3191", - "email": "molly@teraserv.com" - }, - { - "id": 800, - "guid": "b435c50c-0d24-4c56-92c4-175586664780", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Chapman", - "company": "eSteganoergy", - "phone": "837-478-2272", - "email": "trinity@esteganoergy.com" - }, - { - "id": 801, - "guid": "d30c5bd1-ada2-453d-9e7f-e521c8d3c20a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Creighton", - "company": "Teknoplexon", - "phone": "806-418-3506", - "email": "taylor@teknoplexon.com" - }, - { - "id": 802, - "guid": "755a46e4-4c43-4d78-be7b-49316b1c7d23", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Bush", - "company": "Safetrust", - "phone": "837-578-3825", - "email": "julia@safetrust.com" - }, - { - "id": 803, - "guid": "27f38ed6-3321-43cd-94c0-8199b6168df1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Hawkins", - "company": "Ameritron", - "phone": "851-530-2912", - "email": "alexis@ameritron.com" - }, - { - "id": 804, - "guid": "cee10cc8-8bc1-4036-9fd1-bfdeb4819d6a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Oldman", - "company": "Skydata", - "phone": "845-465-2946", - "email": "destiny@skydata.com" - }, - { - "id": 805, - "guid": "7442f1d2-6608-4a79-bd8c-fb1055e15c43", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Morrison", - "company": "Tekcar", - "phone": "817-593-3129", - "email": "eva@tekcar.com" - }, - { - "id": 806, - "guid": "8be03cbf-86bf-4588-9b8e-6eabdd076e92", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Gibbs", - "company": "Systheon", - "phone": "848-554-2639", - "email": "olivia@systheon.com" - }, - { - "id": 807, - "guid": "47897170-cf30-45cd-ace8-32a9660ee03a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Daniels", - "company": "Anaframe", - "phone": "873-500-2556", - "email": "molly@anaframe.com" - }, - { - "id": 808, - "guid": "1d916600-b94f-4f54-8696-02d6eb3d9067", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Michaelson", - "company": "Westmedia", - "phone": "840-549-3360", - "email": "lily@westmedia.com" - }, - { - "id": 809, - "guid": "09c3593a-b33a-44c8-a725-f622938650b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Gerald", - "company": "Hypervaco", - "phone": "829-583-2682", - "email": "olivia@hypervaco.com" - }, - { - "id": 810, - "guid": "eacbfb2c-bf0b-48fb-ba20-8d17702ae97d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Watson", - "company": "Anagraph", - "phone": "834-404-2769", - "email": "kylie@anagraph.com" - }, - { - "id": 811, - "guid": "de02f6a7-6337-4b71-916c-4aec630abe41", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Galbraith", - "company": "RoboAerlogix", - "phone": "893-516-3438", - "email": "brooke@roboaerlogix.com" - }, - { - "id": 812, - "guid": "fa640ceb-cda1-44e8-b644-25a062571d4f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Carrington", - "company": "Superscope", - "phone": "838-510-3526", - "email": "maria@superscope.com" - }, - { - "id": 813, - "guid": "76c11f04-397a-47eb-b2dd-a0bfcbf66f58", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Oswald", - "company": "Videobanc", - "phone": "811-525-3394", - "email": "elizabeth@videobanc.com" - }, - { - "id": 814, - "guid": "7042be99-3db3-4449-84b5-94923d49be39", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Hailey", - "company": "SysUSA", - "phone": "859-562-3800", - "email": "julia@sysusa.com" - }, - { - "id": 815, - "guid": "a08489cc-27d1-4509-a379-fd675c2e31b7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Miller", - "company": "Infragraph", - "phone": "898-417-2130", - "email": "morgan@infragraph.com" - }, - { - "id": 816, - "guid": "610babcf-881f-4bf2-818d-61b358d089ae", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Fisher", - "company": "Turbomart", - "phone": "831-582-2873", - "email": "katelyn@turbomart.com" - }, - { - "id": 817, - "guid": "6ffef62d-ce32-4cef-8388-ffc2836706e2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Brooks", - "company": "Gigaura", - "phone": "831-576-3711", - "email": "angelina@gigaura.com" - }, - { - "id": 818, - "guid": "3edd09df-9374-4895-9584-362e6faeec60", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Carey", - "company": "Allphysiche", - "phone": "853-553-2065", - "email": "sophia@allphysiche.com" - }, - { - "id": 819, - "guid": "2fcf4b57-cd14-4486-ae1b-1fea84c70541", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maya Hardman", - "company": "Pericenta", - "phone": "872-529-2944", - "email": "maya@pericenta.com" - }, - { - "id": 820, - "guid": "cf114dc5-0400-4f90-9742-2f12f178a2f3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Sheldon", - "company": "RoboAerlogix", - "phone": "884-436-2144", - "email": "khloe@roboaerlogix.com" - }, - { - "id": 821, - "guid": "ca154651-6fbd-4ede-b22e-843ddcb1780f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Sheldon", - "company": "InfoAirway", - "phone": "871-502-3978", - "email": "bailey@infoairway.com" - }, - { - "id": 822, - "guid": "e820837d-83f3-4270-b5bf-3cadf3bf013c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Waller", - "company": "Systheon", - "phone": "883-418-3995", - "email": "kylie@systheon.com" - }, - { - "id": 823, - "guid": "561eea50-1757-40f5-9f42-bf128127d91b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Smith", - "company": "Superscope", - "phone": "802-491-3784", - "email": "jasmine@superscope.com" - }, - { - "id": 824, - "guid": "3d35fd9f-58b8-478f-9324-52b5624ce1b6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Daniels", - "company": "Generola", - "phone": "846-435-2130", - "email": "grace@generola.com" - }, - { - "id": 825, - "guid": "9384b966-c1c4-4b57-9dd4-755ec87fbb54", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Charlotte Hancock", - "company": "Westgate", - "phone": "870-409-2108", - "email": "charlotte@westgate.com" - }, - { - "id": 826, - "guid": "e379070c-d5e4-4e93-825e-93c1a985bcf1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoe Oliver", - "company": "Steganoconiche", - "phone": "858-552-2719", - "email": "zoe@steganoconiche.com" - }, - { - "id": 827, - "guid": "14a89c72-f311-42c0-a25e-90a004248fb1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Gill", - "company": "Pacwest", - "phone": "825-559-3697", - "email": "victoria@pacwest.com" - }, - { - "id": 828, - "guid": "0dd00bf6-77f3-4635-b4a3-8ed8486577aa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Brickman", - "company": "Westmedia", - "phone": "865-579-3079", - "email": "peyton@westmedia.com" - }, - { - "id": 829, - "guid": "9fe53a99-938f-4508-9687-1551562f1fc1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Rachel Gardner", - "company": "Fibrotouch", - "phone": "844-600-2204", - "email": "rachel@fibrotouch.com" - }, - { - "id": 830, - "guid": "c3c47e52-fd7d-4235-a05a-d3d5ceeae1ac", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Carey", - "company": "eSteganoergy", - "phone": "841-425-3463", - "email": "zoey@esteganoergy.com" - }, - { - "id": 831, - "guid": "11428d98-5063-447d-ba59-86b8da812d28", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Hamphrey", - "company": "Turbomart", - "phone": "811-423-2480", - "email": "ashley@turbomart.com" - }, - { - "id": 832, - "guid": "bcab6ca0-8ada-4e19-aa5c-8cc7964635fe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Thornton", - "company": "iOptystix", - "phone": "871-439-2838", - "email": "faith@ioptystix.com" - }, - { - "id": 833, - "guid": "40d578a1-8baf-41cd-a702-17bd7690894a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Gilbert", - "company": "Robotomic", - "phone": "822-564-3155", - "email": "isabella@robotomic.com" - }, - { - "id": 834, - "guid": "c12efdc4-8e45-4892-a2d6-664e02ec858f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Gill", - "company": "Netseco", - "phone": "851-407-3670", - "email": "serenity@netseco.com" - }, - { - "id": 835, - "guid": "9b060c1b-85b8-4361-a1b3-acd98be9221e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Clapton", - "company": "iMedconik", - "phone": "875-591-3373", - "email": "natalie@imedconik.com" - }, - { - "id": 836, - "guid": "a5aef930-52f1-460b-8ca8-7b09dbf16487", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Ogden", - "company": "Openserve", - "phone": "814-504-2747", - "email": "alexis@openserve.com" - }, - { - "id": 837, - "guid": "8d465584-7cc0-4ed8-b402-3b6e09b5e233", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Fulton", - "company": "Transtouch", - "phone": "875-528-2744", - "email": "emma@transtouch.com" - }, - { - "id": 838, - "guid": "d3f4aa49-5073-43e8-b5d0-67e67126fb9d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Hailey", - "company": "InfoAirway", - "phone": "832-413-2023", - "email": "ariana@infoairway.com" - }, - { - "id": 839, - "guid": "28a1f9ed-6789-4669-b9ff-9ee67ed87286", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Thorndike", - "company": "Westmedia", - "phone": "847-414-3615", - "email": "molly@westmedia.com" - }, - { - "id": 840, - "guid": "2d359c7d-b61f-49c6-b7d6-3d28b555a286", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Creighton", - "company": "Conotomics", - "phone": "815-506-3449", - "email": "paige@conotomics.com" - }, - { - "id": 841, - "guid": "c60802c5-ff31-466d-8d09-a65795c8dd8f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Sheldon", - "company": "Idmax", - "phone": "891-450-3397", - "email": "melanie@idmax.com" - }, - { - "id": 842, - "guid": "3820b423-049a-48ff-b969-6d572655087e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Youmans", - "company": "Jamconik", - "phone": "807-459-2905", - "email": "hailey@jamconik.com" - }, - { - "id": 843, - "guid": "dd7bfc3f-5200-4e31-b491-92ae14ece3b2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Hoggarth", - "company": "Robotemplate", - "phone": "814-425-2751", - "email": "maria@robotemplate.com" - }, - { - "id": 844, - "guid": "f05e24cb-bf64-4760-a003-725f1be95af4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Bush", - "company": "RoboAerlogix", - "phone": "898-456-2620", - "email": "evelyn@roboaerlogix.com" - }, - { - "id": 845, - "guid": "df0ab0b5-9004-4584-b6bb-465e6a8168c8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Autumn Gerald", - "company": "Cryptotegrity", - "phone": "854-432-2518", - "email": "autumn@cryptotegrity.com" - }, - { - "id": 846, - "guid": "7dae7688-d0c4-49d3-bb5b-13a310472753", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Conors", - "company": "Genland", - "phone": "879-523-2774", - "email": "autumn@genland.com" - }, - { - "id": 847, - "guid": "b3b7b362-7aad-4a61-9132-511fc46025b5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Carey", - "company": "Titanigraf", - "phone": "879-413-3051", - "email": "lillian@titanigraf.com" - }, - { - "id": 848, - "guid": "5b0de530-bb44-4e98-983b-41f8f5a5fb5f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Gibbs", - "company": "Superscope", - "phone": "853-527-3572", - "email": "sydney@superscope.com" - }, - { - "id": 849, - "guid": "752841d6-7870-4d27-8d1a-166134b6be2f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Carter", - "company": "Teraserv", - "phone": "863-577-2582", - "email": "jasmine@teraserv.com" - }, - { - "id": 850, - "guid": "e0da5799-e13e-4337-83b6-11073f41f211", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Otis", - "company": "Transtouch", - "phone": "801-537-2419", - "email": "mya@transtouch.com" - }, - { - "id": 851, - "guid": "fec68db4-8936-49fe-9e07-8c4f30643528", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Walkman", - "company": "Mescaridic", - "phone": "848-534-3928", - "email": "emma@mescaridic.com" - }, - { - "id": 852, - "guid": "a96043fc-ed6c-43d2-a628-e59533863799", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Youmans", - "company": "Inridium", - "phone": "816-468-3270", - "email": "vanessa@inridium.com" - }, - { - "id": 853, - "guid": "87a01eea-67df-4474-ae04-8974c4f4ea6d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Owen", - "company": "Keytheon", - "phone": "806-534-2355", - "email": "natalie@keytheon.com" - }, - { - "id": 854, - "guid": "23a818fc-db8e-4bf6-85b8-3fc536488ba0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Chandter", - "company": "Nanobanc", - "phone": "850-417-2431", - "email": "caroline@nanobanc.com" - }, - { - "id": 855, - "guid": "4e2d2934-799e-4671-9f9f-b2720334d2ff", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Brooks", - "company": "Proline", - "phone": "891-452-3847", - "email": "savannah@proline.com" - }, - { - "id": 856, - "guid": "a4d9d81d-e4b6-40a6-ba26-b3a75cb6cb82", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Wainwright", - "company": "Robocomm", - "phone": "813-446-2444", - "email": "ava@robocomm.com" - }, - { - "id": 857, - "guid": "5f3ab06c-bb38-4b37-8ff2-6f16cf3dd569", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Clapton", - "company": "Pericenta", - "phone": "802-403-2174", - "email": "evelyn@pericenta.com" - }, - { - "id": 858, - "guid": "3a7e3618-7b54-4b1d-b94a-f5e265163209", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Elizabeth Carter", - "company": "Sontopia", - "phone": "831-503-3946", - "email": "elizabeth@sontopia.com" - }, - { - "id": 859, - "guid": "fb780771-cca2-464d-bce1-0b01c2e74964", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Winter", - "company": "Skydata", - "phone": "819-461-3669", - "email": "olivia@skydata.com" - }, - { - "id": 860, - "guid": "7f16e74a-82f3-4cfa-af13-8a1bb431de36", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Hoggarth", - "company": "Teknoplexon", - "phone": "822-596-3540", - "email": "amelia@teknoplexon.com" - }, - { - "id": 861, - "guid": "98b66d8c-e04d-48df-86af-0b03f0e408da", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Nash", - "company": "Multitiqua", - "phone": "813-494-3183", - "email": "gabriella@multitiqua.com" - }, - { - "id": 862, - "guid": "b405aeac-7cc2-4231-83a7-043e1c8bacb2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Thornton", - "company": "Mescaridic", - "phone": "816-545-3824", - "email": "maria@mescaridic.com" - }, - { - "id": 863, - "guid": "27f1962a-d119-4628-95d8-50b5625d7a31", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Sherlock", - "company": "Ventanium", - "phone": "872-530-3137", - "email": "brooklyn@ventanium.com" - }, - { - "id": 864, - "guid": "7a697585-5358-4716-a52c-5429c504c97d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Haig", - "company": "Safeagra", - "phone": "823-583-2722", - "email": "evelyn@safeagra.com" - }, - { - "id": 865, - "guid": "beb01c32-7c9d-455d-b453-1af75cd2e221", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alyssa Oswald", - "company": "Dynarama", - "phone": "815-531-2545", - "email": "alyssa@dynarama.com" - }, - { - "id": 866, - "guid": "21af68dd-a7da-4b2e-8888-6db8477e7b15", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Gardner", - "company": "Keytheon", - "phone": "869-402-3429", - "email": "maya@keytheon.com" - }, - { - "id": 867, - "guid": "cdad4eab-f2c9-4862-b57c-e6902b1a594c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madison Miers", - "company": "Netseco", - "phone": "827-531-2105", - "email": "madison@netseco.com" - }, - { - "id": 868, - "guid": "438461ed-d246-49f0-845b-d1b5344c44ce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sofia Hardman", - "company": "Infragraph", - "phone": "835-576-2711", - "email": "sofia@infragraph.com" - }, - { - "id": 869, - "guid": "d2f40741-e0d1-484d-8a9a-03719bf14a0c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Oldman", - "company": "Gigaura", - "phone": "845-426-2966", - "email": "nevaeh@gigaura.com" - }, - { - "id": 870, - "guid": "bf7016a9-46fe-4b97-9e9c-e5170f8f782d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Ford", - "company": "Westtomik", - "phone": "862-470-2292", - "email": "destiny@westtomik.com" - }, - { - "id": 871, - "guid": "ace0c5da-bf27-41d0-97be-8f7967cf994c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Gilbert", - "company": "Polytheon", - "phone": "822-488-3030", - "email": "vanessa@polytheon.com" - }, - { - "id": 872, - "guid": "9678d299-0540-4153-87f4-839a33dd9d62", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Hawkins", - "company": "Allphysiche", - "phone": "828-515-2232", - "email": "kylie@allphysiche.com" - }, - { - "id": 873, - "guid": "17471b3a-c746-41b4-b523-c993773c1f29", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lillian Oliver", - "company": "Qualserve", - "phone": "868-560-3370", - "email": "lillian@qualserve.com" - }, - { - "id": 874, - "guid": "9e1a9647-05c3-4f0e-9f59-c02c285aedd8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Hawkins", - "company": "Raylog", - "phone": "830-521-2631", - "email": "bailey@raylog.com" - }, - { - "id": 875, - "guid": "e62d1235-e5f9-4d10-9dc0-639cc28cb54a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Nelson", - "company": "Techtron", - "phone": "807-541-2602", - "email": "sarah@techtron.com" - }, - { - "id": 876, - "guid": "8df05dbf-ab47-4ad6-8d0b-b25f3c33487f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Gilson", - "company": "Safetrust", - "phone": "864-586-3492", - "email": "katelyn@safetrust.com" - }, - { - "id": 877, - "guid": "e3b08fc9-3532-4e1f-885f-8f06570b0d9f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Cramer", - "company": "Netsystems", - "phone": "833-583-2640", - "email": "maya@netsystems.com" - }, - { - "id": 878, - "guid": "5c607cd6-d132-440f-aaf3-295379fda186", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Goldman", - "company": "Fibroserve", - "phone": "833-544-3866", - "email": "claire@fibroserve.com" - }, - { - "id": 879, - "guid": "4a41a9c2-4b23-499b-bbd5-2601f64f5ce7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Angelina Clapton", - "company": "Conrama", - "phone": "800-582-2572", - "email": "angelina@conrama.com" - }, - { - "id": 880, - "guid": "5274bc44-9a66-4758-b4fe-221dab188dce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Oldridge", - "company": "Openserve", - "phone": "869-433-3159", - "email": "kayla@openserve.com" - }, - { - "id": 881, - "guid": "c4e34070-ead9-4cfa-bbfa-5629fe291bd9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Owen", - "company": "Fibrotouch", - "phone": "822-585-2913", - "email": "charlotte@fibrotouch.com" - }, - { - "id": 882, - "guid": "51acc5e3-2cc0-49dc-ad3d-d2602288c48a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Thornton", - "company": "OpKeycomm", - "phone": "851-584-3939", - "email": "savannah@opkeycomm.com" - }, - { - "id": 883, - "guid": "891a6bf8-7985-4698-88e0-2e8118886644", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Freeman", - "company": "Compuamerica", - "phone": "878-422-2600", - "email": "grace@compuamerica.com" - }, - { - "id": 884, - "guid": "2274f232-3151-4337-b214-5f5c70ea700f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Webster", - "company": "Robotomic", - "phone": "839-509-2059", - "email": "emma@robotomic.com" - }, - { - "id": 885, - "guid": "c76b7100-536a-49ae-9fac-ec1fd082edb8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Gilmore", - "company": "Netsystems", - "phone": "885-486-3981", - "email": "aaliyah@netsystems.com" - }, - { - "id": 886, - "guid": "cc0135ee-2295-4d39-aa39-eb64afffda9f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Oswald", - "company": "Truegate", - "phone": "835-478-3561", - "email": "sophia@truegate.com" - }, - { - "id": 887, - "guid": "ac89678c-8d1e-4358-9530-e2dcf0fec45f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Carey", - "company": "Conotomics", - "phone": "820-488-2014", - "email": "elizabeth@conotomics.com" - }, - { - "id": 888, - "guid": "d03c139d-c12d-4bcf-9521-1487251fe6b8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Abramson", - "company": "Ameritron", - "phone": "863-547-3353", - "email": "alexis@ameritron.com" - }, - { - "id": 889, - "guid": "f80226c6-1a82-4895-bae4-ca2fccc4a70d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Wayne", - "company": "Hypervaco", - "phone": "874-598-3836", - "email": "katherine@hypervaco.com" - }, - { - "id": 890, - "guid": "858972a3-3182-4ba0-a9b7-d1f42ef9ffb5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooklyn Hodges", - "company": "Fibrotopia", - "phone": "814-413-3535", - "email": "brooklyn@fibrotopia.com" - }, - { - "id": 891, - "guid": "a14fbc6a-341d-48a4-a88a-5fd92849534e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jocelyn Hardman", - "company": "SysVenamerica", - "phone": "873-554-2225", - "email": "jocelyn@sysvenamerica.com" - }, - { - "id": 892, - "guid": "1b1992d6-b67d-492f-bf20-95a6c7a9a8f5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Watson", - "company": "Westmedia", - "phone": "889-543-2660", - "email": "morgan@westmedia.com" - }, - { - "id": 893, - "guid": "78aa78c5-7f0a-4a57-ac86-0f70dd91e89f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Oswald", - "company": "Safeagra", - "phone": "806-426-2108", - "email": "isabella@safeagra.com" - }, - { - "id": 894, - "guid": "ebc9ea4c-8dbd-46d4-8fa2-55f4990503e5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Gill", - "company": "Hypervaco", - "phone": "865-571-3792", - "email": "olivia@hypervaco.com" - }, - { - "id": 895, - "guid": "5d03caac-1b6d-4493-b2cf-1a33a08f6013", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Hancock", - "company": "Safetrust", - "phone": "888-482-2637", - "email": "alexis@safetrust.com" - }, - { - "id": 896, - "guid": "7af64709-f11c-49af-a24a-8dc0a10aebaa", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Calhoun", - "company": "Entcast", - "phone": "850-411-3075", - "email": "sophia@entcast.com" - }, - { - "id": 897, - "guid": "0993ae0e-30f8-4eac-af32-51196d96779f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Bush", - "company": "eSteganoergy", - "phone": "839-567-3595", - "email": "jasmine@esteganoergy.com" - }, - { - "id": 898, - "guid": "0baa27a5-30fd-4b7d-947e-597e18a1c88a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Campbell", - "company": "Dynarama", - "phone": "886-446-2962", - "email": "kimberly@dynarama.com" - }, - { - "id": 899, - "guid": "1633ae77-20d6-49a3-befd-2ca487ff93a3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Oliver", - "company": "Syssoft", - "phone": "825-420-3812", - "email": "isabelle@syssoft.com" - }, - { - "id": 900, - "guid": "a19964b2-408f-4a46-b70c-a2dc11aa4cec", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Cramer", - "company": "Safeagra", - "phone": "829-533-2626", - "email": "sydney@safeagra.com" - }, - { - "id": 901, - "guid": "149b9a3c-424b-4b61-8b15-2cb42ead9dab", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brianna Crossman", - "company": "Ameritron", - "phone": "814-512-2739", - "email": "brianna@ameritron.com" - }, - { - "id": 902, - "guid": "76a6747e-bce7-4e69-924f-ebd64b44e2be", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Wood", - "company": "Netsystems", - "phone": "837-565-2737", - "email": "leah@netsystems.com" - }, - { - "id": 903, - "guid": "e0fa974c-f76b-486c-9867-e313441ac50b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Gerald", - "company": "Dynarama", - "phone": "802-413-3739", - "email": "lauren@dynarama.com" - }, - { - "id": 904, - "guid": "61ea76a5-e7b2-4b12-98ed-c64f01040efa", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna WifKinson", - "company": "Navivacs", - "phone": "829-536-2350", - "email": "arianna@navivacs.com" - }, - { - "id": 905, - "guid": "88166843-bc9e-4283-b720-b0e9baf884a4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Harrison", - "company": "Techtron", - "phone": "848-595-3400", - "email": "mya@techtron.com" - }, - { - "id": 906, - "guid": "421a65dc-f831-4556-925a-5adac96e47f7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Brooks", - "company": "Inridium", - "phone": "876-600-3597", - "email": "katelyn@inridium.com" - }, - { - "id": 907, - "guid": "72ae195d-8583-428b-9bb8-1927c97b9ab5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Wood", - "company": "Conotomics", - "phone": "813-438-2628", - "email": "samantha@conotomics.com" - }, - { - "id": 908, - "guid": "e2bb0534-e013-4634-8c26-5b37d85b5e69", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Ogden", - "company": "Steganoconiche", - "phone": "815-404-3810", - "email": "avery@steganoconiche.com" - }, - { - "id": 909, - "guid": "4c42359a-fae5-4170-9785-f738928b1386", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Gilbert", - "company": "Skydata", - "phone": "861-511-3627", - "email": "brooklyn@skydata.com" - }, - { - "id": 910, - "guid": "5f4bc635-9aec-473d-bac5-a95d309cb70f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Oldman", - "company": "Videobanc", - "phone": "882-509-3996", - "email": "trinity@videobanc.com" - }, - { - "id": 911, - "guid": "62f141b5-0d44-454d-98e2-5308bd87b3ea", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Chapman", - "company": "Rapigrafix", - "phone": "889-504-2167", - "email": "olivia@rapigrafix.com" - }, - { - "id": 912, - "guid": "ce22ca08-4722-462e-9bb6-0b33042a4e3d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Chesterton", - "company": "iSkyvaco", - "phone": "815-532-3949", - "email": "serenity@iskyvaco.com" - }, - { - "id": 913, - "guid": "5d173fc5-25e1-4a4a-94d3-4175e9b2c787", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Young", - "company": "Nanobanc", - "phone": "821-502-3455", - "email": "gianna@nanobanc.com" - }, - { - "id": 914, - "guid": "77a709b1-f663-4be3-812d-877f683bcdf3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Gustman", - "company": "Mescatron", - "phone": "849-499-2278", - "email": "allison@mescatron.com" - }, - { - "id": 915, - "guid": "c08f0c28-2e0f-464c-9c09-e7d68f610c79", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Youmans", - "company": "Celgra", - "phone": "895-483-3706", - "email": "serenity@celgra.com" - }, - { - "id": 916, - "guid": "d1dbe1e2-891d-4694-ad68-9cdc54aedf25", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Campbell", - "company": "Unologic", - "phone": "890-523-2343", - "email": "katherine@unologic.com" - }, - { - "id": 917, - "guid": "073198ce-edcd-4700-ac6e-5404c11e265a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Youmans", - "company": "Sontopia", - "phone": "807-519-3570", - "email": "rachel@sontopia.com" - }, - { - "id": 918, - "guid": "184149f6-8ff3-45ce-ab14-a4361a6525d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabrielle Smith", - "company": "Unconix", - "phone": "801-583-3565", - "email": "gabrielle@unconix.com" - }, - { - "id": 919, - "guid": "1481192a-8d93-4401-8f73-de172abd1268", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Hailey", - "company": "eEyetanic", - "phone": "857-578-3384", - "email": "emma@eeyetanic.com" - }, - { - "id": 920, - "guid": "2fb8ac52-a51f-40b1-befc-2d668e802f3e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Allison Mercer", - "company": "eEyetanic", - "phone": "837-466-3639", - "email": "allison@eeyetanic.com" - }, - { - "id": 921, - "guid": "4a2c8d0c-9793-45f2-823a-5e5f2cacdf3f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Cook", - "company": "Genland", - "phone": "816-531-2283", - "email": "isabelle@genland.com" - }, - { - "id": 922, - "guid": "7d89a53c-1dbb-4bc9-9af7-1fbe04c62991", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Mercer", - "company": "Infraique", - "phone": "803-431-3539", - "email": "khloe@infraique.com" - }, - { - "id": 923, - "guid": "1464b00c-4917-4922-8bf5-af9e8d5c73e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Creighton", - "company": "Aprama", - "phone": "817-476-2723", - "email": "khloe@aprama.com" - }, - { - "id": 924, - "guid": "cf151f98-2580-4ad2-a8c0-fda2b9395a98", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Hodges", - "company": "Robotomic", - "phone": "868-487-2006", - "email": "sophia@robotomic.com" - }, - { - "id": 925, - "guid": "4f7f0789-16b8-4268-a32f-34dcc8b4fe2c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Carey", - "company": "Steganoconiche", - "phone": "847-575-3766", - "email": "audrey@steganoconiche.com" - }, - { - "id": 926, - "guid": "d99a327f-6c62-41b0-b961-75728f028341", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Gardner", - "company": "Conrama", - "phone": "810-414-2494", - "email": "taylor@conrama.com" - }, - { - "id": 927, - "guid": "bcbbe2a2-e2ee-44e0-8b25-214a9f92189b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Youmans", - "company": "Safeagra", - "phone": "872-400-3564", - "email": "autumn@safeagra.com" - }, - { - "id": 928, - "guid": "b439aaee-3050-4aa1-be89-a99bfdf43653", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie WifKinson", - "company": "Syssoft", - "phone": "881-446-3341", - "email": "melanie@syssoft.com" - }, - { - "id": 929, - "guid": "52f3aaa2-7d6c-4848-a6bd-39fd313c7953", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Oldridge", - "company": "Teraserv", - "phone": "858-544-3350", - "email": "elizabeth@teraserv.com" - }, - { - "id": 930, - "guid": "f1d2c7a1-1728-4e06-84f3-420d5b3f88c3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Sherlock", - "company": "Tekcar", - "phone": "843-561-3284", - "email": "emily@tekcar.com" - }, - { - "id": 931, - "guid": "c49e3d34-6e59-4968-b86b-ac3ba8f16f63", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Freeman", - "company": "Technogra", - "phone": "863-563-2375", - "email": "rachel@technogra.com" - }, - { - "id": 932, - "guid": "ae9c7fdc-d643-4959-9080-16cbcadd94a8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Timmons", - "company": "Raylog", - "phone": "845-522-2393", - "email": "kaylee@raylog.com" - }, - { - "id": 933, - "guid": "22c9ca28-3897-4972-9302-f0a90b555bf6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Clapton", - "company": "Rapigrafix", - "phone": "853-418-2125", - "email": "brooke@rapigrafix.com" - }, - { - "id": 934, - "guid": "0b499fc4-4568-43ef-89e0-a63df37e2a1f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Melanie Thomson", - "company": "Qualserve", - "phone": "850-487-2135", - "email": "melanie@qualserve.com" - }, - { - "id": 935, - "guid": "346cec2b-1fd4-46cc-a413-d999de360590", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Hodges", - "company": "Skydata", - "phone": "821-530-3613", - "email": "avery@skydata.com" - }, - { - "id": 936, - "guid": "519ee15e-8e2f-4892-807e-6cea6fe94319", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Nathan", - "company": "Allnet", - "phone": "854-546-3754", - "email": "autumn@allnet.com" - }, - { - "id": 937, - "guid": "b1579676-22dd-41b0-a6ec-7b0c24c1b6fc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Conors", - "company": "Mescaridic", - "phone": "872-488-3001", - "email": "bella@mescaridic.com" - }, - { - "id": 938, - "guid": "bbc0dc42-17a0-4dfb-9564-ee1ae23e95b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Otis", - "company": "Titanigraf", - "phone": "845-403-3384", - "email": "serenity@titanigraf.com" - }, - { - "id": 939, - "guid": "054c916f-1bec-4c39-aa5c-d92f8248a8ea", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Hamphrey", - "company": "Technogra", - "phone": "848-517-2396", - "email": "molly@technogra.com" - }, - { - "id": 940, - "guid": "e4f4f375-eafa-49cb-aa18-f6f4d9e54f5a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Webster", - "company": "Dynarama", - "phone": "841-490-3028", - "email": "maya@dynarama.com" - }, - { - "id": 941, - "guid": "055734c4-7bb7-4f1b-ab92-72bfdd695873", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Neal", - "company": "Turbomart", - "phone": "833-476-3564", - "email": "chloe@turbomart.com" - }, - { - "id": 942, - "guid": "08adb34b-7063-4854-992b-a04b9540ff99", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Eva Abramson", - "company": "Jamrola", - "phone": "843-444-2259", - "email": "eva@jamrola.com" - }, - { - "id": 943, - "guid": "2248f5b3-a14c-4923-a725-a09c14574515", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Hamphrey", - "company": "Teratopia", - "phone": "831-584-2648", - "email": "hannah@teratopia.com" - }, - { - "id": 944, - "guid": "db8d68cd-b859-4f12-a3ce-feaabdc63c3b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Wainwright", - "company": "Nanobanc", - "phone": "811-555-2035", - "email": "sarah@nanobanc.com" - }, - { - "id": 945, - "guid": "4b4bc01d-0980-4521-9d9f-d4d4f39ae8df", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabriella Wesley", - "company": "Orthomedia", - "phone": "845-448-2797", - "email": "gabriella@orthomedia.com" - }, - { - "id": 946, - "guid": "d29f66ba-fc64-4781-b31f-dd46fbb416b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Faith Higgins", - "company": "Pacwest", - "phone": "826-414-2399", - "email": "faith@pacwest.com" - }, - { - "id": 947, - "guid": "96361af3-993b-44a1-b3ec-6761a66df66c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Michaelson", - "company": "Syssoft", - "phone": "889-407-2246", - "email": "emily@syssoft.com" - }, - { - "id": 948, - "guid": "b7c5d293-99a6-49f8-842f-41ab26c752e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Winter", - "company": "Skydata", - "phone": "878-529-2208", - "email": "anna@skydata.com" - }, - { - "id": 949, - "guid": "d56976c3-e857-4bf7-96e4-9452a97a68fa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Sheldon", - "company": "Tekcar", - "phone": "870-402-2385", - "email": "hailey@tekcar.com" - }, - { - "id": 950, - "guid": "d5f37a04-ac8a-44d6-8a18-33ef4363bedb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Harrison", - "company": "Allnet", - "phone": "804-401-2618", - "email": "sarah@allnet.com" - }, - { - "id": 951, - "guid": "8d9a7ab3-2a27-4829-bd43-d3b0976628c9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Oldman", - "company": "Tekcar", - "phone": "892-541-3100", - "email": "serenity@tekcar.com" - }, - { - "id": 952, - "guid": "893d4b9c-5071-4c03-a3a8-68176c689358", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Smith", - "company": "RoboAerlogix", - "phone": "864-493-2232", - "email": "mya@roboaerlogix.com" - }, - { - "id": 953, - "guid": "9d84f8a4-2c16-4252-848a-71107528e4f4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Oldman", - "company": "iSkyvaco", - "phone": "866-537-2504", - "email": "payton@iskyvaco.com" - }, - { - "id": 954, - "guid": "727c4ef7-e232-4f59-aae4-d4f56a329e6b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Crossman", - "company": "Titanirola", - "phone": "806-480-3310", - "email": "natalie@titanirola.com" - }, - { - "id": 955, - "guid": "faae03d2-c29e-4291-ba51-5f00674d7fa0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Calhoun", - "company": "Genland", - "phone": "837-542-2720", - "email": "eva@genland.com" - }, - { - "id": 956, - "guid": "4719871f-8383-4764-8a33-de128069a221", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Oldman", - "company": "Videobanc", - "phone": "827-471-3334", - "email": "andrea@videobanc.com" - }, - { - "id": 957, - "guid": "c64763da-fcb9-4724-b6d7-06e52eb15153", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Vaughan", - "company": "Transtouch", - "phone": "838-408-3787", - "email": "autumn@transtouch.com" - }, - { - "id": 958, - "guid": "ddf8525a-fcc7-42b5-8ab6-3e3c94cb557f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Adamson", - "company": "Robotemplate", - "phone": "896-553-2689", - "email": "eva@robotemplate.com" - }, - { - "id": 959, - "guid": "6cf51a4e-a566-45f9-9a43-04bb92b35fc1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mariah Webster", - "company": "Inridium", - "phone": "848-431-2822", - "email": "mariah@inridium.com" - }, - { - "id": 960, - "guid": "e11d4e32-ef44-453b-b1d8-c40731523390", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Brooks", - "company": "Ameritron", - "phone": "870-548-3244", - "email": "caroline@ameritron.com" - }, - { - "id": 961, - "guid": "c9d13cf1-d3a0-4fe3-9b3b-bab88d702a45", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexandra Wesley", - "company": "RoboAerlogix", - "phone": "881-529-2764", - "email": "alexandra@roboaerlogix.com" - }, - { - "id": 962, - "guid": "5dfb3943-3694-432f-84a1-2b9ae14b2e14", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Gilson", - "company": "Openserve", - "phone": "887-459-3159", - "email": "isabella@openserve.com" - }, - { - "id": 963, - "guid": "0a48fde1-be68-49db-89d6-f57d8a8febe8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Nathan", - "company": "Polytheon", - "phone": "844-555-3928", - "email": "destiny@polytheon.com" - }, - { - "id": 964, - "guid": "39d6ca84-08a3-4def-946e-8f4a08c9354a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooke Oldman", - "company": "Venconix", - "phone": "852-553-3988", - "email": "brooke@venconix.com" - }, - { - "id": 965, - "guid": "8c3b2304-b47a-49cb-82cf-acb478490b09", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Harrison", - "company": "Sontopia", - "phone": "817-447-2271", - "email": "lily@sontopia.com" - }, - { - "id": 966, - "guid": "d612fbda-5a16-4ef7-b1cc-b62589df2bcc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Day", - "company": "iSkyvaco", - "phone": "860-545-3499", - "email": "brooke@iskyvaco.com" - }, - { - "id": 967, - "guid": "b83194f4-51ed-4da7-81dc-85fc3d4efab3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Miln", - "company": "Techtron", - "phone": "894-575-2515", - "email": "ella@techtron.com" - }, - { - "id": 968, - "guid": "94eac91a-e010-4884-ba6e-d9061bfacba7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Chesterton", - "company": "Robotomic", - "phone": "895-526-3321", - "email": "eva@robotomic.com" - }, - { - "id": 969, - "guid": "84b0927e-8590-42ec-b9a2-56c89edab7d3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Mercer", - "company": "Cryptotegrity", - "phone": "836-421-2536", - "email": "arianna@cryptotegrity.com" - }, - { - "id": 970, - "guid": "b9583517-2606-4df1-8bd5-beb0ab4f874a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Wesley", - "company": "Allnet", - "phone": "851-401-3849", - "email": "payton@allnet.com" - }, - { - "id": 971, - "guid": "98e49297-69f4-43b6-b9c8-fa5f32dbfc4c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Watson", - "company": "Raylog", - "phone": "808-445-2858", - "email": "layla@raylog.com" - }, - { - "id": 972, - "guid": "4652cc56-6ed3-4476-8fce-24fb2ff5b9be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Miln", - "company": "Conrama", - "phone": "878-522-2526", - "email": "natalie@conrama.com" - }, - { - "id": 973, - "guid": "310aa092-c848-45ea-ad22-50dd4efc36bf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Molly Gerald", - "company": "Vencom", - "phone": "886-453-3139", - "email": "molly@vencom.com" - }, - { - "id": 974, - "guid": "ac2bb01e-8b90-4571-a672-088aac98d849", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Goldman", - "company": "eEyetanic", - "phone": "847-455-3619", - "email": "madelyn@eeyetanic.com" - }, - { - "id": 975, - "guid": "e6e410ad-f8ab-4992-b7eb-0e9ef73d98c5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Amelia Wainwright", - "company": "Systheon", - "phone": "845-529-3762", - "email": "amelia@systheon.com" - }, - { - "id": 976, - "guid": "bcbfab4b-4f09-4ec9-ac4f-f4bfe3a1a3b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Owen", - "company": "iSkyvaco", - "phone": "813-442-2519", - "email": "eva@iskyvaco.com" - }, - { - "id": 977, - "guid": "324d088f-eb7b-4134-ab05-f8d186c8658d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Gilmore", - "company": "Nanobanc", - "phone": "896-485-3683", - "email": "katelyn@nanobanc.com" - }, - { - "id": 978, - "guid": "5871b38b-f7a4-487a-a2cd-96e0feb372c9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ella Galbraith", - "company": "iSkyvaco", - "phone": "888-540-2187", - "email": "ella@iskyvaco.com" - }, - { - "id": 979, - "guid": "fc731bcc-91f8-464d-bfac-148e235fa241", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Miln", - "company": "US Infratouch", - "phone": "816-536-3528", - "email": "ella@us infratouch.com" - }, - { - "id": 980, - "guid": "6e049b47-d080-4eba-b214-154ec52a5522", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Fisher", - "company": "Fibrotouch", - "phone": "830-587-3656", - "email": "brooklyn@fibrotouch.com" - }, - { - "id": 981, - "guid": "a857fd62-f56b-4273-8705-04911b2b3179", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Oswald", - "company": "Titanirola", - "phone": "896-441-2819", - "email": "zoey@titanirola.com" - }, - { - "id": 982, - "guid": "77eae683-5582-47d1-8ec0-fce80cab45b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Michaelson", - "company": "Videobanc", - "phone": "814-483-2961", - "email": "aaliyah@videobanc.com" - }, - { - "id": 983, - "guid": "a1165f08-35c1-47d1-ae96-ee46ca74d56a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Freeman", - "company": "RoboAerlogix", - "phone": "815-585-2737", - "email": "taylor@roboaerlogix.com" - }, - { - "id": 984, - "guid": "4d6f54e9-2bd6-448f-aabf-719a3da5f2ba", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Watson", - "company": "Westmedia", - "phone": "899-517-3599", - "email": "ava@westmedia.com" - }, - { - "id": 985, - "guid": "2b167e81-b3d7-4528-9296-a124bd1a825a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Osborne", - "company": "Pericenta", - "phone": "826-549-3657", - "email": "makayla@pericenta.com" - }, - { - "id": 986, - "guid": "1a463433-4a51-4dea-9366-70970d717c3c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Carey", - "company": "Superscope", - "phone": "846-446-2918", - "email": "mariah@superscope.com" - }, - { - "id": 987, - "guid": "07804def-94cb-4e87-9215-eb0156a0dd2d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Haig", - "company": "Keytheon", - "phone": "817-562-3338", - "email": "bella@keytheon.com" - }, - { - "id": 988, - "guid": "e6e6fa98-25d9-4191-a10b-75ec0bb53798", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Brickman", - "company": "Xeicon", - "phone": "813-541-3096", - "email": "alexa@xeicon.com" - }, - { - "id": 989, - "guid": "bde12fc6-f1cb-41c3-90cc-5c5f3ae99c8b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Galbraith", - "company": "Netsystems", - "phone": "812-583-2811", - "email": "katelyn@netsystems.com" - }, - { - "id": 990, - "guid": "a3bfecc3-e8d5-4212-8c97-cc9d44601c26", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Ward", - "company": "Airdyne", - "phone": "832-576-3421", - "email": "addison@airdyne.com" - }, - { - "id": 991, - "guid": "62e56270-9ff3-46a5-b0cf-b4d112d8302f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jasmine Hardman", - "company": "Turbomart", - "phone": "866-577-2348", - "email": "jasmine@turbomart.com" - }, - { - "id": 992, - "guid": "9e157044-28a5-4667-a3c3-f41216598b56", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Cook", - "company": "Tekcar", - "phone": "810-547-2973", - "email": "hannah@tekcar.com" - }, - { - "id": 993, - "guid": "226248a0-e502-433c-ab0d-5b63643e748d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Neal", - "company": "Titanigraf", - "phone": "856-480-3621", - "email": "katherine@titanigraf.com" - }, - { - "id": 994, - "guid": "24d6fb0d-7f54-4f49-9492-7227ac111c01", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Watson", - "company": "Polytheon", - "phone": "844-443-2924", - "email": "mya@polytheon.com" - }, - { - "id": 995, - "guid": "0fea3362-ef3f-45f8-99f2-613576c2c7e0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Vance", - "company": "Tekcar", - "phone": "882-448-2169", - "email": "jocelyn@tekcar.com" - }, - { - "id": 996, - "guid": "52e4e241-e8dd-4146-8f2e-513cc3239a22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Chesterton", - "company": "Jamrola", - "phone": "884-429-2640", - "email": "taylor@jamrola.com" - }, - { - "id": 997, - "guid": "e34a4c6f-3932-464b-be05-88aff3ba069b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alyssa Ford", - "company": "Westmedia", - "phone": "850-466-2410", - "email": "alyssa@westmedia.com" - }, - { - "id": 998, - "guid": "a26e0848-1785-4486-938f-68d5d0eb9d9b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Miers", - "company": "US Omnigraphik", - "phone": "878-531-2705", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 999, - "guid": "cc8c99c5-51fd-48be-a305-c67b54c4f86b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Wayne", - "company": "Openserve", - "phone": "882-600-2888", - "email": "kaitlyn@openserve.com" - }, - { - "id": 1000, - "guid": "90f9908f-2990-4037-8df5-32323a290b8b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Charlson", - "company": "Ventanium", - "phone": "832-428-3898", - "email": "sarah@ventanium.com" - }, - { - "id": 1001, - "guid": "cf18d88f-945e-4b85-87f0-80b4e6f3d6e6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jocelyn Calhoun", - "company": "InfoAirway", - "phone": "870-544-2165", - "email": "jocelyn@infoairway.com" - }, - { - "id": 1002, - "guid": "8b84a745-a220-4b4d-a54a-2d141a0f5a9e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Watson", - "company": "Vencom", - "phone": "886-544-3808", - "email": "paige@vencom.com" - }, - { - "id": 1003, - "guid": "f53e86ab-3efa-4335-ac06-445931e78055", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Hamphrey", - "company": "Keytheon", - "phone": "827-442-2717", - "email": "arianna@keytheon.com" - }, - { - "id": 1004, - "guid": "7606b209-4e08-4a52-a21d-90bb250871ae", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Goldman", - "company": "Sontopia", - "phone": "875-414-2900", - "email": "gabrielle@sontopia.com" - }, - { - "id": 1005, - "guid": "d9f512bf-753e-40a9-b136-b370f2419d98", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Brown", - "company": "Enlogia", - "phone": "851-578-3062", - "email": "isabella@enlogia.com" - }, - { - "id": 1006, - "guid": "1d9aa654-0f44-406c-8fef-eae5fa27c0a8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Samantha Hardman", - "company": "Westtomik", - "phone": "838-550-3248", - "email": "samantha@westtomik.com" - }, - { - "id": 1007, - "guid": "cfcacc9e-660e-450e-8198-d8e03d8cd5de", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Angelina Vance", - "company": "Venconix", - "phone": "846-501-2337", - "email": "angelina@venconix.com" - }, - { - "id": 1008, - "guid": "c04dff1b-a020-40e2-9c2a-c9615db97678", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Sheldon", - "company": "Unconix", - "phone": "813-455-2369", - "email": "arianna@unconix.com" - }, - { - "id": 1009, - "guid": "4395748e-8b20-4b4f-9d47-bffd2ff8209a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Caroline Freeman", - "company": "Hypervaco", - "phone": "862-556-3234", - "email": "caroline@hypervaco.com" - }, - { - "id": 1010, - "guid": "0a790b51-a502-41bd-a969-8b82453295f9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Freeman", - "company": "iQualcar", - "phone": "802-500-2818", - "email": "kaitlyn@iqualcar.com" - }, - { - "id": 1011, - "guid": "435b901a-d82f-45d2-ab4d-54bf5c473883", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Gustman", - "company": "Thermotomic", - "phone": "861-526-2797", - "email": "melanie@thermotomic.com" - }, - { - "id": 1012, - "guid": "d6ea8433-2007-47a6-9dc8-47932639edcf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Natalie Warren", - "company": "Superscope", - "phone": "858-515-3845", - "email": "natalie@superscope.com" - }, - { - "id": 1013, - "guid": "63be25a4-6f02-42e9-a4a9-14c2f3775877", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Smith", - "company": "Qualserve", - "phone": "829-562-3989", - "email": "avery@qualserve.com" - }, - { - "id": 1014, - "guid": "6f2bb65c-fd1a-4ed7-9975-7df04696f5a7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Miln", - "company": "Technogra", - "phone": "875-534-2084", - "email": "molly@technogra.com" - }, - { - "id": 1015, - "guid": "4254402e-2fc8-4653-8f71-e3e9dfda4282", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Campbell", - "company": "Openserve", - "phone": "894-488-2998", - "email": "camila@openserve.com" - }, - { - "id": 1016, - "guid": "1c2a4adf-b860-46e4-b850-2faa30d9eb70", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Melanie Hoggarth", - "company": "Fibrotouch", - "phone": "851-501-3226", - "email": "melanie@fibrotouch.com" - }, - { - "id": 1017, - "guid": "1c2c50f0-02fe-4c06-b402-bfb6df7fc3c8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Warren", - "company": "Dynarama", - "phone": "801-449-2149", - "email": "grace@dynarama.com" - }, - { - "id": 1018, - "guid": "602c9514-57db-4b46-ad31-23c78a420354", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Waller", - "company": "Rapigrafix", - "phone": "847-449-2659", - "email": "madelyn@rapigrafix.com" - }, - { - "id": 1019, - "guid": "f553e113-da6f-4aa6-9076-9b02828aa6f5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Oswald", - "company": "Titanigraf", - "phone": "880-590-2234", - "email": "kaylee@titanigraf.com" - }, - { - "id": 1020, - "guid": "729780b4-d055-4a2f-b35a-af7cbd29e8bc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Young", - "company": "Ameritron", - "phone": "829-503-2525", - "email": "ariana@ameritron.com" - }, - { - "id": 1021, - "guid": "85d516a3-f75a-4667-8892-cbc7ff2413aa", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Rachel Carroll", - "company": "Steganoconiche", - "phone": "890-495-2026", - "email": "rachel@steganoconiche.com" - }, - { - "id": 1022, - "guid": "93653c28-1366-40e0-b8b9-6fd455a04ed4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Cramer", - "company": "Fibroserve", - "phone": "874-461-2763", - "email": "chloe@fibroserve.com" - }, - { - "id": 1023, - "guid": "d195df6e-5552-45fd-8158-22d4586c413b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Cramer", - "company": "Cryptotemplate", - "phone": "835-596-3939", - "email": "bella@cryptotemplate.com" - }, - { - "id": 1024, - "guid": "9c82e2b3-1ea8-45ca-a102-ac5de511a6d4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Timmons", - "company": "Netsystems", - "phone": "815-591-2594", - "email": "claire@netsystems.com" - }, - { - "id": 1025, - "guid": "a630b389-2f50-4f00-ba69-ccc60ac07d70", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Daniels", - "company": "Airdyne", - "phone": "857-450-3356", - "email": "savannah@airdyne.com" - }, - { - "id": 1026, - "guid": "dc80ddd4-2e97-4382-a4e9-72e8f9e06000", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Owen", - "company": "Transtouch", - "phone": "893-557-3064", - "email": "katherine@transtouch.com" - }, - { - "id": 1027, - "guid": "885b1237-1516-4ade-974c-af9156843b36", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoe Chapman", - "company": "Inridium", - "phone": "802-503-3573", - "email": "zoe@inridium.com" - }, - { - "id": 1028, - "guid": "583ef78e-5f4d-4ace-b954-467b432d7f42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Watson", - "company": "iQualcar", - "phone": "827-543-2904", - "email": "taylor@iqualcar.com" - }, - { - "id": 1029, - "guid": "ddfe7cfe-1bf9-41a6-8606-4c9e58566219", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney White", - "company": "Raylog", - "phone": "892-524-2130", - "email": "sydney@raylog.com" - }, - { - "id": 1030, - "guid": "abea1162-635c-417e-8cc1-d02ed04cc6af", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Nelson", - "company": "Qualserve", - "phone": "822-428-2931", - "email": "jessica@qualserve.com" - }, - { - "id": 1031, - "guid": "a4b4faff-bad5-4fae-b2fb-5de283aa71f5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Molligan", - "company": "Netsystems", - "phone": "862-430-3470", - "email": "khloe@netsystems.com" - }, - { - "id": 1032, - "guid": "f3521ac2-bac5-4601-a757-196d1fc60393", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Waller", - "company": "Enlogia", - "phone": "864-496-3074", - "email": "ava@enlogia.com" - }, - { - "id": 1033, - "guid": "e4f305aa-eb0f-4e1e-bb55-617ffab58099", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Cramer", - "company": "Truetomic", - "phone": "856-448-3836", - "email": "ashley@truetomic.com" - }, - { - "id": 1034, - "guid": "d4c6e9c5-e02b-46a5-aae1-c524381edd5c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Carter", - "company": "Fibrotouch", - "phone": "825-405-3457", - "email": "mariah@fibrotouch.com" - }, - { - "id": 1035, - "guid": "ae3ce486-de59-4d0b-8f72-b1125bee0e2f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Gilson", - "company": "Airdyne", - "phone": "885-412-2364", - "email": "riley@airdyne.com" - }, - { - "id": 1036, - "guid": "475967a1-baad-40b1-bec4-c81e356c12e5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Wainwright", - "company": "US Omnigraphik", - "phone": "836-453-3748", - "email": "katherine@us omnigraphik.com" - }, - { - "id": 1037, - "guid": "21d498ed-1f8a-457b-aedb-b6bf6f078ec9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Hodges", - "company": "Xeicon", - "phone": "823-510-3385", - "email": "destiny@xeicon.com" - }, - { - "id": 1038, - "guid": "cf3d9023-757a-4408-93f0-4a3c0afb965c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Carrington", - "company": "Gigaura", - "phone": "884-456-3990", - "email": "anna@gigaura.com" - }, - { - "id": 1039, - "guid": "12387a3a-9697-42a8-9ff6-d1872f99b89d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Goodman", - "company": "Proline", - "phone": "810-449-2647", - "email": "angelina@proline.com" - }, - { - "id": 1040, - "guid": "7094833c-2624-4453-b45b-eefcc8ac3267", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Brickman", - "company": "Techtron", - "phone": "889-583-2960", - "email": "arianna@techtron.com" - }, - { - "id": 1041, - "guid": "eeb6f3ea-bbb7-4de8-8fa0-ddd4bdf3d664", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Chapman", - "company": "Titanirola", - "phone": "820-569-3121", - "email": "eva@titanirola.com" - }, - { - "id": 1042, - "guid": "725af95c-3d07-4c2d-9551-3a3163c377f0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Nelson", - "company": "Rapigrafix", - "phone": "859-505-3611", - "email": "andrea@rapigrafix.com" - }, - { - "id": 1043, - "guid": "3dca203a-6fda-40a9-8ba0-11d721746305", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Higgins", - "company": "Ameritron", - "phone": "884-443-3611", - "email": "ella@ameritron.com" - }, - { - "id": 1044, - "guid": "6b8b5b7d-8b8a-4799-9e2f-676c07534fe7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Neal", - "company": "eSteganoergy", - "phone": "894-499-3747", - "email": "caroline@esteganoergy.com" - }, - { - "id": 1045, - "guid": "afee5e4a-c41b-44e2-9a4c-405edd0c510b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Harrison", - "company": "Mescaridic", - "phone": "867-455-2187", - "email": "jasmine@mescaridic.com" - }, - { - "id": 1046, - "guid": "da22441b-024c-4619-817e-67d7e046e27d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Hamphrey", - "company": "Aluco", - "phone": "873-599-3479", - "email": "genesis@aluco.com" - }, - { - "id": 1047, - "guid": "a561197c-f474-449a-a51c-e1bc628082bd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Charlotte Brooks", - "company": "Westmedia", - "phone": "848-447-3000", - "email": "charlotte@westmedia.com" - }, - { - "id": 1048, - "guid": "de2eb7c5-7e18-4edf-87f9-f5081eb0eab9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Galbraith", - "company": "RoboAerlogix", - "phone": "811-439-3943", - "email": "ava@roboaerlogix.com" - }, - { - "id": 1049, - "guid": "f90adbca-c34c-44b2-af90-81f1e7cb4813", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Webster", - "company": "Mescaridic", - "phone": "887-423-3091", - "email": "caroline@mescaridic.com" - }, - { - "id": 1050, - "guid": "a2953a4e-c34c-4ded-9186-1f8773141763", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alyssa Vance", - "company": "Truegate", - "phone": "822-516-3577", - "email": "alyssa@truegate.com" - }, - { - "id": 1051, - "guid": "c1bd2d6e-d935-4499-8ea8-48a828ff3748", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Miln", - "company": "Gigaura", - "phone": "882-406-2967", - "email": "sophia@gigaura.com" - }, - { - "id": 1052, - "guid": "f70a06fe-d8bb-4a52-a4fd-a7551adc2681", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Hodges", - "company": "Allnet", - "phone": "802-526-2649", - "email": "brooklyn@allnet.com" - }, - { - "id": 1053, - "guid": "fc81cdec-f9e5-49ac-a78f-dacf0cb157af", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Galbraith", - "company": "eSteganoergy", - "phone": "841-525-3014", - "email": "alexa@esteganoergy.com" - }, - { - "id": 1054, - "guid": "c62ba905-27b7-42be-af69-a360693fbd7a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Paige Neal", - "company": "eSteganoergy", - "phone": "848-445-2507", - "email": "paige@esteganoergy.com" - }, - { - "id": 1055, - "guid": "ad9981d9-8f39-47a1-865b-e8d325f1368b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Hailey", - "company": "Genland", - "phone": "895-557-2879", - "email": "kaylee@genland.com" - }, - { - "id": 1056, - "guid": "4304e89c-cb3d-44e4-8c6d-234b8aa6de41", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Thorndike", - "company": "Teraserv", - "phone": "808-463-3524", - "email": "taylor@teraserv.com" - }, - { - "id": 1057, - "guid": "5926703e-7347-45ff-85a1-040a15a2c12c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Gilson", - "company": "Systheon", - "phone": "823-584-2444", - "email": "paige@systheon.com" - }, - { - "id": 1058, - "guid": "5eca478f-328a-486d-88c3-58b3a74414f1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Calhoun", - "company": "SysUSA", - "phone": "853-519-2524", - "email": "mackenzie@sysusa.com" - }, - { - "id": 1059, - "guid": "1a57b013-57f2-451c-aa65-38780ab7ef05", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Gibbs", - "company": "eSteganoergy", - "phone": "823-498-2790", - "email": "bella@esteganoergy.com" - }, - { - "id": 1060, - "guid": "ca1e5dd0-b61f-41a3-aaa1-b159e01196d5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Paige Clapton", - "company": "Xeicon", - "phone": "823-444-3331", - "email": "paige@xeicon.com" - }, - { - "id": 1061, - "guid": "c2b3eaa8-0260-4362-9386-fdebd59e03f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Gardner", - "company": "Netseco", - "phone": "874-471-2124", - "email": "julia@netseco.com" - }, - { - "id": 1062, - "guid": "9f97d255-f902-4ab6-9b85-af33808e8728", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Vaughan", - "company": "OpKeycomm", - "phone": "846-436-3490", - "email": "andrea@opkeycomm.com" - }, - { - "id": 1063, - "guid": "94e1e595-a5ea-407f-beeb-7c4da3a7bb9f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Walkman", - "company": "Aprama", - "phone": "878-459-3121", - "email": "samantha@aprama.com" - }, - { - "id": 1064, - "guid": "0cd97dd1-22cc-4fff-93a6-747021f6b6a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Angelina Walkman", - "company": "iMedconik", - "phone": "824-528-2503", - "email": "angelina@imedconik.com" - }, - { - "id": 1065, - "guid": "e65a70ac-c37e-4168-93a1-bdf65f590d26", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Miln", - "company": "RoboAerlogix", - "phone": "829-413-2182", - "email": "trinity@roboaerlogix.com" - }, - { - "id": 1066, - "guid": "bc3831da-2eb0-4213-9e42-56f43c62a0db", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Cook", - "company": "Aluco", - "phone": "854-400-3129", - "email": "sophie@aluco.com" - }, - { - "id": 1067, - "guid": "fd65edf8-18f7-41c3-85a2-2a614eadb133", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Chandter", - "company": "Mescatron", - "phone": "877-411-2507", - "email": "hailey@mescatron.com" - }, - { - "id": 1068, - "guid": "c6a7cccf-ff60-46f4-9be0-d0b8fe8a96f9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Conors", - "company": "Superscope", - "phone": "813-532-2956", - "email": "julia@superscope.com" - }, - { - "id": 1069, - "guid": "7ff3bb69-85bd-4557-8946-439c2a12f476", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Carter", - "company": "Aprama", - "phone": "801-425-2109", - "email": "valeria@aprama.com" - }, - { - "id": 1070, - "guid": "e0b29462-6d79-4ea1-bb0a-d0bec0d710ca", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Fisher", - "company": "Conrama", - "phone": "863-521-2911", - "email": "natalie@conrama.com" - }, - { - "id": 1071, - "guid": "45da4941-f9ba-4a49-a8da-75e678e837e5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Young", - "company": "Aprama", - "phone": "861-442-2290", - "email": "leah@aprama.com" - }, - { - "id": 1072, - "guid": "6fb7d179-479d-474c-8d53-ee8fe0892efe", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Fisher", - "company": "Steganoconiche", - "phone": "855-505-3399", - "email": "jocelyn@steganoconiche.com" - }, - { - "id": 1073, - "guid": "c6127ee5-8f75-479d-ad98-e250a7e2f7bc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Ogden", - "company": "Qualserve", - "phone": "847-540-3327", - "email": "madeline@qualserve.com" - }, - { - "id": 1074, - "guid": "12bc265f-29f1-4f78-88df-1319ecd20567", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Hardman", - "company": "Textiqua", - "phone": "888-528-2036", - "email": "brianna@textiqua.com" - }, - { - "id": 1075, - "guid": "9a82a9c7-33e2-435c-b28e-215f2e1004fb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Otis", - "company": "Openserve", - "phone": "875-592-2703", - "email": "kylie@openserve.com" - }, - { - "id": 1076, - "guid": "ffff553c-8e39-4677-96b1-569230754f90", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Thornton", - "company": "Ameritron", - "phone": "873-422-2632", - "email": "gabrielle@ameritron.com" - }, - { - "id": 1077, - "guid": "529cc2d0-ef2a-49e5-acfd-ab6a4e47fd30", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Goodman", - "company": "Jamconik", - "phone": "858-591-3800", - "email": "maria@jamconik.com" - }, - { - "id": 1078, - "guid": "65be58f0-9b07-4bc1-ac47-f340673aedf7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Walkman", - "company": "Proline", - "phone": "889-596-2454", - "email": "aaliyah@proline.com" - }, - { - "id": 1079, - "guid": "a825f130-9041-4189-bc25-be4c841b2191", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Charlson", - "company": "US Omnigraphik", - "phone": "875-447-3760", - "email": "nevaeh@us omnigraphik.com" - }, - { - "id": 1080, - "guid": "32ad25fa-45a4-41e7-becd-764550b61aed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Gilson", - "company": "Orthosoft", - "phone": "853-435-3943", - "email": "savannah@orthosoft.com" - }, - { - "id": 1081, - "guid": "9457a8e8-9c97-4e32-a4e7-3f89e2bfedd0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Davidson", - "company": "Westgate", - "phone": "800-559-3642", - "email": "vanessa@westgate.com" - }, - { - "id": 1082, - "guid": "87ba0759-5a45-4efe-b565-8d9810886832", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Young", - "company": "Teratopia", - "phone": "804-494-3664", - "email": "abigail@teratopia.com" - }, - { - "id": 1083, - "guid": "4172d1cc-93c1-44a2-9ec9-0b318d9e9d84", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Wayne", - "company": "SysVenamerica", - "phone": "875-497-3726", - "email": "bella@sysvenamerica.com" - }, - { - "id": 1084, - "guid": "723d93ab-10e4-40b4-9383-939ae1f09ef3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Camila Miln", - "company": "Generola", - "phone": "826-556-2431", - "email": "camila@generola.com" - }, - { - "id": 1085, - "guid": "357aaca0-6070-4e7f-b85e-602953973f1a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Haig", - "company": "SysVenamerica", - "phone": "885-542-2689", - "email": "addison@sysvenamerica.com" - }, - { - "id": 1086, - "guid": "8b75ab58-09a5-48c4-9de8-558be689f361", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Mercer", - "company": "Titanirola", - "phone": "828-413-2079", - "email": "layla@titanirola.com" - }, - { - "id": 1087, - "guid": "883bcaeb-1799-4bf2-8d75-794c4ca99050", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Davidson", - "company": "Steganoconiche", - "phone": "843-449-3673", - "email": "serenity@steganoconiche.com" - }, - { - "id": 1088, - "guid": "85cffe95-9db3-4f69-858a-0c39457042aa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Hardman", - "company": "SysUSA", - "phone": "893-439-2766", - "email": "madelyn@sysusa.com" - }, - { - "id": 1089, - "guid": "d4fde199-e5f2-46d6-aa70-adbb3bd84b8f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Hailey", - "company": "Unologic", - "phone": "830-568-2662", - "email": "rachel@unologic.com" - }, - { - "id": 1090, - "guid": "19edb23c-b11d-4a10-b7ab-6cdc581ab93b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Freeman", - "company": "Truegate", - "phone": "817-411-3379", - "email": "bella@truegate.com" - }, - { - "id": 1091, - "guid": "8c6ec4a8-c458-4b25-afe5-5952830f181b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Natalie Creighton", - "company": "Westtomik", - "phone": "801-583-3901", - "email": "natalie@westtomik.com" - }, - { - "id": 1092, - "guid": "a21a1cdd-a2d5-42a3-95f3-996d002d9c1d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Fulton", - "company": "Idmax", - "phone": "855-587-2641", - "email": "serenity@idmax.com" - }, - { - "id": 1093, - "guid": "f93f03ae-3be9-45b9-b01c-3751d774ddf8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Waller", - "company": "Multitiqua", - "phone": "892-571-3839", - "email": "abigail@multitiqua.com" - }, - { - "id": 1094, - "guid": "90f984ed-2ccd-48fe-974c-7f0ac909bdd9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Goldman", - "company": "Fibrotopia", - "phone": "833-452-2869", - "email": "anna@fibrotopia.com" - }, - { - "id": 1095, - "guid": "e3fa5bfb-29c2-4c94-be9f-f306b6382b06", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Chapman", - "company": "Techtron", - "phone": "882-433-2699", - "email": "gianna@techtron.com" - }, - { - "id": 1096, - "guid": "7d75186b-50f5-49f5-8f62-fb0dbe511827", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Molligan", - "company": "Robotomic", - "phone": "824-456-2526", - "email": "jessica@robotomic.com" - }, - { - "id": 1097, - "guid": "2768d485-1008-4b83-af4f-e5a3e23166d3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Wood", - "company": "Westgate", - "phone": "827-529-2203", - "email": "sophia@westgate.com" - }, - { - "id": 1098, - "guid": "41f7873b-7de2-4183-9a2e-6b11f4ca51cb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Waller", - "company": "Enlogia", - "phone": "856-566-2641", - "email": "avery@enlogia.com" - }, - { - "id": 1099, - "guid": "f9a0001d-85c6-45e6-8166-8f5dbf52c1bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Miller", - "company": "Techtron", - "phone": "822-505-2265", - "email": "ava@techtron.com" - }, - { - "id": 1100, - "guid": "2d4c3aa6-4d91-4d84-8c64-865ef21b8aa3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Fulton", - "company": "Safetrust", - "phone": "892-505-2738", - "email": "kaitlyn@safetrust.com" - }, - { - "id": 1101, - "guid": "a50224df-c1ea-4552-bca4-a87ce3b92915", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabelle Wayne", - "company": "Entcast", - "phone": "882-417-3506", - "email": "isabelle@entcast.com" - }, - { - "id": 1102, - "guid": "c64af336-c975-44bb-8ca8-1fcabb769922", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Crossman", - "company": "iSkyvaco", - "phone": "827-442-2935", - "email": "vanessa@iskyvaco.com" - }, - { - "id": 1103, - "guid": "6faf7546-df9c-421d-839f-c21def849260", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Youmans", - "company": "Westgate", - "phone": "804-582-3356", - "email": "angelina@westgate.com" - }, - { - "id": 1104, - "guid": "06e3f462-8fcf-4578-a0fa-1d31698dd95a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Otis", - "company": "US Infratouch", - "phone": "876-584-2673", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 1105, - "guid": "0c4f94a0-60b3-4df7-8903-41c0c7332d60", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Olivia Haig", - "company": "Teraserv", - "phone": "817-421-3759", - "email": "olivia@teraserv.com" - }, - { - "id": 1106, - "guid": "29f260ea-e886-4597-afd5-4270fa1f9080", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexa Wesley", - "company": "Aluco", - "phone": "868-562-2115", - "email": "alexa@aluco.com" - }, - { - "id": 1107, - "guid": "78ebe41d-6bc6-48b7-bbe9-ee87275c6ed4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hannah Gilbert", - "company": "Fibroserve", - "phone": "898-429-2180", - "email": "hannah@fibroserve.com" - }, - { - "id": 1108, - "guid": "ed2a41f9-d56f-4917-9b2c-c2ad7a925851", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lillian Winter", - "company": "Mescaridic", - "phone": "876-585-3175", - "email": "lillian@mescaridic.com" - }, - { - "id": 1109, - "guid": "1987251b-9821-4d01-a677-93a79b7fde1c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Fisher", - "company": "Fibrotouch", - "phone": "809-405-3307", - "email": "nevaeh@fibrotouch.com" - }, - { - "id": 1110, - "guid": "881e972b-0c24-4b13-8339-ab889454dfd2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Young", - "company": "Westtomik", - "phone": "848-475-3087", - "email": "isabelle@westtomik.com" - }, - { - "id": 1111, - "guid": "43c80fc6-cf1b-484b-864c-4cdf8e57ca02", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Wesley", - "company": "Conotomics", - "phone": "852-531-2300", - "email": "caroline@conotomics.com" - }, - { - "id": 1112, - "guid": "87da26c1-ab44-45a8-8d6a-e3262fa67f70", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Young", - "company": "Orthosoft", - "phone": "858-412-3822", - "email": "serenity@orthosoft.com" - }, - { - "id": 1113, - "guid": "eec2ecb7-61e6-491d-bd32-c13455d22467", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Winter", - "company": "Anagraph", - "phone": "865-583-3105", - "email": "nevaeh@anagraph.com" - }, - { - "id": 1114, - "guid": "efe36e9e-79ef-4011-b264-38291d369563", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Gate", - "company": "Robotemplate", - "phone": "860-513-2630", - "email": "lauren@robotemplate.com" - }, - { - "id": 1115, - "guid": "292ba9f3-eb94-45d7-b3bb-f6dca52a030c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Croftoon", - "company": "OpKeycomm", - "phone": "852-435-2799", - "email": "katherine@opkeycomm.com" - }, - { - "id": 1116, - "guid": "d08bc5c1-6f3a-434f-a581-c74598638cb3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Gilson", - "company": "Aprama", - "phone": "823-436-2258", - "email": "lauren@aprama.com" - }, - { - "id": 1117, - "guid": "8d9b5b5b-1995-47a3-9a4d-4b6ade6bdd3b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Camila Wesley", - "company": "iQualcar", - "phone": "864-581-2256", - "email": "camila@iqualcar.com" - }, - { - "id": 1118, - "guid": "bd391217-6f58-416c-bbcd-52701368431d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Gustman", - "company": "Truegate", - "phone": "884-469-2953", - "email": "andrea@truegate.com" - }, - { - "id": 1119, - "guid": "b134dbef-4840-4b3a-9f0b-f57720472ff0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Daniels", - "company": "eSteganoergy", - "phone": "816-556-3054", - "email": "anna@esteganoergy.com" - }, - { - "id": 1120, - "guid": "c913194a-9a52-4d6d-8b86-d445a4a9443b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ava Miln", - "company": "Polytheon", - "phone": "832-486-2369", - "email": "ava@polytheon.com" - }, - { - "id": 1121, - "guid": "f60df149-0ec3-444b-b205-496fc4184e17", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Otis", - "company": "Proline", - "phone": "858-474-3364", - "email": "andrea@proline.com" - }, - { - "id": 1122, - "guid": "d1feecb2-abe3-4497-954b-dc58c9469525", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Genesis Fulton", - "company": "Proline", - "phone": "853-518-2911", - "email": "genesis@proline.com" - }, - { - "id": 1123, - "guid": "2f0bbe2a-4084-4cbc-9fab-fa99f6e63bab", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gilbert", - "company": "Openserve", - "phone": "882-547-3053", - "email": "brooklyn@openserve.com" - }, - { - "id": 1124, - "guid": "8a27bd09-9f13-4bc1-9f9f-4c488d37c3e9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Walkman", - "company": "Multitiqua", - "phone": "833-481-3345", - "email": "ashley@multitiqua.com" - }, - { - "id": 1125, - "guid": "d0e19c65-6f89-4c3d-815f-4d9f72b4dff3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Warren", - "company": "eSteganoergy", - "phone": "868-461-2348", - "email": "trinity@esteganoergy.com" - }, - { - "id": 1126, - "guid": "80fff472-2ca7-4cf1-a8fe-7454109ffaa1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Makayla Hailey", - "company": "Videobanc", - "phone": "891-478-2519", - "email": "makayla@videobanc.com" - }, - { - "id": 1127, - "guid": "d3ffcafa-0b29-4fe3-8b61-e72b59a728bc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Higgins", - "company": "Mescaridic", - "phone": "899-486-3947", - "email": "andrea@mescaridic.com" - }, - { - "id": 1128, - "guid": "7db794ae-828c-4952-afd0-ff98aea62cd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Campbell", - "company": "Proline", - "phone": "880-586-3570", - "email": "alexandra@proline.com" - }, - { - "id": 1129, - "guid": "a88a1763-adf7-49ab-b91f-c14660da4bad", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle WifKinson", - "company": "Keytheon", - "phone": "827-503-3236", - "email": "gabrielle@keytheon.com" - }, - { - "id": 1130, - "guid": "21386e14-5d7f-4d6b-862b-7a5e62cb2271", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Hancock", - "company": "Netsystems", - "phone": "878-408-2672", - "email": "jasmine@netsystems.com" - }, - { - "id": 1131, - "guid": "9eb47092-5fd5-4911-adbb-b5bb445f9554", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Conors", - "company": "Cryptotegrity", - "phone": "862-444-2814", - "email": "addison@cryptotegrity.com" - }, - { - "id": 1132, - "guid": "8c0de3db-8cc1-4ce1-b8e1-9cdffb07c140", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Chloe Gibbs", - "company": "Orthomedia", - "phone": "840-568-2211", - "email": "chloe@orthomedia.com" - }, - { - "id": 1133, - "guid": "f6fdcf22-e4a8-4f79-a3a7-c4288c4b1f5d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alyssa Nash", - "company": "Anagraph", - "phone": "830-444-2053", - "email": "alyssa@anagraph.com" - }, - { - "id": 1134, - "guid": "2a445c63-47df-4b8b-b110-3daac2ed51be", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Olivia Gerald", - "company": "Cryptotegrity", - "phone": "810-421-3823", - "email": "olivia@cryptotegrity.com" - }, - { - "id": 1135, - "guid": "e31c92ad-c30e-4332-8875-4cb14585da62", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Wainwright", - "company": "Venconix", - "phone": "872-534-3213", - "email": "avery@venconix.com" - }, - { - "id": 1136, - "guid": "1f165511-a19a-43de-9f2b-0395b68ab96b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Grace Bush", - "company": "Conotomics", - "phone": "808-439-2058", - "email": "grace@conotomics.com" - }, - { - "id": 1137, - "guid": "941d06f5-b59f-4507-93e9-5037dd33102f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Carey", - "company": "Gigaura", - "phone": "833-450-2148", - "email": "audrey@gigaura.com" - }, - { - "id": 1138, - "guid": "3bbafdd9-2175-4320-bb04-830e98ff4da9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Milton", - "company": "Entcast", - "phone": "868-518-2224", - "email": "sydney@entcast.com" - }, - { - "id": 1139, - "guid": "6021133c-1d05-44af-ab77-ea118877db50", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Carroll", - "company": "Mescaridic", - "phone": "830-486-3959", - "email": "evelyn@mescaridic.com" - }, - { - "id": 1140, - "guid": "8ce68d3d-d409-462b-868a-1b3fa8799638", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Nathan", - "company": "Genland", - "phone": "807-497-2912", - "email": "nevaeh@genland.com" - }, - { - "id": 1141, - "guid": "92abb18c-ba28-4eb9-8f13-46ee89af24e5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Hailey", - "company": "Robocomm", - "phone": "804-407-2092", - "email": "brooke@robocomm.com" - }, - { - "id": 1142, - "guid": "5e0e23e1-30a1-4f01-a790-a0ed92329626", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Harrison", - "company": "Multitiqua", - "phone": "844-550-2499", - "email": "samantha@multitiqua.com" - }, - { - "id": 1143, - "guid": "c7eee51e-611b-4c74-861b-bdd563bd8d14", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Hawkins", - "company": "Enlogia", - "phone": "825-584-3935", - "email": "addison@enlogia.com" - }, - { - "id": 1144, - "guid": "922e60a4-bce9-4de7-9ea8-5be0baf216ce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Haig", - "company": "RoboAerlogix", - "phone": "830-505-2749", - "email": "gianna@roboaerlogix.com" - }, - { - "id": 1145, - "guid": "23d4df69-7514-4cdf-8e76-579dcbadf2ef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mackenzie Bush", - "company": "Titanirola", - "phone": "830-569-3917", - "email": "mackenzie@titanirola.com" - }, - { - "id": 1146, - "guid": "d4f74697-4aac-466b-a18e-d9e5bd00e010", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Chandter", - "company": "Generola", - "phone": "893-440-2535", - "email": "emma@generola.com" - }, - { - "id": 1147, - "guid": "df442edd-8846-4204-800e-27bbe72db1b0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Cramer", - "company": "Rapigrafix", - "phone": "849-595-2033", - "email": "sophia@rapigrafix.com" - }, - { - "id": 1148, - "guid": "ae2e3a14-451f-42d6-9c90-1addb744d105", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabrielle Miln", - "company": "Truegate", - "phone": "863-460-2654", - "email": "gabrielle@truegate.com" - }, - { - "id": 1149, - "guid": "01d39aff-77d2-4a79-a977-fecd905270ee", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Sherlock", - "company": "Truetomic", - "phone": "816-413-2640", - "email": "victoria@truetomic.com" - }, - { - "id": 1150, - "guid": "30e1c32e-648a-4535-ba22-6cbb4c3bf72f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Cramer", - "company": "Systheon", - "phone": "866-586-3697", - "email": "riley@systheon.com" - }, - { - "id": 1151, - "guid": "38e6b44f-c81d-452e-88e9-bc2f0bc928dc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Freeman", - "company": "Hypervaco", - "phone": "827-498-2683", - "email": "mia@hypervaco.com" - }, - { - "id": 1152, - "guid": "a0e91f80-7849-4269-aad5-cfb3a550411f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Cook", - "company": "Syssoft", - "phone": "833-411-2000", - "email": "sydney@syssoft.com" - }, - { - "id": 1153, - "guid": "5aef7e29-a876-46d1-8cb0-0fbf7181b7f1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Hoggarth", - "company": "Unconix", - "phone": "899-501-3357", - "email": "sophie@unconix.com" - }, - { - "id": 1154, - "guid": "5009a264-8f05-4646-81ff-efd97116804f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Rachel Stanley", - "company": "Netsystems", - "phone": "846-571-2914", - "email": "rachel@netsystems.com" - }, - { - "id": 1155, - "guid": "f090098e-8c21-4109-99b2-844e4aa9fe60", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke Warren", - "company": "Indisco", - "phone": "844-585-2036", - "email": "brooke@indisco.com" - }, - { - "id": 1156, - "guid": "9acb453f-60a6-4db0-91de-1bcc5467e9d1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Walkman", - "company": "Robocomm", - "phone": "823-577-3050", - "email": "molly@robocomm.com" - }, - { - "id": 1157, - "guid": "9a320f66-ae8c-4946-ac21-76e797f71c7b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Campbell", - "company": "Technogra", - "phone": "822-423-2344", - "email": "olivia@technogra.com" - }, - { - "id": 1158, - "guid": "cb52302f-6bc1-407f-bd06-ff7786d8bb0c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madison Winter", - "company": "Conrama", - "phone": "858-481-3447", - "email": "madison@conrama.com" - }, - { - "id": 1159, - "guid": "064e4a98-8d6f-4fd2-8fc6-c0e4f6cf2951", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Julia Wood", - "company": "Ventanium", - "phone": "831-429-2356", - "email": "julia@ventanium.com" - }, - { - "id": 1160, - "guid": "d85284fc-13a2-48b0-95e3-17e6232809fd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Wallace", - "company": "Teratopia", - "phone": "814-468-3517", - "email": "sydney@teratopia.com" - }, - { - "id": 1161, - "guid": "64c18473-ce98-4384-a035-c5cbdbc78fab", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Oswald", - "company": "Polytheon", - "phone": "849-543-3750", - "email": "kimberly@polytheon.com" - }, - { - "id": 1162, - "guid": "67316751-2a25-418c-b2af-f476f81e0574", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Hawkins", - "company": "Titanigraf", - "phone": "806-401-2675", - "email": "addison@titanigraf.com" - }, - { - "id": 1163, - "guid": "666f23db-6c1b-40cb-b51f-4f197b92bef1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Adamson", - "company": "Safetrust", - "phone": "818-505-3990", - "email": "ashley@safetrust.com" - }, - { - "id": 1164, - "guid": "eedc8330-08dc-4bc2-b5ea-fc5b871c3353", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Wainwright", - "company": "US Omnigraphik", - "phone": "838-574-3806", - "email": "sydney@us omnigraphik.com" - }, - { - "id": 1165, - "guid": "490c2283-3828-44f0-b7b8-26781bfe3705", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Chandter", - "company": "Transtouch", - "phone": "827-517-3917", - "email": "elizabeth@transtouch.com" - }, - { - "id": 1166, - "guid": "2f909ba8-03ea-43e0-ac71-406f29431882", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Brooks", - "company": "Titanigraf", - "phone": "894-532-3603", - "email": "mariah@titanigraf.com" - }, - { - "id": 1167, - "guid": "f71273a6-57c8-4422-8216-4831aee77ed7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Youmans", - "company": "Celgra", - "phone": "803-547-2686", - "email": "riley@celgra.com" - }, - { - "id": 1168, - "guid": "f9d0978f-d7b9-4392-bed2-bc5f2d2d397d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Thorndike", - "company": "Unologic", - "phone": "847-581-3223", - "email": "alexis@unologic.com" - }, - { - "id": 1169, - "guid": "673358d9-385b-4b5b-90d9-9a8efa23e56a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Hailey", - "company": "Syssoft", - "phone": "808-504-2768", - "email": "sydney@syssoft.com" - }, - { - "id": 1170, - "guid": "91c0eb11-f0ac-4d56-888b-d9670d102414", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Gilson", - "company": "Westgate", - "phone": "836-402-2986", - "email": "madeline@westgate.com" - }, - { - "id": 1171, - "guid": "214d8ddd-221b-41eb-9109-756eb51a001a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Owen", - "company": "Pericenta", - "phone": "832-497-2537", - "email": "kaylee@pericenta.com" - }, - { - "id": 1172, - "guid": "73ed9fc8-7631-41b6-bf50-38b8e9e7e923", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Thomson", - "company": "Robocomm", - "phone": "888-402-2417", - "email": "morgan@robocomm.com" - }, - { - "id": 1173, - "guid": "0e9bff14-bb67-4f4e-a37b-0666a1320229", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Carrington", - "company": "Hypervaco", - "phone": "848-538-3460", - "email": "chloe@hypervaco.com" - }, - { - "id": 1174, - "guid": "f28eb0fb-e422-4acf-a8bc-569003a33f28", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Chandter", - "company": "Infraique", - "phone": "835-407-3086", - "email": "katelyn@infraique.com" - }, - { - "id": 1175, - "guid": "7700687f-8ebb-4b4f-818e-59836ea32192", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Wood", - "company": "Turbomart", - "phone": "868-453-3702", - "email": "claire@turbomart.com" - }, - { - "id": 1176, - "guid": "9f5a5040-897d-4b5f-9d27-93fb2a6336c3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Crossman", - "company": "Teratopia", - "phone": "899-555-2186", - "email": "amelia@teratopia.com" - }, - { - "id": 1177, - "guid": "e06df382-1310-4d7f-934d-27e4bca65fa5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Savannah Chandter", - "company": "Generola", - "phone": "870-445-3170", - "email": "savannah@generola.com" - }, - { - "id": 1178, - "guid": "bebc7a7d-ffd4-4833-a577-49147b18e1db", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Miln", - "company": "Genland", - "phone": "824-515-2150", - "email": "jocelyn@genland.com" - }, - { - "id": 1179, - "guid": "e4245897-2c36-43f0-8687-e958e95f8995", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Ogden", - "company": "Xeicon", - "phone": "844-600-3102", - "email": "katelyn@xeicon.com" - }, - { - "id": 1180, - "guid": "03ad7429-e057-4ae7-a977-00aee47d548b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Gill", - "company": "Airdyne", - "phone": "866-559-3426", - "email": "addison@airdyne.com" - }, - { - "id": 1181, - "guid": "5ad9cf8e-a06b-44fa-8d24-4c4715330aa9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Molligan", - "company": "Navivacs", - "phone": "855-472-2027", - "email": "gabrielle@navivacs.com" - }, - { - "id": 1182, - "guid": "9d172093-3ae4-4e60-8ddb-993517f39995", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Hancock", - "company": "RoboAerlogix", - "phone": "837-577-2362", - "email": "leah@roboaerlogix.com" - }, - { - "id": 1183, - "guid": "2a4a8f89-06f0-47b4-9c8d-7f4beb99b584", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Otis", - "company": "Proline", - "phone": "849-421-2927", - "email": "alyssa@proline.com" - }, - { - "id": 1184, - "guid": "9701379d-6c04-462a-b1e2-26b685c4db96", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Chandter", - "company": "Mescaridic", - "phone": "887-487-2734", - "email": "madeline@mescaridic.com" - }, - { - "id": 1185, - "guid": "0e58b03e-92d5-4ca3-98b4-56c0dc66be39", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Clapton", - "company": "Allnet", - "phone": "834-438-3827", - "email": "savannah@allnet.com" - }, - { - "id": 1186, - "guid": "9cb9ff40-030a-4542-859e-46e07bc58215", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria WifKinson", - "company": "Westmedia", - "phone": "839-582-3490", - "email": "maria@westmedia.com" - }, - { - "id": 1187, - "guid": "bd4fc9ef-3233-4eb7-b62f-85225e362eaa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Milton", - "company": "Airdyne", - "phone": "837-447-2793", - "email": "maria@airdyne.com" - }, - { - "id": 1188, - "guid": "0ff1a6ad-c603-4b95-afa8-6712596310b1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Young", - "company": "US Omnigraphik", - "phone": "817-434-2521", - "email": "taylor@us omnigraphik.com" - }, - { - "id": 1189, - "guid": "d4514455-ae50-4337-9b1d-e0df07b91f95", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Milton", - "company": "Mescatron", - "phone": "818-426-2675", - "email": "evelyn@mescatron.com" - }, - { - "id": 1190, - "guid": "6ca8949a-1a7d-4a9c-8a21-3087713f93f2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooklyn Campbell", - "company": "Enlogia", - "phone": "862-453-2084", - "email": "brooklyn@enlogia.com" - }, - { - "id": 1191, - "guid": "e8d87c6b-8d96-4b4d-8ac4-44ad9f73d000", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Sheldon", - "company": "Systheon", - "phone": "882-591-3769", - "email": "kaylee@systheon.com" - }, - { - "id": 1192, - "guid": "e2bb9ecf-9297-405c-a3b0-70a566db195d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Carroll", - "company": "Navivacs", - "phone": "821-403-2097", - "email": "madeline@navivacs.com" - }, - { - "id": 1193, - "guid": "9020c743-507b-443a-8c01-dcd46a6022d6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Hailey", - "company": "Safeagra", - "phone": "879-540-2354", - "email": "gianna@safeagra.com" - }, - { - "id": 1194, - "guid": "1a83640f-090b-40b1-987b-d1b949f18e0a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Autumn Warren", - "company": "SysVenamerica", - "phone": "868-472-3629", - "email": "autumn@sysvenamerica.com" - }, - { - "id": 1195, - "guid": "17bf37c5-03a0-4381-87a3-bcb31cbecfc8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Chesterton", - "company": "Pericenta", - "phone": "835-418-3722", - "email": "katherine@pericenta.com" - }, - { - "id": 1196, - "guid": "61d7b1da-5de6-42da-90b0-976308a608c2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Abramson", - "company": "Transtouch", - "phone": "896-473-3941", - "email": "olivia@transtouch.com" - }, - { - "id": 1197, - "guid": "f2060fcd-142e-434f-a349-ee6d21b677f9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Miers", - "company": "Truetomic", - "phone": "879-588-3079", - "email": "natalie@truetomic.com" - }, - { - "id": 1198, - "guid": "fc68611c-4699-4875-ae26-cb03e1da81a4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Thorndike", - "company": "US Infratouch", - "phone": "847-409-2368", - "email": "addison@us infratouch.com" - }, - { - "id": 1199, - "guid": "196e8b3f-4ada-4286-9e0d-f257de43b307", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Morrison", - "company": "Navivacs", - "phone": "806-541-2158", - "email": "grace@navivacs.com" - }, - { - "id": 1200, - "guid": "5e96f8b9-d4e9-4582-9811-ea727365d501", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Oswald", - "company": "Pacwest", - "phone": "834-438-2090", - "email": "vanessa@pacwest.com" - }, - { - "id": 1201, - "guid": "52f0b020-541a-4257-ae9c-e42ceab63e57", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Michaelson", - "company": "Infraique", - "phone": "872-556-3090", - "email": "olivia@infraique.com" - }, - { - "id": 1202, - "guid": "566696d0-e4fe-44fa-9346-28ab39efadba", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Gill", - "company": "Dynarama", - "phone": "830-535-3490", - "email": "eva@dynarama.com" - }, - { - "id": 1203, - "guid": "990cc0eb-9169-4e34-a124-2a86ae079082", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Gilson", - "company": "Openserve", - "phone": "895-569-3773", - "email": "samantha@openserve.com" - }, - { - "id": 1204, - "guid": "8902191c-92d0-4a81-909b-1d33a6a29cfb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Gill", - "company": "Robotemplate", - "phone": "843-464-3505", - "email": "alexandra@robotemplate.com" - }, - { - "id": 1205, - "guid": "d2d3fba2-ca59-4f34-9940-355c4746880d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Nelson", - "company": "Titanirola", - "phone": "879-406-3694", - "email": "brianna@titanirola.com" - }, - { - "id": 1206, - "guid": "3bfa9a2b-3dd0-4f1a-982e-af7b814fcbd8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Nelson", - "company": "Venconix", - "phone": "884-565-2057", - "email": "molly@venconix.com" - }, - { - "id": 1207, - "guid": "39e673d8-9552-4dbd-ab11-8c389bf09083", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Abramson", - "company": "Tekcar", - "phone": "814-400-2718", - "email": "brianna@tekcar.com" - }, - { - "id": 1208, - "guid": "f6480c46-a870-4e12-bd16-cb403c011c69", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Winter", - "company": "Unologic", - "phone": "849-533-3540", - "email": "natalie@unologic.com" - }, - { - "id": 1209, - "guid": "2f1b29c4-7c05-4115-a8f9-ea45a523fed6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Carey", - "company": "eSteganoergy", - "phone": "840-534-2742", - "email": "amelia@esteganoergy.com" - }, - { - "id": 1210, - "guid": "5d6a5367-84ef-4237-a312-c3342b2ac257", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Thornton", - "company": "Netseco", - "phone": "863-570-2726", - "email": "nevaeh@netseco.com" - }, - { - "id": 1211, - "guid": "d54ffed1-6013-4c4e-86eb-2090d85a15fa", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Day", - "company": "Venconix", - "phone": "836-572-2533", - "email": "hannah@venconix.com" - }, - { - "id": 1212, - "guid": "20a041c0-2dcf-438d-ae1a-7388d05f19d2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Oliver", - "company": "Robotomic", - "phone": "814-422-3824", - "email": "allison@robotomic.com" - }, - { - "id": 1213, - "guid": "29bca858-aa77-4d50-9c7a-6171642fb52a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Freeman", - "company": "US Infratouch", - "phone": "846-411-3495", - "email": "grace@us infratouch.com" - }, - { - "id": 1214, - "guid": "e075d29c-fb34-4c51-bb5c-998bf37cc3c5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Hardman", - "company": "OpKeycomm", - "phone": "805-573-3048", - "email": "gabriella@opkeycomm.com" - }, - { - "id": 1215, - "guid": "2e90b981-43c0-4b19-9789-421854f5c4f3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Wallace", - "company": "Raylog", - "phone": "884-410-3160", - "email": "kayla@raylog.com" - }, - { - "id": 1216, - "guid": "d2e4a31e-0f2e-4baf-bd13-9292d4a513b0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Hamphrey", - "company": "Systheon", - "phone": "892-469-3136", - "email": "brianna@systheon.com" - }, - { - "id": 1217, - "guid": "cc4975f4-1c35-4930-b22d-7724a10db6c3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison WifKinson", - "company": "Fibrotopia", - "phone": "841-553-3858", - "email": "madison@fibrotopia.com" - }, - { - "id": 1218, - "guid": "cb74d362-5c49-4ada-a0cf-72d3a14995ba", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sofia Walkman", - "company": "Aluco", - "phone": "885-504-2922", - "email": "sofia@aluco.com" - }, - { - "id": 1219, - "guid": "d46bba17-013f-4c2b-8b51-c655614e2c90", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Youmans", - "company": "Steganoconiche", - "phone": "875-468-2750", - "email": "kayla@steganoconiche.com" - }, - { - "id": 1220, - "guid": "c4e3a6e8-8bcd-4a8d-847c-ea46e3d28a1b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Smith", - "company": "Entcast", - "phone": "849-496-3011", - "email": "hannah@entcast.com" - }, - { - "id": 1221, - "guid": "6463aa4e-12d9-49fd-a39a-7e7f9276a44c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Croftoon", - "company": "Aluco", - "phone": "828-505-3458", - "email": "isabelle@aluco.com" - }, - { - "id": 1222, - "guid": "ab098fe7-3ce4-4791-abf7-cbdc65780239", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Brooks", - "company": "Keytheon", - "phone": "817-600-2624", - "email": "vanessa@keytheon.com" - }, - { - "id": 1223, - "guid": "17332f05-4338-4152-a75d-090bd21f8e03", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Hancock", - "company": "Netsystems", - "phone": "852-517-3773", - "email": "isabella@netsystems.com" - }, - { - "id": 1224, - "guid": "7eb1e26a-dc35-436d-871c-7f40eba07f3f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Warren", - "company": "Inridium", - "phone": "825-442-2606", - "email": "evelyn@inridium.com" - }, - { - "id": 1225, - "guid": "5b6812ec-3db7-4a5a-9253-1c41d69dcb5c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Young", - "company": "Indisco", - "phone": "812-549-3429", - "email": "morgan@indisco.com" - }, - { - "id": 1226, - "guid": "d32eabff-7d9c-46f1-bbc2-f1bcffbcd13a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Bush", - "company": "Technogra", - "phone": "892-409-2687", - "email": "emily@technogra.com" - }, - { - "id": 1227, - "guid": "d2528d9c-97b8-4205-8a59-1fcf85f88fa1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Galbraith", - "company": "Compuamerica", - "phone": "806-485-3245", - "email": "alexandra@compuamerica.com" - }, - { - "id": 1228, - "guid": "e79829f4-b04c-4f42-9c5f-f33f1f0d375c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Cramer", - "company": "Cryptotegrity", - "phone": "887-468-2919", - "email": "sofia@cryptotegrity.com" - }, - { - "id": 1229, - "guid": "c4ca79b1-bc4d-496c-80d7-5e5a807a9397", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Oldridge", - "company": "InfoAirway", - "phone": "866-422-2598", - "email": "morgan@infoairway.com" - }, - { - "id": 1230, - "guid": "a018fcc6-42a6-46cb-aa48-e0d97af10098", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jessica Oldman", - "company": "Jamconik", - "phone": "867-449-2849", - "email": "jessica@jamconik.com" - }, - { - "id": 1231, - "guid": "e5272b0f-a0a6-410a-96b7-af14ba9bc1ee", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Smith", - "company": "Aluco", - "phone": "851-489-3723", - "email": "aaliyah@aluco.com" - }, - { - "id": 1232, - "guid": "cc6ff94b-abad-4f2a-bec5-51a353011f07", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Gilmore", - "company": "SysVenamerica", - "phone": "863-482-2743", - "email": "gianna@sysvenamerica.com" - }, - { - "id": 1233, - "guid": "8b0997a9-0a39-4b6c-978c-4b6dfe053807", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Chapman", - "company": "Sontopia", - "phone": "891-457-3199", - "email": "ashley@sontopia.com" - }, - { - "id": 1234, - "guid": "32af13e6-c008-48a0-baf3-7937bf08bae1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Youmans", - "company": "Multitiqua", - "phone": "818-530-2048", - "email": "rachel@multitiqua.com" - }, - { - "id": 1235, - "guid": "e5422fb1-4454-44c2-903d-1a72a03a2b51", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Chapman", - "company": "US Omnigraphik", - "phone": "840-511-3842", - "email": "kylie@us omnigraphik.com" - }, - { - "id": 1236, - "guid": "ae536fd9-2473-4a86-b11a-a3e1355c67c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Sherlock", - "company": "Venconix", - "phone": "842-477-2732", - "email": "hannah@venconix.com" - }, - { - "id": 1237, - "guid": "ffa47906-57c9-47a5-9a70-4499dbe15c12", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabrielle Galbraith", - "company": "Gigaura", - "phone": "885-579-2099", - "email": "gabrielle@gigaura.com" - }, - { - "id": 1238, - "guid": "ed105d20-157f-4efa-8c9b-054778dc8996", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Carrington", - "company": "Transtouch", - "phone": "858-563-3073", - "email": "jessica@transtouch.com" - }, - { - "id": 1239, - "guid": "1fe6ce21-915e-4755-86f6-fc50436daeff", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Gilmore", - "company": "RoboAerlogix", - "phone": "840-447-3279", - "email": "lauren@roboaerlogix.com" - }, - { - "id": 1240, - "guid": "c5cca240-92d0-4c1f-9a9d-46d616693497", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Gardner", - "company": "Polytheon", - "phone": "866-577-2203", - "email": "rachel@polytheon.com" - }, - { - "id": 1241, - "guid": "3e306228-0d2f-456c-81b9-10412514c10c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Sheldon", - "company": "eEyetanic", - "phone": "836-463-3171", - "email": "molly@eeyetanic.com" - }, - { - "id": 1242, - "guid": "9971c346-cfa6-4a30-9a77-294c7dd5fb6a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Abramson", - "company": "Sontopia", - "phone": "860-593-2257", - "email": "alexandra@sontopia.com" - }, - { - "id": 1243, - "guid": "cf319dd6-e467-42f4-b482-1a1c26ad6eeb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Higgins", - "company": "Fibrotouch", - "phone": "816-445-3339", - "email": "evelyn@fibrotouch.com" - }, - { - "id": 1244, - "guid": "dad45aea-2d5c-43cf-9abf-1dfd8a22fbc8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Gerald", - "company": "SysUSA", - "phone": "896-578-2840", - "email": "amelia@sysusa.com" - }, - { - "id": 1245, - "guid": "9127f1f1-b8fa-40f5-b27a-f0a7043ccf94", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria Walkman", - "company": "iOptystix", - "phone": "891-510-3273", - "email": "victoria@ioptystix.com" - }, - { - "id": 1246, - "guid": "5477b198-d34f-4e56-98c2-a895da2a9c29", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Chapman", - "company": "Navivacs", - "phone": "826-435-3317", - "email": "olivia@navivacs.com" - }, - { - "id": 1247, - "guid": "4d4aed08-c0d5-4778-93a1-43398f2ba34c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Oliver", - "company": "Navivacs", - "phone": "817-586-3457", - "email": "riley@navivacs.com" - }, - { - "id": 1248, - "guid": "fd309031-9b43-430c-a9a5-a5195d98067e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya Hoggarth", - "company": "Teratopia", - "phone": "822-450-2214", - "email": "mya@teratopia.com" - }, - { - "id": 1249, - "guid": "420f42f1-382e-4b0a-8bdc-c8f22f124a3f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Nash", - "company": "Hypervaco", - "phone": "888-522-3285", - "email": "vanessa@hypervaco.com" - }, - { - "id": 1250, - "guid": "9e046f91-b6fb-47fa-ae1b-cca1f6715648", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Crossman", - "company": "Sontopia", - "phone": "885-524-2444", - "email": "morgan@sontopia.com" - }, - { - "id": 1251, - "guid": "3aa863fb-1829-4ffa-8b0b-72be14b09618", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Charlson", - "company": "Nanobanc", - "phone": "880-549-2865", - "email": "maria@nanobanc.com" - }, - { - "id": 1252, - "guid": "a115f710-4f69-4bcb-8bf0-0fae59c63a27", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Youmans", - "company": "iEnland", - "phone": "884-566-2060", - "email": "rachel@ienland.com" - }, - { - "id": 1253, - "guid": "756c81ac-70ef-4da4-86ca-d1a365fae49a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alyssa Oliver", - "company": "Idmax", - "phone": "887-470-3825", - "email": "alyssa@idmax.com" - }, - { - "id": 1254, - "guid": "3cf1faa1-6a5a-45e9-bcba-d7f6486ac262", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Fulton", - "company": "Openserve", - "phone": "831-569-2063", - "email": "elizabeth@openserve.com" - }, - { - "id": 1255, - "guid": "66ba989c-6953-4b08-ae0c-733da80ac758", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Crossman", - "company": "Videobanc", - "phone": "869-480-3400", - "email": "maria@videobanc.com" - }, - { - "id": 1256, - "guid": "7ec2905c-b98f-4af1-9398-954aa8fef904", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Watson", - "company": "Fibrotopia", - "phone": "818-428-2596", - "email": "maria@fibrotopia.com" - }, - { - "id": 1257, - "guid": "c7284f35-267f-4636-a487-68920f6b3616", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Hodges", - "company": "eSteganoergy", - "phone": "846-584-2487", - "email": "eva@esteganoergy.com" - }, - { - "id": 1258, - "guid": "6e45f271-8c75-4e95-b092-7bac8ab98b53", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Nash", - "company": "Multitiqua", - "phone": "826-496-3864", - "email": "gabrielle@multitiqua.com" - }, - { - "id": 1259, - "guid": "9f353bcd-deb5-4c07-a4e6-7eab4163560a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Wood", - "company": "Aluco", - "phone": "821-416-3680", - "email": "trinity@aluco.com" - }, - { - "id": 1260, - "guid": "1a3b90e8-64f7-4df2-8b14-539c8917b971", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Thorndike", - "company": "Multitiqua", - "phone": "888-533-3772", - "email": "angelina@multitiqua.com" - }, - { - "id": 1261, - "guid": "0be132a9-b0ea-42e7-843c-368da0733dff", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Thornton", - "company": "Truegate", - "phone": "893-438-2054", - "email": "kaylee@truegate.com" - }, - { - "id": 1262, - "guid": "2d56e24c-0152-473a-a478-db9767a51f1d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Wainwright", - "company": "Westtomik", - "phone": "890-512-3404", - "email": "molly@westtomik.com" - }, - { - "id": 1263, - "guid": "8ba54c41-3b0b-4df9-a6f7-7a98a231569a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Miers", - "company": "eSteganoergy", - "phone": "860-421-3048", - "email": "camila@esteganoergy.com" - }, - { - "id": 1264, - "guid": "4d5f248e-56ae-4e38-9fc4-a0c503b12e19", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Claire Cramer", - "company": "Netseco", - "phone": "871-571-3075", - "email": "claire@netseco.com" - }, - { - "id": 1265, - "guid": "9693b014-3225-4747-b8f6-4910e287413b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Winter", - "company": "InfoAirway", - "phone": "831-426-2953", - "email": "gabriella@infoairway.com" - }, - { - "id": 1266, - "guid": "56e700d5-f573-4a8e-bb1f-36bbb89bfc4d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophie Owen", - "company": "Conotomics", - "phone": "886-568-3007", - "email": "sophie@conotomics.com" - }, - { - "id": 1267, - "guid": "29731994-48ac-4dbe-a4a3-5b5e551e559c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Turner", - "company": "Robotomic", - "phone": "826-513-2149", - "email": "allison@robotomic.com" - }, - { - "id": 1268, - "guid": "3bfec64e-d140-4ae3-ac4a-05a2a71207c2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Gilbert", - "company": "Robotemplate", - "phone": "835-475-2489", - "email": "riley@robotemplate.com" - }, - { - "id": 1269, - "guid": "ad545544-873b-4397-942c-8695f249f76d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Hailey", - "company": "Multitiqua", - "phone": "898-465-2346", - "email": "isabella@multitiqua.com" - }, - { - "id": 1270, - "guid": "f8d7648e-699c-4df2-bd00-e77baaf53933", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jocelyn Vaughan", - "company": "Syssoft", - "phone": "824-445-3879", - "email": "jocelyn@syssoft.com" - }, - { - "id": 1271, - "guid": "efcaaa91-8674-49c2-8f16-32cc9e1ad61e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Young", - "company": "Transtouch", - "phone": "830-519-2288", - "email": "maya@transtouch.com" - }, - { - "id": 1272, - "guid": "dcb6a01f-475f-451f-b665-f31dbc0fabdb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Nathan", - "company": "Venconix", - "phone": "873-590-3921", - "email": "paige@venconix.com" - }, - { - "id": 1273, - "guid": "a90d02da-15af-4233-95f5-29a5e694954b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Wood", - "company": "Mescaridic", - "phone": "861-527-2429", - "email": "camila@mescaridic.com" - }, - { - "id": 1274, - "guid": "bc7dde34-987f-44ab-a78a-c61ef96b02a0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Galbraith", - "company": "Titanirola", - "phone": "846-574-3691", - "email": "kaitlyn@titanirola.com" - }, - { - "id": 1275, - "guid": "5282c32d-15da-435b-8918-07e903aed8f6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Youmans", - "company": "Celgra", - "phone": "842-489-3337", - "email": "jessica@celgra.com" - }, - { - "id": 1276, - "guid": "ae7d0904-414e-4834-b8b9-a9601d1f7522", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Warren", - "company": "SysVenamerica", - "phone": "808-531-3049", - "email": "trinity@sysvenamerica.com" - }, - { - "id": 1277, - "guid": "1f86b582-5a55-405f-bc5b-914531cde4ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Bush", - "company": "Superscope", - "phone": "833-458-3560", - "email": "mya@superscope.com" - }, - { - "id": 1278, - "guid": "3599f405-3139-46dc-a724-e33c645e524b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Chandter", - "company": "Skydata", - "phone": "816-404-3940", - "email": "camila@skydata.com" - }, - { - "id": 1279, - "guid": "7ebb0464-926f-4617-8c09-000ed7dddd77", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Gilbert", - "company": "Pericenta", - "phone": "863-497-2055", - "email": "olivia@pericenta.com" - }, - { - "id": 1280, - "guid": "087b2bd8-84b8-4b18-9879-488eb62fdaa1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Miers", - "company": "iSkyvaco", - "phone": "856-411-2372", - "email": "allison@iskyvaco.com" - }, - { - "id": 1281, - "guid": "d16133e3-ad62-4937-909d-5b3874c4c6ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Wallace", - "company": "Mescaridic", - "phone": "884-480-2082", - "email": "alexa@mescaridic.com" - }, - { - "id": 1282, - "guid": "32c4e7e9-70b5-4276-952c-5fbcc30530fd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Abramson", - "company": "Netsystems", - "phone": "832-564-2519", - "email": "abigail@netsystems.com" - }, - { - "id": 1283, - "guid": "0987eeeb-5981-4bbe-83ea-ca23b1c59c4f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Wesley", - "company": "Vencom", - "phone": "848-505-2952", - "email": "mia@vencom.com" - }, - { - "id": 1284, - "guid": "447785da-08b6-4ec0-aa8d-161cb2578258", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaylee Thornton", - "company": "Orthomedia", - "phone": "878-556-3917", - "email": "kaylee@orthomedia.com" - }, - { - "id": 1285, - "guid": "715edc7a-c9e2-4003-b11a-78a452cfa302", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Fulton", - "company": "Mescatron", - "phone": "898-523-3066", - "email": "addison@mescatron.com" - }, - { - "id": 1286, - "guid": "d889bb6c-467d-491d-adac-13638219a9bc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Clapton", - "company": "Celgra", - "phone": "878-503-2297", - "email": "paige@celgra.com" - }, - { - "id": 1287, - "guid": "77ae95b5-e8c0-43ea-9e57-36ddc154325d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Wood", - "company": "Venconix", - "phone": "859-501-3125", - "email": "gianna@venconix.com" - }, - { - "id": 1288, - "guid": "cb40816a-8fb8-409e-bed9-91a4a9c10bb0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Wallace", - "company": "Pacwest", - "phone": "847-465-3204", - "email": "brooklyn@pacwest.com" - }, - { - "id": 1289, - "guid": "e2fa40bf-785e-4b1e-9401-c50b353c72b4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Ward", - "company": "eSteganoergy", - "phone": "827-546-3116", - "email": "layla@esteganoergy.com" - }, - { - "id": 1290, - "guid": "8902da97-5f39-4694-bd8b-eb75876c558f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexandra Wood", - "company": "Navivacs", - "phone": "836-463-3590", - "email": "alexandra@navivacs.com" - }, - { - "id": 1291, - "guid": "2cca4a3d-3865-477a-a215-b66e59bf31ff", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Sheldon", - "company": "Quintegrity", - "phone": "878-402-2508", - "email": "payton@quintegrity.com" - }, - { - "id": 1292, - "guid": "561a926c-7b0d-4fcd-8910-2006f1b136d9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Chesterton", - "company": "Jamrola", - "phone": "841-595-2743", - "email": "madeline@jamrola.com" - }, - { - "id": 1293, - "guid": "72a84895-8a2b-4690-ac22-56698236b7ad", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Michaelson", - "company": "Systheon", - "phone": "870-463-3414", - "email": "aubrey@systheon.com" - }, - { - "id": 1294, - "guid": "5b1b94bd-dae3-4811-9e3a-91a6f90d0544", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Hamphrey", - "company": "Safeagra", - "phone": "834-555-3635", - "email": "jessica@safeagra.com" - }, - { - "id": 1295, - "guid": "10baeb6c-346a-4809-9b63-2652a5955b1a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Crossman", - "company": "RoboAerlogix", - "phone": "840-435-2696", - "email": "autumn@roboaerlogix.com" - }, - { - "id": 1296, - "guid": "7b5912b2-2b62-4b27-bf67-175ff20e6a28", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Harrison", - "company": "Airdyne", - "phone": "832-499-2960", - "email": "serenity@airdyne.com" - }, - { - "id": 1297, - "guid": "2da51d3d-4188-49a4-bdda-098b0adec5f8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Hamphrey", - "company": "Robotomic", - "phone": "824-423-3339", - "email": "mariah@robotomic.com" - }, - { - "id": 1298, - "guid": "56f233e5-6329-484c-9e0f-1797947bee81", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Brickman", - "company": "Idmax", - "phone": "851-464-2399", - "email": "madelyn@idmax.com" - }, - { - "id": 1299, - "guid": "19735b48-276b-4eee-98b8-9b33e18c3537", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Crossman", - "company": "Systheon", - "phone": "893-425-3236", - "email": "destiny@systheon.com" - }, - { - "id": 1300, - "guid": "5e337263-d749-4f0e-add4-61ea276ab625", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Carroll", - "company": "Infragraph", - "phone": "871-516-3255", - "email": "jocelyn@infragraph.com" - }, - { - "id": 1301, - "guid": "895f4384-da62-425b-b3ff-a2bbf5d170a6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Cramer", - "company": "eSteganoergy", - "phone": "807-517-3467", - "email": "mariah@esteganoergy.com" - }, - { - "id": 1302, - "guid": "310d18ff-1289-498b-860f-f92972c8704d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Gill", - "company": "Skydata", - "phone": "867-525-3425", - "email": "faith@skydata.com" - }, - { - "id": 1303, - "guid": "35322274-9b8c-4120-b4ff-5bf4319f24ca", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Morrison", - "company": "Truetomic", - "phone": "883-570-2179", - "email": "lillian@truetomic.com" - }, - { - "id": 1304, - "guid": "9c96cf9d-4bcc-4715-8a2e-0185fa97dd88", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Miller", - "company": "Gigaura", - "phone": "831-560-3186", - "email": "zoe@gigaura.com" - }, - { - "id": 1305, - "guid": "3c9bc23e-255f-46be-901b-3b98a1d2627f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Smith", - "company": "Fibroserve", - "phone": "858-401-2798", - "email": "kylie@fibroserve.com" - }, - { - "id": 1306, - "guid": "103071dd-7d43-4fa6-bde3-b15fb2e211f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Chandter", - "company": "Technogra", - "phone": "803-490-3667", - "email": "lauren@technogra.com" - }, - { - "id": 1307, - "guid": "cafa33cf-68ae-4954-bef2-b346441fdee0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Davidson", - "company": "Technogra", - "phone": "877-590-3143", - "email": "leah@technogra.com" - }, - { - "id": 1308, - "guid": "8e1e5608-cbf1-4337-9669-020f19f38df7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Stanley", - "company": "Technogra", - "phone": "822-441-2334", - "email": "alyssa@technogra.com" - }, - { - "id": 1309, - "guid": "0e158aff-bd6b-451c-b6ee-5f3a4b02e6ea", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Wayne", - "company": "Robocomm", - "phone": "882-464-3664", - "email": "eva@robocomm.com" - }, - { - "id": 1310, - "guid": "cb7952cf-e9a3-48fb-9974-98b783c37a11", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Owen", - "company": "Westtomik", - "phone": "801-447-3032", - "email": "abigail@westtomik.com" - }, - { - "id": 1311, - "guid": "f6cd79a2-d4dd-4774-b63d-8dc78645e709", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Miln", - "company": "RoboAerlogix", - "phone": "840-528-3163", - "email": "savannah@roboaerlogix.com" - }, - { - "id": 1312, - "guid": "08ee63d2-5d71-46db-9473-5704c84baf43", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Walkman", - "company": "Airdyne", - "phone": "869-476-3357", - "email": "lauren@airdyne.com" - }, - { - "id": 1313, - "guid": "7c9d4e08-a95f-4385-8f81-8ec0fcd16d88", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaylee Brooks", - "company": "Nanobanc", - "phone": "845-543-2380", - "email": "kaylee@nanobanc.com" - }, - { - "id": 1314, - "guid": "9f79dc8b-8e5e-4f8e-ac0c-bd9a3e4e9fb9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Gill", - "company": "Multitiqua", - "phone": "883-475-3592", - "email": "jasmine@multitiqua.com" - }, - { - "id": 1315, - "guid": "3bfbc307-ea03-4c9f-8089-b895ee822018", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Nathan", - "company": "Fibroserve", - "phone": "861-517-2595", - "email": "chloe@fibroserve.com" - }, - { - "id": 1316, - "guid": "ccd79396-c032-457b-b3f0-5cbd2b26e410", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabella Michaelson", - "company": "Ventanium", - "phone": "853-498-2378", - "email": "isabella@ventanium.com" - }, - { - "id": 1317, - "guid": "91eb5d76-5e92-470c-9d52-41b7d2500531", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Gilmore", - "company": "Steganoconiche", - "phone": "817-552-2856", - "email": "sarah@steganoconiche.com" - }, - { - "id": 1318, - "guid": "8dee512f-4a87-4d65-ba49-b4c8ac44ef99", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Carey", - "company": "Sontopia", - "phone": "843-503-2922", - "email": "jasmine@sontopia.com" - }, - { - "id": 1319, - "guid": "78fe2dda-cc2e-4ca0-bc31-1ba337d7e9c9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Sheldon", - "company": "Proline", - "phone": "882-534-2599", - "email": "savannah@proline.com" - }, - { - "id": 1320, - "guid": "cc2b36d1-9c24-4974-b110-80f9c5a91cba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Goodman", - "company": "Inridium", - "phone": "882-435-2885", - "email": "angelina@inridium.com" - }, - { - "id": 1321, - "guid": "fed725a0-4a61-4258-b1dd-67679293cae9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Carey", - "company": "Safetrust", - "phone": "829-537-3823", - "email": "nevaeh@safetrust.com" - }, - { - "id": 1322, - "guid": "400cc4e2-c829-4619-b64a-9c231b491528", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Gardner", - "company": "Safeagra", - "phone": "839-502-3604", - "email": "gianna@safeagra.com" - }, - { - "id": 1323, - "guid": "9ee7e972-8cc0-4b2d-b011-abc433170f49", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maria Vaughan", - "company": "Truetomic", - "phone": "848-431-3735", - "email": "maria@truetomic.com" - }, - { - "id": 1324, - "guid": "f35ec7f4-6e35-4918-a74d-436f6e2bdbcd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Carey", - "company": "Techtron", - "phone": "800-540-2129", - "email": "lauren@techtron.com" - }, - { - "id": 1325, - "guid": "0d0f2a5b-babd-4a07-8589-0056723a8b34", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily WifKinson", - "company": "Titanirola", - "phone": "871-413-2498", - "email": "lily@titanirola.com" - }, - { - "id": 1326, - "guid": "f5ba6968-5564-4c18-a11d-f8a7c326ca20", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Bush", - "company": "SysUSA", - "phone": "804-524-2199", - "email": "sydney@sysusa.com" - }, - { - "id": 1327, - "guid": "10a2b6a4-ab0c-48b1-9d1f-8b58a9fb9917", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Ford", - "company": "Netsystems", - "phone": "841-492-3682", - "email": "aubrey@netsystems.com" - }, - { - "id": 1328, - "guid": "dac61be6-6c06-4542-b2c5-8b752732b562", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Thornton", - "company": "Titanigraf", - "phone": "804-446-3375", - "email": "nevaeh@titanigraf.com" - }, - { - "id": 1329, - "guid": "c75fb1ae-dc45-4c37-a4ed-675c24e14483", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Cook", - "company": "Netseco", - "phone": "874-587-3528", - "email": "allison@netseco.com" - }, - { - "id": 1330, - "guid": "0435f419-878b-45e0-9731-481497e81cd8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Conors", - "company": "Infragraph", - "phone": "802-578-3202", - "email": "natalie@infragraph.com" - }, - { - "id": 1331, - "guid": "e7aa1a39-68df-457b-890c-c2e9a6de20ea", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Hawkins", - "company": "Truetomic", - "phone": "897-473-3888", - "email": "allison@truetomic.com" - }, - { - "id": 1332, - "guid": "a634c6d2-a90e-4c9c-a9e0-238f902da6b8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Milton", - "company": "Entcast", - "phone": "868-425-3976", - "email": "vanessa@entcast.com" - }, - { - "id": 1333, - "guid": "94458218-9acd-470b-b4b7-82706e5b6db8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Morgan Goodman", - "company": "Steganoconiche", - "phone": "874-572-2228", - "email": "morgan@steganoconiche.com" - }, - { - "id": 1334, - "guid": "f11f3cdf-986e-47a0-baa1-5538431cf4e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Carrington", - "company": "Fibrotopia", - "phone": "865-563-2818", - "email": "abigail@fibrotopia.com" - }, - { - "id": 1335, - "guid": "1e5946ea-c5b2-4bc4-b205-68a21c8c997e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Nathan", - "company": "Vencom", - "phone": "880-442-3711", - "email": "sarah@vencom.com" - }, - { - "id": 1336, - "guid": "027717e2-e224-4ed3-81f2-f0bd305d66da", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Chesterton", - "company": "US Omnigraphik", - "phone": "891-519-2802", - "email": "khloe@us omnigraphik.com" - }, - { - "id": 1337, - "guid": "f3477032-9dd6-43f4-89ed-576c09dafa9d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Wallace", - "company": "InfoAirway", - "phone": "817-537-2174", - "email": "khloe@infoairway.com" - }, - { - "id": 1338, - "guid": "0799edc6-3d92-4c4e-80eb-24b35429f2ae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Webster", - "company": "Qualserve", - "phone": "872-564-2642", - "email": "charlotte@qualserve.com" - }, - { - "id": 1339, - "guid": "a7c07843-47a3-4fd6-9af6-b79812fac800", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Stanley", - "company": "Pacwest", - "phone": "854-470-3083", - "email": "hannah@pacwest.com" - }, - { - "id": 1340, - "guid": "9318679a-b931-430f-8bb4-218a621f0dad", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Miers", - "company": "Westgate", - "phone": "812-598-3929", - "email": "brooklyn@westgate.com" - }, - { - "id": 1341, - "guid": "2776f9b8-fe75-4ac1-9dcc-757e5df3c3b7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Brooks", - "company": "RoboAerlogix", - "phone": "838-448-3059", - "email": "eva@roboaerlogix.com" - }, - { - "id": 1342, - "guid": "a6ce6aa1-d188-4ba5-a7ff-fb6860346cf8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Brown", - "company": "Westgate", - "phone": "855-594-3672", - "email": "amelia@westgate.com" - }, - { - "id": 1343, - "guid": "5ece8d03-f631-46c7-8461-3b0348e872d9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Milton", - "company": "Idmax", - "phone": "885-565-3897", - "email": "aaliyah@idmax.com" - }, - { - "id": 1344, - "guid": "8161728d-3985-49e2-9275-fee356a212b1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Morrison", - "company": "Fibroserve", - "phone": "867-556-3299", - "email": "kaitlyn@fibroserve.com" - }, - { - "id": 1345, - "guid": "a0895fd0-0cae-4c8e-a1fa-65b129d89cae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Wesley", - "company": "eEyetanic", - "phone": "879-594-2327", - "email": "payton@eeyetanic.com" - }, - { - "id": 1346, - "guid": "549cc668-8bd0-4581-b814-ac6c01a7223e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Nelson", - "company": "Keytheon", - "phone": "898-480-2527", - "email": "taylor@keytheon.com" - }, - { - "id": 1347, - "guid": "0174924e-169d-4c56-93be-e1e5db9bbb5c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Osborne", - "company": "eSteganoergy", - "phone": "817-401-3803", - "email": "alexandra@esteganoergy.com" - }, - { - "id": 1348, - "guid": "264353c6-291b-40cd-ba02-e30681a323d5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Gustman", - "company": "iQualcar", - "phone": "847-412-2291", - "email": "faith@iqualcar.com" - }, - { - "id": 1349, - "guid": "a6faa420-0cb8-4f85-ba98-05386aaa4a89", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Vance", - "company": "Techtron", - "phone": "812-576-2402", - "email": "mya@techtron.com" - }, - { - "id": 1350, - "guid": "5e84d25b-7de7-476a-8668-804ece25edd0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Milton", - "company": "Safetrust", - "phone": "845-500-3442", - "email": "faith@safetrust.com" - }, - { - "id": 1351, - "guid": "626a096a-a8b5-46c2-ba1d-a0e1f6c8b9a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Ogden", - "company": "iSkyvaco", - "phone": "847-488-3833", - "email": "alyssa@iskyvaco.com" - }, - { - "id": 1352, - "guid": "dfac25ac-ade7-4fd2-add0-9b3832b8939d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Timmons", - "company": "Allphysiche", - "phone": "843-455-2501", - "email": "destiny@allphysiche.com" - }, - { - "id": 1353, - "guid": "8c4dc195-d83e-4abc-a5a6-ac4fc87f576c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Campbell", - "company": "Navivacs", - "phone": "805-481-2203", - "email": "alyssa@navivacs.com" - }, - { - "id": 1354, - "guid": "af10ab18-9cad-4805-a6eb-af2f44e5d739", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Wayne", - "company": "iMedconik", - "phone": "883-436-2021", - "email": "maria@imedconik.com" - }, - { - "id": 1355, - "guid": "38e9c5d5-09a9-4f16-91d4-3f770d3ecc4a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Croftoon", - "company": "iMedconik", - "phone": "842-415-2123", - "email": "rachel@imedconik.com" - }, - { - "id": 1356, - "guid": "a4493618-a321-464d-9ea9-7b3f796bc7b8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Hardman", - "company": "Teraserv", - "phone": "816-526-2704", - "email": "lillian@teraserv.com" - }, - { - "id": 1357, - "guid": "14fac417-be04-49ab-9b3a-9ff5548d0840", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Stanley", - "company": "Fibrotopia", - "phone": "836-484-2930", - "email": "chloe@fibrotopia.com" - }, - { - "id": 1358, - "guid": "8e0ad2f1-32d7-4f68-b7df-0bb9aeca553b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Youmans", - "company": "Steganoconiche", - "phone": "881-453-3998", - "email": "olivia@steganoconiche.com" - }, - { - "id": 1359, - "guid": "3d524616-01fa-4ee4-a490-176450f6e29e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Oswald", - "company": "Vencom", - "phone": "844-418-3716", - "email": "hannah@vencom.com" - }, - { - "id": 1360, - "guid": "aac72fa9-3b97-4521-81c4-45ec9abb6523", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Michaelson", - "company": "Techtron", - "phone": "800-580-3680", - "email": "molly@techtron.com" - }, - { - "id": 1361, - "guid": "d24fe94d-5b3c-4f61-a0f6-4589fca422bf", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Vaughan", - "company": "Videobanc", - "phone": "896-589-2574", - "email": "jessica@videobanc.com" - }, - { - "id": 1362, - "guid": "c41196d8-4462-4e0b-b407-ad3d72b038ed", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Gate", - "company": "RoboAerlogix", - "phone": "820-578-3558", - "email": "isabelle@roboaerlogix.com" - }, - { - "id": 1363, - "guid": "cb835771-5c2a-4db3-a73c-e1961ed01ba7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Charlotte Sherlock", - "company": "Qualserve", - "phone": "807-452-2205", - "email": "charlotte@qualserve.com" - }, - { - "id": 1364, - "guid": "7a551ce5-65ec-4f26-acb9-e1c55ff0f453", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Watson", - "company": "Westgate", - "phone": "812-537-2525", - "email": "kayla@westgate.com" - }, - { - "id": 1365, - "guid": "f80fbcdf-2435-4aec-a17e-ea0edc835260", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Thornton", - "company": "Mescaridic", - "phone": "848-557-3039", - "email": "sophia@mescaridic.com" - }, - { - "id": 1366, - "guid": "6df3111a-0374-4f5f-96fe-5313383999ff", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Goldman", - "company": "Techtron", - "phone": "889-507-3559", - "email": "jocelyn@techtron.com" - }, - { - "id": 1367, - "guid": "e481c166-e780-4554-bc62-68d761992aeb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Faith Stanley", - "company": "Transtouch", - "phone": "837-423-3644", - "email": "faith@transtouch.com" - }, - { - "id": 1368, - "guid": "48baa75b-a6fa-4c5d-905d-2b6fb14f7289", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hannah WifKinson", - "company": "Qualserve", - "phone": "800-489-3069", - "email": "hannah@qualserve.com" - }, - { - "id": 1369, - "guid": "bb0b2537-3112-4f8e-818c-3143084b68ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Brown", - "company": "Qualserve", - "phone": "895-572-3310", - "email": "caroline@qualserve.com" - }, - { - "id": 1370, - "guid": "839762f1-c6e9-4409-b86b-2fc565c8d497", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Sheldon", - "company": "Videobanc", - "phone": "830-556-3779", - "email": "sarah@videobanc.com" - }, - { - "id": 1371, - "guid": "bfd3e7d4-f482-4bba-a380-731c0aceb19e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Milton", - "company": "Orthomedia", - "phone": "862-542-2394", - "email": "grace@orthomedia.com" - }, - { - "id": 1372, - "guid": "386c65af-ee4e-44e9-a76a-3d75c359f962", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Crossman", - "company": "Transtouch", - "phone": "879-450-2343", - "email": "katelyn@transtouch.com" - }, - { - "id": 1373, - "guid": "28879d27-531d-4058-9635-32f210b4a0af", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Goldman", - "company": "Robocomm", - "phone": "816-522-2093", - "email": "arianna@robocomm.com" - }, - { - "id": 1374, - "guid": "8e4bf464-7f0b-425f-94fd-3ed0552586a0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Ward", - "company": "Jamconik", - "phone": "842-433-2913", - "email": "gabrielle@jamconik.com" - }, - { - "id": 1375, - "guid": "4cf2a481-53ca-4d9f-bf25-f87e8aaa3d2a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Hoggarth", - "company": "Westmedia", - "phone": "871-433-3994", - "email": "kayla@westmedia.com" - }, - { - "id": 1376, - "guid": "57db4bd5-da8c-4113-874a-bcac331ccfeb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mia Charlson", - "company": "iEnland", - "phone": "898-501-3066", - "email": "mia@ienland.com" - }, - { - "id": 1377, - "guid": "5a9b1872-f42a-4db5-a54e-ecb954ec964b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Nelson", - "company": "Unologic", - "phone": "847-442-3516", - "email": "alyssa@unologic.com" - }, - { - "id": 1378, - "guid": "bddc7827-b8c3-4f35-a53a-32111c0f5dbe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Higgins", - "company": "Dynarama", - "phone": "824-514-3857", - "email": "savannah@dynarama.com" - }, - { - "id": 1379, - "guid": "88b71bc5-e3cb-44bb-9e8e-abaf184894ea", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Osborne", - "company": "Multitiqua", - "phone": "835-592-2779", - "email": "molly@multitiqua.com" - }, - { - "id": 1380, - "guid": "a5d1a937-e860-4211-9ec5-f05afd9a5889", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Adamson", - "company": "Mescatron", - "phone": "864-473-3919", - "email": "isabelle@mescatron.com" - }, - { - "id": 1381, - "guid": "ead9c32f-d4f6-4347-85c2-8f513e4ca5d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bailey Otis", - "company": "Syssoft", - "phone": "867-480-2511", - "email": "bailey@syssoft.com" - }, - { - "id": 1382, - "guid": "3c8c9673-9abe-43c5-b4ec-6f2f9225240f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Chesterton", - "company": "Transtouch", - "phone": "847-455-2341", - "email": "mya@transtouch.com" - }, - { - "id": 1383, - "guid": "b63bac70-4fc1-4e1c-a2f6-f69d9c2cb62b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Osborne", - "company": "Cryptotegrity", - "phone": "805-522-3201", - "email": "melanie@cryptotegrity.com" - }, - { - "id": 1384, - "guid": "90e32f37-73c4-4f46-bc64-e74648c9ce45", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Campbell", - "company": "Compuamerica", - "phone": "898-438-2671", - "email": "aaliyah@compuamerica.com" - }, - { - "id": 1385, - "guid": "8d3bc5ad-0da2-4486-8830-de179285fc63", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Webster", - "company": "Enlogia", - "phone": "824-560-2437", - "email": "addison@enlogia.com" - }, - { - "id": 1386, - "guid": "0168d1af-cdd6-48ab-9cf6-90d473b52fd3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Creighton", - "company": "eSteganoergy", - "phone": "897-474-2515", - "email": "madeline@esteganoergy.com" - }, - { - "id": 1387, - "guid": "9243c1a6-66ac-4aef-9f6d-40241fa2e3ab", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Chesterton", - "company": "Robotomic", - "phone": "895-558-2252", - "email": "riley@robotomic.com" - }, - { - "id": 1388, - "guid": "679eee1e-464d-4210-b6b6-b0c3a3427d3b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Warren", - "company": "Venconix", - "phone": "863-575-3061", - "email": "abigail@venconix.com" - }, - { - "id": 1389, - "guid": "d35420ec-f11f-40c1-8e61-d1118768a662", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Goldman", - "company": "Gigaura", - "phone": "817-485-3528", - "email": "kaitlyn@gigaura.com" - }, - { - "id": 1390, - "guid": "befb6b4f-8bb9-4edf-a509-a67629c28cfd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Clapton", - "company": "SysVenamerica", - "phone": "892-473-2712", - "email": "sydney@sysvenamerica.com" - }, - { - "id": 1391, - "guid": "c0ddaff9-351c-41ae-969d-acd57c5cf96e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Waller", - "company": "Aprama", - "phone": "899-472-2040", - "email": "alexa@aprama.com" - }, - { - "id": 1392, - "guid": "7712bca6-4331-42d7-91be-8584895194ef", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Abramson", - "company": "Transtouch", - "phone": "813-512-3821", - "email": "emily@transtouch.com" - }, - { - "id": 1393, - "guid": "4643a1a0-947b-442f-bd74-0ed95c7c74b3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Oliver", - "company": "Ameritron", - "phone": "824-530-3796", - "email": "allison@ameritron.com" - }, - { - "id": 1394, - "guid": "b27c5fa7-c094-4352-838c-1271065aa18c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Hamphrey", - "company": "Proline", - "phone": "889-420-3503", - "email": "jessica@proline.com" - }, - { - "id": 1395, - "guid": "c9138693-e3a2-4e58-828e-9ed9f5f4ebaf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Stanley", - "company": "Transtouch", - "phone": "813-531-3087", - "email": "aubrey@transtouch.com" - }, - { - "id": 1396, - "guid": "a528fa60-9ec2-439f-bf4d-7543d9fe9ee7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Carter", - "company": "Idmax", - "phone": "888-548-2582", - "email": "valeria@idmax.com" - }, - { - "id": 1397, - "guid": "a00f6260-7718-40c6-8117-6f9fdb2e4bf1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Wesley", - "company": "Teratopia", - "phone": "875-529-3836", - "email": "claire@teratopia.com" - }, - { - "id": 1398, - "guid": "4eecba1e-bd91-4276-8b46-df1144875d1f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Elizabeth Brooks", - "company": "Superscope", - "phone": "831-446-3535", - "email": "elizabeth@superscope.com" - }, - { - "id": 1399, - "guid": "34c1ebe8-a257-4ba6-977a-14d0ab5bc3c1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hailey Croftoon", - "company": "Pacwest", - "phone": "846-556-3370", - "email": "hailey@pacwest.com" - }, - { - "id": 1400, - "guid": "38021e82-f400-4fe5-ba6a-0d06b2008012", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Galbraith", - "company": "Compuamerica", - "phone": "857-435-2017", - "email": "charlotte@compuamerica.com" - }, - { - "id": 1401, - "guid": "f6ba06d4-cbaa-406f-bc48-59f08a5500e4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Olivia Oswald", - "company": "InfoAirway", - "phone": "830-458-3901", - "email": "olivia@infoairway.com" - }, - { - "id": 1402, - "guid": "a43c67ea-e150-4079-bbd2-c315cd11028e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Youmans", - "company": "Teratopia", - "phone": "833-561-3459", - "email": "ariana@teratopia.com" - }, - { - "id": 1403, - "guid": "5c4a8f67-fde4-4a66-a24f-aac5f592f02e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Croftoon", - "company": "Orthosoft", - "phone": "815-467-3771", - "email": "trinity@orthosoft.com" - }, - { - "id": 1404, - "guid": "3a9f287d-180b-434b-941b-4597bff6af1e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Ford", - "company": "Westgate", - "phone": "861-405-3381", - "email": "layla@westgate.com" - }, - { - "id": 1405, - "guid": "56070470-e5bb-41cf-bd67-8a72638fe940", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Hawkins", - "company": "Anaframe", - "phone": "836-593-3706", - "email": "arianna@anaframe.com" - }, - { - "id": 1406, - "guid": "f05ea6ad-88e0-48a5-a698-25ccafb91b8c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Ford", - "company": "Entcast", - "phone": "846-459-3722", - "email": "bailey@entcast.com" - }, - { - "id": 1407, - "guid": "0c02d303-fa0b-40ea-bfe5-a8fc462cfa51", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Adamson", - "company": "Aprama", - "phone": "811-525-3544", - "email": "emma@aprama.com" - }, - { - "id": 1408, - "guid": "2cd26c6f-0f31-4123-8610-219337260ecb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Clapton", - "company": "Idmax", - "phone": "884-564-2708", - "email": "jessica@idmax.com" - }, - { - "id": 1409, - "guid": "e1162628-0c08-4413-b62a-8f079cd0b70c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Milton", - "company": "Skydata", - "phone": "830-582-3463", - "email": "sophie@skydata.com" - }, - { - "id": 1410, - "guid": "0c6a6272-6144-460f-85cc-cff219eb5d0f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Hawkins", - "company": "Dynarama", - "phone": "845-529-2774", - "email": "bella@dynarama.com" - }, - { - "id": 1411, - "guid": "077d1a05-989a-412c-ae56-45f86193a842", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Timmons", - "company": "Venconix", - "phone": "857-423-3806", - "email": "sarah@venconix.com" - }, - { - "id": 1412, - "guid": "6010a2e6-f345-4a24-b617-040d95da3491", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Campbell", - "company": "eEyetanic", - "phone": "800-436-2457", - "email": "autumn@eeyetanic.com" - }, - { - "id": 1413, - "guid": "4c9fcb69-b7de-4371-aec0-d40607927cdb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Osborne", - "company": "Gigaura", - "phone": "853-513-2161", - "email": "allison@gigaura.com" - }, - { - "id": 1414, - "guid": "6667cb35-d215-4d78-abd5-ff672f4cf814", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Gate", - "company": "Thermotomic", - "phone": "887-538-2201", - "email": "mackenzie@thermotomic.com" - }, - { - "id": 1415, - "guid": "51264fc5-a243-41ac-ba2c-4db226d6a37a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Miller", - "company": "Robotomic", - "phone": "808-553-3308", - "email": "alexis@robotomic.com" - }, - { - "id": 1416, - "guid": "e56d0713-8034-4f59-bd6d-3159f2bf43b1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine WifKinson", - "company": "iMedconik", - "phone": "856-524-3181", - "email": "katherine@imedconik.com" - }, - { - "id": 1417, - "guid": "4a0101c9-3d5c-472b-b02a-e780966bde3c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Youmans", - "company": "Multitiqua", - "phone": "898-529-3514", - "email": "evelyn@multitiqua.com" - }, - { - "id": 1418, - "guid": "f8fbd4de-868b-48e6-bf72-879baf8131ad", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia Wesley", - "company": "Fibrotouch", - "phone": "899-503-2863", - "email": "sofia@fibrotouch.com" - }, - { - "id": 1419, - "guid": "b65cfeba-beb8-41f4-8859-880318b78bef", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Hodges", - "company": "Fibrotopia", - "phone": "869-511-2935", - "email": "serenity@fibrotopia.com" - }, - { - "id": 1420, - "guid": "737f5fb0-14f3-4cb3-ad02-a65eea91d0bd", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Watson", - "company": "Indisco", - "phone": "834-546-2277", - "email": "morgan@indisco.com" - }, - { - "id": 1421, - "guid": "b44a049d-01e6-45fa-821b-8d76b7794c27", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Freeman", - "company": "Unconix", - "phone": "852-530-2848", - "email": "makayla@unconix.com" - }, - { - "id": 1422, - "guid": "67db89ed-1e09-429b-bf3c-9634f7fdf79a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Vaughan", - "company": "Teraserv", - "phone": "855-596-2824", - "email": "sofia@teraserv.com" - }, - { - "id": 1423, - "guid": "eef45917-5996-4020-9f4c-080082da55a9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Goldman", - "company": "Anaframe", - "phone": "882-569-2366", - "email": "makayla@anaframe.com" - }, - { - "id": 1424, - "guid": "0600dfa6-b002-47f7-b7d0-41343e9e9d16", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Wesley", - "company": "iSkyvaco", - "phone": "883-575-2604", - "email": "layla@iskyvaco.com" - }, - { - "id": 1425, - "guid": "dcf0be79-6414-41c7-920a-297e86f08efb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Bush", - "company": "Keytheon", - "phone": "801-511-3040", - "email": "molly@keytheon.com" - }, - { - "id": 1426, - "guid": "ee7f3e1d-8b3d-491d-8467-f3786ca404bf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Creighton", - "company": "Titanirola", - "phone": "809-567-3399", - "email": "charlotte@titanirola.com" - }, - { - "id": 1427, - "guid": "6cbdc5af-869d-4405-95f0-353fa4d76fa5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mya Wesley", - "company": "Cryptotegrity", - "phone": "893-576-3290", - "email": "mya@cryptotegrity.com" - }, - { - "id": 1428, - "guid": "abe4baa8-48b3-490f-92ea-b17e620a3055", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emily Owen", - "company": "Techtron", - "phone": "850-488-2995", - "email": "emily@techtron.com" - }, - { - "id": 1429, - "guid": "89dc3e4a-7554-4e86-80f7-88ae19dc1095", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Bush", - "company": "Systheon", - "phone": "847-473-3503", - "email": "isabelle@systheon.com" - }, - { - "id": 1430, - "guid": "baea6208-e7f8-417e-90a9-72f0026b47cf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Fulton", - "company": "iOptystix", - "phone": "847-424-3894", - "email": "genesis@ioptystix.com" - }, - { - "id": 1431, - "guid": "0344adf1-2e33-47fa-8caa-d0a44fb7381a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Wainwright", - "company": "SysVenamerica", - "phone": "822-449-2611", - "email": "sydney@sysvenamerica.com" - }, - { - "id": 1432, - "guid": "38824db4-92de-45bf-bf0c-586537e80daa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Campbell", - "company": "Cryptotemplate", - "phone": "859-418-2381", - "email": "gianna@cryptotemplate.com" - }, - { - "id": 1433, - "guid": "afbcfb2c-c788-4828-98f2-fcfc78c4dd74", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Cook", - "company": "Fibrotouch", - "phone": "853-400-2191", - "email": "victoria@fibrotouch.com" - }, - { - "id": 1434, - "guid": "bec82fb0-46cd-4562-a1c4-40bd58fa87c6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Gustman", - "company": "Celgra", - "phone": "806-584-3027", - "email": "aubrey@celgra.com" - }, - { - "id": 1435, - "guid": "fd3af931-468b-42b7-adba-1b3abe4910ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Thomson", - "company": "Vencom", - "phone": "873-405-3267", - "email": "aaliyah@vencom.com" - }, - { - "id": 1436, - "guid": "7f720ef6-928c-449d-983c-b3b6cc09aff6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Morrison", - "company": "Jamrola", - "phone": "885-554-3793", - "email": "addison@jamrola.com" - }, - { - "id": 1437, - "guid": "83bfcd64-d1fb-4b2a-a89e-a4342a40671a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Waller", - "company": "Syssoft", - "phone": "806-512-3936", - "email": "addison@syssoft.com" - }, - { - "id": 1438, - "guid": "f1fc0d87-bbe9-4986-a7eb-82ae4fe50684", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Thornton", - "company": "Techtron", - "phone": "826-475-3427", - "email": "leah@techtron.com" - }, - { - "id": 1439, - "guid": "49c20d29-9223-4999-8353-b4eb27597ef8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Goldman", - "company": "Turbomart", - "phone": "837-550-3591", - "email": "hailey@turbomart.com" - }, - { - "id": 1440, - "guid": "62554376-3426-4133-bc67-30aaab51f00e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Nathan", - "company": "Quintegrity", - "phone": "898-426-2093", - "email": "melanie@quintegrity.com" - }, - { - "id": 1441, - "guid": "46da1b10-e1ca-4fe0-a387-bca696d21dc7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Michaelson", - "company": "Teknoplexon", - "phone": "825-449-2751", - "email": "madelyn@teknoplexon.com" - }, - { - "id": 1442, - "guid": "8c984161-b237-468a-8c43-4bd1639dcf55", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Stanley", - "company": "Tekcar", - "phone": "846-458-3162", - "email": "isabelle@tekcar.com" - }, - { - "id": 1443, - "guid": "87a31d48-4d47-4b34-83dd-a8650fa1f91a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Miers", - "company": "Textiqua", - "phone": "898-540-2447", - "email": "maria@textiqua.com" - }, - { - "id": 1444, - "guid": "d5648731-d4ce-4d95-b690-fb51f16006dd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Brickman", - "company": "RoboAerlogix", - "phone": "887-558-3328", - "email": "avery@roboaerlogix.com" - }, - { - "id": 1445, - "guid": "53e2fda3-6773-4297-be21-3acd92749e07", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Oswald", - "company": "Unologic", - "phone": "874-414-2922", - "email": "alyssa@unologic.com" - }, - { - "id": 1446, - "guid": "6165f097-8e70-412c-8b40-8cfbf8696b9b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katherine Otis", - "company": "Conrama", - "phone": "837-558-3986", - "email": "katherine@conrama.com" - }, - { - "id": 1447, - "guid": "7d912b06-c51f-4b57-a25f-c35bdbdb6a7a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Vaughan", - "company": "Navivacs", - "phone": "839-569-3916", - "email": "molly@navivacs.com" - }, - { - "id": 1448, - "guid": "7b6c4cfb-3ff2-4ea6-aa98-9b21f97f431b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Carrington", - "company": "Allnet", - "phone": "822-436-2083", - "email": "gianna@allnet.com" - }, - { - "id": 1449, - "guid": "3be4a3ac-b5d9-4579-9075-826248778fcd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bailey Gate", - "company": "Westgate", - "phone": "824-522-3579", - "email": "bailey@westgate.com" - }, - { - "id": 1450, - "guid": "f0895651-519b-4bec-a1ae-bb05fa7ab25e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Gustman", - "company": "Jamrola", - "phone": "876-569-2244", - "email": "alyssa@jamrola.com" - }, - { - "id": 1451, - "guid": "ce36eb61-5d6a-44b3-98d0-61c0df558641", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Oliver", - "company": "Robocomm", - "phone": "844-425-2931", - "email": "paige@robocomm.com" - }, - { - "id": 1452, - "guid": "f8b5d77f-55dc-4cfd-a9a4-ff81687a80fe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Davidson", - "company": "Keytheon", - "phone": "821-471-3436", - "email": "isabella@keytheon.com" - }, - { - "id": 1453, - "guid": "eba57d8f-91e8-41f0-b5f0-40610ae541b4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emily Otis", - "company": "Qualserve", - "phone": "837-407-2846", - "email": "emily@qualserve.com" - }, - { - "id": 1454, - "guid": "80700382-3e48-4a87-b98f-ef53b40ddbcf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Webster", - "company": "Ameritron", - "phone": "876-407-2920", - "email": "mariah@ameritron.com" - }, - { - "id": 1455, - "guid": "e445973e-7c30-4440-a16a-cddfa26b391d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Campbell", - "company": "Inridium", - "phone": "820-497-3933", - "email": "khloe@inridium.com" - }, - { - "id": 1456, - "guid": "15dd4ca8-b110-4a05-b6e8-3e1488aace5d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Nathan", - "company": "Fibroserve", - "phone": "890-570-3610", - "email": "alexa@fibroserve.com" - }, - { - "id": 1457, - "guid": "5479d17e-2393-41e0-823e-cfc6a9cacea5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Charlson", - "company": "Netsystems", - "phone": "813-488-3897", - "email": "zoe@netsystems.com" - }, - { - "id": 1458, - "guid": "4434e80a-01b7-4b1b-a701-97fb49e60aa2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Watson", - "company": "Conrama", - "phone": "884-432-3421", - "email": "alyssa@conrama.com" - }, - { - "id": 1459, - "guid": "bd3feef9-d59e-4b3c-b55b-e1036e276c99", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Morrison", - "company": "Keytheon", - "phone": "893-556-3106", - "email": "nevaeh@keytheon.com" - }, - { - "id": 1460, - "guid": "00c9dab7-f3b6-4164-a305-46f7b1abf534", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Chapman", - "company": "Cryptotemplate", - "phone": "824-509-2404", - "email": "eva@cryptotemplate.com" - }, - { - "id": 1461, - "guid": "4ed6a3a9-3fe9-4ad9-9780-3629b0f0d8f9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Molligan", - "company": "Cryptotemplate", - "phone": "898-597-3796", - "email": "kaitlyn@cryptotemplate.com" - }, - { - "id": 1462, - "guid": "8433d102-0550-4a71-904a-9a01601c233f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Smith", - "company": "Polytheon", - "phone": "834-413-2975", - "email": "katherine@polytheon.com" - }, - { - "id": 1463, - "guid": "fec76e3b-7f50-4302-acc1-59e384ebe0c3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Michaelson", - "company": "Robotemplate", - "phone": "856-479-3713", - "email": "samantha@robotemplate.com" - }, - { - "id": 1464, - "guid": "db5bb696-720d-4299-be37-2e6786f53ffb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Conors", - "company": "Safeagra", - "phone": "862-509-3742", - "email": "vanessa@safeagra.com" - }, - { - "id": 1465, - "guid": "c505b8f8-412e-4965-834b-38efb7cea105", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Cramer", - "company": "Xeicon", - "phone": "832-413-2045", - "email": "payton@xeicon.com" - }, - { - "id": 1466, - "guid": "693a4c4a-28d0-422f-bf54-96b91c376683", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Savannah Turner", - "company": "Infragraph", - "phone": "846-483-2792", - "email": "savannah@infragraph.com" - }, - { - "id": 1467, - "guid": "689cd6ea-808f-4015-af69-9c6115816290", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Morrison", - "company": "Westtomik", - "phone": "801-402-3464", - "email": "autumn@westtomik.com" - }, - { - "id": 1468, - "guid": "1981a2b0-2f59-4138-a0b0-1ff0da06359d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Julia Carter", - "company": "Hypervaco", - "phone": "881-595-3312", - "email": "julia@hypervaco.com" - }, - { - "id": 1469, - "guid": "2c202645-10b4-4c0c-bb6f-7761887ffb27", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Neal", - "company": "Airdyne", - "phone": "808-598-3548", - "email": "kaitlyn@airdyne.com" - }, - { - "id": 1470, - "guid": "2b286ee9-bf9b-4c7c-86a2-1501ff414662", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Murphy", - "company": "Truetomic", - "phone": "802-464-3978", - "email": "claire@truetomic.com" - }, - { - "id": 1471, - "guid": "2eafec63-bb5f-46bb-9081-6f79ed5fb984", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Webster", - "company": "Aluco", - "phone": "806-586-2790", - "email": "gianna@aluco.com" - }, - { - "id": 1472, - "guid": "f0d32e06-c467-4245-a587-4f633d9082d3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Owen", - "company": "Aluco", - "phone": "868-487-3243", - "email": "maya@aluco.com" - }, - { - "id": 1473, - "guid": "7bb3f2dc-91d5-46f7-a578-6d45c1205e17", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Mercer", - "company": "Systheon", - "phone": "810-570-3413", - "email": "madelyn@systheon.com" - }, - { - "id": 1474, - "guid": "1ab3fbe5-3428-48a0-96f1-a0ccd118b2ae", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Osborne", - "company": "Airdyne", - "phone": "830-488-3490", - "email": "lily@airdyne.com" - }, - { - "id": 1475, - "guid": "4dca9939-26d2-42f6-be7d-425462f02dad", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Morrison", - "company": "Westmedia", - "phone": "801-441-2406", - "email": "natalie@westmedia.com" - }, - { - "id": 1476, - "guid": "58520232-7fb4-4948-a02f-636594f01fb8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Adamson", - "company": "iQualcar", - "phone": "864-539-3570", - "email": "vanessa@iqualcar.com" - }, - { - "id": 1477, - "guid": "c967dde1-24ed-4693-865d-2871e26b90ba", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Goldman", - "company": "Unologic", - "phone": "809-570-2184", - "email": "abigail@unologic.com" - }, - { - "id": 1478, - "guid": "cb3ef335-b86d-4340-8d9c-2b597bdaf7c1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Walkman", - "company": "Orthomedia", - "phone": "864-427-2306", - "email": "sophia@orthomedia.com" - }, - { - "id": 1479, - "guid": "36f6ff4f-194c-4602-9d35-b2cdfe5bdca3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Haig", - "company": "Netsystems", - "phone": "864-406-2220", - "email": "lauren@netsystems.com" - }, - { - "id": 1480, - "guid": "2db44a59-0d76-4365-92b3-23c3922e1067", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Carter", - "company": "Infraique", - "phone": "842-590-3348", - "email": "kimberly@infraique.com" - }, - { - "id": 1481, - "guid": "6812d0fd-b52b-48c2-ba00-7696af8bce2b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Grace Davidson", - "company": "Infragraph", - "phone": "801-442-3148", - "email": "grace@infragraph.com" - }, - { - "id": 1482, - "guid": "d614440d-0ba2-42a0-8bd4-0a65527d4d79", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Campbell", - "company": "Anaframe", - "phone": "818-551-2799", - "email": "madeline@anaframe.com" - }, - { - "id": 1483, - "guid": "ad78eaf5-a9e6-466d-aff0-a894dbe5dbbc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Morrison", - "company": "Jamrola", - "phone": "826-430-2441", - "email": "avery@jamrola.com" - }, - { - "id": 1484, - "guid": "26772da7-3961-4053-8378-4e20325f5e3b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alyssa Crossman", - "company": "Ameritron", - "phone": "829-536-2087", - "email": "alyssa@ameritron.com" - }, - { - "id": 1485, - "guid": "b0045cd0-bb31-4f7e-ba50-c5e601dea1bb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Riley Waller", - "company": "Conrama", - "phone": "812-510-2363", - "email": "riley@conrama.com" - }, - { - "id": 1486, - "guid": "25872d1b-550f-47a2-a899-7aa54c342657", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Crossman", - "company": "Nanobanc", - "phone": "879-454-3411", - "email": "sophie@nanobanc.com" - }, - { - "id": 1487, - "guid": "3322fd6d-d231-453c-b57e-caf108c187e7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Wood", - "company": "Cryptotegrity", - "phone": "815-490-3795", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 1488, - "guid": "0a2a2a8c-b098-43bf-a483-0f319541edaa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Clapton", - "company": "Hypervaco", - "phone": "819-525-2301", - "email": "madelyn@hypervaco.com" - }, - { - "id": 1489, - "guid": "0380f6c2-7548-4d3c-a1a2-1bb480a8483e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Gustman", - "company": "Allnet", - "phone": "803-559-3967", - "email": "emily@allnet.com" - }, - { - "id": 1490, - "guid": "d459dcbc-332c-4ba9-95b2-830b37a5a1c5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Webster", - "company": "Titanirola", - "phone": "850-577-2917", - "email": "arianna@titanirola.com" - }, - { - "id": 1491, - "guid": "079cd871-bfce-4a5d-82a3-33ba0be2da39", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Fisher", - "company": "US Infratouch", - "phone": "801-584-2766", - "email": "leah@us infratouch.com" - }, - { - "id": 1492, - "guid": "d7f9114b-c89a-4298-bf59-6ec90389616e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Ford", - "company": "Navivacs", - "phone": "811-446-3510", - "email": "melanie@navivacs.com" - }, - { - "id": 1493, - "guid": "16f45346-fd25-47ec-9461-24e7933c1479", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Gardner", - "company": "Mescatron", - "phone": "800-555-2528", - "email": "nevaeh@mescatron.com" - }, - { - "id": 1494, - "guid": "936270b7-cd69-4a1a-8d0f-45c10f74c631", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Hailey", - "company": "Titanigraf", - "phone": "879-557-3256", - "email": "natalie@titanigraf.com" - }, - { - "id": 1495, - "guid": "2294bb98-a4c9-4c37-bb7b-929d03dd5e55", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Ford", - "company": "Westmedia", - "phone": "827-526-3297", - "email": "sophia@westmedia.com" - }, - { - "id": 1496, - "guid": "be459faf-c9ad-4395-be3a-49092464b394", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Gilson", - "company": "InfoAirway", - "phone": "887-438-3254", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 1497, - "guid": "b9c3b904-092d-47f4-b3f1-d4164f9a7a26", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emily Waller", - "company": "Thermotomic", - "phone": "821-585-3554", - "email": "emily@thermotomic.com" - }, - { - "id": 1498, - "guid": "2779032d-ad3c-4320-b0d1-a22968076a4e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Gilmore", - "company": "Westmedia", - "phone": "870-407-3099", - "email": "claire@westmedia.com" - }, - { - "id": 1499, - "guid": "1c7a10c9-fc3c-4d2e-b3cb-7a7b29fc6a97", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Freeman", - "company": "Vencom", - "phone": "869-570-2593", - "email": "emily@vencom.com" - }, - { - "id": 1500, - "guid": "1618da74-1945-430a-a8c7-fe5f9c95e7fe", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Carrington", - "company": "Vencom", - "phone": "874-549-3612", - "email": "mariah@vencom.com" - }, - { - "id": 1501, - "guid": "da1fd2b9-527e-4be7-8b03-349248685b07", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Waller", - "company": "Orthomedia", - "phone": "861-428-3422", - "email": "madeline@orthomedia.com" - }, - { - "id": 1502, - "guid": "4af9bbd9-8a31-46c9-85d0-93ade03d9034", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Morrison", - "company": "Pericenta", - "phone": "830-566-3378", - "email": "bailey@pericenta.com" - }, - { - "id": 1503, - "guid": "e1eecca5-9350-4df9-9e5a-4d52aa9a7825", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Winter", - "company": "Nanobanc", - "phone": "822-584-2736", - "email": "victoria@nanobanc.com" - }, - { - "id": 1504, - "guid": "2b9a35c1-d097-4c4f-a2ea-043b7bd6a632", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Gardner", - "company": "Rapigrafix", - "phone": "805-515-3588", - "email": "abigail@rapigrafix.com" - }, - { - "id": 1505, - "guid": "e9dfae79-fdf8-444f-b829-1f78570247cf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Ford", - "company": "Aluco", - "phone": "817-525-2181", - "email": "aubrey@aluco.com" - }, - { - "id": 1506, - "guid": "f5d7e1bb-f609-41c7-bb1c-66b4c6baf945", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Hodges", - "company": "Allphysiche", - "phone": "879-418-3076", - "email": "gabriella@allphysiche.com" - }, - { - "id": 1507, - "guid": "dc741104-0a3c-4fa0-86e5-82e26b1789f2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kayla Calhoun", - "company": "Orthosoft", - "phone": "833-591-2757", - "email": "kayla@orthosoft.com" - }, - { - "id": 1508, - "guid": "84fc73ff-5623-47ce-9f9b-e5b962994f63", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Goodman", - "company": "Truegate", - "phone": "875-577-3301", - "email": "maria@truegate.com" - }, - { - "id": 1509, - "guid": "83a2c14a-233b-44f1-a9f9-3c615f8aabeb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Gill", - "company": "Systheon", - "phone": "886-560-2604", - "email": "molly@systheon.com" - }, - { - "id": 1510, - "guid": "04c73f1c-a43d-48cd-bef1-10b71cd04b3d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Chloe Daniels", - "company": "Fibrotouch", - "phone": "866-531-2729", - "email": "chloe@fibrotouch.com" - }, - { - "id": 1511, - "guid": "bfcc829b-1663-46b5-b575-fb1bad73af52", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexandra Higgins", - "company": "US Omnigraphik", - "phone": "894-405-3096", - "email": "alexandra@us omnigraphik.com" - }, - { - "id": 1512, - "guid": "2d09750b-ddab-4d0f-9537-0c66eec13260", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Cramer", - "company": "OpKeycomm", - "phone": "841-494-2041", - "email": "taylor@opkeycomm.com" - }, - { - "id": 1513, - "guid": "cbeb9cfb-dc72-40ca-adf1-3df6ebbb26f4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Croftoon", - "company": "Genland", - "phone": "851-436-2520", - "email": "abigail@genland.com" - }, - { - "id": 1514, - "guid": "2a7cb53c-e98b-4f6f-a6a4-cece0c9a7f44", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Carrington", - "company": "Polytheon", - "phone": "808-463-3170", - "email": "sofia@polytheon.com" - }, - { - "id": 1515, - "guid": "bfc827d7-3215-43d6-aeb7-46c4e2d0e395", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Gilbert", - "company": "SysVenamerica", - "phone": "853-493-2464", - "email": "payton@sysvenamerica.com" - }, - { - "id": 1516, - "guid": "4091ca1b-a4a3-4345-ab6d-0ff6e72b04d5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Chandter", - "company": "Rapigrafix", - "phone": "817-577-3953", - "email": "brooklyn@rapigrafix.com" - }, - { - "id": 1517, - "guid": "163941fa-8fa1-4de1-8fc3-96941d771a77", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Wainwright", - "company": "Allnet", - "phone": "862-525-2416", - "email": "sophie@allnet.com" - }, - { - "id": 1518, - "guid": "ef968e70-d9b4-4066-bb8a-6ce15de402db", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Smith", - "company": "Videobanc", - "phone": "830-486-2707", - "email": "amelia@videobanc.com" - }, - { - "id": 1519, - "guid": "498a8312-6104-4f70-b507-cf232ad8e6c3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Winter", - "company": "Idmax", - "phone": "885-439-3495", - "email": "evelyn@idmax.com" - }, - { - "id": 1520, - "guid": "0e9c1fee-f1b0-41fa-a332-b4c43d17a945", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Carey", - "company": "Robotomic", - "phone": "823-454-2925", - "email": "samantha@robotomic.com" - }, - { - "id": 1521, - "guid": "b6ec1bf4-4052-4ad0-99ff-7bff841f0401", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Hoggarth", - "company": "Mescatron", - "phone": "854-497-3757", - "email": "zoey@mescatron.com" - }, - { - "id": 1522, - "guid": "3a920dfd-d0cd-4e3b-b0cb-d5836592b755", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Smith", - "company": "Hypervaco", - "phone": "881-542-2967", - "email": "ava@hypervaco.com" - }, - { - "id": 1523, - "guid": "77bb697d-46ea-4a28-bcff-22ea99fb35ff", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Audrey Clapton", - "company": "Allphysiche", - "phone": "802-434-2569", - "email": "audrey@allphysiche.com" - }, - { - "id": 1524, - "guid": "79a64f60-0fa5-4173-aeee-db0d983928d2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mya Thomson", - "company": "Unconix", - "phone": "854-418-2984", - "email": "mya@unconix.com" - }, - { - "id": 1525, - "guid": "de652779-03d3-40bb-85ea-24805069d186", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Nash", - "company": "Westgate", - "phone": "812-522-2838", - "email": "caroline@westgate.com" - }, - { - "id": 1526, - "guid": "a3be5607-d578-4ce5-b09b-335259cf433e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Gilson", - "company": "Raylog", - "phone": "891-433-2589", - "email": "serenity@raylog.com" - }, - { - "id": 1527, - "guid": "5632a75b-f83c-49fe-83a2-dfc9708499cc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Gilbert", - "company": "Pacwest", - "phone": "836-448-3139", - "email": "andrea@pacwest.com" - }, - { - "id": 1528, - "guid": "6c219bfe-6672-48f0-a8fe-287c184f916f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Calhoun", - "company": "Navivacs", - "phone": "861-546-2468", - "email": "valeria@navivacs.com" - }, - { - "id": 1529, - "guid": "4d108a65-b9b6-454e-80e8-c56223f73b83", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Watson", - "company": "Keytheon", - "phone": "871-558-3497", - "email": "avery@keytheon.com" - }, - { - "id": 1530, - "guid": "fd353b2b-1154-4056-85e0-fb993a5ca1ea", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Winter", - "company": "iOptystix", - "phone": "868-428-2822", - "email": "aubrey@ioptystix.com" - }, - { - "id": 1531, - "guid": "13305b53-a606-497c-8b0b-1952255d421e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Miers", - "company": "Celgra", - "phone": "861-471-2981", - "email": "alexis@celgra.com" - }, - { - "id": 1532, - "guid": "b33b2a62-00c6-49e1-87b0-4d0da3894816", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Chandter", - "company": "Rapigrafix", - "phone": "841-472-2548", - "email": "khloe@rapigrafix.com" - }, - { - "id": 1533, - "guid": "146668dd-ebd9-40b5-bbf9-7e2c63f2bb6b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Carroll", - "company": "Mescatron", - "phone": "871-598-3025", - "email": "trinity@mescatron.com" - }, - { - "id": 1534, - "guid": "8ba98948-4ff1-4ea6-80d6-e6b9844a493b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Osborne", - "company": "iMedconik", - "phone": "872-553-3527", - "email": "faith@imedconik.com" - }, - { - "id": 1535, - "guid": "885ddd50-d0ec-4344-b423-9daa721a81c2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Natalie Day", - "company": "Westgate", - "phone": "840-582-2259", - "email": "natalie@westgate.com" - }, - { - "id": 1536, - "guid": "8ef68db1-0a36-4d23-a552-8e307a39611f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Gill", - "company": "Westtomik", - "phone": "833-536-2311", - "email": "charlotte@westtomik.com" - }, - { - "id": 1537, - "guid": "7dea7d6e-92b3-4239-a5b8-13531e6240b7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Smith", - "company": "Turbomart", - "phone": "834-590-3951", - "email": "emma@turbomart.com" - }, - { - "id": 1538, - "guid": "5b6c4334-15ee-4ea4-a7e4-e25f318e2faa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Hancock", - "company": "Transtouch", - "phone": "822-455-3419", - "email": "sofia@transtouch.com" - }, - { - "id": 1539, - "guid": "551b842a-70c8-4f09-bfd7-c151fd77ea07", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Murphy", - "company": "Robocomm", - "phone": "870-511-3814", - "email": "leah@robocomm.com" - }, - { - "id": 1540, - "guid": "2112d615-0660-4097-a180-f62fcac3d428", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kayla Gilson", - "company": "Qualserve", - "phone": "845-567-3457", - "email": "kayla@qualserve.com" - }, - { - "id": 1541, - "guid": "231d7ad0-63b6-4336-a596-658510e4b671", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Watson", - "company": "Allnet", - "phone": "825-421-3301", - "email": "vanessa@allnet.com" - }, - { - "id": 1542, - "guid": "4009d043-29f1-4950-b79a-2cdb2f8047f4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ava Owen", - "company": "Orthomedia", - "phone": "812-508-3045", - "email": "ava@orthomedia.com" - }, - { - "id": 1543, - "guid": "85d8cacd-f99f-4cee-9e60-bb656370cd13", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Thornton", - "company": "SysUSA", - "phone": "869-521-3505", - "email": "grace@sysusa.com" - }, - { - "id": 1544, - "guid": "f7edf8d1-c56f-45bc-90a9-c2ac95076008", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Miers", - "company": "Cryptotemplate", - "phone": "897-525-2646", - "email": "sophie@cryptotemplate.com" - }, - { - "id": 1545, - "guid": "f90108ff-435b-40cd-961d-f1f088caf959", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Creighton", - "company": "Superscope", - "phone": "898-555-3082", - "email": "serenity@superscope.com" - }, - { - "id": 1546, - "guid": "4752f779-8ec1-4330-a3b6-87e31ec65658", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Vaughan", - "company": "Videobanc", - "phone": "870-578-2425", - "email": "ella@videobanc.com" - }, - { - "id": 1547, - "guid": "a3a2eb84-3b99-4cd5-a974-089f21922de0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Haig", - "company": "Textiqua", - "phone": "844-469-2582", - "email": "sofia@textiqua.com" - }, - { - "id": 1548, - "guid": "22eaa3cf-f493-4ca6-bf81-53c24948d100", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Goldman", - "company": "Textiqua", - "phone": "818-458-3647", - "email": "emma@textiqua.com" - }, - { - "id": 1549, - "guid": "09533436-ed7b-4dbc-bc26-ca412686a929", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Miers", - "company": "Safeagra", - "phone": "818-523-2345", - "email": "emma@safeagra.com" - }, - { - "id": 1550, - "guid": "d81b4e66-bdea-4492-83b1-966489a2d00a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Calhoun", - "company": "Airdyne", - "phone": "870-581-2102", - "email": "sophie@airdyne.com" - }, - { - "id": 1551, - "guid": "dff50cd6-e0a6-4f5a-8f49-964a5f9a91de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Gill", - "company": "Jamrola", - "phone": "854-487-3136", - "email": "lily@jamrola.com" - }, - { - "id": 1552, - "guid": "488d6a04-54db-4e33-884a-7e0795647fcf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Cook", - "company": "Inridium", - "phone": "867-557-3580", - "email": "savannah@inridium.com" - }, - { - "id": 1553, - "guid": "25bcbab6-6c22-400f-bcbe-077dc0f3b929", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Day", - "company": "Hypervaco", - "phone": "871-568-2522", - "email": "gabrielle@hypervaco.com" - }, - { - "id": 1554, - "guid": "b50f1389-b8c8-4087-9f92-1b2aaaa72f14", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Gustman", - "company": "Idmax", - "phone": "854-460-2455", - "email": "abigail@idmax.com" - }, - { - "id": 1555, - "guid": "838a896d-2bad-4ec0-a821-7c829e635869", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Sherlock", - "company": "Mescaridic", - "phone": "843-584-2563", - "email": "melanie@mescaridic.com" - }, - { - "id": 1556, - "guid": "15a138fc-e45d-4b96-b99d-fa38f5f8bdbe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Hardman", - "company": "iEnland", - "phone": "836-508-3449", - "email": "layla@ienland.com" - }, - { - "id": 1557, - "guid": "142a11fb-749d-44e3-b758-36de301baf28", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Croftoon", - "company": "Openserve", - "phone": "828-552-3532", - "email": "madison@openserve.com" - }, - { - "id": 1558, - "guid": "b8eaea30-8f04-4068-8187-84f665d7d3a0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Molly Milton", - "company": "Multitiqua", - "phone": "877-496-3425", - "email": "molly@multitiqua.com" - }, - { - "id": 1559, - "guid": "a4ed3489-9f42-487a-ace5-ec44e3cc62a8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Brooks", - "company": "Keytheon", - "phone": "821-465-2279", - "email": "avery@keytheon.com" - }, - { - "id": 1560, - "guid": "3180809d-8471-4bb1-8d0a-9bb7d6aa8a3f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madeline Hawkins", - "company": "eEyetanic", - "phone": "857-522-2490", - "email": "madeline@eeyetanic.com" - }, - { - "id": 1561, - "guid": "a13875ea-13b5-4aff-a005-caa18c8b0f78", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Morrison", - "company": "Gigaura", - "phone": "877-514-3244", - "email": "eva@gigaura.com" - }, - { - "id": 1562, - "guid": "6a670976-3092-4d76-9125-72525293662f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Fulton", - "company": "Rapigrafix", - "phone": "871-434-3943", - "email": "layla@rapigrafix.com" - }, - { - "id": 1563, - "guid": "b0eb9341-4505-4c64-82ad-ab7b2bec24d7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Hamphrey", - "company": "Videobanc", - "phone": "897-481-2058", - "email": "gabriella@videobanc.com" - }, - { - "id": 1564, - "guid": "46363987-2c1d-4d9a-9fc4-f4abe7e29b59", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Mercer", - "company": "SysVenamerica", - "phone": "826-491-3247", - "email": "kaitlyn@sysvenamerica.com" - }, - { - "id": 1565, - "guid": "cc5360ff-de8f-4197-9079-cea602884d03", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Chesterton", - "company": "Proline", - "phone": "878-403-2143", - "email": "isabelle@proline.com" - }, - { - "id": 1566, - "guid": "a0c0f503-e6fd-4fe3-8b87-8279fc389e7f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Carroll", - "company": "Quintegrity", - "phone": "802-422-3858", - "email": "kaitlyn@quintegrity.com" - }, - { - "id": 1567, - "guid": "65b08ee9-8ff2-4689-8f85-7dc450612d4c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Campbell", - "company": "Unologic", - "phone": "841-527-2531", - "email": "bailey@unologic.com" - }, - { - "id": 1568, - "guid": "8f720f49-ade0-4feb-998b-14def8d75c07", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Walkman", - "company": "Xeicon", - "phone": "876-518-2418", - "email": "lily@xeicon.com" - }, - { - "id": 1569, - "guid": "ddfd88f4-1440-4ffc-8940-15182e7de623", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Miln", - "company": "Ventanium", - "phone": "857-565-2079", - "email": "caroline@ventanium.com" - }, - { - "id": 1570, - "guid": "23fb4fec-6b17-4c37-9c60-a15526ef441d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Carey", - "company": "Proline", - "phone": "821-536-3483", - "email": "sophia@proline.com" - }, - { - "id": 1571, - "guid": "1df2feaf-9ff7-43dc-a6e6-1f901d88aa34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Murphy", - "company": "Gigaura", - "phone": "808-438-2670", - "email": "emma@gigaura.com" - }, - { - "id": 1572, - "guid": "5f47daf6-c724-485c-a495-9906ea36ffdf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sofia Calhoun", - "company": "Entcast", - "phone": "898-511-2068", - "email": "sofia@entcast.com" - }, - { - "id": 1573, - "guid": "5208c7f1-cbb9-4d19-a2c5-f84804cc6700", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ella Hamphrey", - "company": "iSkyvaco", - "phone": "803-457-3422", - "email": "ella@iskyvaco.com" - }, - { - "id": 1574, - "guid": "7b4c9e9d-2cfc-4ff0-bed9-de79017768ae", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Croftoon", - "company": "Westmedia", - "phone": "839-561-3889", - "email": "alexis@westmedia.com" - }, - { - "id": 1575, - "guid": "0293a48d-6379-4405-b4dd-5caa4606e7ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Goldman", - "company": "OpKeycomm", - "phone": "833-577-3967", - "email": "addison@opkeycomm.com" - }, - { - "id": 1576, - "guid": "4fa350d7-102a-4fe3-ad8d-d99c2e43263c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Milton", - "company": "RoboAerlogix", - "phone": "841-522-2456", - "email": "gabriella@roboaerlogix.com" - }, - { - "id": 1577, - "guid": "2f1e8c04-b8fa-44c4-a71d-1ef7c5f01f17", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Crossman", - "company": "Robotemplate", - "phone": "816-594-2414", - "email": "bailey@robotemplate.com" - }, - { - "id": 1578, - "guid": "604af9ed-9cbd-4a2f-ad7e-7abcbe874acb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Cramer", - "company": "Multitiqua", - "phone": "823-408-2152", - "email": "alyssa@multitiqua.com" - }, - { - "id": 1579, - "guid": "afbe6c61-7d3b-4a08-93cc-2488fc8be20f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Murphy", - "company": "Entcast", - "phone": "866-406-3127", - "email": "khloe@entcast.com" - }, - { - "id": 1580, - "guid": "4e49a5db-2063-4b67-9b69-c8f8a79f3202", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Gilmore", - "company": "RoboAerlogix", - "phone": "811-584-3484", - "email": "julia@roboaerlogix.com" - }, - { - "id": 1581, - "guid": "f70e54b4-f7af-4fcd-af8a-0533af60b04c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Chesterton", - "company": "Allnet", - "phone": "888-540-2819", - "email": "aubrey@allnet.com" - }, - { - "id": 1582, - "guid": "a579d214-6430-4faa-a430-a3a42584c12f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Wesley", - "company": "Rapigrafix", - "phone": "825-494-3282", - "email": "bella@rapigrafix.com" - }, - { - "id": 1583, - "guid": "8c53e680-5e22-4777-aa8e-10b76eb317f8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Vance", - "company": "Idmax", - "phone": "859-584-2472", - "email": "leah@idmax.com" - }, - { - "id": 1584, - "guid": "45de76b7-282a-42d9-ab50-898b0eecad31", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Molligan", - "company": "US Infratouch", - "phone": "841-510-3516", - "email": "rachel@us infratouch.com" - }, - { - "id": 1585, - "guid": "4ae97586-49ed-4ff7-905f-01b412e044fd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Bush", - "company": "US Omnigraphik", - "phone": "852-433-2378", - "email": "katelyn@us omnigraphik.com" - }, - { - "id": 1586, - "guid": "a5de585f-aac1-4ded-b3bd-f7275b879e35", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Miers", - "company": "Genland", - "phone": "835-502-3944", - "email": "andrea@genland.com" - }, - { - "id": 1587, - "guid": "d63df234-38b1-4641-863e-7d7eef702912", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hailey Adamson", - "company": "Aprama", - "phone": "893-451-2584", - "email": "hailey@aprama.com" - }, - { - "id": 1588, - "guid": "c27ef7a7-f9f3-4c9b-88c5-a731416bec47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Mercer", - "company": "Jamrola", - "phone": "899-583-3634", - "email": "emma@jamrola.com" - }, - { - "id": 1589, - "guid": "3949c517-4f69-4e16-8713-5b1c94cd04b8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Wood", - "company": "Netseco", - "phone": "875-486-3048", - "email": "kayla@netseco.com" - }, - { - "id": 1590, - "guid": "c225c398-5ab4-4e11-a623-9cefcd73061b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Galbraith", - "company": "Enlogia", - "phone": "868-593-3139", - "email": "lillian@enlogia.com" - }, - { - "id": 1591, - "guid": "9e9f7c20-e1a5-4030-843b-674ff7de9a60", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Campbell", - "company": "Navivacs", - "phone": "821-552-2849", - "email": "allison@navivacs.com" - }, - { - "id": 1592, - "guid": "c0d37449-b0fe-4e76-9e5d-893b49074bdf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Milton", - "company": "Jamrola", - "phone": "894-471-2027", - "email": "lillian@jamrola.com" - }, - { - "id": 1593, - "guid": "ad4bcd77-43d8-4b16-afb8-77dc237e9e4b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Carter", - "company": "Syssoft", - "phone": "850-506-3386", - "email": "alexandra@syssoft.com" - }, - { - "id": 1594, - "guid": "51667a75-a320-4c95-b087-73bdb5471cda", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Chesterton", - "company": "Multitiqua", - "phone": "849-473-2022", - "email": "katherine@multitiqua.com" - }, - { - "id": 1595, - "guid": "03980a76-730c-4dff-9ae2-2716278af209", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Oliver", - "company": "Allphysiche", - "phone": "888-468-2572", - "email": "angelina@allphysiche.com" - }, - { - "id": 1596, - "guid": "1e1605e3-33a1-42e4-9844-25f1f06fa572", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Osborne", - "company": "Skydata", - "phone": "846-443-2607", - "email": "victoria@skydata.com" - }, - { - "id": 1597, - "guid": "82a29fc4-3fcc-4739-aac8-974d64f6f7ae", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Otis", - "company": "Aluco", - "phone": "834-443-3026", - "email": "ashley@aluco.com" - }, - { - "id": 1598, - "guid": "96246c89-3288-469e-8585-f33188534245", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Youmans", - "company": "Mescatron", - "phone": "876-494-3581", - "email": "maria@mescatron.com" - }, - { - "id": 1599, - "guid": "ae238cee-3f19-4805-84f8-66fac2df7ddb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ella Hawkins", - "company": "Qualserve", - "phone": "842-555-3080", - "email": "ella@qualserve.com" - }, - { - "id": 1600, - "guid": "83c09c13-8921-4acb-a059-1392596dfa46", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Milton", - "company": "Openserve", - "phone": "878-496-3190", - "email": "leah@openserve.com" - }, - { - "id": 1601, - "guid": "4a5bdd61-76f5-46a3-99b9-539d9797f14c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Croftoon", - "company": "iMedconik", - "phone": "844-553-3930", - "email": "isabella@imedconik.com" - }, - { - "id": 1602, - "guid": "482dd64d-d9e7-4cc1-92a2-4a5e3948a3a2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Walkman", - "company": "Allphysiche", - "phone": "804-508-3964", - "email": "mariah@allphysiche.com" - }, - { - "id": 1603, - "guid": "185f2726-1844-47d4-8188-13a26cf9b3aa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Watson", - "company": "Netseco", - "phone": "811-581-3065", - "email": "aaliyah@netseco.com" - }, - { - "id": 1604, - "guid": "d47baa7e-547c-4c37-afcd-fff845d1a954", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Morrison", - "company": "Skydata", - "phone": "847-412-2336", - "email": "katherine@skydata.com" - }, - { - "id": 1605, - "guid": "059c5f66-537c-49c0-b645-0ec879fdd506", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Gill", - "company": "Anaframe", - "phone": "802-413-3311", - "email": "ashley@anaframe.com" - }, - { - "id": 1606, - "guid": "847f457b-1fed-49b9-9a9a-24ea9504b9af", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Nelson", - "company": "Truetomic", - "phone": "830-512-2262", - "email": "destiny@truetomic.com" - }, - { - "id": 1607, - "guid": "59ba8251-60a3-4a14-9da4-88994cecce5e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Walkman", - "company": "RoboAerlogix", - "phone": "872-447-3371", - "email": "brooklyn@roboaerlogix.com" - }, - { - "id": 1608, - "guid": "c609d0f1-1d1a-487c-ad61-4c528b23b787", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Vance", - "company": "US Omnigraphik", - "phone": "893-523-2994", - "email": "abigail@us omnigraphik.com" - }, - { - "id": 1609, - "guid": "4a306a8a-fe45-4ef6-9540-2897909eb399", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Oliver", - "company": "Tekcar", - "phone": "873-423-3175", - "email": "amelia@tekcar.com" - }, - { - "id": 1610, - "guid": "3f646959-21a2-4832-a6fe-5dd44fb7dcf6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Molligan", - "company": "Fibroserve", - "phone": "838-415-3461", - "email": "ella@fibroserve.com" - }, - { - "id": 1611, - "guid": "3d692923-2582-4ef1-ae34-2a034f442824", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Molligan", - "company": "Infragraph", - "phone": "813-458-2116", - "email": "avery@infragraph.com" - }, - { - "id": 1612, - "guid": "5dc8a436-e959-4903-a0e6-d08040a7e902", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ashley Chesterton", - "company": "OpKeycomm", - "phone": "893-499-2793", - "email": "ashley@opkeycomm.com" - }, - { - "id": 1613, - "guid": "209f9890-27ef-4dc5-b1b2-06a15fff24ef", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Winter", - "company": "Idmax", - "phone": "845-490-3728", - "email": "julia@idmax.com" - }, - { - "id": 1614, - "guid": "b2ac1c91-2867-412c-be7a-f0af35138910", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Smith", - "company": "Jamconik", - "phone": "858-454-3358", - "email": "lily@jamconik.com" - }, - { - "id": 1615, - "guid": "22844b87-953c-4d4b-9045-d5c58081613a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Chapman", - "company": "Steganoconiche", - "phone": "806-424-3189", - "email": "andrea@steganoconiche.com" - }, - { - "id": 1616, - "guid": "94d85464-ec42-4afa-b2a6-c5669e10aaa4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Oldridge", - "company": "Robotemplate", - "phone": "862-550-3184", - "email": "katelyn@robotemplate.com" - }, - { - "id": 1617, - "guid": "d0426ed4-2712-4ac1-b0bd-34711002841f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexandra Adamson", - "company": "US Omnigraphik", - "phone": "897-531-3588", - "email": "alexandra@us omnigraphik.com" - }, - { - "id": 1618, - "guid": "8bf97bf7-3ab2-4928-b1fd-cb0a6dc06420", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Turner", - "company": "Quintegrity", - "phone": "867-431-3169", - "email": "layla@quintegrity.com" - }, - { - "id": 1619, - "guid": "04ad27a2-4cf9-48c5-b457-11c860b82333", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Wainwright", - "company": "Technogra", - "phone": "819-431-3099", - "email": "autumn@technogra.com" - }, - { - "id": 1620, - "guid": "711f540e-3dca-4359-8039-33a6f6f09689", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Brickman", - "company": "Techtron", - "phone": "838-523-3448", - "email": "evelyn@techtron.com" - }, - { - "id": 1621, - "guid": "f891394c-c4d8-4634-80d0-2e9e514b5dfc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Gate", - "company": "Conrama", - "phone": "898-561-2344", - "email": "avery@conrama.com" - }, - { - "id": 1622, - "guid": "a9c6ce33-dd67-4529-b971-141761c31390", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Taylor Galbraith", - "company": "Jamrola", - "phone": "845-478-2436", - "email": "taylor@jamrola.com" - }, - { - "id": 1623, - "guid": "ef090138-50e3-4413-812d-5386e654eb80", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Gilson", - "company": "Multitiqua", - "phone": "876-593-3595", - "email": "katherine@multitiqua.com" - }, - { - "id": 1624, - "guid": "afdf1735-7256-4f74-babb-a11cf278618a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Chloe Brooks", - "company": "Anaframe", - "phone": "802-516-2270", - "email": "chloe@anaframe.com" - }, - { - "id": 1625, - "guid": "e7a746a1-5126-4edb-8cf8-8e89284483dd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Gate", - "company": "Venconix", - "phone": "813-495-3144", - "email": "autumn@venconix.com" - }, - { - "id": 1626, - "guid": "50a163ae-a276-4274-b9b4-ea150fee9323", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Goodman", - "company": "InfoAirway", - "phone": "843-526-2143", - "email": "sophie@infoairway.com" - }, - { - "id": 1627, - "guid": "6901fb9d-73d0-465f-9e03-ef246411b840", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Young", - "company": "Westmedia", - "phone": "889-436-3772", - "email": "mackenzie@westmedia.com" - }, - { - "id": 1628, - "guid": "0638b76d-dd4e-48a6-a8ee-8ff0d834fb87", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Hawkins", - "company": "Truegate", - "phone": "805-408-3941", - "email": "victoria@truegate.com" - }, - { - "id": 1629, - "guid": "7f4ebb45-e85e-4378-ad53-bd9ce07f6dd9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alyssa Chesterton", - "company": "Robotemplate", - "phone": "877-536-3585", - "email": "alyssa@robotemplate.com" - }, - { - "id": 1630, - "guid": "54b5bf98-b853-4af4-bd2e-9ac4e2dda828", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Goodman", - "company": "Netseco", - "phone": "898-579-3169", - "email": "olivia@netseco.com" - }, - { - "id": 1631, - "guid": "a97e0476-090b-4c99-99a2-43d16a4ca22c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Thornton", - "company": "Anaframe", - "phone": "853-455-3624", - "email": "sofia@anaframe.com" - }, - { - "id": 1632, - "guid": "60899eaa-ce11-4ed3-bf43-5306dba4b43a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Youmans", - "company": "Keytheon", - "phone": "851-469-3419", - "email": "lauren@keytheon.com" - }, - { - "id": 1633, - "guid": "aed62a85-f82f-4e88-acab-a65bfb704d99", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Thomson", - "company": "Techtron", - "phone": "878-472-2812", - "email": "taylor@techtron.com" - }, - { - "id": 1634, - "guid": "2b54cf8b-a825-4911-a53b-14998233c36c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Wayne", - "company": "Orthosoft", - "phone": "800-570-3632", - "email": "genesis@orthosoft.com" - }, - { - "id": 1635, - "guid": "7f2fdaae-ecb5-441d-985f-20b565a2d63d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Chapman", - "company": "InfoAirway", - "phone": "874-534-2889", - "email": "hailey@infoairway.com" - }, - { - "id": 1636, - "guid": "620eafbf-7a29-4598-a5a2-98a503388f1a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Waller", - "company": "Infragraph", - "phone": "828-470-2295", - "email": "lillian@infragraph.com" - }, - { - "id": 1637, - "guid": "2e19371b-9bc0-4825-b843-027fb404c04a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Morrison", - "company": "Cryptotegrity", - "phone": "862-455-3899", - "email": "aaliyah@cryptotegrity.com" - }, - { - "id": 1638, - "guid": "272fd923-0298-48ee-925e-ac722b2e789b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Wallace", - "company": "Netseco", - "phone": "884-503-2549", - "email": "maria@netseco.com" - }, - { - "id": 1639, - "guid": "5b55e499-970b-460b-8e35-6f0bb4d8d483", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Miller", - "company": "Turbomart", - "phone": "832-529-3017", - "email": "abigail@turbomart.com" - }, - { - "id": 1640, - "guid": "1b45a21e-174c-41e9-a656-791fd476c53e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa White", - "company": "Anaframe", - "phone": "849-530-3639", - "email": "alyssa@anaframe.com" - }, - { - "id": 1641, - "guid": "659fad2b-c266-4691-b14a-d4c0d0b43243", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Walkman", - "company": "Compuamerica", - "phone": "820-490-3201", - "email": "mariah@compuamerica.com" - }, - { - "id": 1642, - "guid": "5be03c42-e25e-456c-9478-cc1a67c8afb2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Higgins", - "company": "Entcast", - "phone": "818-547-2319", - "email": "charlotte@entcast.com" - }, - { - "id": 1643, - "guid": "f7288de1-5548-431a-9f13-b43a2513c006", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Nathan", - "company": "Skydata", - "phone": "869-562-3108", - "email": "faith@skydata.com" - }, - { - "id": 1644, - "guid": "431de260-0a4e-4d97-a734-ea8ad5599197", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Brooks", - "company": "Cryptotemplate", - "phone": "813-549-2130", - "email": "maya@cryptotemplate.com" - }, - { - "id": 1645, - "guid": "81126a25-411f-4ed4-b48f-6132d4cb53ef", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Oldman", - "company": "Truetomic", - "phone": "873-463-2065", - "email": "gabriella@truetomic.com" - }, - { - "id": 1646, - "guid": "219d6464-5fae-41bf-832c-45744f283bae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Hailey", - "company": "Venconix", - "phone": "893-532-2269", - "email": "grace@venconix.com" - }, - { - "id": 1647, - "guid": "a925ecc0-4518-439d-8ef5-1c1b035ec1b0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Cramer", - "company": "Teratopia", - "phone": "856-530-3419", - "email": "mackenzie@teratopia.com" - }, - { - "id": 1648, - "guid": "1e30d0ef-0d04-436b-b954-63f71ca3b84d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Fulton", - "company": "Conotomics", - "phone": "816-403-2910", - "email": "aubrey@conotomics.com" - }, - { - "id": 1649, - "guid": "c9725dd5-34da-42bf-a1c9-77b44dc4e606", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Murphy", - "company": "SysVenamerica", - "phone": "868-471-2174", - "email": "maya@sysvenamerica.com" - }, - { - "id": 1650, - "guid": "7118f973-d722-4fb8-9372-707f06f59aef", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Creighton", - "company": "Multitiqua", - "phone": "866-531-3400", - "email": "alyssa@multitiqua.com" - }, - { - "id": 1651, - "guid": "90d9d96a-64ed-4be8-a8b0-16f1e0df22d5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Hardman", - "company": "Jamrola", - "phone": "846-527-2188", - "email": "samantha@jamrola.com" - }, - { - "id": 1652, - "guid": "8e87ecd4-478d-4a11-bddd-05f31d7109a5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Goodman", - "company": "InfoAirway", - "phone": "821-572-2369", - "email": "layla@infoairway.com" - }, - { - "id": 1653, - "guid": "bf36a590-843b-4d26-83ec-b133ea1f27bf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Thornton", - "company": "Aluco", - "phone": "827-447-2969", - "email": "bailey@aluco.com" - }, - { - "id": 1654, - "guid": "edb22104-c7f7-45de-bd35-397f63c4ee89", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Oldman", - "company": "Infragraph", - "phone": "884-592-2258", - "email": "amelia@infragraph.com" - }, - { - "id": 1655, - "guid": "cf467248-cc28-4d4f-86fb-5d447a07cdab", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Mercer", - "company": "Conotomics", - "phone": "818-548-3117", - "email": "addison@conotomics.com" - }, - { - "id": 1656, - "guid": "b3a66d50-7215-47c4-a2d7-19a1c9c08eba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Waller", - "company": "Robotemplate", - "phone": "886-474-2573", - "email": "alexandra@robotemplate.com" - }, - { - "id": 1657, - "guid": "7cf3d96b-fb9c-4fc1-ab09-d6d455eaa562", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Winter", - "company": "Generola", - "phone": "806-504-3180", - "email": "bailey@generola.com" - }, - { - "id": 1658, - "guid": "d8ae00f4-2e4d-4c07-99ad-ed54800c3be6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Milton", - "company": "Celgra", - "phone": "815-401-2994", - "email": "katelyn@celgra.com" - }, - { - "id": 1659, - "guid": "8541bebf-f13c-4b48-8068-35d6b539bdcd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Charlson", - "company": "Safeagra", - "phone": "810-413-3567", - "email": "madison@safeagra.com" - }, - { - "id": 1660, - "guid": "0b29b064-9ba1-4465-b989-509f25eee3e6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Croftoon", - "company": "Jamconik", - "phone": "876-574-2458", - "email": "melanie@jamconik.com" - }, - { - "id": 1661, - "guid": "ec12e0af-ab12-4ce6-9d29-c0da6a1c1b83", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Hoggarth", - "company": "Videobanc", - "phone": "818-451-3902", - "email": "hannah@videobanc.com" - }, - { - "id": 1662, - "guid": "e2a0bb1e-0c59-427a-98e5-a781b1f91634", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Gate", - "company": "Allphysiche", - "phone": "868-526-3501", - "email": "camila@allphysiche.com" - }, - { - "id": 1663, - "guid": "944a6e1e-e49b-4b48-8e73-648d19c127e9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Chapman", - "company": "Xeicon", - "phone": "836-491-2991", - "email": "molly@xeicon.com" - }, - { - "id": 1664, - "guid": "1d9aeabe-7356-4baf-a8ff-7528246e1695", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Higgins", - "company": "Sontopia", - "phone": "815-411-2293", - "email": "nevaeh@sontopia.com" - }, - { - "id": 1665, - "guid": "e0208923-59ce-46e0-b998-4b97cc60005a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Webster", - "company": "Titanigraf", - "phone": "864-451-3014", - "email": "kimberly@titanigraf.com" - }, - { - "id": 1666, - "guid": "1ecaf26a-e66a-42b4-bf19-022904615ae8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Crossman", - "company": "Netseco", - "phone": "848-451-2641", - "email": "nevaeh@netseco.com" - }, - { - "id": 1667, - "guid": "4a482243-3313-473c-982a-8ac1ad8fe522", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katelyn Waller", - "company": "Superscope", - "phone": "837-470-2693", - "email": "katelyn@superscope.com" - }, - { - "id": 1668, - "guid": "9597c6fc-481e-421a-b83f-79417c5dcdd6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Watson", - "company": "eEyetanic", - "phone": "843-488-3099", - "email": "serenity@eeyetanic.com" - }, - { - "id": 1669, - "guid": "6d01ac08-2ab0-44be-b9ed-ae85700ca4eb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Winter", - "company": "Techtron", - "phone": "822-417-3546", - "email": "maria@techtron.com" - }, - { - "id": 1670, - "guid": "1eb876d2-589a-46e2-9f37-fe843c5b3ade", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Wood", - "company": "Hypervaco", - "phone": "804-568-3740", - "email": "gianna@hypervaco.com" - }, - { - "id": 1671, - "guid": "3dff7de3-3c56-4b56-a1bd-04492d9386ee", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Chandter", - "company": "Unologic", - "phone": "882-401-2452", - "email": "valeria@unologic.com" - }, - { - "id": 1672, - "guid": "aa0d06e0-f036-43e4-a585-77b04a6418a1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Ford", - "company": "Fibrotopia", - "phone": "891-542-2649", - "email": "rachel@fibrotopia.com" - }, - { - "id": 1673, - "guid": "f2c095ca-03be-4041-9edd-01208fc27772", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Vance", - "company": "Teknoplexon", - "phone": "876-449-2414", - "email": "leah@teknoplexon.com" - }, - { - "id": 1674, - "guid": "73a759de-49d4-4c94-83a0-17a0856802f9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Brooks", - "company": "iEnland", - "phone": "867-476-3671", - "email": "avery@ienland.com" - }, - { - "id": 1675, - "guid": "1c932f58-2339-4905-a216-986a57b51963", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Cook", - "company": "Navivacs", - "phone": "887-590-3083", - "email": "trinity@navivacs.com" - }, - { - "id": 1676, - "guid": "00a02c4e-0344-4a4f-b563-c321851fcff7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophia Ward", - "company": "SysUSA", - "phone": "848-598-3417", - "email": "sophia@sysusa.com" - }, - { - "id": 1677, - "guid": "0434e8ae-0ba2-4073-872e-871d59bb3c31", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Julia Campbell", - "company": "Celgra", - "phone": "871-479-3239", - "email": "julia@celgra.com" - }, - { - "id": 1678, - "guid": "e62c107c-6f8d-4fd3-bd0c-7ce5541eff05", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Haig", - "company": "Multitiqua", - "phone": "844-556-2507", - "email": "makayla@multitiqua.com" - }, - { - "id": 1679, - "guid": "f74a9a53-43ed-4f64-a677-72d6392b0894", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Payton Gilson", - "company": "Transtouch", - "phone": "849-505-3720", - "email": "payton@transtouch.com" - }, - { - "id": 1680, - "guid": "7f682e52-96a5-42cb-aa0f-fca1ed80da30", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley White", - "company": "Robotemplate", - "phone": "884-442-2932", - "email": "ashley@robotemplate.com" - }, - { - "id": 1681, - "guid": "20fe44b5-dd89-4c9b-8fd2-cdb86086dfc2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Miers", - "company": "Turbomart", - "phone": "855-539-2294", - "email": "kylie@turbomart.com" - }, - { - "id": 1682, - "guid": "9faeb618-8704-445a-81f8-59324d410e9e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Miln", - "company": "Ventanium", - "phone": "838-414-3473", - "email": "serenity@ventanium.com" - }, - { - "id": 1683, - "guid": "3d642cef-df69-4ff0-97d6-14f3989e2e74", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Charlson", - "company": "Sontopia", - "phone": "839-467-2078", - "email": "audrey@sontopia.com" - }, - { - "id": 1684, - "guid": "09679cfa-393f-4e27-b432-238009238b03", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Gardner", - "company": "Unologic", - "phone": "868-465-2070", - "email": "layla@unologic.com" - }, - { - "id": 1685, - "guid": "f6264245-d996-4f55-bccd-623f2ab76690", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Julia Wallace", - "company": "Hypervaco", - "phone": "820-463-2176", - "email": "julia@hypervaco.com" - }, - { - "id": 1686, - "guid": "5fd755c1-3193-41d7-8212-e4df4ff466b9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Sherlock", - "company": "Gigaura", - "phone": "831-595-3141", - "email": "lily@gigaura.com" - }, - { - "id": 1687, - "guid": "a9ab2233-ef04-40ed-b171-ba81b1607ee0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Fulton", - "company": "iEnland", - "phone": "896-562-3481", - "email": "gabriella@ienland.com" - }, - { - "id": 1688, - "guid": "073242fd-dced-4c73-9e38-1aa37a1461e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Hancock", - "company": "Qualserve", - "phone": "885-548-3270", - "email": "layla@qualserve.com" - }, - { - "id": 1689, - "guid": "97805d58-99d6-4de7-a3d3-d81ed4bff307", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Turner", - "company": "OpKeycomm", - "phone": "880-582-3767", - "email": "riley@opkeycomm.com" - }, - { - "id": 1690, - "guid": "e6747a81-3c2c-44bf-99fc-8eecfee795ad", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Angelina Croftoon", - "company": "Proline", - "phone": "827-546-3467", - "email": "angelina@proline.com" - }, - { - "id": 1691, - "guid": "b7a3e44a-1b70-48f7-8544-35c5a3684771", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Walkman", - "company": "Cryptotemplate", - "phone": "863-448-3041", - "email": "zoe@cryptotemplate.com" - }, - { - "id": 1692, - "guid": "7ebb130c-558b-4dc4-80a7-b69104575cda", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Sheldon", - "company": "Genland", - "phone": "859-445-3996", - "email": "lauren@genland.com" - }, - { - "id": 1693, - "guid": "d695e1db-12d2-4a1b-81cf-1ffea3fdb015", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Valeria Timmons", - "company": "Orthosoft", - "phone": "844-479-3071", - "email": "valeria@orthosoft.com" - }, - { - "id": 1694, - "guid": "3182a659-9815-48bc-ae58-417c95d8063c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mia Miln", - "company": "Pacwest", - "phone": "808-491-3534", - "email": "mia@pacwest.com" - }, - { - "id": 1695, - "guid": "91dbec37-6198-4b9f-8451-9e2f64c419ac", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Gibbs", - "company": "iSkyvaco", - "phone": "896-586-3306", - "email": "chloe@iskyvaco.com" - }, - { - "id": 1696, - "guid": "ebfa3fec-c480-4f57-8f90-2beaf6489789", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Wainwright", - "company": "Jamrola", - "phone": "887-571-2327", - "email": "bailey@jamrola.com" - }, - { - "id": 1697, - "guid": "c24c887a-945e-4fcd-93eb-8d659dd88d17", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Oswald", - "company": "Keytheon", - "phone": "846-406-2636", - "email": "morgan@keytheon.com" - }, - { - "id": 1698, - "guid": "40441d97-9adc-4658-9651-41115ecd7269", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Timmons", - "company": "Safetrust", - "phone": "812-502-3745", - "email": "gabrielle@safetrust.com" - }, - { - "id": 1699, - "guid": "d6235aaf-3829-46a4-9a1a-dc68450ac17b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Cook", - "company": "Textiqua", - "phone": "810-542-3157", - "email": "lillian@textiqua.com" - }, - { - "id": 1700, - "guid": "d21f9384-89c1-4a6f-87e8-4bc316b83c8b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Daniels", - "company": "Raylog", - "phone": "884-428-2711", - "email": "destiny@raylog.com" - }, - { - "id": 1701, - "guid": "ae041b4c-fc59-4412-a8a9-88ea0f923d59", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Higgins", - "company": "Robotomic", - "phone": "805-430-2750", - "email": "jasmine@robotomic.com" - }, - { - "id": 1702, - "guid": "6282c92f-86da-477a-b430-24b1dee50c96", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Thomson", - "company": "Superscope", - "phone": "858-550-2393", - "email": "paige@superscope.com" - }, - { - "id": 1703, - "guid": "0fc7cbf3-1a05-4f71-9000-af075db211f1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Valeria Miers", - "company": "Generola", - "phone": "870-586-3300", - "email": "valeria@generola.com" - }, - { - "id": 1704, - "guid": "d8de03df-2256-460c-b0e2-6dd095e39adc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Wallace", - "company": "Openserve", - "phone": "826-577-3907", - "email": "gianna@openserve.com" - }, - { - "id": 1705, - "guid": "a906e910-c6bc-40f0-9236-5dc4746ac5c6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Gardner", - "company": "OpKeycomm", - "phone": "884-567-3575", - "email": "camila@opkeycomm.com" - }, - { - "id": 1706, - "guid": "2fb71268-b232-4ed9-8438-0aa05a836c9f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Oldridge", - "company": "Pericenta", - "phone": "889-598-3828", - "email": "molly@pericenta.com" - }, - { - "id": 1707, - "guid": "b8718c2c-44c2-4f33-bbbf-b4ecb4975223", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Day", - "company": "iMedconik", - "phone": "855-506-2599", - "email": "katherine@imedconik.com" - }, - { - "id": 1708, - "guid": "3866d321-f567-43d9-8cbf-d4026d7e2d73", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mackenzie Wallace", - "company": "Truegate", - "phone": "869-551-3466", - "email": "mackenzie@truegate.com" - }, - { - "id": 1709, - "guid": "9d07e58f-31c2-45d0-bdbe-7a6a3ad93d12", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kayla Morrison", - "company": "eSteganoergy", - "phone": "816-491-2900", - "email": "kayla@esteganoergy.com" - }, - { - "id": 1710, - "guid": "75199f26-cd01-4f64-8c0b-f1d72bd8721d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Croftoon", - "company": "Tekcar", - "phone": "861-546-2295", - "email": "valeria@tekcar.com" - }, - { - "id": 1711, - "guid": "f6f7c1e6-127e-4c6a-9391-6a2ad2deaa58", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Olivia Milton", - "company": "Quintegrity", - "phone": "824-457-3384", - "email": "olivia@quintegrity.com" - }, - { - "id": 1712, - "guid": "33bfd60f-d786-4f1f-a654-d2f18e1fdd92", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Miller", - "company": "Robotemplate", - "phone": "893-412-3511", - "email": "serenity@robotemplate.com" - }, - { - "id": 1713, - "guid": "1c0879d7-77e1-427c-9117-49ca545afa7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabelle Neal", - "company": "Thermotomic", - "phone": "815-583-2674", - "email": "isabelle@thermotomic.com" - }, - { - "id": 1714, - "guid": "42e6c0b1-cd7a-4ad1-b31c-5373afdb5d1d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Neal", - "company": "Polytheon", - "phone": "855-510-2285", - "email": "chloe@polytheon.com" - }, - { - "id": 1715, - "guid": "976986ba-acf5-4217-9664-313e9af31627", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Turner", - "company": "Vencom", - "phone": "804-517-2443", - "email": "leah@vencom.com" - }, - { - "id": 1716, - "guid": "72de1a56-0333-4984-b001-c957eaed8a49", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Oliver", - "company": "Venconix", - "phone": "843-597-3674", - "email": "kaitlyn@venconix.com" - }, - { - "id": 1717, - "guid": "33043c20-b5ad-4caf-8caa-1987c64956c9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Goodman", - "company": "eSteganoergy", - "phone": "815-550-3583", - "email": "paige@esteganoergy.com" - }, - { - "id": 1718, - "guid": "fb6b9da2-8458-4c58-8e9c-58bf661ed62a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Elizabeth Thomson", - "company": "SysUSA", - "phone": "803-576-3353", - "email": "elizabeth@sysusa.com" - }, - { - "id": 1719, - "guid": "dbee2f8c-7f4d-41a6-a7a3-5658cb577ae7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Winter", - "company": "Jamconik", - "phone": "869-514-2916", - "email": "abigail@jamconik.com" - }, - { - "id": 1720, - "guid": "105e7d3f-0c5f-49ca-b387-92102ffac4a4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ella Sheldon", - "company": "Videobanc", - "phone": "850-490-3428", - "email": "ella@videobanc.com" - }, - { - "id": 1721, - "guid": "637b9dd4-9b13-4cb9-b770-5da9f1f416a6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Gibbs", - "company": "Systheon", - "phone": "837-435-2446", - "email": "maria@systheon.com" - }, - { - "id": 1722, - "guid": "64f8ff6c-38f7-40d0-b3c5-fc870857f0cf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Chandter", - "company": "RoboAerlogix", - "phone": "884-555-2665", - "email": "hailey@roboaerlogix.com" - }, - { - "id": 1723, - "guid": "89bb1464-ae43-4c40-8f44-3d34d5fba1dc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Vance", - "company": "iOptystix", - "phone": "837-524-3941", - "email": "savannah@ioptystix.com" - }, - { - "id": 1724, - "guid": "3ddbdffd-f8ed-4eb6-8c11-6926f68d7bb5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Day", - "company": "SysUSA", - "phone": "817-528-3503", - "email": "sophie@sysusa.com" - }, - { - "id": 1725, - "guid": "ffa83e89-f383-4bd5-81ba-7fac8ec15572", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel WifKinson", - "company": "Unologic", - "phone": "844-482-3762", - "email": "rachel@unologic.com" - }, - { - "id": 1726, - "guid": "753d0175-97ab-438c-a4e4-be70e60ee370", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Gate", - "company": "Transtouch", - "phone": "811-487-2140", - "email": "jessica@transtouch.com" - }, - { - "id": 1727, - "guid": "5d6a710b-8c2c-4c08-9315-c5a327392225", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Hamphrey", - "company": "Fibroserve", - "phone": "839-452-3538", - "email": "rachel@fibroserve.com" - }, - { - "id": 1728, - "guid": "46740bfc-5b0c-4ad2-8a9a-af007a085f37", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Abramson", - "company": "Generola", - "phone": "815-479-2804", - "email": "gabrielle@generola.com" - }, - { - "id": 1729, - "guid": "2905cf19-b1bd-4ba2-91b0-d092dbe38a06", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Miller", - "company": "Keytheon", - "phone": "821-485-2761", - "email": "kimberly@keytheon.com" - }, - { - "id": 1730, - "guid": "e98073f0-2271-494b-bae7-892862a97dea", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Brooks", - "company": "Titanirola", - "phone": "871-473-3176", - "email": "katherine@titanirola.com" - }, - { - "id": 1731, - "guid": "a1e306df-fba5-4df1-b9c4-8423238cf476", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Gilmore", - "company": "Fibroserve", - "phone": "819-590-2393", - "email": "avery@fibroserve.com" - }, - { - "id": 1732, - "guid": "3b76a220-ab47-4ae9-aa61-655699995e5a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Charlotte Molligan", - "company": "SysVenamerica", - "phone": "876-451-2174", - "email": "charlotte@sysvenamerica.com" - }, - { - "id": 1733, - "guid": "080d0d9f-45b9-4f21-b5a7-054fcf617a69", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Freeman", - "company": "Robotomic", - "phone": "884-505-3225", - "email": "ella@robotomic.com" - }, - { - "id": 1734, - "guid": "c4d0c794-ddd5-4819-a298-e14969d14dd7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Claire Murphy", - "company": "Navivacs", - "phone": "877-578-3056", - "email": "claire@navivacs.com" - }, - { - "id": 1735, - "guid": "23567ff2-934c-49be-8f29-c4fa271b4ee5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Goodman", - "company": "Truetomic", - "phone": "826-464-2024", - "email": "mariah@truetomic.com" - }, - { - "id": 1736, - "guid": "ac0c7e16-bb51-4148-a310-76c914797d4c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Calhoun", - "company": "Titanigraf", - "phone": "812-471-2146", - "email": "lillian@titanigraf.com" - }, - { - "id": 1737, - "guid": "92cebaa4-5635-4bbe-8f78-de1f2a030577", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Harrison", - "company": "Westtomik", - "phone": "832-505-3343", - "email": "trinity@westtomik.com" - }, - { - "id": 1738, - "guid": "7f604665-f383-49b0-abfc-a229244ea84d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Galbraith", - "company": "Truegate", - "phone": "862-534-3158", - "email": "eva@truegate.com" - }, - { - "id": 1739, - "guid": "bf2ee2ae-500d-4bdd-bf31-c224d0ffc1b8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Thornton", - "company": "OpKeycomm", - "phone": "882-570-2964", - "email": "jessica@opkeycomm.com" - }, - { - "id": 1740, - "guid": "68dae87e-af73-4e46-95ff-80df61109c2c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Mercer", - "company": "Fibrotouch", - "phone": "833-574-3751", - "email": "alexis@fibrotouch.com" - }, - { - "id": 1741, - "guid": "f4e9bc16-dea2-4e1e-9bd7-42a254554a78", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Winter", - "company": "iEnland", - "phone": "800-551-2167", - "email": "trinity@ienland.com" - }, - { - "id": 1742, - "guid": "8fc32a44-8b88-40b8-8e55-7ac085554960", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Thornton", - "company": "Technogra", - "phone": "873-434-3113", - "email": "bailey@technogra.com" - }, - { - "id": 1743, - "guid": "13240f0e-46d9-4861-bb3b-b4cb1611e863", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Brickman", - "company": "Allphysiche", - "phone": "803-500-3098", - "email": "ava@allphysiche.com" - }, - { - "id": 1744, - "guid": "8c5f9dba-67cc-4286-bc2c-192a0c4e744d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Hodges", - "company": "Aprama", - "phone": "899-425-3732", - "email": "ariana@aprama.com" - }, - { - "id": 1745, - "guid": "8037b86e-8816-4462-bc8e-fa8f378473ea", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Hoggarth", - "company": "Pacwest", - "phone": "861-507-3443", - "email": "kaylee@pacwest.com" - }, - { - "id": 1746, - "guid": "b48527ef-60d7-41a6-9726-293d241c54e8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Davidson", - "company": "eSteganoergy", - "phone": "877-491-2075", - "email": "kylie@esteganoergy.com" - }, - { - "id": 1747, - "guid": "be1ce1ff-f7f4-41df-b1a2-507005739268", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Chesterton", - "company": "Jamconik", - "phone": "847-437-2457", - "email": "katherine@jamconik.com" - }, - { - "id": 1748, - "guid": "b717c9a0-a84b-4ea6-9871-8a74ec7751cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Youmans", - "company": "Fibrotouch", - "phone": "842-461-3535", - "email": "autumn@fibrotouch.com" - }, - { - "id": 1749, - "guid": "85703cf2-990a-4ad2-a60e-2966369d5131", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Hawkins", - "company": "Skydata", - "phone": "898-416-3305", - "email": "ashley@skydata.com" - }, - { - "id": 1750, - "guid": "a5c64bab-796e-4920-9a32-d28cce2f9364", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Carroll", - "company": "Tekcar", - "phone": "860-499-2977", - "email": "arianna@tekcar.com" - }, - { - "id": 1751, - "guid": "2d6c8199-e5dc-4600-8315-9769caea87d6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Ford", - "company": "Pacwest", - "phone": "819-475-2328", - "email": "gabriella@pacwest.com" - }, - { - "id": 1752, - "guid": "39dcf9f3-0597-40da-a8f2-bd7fbb2d44f0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Miers", - "company": "Systheon", - "phone": "847-503-3352", - "email": "autumn@systheon.com" - }, - { - "id": 1753, - "guid": "bff6f1a2-798e-457a-acf7-5e2c072c7998", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Oliver", - "company": "Teknoplexon", - "phone": "811-585-2482", - "email": "amelia@teknoplexon.com" - }, - { - "id": 1754, - "guid": "b1d1ba82-52cb-4daf-9f9b-223750900ddb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Cramer", - "company": "iEnland", - "phone": "875-595-3856", - "email": "ava@ienland.com" - }, - { - "id": 1755, - "guid": "d4d998b4-0a50-4eff-9e38-9ed190792245", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Ford", - "company": "Jamrola", - "phone": "892-572-2302", - "email": "sofia@jamrola.com" - }, - { - "id": 1756, - "guid": "06978a10-69d6-47c6-af37-99a8b84cf415", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Miller", - "company": "eEyetanic", - "phone": "838-595-3210", - "email": "autumn@eeyetanic.com" - }, - { - "id": 1757, - "guid": "94862085-2e64-4ccf-82cc-30cf0009b0cc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Gilson", - "company": "Syssoft", - "phone": "877-582-2423", - "email": "alexa@syssoft.com" - }, - { - "id": 1758, - "guid": "4ecae529-03b8-4ef6-9377-ea72eb0a76cf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Hoggarth", - "company": "Skydata", - "phone": "813-412-2303", - "email": "bailey@skydata.com" - }, - { - "id": 1759, - "guid": "d91d7fea-7eb1-4d39-a4ae-547d51760df1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Calhoun", - "company": "Allphysiche", - "phone": "842-466-3104", - "email": "khloe@allphysiche.com" - }, - { - "id": 1760, - "guid": "d3b2bcc2-153a-403a-bfe4-df747a4eca78", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Michaelson", - "company": "Westmedia", - "phone": "875-565-3194", - "email": "sarah@westmedia.com" - }, - { - "id": 1761, - "guid": "c78ebe71-6bd7-478f-a65c-be8358c1bb87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Brown", - "company": "Qualserve", - "phone": "806-469-3277", - "email": "amelia@qualserve.com" - }, - { - "id": 1762, - "guid": "e2aadc1e-00eb-4cfb-a048-f4be070451d1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Wainwright", - "company": "Allnet", - "phone": "840-546-2420", - "email": "aubrey@allnet.com" - }, - { - "id": 1763, - "guid": "a3132c67-9ef3-4973-a2e6-d6fb64be7bea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Galbraith", - "company": "Unologic", - "phone": "846-411-2398", - "email": "mia@unologic.com" - }, - { - "id": 1764, - "guid": "9a0316a2-ad36-4283-9184-26d8a3b0b615", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Nevaeh Molligan", - "company": "Dynarama", - "phone": "818-449-2593", - "email": "nevaeh@dynarama.com" - }, - { - "id": 1765, - "guid": "4db88540-af64-42ca-9e1d-6f4d57e1cb2b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Wayne", - "company": "eSteganoergy", - "phone": "891-599-3515", - "email": "vanessa@esteganoergy.com" - }, - { - "id": 1766, - "guid": "85575611-a45d-4fca-88b9-34509e0f87d6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Cramer", - "company": "Pacwest", - "phone": "861-581-2237", - "email": "makayla@pacwest.com" - }, - { - "id": 1767, - "guid": "d71a4959-dc91-438d-8bdf-d64f7a0cd445", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Conors", - "company": "Videobanc", - "phone": "897-548-3140", - "email": "makayla@videobanc.com" - }, - { - "id": 1768, - "guid": "2d2ab5b2-c02a-4968-bdcc-775eb5178b13", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Otis", - "company": "Techtron", - "phone": "877-585-3088", - "email": "genesis@techtron.com" - }, - { - "id": 1769, - "guid": "5c0fae13-773b-460e-b08a-6f2709abcd0e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Clapton", - "company": "Systheon", - "phone": "831-600-2939", - "email": "maya@systheon.com" - }, - { - "id": 1770, - "guid": "a3186817-4824-4a6f-82b5-88a0cf50de32", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Oldman", - "company": "Navivacs", - "phone": "810-558-2622", - "email": "camila@navivacs.com" - }, - { - "id": 1771, - "guid": "1ce584f3-071c-4c70-9754-bf66eef2853c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee WifKinson", - "company": "Xeicon", - "phone": "860-585-3036", - "email": "kaylee@xeicon.com" - }, - { - "id": 1772, - "guid": "edb759f8-3872-4dd8-ad5d-a4b0f058dd0e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Molligan", - "company": "Robocomm", - "phone": "867-591-3261", - "email": "alexis@robocomm.com" - }, - { - "id": 1773, - "guid": "99cb843c-0e40-4dcc-a9df-00b48d4091df", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Hawkins", - "company": "Titanirola", - "phone": "812-570-2541", - "email": "riley@titanirola.com" - }, - { - "id": 1774, - "guid": "78ef5a06-41ee-41b8-a1a0-8f98a5b64d9b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Davidson", - "company": "OpKeycomm", - "phone": "831-461-2972", - "email": "jasmine@opkeycomm.com" - }, - { - "id": 1775, - "guid": "8184cf5d-13e6-4b7b-8882-209503a24ffa", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Murphy", - "company": "Qualserve", - "phone": "837-559-3912", - "email": "victoria@qualserve.com" - }, - { - "id": 1776, - "guid": "0ac278b0-6333-4e2c-afa9-5568a573d604", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Davidson", - "company": "Cryptotemplate", - "phone": "856-587-3232", - "email": "kylie@cryptotemplate.com" - }, - { - "id": 1777, - "guid": "37ec6ee1-45be-43a5-adfe-61751a39e280", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Hoggarth", - "company": "Technogra", - "phone": "866-422-2230", - "email": "melanie@technogra.com" - }, - { - "id": 1778, - "guid": "699d7bdf-5f3b-4143-aaa4-d2abd5b31564", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Elizabeth Thornton", - "company": "Orthosoft", - "phone": "871-430-3855", - "email": "elizabeth@orthosoft.com" - }, - { - "id": 1779, - "guid": "b94ef23f-4834-40d3-b9ce-d5467769f34e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Harrison", - "company": "Qualserve", - "phone": "894-534-3038", - "email": "zoey@qualserve.com" - }, - { - "id": 1780, - "guid": "55d0b0b0-bf6f-4663-9fa9-a1ad49aef2c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Molligan", - "company": "US Omnigraphik", - "phone": "801-506-3288", - "email": "valeria@us omnigraphik.com" - }, - { - "id": 1781, - "guid": "8391869f-12f6-4050-bcc6-b95909301fdc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Oswald", - "company": "eEyetanic", - "phone": "870-498-2636", - "email": "makayla@eeyetanic.com" - }, - { - "id": 1782, - "guid": "97c640f5-5d7e-42eb-9897-a6db3ea5f6be", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Wayne", - "company": "iSkyvaco", - "phone": "832-546-3473", - "email": "ella@iskyvaco.com" - }, - { - "id": 1783, - "guid": "8e4cfcce-6558-4c81-a3f9-a46e2ed63532", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Milton", - "company": "Pericenta", - "phone": "824-406-3314", - "email": "kylie@pericenta.com" - }, - { - "id": 1784, - "guid": "1e9be328-330a-4ed5-88cd-bfd2e2a197fd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Sherlock", - "company": "Orthomedia", - "phone": "816-424-2231", - "email": "allison@orthomedia.com" - }, - { - "id": 1785, - "guid": "da9c7646-2e7a-4a52-a872-ae7e940e4690", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva White", - "company": "Infraique", - "phone": "814-467-3896", - "email": "eva@infraique.com" - }, - { - "id": 1786, - "guid": "83766062-ca40-4fe1-98d5-235035565cf0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison WifKinson", - "company": "Xeicon", - "phone": "830-580-2465", - "email": "addison@xeicon.com" - }, - { - "id": 1787, - "guid": "7008d1d7-67df-4efc-a05a-13ecc911e569", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Cook", - "company": "Titanirola", - "phone": "814-553-3674", - "email": "melanie@titanirola.com" - }, - { - "id": 1788, - "guid": "9bdc99cd-c096-4c28-bca2-9898093f391c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Hawkins", - "company": "Safeagra", - "phone": "804-485-3042", - "email": "zoe@safeagra.com" - }, - { - "id": 1789, - "guid": "daad71ed-bafa-4979-8606-68de8ccd5a2d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Young", - "company": "RoboAerlogix", - "phone": "851-514-3256", - "email": "sophie@roboaerlogix.com" - }, - { - "id": 1790, - "guid": "ac61f4ad-593d-4083-abd7-d2d9321f2d22", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Vance", - "company": "Idmax", - "phone": "842-496-3289", - "email": "serenity@idmax.com" - }, - { - "id": 1791, - "guid": "e4df4d66-0e2e-4ccd-84c0-cb53366d573d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Gate", - "company": "Pacwest", - "phone": "874-417-2904", - "email": "paige@pacwest.com" - }, - { - "id": 1792, - "guid": "705599ae-4a3d-4fe9-ada3-3f0c0feb3482", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Croftoon", - "company": "Cryptotemplate", - "phone": "864-526-3111", - "email": "kylie@cryptotemplate.com" - }, - { - "id": 1793, - "guid": "19cf2a54-f62c-4f2f-8011-d67694fc1c7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Wayne", - "company": "Inridium", - "phone": "877-437-2352", - "email": "victoria@inridium.com" - }, - { - "id": 1794, - "guid": "4b4744cf-4cc9-4dec-a518-ace57b773ad4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Michaelson", - "company": "Teraserv", - "phone": "818-420-3186", - "email": "kaylee@teraserv.com" - }, - { - "id": 1795, - "guid": "464a9b42-67dd-492f-9dc9-c751e81e0dee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila Clapton", - "company": "Truegate", - "phone": "894-437-3398", - "email": "camila@truegate.com" - }, - { - "id": 1796, - "guid": "09e0068d-12b5-42a9-a740-d764d986745c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Winter", - "company": "Ventanium", - "phone": "810-408-3220", - "email": "autumn@ventanium.com" - }, - { - "id": 1797, - "guid": "55988a03-51ec-4670-8375-8d84a3ca706c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Cramer", - "company": "Technogra", - "phone": "830-427-2766", - "email": "paige@technogra.com" - }, - { - "id": 1798, - "guid": "713c4742-b68f-4a31-bbcf-1d9776b6398e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Gilson", - "company": "Skydata", - "phone": "814-469-2738", - "email": "alexis@skydata.com" - }, - { - "id": 1799, - "guid": "94dada99-3e97-49c8-a8ea-14a54fb5907f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sarah Chesterton", - "company": "Transtouch", - "phone": "877-543-3967", - "email": "sarah@transtouch.com" - }, - { - "id": 1800, - "guid": "a4d74bcb-fc50-4172-a47c-e51295d45ee1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Chapman", - "company": "Allphysiche", - "phone": "875-572-2797", - "email": "natalie@allphysiche.com" - }, - { - "id": 1801, - "guid": "a2ba845a-d76c-49a0-aa74-6724510f81c8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Timmons", - "company": "SysUSA", - "phone": "822-530-2389", - "email": "claire@sysusa.com" - }, - { - "id": 1802, - "guid": "8957873b-b367-4e3e-bc5f-2be53e71537b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Gilmore", - "company": "Netseco", - "phone": "824-417-2832", - "email": "mya@netseco.com" - }, - { - "id": 1803, - "guid": "3cb59f61-1630-46e2-ab91-264925e6c1dc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Chesterton", - "company": "Unologic", - "phone": "815-474-2119", - "email": "mia@unologic.com" - }, - { - "id": 1804, - "guid": "83f78189-fa94-4d75-9c75-b686541fa866", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Daniels", - "company": "iMedconik", - "phone": "862-550-2583", - "email": "jocelyn@imedconik.com" - }, - { - "id": 1805, - "guid": "c5d3a6e8-7159-44e3-88a4-cbdaef023608", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Caroline Gilbert", - "company": "Compuamerica", - "phone": "813-472-3870", - "email": "caroline@compuamerica.com" - }, - { - "id": 1806, - "guid": "8f4573c2-9a78-4615-bf01-6ae9c9a5ad2f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Brooks", - "company": "Vencom", - "phone": "863-451-2463", - "email": "ashley@vencom.com" - }, - { - "id": 1807, - "guid": "b8323847-8d3d-4e77-822d-415710dbf6dc", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Hoggarth", - "company": "Fibroserve", - "phone": "813-483-2868", - "email": "lily@fibroserve.com" - }, - { - "id": 1808, - "guid": "16b92341-e1e8-49b7-9d16-317bb1b3ce0b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Cramer", - "company": "US Infratouch", - "phone": "877-411-3841", - "email": "amelia@us infratouch.com" - }, - { - "id": 1809, - "guid": "6a57acdb-d3f2-4e69-9cc3-e73500cccbdf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Chesterton", - "company": "Truetomic", - "phone": "873-430-3316", - "email": "mariah@truetomic.com" - }, - { - "id": 1810, - "guid": "0bf2dc50-f366-4124-9183-e37a942d866b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Brooks", - "company": "Steganoconiche", - "phone": "816-557-3482", - "email": "aubrey@steganoconiche.com" - }, - { - "id": 1811, - "guid": "985a92e0-f047-4f57-898e-6a1ee6ed99e3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Hamphrey", - "company": "Truetomic", - "phone": "895-599-3350", - "email": "sydney@truetomic.com" - }, - { - "id": 1812, - "guid": "ceb1867d-d5b8-412d-bc87-51bcad1e3886", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Carrington", - "company": "Jamrola", - "phone": "813-470-3926", - "email": "angelina@jamrola.com" - }, - { - "id": 1813, - "guid": "075ea153-bf4a-48f3-b107-8cc63c4ccd3f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Gilbert", - "company": "eEyetanic", - "phone": "821-506-2227", - "email": "sophie@eeyetanic.com" - }, - { - "id": 1814, - "guid": "63232682-09b4-4b03-a0f9-046c89f2d51f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Goldman", - "company": "Venconix", - "phone": "888-449-2665", - "email": "abigail@venconix.com" - }, - { - "id": 1815, - "guid": "39d0c7de-229a-4b5e-96ac-be522e91eb0a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Thorndike", - "company": "Ameritron", - "phone": "854-595-2409", - "email": "camila@ameritron.com" - }, - { - "id": 1816, - "guid": "da489624-075d-4ce2-a89d-1889c20ab3fa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Young", - "company": "Conotomics", - "phone": "885-527-3192", - "email": "morgan@conotomics.com" - }, - { - "id": 1817, - "guid": "60a0d1d5-5c4f-42fe-be73-368f74634bd5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Cook", - "company": "Jamconik", - "phone": "899-536-2007", - "email": "victoria@jamconik.com" - }, - { - "id": 1818, - "guid": "291ddf1b-8fde-4db2-be0b-0888dcf44ecd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Evelyn Clapton", - "company": "Gigaura", - "phone": "892-429-2737", - "email": "evelyn@gigaura.com" - }, - { - "id": 1819, - "guid": "0029b78c-74dc-4ac3-a399-e4aa1852acc0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Cook", - "company": "Multitiqua", - "phone": "856-555-2521", - "email": "aubrey@multitiqua.com" - }, - { - "id": 1820, - "guid": "4aabd36f-0297-4a3d-af96-7e38a8036a62", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Thomson", - "company": "Inridium", - "phone": "890-460-3992", - "email": "faith@inridium.com" - }, - { - "id": 1821, - "guid": "684bcc52-2ffc-45f0-ab21-9cf9ebf4827f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maria Wood", - "company": "Fibroserve", - "phone": "814-466-3036", - "email": "maria@fibroserve.com" - }, - { - "id": 1822, - "guid": "646fdd4e-4025-40a0-8029-dc5841c547f5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Trinity Oliver", - "company": "Ventanium", - "phone": "846-562-2630", - "email": "trinity@ventanium.com" - }, - { - "id": 1823, - "guid": "394ea0f4-e844-4038-8ee3-1acff64d6728", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Chesterton", - "company": "SysVenamerica", - "phone": "818-406-2301", - "email": "makayla@sysvenamerica.com" - }, - { - "id": 1824, - "guid": "54b4d376-ad37-4f5e-99c7-137a498b7b74", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Wood", - "company": "Fibrotopia", - "phone": "863-516-2969", - "email": "kimberly@fibrotopia.com" - }, - { - "id": 1825, - "guid": "64f67c66-5602-41e6-b225-a4305b3b90c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Gate", - "company": "Compuamerica", - "phone": "868-434-3272", - "email": "evelyn@compuamerica.com" - }, - { - "id": 1826, - "guid": "f23d01db-0637-4fa8-bb7f-bcd5a1f23c80", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bella Youmans", - "company": "Proline", - "phone": "886-542-2117", - "email": "bella@proline.com" - }, - { - "id": 1827, - "guid": "c1732dc5-48ad-4d41-95aa-da28f3e493db", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Oswald", - "company": "Technogra", - "phone": "852-518-2244", - "email": "hailey@technogra.com" - }, - { - "id": 1828, - "guid": "4cbaaac5-c090-483a-9614-56b8aa2c52fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Gilbert", - "company": "Turbomart", - "phone": "866-469-2981", - "email": "samantha@turbomart.com" - }, - { - "id": 1829, - "guid": "8923334b-9300-40a1-8f5d-5dd6ab7cb046", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Croftoon", - "company": "eEyetanic", - "phone": "842-572-3437", - "email": "kayla@eeyetanic.com" - }, - { - "id": 1830, - "guid": "05316bc7-5df8-460b-9fb6-f48608723ada", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brianna Gill", - "company": "iQualcar", - "phone": "887-431-3691", - "email": "brianna@iqualcar.com" - }, - { - "id": 1831, - "guid": "48cbcbab-a9a5-48a9-8ae9-f6852d5ca705", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Thorndike", - "company": "Fibroserve", - "phone": "884-517-3909", - "email": "mackenzie@fibroserve.com" - }, - { - "id": 1832, - "guid": "4fcd8be7-cce3-4ae9-810a-583419d860ee", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Molligan", - "company": "Textiqua", - "phone": "856-562-3340", - "email": "amelia@textiqua.com" - }, - { - "id": 1833, - "guid": "ea27e4b3-0e35-4c50-9374-a1ba4f258ca6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Murphy", - "company": "Teknoplexon", - "phone": "851-553-2402", - "email": "arianna@teknoplexon.com" - }, - { - "id": 1834, - "guid": "f7f1053c-b368-4a50-986a-3ac6188ea8d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Oswald", - "company": "US Infratouch", - "phone": "820-424-3929", - "email": "hannah@us infratouch.com" - }, - { - "id": 1835, - "guid": "2fa8c561-8e1b-4407-a30d-aa5bafde5f18", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Sherlock", - "company": "Safeagra", - "phone": "815-469-2821", - "email": "zoey@safeagra.com" - }, - { - "id": 1836, - "guid": "7c63ff5a-4a48-41d4-8b23-3122704ee963", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Milton", - "company": "Conotomics", - "phone": "862-526-3462", - "email": "madelyn@conotomics.com" - }, - { - "id": 1837, - "guid": "8b50831f-ca1e-4844-98f2-842b3f3134b0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Valeria Gilmore", - "company": "Ventanium", - "phone": "810-586-2457", - "email": "valeria@ventanium.com" - }, - { - "id": 1838, - "guid": "d995d7b4-a652-41f3-9fce-f108c5b9f561", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Sheldon", - "company": "Vencom", - "phone": "873-486-2453", - "email": "camila@vencom.com" - }, - { - "id": 1839, - "guid": "3faae64b-ee31-44d7-8d80-116970f9101d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Hardman", - "company": "Syssoft", - "phone": "856-541-3087", - "email": "mya@syssoft.com" - }, - { - "id": 1840, - "guid": "fa3f4b2e-7516-4206-bcab-bcb1e27e4da1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Brown", - "company": "Safeagra", - "phone": "857-593-2560", - "email": "ashley@safeagra.com" - }, - { - "id": 1841, - "guid": "ab9f9357-1779-48fd-9928-3bfa70bb8eef", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Neal", - "company": "Tekcar", - "phone": "887-517-2612", - "email": "chloe@tekcar.com" - }, - { - "id": 1842, - "guid": "d2bc55bd-b79f-4a52-a212-97cecf40c02b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Vanessa WifKinson", - "company": "Conrama", - "phone": "808-598-2202", - "email": "vanessa@conrama.com" - }, - { - "id": 1843, - "guid": "b077cd01-3d4c-4de9-ada7-aa2c625e6dee", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Chesterton", - "company": "Netsystems", - "phone": "810-421-2252", - "email": "kaitlyn@netsystems.com" - }, - { - "id": 1844, - "guid": "d18042ec-99cb-4d7c-9e8a-db45e47912c5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Clapton", - "company": "Jamrola", - "phone": "825-501-3354", - "email": "melanie@jamrola.com" - }, - { - "id": 1845, - "guid": "66dad598-54e6-40bd-8784-ea9e60f2bf81", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Turner", - "company": "Ameritron", - "phone": "868-590-3845", - "email": "khloe@ameritron.com" - }, - { - "id": 1846, - "guid": "3df87e78-a41d-43b8-95c3-521eb553fd86", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Molligan", - "company": "Cryptotemplate", - "phone": "861-530-3872", - "email": "aaliyah@cryptotemplate.com" - }, - { - "id": 1847, - "guid": "29045cfb-f60a-4f40-a0fa-dfeeed039dec", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Campbell", - "company": "Teknoplexon", - "phone": "831-456-2534", - "email": "savannah@teknoplexon.com" - }, - { - "id": 1848, - "guid": "29558cb8-293c-4081-a100-436e76b1e9ac", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Haig", - "company": "Turbomart", - "phone": "867-507-3138", - "email": "allison@turbomart.com" - }, - { - "id": 1849, - "guid": "173f49a7-73c8-46d6-acb6-82c377cb73b2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Hancock", - "company": "Aprama", - "phone": "824-428-2623", - "email": "audrey@aprama.com" - }, - { - "id": 1850, - "guid": "4624f510-5c3e-435e-82a8-1871af987d15", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Gilson", - "company": "Venconix", - "phone": "827-599-2406", - "email": "gabriella@venconix.com" - }, - { - "id": 1851, - "guid": "e7f043b0-cba8-474b-a36e-0e9b89717695", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Morrison", - "company": "Ameritron", - "phone": "815-480-3045", - "email": "brooke@ameritron.com" - }, - { - "id": 1852, - "guid": "a75afef4-7b65-4d6a-aa00-7145ec2a585e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Cook", - "company": "Titanirola", - "phone": "872-549-3127", - "email": "alexandra@titanirola.com" - }, - { - "id": 1853, - "guid": "f4f77a31-95ac-4d12-879e-8d39e7b4c408", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Warren", - "company": "US Infratouch", - "phone": "864-576-3880", - "email": "alexa@us infratouch.com" - }, - { - "id": 1854, - "guid": "9f179ca1-57ee-49c9-9655-b0b761010399", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Bush", - "company": "Superscope", - "phone": "823-531-2289", - "email": "brianna@superscope.com" - }, - { - "id": 1855, - "guid": "15ffdddf-66e4-4773-974c-1b9a629cfcf4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Gibbs", - "company": "iQualcar", - "phone": "834-521-2975", - "email": "mackenzie@iqualcar.com" - }, - { - "id": 1856, - "guid": "4efadbe1-b752-40f1-89e7-49cf071f9c1b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Osborne", - "company": "Vencom", - "phone": "811-597-2215", - "email": "camila@vencom.com" - }, - { - "id": 1857, - "guid": "0dd46bbe-0083-49f1-b8f2-08ee246716d5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Watson", - "company": "Interliant", - "phone": "882-464-3312", - "email": "taylor@interliant.com" - }, - { - "id": 1858, - "guid": "c78fe714-29d3-4f4b-ad06-201e2a0d8324", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Gilmore", - "company": "Nanobanc", - "phone": "862-442-3223", - "email": "allison@nanobanc.com" - }, - { - "id": 1859, - "guid": "dffa9db5-a88b-4d32-a0d3-618e90c842f1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Murphy", - "company": "Robotomic", - "phone": "820-517-3825", - "email": "zoey@robotomic.com" - }, - { - "id": 1860, - "guid": "eea4e577-a476-40d3-9645-05b0a43dc2bc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Calhoun", - "company": "Entcast", - "phone": "809-491-3015", - "email": "elizabeth@entcast.com" - }, - { - "id": 1861, - "guid": "ef92173b-b654-4abe-8e4b-25628229dc4b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Abramson", - "company": "Enlogia", - "phone": "883-522-3241", - "email": "serenity@enlogia.com" - }, - { - "id": 1862, - "guid": "59b9b36f-ad19-4668-b3e3-e9d576ce5b46", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Abramson", - "company": "Orthosoft", - "phone": "875-463-2098", - "email": "isabelle@orthosoft.com" - }, - { - "id": 1863, - "guid": "ac2172cc-81df-4959-bf73-dda7679e5651", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Fulton", - "company": "SysVenamerica", - "phone": "815-531-2208", - "email": "brooklyn@sysvenamerica.com" - }, - { - "id": 1864, - "guid": "e1fbbdc6-2510-4282-8645-6cb8bbdbd056", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Chapman", - "company": "InfoAirway", - "phone": "892-462-2486", - "email": "khloe@infoairway.com" - }, - { - "id": 1865, - "guid": "5825555e-2467-4835-8e0d-f5eeeb5e77de", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Hailey", - "company": "Teratopia", - "phone": "869-535-3522", - "email": "isabella@teratopia.com" - }, - { - "id": 1866, - "guid": "3955f277-4995-4eae-a039-1c5bbb6e2437", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Vaughan", - "company": "eEyetanic", - "phone": "849-589-2979", - "email": "aaliyah@eeyetanic.com" - }, - { - "id": 1867, - "guid": "f3f09628-45a4-44cf-afc6-29c7ac0ec9f7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Michaelson", - "company": "Teknoplexon", - "phone": "899-549-3352", - "email": "destiny@teknoplexon.com" - }, - { - "id": 1868, - "guid": "d3717247-63a2-4048-87c0-e7cda0cbcd1e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Sheldon", - "company": "Fibrotouch", - "phone": "864-519-3953", - "email": "madelyn@fibrotouch.com" - }, - { - "id": 1869, - "guid": "87e88381-54d5-4718-8cea-2fa07fb06773", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Gilbert", - "company": "Robotemplate", - "phone": "831-461-2578", - "email": "nevaeh@robotemplate.com" - }, - { - "id": 1870, - "guid": "a2b17cec-b581-4b61-9336-24ca9971f086", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Gill", - "company": "Jamrola", - "phone": "870-468-3592", - "email": "alexis@jamrola.com" - }, - { - "id": 1871, - "guid": "5f6cb358-06c1-4a17-80f2-b476bb57e75f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Hamphrey", - "company": "Enlogia", - "phone": "897-591-2716", - "email": "serenity@enlogia.com" - }, - { - "id": 1872, - "guid": "5966f0e7-4851-4509-b6e6-93a383ea9f50", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Neal", - "company": "Techtron", - "phone": "874-493-3784", - "email": "sophia@techtron.com" - }, - { - "id": 1873, - "guid": "68619422-4b22-4feb-a946-5c3404001d5d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Hannah Youmans", - "company": "SysUSA", - "phone": "888-480-3262", - "email": "hannah@sysusa.com" - }, - { - "id": 1874, - "guid": "295867cb-c033-4877-8150-2c663c1d1702", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Wallace", - "company": "Generola", - "phone": "849-581-3839", - "email": "kylie@generola.com" - }, - { - "id": 1875, - "guid": "0f68003c-ac3c-403f-a62b-98e726d453b2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Sherlock", - "company": "Robotemplate", - "phone": "845-595-2884", - "email": "hannah@robotemplate.com" - }, - { - "id": 1876, - "guid": "4fda0a0b-6af6-4488-89ab-32d129446b1a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Brickman", - "company": "Systheon", - "phone": "870-593-2846", - "email": "emma@systheon.com" - }, - { - "id": 1877, - "guid": "88b265e9-0b1c-4dad-bcc4-a94c6e5c574b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Young", - "company": "Westmedia", - "phone": "807-561-3193", - "email": "eva@westmedia.com" - }, - { - "id": 1878, - "guid": "92c2e68a-6815-4eb1-b0d4-5320ea1fb633", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Nathan", - "company": "Safeagra", - "phone": "859-422-2066", - "email": "jocelyn@safeagra.com" - }, - { - "id": 1879, - "guid": "fb14b2df-d7a1-49f4-8980-ab99b93fa63b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Oldman", - "company": "Aprama", - "phone": "897-597-3961", - "email": "arianna@aprama.com" - }, - { - "id": 1880, - "guid": "3965eba3-d8a6-4e1a-90bb-43e1d8d983c3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Adamson", - "company": "Xeicon", - "phone": "800-495-3243", - "email": "avery@xeicon.com" - }, - { - "id": 1881, - "guid": "ac9d05a7-7301-4306-9b38-fb28c42880c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexandra Owen", - "company": "Aprama", - "phone": "846-429-2334", - "email": "alexandra@aprama.com" - }, - { - "id": 1882, - "guid": "4e8c9fd6-fe61-4550-856d-d5e543751829", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Harrison", - "company": "Infraique", - "phone": "829-552-2454", - "email": "katelyn@infraique.com" - }, - { - "id": 1883, - "guid": "a9459b56-a923-4406-8014-c40740662244", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Melanie Youmans", - "company": "Technogra", - "phone": "858-410-3433", - "email": "melanie@technogra.com" - }, - { - "id": 1884, - "guid": "761743ba-a3b0-4803-8bee-3e5cf43eb319", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Campbell", - "company": "Generola", - "phone": "886-513-2158", - "email": "allison@generola.com" - }, - { - "id": 1885, - "guid": "69146579-85f1-4c32-9d6e-e43c12d6f28c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Turner", - "company": "Safeagra", - "phone": "847-544-3562", - "email": "kaylee@safeagra.com" - }, - { - "id": 1886, - "guid": "f1238878-bc54-4f25-8552-310feaf3b00f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Miln", - "company": "Unconix", - "phone": "821-476-2957", - "email": "lillian@unconix.com" - }, - { - "id": 1887, - "guid": "f03c58ea-2cd3-4433-b739-37e7ad4cfabf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline White", - "company": "Qualserve", - "phone": "860-517-3597", - "email": "madeline@qualserve.com" - }, - { - "id": 1888, - "guid": "5fba6531-2bcc-4fb5-90b8-84c8ae795859", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Thornton", - "company": "Titanirola", - "phone": "819-481-3211", - "email": "emily@titanirola.com" - }, - { - "id": 1889, - "guid": "aa3a103f-38ee-4f68-b4b5-978a1e26cfdf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Winter", - "company": "Allphysiche", - "phone": "842-451-3185", - "email": "camila@allphysiche.com" - }, - { - "id": 1890, - "guid": "0c2463e8-85ef-4514-b75e-b867edcfb224", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Chandter", - "company": "Safetrust", - "phone": "856-500-3488", - "email": "savannah@safetrust.com" - }, - { - "id": 1891, - "guid": "f3852f46-4ece-475a-bc3e-9fc0ef2b9812", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Wayne", - "company": "Robotemplate", - "phone": "813-402-2900", - "email": "kayla@robotemplate.com" - }, - { - "id": 1892, - "guid": "055d67e5-2e5f-4d69-b391-6a143c2a5c9e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Stanley", - "company": "Interliant", - "phone": "823-531-3858", - "email": "jessica@interliant.com" - }, - { - "id": 1893, - "guid": "463adc95-c163-443b-bf19-c27711006dd7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Campbell", - "company": "Compuamerica", - "phone": "812-540-2848", - "email": "emma@compuamerica.com" - }, - { - "id": 1894, - "guid": "0f840eb8-2240-4c20-bfc2-d168847ebc5a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Molligan", - "company": "Allnet", - "phone": "865-506-2871", - "email": "kaitlyn@allnet.com" - }, - { - "id": 1895, - "guid": "4b3acf7d-69e3-45a4-93bf-1e0f8b4a2ccc", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison Oswald", - "company": "Fibroserve", - "phone": "876-596-3119", - "email": "madison@fibroserve.com" - }, - { - "id": 1896, - "guid": "288ed800-72d4-4f84-bb8a-ffee407fc9f7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Abramson", - "company": "Technogra", - "phone": "801-527-3056", - "email": "gianna@technogra.com" - }, - { - "id": 1897, - "guid": "510d80cb-430b-4d63-8bb6-3afb3c0fd45e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Miln", - "company": "iSkyvaco", - "phone": "817-574-2637", - "email": "bailey@iskyvaco.com" - }, - { - "id": 1898, - "guid": "ec376119-d683-41a7-aadb-78dcf55fbda9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lauren Haig", - "company": "Safetrust", - "phone": "820-509-2078", - "email": "lauren@safetrust.com" - }, - { - "id": 1899, - "guid": "ee451366-aa2d-4d7d-9480-3dfa34ddbdd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Wainwright", - "company": "Fibrotopia", - "phone": "882-509-2189", - "email": "destiny@fibrotopia.com" - }, - { - "id": 1900, - "guid": "4bda02f8-d4ff-45d1-8c00-2ead619b556e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Sheldon", - "company": "Teraserv", - "phone": "808-496-3748", - "email": "katelyn@teraserv.com" - }, - { - "id": 1901, - "guid": "c255fc31-7ed1-46a4-9540-f609de795296", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Fulton", - "company": "Anaframe", - "phone": "866-486-3683", - "email": "makayla@anaframe.com" - }, - { - "id": 1902, - "guid": "0746d5e6-8a9c-4641-9c10-20860f1564c1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Gilmore", - "company": "eEyetanic", - "phone": "827-484-3868", - "email": "ariana@eeyetanic.com" - }, - { - "id": 1903, - "guid": "0b8fc40d-7833-4bab-b5b7-0a85da6a4748", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexa Haig", - "company": "Cryptotemplate", - "phone": "877-512-2526", - "email": "alexa@cryptotemplate.com" - }, - { - "id": 1904, - "guid": "89b66f85-ea4d-436a-8431-fe25c714e1dd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Walkman", - "company": "Robotomic", - "phone": "894-416-3919", - "email": "sophie@robotomic.com" - }, - { - "id": 1905, - "guid": "04ac5a27-6033-4be3-b659-505df3071e90", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Warren", - "company": "Techtron", - "phone": "806-498-3446", - "email": "aaliyah@techtron.com" - }, - { - "id": 1906, - "guid": "9cf51f6e-462d-4c8f-a4c0-fb8463bb6173", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Hailey", - "company": "Conotomics", - "phone": "864-422-2351", - "email": "hailey@conotomics.com" - }, - { - "id": 1907, - "guid": "04353748-01f1-4589-b280-679f3194b3bc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Higgins", - "company": "eSteganoergy", - "phone": "893-438-2595", - "email": "vanessa@esteganoergy.com" - }, - { - "id": 1908, - "guid": "0fbc3974-622f-4862-8e6f-8cb6575865ba", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Timmons", - "company": "Skydata", - "phone": "896-498-3617", - "email": "alexis@skydata.com" - }, - { - "id": 1909, - "guid": "70dcbff3-6106-4693-9005-b0ccfae8fc9c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Oldridge", - "company": "Orthosoft", - "phone": "866-409-2766", - "email": "serenity@orthosoft.com" - }, - { - "id": 1910, - "guid": "154bec42-417a-4308-809a-39daa9acc5c4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mia Hoggarth", - "company": "US Infratouch", - "phone": "848-508-3244", - "email": "mia@us infratouch.com" - }, - { - "id": 1911, - "guid": "cb6358b7-c13a-4b96-93a7-e1bb76708775", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Smith", - "company": "Compuamerica", - "phone": "819-471-3878", - "email": "arianna@compuamerica.com" - }, - { - "id": 1912, - "guid": "bc19aeb6-cb86-4603-be57-2b12061864c2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Gilmore", - "company": "Entcast", - "phone": "893-600-3079", - "email": "katherine@entcast.com" - }, - { - "id": 1913, - "guid": "e436a009-46f0-4e97-a77b-27f66b845086", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Hawkins", - "company": "Turbomart", - "phone": "800-425-2491", - "email": "trinity@turbomart.com" - }, - { - "id": 1914, - "guid": "a481f92c-3925-4b50-88d2-dce804c7229f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Neal", - "company": "Netsystems", - "phone": "838-561-2896", - "email": "zoe@netsystems.com" - }, - { - "id": 1915, - "guid": "854bf59d-7cf7-419d-a802-7c2b9738b989", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Nevaeh Harrison", - "company": "Quintegrity", - "phone": "876-526-2870", - "email": "nevaeh@quintegrity.com" - }, - { - "id": 1916, - "guid": "5ba6a399-2772-4b2b-98ae-fb9b68f77b81", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Miers", - "company": "Robotomic", - "phone": "874-411-2438", - "email": "sophia@robotomic.com" - }, - { - "id": 1917, - "guid": "c0830a0b-63a1-4305-abed-7ca64ca3f4f8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Goldman", - "company": "Airdyne", - "phone": "896-587-3026", - "email": "trinity@airdyne.com" - }, - { - "id": 1918, - "guid": "63211f2f-f520-4613-a8f1-20c31161e7da", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aubrey Oldman", - "company": "Fibrotouch", - "phone": "873-582-2052", - "email": "aubrey@fibrotouch.com" - }, - { - "id": 1919, - "guid": "72627dfb-7c62-472d-828d-ab95566e000e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Goldman", - "company": "Openserve", - "phone": "835-581-2648", - "email": "ariana@openserve.com" - }, - { - "id": 1920, - "guid": "ed1e2abc-bda0-4a7b-9f3a-1f483d33b363", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Gilson", - "company": "SysUSA", - "phone": "803-432-3429", - "email": "kaitlyn@sysusa.com" - }, - { - "id": 1921, - "guid": "899d9fa3-537f-47eb-8957-0bb1dc49447e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Gerald", - "company": "Idmax", - "phone": "806-487-2138", - "email": "katherine@idmax.com" - }, - { - "id": 1922, - "guid": "e7a2eb12-fc77-4b6c-99f6-9455996252b7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Galbraith", - "company": "Conotomics", - "phone": "845-517-3678", - "email": "victoria@conotomics.com" - }, - { - "id": 1923, - "guid": "d72c5b38-1eb1-4f75-9dbf-fcde9120f917", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emma Miln", - "company": "Orthomedia", - "phone": "817-422-3409", - "email": "emma@orthomedia.com" - }, - { - "id": 1924, - "guid": "c6f59d71-af59-4075-8924-66801443a6a8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Ford", - "company": "Compuamerica", - "phone": "897-536-2226", - "email": "khloe@compuamerica.com" - }, - { - "id": 1925, - "guid": "52fdc2a3-ce3f-4ef7-9f64-7c9e713b208f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Gilmore", - "company": "InfoAirway", - "phone": "847-411-3748", - "email": "autumn@infoairway.com" - }, - { - "id": 1926, - "guid": "c01a7bd9-50d6-4cb4-840d-19e25a90c88a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Fisher", - "company": "Inridium", - "phone": "832-494-3189", - "email": "kaitlyn@inridium.com" - }, - { - "id": 1927, - "guid": "7d005e76-7b33-40e9-a84f-c683f456fefd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Goodman", - "company": "Fibrotouch", - "phone": "808-407-3956", - "email": "madeline@fibrotouch.com" - }, - { - "id": 1928, - "guid": "d78eda19-dd63-4af5-9f33-b8a8f3f30225", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Chloe Ward", - "company": "iQualcar", - "phone": "834-546-3001", - "email": "chloe@iqualcar.com" - }, - { - "id": 1929, - "guid": "0ed78357-2f7f-421d-a415-b42af9ddfc39", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Gerald", - "company": "Proline", - "phone": "805-542-2657", - "email": "lily@proline.com" - }, - { - "id": 1930, - "guid": "73852537-7012-4bc5-9eb3-cc586b16d58a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Ogden", - "company": "Westgate", - "phone": "899-488-2780", - "email": "layla@westgate.com" - }, - { - "id": 1931, - "guid": "eb8b6896-02de-4727-a9ff-edfb57912a17", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Arianna Ogden", - "company": "Westtomik", - "phone": "872-494-3000", - "email": "arianna@westtomik.com" - }, - { - "id": 1932, - "guid": "1abb7b1c-d40a-4f4b-a18c-badaab66c57f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Webster", - "company": "Robocomm", - "phone": "827-529-3193", - "email": "gianna@robocomm.com" - }, - { - "id": 1933, - "guid": "29ded28a-570b-4981-9d5b-4245e2dd3776", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Turner", - "company": "Steganoconiche", - "phone": "819-508-2027", - "email": "gabrielle@steganoconiche.com" - }, - { - "id": 1934, - "guid": "f985bd7a-f1a7-456c-80ce-a3dcb1d597aa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Morrison", - "company": "Jamrola", - "phone": "828-568-2212", - "email": "addison@jamrola.com" - }, - { - "id": 1935, - "guid": "727f1343-cca1-496b-97c0-378da4494d7f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Wayne", - "company": "Idmax", - "phone": "847-581-3960", - "email": "trinity@idmax.com" - }, - { - "id": 1936, - "guid": "bfbc0a72-eef1-4e41-b187-e4022a130a57", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Higgins", - "company": "Teratopia", - "phone": "833-498-2219", - "email": "kaitlyn@teratopia.com" - }, - { - "id": 1937, - "guid": "6e9d979c-4ee5-4d59-8583-c80aa78832e3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Miers", - "company": "Sontopia", - "phone": "821-428-2473", - "email": "savannah@sontopia.com" - }, - { - "id": 1938, - "guid": "6fa1c345-d953-4b7f-8254-df2083e77c2e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Hoggarth", - "company": "Keytheon", - "phone": "861-581-3293", - "email": "autumn@keytheon.com" - }, - { - "id": 1939, - "guid": "81248de8-e2f2-41b6-98ab-cda89ee7eed7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Youmans", - "company": "Vencom", - "phone": "867-509-2608", - "email": "serenity@vencom.com" - }, - { - "id": 1940, - "guid": "284bf69e-2016-4a62-a411-451da4bfab4d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Youmans", - "company": "Unconix", - "phone": "860-503-2484", - "email": "katelyn@unconix.com" - }, - { - "id": 1941, - "guid": "04292be4-271f-4e8b-98df-f8043480c1a2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Neal", - "company": "Ameritron", - "phone": "898-473-3135", - "email": "olivia@ameritron.com" - }, - { - "id": 1942, - "guid": "70bcfe98-fb09-4272-87f5-60e0ba028484", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Payton Hawkins", - "company": "Nanobanc", - "phone": "868-543-3562", - "email": "payton@nanobanc.com" - }, - { - "id": 1943, - "guid": "811048dc-1555-4d1d-97bf-1f156e84eddc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Wood", - "company": "Syssoft", - "phone": "831-437-2939", - "email": "amelia@syssoft.com" - }, - { - "id": 1944, - "guid": "24d555ff-6e4e-4629-9070-dd3113e22ab5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Gardner", - "company": "Turbomart", - "phone": "869-485-2622", - "email": "genesis@turbomart.com" - }, - { - "id": 1945, - "guid": "14cc8fb5-a541-4083-9380-55f16417ded2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Andrea Wood", - "company": "Skydata", - "phone": "811-512-3996", - "email": "andrea@skydata.com" - }, - { - "id": 1946, - "guid": "a106a9ac-da8f-4f8d-a306-236e0b63c56b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Neal", - "company": "Titanirola", - "phone": "823-513-3231", - "email": "victoria@titanirola.com" - }, - { - "id": 1947, - "guid": "5ce52b51-1e88-48d5-867f-631064cfa35b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Ford", - "company": "Qualserve", - "phone": "815-475-2060", - "email": "ava@qualserve.com" - }, - { - "id": 1948, - "guid": "d63fb9a6-4987-4441-9249-8904829d6aa8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Gustman", - "company": "Steganoconiche", - "phone": "850-574-3541", - "email": "morgan@steganoconiche.com" - }, - { - "id": 1949, - "guid": "f6fdebb0-9bae-4452-bb22-1fdba8b43437", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Morrison", - "company": "US Infratouch", - "phone": "838-527-3071", - "email": "brianna@us infratouch.com" - }, - { - "id": 1950, - "guid": "7af45daa-50bd-4cbd-a8b8-78d1b9a8aea0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Thorndike", - "company": "Aluco", - "phone": "887-599-2532", - "email": "katelyn@aluco.com" - }, - { - "id": 1951, - "guid": "4488b18f-2326-40ad-84e8-7aeed61b826d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Youmans", - "company": "OpKeycomm", - "phone": "882-406-3961", - "email": "kaitlyn@opkeycomm.com" - }, - { - "id": 1952, - "guid": "9b5c133a-6776-4561-b485-b1c5e8fe7521", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Chandter", - "company": "Proline", - "phone": "870-595-2628", - "email": "audrey@proline.com" - }, - { - "id": 1953, - "guid": "ee4c6ce5-62e2-4297-9a56-7a26858aa4d7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Chesterton", - "company": "RoboAerlogix", - "phone": "863-448-2010", - "email": "madeline@roboaerlogix.com" - }, - { - "id": 1954, - "guid": "1177caea-eec4-4c48-9bf7-4030395306e3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Julia Oldridge", - "company": "Hypervaco", - "phone": "809-539-3769", - "email": "julia@hypervaco.com" - }, - { - "id": 1955, - "guid": "807d9f02-507e-4891-9e49-140e0228083a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Miln", - "company": "Keytheon", - "phone": "875-506-3969", - "email": "victoria@keytheon.com" - }, - { - "id": 1956, - "guid": "a5b23fba-ceee-4fdf-9801-46a6d4bde435", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabrielle Haig", - "company": "Skydata", - "phone": "822-401-3335", - "email": "gabrielle@skydata.com" - }, - { - "id": 1957, - "guid": "2510c3cb-1877-4c9d-bc5c-9a3b6f4b2fb4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Webster", - "company": "OpKeycomm", - "phone": "820-567-3249", - "email": "eva@opkeycomm.com" - }, - { - "id": 1958, - "guid": "c8ccd22e-2139-4e03-9f20-ae8b142abef8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya WifKinson", - "company": "InfoAirway", - "phone": "887-418-3452", - "email": "mya@infoairway.com" - }, - { - "id": 1959, - "guid": "5a4a283c-8991-4d66-830f-30a60e08eaaa", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexa Stanley", - "company": "Orthosoft", - "phone": "859-564-3338", - "email": "alexa@orthosoft.com" - }, - { - "id": 1960, - "guid": "c5701744-6ddc-40ec-a142-538d87566ef9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Campbell", - "company": "Celgra", - "phone": "821-492-2759", - "email": "ariana@celgra.com" - }, - { - "id": 1961, - "guid": "694ffb06-905c-4dc8-8f2b-e79edf395f7a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katherine Hodges", - "company": "Sontopia", - "phone": "810-554-3936", - "email": "katherine@sontopia.com" - }, - { - "id": 1962, - "guid": "770238df-b2a3-464c-be53-ccc050358ea5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Hodges", - "company": "US Omnigraphik", - "phone": "865-501-2346", - "email": "serenity@us omnigraphik.com" - }, - { - "id": 1963, - "guid": "0594cd43-9248-473e-8ed4-6bdf2192d2c2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Oldman", - "company": "Fibrotopia", - "phone": "885-471-3057", - "email": "zoey@fibrotopia.com" - }, - { - "id": 1964, - "guid": "9457c2ba-4933-4ce8-8b43-19fa85380854", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Conors", - "company": "Xeicon", - "phone": "845-528-2087", - "email": "paige@xeicon.com" - }, - { - "id": 1965, - "guid": "69db8cec-da27-439f-b0ef-ad5132db17b3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Goldman", - "company": "Technogra", - "phone": "873-498-3530", - "email": "julia@technogra.com" - }, - { - "id": 1966, - "guid": "48df98de-448c-403c-9967-a95db37aa739", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Harrison", - "company": "Jamconik", - "phone": "818-567-3517", - "email": "camila@jamconik.com" - }, - { - "id": 1967, - "guid": "9e4e69cf-9c43-4e23-b27e-cbd669e4f18b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Thomson", - "company": "Safeagra", - "phone": "820-546-2755", - "email": "faith@safeagra.com" - }, - { - "id": 1968, - "guid": "deb3a890-8937-425c-9b00-84657df4f880", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Gilson", - "company": "Venconix", - "phone": "804-581-2817", - "email": "molly@venconix.com" - }, - { - "id": 1969, - "guid": "e53b3ac3-3900-40a8-a0b7-3ea3b52d1c02", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Miller", - "company": "Robotomic", - "phone": "865-485-2081", - "email": "angelina@robotomic.com" - }, - { - "id": 1970, - "guid": "b9e68ca2-2bca-407d-9ada-eaaa1e0ae019", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Oldman", - "company": "US Omnigraphik", - "phone": "874-498-3961", - "email": "gabriella@us omnigraphik.com" - }, - { - "id": 1971, - "guid": "65efabba-8187-4f89-bb30-8762d3bb29bd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Day", - "company": "Gigaura", - "phone": "838-573-3711", - "email": "peyton@gigaura.com" - }, - { - "id": 1972, - "guid": "4ccd4704-3ca9-4b53-9921-a8926d2179e8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Webster", - "company": "SysUSA", - "phone": "860-597-2319", - "email": "alexis@sysusa.com" - }, - { - "id": 1973, - "guid": "de12f4aa-4fb4-4fc1-ab16-da66c638739b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Vaughan", - "company": "Allphysiche", - "phone": "897-592-2413", - "email": "audrey@allphysiche.com" - }, - { - "id": 1974, - "guid": "831593b7-701f-4544-93cd-02224004c2b5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Gate", - "company": "Tekcar", - "phone": "868-411-3503", - "email": "samantha@tekcar.com" - }, - { - "id": 1975, - "guid": "17067e9b-0997-4a9b-8120-a40f3926279c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Oswald", - "company": "Proline", - "phone": "894-567-3712", - "email": "angelina@proline.com" - }, - { - "id": 1976, - "guid": "2abf0389-10e0-494d-97dc-e919f5c3f338", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Gate", - "company": "Titanigraf", - "phone": "833-411-2140", - "email": "sarah@titanigraf.com" - }, - { - "id": 1977, - "guid": "b929a823-9ff9-4024-9959-2f5134622d5f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mya Waller", - "company": "Orthosoft", - "phone": "889-415-3191", - "email": "mya@orthosoft.com" - }, - { - "id": 1978, - "guid": "f9aa2b41-e5df-4122-824d-8f6040504700", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Gilson", - "company": "iEnland", - "phone": "891-483-2424", - "email": "vanessa@ienland.com" - }, - { - "id": 1979, - "guid": "96ffdde0-c169-4368-a836-7c45dd2d4e47", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Gilmore", - "company": "Jamrola", - "phone": "891-425-3802", - "email": "alyssa@jamrola.com" - }, - { - "id": 1980, - "guid": "2959f978-5fb4-4a76-8d44-6a6b7a79700c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Harrison", - "company": "Idmax", - "phone": "845-523-3639", - "email": "serenity@idmax.com" - }, - { - "id": 1981, - "guid": "cc8f5cdb-e99d-46a0-9a1b-3cbca9bd52f6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Freeman", - "company": "Teknoplexon", - "phone": "826-416-2969", - "email": "sofia@teknoplexon.com" - }, - { - "id": 1982, - "guid": "c3e72fef-4158-4f90-9d91-544eaf1bf797", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Davidson", - "company": "RoboAerlogix", - "phone": "899-542-2784", - "email": "ashley@roboaerlogix.com" - }, - { - "id": 1983, - "guid": "c12f853b-d242-45f1-929f-9dca0c4df103", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Carrington", - "company": "Turbomart", - "phone": "808-561-2082", - "email": "kimberly@turbomart.com" - }, - { - "id": 1984, - "guid": "99bb45aa-b0ff-4bdf-aa1e-ff1525931945", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Haig", - "company": "Robotemplate", - "phone": "850-596-3468", - "email": "riley@robotemplate.com" - }, - { - "id": 1985, - "guid": "7be23edf-1649-4ec1-9e8a-dc9b44ae051a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Makayla Creighton", - "company": "Vencom", - "phone": "843-430-2539", - "email": "makayla@vencom.com" - }, - { - "id": 1986, - "guid": "d14f3205-3e68-4bfb-8777-fed539542f5b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney WifKinson", - "company": "eSteganoergy", - "phone": "880-522-3730", - "email": "sydney@esteganoergy.com" - }, - { - "id": 1987, - "guid": "159e89fd-11ba-4fcc-86f4-fe561e4127ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Wesley", - "company": "Dynarama", - "phone": "807-460-3288", - "email": "ella@dynarama.com" - }, - { - "id": 1988, - "guid": "517a881c-b39f-43d8-a3c4-8b4653ae9343", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Gibbs", - "company": "Mescatron", - "phone": "893-438-2125", - "email": "zoey@mescatron.com" - }, - { - "id": 1989, - "guid": "57434b9f-25d5-4ba5-bddf-2125f1c19459", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Abramson", - "company": "Conrama", - "phone": "878-422-3967", - "email": "brooklyn@conrama.com" - }, - { - "id": 1990, - "guid": "afaa50f9-a828-4e3c-958a-3eaa2676dc86", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Cramer", - "company": "Venconix", - "phone": "889-498-2025", - "email": "audrey@venconix.com" - }, - { - "id": 1991, - "guid": "59872928-90a5-4038-b698-98b2b1ec11ff", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Hamphrey", - "company": "Truetomic", - "phone": "818-431-2653", - "email": "aaliyah@truetomic.com" - }, - { - "id": 1992, - "guid": "03a4cdb2-5125-4eb3-a190-2416efb61e9d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Hailey", - "company": "Fibrotopia", - "phone": "852-501-3585", - "email": "avery@fibrotopia.com" - }, - { - "id": 1993, - "guid": "c79b42e0-6506-485c-936e-33d2697fdf61", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Webster", - "company": "Fibroserve", - "phone": "854-548-2409", - "email": "mackenzie@fibroserve.com" - }, - { - "id": 1994, - "guid": "fefdc669-2f2d-4407-8e8d-c04ebc41ceac", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Brooks", - "company": "SysVenamerica", - "phone": "854-544-2665", - "email": "savannah@sysvenamerica.com" - }, - { - "id": 1995, - "guid": "67e40c1a-fee7-48cc-9fd2-8fde944346e1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Hodges", - "company": "Teratopia", - "phone": "841-496-3793", - "email": "nevaeh@teratopia.com" - }, - { - "id": 1996, - "guid": "d352f148-0c38-4f20-b1d1-2fcfa6a6fcf2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Haig", - "company": "Titanigraf", - "phone": "818-454-2479", - "email": "bailey@titanigraf.com" - }, - { - "id": 1997, - "guid": "305429db-1776-42e2-9b79-47733b9ab2ca", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kimberly Oswald", - "company": "Genland", - "phone": "814-449-3467", - "email": "kimberly@genland.com" - }, - { - "id": 1998, - "guid": "bc1e126c-43bb-4f73-993b-9be6dd7b0c8f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Walkman", - "company": "Ventanium", - "phone": "869-561-3951", - "email": "amelia@ventanium.com" - }, - { - "id": 1999, - "guid": "53da7105-36fc-4de6-8e7e-61008703033c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Audrey Winter", - "company": "Robocomm", - "phone": "828-588-2060", - "email": "audrey@robocomm.com" - }, - { - "id": 2000, - "guid": "91c8b1f1-6b01-45df-ae68-07ac589d9d4b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Ford", - "company": "Robocomm", - "phone": "834-439-3335", - "email": "avery@robocomm.com" - }, - { - "id": 2001, - "guid": "f93b0674-77c6-42f6-bb85-4e2863adb659", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Milton", - "company": "Techtron", - "phone": "812-542-2052", - "email": "chloe@techtron.com" - }, - { - "id": 2002, - "guid": "f5f4c552-6ce6-4b7a-9b46-6c13d881f1ee", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Charlotte Young", - "company": "OpKeycomm", - "phone": "878-599-3314", - "email": "charlotte@opkeycomm.com" - }, - { - "id": 2003, - "guid": "976e7738-ffff-492f-a1ce-36c2d5659acb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Chapman", - "company": "Quintegrity", - "phone": "852-562-2902", - "email": "lillian@quintegrity.com" - }, - { - "id": 2004, - "guid": "476717dc-31bb-40b5-a122-43ba5cf3f00e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Nathan", - "company": "Airdyne", - "phone": "849-590-2076", - "email": "eva@airdyne.com" - }, - { - "id": 2005, - "guid": "d74c64e4-80b2-4731-9e9d-e4f3ca7cdde4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Gerald", - "company": "Raylog", - "phone": "814-594-2999", - "email": "charlotte@raylog.com" - }, - { - "id": 2006, - "guid": "6818c009-db22-4b78-86f3-161f2a1d7243", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Thorndike", - "company": "Netsystems", - "phone": "820-426-3304", - "email": "mariah@netsystems.com" - }, - { - "id": 2007, - "guid": "61650b88-0fc4-49e3-815f-063fb03962d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Freeman", - "company": "Westtomik", - "phone": "855-485-3015", - "email": "maria@westtomik.com" - }, - { - "id": 2008, - "guid": "b1406034-7a94-4dc1-a208-ed3c748bcb9a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Wallace", - "company": "InfoAirway", - "phone": "811-562-3871", - "email": "leah@infoairway.com" - }, - { - "id": 2009, - "guid": "479f088e-be14-4bb6-a5f0-d7533410e633", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Michaelson", - "company": "iEnland", - "phone": "876-537-2736", - "email": "sydney@ienland.com" - }, - { - "id": 2010, - "guid": "a76fcffc-2f01-4ec7-a393-db1e1d0e57ca", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Paige Gilbert", - "company": "Teratopia", - "phone": "877-541-3897", - "email": "paige@teratopia.com" - }, - { - "id": 2011, - "guid": "dd8b84aa-8615-4555-92fd-1668cbc95fef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Vanessa Cramer", - "company": "Qualserve", - "phone": "875-534-2409", - "email": "vanessa@qualserve.com" - }, - { - "id": 2012, - "guid": "2f1d1952-29a2-4c04-96e9-d03b2296fd45", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Ogden", - "company": "Orthosoft", - "phone": "803-539-2032", - "email": "taylor@orthosoft.com" - }, - { - "id": 2013, - "guid": "8ae5860c-cae8-4703-a737-7a2875ec4448", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Cook", - "company": "Textiqua", - "phone": "856-450-2266", - "email": "addison@textiqua.com" - }, - { - "id": 2014, - "guid": "945557e0-a13b-4f73-830e-aac94faec5b6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Mercer", - "company": "Conrama", - "phone": "870-437-3381", - "email": "mackenzie@conrama.com" - }, - { - "id": 2015, - "guid": "000d78a7-8d8b-473c-a77b-59de97896d5c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Warren", - "company": "Fibrotopia", - "phone": "827-404-2653", - "email": "victoria@fibrotopia.com" - }, - { - "id": 2016, - "guid": "3b34c032-0f52-4b93-9d2a-2942f8344fcd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Mercer", - "company": "Qualserve", - "phone": "806-451-3219", - "email": "lily@qualserve.com" - }, - { - "id": 2017, - "guid": "fd2d225d-1fa5-44f1-af1d-0f740eeb7f10", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Amelia Smith", - "company": "Robotomic", - "phone": "870-585-3333", - "email": "amelia@robotomic.com" - }, - { - "id": 2018, - "guid": "66794cb2-fcef-43a4-9366-c93ee220c75b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Gustman", - "company": "Turbomart", - "phone": "872-512-3632", - "email": "jocelyn@turbomart.com" - }, - { - "id": 2019, - "guid": "70b39b71-86e9-4b22-84c8-fbd8b49a1cf9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Miller", - "company": "Quintegrity", - "phone": "829-495-2028", - "email": "samantha@quintegrity.com" - }, - { - "id": 2020, - "guid": "bd29f23b-ba71-4d22-af83-83c2d13edfc4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith WifKinson", - "company": "Mescatron", - "phone": "874-426-3319", - "email": "faith@mescatron.com" - }, - { - "id": 2021, - "guid": "2b668e65-33d6-4f02-b12c-f82686f22586", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Conors", - "company": "Multitiqua", - "phone": "830-599-3962", - "email": "bailey@multitiqua.com" - }, - { - "id": 2022, - "guid": "f15f048d-828c-48ef-aecb-6c3c5d7b5716", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Carey", - "company": "RoboAerlogix", - "phone": "834-526-3975", - "email": "olivia@roboaerlogix.com" - }, - { - "id": 2023, - "guid": "f6102a7f-bbc4-4a14-8bda-78ed4782fa02", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Hoggarth", - "company": "Robocomm", - "phone": "835-445-2400", - "email": "arianna@robocomm.com" - }, - { - "id": 2024, - "guid": "140d0f88-2a88-46f2-a064-5de73dcf8853", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Vaughan", - "company": "Jamrola", - "phone": "808-566-2827", - "email": "chloe@jamrola.com" - }, - { - "id": 2025, - "guid": "b30bcc10-9960-4911-b655-8c54548b6fdd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Owen", - "company": "Allnet", - "phone": "896-502-2511", - "email": "madeline@allnet.com" - }, - { - "id": 2026, - "guid": "9313c732-0fac-406b-93cc-bdd14da63b64", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Gustman", - "company": "Steganoconiche", - "phone": "877-514-3014", - "email": "amelia@steganoconiche.com" - }, - { - "id": 2027, - "guid": "ca7f4553-9df2-4ac7-8b29-abc509eb2473", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Crossman", - "company": "Mescaridic", - "phone": "846-580-2160", - "email": "kimberly@mescaridic.com" - }, - { - "id": 2028, - "guid": "367dfad6-d1b0-4545-aa59-f0cc8e65f9a3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Fisher", - "company": "Navivacs", - "phone": "841-505-3954", - "email": "mya@navivacs.com" - }, - { - "id": 2029, - "guid": "38518481-8c4d-4cd4-a06a-0551069a44b3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Osborne", - "company": "eEyetanic", - "phone": "883-518-3457", - "email": "madelyn@eeyetanic.com" - }, - { - "id": 2030, - "guid": "7cd32748-29ba-444a-b85d-458463ddc4ce", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Wallace", - "company": "SysUSA", - "phone": "821-577-2508", - "email": "addison@sysusa.com" - }, - { - "id": 2031, - "guid": "065cc5bc-2d14-49ec-9478-d3b05124a833", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Chesterton", - "company": "Hypervaco", - "phone": "834-426-3148", - "email": "zoe@hypervaco.com" - }, - { - "id": 2032, - "guid": "1cafb61a-5ae8-48e0-90dc-640567969831", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Grace Chesterton", - "company": "Robotemplate", - "phone": "897-452-3425", - "email": "grace@robotemplate.com" - }, - { - "id": 2033, - "guid": "116bc254-2e87-4c31-a7af-88f373f1d27f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Waller", - "company": "Titanirola", - "phone": "816-466-3128", - "email": "mya@titanirola.com" - }, - { - "id": 2034, - "guid": "4eae67dc-b4c7-4d37-8aeb-57aa7c2a238a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Hamphrey", - "company": "US Omnigraphik", - "phone": "896-521-2616", - "email": "gianna@us omnigraphik.com" - }, - { - "id": 2035, - "guid": "85c085f7-07b4-4bc1-999b-ac342cac5b84", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Carter", - "company": "Jamrola", - "phone": "874-562-3922", - "email": "katelyn@jamrola.com" - }, - { - "id": 2036, - "guid": "6f7bbed4-1450-48f8-833a-1b90d1fdd110", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Waller", - "company": "Conrama", - "phone": "826-458-3168", - "email": "camila@conrama.com" - }, - { - "id": 2037, - "guid": "a20233da-04d9-42ae-80f3-051c8de64c41", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Wayne", - "company": "Robocomm", - "phone": "832-483-3860", - "email": "peyton@robocomm.com" - }, - { - "id": 2038, - "guid": "a6301963-b4b3-4c4a-8477-c55fcb59b390", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Campbell", - "company": "Mescaridic", - "phone": "879-574-3448", - "email": "zoe@mescaridic.com" - }, - { - "id": 2039, - "guid": "781717da-3ad8-4608-ac57-4d2336cb144a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Hancock", - "company": "Anagraph", - "phone": "898-403-3742", - "email": "elizabeth@anagraph.com" - }, - { - "id": 2040, - "guid": "3d804008-f519-4957-b777-194c5a529879", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Thornton", - "company": "Raylog", - "phone": "876-545-2424", - "email": "natalie@raylog.com" - }, - { - "id": 2041, - "guid": "4547375f-9223-465a-a195-70cd9c51115d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Vaughan", - "company": "Jamconik", - "phone": "800-439-2847", - "email": "jasmine@jamconik.com" - }, - { - "id": 2042, - "guid": "c9421068-30f2-49bc-9fce-4469fdd840df", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Bush", - "company": "Titanirola", - "phone": "863-526-2236", - "email": "taylor@titanirola.com" - }, - { - "id": 2043, - "guid": "0fca72a2-9452-4b96-ae0a-785083f633e4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Milton", - "company": "SysVenamerica", - "phone": "824-529-2478", - "email": "allison@sysvenamerica.com" - }, - { - "id": 2044, - "guid": "0753a623-fb72-4ec0-8d1e-fc2e8e25a6c6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sarah Murphy", - "company": "Pacwest", - "phone": "858-451-2106", - "email": "sarah@pacwest.com" - }, - { - "id": 2045, - "guid": "ecd1c764-7330-4f4e-a79f-7def5a47f90c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Neal", - "company": "Teraserv", - "phone": "894-426-2181", - "email": "kimberly@teraserv.com" - }, - { - "id": 2046, - "guid": "4ecbba5b-4152-4219-8242-36ef26539307", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Ogden", - "company": "Teknoplexon", - "phone": "863-571-2242", - "email": "vanessa@teknoplexon.com" - }, - { - "id": 2047, - "guid": "9db9ede0-1c2b-4173-8f73-ba341f29d4ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Hoggarth", - "company": "US Omnigraphik", - "phone": "816-573-2603", - "email": "caroline@us omnigraphik.com" - }, - { - "id": 2048, - "guid": "4d25660b-82fc-4833-98c8-d4fdb56da376", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Neal", - "company": "SysVenamerica", - "phone": "858-561-2024", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 2049, - "guid": "2c03de92-925e-483c-9505-116b6501dd0c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Nathan", - "company": "Aprama", - "phone": "889-578-2622", - "email": "mia@aprama.com" - }, - { - "id": 2050, - "guid": "9336c3ef-c2ab-4e48-aec1-169bd017c1f6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Gate", - "company": "iOptystix", - "phone": "854-565-2000", - "email": "amelia@ioptystix.com" - }, - { - "id": 2051, - "guid": "5bd919e7-e13a-46a0-bcd6-77c653c67954", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Charlson", - "company": "Skydata", - "phone": "835-500-3103", - "email": "amelia@skydata.com" - }, - { - "id": 2052, - "guid": "8ed53295-08f5-4da4-aff1-310831df392e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Charlson", - "company": "Safetrust", - "phone": "840-517-3234", - "email": "amelia@safetrust.com" - }, - { - "id": 2053, - "guid": "65ccfc78-7412-41f1-b47d-88bdb276865d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Molligan", - "company": "Steganoconiche", - "phone": "808-457-2633", - "email": "katelyn@steganoconiche.com" - }, - { - "id": 2054, - "guid": "24ebba85-31fa-49ac-847f-ab096c635f0c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Miln", - "company": "Raylog", - "phone": "831-421-3920", - "email": "maya@raylog.com" - }, - { - "id": 2055, - "guid": "58136c09-f3b2-4603-ac13-51d8fe04ffe5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Waller", - "company": "Unconix", - "phone": "832-530-2932", - "email": "gabriella@unconix.com" - }, - { - "id": 2056, - "guid": "92008059-0123-49d5-a639-d3715f7f2746", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Creighton", - "company": "iSkyvaco", - "phone": "889-456-2601", - "email": "madelyn@iskyvaco.com" - }, - { - "id": 2057, - "guid": "85c86ee7-74ae-41a9-90b7-704f59e545d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Mercer", - "company": "Anaframe", - "phone": "840-516-3015", - "email": "rachel@anaframe.com" - }, - { - "id": 2058, - "guid": "bc22114c-1d1d-4618-a09f-ccfd69faf574", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Cook", - "company": "Teraserv", - "phone": "886-491-3680", - "email": "avery@teraserv.com" - }, - { - "id": 2059, - "guid": "67bc0ece-7197-44f3-a94a-3ec1f82e51b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Charlotte Young", - "company": "Titanirola", - "phone": "881-435-2206", - "email": "charlotte@titanirola.com" - }, - { - "id": 2060, - "guid": "072208a2-ea4f-4ab7-ad67-01e04fb5ace7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Wesley", - "company": "Westtomik", - "phone": "811-552-3738", - "email": "valeria@westtomik.com" - }, - { - "id": 2061, - "guid": "cee35d61-efb2-4360-bcf8-0d38863743bf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Morrison", - "company": "Conotomics", - "phone": "820-551-3829", - "email": "evelyn@conotomics.com" - }, - { - "id": 2062, - "guid": "2a88a104-98f0-45d3-a797-09e92adbf664", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Watson", - "company": "Skydata", - "phone": "841-524-3486", - "email": "molly@skydata.com" - }, - { - "id": 2063, - "guid": "312f0bcf-a418-40c6-a0b5-c24b1f29d448", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Gibbs", - "company": "Truegate", - "phone": "800-540-3304", - "email": "brooke@truegate.com" - }, - { - "id": 2064, - "guid": "b0cc249d-d504-4d08-8585-d94414b29be4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabrielle Timmons", - "company": "OpKeycomm", - "phone": "888-564-2402", - "email": "gabrielle@opkeycomm.com" - }, - { - "id": 2065, - "guid": "ac047297-012c-43aa-8256-0ac3ed890208", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Gilmore", - "company": "iMedconik", - "phone": "800-421-3490", - "email": "emma@imedconik.com" - }, - { - "id": 2066, - "guid": "b08e6f08-811d-4e8d-9cb7-b8f0cbe28ba9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Eva Mercer", - "company": "Inridium", - "phone": "844-517-2793", - "email": "eva@inridium.com" - }, - { - "id": 2067, - "guid": "6287a397-4b04-4345-8c0f-dadc0b4b731f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Youmans", - "company": "Raylog", - "phone": "874-401-3316", - "email": "kaitlyn@raylog.com" - }, - { - "id": 2068, - "guid": "07e73193-632f-4323-985b-52d21849f6ee", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Vance", - "company": "Sontopia", - "phone": "842-496-2709", - "email": "isabelle@sontopia.com" - }, - { - "id": 2069, - "guid": "7c68fd51-e8fc-4c3b-bce8-e4f08c2d5b14", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Nash", - "company": "Teratopia", - "phone": "838-463-3998", - "email": "sofia@teratopia.com" - }, - { - "id": 2070, - "guid": "7068465f-d292-4b88-b1b0-901f29c7bf4f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Peyton Cook", - "company": "Truegate", - "phone": "805-567-2075", - "email": "peyton@truegate.com" - }, - { - "id": 2071, - "guid": "b1f43473-6fa0-4132-9e34-01a7fc547972", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Molligan", - "company": "Steganoconiche", - "phone": "854-425-2036", - "email": "allison@steganoconiche.com" - }, - { - "id": 2072, - "guid": "ff5ae91c-e4b4-4f1f-8f30-abb1826bf293", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Molligan", - "company": "Videobanc", - "phone": "882-505-2059", - "email": "savannah@videobanc.com" - }, - { - "id": 2073, - "guid": "22e08abc-bedb-4e2f-a688-05f20e6032de", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Galbraith", - "company": "Pacwest", - "phone": "849-436-3126", - "email": "aubrey@pacwest.com" - }, - { - "id": 2074, - "guid": "2cb87e29-03f4-4387-af51-057711bdc1f3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Neal", - "company": "Westmedia", - "phone": "800-409-2241", - "email": "katherine@westmedia.com" - }, - { - "id": 2075, - "guid": "f12d21af-d178-4251-8552-728edf2a65a6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Thorndike", - "company": "Videobanc", - "phone": "859-503-2319", - "email": "ariana@videobanc.com" - }, - { - "id": 2076, - "guid": "6a92f7ee-7381-4118-a3af-6ae701790847", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Goodman", - "company": "Jamconik", - "phone": "848-574-2018", - "email": "sophia@jamconik.com" - }, - { - "id": 2077, - "guid": "9fb16333-f099-45f7-814a-90c2b657b78e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Creighton", - "company": "Jamrola", - "phone": "810-497-2766", - "email": "caroline@jamrola.com" - }, - { - "id": 2078, - "guid": "8eacce0a-a7f1-4e50-9c90-24b6450b571c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Molligan", - "company": "Airdyne", - "phone": "828-420-3011", - "email": "audrey@airdyne.com" - }, - { - "id": 2079, - "guid": "e14aec91-8588-41f5-8eee-73529dfb7ac1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Fulton", - "company": "Navivacs", - "phone": "833-516-3402", - "email": "mia@navivacs.com" - }, - { - "id": 2080, - "guid": "bf3eafc8-8308-48aa-bf6c-4bdd9c68fce0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Miln", - "company": "Teknoplexon", - "phone": "882-592-2441", - "email": "trinity@teknoplexon.com" - }, - { - "id": 2081, - "guid": "18f138b3-e008-4cb1-9d8b-c3e8182c5b1d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Carrington", - "company": "iMedconik", - "phone": "829-468-3743", - "email": "gianna@imedconik.com" - }, - { - "id": 2082, - "guid": "1a11dd62-55da-46f9-81d8-c36ac9a82d90", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Hamphrey", - "company": "Enlogia", - "phone": "844-420-2439", - "email": "grace@enlogia.com" - }, - { - "id": 2083, - "guid": "36a78a8c-e820-49ed-b066-4a55f12ed875", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Hailey", - "company": "Mescatron", - "phone": "815-437-3198", - "email": "kimberly@mescatron.com" - }, - { - "id": 2084, - "guid": "e4d2659f-1f22-449a-a1e3-4af25b23f628", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katherine Bush", - "company": "Allphysiche", - "phone": "833-470-3668", - "email": "katherine@allphysiche.com" - }, - { - "id": 2085, - "guid": "8642e50f-79c7-4e68-b956-3ddb424f7230", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Hailey", - "company": "Technogra", - "phone": "820-510-3424", - "email": "olivia@technogra.com" - }, - { - "id": 2086, - "guid": "690801fa-bbf0-45ca-93da-93ae8f5b2e0e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Day", - "company": "Robotemplate", - "phone": "817-565-3901", - "email": "autumn@robotemplate.com" - }, - { - "id": 2087, - "guid": "9fa86823-a33a-41d3-b34e-433e40109704", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Gerald", - "company": "Transtouch", - "phone": "850-520-3744", - "email": "emily@transtouch.com" - }, - { - "id": 2088, - "guid": "7943687d-4578-4bec-a2db-94d16d014696", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Ford", - "company": "Titanirola", - "phone": "844-573-2051", - "email": "brooklyn@titanirola.com" - }, - { - "id": 2089, - "guid": "ba37b8f0-4dbd-4d37-ba6b-9141b52c635c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Oldman", - "company": "Polytheon", - "phone": "874-501-2765", - "email": "evelyn@polytheon.com" - }, - { - "id": 2090, - "guid": "76b3b801-4cea-48f3-b933-7ad06b3ef1d2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Nelson", - "company": "InfoAirway", - "phone": "843-517-2988", - "email": "serenity@infoairway.com" - }, - { - "id": 2091, - "guid": "194040bb-1657-436c-aadc-1428a72be157", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Waller", - "company": "Technogra", - "phone": "801-451-3412", - "email": "mackenzie@technogra.com" - }, - { - "id": 2092, - "guid": "a3e3d3f4-924b-4af1-a2bc-d7d44beb831b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Cramer", - "company": "Safeagra", - "phone": "800-431-3130", - "email": "riley@safeagra.com" - }, - { - "id": 2093, - "guid": "d4645497-1733-4b42-8f7d-641e10335d8c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Andrea Hancock", - "company": "OpKeycomm", - "phone": "817-431-2933", - "email": "andrea@opkeycomm.com" - }, - { - "id": 2094, - "guid": "e71e613a-07ea-404c-83fc-477b31397c39", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Calhoun", - "company": "Gigaura", - "phone": "895-516-3190", - "email": "mackenzie@gigaura.com" - }, - { - "id": 2095, - "guid": "264c0407-df06-4d20-b5e0-9712238d7656", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Vaughan", - "company": "Gigaura", - "phone": "819-462-2699", - "email": "addison@gigaura.com" - }, - { - "id": 2096, - "guid": "971cd3e3-a28a-4c77-81a1-e45910b270e3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Brooks", - "company": "Anaframe", - "phone": "843-483-2858", - "email": "allison@anaframe.com" - }, - { - "id": 2097, - "guid": "59211d44-b703-4c32-97ce-ca7e22f4861c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Wesley", - "company": "eSteganoergy", - "phone": "839-511-2224", - "email": "kaylee@esteganoergy.com" - }, - { - "id": 2098, - "guid": "fc9a9f02-5530-41aa-ac92-92e7efb2dcb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Murphy", - "company": "Unconix", - "phone": "833-448-3926", - "email": "ariana@unconix.com" - }, - { - "id": 2099, - "guid": "ef7b2b49-2f2b-4ad1-8bde-c4efe9ee5b32", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Gill", - "company": "Sontopia", - "phone": "890-525-2248", - "email": "lauren@sontopia.com" - }, - { - "id": 2100, - "guid": "d5ec4056-cd8e-46a6-bfa9-cfc55cbd39ad", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Brickman", - "company": "Rapigrafix", - "phone": "839-540-3168", - "email": "natalie@rapigrafix.com" - }, - { - "id": 2101, - "guid": "9a8217fd-c5f4-4a42-8f33-634ddf700822", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Freeman", - "company": "Netseco", - "phone": "857-468-2382", - "email": "lily@netseco.com" - }, - { - "id": 2102, - "guid": "059e1409-f7dd-42dd-b695-2d672e6eeac6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Conors", - "company": "Conrama", - "phone": "883-500-3574", - "email": "hannah@conrama.com" - }, - { - "id": 2103, - "guid": "5590b77c-4e19-494c-b5c5-d47689e54bdd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Smith", - "company": "iEnland", - "phone": "831-434-2517", - "email": "allison@ienland.com" - }, - { - "id": 2104, - "guid": "498f0478-122b-40a3-ae01-2ca40781e4c6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Webster", - "company": "Qualserve", - "phone": "826-537-2728", - "email": "audrey@qualserve.com" - }, - { - "id": 2105, - "guid": "e3e43f24-7032-4f78-b3b5-b5286b55b5ff", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Miln", - "company": "eEyetanic", - "phone": "813-447-3884", - "email": "isabella@eeyetanic.com" - }, - { - "id": 2106, - "guid": "0415bcef-e649-48a9-ad2a-ef83759fabb9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Camila Oswald", - "company": "Tekcar", - "phone": "867-519-2799", - "email": "camila@tekcar.com" - }, - { - "id": 2107, - "guid": "d3614924-734e-40da-af3f-22951b0c66c1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Hamphrey", - "company": "Unconix", - "phone": "875-427-2688", - "email": "valeria@unconix.com" - }, - { - "id": 2108, - "guid": "208dccab-c033-4cba-865d-2a1afa65c74f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Thornton", - "company": "Xeicon", - "phone": "828-468-3816", - "email": "destiny@xeicon.com" - }, - { - "id": 2109, - "guid": "d7e0e9ec-ce07-43ec-8095-eb220f24707f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Ford", - "company": "Polytheon", - "phone": "840-526-3450", - "email": "makayla@polytheon.com" - }, - { - "id": 2110, - "guid": "85a1b4e8-2833-4af5-95b5-d4d2e7f34fe6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Hawkins", - "company": "Orthomedia", - "phone": "839-401-2652", - "email": "camila@orthomedia.com" - }, - { - "id": 2111, - "guid": "fb3aa3fd-c3d4-436b-8b9d-e064d6385943", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ashley Conors", - "company": "Conrama", - "phone": "847-514-3200", - "email": "ashley@conrama.com" - }, - { - "id": 2112, - "guid": "75c876f3-fa7d-4e9f-b385-bacca44f8b87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Winter", - "company": "Generola", - "phone": "869-461-3768", - "email": "amelia@generola.com" - }, - { - "id": 2113, - "guid": "4052c2e6-fe92-4ad2-88bc-b30657a6fd51", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Mercer", - "company": "Unologic", - "phone": "893-591-2635", - "email": "zoey@unologic.com" - }, - { - "id": 2114, - "guid": "6eced1b1-8518-4e2f-9c09-1e061a0b7a63", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Gilmore", - "company": "Techtron", - "phone": "877-561-2840", - "email": "valeria@techtron.com" - }, - { - "id": 2115, - "guid": "af574551-344d-4089-8a63-c1af74aa5094", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mia Cook", - "company": "Multitiqua", - "phone": "819-563-2836", - "email": "mia@multitiqua.com" - }, - { - "id": 2116, - "guid": "622e9da1-e706-42b5-a59d-4476f0ba9a4e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Hailey", - "company": "Titanigraf", - "phone": "899-519-2738", - "email": "genesis@titanigraf.com" - }, - { - "id": 2117, - "guid": "6ba6e6a2-d305-40da-abfa-098b5030a73d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Goldman", - "company": "Transtouch", - "phone": "884-413-3814", - "email": "alexandra@transtouch.com" - }, - { - "id": 2118, - "guid": "9494eb14-4b4c-4297-b9e3-0926c38d3592", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Miller", - "company": "Inridium", - "phone": "827-575-3183", - "email": "gabriella@inridium.com" - }, - { - "id": 2119, - "guid": "f86959c0-b4bb-4531-b5cf-83933f62f4b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Gilbert", - "company": "Hypervaco", - "phone": "804-477-3135", - "email": "destiny@hypervaco.com" - }, - { - "id": 2120, - "guid": "ca1da7bf-b8bb-400f-92f8-6a99e9fb8666", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mya Nathan", - "company": "Compuamerica", - "phone": "800-537-2851", - "email": "mya@compuamerica.com" - }, - { - "id": 2121, - "guid": "fa8f7835-924e-4ab4-9f89-6dcd107c9612", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Brown", - "company": "Sontopia", - "phone": "846-480-2839", - "email": "claire@sontopia.com" - }, - { - "id": 2122, - "guid": "d5d7a148-54c2-494b-9f83-5bcbb923bcfd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Miller", - "company": "Robocomm", - "phone": "868-466-3113", - "email": "aubrey@robocomm.com" - }, - { - "id": 2123, - "guid": "3fde4d65-40a0-4017-ab9f-3d9060e47106", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Gardner", - "company": "Entcast", - "phone": "832-410-2895", - "email": "vanessa@entcast.com" - }, - { - "id": 2124, - "guid": "a6b5c4d0-e08e-4512-add2-8ae818383f02", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Sherlock", - "company": "US Infratouch", - "phone": "834-406-3795", - "email": "addison@us infratouch.com" - }, - { - "id": 2125, - "guid": "e289b239-9773-4cba-b7ca-efcebf52cc7e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Creighton", - "company": "US Infratouch", - "phone": "832-513-2775", - "email": "maria@us infratouch.com" - }, - { - "id": 2126, - "guid": "53079062-1a2a-43c8-8c89-de8531042fd1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Charlson", - "company": "Multitiqua", - "phone": "889-456-2039", - "email": "alexandra@multitiqua.com" - }, - { - "id": 2127, - "guid": "c5240a04-1876-40ca-812d-1e5d6826de1a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Osborne", - "company": "SysUSA", - "phone": "893-566-3390", - "email": "sarah@sysusa.com" - }, - { - "id": 2128, - "guid": "5b2a6f0d-1d64-48be-9284-c97157378717", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Croftoon", - "company": "Celgra", - "phone": "886-586-2505", - "email": "hannah@celgra.com" - }, - { - "id": 2129, - "guid": "3a8b7646-ba8b-4ac8-8621-021ad1a384e5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gianna Brickman", - "company": "Safetrust", - "phone": "848-512-3538", - "email": "gianna@safetrust.com" - }, - { - "id": 2130, - "guid": "f3b653af-3ff0-4948-8bfb-7147e531de83", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Galbraith", - "company": "Conotomics", - "phone": "865-433-2118", - "email": "jasmine@conotomics.com" - }, - { - "id": 2131, - "guid": "08689933-389c-4c3e-8ccc-261a068363fe", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Harrison", - "company": "Mescaridic", - "phone": "874-571-2070", - "email": "isabelle@mescaridic.com" - }, - { - "id": 2132, - "guid": "fde10381-8581-4945-a267-1b9fa51dd41b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Addison Smith", - "company": "Robocomm", - "phone": "834-588-3878", - "email": "addison@robocomm.com" - }, - { - "id": 2133, - "guid": "69781adf-1abc-4f40-bccb-e785d204dca4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Ward", - "company": "SysVenamerica", - "phone": "845-493-2504", - "email": "aubrey@sysvenamerica.com" - }, - { - "id": 2134, - "guid": "25090f97-207f-4f99-8a80-27e9dc92ed23", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Croftoon", - "company": "Allphysiche", - "phone": "862-540-2327", - "email": "olivia@allphysiche.com" - }, - { - "id": 2135, - "guid": "84f06198-e639-4df3-9405-9156f8c10c66", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Wayne", - "company": "Generola", - "phone": "814-553-3421", - "email": "payton@generola.com" - }, - { - "id": 2136, - "guid": "b1ae2f96-5169-4f6b-b8d4-d30dad355344", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Chapman", - "company": "Infraique", - "phone": "893-434-2610", - "email": "lily@infraique.com" - }, - { - "id": 2137, - "guid": "e53791ec-f9c0-4f96-8a64-746b409c975e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Gibbs", - "company": "Jamrola", - "phone": "860-512-3018", - "email": "emma@jamrola.com" - }, - { - "id": 2138, - "guid": "775aa675-792b-4d69-9729-c8545857a25f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Youmans", - "company": "Westtomik", - "phone": "880-550-2144", - "email": "claire@westtomik.com" - }, - { - "id": 2139, - "guid": "b9ab872a-452f-4769-8092-7f73fbb4d5d7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Grace Fulton", - "company": "Openserve", - "phone": "845-548-3913", - "email": "grace@openserve.com" - }, - { - "id": 2140, - "guid": "5ee9e364-45e3-4bb5-846a-00eb9cf4e3c8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Gerald", - "company": "Polytheon", - "phone": "849-596-3660", - "email": "payton@polytheon.com" - }, - { - "id": 2141, - "guid": "c0152a0a-8353-4cf8-9ff5-5f85c4db720a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Carey", - "company": "eEyetanic", - "phone": "855-582-2125", - "email": "isabella@eeyetanic.com" - }, - { - "id": 2142, - "guid": "c6a5a942-dd2b-47ad-815d-b696183f7434", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Wallace", - "company": "Ventanium", - "phone": "838-469-3195", - "email": "chloe@ventanium.com" - }, - { - "id": 2143, - "guid": "1fd08386-267e-47ee-b372-c97fc87c94bf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Wayne", - "company": "iEnland", - "phone": "835-422-2186", - "email": "lauren@ienland.com" - }, - { - "id": 2144, - "guid": "34a048e3-edfd-4608-9d7e-e90bd5daeaba", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Chapman", - "company": "US Infratouch", - "phone": "858-500-2553", - "email": "leah@us infratouch.com" - }, - { - "id": 2145, - "guid": "74400992-ce1a-4815-8e05-3ac6c2ad28a9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Hoggarth", - "company": "Superscope", - "phone": "864-569-2951", - "email": "katherine@superscope.com" - }, - { - "id": 2146, - "guid": "dde7fcf2-582b-4562-a82a-dd7d913190d9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ariana Hailey", - "company": "Technogra", - "phone": "827-558-2296", - "email": "ariana@technogra.com" - }, - { - "id": 2147, - "guid": "35345e67-80b6-4cd4-b17d-4feefe2d2d19", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Hawkins", - "company": "Robotemplate", - "phone": "842-545-3487", - "email": "mya@robotemplate.com" - }, - { - "id": 2148, - "guid": "b9bea5ad-0117-42b0-af6b-108b7c2088e5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Brooks", - "company": "iSkyvaco", - "phone": "857-524-2824", - "email": "kaylee@iskyvaco.com" - }, - { - "id": 2149, - "guid": "a1ea8a17-bf3d-44ae-bfff-5e3d4d67bedf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Owen", - "company": "iOptystix", - "phone": "877-577-3511", - "email": "madelyn@ioptystix.com" - }, - { - "id": 2150, - "guid": "330cde8b-dcb2-4970-b9fe-6eb8f6966b20", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Chapman", - "company": "Aluco", - "phone": "889-491-2428", - "email": "jasmine@aluco.com" - }, - { - "id": 2151, - "guid": "d0f7c61a-eb86-4511-a90d-851c4e8cba40", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Mercer", - "company": "Fibroserve", - "phone": "899-503-3531", - "email": "vanessa@fibroserve.com" - }, - { - "id": 2152, - "guid": "c605990b-91a0-4e0f-9576-05de0d760047", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Charlson", - "company": "US Infratouch", - "phone": "812-595-3222", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 2153, - "guid": "49b4fbd0-5434-4f89-a6c3-309efbfdbc1c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Mercer", - "company": "Sontopia", - "phone": "840-586-2754", - "email": "vanessa@sontopia.com" - }, - { - "id": 2154, - "guid": "1dd82aa3-743f-4a06-8348-2013992d1b52", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kylie Miers", - "company": "Teratopia", - "phone": "883-518-2463", - "email": "kylie@teratopia.com" - }, - { - "id": 2155, - "guid": "52535ee9-c224-4074-a3a4-09e2408b8e3d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bella Ford", - "company": "Cryptotemplate", - "phone": "833-516-2445", - "email": "bella@cryptotemplate.com" - }, - { - "id": 2156, - "guid": "5e602780-7a9c-4981-88ca-b331a840151f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Galbraith", - "company": "Anaframe", - "phone": "813-563-2535", - "email": "amelia@anaframe.com" - }, - { - "id": 2157, - "guid": "c6a05b02-1e8b-4ba8-a164-a533e7cb3a60", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Otis", - "company": "Compuamerica", - "phone": "856-564-2155", - "email": "sophia@compuamerica.com" - }, - { - "id": 2158, - "guid": "5f4428f9-f161-4679-810b-1af0604702af", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Winter", - "company": "Hypervaco", - "phone": "824-503-3091", - "email": "zoe@hypervaco.com" - }, - { - "id": 2159, - "guid": "874626b1-17fc-4eed-b7d7-0751e3768226", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Oliver", - "company": "Xeicon", - "phone": "847-481-2884", - "email": "paige@xeicon.com" - }, - { - "id": 2160, - "guid": "0eaf12ee-0a80-4c54-82a4-c331623ccd66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Hardman", - "company": "Truegate", - "phone": "850-478-2626", - "email": "natalie@truegate.com" - }, - { - "id": 2161, - "guid": "49d22396-9db5-4175-b6f1-f7deca5f6854", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Mercer", - "company": "Teratopia", - "phone": "892-430-3074", - "email": "zoe@teratopia.com" - }, - { - "id": 2162, - "guid": "0e30bb01-bf3b-4b0f-934e-337dd21dee5e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Chapman", - "company": "iEnland", - "phone": "869-462-3512", - "email": "aubrey@ienland.com" - }, - { - "id": 2163, - "guid": "19f825bf-a1ac-461f-9970-46aa7a84d830", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Hawkins", - "company": "Gigaura", - "phone": "835-415-2712", - "email": "camila@gigaura.com" - }, - { - "id": 2164, - "guid": "447fdfd8-a460-414a-9427-ff75879038d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Waller", - "company": "Systheon", - "phone": "856-567-3333", - "email": "sophia@systheon.com" - }, - { - "id": 2165, - "guid": "9ebc2e8b-8344-45e6-abcb-91c48f77daa5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Oliver", - "company": "Mescatron", - "phone": "820-460-2623", - "email": "melanie@mescatron.com" - }, - { - "id": 2166, - "guid": "e0f6dbdc-4129-4dc3-9808-604b23a215a9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Bush", - "company": "Transtouch", - "phone": "880-447-3474", - "email": "zoe@transtouch.com" - }, - { - "id": 2167, - "guid": "eae7f113-73dd-4480-8b16-53fdb2069516", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Cramer", - "company": "Inridium", - "phone": "813-469-2153", - "email": "brooklyn@inridium.com" - }, - { - "id": 2168, - "guid": "16291699-ccf7-4a25-a583-7023c3bae793", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Nash", - "company": "Enlogia", - "phone": "882-483-2731", - "email": "katelyn@enlogia.com" - }, - { - "id": 2169, - "guid": "7ebaf381-a961-4ede-b957-e5f14650c4e9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Gilson", - "company": "Anaframe", - "phone": "843-432-2236", - "email": "morgan@anaframe.com" - }, - { - "id": 2170, - "guid": "d252ef02-96d0-477c-b802-92758e710912", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Clapton", - "company": "RoboAerlogix", - "phone": "872-479-2249", - "email": "gabriella@roboaerlogix.com" - }, - { - "id": 2171, - "guid": "0994b217-e6cf-450e-b578-909cc03700bc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Turner", - "company": "RoboAerlogix", - "phone": "873-407-3445", - "email": "hailey@roboaerlogix.com" - }, - { - "id": 2172, - "guid": "e2f5b28f-0389-40b5-9845-5c5bdeba59bd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Chandter", - "company": "Entcast", - "phone": "811-461-3842", - "email": "elizabeth@entcast.com" - }, - { - "id": 2173, - "guid": "5a025aff-f38e-409b-aa80-3ca188fde84d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Gilson", - "company": "Mescaridic", - "phone": "877-561-2027", - "email": "evelyn@mescaridic.com" - }, - { - "id": 2174, - "guid": "a400fe9d-7d76-45c1-a4cd-bfff280cf463", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Taylor Carey", - "company": "Transtouch", - "phone": "868-522-2262", - "email": "taylor@transtouch.com" - }, - { - "id": 2175, - "guid": "7ebcc6f8-1cb8-4967-99c8-a45d595efa63", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Morrison", - "company": "Mescaridic", - "phone": "864-452-3130", - "email": "brooklyn@mescaridic.com" - }, - { - "id": 2176, - "guid": "65198b8d-a0a6-4116-9f15-aa7f631f0c83", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia White", - "company": "Orthosoft", - "phone": "803-571-3059", - "email": "amelia@orthosoft.com" - }, - { - "id": 2177, - "guid": "0118f412-f675-47f3-9ecc-f63235298541", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Mercer", - "company": "Xeicon", - "phone": "857-540-2047", - "email": "angelina@xeicon.com" - }, - { - "id": 2178, - "guid": "484d3336-41ac-4156-b4bf-d585ea493eeb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Timmons", - "company": "Conotomics", - "phone": "887-517-3183", - "email": "brianna@conotomics.com" - }, - { - "id": 2179, - "guid": "c1cb6fc5-2af8-4245-8555-0e9fa40878d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Milton", - "company": "Celgra", - "phone": "877-576-2180", - "email": "emma@celgra.com" - }, - { - "id": 2180, - "guid": "99bcb806-ab61-4b9f-9c00-cb230b566fc9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Day", - "company": "Navivacs", - "phone": "870-569-3771", - "email": "ella@navivacs.com" - }, - { - "id": 2181, - "guid": "725d83be-f52b-4c6d-944f-1a0f843a5fef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Thornton", - "company": "Infragraph", - "phone": "865-518-3663", - "email": "genesis@infragraph.com" - }, - { - "id": 2182, - "guid": "ffd25bd9-309f-42ee-9f2e-e710adc90e3b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Gill", - "company": "Titanigraf", - "phone": "897-431-3774", - "email": "elizabeth@titanigraf.com" - }, - { - "id": 2183, - "guid": "c3a00a3f-92bc-44db-9d06-7334f80261f1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Amelia Cook", - "company": "Steganoconiche", - "phone": "869-585-2738", - "email": "amelia@steganoconiche.com" - }, - { - "id": 2184, - "guid": "ab8f2e0e-4eaf-415c-914a-23febd425c9f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Cramer", - "company": "Orthosoft", - "phone": "885-477-3744", - "email": "lily@orthosoft.com" - }, - { - "id": 2185, - "guid": "84b2f9d7-a943-4916-b831-a546db45e396", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Molligan", - "company": "Steganoconiche", - "phone": "877-462-3762", - "email": "caroline@steganoconiche.com" - }, - { - "id": 2186, - "guid": "4b0f8c7e-4e38-4b1e-8d07-51f1697f98e2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Gustman", - "company": "Generola", - "phone": "809-470-3883", - "email": "victoria@generola.com" - }, - { - "id": 2187, - "guid": "7f306cd6-af99-431d-b8ec-ddd370e4fb7f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Oswald", - "company": "Genland", - "phone": "873-413-2789", - "email": "destiny@genland.com" - }, - { - "id": 2188, - "guid": "205ca874-e273-4ab4-8ebe-0d03c0cf8fdf", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Nash", - "company": "Vencom", - "phone": "814-477-2450", - "email": "emma@vencom.com" - }, - { - "id": 2189, - "guid": "2bdb7d49-39f3-40db-b372-8354030bc6b7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Bush", - "company": "RoboAerlogix", - "phone": "844-495-3491", - "email": "mariah@roboaerlogix.com" - }, - { - "id": 2190, - "guid": "28d51f5b-37a2-4f8d-b57f-f9ea1a571a90", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Carey", - "company": "Steganoconiche", - "phone": "886-435-2839", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 2191, - "guid": "a2e1ce23-c4ff-41df-ab88-f90f3db0abdd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hannah Brickman", - "company": "Orthosoft", - "phone": "837-525-3943", - "email": "hannah@orthosoft.com" - }, - { - "id": 2192, - "guid": "499817cb-0040-48d4-beaa-ccb3054c3293", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Haig", - "company": "Raylog", - "phone": "872-418-3399", - "email": "vanessa@raylog.com" - }, - { - "id": 2193, - "guid": "85155b4d-179d-4a40-aa76-a4d894c389e1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Harrison", - "company": "Indisco", - "phone": "882-419-2495", - "email": "mya@indisco.com" - }, - { - "id": 2194, - "guid": "1e758445-15f2-473f-b021-5cd7905a326a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Thornton", - "company": "Netseco", - "phone": "816-467-2922", - "email": "camila@netseco.com" - }, - { - "id": 2195, - "guid": "a09c74b8-2810-4401-a566-a4aa7a668a93", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Clapton", - "company": "Allphysiche", - "phone": "807-582-2973", - "email": "alyssa@allphysiche.com" - }, - { - "id": 2196, - "guid": "fdbe4c8e-2124-4d6e-88a3-7f5c4974bab6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Riley Calhoun", - "company": "Robocomm", - "phone": "827-529-2341", - "email": "riley@robocomm.com" - }, - { - "id": 2197, - "guid": "8e7cd7d9-0f42-463b-a9e7-7a4ba27548f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Gilbert", - "company": "Airdyne", - "phone": "876-448-3737", - "email": "evelyn@airdyne.com" - }, - { - "id": 2198, - "guid": "9016493a-a862-4fe9-937e-98f584effcfa", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Valeria Gustman", - "company": "Qualserve", - "phone": "827-458-2601", - "email": "valeria@qualserve.com" - }, - { - "id": 2199, - "guid": "54454056-2bd6-42e2-a88c-32f109cc8df3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bella Sherlock", - "company": "Videobanc", - "phone": "801-408-3148", - "email": "bella@videobanc.com" - }, - { - "id": 2200, - "guid": "ed7c5422-08cc-42dd-a01c-6c6375194c7d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Goldman", - "company": "Allnet", - "phone": "815-496-3933", - "email": "addison@allnet.com" - }, - { - "id": 2201, - "guid": "c3ed4dff-b830-4660-b74b-5b7a1f18e007", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Wood", - "company": "Quintegrity", - "phone": "824-549-3005", - "email": "addison@quintegrity.com" - }, - { - "id": 2202, - "guid": "994a83a9-a170-4365-b89f-ef9b10ca5e80", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Hancock", - "company": "Gigaura", - "phone": "824-486-2839", - "email": "taylor@gigaura.com" - }, - { - "id": 2203, - "guid": "69156133-e7e9-4757-a874-85e7354a44c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Hailey", - "company": "Turbomart", - "phone": "885-477-2091", - "email": "madison@turbomart.com" - }, - { - "id": 2204, - "guid": "85452887-3f25-4093-895a-e9a3729e4083", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Neal", - "company": "Syssoft", - "phone": "804-540-2013", - "email": "ava@syssoft.com" - }, - { - "id": 2205, - "guid": "e3408085-a926-4d67-89a0-b94550f23c3b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Fulton", - "company": "Superscope", - "phone": "818-468-2810", - "email": "evelyn@superscope.com" - }, - { - "id": 2206, - "guid": "d8835b42-fc25-4fa1-aafc-e10243d85358", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Evelyn Goodman", - "company": "Genland", - "phone": "874-486-2367", - "email": "evelyn@genland.com" - }, - { - "id": 2207, - "guid": "af7267fd-9ce5-47f5-9f0e-48243b5d3d78", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Oliver", - "company": "Orthomedia", - "phone": "858-554-2405", - "email": "mackenzie@orthomedia.com" - }, - { - "id": 2208, - "guid": "069e8c54-f8c6-4adc-9bec-98c45a3968a6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Walkman", - "company": "Airdyne", - "phone": "840-599-3969", - "email": "audrey@airdyne.com" - }, - { - "id": 2209, - "guid": "a03cfc96-9594-48bf-9647-8d79ad409403", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Galbraith", - "company": "Gigaura", - "phone": "882-497-2158", - "email": "bella@gigaura.com" - }, - { - "id": 2210, - "guid": "038879a2-c593-49bd-9c22-30ecfa9a1601", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Hawkins", - "company": "Robotomic", - "phone": "876-599-3499", - "email": "leah@robotomic.com" - }, - { - "id": 2211, - "guid": "26c6a8fa-e2d8-4abc-9580-e77342bd433c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Wesley", - "company": "Superscope", - "phone": "889-512-2279", - "email": "arianna@superscope.com" - }, - { - "id": 2212, - "guid": "8e760ec2-8710-4739-af88-11aa46a448ac", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brianna Vaughan", - "company": "Robocomm", - "phone": "818-522-2571", - "email": "brianna@robocomm.com" - }, - { - "id": 2213, - "guid": "e3d40e6d-6f6e-4801-8a35-dc28016930ad", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Oswald", - "company": "iEnland", - "phone": "889-564-3237", - "email": "gabriella@ienland.com" - }, - { - "id": 2214, - "guid": "a35202b9-ad80-47ec-a887-3ee3bd12eb2f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Hoggarth", - "company": "Robotomic", - "phone": "862-489-3380", - "email": "kaitlyn@robotomic.com" - }, - { - "id": 2215, - "guid": "7f779fe2-d57d-405e-8521-4251fd843b94", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah WifKinson", - "company": "Hypervaco", - "phone": "813-513-3369", - "email": "mariah@hypervaco.com" - }, - { - "id": 2216, - "guid": "f65f5df0-c786-4d73-9a11-ee2d285d2848", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Goodman", - "company": "Techtron", - "phone": "835-472-3821", - "email": "andrea@techtron.com" - }, - { - "id": 2217, - "guid": "0b6c96fd-6c24-4aa6-bd47-7a6a76197b41", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Goodman", - "company": "Indisco", - "phone": "862-475-3133", - "email": "samantha@indisco.com" - }, - { - "id": 2218, - "guid": "acfa3561-dc88-414a-b7ab-6cc29b47cebd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madison Brickman", - "company": "Qualserve", - "phone": "848-527-2185", - "email": "madison@qualserve.com" - }, - { - "id": 2219, - "guid": "1baad4af-77da-4353-acb5-475408d3eee9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Charlson", - "company": "Thermotomic", - "phone": "837-556-2259", - "email": "serenity@thermotomic.com" - }, - { - "id": 2220, - "guid": "722e048f-5d49-4b95-bd87-e46a3af3beb6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Campbell", - "company": "eSteganoergy", - "phone": "838-487-2501", - "email": "natalie@esteganoergy.com" - }, - { - "id": 2221, - "guid": "85aa7ccd-720e-4d42-afe2-8fd2f29b7f9f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ariana Gerald", - "company": "Quintegrity", - "phone": "888-464-3152", - "email": "ariana@quintegrity.com" - }, - { - "id": 2222, - "guid": "9eeb435e-511c-4312-82b3-bfe60ebb3afb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Galbraith", - "company": "Aluco", - "phone": "833-558-2229", - "email": "brianna@aluco.com" - }, - { - "id": 2223, - "guid": "079b7579-b070-4d6f-a8f4-efb535cad3c6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Olivia Oldridge", - "company": "Fibrotouch", - "phone": "831-479-2928", - "email": "olivia@fibrotouch.com" - }, - { - "id": 2224, - "guid": "f3e5161f-77ef-42be-9aae-3d3fb22f85bb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Neal", - "company": "Unconix", - "phone": "806-496-2791", - "email": "sophia@unconix.com" - }, - { - "id": 2225, - "guid": "03124c55-441e-42b5-b2c3-2137b0a5d558", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Autumn Nash", - "company": "eSteganoergy", - "phone": "872-410-2186", - "email": "autumn@esteganoergy.com" - }, - { - "id": 2226, - "guid": "cd50f341-bf8f-4164-9724-11bd6c41e68c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Sherlock", - "company": "Xeicon", - "phone": "820-533-3653", - "email": "kayla@xeicon.com" - }, - { - "id": 2227, - "guid": "9671ca67-2113-4b10-85ad-19185c81dd10", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Ogden", - "company": "Robotemplate", - "phone": "826-441-3946", - "email": "brianna@robotemplate.com" - }, - { - "id": 2228, - "guid": "2009c009-60f2-495f-b6e3-f555a074dd2e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Hodges", - "company": "iQualcar", - "phone": "868-583-3977", - "email": "brooke@iqualcar.com" - }, - { - "id": 2229, - "guid": "758145d4-7800-4211-ac4a-d45d540b5df4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophie Daniels", - "company": "Indisco", - "phone": "855-441-3669", - "email": "sophie@indisco.com" - }, - { - "id": 2230, - "guid": "3ba1dbfc-c9f3-4abd-bd40-16d418d55661", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexa Miln", - "company": "Fibrotouch", - "phone": "864-486-2679", - "email": "alexa@fibrotouch.com" - }, - { - "id": 2231, - "guid": "3832dc16-e64c-453f-813a-cf935cfa78b1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Smith", - "company": "Turbomart", - "phone": "804-493-3963", - "email": "gabrielle@turbomart.com" - }, - { - "id": 2232, - "guid": "8bcee2c9-bc95-4198-a677-73b3b7d6d787", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Charlson", - "company": "Thermotomic", - "phone": "862-475-3767", - "email": "nevaeh@thermotomic.com" - }, - { - "id": 2233, - "guid": "742608cf-0719-4ed0-a5e9-5177a43ede04", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Thomson", - "company": "Nanobanc", - "phone": "812-591-3061", - "email": "gabriella@nanobanc.com" - }, - { - "id": 2234, - "guid": "bb309d9d-2650-4734-b118-c91ed8f42d8e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Croftoon", - "company": "Infragraph", - "phone": "888-448-3040", - "email": "taylor@infragraph.com" - }, - { - "id": 2235, - "guid": "3d5b172d-d440-4f01-a441-b9052e921732", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Young", - "company": "Titanigraf", - "phone": "835-512-2886", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 2236, - "guid": "08aee843-f544-488c-a44c-414fde79448e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madison Carrington", - "company": "Teratopia", - "phone": "882-547-3082", - "email": "madison@teratopia.com" - }, - { - "id": 2237, - "guid": "9eb75ccb-e89b-433a-b7f2-623f1ed04bda", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Morrison", - "company": "Raylog", - "phone": "871-564-3883", - "email": "gianna@raylog.com" - }, - { - "id": 2238, - "guid": "a69ac371-fcda-4068-9d05-c86cb0e740ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Riley Neal", - "company": "Vencom", - "phone": "864-436-3228", - "email": "riley@vencom.com" - }, - { - "id": 2239, - "guid": "e7e194fa-2c14-4b70-a263-a68dbc11bcf5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Carrington", - "company": "Quintegrity", - "phone": "877-461-3715", - "email": "maya@quintegrity.com" - }, - { - "id": 2240, - "guid": "e88a021e-9ec3-4810-a037-6ddff23b3e54", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Vaughan", - "company": "eEyetanic", - "phone": "890-573-2735", - "email": "abigail@eeyetanic.com" - }, - { - "id": 2241, - "guid": "aee66419-10bb-480a-b2f8-df121f7a1cb8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Sheldon", - "company": "Allnet", - "phone": "802-411-2014", - "email": "payton@allnet.com" - }, - { - "id": 2242, - "guid": "d1a461f6-2052-4b24-833f-7eaced79b130", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Gilbert", - "company": "Conotomics", - "phone": "801-588-2477", - "email": "bella@conotomics.com" - }, - { - "id": 2243, - "guid": "54c3ec54-744c-45fb-8ec3-53c34683f92d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Davidson", - "company": "Safeagra", - "phone": "821-480-3761", - "email": "kaylee@safeagra.com" - }, - { - "id": 2244, - "guid": "43a53f3e-c529-44e6-8895-6edda98f32c3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Higgins", - "company": "Nanobanc", - "phone": "821-599-3667", - "email": "aubrey@nanobanc.com" - }, - { - "id": 2245, - "guid": "4dc90a0e-5eb2-4fe8-9356-9717e36c2c7f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Abramson", - "company": "Airdyne", - "phone": "873-543-2831", - "email": "victoria@airdyne.com" - }, - { - "id": 2246, - "guid": "d9d496e1-0757-4267-a399-02902340b117", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Thorndike", - "company": "Indisco", - "phone": "837-444-3113", - "email": "melanie@indisco.com" - }, - { - "id": 2247, - "guid": "404a0c0e-df60-4847-9b5b-c3a11e351cc6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Oswald", - "company": "Ventanium", - "phone": "858-403-3045", - "email": "rachel@ventanium.com" - }, - { - "id": 2248, - "guid": "a2b68b5b-a25d-4a5b-8e8f-5313b0e572e1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Fulton", - "company": "Jamrola", - "phone": "876-428-3182", - "email": "savannah@jamrola.com" - }, - { - "id": 2249, - "guid": "7a09ac12-f04a-4200-84e1-504b6321e17b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Wallace", - "company": "Genland", - "phone": "878-404-3408", - "email": "hailey@genland.com" - }, - { - "id": 2250, - "guid": "5a37ab25-cabb-4baa-9d9d-2d05ae8975ef", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Hawkins", - "company": "Rapigrafix", - "phone": "841-517-3799", - "email": "gabrielle@rapigrafix.com" - }, - { - "id": 2251, - "guid": "4142d588-9cbf-4fea-b6b7-6d1e55235089", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maya Galbraith", - "company": "Teknoplexon", - "phone": "835-550-2077", - "email": "maya@teknoplexon.com" - }, - { - "id": 2252, - "guid": "2e60fe96-3edc-4de4-9b41-5c52160589a2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline White", - "company": "Westtomik", - "phone": "831-496-2876", - "email": "madeline@westtomik.com" - }, - { - "id": 2253, - "guid": "dd2c541b-268d-4e8a-ba10-e9ab13cdb4c7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Otis", - "company": "Infragraph", - "phone": "819-546-2546", - "email": "katherine@infragraph.com" - }, - { - "id": 2254, - "guid": "016dea0b-063c-45bf-ad5b-02553af843d7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Conors", - "company": "Airdyne", - "phone": "878-445-2674", - "email": "evelyn@airdyne.com" - }, - { - "id": 2255, - "guid": "738562fe-e47c-4806-b0aa-fff4e26fec6b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Miers", - "company": "eSteganoergy", - "phone": "838-436-3956", - "email": "evelyn@esteganoergy.com" - }, - { - "id": 2256, - "guid": "23dd4f8d-9eeb-48e3-9af8-4a0bc2cedf25", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Gustman", - "company": "Robocomm", - "phone": "816-419-2494", - "email": "maya@robocomm.com" - }, - { - "id": 2257, - "guid": "8f374765-ddfc-4c83-b0aa-4154d96b7b10", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooke Osborne", - "company": "Teratopia", - "phone": "845-505-3020", - "email": "brooke@teratopia.com" - }, - { - "id": 2258, - "guid": "fecf2d6b-c190-43a4-a4e7-1eea372127ae", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Oswald", - "company": "InfoAirway", - "phone": "861-412-3298", - "email": "kimberly@infoairway.com" - }, - { - "id": 2259, - "guid": "83ee7643-75c5-4f84-86bc-700f60d5be4b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Haig", - "company": "Entcast", - "phone": "893-460-2110", - "email": "rachel@entcast.com" - }, - { - "id": 2260, - "guid": "da45bcf8-9a7d-4e0c-918d-f28809f17704", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Galbraith", - "company": "Compuamerica", - "phone": "811-518-3597", - "email": "maria@compuamerica.com" - }, - { - "id": 2261, - "guid": "c7444444-6557-41ea-8d27-7248d1f5498e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Sheldon", - "company": "Westtomik", - "phone": "852-593-3978", - "email": "lillian@westtomik.com" - }, - { - "id": 2262, - "guid": "7b4458b4-09c1-4090-83ec-baeff79515bf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Oldman", - "company": "Truegate", - "phone": "884-403-3555", - "email": "faith@truegate.com" - }, - { - "id": 2263, - "guid": "d4310fbd-d429-40a4-87c1-c604c3a5622e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Timmons", - "company": "eEyetanic", - "phone": "836-591-3363", - "email": "sofia@eeyetanic.com" - }, - { - "id": 2264, - "guid": "90109dc9-aff5-4a00-b868-84277f1abaa7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Hailey", - "company": "Dynarama", - "phone": "869-509-3211", - "email": "nevaeh@dynarama.com" - }, - { - "id": 2265, - "guid": "c6793a13-fb2b-47b2-bbff-7fd5e214a17a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Clapton", - "company": "Celgra", - "phone": "825-561-2959", - "email": "makayla@celgra.com" - }, - { - "id": 2266, - "guid": "941f86ae-623a-49d8-bebf-55e42aa9db09", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Calhoun", - "company": "Keytheon", - "phone": "866-479-3464", - "email": "trinity@keytheon.com" - }, - { - "id": 2267, - "guid": "96955cab-16db-4fa6-8738-ea38264e78d3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Day", - "company": "iSkyvaco", - "phone": "803-598-2095", - "email": "sofia@iskyvaco.com" - }, - { - "id": 2268, - "guid": "967908e7-0ec0-4260-9a95-1bf72678ed9e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Owen", - "company": "Westmedia", - "phone": "867-556-2484", - "email": "katherine@westmedia.com" - }, - { - "id": 2269, - "guid": "34312941-c780-4981-a52f-70448f5edb1a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Gilson", - "company": "Mescatron", - "phone": "822-526-2584", - "email": "julia@mescatron.com" - }, - { - "id": 2270, - "guid": "30120edd-8881-4d71-9893-950e5d91e2a1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Freeman", - "company": "Cryptotemplate", - "phone": "881-585-2918", - "email": "layla@cryptotemplate.com" - }, - { - "id": 2271, - "guid": "f3addd6f-999a-443b-badd-cc782907d3b2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Gilmore", - "company": "Westgate", - "phone": "856-555-2673", - "email": "molly@westgate.com" - }, - { - "id": 2272, - "guid": "ec19c3e5-59a1-494b-9309-6bb9f6c55baa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Gilson", - "company": "Airdyne", - "phone": "896-400-2799", - "email": "gianna@airdyne.com" - }, - { - "id": 2273, - "guid": "702f5820-51ec-4e35-884e-a42e4dcd7446", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Molligan", - "company": "Compuamerica", - "phone": "838-503-3323", - "email": "victoria@compuamerica.com" - }, - { - "id": 2274, - "guid": "cacb11b2-7e85-41d3-a6fb-5519b9437918", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Haig", - "company": "eSteganoergy", - "phone": "827-484-2633", - "email": "amelia@esteganoergy.com" - }, - { - "id": 2275, - "guid": "f0ee3e6f-cf1a-47ba-9e5c-15e35b8bdc4e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Carter", - "company": "Pacwest", - "phone": "856-490-2861", - "email": "morgan@pacwest.com" - }, - { - "id": 2276, - "guid": "c98fd3b4-2b86-4c61-8910-35787c0208c4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Carrington", - "company": "Raylog", - "phone": "889-491-3461", - "email": "lillian@raylog.com" - }, - { - "id": 2277, - "guid": "da062741-b655-46c2-a451-77b58c59f966", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Adamson", - "company": "Generola", - "phone": "825-510-3127", - "email": "ava@generola.com" - }, - { - "id": 2278, - "guid": "fd09b672-a41c-49c6-9918-fe961e1c79fb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Bush", - "company": "Jamconik", - "phone": "806-512-2184", - "email": "mariah@jamconik.com" - }, - { - "id": 2279, - "guid": "d9a4901b-90c0-4b4d-90aa-27c45e0eb8f8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Milton", - "company": "Unconix", - "phone": "898-472-2092", - "email": "avery@unconix.com" - }, - { - "id": 2280, - "guid": "cdc7c825-9d3a-4a94-b9a6-7f936065a20b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Mercer", - "company": "Ventanium", - "phone": "832-532-2325", - "email": "julia@ventanium.com" - }, - { - "id": 2281, - "guid": "9a3c19c7-6e80-4524-bfbc-ca2e05b0313e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Gate", - "company": "Polytheon", - "phone": "894-410-2167", - "email": "peyton@polytheon.com" - }, - { - "id": 2282, - "guid": "ff7f69be-43db-4955-9db7-6ae9de59566d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Waller", - "company": "Mescaridic", - "phone": "876-587-3400", - "email": "vanessa@mescaridic.com" - }, - { - "id": 2283, - "guid": "00b24d01-8f7e-454d-a57e-1fbb3dac4733", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Gilbert", - "company": "Syssoft", - "phone": "893-545-3002", - "email": "allison@syssoft.com" - }, - { - "id": 2284, - "guid": "dde0e95d-9498-44e7-992e-3a499ada0424", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Miln", - "company": "Qualserve", - "phone": "800-511-3688", - "email": "samantha@qualserve.com" - }, - { - "id": 2285, - "guid": "db27c7a8-b2b4-4c61-b457-8dd01fd5c9f0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bella Webster", - "company": "Venconix", - "phone": "864-564-2363", - "email": "bella@venconix.com" - }, - { - "id": 2286, - "guid": "9519c7b8-9933-4de2-9a99-764106a32739", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Arianna Otis", - "company": "Infragraph", - "phone": "832-504-2613", - "email": "arianna@infragraph.com" - }, - { - "id": 2287, - "guid": "0d1bd7f6-7a14-4667-ace4-eab94bb8f46f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Miers", - "company": "Skydata", - "phone": "879-523-3546", - "email": "mackenzie@skydata.com" - }, - { - "id": 2288, - "guid": "5c86763d-4fa1-4348-b3e6-79880c789015", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Galbraith", - "company": "Qualserve", - "phone": "829-402-2598", - "email": "mya@qualserve.com" - }, - { - "id": 2289, - "guid": "447d310b-810e-4979-aeba-330726056d50", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Gilson", - "company": "Skydata", - "phone": "895-427-2606", - "email": "alexa@skydata.com" - }, - { - "id": 2290, - "guid": "ef86262e-bf1e-42b8-99ac-77d5352b7d0b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Harrison", - "company": "Conotomics", - "phone": "820-422-2125", - "email": "serenity@conotomics.com" - }, - { - "id": 2291, - "guid": "9f5ac049-9b4a-4129-a14e-603d59c759ea", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Carrington", - "company": "Truetomic", - "phone": "881-489-2906", - "email": "melanie@truetomic.com" - }, - { - "id": 2292, - "guid": "bf4521e2-0884-4a53-af63-30f627a3a1e4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Thorndike", - "company": "Jamrola", - "phone": "887-525-2817", - "email": "avery@jamrola.com" - }, - { - "id": 2293, - "guid": "34e7cb45-1a11-44f7-ad4b-edc8d6cac36b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Nathan", - "company": "iEnland", - "phone": "806-459-2925", - "email": "kaylee@ienland.com" - }, - { - "id": 2294, - "guid": "e14685fc-c5c5-4999-a687-cf08381633fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Carrington", - "company": "Keytheon", - "phone": "897-453-3678", - "email": "faith@keytheon.com" - }, - { - "id": 2295, - "guid": "5db9bf02-72b9-4196-b2cb-6fcb7032c728", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooklyn Creighton", - "company": "Enlogia", - "phone": "876-568-3797", - "email": "brooklyn@enlogia.com" - }, - { - "id": 2296, - "guid": "745da0ef-8261-41d7-a513-5b2cf0ff42bb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Murphy", - "company": "Unologic", - "phone": "883-470-2630", - "email": "peyton@unologic.com" - }, - { - "id": 2297, - "guid": "336c44c2-0f16-4f5c-8adc-eebdb6055e96", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Clapton", - "company": "InfoAirway", - "phone": "848-400-2687", - "email": "kimberly@infoairway.com" - }, - { - "id": 2298, - "guid": "e0a924d5-0cfa-4f40-9f42-0a373b987e36", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Mercer", - "company": "Gigaura", - "phone": "817-448-3375", - "email": "ariana@gigaura.com" - }, - { - "id": 2299, - "guid": "7f6a3ccd-bba6-4d08-ba67-b6549c1abbee", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Timmons", - "company": "Techtron", - "phone": "800-497-2432", - "email": "morgan@techtron.com" - }, - { - "id": 2300, - "guid": "56f0f62a-15a8-4cfc-b329-e19cbda54eaf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Adamson", - "company": "Gigaura", - "phone": "884-410-3723", - "email": "madelyn@gigaura.com" - }, - { - "id": 2301, - "guid": "fe844fea-50f4-4b23-8cd3-0cad84e35baf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Goldman", - "company": "Pacwest", - "phone": "852-446-3832", - "email": "maya@pacwest.com" - }, - { - "id": 2302, - "guid": "98ecb70f-5f93-40c3-8e5c-22732be6bb5d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Molligan", - "company": "Keytheon", - "phone": "819-558-3953", - "email": "melanie@keytheon.com" - }, - { - "id": 2303, - "guid": "2a1ab3b1-6675-4e5d-921a-9eb7a69cbbba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Daniels", - "company": "Textiqua", - "phone": "850-487-2562", - "email": "zoe@textiqua.com" - }, - { - "id": 2304, - "guid": "4d70e58b-07b9-45d5-9734-ceed99277fe8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Brooks", - "company": "Titanigraf", - "phone": "815-541-3399", - "email": "hannah@titanigraf.com" - }, - { - "id": 2305, - "guid": "6a7d6ef7-b5f1-4882-b721-b5e7d2d7ba8e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Carrington", - "company": "Quintegrity", - "phone": "855-526-2654", - "email": "kaylee@quintegrity.com" - }, - { - "id": 2306, - "guid": "93a202e1-9381-43b3-83ff-649b8b202d12", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Wood", - "company": "Idmax", - "phone": "877-447-3204", - "email": "samantha@idmax.com" - }, - { - "id": 2307, - "guid": "c4d80ce9-8541-4dca-815c-8b53060a9976", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Timmons", - "company": "RoboAerlogix", - "phone": "861-489-3383", - "email": "emily@roboaerlogix.com" - }, - { - "id": 2308, - "guid": "5f139ca7-cbe4-4056-a137-1c7642f2c084", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Cramer", - "company": "Nanobanc", - "phone": "813-404-2411", - "email": "kayla@nanobanc.com" - }, - { - "id": 2309, - "guid": "fbddd4ef-9780-4a96-b622-d39554f37fee", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Hodges", - "company": "Cryptotegrity", - "phone": "804-432-2346", - "email": "natalie@cryptotegrity.com" - }, - { - "id": 2310, - "guid": "761c5ed9-217f-45a6-88e1-3fa4cb35b6b9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brianna Fulton", - "company": "Ameritron", - "phone": "842-575-3709", - "email": "brianna@ameritron.com" - }, - { - "id": 2311, - "guid": "56633a7f-c553-4d87-98f2-ada78667742e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Oldridge", - "company": "Safeagra", - "phone": "880-430-3332", - "email": "lily@safeagra.com" - }, - { - "id": 2312, - "guid": "880b4fb2-2cb3-4f10-8538-ca49c12356b8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Harrison", - "company": "Unologic", - "phone": "822-433-2211", - "email": "trinity@unologic.com" - }, - { - "id": 2313, - "guid": "ddb51fc5-9106-4a82-b86f-80e42cefe55d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jocelyn Owen", - "company": "Vencom", - "phone": "840-432-2209", - "email": "jocelyn@vencom.com" - }, - { - "id": 2314, - "guid": "74d75c68-f386-43ff-b414-343842ba3779", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Davidson", - "company": "Rapigrafix", - "phone": "821-547-2101", - "email": "lillian@rapigrafix.com" - }, - { - "id": 2315, - "guid": "9963151f-9345-4fd5-b62e-c5735d3666b0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Hoggarth", - "company": "Transtouch", - "phone": "842-578-3055", - "email": "isabelle@transtouch.com" - }, - { - "id": 2316, - "guid": "4d7de366-ab2d-487d-9c61-1e763a119039", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Audrey Wood", - "company": "Infragraph", - "phone": "821-501-2450", - "email": "audrey@infragraph.com" - }, - { - "id": 2317, - "guid": "f4ef3217-228e-4ac9-8be2-fd05633b7d21", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Walkman", - "company": "Sontopia", - "phone": "883-567-3472", - "email": "brianna@sontopia.com" - }, - { - "id": 2318, - "guid": "e4ca0564-2db7-4eac-8d32-7fd80661f6e6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Vaughan", - "company": "Netseco", - "phone": "880-475-2238", - "email": "jasmine@netseco.com" - }, - { - "id": 2319, - "guid": "918ca87d-11b4-4728-b42e-a169f83fcec1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Cramer", - "company": "SysVenamerica", - "phone": "802-508-2973", - "email": "payton@sysvenamerica.com" - }, - { - "id": 2320, - "guid": "8d068bd0-dc90-4da5-81ad-f4e9d1d4935e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Nathan", - "company": "Truetomic", - "phone": "808-409-3318", - "email": "mariah@truetomic.com" - }, - { - "id": 2321, - "guid": "1a69b91e-a35d-4192-9d6d-5d8e24b86eed", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Hancock", - "company": "Infragraph", - "phone": "871-458-3750", - "email": "samantha@infragraph.com" - }, - { - "id": 2322, - "guid": "a4c59ddb-0c34-4148-a361-91133aff1054", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Oliver", - "company": "Anaframe", - "phone": "802-525-3674", - "email": "payton@anaframe.com" - }, - { - "id": 2323, - "guid": "f9dbbd47-a704-4682-a2b7-5835160acd14", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Cramer", - "company": "Transtouch", - "phone": "876-529-2880", - "email": "jessica@transtouch.com" - }, - { - "id": 2324, - "guid": "da502c38-ebc5-4be9-806e-3e90a5d6d791", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Oldman", - "company": "Netsystems", - "phone": "889-558-3258", - "email": "sofia@netsystems.com" - }, - { - "id": 2325, - "guid": "7f154d5f-6a17-47fe-8726-daeae9baf8e9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Brown", - "company": "Mescatron", - "phone": "840-545-3634", - "email": "kimberly@mescatron.com" - }, - { - "id": 2326, - "guid": "4de5c4de-2707-4091-a78e-cb30262f9df6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexandra White", - "company": "US Infratouch", - "phone": "803-538-3532", - "email": "alexandra@us infratouch.com" - }, - { - "id": 2327, - "guid": "62767ca9-6f1f-475b-9f2e-89943898aa76", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Warren", - "company": "Raylog", - "phone": "822-467-3550", - "email": "mia@raylog.com" - }, - { - "id": 2328, - "guid": "4011ad4f-fe2a-41d4-90d1-86c85f9b0f52", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Nelson", - "company": "Teraserv", - "phone": "808-520-2132", - "email": "valeria@teraserv.com" - }, - { - "id": 2329, - "guid": "82179da4-62b1-41bb-a880-e7b206ea3f50", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Fulton", - "company": "Westmedia", - "phone": "823-497-3397", - "email": "gianna@westmedia.com" - }, - { - "id": 2330, - "guid": "e0833d5c-036c-4c02-b12d-40b53bcc3d3d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Miln", - "company": "SysUSA", - "phone": "862-444-2685", - "email": "sydney@sysusa.com" - }, - { - "id": 2331, - "guid": "af4f8548-b3d1-4c2d-b1e0-28a21eaef602", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Miln", - "company": "Conotomics", - "phone": "867-457-3123", - "email": "lily@conotomics.com" - }, - { - "id": 2332, - "guid": "d0eb8aa8-5c4f-42a6-849f-90da923b6b26", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Morrison", - "company": "Technogra", - "phone": "870-597-3853", - "email": "brooke@technogra.com" - }, - { - "id": 2333, - "guid": "641d047d-f35c-4fe3-831d-e4663dc233b9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexandra Chesterton", - "company": "iQualcar", - "phone": "880-500-2233", - "email": "alexandra@iqualcar.com" - }, - { - "id": 2334, - "guid": "aded0e49-5b34-4a77-ba87-182c32ac4ecb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Hancock", - "company": "eSteganoergy", - "phone": "825-563-3391", - "email": "savannah@esteganoergy.com" - }, - { - "id": 2335, - "guid": "7011e7fc-7fad-4b9f-aaff-9846137ea00b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Hoggarth", - "company": "SysVenamerica", - "phone": "895-481-3882", - "email": "lillian@sysvenamerica.com" - }, - { - "id": 2336, - "guid": "a8f48eb0-f406-4e3a-b475-cc3aaf06c251", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Cook", - "company": "Cryptotegrity", - "phone": "892-554-2449", - "email": "rachel@cryptotegrity.com" - }, - { - "id": 2337, - "guid": "6df947ad-563b-4252-9024-3420e34a8fd9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Gerald", - "company": "Transtouch", - "phone": "819-440-3247", - "email": "sydney@transtouch.com" - }, - { - "id": 2338, - "guid": "3b53b08f-39c8-4ef3-9297-4f6bcc6af46e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Owen", - "company": "Raylog", - "phone": "853-530-3129", - "email": "mya@raylog.com" - }, - { - "id": 2339, - "guid": "49bc2000-68bb-4ef6-90e4-9eafab371dd5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Nelson", - "company": "Cryptotemplate", - "phone": "831-409-2160", - "email": "kaylee@cryptotemplate.com" - }, - { - "id": 2340, - "guid": "ea93fae4-cc31-47f0-912e-b6f87df605c7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Ford", - "company": "Aluco", - "phone": "801-571-3599", - "email": "kylie@aluco.com" - }, - { - "id": 2341, - "guid": "7128544b-812c-4b86-bcd5-efc227d68c73", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Gardner", - "company": "US Infratouch", - "phone": "803-528-3093", - "email": "audrey@us infratouch.com" - }, - { - "id": 2342, - "guid": "fe66baa6-06f9-46d4-a28c-bffa370081bf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gianna Abramson", - "company": "InfoAirway", - "phone": "859-498-3401", - "email": "gianna@infoairway.com" - }, - { - "id": 2343, - "guid": "011b8d76-c1f2-418c-ad4e-285bcc4aaebe", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Taylor Watson", - "company": "Superscope", - "phone": "850-439-2682", - "email": "taylor@superscope.com" - }, - { - "id": 2344, - "guid": "38422841-4431-4e3b-a686-2013ba9b5c3d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Nash", - "company": "Aluco", - "phone": "823-492-3403", - "email": "mya@aluco.com" - }, - { - "id": 2345, - "guid": "7332f7d5-3275-493f-b990-140097ca33aa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mackenzie Chesterton", - "company": "Compuamerica", - "phone": "858-589-3382", - "email": "mackenzie@compuamerica.com" - }, - { - "id": 2346, - "guid": "312173e1-83e3-42a2-b8c2-77193da55040", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Hancock", - "company": "US Infratouch", - "phone": "829-591-2482", - "email": "riley@us infratouch.com" - }, - { - "id": 2347, - "guid": "6d98138f-84e8-4977-8795-034a2fb83a05", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Clapton", - "company": "Xeicon", - "phone": "861-581-3265", - "email": "molly@xeicon.com" - }, - { - "id": 2348, - "guid": "02a1849d-6b2e-42be-8ae1-f7d102e2ef07", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Freeman", - "company": "Xeicon", - "phone": "865-593-2269", - "email": "brianna@xeicon.com" - }, - { - "id": 2349, - "guid": "a8e7500f-3e9b-4ea9-83ff-51ba77b7cf21", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Bush", - "company": "Gigaura", - "phone": "856-479-3432", - "email": "grace@gigaura.com" - }, - { - "id": 2350, - "guid": "f094cb38-b3c4-49a4-b261-e084cdd6786d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Oldman", - "company": "iSkyvaco", - "phone": "878-515-3614", - "email": "ava@iskyvaco.com" - }, - { - "id": 2351, - "guid": "239f011b-51cb-4de0-9571-0b23f09654d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Ogden", - "company": "Cryptotemplate", - "phone": "822-406-3371", - "email": "abigail@cryptotemplate.com" - }, - { - "id": 2352, - "guid": "f269653a-4e1b-4ac4-8832-38f9b875bbb0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Osborne", - "company": "Allnet", - "phone": "807-461-2524", - "email": "faith@allnet.com" - }, - { - "id": 2353, - "guid": "6c8b5594-f8d9-4a75-8ca2-d28665852347", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Wainwright", - "company": "Gigaura", - "phone": "878-586-2911", - "email": "lillian@gigaura.com" - }, - { - "id": 2354, - "guid": "3b9adbf2-45d3-4671-9fcc-0a6d0e43ad98", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooke Oliver", - "company": "Westmedia", - "phone": "814-524-3936", - "email": "brooke@westmedia.com" - }, - { - "id": 2355, - "guid": "1e1ea5d8-b4ba-4be0-9353-29c19cde20f4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Claire Galbraith", - "company": "SysVenamerica", - "phone": "853-600-3457", - "email": "claire@sysvenamerica.com" - }, - { - "id": 2356, - "guid": "55dd9673-f078-43cd-9c01-5865ee1dc91e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Turner", - "company": "Robocomm", - "phone": "865-545-2280", - "email": "alexa@robocomm.com" - }, - { - "id": 2357, - "guid": "140cd771-6d94-4db7-bc3b-3e32fd5bdfdf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Nelson", - "company": "Steganoconiche", - "phone": "856-405-3169", - "email": "gianna@steganoconiche.com" - }, - { - "id": 2358, - "guid": "8ea0b9a8-c432-4a79-8a20-64b137385d2d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Bush", - "company": "Dynarama", - "phone": "888-591-3294", - "email": "valeria@dynarama.com" - }, - { - "id": 2359, - "guid": "b25a7efe-3ec0-41d0-9378-3edef35d331f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Watson", - "company": "Indisco", - "phone": "896-582-2126", - "email": "alyssa@indisco.com" - }, - { - "id": 2360, - "guid": "48c5754a-8bf3-490a-a405-cd5e2f7b26ea", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoe Hawkins", - "company": "Safeagra", - "phone": "830-573-3610", - "email": "zoe@safeagra.com" - }, - { - "id": 2361, - "guid": "5131eeab-a5e2-4bc1-91dd-388a9442c3f6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Vaughan", - "company": "US Infratouch", - "phone": "825-557-3549", - "email": "jessica@us infratouch.com" - }, - { - "id": 2362, - "guid": "d0e5e21c-08e3-4796-9ef7-b6bfbb271783", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Chandter", - "company": "Idmax", - "phone": "800-440-3358", - "email": "genesis@idmax.com" - }, - { - "id": 2363, - "guid": "f68568b2-4ba7-4823-bfb3-74b0ec464d31", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Carey", - "company": "Quintegrity", - "phone": "841-585-3912", - "email": "sydney@quintegrity.com" - }, - { - "id": 2364, - "guid": "b949cc36-9f76-4319-ad94-e2196024cb16", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ashley Clapton", - "company": "Celgra", - "phone": "885-504-2350", - "email": "ashley@celgra.com" - }, - { - "id": 2365, - "guid": "66c3c981-f54c-4af1-bcc7-715123072ea4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabriella Gate", - "company": "Superscope", - "phone": "848-473-2668", - "email": "gabriella@superscope.com" - }, - { - "id": 2366, - "guid": "5042e00d-0313-434b-8b01-0f0b317dd6bc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Wainwright", - "company": "Xeicon", - "phone": "866-402-2668", - "email": "mia@xeicon.com" - }, - { - "id": 2367, - "guid": "70d1fea7-3261-4146-8cfd-8f21695b5114", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Osborne", - "company": "Teratopia", - "phone": "804-510-2558", - "email": "khloe@teratopia.com" - }, - { - "id": 2368, - "guid": "275606c3-8acd-491d-aaf1-8ec4909727c5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Anna Waller", - "company": "Inridium", - "phone": "860-591-3602", - "email": "anna@inridium.com" - }, - { - "id": 2369, - "guid": "98855dd6-e281-4348-91a2-cfd9e3838d4d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Clapton", - "company": "Quintegrity", - "phone": "802-426-2273", - "email": "mia@quintegrity.com" - }, - { - "id": 2370, - "guid": "ab03cb6e-9ccf-497c-935f-8ad127c6240b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Turner", - "company": "Xeicon", - "phone": "845-548-3500", - "email": "natalie@xeicon.com" - }, - { - "id": 2371, - "guid": "749be45a-cd46-40a4-83c8-c3e98e6c3866", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lauren Thomson", - "company": "Aluco", - "phone": "864-576-2258", - "email": "lauren@aluco.com" - }, - { - "id": 2372, - "guid": "24fc6c03-c74f-4981-9e03-9a0500bdc851", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madelyn Wood", - "company": "Aluco", - "phone": "856-497-2108", - "email": "madelyn@aluco.com" - }, - { - "id": 2373, - "guid": "9cf3ff98-7ce3-40cd-ad54-7944adc40fb2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Hoggarth", - "company": "Superscope", - "phone": "870-444-2365", - "email": "lillian@superscope.com" - }, - { - "id": 2374, - "guid": "82e74a5f-62c8-47f1-965b-7157b65a00ae", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Abramson", - "company": "Aprama", - "phone": "856-542-2534", - "email": "alexis@aprama.com" - }, - { - "id": 2375, - "guid": "f124d2eb-2c14-4781-9845-e418c0c0d565", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Day", - "company": "Westmedia", - "phone": "871-557-3058", - "email": "autumn@westmedia.com" - }, - { - "id": 2376, - "guid": "19ac84a6-f486-43ad-9fef-83ab230b10d6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maya Freeman", - "company": "Tekcar", - "phone": "833-571-3606", - "email": "maya@tekcar.com" - }, - { - "id": 2377, - "guid": "963224ba-4d4a-46a7-9485-5816c2551457", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Wesley", - "company": "Fibrotouch", - "phone": "842-509-2318", - "email": "trinity@fibrotouch.com" - }, - { - "id": 2378, - "guid": "18ec3d5e-b284-4393-8ce4-643d156d533c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maria Mercer", - "company": "SysUSA", - "phone": "803-491-2846", - "email": "maria@sysusa.com" - }, - { - "id": 2379, - "guid": "60298387-53db-4f68-9e63-9c49cdf9e034", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Carrington", - "company": "Technogra", - "phone": "864-425-2104", - "email": "destiny@technogra.com" - }, - { - "id": 2380, - "guid": "364187dd-97ec-40e0-a193-66eae59fc872", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Brown", - "company": "Unologic", - "phone": "812-443-2150", - "email": "allison@unologic.com" - }, - { - "id": 2381, - "guid": "ecadb9f2-c75f-4e71-bfbc-64cf2b62b820", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Sheldon", - "company": "Vencom", - "phone": "803-557-2251", - "email": "avery@vencom.com" - }, - { - "id": 2382, - "guid": "1a0e9748-0e25-42e0-ac48-3c484bfa4172", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Carey", - "company": "Qualserve", - "phone": "826-476-2790", - "email": "alexis@qualserve.com" - }, - { - "id": 2383, - "guid": "9830125d-218c-4273-80eb-499599786f06", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Hamphrey", - "company": "Teraserv", - "phone": "855-478-2459", - "email": "victoria@teraserv.com" - }, - { - "id": 2384, - "guid": "29562dd4-f9ae-4ad0-a6f0-9b46bd52f3c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Thorndike", - "company": "Netsystems", - "phone": "816-493-2507", - "email": "elizabeth@netsystems.com" - }, - { - "id": 2385, - "guid": "e5edac15-c2b0-49e3-9673-6d13daa9e65d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa WifKinson", - "company": "Techtron", - "phone": "827-499-2250", - "email": "vanessa@techtron.com" - }, - { - "id": 2386, - "guid": "6f56941e-44a5-468e-813d-da27c49b26dd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Campbell", - "company": "eSteganoergy", - "phone": "816-546-2748", - "email": "bailey@esteganoergy.com" - }, - { - "id": 2387, - "guid": "348b389d-5aef-4e7f-8ca7-50809d843ae0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Thornton", - "company": "Keytheon", - "phone": "835-461-2370", - "email": "savannah@keytheon.com" - }, - { - "id": 2388, - "guid": "1cc819e1-adce-480e-aef9-9ecc5f4b583e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Wayne", - "company": "iEnland", - "phone": "855-458-3636", - "email": "emily@ienland.com" - }, - { - "id": 2389, - "guid": "7773ca7e-8eb8-454c-b72d-c025787c43de", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Makayla Day", - "company": "Anagraph", - "phone": "814-552-3775", - "email": "makayla@anagraph.com" - }, - { - "id": 2390, - "guid": "29b6d436-4ca4-4bc6-9a8f-280109cc437f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Gilson", - "company": "Qualserve", - "phone": "800-403-3991", - "email": "alexa@qualserve.com" - }, - { - "id": 2391, - "guid": "4f1314fe-28dc-429e-9294-f67741e56e42", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Ogden", - "company": "Anaframe", - "phone": "803-595-3710", - "email": "alexis@anaframe.com" - }, - { - "id": 2392, - "guid": "97768af3-6523-4be8-a349-c04e09dab2bb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Vance", - "company": "OpKeycomm", - "phone": "823-458-2279", - "email": "riley@opkeycomm.com" - }, - { - "id": 2393, - "guid": "6ec9beaf-1109-4f36-a835-205fdc4c9072", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Neal", - "company": "Techtron", - "phone": "852-487-3880", - "email": "lily@techtron.com" - }, - { - "id": 2394, - "guid": "3bce658c-a8be-4b08-a4d2-53bb2ceb7a80", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Walkman", - "company": "Westgate", - "phone": "828-492-2161", - "email": "kaylee@westgate.com" - }, - { - "id": 2395, - "guid": "fffd9d14-2318-45d1-aa97-b3d98d25cc7f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Carter", - "company": "Interliant", - "phone": "801-591-3352", - "email": "maya@interliant.com" - }, - { - "id": 2396, - "guid": "76154e0f-91f2-45f5-bd0c-d5dfd176e409", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Conors", - "company": "Aprama", - "phone": "869-496-2184", - "email": "genesis@aprama.com" - }, - { - "id": 2397, - "guid": "e3f25ba0-44a9-4df0-bb7e-b4d31f9bfdd0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Goldman", - "company": "Indisco", - "phone": "844-527-2172", - "email": "brooke@indisco.com" - }, - { - "id": 2398, - "guid": "9c01cb56-625b-44d2-a462-f0fe76f579a5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Bush", - "company": "iEnland", - "phone": "809-549-2029", - "email": "grace@ienland.com" - }, - { - "id": 2399, - "guid": "91818fbf-5711-48bb-9a25-86356dc8c4b6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Otis", - "company": "Transtouch", - "phone": "802-586-3643", - "email": "hailey@transtouch.com" - }, - { - "id": 2400, - "guid": "22a7ad89-8191-425c-9a9d-fb1503aee5d9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Goodman", - "company": "Navivacs", - "phone": "859-473-3133", - "email": "trinity@navivacs.com" - }, - { - "id": 2401, - "guid": "a0b1f308-7541-4625-826b-6d83fc05f077", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Thorndike", - "company": "Airdyne", - "phone": "838-472-3827", - "email": "hailey@airdyne.com" - }, - { - "id": 2402, - "guid": "a4427795-1cb9-43f5-8b17-9b452158f9e2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Young", - "company": "Qualserve", - "phone": "806-420-3041", - "email": "julia@qualserve.com" - }, - { - "id": 2403, - "guid": "ee38fdaf-2aa7-4287-a890-42ff00adabdc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla White", - "company": "Textiqua", - "phone": "862-599-2572", - "email": "kayla@textiqua.com" - }, - { - "id": 2404, - "guid": "5de873e7-75ad-4279-a7db-72bb8e5e4173", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Gilson", - "company": "Airdyne", - "phone": "829-575-2183", - "email": "alexa@airdyne.com" - }, - { - "id": 2405, - "guid": "10d9b8ec-6689-4105-8b17-a523521af991", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Carrington", - "company": "Truegate", - "phone": "897-421-3830", - "email": "riley@truegate.com" - }, - { - "id": 2406, - "guid": "c5c112db-a581-4133-86f6-8916327d7f8d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Gate", - "company": "Pacwest", - "phone": "884-404-2829", - "email": "faith@pacwest.com" - }, - { - "id": 2407, - "guid": "47aa2d32-e739-4154-9fec-fd145330a62e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Layla Gilson", - "company": "Indisco", - "phone": "842-529-2738", - "email": "layla@indisco.com" - }, - { - "id": 2408, - "guid": "11bbaf4e-4419-4eb6-b557-3f4320cc9c46", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Carter", - "company": "Westtomik", - "phone": "810-598-2740", - "email": "andrea@westtomik.com" - }, - { - "id": 2409, - "guid": "47347f12-f25b-43ac-8c51-214471eec708", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaitlyn Timmons", - "company": "SysUSA", - "phone": "877-557-3737", - "email": "kaitlyn@sysusa.com" - }, - { - "id": 2410, - "guid": "8763185e-50e7-4371-9b28-70b7d497ea5a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Hancock", - "company": "RoboAerlogix", - "phone": "838-403-3383", - "email": "hailey@roboaerlogix.com" - }, - { - "id": 2411, - "guid": "b6ca38a3-f772-4eaf-9506-c8347f3e2e5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Thornton", - "company": "Compuamerica", - "phone": "821-570-3211", - "email": "lauren@compuamerica.com" - }, - { - "id": 2412, - "guid": "36731504-c308-4e42-bb88-871abd0cc1a8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Charlson", - "company": "Jamconik", - "phone": "867-464-2120", - "email": "olivia@jamconik.com" - }, - { - "id": 2413, - "guid": "49f91449-8863-4b61-b88c-09bbd15d1bce", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Gibbs", - "company": "Orthomedia", - "phone": "873-480-2971", - "email": "anna@orthomedia.com" - }, - { - "id": 2414, - "guid": "64a28187-8964-4bea-8daa-43fdcbfc8b8e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Harrison", - "company": "Safetrust", - "phone": "894-492-2197", - "email": "rachel@safetrust.com" - }, - { - "id": 2415, - "guid": "90cf205e-436f-4faf-a4b7-d398cb1ddd32", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mia Creighton", - "company": "eEyetanic", - "phone": "847-532-2831", - "email": "mia@eeyetanic.com" - }, - { - "id": 2416, - "guid": "49a2795b-8e91-424e-94e1-619295d28ff9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Harrison", - "company": "Fibroserve", - "phone": "863-577-3055", - "email": "madeline@fibroserve.com" - }, - { - "id": 2417, - "guid": "7f00e1ab-0a59-4473-bacc-c8f8ff212502", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia Fulton", - "company": "Westtomik", - "phone": "827-449-3561", - "email": "sophia@westtomik.com" - }, - { - "id": 2418, - "guid": "0faf0441-94d3-496d-ba6a-e87e94bea9c6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kayla Charlson", - "company": "Cryptotegrity", - "phone": "863-494-2671", - "email": "kayla@cryptotegrity.com" - }, - { - "id": 2419, - "guid": "59c01885-cdf8-49f9-aaac-d56576fca52f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Thorndike", - "company": "Cryptotemplate", - "phone": "892-578-2890", - "email": "maria@cryptotemplate.com" - }, - { - "id": 2420, - "guid": "7a5dff50-e121-4345-8303-2d94dcdf79bc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Timmons", - "company": "Robotomic", - "phone": "832-485-3006", - "email": "eva@robotomic.com" - }, - { - "id": 2421, - "guid": "96bd6ea6-bf13-4a22-86e6-0b4aa29bf450", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Davidson", - "company": "Allphysiche", - "phone": "856-545-2386", - "email": "ariana@allphysiche.com" - }, - { - "id": 2422, - "guid": "6b1987d3-55bf-49bc-9d70-e6574ae9f5f3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabriella Gibbs", - "company": "Tekcar", - "phone": "813-488-2963", - "email": "gabriella@tekcar.com" - }, - { - "id": 2423, - "guid": "57110bd2-b1ed-4467-adc7-a50146cb2a08", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ella Nelson", - "company": "Anagraph", - "phone": "837-563-3980", - "email": "ella@anagraph.com" - }, - { - "id": 2424, - "guid": "0dd3f270-69e0-4a6e-bc1b-2061b78910ba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Hawkins", - "company": "iEnland", - "phone": "899-573-2732", - "email": "paige@ienland.com" - }, - { - "id": 2425, - "guid": "3a0567e6-8b02-465b-9e73-1472bda4c61e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Nash", - "company": "Systheon", - "phone": "855-531-2677", - "email": "mya@systheon.com" - }, - { - "id": 2426, - "guid": "b1e6497a-0f2b-4390-b47d-479f04df8f1a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Thorndike", - "company": "Allphysiche", - "phone": "837-438-3533", - "email": "madison@allphysiche.com" - }, - { - "id": 2427, - "guid": "fbf73748-1eae-4087-9b40-940d450a33fd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Ward", - "company": "Rapigrafix", - "phone": "825-402-2949", - "email": "abigail@rapigrafix.com" - }, - { - "id": 2428, - "guid": "ba6b42cf-9ec2-420d-a5fa-233eec0e9ac9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Miln", - "company": "Anagraph", - "phone": "879-454-2830", - "email": "sophia@anagraph.com" - }, - { - "id": 2429, - "guid": "35687e09-4a96-4b94-bfde-0a9da0a798fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Nathan", - "company": "Xeicon", - "phone": "825-549-2358", - "email": "leah@xeicon.com" - }, - { - "id": 2430, - "guid": "c4e2a21a-3c8c-4ddc-aa27-0c88c8d92046", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Day", - "company": "Technogra", - "phone": "892-538-2671", - "email": "olivia@technogra.com" - }, - { - "id": 2431, - "guid": "e5d1f008-9cb8-4f34-820c-4b8227c22040", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Harrison", - "company": "OpKeycomm", - "phone": "809-468-3687", - "email": "khloe@opkeycomm.com" - }, - { - "id": 2432, - "guid": "1bb3c29c-1ab1-4023-92d0-9ee56a573f9f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaitlyn Nash", - "company": "Quintegrity", - "phone": "850-420-3632", - "email": "kaitlyn@quintegrity.com" - }, - { - "id": 2433, - "guid": "faa09f11-b938-41c6-95f5-d528c0bc9835", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Brickman", - "company": "iOptystix", - "phone": "815-434-3241", - "email": "sophia@ioptystix.com" - }, - { - "id": 2434, - "guid": "26c5ec56-0593-45dd-95b1-28d0f9e3673c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Youmans", - "company": "Steganoconiche", - "phone": "850-587-2959", - "email": "khloe@steganoconiche.com" - }, - { - "id": 2435, - "guid": "bd467357-339c-47f0-968e-df59b2bc1f0b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Miln", - "company": "Technogra", - "phone": "834-483-3434", - "email": "genesis@technogra.com" - }, - { - "id": 2436, - "guid": "6c7fe0f1-757c-4da9-b20c-3948f3617397", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Croftoon", - "company": "Techtron", - "phone": "879-477-3895", - "email": "brooke@techtron.com" - }, - { - "id": 2437, - "guid": "ae3a2c7e-1571-4294-adf6-f657b905f558", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Gilbert", - "company": "Xeicon", - "phone": "839-477-3551", - "email": "gabriella@xeicon.com" - }, - { - "id": 2438, - "guid": "ad0ffdad-c250-4660-85fd-a5be7603ff05", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Thomson", - "company": "Netsystems", - "phone": "846-502-2762", - "email": "savannah@netsystems.com" - }, - { - "id": 2439, - "guid": "635c5772-cf41-48a7-b774-072eeda7824d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria Carey", - "company": "Steganoconiche", - "phone": "895-554-2255", - "email": "maria@steganoconiche.com" - }, - { - "id": 2440, - "guid": "76db78d8-13ce-4568-b413-f37d45bffbcc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Calhoun", - "company": "iQualcar", - "phone": "881-558-3758", - "email": "aaliyah@iqualcar.com" - }, - { - "id": 2441, - "guid": "e922df25-0e68-4e01-b617-20686550629c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Campbell", - "company": "iEnland", - "phone": "869-561-2431", - "email": "aaliyah@ienland.com" - }, - { - "id": 2442, - "guid": "18e9a2a7-8418-45f8-a691-361323e55939", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Vaughan", - "company": "Robocomm", - "phone": "821-564-2130", - "email": "destiny@robocomm.com" - }, - { - "id": 2443, - "guid": "73201f21-be8b-4d2e-b84a-f3c4c1f67e77", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Fisher", - "company": "Robotemplate", - "phone": "892-594-2584", - "email": "genesis@robotemplate.com" - }, - { - "id": 2444, - "guid": "563bfd8c-f7b6-4c4c-84cf-7438d4e490e8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Evelyn Harrison", - "company": "Conotomics", - "phone": "892-558-2844", - "email": "evelyn@conotomics.com" - }, - { - "id": 2445, - "guid": "4ea7ce92-0c69-4eaa-915b-fe8f8ec2aa3c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Brickman", - "company": "Teknoplexon", - "phone": "803-571-2064", - "email": "molly@teknoplexon.com" - }, - { - "id": 2446, - "guid": "ae600cd3-50a8-4da0-9ceb-0d360d237673", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Chloe Molligan", - "company": "Keytheon", - "phone": "887-566-2315", - "email": "chloe@keytheon.com" - }, - { - "id": 2447, - "guid": "a9a7a1e2-38c0-40e4-b42c-6beabac76614", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Nelson", - "company": "Hypervaco", - "phone": "892-491-3582", - "email": "camila@hypervaco.com" - }, - { - "id": 2448, - "guid": "90a8e176-40b7-475a-ab27-32f1392b54ba", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maya Hodges", - "company": "Orthomedia", - "phone": "860-473-2871", - "email": "maya@orthomedia.com" - }, - { - "id": 2449, - "guid": "9a17a2a4-5fc5-4614-86eb-f25e05152eab", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Thornton", - "company": "Anaframe", - "phone": "806-432-2474", - "email": "riley@anaframe.com" - }, - { - "id": 2450, - "guid": "d93f0edb-94af-4122-8357-8ccd63515342", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Bush", - "company": "Mescatron", - "phone": "843-484-2751", - "email": "allison@mescatron.com" - }, - { - "id": 2451, - "guid": "5374cec8-2863-4761-97fd-bd0435d647d9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Higgins", - "company": "Gigaura", - "phone": "812-456-2719", - "email": "savannah@gigaura.com" - }, - { - "id": 2452, - "guid": "4c0f6c17-6aa3-4fcf-8451-f6d694b4073f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Gustman", - "company": "Interliant", - "phone": "884-424-3726", - "email": "paige@interliant.com" - }, - { - "id": 2453, - "guid": "b709e3c5-7aae-497a-ab0d-e6c8de8515f2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Wainwright", - "company": "Syssoft", - "phone": "863-559-2153", - "email": "faith@syssoft.com" - }, - { - "id": 2454, - "guid": "9c226a69-22af-4933-9b12-ade2be1aacbc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Day", - "company": "Ventanium", - "phone": "844-522-2886", - "email": "ashley@ventanium.com" - }, - { - "id": 2455, - "guid": "c3f3b635-c137-4479-a744-96154dc04d5e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Nevaeh Warren", - "company": "Fibrotopia", - "phone": "843-468-2088", - "email": "nevaeh@fibrotopia.com" - }, - { - "id": 2456, - "guid": "b007f07f-7195-41fe-9978-57d1f643b19c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Charlson", - "company": "Multitiqua", - "phone": "832-560-3532", - "email": "avery@multitiqua.com" - }, - { - "id": 2457, - "guid": "1b3337b0-e294-419b-aebd-321b1ae27247", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bella Sherlock", - "company": "iQualcar", - "phone": "824-593-2299", - "email": "bella@iqualcar.com" - }, - { - "id": 2458, - "guid": "1c1b5bd2-e3ab-447d-ae42-432e9dbdbc96", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Waller", - "company": "Compuamerica", - "phone": "850-438-2931", - "email": "aaliyah@compuamerica.com" - }, - { - "id": 2459, - "guid": "ba389b66-b91e-4543-82d7-317893207a74", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Oliver", - "company": "Interliant", - "phone": "861-556-3913", - "email": "victoria@interliant.com" - }, - { - "id": 2460, - "guid": "09da7214-782b-4769-a414-c0cd906ddd2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Gate", - "company": "Celgra", - "phone": "817-455-2035", - "email": "hailey@celgra.com" - }, - { - "id": 2461, - "guid": "8304cb2b-6cb5-4a49-aab0-99268fc83f15", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Nathan", - "company": "OpKeycomm", - "phone": "873-504-3958", - "email": "ella@opkeycomm.com" - }, - { - "id": 2462, - "guid": "1f2b44d4-d374-4ad6-af74-875ec3783971", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Hawkins", - "company": "Thermotomic", - "phone": "818-599-2445", - "email": "audrey@thermotomic.com" - }, - { - "id": 2463, - "guid": "36851347-5ff8-40f4-b4b8-97228193a2e5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Clapton", - "company": "Venconix", - "phone": "816-581-3233", - "email": "amelia@venconix.com" - }, - { - "id": 2464, - "guid": "2c2daf7a-4674-4142-acfe-7d6b68b44b0e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Brown", - "company": "Pericenta", - "phone": "879-467-3291", - "email": "mackenzie@pericenta.com" - }, - { - "id": 2465, - "guid": "74021277-c795-4d23-9b2a-43380e4c1d15", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Timmons", - "company": "Interliant", - "phone": "864-414-2562", - "email": "grace@interliant.com" - }, - { - "id": 2466, - "guid": "6030213b-7e6c-43e8-996b-62e40922af2a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Stanley", - "company": "Dynarama", - "phone": "888-598-2807", - "email": "avery@dynarama.com" - }, - { - "id": 2467, - "guid": "cc764b1b-0843-4b52-b962-6da8477eddec", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Brooks", - "company": "Indisco", - "phone": "866-545-2792", - "email": "chloe@indisco.com" - }, - { - "id": 2468, - "guid": "36d33bba-9986-4dc6-b72d-fc2499ac4877", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Gerald", - "company": "Turbomart", - "phone": "851-567-2893", - "email": "autumn@turbomart.com" - }, - { - "id": 2469, - "guid": "4502648c-a628-41a0-83d6-71338eb196c6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Cook", - "company": "Superscope", - "phone": "899-469-2155", - "email": "savannah@superscope.com" - }, - { - "id": 2470, - "guid": "34741f3d-30ca-41d0-b36c-53f2673d3cb0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Thornton", - "company": "Gigaura", - "phone": "885-593-3451", - "email": "maria@gigaura.com" - }, - { - "id": 2471, - "guid": "4a6ef09a-cda1-4057-bb9a-af3216dff498", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Calhoun", - "company": "Jamrola", - "phone": "818-523-2993", - "email": "avery@jamrola.com" - }, - { - "id": 2472, - "guid": "38da2088-f76d-42a3-90c9-deabb34a2fba", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Brickman", - "company": "Keytheon", - "phone": "814-519-3909", - "email": "amelia@keytheon.com" - }, - { - "id": 2473, - "guid": "219a71ff-5da0-41b2-af63-6ca3f892e436", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Charlson", - "company": "Robocomm", - "phone": "895-436-2902", - "email": "sydney@robocomm.com" - }, - { - "id": 2474, - "guid": "34e19d0d-8dc8-4499-bd94-50f44c663645", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Gilmore", - "company": "Superscope", - "phone": "829-500-3202", - "email": "chloe@superscope.com" - }, - { - "id": 2475, - "guid": "3d584bf4-f972-4d12-b129-f6c4f8ed31e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Nash", - "company": "Fibroserve", - "phone": "874-485-3346", - "email": "camila@fibroserve.com" - }, - { - "id": 2476, - "guid": "f53bb177-ea52-4bda-9490-85f19509e987", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Fisher", - "company": "Anagraph", - "phone": "897-600-2686", - "email": "mariah@anagraph.com" - }, - { - "id": 2477, - "guid": "c332ab3a-8dc3-4092-9d53-257be2f500ab", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Wallace", - "company": "Generola", - "phone": "882-500-2955", - "email": "lily@generola.com" - }, - { - "id": 2478, - "guid": "605eb0fd-53b5-4313-a9d6-24245e9225fa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Abramson", - "company": "Tekcar", - "phone": "869-431-2857", - "email": "ashley@tekcar.com" - }, - { - "id": 2479, - "guid": "f9b4bdf1-2f0f-425f-af99-ffa9707d2000", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Gilson", - "company": "Compuamerica", - "phone": "854-416-2598", - "email": "maria@compuamerica.com" - }, - { - "id": 2480, - "guid": "86cef944-9a98-44c1-9bb2-4a0d091fffba", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kylie Chapman", - "company": "Steganoconiche", - "phone": "807-559-2159", - "email": "kylie@steganoconiche.com" - }, - { - "id": 2481, - "guid": "e602e3f6-619d-4acd-97f7-26c3905d4b6e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Miln", - "company": "Syssoft", - "phone": "804-533-2278", - "email": "maria@syssoft.com" - }, - { - "id": 2482, - "guid": "17a816f5-b229-4b90-a355-b13492cb2e5d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Bush", - "company": "Compuamerica", - "phone": "834-515-2278", - "email": "maya@compuamerica.com" - }, - { - "id": 2483, - "guid": "dffe0ec7-8d2c-4d88-b084-0fdb50b35e60", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sydney Cook", - "company": "SysUSA", - "phone": "843-582-2030", - "email": "sydney@sysusa.com" - }, - { - "id": 2484, - "guid": "f97a1ead-5789-4b7f-80f4-af5567ea64d9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Croftoon", - "company": "Openserve", - "phone": "817-474-2813", - "email": "eva@openserve.com" - }, - { - "id": 2485, - "guid": "53d6e041-0c91-4e4b-bc3b-543f6afb9a46", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Wallace", - "company": "SysVenamerica", - "phone": "888-514-3100", - "email": "makayla@sysvenamerica.com" - }, - { - "id": 2486, - "guid": "f16e4d70-ec15-46a5-bbcf-d460c1401a6a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Wood", - "company": "Proline", - "phone": "875-445-3886", - "email": "destiny@proline.com" - }, - { - "id": 2487, - "guid": "e638b849-fbea-40b4-b2ff-f89dcef2d8c5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Young", - "company": "iQualcar", - "phone": "813-412-3069", - "email": "victoria@iqualcar.com" - }, - { - "id": 2488, - "guid": "dd7454af-358f-4f44-b0bd-f0917feda2d9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Chapman", - "company": "Ameritron", - "phone": "819-479-2844", - "email": "kayla@ameritron.com" - }, - { - "id": 2489, - "guid": "acd979b2-182d-4030-8f96-9ac0d6241b2a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Neal", - "company": "Dynarama", - "phone": "887-537-3644", - "email": "molly@dynarama.com" - }, - { - "id": 2490, - "guid": "060e418b-98a2-4433-b543-384d6a178a92", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Timmons", - "company": "Polytheon", - "phone": "880-557-2912", - "email": "autumn@polytheon.com" - }, - { - "id": 2491, - "guid": "25866c8e-e9fe-4d3c-9aab-cee66c22f0f9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ava Chesterton", - "company": "Robocomm", - "phone": "820-489-3372", - "email": "ava@robocomm.com" - }, - { - "id": 2492, - "guid": "16cdf602-8e56-47b8-87a5-46e332700362", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Gilmore", - "company": "Turbomart", - "phone": "884-514-2641", - "email": "alexandra@turbomart.com" - }, - { - "id": 2493, - "guid": "653c3c2a-4411-470f-83b1-78e22f001eb9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Murphy", - "company": "Syssoft", - "phone": "820-493-3897", - "email": "ariana@syssoft.com" - }, - { - "id": 2494, - "guid": "47c9c9e3-efd4-4d4b-9a7a-1a4f68b4461b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Gustman", - "company": "Robocomm", - "phone": "807-481-2032", - "email": "kimberly@robocomm.com" - }, - { - "id": 2495, - "guid": "0c318c60-67f9-4ce2-9e97-9862088749a9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Creighton", - "company": "Keytheon", - "phone": "882-585-3354", - "email": "jocelyn@keytheon.com" - }, - { - "id": 2496, - "guid": "e729e3fc-cc4d-4ba9-9d5f-2a55e7c7eb2b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Watson", - "company": "Jamconik", - "phone": "856-564-2347", - "email": "evelyn@jamconik.com" - }, - { - "id": 2497, - "guid": "fcc87320-80ee-4df9-8001-376c06311ac0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Miers", - "company": "Videobanc", - "phone": "869-589-2403", - "email": "amelia@videobanc.com" - }, - { - "id": 2498, - "guid": "1156f112-cea4-4098-8044-7bbdab98ab7d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jasmine Chapman", - "company": "Systheon", - "phone": "872-517-3360", - "email": "jasmine@systheon.com" - }, - { - "id": 2499, - "guid": "b370ecea-7a21-4502-80d5-30df6a3f0e92", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Higgins", - "company": "Safeagra", - "phone": "853-435-3557", - "email": "brianna@safeagra.com" - }, - { - "id": 2500, - "guid": "8bce4c0e-b4a3-4cd1-afa5-da772fbbd078", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Gilson", - "company": "Navivacs", - "phone": "800-539-3597", - "email": "isabella@navivacs.com" - }, - { - "id": 2501, - "guid": "d1e8d0db-2ca9-4ae1-81e0-b983e5ecf54f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Osborne", - "company": "Proline", - "phone": "852-530-3863", - "email": "valeria@proline.com" - }, - { - "id": 2502, - "guid": "242538b2-2158-4664-a730-e753f1c1b94e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Bailey Morrison", - "company": "Robotomic", - "phone": "889-486-3768", - "email": "bailey@robotomic.com" - }, - { - "id": 2503, - "guid": "592609e4-041d-4fee-8348-9ab646732f12", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Ogden", - "company": "Rapigrafix", - "phone": "838-441-2143", - "email": "emily@rapigrafix.com" - }, - { - "id": 2504, - "guid": "0cd19076-b7ee-4d8c-849f-97da0274ebcf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Stanley", - "company": "Keytheon", - "phone": "896-443-2164", - "email": "gabriella@keytheon.com" - }, - { - "id": 2505, - "guid": "665f75b0-4957-40bf-a3cc-c83afc246b61", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Turner", - "company": "Unconix", - "phone": "836-493-3882", - "email": "emma@unconix.com" - }, - { - "id": 2506, - "guid": "cf1604e1-8b38-4821-8771-2837214e6889", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Oliver", - "company": "Cryptotegrity", - "phone": "812-600-3602", - "email": "nevaeh@cryptotegrity.com" - }, - { - "id": 2507, - "guid": "4351524e-cf2f-4b68-ad2e-9714ca52544c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Nathan", - "company": "eEyetanic", - "phone": "831-596-3357", - "email": "sophie@eeyetanic.com" - }, - { - "id": 2508, - "guid": "1adfde6f-48f7-4d74-b1de-46fec19371d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Thorndike", - "company": "Titanigraf", - "phone": "890-433-3289", - "email": "aaliyah@titanigraf.com" - }, - { - "id": 2509, - "guid": "65c04f93-20c5-41e9-abd4-9878b8ead6cd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Day", - "company": "Robotomic", - "phone": "857-545-2122", - "email": "gabriella@robotomic.com" - }, - { - "id": 2510, - "guid": "a6f7450a-f320-4dd9-bc9a-fea56064c088", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Cook", - "company": "Dynarama", - "phone": "832-402-2070", - "email": "rachel@dynarama.com" - }, - { - "id": 2511, - "guid": "a9111dc7-b299-4820-8df8-f07b7c093509", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Webster", - "company": "Steganoconiche", - "phone": "885-501-3385", - "email": "khloe@steganoconiche.com" - }, - { - "id": 2512, - "guid": "ade9d569-c62b-483c-910f-2ba8a8778236", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Charlson", - "company": "Hypervaco", - "phone": "833-578-3625", - "email": "sophia@hypervaco.com" - }, - { - "id": 2513, - "guid": "17f360f1-b038-4c73-8db1-7d923c8a8471", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Rachel Wayne", - "company": "Turbomart", - "phone": "897-584-2103", - "email": "rachel@turbomart.com" - }, - { - "id": 2514, - "guid": "3668d4a6-a930-4770-88ac-030331ed264c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Haig", - "company": "RoboAerlogix", - "phone": "809-538-2966", - "email": "sofia@roboaerlogix.com" - }, - { - "id": 2515, - "guid": "542e66bd-7e4c-4407-8eda-9ccc97a36010", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jocelyn Gate", - "company": "Rapigrafix", - "phone": "804-452-2960", - "email": "jocelyn@rapigrafix.com" - }, - { - "id": 2516, - "guid": "395794d6-9fba-4a3a-a9b4-4e187fc3251b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Gardner", - "company": "Fibroserve", - "phone": "831-595-2815", - "email": "payton@fibroserve.com" - }, - { - "id": 2517, - "guid": "63fd7a0f-28f4-4b46-a89b-e6ec5268694c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Vaughan", - "company": "Robotomic", - "phone": "815-525-2086", - "email": "madeline@robotomic.com" - }, - { - "id": 2518, - "guid": "e59e749b-22bc-483d-9516-bba34d500682", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexis Timmons", - "company": "Titanirola", - "phone": "829-465-3613", - "email": "alexis@titanirola.com" - }, - { - "id": 2519, - "guid": "d7f71658-c79d-4c4c-b1c3-8fd1f767003d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Wood", - "company": "Pacwest", - "phone": "834-489-3776", - "email": "kayla@pacwest.com" - }, - { - "id": 2520, - "guid": "98f4d7e4-da6c-4497-b5a0-3cbf661b5a26", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Wallace", - "company": "Infraique", - "phone": "872-420-3476", - "email": "kylie@infraique.com" - }, - { - "id": 2521, - "guid": "7d07de6f-f362-4a7a-8808-e4b0cd05a135", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Chapman", - "company": "Hypervaco", - "phone": "834-515-3536", - "email": "abigail@hypervaco.com" - }, - { - "id": 2522, - "guid": "8b1dbf1f-50e0-4187-b5d3-85ef79db7e84", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Evelyn Smith", - "company": "Truetomic", - "phone": "893-580-3995", - "email": "evelyn@truetomic.com" - }, - { - "id": 2523, - "guid": "7330a153-05d8-4aa7-a18d-8ea00e52c51a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Daniels", - "company": "Skydata", - "phone": "881-593-3252", - "email": "abigail@skydata.com" - }, - { - "id": 2524, - "guid": "caea4a57-7f0f-413e-8064-0662437a9512", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Bush", - "company": "Orthomedia", - "phone": "886-401-2021", - "email": "julia@orthomedia.com" - }, - { - "id": 2525, - "guid": "739cadb4-2847-4592-ac0d-933e94bf8a5d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Angelina Sherlock", - "company": "Westmedia", - "phone": "891-425-2207", - "email": "angelina@westmedia.com" - }, - { - "id": 2526, - "guid": "cc460dfe-7631-4a82-82b2-548317ef0341", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Thorndike", - "company": "Fibrotouch", - "phone": "889-506-2744", - "email": "valeria@fibrotouch.com" - }, - { - "id": 2527, - "guid": "53f82050-f7b5-45f5-8e7a-fce12298b901", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Ford", - "company": "Fibrotouch", - "phone": "830-547-3122", - "email": "jasmine@fibrotouch.com" - }, - { - "id": 2528, - "guid": "bc1a9df3-f14e-418b-8145-bbfc300d0ca2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hannah Gustman", - "company": "Skydata", - "phone": "869-573-3915", - "email": "hannah@skydata.com" - }, - { - "id": 2529, - "guid": "e4582447-c63f-401b-ab95-fd6c6245f032", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bella Nathan", - "company": "Titanirola", - "phone": "896-599-2312", - "email": "bella@titanirola.com" - }, - { - "id": 2530, - "guid": "7cea8673-4f37-48d0-8359-170e2eb306ad", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Galbraith", - "company": "Orthosoft", - "phone": "828-536-3747", - "email": "valeria@orthosoft.com" - }, - { - "id": 2531, - "guid": "c673912c-0814-4868-a902-8b54b3d05395", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Calhoun", - "company": "Quintegrity", - "phone": "817-451-2645", - "email": "camila@quintegrity.com" - }, - { - "id": 2532, - "guid": "328aaa90-e87f-48f6-a645-9b8d20aeceb6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Gilson", - "company": "Netsystems", - "phone": "827-527-3080", - "email": "valeria@netsystems.com" - }, - { - "id": 2533, - "guid": "87126585-648b-4a46-bb24-2adc8ee93504", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Brown", - "company": "Jamconik", - "phone": "868-547-2111", - "email": "kimberly@jamconik.com" - }, - { - "id": 2534, - "guid": "bc7f83f9-16a2-4c58-a398-56797c25a9cf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Abigail Wainwright", - "company": "Multitiqua", - "phone": "897-491-3536", - "email": "abigail@multitiqua.com" - }, - { - "id": 2535, - "guid": "5ddbf749-a9e3-481c-93b7-83d8d0d32215", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Carroll", - "company": "Qualserve", - "phone": "804-491-2690", - "email": "payton@qualserve.com" - }, - { - "id": 2536, - "guid": "d22fc991-115e-4131-bd51-617dda4fdcf0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Hancock", - "company": "Systheon", - "phone": "888-568-2106", - "email": "paige@systheon.com" - }, - { - "id": 2537, - "guid": "9b6030a8-795a-4981-b795-034d14a77102", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Neal", - "company": "Inridium", - "phone": "874-538-2022", - "email": "addison@inridium.com" - }, - { - "id": 2538, - "guid": "94de97c0-e4fb-4d6f-ad9b-195d1c477cd3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Vance", - "company": "Allphysiche", - "phone": "804-536-3707", - "email": "alexis@allphysiche.com" - }, - { - "id": 2539, - "guid": "46fdaceb-093a-4295-ac37-43fc91656d11", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Gill", - "company": "Systheon", - "phone": "852-559-2178", - "email": "maria@systheon.com" - }, - { - "id": 2540, - "guid": "d6fcb301-fbf8-4caf-a384-579f79c31875", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabriella Hamphrey", - "company": "Anaframe", - "phone": "830-462-2705", - "email": "gabriella@anaframe.com" - }, - { - "id": 2541, - "guid": "64d30d43-7084-4535-8a9b-cb73339e4110", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Nelson", - "company": "eSteganoergy", - "phone": "814-515-2954", - "email": "hannah@esteganoergy.com" - }, - { - "id": 2542, - "guid": "6aec2f46-f0ef-4dbd-9773-5f0017313fde", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Wayne", - "company": "Mescatron", - "phone": "846-489-3240", - "email": "katherine@mescatron.com" - }, - { - "id": 2543, - "guid": "1af776d7-2a38-483d-b9ab-c96dbf34fbe7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Calhoun", - "company": "Steganoconiche", - "phone": "875-585-3308", - "email": "faith@steganoconiche.com" - }, - { - "id": 2544, - "guid": "a08b888d-5e92-4948-8bd0-71661d09becf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Sheldon", - "company": "Thermotomic", - "phone": "888-531-2611", - "email": "katherine@thermotomic.com" - }, - { - "id": 2545, - "guid": "e165e613-a532-4732-a57d-d4adff1f7f51", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Fisher", - "company": "Indisco", - "phone": "887-598-2535", - "email": "genesis@indisco.com" - }, - { - "id": 2546, - "guid": "2da4b9d7-1a23-4eb5-8747-c694307b23c8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Miers", - "company": "Titanirola", - "phone": "857-401-3661", - "email": "claire@titanirola.com" - }, - { - "id": 2547, - "guid": "ef905606-6ad1-47ba-a5fb-7fccf4fad4aa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Waller", - "company": "Cryptotegrity", - "phone": "885-571-3678", - "email": "isabella@cryptotegrity.com" - }, - { - "id": 2548, - "guid": "d59dc0a5-de1e-46ad-8bd4-65175af4995d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Walkman", - "company": "iSkyvaco", - "phone": "885-522-2424", - "email": "sophia@iskyvaco.com" - }, - { - "id": 2549, - "guid": "c29b9d5a-f700-4818-8dbd-ee7bfc72c40d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Cook", - "company": "Interliant", - "phone": "896-486-2837", - "email": "madeline@interliant.com" - }, - { - "id": 2550, - "guid": "4fc1d6c3-cb4e-4fe5-a9d8-56d46e21e6ae", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Milton", - "company": "Hypervaco", - "phone": "808-516-3214", - "email": "kaitlyn@hypervaco.com" - }, - { - "id": 2551, - "guid": "6331d2f3-998e-4032-85e3-6a1961c63d5a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Angelina Oswald", - "company": "Skydata", - "phone": "838-563-2767", - "email": "angelina@skydata.com" - }, - { - "id": 2552, - "guid": "1af08bcd-03cc-4f5a-8d1d-77eb03f8d2b2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Waller", - "company": "Inridium", - "phone": "830-545-2885", - "email": "destiny@inridium.com" - }, - { - "id": 2553, - "guid": "a7ced112-f85e-467a-b532-1ed19419bfe4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Neal", - "company": "iMedconik", - "phone": "842-486-2629", - "email": "nevaeh@imedconik.com" - }, - { - "id": 2554, - "guid": "be0c4a92-3318-47b4-838a-1d86d029cc27", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Webster", - "company": "Robotemplate", - "phone": "825-580-2704", - "email": "hannah@robotemplate.com" - }, - { - "id": 2555, - "guid": "2160190b-f614-45f8-953e-6729b50c3308", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Hancock", - "company": "Robotemplate", - "phone": "802-512-2525", - "email": "vanessa@robotemplate.com" - }, - { - "id": 2556, - "guid": "b1652c0a-cc14-47b9-9cc8-d94f8bfb9d7a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Savannah Ogden", - "company": "Proline", - "phone": "803-574-3981", - "email": "savannah@proline.com" - }, - { - "id": 2557, - "guid": "720ad1be-d691-46e3-8824-fb2f635cc445", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mya Neal", - "company": "Mescatron", - "phone": "804-442-2922", - "email": "mya@mescatron.com" - }, - { - "id": 2558, - "guid": "70c01ce6-9463-4e36-b1c5-24cc36c54135", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Vance", - "company": "Aprama", - "phone": "816-480-2068", - "email": "gabrielle@aprama.com" - }, - { - "id": 2559, - "guid": "6e7c60e5-174a-499d-8bff-45b2b13a98b9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Wallace", - "company": "OpKeycomm", - "phone": "818-557-2582", - "email": "mia@opkeycomm.com" - }, - { - "id": 2560, - "guid": "58421683-f880-4b37-81c6-ebff776c58c1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Chapman", - "company": "Transtouch", - "phone": "867-599-2790", - "email": "jocelyn@transtouch.com" - }, - { - "id": 2561, - "guid": "99debcc6-72e2-4218-956a-c60711610c8e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Hodges", - "company": "Truetomic", - "phone": "850-490-3864", - "email": "genesis@truetomic.com" - }, - { - "id": 2562, - "guid": "d187a8de-1b36-4518-80b6-25004e8f16e6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Haig", - "company": "Gigaura", - "phone": "887-542-3463", - "email": "jessica@gigaura.com" - }, - { - "id": 2563, - "guid": "41f21ec5-3b2d-4f88-a87b-4bee31596203", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Abramson", - "company": "Genland", - "phone": "811-527-3245", - "email": "maria@genland.com" - }, - { - "id": 2564, - "guid": "5e511e76-75f9-41d1-a647-0ac73784eee1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Hailey", - "company": "Orthomedia", - "phone": "829-514-3640", - "email": "leah@orthomedia.com" - }, - { - "id": 2565, - "guid": "7c91dc8f-e353-4354-8adc-03c2df6be835", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Davidson", - "company": "Navivacs", - "phone": "889-484-2505", - "email": "avery@navivacs.com" - }, - { - "id": 2566, - "guid": "3ca48f5d-7eb1-41c3-a3e6-665fc0f8f74e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Brown", - "company": "OpKeycomm", - "phone": "815-599-3205", - "email": "faith@opkeycomm.com" - }, - { - "id": 2567, - "guid": "2bd9b799-22f6-4f6a-86f8-ed92a9ba0888", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Ogden", - "company": "Vencom", - "phone": "861-510-2818", - "email": "caroline@vencom.com" - }, - { - "id": 2568, - "guid": "c7569951-4d9d-4ee6-8565-5c1738c3e6f9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Gilbert", - "company": "OpKeycomm", - "phone": "800-431-3493", - "email": "destiny@opkeycomm.com" - }, - { - "id": 2569, - "guid": "f564163b-69e1-4506-81d7-256760fcf5d7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Michaelson", - "company": "iMedconik", - "phone": "852-510-3911", - "email": "jessica@imedconik.com" - }, - { - "id": 2570, - "guid": "71821a18-18cd-4bf1-bd97-92c5753fe993", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Smith", - "company": "Qualserve", - "phone": "817-411-2988", - "email": "victoria@qualserve.com" - }, - { - "id": 2571, - "guid": "26725287-7405-4398-9118-824ab57e55a4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Gardner", - "company": "Vencom", - "phone": "871-435-3647", - "email": "hannah@vencom.com" - }, - { - "id": 2572, - "guid": "6e9358df-11fa-4228-8378-fd3cdae9196f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Webster", - "company": "Indisco", - "phone": "801-423-3335", - "email": "caroline@indisco.com" - }, - { - "id": 2573, - "guid": "5770974d-67de-42d9-b9f5-b8e24ea4b2df", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Chandter", - "company": "Westgate", - "phone": "873-545-3876", - "email": "caroline@westgate.com" - }, - { - "id": 2574, - "guid": "9198d083-bbd4-46e1-aa27-5d658779b89b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Adamson", - "company": "US Omnigraphik", - "phone": "883-552-2373", - "email": "rachel@us omnigraphik.com" - }, - { - "id": 2575, - "guid": "4ce04835-9e66-40a8-9b10-af28ef52609e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Abramson", - "company": "Unologic", - "phone": "864-457-2269", - "email": "alyssa@unologic.com" - }, - { - "id": 2576, - "guid": "3d107ae5-0e5e-41b9-9d78-b33705fe87df", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Gilmore", - "company": "Genland", - "phone": "823-537-2977", - "email": "peyton@genland.com" - }, - { - "id": 2577, - "guid": "ee738ecd-0119-4ecf-8ffe-21e6261ca87f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Wainwright", - "company": "Pericenta", - "phone": "846-587-3272", - "email": "arianna@pericenta.com" - }, - { - "id": 2578, - "guid": "9040f92b-6b23-4905-a550-d3d2f743b677", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Gibbs", - "company": "Syssoft", - "phone": "804-579-2510", - "email": "alexa@syssoft.com" - }, - { - "id": 2579, - "guid": "f6a229b9-61b5-466d-8dda-bb21cdf233f7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Oliver", - "company": "Gigaura", - "phone": "802-589-3602", - "email": "layla@gigaura.com" - }, - { - "id": 2580, - "guid": "f0716d94-6843-4e7b-a428-34803c6d3be8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Neal", - "company": "Dynarama", - "phone": "898-448-2236", - "email": "kimberly@dynarama.com" - }, - { - "id": 2581, - "guid": "425a7784-e07b-4d08-be0c-b06452de4417", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Brickman", - "company": "Rapigrafix", - "phone": "838-435-3050", - "email": "brooke@rapigrafix.com" - }, - { - "id": 2582, - "guid": "0a175b62-d08f-43c4-bce2-67130adcf378", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Goodman", - "company": "Compuamerica", - "phone": "873-488-2328", - "email": "brooke@compuamerica.com" - }, - { - "id": 2583, - "guid": "d2d7c90d-5124-45b3-9c3d-71d9ef26b9c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooklyn Clapton", - "company": "Dynarama", - "phone": "842-421-3700", - "email": "brooklyn@dynarama.com" - }, - { - "id": 2584, - "guid": "2c652f7e-9a28-4b8e-8fd2-e03a2cc4f6c0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Morgan Haig", - "company": "Compuamerica", - "phone": "839-546-3009", - "email": "morgan@compuamerica.com" - }, - { - "id": 2585, - "guid": "9c271e6b-768a-4210-863a-550ff021d486", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Winter", - "company": "Proline", - "phone": "856-533-3316", - "email": "camila@proline.com" - }, - { - "id": 2586, - "guid": "4c3f1b8e-f8ce-4977-a968-0f856a320093", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Thomson", - "company": "Jamconik", - "phone": "802-549-3985", - "email": "hannah@jamconik.com" - }, - { - "id": 2587, - "guid": "2d2f088b-1e49-47a1-b779-dc63a006a267", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Milton", - "company": "Pericenta", - "phone": "856-489-2973", - "email": "bailey@pericenta.com" - }, - { - "id": 2588, - "guid": "9fba828d-ce02-4ba2-a75d-d6103535c52e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Sherlock", - "company": "Teraserv", - "phone": "802-510-2497", - "email": "brianna@teraserv.com" - }, - { - "id": 2589, - "guid": "6755f4d8-8a86-48ce-9904-f8b81ce2f4b3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Morrison", - "company": "Rapigrafix", - "phone": "817-438-3866", - "email": "amelia@rapigrafix.com" - }, - { - "id": 2590, - "guid": "3c80081d-f8a5-4189-a008-420858e49254", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Stanley", - "company": "Pericenta", - "phone": "888-419-3513", - "email": "avery@pericenta.com" - }, - { - "id": 2591, - "guid": "b522a0a8-c96d-46df-9d17-55a36e272057", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Charlson", - "company": "Teknoplexon", - "phone": "897-423-3912", - "email": "kylie@teknoplexon.com" - }, - { - "id": 2592, - "guid": "c8285785-9972-4c65-8688-d02719b3e28e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Cook", - "company": "Robotemplate", - "phone": "839-451-2030", - "email": "emma@robotemplate.com" - }, - { - "id": 2593, - "guid": "59e59bcf-8a97-4578-a55a-43b47476a18a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Milton", - "company": "SysUSA", - "phone": "806-412-3080", - "email": "aubrey@sysusa.com" - }, - { - "id": 2594, - "guid": "18fb05c5-57cb-44fa-8d64-e5b04499f361", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaylee Creighton", - "company": "Celgra", - "phone": "877-569-3961", - "email": "kaylee@celgra.com" - }, - { - "id": 2595, - "guid": "d584ee52-5faa-4a80-997b-2f5af9046684", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Nelson", - "company": "Sontopia", - "phone": "807-559-2046", - "email": "lily@sontopia.com" - }, - { - "id": 2596, - "guid": "d6045f0c-00c7-4768-8221-fb8fc7b4f1db", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Nelson", - "company": "Inridium", - "phone": "891-457-3190", - "email": "bailey@inridium.com" - }, - { - "id": 2597, - "guid": "7274856d-22ec-4540-ae66-acf8d1767f7a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Hoggarth", - "company": "US Omnigraphik", - "phone": "829-406-2215", - "email": "sophie@us omnigraphik.com" - }, - { - "id": 2598, - "guid": "fff35c90-6a58-4271-b65b-d565afbd15e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Campbell", - "company": "Teratopia", - "phone": "866-585-2905", - "email": "ava@teratopia.com" - }, - { - "id": 2599, - "guid": "4a488265-3152-4e15-9dfd-2aa75ce26b94", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Carter", - "company": "Conotomics", - "phone": "872-464-2435", - "email": "kaitlyn@conotomics.com" - }, - { - "id": 2600, - "guid": "59922a7b-35f2-4f67-bd12-a4c6a3bd7924", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Davidson", - "company": "Indisco", - "phone": "808-447-3688", - "email": "jocelyn@indisco.com" - }, - { - "id": 2601, - "guid": "45ffcd54-4d38-4580-b305-0c03ea01e600", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Carrington", - "company": "Interliant", - "phone": "854-582-3476", - "email": "faith@interliant.com" - }, - { - "id": 2602, - "guid": "33a3721d-061b-4bac-a2c3-73a3132b7703", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Oliver", - "company": "US Infratouch", - "phone": "858-596-3535", - "email": "angelina@us infratouch.com" - }, - { - "id": 2603, - "guid": "d059d0fd-211f-4265-a5c7-97604afdf861", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Brickman", - "company": "Indisco", - "phone": "854-522-3780", - "email": "madison@indisco.com" - }, - { - "id": 2604, - "guid": "5fcef885-68b3-4578-85ba-58075ccb25ef", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Cook", - "company": "Openserve", - "phone": "896-412-3903", - "email": "genesis@openserve.com" - }, - { - "id": 2605, - "guid": "1d6e0026-a8c5-4493-b3c7-1e3f6923362d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emily Hawkins", - "company": "Netsystems", - "phone": "873-410-3541", - "email": "emily@netsystems.com" - }, - { - "id": 2606, - "guid": "34ed7535-065c-4d57-8d84-a6daf78ce1ef", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Hodges", - "company": "Fibrotopia", - "phone": "846-411-3358", - "email": "samantha@fibrotopia.com" - }, - { - "id": 2607, - "guid": "5d28ee31-167f-4509-94cd-8b7b2aa3b43f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Gardner", - "company": "Orthomedia", - "phone": "842-543-2622", - "email": "isabelle@orthomedia.com" - }, - { - "id": 2608, - "guid": "156a8f8a-bc61-4142-bea5-4a9789fe0659", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Oswald", - "company": "Polytheon", - "phone": "896-551-3301", - "email": "layla@polytheon.com" - }, - { - "id": 2609, - "guid": "5a3ab7f7-21a4-492e-ba9c-572c1d18a96d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Hawkins", - "company": "Enlogia", - "phone": "853-439-2429", - "email": "isabelle@enlogia.com" - }, - { - "id": 2610, - "guid": "278d312c-6a95-44fb-9c79-49c55b5b39ba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Bush", - "company": "Polytheon", - "phone": "872-595-3094", - "email": "aubrey@polytheon.com" - }, - { - "id": 2611, - "guid": "f8670c9c-c7f0-40fd-8b41-0bddfe75c523", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Sherlock", - "company": "Anaframe", - "phone": "802-524-2586", - "email": "amelia@anaframe.com" - }, - { - "id": 2612, - "guid": "07bfbe01-a213-4b25-9989-540a189e6018", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Walkman", - "company": "Robotomic", - "phone": "855-442-3646", - "email": "natalie@robotomic.com" - }, - { - "id": 2613, - "guid": "14fc5668-a9a3-4038-b674-268e7966d70e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Carter", - "company": "Systheon", - "phone": "828-481-2526", - "email": "olivia@systheon.com" - }, - { - "id": 2614, - "guid": "b66ceadc-6314-4a2c-9b74-501da41ad0c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Paige WifKinson", - "company": "InfoAirway", - "phone": "833-514-2096", - "email": "paige@infoairway.com" - }, - { - "id": 2615, - "guid": "290da717-e3d1-4628-b97b-aa186a6b991b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Wainwright", - "company": "iMedconik", - "phone": "898-567-2755", - "email": "anna@imedconik.com" - }, - { - "id": 2616, - "guid": "72a29cc5-3921-45e2-a8a7-6214aaa1d0b8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Nash", - "company": "Airdyne", - "phone": "863-439-2077", - "email": "mariah@airdyne.com" - }, - { - "id": 2617, - "guid": "f95e3fab-2686-4b74-8703-e9f0bf2c3d4b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Hodges", - "company": "Videobanc", - "phone": "841-405-3290", - "email": "evelyn@videobanc.com" - }, - { - "id": 2618, - "guid": "93036dfb-2bf1-4bca-a17f-46b889dc4dd7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Warren", - "company": "Celgra", - "phone": "825-540-2724", - "email": "arianna@celgra.com" - }, - { - "id": 2619, - "guid": "f7bf2696-4a8e-4707-a201-c0678d341b28", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Crossman", - "company": "Jamrola", - "phone": "889-459-3812", - "email": "hailey@jamrola.com" - }, - { - "id": 2620, - "guid": "892a7b12-c1e7-45f5-b835-fa0724a8d5cb", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophie Hodges", - "company": "Pacwest", - "phone": "829-490-2524", - "email": "sophie@pacwest.com" - }, - { - "id": 2621, - "guid": "d2c085ea-c9ef-49b0-8e84-cbd77a21f5f4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Youmans", - "company": "Netseco", - "phone": "823-430-3908", - "email": "valeria@netseco.com" - }, - { - "id": 2622, - "guid": "7b8e076f-2ae3-494d-b7fc-035ac4d26447", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Sherlock", - "company": "Westtomik", - "phone": "839-489-2787", - "email": "natalie@westtomik.com" - }, - { - "id": 2623, - "guid": "d7938c73-70fe-49db-81d7-e0112efe5b90", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Wayne", - "company": "eSteganoergy", - "phone": "817-423-2765", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 2624, - "guid": "d047d0d5-f290-403f-98f1-e7c2fbf7ffc1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Adamson", - "company": "Fibrotopia", - "phone": "814-474-2486", - "email": "kaitlyn@fibrotopia.com" - }, - { - "id": 2625, - "guid": "00d60494-d7d5-433f-a357-0418b72170aa", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Milton", - "company": "Steganoconiche", - "phone": "836-582-2448", - "email": "kayla@steganoconiche.com" - }, - { - "id": 2626, - "guid": "1ad5c553-a5c1-476f-9868-343da71888f9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Crossman", - "company": "Pacwest", - "phone": "874-519-2379", - "email": "genesis@pacwest.com" - }, - { - "id": 2627, - "guid": "56157575-30fb-4441-a451-52572d1fb16d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Cramer", - "company": "Celgra", - "phone": "804-556-2052", - "email": "makayla@celgra.com" - }, - { - "id": 2628, - "guid": "b2f87b2b-8d64-4d47-9d1f-262f0b5c1aed", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily WifKinson", - "company": "Orthosoft", - "phone": "884-527-3944", - "email": "emily@orthosoft.com" - }, - { - "id": 2629, - "guid": "e8bd9b99-0acc-4e0a-9a47-b52b19502605", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Fulton", - "company": "Videobanc", - "phone": "824-434-2420", - "email": "mackenzie@videobanc.com" - }, - { - "id": 2630, - "guid": "a28347a6-0a56-4bbb-b336-b3b51ff030f1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Gardner", - "company": "Qualserve", - "phone": "884-476-3270", - "email": "aubrey@qualserve.com" - }, - { - "id": 2631, - "guid": "861a6d06-afb1-41a5-85c8-3d1d03d1636c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Fulton", - "company": "Titanigraf", - "phone": "822-416-2889", - "email": "zoey@titanigraf.com" - }, - { - "id": 2632, - "guid": "9523118b-f6ec-4f4f-afe2-2fab74a6ac88", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Riley Oliver", - "company": "Robocomm", - "phone": "892-576-2884", - "email": "riley@robocomm.com" - }, - { - "id": 2633, - "guid": "bf292b85-8c98-465f-9c9d-e73b19564d75", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Samantha Timmons", - "company": "Teratopia", - "phone": "816-580-2704", - "email": "samantha@teratopia.com" - }, - { - "id": 2634, - "guid": "674ed65d-5e67-4868-8b36-a899241385e6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Molligan", - "company": "Cryptotegrity", - "phone": "870-456-2944", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 2635, - "guid": "aace9160-9524-4e17-89ee-68d0bd2c14c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Wayne", - "company": "Cryptotegrity", - "phone": "865-549-2863", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 2636, - "guid": "40c51cc0-d2d4-4c38-9c76-e5a55bb7d5fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Wainwright", - "company": "Netseco", - "phone": "875-470-3675", - "email": "olivia@netseco.com" - }, - { - "id": 2637, - "guid": "6d4a17a0-6b42-4206-bf1e-ba9fdd4d92ea", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Vaughan", - "company": "Netseco", - "phone": "868-441-2324", - "email": "kylie@netseco.com" - }, - { - "id": 2638, - "guid": "807f7911-b06e-4921-adf3-86ff378fa8d9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Wesley", - "company": "eEyetanic", - "phone": "887-566-3812", - "email": "bailey@eeyetanic.com" - }, - { - "id": 2639, - "guid": "6893cf4c-cded-4457-b565-1bc178e51b12", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Davidson", - "company": "Tekcar", - "phone": "813-477-2966", - "email": "gabrielle@tekcar.com" - }, - { - "id": 2640, - "guid": "01d357d2-7262-40d4-bbad-305941ea71be", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Sheldon", - "company": "Steganoconiche", - "phone": "883-547-3701", - "email": "layla@steganoconiche.com" - }, - { - "id": 2641, - "guid": "bf955a21-7f3e-4a98-9c9d-b5babc3dd430", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Gilbert", - "company": "Rapigrafix", - "phone": "859-517-2204", - "email": "kimberly@rapigrafix.com" - }, - { - "id": 2642, - "guid": "a70087b8-6b56-4aad-8bb4-1d6c368c1506", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Creighton", - "company": "Xeicon", - "phone": "837-458-2103", - "email": "ashley@xeicon.com" - }, - { - "id": 2643, - "guid": "222d8fa6-aba9-4d2d-a171-9bc85ecc8830", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Chandter", - "company": "Anagraph", - "phone": "863-419-2098", - "email": "makayla@anagraph.com" - }, - { - "id": 2644, - "guid": "a8760a81-672b-4f15-a937-d5afb31b118f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexa Youmans", - "company": "Keytheon", - "phone": "851-408-2207", - "email": "alexa@keytheon.com" - }, - { - "id": 2645, - "guid": "08054aec-e453-4329-8da5-0dc97112ea46", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Waller", - "company": "Interliant", - "phone": "883-496-2780", - "email": "natalie@interliant.com" - }, - { - "id": 2646, - "guid": "66ddee37-cdce-4664-bc00-0e36140e731e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Warren", - "company": "Tekcar", - "phone": "896-468-3648", - "email": "camila@tekcar.com" - }, - { - "id": 2647, - "guid": "6da02aea-3ecb-4afd-9f86-fe3d1e6ae9e0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Carey", - "company": "Netsystems", - "phone": "831-511-3668", - "email": "khloe@netsystems.com" - }, - { - "id": 2648, - "guid": "3826bf5d-591f-447c-9a32-cd7ae2b4d40f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie WifKinson", - "company": "Proline", - "phone": "821-518-2833", - "email": "sophie@proline.com" - }, - { - "id": 2649, - "guid": "e8c4cc7c-656a-433b-a438-2f1171e390d3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Gilbert", - "company": "Pericenta", - "phone": "877-518-2390", - "email": "sarah@pericenta.com" - }, - { - "id": 2650, - "guid": "21832d1a-fb44-4d1f-9059-3a337a05475a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Carey", - "company": "Entcast", - "phone": "838-501-2118", - "email": "claire@entcast.com" - }, - { - "id": 2651, - "guid": "94555d2f-c207-4c91-b53a-e05d498c46f4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Young", - "company": "Keytheon", - "phone": "882-500-2022", - "email": "alyssa@keytheon.com" - }, - { - "id": 2652, - "guid": "4aa31776-b0c1-4c2f-a3ae-17599c810148", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Milton", - "company": "Teratopia", - "phone": "874-583-3334", - "email": "emily@teratopia.com" - }, - { - "id": 2653, - "guid": "d5c616b3-414a-4223-9613-791f10640832", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Gilmore", - "company": "Teknoplexon", - "phone": "890-540-2393", - "email": "nevaeh@teknoplexon.com" - }, - { - "id": 2654, - "guid": "9c3d2622-22ed-4145-80a1-5c4e0e4e6d69", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Carter", - "company": "eSteganoergy", - "phone": "890-579-3731", - "email": "brooke@esteganoergy.com" - }, - { - "id": 2655, - "guid": "4258952f-fca9-40b4-ad3a-3be40502c1af", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Ogden", - "company": "Indisco", - "phone": "891-426-2235", - "email": "madelyn@indisco.com" - }, - { - "id": 2656, - "guid": "9f814873-fb25-4b52-b484-942e38418111", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Neal", - "company": "Hypervaco", - "phone": "807-408-2429", - "email": "bella@hypervaco.com" - }, - { - "id": 2657, - "guid": "fa7a52cc-5c04-44d7-8b48-c0f262577244", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Watson", - "company": "Indisco", - "phone": "890-426-2838", - "email": "kaitlyn@indisco.com" - }, - { - "id": 2658, - "guid": "b8611947-53ff-4add-8759-b552ba5c2c3c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Thomson", - "company": "Titanigraf", - "phone": "862-484-2829", - "email": "anna@titanigraf.com" - }, - { - "id": 2659, - "guid": "cea2f1bc-5482-4539-8694-72ddb397c2a5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Charlson", - "company": "Netseco", - "phone": "807-579-2260", - "email": "alexa@netseco.com" - }, - { - "id": 2660, - "guid": "0d3cf692-29c5-4bb9-9d81-9bbe362db440", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Waller", - "company": "Robotomic", - "phone": "813-439-3743", - "email": "kayla@robotomic.com" - }, - { - "id": 2661, - "guid": "d7ec4df0-0b38-45cb-b376-d02fea1cf731", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Creighton", - "company": "Polytheon", - "phone": "845-572-3396", - "email": "riley@polytheon.com" - }, - { - "id": 2662, - "guid": "09c8ffd7-94b8-4aec-9994-7fe73649bae4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Payton Oliver", - "company": "Qualserve", - "phone": "822-451-2607", - "email": "payton@qualserve.com" - }, - { - "id": 2663, - "guid": "ad944af2-1ba6-4e45-af23-7437fbf5249c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Murphy", - "company": "Proline", - "phone": "808-533-2089", - "email": "bella@proline.com" - }, - { - "id": 2664, - "guid": "dddc34ea-6f65-4cd1-8c6b-a712f8539ca3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoe Wayne", - "company": "Truetomic", - "phone": "882-522-3053", - "email": "zoe@truetomic.com" - }, - { - "id": 2665, - "guid": "1b4938a4-ce07-4ceb-8869-462a43a28889", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Chapman", - "company": "OpKeycomm", - "phone": "874-587-3871", - "email": "morgan@opkeycomm.com" - }, - { - "id": 2666, - "guid": "68e73fa0-1973-46eb-b6c6-5537b795fb36", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Wesley", - "company": "Gigaura", - "phone": "889-510-2862", - "email": "emma@gigaura.com" - }, - { - "id": 2667, - "guid": "c4ea0560-4ecf-4b8c-a383-61237e502591", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Vance", - "company": "Technogra", - "phone": "880-529-2220", - "email": "destiny@technogra.com" - }, - { - "id": 2668, - "guid": "22929a06-a05e-42e8-904b-11e7871f4683", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Webster", - "company": "Anaframe", - "phone": "831-422-3091", - "email": "maria@anaframe.com" - }, - { - "id": 2669, - "guid": "27bdaacf-b519-4454-bafe-c2193d30ae4b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabelle Stanley", - "company": "Robocomm", - "phone": "857-409-2358", - "email": "isabelle@robocomm.com" - }, - { - "id": 2670, - "guid": "7c8019fd-df70-4168-826d-0f685003acf1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Vance", - "company": "Dynarama", - "phone": "851-413-3888", - "email": "katherine@dynarama.com" - }, - { - "id": 2671, - "guid": "3c94cb39-2e4b-4e30-9738-f46f2f0cd833", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Miller", - "company": "Polytheon", - "phone": "831-416-2886", - "email": "autumn@polytheon.com" - }, - { - "id": 2672, - "guid": "b33703ce-452a-474c-845a-bf4a4371521e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Carroll", - "company": "Syssoft", - "phone": "838-412-3451", - "email": "sofia@syssoft.com" - }, - { - "id": 2673, - "guid": "ced3f6cb-a942-4775-99eb-0974ccc3ac10", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Neal", - "company": "US Infratouch", - "phone": "812-515-3179", - "email": "alexandra@us infratouch.com" - }, - { - "id": 2674, - "guid": "f8bb96d0-4982-4156-aa6e-9295f07f5d70", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooke Otis", - "company": "eEyetanic", - "phone": "864-550-3676", - "email": "brooke@eeyetanic.com" - }, - { - "id": 2675, - "guid": "eb87b954-edaa-4eb0-80f1-93a431af59e9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Charlson", - "company": "Superscope", - "phone": "860-581-2247", - "email": "zoey@superscope.com" - }, - { - "id": 2676, - "guid": "26d6f44d-a575-4b43-b896-e8be2c9fa9ee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Wallace", - "company": "Truegate", - "phone": "837-539-3478", - "email": "eva@truegate.com" - }, - { - "id": 2677, - "guid": "51d5262a-e008-4c67-b226-6aead6fccde0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Morgan Cramer", - "company": "Cryptotegrity", - "phone": "898-416-2490", - "email": "morgan@cryptotegrity.com" - }, - { - "id": 2678, - "guid": "2994fb3b-8070-4c68-83bf-af8917280e08", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Hoggarth", - "company": "Allnet", - "phone": "890-432-3550", - "email": "mia@allnet.com" - }, - { - "id": 2679, - "guid": "66e6e4e8-2a23-43c8-8556-dbf03712f031", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Miller", - "company": "Robotomic", - "phone": "866-407-2288", - "email": "brooklyn@robotomic.com" - }, - { - "id": 2680, - "guid": "a5d735c2-5732-4dea-b2e4-80681bb07de8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Hoggarth", - "company": "Netseco", - "phone": "887-583-3653", - "email": "jessica@netseco.com" - }, - { - "id": 2681, - "guid": "d9bf5548-a008-4e18-91b4-008e3be02a26", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kylie Hodges", - "company": "Pericenta", - "phone": "887-576-3088", - "email": "kylie@pericenta.com" - }, - { - "id": 2682, - "guid": "7e527efb-6dd0-4d37-b5f1-eecb23557c6b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Thorndike", - "company": "Inridium", - "phone": "896-500-3604", - "email": "samantha@inridium.com" - }, - { - "id": 2683, - "guid": "c63b064f-6427-409a-a1b4-f8e0be3edd97", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Vaughan", - "company": "Steganoconiche", - "phone": "885-566-2461", - "email": "riley@steganoconiche.com" - }, - { - "id": 2684, - "guid": "dcf896b1-38a6-4371-83f1-40b8cccae34b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Hamphrey", - "company": "Raylog", - "phone": "848-586-2557", - "email": "julia@raylog.com" - }, - { - "id": 2685, - "guid": "0d2967d5-2526-48a0-a545-c87979581602", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Ford", - "company": "SysUSA", - "phone": "809-407-3945", - "email": "julia@sysusa.com" - }, - { - "id": 2686, - "guid": "3bab2d94-7be3-4243-9904-902ee4bbef00", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Hoggarth", - "company": "Jamconik", - "phone": "823-589-2920", - "email": "katherine@jamconik.com" - }, - { - "id": 2687, - "guid": "a889c140-2a57-4825-ba89-90727831cee3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Brickman", - "company": "Genland", - "phone": "871-434-2370", - "email": "makayla@genland.com" - }, - { - "id": 2688, - "guid": "41be4d36-b61d-4fef-b535-5cfa03cb624b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Oswald", - "company": "Textiqua", - "phone": "844-411-3831", - "email": "mya@textiqua.com" - }, - { - "id": 2689, - "guid": "e28f03f4-7e1d-4180-b91f-cf1612ab0480", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Thornton", - "company": "iSkyvaco", - "phone": "865-473-2239", - "email": "maya@iskyvaco.com" - }, - { - "id": 2690, - "guid": "a9e8f399-06c7-4222-94dd-d1ced519587e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Carrington", - "company": "Mescatron", - "phone": "859-471-2905", - "email": "camila@mescatron.com" - }, - { - "id": 2691, - "guid": "33ee96c8-1ac0-4385-a1fe-b320ad33ecfd", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Vaughan", - "company": "Fibrotopia", - "phone": "841-552-3565", - "email": "emma@fibrotopia.com" - }, - { - "id": 2692, - "guid": "310c4275-9a9a-4ce6-bebc-52eb1f56bf95", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Higgins", - "company": "Celgra", - "phone": "830-520-3743", - "email": "leah@celgra.com" - }, - { - "id": 2693, - "guid": "85f888a8-4c97-4e8d-afed-a5de5d9f6295", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Carter", - "company": "Venconix", - "phone": "857-401-3860", - "email": "ariana@venconix.com" - }, - { - "id": 2694, - "guid": "ebff7c68-20b2-463b-83a3-ad65e14fb29a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Milton", - "company": "Superscope", - "phone": "830-486-3893", - "email": "sophie@superscope.com" - }, - { - "id": 2695, - "guid": "cc578052-8816-46b7-ae85-5cf033c1a16b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Gilson", - "company": "Anagraph", - "phone": "890-572-2067", - "email": "paige@anagraph.com" - }, - { - "id": 2696, - "guid": "3cd6732e-2503-4ece-948f-f86ca6331ef1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alyssa Wallace", - "company": "Inridium", - "phone": "894-587-3386", - "email": "alyssa@inridium.com" - }, - { - "id": 2697, - "guid": "13e756c3-c2fd-47e0-b3f0-4ee8e8b14afd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Hawkins", - "company": "Xeicon", - "phone": "819-426-3558", - "email": "valeria@xeicon.com" - }, - { - "id": 2698, - "guid": "545c3493-4787-4ad8-a597-c8e9565778a3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Elizabeth Miln", - "company": "Videobanc", - "phone": "831-533-3572", - "email": "elizabeth@videobanc.com" - }, - { - "id": 2699, - "guid": "64fb2ee2-41ff-4ecc-ae91-fe726c70508a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Gardner", - "company": "Systheon", - "phone": "848-540-2317", - "email": "madelyn@systheon.com" - }, - { - "id": 2700, - "guid": "1bf871bf-797d-4f5e-b16a-362ca5fed364", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Gill", - "company": "Conrama", - "phone": "847-463-3143", - "email": "hailey@conrama.com" - }, - { - "id": 2701, - "guid": "a4c274e5-e3a3-4d62-ad94-cbcc68d89070", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Gilson", - "company": "SysUSA", - "phone": "848-512-2185", - "email": "victoria@sysusa.com" - }, - { - "id": 2702, - "guid": "1c1d8c08-9b6a-49c6-ae53-ccc8b21fad25", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Neal", - "company": "Cryptotemplate", - "phone": "823-459-2110", - "email": "emma@cryptotemplate.com" - }, - { - "id": 2703, - "guid": "f31fe087-6c68-4a4b-8a4f-c5797981020e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Vaughan", - "company": "Navivacs", - "phone": "870-424-3255", - "email": "sydney@navivacs.com" - }, - { - "id": 2704, - "guid": "7bcde154-0118-40dc-89d9-658d3f4a5350", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Brickman", - "company": "iMedconik", - "phone": "890-515-3234", - "email": "taylor@imedconik.com" - }, - { - "id": 2705, - "guid": "6e4b5fd5-6699-44a7-9679-422870358f5b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Molligan", - "company": "Unconix", - "phone": "815-554-2132", - "email": "payton@unconix.com" - }, - { - "id": 2706, - "guid": "d5368fad-1499-4f97-87e4-cceb40f60a13", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Davidson", - "company": "Xeicon", - "phone": "852-583-3785", - "email": "taylor@xeicon.com" - }, - { - "id": 2707, - "guid": "ca7fb19e-bca6-4fa2-8f90-bb66f39248bb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Watson", - "company": "Transtouch", - "phone": "855-597-3966", - "email": "julia@transtouch.com" - }, - { - "id": 2708, - "guid": "4f019483-cd97-48a7-96b9-1a362dcebd58", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Cook", - "company": "Conrama", - "phone": "861-413-3715", - "email": "mariah@conrama.com" - }, - { - "id": 2709, - "guid": "fbafd4bf-08f1-4953-831d-aa3fcf9880bc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Molly Young", - "company": "InfoAirway", - "phone": "882-468-2174", - "email": "molly@infoairway.com" - }, - { - "id": 2710, - "guid": "93e97fef-2024-466a-9296-2d458a3ca0a5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Hoggarth", - "company": "Orthosoft", - "phone": "839-556-2372", - "email": "valeria@orthosoft.com" - }, - { - "id": 2711, - "guid": "aef4f3f7-8c4d-49b5-af1d-c6bec25aabc6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooklyn Neal", - "company": "Infragraph", - "phone": "808-487-3915", - "email": "brooklyn@infragraph.com" - }, - { - "id": 2712, - "guid": "7773c4ba-babb-406a-8347-44dc720a3e35", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Carey", - "company": "US Infratouch", - "phone": "826-561-3238", - "email": "sarah@us infratouch.com" - }, - { - "id": 2713, - "guid": "c8973bca-f79d-438f-b16b-84610f9bd3d1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Gustman", - "company": "Fibroserve", - "phone": "852-542-2247", - "email": "riley@fibroserve.com" - }, - { - "id": 2714, - "guid": "d2100af4-6490-4f82-9a07-01110bc59b95", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Carter", - "company": "Airdyne", - "phone": "885-432-2537", - "email": "sarah@airdyne.com" - }, - { - "id": 2715, - "guid": "168e50a6-6f2f-4043-aeac-c0ab807e406c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Young", - "company": "US Infratouch", - "phone": "892-486-2763", - "email": "kylie@us infratouch.com" - }, - { - "id": 2716, - "guid": "39283f14-4033-42e7-b8dd-353a3c35beba", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Daniels", - "company": "Generola", - "phone": "833-472-2737", - "email": "charlotte@generola.com" - }, - { - "id": 2717, - "guid": "511dde86-a461-457c-aaa3-f7e6c585bc93", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Calhoun", - "company": "Generola", - "phone": "806-493-3684", - "email": "mackenzie@generola.com" - }, - { - "id": 2718, - "guid": "1b40cdf0-cb50-44f7-ab60-f7e8c5184692", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Smith", - "company": "eEyetanic", - "phone": "848-451-2688", - "email": "mya@eeyetanic.com" - }, - { - "id": 2719, - "guid": "2dfa4cde-8f1b-44f0-9cd3-04968bda3eac", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Charlotte Crossman", - "company": "Skydata", - "phone": "861-469-2644", - "email": "charlotte@skydata.com" - }, - { - "id": 2720, - "guid": "7629d54b-2e21-449c-9265-6b8b471a2410", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Chesterton", - "company": "Qualserve", - "phone": "831-541-3990", - "email": "emily@qualserve.com" - }, - { - "id": 2721, - "guid": "271d7483-e534-43b1-a55d-f115119466a5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Gill", - "company": "Celgra", - "phone": "833-433-3584", - "email": "camila@celgra.com" - }, - { - "id": 2722, - "guid": "62b5a82d-afbf-4832-9cf1-6b9674c2f8e3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Haig", - "company": "Xeicon", - "phone": "819-510-2327", - "email": "ava@xeicon.com" - }, - { - "id": 2723, - "guid": "1f47f352-30fc-4929-87c0-f51f9cd5029f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Vaughan", - "company": "Generola", - "phone": "825-421-2512", - "email": "sydney@generola.com" - }, - { - "id": 2724, - "guid": "36176222-6405-4781-b813-78a2c5751abd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Vance", - "company": "Mescatron", - "phone": "880-521-2574", - "email": "jessica@mescatron.com" - }, - { - "id": 2725, - "guid": "0385c759-caf3-4e30-b376-37cafab965b9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Melanie Sherlock", - "company": "Jamconik", - "phone": "853-581-2772", - "email": "melanie@jamconik.com" - }, - { - "id": 2726, - "guid": "4d295bc3-a315-4d95-aec5-87454f1b412a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Wainwright", - "company": "Genland", - "phone": "882-551-3640", - "email": "ella@genland.com" - }, - { - "id": 2727, - "guid": "db137c8f-cf9c-43d9-8917-5da89f313f05", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Turner", - "company": "Ventanium", - "phone": "861-496-2535", - "email": "gianna@ventanium.com" - }, - { - "id": 2728, - "guid": "a83561fd-7e01-4663-9461-9018fdf9e627", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Natalie Davidson", - "company": "Infraique", - "phone": "826-437-2179", - "email": "natalie@infraique.com" - }, - { - "id": 2729, - "guid": "7ea19b85-a31f-42d4-b804-5177904c1ba1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Caroline Wesley", - "company": "Idmax", - "phone": "881-503-3529", - "email": "caroline@idmax.com" - }, - { - "id": 2730, - "guid": "a35a970d-9def-4eb8-b95a-011c15f47b55", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Higgins", - "company": "Keytheon", - "phone": "866-586-2807", - "email": "sydney@keytheon.com" - }, - { - "id": 2731, - "guid": "d22828bf-100a-4f66-aa52-4b8368a298ce", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emma Thomson", - "company": "Multitiqua", - "phone": "823-436-2636", - "email": "emma@multitiqua.com" - }, - { - "id": 2732, - "guid": "be17b707-2d9d-4ce1-b6ef-e736c85017f1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Galbraith", - "company": "Dynarama", - "phone": "888-442-2539", - "email": "riley@dynarama.com" - }, - { - "id": 2733, - "guid": "0ea5b74e-f439-4a91-b383-1e703f512482", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Hamphrey", - "company": "Truegate", - "phone": "833-539-3727", - "email": "olivia@truegate.com" - }, - { - "id": 2734, - "guid": "604a57d9-7c7f-406b-a524-e4caae90e515", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Neal", - "company": "Westmedia", - "phone": "858-475-3352", - "email": "ava@westmedia.com" - }, - { - "id": 2735, - "guid": "13cc1ddc-0129-4cda-bbae-3152bbb8cb17", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Hardman", - "company": "Robocomm", - "phone": "827-570-2178", - "email": "brooklyn@robocomm.com" - }, - { - "id": 2736, - "guid": "46abc0f9-f96e-43e0-951d-933a2f1771ae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Nevaeh Gilmore", - "company": "iSkyvaco", - "phone": "844-424-2229", - "email": "nevaeh@iskyvaco.com" - }, - { - "id": 2737, - "guid": "a718a187-f7a9-4fe2-a4c8-e92094bdf212", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Makayla Bush", - "company": "Titanirola", - "phone": "844-580-2122", - "email": "makayla@titanirola.com" - }, - { - "id": 2738, - "guid": "686452f5-e0aa-4104-b660-99e5cf3fb016", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Daniels", - "company": "Infraique", - "phone": "827-580-3174", - "email": "charlotte@infraique.com" - }, - { - "id": 2739, - "guid": "d2a5f7af-f8ac-43fa-bd91-6bece43b2225", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Elizabeth Gate", - "company": "Keytheon", - "phone": "898-570-3200", - "email": "elizabeth@keytheon.com" - }, - { - "id": 2740, - "guid": "5f329e86-017d-4d94-897f-6eb95b9990ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Hamphrey", - "company": "Entcast", - "phone": "832-526-2361", - "email": "kayla@entcast.com" - }, - { - "id": 2741, - "guid": "f98a8890-e0d3-4573-b288-20e30e772765", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Hoggarth", - "company": "Ventanium", - "phone": "822-566-3498", - "email": "taylor@ventanium.com" - }, - { - "id": 2742, - "guid": "1eb2325a-5e00-43a2-bb98-fd701e63c3d8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Cramer", - "company": "SysVenamerica", - "phone": "826-577-3864", - "email": "mariah@sysvenamerica.com" - }, - { - "id": 2743, - "guid": "75ada26a-7044-49e0-b68a-27765dbb3ae8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Miers", - "company": "iEnland", - "phone": "808-407-3434", - "email": "angelina@ienland.com" - }, - { - "id": 2744, - "guid": "066ba133-32d5-4dbb-bec8-1dd14453fba1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Ogden", - "company": "Idmax", - "phone": "860-471-2986", - "email": "eva@idmax.com" - }, - { - "id": 2745, - "guid": "d157ee72-d7f5-44ad-bd46-d01eb59f7e69", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Ogden", - "company": "Nanobanc", - "phone": "808-429-3462", - "email": "addison@nanobanc.com" - }, - { - "id": 2746, - "guid": "f09256e6-77c9-415b-a934-9be8253cdff6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Otis", - "company": "Raylog", - "phone": "880-509-2622", - "email": "aaliyah@raylog.com" - }, - { - "id": 2747, - "guid": "27f50a75-6d7f-4356-a3e0-f9c7380a0e1e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Davidson", - "company": "Robotemplate", - "phone": "850-406-2145", - "email": "arianna@robotemplate.com" - }, - { - "id": 2748, - "guid": "f97f6374-81f2-40c0-a456-cd41fef1c2d1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Oliver", - "company": "Westmedia", - "phone": "805-424-2584", - "email": "anna@westmedia.com" - }, - { - "id": 2749, - "guid": "892dec2f-0eb2-4c84-89f3-19f97c0e175b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ariana Hoggarth", - "company": "Anagraph", - "phone": "830-551-3378", - "email": "ariana@anagraph.com" - }, - { - "id": 2750, - "guid": "b4dee0b6-af18-456e-a47c-f12b82c15668", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Fulton", - "company": "Techtron", - "phone": "859-428-3747", - "email": "anna@techtron.com" - }, - { - "id": 2751, - "guid": "e3d84894-4170-4a9b-aa30-c6ccebf62f93", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Nash", - "company": "Teraserv", - "phone": "827-400-2354", - "email": "paige@teraserv.com" - }, - { - "id": 2752, - "guid": "fef12a6d-8517-4d46-920e-c588c4e0ff78", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Brickman", - "company": "iEnland", - "phone": "855-408-3767", - "email": "claire@ienland.com" - }, - { - "id": 2753, - "guid": "5f00ed08-dd8c-4ae1-9e24-74753754b3ba", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Goodman", - "company": "Unologic", - "phone": "808-557-2303", - "email": "madeline@unologic.com" - }, - { - "id": 2754, - "guid": "5e0cfe98-b063-4ea8-a58f-c9a78e7931f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Milton", - "company": "Genland", - "phone": "894-558-2960", - "email": "zoey@genland.com" - }, - { - "id": 2755, - "guid": "0760e2f6-6aaf-4aec-83b9-1a37779dd8be", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Galbraith", - "company": "Safeagra", - "phone": "877-429-2819", - "email": "sydney@safeagra.com" - }, - { - "id": 2756, - "guid": "c854faab-e8c4-4f06-8c2d-c9c1d5ed8738", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Fisher", - "company": "Ventanium", - "phone": "814-555-3334", - "email": "riley@ventanium.com" - }, - { - "id": 2757, - "guid": "779f7ccd-2364-4738-b04e-12301eaa57c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Hodges", - "company": "Dynarama", - "phone": "832-596-3255", - "email": "rachel@dynarama.com" - }, - { - "id": 2758, - "guid": "a3e6c952-e505-4dea-a5b2-83b2fbcb3a54", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Murphy", - "company": "Unologic", - "phone": "851-554-2051", - "email": "samantha@unologic.com" - }, - { - "id": 2759, - "guid": "7a32f257-e44e-4e12-a5e1-15d7f333fa71", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Genesis Chandter", - "company": "Tekcar", - "phone": "897-561-3671", - "email": "genesis@tekcar.com" - }, - { - "id": 2760, - "guid": "75bb5d5f-6525-406b-8732-f7ae4d01fc0b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Gilbert", - "company": "Teraserv", - "phone": "896-524-3040", - "email": "valeria@teraserv.com" - }, - { - "id": 2761, - "guid": "86195bd5-3466-4070-a68b-fa17c4389d94", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Carrington", - "company": "Westgate", - "phone": "827-577-2172", - "email": "avery@westgate.com" - }, - { - "id": 2762, - "guid": "168624fc-e536-43dd-b380-80b59c77ddb8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Haig", - "company": "Entcast", - "phone": "844-446-3899", - "email": "leah@entcast.com" - }, - { - "id": 2763, - "guid": "9cb279f0-2bdc-4afe-b662-4c9b2884c63b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Hailey", - "company": "US Infratouch", - "phone": "857-532-2969", - "email": "hannah@us infratouch.com" - }, - { - "id": 2764, - "guid": "3a075a8c-a392-412e-882d-bc1e61135e95", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Oswald", - "company": "Syssoft", - "phone": "893-434-3258", - "email": "evelyn@syssoft.com" - }, - { - "id": 2765, - "guid": "e41c452d-cfc0-44bc-8b13-ae29eabba127", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Goodman", - "company": "Skydata", - "phone": "891-500-3141", - "email": "payton@skydata.com" - }, - { - "id": 2766, - "guid": "26033364-2d7a-4599-8501-d9ef5fdd5bec", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Wesley", - "company": "Robotemplate", - "phone": "884-476-3480", - "email": "madeline@robotemplate.com" - }, - { - "id": 2767, - "guid": "2f0e8ad4-4d59-46fe-a98a-88d2f899a9e4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bailey Thorndike", - "company": "Entcast", - "phone": "834-417-3966", - "email": "bailey@entcast.com" - }, - { - "id": 2768, - "guid": "8a7d2b2d-1926-4899-869b-79384eb0d40a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Miers", - "company": "Textiqua", - "phone": "878-465-2080", - "email": "camila@textiqua.com" - }, - { - "id": 2769, - "guid": "0448d46d-2fc8-490e-a8af-7aeeefdf624f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Morgan Conors", - "company": "Fibrotouch", - "phone": "842-449-2683", - "email": "morgan@fibrotouch.com" - }, - { - "id": 2770, - "guid": "4c35eb07-599a-49a1-8d87-40cf9d637fcb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Day", - "company": "Cryptotemplate", - "phone": "888-596-3554", - "email": "bailey@cryptotemplate.com" - }, - { - "id": 2771, - "guid": "a36a3733-5a48-4cff-94f6-38b9c4d1f77c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Chesterton", - "company": "Orthosoft", - "phone": "896-484-3914", - "email": "olivia@orthosoft.com" - }, - { - "id": 2772, - "guid": "95c6fe20-2173-4f8b-8643-950d3408aa91", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Thorndike", - "company": "Titanirola", - "phone": "896-555-2681", - "email": "claire@titanirola.com" - }, - { - "id": 2773, - "guid": "b24cffaa-630f-41c4-90d0-0a5baff72beb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Nash", - "company": "SysUSA", - "phone": "882-529-3380", - "email": "peyton@sysusa.com" - }, - { - "id": 2774, - "guid": "9040955b-0efd-4df4-82ba-b8474bc29c73", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Oldman", - "company": "Keytheon", - "phone": "867-568-2898", - "email": "arianna@keytheon.com" - }, - { - "id": 2775, - "guid": "5888adb9-c4da-4f25-9a33-45e1b5ec3e55", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Davidson", - "company": "Ameritron", - "phone": "807-477-3942", - "email": "victoria@ameritron.com" - }, - { - "id": 2776, - "guid": "a5f7f4b4-84bd-40e8-97a0-36e4ef3408b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Watson", - "company": "Orthosoft", - "phone": "890-540-2952", - "email": "bella@orthosoft.com" - }, - { - "id": 2777, - "guid": "603970d9-2cf7-4025-9eed-f2c88bc0486c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Hardman", - "company": "Idmax", - "phone": "809-465-3630", - "email": "alexa@idmax.com" - }, - { - "id": 2778, - "guid": "a81f8d33-4a68-4b30-94bd-54708a9bf45f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Charlotte Gilbert", - "company": "Proline", - "phone": "805-532-3734", - "email": "charlotte@proline.com" - }, - { - "id": 2779, - "guid": "471811e6-4952-4021-ac63-ad9dff2ed94d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Sheldon", - "company": "eSteganoergy", - "phone": "835-401-2534", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 2780, - "guid": "41c12a09-f23d-461a-a113-8038cebb5076", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Thomson", - "company": "Jamrola", - "phone": "889-474-2484", - "email": "abigail@jamrola.com" - }, - { - "id": 2781, - "guid": "8224ae98-bc82-481a-b38e-dab85bb24b2c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Youmans", - "company": "Westmedia", - "phone": "833-523-3107", - "email": "isabelle@westmedia.com" - }, - { - "id": 2782, - "guid": "ee7b17c4-155f-483d-8d70-0ae84fcf2606", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Gardner", - "company": "Generola", - "phone": "811-426-3447", - "email": "alexandra@generola.com" - }, - { - "id": 2783, - "guid": "b6289e11-e717-4eae-9326-b48c850f6998", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Calhoun", - "company": "Syssoft", - "phone": "884-437-2397", - "email": "zoe@syssoft.com" - }, - { - "id": 2784, - "guid": "86607986-bf82-499e-b96a-a8cb03c33f5e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Thorndike", - "company": "Westtomik", - "phone": "847-400-3873", - "email": "khloe@westtomik.com" - }, - { - "id": 2785, - "guid": "1e7f967d-9254-4485-a340-e62ef1d04502", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Gate", - "company": "RoboAerlogix", - "phone": "894-496-3196", - "email": "katelyn@roboaerlogix.com" - }, - { - "id": 2786, - "guid": "481ceaa0-39f5-4943-b575-5cc7f29bb056", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Murphy", - "company": "Safetrust", - "phone": "893-548-3532", - "email": "kylie@safetrust.com" - }, - { - "id": 2787, - "guid": "f723bf8e-87dd-4d5d-89a9-d3431d67d3c4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Wood", - "company": "Xeicon", - "phone": "894-456-3468", - "email": "isabelle@xeicon.com" - }, - { - "id": 2788, - "guid": "40701a64-d555-4819-9775-6e5d967a7391", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Autumn Chesterton", - "company": "RoboAerlogix", - "phone": "879-512-3955", - "email": "autumn@roboaerlogix.com" - }, - { - "id": 2789, - "guid": "a31200d4-be82-4fc8-aa7b-dfa9af8eadba", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Wesley", - "company": "Aprama", - "phone": "815-493-3056", - "email": "elizabeth@aprama.com" - }, - { - "id": 2790, - "guid": "1a1e75a2-3781-4f38-8312-2f9b75d9b96a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Bush", - "company": "Enlogia", - "phone": "872-443-3393", - "email": "kimberly@enlogia.com" - }, - { - "id": 2791, - "guid": "79d0675f-b318-46d7-8d3c-3b311af40023", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Daniels", - "company": "Allphysiche", - "phone": "811-463-2215", - "email": "maya@allphysiche.com" - }, - { - "id": 2792, - "guid": "c39be522-fe52-4adb-bcb0-ffa966f97b1d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Vance", - "company": "Indisco", - "phone": "838-571-2591", - "email": "faith@indisco.com" - }, - { - "id": 2793, - "guid": "1cf491e0-8194-4538-a65a-2337c884b755", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Adamson", - "company": "Ventanium", - "phone": "820-564-2902", - "email": "valeria@ventanium.com" - }, - { - "id": 2794, - "guid": "d5f2df29-e31d-4eb7-94d5-3b0fa6d4891b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Vance", - "company": "Teknoplexon", - "phone": "827-468-2174", - "email": "evelyn@teknoplexon.com" - }, - { - "id": 2795, - "guid": "66d973b5-fe13-44a8-92bb-6dc78afbab7e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Natalie Turner", - "company": "Navivacs", - "phone": "898-566-2426", - "email": "natalie@navivacs.com" - }, - { - "id": 2796, - "guid": "d1463284-7bc4-482f-897d-cea7a96d0935", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Brown", - "company": "Westtomik", - "phone": "858-444-3437", - "email": "jessica@westtomik.com" - }, - { - "id": 2797, - "guid": "a2586555-3fef-43f4-8733-319c37dc0410", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Bush", - "company": "Infragraph", - "phone": "815-486-2201", - "email": "maria@infragraph.com" - }, - { - "id": 2798, - "guid": "3be6369a-f45d-4c11-9151-7196e5c15a73", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Smith", - "company": "Unconix", - "phone": "814-425-3665", - "email": "amelia@unconix.com" - }, - { - "id": 2799, - "guid": "4a6d702b-4e93-43b8-bc43-e16a14d21bf0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Nathan", - "company": "Inridium", - "phone": "838-539-2753", - "email": "sophia@inridium.com" - }, - { - "id": 2800, - "guid": "31c8d778-0f89-42af-a691-fa4f55ebde32", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Chapman", - "company": "Robotomic", - "phone": "852-431-3692", - "email": "camila@robotomic.com" - }, - { - "id": 2801, - "guid": "1f1dd446-5956-483c-887b-3c9434ed26d0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Paige Warren", - "company": "Jamrola", - "phone": "849-498-3302", - "email": "paige@jamrola.com" - }, - { - "id": 2802, - "guid": "6147ae6c-3403-4107-a4b7-0356db57125f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Timmons", - "company": "Allnet", - "phone": "880-507-3528", - "email": "avery@allnet.com" - }, - { - "id": 2803, - "guid": "eadf4a29-9f0e-4467-a662-0bed2cbfe1b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Fisher", - "company": "Fibroserve", - "phone": "820-543-2080", - "email": "madison@fibroserve.com" - }, - { - "id": 2804, - "guid": "de61d4ea-b050-48c2-80b4-f57556df881e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Morgan Wainwright", - "company": "Pericenta", - "phone": "878-547-2083", - "email": "morgan@pericenta.com" - }, - { - "id": 2805, - "guid": "c129e1f5-4a31-4bbe-ae8f-123cd1ab1ab2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Day", - "company": "eSteganoergy", - "phone": "847-407-2524", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 2806, - "guid": "1824a836-e181-4b0d-946a-39cc1b267984", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Hardman", - "company": "Fibrotopia", - "phone": "805-500-2484", - "email": "serenity@fibrotopia.com" - }, - { - "id": 2807, - "guid": "2ad3c5fa-9437-4569-aed1-8a5779574c5b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Vaughan", - "company": "Unologic", - "phone": "850-585-2918", - "email": "lillian@unologic.com" - }, - { - "id": 2808, - "guid": "7d2c832c-af5a-4f52-9df0-a1608d16ad48", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Hailey", - "company": "Keytheon", - "phone": "846-451-3425", - "email": "maria@keytheon.com" - }, - { - "id": 2809, - "guid": "802a62f1-cc61-42c2-9e52-3a0c668a2740", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Wood", - "company": "Safetrust", - "phone": "824-430-2916", - "email": "madison@safetrust.com" - }, - { - "id": 2810, - "guid": "2f234b1d-0552-4b14-9878-02f273a902e3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Waller", - "company": "iQualcar", - "phone": "852-600-3513", - "email": "camila@iqualcar.com" - }, - { - "id": 2811, - "guid": "dbc97b51-812d-4415-8c0a-4a6950192f11", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Hodges", - "company": "Thermotomic", - "phone": "852-414-2084", - "email": "gianna@thermotomic.com" - }, - { - "id": 2812, - "guid": "d5eb8808-df98-4161-9883-dda5e5f26150", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Angelina Cook", - "company": "Anaframe", - "phone": "801-487-3871", - "email": "angelina@anaframe.com" - }, - { - "id": 2813, - "guid": "1dd3f748-a4a6-4419-b920-ad556da74c61", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Goodman", - "company": "Orthosoft", - "phone": "856-582-3384", - "email": "ariana@orthosoft.com" - }, - { - "id": 2814, - "guid": "5e8fc737-ed62-44b9-9d66-afafe34a157c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail White", - "company": "InfoAirway", - "phone": "869-528-2171", - "email": "abigail@infoairway.com" - }, - { - "id": 2815, - "guid": "f44aae3b-d6c7-47ff-8ba0-ac960b6c318d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Carey", - "company": "Airdyne", - "phone": "876-486-3090", - "email": "julia@airdyne.com" - }, - { - "id": 2816, - "guid": "fa466e31-1f2e-4996-aeba-a6133221eddc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Anna Neal", - "company": "Truetomic", - "phone": "891-478-3676", - "email": "anna@truetomic.com" - }, - { - "id": 2817, - "guid": "48f5847c-895e-4337-92f9-3bb0a2e57125", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Gill", - "company": "Polytheon", - "phone": "897-478-3110", - "email": "aaliyah@polytheon.com" - }, - { - "id": 2818, - "guid": "025d7c69-f081-4eed-b7ea-ac6f83b5b8f4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Goodman", - "company": "Netseco", - "phone": "878-514-3860", - "email": "alexa@netseco.com" - }, - { - "id": 2819, - "guid": "3f07b98e-151c-4bbe-8e79-5ceab80d7e83", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Oldridge", - "company": "Robotemplate", - "phone": "800-488-3297", - "email": "julia@robotemplate.com" - }, - { - "id": 2820, - "guid": "2e84ec1c-f1d4-4eb3-977b-9d40db64eeca", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Chesterton", - "company": "Robotomic", - "phone": "813-497-3327", - "email": "maria@robotomic.com" - }, - { - "id": 2821, - "guid": "e0a93400-97bc-411d-8897-64d2015635e3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Abramson", - "company": "Truegate", - "phone": "881-417-3302", - "email": "elizabeth@truegate.com" - }, - { - "id": 2822, - "guid": "bb04efb0-9ecf-4fcc-b9a7-b27f0384bd11", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Cook", - "company": "Anagraph", - "phone": "809-528-3600", - "email": "emily@anagraph.com" - }, - { - "id": 2823, - "guid": "2fb7eeac-cd85-41ae-9587-f2fa45259341", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Hoggarth", - "company": "Jamrola", - "phone": "802-407-3837", - "email": "isabella@jamrola.com" - }, - { - "id": 2824, - "guid": "4dffe806-beda-4fd0-99a5-52c29ccb5ea1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa White", - "company": "Aluco", - "phone": "869-442-2367", - "email": "vanessa@aluco.com" - }, - { - "id": 2825, - "guid": "f139f95f-478e-42f7-ad0e-113337020d8b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Ward", - "company": "Raylog", - "phone": "814-578-2857", - "email": "isabella@raylog.com" - }, - { - "id": 2826, - "guid": "44a553c8-148e-4f74-969d-8a93a9174e1f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Hamphrey", - "company": "Polytheon", - "phone": "844-533-3982", - "email": "morgan@polytheon.com" - }, - { - "id": 2827, - "guid": "617045a1-7f1e-416c-bb07-92091b431d5f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Wallace", - "company": "Keytheon", - "phone": "868-574-2747", - "email": "ava@keytheon.com" - }, - { - "id": 2828, - "guid": "b4cbc8df-6397-4e20-b9c3-9a602d240671", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Warren", - "company": "Proline", - "phone": "890-575-3020", - "email": "claire@proline.com" - }, - { - "id": 2829, - "guid": "5e06d921-f413-4680-9192-60899bd2e5f7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Ward", - "company": "Netsystems", - "phone": "867-471-2180", - "email": "aubrey@netsystems.com" - }, - { - "id": 2830, - "guid": "628c6497-169c-48b9-9602-32887f843c6e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Fisher", - "company": "eEyetanic", - "phone": "867-480-2080", - "email": "angelina@eeyetanic.com" - }, - { - "id": 2831, - "guid": "2066b2c8-b242-4123-9d0b-cbd48f622713", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Watson", - "company": "Syssoft", - "phone": "866-600-2331", - "email": "charlotte@syssoft.com" - }, - { - "id": 2832, - "guid": "e7b862a1-2cc9-4a40-ba4e-8e802be1d688", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Waller", - "company": "Teratopia", - "phone": "802-444-2066", - "email": "faith@teratopia.com" - }, - { - "id": 2833, - "guid": "23b3d25b-eefd-4a96-b9cb-f9efe99239f6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Clapton", - "company": "Westgate", - "phone": "803-501-3645", - "email": "madison@westgate.com" - }, - { - "id": 2834, - "guid": "7b99684d-c070-40e6-87d1-9d9655cb2a3c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea WifKinson", - "company": "Westmedia", - "phone": "895-429-2919", - "email": "andrea@westmedia.com" - }, - { - "id": 2835, - "guid": "703dc270-29ed-49d1-91f4-3aee6b2bf3dd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Haig", - "company": "Jamrola", - "phone": "858-427-3938", - "email": "chloe@jamrola.com" - }, - { - "id": 2836, - "guid": "485b46fb-a2ef-4cc5-8bc5-1dfacb00d627", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Gibbs", - "company": "Jamconik", - "phone": "863-509-2355", - "email": "gabriella@jamconik.com" - }, - { - "id": 2837, - "guid": "01496617-7d97-414d-810f-f7460916dd73", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Natalie Freeman", - "company": "Sontopia", - "phone": "833-416-3371", - "email": "natalie@sontopia.com" - }, - { - "id": 2838, - "guid": "880f6f89-d3a1-434d-a5b2-3ae0a24bde30", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mariah Sherlock", - "company": "Venconix", - "phone": "836-403-3955", - "email": "mariah@venconix.com" - }, - { - "id": 2839, - "guid": "0cc94a17-5f4a-4aa8-8963-519557ca6960", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Oswald", - "company": "Fibroserve", - "phone": "880-512-3220", - "email": "morgan@fibroserve.com" - }, - { - "id": 2840, - "guid": "f11705ec-d7fc-47a8-abfb-551e2e858dda", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lillian Thorndike", - "company": "Teknoplexon", - "phone": "866-423-3511", - "email": "lillian@teknoplexon.com" - }, - { - "id": 2841, - "guid": "559da929-55b7-473b-a700-927f19b18504", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Sherlock", - "company": "Videobanc", - "phone": "833-517-2325", - "email": "morgan@videobanc.com" - }, - { - "id": 2842, - "guid": "bef667fe-daec-4744-8d76-ec610e6484d5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Conors", - "company": "Jamconik", - "phone": "845-455-2861", - "email": "julia@jamconik.com" - }, - { - "id": 2843, - "guid": "a6ba64a6-8c1d-45c5-84eb-d04821477a98", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Mercer", - "company": "Mescatron", - "phone": "886-494-2597", - "email": "eva@mescatron.com" - }, - { - "id": 2844, - "guid": "d8cefc36-5d0f-4619-9c75-9e5553d4e151", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Webster", - "company": "Robotomic", - "phone": "830-503-3157", - "email": "grace@robotomic.com" - }, - { - "id": 2845, - "guid": "d2356222-b917-41fe-a3a0-ca48489695ee", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Chapman", - "company": "Celgra", - "phone": "829-446-3318", - "email": "kayla@celgra.com" - }, - { - "id": 2846, - "guid": "6a685483-de1c-42cd-8b85-280339b87d3f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Daniels", - "company": "SysUSA", - "phone": "880-553-2238", - "email": "paige@sysusa.com" - }, - { - "id": 2847, - "guid": "d43518a3-d466-4dda-abaf-064bd9025e86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Gilson", - "company": "Unologic", - "phone": "822-597-3165", - "email": "mackenzie@unologic.com" - }, - { - "id": 2848, - "guid": "0a25e3aa-8646-496c-8eee-29db236cf7bb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Smith", - "company": "Celgra", - "phone": "880-579-3956", - "email": "natalie@celgra.com" - }, - { - "id": 2849, - "guid": "1c92d9e6-4546-477c-b4af-848b239e6ced", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Hawkins", - "company": "Idmax", - "phone": "883-527-2061", - "email": "alexa@idmax.com" - }, - { - "id": 2850, - "guid": "9d7f9102-bb9f-4e98-8502-a0e37f336d4b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Miln", - "company": "Titanigraf", - "phone": "839-478-2369", - "email": "zoey@titanigraf.com" - }, - { - "id": 2851, - "guid": "bb3b793a-ed89-4e6c-b9e7-2eac08c5d22d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Osborne", - "company": "Venconix", - "phone": "819-597-3652", - "email": "zoe@venconix.com" - }, - { - "id": 2852, - "guid": "7cb9c7c3-2b34-4d98-84d4-5670b3a6cf18", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Hancock", - "company": "Rapigrafix", - "phone": "812-587-2759", - "email": "taylor@rapigrafix.com" - }, - { - "id": 2853, - "guid": "4c13f915-0b62-45c6-8378-0741dd729d9e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Morrison", - "company": "Textiqua", - "phone": "838-490-2477", - "email": "layla@textiqua.com" - }, - { - "id": 2854, - "guid": "2ba8c7df-ab1e-4a8d-9efa-b42e768be0ab", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Abramson", - "company": "Robocomm", - "phone": "811-564-3112", - "email": "kimberly@robocomm.com" - }, - { - "id": 2855, - "guid": "5b1e2d69-d5d4-4fb8-878c-33ec21cad10c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Nash", - "company": "Textiqua", - "phone": "837-400-2431", - "email": "kylie@textiqua.com" - }, - { - "id": 2856, - "guid": "70de4065-3486-42ed-90ca-6d9b0edeab6b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Warren", - "company": "Safeagra", - "phone": "845-533-2274", - "email": "hannah@safeagra.com" - }, - { - "id": 2857, - "guid": "64fc6f2b-29ff-4130-b036-fbf48327ec9a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Harrison", - "company": "Safetrust", - "phone": "802-563-2726", - "email": "leah@safetrust.com" - }, - { - "id": 2858, - "guid": "c1d5af38-a6cc-48fd-b68d-04bbffbe372c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Gilbert", - "company": "Superscope", - "phone": "871-507-3306", - "email": "gianna@superscope.com" - }, - { - "id": 2859, - "guid": "37c59ab2-35df-4fd4-9c3a-147c523bd0ba", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Brown", - "company": "Infragraph", - "phone": "847-562-2043", - "email": "arianna@infragraph.com" - }, - { - "id": 2860, - "guid": "2ac20b4f-4946-426f-8008-3c61d2771cc2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Day", - "company": "Unologic", - "phone": "878-583-3798", - "email": "chloe@unologic.com" - }, - { - "id": 2861, - "guid": "80329b32-0f67-4a43-8bd5-fae90554dc6f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Nathan", - "company": "Hypervaco", - "phone": "800-555-2895", - "email": "mariah@hypervaco.com" - }, - { - "id": 2862, - "guid": "6245bce8-8259-4b0c-bec6-37753ed757af", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Hodges", - "company": "Techtron", - "phone": "863-504-2933", - "email": "sophia@techtron.com" - }, - { - "id": 2863, - "guid": "a0e257e7-d8b5-4c98-a4c5-a1c1d6b74041", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Rachel Gerald", - "company": "Syssoft", - "phone": "803-533-2166", - "email": "rachel@syssoft.com" - }, - { - "id": 2864, - "guid": "2d01e196-38e0-4270-b756-785abcc8ae6f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Hamphrey", - "company": "Unologic", - "phone": "872-564-3287", - "email": "samantha@unologic.com" - }, - { - "id": 2865, - "guid": "f8575756-6670-49d8-9287-e2d07fe7835f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mariah Crossman", - "company": "eSteganoergy", - "phone": "857-529-2293", - "email": "mariah@esteganoergy.com" - }, - { - "id": 2866, - "guid": "7979c0b8-2e26-4830-9034-08b941fc7d2c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Gilbert", - "company": "Systheon", - "phone": "804-587-3391", - "email": "charlotte@systheon.com" - }, - { - "id": 2867, - "guid": "6d705a6e-db48-4a53-a554-305455f95104", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Adamson", - "company": "Robotemplate", - "phone": "856-409-3233", - "email": "vanessa@robotemplate.com" - }, - { - "id": 2868, - "guid": "5ed6e10e-3397-4cbf-bcd0-a83fbf30f8ef", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Sherlock", - "company": "Pericenta", - "phone": "886-418-3739", - "email": "vanessa@pericenta.com" - }, - { - "id": 2869, - "guid": "97992ce1-5dbd-4722-b073-0fe94e1cd885", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Eva Youmans", - "company": "Nanobanc", - "phone": "884-529-3604", - "email": "eva@nanobanc.com" - }, - { - "id": 2870, - "guid": "fbfc99cc-d549-4ecb-826c-d0ef240fb757", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Thornton", - "company": "Allnet", - "phone": "899-419-3764", - "email": "trinity@allnet.com" - }, - { - "id": 2871, - "guid": "49293b7d-8881-4a2b-9f5a-456b8ccf31be", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madison Carrington", - "company": "Rapigrafix", - "phone": "874-456-3229", - "email": "madison@rapigrafix.com" - }, - { - "id": 2872, - "guid": "c8c4c9df-6265-42d6-a2ad-d41023b07e9d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ariana Campbell", - "company": "iEnland", - "phone": "817-564-2802", - "email": "ariana@ienland.com" - }, - { - "id": 2873, - "guid": "7bdcf202-fbb4-47aa-8477-3547acc3665c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Otis", - "company": "Thermotomic", - "phone": "856-544-2410", - "email": "jocelyn@thermotomic.com" - }, - { - "id": 2874, - "guid": "a6aa457b-946c-467b-a372-89bcece761ca", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily White", - "company": "Fibroserve", - "phone": "810-523-2313", - "email": "emily@fibroserve.com" - }, - { - "id": 2875, - "guid": "68649460-5ec2-48d8-b2d7-64c7c9922209", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Winter", - "company": "Robotemplate", - "phone": "882-561-3683", - "email": "bella@robotemplate.com" - }, - { - "id": 2876, - "guid": "ff68c561-ab02-421b-ae24-7644105ee25e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Morrison", - "company": "Videobanc", - "phone": "860-497-2254", - "email": "destiny@videobanc.com" - }, - { - "id": 2877, - "guid": "ad1fef63-6185-4765-9774-0ab23ba391af", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Thorndike", - "company": "Qualserve", - "phone": "856-484-3355", - "email": "chloe@qualserve.com" - }, - { - "id": 2878, - "guid": "c9e591c2-3236-48ec-a1ba-2850f66c95df", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Carey", - "company": "iEnland", - "phone": "815-447-3261", - "email": "katelyn@ienland.com" - }, - { - "id": 2879, - "guid": "7c47da51-afbc-46c1-8a17-72909bb3d102", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Hancock", - "company": "Westtomik", - "phone": "880-472-2020", - "email": "evelyn@westtomik.com" - }, - { - "id": 2880, - "guid": "06814673-4a6a-493d-8937-d664ba6d6da2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kimberly Warren", - "company": "Anaframe", - "phone": "882-579-2112", - "email": "kimberly@anaframe.com" - }, - { - "id": 2881, - "guid": "179fcb78-0fdb-483a-98c0-e21b524eaacd", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Smith", - "company": "SysUSA", - "phone": "847-432-3142", - "email": "leah@sysusa.com" - }, - { - "id": 2882, - "guid": "b9719222-c6c9-4948-913c-243762d2710b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Vaughan", - "company": "Titanigraf", - "phone": "824-548-3648", - "email": "evelyn@titanigraf.com" - }, - { - "id": 2883, - "guid": "ce857dea-d995-4cf3-b99b-edb572fba322", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Miln", - "company": "Superscope", - "phone": "898-562-2696", - "email": "zoe@superscope.com" - }, - { - "id": 2884, - "guid": "d1a19066-fdcd-4d46-9968-54b2247fe0b0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Brickman", - "company": "Orthomedia", - "phone": "858-452-2089", - "email": "trinity@orthomedia.com" - }, - { - "id": 2885, - "guid": "0391d0f3-4002-476e-b588-d9880129bae4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Gill", - "company": "Orthosoft", - "phone": "842-406-3654", - "email": "alexis@orthosoft.com" - }, - { - "id": 2886, - "guid": "443d8f63-f7fe-4dd7-b5af-fbbc061585f4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Wayne", - "company": "Entcast", - "phone": "871-451-2265", - "email": "charlotte@entcast.com" - }, - { - "id": 2887, - "guid": "b1f7602a-0dbd-48b7-af18-eb280cdbd9eb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Ward", - "company": "Cryptotemplate", - "phone": "855-484-2086", - "email": "serenity@cryptotemplate.com" - }, - { - "id": 2888, - "guid": "fab87960-fec2-4cdd-ad0f-4837a05ae173", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Oldman", - "company": "Teratopia", - "phone": "861-582-2301", - "email": "taylor@teratopia.com" - }, - { - "id": 2889, - "guid": "75fb3ebc-2b04-4e29-a345-00ad64294a55", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Gustman", - "company": "iOptystix", - "phone": "863-461-2854", - "email": "hailey@ioptystix.com" - }, - { - "id": 2890, - "guid": "99c2340e-13da-41b8-a500-f3c9977be597", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madison Gilson", - "company": "Inridium", - "phone": "800-541-2699", - "email": "madison@inridium.com" - }, - { - "id": 2891, - "guid": "9cbc177a-250e-4d11-85db-d7bc7bb7b27a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Neal", - "company": "Infragraph", - "phone": "866-578-3527", - "email": "sophia@infragraph.com" - }, - { - "id": 2892, - "guid": "8a5d82a5-437e-4588-987c-ca4d0eb00907", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Warren", - "company": "Thermotomic", - "phone": "885-481-3297", - "email": "khloe@thermotomic.com" - }, - { - "id": 2893, - "guid": "48f198ea-5338-4a79-a981-02c7551bdd72", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mya Carrington", - "company": "Mescaridic", - "phone": "825-423-3797", - "email": "mya@mescaridic.com" - }, - { - "id": 2894, - "guid": "a2715155-1b73-437b-9ded-77e2e9cdf7a2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Morrison", - "company": "Netseco", - "phone": "846-584-3638", - "email": "khloe@netseco.com" - }, - { - "id": 2895, - "guid": "fed023a9-5d86-4dd6-b055-bad808db6115", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Stanley", - "company": "Polytheon", - "phone": "897-563-3645", - "email": "genesis@polytheon.com" - }, - { - "id": 2896, - "guid": "941d471d-89d5-4ee2-b86a-6bc2346f1388", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Croftoon", - "company": "Quintegrity", - "phone": "848-405-2988", - "email": "katherine@quintegrity.com" - }, - { - "id": 2897, - "guid": "2eafc10e-6218-4c91-b0de-7654cf624d27", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Nash", - "company": "Nanobanc", - "phone": "849-470-3931", - "email": "alexis@nanobanc.com" - }, - { - "id": 2898, - "guid": "ad474ebe-14f0-42b3-b234-63b0851bf5b9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Otis", - "company": "SysUSA", - "phone": "843-539-2297", - "email": "katelyn@sysusa.com" - }, - { - "id": 2899, - "guid": "12b5ec9b-c748-4550-8589-5d3a0d8528e7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Youmans", - "company": "Fibrotouch", - "phone": "877-483-3820", - "email": "anna@fibrotouch.com" - }, - { - "id": 2900, - "guid": "c7e7bdd1-8d04-4215-b7a3-4eda6251d35d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Faith Carter", - "company": "Vencom", - "phone": "815-533-2231", - "email": "faith@vencom.com" - }, - { - "id": 2901, - "guid": "1ba7ee79-1e56-494c-921d-89b8de9412ed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Miln", - "company": "Nanobanc", - "phone": "855-532-2517", - "email": "melanie@nanobanc.com" - }, - { - "id": 2902, - "guid": "63be2ef9-c007-4e0d-ad10-edced8ec7ea0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Gilmore", - "company": "Anaframe", - "phone": "834-528-2545", - "email": "molly@anaframe.com" - }, - { - "id": 2903, - "guid": "d9d72e50-12d1-4a1d-b994-e3d018e32d22", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Warren", - "company": "Anaframe", - "phone": "824-485-2852", - "email": "kylie@anaframe.com" - }, - { - "id": 2904, - "guid": "ad2e43ea-df18-4523-96a4-5a43b9db3378", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Chapman", - "company": "Syssoft", - "phone": "811-600-3553", - "email": "andrea@syssoft.com" - }, - { - "id": 2905, - "guid": "5a4d2135-5da3-46a3-9e7d-d57cb4e70d90", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madison Brooks", - "company": "Conotomics", - "phone": "836-574-2302", - "email": "madison@conotomics.com" - }, - { - "id": 2906, - "guid": "e53dc2a1-fdf9-4a9c-9901-b66736e979c6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hailey Wesley", - "company": "Rapigrafix", - "phone": "899-581-2094", - "email": "hailey@rapigrafix.com" - }, - { - "id": 2907, - "guid": "c3e3120e-5c8d-4858-a075-fa2b6a9367a8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Gilmore", - "company": "Interliant", - "phone": "855-429-2247", - "email": "layla@interliant.com" - }, - { - "id": 2908, - "guid": "ce9afb63-6e0d-4ccb-a268-9234f3ca3f1f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Cramer", - "company": "Quintegrity", - "phone": "882-558-2644", - "email": "gabrielle@quintegrity.com" - }, - { - "id": 2909, - "guid": "f2130d99-4fe4-4881-9e0d-baa648a97b1c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth Adamson", - "company": "Polytheon", - "phone": "823-509-2434", - "email": "elizabeth@polytheon.com" - }, - { - "id": 2910, - "guid": "78e61392-46e7-440f-9a3e-86cf8c010487", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Clapton", - "company": "Titanirola", - "phone": "829-553-3322", - "email": "isabella@titanirola.com" - }, - { - "id": 2911, - "guid": "99b83779-6af3-4dbd-8460-a18b5d529e5e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Warren", - "company": "OpKeycomm", - "phone": "828-481-2145", - "email": "sophia@opkeycomm.com" - }, - { - "id": 2912, - "guid": "fc9d83f0-7c44-410b-a0fb-a1caf7a0add7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Miller", - "company": "Jamrola", - "phone": "889-488-3536", - "email": "allison@jamrola.com" - }, - { - "id": 2913, - "guid": "482c49e1-66d2-4c01-9cde-a530a172e52f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Thorndike", - "company": "eEyetanic", - "phone": "802-481-2013", - "email": "alexa@eeyetanic.com" - }, - { - "id": 2914, - "guid": "b8a4e0a0-2c4b-45a9-bb13-1ada7176c872", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Otis", - "company": "Ameritron", - "phone": "846-519-3007", - "email": "isabella@ameritron.com" - }, - { - "id": 2915, - "guid": "638fa47a-5973-41d3-9286-9b3a874bd655", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Chloe Gilbert", - "company": "Keytheon", - "phone": "851-409-3300", - "email": "chloe@keytheon.com" - }, - { - "id": 2916, - "guid": "25b0299f-e5f4-440c-b288-16e79cdecb96", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Gustman", - "company": "Venconix", - "phone": "871-534-3860", - "email": "isabelle@venconix.com" - }, - { - "id": 2917, - "guid": "7f0f2e13-230d-45c0-b929-9caa5a79a8ad", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Conors", - "company": "Generola", - "phone": "880-488-2579", - "email": "aubrey@generola.com" - }, - { - "id": 2918, - "guid": "cc19c4d3-9a2d-4a73-a86c-1913ddb5ecce", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Brickman", - "company": "Videobanc", - "phone": "831-576-3216", - "email": "leah@videobanc.com" - }, - { - "id": 2919, - "guid": "f4899a40-9ac1-422a-9089-9babaefaa04e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Campbell", - "company": "Superscope", - "phone": "869-465-3641", - "email": "madison@superscope.com" - }, - { - "id": 2920, - "guid": "8e500c7e-a0d6-4508-afe0-57fce0ff7a23", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Creighton", - "company": "Gigaura", - "phone": "829-493-2872", - "email": "destiny@gigaura.com" - }, - { - "id": 2921, - "guid": "c2d6f8cb-465e-4044-aa86-6bbdbb9bf32a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Gerald", - "company": "Openserve", - "phone": "838-495-2855", - "email": "camila@openserve.com" - }, - { - "id": 2922, - "guid": "15ada0b1-1ec2-4326-acfa-ef94b4803819", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jocelyn Young", - "company": "Safeagra", - "phone": "824-499-3187", - "email": "jocelyn@safeagra.com" - }, - { - "id": 2923, - "guid": "aaafc85b-0cd9-4e49-9566-77c3fb088f7f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Daniels", - "company": "Skydata", - "phone": "855-485-2127", - "email": "serenity@skydata.com" - }, - { - "id": 2924, - "guid": "e4ccb2cd-33a3-42e6-90bf-3c1669dc3b2d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Hodges", - "company": "Titanigraf", - "phone": "806-465-3981", - "email": "abigail@titanigraf.com" - }, - { - "id": 2925, - "guid": "eeb14aed-6857-4c2b-8712-513fffd20000", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Creighton", - "company": "Xeicon", - "phone": "834-451-2310", - "email": "sydney@xeicon.com" - }, - { - "id": 2926, - "guid": "c759f038-deb5-4b41-9e23-802a611bbc3e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Leah Wainwright", - "company": "Unconix", - "phone": "857-542-2441", - "email": "leah@unconix.com" - }, - { - "id": 2927, - "guid": "1e9bb84c-fb7b-4ba3-8072-bc99aa2fe705", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Winter", - "company": "Cryptotemplate", - "phone": "849-536-3367", - "email": "ella@cryptotemplate.com" - }, - { - "id": 2928, - "guid": "0d55e74d-9d54-4495-9a0f-0d30c8e2e447", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Wood", - "company": "Systheon", - "phone": "867-424-3415", - "email": "ashley@systheon.com" - }, - { - "id": 2929, - "guid": "1ed920b9-41d7-4fe6-a210-c0d2c8f9492a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe White", - "company": "Robotemplate", - "phone": "851-426-2549", - "email": "zoe@robotemplate.com" - }, - { - "id": 2930, - "guid": "9d6b05a4-b264-471e-ace0-bbd8ca64ece1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Thomson", - "company": "Gigaura", - "phone": "808-495-3331", - "email": "sophia@gigaura.com" - }, - { - "id": 2931, - "guid": "bb7e869a-3c38-449d-8ec4-cad6d8a7caac", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Nelson", - "company": "Videobanc", - "phone": "858-520-3580", - "email": "katelyn@videobanc.com" - }, - { - "id": 2932, - "guid": "4549649d-a19f-48dc-abd9-fa882146a3f0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna WifKinson", - "company": "OpKeycomm", - "phone": "881-545-3222", - "email": "gianna@opkeycomm.com" - }, - { - "id": 2933, - "guid": "a70cde08-1f05-4133-9291-c7a0086dd82f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Hancock", - "company": "Aprama", - "phone": "855-478-2156", - "email": "charlotte@aprama.com" - }, - { - "id": 2934, - "guid": "6686d4ad-01af-4b51-8fb2-66f815718513", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Cook", - "company": "Videobanc", - "phone": "891-478-2916", - "email": "madeline@videobanc.com" - }, - { - "id": 2935, - "guid": "c6cde3b9-2083-498c-b7bf-8e2709b51c39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Brooks", - "company": "Multitiqua", - "phone": "809-544-2794", - "email": "eva@multitiqua.com" - }, - { - "id": 2936, - "guid": "3eb52efe-1e56-423c-89e5-c22d681b69d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophie Oldman", - "company": "Keytheon", - "phone": "826-599-2681", - "email": "sophie@keytheon.com" - }, - { - "id": 2937, - "guid": "423ffe3e-c689-4bd8-a55c-e239595b131d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Gardner", - "company": "Robotomic", - "phone": "857-461-2064", - "email": "faith@robotomic.com" - }, - { - "id": 2938, - "guid": "ece48f3d-9633-44e3-b7a3-6ca548e4819a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lily Sherlock", - "company": "Textiqua", - "phone": "899-493-2866", - "email": "lily@textiqua.com" - }, - { - "id": 2939, - "guid": "0ac303f0-4d98-439e-8b9e-f61c6b3de167", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Ford", - "company": "Robocomm", - "phone": "892-516-2921", - "email": "evelyn@robocomm.com" - }, - { - "id": 2940, - "guid": "edce93e4-7e68-49c0-9757-69cd16252fa2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Timmons", - "company": "Transtouch", - "phone": "832-438-2928", - "email": "serenity@transtouch.com" - }, - { - "id": 2941, - "guid": "5e6296d5-d19e-4580-b006-7bd52a180906", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Young", - "company": "eSteganoergy", - "phone": "879-409-2516", - "email": "riley@esteganoergy.com" - }, - { - "id": 2942, - "guid": "43a43b23-368f-4a03-b792-4b5c5147d81c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Mercer", - "company": "Openserve", - "phone": "881-583-3581", - "email": "kaylee@openserve.com" - }, - { - "id": 2943, - "guid": "f6162665-67cb-434f-8088-8bd4cb9fc0f3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Charlson", - "company": "Aluco", - "phone": "886-529-3131", - "email": "grace@aluco.com" - }, - { - "id": 2944, - "guid": "972b08f9-7aa8-4334-8b00-cee7e42350a0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Wainwright", - "company": "iQualcar", - "phone": "873-533-2394", - "email": "sydney@iqualcar.com" - }, - { - "id": 2945, - "guid": "fc9c9523-9a8a-45c4-ac25-24bb7dff150a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Brooks", - "company": "Anaframe", - "phone": "864-585-3019", - "email": "julia@anaframe.com" - }, - { - "id": 2946, - "guid": "c986ce9d-d675-464f-bd5c-0a9a27dd641f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Miers", - "company": "Westmedia", - "phone": "848-492-3619", - "email": "molly@westmedia.com" - }, - { - "id": 2947, - "guid": "f85c9535-5d6a-4b64-a8ee-3fecd0a2754b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Walkman", - "company": "Proline", - "phone": "890-481-3054", - "email": "maya@proline.com" - }, - { - "id": 2948, - "guid": "4dd41c6b-66fa-4b97-8a53-7cc0f3da1eef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Hawkins", - "company": "Teknoplexon", - "phone": "848-550-3939", - "email": "gianna@teknoplexon.com" - }, - { - "id": 2949, - "guid": "d7e0d03c-6127-49e7-b37b-b7c29297858d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Hamphrey", - "company": "Venconix", - "phone": "819-575-3687", - "email": "savannah@venconix.com" - }, - { - "id": 2950, - "guid": "39afb8fe-df35-4bea-a593-960523f748c6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Gilbert", - "company": "Westmedia", - "phone": "847-596-2629", - "email": "jasmine@westmedia.com" - }, - { - "id": 2951, - "guid": "8f02c3f1-3d54-4743-b451-606e320356d6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Higgins", - "company": "Rapigrafix", - "phone": "808-409-3523", - "email": "madison@rapigrafix.com" - }, - { - "id": 2952, - "guid": "a31e5dfd-74f1-49c6-91c6-de51f2ff8078", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Higgins", - "company": "Fibrotouch", - "phone": "885-445-3011", - "email": "sophie@fibrotouch.com" - }, - { - "id": 2953, - "guid": "011c1bac-ae71-44dc-84d7-4756f2ba8b0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Creighton", - "company": "Technogra", - "phone": "881-459-2541", - "email": "ava@technogra.com" - }, - { - "id": 2954, - "guid": "743d5d5b-6baf-4169-aa00-ed71feef024e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Oldridge", - "company": "Technogra", - "phone": "878-506-3184", - "email": "peyton@technogra.com" - }, - { - "id": 2955, - "guid": "0b03e27f-b392-4730-89de-660db24b6d1f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Gilmore", - "company": "Enlogia", - "phone": "816-436-2007", - "email": "khloe@enlogia.com" - }, - { - "id": 2956, - "guid": "81184b01-b7d2-457c-8909-8d61e91e8041", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Oldman", - "company": "eSteganoergy", - "phone": "818-488-2299", - "email": "sarah@esteganoergy.com" - }, - { - "id": 2957, - "guid": "404200f0-67bc-4c1d-ad37-4eef31cb8205", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Gill", - "company": "Videobanc", - "phone": "824-598-3532", - "email": "natalie@videobanc.com" - }, - { - "id": 2958, - "guid": "5b4350cb-6434-4c69-a2aa-b788a3e1c789", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ella Ford", - "company": "Westmedia", - "phone": "855-505-3223", - "email": "ella@westmedia.com" - }, - { - "id": 2959, - "guid": "f25b2cf5-baaf-4b55-838a-45f14c734598", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Milton", - "company": "Netseco", - "phone": "860-551-3514", - "email": "mia@netseco.com" - }, - { - "id": 2960, - "guid": "4fa391a6-5909-49ec-a51e-209816c3eea1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Samantha Higgins", - "company": "Westmedia", - "phone": "875-499-2710", - "email": "samantha@westmedia.com" - }, - { - "id": 2961, - "guid": "8783be0d-94cc-41e2-8659-38d034e117b4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Chesterton", - "company": "Xeicon", - "phone": "807-498-3071", - "email": "anna@xeicon.com" - }, - { - "id": 2962, - "guid": "d2e5e278-1529-4fb7-852e-44a6a06af53a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Carter", - "company": "iSkyvaco", - "phone": "899-429-2151", - "email": "ariana@iskyvaco.com" - }, - { - "id": 2963, - "guid": "d35953b6-4125-4296-9680-54fc0ede727c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Timmons", - "company": "Aluco", - "phone": "816-533-3661", - "email": "samantha@aluco.com" - }, - { - "id": 2964, - "guid": "c379d2d1-8757-4d6a-9dc5-9c9d29438f61", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Fulton", - "company": "Conotomics", - "phone": "890-470-2067", - "email": "serenity@conotomics.com" - }, - { - "id": 2965, - "guid": "3f58aa5c-6673-489e-a6c6-4d2bee6d9845", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Adamson", - "company": "Dynarama", - "phone": "824-488-3877", - "email": "kylie@dynarama.com" - }, - { - "id": 2966, - "guid": "18eb92c0-87cb-4ab7-aef6-51394ab84d19", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Audrey Murphy", - "company": "Thermotomic", - "phone": "830-421-3014", - "email": "audrey@thermotomic.com" - }, - { - "id": 2967, - "guid": "2c1ff0c4-1bd4-4bd8-8ae8-f9d0c9ba48ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Milton", - "company": "Netsystems", - "phone": "886-436-3559", - "email": "lauren@netsystems.com" - }, - { - "id": 2968, - "guid": "49474320-dcc9-4cc8-926a-378dfa6b9057", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Oldman", - "company": "Truetomic", - "phone": "838-490-2733", - "email": "natalie@truetomic.com" - }, - { - "id": 2969, - "guid": "a7e138c5-4c92-4202-a467-57e069281490", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Miln", - "company": "Robotemplate", - "phone": "854-517-2036", - "email": "elizabeth@robotemplate.com" - }, - { - "id": 2970, - "guid": "5d58a34a-51ea-48a7-83ea-66e625625603", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaitlyn Nash", - "company": "Nanobanc", - "phone": "803-578-3216", - "email": "kaitlyn@nanobanc.com" - }, - { - "id": 2971, - "guid": "26b4216f-cedf-4a1d-941d-fcb18557d8c8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaitlyn Molligan", - "company": "Interliant", - "phone": "894-428-3568", - "email": "kaitlyn@interliant.com" - }, - { - "id": 2972, - "guid": "3e79a2aa-2755-4f1e-94f9-a2bc8fe9be07", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Neal", - "company": "Thermotomic", - "phone": "805-464-3066", - "email": "bailey@thermotomic.com" - }, - { - "id": 2973, - "guid": "a4361f4e-270f-46a4-a625-1e290a68c64a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Carroll", - "company": "Robotomic", - "phone": "831-409-2612", - "email": "alyssa@robotomic.com" - }, - { - "id": 2974, - "guid": "992db7b1-9dbe-4a7a-b86d-16267ef777d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Brooks", - "company": "Steganoconiche", - "phone": "855-499-2813", - "email": "jocelyn@steganoconiche.com" - }, - { - "id": 2975, - "guid": "7749035c-3811-41e7-9227-82a89fba932a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Michaelson", - "company": "Sontopia", - "phone": "836-522-2681", - "email": "sydney@sontopia.com" - }, - { - "id": 2976, - "guid": "9b165204-45eb-42eb-938e-46a37423ff46", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Bush", - "company": "Technogra", - "phone": "801-497-3663", - "email": "amelia@technogra.com" - }, - { - "id": 2977, - "guid": "d58a5326-d68d-4abc-b075-23b75031973b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Charlson", - "company": "Proline", - "phone": "824-427-3175", - "email": "jasmine@proline.com" - }, - { - "id": 2978, - "guid": "b37374a4-ea9c-44af-ab3d-d7d33fa19870", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Chapman", - "company": "Syssoft", - "phone": "815-449-2775", - "email": "anna@syssoft.com" - }, - { - "id": 2979, - "guid": "70fc1b09-7a9f-4c32-96c4-1445592693bc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Gerald", - "company": "Inridium", - "phone": "844-583-3656", - "email": "natalie@inridium.com" - }, - { - "id": 2980, - "guid": "d14c1f48-3405-4456-996a-ae4e2a408b9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Watson", - "company": "Turbomart", - "phone": "879-520-3823", - "email": "gabrielle@turbomart.com" - }, - { - "id": 2981, - "guid": "2dd2dae5-f410-4555-928e-70d7365db358", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Chandter", - "company": "Netseco", - "phone": "877-434-2769", - "email": "lillian@netseco.com" - }, - { - "id": 2982, - "guid": "dc5b2a44-fcde-4b55-9099-a1f8d92de923", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Chandter", - "company": "Robotemplate", - "phone": "880-406-2480", - "email": "riley@robotemplate.com" - }, - { - "id": 2983, - "guid": "2a1d71a9-5404-4da0-ac6b-1d319f857466", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Miers", - "company": "Techtron", - "phone": "864-531-2435", - "email": "alyssa@techtron.com" - }, - { - "id": 2984, - "guid": "beb1093f-02d4-4f77-b067-292844aef6ae", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Timmons", - "company": "Jamconik", - "phone": "865-494-3658", - "email": "samantha@jamconik.com" - }, - { - "id": 2985, - "guid": "7a1e6ef3-be91-41da-88bb-f535a0d5c3cd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Mercer", - "company": "Teratopia", - "phone": "835-526-3625", - "email": "katelyn@teratopia.com" - }, - { - "id": 2986, - "guid": "2d571d05-ddc4-4dcd-8556-8b5962f489ae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Chapman", - "company": "Transtouch", - "phone": "845-434-3172", - "email": "isabella@transtouch.com" - }, - { - "id": 2987, - "guid": "3c613582-1133-4e42-b199-895cde67af27", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Abramson", - "company": "Titanigraf", - "phone": "860-451-3830", - "email": "melanie@titanigraf.com" - }, - { - "id": 2988, - "guid": "f598282b-0001-41b4-a1da-d518afb3deae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brianna Carroll", - "company": "Titanigraf", - "phone": "883-570-3015", - "email": "brianna@titanigraf.com" - }, - { - "id": 2989, - "guid": "2e73ddda-fb21-4a5d-94e2-36543c00d570", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Gilson", - "company": "Dynarama", - "phone": "867-519-3188", - "email": "leah@dynarama.com" - }, - { - "id": 2990, - "guid": "5c443f5f-b183-4269-afcb-e9967e1fe64d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Wainwright", - "company": "InfoAirway", - "phone": "825-432-3096", - "email": "kylie@infoairway.com" - }, - { - "id": 2991, - "guid": "80220334-8ae5-446f-88b7-ce996636cbd7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Chesterton", - "company": "US Omnigraphik", - "phone": "846-573-2479", - "email": "bella@us omnigraphik.com" - }, - { - "id": 2992, - "guid": "e48da050-2413-4156-bb80-e4f1429a62f8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Grace Mercer", - "company": "Quintegrity", - "phone": "880-477-3271", - "email": "grace@quintegrity.com" - }, - { - "id": 2993, - "guid": "bea0cece-5f63-4965-84f8-78faf36856b9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Crossman", - "company": "Qualserve", - "phone": "841-472-3145", - "email": "savannah@qualserve.com" - }, - { - "id": 2994, - "guid": "e184556f-c30e-4f32-956b-1ad4c66008c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Gerald", - "company": "Nanobanc", - "phone": "827-428-3290", - "email": "faith@nanobanc.com" - }, - { - "id": 2995, - "guid": "2fa65441-d71e-4439-90c1-a4e176fc738a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Wood", - "company": "OpKeycomm", - "phone": "818-439-3296", - "email": "samantha@opkeycomm.com" - }, - { - "id": 2996, - "guid": "bf0ad451-8a0c-4db0-8943-4bf7eea38486", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah WifKinson", - "company": "OpKeycomm", - "phone": "899-544-3045", - "email": "savannah@opkeycomm.com" - }, - { - "id": 2997, - "guid": "bb02ad05-670b-40a2-958a-0a3fe42518ab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Nathan", - "company": "Teraserv", - "phone": "853-469-3626", - "email": "caroline@teraserv.com" - }, - { - "id": 2998, - "guid": "dbb4707f-c022-4804-b23e-c082c5a073f0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Davidson", - "company": "Superscope", - "phone": "815-539-2766", - "email": "addison@superscope.com" - }, - { - "id": 2999, - "guid": "20a111b3-e37c-42e1-9a1c-11be64c6314b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Crossman", - "company": "Fibroserve", - "phone": "867-592-3362", - "email": "ashley@fibroserve.com" - }, - { - "id": 3000, - "guid": "16cb18d1-0eca-46ec-991f-d0afee0db000", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Adamson", - "company": "Tekcar", - "phone": "870-518-2471", - "email": "arianna@tekcar.com" - }, - { - "id": 3001, - "guid": "cbe3e549-17b7-4a83-9852-e92774696e6d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Hamphrey", - "company": "Keytheon", - "phone": "844-472-3829", - "email": "khloe@keytheon.com" - }, - { - "id": 3002, - "guid": "e380c1d7-40da-4fd9-a373-31bb38d1ba7e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny Hodges", - "company": "Hypervaco", - "phone": "881-551-2227", - "email": "destiny@hypervaco.com" - }, - { - "id": 3003, - "guid": "36a9ea72-1795-45fa-8b71-9944ecad6b05", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Oldman", - "company": "Techtron", - "phone": "887-462-3737", - "email": "serenity@techtron.com" - }, - { - "id": 3004, - "guid": "51aecd88-536c-4288-ae63-e55ec025a12e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Wainwright", - "company": "Venconix", - "phone": "820-485-3103", - "email": "savannah@venconix.com" - }, - { - "id": 3005, - "guid": "77e96fc4-6db5-4bde-8481-210e0839e21d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maya Gill", - "company": "Techtron", - "phone": "888-590-2714", - "email": "maya@techtron.com" - }, - { - "id": 3006, - "guid": "65cdeb33-6967-40fc-aa90-d8a7be8b17dc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Neal", - "company": "Westgate", - "phone": "834-400-2550", - "email": "addison@westgate.com" - }, - { - "id": 3007, - "guid": "7ebc28b6-8d48-413f-821d-c33770a197e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gill", - "company": "Titanirola", - "phone": "843-475-3518", - "email": "lauren@titanirola.com" - }, - { - "id": 3008, - "guid": "92dfc258-96bf-4d9e-be0c-148dbf35477d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Warren", - "company": "Allnet", - "phone": "802-544-3015", - "email": "madelyn@allnet.com" - }, - { - "id": 3009, - "guid": "5ef76075-5d40-4cad-953f-fba370ce53fa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney White", - "company": "Enlogia", - "phone": "843-516-3271", - "email": "sydney@enlogia.com" - }, - { - "id": 3010, - "guid": "04594563-4d6f-4f4b-9a3c-a4092f6d0973", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Webster", - "company": "Robotomic", - "phone": "836-425-3583", - "email": "kylie@robotomic.com" - }, - { - "id": 3011, - "guid": "417eff04-80cc-40bc-bc76-0df2ba6cec3c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Bush", - "company": "Inridium", - "phone": "897-430-3318", - "email": "morgan@inridium.com" - }, - { - "id": 3012, - "guid": "398da014-d642-4204-9fe5-0777e73f28ed", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Miln", - "company": "Truetomic", - "phone": "805-563-2942", - "email": "madison@truetomic.com" - }, - { - "id": 3013, - "guid": "22776bde-e5f0-4311-bdea-8d4cb667c2a8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Hodges", - "company": "Truetomic", - "phone": "842-433-2792", - "email": "elizabeth@truetomic.com" - }, - { - "id": 3014, - "guid": "d9e39829-2626-416b-bb65-c6472eb1b138", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Sherlock", - "company": "Polytheon", - "phone": "813-492-2081", - "email": "allison@polytheon.com" - }, - { - "id": 3015, - "guid": "9aa60c6a-eccd-4193-8ef2-34dc1cdf15c9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Adamson", - "company": "Westmedia", - "phone": "865-513-3277", - "email": "kaitlyn@westmedia.com" - }, - { - "id": 3016, - "guid": "69ecdd2d-f9e3-43b8-b978-97f859e0c67e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Brown", - "company": "Anaframe", - "phone": "870-559-3385", - "email": "chloe@anaframe.com" - }, - { - "id": 3017, - "guid": "1101810c-014f-4e05-a347-60e8a85d4b9c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Oliver", - "company": "Polytheon", - "phone": "875-479-3024", - "email": "taylor@polytheon.com" - }, - { - "id": 3018, - "guid": "2fbeb03e-1f7b-46aa-94dc-3bf8f54af0ba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Murphy", - "company": "Proline", - "phone": "803-433-2906", - "email": "ashley@proline.com" - }, - { - "id": 3019, - "guid": "764e25b3-7b76-493b-91c5-91608666536a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madeline Hoggarth", - "company": "Technogra", - "phone": "817-563-2239", - "email": "madeline@technogra.com" - }, - { - "id": 3020, - "guid": "561c0bbf-00ab-4011-8469-020a312d1728", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ava Milton", - "company": "Rapigrafix", - "phone": "879-460-2770", - "email": "ava@rapigrafix.com" - }, - { - "id": 3021, - "guid": "5df6a037-79cc-412d-8248-66062eed5438", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Chesterton", - "company": "Openserve", - "phone": "839-502-2429", - "email": "victoria@openserve.com" - }, - { - "id": 3022, - "guid": "11206a09-6245-4950-98fe-d24b16762906", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Smith", - "company": "Interliant", - "phone": "865-422-3821", - "email": "riley@interliant.com" - }, - { - "id": 3023, - "guid": "0c398530-6880-4ddc-be06-84af62935e9b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Nash", - "company": "OpKeycomm", - "phone": "812-436-2573", - "email": "sophia@opkeycomm.com" - }, - { - "id": 3024, - "guid": "c2d309d9-32fc-40bf-a533-d74f566747d8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Higgins", - "company": "iQualcar", - "phone": "877-416-3254", - "email": "sophie@iqualcar.com" - }, - { - "id": 3025, - "guid": "fdd11037-818b-4bcb-bb95-5ab796488e1b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Thomson", - "company": "Skydata", - "phone": "844-581-3197", - "email": "madelyn@skydata.com" - }, - { - "id": 3026, - "guid": "8b1a2ed2-0a76-424a-8a48-4c3b032e81f2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Carter", - "company": "Infragraph", - "phone": "841-446-3935", - "email": "allison@infragraph.com" - }, - { - "id": 3027, - "guid": "9045bfb1-b73d-4051-bc9e-ef6eee365268", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Oswald", - "company": "Enlogia", - "phone": "832-485-2189", - "email": "eva@enlogia.com" - }, - { - "id": 3028, - "guid": "b6115f6c-1301-443a-a61f-8f13a5696d24", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Thorndike", - "company": "Robocomm", - "phone": "855-493-3247", - "email": "genesis@robocomm.com" - }, - { - "id": 3029, - "guid": "45a3c1b6-8cdc-4b8c-b950-4bbf73ccea0e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Haig", - "company": "Steganoconiche", - "phone": "836-468-3154", - "email": "katelyn@steganoconiche.com" - }, - { - "id": 3030, - "guid": "7b48d160-d313-4276-aae9-0f68d1185601", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Hodges", - "company": "Airdyne", - "phone": "871-454-3157", - "email": "madison@airdyne.com" - }, - { - "id": 3031, - "guid": "c5e6240e-d11a-44d0-bfc7-8f261de2cb6b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Wainwright", - "company": "Proline", - "phone": "805-448-3156", - "email": "kaylee@proline.com" - }, - { - "id": 3032, - "guid": "99f93339-ff29-4f0e-97d7-3aa2d3ddda11", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Goldman", - "company": "iQualcar", - "phone": "802-540-3749", - "email": "savannah@iqualcar.com" - }, - { - "id": 3033, - "guid": "f17e1f6e-a4f2-4dc9-8ada-4cc0114396bd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Oliver", - "company": "Fibrotopia", - "phone": "883-450-2646", - "email": "serenity@fibrotopia.com" - }, - { - "id": 3034, - "guid": "224da4e4-dd68-4ced-87e7-ffe51d326023", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Caroline Goldman", - "company": "Anaframe", - "phone": "864-470-2982", - "email": "caroline@anaframe.com" - }, - { - "id": 3035, - "guid": "88b596ed-7ced-47e9-8bb0-23a62a2835d5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Hancock", - "company": "Anaframe", - "phone": "881-434-3742", - "email": "kaylee@anaframe.com" - }, - { - "id": 3036, - "guid": "57b2c68b-0591-46e2-9d31-83f883c437ca", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Oliver", - "company": "Entcast", - "phone": "825-553-3342", - "email": "eva@entcast.com" - }, - { - "id": 3037, - "guid": "a1ca8ff6-e4b4-40de-b4fb-5088387bb058", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Warren", - "company": "Fibrotopia", - "phone": "862-551-2882", - "email": "angelina@fibrotopia.com" - }, - { - "id": 3038, - "guid": "12461b0b-0ae6-4040-a6b2-ebcd903c52e2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Oswald", - "company": "Truetomic", - "phone": "898-584-2094", - "email": "bella@truetomic.com" - }, - { - "id": 3039, - "guid": "d673c69f-3c2f-425d-8081-196b4d9b0322", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Winter", - "company": "Pericenta", - "phone": "885-438-2839", - "email": "eva@pericenta.com" - }, - { - "id": 3040, - "guid": "d734efef-feca-464e-8f6e-5981eaf188ab", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Gustman", - "company": "Rapigrafix", - "phone": "884-435-2360", - "email": "angelina@rapigrafix.com" - }, - { - "id": 3041, - "guid": "831c4b84-b315-4c7d-929e-d884e1b74d83", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Waller", - "company": "Idmax", - "phone": "803-467-3917", - "email": "sofia@idmax.com" - }, - { - "id": 3042, - "guid": "1806f566-e81d-4dfa-801d-ac84efc22c36", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Oldman", - "company": "Teraserv", - "phone": "854-407-3453", - "email": "sarah@teraserv.com" - }, - { - "id": 3043, - "guid": "433f55f8-eeea-4453-8d30-d34bcfbd6227", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophia Brown", - "company": "Idmax", - "phone": "832-496-3361", - "email": "sophia@idmax.com" - }, - { - "id": 3044, - "guid": "c44a42b0-c7b4-4708-b880-0e1cb512c445", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Morrison", - "company": "Vencom", - "phone": "806-478-3893", - "email": "addison@vencom.com" - }, - { - "id": 3045, - "guid": "671c9257-ea58-459c-b790-b0cac42bdbfa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Carter", - "company": "Orthosoft", - "phone": "847-463-2658", - "email": "emma@orthosoft.com" - }, - { - "id": 3046, - "guid": "5edf16f5-7c6d-4c6c-9944-1b7cfdcdde65", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Young", - "company": "Fibrotopia", - "phone": "848-468-2363", - "email": "payton@fibrotopia.com" - }, - { - "id": 3047, - "guid": "d1c6cd70-e6fb-49a0-b836-8683ad12539a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Fulton", - "company": "Techtron", - "phone": "884-495-2299", - "email": "sophia@techtron.com" - }, - { - "id": 3048, - "guid": "c8bb6dbd-9a92-4fdd-b0b7-5e14c7f71fed", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Gill", - "company": "Mescaridic", - "phone": "823-507-3922", - "email": "isabelle@mescaridic.com" - }, - { - "id": 3049, - "guid": "771700a3-28d1-4e16-911c-2a4de05b5458", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Hancock", - "company": "Textiqua", - "phone": "889-483-2282", - "email": "alexis@textiqua.com" - }, - { - "id": 3050, - "guid": "f7323cc6-b9f4-4209-9c79-b632e24bfc90", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Gilmore", - "company": "Celgra", - "phone": "845-584-3101", - "email": "brooke@celgra.com" - }, - { - "id": 3051, - "guid": "1d50fd4e-d398-43b3-80a8-6855ce83582d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Gardner", - "company": "Pericenta", - "phone": "841-546-3067", - "email": "victoria@pericenta.com" - }, - { - "id": 3052, - "guid": "382f47c4-22c2-4c57-a82c-33d227a1392e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Chesterton", - "company": "Interliant", - "phone": "876-549-3900", - "email": "avery@interliant.com" - }, - { - "id": 3053, - "guid": "b4936ec9-343f-4be4-8fe9-112a47be13d6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Freeman", - "company": "Inridium", - "phone": "804-445-3220", - "email": "aubrey@inridium.com" - }, - { - "id": 3054, - "guid": "5cb04c64-4a0e-4fe3-a02a-c8875ea7b62c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Stanley", - "company": "Pericenta", - "phone": "881-447-4000", - "email": "elizabeth@pericenta.com" - }, - { - "id": 3055, - "guid": "386e18c3-8915-4e8e-aa8d-a14462b8b937", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Morgan Gustman", - "company": "SysVenamerica", - "phone": "830-529-2903", - "email": "morgan@sysvenamerica.com" - }, - { - "id": 3056, - "guid": "14aef245-0e31-4a1b-96ee-8ca80e7f2062", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Gibbs", - "company": "Cryptotemplate", - "phone": "839-469-2381", - "email": "mia@cryptotemplate.com" - }, - { - "id": 3057, - "guid": "0e057193-7762-4bc5-ab1d-9aee19d6cd23", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Brown", - "company": "US Infratouch", - "phone": "886-403-2427", - "email": "isabella@us infratouch.com" - }, - { - "id": 3058, - "guid": "81065838-b3e4-463c-9f4f-0b922e836c5b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Hancock", - "company": "Allnet", - "phone": "840-478-2236", - "email": "julia@allnet.com" - }, - { - "id": 3059, - "guid": "448cbe0b-0828-40e2-b928-53c6152dd357", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace Gardner", - "company": "Titanigraf", - "phone": "835-458-2045", - "email": "grace@titanigraf.com" - }, - { - "id": 3060, - "guid": "0af0134d-5d1a-4cee-b2bb-8cbb800ec17c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Miln", - "company": "Polytheon", - "phone": "899-496-2683", - "email": "isabelle@polytheon.com" - }, - { - "id": 3061, - "guid": "cb741984-59ab-4584-a052-add217331bd3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Amelia Youmans", - "company": "Aprama", - "phone": "854-504-2216", - "email": "amelia@aprama.com" - }, - { - "id": 3062, - "guid": "ed99376d-dfe8-44a7-91fc-e54e5edea4cc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Wayne", - "company": "iQualcar", - "phone": "884-476-3802", - "email": "katherine@iqualcar.com" - }, - { - "id": 3063, - "guid": "7a6794bb-5934-4944-979a-84fdc47fd38d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Samantha Goodman", - "company": "Indisco", - "phone": "806-561-2777", - "email": "samantha@indisco.com" - }, - { - "id": 3064, - "guid": "ede7d9dd-5ddc-4324-937b-c7ec1c39acef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Owen", - "company": "Venconix", - "phone": "824-499-2375", - "email": "claire@venconix.com" - }, - { - "id": 3065, - "guid": "a9d5967d-19c5-4ef6-8db5-3f050cd35756", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ariana Crossman", - "company": "Orthomedia", - "phone": "866-571-2755", - "email": "ariana@orthomedia.com" - }, - { - "id": 3066, - "guid": "89c72f46-2ab2-496a-b9e2-75e7ad92206a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Mercer", - "company": "Pericenta", - "phone": "874-554-2931", - "email": "isabelle@pericenta.com" - }, - { - "id": 3067, - "guid": "11a0c5c4-63f0-40d7-ba60-fa43580498ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Audrey Gill", - "company": "Mescatron", - "phone": "889-520-2888", - "email": "audrey@mescatron.com" - }, - { - "id": 3068, - "guid": "261f43dd-b107-40c1-98a9-d5da9ac9f8c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alyssa Ward", - "company": "Navivacs", - "phone": "808-416-3531", - "email": "alyssa@navivacs.com" - }, - { - "id": 3069, - "guid": "d9a35e8a-03b7-4bbf-aa53-bb61e03c6733", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Morrison", - "company": "Anaframe", - "phone": "854-482-2454", - "email": "taylor@anaframe.com" - }, - { - "id": 3070, - "guid": "d09ebf47-0b4b-4e4a-97d1-f8b410d70fb6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Oldman", - "company": "eEyetanic", - "phone": "811-438-3315", - "email": "brooklyn@eeyetanic.com" - }, - { - "id": 3071, - "guid": "44efcb7f-d9c7-41ca-b75c-c7356dad7417", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia WifKinson", - "company": "Superscope", - "phone": "868-436-2578", - "email": "julia@superscope.com" - }, - { - "id": 3072, - "guid": "96fc96f3-e443-4109-809d-9fd54e0c9350", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Vance", - "company": "Rapigrafix", - "phone": "863-540-2569", - "email": "caroline@rapigrafix.com" - }, - { - "id": 3073, - "guid": "1ad12343-37d8-4bc0-8f1c-bd23d4477de9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Gibbs", - "company": "Systheon", - "phone": "870-457-2514", - "email": "maria@systheon.com" - }, - { - "id": 3074, - "guid": "80cd6c66-835a-42a4-8bc7-0ca03e92e6e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Hamphrey", - "company": "US Infratouch", - "phone": "858-400-2968", - "email": "lauren@us infratouch.com" - }, - { - "id": 3075, - "guid": "6fd8080b-6f11-4a5d-a8e8-ba417d223bed", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Goldman", - "company": "Generola", - "phone": "882-554-2306", - "email": "morgan@generola.com" - }, - { - "id": 3076, - "guid": "87f317b5-a87b-4985-b86b-9b598c25c5d8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Milton", - "company": "Safeagra", - "phone": "870-433-3724", - "email": "ava@safeagra.com" - }, - { - "id": 3077, - "guid": "e26408fe-426a-494a-b594-6766bd6a5ff7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Harrison", - "company": "Celgra", - "phone": "831-545-2488", - "email": "avery@celgra.com" - }, - { - "id": 3078, - "guid": "6e12d48b-098b-4c86-81a6-2613440074b4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Molligan", - "company": "Conotomics", - "phone": "861-545-2079", - "email": "ashley@conotomics.com" - }, - { - "id": 3079, - "guid": "c4dffce2-67bb-44b9-8820-88de4c770ef5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Neal", - "company": "Qualserve", - "phone": "899-499-2499", - "email": "andrea@qualserve.com" - }, - { - "id": 3080, - "guid": "cb2d52b8-2c48-4fae-87c2-f2c896cfb9a9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sarah Gibbs", - "company": "Rapigrafix", - "phone": "887-424-3275", - "email": "sarah@rapigrafix.com" - }, - { - "id": 3081, - "guid": "34e4046e-7ca6-4eac-91a1-1448620a6787", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Nathan", - "company": "eSteganoergy", - "phone": "837-563-2711", - "email": "mya@esteganoergy.com" - }, - { - "id": 3082, - "guid": "a09365af-5b22-4a1f-b811-c2e27f0ee17b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila Oldman", - "company": "Idmax", - "phone": "895-481-2087", - "email": "camila@idmax.com" - }, - { - "id": 3083, - "guid": "dae2b1dd-b694-4199-9048-1f2242df8dd3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Goodman", - "company": "Mescatron", - "phone": "887-593-3882", - "email": "alexis@mescatron.com" - }, - { - "id": 3084, - "guid": "6bcda81f-ccb0-4111-b8fe-07b9a8ac27ca", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Waller", - "company": "Generola", - "phone": "840-470-2592", - "email": "layla@generola.com" - }, - { - "id": 3085, - "guid": "54f52f6c-a83e-4be3-a385-80bf388e0dd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Nathan", - "company": "Turbomart", - "phone": "899-481-3137", - "email": "anna@turbomart.com" - }, - { - "id": 3086, - "guid": "6dd9c1b6-c1ca-4274-9b48-50b6c119fefe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Warren", - "company": "Netseco", - "phone": "847-408-3573", - "email": "avery@netseco.com" - }, - { - "id": 3087, - "guid": "255c3dbd-b35a-4237-aafc-f2156e1817b6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Miller", - "company": "Celgra", - "phone": "892-440-3998", - "email": "amelia@celgra.com" - }, - { - "id": 3088, - "guid": "2278a6bb-72d4-4b24-b135-1aa8ab49402e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Gustman", - "company": "Infraique", - "phone": "825-565-2971", - "email": "aaliyah@infraique.com" - }, - { - "id": 3089, - "guid": "468efe19-4d46-4998-ab9b-dd8cc07a5a10", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Bush", - "company": "Quintegrity", - "phone": "880-464-2007", - "email": "bella@quintegrity.com" - }, - { - "id": 3090, - "guid": "4a131fdd-aee3-42dc-99e9-504116a636df", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Gibbs", - "company": "Compuamerica", - "phone": "869-449-2959", - "email": "nevaeh@compuamerica.com" - }, - { - "id": 3091, - "guid": "7d245502-b736-4ecf-9c73-bb9d34591a98", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Hawkins", - "company": "Hypervaco", - "phone": "806-568-3542", - "email": "brianna@hypervaco.com" - }, - { - "id": 3092, - "guid": "850a5d20-029d-4974-8f58-620ef73c5515", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Carey", - "company": "Mescatron", - "phone": "814-421-3759", - "email": "brooklyn@mescatron.com" - }, - { - "id": 3093, - "guid": "92c84cd3-fa02-4bee-80ee-f77451a722db", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Timmons", - "company": "Polytheon", - "phone": "884-446-3926", - "email": "claire@polytheon.com" - }, - { - "id": 3094, - "guid": "a46c9d01-885d-4bb2-adc6-86ff8d6489b1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Gustman", - "company": "Infragraph", - "phone": "852-500-2529", - "email": "evelyn@infragraph.com" - }, - { - "id": 3095, - "guid": "fd793347-a930-4627-9d29-54b459d818d1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Daniels", - "company": "SysUSA", - "phone": "881-434-2298", - "email": "kaylee@sysusa.com" - }, - { - "id": 3096, - "guid": "a0fa6c81-39c1-4810-b248-120a466bbb14", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Higgins", - "company": "RoboAerlogix", - "phone": "879-427-3897", - "email": "trinity@roboaerlogix.com" - }, - { - "id": 3097, - "guid": "8eb5581c-df17-4856-beb6-f86ba695eddb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Brickman", - "company": "Techtron", - "phone": "881-516-2192", - "email": "taylor@techtron.com" - }, - { - "id": 3098, - "guid": "1ee3f8a0-d0e9-478b-94df-bc0e4fb4ced2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Ward", - "company": "Navivacs", - "phone": "842-494-2134", - "email": "evelyn@navivacs.com" - }, - { - "id": 3099, - "guid": "59d86534-f964-4f8a-8ec4-5f9d7701cc4c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Gate", - "company": "Indisco", - "phone": "804-536-3033", - "email": "alyssa@indisco.com" - }, - { - "id": 3100, - "guid": "8e732064-afbd-419b-8608-7bd11797a532", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Stanley", - "company": "Turbomart", - "phone": "852-563-3163", - "email": "jasmine@turbomart.com" - }, - { - "id": 3101, - "guid": "2f5a4372-e46f-4583-8b94-c0268da24e4a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria Hardman", - "company": "Venconix", - "phone": "874-518-3806", - "email": "maria@venconix.com" - }, - { - "id": 3102, - "guid": "5eaf4b23-1bc5-4df0-9722-f85eaa848f34", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Chesterton", - "company": "Enlogia", - "phone": "801-561-3671", - "email": "molly@enlogia.com" - }, - { - "id": 3103, - "guid": "8896fb4f-4b9c-48f4-b38c-0d591628e557", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney White", - "company": "Robotemplate", - "phone": "806-514-2437", - "email": "sydney@robotemplate.com" - }, - { - "id": 3104, - "guid": "7594e115-68c1-4b4b-9153-e07d8b85a7c2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kimberly Waller", - "company": "Teraserv", - "phone": "879-505-3615", - "email": "kimberly@teraserv.com" - }, - { - "id": 3105, - "guid": "e2900714-53cf-419c-9fe7-16d132ef7f21", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Thomson", - "company": "Tekcar", - "phone": "880-428-3002", - "email": "sophie@tekcar.com" - }, - { - "id": 3106, - "guid": "6000f0ba-20b6-43dd-935d-6646b231c746", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Oliver", - "company": "Westtomik", - "phone": "862-522-3714", - "email": "victoria@westtomik.com" - }, - { - "id": 3107, - "guid": "66638c62-f487-4ef4-afc6-1a0f9b1a6397", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Higgins", - "company": "Fibroserve", - "phone": "872-481-3948", - "email": "layla@fibroserve.com" - }, - { - "id": 3108, - "guid": "7ef7aa73-2a93-47ff-a48f-2bcd642bfbd7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Webster", - "company": "Robotemplate", - "phone": "898-532-2022", - "email": "gabrielle@robotemplate.com" - }, - { - "id": 3109, - "guid": "9a6d4f22-a908-4ebb-894c-b9d24e85547a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Goodman", - "company": "Syssoft", - "phone": "877-512-2453", - "email": "anna@syssoft.com" - }, - { - "id": 3110, - "guid": "bda5dccd-73a5-4763-aa21-15598f45efd0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Vaughan", - "company": "Xeicon", - "phone": "892-403-3013", - "email": "paige@xeicon.com" - }, - { - "id": 3111, - "guid": "76e5e57d-c215-4745-ac4e-6de2f34bf578", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Thomson", - "company": "Openserve", - "phone": "819-434-3515", - "email": "aubrey@openserve.com" - }, - { - "id": 3112, - "guid": "72498c66-146f-45a9-809b-e50ac1e68d23", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Brickman", - "company": "Polytheon", - "phone": "802-464-3865", - "email": "morgan@polytheon.com" - }, - { - "id": 3113, - "guid": "b95eec84-c7b3-4f84-9248-6de51b3d0365", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Haig", - "company": "Ameritron", - "phone": "818-573-3639", - "email": "hailey@ameritron.com" - }, - { - "id": 3114, - "guid": "33ab6b10-0f19-41f8-8874-e28be4ed5010", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Conors", - "company": "Robocomm", - "phone": "899-515-3249", - "email": "taylor@robocomm.com" - }, - { - "id": 3115, - "guid": "ddb597d3-6d07-41c6-b868-a7825f2aa398", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Campbell", - "company": "Rapigrafix", - "phone": "836-523-2494", - "email": "isabelle@rapigrafix.com" - }, - { - "id": 3116, - "guid": "388faabc-33fb-489e-b161-04de478967e1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Wood", - "company": "Raylog", - "phone": "891-480-2072", - "email": "abigail@raylog.com" - }, - { - "id": 3117, - "guid": "64a859c5-0f40-4b64-8693-144abd710e28", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Watson", - "company": "Westgate", - "phone": "840-575-2456", - "email": "makayla@westgate.com" - }, - { - "id": 3118, - "guid": "4100e8db-2ceb-476a-bb04-e7b4a07bde74", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aubrey Miller", - "company": "Robotomic", - "phone": "840-449-3340", - "email": "aubrey@robotomic.com" - }, - { - "id": 3119, - "guid": "3fcb9972-c3a8-4547-89d0-0884e0b07c5d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Cramer", - "company": "Idmax", - "phone": "864-526-2347", - "email": "hailey@idmax.com" - }, - { - "id": 3120, - "guid": "8ef38639-5ce6-44b6-ba23-6a2ce06b55a9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Conors", - "company": "Aprama", - "phone": "836-547-3930", - "email": "serenity@aprama.com" - }, - { - "id": 3121, - "guid": "243b1449-7d6f-4ebc-85ce-9cffcc8d79c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Galbraith", - "company": "Fibrotouch", - "phone": "812-446-3051", - "email": "payton@fibrotouch.com" - }, - { - "id": 3122, - "guid": "9e9ebfae-7bde-452a-a4e1-04cc08e86017", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Waller", - "company": "Netsystems", - "phone": "846-400-2185", - "email": "bailey@netsystems.com" - }, - { - "id": 3123, - "guid": "73e8e9d5-fd82-4a5c-a9cd-00923db7207a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Stanley", - "company": "Multitiqua", - "phone": "890-481-2591", - "email": "addison@multitiqua.com" - }, - { - "id": 3124, - "guid": "87d3d68f-135a-4df0-ad7f-9677be7f553e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Gate", - "company": "Interliant", - "phone": "844-479-3308", - "email": "eva@interliant.com" - }, - { - "id": 3125, - "guid": "d738ade9-1ae0-4cb1-9f91-3f791dc4cb80", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Oldman", - "company": "Jamrola", - "phone": "842-489-3322", - "email": "emily@jamrola.com" - }, - { - "id": 3126, - "guid": "c11f5a0e-049a-4107-8dc1-53d3b3f7f26b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Goldman", - "company": "Anaframe", - "phone": "899-443-3323", - "email": "katherine@anaframe.com" - }, - { - "id": 3127, - "guid": "418b72b7-6708-4623-9f2c-9767ac577312", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Claire Gilbert", - "company": "iOptystix", - "phone": "802-579-3701", - "email": "claire@ioptystix.com" - }, - { - "id": 3128, - "guid": "0a92ed84-97df-489c-8f1e-bc77f32705b8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia Carroll", - "company": "Mescaridic", - "phone": "820-443-3405", - "email": "sofia@mescaridic.com" - }, - { - "id": 3129, - "guid": "b5170b8a-38a1-45e3-89a7-48369d2ec57b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lillian Hodges", - "company": "Pacwest", - "phone": "880-436-2130", - "email": "lillian@pacwest.com" - }, - { - "id": 3130, - "guid": "4113b297-4cf3-46ba-b9df-08dc7948e9ce", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Goldman", - "company": "Robotomic", - "phone": "850-599-3646", - "email": "katelyn@robotomic.com" - }, - { - "id": 3131, - "guid": "39256e69-1140-4aba-99b7-e5ab8d960167", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Clapton", - "company": "Robocomm", - "phone": "865-551-3335", - "email": "hannah@robocomm.com" - }, - { - "id": 3132, - "guid": "c3776a77-8c5c-4988-889e-1005b8b39b9e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Chesterton", - "company": "Sontopia", - "phone": "885-511-3040", - "email": "riley@sontopia.com" - }, - { - "id": 3133, - "guid": "3d43c4c2-68ff-4abb-9cf4-91f6e6d5f6c2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila Oldman", - "company": "Proline", - "phone": "872-570-2871", - "email": "camila@proline.com" - }, - { - "id": 3134, - "guid": "01e9f2aa-ea85-4e6c-a640-3fb57ddcf568", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Oliver", - "company": "Ameritron", - "phone": "857-498-2917", - "email": "camila@ameritron.com" - }, - { - "id": 3135, - "guid": "83690dfc-621a-464f-8958-2e71941cbd9a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Genesis Sheldon", - "company": "Nanobanc", - "phone": "813-578-3838", - "email": "genesis@nanobanc.com" - }, - { - "id": 3136, - "guid": "625af293-ac39-4853-b3db-65027e663fb9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Otis", - "company": "iQualcar", - "phone": "848-494-3163", - "email": "genesis@iqualcar.com" - }, - { - "id": 3137, - "guid": "aeaa1981-ecf2-499a-8ba4-41d8ba54358b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Day", - "company": "Polytheon", - "phone": "873-532-2466", - "email": "aaliyah@polytheon.com" - }, - { - "id": 3138, - "guid": "1329b11b-0481-46b9-899f-b8f858ffbd96", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Turner", - "company": "Unconix", - "phone": "895-529-2902", - "email": "faith@unconix.com" - }, - { - "id": 3139, - "guid": "85b2f86c-c4e7-492a-b585-12c499210fb2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Neal", - "company": "Polytheon", - "phone": "816-404-2320", - "email": "emily@polytheon.com" - }, - { - "id": 3140, - "guid": "27a347d8-deb5-4e32-8fbe-79d24885ae7b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Carter", - "company": "Gigaura", - "phone": "853-577-3706", - "email": "samantha@gigaura.com" - }, - { - "id": 3141, - "guid": "a6f4d7fd-cc1c-4e22-91ba-c3ad62d6773a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Adamson", - "company": "Xeicon", - "phone": "816-598-2496", - "email": "sofia@xeicon.com" - }, - { - "id": 3142, - "guid": "529b6f3e-5f6a-49f2-8f11-5e875eca3a8a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jocelyn Haig", - "company": "Technogra", - "phone": "884-558-3102", - "email": "jocelyn@technogra.com" - }, - { - "id": 3143, - "guid": "cf476ba7-fd70-4c36-acc2-857964bb27f0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Gilson", - "company": "US Omnigraphik", - "phone": "892-481-2977", - "email": "charlotte@us omnigraphik.com" - }, - { - "id": 3144, - "guid": "8bf9a5e2-c569-458c-8250-edda1bbfeaa3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Winter", - "company": "InfoAirway", - "phone": "880-551-2869", - "email": "mariah@infoairway.com" - }, - { - "id": 3145, - "guid": "f55180e8-c5d3-46a7-8eb9-3eb7333c954d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Freeman", - "company": "Teratopia", - "phone": "871-432-3555", - "email": "mia@teratopia.com" - }, - { - "id": 3146, - "guid": "e74f4a4d-9b30-4cf1-b042-c7a69c109588", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Clapton", - "company": "Teratopia", - "phone": "830-586-3087", - "email": "zoe@teratopia.com" - }, - { - "id": 3147, - "guid": "0ca896b8-e01b-4ede-ac2f-e4a37cf9c0fb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Oldman", - "company": "Robotomic", - "phone": "865-536-2516", - "email": "payton@robotomic.com" - }, - { - "id": 3148, - "guid": "6b0c45fd-a650-4eb6-be54-c456c47e368a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Oliver", - "company": "Fibrotouch", - "phone": "840-470-3563", - "email": "anna@fibrotouch.com" - }, - { - "id": 3149, - "guid": "4c0f4296-9f2c-4879-a95a-02c74b99bf76", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Bella Davidson", - "company": "Enlogia", - "phone": "879-512-3440", - "email": "bella@enlogia.com" - }, - { - "id": 3150, - "guid": "0d2897f4-ff18-4d97-b611-eedfc7dbb00c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Osborne", - "company": "iOptystix", - "phone": "821-514-3564", - "email": "amelia@ioptystix.com" - }, - { - "id": 3151, - "guid": "402c11f3-07fa-4956-8d79-e3b26f7ac6ad", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Abramson", - "company": "Videobanc", - "phone": "877-579-2261", - "email": "kaylee@videobanc.com" - }, - { - "id": 3152, - "guid": "1ea6ad7b-2614-499b-8136-0b656ec3741a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Sheldon", - "company": "Pacwest", - "phone": "888-436-3574", - "email": "kaylee@pacwest.com" - }, - { - "id": 3153, - "guid": "01f50a62-f767-42ec-b158-ac501490b432", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Sheldon", - "company": "InfoAirway", - "phone": "896-511-2385", - "email": "avery@infoairway.com" - }, - { - "id": 3154, - "guid": "e61818ff-7b7d-4e0e-bbb9-788e9d64e948", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Turner", - "company": "Westmedia", - "phone": "882-468-2732", - "email": "sarah@westmedia.com" - }, - { - "id": 3155, - "guid": "e69b154a-0157-4424-a6b4-c0512ecee5db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Oswald", - "company": "Cryptotegrity", - "phone": "809-505-3205", - "email": "lauren@cryptotegrity.com" - }, - { - "id": 3156, - "guid": "877539ea-75c0-45e4-be48-95b0ddfd3c76", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Cook", - "company": "Netsystems", - "phone": "872-415-3680", - "email": "sydney@netsystems.com" - }, - { - "id": 3157, - "guid": "75b045e1-4c32-4da9-ae4d-51e4ac9eb881", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Brown", - "company": "Truegate", - "phone": "861-522-2104", - "email": "leah@truegate.com" - }, - { - "id": 3158, - "guid": "8613e83f-a246-4870-a417-5c820d3deee5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Brooks", - "company": "Infraique", - "phone": "801-526-3543", - "email": "eva@infraique.com" - }, - { - "id": 3159, - "guid": "73b8a2a0-44dc-4238-bde8-b163a1053173", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Hodges", - "company": "Orthosoft", - "phone": "831-429-2304", - "email": "makayla@orthosoft.com" - }, - { - "id": 3160, - "guid": "ec8b106f-d332-4876-8eb3-22499cc7c5b1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Gibbs", - "company": "Xeicon", - "phone": "829-565-2577", - "email": "peyton@xeicon.com" - }, - { - "id": 3161, - "guid": "014882c1-c42d-46de-86d8-eb88eb0bc835", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Ford", - "company": "Multitiqua", - "phone": "888-509-3588", - "email": "nevaeh@multitiqua.com" - }, - { - "id": 3162, - "guid": "d8271cf4-9726-48c8-9ca5-b332f7778a47", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Vaughan", - "company": "Tekcar", - "phone": "889-478-2151", - "email": "peyton@tekcar.com" - }, - { - "id": 3163, - "guid": "90a793d9-d02e-4b73-808a-98061f5b3f89", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Carroll", - "company": "Mescatron", - "phone": "889-569-2189", - "email": "brooke@mescatron.com" - }, - { - "id": 3164, - "guid": "03c44a25-5b10-4b43-a24e-298583c07965", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Gilmore", - "company": "US Infratouch", - "phone": "896-418-3884", - "email": "madeline@us infratouch.com" - }, - { - "id": 3165, - "guid": "41e58cbd-8aec-4ec2-8aab-50118b701c21", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Chandter", - "company": "Anaframe", - "phone": "880-404-3028", - "email": "gianna@anaframe.com" - }, - { - "id": 3166, - "guid": "b60f1add-c542-4d5f-a0f6-b19f8f741c5d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Milton", - "company": "Netsystems", - "phone": "880-546-2313", - "email": "isabelle@netsystems.com" - }, - { - "id": 3167, - "guid": "c8b7adcb-8ab1-4afd-96fa-17ea850d9801", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Hawkins", - "company": "Transtouch", - "phone": "807-538-3989", - "email": "serenity@transtouch.com" - }, - { - "id": 3168, - "guid": "5b65ad3b-ad6f-49a9-8615-381318220174", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Sherlock", - "company": "Gigaura", - "phone": "824-450-2918", - "email": "faith@gigaura.com" - }, - { - "id": 3169, - "guid": "965ca948-1370-4e7e-8af7-01c81513d9c0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Conors", - "company": "Idmax", - "phone": "861-488-3191", - "email": "brianna@idmax.com" - }, - { - "id": 3170, - "guid": "08cd8375-ee36-4522-8d12-8aac1130ad92", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Ogden", - "company": "Navivacs", - "phone": "803-444-2864", - "email": "vanessa@navivacs.com" - }, - { - "id": 3171, - "guid": "5c5c2503-bad1-4569-8e57-f694865649ad", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Miln", - "company": "InfoAirway", - "phone": "804-431-2872", - "email": "sarah@infoairway.com" - }, - { - "id": 3172, - "guid": "d430182e-107c-4773-9ed7-060838a301c9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Harrison", - "company": "Quintegrity", - "phone": "802-468-2237", - "email": "abigail@quintegrity.com" - }, - { - "id": 3173, - "guid": "988c9ead-eb43-4277-a3de-2bda68c31d12", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Smith", - "company": "Robocomm", - "phone": "818-482-3170", - "email": "katherine@robocomm.com" - }, - { - "id": 3174, - "guid": "fc59127a-0bea-4617-9b3e-177d240a6750", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Clapton", - "company": "Anagraph", - "phone": "875-591-2886", - "email": "grace@anagraph.com" - }, - { - "id": 3175, - "guid": "624c5a88-db4f-4fea-b941-67f1603babb0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ava Timmons", - "company": "Allphysiche", - "phone": "890-477-2924", - "email": "ava@allphysiche.com" - }, - { - "id": 3176, - "guid": "9d0eb787-1890-43d8-a715-297cadac56f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Hodges", - "company": "Orthomedia", - "phone": "861-576-3677", - "email": "sophia@orthomedia.com" - }, - { - "id": 3177, - "guid": "5538f816-9e33-49d1-93c2-0eb1899db573", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Freeman", - "company": "Turbomart", - "phone": "879-431-2863", - "email": "lily@turbomart.com" - }, - { - "id": 3178, - "guid": "36169f54-2a2a-4438-b1f9-f5275012ea5c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Wood", - "company": "iOptystix", - "phone": "879-517-3841", - "email": "serenity@ioptystix.com" - }, - { - "id": 3179, - "guid": "a854b6ab-afc2-46e7-9c6b-2ca6f4a7fa84", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Warren", - "company": "Vencom", - "phone": "853-592-2513", - "email": "zoe@vencom.com" - }, - { - "id": 3180, - "guid": "aea29398-4895-4832-b16b-36ba5eab1399", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Owen", - "company": "Proline", - "phone": "828-597-3380", - "email": "gabriella@proline.com" - }, - { - "id": 3181, - "guid": "e22606b6-2b7e-4ab9-9c5f-d8398eb74ec6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Carroll", - "company": "Aluco", - "phone": "828-415-3801", - "email": "julia@aluco.com" - }, - { - "id": 3182, - "guid": "1a8640fc-7233-4a01-9dac-b8f596bd5eda", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Gate", - "company": "Fibrotopia", - "phone": "829-467-2449", - "email": "aaliyah@fibrotopia.com" - }, - { - "id": 3183, - "guid": "31da52d8-ecf0-46d9-939c-be514ec27e48", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Molligan", - "company": "Conotomics", - "phone": "871-444-2100", - "email": "destiny@conotomics.com" - }, - { - "id": 3184, - "guid": "d24679f9-c8f1-4d4e-978f-9ea64d7babaa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Smith", - "company": "Safetrust", - "phone": "816-437-2143", - "email": "katherine@safetrust.com" - }, - { - "id": 3185, - "guid": "af3ab3eb-bca1-4c0b-9bce-d1975a47fc5f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Hancock", - "company": "Superscope", - "phone": "885-414-2919", - "email": "serenity@superscope.com" - }, - { - "id": 3186, - "guid": "9fd504eb-5286-49fa-bf82-cdc413fcd4a6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooklyn Neal", - "company": "Gigaura", - "phone": "836-417-2573", - "email": "brooklyn@gigaura.com" - }, - { - "id": 3187, - "guid": "c5a86b19-4304-4f92-9cd0-265733805b41", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Youmans", - "company": "Xeicon", - "phone": "876-592-2796", - "email": "isabelle@xeicon.com" - }, - { - "id": 3188, - "guid": "28769102-3f37-4c76-867d-7348526931b9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Gilson", - "company": "Interliant", - "phone": "885-541-3144", - "email": "natalie@interliant.com" - }, - { - "id": 3189, - "guid": "1bcc5331-153b-4f50-bd45-d164f40b578e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Nelson", - "company": "Polytheon", - "phone": "837-571-3338", - "email": "jessica@polytheon.com" - }, - { - "id": 3190, - "guid": "ef68db8a-8bcd-4e0f-937a-3f8cc4158649", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Freeman", - "company": "Safeagra", - "phone": "815-578-3720", - "email": "emily@safeagra.com" - }, - { - "id": 3191, - "guid": "1483f530-422e-4bec-9f1d-2ec789432394", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Webster", - "company": "Robotomic", - "phone": "866-401-2425", - "email": "amelia@robotomic.com" - }, - { - "id": 3192, - "guid": "59f64ebb-4cf5-4ff6-bb5f-09934779de76", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Nathan", - "company": "Mescaridic", - "phone": "812-525-3099", - "email": "avery@mescaridic.com" - }, - { - "id": 3193, - "guid": "e8795a7d-85e8-4d6d-83a3-16c93fa354df", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Carroll", - "company": "Anaframe", - "phone": "880-482-3827", - "email": "serenity@anaframe.com" - }, - { - "id": 3194, - "guid": "429488b5-9ad4-4675-a207-7aa1089c9b53", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Clapton", - "company": "Infragraph", - "phone": "873-539-3086", - "email": "aaliyah@infragraph.com" - }, - { - "id": 3195, - "guid": "68928fa0-e557-48cc-9764-cffa66644076", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Miln", - "company": "Cryptotegrity", - "phone": "842-546-2069", - "email": "alexis@cryptotegrity.com" - }, - { - "id": 3196, - "guid": "1f7b1f5b-8938-4370-853b-414a61b2868e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Campbell", - "company": "iMedconik", - "phone": "893-468-3754", - "email": "sophie@imedconik.com" - }, - { - "id": 3197, - "guid": "6bb8e756-8d9f-4a41-9376-de9ab1a57f70", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Hamphrey", - "company": "Teknoplexon", - "phone": "802-499-2465", - "email": "brooke@teknoplexon.com" - }, - { - "id": 3198, - "guid": "036a7b38-8788-4419-80fe-1b160851a4e5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Harrison", - "company": "Fibrotouch", - "phone": "843-445-3729", - "email": "melanie@fibrotouch.com" - }, - { - "id": 3199, - "guid": "cb3d806b-63db-4f7a-bf2b-6ac9980702f8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Galbraith", - "company": "Nanobanc", - "phone": "886-467-2176", - "email": "julia@nanobanc.com" - }, - { - "id": 3200, - "guid": "1382f366-530c-4474-9405-5c444a271934", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Waller", - "company": "Multitiqua", - "phone": "866-573-2973", - "email": "olivia@multitiqua.com" - }, - { - "id": 3201, - "guid": "2278b6c8-c476-4160-b2e0-90ff1f774752", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mariah Carey", - "company": "Unologic", - "phone": "821-520-2160", - "email": "mariah@unologic.com" - }, - { - "id": 3202, - "guid": "f3264fb8-af61-40e3-a2a4-49048e92bcb2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Chesterton", - "company": "Idmax", - "phone": "818-474-2912", - "email": "ashley@idmax.com" - }, - { - "id": 3203, - "guid": "6f8010d3-2fe8-4c0d-9694-4ab4d9b7d1ab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Chapman", - "company": "Westmedia", - "phone": "821-585-3437", - "email": "brooklyn@westmedia.com" - }, - { - "id": 3204, - "guid": "84372ebc-a3ff-4853-b072-a51441e096a9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Croftoon", - "company": "Anaframe", - "phone": "824-486-2638", - "email": "gabriella@anaframe.com" - }, - { - "id": 3205, - "guid": "42ce6d9f-1007-4a8a-9455-87116ff51e94", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Thorndike", - "company": "Conrama", - "phone": "857-541-3004", - "email": "faith@conrama.com" - }, - { - "id": 3206, - "guid": "db9cf5f5-da89-42c0-a47f-f8a082f7d1ce", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Thomson", - "company": "Robocomm", - "phone": "806-505-3869", - "email": "riley@robocomm.com" - }, - { - "id": 3207, - "guid": "7f614952-9e1f-4b5b-a402-581d62d509dd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Sherlock", - "company": "iMedconik", - "phone": "840-400-2813", - "email": "mya@imedconik.com" - }, - { - "id": 3208, - "guid": "5ce5688c-bcad-4328-a767-08c8ed382aa7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Thomson", - "company": "Titanirola", - "phone": "827-412-2987", - "email": "sofia@titanirola.com" - }, - { - "id": 3209, - "guid": "0b314336-cac7-4023-aa56-dd6e5b5cfa4a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabrielle Carey", - "company": "Syssoft", - "phone": "884-481-3016", - "email": "gabrielle@syssoft.com" - }, - { - "id": 3210, - "guid": "a0ae9736-8ec4-4313-97a0-b19ec5b986e3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Davidson", - "company": "Superscope", - "phone": "852-592-3484", - "email": "lillian@superscope.com" - }, - { - "id": 3211, - "guid": "6745d75a-340e-4b6e-8ef7-cdf109d01bce", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Walkman", - "company": "Pericenta", - "phone": "880-572-3544", - "email": "emma@pericenta.com" - }, - { - "id": 3212, - "guid": "7178919a-231c-414e-9366-f412012eeeb3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Oswald", - "company": "Westmedia", - "phone": "890-406-3142", - "email": "morgan@westmedia.com" - }, - { - "id": 3213, - "guid": "1b14150e-8e9d-446e-a0a4-f064d820a842", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Ford", - "company": "Interliant", - "phone": "859-595-3130", - "email": "sydney@interliant.com" - }, - { - "id": 3214, - "guid": "dd771827-7af2-490a-a6d9-27a5bda062e6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Neal", - "company": "Sontopia", - "phone": "859-597-3329", - "email": "jasmine@sontopia.com" - }, - { - "id": 3215, - "guid": "5a6f9f25-459f-40b5-94b2-c33ae18c96b3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabriella Neal", - "company": "iSkyvaco", - "phone": "859-413-2553", - "email": "gabriella@iskyvaco.com" - }, - { - "id": 3216, - "guid": "150f3745-bf5a-4556-ac74-7851d963c7f0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Davidson", - "company": "US Omnigraphik", - "phone": "805-457-3427", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 3217, - "guid": "8c7433d1-5b8e-418f-a1e1-70ab23e2d0f6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jessica Wainwright", - "company": "InfoAirway", - "phone": "869-462-2520", - "email": "jessica@infoairway.com" - }, - { - "id": 3218, - "guid": "7f9baf01-a3c8-48e7-b921-336bca9e06db", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Haig", - "company": "Fibroserve", - "phone": "846-543-3075", - "email": "claire@fibroserve.com" - }, - { - "id": 3219, - "guid": "44e5a067-f92e-49a6-aab6-bc5b9cf4767e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Clapton", - "company": "Openserve", - "phone": "840-468-2757", - "email": "khloe@openserve.com" - }, - { - "id": 3220, - "guid": "bbba9886-574b-4667-ba55-21ff4c5cab13", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Young", - "company": "Anaframe", - "phone": "823-547-3182", - "email": "mackenzie@anaframe.com" - }, - { - "id": 3221, - "guid": "a7c5126d-0795-4b34-9af1-9d9a231583e1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Sheldon", - "company": "iOptystix", - "phone": "829-572-3359", - "email": "valeria@ioptystix.com" - }, - { - "id": 3222, - "guid": "f983f1a8-6f44-42d1-a656-554cc5bfbcf9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Webster", - "company": "Multitiqua", - "phone": "870-401-3620", - "email": "vanessa@multitiqua.com" - }, - { - "id": 3223, - "guid": "3f475c53-8299-467e-9ac6-7449b8c1fff3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Sheldon", - "company": "Anaframe", - "phone": "816-565-2286", - "email": "brooklyn@anaframe.com" - }, - { - "id": 3224, - "guid": "23e21f43-9017-484d-9c24-0582d534f91b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Elizabeth Oliver", - "company": "Steganoconiche", - "phone": "800-488-3246", - "email": "elizabeth@steganoconiche.com" - }, - { - "id": 3225, - "guid": "7b627e0a-b1d1-42b0-83c6-bdd0e2c44498", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Young", - "company": "Techtron", - "phone": "859-459-3284", - "email": "gabrielle@techtron.com" - }, - { - "id": 3226, - "guid": "0347f129-22e2-4547-997f-2adb26b78bf6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Milton", - "company": "Jamrola", - "phone": "844-486-2850", - "email": "abigail@jamrola.com" - }, - { - "id": 3227, - "guid": "0cfc466e-2d22-442e-b6df-1b7f3e27b8da", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Grace Carter", - "company": "Teraserv", - "phone": "810-505-2686", - "email": "grace@teraserv.com" - }, - { - "id": 3228, - "guid": "a42b07ee-acc6-43c2-8786-fe8d4d1209bd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Conors", - "company": "Allnet", - "phone": "851-544-2276", - "email": "leah@allnet.com" - }, - { - "id": 3229, - "guid": "1545b4a5-0fa6-4e47-beb6-42b639c670ac", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Owen", - "company": "Indisco", - "phone": "873-553-2087", - "email": "victoria@indisco.com" - }, - { - "id": 3230, - "guid": "34d904ef-1dc3-41a9-b4bc-0a9d250a3e42", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Freeman", - "company": "Mescatron", - "phone": "826-452-2186", - "email": "jasmine@mescatron.com" - }, - { - "id": 3231, - "guid": "90717cbd-9031-423f-8453-012ca1f47a93", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Thornton", - "company": "Videobanc", - "phone": "884-421-3147", - "email": "avery@videobanc.com" - }, - { - "id": 3232, - "guid": "df538998-c0ae-4f63-9e04-8dcef537c959", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Thomson", - "company": "Conotomics", - "phone": "870-547-2108", - "email": "katelyn@conotomics.com" - }, - { - "id": 3233, - "guid": "725110c0-b057-43f7-8991-7f58e6d0207d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Hardman", - "company": "Inridium", - "phone": "817-571-3844", - "email": "kimberly@inridium.com" - }, - { - "id": 3234, - "guid": "f4291212-17ac-4e23-a4ba-feed67e41816", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Stanley", - "company": "Compuamerica", - "phone": "860-525-3595", - "email": "charlotte@compuamerica.com" - }, - { - "id": 3235, - "guid": "f88d97a5-6541-4a52-86cf-fa678e92fe80", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah White", - "company": "Compuamerica", - "phone": "807-556-2655", - "email": "leah@compuamerica.com" - }, - { - "id": 3236, - "guid": "a1ade9cc-0423-424f-b7ca-5df291ff0487", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Conors", - "company": "Ameritron", - "phone": "870-531-2089", - "email": "trinity@ameritron.com" - }, - { - "id": 3237, - "guid": "ca648406-2f39-4b63-832a-3230af204dbd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Payton Timmons", - "company": "Unologic", - "phone": "857-522-2193", - "email": "payton@unologic.com" - }, - { - "id": 3238, - "guid": "9d2a391b-c574-4dd1-95fd-c9bb78f6b6eb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Warren", - "company": "Compuamerica", - "phone": "864-436-3920", - "email": "riley@compuamerica.com" - }, - { - "id": 3239, - "guid": "466d3770-0a97-4d0e-a080-589e908e5d87", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Cramer", - "company": "Robocomm", - "phone": "898-538-3246", - "email": "sophie@robocomm.com" - }, - { - "id": 3240, - "guid": "9e5ec22e-e8e8-42e0-a081-ee029c41cfb0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Gill", - "company": "Unconix", - "phone": "803-510-2892", - "email": "gabrielle@unconix.com" - }, - { - "id": 3241, - "guid": "4b99e1be-1f23-4a11-be77-042d76cff86c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Campbell", - "company": "Robotomic", - "phone": "892-489-2106", - "email": "jocelyn@robotomic.com" - }, - { - "id": 3242, - "guid": "44845400-34d8-41e1-86b1-44132ba176ab", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Molligan", - "company": "Pacwest", - "phone": "881-576-3390", - "email": "sophia@pacwest.com" - }, - { - "id": 3243, - "guid": "85fa309c-32cc-494c-866d-ba74ea7a5fdf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Brown", - "company": "Tekcar", - "phone": "876-590-3291", - "email": "molly@tekcar.com" - }, - { - "id": 3244, - "guid": "58854b35-95ac-4644-94c3-abfe7946f31a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Adamson", - "company": "Truetomic", - "phone": "852-454-2964", - "email": "katherine@truetomic.com" - }, - { - "id": 3245, - "guid": "c6d30e05-7e6a-4310-8039-f2e0118b1722", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Smith", - "company": "Quintegrity", - "phone": "805-598-2551", - "email": "anna@quintegrity.com" - }, - { - "id": 3246, - "guid": "d779ba5a-81f9-4aa0-a05f-1627caaecf8d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Abramson", - "company": "Openserve", - "phone": "826-422-2831", - "email": "caroline@openserve.com" - }, - { - "id": 3247, - "guid": "99e0819f-2ddf-4615-8fef-1ed1f6bdebb7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Goodman", - "company": "Inridium", - "phone": "886-570-2270", - "email": "ella@inridium.com" - }, - { - "id": 3248, - "guid": "55b1a257-4fbf-48a1-a479-2f26cdcfb160", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Galbraith", - "company": "Aluco", - "phone": "816-440-3145", - "email": "julia@aluco.com" - }, - { - "id": 3249, - "guid": "019321c6-c3f4-43bd-9d6c-c4d36a70805f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Michaelson", - "company": "Syssoft", - "phone": "804-593-3836", - "email": "abigail@syssoft.com" - }, - { - "id": 3250, - "guid": "348d2f36-3259-4eac-81b5-cfe815b67b2e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Young", - "company": "Compuamerica", - "phone": "836-454-3431", - "email": "brianna@compuamerica.com" - }, - { - "id": 3251, - "guid": "1ee430e0-2590-4dd1-a56d-0890abed50aa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Miln", - "company": "Qualserve", - "phone": "867-580-3210", - "email": "kayla@qualserve.com" - }, - { - "id": 3252, - "guid": "aa47726a-5e82-4ea1-b703-94eb890d6d55", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Brown", - "company": "Truegate", - "phone": "894-440-3792", - "email": "kaylee@truegate.com" - }, - { - "id": 3253, - "guid": "31560b59-2818-44a0-86d1-e24d0263eb80", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Cook", - "company": "Cryptotemplate", - "phone": "867-423-3944", - "email": "julia@cryptotemplate.com" - }, - { - "id": 3254, - "guid": "4223b326-3fa6-40fd-ac97-df9c9f3d29ec", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Warren", - "company": "Fibrotouch", - "phone": "881-511-2859", - "email": "alexa@fibrotouch.com" - }, - { - "id": 3255, - "guid": "08588213-2d8d-4d20-ab07-1d7906fd3af6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Brooks", - "company": "Technogra", - "phone": "855-578-3614", - "email": "julia@technogra.com" - }, - { - "id": 3256, - "guid": "7f37ed88-080d-4820-b7fe-3ac4a6b31549", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Paige Miln", - "company": "Indisco", - "phone": "875-449-2355", - "email": "paige@indisco.com" - }, - { - "id": 3257, - "guid": "1e34bb7f-ac31-4471-b9d8-97b2d39a04d5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Murphy", - "company": "Entcast", - "phone": "810-595-2923", - "email": "paige@entcast.com" - }, - { - "id": 3258, - "guid": "99b9ae97-d3e7-4684-87e0-47a4e38831af", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Thomson", - "company": "Videobanc", - "phone": "896-477-2336", - "email": "grace@videobanc.com" - }, - { - "id": 3259, - "guid": "ba558328-29b2-4b0f-830f-5e33d50417e8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Thorndike", - "company": "Xeicon", - "phone": "875-465-2486", - "email": "peyton@xeicon.com" - }, - { - "id": 3260, - "guid": "e1688b5b-fe99-4e41-b631-2ff33917e008", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Carey", - "company": "Steganoconiche", - "phone": "893-533-3904", - "email": "claire@steganoconiche.com" - }, - { - "id": 3261, - "guid": "925e32de-6446-4cf3-b1bc-7a437679a1d2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Carey", - "company": "Cryptotegrity", - "phone": "851-462-3939", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 3262, - "guid": "3ff0d1f8-0487-4112-9831-979531bfc9cf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina Ford", - "company": "Fibrotopia", - "phone": "838-596-2980", - "email": "angelina@fibrotopia.com" - }, - { - "id": 3263, - "guid": "76025909-ba7b-42d6-926f-ee7dc45d646e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Youmans", - "company": "eSteganoergy", - "phone": "821-518-2336", - "email": "kaitlyn@esteganoergy.com" - }, - { - "id": 3264, - "guid": "71a8019f-61a3-4ad9-b15d-c04a6b73a37b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Wood", - "company": "Infraique", - "phone": "828-585-3349", - "email": "kaitlyn@infraique.com" - }, - { - "id": 3265, - "guid": "8feddbb8-8098-4364-a837-cb8ea1168d7e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Oswald", - "company": "Robotomic", - "phone": "882-482-2592", - "email": "lillian@robotomic.com" - }, - { - "id": 3266, - "guid": "2dedeffc-608d-4b2a-8532-d125a1a61e85", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Day", - "company": "iOptystix", - "phone": "876-451-2574", - "email": "caroline@ioptystix.com" - }, - { - "id": 3267, - "guid": "6908d211-4820-4c8c-bd20-360ad2e248d1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Oliver", - "company": "Infragraph", - "phone": "835-581-3670", - "email": "molly@infragraph.com" - }, - { - "id": 3268, - "guid": "fcad5699-5f17-413f-a652-c733108a17a2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Campbell", - "company": "Thermotomic", - "phone": "890-482-3460", - "email": "jocelyn@thermotomic.com" - }, - { - "id": 3269, - "guid": "939c6ad9-4bff-4e0a-b7d2-cba8b87ad440", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mariah Gate", - "company": "Infragraph", - "phone": "821-514-2967", - "email": "mariah@infragraph.com" - }, - { - "id": 3270, - "guid": "685f1f40-c5eb-4132-82a7-9fee5ae260a0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Creighton", - "company": "eSteganoergy", - "phone": "822-595-4000", - "email": "kylie@esteganoergy.com" - }, - { - "id": 3271, - "guid": "6c3ef35f-e7a6-4d7b-bb3a-9b639c4b4e5c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Thorndike", - "company": "Orthomedia", - "phone": "897-434-2526", - "email": "bailey@orthomedia.com" - }, - { - "id": 3272, - "guid": "30f11d2d-20fd-4398-9d8a-782ee2220c53", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Cook", - "company": "Xeicon", - "phone": "801-594-2922", - "email": "layla@xeicon.com" - }, - { - "id": 3273, - "guid": "45035d8d-01ea-449a-be9c-2e7a7a189cf7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Gilmore", - "company": "Nanobanc", - "phone": "806-440-2448", - "email": "jasmine@nanobanc.com" - }, - { - "id": 3274, - "guid": "84c4bd9e-5f0d-4570-bdfa-42e7bd22a577", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Timmons", - "company": "eSteganoergy", - "phone": "819-597-3452", - "email": "olivia@esteganoergy.com" - }, - { - "id": 3275, - "guid": "a86d9d44-bea6-4013-a551-cbce81ab5073", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Samantha Miln", - "company": "Westmedia", - "phone": "823-558-3899", - "email": "samantha@westmedia.com" - }, - { - "id": 3276, - "guid": "e00e9e36-37af-4557-8188-b81613645a8f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Sheldon", - "company": "Teraserv", - "phone": "846-599-2531", - "email": "aubrey@teraserv.com" - }, - { - "id": 3277, - "guid": "ab0f5861-374a-4be1-8d91-f217755bcc54", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Ford", - "company": "Ameritron", - "phone": "880-404-2433", - "email": "molly@ameritron.com" - }, - { - "id": 3278, - "guid": "36d00e6d-6707-4f2d-a140-cf43771158e2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Charlotte Molligan", - "company": "Westtomik", - "phone": "855-462-3778", - "email": "charlotte@westtomik.com" - }, - { - "id": 3279, - "guid": "28648627-2bb0-4cdb-92bf-949f88f7bad1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gianna Campbell", - "company": "US Omnigraphik", - "phone": "845-467-3607", - "email": "gianna@us omnigraphik.com" - }, - { - "id": 3280, - "guid": "90343ac5-4d05-432a-8674-8ed7fc75a829", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Thorndike", - "company": "Idmax", - "phone": "827-574-3183", - "email": "katelyn@idmax.com" - }, - { - "id": 3281, - "guid": "c848b2f7-eddb-4b27-b05d-aa2c36cd9206", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mackenzie Waller", - "company": "Inridium", - "phone": "824-528-2282", - "email": "mackenzie@inridium.com" - }, - { - "id": 3282, - "guid": "39094cea-009a-4dbb-a53d-2aa6f46bb95a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Otis", - "company": "Openserve", - "phone": "805-560-2143", - "email": "bella@openserve.com" - }, - { - "id": 3283, - "guid": "c5fbc95d-ea03-4d02-92d6-b450f00881ab", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Hancock", - "company": "Qualserve", - "phone": "823-600-2633", - "email": "kylie@qualserve.com" - }, - { - "id": 3284, - "guid": "70dd73bd-64a8-4a80-a299-ce691011f630", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Vaughan", - "company": "Qualserve", - "phone": "832-440-3325", - "email": "hannah@qualserve.com" - }, - { - "id": 3285, - "guid": "f9fa8691-62a1-493b-95d9-f02d66bbb256", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke Hancock", - "company": "Enlogia", - "phone": "805-588-3310", - "email": "brooke@enlogia.com" - }, - { - "id": 3286, - "guid": "ab14c766-12f6-4879-9072-b3f877c3a7b8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Nash", - "company": "Westtomik", - "phone": "856-539-3027", - "email": "melanie@westtomik.com" - }, - { - "id": 3287, - "guid": "65230856-d2d6-4dc5-afb8-8058ed074444", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Oswald", - "company": "Hypervaco", - "phone": "809-561-3800", - "email": "faith@hypervaco.com" - }, - { - "id": 3288, - "guid": "db2ce8ad-ece2-4a8a-8d21-2d847540de18", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Winter", - "company": "Netseco", - "phone": "816-407-3611", - "email": "alyssa@netseco.com" - }, - { - "id": 3289, - "guid": "580dc6cf-d65e-4f33-a3e0-06128f3dad87", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Milton", - "company": "Qualserve", - "phone": "845-543-2154", - "email": "taylor@qualserve.com" - }, - { - "id": 3290, - "guid": "40933ba8-598d-497f-9015-2820bd58d4b0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Milton", - "company": "Raylog", - "phone": "824-462-3906", - "email": "layla@raylog.com" - }, - { - "id": 3291, - "guid": "36fe8f4f-1b9a-4797-8f96-917db436a5c7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Conors", - "company": "Quintegrity", - "phone": "810-519-3805", - "email": "zoey@quintegrity.com" - }, - { - "id": 3292, - "guid": "9de31796-5d94-4551-8faa-1c0653ec74bd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Creighton", - "company": "OpKeycomm", - "phone": "862-445-3873", - "email": "emily@opkeycomm.com" - }, - { - "id": 3293, - "guid": "4604b0fc-6f85-43b8-a292-da0022b253b5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Gill", - "company": "Robocomm", - "phone": "865-419-2075", - "email": "angelina@robocomm.com" - }, - { - "id": 3294, - "guid": "97bf2275-84bf-43de-b3c5-9b83c12632fa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Stanley", - "company": "Fibroserve", - "phone": "852-500-2683", - "email": "abigail@fibroserve.com" - }, - { - "id": 3295, - "guid": "3f959cf8-68fe-4886-a4a2-6622955ed43d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Ford", - "company": "Fibroserve", - "phone": "856-424-3299", - "email": "ashley@fibroserve.com" - }, - { - "id": 3296, - "guid": "b3226c86-8f9b-4349-9f26-f3457468bc16", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophie Brooks", - "company": "Venconix", - "phone": "898-448-3087", - "email": "sophie@venconix.com" - }, - { - "id": 3297, - "guid": "485a49c0-912b-4716-9d9b-e79f547c83cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Nathan", - "company": "Compuamerica", - "phone": "866-593-3498", - "email": "aaliyah@compuamerica.com" - }, - { - "id": 3298, - "guid": "34934bab-3cb8-46e1-8e22-3421865b2b07", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Carrington", - "company": "Infraique", - "phone": "815-559-2485", - "email": "vanessa@infraique.com" - }, - { - "id": 3299, - "guid": "2e31b18d-0ba7-4b81-8d0c-28d8514889bb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Vance", - "company": "Teratopia", - "phone": "848-496-3604", - "email": "ashley@teratopia.com" - }, - { - "id": 3300, - "guid": "5cafdc54-16db-4769-9c65-0576c863d07d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alyssa Warren", - "company": "Ameritron", - "phone": "804-557-2972", - "email": "alyssa@ameritron.com" - }, - { - "id": 3301, - "guid": "098aab73-4bb4-4fbd-8912-5483e256f99b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Carey", - "company": "Turbomart", - "phone": "824-458-3820", - "email": "mackenzie@turbomart.com" - }, - { - "id": 3302, - "guid": "39b5f3c2-0f37-4f4d-a92b-c074aa741e57", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Wesley", - "company": "Conotomics", - "phone": "837-438-2181", - "email": "zoe@conotomics.com" - }, - { - "id": 3303, - "guid": "e2982c82-653b-4f0a-87cb-6d4597f5e875", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Freeman", - "company": "eEyetanic", - "phone": "862-513-3123", - "email": "aubrey@eeyetanic.com" - }, - { - "id": 3304, - "guid": "f2f3fd69-b56a-4493-adc5-1f3b91e15c31", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Hodges", - "company": "Airdyne", - "phone": "875-565-2178", - "email": "bailey@airdyne.com" - }, - { - "id": 3305, - "guid": "c9a2e9a9-27be-4b48-9349-625f67bc4c14", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Charlson", - "company": "Fibroserve", - "phone": "810-497-2038", - "email": "zoe@fibroserve.com" - }, - { - "id": 3306, - "guid": "ba823fc4-302c-4dba-adcb-4fded0e8b818", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Mercer", - "company": "Gigaura", - "phone": "885-570-2224", - "email": "serenity@gigaura.com" - }, - { - "id": 3307, - "guid": "bc06f2cb-953b-4263-9e2e-d89a48b83f67", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Thornton", - "company": "SysUSA", - "phone": "898-543-3118", - "email": "maya@sysusa.com" - }, - { - "id": 3308, - "guid": "49562ee2-5584-487d-a64b-475c3dfd2ca4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Vance", - "company": "Nanobanc", - "phone": "878-521-3771", - "email": "evelyn@nanobanc.com" - }, - { - "id": 3309, - "guid": "4d1f75f3-c8c9-4588-8ed1-d177c48bc087", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Stanley", - "company": "Openserve", - "phone": "822-435-3526", - "email": "lillian@openserve.com" - }, - { - "id": 3310, - "guid": "0559260e-9aa9-451f-b41b-c158ca891235", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Day", - "company": "Truegate", - "phone": "879-486-3735", - "email": "destiny@truegate.com" - }, - { - "id": 3311, - "guid": "cb6a930d-5702-4d82-88c9-2dde888a59a3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Gibbs", - "company": "Nanobanc", - "phone": "874-500-3436", - "email": "autumn@nanobanc.com" - }, - { - "id": 3312, - "guid": "8c23cce8-8741-46ab-9c98-aaf2d938e66d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Oliver", - "company": "Robotemplate", - "phone": "870-549-3351", - "email": "peyton@robotemplate.com" - }, - { - "id": 3313, - "guid": "8c0ee7e0-fd9f-4a82-b3a9-e4fce45e6da0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Youmans", - "company": "iMedconik", - "phone": "897-570-2504", - "email": "riley@imedconik.com" - }, - { - "id": 3314, - "guid": "672f926e-69c1-4e37-8302-e019c98ca89d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Timmons", - "company": "Mescaridic", - "phone": "844-516-2868", - "email": "ava@mescaridic.com" - }, - { - "id": 3315, - "guid": "4f7b0657-e513-499e-8bb5-34cf4a44dc92", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Molly Miers", - "company": "Anaframe", - "phone": "815-559-2898", - "email": "molly@anaframe.com" - }, - { - "id": 3316, - "guid": "c85cb057-c400-4252-b3ee-650a60df78de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Waller", - "company": "Teknoplexon", - "phone": "833-465-2505", - "email": "bella@teknoplexon.com" - }, - { - "id": 3317, - "guid": "c8c8595b-22fe-4beb-9d43-1bf58bb64636", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Young", - "company": "Conrama", - "phone": "828-440-3489", - "email": "kylie@conrama.com" - }, - { - "id": 3318, - "guid": "28f0553c-60bc-466a-a11b-90d51ccc196d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Hancock", - "company": "Venconix", - "phone": "892-484-3149", - "email": "madelyn@venconix.com" - }, - { - "id": 3319, - "guid": "d1ae7cbe-b6e9-4b4a-824e-1c98b092e269", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Owen", - "company": "Pericenta", - "phone": "842-519-3833", - "email": "faith@pericenta.com" - }, - { - "id": 3320, - "guid": "e52492ca-2710-4a75-8cb4-21486cccbdc6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Ogden", - "company": "Pericenta", - "phone": "849-506-2618", - "email": "mariah@pericenta.com" - }, - { - "id": 3321, - "guid": "69a77245-8f0b-494c-8cee-f55633dfa410", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Genesis Day", - "company": "Truegate", - "phone": "830-562-3524", - "email": "genesis@truegate.com" - }, - { - "id": 3322, - "guid": "0057b1d1-329b-4a03-a8af-e7b62694bda6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Nathan", - "company": "Interliant", - "phone": "870-596-2016", - "email": "anna@interliant.com" - }, - { - "id": 3323, - "guid": "d49a60ac-0d9a-463b-8e54-fe4078a88f39", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Hawkins", - "company": "Vencom", - "phone": "824-423-2864", - "email": "sarah@vencom.com" - }, - { - "id": 3324, - "guid": "019b00e1-43b6-45bb-af26-5cccb8ff1718", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Day", - "company": "Anagraph", - "phone": "816-441-3838", - "email": "victoria@anagraph.com" - }, - { - "id": 3325, - "guid": "a8ef212c-3dc5-4d3b-b466-33a0a5c10df6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Brickman", - "company": "Keytheon", - "phone": "843-504-3131", - "email": "alexandra@keytheon.com" - }, - { - "id": 3326, - "guid": "944e8a8c-9e6c-4097-8813-db6caff43787", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Fulton", - "company": "Mescatron", - "phone": "808-520-3203", - "email": "zoe@mescatron.com" - }, - { - "id": 3327, - "guid": "0b8e55d0-370a-4840-b2d0-ee2cde0fc713", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Oldridge", - "company": "Aluco", - "phone": "851-463-2476", - "email": "kayla@aluco.com" - }, - { - "id": 3328, - "guid": "fdf31abf-d726-4913-9e54-e817ffc8bd34", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Brown", - "company": "Westgate", - "phone": "806-567-3698", - "email": "mia@westgate.com" - }, - { - "id": 3329, - "guid": "6fcc9af4-d5d7-4f54-9c60-1b8617dfdff5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Hamphrey", - "company": "Conotomics", - "phone": "894-441-3597", - "email": "taylor@conotomics.com" - }, - { - "id": 3330, - "guid": "b9fe652e-ab5e-47a9-9132-d72be30192a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Campbell", - "company": "Interliant", - "phone": "853-539-3217", - "email": "payton@interliant.com" - }, - { - "id": 3331, - "guid": "1a2d1cfa-d650-4759-a53d-1f04547101fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Hodges", - "company": "Raylog", - "phone": "836-486-3066", - "email": "jessica@raylog.com" - }, - { - "id": 3332, - "guid": "6d0cf90a-01b4-44b4-87d9-84311400abf5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Brown", - "company": "eSteganoergy", - "phone": "817-460-3063", - "email": "genesis@esteganoergy.com" - }, - { - "id": 3333, - "guid": "76240f7c-f9cd-45bc-a549-7d8eb8501700", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Oldridge", - "company": "Raylog", - "phone": "834-571-3025", - "email": "morgan@raylog.com" - }, - { - "id": 3334, - "guid": "949cf8d6-91a8-48d3-aa65-258c6781b9f7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophie Day", - "company": "US Omnigraphik", - "phone": "837-592-2805", - "email": "sophie@us omnigraphik.com" - }, - { - "id": 3335, - "guid": "8680a878-3cd0-498c-8b63-7315e6765803", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ella Ford", - "company": "Infragraph", - "phone": "814-511-3543", - "email": "ella@infragraph.com" - }, - { - "id": 3336, - "guid": "903a86ae-996d-4500-b65e-ed421df95188", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Payton Brickman", - "company": "Generola", - "phone": "864-402-2749", - "email": "payton@generola.com" - }, - { - "id": 3337, - "guid": "a7b53b50-6f92-441e-8ea8-54976d4153a3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Gill", - "company": "US Infratouch", - "phone": "843-479-3413", - "email": "paige@us infratouch.com" - }, - { - "id": 3338, - "guid": "091b6fab-6efc-4109-bbfc-d4254650b1f0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Owen", - "company": "Inridium", - "phone": "847-537-3657", - "email": "allison@inridium.com" - }, - { - "id": 3339, - "guid": "e2b1710f-3b89-441b-8d3d-d9a575f15b92", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Abigail Sheldon", - "company": "Aluco", - "phone": "801-469-2567", - "email": "abigail@aluco.com" - }, - { - "id": 3340, - "guid": "fc5c7361-7211-42a4-88e4-45ec62133b9a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aaliyah Fisher", - "company": "Multitiqua", - "phone": "878-549-3345", - "email": "aaliyah@multitiqua.com" - }, - { - "id": 3341, - "guid": "2d32e07e-39c8-46ac-9da5-d9b5a6f0cd64", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Stanley", - "company": "Inridium", - "phone": "867-405-2277", - "email": "aubrey@inridium.com" - }, - { - "id": 3342, - "guid": "a622a158-2b54-4d1e-9134-df17f8c829cb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Calhoun", - "company": "Truetomic", - "phone": "879-424-2433", - "email": "kylie@truetomic.com" - }, - { - "id": 3343, - "guid": "e123b049-afed-4444-a2c7-4e2b2b0452ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Gustman", - "company": "OpKeycomm", - "phone": "812-440-3827", - "email": "kimberly@opkeycomm.com" - }, - { - "id": 3344, - "guid": "7326edae-db20-47be-8932-d41a28b0bab4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Osborne", - "company": "Safetrust", - "phone": "831-562-3565", - "email": "eva@safetrust.com" - }, - { - "id": 3345, - "guid": "7a036067-fff6-4585-bd1d-e332316eec35", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Chesterton", - "company": "Navivacs", - "phone": "815-525-2801", - "email": "kimberly@navivacs.com" - }, - { - "id": 3346, - "guid": "c12186ee-0666-406c-8f46-8038ad07ec5f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria WifKinson", - "company": "Superscope", - "phone": "828-600-2019", - "email": "victoria@superscope.com" - }, - { - "id": 3347, - "guid": "1f4be0a0-3539-45b6-87df-1c7292e07c7e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madelyn Goodman", - "company": "US Omnigraphik", - "phone": "820-526-3621", - "email": "madelyn@us omnigraphik.com" - }, - { - "id": 3348, - "guid": "1ed9d0da-b326-4983-86e1-2a64218ab319", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Leah Cook", - "company": "US Infratouch", - "phone": "884-549-2834", - "email": "leah@us infratouch.com" - }, - { - "id": 3349, - "guid": "5a3ac022-8f95-4215-be73-9e576eef9fcf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Brown", - "company": "US Omnigraphik", - "phone": "890-447-3407", - "email": "faith@us omnigraphik.com" - }, - { - "id": 3350, - "guid": "466b85ed-1cba-4984-9b4e-c3498b8162e3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Oldman", - "company": "Truegate", - "phone": "881-471-3457", - "email": "sophie@truegate.com" - }, - { - "id": 3351, - "guid": "3c83ecf3-49db-4418-ad3b-9b048e6535d9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Adamson", - "company": "Openserve", - "phone": "817-439-3105", - "email": "zoe@openserve.com" - }, - { - "id": 3352, - "guid": "a5f356b7-358e-4931-8a9c-e03ff55672ab", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brianna Hardman", - "company": "Titanigraf", - "phone": "875-553-3865", - "email": "brianna@titanigraf.com" - }, - { - "id": 3353, - "guid": "74a72bb2-47c4-4f31-9fd3-d44d21524a93", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Calhoun", - "company": "Gigaura", - "phone": "836-544-2557", - "email": "sarah@gigaura.com" - }, - { - "id": 3354, - "guid": "a8ceff80-b2f3-45fc-b602-09e896a0d681", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Owen", - "company": "Multitiqua", - "phone": "877-589-2859", - "email": "brooke@multitiqua.com" - }, - { - "id": 3355, - "guid": "03b7b6e2-38c9-44d0-a528-660c16c17fa8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Wood", - "company": "Generola", - "phone": "886-508-3954", - "email": "abigail@generola.com" - }, - { - "id": 3356, - "guid": "05a0e167-ef6c-420b-8443-1c54c12a9cce", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Cramer", - "company": "Conrama", - "phone": "850-468-3127", - "email": "isabella@conrama.com" - }, - { - "id": 3357, - "guid": "393a20d7-b134-4ccb-a5fb-d8d23d4d9591", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Peyton Warren", - "company": "SysUSA", - "phone": "851-401-2387", - "email": "peyton@sysusa.com" - }, - { - "id": 3358, - "guid": "90da260a-fcf9-4c29-b802-c319b16bf4dc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brianna Galbraith", - "company": "Multitiqua", - "phone": "866-557-3080", - "email": "brianna@multitiqua.com" - }, - { - "id": 3359, - "guid": "06f02a0c-346c-4640-a190-0a5d21221c3d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Ford", - "company": "Textiqua", - "phone": "854-517-2975", - "email": "kaylee@textiqua.com" - }, - { - "id": 3360, - "guid": "ec93bfed-9a2e-4736-9f5e-9f9cd93de14a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Warren", - "company": "Netseco", - "phone": "850-585-2740", - "email": "trinity@netseco.com" - }, - { - "id": 3361, - "guid": "ca425c29-f6d2-4d81-ad8d-08de7e225a40", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Gerald", - "company": "Jamconik", - "phone": "820-497-2771", - "email": "sarah@jamconik.com" - }, - { - "id": 3362, - "guid": "3902cb7a-33d1-4cf4-b388-3b485bfb5f51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Thomson", - "company": "SysUSA", - "phone": "896-546-3624", - "email": "melanie@sysusa.com" - }, - { - "id": 3363, - "guid": "4db22e73-11ec-4a1b-9cd8-7a9e85313e04", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Brooks", - "company": "Robotemplate", - "phone": "838-519-2137", - "email": "leah@robotemplate.com" - }, - { - "id": 3364, - "guid": "b6c8309b-96a4-418d-afe1-141fd1a7562e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Wainwright", - "company": "Dynarama", - "phone": "842-426-3182", - "email": "rachel@dynarama.com" - }, - { - "id": 3365, - "guid": "ce674ef7-07f8-4259-b55c-8f25586a10d4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Michaelson", - "company": "Transtouch", - "phone": "897-559-2819", - "email": "natalie@transtouch.com" - }, - { - "id": 3366, - "guid": "2c6275d6-1723-4b74-ba08-58e6c6bc78ce", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Andrea Goodman", - "company": "Transtouch", - "phone": "820-538-3860", - "email": "andrea@transtouch.com" - }, - { - "id": 3367, - "guid": "3133b03d-8c06-419b-a91a-e6f56e5767cc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Day", - "company": "OpKeycomm", - "phone": "880-508-2437", - "email": "amelia@opkeycomm.com" - }, - { - "id": 3368, - "guid": "3e4af8dc-5c32-4886-be2a-b6b64de78965", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Fulton", - "company": "Cryptotemplate", - "phone": "878-445-2524", - "email": "brianna@cryptotemplate.com" - }, - { - "id": 3369, - "guid": "2c34a384-b32f-4923-bdb7-a5a6e2d0bc82", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Hancock", - "company": "Safetrust", - "phone": "858-450-2127", - "email": "brianna@safetrust.com" - }, - { - "id": 3370, - "guid": "58024911-d1b4-40d1-b281-1da6f8fc76df", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Sheldon", - "company": "Netseco", - "phone": "896-480-2802", - "email": "mackenzie@netseco.com" - }, - { - "id": 3371, - "guid": "97b826ce-18d8-47ae-a7ff-65323cf8d10b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Smith", - "company": "Interliant", - "phone": "823-582-2299", - "email": "kimberly@interliant.com" - }, - { - "id": 3372, - "guid": "057dbf58-fb8f-45c3-93c7-302c0a3b3561", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Chesterton", - "company": "Raylog", - "phone": "887-435-3346", - "email": "alexis@raylog.com" - }, - { - "id": 3373, - "guid": "dcb1b662-50ac-4639-8934-2465868d4b25", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia WifKinson", - "company": "Cryptotemplate", - "phone": "846-512-3534", - "email": "sofia@cryptotemplate.com" - }, - { - "id": 3374, - "guid": "a318bf53-1b4c-4f5f-8987-676a1196f981", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Calhoun", - "company": "Fibrotopia", - "phone": "878-511-3130", - "email": "caroline@fibrotopia.com" - }, - { - "id": 3375, - "guid": "2032b946-db4f-4130-a7ab-3a5ff35e5185", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Oldridge", - "company": "Teraserv", - "phone": "875-427-2056", - "email": "camila@teraserv.com" - }, - { - "id": 3376, - "guid": "1d87ce15-afc0-49ed-8bd0-2b6f8bb83c66", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Peyton Timmons", - "company": "Netseco", - "phone": "860-545-3220", - "email": "peyton@netseco.com" - }, - { - "id": 3377, - "guid": "a4de394c-f8ad-4c22-b488-0cd19e0ad2e7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Stanley", - "company": "Netseco", - "phone": "898-514-3613", - "email": "khloe@netseco.com" - }, - { - "id": 3378, - "guid": "6eef40b2-ee0a-4f20-8d1c-d2417d33105f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Nathan", - "company": "Raylog", - "phone": "829-499-2369", - "email": "savannah@raylog.com" - }, - { - "id": 3379, - "guid": "7d524f63-01e7-427f-925b-d81f98022f2a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Oswald", - "company": "Textiqua", - "phone": "832-588-2757", - "email": "ava@textiqua.com" - }, - { - "id": 3380, - "guid": "19b1d3e3-1e75-43f3-8fe4-8f28f9137fb0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Murphy", - "company": "Titanirola", - "phone": "832-576-2717", - "email": "gianna@titanirola.com" - }, - { - "id": 3381, - "guid": "7c6d1023-ca5e-423f-ba81-942cf184df0f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Clapton", - "company": "Navivacs", - "phone": "881-568-2096", - "email": "isabella@navivacs.com" - }, - { - "id": 3382, - "guid": "acb4329c-afbd-4f66-b261-bedf263d72d3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Molligan", - "company": "Ventanium", - "phone": "832-518-3635", - "email": "hannah@ventanium.com" - }, - { - "id": 3383, - "guid": "2ed2ef27-e1c5-48c5-80dd-ff9c8b01e661", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Gate", - "company": "Anaframe", - "phone": "832-590-3503", - "email": "bailey@anaframe.com" - }, - { - "id": 3384, - "guid": "e465a560-b5bf-43c0-8d76-77eb1afa3e15", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Adamson", - "company": "iEnland", - "phone": "850-553-3650", - "email": "abigail@ienland.com" - }, - { - "id": 3385, - "guid": "78bbacaa-ee44-4b2c-900f-4ff2a57c26ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Adamson", - "company": "Netseco", - "phone": "854-585-2425", - "email": "serenity@netseco.com" - }, - { - "id": 3386, - "guid": "459a9911-795a-40db-830f-b51a671a6f2c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Gill", - "company": "Syssoft", - "phone": "865-538-2694", - "email": "ella@syssoft.com" - }, - { - "id": 3387, - "guid": "66f24fa5-3f63-4894-a174-ce0217006192", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Valeria Harrison", - "company": "Ventanium", - "phone": "864-428-2950", - "email": "valeria@ventanium.com" - }, - { - "id": 3388, - "guid": "96ff1462-e56e-4578-adfc-836472a6ef80", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Owen", - "company": "Jamconik", - "phone": "849-510-2286", - "email": "madison@jamconik.com" - }, - { - "id": 3389, - "guid": "d2161f39-633b-4199-99fc-991c3bcca136", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Goodman", - "company": "Pericenta", - "phone": "884-441-3739", - "email": "emily@pericenta.com" - }, - { - "id": 3390, - "guid": "226cfb84-f1c4-4047-9051-74c4b5dd8b27", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison White", - "company": "Transtouch", - "phone": "806-581-2849", - "email": "addison@transtouch.com" - }, - { - "id": 3391, - "guid": "74ef5f23-81c1-430e-a5cc-ab840deafea5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Hamphrey", - "company": "Fibroserve", - "phone": "879-458-2183", - "email": "sophie@fibroserve.com" - }, - { - "id": 3392, - "guid": "7cda6544-7ec5-4acb-9d50-7d9261e402fd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Valeria Webster", - "company": "iMedconik", - "phone": "819-457-2295", - "email": "valeria@imedconik.com" - }, - { - "id": 3393, - "guid": "bb5b786c-bb21-4038-ad0f-a2d88867a0ce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Crossman", - "company": "Titanigraf", - "phone": "861-547-3482", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 3394, - "guid": "b60dc809-81af-4b98-b148-7a79233036f8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Hodges", - "company": "Robotemplate", - "phone": "840-559-3324", - "email": "katelyn@robotemplate.com" - }, - { - "id": 3395, - "guid": "ef5b07d2-cdf8-4022-96b9-dd9823016ce6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Carrington", - "company": "Robotemplate", - "phone": "823-420-3878", - "email": "anna@robotemplate.com" - }, - { - "id": 3396, - "guid": "980c452a-e9dc-46a2-a8ea-cfb55c2f92f8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Autumn Gardner", - "company": "US Infratouch", - "phone": "857-418-2038", - "email": "autumn@us infratouch.com" - }, - { - "id": 3397, - "guid": "42573459-25d1-4076-aa24-1cf393fda31f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Nelson", - "company": "Qualserve", - "phone": "811-415-2143", - "email": "kylie@qualserve.com" - }, - { - "id": 3398, - "guid": "138b80bc-65b0-4bd7-a137-6d3b21ba00c8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Sherlock", - "company": "Safeagra", - "phone": "876-566-2172", - "email": "layla@safeagra.com" - }, - { - "id": 3399, - "guid": "472c489c-488a-4793-8b80-e053adfd99a1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Michaelson", - "company": "Fibrotouch", - "phone": "894-526-3677", - "email": "emily@fibrotouch.com" - }, - { - "id": 3400, - "guid": "9ab84f12-6431-451a-b776-92b6f020efc9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Bush", - "company": "Truegate", - "phone": "871-467-3707", - "email": "amelia@truegate.com" - }, - { - "id": 3401, - "guid": "7b70f646-bc38-4047-a5c0-0e30944792c1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Youmans", - "company": "US Infratouch", - "phone": "865-403-2305", - "email": "destiny@us infratouch.com" - }, - { - "id": 3402, - "guid": "5b18682f-bb33-4bf6-bd86-1291f72bda21", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Adamson", - "company": "SysUSA", - "phone": "850-525-3780", - "email": "maria@sysusa.com" - }, - { - "id": 3403, - "guid": "cff1fd96-b713-4772-ad6a-880437e28066", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Chapman", - "company": "Truetomic", - "phone": "816-542-3710", - "email": "trinity@truetomic.com" - }, - { - "id": 3404, - "guid": "db037857-3743-4c90-918c-75f32453144d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Stanley", - "company": "eEyetanic", - "phone": "846-455-2514", - "email": "gabrielle@eeyetanic.com" - }, - { - "id": 3405, - "guid": "0fa6ec22-e552-4420-a522-88a53543601a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Smith", - "company": "Rapigrafix", - "phone": "812-496-3920", - "email": "taylor@rapigrafix.com" - }, - { - "id": 3406, - "guid": "c6b32f06-0f69-4e09-ac70-06ca00d9c88e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Nevaeh Gibbs", - "company": "US Infratouch", - "phone": "875-423-3961", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 3407, - "guid": "57b3cfd6-009f-4ee0-a568-7cfd4aafcb67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Payton Owen", - "company": "Skydata", - "phone": "866-525-2366", - "email": "payton@skydata.com" - }, - { - "id": 3408, - "guid": "7d28fd94-eea2-4476-968c-4316322e233b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Makayla Stanley", - "company": "InfoAirway", - "phone": "825-553-2717", - "email": "makayla@infoairway.com" - }, - { - "id": 3409, - "guid": "c1d3ceed-3f6f-4769-8530-51aeac6e96e2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Brown", - "company": "Orthomedia", - "phone": "851-531-2065", - "email": "leah@orthomedia.com" - }, - { - "id": 3410, - "guid": "ce390fb7-56ec-4a45-b321-18b2624bb02b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Harrison", - "company": "Tekcar", - "phone": "884-580-3460", - "email": "isabella@tekcar.com" - }, - { - "id": 3411, - "guid": "9f2c61ff-2c93-47b6-8773-0d9a4570af1c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Claire Murphy", - "company": "Truetomic", - "phone": "887-473-3904", - "email": "claire@truetomic.com" - }, - { - "id": 3412, - "guid": "eb83a40a-baf9-428c-8094-b433bb1ce2d8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Nelson", - "company": "Aprama", - "phone": "840-422-2166", - "email": "leah@aprama.com" - }, - { - "id": 3413, - "guid": "0f206a8b-3722-4ce3-a8bf-398c9152960b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Miln", - "company": "Conotomics", - "phone": "801-566-3028", - "email": "gianna@conotomics.com" - }, - { - "id": 3414, - "guid": "94af9249-7bc2-4f7f-b443-b82dc1236e33", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madelyn Nash", - "company": "Idmax", - "phone": "876-584-3216", - "email": "madelyn@idmax.com" - }, - { - "id": 3415, - "guid": "c7bcc5b9-6106-4937-9f8a-60d676dd740d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Bush", - "company": "Polytheon", - "phone": "869-485-2937", - "email": "sofia@polytheon.com" - }, - { - "id": 3416, - "guid": "e5485f10-19a0-4b5c-b42d-be4f9545d41c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison Gate", - "company": "Cryptotemplate", - "phone": "890-575-3419", - "email": "madison@cryptotemplate.com" - }, - { - "id": 3417, - "guid": "00808393-8ccb-4bb5-a561-932e5b9b1cc7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Stanley", - "company": "Aprama", - "phone": "859-560-3812", - "email": "chloe@aprama.com" - }, - { - "id": 3418, - "guid": "1c56364e-7f2b-4ac9-9a9c-1f45d82e6ecb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Turner", - "company": "OpKeycomm", - "phone": "896-404-3880", - "email": "molly@opkeycomm.com" - }, - { - "id": 3419, - "guid": "3efeb877-9eb8-4813-9eaa-e523f107ad16", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Gilson", - "company": "Orthosoft", - "phone": "842-504-2337", - "email": "mariah@orthosoft.com" - }, - { - "id": 3420, - "guid": "e90aedd0-43ca-4e42-8316-f41ce8443546", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Gilson", - "company": "Quintegrity", - "phone": "863-454-3531", - "email": "sofia@quintegrity.com" - }, - { - "id": 3421, - "guid": "1784c1f2-aba3-40ae-9f42-820822c24774", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Mercer", - "company": "Unologic", - "phone": "823-599-3159", - "email": "savannah@unologic.com" - }, - { - "id": 3422, - "guid": "143b1609-7ed6-46f5-bb58-69c9c2921c87", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya Cook", - "company": "Aluco", - "phone": "841-440-3578", - "email": "mya@aluco.com" - }, - { - "id": 3423, - "guid": "59af8b0c-4a14-4271-9e01-b9fbd07ca3ad", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Michaelson", - "company": "Safetrust", - "phone": "889-445-2648", - "email": "sophia@safetrust.com" - }, - { - "id": 3424, - "guid": "b3b650f4-372d-46fc-855e-d0778a172c04", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Chapman", - "company": "Allphysiche", - "phone": "814-537-2950", - "email": "claire@allphysiche.com" - }, - { - "id": 3425, - "guid": "ad63e162-4f94-4da4-80bf-9944680c2508", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Waller", - "company": "eEyetanic", - "phone": "896-448-2465", - "email": "abigail@eeyetanic.com" - }, - { - "id": 3426, - "guid": "7803861c-984a-4336-8b16-98e0ba9acc64", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Hancock", - "company": "Nanobanc", - "phone": "888-516-3586", - "email": "claire@nanobanc.com" - }, - { - "id": 3427, - "guid": "3dd4724a-4161-4e8f-819f-d59ce4a3d297", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Crossman", - "company": "Airdyne", - "phone": "884-414-2759", - "email": "isabella@airdyne.com" - }, - { - "id": 3428, - "guid": "ed9e9dcb-c844-431d-a60b-5b510bb61a5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Hoggarth", - "company": "Orthomedia", - "phone": "875-588-2749", - "email": "charlotte@orthomedia.com" - }, - { - "id": 3429, - "guid": "cf39eabb-84fe-459a-86b4-ffc416f362c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Thornton", - "company": "Venconix", - "phone": "841-494-3900", - "email": "madeline@venconix.com" - }, - { - "id": 3430, - "guid": "e2a7a405-0c89-4392-98df-e796a16f72ad", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Wood", - "company": "Truetomic", - "phone": "866-548-2602", - "email": "gabrielle@truetomic.com" - }, - { - "id": 3431, - "guid": "15c6b7c8-4f39-41e0-b97f-cfb0e24ef024", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aubrey Oldridge", - "company": "Generola", - "phone": "814-575-3286", - "email": "aubrey@generola.com" - }, - { - "id": 3432, - "guid": "041260bd-1407-4277-8843-f63829ae6b6d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn White", - "company": "Teratopia", - "phone": "871-493-2362", - "email": "kaitlyn@teratopia.com" - }, - { - "id": 3433, - "guid": "97ff3596-f519-4d9c-b41a-1f02f303be64", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Hoggarth", - "company": "Jamrola", - "phone": "816-400-3594", - "email": "isabelle@jamrola.com" - }, - { - "id": 3434, - "guid": "127a3b4c-f931-4de9-86f2-17447c47284c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Genesis Vaughan", - "company": "Keytheon", - "phone": "833-436-3967", - "email": "genesis@keytheon.com" - }, - { - "id": 3435, - "guid": "98266706-690d-46de-ae11-98c7de1c9e78", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Timmons", - "company": "Systheon", - "phone": "884-457-3079", - "email": "emma@systheon.com" - }, - { - "id": 3436, - "guid": "d47c04ec-50f7-4dd8-968c-06c59ed614e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Ward", - "company": "OpKeycomm", - "phone": "833-533-3063", - "email": "brooke@opkeycomm.com" - }, - { - "id": 3437, - "guid": "9b814b51-7adc-4478-8a98-ec76d7097ba6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Gilson", - "company": "Airdyne", - "phone": "831-533-2867", - "email": "serenity@airdyne.com" - }, - { - "id": 3438, - "guid": "2d50f088-6013-497f-9f71-d5d506565e7b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooklyn Morrison", - "company": "Qualserve", - "phone": "888-509-2817", - "email": "brooklyn@qualserve.com" - }, - { - "id": 3439, - "guid": "a0ff6c92-a37b-494a-a864-15726242389a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Miln", - "company": "eSteganoergy", - "phone": "870-550-2909", - "email": "melanie@esteganoergy.com" - }, - { - "id": 3440, - "guid": "fd8d8c39-832f-445f-a8c2-d5b003f0106c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Gustman", - "company": "SysUSA", - "phone": "876-520-2504", - "email": "alexandra@sysusa.com" - }, - { - "id": 3441, - "guid": "9201975a-63c7-4201-b3ee-35f69454e2a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Brooks", - "company": "iQualcar", - "phone": "857-534-3562", - "email": "bella@iqualcar.com" - }, - { - "id": 3442, - "guid": "05bab8e0-d1b0-4993-bd69-7b0c8868e641", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Stanley", - "company": "Inridium", - "phone": "868-538-3526", - "email": "emma@inridium.com" - }, - { - "id": 3443, - "guid": "fe42e5b5-d076-4e01-81d6-07ab7640590a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Bush", - "company": "Safetrust", - "phone": "819-445-2321", - "email": "alexis@safetrust.com" - }, - { - "id": 3444, - "guid": "df1c9f47-c900-4bec-ab4f-a3b4a0fccd93", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Milton", - "company": "eEyetanic", - "phone": "899-535-2186", - "email": "maya@eeyetanic.com" - }, - { - "id": 3445, - "guid": "c34d7b0f-df24-448d-ac86-cc21af6a15b4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Waller", - "company": "Indisco", - "phone": "898-576-3737", - "email": "molly@indisco.com" - }, - { - "id": 3446, - "guid": "5e63187d-e4e6-481a-8d78-9a4fcea81f19", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooklyn Gilmore", - "company": "iEnland", - "phone": "871-550-2955", - "email": "brooklyn@ienland.com" - }, - { - "id": 3447, - "guid": "b1ef59b6-78cb-4169-abb1-8cbb29955cdc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Chandter", - "company": "Airdyne", - "phone": "857-416-3508", - "email": "olivia@airdyne.com" - }, - { - "id": 3448, - "guid": "a8ae6188-947e-4b8d-ba20-5173dfa43cac", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mia Goodman", - "company": "Compuamerica", - "phone": "872-535-2442", - "email": "mia@compuamerica.com" - }, - { - "id": 3449, - "guid": "2860e866-e246-422c-8b35-0fd7a5fbf4e4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Freeman", - "company": "Titanirola", - "phone": "889-553-3522", - "email": "sophie@titanirola.com" - }, - { - "id": 3450, - "guid": "ff7ad299-f648-4eb4-837a-6ca6b0e5875c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Higgins", - "company": "Aluco", - "phone": "807-593-2846", - "email": "leah@aluco.com" - }, - { - "id": 3451, - "guid": "4f8e618a-4924-4823-addd-04b4b7855c00", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Stanley", - "company": "Infraique", - "phone": "802-526-3225", - "email": "allison@infraique.com" - }, - { - "id": 3452, - "guid": "de95a77c-b478-4606-8b13-765a8b1d43f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Evelyn Goodman", - "company": "Safetrust", - "phone": "842-554-3182", - "email": "evelyn@safetrust.com" - }, - { - "id": 3453, - "guid": "54a38dce-fe55-472a-bdf3-678c699c9c81", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Sheldon", - "company": "US Infratouch", - "phone": "844-459-2901", - "email": "gabrielle@us infratouch.com" - }, - { - "id": 3454, - "guid": "3489b220-ed22-4055-bcdc-4e94f1ff5bd0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Trinity Oliver", - "company": "Teratopia", - "phone": "805-500-3430", - "email": "trinity@teratopia.com" - }, - { - "id": 3455, - "guid": "600d87d9-0de6-47e2-b78d-0ee8f8c001d7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Abramson", - "company": "Titanigraf", - "phone": "878-529-2838", - "email": "faith@titanigraf.com" - }, - { - "id": 3456, - "guid": "04a5e730-8e18-47ce-9013-845a56bea59c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sydney Ogden", - "company": "Orthosoft", - "phone": "817-581-3349", - "email": "sydney@orthosoft.com" - }, - { - "id": 3457, - "guid": "ebc1c197-2b84-4147-b67f-c382633a0c53", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Hardman", - "company": "Conrama", - "phone": "813-553-3047", - "email": "madison@conrama.com" - }, - { - "id": 3458, - "guid": "7a7291d8-b91e-4c97-b3e4-e2494732f45e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Higgins", - "company": "Raylog", - "phone": "837-587-2859", - "email": "madelyn@raylog.com" - }, - { - "id": 3459, - "guid": "e340e14b-fbee-4795-973b-848083581744", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Gerald", - "company": "Idmax", - "phone": "877-495-3562", - "email": "khloe@idmax.com" - }, - { - "id": 3460, - "guid": "3703a854-fb0e-4ee2-8b5a-b5e93a6cf11e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Gardner", - "company": "Safeagra", - "phone": "840-505-2549", - "email": "genesis@safeagra.com" - }, - { - "id": 3461, - "guid": "b5acb6d9-ec0a-4114-b7f7-a37c400aa578", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Crossman", - "company": "Rapigrafix", - "phone": "856-454-3735", - "email": "sofia@rapigrafix.com" - }, - { - "id": 3462, - "guid": "f96cd884-4023-4669-9f84-4c96445683ad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Ford", - "company": "Tekcar", - "phone": "814-555-2263", - "email": "faith@tekcar.com" - }, - { - "id": 3463, - "guid": "3be13fd4-3d4e-4644-9442-0955cdcc19f5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Murphy", - "company": "Quintegrity", - "phone": "821-407-2388", - "email": "isabella@quintegrity.com" - }, - { - "id": 3464, - "guid": "03b1b898-b0df-4825-ae90-76a331e62cb8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kimberly Hamphrey", - "company": "Westtomik", - "phone": "852-529-2831", - "email": "kimberly@westtomik.com" - }, - { - "id": 3465, - "guid": "5427d8a3-4c10-4d1f-b33a-47bf9f9e8a16", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Warren", - "company": "Safeagra", - "phone": "820-543-3572", - "email": "grace@safeagra.com" - }, - { - "id": 3466, - "guid": "aaee7025-aef6-4b7a-8c94-a2a0d91d8b0a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Higgins", - "company": "Skydata", - "phone": "874-460-2111", - "email": "jasmine@skydata.com" - }, - { - "id": 3467, - "guid": "cfa8a7f7-7166-4e52-b3f5-434091d176b2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Turner", - "company": "Anagraph", - "phone": "869-552-3257", - "email": "ariana@anagraph.com" - }, - { - "id": 3468, - "guid": "8a88a129-4b10-49de-ac73-b657dc9628da", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Gibbs", - "company": "Aprama", - "phone": "883-458-2790", - "email": "brooke@aprama.com" - }, - { - "id": 3469, - "guid": "4491182b-9fc6-4ddf-b7fe-19b50e517505", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Carrington", - "company": "Infraique", - "phone": "861-411-2085", - "email": "ella@infraique.com" - }, - { - "id": 3470, - "guid": "f69d38fb-9ad2-4f30-827d-541a4af8412f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Carey", - "company": "Hypervaco", - "phone": "849-487-2872", - "email": "sophie@hypervaco.com" - }, - { - "id": 3471, - "guid": "c1ed7f38-e99a-47a8-a8d9-698c578e0fb6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Carrington", - "company": "Entcast", - "phone": "866-412-3982", - "email": "evelyn@entcast.com" - }, - { - "id": 3472, - "guid": "8da60768-5d92-4494-aa2a-51e302569e8e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Valeria Wainwright", - "company": "Pacwest", - "phone": "832-452-2347", - "email": "valeria@pacwest.com" - }, - { - "id": 3473, - "guid": "8be7de0f-c0a1-455f-99a9-bb5bdc82e774", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa Miln", - "company": "Orthomedia", - "phone": "896-408-2121", - "email": "vanessa@orthomedia.com" - }, - { - "id": 3474, - "guid": "e712d135-6133-4420-ba3b-c40c08488a68", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Gill", - "company": "Enlogia", - "phone": "858-402-2109", - "email": "avery@enlogia.com" - }, - { - "id": 3475, - "guid": "7db24375-618d-40df-a5f1-8c9ff999949f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Nathan", - "company": "Robotemplate", - "phone": "809-547-3544", - "email": "peyton@robotemplate.com" - }, - { - "id": 3476, - "guid": "8fcd7659-c533-4b29-901e-ea08713d015e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Chesterton", - "company": "Infragraph", - "phone": "820-504-2138", - "email": "jasmine@infragraph.com" - }, - { - "id": 3477, - "guid": "b20c31ae-6393-45ef-a6e7-16559da18a07", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Hamphrey", - "company": "iOptystix", - "phone": "840-424-3301", - "email": "andrea@ioptystix.com" - }, - { - "id": 3478, - "guid": "c2b64353-e723-47d0-891e-aa1fdd072bcd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Sherlock", - "company": "Venconix", - "phone": "882-465-2074", - "email": "madeline@venconix.com" - }, - { - "id": 3479, - "guid": "38c8044c-a1f7-482e-9e07-84c432cd9554", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Nathan", - "company": "Quintegrity", - "phone": "867-400-3290", - "email": "serenity@quintegrity.com" - }, - { - "id": 3480, - "guid": "1b836d15-9a15-430e-98ce-845a951167c5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Evelyn Michaelson", - "company": "Inridium", - "phone": "831-405-3097", - "email": "evelyn@inridium.com" - }, - { - "id": 3481, - "guid": "8a0b9afd-6072-4eba-a770-d50cf97e0656", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jocelyn Crossman", - "company": "Titanigraf", - "phone": "894-538-3378", - "email": "jocelyn@titanigraf.com" - }, - { - "id": 3482, - "guid": "9c695ddb-6a3a-4b4d-8f80-780ad5c78626", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley Sherlock", - "company": "Netseco", - "phone": "897-502-2253", - "email": "ashley@netseco.com" - }, - { - "id": 3483, - "guid": "cae8e47e-400c-4bc4-a455-5476c3d09d6d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Molligan", - "company": "Teraserv", - "phone": "856-564-3787", - "email": "peyton@teraserv.com" - }, - { - "id": 3484, - "guid": "d88e97b3-3310-4c13-84b5-0cca366fd925", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Stanley", - "company": "Celgra", - "phone": "805-548-3991", - "email": "lauren@celgra.com" - }, - { - "id": 3485, - "guid": "af6cc236-fc6c-46d6-bf5d-0e4eab018c03", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Ward", - "company": "RoboAerlogix", - "phone": "858-428-2431", - "email": "brooklyn@roboaerlogix.com" - }, - { - "id": 3486, - "guid": "56daa9b1-4171-494f-b534-7dd6eaf8e6bf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Davidson", - "company": "iQualcar", - "phone": "815-471-2840", - "email": "samantha@iqualcar.com" - }, - { - "id": 3487, - "guid": "e2141e7f-7345-4f0a-833d-b2f27d3d85be", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sydney Vaughan", - "company": "Conotomics", - "phone": "883-428-2964", - "email": "sydney@conotomics.com" - }, - { - "id": 3488, - "guid": "734148ce-3b55-494c-b7b6-996c6d712e78", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Wallace", - "company": "Netsystems", - "phone": "839-410-2886", - "email": "gabriella@netsystems.com" - }, - { - "id": 3489, - "guid": "7ddd9f70-9015-46dd-93f9-24700048852c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ariana Oswald", - "company": "Syssoft", - "phone": "884-555-3946", - "email": "ariana@syssoft.com" - }, - { - "id": 3490, - "guid": "1e580455-1ef9-411c-9840-16d6235eaf97", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kayla Bush", - "company": "Westgate", - "phone": "830-508-3687", - "email": "kayla@westgate.com" - }, - { - "id": 3491, - "guid": "82e1f17e-e946-4540-a50e-d33a2a04dd4c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila Croftoon", - "company": "Mescaridic", - "phone": "843-579-3504", - "email": "camila@mescaridic.com" - }, - { - "id": 3492, - "guid": "dadbd091-a2d8-41d2-9c67-7f850bb3802f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Carroll", - "company": "Qualserve", - "phone": "845-478-2316", - "email": "rachel@qualserve.com" - }, - { - "id": 3493, - "guid": "9e1fe47e-18b3-4005-a12c-22ebd6749513", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Chesterton", - "company": "Anaframe", - "phone": "818-549-3686", - "email": "maria@anaframe.com" - }, - { - "id": 3494, - "guid": "104cb9b8-a946-4664-a66d-77b7ec60c8a0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Nash", - "company": "SysVenamerica", - "phone": "824-463-2702", - "email": "katherine@sysvenamerica.com" - }, - { - "id": 3495, - "guid": "14711509-3d84-4f03-8574-b5b36764c3e4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Gill", - "company": "iSkyvaco", - "phone": "851-457-3835", - "email": "autumn@iskyvaco.com" - }, - { - "id": 3496, - "guid": "51d1a22c-2345-4690-aad0-2dd4a2ccff58", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Brown", - "company": "Unconix", - "phone": "838-447-2341", - "email": "khloe@unconix.com" - }, - { - "id": 3497, - "guid": "2bff97a7-3bb6-4439-a80e-5d30c311f3f4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Morrison", - "company": "Infragraph", - "phone": "848-519-2461", - "email": "paige@infragraph.com" - }, - { - "id": 3498, - "guid": "7c1255b6-7794-497c-956f-994f9c002b06", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Ford", - "company": "Venconix", - "phone": "854-576-2422", - "email": "layla@venconix.com" - }, - { - "id": 3499, - "guid": "d8389c81-ae26-4a1f-adc9-a3f92c6c4712", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Nash", - "company": "Celgra", - "phone": "848-451-2428", - "email": "zoey@celgra.com" - }, - { - "id": 3500, - "guid": "77d8f7e7-79cd-4184-8ec5-2a2db85a35f6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mariah Clapton", - "company": "Navivacs", - "phone": "843-408-2519", - "email": "mariah@navivacs.com" - }, - { - "id": 3501, - "guid": "8622bdd3-ede3-4c58-a4ef-0d659f5e2494", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Nelson", - "company": "Raylog", - "phone": "868-520-3144", - "email": "lauren@raylog.com" - }, - { - "id": 3502, - "guid": "3d43e856-3de2-4fc4-996b-c26eaed415a5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Oswald", - "company": "Textiqua", - "phone": "856-524-3041", - "email": "chloe@textiqua.com" - }, - { - "id": 3503, - "guid": "4930d674-0ced-4169-8459-d1bdecbb9bf0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Galbraith", - "company": "Entcast", - "phone": "821-457-2321", - "email": "anna@entcast.com" - }, - { - "id": 3504, - "guid": "c3ed5bd9-1716-4642-981e-34d81a9ef018", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mia Youmans", - "company": "Sontopia", - "phone": "898-441-2513", - "email": "mia@sontopia.com" - }, - { - "id": 3505, - "guid": "7dd5cf2f-d542-4f1f-8a7f-d52f3f3f01d3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Nelson", - "company": "Anaframe", - "phone": "895-509-3493", - "email": "ella@anaframe.com" - }, - { - "id": 3506, - "guid": "c0751f03-658f-4308-bebd-ae5a6b97e6d6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Thorndike", - "company": "Orthosoft", - "phone": "821-508-2767", - "email": "zoe@orthosoft.com" - }, - { - "id": 3507, - "guid": "fcd0f4ce-f694-4811-857e-5a78b27d8bb7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Osborne", - "company": "Sontopia", - "phone": "810-423-3848", - "email": "zoey@sontopia.com" - }, - { - "id": 3508, - "guid": "21db6c4c-0abc-446e-8036-18268ae6d66e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Caroline Watson", - "company": "Openserve", - "phone": "877-598-2111", - "email": "caroline@openserve.com" - }, - { - "id": 3509, - "guid": "a0a7d5d8-20f0-40a3-bc2d-441401f195f7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Osborne", - "company": "Aluco", - "phone": "820-463-2410", - "email": "victoria@aluco.com" - }, - { - "id": 3510, - "guid": "df7a1638-9081-4768-8dd7-36812ab53fac", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Fisher", - "company": "Orthomedia", - "phone": "854-427-2571", - "email": "camila@orthomedia.com" - }, - { - "id": 3511, - "guid": "53fc1d44-ab36-40ff-ad76-9aae4bd775bc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Molligan", - "company": "Robotemplate", - "phone": "804-495-3880", - "email": "autumn@robotemplate.com" - }, - { - "id": 3512, - "guid": "c1d9e020-0be8-4ed3-b230-84575e649d7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Walkman", - "company": "Sontopia", - "phone": "806-501-3466", - "email": "bailey@sontopia.com" - }, - { - "id": 3513, - "guid": "f8739f79-3ca2-4a1c-b59f-52ec9d03d8fc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Goodman", - "company": "Safetrust", - "phone": "881-405-3597", - "email": "angelina@safetrust.com" - }, - { - "id": 3514, - "guid": "a1afe1ff-079d-4e22-b9ce-87341373f27b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Cook", - "company": "Cryptotegrity", - "phone": "824-539-3679", - "email": "grace@cryptotegrity.com" - }, - { - "id": 3515, - "guid": "54486bee-c39e-4d8d-bdbc-952882086008", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Nelson", - "company": "Thermotomic", - "phone": "868-424-3596", - "email": "aubrey@thermotomic.com" - }, - { - "id": 3516, - "guid": "db9934ee-3a5e-4f77-bddf-d3b313240739", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Milton", - "company": "Tekcar", - "phone": "878-587-2880", - "email": "alexis@tekcar.com" - }, - { - "id": 3517, - "guid": "866e4f53-f9f3-4ee6-b776-0c7602586746", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Creighton", - "company": "Steganoconiche", - "phone": "845-513-2277", - "email": "julia@steganoconiche.com" - }, - { - "id": 3518, - "guid": "ed199d3c-30fd-4054-9c7a-037c848a03a3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Brooks", - "company": "Conotomics", - "phone": "853-472-2668", - "email": "katherine@conotomics.com" - }, - { - "id": 3519, - "guid": "fdc66544-440b-4a63-ac92-9e54a2d80bd4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Murphy", - "company": "SysVenamerica", - "phone": "823-461-2851", - "email": "savannah@sysvenamerica.com" - }, - { - "id": 3520, - "guid": "35a2b673-02f8-40c7-9f0e-52f86734485c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabriella Warren", - "company": "Titanirola", - "phone": "881-442-3455", - "email": "gabriella@titanirola.com" - }, - { - "id": 3521, - "guid": "59cbd889-3a3c-4ec8-b43a-84f4eb5ea8e2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Gustman", - "company": "Teraserv", - "phone": "833-493-2919", - "email": "makayla@teraserv.com" - }, - { - "id": 3522, - "guid": "b184b40f-571c-4ff1-8037-2a5242c47d99", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Sheldon", - "company": "US Omnigraphik", - "phone": "853-513-2703", - "email": "hailey@us omnigraphik.com" - }, - { - "id": 3523, - "guid": "9dda3d3a-7284-437a-80b2-dec1a2096a68", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Ford", - "company": "Nanobanc", - "phone": "878-460-3521", - "email": "maria@nanobanc.com" - }, - { - "id": 3524, - "guid": "fb1f9fe6-0cce-4572-9181-8518027c3bbb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Anna Ogden", - "company": "OpKeycomm", - "phone": "873-427-2515", - "email": "anna@opkeycomm.com" - }, - { - "id": 3525, - "guid": "c84010bc-a1c0-43ec-a309-055c86ff6da8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Gerald", - "company": "Teraserv", - "phone": "835-478-3307", - "email": "alexis@teraserv.com" - }, - { - "id": 3526, - "guid": "5a212e89-f409-404b-b08e-693870f8c549", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Gilbert", - "company": "Cryptotemplate", - "phone": "861-543-3475", - "email": "genesis@cryptotemplate.com" - }, - { - "id": 3527, - "guid": "b8b2dcf2-11dd-4181-aa76-ea911c6e9f46", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Nevaeh Adamson", - "company": "Vencom", - "phone": "828-546-2114", - "email": "nevaeh@vencom.com" - }, - { - "id": 3528, - "guid": "344a058d-98ed-4100-a97b-60ca142577b3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Carroll", - "company": "Dynarama", - "phone": "894-586-2703", - "email": "brianna@dynarama.com" - }, - { - "id": 3529, - "guid": "01f31595-b899-4ec6-b00b-b9b85635caf5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Galbraith", - "company": "Indisco", - "phone": "845-592-3868", - "email": "amelia@indisco.com" - }, - { - "id": 3530, - "guid": "a2e66ddb-5a3b-4f7e-be26-fa47ef29710b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Nash", - "company": "Cryptotemplate", - "phone": "839-598-2715", - "email": "sofia@cryptotemplate.com" - }, - { - "id": 3531, - "guid": "338e8846-b685-4f9a-b47d-6170392e2ed9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sydney Timmons", - "company": "Conotomics", - "phone": "876-540-3152", - "email": "sydney@conotomics.com" - }, - { - "id": 3532, - "guid": "30f93982-94bc-499d-9285-022900dfc7f3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mya Ward", - "company": "Idmax", - "phone": "877-429-2903", - "email": "mya@idmax.com" - }, - { - "id": 3533, - "guid": "10efc5de-d5e0-4187-b2ed-fad09b4a22aa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Morrison", - "company": "Pacwest", - "phone": "807-483-3553", - "email": "katelyn@pacwest.com" - }, - { - "id": 3534, - "guid": "e2c5f8e3-23fb-405d-b85e-897f2e6e0080", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Hoggarth", - "company": "Robocomm", - "phone": "816-465-3705", - "email": "kaitlyn@robocomm.com" - }, - { - "id": 3535, - "guid": "a3e21f18-7628-40bb-8fd6-ff4e20c3b42e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Cramer", - "company": "Dynarama", - "phone": "862-434-3282", - "email": "zoe@dynarama.com" - }, - { - "id": 3536, - "guid": "746d39ea-0691-499e-b3c0-05f3a32c0127", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Clapton", - "company": "Sontopia", - "phone": "881-410-2548", - "email": "lillian@sontopia.com" - }, - { - "id": 3537, - "guid": "cabb3d96-de68-4f27-aa52-bb5b22c36dc0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Milton", - "company": "US Omnigraphik", - "phone": "867-598-2973", - "email": "chloe@us omnigraphik.com" - }, - { - "id": 3538, - "guid": "cf0cef15-f985-40a9-aee2-f720e3c0deeb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline White", - "company": "Anaframe", - "phone": "827-521-2696", - "email": "caroline@anaframe.com" - }, - { - "id": 3539, - "guid": "5b015348-0af8-432a-b282-6942ea75c7b9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Hoggarth", - "company": "Steganoconiche", - "phone": "817-530-2653", - "email": "taylor@steganoconiche.com" - }, - { - "id": 3540, - "guid": "319e0b5a-ce51-4cb3-a4db-d2910929cfea", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Webster", - "company": "Multitiqua", - "phone": "855-405-3826", - "email": "trinity@multitiqua.com" - }, - { - "id": 3541, - "guid": "87deca7b-e143-4c07-876b-ff2aaecf6850", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Vance", - "company": "Allphysiche", - "phone": "831-594-3994", - "email": "gianna@allphysiche.com" - }, - { - "id": 3542, - "guid": "aa5287ac-8207-41a7-8157-ac23e6f6d4fa", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Cook", - "company": "Venconix", - "phone": "872-475-3761", - "email": "genesis@venconix.com" - }, - { - "id": 3543, - "guid": "0a4f0c6f-bc12-4f54-8651-13f43ae6017b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Hawkins", - "company": "Teratopia", - "phone": "874-518-3128", - "email": "andrea@teratopia.com" - }, - { - "id": 3544, - "guid": "d1cc005f-6e48-4c88-b77a-32b28f534c3a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Watson", - "company": "Venconix", - "phone": "817-522-2780", - "email": "khloe@venconix.com" - }, - { - "id": 3545, - "guid": "b28d48ec-4470-45e5-b017-8bdd54ff7fcc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Oliver", - "company": "Vencom", - "phone": "864-564-3290", - "email": "katelyn@vencom.com" - }, - { - "id": 3546, - "guid": "670723a0-c435-4eb2-9f95-f776d4bb080c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Mercer", - "company": "Rapigrafix", - "phone": "836-508-3392", - "email": "molly@rapigrafix.com" - }, - { - "id": 3547, - "guid": "231ecf59-d065-43b6-9f1b-8b8d5b5972ae", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Osborne", - "company": "Conrama", - "phone": "820-578-3439", - "email": "gabrielle@conrama.com" - }, - { - "id": 3548, - "guid": "83101460-1d69-46ba-adb8-6355ff2e0fc9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Freeman", - "company": "iEnland", - "phone": "878-515-2980", - "email": "isabelle@ienland.com" - }, - { - "id": 3549, - "guid": "886a2055-a8ec-44e6-aa22-742681d8a582", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Owen", - "company": "Truegate", - "phone": "851-461-2865", - "email": "kaitlyn@truegate.com" - }, - { - "id": 3550, - "guid": "7968c0c7-9fe3-48a5-9671-6a08f824e03b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Nathan", - "company": "Syssoft", - "phone": "890-464-2046", - "email": "gabrielle@syssoft.com" - }, - { - "id": 3551, - "guid": "9ff055a9-04b3-4a87-8f50-87ecfae1f806", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Smith", - "company": "iEnland", - "phone": "841-411-3405", - "email": "gabriella@ienland.com" - }, - { - "id": 3552, - "guid": "6f55a98e-5023-425b-9bb9-b773192f10b9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Nelson", - "company": "Westmedia", - "phone": "852-462-2264", - "email": "nevaeh@westmedia.com" - }, - { - "id": 3553, - "guid": "b541db56-8b7e-4ef3-99a4-13b2ec435f65", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Brown", - "company": "Orthosoft", - "phone": "827-569-3566", - "email": "morgan@orthosoft.com" - }, - { - "id": 3554, - "guid": "c96db4e1-6f3c-496c-b0aa-c46cea18d69f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Nathan", - "company": "Westtomik", - "phone": "817-449-3390", - "email": "autumn@westtomik.com" - }, - { - "id": 3555, - "guid": "08b83434-a2be-4b15-afdc-16a3946ec565", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Youmans", - "company": "Navivacs", - "phone": "818-401-3708", - "email": "olivia@navivacs.com" - }, - { - "id": 3556, - "guid": "9abf1f3c-dae4-421d-94d4-806fc0908b03", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Paige Gardner", - "company": "Pericenta", - "phone": "826-599-2218", - "email": "paige@pericenta.com" - }, - { - "id": 3557, - "guid": "12cd0647-e69d-4f30-86fd-e2551dc8070e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Clapton", - "company": "Robotomic", - "phone": "804-520-2931", - "email": "rachel@robotomic.com" - }, - { - "id": 3558, - "guid": "9ca5cb4b-56d4-4da3-b033-01f47413d1f4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Gardner", - "company": "Venconix", - "phone": "853-589-2257", - "email": "angelina@venconix.com" - }, - { - "id": 3559, - "guid": "8c26b32d-3473-4afe-ba0f-65abdb40632c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Ford", - "company": "Conrama", - "phone": "894-438-2122", - "email": "molly@conrama.com" - }, - { - "id": 3560, - "guid": "0b97925d-ce2f-43f0-b7c5-43328acd6b24", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Thorndike", - "company": "Titanirola", - "phone": "892-444-2880", - "email": "victoria@titanirola.com" - }, - { - "id": 3561, - "guid": "440760bf-fc87-458a-b401-49b1735c11df", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Ford", - "company": "Conrama", - "phone": "882-582-2953", - "email": "brianna@conrama.com" - }, - { - "id": 3562, - "guid": "5845a19e-b6db-44f4-8670-70c41dae376e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Ford", - "company": "OpKeycomm", - "phone": "838-504-2248", - "email": "kayla@opkeycomm.com" - }, - { - "id": 3563, - "guid": "049fff41-2763-4064-bfcd-0d4de8530115", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Gardner", - "company": "Thermotomic", - "phone": "847-429-3538", - "email": "faith@thermotomic.com" - }, - { - "id": 3564, - "guid": "482bf6a4-32d5-44bd-9b1f-59a66c3460a3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Haig", - "company": "Nanobanc", - "phone": "886-577-3263", - "email": "jasmine@nanobanc.com" - }, - { - "id": 3565, - "guid": "71296707-193a-4a01-bc60-3d738ef2619c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Camila Waller", - "company": "Hypervaco", - "phone": "863-576-2730", - "email": "camila@hypervaco.com" - }, - { - "id": 3566, - "guid": "e06c3fe1-2bd1-4af1-b52d-8d902483371e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Chandter", - "company": "eEyetanic", - "phone": "829-484-3448", - "email": "addison@eeyetanic.com" - }, - { - "id": 3567, - "guid": "4efdcc95-9dcc-42f6-b518-58168138d937", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Michaelson", - "company": "Videobanc", - "phone": "854-571-2969", - "email": "melanie@videobanc.com" - }, - { - "id": 3568, - "guid": "5fefa229-fde8-4854-b092-9b1ad5cd5b51", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Cook", - "company": "Robotomic", - "phone": "848-445-3419", - "email": "gabriella@robotomic.com" - }, - { - "id": 3569, - "guid": "ad97c358-32dd-4e12-9afc-e01bfec3f5b6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Stanley", - "company": "Fibroserve", - "phone": "865-526-3658", - "email": "bailey@fibroserve.com" - }, - { - "id": 3570, - "guid": "2b2d3c0e-4ba3-46cc-9a6f-a311205d080b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoe Hardman", - "company": "Truegate", - "phone": "819-529-3279", - "email": "zoe@truegate.com" - }, - { - "id": 3571, - "guid": "9e9188a2-1d5f-4b0d-8fd9-0308d0250b16", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Brooks", - "company": "Videobanc", - "phone": "844-572-3863", - "email": "payton@videobanc.com" - }, - { - "id": 3572, - "guid": "28b80dce-02b5-4bc5-b947-d93b47f50911", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexa Morrison", - "company": "Aluco", - "phone": "883-491-3839", - "email": "alexa@aluco.com" - }, - { - "id": 3573, - "guid": "cac5a2a1-d12a-42c2-b224-2f43e5ef6eea", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Davidson", - "company": "Allnet", - "phone": "887-599-2446", - "email": "layla@allnet.com" - }, - { - "id": 3574, - "guid": "c6163a04-1a1d-4004-9015-2c287a5e5aad", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia White", - "company": "US Omnigraphik", - "phone": "814-483-2540", - "email": "amelia@us omnigraphik.com" - }, - { - "id": 3575, - "guid": "8c933754-639f-4ee3-a752-d8731d2f59b9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Daniels", - "company": "Cryptotemplate", - "phone": "871-548-2629", - "email": "jocelyn@cryptotemplate.com" - }, - { - "id": 3576, - "guid": "270ff3af-5692-4aa5-8be4-d3a3dcede698", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa Gilson", - "company": "Anagraph", - "phone": "831-495-2365", - "email": "vanessa@anagraph.com" - }, - { - "id": 3577, - "guid": "562564a9-8e78-45d1-9a5f-81090220ccdf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Waller", - "company": "Anagraph", - "phone": "813-542-3822", - "email": "alexa@anagraph.com" - }, - { - "id": 3578, - "guid": "3c747ccb-88a8-4e20-944a-f1dbc66d094c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bella Gerald", - "company": "Steganoconiche", - "phone": "871-471-3290", - "email": "bella@steganoconiche.com" - }, - { - "id": 3579, - "guid": "9f8cc5f0-4e2b-4e03-b31b-692aed444914", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Chapman", - "company": "Allphysiche", - "phone": "831-446-3878", - "email": "jasmine@allphysiche.com" - }, - { - "id": 3580, - "guid": "bbf9dc7d-d3ec-41c2-a87e-17297d84f2c1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Waller", - "company": "iOptystix", - "phone": "811-455-2857", - "email": "zoe@ioptystix.com" - }, - { - "id": 3581, - "guid": "183f8dcc-b79b-498a-8b75-d92423d7b459", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Conors", - "company": "Airdyne", - "phone": "833-478-3419", - "email": "elizabeth@airdyne.com" - }, - { - "id": 3582, - "guid": "e9a46237-1479-483e-9384-0b39e33f4a22", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Wood", - "company": "Westtomik", - "phone": "854-539-3736", - "email": "mya@westtomik.com" - }, - { - "id": 3583, - "guid": "a696231e-525c-4224-a8d6-34ba91343523", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Valeria Miller", - "company": "iQualcar", - "phone": "884-448-2374", - "email": "valeria@iqualcar.com" - }, - { - "id": 3584, - "guid": "48d0ac97-1408-4b51-b40a-7ca8fd1e9aab", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Hailey", - "company": "Hypervaco", - "phone": "851-492-2743", - "email": "jocelyn@hypervaco.com" - }, - { - "id": 3585, - "guid": "960b0669-6dd1-4ceb-8287-9cd501c0a56f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Day", - "company": "Titanirola", - "phone": "843-456-3455", - "email": "amelia@titanirola.com" - }, - { - "id": 3586, - "guid": "7a545295-2496-46ea-9838-ab58c621c7d1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Wallace", - "company": "Proline", - "phone": "844-412-2836", - "email": "makayla@proline.com" - }, - { - "id": 3587, - "guid": "2be7e949-a7cb-4acf-93f5-1eda590a2153", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Miln", - "company": "Fibrotopia", - "phone": "803-590-2386", - "email": "andrea@fibrotopia.com" - }, - { - "id": 3588, - "guid": "92e71e40-45ce-4b26-89a4-e36a3f94539e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Oldman", - "company": "Dynarama", - "phone": "823-416-3885", - "email": "makayla@dynarama.com" - }, - { - "id": 3589, - "guid": "c82b5886-273c-4711-83e1-0e435a374250", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Wesley", - "company": "Transtouch", - "phone": "805-513-2102", - "email": "leah@transtouch.com" - }, - { - "id": 3590, - "guid": "5662f94c-473b-4e83-8e28-553733c50f23", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Gate", - "company": "Mescatron", - "phone": "897-595-3864", - "email": "serenity@mescatron.com" - }, - { - "id": 3591, - "guid": "f4183c3e-dfbe-494e-98c8-b17e512db9cc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Day", - "company": "Robotemplate", - "phone": "864-548-3724", - "email": "angelina@robotemplate.com" - }, - { - "id": 3592, - "guid": "6c9543c5-b765-4739-acbd-4a1944a8b3cf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Carroll", - "company": "Westgate", - "phone": "827-563-3517", - "email": "evelyn@westgate.com" - }, - { - "id": 3593, - "guid": "7fad25fc-c7ec-4aac-bb72-1e21e95b369b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Croftoon", - "company": "Vencom", - "phone": "838-477-2593", - "email": "allison@vencom.com" - }, - { - "id": 3594, - "guid": "71cc7c62-a1e1-4b44-b142-ffb739fb04c1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Destiny Cramer", - "company": "Infraique", - "phone": "825-467-3603", - "email": "destiny@infraique.com" - }, - { - "id": 3595, - "guid": "54b1983a-5da8-4a06-be8d-9d0dc2506741", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Gustman", - "company": "Polytheon", - "phone": "826-498-2061", - "email": "gianna@polytheon.com" - }, - { - "id": 3596, - "guid": "81386732-ad42-447b-82a7-a77171967cdc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Hamphrey", - "company": "Tekcar", - "phone": "805-431-2861", - "email": "emily@tekcar.com" - }, - { - "id": 3597, - "guid": "f60f53ec-c2fe-4fc5-bf02-0b1a8f9ed1da", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Brooks", - "company": "Syssoft", - "phone": "893-467-3911", - "email": "hannah@syssoft.com" - }, - { - "id": 3598, - "guid": "ee8ef2e0-c60c-4c12-81de-857b9e1c6d1a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Nathan", - "company": "iEnland", - "phone": "856-426-3989", - "email": "mia@ienland.com" - }, - { - "id": 3599, - "guid": "654857e7-a3b9-4b9c-a06f-55ac1bbcc7c0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Goodman", - "company": "Mescatron", - "phone": "801-523-3985", - "email": "destiny@mescatron.com" - }, - { - "id": 3600, - "guid": "a2114c1f-f393-419e-b6fb-29764fabb44a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Fisher", - "company": "Mescaridic", - "phone": "892-595-2871", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 3601, - "guid": "2395bcc9-a8d8-465a-9ef9-bb3bce8eefa8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Thomson", - "company": "Gigaura", - "phone": "800-413-2490", - "email": "mia@gigaura.com" - }, - { - "id": 3602, - "guid": "5d7bf114-dff8-46a4-bbec-c267b688b641", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alyssa Day", - "company": "Hypervaco", - "phone": "889-468-2149", - "email": "alyssa@hypervaco.com" - }, - { - "id": 3603, - "guid": "08ab8c56-3f86-4c94-ac2e-daf855cede42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Wood", - "company": "Teknoplexon", - "phone": "808-531-3456", - "email": "taylor@teknoplexon.com" - }, - { - "id": 3604, - "guid": "13b0fe50-a1be-4796-b257-c00793b6e86b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Higgins", - "company": "Unologic", - "phone": "875-465-2956", - "email": "kayla@unologic.com" - }, - { - "id": 3605, - "guid": "d61396ab-9a8e-4cd2-9a0e-5248a90e2a45", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Haig", - "company": "Airdyne", - "phone": "834-526-2500", - "email": "riley@airdyne.com" - }, - { - "id": 3606, - "guid": "c56289a3-4480-4f21-be92-49903c003fa8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Nash", - "company": "Skydata", - "phone": "852-479-3379", - "email": "molly@skydata.com" - }, - { - "id": 3607, - "guid": "0e6afacd-8f3a-43eb-aba0-36d1140f7973", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Harrison", - "company": "Teratopia", - "phone": "885-412-2443", - "email": "allison@teratopia.com" - }, - { - "id": 3608, - "guid": "232874c8-dfb9-4b6d-8aa9-1b3cc072c08f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Fisher", - "company": "iSkyvaco", - "phone": "806-435-3266", - "email": "serenity@iskyvaco.com" - }, - { - "id": 3609, - "guid": "856ab1b0-1d38-4ced-b443-bc3e61f2ff61", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Gerald", - "company": "Ventanium", - "phone": "885-475-3706", - "email": "gabrielle@ventanium.com" - }, - { - "id": 3610, - "guid": "8529d9ae-0e68-445e-b7c6-ef27ebecd1fe", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Miller", - "company": "Hypervaco", - "phone": "814-527-3682", - "email": "charlotte@hypervaco.com" - }, - { - "id": 3611, - "guid": "8230a018-870a-4119-810a-7999341e3cab", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Gardner", - "company": "Westtomik", - "phone": "870-491-2174", - "email": "brooklyn@westtomik.com" - }, - { - "id": 3612, - "guid": "094162fb-8140-4023-8917-a5268761b517", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Goodman", - "company": "Aprama", - "phone": "850-446-3737", - "email": "valeria@aprama.com" - }, - { - "id": 3613, - "guid": "4ddd0596-1254-4427-8e4f-87e1afcc37e2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Hawkins", - "company": "Mescaridic", - "phone": "813-486-3322", - "email": "charlotte@mescaridic.com" - }, - { - "id": 3614, - "guid": "7c4466c6-1235-4091-8a00-dfcbc765f294", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aaliyah Brown", - "company": "Titanigraf", - "phone": "882-510-2313", - "email": "aaliyah@titanigraf.com" - }, - { - "id": 3615, - "guid": "d51a3025-c6d0-4391-82e6-8d22ebb04429", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Waller", - "company": "eSteganoergy", - "phone": "800-516-2356", - "email": "sarah@esteganoergy.com" - }, - { - "id": 3616, - "guid": "9f8ff47a-98fc-42b8-898a-247a755bea2d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Evelyn Warren", - "company": "Xeicon", - "phone": "850-463-2856", - "email": "evelyn@xeicon.com" - }, - { - "id": 3617, - "guid": "980c1875-c891-4954-a479-6acfa289c0c9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Daniels", - "company": "Robotemplate", - "phone": "823-543-3852", - "email": "evelyn@robotemplate.com" - }, - { - "id": 3618, - "guid": "88abb8b5-76ef-48dd-aaaf-359bd5608c8d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Murphy", - "company": "Anagraph", - "phone": "809-463-3443", - "email": "mya@anagraph.com" - }, - { - "id": 3619, - "guid": "98a06a66-41b1-4288-86c8-245787f3123c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Ford", - "company": "Raylog", - "phone": "892-512-3057", - "email": "sydney@raylog.com" - }, - { - "id": 3620, - "guid": "379bc09e-4652-4b64-a0f0-6bc748035642", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Timmons", - "company": "Ameritron", - "phone": "839-509-2053", - "email": "angelina@ameritron.com" - }, - { - "id": 3621, - "guid": "3f70c865-08b2-49ee-9a1b-e6ccb9a8d8b9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Neal", - "company": "Ameritron", - "phone": "841-547-2042", - "email": "olivia@ameritron.com" - }, - { - "id": 3622, - "guid": "246f6f93-1a2e-4d0b-b8c2-f995d13aa098", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Turner", - "company": "InfoAirway", - "phone": "823-526-2324", - "email": "vanessa@infoairway.com" - }, - { - "id": 3623, - "guid": "4681f29a-fcd4-43ae-9b40-faf2eae283b5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Sherlock", - "company": "Keytheon", - "phone": "854-538-3411", - "email": "kylie@keytheon.com" - }, - { - "id": 3624, - "guid": "7d2cf65b-b8ca-476e-9d31-99d205589cfb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Watson", - "company": "Qualserve", - "phone": "854-478-3025", - "email": "brooke@qualserve.com" - }, - { - "id": 3625, - "guid": "176722aa-175c-4467-82a1-49e1be177536", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Gustman", - "company": "Westgate", - "phone": "825-484-2087", - "email": "leah@westgate.com" - }, - { - "id": 3626, - "guid": "c5e96b5f-02db-4f37-a6ea-e87e8862184d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Goldman", - "company": "Celgra", - "phone": "841-583-3369", - "email": "savannah@celgra.com" - }, - { - "id": 3627, - "guid": "5e476d6f-19fb-4e7c-9a82-bf70fc6db03c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Smith", - "company": "Jamconik", - "phone": "831-483-3297", - "email": "serenity@jamconik.com" - }, - { - "id": 3628, - "guid": "58040221-8e45-401d-a8ab-7774dad4564f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Gilmore", - "company": "Allnet", - "phone": "868-549-3439", - "email": "gabrielle@allnet.com" - }, - { - "id": 3629, - "guid": "2416be0f-b658-466c-a136-473a9aedd709", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Clapton", - "company": "Turbomart", - "phone": "839-470-3332", - "email": "leah@turbomart.com" - }, - { - "id": 3630, - "guid": "dcd5fc2a-0fed-45ba-b9dc-2c19e44dc998", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Riley White", - "company": "Anagraph", - "phone": "847-600-2263", - "email": "riley@anagraph.com" - }, - { - "id": 3631, - "guid": "44acff66-6d78-42f7-9801-d576142e9f12", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Webster", - "company": "Hypervaco", - "phone": "802-589-3982", - "email": "brooklyn@hypervaco.com" - }, - { - "id": 3632, - "guid": "9ca77b90-dd1e-4f7a-96c1-44416a823623", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Hodges", - "company": "Steganoconiche", - "phone": "861-491-2017", - "email": "nevaeh@steganoconiche.com" - }, - { - "id": 3633, - "guid": "b9d4aa00-b873-4975-b6f6-068b88720628", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Miln", - "company": "Proline", - "phone": "830-445-3325", - "email": "eva@proline.com" - }, - { - "id": 3634, - "guid": "f6c7a054-0d2f-4c4d-99ab-2ed72c9bb9df", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Gardner", - "company": "Teratopia", - "phone": "882-508-2043", - "email": "savannah@teratopia.com" - }, - { - "id": 3635, - "guid": "d9074072-2436-4b33-8869-61418377ee93", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Crossman", - "company": "eEyetanic", - "phone": "836-547-2950", - "email": "hailey@eeyetanic.com" - }, - { - "id": 3636, - "guid": "62dc52b2-af48-426c-89e3-75383e2e136a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Carter", - "company": "Aluco", - "phone": "868-415-3529", - "email": "jocelyn@aluco.com" - }, - { - "id": 3637, - "guid": "89533d38-e97d-4988-9c01-b213bc7ae7b5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Hancock", - "company": "Qualserve", - "phone": "857-442-2768", - "email": "andrea@qualserve.com" - }, - { - "id": 3638, - "guid": "05538492-8fab-4936-aa92-c75c2030efd1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Young", - "company": "Vencom", - "phone": "802-494-2129", - "email": "jocelyn@vencom.com" - }, - { - "id": 3639, - "guid": "6f390643-0934-47f7-b517-2352768980e3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ariana Miller", - "company": "Orthomedia", - "phone": "809-570-3666", - "email": "ariana@orthomedia.com" - }, - { - "id": 3640, - "guid": "b5475e72-c631-422c-99b9-176dd0c03118", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Brown", - "company": "Transtouch", - "phone": "818-483-2635", - "email": "alexa@transtouch.com" - }, - { - "id": 3641, - "guid": "765895a4-1a5d-45df-8498-f87e6165da6f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Gilbert", - "company": "Conrama", - "phone": "824-557-2201", - "email": "lillian@conrama.com" - }, - { - "id": 3642, - "guid": "64a1fd1f-cebf-446f-ac1b-6deddf889673", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Turner", - "company": "Thermotomic", - "phone": "895-505-2836", - "email": "alexis@thermotomic.com" - }, - { - "id": 3643, - "guid": "310f7587-b7d7-4071-bbc1-893d7e7a7187", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Wainwright", - "company": "Pacwest", - "phone": "875-545-2589", - "email": "brooklyn@pacwest.com" - }, - { - "id": 3644, - "guid": "21e44727-6277-4c76-b31e-bd2279999825", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Vanessa Fulton", - "company": "Allphysiche", - "phone": "834-560-3873", - "email": "vanessa@allphysiche.com" - }, - { - "id": 3645, - "guid": "4351e90e-fff5-42af-8a27-b286a7881996", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Elizabeth Cramer", - "company": "Titanirola", - "phone": "845-555-3951", - "email": "elizabeth@titanirola.com" - }, - { - "id": 3646, - "guid": "b3154917-0063-4ed9-b7fe-de6b990e8f49", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Owen", - "company": "Netseco", - "phone": "801-550-2598", - "email": "charlotte@netseco.com" - }, - { - "id": 3647, - "guid": "0a266bfc-0114-4c46-9113-4c4f3cf11f5c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Peyton Gilson", - "company": "iQualcar", - "phone": "842-464-2646", - "email": "peyton@iqualcar.com" - }, - { - "id": 3648, - "guid": "49a77f77-3849-4a5b-aecc-eea91ef7bc8a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Sheldon", - "company": "Indisco", - "phone": "870-533-2635", - "email": "ashley@indisco.com" - }, - { - "id": 3649, - "guid": "82a4bc06-29b6-410d-bb5b-5ba7232ac4f8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Carter", - "company": "Videobanc", - "phone": "867-412-3186", - "email": "sofia@videobanc.com" - }, - { - "id": 3650, - "guid": "7fbb377c-dfe3-4967-9911-045757e3bd03", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Vaughan", - "company": "Skydata", - "phone": "845-441-3895", - "email": "brianna@skydata.com" - }, - { - "id": 3651, - "guid": "1adc5caa-11f7-4afc-80d1-1574d082fcbe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Turner", - "company": "Idmax", - "phone": "829-560-3605", - "email": "paige@idmax.com" - }, - { - "id": 3652, - "guid": "f5c40056-52f1-476b-aeaa-4b1c39de8b73", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Brown", - "company": "iQualcar", - "phone": "878-500-3171", - "email": "maya@iqualcar.com" - }, - { - "id": 3653, - "guid": "e6096935-5f78-4a57-808d-5c7de35269bc", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Gate", - "company": "Enlogia", - "phone": "814-502-2769", - "email": "isabelle@enlogia.com" - }, - { - "id": 3654, - "guid": "4e421582-74f1-4348-b2fe-3c0847b397f4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Hardman", - "company": "Generola", - "phone": "819-406-2950", - "email": "isabelle@generola.com" - }, - { - "id": 3655, - "guid": "7b7ec2f3-cf3a-412b-a795-8a6112b27e20", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Walkman", - "company": "RoboAerlogix", - "phone": "817-405-3855", - "email": "alexandra@roboaerlogix.com" - }, - { - "id": 3656, - "guid": "58c20c95-178b-4713-90bc-67a4ae31d4d3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Avery Bush", - "company": "Mescatron", - "phone": "808-442-2411", - "email": "avery@mescatron.com" - }, - { - "id": 3657, - "guid": "25da7d7e-6223-4050-bd75-fa14cd539e41", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Brooks", - "company": "iMedconik", - "phone": "896-455-3175", - "email": "grace@imedconik.com" - }, - { - "id": 3658, - "guid": "c019b4cb-04f9-4de1-ba83-504de49536eb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Youmans", - "company": "Venconix", - "phone": "831-479-2732", - "email": "jasmine@venconix.com" - }, - { - "id": 3659, - "guid": "518af0e6-9c07-42b5-8ec9-6ab72465584a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Gilson", - "company": "InfoAirway", - "phone": "853-404-2329", - "email": "aubrey@infoairway.com" - }, - { - "id": 3660, - "guid": "d0074e8e-af35-4bb9-ad09-69a861a6a1e7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Wayne", - "company": "Sontopia", - "phone": "801-533-2639", - "email": "gianna@sontopia.com" - }, - { - "id": 3661, - "guid": "ffa2fc54-ded5-48db-b83b-ed27974f84b4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Webster", - "company": "Quintegrity", - "phone": "889-401-2234", - "email": "kaitlyn@quintegrity.com" - }, - { - "id": 3662, - "guid": "e2b258e8-37a9-43d8-8a43-9f41a252bb7d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Morrison", - "company": "US Infratouch", - "phone": "814-507-2153", - "email": "vanessa@us infratouch.com" - }, - { - "id": 3663, - "guid": "8a083563-30fc-4696-8a99-901152e9d170", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Hawkins", - "company": "iEnland", - "phone": "866-561-2478", - "email": "gianna@ienland.com" - }, - { - "id": 3664, - "guid": "bea173c8-b7bb-4bae-b6ed-384b2c01837c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Gardner", - "company": "Airdyne", - "phone": "800-423-2846", - "email": "kayla@airdyne.com" - }, - { - "id": 3665, - "guid": "739720ba-227a-460b-8cb0-2ddded0ea383", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Morrison", - "company": "SysUSA", - "phone": "826-478-2288", - "email": "emily@sysusa.com" - }, - { - "id": 3666, - "guid": "35a589f2-db64-4ecf-bc01-52ef886dade4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maya Calhoun", - "company": "Interliant", - "phone": "814-537-3014", - "email": "maya@interliant.com" - }, - { - "id": 3667, - "guid": "4e8cbbcc-1921-4e62-a7cb-6ad7335fb519", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Milton", - "company": "Ventanium", - "phone": "846-420-2439", - "email": "eva@ventanium.com" - }, - { - "id": 3668, - "guid": "11539faa-6351-4447-b4c2-6a37a62efd71", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Gilbert", - "company": "Allphysiche", - "phone": "813-452-3734", - "email": "alyssa@allphysiche.com" - }, - { - "id": 3669, - "guid": "23380a9e-37fe-47e9-ac03-7e5c8f6d8e7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Gate", - "company": "Entcast", - "phone": "818-473-2493", - "email": "kimberly@entcast.com" - }, - { - "id": 3670, - "guid": "eb4c5b1b-7418-4c76-aac0-3332415c3f1e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Winter", - "company": "Steganoconiche", - "phone": "868-402-2029", - "email": "andrea@steganoconiche.com" - }, - { - "id": 3671, - "guid": "0c5a4660-38d1-4385-b1cc-0955002f9f72", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Morgan Oldman", - "company": "Conotomics", - "phone": "844-440-2664", - "email": "morgan@conotomics.com" - }, - { - "id": 3672, - "guid": "93803d1c-dceb-4908-87ed-571e5a48da36", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Gerald", - "company": "Sontopia", - "phone": "811-473-2166", - "email": "emily@sontopia.com" - }, - { - "id": 3673, - "guid": "ad690ebc-3d68-4999-8d5b-3fb8c7850871", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Hodges", - "company": "Titanigraf", - "phone": "876-544-2635", - "email": "lauren@titanigraf.com" - }, - { - "id": 3674, - "guid": "c7dfdf3c-4da8-4e54-96b4-1f5a186f2e0c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Daniels", - "company": "Unologic", - "phone": "888-419-3006", - "email": "morgan@unologic.com" - }, - { - "id": 3675, - "guid": "114b45d8-b13b-494b-810f-9c00fad07d28", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Olivia Youmans", - "company": "Turbomart", - "phone": "893-579-3483", - "email": "olivia@turbomart.com" - }, - { - "id": 3676, - "guid": "da35d439-4cb0-4b60-830c-faa7fa7e91e4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Hawkins", - "company": "Teraserv", - "phone": "830-557-3290", - "email": "sophie@teraserv.com" - }, - { - "id": 3677, - "guid": "f707ac52-ae4d-4979-bb49-7a398a4d8b79", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Gibbs", - "company": "Conrama", - "phone": "864-470-3963", - "email": "mia@conrama.com" - }, - { - "id": 3678, - "guid": "20227c04-1ca8-44ae-bb24-b50b18b4da8c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Morrison", - "company": "US Infratouch", - "phone": "846-549-2775", - "email": "audrey@us infratouch.com" - }, - { - "id": 3679, - "guid": "db9a1933-f347-462b-bc3b-45fd4a35b53a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Nathan", - "company": "OpKeycomm", - "phone": "895-473-2945", - "email": "molly@opkeycomm.com" - }, - { - "id": 3680, - "guid": "775db749-a2b1-473b-97be-fa99aea40e18", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabrielle Watson", - "company": "Techtron", - "phone": "835-584-2464", - "email": "gabrielle@techtron.com" - }, - { - "id": 3681, - "guid": "db55245f-3ba4-447d-805b-ad8bf84eb2ff", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Smith", - "company": "Conotomics", - "phone": "867-542-2498", - "email": "sophia@conotomics.com" - }, - { - "id": 3682, - "guid": "ab954250-ba05-4f8a-a265-5b237aa3190a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Walkman", - "company": "Teratopia", - "phone": "819-549-3768", - "email": "khloe@teratopia.com" - }, - { - "id": 3683, - "guid": "5152895b-bfaa-48f3-93f3-50df7880401a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Hawkins", - "company": "Netseco", - "phone": "819-552-2697", - "email": "madelyn@netseco.com" - }, - { - "id": 3684, - "guid": "7abba28c-6d89-44ec-aa17-45e9e07cc1ca", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Arianna Wayne", - "company": "Conotomics", - "phone": "863-483-2528", - "email": "arianna@conotomics.com" - }, - { - "id": 3685, - "guid": "57254077-8dad-489c-822c-94020ebf3374", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Charlson", - "company": "Titanigraf", - "phone": "813-471-3494", - "email": "molly@titanigraf.com" - }, - { - "id": 3686, - "guid": "c162c708-f917-434f-a655-09ed215a6c93", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madelyn Winter", - "company": "Robotomic", - "phone": "803-509-3067", - "email": "madelyn@robotomic.com" - }, - { - "id": 3687, - "guid": "839f7a89-9491-4224-8d20-26496f27ed50", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Morrison", - "company": "Dynarama", - "phone": "827-477-2050", - "email": "autumn@dynarama.com" - }, - { - "id": 3688, - "guid": "39a56d5f-ceb7-42e1-9c51-0d878cebdadc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Goldman", - "company": "iSkyvaco", - "phone": "844-409-2355", - "email": "zoey@iskyvaco.com" - }, - { - "id": 3689, - "guid": "94d8fcda-9a89-48df-9ad2-a7d00e739741", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Daniels", - "company": "Truetomic", - "phone": "848-585-3284", - "email": "taylor@truetomic.com" - }, - { - "id": 3690, - "guid": "0e6a38ef-4c93-403c-9bf1-616e43d3e3a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Sherlock", - "company": "Unologic", - "phone": "852-453-3640", - "email": "khloe@unologic.com" - }, - { - "id": 3691, - "guid": "202bef1e-842a-450f-8b5a-013289e5703a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aaliyah Clapton", - "company": "Conotomics", - "phone": "812-562-3345", - "email": "aaliyah@conotomics.com" - }, - { - "id": 3692, - "guid": "f3e19f89-d377-402f-bb12-e45170598025", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Miln", - "company": "Venconix", - "phone": "874-567-3653", - "email": "nevaeh@venconix.com" - }, - { - "id": 3693, - "guid": "44732b04-a2f3-4ba6-8734-1f325ef43860", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Abramson", - "company": "RoboAerlogix", - "phone": "865-457-2791", - "email": "gianna@roboaerlogix.com" - }, - { - "id": 3694, - "guid": "5f7ce4b2-de3b-493e-8411-19a35e9fbea0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aubrey Neal", - "company": "Infragraph", - "phone": "863-585-2197", - "email": "aubrey@infragraph.com" - }, - { - "id": 3695, - "guid": "4347a3a9-776d-4c8c-8430-03b47e658441", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Morgan Oldman", - "company": "Fibrotouch", - "phone": "821-409-2304", - "email": "morgan@fibrotouch.com" - }, - { - "id": 3696, - "guid": "75b5984e-88f8-4c27-b6eb-c73c855bd0c9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Gilson", - "company": "Steganoconiche", - "phone": "865-442-2067", - "email": "destiny@steganoconiche.com" - }, - { - "id": 3697, - "guid": "41675c0c-dcc7-482c-9dc4-14cd96bca5d5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lillian Goodman", - "company": "Safeagra", - "phone": "890-489-2233", - "email": "lillian@safeagra.com" - }, - { - "id": 3698, - "guid": "0761f666-7f04-4b43-974a-82f906163dbd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jessica Nash", - "company": "Teratopia", - "phone": "852-515-3690", - "email": "jessica@teratopia.com" - }, - { - "id": 3699, - "guid": "b095e90b-0f6e-4f7d-ae64-21ecfa8ba025", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Young", - "company": "Anaframe", - "phone": "805-584-3561", - "email": "olivia@anaframe.com" - }, - { - "id": 3700, - "guid": "131cb5a0-73fe-4f81-9ffd-4c09547c0d72", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kylie Day", - "company": "Aprama", - "phone": "828-474-2399", - "email": "kylie@aprama.com" - }, - { - "id": 3701, - "guid": "30a34596-ee0d-46c5-bafb-1f429e8ac4e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brianna Miller", - "company": "Truetomic", - "phone": "841-555-2902", - "email": "brianna@truetomic.com" - }, - { - "id": 3702, - "guid": "af2cd5b4-907a-4a1b-886b-17aac7e3ff02", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Eva Webster", - "company": "Anagraph", - "phone": "871-582-3484", - "email": "eva@anagraph.com" - }, - { - "id": 3703, - "guid": "75736e06-47b8-475a-80dd-625d68272b8f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Sherlock", - "company": "eEyetanic", - "phone": "806-503-3637", - "email": "khloe@eeyetanic.com" - }, - { - "id": 3704, - "guid": "c588c624-a191-459d-ad84-c82fecf5f481", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sarah Waller", - "company": "Pericenta", - "phone": "800-489-2295", - "email": "sarah@pericenta.com" - }, - { - "id": 3705, - "guid": "e7826446-13dd-4d91-b1b8-0445a12fef0f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Cook", - "company": "Truetomic", - "phone": "845-484-3628", - "email": "kylie@truetomic.com" - }, - { - "id": 3706, - "guid": "86e927a8-591b-4034-bba1-c48799bed11b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Thornton", - "company": "Pacwest", - "phone": "849-545-2858", - "email": "riley@pacwest.com" - }, - { - "id": 3707, - "guid": "e263951f-63b4-4503-8173-6bf15af07940", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lauren Goodman", - "company": "Cryptotemplate", - "phone": "849-508-2887", - "email": "lauren@cryptotemplate.com" - }, - { - "id": 3708, - "guid": "b6e8dfb3-51fd-4f48-ae4d-60e4810b68b6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Ford", - "company": "US Omnigraphik", - "phone": "858-557-3455", - "email": "sofia@us omnigraphik.com" - }, - { - "id": 3709, - "guid": "40bdb982-845f-4947-aad9-52009d1fb894", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Goodman", - "company": "Videobanc", - "phone": "849-479-2506", - "email": "angelina@videobanc.com" - }, - { - "id": 3710, - "guid": "0b122991-e9d1-4f42-9fc5-fb9fe06e8d08", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabelle Carey", - "company": "Quintegrity", - "phone": "871-448-3186", - "email": "isabelle@quintegrity.com" - }, - { - "id": 3711, - "guid": "8540b8a7-4aa4-48b1-92d4-769cdfd641d9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maya Thornton", - "company": "Anaframe", - "phone": "884-600-3408", - "email": "maya@anaframe.com" - }, - { - "id": 3712, - "guid": "fb69a166-3c22-4700-98f6-2c1b9f1c879d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Vance", - "company": "Tekcar", - "phone": "800-510-2446", - "email": "melanie@tekcar.com" - }, - { - "id": 3713, - "guid": "92a9ad0a-e83c-4d20-a3e5-56015b923ec1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Harrison", - "company": "Compuamerica", - "phone": "862-465-3509", - "email": "samantha@compuamerica.com" - }, - { - "id": 3714, - "guid": "d1edef62-d03a-4889-93b4-b830d364bf99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Campbell", - "company": "iMedconik", - "phone": "852-577-3257", - "email": "payton@imedconik.com" - }, - { - "id": 3715, - "guid": "01e9a785-2fa4-45fb-b506-81f34a176b5f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Day", - "company": "Teknoplexon", - "phone": "841-528-2814", - "email": "sophie@teknoplexon.com" - }, - { - "id": 3716, - "guid": "e367a4ee-9f19-40ed-bdb6-7482ab71816e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Thorndike", - "company": "Westtomik", - "phone": "839-411-2351", - "email": "gabriella@westtomik.com" - }, - { - "id": 3717, - "guid": "e33dc4d2-de0f-492c-9341-767f530ea731", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Winter", - "company": "Nanobanc", - "phone": "846-485-2671", - "email": "morgan@nanobanc.com" - }, - { - "id": 3718, - "guid": "e84f7a37-7a2d-41ad-8e5a-14c755b8c8d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Walkman", - "company": "Allphysiche", - "phone": "829-466-2762", - "email": "natalie@allphysiche.com" - }, - { - "id": 3719, - "guid": "3a8fb630-bdb5-4653-8b9d-ec8c3b514929", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Croftoon", - "company": "Truetomic", - "phone": "879-599-3893", - "email": "lillian@truetomic.com" - }, - { - "id": 3720, - "guid": "d96609dd-e130-4171-a46d-dad2cf846bed", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Freeman", - "company": "Cryptotegrity", - "phone": "887-557-2306", - "email": "brianna@cryptotegrity.com" - }, - { - "id": 3721, - "guid": "00fafc43-ce16-4be7-bba1-6b28bdd02634", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria Daniels", - "company": "Westtomik", - "phone": "871-597-3879", - "email": "maria@westtomik.com" - }, - { - "id": 3722, - "guid": "64b1bd45-b6c8-4ce1-a912-eb525116792f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Waller", - "company": "Conotomics", - "phone": "818-420-3659", - "email": "paige@conotomics.com" - }, - { - "id": 3723, - "guid": "cd29303f-b985-48c9-bc90-9fe60f6ab565", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Hardman", - "company": "iSkyvaco", - "phone": "829-533-2803", - "email": "maria@iskyvaco.com" - }, - { - "id": 3724, - "guid": "8b1804ce-f820-4b8f-a4b4-2447b9c26950", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Hoggarth", - "company": "Allnet", - "phone": "800-578-2777", - "email": "ariana@allnet.com" - }, - { - "id": 3725, - "guid": "37b23610-16c1-4146-8ad7-0927bff6ec31", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Conors", - "company": "Teraserv", - "phone": "865-570-3808", - "email": "kaitlyn@teraserv.com" - }, - { - "id": 3726, - "guid": "f15ae1b2-570b-40d3-9023-1e20a1725f56", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Hawkins", - "company": "Orthosoft", - "phone": "899-472-2612", - "email": "claire@orthosoft.com" - }, - { - "id": 3727, - "guid": "4098f4db-6d00-4647-872d-0880cdb5838c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Youmans", - "company": "Teknoplexon", - "phone": "898-585-2506", - "email": "lily@teknoplexon.com" - }, - { - "id": 3728, - "guid": "ed18a552-6949-4d7d-9dca-85ba4c8a0af2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Sheldon", - "company": "Venconix", - "phone": "855-508-3396", - "email": "valeria@venconix.com" - }, - { - "id": 3729, - "guid": "17c60af2-813e-44bb-94ca-923120713a33", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Avery Oldridge", - "company": "Xeicon", - "phone": "895-446-3202", - "email": "avery@xeicon.com" - }, - { - "id": 3730, - "guid": "313a9123-79f0-400a-b72f-8e6d3eebb5e7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Audrey Carey", - "company": "Polytheon", - "phone": "893-599-3518", - "email": "audrey@polytheon.com" - }, - { - "id": 3731, - "guid": "86310ece-4e4a-452e-b67c-c05ed5e58e0b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Watson", - "company": "Safeagra", - "phone": "861-591-2750", - "email": "ella@safeagra.com" - }, - { - "id": 3732, - "guid": "db7c1402-64db-4352-8419-7b3ebc5a2501", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Watson", - "company": "Allnet", - "phone": "825-445-3327", - "email": "ava@allnet.com" - }, - { - "id": 3733, - "guid": "61a53b67-9015-4eb7-afb6-1d543924d651", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Freeman", - "company": "Fibroserve", - "phone": "839-542-3319", - "email": "julia@fibroserve.com" - }, - { - "id": 3734, - "guid": "bf2ccf24-78ef-47d6-a98f-07d2ea454c7c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Walkman", - "company": "Nanobanc", - "phone": "847-471-3684", - "email": "alexa@nanobanc.com" - }, - { - "id": 3735, - "guid": "3dbd667a-5ae6-4c03-8537-4a1d8215bb55", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Oldridge", - "company": "Fibroserve", - "phone": "851-581-2451", - "email": "katherine@fibroserve.com" - }, - { - "id": 3736, - "guid": "d9f42674-f26e-4ab3-8f2b-ad3e958991c7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katherine Carter", - "company": "Westmedia", - "phone": "835-534-3968", - "email": "katherine@westmedia.com" - }, - { - "id": 3737, - "guid": "a0a9c075-65cc-49be-8e17-a5344a0cf06e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Timmons", - "company": "Polytheon", - "phone": "875-476-3579", - "email": "kaylee@polytheon.com" - }, - { - "id": 3738, - "guid": "b98dcf81-1868-47d7-9509-5df573cb94c0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Nash", - "company": "eEyetanic", - "phone": "838-574-3939", - "email": "arianna@eeyetanic.com" - }, - { - "id": 3739, - "guid": "d1b1ede5-0ad8-4cb7-bda9-bf31ec9a5f27", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Webster", - "company": "Polytheon", - "phone": "877-429-2728", - "email": "anna@polytheon.com" - }, - { - "id": 3740, - "guid": "c5a1db30-ffab-49f7-8c3f-8cb6acb638d8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Miln", - "company": "US Infratouch", - "phone": "860-532-2016", - "email": "payton@us infratouch.com" - }, - { - "id": 3741, - "guid": "2673e21a-1f0b-4567-b603-aa65ffc01550", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Croftoon", - "company": "Xeicon", - "phone": "830-417-3846", - "email": "sofia@xeicon.com" - }, - { - "id": 3742, - "guid": "ce1b50d8-4593-4359-b68b-31ea074dcb60", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Charlson", - "company": "Indisco", - "phone": "890-482-2811", - "email": "emma@indisco.com" - }, - { - "id": 3743, - "guid": "e14c62b0-8564-4f2c-85c7-9b2c7567f16f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Payton Waller", - "company": "Rapigrafix", - "phone": "846-557-3767", - "email": "payton@rapigrafix.com" - }, - { - "id": 3744, - "guid": "0e811e01-5cff-4679-940a-b771e1a75f84", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Oswald", - "company": "RoboAerlogix", - "phone": "861-477-3246", - "email": "maria@roboaerlogix.com" - }, - { - "id": 3745, - "guid": "a1b4f355-8ef1-40d4-ab50-64df67ea6197", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Nelson", - "company": "Indisco", - "phone": "855-587-2114", - "email": "valeria@indisco.com" - }, - { - "id": 3746, - "guid": "7a3f4080-4fe6-4770-84ea-fc3361b3fdf6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Cook", - "company": "Systheon", - "phone": "864-560-2888", - "email": "alexa@systheon.com" - }, - { - "id": 3747, - "guid": "b7704432-79e2-45ac-a441-0c50234ef83c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah White", - "company": "Syssoft", - "phone": "884-477-3137", - "email": "savannah@syssoft.com" - }, - { - "id": 3748, - "guid": "0ae51bb8-8f76-42ff-a38f-f2ed771eeab8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Morrison", - "company": "Navivacs", - "phone": "818-521-2004", - "email": "serenity@navivacs.com" - }, - { - "id": 3749, - "guid": "54471769-1a59-493a-bd5b-4aabb4204bc2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Oldridge", - "company": "Turbomart", - "phone": "846-442-3120", - "email": "addison@turbomart.com" - }, - { - "id": 3750, - "guid": "e1242bf9-cdbc-48db-aa5a-588ddff2b43f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Hailey", - "company": "Nanobanc", - "phone": "875-487-3168", - "email": "arianna@nanobanc.com" - }, - { - "id": 3751, - "guid": "e3e7b323-65b4-4861-a005-71efbe7527c2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Watson", - "company": "Safetrust", - "phone": "806-579-3469", - "email": "alexa@safetrust.com" - }, - { - "id": 3752, - "guid": "3f396665-d4cd-4853-b9ea-73fd12bdf698", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Milton", - "company": "Infragraph", - "phone": "824-532-2509", - "email": "isabella@infragraph.com" - }, - { - "id": 3753, - "guid": "7e472105-541d-4920-81e9-ddb34a8fdcfe", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Conors", - "company": "iOptystix", - "phone": "860-470-3314", - "email": "natalie@ioptystix.com" - }, - { - "id": 3754, - "guid": "b0ce97ef-0031-40e0-a514-3206cbc48bd1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Ogden", - "company": "Safeagra", - "phone": "855-474-3174", - "email": "maya@safeagra.com" - }, - { - "id": 3755, - "guid": "dd0cad2e-74c7-4610-895f-0233f21481d4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Peyton Wayne", - "company": "SysVenamerica", - "phone": "888-563-2026", - "email": "peyton@sysvenamerica.com" - }, - { - "id": 3756, - "guid": "02a6df77-21e1-4709-81c3-d658c5ff5bfe", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Campbell", - "company": "Westmedia", - "phone": "823-464-2381", - "email": "khloe@westmedia.com" - }, - { - "id": 3757, - "guid": "3710c67c-0c8a-408e-b1b8-6fa518931bdf", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Wayne", - "company": "Teraserv", - "phone": "897-480-3196", - "email": "jasmine@teraserv.com" - }, - { - "id": 3758, - "guid": "53a74624-1bd8-40d3-b8c6-14e38b060827", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Oliver", - "company": "Pericenta", - "phone": "822-524-2790", - "email": "gabriella@pericenta.com" - }, - { - "id": 3759, - "guid": "825351d1-ed45-4413-a551-f354f7396fbe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Young", - "company": "iQualcar", - "phone": "838-575-2339", - "email": "victoria@iqualcar.com" - }, - { - "id": 3760, - "guid": "2968f3f4-4ac1-46be-89fd-9fcca20fb6a2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Vanessa Gilbert", - "company": "Keytheon", - "phone": "809-566-3686", - "email": "vanessa@keytheon.com" - }, - { - "id": 3761, - "guid": "5472b14c-745b-4ef2-8c9a-666dbfe73a32", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sarah Miers", - "company": "SysUSA", - "phone": "826-533-2885", - "email": "sarah@sysusa.com" - }, - { - "id": 3762, - "guid": "e5fe861c-bd61-4654-b2cf-7da8ff37f354", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Hamphrey", - "company": "Qualserve", - "phone": "834-507-2488", - "email": "avery@qualserve.com" - }, - { - "id": 3763, - "guid": "d0f290a6-626e-4f33-8479-2c278a45a759", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Gilbert", - "company": "Textiqua", - "phone": "817-534-2002", - "email": "bailey@textiqua.com" - }, - { - "id": 3764, - "guid": "472f5231-32e7-44a1-9939-9787d0373313", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Adamson", - "company": "iMedconik", - "phone": "811-498-2836", - "email": "katelyn@imedconik.com" - }, - { - "id": 3765, - "guid": "43b6338f-5cd8-480a-951c-5951b7dcb19d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jessica Brown", - "company": "Safetrust", - "phone": "822-463-2543", - "email": "jessica@safetrust.com" - }, - { - "id": 3766, - "guid": "a112de66-7b83-48a5-91cb-7be106eeedf7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Wesley", - "company": "Fibrotouch", - "phone": "853-595-3330", - "email": "gabriella@fibrotouch.com" - }, - { - "id": 3767, - "guid": "fb8eece1-fd66-432e-b2be-ff014792e7b5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Warren", - "company": "Cryptotegrity", - "phone": "863-583-3481", - "email": "victoria@cryptotegrity.com" - }, - { - "id": 3768, - "guid": "8b882bf0-f0bd-4368-8116-8f5c4ef375f3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Miln", - "company": "Anaframe", - "phone": "844-422-3664", - "email": "peyton@anaframe.com" - }, - { - "id": 3769, - "guid": "072f5aee-948a-4e3c-b49f-65ab46738665", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Crossman", - "company": "Anaframe", - "phone": "860-502-3223", - "email": "jasmine@anaframe.com" - }, - { - "id": 3770, - "guid": "95090d7f-b55a-4b53-b44b-e1305b55cdd0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie White", - "company": "Indisco", - "phone": "848-511-2418", - "email": "sophie@indisco.com" - }, - { - "id": 3771, - "guid": "0ca12279-0b69-4c0d-a8f2-d3cd2bb6f346", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Wallace", - "company": "Steganoconiche", - "phone": "819-550-3238", - "email": "hannah@steganoconiche.com" - }, - { - "id": 3772, - "guid": "36a4b67d-05a4-48dc-9585-7c796e81a450", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sydney Croftoon", - "company": "Orthomedia", - "phone": "811-447-2969", - "email": "sydney@orthomedia.com" - }, - { - "id": 3773, - "guid": "c01c9cb5-e027-412c-ba66-f8e07d4d80b6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Miller", - "company": "Fibroserve", - "phone": "886-495-2076", - "email": "victoria@fibroserve.com" - }, - { - "id": 3774, - "guid": "d4ca49eb-b6cf-408b-8371-e44d2c7e4bde", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Davidson", - "company": "Celgra", - "phone": "820-594-3921", - "email": "rachel@celgra.com" - }, - { - "id": 3775, - "guid": "ff7358b2-67ae-4723-b0b1-1c0d2d64075d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Miller", - "company": "Navivacs", - "phone": "827-458-3145", - "email": "ella@navivacs.com" - }, - { - "id": 3776, - "guid": "7f73c981-20f5-4267-8168-e8471774b1cb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Gate", - "company": "Fibrotopia", - "phone": "805-422-3695", - "email": "abigail@fibrotopia.com" - }, - { - "id": 3777, - "guid": "86ee4ea7-ae2f-45ee-82b4-1e335113c22a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Bush", - "company": "Qualserve", - "phone": "861-503-3095", - "email": "vanessa@qualserve.com" - }, - { - "id": 3778, - "guid": "64636d0d-dc89-4cb8-85a2-f0f0e94d380f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Hailey", - "company": "Ameritron", - "phone": "881-427-2275", - "email": "zoey@ameritron.com" - }, - { - "id": 3779, - "guid": "3feef1c7-5a00-44a3-9ca9-378e2525b18a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Chandter", - "company": "Cryptotegrity", - "phone": "893-450-3850", - "email": "kimberly@cryptotegrity.com" - }, - { - "id": 3780, - "guid": "a437c2ef-a134-47c6-bc3f-4a903f39d97b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madelyn Morrison", - "company": "Inridium", - "phone": "855-469-3968", - "email": "madelyn@inridium.com" - }, - { - "id": 3781, - "guid": "1cf21c6c-38cd-4c7f-8d47-98702e965f18", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Ogden", - "company": "Anaframe", - "phone": "895-600-2022", - "email": "caroline@anaframe.com" - }, - { - "id": 3782, - "guid": "8157329d-fa9d-4914-a1a1-3b36b1020119", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Ford", - "company": "Rapigrafix", - "phone": "860-407-2530", - "email": "jessica@rapigrafix.com" - }, - { - "id": 3783, - "guid": "753bad0a-be50-4691-80ea-cd3c5f42c0f6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Higgins", - "company": "Fibroserve", - "phone": "858-533-3498", - "email": "makayla@fibroserve.com" - }, - { - "id": 3784, - "guid": "40e0f054-55c9-4ac8-b30c-e7f77cc2856f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Warren", - "company": "Rapigrafix", - "phone": "879-572-3562", - "email": "lauren@rapigrafix.com" - }, - { - "id": 3785, - "guid": "a7aa1ac7-47a6-45ee-a0ab-d2298e92ae82", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Vanessa Nathan", - "company": "Orthomedia", - "phone": "831-438-2582", - "email": "vanessa@orthomedia.com" - }, - { - "id": 3786, - "guid": "daded1e2-aa6c-4b3c-b945-cc0188ddea18", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Young", - "company": "Celgra", - "phone": "800-530-3992", - "email": "addison@celgra.com" - }, - { - "id": 3787, - "guid": "1faeb56e-917e-4418-a31a-006d48160e2e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Oldman", - "company": "Fibroserve", - "phone": "805-581-2142", - "email": "khloe@fibroserve.com" - }, - { - "id": 3788, - "guid": "61957d84-212f-416c-ad90-568f1209eac6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Osborne", - "company": "Anagraph", - "phone": "888-498-2787", - "email": "aubrey@anagraph.com" - }, - { - "id": 3789, - "guid": "72de506e-9255-4348-bf94-00a290144b0d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Gilson", - "company": "Westmedia", - "phone": "810-424-3840", - "email": "nevaeh@westmedia.com" - }, - { - "id": 3790, - "guid": "a442556f-db24-4a5b-b239-7ef4d4d2cbed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Ward", - "company": "Keytheon", - "phone": "866-564-2855", - "email": "melanie@keytheon.com" - }, - { - "id": 3791, - "guid": "83a39c3f-c794-40e6-b173-67528c212abf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Higgins", - "company": "InfoAirway", - "phone": "813-558-3938", - "email": "lauren@infoairway.com" - }, - { - "id": 3792, - "guid": "99a09cd3-1829-4e47-bdf9-68d63e0fca9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Cook", - "company": "Airdyne", - "phone": "867-551-2058", - "email": "kaylee@airdyne.com" - }, - { - "id": 3793, - "guid": "7bacd582-cd35-443f-8a9e-997be334f79f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Miller", - "company": "Turbomart", - "phone": "866-449-3529", - "email": "victoria@turbomart.com" - }, - { - "id": 3794, - "guid": "0d1fe2c8-5096-4a4c-a380-cf6caba1a704", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Carroll", - "company": "Steganoconiche", - "phone": "803-516-3758", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 3795, - "guid": "bea3f281-5fc9-4438-a291-1074fc3326ec", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Miln", - "company": "Superscope", - "phone": "831-407-3718", - "email": "hailey@superscope.com" - }, - { - "id": 3796, - "guid": "4ddd0f93-4f7e-4b7b-8b37-40ae0d03012d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Haig", - "company": "SysVenamerica", - "phone": "803-543-2723", - "email": "payton@sysvenamerica.com" - }, - { - "id": 3797, - "guid": "0a4e8012-50ee-43ee-82ef-b3fcb6a35b92", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Charlson", - "company": "Compuamerica", - "phone": "890-514-3116", - "email": "chloe@compuamerica.com" - }, - { - "id": 3798, - "guid": "466d2eb5-444e-40f6-b1bf-9485160626c1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabriella Turner", - "company": "Steganoconiche", - "phone": "896-599-2332", - "email": "gabriella@steganoconiche.com" - }, - { - "id": 3799, - "guid": "2141b84d-cbbd-47a2-8472-68e879748cce", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Gardner", - "company": "Anagraph", - "phone": "841-467-2184", - "email": "isabelle@anagraph.com" - }, - { - "id": 3800, - "guid": "3bb41086-d71c-4658-918b-7502183eeebb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Ward", - "company": "iQualcar", - "phone": "836-406-3054", - "email": "julia@iqualcar.com" - }, - { - "id": 3801, - "guid": "94f8b483-3dc8-4b19-8358-8e8022056aee", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Milton", - "company": "Compuamerica", - "phone": "871-470-3736", - "email": "gabriella@compuamerica.com" - }, - { - "id": 3802, - "guid": "5d543333-d36c-4b2d-88cc-1b9291777ee1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gilmore", - "company": "Indisco", - "phone": "828-544-2235", - "email": "lauren@indisco.com" - }, - { - "id": 3803, - "guid": "70dda83f-3498-4280-a759-0aa2c772645a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Oswald", - "company": "Raylog", - "phone": "834-429-2737", - "email": "faith@raylog.com" - }, - { - "id": 3804, - "guid": "99de92d7-edf3-46cc-a4cf-0211c12b9821", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Carrington", - "company": "Netseco", - "phone": "842-596-2042", - "email": "audrey@netseco.com" - }, - { - "id": 3805, - "guid": "608c19ee-22b5-4d08-b89f-d00928e634c9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Sherlock", - "company": "Systheon", - "phone": "835-500-2909", - "email": "payton@systheon.com" - }, - { - "id": 3806, - "guid": "91e20ce2-9c44-4470-a3f5-bd6eaaa0bf90", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Caroline Bush", - "company": "Indisco", - "phone": "869-545-2215", - "email": "caroline@indisco.com" - }, - { - "id": 3807, - "guid": "c807f99d-b787-44f3-bc3c-659dacdcd86a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Bush", - "company": "iEnland", - "phone": "850-426-2812", - "email": "madeline@ienland.com" - }, - { - "id": 3808, - "guid": "2ca51713-e48b-479d-ac4c-a4fcfb4076f5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Wainwright", - "company": "Polytheon", - "phone": "802-550-3156", - "email": "khloe@polytheon.com" - }, - { - "id": 3809, - "guid": "3c85e6c3-61d1-422a-9270-d6b85bae2da1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Brown", - "company": "Conotomics", - "phone": "812-568-3476", - "email": "isabella@conotomics.com" - }, - { - "id": 3810, - "guid": "e9539489-c41d-40db-a749-50245960f836", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Hamphrey", - "company": "iSkyvaco", - "phone": "879-527-2179", - "email": "caroline@iskyvaco.com" - }, - { - "id": 3811, - "guid": "32687375-c7d3-4318-9dfe-2f9353d24faf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Bush", - "company": "Cryptotemplate", - "phone": "864-478-3231", - "email": "avery@cryptotemplate.com" - }, - { - "id": 3812, - "guid": "61fc8f27-9655-4549-99b3-b9c1f2f16adf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Warren", - "company": "Ventanium", - "phone": "851-468-2160", - "email": "brooklyn@ventanium.com" - }, - { - "id": 3813, - "guid": "4c4e39f5-6a29-4281-8f36-020e3f547e38", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Claire Hoggarth", - "company": "Tekcar", - "phone": "809-566-2808", - "email": "claire@tekcar.com" - }, - { - "id": 3814, - "guid": "a6649d37-a2d0-41ee-a37f-390d9b26eae6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Daniels", - "company": "Raylog", - "phone": "894-550-3823", - "email": "serenity@raylog.com" - }, - { - "id": 3815, - "guid": "763924f6-3f33-47ce-a0b9-8f5c69dc9a70", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Fisher", - "company": "Fibrotouch", - "phone": "884-456-3035", - "email": "amelia@fibrotouch.com" - }, - { - "id": 3816, - "guid": "faefe496-b55a-4d6c-a0c0-5e077e9cccb3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexis Gerald", - "company": "Pericenta", - "phone": "849-407-2156", - "email": "alexis@pericenta.com" - }, - { - "id": 3817, - "guid": "2e4290d8-e4a5-4f2b-9bcb-62ad71ec039a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Michaelson", - "company": "Superscope", - "phone": "878-560-2455", - "email": "nevaeh@superscope.com" - }, - { - "id": 3818, - "guid": "c12c4938-ad7e-4e1c-8a55-baa4fc8e5aa7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madison Brown", - "company": "Titanirola", - "phone": "852-535-3930", - "email": "madison@titanirola.com" - }, - { - "id": 3819, - "guid": "e9d7bd3d-da7a-43d0-960b-6d62036d9652", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Watson", - "company": "Syssoft", - "phone": "881-440-2019", - "email": "abigail@syssoft.com" - }, - { - "id": 3820, - "guid": "e0ef0d50-0a0c-4a8d-9ea9-7f7ab0bc021f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophie Owen", - "company": "Teratopia", - "phone": "828-477-3262", - "email": "sophie@teratopia.com" - }, - { - "id": 3821, - "guid": "b6af1822-2580-42d9-8280-5da621ff9019", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Fisher", - "company": "iEnland", - "phone": "866-595-2568", - "email": "abigail@ienland.com" - }, - { - "id": 3822, - "guid": "284958a2-8dee-4c07-996f-c48df691123d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooke Gilmore", - "company": "Textiqua", - "phone": "875-433-3703", - "email": "brooke@textiqua.com" - }, - { - "id": 3823, - "guid": "65ad95fa-89de-468d-8181-9007c3be0fa0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Bush", - "company": "Anagraph", - "phone": "885-409-2622", - "email": "melanie@anagraph.com" - }, - { - "id": 3824, - "guid": "84e6ea9a-61ef-4efa-8963-0fb7f4dc0ba7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katelyn Miln", - "company": "Cryptotemplate", - "phone": "890-471-3624", - "email": "katelyn@cryptotemplate.com" - }, - { - "id": 3825, - "guid": "0a188c1c-1bbf-414a-838d-49a9a2d6aa26", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Thornton", - "company": "Fibrotouch", - "phone": "821-539-3434", - "email": "brianna@fibrotouch.com" - }, - { - "id": 3826, - "guid": "41bd5469-184a-4b0f-9905-2edc7424ca3e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Gilmore", - "company": "SysVenamerica", - "phone": "803-435-2952", - "email": "kaylee@sysvenamerica.com" - }, - { - "id": 3827, - "guid": "c43a5ec6-c15b-4264-8747-1b8a741b0e2b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Carroll", - "company": "iQualcar", - "phone": "812-529-2554", - "email": "kaitlyn@iqualcar.com" - }, - { - "id": 3828, - "guid": "be771dcc-ae0f-4353-871d-59ea8d6ca0d5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Oliver", - "company": "Syssoft", - "phone": "840-499-3868", - "email": "vanessa@syssoft.com" - }, - { - "id": 3829, - "guid": "65010640-afd2-4a26-866e-8b23fee6c252", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Wallace", - "company": "Entcast", - "phone": "808-556-3964", - "email": "paige@entcast.com" - }, - { - "id": 3830, - "guid": "d4297e35-4700-4bac-ae6a-95d4fd3d21ad", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Ward", - "company": "Videobanc", - "phone": "857-538-2884", - "email": "khloe@videobanc.com" - }, - { - "id": 3831, - "guid": "b44fe34f-b88a-48c6-9cc7-85469a14d691", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton White", - "company": "Dynarama", - "phone": "838-524-3293", - "email": "payton@dynarama.com" - }, - { - "id": 3832, - "guid": "04934c4c-f96b-4a3d-b674-3c51913683a6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alyssa Nash", - "company": "Syssoft", - "phone": "836-581-3878", - "email": "alyssa@syssoft.com" - }, - { - "id": 3833, - "guid": "f9a18de5-149c-4656-8d1a-17c231694d84", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Miln", - "company": "Nanobanc", - "phone": "804-402-2693", - "email": "bella@nanobanc.com" - }, - { - "id": 3834, - "guid": "72bbbf97-1bcb-4bdf-b490-c362d4ef1570", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Brooks", - "company": "Robocomm", - "phone": "878-583-2430", - "email": "riley@robocomm.com" - }, - { - "id": 3835, - "guid": "fa073ad1-3e66-429e-a0ba-29b914ae2bc1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Timmons", - "company": "Xeicon", - "phone": "859-573-3491", - "email": "alexa@xeicon.com" - }, - { - "id": 3836, - "guid": "0a579856-ef32-4037-aeb5-21648ed2d82c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Ogden", - "company": "Openserve", - "phone": "828-503-3736", - "email": "evelyn@openserve.com" - }, - { - "id": 3837, - "guid": "3d6ec89c-c2bb-4ec1-b962-91579809f006", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Hoggarth", - "company": "Xeicon", - "phone": "888-568-3361", - "email": "abigail@xeicon.com" - }, - { - "id": 3838, - "guid": "67867f1f-5641-4230-b683-16b60f2d7d8a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Hawkins", - "company": "Teknoplexon", - "phone": "863-573-3379", - "email": "serenity@teknoplexon.com" - }, - { - "id": 3839, - "guid": "13af754c-4e21-4715-ac75-811204854f66", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexa Young", - "company": "Westmedia", - "phone": "837-432-2154", - "email": "alexa@westmedia.com" - }, - { - "id": 3840, - "guid": "1499a67a-9bbd-4488-a196-8d4163362e3e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Carey", - "company": "Inridium", - "phone": "845-418-2030", - "email": "destiny@inridium.com" - }, - { - "id": 3841, - "guid": "0b22d761-a611-48f3-9d51-ef0b031fb5b9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bailey Young", - "company": "Nanobanc", - "phone": "891-451-2007", - "email": "bailey@nanobanc.com" - }, - { - "id": 3842, - "guid": "4550fabe-0225-4694-8939-1bc8560954f5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Chandter", - "company": "Allphysiche", - "phone": "836-580-2364", - "email": "ella@allphysiche.com" - }, - { - "id": 3843, - "guid": "9b8c1b5b-821d-4fdc-8a48-ec5e69693e16", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Carroll", - "company": "RoboAerlogix", - "phone": "815-476-2875", - "email": "khloe@roboaerlogix.com" - }, - { - "id": 3844, - "guid": "d4270c01-bbb1-4bfc-9319-9f3bfeb4e07a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Watson", - "company": "Titanirola", - "phone": "892-467-3825", - "email": "chloe@titanirola.com" - }, - { - "id": 3845, - "guid": "ea49feca-e304-4192-9a58-dc2a4857bcc3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Daniels", - "company": "Hypervaco", - "phone": "857-576-3995", - "email": "sofia@hypervaco.com" - }, - { - "id": 3846, - "guid": "c23e74b7-a0bc-424f-87ca-119261552ba6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Neal", - "company": "eEyetanic", - "phone": "879-437-3835", - "email": "madeline@eeyetanic.com" - }, - { - "id": 3847, - "guid": "ac4f6b75-a505-4beb-884e-ac75402d7f8c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Carey", - "company": "eSteganoergy", - "phone": "854-427-3225", - "email": "katherine@esteganoergy.com" - }, - { - "id": 3848, - "guid": "8ab08872-ab24-4005-bbcc-01b484624b71", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Chesterton", - "company": "Safetrust", - "phone": "853-451-3892", - "email": "kayla@safetrust.com" - }, - { - "id": 3849, - "guid": "3a58bf62-c0a5-484a-bac8-abcee92df04e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Samantha Nathan", - "company": "Qualserve", - "phone": "838-497-2003", - "email": "samantha@qualserve.com" - }, - { - "id": 3850, - "guid": "e25bf78f-4fcb-4508-991b-d4ae7df1ad73", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Smith", - "company": "Westtomik", - "phone": "807-579-2066", - "email": "autumn@westtomik.com" - }, - { - "id": 3851, - "guid": "68c6624a-ff8c-4bf3-aadc-b39f0fe6b99f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Owen", - "company": "Dynarama", - "phone": "839-432-2583", - "email": "katelyn@dynarama.com" - }, - { - "id": 3852, - "guid": "5a0b2811-840b-4658-b8cb-178716fb7e07", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Gate", - "company": "Superscope", - "phone": "866-482-2722", - "email": "maria@superscope.com" - }, - { - "id": 3853, - "guid": "ec92c35d-602c-41de-8a73-f91a65006a49", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Fulton", - "company": "Truegate", - "phone": "844-561-3583", - "email": "andrea@truegate.com" - }, - { - "id": 3854, - "guid": "64eff63e-0376-43a7-be10-463e58488335", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Abramson", - "company": "Steganoconiche", - "phone": "855-490-2476", - "email": "ariana@steganoconiche.com" - }, - { - "id": 3855, - "guid": "553a4c65-3a8d-42b8-a1af-6ae3fbee5635", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Morrison", - "company": "InfoAirway", - "phone": "824-427-2346", - "email": "amelia@infoairway.com" - }, - { - "id": 3856, - "guid": "2fce32d8-3f50-4642-96f9-640cc1e37e0c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Carter", - "company": "Conrama", - "phone": "896-534-3662", - "email": "natalie@conrama.com" - }, - { - "id": 3857, - "guid": "f5bb83f7-cf72-4195-a25f-2004b775ab89", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katelyn Brickman", - "company": "Allnet", - "phone": "843-506-3583", - "email": "katelyn@allnet.com" - }, - { - "id": 3858, - "guid": "3118c93b-ad1e-4d25-b674-284a39b63b24", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Young", - "company": "Compuamerica", - "phone": "809-420-3597", - "email": "bella@compuamerica.com" - }, - { - "id": 3859, - "guid": "56e7201e-0a0d-4195-b316-39dee3c06829", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Carter", - "company": "RoboAerlogix", - "phone": "876-426-3819", - "email": "jasmine@roboaerlogix.com" - }, - { - "id": 3860, - "guid": "c4e54d51-7150-4247-bfb3-d11c9d18470d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Miln", - "company": "Cryptotemplate", - "phone": "838-401-3633", - "email": "mia@cryptotemplate.com" - }, - { - "id": 3861, - "guid": "b0800b48-fbe4-4c5c-95d6-41c9e73e7b27", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Freeman", - "company": "Multitiqua", - "phone": "830-542-2410", - "email": "madelyn@multitiqua.com" - }, - { - "id": 3862, - "guid": "66d5fd4b-7aeb-4f05-be42-1feee3dab33b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Campbell", - "company": "Robotomic", - "phone": "825-427-2335", - "email": "amelia@robotomic.com" - }, - { - "id": 3863, - "guid": "af9e7025-30d6-41f5-98ab-89f117110e87", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Hoggarth", - "company": "Pacwest", - "phone": "818-497-2988", - "email": "amelia@pacwest.com" - }, - { - "id": 3864, - "guid": "ad731f67-cd51-485f-bdfa-6c10a9f3313d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Morrison", - "company": "Ameritron", - "phone": "829-573-3414", - "email": "jasmine@ameritron.com" - }, - { - "id": 3865, - "guid": "fee04ef7-a92a-408d-800b-7ceec71dd9de", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Smith", - "company": "Multitiqua", - "phone": "889-431-3759", - "email": "savannah@multitiqua.com" - }, - { - "id": 3866, - "guid": "1d5b05f0-801f-4a27-a34f-42d4d3ec45d2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Ward", - "company": "Mescatron", - "phone": "858-473-2054", - "email": "samantha@mescatron.com" - }, - { - "id": 3867, - "guid": "0c6bec5a-4aca-455b-9f0f-a82977af4144", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Daniels", - "company": "Cryptotemplate", - "phone": "849-482-2943", - "email": "alexis@cryptotemplate.com" - }, - { - "id": 3868, - "guid": "b0263c33-c90d-488c-8f23-cfb71733e5ba", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Nathan", - "company": "Westmedia", - "phone": "814-467-2198", - "email": "sydney@westmedia.com" - }, - { - "id": 3869, - "guid": "bf37e22c-a133-42f3-b8bd-811f0aae758f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Webster", - "company": "RoboAerlogix", - "phone": "817-418-2600", - "email": "layla@roboaerlogix.com" - }, - { - "id": 3870, - "guid": "e9d0b6d7-57c3-4efe-87f4-014057cd0883", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Oldman", - "company": "Turbomart", - "phone": "815-596-3164", - "email": "rachel@turbomart.com" - }, - { - "id": 3871, - "guid": "192d4658-71d7-4e1a-8a75-62f3690fac22", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine Watson", - "company": "Interliant", - "phone": "888-520-2102", - "email": "jasmine@interliant.com" - }, - { - "id": 3872, - "guid": "73c0fa42-6519-45d4-b5b0-56a6f70e8c2c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katherine Hodges", - "company": "iOptystix", - "phone": "870-479-2365", - "email": "katherine@ioptystix.com" - }, - { - "id": 3873, - "guid": "3510616e-64b9-495d-8be6-f5b8e1a2d3b3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Charlotte Murphy", - "company": "Videobanc", - "phone": "848-536-3805", - "email": "charlotte@videobanc.com" - }, - { - "id": 3874, - "guid": "fb6e8891-84f2-4d97-a5c6-e81c35a3c6f6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Neal", - "company": "RoboAerlogix", - "phone": "849-412-2605", - "email": "jessica@roboaerlogix.com" - }, - { - "id": 3875, - "guid": "14a8d186-f0b9-40d3-b735-6a3498ceafcd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Brooks", - "company": "Compuamerica", - "phone": "849-466-2583", - "email": "alexis@compuamerica.com" - }, - { - "id": 3876, - "guid": "ba511762-4736-4c06-a2ac-6024b0d7a0e1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Turner", - "company": "Generola", - "phone": "865-570-3383", - "email": "angelina@generola.com" - }, - { - "id": 3877, - "guid": "246e5daa-b354-46ed-a17e-a641d4aa788c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Wood", - "company": "Techtron", - "phone": "880-519-3096", - "email": "sophie@techtron.com" - }, - { - "id": 3878, - "guid": "25d1ca47-b745-44e3-91a8-fa259da00cdd", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Melanie Molligan", - "company": "Dynarama", - "phone": "899-523-2364", - "email": "melanie@dynarama.com" - }, - { - "id": 3879, - "guid": "f42e0519-91a3-420f-b9d3-727f43dd30e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Fisher", - "company": "Infraique", - "phone": "879-574-2674", - "email": "riley@infraique.com" - }, - { - "id": 3880, - "guid": "115e7df4-216b-4c41-ae05-506849794572", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Young", - "company": "US Infratouch", - "phone": "899-467-3428", - "email": "mackenzie@us infratouch.com" - }, - { - "id": 3881, - "guid": "ddfe100d-0584-4a19-ba8a-ec2bf21957ce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Charlson", - "company": "Syssoft", - "phone": "819-528-3365", - "email": "jocelyn@syssoft.com" - }, - { - "id": 3882, - "guid": "8ce71427-037a-444c-a794-16d172b8b4d5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Miller", - "company": "SysVenamerica", - "phone": "884-553-2978", - "email": "genesis@sysvenamerica.com" - }, - { - "id": 3883, - "guid": "bef5f852-a7b7-44a6-bf4b-c1547e491cf3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Bush", - "company": "Quintegrity", - "phone": "815-426-3154", - "email": "sydney@quintegrity.com" - }, - { - "id": 3884, - "guid": "41ba6d11-8ada-45a5-aa3a-cc5f3840dd45", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Nathan", - "company": "Unologic", - "phone": "893-579-3737", - "email": "maya@unologic.com" - }, - { - "id": 3885, - "guid": "caf77d4b-26d6-481f-8cb9-00e580664600", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gate", - "company": "Aprama", - "phone": "864-497-3946", - "email": "lauren@aprama.com" - }, - { - "id": 3886, - "guid": "f46ec735-f0c5-43d9-aa48-36b41dcd091e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Turner", - "company": "Dynarama", - "phone": "877-515-2456", - "email": "sophia@dynarama.com" - }, - { - "id": 3887, - "guid": "4f607eab-a182-4dad-b37e-cda2c7d0db31", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Fulton", - "company": "Truegate", - "phone": "867-500-2998", - "email": "isabelle@truegate.com" - }, - { - "id": 3888, - "guid": "9b86e8ad-cf04-4780-b1f5-db471c6f1564", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Wainwright", - "company": "Qualserve", - "phone": "853-551-2209", - "email": "amelia@qualserve.com" - }, - { - "id": 3889, - "guid": "637039e7-f30d-4533-a816-2b60223a0f5d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Cramer", - "company": "Polytheon", - "phone": "823-538-2218", - "email": "julia@polytheon.com" - }, - { - "id": 3890, - "guid": "1b84d74b-7e0b-471b-be87-d21fb44849fd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Creighton", - "company": "Syssoft", - "phone": "868-584-3324", - "email": "evelyn@syssoft.com" - }, - { - "id": 3891, - "guid": "44261aea-1dac-42cb-8626-ad6d9d80665f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Oswald", - "company": "eEyetanic", - "phone": "867-406-3751", - "email": "zoe@eeyetanic.com" - }, - { - "id": 3892, - "guid": "94747b69-f3cd-4796-b713-908e0151e9ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Goldman", - "company": "Infragraph", - "phone": "867-457-2267", - "email": "lily@infragraph.com" - }, - { - "id": 3893, - "guid": "beabd95e-85ad-462b-8efd-eb3a92c24bd4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Gustman", - "company": "iEnland", - "phone": "897-563-3127", - "email": "mariah@ienland.com" - }, - { - "id": 3894, - "guid": "68ce4a6e-0d5d-45ed-9963-2667576b6992", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Gardner", - "company": "Multitiqua", - "phone": "808-596-2597", - "email": "hannah@multitiqua.com" - }, - { - "id": 3895, - "guid": "193c422b-573e-4d29-88d7-a8b7f98232ce", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mia Turner", - "company": "Anaframe", - "phone": "838-597-2879", - "email": "mia@anaframe.com" - }, - { - "id": 3896, - "guid": "e69216a7-8270-4b88-97e7-7d5c2da40960", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooklyn Haig", - "company": "Westtomik", - "phone": "802-505-2641", - "email": "brooklyn@westtomik.com" - }, - { - "id": 3897, - "guid": "944d9199-92ad-453c-b29b-b36c5c1f7aa0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Hodges", - "company": "Keytheon", - "phone": "848-455-2000", - "email": "kaitlyn@keytheon.com" - }, - { - "id": 3898, - "guid": "7e929ddf-06c2-4e7f-8fb4-0c6b7414cfd4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Wallace", - "company": "Celgra", - "phone": "856-528-3150", - "email": "layla@celgra.com" - }, - { - "id": 3899, - "guid": "5bf5862d-d8c4-4c0c-9354-2e73209ef426", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Daniels", - "company": "Vencom", - "phone": "831-469-2306", - "email": "maya@vencom.com" - }, - { - "id": 3900, - "guid": "f5058405-5769-44fc-ab81-933a8174c98d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Adamson", - "company": "Titanirola", - "phone": "854-511-3720", - "email": "victoria@titanirola.com" - }, - { - "id": 3901, - "guid": "c227f969-91eb-4f78-9063-82bb45eb0eac", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Crossman", - "company": "Interliant", - "phone": "829-472-2209", - "email": "nevaeh@interliant.com" - }, - { - "id": 3902, - "guid": "87dbd4d1-2334-44a7-b13a-884c81a6fa15", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Clapton", - "company": "Raylog", - "phone": "822-500-2053", - "email": "makayla@raylog.com" - }, - { - "id": 3903, - "guid": "643ee306-4b21-49fd-b5c5-eb10092c71ab", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Abramson", - "company": "Venconix", - "phone": "883-507-3269", - "email": "aubrey@venconix.com" - }, - { - "id": 3904, - "guid": "b9470fb3-76f7-4dbc-8052-28c97816bc8c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Gardner", - "company": "SysUSA", - "phone": "833-587-3664", - "email": "emily@sysusa.com" - }, - { - "id": 3905, - "guid": "8584f29c-19d9-402c-80eb-4ce647383764", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Timmons", - "company": "Interliant", - "phone": "859-556-3529", - "email": "emma@interliant.com" - }, - { - "id": 3906, - "guid": "cc0341e7-eb20-4df8-9667-e96c034964b3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Goldman", - "company": "iSkyvaco", - "phone": "808-576-3955", - "email": "alexandra@iskyvaco.com" - }, - { - "id": 3907, - "guid": "1c876c76-3ae0-43ca-afb0-99af7c80ffd1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Wainwright", - "company": "Hypervaco", - "phone": "867-591-3808", - "email": "madelyn@hypervaco.com" - }, - { - "id": 3908, - "guid": "2f352e3f-0514-4d16-a681-f05758024c94", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Croftoon", - "company": "eEyetanic", - "phone": "865-516-2629", - "email": "jocelyn@eeyetanic.com" - }, - { - "id": 3909, - "guid": "d0914d96-5cbf-488e-a991-d251176fca4e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Brown", - "company": "iMedconik", - "phone": "809-526-3928", - "email": "lillian@imedconik.com" - }, - { - "id": 3910, - "guid": "efdd45cb-9ca9-4ef7-b147-ced952e997a5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Brooks", - "company": "SysUSA", - "phone": "830-550-2601", - "email": "avery@sysusa.com" - }, - { - "id": 3911, - "guid": "63a3057b-87ec-465f-a71b-0380842cb790", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Chesterton", - "company": "Truetomic", - "phone": "830-545-3762", - "email": "addison@truetomic.com" - }, - { - "id": 3912, - "guid": "43c4265c-f5c5-4130-925d-020c0bf3678f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Day", - "company": "Aprama", - "phone": "896-584-3550", - "email": "mya@aprama.com" - }, - { - "id": 3913, - "guid": "0022b50e-6d1c-4e62-9944-2f20c637bb2b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Thornton", - "company": "Indisco", - "phone": "808-595-2530", - "email": "savannah@indisco.com" - }, - { - "id": 3914, - "guid": "5501bfba-43b6-443e-9f94-f561c226d226", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Nelson", - "company": "Rapigrafix", - "phone": "821-518-3139", - "email": "brianna@rapigrafix.com" - }, - { - "id": 3915, - "guid": "b4aee124-6d84-488e-856c-1160332e8bf7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Miln", - "company": "Navivacs", - "phone": "850-470-3134", - "email": "katelyn@navivacs.com" - }, - { - "id": 3916, - "guid": "4440b744-1b91-42c4-8976-802cb6effb78", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Miln", - "company": "Allnet", - "phone": "869-415-3100", - "email": "allison@allnet.com" - }, - { - "id": 3917, - "guid": "b01a6e3f-50f7-4b9d-85d4-2161c00e36fa", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Ward", - "company": "Keytheon", - "phone": "871-412-2151", - "email": "peyton@keytheon.com" - }, - { - "id": 3918, - "guid": "30721874-c8fd-4b76-95c5-600e58e5ca3a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Fulton", - "company": "Orthomedia", - "phone": "824-488-3461", - "email": "jessica@orthomedia.com" - }, - { - "id": 3919, - "guid": "625bb3ca-12ca-475e-be57-999c7479c92a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Gerald", - "company": "Multitiqua", - "phone": "875-559-3175", - "email": "katherine@multitiqua.com" - }, - { - "id": 3920, - "guid": "f7ac4dfe-04a5-45ce-9c6a-b658cefae522", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Chapman", - "company": "Orthosoft", - "phone": "807-456-3574", - "email": "vanessa@orthosoft.com" - }, - { - "id": 3921, - "guid": "3fc85a2e-c31d-4fbe-aa4a-a283fa833c9e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Watson", - "company": "Textiqua", - "phone": "840-519-3463", - "email": "riley@textiqua.com" - }, - { - "id": 3922, - "guid": "dfede54c-ba15-471b-bdba-b8175cf3ca1f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ella Goldman", - "company": "Syssoft", - "phone": "815-487-3476", - "email": "ella@syssoft.com" - }, - { - "id": 3923, - "guid": "2478ec67-7e1f-4d6f-9f0b-18510da6da50", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Wood", - "company": "iEnland", - "phone": "842-583-3825", - "email": "lily@ienland.com" - }, - { - "id": 3924, - "guid": "c50a74fc-514f-4a5c-ad5e-42bb1c4b5ee9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Vaughan", - "company": "iEnland", - "phone": "828-432-2736", - "email": "valeria@ienland.com" - }, - { - "id": 3925, - "guid": "17120742-83dc-4538-962a-6b4f9a0087a5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Thornton", - "company": "Keytheon", - "phone": "816-547-2683", - "email": "morgan@keytheon.com" - }, - { - "id": 3926, - "guid": "67dd52a8-c877-4897-abdb-946567d3605e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Osborne", - "company": "Qualserve", - "phone": "891-520-2905", - "email": "anna@qualserve.com" - }, - { - "id": 3927, - "guid": "031ba75b-f53a-413d-88af-e6a2548eede5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Mercer", - "company": "Infraique", - "phone": "877-545-2975", - "email": "vanessa@infraique.com" - }, - { - "id": 3928, - "guid": "3783b23f-bbff-4605-9d62-bfdbfdd37162", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Smith", - "company": "Interliant", - "phone": "821-472-3093", - "email": "jocelyn@interliant.com" - }, - { - "id": 3929, - "guid": "e7075619-0c71-4cab-b5da-9d59fe59245b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Gerald", - "company": "Mescaridic", - "phone": "839-446-2695", - "email": "sydney@mescaridic.com" - }, - { - "id": 3930, - "guid": "280f91a7-af2d-4b30-b61c-e7a29897265e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Otis", - "company": "OpKeycomm", - "phone": "867-426-3865", - "email": "kaylee@opkeycomm.com" - }, - { - "id": 3931, - "guid": "3329c077-d06c-4d58-8da8-803fc7b32142", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Oldridge", - "company": "Titanirola", - "phone": "852-512-2786", - "email": "maria@titanirola.com" - }, - { - "id": 3932, - "guid": "4091b649-4019-4d42-94ff-90d63ba46614", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Nevaeh Gardner", - "company": "Syssoft", - "phone": "804-574-2638", - "email": "nevaeh@syssoft.com" - }, - { - "id": 3933, - "guid": "c63bfbea-7fc1-4918-972a-dd4025d7744a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Paige Carrington", - "company": "Cryptotemplate", - "phone": "818-441-3340", - "email": "paige@cryptotemplate.com" - }, - { - "id": 3934, - "guid": "35715aa8-0a1b-4e2b-95a4-71cb8fbd489e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Hodges", - "company": "Raylog", - "phone": "855-447-3516", - "email": "allison@raylog.com" - }, - { - "id": 3935, - "guid": "5a6c9bbc-ffe7-4b2f-9a2b-db8edef9de5a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Cramer", - "company": "iEnland", - "phone": "820-567-2035", - "email": "isabelle@ienland.com" - }, - { - "id": 3936, - "guid": "03e4c9ea-bd0a-4359-ad82-b2a14c38fa9d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Brickman", - "company": "Genland", - "phone": "800-510-3735", - "email": "audrey@genland.com" - }, - { - "id": 3937, - "guid": "9af8fd33-2403-48e8-bb94-993240a350ce", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Croftoon", - "company": "Systheon", - "phone": "854-556-2474", - "email": "victoria@systheon.com" - }, - { - "id": 3938, - "guid": "a792b158-59e0-49e5-9596-ca33a2c173dd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Chandter", - "company": "Aluco", - "phone": "843-494-2216", - "email": "jasmine@aluco.com" - }, - { - "id": 3939, - "guid": "9a1705dc-4fe4-43c7-9ba1-ea0e7e48485d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Walkman", - "company": "Inridium", - "phone": "845-590-3155", - "email": "avery@inridium.com" - }, - { - "id": 3940, - "guid": "ff19e2a2-4693-4954-9767-2fdd071d795c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie Crossman", - "company": "Sontopia", - "phone": "817-578-3787", - "email": "natalie@sontopia.com" - }, - { - "id": 3941, - "guid": "ca5ce5b7-d602-4158-bf1e-b5ed17937a86", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Fulton", - "company": "Conrama", - "phone": "895-438-3333", - "email": "samantha@conrama.com" - }, - { - "id": 3942, - "guid": "52138d60-4947-4f2e-86a1-47f31588dba6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Carter", - "company": "Pacwest", - "phone": "847-554-2038", - "email": "gabriella@pacwest.com" - }, - { - "id": 3943, - "guid": "ba2a60ce-85be-468d-922b-4cb697cc5682", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Ford", - "company": "Pacwest", - "phone": "810-599-2604", - "email": "mackenzie@pacwest.com" - }, - { - "id": 3944, - "guid": "61a7b195-2b24-4225-b83d-0a2c3377cfe4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Higgins", - "company": "Orthosoft", - "phone": "888-468-3694", - "email": "hailey@orthosoft.com" - }, - { - "id": 3945, - "guid": "151fbed7-d8bc-492b-bc0e-45dafea5e3a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Ward", - "company": "InfoAirway", - "phone": "893-403-2804", - "email": "zoey@infoairway.com" - }, - { - "id": 3946, - "guid": "78695ca7-4e94-4a15-aa00-b8e4081335be", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Nathan", - "company": "Enlogia", - "phone": "883-570-3921", - "email": "aaliyah@enlogia.com" - }, - { - "id": 3947, - "guid": "f9eab70f-c54b-4c52-a6df-2e9f67d8225c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Young", - "company": "Fibrotouch", - "phone": "857-510-3051", - "email": "paige@fibrotouch.com" - }, - { - "id": 3948, - "guid": "4137d425-ea86-47ed-bd8a-9c04df1e50dd", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Gardner", - "company": "Vencom", - "phone": "836-404-3732", - "email": "ava@vencom.com" - }, - { - "id": 3949, - "guid": "e133135b-50b0-488e-86ac-c4c20642e092", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Miln", - "company": "Turbomart", - "phone": "867-467-2914", - "email": "riley@turbomart.com" - }, - { - "id": 3950, - "guid": "e3d22161-d0c8-4b7e-961e-63c86824eeff", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Caroline Gustman", - "company": "Allnet", - "phone": "897-419-3524", - "email": "caroline@allnet.com" - }, - { - "id": 3951, - "guid": "577c1c2e-a98d-4c14-8544-aefa861abe57", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Oswald", - "company": "Proline", - "phone": "828-524-2406", - "email": "hannah@proline.com" - }, - { - "id": 3952, - "guid": "829826aa-3559-47d7-afbe-3e3f8c594f6c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Day", - "company": "Systheon", - "phone": "867-432-3469", - "email": "elizabeth@systheon.com" - }, - { - "id": 3953, - "guid": "d149b7bb-5f82-45e0-8e63-9cac1cd33c70", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery White", - "company": "Ameritron", - "phone": "806-431-2849", - "email": "avery@ameritron.com" - }, - { - "id": 3954, - "guid": "e4201ae0-d11b-477b-8622-36305e60b267", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Carrington", - "company": "Safetrust", - "phone": "816-421-2937", - "email": "jasmine@safetrust.com" - }, - { - "id": 3955, - "guid": "eb108adb-96d3-4e07-b8cc-77c263824fab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Hamphrey", - "company": "Syssoft", - "phone": "843-471-3167", - "email": "bella@syssoft.com" - }, - { - "id": 3956, - "guid": "9a6f40d1-b011-48f8-900e-6e5483a6bfc7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Carey", - "company": "SysUSA", - "phone": "862-433-2321", - "email": "bailey@sysusa.com" - }, - { - "id": 3957, - "guid": "486f11f6-2dd3-4fa9-bb01-b21ebf909bab", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Chloe Abramson", - "company": "Pericenta", - "phone": "845-537-3952", - "email": "chloe@pericenta.com" - }, - { - "id": 3958, - "guid": "c65092ad-fa65-43a4-b2a4-3279a5bfdaf9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya Molligan", - "company": "Infragraph", - "phone": "863-431-3988", - "email": "mya@infragraph.com" - }, - { - "id": 3959, - "guid": "3f488359-0b3c-4772-a163-354471da8216", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Wayne", - "company": "iSkyvaco", - "phone": "842-498-2854", - "email": "audrey@iskyvaco.com" - }, - { - "id": 3960, - "guid": "a6e4d9ed-5933-4e88-9a93-c0a45e648cd7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Brooks", - "company": "iEnland", - "phone": "817-485-3200", - "email": "emily@ienland.com" - }, - { - "id": 3961, - "guid": "d6453be5-c395-4736-b205-5952d7580e7c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ava Charlson", - "company": "Textiqua", - "phone": "837-406-3005", - "email": "ava@textiqua.com" - }, - { - "id": 3962, - "guid": "8c2b137a-1c6e-4869-8a6c-41bd14a4146b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Clapton", - "company": "Transtouch", - "phone": "811-422-3312", - "email": "ella@transtouch.com" - }, - { - "id": 3963, - "guid": "30dd6aeb-bafa-45bc-afdc-6034f430e97b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Abramson", - "company": "Mescatron", - "phone": "874-593-2982", - "email": "peyton@mescatron.com" - }, - { - "id": 3964, - "guid": "7767ed75-236e-4c34-ac4b-fb8c43dc4e93", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Charlson", - "company": "Quintegrity", - "phone": "844-509-2766", - "email": "ella@quintegrity.com" - }, - { - "id": 3965, - "guid": "de3d998b-c521-4753-9f9d-1aa38c32e59f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Elizabeth Cook", - "company": "Mescatron", - "phone": "873-437-2016", - "email": "elizabeth@mescatron.com" - }, - { - "id": 3966, - "guid": "6f4be886-1f81-4698-8766-8d682d3142c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Harrison", - "company": "Raylog", - "phone": "800-559-3378", - "email": "trinity@raylog.com" - }, - { - "id": 3967, - "guid": "96832eb7-218b-4cb5-9b4c-c88baca21519", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Gilmore", - "company": "Sontopia", - "phone": "818-460-3920", - "email": "elizabeth@sontopia.com" - }, - { - "id": 3968, - "guid": "1faf8820-ff50-4513-823e-46b48a70c7c9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brianna Hailey", - "company": "Xeicon", - "phone": "854-458-2424", - "email": "brianna@xeicon.com" - }, - { - "id": 3969, - "guid": "ecb9ffcc-85f4-4c10-b085-9624b2c6fff9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Ford", - "company": "Navivacs", - "phone": "810-530-3118", - "email": "lily@navivacs.com" - }, - { - "id": 3970, - "guid": "bd6a766d-b1d5-48d8-abe3-6cf82d50f7b0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Abramson", - "company": "iOptystix", - "phone": "815-569-3827", - "email": "angelina@ioptystix.com" - }, - { - "id": 3971, - "guid": "0b1fa08f-02c7-49c4-8e91-048cd53ed7e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Gardner", - "company": "Genland", - "phone": "873-541-3929", - "email": "brooklyn@genland.com" - }, - { - "id": 3972, - "guid": "ecd10d92-696e-46d5-b8ab-a60cedacf978", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Ward", - "company": "Cryptotegrity", - "phone": "869-430-2415", - "email": "brooklyn@cryptotegrity.com" - }, - { - "id": 3973, - "guid": "8696560a-d90b-47a1-a512-1ccd55ea56c2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Vaughan", - "company": "Aluco", - "phone": "897-427-3275", - "email": "valeria@aluco.com" - }, - { - "id": 3974, - "guid": "4aa382d9-9155-4c4a-9301-d40521a51b1c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Wainwright", - "company": "Netsystems", - "phone": "849-494-2462", - "email": "gianna@netsystems.com" - }, - { - "id": 3975, - "guid": "89753068-35f5-43f7-801e-107be8685fe4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Daniels", - "company": "iSkyvaco", - "phone": "831-516-3083", - "email": "khloe@iskyvaco.com" - }, - { - "id": 3976, - "guid": "a72e7b8f-7e5b-4af1-982d-bc61b9c445ee", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Carey", - "company": "iSkyvaco", - "phone": "889-481-3390", - "email": "mackenzie@iskyvaco.com" - }, - { - "id": 3977, - "guid": "3cc97e49-b790-43f6-8b77-c2c6efb4d895", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Miers", - "company": "Technogra", - "phone": "839-594-2752", - "email": "aaliyah@technogra.com" - }, - { - "id": 3978, - "guid": "5603c6e3-83aa-4b63-98e2-11a8512c891d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Waller", - "company": "Aprama", - "phone": "808-463-3887", - "email": "peyton@aprama.com" - }, - { - "id": 3979, - "guid": "44bd6e6f-de04-4ce3-99e8-51b4235194fe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Cook", - "company": "Polytheon", - "phone": "867-495-2410", - "email": "bella@polytheon.com" - }, - { - "id": 3980, - "guid": "8289a8e8-ae6c-45d5-a5e0-325021e730c0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Watson", - "company": "Inridium", - "phone": "871-505-2823", - "email": "paige@inridium.com" - }, - { - "id": 3981, - "guid": "f1ce032b-a8ca-410c-899d-46c191b3357b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Creighton", - "company": "Anaframe", - "phone": "866-513-3949", - "email": "jessica@anaframe.com" - }, - { - "id": 3982, - "guid": "4593f20a-c2f2-4242-8f0c-0fe764adbecb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Otis", - "company": "Infragraph", - "phone": "815-587-3619", - "email": "makayla@infragraph.com" - }, - { - "id": 3983, - "guid": "77e843b6-98c1-4bb1-8f85-20e2f55ce130", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Morrison", - "company": "Cryptotegrity", - "phone": "877-409-2201", - "email": "alexa@cryptotegrity.com" - }, - { - "id": 3984, - "guid": "3d30ea40-947a-48bb-a7bb-8074ec2eb033", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Bella Turner", - "company": "Enlogia", - "phone": "878-422-3006", - "email": "bella@enlogia.com" - }, - { - "id": 3985, - "guid": "c7e5cc21-0ef7-45a7-9133-363e3a197622", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Hodges", - "company": "iOptystix", - "phone": "894-453-2979", - "email": "ashley@ioptystix.com" - }, - { - "id": 3986, - "guid": "84ccbf55-da70-4c6b-a6ae-1f9f4fabf505", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Ford", - "company": "Polytheon", - "phone": "858-461-2214", - "email": "kylie@polytheon.com" - }, - { - "id": 3987, - "guid": "7f2dfc18-5ae5-4f37-a7d0-c9d8ade62b5a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Hardman", - "company": "Videobanc", - "phone": "813-575-2458", - "email": "kaitlyn@videobanc.com" - }, - { - "id": 3988, - "guid": "9dcad2e3-f779-46d2-a9e8-dd262ba2d71c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Hailey", - "company": "Truegate", - "phone": "842-532-2438", - "email": "makayla@truegate.com" - }, - { - "id": 3989, - "guid": "346aa23e-4291-4f35-ba46-4145a5317190", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Croftoon", - "company": "Westmedia", - "phone": "819-534-3906", - "email": "madison@westmedia.com" - }, - { - "id": 3990, - "guid": "71194bea-dc15-42ca-9b38-cbb280c99138", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Miller", - "company": "Xeicon", - "phone": "844-492-2789", - "email": "jessica@xeicon.com" - }, - { - "id": 3991, - "guid": "201e092f-efb3-47dd-862d-646333517f38", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Webster", - "company": "Generola", - "phone": "852-512-2689", - "email": "aubrey@generola.com" - }, - { - "id": 3992, - "guid": "f1e5ee29-5e18-43dd-bb81-300789773827", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Campbell", - "company": "Fibroserve", - "phone": "837-499-2960", - "email": "ashley@fibroserve.com" - }, - { - "id": 3993, - "guid": "3777d25d-7d17-4d58-be6f-e40991b6e755", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Crossman", - "company": "Interliant", - "phone": "863-452-2078", - "email": "sophie@interliant.com" - }, - { - "id": 3994, - "guid": "874f3600-8b50-43c9-a201-033852da7d32", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Hodges", - "company": "iMedconik", - "phone": "852-424-2329", - "email": "molly@imedconik.com" - }, - { - "id": 3995, - "guid": "9edcf7bb-d482-44d4-8ad1-ba90273d5b11", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Campbell", - "company": "Conotomics", - "phone": "864-417-2082", - "email": "evelyn@conotomics.com" - }, - { - "id": 3996, - "guid": "86e16d3d-ed50-4623-a07a-86a031f27a8a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Trinity Adamson", - "company": "Interliant", - "phone": "838-445-2669", - "email": "trinity@interliant.com" - }, - { - "id": 3997, - "guid": "3e149264-1363-4e9c-856b-64400bdcfbba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Charlson", - "company": "Titanigraf", - "phone": "876-524-2725", - "email": "arianna@titanigraf.com" - }, - { - "id": 3998, - "guid": "e8f3b8ee-124f-46f7-b3ab-e7164d89dbf6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Crossman", - "company": "Rapigrafix", - "phone": "872-596-2828", - "email": "peyton@rapigrafix.com" - }, - { - "id": 3999, - "guid": "59694102-4579-440d-b91d-39165b7bcbf4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Harrison", - "company": "Keytheon", - "phone": "836-547-3957", - "email": "gabriella@keytheon.com" - }, - { - "id": 4000, - "guid": "9d3a2205-d986-4cce-8fae-d160efa456aa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Adamson", - "company": "Textiqua", - "phone": "816-523-3666", - "email": "emma@textiqua.com" - }, - { - "id": 4001, - "guid": "16bb215a-ddc6-4193-bfdb-250b11c19d5c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Young", - "company": "Steganoconiche", - "phone": "853-531-3482", - "email": "audrey@steganoconiche.com" - }, - { - "id": 4002, - "guid": "0e81a166-ef53-4952-8ca2-16f4964af71e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabelle Ward", - "company": "Truetomic", - "phone": "851-533-2534", - "email": "isabelle@truetomic.com" - }, - { - "id": 4003, - "guid": "7437ec8e-a6ba-46db-8e56-a606312ba609", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Clapton", - "company": "Infragraph", - "phone": "887-557-2726", - "email": "vanessa@infragraph.com" - }, - { - "id": 4004, - "guid": "9c2b052c-b414-4936-a77f-1063f5ed5e75", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Calhoun", - "company": "Anagraph", - "phone": "893-492-3433", - "email": "olivia@anagraph.com" - }, - { - "id": 4005, - "guid": "a1d448b7-9a62-4043-88b3-e0f83637fb97", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Fisher", - "company": "Fibrotopia", - "phone": "810-507-3937", - "email": "angelina@fibrotopia.com" - }, - { - "id": 4006, - "guid": "c7b6fd4d-cf81-4766-90bb-d60c0a82ce6a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley White", - "company": "Celgra", - "phone": "832-460-3270", - "email": "riley@celgra.com" - }, - { - "id": 4007, - "guid": "b326c645-bfa4-4b46-98fb-a503f54c144c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Miers", - "company": "Ameritron", - "phone": "826-566-2819", - "email": "caroline@ameritron.com" - }, - { - "id": 4008, - "guid": "4d6f1705-a249-45aa-aac2-6efa9682b14f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Haig", - "company": "Anagraph", - "phone": "848-445-3978", - "email": "emily@anagraph.com" - }, - { - "id": 4009, - "guid": "f7b1d7a7-e0f9-4a40-9cd6-5d4a06d0813e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Chesterton", - "company": "Conrama", - "phone": "816-551-2229", - "email": "eva@conrama.com" - }, - { - "id": 4010, - "guid": "05fc6421-24b1-4f7c-a84b-35caeaafaa3b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Gibbs", - "company": "US Omnigraphik", - "phone": "893-512-2241", - "email": "morgan@us omnigraphik.com" - }, - { - "id": 4011, - "guid": "7dc1d83a-be8b-48f5-bd13-08ef51134c65", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Hoggarth", - "company": "Orthosoft", - "phone": "836-549-3336", - "email": "isabelle@orthosoft.com" - }, - { - "id": 4012, - "guid": "c48837ee-e2a6-4cc2-9f2a-dd53dae9994e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hannah Oldman", - "company": "Westmedia", - "phone": "863-406-3550", - "email": "hannah@westmedia.com" - }, - { - "id": 4013, - "guid": "651ab083-a9df-4baf-8ad0-68dcaf8b6f3c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Goodman", - "company": "Thermotomic", - "phone": "863-446-2509", - "email": "maria@thermotomic.com" - }, - { - "id": 4014, - "guid": "ee73d373-225d-472d-80ba-e30f0daf62b7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Wayne", - "company": "eSteganoergy", - "phone": "857-445-2726", - "email": "molly@esteganoergy.com" - }, - { - "id": 4015, - "guid": "d36d44bd-665d-4251-a52d-00c7953035a0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Sheldon", - "company": "Venconix", - "phone": "865-469-2733", - "email": "maya@venconix.com" - }, - { - "id": 4016, - "guid": "02928ab3-83aa-4edb-adbc-82331c12e883", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth Wayne", - "company": "Videobanc", - "phone": "834-534-2889", - "email": "elizabeth@videobanc.com" - }, - { - "id": 4017, - "guid": "5b1b363f-8a07-42f0-96c0-d4fabd4547ae", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Calhoun", - "company": "Polytheon", - "phone": "885-500-3422", - "email": "maria@polytheon.com" - }, - { - "id": 4018, - "guid": "baeb64f5-75da-4d17-ad35-14594beee848", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Osborne", - "company": "Westmedia", - "phone": "829-529-3829", - "email": "leah@westmedia.com" - }, - { - "id": 4019, - "guid": "236ea9a6-e807-4c77-8403-eb9c89f287b4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Walkman", - "company": "Turbomart", - "phone": "804-426-3663", - "email": "leah@turbomart.com" - }, - { - "id": 4020, - "guid": "ad6d9b06-9498-4d97-b5e3-7e19189d5c71", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Owen", - "company": "Transtouch", - "phone": "859-506-3576", - "email": "jessica@transtouch.com" - }, - { - "id": 4021, - "guid": "e86e4099-c1b4-41bb-8174-4f92b14e2d87", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Carter", - "company": "Steganoconiche", - "phone": "852-504-2527", - "email": "nevaeh@steganoconiche.com" - }, - { - "id": 4022, - "guid": "29d7d39b-2615-48bb-91a4-51d5cf9215de", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Gilson", - "company": "Aluco", - "phone": "834-515-2186", - "email": "kaylee@aluco.com" - }, - { - "id": 4023, - "guid": "f1d43056-8a6b-4bba-b9b4-7a389f787cf1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Gilmore", - "company": "Compuamerica", - "phone": "893-511-2354", - "email": "khloe@compuamerica.com" - }, - { - "id": 4024, - "guid": "fa48b1cd-dd4e-45ad-9fb9-120097415902", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Cook", - "company": "Netseco", - "phone": "806-495-2775", - "email": "allison@netseco.com" - }, - { - "id": 4025, - "guid": "ee046f37-db47-4c67-a3ef-00bde2416483", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Miller", - "company": "Netseco", - "phone": "820-549-2764", - "email": "lillian@netseco.com" - }, - { - "id": 4026, - "guid": "500824f0-ffe1-4a30-b42b-e9e6d3148632", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna WifKinson", - "company": "Gigaura", - "phone": "818-467-3887", - "email": "gianna@gigaura.com" - }, - { - "id": 4027, - "guid": "115fb9bd-a658-43ba-b821-5d9478669aed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brianna Gilmore", - "company": "Mescaridic", - "phone": "817-427-3806", - "email": "brianna@mescaridic.com" - }, - { - "id": 4028, - "guid": "1bd8e221-e33b-440f-a19f-5f7db2fb8eaa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Hamphrey", - "company": "Qualserve", - "phone": "862-543-2213", - "email": "chloe@qualserve.com" - }, - { - "id": 4029, - "guid": "b91d8494-2018-4c7b-ae64-eddef3bf0f42", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Goldman", - "company": "Titanirola", - "phone": "861-426-3435", - "email": "hannah@titanirola.com" - }, - { - "id": 4030, - "guid": "3c8e68fa-6bb3-4a3c-b941-a84b2e590e0e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Chesterton", - "company": "Aluco", - "phone": "875-579-2484", - "email": "abigail@aluco.com" - }, - { - "id": 4031, - "guid": "dbb8ef26-3666-4822-af3d-c2f87d4105c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Neal", - "company": "Fibrotopia", - "phone": "847-487-3585", - "email": "zoe@fibrotopia.com" - }, - { - "id": 4032, - "guid": "6edf5aa5-e7c9-4208-9a30-3e71f802c444", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Harrison", - "company": "Interliant", - "phone": "818-563-3010", - "email": "ava@interliant.com" - }, - { - "id": 4033, - "guid": "44164324-eec0-40e7-9cbd-545cb8f140f3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Wood", - "company": "US Infratouch", - "phone": "811-533-2645", - "email": "gianna@us infratouch.com" - }, - { - "id": 4034, - "guid": "d663e75a-d28d-4261-a1c2-4b56a84a247a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Wainwright", - "company": "Technogra", - "phone": "876-493-3221", - "email": "mariah@technogra.com" - }, - { - "id": 4035, - "guid": "a46ddf16-18c6-491f-a082-d873bb738254", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Brooks", - "company": "Safeagra", - "phone": "882-441-3414", - "email": "taylor@safeagra.com" - }, - { - "id": 4036, - "guid": "10dc1fd3-7e5b-4113-bc9c-6c702b1b89ee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Sheldon", - "company": "Cryptotemplate", - "phone": "851-441-3919", - "email": "riley@cryptotemplate.com" - }, - { - "id": 4037, - "guid": "6891e9c7-9151-4d69-b250-c1f36ae8e3fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Thomson", - "company": "Thermotomic", - "phone": "845-490-3211", - "email": "anna@thermotomic.com" - }, - { - "id": 4038, - "guid": "78eaccbe-9e08-42d9-b02c-8f929b8e425a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Gardner", - "company": "RoboAerlogix", - "phone": "806-562-2035", - "email": "bailey@roboaerlogix.com" - }, - { - "id": 4039, - "guid": "345d5d31-367d-4ae1-a8a2-c7eb58a59c62", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Galbraith", - "company": "Westmedia", - "phone": "886-548-3824", - "email": "gianna@westmedia.com" - }, - { - "id": 4040, - "guid": "6160dee4-180b-470f-9fe0-9adef2680d7f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Payton Harrison", - "company": "Westtomik", - "phone": "884-591-3843", - "email": "payton@westtomik.com" - }, - { - "id": 4041, - "guid": "4eb8ac42-0bfd-4665-8ef7-d3d51bb2254d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Abramson", - "company": "Ventanium", - "phone": "885-597-3172", - "email": "makayla@ventanium.com" - }, - { - "id": 4042, - "guid": "d5c8d7df-1a56-4c4d-857c-1407cea724d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Abramson", - "company": "Steganoconiche", - "phone": "843-418-3463", - "email": "trinity@steganoconiche.com" - }, - { - "id": 4043, - "guid": "d095c6bd-f900-4d04-81bf-bd3b29591974", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Carey", - "company": "Teraserv", - "phone": "831-584-3485", - "email": "leah@teraserv.com" - }, - { - "id": 4044, - "guid": "165df486-f14c-4b2c-a289-b766b091c38c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Gardner", - "company": "Indisco", - "phone": "874-510-2511", - "email": "gabrielle@indisco.com" - }, - { - "id": 4045, - "guid": "74b21ead-913a-4a96-9645-9781f960b5f1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Michaelson", - "company": "Fibroserve", - "phone": "894-509-2154", - "email": "gabriella@fibroserve.com" - }, - { - "id": 4046, - "guid": "76bf1a22-51f6-49a2-a548-fea8661b676f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Morrison", - "company": "Indisco", - "phone": "812-529-3393", - "email": "kaylee@indisco.com" - }, - { - "id": 4047, - "guid": "16484380-c87e-4778-a17d-e9470fd47098", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Daniels", - "company": "Ventanium", - "phone": "848-424-2042", - "email": "hannah@ventanium.com" - }, - { - "id": 4048, - "guid": "1be6f1b7-5930-4e03-9f5b-9abfb9d98e1b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Smith", - "company": "Anaframe", - "phone": "833-487-3950", - "email": "morgan@anaframe.com" - }, - { - "id": 4049, - "guid": "24e77b92-7a7d-4e57-9d50-8f5b0574431e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Gardner", - "company": "Rapigrafix", - "phone": "895-400-3305", - "email": "nevaeh@rapigrafix.com" - }, - { - "id": 4050, - "guid": "48103688-eead-48c1-af94-c677b33942cd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Fulton", - "company": "Netsystems", - "phone": "840-427-3958", - "email": "lily@netsystems.com" - }, - { - "id": 4051, - "guid": "dec38a0f-505d-46ac-8c4b-48e6b3fe8c3d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Samantha Neal", - "company": "Cryptotegrity", - "phone": "871-582-3189", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 4052, - "guid": "3c6258d5-cf41-4e2b-af20-34b930b7f51b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Charlson", - "company": "Transtouch", - "phone": "895-508-3221", - "email": "nevaeh@transtouch.com" - }, - { - "id": 4053, - "guid": "0f3853d3-b55d-4189-9f9e-9aa1f25314b7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Carroll", - "company": "Truetomic", - "phone": "809-444-3252", - "email": "arianna@truetomic.com" - }, - { - "id": 4054, - "guid": "975a3bbb-1a8a-489a-a7ca-34712ecb6410", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline WifKinson", - "company": "Unconix", - "phone": "884-576-3519", - "email": "madeline@unconix.com" - }, - { - "id": 4055, - "guid": "37cd7f4e-c90e-453c-a002-ec99b7fc048c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Watson", - "company": "Truegate", - "phone": "894-481-3042", - "email": "kaylee@truegate.com" - }, - { - "id": 4056, - "guid": "04fdcf38-7ece-4dd5-84a7-342d0ff7449d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Wayne", - "company": "Safeagra", - "phone": "874-543-2421", - "email": "isabella@safeagra.com" - }, - { - "id": 4057, - "guid": "c6b60db5-543b-4b90-a8d6-c7ef8fc12a29", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Osborne", - "company": "iSkyvaco", - "phone": "853-508-2620", - "email": "amelia@iskyvaco.com" - }, - { - "id": 4058, - "guid": "32c851e0-be03-442a-8de7-a91762569f28", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Webster", - "company": "Unconix", - "phone": "891-572-2680", - "email": "bella@unconix.com" - }, - { - "id": 4059, - "guid": "65a529a9-a5e3-477d-b684-df715c7637e7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Haig", - "company": "Inridium", - "phone": "841-465-2910", - "email": "mya@inridium.com" - }, - { - "id": 4060, - "guid": "d491cf8d-7ac6-4e84-b5bf-69a7edef57c8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Brooks", - "company": "Allphysiche", - "phone": "853-513-3080", - "email": "emma@allphysiche.com" - }, - { - "id": 4061, - "guid": "f6202b0d-ce96-4fbc-a594-7cd07961178f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Oldman", - "company": "Xeicon", - "phone": "850-587-2592", - "email": "isabelle@xeicon.com" - }, - { - "id": 4062, - "guid": "14434416-86d5-48fd-8150-7eb376043dc9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Miers", - "company": "Infragraph", - "phone": "801-537-2464", - "email": "destiny@infragraph.com" - }, - { - "id": 4063, - "guid": "f2a25171-36b8-4930-984c-f11cc27f62d6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Webster", - "company": "Allnet", - "phone": "827-563-2139", - "email": "olivia@allnet.com" - }, - { - "id": 4064, - "guid": "d2356372-4fd8-4a1a-919b-29067261e5be", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley Oswald", - "company": "Cryptotegrity", - "phone": "846-480-3998", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 4065, - "guid": "0dfda539-281e-4c3a-8830-342f3d96c4c7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Hoggarth", - "company": "Thermotomic", - "phone": "860-401-2875", - "email": "elizabeth@thermotomic.com" - }, - { - "id": 4066, - "guid": "98729758-d097-4553-bc91-27e9df6eb3d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Goldman", - "company": "Steganoconiche", - "phone": "858-495-3454", - "email": "destiny@steganoconiche.com" - }, - { - "id": 4067, - "guid": "578aee53-d71d-40bc-b54e-9a3223d454f0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Michaelson", - "company": "Infragraph", - "phone": "860-403-2798", - "email": "brooklyn@infragraph.com" - }, - { - "id": 4068, - "guid": "294727df-aa44-41e8-bf2b-02a284b6a9be", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Stanley", - "company": "Westmedia", - "phone": "840-583-3895", - "email": "mya@westmedia.com" - }, - { - "id": 4069, - "guid": "fdcd0a61-0f2f-4fa4-ab36-e008e7926d6f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Haig", - "company": "Enlogia", - "phone": "876-451-3710", - "email": "gabriella@enlogia.com" - }, - { - "id": 4070, - "guid": "da8e0733-b6e0-4403-adda-e109da5d0b15", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Brickman", - "company": "Truetomic", - "phone": "888-539-3567", - "email": "aubrey@truetomic.com" - }, - { - "id": 4071, - "guid": "f32a4013-737a-4469-966e-a7b6b7f3d30b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Gilbert", - "company": "Robocomm", - "phone": "806-495-2340", - "email": "caroline@robocomm.com" - }, - { - "id": 4072, - "guid": "c64e8398-f0da-4dfb-9591-70044cb4a8f5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Ford", - "company": "eEyetanic", - "phone": "865-458-2329", - "email": "bella@eeyetanic.com" - }, - { - "id": 4073, - "guid": "e916a7ce-4507-45db-b5a8-be091f318c0c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Webster", - "company": "iOptystix", - "phone": "803-519-2947", - "email": "jessica@ioptystix.com" - }, - { - "id": 4074, - "guid": "b2f640f6-3487-476f-8d63-321a7bb14667", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Grace Hailey", - "company": "Infraique", - "phone": "816-411-2787", - "email": "grace@infraique.com" - }, - { - "id": 4075, - "guid": "0f6adb24-450b-48cf-ad92-ee75bb93de4d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Cook", - "company": "Technogra", - "phone": "818-456-2854", - "email": "eva@technogra.com" - }, - { - "id": 4076, - "guid": "e7677801-11a6-4098-a034-3d603230059c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Daniels", - "company": "Turbomart", - "phone": "891-446-3808", - "email": "amelia@turbomart.com" - }, - { - "id": 4077, - "guid": "7b023840-07d0-4a48-bf3e-d25713c1dd07", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Hancock", - "company": "Thermotomic", - "phone": "847-584-2557", - "email": "destiny@thermotomic.com" - }, - { - "id": 4078, - "guid": "2c57c1f4-3aa2-430e-b7b4-d3dc6bb7ee6e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Sheldon", - "company": "US Omnigraphik", - "phone": "888-595-2267", - "email": "alexis@us omnigraphik.com" - }, - { - "id": 4079, - "guid": "2c3534cc-b221-44ae-9594-22de110b7583", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Smith", - "company": "Cryptotegrity", - "phone": "867-523-2399", - "email": "madeline@cryptotegrity.com" - }, - { - "id": 4080, - "guid": "0866977f-a476-4d00-b598-2de2e73ea7b4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Turner", - "company": "Orthosoft", - "phone": "825-585-3855", - "email": "serenity@orthosoft.com" - }, - { - "id": 4081, - "guid": "ca289220-f402-482a-b02d-a970b8e2b885", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexandra Adamson", - "company": "Skydata", - "phone": "833-559-3137", - "email": "alexandra@skydata.com" - }, - { - "id": 4082, - "guid": "858c4f56-4515-4c3c-97dd-a5ca782a0702", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Daniels", - "company": "Technogra", - "phone": "810-451-2503", - "email": "sydney@technogra.com" - }, - { - "id": 4083, - "guid": "876cbb5b-58a3-4736-9eb6-99dda2c26da7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Webster", - "company": "Cryptotegrity", - "phone": "818-445-2798", - "email": "taylor@cryptotegrity.com" - }, - { - "id": 4084, - "guid": "8015e10b-2203-484d-a311-199e8922745d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lillian White", - "company": "Robotomic", - "phone": "827-558-3123", - "email": "lillian@robotomic.com" - }, - { - "id": 4085, - "guid": "b3fbfd90-db78-4b87-8b7e-426694d67650", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Cramer", - "company": "Interliant", - "phone": "836-465-2623", - "email": "serenity@interliant.com" - }, - { - "id": 4086, - "guid": "cbf35617-89b9-4181-a47a-936e10cdfef0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Andrea Gibbs", - "company": "Jamrola", - "phone": "889-456-3035", - "email": "andrea@jamrola.com" - }, - { - "id": 4087, - "guid": "219b104b-b179-48ce-a26a-240cc9d463d9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Chapman", - "company": "Gigaura", - "phone": "832-462-2110", - "email": "zoey@gigaura.com" - }, - { - "id": 4088, - "guid": "3d706c6b-324e-4832-8a83-cf08fa9868d6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Nelson", - "company": "Conotomics", - "phone": "804-503-2398", - "email": "sydney@conotomics.com" - }, - { - "id": 4089, - "guid": "52b53b97-dc43-447f-af5f-387a12b7f2b1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Milton", - "company": "Interliant", - "phone": "861-589-3474", - "email": "riley@interliant.com" - }, - { - "id": 4090, - "guid": "bba90379-ac73-430d-9ef5-9b216d7c7372", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Abramson", - "company": "Westtomik", - "phone": "878-406-2399", - "email": "serenity@westtomik.com" - }, - { - "id": 4091, - "guid": "2f36ba6f-f20a-4802-a3a7-f7ad65ac5723", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Camila WifKinson", - "company": "Gigaura", - "phone": "862-435-3500", - "email": "camila@gigaura.com" - }, - { - "id": 4092, - "guid": "27626e0b-4ae4-4d30-a4bf-6179cb7d99ac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Freeman", - "company": "Jamconik", - "phone": "824-454-2197", - "email": "samantha@jamconik.com" - }, - { - "id": 4093, - "guid": "2b6a0d2b-8e53-46f7-9cfa-01b4d407bcaf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Oldridge", - "company": "Thermotomic", - "phone": "832-464-2324", - "email": "alexa@thermotomic.com" - }, - { - "id": 4094, - "guid": "bb1b07cd-02d2-4c02-be4c-f9a3a5ec0aa3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Sheldon", - "company": "Entcast", - "phone": "800-598-2333", - "email": "leah@entcast.com" - }, - { - "id": 4095, - "guid": "1ffd7840-d55a-4841-802d-75684ed2deaf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Carter", - "company": "Polytheon", - "phone": "836-546-2344", - "email": "katelyn@polytheon.com" - }, - { - "id": 4096, - "guid": "2b681f87-a74d-4151-a70c-972882d0f5fd", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Hamphrey", - "company": "Fibroserve", - "phone": "819-437-3010", - "email": "khloe@fibroserve.com" - }, - { - "id": 4097, - "guid": "f096d2b3-c4bf-45c9-9aeb-d83924c22774", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Gustman", - "company": "Infragraph", - "phone": "875-442-3135", - "email": "sarah@infragraph.com" - }, - { - "id": 4098, - "guid": "ced0397f-5c51-4964-aa1b-ec8144d23c6f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Chesterton", - "company": "Fibrotopia", - "phone": "837-547-3939", - "email": "autumn@fibrotopia.com" - }, - { - "id": 4099, - "guid": "48130075-caa5-4d77-a589-a4dfe2cf91f9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Carter", - "company": "SysVenamerica", - "phone": "858-468-3898", - "email": "layla@sysvenamerica.com" - }, - { - "id": 4100, - "guid": "959c949e-7a0b-46a9-88ce-d182ecd0a3e8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Daniels", - "company": "Titanigraf", - "phone": "815-405-3074", - "email": "abigail@titanigraf.com" - }, - { - "id": 4101, - "guid": "f791f60f-259a-4ac5-bfeb-e51d6b06471b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Winter", - "company": "Allnet", - "phone": "889-443-2253", - "email": "emma@allnet.com" - }, - { - "id": 4102, - "guid": "05545337-aebb-4dd3-bf6f-75bc1a437909", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Higgins", - "company": "Systheon", - "phone": "832-486-2959", - "email": "melanie@systheon.com" - }, - { - "id": 4103, - "guid": "537b2719-d2eb-4477-81c1-f376bda3f700", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Fulton", - "company": "Airdyne", - "phone": "836-415-2859", - "email": "katelyn@airdyne.com" - }, - { - "id": 4104, - "guid": "cb8815dc-c7f1-4a50-b281-34da25cd07b1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Hodges", - "company": "US Infratouch", - "phone": "868-457-3221", - "email": "jasmine@us infratouch.com" - }, - { - "id": 4105, - "guid": "9fcabcc1-a0e7-4fa2-aef4-519036c62c5e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Neal", - "company": "Quintegrity", - "phone": "800-565-2371", - "email": "jasmine@quintegrity.com" - }, - { - "id": 4106, - "guid": "eec47e69-c68b-45bf-8157-04bae41c137d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Molligan", - "company": "Hypervaco", - "phone": "882-574-2717", - "email": "abigail@hypervaco.com" - }, - { - "id": 4107, - "guid": "9bb062df-4dc1-4fe2-80d4-a6c44eecc093", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Clapton", - "company": "Gigaura", - "phone": "822-498-2327", - "email": "samantha@gigaura.com" - }, - { - "id": 4108, - "guid": "d4989763-b38a-459f-99b7-55efb7d70c66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Gate", - "company": "Hypervaco", - "phone": "853-412-2031", - "email": "isabella@hypervaco.com" - }, - { - "id": 4109, - "guid": "c86ae2e2-0dda-435d-940d-f2904015fc65", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Wainwright", - "company": "Truegate", - "phone": "882-514-2471", - "email": "melanie@truegate.com" - }, - { - "id": 4110, - "guid": "4ccb551b-1606-4f82-901d-1796ae48e691", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Carroll", - "company": "Textiqua", - "phone": "843-537-2212", - "email": "amelia@textiqua.com" - }, - { - "id": 4111, - "guid": "ffd9d179-5d13-4773-81c6-c63b2f6d0a7f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Croftoon", - "company": "eEyetanic", - "phone": "828-597-2815", - "email": "emma@eeyetanic.com" - }, - { - "id": 4112, - "guid": "91ba2980-6900-4bc0-b759-309b51d06e74", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Clapton", - "company": "Navivacs", - "phone": "879-407-2538", - "email": "katherine@navivacs.com" - }, - { - "id": 4113, - "guid": "21326049-b42a-468f-8252-910902090396", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Higgins", - "company": "Teraserv", - "phone": "878-449-2156", - "email": "serenity@teraserv.com" - }, - { - "id": 4114, - "guid": "025fc863-46b2-4763-8398-f35257e22f4a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Young", - "company": "Genland", - "phone": "813-447-2810", - "email": "evelyn@genland.com" - }, - { - "id": 4115, - "guid": "d086b805-bff7-4bd0-a857-53369fd03135", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Sherlock", - "company": "Gigaura", - "phone": "851-569-3996", - "email": "anna@gigaura.com" - }, - { - "id": 4116, - "guid": "d9853151-ce3b-45de-8a89-1748329f84be", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Wainwright", - "company": "Allnet", - "phone": "887-475-3954", - "email": "lily@allnet.com" - }, - { - "id": 4117, - "guid": "409e113a-3b22-40c6-aa31-436ede46eb35", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Sherlock", - "company": "Robotomic", - "phone": "892-546-3853", - "email": "evelyn@robotomic.com" - }, - { - "id": 4118, - "guid": "9379af78-3f06-4254-807f-049f938a0215", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Wallace", - "company": "Jamrola", - "phone": "852-543-2663", - "email": "melanie@jamrola.com" - }, - { - "id": 4119, - "guid": "4e216722-069b-491b-a4ad-e903019883ed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Melanie Clapton", - "company": "Superscope", - "phone": "842-424-3205", - "email": "melanie@superscope.com" - }, - { - "id": 4120, - "guid": "88179596-6034-48cd-9780-5b6cf1abac00", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Croftoon", - "company": "Quintegrity", - "phone": "845-472-2328", - "email": "avery@quintegrity.com" - }, - { - "id": 4121, - "guid": "2a1637b8-58aa-4c5c-b7d1-3f69b51096cb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Paige Brooks", - "company": "Ameritron", - "phone": "872-466-2564", - "email": "paige@ameritron.com" - }, - { - "id": 4122, - "guid": "021c5258-e929-4dd0-847f-ad7de1c6db3e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Haig", - "company": "Anaframe", - "phone": "895-426-3127", - "email": "kaylee@anaframe.com" - }, - { - "id": 4123, - "guid": "610ab397-fdcc-49aa-894c-0e7fa4acad6c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Harrison", - "company": "Ventanium", - "phone": "818-538-3931", - "email": "gianna@ventanium.com" - }, - { - "id": 4124, - "guid": "34ff089f-f745-4543-b2cc-f6f28ddf173f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Hoggarth", - "company": "Cryptotemplate", - "phone": "817-405-3254", - "email": "alexandra@cryptotemplate.com" - }, - { - "id": 4125, - "guid": "0dd61503-e70d-4354-9bc2-d5fbfbc38e9a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Brickman", - "company": "Airdyne", - "phone": "844-591-2839", - "email": "genesis@airdyne.com" - }, - { - "id": 4126, - "guid": "1e139f6a-b691-439e-ac41-b010e556f7a6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Daniels", - "company": "Xeicon", - "phone": "801-443-3299", - "email": "alyssa@xeicon.com" - }, - { - "id": 4127, - "guid": "b547d8d1-912b-4084-b702-df000591ed9e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Goodman", - "company": "Keytheon", - "phone": "897-479-3286", - "email": "isabelle@keytheon.com" - }, - { - "id": 4128, - "guid": "61ecdbda-f514-4760-8f34-a92adf8611aa", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Morrison", - "company": "Anagraph", - "phone": "867-447-3726", - "email": "kayla@anagraph.com" - }, - { - "id": 4129, - "guid": "b48cca36-8b80-435e-b591-ea5a021f72d6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ava Sheldon", - "company": "Polytheon", - "phone": "845-480-3436", - "email": "ava@polytheon.com" - }, - { - "id": 4130, - "guid": "a6740bee-6237-4cad-9094-ace3e6a10d45", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Charlotte Otis", - "company": "Teraserv", - "phone": "870-590-2421", - "email": "charlotte@teraserv.com" - }, - { - "id": 4131, - "guid": "b28d66e7-a7ca-4568-90e4-a85a023577b7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Taylor Owen", - "company": "Xeicon", - "phone": "818-466-3744", - "email": "taylor@xeicon.com" - }, - { - "id": 4132, - "guid": "8cfa99e1-1fc0-4dba-9580-7e30456e6681", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Julia Miller", - "company": "Robotomic", - "phone": "892-465-3498", - "email": "julia@robotomic.com" - }, - { - "id": 4133, - "guid": "36549030-facc-4568-a143-e6de1ef6891a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lily Vance", - "company": "InfoAirway", - "phone": "851-481-2340", - "email": "lily@infoairway.com" - }, - { - "id": 4134, - "guid": "8f54de03-862b-421e-9f92-19428ddc6b30", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Gilmore", - "company": "eSteganoergy", - "phone": "810-481-3738", - "email": "zoey@esteganoergy.com" - }, - { - "id": 4135, - "guid": "e56bf0ef-bae8-4b9a-b573-1e40dbe88165", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Oldridge", - "company": "Mescaridic", - "phone": "897-567-2457", - "email": "paige@mescaridic.com" - }, - { - "id": 4136, - "guid": "7d0df797-1d86-475b-bbee-eb259d085df9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Fisher", - "company": "Titanirola", - "phone": "851-523-2989", - "email": "camila@titanirola.com" - }, - { - "id": 4137, - "guid": "79a8c1ed-c50b-4ffd-b67e-c5a82b43e44e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Otis", - "company": "Navivacs", - "phone": "839-445-2301", - "email": "brooke@navivacs.com" - }, - { - "id": 4138, - "guid": "2442b073-173b-4e96-a85b-ad3627177726", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Brown", - "company": "Systheon", - "phone": "891-565-2889", - "email": "bailey@systheon.com" - }, - { - "id": 4139, - "guid": "93d02c09-807a-4902-bcf8-98c4d7fbb153", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Gustman", - "company": "Superscope", - "phone": "838-420-3701", - "email": "olivia@superscope.com" - }, - { - "id": 4140, - "guid": "0ca102c7-9fbf-4244-b2e1-db6267cbec16", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Oldridge", - "company": "Multitiqua", - "phone": "840-462-3928", - "email": "bella@multitiqua.com" - }, - { - "id": 4141, - "guid": "50dc94a0-d040-46b5-ae6b-32df0a8a2ae5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Hardman", - "company": "Anaframe", - "phone": "848-425-3377", - "email": "madeline@anaframe.com" - }, - { - "id": 4142, - "guid": "bd3d8072-e209-43bb-9542-589684a64043", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jessica Miln", - "company": "Teraserv", - "phone": "847-512-3387", - "email": "jessica@teraserv.com" - }, - { - "id": 4143, - "guid": "3709d5fa-46dc-4b0d-a73f-da2bf7be9aae", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Gerald", - "company": "Thermotomic", - "phone": "819-485-3130", - "email": "paige@thermotomic.com" - }, - { - "id": 4144, - "guid": "f3966b95-3e59-4d26-aa42-abd3a8b56cf0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Thomson", - "company": "Westgate", - "phone": "849-502-3343", - "email": "kimberly@westgate.com" - }, - { - "id": 4145, - "guid": "f647502c-deea-45b2-9052-a593ee875b3a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Thorndike", - "company": "Anaframe", - "phone": "830-592-2788", - "email": "peyton@anaframe.com" - }, - { - "id": 4146, - "guid": "ffa0bc79-d8b7-4e95-869a-a01118fe9e97", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Fulton", - "company": "iOptystix", - "phone": "827-537-2491", - "email": "chloe@ioptystix.com" - }, - { - "id": 4147, - "guid": "da0e2c95-42a6-43c7-824d-5bdbdd763e5e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Conors", - "company": "Dynarama", - "phone": "846-545-3077", - "email": "ella@dynarama.com" - }, - { - "id": 4148, - "guid": "5d66f87e-af3b-4945-ae85-f152ac2791d3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Day", - "company": "Mescaridic", - "phone": "802-546-3875", - "email": "maria@mescaridic.com" - }, - { - "id": 4149, - "guid": "acf97e77-93d3-4f06-8b38-e7410ee69616", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Gibbs", - "company": "iSkyvaco", - "phone": "874-438-3972", - "email": "kylie@iskyvaco.com" - }, - { - "id": 4150, - "guid": "7dcf3a5e-b663-4953-815b-65f22de8a24a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison White", - "company": "Safeagra", - "phone": "848-490-2149", - "email": "madison@safeagra.com" - }, - { - "id": 4151, - "guid": "7b02ef6e-f5b3-4225-8e0a-b74a9a9f5d58", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Young", - "company": "Cryptotegrity", - "phone": "840-498-2551", - "email": "katherine@cryptotegrity.com" - }, - { - "id": 4152, - "guid": "b520c590-62b4-4319-a30b-0be6ed3682ee", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Wood", - "company": "Videobanc", - "phone": "858-463-2806", - "email": "brooke@videobanc.com" - }, - { - "id": 4153, - "guid": "03a5f2f1-075a-4eef-8f2c-02d1c000cb9a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Day", - "company": "Proline", - "phone": "848-537-3176", - "email": "melanie@proline.com" - }, - { - "id": 4154, - "guid": "6debf29b-25c0-4285-b650-cf0d0b9842b5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Warren", - "company": "Teraserv", - "phone": "870-413-3562", - "email": "caroline@teraserv.com" - }, - { - "id": 4155, - "guid": "f49f743b-0ff6-43e5-b873-0f2dbb9380bf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Charlson", - "company": "Navivacs", - "phone": "883-506-3061", - "email": "sydney@navivacs.com" - }, - { - "id": 4156, - "guid": "f1e7a408-9071-412e-b79b-a914036b2210", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Hardman", - "company": "Pericenta", - "phone": "837-568-3980", - "email": "paige@pericenta.com" - }, - { - "id": 4157, - "guid": "bb5b4b12-60b4-424b-b109-672698c9a1bf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Carrington", - "company": "Techtron", - "phone": "827-490-3555", - "email": "leah@techtron.com" - }, - { - "id": 4158, - "guid": "1152a9e6-8ac1-4d5b-9f6f-f4320b7b6ac1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Gate", - "company": "Unologic", - "phone": "845-436-3227", - "email": "anna@unologic.com" - }, - { - "id": 4159, - "guid": "17e329f3-0c1f-4b5d-9b24-0f716a7f6103", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Hawkins", - "company": "iSkyvaco", - "phone": "852-598-2994", - "email": "sarah@iskyvaco.com" - }, - { - "id": 4160, - "guid": "975b8e41-c311-4d8f-8fe3-201969ecba99", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Camila Wallace", - "company": "Westmedia", - "phone": "825-516-3735", - "email": "camila@westmedia.com" - }, - { - "id": 4161, - "guid": "54659240-eea0-49ab-8789-e9783f66a8cd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Autumn Carey", - "company": "Steganoconiche", - "phone": "879-521-3541", - "email": "autumn@steganoconiche.com" - }, - { - "id": 4162, - "guid": "932eff90-6f61-41f0-b8c7-b3412d8904b2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Miln", - "company": "Thermotomic", - "phone": "832-564-2940", - "email": "kimberly@thermotomic.com" - }, - { - "id": 4163, - "guid": "ac76723a-466f-4ff3-b213-fa426b1337d3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sydney Wallace", - "company": "Navivacs", - "phone": "841-495-3746", - "email": "sydney@navivacs.com" - }, - { - "id": 4164, - "guid": "d6b4b459-4d7d-4ad5-9a65-7859e0f5568e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lily Hancock", - "company": "Anagraph", - "phone": "890-447-3335", - "email": "lily@anagraph.com" - }, - { - "id": 4165, - "guid": "013f3ece-320c-4c3f-bd11-02c7d8ebcb71", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Carter", - "company": "iQualcar", - "phone": "847-569-3881", - "email": "zoe@iqualcar.com" - }, - { - "id": 4166, - "guid": "22c5a66a-19d1-423f-a0c2-241c58e0b975", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Campbell", - "company": "Truetomic", - "phone": "870-499-3709", - "email": "julia@truetomic.com" - }, - { - "id": 4167, - "guid": "046d4da9-c100-4722-a708-ae3fd97ff4ec", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Thornton", - "company": "Proline", - "phone": "824-460-2509", - "email": "trinity@proline.com" - }, - { - "id": 4168, - "guid": "ef87726b-c37e-480d-afc4-27f218299f8d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Thorndike", - "company": "Cryptotemplate", - "phone": "804-410-3036", - "email": "natalie@cryptotemplate.com" - }, - { - "id": 4169, - "guid": "4ceea92b-61cc-44f1-9bcf-7e5a083af388", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Hodges", - "company": "Unconix", - "phone": "899-447-3205", - "email": "genesis@unconix.com" - }, - { - "id": 4170, - "guid": "6dc8da53-2c47-4b61-90ce-63e5b9ac8fbe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Miln", - "company": "Celgra", - "phone": "816-507-2682", - "email": "mackenzie@celgra.com" - }, - { - "id": 4171, - "guid": "854546b7-d9f0-4278-ada5-89138bdd8748", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Timmons", - "company": "eSteganoergy", - "phone": "844-567-2007", - "email": "serenity@esteganoergy.com" - }, - { - "id": 4172, - "guid": "a3a1ce6e-7190-4c37-be38-f3a56cd0107a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Higgins", - "company": "iEnland", - "phone": "871-545-3419", - "email": "valeria@ienland.com" - }, - { - "id": 4173, - "guid": "04724663-9ba6-4e4a-80af-b8c2aa7e300e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Gardner", - "company": "Fibroserve", - "phone": "839-493-3829", - "email": "autumn@fibroserve.com" - }, - { - "id": 4174, - "guid": "8e7b07ec-e170-4c07-b481-e5e629a494cf", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Molligan", - "company": "Hypervaco", - "phone": "870-527-3734", - "email": "chloe@hypervaco.com" - }, - { - "id": 4175, - "guid": "0d1ab6b9-5147-4393-b974-c68f4a376eca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Sherlock", - "company": "Xeicon", - "phone": "886-526-3904", - "email": "mya@xeicon.com" - }, - { - "id": 4176, - "guid": "9df19417-7dad-4b19-a090-ddf45687a7a4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Croftoon", - "company": "Teratopia", - "phone": "838-493-2317", - "email": "savannah@teratopia.com" - }, - { - "id": 4177, - "guid": "77ebeaf6-2aea-48a3-8822-5972e81e9b9d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katherine Mercer", - "company": "Quintegrity", - "phone": "874-492-3955", - "email": "katherine@quintegrity.com" - }, - { - "id": 4178, - "guid": "c4a44417-7234-458d-a11c-6b178d6732cf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Sheldon", - "company": "Nanobanc", - "phone": "868-551-3925", - "email": "valeria@nanobanc.com" - }, - { - "id": 4179, - "guid": "056ec2f0-5019-4703-9f72-5eacb2825851", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Winter", - "company": "Mescaridic", - "phone": "859-501-3082", - "email": "natalie@mescaridic.com" - }, - { - "id": 4180, - "guid": "c593b91d-3845-48d9-96c2-d63dada6fa71", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Nelson", - "company": "Robotemplate", - "phone": "854-575-3694", - "email": "kayla@robotemplate.com" - }, - { - "id": 4181, - "guid": "9cb03a61-b61b-4654-aa5c-3ba9667f74d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Nelson", - "company": "OpKeycomm", - "phone": "808-506-3460", - "email": "emily@opkeycomm.com" - }, - { - "id": 4182, - "guid": "6c9860c6-7d3e-41f8-a187-ec32a83a455f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Wesley", - "company": "Technogra", - "phone": "823-446-2737", - "email": "zoey@technogra.com" - }, - { - "id": 4183, - "guid": "0e57d601-d1a9-469a-8de6-3e98509adb7b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Goodman", - "company": "Aluco", - "phone": "873-538-3308", - "email": "bella@aluco.com" - }, - { - "id": 4184, - "guid": "90d08bc1-5d28-47a2-b454-692ef8d2feef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Brickman", - "company": "Raylog", - "phone": "828-467-2278", - "email": "melanie@raylog.com" - }, - { - "id": 4185, - "guid": "6f20dcb2-2c96-420a-9422-345e07d633d7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Gilson", - "company": "Multitiqua", - "phone": "844-416-3415", - "email": "melanie@multitiqua.com" - }, - { - "id": 4186, - "guid": "39ef1cd0-4e48-492c-bb94-1a3ab5e50460", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Wood", - "company": "Unconix", - "phone": "843-583-2682", - "email": "eva@unconix.com" - }, - { - "id": 4187, - "guid": "6ab16617-7c4a-4b3d-b7d3-2c804468e94b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Brooks", - "company": "Orthomedia", - "phone": "833-512-2610", - "email": "leah@orthomedia.com" - }, - { - "id": 4188, - "guid": "39edc63f-7181-4b30-b52d-eb2648414f86", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Vance", - "company": "Steganoconiche", - "phone": "898-540-2158", - "email": "chloe@steganoconiche.com" - }, - { - "id": 4189, - "guid": "7d50adfc-9ce4-4900-a41a-1503e8f1e343", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Harrison", - "company": "Xeicon", - "phone": "887-474-2747", - "email": "hannah@xeicon.com" - }, - { - "id": 4190, - "guid": "07cdcfc2-4272-4c95-bbcb-712d779f1654", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Thornton", - "company": "Infragraph", - "phone": "822-588-3359", - "email": "ariana@infragraph.com" - }, - { - "id": 4191, - "guid": "82a81dfd-5845-433f-8224-0febbb15ea5b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Morrison", - "company": "Pericenta", - "phone": "884-568-2179", - "email": "katelyn@pericenta.com" - }, - { - "id": 4192, - "guid": "dc060e37-5d4a-4003-9e3c-8066916a3d81", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Goodman", - "company": "iOptystix", - "phone": "870-514-3018", - "email": "melanie@ioptystix.com" - }, - { - "id": 4193, - "guid": "194168cc-3f70-4131-a023-0ef772153590", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Morrison", - "company": "Superscope", - "phone": "897-583-2197", - "email": "angelina@superscope.com" - }, - { - "id": 4194, - "guid": "a2d2696a-7761-47d0-b3e2-bf83b32dca04", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Morrison", - "company": "Skydata", - "phone": "898-532-3025", - "email": "valeria@skydata.com" - }, - { - "id": 4195, - "guid": "46654ae4-7b5c-4f5c-b12f-7d8e0d261a0b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Sherlock", - "company": "Titanigraf", - "phone": "824-459-2733", - "email": "caroline@titanigraf.com" - }, - { - "id": 4196, - "guid": "1d96918a-3f54-4644-8e7e-571645c21fdf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Hawkins", - "company": "Fibroserve", - "phone": "870-431-3142", - "email": "angelina@fibroserve.com" - }, - { - "id": 4197, - "guid": "bc5fe72a-5fb4-4a96-9507-e8184e82e050", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Smith", - "company": "Titanigraf", - "phone": "800-435-2832", - "email": "evelyn@titanigraf.com" - }, - { - "id": 4198, - "guid": "6195d411-e0fc-4704-ac79-2c676b8ea19a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Gilmore", - "company": "Fibrotouch", - "phone": "805-506-3337", - "email": "serenity@fibrotouch.com" - }, - { - "id": 4199, - "guid": "26ee7700-a658-4ee7-a3fa-a0753bd03e0e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooklyn Conors", - "company": "SysVenamerica", - "phone": "854-522-3952", - "email": "brooklyn@sysvenamerica.com" - }, - { - "id": 4200, - "guid": "c9911dbc-e614-4929-866f-e821a0f89c0d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Hawkins", - "company": "Enlogia", - "phone": "895-577-2948", - "email": "mya@enlogia.com" - }, - { - "id": 4201, - "guid": "2ebef270-86a6-4a0c-a80b-d91d987b97b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Amelia Owen", - "company": "Inridium", - "phone": "872-599-3620", - "email": "amelia@inridium.com" - }, - { - "id": 4202, - "guid": "ddc64f55-7ddb-4097-a992-e918fa69a0a3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Young", - "company": "Airdyne", - "phone": "874-467-2425", - "email": "hailey@airdyne.com" - }, - { - "id": 4203, - "guid": "3070ed06-639e-48f9-ac42-b1f48c9f2919", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Galbraith", - "company": "Fibroserve", - "phone": "879-591-2535", - "email": "autumn@fibroserve.com" - }, - { - "id": 4204, - "guid": "557d325c-369d-43a4-96f2-5d7403082fbb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Conors", - "company": "US Infratouch", - "phone": "838-540-3372", - "email": "alexandra@us infratouch.com" - }, - { - "id": 4205, - "guid": "de38cc86-00c4-477b-b84c-07e176fa994c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Ogden", - "company": "Venconix", - "phone": "841-475-3409", - "email": "alexandra@venconix.com" - }, - { - "id": 4206, - "guid": "53598d9a-4bb0-4f83-9d48-6e2853d09837", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Waller", - "company": "Inridium", - "phone": "807-416-3966", - "email": "savannah@inridium.com" - }, - { - "id": 4207, - "guid": "91c312dc-d0b5-4f82-9e24-29be53c229b0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Hoggarth", - "company": "iOptystix", - "phone": "814-441-3535", - "email": "lauren@ioptystix.com" - }, - { - "id": 4208, - "guid": "59ab3719-9df7-4416-979d-4b10865550b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Youmans", - "company": "Dynarama", - "phone": "890-440-3592", - "email": "maya@dynarama.com" - }, - { - "id": 4209, - "guid": "8cdcdcc2-a099-4337-abba-0b2c477f21c3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Murphy", - "company": "Tekcar", - "phone": "826-530-2815", - "email": "ashley@tekcar.com" - }, - { - "id": 4210, - "guid": "bcb54d48-880d-4aeb-9ed2-325aed311455", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Freeman", - "company": "Fibrotouch", - "phone": "878-521-2588", - "email": "valeria@fibrotouch.com" - }, - { - "id": 4211, - "guid": "0c9a105a-9fce-445e-841f-4dc33baf2154", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Gardner", - "company": "Thermotomic", - "phone": "803-465-3693", - "email": "angelina@thermotomic.com" - }, - { - "id": 4212, - "guid": "28cb215e-388e-4972-8121-7e7db20805b7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Smith", - "company": "Qualserve", - "phone": "813-431-2905", - "email": "serenity@qualserve.com" - }, - { - "id": 4213, - "guid": "b6b7cae8-8f31-49e7-9c12-e06f9da3b885", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Clapton", - "company": "Textiqua", - "phone": "842-500-2564", - "email": "emma@textiqua.com" - }, - { - "id": 4214, - "guid": "3b3d576d-debb-40dc-84e7-04312b446ef3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Nelson", - "company": "Aluco", - "phone": "877-505-3460", - "email": "chloe@aluco.com" - }, - { - "id": 4215, - "guid": "9fb98ba0-138b-4de2-ba94-b6242e3b44dc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Mercer", - "company": "Multitiqua", - "phone": "869-600-2676", - "email": "destiny@multitiqua.com" - }, - { - "id": 4216, - "guid": "91946380-bd70-46ae-ab3e-6ed3c542a85e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Thomson", - "company": "Polytheon", - "phone": "841-574-3786", - "email": "riley@polytheon.com" - }, - { - "id": 4217, - "guid": "0fa14b12-a90c-424a-8c4f-5886e099ed31", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Oliver", - "company": "Proline", - "phone": "898-449-2443", - "email": "madeline@proline.com" - }, - { - "id": 4218, - "guid": "e2b19546-6cd9-443c-8bb0-182c0e25e6e0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Brown", - "company": "Entcast", - "phone": "820-566-2624", - "email": "hailey@entcast.com" - }, - { - "id": 4219, - "guid": "8cf2abbf-49a8-4bca-bed9-7b700db56d54", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Carter", - "company": "Venconix", - "phone": "812-567-2334", - "email": "kaylee@venconix.com" - }, - { - "id": 4220, - "guid": "9c5d9262-706c-4fde-beb5-f44df1078dff", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Gate", - "company": "Safetrust", - "phone": "862-562-2029", - "email": "mackenzie@safetrust.com" - }, - { - "id": 4221, - "guid": "dc468170-e956-47e9-87fb-4528a8cfa0e1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Mercer", - "company": "Fibrotopia", - "phone": "839-404-3499", - "email": "allison@fibrotopia.com" - }, - { - "id": 4222, - "guid": "35048a0b-5427-4de7-8f33-64f63f6cab4d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Warren", - "company": "US Omnigraphik", - "phone": "809-490-3339", - "email": "maya@us omnigraphik.com" - }, - { - "id": 4223, - "guid": "a24f4bee-c9a0-4a06-944a-25588ad093ee", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Osborne", - "company": "Truetomic", - "phone": "861-448-2487", - "email": "zoey@truetomic.com" - }, - { - "id": 4224, - "guid": "f61bb862-72e7-4244-bc2d-d4f2d28372c8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Cramer", - "company": "Conotomics", - "phone": "892-481-3851", - "email": "jocelyn@conotomics.com" - }, - { - "id": 4225, - "guid": "704dccf8-38df-4f41-a229-e796be3f0b21", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Chesterton", - "company": "Venconix", - "phone": "852-499-2691", - "email": "bailey@venconix.com" - }, - { - "id": 4226, - "guid": "bbc156d4-7ccd-4e18-bca2-073204bd3b8e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Carrington", - "company": "Navivacs", - "phone": "846-435-3634", - "email": "paige@navivacs.com" - }, - { - "id": 4227, - "guid": "9f48eea1-5b0b-44a3-bc31-7009bc18a778", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Wainwright", - "company": "Robotomic", - "phone": "815-507-3011", - "email": "layla@robotomic.com" - }, - { - "id": 4228, - "guid": "70ceaec2-d770-44a3-9aa6-b0051203d5e6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Hoggarth", - "company": "Polytheon", - "phone": "856-465-2959", - "email": "destiny@polytheon.com" - }, - { - "id": 4229, - "guid": "7c91dc6e-0354-46d3-b270-cd3ee965264d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Addison Oldridge", - "company": "Raylog", - "phone": "860-436-2799", - "email": "addison@raylog.com" - }, - { - "id": 4230, - "guid": "296e9ffb-abae-4f9e-a7b3-bcc9559fbc5c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katherine Nathan", - "company": "Netseco", - "phone": "818-560-3253", - "email": "katherine@netseco.com" - }, - { - "id": 4231, - "guid": "c3c399bd-45d9-46d5-9ee6-f6cd1639afb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Miller", - "company": "Steganoconiche", - "phone": "851-495-3836", - "email": "andrea@steganoconiche.com" - }, - { - "id": 4232, - "guid": "0d34765f-8fe6-4a38-a1da-b28033af3005", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Nelson", - "company": "eEyetanic", - "phone": "873-508-2758", - "email": "maya@eeyetanic.com" - }, - { - "id": 4233, - "guid": "c472fc3b-38b0-47d9-95da-db2d2dd846a9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ashley Winter", - "company": "Enlogia", - "phone": "811-570-2602", - "email": "ashley@enlogia.com" - }, - { - "id": 4234, - "guid": "3c69dd87-c292-4d52-bca1-0d078a239b51", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Miln", - "company": "Sontopia", - "phone": "893-586-2524", - "email": "charlotte@sontopia.com" - }, - { - "id": 4235, - "guid": "f5aa59ad-dc74-4adf-a48f-77c26afae557", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Stanley", - "company": "Interliant", - "phone": "832-562-2764", - "email": "valeria@interliant.com" - }, - { - "id": 4236, - "guid": "93343fae-9a68-4001-ad0a-66cadd9c99f9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Nelson", - "company": "US Infratouch", - "phone": "877-494-3213", - "email": "zoey@us infratouch.com" - }, - { - "id": 4237, - "guid": "cbeed46f-bbb4-4a01-abbd-8109a55de8d5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Chandter", - "company": "Truegate", - "phone": "854-419-2873", - "email": "kaylee@truegate.com" - }, - { - "id": 4238, - "guid": "cf1cc9a1-59c4-4718-ba61-5056e5e0cc3c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Morrison", - "company": "Robocomm", - "phone": "833-460-3225", - "email": "leah@robocomm.com" - }, - { - "id": 4239, - "guid": "64bf3141-f9ab-469c-a614-2d9d32b64c84", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Brooks", - "company": "Allphysiche", - "phone": "888-550-3433", - "email": "makayla@allphysiche.com" - }, - { - "id": 4240, - "guid": "50914982-b272-4974-8313-971235abab9f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Oldman", - "company": "Cryptotemplate", - "phone": "804-472-3064", - "email": "abigail@cryptotemplate.com" - }, - { - "id": 4241, - "guid": "eccef245-fd11-4cf1-bafc-21a25e0dedc8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Gilbert", - "company": "Aluco", - "phone": "860-403-3519", - "email": "maya@aluco.com" - }, - { - "id": 4242, - "guid": "b2aea37d-cc56-41a5-8a8c-74de025568cc", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Paige Bush", - "company": "Openserve", - "phone": "860-460-2124", - "email": "paige@openserve.com" - }, - { - "id": 4243, - "guid": "989e01f1-e305-474e-a320-cd1486a6e931", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Owen", - "company": "Dynarama", - "phone": "820-597-2036", - "email": "amelia@dynarama.com" - }, - { - "id": 4244, - "guid": "972973e1-0d6f-4923-821b-3c0af49a128e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Watson", - "company": "Syssoft", - "phone": "874-478-3439", - "email": "peyton@syssoft.com" - }, - { - "id": 4245, - "guid": "2dc220ab-c409-48f9-a864-22f43aec7c6c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Crossman", - "company": "Openserve", - "phone": "881-591-2441", - "email": "angelina@openserve.com" - }, - { - "id": 4246, - "guid": "33f6f036-c3ef-4564-8cf0-616b56253128", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Freeman", - "company": "Navivacs", - "phone": "847-466-3796", - "email": "maria@navivacs.com" - }, - { - "id": 4247, - "guid": "29982c63-8133-401c-b4a5-b44a08d9de5b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Nelson", - "company": "Mescatron", - "phone": "849-558-3650", - "email": "maya@mescatron.com" - }, - { - "id": 4248, - "guid": "7b26121a-c4e5-48d4-9704-281dbd4faa5d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lily Chandter", - "company": "Vencom", - "phone": "852-522-2782", - "email": "lily@vencom.com" - }, - { - "id": 4249, - "guid": "1a02ecfc-c014-4125-8321-5c7c76f91da2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Higgins", - "company": "Tekcar", - "phone": "868-551-3093", - "email": "audrey@tekcar.com" - }, - { - "id": 4250, - "guid": "7fdc7e38-656c-4e35-8d58-396e34b2f03c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Stanley", - "company": "Aluco", - "phone": "834-473-2031", - "email": "alyssa@aluco.com" - }, - { - "id": 4251, - "guid": "e1afdaf2-b547-4af9-b7fe-b97e275ddee6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Hailey", - "company": "Compuamerica", - "phone": "865-570-2607", - "email": "sophia@compuamerica.com" - }, - { - "id": 4252, - "guid": "f3938e92-2ff5-4101-9a0c-fa41ae678afc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Samantha Brown", - "company": "Unconix", - "phone": "879-452-3370", - "email": "samantha@unconix.com" - }, - { - "id": 4253, - "guid": "3c0f5ac6-8759-41d2-bc53-c2d41cfcb118", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Thomson", - "company": "Robotemplate", - "phone": "855-519-3431", - "email": "charlotte@robotemplate.com" - }, - { - "id": 4254, - "guid": "fbe1433b-fc43-41f3-ae8e-e6ba24d2d8f2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Wesley", - "company": "Anaframe", - "phone": "892-581-3427", - "email": "alyssa@anaframe.com" - }, - { - "id": 4255, - "guid": "4e929fc1-26c6-46b2-8e66-571c272aadfc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Hodges", - "company": "Teknoplexon", - "phone": "829-423-3991", - "email": "makayla@teknoplexon.com" - }, - { - "id": 4256, - "guid": "2572ff48-be21-4978-95dd-e2969dc69c99", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Gustman", - "company": "eSteganoergy", - "phone": "801-474-3773", - "email": "genesis@esteganoergy.com" - }, - { - "id": 4257, - "guid": "1452c108-5313-4274-88fb-016cc961ed7d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Murphy", - "company": "Navivacs", - "phone": "871-536-2923", - "email": "madeline@navivacs.com" - }, - { - "id": 4258, - "guid": "0b937004-2ba4-4d8a-af94-0f98a8716293", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Brooks", - "company": "Techtron", - "phone": "857-515-3103", - "email": "lillian@techtron.com" - }, - { - "id": 4259, - "guid": "2561ceeb-5929-4406-9702-d3f78c68f002", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Hoggarth", - "company": "Qualserve", - "phone": "803-537-3139", - "email": "emily@qualserve.com" - }, - { - "id": 4260, - "guid": "a4e5a2f8-caa1-4481-9c68-95ca34093428", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Miln", - "company": "Allnet", - "phone": "821-508-3231", - "email": "abigail@allnet.com" - }, - { - "id": 4261, - "guid": "23ced2a6-219a-4eb4-83b6-58b08848ab85", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Conors", - "company": "Celgra", - "phone": "841-443-2070", - "email": "evelyn@celgra.com" - }, - { - "id": 4262, - "guid": "9ec45801-6729-4fce-a769-a7f6714f6f73", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Murphy", - "company": "iSkyvaco", - "phone": "800-509-2525", - "email": "victoria@iskyvaco.com" - }, - { - "id": 4263, - "guid": "3012c4b7-054d-4d31-84dd-0faaa8313e8d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Waller", - "company": "Dynarama", - "phone": "847-422-2644", - "email": "charlotte@dynarama.com" - }, - { - "id": 4264, - "guid": "79628750-f13e-40f6-bfd9-ce6ae6802010", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Turner", - "company": "Techtron", - "phone": "833-403-2787", - "email": "ashley@techtron.com" - }, - { - "id": 4265, - "guid": "cc402f7a-ee5b-473b-b6ae-d3a011ee07a7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Hoggarth", - "company": "Technogra", - "phone": "882-531-2171", - "email": "mariah@technogra.com" - }, - { - "id": 4266, - "guid": "4b8d8a80-ee49-4ac1-90eb-fbb699dca030", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Molligan", - "company": "Orthomedia", - "phone": "807-589-2528", - "email": "eva@orthomedia.com" - }, - { - "id": 4267, - "guid": "b8696269-da03-46f1-812c-09464ea75d3e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Youmans", - "company": "Conotomics", - "phone": "871-496-2056", - "email": "mariah@conotomics.com" - }, - { - "id": 4268, - "guid": "e21fc682-ba4b-4e32-a8ce-2d3d56b1a4d2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Conors", - "company": "Genland", - "phone": "855-568-3502", - "email": "ashley@genland.com" - }, - { - "id": 4269, - "guid": "8fd1be84-9150-4638-bf04-91c5471fa6bf", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooklyn Nash", - "company": "Navivacs", - "phone": "872-508-3457", - "email": "brooklyn@navivacs.com" - }, - { - "id": 4270, - "guid": "288cc69f-e6e2-4f48-a6b7-2a24b89b7cc3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Cook", - "company": "Systheon", - "phone": "864-565-2829", - "email": "riley@systheon.com" - }, - { - "id": 4271, - "guid": "50c9fca7-c357-4780-b454-6f32eefabd98", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mya Young", - "company": "Teratopia", - "phone": "890-495-2523", - "email": "mya@teratopia.com" - }, - { - "id": 4272, - "guid": "e40a9677-388e-469e-8ede-9bff9f81adfe", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bella Oldridge", - "company": "Robotomic", - "phone": "856-587-3411", - "email": "bella@robotomic.com" - }, - { - "id": 4273, - "guid": "ba402da9-0223-48bb-b530-b1eb44948b74", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Goldman", - "company": "iMedconik", - "phone": "876-424-2266", - "email": "khloe@imedconik.com" - }, - { - "id": 4274, - "guid": "d2b9eff8-5e26-4aaa-805b-6224f5420c5b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Calhoun", - "company": "iSkyvaco", - "phone": "820-589-3461", - "email": "faith@iskyvaco.com" - }, - { - "id": 4275, - "guid": "bf71601a-b8b9-4a6f-9dfa-c61b6c718c3e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Freeman", - "company": "Proline", - "phone": "808-513-2918", - "email": "aaliyah@proline.com" - }, - { - "id": 4276, - "guid": "99b7d255-2293-4d7c-8892-2fb40e729149", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava Thorndike", - "company": "Venconix", - "phone": "894-464-3236", - "email": "ava@venconix.com" - }, - { - "id": 4277, - "guid": "a632f02c-9d5d-4154-9f63-11b39cabc7b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Wood", - "company": "Teraserv", - "phone": "877-515-3974", - "email": "gabrielle@teraserv.com" - }, - { - "id": 4278, - "guid": "cb49df6d-0392-45f8-b85b-d3cc7e711469", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Nathan", - "company": "RoboAerlogix", - "phone": "807-433-2716", - "email": "trinity@roboaerlogix.com" - }, - { - "id": 4279, - "guid": "c2ce5c2e-11dd-4eef-8c40-73ce20e69bd3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Gate", - "company": "Anaframe", - "phone": "869-481-2657", - "email": "samantha@anaframe.com" - }, - { - "id": 4280, - "guid": "2b670d54-f531-4f0c-9b0d-600e4e40890c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Abramson", - "company": "Jamconik", - "phone": "838-416-2715", - "email": "ashley@jamconik.com" - }, - { - "id": 4281, - "guid": "07c817d6-fb91-499e-9911-fbe9077a4ac5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella White", - "company": "Mescatron", - "phone": "849-479-3040", - "email": "isabella@mescatron.com" - }, - { - "id": 4282, - "guid": "95d0f5c0-6fa0-42ba-8744-a50fa6ea6f5a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sarah Hawkins", - "company": "Teknoplexon", - "phone": "801-573-2473", - "email": "sarah@teknoplexon.com" - }, - { - "id": 4283, - "guid": "a895ab7b-c0d7-487c-84ba-0d50bf9661e7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Daniels", - "company": "Indisco", - "phone": "831-533-2819", - "email": "evelyn@indisco.com" - }, - { - "id": 4284, - "guid": "419f9bd9-ca1d-4591-a861-5b6131e1bd72", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Miller", - "company": "Westtomik", - "phone": "893-509-3011", - "email": "gianna@westtomik.com" - }, - { - "id": 4285, - "guid": "40e06744-a136-4945-a92b-9d1336220df2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Timmons", - "company": "Cryptotemplate", - "phone": "853-531-3110", - "email": "angelina@cryptotemplate.com" - }, - { - "id": 4286, - "guid": "5f44aad7-1b3d-48be-8780-cd5d242884fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Creighton", - "company": "Quintegrity", - "phone": "897-506-2192", - "email": "melanie@quintegrity.com" - }, - { - "id": 4287, - "guid": "b84f3dc0-31b3-484f-b1c1-690b0f1e047f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Gilson", - "company": "Technogra", - "phone": "804-524-3910", - "email": "alyssa@technogra.com" - }, - { - "id": 4288, - "guid": "e1e208c0-fcc9-43e4-9168-111194d7e8de", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Carter", - "company": "Anaframe", - "phone": "856-519-2560", - "email": "alexis@anaframe.com" - }, - { - "id": 4289, - "guid": "3a76965c-2351-4a67-87e9-249682cfeaaf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Goodman", - "company": "Truetomic", - "phone": "867-599-3486", - "email": "bailey@truetomic.com" - }, - { - "id": 4290, - "guid": "73e92913-5646-442a-8093-f037fa52340f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine Freeman", - "company": "Openserve", - "phone": "860-414-2714", - "email": "jasmine@openserve.com" - }, - { - "id": 4291, - "guid": "df49ffde-c1c6-4a04-aabc-8531a825d3a3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sydney Cramer", - "company": "Robotemplate", - "phone": "828-462-3935", - "email": "sydney@robotemplate.com" - }, - { - "id": 4292, - "guid": "c3f52a25-b67b-4d47-83c8-a27b21297a91", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Walkman", - "company": "Generola", - "phone": "855-467-3370", - "email": "caroline@generola.com" - }, - { - "id": 4293, - "guid": "2fc16b41-61b0-4f6a-bb84-e99a9a75e058", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Mercer", - "company": "Systheon", - "phone": "825-440-3357", - "email": "sarah@systheon.com" - }, - { - "id": 4294, - "guid": "9dfd14c5-3ae2-47a9-9cb9-7a1dde671663", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Gilson", - "company": "InfoAirway", - "phone": "852-517-3907", - "email": "bella@infoairway.com" - }, - { - "id": 4295, - "guid": "c06ee2f2-be41-41bb-972d-180710ac1e13", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Abramson", - "company": "Anagraph", - "phone": "889-488-3607", - "email": "nevaeh@anagraph.com" - }, - { - "id": 4296, - "guid": "c8ee0574-25e8-4f89-992c-4ef78f2c7fa3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Hardman", - "company": "Jamrola", - "phone": "888-589-3482", - "email": "maya@jamrola.com" - }, - { - "id": 4297, - "guid": "bb9fcb2a-6d2f-4387-8633-1b0e19888036", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Vaughan", - "company": "Quintegrity", - "phone": "850-460-3403", - "email": "autumn@quintegrity.com" - }, - { - "id": 4298, - "guid": "2573ebc2-3baa-4fbc-ad6f-6a69d10c703d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Goodman", - "company": "Jamconik", - "phone": "859-486-3168", - "email": "katelyn@jamconik.com" - }, - { - "id": 4299, - "guid": "60ba2f65-aa4f-4a0a-ae1f-edbd18f18532", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Goldman", - "company": "Systheon", - "phone": "839-465-2205", - "email": "faith@systheon.com" - }, - { - "id": 4300, - "guid": "2ca6db28-6028-4d98-8c0d-f1bb533407ad", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Wayne", - "company": "Westmedia", - "phone": "815-503-3673", - "email": "allison@westmedia.com" - }, - { - "id": 4301, - "guid": "1328175b-3881-4f84-a47f-ae437d8cec01", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Bush", - "company": "Robocomm", - "phone": "810-479-3207", - "email": "faith@robocomm.com" - }, - { - "id": 4302, - "guid": "dcc5913f-388c-4b76-81f5-17147bc82ac7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Galbraith", - "company": "SysVenamerica", - "phone": "801-522-3546", - "email": "olivia@sysvenamerica.com" - }, - { - "id": 4303, - "guid": "b4b90280-450d-41b8-a27a-e19a1e433732", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Taylor Gilmore", - "company": "Titanigraf", - "phone": "833-528-2813", - "email": "taylor@titanigraf.com" - }, - { - "id": 4304, - "guid": "ece4cc48-94d6-47db-9f4e-176580e3f1ea", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Anna Morrison", - "company": "Keytheon", - "phone": "871-450-2340", - "email": "anna@keytheon.com" - }, - { - "id": 4305, - "guid": "ba565861-8670-4292-8b0d-ca0749c88c0b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Vance", - "company": "Navivacs", - "phone": "886-571-3951", - "email": "kimberly@navivacs.com" - }, - { - "id": 4306, - "guid": "b143ebca-7d71-439d-923a-24948de9782c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Hardman", - "company": "Polytheon", - "phone": "872-550-2359", - "email": "mackenzie@polytheon.com" - }, - { - "id": 4307, - "guid": "730708f6-37f9-41e0-aa0e-69c6eb31e555", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Timmons", - "company": "Navivacs", - "phone": "829-419-2925", - "email": "autumn@navivacs.com" - }, - { - "id": 4308, - "guid": "14b23ad2-303a-4974-a572-10a9d6e725fd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Cook", - "company": "Sontopia", - "phone": "851-454-2837", - "email": "madelyn@sontopia.com" - }, - { - "id": 4309, - "guid": "4b708f5d-78c2-4181-b31a-701d26475645", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Cramer", - "company": "Superscope", - "phone": "884-410-3060", - "email": "gianna@superscope.com" - }, - { - "id": 4310, - "guid": "62441bf8-4031-4a7c-ac3c-951bbfe701ec", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Creighton", - "company": "Unologic", - "phone": "885-429-2956", - "email": "bella@unologic.com" - }, - { - "id": 4311, - "guid": "f8cfe0eb-c0d9-4278-9f45-4c67ecd81b3f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Gilbert", - "company": "Keytheon", - "phone": "820-407-3885", - "email": "charlotte@keytheon.com" - }, - { - "id": 4312, - "guid": "e5852419-9a73-4c74-b2be-9758e1ab251c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maya Youmans", - "company": "Ameritron", - "phone": "857-424-3833", - "email": "maya@ameritron.com" - }, - { - "id": 4313, - "guid": "883e2a19-b4a9-405d-b9b6-0e09ec4967ca", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Watson", - "company": "Syssoft", - "phone": "883-424-3424", - "email": "lillian@syssoft.com" - }, - { - "id": 4314, - "guid": "a244a9a1-8fb4-40ed-a70b-1e508ee79146", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Vaughan", - "company": "Westtomik", - "phone": "812-539-2677", - "email": "elizabeth@westtomik.com" - }, - { - "id": 4315, - "guid": "922f861d-2eee-44d1-a073-6f86b734091c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Galbraith", - "company": "Westtomik", - "phone": "878-410-2686", - "email": "melanie@westtomik.com" - }, - { - "id": 4316, - "guid": "0da5002f-bf2c-4e9e-86dd-0c5d187252ae", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Sheldon", - "company": "Raylog", - "phone": "869-510-3612", - "email": "anna@raylog.com" - }, - { - "id": 4317, - "guid": "c82de87c-35f6-4ae6-8930-84086bcf8837", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Thorndike", - "company": "Teratopia", - "phone": "843-466-2823", - "email": "brooke@teratopia.com" - }, - { - "id": 4318, - "guid": "c9d1cf17-4340-4e31-aa6b-d92910c9d85a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ella Abramson", - "company": "Robotomic", - "phone": "847-576-2774", - "email": "ella@robotomic.com" - }, - { - "id": 4319, - "guid": "fb37308f-25f0-4858-a530-3a23fefe58f6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Murphy", - "company": "Airdyne", - "phone": "815-492-3394", - "email": "bailey@airdyne.com" - }, - { - "id": 4320, - "guid": "1f70e22b-6367-4904-b12e-d3563ba48d1b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Brooks", - "company": "Skydata", - "phone": "838-451-3627", - "email": "victoria@skydata.com" - }, - { - "id": 4321, - "guid": "90aecd5b-fe39-4065-a228-fabd38665bc1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Creighton", - "company": "Titanigraf", - "phone": "807-487-2675", - "email": "maria@titanigraf.com" - }, - { - "id": 4322, - "guid": "09981d62-2dcf-4661-8886-859c072f8fe1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Gilson", - "company": "Dynarama", - "phone": "893-491-3425", - "email": "lily@dynarama.com" - }, - { - "id": 4323, - "guid": "1f5c3181-7fce-424b-8d4a-f6368bef68d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Nathan", - "company": "SysUSA", - "phone": "883-537-2507", - "email": "taylor@sysusa.com" - }, - { - "id": 4324, - "guid": "62820dcc-d822-4127-9206-950d0798fcc5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Thorndike", - "company": "Mescaridic", - "phone": "838-503-3731", - "email": "ava@mescaridic.com" - }, - { - "id": 4325, - "guid": "57506984-cde0-4e3a-9b28-5288ec1d65b4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Thorndike", - "company": "Transtouch", - "phone": "897-440-2059", - "email": "aubrey@transtouch.com" - }, - { - "id": 4326, - "guid": "90fb46ee-e98d-4dee-a06a-d6c0cc6ff782", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ava Miln", - "company": "Mescatron", - "phone": "825-507-2527", - "email": "ava@mescatron.com" - }, - { - "id": 4327, - "guid": "06b0ff5c-6c8b-445c-ba73-19fef8d50ab5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kylie Davidson", - "company": "iQualcar", - "phone": "830-491-3583", - "email": "kylie@iqualcar.com" - }, - { - "id": 4328, - "guid": "97d3ae7e-0529-434a-a16e-5c209c9aa9f8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Freeman", - "company": "SysUSA", - "phone": "801-404-3955", - "email": "payton@sysusa.com" - }, - { - "id": 4329, - "guid": "12057d1b-eceb-4bcc-a290-bf0c2a819b79", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Daniels", - "company": "Idmax", - "phone": "828-533-2568", - "email": "angelina@idmax.com" - }, - { - "id": 4330, - "guid": "ba9bd67e-4ddd-438e-901c-42d9d4252a19", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Otis", - "company": "Raylog", - "phone": "812-507-3731", - "email": "anna@raylog.com" - }, - { - "id": 4331, - "guid": "335526ea-1ab1-4376-86bf-6c97859a1739", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Croftoon", - "company": "Aluco", - "phone": "856-506-3188", - "email": "makayla@aluco.com" - }, - { - "id": 4332, - "guid": "b7a27152-543f-4520-8947-37346c2ed4f0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexandra Youmans", - "company": "Westtomik", - "phone": "886-598-3915", - "email": "alexandra@westtomik.com" - }, - { - "id": 4333, - "guid": "2d6576ae-06f1-46b3-9622-da2d42aa2bfe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Cramer", - "company": "Systheon", - "phone": "857-522-3430", - "email": "zoey@systheon.com" - }, - { - "id": 4334, - "guid": "4d2bb0b2-6400-41c9-a46b-47b2314c86e6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Wayne", - "company": "iSkyvaco", - "phone": "861-551-2627", - "email": "maria@iskyvaco.com" - }, - { - "id": 4335, - "guid": "1b1d8633-9958-41ee-94a2-16c30ce689e6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Bush", - "company": "Anagraph", - "phone": "872-423-2229", - "email": "zoe@anagraph.com" - }, - { - "id": 4336, - "guid": "3493f2f0-282d-4d0d-8e23-cde849da235e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Abramson", - "company": "Conotomics", - "phone": "865-598-3787", - "email": "aaliyah@conotomics.com" - }, - { - "id": 4337, - "guid": "a8ae4fb8-7eca-4517-aaa6-410cb68b4294", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Wood", - "company": "Nanobanc", - "phone": "807-503-2919", - "email": "molly@nanobanc.com" - }, - { - "id": 4338, - "guid": "e0c565f3-d93e-472a-91d9-47139367290a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Peyton Turner", - "company": "Truegate", - "phone": "836-419-3345", - "email": "peyton@truegate.com" - }, - { - "id": 4339, - "guid": "e672e8f1-8832-4647-9bfd-675d034a3c26", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Wood", - "company": "Navivacs", - "phone": "842-501-3791", - "email": "chloe@navivacs.com" - }, - { - "id": 4340, - "guid": "7885b4d3-49aa-4d20-8ad3-4e23ef9e7553", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Fulton", - "company": "Techtron", - "phone": "856-535-2513", - "email": "destiny@techtron.com" - }, - { - "id": 4341, - "guid": "2b6b445f-be32-493b-a7c7-26ad3aaab633", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Owen", - "company": "Allnet", - "phone": "861-489-3221", - "email": "isabelle@allnet.com" - }, - { - "id": 4342, - "guid": "c6084f09-6161-4b13-8206-e7270894cd31", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Faith Carrington", - "company": "Polytheon", - "phone": "867-571-3729", - "email": "faith@polytheon.com" - }, - { - "id": 4343, - "guid": "856373e0-cf8d-4cf4-961d-8f7423028bbf", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooke Galbraith", - "company": "Anagraph", - "phone": "856-479-2342", - "email": "brooke@anagraph.com" - }, - { - "id": 4344, - "guid": "0bf950c7-cd60-42b2-b505-11be634a7584", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sofia Wesley", - "company": "Qualserve", - "phone": "860-415-2825", - "email": "sofia@qualserve.com" - }, - { - "id": 4345, - "guid": "e37b04a5-b927-4fae-a8ef-cb76f58d533f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Sherlock", - "company": "Enlogia", - "phone": "892-475-3439", - "email": "claire@enlogia.com" - }, - { - "id": 4346, - "guid": "a3950a47-1ef9-4ba7-8ad3-3c2ca77af63a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Goldman", - "company": "Cryptotegrity", - "phone": "840-424-2627", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 4347, - "guid": "fb204352-4c8c-4de6-95fe-26dc57a08895", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jessica Freeman", - "company": "Qualserve", - "phone": "890-414-2823", - "email": "jessica@qualserve.com" - }, - { - "id": 4348, - "guid": "44954272-7815-4778-bb2d-aa8c479ba85d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Mercer", - "company": "Technogra", - "phone": "842-482-2215", - "email": "mackenzie@technogra.com" - }, - { - "id": 4349, - "guid": "343bd6a8-093f-4b13-8b99-9decb09fddc1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Wood", - "company": "Fibroserve", - "phone": "858-424-2070", - "email": "gabriella@fibroserve.com" - }, - { - "id": 4350, - "guid": "d759acb7-2054-486a-8dfe-69a5256132f4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Owen", - "company": "Airdyne", - "phone": "820-467-2396", - "email": "layla@airdyne.com" - }, - { - "id": 4351, - "guid": "29b8eb73-70eb-42aa-b130-67f68dad69c4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Ward", - "company": "Interliant", - "phone": "850-555-3592", - "email": "alexa@interliant.com" - }, - { - "id": 4352, - "guid": "916d7ef4-6159-49d5-956f-c3357e23547f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Gate", - "company": "US Infratouch", - "phone": "867-474-3540", - "email": "kaitlyn@us infratouch.com" - }, - { - "id": 4353, - "guid": "1ca3fd71-d8ae-436b-8b69-3bc0844ab586", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Hoggarth", - "company": "Truegate", - "phone": "894-476-3432", - "email": "brooklyn@truegate.com" - }, - { - "id": 4354, - "guid": "59e110ef-9985-4226-926f-e679693396f2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Gardner", - "company": "Titanirola", - "phone": "810-489-3194", - "email": "bella@titanirola.com" - }, - { - "id": 4355, - "guid": "862428d7-3204-4fd7-be43-5afb15ce7366", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madeline Chapman", - "company": "Nanobanc", - "phone": "805-431-2397", - "email": "madeline@nanobanc.com" - }, - { - "id": 4356, - "guid": "01f8da99-e84f-4bf8-81e5-9c4a1c4560a3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Murphy", - "company": "Westmedia", - "phone": "883-423-3267", - "email": "samantha@westmedia.com" - }, - { - "id": 4357, - "guid": "7e68169c-7e2e-4558-969e-1538b645a041", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Carter", - "company": "Cryptotemplate", - "phone": "869-578-2147", - "email": "camila@cryptotemplate.com" - }, - { - "id": 4358, - "guid": "76d0ee1c-f84f-4769-9c78-a61230c17f0d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Gill", - "company": "Pericenta", - "phone": "813-591-2641", - "email": "angelina@pericenta.com" - }, - { - "id": 4359, - "guid": "63274f98-c2cc-4371-a50e-2d1c45362d46", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Miller", - "company": "Infraique", - "phone": "861-581-2613", - "email": "claire@infraique.com" - }, - { - "id": 4360, - "guid": "90f2e321-2a68-4f3f-9d12-b100ffafc218", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Hodges", - "company": "Westmedia", - "phone": "803-431-3550", - "email": "camila@westmedia.com" - }, - { - "id": 4361, - "guid": "04b7c092-3062-4291-9c6a-3902280c5ac7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Milton", - "company": "Thermotomic", - "phone": "855-455-2325", - "email": "hannah@thermotomic.com" - }, - { - "id": 4362, - "guid": "628c393d-8be3-4df3-b200-b91dacee4b1a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Nash", - "company": "Fibrotouch", - "phone": "868-533-2200", - "email": "autumn@fibrotouch.com" - }, - { - "id": 4363, - "guid": "5ca77312-e6d3-4431-9c17-4f8a1eacd3bf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Webster", - "company": "Cryptotegrity", - "phone": "845-462-3044", - "email": "lillian@cryptotegrity.com" - }, - { - "id": 4364, - "guid": "b59930a1-dd0b-4155-8cb1-b4b5fcde6c39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emily Freeman", - "company": "iOptystix", - "phone": "834-451-3130", - "email": "emily@ioptystix.com" - }, - { - "id": 4365, - "guid": "3a57fc80-06c1-4842-a14c-97d392517e95", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Haig", - "company": "Safetrust", - "phone": "891-599-2022", - "email": "alyssa@safetrust.com" - }, - { - "id": 4366, - "guid": "080bd1f4-ed59-4938-9ede-466043221caa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Gilbert", - "company": "US Infratouch", - "phone": "850-403-2631", - "email": "zoey@us infratouch.com" - }, - { - "id": 4367, - "guid": "d794861a-f89d-4e51-a4b3-3fa2ec2245b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Hodges", - "company": "eEyetanic", - "phone": "845-427-3744", - "email": "emma@eeyetanic.com" - }, - { - "id": 4368, - "guid": "291afe2f-22fc-4b2f-8a9a-bb9e046a94ad", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Hawkins", - "company": "RoboAerlogix", - "phone": "898-483-2542", - "email": "layla@roboaerlogix.com" - }, - { - "id": 4369, - "guid": "b970777e-a354-4046-9474-c948108b8c47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Ogden", - "company": "Titanirola", - "phone": "834-419-2416", - "email": "chloe@titanirola.com" - }, - { - "id": 4370, - "guid": "f5c494c0-232e-4cfc-ae65-18ed271a2bd1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Natalie Wesley", - "company": "Skydata", - "phone": "870-568-2053", - "email": "natalie@skydata.com" - }, - { - "id": 4371, - "guid": "49701a63-f6a2-47f0-afbd-1d40d5fc1b00", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Wayne", - "company": "US Omnigraphik", - "phone": "889-519-3177", - "email": "lily@us omnigraphik.com" - }, - { - "id": 4372, - "guid": "6c8885e8-3adb-4878-b2ef-c69952de176e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Leah Wallace", - "company": "Conrama", - "phone": "889-484-3392", - "email": "leah@conrama.com" - }, - { - "id": 4373, - "guid": "cf2f64d4-ad8a-4e2c-b26c-2fc3de6701c1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Michaelson", - "company": "Pacwest", - "phone": "811-535-2984", - "email": "isabella@pacwest.com" - }, - { - "id": 4374, - "guid": "ce99a718-a17d-4317-9f18-0185a89713a0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Thomson", - "company": "Safetrust", - "phone": "871-529-3976", - "email": "abigail@safetrust.com" - }, - { - "id": 4375, - "guid": "4f56fd72-5a92-4f4d-b3c0-294526bd0f59", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Cook", - "company": "Teraserv", - "phone": "833-511-2215", - "email": "sophie@teraserv.com" - }, - { - "id": 4376, - "guid": "61b29b36-e6a2-4a11-8fe9-bae3e11b4766", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Waller", - "company": "Conotomics", - "phone": "888-580-2300", - "email": "ella@conotomics.com" - }, - { - "id": 4377, - "guid": "fe6439ff-2ac3-4338-83b0-5b07e438510d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Sherlock", - "company": "Skydata", - "phone": "853-459-3348", - "email": "isabelle@skydata.com" - }, - { - "id": 4378, - "guid": "60decdcf-19b9-45f8-89f4-6344b7db9815", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Daniels", - "company": "Generola", - "phone": "882-529-3644", - "email": "charlotte@generola.com" - }, - { - "id": 4379, - "guid": "b0665f0f-b65a-4b58-8f96-2d8919590429", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Gustman", - "company": "iEnland", - "phone": "832-431-3671", - "email": "mia@ienland.com" - }, - { - "id": 4380, - "guid": "88b73bc5-3075-43e7-aeb8-1d989160dbe0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Turner", - "company": "Navivacs", - "phone": "860-441-2604", - "email": "bella@navivacs.com" - }, - { - "id": 4381, - "guid": "63ef9454-6d1f-4efb-9bc7-411dcafd66e7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Cook", - "company": "Ventanium", - "phone": "858-458-3072", - "email": "avery@ventanium.com" - }, - { - "id": 4382, - "guid": "6a629264-6a73-46ae-8764-630e5d4c84cd", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Turner", - "company": "Steganoconiche", - "phone": "866-571-3024", - "email": "maya@steganoconiche.com" - }, - { - "id": 4383, - "guid": "5a1cfdcb-1b55-4a24-93a3-c998bfa0c80c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Waller", - "company": "Pericenta", - "phone": "802-494-3128", - "email": "kayla@pericenta.com" - }, - { - "id": 4384, - "guid": "528ac214-f10f-4cee-a3c2-f2fba7543bca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Gerald", - "company": "Polytheon", - "phone": "802-490-2322", - "email": "layla@polytheon.com" - }, - { - "id": 4385, - "guid": "3acaa4eb-69a4-47e3-8dee-b40c2cc68a8a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Chesterton", - "company": "Aluco", - "phone": "806-596-3053", - "email": "valeria@aluco.com" - }, - { - "id": 4386, - "guid": "14197765-cf50-4568-bc36-95f434d1e488", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Gill", - "company": "Robotomic", - "phone": "828-476-2338", - "email": "jessica@robotomic.com" - }, - { - "id": 4387, - "guid": "1353f73e-8270-4ac3-b20e-6e1ea8525f5e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Michaelson", - "company": "US Omnigraphik", - "phone": "882-401-2071", - "email": "molly@us omnigraphik.com" - }, - { - "id": 4388, - "guid": "cc910548-f8fc-4a49-b10a-06faa316a085", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Carey", - "company": "Netseco", - "phone": "835-480-2498", - "email": "maya@netseco.com" - }, - { - "id": 4389, - "guid": "b874ffef-3f67-413b-b780-03898a11f31d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Calhoun", - "company": "Openserve", - "phone": "849-595-2335", - "email": "riley@openserve.com" - }, - { - "id": 4390, - "guid": "d856b43d-4457-43a9-bd7e-c5fbecae5ef6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Haig", - "company": "Robocomm", - "phone": "872-405-2075", - "email": "katherine@robocomm.com" - }, - { - "id": 4391, - "guid": "be942f81-0135-4bb2-b653-2e71c7bea946", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Bush", - "company": "Westmedia", - "phone": "859-594-2073", - "email": "faith@westmedia.com" - }, - { - "id": 4392, - "guid": "e77ad8c0-91d2-433d-8fc3-51ee177b6e48", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sofia Charlson", - "company": "Safeagra", - "phone": "881-552-2134", - "email": "sofia@safeagra.com" - }, - { - "id": 4393, - "guid": "05855d4b-ad76-4f53-bba9-d51b3569afa0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Gibbs", - "company": "Proline", - "phone": "884-507-2378", - "email": "destiny@proline.com" - }, - { - "id": 4394, - "guid": "415ff04a-ea44-49f4-b1ab-bf9b0adba7f9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Goodman", - "company": "Proline", - "phone": "885-449-2901", - "email": "alexis@proline.com" - }, - { - "id": 4395, - "guid": "b8898c9e-ecab-40ea-a020-b3ed93ea8377", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Haig", - "company": "US Infratouch", - "phone": "890-403-3555", - "email": "kayla@us infratouch.com" - }, - { - "id": 4396, - "guid": "289e790c-8035-465c-9b1e-45b862615348", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Charlson", - "company": "Enlogia", - "phone": "853-401-3127", - "email": "destiny@enlogia.com" - }, - { - "id": 4397, - "guid": "51d866b9-83a2-48d1-be91-78d839782bd1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Cook", - "company": "Dynarama", - "phone": "848-510-2280", - "email": "vanessa@dynarama.com" - }, - { - "id": 4398, - "guid": "c49e044a-1e0e-49a3-85ee-231d2a1c375b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Gill", - "company": "Westmedia", - "phone": "884-400-3791", - "email": "lillian@westmedia.com" - }, - { - "id": 4399, - "guid": "66e0f196-0eea-4c93-b90e-85b7141268e1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Hodges", - "company": "Airdyne", - "phone": "877-586-2381", - "email": "julia@airdyne.com" - }, - { - "id": 4400, - "guid": "5db18039-6e86-4bcf-bc46-d1359b11bf74", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Miln", - "company": "Fibrotouch", - "phone": "823-503-3036", - "email": "molly@fibrotouch.com" - }, - { - "id": 4401, - "guid": "c61658d2-20d8-431d-873a-1821236e2ac5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Cook", - "company": "iOptystix", - "phone": "844-418-2257", - "email": "melanie@ioptystix.com" - }, - { - "id": 4402, - "guid": "13409189-600e-4ae3-a4ee-1696de94c9ed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Freeman", - "company": "iOptystix", - "phone": "812-529-2356", - "email": "valeria@ioptystix.com" - }, - { - "id": 4403, - "guid": "99d41cbc-f654-4dff-b021-8e153705a8f8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Higgins", - "company": "Superscope", - "phone": "877-595-2666", - "email": "sofia@superscope.com" - }, - { - "id": 4404, - "guid": "d53eed9d-3798-46f4-b35d-e5db624d02c3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Youmans", - "company": "Jamrola", - "phone": "855-451-2786", - "email": "brianna@jamrola.com" - }, - { - "id": 4405, - "guid": "ae235198-f080-4aa2-a066-96c46274ef43", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Abramson", - "company": "Titanirola", - "phone": "893-527-2036", - "email": "mia@titanirola.com" - }, - { - "id": 4406, - "guid": "27f04ee5-20e0-4cb0-b445-ae9e6e1297eb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Leah Chapman", - "company": "Quintegrity", - "phone": "844-593-2787", - "email": "leah@quintegrity.com" - }, - { - "id": 4407, - "guid": "a3ab5562-9475-4f7f-918a-4b9d564935fc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis White", - "company": "Interliant", - "phone": "842-473-2960", - "email": "alexis@interliant.com" - }, - { - "id": 4408, - "guid": "62066d45-a892-459d-a0c5-a2eaef2518be", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Davidson", - "company": "iEnland", - "phone": "833-533-3295", - "email": "serenity@ienland.com" - }, - { - "id": 4409, - "guid": "230a333c-9159-4ecb-bec4-1a93ff65720d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Ogden", - "company": "Transtouch", - "phone": "846-594-3648", - "email": "kylie@transtouch.com" - }, - { - "id": 4410, - "guid": "6587d7cb-78cf-4126-ac29-883c0abf7ca0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Abigail Croftoon", - "company": "Orthomedia", - "phone": "849-539-2901", - "email": "abigail@orthomedia.com" - }, - { - "id": 4411, - "guid": "9f3217d9-a194-48dc-bbd6-c352735f168b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Walkman", - "company": "Navivacs", - "phone": "818-595-3446", - "email": "rachel@navivacs.com" - }, - { - "id": 4412, - "guid": "97cfcda8-73a8-40d7-9505-c99a9314c54c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lillian Chandter", - "company": "Hypervaco", - "phone": "891-583-2386", - "email": "lillian@hypervaco.com" - }, - { - "id": 4413, - "guid": "a7aa5dfd-639a-49a1-b678-c1ad75bbc8eb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Nash", - "company": "Aluco", - "phone": "827-465-2530", - "email": "addison@aluco.com" - }, - { - "id": 4414, - "guid": "9a60846a-bd5d-4713-9c91-38deaf496bc2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie Hawkins", - "company": "Tekcar", - "phone": "826-484-2114", - "email": "natalie@tekcar.com" - }, - { - "id": 4415, - "guid": "186e0473-cec4-4481-a325-378170a64fb7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Hardman", - "company": "Teknoplexon", - "phone": "833-450-2165", - "email": "emma@teknoplexon.com" - }, - { - "id": 4416, - "guid": "3251449c-dd37-4b0a-b1ba-0b3d1a1529eb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Neal", - "company": "Westmedia", - "phone": "814-534-3291", - "email": "madison@westmedia.com" - }, - { - "id": 4417, - "guid": "1bb45acb-20d7-411c-8c82-787f4c3e154e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Thorndike", - "company": "Transtouch", - "phone": "884-489-2795", - "email": "katelyn@transtouch.com" - }, - { - "id": 4418, - "guid": "8ef71e12-c0f3-429f-840d-a5297248b90d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Victoria Oldridge", - "company": "Ameritron", - "phone": "829-586-3526", - "email": "victoria@ameritron.com" - }, - { - "id": 4419, - "guid": "b518ff24-209b-43f2-b51f-48becc769e65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Vance", - "company": "Rapigrafix", - "phone": "830-516-3037", - "email": "abigail@rapigrafix.com" - }, - { - "id": 4420, - "guid": "789a447b-5a74-4264-be27-9c34a877038f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Gilson", - "company": "eSteganoergy", - "phone": "844-552-2086", - "email": "anna@esteganoergy.com" - }, - { - "id": 4421, - "guid": "2b80395a-ed8f-41eb-9379-fdcf029f1797", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Winter", - "company": "OpKeycomm", - "phone": "840-595-3199", - "email": "jessica@opkeycomm.com" - }, - { - "id": 4422, - "guid": "828bca38-1e36-4373-aa1d-96959e702589", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Osborne", - "company": "Westtomik", - "phone": "879-525-3567", - "email": "hannah@westtomik.com" - }, - { - "id": 4423, - "guid": "fe2bcb61-76ed-4b40-8616-1250848457c1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Freeman", - "company": "iSkyvaco", - "phone": "849-498-2983", - "email": "jessica@iskyvaco.com" - }, - { - "id": 4424, - "guid": "c150ce7e-f63e-4ef2-b73c-e5afd54a6e04", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexandra Nash", - "company": "OpKeycomm", - "phone": "891-513-2314", - "email": "alexandra@opkeycomm.com" - }, - { - "id": 4425, - "guid": "481731f9-d171-4559-b563-2163b45f6284", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Davidson", - "company": "US Infratouch", - "phone": "807-520-3533", - "email": "aaliyah@us infratouch.com" - }, - { - "id": 4426, - "guid": "d98cd435-6324-4eb1-9919-044b1badd3d5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Hardman", - "company": "Orthosoft", - "phone": "888-509-3701", - "email": "vanessa@orthosoft.com" - }, - { - "id": 4427, - "guid": "27f6aad0-3368-43fa-8e41-1dcf1fd24264", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brianna Charlson", - "company": "Raylog", - "phone": "819-417-3358", - "email": "brianna@raylog.com" - }, - { - "id": 4428, - "guid": "6f906585-cb2a-4bf9-9b54-d3c7398ca676", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Hancock", - "company": "Anaframe", - "phone": "856-421-2951", - "email": "andrea@anaframe.com" - }, - { - "id": 4429, - "guid": "b067364d-a8a0-4964-a724-af2e5309e87b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Brickman", - "company": "Conrama", - "phone": "853-407-2339", - "email": "victoria@conrama.com" - }, - { - "id": 4430, - "guid": "4a500aee-b694-4ef8-a4b3-93ec69e365cf", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Nathan", - "company": "Xeicon", - "phone": "850-547-3458", - "email": "grace@xeicon.com" - }, - { - "id": 4431, - "guid": "4b2e91dc-556d-4bf4-8267-d862ca5eb0ca", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Conors", - "company": "Safetrust", - "phone": "892-441-2887", - "email": "gianna@safetrust.com" - }, - { - "id": 4432, - "guid": "e68ea3dc-67cb-41e7-a3e7-af58b92c9f42", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Cramer", - "company": "Vencom", - "phone": "850-472-3558", - "email": "gianna@vencom.com" - }, - { - "id": 4433, - "guid": "ed50b73d-4e60-4230-b32c-084f81f20f89", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Wallace", - "company": "Sontopia", - "phone": "886-518-2828", - "email": "maria@sontopia.com" - }, - { - "id": 4434, - "guid": "fb9c6ae7-22a8-4ec3-807d-9c632e8addd1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Wainwright", - "company": "Polytheon", - "phone": "896-411-2685", - "email": "hailey@polytheon.com" - }, - { - "id": 4435, - "guid": "2af39da5-dbfd-4852-8fcc-ac8225f2615e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Wayne", - "company": "Proline", - "phone": "849-593-2324", - "email": "evelyn@proline.com" - }, - { - "id": 4436, - "guid": "00afd9d2-34ee-4ca3-9233-9483dbc56120", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ariana Otis", - "company": "Anaframe", - "phone": "805-470-3437", - "email": "ariana@anaframe.com" - }, - { - "id": 4437, - "guid": "4c1ea6a7-2ce1-4d91-9f7c-98f21f7c14e6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooke Gill", - "company": "Polytheon", - "phone": "825-536-2208", - "email": "brooke@polytheon.com" - }, - { - "id": 4438, - "guid": "081257d3-1866-4304-8b8a-626e6cd9fe37", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Crossman", - "company": "Teratopia", - "phone": "835-441-2492", - "email": "melanie@teratopia.com" - }, - { - "id": 4439, - "guid": "e8022e99-2f67-4fe6-961f-0e4bba7ddc3a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria White", - "company": "iEnland", - "phone": "851-580-3201", - "email": "victoria@ienland.com" - }, - { - "id": 4440, - "guid": "6821c7f7-a9fb-4617-b30f-31ebd7e24358", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madeline Goodman", - "company": "US Infratouch", - "phone": "826-576-3997", - "email": "madeline@us infratouch.com" - }, - { - "id": 4441, - "guid": "b26dfbf9-548d-4c82-b5ae-835a9495bf6b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Thorndike", - "company": "Transtouch", - "phone": "811-548-3066", - "email": "emma@transtouch.com" - }, - { - "id": 4442, - "guid": "5a39854b-3a88-4c0a-8383-a5585e244d19", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Gilmore", - "company": "Mescatron", - "phone": "860-503-3646", - "email": "arianna@mescatron.com" - }, - { - "id": 4443, - "guid": "c6839191-44b0-41b5-b1ea-f006513ff4a0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aaliyah Goldman", - "company": "Westmedia", - "phone": "870-514-2948", - "email": "aaliyah@westmedia.com" - }, - { - "id": 4444, - "guid": "477b65a7-251a-4a16-86eb-3509c300c2f4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Makayla Morrison", - "company": "Robotemplate", - "phone": "861-449-2388", - "email": "makayla@robotemplate.com" - }, - { - "id": 4445, - "guid": "8b54c86b-c118-442e-b361-7812389c46d0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea White", - "company": "eSteganoergy", - "phone": "834-528-3398", - "email": "andrea@esteganoergy.com" - }, - { - "id": 4446, - "guid": "dec4486e-c1a8-4e3d-baac-31571d9c23c4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sarah Creighton", - "company": "Skydata", - "phone": "807-482-3196", - "email": "sarah@skydata.com" - }, - { - "id": 4447, - "guid": "6d5754a7-6028-4cbb-8271-6bf0479b5e7a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Crossman", - "company": "iEnland", - "phone": "891-457-2442", - "email": "charlotte@ienland.com" - }, - { - "id": 4448, - "guid": "f3eed885-797c-4de3-ab89-2f12c0842071", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Brooks", - "company": "Inridium", - "phone": "846-427-2988", - "email": "vanessa@inridium.com" - }, - { - "id": 4449, - "guid": "28a87680-5290-4b7f-8514-aab915a57f22", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Natalie Cramer", - "company": "Enlogia", - "phone": "857-521-3492", - "email": "natalie@enlogia.com" - }, - { - "id": 4450, - "guid": "0373e0ac-c71a-4d9e-a2a6-b9071f34a23c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Brooks", - "company": "Steganoconiche", - "phone": "810-404-2287", - "email": "kylie@steganoconiche.com" - }, - { - "id": 4451, - "guid": "df84e758-7bca-4e2f-bb52-bcd8059e47be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Chapman", - "company": "Transtouch", - "phone": "823-460-3817", - "email": "melanie@transtouch.com" - }, - { - "id": 4452, - "guid": "2f22eb19-1cb7-4588-8bda-475456da313a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava WifKinson", - "company": "eSteganoergy", - "phone": "885-519-2508", - "email": "ava@esteganoergy.com" - }, - { - "id": 4453, - "guid": "9ad3b8f6-5d71-4f35-8fae-7e77c13f5756", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Campbell", - "company": "iOptystix", - "phone": "883-476-2258", - "email": "caroline@ioptystix.com" - }, - { - "id": 4454, - "guid": "e2471f3c-23fc-48db-845f-5222416cd8d1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Fisher", - "company": "Unologic", - "phone": "859-585-3577", - "email": "kimberly@unologic.com" - }, - { - "id": 4455, - "guid": "414cc7c2-6391-487b-9f62-c07c8a5b796c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Brooks", - "company": "Generola", - "phone": "826-431-3527", - "email": "rachel@generola.com" - }, - { - "id": 4456, - "guid": "2489471a-c22a-42d1-a32d-e679274740a7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Conors", - "company": "Proline", - "phone": "874-508-2504", - "email": "ella@proline.com" - }, - { - "id": 4457, - "guid": "6fd1998a-3b2f-4f5b-b010-13ccaf3008a5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Wayne", - "company": "Mescatron", - "phone": "844-401-2313", - "email": "destiny@mescatron.com" - }, - { - "id": 4458, - "guid": "34a7e86a-2c79-4031-a648-5cd3fa3e9c88", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Owen", - "company": "Titanirola", - "phone": "859-501-3113", - "email": "trinity@titanirola.com" - }, - { - "id": 4459, - "guid": "629050bd-1a0e-4b1e-906a-ddb847fe1149", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Freeman", - "company": "Genland", - "phone": "833-564-2600", - "email": "gabrielle@genland.com" - }, - { - "id": 4460, - "guid": "a2186950-e517-42b7-a6bb-293bff8456d4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Carey", - "company": "Gigaura", - "phone": "834-531-2677", - "email": "layla@gigaura.com" - }, - { - "id": 4461, - "guid": "65d87b5b-4d6d-44da-92d5-4ec356977c10", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Harrison", - "company": "Jamrola", - "phone": "887-450-2318", - "email": "madelyn@jamrola.com" - }, - { - "id": 4462, - "guid": "a0cb907e-ff1b-420e-ac6d-2b94aa067a4e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie Goldman", - "company": "Skydata", - "phone": "820-403-3648", - "email": "natalie@skydata.com" - }, - { - "id": 4463, - "guid": "67dfc3d9-2681-4b9f-88ab-ed77820963a8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Gilmore", - "company": "Nanobanc", - "phone": "888-570-2327", - "email": "savannah@nanobanc.com" - }, - { - "id": 4464, - "guid": "4abdc81b-041a-40e3-a61b-2a30190321be", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Campbell", - "company": "Nanobanc", - "phone": "884-402-3203", - "email": "zoe@nanobanc.com" - }, - { - "id": 4465, - "guid": "d749ecd5-4ad2-4c2c-bf6b-124cac8e829c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Milton", - "company": "Steganoconiche", - "phone": "836-478-3687", - "email": "camila@steganoconiche.com" - }, - { - "id": 4466, - "guid": "5060e66f-c0e5-4622-a5f3-89f5e6efebf0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Gilbert", - "company": "Teknoplexon", - "phone": "848-491-2979", - "email": "grace@teknoplexon.com" - }, - { - "id": 4467, - "guid": "89b97feb-b058-4137-a1c5-3f528da2da7a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Hancock", - "company": "Genland", - "phone": "867-410-3389", - "email": "elizabeth@genland.com" - }, - { - "id": 4468, - "guid": "d05dd078-57da-4005-aa0a-fb5dba71500e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Miller", - "company": "Xeicon", - "phone": "807-597-2168", - "email": "leah@xeicon.com" - }, - { - "id": 4469, - "guid": "2e16476f-bf7f-43dd-9cac-5c0d652f5934", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Conors", - "company": "InfoAirway", - "phone": "877-511-2068", - "email": "sofia@infoairway.com" - }, - { - "id": 4470, - "guid": "580d86b0-f56c-4b27-9f6a-017ecc651c78", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Hoggarth", - "company": "eSteganoergy", - "phone": "875-498-3635", - "email": "ariana@esteganoergy.com" - }, - { - "id": 4471, - "guid": "c3bf8da7-d7ed-4016-bbb3-5f1c2ac2d602", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Brooks", - "company": "Gigaura", - "phone": "879-467-3401", - "email": "olivia@gigaura.com" - }, - { - "id": 4472, - "guid": "5c8b976b-d010-4733-84d2-c930e256927d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Miers", - "company": "Allphysiche", - "phone": "895-534-2500", - "email": "zoe@allphysiche.com" - }, - { - "id": 4473, - "guid": "3c9a8b5d-cb78-44a7-a74d-7e0a679e50b3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mackenzie Oldridge", - "company": "Allphysiche", - "phone": "846-515-3299", - "email": "mackenzie@allphysiche.com" - }, - { - "id": 4474, - "guid": "8f75df90-7f4a-4842-8e37-dd39df6569bb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Molly Daniels", - "company": "Pericenta", - "phone": "814-569-3431", - "email": "molly@pericenta.com" - }, - { - "id": 4475, - "guid": "70f2491b-1de5-4c54-a922-c9a56c5da838", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bella Gerald", - "company": "Unologic", - "phone": "868-600-2501", - "email": "bella@unologic.com" - }, - { - "id": 4476, - "guid": "4bf1a4c7-be64-4fed-8843-82aeca22c32d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Gilmore", - "company": "Turbomart", - "phone": "886-581-2920", - "email": "kaitlyn@turbomart.com" - }, - { - "id": 4477, - "guid": "705ddc0d-9ccf-48a3-9e45-47e58db07870", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Goodman", - "company": "Rapigrafix", - "phone": "806-509-3594", - "email": "hailey@rapigrafix.com" - }, - { - "id": 4478, - "guid": "8a9ef410-3bb3-4290-8912-179764cd68b1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Clapton", - "company": "Celgra", - "phone": "843-405-2947", - "email": "grace@celgra.com" - }, - { - "id": 4479, - "guid": "a0aeb80d-314a-416f-bfda-0b6e53ae4f33", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Rachel Charlson", - "company": "Robotomic", - "phone": "866-451-3066", - "email": "rachel@robotomic.com" - }, - { - "id": 4480, - "guid": "c2f0612a-56c3-4047-a6da-0d60b7374bbb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Creighton", - "company": "Keytheon", - "phone": "801-501-3224", - "email": "jessica@keytheon.com" - }, - { - "id": 4481, - "guid": "94a27cda-1537-428c-baa4-539ccd936caa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Thomson", - "company": "Generola", - "phone": "813-489-2693", - "email": "kaitlyn@generola.com" - }, - { - "id": 4482, - "guid": "0324ee13-ebd6-4aff-b1d3-abc04be31ed3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Brooks", - "company": "Safetrust", - "phone": "853-450-3438", - "email": "madeline@safetrust.com" - }, - { - "id": 4483, - "guid": "48aae915-2187-489c-953f-6e9f4b14093b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Grace Croftoon", - "company": "Compuamerica", - "phone": "844-462-2900", - "email": "grace@compuamerica.com" - }, - { - "id": 4484, - "guid": "6a4a4691-d729-46c6-a671-1d2cd02b3fa6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Freeman", - "company": "Gigaura", - "phone": "828-401-2506", - "email": "leah@gigaura.com" - }, - { - "id": 4485, - "guid": "e0de3a6d-5242-4add-94c0-eb3375d411e0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny Adamson", - "company": "Thermotomic", - "phone": "874-426-3369", - "email": "destiny@thermotomic.com" - }, - { - "id": 4486, - "guid": "ec91a3f6-58a1-4ca5-959b-617fc2e90315", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Miller", - "company": "eEyetanic", - "phone": "849-453-3810", - "email": "alexa@eeyetanic.com" - }, - { - "id": 4487, - "guid": "bc259200-d667-4a02-96dc-7629623da022", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Oldridge", - "company": "Hypervaco", - "phone": "877-523-2810", - "email": "ava@hypervaco.com" - }, - { - "id": 4488, - "guid": "38900d30-96dd-486e-8dfb-e60aca14bbf8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Wallace", - "company": "SysUSA", - "phone": "875-498-3625", - "email": "andrea@sysusa.com" - }, - { - "id": 4489, - "guid": "fb0d3fbc-5fa6-44fd-8101-7faa8390b3d2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Nathan", - "company": "Steganoconiche", - "phone": "851-532-2223", - "email": "sophie@steganoconiche.com" - }, - { - "id": 4490, - "guid": "f13c9490-afc8-4de9-bdfc-de7beb2fcac0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Wayne", - "company": "iSkyvaco", - "phone": "827-416-2877", - "email": "molly@iskyvaco.com" - }, - { - "id": 4491, - "guid": "2be5b647-9ced-4f63-be53-09c245b36d4e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Day", - "company": "Orthosoft", - "phone": "892-419-2937", - "email": "molly@orthosoft.com" - }, - { - "id": 4492, - "guid": "258c466a-c18f-4f23-bdf4-a3627103ada9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Chapman", - "company": "Enlogia", - "phone": "881-487-3568", - "email": "sarah@enlogia.com" - }, - { - "id": 4493, - "guid": "c1a9f9b7-8fea-432d-ab12-fe5a5ac60a86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Morrison", - "company": "eSteganoergy", - "phone": "811-507-2929", - "email": "brooke@esteganoergy.com" - }, - { - "id": 4494, - "guid": "2b1336e4-549f-4a16-954d-685418b4fc47", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Murphy", - "company": "Turbomart", - "phone": "821-532-3878", - "email": "natalie@turbomart.com" - }, - { - "id": 4495, - "guid": "97d47c03-9eb9-45f9-baf3-ca262d3f6bef", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Watson", - "company": "RoboAerlogix", - "phone": "869-460-2734", - "email": "kaylee@roboaerlogix.com" - }, - { - "id": 4496, - "guid": "f603f521-506c-4169-bc3e-a5cac58904a3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Miers", - "company": "iOptystix", - "phone": "874-546-2778", - "email": "sarah@ioptystix.com" - }, - { - "id": 4497, - "guid": "cb723ae1-855f-466c-9740-1b771ea89f01", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Thomson", - "company": "Compuamerica", - "phone": "879-400-2483", - "email": "arianna@compuamerica.com" - }, - { - "id": 4498, - "guid": "e2f81e85-d845-49a0-85af-179007e4c62b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Gill", - "company": "eEyetanic", - "phone": "880-466-2644", - "email": "sophie@eeyetanic.com" - }, - { - "id": 4499, - "guid": "1e519bce-8938-43bf-8f72-e1671973d77c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Sherlock", - "company": "Jamconik", - "phone": "861-423-2913", - "email": "ava@jamconik.com" - }, - { - "id": 4500, - "guid": "028d79c2-c28f-4372-9685-75bc6fa54bde", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Wesley", - "company": "Teknoplexon", - "phone": "841-501-2531", - "email": "layla@teknoplexon.com" - }, - { - "id": 4501, - "guid": "857d6881-2a09-41e5-b71f-b02de45c71a5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Higgins", - "company": "Robotomic", - "phone": "845-507-3920", - "email": "gianna@robotomic.com" - }, - { - "id": 4502, - "guid": "619fbfb2-4a10-4b78-a62a-e405030c3159", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Higgins", - "company": "Truegate", - "phone": "878-576-3641", - "email": "riley@truegate.com" - }, - { - "id": 4503, - "guid": "5a7e3d87-79d7-4836-963c-4ab71085fdf8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Hamphrey", - "company": "SysUSA", - "phone": "848-529-2528", - "email": "vanessa@sysusa.com" - }, - { - "id": 4504, - "guid": "19e30992-6dda-492b-bf11-459482b5067b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mya Molligan", - "company": "InfoAirway", - "phone": "889-500-2385", - "email": "mya@infoairway.com" - }, - { - "id": 4505, - "guid": "99c456d3-fd85-44c2-a5d2-be6257262fd5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Ward", - "company": "Pericenta", - "phone": "877-495-2341", - "email": "madeline@pericenta.com" - }, - { - "id": 4506, - "guid": "6cb3732b-4f4a-4618-a222-1ad3f7453477", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Miln", - "company": "Jamrola", - "phone": "822-539-2487", - "email": "julia@jamrola.com" - }, - { - "id": 4507, - "guid": "b31f5e3c-df31-441e-89b9-717b12f1979e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katherine Chesterton", - "company": "Jamconik", - "phone": "824-448-3694", - "email": "katherine@jamconik.com" - }, - { - "id": 4508, - "guid": "8011f110-467e-46cf-877f-90a67661132d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Hawkins", - "company": "Safeagra", - "phone": "863-450-2462", - "email": "khloe@safeagra.com" - }, - { - "id": 4509, - "guid": "6e859333-97bb-40e2-936d-033ec93364c6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Freeman", - "company": "Steganoconiche", - "phone": "804-481-3329", - "email": "kaylee@steganoconiche.com" - }, - { - "id": 4510, - "guid": "a75c85c2-0757-45ff-99d6-e658335953e1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophie Hancock", - "company": "Systheon", - "phone": "811-523-3003", - "email": "sophie@systheon.com" - }, - { - "id": 4511, - "guid": "c2faafbb-a5ce-49b5-9f83-5ad9daa35d8c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Fisher", - "company": "Mescaridic", - "phone": "807-509-3973", - "email": "serenity@mescaridic.com" - }, - { - "id": 4512, - "guid": "e921371b-9a46-4902-ba39-0f52c5e0a334", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Mercer", - "company": "Ameritron", - "phone": "879-441-3015", - "email": "alexa@ameritron.com" - }, - { - "id": 4513, - "guid": "8ad98968-c115-4d23-9a40-6e881df10cf4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Carter", - "company": "Turbomart", - "phone": "844-579-2771", - "email": "bailey@turbomart.com" - }, - { - "id": 4514, - "guid": "2bf6d234-657e-4963-b910-004c6a409b4c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Wallace", - "company": "Unconix", - "phone": "861-411-2481", - "email": "paige@unconix.com" - }, - { - "id": 4515, - "guid": "e9895456-b76f-4b3f-bc7e-5d355b851972", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Charlson", - "company": "Vencom", - "phone": "862-456-3933", - "email": "kaylee@vencom.com" - }, - { - "id": 4516, - "guid": "6c1d824d-eefa-4e52-87c8-2397ab61c3e1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Winter", - "company": "Truetomic", - "phone": "895-450-3896", - "email": "chloe@truetomic.com" - }, - { - "id": 4517, - "guid": "08c6588d-ea97-4e55-bed2-b44209a00f31", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Carter", - "company": "Netsystems", - "phone": "801-566-3470", - "email": "layla@netsystems.com" - }, - { - "id": 4518, - "guid": "61e7676d-80f7-4132-961f-6f31f8397d86", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Grace White", - "company": "Mescatron", - "phone": "812-533-2406", - "email": "grace@mescatron.com" - }, - { - "id": 4519, - "guid": "489cf5f7-dfe1-4fa8-b89c-ba18786679a9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Wesley", - "company": "Teknoplexon", - "phone": "876-533-2927", - "email": "julia@teknoplexon.com" - }, - { - "id": 4520, - "guid": "4dcdd322-9177-440d-bc17-865e3b569af3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Wayne", - "company": "US Omnigraphik", - "phone": "883-543-3964", - "email": "alyssa@us omnigraphik.com" - }, - { - "id": 4521, - "guid": "2cf76aaa-023e-440a-ac49-45232725f024", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mya Gill", - "company": "Teraserv", - "phone": "872-531-3321", - "email": "mya@teraserv.com" - }, - { - "id": 4522, - "guid": "04c06cd8-3567-4f8d-9ad9-ad8df20d0b55", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Hawkins", - "company": "Pacwest", - "phone": "892-402-2039", - "email": "claire@pacwest.com" - }, - { - "id": 4523, - "guid": "4f8aa70c-ec8a-4dbd-9577-397acfc9a3e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Hoggarth", - "company": "Entcast", - "phone": "871-594-2818", - "email": "jasmine@entcast.com" - }, - { - "id": 4524, - "guid": "227d1915-34fc-409e-afcb-72c156370c62", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sofia Creighton", - "company": "Videobanc", - "phone": "803-500-2650", - "email": "sofia@videobanc.com" - }, - { - "id": 4525, - "guid": "2392e4c5-f627-4712-9d34-d71437c8732b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Neal", - "company": "eSteganoergy", - "phone": "842-443-3011", - "email": "leah@esteganoergy.com" - }, - { - "id": 4526, - "guid": "4c659c10-a0d6-40dc-a347-f11325ed126f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Thorndike", - "company": "Teratopia", - "phone": "852-474-3368", - "email": "morgan@teratopia.com" - }, - { - "id": 4527, - "guid": "0620cfde-307d-4dc9-a3c8-36262d8f8a98", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Wood", - "company": "Netseco", - "phone": "898-423-2373", - "email": "samantha@netseco.com" - }, - { - "id": 4528, - "guid": "b563d250-44f3-40ce-b609-054e3ec45af8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Nelson", - "company": "Infraique", - "phone": "823-464-3963", - "email": "maria@infraique.com" - }, - { - "id": 4529, - "guid": "e1e876f6-cec2-4de2-95b3-7bfbfd24432d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Cook", - "company": "Openserve", - "phone": "864-494-2828", - "email": "melanie@openserve.com" - }, - { - "id": 4530, - "guid": "5c9bb273-5727-4733-9acb-0b9bd2dd4d17", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Murphy", - "company": "Robocomm", - "phone": "879-512-3676", - "email": "chloe@robocomm.com" - }, - { - "id": 4531, - "guid": "a914e68c-79a1-4699-b600-ca34b9e44f23", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Wood", - "company": "Navivacs", - "phone": "878-507-3599", - "email": "kylie@navivacs.com" - }, - { - "id": 4532, - "guid": "c381ad74-cb1c-437b-bd1c-1bee03a484ed", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Waller", - "company": "Proline", - "phone": "808-535-3174", - "email": "anna@proline.com" - }, - { - "id": 4533, - "guid": "4fa184d4-266c-4f46-a31e-0900792a04f4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Osborne", - "company": "Raylog", - "phone": "823-486-2898", - "email": "madison@raylog.com" - }, - { - "id": 4534, - "guid": "10791702-be93-43ae-af38-2a2851d4b1ad", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Gibbs", - "company": "Fibrotopia", - "phone": "887-409-2446", - "email": "aubrey@fibrotopia.com" - }, - { - "id": 4535, - "guid": "107599dc-7d78-49fe-b988-c40736d386e1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Audrey Brickman", - "company": "Textiqua", - "phone": "868-506-3518", - "email": "audrey@textiqua.com" - }, - { - "id": 4536, - "guid": "74277875-aa61-4c5b-bf22-98ea3082a127", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Wood", - "company": "Transtouch", - "phone": "862-420-3944", - "email": "alexis@transtouch.com" - }, - { - "id": 4537, - "guid": "902ded76-c0e5-4799-bedb-440350900164", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Brickman", - "company": "Techtron", - "phone": "802-427-2717", - "email": "isabella@techtron.com" - }, - { - "id": 4538, - "guid": "369cc1f7-6d33-4682-b553-a34a9a821ad9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Clapton", - "company": "Allphysiche", - "phone": "830-549-2351", - "email": "sofia@allphysiche.com" - }, - { - "id": 4539, - "guid": "14b71ee9-9573-4e54-ba6f-68684e367548", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brianna Hardman", - "company": "iMedconik", - "phone": "805-403-2574", - "email": "brianna@imedconik.com" - }, - { - "id": 4540, - "guid": "a0664b71-2587-4524-96d7-a098ae1053cf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Hardman", - "company": "iOptystix", - "phone": "887-471-3938", - "email": "sophie@ioptystix.com" - }, - { - "id": 4541, - "guid": "2fabf4db-aebe-4261-8f8f-9a793117a55a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Thorndike", - "company": "Westtomik", - "phone": "894-426-2607", - "email": "lauren@westtomik.com" - }, - { - "id": 4542, - "guid": "59f602f3-482c-4fcc-983a-54e07ed6560f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Young", - "company": "Titanigraf", - "phone": "869-513-2461", - "email": "jessica@titanigraf.com" - }, - { - "id": 4543, - "guid": "9f57699c-6610-4155-ba82-4eadf529ccd1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Goodman", - "company": "Titanirola", - "phone": "801-556-3817", - "email": "kaylee@titanirola.com" - }, - { - "id": 4544, - "guid": "90f260c3-3835-4af6-b138-83301f0b0c3c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Sheldon", - "company": "Titanirola", - "phone": "850-496-2913", - "email": "autumn@titanirola.com" - }, - { - "id": 4545, - "guid": "0bc14584-447f-4942-acc5-8172dd099230", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Davidson", - "company": "Interliant", - "phone": "888-519-3219", - "email": "chloe@interliant.com" - }, - { - "id": 4546, - "guid": "06960349-fbad-46a9-b94a-dd6633ee1a53", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katherine Chapman", - "company": "Systheon", - "phone": "860-511-2640", - "email": "katherine@systheon.com" - }, - { - "id": 4547, - "guid": "96c8e62d-5f57-473d-b9df-5e6758486de1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Nathan", - "company": "iEnland", - "phone": "837-426-3826", - "email": "morgan@ienland.com" - }, - { - "id": 4548, - "guid": "e7e65532-81ba-4088-ac6d-20685e5da64e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Chesterton", - "company": "Ventanium", - "phone": "832-411-3489", - "email": "arianna@ventanium.com" - }, - { - "id": 4549, - "guid": "70836591-7e0a-4619-b8fa-bf49fb7f2ba7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Wainwright", - "company": "Mescaridic", - "phone": "879-532-3752", - "email": "amelia@mescaridic.com" - }, - { - "id": 4550, - "guid": "dc66fd8d-973a-4683-8198-cd21f1a2c370", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Gilbert", - "company": "Polytheon", - "phone": "867-471-3528", - "email": "autumn@polytheon.com" - }, - { - "id": 4551, - "guid": "7b8553aa-4111-41bc-a80d-17e718e2d2da", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Warren", - "company": "iSkyvaco", - "phone": "810-558-3124", - "email": "lillian@iskyvaco.com" - }, - { - "id": 4552, - "guid": "2fd36135-990e-433f-9abb-08956e5859d5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maya Day", - "company": "OpKeycomm", - "phone": "843-438-2294", - "email": "maya@opkeycomm.com" - }, - { - "id": 4553, - "guid": "f50dfdea-cf95-4e50-b501-99c0be0ecf9a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Riley Young", - "company": "Technogra", - "phone": "854-449-2791", - "email": "riley@technogra.com" - }, - { - "id": 4554, - "guid": "a9a37078-50bb-4a9c-86a4-6e1a7dd12592", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Wesley", - "company": "Systheon", - "phone": "846-501-2881", - "email": "layla@systheon.com" - }, - { - "id": 4555, - "guid": "29c53bbd-20b2-4073-80e8-6c3757ed18c6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Carrington", - "company": "Anaframe", - "phone": "847-459-2927", - "email": "andrea@anaframe.com" - }, - { - "id": 4556, - "guid": "ab780173-3cea-40ff-a8fa-720254fbb81d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Ford", - "company": "Xeicon", - "phone": "867-539-3617", - "email": "aaliyah@xeicon.com" - }, - { - "id": 4557, - "guid": "208dfda8-7e94-434c-8341-9fde5437cd7b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Young", - "company": "Quintegrity", - "phone": "843-593-2798", - "email": "melanie@quintegrity.com" - }, - { - "id": 4558, - "guid": "da8e3dd1-3cd3-4d60-b3a2-b1688494905b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabella Thomson", - "company": "Turbomart", - "phone": "812-457-2920", - "email": "isabella@turbomart.com" - }, - { - "id": 4559, - "guid": "1b804b40-d7f0-4700-8e36-73f271834bdd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Thomson", - "company": "iOptystix", - "phone": "894-593-3651", - "email": "kaylee@ioptystix.com" - }, - { - "id": 4560, - "guid": "aea2dec7-91ff-4183-b512-39162463b5b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Conors", - "company": "Inridium", - "phone": "851-593-3611", - "email": "alexis@inridium.com" - }, - { - "id": 4561, - "guid": "696a18f7-8a8e-426a-84c9-a27840ec48fb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sofia Gill", - "company": "Navivacs", - "phone": "854-417-3983", - "email": "sofia@navivacs.com" - }, - { - "id": 4562, - "guid": "bc108624-f639-4cc9-8b6f-dcc9938b215f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Walkman", - "company": "Fibroserve", - "phone": "831-514-2061", - "email": "payton@fibroserve.com" - }, - { - "id": 4563, - "guid": "e5adadfd-b4f1-4660-b01f-9aed7532ff68", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Higgins", - "company": "Titanigraf", - "phone": "815-476-2148", - "email": "nevaeh@titanigraf.com" - }, - { - "id": 4564, - "guid": "94d85029-0f04-4739-9d0f-b1344f4b6a39", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Daniels", - "company": "Keytheon", - "phone": "894-423-3054", - "email": "samantha@keytheon.com" - }, - { - "id": 4565, - "guid": "4161b498-ae8f-46f0-8559-5dfd9dd6314e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Wallace", - "company": "Skydata", - "phone": "877-544-3175", - "email": "lauren@skydata.com" - }, - { - "id": 4566, - "guid": "23b29464-64d0-4d76-bd70-4a4103b49ed5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Cook", - "company": "SysVenamerica", - "phone": "844-415-2558", - "email": "riley@sysvenamerica.com" - }, - { - "id": 4567, - "guid": "2ce7ec0c-1fdd-4c46-b292-b4d12d53224a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison WifKinson", - "company": "US Omnigraphik", - "phone": "823-454-3387", - "email": "allison@us omnigraphik.com" - }, - { - "id": 4568, - "guid": "aedec654-c303-49da-9a5d-99879f355111", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Carey", - "company": "Keytheon", - "phone": "875-427-2509", - "email": "madeline@keytheon.com" - }, - { - "id": 4569, - "guid": "6db6a382-dc25-4c06-aa89-c19a20677dab", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Gustman", - "company": "Raylog", - "phone": "850-456-2251", - "email": "sophia@raylog.com" - }, - { - "id": 4570, - "guid": "51a7c389-2ef8-4051-90ad-c6576326c11b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Carrington", - "company": "Robocomm", - "phone": "894-524-2028", - "email": "trinity@robocomm.com" - }, - { - "id": 4571, - "guid": "ce15ecfc-2cc4-4bbb-b973-94f80435793b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Nelson", - "company": "Skydata", - "phone": "828-489-3889", - "email": "chloe@skydata.com" - }, - { - "id": 4572, - "guid": "63ca5278-f093-4ca9-9e8c-607bbaaf0a81", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Chapman", - "company": "Ventanium", - "phone": "873-594-2168", - "email": "katherine@ventanium.com" - }, - { - "id": 4573, - "guid": "957b4feb-dfa5-4f94-a972-6882ed20c1fd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Brown", - "company": "Indisco", - "phone": "810-405-2321", - "email": "lillian@indisco.com" - }, - { - "id": 4574, - "guid": "5ff6b391-6cfc-487b-8252-b6efeb40ab6a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Gate", - "company": "Proline", - "phone": "855-489-3638", - "email": "kayla@proline.com" - }, - { - "id": 4575, - "guid": "45958a43-b5a4-4c09-8516-75a15d4fa064", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexandra Higgins", - "company": "Enlogia", - "phone": "858-583-2833", - "email": "alexandra@enlogia.com" - }, - { - "id": 4576, - "guid": "515bdfff-1db8-4a17-ad67-300e59859a85", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Makayla Brickman", - "company": "SysVenamerica", - "phone": "863-422-3376", - "email": "makayla@sysvenamerica.com" - }, - { - "id": 4577, - "guid": "7d47a971-2015-42a4-8011-f2025e68d160", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Chesterton", - "company": "Techtron", - "phone": "880-505-3898", - "email": "kylie@techtron.com" - }, - { - "id": 4578, - "guid": "0aadd652-4df1-45ac-8b8d-be9a0b940c00", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Timmons", - "company": "Inridium", - "phone": "873-547-2936", - "email": "chloe@inridium.com" - }, - { - "id": 4579, - "guid": "85461276-bced-48ca-9e2e-4646eda1fce5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Oliver", - "company": "Transtouch", - "phone": "890-548-3728", - "email": "lily@transtouch.com" - }, - { - "id": 4580, - "guid": "37a9c2c2-c2f2-470e-8536-be9b126d2612", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Miers", - "company": "Titanigraf", - "phone": "825-536-2213", - "email": "ava@titanigraf.com" - }, - { - "id": 4581, - "guid": "34a1ead9-460e-49ed-a832-c3e15664772a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Walkman", - "company": "US Infratouch", - "phone": "838-504-2945", - "email": "molly@us infratouch.com" - }, - { - "id": 4582, - "guid": "72cda66b-c44b-4b72-95d4-b6a4e53a115a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Smith", - "company": "Unologic", - "phone": "895-575-2366", - "email": "abigail@unologic.com" - }, - { - "id": 4583, - "guid": "75dedfa7-1504-4131-b841-3f3211d37e6a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Goodman", - "company": "Westtomik", - "phone": "809-597-3295", - "email": "claire@westtomik.com" - }, - { - "id": 4584, - "guid": "3a26dfad-235b-4805-a307-1495f9f88052", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Cook", - "company": "Openserve", - "phone": "839-436-2939", - "email": "melanie@openserve.com" - }, - { - "id": 4585, - "guid": "c96a3acf-7b36-4917-86d4-d2092c9ebbec", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Osborne", - "company": "Netsystems", - "phone": "808-526-3940", - "email": "julia@netsystems.com" - }, - { - "id": 4586, - "guid": "a994cd66-e9a4-4160-94d2-f6ee314e0ea7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Mercer", - "company": "Idmax", - "phone": "809-530-3510", - "email": "sophia@idmax.com" - }, - { - "id": 4587, - "guid": "8b22482a-870c-4468-bf00-5a03c91bdab8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Gilson", - "company": "Conotomics", - "phone": "886-493-3095", - "email": "mariah@conotomics.com" - }, - { - "id": 4588, - "guid": "7d591bbe-6e26-4096-9f82-db3e41d71a88", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Miln", - "company": "Hypervaco", - "phone": "892-566-3467", - "email": "isabelle@hypervaco.com" - }, - { - "id": 4589, - "guid": "41ba82dc-d14d-4c16-837d-ecd5d278bb6b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Miers", - "company": "Generola", - "phone": "841-600-3324", - "email": "lauren@generola.com" - }, - { - "id": 4590, - "guid": "2605ace6-5c36-4c23-afef-6e58fcbcd686", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabelle Carter", - "company": "iQualcar", - "phone": "841-484-3587", - "email": "isabelle@iqualcar.com" - }, - { - "id": 4591, - "guid": "67993e4f-fe9f-4715-afe2-438ac4dfdc2f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Chapman", - "company": "Mescaridic", - "phone": "848-424-3977", - "email": "emma@mescaridic.com" - }, - { - "id": 4592, - "guid": "2febb15b-bd30-4cd0-a830-e391ba976575", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Hailey", - "company": "Jamrola", - "phone": "806-494-3606", - "email": "nevaeh@jamrola.com" - }, - { - "id": 4593, - "guid": "2838d61b-6629-4b70-b418-a483971dfec2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Bush", - "company": "Jamrola", - "phone": "852-449-3053", - "email": "abigail@jamrola.com" - }, - { - "id": 4594, - "guid": "032dd2b9-838a-4c10-a3a3-f6a403ac7b28", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Walkman", - "company": "Sontopia", - "phone": "885-496-3091", - "email": "melanie@sontopia.com" - }, - { - "id": 4595, - "guid": "09f0479d-ccc2-4858-b4d6-9b67a4acff53", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Harrison", - "company": "SysUSA", - "phone": "871-410-3379", - "email": "zoe@sysusa.com" - }, - { - "id": 4596, - "guid": "646863ac-deb4-4c04-a233-15e202638271", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Sherlock", - "company": "Vencom", - "phone": "823-442-3654", - "email": "destiny@vencom.com" - }, - { - "id": 4597, - "guid": "5939936e-1aa4-4b81-bace-0288ca51f213", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Genesis Brooks", - "company": "Sontopia", - "phone": "870-434-3701", - "email": "genesis@sontopia.com" - }, - { - "id": 4598, - "guid": "521067a0-5570-4187-90da-d0e139952a05", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Oswald", - "company": "Compuamerica", - "phone": "864-441-3754", - "email": "rachel@compuamerica.com" - }, - { - "id": 4599, - "guid": "9a1a1cb5-ae62-49b7-b5db-74537e336e03", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Elizabeth WifKinson", - "company": "Airdyne", - "phone": "840-413-3565", - "email": "elizabeth@airdyne.com" - }, - { - "id": 4600, - "guid": "89166da8-99fb-4bf2-953e-8138583cec5e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Galbraith", - "company": "Qualserve", - "phone": "806-528-3891", - "email": "brooklyn@qualserve.com" - }, - { - "id": 4601, - "guid": "8ac3c12a-6b64-4ed6-8309-0678b3030187", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Hodges", - "company": "Allphysiche", - "phone": "827-592-2993", - "email": "alexandra@allphysiche.com" - }, - { - "id": 4602, - "guid": "0d940421-a15d-4cbd-9779-74e515d5e80b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Nash", - "company": "Tekcar", - "phone": "899-436-2350", - "email": "angelina@tekcar.com" - }, - { - "id": 4603, - "guid": "125fdbe5-152c-430e-90ed-6a3d225c6e53", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Sheldon", - "company": "iQualcar", - "phone": "887-466-3537", - "email": "brooke@iqualcar.com" - }, - { - "id": 4604, - "guid": "0725ea0f-b759-48d0-a242-4ba1a42c6bc8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Abramson", - "company": "Allnet", - "phone": "808-476-3015", - "email": "samantha@allnet.com" - }, - { - "id": 4605, - "guid": "1c47f6e8-032f-4abb-bcfd-510af924ab6c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah Gate", - "company": "US Infratouch", - "phone": "833-477-2727", - "email": "mariah@us infratouch.com" - }, - { - "id": 4606, - "guid": "38ccfe8e-f340-47dd-a8d0-e639fd84a413", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Julia Morrison", - "company": "Genland", - "phone": "818-545-3192", - "email": "julia@genland.com" - }, - { - "id": 4607, - "guid": "591efc85-6703-4a6c-8a06-9ed43be74b61", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Croftoon", - "company": "Jamrola", - "phone": "865-551-2219", - "email": "julia@jamrola.com" - }, - { - "id": 4608, - "guid": "a1a36999-d2be-4ff6-bc9b-a9628bd4261b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Murphy", - "company": "Fibrotouch", - "phone": "828-506-3361", - "email": "melanie@fibrotouch.com" - }, - { - "id": 4609, - "guid": "18f9336a-c7ce-411d-a7ad-ca298d495b9d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Neal", - "company": "Tekcar", - "phone": "822-471-2353", - "email": "eva@tekcar.com" - }, - { - "id": 4610, - "guid": "0758f261-49f1-424a-ae6b-9d09265773cb", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Thornton", - "company": "Keytheon", - "phone": "858-407-2230", - "email": "chloe@keytheon.com" - }, - { - "id": 4611, - "guid": "1aaebfb0-1026-436e-9673-2c70491c6d88", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Murphy", - "company": "iEnland", - "phone": "880-417-3156", - "email": "avery@ienland.com" - }, - { - "id": 4612, - "guid": "9f2c94bd-02d8-430e-a2d7-7b450f639e2f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Fulton", - "company": "Anagraph", - "phone": "858-523-2001", - "email": "olivia@anagraph.com" - }, - { - "id": 4613, - "guid": "ee965f43-243f-4036-acd5-982028f21065", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Fulton", - "company": "Unologic", - "phone": "866-523-2287", - "email": "avery@unologic.com" - }, - { - "id": 4614, - "guid": "02918557-8309-4d07-ae08-5cf5353eb21e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Clapton", - "company": "Venconix", - "phone": "865-470-2024", - "email": "brooke@venconix.com" - }, - { - "id": 4615, - "guid": "570f7827-c49f-4e6f-9ebd-b671459a23c1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Timmons", - "company": "Mescatron", - "phone": "891-589-2133", - "email": "chloe@mescatron.com" - }, - { - "id": 4616, - "guid": "874e52ca-fc71-46cd-ab12-1bfe70cf2f31", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Croftoon", - "company": "Teknoplexon", - "phone": "872-543-3905", - "email": "eva@teknoplexon.com" - }, - { - "id": 4617, - "guid": "c896c7e7-2097-45ab-8d4b-5f5c9384f3ff", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Hodges", - "company": "Polytheon", - "phone": "852-589-3285", - "email": "alexis@polytheon.com" - }, - { - "id": 4618, - "guid": "e6237b9f-0ebd-4ed0-b317-82cc74e5f01b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Goldman", - "company": "Xeicon", - "phone": "819-586-3884", - "email": "hailey@xeicon.com" - }, - { - "id": 4619, - "guid": "f3475be9-352a-4b9b-829b-6c268fab6248", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton White", - "company": "Orthosoft", - "phone": "831-412-3165", - "email": "peyton@orthosoft.com" - }, - { - "id": 4620, - "guid": "00e02514-f2f5-487f-ba2d-8eade878b2cf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mariah Gerald", - "company": "Navivacs", - "phone": "892-422-2240", - "email": "mariah@navivacs.com" - }, - { - "id": 4621, - "guid": "c1f18d99-fa8e-4121-970d-d13c59071f88", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Haig", - "company": "Openserve", - "phone": "876-445-3462", - "email": "charlotte@openserve.com" - }, - { - "id": 4622, - "guid": "78a3630e-89c5-465c-b267-c125fd9c20cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Evelyn Gilbert", - "company": "Unconix", - "phone": "814-557-3220", - "email": "evelyn@unconix.com" - }, - { - "id": 4623, - "guid": "c588cb20-1c27-4458-986d-b1f6fd6927a3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Chandter", - "company": "iEnland", - "phone": "830-413-3925", - "email": "sophia@ienland.com" - }, - { - "id": 4624, - "guid": "266150df-4829-4fcf-98b0-aa4bcc16c2e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Harrison", - "company": "Teratopia", - "phone": "843-412-3717", - "email": "melanie@teratopia.com" - }, - { - "id": 4625, - "guid": "52f599f5-0243-4be7-a002-b3a0522b1727", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Harrison", - "company": "Teratopia", - "phone": "806-474-2918", - "email": "aaliyah@teratopia.com" - }, - { - "id": 4626, - "guid": "ed1be164-8277-4b54-ba88-8a4045e024be", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Walkman", - "company": "Orthosoft", - "phone": "862-521-2701", - "email": "sydney@orthosoft.com" - }, - { - "id": 4627, - "guid": "af411dab-db4c-4a32-aad2-3ada933da6c1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Turner", - "company": "Systheon", - "phone": "841-434-2188", - "email": "makayla@systheon.com" - }, - { - "id": 4628, - "guid": "a6e1d9ad-5524-4141-b184-1efb90696f6e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Brooks", - "company": "iEnland", - "phone": "803-418-3642", - "email": "addison@ienland.com" - }, - { - "id": 4629, - "guid": "7c058f2f-83a4-461b-81b2-9abbc84368d6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoe Carroll", - "company": "Ventanium", - "phone": "838-499-2875", - "email": "zoe@ventanium.com" - }, - { - "id": 4630, - "guid": "c63eddbf-c0a4-44fe-92c5-51b2578e3cb5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Samantha Gerald", - "company": "Westtomik", - "phone": "832-551-3723", - "email": "samantha@westtomik.com" - }, - { - "id": 4631, - "guid": "a2304529-5bd8-41bb-bf34-510cfca45752", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Winter", - "company": "iMedconik", - "phone": "815-490-3796", - "email": "trinity@imedconik.com" - }, - { - "id": 4632, - "guid": "d805f5db-b207-42fd-b1a0-d48e4c22dccd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Fisher", - "company": "Aluco", - "phone": "881-443-3432", - "email": "mackenzie@aluco.com" - }, - { - "id": 4633, - "guid": "3d2eba02-6632-4a28-81ff-d2b864de41b8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Stanley", - "company": "Anagraph", - "phone": "866-486-2595", - "email": "victoria@anagraph.com" - }, - { - "id": 4634, - "guid": "6d3020a5-4b7c-4473-a65d-8ac5db439c18", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Ward", - "company": "Anagraph", - "phone": "840-440-2860", - "email": "julia@anagraph.com" - }, - { - "id": 4635, - "guid": "c70924bf-bec4-45fd-bf41-59e2f56a54bf", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey WifKinson", - "company": "Xeicon", - "phone": "844-427-3305", - "email": "hailey@xeicon.com" - }, - { - "id": 4636, - "guid": "06e30420-a8df-4449-839a-0ded30f2e310", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Wesley", - "company": "Inridium", - "phone": "860-556-2369", - "email": "aaliyah@inridium.com" - }, - { - "id": 4637, - "guid": "d2eb8863-47c9-4a64-a60e-5c84bc29c311", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha WifKinson", - "company": "Skydata", - "phone": "874-559-2323", - "email": "samantha@skydata.com" - }, - { - "id": 4638, - "guid": "83ea6d59-a8b2-4de5-af41-1ec04fbc2e85", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Oldman", - "company": "Teratopia", - "phone": "850-542-2934", - "email": "valeria@teratopia.com" - }, - { - "id": 4639, - "guid": "50287ee4-e8dc-4356-8f98-75d7acc9be41", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Wesley", - "company": "Infraique", - "phone": "872-580-3910", - "email": "eva@infraique.com" - }, - { - "id": 4640, - "guid": "850f111f-94d9-4cf1-a2cd-3f1571eaca06", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Ward", - "company": "Keytheon", - "phone": "860-583-2450", - "email": "ella@keytheon.com" - }, - { - "id": 4641, - "guid": "05d39f73-1d41-4087-95ff-69dea65970f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Gilmore", - "company": "Allnet", - "phone": "872-512-3222", - "email": "brooke@allnet.com" - }, - { - "id": 4642, - "guid": "ba7cbd1b-d531-4df5-9f12-4d40948cb21c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Miller", - "company": "InfoAirway", - "phone": "890-445-3296", - "email": "angelina@infoairway.com" - }, - { - "id": 4643, - "guid": "a55292e5-78d5-4a63-8233-8f9b10abadb3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Arianna Hancock", - "company": "Thermotomic", - "phone": "879-508-2268", - "email": "arianna@thermotomic.com" - }, - { - "id": 4644, - "guid": "7df724b9-18b3-47d3-a732-9c052a436e7a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Conors", - "company": "Safeagra", - "phone": "819-509-3418", - "email": "khloe@safeagra.com" - }, - { - "id": 4645, - "guid": "07a63028-25f0-4fd0-9584-dba34a4ed3f5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Goldman", - "company": "Westmedia", - "phone": "836-555-3329", - "email": "sophie@westmedia.com" - }, - { - "id": 4646, - "guid": "f2f3b190-f445-4e83-8d34-dec038cde522", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Nathan", - "company": "Infraique", - "phone": "846-431-2344", - "email": "alexis@infraique.com" - }, - { - "id": 4647, - "guid": "1cff68f3-19d4-4188-a242-e3d4e62c5c65", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Higgins", - "company": "Celgra", - "phone": "828-581-2721", - "email": "amelia@celgra.com" - }, - { - "id": 4648, - "guid": "7e633287-a1b6-4d25-955e-4fd296e20b61", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Hancock", - "company": "Conrama", - "phone": "840-440-2506", - "email": "arianna@conrama.com" - }, - { - "id": 4649, - "guid": "9f64caba-9117-43bf-aeb5-c2bf30b3dfb0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Miller", - "company": "Pericenta", - "phone": "851-513-3257", - "email": "taylor@pericenta.com" - }, - { - "id": 4650, - "guid": "3dbd27e1-cfe5-4dc3-8a72-527f0b2b201d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Hardman", - "company": "Infraique", - "phone": "855-404-3078", - "email": "emma@infraique.com" - }, - { - "id": 4651, - "guid": "90054c72-54ae-491e-90ad-53cd3b21508c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Morrison", - "company": "Inridium", - "phone": "801-443-3546", - "email": "amelia@inridium.com" - }, - { - "id": 4652, - "guid": "593740f8-2f82-4b10-8ae0-e72d18a8a0c9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Daniels", - "company": "Conotomics", - "phone": "815-423-2557", - "email": "allison@conotomics.com" - }, - { - "id": 4653, - "guid": "4217775b-fa68-4610-8b41-775e48940636", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Nash", - "company": "Robotomic", - "phone": "842-423-2215", - "email": "isabelle@robotomic.com" - }, - { - "id": 4654, - "guid": "1495d635-6a5c-48ad-8553-a493eb413a0a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Turner", - "company": "Textiqua", - "phone": "831-545-2392", - "email": "melanie@textiqua.com" - }, - { - "id": 4655, - "guid": "bfcf8804-50d4-420d-af82-aa39d1dc37e1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Otis", - "company": "Teratopia", - "phone": "846-544-3538", - "email": "sophie@teratopia.com" - }, - { - "id": 4656, - "guid": "e66b2353-695d-4e56-8493-78952344d0f1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jasmine Miller", - "company": "Generola", - "phone": "895-586-2099", - "email": "jasmine@generola.com" - }, - { - "id": 4657, - "guid": "08a4c997-c939-43e7-b106-19c5284919ce", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Stanley", - "company": "Turbomart", - "phone": "854-560-2883", - "email": "vanessa@turbomart.com" - }, - { - "id": 4658, - "guid": "0fd41f35-5f4f-4ea9-b5ab-8718efcec851", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Chesterton", - "company": "eSteganoergy", - "phone": "808-498-2465", - "email": "madelyn@esteganoergy.com" - }, - { - "id": 4659, - "guid": "b4370e67-3803-44f0-a0a7-ed7985fc90d0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Miln", - "company": "Idmax", - "phone": "894-432-3826", - "email": "lauren@idmax.com" - }, - { - "id": 4660, - "guid": "bceb832e-8851-418b-95ef-0a5618f31bc5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Wood", - "company": "Aprama", - "phone": "868-578-3445", - "email": "gabriella@aprama.com" - }, - { - "id": 4661, - "guid": "0608360d-7442-4e70-b998-2ac12ad76910", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Ford", - "company": "Mescatron", - "phone": "863-526-3498", - "email": "eva@mescatron.com" - }, - { - "id": 4662, - "guid": "7e522102-e86e-44b7-b877-110ac2376263", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Charlson", - "company": "Techtron", - "phone": "879-541-3998", - "email": "brianna@techtron.com" - }, - { - "id": 4663, - "guid": "3bb845c8-fd61-4ca3-8313-bdc79b77a207", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Murphy", - "company": "Westtomik", - "phone": "800-544-2546", - "email": "layla@westtomik.com" - }, - { - "id": 4664, - "guid": "55b1edd1-5838-4481-9a6b-9074178821b4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooklyn Ogden", - "company": "Qualserve", - "phone": "888-594-2215", - "email": "brooklyn@qualserve.com" - }, - { - "id": 4665, - "guid": "2ecac4ea-509c-4e81-b8aa-a970d7d62a90", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mia Adamson", - "company": "Robotemplate", - "phone": "862-438-2145", - "email": "mia@robotemplate.com" - }, - { - "id": 4666, - "guid": "ed8315c7-21f9-49e3-bf94-8e6d653118d4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Ward", - "company": "SysVenamerica", - "phone": "810-474-3566", - "email": "angelina@sysvenamerica.com" - }, - { - "id": 4667, - "guid": "6bdd6b26-f762-4637-867e-4a5484e9837e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Goodman", - "company": "Technogra", - "phone": "879-562-2923", - "email": "payton@technogra.com" - }, - { - "id": 4668, - "guid": "9dbbe0e4-31e2-4216-a464-e37f83872046", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Walkman", - "company": "Robotemplate", - "phone": "841-588-3059", - "email": "eva@robotemplate.com" - }, - { - "id": 4669, - "guid": "6c3ef0a4-4f05-4c96-8657-249d39661c8c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Gill", - "company": "Videobanc", - "phone": "834-545-3466", - "email": "alyssa@videobanc.com" - }, - { - "id": 4670, - "guid": "e0a5eaf3-99dd-4b3e-a7c6-31ad854f26a4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Milton", - "company": "Multitiqua", - "phone": "801-467-3110", - "email": "lily@multitiqua.com" - }, - { - "id": 4671, - "guid": "3afc0a8c-30d5-4bed-bd94-3b6662e7ee98", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Croftoon", - "company": "Entcast", - "phone": "883-579-3614", - "email": "sarah@entcast.com" - }, - { - "id": 4672, - "guid": "ccbcfa65-6618-4256-8e3a-cc59a6e6efad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Freeman", - "company": "eEyetanic", - "phone": "885-406-2873", - "email": "lily@eeyetanic.com" - }, - { - "id": 4673, - "guid": "140ee657-3ab9-4522-9e16-4c0bda8b05f2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Watson", - "company": "Pacwest", - "phone": "888-547-3165", - "email": "gianna@pacwest.com" - }, - { - "id": 4674, - "guid": "bd30145a-bf9e-4c78-b29b-10d694ecfe95", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Otis", - "company": "Allnet", - "phone": "838-540-2603", - "email": "sophia@allnet.com" - }, - { - "id": 4675, - "guid": "a9d14aa3-c385-457d-ab78-bc74ee4fae71", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Creighton", - "company": "OpKeycomm", - "phone": "888-550-3877", - "email": "katherine@opkeycomm.com" - }, - { - "id": 4676, - "guid": "a0def78c-2086-4066-bcf4-035478715317", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Harrison", - "company": "Textiqua", - "phone": "877-400-3596", - "email": "khloe@textiqua.com" - }, - { - "id": 4677, - "guid": "36e1fcbf-0159-4ac2-81b5-508ceff72949", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoey Oswald", - "company": "Safeagra", - "phone": "811-402-3262", - "email": "zoey@safeagra.com" - }, - { - "id": 4678, - "guid": "d2aaf230-1e1e-4f8c-a38e-d08aaf7ba863", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Croftoon", - "company": "Aprama", - "phone": "880-509-3220", - "email": "bella@aprama.com" - }, - { - "id": 4679, - "guid": "07a73793-705c-4e96-828d-fb25d5aa71b7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Campbell", - "company": "Conotomics", - "phone": "854-527-2635", - "email": "elizabeth@conotomics.com" - }, - { - "id": 4680, - "guid": "d1b77e2c-aa91-46d2-a5fe-93c224b0b70a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Haig", - "company": "Ventanium", - "phone": "847-404-2109", - "email": "jocelyn@ventanium.com" - }, - { - "id": 4681, - "guid": "f992978c-ff5d-48d1-95bf-c865a2ff91cc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Osborne", - "company": "Rapigrafix", - "phone": "823-569-3741", - "email": "samantha@rapigrafix.com" - }, - { - "id": 4682, - "guid": "4ea72448-005f-489f-a54c-a295f771ef08", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Wallace", - "company": "Titanirola", - "phone": "883-420-3334", - "email": "victoria@titanirola.com" - }, - { - "id": 4683, - "guid": "20e54644-cb25-4a7e-bf06-7ee0b4ef4ec7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Chloe Wainwright", - "company": "iMedconik", - "phone": "881-524-3474", - "email": "chloe@imedconik.com" - }, - { - "id": 4684, - "guid": "abfbea8e-f742-4efe-9d06-a67c26340bb6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Wallace", - "company": "Interliant", - "phone": "879-531-2306", - "email": "kimberly@interliant.com" - }, - { - "id": 4685, - "guid": "78b0aacc-6383-4dd2-9052-ebedec769c65", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Hodges", - "company": "Idmax", - "phone": "876-469-3453", - "email": "lauren@idmax.com" - }, - { - "id": 4686, - "guid": "153524cf-008b-4287-921a-b1bd744736d8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Watson", - "company": "Conotomics", - "phone": "883-554-3692", - "email": "kylie@conotomics.com" - }, - { - "id": 4687, - "guid": "7583f760-bf8c-48d0-9fa2-9a61cae88cf0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Adamson", - "company": "Qualserve", - "phone": "840-530-2178", - "email": "mya@qualserve.com" - }, - { - "id": 4688, - "guid": "1a8488f0-c259-4a94-960a-74811af49aa7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Cramer", - "company": "Infragraph", - "phone": "818-574-3314", - "email": "taylor@infragraph.com" - }, - { - "id": 4689, - "guid": "b6eb7bd9-41cc-46fd-9fbf-5b0452426811", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Hardman", - "company": "Tekcar", - "phone": "806-535-3724", - "email": "gabriella@tekcar.com" - }, - { - "id": 4690, - "guid": "e40aa4f1-7255-4360-ad95-2431852466d3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Miller", - "company": "eSteganoergy", - "phone": "857-448-2730", - "email": "sarah@esteganoergy.com" - }, - { - "id": 4691, - "guid": "97886fb8-e346-43c5-a65d-bdcbf825a1bb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Crossman", - "company": "Jamrola", - "phone": "817-403-2810", - "email": "olivia@jamrola.com" - }, - { - "id": 4692, - "guid": "8efe395f-84a6-4f44-a4b6-9fc2de25cd3e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Clapton", - "company": "Anagraph", - "phone": "857-460-3121", - "email": "bella@anagraph.com" - }, - { - "id": 4693, - "guid": "3d471b2b-8543-4c5d-8cd8-11edf7fb1fa9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Miller", - "company": "Teknoplexon", - "phone": "804-592-2368", - "email": "hailey@teknoplexon.com" - }, - { - "id": 4694, - "guid": "cbb3b2ce-273d-41f0-94d0-1a5df421922a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Calhoun", - "company": "Venconix", - "phone": "819-483-3310", - "email": "brianna@venconix.com" - }, - { - "id": 4695, - "guid": "ef4cfc8b-d451-4dd4-a6c6-064172510f09", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gilson", - "company": "Sontopia", - "phone": "829-433-3402", - "email": "lauren@sontopia.com" - }, - { - "id": 4696, - "guid": "59513ae3-1d90-45e0-8147-dcfece68928d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Calhoun", - "company": "Xeicon", - "phone": "829-591-2621", - "email": "emma@xeicon.com" - }, - { - "id": 4697, - "guid": "ef999f74-0cdc-4c07-904a-a8c9fd516854", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Chandter", - "company": "Allnet", - "phone": "881-566-2518", - "email": "alexis@allnet.com" - }, - { - "id": 4698, - "guid": "3cde6a87-f22c-4da2-940a-d503fa25325c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabelle Fulton", - "company": "Infragraph", - "phone": "816-412-3129", - "email": "isabelle@infragraph.com" - }, - { - "id": 4699, - "guid": "5fb2bad3-cda6-4b29-80da-4e51cab5cb9e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Winter", - "company": "Ameritron", - "phone": "806-406-3681", - "email": "savannah@ameritron.com" - }, - { - "id": 4700, - "guid": "4af9fddc-571c-4acc-b63b-31c5f837e87d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Daniels", - "company": "Allphysiche", - "phone": "866-588-3963", - "email": "khloe@allphysiche.com" - }, - { - "id": 4701, - "guid": "71962b02-b725-4ade-bf30-d670e7251d50", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Chandter", - "company": "Westmedia", - "phone": "891-596-3233", - "email": "bailey@westmedia.com" - }, - { - "id": 4702, - "guid": "9bf00eed-5602-4c8f-af6c-a6614f28561e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jessica Thornton", - "company": "Aprama", - "phone": "840-582-3732", - "email": "jessica@aprama.com" - }, - { - "id": 4703, - "guid": "7a70badc-c6c0-4e39-8487-766b35e089c6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooklyn Owen", - "company": "Allnet", - "phone": "890-425-3016", - "email": "brooklyn@allnet.com" - }, - { - "id": 4704, - "guid": "53caab1b-aa24-45dd-82c7-0716eb1594f5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Vanessa Youmans", - "company": "Xeicon", - "phone": "871-541-2542", - "email": "vanessa@xeicon.com" - }, - { - "id": 4705, - "guid": "f60faed1-3021-41a0-9a2c-5abdcf16e2fa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Chandter", - "company": "Truetomic", - "phone": "879-550-3496", - "email": "angelina@truetomic.com" - }, - { - "id": 4706, - "guid": "012f1768-ebac-4778-8d07-efe28283df2d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Chesterton", - "company": "US Infratouch", - "phone": "819-600-3553", - "email": "sydney@us infratouch.com" - }, - { - "id": 4707, - "guid": "719e966b-7b7c-4c66-ae73-5805df5bd158", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gardner", - "company": "Skydata", - "phone": "898-530-2893", - "email": "brooklyn@skydata.com" - }, - { - "id": 4708, - "guid": "f6800394-2695-4c23-b42d-93cd7e0bc151", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Sherlock", - "company": "Allphysiche", - "phone": "878-500-2210", - "email": "aubrey@allphysiche.com" - }, - { - "id": 4709, - "guid": "970a9cef-2bee-40ef-997b-f22ca8ecb0c1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabriella Ward", - "company": "Sontopia", - "phone": "853-444-2337", - "email": "gabriella@sontopia.com" - }, - { - "id": 4710, - "guid": "d85ae09b-5b67-40a0-ae4a-41fb6e88228c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Gustman", - "company": "Skydata", - "phone": "899-444-3530", - "email": "savannah@skydata.com" - }, - { - "id": 4711, - "guid": "cd4fe274-33de-4e01-b7fb-eebe1a396961", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Oldman", - "company": "Westgate", - "phone": "828-472-3261", - "email": "alexis@westgate.com" - }, - { - "id": 4712, - "guid": "376b8684-a27f-4784-a7dc-1032dbec1d6f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Thorndike", - "company": "Celgra", - "phone": "846-511-2470", - "email": "alexa@celgra.com" - }, - { - "id": 4713, - "guid": "9880087d-bf4b-45ae-9a94-c4fd613c7d5e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Croftoon", - "company": "Truegate", - "phone": "877-567-3430", - "email": "melanie@truegate.com" - }, - { - "id": 4714, - "guid": "a77a646b-a0d7-42b9-8a9d-464ec6b10dea", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Audrey Walkman", - "company": "Allnet", - "phone": "848-434-3993", - "email": "audrey@allnet.com" - }, - { - "id": 4715, - "guid": "e2c6bf53-87b9-4979-9141-5d1938403cf5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Daniels", - "company": "Textiqua", - "phone": "886-430-3365", - "email": "autumn@textiqua.com" - }, - { - "id": 4716, - "guid": "8fb063b7-80ae-4c9c-8cb6-4d24bc289b32", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Brooks", - "company": "Allnet", - "phone": "818-511-2268", - "email": "natalie@allnet.com" - }, - { - "id": 4717, - "guid": "5f2301da-32be-4efb-99de-743a38756c7d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hannah Winter", - "company": "Unologic", - "phone": "885-535-2986", - "email": "hannah@unologic.com" - }, - { - "id": 4718, - "guid": "57dcd6bd-59b9-4a49-8721-99a4108a5293", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Owen", - "company": "Mescatron", - "phone": "878-525-2917", - "email": "brooklyn@mescatron.com" - }, - { - "id": 4719, - "guid": "d141d161-6d45-4a58-924c-d5d46d501cbb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Miers", - "company": "Rapigrafix", - "phone": "819-506-2939", - "email": "kylie@rapigrafix.com" - }, - { - "id": 4720, - "guid": "4dc9a26d-dd6f-47df-9c00-58dc589edee4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Carrington", - "company": "Inridium", - "phone": "880-439-2651", - "email": "peyton@inridium.com" - }, - { - "id": 4721, - "guid": "86d92a76-b3a0-479b-b27a-6e6c199012f6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Gilmore", - "company": "Qualserve", - "phone": "855-432-2137", - "email": "andrea@qualserve.com" - }, - { - "id": 4722, - "guid": "e33c4fda-8667-4e74-a70d-34b052ae28db", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Carroll", - "company": "RoboAerlogix", - "phone": "854-555-3292", - "email": "mariah@roboaerlogix.com" - }, - { - "id": 4723, - "guid": "c09a8874-d044-4e37-a780-3e32f79f1a88", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Peyton Hailey", - "company": "Unologic", - "phone": "858-500-2216", - "email": "peyton@unologic.com" - }, - { - "id": 4724, - "guid": "b9c0bd0f-6dd1-4e7e-8b9e-771bd914d2a7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria White", - "company": "RoboAerlogix", - "phone": "884-595-2524", - "email": "maria@roboaerlogix.com" - }, - { - "id": 4725, - "guid": "dbc3b109-6d31-4a8f-a200-c963c1ae9d7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hailey Ward", - "company": "Safetrust", - "phone": "849-542-3108", - "email": "hailey@safetrust.com" - }, - { - "id": 4726, - "guid": "f434343e-52b4-4825-a1a1-d067a2ba8c14", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Walkman", - "company": "Fibrotouch", - "phone": "849-559-2360", - "email": "alexa@fibrotouch.com" - }, - { - "id": 4727, - "guid": "f6f342e7-5a89-4d13-8cc9-91a1b767657d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Goodman", - "company": "Unconix", - "phone": "805-599-2404", - "email": "khloe@unconix.com" - }, - { - "id": 4728, - "guid": "7a6efff7-14a1-46db-8d79-c4c19412b924", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Vance", - "company": "iOptystix", - "phone": "822-451-2027", - "email": "emma@ioptystix.com" - }, - { - "id": 4729, - "guid": "f8702456-e73f-4c70-8d74-4cfd4c2ce665", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Hailey", - "company": "Anaframe", - "phone": "894-509-2474", - "email": "claire@anaframe.com" - }, - { - "id": 4730, - "guid": "6d83e2d3-14a1-4a2c-bb92-0660d9b2e56b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ariana Croftoon", - "company": "Unconix", - "phone": "838-579-2237", - "email": "ariana@unconix.com" - }, - { - "id": 4731, - "guid": "d440c3fe-b829-4e92-b4f4-90b0924eec37", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Natalie Wainwright", - "company": "Conotomics", - "phone": "842-457-3708", - "email": "natalie@conotomics.com" - }, - { - "id": 4732, - "guid": "6dd719d2-c1ef-4b7d-824b-2e1bb1daf8ca", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Genesis Wainwright", - "company": "Gigaura", - "phone": "832-449-3440", - "email": "genesis@gigaura.com" - }, - { - "id": 4733, - "guid": "f597302a-f91c-497f-a81f-e8faf728bd3a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Charlson", - "company": "OpKeycomm", - "phone": "834-533-2913", - "email": "sophie@opkeycomm.com" - }, - { - "id": 4734, - "guid": "7dea7fab-f63d-4862-9ac9-358827c0b2af", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Goodman", - "company": "iSkyvaco", - "phone": "829-498-3404", - "email": "zoey@iskyvaco.com" - }, - { - "id": 4735, - "guid": "4fcb743b-f244-46ec-b2fb-816b07fdfad2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sofia Carroll", - "company": "SysVenamerica", - "phone": "806-400-3684", - "email": "sofia@sysvenamerica.com" - }, - { - "id": 4736, - "guid": "5839d68e-a5d0-4932-a952-f6b46b0c6d10", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Winter", - "company": "Transtouch", - "phone": "873-593-3882", - "email": "lauren@transtouch.com" - }, - { - "id": 4737, - "guid": "fb642745-b1cd-4a12-926b-7eb7ddeb6429", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Miller", - "company": "Openserve", - "phone": "895-519-3046", - "email": "aubrey@openserve.com" - }, - { - "id": 4738, - "guid": "77a7f68f-a906-474f-8a68-52c5834a42c2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna White", - "company": "Syssoft", - "phone": "827-488-3357", - "email": "arianna@syssoft.com" - }, - { - "id": 4739, - "guid": "e9bc5c23-6df3-4587-b24a-63d1806f822c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Hailey", - "company": "Westmedia", - "phone": "899-468-3072", - "email": "kaitlyn@westmedia.com" - }, - { - "id": 4740, - "guid": "8e517093-f3a0-4fc7-90cf-82636850444e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Warren", - "company": "Steganoconiche", - "phone": "888-469-3761", - "email": "alexandra@steganoconiche.com" - }, - { - "id": 4741, - "guid": "ea1c2167-449c-4d04-bcc7-b0b01a0f7216", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Haig", - "company": "Enlogia", - "phone": "819-427-2531", - "email": "sophie@enlogia.com" - }, - { - "id": 4742, - "guid": "b1d16c98-44f4-4182-a14f-d80733b379e9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Fisher", - "company": "Multitiqua", - "phone": "812-513-2941", - "email": "leah@multitiqua.com" - }, - { - "id": 4743, - "guid": "48c0d26e-ab4e-4d26-b50b-d5f8dde833d6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia White", - "company": "OpKeycomm", - "phone": "807-531-3497", - "email": "olivia@opkeycomm.com" - }, - { - "id": 4744, - "guid": "13ace08f-88b8-4df9-a9ee-c5a313cf40dd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Ford", - "company": "Infragraph", - "phone": "887-577-3140", - "email": "leah@infragraph.com" - }, - { - "id": 4745, - "guid": "ed406285-7062-4d84-86d6-731a69abcd1f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Gerald", - "company": "Quintegrity", - "phone": "827-520-2631", - "email": "alexis@quintegrity.com" - }, - { - "id": 4746, - "guid": "3fb5acd1-fac6-4353-83c6-518b4ab3d483", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Timmons", - "company": "Skydata", - "phone": "842-568-2017", - "email": "kaitlyn@skydata.com" - }, - { - "id": 4747, - "guid": "aec0fa81-6ed4-451c-b26f-e2d6486076a0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Higgins", - "company": "Allphysiche", - "phone": "855-556-3865", - "email": "gabrielle@allphysiche.com" - }, - { - "id": 4748, - "guid": "9c2b7c4d-8642-46c7-8223-603a12c181fe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Nash", - "company": "Navivacs", - "phone": "890-519-2810", - "email": "mackenzie@navivacs.com" - }, - { - "id": 4749, - "guid": "9ece28ac-b916-4840-9060-3b4da18eda82", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Higgins", - "company": "iMedconik", - "phone": "876-452-3343", - "email": "camila@imedconik.com" - }, - { - "id": 4750, - "guid": "8b212d40-e177-417b-b585-25154450e4c9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Vaughan", - "company": "SysVenamerica", - "phone": "812-516-2043", - "email": "mia@sysvenamerica.com" - }, - { - "id": 4751, - "guid": "289bb6dc-d944-4ed6-9f2b-419d9a4f5cc5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Hamphrey", - "company": "Steganoconiche", - "phone": "831-500-3318", - "email": "bella@steganoconiche.com" - }, - { - "id": 4752, - "guid": "ae783d49-514e-405d-8163-f372fb1a14c0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aaliyah Hailey", - "company": "Idmax", - "phone": "888-469-3238", - "email": "aaliyah@idmax.com" - }, - { - "id": 4753, - "guid": "76c62354-33da-4ab6-9754-92c176eca73e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Young", - "company": "Titanigraf", - "phone": "885-534-2547", - "email": "melanie@titanigraf.com" - }, - { - "id": 4754, - "guid": "fb5f094d-d884-4508-9439-55cb07ea33f8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Trinity Vaughan", - "company": "Unconix", - "phone": "854-574-2861", - "email": "trinity@unconix.com" - }, - { - "id": 4755, - "guid": "2d9028b5-2314-413b-863a-6bbe18d2a794", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Freeman", - "company": "eEyetanic", - "phone": "879-407-2555", - "email": "aubrey@eeyetanic.com" - }, - { - "id": 4756, - "guid": "6249ba6c-2908-4275-beca-5b67ea52354e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Chapman", - "company": "Truegate", - "phone": "846-445-3198", - "email": "destiny@truegate.com" - }, - { - "id": 4757, - "guid": "3aa4497c-1fe5-4308-8282-a5c2993a9d08", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Peyton Conors", - "company": "Sontopia", - "phone": "871-478-3019", - "email": "peyton@sontopia.com" - }, - { - "id": 4758, - "guid": "78329a99-a23d-43f1-b11a-bad8ceea0e10", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Ford", - "company": "Conrama", - "phone": "865-400-2959", - "email": "bailey@conrama.com" - }, - { - "id": 4759, - "guid": "a1f8b173-3870-42d8-a5ea-d3f32ab0c026", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria Molligan", - "company": "Cryptotegrity", - "phone": "877-410-3493", - "email": "victoria@cryptotegrity.com" - }, - { - "id": 4760, - "guid": "0daa9a0f-8017-45b9-8550-7280603a4f01", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Nathan", - "company": "Fibrotopia", - "phone": "874-416-2705", - "email": "alyssa@fibrotopia.com" - }, - { - "id": 4761, - "guid": "f3c90253-343f-4084-8ba4-c3b1bae7287d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Thornton", - "company": "Titanigraf", - "phone": "880-425-2438", - "email": "layla@titanigraf.com" - }, - { - "id": 4762, - "guid": "38636353-b053-4554-839e-fd85b2d04156", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Ogden", - "company": "Inridium", - "phone": "818-574-3012", - "email": "hannah@inridium.com" - }, - { - "id": 4763, - "guid": "95300726-e4d6-40c5-9c26-bab57b2fab62", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Crossman", - "company": "Interliant", - "phone": "894-422-2474", - "email": "gabriella@interliant.com" - }, - { - "id": 4764, - "guid": "27d05c58-c82c-4d63-a515-77dd749773ec", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Chandter", - "company": "iMedconik", - "phone": "897-532-2229", - "email": "destiny@imedconik.com" - }, - { - "id": 4765, - "guid": "7877c3b7-a433-435a-ac2b-f343cc0c812e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Natalie White", - "company": "Tekcar", - "phone": "867-555-3652", - "email": "natalie@tekcar.com" - }, - { - "id": 4766, - "guid": "4e75fad6-1acd-4f3e-9b44-349fa358495c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Bush", - "company": "Aprama", - "phone": "833-451-2639", - "email": "sophie@aprama.com" - }, - { - "id": 4767, - "guid": "27f00dcb-7343-4ece-b311-5e02a32bc69d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Natalie Daniels", - "company": "Openserve", - "phone": "802-580-2064", - "email": "natalie@openserve.com" - }, - { - "id": 4768, - "guid": "2fd3646b-449b-428e-aa54-bfaf6c3e0ce7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Youmans", - "company": "Safeagra", - "phone": "898-504-2212", - "email": "sophia@safeagra.com" - }, - { - "id": 4769, - "guid": "95feb8ab-fb4c-4d0f-b373-0eece0690af8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophia Miller", - "company": "Raylog", - "phone": "836-475-2207", - "email": "sophia@raylog.com" - }, - { - "id": 4770, - "guid": "a86e1fa9-d4f0-457f-8019-559efd0d12d8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Hoggarth", - "company": "Fibrotouch", - "phone": "888-513-2717", - "email": "hailey@fibrotouch.com" - }, - { - "id": 4771, - "guid": "1a534d0e-1ee1-490f-b9cd-c33019d6cccb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Waller", - "company": "Robotomic", - "phone": "802-436-3972", - "email": "sydney@robotomic.com" - }, - { - "id": 4772, - "guid": "ea9e711d-0b0a-479e-8197-f790155e1145", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ava Murphy", - "company": "Raylog", - "phone": "872-562-2863", - "email": "ava@raylog.com" - }, - { - "id": 4773, - "guid": "abd5f048-4ce7-42e8-a3b2-0d56eb842643", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Winter", - "company": "Titanirola", - "phone": "898-412-3241", - "email": "katelyn@titanirola.com" - }, - { - "id": 4774, - "guid": "0f213619-3a00-46f8-8ee7-a01b496f85c0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Watson", - "company": "Fibroserve", - "phone": "893-549-3043", - "email": "amelia@fibroserve.com" - }, - { - "id": 4775, - "guid": "0450674b-0ae1-43d1-b35e-86b0f018a8f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Ward", - "company": "Allphysiche", - "phone": "833-585-2558", - "email": "zoe@allphysiche.com" - }, - { - "id": 4776, - "guid": "9ec65b8f-7385-4b91-8b1b-77209f43ae1f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Waller", - "company": "eSteganoergy", - "phone": "857-481-3071", - "email": "gabriella@esteganoergy.com" - }, - { - "id": 4777, - "guid": "2bbc069c-f2b8-41d6-b1d5-f12a9d769bf8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bailey Thorndike", - "company": "RoboAerlogix", - "phone": "813-449-3818", - "email": "bailey@roboaerlogix.com" - }, - { - "id": 4778, - "guid": "07937682-e057-40d2-b936-b2522f178d39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Gilbert", - "company": "iOptystix", - "phone": "866-490-3895", - "email": "ava@ioptystix.com" - }, - { - "id": 4779, - "guid": "8f923403-d01e-4659-8ced-c12b73cf4a3c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Wood", - "company": "Jamconik", - "phone": "848-521-2037", - "email": "madison@jamconik.com" - }, - { - "id": 4780, - "guid": "8ee5f065-576e-44b2-aec3-5003e9f76817", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lillian Goldman", - "company": "Truetomic", - "phone": "811-515-3940", - "email": "lillian@truetomic.com" - }, - { - "id": 4781, - "guid": "f45c5abd-787c-490d-9262-b9759cd3d1c5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Gilson", - "company": "Aprama", - "phone": "828-505-2492", - "email": "morgan@aprama.com" - }, - { - "id": 4782, - "guid": "f46a847e-f648-447b-914c-6c4baf430fcd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Bush", - "company": "Robotemplate", - "phone": "831-466-3670", - "email": "isabelle@robotemplate.com" - }, - { - "id": 4783, - "guid": "e9656584-43a7-4099-8021-90beb77d4540", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Miers", - "company": "Technogra", - "phone": "830-490-2203", - "email": "isabella@technogra.com" - }, - { - "id": 4784, - "guid": "27794c57-10aa-4226-8206-d8ec5f1507ea", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte WifKinson", - "company": "Safetrust", - "phone": "846-432-3176", - "email": "charlotte@safetrust.com" - }, - { - "id": 4785, - "guid": "a0542ff0-c645-4ae3-be01-ea98193add0b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Day", - "company": "Fibrotouch", - "phone": "812-560-3888", - "email": "peyton@fibrotouch.com" - }, - { - "id": 4786, - "guid": "cf35ba18-2452-4d6d-99a8-b20303756a49", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Carter", - "company": "Cryptotegrity", - "phone": "859-551-3382", - "email": "caroline@cryptotegrity.com" - }, - { - "id": 4787, - "guid": "2649d513-99d5-4f34-88ee-a3afc762ea8f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Audrey Creighton", - "company": "iEnland", - "phone": "822-424-2527", - "email": "audrey@ienland.com" - }, - { - "id": 4788, - "guid": "7b5965ae-1d15-4996-b89c-4cc43c9e430c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Miers", - "company": "Infraique", - "phone": "811-456-2332", - "email": "kaylee@infraique.com" - }, - { - "id": 4789, - "guid": "42446ab1-66a1-40c8-8ccd-af46056a7871", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Cook", - "company": "Westgate", - "phone": "893-581-2359", - "email": "madeline@westgate.com" - }, - { - "id": 4790, - "guid": "3dd07854-7014-4de7-a25b-00bc2b41acd3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Galbraith", - "company": "Tekcar", - "phone": "823-547-2059", - "email": "samantha@tekcar.com" - }, - { - "id": 4791, - "guid": "020df386-90e8-4656-890e-1bfab7c6a284", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Conors", - "company": "Teraserv", - "phone": "815-427-3565", - "email": "alexis@teraserv.com" - }, - { - "id": 4792, - "guid": "3c610c41-a1d5-4bbf-b45a-0ea6305623d5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Molligan", - "company": "Truetomic", - "phone": "830-421-2190", - "email": "lillian@truetomic.com" - }, - { - "id": 4793, - "guid": "9c15eb83-a002-44bf-b9c3-cdffbc2e23ab", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Hancock", - "company": "Allnet", - "phone": "801-523-2530", - "email": "sofia@allnet.com" - }, - { - "id": 4794, - "guid": "7d0b0f20-a5b1-4279-91bc-562789b83b38", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Freeman", - "company": "Dynarama", - "phone": "884-415-3256", - "email": "charlotte@dynarama.com" - }, - { - "id": 4795, - "guid": "0de8f968-e288-4d62-a5f3-4dff49d9c3f2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Gill", - "company": "Teknoplexon", - "phone": "851-574-2886", - "email": "zoe@teknoplexon.com" - }, - { - "id": 4796, - "guid": "9e385297-3b34-42ca-824e-7d53bb21abef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Miller", - "company": "Conotomics", - "phone": "823-598-2007", - "email": "sophia@conotomics.com" - }, - { - "id": 4797, - "guid": "6357dff9-db11-4853-90d3-1f887ca5c3fa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madelyn Vance", - "company": "Anagraph", - "phone": "886-581-3261", - "email": "madelyn@anagraph.com" - }, - { - "id": 4798, - "guid": "3c28f6f4-d17f-453e-9cb5-b8f0fd09d813", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Miers", - "company": "Westtomik", - "phone": "807-469-3235", - "email": "trinity@westtomik.com" - }, - { - "id": 4799, - "guid": "960d80ea-eca9-4872-b270-0c0f32add00d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Cramer", - "company": "Conrama", - "phone": "805-514-2604", - "email": "claire@conrama.com" - }, - { - "id": 4800, - "guid": "1e575b7d-c0f4-414f-a0a4-cfedd1e7bf46", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Higgins", - "company": "iEnland", - "phone": "860-592-2882", - "email": "isabelle@ienland.com" - }, - { - "id": 4801, - "guid": "5e1e3f59-bbd7-413c-b2b2-b1cd481a0e20", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Sherlock", - "company": "Fibrotopia", - "phone": "875-583-3601", - "email": "ava@fibrotopia.com" - }, - { - "id": 4802, - "guid": "74925249-09a3-4851-8e9c-a10dfe674a0f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Morrison", - "company": "Infraique", - "phone": "835-436-3674", - "email": "serenity@infraique.com" - }, - { - "id": 4803, - "guid": "e0242b4b-d02f-4dc0-b1ba-46e9c62b1f91", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Gilmore", - "company": "Conotomics", - "phone": "881-414-3081", - "email": "mya@conotomics.com" - }, - { - "id": 4804, - "guid": "287afa27-1c1d-4ebc-8dcf-e111b266e7a9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jocelyn Turner", - "company": "Orthosoft", - "phone": "840-497-2147", - "email": "jocelyn@orthosoft.com" - }, - { - "id": 4805, - "guid": "d77ed25c-121d-4dbb-aa5f-f5e13963d208", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Haig", - "company": "Textiqua", - "phone": "838-525-2032", - "email": "makayla@textiqua.com" - }, - { - "id": 4806, - "guid": "729957df-7faa-4826-bf03-d6a603bdd622", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Gilbert", - "company": "Superscope", - "phone": "810-589-2213", - "email": "grace@superscope.com" - }, - { - "id": 4807, - "guid": "ebe7ba8b-a2e1-45d5-8c1a-ba745ca588ca", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Conors", - "company": "iQualcar", - "phone": "825-458-3205", - "email": "paige@iqualcar.com" - }, - { - "id": 4808, - "guid": "0f56eec1-2121-448b-8728-e64a163be62f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Charlson", - "company": "Safeagra", - "phone": "858-421-2594", - "email": "molly@safeagra.com" - }, - { - "id": 4809, - "guid": "0302d62e-e8f7-4bc1-8967-acd1cf15fd74", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabelle Bush", - "company": "Technogra", - "phone": "830-494-2101", - "email": "isabelle@technogra.com" - }, - { - "id": 4810, - "guid": "a5f0fdd3-3807-4faf-8e53-73e8deeccfac", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Youmans", - "company": "iOptystix", - "phone": "819-449-3315", - "email": "brooklyn@ioptystix.com" - }, - { - "id": 4811, - "guid": "39ac09a1-45e4-4374-8613-b59409408ff9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia WifKinson", - "company": "InfoAirway", - "phone": "862-488-2151", - "email": "olivia@infoairway.com" - }, - { - "id": 4812, - "guid": "6359afdc-4216-4e73-a0c3-1a090157c4d4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Nathan", - "company": "Turbomart", - "phone": "845-558-3472", - "email": "camila@turbomart.com" - }, - { - "id": 4813, - "guid": "6b64539c-47af-47ba-9f50-5ca25c67dc9a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Waller", - "company": "Idmax", - "phone": "866-574-2077", - "email": "brooke@idmax.com" - }, - { - "id": 4814, - "guid": "fd77756f-ca49-4096-b7bc-1685df837108", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Warren", - "company": "Raylog", - "phone": "871-506-2288", - "email": "genesis@raylog.com" - }, - { - "id": 4815, - "guid": "f3714650-831b-4237-ba18-960e18c55073", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kimberly Webster", - "company": "Fibroserve", - "phone": "802-443-2236", - "email": "kimberly@fibroserve.com" - }, - { - "id": 4816, - "guid": "322a98f4-f50f-4081-9ecf-027c987ea5f7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Timmons", - "company": "Turbomart", - "phone": "836-476-3137", - "email": "makayla@turbomart.com" - }, - { - "id": 4817, - "guid": "11ff06ca-a943-454a-8fcd-52a63f890949", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Vance", - "company": "Infragraph", - "phone": "840-469-2719", - "email": "kimberly@infragraph.com" - }, - { - "id": 4818, - "guid": "8daec70a-069e-484a-9f27-28f639e4c1e1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Carrington", - "company": "Compuamerica", - "phone": "822-401-2632", - "email": "julia@compuamerica.com" - }, - { - "id": 4819, - "guid": "7a774cf2-4858-477a-9457-832f273df585", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Creighton", - "company": "Openserve", - "phone": "861-419-3157", - "email": "arianna@openserve.com" - }, - { - "id": 4820, - "guid": "bd7fd0ac-01fe-4653-bd93-a9e7a7f618f8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Youmans", - "company": "Raylog", - "phone": "866-559-2370", - "email": "mackenzie@raylog.com" - }, - { - "id": 4821, - "guid": "c17ac8c3-c0eb-4811-a93e-f277b8e7901d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Oldman", - "company": "Pacwest", - "phone": "820-482-2715", - "email": "serenity@pacwest.com" - }, - { - "id": 4822, - "guid": "76e5cebd-726b-46a7-8c8f-1d07eebbed95", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney Ogden", - "company": "eSteganoergy", - "phone": "834-556-3035", - "email": "sydney@esteganoergy.com" - }, - { - "id": 4823, - "guid": "189ef840-c969-4099-bf72-ecb3b20ae961", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Charlson", - "company": "InfoAirway", - "phone": "854-530-2495", - "email": "kimberly@infoairway.com" - }, - { - "id": 4824, - "guid": "3420e1aa-0598-4d21-b413-66ae67ff0562", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Brickman", - "company": "Qualserve", - "phone": "816-416-3166", - "email": "sophia@qualserve.com" - }, - { - "id": 4825, - "guid": "816c3dd8-e87c-4957-944a-e148ccac26a4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Nathan", - "company": "Truetomic", - "phone": "825-568-2353", - "email": "jasmine@truetomic.com" - }, - { - "id": 4826, - "guid": "6573fe58-b352-461f-acfe-c40d18b02f05", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila Nathan", - "company": "Nanobanc", - "phone": "857-407-2131", - "email": "camila@nanobanc.com" - }, - { - "id": 4827, - "guid": "32e57566-52d4-421b-abd0-4e876ffb0776", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Chapman", - "company": "Allphysiche", - "phone": "864-456-3441", - "email": "arianna@allphysiche.com" - }, - { - "id": 4828, - "guid": "307e55b6-e52e-4bf8-b871-2f5cb9d50e39", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Milton", - "company": "Westtomik", - "phone": "825-562-2169", - "email": "alexa@westtomik.com" - }, - { - "id": 4829, - "guid": "046c9bf0-17a5-4325-865a-9a37f0291047", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Grace Turner", - "company": "RoboAerlogix", - "phone": "866-481-3004", - "email": "grace@roboaerlogix.com" - }, - { - "id": 4830, - "guid": "2eb33fd3-e5d6-4393-8165-84d503b5ed8a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Genesis Brickman", - "company": "eSteganoergy", - "phone": "822-483-3583", - "email": "genesis@esteganoergy.com" - }, - { - "id": 4831, - "guid": "2438311d-5d7e-4e38-80c5-6e36c428a219", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Hancock", - "company": "Westmedia", - "phone": "811-546-2187", - "email": "sydney@westmedia.com" - }, - { - "id": 4832, - "guid": "48e3c84a-3dd4-47ae-9866-60c0fe665845", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Vance", - "company": "US Infratouch", - "phone": "868-435-3150", - "email": "mya@us infratouch.com" - }, - { - "id": 4833, - "guid": "c87e1cc1-942e-4590-9a32-114589633ed4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Walkman", - "company": "Systheon", - "phone": "804-531-2101", - "email": "ava@systheon.com" - }, - { - "id": 4834, - "guid": "72d781b2-bf7f-4d08-91ee-97d3f0e830d7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Freeman", - "company": "InfoAirway", - "phone": "823-459-3232", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 4835, - "guid": "c4a5afe5-28aa-4323-a369-cd9baa0ed032", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Ogden", - "company": "Unologic", - "phone": "806-422-2137", - "email": "arianna@unologic.com" - }, - { - "id": 4836, - "guid": "f64833d6-cae1-4024-ab7e-4e6afb60e01d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Autumn Brickman", - "company": "Aluco", - "phone": "894-596-2046", - "email": "autumn@aluco.com" - }, - { - "id": 4837, - "guid": "03ad11d6-31f6-47d8-bdeb-e68ceda478cc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Ogden", - "company": "iQualcar", - "phone": "888-503-2336", - "email": "hailey@iqualcar.com" - }, - { - "id": 4838, - "guid": "b98d579d-72e7-45ce-b684-568dc578ccb6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Walkman", - "company": "Textiqua", - "phone": "812-427-3742", - "email": "paige@textiqua.com" - }, - { - "id": 4839, - "guid": "98eff9ce-9106-4640-a1c5-97f5f9395673", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Harrison", - "company": "US Infratouch", - "phone": "892-521-3416", - "email": "isabelle@us infratouch.com" - }, - { - "id": 4840, - "guid": "fe1325f0-6af6-4e1f-a943-c857e5893f2b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Chandter", - "company": "Hypervaco", - "phone": "816-406-2462", - "email": "molly@hypervaco.com" - }, - { - "id": 4841, - "guid": "0d25fafc-a591-49a5-a92c-172f37696e85", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Vance", - "company": "Mescatron", - "phone": "815-591-2813", - "email": "andrea@mescatron.com" - }, - { - "id": 4842, - "guid": "22c02530-2133-46ee-9ef4-80dbed0698e8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoe Turner", - "company": "Allphysiche", - "phone": "892-498-3366", - "email": "zoe@allphysiche.com" - }, - { - "id": 4843, - "guid": "296d0815-f6cd-4602-b405-d289e7fb114a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Gibbs", - "company": "Pacwest", - "phone": "847-499-3921", - "email": "gabriella@pacwest.com" - }, - { - "id": 4844, - "guid": "38378ae4-ac22-4a45-bc4e-8a5bf447f48c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Smith", - "company": "Fibrotouch", - "phone": "846-439-3367", - "email": "abigail@fibrotouch.com" - }, - { - "id": 4845, - "guid": "6ebedb4b-c0b3-4ea5-b933-0672f7ced328", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jessica Sherlock", - "company": "iOptystix", - "phone": "864-524-2942", - "email": "jessica@ioptystix.com" - }, - { - "id": 4846, - "guid": "2d814d52-fbd2-4524-afbb-87be099b8dae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Destiny WifKinson", - "company": "SysVenamerica", - "phone": "805-563-2824", - "email": "destiny@sysvenamerica.com" - }, - { - "id": 4847, - "guid": "644da121-ebb7-4140-81fa-45ee824a76e7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Abramson", - "company": "Enlogia", - "phone": "845-423-3693", - "email": "ashley@enlogia.com" - }, - { - "id": 4848, - "guid": "544ad763-1f78-4a42-96dd-c934d5540c64", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Stanley", - "company": "Dynarama", - "phone": "864-512-2585", - "email": "alexis@dynarama.com" - }, - { - "id": 4849, - "guid": "3f41d782-3539-478b-956f-83b04d959846", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Warren", - "company": "InfoAirway", - "phone": "887-593-2122", - "email": "riley@infoairway.com" - }, - { - "id": 4850, - "guid": "0bc4c961-c73d-43c7-b1c7-247d5bdad670", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Thomson", - "company": "Ventanium", - "phone": "808-595-3580", - "email": "madelyn@ventanium.com" - }, - { - "id": 4851, - "guid": "d31039a4-8187-445f-8c95-3e7be3b0444d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Gilson", - "company": "Turbomart", - "phone": "809-412-2760", - "email": "isabella@turbomart.com" - }, - { - "id": 4852, - "guid": "826e57b8-3eaa-4c95-8879-1e8218bc3692", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bella Thorndike", - "company": "Ventanium", - "phone": "895-437-2119", - "email": "bella@ventanium.com" - }, - { - "id": 4853, - "guid": "da1eb1fe-74da-4c94-b0f6-c8076e5a70b2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Thorndike", - "company": "Truetomic", - "phone": "893-549-3380", - "email": "sarah@truetomic.com" - }, - { - "id": 4854, - "guid": "a4ee4c44-f0ef-47e8-8c3e-c43afe45c40b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Carrington", - "company": "Robotemplate", - "phone": "850-476-3185", - "email": "sydney@robotemplate.com" - }, - { - "id": 4855, - "guid": "a54a2bf5-d545-4af6-a078-eda1b0c1ea87", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Vance", - "company": "Dynarama", - "phone": "802-500-2085", - "email": "destiny@dynarama.com" - }, - { - "id": 4856, - "guid": "bc9aa851-bccb-473c-9168-9a1a0fa1a108", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Carroll", - "company": "Skydata", - "phone": "872-561-2118", - "email": "katherine@skydata.com" - }, - { - "id": 4857, - "guid": "92a4e4f3-9091-415c-8776-22169f289696", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Stanley", - "company": "Skydata", - "phone": "887-566-3412", - "email": "valeria@skydata.com" - }, - { - "id": 4858, - "guid": "6797c74b-318b-4bcd-8e3d-5323a7d5b068", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Freeman", - "company": "Genland", - "phone": "826-495-2050", - "email": "sophia@genland.com" - }, - { - "id": 4859, - "guid": "2e1100c2-9927-4b94-a16e-e0496fa4071c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Nelson", - "company": "Jamrola", - "phone": "890-533-2924", - "email": "destiny@jamrola.com" - }, - { - "id": 4860, - "guid": "ef79c861-f6c1-4370-95b5-c60293855751", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabrielle Gate", - "company": "Netsystems", - "phone": "835-462-2814", - "email": "gabrielle@netsystems.com" - }, - { - "id": 4861, - "guid": "18d8d653-2f6e-4f4d-b5f9-8f350d173bd9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Vance", - "company": "Generola", - "phone": "890-495-3761", - "email": "jocelyn@generola.com" - }, - { - "id": 4862, - "guid": "730128d8-6ad4-4257-96b4-92fe630afcc0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra White", - "company": "Conotomics", - "phone": "897-471-3858", - "email": "alexandra@conotomics.com" - }, - { - "id": 4863, - "guid": "24729f6a-d279-4b11-9712-5daa0fdd70c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Thomson", - "company": "Entcast", - "phone": "808-401-3414", - "email": "madelyn@entcast.com" - }, - { - "id": 4864, - "guid": "7bc79bf6-9860-48d4-b334-adda5eb1539a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Wesley", - "company": "Pacwest", - "phone": "839-424-2874", - "email": "kylie@pacwest.com" - }, - { - "id": 4865, - "guid": "f5ba824f-a51c-4d54-9415-c9bc16cdb283", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Wainwright", - "company": "Skydata", - "phone": "805-592-2295", - "email": "makayla@skydata.com" - }, - { - "id": 4866, - "guid": "0ee3b654-7d0c-4509-9513-3696caf55f5b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabrielle Sheldon", - "company": "Westmedia", - "phone": "823-577-2299", - "email": "gabrielle@westmedia.com" - }, - { - "id": 4867, - "guid": "5b43c223-a54e-41bf-b27c-3083c88c8898", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Osborne", - "company": "Videobanc", - "phone": "804-469-3448", - "email": "gabriella@videobanc.com" - }, - { - "id": 4868, - "guid": "9249fc85-29de-475e-a89c-fa8743633f62", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Molligan", - "company": "Steganoconiche", - "phone": "841-598-3088", - "email": "alexa@steganoconiche.com" - }, - { - "id": 4869, - "guid": "f4d30e80-8b5a-4cd0-966b-2b195b616c09", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Campbell", - "company": "OpKeycomm", - "phone": "832-413-2174", - "email": "maya@opkeycomm.com" - }, - { - "id": 4870, - "guid": "127899aa-cb79-4c9b-be2c-7aab12ea6308", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Hodges", - "company": "Unologic", - "phone": "865-587-2894", - "email": "emily@unologic.com" - }, - { - "id": 4871, - "guid": "40585d45-9bd4-4bdd-a8df-778500d72b33", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Miller", - "company": "Technogra", - "phone": "880-566-2584", - "email": "trinity@technogra.com" - }, - { - "id": 4872, - "guid": "53250ce8-6c03-49e0-8bb4-cf3b21aede7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Timmons", - "company": "Dynarama", - "phone": "890-598-3177", - "email": "hannah@dynarama.com" - }, - { - "id": 4873, - "guid": "86ae4362-2dd8-4540-80ca-224cac57156f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Gilmore", - "company": "Cryptotegrity", - "phone": "841-578-3259", - "email": "aubrey@cryptotegrity.com" - }, - { - "id": 4874, - "guid": "e619df8c-cf17-44a8-bdb5-13b6aad6aff8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Miller", - "company": "US Omnigraphik", - "phone": "800-434-2906", - "email": "olivia@us omnigraphik.com" - }, - { - "id": 4875, - "guid": "ff2d1062-a1db-4ffe-ba74-8d6d15893a7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Miller", - "company": "Compuamerica", - "phone": "863-503-3246", - "email": "autumn@compuamerica.com" - }, - { - "id": 4876, - "guid": "0f04f50b-8879-498d-b474-5c173b9d2749", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Gerald", - "company": "Genland", - "phone": "892-495-2536", - "email": "andrea@genland.com" - }, - { - "id": 4877, - "guid": "dc575cbe-9fa9-4ca3-bab1-4532fa5fb920", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kylie Hancock", - "company": "Westmedia", - "phone": "871-444-3578", - "email": "kylie@westmedia.com" - }, - { - "id": 4878, - "guid": "f1bdf42d-5013-4100-a57a-c95ba333b641", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Oldman", - "company": "US Infratouch", - "phone": "843-435-3904", - "email": "lauren@us infratouch.com" - }, - { - "id": 4879, - "guid": "b3f73c2a-a671-4047-80dc-838c49799bb5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Carey", - "company": "Ameritron", - "phone": "849-526-2479", - "email": "gabriella@ameritron.com" - }, - { - "id": 4880, - "guid": "5eddd9e2-8433-499f-9a7f-8b961ed9813e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Higgins", - "company": "Thermotomic", - "phone": "888-573-3674", - "email": "autumn@thermotomic.com" - }, - { - "id": 4881, - "guid": "5b79f553-e223-475b-8356-4fb2b3a7470b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Oswald", - "company": "Westmedia", - "phone": "884-549-2766", - "email": "sydney@westmedia.com" - }, - { - "id": 4882, - "guid": "e1abcc78-d924-45af-9412-f8106ed833d0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Gerald", - "company": "Inridium", - "phone": "899-580-2179", - "email": "jasmine@inridium.com" - }, - { - "id": 4883, - "guid": "58b44a1b-8490-411a-82f0-9354761f85ce", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Rachel Goldman", - "company": "Genland", - "phone": "829-541-3470", - "email": "rachel@genland.com" - }, - { - "id": 4884, - "guid": "8323ccd6-6787-4d30-9118-c1aadf73b731", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Murphy", - "company": "Superscope", - "phone": "817-486-2248", - "email": "brooklyn@superscope.com" - }, - { - "id": 4885, - "guid": "d73dcfa9-67db-4741-880e-6dbee8753ea9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Thomson", - "company": "Teratopia", - "phone": "848-499-3808", - "email": "caroline@teratopia.com" - }, - { - "id": 4886, - "guid": "3589026e-ed29-4bca-b911-618b243c62ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Wallace", - "company": "Westgate", - "phone": "884-423-2028", - "email": "maria@westgate.com" - }, - { - "id": 4887, - "guid": "44a40f20-8bd3-496d-875f-e444dcf8993f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Oldridge", - "company": "RoboAerlogix", - "phone": "877-432-3764", - "email": "kayla@roboaerlogix.com" - }, - { - "id": 4888, - "guid": "c197deed-5e3d-4c00-aeea-53effd275c0a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Young", - "company": "Textiqua", - "phone": "870-528-2926", - "email": "sophie@textiqua.com" - }, - { - "id": 4889, - "guid": "85e73c6d-296b-44ea-b91b-4b0f3dbd495d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Addison Fulton", - "company": "Superscope", - "phone": "864-595-2993", - "email": "addison@superscope.com" - }, - { - "id": 4890, - "guid": "427c78bd-2556-44a2-bc4c-91a2b416f158", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Oldman", - "company": "US Omnigraphik", - "phone": "899-400-3212", - "email": "zoey@us omnigraphik.com" - }, - { - "id": 4891, - "guid": "4f992a3e-f0e7-4fd9-b8ab-dfc0ac9ad658", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Cook", - "company": "Anagraph", - "phone": "832-594-3800", - "email": "ava@anagraph.com" - }, - { - "id": 4892, - "guid": "295b0d8d-7ba9-4285-b158-e29059339971", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Natalie Harrison", - "company": "Syssoft", - "phone": "820-404-2546", - "email": "natalie@syssoft.com" - }, - { - "id": 4893, - "guid": "a0cb15bc-300e-4b0c-9a3b-828d7f8e6e6d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Hodges", - "company": "Idmax", - "phone": "802-525-2976", - "email": "eva@idmax.com" - }, - { - "id": 4894, - "guid": "c3a6b3d5-bad5-45df-b25f-942639c19063", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Sheldon", - "company": "Teraserv", - "phone": "833-443-3425", - "email": "sophie@teraserv.com" - }, - { - "id": 4895, - "guid": "447a85fc-3d0d-48f9-9bf9-514f7621c17f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Harrison", - "company": "Conotomics", - "phone": "825-414-3773", - "email": "elizabeth@conotomics.com" - }, - { - "id": 4896, - "guid": "75f1e9d9-ee20-45a4-bf35-b36882e38817", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Charlson", - "company": "Robotemplate", - "phone": "883-509-2379", - "email": "chloe@robotemplate.com" - }, - { - "id": 4897, - "guid": "1d206fb0-d2f0-49af-a662-ac4e8b506802", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Harrison", - "company": "Celgra", - "phone": "892-538-2083", - "email": "aubrey@celgra.com" - }, - { - "id": 4898, - "guid": "deedeb21-5479-4d4c-ae05-9f28b8a9797d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Adamson", - "company": "Transtouch", - "phone": "870-538-3576", - "email": "alexis@transtouch.com" - }, - { - "id": 4899, - "guid": "dba4a2f6-cc9e-4932-96d0-51c61fd241cd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Oliver", - "company": "Truetomic", - "phone": "887-491-2045", - "email": "maria@truetomic.com" - }, - { - "id": 4900, - "guid": "fdbcb81e-d63d-4192-b2d4-40d8c8507076", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ella WifKinson", - "company": "Orthosoft", - "phone": "886-498-3080", - "email": "ella@orthosoft.com" - }, - { - "id": 4901, - "guid": "2037ce05-cdfb-468f-9be1-607dc7cee4a8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Oldridge", - "company": "Orthosoft", - "phone": "820-422-3735", - "email": "serenity@orthosoft.com" - }, - { - "id": 4902, - "guid": "8de7c025-91c3-486f-b170-9adcda93f265", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Fisher", - "company": "Systheon", - "phone": "802-585-2469", - "email": "victoria@systheon.com" - }, - { - "id": 4903, - "guid": "0cc1648c-00c5-4e61-8e99-47d64c335b51", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Freeman", - "company": "Qualserve", - "phone": "819-576-2547", - "email": "natalie@qualserve.com" - }, - { - "id": 4904, - "guid": "36b41129-f9e4-4c69-a7c6-38c6bca75116", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Young", - "company": "Entcast", - "phone": "889-491-2805", - "email": "genesis@entcast.com" - }, - { - "id": 4905, - "guid": "366ddff2-8644-4174-9821-253d8b74c767", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Chesterton", - "company": "Netsystems", - "phone": "848-489-2928", - "email": "vanessa@netsystems.com" - }, - { - "id": 4906, - "guid": "a0d792db-ecc2-4df3-be41-331a904cb0c9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Morrison", - "company": "Interliant", - "phone": "820-588-3006", - "email": "morgan@interliant.com" - }, - { - "id": 4907, - "guid": "4c4ea241-5635-4177-b45c-1f7775475cbb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Freeman", - "company": "eEyetanic", - "phone": "849-569-2650", - "email": "julia@eeyetanic.com" - }, - { - "id": 4908, - "guid": "eef8d454-aa09-4834-ac27-ea8b64b9d3e2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Croftoon", - "company": "Raylog", - "phone": "809-496-2144", - "email": "kimberly@raylog.com" - }, - { - "id": 4909, - "guid": "13e85c33-f850-44c9-b473-43a84bc6204b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Winter", - "company": "Openserve", - "phone": "815-437-3100", - "email": "claire@openserve.com" - }, - { - "id": 4910, - "guid": "9dca4b51-2ff0-479f-a42d-2470d855c546", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Miln", - "company": "Aluco", - "phone": "876-559-2643", - "email": "allison@aluco.com" - }, - { - "id": 4911, - "guid": "91043085-f53a-4b8a-a02f-51db9ea906e5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Hardman", - "company": "Safetrust", - "phone": "884-465-3998", - "email": "kaylee@safetrust.com" - }, - { - "id": 4912, - "guid": "8727cdba-4adf-4af6-8fd4-f60e7f085d2d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Crossman", - "company": "iOptystix", - "phone": "842-539-3821", - "email": "katherine@ioptystix.com" - }, - { - "id": 4913, - "guid": "023b712d-448c-493f-ba1e-0ee84372a1ed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Nelson", - "company": "Transtouch", - "phone": "829-527-3534", - "email": "elizabeth@transtouch.com" - }, - { - "id": 4914, - "guid": "eae82375-6565-4376-8ad6-640f31150d0d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Wesley", - "company": "Infragraph", - "phone": "821-582-2904", - "email": "zoey@infragraph.com" - }, - { - "id": 4915, - "guid": "f53452a8-a26d-422b-b1cc-d22278e4a0e4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Morgan Hancock", - "company": "Skydata", - "phone": "857-599-2476", - "email": "morgan@skydata.com" - }, - { - "id": 4916, - "guid": "95371d53-f971-4951-947e-d9e1a65a9202", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexa Hardman", - "company": "Fibrotouch", - "phone": "899-533-2132", - "email": "alexa@fibrotouch.com" - }, - { - "id": 4917, - "guid": "0419aa86-9c9a-4024-b0f1-5362ca77db9e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Stanley", - "company": "Dynarama", - "phone": "822-535-2509", - "email": "riley@dynarama.com" - }, - { - "id": 4918, - "guid": "57fbc8d3-7d80-4e3a-ab5a-81966df65942", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Murphy", - "company": "Ameritron", - "phone": "888-477-3271", - "email": "hannah@ameritron.com" - }, - { - "id": 4919, - "guid": "34b4a008-85d2-4a4c-b366-50b36f5494b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Evelyn Thomson", - "company": "Raylog", - "phone": "800-447-2273", - "email": "evelyn@raylog.com" - }, - { - "id": 4920, - "guid": "35e14229-3b0f-40e3-a196-ee9c45721cb5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Molly Freeman", - "company": "Jamrola", - "phone": "849-538-2709", - "email": "molly@jamrola.com" - }, - { - "id": 4921, - "guid": "2f86daf0-097b-468c-86ad-f0375aca3dcf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Wesley", - "company": "Fibrotopia", - "phone": "880-598-3529", - "email": "mackenzie@fibrotopia.com" - }, - { - "id": 4922, - "guid": "748fa539-128a-45fe-91e3-9be50d73ec83", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jocelyn Freeman", - "company": "Orthomedia", - "phone": "848-455-3064", - "email": "jocelyn@orthomedia.com" - }, - { - "id": 4923, - "guid": "0d41212a-dd4a-477c-86b5-2fb662621cf7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Cook", - "company": "Safetrust", - "phone": "821-401-3756", - "email": "anna@safetrust.com" - }, - { - "id": 4924, - "guid": "c286506a-5794-444f-8af7-b06095045282", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Elizabeth Milton", - "company": "Inridium", - "phone": "899-596-2744", - "email": "elizabeth@inridium.com" - }, - { - "id": 4925, - "guid": "f0b542c5-05fa-4c84-8082-b6e7b73232a4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Harrison", - "company": "Polytheon", - "phone": "883-432-3942", - "email": "ava@polytheon.com" - }, - { - "id": 4926, - "guid": "434ab34e-0d4e-4ee7-903f-656599c5af4f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Oswald", - "company": "US Infratouch", - "phone": "848-460-3820", - "email": "arianna@us infratouch.com" - }, - { - "id": 4927, - "guid": "2b1e0c3a-b2b1-41be-8166-92b8222d3132", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Sherlock", - "company": "Videobanc", - "phone": "842-400-2493", - "email": "brooke@videobanc.com" - }, - { - "id": 4928, - "guid": "59565038-3036-4760-95c0-6496bf050b4d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Calhoun", - "company": "Truegate", - "phone": "831-538-2306", - "email": "bailey@truegate.com" - }, - { - "id": 4929, - "guid": "18f3c47e-1a77-4b6c-ac02-8f328d2d6de8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Miers", - "company": "Conotomics", - "phone": "823-586-2128", - "email": "grace@conotomics.com" - }, - { - "id": 4930, - "guid": "ba53489c-1716-4885-bef4-1aa4d72ebaac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Timmons", - "company": "Turbomart", - "phone": "815-598-3728", - "email": "leah@turbomart.com" - }, - { - "id": 4931, - "guid": "32276149-0bf0-49da-b196-67e3ffdeeddc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Hawkins", - "company": "Unconix", - "phone": "851-433-2717", - "email": "ariana@unconix.com" - }, - { - "id": 4932, - "guid": "88ac39c4-3969-4af1-9bf2-eea29f48d184", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Calhoun", - "company": "Polytheon", - "phone": "867-488-2399", - "email": "payton@polytheon.com" - }, - { - "id": 4933, - "guid": "3f9a01fc-0ed2-435d-9c49-7a7fd43fc6c5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Milton", - "company": "iEnland", - "phone": "854-431-2890", - "email": "audrey@ienland.com" - }, - { - "id": 4934, - "guid": "66574d70-55d1-4212-aeb0-360bb35c2725", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Ford", - "company": "Interliant", - "phone": "850-475-3394", - "email": "mariah@interliant.com" - }, - { - "id": 4935, - "guid": "6cf69efe-99b4-4074-b577-ba48d02227c7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabella Hailey", - "company": "Rapigrafix", - "phone": "806-560-2822", - "email": "isabella@rapigrafix.com" - }, - { - "id": 4936, - "guid": "3cdac6de-34d4-492d-b636-8b1cdd12cb51", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Oliver", - "company": "iQualcar", - "phone": "832-501-2770", - "email": "katelyn@iqualcar.com" - }, - { - "id": 4937, - "guid": "d7ae154c-5d42-4744-b7de-24b2bca21ecd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Sheldon", - "company": "Robotomic", - "phone": "837-572-2634", - "email": "molly@robotomic.com" - }, - { - "id": 4938, - "guid": "dd0c8dca-99c1-4e98-be0d-85e2b80b45cf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Gardner", - "company": "Openserve", - "phone": "851-452-3440", - "email": "makayla@openserve.com" - }, - { - "id": 4939, - "guid": "ca7200db-05a8-4d54-b797-b4d505ee06ae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aaliyah Chandter", - "company": "Tekcar", - "phone": "837-514-2737", - "email": "aaliyah@tekcar.com" - }, - { - "id": 4940, - "guid": "ba844cb0-2c6f-48f8-9518-f06dcc6cb405", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Carter", - "company": "Infraique", - "phone": "842-481-2509", - "email": "sophia@infraique.com" - }, - { - "id": 4941, - "guid": "c01b25a0-872b-4a5a-b399-80221be2e994", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Otis", - "company": "Anagraph", - "phone": "807-563-2618", - "email": "rachel@anagraph.com" - }, - { - "id": 4942, - "guid": "63f39fc7-6d1a-46de-9cf7-c9447150e4e2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Stanley", - "company": "iMedconik", - "phone": "835-503-2045", - "email": "angelina@imedconik.com" - }, - { - "id": 4943, - "guid": "579ad741-e7a6-4cde-a05e-7d4fd3debb0e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Michaelson", - "company": "Unconix", - "phone": "815-447-2972", - "email": "samantha@unconix.com" - }, - { - "id": 4944, - "guid": "6c0de725-5af5-40d5-9e5f-edbe56b5e84c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Gilbert", - "company": "iOptystix", - "phone": "824-476-2700", - "email": "madeline@ioptystix.com" - }, - { - "id": 4945, - "guid": "d41b7b6d-fc39-49a9-87f6-f8e1d5d4ff18", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Nevaeh Sherlock", - "company": "iOptystix", - "phone": "801-516-3864", - "email": "nevaeh@ioptystix.com" - }, - { - "id": 4946, - "guid": "9781a5a0-a107-45ec-a2b6-5c34d88d9d6c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabriella Youmans", - "company": "Robocomm", - "phone": "818-516-3065", - "email": "gabriella@robocomm.com" - }, - { - "id": 4947, - "guid": "b873caaf-672c-4a74-9740-c6716c46b6d4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jasmine Thorndike", - "company": "Celgra", - "phone": "857-565-2431", - "email": "jasmine@celgra.com" - }, - { - "id": 4948, - "guid": "40543cf8-6efa-40dc-b8ba-3d522de8eb64", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Walkman", - "company": "Mescaridic", - "phone": "875-524-2460", - "email": "evelyn@mescaridic.com" - }, - { - "id": 4949, - "guid": "709d1c5d-6588-4ef8-aee9-c22f57ad0305", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Calhoun", - "company": "Interliant", - "phone": "860-491-3043", - "email": "addison@interliant.com" - }, - { - "id": 4950, - "guid": "6374b611-1a32-4395-a707-bec57ea619f1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Webster", - "company": "iMedconik", - "phone": "864-518-2374", - "email": "claire@imedconik.com" - }, - { - "id": 4951, - "guid": "5a156ce1-09fe-42ef-8ac2-bb4c923f91e8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Gilmore", - "company": "Truetomic", - "phone": "845-523-3269", - "email": "madeline@truetomic.com" - }, - { - "id": 4952, - "guid": "384e9246-fe41-47d2-bfe4-ed8cf656c107", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Gate", - "company": "US Infratouch", - "phone": "886-416-3698", - "email": "taylor@us infratouch.com" - }, - { - "id": 4953, - "guid": "6559f170-fffa-4a62-8e15-2f5598b3e0fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Turner", - "company": "Robotemplate", - "phone": "845-408-2387", - "email": "trinity@robotemplate.com" - }, - { - "id": 4954, - "guid": "44505ca6-7dd7-49bc-a06b-b7b48b4081a2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Adamson", - "company": "Transtouch", - "phone": "802-447-2681", - "email": "serenity@transtouch.com" - }, - { - "id": 4955, - "guid": "53f21a65-80d4-420e-a36b-d7960fc15d02", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke WifKinson", - "company": "Enlogia", - "phone": "876-590-3047", - "email": "brooke@enlogia.com" - }, - { - "id": 4956, - "guid": "b4e4be81-bd5d-40e9-b6cf-e579230fd3a4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Vance", - "company": "Robocomm", - "phone": "856-435-3869", - "email": "gabrielle@robocomm.com" - }, - { - "id": 4957, - "guid": "0efe2589-b2c7-48a1-b839-bad6601a7adf", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Davidson", - "company": "Venconix", - "phone": "899-474-2482", - "email": "alexandra@venconix.com" - }, - { - "id": 4958, - "guid": "e057a7c6-28a9-48df-966a-5388dd698ba5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Oswald", - "company": "Mescaridic", - "phone": "879-524-3139", - "email": "taylor@mescaridic.com" - }, - { - "id": 4959, - "guid": "06bb5862-041d-4536-ad27-a7a10ff68261", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Gibbs", - "company": "Teratopia", - "phone": "861-591-3318", - "email": "riley@teratopia.com" - }, - { - "id": 4960, - "guid": "c41c80ad-d612-4384-ae21-614c7964cbdd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Croftoon", - "company": "Cryptotegrity", - "phone": "829-550-3801", - "email": "eva@cryptotegrity.com" - }, - { - "id": 4961, - "guid": "0e167648-2df1-4718-914e-fc94c8f5ad4c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Miller", - "company": "Conrama", - "phone": "846-580-2393", - "email": "makayla@conrama.com" - }, - { - "id": 4962, - "guid": "921e2700-189a-45d5-a97b-e0fca55cae83", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Turner", - "company": "eSteganoergy", - "phone": "816-596-2433", - "email": "eva@esteganoergy.com" - }, - { - "id": 4963, - "guid": "0b440209-cdab-4ded-a86b-3c44e4eac34e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle WifKinson", - "company": "Jamrola", - "phone": "893-568-3379", - "email": "isabelle@jamrola.com" - }, - { - "id": 4964, - "guid": "36ea9d9d-b000-4f59-b0ad-8164b55015ea", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Nathan", - "company": "Keytheon", - "phone": "841-437-3556", - "email": "katelyn@keytheon.com" - }, - { - "id": 4965, - "guid": "15d4e2ad-6c67-468c-b26a-0f3ba56f2aa4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jocelyn Abramson", - "company": "Robotomic", - "phone": "826-442-2725", - "email": "jocelyn@robotomic.com" - }, - { - "id": 4966, - "guid": "88752123-8bfb-4b98-9aae-f18d8931a42c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gibbs", - "company": "Pericenta", - "phone": "899-550-3371", - "email": "lauren@pericenta.com" - }, - { - "id": 4967, - "guid": "b10c8bf5-bfb1-4bc0-b7c7-800347812eee", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Miers", - "company": "US Omnigraphik", - "phone": "843-561-2125", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 4968, - "guid": "03e1d85f-8708-456f-8efc-79ee32c6b375", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jocelyn Thornton", - "company": "Robotomic", - "phone": "819-563-2973", - "email": "jocelyn@robotomic.com" - }, - { - "id": 4969, - "guid": "79a2ba0a-fe44-4674-9ac8-63380e456fa3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Crossman", - "company": "SysVenamerica", - "phone": "845-571-2451", - "email": "zoe@sysvenamerica.com" - }, - { - "id": 4970, - "guid": "c4543401-b444-4747-9fc6-3ec5610f2388", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Valeria Sheldon", - "company": "Jamrola", - "phone": "827-576-3882", - "email": "valeria@jamrola.com" - }, - { - "id": 4971, - "guid": "72eb2a3c-aea2-43e3-9ed0-df4fe57e205d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Hodges", - "company": "Aprama", - "phone": "816-438-2512", - "email": "makayla@aprama.com" - }, - { - "id": 4972, - "guid": "8f70641b-1dfa-4bb4-b94d-8aa05822c382", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Charlson", - "company": "Aluco", - "phone": "887-556-3464", - "email": "ella@aluco.com" - }, - { - "id": 4973, - "guid": "93995bb7-2a40-4fd4-971f-55f827c8605c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Brooks", - "company": "OpKeycomm", - "phone": "884-406-2771", - "email": "ashley@opkeycomm.com" - }, - { - "id": 4974, - "guid": "9e4bcbaa-d5f0-482c-87c0-217183a49d5e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Ogden", - "company": "Turbomart", - "phone": "859-597-3380", - "email": "camila@turbomart.com" - }, - { - "id": 4975, - "guid": "d61bf8cd-8893-4a45-a597-232669800965", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Sheldon", - "company": "Orthosoft", - "phone": "870-461-2838", - "email": "samantha@orthosoft.com" - }, - { - "id": 4976, - "guid": "56a77d02-a9c3-477d-9fb9-26bfbfd03b53", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaitlyn Carrington", - "company": "Superscope", - "phone": "850-510-2786", - "email": "kaitlyn@superscope.com" - }, - { - "id": 4977, - "guid": "fe6519ca-2c21-4c66-a74a-b55fe377a137", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Oldridge", - "company": "Pericenta", - "phone": "882-457-2026", - "email": "lillian@pericenta.com" - }, - { - "id": 4978, - "guid": "0753a257-029a-431e-8d52-a3dba47c98fe", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Gate", - "company": "Qualserve", - "phone": "838-592-3984", - "email": "katelyn@qualserve.com" - }, - { - "id": 4979, - "guid": "fd88d8e5-79e5-4605-af0e-af78c381ed67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Vanessa Cramer", - "company": "Aprama", - "phone": "875-482-3950", - "email": "vanessa@aprama.com" - }, - { - "id": 4980, - "guid": "f579c5d9-93d4-459a-abd8-37e52ee1d91b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Goodman", - "company": "OpKeycomm", - "phone": "854-471-2007", - "email": "lillian@opkeycomm.com" - }, - { - "id": 4981, - "guid": "429a9898-645b-4f4e-88a0-aaf1b26bff06", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Neal", - "company": "Infragraph", - "phone": "825-446-3046", - "email": "nevaeh@infragraph.com" - }, - { - "id": 4982, - "guid": "0e25f9c4-585b-4c93-a30b-fa96d627f649", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Conors", - "company": "Systheon", - "phone": "874-548-3729", - "email": "leah@systheon.com" - }, - { - "id": 4983, - "guid": "8c915a02-b43b-49b2-97be-d3d8aacb6a7c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Molligan", - "company": "Technogra", - "phone": "843-414-3647", - "email": "hailey@technogra.com" - }, - { - "id": 4984, - "guid": "ba537897-5db3-4930-bb65-6d54eae0f831", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Hawkins", - "company": "iOptystix", - "phone": "859-563-3458", - "email": "charlotte@ioptystix.com" - }, - { - "id": 4985, - "guid": "de05d032-a09d-4486-8088-b6c3cb0cafa7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Gilmore", - "company": "OpKeycomm", - "phone": "847-540-3105", - "email": "addison@opkeycomm.com" - }, - { - "id": 4986, - "guid": "114c7341-b7a9-40ea-8f0e-20839b437298", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Neal", - "company": "Syssoft", - "phone": "840-500-3460", - "email": "sophie@syssoft.com" - }, - { - "id": 4987, - "guid": "21f4dca7-a1c1-4ed1-a648-0411f53e4d13", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Allison Galbraith", - "company": "Rapigrafix", - "phone": "823-485-3649", - "email": "allison@rapigrafix.com" - }, - { - "id": 4988, - "guid": "4f32d465-4bf8-4718-a6e3-1bd9be1271bd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Oliver", - "company": "Syssoft", - "phone": "836-523-3188", - "email": "claire@syssoft.com" - }, - { - "id": 4989, - "guid": "b8619986-97c4-4d1a-a6fa-d93b18a56e3d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Paige Hawkins", - "company": "Multitiqua", - "phone": "896-462-3762", - "email": "paige@multitiqua.com" - }, - { - "id": 4990, - "guid": "d51cda4d-fbea-4a1b-9406-b875d94e8541", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Carrington", - "company": "Techtron", - "phone": "884-447-2438", - "email": "destiny@techtron.com" - }, - { - "id": 4991, - "guid": "9ec5c56e-b22e-4648-b64c-c2358665006f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Clapton", - "company": "Teraserv", - "phone": "832-524-3022", - "email": "madison@teraserv.com" - }, - { - "id": 4992, - "guid": "b9b25522-7573-403d-a4ee-98a5d458599c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava Wainwright", - "company": "Fibroserve", - "phone": "871-444-3452", - "email": "ava@fibroserve.com" - }, - { - "id": 4993, - "guid": "79f8dc17-643c-4440-9b39-fead77e3e092", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Layla Wallace", - "company": "Robotemplate", - "phone": "895-432-3793", - "email": "layla@robotemplate.com" - }, - { - "id": 4994, - "guid": "abaa2ba0-5f63-4c2b-a4f3-eca8c68278cc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Miers", - "company": "Safetrust", - "phone": "839-440-2651", - "email": "isabelle@safetrust.com" - }, - { - "id": 4995, - "guid": "e8dae909-b367-4edd-b709-fac60490ec73", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Hancock", - "company": "iEnland", - "phone": "804-404-3546", - "email": "faith@ienland.com" - }, - { - "id": 4996, - "guid": "0be55b76-6394-4aea-b12b-11c7014fa419", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Freeman", - "company": "iEnland", - "phone": "832-427-2021", - "email": "aubrey@ienland.com" - }, - { - "id": 4997, - "guid": "70768526-f914-4948-b348-50920f296809", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoey Nathan", - "company": "SysVenamerica", - "phone": "824-408-2855", - "email": "zoey@sysvenamerica.com" - }, - { - "id": 4998, - "guid": "6bee8cb7-8cec-46cc-82b1-e4edb7a8fe30", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Warren", - "company": "Westtomik", - "phone": "816-485-3497", - "email": "maya@westtomik.com" - }, - { - "id": 4999, - "guid": "1c686342-07ef-4b85-9dc1-56204b06929a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ariana Fisher", - "company": "Superscope", - "phone": "851-531-2832", - "email": "ariana@superscope.com" - }, - { - "id": 5000, - "guid": "de07c65e-4758-4e71-b30b-fab6d6ef6153", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mariah Nash", - "company": "Robotomic", - "phone": "814-404-2229", - "email": "mariah@robotomic.com" - }, - { - "id": 5001, - "guid": "b03341bf-fea0-49a5-871b-b6c189b399c6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Owen", - "company": "Interliant", - "phone": "806-559-2470", - "email": "vanessa@interliant.com" - }, - { - "id": 5002, - "guid": "49f02626-64a0-4405-b5ba-49b4cb905fc8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Michaelson", - "company": "iOptystix", - "phone": "896-467-2937", - "email": "genesis@ioptystix.com" - }, - { - "id": 5003, - "guid": "b60b7f1b-caf1-4e24-bd21-9306ad07d09b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Gardner", - "company": "Orthomedia", - "phone": "836-456-3334", - "email": "trinity@orthomedia.com" - }, - { - "id": 5004, - "guid": "3ac2c0cb-abf2-4bbb-bad2-8ed91634bb41", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Oliver", - "company": "Orthomedia", - "phone": "822-519-2106", - "email": "hannah@orthomedia.com" - }, - { - "id": 5005, - "guid": "90711a68-630f-47c7-bb91-4d04bf19ec42", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Michaelson", - "company": "Safetrust", - "phone": "891-567-2071", - "email": "zoe@safetrust.com" - }, - { - "id": 5006, - "guid": "96baecbe-10f2-4e1a-afcb-f53f9bce7957", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kimberly Croftoon", - "company": "Safeagra", - "phone": "803-563-2053", - "email": "kimberly@safeagra.com" - }, - { - "id": 5007, - "guid": "7518793a-19af-49e8-beb0-7247315e2219", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Youmans", - "company": "Truetomic", - "phone": "896-434-3267", - "email": "madelyn@truetomic.com" - }, - { - "id": 5008, - "guid": "f4aab42d-65d1-4345-9025-1e7b552c154a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Youmans", - "company": "Vencom", - "phone": "841-542-2760", - "email": "hannah@vencom.com" - }, - { - "id": 5009, - "guid": "ed2e63d5-4678-4869-906d-86618380c076", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Gerald", - "company": "US Infratouch", - "phone": "829-568-2147", - "email": "peyton@us infratouch.com" - }, - { - "id": 5010, - "guid": "eab6e684-0899-44b9-8398-9d901e3c0e87", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Valeria Goodman", - "company": "iSkyvaco", - "phone": "813-413-2848", - "email": "valeria@iskyvaco.com" - }, - { - "id": 5011, - "guid": "fdf3da2a-bcf2-4976-8818-aec41b01e0ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Vaughan", - "company": "Aprama", - "phone": "815-518-2688", - "email": "bailey@aprama.com" - }, - { - "id": 5012, - "guid": "9bd7940b-167c-4a58-af70-8dfc549d60af", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Campbell", - "company": "Hypervaco", - "phone": "846-554-2483", - "email": "ariana@hypervaco.com" - }, - { - "id": 5013, - "guid": "1f18f033-cb07-47c2-baa2-a171d5a5ec54", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Adamson", - "company": "Hypervaco", - "phone": "880-411-3488", - "email": "gianna@hypervaco.com" - }, - { - "id": 5014, - "guid": "1a3ff9c4-1d3a-41d4-9a99-865b2c747779", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kylie Miller", - "company": "Rapigrafix", - "phone": "811-480-2524", - "email": "kylie@rapigrafix.com" - }, - { - "id": 5015, - "guid": "a31bfa00-182d-489e-9058-9337f0d0329d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Gilson", - "company": "Teratopia", - "phone": "890-580-2084", - "email": "riley@teratopia.com" - }, - { - "id": 5016, - "guid": "3127056a-2332-4c59-a809-30cb3b58dcd9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Wood", - "company": "Fibrotopia", - "phone": "815-454-2523", - "email": "lillian@fibrotopia.com" - }, - { - "id": 5017, - "guid": "03db1a17-f15f-4d79-bc9b-697d6eff3e17", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Gill", - "company": "Skydata", - "phone": "865-597-2407", - "email": "samantha@skydata.com" - }, - { - "id": 5018, - "guid": "dc7d85ac-7c8b-4f7d-9fac-e280c09b61ae", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jasmine Galbraith", - "company": "Xeicon", - "phone": "840-418-3887", - "email": "jasmine@xeicon.com" - }, - { - "id": 5019, - "guid": "2685215b-b636-4076-b290-f739ad48383a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Oswald", - "company": "Anaframe", - "phone": "895-532-3025", - "email": "kylie@anaframe.com" - }, - { - "id": 5020, - "guid": "7cc870fc-f064-422e-b398-547fe028e204", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Bush", - "company": "Rapigrafix", - "phone": "810-468-2304", - "email": "katherine@rapigrafix.com" - }, - { - "id": 5021, - "guid": "3d995784-3d10-4c75-a4b9-3193205b6d7d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Miln", - "company": "Unologic", - "phone": "813-448-2794", - "email": "ava@unologic.com" - }, - { - "id": 5022, - "guid": "ebe956db-08eb-4072-8311-714019ad3ad1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke Carroll", - "company": "Rapigrafix", - "phone": "848-470-3349", - "email": "brooke@rapigrafix.com" - }, - { - "id": 5023, - "guid": "16a2923f-9b95-46f7-b459-8a1425275579", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Brooks", - "company": "Steganoconiche", - "phone": "844-445-3512", - "email": "alexis@steganoconiche.com" - }, - { - "id": 5024, - "guid": "1393f1dc-c292-454f-a0a8-502da4b5fcd3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Goldman", - "company": "OpKeycomm", - "phone": "881-563-2759", - "email": "allison@opkeycomm.com" - }, - { - "id": 5025, - "guid": "129b2810-8201-4d73-9455-8c17575c6e18", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Thornton", - "company": "Netseco", - "phone": "854-404-2410", - "email": "layla@netseco.com" - }, - { - "id": 5026, - "guid": "f55184f9-55f1-4548-ae4a-b69f57a0a961", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Calhoun", - "company": "Raylog", - "phone": "828-587-3077", - "email": "faith@raylog.com" - }, - { - "id": 5027, - "guid": "c90b067c-cd00-4270-96a8-ac25a9b7f104", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Watson", - "company": "Inridium", - "phone": "867-595-2928", - "email": "alexis@inridium.com" - }, - { - "id": 5028, - "guid": "0bc20720-e859-47d8-a360-2c329f3a0c1d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Nevaeh Otis", - "company": "Infraique", - "phone": "862-554-2611", - "email": "nevaeh@infraique.com" - }, - { - "id": 5029, - "guid": "37543a5c-55a1-47e9-87de-6e784bcb96ab", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Thomson", - "company": "Conrama", - "phone": "864-507-2943", - "email": "leah@conrama.com" - }, - { - "id": 5030, - "guid": "c00c05cc-b7f9-4be3-a944-a44598173d39", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Winter", - "company": "Westgate", - "phone": "824-487-3341", - "email": "sophie@westgate.com" - }, - { - "id": 5031, - "guid": "a481fe52-fef2-4108-97de-5dd0c392dfbe", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Wesley", - "company": "iOptystix", - "phone": "847-451-3335", - "email": "grace@ioptystix.com" - }, - { - "id": 5032, - "guid": "a10e195d-d604-4611-85e7-1336f8de3cb4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Gill", - "company": "Steganoconiche", - "phone": "855-401-3136", - "email": "faith@steganoconiche.com" - }, - { - "id": 5033, - "guid": "b952e0b5-b422-45b0-b0c5-ae08b8f62f8c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Charlotte Higgins", - "company": "iSkyvaco", - "phone": "855-407-3708", - "email": "charlotte@iskyvaco.com" - }, - { - "id": 5034, - "guid": "3332acc7-ce2a-4630-8fff-984e82fe843d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Thorndike", - "company": "OpKeycomm", - "phone": "813-428-2530", - "email": "katherine@opkeycomm.com" - }, - { - "id": 5035, - "guid": "7bfba274-cb18-4df5-a470-8c3146e40796", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Adamson", - "company": "Genland", - "phone": "837-438-3306", - "email": "abigail@genland.com" - }, - { - "id": 5036, - "guid": "cb83e832-357c-4abb-be9b-12a8d6b82814", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Molly Gate", - "company": "Enlogia", - "phone": "872-497-3658", - "email": "molly@enlogia.com" - }, - { - "id": 5037, - "guid": "b51a5e39-ed63-454a-958f-78c0c8e9c033", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Miers", - "company": "SysVenamerica", - "phone": "892-405-2016", - "email": "anna@sysvenamerica.com" - }, - { - "id": 5038, - "guid": "a9143697-55b8-4493-8302-3fcdff3d64b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Carey", - "company": "Technogra", - "phone": "806-411-2306", - "email": "molly@technogra.com" - }, - { - "id": 5039, - "guid": "de5ccb63-422f-4461-917f-019ecbe22dc6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Wallace", - "company": "Steganoconiche", - "phone": "841-519-2003", - "email": "autumn@steganoconiche.com" - }, - { - "id": 5040, - "guid": "a528fe11-438b-4b01-ad26-76cbdc457803", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Charlson", - "company": "Fibrotouch", - "phone": "838-472-2581", - "email": "julia@fibrotouch.com" - }, - { - "id": 5041, - "guid": "e61b2058-c47e-4470-8ae8-f62499f2d0b9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Vance", - "company": "Venconix", - "phone": "852-557-3508", - "email": "zoey@venconix.com" - }, - { - "id": 5042, - "guid": "f4100bad-9e55-42dd-aebc-06b50626cd7b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Thomson", - "company": "OpKeycomm", - "phone": "837-435-3829", - "email": "ella@opkeycomm.com" - }, - { - "id": 5043, - "guid": "322dfcc4-382a-4133-934e-8e437a3db245", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Nathan", - "company": "Superscope", - "phone": "841-522-2082", - "email": "addison@superscope.com" - }, - { - "id": 5044, - "guid": "210e322a-b06c-4d85-b40d-c70ade2740d5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Hailey", - "company": "RoboAerlogix", - "phone": "898-593-3229", - "email": "natalie@roboaerlogix.com" - }, - { - "id": 5045, - "guid": "252d157d-4fcd-4312-9f5c-ebf070c3dee8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maria Hamphrey", - "company": "iSkyvaco", - "phone": "889-568-2138", - "email": "maria@iskyvaco.com" - }, - { - "id": 5046, - "guid": "e8a33a35-87da-4b0f-92e6-caaa7b765813", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Hawkins", - "company": "Venconix", - "phone": "889-460-3855", - "email": "samantha@venconix.com" - }, - { - "id": 5047, - "guid": "e4d4fcf2-c626-4cea-a85a-d09ca7036f9e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Brickman", - "company": "Infraique", - "phone": "880-470-2483", - "email": "hannah@infraique.com" - }, - { - "id": 5048, - "guid": "10da0e8c-5d20-4368-87c9-b3401db178d6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Ogden", - "company": "Netseco", - "phone": "880-464-2841", - "email": "ella@netseco.com" - }, - { - "id": 5049, - "guid": "d7d665ef-730c-450e-823c-84d0b5cff8b5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Harrison", - "company": "Orthomedia", - "phone": "834-480-3720", - "email": "paige@orthomedia.com" - }, - { - "id": 5050, - "guid": "51f6b082-977c-42e5-b6eb-3577f71fcae3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Higgins", - "company": "iEnland", - "phone": "803-405-3943", - "email": "khloe@ienland.com" - }, - { - "id": 5051, - "guid": "691300e8-b853-4654-a599-fec77a91d09d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Davidson", - "company": "Airdyne", - "phone": "855-470-2396", - "email": "katelyn@airdyne.com" - }, - { - "id": 5052, - "guid": "979c1703-154a-4a69-8155-3acdb8dff7e4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Mercer", - "company": "Openserve", - "phone": "854-510-2361", - "email": "ava@openserve.com" - }, - { - "id": 5053, - "guid": "0b597eb9-3652-4e04-8262-730a43c7d02e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Gill", - "company": "Navivacs", - "phone": "898-404-2221", - "email": "amelia@navivacs.com" - }, - { - "id": 5054, - "guid": "2e913a8e-92df-4600-921a-6fa50564c4ab", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Thorndike", - "company": "Technogra", - "phone": "833-565-3910", - "email": "allison@technogra.com" - }, - { - "id": 5055, - "guid": "6c78f695-d140-4651-ac7c-5696a48ebe49", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabelle Davidson", - "company": "Idmax", - "phone": "843-498-3269", - "email": "isabelle@idmax.com" - }, - { - "id": 5056, - "guid": "f4d257ee-1583-4973-beae-ab0ce9ee68bd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Cramer", - "company": "Teratopia", - "phone": "813-541-3116", - "email": "morgan@teratopia.com" - }, - { - "id": 5057, - "guid": "f16ce59f-e31f-494a-a057-215b7d8d6141", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Wainwright", - "company": "Proline", - "phone": "802-542-3408", - "email": "madelyn@proline.com" - }, - { - "id": 5058, - "guid": "41d0a436-17bf-417d-af29-bbfb559c8c37", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Warren", - "company": "Truegate", - "phone": "858-461-2830", - "email": "madeline@truegate.com" - }, - { - "id": 5059, - "guid": "acb6878c-ff59-4011-976f-d8b81c9dbe60", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Taylor Vance", - "company": "Infragraph", - "phone": "839-414-2172", - "email": "taylor@infragraph.com" - }, - { - "id": 5060, - "guid": "634cb1e0-024d-4b44-85e0-faa1cfdd6e59", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Young", - "company": "Raylog", - "phone": "884-482-3824", - "email": "layla@raylog.com" - }, - { - "id": 5061, - "guid": "d2713d14-d407-45d7-b67d-b4a720fe031b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Ward", - "company": "Keytheon", - "phone": "875-565-2721", - "email": "jocelyn@keytheon.com" - }, - { - "id": 5062, - "guid": "d509cb79-03a4-46e5-9e77-1a520c4ae1c1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Young", - "company": "Teraserv", - "phone": "850-537-3242", - "email": "sofia@teraserv.com" - }, - { - "id": 5063, - "guid": "859bf867-fe66-4667-81a6-93bda07c203f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Waller", - "company": "Infragraph", - "phone": "879-568-2688", - "email": "taylor@infragraph.com" - }, - { - "id": 5064, - "guid": "313e8ac9-8f9e-4f50-b5a3-d2cff3daa215", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Miller", - "company": "US Omnigraphik", - "phone": "891-447-3990", - "email": "katherine@us omnigraphik.com" - }, - { - "id": 5065, - "guid": "fb23e2dd-dfed-409a-9860-34f94e4cdb23", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Avery Adamson", - "company": "Netseco", - "phone": "883-531-2731", - "email": "avery@netseco.com" - }, - { - "id": 5066, - "guid": "c8050575-6520-409e-89e3-2bbacf3bbb23", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Nathan", - "company": "Pericenta", - "phone": "830-598-2479", - "email": "evelyn@pericenta.com" - }, - { - "id": 5067, - "guid": "e34c2814-9bff-4c90-b842-3567a3d95605", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Conors", - "company": "Gigaura", - "phone": "876-586-3066", - "email": "natalie@gigaura.com" - }, - { - "id": 5068, - "guid": "ac7ec8ba-ee65-4000-a020-4ccad7561c1e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Mercer", - "company": "Skydata", - "phone": "829-590-3234", - "email": "emily@skydata.com" - }, - { - "id": 5069, - "guid": "5008d7b6-97f2-4b31-9182-2f05c9c21b8a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brianna Bush", - "company": "Anagraph", - "phone": "834-467-2234", - "email": "brianna@anagraph.com" - }, - { - "id": 5070, - "guid": "96419310-6c93-409d-91f4-8146926ebc25", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Neal", - "company": "Turbomart", - "phone": "862-409-3980", - "email": "khloe@turbomart.com" - }, - { - "id": 5071, - "guid": "28b92d40-037c-4c9a-8ea0-174719900ff7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Hoggarth", - "company": "iQualcar", - "phone": "845-518-3489", - "email": "lauren@iqualcar.com" - }, - { - "id": 5072, - "guid": "8dce652b-c295-4504-b05d-f4d2bbd2ea1b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Sheldon", - "company": "Anaframe", - "phone": "873-574-2623", - "email": "brooklyn@anaframe.com" - }, - { - "id": 5073, - "guid": "27772dad-b72d-438b-adfa-75f1a7b6cdb3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Milton", - "company": "Tekcar", - "phone": "894-549-3891", - "email": "mariah@tekcar.com" - }, - { - "id": 5074, - "guid": "7b72b83c-2e52-406a-bf7a-539bec82e24f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Hawkins", - "company": "Teknoplexon", - "phone": "813-440-3122", - "email": "hailey@teknoplexon.com" - }, - { - "id": 5075, - "guid": "ba521fa5-714b-45ed-a2a9-3c3b8fc97355", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Goodman", - "company": "Ventanium", - "phone": "819-591-3215", - "email": "madelyn@ventanium.com" - }, - { - "id": 5076, - "guid": "203ea99d-eff9-4fe4-a2cc-9383eb1cf439", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Carter", - "company": "Raylog", - "phone": "874-509-2148", - "email": "victoria@raylog.com" - }, - { - "id": 5077, - "guid": "e93d1e67-c579-48d2-b4cf-1e2c8f69fa80", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Chesterton", - "company": "Conotomics", - "phone": "846-539-2535", - "email": "anna@conotomics.com" - }, - { - "id": 5078, - "guid": "77f822b9-0e7e-4506-9260-5655949e75e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Wallace", - "company": "iEnland", - "phone": "846-583-2934", - "email": "gabrielle@ienland.com" - }, - { - "id": 5079, - "guid": "b933d03c-c86a-41d0-b4aa-ede087da038c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Charlson", - "company": "Unconix", - "phone": "823-412-2773", - "email": "lillian@unconix.com" - }, - { - "id": 5080, - "guid": "696a073c-7966-4485-9078-ad3649ea5846", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Victoria Abramson", - "company": "Entcast", - "phone": "815-438-3895", - "email": "victoria@entcast.com" - }, - { - "id": 5081, - "guid": "7db579cd-cbe1-4830-bee0-f7d16cc69774", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Nash", - "company": "Hypervaco", - "phone": "898-480-2529", - "email": "chloe@hypervaco.com" - }, - { - "id": 5082, - "guid": "0e8e32d7-f5df-43d5-bc49-53fd2a428b93", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Cramer", - "company": "Textiqua", - "phone": "827-461-2384", - "email": "zoe@textiqua.com" - }, - { - "id": 5083, - "guid": "f38aa583-c4d5-48b5-b344-173314a423dd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Webster", - "company": "Ventanium", - "phone": "882-423-2898", - "email": "alexis@ventanium.com" - }, - { - "id": 5084, - "guid": "7fa13b47-0069-40a4-b2ef-9afae4e4e456", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Genesis Turner", - "company": "Mescatron", - "phone": "804-482-3994", - "email": "genesis@mescatron.com" - }, - { - "id": 5085, - "guid": "706d03c5-aba5-479a-9711-44bd7cbafe3a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Hoggarth", - "company": "Genland", - "phone": "873-503-2733", - "email": "isabelle@genland.com" - }, - { - "id": 5086, - "guid": "e0bd89a1-1347-4372-b562-be001120990a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Nathan", - "company": "Inridium", - "phone": "816-442-3960", - "email": "molly@inridium.com" - }, - { - "id": 5087, - "guid": "4c7b18c9-0182-4376-a2c9-2f24a2f42e61", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Morrison", - "company": "Westtomik", - "phone": "845-491-2353", - "email": "amelia@westtomik.com" - }, - { - "id": 5088, - "guid": "28657e96-f265-4209-bdce-732c21d4dbd9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Wayne", - "company": "Anaframe", - "phone": "822-416-3910", - "email": "zoe@anaframe.com" - }, - { - "id": 5089, - "guid": "9e9bcad4-b548-4750-ae9f-b83e19132a07", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Ford", - "company": "Infraique", - "phone": "832-465-3311", - "email": "mia@infraique.com" - }, - { - "id": 5090, - "guid": "874d7b3b-1db8-4206-acfc-d1cbcb5153ef", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Hamphrey", - "company": "Westtomik", - "phone": "885-424-2241", - "email": "serenity@westtomik.com" - }, - { - "id": 5091, - "guid": "4bb0bde7-f323-4e93-8a47-04baf7b6efaf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Neal", - "company": "Westtomik", - "phone": "836-574-3765", - "email": "ava@westtomik.com" - }, - { - "id": 5092, - "guid": "1494ab13-8746-45ea-a8de-61c868f6302e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabelle Hamphrey", - "company": "Multitiqua", - "phone": "842-461-3239", - "email": "isabelle@multitiqua.com" - }, - { - "id": 5093, - "guid": "8e12101f-a0b5-41fc-881b-03930ff7e65c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Freeman", - "company": "Allnet", - "phone": "868-525-2925", - "email": "olivia@allnet.com" - }, - { - "id": 5094, - "guid": "7db6bc64-fece-4832-8990-5629ea692fa3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Otis", - "company": "Infraique", - "phone": "871-589-2025", - "email": "maria@infraique.com" - }, - { - "id": 5095, - "guid": "1c50bb26-6dd5-42f5-8c2c-8af22c2f9cb6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Sheldon", - "company": "SysVenamerica", - "phone": "847-502-3960", - "email": "audrey@sysvenamerica.com" - }, - { - "id": 5096, - "guid": "42d93207-1c5c-447d-b347-ecfffe359b55", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Freeman", - "company": "Safeagra", - "phone": "815-570-2295", - "email": "madelyn@safeagra.com" - }, - { - "id": 5097, - "guid": "e303ac7a-dbce-4029-9703-80d3652a0e3a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Hamphrey", - "company": "Gigaura", - "phone": "898-494-2551", - "email": "ella@gigaura.com" - }, - { - "id": 5098, - "guid": "46fc7b6c-7f9c-425d-987e-ba17f8a85605", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Ford", - "company": "SysVenamerica", - "phone": "866-430-2829", - "email": "ava@sysvenamerica.com" - }, - { - "id": 5099, - "guid": "c52b6be3-4b1e-4abf-95f9-6c4c3c50d233", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Chapman", - "company": "Orthomedia", - "phone": "824-480-2647", - "email": "mackenzie@orthomedia.com" - }, - { - "id": 5100, - "guid": "d4b8a638-0651-4f6c-b8e3-99ce39acf1c7", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Addison Chapman", - "company": "Transtouch", - "phone": "827-550-2573", - "email": "addison@transtouch.com" - }, - { - "id": 5101, - "guid": "959c9e41-b884-43fe-816f-5ce547c989dc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Galbraith", - "company": "OpKeycomm", - "phone": "883-460-2197", - "email": "lily@opkeycomm.com" - }, - { - "id": 5102, - "guid": "2ce01a6a-4369-49e6-8192-754857c089e8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Young", - "company": "Fibrotopia", - "phone": "812-483-2584", - "email": "isabella@fibrotopia.com" - }, - { - "id": 5103, - "guid": "d2828716-89b0-4250-aef2-914fab675b6d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Crossman", - "company": "Steganoconiche", - "phone": "824-400-3208", - "email": "leah@steganoconiche.com" - }, - { - "id": 5104, - "guid": "ac2ba105-cc21-4f2e-9517-ec5d41583ecd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Gilson", - "company": "RoboAerlogix", - "phone": "814-517-2452", - "email": "faith@roboaerlogix.com" - }, - { - "id": 5105, - "guid": "4351366e-3a01-4135-9ff9-e12cb65145ab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Sherlock", - "company": "Fibroserve", - "phone": "861-496-2870", - "email": "savannah@fibroserve.com" - }, - { - "id": 5106, - "guid": "63397d3c-26ba-49b5-9932-b66826946858", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Warren", - "company": "eEyetanic", - "phone": "896-571-3635", - "email": "amelia@eeyetanic.com" - }, - { - "id": 5107, - "guid": "263c4c1d-4ef4-4d62-a5d9-e2f92946704e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Bush", - "company": "Infraique", - "phone": "805-574-2087", - "email": "trinity@infraique.com" - }, - { - "id": 5108, - "guid": "e3da21fb-0ade-4b35-9023-ad7ec2534ed1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Croftoon", - "company": "Tekcar", - "phone": "899-502-2657", - "email": "vanessa@tekcar.com" - }, - { - "id": 5109, - "guid": "141af265-795d-442d-b692-c6a3edd81b2a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Hardman", - "company": "Anaframe", - "phone": "870-455-3244", - "email": "camila@anaframe.com" - }, - { - "id": 5110, - "guid": "ce652005-7db3-43e7-95ae-8f97c59463bd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Angelina Thomson", - "company": "Allnet", - "phone": "876-404-2060", - "email": "angelina@allnet.com" - }, - { - "id": 5111, - "guid": "f55aa1b7-1094-4d22-b7f9-f24b6f735388", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Vance", - "company": "Quintegrity", - "phone": "821-457-2351", - "email": "ashley@quintegrity.com" - }, - { - "id": 5112, - "guid": "1bd77826-66df-4e2c-92e6-9e649e299267", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sydney Harrison", - "company": "Fibroserve", - "phone": "823-401-3185", - "email": "sydney@fibroserve.com" - }, - { - "id": 5113, - "guid": "f145fdd0-4925-4454-8b17-5e70e7bf5bd6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Clapton", - "company": "Pericenta", - "phone": "865-515-3735", - "email": "audrey@pericenta.com" - }, - { - "id": 5114, - "guid": "3f7aa4a7-03e2-451e-91d9-d0bb0bb58e8c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Calhoun", - "company": "Pacwest", - "phone": "842-542-3563", - "email": "bella@pacwest.com" - }, - { - "id": 5115, - "guid": "773c67e5-d2f9-4db6-935d-31347d441fe7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Miller", - "company": "Hypervaco", - "phone": "894-513-2801", - "email": "kylie@hypervaco.com" - }, - { - "id": 5116, - "guid": "7eeff7df-bc74-4dab-8fba-0efbf99f1043", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Ogden", - "company": "Infragraph", - "phone": "898-491-2426", - "email": "eva@infragraph.com" - }, - { - "id": 5117, - "guid": "f0630a9d-6083-4372-a9ca-1b39e42f47e8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Hailey", - "company": "US Omnigraphik", - "phone": "851-443-2488", - "email": "morgan@us omnigraphik.com" - }, - { - "id": 5118, - "guid": "e231d54e-a669-449e-8761-ff11b5d76834", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Morrison", - "company": "Entcast", - "phone": "817-522-2907", - "email": "khloe@entcast.com" - }, - { - "id": 5119, - "guid": "649fb38c-9b96-437c-a348-ad18c59c4b9b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Gardner", - "company": "Multitiqua", - "phone": "877-555-2955", - "email": "serenity@multitiqua.com" - }, - { - "id": 5120, - "guid": "f61f92f6-5399-46d3-bdbb-d5eca0686037", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Hancock", - "company": "Anagraph", - "phone": "826-493-3499", - "email": "autumn@anagraph.com" - }, - { - "id": 5121, - "guid": "64499884-2c4c-4d30-9079-1436e977bad9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Campbell", - "company": "SysUSA", - "phone": "894-427-3439", - "email": "savannah@sysusa.com" - }, - { - "id": 5122, - "guid": "78c0a81f-5ebe-4797-8e97-9caf1655effc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Gilbert", - "company": "Rapigrafix", - "phone": "869-424-2835", - "email": "peyton@rapigrafix.com" - }, - { - "id": 5123, - "guid": "938bece4-6ed1-4d85-aff6-3ae00cb9a8f5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Ogden", - "company": "Netseco", - "phone": "809-530-2761", - "email": "faith@netseco.com" - }, - { - "id": 5124, - "guid": "a2f55d77-c821-4d48-8f15-105246e278be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Gilson", - "company": "Robotomic", - "phone": "807-477-2738", - "email": "caroline@robotomic.com" - }, - { - "id": 5125, - "guid": "cb6b9b38-e655-4c9a-9009-8c133ff245e6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Chandter", - "company": "Safeagra", - "phone": "888-545-2378", - "email": "serenity@safeagra.com" - }, - { - "id": 5126, - "guid": "ab31ba76-924a-4c44-a144-a2d2efcdd510", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Oswald", - "company": "Proline", - "phone": "859-519-3308", - "email": "katherine@proline.com" - }, - { - "id": 5127, - "guid": "bd06dc6c-b902-4e13-bd5b-812f9778d7b5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Bush", - "company": "Cryptotegrity", - "phone": "881-532-2230", - "email": "madelyn@cryptotegrity.com" - }, - { - "id": 5128, - "guid": "789b4e6b-7444-4e7f-958c-0ee36b31c77c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Oldman", - "company": "Robotemplate", - "phone": "815-552-2513", - "email": "andrea@robotemplate.com" - }, - { - "id": 5129, - "guid": "5c00601c-28fd-486a-9ff6-80d1f62bd0f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Goodman", - "company": "US Omnigraphik", - "phone": "826-516-3756", - "email": "maya@us omnigraphik.com" - }, - { - "id": 5130, - "guid": "75852b1e-33a9-49b5-a2d8-001d6d3adb67", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Brickman", - "company": "Gigaura", - "phone": "838-520-3257", - "email": "abigail@gigaura.com" - }, - { - "id": 5131, - "guid": "e16b62a2-1a6d-4608-9d51-3d547d11c987", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Grace Charlson", - "company": "Infragraph", - "phone": "866-429-2047", - "email": "grace@infragraph.com" - }, - { - "id": 5132, - "guid": "989a419e-56dc-4bb1-a088-6304bc42d523", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Grace Murphy", - "company": "Compuamerica", - "phone": "823-435-2512", - "email": "grace@compuamerica.com" - }, - { - "id": 5133, - "guid": "5d611fa6-68c2-4125-b85e-c5e36cae5c58", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Gibbs", - "company": "Enlogia", - "phone": "870-488-2219", - "email": "zoey@enlogia.com" - }, - { - "id": 5134, - "guid": "fc73f24f-da14-48d2-8343-786ae0edf299", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Bush", - "company": "Pericenta", - "phone": "827-400-3229", - "email": "emily@pericenta.com" - }, - { - "id": 5135, - "guid": "16bc99d5-6f23-437b-b1f9-a33dbf52c337", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Morrison", - "company": "Orthomedia", - "phone": "837-432-2402", - "email": "riley@orthomedia.com" - }, - { - "id": 5136, - "guid": "c4db7f8c-ab81-4ac5-bbab-6d11acecd027", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Day", - "company": "Conrama", - "phone": "885-473-3976", - "email": "elizabeth@conrama.com" - }, - { - "id": 5137, - "guid": "f01fbfa4-caa4-4cd2-9d78-6ed8e555752e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Gate", - "company": "Cryptotegrity", - "phone": "892-435-3486", - "email": "melanie@cryptotegrity.com" - }, - { - "id": 5138, - "guid": "d7624322-097f-4468-becf-973c70029994", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Charlotte Thorndike", - "company": "Dynarama", - "phone": "809-467-2554", - "email": "charlotte@dynarama.com" - }, - { - "id": 5139, - "guid": "c21bd991-6137-4473-ae92-309c58690960", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Smith", - "company": "InfoAirway", - "phone": "845-484-2792", - "email": "rachel@infoairway.com" - }, - { - "id": 5140, - "guid": "b44e5bb5-16e3-4aad-9a11-b8ae826f1d89", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Bush", - "company": "eSteganoergy", - "phone": "804-579-2794", - "email": "ariana@esteganoergy.com" - }, - { - "id": 5141, - "guid": "64585567-613e-4d57-a0f8-d2204d5e4bbe", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Miln", - "company": "Netseco", - "phone": "810-483-3613", - "email": "addison@netseco.com" - }, - { - "id": 5142, - "guid": "61278c94-b616-489c-8368-25620a9dab58", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Crossman", - "company": "Titanirola", - "phone": "888-467-2924", - "email": "leah@titanirola.com" - }, - { - "id": 5143, - "guid": "c1df0f18-83dd-4d35-90db-73f910f13e9f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Oswald", - "company": "Compuamerica", - "phone": "896-473-3891", - "email": "mackenzie@compuamerica.com" - }, - { - "id": 5144, - "guid": "96bae1c8-0e0a-464f-adaf-2b6eea157430", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Gate", - "company": "Infragraph", - "phone": "881-467-2703", - "email": "zoe@infragraph.com" - }, - { - "id": 5145, - "guid": "98cf2020-e264-4257-8af6-f0b77db31b15", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Hardman", - "company": "Airdyne", - "phone": "830-505-2683", - "email": "melanie@airdyne.com" - }, - { - "id": 5146, - "guid": "ebf0e408-4f6b-4a76-9199-1307c60021f7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alyssa Oldman", - "company": "US Infratouch", - "phone": "844-536-2463", - "email": "alyssa@us infratouch.com" - }, - { - "id": 5147, - "guid": "a3dd9849-7b96-43e1-86c7-7fd1480a0267", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Hancock", - "company": "Cryptotemplate", - "phone": "811-594-2760", - "email": "sarah@cryptotemplate.com" - }, - { - "id": 5148, - "guid": "9cdd353e-113d-44a8-aab9-1351d92fd9e7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Fisher", - "company": "Multitiqua", - "phone": "857-418-3928", - "email": "trinity@multitiqua.com" - }, - { - "id": 5149, - "guid": "c9b6595c-bc4a-4fcb-a0bc-22620964cd2f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Galbraith", - "company": "Fibrotouch", - "phone": "807-472-2415", - "email": "sarah@fibrotouch.com" - }, - { - "id": 5150, - "guid": "09dc95b9-f963-4728-94d2-93470699dd38", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Brooks", - "company": "Fibrotopia", - "phone": "877-457-2772", - "email": "emily@fibrotopia.com" - }, - { - "id": 5151, - "guid": "62dba11c-c058-4c43-bb19-dafe41b5c407", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Goldman", - "company": "Enlogia", - "phone": "851-500-2346", - "email": "kylie@enlogia.com" - }, - { - "id": 5152, - "guid": "3dd33288-ca88-49e6-ab31-35d12154e365", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Galbraith", - "company": "Interliant", - "phone": "813-472-2257", - "email": "serenity@interliant.com" - }, - { - "id": 5153, - "guid": "6749a6a0-c1ee-4d55-af82-94bb014798fe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Galbraith", - "company": "Fibrotopia", - "phone": "859-426-3136", - "email": "caroline@fibrotopia.com" - }, - { - "id": 5154, - "guid": "063a6981-a175-441e-8ae0-7454ef522d78", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Morrison", - "company": "Syssoft", - "phone": "875-518-2556", - "email": "rachel@syssoft.com" - }, - { - "id": 5155, - "guid": "a42b7405-0f76-4590-b9d4-ba83e636293d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Creighton", - "company": "Robotemplate", - "phone": "898-441-2376", - "email": "allison@robotemplate.com" - }, - { - "id": 5156, - "guid": "3cbe622f-cde1-45fa-bf53-611972d008dc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Sheldon", - "company": "Netsystems", - "phone": "888-474-3924", - "email": "isabella@netsystems.com" - }, - { - "id": 5157, - "guid": "8841224e-9720-4f3b-938e-80f56516094d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Murphy", - "company": "Syssoft", - "phone": "857-461-3838", - "email": "sophie@syssoft.com" - }, - { - "id": 5158, - "guid": "f777ca89-74ff-46b7-93f1-3567555781b3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Gill", - "company": "Interliant", - "phone": "858-570-2167", - "email": "claire@interliant.com" - }, - { - "id": 5159, - "guid": "aec27cfd-7030-4371-8fc7-9d23d5a62d96", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Chesterton", - "company": "Nanobanc", - "phone": "888-572-3667", - "email": "kylie@nanobanc.com" - }, - { - "id": 5160, - "guid": "6f956ebc-04c7-4d0a-9ef2-1d45de24a6f6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila Abramson", - "company": "Ameritron", - "phone": "831-496-2721", - "email": "camila@ameritron.com" - }, - { - "id": 5161, - "guid": "b1c74aa9-6375-4147-93e4-b3d66cac4d01", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Watson", - "company": "Unologic", - "phone": "809-547-2397", - "email": "anna@unologic.com" - }, - { - "id": 5162, - "guid": "0d2e9063-53e4-4c78-a512-b7cbcc91e2ed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Mercer", - "company": "Hypervaco", - "phone": "890-567-2955", - "email": "rachel@hypervaco.com" - }, - { - "id": 5163, - "guid": "393d461a-7037-4420-bdbe-d56825d17662", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Carey", - "company": "Skydata", - "phone": "836-545-2296", - "email": "bailey@skydata.com" - }, - { - "id": 5164, - "guid": "b569b3b1-2527-4e05-b6d6-c17a56fc4b2f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Neal", - "company": "SysUSA", - "phone": "866-559-2364", - "email": "ella@sysusa.com" - }, - { - "id": 5165, - "guid": "34ea3607-f762-440b-954a-64297255c988", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Young", - "company": "Netseco", - "phone": "889-591-3804", - "email": "sophia@netseco.com" - }, - { - "id": 5166, - "guid": "2d7913d6-af3c-4ba0-80ea-e7fbd45ef276", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Turner", - "company": "SysVenamerica", - "phone": "812-560-3205", - "email": "layla@sysvenamerica.com" - }, - { - "id": 5167, - "guid": "a9e71308-80cc-4eee-9b0c-93b8ca8da12f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Angelina Calhoun", - "company": "iMedconik", - "phone": "820-529-2622", - "email": "angelina@imedconik.com" - }, - { - "id": 5168, - "guid": "72715f97-a5c0-461a-9e10-d49d00676980", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emily Ford", - "company": "Quintegrity", - "phone": "827-551-2818", - "email": "emily@quintegrity.com" - }, - { - "id": 5169, - "guid": "7e2f5c37-f9bc-45e9-ad33-42eb209398b2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Turner", - "company": "Orthomedia", - "phone": "859-443-2984", - "email": "mariah@orthomedia.com" - }, - { - "id": 5170, - "guid": "cd1b1c88-182e-45ed-9f6e-b559a9e6054b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Neal", - "company": "Generola", - "phone": "859-552-2774", - "email": "lily@generola.com" - }, - { - "id": 5171, - "guid": "bd411668-c83a-4a1b-9dce-63f65d924d07", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Victoria Milton", - "company": "Textiqua", - "phone": "892-550-3006", - "email": "victoria@textiqua.com" - }, - { - "id": 5172, - "guid": "5a00b3d2-a1bb-4cd0-ad1d-b5ea6b1dac5f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madelyn Wainwright", - "company": "Jamrola", - "phone": "822-581-3534", - "email": "madelyn@jamrola.com" - }, - { - "id": 5173, - "guid": "fa1056de-fdc4-4ca2-aa17-15646b996eaf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maria Hodges", - "company": "Genland", - "phone": "833-534-3690", - "email": "maria@genland.com" - }, - { - "id": 5174, - "guid": "f8a209b1-a52b-4f5c-946d-69ded94bb2f5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Nathan", - "company": "Transtouch", - "phone": "869-420-3867", - "email": "paige@transtouch.com" - }, - { - "id": 5175, - "guid": "e7727fd4-1efa-4b65-a55a-f1b41b239518", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Croftoon", - "company": "Polytheon", - "phone": "876-557-2371", - "email": "lillian@polytheon.com" - }, - { - "id": 5176, - "guid": "78390244-00ed-495b-b372-7db7ad11d48e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Day", - "company": "Xeicon", - "phone": "853-550-3997", - "email": "vanessa@xeicon.com" - }, - { - "id": 5177, - "guid": "78ecd9b7-93eb-4478-9bf3-74cfbf865348", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Walkman", - "company": "Techtron", - "phone": "811-569-2945", - "email": "vanessa@techtron.com" - }, - { - "id": 5178, - "guid": "3bcbf3d4-09d8-4ff4-89bb-4aacd51efe7a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mia Vance", - "company": "OpKeycomm", - "phone": "875-510-3830", - "email": "mia@opkeycomm.com" - }, - { - "id": 5179, - "guid": "fafc7faa-2708-450d-87c7-5c8973dafd94", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Stanley", - "company": "Mescaridic", - "phone": "884-538-3656", - "email": "alexis@mescaridic.com" - }, - { - "id": 5180, - "guid": "10aef799-55e7-43d3-b06a-7145a0d4df8c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Young", - "company": "Navivacs", - "phone": "898-475-2465", - "email": "molly@navivacs.com" - }, - { - "id": 5181, - "guid": "ce49ccc6-3521-4a3b-908b-5be4bfa2ad8d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Gilmore", - "company": "Titanigraf", - "phone": "874-572-3588", - "email": "hailey@titanigraf.com" - }, - { - "id": 5182, - "guid": "30b25af9-fe32-4160-9988-692cd789a21d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Vance", - "company": "Truetomic", - "phone": "867-431-2200", - "email": "vanessa@truetomic.com" - }, - { - "id": 5183, - "guid": "2e9f1f6e-11e8-4ecd-a2c0-fd69b4bf5585", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia Nelson", - "company": "Mescaridic", - "phone": "880-464-2798", - "email": "sophia@mescaridic.com" - }, - { - "id": 5184, - "guid": "d297fe8c-4a6e-40fd-afc9-d4c1114e22da", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sydney Campbell", - "company": "Fibrotouch", - "phone": "880-575-2667", - "email": "sydney@fibrotouch.com" - }, - { - "id": 5185, - "guid": "055eed7c-a286-4aea-9713-eaf9d5ac5e5e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Day", - "company": "Netseco", - "phone": "814-429-2484", - "email": "paige@netseco.com" - }, - { - "id": 5186, - "guid": "4828b260-ef98-4825-abd2-1603ac251520", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Timmons", - "company": "Robotemplate", - "phone": "892-551-3208", - "email": "ariana@robotemplate.com" - }, - { - "id": 5187, - "guid": "c8314286-0654-483d-9ef6-196af9a4bde3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Morrison", - "company": "Rapigrafix", - "phone": "835-439-3986", - "email": "gabrielle@rapigrafix.com" - }, - { - "id": 5188, - "guid": "a93e8805-c8e7-4fde-89d8-233552e4f108", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Adamson", - "company": "Thermotomic", - "phone": "835-560-3019", - "email": "eva@thermotomic.com" - }, - { - "id": 5189, - "guid": "18f5f077-493b-4e5b-a5c2-30bb56b2f809", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Gibbs", - "company": "Generola", - "phone": "811-549-2605", - "email": "angelina@generola.com" - }, - { - "id": 5190, - "guid": "ac9d0966-58d8-4be6-816c-8662315c04ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Molligan", - "company": "Unconix", - "phone": "884-589-3975", - "email": "emma@unconix.com" - }, - { - "id": 5191, - "guid": "876a5238-4599-4cfe-bd9b-083e0855b67d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison Morrison", - "company": "Robotomic", - "phone": "888-424-2804", - "email": "addison@robotomic.com" - }, - { - "id": 5192, - "guid": "d02c9de4-1121-49e4-8e71-b3a92f6c6f73", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoey Morrison", - "company": "US Omnigraphik", - "phone": "860-583-3611", - "email": "zoey@us omnigraphik.com" - }, - { - "id": 5193, - "guid": "592e2569-b9f3-4377-b24a-29806e17b5de", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Cramer", - "company": "Technogra", - "phone": "887-528-2636", - "email": "lily@technogra.com" - }, - { - "id": 5194, - "guid": "c4c242bf-5451-4c5b-8103-3be0443e1fe3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Crossman", - "company": "Anaframe", - "phone": "847-597-3681", - "email": "lauren@anaframe.com" - }, - { - "id": 5195, - "guid": "2f6dee35-8c83-4e36-8057-a09a6e6e85ce", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Bush", - "company": "Fibrotopia", - "phone": "820-513-3461", - "email": "serenity@fibrotopia.com" - }, - { - "id": 5196, - "guid": "b6ba7062-0659-4bef-95b0-d028740a7b6f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Milton", - "company": "Orthosoft", - "phone": "879-474-2624", - "email": "caroline@orthosoft.com" - }, - { - "id": 5197, - "guid": "f9b9b890-fbd6-4388-98de-d695a3feb21b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Elizabeth Campbell", - "company": "Unologic", - "phone": "846-527-3623", - "email": "elizabeth@unologic.com" - }, - { - "id": 5198, - "guid": "bf11469b-d0ed-4120-b9dc-dae461fcc143", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana WifKinson", - "company": "Netseco", - "phone": "853-519-2343", - "email": "ariana@netseco.com" - }, - { - "id": 5199, - "guid": "35e54363-cc17-4b27-a5be-3caa81ef760d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Molly Smith", - "company": "Sontopia", - "phone": "893-563-3128", - "email": "molly@sontopia.com" - }, - { - "id": 5200, - "guid": "c545315a-bd6f-41bc-8f03-e94c24d6019f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Hancock", - "company": "Techtron", - "phone": "858-537-3584", - "email": "katelyn@techtron.com" - }, - { - "id": 5201, - "guid": "5b2d6d7b-5b84-4f1c-bd9b-f637b7c9eac4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Otis", - "company": "Xeicon", - "phone": "899-448-3660", - "email": "molly@xeicon.com" - }, - { - "id": 5202, - "guid": "41144c7f-7e54-42a6-8f44-9e73ee4f3cd3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Carrington", - "company": "RoboAerlogix", - "phone": "885-560-3448", - "email": "chloe@roboaerlogix.com" - }, - { - "id": 5203, - "guid": "9e240705-6b4d-4d51-a45f-65f37b6b4d7a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Adamson", - "company": "iQualcar", - "phone": "852-413-3911", - "email": "camila@iqualcar.com" - }, - { - "id": 5204, - "guid": "b2a967db-cf66-4936-988e-95ef5b374b97", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Brickman", - "company": "RoboAerlogix", - "phone": "894-445-3060", - "email": "isabelle@roboaerlogix.com" - }, - { - "id": 5205, - "guid": "be666de5-1e8e-47c4-9bd4-7b552156cce6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Oswald", - "company": "Hypervaco", - "phone": "850-479-3223", - "email": "mariah@hypervaco.com" - }, - { - "id": 5206, - "guid": "10f481fb-8350-45d4-9690-8c3ac7ce5bc1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Gerald", - "company": "Netseco", - "phone": "820-484-3019", - "email": "amelia@netseco.com" - }, - { - "id": 5207, - "guid": "f98daf87-2756-4446-8920-a5652d5eee4b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Melanie Nash", - "company": "Ameritron", - "phone": "806-517-2534", - "email": "melanie@ameritron.com" - }, - { - "id": 5208, - "guid": "7ae7e8e6-6605-41b8-8ffe-44f4575a3034", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brianna Timmons", - "company": "Mescaridic", - "phone": "859-564-3170", - "email": "brianna@mescaridic.com" - }, - { - "id": 5209, - "guid": "af1059b8-0ec3-4cd5-be91-55ab21e98f52", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Smith", - "company": "Turbomart", - "phone": "863-512-2968", - "email": "victoria@turbomart.com" - }, - { - "id": 5210, - "guid": "63309d49-ad24-4dbd-ad62-9045f477ded1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Adamson", - "company": "Proline", - "phone": "880-491-3686", - "email": "makayla@proline.com" - }, - { - "id": 5211, - "guid": "3de29741-312f-4be9-91ae-08ad56d2b5c6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Chesterton", - "company": "Entcast", - "phone": "823-450-2065", - "email": "alexandra@entcast.com" - }, - { - "id": 5212, - "guid": "98909aaf-10db-4958-ba17-0ff43c82b572", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ashley Timmons", - "company": "eSteganoergy", - "phone": "875-458-3323", - "email": "ashley@esteganoergy.com" - }, - { - "id": 5213, - "guid": "7c3daee7-d17f-4f16-af4d-b9ef8381bb53", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Gate", - "company": "Idmax", - "phone": "844-596-2334", - "email": "valeria@idmax.com" - }, - { - "id": 5214, - "guid": "ed0fba07-e84d-4f2e-a936-c422f76d6eba", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Ford", - "company": "Pacwest", - "phone": "805-581-2201", - "email": "madelyn@pacwest.com" - }, - { - "id": 5215, - "guid": "c7e3dd3e-2178-4cba-ab08-7babf40225f3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Daniels", - "company": "Videobanc", - "phone": "800-502-2838", - "email": "layla@videobanc.com" - }, - { - "id": 5216, - "guid": "52892960-22ff-4c66-8016-6786a55dc6f3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Otis", - "company": "Idmax", - "phone": "886-457-2448", - "email": "mackenzie@idmax.com" - }, - { - "id": 5217, - "guid": "22f3767a-80aa-4073-8f3c-f117e0028af3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Freeman", - "company": "Rapigrafix", - "phone": "887-547-3344", - "email": "zoey@rapigrafix.com" - }, - { - "id": 5218, - "guid": "7aa517a0-347c-43a2-8dd7-4953319c4039", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Gibbs", - "company": "Conrama", - "phone": "866-593-2856", - "email": "khloe@conrama.com" - }, - { - "id": 5219, - "guid": "4f342774-d532-4910-8fa9-e887d25746ec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Carter", - "company": "iOptystix", - "phone": "896-404-3472", - "email": "destiny@ioptystix.com" - }, - { - "id": 5220, - "guid": "fa009b75-a3d4-4f2e-b9e2-525bcb8b857c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Addison Miers", - "company": "iSkyvaco", - "phone": "843-411-3503", - "email": "addison@iskyvaco.com" - }, - { - "id": 5221, - "guid": "59a3e223-4e09-4550-b735-0db001147f4c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Leah Nelson", - "company": "Celgra", - "phone": "894-490-3980", - "email": "leah@celgra.com" - }, - { - "id": 5222, - "guid": "8af297fc-9337-4f13-a0ad-94093bd66c93", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton White", - "company": "Jamrola", - "phone": "885-492-2642", - "email": "peyton@jamrola.com" - }, - { - "id": 5223, - "guid": "6b33451e-493c-4753-9fa2-d3021b26b7f4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Haig", - "company": "Allphysiche", - "phone": "861-425-2345", - "email": "olivia@allphysiche.com" - }, - { - "id": 5224, - "guid": "4db541c0-2fc4-446f-8cfb-cc52b650d183", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Miller", - "company": "Ameritron", - "phone": "870-573-3827", - "email": "madelyn@ameritron.com" - }, - { - "id": 5225, - "guid": "72a75333-eb34-400f-815d-674e1f8aea43", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Carroll", - "company": "Unologic", - "phone": "816-549-2259", - "email": "riley@unologic.com" - }, - { - "id": 5226, - "guid": "f1798469-34df-4b48-b5d5-3545aaa8865a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Molligan", - "company": "Ventanium", - "phone": "855-460-3886", - "email": "zoe@ventanium.com" - }, - { - "id": 5227, - "guid": "ab24f689-5e12-42af-a1aa-f76c0d87fff4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Cramer", - "company": "Truetomic", - "phone": "850-449-2401", - "email": "addison@truetomic.com" - }, - { - "id": 5228, - "guid": "0daf5590-4c68-4068-8714-3f42e733390a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Carey", - "company": "Polytheon", - "phone": "887-576-2967", - "email": "katelyn@polytheon.com" - }, - { - "id": 5229, - "guid": "562982aa-bc1b-4541-a1f8-0d334805ecc2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sarah Gilbert", - "company": "Conrama", - "phone": "891-444-3564", - "email": "sarah@conrama.com" - }, - { - "id": 5230, - "guid": "b3a7725a-0ac3-4d6b-aca1-4c4a6f2e1e75", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Winter", - "company": "Orthomedia", - "phone": "850-591-2742", - "email": "hailey@orthomedia.com" - }, - { - "id": 5231, - "guid": "117c5b61-a661-4c6b-8ef7-e46e86f1ef4b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Carter", - "company": "Jamrola", - "phone": "802-556-2551", - "email": "molly@jamrola.com" - }, - { - "id": 5232, - "guid": "179d5392-6d93-444c-b2ee-42d901eb7510", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lillian Smith", - "company": "Anagraph", - "phone": "870-520-3350", - "email": "lillian@anagraph.com" - }, - { - "id": 5233, - "guid": "7a5c2f51-8a7e-4f41-a884-ec04500748ff", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alyssa Hamphrey", - "company": "Westmedia", - "phone": "884-446-3008", - "email": "alyssa@westmedia.com" - }, - { - "id": 5234, - "guid": "2b45320a-1b9c-4775-853b-66a88da9336c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Timmons", - "company": "Allnet", - "phone": "836-520-2538", - "email": "brianna@allnet.com" - }, - { - "id": 5235, - "guid": "6c611736-ce55-46b5-b3c8-2d5e83f0431d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Gill", - "company": "Allnet", - "phone": "822-443-3051", - "email": "alexa@allnet.com" - }, - { - "id": 5236, - "guid": "8489fce3-da32-4d9f-9aab-c8f0d7118901", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Carrington", - "company": "Ameritron", - "phone": "820-455-2617", - "email": "angelina@ameritron.com" - }, - { - "id": 5237, - "guid": "282ecc0d-bf0f-454f-a8bf-2b0013c2356a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Day", - "company": "Genland", - "phone": "839-531-2725", - "email": "kaylee@genland.com" - }, - { - "id": 5238, - "guid": "72658b38-2622-4f33-8d0e-a2e5edb70871", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katelyn Galbraith", - "company": "Raylog", - "phone": "870-587-3087", - "email": "katelyn@raylog.com" - }, - { - "id": 5239, - "guid": "9fa7d464-af08-41a9-ac41-1b3c1fdeb8fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Abramson", - "company": "Orthosoft", - "phone": "885-538-2875", - "email": "aaliyah@orthosoft.com" - }, - { - "id": 5240, - "guid": "7dd6baae-eddf-4476-8910-94c17dab7f8b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Chandter", - "company": "Sontopia", - "phone": "818-417-2736", - "email": "samantha@sontopia.com" - }, - { - "id": 5241, - "guid": "82c1f185-220a-415c-bf4b-ceca60ca3abc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Murphy", - "company": "Fibroserve", - "phone": "866-587-3720", - "email": "genesis@fibroserve.com" - }, - { - "id": 5242, - "guid": "6fc61e61-4ebc-421b-b6ff-b328c531dab5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ella Nelson", - "company": "Allphysiche", - "phone": "824-584-3811", - "email": "ella@allphysiche.com" - }, - { - "id": 5243, - "guid": "12807a3a-d035-4c49-99b8-741feb606f1d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Davidson", - "company": "Systheon", - "phone": "856-578-2015", - "email": "khloe@systheon.com" - }, - { - "id": 5244, - "guid": "63b5fef7-5f17-4d7d-b2b6-0c017d4ddf70", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Webster", - "company": "Unologic", - "phone": "852-567-3591", - "email": "emily@unologic.com" - }, - { - "id": 5245, - "guid": "9ec68329-ee5f-4274-9709-2e93bb916bff", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Milton", - "company": "Fibrotopia", - "phone": "848-574-3004", - "email": "kaitlyn@fibrotopia.com" - }, - { - "id": 5246, - "guid": "1e8f838e-2a79-4af4-9b54-40fa99c50bd6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Oliver", - "company": "US Omnigraphik", - "phone": "869-503-3425", - "email": "destiny@us omnigraphik.com" - }, - { - "id": 5247, - "guid": "e6c8e131-4460-42ae-b11a-db1c6a4597b9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabriella Warren", - "company": "Celgra", - "phone": "855-564-3036", - "email": "gabriella@celgra.com" - }, - { - "id": 5248, - "guid": "2711dc45-5d3e-48ae-b41e-7308b86e9f4e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Abramson", - "company": "Titanirola", - "phone": "833-487-2568", - "email": "olivia@titanirola.com" - }, - { - "id": 5249, - "guid": "048e3dd8-ceb8-4e8d-9444-da719f390037", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Carrington", - "company": "Cryptotemplate", - "phone": "802-590-2456", - "email": "mackenzie@cryptotemplate.com" - }, - { - "id": 5250, - "guid": "23ec17d6-37c5-41ef-a92a-5017b2f0d257", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Brooks", - "company": "Titanigraf", - "phone": "814-487-3845", - "email": "maria@titanigraf.com" - }, - { - "id": 5251, - "guid": "891c2264-e62a-4c97-9fd2-2045ba54594d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Ward", - "company": "Aprama", - "phone": "881-426-3534", - "email": "jocelyn@aprama.com" - }, - { - "id": 5252, - "guid": "d0dc7736-acf7-445d-b90a-30f72aff9754", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Stanley", - "company": "iMedconik", - "phone": "884-419-3434", - "email": "grace@imedconik.com" - }, - { - "id": 5253, - "guid": "dbddfa92-a688-4e67-a427-8aae04af822f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Gilmore", - "company": "Navivacs", - "phone": "817-535-2337", - "email": "mia@navivacs.com" - }, - { - "id": 5254, - "guid": "4539dee4-61af-488b-ab95-738e9732be8f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Caroline Gardner", - "company": "Conotomics", - "phone": "843-515-3432", - "email": "caroline@conotomics.com" - }, - { - "id": 5255, - "guid": "3c52a40b-d312-4865-aa6a-3068331b7b48", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Walkman", - "company": "Interliant", - "phone": "853-429-2531", - "email": "serenity@interliant.com" - }, - { - "id": 5256, - "guid": "a34a7fe8-8ea5-4c35-8ec4-fc8349f3416f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Higgins", - "company": "Multitiqua", - "phone": "890-565-2345", - "email": "katelyn@multitiqua.com" - }, - { - "id": 5257, - "guid": "12792876-43a2-403b-87df-e63935e20ef7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Chesterton", - "company": "Anaframe", - "phone": "869-552-2039", - "email": "taylor@anaframe.com" - }, - { - "id": 5258, - "guid": "8f0355c2-b76a-4d2b-9d26-558cbcabc9f4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Thorndike", - "company": "Xeicon", - "phone": "868-412-2799", - "email": "sophia@xeicon.com" - }, - { - "id": 5259, - "guid": "45ae20db-189b-4a24-ada7-3ea5e91ca612", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Sheldon", - "company": "Truetomic", - "phone": "855-441-3932", - "email": "audrey@truetomic.com" - }, - { - "id": 5260, - "guid": "d07a1228-945a-4ff9-8b56-6e67b16ed64e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Anna Waller", - "company": "Navivacs", - "phone": "805-525-2452", - "email": "anna@navivacs.com" - }, - { - "id": 5261, - "guid": "15c7d668-7f62-4966-b753-521bf9950f22", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Gilmore", - "company": "Fibrotopia", - "phone": "819-572-2602", - "email": "khloe@fibrotopia.com" - }, - { - "id": 5262, - "guid": "914cb678-f713-491f-b236-3db9209e1c79", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Hodges", - "company": "iOptystix", - "phone": "818-564-3216", - "email": "caroline@ioptystix.com" - }, - { - "id": 5263, - "guid": "b65a93f7-a4ae-4481-a262-dcdd43e1a716", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Turner", - "company": "Keytheon", - "phone": "854-590-3261", - "email": "alexa@keytheon.com" - }, - { - "id": 5264, - "guid": "57514d2a-51b2-4283-9662-14b4a7f3d799", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Wesley", - "company": "Inridium", - "phone": "818-425-2541", - "email": "gabrielle@inridium.com" - }, - { - "id": 5265, - "guid": "5a4515a6-c65a-4355-a334-a42c9eb1b4b4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Bush", - "company": "Fibrotopia", - "phone": "857-424-3916", - "email": "mia@fibrotopia.com" - }, - { - "id": 5266, - "guid": "2f8a73f6-b0f2-41f9-8111-7fe5c34a78f4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Michaelson", - "company": "Inridium", - "phone": "873-559-2181", - "email": "isabelle@inridium.com" - }, - { - "id": 5267, - "guid": "5547b3e3-fcc0-42b4-8017-ce28dc7eea9a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Chandter", - "company": "Unologic", - "phone": "883-431-3919", - "email": "madison@unologic.com" - }, - { - "id": 5268, - "guid": "91314eee-b54c-46c8-b638-5bd9fad2c925", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Michaelson", - "company": "Xeicon", - "phone": "822-544-3724", - "email": "aaliyah@xeicon.com" - }, - { - "id": 5269, - "guid": "59b477a1-1238-462d-b33e-bdbae7ae273e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Brown", - "company": "SysVenamerica", - "phone": "878-582-2026", - "email": "brooke@sysvenamerica.com" - }, - { - "id": 5270, - "guid": "2f9798aa-eb7e-4c4f-828c-e1d58d7e2b0e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Hancock", - "company": "Multitiqua", - "phone": "844-542-2611", - "email": "valeria@multitiqua.com" - }, - { - "id": 5271, - "guid": "c5fb4c56-8d88-4f33-8c18-2e160a6594bc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Gilbert", - "company": "Teknoplexon", - "phone": "853-504-2749", - "email": "zoe@teknoplexon.com" - }, - { - "id": 5272, - "guid": "5d0ad42a-ce94-466a-96f6-fd831dd66380", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Hancock", - "company": "Orthomedia", - "phone": "817-577-3959", - "email": "emma@orthomedia.com" - }, - { - "id": 5273, - "guid": "081eb32d-313b-4ef4-bc01-689ca22bcffa", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Young", - "company": "Unconix", - "phone": "839-402-3026", - "email": "jasmine@unconix.com" - }, - { - "id": 5274, - "guid": "df40e4e6-b707-421f-9f5a-c2ee6f63af2e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Molligan", - "company": "Teknoplexon", - "phone": "802-515-3409", - "email": "grace@teknoplexon.com" - }, - { - "id": 5275, - "guid": "127f8f19-40f2-475f-b283-a7c2c63901c0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Cramer", - "company": "Qualserve", - "phone": "815-574-2967", - "email": "ashley@qualserve.com" - }, - { - "id": 5276, - "guid": "eb258dc0-44ea-4956-aff9-a39f8c6271c1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Ford", - "company": "Netseco", - "phone": "889-541-3818", - "email": "ella@netseco.com" - }, - { - "id": 5277, - "guid": "105997d4-65b9-445e-b1c6-1c407f46592e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Higgins", - "company": "iEnland", - "phone": "808-570-2791", - "email": "maya@ienland.com" - }, - { - "id": 5278, - "guid": "31baa8b0-132c-4c95-9b90-adabcd4f4d4e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Oldridge", - "company": "Allnet", - "phone": "894-537-2131", - "email": "alexis@allnet.com" - }, - { - "id": 5279, - "guid": "a79d1d9e-94bd-49c9-9e9c-e588adf64aa3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Gill", - "company": "Pericenta", - "phone": "894-428-3448", - "email": "sophia@pericenta.com" - }, - { - "id": 5280, - "guid": "67c43390-c153-4df7-8c01-0533ac7c2491", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Ward", - "company": "Venconix", - "phone": "875-423-2252", - "email": "lauren@venconix.com" - }, - { - "id": 5281, - "guid": "834818ee-ca7c-40e9-b633-f86d90afd098", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Campbell", - "company": "Netsystems", - "phone": "853-593-3626", - "email": "payton@netsystems.com" - }, - { - "id": 5282, - "guid": "502f8fa7-121b-43fc-89d5-6716dc4dc089", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Conors", - "company": "Navivacs", - "phone": "856-496-3714", - "email": "kaylee@navivacs.com" - }, - { - "id": 5283, - "guid": "e9348ca2-13c5-49b2-b51c-ea96b3cf4fc9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Mercer", - "company": "Rapigrafix", - "phone": "860-587-3165", - "email": "valeria@rapigrafix.com" - }, - { - "id": 5284, - "guid": "43a25314-e31d-4208-b201-70aa9b47bdca", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Carey", - "company": "Entcast", - "phone": "868-593-2159", - "email": "eva@entcast.com" - }, - { - "id": 5285, - "guid": "d51270c8-798c-4dba-8c62-5cfb9b994037", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Murphy", - "company": "Unologic", - "phone": "848-522-3682", - "email": "eva@unologic.com" - }, - { - "id": 5286, - "guid": "8a44782e-7e0c-4c27-ac8f-fea35a4d479c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Michaelson", - "company": "Pericenta", - "phone": "835-429-3018", - "email": "bailey@pericenta.com" - }, - { - "id": 5287, - "guid": "5438fa56-d72f-489f-825c-b4e99404281c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Bush", - "company": "InfoAirway", - "phone": "805-568-3198", - "email": "khloe@infoairway.com" - }, - { - "id": 5288, - "guid": "c04df62a-374a-42cf-ad43-1b710773a872", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Claire Day", - "company": "Compuamerica", - "phone": "852-432-3445", - "email": "claire@compuamerica.com" - }, - { - "id": 5289, - "guid": "2377e5ac-c06e-4a46-a740-3ce2bfe5e542", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Hodges", - "company": "Qualserve", - "phone": "834-409-2790", - "email": "angelina@qualserve.com" - }, - { - "id": 5290, - "guid": "3a3578ab-ced1-46b8-86ca-ec7c044c4af9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Sherlock", - "company": "Technogra", - "phone": "860-576-2397", - "email": "riley@technogra.com" - }, - { - "id": 5291, - "guid": "f0358ed5-54c4-4e48-adcf-eeb81889e919", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Hardman", - "company": "eEyetanic", - "phone": "887-509-2777", - "email": "jasmine@eeyetanic.com" - }, - { - "id": 5292, - "guid": "f3243e09-c2ae-4a3b-9712-98f29128ccf8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kayla Chapman", - "company": "Cryptotegrity", - "phone": "836-435-2097", - "email": "kayla@cryptotegrity.com" - }, - { - "id": 5293, - "guid": "e62e5d97-47f7-42e8-9e09-4b71c35db46a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Higgins", - "company": "Celgra", - "phone": "838-404-2954", - "email": "julia@celgra.com" - }, - { - "id": 5294, - "guid": "7297b065-9780-4caf-b7dc-43436202728e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Gilson", - "company": "Genland", - "phone": "802-488-3384", - "email": "sarah@genland.com" - }, - { - "id": 5295, - "guid": "688f522b-3c23-4c3a-b34e-6d096c7aa23b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maya Ford", - "company": "Allphysiche", - "phone": "890-494-2940", - "email": "maya@allphysiche.com" - }, - { - "id": 5296, - "guid": "05f086f5-8412-422f-84a1-e8f24df44dd0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ashley Thorndike", - "company": "SysUSA", - "phone": "863-496-2184", - "email": "ashley@sysusa.com" - }, - { - "id": 5297, - "guid": "f021fc14-bbe5-4bbe-ae76-a256e2a9b6e2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Hawkins", - "company": "Fibrotopia", - "phone": "880-416-3277", - "email": "jasmine@fibrotopia.com" - }, - { - "id": 5298, - "guid": "7d76b1c5-dbf7-4e9e-bf95-2a56ed1bfa4c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Carroll", - "company": "Netsystems", - "phone": "855-542-3320", - "email": "andrea@netsystems.com" - }, - { - "id": 5299, - "guid": "a788d21f-7752-4961-b4c2-cf1cd7fa18f7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Wesley", - "company": "Truegate", - "phone": "839-544-2450", - "email": "alexandra@truegate.com" - }, - { - "id": 5300, - "guid": "934b706a-e8c6-4f7d-8494-c39e1bc0b691", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Fulton", - "company": "Truetomic", - "phone": "897-562-2020", - "email": "mackenzie@truetomic.com" - }, - { - "id": 5301, - "guid": "1f739e9e-e29b-4e68-bcb1-b9567b968bc1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Hodges", - "company": "iQualcar", - "phone": "854-510-3232", - "email": "kaitlyn@iqualcar.com" - }, - { - "id": 5302, - "guid": "79b2b996-b0e3-4ff0-9265-f713bebb9698", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Riley Molligan", - "company": "Technogra", - "phone": "880-588-2834", - "email": "riley@technogra.com" - }, - { - "id": 5303, - "guid": "cabf7223-07d8-4583-831d-f79124ddba2c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Campbell", - "company": "iSkyvaco", - "phone": "818-518-3663", - "email": "isabelle@iskyvaco.com" - }, - { - "id": 5304, - "guid": "413db688-c567-4bde-a04d-70f72e575ba0", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Harrison", - "company": "Pericenta", - "phone": "810-434-2310", - "email": "mackenzie@pericenta.com" - }, - { - "id": 5305, - "guid": "34dcdd2f-8826-46e2-81c2-4488dfe36430", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Wood", - "company": "iQualcar", - "phone": "894-480-3331", - "email": "camila@iqualcar.com" - }, - { - "id": 5306, - "guid": "01f520c4-f734-4042-ab6d-d0cf7d46a9d0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Charlson", - "company": "Interliant", - "phone": "824-544-2886", - "email": "emily@interliant.com" - }, - { - "id": 5307, - "guid": "4627a455-a9bd-4d3d-a9ae-db055e93b6a3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Camila Sheldon", - "company": "Rapigrafix", - "phone": "810-509-3941", - "email": "camila@rapigrafix.com" - }, - { - "id": 5308, - "guid": "2fc4a7e3-cdb6-4bc1-b63c-09698f8b7cef", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Carey", - "company": "Robotemplate", - "phone": "858-512-3231", - "email": "zoey@robotemplate.com" - }, - { - "id": 5309, - "guid": "24afdd97-2f6f-425a-ac68-8a1bb65cedd9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Oliver", - "company": "Titanigraf", - "phone": "853-465-2807", - "email": "sarah@titanigraf.com" - }, - { - "id": 5310, - "guid": "f0eb731a-875d-47a5-8c0e-deeff3d8a1f5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Clapton", - "company": "Thermotomic", - "phone": "857-487-3169", - "email": "emily@thermotomic.com" - }, - { - "id": 5311, - "guid": "5bf7cc5f-65df-42f5-9972-1b37ebd8f749", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Oswald", - "company": "Netsystems", - "phone": "849-451-2709", - "email": "lily@netsystems.com" - }, - { - "id": 5312, - "guid": "4b488058-211d-4240-953d-088d1e50aa73", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Hoggarth", - "company": "Orthosoft", - "phone": "896-439-2184", - "email": "ella@orthosoft.com" - }, - { - "id": 5313, - "guid": "568a9ea3-6c15-43fd-a081-f74864acae75", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sophia Michaelson", - "company": "Cryptotemplate", - "phone": "803-458-3445", - "email": "sophia@cryptotemplate.com" - }, - { - "id": 5314, - "guid": "2b38f55a-2fc8-45ca-8e5d-4241c5f4ad71", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lillian Walkman", - "company": "Conrama", - "phone": "811-562-3749", - "email": "lillian@conrama.com" - }, - { - "id": 5315, - "guid": "1b8e450e-3b8e-4ba7-8919-a931adfc4cb3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Miln", - "company": "OpKeycomm", - "phone": "822-444-2968", - "email": "katherine@opkeycomm.com" - }, - { - "id": 5316, - "guid": "6ac9da77-202f-44a8-b739-8dfe697d9949", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Osborne", - "company": "Anaframe", - "phone": "815-487-3201", - "email": "chloe@anaframe.com" - }, - { - "id": 5317, - "guid": "c79f8b63-8e60-4d7a-b411-4bd48370b818", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Gilmore", - "company": "Teknoplexon", - "phone": "856-453-2004", - "email": "mariah@teknoplexon.com" - }, - { - "id": 5318, - "guid": "099dca3c-e72a-43f6-afc7-e37921c4da44", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Mercer", - "company": "InfoAirway", - "phone": "890-487-2135", - "email": "makayla@infoairway.com" - }, - { - "id": 5319, - "guid": "ef21e6c4-0642-46e6-9a98-8d68c99e1e96", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lillian Hoggarth", - "company": "Techtron", - "phone": "853-544-3988", - "email": "lillian@techtron.com" - }, - { - "id": 5320, - "guid": "3e0be006-faaf-46ad-bf9f-79efb615130f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaylee Calhoun", - "company": "Vencom", - "phone": "834-459-2790", - "email": "kaylee@vencom.com" - }, - { - "id": 5321, - "guid": "d6c27bce-f1af-477f-8cfa-6be8ebc41040", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Wallace", - "company": "Mescatron", - "phone": "853-446-2798", - "email": "ava@mescatron.com" - }, - { - "id": 5322, - "guid": "25185ff9-4647-414f-b8a1-69d243b961c5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mariah Neal", - "company": "Tekcar", - "phone": "893-559-3975", - "email": "mariah@tekcar.com" - }, - { - "id": 5323, - "guid": "7f248ada-6f11-4e25-b47a-c79763214a19", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Carey", - "company": "Interliant", - "phone": "888-510-3820", - "email": "arianna@interliant.com" - }, - { - "id": 5324, - "guid": "e8f73d00-929a-4b5b-849d-9fddf1610e4d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Miln", - "company": "Fibrotopia", - "phone": "856-423-2144", - "email": "savannah@fibrotopia.com" - }, - { - "id": 5325, - "guid": "10d62a92-f4e4-44a5-947c-d312f0c1f755", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Harrison", - "company": "SysVenamerica", - "phone": "872-510-2598", - "email": "claire@sysvenamerica.com" - }, - { - "id": 5326, - "guid": "7fb37391-3874-48b6-913c-aef0e5576830", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Hawkins", - "company": "Teratopia", - "phone": "869-498-3886", - "email": "valeria@teratopia.com" - }, - { - "id": 5327, - "guid": "0c8bccd4-d29d-432c-82e8-e22b3f2b7b8d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Youmans", - "company": "Tekcar", - "phone": "831-414-2196", - "email": "sophia@tekcar.com" - }, - { - "id": 5328, - "guid": "c2079824-ab6f-4bea-a9da-5d36d96fa1eb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Clapton", - "company": "Aprama", - "phone": "805-571-2887", - "email": "riley@aprama.com" - }, - { - "id": 5329, - "guid": "ff53f036-3b68-4401-b583-5ba67b5c3f4f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Wayne", - "company": "Allphysiche", - "phone": "842-435-3038", - "email": "kylie@allphysiche.com" - }, - { - "id": 5330, - "guid": "899bec12-2840-4e9f-95f7-4219436eb6ac", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alyssa Gustman", - "company": "Entcast", - "phone": "842-476-2452", - "email": "alyssa@entcast.com" - }, - { - "id": 5331, - "guid": "088a0e60-202d-4406-8a9b-b03e4d6759a5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Nelson", - "company": "Transtouch", - "phone": "891-591-2971", - "email": "mya@transtouch.com" - }, - { - "id": 5332, - "guid": "f812e62c-4572-430e-8eb5-d44348c12fb5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Higgins", - "company": "Infragraph", - "phone": "877-561-2376", - "email": "katelyn@infragraph.com" - }, - { - "id": 5333, - "guid": "4637201d-48f7-4caa-8328-ed195e609a73", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Vaughan", - "company": "Allnet", - "phone": "807-497-2257", - "email": "julia@allnet.com" - }, - { - "id": 5334, - "guid": "2361e87a-cdd9-4e9a-8cf0-fbc904a620dc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Chandter", - "company": "Thermotomic", - "phone": "852-495-3397", - "email": "ava@thermotomic.com" - }, - { - "id": 5335, - "guid": "08ea23f2-9ed2-4b9a-9d31-2ca09e95ed44", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna WifKinson", - "company": "Westtomik", - "phone": "870-528-2553", - "email": "anna@westtomik.com" - }, - { - "id": 5336, - "guid": "c8a81684-c732-48b6-b629-8e356b0d2fea", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Gerald", - "company": "Techtron", - "phone": "894-516-3648", - "email": "isabella@techtron.com" - }, - { - "id": 5337, - "guid": "aa3aaa85-437d-4c0a-b654-0e79daf45c78", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Chandter", - "company": "Jamrola", - "phone": "833-428-2196", - "email": "lauren@jamrola.com" - }, - { - "id": 5338, - "guid": "a53b2ad4-b39a-4818-8968-05de12f87982", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Murphy", - "company": "Orthomedia", - "phone": "800-503-2859", - "email": "ella@orthomedia.com" - }, - { - "id": 5339, - "guid": "cc30e2a5-9651-440f-b918-947ea4b1f1a3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hannah Carter", - "company": "Dynarama", - "phone": "850-554-2819", - "email": "hannah@dynarama.com" - }, - { - "id": 5340, - "guid": "5d1bf295-c0b4-4700-9da0-4c03b02c1d34", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Carter", - "company": "Videobanc", - "phone": "888-553-3099", - "email": "kayla@videobanc.com" - }, - { - "id": 5341, - "guid": "c193f2c2-4025-413f-b6d1-5c91172b6a77", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Watson", - "company": "Infragraph", - "phone": "850-541-2897", - "email": "ava@infragraph.com" - }, - { - "id": 5342, - "guid": "a1b75a43-7943-42f3-86fd-8f56104982f9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth Wallace", - "company": "Safetrust", - "phone": "894-499-2026", - "email": "elizabeth@safetrust.com" - }, - { - "id": 5343, - "guid": "ca9eabff-2ac2-4a34-b366-682e95a9e61e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Thornton", - "company": "Gigaura", - "phone": "809-508-2103", - "email": "alyssa@gigaura.com" - }, - { - "id": 5344, - "guid": "7a260d99-8732-4056-885e-c0363332a2fc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Warren", - "company": "Robotomic", - "phone": "857-439-3351", - "email": "alexandra@robotomic.com" - }, - { - "id": 5345, - "guid": "f5387007-aea4-4358-8814-b95b56c4a50f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooke Sheldon", - "company": "Rapigrafix", - "phone": "856-514-2556", - "email": "brooke@rapigrafix.com" - }, - { - "id": 5346, - "guid": "521471b7-37e7-4c66-8a5b-a72a0c9bd4f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Hancock", - "company": "iSkyvaco", - "phone": "840-524-3463", - "email": "ashley@iskyvaco.com" - }, - { - "id": 5347, - "guid": "ffe0515c-5132-4a25-adca-b996f46765c7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Wesley", - "company": "Allphysiche", - "phone": "899-514-2103", - "email": "kimberly@allphysiche.com" - }, - { - "id": 5348, - "guid": "515864d2-aba9-439e-8972-22da7671d227", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Brickman", - "company": "Airdyne", - "phone": "885-490-3724", - "email": "gabriella@airdyne.com" - }, - { - "id": 5349, - "guid": "28564fe1-ac8d-4758-af43-b76e80f25af0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Wayne", - "company": "Netseco", - "phone": "836-402-2919", - "email": "sarah@netseco.com" - }, - { - "id": 5350, - "guid": "2a8bd761-3de3-4f4f-9743-6c47159040fe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Wayne", - "company": "Conrama", - "phone": "859-496-3954", - "email": "audrey@conrama.com" - }, - { - "id": 5351, - "guid": "099a5d3e-f224-4031-801b-546fd4bbf7ff", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Sheldon", - "company": "Anaframe", - "phone": "868-478-2513", - "email": "trinity@anaframe.com" - }, - { - "id": 5352, - "guid": "f6716298-370a-4728-ac54-af53efd34ff1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Osborne", - "company": "Robotemplate", - "phone": "866-548-3911", - "email": "victoria@robotemplate.com" - }, - { - "id": 5353, - "guid": "9d989335-4957-4cd8-9f82-39c864fba199", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Smith", - "company": "eSteganoergy", - "phone": "835-424-2308", - "email": "molly@esteganoergy.com" - }, - { - "id": 5354, - "guid": "8b10bfa4-e413-470d-a8bc-5fed6b421c3a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Milton", - "company": "Safeagra", - "phone": "855-587-2973", - "email": "bella@safeagra.com" - }, - { - "id": 5355, - "guid": "051e1515-dbd4-4fe9-8d71-da31c6cb9537", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Waller", - "company": "Orthosoft", - "phone": "810-515-3540", - "email": "taylor@orthosoft.com" - }, - { - "id": 5356, - "guid": "02d180f9-1df6-434b-9404-a796df44c1a5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Ward", - "company": "Truetomic", - "phone": "810-584-3567", - "email": "charlotte@truetomic.com" - }, - { - "id": 5357, - "guid": "43485a4e-0426-4d5c-93f7-fe1273c3c8c9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Neal", - "company": "Steganoconiche", - "phone": "879-476-2672", - "email": "ella@steganoconiche.com" - }, - { - "id": 5358, - "guid": "85c2118f-5905-4982-91e4-27655aa9e7fb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Owen", - "company": "Nanobanc", - "phone": "821-522-2604", - "email": "charlotte@nanobanc.com" - }, - { - "id": 5359, - "guid": "15ae5cae-9d9f-417a-bc0f-85d0c1cbe6ae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Thorndike", - "company": "Thermotomic", - "phone": "841-502-2719", - "email": "anna@thermotomic.com" - }, - { - "id": 5360, - "guid": "02f422f2-a916-4e22-8184-9a08dde5813a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Day", - "company": "iQualcar", - "phone": "804-524-2216", - "email": "mia@iqualcar.com" - }, - { - "id": 5361, - "guid": "a7f586bf-e681-46a7-af16-f98620cfbbd8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Adamson", - "company": "Unologic", - "phone": "886-523-3475", - "email": "amelia@unologic.com" - }, - { - "id": 5362, - "guid": "2ea3325b-1ce6-4f58-b726-9b15cc3fd410", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Wesley", - "company": "Robotomic", - "phone": "815-407-2444", - "email": "aaliyah@robotomic.com" - }, - { - "id": 5363, - "guid": "4aee05c8-9f21-44f4-bde1-ee80d2070436", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aubrey Thornton", - "company": "iQualcar", - "phone": "843-451-2547", - "email": "aubrey@iqualcar.com" - }, - { - "id": 5364, - "guid": "73b51b97-9329-4253-9ec8-68b2603716ec", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Hamphrey", - "company": "Venconix", - "phone": "842-489-3225", - "email": "aubrey@venconix.com" - }, - { - "id": 5365, - "guid": "461d0953-1d19-4a3d-b2a6-abad77fbf3dc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Higgins", - "company": "Anagraph", - "phone": "828-413-3885", - "email": "lillian@anagraph.com" - }, - { - "id": 5366, - "guid": "c4a3e91a-0270-4201-8399-fbc725f369bd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Fisher", - "company": "Proline", - "phone": "842-596-3579", - "email": "hailey@proline.com" - }, - { - "id": 5367, - "guid": "eab82a16-7742-4f0a-b41b-d59ee13905cd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Clapton", - "company": "Celgra", - "phone": "864-539-2567", - "email": "rachel@celgra.com" - }, - { - "id": 5368, - "guid": "dbb99f40-9991-4533-9831-b6b5a1aea9bf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Sheldon", - "company": "Polytheon", - "phone": "890-495-3048", - "email": "madeline@polytheon.com" - }, - { - "id": 5369, - "guid": "4a6208fb-b00c-4a67-958a-d79a979d1699", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Clapton", - "company": "eSteganoergy", - "phone": "871-417-3294", - "email": "andrea@esteganoergy.com" - }, - { - "id": 5370, - "guid": "3754cba5-ff48-4a5f-acc1-c3fc52c4fe18", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Young", - "company": "Ameritron", - "phone": "827-587-3801", - "email": "isabella@ameritron.com" - }, - { - "id": 5371, - "guid": "eca92512-3c4c-447b-8dcf-c4f15dcb439f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Wallace", - "company": "SysVenamerica", - "phone": "816-537-2004", - "email": "brooke@sysvenamerica.com" - }, - { - "id": 5372, - "guid": "4bf10cdf-d7d0-4237-8da9-2544f0a031a2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katherine Daniels", - "company": "Hypervaco", - "phone": "861-530-3325", - "email": "katherine@hypervaco.com" - }, - { - "id": 5373, - "guid": "5fd0d29a-a09d-42fc-aefb-bcd7280a0ac0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madelyn Osborne", - "company": "Unologic", - "phone": "853-598-3448", - "email": "madelyn@unologic.com" - }, - { - "id": 5374, - "guid": "b83a4921-5bb3-4cbf-a858-479b874841ec", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Gill", - "company": "US Infratouch", - "phone": "831-575-3671", - "email": "emma@us infratouch.com" - }, - { - "id": 5375, - "guid": "705f8ab5-49c9-4866-90eb-74fe1c66f1ea", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Ford", - "company": "Infragraph", - "phone": "825-447-3598", - "email": "mariah@infragraph.com" - }, - { - "id": 5376, - "guid": "8352d7c9-2d55-4eef-b016-959fe7b5c2e2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Wood", - "company": "Raylog", - "phone": "845-436-3280", - "email": "arianna@raylog.com" - }, - { - "id": 5377, - "guid": "4b208da2-d74d-4747-87ed-b8b1cc3459a5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Galbraith", - "company": "Mescatron", - "phone": "852-400-3779", - "email": "katelyn@mescatron.com" - }, - { - "id": 5378, - "guid": "966b11d6-11f0-400e-958d-a66fd53b59f3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Nelson", - "company": "Celgra", - "phone": "875-422-3072", - "email": "chloe@celgra.com" - }, - { - "id": 5379, - "guid": "63c3c27e-5cdc-468a-a0bf-b1656e90e059", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Khloe Abramson", - "company": "Gigaura", - "phone": "874-437-2294", - "email": "khloe@gigaura.com" - }, - { - "id": 5380, - "guid": "b968bb63-46d2-4f42-9003-9f72e5d1c2af", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Brooks", - "company": "Netseco", - "phone": "808-598-2094", - "email": "maria@netseco.com" - }, - { - "id": 5381, - "guid": "4d0a4e4b-720f-41eb-8f16-1a1c18680e08", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Sherlock", - "company": "Netseco", - "phone": "878-444-3197", - "email": "anna@netseco.com" - }, - { - "id": 5382, - "guid": "5d19e546-30a8-4dff-afb6-6193ec0f772d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Abramson", - "company": "Multitiqua", - "phone": "810-494-2142", - "email": "alexis@multitiqua.com" - }, - { - "id": 5383, - "guid": "5d556413-0acb-429f-9633-f2271cac5366", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Webster", - "company": "Technogra", - "phone": "895-596-2622", - "email": "claire@technogra.com" - }, - { - "id": 5384, - "guid": "5b5d4ea6-d5d1-443e-8099-2262f1218945", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Gill", - "company": "Orthomedia", - "phone": "803-550-2958", - "email": "lauren@orthomedia.com" - }, - { - "id": 5385, - "guid": "f373e41f-d033-465f-81f8-80c3523a826a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Layla Hancock", - "company": "US Infratouch", - "phone": "890-450-3367", - "email": "layla@us infratouch.com" - }, - { - "id": 5386, - "guid": "f8ba5d8a-f49c-488c-b1b2-82aae1f87fb7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Cook", - "company": "Infragraph", - "phone": "839-592-3316", - "email": "charlotte@infragraph.com" - }, - { - "id": 5387, - "guid": "29ba56b5-438d-42b4-9d9d-5f56300fdd53", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Webster", - "company": "SysUSA", - "phone": "870-599-3848", - "email": "kayla@sysusa.com" - }, - { - "id": 5388, - "guid": "5a31b5df-2b4d-4c39-9005-4273fe985876", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Day", - "company": "Navivacs", - "phone": "860-453-3462", - "email": "bailey@navivacs.com" - }, - { - "id": 5389, - "guid": "aa3d6510-36c3-4503-9311-d0aac590d444", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Miller", - "company": "Teknoplexon", - "phone": "868-582-2000", - "email": "peyton@teknoplexon.com" - }, - { - "id": 5390, - "guid": "ffb9625c-bd30-4aaa-b2cd-08f61bc223e3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Brickman", - "company": "iMedconik", - "phone": "896-424-3510", - "email": "khloe@imedconik.com" - }, - { - "id": 5391, - "guid": "392b7014-9d56-46a4-9934-cb6898a67534", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis Turner", - "company": "Turbomart", - "phone": "868-491-3151", - "email": "alexis@turbomart.com" - }, - { - "id": 5392, - "guid": "a59d895f-d611-4259-b9a8-37015a5d471e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Gibbs", - "company": "Jamrola", - "phone": "874-413-2440", - "email": "destiny@jamrola.com" - }, - { - "id": 5393, - "guid": "53144916-5dda-4345-910c-8f4303c68fb2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Freeman", - "company": "Proline", - "phone": "897-458-2235", - "email": "julia@proline.com" - }, - { - "id": 5394, - "guid": "04f9a169-a287-4004-8d45-2664b9a4cfa3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Conors", - "company": "iEnland", - "phone": "890-445-3412", - "email": "mya@ienland.com" - }, - { - "id": 5395, - "guid": "df2bdca9-53ca-423f-b1b4-5894d307141a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mya Wainwright", - "company": "Celgra", - "phone": "877-585-3120", - "email": "mya@celgra.com" - }, - { - "id": 5396, - "guid": "209c3094-01be-4a3d-a41e-05db560937ca", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Oliver", - "company": "Textiqua", - "phone": "812-538-2506", - "email": "camila@textiqua.com" - }, - { - "id": 5397, - "guid": "76dc41c5-0375-4163-9c24-5d4243063556", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Morrison", - "company": "Transtouch", - "phone": "861-483-3085", - "email": "gabrielle@transtouch.com" - }, - { - "id": 5398, - "guid": "f83f5425-39b9-4bdc-b3ac-d09bc28582f2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Carey", - "company": "Techtron", - "phone": "829-457-3778", - "email": "jessica@techtron.com" - }, - { - "id": 5399, - "guid": "5d1102ec-969c-4e2a-8ba1-34d925773305", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Taylor WifKinson", - "company": "Polytheon", - "phone": "812-558-2553", - "email": "taylor@polytheon.com" - }, - { - "id": 5400, - "guid": "0d2412f3-1910-482d-b34b-129e34d39d91", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Abigail Campbell", - "company": "Conrama", - "phone": "886-596-2946", - "email": "abigail@conrama.com" - }, - { - "id": 5401, - "guid": "6701c480-3bba-41af-b3d5-12803815548e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Wainwright", - "company": "eSteganoergy", - "phone": "881-592-2646", - "email": "grace@esteganoergy.com" - }, - { - "id": 5402, - "guid": "4a645169-1211-451c-8d86-84397be87502", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Youmans", - "company": "Superscope", - "phone": "892-484-2687", - "email": "kylie@superscope.com" - }, - { - "id": 5403, - "guid": "a25a83c1-2322-4df2-83e8-76d0b313d654", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Thorndike", - "company": "Ameritron", - "phone": "894-597-3215", - "email": "riley@ameritron.com" - }, - { - "id": 5404, - "guid": "3727a48a-f4bf-4045-97d9-32a7076961f0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Thornton", - "company": "Technogra", - "phone": "867-499-2206", - "email": "paige@technogra.com" - }, - { - "id": 5405, - "guid": "d4ba38de-fe4a-4555-9cc9-2a76e87828e0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Vaughan", - "company": "Transtouch", - "phone": "886-560-3583", - "email": "lillian@transtouch.com" - }, - { - "id": 5406, - "guid": "aecf89b0-90c5-4c87-a8bf-4be1c49813df", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Daniels", - "company": "Titanigraf", - "phone": "899-491-2934", - "email": "alyssa@titanigraf.com" - }, - { - "id": 5407, - "guid": "12716a9b-44ff-428d-a406-d37f87f55813", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mackenzie Campbell", - "company": "Entcast", - "phone": "801-516-3198", - "email": "mackenzie@entcast.com" - }, - { - "id": 5408, - "guid": "0fbf7fda-fac7-443e-b262-d036853c0ee2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Murphy", - "company": "Teknoplexon", - "phone": "878-580-3581", - "email": "nevaeh@teknoplexon.com" - }, - { - "id": 5409, - "guid": "eea1bd6f-17c3-4d1f-a968-d8ce6e13a0bc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Owen", - "company": "Pericenta", - "phone": "801-530-3840", - "email": "allison@pericenta.com" - }, - { - "id": 5410, - "guid": "c4342ec8-969a-4430-9e82-bd0fa52b9838", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Neal", - "company": "iEnland", - "phone": "854-516-3073", - "email": "riley@ienland.com" - }, - { - "id": 5411, - "guid": "aa4f14b7-fd16-45b5-9ce5-00013ebf08fe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire White", - "company": "Systheon", - "phone": "874-566-3197", - "email": "claire@systheon.com" - }, - { - "id": 5412, - "guid": "e9769c6b-7299-4109-bdf9-8f4c33f5c499", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Maya Hailey", - "company": "Fibrotopia", - "phone": "886-519-2443", - "email": "maya@fibrotopia.com" - }, - { - "id": 5413, - "guid": "1b2d407f-75a5-44f8-95ce-afc751e9caa0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Sherlock", - "company": "Jamconik", - "phone": "859-562-3211", - "email": "emma@jamconik.com" - }, - { - "id": 5414, - "guid": "17d20357-f0bf-49bf-aaf9-619c76c6e86f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Michaelson", - "company": "Vencom", - "phone": "818-433-2242", - "email": "mariah@vencom.com" - }, - { - "id": 5415, - "guid": "b4edcbfa-2c04-4340-8756-3ccb37e5a60e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Savannah Carroll", - "company": "Teknoplexon", - "phone": "817-510-2075", - "email": "savannah@teknoplexon.com" - }, - { - "id": 5416, - "guid": "fb361ec7-b121-4784-97f4-88ef3f9cb853", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Wood", - "company": "Jamconik", - "phone": "837-563-2215", - "email": "isabella@jamconik.com" - }, - { - "id": 5417, - "guid": "9d67bcdc-3622-4d2a-9525-69106fbfe8e1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Young", - "company": "Netseco", - "phone": "851-464-3965", - "email": "zoe@netseco.com" - }, - { - "id": 5418, - "guid": "bee5dcaf-7ca8-49ad-a614-1864d4dc5d8b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Morrison", - "company": "iEnland", - "phone": "870-587-3472", - "email": "aaliyah@ienland.com" - }, - { - "id": 5419, - "guid": "83b29306-85dc-45d8-9264-85142128e588", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Chapman", - "company": "Entcast", - "phone": "873-512-2792", - "email": "audrey@entcast.com" - }, - { - "id": 5420, - "guid": "8a36be57-53ac-45de-a091-e5455820006e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Gilson", - "company": "Truegate", - "phone": "800-424-2152", - "email": "sydney@truegate.com" - }, - { - "id": 5421, - "guid": "d4ece06e-0aa4-4581-b8ba-1dfe7723568a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Rachel Neal", - "company": "Interliant", - "phone": "887-509-3228", - "email": "rachel@interliant.com" - }, - { - "id": 5422, - "guid": "d81f5803-252b-4216-89b4-40fba1dee198", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Vaughan", - "company": "Teknoplexon", - "phone": "852-466-3785", - "email": "trinity@teknoplexon.com" - }, - { - "id": 5423, - "guid": "49c9a500-9a95-4a53-9f72-f7d47bd47d2d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Bush", - "company": "Teknoplexon", - "phone": "804-593-3638", - "email": "madeline@teknoplexon.com" - }, - { - "id": 5424, - "guid": "edc5b968-9bd6-49e5-8d24-0b6df196b372", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Bush", - "company": "Conrama", - "phone": "887-437-2914", - "email": "ava@conrama.com" - }, - { - "id": 5425, - "guid": "6880aaac-6418-4517-a079-2f8e440a10d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Fulton", - "company": "US Omnigraphik", - "phone": "845-429-3451", - "email": "ava@us omnigraphik.com" - }, - { - "id": 5426, - "guid": "c58cbfd9-57fc-49d4-b02b-0ad19132244a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Otis", - "company": "Keytheon", - "phone": "822-564-3178", - "email": "madison@keytheon.com" - }, - { - "id": 5427, - "guid": "a1ff1ab8-5f4b-443a-946e-bbfd4da45847", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jessica Brooks", - "company": "Allnet", - "phone": "865-435-2742", - "email": "jessica@allnet.com" - }, - { - "id": 5428, - "guid": "50fc7d34-bb81-4d1a-90c2-ccb7dc0e4acb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Thornton", - "company": "Netseco", - "phone": "809-557-3667", - "email": "gianna@netseco.com" - }, - { - "id": 5429, - "guid": "7b7bafd0-e1ca-4c04-80ea-44b87fc3963f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Timmons", - "company": "Raylog", - "phone": "813-435-3368", - "email": "emma@raylog.com" - }, - { - "id": 5430, - "guid": "27f04d3e-dbe6-4b5b-a03f-9a4e00e791b3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Evelyn Cramer", - "company": "Airdyne", - "phone": "877-516-3269", - "email": "evelyn@airdyne.com" - }, - { - "id": 5431, - "guid": "be93f326-cad4-4fc7-93c0-573d18c67176", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Vanessa Hawkins", - "company": "Quintegrity", - "phone": "897-453-3924", - "email": "vanessa@quintegrity.com" - }, - { - "id": 5432, - "guid": "6c4628f1-00ce-45c2-8557-a83c22739169", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Gerald", - "company": "Idmax", - "phone": "840-462-3038", - "email": "lily@idmax.com" - }, - { - "id": 5433, - "guid": "c7e99293-7e67-415a-93f4-98314ae9e918", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Molly Vaughan", - "company": "Syssoft", - "phone": "858-552-3515", - "email": "molly@syssoft.com" - }, - { - "id": 5434, - "guid": "61febd68-0e1f-4abb-8fb9-090fc19b96e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Gustman", - "company": "Jamconik", - "phone": "858-448-3345", - "email": "bailey@jamconik.com" - }, - { - "id": 5435, - "guid": "e21bf9ea-e645-40be-80ee-0de18445df0e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gianna Creighton", - "company": "Robocomm", - "phone": "846-507-3234", - "email": "gianna@robocomm.com" - }, - { - "id": 5436, - "guid": "0cce8077-e7a0-4a2b-b47a-501d0c63fba3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madeline WifKinson", - "company": "Dynarama", - "phone": "827-551-3086", - "email": "madeline@dynarama.com" - }, - { - "id": 5437, - "guid": "89440693-a477-486e-bb63-89c393954f3e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Warren", - "company": "Dynarama", - "phone": "860-581-2656", - "email": "kimberly@dynarama.com" - }, - { - "id": 5438, - "guid": "e10780ac-e1d3-4426-b40e-c6a69bac7a77", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Charlotte Chesterton", - "company": "Technogra", - "phone": "876-512-2824", - "email": "charlotte@technogra.com" - }, - { - "id": 5439, - "guid": "ed4eea16-97d9-4531-bc40-eb5df16b33de", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Chandter", - "company": "Thermotomic", - "phone": "853-558-2550", - "email": "julia@thermotomic.com" - }, - { - "id": 5440, - "guid": "2b87c01e-481a-4550-8518-fb0774e9729f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Gibbs", - "company": "Nanobanc", - "phone": "868-587-3692", - "email": "bella@nanobanc.com" - }, - { - "id": 5441, - "guid": "b64223a1-3a85-4bb7-8795-4af389fba536", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Charlson", - "company": "Titanigraf", - "phone": "895-472-2307", - "email": "valeria@titanigraf.com" - }, - { - "id": 5442, - "guid": "e7df4a5b-09f6-4e70-a950-cab1cf723144", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine WifKinson", - "company": "Generola", - "phone": "872-418-2996", - "email": "jasmine@generola.com" - }, - { - "id": 5443, - "guid": "5b310fbd-6a6a-4525-bca8-f086d8017c5d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Wainwright", - "company": "Tekcar", - "phone": "838-544-2589", - "email": "brooke@tekcar.com" - }, - { - "id": 5444, - "guid": "65bd0588-9c12-4cbd-befe-048ecbd255e1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Hamphrey", - "company": "Unologic", - "phone": "884-581-3331", - "email": "melanie@unologic.com" - }, - { - "id": 5445, - "guid": "9e4cb2e7-c652-44d0-b942-ecc1847c54ac", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Morrison", - "company": "iOptystix", - "phone": "840-564-2591", - "email": "molly@ioptystix.com" - }, - { - "id": 5446, - "guid": "29890dbd-ada3-4b6b-b3cf-b3bf74c1515e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Wood", - "company": "eEyetanic", - "phone": "858-492-2277", - "email": "savannah@eeyetanic.com" - }, - { - "id": 5447, - "guid": "163ada72-54ed-4376-bea9-153bdcd1ddf1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Eva Oliver", - "company": "Steganoconiche", - "phone": "864-435-2151", - "email": "eva@steganoconiche.com" - }, - { - "id": 5448, - "guid": "44236ce1-987f-41e2-8a66-a84187b6217c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Otis", - "company": "OpKeycomm", - "phone": "805-511-2806", - "email": "bella@opkeycomm.com" - }, - { - "id": 5449, - "guid": "fd978804-a917-4563-8c67-108fe4522651", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Chapman", - "company": "Navivacs", - "phone": "827-587-2919", - "email": "vanessa@navivacs.com" - }, - { - "id": 5450, - "guid": "00992bb9-e0c4-4332-b27d-5c0f2804d6de", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Hoggarth", - "company": "Titanigraf", - "phone": "801-596-3134", - "email": "gabriella@titanigraf.com" - }, - { - "id": 5451, - "guid": "73bdaa96-b7ca-4e1e-be71-a93a3a03f2aa", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Day", - "company": "iSkyvaco", - "phone": "844-471-3776", - "email": "paige@iskyvaco.com" - }, - { - "id": 5452, - "guid": "c8b38904-f99b-4918-8f07-bf2ab4c5c9bd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sarah Hancock", - "company": "Generola", - "phone": "816-523-3276", - "email": "sarah@generola.com" - }, - { - "id": 5453, - "guid": "72df8fcf-4a8e-4ab0-986e-d12a27ed60f7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Harrison", - "company": "Westtomik", - "phone": "841-465-2598", - "email": "sophie@westtomik.com" - }, - { - "id": 5454, - "guid": "fa0842cd-2f9e-4d74-9c51-2866449332dd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Neal", - "company": "Anagraph", - "phone": "888-533-2043", - "email": "ella@anagraph.com" - }, - { - "id": 5455, - "guid": "cc7c1744-0788-4d15-a6bd-531c4839a359", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Brickman", - "company": "Textiqua", - "phone": "860-470-2478", - "email": "grace@textiqua.com" - }, - { - "id": 5456, - "guid": "92be49b4-e809-4a88-a8ca-318275087f5e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Smith", - "company": "Sontopia", - "phone": "859-465-3294", - "email": "gianna@sontopia.com" - }, - { - "id": 5457, - "guid": "89f2a4d9-a955-46ec-b733-138eb6631924", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Goldman", - "company": "Westtomik", - "phone": "813-574-3717", - "email": "peyton@westtomik.com" - }, - { - "id": 5458, - "guid": "de499a08-d320-400a-a958-817bd2d4d46c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Waller", - "company": "Allnet", - "phone": "876-466-2008", - "email": "abigail@allnet.com" - }, - { - "id": 5459, - "guid": "23b21293-285f-4d85-b8ea-d7c1048304df", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Webster", - "company": "Xeicon", - "phone": "867-539-3334", - "email": "charlotte@xeicon.com" - }, - { - "id": 5460, - "guid": "b74416f0-7008-4fc7-989b-3fb7ae9e1b9d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Freeman", - "company": "Fibrotopia", - "phone": "844-597-3668", - "email": "sophia@fibrotopia.com" - }, - { - "id": 5461, - "guid": "488b2a8f-9f9e-47d1-ac4d-314a56945f22", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Freeman", - "company": "Teknoplexon", - "phone": "843-511-2046", - "email": "khloe@teknoplexon.com" - }, - { - "id": 5462, - "guid": "e58a500d-abf9-4e79-b7f4-05ddaf34d9a7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Oldman", - "company": "Safeagra", - "phone": "836-453-3314", - "email": "evelyn@safeagra.com" - }, - { - "id": 5463, - "guid": "71e5e350-5a5f-437d-9a75-bd884ba9dc37", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Watson", - "company": "Safetrust", - "phone": "825-483-3781", - "email": "kaitlyn@safetrust.com" - }, - { - "id": 5464, - "guid": "cb8ca14c-61f9-4863-9666-6140bc423126", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Gill", - "company": "Idmax", - "phone": "843-421-3785", - "email": "aaliyah@idmax.com" - }, - { - "id": 5465, - "guid": "71c8ee4c-1a58-4749-9904-36c9d2203127", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Gate", - "company": "Thermotomic", - "phone": "889-567-2327", - "email": "audrey@thermotomic.com" - }, - { - "id": 5466, - "guid": "415947b1-fd23-448e-a4b0-87d3b7cf7a30", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Cook", - "company": "Qualserve", - "phone": "816-520-2312", - "email": "makayla@qualserve.com" - }, - { - "id": 5467, - "guid": "9b11bd8b-7026-42ba-8e6c-28b49d6c9e2c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah Molligan", - "company": "Transtouch", - "phone": "837-505-2529", - "email": "leah@transtouch.com" - }, - { - "id": 5468, - "guid": "f8f43dbf-8d7b-4dab-9c81-623b97a3c555", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail WifKinson", - "company": "eEyetanic", - "phone": "803-545-2828", - "email": "abigail@eeyetanic.com" - }, - { - "id": 5469, - "guid": "c617db33-6640-44a4-9bb4-26f4b803dea3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Conors", - "company": "Superscope", - "phone": "838-463-3983", - "email": "ava@superscope.com" - }, - { - "id": 5470, - "guid": "dc3aa3d0-4e49-4952-9733-7523df870270", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Crossman", - "company": "Orthosoft", - "phone": "826-539-3993", - "email": "khloe@orthosoft.com" - }, - { - "id": 5471, - "guid": "6ef59960-edc9-4e4f-9038-5e894f924b81", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Wainwright", - "company": "Enlogia", - "phone": "825-496-2282", - "email": "melanie@enlogia.com" - }, - { - "id": 5472, - "guid": "cf7b5deb-3ff8-4fc5-9c2d-5ffd9ed2c424", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Hodges", - "company": "Textiqua", - "phone": "849-486-3588", - "email": "katelyn@textiqua.com" - }, - { - "id": 5473, - "guid": "88ab367e-1c39-4d11-89f3-434250cca58b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Campbell", - "company": "Indisco", - "phone": "811-511-2733", - "email": "kylie@indisco.com" - }, - { - "id": 5474, - "guid": "cd89d9a9-0349-4876-8caf-02f09a4a4273", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Chandter", - "company": "iSkyvaco", - "phone": "833-566-2055", - "email": "savannah@iskyvaco.com" - }, - { - "id": 5475, - "guid": "e26808be-6648-44d5-89ab-b3d918f81c83", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Conors", - "company": "Quintegrity", - "phone": "811-419-2539", - "email": "camila@quintegrity.com" - }, - { - "id": 5476, - "guid": "964f08fe-1f26-43c4-8e26-0a4871d48c69", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Wallace", - "company": "Titanirola", - "phone": "879-485-3409", - "email": "brooklyn@titanirola.com" - }, - { - "id": 5477, - "guid": "03ebc087-facd-4c94-8f49-8e1b147963b5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Wesley", - "company": "iEnland", - "phone": "845-542-3701", - "email": "amelia@ienland.com" - }, - { - "id": 5478, - "guid": "d6e32899-71b2-430d-8a73-8c2e5802a5b8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Walkman", - "company": "Robotemplate", - "phone": "821-598-3194", - "email": "vanessa@robotemplate.com" - }, - { - "id": 5479, - "guid": "94ca3fca-7653-4073-ba26-cc5f5d6250eb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Osborne", - "company": "Inridium", - "phone": "882-572-3681", - "email": "lauren@inridium.com" - }, - { - "id": 5480, - "guid": "185416cc-76cd-4d2a-80fb-0ca6d9ba3830", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Carter", - "company": "Mescatron", - "phone": "828-427-2104", - "email": "lauren@mescatron.com" - }, - { - "id": 5481, - "guid": "018bc247-9e14-4eb9-a741-9351d5981c1a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Crossman", - "company": "Proline", - "phone": "893-572-3792", - "email": "rachel@proline.com" - }, - { - "id": 5482, - "guid": "5ef2ed54-c4b5-434d-b253-624a4f79b4ef", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hailey Sherlock", - "company": "Inridium", - "phone": "860-439-3970", - "email": "hailey@inridium.com" - }, - { - "id": 5483, - "guid": "8ec54ecb-03f9-40ec-995a-716f043d51bd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Ogden", - "company": "iEnland", - "phone": "815-591-3387", - "email": "mariah@ienland.com" - }, - { - "id": 5484, - "guid": "9b2cd584-d73d-4dc6-8a7f-11f5241d4edd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Wayne", - "company": "SysVenamerica", - "phone": "883-556-2792", - "email": "maya@sysvenamerica.com" - }, - { - "id": 5485, - "guid": "520aa19b-d0b7-4908-b9b8-22a1dfca88da", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Timmons", - "company": "Fibrotopia", - "phone": "800-483-3951", - "email": "alyssa@fibrotopia.com" - }, - { - "id": 5486, - "guid": "c9b4f61d-08d3-40b0-b86c-719637c33e35", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexa Oldridge", - "company": "Textiqua", - "phone": "854-467-2331", - "email": "alexa@textiqua.com" - }, - { - "id": 5487, - "guid": "7b438ec8-d7fb-4c0a-9e0e-5d9a0d89d7ac", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Wayne", - "company": "Ameritron", - "phone": "801-433-3417", - "email": "madelyn@ameritron.com" - }, - { - "id": 5488, - "guid": "c022931c-113d-466e-97a0-97383f14548c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Turner", - "company": "Fibrotouch", - "phone": "882-565-3799", - "email": "leah@fibrotouch.com" - }, - { - "id": 5489, - "guid": "7bc32731-bb6b-493f-94aa-eac57b512075", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Cook", - "company": "Hypervaco", - "phone": "882-565-2098", - "email": "nevaeh@hypervaco.com" - }, - { - "id": 5490, - "guid": "ef6e9697-577e-48ac-b8f9-90d5f6a9a495", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Oliver", - "company": "Nanobanc", - "phone": "810-530-2192", - "email": "aaliyah@nanobanc.com" - }, - { - "id": 5491, - "guid": "59125c7d-3a7e-46ed-b704-54c01ea0353c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Thorndike", - "company": "iOptystix", - "phone": "876-465-2101", - "email": "andrea@ioptystix.com" - }, - { - "id": 5492, - "guid": "694026f0-762d-4e79-9ab9-52cf182e0140", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jasmine Freeman", - "company": "Genland", - "phone": "843-503-2326", - "email": "jasmine@genland.com" - }, - { - "id": 5493, - "guid": "88868b84-cf62-4de2-bffa-62ec8a46638e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Abramson", - "company": "Xeicon", - "phone": "890-540-2742", - "email": "madeline@xeicon.com" - }, - { - "id": 5494, - "guid": "51e92e1d-8f02-48bb-b67e-acfcfdf74fa8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Morrison", - "company": "Orthosoft", - "phone": "888-535-2723", - "email": "samantha@orthosoft.com" - }, - { - "id": 5495, - "guid": "a5642bdc-bfb8-46d1-ae17-f820155d3a8a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Chandter", - "company": "SysUSA", - "phone": "895-417-2559", - "email": "khloe@sysusa.com" - }, - { - "id": 5496, - "guid": "7cc1da4b-9469-44db-8e43-7ccd70e40a6d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hailey Vance", - "company": "Superscope", - "phone": "809-464-2182", - "email": "hailey@superscope.com" - }, - { - "id": 5497, - "guid": "897fb7e6-e6f8-4a9f-8878-fecaa3033a2c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Hamphrey", - "company": "Enlogia", - "phone": "867-526-2484", - "email": "amelia@enlogia.com" - }, - { - "id": 5498, - "guid": "5805f5b4-bc32-46c5-bdc6-80ee22a9dc60", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Milton", - "company": "iMedconik", - "phone": "807-564-2425", - "email": "khloe@imedconik.com" - }, - { - "id": 5499, - "guid": "045bee60-d2bc-4ccc-b9fd-a9565142f761", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Clapton", - "company": "Skydata", - "phone": "896-525-3096", - "email": "emma@skydata.com" - }, - { - "id": 5500, - "guid": "c68115de-bf59-41a0-ab7d-6a3ab9e925bc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ashley Wood", - "company": "Syssoft", - "phone": "805-434-2190", - "email": "ashley@syssoft.com" - }, - { - "id": 5501, - "guid": "46052d99-adf4-4cc2-a16e-f57bfc4f2f74", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Hancock", - "company": "Turbomart", - "phone": "888-457-3235", - "email": "savannah@turbomart.com" - }, - { - "id": 5502, - "guid": "c384bfd1-0ca0-4ee9-921d-699397e6b2d5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Gilson", - "company": "Fibrotopia", - "phone": "881-448-2179", - "email": "victoria@fibrotopia.com" - }, - { - "id": 5503, - "guid": "39e2e858-3d8b-46eb-b03e-d92c5714686b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Abramson", - "company": "iMedconik", - "phone": "871-551-2493", - "email": "olivia@imedconik.com" - }, - { - "id": 5504, - "guid": "0386b1f6-0524-4444-b03a-45081bd135c3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Haig", - "company": "Anaframe", - "phone": "833-495-2220", - "email": "peyton@anaframe.com" - }, - { - "id": 5505, - "guid": "77c53260-6c29-4f97-84df-5eee76028a44", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Abramson", - "company": "iOptystix", - "phone": "835-506-2757", - "email": "zoey@ioptystix.com" - }, - { - "id": 5506, - "guid": "08c4a578-7ec7-4954-af3e-892a0c5a0da4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Mercer", - "company": "Systheon", - "phone": "840-454-3846", - "email": "lillian@systheon.com" - }, - { - "id": 5507, - "guid": "6763425d-3ff6-4f55-b385-20a4a8a89a7f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sydney Brickman", - "company": "Technogra", - "phone": "836-522-3319", - "email": "sydney@technogra.com" - }, - { - "id": 5508, - "guid": "1b273f12-dac7-45ad-800c-f117458c0a00", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Cook", - "company": "Raylog", - "phone": "847-436-3868", - "email": "madison@raylog.com" - }, - { - "id": 5509, - "guid": "f2ce4826-7d16-4df4-93d8-7fbb1bd9c2f9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Davidson", - "company": "Ventanium", - "phone": "831-400-2702", - "email": "elizabeth@ventanium.com" - }, - { - "id": 5510, - "guid": "839057ae-95e3-4cbf-9908-1c622daffce6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Miller", - "company": "Robocomm", - "phone": "849-548-2695", - "email": "madeline@robocomm.com" - }, - { - "id": 5511, - "guid": "3d441fed-684b-4d23-9da1-387e0179feb9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Hawkins", - "company": "Teknoplexon", - "phone": "816-543-2394", - "email": "brianna@teknoplexon.com" - }, - { - "id": 5512, - "guid": "fd20319c-d415-4788-aea8-c23836d43b9e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Brown", - "company": "iQualcar", - "phone": "837-561-2459", - "email": "leah@iqualcar.com" - }, - { - "id": 5513, - "guid": "76d053a0-0b60-4009-9eac-e542d28bffe0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila Carter", - "company": "RoboAerlogix", - "phone": "817-540-3093", - "email": "camila@roboaerlogix.com" - }, - { - "id": 5514, - "guid": "cc8e7942-e30d-4573-8f04-734316c3f68b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexandra Gill", - "company": "Robotomic", - "phone": "828-439-3579", - "email": "alexandra@robotomic.com" - }, - { - "id": 5515, - "guid": "eec01658-15c7-4c70-84c6-10e4c2cc43c7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Harrison", - "company": "Titanirola", - "phone": "880-541-2688", - "email": "emily@titanirola.com" - }, - { - "id": 5516, - "guid": "be0c7648-c04e-4e65-8a5d-5391fc60b43d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Campbell", - "company": "Techtron", - "phone": "824-572-3720", - "email": "hailey@techtron.com" - }, - { - "id": 5517, - "guid": "8e3316f9-3dc4-4e32-b478-d12c39d31e7a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Hardman", - "company": "Safeagra", - "phone": "893-580-3243", - "email": "bailey@safeagra.com" - }, - { - "id": 5518, - "guid": "48466dbc-3ff0-4850-8af5-80dde6f72bb9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Hodges", - "company": "Robotomic", - "phone": "845-422-2642", - "email": "molly@robotomic.com" - }, - { - "id": 5519, - "guid": "fdf67f20-6225-4262-a6e8-2638dfa9522a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Hawkins", - "company": "Thermotomic", - "phone": "882-438-2884", - "email": "audrey@thermotomic.com" - }, - { - "id": 5520, - "guid": "ff41be1c-453b-4b80-ab6d-79396ddf7d8b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Carey", - "company": "Compuamerica", - "phone": "873-584-2985", - "email": "alexandra@compuamerica.com" - }, - { - "id": 5521, - "guid": "9567e6ec-a193-49dc-bbf2-d530b7d90a7d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Charlson", - "company": "Videobanc", - "phone": "887-548-2284", - "email": "arianna@videobanc.com" - }, - { - "id": 5522, - "guid": "aee3e4fa-5909-485b-8d90-57430a145f2d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Carter", - "company": "Venconix", - "phone": "895-425-3487", - "email": "nevaeh@venconix.com" - }, - { - "id": 5523, - "guid": "f93c1285-8955-419e-b99b-e56c69668a39", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Nash", - "company": "Netsystems", - "phone": "857-522-2232", - "email": "sarah@netsystems.com" - }, - { - "id": 5524, - "guid": "16a1764a-fb2e-4fdf-9c45-80ea429246e7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Gill", - "company": "Netsystems", - "phone": "888-456-3807", - "email": "madison@netsystems.com" - }, - { - "id": 5525, - "guid": "18a9f3e8-2004-45b2-ba63-2068d3f2b5a3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Morrison", - "company": "Teratopia", - "phone": "880-475-3726", - "email": "sofia@teratopia.com" - }, - { - "id": 5526, - "guid": "953a0a40-13ac-4d61-ac54-217fead571ce", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Carroll", - "company": "Netsystems", - "phone": "839-564-2153", - "email": "madeline@netsystems.com" - }, - { - "id": 5527, - "guid": "3e86dd77-328e-4328-a674-b1b486135050", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Oliver", - "company": "Conotomics", - "phone": "805-527-3921", - "email": "mya@conotomics.com" - }, - { - "id": 5528, - "guid": "59d2fd3a-f590-41c8-becb-cc8e5fc5c5ca", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Thomson", - "company": "Superscope", - "phone": "874-420-2639", - "email": "madeline@superscope.com" - }, - { - "id": 5529, - "guid": "8fed4a9f-c9a9-42be-96fa-3923001a5bd1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Hoggarth", - "company": "SysVenamerica", - "phone": "892-401-2952", - "email": "valeria@sysvenamerica.com" - }, - { - "id": 5530, - "guid": "c2583dcc-2dcf-4d28-ab43-f8b310efdbf6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Gibbs", - "company": "InfoAirway", - "phone": "844-503-3847", - "email": "caroline@infoairway.com" - }, - { - "id": 5531, - "guid": "ad1fd1c4-fc21-43db-a839-d750ca53574a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Vaughan", - "company": "Genland", - "phone": "825-540-2466", - "email": "brooke@genland.com" - }, - { - "id": 5532, - "guid": "a4a7e888-673e-4f0c-9beb-526b55fa19b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabriella Osborne", - "company": "Teknoplexon", - "phone": "878-471-2860", - "email": "gabriella@teknoplexon.com" - }, - { - "id": 5533, - "guid": "cb2bce2a-1045-4337-9169-ad9c7ecd8635", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Carter", - "company": "Venconix", - "phone": "801-534-2400", - "email": "sophia@venconix.com" - }, - { - "id": 5534, - "guid": "62496239-5f17-4951-89b4-9b799270a11c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Ward", - "company": "Safeagra", - "phone": "866-571-2561", - "email": "julia@safeagra.com" - }, - { - "id": 5535, - "guid": "8567102e-e645-439e-8f54-5fd033623379", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Miln", - "company": "Robocomm", - "phone": "866-519-3669", - "email": "layla@robocomm.com" - }, - { - "id": 5536, - "guid": "269b24de-deee-4e88-8428-80bd45393cd3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Daniels", - "company": "Jamconik", - "phone": "862-495-2456", - "email": "kaylee@jamconik.com" - }, - { - "id": 5537, - "guid": "941ddc52-fc6c-4e11-9fa7-cadadc4462d0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Genesis Carter", - "company": "Qualserve", - "phone": "848-545-2204", - "email": "genesis@qualserve.com" - }, - { - "id": 5538, - "guid": "dfcb451a-064d-485f-b999-eabb18aa5bc0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabelle Gibbs", - "company": "Rapigrafix", - "phone": "803-581-3432", - "email": "isabelle@rapigrafix.com" - }, - { - "id": 5539, - "guid": "f7ac4154-8952-417c-ba54-a5fdd513ebb5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Timmons", - "company": "iSkyvaco", - "phone": "855-542-3940", - "email": "alexandra@iskyvaco.com" - }, - { - "id": 5540, - "guid": "b0e507d9-9a8e-4b9b-8283-0a06f187065a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Wayne", - "company": "Pacwest", - "phone": "820-412-3985", - "email": "faith@pacwest.com" - }, - { - "id": 5541, - "guid": "fc50cb72-233f-4b1d-9c52-42cca280320b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Brickman", - "company": "Quintegrity", - "phone": "857-413-2176", - "email": "serenity@quintegrity.com" - }, - { - "id": 5542, - "guid": "c88b318a-33fc-43b5-9e73-644bac73ef7a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Leah Thorndike", - "company": "Unologic", - "phone": "859-494-3157", - "email": "leah@unologic.com" - }, - { - "id": 5543, - "guid": "daca2cca-a7c8-4a3a-b03e-8d0c5e639c7a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Goldman", - "company": "Orthosoft", - "phone": "820-550-2643", - "email": "gianna@orthosoft.com" - }, - { - "id": 5544, - "guid": "c986bfe1-7528-4550-8b32-38bf5f8a8639", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Carey", - "company": "Titanigraf", - "phone": "864-597-2898", - "email": "victoria@titanigraf.com" - }, - { - "id": 5545, - "guid": "963c130b-1bfd-4a50-bd11-1592161829c3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kayla Charlson", - "company": "Robotemplate", - "phone": "802-461-3166", - "email": "kayla@robotemplate.com" - }, - { - "id": 5546, - "guid": "fbee6d39-8263-40c1-a151-3bd7783175eb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Hardman", - "company": "eSteganoergy", - "phone": "860-527-2513", - "email": "ashley@esteganoergy.com" - }, - { - "id": 5547, - "guid": "0e338f0f-7115-442c-8e88-512ec0020dbb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alyssa Charlson", - "company": "Systheon", - "phone": "809-586-3174", - "email": "alyssa@systheon.com" - }, - { - "id": 5548, - "guid": "04488b07-5dd0-4442-bb3b-27b0fed4d004", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Leah Winter", - "company": "Genland", - "phone": "852-558-3823", - "email": "leah@genland.com" - }, - { - "id": 5549, - "guid": "6be1229d-ad6e-4528-aa01-368d4f368e0b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Gill", - "company": "Netseco", - "phone": "880-531-2829", - "email": "melanie@netseco.com" - }, - { - "id": 5550, - "guid": "603e735b-bed3-4063-b838-4d176c33f185", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Osborne", - "company": "Robotomic", - "phone": "839-586-3650", - "email": "isabelle@robotomic.com" - }, - { - "id": 5551, - "guid": "bd936129-ba68-4dc0-a454-cf78b0550c22", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey WifKinson", - "company": "Entcast", - "phone": "856-536-2084", - "email": "aubrey@entcast.com" - }, - { - "id": 5552, - "guid": "ad0863da-65e5-4337-84f7-aaefe9953f7f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Smith", - "company": "eSteganoergy", - "phone": "813-548-3750", - "email": "chloe@esteganoergy.com" - }, - { - "id": 5553, - "guid": "735b3424-e603-42ca-af58-76539eda6705", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Walkman", - "company": "InfoAirway", - "phone": "862-449-2443", - "email": "avery@infoairway.com" - }, - { - "id": 5554, - "guid": "fb366bfc-1a93-46fc-b50a-730502d6ae98", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Oliver", - "company": "Safeagra", - "phone": "883-403-2994", - "email": "arianna@safeagra.com" - }, - { - "id": 5555, - "guid": "c4d966bc-23b9-426d-99d4-793a0bece12f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Turner", - "company": "Westmedia", - "phone": "877-404-2371", - "email": "kaylee@westmedia.com" - }, - { - "id": 5556, - "guid": "66b6cc6c-a9a1-4001-8f99-d5051d5759d9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Adamson", - "company": "Dynarama", - "phone": "861-566-2887", - "email": "khloe@dynarama.com" - }, - { - "id": 5557, - "guid": "b4b70775-f4b9-4279-af78-930fbc12df13", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Timmons", - "company": "RoboAerlogix", - "phone": "820-548-3554", - "email": "mia@roboaerlogix.com" - }, - { - "id": 5558, - "guid": "a92c1e9f-a933-4144-bbf1-0d6dc88ee566", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Miln", - "company": "iMedconik", - "phone": "857-461-2913", - "email": "eva@imedconik.com" - }, - { - "id": 5559, - "guid": "10faa50e-d754-409e-931a-91e215d4f968", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Wainwright", - "company": "Celgra", - "phone": "896-568-3761", - "email": "nevaeh@celgra.com" - }, - { - "id": 5560, - "guid": "d5557aaa-10fd-48ba-8143-bd7ab1dcb473", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Gustman", - "company": "Inridium", - "phone": "831-451-2332", - "email": "addison@inridium.com" - }, - { - "id": 5561, - "guid": "49010d0f-f25b-4966-a10b-ddf1ff81e482", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ava Michaelson", - "company": "US Omnigraphik", - "phone": "898-499-2046", - "email": "ava@us omnigraphik.com" - }, - { - "id": 5562, - "guid": "d2af0e89-be66-4e1d-a8fb-9b7ab7a60980", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Chapman", - "company": "Skydata", - "phone": "853-550-2719", - "email": "isabelle@skydata.com" - }, - { - "id": 5563, - "guid": "68def9d4-fa26-4bf8-a148-232a6c9ec5fd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Murphy", - "company": "Westtomik", - "phone": "898-594-3201", - "email": "caroline@westtomik.com" - }, - { - "id": 5564, - "guid": "9bca3d51-34e7-471a-bdfa-3ef2e4715a38", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Freeman", - "company": "Allphysiche", - "phone": "813-452-2006", - "email": "aaliyah@allphysiche.com" - }, - { - "id": 5565, - "guid": "acdc6582-5a52-4c0d-839e-ac5bd0311052", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Oswald", - "company": "Rapigrafix", - "phone": "809-530-3917", - "email": "brooke@rapigrafix.com" - }, - { - "id": 5566, - "guid": "73465530-fa78-43a0-8c62-2a4c92d9b279", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bailey Gill", - "company": "Fibrotopia", - "phone": "876-441-3943", - "email": "bailey@fibrotopia.com" - }, - { - "id": 5567, - "guid": "a6203fdd-364f-45c5-bb63-fb723a613a0f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Gustman", - "company": "Airdyne", - "phone": "808-422-2003", - "email": "kimberly@airdyne.com" - }, - { - "id": 5568, - "guid": "dc343e09-3f13-4076-9c7f-6370d9774307", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Andrea Hawkins", - "company": "SysVenamerica", - "phone": "807-474-2295", - "email": "andrea@sysvenamerica.com" - }, - { - "id": 5569, - "guid": "8b606006-c531-43c7-a6d0-a6bf5fd81808", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Sherlock", - "company": "Allphysiche", - "phone": "854-442-2411", - "email": "eva@allphysiche.com" - }, - { - "id": 5570, - "guid": "53b947bd-ca14-40d7-bff2-735d068af7e7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Galbraith", - "company": "Navivacs", - "phone": "841-423-3927", - "email": "ariana@navivacs.com" - }, - { - "id": 5571, - "guid": "f7b50536-74c7-4bce-bbe3-b8615fd0b111", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Wallace", - "company": "Fibrotopia", - "phone": "837-486-2348", - "email": "savannah@fibrotopia.com" - }, - { - "id": 5572, - "guid": "5d66ce2c-18ae-4d86-8a10-8424da119ea5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Stanley", - "company": "Titanirola", - "phone": "889-421-3811", - "email": "evelyn@titanirola.com" - }, - { - "id": 5573, - "guid": "119d5a78-e72f-47d0-8ba6-4b26f566145c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Conors", - "company": "Entcast", - "phone": "881-406-3526", - "email": "trinity@entcast.com" - }, - { - "id": 5574, - "guid": "1c4d4d90-7f54-411c-a3a3-6d1509ebfd57", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madeline Oldridge", - "company": "Unconix", - "phone": "866-448-2970", - "email": "madeline@unconix.com" - }, - { - "id": 5575, - "guid": "15de727a-e669-45ed-9d3a-356286522193", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Carter", - "company": "Videobanc", - "phone": "802-495-3571", - "email": "madelyn@videobanc.com" - }, - { - "id": 5576, - "guid": "bfbbe02e-e902-4ba6-8020-d227a9015d7a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Hancock", - "company": "Openserve", - "phone": "805-532-3501", - "email": "kaylee@openserve.com" - }, - { - "id": 5577, - "guid": "c356dda1-8e0a-4cc9-aaed-b02994d8f17b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Osborne", - "company": "SysUSA", - "phone": "894-426-3659", - "email": "leah@sysusa.com" - }, - { - "id": 5578, - "guid": "5318e886-ec2b-4921-b4fd-21de79079cbb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Miers", - "company": "Vencom", - "phone": "845-542-3808", - "email": "lauren@vencom.com" - }, - { - "id": 5579, - "guid": "0d42fe90-555e-4799-b20a-8ec71f681570", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Davidson", - "company": "Anagraph", - "phone": "890-554-2024", - "email": "caroline@anagraph.com" - }, - { - "id": 5580, - "guid": "754eb2b6-b4c6-4ccb-a554-a0e3e9647711", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina Neal", - "company": "iMedconik", - "phone": "834-416-2682", - "email": "angelina@imedconik.com" - }, - { - "id": 5581, - "guid": "330a86ca-9898-4d33-96f6-b89916f3966b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Gibbs", - "company": "Technogra", - "phone": "847-423-3674", - "email": "mia@technogra.com" - }, - { - "id": 5582, - "guid": "f2e16b04-33aa-4e99-92d5-0a65522ae52c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Young", - "company": "Interliant", - "phone": "879-564-3881", - "email": "molly@interliant.com" - }, - { - "id": 5583, - "guid": "9ffb4d55-e73b-49fa-b2eb-6718a979d5db", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Neal", - "company": "Technogra", - "phone": "869-572-3969", - "email": "kaylee@technogra.com" - }, - { - "id": 5584, - "guid": "b9ce2e32-f6f9-4330-999f-37817d89847c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Creighton", - "company": "OpKeycomm", - "phone": "870-425-3388", - "email": "kylie@opkeycomm.com" - }, - { - "id": 5585, - "guid": "7a4c5ce6-6c53-4234-a976-4dff57e2eb0e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Sherlock", - "company": "US Infratouch", - "phone": "817-485-3493", - "email": "layla@us infratouch.com" - }, - { - "id": 5586, - "guid": "2b049852-20bf-4436-bd1a-0529a74a04bb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Hardman", - "company": "Dynarama", - "phone": "831-469-3590", - "email": "jessica@dynarama.com" - }, - { - "id": 5587, - "guid": "3c4b9647-e67a-4ff2-97b6-052ff50d2b56", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Carroll", - "company": "Qualserve", - "phone": "869-573-2075", - "email": "kylie@qualserve.com" - }, - { - "id": 5588, - "guid": "a9f134e9-7f8a-4127-8ab8-f2b1c209199e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Miers", - "company": "Fibrotouch", - "phone": "874-561-3967", - "email": "katelyn@fibrotouch.com" - }, - { - "id": 5589, - "guid": "7b08fb61-6445-4e93-9956-fdc81579fc17", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Morgan Owen", - "company": "Superscope", - "phone": "896-427-2923", - "email": "morgan@superscope.com" - }, - { - "id": 5590, - "guid": "d397e2ba-7f70-4b14-92b3-a8514661ac2d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Sheldon", - "company": "Conotomics", - "phone": "896-586-2311", - "email": "julia@conotomics.com" - }, - { - "id": 5591, - "guid": "37fca473-4992-4a5b-8464-82d641b407ec", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica Hoggarth", - "company": "SysVenamerica", - "phone": "853-467-2791", - "email": "jessica@sysvenamerica.com" - }, - { - "id": 5592, - "guid": "3b256e03-dad8-4b5f-acad-5cc7ae5bff18", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Ford", - "company": "Sontopia", - "phone": "889-448-2140", - "email": "mia@sontopia.com" - }, - { - "id": 5593, - "guid": "5cc80853-6816-4e9e-8784-06001fad67a7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Fulton", - "company": "Safeagra", - "phone": "848-431-3789", - "email": "madeline@safeagra.com" - }, - { - "id": 5594, - "guid": "b5e9f10a-b1e6-4cbd-9029-9fd317601708", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooklyn Hardman", - "company": "Idmax", - "phone": "846-499-3928", - "email": "brooklyn@idmax.com" - }, - { - "id": 5595, - "guid": "db82f1c8-5811-4b5c-bada-075c29920a0e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Thornton", - "company": "Netsystems", - "phone": "821-453-3267", - "email": "mackenzie@netsystems.com" - }, - { - "id": 5596, - "guid": "f6d7f699-5b23-44be-9c54-876e7ffebc32", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Abramson", - "company": "Jamconik", - "phone": "808-412-3065", - "email": "kylie@jamconik.com" - }, - { - "id": 5597, - "guid": "439bd8d8-3102-42d7-beed-c2b9841bdfaf", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Nevaeh Ward", - "company": "Syssoft", - "phone": "835-588-3324", - "email": "nevaeh@syssoft.com" - }, - { - "id": 5598, - "guid": "ce72dda7-ef97-4a92-a5ce-d7106bdbb5a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Nevaeh Wayne", - "company": "Unconix", - "phone": "858-525-3024", - "email": "nevaeh@unconix.com" - }, - { - "id": 5599, - "guid": "28375100-5b3a-40f0-9398-7b223f9d02e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie White", - "company": "Truetomic", - "phone": "896-517-2471", - "email": "mackenzie@truetomic.com" - }, - { - "id": 5600, - "guid": "a588787f-8951-41eb-bb81-a28eade8b00e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Brooks", - "company": "Westtomik", - "phone": "814-541-3246", - "email": "allison@westtomik.com" - }, - { - "id": 5601, - "guid": "ebae3cd5-5e19-4a23-866f-e11f0bd4d600", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sydney Walkman", - "company": "Truegate", - "phone": "881-561-2821", - "email": "sydney@truegate.com" - }, - { - "id": 5602, - "guid": "572867b5-125f-4c0a-8184-3c750b02b4d5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Wesley", - "company": "Steganoconiche", - "phone": "827-585-2310", - "email": "layla@steganoconiche.com" - }, - { - "id": 5603, - "guid": "333624e1-00d4-4977-86b4-8b10965e8fda", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Hancock", - "company": "Keytheon", - "phone": "817-589-2982", - "email": "peyton@keytheon.com" - }, - { - "id": 5604, - "guid": "f7a8fc6a-7d4d-47ab-8223-2f71649132bc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Hawkins", - "company": "Robotomic", - "phone": "831-562-3201", - "email": "alexis@robotomic.com" - }, - { - "id": 5605, - "guid": "ed6de349-8c9a-490b-8cad-d4441dd32780", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Molligan", - "company": "OpKeycomm", - "phone": "859-591-3361", - "email": "caroline@opkeycomm.com" - }, - { - "id": 5606, - "guid": "bf60cf4e-a698-4f1b-8470-36f39481f8d6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Otis", - "company": "Robotomic", - "phone": "883-448-2882", - "email": "trinity@robotomic.com" - }, - { - "id": 5607, - "guid": "74235290-ec3f-4600-a063-5ff84e873ac4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Ford", - "company": "Anagraph", - "phone": "809-436-3202", - "email": "emma@anagraph.com" - }, - { - "id": 5608, - "guid": "d2c2f383-c4b1-4c5e-a438-78279fa93737", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Oswald", - "company": "Nanobanc", - "phone": "877-596-2302", - "email": "abigail@nanobanc.com" - }, - { - "id": 5609, - "guid": "cec4382f-d0c0-49ca-816e-1487d7f59da1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Winter", - "company": "Gigaura", - "phone": "862-573-2753", - "email": "layla@gigaura.com" - }, - { - "id": 5610, - "guid": "e999ee5f-3b22-4ed0-8257-49f777411be8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Youmans", - "company": "Westtomik", - "phone": "882-555-2328", - "email": "camila@westtomik.com" - }, - { - "id": 5611, - "guid": "325669e8-6be9-4b5c-9551-bdfca6226042", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Higgins", - "company": "Anaframe", - "phone": "810-568-2186", - "email": "rachel@anaframe.com" - }, - { - "id": 5612, - "guid": "75442fc4-96dd-40c8-829f-518c304ee700", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Fisher", - "company": "Titanigraf", - "phone": "846-561-3781", - "email": "julia@titanigraf.com" - }, - { - "id": 5613, - "guid": "a43ebb6d-fa12-4f69-882c-4cf117ffe0de", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Nathan", - "company": "Vencom", - "phone": "817-410-2213", - "email": "samantha@vencom.com" - }, - { - "id": 5614, - "guid": "d4334e07-0693-4905-8e10-0045badeb217", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Day", - "company": "Steganoconiche", - "phone": "836-485-2350", - "email": "chloe@steganoconiche.com" - }, - { - "id": 5615, - "guid": "bade124d-82e1-4a4a-9427-a872acb96c44", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Wayne", - "company": "Navivacs", - "phone": "833-437-3115", - "email": "zoe@navivacs.com" - }, - { - "id": 5616, - "guid": "15acdd7b-b80d-476a-98c2-7197a4585bb3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Thomson", - "company": "Ventanium", - "phone": "840-513-2854", - "email": "ashley@ventanium.com" - }, - { - "id": 5617, - "guid": "a72d860f-6b06-4c18-aef9-69338bd7cdcc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Oldman", - "company": "Orthosoft", - "phone": "865-481-2938", - "email": "katelyn@orthosoft.com" - }, - { - "id": 5618, - "guid": "10a4db08-6efc-410b-bfdb-455c8f7d5f2a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Gate", - "company": "US Omnigraphik", - "phone": "853-517-3802", - "email": "audrey@us omnigraphik.com" - }, - { - "id": 5619, - "guid": "642ee4c7-ebb1-4147-90d4-08a4d9257a20", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Higgins", - "company": "Orthomedia", - "phone": "859-559-2656", - "email": "sophia@orthomedia.com" - }, - { - "id": 5620, - "guid": "e08c0b25-62a9-4e10-a526-046970cfe64e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Davidson", - "company": "Enlogia", - "phone": "890-487-3494", - "email": "emma@enlogia.com" - }, - { - "id": 5621, - "guid": "d1ee1e85-efde-4f74-8a50-5f7f35a01575", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa WifKinson", - "company": "Pacwest", - "phone": "863-490-3003", - "email": "vanessa@pacwest.com" - }, - { - "id": 5622, - "guid": "945133fb-9ce9-4e77-81a5-a41f4bbc20bf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Miller", - "company": "Truegate", - "phone": "880-470-2795", - "email": "abigail@truegate.com" - }, - { - "id": 5623, - "guid": "060d25b9-b8a2-4046-a6a0-ce253095aedd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Murphy", - "company": "Allnet", - "phone": "819-598-2105", - "email": "payton@allnet.com" - }, - { - "id": 5624, - "guid": "ac6bf882-255b-456e-856f-93e54966f98e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Destiny Daniels", - "company": "Westgate", - "phone": "826-487-3555", - "email": "destiny@westgate.com" - }, - { - "id": 5625, - "guid": "29a747ea-7fff-4507-845e-cb6a815e0c2b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Harrison", - "company": "US Infratouch", - "phone": "887-563-3185", - "email": "anna@us infratouch.com" - }, - { - "id": 5626, - "guid": "dc658d8a-ac8e-4d86-ae55-112d04fbee2d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Gardner", - "company": "Syssoft", - "phone": "849-458-3300", - "email": "sophie@syssoft.com" - }, - { - "id": 5627, - "guid": "7a7be12f-a25d-441f-a83c-037a7971769a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Sherlock", - "company": "Syssoft", - "phone": "821-595-3312", - "email": "aubrey@syssoft.com" - }, - { - "id": 5628, - "guid": "324319bd-bd7b-467a-a525-967048dd6ff5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Carrington", - "company": "Mescaridic", - "phone": "814-563-3221", - "email": "angelina@mescaridic.com" - }, - { - "id": 5629, - "guid": "936f492c-f007-4500-b8f6-1987dc480065", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Hancock", - "company": "Anagraph", - "phone": "825-456-3732", - "email": "gabrielle@anagraph.com" - }, - { - "id": 5630, - "guid": "0ec5e098-ba87-4f62-b029-b77670962b8a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Gilson", - "company": "Teratopia", - "phone": "801-475-2337", - "email": "kayla@teratopia.com" - }, - { - "id": 5631, - "guid": "414ae5cb-586a-40e8-8c17-5415c0a2f49c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Walkman", - "company": "iOptystix", - "phone": "879-563-3685", - "email": "aaliyah@ioptystix.com" - }, - { - "id": 5632, - "guid": "99d565eb-988b-450b-a8a2-00860418e0ff", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aaliyah Miller", - "company": "Fibrotouch", - "phone": "867-414-3441", - "email": "aaliyah@fibrotouch.com" - }, - { - "id": 5633, - "guid": "6af8fe04-edd3-4b31-b108-10913994d9b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Brickman", - "company": "iMedconik", - "phone": "866-542-2353", - "email": "faith@imedconik.com" - }, - { - "id": 5634, - "guid": "d4e9f6d0-01b3-459c-a682-ab4ee3cff542", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Turner", - "company": "Mescaridic", - "phone": "818-447-2828", - "email": "victoria@mescaridic.com" - }, - { - "id": 5635, - "guid": "6f3bc7c4-05b6-48bd-a2a1-cfd441030980", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Brooks", - "company": "iMedconik", - "phone": "829-433-2171", - "email": "brianna@imedconik.com" - }, - { - "id": 5636, - "guid": "cbfedea2-ed8e-4f79-9032-8410d0451f3c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Walkman", - "company": "Tekcar", - "phone": "875-485-2523", - "email": "lauren@tekcar.com" - }, - { - "id": 5637, - "guid": "786a9df2-2b50-43d6-9345-b7aaf8356123", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Goldman", - "company": "Thermotomic", - "phone": "845-477-2692", - "email": "olivia@thermotomic.com" - }, - { - "id": 5638, - "guid": "45529308-5465-46d5-aae5-59e6d7f0700a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Galbraith", - "company": "eSteganoergy", - "phone": "879-451-2282", - "email": "destiny@esteganoergy.com" - }, - { - "id": 5639, - "guid": "0c7244c2-9b72-48d6-b970-38299c55f23d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Julia Higgins", - "company": "Fibroserve", - "phone": "824-407-3813", - "email": "julia@fibroserve.com" - }, - { - "id": 5640, - "guid": "a67df446-d86b-4395-b7f4-e201e786dc9e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bailey Gardner", - "company": "Genland", - "phone": "875-517-3906", - "email": "bailey@genland.com" - }, - { - "id": 5641, - "guid": "1a52aab8-518d-489a-b28e-d9f7687fe99e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Owen", - "company": "Compuamerica", - "phone": "807-575-2620", - "email": "katherine@compuamerica.com" - }, - { - "id": 5642, - "guid": "9abd8ec5-e4c3-4f22-98f7-a0527ddd4fc3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Croftoon", - "company": "Technogra", - "phone": "854-438-3645", - "email": "gabriella@technogra.com" - }, - { - "id": 5643, - "guid": "6d4c93ef-6afe-411b-bb10-7a899c794648", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Harrison", - "company": "Westgate", - "phone": "801-406-3560", - "email": "arianna@westgate.com" - }, - { - "id": 5644, - "guid": "2b4608d0-3c41-4930-8d6d-b036643d080b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Gibbs", - "company": "iQualcar", - "phone": "847-585-3299", - "email": "sophia@iqualcar.com" - }, - { - "id": 5645, - "guid": "1164280c-d1da-4b7b-9bc5-f5b8bac6d07c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lillian Brooks", - "company": "Conotomics", - "phone": "850-485-3827", - "email": "lillian@conotomics.com" - }, - { - "id": 5646, - "guid": "8ad6a8c5-7e8f-4659-9820-047865c90fc9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alyssa Vance", - "company": "Robocomm", - "phone": "833-408-2134", - "email": "alyssa@robocomm.com" - }, - { - "id": 5647, - "guid": "f9842f93-2b72-43f9-8870-21d147747c31", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kylie Murphy", - "company": "Rapigrafix", - "phone": "840-410-2006", - "email": "kylie@rapigrafix.com" - }, - { - "id": 5648, - "guid": "2788825a-22f9-48e2-b061-ab2ab218bd4e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Oldman", - "company": "Generola", - "phone": "885-472-3169", - "email": "sydney@generola.com" - }, - { - "id": 5649, - "guid": "71d5453d-c9ce-44d4-8928-76ae9091adc9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Gilmore", - "company": "Netseco", - "phone": "817-589-2697", - "email": "hannah@netseco.com" - }, - { - "id": 5650, - "guid": "f76a5fb7-7cb0-4dc3-b612-824d45e38072", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Nash", - "company": "Techtron", - "phone": "801-511-2288", - "email": "kylie@techtron.com" - }, - { - "id": 5651, - "guid": "5f083893-363c-47ab-8eac-8501c99ac99d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Chandter", - "company": "Anagraph", - "phone": "892-447-3776", - "email": "alexa@anagraph.com" - }, - { - "id": 5652, - "guid": "895ad524-589d-4b33-8c75-fe494cda0b46", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Winter", - "company": "Nanobanc", - "phone": "893-534-2198", - "email": "amelia@nanobanc.com" - }, - { - "id": 5653, - "guid": "54bba75b-62fc-47f9-ae59-3c38e33a0157", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Gilson", - "company": "Unologic", - "phone": "803-495-2407", - "email": "anna@unologic.com" - }, - { - "id": 5654, - "guid": "6b3ee512-7b25-453b-84b1-ccd575161a1f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Gardner", - "company": "Aprama", - "phone": "810-589-3802", - "email": "elizabeth@aprama.com" - }, - { - "id": 5655, - "guid": "1da76b7e-6a89-4794-ba75-135acce29db1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madison Brooks", - "company": "Westgate", - "phone": "846-508-2318", - "email": "madison@westgate.com" - }, - { - "id": 5656, - "guid": "353ff7bc-7256-4a5d-9850-58db8643d543", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Young", - "company": "Jamconik", - "phone": "823-436-2275", - "email": "samantha@jamconik.com" - }, - { - "id": 5657, - "guid": "c2f4e6cc-0b54-499d-86c8-152f1931db0a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Galbraith", - "company": "Multitiqua", - "phone": "841-544-2128", - "email": "chloe@multitiqua.com" - }, - { - "id": 5658, - "guid": "54a69d1f-8e18-4deb-85ce-709935164a12", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Miln", - "company": "Celgra", - "phone": "884-457-2127", - "email": "victoria@celgra.com" - }, - { - "id": 5659, - "guid": "70fd0373-9477-4515-a485-94a3f3338cd5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Brooks", - "company": "RoboAerlogix", - "phone": "849-516-2553", - "email": "isabella@roboaerlogix.com" - }, - { - "id": 5660, - "guid": "e5c03e2d-ba6d-4e6d-8cf0-2aab779f59bc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Nelson", - "company": "Orthomedia", - "phone": "818-427-3201", - "email": "eva@orthomedia.com" - }, - { - "id": 5661, - "guid": "88789fc6-4ad9-4771-857b-9a34fde98efd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Hancock", - "company": "Sontopia", - "phone": "803-450-2400", - "email": "jocelyn@sontopia.com" - }, - { - "id": 5662, - "guid": "6e120728-fb0d-4a35-8777-e2ed44ee88d4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Sheldon", - "company": "Steganoconiche", - "phone": "814-404-2650", - "email": "layla@steganoconiche.com" - }, - { - "id": 5663, - "guid": "df60242d-ecf1-4113-a71a-20fdb77b9e68", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Caroline Thorndike", - "company": "Conrama", - "phone": "858-406-2027", - "email": "caroline@conrama.com" - }, - { - "id": 5664, - "guid": "ace29b52-64c7-401b-a76c-f217b8f8078b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Webster", - "company": "Safeagra", - "phone": "895-453-2192", - "email": "valeria@safeagra.com" - }, - { - "id": 5665, - "guid": "d19b5f99-a40c-455d-a562-cec4addade4c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Crossman", - "company": "Fibroserve", - "phone": "855-565-2741", - "email": "khloe@fibroserve.com" - }, - { - "id": 5666, - "guid": "1843f396-faeb-4a72-b9aa-26c813201597", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Wayne", - "company": "Ameritron", - "phone": "814-573-3437", - "email": "peyton@ameritron.com" - }, - { - "id": 5667, - "guid": "0cd2c124-4e77-42c2-8968-2b5348f885e4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kimberly Smith", - "company": "Aluco", - "phone": "839-576-3935", - "email": "kimberly@aluco.com" - }, - { - "id": 5668, - "guid": "b4be3788-e777-4868-a35c-ef34434e5cbf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Gerald", - "company": "Unologic", - "phone": "814-434-2627", - "email": "ashley@unologic.com" - }, - { - "id": 5669, - "guid": "942310e8-7eb6-40b3-acf9-65870d8cf73a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Day", - "company": "Hypervaco", - "phone": "820-445-3103", - "email": "riley@hypervaco.com" - }, - { - "id": 5670, - "guid": "55172cf6-4959-478c-9286-d66a864ba035", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Daniels", - "company": "Vencom", - "phone": "876-485-3177", - "email": "gabrielle@vencom.com" - }, - { - "id": 5671, - "guid": "0e9e2dea-b8ea-431a-ac0e-b9a4f09b04aa", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jocelyn Wood", - "company": "Gigaura", - "phone": "805-490-2174", - "email": "jocelyn@gigaura.com" - }, - { - "id": 5672, - "guid": "6dbb2ac5-606c-4cab-b6e5-2777de3770e6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Oldridge", - "company": "Allnet", - "phone": "816-405-2692", - "email": "gabriella@allnet.com" - }, - { - "id": 5673, - "guid": "9640f2b6-2314-46ee-a22a-ef71c099be34", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie White", - "company": "Rapigrafix", - "phone": "805-585-2730", - "email": "sophie@rapigrafix.com" - }, - { - "id": 5674, - "guid": "f03b10cc-ffbd-4bcd-8ef7-ffc2c4b9becf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Otis", - "company": "iOptystix", - "phone": "826-501-3799", - "email": "paige@ioptystix.com" - }, - { - "id": 5675, - "guid": "0581460a-03af-4a89-8dbd-57d135d74b13", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Chandter", - "company": "Mescatron", - "phone": "806-502-2804", - "email": "jessica@mescatron.com" - }, - { - "id": 5676, - "guid": "9d2ab957-a2dd-47e6-8519-68aeb056ee70", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Chandter", - "company": "Syssoft", - "phone": "849-561-3377", - "email": "victoria@syssoft.com" - }, - { - "id": 5677, - "guid": "3166cadd-1f87-48d4-8dc0-bcbdab11d194", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Fulton", - "company": "Generola", - "phone": "831-435-2180", - "email": "grace@generola.com" - }, - { - "id": 5678, - "guid": "b8600e1e-9eec-483a-8381-965f4ab1022c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Makayla Thornton", - "company": "Polytheon", - "phone": "848-544-3129", - "email": "makayla@polytheon.com" - }, - { - "id": 5679, - "guid": "4ba6c505-6eba-4a05-84b5-071730e3c36c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Thorndike", - "company": "Xeicon", - "phone": "808-586-2275", - "email": "kylie@xeicon.com" - }, - { - "id": 5680, - "guid": "ba84be84-67c3-4542-a401-e5267223ae1d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Trinity Freeman", - "company": "Jamrola", - "phone": "840-507-2729", - "email": "trinity@jamrola.com" - }, - { - "id": 5681, - "guid": "fd711ba6-bc7f-4bef-b4ac-bab9651ed9f3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Wainwright", - "company": "Infragraph", - "phone": "899-405-2652", - "email": "vanessa@infragraph.com" - }, - { - "id": 5682, - "guid": "022a5c3f-3588-4242-802a-6ee3f8e8ae9b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophia Carrington", - "company": "Conrama", - "phone": "882-585-2182", - "email": "sophia@conrama.com" - }, - { - "id": 5683, - "guid": "43e01b40-21d1-4772-833a-428aa1e39a63", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaylee Hodges", - "company": "InfoAirway", - "phone": "836-483-3774", - "email": "kaylee@infoairway.com" - }, - { - "id": 5684, - "guid": "a77c3620-6ae2-43fe-9199-4828fe0666e6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Clapton", - "company": "Inridium", - "phone": "803-559-3324", - "email": "serenity@inridium.com" - }, - { - "id": 5685, - "guid": "80d34ae8-8c32-45cf-96ba-a0cbe8e12d42", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Croftoon", - "company": "Unologic", - "phone": "805-447-2194", - "email": "arianna@unologic.com" - }, - { - "id": 5686, - "guid": "52643843-7231-449a-8904-9b2326c628b5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Freeman", - "company": "Westgate", - "phone": "812-540-3575", - "email": "evelyn@westgate.com" - }, - { - "id": 5687, - "guid": "2a303f15-7a38-4bbf-818a-48ec113f84c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Morrison", - "company": "Rapigrafix", - "phone": "896-531-2209", - "email": "maya@rapigrafix.com" - }, - { - "id": 5688, - "guid": "afe03297-a722-4ffb-a13d-e30ee8942804", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Webster", - "company": "iSkyvaco", - "phone": "801-400-3192", - "email": "chloe@iskyvaco.com" - }, - { - "id": 5689, - "guid": "84e7c39e-e9c9-4b15-a748-b01dc8743c1a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Mercer", - "company": "Ameritron", - "phone": "848-408-2324", - "email": "samantha@ameritron.com" - }, - { - "id": 5690, - "guid": "d5b66250-19d0-41bc-8165-7fe31022bc10", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Youmans", - "company": "Titanirola", - "phone": "814-475-2580", - "email": "julia@titanirola.com" - }, - { - "id": 5691, - "guid": "694fbd40-c802-43a9-83eb-fb7cd48a347e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Miller", - "company": "Orthomedia", - "phone": "846-439-2214", - "email": "allison@orthomedia.com" - }, - { - "id": 5692, - "guid": "c31ec2c6-83c1-4fcf-9706-c84293e85c24", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kimberly Owen", - "company": "Safeagra", - "phone": "847-597-3334", - "email": "kimberly@safeagra.com" - }, - { - "id": 5693, - "guid": "49c58597-1121-4e74-b0d9-bcbaa7765c73", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mya Nash", - "company": "Quintegrity", - "phone": "859-407-2036", - "email": "mya@quintegrity.com" - }, - { - "id": 5694, - "guid": "c08b094e-ea68-4dc2-b78f-e0adf1c98098", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Chandter", - "company": "Netseco", - "phone": "866-517-2744", - "email": "victoria@netseco.com" - }, - { - "id": 5695, - "guid": "a51b16b5-4d16-4a68-86a8-1b427dd3a7fc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Genesis Freeman", - "company": "Genland", - "phone": "887-561-3512", - "email": "genesis@genland.com" - }, - { - "id": 5696, - "guid": "5487364a-36ea-4c30-a1e1-30989df90156", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Paige Freeman", - "company": "Mescatron", - "phone": "861-428-2421", - "email": "paige@mescatron.com" - }, - { - "id": 5697, - "guid": "7743eae6-1872-48f3-8b3b-6b17bf3e8771", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Milton", - "company": "Safetrust", - "phone": "849-568-2812", - "email": "chloe@safetrust.com" - }, - { - "id": 5698, - "guid": "bfbc542a-ae59-4c86-a750-c175e133312b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Turner", - "company": "Entcast", - "phone": "881-423-2644", - "email": "arianna@entcast.com" - }, - { - "id": 5699, - "guid": "5a65050a-5573-4af7-8168-0d9eb0c75e99", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Goldman", - "company": "US Omnigraphik", - "phone": "899-404-3640", - "email": "autumn@us omnigraphik.com" - }, - { - "id": 5700, - "guid": "987d0c63-72f9-46d5-ac9b-5881e005cf70", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Brown", - "company": "SysUSA", - "phone": "835-575-3368", - "email": "taylor@sysusa.com" - }, - { - "id": 5701, - "guid": "67c1707e-371d-445b-b40f-03157a60b49e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Gate", - "company": "Celgra", - "phone": "874-406-3137", - "email": "kimberly@celgra.com" - }, - { - "id": 5702, - "guid": "97d46d8c-1d62-42d3-b87e-fc1b7494a1a9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie White", - "company": "Infraique", - "phone": "811-493-2543", - "email": "sophie@infraique.com" - }, - { - "id": 5703, - "guid": "e4129d7c-cc71-4eb6-bfb6-58214160637d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Makayla Youmans", - "company": "Airdyne", - "phone": "820-563-2488", - "email": "makayla@airdyne.com" - }, - { - "id": 5704, - "guid": "4aab5ff5-c6aa-49a5-929d-7f876554ee9a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Brooks", - "company": "Conotomics", - "phone": "816-534-2678", - "email": "lillian@conotomics.com" - }, - { - "id": 5705, - "guid": "732d5a8a-e5ad-4724-b19c-ac45359e6b70", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Harrison", - "company": "Allnet", - "phone": "891-529-3316", - "email": "ariana@allnet.com" - }, - { - "id": 5706, - "guid": "e0f932be-0c75-4290-8273-f807f46a90b8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Faith Gibbs", - "company": "Indisco", - "phone": "871-495-2061", - "email": "faith@indisco.com" - }, - { - "id": 5707, - "guid": "4677158a-121d-47f1-b327-705e1777baee", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mariah Gate", - "company": "Thermotomic", - "phone": "874-459-3166", - "email": "mariah@thermotomic.com" - }, - { - "id": 5708, - "guid": "87941eee-d409-461b-a3d1-5c65710f5d2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Davidson", - "company": "Airdyne", - "phone": "860-551-2414", - "email": "kaylee@airdyne.com" - }, - { - "id": 5709, - "guid": "efe0ca43-e0c2-4167-94cf-5ec4983b217d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Clapton", - "company": "Unconix", - "phone": "872-552-3504", - "email": "alexa@unconix.com" - }, - { - "id": 5710, - "guid": "a6c719e7-2b81-4fc4-8ff6-23cb7c0a88f2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mya Young", - "company": "Aprama", - "phone": "880-463-2831", - "email": "mya@aprama.com" - }, - { - "id": 5711, - "guid": "91cbac45-591f-4ac2-a0b6-801681448c2d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Carrington", - "company": "Robotomic", - "phone": "827-522-3622", - "email": "samantha@robotomic.com" - }, - { - "id": 5712, - "guid": "f2824d6b-b834-48e5-93b8-6529077e8e82", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Michaelson", - "company": "Enlogia", - "phone": "872-400-3392", - "email": "faith@enlogia.com" - }, - { - "id": 5713, - "guid": "c511b026-b234-4147-b579-854c816b3ae3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Timmons", - "company": "Titanirola", - "phone": "865-401-2426", - "email": "khloe@titanirola.com" - }, - { - "id": 5714, - "guid": "14a5f732-8aa5-4e76-8d1b-1d3928178652", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Vance", - "company": "Interliant", - "phone": "843-441-2956", - "email": "aubrey@interliant.com" - }, - { - "id": 5715, - "guid": "3bf5539a-7ecc-416f-9c67-d38a8368509a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jasmine Freeman", - "company": "iQualcar", - "phone": "823-564-2500", - "email": "jasmine@iqualcar.com" - }, - { - "id": 5716, - "guid": "e0673789-6c28-4208-a272-ea3a4111e45d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Carrington", - "company": "Technogra", - "phone": "885-591-2105", - "email": "paige@technogra.com" - }, - { - "id": 5717, - "guid": "ee869f62-d2a9-41a7-aa84-b06a08ce5381", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Carroll", - "company": "Videobanc", - "phone": "857-440-3113", - "email": "aaliyah@videobanc.com" - }, - { - "id": 5718, - "guid": "16e18225-f342-4533-aac6-5abf59ced45a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Wainwright", - "company": "Aluco", - "phone": "845-507-2358", - "email": "amelia@aluco.com" - }, - { - "id": 5719, - "guid": "261b9000-4863-4d34-b0d9-9bae2c5d28ba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Webster", - "company": "Proline", - "phone": "818-550-3817", - "email": "sofia@proline.com" - }, - { - "id": 5720, - "guid": "6fe45633-2b11-44d8-be9c-55a15412bbb1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jessica Vaughan", - "company": "Navivacs", - "phone": "862-474-2843", - "email": "jessica@navivacs.com" - }, - { - "id": 5721, - "guid": "eaa63e06-dc90-4396-b298-88d9734a13bb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Gilson", - "company": "eSteganoergy", - "phone": "872-572-2826", - "email": "camila@esteganoergy.com" - }, - { - "id": 5722, - "guid": "1e07573b-ee92-4ca8-8501-7c81d7faeadb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Clapton", - "company": "Syssoft", - "phone": "838-591-2639", - "email": "destiny@syssoft.com" - }, - { - "id": 5723, - "guid": "603fe255-6025-4abb-820d-635cdddba06f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Avery Nash", - "company": "Celgra", - "phone": "842-431-3992", - "email": "avery@celgra.com" - }, - { - "id": 5724, - "guid": "6ebb45ba-b7b9-413f-9066-ebdce6111200", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bella Higgins", - "company": "Unologic", - "phone": "859-549-3118", - "email": "bella@unologic.com" - }, - { - "id": 5725, - "guid": "844284da-fbd8-4776-bcf8-c7abce872085", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Anna Creighton", - "company": "Orthosoft", - "phone": "828-568-2226", - "email": "anna@orthosoft.com" - }, - { - "id": 5726, - "guid": "c7fa6d16-1040-4afd-84f9-677509062314", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Thomson", - "company": "Truegate", - "phone": "811-468-2538", - "email": "kaitlyn@truegate.com" - }, - { - "id": 5727, - "guid": "6d96e8d3-866a-4cc5-96b6-ee18a5e95b5b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Gilbert", - "company": "Anagraph", - "phone": "859-556-2286", - "email": "jasmine@anagraph.com" - }, - { - "id": 5728, - "guid": "172d68f5-a07a-4d18-ba4c-acf02c23d0b1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gianna Conors", - "company": "iEnland", - "phone": "840-469-3714", - "email": "gianna@ienland.com" - }, - { - "id": 5729, - "guid": "8d1bfefe-673f-476e-b6a4-250e66580626", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Osborne", - "company": "Allphysiche", - "phone": "880-417-3007", - "email": "julia@allphysiche.com" - }, - { - "id": 5730, - "guid": "8d60cdee-48a6-41f4-8d18-fdcee5f78e7b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Hoggarth", - "company": "Westgate", - "phone": "899-544-3920", - "email": "valeria@westgate.com" - }, - { - "id": 5731, - "guid": "7f6977c2-8600-4188-b79b-c6a87c9f431f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Oldridge", - "company": "Thermotomic", - "phone": "832-500-2501", - "email": "kaylee@thermotomic.com" - }, - { - "id": 5732, - "guid": "b0efdff9-0dd1-426a-bd73-a2e201f13e78", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Evelyn Harrison", - "company": "Raylog", - "phone": "868-478-3590", - "email": "evelyn@raylog.com" - }, - { - "id": 5733, - "guid": "84dc8b77-1aa7-4073-b1f7-49101db96e09", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Haig", - "company": "Vencom", - "phone": "817-527-2071", - "email": "madeline@vencom.com" - }, - { - "id": 5734, - "guid": "75d12391-a71a-4f5b-9d29-cdc7c72c7e5f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Vance", - "company": "Steganoconiche", - "phone": "876-517-3674", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 5735, - "guid": "295048d1-49fd-4e5c-86a1-c9b57f4f8354", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophie WifKinson", - "company": "Unconix", - "phone": "891-553-3949", - "email": "sophie@unconix.com" - }, - { - "id": 5736, - "guid": "ceb03f81-4a79-4471-a8ed-b8ca993a3ce4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Webster", - "company": "SysUSA", - "phone": "879-515-3362", - "email": "brooklyn@sysusa.com" - }, - { - "id": 5737, - "guid": "9cad62e5-c48a-4c83-b20b-4463a7f710d4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mariah Carter", - "company": "Unconix", - "phone": "811-470-2635", - "email": "mariah@unconix.com" - }, - { - "id": 5738, - "guid": "c6a1d8a7-62c2-4fb4-84f4-98b69a6b116e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Thornton", - "company": "InfoAirway", - "phone": "802-513-2357", - "email": "isabella@infoairway.com" - }, - { - "id": 5739, - "guid": "9698f605-bdc3-41a0-9468-7f870f806e0c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Chesterton", - "company": "Xeicon", - "phone": "869-452-3031", - "email": "brianna@xeicon.com" - }, - { - "id": 5740, - "guid": "366e4816-8ea0-444e-be1c-d391234c13e6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Carroll", - "company": "Ameritron", - "phone": "886-431-2159", - "email": "eva@ameritron.com" - }, - { - "id": 5741, - "guid": "12e567fb-6a15-4161-9471-cc3608c6a863", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabelle Thornton", - "company": "Airdyne", - "phone": "813-545-2284", - "email": "isabelle@airdyne.com" - }, - { - "id": 5742, - "guid": "44ad3d84-8fe7-4065-95a1-356419570793", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Brickman", - "company": "eSteganoergy", - "phone": "886-403-3524", - "email": "abigail@esteganoergy.com" - }, - { - "id": 5743, - "guid": "c7b81422-4d92-4506-a9d7-62463d5f7d0b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Gate", - "company": "Indisco", - "phone": "826-402-2690", - "email": "brianna@indisco.com" - }, - { - "id": 5744, - "guid": "6568ee4c-6184-4921-b284-3b911261dd2f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Sherlock", - "company": "Syssoft", - "phone": "829-470-2190", - "email": "kylie@syssoft.com" - }, - { - "id": 5745, - "guid": "9688a00a-bcab-48cf-a315-beed86d45d52", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Osborne", - "company": "Idmax", - "phone": "830-535-3582", - "email": "faith@idmax.com" - }, - { - "id": 5746, - "guid": "b4a4422e-d95c-4777-94af-7fa78d34c911", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Wayne", - "company": "Multitiqua", - "phone": "898-559-3434", - "email": "lily@multitiqua.com" - }, - { - "id": 5747, - "guid": "dbe396dd-6a07-491a-b8ff-ef040a11bdb3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Calhoun", - "company": "iSkyvaco", - "phone": "893-596-2135", - "email": "alexis@iskyvaco.com" - }, - { - "id": 5748, - "guid": "f2cfafff-f668-4061-9521-e02b6c13220f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Milton", - "company": "Fibroserve", - "phone": "849-479-3088", - "email": "aaliyah@fibroserve.com" - }, - { - "id": 5749, - "guid": "1ee1d86d-d029-4402-9522-295331aa58c8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Gate", - "company": "Orthomedia", - "phone": "863-588-2264", - "email": "paige@orthomedia.com" - }, - { - "id": 5750, - "guid": "0d53bc88-2482-4b73-99fa-0a0dc056826b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Amelia Gate", - "company": "Teknoplexon", - "phone": "834-491-3677", - "email": "amelia@teknoplexon.com" - }, - { - "id": 5751, - "guid": "48dd56f9-ed24-4332-b787-9cc311b25591", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Wainwright", - "company": "Cryptotegrity", - "phone": "824-562-2293", - "email": "arianna@cryptotegrity.com" - }, - { - "id": 5752, - "guid": "9f146141-b9b4-439e-a7fe-328e6de385de", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Gerald", - "company": "Navivacs", - "phone": "829-467-2119", - "email": "addison@navivacs.com" - }, - { - "id": 5753, - "guid": "3bd1ea31-496e-4286-b216-d182d1682665", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Wesley", - "company": "Skydata", - "phone": "802-598-3165", - "email": "autumn@skydata.com" - }, - { - "id": 5754, - "guid": "e3846119-2d84-469e-80e5-662da3672394", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Youmans", - "company": "Teknoplexon", - "phone": "829-472-3471", - "email": "valeria@teknoplexon.com" - }, - { - "id": 5755, - "guid": "aafbf246-e6a8-470f-94ca-9f53aa20fee8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ariana Hodges", - "company": "Cryptotegrity", - "phone": "872-461-2770", - "email": "ariana@cryptotegrity.com" - }, - { - "id": 5756, - "guid": "d395bf29-3ad1-402e-a3bb-b94fd87d0128", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Carter", - "company": "Cryptotemplate", - "phone": "832-499-3593", - "email": "kaylee@cryptotemplate.com" - }, - { - "id": 5757, - "guid": "04b78413-8198-4efc-8288-8c397819f508", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Oswald", - "company": "Cryptotemplate", - "phone": "853-577-3633", - "email": "addison@cryptotemplate.com" - }, - { - "id": 5758, - "guid": "294eaac6-a7f5-4429-9a25-2637e188dd22", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Claire Bush", - "company": "Infraique", - "phone": "841-546-2574", - "email": "claire@infraique.com" - }, - { - "id": 5759, - "guid": "ccf997b0-eaa1-410c-967a-5b0c5bf6f8b6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Adamson", - "company": "RoboAerlogix", - "phone": "899-544-2530", - "email": "arianna@roboaerlogix.com" - }, - { - "id": 5760, - "guid": "ce6ead7f-edc1-4b17-92d5-a0dc1a8eadef", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Miller", - "company": "Netseco", - "phone": "863-595-3893", - "email": "julia@netseco.com" - }, - { - "id": 5761, - "guid": "f0a88dcb-f6ab-46c3-aa99-4721a581e224", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Charlson", - "company": "Navivacs", - "phone": "801-520-2994", - "email": "kaitlyn@navivacs.com" - }, - { - "id": 5762, - "guid": "2f21b7d5-eb57-48e4-b92a-5e257d9952cc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Brickman", - "company": "Textiqua", - "phone": "898-446-2372", - "email": "grace@textiqua.com" - }, - { - "id": 5763, - "guid": "8e27038a-5aca-4691-b3d8-b178d16bd3d8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Osborne", - "company": "Robotomic", - "phone": "863-450-3897", - "email": "autumn@robotomic.com" - }, - { - "id": 5764, - "guid": "9eb95559-8c95-4e6a-b32a-371258bee3b6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Gate", - "company": "Allnet", - "phone": "899-543-2444", - "email": "katherine@allnet.com" - }, - { - "id": 5765, - "guid": "970a51e0-76bb-4a54-af06-625aa6d5c042", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Avery Young", - "company": "Anaframe", - "phone": "823-521-3543", - "email": "avery@anaframe.com" - }, - { - "id": 5766, - "guid": "738dac9c-6c80-4754-9bd3-8538808bde24", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Nathan", - "company": "SysVenamerica", - "phone": "884-589-3137", - "email": "emma@sysvenamerica.com" - }, - { - "id": 5767, - "guid": "f106190e-a0c6-4db1-8809-34509aae75f5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Watson", - "company": "RoboAerlogix", - "phone": "824-559-2118", - "email": "mia@roboaerlogix.com" - }, - { - "id": 5768, - "guid": "5f2b0f00-9dfc-4e79-a039-9464093fd1a5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Ford", - "company": "Mescatron", - "phone": "876-476-3404", - "email": "khloe@mescatron.com" - }, - { - "id": 5769, - "guid": "84ed56b6-1652-41ad-a7f3-b0778df57e4f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aubrey Gill", - "company": "Robotemplate", - "phone": "865-551-3507", - "email": "aubrey@robotemplate.com" - }, - { - "id": 5770, - "guid": "bd5280de-d77f-444e-b13e-d5ee17687ca9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Oldridge", - "company": "Westmedia", - "phone": "862-526-3404", - "email": "hannah@westmedia.com" - }, - { - "id": 5771, - "guid": "47f5fe5d-3a38-49d7-98dc-3e373f53f491", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Crossman", - "company": "Transtouch", - "phone": "843-475-2719", - "email": "sophie@transtouch.com" - }, - { - "id": 5772, - "guid": "cbcad04b-a195-4108-9b6d-37be318979f3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Nash", - "company": "Genland", - "phone": "831-598-2983", - "email": "aaliyah@genland.com" - }, - { - "id": 5773, - "guid": "b000fd91-5017-45c7-a6c9-5c7feef9f502", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Croftoon", - "company": "iMedconik", - "phone": "878-521-2624", - "email": "molly@imedconik.com" - }, - { - "id": 5774, - "guid": "916b51c4-9e93-405e-9c08-b522e0851bc6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Murphy", - "company": "Turbomart", - "phone": "877-537-2382", - "email": "bailey@turbomart.com" - }, - { - "id": 5775, - "guid": "94aa87e7-af8d-4a7d-8b9b-22b517465eac", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Autumn Youmans", - "company": "Polytheon", - "phone": "859-477-2556", - "email": "autumn@polytheon.com" - }, - { - "id": 5776, - "guid": "24d7c407-662e-4ec6-acaf-710e20ba4d47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Youmans", - "company": "Xeicon", - "phone": "894-526-2232", - "email": "savannah@xeicon.com" - }, - { - "id": 5777, - "guid": "400ea65b-1b61-424f-8d3d-4574df1e6511", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Otis", - "company": "Quintegrity", - "phone": "821-401-3235", - "email": "taylor@quintegrity.com" - }, - { - "id": 5778, - "guid": "40b2b83a-f499-4de0-97d0-abcd3004ac6b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Hannah Goodman", - "company": "Aluco", - "phone": "896-425-3243", - "email": "hannah@aluco.com" - }, - { - "id": 5779, - "guid": "cea9f1d8-4204-4dea-b82a-228aee0d9108", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Higgins", - "company": "Orthosoft", - "phone": "862-452-2176", - "email": "jessica@orthosoft.com" - }, - { - "id": 5780, - "guid": "81575ea8-aa3d-4c31-b2b5-3f8b1bb96e22", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Bush", - "company": "Nanobanc", - "phone": "839-503-2273", - "email": "makayla@nanobanc.com" - }, - { - "id": 5781, - "guid": "b8b8d86b-05d3-49b0-81a9-46c355b39ec0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Carter", - "company": "Allphysiche", - "phone": "838-425-3125", - "email": "kaitlyn@allphysiche.com" - }, - { - "id": 5782, - "guid": "c77d3e97-79c6-4b59-89ef-a202a6a90c99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Hamphrey", - "company": "Tekcar", - "phone": "853-513-3898", - "email": "victoria@tekcar.com" - }, - { - "id": 5783, - "guid": "c31d5db8-41af-4ff2-a415-8d7f370a1c9f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith WifKinson", - "company": "Textiqua", - "phone": "812-513-3615", - "email": "faith@textiqua.com" - }, - { - "id": 5784, - "guid": "06ca88d8-e06e-4653-94d0-02f13009419c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Bush", - "company": "Thermotomic", - "phone": "885-544-2563", - "email": "olivia@thermotomic.com" - }, - { - "id": 5785, - "guid": "7e0c0d3e-fec4-4277-ae9f-d636f5f0a117", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Nelson", - "company": "Compuamerica", - "phone": "882-540-3295", - "email": "emma@compuamerica.com" - }, - { - "id": 5786, - "guid": "72005e2b-bea1-4942-adf2-e69170e38e84", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Turner", - "company": "Superscope", - "phone": "807-568-3424", - "email": "mackenzie@superscope.com" - }, - { - "id": 5787, - "guid": "b53f1a5e-c663-41ce-b9be-4d8fb77e8c48", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Nevaeh Harrison", - "company": "RoboAerlogix", - "phone": "849-495-3694", - "email": "nevaeh@roboaerlogix.com" - }, - { - "id": 5788, - "guid": "b16487f5-465f-49d3-87af-d30f57cb7076", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Conors", - "company": "Indisco", - "phone": "854-500-3301", - "email": "nevaeh@indisco.com" - }, - { - "id": 5789, - "guid": "80dda5ae-e992-4728-8be3-909fb433c5c8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Charlson", - "company": "OpKeycomm", - "phone": "851-481-3904", - "email": "addison@opkeycomm.com" - }, - { - "id": 5790, - "guid": "94f7e6dd-1372-442d-9b91-e2332c75d009", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Charlotte Ford", - "company": "Titanigraf", - "phone": "878-467-3706", - "email": "charlotte@titanigraf.com" - }, - { - "id": 5791, - "guid": "cbd95899-5c51-45a9-8b4a-20e53c84a19d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aaliyah White", - "company": "Cryptotemplate", - "phone": "863-564-3192", - "email": "aaliyah@cryptotemplate.com" - }, - { - "id": 5792, - "guid": "bbaa3b90-703c-4ffa-9476-f99102ccbcb6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katherine Creighton", - "company": "Navivacs", - "phone": "886-597-2768", - "email": "katherine@navivacs.com" - }, - { - "id": 5793, - "guid": "9823a87f-778d-452f-925d-c32aeefa3491", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Daniels", - "company": "RoboAerlogix", - "phone": "807-403-2432", - "email": "savannah@roboaerlogix.com" - }, - { - "id": 5794, - "guid": "fb20f968-b994-4994-abe6-3980026fc9d6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Chloe Molligan", - "company": "Fibrotopia", - "phone": "854-544-3497", - "email": "chloe@fibrotopia.com" - }, - { - "id": 5795, - "guid": "394006b3-6ec7-45b3-ad73-244765c52927", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Hancock", - "company": "Xeicon", - "phone": "819-444-3329", - "email": "madison@xeicon.com" - }, - { - "id": 5796, - "guid": "0bb9ed48-cf72-4516-93ce-82b1e3f90b7e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Hamphrey", - "company": "iEnland", - "phone": "846-462-3658", - "email": "sophie@ienland.com" - }, - { - "id": 5797, - "guid": "c0ea83d9-6611-42d9-8e1a-e2255cc40628", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Miller", - "company": "Fibrotopia", - "phone": "846-561-3617", - "email": "brooke@fibrotopia.com" - }, - { - "id": 5798, - "guid": "62888a7f-1ece-4368-832b-33e1f5e45ece", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Oldman", - "company": "Ameritron", - "phone": "859-433-3465", - "email": "katherine@ameritron.com" - }, - { - "id": 5799, - "guid": "fcd7fd33-a50e-48bd-952e-9bceb5ca60e1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Morrison", - "company": "Fibroserve", - "phone": "833-450-2636", - "email": "addison@fibroserve.com" - }, - { - "id": 5800, - "guid": "533481d2-b880-419b-9c5d-4a190240b73b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Carrington", - "company": "eSteganoergy", - "phone": "852-575-3746", - "email": "vanessa@esteganoergy.com" - }, - { - "id": 5801, - "guid": "a0e58989-3ae6-490d-a47d-2b93b3c3c7c8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Haig", - "company": "Westmedia", - "phone": "894-507-2864", - "email": "emily@westmedia.com" - }, - { - "id": 5802, - "guid": "d5670aaf-206b-4c3f-9da5-3260acb8304b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Sheldon", - "company": "Techtron", - "phone": "857-495-2584", - "email": "jessica@techtron.com" - }, - { - "id": 5803, - "guid": "79bde3d8-1763-4cc3-8598-9a495c5779a0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lily Gilmore", - "company": "Multitiqua", - "phone": "823-507-3562", - "email": "lily@multitiqua.com" - }, - { - "id": 5804, - "guid": "2e1be4fa-777f-4bb0-85c4-7f4da833e48a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Wainwright", - "company": "Syssoft", - "phone": "837-581-2411", - "email": "madeline@syssoft.com" - }, - { - "id": 5805, - "guid": "3e338e72-d8f1-4d72-83ad-67b79c994e48", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Wesley", - "company": "Techtron", - "phone": "857-536-2861", - "email": "mia@techtron.com" - }, - { - "id": 5806, - "guid": "7232ac06-8b27-40d6-ac74-135cdaaac6f4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Chapman", - "company": "Skydata", - "phone": "818-587-2366", - "email": "destiny@skydata.com" - }, - { - "id": 5807, - "guid": "836204ee-f836-43cc-80e1-9141c15a7f9b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Fulton", - "company": "US Omnigraphik", - "phone": "896-536-3644", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 5808, - "guid": "6431bf3e-48e2-4c81-a5c9-a70a68191da7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Faith Haig", - "company": "Infragraph", - "phone": "811-405-2710", - "email": "faith@infragraph.com" - }, - { - "id": 5809, - "guid": "7d1d5690-4a1a-4209-a68e-ee7f672dba01", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Hoggarth", - "company": "Proline", - "phone": "813-459-3990", - "email": "allison@proline.com" - }, - { - "id": 5810, - "guid": "109a4221-1ead-4d4b-a555-84f7a37f2e76", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Smith", - "company": "Mescaridic", - "phone": "842-452-2997", - "email": "jocelyn@mescaridic.com" - }, - { - "id": 5811, - "guid": "7507a71f-f95c-4984-80d4-5b1c2de48e7a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Timmons", - "company": "Robotemplate", - "phone": "875-596-2502", - "email": "riley@robotemplate.com" - }, - { - "id": 5812, - "guid": "24e047ef-b158-444d-b292-b490d93b807f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Creighton", - "company": "Conotomics", - "phone": "899-531-2250", - "email": "addison@conotomics.com" - }, - { - "id": 5813, - "guid": "4b577d26-e02d-481b-91f4-98bd88b0a33d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Clapton", - "company": "RoboAerlogix", - "phone": "804-574-3393", - "email": "riley@roboaerlogix.com" - }, - { - "id": 5814, - "guid": "13f0e2a2-8fb8-42df-970f-15dc351f1965", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Chesterton", - "company": "Gigaura", - "phone": "863-490-2375", - "email": "madeline@gigaura.com" - }, - { - "id": 5815, - "guid": "a03d6fb9-4834-4ae3-9797-3f1c8b13e907", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Claire Hodges", - "company": "Unologic", - "phone": "866-426-2480", - "email": "claire@unologic.com" - }, - { - "id": 5816, - "guid": "218e8cfe-6f42-492c-9f1c-535d22ed0f04", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Hailey", - "company": "Interliant", - "phone": "813-467-2502", - "email": "arianna@interliant.com" - }, - { - "id": 5817, - "guid": "f9e2142d-28b2-4c26-a7e9-b4b187ff95bd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Thomson", - "company": "iOptystix", - "phone": "860-489-2290", - "email": "gabrielle@ioptystix.com" - }, - { - "id": 5818, - "guid": "e1a33376-e24c-4db2-b2b5-4697ab085429", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Murphy", - "company": "Vencom", - "phone": "843-575-2900", - "email": "jasmine@vencom.com" - }, - { - "id": 5819, - "guid": "94a08d04-9468-42fa-a624-6f3913ca4946", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Leah Chapman", - "company": "Technogra", - "phone": "836-569-3947", - "email": "leah@technogra.com" - }, - { - "id": 5820, - "guid": "b894b8de-ce46-459c-8245-a9e571116c9b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Gilbert", - "company": "Genland", - "phone": "804-464-3734", - "email": "destiny@genland.com" - }, - { - "id": 5821, - "guid": "26bcff52-50b6-41cf-a9e8-ff8abcd3a136", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Watson", - "company": "Jamrola", - "phone": "881-441-3704", - "email": "morgan@jamrola.com" - }, - { - "id": 5822, - "guid": "609bd354-3ddd-4f51-9a20-f115da3c8b4a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Chandter", - "company": "US Omnigraphik", - "phone": "833-524-3628", - "email": "brooklyn@us omnigraphik.com" - }, - { - "id": 5823, - "guid": "9d80c0dc-04a8-415e-994c-2d956d83a015", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Campbell", - "company": "InfoAirway", - "phone": "803-532-3184", - "email": "savannah@infoairway.com" - }, - { - "id": 5824, - "guid": "4edefe4b-e3bb-417a-8663-5e871ec4bf47", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Nelson", - "company": "iEnland", - "phone": "813-449-3671", - "email": "molly@ienland.com" - }, - { - "id": 5825, - "guid": "a5c4af12-54c6-46a1-a90e-3f2286342b19", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Youmans", - "company": "Idmax", - "phone": "899-596-2794", - "email": "lauren@idmax.com" - }, - { - "id": 5826, - "guid": "ab91973f-5c8b-4c82-aeaa-f14974609e53", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Gilson", - "company": "Skydata", - "phone": "809-515-2801", - "email": "payton@skydata.com" - }, - { - "id": 5827, - "guid": "8f44d22b-9917-41bd-a1d0-e3a53084ff63", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Brickman", - "company": "Mescaridic", - "phone": "868-566-2363", - "email": "trinity@mescaridic.com" - }, - { - "id": 5828, - "guid": "c18a7dfd-910f-444a-99c3-dee6cebce980", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mackenzie Neal", - "company": "Orthosoft", - "phone": "861-478-3590", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 5829, - "guid": "d314e235-0139-4130-ac8b-7644539cd3b3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Oliver", - "company": "Superscope", - "phone": "824-468-2217", - "email": "eva@superscope.com" - }, - { - "id": 5830, - "guid": "88b380b1-d3ed-4db7-9e46-dfe39b9caf9e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Gill", - "company": "Conotomics", - "phone": "863-469-3977", - "email": "makayla@conotomics.com" - }, - { - "id": 5831, - "guid": "8df66848-f653-4d11-8c35-0e8622b2ed7b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Young", - "company": "Thermotomic", - "phone": "800-561-3385", - "email": "bella@thermotomic.com" - }, - { - "id": 5832, - "guid": "4ee38eeb-25ee-43ec-94cc-726ed114f0c9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Hodges", - "company": "Safetrust", - "phone": "885-530-2816", - "email": "alexandra@safetrust.com" - }, - { - "id": 5833, - "guid": "799c7ca8-9a32-4f0f-a22c-19279d0f0c88", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Oliver", - "company": "Tekcar", - "phone": "823-550-2960", - "email": "jessica@tekcar.com" - }, - { - "id": 5834, - "guid": "73ef3af4-6e96-46f4-a268-e1c57ec0d4b1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Nelson", - "company": "Fibrotopia", - "phone": "803-593-3763", - "email": "kaitlyn@fibrotopia.com" - }, - { - "id": 5835, - "guid": "8fae7ddf-0109-4d0c-a72c-626e71be36e1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Nathan", - "company": "Westgate", - "phone": "838-407-3015", - "email": "hannah@westgate.com" - }, - { - "id": 5836, - "guid": "0d32e9f8-20d1-49ac-8369-99da8e228eb7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Victoria Hancock", - "company": "Allphysiche", - "phone": "872-554-3593", - "email": "victoria@allphysiche.com" - }, - { - "id": 5837, - "guid": "95412c6e-c8f3-4183-be85-e1164dc53d2e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Samantha Charlson", - "company": "Textiqua", - "phone": "847-435-2685", - "email": "samantha@textiqua.com" - }, - { - "id": 5838, - "guid": "f400079c-c813-4aba-8363-ca070fd9543c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Miller", - "company": "Infragraph", - "phone": "858-457-2225", - "email": "morgan@infragraph.com" - }, - { - "id": 5839, - "guid": "d4ad793b-b06a-4625-bee4-06b93ffe9da1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lily Higgins", - "company": "Xeicon", - "phone": "899-474-2749", - "email": "lily@xeicon.com" - }, - { - "id": 5840, - "guid": "bec778b5-2310-4dea-99a2-6cba33ee0c59", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Stanley", - "company": "iSkyvaco", - "phone": "866-511-3126", - "email": "vanessa@iskyvaco.com" - }, - { - "id": 5841, - "guid": "3bbbd95d-1518-4657-9f19-04a022bb9d8f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Brickman", - "company": "Turbomart", - "phone": "867-579-2938", - "email": "serenity@turbomart.com" - }, - { - "id": 5842, - "guid": "812b551d-64cf-46e5-b240-010d6010cbfb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Grace Haig", - "company": "Proline", - "phone": "816-533-2276", - "email": "grace@proline.com" - }, - { - "id": 5843, - "guid": "38511734-bf84-417c-861e-bd785090ad04", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Smith", - "company": "Ameritron", - "phone": "818-589-2648", - "email": "amelia@ameritron.com" - }, - { - "id": 5844, - "guid": "424a1019-0a7c-4692-8ba4-751ab36deaec", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Miln", - "company": "Truetomic", - "phone": "822-462-3378", - "email": "mackenzie@truetomic.com" - }, - { - "id": 5845, - "guid": "340d658f-4adb-4f8f-9046-72ab4c8f859a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Brooks", - "company": "Dynarama", - "phone": "833-524-3976", - "email": "ariana@dynarama.com" - }, - { - "id": 5846, - "guid": "a383492f-cd1b-4aec-b865-0378111d047f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Molligan", - "company": "Orthomedia", - "phone": "806-513-3593", - "email": "hannah@orthomedia.com" - }, - { - "id": 5847, - "guid": "36d5cb19-72ff-44e5-8b6e-703de3f1ac76", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Nevaeh Oldridge", - "company": "Titanigraf", - "phone": "868-463-3122", - "email": "nevaeh@titanigraf.com" - }, - { - "id": 5848, - "guid": "4dedfd22-5877-4016-b0d2-8409983670c3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Young", - "company": "Aluco", - "phone": "841-441-2210", - "email": "katherine@aluco.com" - }, - { - "id": 5849, - "guid": "21311319-27b3-4d56-8c2c-86b4b3fc9495", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gustman", - "company": "Teknoplexon", - "phone": "883-586-3177", - "email": "brooklyn@teknoplexon.com" - }, - { - "id": 5850, - "guid": "e05ff141-cf98-4602-8795-03f556bcf3fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Goldman", - "company": "Pericenta", - "phone": "812-400-2134", - "email": "vanessa@pericenta.com" - }, - { - "id": 5851, - "guid": "7caae2c8-4519-4f7f-905b-aa6f07d3d265", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Day", - "company": "Xeicon", - "phone": "845-405-2134", - "email": "maria@xeicon.com" - }, - { - "id": 5852, - "guid": "f33ece1a-cb9e-4b20-aec1-564ba3143df0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexa Turner", - "company": "eSteganoergy", - "phone": "866-488-2460", - "email": "alexa@esteganoergy.com" - }, - { - "id": 5853, - "guid": "552b1d6f-8651-4a4a-acc2-4f1c0a20852e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie WifKinson", - "company": "Allnet", - "phone": "875-409-3209", - "email": "sophie@allnet.com" - }, - { - "id": 5854, - "guid": "9403cf6b-21b1-4806-ad54-6e3c617ac142", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Gilmore", - "company": "Turbomart", - "phone": "887-507-2805", - "email": "ashley@turbomart.com" - }, - { - "id": 5855, - "guid": "beece2de-19b3-41b1-a583-9171cb1d0ca8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Calhoun", - "company": "Skydata", - "phone": "836-426-2216", - "email": "brooklyn@skydata.com" - }, - { - "id": 5856, - "guid": "144c76df-65c1-417e-a3a2-9860c1f44aba", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Gerald", - "company": "Fibrotopia", - "phone": "862-563-2860", - "email": "maya@fibrotopia.com" - }, - { - "id": 5857, - "guid": "1c354e87-145d-4ff8-9089-e25d75d100fc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Valeria Ford", - "company": "SysUSA", - "phone": "847-542-3546", - "email": "valeria@sysusa.com" - }, - { - "id": 5858, - "guid": "77178c7b-21ec-41bb-8a3b-e86dd3bacbae", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Fisher", - "company": "Robotomic", - "phone": "821-472-2737", - "email": "ella@robotomic.com" - }, - { - "id": 5859, - "guid": "7b693ce1-be80-49ec-9274-1bef232af075", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Gerald", - "company": "Transtouch", - "phone": "877-474-2845", - "email": "kaylee@transtouch.com" - }, - { - "id": 5860, - "guid": "ad196f09-001d-4d4b-a659-4dce4ee10885", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Oldridge", - "company": "Quintegrity", - "phone": "840-521-2478", - "email": "sophie@quintegrity.com" - }, - { - "id": 5861, - "guid": "f5c3fd83-c372-4a03-9798-8316f995e44b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emily Murphy", - "company": "Steganoconiche", - "phone": "899-448-3198", - "email": "emily@steganoconiche.com" - }, - { - "id": 5862, - "guid": "5129ef08-8edc-4ca6-b764-8b26e793f0e3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Faith Cramer", - "company": "Conotomics", - "phone": "870-593-3658", - "email": "faith@conotomics.com" - }, - { - "id": 5863, - "guid": "cd1e787c-0f07-43c1-abfd-1c0072003b5a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Young", - "company": "Videobanc", - "phone": "858-567-2500", - "email": "valeria@videobanc.com" - }, - { - "id": 5864, - "guid": "1d98971d-af82-443e-b201-a00bee9d9275", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Carey", - "company": "Westtomik", - "phone": "886-540-2662", - "email": "alexa@westtomik.com" - }, - { - "id": 5865, - "guid": "cff623c2-6274-4621-bd07-f575a405c923", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Creighton", - "company": "Hypervaco", - "phone": "898-489-3225", - "email": "isabella@hypervaco.com" - }, - { - "id": 5866, - "guid": "d5f5ee1b-9c4d-4a3a-a243-fdbd2e420da9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Autumn Goodman", - "company": "Robotemplate", - "phone": "884-435-2378", - "email": "autumn@robotemplate.com" - }, - { - "id": 5867, - "guid": "c258bbc0-9f45-449e-8dcf-55eb4d6df8ef", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna White", - "company": "OpKeycomm", - "phone": "881-550-2380", - "email": "brianna@opkeycomm.com" - }, - { - "id": 5868, - "guid": "4954bae0-f081-4747-bd9c-da7f839677bd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Smith", - "company": "Openserve", - "phone": "807-464-3499", - "email": "isabella@openserve.com" - }, - { - "id": 5869, - "guid": "69ff89ac-ad4e-4f3d-afe5-07c8d2d7fa23", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Oldridge", - "company": "Systheon", - "phone": "872-534-2084", - "email": "ariana@systheon.com" - }, - { - "id": 5870, - "guid": "23284958-6854-4fb6-b010-b782981f28b4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Webster", - "company": "iQualcar", - "phone": "811-460-2577", - "email": "bella@iqualcar.com" - }, - { - "id": 5871, - "guid": "300607e7-f9b3-4b37-a3e0-1e283b02140c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ella Watson", - "company": "eSteganoergy", - "phone": "892-530-2387", - "email": "ella@esteganoergy.com" - }, - { - "id": 5872, - "guid": "ed301c47-8492-45e3-a568-9be76b6861f6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Gilson", - "company": "Systheon", - "phone": "849-466-3845", - "email": "bailey@systheon.com" - }, - { - "id": 5873, - "guid": "7a8f01db-416c-4545-ae3c-9c93345ca70d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Natalie Goldman", - "company": "SysUSA", - "phone": "887-590-3572", - "email": "natalie@sysusa.com" - }, - { - "id": 5874, - "guid": "3000d394-bcf6-453f-87c0-3922ded9c660", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Gilson", - "company": "eSteganoergy", - "phone": "840-569-2546", - "email": "amelia@esteganoergy.com" - }, - { - "id": 5875, - "guid": "1c360ab2-97c8-441b-a011-dc0ac54ed050", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Thorndike", - "company": "Aluco", - "phone": "812-481-3191", - "email": "kaylee@aluco.com" - }, - { - "id": 5876, - "guid": "d32a03b3-45a0-4ade-9725-d5b52c9f0752", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Evelyn Miln", - "company": "Allnet", - "phone": "866-429-2090", - "email": "evelyn@allnet.com" - }, - { - "id": 5877, - "guid": "82f64118-4ec9-4e1c-8797-789da6c94462", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Sheldon", - "company": "iOptystix", - "phone": "840-428-3312", - "email": "aubrey@ioptystix.com" - }, - { - "id": 5878, - "guid": "902afa77-1ba3-4385-aa7b-e207a54da494", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla White", - "company": "SysUSA", - "phone": "811-549-2039", - "email": "kayla@sysusa.com" - }, - { - "id": 5879, - "guid": "a55ea928-f48c-48be-9d2f-dc42682653b8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Nelson", - "company": "Pacwest", - "phone": "810-493-3280", - "email": "anna@pacwest.com" - }, - { - "id": 5880, - "guid": "b8a68199-103b-48ee-bd0c-6dde8ab6e7c4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Hancock", - "company": "Pacwest", - "phone": "823-548-2219", - "email": "mariah@pacwest.com" - }, - { - "id": 5881, - "guid": "e7de7f10-ac80-48cd-96fb-b0bd9051b81a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Evelyn Adamson", - "company": "Indisco", - "phone": "809-589-2888", - "email": "evelyn@indisco.com" - }, - { - "id": 5882, - "guid": "2c7624ae-f19a-4a52-8434-7f947eea8b80", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Morrison", - "company": "Unconix", - "phone": "855-467-3644", - "email": "morgan@unconix.com" - }, - { - "id": 5883, - "guid": "2993f7bb-7df8-4804-92b9-8b1039629a4e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Andrea Mercer", - "company": "Enlogia", - "phone": "832-464-3332", - "email": "andrea@enlogia.com" - }, - { - "id": 5884, - "guid": "3f6aff59-f0f5-446d-8a95-3994767fb4a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Hardman", - "company": "Fibrotopia", - "phone": "821-585-3354", - "email": "olivia@fibrotopia.com" - }, - { - "id": 5885, - "guid": "eada161f-0bf4-4e32-8dff-dcfe5f167439", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Michaelson", - "company": "Robotomic", - "phone": "818-476-3327", - "email": "allison@robotomic.com" - }, - { - "id": 5886, - "guid": "713d37d7-7189-458f-9a96-c951356140db", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Walkman", - "company": "Unconix", - "phone": "864-566-2496", - "email": "emily@unconix.com" - }, - { - "id": 5887, - "guid": "7278acf5-6e29-47f9-9614-c8c8e5045c23", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Gibbs", - "company": "Jamconik", - "phone": "878-428-3793", - "email": "mia@jamconik.com" - }, - { - "id": 5888, - "guid": "1cd7ba29-c099-439d-aa1e-f5078f1086ac", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Ogden", - "company": "Allnet", - "phone": "899-595-2386", - "email": "aubrey@allnet.com" - }, - { - "id": 5889, - "guid": "09b370df-d9dc-46bc-b1ac-b62676ff3714", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Davidson", - "company": "Superscope", - "phone": "876-558-2575", - "email": "ella@superscope.com" - }, - { - "id": 5890, - "guid": "49affe19-ba09-4e55-a1d4-eff4e539a9de", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Wallace", - "company": "Teratopia", - "phone": "834-458-3201", - "email": "emily@teratopia.com" - }, - { - "id": 5891, - "guid": "9794ee07-92a5-49d8-ba5f-7afcfe9c55e9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Carroll", - "company": "iQualcar", - "phone": "808-483-2846", - "email": "olivia@iqualcar.com" - }, - { - "id": 5892, - "guid": "a772f3ba-a38a-4683-95c3-52f11520c4be", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Brooks", - "company": "iQualcar", - "phone": "872-427-3027", - "email": "vanessa@iqualcar.com" - }, - { - "id": 5893, - "guid": "22b99b85-e964-48be-bc09-1c98376d3c6b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brianna Cramer", - "company": "Rapigrafix", - "phone": "876-590-2616", - "email": "brianna@rapigrafix.com" - }, - { - "id": 5894, - "guid": "2e010a78-3606-4a71-948f-4c129ffb9320", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kimberly Watson", - "company": "Pacwest", - "phone": "857-462-3186", - "email": "kimberly@pacwest.com" - }, - { - "id": 5895, - "guid": "ce3b05c3-6ec6-4b47-95a0-091684fbe84d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Miln", - "company": "iQualcar", - "phone": "866-537-2604", - "email": "lily@iqualcar.com" - }, - { - "id": 5896, - "guid": "5743deb4-c331-4dae-afbc-7d122ed69074", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Abigail Wallace", - "company": "Techtron", - "phone": "845-459-2162", - "email": "abigail@techtron.com" - }, - { - "id": 5897, - "guid": "163129c6-d496-4898-8c83-ffbea10c4473", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Hodges", - "company": "Teknoplexon", - "phone": "893-564-2159", - "email": "riley@teknoplexon.com" - }, - { - "id": 5898, - "guid": "5471ce4a-434c-4dcf-bfe3-c1538a5c0cfe", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Claire Galbraith", - "company": "US Omnigraphik", - "phone": "819-586-3792", - "email": "claire@us omnigraphik.com" - }, - { - "id": 5899, - "guid": "a8b0107c-5407-43ed-8b4a-2612e639c429", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ava Young", - "company": "Robocomm", - "phone": "886-520-3678", - "email": "ava@robocomm.com" - }, - { - "id": 5900, - "guid": "8c65a756-16e5-4474-8aeb-6b951ff51fe3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Goldman", - "company": "RoboAerlogix", - "phone": "840-469-2809", - "email": "rachel@roboaerlogix.com" - }, - { - "id": 5901, - "guid": "6609a2d2-a1d5-4d03-bae7-5d8d035a6eab", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Adamson", - "company": "eSteganoergy", - "phone": "839-441-2593", - "email": "victoria@esteganoergy.com" - }, - { - "id": 5902, - "guid": "dd1025d0-6ffd-42a7-ba67-f6cba27786be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Oldman", - "company": "Aluco", - "phone": "868-561-3205", - "email": "olivia@aluco.com" - }, - { - "id": 5903, - "guid": "83e5d204-736d-49c2-80fa-07ba0c3f2ae3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Miers", - "company": "Navivacs", - "phone": "890-440-3761", - "email": "camila@navivacs.com" - }, - { - "id": 5904, - "guid": "222b8e86-8abc-484d-8767-292bb973cf26", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Audrey White", - "company": "Unconix", - "phone": "839-490-3003", - "email": "audrey@unconix.com" - }, - { - "id": 5905, - "guid": "4d3b5bd2-d1b6-4c85-bd62-d1b825d8a140", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Adamson", - "company": "Vencom", - "phone": "889-503-3060", - "email": "khloe@vencom.com" - }, - { - "id": 5906, - "guid": "78109c69-808c-48cc-97f0-cff183bb6f33", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Gilmore", - "company": "Skydata", - "phone": "868-406-2419", - "email": "lillian@skydata.com" - }, - { - "id": 5907, - "guid": "9b119a02-47a8-4711-bc5d-dfb8d21bf7cd", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Mercer", - "company": "Hypervaco", - "phone": "860-520-2976", - "email": "sydney@hypervaco.com" - }, - { - "id": 5908, - "guid": "f927f4d0-56e9-4818-84f3-6bcfd77fd7a5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Nash", - "company": "Orthosoft", - "phone": "846-414-2408", - "email": "mia@orthosoft.com" - }, - { - "id": 5909, - "guid": "552f9253-fc56-4099-8c39-798356e86c0a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Brown", - "company": "SysVenamerica", - "phone": "865-523-2384", - "email": "kaitlyn@sysvenamerica.com" - }, - { - "id": 5910, - "guid": "86cb2853-733a-4ed0-93ad-4f3af9720f97", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Hamphrey", - "company": "Vencom", - "phone": "880-445-3295", - "email": "anna@vencom.com" - }, - { - "id": 5911, - "guid": "e51c1d8c-a952-48b5-bcdb-df20dd77f996", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Oldman", - "company": "Mescaridic", - "phone": "864-563-4000", - "email": "amelia@mescaridic.com" - }, - { - "id": 5912, - "guid": "5a651050-14e9-48b9-977a-cbb7e86627cf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ella Hodges", - "company": "OpKeycomm", - "phone": "896-569-3860", - "email": "ella@opkeycomm.com" - }, - { - "id": 5913, - "guid": "8bc63d5b-2df7-4150-a31b-72fbc9fb3558", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Chapman", - "company": "Mescatron", - "phone": "821-415-2235", - "email": "jessica@mescatron.com" - }, - { - "id": 5914, - "guid": "1401654a-8fa8-4577-a022-ed4b26f52bd1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Gilmore", - "company": "Hypervaco", - "phone": "850-481-3065", - "email": "alexandra@hypervaco.com" - }, - { - "id": 5915, - "guid": "79c5da5c-b0ac-464f-9f67-fa6fbdac5fde", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sydney Carroll", - "company": "Proline", - "phone": "890-428-2982", - "email": "sydney@proline.com" - }, - { - "id": 5916, - "guid": "c427a613-a9f8-4fb5-8d3e-9a43691a2b5a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Gustman", - "company": "Interliant", - "phone": "858-551-2926", - "email": "amelia@interliant.com" - }, - { - "id": 5917, - "guid": "e7406461-4d98-4604-b165-6da6d0a2ca77", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aubrey Ogden", - "company": "Netseco", - "phone": "872-541-3877", - "email": "aubrey@netseco.com" - }, - { - "id": 5918, - "guid": "b441b203-0bc4-4f01-8f57-cfc0df413744", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Wainwright", - "company": "Ameritron", - "phone": "867-548-2763", - "email": "madeline@ameritron.com" - }, - { - "id": 5919, - "guid": "86e57c84-350b-47a0-95a2-5b42fb062df6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Leah WifKinson", - "company": "Unconix", - "phone": "816-496-3822", - "email": "leah@unconix.com" - }, - { - "id": 5920, - "guid": "00360aba-728e-4176-844d-ad37c66e224b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Oliver", - "company": "Genland", - "phone": "807-556-3562", - "email": "molly@genland.com" - }, - { - "id": 5921, - "guid": "b8c46719-5058-4ea9-b293-7696644a15e2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Creighton", - "company": "Syssoft", - "phone": "841-500-2348", - "email": "gabrielle@syssoft.com" - }, - { - "id": 5922, - "guid": "8f86eeda-ae5b-4376-a9ef-71e49d14d490", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Adamson", - "company": "Polytheon", - "phone": "849-414-3051", - "email": "katherine@polytheon.com" - }, - { - "id": 5923, - "guid": "1bcc3493-2cc6-4e0a-98da-0efc2baf48a6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Michaelson", - "company": "iOptystix", - "phone": "860-571-2800", - "email": "nevaeh@ioptystix.com" - }, - { - "id": 5924, - "guid": "fec0ff6e-48b9-47d3-9072-917a205aaa54", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh WifKinson", - "company": "Unconix", - "phone": "875-507-3838", - "email": "nevaeh@unconix.com" - }, - { - "id": 5925, - "guid": "827014a3-bc1b-4bf2-89c7-60eb5b1c98ec", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Crossman", - "company": "Generola", - "phone": "869-596-2243", - "email": "maya@generola.com" - }, - { - "id": 5926, - "guid": "afc227fe-7972-4212-b91f-f4acacdd900d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Sherlock", - "company": "US Omnigraphik", - "phone": "852-543-3882", - "email": "lily@us omnigraphik.com" - }, - { - "id": 5927, - "guid": "a035956c-a4e2-4313-8fbd-9a21bd9b7912", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Daniels", - "company": "eEyetanic", - "phone": "862-448-3384", - "email": "madelyn@eeyetanic.com" - }, - { - "id": 5928, - "guid": "03f230c3-8569-4051-a6b4-bfba2ed2a32e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Melanie Charlson", - "company": "Nanobanc", - "phone": "809-418-3590", - "email": "melanie@nanobanc.com" - }, - { - "id": 5929, - "guid": "26d70b1d-3a0f-4d30-b66a-f4e373a3d68c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Brickman", - "company": "Unconix", - "phone": "822-541-2949", - "email": "samantha@unconix.com" - }, - { - "id": 5930, - "guid": "78c1176a-56ed-43e2-a899-d10f15d585a9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophie Murphy", - "company": "US Omnigraphik", - "phone": "853-448-2491", - "email": "sophie@us omnigraphik.com" - }, - { - "id": 5931, - "guid": "e0541bfe-ff13-49c3-a7ab-1837b2d1519d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Young", - "company": "Teraserv", - "phone": "888-438-2160", - "email": "makayla@teraserv.com" - }, - { - "id": 5932, - "guid": "c72ea8e1-78d2-4ee3-97e8-0d6571c14309", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabelle Hamphrey", - "company": "Pericenta", - "phone": "813-589-2531", - "email": "isabelle@pericenta.com" - }, - { - "id": 5933, - "guid": "bfd90cda-7df6-4ba4-addd-138d0432579a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Wallace", - "company": "Jamconik", - "phone": "893-506-2757", - "email": "ashley@jamconik.com" - }, - { - "id": 5934, - "guid": "d7115680-58f1-4cab-8879-4a43c7d76e5a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna White", - "company": "Steganoconiche", - "phone": "866-479-3073", - "email": "anna@steganoconiche.com" - }, - { - "id": 5935, - "guid": "9b7d9529-fc5b-4bb2-9007-ee0f2073a329", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Wainwright", - "company": "Xeicon", - "phone": "860-511-3818", - "email": "alexis@xeicon.com" - }, - { - "id": 5936, - "guid": "05c64c39-0328-411d-a8b5-1792d1cb6c48", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Fulton", - "company": "Teraserv", - "phone": "834-538-3505", - "email": "evelyn@teraserv.com" - }, - { - "id": 5937, - "guid": "3e4cc7fa-315a-41cd-aff7-18f3acbda12b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Adamson", - "company": "Jamrola", - "phone": "816-586-3048", - "email": "emily@jamrola.com" - }, - { - "id": 5938, - "guid": "7763fd05-ac73-4fad-bafd-3572903bb9a6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Winter", - "company": "InfoAirway", - "phone": "838-441-2068", - "email": "trinity@infoairway.com" - }, - { - "id": 5939, - "guid": "891cbe50-0f1e-4600-9111-4bf132b218f6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Timmons", - "company": "Openserve", - "phone": "804-547-3374", - "email": "melanie@openserve.com" - }, - { - "id": 5940, - "guid": "aa82e612-26cb-4180-8726-8b0fd8679f1f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Oswald", - "company": "US Infratouch", - "phone": "878-447-3483", - "email": "elizabeth@us infratouch.com" - }, - { - "id": 5941, - "guid": "684267af-8994-4d04-bfb2-7201eb588769", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Charlson", - "company": "Qualserve", - "phone": "810-434-3968", - "email": "chloe@qualserve.com" - }, - { - "id": 5942, - "guid": "553fb962-cdc4-4db4-96c3-50d8be5aae3e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Neal", - "company": "Navivacs", - "phone": "878-437-2027", - "email": "arianna@navivacs.com" - }, - { - "id": 5943, - "guid": "5bc4a8d2-6bca-4615-a672-6ed188602c6e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Valeria Miln", - "company": "Cryptotegrity", - "phone": "838-487-2449", - "email": "valeria@cryptotegrity.com" - }, - { - "id": 5944, - "guid": "b3a046c1-e1ce-4a2b-9cf0-f3a0990ff3a0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Hardman", - "company": "Genland", - "phone": "884-571-2764", - "email": "emily@genland.com" - }, - { - "id": 5945, - "guid": "c9e52d51-f94d-4e23-9638-c3ff779b8c9f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Carey", - "company": "Keytheon", - "phone": "806-490-3568", - "email": "chloe@keytheon.com" - }, - { - "id": 5946, - "guid": "4e02d9c7-504f-4906-bfa8-93f1a3f14e8f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Audrey Gardner", - "company": "Fibrotouch", - "phone": "829-445-3197", - "email": "audrey@fibrotouch.com" - }, - { - "id": 5947, - "guid": "85280e36-00df-47ec-aca0-5b7f634cc2ec", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Gerald", - "company": "Skydata", - "phone": "834-468-3026", - "email": "allison@skydata.com" - }, - { - "id": 5948, - "guid": "54e81df0-30d0-4e21-bf01-3cdd2a27d257", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Webster", - "company": "Superscope", - "phone": "824-544-3690", - "email": "julia@superscope.com" - }, - { - "id": 5949, - "guid": "3cf1d45e-5918-4210-9fc5-8de24315a30b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Daniels", - "company": "Orthomedia", - "phone": "889-482-3665", - "email": "sophie@orthomedia.com" - }, - { - "id": 5950, - "guid": "ee48388b-40f6-4dd1-b362-829381c5a4d9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Fisher", - "company": "Steganoconiche", - "phone": "896-489-3729", - "email": "leah@steganoconiche.com" - }, - { - "id": 5951, - "guid": "45bb11d1-36e0-4262-ac09-cfc43b729dfa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia Chesterton", - "company": "Generola", - "phone": "896-501-3079", - "email": "mia@generola.com" - }, - { - "id": 5952, - "guid": "79eb7b8f-5241-4e2a-a166-a4a7de78ee2f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Day", - "company": "Jamconik", - "phone": "821-408-3622", - "email": "angelina@jamconik.com" - }, - { - "id": 5953, - "guid": "70999298-80ca-44be-8565-06411a14a102", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Campbell", - "company": "Keytheon", - "phone": "806-445-2562", - "email": "isabella@keytheon.com" - }, - { - "id": 5954, - "guid": "2881daa7-e67d-453a-848c-1f1405403eee", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Ogden", - "company": "Interliant", - "phone": "828-458-2295", - "email": "charlotte@interliant.com" - }, - { - "id": 5955, - "guid": "1c1f47d4-34f9-4d0e-a372-69fdb5cfb457", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Calhoun", - "company": "Cryptotegrity", - "phone": "872-549-3258", - "email": "abigail@cryptotegrity.com" - }, - { - "id": 5956, - "guid": "1e0e109b-ed4b-425c-b7cd-a14ccca44061", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Wainwright", - "company": "Netseco", - "phone": "801-545-2625", - "email": "katherine@netseco.com" - }, - { - "id": 5957, - "guid": "f347ec81-830c-4c39-bd28-6688c09db5e9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katherine Brickman", - "company": "Indisco", - "phone": "860-449-3492", - "email": "katherine@indisco.com" - }, - { - "id": 5958, - "guid": "08e5beea-b5d5-4efc-965c-3ddfb6babf92", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Bush", - "company": "Indisco", - "phone": "861-488-2149", - "email": "avery@indisco.com" - }, - { - "id": 5959, - "guid": "15552522-f741-4c79-b05b-6a7c55137006", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Fisher", - "company": "Teratopia", - "phone": "896-498-3706", - "email": "melanie@teratopia.com" - }, - { - "id": 5960, - "guid": "ef222e69-24fb-416e-a720-73c62bb5f6c8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emma Brickman", - "company": "Fibrotouch", - "phone": "819-540-3541", - "email": "emma@fibrotouch.com" - }, - { - "id": 5961, - "guid": "52debf47-c4d6-4876-a203-ec3dbb31a492", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Oswald", - "company": "Openserve", - "phone": "806-476-2128", - "email": "paige@openserve.com" - }, - { - "id": 5962, - "guid": "854b0952-5c40-4e17-b740-5d45edd2bcc1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Gibbs", - "company": "Technogra", - "phone": "800-444-3042", - "email": "destiny@technogra.com" - }, - { - "id": 5963, - "guid": "98a2294f-3199-49cd-b8fa-54ebaa84c663", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Milton", - "company": "Thermotomic", - "phone": "811-450-3337", - "email": "zoe@thermotomic.com" - }, - { - "id": 5964, - "guid": "eafc4295-6bf1-40cd-b1dc-933ef1a2c172", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Thorndike", - "company": "US Omnigraphik", - "phone": "875-593-2834", - "email": "ashley@us omnigraphik.com" - }, - { - "id": 5965, - "guid": "2e6406a5-a61d-4ccc-8779-83a78f7928c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Wayne", - "company": "Infragraph", - "phone": "807-405-3246", - "email": "brooke@infragraph.com" - }, - { - "id": 5966, - "guid": "fb69f66e-ac0c-4382-9e2b-501671ccd276", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Hancock", - "company": "Transtouch", - "phone": "823-580-2930", - "email": "zoey@transtouch.com" - }, - { - "id": 5967, - "guid": "0570c145-c8f4-4479-aa50-e009efe22c8b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Timmons", - "company": "Fibroserve", - "phone": "838-446-3946", - "email": "addison@fibroserve.com" - }, - { - "id": 5968, - "guid": "7ac68b27-9751-4629-ac1a-435637905b56", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sydney Gerald", - "company": "Unconix", - "phone": "882-477-2257", - "email": "sydney@unconix.com" - }, - { - "id": 5969, - "guid": "f2bc65ea-f0a6-4c96-b976-d06a96f115c4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Galbraith", - "company": "Inridium", - "phone": "841-569-3393", - "email": "molly@inridium.com" - }, - { - "id": 5970, - "guid": "d6597d58-a3c7-48b4-82c9-c01130718a21", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Oldman", - "company": "Fibroserve", - "phone": "836-456-2908", - "email": "audrey@fibroserve.com" - }, - { - "id": 5971, - "guid": "25084ce6-7314-4d41-bf65-9a74fbbe584c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Gerald", - "company": "Fibrotouch", - "phone": "850-445-2604", - "email": "kylie@fibrotouch.com" - }, - { - "id": 5972, - "guid": "2147d3f3-ae18-4d5c-9e18-fa2bc33d6e22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Vance", - "company": "Thermotomic", - "phone": "853-502-3838", - "email": "trinity@thermotomic.com" - }, - { - "id": 5973, - "guid": "b693e975-91c3-4318-a533-9556e96f574a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth WifKinson", - "company": "Entcast", - "phone": "825-571-2774", - "email": "elizabeth@entcast.com" - }, - { - "id": 5974, - "guid": "381bb758-0fea-49be-8f4b-f1008d2b26a1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Cook", - "company": "Allnet", - "phone": "803-410-3284", - "email": "emily@allnet.com" - }, - { - "id": 5975, - "guid": "ded639f7-eac5-4bc7-ae84-95a91b5c5259", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Waller", - "company": "Anagraph", - "phone": "868-566-3412", - "email": "ashley@anagraph.com" - }, - { - "id": 5976, - "guid": "4f2b9149-ca37-40cc-9571-dc5553b81d82", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabella Cook", - "company": "eEyetanic", - "phone": "810-437-2753", - "email": "isabella@eeyetanic.com" - }, - { - "id": 5977, - "guid": "5cf24025-06da-47c4-91bb-5c517fe0bb44", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Haig", - "company": "Techtron", - "phone": "815-522-3506", - "email": "lillian@techtron.com" - }, - { - "id": 5978, - "guid": "2d1e129e-1e56-4b46-b49a-e023f251cf56", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Gerald", - "company": "Westgate", - "phone": "861-504-3594", - "email": "taylor@westgate.com" - }, - { - "id": 5979, - "guid": "267197d6-7e85-45ab-b50b-4be0220f44d9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Watson", - "company": "Multitiqua", - "phone": "868-479-3594", - "email": "khloe@multitiqua.com" - }, - { - "id": 5980, - "guid": "046071f6-33dd-4a77-813d-85cb1106a776", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Sherlock", - "company": "Genland", - "phone": "813-509-2177", - "email": "abigail@genland.com" - }, - { - "id": 5981, - "guid": "01e36fa3-8791-44cd-ad9f-b683405d3f66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Goldman", - "company": "Polytheon", - "phone": "841-470-3210", - "email": "andrea@polytheon.com" - }, - { - "id": 5982, - "guid": "ac924f5b-3754-4fe8-a1bd-f63d89093eb4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Otis", - "company": "Polytheon", - "phone": "826-589-3442", - "email": "alexa@polytheon.com" - }, - { - "id": 5983, - "guid": "7dfc3a51-f946-4483-9680-9b0aef78067c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Goodman", - "company": "Openserve", - "phone": "842-426-3830", - "email": "faith@openserve.com" - }, - { - "id": 5984, - "guid": "3b7af4a7-f725-48a3-90d9-01b9393be5e4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Milton", - "company": "Vencom", - "phone": "855-549-2536", - "email": "hannah@vencom.com" - }, - { - "id": 5985, - "guid": "c96418f3-3cc8-46f9-879b-7d6b6a21e083", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Day", - "company": "Thermotomic", - "phone": "849-550-3777", - "email": "andrea@thermotomic.com" - }, - { - "id": 5986, - "guid": "f19e7175-2f73-487a-8af1-1d2edbeb547b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke White", - "company": "Teknoplexon", - "phone": "808-411-2700", - "email": "brooke@teknoplexon.com" - }, - { - "id": 5987, - "guid": "dca586ac-5a56-4957-ae23-7f3373cc5c6f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexis Wainwright", - "company": "Dynarama", - "phone": "836-509-3231", - "email": "alexis@dynarama.com" - }, - { - "id": 5988, - "guid": "1538f2fe-8db4-4b80-98fa-2745c2d92f1b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Gerald", - "company": "Ventanium", - "phone": "879-482-3994", - "email": "lillian@ventanium.com" - }, - { - "id": 5989, - "guid": "6b9df824-451b-478d-ad3b-bf10f57dfae7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison Thorndike", - "company": "Openserve", - "phone": "822-533-3186", - "email": "addison@openserve.com" - }, - { - "id": 5990, - "guid": "3eed0568-cb72-408c-8990-8f2008ef057e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Bush", - "company": "InfoAirway", - "phone": "832-509-2925", - "email": "hannah@infoairway.com" - }, - { - "id": 5991, - "guid": "5fe8c444-1b2b-4f23-a770-c9691ebe2f0d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Chandter", - "company": "Robotomic", - "phone": "816-444-3667", - "email": "destiny@robotomic.com" - }, - { - "id": 5992, - "guid": "2cfc9506-16a2-4e52-94bc-bb850cb7d8b2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Oldman", - "company": "Infragraph", - "phone": "824-571-2064", - "email": "savannah@infragraph.com" - }, - { - "id": 5993, - "guid": "800c5988-d65a-4fe2-9d74-7ffb7540a2f9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Gibbs", - "company": "OpKeycomm", - "phone": "870-442-2630", - "email": "claire@opkeycomm.com" - }, - { - "id": 5994, - "guid": "0216a64f-dc6c-4701-aea5-a077f4c1c374", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Brown", - "company": "Techtron", - "phone": "827-594-2918", - "email": "faith@techtron.com" - }, - { - "id": 5995, - "guid": "379fb21a-b376-4feb-8245-31db2270f9fc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Mercer", - "company": "InfoAirway", - "phone": "844-518-2808", - "email": "sophia@infoairway.com" - }, - { - "id": 5996, - "guid": "7ae95799-c8e0-45ba-8905-b90b9f544c34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Abigail Cramer", - "company": "OpKeycomm", - "phone": "880-518-3567", - "email": "abigail@opkeycomm.com" - }, - { - "id": 5997, - "guid": "328a32e6-fe6f-4830-a922-4d74c11e40af", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Goodman", - "company": "Unologic", - "phone": "854-430-2531", - "email": "mya@unologic.com" - }, - { - "id": 5998, - "guid": "2c7fcea7-b7aa-4ba0-a60c-2075bb8e499d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Miln", - "company": "Xeicon", - "phone": "876-421-2023", - "email": "sophie@xeicon.com" - }, - { - "id": 5999, - "guid": "d6ef0d1c-5eee-4d71-bf11-6398f6a3503a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jessica White", - "company": "Ameritron", - "phone": "872-403-3527", - "email": "jessica@ameritron.com" - }, - { - "id": 6000, - "guid": "41a43466-2d9d-4b94-ae1b-ab12b2a55191", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Turner", - "company": "iOptystix", - "phone": "890-546-2226", - "email": "bella@ioptystix.com" - }, - { - "id": 6001, - "guid": "c700d6d1-c61a-4d7c-baa9-48f60cf9a3db", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Mercer", - "company": "RoboAerlogix", - "phone": "842-426-3774", - "email": "grace@roboaerlogix.com" - }, - { - "id": 6002, - "guid": "317b20bc-080b-47ca-8321-102d055fde48", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Melanie Adamson", - "company": "Truetomic", - "phone": "828-565-2500", - "email": "melanie@truetomic.com" - }, - { - "id": 6003, - "guid": "fea34ea6-7a89-4817-8798-a4bef4059079", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexa Gardner", - "company": "Teratopia", - "phone": "889-406-3311", - "email": "alexa@teratopia.com" - }, - { - "id": 6004, - "guid": "6fbd55d3-401a-44ee-8b75-c1871b04a039", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Morrison", - "company": "iQualcar", - "phone": "822-507-3228", - "email": "avery@iqualcar.com" - }, - { - "id": 6005, - "guid": "baa4ecc9-9218-4352-9863-c7dcb355d10a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabelle Freeman", - "company": "Orthosoft", - "phone": "836-481-3174", - "email": "isabelle@orthosoft.com" - }, - { - "id": 6006, - "guid": "689f06d3-46ea-4519-bb52-8f32180f1056", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Haig", - "company": "Pericenta", - "phone": "869-401-3548", - "email": "kaylee@pericenta.com" - }, - { - "id": 6007, - "guid": "c9186a4c-1549-44de-bf22-1200d0c9bbb7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Gilmore", - "company": "Titanigraf", - "phone": "893-518-3871", - "email": "kayla@titanigraf.com" - }, - { - "id": 6008, - "guid": "d230975b-8b99-4f69-be30-a6cc6c691628", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Miln", - "company": "Airdyne", - "phone": "805-461-3628", - "email": "gabriella@airdyne.com" - }, - { - "id": 6009, - "guid": "b76c28f2-1b8e-4482-8a48-fa0be68c1461", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Hawkins", - "company": "Fibrotouch", - "phone": "812-454-2177", - "email": "bailey@fibrotouch.com" - }, - { - "id": 6010, - "guid": "06f4fc6d-b6dc-4751-96f2-d285e32cf7ee", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Morrison", - "company": "Allnet", - "phone": "834-521-3132", - "email": "ella@allnet.com" - }, - { - "id": 6011, - "guid": "4eb64c8f-9e26-4a57-84db-81989ae72c80", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Osborne", - "company": "Safeagra", - "phone": "803-417-2577", - "email": "melanie@safeagra.com" - }, - { - "id": 6012, - "guid": "969abd8c-b269-438c-b921-4ade7af7c000", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Adamson", - "company": "Indisco", - "phone": "862-478-3789", - "email": "alexandra@indisco.com" - }, - { - "id": 6013, - "guid": "d1c8a07a-1bb1-4b72-86d0-1fdda5b1e8e2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Creighton", - "company": "Turbomart", - "phone": "865-431-3169", - "email": "leah@turbomart.com" - }, - { - "id": 6014, - "guid": "970062cd-d554-4f0d-8924-78fdcdc0f528", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Crossman", - "company": "Mescaridic", - "phone": "832-590-2038", - "email": "maria@mescaridic.com" - }, - { - "id": 6015, - "guid": "2e4ad455-bcde-4113-b6d1-36301e58e7fc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jocelyn Warren", - "company": "Rapigrafix", - "phone": "881-534-3460", - "email": "jocelyn@rapigrafix.com" - }, - { - "id": 6016, - "guid": "6b49d6bd-b568-4af7-96b9-e4a9cf9c4c5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Audrey Oldridge", - "company": "Robocomm", - "phone": "818-493-3000", - "email": "audrey@robocomm.com" - }, - { - "id": 6017, - "guid": "c1fa0627-4c99-4f34-a7ea-ce1f3e3cd50b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Gustman", - "company": "Mescaridic", - "phone": "857-563-3917", - "email": "khloe@mescaridic.com" - }, - { - "id": 6018, - "guid": "015d2e64-4031-4cdc-aaa3-871f42888bf4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Nelson", - "company": "Skydata", - "phone": "840-576-3249", - "email": "gianna@skydata.com" - }, - { - "id": 6019, - "guid": "ffa67495-d07a-4d26-88b0-9f4b4094cd43", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Wallace", - "company": "Infraique", - "phone": "837-423-3298", - "email": "isabella@infraique.com" - }, - { - "id": 6020, - "guid": "7c947dd5-a56f-4180-914d-f6ce55d311e0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Ogden", - "company": "Polytheon", - "phone": "816-455-3463", - "email": "molly@polytheon.com" - }, - { - "id": 6021, - "guid": "aefd8781-e405-4eef-91e9-047637aa7317", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Owen", - "company": "Westmedia", - "phone": "812-523-2022", - "email": "camila@westmedia.com" - }, - { - "id": 6022, - "guid": "feeb4bf8-c435-4064-b81c-012e3d877838", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Hardman", - "company": "Netseco", - "phone": "894-555-3462", - "email": "emma@netseco.com" - }, - { - "id": 6023, - "guid": "9529464b-34e3-4152-bbed-21c8c6af1167", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Cramer", - "company": "iQualcar", - "phone": "867-441-2806", - "email": "julia@iqualcar.com" - }, - { - "id": 6024, - "guid": "58346127-6b56-4140-9115-f2542e83f49b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Youmans", - "company": "Syssoft", - "phone": "834-417-3683", - "email": "lauren@syssoft.com" - }, - { - "id": 6025, - "guid": "a8d697b5-066c-4320-b4d7-8c06a0145628", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah WifKinson", - "company": "iOptystix", - "phone": "877-416-3856", - "email": "savannah@ioptystix.com" - }, - { - "id": 6026, - "guid": "45307c92-16da-4f2d-b123-26e7d56063ad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Neal", - "company": "Gigaura", - "phone": "847-418-3228", - "email": "kylie@gigaura.com" - }, - { - "id": 6027, - "guid": "9b834f7a-8294-48cb-b949-ac03ac66e097", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Haig", - "company": "Anaframe", - "phone": "816-472-3508", - "email": "charlotte@anaframe.com" - }, - { - "id": 6028, - "guid": "1096f2b4-04c7-4d3a-8c4c-58fbdeff3f79", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Miller", - "company": "Safeagra", - "phone": "817-432-3799", - "email": "brooklyn@safeagra.com" - }, - { - "id": 6029, - "guid": "e6173373-52ca-4f70-8384-7cdfe43e1bbb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Gill", - "company": "Safeagra", - "phone": "852-495-3176", - "email": "avery@safeagra.com" - }, - { - "id": 6030, - "guid": "f949e939-5006-4bcc-bf3e-900a274cb2e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Ward", - "company": "Vencom", - "phone": "841-454-3121", - "email": "zoey@vencom.com" - }, - { - "id": 6031, - "guid": "8d4100e1-8852-4a81-b82a-e7da6c6542a5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Haig", - "company": "Textiqua", - "phone": "818-497-2164", - "email": "brooklyn@textiqua.com" - }, - { - "id": 6032, - "guid": "9b6c64dd-6427-45ca-a570-91168a056a82", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabelle Gustman", - "company": "Teratopia", - "phone": "833-403-3225", - "email": "isabelle@teratopia.com" - }, - { - "id": 6033, - "guid": "15484c16-43d3-4c39-a42c-83d330a0064b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Andrea Brooks", - "company": "Teratopia", - "phone": "858-442-2503", - "email": "andrea@teratopia.com" - }, - { - "id": 6034, - "guid": "aaf7039d-89eb-4391-8784-5cc487feabbc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Wayne", - "company": "iSkyvaco", - "phone": "851-593-2656", - "email": "mariah@iskyvaco.com" - }, - { - "id": 6035, - "guid": "9922a74c-cd90-4179-a0e5-559de6dc3322", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Wood", - "company": "InfoAirway", - "phone": "871-484-3932", - "email": "evelyn@infoairway.com" - }, - { - "id": 6036, - "guid": "9e7f9f5f-1258-420f-936a-a157e06785f9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Molly Bush", - "company": "Ventanium", - "phone": "835-513-2347", - "email": "molly@ventanium.com" - }, - { - "id": 6037, - "guid": "60d9a825-4984-47e6-be68-14fbfef8dc4a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Calhoun", - "company": "Fibroserve", - "phone": "839-489-3986", - "email": "maya@fibroserve.com" - }, - { - "id": 6038, - "guid": "9fdc9f4a-fe28-4f4b-9f8e-d31d87b2958b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Layla Haig", - "company": "iSkyvaco", - "phone": "841-468-2954", - "email": "layla@iskyvaco.com" - }, - { - "id": 6039, - "guid": "a5a722be-acec-4403-829d-08bf53ffb998", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Neal", - "company": "Unologic", - "phone": "832-568-3351", - "email": "natalie@unologic.com" - }, - { - "id": 6040, - "guid": "f450ea1b-6ebf-4776-aeb5-50a4fc0cd74b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooklyn Gilson", - "company": "Indisco", - "phone": "859-564-3221", - "email": "brooklyn@indisco.com" - }, - { - "id": 6041, - "guid": "0761c16e-e4d7-493b-b633-10c1851f18c9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Hancock", - "company": "Mescatron", - "phone": "825-439-3683", - "email": "victoria@mescatron.com" - }, - { - "id": 6042, - "guid": "c3e7a14f-e8aa-4ccf-b227-4fc905e0a749", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Ford", - "company": "Allphysiche", - "phone": "802-499-2102", - "email": "sarah@allphysiche.com" - }, - { - "id": 6043, - "guid": "5a96c3a9-0c7f-4e8c-9621-bc63a9449430", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Carey", - "company": "Fibrotopia", - "phone": "886-457-3848", - "email": "madeline@fibrotopia.com" - }, - { - "id": 6044, - "guid": "5864cf4c-6055-466f-89e1-3a4e767809c6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Fisher", - "company": "Allnet", - "phone": "807-589-3949", - "email": "gabriella@allnet.com" - }, - { - "id": 6045, - "guid": "31a61a0c-7dc0-47fe-aeb8-e94200816aba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Hodges", - "company": "Multitiqua", - "phone": "822-495-3900", - "email": "addison@multitiqua.com" - }, - { - "id": 6046, - "guid": "63f33ec9-297f-482d-a001-c5968b8ae5a8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Creighton", - "company": "Mescaridic", - "phone": "808-420-3372", - "email": "ashley@mescaridic.com" - }, - { - "id": 6047, - "guid": "1db52c23-e876-4d77-927a-9257d053600e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney Turner", - "company": "Unconix", - "phone": "884-537-3622", - "email": "sydney@unconix.com" - }, - { - "id": 6048, - "guid": "1ee485f4-5af9-4d10-95ec-0581d3dcc5b7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Goldman", - "company": "Techtron", - "phone": "885-495-3634", - "email": "victoria@techtron.com" - }, - { - "id": 6049, - "guid": "78b0053a-b5cd-4b3f-9033-2715e4f75124", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maya Stanley", - "company": "iQualcar", - "phone": "860-464-2031", - "email": "maya@iqualcar.com" - }, - { - "id": 6050, - "guid": "b740ea38-ecba-4bfb-b117-f92ce4356057", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Gibbs", - "company": "Teknoplexon", - "phone": "822-430-2538", - "email": "sofia@teknoplexon.com" - }, - { - "id": 6051, - "guid": "77db99b8-c34c-45ab-a7d6-770979e37d80", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Campbell", - "company": "Sontopia", - "phone": "893-575-2266", - "email": "alexis@sontopia.com" - }, - { - "id": 6052, - "guid": "81fe5cfe-0755-4d93-bfb1-cffef9e32afc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Smith", - "company": "OpKeycomm", - "phone": "858-556-3881", - "email": "riley@opkeycomm.com" - }, - { - "id": 6053, - "guid": "7b3c8912-a8e3-46cd-bda7-880cc463e044", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maya Gardner", - "company": "InfoAirway", - "phone": "832-455-2768", - "email": "maya@infoairway.com" - }, - { - "id": 6054, - "guid": "597cba1d-254a-4489-bd4c-17d4741f67a6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Conors", - "company": "Robocomm", - "phone": "811-469-2145", - "email": "allison@robocomm.com" - }, - { - "id": 6055, - "guid": "503fab7f-27e6-4fdf-8ab0-e7114b92b182", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Otis", - "company": "US Omnigraphik", - "phone": "814-540-3373", - "email": "charlotte@us omnigraphik.com" - }, - { - "id": 6056, - "guid": "0e3a5ae9-117b-4fa4-a914-54fa0255f78a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Galbraith", - "company": "Robocomm", - "phone": "874-533-2672", - "email": "arianna@robocomm.com" - }, - { - "id": 6057, - "guid": "23329808-ba0f-4f94-9f25-f5e21d8b8cb3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sofia Chandter", - "company": "Jamconik", - "phone": "820-561-2302", - "email": "sofia@jamconik.com" - }, - { - "id": 6058, - "guid": "3c7794f6-80e6-4a82-8a7e-baa50d490bf6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Molligan", - "company": "Truetomic", - "phone": "859-504-3628", - "email": "gabriella@truetomic.com" - }, - { - "id": 6059, - "guid": "e11046b7-5998-470b-934b-1225cc4aae8b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brooke WifKinson", - "company": "Inridium", - "phone": "864-548-2010", - "email": "brooke@inridium.com" - }, - { - "id": 6060, - "guid": "2b8dec9a-920d-49fa-a4eb-8dd8cb733c86", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Chapman", - "company": "Cryptotegrity", - "phone": "808-430-3294", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 6061, - "guid": "b5b2db16-5bb0-4cd5-8178-9511665a672c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sarah Higgins", - "company": "Technogra", - "phone": "857-598-3330", - "email": "sarah@technogra.com" - }, - { - "id": 6062, - "guid": "c2dd13dd-fb66-433a-be0b-8ca8f49fc1ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Clapton", - "company": "Netseco", - "phone": "854-424-3440", - "email": "leah@netseco.com" - }, - { - "id": 6063, - "guid": "f966696b-5ee9-49fd-a00f-cb08b6aa67a2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Freeman", - "company": "Systheon", - "phone": "868-581-2228", - "email": "payton@systheon.com" - }, - { - "id": 6064, - "guid": "7ead47b4-6b58-464b-9d18-08eed4dd31b1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Brickman", - "company": "Compuamerica", - "phone": "876-459-3092", - "email": "lily@compuamerica.com" - }, - { - "id": 6065, - "guid": "62ab6fab-60bb-4b58-815c-8bb930f1a1cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Otis", - "company": "Anagraph", - "phone": "823-597-3128", - "email": "aaliyah@anagraph.com" - }, - { - "id": 6066, - "guid": "56e0e56e-bdd7-42a1-bcfa-9441cbc688b3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Gilmore", - "company": "Pacwest", - "phone": "865-437-2303", - "email": "paige@pacwest.com" - }, - { - "id": 6067, - "guid": "8fd96c12-bf23-432e-b76a-491ebaba57f8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Taylor Thomson", - "company": "Allnet", - "phone": "885-600-3503", - "email": "taylor@allnet.com" - }, - { - "id": 6068, - "guid": "08aabe51-c1d4-4aab-853c-1eadb76d2d1c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Gilson", - "company": "Fibrotopia", - "phone": "803-600-2551", - "email": "audrey@fibrotopia.com" - }, - { - "id": 6069, - "guid": "8f04d373-bf35-4b67-b9c3-34e92e8f106b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Gilson", - "company": "Truegate", - "phone": "852-402-2118", - "email": "julia@truegate.com" - }, - { - "id": 6070, - "guid": "8f83e1cf-7ba4-4bf6-9b09-501f1e813b02", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Abigail Wayne", - "company": "US Infratouch", - "phone": "878-554-3815", - "email": "abigail@us infratouch.com" - }, - { - "id": 6071, - "guid": "a6f486a4-cd0c-4f7e-97f1-c65107b42311", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Watson", - "company": "Conrama", - "phone": "877-565-2609", - "email": "faith@conrama.com" - }, - { - "id": 6072, - "guid": "1826b99b-5dcf-4a60-b056-541a7af12129", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Grace Clapton", - "company": "Westmedia", - "phone": "816-517-3522", - "email": "grace@westmedia.com" - }, - { - "id": 6073, - "guid": "a7bebb4a-b323-4ae4-baea-f28526789354", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Khloe Oswald", - "company": "eEyetanic", - "phone": "851-469-3743", - "email": "khloe@eeyetanic.com" - }, - { - "id": 6074, - "guid": "65db131d-e68c-413a-be39-0f3adf492444", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Fisher", - "company": "Generola", - "phone": "864-533-2122", - "email": "caroline@generola.com" - }, - { - "id": 6075, - "guid": "91a21cda-1d1a-4a0f-a266-075eb3d5655d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Smith", - "company": "Aluco", - "phone": "808-475-2416", - "email": "khloe@aluco.com" - }, - { - "id": 6076, - "guid": "fe60ed23-1557-46a4-b88f-29a91bc95179", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Gustman", - "company": "iQualcar", - "phone": "884-416-2542", - "email": "zoey@iqualcar.com" - }, - { - "id": 6077, - "guid": "a32a6900-182c-41c8-9f34-4a8ddacb474b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Molly Oswald", - "company": "Fibrotouch", - "phone": "804-417-2517", - "email": "molly@fibrotouch.com" - }, - { - "id": 6078, - "guid": "e5378c96-8571-435f-8a97-99fd150efde9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Goodman", - "company": "Safetrust", - "phone": "890-544-3579", - "email": "arianna@safetrust.com" - }, - { - "id": 6079, - "guid": "c62fb92a-7107-4984-8551-5e2441d5de65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Michaelson", - "company": "Thermotomic", - "phone": "846-600-2758", - "email": "alexis@thermotomic.com" - }, - { - "id": 6080, - "guid": "e47ef0ca-e7eb-463a-96c0-1084a330b592", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Anna Cramer", - "company": "Textiqua", - "phone": "820-440-2631", - "email": "anna@textiqua.com" - }, - { - "id": 6081, - "guid": "ecfeeb26-460b-4205-bede-0016b77528b1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Webster", - "company": "Allnet", - "phone": "815-474-2044", - "email": "mya@allnet.com" - }, - { - "id": 6082, - "guid": "127337d2-4e19-4785-b229-40bbdb172d6b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Abramson", - "company": "Keytheon", - "phone": "851-499-2648", - "email": "kaylee@keytheon.com" - }, - { - "id": 6083, - "guid": "8b0b908d-169d-407f-a2c3-5c8c90db4b16", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophia Davidson", - "company": "Nanobanc", - "phone": "804-489-2399", - "email": "sophia@nanobanc.com" - }, - { - "id": 6084, - "guid": "abc29715-f8ba-47ee-b5f0-a70c9107302a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Daniels", - "company": "Conrama", - "phone": "849-461-2355", - "email": "mya@conrama.com" - }, - { - "id": 6085, - "guid": "6b40bf2f-a281-48c7-9fea-ad67b08521cf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Thornton", - "company": "Raylog", - "phone": "839-457-2357", - "email": "lauren@raylog.com" - }, - { - "id": 6086, - "guid": "bd3ac91d-6dc3-496f-bded-5279b996aa38", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Wallace", - "company": "Hypervaco", - "phone": "818-528-3649", - "email": "melanie@hypervaco.com" - }, - { - "id": 6087, - "guid": "a37492b4-7ab8-4fa4-85c0-4c89619ca69e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Oldman", - "company": "Transtouch", - "phone": "899-402-2888", - "email": "emily@transtouch.com" - }, - { - "id": 6088, - "guid": "6c094442-841f-4cff-85ba-896a668a769f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Gustman", - "company": "Polytheon", - "phone": "822-480-2539", - "email": "aaliyah@polytheon.com" - }, - { - "id": 6089, - "guid": "83d6440c-5391-4d5c-8ad5-3c93135a5fd6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Charlson", - "company": "Pacwest", - "phone": "889-577-2352", - "email": "faith@pacwest.com" - }, - { - "id": 6090, - "guid": "f8a3ff5e-3623-4b00-86d9-65e1fadad54c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Milton", - "company": "Orthomedia", - "phone": "842-546-3963", - "email": "emma@orthomedia.com" - }, - { - "id": 6091, - "guid": "bf5e7689-459e-4de0-895b-0e508d2d9365", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Nelson", - "company": "Infragraph", - "phone": "877-597-2135", - "email": "hailey@infragraph.com" - }, - { - "id": 6092, - "guid": "c34850e4-5b36-4073-bf59-756f1ee6f6ec", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Stanley", - "company": "Dynarama", - "phone": "871-414-3790", - "email": "grace@dynarama.com" - }, - { - "id": 6093, - "guid": "65ac526e-90b8-4e21-9a06-6abb0cd14321", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Hailey", - "company": "Turbomart", - "phone": "874-533-3124", - "email": "evelyn@turbomart.com" - }, - { - "id": 6094, - "guid": "e12fd97b-d972-4437-9b91-9db43e5c9362", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Mercer", - "company": "Venconix", - "phone": "810-421-3373", - "email": "alyssa@venconix.com" - }, - { - "id": 6095, - "guid": "0cdba729-15d0-4677-a9eb-56a66dc9b469", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Charlson", - "company": "Generola", - "phone": "887-534-2579", - "email": "mia@generola.com" - }, - { - "id": 6096, - "guid": "98355a36-d88d-4924-af0d-61c28592252f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Haig", - "company": "Generola", - "phone": "844-587-2621", - "email": "makayla@generola.com" - }, - { - "id": 6097, - "guid": "17218822-27d9-4ed0-b430-db2bdc660a4d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis White", - "company": "Aprama", - "phone": "888-566-3403", - "email": "alexis@aprama.com" - }, - { - "id": 6098, - "guid": "e97499be-a87b-4a9d-b030-c740cfad7c3a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Thorndike", - "company": "Textiqua", - "phone": "829-453-3973", - "email": "emily@textiqua.com" - }, - { - "id": 6099, - "guid": "097efe7b-6fe2-4aa2-bdff-ff190e18dcea", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Osborne", - "company": "Airdyne", - "phone": "897-583-3848", - "email": "rachel@airdyne.com" - }, - { - "id": 6100, - "guid": "ee2b70d2-6ecb-426e-a7e7-12a973ed841f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Nash", - "company": "Genland", - "phone": "830-443-2768", - "email": "bailey@genland.com" - }, - { - "id": 6101, - "guid": "6fbd7bcb-8cce-4d6d-867f-3bcac668170e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Gate", - "company": "Systheon", - "phone": "819-419-2373", - "email": "emma@systheon.com" - }, - { - "id": 6102, - "guid": "36fe4ce0-d894-4477-ac96-8ed6f43703c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Avery Warren", - "company": "Quintegrity", - "phone": "806-407-2339", - "email": "avery@quintegrity.com" - }, - { - "id": 6103, - "guid": "e1d10ccb-bb95-4466-aba3-b3d6c26c57a7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Freeman", - "company": "Rapigrafix", - "phone": "877-508-3974", - "email": "melanie@rapigrafix.com" - }, - { - "id": 6104, - "guid": "9d046a0a-7abe-4463-9cc9-424c57e08405", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Milton", - "company": "Robocomm", - "phone": "842-568-3528", - "email": "anna@robocomm.com" - }, - { - "id": 6105, - "guid": "0697bd45-49cb-4a5d-a31a-ff6316833c91", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gianna Gate", - "company": "eSteganoergy", - "phone": "815-520-3947", - "email": "gianna@esteganoergy.com" - }, - { - "id": 6106, - "guid": "8d324333-4727-4499-b5e6-93a28f8c8831", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Michaelson", - "company": "Airdyne", - "phone": "870-427-3684", - "email": "sophia@airdyne.com" - }, - { - "id": 6107, - "guid": "29ac70e9-ed3f-4826-835e-160519d6c03f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Chesterton", - "company": "Xeicon", - "phone": "803-413-3225", - "email": "serenity@xeicon.com" - }, - { - "id": 6108, - "guid": "cede6527-4ec0-43b0-aba0-d86afb940e87", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Nathan", - "company": "Hypervaco", - "phone": "808-540-2237", - "email": "hannah@hypervaco.com" - }, - { - "id": 6109, - "guid": "4e3da260-2991-44c7-95cc-1a644c294c82", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Carey", - "company": "Airdyne", - "phone": "859-487-2315", - "email": "arianna@airdyne.com" - }, - { - "id": 6110, - "guid": "87196cd4-f267-4003-a37d-3c5d0dd9a29a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Oliver", - "company": "Airdyne", - "phone": "810-416-2714", - "email": "brianna@airdyne.com" - }, - { - "id": 6111, - "guid": "e09c15a0-7739-4958-9def-60017911c977", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Sherlock", - "company": "Truetomic", - "phone": "804-422-2991", - "email": "trinity@truetomic.com" - }, - { - "id": 6112, - "guid": "90cf5aef-c5e8-42b6-b352-0e1a715ede9b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Freeman", - "company": "Navivacs", - "phone": "823-556-2727", - "email": "alexis@navivacs.com" - }, - { - "id": 6113, - "guid": "f26310fb-c00f-4a5e-83db-b1f731ddda6c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Freeman", - "company": "Truegate", - "phone": "879-558-3938", - "email": "allison@truegate.com" - }, - { - "id": 6114, - "guid": "c5f2fea9-bca2-479e-820a-5f2264debb4e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Melanie Webster", - "company": "Pacwest", - "phone": "880-574-2357", - "email": "melanie@pacwest.com" - }, - { - "id": 6115, - "guid": "a5d7dd0d-55e5-4114-93a9-c6b01fb57d9a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Freeman", - "company": "eSteganoergy", - "phone": "807-415-3936", - "email": "jasmine@esteganoergy.com" - }, - { - "id": 6116, - "guid": "06b015df-ce16-489c-b645-888fcde28e27", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Day", - "company": "Technogra", - "phone": "848-514-2852", - "email": "aaliyah@technogra.com" - }, - { - "id": 6117, - "guid": "1376b2e0-44e0-4da9-bd23-e1e113b2b555", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Higgins", - "company": "Airdyne", - "phone": "890-475-3853", - "email": "grace@airdyne.com" - }, - { - "id": 6118, - "guid": "d7ac7484-b014-4458-bc4b-ffafdc1fed35", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Oswald", - "company": "Techtron", - "phone": "846-590-3230", - "email": "lily@techtron.com" - }, - { - "id": 6119, - "guid": "d5a61a74-191f-4438-b887-9248bdd70bde", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Timmons", - "company": "Indisco", - "phone": "852-433-3445", - "email": "jasmine@indisco.com" - }, - { - "id": 6120, - "guid": "66a0792c-c390-4916-9457-afc1ceefeadb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Thornton", - "company": "Safeagra", - "phone": "850-577-2302", - "email": "allison@safeagra.com" - }, - { - "id": 6121, - "guid": "edeadf23-6206-44a1-b370-cd6acfb3ef80", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Valeria Otis", - "company": "Interliant", - "phone": "890-535-3896", - "email": "valeria@interliant.com" - }, - { - "id": 6122, - "guid": "29f0554e-973a-4bd1-bace-d7d362bf81f5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Miln", - "company": "Nanobanc", - "phone": "846-467-2066", - "email": "peyton@nanobanc.com" - }, - { - "id": 6123, - "guid": "4a161e0a-653a-4f48-b38a-5f8316b7758a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Nash", - "company": "Cryptotegrity", - "phone": "853-432-2285", - "email": "layla@cryptotegrity.com" - }, - { - "id": 6124, - "guid": "33543e77-551c-4f34-804d-03dec324b1fe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Fisher", - "company": "Xeicon", - "phone": "894-449-2530", - "email": "alyssa@xeicon.com" - }, - { - "id": 6125, - "guid": "7fb08a2a-6d65-41d1-a8e0-2d40622d2501", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lily Oldridge", - "company": "Teratopia", - "phone": "895-405-2315", - "email": "lily@teratopia.com" - }, - { - "id": 6126, - "guid": "e273d87b-5ea2-4d26-ac08-7d451b7dbcf7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Thomson", - "company": "Nanobanc", - "phone": "849-483-3102", - "email": "ava@nanobanc.com" - }, - { - "id": 6127, - "guid": "e5207e0c-0e22-4175-93b7-8a71d88ba165", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Valeria Davidson", - "company": "Airdyne", - "phone": "813-509-3783", - "email": "valeria@airdyne.com" - }, - { - "id": 6128, - "guid": "fb8be7c8-6152-426c-991f-5028bc7c2805", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Thornton", - "company": "Westmedia", - "phone": "809-574-3891", - "email": "melanie@westmedia.com" - }, - { - "id": 6129, - "guid": "23c04ddf-7a73-40fb-93be-585ff8cf9bfd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Brickman", - "company": "Skydata", - "phone": "887-539-2947", - "email": "riley@skydata.com" - }, - { - "id": 6130, - "guid": "f1548e66-6a90-441f-9c22-8aa2e8351cb0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lillian Miller", - "company": "Qualserve", - "phone": "843-425-2135", - "email": "lillian@qualserve.com" - }, - { - "id": 6131, - "guid": "908815be-5c2e-422c-8aa3-2080c66ef333", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Carey", - "company": "Indisco", - "phone": "863-463-3697", - "email": "sophie@indisco.com" - }, - { - "id": 6132, - "guid": "8d8a45fd-08ee-49b5-8676-93db99d1541b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Abramson", - "company": "Teknoplexon", - "phone": "828-411-3819", - "email": "jasmine@teknoplexon.com" - }, - { - "id": 6133, - "guid": "6f8db153-a8ba-41ae-a1a6-10159a68c7fe", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Hancock", - "company": "Teratopia", - "phone": "837-579-2314", - "email": "nevaeh@teratopia.com" - }, - { - "id": 6134, - "guid": "ebd919f3-745d-4b7d-9ec6-0471da6948b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Leah Sheldon", - "company": "Conrama", - "phone": "883-450-2386", - "email": "leah@conrama.com" - }, - { - "id": 6135, - "guid": "3686c080-5c5a-4ee8-9415-ddaeaeba2bed", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Vaughan", - "company": "Westgate", - "phone": "899-592-2573", - "email": "brooke@westgate.com" - }, - { - "id": 6136, - "guid": "d19848e9-9b98-47cf-a91d-eb5a5be514f3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Gustman", - "company": "Safetrust", - "phone": "818-408-3942", - "email": "riley@safetrust.com" - }, - { - "id": 6137, - "guid": "455a5e74-df60-480a-a769-98b06aa9f8a8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Gilson", - "company": "Allnet", - "phone": "811-574-3085", - "email": "isabelle@allnet.com" - }, - { - "id": 6138, - "guid": "27dad08b-d1a1-474f-9aac-85d217f8d8f9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Sheldon", - "company": "Superscope", - "phone": "894-401-3192", - "email": "leah@superscope.com" - }, - { - "id": 6139, - "guid": "5132459b-5140-4823-9d26-e83a0e7a2a60", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Valeria Gerald", - "company": "Netseco", - "phone": "892-437-2264", - "email": "valeria@netseco.com" - }, - { - "id": 6140, - "guid": "51948d66-95b8-402f-a080-351d7db901a7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Evelyn Oliver", - "company": "Pericenta", - "phone": "800-557-3881", - "email": "evelyn@pericenta.com" - }, - { - "id": 6141, - "guid": "9372d062-bb6b-49c1-adfb-25a1c5446034", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Miller", - "company": "Celgra", - "phone": "866-418-2130", - "email": "lillian@celgra.com" - }, - { - "id": 6142, - "guid": "0e7cf7c9-b17b-49f1-aacd-443c48601742", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Turner", - "company": "Unconix", - "phone": "848-428-2062", - "email": "brooke@unconix.com" - }, - { - "id": 6143, - "guid": "e56e2dd0-3d26-47c5-9af7-23b7f5b5059e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Walkman", - "company": "Technogra", - "phone": "838-474-2884", - "email": "andrea@technogra.com" - }, - { - "id": 6144, - "guid": "b72c0f3b-19d3-4ffe-8cb5-c7b58576eed9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Charlson", - "company": "Allphysiche", - "phone": "838-509-3627", - "email": "gianna@allphysiche.com" - }, - { - "id": 6145, - "guid": "ebe9212c-913b-4b25-b5c4-da00a5ebc20a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Miller", - "company": "Entcast", - "phone": "897-407-2758", - "email": "hailey@entcast.com" - }, - { - "id": 6146, - "guid": "ac0763aa-df8f-4825-a99a-90f1a1469470", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Melanie Brown", - "company": "Navivacs", - "phone": "815-516-3169", - "email": "melanie@navivacs.com" - }, - { - "id": 6147, - "guid": "2e3b6de2-caee-455c-abfe-db72efa0003a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia WifKinson", - "company": "iSkyvaco", - "phone": "800-453-2700", - "email": "sofia@iskyvaco.com" - }, - { - "id": 6148, - "guid": "c0d472f5-cf16-4f7f-9f91-3920e775790b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Carey", - "company": "Multitiqua", - "phone": "872-405-3251", - "email": "kaylee@multitiqua.com" - }, - { - "id": 6149, - "guid": "a28b3dd4-5309-4003-bac2-53e46665c520", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Nelson", - "company": "eSteganoergy", - "phone": "893-422-2029", - "email": "maria@esteganoergy.com" - }, - { - "id": 6150, - "guid": "8e651f08-2e69-4142-8d92-d58de066d756", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Brickman", - "company": "iSkyvaco", - "phone": "820-496-2471", - "email": "eva@iskyvaco.com" - }, - { - "id": 6151, - "guid": "a1a38cc5-79d0-4cae-adcc-7a6c7c2b3991", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Conors", - "company": "Titanirola", - "phone": "833-428-2706", - "email": "caroline@titanirola.com" - }, - { - "id": 6152, - "guid": "53a05e3f-1e07-41db-aaae-5ee8ff2c78b4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Turner", - "company": "iEnland", - "phone": "843-584-2825", - "email": "olivia@ienland.com" - }, - { - "id": 6153, - "guid": "4527c9cd-41a4-438d-b16d-6878960e95f5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Aubrey Watson", - "company": "Westmedia", - "phone": "842-502-2798", - "email": "aubrey@westmedia.com" - }, - { - "id": 6154, - "guid": "b19d58d4-94f7-4343-a91a-f6e0ed3c0d74", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Clapton", - "company": "Teratopia", - "phone": "811-453-3600", - "email": "bella@teratopia.com" - }, - { - "id": 6155, - "guid": "e1261b67-ad62-4f9a-9d08-94c1eab617cb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Warren", - "company": "Robocomm", - "phone": "889-593-3957", - "email": "gianna@robocomm.com" - }, - { - "id": 6156, - "guid": "29c66663-a6fa-4614-9750-0272c6864ea5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Miln", - "company": "Inridium", - "phone": "823-509-3707", - "email": "allison@inridium.com" - }, - { - "id": 6157, - "guid": "0b9e8b9f-2944-4715-8d59-1b5ae44d4b3e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Brickman", - "company": "Tekcar", - "phone": "825-545-3604", - "email": "brooke@tekcar.com" - }, - { - "id": 6158, - "guid": "292a3b8f-8f47-478e-a1a8-365818f9ac3a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Adamson", - "company": "SysVenamerica", - "phone": "896-570-3525", - "email": "genesis@sysvenamerica.com" - }, - { - "id": 6159, - "guid": "a10ad7c3-be66-4fc1-9745-53e23ff30303", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Nelson", - "company": "US Infratouch", - "phone": "886-411-3508", - "email": "ashley@us infratouch.com" - }, - { - "id": 6160, - "guid": "a31fc43d-7a61-40ff-aa50-c650dbaf271c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Nathan", - "company": "Qualserve", - "phone": "897-535-3505", - "email": "gabrielle@qualserve.com" - }, - { - "id": 6161, - "guid": "3468b919-47b5-471f-8c37-45f2af24b85d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Angelina Fulton", - "company": "Infraique", - "phone": "874-592-2284", - "email": "angelina@infraique.com" - }, - { - "id": 6162, - "guid": "d9376df8-c5fa-4b8c-b599-1a7040dbbaa3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Wayne", - "company": "Westgate", - "phone": "850-512-3375", - "email": "savannah@westgate.com" - }, - { - "id": 6163, - "guid": "428728a1-0da9-4f94-9e0b-9b0aa6e7925a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Hodges", - "company": "Venconix", - "phone": "872-407-3963", - "email": "leah@venconix.com" - }, - { - "id": 6164, - "guid": "2e29e913-2394-4365-b238-ce74c76b8807", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Miers", - "company": "Netseco", - "phone": "864-421-2416", - "email": "destiny@netseco.com" - }, - { - "id": 6165, - "guid": "4f817017-b706-4d7b-b069-cc0d349b9fb1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Abramson", - "company": "Infraique", - "phone": "825-406-3510", - "email": "kayla@infraique.com" - }, - { - "id": 6166, - "guid": "2de825f2-4cb9-44ce-97c7-0aa9499fdf65", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Carrington", - "company": "Westmedia", - "phone": "883-580-2487", - "email": "zoey@westmedia.com" - }, - { - "id": 6167, - "guid": "933b9e8b-4a5f-4d7b-8325-04794b367f32", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mariah Gilson", - "company": "Fibrotopia", - "phone": "867-528-2851", - "email": "mariah@fibrotopia.com" - }, - { - "id": 6168, - "guid": "cb639b0a-9118-41c4-b258-301c24adea7d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katelyn Carrington", - "company": "Ventanium", - "phone": "843-447-3814", - "email": "katelyn@ventanium.com" - }, - { - "id": 6169, - "guid": "cbe23a82-12be-41cc-a99c-8cf3f07e84b3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Katelyn Neal", - "company": "Qualserve", - "phone": "894-443-2790", - "email": "katelyn@qualserve.com" - }, - { - "id": 6170, - "guid": "7229a13e-f9d3-4f98-8110-ac1f9e0612be", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Olivia Owen", - "company": "Teraserv", - "phone": "840-595-3690", - "email": "olivia@teraserv.com" - }, - { - "id": 6171, - "guid": "a8f2ca78-228b-46d7-ab4e-bc324833a3d9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Thornton", - "company": "Jamrola", - "phone": "860-599-3761", - "email": "vanessa@jamrola.com" - }, - { - "id": 6172, - "guid": "10e7801f-b1f4-47d5-bc89-b260be89ccd4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Young", - "company": "Allphysiche", - "phone": "870-571-3577", - "email": "allison@allphysiche.com" - }, - { - "id": 6173, - "guid": "a8ada6fa-2076-4ff8-9e79-260ee27071a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Natalie Carter", - "company": "Syssoft", - "phone": "836-492-2094", - "email": "natalie@syssoft.com" - }, - { - "id": 6174, - "guid": "5f5395ad-bd14-4c50-a212-e2046fe14e67", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Osborne", - "company": "US Infratouch", - "phone": "850-586-3538", - "email": "gabrielle@us infratouch.com" - }, - { - "id": 6175, - "guid": "423b6c3b-8c33-456d-92c8-30fe39d1204f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Haig", - "company": "Idmax", - "phone": "897-510-3615", - "email": "samantha@idmax.com" - }, - { - "id": 6176, - "guid": "ae9902a4-2f6c-42a6-891c-69fa8be1560c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Natalie Chesterton", - "company": "Westtomik", - "phone": "898-460-3186", - "email": "natalie@westtomik.com" - }, - { - "id": 6177, - "guid": "48b57786-067f-4954-b28d-395863780c82", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madelyn Winter", - "company": "Conotomics", - "phone": "834-574-2625", - "email": "madelyn@conotomics.com" - }, - { - "id": 6178, - "guid": "0348b1fe-21f7-40c2-9969-76ae1a7dff2a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Abramson", - "company": "Fibrotopia", - "phone": "886-562-2212", - "email": "julia@fibrotopia.com" - }, - { - "id": 6179, - "guid": "64fc5b05-686b-434b-a980-47de713d1612", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Watson", - "company": "Truetomic", - "phone": "875-448-2670", - "email": "kimberly@truetomic.com" - }, - { - "id": 6180, - "guid": "109da185-e941-445b-8515-b03a382b0572", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Gerald", - "company": "Aprama", - "phone": "897-484-3519", - "email": "payton@aprama.com" - }, - { - "id": 6181, - "guid": "3a0e0797-0926-4e5c-af1e-8387f032eb7c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Melanie Youmans", - "company": "Tekcar", - "phone": "835-533-3872", - "email": "melanie@tekcar.com" - }, - { - "id": 6182, - "guid": "71dc9bf7-28f8-4643-837a-967d7c96d2ae", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Vaughan", - "company": "Videobanc", - "phone": "889-488-3339", - "email": "gianna@videobanc.com" - }, - { - "id": 6183, - "guid": "209b5f33-4f66-4ec3-8545-ea0a9d3af9cd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Galbraith", - "company": "Technogra", - "phone": "834-428-2667", - "email": "jocelyn@technogra.com" - }, - { - "id": 6184, - "guid": "b83e8a44-d128-4a06-ba04-07e84275dd42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Walkman", - "company": "Entcast", - "phone": "823-531-2736", - "email": "hannah@entcast.com" - }, - { - "id": 6185, - "guid": "6ebb44f4-ffa1-49bc-86a5-12c849826055", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Galbraith", - "company": "Robocomm", - "phone": "855-598-3226", - "email": "grace@robocomm.com" - }, - { - "id": 6186, - "guid": "23e32035-fc59-4428-8cea-9b15aeec5c8e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Camila Gardner", - "company": "Thermotomic", - "phone": "841-470-3919", - "email": "camila@thermotomic.com" - }, - { - "id": 6187, - "guid": "1c536df6-6358-41f3-976c-d7fed3db28b5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Bush", - "company": "Openserve", - "phone": "856-528-2566", - "email": "trinity@openserve.com" - }, - { - "id": 6188, - "guid": "21459788-6881-44a6-b2c6-d51bf5a0647b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Camila Charlson", - "company": "Infragraph", - "phone": "850-524-2228", - "email": "camila@infragraph.com" - }, - { - "id": 6189, - "guid": "cc4a829b-2de4-41ed-8085-548c05d2d9fc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoey Oswald", - "company": "Pericenta", - "phone": "898-415-3473", - "email": "zoey@pericenta.com" - }, - { - "id": 6190, - "guid": "24120894-5e8c-4d49-9205-8ec6539fd92e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mia Carrington", - "company": "Safeagra", - "phone": "899-448-3615", - "email": "mia@safeagra.com" - }, - { - "id": 6191, - "guid": "e4af081f-db08-4a3d-9816-34f5d1ec742e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Ford", - "company": "Netsystems", - "phone": "871-513-3698", - "email": "mackenzie@netsystems.com" - }, - { - "id": 6192, - "guid": "ad964fb4-2a01-4b58-89bc-a2ddc6d576a3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Nevaeh Hodges", - "company": "Conotomics", - "phone": "857-551-3102", - "email": "nevaeh@conotomics.com" - }, - { - "id": 6193, - "guid": "9a534041-d031-4761-81a9-4e9b363201d4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Waller", - "company": "Westtomik", - "phone": "830-520-3025", - "email": "leah@westtomik.com" - }, - { - "id": 6194, - "guid": "1190cf5a-a441-4634-bda5-4d6bc4da6dfd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Oldman", - "company": "Anagraph", - "phone": "847-402-2055", - "email": "chloe@anagraph.com" - }, - { - "id": 6195, - "guid": "fbe4bba3-a064-4ba9-a2df-598c06c56109", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Creighton", - "company": "Inridium", - "phone": "867-406-3393", - "email": "savannah@inridium.com" - }, - { - "id": 6196, - "guid": "53d8a99e-72e5-4982-8955-ae05775dafd9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Faith Campbell", - "company": "Celgra", - "phone": "879-490-3441", - "email": "faith@celgra.com" - }, - { - "id": 6197, - "guid": "be6981c7-ba6e-4fa3-b4c0-a1c63ebbdbd7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Sherlock", - "company": "Teraserv", - "phone": "802-463-2379", - "email": "valeria@teraserv.com" - }, - { - "id": 6198, - "guid": "461a67d1-2fc4-4c67-8ec8-791d01209e3e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Davidson", - "company": "Proline", - "phone": "866-467-2883", - "email": "maya@proline.com" - }, - { - "id": 6199, - "guid": "5d45500f-02ee-487f-9c2e-a11e56db7e94", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Milton", - "company": "Teratopia", - "phone": "891-418-2918", - "email": "emma@teratopia.com" - }, - { - "id": 6200, - "guid": "07cd6cc0-31e5-4b92-bfd3-4adff1007a97", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Gate", - "company": "Anaframe", - "phone": "862-561-2896", - "email": "victoria@anaframe.com" - }, - { - "id": 6201, - "guid": "e7bf27bf-1484-4b45-8da6-9b885fdd2aef", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Miers", - "company": "Westmedia", - "phone": "812-571-2801", - "email": "camila@westmedia.com" - }, - { - "id": 6202, - "guid": "4d93a477-4cf1-4dc8-ad10-e3215000170e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Vance", - "company": "Raylog", - "phone": "815-483-3764", - "email": "zoey@raylog.com" - }, - { - "id": 6203, - "guid": "6cdbe0eb-4233-4e7e-856c-e2be9b03c0a2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mariah Hailey", - "company": "iOptystix", - "phone": "814-452-3547", - "email": "mariah@ioptystix.com" - }, - { - "id": 6204, - "guid": "d37c0406-7316-42a7-8dd6-05878ab94fff", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabriella Brooks", - "company": "Infraique", - "phone": "863-441-3747", - "email": "gabriella@infraique.com" - }, - { - "id": 6205, - "guid": "84f3e070-19c8-4d96-bd4d-c52bcf0e25c3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Michaelson", - "company": "eEyetanic", - "phone": "808-507-2719", - "email": "olivia@eeyetanic.com" - }, - { - "id": 6206, - "guid": "86def5f4-157b-476b-b7bb-f6eae854c350", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gate", - "company": "Openserve", - "phone": "803-480-2212", - "email": "lauren@openserve.com" - }, - { - "id": 6207, - "guid": "37a64073-556b-4936-bba1-a2e206639b63", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Michaelson", - "company": "Safeagra", - "phone": "853-487-3734", - "email": "samantha@safeagra.com" - }, - { - "id": 6208, - "guid": "1fa38eb9-1d11-4099-beeb-7c1a772915fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Wayne", - "company": "Multitiqua", - "phone": "847-524-2072", - "email": "samantha@multitiqua.com" - }, - { - "id": 6209, - "guid": "ffe7e24b-d974-4d81-b35f-7ce4d727fe96", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emily Brown", - "company": "Raylog", - "phone": "893-584-2768", - "email": "emily@raylog.com" - }, - { - "id": 6210, - "guid": "740c9857-d80d-4b48-a165-03b1e970856d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Nash", - "company": "Teraserv", - "phone": "885-524-3640", - "email": "mackenzie@teraserv.com" - }, - { - "id": 6211, - "guid": "ad0de2d8-cf7b-464d-9c00-4ff746b34c50", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Thomson", - "company": "US Omnigraphik", - "phone": "811-482-3180", - "email": "peyton@us omnigraphik.com" - }, - { - "id": 6212, - "guid": "61e1f00e-e91c-4390-9d23-ad0d00cfe082", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hailey Waller", - "company": "Conotomics", - "phone": "856-422-3131", - "email": "hailey@conotomics.com" - }, - { - "id": 6213, - "guid": "c2b5c4ea-bb08-4403-ac91-873f8554a5e8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Crossman", - "company": "Truetomic", - "phone": "849-401-3734", - "email": "zoe@truetomic.com" - }, - { - "id": 6214, - "guid": "cac940cd-bdee-4e1a-8488-23de43451952", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mia Ogden", - "company": "Titanirola", - "phone": "855-493-3158", - "email": "mia@titanirola.com" - }, - { - "id": 6215, - "guid": "fadfd959-9686-4486-9dbc-6ad6505490f5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Thomson", - "company": "Safetrust", - "phone": "863-445-2774", - "email": "lauren@safetrust.com" - }, - { - "id": 6216, - "guid": "3d765eca-c9b2-414d-bd3c-b8c218ca5def", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Wallace", - "company": "SysVenamerica", - "phone": "801-537-2749", - "email": "ava@sysvenamerica.com" - }, - { - "id": 6217, - "guid": "a1adb8f2-78cb-49a8-93b8-43608a1ce70c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Milton", - "company": "Allnet", - "phone": "897-591-2945", - "email": "ava@allnet.com" - }, - { - "id": 6218, - "guid": "0fcd7330-42a2-44e2-b35d-3d61b7d82870", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kimberly Gerald", - "company": "Syssoft", - "phone": "810-403-3104", - "email": "kimberly@syssoft.com" - }, - { - "id": 6219, - "guid": "a17fbb95-b150-4cfb-a103-de876a196a19", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Wallace", - "company": "Idmax", - "phone": "854-439-2436", - "email": "layla@idmax.com" - }, - { - "id": 6220, - "guid": "bbaf8f48-72ae-44a4-8726-42f5b4b5dfe7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mia Oldman", - "company": "Tekcar", - "phone": "897-471-3809", - "email": "mia@tekcar.com" - }, - { - "id": 6221, - "guid": "1d749cb3-7eca-4c33-b03c-4ee88a1aa0d2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Crossman", - "company": "Indisco", - "phone": "839-468-2067", - "email": "samantha@indisco.com" - }, - { - "id": 6222, - "guid": "4c484e1d-30bd-4407-9e6e-77828b3d24bc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Morgan Mercer", - "company": "Allnet", - "phone": "890-598-2283", - "email": "morgan@allnet.com" - }, - { - "id": 6223, - "guid": "7dfc4635-c875-43cb-8065-e9db0e18e560", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Brooks", - "company": "Conotomics", - "phone": "889-464-2564", - "email": "morgan@conotomics.com" - }, - { - "id": 6224, - "guid": "b0d33560-1dde-43d1-a3de-616a6a1dc596", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Gibbs", - "company": "Videobanc", - "phone": "840-573-3128", - "email": "eva@videobanc.com" - }, - { - "id": 6225, - "guid": "8fb57414-8bda-4ca4-b4d2-fbfbdc20aa1c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Hodges", - "company": "iOptystix", - "phone": "806-531-3540", - "email": "kimberly@ioptystix.com" - }, - { - "id": 6226, - "guid": "199047e3-a675-4031-b3fb-b9fe2e66e9a1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Hardman", - "company": "Sontopia", - "phone": "818-596-3586", - "email": "grace@sontopia.com" - }, - { - "id": 6227, - "guid": "99e419e9-6d85-4ea4-8919-9a6283dfc562", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Samantha Oliver", - "company": "Cryptotegrity", - "phone": "884-499-2822", - "email": "samantha@cryptotegrity.com" - }, - { - "id": 6228, - "guid": "6b697dfc-b5f1-43e8-ad49-af2e5ccfe56b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Warren", - "company": "InfoAirway", - "phone": "806-405-2376", - "email": "zoey@infoairway.com" - }, - { - "id": 6229, - "guid": "6a9807e3-2d52-4f9d-a175-5021bb8e0226", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Conors", - "company": "OpKeycomm", - "phone": "886-433-3693", - "email": "autumn@opkeycomm.com" - }, - { - "id": 6230, - "guid": "0b408ea0-a41b-4e4d-b349-9aa90f6f685b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Goldman", - "company": "Netsystems", - "phone": "834-445-2462", - "email": "jessica@netsystems.com" - }, - { - "id": 6231, - "guid": "ab3db238-2033-48f8-8480-cbd19c978cf3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Wainwright", - "company": "Netseco", - "phone": "863-562-2908", - "email": "hailey@netseco.com" - }, - { - "id": 6232, - "guid": "967dfaf1-c4ee-4469-b91b-41bda54ad0a3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Warren", - "company": "Ameritron", - "phone": "871-417-2192", - "email": "abigail@ameritron.com" - }, - { - "id": 6233, - "guid": "6a913134-3983-4708-b05c-cae04a1816b2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Wood", - "company": "iQualcar", - "phone": "826-446-2712", - "email": "elizabeth@iqualcar.com" - }, - { - "id": 6234, - "guid": "cf3bb7c8-8a1c-4cdb-9bad-d23914d3b2f1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Higgins", - "company": "Idmax", - "phone": "821-442-2985", - "email": "genesis@idmax.com" - }, - { - "id": 6235, - "guid": "754e82d1-a33a-4e8b-8ff2-299dcce888e6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jasmine Fulton", - "company": "Systheon", - "phone": "888-442-3379", - "email": "jasmine@systheon.com" - }, - { - "id": 6236, - "guid": "1446eaa0-7fd9-49f7-8925-fb74d22def59", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline Galbraith", - "company": "Vencom", - "phone": "851-412-2984", - "email": "madeline@vencom.com" - }, - { - "id": 6237, - "guid": "aa084f54-80fb-4f80-a68d-6dab33bce6c9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Webster", - "company": "Polytheon", - "phone": "861-400-2432", - "email": "layla@polytheon.com" - }, - { - "id": 6238, - "guid": "0b9e4991-477b-4430-8ca6-1dc9b657dd3c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Otis", - "company": "Titanirola", - "phone": "851-600-2355", - "email": "isabella@titanirola.com" - }, - { - "id": 6239, - "guid": "5371861f-92d0-4acf-ab67-c2fcd9a312a8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Brooks", - "company": "Pericenta", - "phone": "867-477-3589", - "email": "ariana@pericenta.com" - }, - { - "id": 6240, - "guid": "42a7b1d3-5fd0-46a5-b506-5e915547264b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Gerald", - "company": "Anagraph", - "phone": "890-416-3614", - "email": "brooke@anagraph.com" - }, - { - "id": 6241, - "guid": "a2164d48-686a-415c-b78d-bc616b5a43ea", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Miln", - "company": "Keytheon", - "phone": "860-407-3675", - "email": "elizabeth@keytheon.com" - }, - { - "id": 6242, - "guid": "5b997165-3916-41c4-9f8f-751badb2af5d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brooke Adamson", - "company": "Navivacs", - "phone": "857-512-2242", - "email": "brooke@navivacs.com" - }, - { - "id": 6243, - "guid": "336bf232-6789-4d74-bca8-91ffe4d44469", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Hoggarth", - "company": "Indisco", - "phone": "840-439-3331", - "email": "kylie@indisco.com" - }, - { - "id": 6244, - "guid": "5d160fc0-e498-4543-8577-5741433fc989", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gianna Thomson", - "company": "iMedconik", - "phone": "873-595-3607", - "email": "gianna@imedconik.com" - }, - { - "id": 6245, - "guid": "e8162514-6318-4ebc-ba2b-07a50a011a54", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Brown", - "company": "Robocomm", - "phone": "869-562-2591", - "email": "hannah@robocomm.com" - }, - { - "id": 6246, - "guid": "e16a4c25-9699-42c2-bab7-6b50d36732c5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Galbraith", - "company": "Robotomic", - "phone": "894-533-2440", - "email": "bailey@robotomic.com" - }, - { - "id": 6247, - "guid": "be3b3659-3c64-4b2c-ae77-fedd5d44d0bb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Bailey Clapton", - "company": "Ameritron", - "phone": "899-575-3118", - "email": "bailey@ameritron.com" - }, - { - "id": 6248, - "guid": "6e4ca54d-eb20-4485-b100-d812239c60e2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Brickman", - "company": "Enlogia", - "phone": "893-417-3870", - "email": "brooklyn@enlogia.com" - }, - { - "id": 6249, - "guid": "2c766102-b7a3-4016-b6c3-56b76e9941f6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Hoggarth", - "company": "Pericenta", - "phone": "855-482-3773", - "email": "alyssa@pericenta.com" - }, - { - "id": 6250, - "guid": "e1f62831-0bb3-428f-b90f-1ab357ebd3c1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Wainwright", - "company": "Teknoplexon", - "phone": "845-456-2003", - "email": "destiny@teknoplexon.com" - }, - { - "id": 6251, - "guid": "6847a768-0537-4176-92e9-2eb13a459837", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Sheldon", - "company": "iEnland", - "phone": "816-489-3314", - "email": "sofia@ienland.com" - }, - { - "id": 6252, - "guid": "5b8588d9-fa36-4f36-bddf-212c186216c8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Conors", - "company": "Teratopia", - "phone": "853-592-3587", - "email": "emma@teratopia.com" - }, - { - "id": 6253, - "guid": "deff5124-778c-4538-87fc-bf3722079dbe", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Higgins", - "company": "Openserve", - "phone": "838-438-2289", - "email": "lily@openserve.com" - }, - { - "id": 6254, - "guid": "ad11d376-a245-4131-9c45-46d521fe7fd6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Carter", - "company": "Orthomedia", - "phone": "853-468-2559", - "email": "ashley@orthomedia.com" - }, - { - "id": 6255, - "guid": "c4a6aa0f-c884-49ab-b54e-2cd99b59f2b6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Oldridge", - "company": "Multitiqua", - "phone": "817-525-3959", - "email": "paige@multitiqua.com" - }, - { - "id": 6256, - "guid": "60e4d2bc-a766-4053-b26d-55fa7bf537e5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe White", - "company": "Infragraph", - "phone": "832-463-2273", - "email": "khloe@infragraph.com" - }, - { - "id": 6257, - "guid": "74105648-bd65-4c91-a9c9-4a9594a1d34c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Miller", - "company": "Aprama", - "phone": "867-458-3959", - "email": "audrey@aprama.com" - }, - { - "id": 6258, - "guid": "5a1ad17f-3114-4e37-b339-191122b4f4c8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Carey", - "company": "Aluco", - "phone": "884-410-2614", - "email": "camila@aluco.com" - }, - { - "id": 6259, - "guid": "e2df319f-ee63-44b0-9145-3afdbc52257c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Molligan", - "company": "Robotemplate", - "phone": "827-575-3391", - "email": "savannah@robotemplate.com" - }, - { - "id": 6260, - "guid": "938af42b-3064-42b0-a17f-92b9fb0cecf1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Ford", - "company": "Unologic", - "phone": "821-526-2356", - "email": "payton@unologic.com" - }, - { - "id": 6261, - "guid": "73fa3b11-bf0e-4b39-985f-2e11566ded85", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Charlotte Molligan", - "company": "Titanirola", - "phone": "831-561-3140", - "email": "charlotte@titanirola.com" - }, - { - "id": 6262, - "guid": "0d802382-44b4-4fb5-ba88-3bd198b5ff45", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Cramer", - "company": "Ameritron", - "phone": "829-502-2045", - "email": "kaylee@ameritron.com" - }, - { - "id": 6263, - "guid": "23946a02-c0f5-4252-bdb9-a8db945442e3", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Youmans", - "company": "OpKeycomm", - "phone": "848-538-2658", - "email": "maria@opkeycomm.com" - }, - { - "id": 6264, - "guid": "e7bfc93b-2476-4b5f-8ebd-a050b58adefe", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Morrison", - "company": "Teknoplexon", - "phone": "893-598-3540", - "email": "autumn@teknoplexon.com" - }, - { - "id": 6265, - "guid": "ceec8f1b-e6ca-493c-a101-17a187aa8319", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Taylor Davidson", - "company": "Inridium", - "phone": "891-422-2390", - "email": "taylor@inridium.com" - }, - { - "id": 6266, - "guid": "ede1617e-d3ac-4bd1-a2b9-cc9a0e268551", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail White", - "company": "Xeicon", - "phone": "886-460-3216", - "email": "abigail@xeicon.com" - }, - { - "id": 6267, - "guid": "085a766f-c45b-4ed3-bf9a-799707f8116a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Wood", - "company": "eSteganoergy", - "phone": "888-470-3795", - "email": "trinity@esteganoergy.com" - }, - { - "id": 6268, - "guid": "1dfbc3b1-205b-4848-855d-d3237f5a8988", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Hawkins", - "company": "Quintegrity", - "phone": "845-439-2732", - "email": "abigail@quintegrity.com" - }, - { - "id": 6269, - "guid": "01756e38-c45d-46d3-b05d-45e12a04fdc7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Wood", - "company": "Teratopia", - "phone": "864-493-2367", - "email": "sophie@teratopia.com" - }, - { - "id": 6270, - "guid": "3bdaf336-b13a-49d1-b0d0-323e0c5fd5fd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sofia Nash", - "company": "Westtomik", - "phone": "862-518-3216", - "email": "sofia@westtomik.com" - }, - { - "id": 6271, - "guid": "4ae25bfb-d79a-4b8b-bb79-16d668c2a35c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Gilson", - "company": "Teknoplexon", - "phone": "856-472-3133", - "email": "gabrielle@teknoplexon.com" - }, - { - "id": 6272, - "guid": "0ae41d02-d283-4e2c-a190-e6ed5a52428b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Claire Gibbs", - "company": "iOptystix", - "phone": "801-430-2058", - "email": "claire@ioptystix.com" - }, - { - "id": 6273, - "guid": "4df0d60d-d7c5-44c3-9f96-8888b7cc94e5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Carey", - "company": "Netsystems", - "phone": "850-538-3939", - "email": "lauren@netsystems.com" - }, - { - "id": 6274, - "guid": "0ae91121-3199-4aed-8da4-99061149fe12", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Ward", - "company": "Westmedia", - "phone": "890-452-3750", - "email": "lily@westmedia.com" - }, - { - "id": 6275, - "guid": "96aa600c-25a1-4952-b33b-738427e6605f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Hamphrey", - "company": "Fibroserve", - "phone": "867-414-2809", - "email": "addison@fibroserve.com" - }, - { - "id": 6276, - "guid": "7f09d567-c457-4f02-8bde-2371a487099f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Camila Campbell", - "company": "Robotemplate", - "phone": "864-585-2993", - "email": "camila@robotemplate.com" - }, - { - "id": 6277, - "guid": "3313eb90-6fc6-46ab-a528-da563ac44658", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Riley Miln", - "company": "Titanirola", - "phone": "852-577-2177", - "email": "riley@titanirola.com" - }, - { - "id": 6278, - "guid": "44b3741e-ba34-4835-a719-76345fdedcfe", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alyssa Wallace", - "company": "Teratopia", - "phone": "861-547-3967", - "email": "alyssa@teratopia.com" - }, - { - "id": 6279, - "guid": "b096c2e3-00a7-483b-984a-e0563f761a86", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Ward", - "company": "Turbomart", - "phone": "801-557-2357", - "email": "zoey@turbomart.com" - }, - { - "id": 6280, - "guid": "c3c5e929-f380-45e6-b58f-67bcfc17d37b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoe Gustman", - "company": "Polytheon", - "phone": "893-527-2558", - "email": "zoe@polytheon.com" - }, - { - "id": 6281, - "guid": "6219aa21-5385-448e-ab89-f27c0dce04bf", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Brickman", - "company": "Allnet", - "phone": "834-578-2261", - "email": "khloe@allnet.com" - }, - { - "id": 6282, - "guid": "87eb91de-c507-46d3-84df-cc4f14fea0bc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Young", - "company": "Conrama", - "phone": "854-515-3830", - "email": "victoria@conrama.com" - }, - { - "id": 6283, - "guid": "6ef3c3e8-2112-44ec-892a-aac216844b5d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Goodman", - "company": "Robocomm", - "phone": "891-530-2445", - "email": "kaitlyn@robocomm.com" - }, - { - "id": 6284, - "guid": "1fe875a4-ecd7-46c6-97a5-4e96295a7387", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Miln", - "company": "SysUSA", - "phone": "838-569-3633", - "email": "kaitlyn@sysusa.com" - }, - { - "id": 6285, - "guid": "1406c44e-c4f9-41a6-9e34-1e8ebcc6878d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Gate", - "company": "Robotomic", - "phone": "853-492-2877", - "email": "arianna@robotomic.com" - }, - { - "id": 6286, - "guid": "f243dc7a-30fb-494b-af6a-7c9887b1f60e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Gilbert", - "company": "Technogra", - "phone": "891-557-3531", - "email": "zoe@technogra.com" - }, - { - "id": 6287, - "guid": "4b6146a6-47c7-480f-adec-a1236c54578c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Makayla Milton", - "company": "Qualserve", - "phone": "890-476-2041", - "email": "makayla@qualserve.com" - }, - { - "id": 6288, - "guid": "aa2b2752-12b7-4f77-9aea-5b1ba2526065", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Wayne", - "company": "Safeagra", - "phone": "870-566-2213", - "email": "isabella@safeagra.com" - }, - { - "id": 6289, - "guid": "41124849-9579-422a-a51a-74d74ecff029", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Sheldon", - "company": "Enlogia", - "phone": "808-505-2442", - "email": "gabriella@enlogia.com" - }, - { - "id": 6290, - "guid": "87330bbd-30b7-46d9-a81b-a3286bbd7162", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Warren", - "company": "Generola", - "phone": "836-565-2444", - "email": "zoey@generola.com" - }, - { - "id": 6291, - "guid": "df0d174f-2cbc-4c09-85a6-635171f67ac2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Young", - "company": "US Infratouch", - "phone": "845-441-3588", - "email": "madelyn@us infratouch.com" - }, - { - "id": 6292, - "guid": "d599c290-4b23-41d9-95f7-c8a92cde0cdb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Conors", - "company": "eSteganoergy", - "phone": "866-591-3132", - "email": "layla@esteganoergy.com" - }, - { - "id": 6293, - "guid": "49143f12-8975-4af6-ace9-1d9b61784f5f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Wood", - "company": "Teratopia", - "phone": "804-538-3758", - "email": "gianna@teratopia.com" - }, - { - "id": 6294, - "guid": "3ebf71e1-6953-4312-9d42-42096aad549c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Sheldon", - "company": "Unologic", - "phone": "833-496-2165", - "email": "caroline@unologic.com" - }, - { - "id": 6295, - "guid": "8e035d49-17e8-4b9f-b31e-f60133dad79b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madeline Sherlock", - "company": "Venconix", - "phone": "854-406-2968", - "email": "madeline@venconix.com" - }, - { - "id": 6296, - "guid": "a92b07ab-650c-4add-81eb-61d34722c30e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Carrington", - "company": "Truegate", - "phone": "858-421-3343", - "email": "ariana@truegate.com" - }, - { - "id": 6297, - "guid": "f5911e55-d8b6-4f3e-b9b5-9d9cf7073e43", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Chesterton", - "company": "Allnet", - "phone": "821-406-2086", - "email": "allison@allnet.com" - }, - { - "id": 6298, - "guid": "0850cb3f-68ac-4f4d-9aaf-555fb4fc422f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Carter", - "company": "eSteganoergy", - "phone": "843-578-2788", - "email": "lauren@esteganoergy.com" - }, - { - "id": 6299, - "guid": "9f569e4e-5fb9-4d5b-8b18-7782b9a13c83", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Molligan", - "company": "Titanirola", - "phone": "884-458-3618", - "email": "brooke@titanirola.com" - }, - { - "id": 6300, - "guid": "c7d60b46-2e9f-428b-8c9d-e0d795ba6fc4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Ward", - "company": "Vencom", - "phone": "888-492-3643", - "email": "avery@vencom.com" - }, - { - "id": 6301, - "guid": "e8328ca3-f53a-4e55-83aa-27637af8b7c8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Charlotte Galbraith", - "company": "eSteganoergy", - "phone": "815-530-2444", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 6302, - "guid": "6ce0e3a6-521d-409d-ac91-024e18cfd484", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mya Adamson", - "company": "Skydata", - "phone": "833-534-3513", - "email": "mya@skydata.com" - }, - { - "id": 6303, - "guid": "16879783-dcf8-4bdd-87e1-8692d44cf6c8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Ogden", - "company": "eSteganoergy", - "phone": "850-567-3156", - "email": "alexis@esteganoergy.com" - }, - { - "id": 6304, - "guid": "ee5e2c23-2e71-46f9-8669-6a36b5bb7d09", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Vance", - "company": "Gigaura", - "phone": "888-526-3836", - "email": "mariah@gigaura.com" - }, - { - "id": 6305, - "guid": "343c2570-928a-49cc-a817-35f487986013", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jessica Carey", - "company": "Anaframe", - "phone": "892-557-3754", - "email": "jessica@anaframe.com" - }, - { - "id": 6306, - "guid": "1fe6edad-e29e-4544-a8eb-bead8b4510c4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Fisher", - "company": "Dynarama", - "phone": "885-502-2224", - "email": "angelina@dynarama.com" - }, - { - "id": 6307, - "guid": "49fb3ef4-3e4b-4d7e-8f86-4168185ea6d9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Hawkins", - "company": "iSkyvaco", - "phone": "886-587-2047", - "email": "allison@iskyvaco.com" - }, - { - "id": 6308, - "guid": "7dbc4325-93a7-47bb-ac5e-e995576157a3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kayla Clapton", - "company": "Technogra", - "phone": "825-576-3052", - "email": "kayla@technogra.com" - }, - { - "id": 6309, - "guid": "f279c5ae-50cd-4d9b-b07d-fada277a4187", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Webster", - "company": "Anaframe", - "phone": "893-590-2127", - "email": "camila@anaframe.com" - }, - { - "id": 6310, - "guid": "bfb923f1-4670-489b-8d87-da99aaaa8f1c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Amelia Miers", - "company": "Unologic", - "phone": "828-525-3101", - "email": "amelia@unologic.com" - }, - { - "id": 6311, - "guid": "5c84119c-c316-4048-87e2-0a7f34dcb316", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Oswald", - "company": "Airdyne", - "phone": "804-533-2989", - "email": "isabelle@airdyne.com" - }, - { - "id": 6312, - "guid": "7d3a52a3-8b27-4b5a-ba6f-8b78fd71b3f5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Cramer", - "company": "Enlogia", - "phone": "875-540-2877", - "email": "bailey@enlogia.com" - }, - { - "id": 6313, - "guid": "cab5e70b-951f-447f-8622-1afa8adaaf71", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Angelina Oldman", - "company": "Titanigraf", - "phone": "860-562-3781", - "email": "angelina@titanigraf.com" - }, - { - "id": 6314, - "guid": "9e924a5d-2524-452f-9fe9-5d2e1bb1715e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Sherlock", - "company": "Netseco", - "phone": "859-455-3347", - "email": "isabelle@netseco.com" - }, - { - "id": 6315, - "guid": "8747da1b-ead6-4960-9d31-8f33bacd5277", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Sheldon", - "company": "Celgra", - "phone": "861-425-3780", - "email": "madelyn@celgra.com" - }, - { - "id": 6316, - "guid": "67f085a0-3d2d-4e9d-a83b-a8f3fe4002b1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Freeman", - "company": "Openserve", - "phone": "896-551-2407", - "email": "ariana@openserve.com" - }, - { - "id": 6317, - "guid": "f03054ad-a8fd-4aa0-a0ec-9db2f7583c90", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Sheldon", - "company": "Compuamerica", - "phone": "837-446-3931", - "email": "payton@compuamerica.com" - }, - { - "id": 6318, - "guid": "fac5faed-07b3-4328-acd8-90be6c584361", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maya Thornton", - "company": "Fibrotouch", - "phone": "850-550-2420", - "email": "maya@fibrotouch.com" - }, - { - "id": 6319, - "guid": "79949a6c-9a2b-4513-a414-0aaca1c48d3a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Andrea Gilson", - "company": "SysUSA", - "phone": "823-432-3734", - "email": "andrea@sysusa.com" - }, - { - "id": 6320, - "guid": "30a2fd9a-a238-487a-9454-31d2a20ab91e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Daniels", - "company": "eSteganoergy", - "phone": "807-587-2761", - "email": "andrea@esteganoergy.com" - }, - { - "id": 6321, - "guid": "e30b75c6-f38c-4a71-8505-c1493bf98231", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Oldridge", - "company": "Robotemplate", - "phone": "873-443-3739", - "email": "allison@robotemplate.com" - }, - { - "id": 6322, - "guid": "91089716-4ab7-4b2a-b304-50fe81384466", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madison WifKinson", - "company": "Celgra", - "phone": "884-441-2438", - "email": "madison@celgra.com" - }, - { - "id": 6323, - "guid": "1c186410-48f7-49e7-9925-431f2118d93b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Miers", - "company": "Titanigraf", - "phone": "821-473-3913", - "email": "mya@titanigraf.com" - }, - { - "id": 6324, - "guid": "36419eb4-0e9c-48a8-8850-a763c32d6f67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Oswald", - "company": "Indisco", - "phone": "844-418-3682", - "email": "chloe@indisco.com" - }, - { - "id": 6325, - "guid": "8d06e51f-450f-4724-8802-bc787ff55223", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Campbell", - "company": "Unologic", - "phone": "824-500-3873", - "email": "bailey@unologic.com" - }, - { - "id": 6326, - "guid": "be575c28-d761-43d8-9185-72f8d56b10b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Oswald", - "company": "Netseco", - "phone": "818-402-3703", - "email": "morgan@netseco.com" - }, - { - "id": 6327, - "guid": "d03bffc4-da21-48e2-89fe-53e40f5cd0ea", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Hailey", - "company": "Orthomedia", - "phone": "869-582-3805", - "email": "olivia@orthomedia.com" - }, - { - "id": 6328, - "guid": "2df6fe11-b7d3-4bdf-9be0-4d2839844e05", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Hancock", - "company": "Orthomedia", - "phone": "821-459-2624", - "email": "aubrey@orthomedia.com" - }, - { - "id": 6329, - "guid": "9527c6bd-6b4f-4541-9528-b2ccf197b2b9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Carter", - "company": "eEyetanic", - "phone": "806-417-3055", - "email": "emma@eeyetanic.com" - }, - { - "id": 6330, - "guid": "d17c6c31-7652-427e-8f1a-0a8757f5468c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Turner", - "company": "Systheon", - "phone": "845-479-2970", - "email": "victoria@systheon.com" - }, - { - "id": 6331, - "guid": "0a0260d8-34be-4233-a71b-b5171f0b2b04", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Freeman", - "company": "Nanobanc", - "phone": "818-506-2406", - "email": "angelina@nanobanc.com" - }, - { - "id": 6332, - "guid": "9a5ca585-137b-4cb6-b0b6-9101fc5ecde0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Cramer", - "company": "Dynarama", - "phone": "804-502-3855", - "email": "hailey@dynarama.com" - }, - { - "id": 6333, - "guid": "951f260f-e90b-4550-aba5-a6b564cfb787", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Charlson", - "company": "Robocomm", - "phone": "894-558-2783", - "email": "kylie@robocomm.com" - }, - { - "id": 6334, - "guid": "fc7abd16-e655-4a50-a0bb-326f761fda0b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Cook", - "company": "Unologic", - "phone": "827-434-2098", - "email": "serenity@unologic.com" - }, - { - "id": 6335, - "guid": "b9d3118b-c9b3-4cbf-bde1-25db267b9d14", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Hailey", - "company": "iEnland", - "phone": "842-548-2577", - "email": "olivia@ienland.com" - }, - { - "id": 6336, - "guid": "af0fc9b4-019c-47bd-99c2-5c98f7420eec", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Calhoun", - "company": "Anagraph", - "phone": "886-437-3304", - "email": "ella@anagraph.com" - }, - { - "id": 6337, - "guid": "49dd7ef4-3e97-4b99-b19f-0896a399bf51", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Galbraith", - "company": "Orthomedia", - "phone": "842-571-2217", - "email": "layla@orthomedia.com" - }, - { - "id": 6338, - "guid": "9e169813-f956-48a0-990c-b9d1f4c0f57c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jocelyn Calhoun", - "company": "Vencom", - "phone": "867-552-3959", - "email": "jocelyn@vencom.com" - }, - { - "id": 6339, - "guid": "013f6088-e864-4b52-9f7d-1e23f065fb75", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Hoggarth", - "company": "Xeicon", - "phone": "806-540-3323", - "email": "serenity@xeicon.com" - }, - { - "id": 6340, - "guid": "b2878728-1a90-41b1-ae47-ccb56419401d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Gibbs", - "company": "Qualserve", - "phone": "886-598-3657", - "email": "alexis@qualserve.com" - }, - { - "id": 6341, - "guid": "569f94f6-e50f-46ab-8a8c-f6a1d028f516", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Chloe Brickman", - "company": "Teknoplexon", - "phone": "821-471-2979", - "email": "chloe@teknoplexon.com" - }, - { - "id": 6342, - "guid": "79b3b61f-e2c6-4020-b0c8-013e0d591f4f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Thornton", - "company": "Videobanc", - "phone": "876-526-3992", - "email": "nevaeh@videobanc.com" - }, - { - "id": 6343, - "guid": "6ff31b0b-7277-49eb-bdd9-36c11d634b34", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Oliver", - "company": "Vencom", - "phone": "810-424-2547", - "email": "madeline@vencom.com" - }, - { - "id": 6344, - "guid": "34973d23-d954-40c2-9d6e-f7b8ee4c16a5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Gilbert", - "company": "Robotemplate", - "phone": "859-576-2070", - "email": "caroline@robotemplate.com" - }, - { - "id": 6345, - "guid": "9a0de865-a37f-485c-85d5-716636438a26", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Croftoon", - "company": "Dynarama", - "phone": "894-507-2663", - "email": "gabrielle@dynarama.com" - }, - { - "id": 6346, - "guid": "ef71dfc1-3cb7-498f-b5b1-508562583376", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Olivia Goodman", - "company": "Nanobanc", - "phone": "883-578-3683", - "email": "olivia@nanobanc.com" - }, - { - "id": 6347, - "guid": "f4692130-2c7b-477d-9f62-e804feaf1281", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Warren", - "company": "Aprama", - "phone": "846-546-3789", - "email": "isabella@aprama.com" - }, - { - "id": 6348, - "guid": "f6ac8ce9-ce94-4d10-8d34-c02187f80df3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Vance", - "company": "Steganoconiche", - "phone": "845-489-3225", - "email": "madison@steganoconiche.com" - }, - { - "id": 6349, - "guid": "5e4587c9-1c5f-4c20-8f34-28b19c8ec99f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Eva Gilson", - "company": "Qualserve", - "phone": "845-587-3839", - "email": "eva@qualserve.com" - }, - { - "id": 6350, - "guid": "680707e2-80eb-4f57-a355-e61d5696f16c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Timmons", - "company": "Robocomm", - "phone": "876-569-3067", - "email": "victoria@robocomm.com" - }, - { - "id": 6351, - "guid": "7519be3d-5446-49ed-ae56-d44ec9792b84", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Nelson", - "company": "Ventanium", - "phone": "804-551-3536", - "email": "mackenzie@ventanium.com" - }, - { - "id": 6352, - "guid": "1bdbac38-8592-42da-8819-bf534898c98f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Natalie Carrington", - "company": "iOptystix", - "phone": "895-582-2876", - "email": "natalie@ioptystix.com" - }, - { - "id": 6353, - "guid": "236027ce-9eb1-47e7-b762-0c263d502412", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Gate", - "company": "Fibroserve", - "phone": "895-426-2667", - "email": "valeria@fibroserve.com" - }, - { - "id": 6354, - "guid": "a606a419-61ad-4d4a-91d3-3e741a9509df", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Ward", - "company": "Orthosoft", - "phone": "815-550-2207", - "email": "isabelle@orthosoft.com" - }, - { - "id": 6355, - "guid": "d09ee8f5-56b9-4871-b650-579b0f7397d8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Oliver", - "company": "Tekcar", - "phone": "822-573-2541", - "email": "layla@tekcar.com" - }, - { - "id": 6356, - "guid": "7beb4f6f-7424-4a33-b3f1-8b7762ca1ec2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Hamphrey", - "company": "Netsystems", - "phone": "830-449-2591", - "email": "madison@netsystems.com" - }, - { - "id": 6357, - "guid": "c75eba82-1d28-4aef-81dd-4859ef071a00", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jasmine Chesterton", - "company": "Safeagra", - "phone": "849-451-2301", - "email": "jasmine@safeagra.com" - }, - { - "id": 6358, - "guid": "ba647e7f-ad9d-4e13-b246-0c0196c71883", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Carroll", - "company": "Jamrola", - "phone": "854-490-3969", - "email": "hannah@jamrola.com" - }, - { - "id": 6359, - "guid": "8bbfb226-03f3-4932-b7d3-edfb3e8e9c29", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Brooks", - "company": "Skydata", - "phone": "838-407-2547", - "email": "julia@skydata.com" - }, - { - "id": 6360, - "guid": "8d6d1a91-8fdd-43c3-9130-eec73ccbbb0c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Ogden", - "company": "Openserve", - "phone": "873-539-3139", - "email": "sydney@openserve.com" - }, - { - "id": 6361, - "guid": "4ef308d4-caae-4368-ad8d-159ec45cb061", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Genesis Wood", - "company": "Syssoft", - "phone": "835-442-2339", - "email": "genesis@syssoft.com" - }, - { - "id": 6362, - "guid": "45b22ee8-4cb6-4397-9b82-1e5a33eeab65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Victoria Abramson", - "company": "Technogra", - "phone": "836-544-2405", - "email": "victoria@technogra.com" - }, - { - "id": 6363, - "guid": "fec9456c-d563-491f-ad9e-518b772fdfda", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Goodman", - "company": "Infragraph", - "phone": "849-480-2196", - "email": "kylie@infragraph.com" - }, - { - "id": 6364, - "guid": "1615267f-bfb6-4d33-86c5-83242f6a2f01", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Thorndike", - "company": "Pacwest", - "phone": "883-594-2016", - "email": "jasmine@pacwest.com" - }, - { - "id": 6365, - "guid": "806b1e46-a753-468e-8165-1c945557f5ae", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Haig", - "company": "Syssoft", - "phone": "856-563-3178", - "email": "layla@syssoft.com" - }, - { - "id": 6366, - "guid": "25eab491-6bc3-4282-8c96-d1265607bb0a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Gerald", - "company": "Rapigrafix", - "phone": "842-466-2084", - "email": "elizabeth@rapigrafix.com" - }, - { - "id": 6367, - "guid": "681201d3-f459-493f-932f-be6ff01db632", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Creighton", - "company": "Pericenta", - "phone": "837-527-2086", - "email": "makayla@pericenta.com" - }, - { - "id": 6368, - "guid": "087ca51d-db22-47ca-ac55-a113700d0e99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Croftoon", - "company": "Techtron", - "phone": "885-541-2008", - "email": "mariah@techtron.com" - }, - { - "id": 6369, - "guid": "47331938-93ff-4b6b-bd34-9885b829cb2f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Carrington", - "company": "Jamrola", - "phone": "895-472-2598", - "email": "allison@jamrola.com" - }, - { - "id": 6370, - "guid": "8fa2cfd0-4d06-4e2b-98b1-c9853d81231d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Nash", - "company": "Syssoft", - "phone": "897-594-2897", - "email": "alexis@syssoft.com" - }, - { - "id": 6371, - "guid": "0c97c2b6-9778-4eac-a51e-d02de7b56d43", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Carroll", - "company": "Polytheon", - "phone": "813-499-2990", - "email": "addison@polytheon.com" - }, - { - "id": 6372, - "guid": "d4594aef-f0d3-4317-b692-b0c741e97ab0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Carter", - "company": "Airdyne", - "phone": "810-411-2424", - "email": "brooke@airdyne.com" - }, - { - "id": 6373, - "guid": "1fa78acb-b485-4051-8709-851539798322", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Oswald", - "company": "Cryptotegrity", - "phone": "866-419-2047", - "email": "kaitlyn@cryptotegrity.com" - }, - { - "id": 6374, - "guid": "0bf9414e-cb97-43fb-bbcf-2e95d14c5618", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Gardner", - "company": "Sontopia", - "phone": "890-534-3776", - "email": "allison@sontopia.com" - }, - { - "id": 6375, - "guid": "d5486465-6f0e-4fff-b7c4-ae9d27c0bdd1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Miller", - "company": "Inridium", - "phone": "845-537-3828", - "email": "gianna@inridium.com" - }, - { - "id": 6376, - "guid": "6671e069-f68a-4753-a316-3f49579e1042", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Hodges", - "company": "Aprama", - "phone": "898-542-2206", - "email": "audrey@aprama.com" - }, - { - "id": 6377, - "guid": "8b3450db-da43-40dd-b873-7c817115002c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Miller", - "company": "Venconix", - "phone": "832-475-3260", - "email": "zoe@venconix.com" - }, - { - "id": 6378, - "guid": "bd2eb6f0-caaa-4981-99d1-0bc028a7f36c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Gill", - "company": "Venconix", - "phone": "862-450-3772", - "email": "eva@venconix.com" - }, - { - "id": 6379, - "guid": "77e87c45-a9e4-4631-b02c-3a4afa7d52ec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabelle Sheldon", - "company": "iSkyvaco", - "phone": "855-509-2971", - "email": "isabelle@iskyvaco.com" - }, - { - "id": 6380, - "guid": "8a47f65d-ce8f-42a6-b532-e8991add0a53", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Murphy", - "company": "Nanobanc", - "phone": "898-418-3523", - "email": "bailey@nanobanc.com" - }, - { - "id": 6381, - "guid": "b87d00ad-e6a4-46dc-a1e4-ae2c402d0039", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoey Ogden", - "company": "Inridium", - "phone": "831-522-3653", - "email": "zoey@inridium.com" - }, - { - "id": 6382, - "guid": "575799ad-87f1-43f7-b192-4007c974ce41", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Vaughan", - "company": "Truegate", - "phone": "816-466-3541", - "email": "nevaeh@truegate.com" - }, - { - "id": 6383, - "guid": "3d60df60-6105-4296-95c4-b0f5e9bdffd3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Thorndike", - "company": "Aluco", - "phone": "871-472-3796", - "email": "kayla@aluco.com" - }, - { - "id": 6384, - "guid": "b5bb0ff2-cfc4-46b7-b999-d743460db3d5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Wallace", - "company": "Thermotomic", - "phone": "817-533-2705", - "email": "alexa@thermotomic.com" - }, - { - "id": 6385, - "guid": "9c027ec2-d19b-4e40-92ef-0bf73d0e2e5d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Nash", - "company": "Proline", - "phone": "881-466-3285", - "email": "kylie@proline.com" - }, - { - "id": 6386, - "guid": "f72d8311-169a-4e62-9f4d-ee1b6fe5f88a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Harrison", - "company": "Quintegrity", - "phone": "880-491-3976", - "email": "isabella@quintegrity.com" - }, - { - "id": 6387, - "guid": "15a41d86-b523-4b94-801b-0875c1e5a6af", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Oldridge", - "company": "Conrama", - "phone": "848-425-3967", - "email": "morgan@conrama.com" - }, - { - "id": 6388, - "guid": "083a4da8-f1e8-41e0-a38e-a3978742a678", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Olivia Hailey", - "company": "OpKeycomm", - "phone": "849-463-3724", - "email": "olivia@opkeycomm.com" - }, - { - "id": 6389, - "guid": "db19d34a-f520-4233-a7f5-5127fd98db22", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Hodges", - "company": "Westtomik", - "phone": "871-426-3427", - "email": "abigail@westtomik.com" - }, - { - "id": 6390, - "guid": "1f6a42df-d2b3-4e9f-baed-6177b82a9df0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Waller", - "company": "iEnland", - "phone": "807-436-3658", - "email": "nevaeh@ienland.com" - }, - { - "id": 6391, - "guid": "ad1e01cf-4f6c-4455-b308-e68252712abd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Michaelson", - "company": "Conrama", - "phone": "857-544-2836", - "email": "nevaeh@conrama.com" - }, - { - "id": 6392, - "guid": "019bf392-7ce1-44ee-8926-f0ace0f0b5d3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooke Oswald", - "company": "Ameritron", - "phone": "892-560-2124", - "email": "brooke@ameritron.com" - }, - { - "id": 6393, - "guid": "400dfbf1-edba-46f4-a7dc-85efb1ee89c9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Hailey", - "company": "iEnland", - "phone": "855-527-2244", - "email": "aubrey@ienland.com" - }, - { - "id": 6394, - "guid": "091f2e82-65a8-4f1d-85e3-b456bd6f6e40", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Neal", - "company": "Rapigrafix", - "phone": "846-482-3196", - "email": "arianna@rapigrafix.com" - }, - { - "id": 6395, - "guid": "07c5a2bc-b4d4-4ba2-aa0d-9758d2f9227a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Brianna Hardman", - "company": "Unologic", - "phone": "858-410-2610", - "email": "brianna@unologic.com" - }, - { - "id": 6396, - "guid": "09306d24-85ff-4c0c-bbcd-e26e8cb6e9ca", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Rachel Bush", - "company": "iSkyvaco", - "phone": "855-448-3199", - "email": "rachel@iskyvaco.com" - }, - { - "id": 6397, - "guid": "1b3b5c2c-d7f1-4eee-a96c-3b6f9b2cafe6", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Webster", - "company": "Westgate", - "phone": "801-535-2226", - "email": "molly@westgate.com" - }, - { - "id": 6398, - "guid": "c08d18c5-7f49-4b33-b923-a00b9416f0d5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Mercer", - "company": "Generola", - "phone": "875-549-3698", - "email": "claire@generola.com" - }, - { - "id": 6399, - "guid": "c95d5dfe-a49a-41a6-a3e3-fea790c37767", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hannah Fisher", - "company": "US Omnigraphik", - "phone": "889-560-3843", - "email": "hannah@us omnigraphik.com" - }, - { - "id": 6400, - "guid": "ca99fdfb-c641-49e0-bf42-3a6b53d42e0d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Turner", - "company": "Superscope", - "phone": "881-524-3144", - "email": "mackenzie@superscope.com" - }, - { - "id": 6401, - "guid": "d1b4d931-82b0-4b7e-a22c-f1def44e2eca", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophia Carrington", - "company": "Fibrotopia", - "phone": "874-416-3172", - "email": "sophia@fibrotopia.com" - }, - { - "id": 6402, - "guid": "00894d52-6c05-4fb0-9fc0-2dae2143db83", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Gate", - "company": "Ameritron", - "phone": "898-402-3454", - "email": "sophie@ameritron.com" - }, - { - "id": 6403, - "guid": "c1c4ef82-9171-4cb7-979f-50cd9a98df22", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Ford", - "company": "Raylog", - "phone": "854-474-3868", - "email": "ava@raylog.com" - }, - { - "id": 6404, - "guid": "f2e15fc3-192c-4f77-84f9-60f5a441d7c9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Arianna Vance", - "company": "Techtron", - "phone": "868-462-3600", - "email": "arianna@techtron.com" - }, - { - "id": 6405, - "guid": "5c1ac962-49fb-479a-bcab-c114d4bd82ed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Serenity Abramson", - "company": "RoboAerlogix", - "phone": "896-511-3620", - "email": "serenity@roboaerlogix.com" - }, - { - "id": 6406, - "guid": "52e52a15-7f94-48d9-9815-702702229a81", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Croftoon", - "company": "Fibrotouch", - "phone": "878-505-3624", - "email": "riley@fibrotouch.com" - }, - { - "id": 6407, - "guid": "4c184d0f-cc2b-4c81-81e1-1b445e17a294", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Gate", - "company": "Genland", - "phone": "873-589-2895", - "email": "maya@genland.com" - }, - { - "id": 6408, - "guid": "43d57411-0290-4569-9782-7fd318b2cf96", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Young", - "company": "Titanigraf", - "phone": "801-531-2405", - "email": "ashley@titanigraf.com" - }, - { - "id": 6409, - "guid": "b06b7058-5456-4bcd-9a84-7bb184b5cc9d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth Galbraith", - "company": "Teknoplexon", - "phone": "808-585-3349", - "email": "elizabeth@teknoplexon.com" - }, - { - "id": 6410, - "guid": "fe7f5bbf-edee-451c-a30f-a9c95b978cce", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Haig", - "company": "Pericenta", - "phone": "802-480-2455", - "email": "aubrey@pericenta.com" - }, - { - "id": 6411, - "guid": "6366ee08-fbca-4500-94bf-56208a9d3b21", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Hardman", - "company": "Interliant", - "phone": "878-555-3435", - "email": "zoey@interliant.com" - }, - { - "id": 6412, - "guid": "2370f011-1ee0-4587-b65c-fb941d5e1d6e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Vance", - "company": "Generola", - "phone": "842-561-2698", - "email": "madison@generola.com" - }, - { - "id": 6413, - "guid": "7d6a0c76-0377-44a4-83fb-9cf648d546df", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Turner", - "company": "US Omnigraphik", - "phone": "891-435-3095", - "email": "abigail@us omnigraphik.com" - }, - { - "id": 6414, - "guid": "c2940c20-d7d0-452d-9bea-a750809cd9b4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoey Calhoun", - "company": "Unologic", - "phone": "808-457-2830", - "email": "zoey@unologic.com" - }, - { - "id": 6415, - "guid": "82fe3d9a-ccc8-4296-9a76-4624d46cb29f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe White", - "company": "Pericenta", - "phone": "835-549-2580", - "email": "zoe@pericenta.com" - }, - { - "id": 6416, - "guid": "d8228a3d-65a0-4219-9c8b-41eeca1c7761", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Adamson", - "company": "Multitiqua", - "phone": "882-430-2796", - "email": "layla@multitiqua.com" - }, - { - "id": 6417, - "guid": "71e3cd96-bd57-4bb8-9f14-5948e4dc8f95", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Maria Calhoun", - "company": "Videobanc", - "phone": "898-474-3277", - "email": "maria@videobanc.com" - }, - { - "id": 6418, - "guid": "a89ff524-c5e3-4538-9b27-adb469b353e4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Bella Cook", - "company": "Unologic", - "phone": "887-439-2248", - "email": "bella@unologic.com" - }, - { - "id": 6419, - "guid": "5580fef3-2931-4383-ac99-cccd3269f711", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Wayne", - "company": "iEnland", - "phone": "821-414-3414", - "email": "alyssa@ienland.com" - }, - { - "id": 6420, - "guid": "4210c19b-9a30-415c-8c5a-bd39ffe1a1db", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Brooks", - "company": "Tekcar", - "phone": "895-472-2920", - "email": "avery@tekcar.com" - }, - { - "id": 6421, - "guid": "fb68ebb2-e864-4e33-9ceb-c03fff0ea520", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ariana Brooks", - "company": "Anagraph", - "phone": "837-501-3195", - "email": "ariana@anagraph.com" - }, - { - "id": 6422, - "guid": "670f8c28-7ca4-40ba-84a6-77329a1a2f0f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Smith", - "company": "Raylog", - "phone": "820-472-3844", - "email": "ashley@raylog.com" - }, - { - "id": 6423, - "guid": "a2cb247d-4336-4abb-8bf0-bf2524257036", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Day", - "company": "Proline", - "phone": "811-522-3966", - "email": "faith@proline.com" - }, - { - "id": 6424, - "guid": "ce50efcb-a742-44b0-bf09-cfb1e923d1bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Layla Fisher", - "company": "Tekcar", - "phone": "850-454-3282", - "email": "layla@tekcar.com" - }, - { - "id": 6425, - "guid": "330fa75d-5e97-4bcc-abde-8a6ede318b9c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Higgins", - "company": "Genland", - "phone": "875-493-2757", - "email": "jasmine@genland.com" - }, - { - "id": 6426, - "guid": "dec9c1f6-3e07-4ef7-8d5d-3976611982da", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kimberly Nash", - "company": "Openserve", - "phone": "830-500-3402", - "email": "kimberly@openserve.com" - }, - { - "id": 6427, - "guid": "1aa9907f-0b53-4da6-b54f-7705b776352f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Calhoun", - "company": "Rapigrafix", - "phone": "824-517-2019", - "email": "angelina@rapigrafix.com" - }, - { - "id": 6428, - "guid": "817e138f-d0c8-4675-a3af-15b8a02e8d88", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Wesley", - "company": "Jamrola", - "phone": "822-433-3982", - "email": "sophia@jamrola.com" - }, - { - "id": 6429, - "guid": "6321012e-dc3f-4a28-9c04-651df0f111a0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Thomson", - "company": "Titanigraf", - "phone": "801-490-2242", - "email": "brooke@titanigraf.com" - }, - { - "id": 6430, - "guid": "20952ccb-d42f-4367-a998-acc4b43d7c44", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Gate", - "company": "Ameritron", - "phone": "834-416-2577", - "email": "gianna@ameritron.com" - }, - { - "id": 6431, - "guid": "e536c94f-93df-41e2-9ca8-3623dce416c8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Chandter", - "company": "Textiqua", - "phone": "807-419-3030", - "email": "lillian@textiqua.com" - }, - { - "id": 6432, - "guid": "fff63ac6-77b6-47cc-be3c-e50d20e22b93", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Goldman", - "company": "Cryptotemplate", - "phone": "898-480-3509", - "email": "mackenzie@cryptotemplate.com" - }, - { - "id": 6433, - "guid": "eb791093-9705-4de6-9cae-50e08f191099", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Evelyn Otis", - "company": "Steganoconiche", - "phone": "868-416-3037", - "email": "evelyn@steganoconiche.com" - }, - { - "id": 6434, - "guid": "9623ff5c-7966-4fa3-9860-c4f365571dc4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Aubrey Oldridge", - "company": "Venconix", - "phone": "809-473-3978", - "email": "aubrey@venconix.com" - }, - { - "id": 6435, - "guid": "1d0f8aa8-9640-43a0-81a5-07804c265411", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Daniels", - "company": "InfoAirway", - "phone": "807-550-3988", - "email": "makayla@infoairway.com" - }, - { - "id": 6436, - "guid": "dce9b46e-836c-4c5f-b4dc-96749016a737", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Charlson", - "company": "SysUSA", - "phone": "850-424-3765", - "email": "zoey@sysusa.com" - }, - { - "id": 6437, - "guid": "f2977503-9381-4c48-9903-bd81dd18aebd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Abramson", - "company": "Openserve", - "phone": "870-541-3196", - "email": "jasmine@openserve.com" - }, - { - "id": 6438, - "guid": "40de42a2-1c05-4a60-9f68-5b5851575e56", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Mercer", - "company": "Qualserve", - "phone": "839-524-2168", - "email": "sophia@qualserve.com" - }, - { - "id": 6439, - "guid": "c823f60e-9d8c-4c80-b49a-a714a4c3b770", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Wood", - "company": "Steganoconiche", - "phone": "886-527-2381", - "email": "sydney@steganoconiche.com" - }, - { - "id": 6440, - "guid": "147c06fb-d930-436c-8346-1ab8a5c72d40", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Bush", - "company": "Teraserv", - "phone": "859-530-3948", - "email": "autumn@teraserv.com" - }, - { - "id": 6441, - "guid": "afd43915-c9f7-4346-9ffa-3a1c07ef874e", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Allison WifKinson", - "company": "Mescaridic", - "phone": "898-464-3014", - "email": "allison@mescaridic.com" - }, - { - "id": 6442, - "guid": "a4de637e-27c2-4e35-a43b-ff79f284c964", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Molligan", - "company": "Ventanium", - "phone": "880-525-2454", - "email": "jocelyn@ventanium.com" - }, - { - "id": 6443, - "guid": "db1b90d5-3e9a-4af1-93ee-83a02b2da0c4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Olivia Ogden", - "company": "Netsystems", - "phone": "806-567-2394", - "email": "olivia@netsystems.com" - }, - { - "id": 6444, - "guid": "a79b35fc-aee7-4872-8e7d-29479cd10713", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sydney Thorndike", - "company": "Cryptotegrity", - "phone": "874-536-2647", - "email": "sydney@cryptotegrity.com" - }, - { - "id": 6445, - "guid": "03ed6502-37e7-4ff1-bb70-28370de44e09", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Riley Nathan", - "company": "Safeagra", - "phone": "895-580-3818", - "email": "riley@safeagra.com" - }, - { - "id": 6446, - "guid": "588f7030-dab9-46a5-b115-817bb52c1e4a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Angelina Freeman", - "company": "Anaframe", - "phone": "856-575-3119", - "email": "angelina@anaframe.com" - }, - { - "id": 6447, - "guid": "12486d80-1507-43b0-a3d3-b14777fc5f6b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Thorndike", - "company": "Entcast", - "phone": "881-472-3648", - "email": "molly@entcast.com" - }, - { - "id": 6448, - "guid": "095eaa11-f7e8-4161-b760-568952f61191", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Calhoun", - "company": "Fibrotouch", - "phone": "852-446-2495", - "email": "kaylee@fibrotouch.com" - }, - { - "id": 6449, - "guid": "c0893cb0-bfca-4d3c-b902-53d1a6896986", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Morrison", - "company": "Multitiqua", - "phone": "804-538-2814", - "email": "mia@multitiqua.com" - }, - { - "id": 6450, - "guid": "82e5c259-a3b6-4f9e-9729-c5e07d464172", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Timmons", - "company": "Navivacs", - "phone": "810-426-3689", - "email": "emily@navivacs.com" - }, - { - "id": 6451, - "guid": "9fea99b1-4bdd-4d6f-abf8-f29b1f4211f4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Crossman", - "company": "Unconix", - "phone": "884-593-3099", - "email": "gabriella@unconix.com" - }, - { - "id": 6452, - "guid": "91d1c51b-ee78-4da1-a115-8a3f24e0fc67", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Hardman", - "company": "Fibrotopia", - "phone": "885-569-3987", - "email": "bailey@fibrotopia.com" - }, - { - "id": 6453, - "guid": "115c1c21-1e4b-4f40-a196-a5ac17e0b662", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Gibbs", - "company": "Technogra", - "phone": "887-408-2687", - "email": "allison@technogra.com" - }, - { - "id": 6454, - "guid": "2180909d-2d58-4b2d-a1da-eab48fce3902", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Hardman", - "company": "Entcast", - "phone": "808-427-2125", - "email": "claire@entcast.com" - }, - { - "id": 6455, - "guid": "632cd7d2-1b2e-4b7e-94bc-252110ada0d2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla White", - "company": "Enlogia", - "phone": "858-405-2920", - "email": "layla@enlogia.com" - }, - { - "id": 6456, - "guid": "f6a315b5-f995-4c54-b4ee-78993e16ed58", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jocelyn Goodman", - "company": "Transtouch", - "phone": "844-457-2239", - "email": "jocelyn@transtouch.com" - }, - { - "id": 6457, - "guid": "ad831159-8ea3-4f0a-8be1-0cfd1093828b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooklyn Carey", - "company": "Nanobanc", - "phone": "876-562-2613", - "email": "brooklyn@nanobanc.com" - }, - { - "id": 6458, - "guid": "8923651c-afe2-41ea-bf23-bcb001a26cfc", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jessica Abramson", - "company": "Netsystems", - "phone": "837-420-3636", - "email": "jessica@netsystems.com" - }, - { - "id": 6459, - "guid": "b1806aca-5859-4374-968f-66d99a7525a2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Ford", - "company": "Fibrotouch", - "phone": "812-473-2040", - "email": "andrea@fibrotouch.com" - }, - { - "id": 6460, - "guid": "33ed9d91-18af-4389-8de9-d365e469d607", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Freeman", - "company": "Celgra", - "phone": "894-419-3867", - "email": "maria@celgra.com" - }, - { - "id": 6461, - "guid": "cf92eebc-4215-4702-809f-12e1ef1b88dd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Taylor Turner", - "company": "Multitiqua", - "phone": "873-486-2609", - "email": "taylor@multitiqua.com" - }, - { - "id": 6462, - "guid": "c0ce137a-78de-4de7-a387-51aed34dace0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Evelyn Osborne", - "company": "Pericenta", - "phone": "837-429-3592", - "email": "evelyn@pericenta.com" - }, - { - "id": 6463, - "guid": "6472fdda-76e8-42e4-8570-b477737d5bd1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Vance", - "company": "Fibroserve", - "phone": "817-570-3675", - "email": "mariah@fibroserve.com" - }, - { - "id": 6464, - "guid": "aa83248a-da10-4f0e-aa32-67816077a5a3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Khloe Oldman", - "company": "eEyetanic", - "phone": "851-466-2209", - "email": "khloe@eeyetanic.com" - }, - { - "id": 6465, - "guid": "628080a2-731c-4027-8e37-4a3694c89968", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Carroll", - "company": "Anagraph", - "phone": "813-523-2300", - "email": "makayla@anagraph.com" - }, - { - "id": 6466, - "guid": "6457febf-ccc8-4a15-94de-5b2d0320b903", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Crossman", - "company": "Orthosoft", - "phone": "803-566-2928", - "email": "gabrielle@orthosoft.com" - }, - { - "id": 6467, - "guid": "1443b1f8-9d71-454b-b748-1b81c6f09bae", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Freeman", - "company": "US Omnigraphik", - "phone": "802-510-2979", - "email": "hannah@us omnigraphik.com" - }, - { - "id": 6468, - "guid": "9a92b541-84e5-4608-893f-e411170443f3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Gilbert", - "company": "Conotomics", - "phone": "838-505-2463", - "email": "valeria@conotomics.com" - }, - { - "id": 6469, - "guid": "625da167-2e31-40ba-a2da-4576a6aba62a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke WifKinson", - "company": "Techtron", - "phone": "834-517-3134", - "email": "brooke@techtron.com" - }, - { - "id": 6470, - "guid": "3b49d9ed-8587-4630-9e0f-084796f474f0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Rachel Nash", - "company": "US Infratouch", - "phone": "809-421-2345", - "email": "rachel@us infratouch.com" - }, - { - "id": 6471, - "guid": "34d9e968-121f-4af6-b984-e64f41636a7e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Nash", - "company": "Teratopia", - "phone": "884-559-2412", - "email": "jasmine@teratopia.com" - }, - { - "id": 6472, - "guid": "3f82c110-71b2-4b75-b729-6c6fd7cade42", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Miers", - "company": "Fibroserve", - "phone": "816-574-3185", - "email": "kaitlyn@fibroserve.com" - }, - { - "id": 6473, - "guid": "9af2049f-f0aa-4647-a496-5a61cdfac970", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Destiny Morrison", - "company": "Conrama", - "phone": "825-453-2876", - "email": "destiny@conrama.com" - }, - { - "id": 6474, - "guid": "876c43cf-c0a1-47ed-a44d-f131fca4e0fa", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Oldman", - "company": "OpKeycomm", - "phone": "839-552-2481", - "email": "brooklyn@opkeycomm.com" - }, - { - "id": 6475, - "guid": "6e630b6e-e935-4e22-84a1-7719087d992d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Carter", - "company": "Unologic", - "phone": "832-462-3739", - "email": "bailey@unologic.com" - }, - { - "id": 6476, - "guid": "97b00470-04f2-4f01-b6ee-6217ebf3b405", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabrielle Osborne", - "company": "Titanigraf", - "phone": "859-444-2094", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 6477, - "guid": "ae8553a7-934d-4ee4-bfff-7a51050449c6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Wesley", - "company": "Robotemplate", - "phone": "870-457-2239", - "email": "allison@robotemplate.com" - }, - { - "id": 6478, - "guid": "6e28d518-e2b3-43cb-819b-7c28f0c46934", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Cook", - "company": "Enlogia", - "phone": "852-490-3043", - "email": "amelia@enlogia.com" - }, - { - "id": 6479, - "guid": "ec41e364-f0a0-4929-ada3-add6749eb4f0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Goldman", - "company": "Fibroserve", - "phone": "889-576-2694", - "email": "mariah@fibroserve.com" - }, - { - "id": 6480, - "guid": "2144af39-5606-4a24-a6a9-d1da2d627707", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Wainwright", - "company": "Mescatron", - "phone": "861-485-2316", - "email": "ashley@mescatron.com" - }, - { - "id": 6481, - "guid": "68c4eeec-4458-4669-a89d-da5005308d0c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Wesley", - "company": "Westtomik", - "phone": "809-451-3084", - "email": "sydney@westtomik.com" - }, - { - "id": 6482, - "guid": "9f68e353-bea3-4697-8afd-5f6b36cad058", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Chapman", - "company": "Textiqua", - "phone": "815-521-2983", - "email": "kimberly@textiqua.com" - }, - { - "id": 6483, - "guid": "0bf359f9-7e78-4fe3-84d3-4c2b89da00e5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Day", - "company": "Jamrola", - "phone": "809-494-3937", - "email": "zoey@jamrola.com" - }, - { - "id": 6484, - "guid": "0c6f1384-91e1-4054-b320-73f080382ce7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Anna Wayne", - "company": "Compuamerica", - "phone": "805-480-2770", - "email": "anna@compuamerica.com" - }, - { - "id": 6485, - "guid": "1e5c474f-2ac3-4dc7-b35f-a435cc996962", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Higgins", - "company": "Teknoplexon", - "phone": "871-408-3287", - "email": "alexis@teknoplexon.com" - }, - { - "id": 6486, - "guid": "26f7550f-8150-4c4e-9287-d196b6f32511", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kimberly Gilson", - "company": "Aprama", - "phone": "859-592-2127", - "email": "kimberly@aprama.com" - }, - { - "id": 6487, - "guid": "0a8167f2-abae-4170-a91e-a323e40ac70f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Watson", - "company": "Safeagra", - "phone": "899-580-2398", - "email": "faith@safeagra.com" - }, - { - "id": 6488, - "guid": "65478d03-cd74-4e0c-8e83-a1cf01507836", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Sheldon", - "company": "Fibrotouch", - "phone": "861-448-2452", - "email": "mariah@fibrotouch.com" - }, - { - "id": 6489, - "guid": "c847b4e2-58af-49de-987b-6afdececf69e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Hodges", - "company": "Keytheon", - "phone": "856-435-2231", - "email": "savannah@keytheon.com" - }, - { - "id": 6490, - "guid": "2ffdf62e-0fb9-42a4-b9d3-87208cd25d2a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Wesley", - "company": "OpKeycomm", - "phone": "859-553-3460", - "email": "audrey@opkeycomm.com" - }, - { - "id": 6491, - "guid": "7b0c2058-45b0-4380-8c05-6ed7626ffb0e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Fulton", - "company": "Safetrust", - "phone": "826-419-2936", - "email": "mackenzie@safetrust.com" - }, - { - "id": 6492, - "guid": "c6ed66d3-995b-4fbf-895e-a3e9a1e425bf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Audrey Gardner", - "company": "US Infratouch", - "phone": "813-564-3766", - "email": "audrey@us infratouch.com" - }, - { - "id": 6493, - "guid": "5ac304d8-458e-49f9-a0b8-7a2f739ba81a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Morgan Harrison", - "company": "Keytheon", - "phone": "863-539-2277", - "email": "morgan@keytheon.com" - }, - { - "id": 6494, - "guid": "4c35f002-ddc8-4d72-8076-e649f7d6d51f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Carter", - "company": "Safeagra", - "phone": "881-564-3545", - "email": "emily@safeagra.com" - }, - { - "id": 6495, - "guid": "fcdb9882-7e22-4a1d-a7f0-6bba8d23c550", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ariana Carroll", - "company": "Teraserv", - "phone": "867-499-3381", - "email": "ariana@teraserv.com" - }, - { - "id": 6496, - "guid": "adbd6235-30e6-42f5-a7ed-138d2a5ed7de", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Andrea Carter", - "company": "Robocomm", - "phone": "868-499-3900", - "email": "andrea@robocomm.com" - }, - { - "id": 6497, - "guid": "5a0eb72d-e2d0-4a5c-9eac-82d35f9158dc", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Natalie Winter", - "company": "Gigaura", - "phone": "826-584-3365", - "email": "natalie@gigaura.com" - }, - { - "id": 6498, - "guid": "59c15970-989c-46fe-b225-cdcffd0bc70c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophia Carrington", - "company": "Aprama", - "phone": "840-562-3114", - "email": "sophia@aprama.com" - }, - { - "id": 6499, - "guid": "13564335-b331-4ec0-8969-a7fd431570d9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Adamson", - "company": "Orthosoft", - "phone": "820-428-3808", - "email": "kimberly@orthosoft.com" - }, - { - "id": 6500, - "guid": "6e1df132-dd49-48a1-8fdc-26ce705e1204", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Gill", - "company": "Teratopia", - "phone": "889-514-3210", - "email": "katelyn@teratopia.com" - }, - { - "id": 6501, - "guid": "bacf618a-dd13-48f8-941f-b1c962e20663", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Caroline Hodges", - "company": "Westtomik", - "phone": "816-424-2481", - "email": "caroline@westtomik.com" - }, - { - "id": 6502, - "guid": "d918b36f-6e8d-4404-a513-be6339cef2cb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Ogden", - "company": "Transtouch", - "phone": "895-559-3618", - "email": "isabelle@transtouch.com" - }, - { - "id": 6503, - "guid": "ca56d284-beca-4126-ae72-b664e95c7b47", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Hailey", - "company": "Raylog", - "phone": "808-545-3410", - "email": "lauren@raylog.com" - }, - { - "id": 6504, - "guid": "b1415a14-8bb9-4898-bf1e-6e77a8943391", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Wallace", - "company": "Nanobanc", - "phone": "883-582-3525", - "email": "chloe@nanobanc.com" - }, - { - "id": 6505, - "guid": "4b54c3df-e8af-4e58-b3c3-4ff09ac1f203", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexis Ford", - "company": "Systheon", - "phone": "872-432-2658", - "email": "alexis@systheon.com" - }, - { - "id": 6506, - "guid": "08e05f35-8ec4-4d07-9d73-c0d524c5c468", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Amelia Sheldon", - "company": "Hypervaco", - "phone": "800-413-2637", - "email": "amelia@hypervaco.com" - }, - { - "id": 6507, - "guid": "55d8e601-7570-47ee-9b67-acf406e39d4b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Hardman", - "company": "Vencom", - "phone": "897-594-2212", - "email": "taylor@vencom.com" - }, - { - "id": 6508, - "guid": "57341da0-9408-4a9a-9d72-1f24f2925185", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Ogden", - "company": "Tekcar", - "phone": "880-436-2612", - "email": "brooke@tekcar.com" - }, - { - "id": 6509, - "guid": "7555499f-b16b-444c-839d-52000c92a5fa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Elizabeth Fisher", - "company": "Aluco", - "phone": "808-407-3516", - "email": "elizabeth@aluco.com" - }, - { - "id": 6510, - "guid": "1128470c-bc05-4a92-b856-fa4da7f46894", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Waller", - "company": "Mescaridic", - "phone": "806-504-3257", - "email": "ariana@mescaridic.com" - }, - { - "id": 6511, - "guid": "d615d9b8-3527-457d-8151-e8adf292f4ef", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Julia Gibbs", - "company": "Netseco", - "phone": "849-450-2155", - "email": "julia@netseco.com" - }, - { - "id": 6512, - "guid": "0e93736c-0f12-4d0b-a2b6-4f88b2cfbe2a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Chesterton", - "company": "Airdyne", - "phone": "852-543-3025", - "email": "peyton@airdyne.com" - }, - { - "id": 6513, - "guid": "6bb3cfb1-445c-4f99-8d83-f2863bea105b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sarah Smith", - "company": "Fibrotopia", - "phone": "894-454-3300", - "email": "sarah@fibrotopia.com" - }, - { - "id": 6514, - "guid": "331831c6-1b3c-40ac-8134-e4e622a1b957", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Gerald", - "company": "iMedconik", - "phone": "847-495-2312", - "email": "victoria@imedconik.com" - }, - { - "id": 6515, - "guid": "c389e3a9-74da-4a26-bb8c-d2305832b4c8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Watson", - "company": "Syssoft", - "phone": "823-542-2507", - "email": "layla@syssoft.com" - }, - { - "id": 6516, - "guid": "7db0ff94-10ea-4e01-bf66-7f9ea472dcfc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Smith", - "company": "Enlogia", - "phone": "846-496-3058", - "email": "kylie@enlogia.com" - }, - { - "id": 6517, - "guid": "d24b30d8-b9cf-4055-ab9d-fe4ac969aed5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Hodges", - "company": "Celgra", - "phone": "850-433-2296", - "email": "amelia@celgra.com" - }, - { - "id": 6518, - "guid": "46fa216a-3f7b-4366-9fa5-f5fe8cb978b0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brianna Gibbs", - "company": "SysVenamerica", - "phone": "829-466-2481", - "email": "brianna@sysvenamerica.com" - }, - { - "id": 6519, - "guid": "47691d9a-c9ff-4d2c-a6d6-aa7d819dda81", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Nelson", - "company": "RoboAerlogix", - "phone": "838-418-3251", - "email": "brooke@roboaerlogix.com" - }, - { - "id": 6520, - "guid": "2fae51a7-9e83-4d90-98a6-4238a23cfc61", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Morrison", - "company": "Allnet", - "phone": "863-489-3190", - "email": "ariana@allnet.com" - }, - { - "id": 6521, - "guid": "f70e390d-4028-413d-b712-42ab4657c71b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Cook", - "company": "Westmedia", - "phone": "834-564-2580", - "email": "elizabeth@westmedia.com" - }, - { - "id": 6522, - "guid": "ea1297e5-4c88-49e4-a335-fab002949480", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Waller", - "company": "Generola", - "phone": "893-531-2462", - "email": "ava@generola.com" - }, - { - "id": 6523, - "guid": "a5b8c9bb-27dc-4eff-8640-289eaf669d77", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Stanley", - "company": "Cryptotemplate", - "phone": "853-586-3434", - "email": "trinity@cryptotemplate.com" - }, - { - "id": 6524, - "guid": "a9ee9b83-c7d6-48a3-96db-4c046dfc1af6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Sherlock", - "company": "Transtouch", - "phone": "892-531-3412", - "email": "serenity@transtouch.com" - }, - { - "id": 6525, - "guid": "be57eeeb-cdcf-49e7-9760-d67fd920f7a4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn White", - "company": "Openserve", - "phone": "881-422-2849", - "email": "katelyn@openserve.com" - }, - { - "id": 6526, - "guid": "5ce6aa37-52b6-435b-83de-06b30b739eda", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Julia Vance", - "company": "Hypervaco", - "phone": "845-530-3796", - "email": "julia@hypervaco.com" - }, - { - "id": 6527, - "guid": "2cd14936-6bcf-403a-97dc-004729918767", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Chandter", - "company": "Syssoft", - "phone": "820-418-3890", - "email": "madeline@syssoft.com" - }, - { - "id": 6528, - "guid": "3d9b3f07-d105-446b-bf09-6f1738bf7e00", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Faith Fulton", - "company": "iSkyvaco", - "phone": "847-426-2098", - "email": "faith@iskyvaco.com" - }, - { - "id": 6529, - "guid": "266ee76f-9674-41e6-9868-40b3e8309747", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Otis", - "company": "Conotomics", - "phone": "818-591-3946", - "email": "trinity@conotomics.com" - }, - { - "id": 6530, - "guid": "6043224b-0c1c-4416-8cc9-00444b3e41c2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Carey", - "company": "Superscope", - "phone": "832-555-2780", - "email": "madelyn@superscope.com" - }, - { - "id": 6531, - "guid": "6d22ca88-c612-4e5f-95a7-060a36223ad2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Smith", - "company": "Fibroserve", - "phone": "826-491-2262", - "email": "zoey@fibroserve.com" - }, - { - "id": 6532, - "guid": "9cdf1e57-ec66-4f8f-b8de-c06682795a67", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Milton", - "company": "Openserve", - "phone": "864-552-3498", - "email": "claire@openserve.com" - }, - { - "id": 6533, - "guid": "170755bc-a8c2-4a3a-9474-3bf3513c3f68", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Gilbert", - "company": "Skydata", - "phone": "876-411-3264", - "email": "elizabeth@skydata.com" - }, - { - "id": 6534, - "guid": "e0f8073b-ae8f-4a83-b32b-68a70e899a7a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Young", - "company": "Ventanium", - "phone": "875-528-3979", - "email": "molly@ventanium.com" - }, - { - "id": 6535, - "guid": "880d9b8e-6eaa-45c8-8401-d2891753ce4d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Waller", - "company": "Idmax", - "phone": "849-431-3390", - "email": "leah@idmax.com" - }, - { - "id": 6536, - "guid": "16619cd8-2873-41f3-a306-ce9f5cb26310", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Angelina Wallace", - "company": "Raylog", - "phone": "889-475-2676", - "email": "angelina@raylog.com" - }, - { - "id": 6537, - "guid": "5b7f7d5f-9a30-44e8-9a0f-eff764a1b831", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Gill", - "company": "Fibroserve", - "phone": "861-564-2524", - "email": "lillian@fibroserve.com" - }, - { - "id": 6538, - "guid": "c5ba2f05-0337-46f7-a3a4-87bff729e7c4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Gerald", - "company": "Cryptotemplate", - "phone": "802-541-3736", - "email": "bailey@cryptotemplate.com" - }, - { - "id": 6539, - "guid": "7317bfa3-7ec3-463b-8bed-456df12f82fe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Chloe Otis", - "company": "Generola", - "phone": "890-483-3583", - "email": "chloe@generola.com" - }, - { - "id": 6540, - "guid": "99e7183a-32b4-4402-ad32-b940a606a951", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Fulton", - "company": "Unconix", - "phone": "850-421-2891", - "email": "riley@unconix.com" - }, - { - "id": 6541, - "guid": "3e24a35d-59cc-4e32-bb2c-1f7795fa4150", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Day", - "company": "Textiqua", - "phone": "812-532-2232", - "email": "katherine@textiqua.com" - }, - { - "id": 6542, - "guid": "4aafff2d-423c-4910-a0db-5b8e3b048dcd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Oldridge", - "company": "Gigaura", - "phone": "888-429-3105", - "email": "amelia@gigaura.com" - }, - { - "id": 6543, - "guid": "775cf6a5-da51-4893-922b-044c41dcd2e9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Carroll", - "company": "Thermotomic", - "phone": "850-494-3339", - "email": "emily@thermotomic.com" - }, - { - "id": 6544, - "guid": "df53c835-a92a-467d-9c75-4b2a9be22e33", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Watson", - "company": "iQualcar", - "phone": "814-597-2467", - "email": "julia@iqualcar.com" - }, - { - "id": 6545, - "guid": "c2748f76-03f5-4ce7-99f7-95f31264938b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Miller", - "company": "Mescatron", - "phone": "804-454-2146", - "email": "zoe@mescatron.com" - }, - { - "id": 6546, - "guid": "8e047aff-27a3-4513-befe-579b702ffe6f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lillian Walkman", - "company": "Unologic", - "phone": "839-416-2425", - "email": "lillian@unologic.com" - }, - { - "id": 6547, - "guid": "0104a09c-e63d-4fc3-bc04-5cc09df7d45d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Chapman", - "company": "Fibroserve", - "phone": "896-508-2475", - "email": "kaitlyn@fibroserve.com" - }, - { - "id": 6548, - "guid": "2aeda66b-adde-471e-9bdc-50329ba4e8ba", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Grace Mercer", - "company": "Nanobanc", - "phone": "871-482-2605", - "email": "grace@nanobanc.com" - }, - { - "id": 6549, - "guid": "2906e786-2ff6-4ad1-a0a6-5d1d05e2276f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Hailey", - "company": "Fibroserve", - "phone": "887-587-3745", - "email": "eva@fibroserve.com" - }, - { - "id": 6550, - "guid": "f3d47fd1-68ab-4cfb-a01f-ee068b91a9c0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Nash", - "company": "Westgate", - "phone": "849-445-2073", - "email": "isabella@westgate.com" - }, - { - "id": 6551, - "guid": "6127b6ae-35a5-40de-8b96-65e3866e829a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Miers", - "company": "iMedconik", - "phone": "816-576-2694", - "email": "emily@imedconik.com" - }, - { - "id": 6552, - "guid": "5b302088-5fb4-4da7-94a8-2765605e596a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Carroll", - "company": "Conotomics", - "phone": "810-583-3468", - "email": "jessica@conotomics.com" - }, - { - "id": 6553, - "guid": "73cb5a38-3cb4-489d-9670-cf39898a798d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaitlyn White", - "company": "Allphysiche", - "phone": "864-480-2653", - "email": "kaitlyn@allphysiche.com" - }, - { - "id": 6554, - "guid": "22122607-ec3d-4b6c-9f32-728b62267473", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Conors", - "company": "Teraserv", - "phone": "874-464-2843", - "email": "vanessa@teraserv.com" - }, - { - "id": 6555, - "guid": "4fe4c324-19e1-4da1-b108-0b2dee79bc28", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Daniels", - "company": "Aluco", - "phone": "869-423-3201", - "email": "kaylee@aluco.com" - }, - { - "id": 6556, - "guid": "05290dee-09b0-4621-86a0-dbe34b1ee757", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Stanley", - "company": "Polytheon", - "phone": "887-513-2991", - "email": "rachel@polytheon.com" - }, - { - "id": 6557, - "guid": "25adfb0d-dae6-4514-aac5-73d08e20c058", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Gustman", - "company": "RoboAerlogix", - "phone": "806-555-3808", - "email": "alexa@roboaerlogix.com" - }, - { - "id": 6558, - "guid": "37f31c3a-8f91-4f04-9e76-40d83949d86f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bella Nash", - "company": "Airdyne", - "phone": "829-415-3661", - "email": "bella@airdyne.com" - }, - { - "id": 6559, - "guid": "b6c00245-5664-42aa-b8ff-09106cd2631c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Hodges", - "company": "Navivacs", - "phone": "847-540-3377", - "email": "eva@navivacs.com" - }, - { - "id": 6560, - "guid": "189b630a-3d41-41b8-8e9d-7230a7440fea", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Michaelson", - "company": "InfoAirway", - "phone": "820-456-2682", - "email": "allison@infoairway.com" - }, - { - "id": 6561, - "guid": "c8ea8e1a-b65c-4162-baa6-ad46598005ea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Carey", - "company": "Netsystems", - "phone": "889-534-2980", - "email": "julia@netsystems.com" - }, - { - "id": 6562, - "guid": "534d56f2-8c87-4d5b-bcb0-8d6a78759136", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Webster", - "company": "Jamrola", - "phone": "878-564-2524", - "email": "kaylee@jamrola.com" - }, - { - "id": 6563, - "guid": "571a01a8-dde7-47c8-9cb0-6166ecf53da7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Murphy", - "company": "Steganoconiche", - "phone": "881-448-2470", - "email": "alexis@steganoconiche.com" - }, - { - "id": 6564, - "guid": "ecc7ccb4-26d9-4bb5-8939-95907359c2e3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Goldman", - "company": "US Infratouch", - "phone": "897-402-3280", - "email": "audrey@us infratouch.com" - }, - { - "id": 6565, - "guid": "345b0c56-71fc-4b01-8897-6c63e43426e0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Owen", - "company": "Anaframe", - "phone": "849-577-3111", - "email": "gabriella@anaframe.com" - }, - { - "id": 6566, - "guid": "52e1475c-fe54-4507-8413-16d4df04f5ac", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Walkman", - "company": "RoboAerlogix", - "phone": "894-522-2251", - "email": "anna@roboaerlogix.com" - }, - { - "id": 6567, - "guid": "93adbb3d-a917-4528-83fe-051f188bee46", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Waller", - "company": "Cryptotegrity", - "phone": "837-416-3930", - "email": "emily@cryptotegrity.com" - }, - { - "id": 6568, - "guid": "1bf71a44-1315-42f0-8e9f-ebcf95d6208a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Thomson", - "company": "Hypervaco", - "phone": "871-593-3530", - "email": "sophia@hypervaco.com" - }, - { - "id": 6569, - "guid": "51b9b61c-874e-4e8e-b055-53c32ab2e399", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Conors", - "company": "Teknoplexon", - "phone": "881-504-2148", - "email": "lauren@teknoplexon.com" - }, - { - "id": 6570, - "guid": "5e1dc0b6-af9c-43ea-9f77-6a33e2df7cc5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Adamson", - "company": "Unologic", - "phone": "891-563-2380", - "email": "addison@unologic.com" - }, - { - "id": 6571, - "guid": "f5977525-9379-40d1-a28e-b9f64de6aaa0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Osborne", - "company": "Robotemplate", - "phone": "801-591-2662", - "email": "brianna@robotemplate.com" - }, - { - "id": 6572, - "guid": "f9055199-bc4e-448a-88ee-0d8ecb007d57", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Thomson", - "company": "iEnland", - "phone": "860-567-2395", - "email": "madeline@ienland.com" - }, - { - "id": 6573, - "guid": "4aa38506-53ba-451a-a1af-e2b906fabdc8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Nelson", - "company": "iSkyvaco", - "phone": "809-433-2855", - "email": "kaylee@iskyvaco.com" - }, - { - "id": 6574, - "guid": "7ac902fa-1384-4be0-b63f-79f5842d52d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Oldman", - "company": "Orthomedia", - "phone": "885-556-3854", - "email": "brianna@orthomedia.com" - }, - { - "id": 6575, - "guid": "834b3299-7f96-42cc-bebd-cd7f2e2be0f9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Layla Crossman", - "company": "Videobanc", - "phone": "841-497-2376", - "email": "layla@videobanc.com" - }, - { - "id": 6576, - "guid": "b3ba726d-062b-4fee-ab23-bba9db370b11", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Oswald", - "company": "eEyetanic", - "phone": "854-523-2137", - "email": "alexandra@eeyetanic.com" - }, - { - "id": 6577, - "guid": "e6d7c193-1c31-4d48-9980-90051741777d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Gerald", - "company": "Netsystems", - "phone": "859-432-3888", - "email": "katherine@netsystems.com" - }, - { - "id": 6578, - "guid": "ac55e48a-eaaa-404d-8515-d2fe9bd4a130", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Hailey", - "company": "Qualserve", - "phone": "815-476-3313", - "email": "morgan@qualserve.com" - }, - { - "id": 6579, - "guid": "d163e7e2-aefa-44b2-8a12-98ec44c57654", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Goodman", - "company": "Venconix", - "phone": "855-513-2911", - "email": "gabriella@venconix.com" - }, - { - "id": 6580, - "guid": "2f06eebf-c8f0-4a44-81f8-df7962588112", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Wallace", - "company": "Mescaridic", - "phone": "819-515-2005", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 6581, - "guid": "35c31620-3796-4080-84c0-3bf58698dc87", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ava Gilmore", - "company": "Technogra", - "phone": "808-426-2840", - "email": "ava@technogra.com" - }, - { - "id": 6582, - "guid": "2ac0bd14-e6a1-44c3-9d4d-b4a9c087185c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Miln", - "company": "Superscope", - "phone": "802-540-3354", - "email": "audrey@superscope.com" - }, - { - "id": 6583, - "guid": "10cb5fdf-eefd-42a3-8e78-5f6d80bdedb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Stanley", - "company": "Aprama", - "phone": "816-586-3167", - "email": "audrey@aprama.com" - }, - { - "id": 6584, - "guid": "96bae200-1461-4e8c-9c90-601cb572fdee", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Chandter", - "company": "Pericenta", - "phone": "890-438-3698", - "email": "katelyn@pericenta.com" - }, - { - "id": 6585, - "guid": "44dbd36d-5230-4c7a-80f6-d18cec63f4a8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Audrey Gibbs", - "company": "Unologic", - "phone": "822-405-2963", - "email": "audrey@unologic.com" - }, - { - "id": 6586, - "guid": "ffd77920-bf5a-4a14-9c49-37df776d824f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Miller", - "company": "iSkyvaco", - "phone": "828-445-3102", - "email": "audrey@iskyvaco.com" - }, - { - "id": 6587, - "guid": "2e9366d4-78a0-496e-9365-cbf2a2a1e54c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Stanley", - "company": "Genland", - "phone": "812-440-2432", - "email": "avery@genland.com" - }, - { - "id": 6588, - "guid": "71b13ed1-aa15-40ce-a477-ceb9e43328f1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Brooks", - "company": "Turbomart", - "phone": "886-502-3046", - "email": "nevaeh@turbomart.com" - }, - { - "id": 6589, - "guid": "d9dc9a39-b5a1-4f83-a04f-f0e47c7030bd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Oliver", - "company": "iSkyvaco", - "phone": "872-594-2808", - "email": "sofia@iskyvaco.com" - }, - { - "id": 6590, - "guid": "80d03411-329b-439e-b1de-5e9dd206b5bf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Chesterton", - "company": "Celgra", - "phone": "877-532-3271", - "email": "caroline@celgra.com" - }, - { - "id": 6591, - "guid": "a0e038ea-d109-4ca7-a525-6d475646fa0b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Hamphrey", - "company": "Enlogia", - "phone": "893-457-3795", - "email": "layla@enlogia.com" - }, - { - "id": 6592, - "guid": "78bed2cd-0154-464b-88f1-297dd2433c0b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Milton", - "company": "Teratopia", - "phone": "863-449-2585", - "email": "bailey@teratopia.com" - }, - { - "id": 6593, - "guid": "299679e0-2a54-40e6-8097-7a9fc8aa06b4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Michaelson", - "company": "Interliant", - "phone": "820-565-2934", - "email": "peyton@interliant.com" - }, - { - "id": 6594, - "guid": "23e75806-7f47-4611-b671-421b9b71273f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Oldridge", - "company": "Anagraph", - "phone": "811-431-2662", - "email": "isabelle@anagraph.com" - }, - { - "id": 6595, - "guid": "7dad18de-e895-4852-a567-14b6771a4156", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Wesley", - "company": "Compuamerica", - "phone": "887-427-3817", - "email": "lily@compuamerica.com" - }, - { - "id": 6596, - "guid": "1c9d2d66-b03a-4225-ac07-f760d45bfd24", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Nelson", - "company": "Transtouch", - "phone": "838-540-3788", - "email": "savannah@transtouch.com" - }, - { - "id": 6597, - "guid": "7ba8eae8-3df7-4895-893d-0e2a9a50db86", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Brown", - "company": "Skydata", - "phone": "813-490-3535", - "email": "zoe@skydata.com" - }, - { - "id": 6598, - "guid": "b91bc708-06c5-47e1-937b-8fb80520bcc8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Vance", - "company": "Aluco", - "phone": "832-599-2717", - "email": "julia@aluco.com" - }, - { - "id": 6599, - "guid": "479ebd03-4421-49d0-98cf-eba8c6456baa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emma Creighton", - "company": "Fibrotouch", - "phone": "897-594-3189", - "email": "emma@fibrotouch.com" - }, - { - "id": 6600, - "guid": "ef1dacca-1f46-44f4-9528-4770b5610f75", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoe Thorndike", - "company": "Qualserve", - "phone": "856-515-3263", - "email": "zoe@qualserve.com" - }, - { - "id": 6601, - "guid": "c91bd5f5-0562-4d57-a4ba-27cfb3694580", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Warren", - "company": "Compuamerica", - "phone": "812-432-2873", - "email": "camila@compuamerica.com" - }, - { - "id": 6602, - "guid": "47a7bc39-aed5-4be1-aa96-864ea4741928", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lauren Stanley", - "company": "Polytheon", - "phone": "803-576-2512", - "email": "lauren@polytheon.com" - }, - { - "id": 6603, - "guid": "48dff6c5-dd4d-4e73-ab29-72f373fc9168", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maria Brickman", - "company": "Teraserv", - "phone": "809-423-3216", - "email": "maria@teraserv.com" - }, - { - "id": 6604, - "guid": "4fa2dc95-dbbe-4673-9052-f7039c71a326", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Michaelson", - "company": "Compuamerica", - "phone": "872-530-3546", - "email": "emily@compuamerica.com" - }, - { - "id": 6605, - "guid": "13687f84-d275-4fba-9862-acc22c576574", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Addison Turner", - "company": "Pacwest", - "phone": "881-510-3213", - "email": "addison@pacwest.com" - }, - { - "id": 6606, - "guid": "782458ac-36af-4360-8743-f1f28fca4fb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Wayne", - "company": "Cryptotemplate", - "phone": "846-459-3677", - "email": "ava@cryptotemplate.com" - }, - { - "id": 6607, - "guid": "90512c2f-1062-49f4-882b-03ed96e3bb5e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Goldman", - "company": "Ventanium", - "phone": "885-581-2544", - "email": "avery@ventanium.com" - }, - { - "id": 6608, - "guid": "3d053caf-f9cb-4056-93a2-e687c14dfd0c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Wainwright", - "company": "Conotomics", - "phone": "876-463-2806", - "email": "jasmine@conotomics.com" - }, - { - "id": 6609, - "guid": "a3b5d90e-1bf5-478a-b879-dfe3a8f71ad8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Higgins", - "company": "Genland", - "phone": "826-548-3908", - "email": "ava@genland.com" - }, - { - "id": 6610, - "guid": "a9f9d2ff-c427-4450-aeed-b4daa06bce57", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bella Day", - "company": "Idmax", - "phone": "823-448-3538", - "email": "bella@idmax.com" - }, - { - "id": 6611, - "guid": "3c7f5e9a-6ba5-4b8d-8eb5-2d24b095f266", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madison White", - "company": "eSteganoergy", - "phone": "843-565-2459", - "email": "madison@esteganoergy.com" - }, - { - "id": 6612, - "guid": "7da9d762-4dce-44bb-ac78-09cb7b8578e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Nelson", - "company": "Nanobanc", - "phone": "875-401-2969", - "email": "alexa@nanobanc.com" - }, - { - "id": 6613, - "guid": "a5274d8d-3c79-422b-802f-51f324a3ef94", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Elizabeth Otis", - "company": "Ameritron", - "phone": "809-486-3817", - "email": "elizabeth@ameritron.com" - }, - { - "id": 6614, - "guid": "b78c5abc-a014-4808-a042-6345378c4ec4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gianna Vance", - "company": "Teratopia", - "phone": "894-406-3256", - "email": "gianna@teratopia.com" - }, - { - "id": 6615, - "guid": "4d427add-4505-4492-bd35-946bcc4b8b65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Murphy", - "company": "Pericenta", - "phone": "809-470-2090", - "email": "ava@pericenta.com" - }, - { - "id": 6616, - "guid": "6547502a-c951-4c15-81e8-2ccb4a92266f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Vanessa Cook", - "company": "US Infratouch", - "phone": "835-440-2706", - "email": "vanessa@us infratouch.com" - }, - { - "id": 6617, - "guid": "3869a5a5-e923-430c-9ad7-aefc61254481", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Chandter", - "company": "Infragraph", - "phone": "861-581-2878", - "email": "caroline@infragraph.com" - }, - { - "id": 6618, - "guid": "19aae19a-ff90-41e8-ab2f-420fa21dc894", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Michaelson", - "company": "Inridium", - "phone": "804-415-3139", - "email": "sophie@inridium.com" - }, - { - "id": 6619, - "guid": "a66daa26-1882-4645-843a-c742b8ccc7f6", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Warren", - "company": "eEyetanic", - "phone": "815-417-2802", - "email": "camila@eeyetanic.com" - }, - { - "id": 6620, - "guid": "b817c242-a600-40a3-983a-3ef0c9a7eb76", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mia Oswald", - "company": "Indisco", - "phone": "862-502-3243", - "email": "mia@indisco.com" - }, - { - "id": 6621, - "guid": "4fb8d535-f333-43ae-818a-7cd955936952", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Hoggarth", - "company": "Safetrust", - "phone": "888-533-2761", - "email": "charlotte@safetrust.com" - }, - { - "id": 6622, - "guid": "304bf264-509d-410d-9a61-62c4c256e52e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Brickman", - "company": "Netsystems", - "phone": "808-568-3310", - "email": "katherine@netsystems.com" - }, - { - "id": 6623, - "guid": "e5fe140d-fdaf-4e5c-a36b-8dda10ef1a84", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Gate", - "company": "Hypervaco", - "phone": "888-552-2699", - "email": "kylie@hypervaco.com" - }, - { - "id": 6624, - "guid": "e91edf3b-3e67-41ce-8fdd-63572076145d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Turner", - "company": "Aprama", - "phone": "881-506-3074", - "email": "anna@aprama.com" - }, - { - "id": 6625, - "guid": "2018c76f-2c1f-4fb7-af04-c1e503cc7650", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Gibbs", - "company": "Westgate", - "phone": "864-593-2996", - "email": "kaitlyn@westgate.com" - }, - { - "id": 6626, - "guid": "badde910-4f4a-43de-b646-752e2b2d1877", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Stanley", - "company": "Netseco", - "phone": "828-588-3890", - "email": "lauren@netseco.com" - }, - { - "id": 6627, - "guid": "16876115-4578-4c1c-9800-0c20d286d355", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Waller", - "company": "Pericenta", - "phone": "859-485-3131", - "email": "julia@pericenta.com" - }, - { - "id": 6628, - "guid": "b19d9c5e-337f-4d37-8982-a6c0cfc751b0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Thomson", - "company": "Teraserv", - "phone": "823-405-3963", - "email": "olivia@teraserv.com" - }, - { - "id": 6629, - "guid": "051cd5c1-f15e-4bc8-a389-83b1642c7126", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Gardner", - "company": "Proline", - "phone": "889-508-2242", - "email": "alexis@proline.com" - }, - { - "id": 6630, - "guid": "1a4c3865-dca6-4bdc-ba07-c88a8055b4ef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Trinity Ogden", - "company": "Quintegrity", - "phone": "868-572-3665", - "email": "trinity@quintegrity.com" - }, - { - "id": 6631, - "guid": "6295497e-7960-4183-89fb-1a329aff193c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Carey", - "company": "Conotomics", - "phone": "817-537-2660", - "email": "brooke@conotomics.com" - }, - { - "id": 6632, - "guid": "79b4447d-c21a-43af-9180-89f5d01866c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Ward", - "company": "Aluco", - "phone": "898-455-3175", - "email": "melanie@aluco.com" - }, - { - "id": 6633, - "guid": "4f8982ac-cbc4-4246-98ae-5c5b0821d77e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hailey Chandter", - "company": "Gigaura", - "phone": "871-413-2730", - "email": "hailey@gigaura.com" - }, - { - "id": 6634, - "guid": "8fbfbc10-c386-4802-9b27-8f467c44e0d2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Hawkins", - "company": "Proline", - "phone": "864-489-2562", - "email": "faith@proline.com" - }, - { - "id": 6635, - "guid": "a7a691dd-ca1f-4cb5-9ea4-6ee1a6721453", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Hawkins", - "company": "Fibroserve", - "phone": "857-479-3894", - "email": "payton@fibroserve.com" - }, - { - "id": 6636, - "guid": "00234482-cc87-4757-a92b-0b9d4fc0a3d4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Arianna Nash", - "company": "Tekcar", - "phone": "838-576-2256", - "email": "arianna@tekcar.com" - }, - { - "id": 6637, - "guid": "fdc4ea0b-b2dd-48b4-adb1-a3f88c52ee33", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Sherlock", - "company": "Navivacs", - "phone": "858-416-2455", - "email": "evelyn@navivacs.com" - }, - { - "id": 6638, - "guid": "fb88a0ab-cabb-43a3-8865-c5f06d60e586", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Campbell", - "company": "Sontopia", - "phone": "839-579-2038", - "email": "nevaeh@sontopia.com" - }, - { - "id": 6639, - "guid": "ac95d936-0184-43b8-b153-7f934f364dca", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Maria Clapton", - "company": "Robocomm", - "phone": "842-584-2346", - "email": "maria@robocomm.com" - }, - { - "id": 6640, - "guid": "cb6fe098-1d8e-4c67-b328-83086fada5b1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Gustman", - "company": "Technogra", - "phone": "845-412-2971", - "email": "savannah@technogra.com" - }, - { - "id": 6641, - "guid": "025ec749-23e5-4cab-aaf3-aa3c25ad342e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Autumn Walkman", - "company": "Infraique", - "phone": "884-444-3481", - "email": "autumn@infraique.com" - }, - { - "id": 6642, - "guid": "fe6e68ea-0cdf-4b42-8489-21a10b416510", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaylee Gardner", - "company": "RoboAerlogix", - "phone": "830-546-2497", - "email": "kaylee@roboaerlogix.com" - }, - { - "id": 6643, - "guid": "57423275-1117-49b2-8e52-e96dc656b979", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hannah Brooks", - "company": "Dynarama", - "phone": "883-469-3775", - "email": "hannah@dynarama.com" - }, - { - "id": 6644, - "guid": "b41695c6-7171-4f00-a36d-60cabd124a11", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Gibbs", - "company": "Mescaridic", - "phone": "888-475-3819", - "email": "mackenzie@mescaridic.com" - }, - { - "id": 6645, - "guid": "a0ec2b2e-27c6-4b52-896a-b323d7c62f23", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Angelina Adamson", - "company": "eEyetanic", - "phone": "827-443-3077", - "email": "angelina@eeyetanic.com" - }, - { - "id": 6646, - "guid": "8ac11717-47ca-4080-bb7d-f5bfbd4480d4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Grace Oliver", - "company": "Technogra", - "phone": "840-491-3098", - "email": "grace@technogra.com" - }, - { - "id": 6647, - "guid": "e26d6445-bb4c-4818-9200-2e0850035ec7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Hamphrey", - "company": "Conrama", - "phone": "882-575-3404", - "email": "gianna@conrama.com" - }, - { - "id": 6648, - "guid": "f1bd19ed-b897-45a5-9ab2-21caf7523e23", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Oswald", - "company": "Keytheon", - "phone": "821-460-3259", - "email": "isabelle@keytheon.com" - }, - { - "id": 6649, - "guid": "b8b43b36-08a9-472b-88d7-52b1cbc03dc8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Arianna Clapton", - "company": "Jamrola", - "phone": "893-432-3730", - "email": "arianna@jamrola.com" - }, - { - "id": 6650, - "guid": "8de801c7-3d24-43c8-a7e1-830171eeb38e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ariana Chesterton", - "company": "Openserve", - "phone": "813-451-3470", - "email": "ariana@openserve.com" - }, - { - "id": 6651, - "guid": "80ee8240-2d1c-4997-935f-3ed890e39cb2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Gardner", - "company": "SysVenamerica", - "phone": "830-412-3040", - "email": "olivia@sysvenamerica.com" - }, - { - "id": 6652, - "guid": "b832854c-c8e8-4588-adb4-fc9b4b0f2a0e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Brooks", - "company": "Jamrola", - "phone": "862-556-3636", - "email": "gabriella@jamrola.com" - }, - { - "id": 6653, - "guid": "8d69b960-a35b-4dd0-85a3-3213e63af810", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Vance", - "company": "RoboAerlogix", - "phone": "823-566-3043", - "email": "destiny@roboaerlogix.com" - }, - { - "id": 6654, - "guid": "e3fb4461-33c9-4b5a-9351-e15e303d627e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Timmons", - "company": "Robotomic", - "phone": "882-462-3646", - "email": "katelyn@robotomic.com" - }, - { - "id": 6655, - "guid": "ea9a0272-1589-405e-b3d5-52cf8ec4bd63", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Thomson", - "company": "US Omnigraphik", - "phone": "841-486-2889", - "email": "destiny@us omnigraphik.com" - }, - { - "id": 6656, - "guid": "236e83bd-3e26-491b-9198-bb3397a8b9dd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Osborne", - "company": "Ventanium", - "phone": "843-490-2829", - "email": "lillian@ventanium.com" - }, - { - "id": 6657, - "guid": "1d676578-f752-412c-83b5-b5f42dc77384", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine White", - "company": "Mescatron", - "phone": "840-584-3371", - "email": "jasmine@mescatron.com" - }, - { - "id": 6658, - "guid": "9b3fe83b-7866-4ea2-a7ee-433ae2bbfe7a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Timmons", - "company": "Anagraph", - "phone": "879-482-2524", - "email": "elizabeth@anagraph.com" - }, - { - "id": 6659, - "guid": "984ea477-7823-4dbc-a0d9-81d7fb67607b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Smith", - "company": "Thermotomic", - "phone": "801-495-2928", - "email": "audrey@thermotomic.com" - }, - { - "id": 6660, - "guid": "bb6eb46f-c985-4119-b02a-2604780b97bc", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Miller", - "company": "OpKeycomm", - "phone": "843-511-2066", - "email": "nevaeh@opkeycomm.com" - }, - { - "id": 6661, - "guid": "27be0f18-950c-420f-ba93-e93547cca19e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Cramer", - "company": "SysVenamerica", - "phone": "803-568-3664", - "email": "trinity@sysvenamerica.com" - }, - { - "id": 6662, - "guid": "db56ced9-5de4-466b-968f-742f028a17e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Morrison", - "company": "Netseco", - "phone": "824-520-2295", - "email": "aubrey@netseco.com" - }, - { - "id": 6663, - "guid": "ef2723ca-2f73-478b-afb4-f8a9620fc335", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sarah Stanley", - "company": "OpKeycomm", - "phone": "897-467-3657", - "email": "sarah@opkeycomm.com" - }, - { - "id": 6664, - "guid": "cbc06751-80d6-4436-bc97-6a91a3da8a9d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaitlyn White", - "company": "Interliant", - "phone": "846-440-3886", - "email": "kaitlyn@interliant.com" - }, - { - "id": 6665, - "guid": "089caafa-85f2-4609-b4b0-66e31961a337", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Watson", - "company": "Thermotomic", - "phone": "816-551-2513", - "email": "morgan@thermotomic.com" - }, - { - "id": 6666, - "guid": "ed8893c3-8383-4c31-8d78-29bd5e2f0ae6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sofia Nathan", - "company": "Unologic", - "phone": "855-591-3097", - "email": "sofia@unologic.com" - }, - { - "id": 6667, - "guid": "c7335648-840c-4ccd-95b4-7f34b884ffde", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Nathan", - "company": "Tekcar", - "phone": "851-525-3433", - "email": "mya@tekcar.com" - }, - { - "id": 6668, - "guid": "4af4c7eb-7314-4d46-aa08-ec4c9a66f293", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Carey", - "company": "Superscope", - "phone": "831-484-3875", - "email": "hannah@superscope.com" - }, - { - "id": 6669, - "guid": "e24dcb1b-13d1-414b-8804-8fec94043b8d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Madeline Bush", - "company": "Westgate", - "phone": "893-547-3761", - "email": "madeline@westgate.com" - }, - { - "id": 6670, - "guid": "591d5fb3-7a85-4a55-8f39-d39350a518f3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Sheldon", - "company": "RoboAerlogix", - "phone": "883-483-3540", - "email": "peyton@roboaerlogix.com" - }, - { - "id": 6671, - "guid": "cd660227-2e0e-4733-bd4f-734a58807ae4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Chesterton", - "company": "Unconix", - "phone": "841-411-3667", - "email": "grace@unconix.com" - }, - { - "id": 6672, - "guid": "f9c5f8bb-23d8-4854-bb66-f17919cfac75", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Neal", - "company": "Westgate", - "phone": "891-596-2785", - "email": "allison@westgate.com" - }, - { - "id": 6673, - "guid": "d6b0a26d-7474-4792-b300-09cddf491f48", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Wood", - "company": "Raylog", - "phone": "870-547-3600", - "email": "madison@raylog.com" - }, - { - "id": 6674, - "guid": "e8426c3e-8865-4183-9ac6-1f10e90804ce", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria White", - "company": "Ameritron", - "phone": "867-530-2790", - "email": "maria@ameritron.com" - }, - { - "id": 6675, - "guid": "d21ac4be-0f7d-497f-9fdf-f3cf6efb5351", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Day", - "company": "Hypervaco", - "phone": "877-463-3700", - "email": "natalie@hypervaco.com" - }, - { - "id": 6676, - "guid": "f3ab42b3-ad88-49d0-84aa-7569f9705e54", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Webster", - "company": "Syssoft", - "phone": "875-429-2617", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 6677, - "guid": "42535e32-59a7-4fb5-b415-84ad6f9d5879", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Michaelson", - "company": "Netseco", - "phone": "862-490-2211", - "email": "mia@netseco.com" - }, - { - "id": 6678, - "guid": "75264e76-d755-443a-9bc9-04b981bdf56b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Savannah Neal", - "company": "OpKeycomm", - "phone": "892-539-3772", - "email": "savannah@opkeycomm.com" - }, - { - "id": 6679, - "guid": "af6783e0-e295-4dfb-a994-4c80a27601ee", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Peyton Goodman", - "company": "Superscope", - "phone": "819-503-3115", - "email": "peyton@superscope.com" - }, - { - "id": 6680, - "guid": "c91d489f-eba9-4c77-964a-74e00e918195", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity Otis", - "company": "Sontopia", - "phone": "840-409-3429", - "email": "trinity@sontopia.com" - }, - { - "id": 6681, - "guid": "34996a31-b2c6-402c-989a-cfb58c56cdb1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Victoria Warren", - "company": "Safetrust", - "phone": "827-582-3281", - "email": "victoria@safetrust.com" - }, - { - "id": 6682, - "guid": "78a8ed89-4b3f-43d9-a1ef-dba9720491c3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe White", - "company": "Dynarama", - "phone": "871-535-2224", - "email": "khloe@dynarama.com" - }, - { - "id": 6683, - "guid": "8a4af13d-4177-4de2-bdda-b1bbac6c93f7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Davidson", - "company": "Anagraph", - "phone": "890-600-2057", - "email": "genesis@anagraph.com" - }, - { - "id": 6684, - "guid": "0d715016-a501-41d9-8258-f0d0eec19ad2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Charlson", - "company": "Truegate", - "phone": "829-509-3770", - "email": "ariana@truegate.com" - }, - { - "id": 6685, - "guid": "065306eb-6e89-4708-b478-856682f2a195", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Crossman", - "company": "Fibrotopia", - "phone": "877-453-2417", - "email": "mia@fibrotopia.com" - }, - { - "id": 6686, - "guid": "13ecbfce-33af-4c98-8daf-1f18b9fd9cd1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Clapton", - "company": "Steganoconiche", - "phone": "830-499-2171", - "email": "leah@steganoconiche.com" - }, - { - "id": 6687, - "guid": "0eb776d8-10ed-48e3-ba39-e6be09c34b55", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Campbell", - "company": "Cryptotemplate", - "phone": "839-421-3911", - "email": "katherine@cryptotemplate.com" - }, - { - "id": 6688, - "guid": "f4de3e90-b575-4a75-b210-c32c51056836", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Young", - "company": "Anagraph", - "phone": "852-520-3436", - "email": "sarah@anagraph.com" - }, - { - "id": 6689, - "guid": "07326c2b-ce80-4f7f-978a-ab5bd9ed7f35", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sydney Nathan", - "company": "Enlogia", - "phone": "879-414-3187", - "email": "sydney@enlogia.com" - }, - { - "id": 6690, - "guid": "4cb67ba6-bbd7-4803-8ee3-1d177e3c6825", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Neal", - "company": "SysUSA", - "phone": "894-451-3096", - "email": "gabrielle@sysusa.com" - }, - { - "id": 6691, - "guid": "62722068-b8c1-42cb-bff1-c16d7d948e84", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Young", - "company": "Textiqua", - "phone": "849-562-3544", - "email": "bella@textiqua.com" - }, - { - "id": 6692, - "guid": "f443f52a-68cf-42c6-a4f1-674d2c4569eb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Chandter", - "company": "Interliant", - "phone": "808-438-3784", - "email": "leah@interliant.com" - }, - { - "id": 6693, - "guid": "730bbcbd-e319-47b1-a321-676a124d4acb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Clapton", - "company": "Openserve", - "phone": "819-580-2773", - "email": "katelyn@openserve.com" - }, - { - "id": 6694, - "guid": "70aca44d-c42e-43f3-a9e8-ef6755991b66", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Daniels", - "company": "Anagraph", - "phone": "844-525-2589", - "email": "emily@anagraph.com" - }, - { - "id": 6695, - "guid": "61c501da-25a7-4f69-987a-61efd0ccd039", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Oldman", - "company": "Dynarama", - "phone": "840-487-2979", - "email": "nevaeh@dynarama.com" - }, - { - "id": 6696, - "guid": "519bfb03-89ac-4249-9d86-68f63e9339e8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Young", - "company": "Truetomic", - "phone": "843-525-3807", - "email": "katherine@truetomic.com" - }, - { - "id": 6697, - "guid": "cfa08d3b-d388-4ef4-9a4d-16de98573a33", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexis Michaelson", - "company": "iEnland", - "phone": "872-489-3594", - "email": "alexis@ienland.com" - }, - { - "id": 6698, - "guid": "a6db6339-ce65-454d-a754-4637baf6fa79", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madelyn Campbell", - "company": "Textiqua", - "phone": "845-409-3602", - "email": "madelyn@textiqua.com" - }, - { - "id": 6699, - "guid": "89acadf9-9a0d-4ad9-9696-1af843433bb8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ashley Milton", - "company": "Raylog", - "phone": "899-585-2986", - "email": "ashley@raylog.com" - }, - { - "id": 6700, - "guid": "faf48131-67ec-40a2-a544-a38d44dfdfe6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Molligan", - "company": "Nanobanc", - "phone": "805-595-3094", - "email": "gabriella@nanobanc.com" - }, - { - "id": 6701, - "guid": "81c294d5-9c43-4a5e-a90f-a73829064a5d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Nathan", - "company": "Techtron", - "phone": "801-485-2403", - "email": "molly@techtron.com" - }, - { - "id": 6702, - "guid": "97d68ce8-f04d-4561-a980-1bbda97e1d5c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Morrison", - "company": "RoboAerlogix", - "phone": "862-439-3437", - "email": "maya@roboaerlogix.com" - }, - { - "id": 6703, - "guid": "18e4e16f-da48-4797-99ff-9ba5ae78ce4f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Hardman", - "company": "SysVenamerica", - "phone": "893-530-3517", - "email": "valeria@sysvenamerica.com" - }, - { - "id": 6704, - "guid": "9b91a841-3a0c-47ff-9e99-5820dc971d2d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Vance", - "company": "iSkyvaco", - "phone": "890-498-2520", - "email": "zoe@iskyvaco.com" - }, - { - "id": 6705, - "guid": "c15dcc75-8159-4118-b634-5d323c911729", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alyssa Hardman", - "company": "Teratopia", - "phone": "881-526-2995", - "email": "alyssa@teratopia.com" - }, - { - "id": 6706, - "guid": "dea2192c-f8a8-45d1-9739-18ec043a6703", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Turner", - "company": "Conrama", - "phone": "848-598-2539", - "email": "charlotte@conrama.com" - }, - { - "id": 6707, - "guid": "cae39584-bdb0-43fe-8df2-9642b0a57d92", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabriella Hardman", - "company": "Venconix", - "phone": "820-595-3690", - "email": "gabriella@venconix.com" - }, - { - "id": 6708, - "guid": "84f2f496-1035-4b3b-9601-2650b2330462", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mia Young", - "company": "Teratopia", - "phone": "890-584-3007", - "email": "mia@teratopia.com" - }, - { - "id": 6709, - "guid": "e0aa1efb-ec74-4294-8170-ddc67268f06a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Valeria Brown", - "company": "Cryptotegrity", - "phone": "810-478-3739", - "email": "valeria@cryptotegrity.com" - }, - { - "id": 6710, - "guid": "4a49caf6-b028-45ae-9ddb-c0390ee92c65", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madison Milton", - "company": "Robocomm", - "phone": "861-429-3792", - "email": "madison@robocomm.com" - }, - { - "id": 6711, - "guid": "91c208de-4ee3-4f3d-9d6a-f9cf044d707b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Conors", - "company": "iQualcar", - "phone": "826-405-3121", - "email": "audrey@iqualcar.com" - }, - { - "id": 6712, - "guid": "e65a0ca9-53db-40f4-93d4-b14830589758", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Morrison", - "company": "Robotemplate", - "phone": "853-423-2817", - "email": "julia@robotemplate.com" - }, - { - "id": 6713, - "guid": "96ddb955-a81c-42e5-9cb8-5f6ccdacba24", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hannah Wood", - "company": "Compuamerica", - "phone": "889-544-2606", - "email": "hannah@compuamerica.com" - }, - { - "id": 6714, - "guid": "1b4f6fdf-c442-4aa6-ab37-81d2134b27b5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Valeria Adamson", - "company": "Generola", - "phone": "811-519-3018", - "email": "valeria@generola.com" - }, - { - "id": 6715, - "guid": "20e6247e-b448-427b-a12e-654267e12936", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Croftoon", - "company": "Aluco", - "phone": "814-424-2137", - "email": "camila@aluco.com" - }, - { - "id": 6716, - "guid": "f3ecaa66-fe57-4c4d-800d-aabb457b4e31", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Galbraith", - "company": "Pericenta", - "phone": "876-472-2251", - "email": "kayla@pericenta.com" - }, - { - "id": 6717, - "guid": "26c7a034-e952-4bb7-a689-a29fe9d698ce", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Youmans", - "company": "Fibrotouch", - "phone": "831-409-2286", - "email": "evelyn@fibrotouch.com" - }, - { - "id": 6718, - "guid": "9d4d99ce-7f18-4908-91aa-7f04e874f881", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Daniels", - "company": "Safetrust", - "phone": "882-457-2435", - "email": "claire@safetrust.com" - }, - { - "id": 6719, - "guid": "ef46572e-1476-4349-99c2-e68657486e4c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Gilson", - "company": "Infraique", - "phone": "805-402-3198", - "email": "claire@infraique.com" - }, - { - "id": 6720, - "guid": "0db41569-a0e3-457f-9982-a19fe6bc06cc", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Miers", - "company": "Generola", - "phone": "897-450-3859", - "email": "taylor@generola.com" - }, - { - "id": 6721, - "guid": "0ca63805-e09b-4685-afff-3ff302f9f9aa", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Wood", - "company": "Pacwest", - "phone": "897-484-3454", - "email": "alexa@pacwest.com" - }, - { - "id": 6722, - "guid": "bc0992ae-3c6a-4fc9-a658-4f95a1f537f3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexa Croftoon", - "company": "Aprama", - "phone": "820-502-3773", - "email": "alexa@aprama.com" - }, - { - "id": 6723, - "guid": "cce4a3f4-6514-4c1d-8ed1-ce8997849813", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Calhoun", - "company": "iSkyvaco", - "phone": "861-558-3971", - "email": "sophie@iskyvaco.com" - }, - { - "id": 6724, - "guid": "0fc22477-c488-4a46-80df-8b770c7cadad", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Abigail Wesley", - "company": "Sontopia", - "phone": "885-500-3335", - "email": "abigail@sontopia.com" - }, - { - "id": 6725, - "guid": "6e7cc48b-13a6-44d1-b250-2e5216a0e84b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Timmons", - "company": "Entcast", - "phone": "830-410-3062", - "email": "bella@entcast.com" - }, - { - "id": 6726, - "guid": "983068bb-918f-4d47-b90a-141a85e85f6f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Abramson", - "company": "Qualserve", - "phone": "811-438-2263", - "email": "emily@qualserve.com" - }, - { - "id": 6727, - "guid": "4c64b195-f1c6-4b66-a840-e0bb58952b3e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Morrison", - "company": "Mescaridic", - "phone": "889-453-3479", - "email": "grace@mescaridic.com" - }, - { - "id": 6728, - "guid": "6bf21fe4-1218-4372-b048-d24fb917cf57", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Gerald", - "company": "Orthosoft", - "phone": "802-441-3256", - "email": "olivia@orthosoft.com" - }, - { - "id": 6729, - "guid": "5febb8f6-5934-485b-ae1d-21aeaf29bd81", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Camila Fulton", - "company": "Cryptotegrity", - "phone": "830-528-2697", - "email": "camila@cryptotegrity.com" - }, - { - "id": 6730, - "guid": "14c31303-04eb-466b-a353-3cff2d82b6a6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sydney Brickman", - "company": "Robotomic", - "phone": "891-407-2305", - "email": "sydney@robotomic.com" - }, - { - "id": 6731, - "guid": "2118376f-7e5a-42ce-9709-147ba2f9866b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Brickman", - "company": "Robotomic", - "phone": "881-556-3966", - "email": "sarah@robotomic.com" - }, - { - "id": 6732, - "guid": "d15cc7c8-92d7-45ae-8709-fec9cecaf5d3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kimberly Sheldon", - "company": "Cryptotemplate", - "phone": "825-496-3831", - "email": "kimberly@cryptotemplate.com" - }, - { - "id": 6733, - "guid": "022f2be6-a8b1-44f3-a726-babbaa0ea09e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mia Wesley", - "company": "Infragraph", - "phone": "867-520-2504", - "email": "mia@infragraph.com" - }, - { - "id": 6734, - "guid": "0b071a15-a9e3-45d3-9296-6f6cf225a79c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaylee Galbraith", - "company": "Truetomic", - "phone": "836-590-3796", - "email": "kaylee@truetomic.com" - }, - { - "id": 6735, - "guid": "584058e3-320a-487d-8923-3eb711e41ee0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Hamphrey", - "company": "Polytheon", - "phone": "800-509-2490", - "email": "alyssa@polytheon.com" - }, - { - "id": 6736, - "guid": "39b679ff-c91e-466a-9f0b-722bdc506112", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Gerald", - "company": "Ventanium", - "phone": "897-540-2839", - "email": "emma@ventanium.com" - }, - { - "id": 6737, - "guid": "9f5b2b18-d212-4b2c-a51a-85ffdf6123ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Goodman", - "company": "Entcast", - "phone": "884-502-2637", - "email": "charlotte@entcast.com" - }, - { - "id": 6738, - "guid": "85329e12-67b4-4b76-81a8-c24fdc65b299", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Stanley", - "company": "Teratopia", - "phone": "869-430-3241", - "email": "emma@teratopia.com" - }, - { - "id": 6739, - "guid": "28fb830a-7dfc-4ded-bcbe-7dff17643217", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ashley Daniels", - "company": "Compuamerica", - "phone": "864-501-3478", - "email": "ashley@compuamerica.com" - }, - { - "id": 6740, - "guid": "227ed7a3-7b74-4f67-9e57-19f42620be24", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Goldman", - "company": "Skydata", - "phone": "856-567-3149", - "email": "lauren@skydata.com" - }, - { - "id": 6741, - "guid": "70e9accd-106c-4131-b49e-b422bde4cec1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Vaughan", - "company": "Generola", - "phone": "848-418-3094", - "email": "paige@generola.com" - }, - { - "id": 6742, - "guid": "5c989632-a70a-45a8-b0a8-667d5c75909c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Murphy", - "company": "Entcast", - "phone": "861-541-3388", - "email": "madeline@entcast.com" - }, - { - "id": 6743, - "guid": "ecd35919-b8f4-4bd7-ad42-ebec7e553c71", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Addison Day", - "company": "Rapigrafix", - "phone": "860-427-2802", - "email": "addison@rapigrafix.com" - }, - { - "id": 6744, - "guid": "30cc326e-bbcc-4f1f-bfd1-b86a704e0e13", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Wainwright", - "company": "Syssoft", - "phone": "864-477-3138", - "email": "olivia@syssoft.com" - }, - { - "id": 6745, - "guid": "d32eee18-23d6-457e-bacc-2ee5c2a0e428", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Wood", - "company": "Steganoconiche", - "phone": "804-508-3421", - "email": "caroline@steganoconiche.com" - }, - { - "id": 6746, - "guid": "028b7726-ed61-4364-b951-7968f6e0f9a1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Conors", - "company": "Aprama", - "phone": "803-444-3760", - "email": "amelia@aprama.com" - }, - { - "id": 6747, - "guid": "36101e9b-593b-45be-b251-624d9f9e283c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Chloe Mercer", - "company": "Orthomedia", - "phone": "870-598-2569", - "email": "chloe@orthomedia.com" - }, - { - "id": 6748, - "guid": "05c011cf-8bc6-4381-9d51-0e822073ef60", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Wayne", - "company": "Fibrotopia", - "phone": "846-519-2215", - "email": "natalie@fibrotopia.com" - }, - { - "id": 6749, - "guid": "04ee71fa-4287-41ce-b1ac-89b11bf125a5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Hailey", - "company": "Generola", - "phone": "895-572-2944", - "email": "jasmine@generola.com" - }, - { - "id": 6750, - "guid": "d43dfaf7-8cd4-488d-932c-8b59275f4cae", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Creighton", - "company": "Teratopia", - "phone": "851-582-2613", - "email": "rachel@teratopia.com" - }, - { - "id": 6751, - "guid": "a197e045-0035-49ea-834d-4d729eed1e3e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Stanley", - "company": "Safeagra", - "phone": "820-548-3001", - "email": "leah@safeagra.com" - }, - { - "id": 6752, - "guid": "90982423-23ca-4043-9951-7f99b99b30cb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Valeria Davidson", - "company": "Vencom", - "phone": "809-555-2347", - "email": "valeria@vencom.com" - }, - { - "id": 6753, - "guid": "989c67a3-1f3a-46a1-94ef-8786081f92f6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Day", - "company": "Compuamerica", - "phone": "880-511-3288", - "email": "julia@compuamerica.com" - }, - { - "id": 6754, - "guid": "6816ad0d-8f63-4240-b3c5-c85ee15b1553", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Payton Timmons", - "company": "Westmedia", - "phone": "841-585-2455", - "email": "payton@westmedia.com" - }, - { - "id": 6755, - "guid": "36eb4681-9e65-4580-ae6e-b0d2486de9a2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Peyton Walkman", - "company": "Conotomics", - "phone": "893-531-2267", - "email": "peyton@conotomics.com" - }, - { - "id": 6756, - "guid": "29229ea1-3856-4f54-8c2e-ce0284a427b2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Miers", - "company": "InfoAirway", - "phone": "898-522-2156", - "email": "serenity@infoairway.com" - }, - { - "id": 6757, - "guid": "4d48c672-52b5-4759-a7bb-1cfd52e9c0c0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Michaelson", - "company": "Anaframe", - "phone": "803-459-2572", - "email": "ashley@anaframe.com" - }, - { - "id": 6758, - "guid": "23b3dbaf-b3f9-46cb-b58f-26c9835e00cf", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Brooks", - "company": "Vencom", - "phone": "823-408-3582", - "email": "julia@vencom.com" - }, - { - "id": 6759, - "guid": "a993f5e6-0b8d-48cf-9880-b87ac0cc5c12", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Carrington", - "company": "Safeagra", - "phone": "891-423-2982", - "email": "kaylee@safeagra.com" - }, - { - "id": 6760, - "guid": "f568c992-73c5-44e4-af8a-d4116cdb0712", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Hailey", - "company": "Allnet", - "phone": "889-426-3710", - "email": "ashley@allnet.com" - }, - { - "id": 6761, - "guid": "458a4e46-b8ed-48f7-b93b-a247a544ba1d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Cramer", - "company": "Systheon", - "phone": "842-495-2127", - "email": "gabrielle@systheon.com" - }, - { - "id": 6762, - "guid": "f90fa24e-2bd3-4e8a-8df1-735ee1ff9376", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Thorndike", - "company": "Titanigraf", - "phone": "875-488-3221", - "email": "makayla@titanigraf.com" - }, - { - "id": 6763, - "guid": "1d17e9fb-e18c-4164-ae62-28f03f25cc9e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Chesterton", - "company": "Entcast", - "phone": "829-442-2935", - "email": "sophie@entcast.com" - }, - { - "id": 6764, - "guid": "4751c160-f41d-40eb-95e5-f6b94edd048f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gabrielle Wesley", - "company": "Openserve", - "phone": "883-540-2589", - "email": "gabrielle@openserve.com" - }, - { - "id": 6765, - "guid": "88f85502-20c5-4d48-a463-5269c4e77fec", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Timmons", - "company": "Nanobanc", - "phone": "839-432-3404", - "email": "samantha@nanobanc.com" - }, - { - "id": 6766, - "guid": "75bc246d-5100-4a03-aa77-37b8b94a509c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Layla Smith", - "company": "Thermotomic", - "phone": "811-466-3552", - "email": "layla@thermotomic.com" - }, - { - "id": 6767, - "guid": "eb9afb63-6c99-43c7-8d61-0f198fd8884c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Milton", - "company": "Generola", - "phone": "871-576-3777", - "email": "ava@generola.com" - }, - { - "id": 6768, - "guid": "8c084b70-9665-43eb-96af-7ff4afa56df2", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Carey", - "company": "Skydata", - "phone": "805-414-3458", - "email": "mya@skydata.com" - }, - { - "id": 6769, - "guid": "6ec2727b-9839-4d7a-8b76-67120680b83b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra Gilmore", - "company": "eSteganoergy", - "phone": "869-537-2965", - "email": "alexandra@esteganoergy.com" - }, - { - "id": 6770, - "guid": "e8cdba9b-7c16-4cbe-bf46-ea3b994c4ed5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aubrey Osborne", - "company": "Compuamerica", - "phone": "827-413-2421", - "email": "aubrey@compuamerica.com" - }, - { - "id": 6771, - "guid": "d9fcd2eb-bff9-42da-b0b9-d171968c341e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mackenzie Otis", - "company": "Dynarama", - "phone": "852-473-2921", - "email": "mackenzie@dynarama.com" - }, - { - "id": 6772, - "guid": "697e2bf3-a022-4881-89e3-559c47d3b5a1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Gilbert", - "company": "Robocomm", - "phone": "833-578-2969", - "email": "anna@robocomm.com" - }, - { - "id": 6773, - "guid": "eb23fd7f-1459-4ea1-b144-a7d549431d9d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Cramer", - "company": "Truegate", - "phone": "897-432-3890", - "email": "gianna@truegate.com" - }, - { - "id": 6774, - "guid": "3da5b5e4-f0e2-4fbf-affe-71c67b27a3f3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Ford", - "company": "Xeicon", - "phone": "862-567-3379", - "email": "brooke@xeicon.com" - }, - { - "id": 6775, - "guid": "b242abe2-3b36-49f9-85d1-df09265f6754", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Chloe Nathan", - "company": "Techtron", - "phone": "832-406-2075", - "email": "chloe@techtron.com" - }, - { - "id": 6776, - "guid": "cd291118-528a-4099-82d0-48624b365099", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Eva Fisher", - "company": "Anaframe", - "phone": "805-553-2342", - "email": "eva@anaframe.com" - }, - { - "id": 6777, - "guid": "ae32b6db-fcb4-4b7b-91ed-02f6a68cb119", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Galbraith", - "company": "Fibroserve", - "phone": "885-457-3715", - "email": "eva@fibroserve.com" - }, - { - "id": 6778, - "guid": "27153e13-310a-4532-9894-819423579e6a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Gardner", - "company": "Titanirola", - "phone": "847-580-3479", - "email": "aaliyah@titanirola.com" - }, - { - "id": 6779, - "guid": "05569b7e-cd00-410d-a549-1c69fe8af140", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Layla Carey", - "company": "US Infratouch", - "phone": "889-483-2440", - "email": "layla@us infratouch.com" - }, - { - "id": 6780, - "guid": "81126982-58b3-4f0f-be69-a6f26308bc69", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Amelia Young", - "company": "Westgate", - "phone": "821-447-3121", - "email": "amelia@westgate.com" - }, - { - "id": 6781, - "guid": "e78dbeb5-51d6-403d-9e6a-20231c8eac4c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaylee Hardman", - "company": "Infragraph", - "phone": "895-426-3858", - "email": "kaylee@infragraph.com" - }, - { - "id": 6782, - "guid": "a3133be5-0a7e-4fe0-beaa-a7370ae33a85", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Goldman", - "company": "Safetrust", - "phone": "875-446-3602", - "email": "trinity@safetrust.com" - }, - { - "id": 6783, - "guid": "35dc3fa0-752d-455d-82b7-bd6438fcf728", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Hardman", - "company": "Teknoplexon", - "phone": "836-445-2528", - "email": "sophie@teknoplexon.com" - }, - { - "id": 6784, - "guid": "f98f817e-74f0-4a00-b7f4-8d87e38263e2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Khloe Wayne", - "company": "SysVenamerica", - "phone": "849-548-3330", - "email": "khloe@sysvenamerica.com" - }, - { - "id": 6785, - "guid": "a0054bea-3755-4fcb-8e6b-27c143bdfe45", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Ogden", - "company": "Multitiqua", - "phone": "801-475-3085", - "email": "jasmine@multitiqua.com" - }, - { - "id": 6786, - "guid": "1cb4777d-7e4f-45f3-8ec0-6c2a1a1b8290", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Gibbs", - "company": "Qualserve", - "phone": "884-513-2355", - "email": "anna@qualserve.com" - }, - { - "id": 6787, - "guid": "86fcca65-8f31-4134-9256-a326df5ee370", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ella Stanley", - "company": "Systheon", - "phone": "846-498-2832", - "email": "ella@systheon.com" - }, - { - "id": 6788, - "guid": "16ff2b6f-874e-4139-bc2a-7a85833e7f0a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Valeria Daniels", - "company": "Fibrotopia", - "phone": "880-445-2554", - "email": "valeria@fibrotopia.com" - }, - { - "id": 6789, - "guid": "bbaed2f7-9cd8-4d48-879a-2063ef657bd3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Gustman", - "company": "Jamrola", - "phone": "828-526-3805", - "email": "peyton@jamrola.com" - }, - { - "id": 6790, - "guid": "9b4696f7-c011-4827-af1d-8574b7a2460b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Waller", - "company": "Pericenta", - "phone": "800-543-2264", - "email": "olivia@pericenta.com" - }, - { - "id": 6791, - "guid": "40f18a12-f5b9-40ee-8bb0-e2f4c1cf06c8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Morrison", - "company": "Enlogia", - "phone": "865-490-2901", - "email": "mackenzie@enlogia.com" - }, - { - "id": 6792, - "guid": "521aca35-3143-403e-927a-c037d8ba1651", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Otis", - "company": "Gigaura", - "phone": "803-456-3808", - "email": "khloe@gigaura.com" - }, - { - "id": 6793, - "guid": "2669adf9-65dd-4cab-a4b8-2da80fa7a092", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Leah Thornton", - "company": "Teknoplexon", - "phone": "828-593-3571", - "email": "leah@teknoplexon.com" - }, - { - "id": 6794, - "guid": "9d957eca-233d-4320-8f9c-829f760d7baf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Carey", - "company": "Westtomik", - "phone": "830-589-2840", - "email": "caroline@westtomik.com" - }, - { - "id": 6795, - "guid": "eae52199-1923-4083-a012-c677d6c0d49e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Goodman", - "company": "iQualcar", - "phone": "894-538-2000", - "email": "gianna@iqualcar.com" - }, - { - "id": 6796, - "guid": "3d3db9a8-9a90-4fe2-ba14-7ab3a3ba012c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Osborne", - "company": "Aprama", - "phone": "833-565-3301", - "email": "zoey@aprama.com" - }, - { - "id": 6797, - "guid": "24c2a9f2-7cf3-4343-aaf8-af22e493d31e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Charlson", - "company": "Dynarama", - "phone": "843-448-3664", - "email": "camila@dynarama.com" - }, - { - "id": 6798, - "guid": "17a8d10d-76ae-4466-b808-81671d1b54ec", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Oldridge", - "company": "RoboAerlogix", - "phone": "800-437-3444", - "email": "serenity@roboaerlogix.com" - }, - { - "id": 6799, - "guid": "54ed9e34-916f-4620-b7f5-fb20a91f2321", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Chandter", - "company": "iSkyvaco", - "phone": "882-536-2401", - "email": "evelyn@iskyvaco.com" - }, - { - "id": 6800, - "guid": "e38a5054-71c5-4a0a-a68e-bfd8b674d0cf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Carter", - "company": "Generola", - "phone": "801-506-3367", - "email": "mia@generola.com" - }, - { - "id": 6801, - "guid": "4ada1686-8a1a-4e9c-97d0-b44162e0e543", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Calhoun", - "company": "Pacwest", - "phone": "899-549-3654", - "email": "mariah@pacwest.com" - }, - { - "id": 6802, - "guid": "90468bfd-cb85-4d5d-9cf7-4592d7d2d77a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Makayla Vance", - "company": "Netsystems", - "phone": "803-592-3339", - "email": "makayla@netsystems.com" - }, - { - "id": 6803, - "guid": "1f44d9e1-0c75-4558-9cc2-c737b1d22d8d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Destiny Vaughan", - "company": "Allnet", - "phone": "810-435-2930", - "email": "destiny@allnet.com" - }, - { - "id": 6804, - "guid": "4cd69cf2-8e28-49ce-a5fb-1eb7381152af", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Michaelson", - "company": "Keytheon", - "phone": "809-537-3208", - "email": "andrea@keytheon.com" - }, - { - "id": 6805, - "guid": "0cf5d58e-7748-45fe-8a04-0231009677fa", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Wainwright", - "company": "iEnland", - "phone": "865-430-3808", - "email": "olivia@ienland.com" - }, - { - "id": 6806, - "guid": "9470d509-8f22-42a6-a02c-10d03566b2d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Oldman", - "company": "Airdyne", - "phone": "829-402-2943", - "email": "gabrielle@airdyne.com" - }, - { - "id": 6807, - "guid": "8c1b9cbb-6ade-4c7a-a8d0-1ea3d1b14ac3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Angelina Calhoun", - "company": "Netseco", - "phone": "810-564-2291", - "email": "angelina@netseco.com" - }, - { - "id": 6808, - "guid": "1ca87a80-4a7d-4157-8864-c67a5717b06d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Thomson", - "company": "Fibrotopia", - "phone": "874-539-3843", - "email": "charlotte@fibrotopia.com" - }, - { - "id": 6809, - "guid": "af7a212c-7fd4-4321-9170-34bc22f05d9c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Cook", - "company": "Ameritron", - "phone": "883-457-3499", - "email": "gabriella@ameritron.com" - }, - { - "id": 6810, - "guid": "3c5c7003-535b-4b55-ad32-13814e1188b5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Webster", - "company": "Celgra", - "phone": "873-400-2674", - "email": "bella@celgra.com" - }, - { - "id": 6811, - "guid": "26db5677-dd52-42a3-8ffa-997a99ce7787", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Molligan", - "company": "Syssoft", - "phone": "875-586-2633", - "email": "allison@syssoft.com" - }, - { - "id": 6812, - "guid": "a386547a-76ac-476f-b475-f9ac69acffeb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Webster", - "company": "Nanobanc", - "phone": "888-474-2143", - "email": "mya@nanobanc.com" - }, - { - "id": 6813, - "guid": "b8338ca9-c530-4b71-908c-53ee1455ffe3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Crossman", - "company": "Safeagra", - "phone": "872-579-2494", - "email": "mackenzie@safeagra.com" - }, - { - "id": 6814, - "guid": "102ab36e-1357-4aef-94f8-f14cb9c94905", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Sherlock", - "company": "Conotomics", - "phone": "851-566-3862", - "email": "camila@conotomics.com" - }, - { - "id": 6815, - "guid": "3332dc7a-997b-4dc6-a068-014a11411f66", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Carter", - "company": "Keytheon", - "phone": "814-585-2679", - "email": "angelina@keytheon.com" - }, - { - "id": 6816, - "guid": "7e4096c2-b417-4e9e-8715-cb094592dbb3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Hoggarth", - "company": "iMedconik", - "phone": "864-573-3919", - "email": "payton@imedconik.com" - }, - { - "id": 6817, - "guid": "2061afc1-8bc0-4db5-a3b8-bed8a3d7685a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bailey Winter", - "company": "Mescatron", - "phone": "885-463-2141", - "email": "bailey@mescatron.com" - }, - { - "id": 6818, - "guid": "6e049364-2c75-4379-b69a-c340ac209d0a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ava Wallace", - "company": "SysVenamerica", - "phone": "866-597-3727", - "email": "ava@sysvenamerica.com" - }, - { - "id": 6819, - "guid": "71823f45-3e31-492e-8d42-87fc94725751", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Wayne", - "company": "Genland", - "phone": "864-480-2352", - "email": "aubrey@genland.com" - }, - { - "id": 6820, - "guid": "2f28c64f-e03e-4988-be0e-9c1e5cb2563b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kayla Goodman", - "company": "Tekcar", - "phone": "845-539-3038", - "email": "kayla@tekcar.com" - }, - { - "id": 6821, - "guid": "8a51b18b-5a62-4a7a-a99b-3ebbb7476a05", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sofia Young", - "company": "Infraique", - "phone": "893-442-2944", - "email": "sofia@infraique.com" - }, - { - "id": 6822, - "guid": "04d52c4c-530e-4d2b-9bdd-d228d0863110", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Hancock", - "company": "Idmax", - "phone": "859-411-2630", - "email": "autumn@idmax.com" - }, - { - "id": 6823, - "guid": "2dca4929-9ff1-4126-b261-8eea1859858c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hannah Vance", - "company": "Pericenta", - "phone": "858-464-3410", - "email": "hannah@pericenta.com" - }, - { - "id": 6824, - "guid": "1e5579ed-4907-4cae-8753-2c471ba3e45d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ava WifKinson", - "company": "Infraique", - "phone": "885-542-2680", - "email": "ava@infraique.com" - }, - { - "id": 6825, - "guid": "d6d76e24-0300-4e5d-8870-ce466df565a3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Campbell", - "company": "Superscope", - "phone": "868-580-2319", - "email": "olivia@superscope.com" - }, - { - "id": 6826, - "guid": "ccc200cf-4bf5-48f7-b198-165dd78d29f4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Stanley", - "company": "Rapigrafix", - "phone": "874-429-3399", - "email": "brooke@rapigrafix.com" - }, - { - "id": 6827, - "guid": "9fe1c1fc-58bd-495e-a6ba-2df29cc1c70e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton WifKinson", - "company": "Safeagra", - "phone": "809-531-2806", - "email": "peyton@safeagra.com" - }, - { - "id": 6828, - "guid": "869138e1-bc08-419e-adb7-07e3af86e95f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Conors", - "company": "Truegate", - "phone": "836-455-3000", - "email": "addison@truegate.com" - }, - { - "id": 6829, - "guid": "bcd7f089-9872-4ec7-9529-ec4de6678d50", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Wainwright", - "company": "Safetrust", - "phone": "869-434-3197", - "email": "julia@safetrust.com" - }, - { - "id": 6830, - "guid": "f8942bec-4151-4285-a78e-82d53a959589", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Winter", - "company": "Videobanc", - "phone": "863-491-2969", - "email": "bella@videobanc.com" - }, - { - "id": 6831, - "guid": "0bd3e701-1c07-4db4-80d3-8805403d96ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Camila Wayne", - "company": "Turbomart", - "phone": "834-508-3684", - "email": "camila@turbomart.com" - }, - { - "id": 6832, - "guid": "b7f9e631-aeb9-4c1e-a2e3-d14d7691577a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Vanessa Thomson", - "company": "Dynarama", - "phone": "858-542-3162", - "email": "vanessa@dynarama.com" - }, - { - "id": 6833, - "guid": "643e1369-ffd2-448e-a7cf-3f11de0f2f11", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Claire Neal", - "company": "Pericenta", - "phone": "807-523-3662", - "email": "claire@pericenta.com" - }, - { - "id": 6834, - "guid": "bc64cb01-4ff1-44d4-bbd9-694ba3f27f98", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Clapton", - "company": "Inridium", - "phone": "817-564-3695", - "email": "isabella@inridium.com" - }, - { - "id": 6835, - "guid": "9053ec99-162e-4a39-b84b-7cf3ba3a6401", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Conors", - "company": "iQualcar", - "phone": "880-404-2579", - "email": "eva@iqualcar.com" - }, - { - "id": 6836, - "guid": "cbe28b6b-9106-4eb3-9323-7baccd760a25", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Vaughan", - "company": "Robocomm", - "phone": "899-424-2707", - "email": "riley@robocomm.com" - }, - { - "id": 6837, - "guid": "001ea65f-87d9-4a76-aeb6-d3a1347b2f86", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ella Clapton", - "company": "Proline", - "phone": "800-561-3912", - "email": "ella@proline.com" - }, - { - "id": 6838, - "guid": "babe2c1e-6dcb-4ca2-b8d5-b4cbc3087a8d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Campbell", - "company": "US Omnigraphik", - "phone": "806-407-2979", - "email": "destiny@us omnigraphik.com" - }, - { - "id": 6839, - "guid": "ba344225-0905-45cc-be29-b60f37563c58", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Turner", - "company": "Airdyne", - "phone": "834-555-3472", - "email": "emma@airdyne.com" - }, - { - "id": 6840, - "guid": "c6c0dec4-95f2-4739-80ed-77eb3c67e98a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Olivia Miln", - "company": "Indisco", - "phone": "887-581-3498", - "email": "olivia@indisco.com" - }, - { - "id": 6841, - "guid": "57edfad1-3a16-444d-8d09-31ed9aa72229", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Gardner", - "company": "Netsystems", - "phone": "895-497-3259", - "email": "molly@netsystems.com" - }, - { - "id": 6842, - "guid": "98de04b4-1904-40f8-8193-3a44ee2535c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Hodges", - "company": "Qualserve", - "phone": "864-590-3597", - "email": "abigail@qualserve.com" - }, - { - "id": 6843, - "guid": "a76714b9-453b-4eeb-9b5d-b00d9539b3eb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Owen", - "company": "Ameritron", - "phone": "894-420-3542", - "email": "alexa@ameritron.com" - }, - { - "id": 6844, - "guid": "abffe708-fcd9-4d2a-bebb-2610fcda4063", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Conors", - "company": "Allphysiche", - "phone": "812-445-3755", - "email": "gabriella@allphysiche.com" - }, - { - "id": 6845, - "guid": "9f5fa1b3-40c8-4ddc-8a00-02d55d01cda6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Abramson", - "company": "Videobanc", - "phone": "842-430-3294", - "email": "katherine@videobanc.com" - }, - { - "id": 6846, - "guid": "ba243aed-35e7-4901-b1c8-662959698f1a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Hailey", - "company": "Polytheon", - "phone": "832-477-3781", - "email": "samantha@polytheon.com" - }, - { - "id": 6847, - "guid": "192212f6-998d-43ed-992a-45bec4be02b9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Thorndike", - "company": "Syssoft", - "phone": "825-419-3439", - "email": "hailey@syssoft.com" - }, - { - "id": 6848, - "guid": "96a9ffc3-0e56-4fe9-b6ce-a8c20241ecef", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Miller", - "company": "Aluco", - "phone": "859-474-3115", - "email": "gabriella@aluco.com" - }, - { - "id": 6849, - "guid": "2cdfa66d-4311-49bf-88a7-9793ddba8285", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Thomson", - "company": "Airdyne", - "phone": "899-487-2889", - "email": "emily@airdyne.com" - }, - { - "id": 6850, - "guid": "d27ec863-5999-43d6-bc24-19de71d0fc50", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Vaughan", - "company": "Transtouch", - "phone": "819-571-2401", - "email": "amelia@transtouch.com" - }, - { - "id": 6851, - "guid": "fec66a66-b7d0-4191-a196-f11f602e5b7c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Calhoun", - "company": "Robotomic", - "phone": "855-460-2079", - "email": "arianna@robotomic.com" - }, - { - "id": 6852, - "guid": "d3acbb2e-7153-4a0a-8117-012954755cb4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ariana Sherlock", - "company": "Turbomart", - "phone": "844-445-3479", - "email": "ariana@turbomart.com" - }, - { - "id": 6853, - "guid": "13315527-5aa8-4a7f-8cb4-d896d1180523", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Abramson", - "company": "Pacwest", - "phone": "884-445-2480", - "email": "jocelyn@pacwest.com" - }, - { - "id": 6854, - "guid": "5390121a-2d20-4213-a4de-e43d184fb968", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Miln", - "company": "Tekcar", - "phone": "858-582-2656", - "email": "samantha@tekcar.com" - }, - { - "id": 6855, - "guid": "7f94d8c0-584c-44e7-a92d-7caccb7d3e53", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katelyn Wayne", - "company": "iOptystix", - "phone": "834-548-2459", - "email": "katelyn@ioptystix.com" - }, - { - "id": 6856, - "guid": "8aacd33d-d786-415d-a55f-080588b6d1df", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Haig", - "company": "Multitiqua", - "phone": "810-499-2701", - "email": "sarah@multitiqua.com" - }, - { - "id": 6857, - "guid": "59dde9db-3d85-462f-ad5e-a2eeb90f8afd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Wayne", - "company": "Teraserv", - "phone": "890-417-2290", - "email": "faith@teraserv.com" - }, - { - "id": 6858, - "guid": "df4d19b6-4eab-4933-ae57-6dd5c5949b6c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Stanley", - "company": "Cryptotegrity", - "phone": "857-467-2705", - "email": "lily@cryptotegrity.com" - }, - { - "id": 6859, - "guid": "187dbec5-fb72-430f-a86b-9f77aa03a459", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Sherlock", - "company": "Aprama", - "phone": "850-542-2305", - "email": "kimberly@aprama.com" - }, - { - "id": 6860, - "guid": "d4ca8bbd-f431-4686-9d8f-4d161592c60e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Wesley", - "company": "Robotomic", - "phone": "806-551-3884", - "email": "mariah@robotomic.com" - }, - { - "id": 6861, - "guid": "77ac8c9e-0f53-4368-94f7-499887e0419b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke White", - "company": "Orthomedia", - "phone": "858-542-2523", - "email": "brooke@orthomedia.com" - }, - { - "id": 6862, - "guid": "d9737495-3561-4c63-96a3-8013a3292b34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Nash", - "company": "Robotemplate", - "phone": "881-430-2992", - "email": "destiny@robotemplate.com" - }, - { - "id": 6863, - "guid": "60dff6fe-efa6-45be-b23e-2f819b93d09e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Riley Cook", - "company": "Genland", - "phone": "835-461-3226", - "email": "riley@genland.com" - }, - { - "id": 6864, - "guid": "723ed9ba-cbb4-4b37-95b5-dd6ab5980dc8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emily Nathan", - "company": "Openserve", - "phone": "811-575-3310", - "email": "emily@openserve.com" - }, - { - "id": 6865, - "guid": "695ab7aa-6591-493c-9598-bbfb4388f7ee", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Goldman", - "company": "Xeicon", - "phone": "899-527-3878", - "email": "destiny@xeicon.com" - }, - { - "id": 6866, - "guid": "fdcd51a4-0c59-4cce-9c78-91a149ae2ab7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Carey", - "company": "Navivacs", - "phone": "872-462-2621", - "email": "kylie@navivacs.com" - }, - { - "id": 6867, - "guid": "bc37a719-6840-4319-9620-a365c446583f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Gilson", - "company": "Openserve", - "phone": "815-596-3565", - "email": "kaylee@openserve.com" - }, - { - "id": 6868, - "guid": "a718c859-1e9b-4667-bfd2-bbaa98686ffb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katherine Smith", - "company": "Unconix", - "phone": "842-486-2613", - "email": "katherine@unconix.com" - }, - { - "id": 6869, - "guid": "e1a14157-45cc-4daa-a172-2c69db9d1e1f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lauren Gustman", - "company": "InfoAirway", - "phone": "828-497-3678", - "email": "lauren@infoairway.com" - }, - { - "id": 6870, - "guid": "405c1ac3-98b5-404f-867c-486878b9f0df", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Haig", - "company": "Vencom", - "phone": "856-567-2981", - "email": "riley@vencom.com" - }, - { - "id": 6871, - "guid": "a9e901c1-01c3-4f68-b568-0bd3f9458c13", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Molligan", - "company": "Gigaura", - "phone": "818-599-2786", - "email": "autumn@gigaura.com" - }, - { - "id": 6872, - "guid": "23ea6aa3-ea43-4140-8780-1e54bfd70697", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine Wainwright", - "company": "Fibrotouch", - "phone": "858-528-3497", - "email": "jasmine@fibrotouch.com" - }, - { - "id": 6873, - "guid": "fff19d1b-aa9f-4af0-8ad6-8457091eb811", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooklyn Wainwright", - "company": "iQualcar", - "phone": "876-599-3924", - "email": "brooklyn@iqualcar.com" - }, - { - "id": 6874, - "guid": "f2b27228-61de-4979-ad55-637f77efe598", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Wainwright", - "company": "Aprama", - "phone": "849-550-2484", - "email": "grace@aprama.com" - }, - { - "id": 6875, - "guid": "a4a2fba6-4c4d-4c45-8727-89647096535d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madelyn Miers", - "company": "Allnet", - "phone": "802-573-2353", - "email": "madelyn@allnet.com" - }, - { - "id": 6876, - "guid": "c091af7e-7e55-4f11-9dab-dfd1d77ce32d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Charlotte Thorndike", - "company": "Indisco", - "phone": "896-528-3514", - "email": "charlotte@indisco.com" - }, - { - "id": 6877, - "guid": "74604416-a37c-4cf2-bafa-03c61e3237d3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Anna Gate", - "company": "Videobanc", - "phone": "868-569-2990", - "email": "anna@videobanc.com" - }, - { - "id": 6878, - "guid": "9fb7ec41-a3cf-4a97-9e94-d176f802dc9a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Conors", - "company": "Netsystems", - "phone": "876-529-3810", - "email": "eva@netsystems.com" - }, - { - "id": 6879, - "guid": "e6b3bbcd-a9e1-4e6e-89a0-5d311eb26013", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Paige Conors", - "company": "Aprama", - "phone": "861-514-2407", - "email": "paige@aprama.com" - }, - { - "id": 6880, - "guid": "4e5d6086-bec2-43e1-b480-bffdd0281cf3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Gilbert", - "company": "Enlogia", - "phone": "891-483-2086", - "email": "leah@enlogia.com" - }, - { - "id": 6881, - "guid": "ac41e71b-bd29-420b-ad9b-a25d155b5cbf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Audrey Wesley", - "company": "Thermotomic", - "phone": "843-566-3121", - "email": "audrey@thermotomic.com" - }, - { - "id": 6882, - "guid": "5c031e6e-34bc-4b0b-bc15-970f9a38d66a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Crossman", - "company": "Nanobanc", - "phone": "854-587-2891", - "email": "emily@nanobanc.com" - }, - { - "id": 6883, - "guid": "0b027c29-66f7-4811-a5a2-dc8db4aa2bff", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Bush", - "company": "Titanigraf", - "phone": "808-430-2219", - "email": "zoey@titanigraf.com" - }, - { - "id": 6884, - "guid": "fabf07a7-486f-4624-9890-b4ca13d79d62", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Wayne", - "company": "Westtomik", - "phone": "871-600-3105", - "email": "bella@westtomik.com" - }, - { - "id": 6885, - "guid": "ec35e08a-d892-454a-896f-8a5f992cf055", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Wainwright", - "company": "Videobanc", - "phone": "837-540-3134", - "email": "rachel@videobanc.com" - }, - { - "id": 6886, - "guid": "2f17f89f-e7bd-4f6b-b5b6-ec242c331fe8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Neal", - "company": "Skydata", - "phone": "898-576-2542", - "email": "kylie@skydata.com" - }, - { - "id": 6887, - "guid": "9ded0ca9-134c-4941-915b-bc954be30f0d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Sherlock", - "company": "iEnland", - "phone": "805-450-2575", - "email": "isabella@ienland.com" - }, - { - "id": 6888, - "guid": "f0a6aa5b-5e7e-4138-a1be-413b7803e12c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Oldridge", - "company": "Polytheon", - "phone": "851-463-3728", - "email": "aaliyah@polytheon.com" - }, - { - "id": 6889, - "guid": "395bd003-aba9-486f-b0bd-94f497334eda", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Osborne", - "company": "Robotemplate", - "phone": "839-560-3159", - "email": "savannah@robotemplate.com" - }, - { - "id": 6890, - "guid": "56a166fc-0be7-495f-b5bd-9ee0bedbcee4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Carroll", - "company": "Fibrotouch", - "phone": "813-551-2812", - "email": "peyton@fibrotouch.com" - }, - { - "id": 6891, - "guid": "eaa1fcba-cb5b-45de-8a44-73091757f7e3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Hancock", - "company": "Nanobanc", - "phone": "817-419-3789", - "email": "melanie@nanobanc.com" - }, - { - "id": 6892, - "guid": "0ce1f1ad-a985-4bb5-b1c5-e83e9e9b81ce", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lillian Creighton", - "company": "Teratopia", - "phone": "853-495-3433", - "email": "lillian@teratopia.com" - }, - { - "id": 6893, - "guid": "5a4f22af-00ee-4286-892e-536eb9039416", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Hardman", - "company": "Sontopia", - "phone": "828-424-2936", - "email": "autumn@sontopia.com" - }, - { - "id": 6894, - "guid": "5f50e6dd-3c66-4011-80fb-d04324ea6812", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Campbell", - "company": "Infraique", - "phone": "823-594-2183", - "email": "peyton@infraique.com" - }, - { - "id": 6895, - "guid": "e77a04ba-eb30-45fa-ab4b-2b8d9fdb6fbb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Daniels", - "company": "US Infratouch", - "phone": "899-439-3897", - "email": "ariana@us infratouch.com" - }, - { - "id": 6896, - "guid": "0dace0ee-9e12-40d4-9b23-335a479299cb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Gilbert", - "company": "iEnland", - "phone": "827-487-2172", - "email": "sophie@ienland.com" - }, - { - "id": 6897, - "guid": "80c9224d-2811-482c-82b5-e4feb5fe408a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Khloe Carter", - "company": "Compuamerica", - "phone": "843-447-3291", - "email": "khloe@compuamerica.com" - }, - { - "id": 6898, - "guid": "5ab39d7e-c7f1-4af8-9d3b-149dd2305485", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Bush", - "company": "Anagraph", - "phone": "875-461-3197", - "email": "emily@anagraph.com" - }, - { - "id": 6899, - "guid": "93f1e51c-caa4-4f8b-bb96-eb4773df48eb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Fulton", - "company": "Qualserve", - "phone": "868-560-2086", - "email": "alexandra@qualserve.com" - }, - { - "id": 6900, - "guid": "4d7e7b4b-d978-484e-93d6-5e60f5fc7d67", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Hawkins", - "company": "Transtouch", - "phone": "869-481-2079", - "email": "eva@transtouch.com" - }, - { - "id": 6901, - "guid": "60e36fe6-56fd-4c0a-9d07-0938d57e3d86", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Ford", - "company": "RoboAerlogix", - "phone": "873-422-2706", - "email": "lillian@roboaerlogix.com" - }, - { - "id": 6902, - "guid": "f5f46110-2616-44cd-9431-5b47d2956d80", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Carter", - "company": "Interliant", - "phone": "813-559-2180", - "email": "mya@interliant.com" - }, - { - "id": 6903, - "guid": "8098e2c8-6cf2-4d43-b61c-5d7d5b92bfb1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ava Webster", - "company": "Keytheon", - "phone": "870-442-3179", - "email": "ava@keytheon.com" - }, - { - "id": 6904, - "guid": "8fa53489-cc65-4ae4-8b4c-0a5922f273b9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Thorndike", - "company": "Proline", - "phone": "824-472-3083", - "email": "genesis@proline.com" - }, - { - "id": 6905, - "guid": "dfdf7ae0-5171-4745-8c32-f88eb3fbf686", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Addison Day", - "company": "Fibrotopia", - "phone": "837-591-3694", - "email": "addison@fibrotopia.com" - }, - { - "id": 6906, - "guid": "65edf1fa-2f79-42ed-8b1d-e595d0f9ec73", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Hodges", - "company": "Aluco", - "phone": "832-578-2951", - "email": "samantha@aluco.com" - }, - { - "id": 6907, - "guid": "4c9a112d-3a57-4cb4-8114-c734589819f2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Hancock", - "company": "Fibrotopia", - "phone": "845-406-2271", - "email": "alexis@fibrotopia.com" - }, - { - "id": 6908, - "guid": "0fefa260-9ba4-4a87-8fdd-cddfcfd02bf8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Vaughan", - "company": "Techtron", - "phone": "899-447-2041", - "email": "bailey@techtron.com" - }, - { - "id": 6909, - "guid": "eb013a9b-576f-4b56-8dd1-5f50bdb11e59", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Wesley", - "company": "Teraserv", - "phone": "895-429-2670", - "email": "maria@teraserv.com" - }, - { - "id": 6910, - "guid": "91a00b8b-02eb-45d5-9e1d-8d730dbae9b5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Leah Fisher", - "company": "Dynarama", - "phone": "897-587-3364", - "email": "leah@dynarama.com" - }, - { - "id": 6911, - "guid": "70477c40-e953-4b2c-bd61-49f2226dd900", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Molligan", - "company": "Enlogia", - "phone": "891-567-3202", - "email": "nevaeh@enlogia.com" - }, - { - "id": 6912, - "guid": "9fc763f5-6d82-46e2-aad8-b23249237f10", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Gilbert", - "company": "Venconix", - "phone": "840-507-3314", - "email": "abigail@venconix.com" - }, - { - "id": 6913, - "guid": "23ce03ec-cb8b-4662-b2e4-e567bbe81e88", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ava Nathan", - "company": "Turbomart", - "phone": "856-480-2550", - "email": "ava@turbomart.com" - }, - { - "id": 6914, - "guid": "57f1950a-aa4d-4b46-9033-ec3aaa69f025", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Nash", - "company": "Syssoft", - "phone": "803-591-2255", - "email": "sophia@syssoft.com" - }, - { - "id": 6915, - "guid": "4a0f161a-d1fd-43f4-af07-c0c3b51f7963", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Mercer", - "company": "Westtomik", - "phone": "808-457-3320", - "email": "faith@westtomik.com" - }, - { - "id": 6916, - "guid": "a513e25d-da30-467c-ba4d-23685b620282", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Avery Webster", - "company": "iQualcar", - "phone": "804-495-2141", - "email": "avery@iqualcar.com" - }, - { - "id": 6917, - "guid": "71274c04-5675-4d53-9920-e47b7ab9c3e9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Wesley", - "company": "Pacwest", - "phone": "829-473-2027", - "email": "hailey@pacwest.com" - }, - { - "id": 6918, - "guid": "312eb3f9-45dd-4887-8e6a-a9363956ecd0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brianna Hancock", - "company": "Jamrola", - "phone": "809-404-3456", - "email": "brianna@jamrola.com" - }, - { - "id": 6919, - "guid": "445e0e19-64ce-4f58-be09-cc4c31c9b4ef", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Neal", - "company": "Navivacs", - "phone": "861-551-3588", - "email": "aubrey@navivacs.com" - }, - { - "id": 6920, - "guid": "e65bd611-22e2-4bed-962c-e26552b80583", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Hailey", - "company": "Qualserve", - "phone": "831-547-3958", - "email": "zoe@qualserve.com" - }, - { - "id": 6921, - "guid": "a6028e8a-be18-41e7-a9b4-dbf1451eb395", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Caroline Gerald", - "company": "Mescatron", - "phone": "844-570-3912", - "email": "caroline@mescatron.com" - }, - { - "id": 6922, - "guid": "f7817ca9-25f3-4bf8-8e66-26d4754bf854", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Nash", - "company": "Fibroserve", - "phone": "895-428-3622", - "email": "leah@fibroserve.com" - }, - { - "id": 6923, - "guid": "12b26638-871a-40b0-9f73-e52a2db8d61c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Autumn Owen", - "company": "Polytheon", - "phone": "888-469-2993", - "email": "autumn@polytheon.com" - }, - { - "id": 6924, - "guid": "58dcf942-b239-46a9-a53a-bc7f92fb2739", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Murphy", - "company": "Mescaridic", - "phone": "825-557-3766", - "email": "faith@mescaridic.com" - }, - { - "id": 6925, - "guid": "0920c9e8-2d0c-4416-83c2-6267ee74ec4a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Trinity Gustman", - "company": "Netsystems", - "phone": "824-526-3629", - "email": "trinity@netsystems.com" - }, - { - "id": 6926, - "guid": "d6658464-f460-4ec9-bd3c-a6d96dba655e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Gilson", - "company": "Superscope", - "phone": "889-450-2637", - "email": "brooke@superscope.com" - }, - { - "id": 6927, - "guid": "0ddc0129-c8bb-4910-a49b-37484570c081", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Young", - "company": "Mescaridic", - "phone": "896-510-2215", - "email": "evelyn@mescaridic.com" - }, - { - "id": 6928, - "guid": "9363a373-d9b2-4a03-8acb-e077a0d81866", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Adamson", - "company": "Tekcar", - "phone": "803-407-3492", - "email": "kimberly@tekcar.com" - }, - { - "id": 6929, - "guid": "90e1594c-b20a-4095-88d5-8e1be450b051", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Gibbs", - "company": "Multitiqua", - "phone": "887-556-3943", - "email": "vanessa@multitiqua.com" - }, - { - "id": 6930, - "guid": "59a14cb6-0cfa-4606-aa7e-2e19f5ee6258", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Waller", - "company": "Infraique", - "phone": "836-453-2244", - "email": "olivia@infraique.com" - }, - { - "id": 6931, - "guid": "402a16df-5077-4e9f-aa4c-2e6f799ee6a2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Ogden", - "company": "Allnet", - "phone": "868-441-2325", - "email": "avery@allnet.com" - }, - { - "id": 6932, - "guid": "42b40ba7-cd79-4ac7-946f-0a230b0cfe2c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Watson", - "company": "iSkyvaco", - "phone": "805-446-3681", - "email": "melanie@iskyvaco.com" - }, - { - "id": 6933, - "guid": "54923876-de14-49e4-a49f-bc580db3e98f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Gate", - "company": "eEyetanic", - "phone": "803-591-3781", - "email": "grace@eeyetanic.com" - }, - { - "id": 6934, - "guid": "3f17f2a9-b74c-4b3f-862a-9bde26c4a924", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Oswald", - "company": "Ameritron", - "phone": "849-536-3416", - "email": "vanessa@ameritron.com" - }, - { - "id": 6935, - "guid": "cf85410e-540c-4a07-9b40-35237d1deb67", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jessica Watson", - "company": "Raylog", - "phone": "800-591-3061", - "email": "jessica@raylog.com" - }, - { - "id": 6936, - "guid": "f703f740-f6b9-4b31-a963-a3f43d9d320c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Hancock", - "company": "Unologic", - "phone": "883-501-3814", - "email": "nevaeh@unologic.com" - }, - { - "id": 6937, - "guid": "ba07ced6-f3ea-425e-9cc9-710deb8250b9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Andrea Goodman", - "company": "Technogra", - "phone": "808-546-2887", - "email": "andrea@technogra.com" - }, - { - "id": 6938, - "guid": "82e7ec97-cf05-4a29-b57a-bf1b9d77737c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hailey Abramson", - "company": "Cryptotemplate", - "phone": "873-574-3654", - "email": "hailey@cryptotemplate.com" - }, - { - "id": 6939, - "guid": "7391dae3-f351-4684-9459-27d592e5d4bb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Thomson", - "company": "Ameritron", - "phone": "855-434-2600", - "email": "olivia@ameritron.com" - }, - { - "id": 6940, - "guid": "bed81977-953c-4e7f-8c23-eb715226b496", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Brickman", - "company": "Raylog", - "phone": "843-494-2629", - "email": "sofia@raylog.com" - }, - { - "id": 6941, - "guid": "790cf2d8-6cd0-4803-873b-65caaa6c6c07", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Camila Hamphrey", - "company": "Thermotomic", - "phone": "868-560-3741", - "email": "camila@thermotomic.com" - }, - { - "id": 6942, - "guid": "8a3283df-db51-474a-ba37-aa1bade179df", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mackenzie Charlson", - "company": "Orthosoft", - "phone": "854-433-2233", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 6943, - "guid": "abf0df0a-2db0-4f0a-af79-bab94b269eb5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mya Vaughan", - "company": "Aprama", - "phone": "861-537-3233", - "email": "mya@aprama.com" - }, - { - "id": 6944, - "guid": "c618032c-fb05-4b17-96f3-59146d0835f0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Morgan Creighton", - "company": "Truegate", - "phone": "825-582-2092", - "email": "morgan@truegate.com" - }, - { - "id": 6945, - "guid": "d5ac9590-8178-4c1c-83a4-a5284b683504", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Bush", - "company": "Anaframe", - "phone": "878-413-3273", - "email": "hannah@anaframe.com" - }, - { - "id": 6946, - "guid": "42730389-cf5f-47ab-8faa-1b03ffc0847e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Paige Youmans", - "company": "Indisco", - "phone": "807-456-3572", - "email": "paige@indisco.com" - }, - { - "id": 6947, - "guid": "532b5a66-3e23-4c13-8b69-48e32bd284a2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Croftoon", - "company": "Orthomedia", - "phone": "851-513-2463", - "email": "julia@orthomedia.com" - }, - { - "id": 6948, - "guid": "1235a878-46b3-4773-8a11-b02fc111cb1c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Hawkins", - "company": "Videobanc", - "phone": "811-432-3498", - "email": "arianna@videobanc.com" - }, - { - "id": 6949, - "guid": "9257e266-dd76-4ba3-bff6-8407ddf13305", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Claire Goldman", - "company": "Sontopia", - "phone": "861-511-2577", - "email": "claire@sontopia.com" - }, - { - "id": 6950, - "guid": "30496c70-da9f-4630-9837-e6fe3e22134b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Chesterton", - "company": "Xeicon", - "phone": "820-496-2990", - "email": "emma@xeicon.com" - }, - { - "id": 6951, - "guid": "7b2173ca-1ca3-446f-8973-4a5215cce769", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Thorndike", - "company": "Orthomedia", - "phone": "840-411-3925", - "email": "zoe@orthomedia.com" - }, - { - "id": 6952, - "guid": "2b445e09-64e1-44b4-bccd-a022890a71eb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Michaelson", - "company": "Aprama", - "phone": "801-599-3424", - "email": "genesis@aprama.com" - }, - { - "id": 6953, - "guid": "16c6c241-828d-4e27-ac70-02a890028df8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Carroll", - "company": "Jamconik", - "phone": "899-441-3921", - "email": "zoe@jamconik.com" - }, - { - "id": 6954, - "guid": "539c1e1e-e801-4bbb-ba50-22df7509d8b3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Croftoon", - "company": "Unologic", - "phone": "891-517-3452", - "email": "elizabeth@unologic.com" - }, - { - "id": 6955, - "guid": "4a8cb102-5f21-40cd-83d2-1b1048470d96", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Rachel Goodman", - "company": "SysVenamerica", - "phone": "800-456-2699", - "email": "rachel@sysvenamerica.com" - }, - { - "id": 6956, - "guid": "b642db08-0b78-485f-9f33-1088e483555a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Amelia Nathan", - "company": "iEnland", - "phone": "892-520-2297", - "email": "amelia@ienland.com" - }, - { - "id": 6957, - "guid": "ecf67851-aca7-44a0-889c-a7664de29e47", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Nash", - "company": "RoboAerlogix", - "phone": "845-441-3966", - "email": "nevaeh@roboaerlogix.com" - }, - { - "id": 6958, - "guid": "70718ca9-d62a-472e-8a46-b8f39b5480b2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Creighton", - "company": "Ventanium", - "phone": "857-440-2969", - "email": "abigail@ventanium.com" - }, - { - "id": 6959, - "guid": "c64b71c6-56ac-44f0-9128-806ed32ba146", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Adamson", - "company": "Anaframe", - "phone": "833-557-3810", - "email": "caroline@anaframe.com" - }, - { - "id": 6960, - "guid": "3770828d-505c-441a-b178-867a5dd6fc66", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Hodges", - "company": "SysUSA", - "phone": "840-547-2336", - "email": "victoria@sysusa.com" - }, - { - "id": 6961, - "guid": "99dc4aad-4026-4297-bdda-1ba19fbca7b9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Thomson", - "company": "Cryptotemplate", - "phone": "889-478-2387", - "email": "nevaeh@cryptotemplate.com" - }, - { - "id": 6962, - "guid": "82b52e94-f28c-457d-98bc-d9aace1fef8d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily WifKinson", - "company": "iQualcar", - "phone": "828-418-2780", - "email": "emily@iqualcar.com" - }, - { - "id": 6963, - "guid": "0351cf77-4541-485e-8da5-d183607586f6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooke Creighton", - "company": "Ameritron", - "phone": "891-575-2017", - "email": "brooke@ameritron.com" - }, - { - "id": 6964, - "guid": "c6ea6182-95c8-44c0-8a18-4da632c9e711", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Gill", - "company": "Robotomic", - "phone": "868-439-2466", - "email": "genesis@robotomic.com" - }, - { - "id": 6965, - "guid": "6a8ad04c-8ae5-4ee8-b877-5a21efb28ff9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Milton", - "company": "Netsystems", - "phone": "846-509-3439", - "email": "valeria@netsystems.com" - }, - { - "id": 6966, - "guid": "89510eb3-ffdf-41e1-856e-63d4921890fb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Haig", - "company": "iOptystix", - "phone": "828-455-2261", - "email": "aubrey@ioptystix.com" - }, - { - "id": 6967, - "guid": "0d46b941-62bf-4b66-af66-b6b53d2e9bb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Nelson", - "company": "Generola", - "phone": "889-505-2219", - "email": "aaliyah@generola.com" - }, - { - "id": 6968, - "guid": "dd7364df-98fb-4602-a748-d21b60ecdeb8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Galbraith", - "company": "Truegate", - "phone": "859-567-3887", - "email": "destiny@truegate.com" - }, - { - "id": 6969, - "guid": "6b279552-6008-489f-bdf9-65f8fd71cdf1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jessica Stanley", - "company": "Teratopia", - "phone": "848-433-2173", - "email": "jessica@teratopia.com" - }, - { - "id": 6970, - "guid": "a9ef6339-35b9-449b-938a-ff22354ca4b7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Davidson", - "company": "Robotomic", - "phone": "876-520-3062", - "email": "vanessa@robotomic.com" - }, - { - "id": 6971, - "guid": "83a1bcee-3f32-414d-a6a1-2f73f572ae7d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Avery Abramson", - "company": "Robotemplate", - "phone": "863-543-3552", - "email": "avery@robotemplate.com" - }, - { - "id": 6972, - "guid": "cace8b13-dcdb-4c08-a117-e48ad09b2b6d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Haig", - "company": "iMedconik", - "phone": "855-446-3349", - "email": "maya@imedconik.com" - }, - { - "id": 6973, - "guid": "669650f1-6d8d-41f2-80cc-6bb6929b60fd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Fisher", - "company": "Syssoft", - "phone": "821-449-2614", - "email": "valeria@syssoft.com" - }, - { - "id": 6974, - "guid": "98670fad-68bb-4898-8833-7e385e99d15d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Webster", - "company": "Generola", - "phone": "827-530-2254", - "email": "kylie@generola.com" - }, - { - "id": 6975, - "guid": "634b9094-eb21-441a-a42a-b3b629d222ec", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Brickman", - "company": "Inridium", - "phone": "873-486-2485", - "email": "ashley@inridium.com" - }, - { - "id": 6976, - "guid": "8cfef2ba-82ca-4e46-855a-27ed7dc622dd", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Oliver", - "company": "Navivacs", - "phone": "867-484-3891", - "email": "aubrey@navivacs.com" - }, - { - "id": 6977, - "guid": "89e9ab2d-361c-485d-bfb5-20a691a41a9b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooklyn Chapman", - "company": "Orthosoft", - "phone": "800-401-3476", - "email": "brooklyn@orthosoft.com" - }, - { - "id": 6978, - "guid": "59fbfcf6-1dfd-439d-a753-c63f3080ddb9", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Nash", - "company": "Titanirola", - "phone": "888-531-2469", - "email": "evelyn@titanirola.com" - }, - { - "id": 6979, - "guid": "517c0bcf-cdc4-4edf-96f0-173f93bbbd75", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Watson", - "company": "Vencom", - "phone": "825-483-2185", - "email": "sofia@vencom.com" - }, - { - "id": 6980, - "guid": "873f0c31-cb21-4e95-a694-fce8d219079f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Bush", - "company": "SysUSA", - "phone": "883-472-2497", - "email": "camila@sysusa.com" - }, - { - "id": 6981, - "guid": "76ad50b4-5ba1-4f73-be5b-44d2eff0bf64", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaylee Fisher", - "company": "RoboAerlogix", - "phone": "890-462-2479", - "email": "kaylee@roboaerlogix.com" - }, - { - "id": 6982, - "guid": "3ca49421-cc44-44d7-a7cf-58520b643d6e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Nelson", - "company": "Steganoconiche", - "phone": "826-557-3820", - "email": "kaitlyn@steganoconiche.com" - }, - { - "id": 6983, - "guid": "61f777a3-faed-4262-aa1d-22fcccb57a07", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jocelyn Fulton", - "company": "Orthomedia", - "phone": "883-523-2951", - "email": "jocelyn@orthomedia.com" - }, - { - "id": 6984, - "guid": "cdc042c1-f1c1-40a5-8ea2-62c04e88e480", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Webster", - "company": "Tekcar", - "phone": "893-543-2079", - "email": "arianna@tekcar.com" - }, - { - "id": 6985, - "guid": "663fe054-7856-41aa-af15-60b69b09b07d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Bush", - "company": "Jamrola", - "phone": "813-462-2654", - "email": "julia@jamrola.com" - }, - { - "id": 6986, - "guid": "b46f2515-99de-40a3-9c1a-192b17ddc39b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Milton", - "company": "Teratopia", - "phone": "865-598-3988", - "email": "molly@teratopia.com" - }, - { - "id": 6987, - "guid": "564029c5-517b-4651-a53b-467559518ce3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Freeman", - "company": "Anagraph", - "phone": "849-466-3462", - "email": "abigail@anagraph.com" - }, - { - "id": 6988, - "guid": "5c067024-a0db-4a5e-8e12-27a036665abc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ava Murphy", - "company": "Anagraph", - "phone": "852-567-3455", - "email": "ava@anagraph.com" - }, - { - "id": 6989, - "guid": "b065f9fd-1c92-4ff8-b92b-4239f623c191", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Wood", - "company": "Jamconik", - "phone": "827-430-2793", - "email": "molly@jamconik.com" - }, - { - "id": 6990, - "guid": "fca02883-6375-4ce3-bd08-563f1229dfd8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Gustman", - "company": "Quintegrity", - "phone": "862-443-3090", - "email": "brianna@quintegrity.com" - }, - { - "id": 6991, - "guid": "96e0404a-7ba0-4b6e-b3c5-a3bfad22d5b0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Gilmore", - "company": "Venconix", - "phone": "885-536-3363", - "email": "serenity@venconix.com" - }, - { - "id": 6992, - "guid": "8319b47f-a2cd-4f0f-a1db-b3ad7b6dc1a3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Fisher", - "company": "Genland", - "phone": "803-567-3366", - "email": "hailey@genland.com" - }, - { - "id": 6993, - "guid": "773c5de3-5084-495c-9748-931921eab2d2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily WifKinson", - "company": "Conrama", - "phone": "817-479-2547", - "email": "emily@conrama.com" - }, - { - "id": 6994, - "guid": "f5ec8529-645b-4d11-8df6-8e7918695d90", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Winter", - "company": "Raylog", - "phone": "883-512-2344", - "email": "emma@raylog.com" - }, - { - "id": 6995, - "guid": "7a9860d2-c5bb-4e9c-9c2f-70076e19aaa8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emily Watson", - "company": "Cryptotemplate", - "phone": "802-469-3878", - "email": "emily@cryptotemplate.com" - }, - { - "id": 6996, - "guid": "e26569ea-88de-4ec0-a56f-89279be9ac8c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Creighton", - "company": "Cryptotegrity", - "phone": "811-422-3652", - "email": "amelia@cryptotegrity.com" - }, - { - "id": 6997, - "guid": "3cadaf85-148e-42c0-91bf-5884950a8dd9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Gibbs", - "company": "Systheon", - "phone": "805-558-3821", - "email": "paige@systheon.com" - }, - { - "id": 6998, - "guid": "1b3179e6-205b-4cc2-9bc3-eddbe5959a2a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Miln", - "company": "Truetomic", - "phone": "866-531-3340", - "email": "emma@truetomic.com" - }, - { - "id": 6999, - "guid": "70bcad2f-ffd3-45ac-82ce-7f44b8a7a61d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Hamphrey", - "company": "Sontopia", - "phone": "818-470-2858", - "email": "jessica@sontopia.com" - }, - { - "id": 7000, - "guid": "5f97d674-76b3-440a-a5c0-69629e26a970", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Crossman", - "company": "Proline", - "phone": "882-431-3249", - "email": "serenity@proline.com" - }, - { - "id": 7001, - "guid": "245ec7fe-3500-47e1-9e9c-08bdc157581f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lauren Chapman", - "company": "Turbomart", - "phone": "818-406-3701", - "email": "lauren@turbomart.com" - }, - { - "id": 7002, - "guid": "ed8ed047-2a21-4ec8-8a9a-7c0df1de1f0d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Timmons", - "company": "Steganoconiche", - "phone": "802-416-3153", - "email": "mya@steganoconiche.com" - }, - { - "id": 7003, - "guid": "48e0624a-920f-461b-b3b0-522a4609c307", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Goldman", - "company": "Cryptotegrity", - "phone": "899-459-2222", - "email": "gabriella@cryptotegrity.com" - }, - { - "id": 7004, - "guid": "fbbe6c0c-99e3-4ed0-acb4-d2416bce0719", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Hancock", - "company": "Aprama", - "phone": "871-596-3542", - "email": "emily@aprama.com" - }, - { - "id": 7005, - "guid": "d59e76cb-4003-4294-97b6-1cdcca8f35a5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madeline Cook", - "company": "Syssoft", - "phone": "893-404-2378", - "email": "madeline@syssoft.com" - }, - { - "id": 7006, - "guid": "c3a6aee4-930f-4096-b6fc-30c62c260903", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Samantha Wainwright", - "company": "Videobanc", - "phone": "858-503-3441", - "email": "samantha@videobanc.com" - }, - { - "id": 7007, - "guid": "03167d33-6e62-460a-8b72-29ed001807b7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Winter", - "company": "Nanobanc", - "phone": "807-580-3035", - "email": "amelia@nanobanc.com" - }, - { - "id": 7008, - "guid": "d01d6acb-4ea6-451e-a852-9620889baf16", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila WifKinson", - "company": "Rapigrafix", - "phone": "801-485-3951", - "email": "camila@rapigrafix.com" - }, - { - "id": 7009, - "guid": "7108e4a4-90a7-4877-b6df-c0a6345fa07f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Payton Wayne", - "company": "Orthosoft", - "phone": "874-457-2734", - "email": "payton@orthosoft.com" - }, - { - "id": 7010, - "guid": "7930283c-5e63-49f8-b814-f9297fc9e5b7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Waller", - "company": "iOptystix", - "phone": "897-525-3182", - "email": "bailey@ioptystix.com" - }, - { - "id": 7011, - "guid": "6d9a1daa-ac8d-4870-bce9-5c53cb9d07cf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Owen", - "company": "Fibrotouch", - "phone": "857-482-3556", - "email": "lillian@fibrotouch.com" - }, - { - "id": 7012, - "guid": "f8f0edb9-3aa8-441a-ad2d-ddd4f780d168", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Natalie Crossman", - "company": "Dynarama", - "phone": "889-422-2467", - "email": "natalie@dynarama.com" - }, - { - "id": 7013, - "guid": "6ff0d737-8f3d-41ac-aabc-0c90e641bc9d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley Milton", - "company": "Robocomm", - "phone": "854-409-3786", - "email": "ashley@robocomm.com" - }, - { - "id": 7014, - "guid": "adf9c3b3-619f-4113-a01b-e1a66a54c0aa", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Adamson", - "company": "Anagraph", - "phone": "811-412-3927", - "email": "sophia@anagraph.com" - }, - { - "id": 7015, - "guid": "6f974d6e-6451-4335-beae-a38102f1f0ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Chapman", - "company": "Polytheon", - "phone": "887-600-2274", - "email": "addison@polytheon.com" - }, - { - "id": 7016, - "guid": "848e9b70-21a6-4357-858f-11ace0d14fa6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Thornton", - "company": "iEnland", - "phone": "807-567-3374", - "email": "katelyn@ienland.com" - }, - { - "id": 7017, - "guid": "72ecba36-8b17-44f5-8437-48f846d0d4d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Watson", - "company": "Venconix", - "phone": "807-493-2665", - "email": "maria@venconix.com" - }, - { - "id": 7018, - "guid": "0f0b74cd-e6ef-4892-95f7-5b751b3373e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Gibbs", - "company": "Gigaura", - "phone": "859-419-2234", - "email": "peyton@gigaura.com" - }, - { - "id": 7019, - "guid": "7005d39e-0e19-4efe-9580-d68bb165989c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Gate", - "company": "Superscope", - "phone": "832-472-3679", - "email": "sophie@superscope.com" - }, - { - "id": 7020, - "guid": "fd886789-8f61-42ad-9bff-0b2646913c57", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Turner", - "company": "Qualserve", - "phone": "889-596-3684", - "email": "natalie@qualserve.com" - }, - { - "id": 7021, - "guid": "715be3ac-ce67-47be-b887-5b429c840b49", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Croftoon", - "company": "Rapigrafix", - "phone": "820-504-2475", - "email": "addison@rapigrafix.com" - }, - { - "id": 7022, - "guid": "d5fa66da-c4f6-47c3-bf27-d6d341d2f216", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Miers", - "company": "Entcast", - "phone": "895-501-3455", - "email": "khloe@entcast.com" - }, - { - "id": 7023, - "guid": "2344dd27-cd4e-4d7c-b7cf-53460504abd0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Neal", - "company": "Robotemplate", - "phone": "836-421-3484", - "email": "paige@robotemplate.com" - }, - { - "id": 7024, - "guid": "8bd3e23b-45df-4d8c-82f3-4f0247a9aa15", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Webster", - "company": "Cryptotegrity", - "phone": "878-422-2486", - "email": "emma@cryptotegrity.com" - }, - { - "id": 7025, - "guid": "1ce08dda-9d7e-4c3d-9eee-1c1c98684e19", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Oliver", - "company": "Unologic", - "phone": "864-481-2497", - "email": "addison@unologic.com" - }, - { - "id": 7026, - "guid": "817dfb0f-5825-4d80-b456-c392d3c57c7a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Gianna Gilson", - "company": "Hypervaco", - "phone": "846-584-3324", - "email": "gianna@hypervaco.com" - }, - { - "id": 7027, - "guid": "1fa71362-9563-40dd-9686-5fcdac449acd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Higgins", - "company": "Robotomic", - "phone": "891-581-3167", - "email": "allison@robotomic.com" - }, - { - "id": 7028, - "guid": "c1c95b37-519e-4330-84e6-9512ae9639b9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kimberly Vance", - "company": "iEnland", - "phone": "819-481-3618", - "email": "kimberly@ienland.com" - }, - { - "id": 7029, - "guid": "a295634f-c910-47c6-9324-39e3a07a696c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Hancock", - "company": "Proline", - "phone": "815-420-3320", - "email": "ariana@proline.com" - }, - { - "id": 7030, - "guid": "a8b3eb73-0e68-42ec-b927-0c65d8e64c10", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Chesterton", - "company": "Thermotomic", - "phone": "827-458-2234", - "email": "serenity@thermotomic.com" - }, - { - "id": 7031, - "guid": "aeacfc34-dd8c-4575-98b6-e0ad709a765a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Vance", - "company": "Safeagra", - "phone": "854-511-2495", - "email": "sydney@safeagra.com" - }, - { - "id": 7032, - "guid": "9073217d-106e-45ff-985d-af68666594e1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Galbraith", - "company": "Westmedia", - "phone": "850-560-3747", - "email": "charlotte@westmedia.com" - }, - { - "id": 7033, - "guid": "38c68575-b1e4-4610-9f82-7a9f3f671df4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mya Chesterton", - "company": "Safeagra", - "phone": "832-428-2381", - "email": "mya@safeagra.com" - }, - { - "id": 7034, - "guid": "a22df2a1-0961-4840-84a8-b8ce463f90be", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Goodman", - "company": "Syssoft", - "phone": "863-589-3050", - "email": "sophia@syssoft.com" - }, - { - "id": 7035, - "guid": "8181b19f-ae4b-4abf-b19d-0133444faa1b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Carrington", - "company": "Entcast", - "phone": "893-598-3617", - "email": "charlotte@entcast.com" - }, - { - "id": 7036, - "guid": "ae0f0cee-d9a8-4e5a-a371-55ed4e19f0f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Wainwright", - "company": "Netseco", - "phone": "895-597-2521", - "email": "emily@netseco.com" - }, - { - "id": 7037, - "guid": "7a4200dc-babd-4c0e-b73e-1d8d12342afa", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Conors", - "company": "Hypervaco", - "phone": "817-429-2592", - "email": "faith@hypervaco.com" - }, - { - "id": 7038, - "guid": "2de78d05-f04b-4433-a1d5-70726646b730", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Claire Hancock", - "company": "Compuamerica", - "phone": "815-564-3008", - "email": "claire@compuamerica.com" - }, - { - "id": 7039, - "guid": "a6f902db-3e9b-4711-8c4e-54338586961e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Mercer", - "company": "Ameritron", - "phone": "843-445-3082", - "email": "brianna@ameritron.com" - }, - { - "id": 7040, - "guid": "64c11d1a-47f5-4773-8ca9-ada03ad899ac", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia White", - "company": "InfoAirway", - "phone": "811-428-3567", - "email": "sophia@infoairway.com" - }, - { - "id": 7041, - "guid": "b5547bc6-dfc2-4a89-91fc-92a4662d4e19", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Nevaeh Gerald", - "company": "Mescaridic", - "phone": "832-525-3090", - "email": "nevaeh@mescaridic.com" - }, - { - "id": 7042, - "guid": "dbf4e2c2-0222-4893-9ca5-feee2a439175", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Amelia Charlson", - "company": "Idmax", - "phone": "860-551-2973", - "email": "amelia@idmax.com" - }, - { - "id": 7043, - "guid": "7f4219d5-40b3-4bb5-91e9-113d1185f82f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Serenity Michaelson", - "company": "InfoAirway", - "phone": "899-480-3232", - "email": "serenity@infoairway.com" - }, - { - "id": 7044, - "guid": "1f8cdfd7-6742-4d82-a627-8a1310c33650", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Cook", - "company": "Infragraph", - "phone": "800-462-2818", - "email": "aubrey@infragraph.com" - }, - { - "id": 7045, - "guid": "0c9d58b1-9f50-40cb-8de4-8a350d807c89", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maya Goodman", - "company": "Gigaura", - "phone": "861-523-2934", - "email": "maya@gigaura.com" - }, - { - "id": 7046, - "guid": "560034dd-a4a6-4ddf-8ad5-e5ab62602a5d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aaliyah Calhoun", - "company": "iQualcar", - "phone": "882-461-3524", - "email": "aaliyah@iqualcar.com" - }, - { - "id": 7047, - "guid": "610b963a-f054-456c-b021-9ca76fb55e9b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Michaelson", - "company": "Textiqua", - "phone": "889-582-2282", - "email": "gianna@textiqua.com" - }, - { - "id": 7048, - "guid": "9bfb3be0-aabd-460e-a2bb-18be259670aa", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Hamphrey", - "company": "OpKeycomm", - "phone": "800-419-2366", - "email": "savannah@opkeycomm.com" - }, - { - "id": 7049, - "guid": "7dfe885a-db5c-46e2-aacc-f8b00e02b7e9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Winter", - "company": "Technogra", - "phone": "895-432-3791", - "email": "amelia@technogra.com" - }, - { - "id": 7050, - "guid": "ae73ffc0-201c-41f2-b748-a39ef7adabb2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Molligan", - "company": "Proline", - "phone": "858-476-2981", - "email": "mackenzie@proline.com" - }, - { - "id": 7051, - "guid": "f120b921-5902-4db6-b313-306a8df1a71e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Arianna Nelson", - "company": "Venconix", - "phone": "880-443-2557", - "email": "arianna@venconix.com" - }, - { - "id": 7052, - "guid": "20ce442a-c6cc-4c28-8265-c0ff563d91f2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Young", - "company": "Netsystems", - "phone": "856-564-3983", - "email": "ella@netsystems.com" - }, - { - "id": 7053, - "guid": "63389cdf-19a2-49ba-8f67-f510ed4d4307", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Audrey Morrison", - "company": "Robotemplate", - "phone": "827-435-3596", - "email": "audrey@robotemplate.com" - }, - { - "id": 7054, - "guid": "c93358e3-bd7f-4bcb-88a9-a5343a588ffb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madeline Mercer", - "company": "Navivacs", - "phone": "868-491-2316", - "email": "madeline@navivacs.com" - }, - { - "id": 7055, - "guid": "fa6bc959-f1a4-4cea-ac87-1167cd94291a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Mercer", - "company": "Anagraph", - "phone": "815-440-3575", - "email": "payton@anagraph.com" - }, - { - "id": 7056, - "guid": "7e0f72c5-97ee-42a8-bc50-520b9a2bb41e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Daniels", - "company": "Pacwest", - "phone": "888-521-3811", - "email": "brooklyn@pacwest.com" - }, - { - "id": 7057, - "guid": "bbc0324b-7e9d-4d7e-b29e-4b8e9adc741c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Oliver", - "company": "Westtomik", - "phone": "823-511-3228", - "email": "amelia@westtomik.com" - }, - { - "id": 7058, - "guid": "efa88c3d-f11d-4a8d-9291-9101e4faf34d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Chesterton", - "company": "Vencom", - "phone": "808-434-2796", - "email": "kylie@vencom.com" - }, - { - "id": 7059, - "guid": "6f96dc94-9368-484a-ac50-2accf0877465", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Owen", - "company": "Conrama", - "phone": "887-441-2447", - "email": "katherine@conrama.com" - }, - { - "id": 7060, - "guid": "15a44620-eb0f-4d09-8716-9011684e3f77", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lauren Davidson", - "company": "Safeagra", - "phone": "837-600-2650", - "email": "lauren@safeagra.com" - }, - { - "id": 7061, - "guid": "f46ac0e7-a4e0-4329-b0dd-9e8ea3eb27a2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madison WifKinson", - "company": "Mescaridic", - "phone": "845-475-3293", - "email": "madison@mescaridic.com" - }, - { - "id": 7062, - "guid": "5b94eda8-88ca-48a5-ae47-b6a52f8f464e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Freeman", - "company": "Pacwest", - "phone": "834-413-3578", - "email": "arianna@pacwest.com" - }, - { - "id": 7063, - "guid": "f0dc6c5a-63ab-4020-b85e-f203bb54da5a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Creighton", - "company": "Interliant", - "phone": "839-551-2086", - "email": "victoria@interliant.com" - }, - { - "id": 7064, - "guid": "b830f6f0-671e-4880-a2c4-efa6f4be2968", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Goldman", - "company": "Conotomics", - "phone": "836-492-3224", - "email": "kimberly@conotomics.com" - }, - { - "id": 7065, - "guid": "4d0af3a4-8c05-42a4-b0b0-2e5fd996bdd3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brianna Gilmore", - "company": "Mescatron", - "phone": "827-600-3139", - "email": "brianna@mescatron.com" - }, - { - "id": 7066, - "guid": "d9b3a78f-641f-4546-a924-163964887127", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katelyn Fisher", - "company": "Allnet", - "phone": "840-556-3097", - "email": "katelyn@allnet.com" - }, - { - "id": 7067, - "guid": "dcc85449-1bd6-4339-b7c9-53b7cf8acba7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Fisher", - "company": "Openserve", - "phone": "845-543-3761", - "email": "riley@openserve.com" - }, - { - "id": 7068, - "guid": "5a889bdd-9755-4331-945c-f3148b9b2b4d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Oldridge", - "company": "Thermotomic", - "phone": "899-438-3299", - "email": "andrea@thermotomic.com" - }, - { - "id": 7069, - "guid": "ef64653d-4a14-46f2-bd22-eaf9c7761c50", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Webster", - "company": "OpKeycomm", - "phone": "838-554-2068", - "email": "makayla@opkeycomm.com" - }, - { - "id": 7070, - "guid": "227d1c2d-f236-4255-af16-d4e21a1bb5f6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Turner", - "company": "Superscope", - "phone": "889-543-2465", - "email": "valeria@superscope.com" - }, - { - "id": 7071, - "guid": "b9ec453f-bd92-48a1-814c-36f5a316cb41", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Croftoon", - "company": "Infragraph", - "phone": "860-545-3820", - "email": "isabella@infragraph.com" - }, - { - "id": 7072, - "guid": "9c32fdf2-a7a3-4c12-b88c-f5fb13df5829", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alyssa Galbraith", - "company": "Xeicon", - "phone": "847-590-3954", - "email": "alyssa@xeicon.com" - }, - { - "id": 7073, - "guid": "d8b4b4c3-0a21-48d3-9e13-316233bfd197", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Haig", - "company": "Titanirola", - "phone": "871-510-2079", - "email": "abigail@titanirola.com" - }, - { - "id": 7074, - "guid": "ac60a3aa-475a-4d41-9ad3-b7762018255d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jocelyn Carrington", - "company": "Jamrola", - "phone": "854-508-2071", - "email": "jocelyn@jamrola.com" - }, - { - "id": 7075, - "guid": "95001d8f-2ac5-451b-817d-3d81e2febaba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Carroll", - "company": "SysUSA", - "phone": "851-530-2339", - "email": "evelyn@sysusa.com" - }, - { - "id": 7076, - "guid": "5b736d2f-9de0-4ad2-ad98-66a1451e9114", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Michaelson", - "company": "Qualserve", - "phone": "864-447-3560", - "email": "bailey@qualserve.com" - }, - { - "id": 7077, - "guid": "af24b305-9ffa-415b-ba87-4af712bc05c3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabella Carter", - "company": "Teratopia", - "phone": "823-429-2925", - "email": "isabella@teratopia.com" - }, - { - "id": 7078, - "guid": "623d4464-6b23-49f1-869e-65f87a06b762", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Creighton", - "company": "Techtron", - "phone": "876-407-2182", - "email": "emma@techtron.com" - }, - { - "id": 7079, - "guid": "03a0a6bc-c6d9-474a-907b-aaae5155e835", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Milton", - "company": "US Infratouch", - "phone": "841-402-2452", - "email": "olivia@us infratouch.com" - }, - { - "id": 7080, - "guid": "bc712a50-51ca-4ac5-9bb0-1a90761e7183", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jasmine Oldman", - "company": "Titanirola", - "phone": "879-448-3017", - "email": "jasmine@titanirola.com" - }, - { - "id": 7081, - "guid": "24def9aa-ac3c-497a-8209-d501cbe1b6c6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Hodges", - "company": "Raylog", - "phone": "807-587-2341", - "email": "taylor@raylog.com" - }, - { - "id": 7082, - "guid": "6f0f8d89-3065-4267-b044-555ff6a9f43e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mackenzie Gill", - "company": "Allnet", - "phone": "884-432-2472", - "email": "mackenzie@allnet.com" - }, - { - "id": 7083, - "guid": "0d0661c7-da16-4518-bb15-60eb6eff9bf0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Gustman", - "company": "Fibrotopia", - "phone": "805-475-2881", - "email": "abigail@fibrotopia.com" - }, - { - "id": 7084, - "guid": "b5b00fce-603f-432e-bf96-d60c578f7cbc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Brown", - "company": "Pacwest", - "phone": "899-520-3905", - "email": "gianna@pacwest.com" - }, - { - "id": 7085, - "guid": "af22afc9-0ae8-4fab-b5f5-437e689a8294", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Watson", - "company": "Dynarama", - "phone": "840-555-3302", - "email": "isabella@dynarama.com" - }, - { - "id": 7086, - "guid": "12b1ae2e-f6d2-4ff0-b494-044efba07fb6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Clapton", - "company": "Westmedia", - "phone": "877-580-3233", - "email": "lauren@westmedia.com" - }, - { - "id": 7087, - "guid": "041d4230-d91d-4119-b124-1fd5a0f15387", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Andrea Oldman", - "company": "Anaframe", - "phone": "805-477-2402", - "email": "andrea@anaframe.com" - }, - { - "id": 7088, - "guid": "6de27dbf-9466-49d1-8ec0-def5a6bbdd37", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Hardman", - "company": "Genland", - "phone": "818-439-2795", - "email": "grace@genland.com" - }, - { - "id": 7089, - "guid": "74db2752-c877-4ec5-abe6-bb711763bff7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Fulton", - "company": "Truegate", - "phone": "830-446-2563", - "email": "taylor@truegate.com" - }, - { - "id": 7090, - "guid": "c11b28d5-bc5d-4565-998e-f3ed74963a5e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaylee Davidson", - "company": "Techtron", - "phone": "824-433-2385", - "email": "kaylee@techtron.com" - }, - { - "id": 7091, - "guid": "ba3e5a5d-27b7-403f-b560-ee94ec7f206e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Julia Nelson", - "company": "Conotomics", - "phone": "829-419-3885", - "email": "julia@conotomics.com" - }, - { - "id": 7092, - "guid": "ef3f87b3-04df-4374-a8ad-fc566c69919a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Brown", - "company": "Mescatron", - "phone": "835-427-2565", - "email": "bella@mescatron.com" - }, - { - "id": 7093, - "guid": "b2af5feb-0ba1-456b-8bab-da26339ca68b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoey Chandter", - "company": "Teraserv", - "phone": "863-583-3685", - "email": "zoey@teraserv.com" - }, - { - "id": 7094, - "guid": "b2eb79e9-07b5-4009-80ec-7ae38ba7b7eb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Wesley", - "company": "Teknoplexon", - "phone": "898-555-3159", - "email": "melanie@teknoplexon.com" - }, - { - "id": 7095, - "guid": "6aaca020-72c5-4a4b-9dae-eabe765a090d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Sherlock", - "company": "Teratopia", - "phone": "872-457-3533", - "email": "emily@teratopia.com" - }, - { - "id": 7096, - "guid": "5633656d-c047-4cd2-bb3c-ac697f99d0ef", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Abigail Nash", - "company": "Jamconik", - "phone": "840-530-3808", - "email": "abigail@jamconik.com" - }, - { - "id": 7097, - "guid": "1dd5333d-d40b-4b93-b3a5-224deb60deb4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Michaelson", - "company": "Safeagra", - "phone": "852-565-2539", - "email": "peyton@safeagra.com" - }, - { - "id": 7098, - "guid": "5e4e1ab6-05e3-486f-bd8b-ee8cb5f74155", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Murphy", - "company": "Systheon", - "phone": "840-499-2594", - "email": "aubrey@systheon.com" - }, - { - "id": 7099, - "guid": "c90f583c-8538-4d1e-9f44-606b34dcffa0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Carey", - "company": "Fibrotopia", - "phone": "832-550-3673", - "email": "arianna@fibrotopia.com" - }, - { - "id": 7100, - "guid": "1aa441b2-856d-4d61-be7f-6e906584ef85", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Harrison", - "company": "Gigaura", - "phone": "817-439-3262", - "email": "aubrey@gigaura.com" - }, - { - "id": 7101, - "guid": "1e56e10d-6690-44c8-900c-f469ecd5c34f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Oldridge", - "company": "Genland", - "phone": "845-406-3941", - "email": "chloe@genland.com" - }, - { - "id": 7102, - "guid": "f3474727-8a12-4a99-adba-2ccc102ad7b8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Neal", - "company": "Rapigrafix", - "phone": "867-553-3580", - "email": "sophie@rapigrafix.com" - }, - { - "id": 7103, - "guid": "99bc0817-67be-4b80-81a9-6c179c12585e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Abramson", - "company": "Airdyne", - "phone": "843-508-2591", - "email": "paige@airdyne.com" - }, - { - "id": 7104, - "guid": "6a00aa70-a411-42e9-8c9f-bbadae00f2a2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Oldman", - "company": "Jamrola", - "phone": "827-483-2484", - "email": "sarah@jamrola.com" - }, - { - "id": 7105, - "guid": "e0abb45e-54f8-4212-8bd9-0885feca9be7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sofia Gill", - "company": "Jamrola", - "phone": "868-445-2240", - "email": "sofia@jamrola.com" - }, - { - "id": 7106, - "guid": "04383963-d7df-4a88-8347-838e8d144c0f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Hawkins", - "company": "Skydata", - "phone": "884-554-2270", - "email": "gianna@skydata.com" - }, - { - "id": 7107, - "guid": "183dd6dc-a27a-44ac-8c5f-f1a4929b2148", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Allison Timmons", - "company": "Compuamerica", - "phone": "863-510-2672", - "email": "allison@compuamerica.com" - }, - { - "id": 7108, - "guid": "3082e99d-aef0-4bca-8a3d-910bf848c10d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Taylor Harrison", - "company": "Jamconik", - "phone": "870-450-2453", - "email": "taylor@jamconik.com" - }, - { - "id": 7109, - "guid": "70afbd7a-5e71-47b3-9391-4d53987060fe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Gilmore", - "company": "Fibrotopia", - "phone": "839-512-2906", - "email": "zoe@fibrotopia.com" - }, - { - "id": 7110, - "guid": "1630fa14-a0a8-44ab-96bc-092c86987528", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Miln", - "company": "eEyetanic", - "phone": "879-404-2748", - "email": "melanie@eeyetanic.com" - }, - { - "id": 7111, - "guid": "2020b921-b757-48be-896d-5a49228787bf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Victoria Osborne", - "company": "Fibrotopia", - "phone": "876-436-2989", - "email": "victoria@fibrotopia.com" - }, - { - "id": 7112, - "guid": "dc479f1a-6b9d-42f2-b37f-eda618f2f958", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Conors", - "company": "Qualserve", - "phone": "864-468-2186", - "email": "autumn@qualserve.com" - }, - { - "id": 7113, - "guid": "961d915a-6fc9-48db-a896-844cb7a897de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Julia Cook", - "company": "Quintegrity", - "phone": "813-469-3043", - "email": "julia@quintegrity.com" - }, - { - "id": 7114, - "guid": "056502b1-6d00-4535-b4c2-d7b07f1df2a8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Fisher", - "company": "Conotomics", - "phone": "821-412-3818", - "email": "lillian@conotomics.com" - }, - { - "id": 7115, - "guid": "694127d8-0f2d-4f17-898c-4d3f95af3aed", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Miller", - "company": "Keytheon", - "phone": "879-452-3779", - "email": "morgan@keytheon.com" - }, - { - "id": 7116, - "guid": "da9374e7-8878-49c6-be3c-223d80f32ca5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Chandter", - "company": "Teratopia", - "phone": "850-599-3395", - "email": "valeria@teratopia.com" - }, - { - "id": 7117, - "guid": "6210280d-611d-42d0-8c64-de409362eaea", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley Murphy", - "company": "Enlogia", - "phone": "857-503-3152", - "email": "ashley@enlogia.com" - }, - { - "id": 7118, - "guid": "cbe70fa9-04b2-46d4-879b-2d74c3f3f489", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ashley Vance", - "company": "Ventanium", - "phone": "887-551-3874", - "email": "ashley@ventanium.com" - }, - { - "id": 7119, - "guid": "f07d6b5c-0898-401e-9117-b9993edab5be", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Young", - "company": "RoboAerlogix", - "phone": "855-404-2492", - "email": "aubrey@roboaerlogix.com" - }, - { - "id": 7120, - "guid": "f9212691-d809-410f-b0dd-3ec9f040dbbf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mariah Bush", - "company": "Allnet", - "phone": "830-569-3741", - "email": "mariah@allnet.com" - }, - { - "id": 7121, - "guid": "856cc12d-6e36-4f66-99ab-165296be1925", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ella Morrison", - "company": "Titanigraf", - "phone": "860-563-2366", - "email": "ella@titanigraf.com" - }, - { - "id": 7122, - "guid": "a6fb16df-ad08-41c4-98c0-563e3e43deb4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaylee Miller", - "company": "Ventanium", - "phone": "864-517-2311", - "email": "kaylee@ventanium.com" - }, - { - "id": 7123, - "guid": "955486bb-aac8-4d62-969e-6b5fd5f753f5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Wayne", - "company": "Sontopia", - "phone": "832-459-3084", - "email": "destiny@sontopia.com" - }, - { - "id": 7124, - "guid": "c77988c3-bafe-43cf-91d0-a2e28c46ad8d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexis Turner", - "company": "Interliant", - "phone": "887-556-3693", - "email": "alexis@interliant.com" - }, - { - "id": 7125, - "guid": "57262c76-1eb7-4d4e-84ae-61c30236af9b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Owen", - "company": "Aluco", - "phone": "887-447-2599", - "email": "emma@aluco.com" - }, - { - "id": 7126, - "guid": "24e9eaad-965e-4644-a7e6-4c6f2d126a9a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Nathan", - "company": "Celgra", - "phone": "899-468-2764", - "email": "destiny@celgra.com" - }, - { - "id": 7127, - "guid": "ee2b8cf2-fe80-40c5-8b8b-827785236175", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Fisher", - "company": "Turbomart", - "phone": "886-417-2988", - "email": "lillian@turbomart.com" - }, - { - "id": 7128, - "guid": "788cd160-d636-4751-a57e-14e663d470de", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Freeman", - "company": "Truegate", - "phone": "862-416-3945", - "email": "valeria@truegate.com" - }, - { - "id": 7129, - "guid": "93e5b76f-2a34-48a6-8ddc-acf3e092ca28", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madelyn Youmans", - "company": "Anaframe", - "phone": "847-432-2012", - "email": "madelyn@anaframe.com" - }, - { - "id": 7130, - "guid": "40e7670c-1795-4459-a6b1-81a7b366a527", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Watson", - "company": "Vencom", - "phone": "886-531-2612", - "email": "emma@vencom.com" - }, - { - "id": 7131, - "guid": "0fd21d00-a5bf-410a-9649-a5a482f41670", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Morgan Hoggarth", - "company": "Navivacs", - "phone": "878-441-3157", - "email": "morgan@navivacs.com" - }, - { - "id": 7132, - "guid": "2bff2a8e-8a10-4c35-b9e1-17cd71b85299", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Peyton Wood", - "company": "Allphysiche", - "phone": "849-519-3837", - "email": "peyton@allphysiche.com" - }, - { - "id": 7133, - "guid": "ac55851f-a7f3-4459-b99a-0faa9f303d14", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Gilson", - "company": "InfoAirway", - "phone": "860-523-2157", - "email": "claire@infoairway.com" - }, - { - "id": 7134, - "guid": "aeaa915c-f90e-4fef-923b-f7934f47cc34", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Hancock", - "company": "Fibrotopia", - "phone": "821-426-3829", - "email": "jasmine@fibrotopia.com" - }, - { - "id": 7135, - "guid": "b0eb2cf7-ad77-4500-b5e1-c525f97797a5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Leah Walkman", - "company": "Titanigraf", - "phone": "884-400-3966", - "email": "leah@titanigraf.com" - }, - { - "id": 7136, - "guid": "bbf08c77-81c7-478e-a1e1-e76f94633768", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophie Stanley", - "company": "iSkyvaco", - "phone": "803-431-2335", - "email": "sophie@iskyvaco.com" - }, - { - "id": 7137, - "guid": "be698229-261e-4e6d-9528-3919d29c199e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Charlson", - "company": "Multitiqua", - "phone": "880-494-2767", - "email": "jasmine@multitiqua.com" - }, - { - "id": 7138, - "guid": "34548a49-fb45-451c-8c02-140c325ecf51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Bush", - "company": "Polytheon", - "phone": "805-486-2383", - "email": "peyton@polytheon.com" - }, - { - "id": 7139, - "guid": "2d094bf9-fa5f-4850-9255-6dae00a03b1a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline WifKinson", - "company": "iQualcar", - "phone": "803-566-3593", - "email": "madeline@iqualcar.com" - }, - { - "id": 7140, - "guid": "845b409d-6515-43d6-959b-e4cd8dc1765a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Brickman", - "company": "iQualcar", - "phone": "815-496-2525", - "email": "elizabeth@iqualcar.com" - }, - { - "id": 7141, - "guid": "9301e9da-ed27-4509-a0c0-9841586227b9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Caroline Cramer", - "company": "Anagraph", - "phone": "815-471-3998", - "email": "caroline@anagraph.com" - }, - { - "id": 7142, - "guid": "d4e69d19-f454-4011-a215-d1040547e53a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Allison Hailey", - "company": "Systheon", - "phone": "883-515-2650", - "email": "allison@systheon.com" - }, - { - "id": 7143, - "guid": "e38a8411-33bd-4f56-9f7d-b79b07c4a8fb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Crossman", - "company": "Polytheon", - "phone": "896-447-3827", - "email": "madison@polytheon.com" - }, - { - "id": 7144, - "guid": "46ad7b16-8ff7-4280-8b7a-287f66e95e27", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Young", - "company": "Vencom", - "phone": "852-476-2327", - "email": "trinity@vencom.com" - }, - { - "id": 7145, - "guid": "afbb2b87-94f6-4946-af6d-aacd17b51a3e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Chandter", - "company": "iEnland", - "phone": "841-424-2442", - "email": "gabriella@ienland.com" - }, - { - "id": 7146, - "guid": "527349fc-a936-4451-83f3-10c88c762e5a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Anna Youmans", - "company": "Jamrola", - "phone": "846-518-2120", - "email": "anna@jamrola.com" - }, - { - "id": 7147, - "guid": "f7ac1f7e-896c-45d2-b713-3df95ac0a6a5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Michaelson", - "company": "Aprama", - "phone": "821-543-3453", - "email": "mariah@aprama.com" - }, - { - "id": 7148, - "guid": "833200e7-5d94-40ed-a0b9-bd21be2af5cc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Haig", - "company": "Teraserv", - "phone": "816-542-3448", - "email": "kaitlyn@teraserv.com" - }, - { - "id": 7149, - "guid": "db16bffc-abf0-4da6-8d4a-969cdd7e5af8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ashley Watson", - "company": "Infragraph", - "phone": "811-448-3364", - "email": "ashley@infragraph.com" - }, - { - "id": 7150, - "guid": "5d714cbb-9dd0-4c72-8a87-3b8f9d494ae2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Young", - "company": "Polytheon", - "phone": "829-427-2722", - "email": "morgan@polytheon.com" - }, - { - "id": 7151, - "guid": "e6b1d55f-ca5c-434c-8904-9742760e5b7d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Neal", - "company": "Transtouch", - "phone": "885-461-3028", - "email": "hailey@transtouch.com" - }, - { - "id": 7152, - "guid": "fc702eb2-014f-4c9b-80b1-f49943c918c4", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Nash", - "company": "Safetrust", - "phone": "866-552-2984", - "email": "katelyn@safetrust.com" - }, - { - "id": 7153, - "guid": "044b9e22-7e80-4a7d-b7f1-c8668c1ae863", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jessica Ford", - "company": "eSteganoergy", - "phone": "871-479-3769", - "email": "jessica@esteganoergy.com" - }, - { - "id": 7154, - "guid": "dca0b57c-6b00-4722-96a2-fd67fdd63e6e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Wayne", - "company": "Orthomedia", - "phone": "848-465-3592", - "email": "kaitlyn@orthomedia.com" - }, - { - "id": 7155, - "guid": "e6d48988-9d8d-4fbf-80ad-1c3fbad15eb1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Otis", - "company": "Multitiqua", - "phone": "888-441-2337", - "email": "kylie@multitiqua.com" - }, - { - "id": 7156, - "guid": "c39cca13-6ab6-4c87-878e-a3b6cb43d2f0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Hamphrey", - "company": "Teknoplexon", - "phone": "805-592-3090", - "email": "allison@teknoplexon.com" - }, - { - "id": 7157, - "guid": "d85d8f33-039a-4402-a5fb-fe389e5f020a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Mercer", - "company": "iMedconik", - "phone": "800-494-2603", - "email": "madelyn@imedconik.com" - }, - { - "id": 7158, - "guid": "bde2640c-2a72-41be-a5fd-038f9c06b035", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Creighton", - "company": "SysUSA", - "phone": "892-508-3206", - "email": "ariana@sysusa.com" - }, - { - "id": 7159, - "guid": "835582be-4cbf-4bcb-80dd-5924917ac25f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Thorndike", - "company": "Teratopia", - "phone": "870-448-3822", - "email": "zoey@teratopia.com" - }, - { - "id": 7160, - "guid": "24e5afaf-9119-4374-929a-6f7de07bfdea", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Genesis Abramson", - "company": "Generola", - "phone": "863-551-3089", - "email": "genesis@generola.com" - }, - { - "id": 7161, - "guid": "c69b814b-f20d-48ec-8989-bc24781b10dc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Sheldon", - "company": "Sontopia", - "phone": "825-438-3355", - "email": "peyton@sontopia.com" - }, - { - "id": 7162, - "guid": "caac94be-4c6a-4768-9696-63cb684048aa", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Youmans", - "company": "Vencom", - "phone": "851-445-2697", - "email": "genesis@vencom.com" - }, - { - "id": 7163, - "guid": "1f965168-cdea-4ac6-b1d6-229a486a424a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Brickman", - "company": "Truetomic", - "phone": "872-424-2246", - "email": "gianna@truetomic.com" - }, - { - "id": 7164, - "guid": "ac2696d2-49cd-437b-adfa-82b7f68fab97", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Nash", - "company": "RoboAerlogix", - "phone": "846-586-3010", - "email": "jocelyn@roboaerlogix.com" - }, - { - "id": 7165, - "guid": "7711850e-1501-42c6-820a-2630f0b20ccc", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Mercer", - "company": "Fibrotopia", - "phone": "841-403-2324", - "email": "makayla@fibrotopia.com" - }, - { - "id": 7166, - "guid": "3c40e860-3c75-41f3-9a92-d8946a9fb390", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Nathan", - "company": "Westmedia", - "phone": "804-489-2221", - "email": "leah@westmedia.com" - }, - { - "id": 7167, - "guid": "6f2dc213-7c1d-479a-8459-71661f0a4504", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Morrison", - "company": "Aprama", - "phone": "881-474-2105", - "email": "gabriella@aprama.com" - }, - { - "id": 7168, - "guid": "95b12424-d849-4ed3-9e5b-a9b074ae0dcb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Chesterton", - "company": "Interliant", - "phone": "894-569-2528", - "email": "mia@interliant.com" - }, - { - "id": 7169, - "guid": "dca882d9-dacb-489c-be94-0e395d0cf617", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Day", - "company": "Anagraph", - "phone": "896-420-2487", - "email": "peyton@anagraph.com" - }, - { - "id": 7170, - "guid": "87e18f5e-8b51-499a-a180-7122b4bef6c7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Webster", - "company": "Teraserv", - "phone": "867-542-3148", - "email": "melanie@teraserv.com" - }, - { - "id": 7171, - "guid": "faaf2da3-b8c2-479c-a9f0-6543f2e04ab9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Hodges", - "company": "Xeicon", - "phone": "874-588-3315", - "email": "anna@xeicon.com" - }, - { - "id": 7172, - "guid": "c3cac73d-fce7-4ac2-b4a9-3b188266158f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooke Crossman", - "company": "OpKeycomm", - "phone": "884-460-3082", - "email": "brooke@opkeycomm.com" - }, - { - "id": 7173, - "guid": "9ab173f0-6334-4d1e-9357-410835533134", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Claire Hailey", - "company": "Pericenta", - "phone": "853-416-2745", - "email": "claire@pericenta.com" - }, - { - "id": 7174, - "guid": "aa64faf8-5ea2-4015-aa82-ca88ae4f4875", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Charlotte Wesley", - "company": "Unconix", - "phone": "891-533-2933", - "email": "charlotte@unconix.com" - }, - { - "id": 7175, - "guid": "848db3bc-d402-40ee-a0c2-db728f7fb750", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madison Sherlock", - "company": "Indisco", - "phone": "830-417-2771", - "email": "madison@indisco.com" - }, - { - "id": 7176, - "guid": "2dccf8dc-0a29-4e1b-ba67-2a65b684a7f1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Smith", - "company": "Allnet", - "phone": "896-431-2639", - "email": "nevaeh@allnet.com" - }, - { - "id": 7177, - "guid": "557d8b9f-9245-4c42-9338-56c25825ddd2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Nathan", - "company": "Generola", - "phone": "833-560-2671", - "email": "melanie@generola.com" - }, - { - "id": 7178, - "guid": "ad7535d4-9185-47ee-902f-f2a233929965", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brianna Freeman", - "company": "Westmedia", - "phone": "802-558-3143", - "email": "brianna@westmedia.com" - }, - { - "id": 7179, - "guid": "39143fd8-fcd7-43b4-9291-4234f9825961", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Timmons", - "company": "Robotemplate", - "phone": "819-459-3023", - "email": "alexa@robotemplate.com" - }, - { - "id": 7180, - "guid": "09c013a9-5d0a-4029-bc49-ca8457856a8d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bella Gibbs", - "company": "Orthosoft", - "phone": "830-439-2595", - "email": "bella@orthosoft.com" - }, - { - "id": 7181, - "guid": "4d8098e0-210c-4d95-bd38-221fd3bc6d48", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Winter", - "company": "Transtouch", - "phone": "806-404-2699", - "email": "emily@transtouch.com" - }, - { - "id": 7182, - "guid": "35b8f08d-9cb4-494e-97d0-fbd31545f999", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Julia Neal", - "company": "Safetrust", - "phone": "874-404-3440", - "email": "julia@safetrust.com" - }, - { - "id": 7183, - "guid": "fafe460b-4782-4692-98ee-ddcbc4029ddb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Caroline Freeman", - "company": "Entcast", - "phone": "846-407-3737", - "email": "caroline@entcast.com" - }, - { - "id": 7184, - "guid": "eeecc35e-65d6-4cf4-9762-8146b3c04a77", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Genesis Chapman", - "company": "Jamconik", - "phone": "894-508-2144", - "email": "genesis@jamconik.com" - }, - { - "id": 7185, - "guid": "c676db80-a4eb-4dc0-a69d-513a11e33f21", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aubrey Gardner", - "company": "iOptystix", - "phone": "842-405-3092", - "email": "aubrey@ioptystix.com" - }, - { - "id": 7186, - "guid": "f48371ff-28f1-4f91-ad15-281ee5dee51b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Freeman", - "company": "Infraique", - "phone": "870-534-3944", - "email": "lauren@infraique.com" - }, - { - "id": 7187, - "guid": "be0a6f6c-a421-412d-851d-8eafd1e3733e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Youmans", - "company": "Proline", - "phone": "813-447-3483", - "email": "victoria@proline.com" - }, - { - "id": 7188, - "guid": "1ddee731-0fd1-4d58-a679-2e1678c08550", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maya Young", - "company": "Xeicon", - "phone": "871-426-3773", - "email": "maya@xeicon.com" - }, - { - "id": 7189, - "guid": "3a8d68f3-14dc-4db0-8102-23a4f32835d8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Nash", - "company": "Cryptotegrity", - "phone": "875-498-3144", - "email": "ava@cryptotegrity.com" - }, - { - "id": 7190, - "guid": "496b0bb9-c47f-4263-9750-b19f381308f8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Carrington", - "company": "Teraserv", - "phone": "842-495-2193", - "email": "isabella@teraserv.com" - }, - { - "id": 7191, - "guid": "28048e29-74e6-4fa6-a790-9568e934f0a8", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Wayne", - "company": "Orthomedia", - "phone": "878-533-3954", - "email": "claire@orthomedia.com" - }, - { - "id": 7192, - "guid": "359e832c-5c05-4fe9-8803-014a018323f7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Chandter", - "company": "Safetrust", - "phone": "873-586-2653", - "email": "jocelyn@safetrust.com" - }, - { - "id": 7193, - "guid": "408659c2-6fd2-4986-a10d-d022b0240cea", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Charlson", - "company": "Enlogia", - "phone": "861-577-2686", - "email": "vanessa@enlogia.com" - }, - { - "id": 7194, - "guid": "2f6388b2-10d3-4b58-bcd4-862d201516d0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Goldman", - "company": "Idmax", - "phone": "818-454-2147", - "email": "julia@idmax.com" - }, - { - "id": 7195, - "guid": "ba248d2d-568c-4281-a31c-833e2c4ac317", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Galbraith", - "company": "Skydata", - "phone": "894-576-2437", - "email": "alexandra@skydata.com" - }, - { - "id": 7196, - "guid": "3e604146-9800-4fb2-91e9-0a512400a32b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Owen", - "company": "Transtouch", - "phone": "818-425-3673", - "email": "mya@transtouch.com" - }, - { - "id": 7197, - "guid": "5c291210-58ec-4f03-9153-e0de7671d3ec", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Watson", - "company": "eEyetanic", - "phone": "889-571-3031", - "email": "kayla@eeyetanic.com" - }, - { - "id": 7198, - "guid": "6d7083c0-8ef5-48c1-aa88-7816ee3d38c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Miln", - "company": "RoboAerlogix", - "phone": "862-521-2372", - "email": "rachel@roboaerlogix.com" - }, - { - "id": 7199, - "guid": "edcc5397-2dae-4864-b538-d2b9befb9c2a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Faith Campbell", - "company": "SysVenamerica", - "phone": "888-529-3687", - "email": "faith@sysvenamerica.com" - }, - { - "id": 7200, - "guid": "49980d23-ea15-4a3a-b9b5-b40567706ff4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mia Carey", - "company": "iEnland", - "phone": "864-501-3460", - "email": "mia@ienland.com" - }, - { - "id": 7201, - "guid": "66de9927-c4dc-4fcd-99dc-7c56e8e3bdc6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Neal", - "company": "Entcast", - "phone": "863-461-3727", - "email": "claire@entcast.com" - }, - { - "id": 7202, - "guid": "9b92e1ea-0d50-4c1c-bd03-497c1292bf8e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Arianna Waller", - "company": "Syssoft", - "phone": "822-566-2362", - "email": "arianna@syssoft.com" - }, - { - "id": 7203, - "guid": "76f09ffa-7c72-493a-a369-bb401fc0a1fb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Wood", - "company": "Ventanium", - "phone": "877-545-2837", - "email": "katherine@ventanium.com" - }, - { - "id": 7204, - "guid": "acc2214d-0ab9-4ba8-8103-e0adc38d49fa", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Anna WifKinson", - "company": "Generola", - "phone": "878-454-3391", - "email": "anna@generola.com" - }, - { - "id": 7205, - "guid": "605ce645-24fb-4b18-9832-44302132b9da", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Morrison", - "company": "Systheon", - "phone": "802-596-2592", - "email": "mia@systheon.com" - }, - { - "id": 7206, - "guid": "ccc01656-c513-4143-a991-95aecf064545", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Wayne", - "company": "Cryptotegrity", - "phone": "885-592-3125", - "email": "addison@cryptotegrity.com" - }, - { - "id": 7207, - "guid": "883d9c14-081d-4822-950e-6d88c8d35fa4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Vance", - "company": "Pacwest", - "phone": "831-440-3813", - "email": "elizabeth@pacwest.com" - }, - { - "id": 7208, - "guid": "90ec9740-0408-4f2d-af57-ceb4ded51447", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ariana Gibbs", - "company": "Allnet", - "phone": "863-448-3019", - "email": "ariana@allnet.com" - }, - { - "id": 7209, - "guid": "537b56fb-bf66-40cf-adb7-f89c4cb95b38", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Hailey", - "company": "Robocomm", - "phone": "864-430-3617", - "email": "riley@robocomm.com" - }, - { - "id": 7210, - "guid": "3c919d44-02f3-43ff-bb80-1679b07833be", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Destiny Gibbs", - "company": "Genland", - "phone": "820-597-2951", - "email": "destiny@genland.com" - }, - { - "id": 7211, - "guid": "eba48d73-4a07-42f0-8634-1f1004cb0061", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emily Thornton", - "company": "Venconix", - "phone": "803-427-2863", - "email": "emily@venconix.com" - }, - { - "id": 7212, - "guid": "4d05aa1d-a449-4aa1-87eb-fffef5fdfbb6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Caroline Walkman", - "company": "Videobanc", - "phone": "867-418-2990", - "email": "caroline@videobanc.com" - }, - { - "id": 7213, - "guid": "5d3266fe-a63d-411d-85f4-4b5993ee35ed", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Oliver", - "company": "Nanobanc", - "phone": "811-474-2925", - "email": "arianna@nanobanc.com" - }, - { - "id": 7214, - "guid": "ea804226-8da7-4b70-b444-4a09e4ebbe9f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Gilbert", - "company": "Thermotomic", - "phone": "866-547-2117", - "email": "samantha@thermotomic.com" - }, - { - "id": 7215, - "guid": "d689c247-caa7-4737-b005-5dc735992860", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Molligan", - "company": "Techtron", - "phone": "831-571-2506", - "email": "jocelyn@techtron.com" - }, - { - "id": 7216, - "guid": "837e22ba-b4b3-438a-a973-5c838e35b419", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Croftoon", - "company": "Genland", - "phone": "891-419-3776", - "email": "gabrielle@genland.com" - }, - { - "id": 7217, - "guid": "3b15b59b-fc69-4544-9954-ae3d923e3532", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Oliver", - "company": "Sontopia", - "phone": "813-510-3085", - "email": "mariah@sontopia.com" - }, - { - "id": 7218, - "guid": "ec8423a9-86e2-47c8-bbae-33874743cb2d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Gate", - "company": "Teratopia", - "phone": "890-422-3891", - "email": "sophia@teratopia.com" - }, - { - "id": 7219, - "guid": "eb339372-dc26-4ff0-9380-1dd4aaad55ab", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brianna Croftoon", - "company": "Turbomart", - "phone": "818-571-2460", - "email": "brianna@turbomart.com" - }, - { - "id": 7220, - "guid": "38ba4efa-b816-4652-ad0f-b20a7e527e72", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Galbraith", - "company": "Teraserv", - "phone": "817-570-3476", - "email": "ariana@teraserv.com" - }, - { - "id": 7221, - "guid": "6eaf66e6-00e3-4790-a33d-a6b2143caa11", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Waller", - "company": "Infraique", - "phone": "836-565-2296", - "email": "maya@infraique.com" - }, - { - "id": 7222, - "guid": "903c398e-eeff-4c9a-935b-33b07604136a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Vanessa Daniels", - "company": "Cryptotegrity", - "phone": "883-439-3787", - "email": "vanessa@cryptotegrity.com" - }, - { - "id": 7223, - "guid": "85c20e6b-f845-4286-94f3-b5b5118bc859", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Wallace", - "company": "Safeagra", - "phone": "808-582-2779", - "email": "savannah@safeagra.com" - }, - { - "id": 7224, - "guid": "db7b9025-a36f-4107-93af-c2b7a03d0bd1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Molly White", - "company": "Safetrust", - "phone": "815-579-2589", - "email": "molly@safetrust.com" - }, - { - "id": 7225, - "guid": "51030350-d695-4536-8b08-4e1dc7a5a133", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Gerald", - "company": "Ameritron", - "phone": "831-587-2492", - "email": "paige@ameritron.com" - }, - { - "id": 7226, - "guid": "b962951e-3888-433c-b391-bf8c235cb7e0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Sheldon", - "company": "Cryptotegrity", - "phone": "827-433-3895", - "email": "sophia@cryptotegrity.com" - }, - { - "id": 7227, - "guid": "1891943f-40f8-42c3-9a48-cde3526e0d42", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Warren", - "company": "SysVenamerica", - "phone": "884-406-2888", - "email": "madeline@sysvenamerica.com" - }, - { - "id": 7228, - "guid": "f2bf56b9-e40a-4ba8-bbc7-7808f769af4c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Conors", - "company": "Westmedia", - "phone": "844-503-2298", - "email": "mackenzie@westmedia.com" - }, - { - "id": 7229, - "guid": "ba69b28b-6f95-4aa9-adee-f964af4267b3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Morrison", - "company": "OpKeycomm", - "phone": "861-505-2125", - "email": "ariana@opkeycomm.com" - }, - { - "id": 7230, - "guid": "91a38989-028e-44e4-a50d-546e9a28c202", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ava Brooks", - "company": "Rapigrafix", - "phone": "869-452-2193", - "email": "ava@rapigrafix.com" - }, - { - "id": 7231, - "guid": "496c11eb-7841-41b3-a09a-f943a7f12924", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sofia Otis", - "company": "Westgate", - "phone": "889-530-3460", - "email": "sofia@westgate.com" - }, - { - "id": 7232, - "guid": "9941d69b-9397-4ea8-8831-f58edc6ab7af", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Camila Gardner", - "company": "Technogra", - "phone": "815-427-3137", - "email": "camila@technogra.com" - }, - { - "id": 7233, - "guid": "cc5192a0-581b-43bb-bdaf-f59afe6ed076", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Thomson", - "company": "Rapigrafix", - "phone": "841-415-3865", - "email": "victoria@rapigrafix.com" - }, - { - "id": 7234, - "guid": "e27af243-f715-4d90-b2a8-f5c7a1b774cb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Michaelson", - "company": "US Infratouch", - "phone": "864-509-2270", - "email": "mariah@us infratouch.com" - }, - { - "id": 7235, - "guid": "41b59fa2-a3c2-4cbe-969e-a3845b15ac06", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Abramson", - "company": "Jamrola", - "phone": "819-405-2957", - "email": "madison@jamrola.com" - }, - { - "id": 7236, - "guid": "27b429c8-4286-4cad-b2c5-3b9b38ea17a0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Osborne", - "company": "Netseco", - "phone": "880-560-2166", - "email": "ava@netseco.com" - }, - { - "id": 7237, - "guid": "15e00660-84b2-455e-a980-9b76a7ded58e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Nathan", - "company": "Teknoplexon", - "phone": "808-576-3673", - "email": "gabriella@teknoplexon.com" - }, - { - "id": 7238, - "guid": "e7580ab1-62d4-4bd5-a62f-15cbe8522c5e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Oswald", - "company": "Nanobanc", - "phone": "886-451-3980", - "email": "mariah@nanobanc.com" - }, - { - "id": 7239, - "guid": "5b2360fc-9282-41b5-9618-6c6f0ef62630", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katelyn Fisher", - "company": "Teratopia", - "phone": "892-524-3850", - "email": "katelyn@teratopia.com" - }, - { - "id": 7240, - "guid": "656b3c92-48b9-4d35-b249-bbeea7ce22be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Serenity Charlson", - "company": "Ameritron", - "phone": "830-434-2903", - "email": "serenity@ameritron.com" - }, - { - "id": 7241, - "guid": "d307f835-ae1a-4e83-9310-ef99963b299f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Paige Carey", - "company": "eSteganoergy", - "phone": "880-504-3876", - "email": "paige@esteganoergy.com" - }, - { - "id": 7242, - "guid": "7652da6a-bbb9-48a9-b24d-45c29f74f0af", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Haig", - "company": "Hypervaco", - "phone": "874-467-2209", - "email": "katelyn@hypervaco.com" - }, - { - "id": 7243, - "guid": "3feb3635-8b00-431a-9c1c-a23f69dac869", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Gustman", - "company": "OpKeycomm", - "phone": "869-506-2109", - "email": "amelia@opkeycomm.com" - }, - { - "id": 7244, - "guid": "d224b44d-c243-4313-846c-681a50ea0edb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Miln", - "company": "Turbomart", - "phone": "804-548-3822", - "email": "madelyn@turbomart.com" - }, - { - "id": 7245, - "guid": "baec2ee2-75a1-4440-a4b1-981bcb3251e3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Neal", - "company": "Vencom", - "phone": "808-412-3274", - "email": "serenity@vencom.com" - }, - { - "id": 7246, - "guid": "516f13ac-a6cf-4b56-b530-235037dfecbc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sarah Wainwright", - "company": "Fibrotopia", - "phone": "824-580-3996", - "email": "sarah@fibrotopia.com" - }, - { - "id": 7247, - "guid": "dbb73087-a172-43c1-902c-087189d8504f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Miers", - "company": "Syssoft", - "phone": "813-483-3790", - "email": "addison@syssoft.com" - }, - { - "id": 7248, - "guid": "8a477333-f81d-4c42-9550-930b49625580", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Wallace", - "company": "Celgra", - "phone": "855-431-3826", - "email": "evelyn@celgra.com" - }, - { - "id": 7249, - "guid": "51b15675-1809-4e83-bcce-89e14d362eb9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bailey Oldridge", - "company": "iEnland", - "phone": "878-571-3044", - "email": "bailey@ienland.com" - }, - { - "id": 7250, - "guid": "f0f3750c-ac1e-4b36-b3b0-b49f432f9497", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Wesley", - "company": "Gigaura", - "phone": "813-592-2232", - "email": "savannah@gigaura.com" - }, - { - "id": 7251, - "guid": "64361074-e392-425c-bcf3-717c95449654", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Brown", - "company": "SysVenamerica", - "phone": "887-482-2463", - "email": "mya@sysvenamerica.com" - }, - { - "id": 7252, - "guid": "e52a8ed1-4aef-45d5-9bc7-87c64f5057e6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Clapton", - "company": "Airdyne", - "phone": "817-435-3952", - "email": "claire@airdyne.com" - }, - { - "id": 7253, - "guid": "5ce23fd8-c80b-4aee-a67b-cc43ab78c747", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Carroll", - "company": "Westmedia", - "phone": "835-401-3632", - "email": "aaliyah@westmedia.com" - }, - { - "id": 7254, - "guid": "089edd57-ec62-4b12-b86e-3e9695668ee1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Molligan", - "company": "Robotemplate", - "phone": "879-530-3124", - "email": "emily@robotemplate.com" - }, - { - "id": 7255, - "guid": "b1ce90d9-997f-4c9e-ade9-99568edd7ca6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Osborne", - "company": "Pericenta", - "phone": "805-476-3638", - "email": "zoe@pericenta.com" - }, - { - "id": 7256, - "guid": "e32af01b-b756-4793-b5f9-cfc5711628bc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Serenity Gibbs", - "company": "Celgra", - "phone": "809-581-3491", - "email": "serenity@celgra.com" - }, - { - "id": 7257, - "guid": "d42fc115-03dc-44d0-82bd-4c8c308397c6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Freeman", - "company": "Generola", - "phone": "870-569-2069", - "email": "avery@generola.com" - }, - { - "id": 7258, - "guid": "ebb81408-5714-414d-8b08-255ae67967c9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Riley Haig", - "company": "Hypervaco", - "phone": "846-491-2744", - "email": "riley@hypervaco.com" - }, - { - "id": 7259, - "guid": "63cb1099-ace2-4339-b52c-0424048fca66", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Hoggarth", - "company": "Techtron", - "phone": "819-501-2762", - "email": "serenity@techtron.com" - }, - { - "id": 7260, - "guid": "5f65f33f-e9e3-4448-b4eb-16fc4014666c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Waller", - "company": "Titanirola", - "phone": "857-491-3186", - "email": "serenity@titanirola.com" - }, - { - "id": 7261, - "guid": "d679facc-faab-4d4d-be1a-bd8e227e2cec", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Carrington", - "company": "iMedconik", - "phone": "822-505-3272", - "email": "brianna@imedconik.com" - }, - { - "id": 7262, - "guid": "b6f68352-3a87-44f3-b1ce-5de28d71803b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Charlson", - "company": "Rapigrafix", - "phone": "890-494-3491", - "email": "olivia@rapigrafix.com" - }, - { - "id": 7263, - "guid": "fe19ae8e-55c3-4bc2-8e18-d0ef88d34b2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Rachel Davidson", - "company": "Openserve", - "phone": "874-582-2963", - "email": "rachel@openserve.com" - }, - { - "id": 7264, - "guid": "f21ca9a1-5ba6-4bad-81ce-883f4eae45b7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Milton", - "company": "Safetrust", - "phone": "812-530-2595", - "email": "emma@safetrust.com" - }, - { - "id": 7265, - "guid": "c1308b95-a96a-4138-8ad1-8ecd8ab1ff48", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Wayne", - "company": "Allnet", - "phone": "813-421-3416", - "email": "lauren@allnet.com" - }, - { - "id": 7266, - "guid": "6685c0c9-6bd1-4a16-ae92-2d790c1771b8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Milton", - "company": "Xeicon", - "phone": "847-523-3268", - "email": "morgan@xeicon.com" - }, - { - "id": 7267, - "guid": "0b461073-d8f8-4dfc-9903-62014f24a397", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Young", - "company": "Gigaura", - "phone": "805-547-3930", - "email": "destiny@gigaura.com" - }, - { - "id": 7268, - "guid": "0b760d43-3692-49e7-8e26-90c87611b215", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexa Ford", - "company": "Aprama", - "phone": "862-423-2340", - "email": "alexa@aprama.com" - }, - { - "id": 7269, - "guid": "0492368b-db3a-4c2e-9c31-0a1e97444c60", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Mercer", - "company": "Keytheon", - "phone": "847-550-3394", - "email": "genesis@keytheon.com" - }, - { - "id": 7270, - "guid": "ccfa3400-5c6e-4732-b9c6-a1737ad00946", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Paige Miller", - "company": "Hypervaco", - "phone": "820-574-3633", - "email": "paige@hypervaco.com" - }, - { - "id": 7271, - "guid": "5a622919-ea21-4fb1-8cc0-d2433dc51193", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Adamson", - "company": "Hypervaco", - "phone": "873-511-3501", - "email": "katherine@hypervaco.com" - }, - { - "id": 7272, - "guid": "aac73e98-68db-4dd0-8f08-a779c413b1db", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Miln", - "company": "iSkyvaco", - "phone": "805-481-2453", - "email": "mariah@iskyvaco.com" - }, - { - "id": 7273, - "guid": "ad059a7c-d81c-4aa3-9a85-4d88c404a334", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Gibbs", - "company": "OpKeycomm", - "phone": "801-487-2269", - "email": "vanessa@opkeycomm.com" - }, - { - "id": 7274, - "guid": "e87c9406-4004-493d-9cd0-5601f2a95147", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Addison Hancock", - "company": "Enlogia", - "phone": "893-404-2986", - "email": "addison@enlogia.com" - }, - { - "id": 7275, - "guid": "13ba9636-4064-4975-aaed-16fbed9b4816", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Thornton", - "company": "Venconix", - "phone": "823-595-3622", - "email": "mya@venconix.com" - }, - { - "id": 7276, - "guid": "42f4ffe3-d6e3-4365-81f7-95b6a86117b2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Gill", - "company": "Celgra", - "phone": "832-438-3124", - "email": "molly@celgra.com" - }, - { - "id": 7277, - "guid": "2483c534-027a-45f2-8a94-71811d2e0c4b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maria Chesterton", - "company": "Venconix", - "phone": "871-409-3205", - "email": "maria@venconix.com" - }, - { - "id": 7278, - "guid": "b81401ad-2940-4ba4-b00b-95b462d38826", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Wainwright", - "company": "Idmax", - "phone": "834-555-2827", - "email": "khloe@idmax.com" - }, - { - "id": 7279, - "guid": "ab5de607-0c87-4e45-abb9-de5acdca4de2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Fisher", - "company": "Westmedia", - "phone": "840-568-3366", - "email": "olivia@westmedia.com" - }, - { - "id": 7280, - "guid": "e34a37f2-02de-437a-a1f4-0d50bd48360a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Waller", - "company": "Mescaridic", - "phone": "849-401-3914", - "email": "molly@mescaridic.com" - }, - { - "id": 7281, - "guid": "1ab48a42-93d4-495d-8b07-2b0511d0339d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aaliyah Hardman", - "company": "Interliant", - "phone": "841-412-3239", - "email": "aaliyah@interliant.com" - }, - { - "id": 7282, - "guid": "05916494-7606-4a79-8e27-59a85ab4c828", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ava Ogden", - "company": "Robotomic", - "phone": "841-478-2882", - "email": "ava@robotomic.com" - }, - { - "id": 7283, - "guid": "f21cb89f-9079-4b9c-a894-4aad252d0c88", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Oldman", - "company": "Westgate", - "phone": "884-585-2534", - "email": "autumn@westgate.com" - }, - { - "id": 7284, - "guid": "c898141e-f254-4556-a53b-2b7c4a14baae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Nash", - "company": "Allnet", - "phone": "807-547-2845", - "email": "caroline@allnet.com" - }, - { - "id": 7285, - "guid": "9b27687f-4193-4d0e-b99c-fe6bae31be8a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Hoggarth", - "company": "Westmedia", - "phone": "835-513-3000", - "email": "faith@westmedia.com" - }, - { - "id": 7286, - "guid": "450c0b7d-e95e-47bb-b52d-40cac5b9fde4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Croftoon", - "company": "Anaframe", - "phone": "836-495-3129", - "email": "paige@anaframe.com" - }, - { - "id": 7287, - "guid": "372493e1-22dd-401a-86ed-cc47d297f6cb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooklyn Goldman", - "company": "Turbomart", - "phone": "848-469-2632", - "email": "brooklyn@turbomart.com" - }, - { - "id": 7288, - "guid": "4b72573d-4d91-4b98-b749-ae9d5cb4a4fd", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Morrison", - "company": "US Infratouch", - "phone": "886-592-2180", - "email": "chloe@us infratouch.com" - }, - { - "id": 7289, - "guid": "38431150-5fc5-436c-b929-61b8d7e43592", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Allison Hodges", - "company": "Transtouch", - "phone": "801-463-2320", - "email": "allison@transtouch.com" - }, - { - "id": 7290, - "guid": "d8f9afb0-e08f-4da5-96bf-2e4342ef101c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Campbell", - "company": "Teratopia", - "phone": "886-404-3464", - "email": "aaliyah@teratopia.com" - }, - { - "id": 7291, - "guid": "de139282-5d36-45ce-bec8-ccfcbf039c6f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katherine Turner", - "company": "Infraique", - "phone": "892-442-3739", - "email": "katherine@infraique.com" - }, - { - "id": 7292, - "guid": "69dd8ad5-9500-4ad4-8dc0-ba7770dea8bc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Abramson", - "company": "Unologic", - "phone": "825-513-2685", - "email": "kayla@unologic.com" - }, - { - "id": 7293, - "guid": "63ca21ba-5c4b-42fd-a1e6-7676236bdb14", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emma Goldman", - "company": "Orthosoft", - "phone": "877-424-3751", - "email": "emma@orthosoft.com" - }, - { - "id": 7294, - "guid": "bdeab22f-d54b-402b-a7ff-38325db0f0e1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Higgins", - "company": "Raylog", - "phone": "873-412-2597", - "email": "rachel@raylog.com" - }, - { - "id": 7295, - "guid": "25b3643f-e267-4581-8072-02ef05145698", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Gill", - "company": "Quintegrity", - "phone": "809-418-3206", - "email": "samantha@quintegrity.com" - }, - { - "id": 7296, - "guid": "8ca3e1f9-7fc1-4e71-92ba-999dc234cb7a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Ward", - "company": "Syssoft", - "phone": "861-594-2133", - "email": "victoria@syssoft.com" - }, - { - "id": 7297, - "guid": "f5696aad-af42-454d-9817-5077751248cb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Hoggarth", - "company": "Tekcar", - "phone": "844-555-2933", - "email": "hannah@tekcar.com" - }, - { - "id": 7298, - "guid": "1040bcb6-ad0e-4d3a-8d76-f576563f904b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Crossman", - "company": "SysUSA", - "phone": "867-453-2638", - "email": "gabriella@sysusa.com" - }, - { - "id": 7299, - "guid": "6db2de95-7983-4c37-afdf-7fbb66d234d3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Julia Hoggarth", - "company": "InfoAirway", - "phone": "879-560-2460", - "email": "julia@infoairway.com" - }, - { - "id": 7300, - "guid": "91823e11-6e1c-411e-a6c0-e9d0e9dd77ed", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Otis", - "company": "Rapigrafix", - "phone": "857-461-2023", - "email": "amelia@rapigrafix.com" - }, - { - "id": 7301, - "guid": "cc7daf1a-ec55-4c05-8a7a-c9458a771dec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Walkman", - "company": "Keytheon", - "phone": "898-502-2569", - "email": "mya@keytheon.com" - }, - { - "id": 7302, - "guid": "a64846a4-420d-4c45-8f08-2f57ca929c71", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mia Neal", - "company": "Qualserve", - "phone": "835-545-3801", - "email": "mia@qualserve.com" - }, - { - "id": 7303, - "guid": "74d90b09-99f3-4919-96ab-dd4607bc81b6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lauren Gerald", - "company": "eEyetanic", - "phone": "894-513-2944", - "email": "lauren@eeyetanic.com" - }, - { - "id": 7304, - "guid": "d3e4c776-cc30-4844-ac28-33b850828fab", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ava Conors", - "company": "Idmax", - "phone": "820-435-3976", - "email": "ava@idmax.com" - }, - { - "id": 7305, - "guid": "21959a7b-2843-48cc-b97b-182528c484f9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Eva Carey", - "company": "iQualcar", - "phone": "800-593-3990", - "email": "eva@iqualcar.com" - }, - { - "id": 7306, - "guid": "27e8a892-ffbb-4812-a8da-e5c747d890d2", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoey Oliver", - "company": "Orthomedia", - "phone": "833-446-2616", - "email": "zoey@orthomedia.com" - }, - { - "id": 7307, - "guid": "230fc682-f107-4c2a-85dd-f17ec85e672a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Paige Chesterton", - "company": "Unconix", - "phone": "813-523-3255", - "email": "paige@unconix.com" - }, - { - "id": 7308, - "guid": "61e45223-80b1-4554-986f-4e48d1b821f0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Audrey Miller", - "company": "Dynarama", - "phone": "871-423-3362", - "email": "audrey@dynarama.com" - }, - { - "id": 7309, - "guid": "b23915bd-9f44-4e4f-a9a1-4398ab0c34b4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Cook", - "company": "Truetomic", - "phone": "879-498-3484", - "email": "grace@truetomic.com" - }, - { - "id": 7310, - "guid": "cafc2c63-2886-47d8-be47-7d50692d1227", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Gibbs", - "company": "Generola", - "phone": "803-512-2960", - "email": "bailey@generola.com" - }, - { - "id": 7311, - "guid": "be7acf1e-c611-4c8d-bf6e-34bbb46eaf10", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Young", - "company": "Vencom", - "phone": "855-487-3085", - "email": "nevaeh@vencom.com" - }, - { - "id": 7312, - "guid": "df39ac34-8956-4325-87a0-4ed964acb959", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Chloe Milton", - "company": "iMedconik", - "phone": "890-501-3061", - "email": "chloe@imedconik.com" - }, - { - "id": 7313, - "guid": "d9755a5d-730f-42f0-9c8a-813af19bf679", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Grace Milton", - "company": "Idmax", - "phone": "812-427-3210", - "email": "grace@idmax.com" - }, - { - "id": 7314, - "guid": "c0f421f4-adf7-4414-b98f-4cc193e155d5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sarah Ogden", - "company": "Genland", - "phone": "843-484-2027", - "email": "sarah@genland.com" - }, - { - "id": 7315, - "guid": "b21131cd-6048-4832-92dc-c038fce457cf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Watson", - "company": "Unologic", - "phone": "861-497-2505", - "email": "kaitlyn@unologic.com" - }, - { - "id": 7316, - "guid": "b2aed946-78d3-4efa-ba41-dfacbcd6d837", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Hawkins", - "company": "Entcast", - "phone": "891-467-3851", - "email": "mackenzie@entcast.com" - }, - { - "id": 7317, - "guid": "006ad094-2964-4609-9d19-6eba9c3c6d71", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Ogden", - "company": "iEnland", - "phone": "813-468-3730", - "email": "lillian@ienland.com" - }, - { - "id": 7318, - "guid": "fe8e58d7-2947-4595-ae3e-887c9e5e920c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Winter", - "company": "Ventanium", - "phone": "880-461-2584", - "email": "chloe@ventanium.com" - }, - { - "id": 7319, - "guid": "8bf22226-00ac-4103-a23f-6438ae181b27", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Miln", - "company": "Titanigraf", - "phone": "859-484-2909", - "email": "claire@titanigraf.com" - }, - { - "id": 7320, - "guid": "13bcaa9f-4313-4a18-afd8-ba6e696ea7bf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Watson", - "company": "SysVenamerica", - "phone": "888-485-3243", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 7321, - "guid": "176c1805-6b1d-4d06-be16-2e6fee1f3523", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ariana Oswald", - "company": "Infraique", - "phone": "818-502-2527", - "email": "ariana@infraique.com" - }, - { - "id": 7322, - "guid": "0dac5d06-2d73-4014-aa91-4d9159e91849", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Campbell", - "company": "Fibrotopia", - "phone": "807-432-3899", - "email": "sarah@fibrotopia.com" - }, - { - "id": 7323, - "guid": "d8a66fd4-bfef-44ee-86f8-7569b181f2e0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Addison Gardner", - "company": "Idmax", - "phone": "846-499-3544", - "email": "addison@idmax.com" - }, - { - "id": 7324, - "guid": "71fecdf2-273d-4169-a8f6-f050c556894a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Carter", - "company": "US Infratouch", - "phone": "830-570-3535", - "email": "hannah@us infratouch.com" - }, - { - "id": 7325, - "guid": "851888aa-163b-4700-acf3-bd536d4cebfc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sofia Winter", - "company": "Westmedia", - "phone": "865-428-3868", - "email": "sofia@westmedia.com" - }, - { - "id": 7326, - "guid": "98e024e8-d708-4ab9-855f-8bfd574417c2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aubrey Brickman", - "company": "Mescatron", - "phone": "867-472-3802", - "email": "aubrey@mescatron.com" - }, - { - "id": 7327, - "guid": "e4441fcb-06a9-408f-aa82-947558d45977", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Nelson", - "company": "Pericenta", - "phone": "820-523-2125", - "email": "ella@pericenta.com" - }, - { - "id": 7328, - "guid": "d5794eee-3613-4b02-8004-92aed7cd29e1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Brooks", - "company": "Hypervaco", - "phone": "852-600-2114", - "email": "mackenzie@hypervaco.com" - }, - { - "id": 7329, - "guid": "7464664f-4c42-40af-8f80-df4bf4ae8bb9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Nash", - "company": "Interliant", - "phone": "890-469-3654", - "email": "abigail@interliant.com" - }, - { - "id": 7330, - "guid": "ee0c386e-767b-470f-b4b8-7c33e1c5c5ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Samantha Freeman", - "company": "Multitiqua", - "phone": "842-414-3525", - "email": "samantha@multitiqua.com" - }, - { - "id": 7331, - "guid": "ca3cb945-330b-464d-b78a-f5bb5eb284d6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Carroll", - "company": "Dynarama", - "phone": "852-536-2008", - "email": "paige@dynarama.com" - }, - { - "id": 7332, - "guid": "823687aa-611e-46f2-a9d1-1a35f185f3c4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Galbraith", - "company": "Genland", - "phone": "836-580-2245", - "email": "aubrey@genland.com" - }, - { - "id": 7333, - "guid": "b4c21721-6f63-44fe-941c-3c2f551171fd", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Miln", - "company": "Polytheon", - "phone": "866-599-3731", - "email": "brooke@polytheon.com" - }, - { - "id": 7334, - "guid": "6ec739c9-b78b-4b58-a70c-32eb07ca3eba", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Creighton", - "company": "iQualcar", - "phone": "813-411-3828", - "email": "olivia@iqualcar.com" - }, - { - "id": 7335, - "guid": "8c22ddb0-c10a-47c6-9b95-7ee755f718e3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ashley Day", - "company": "Celgra", - "phone": "834-435-2934", - "email": "ashley@celgra.com" - }, - { - "id": 7336, - "guid": "36a2e591-2be1-4eac-9983-4402773b0786", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Conors", - "company": "Nanobanc", - "phone": "800-426-3577", - "email": "evelyn@nanobanc.com" - }, - { - "id": 7337, - "guid": "f685a016-12a7-4d18-a2d9-0074e8539938", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Gill", - "company": "US Infratouch", - "phone": "870-517-2902", - "email": "mackenzie@us infratouch.com" - }, - { - "id": 7338, - "guid": "b0427e4c-436d-42a2-bcc3-b30c8e0c11fd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Crossman", - "company": "iMedconik", - "phone": "838-487-2157", - "email": "autumn@imedconik.com" - }, - { - "id": 7339, - "guid": "16255765-c58f-419b-b3bd-273941715c63", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Hailey", - "company": "Multitiqua", - "phone": "833-559-2665", - "email": "mya@multitiqua.com" - }, - { - "id": 7340, - "guid": "cb469630-ff6f-4d91-9e1f-ec91b70247b1", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ashley Adamson", - "company": "Orthosoft", - "phone": "852-461-2850", - "email": "ashley@orthosoft.com" - }, - { - "id": 7341, - "guid": "b64fdf14-1504-43d4-addf-d933bd4b3330", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Charlotte Campbell", - "company": "Systheon", - "phone": "800-527-2346", - "email": "charlotte@systheon.com" - }, - { - "id": 7342, - "guid": "98c59270-4b22-4de4-9a5e-5c8d1cb31b6b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Makayla Chapman", - "company": "Rapigrafix", - "phone": "872-473-2128", - "email": "makayla@rapigrafix.com" - }, - { - "id": 7343, - "guid": "6b9b9a9d-b60e-4de1-a350-e2674e2487ef", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Sherlock", - "company": "Techtron", - "phone": "834-400-2956", - "email": "jasmine@techtron.com" - }, - { - "id": 7344, - "guid": "155a5daa-f716-44a1-baeb-152b2dbef188", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Higgins", - "company": "Compuamerica", - "phone": "849-410-3597", - "email": "faith@compuamerica.com" - }, - { - "id": 7345, - "guid": "96ce7038-8f8b-43e2-899e-284374685fd3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Vaughan", - "company": "Rapigrafix", - "phone": "839-518-3261", - "email": "katelyn@rapigrafix.com" - }, - { - "id": 7346, - "guid": "11da3e5c-7299-40d9-a278-7e7faf6573a9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Smith", - "company": "eEyetanic", - "phone": "881-447-2171", - "email": "madison@eeyetanic.com" - }, - { - "id": 7347, - "guid": "4265a480-3ccd-4a2b-b142-17f718c19d0e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Sherlock", - "company": "Hypervaco", - "phone": "805-409-3332", - "email": "aubrey@hypervaco.com" - }, - { - "id": 7348, - "guid": "5a4b5a02-4f8e-422f-9985-541b71a435c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Vaughan", - "company": "Xeicon", - "phone": "868-431-3717", - "email": "lauren@xeicon.com" - }, - { - "id": 7349, - "guid": "6cf2cddc-77a8-4263-b411-c01e3fb499af", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Allison Hancock", - "company": "Ameritron", - "phone": "804-409-2240", - "email": "allison@ameritron.com" - }, - { - "id": 7350, - "guid": "b70be37d-df7f-4df4-9982-a81fef384977", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Stanley", - "company": "Xeicon", - "phone": "820-524-3148", - "email": "amelia@xeicon.com" - }, - { - "id": 7351, - "guid": "5e1d4620-837a-43eb-a180-0fb12e7dc084", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Gustman", - "company": "Teraserv", - "phone": "831-567-3819", - "email": "faith@teraserv.com" - }, - { - "id": 7352, - "guid": "aea39360-640b-41ab-93c1-d8a952cddc5b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Trinity Campbell", - "company": "US Omnigraphik", - "phone": "835-507-3225", - "email": "trinity@us omnigraphik.com" - }, - { - "id": 7353, - "guid": "47ded8d6-2070-4e97-818e-1ec7f2b04476", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Nathan", - "company": "Truegate", - "phone": "832-469-3797", - "email": "jessica@truegate.com" - }, - { - "id": 7354, - "guid": "3d3620bc-bf44-4e5e-b1be-0ba27e1bd881", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Miln", - "company": "Pericenta", - "phone": "872-495-2266", - "email": "aubrey@pericenta.com" - }, - { - "id": 7355, - "guid": "270fca96-0eeb-4081-b183-91d1a3e2ec1d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emily Crossman", - "company": "US Infratouch", - "phone": "810-455-3872", - "email": "emily@us infratouch.com" - }, - { - "id": 7356, - "guid": "f79b5ae1-b746-4f17-b4d3-cd5fff30eaf5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Gardner", - "company": "Transtouch", - "phone": "853-438-2748", - "email": "avery@transtouch.com" - }, - { - "id": 7357, - "guid": "c3d87182-eaa5-4166-bad2-387856d6158b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Victoria Bush", - "company": "Sontopia", - "phone": "846-483-2023", - "email": "victoria@sontopia.com" - }, - { - "id": 7358, - "guid": "c5b67f56-3ad5-4937-ad5d-d3c5dd1bcb0b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Carrington", - "company": "Conotomics", - "phone": "824-430-2589", - "email": "addison@conotomics.com" - }, - { - "id": 7359, - "guid": "f60ca54f-b7b9-427d-84bd-8e7b195dfb83", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Walkman", - "company": "Netsystems", - "phone": "872-444-3966", - "email": "ella@netsystems.com" - }, - { - "id": 7360, - "guid": "9debeb47-fb6d-4561-8ff3-e32ba0fdb591", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Ogden", - "company": "US Infratouch", - "phone": "847-583-3612", - "email": "arianna@us infratouch.com" - }, - { - "id": 7361, - "guid": "ac932791-9dd7-4b80-a4c1-e705ad25aab0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Ford", - "company": "Conrama", - "phone": "847-577-2027", - "email": "kaylee@conrama.com" - }, - { - "id": 7362, - "guid": "3bceef23-0e8d-4c63-b9a4-1a1f49837cdd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Paige Crossman", - "company": "Anagraph", - "phone": "882-514-3903", - "email": "paige@anagraph.com" - }, - { - "id": 7363, - "guid": "799ea62d-2ccf-4093-aead-e979d94d447a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Charlson", - "company": "Airdyne", - "phone": "825-536-2489", - "email": "taylor@airdyne.com" - }, - { - "id": 7364, - "guid": "1f295d29-bb41-4b8b-8363-11119b490a98", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaylee Hawkins", - "company": "Syssoft", - "phone": "833-570-2146", - "email": "kaylee@syssoft.com" - }, - { - "id": 7365, - "guid": "d478db02-d326-42cd-9db4-fea287e56df9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Goodman", - "company": "Truegate", - "phone": "870-575-2269", - "email": "rachel@truegate.com" - }, - { - "id": 7366, - "guid": "95ecbef2-2d80-4189-a94a-cea99341cdad", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Abramson", - "company": "Teraserv", - "phone": "891-558-2160", - "email": "madelyn@teraserv.com" - }, - { - "id": 7367, - "guid": "24ba6f63-3293-4668-adf6-65121706dec3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Ward", - "company": "Orthomedia", - "phone": "845-564-3002", - "email": "addison@orthomedia.com" - }, - { - "id": 7368, - "guid": "1ad96526-bb38-4388-ae8c-f669d0ecc6f5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Nevaeh Cook", - "company": "Celgra", - "phone": "877-595-3455", - "email": "nevaeh@celgra.com" - }, - { - "id": 7369, - "guid": "7aa7b8e6-dd3a-451c-a960-57d29eddf069", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ariana Crossman", - "company": "Safeagra", - "phone": "840-574-2968", - "email": "ariana@safeagra.com" - }, - { - "id": 7370, - "guid": "296e35d3-777a-4d0b-9285-d2c4a8492613", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kylie Clapton", - "company": "US Infratouch", - "phone": "830-529-3595", - "email": "kylie@us infratouch.com" - }, - { - "id": 7371, - "guid": "565d2679-21a1-4e00-9230-e08802c7b8b4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ella Neal", - "company": "Hypervaco", - "phone": "810-551-2257", - "email": "ella@hypervaco.com" - }, - { - "id": 7372, - "guid": "a0e1e3ba-747c-4c61-b98a-c8d153bd56c7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Vaughan", - "company": "Safetrust", - "phone": "865-478-3293", - "email": "isabelle@safetrust.com" - }, - { - "id": 7373, - "guid": "3046bc29-9dac-4505-8137-98614a984400", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Carter", - "company": "Aluco", - "phone": "807-518-3146", - "email": "zoey@aluco.com" - }, - { - "id": 7374, - "guid": "eac1c229-3dff-47d4-9c66-48787b169119", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Hodges", - "company": "Hypervaco", - "phone": "811-410-2664", - "email": "evelyn@hypervaco.com" - }, - { - "id": 7375, - "guid": "f665a399-6855-4e8b-9f23-c8cf63ad8d1a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Wainwright", - "company": "Aprama", - "phone": "806-583-2930", - "email": "brooklyn@aprama.com" - }, - { - "id": 7376, - "guid": "d866830f-92db-4f2d-a7d8-66173e7d4b63", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alyssa Calhoun", - "company": "Compuamerica", - "phone": "853-535-3831", - "email": "alyssa@compuamerica.com" - }, - { - "id": 7377, - "guid": "79a4980d-583f-4dda-916d-5a66dfe7f4ee", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Turner", - "company": "Venconix", - "phone": "861-473-2904", - "email": "allison@venconix.com" - }, - { - "id": 7378, - "guid": "0e0c6b76-420f-4b66-b437-ba167d5ca1e5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Wallace", - "company": "Truetomic", - "phone": "894-443-2754", - "email": "maya@truetomic.com" - }, - { - "id": 7379, - "guid": "0e7ac0b3-8b5b-4a7e-97b0-388a73232ffb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla White", - "company": "Inridium", - "phone": "887-494-3972", - "email": "makayla@inridium.com" - }, - { - "id": 7380, - "guid": "3e077fbf-1595-4bea-baed-e6b0d7df7354", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sofia WifKinson", - "company": "Pacwest", - "phone": "882-427-2248", - "email": "sofia@pacwest.com" - }, - { - "id": 7381, - "guid": "c6339947-8da1-4c81-8c95-10c98af47b77", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Hodges", - "company": "Entcast", - "phone": "891-452-3101", - "email": "claire@entcast.com" - }, - { - "id": 7382, - "guid": "6cbfabf3-a42c-499f-ba58-37069321829c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Carey", - "company": "Tekcar", - "phone": "803-514-3286", - "email": "payton@tekcar.com" - }, - { - "id": 7383, - "guid": "8874bcc0-36e7-4f9f-8183-0433481d0aba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexandra Brickman", - "company": "Teratopia", - "phone": "881-520-3727", - "email": "alexandra@teratopia.com" - }, - { - "id": 7384, - "guid": "7b2afb1a-a238-4771-b743-3a58ba2c3040", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Camila Vance", - "company": "Anaframe", - "phone": "807-511-2692", - "email": "camila@anaframe.com" - }, - { - "id": 7385, - "guid": "41035e7b-bb7d-4ea1-9a86-43d5f6489746", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Payton Conors", - "company": "Mescaridic", - "phone": "835-447-2276", - "email": "payton@mescaridic.com" - }, - { - "id": 7386, - "guid": "8b0f0768-ab80-4d1d-861b-6437707d3ec4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Anna Walkman", - "company": "Mescatron", - "phone": "802-433-3593", - "email": "anna@mescatron.com" - }, - { - "id": 7387, - "guid": "e2adc030-1f10-4117-8a6d-66420c685af3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Young", - "company": "Openserve", - "phone": "861-485-2320", - "email": "chloe@openserve.com" - }, - { - "id": 7388, - "guid": "ed23c2a1-dc34-47a4-9c81-0628eabcc48e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kylie Owen", - "company": "Tekcar", - "phone": "860-406-2994", - "email": "kylie@tekcar.com" - }, - { - "id": 7389, - "guid": "cb57b797-8d8e-4df6-94a1-2ac54c0cf49c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Ford", - "company": "Mescaridic", - "phone": "865-544-2880", - "email": "brianna@mescaridic.com" - }, - { - "id": 7390, - "guid": "f7669724-14b4-4422-8e8e-831880ca1f89", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Nelson", - "company": "Superscope", - "phone": "867-481-2487", - "email": "zoe@superscope.com" - }, - { - "id": 7391, - "guid": "97102f43-e8cc-40a9-bb3d-21d3464d0300", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Young", - "company": "Videobanc", - "phone": "818-481-2319", - "email": "brianna@videobanc.com" - }, - { - "id": 7392, - "guid": "1d9043c4-dc0c-4c1c-aa99-cf8a048c4c9e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Calhoun", - "company": "Techtron", - "phone": "825-447-2031", - "email": "julia@techtron.com" - }, - { - "id": 7393, - "guid": "70a592e0-d2e2-4424-b730-54be6593528d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Campbell", - "company": "Syssoft", - "phone": "873-480-2280", - "email": "valeria@syssoft.com" - }, - { - "id": 7394, - "guid": "c5a8ef8c-e014-4fc0-9bb8-34e6e1f6cf14", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Miers", - "company": "Technogra", - "phone": "867-538-3694", - "email": "angelina@technogra.com" - }, - { - "id": 7395, - "guid": "6c86508e-60bd-48cf-8a61-9fb12a2f079b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Clapton", - "company": "SysVenamerica", - "phone": "838-456-3002", - "email": "isabella@sysvenamerica.com" - }, - { - "id": 7396, - "guid": "1a3fba3e-cd2b-41b3-b7dd-88e403d3deae", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Haig", - "company": "Enlogia", - "phone": "800-522-2681", - "email": "khloe@enlogia.com" - }, - { - "id": 7397, - "guid": "7aaa3654-66fb-497b-8500-aa6971c9e7cf", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Daniels", - "company": "Textiqua", - "phone": "836-526-2329", - "email": "aubrey@textiqua.com" - }, - { - "id": 7398, - "guid": "f6207f27-be40-4088-885d-e1a3f24df9ce", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Creighton", - "company": "Infraique", - "phone": "894-441-2697", - "email": "sophia@infraique.com" - }, - { - "id": 7399, - "guid": "b9281057-3385-4231-89e3-7611c37c32fb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Caroline Conors", - "company": "Unologic", - "phone": "885-550-2225", - "email": "caroline@unologic.com" - }, - { - "id": 7400, - "guid": "c46b169e-6897-4702-9069-007b938d228a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brianna Gustman", - "company": "Safeagra", - "phone": "862-488-3935", - "email": "brianna@safeagra.com" - }, - { - "id": 7401, - "guid": "04fc557d-377d-47cc-b73b-bc7b58423d03", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Calhoun", - "company": "Techtron", - "phone": "894-434-3993", - "email": "isabelle@techtron.com" - }, - { - "id": 7402, - "guid": "701078c1-af4b-4324-8f90-b08600ccee6c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Rachel Brooks", - "company": "Dynarama", - "phone": "877-432-2748", - "email": "rachel@dynarama.com" - }, - { - "id": 7403, - "guid": "4ac0bf35-6927-4ed7-9501-43e9b3aa974a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sophie Miers", - "company": "Techtron", - "phone": "874-562-2280", - "email": "sophie@techtron.com" - }, - { - "id": 7404, - "guid": "8d37c3af-bc77-458b-8118-9f97cef52abc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Charlson", - "company": "Mescaridic", - "phone": "880-418-2656", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 7405, - "guid": "131e21b2-e1e7-47b8-bf5d-8324b292e3de", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoe Sheldon", - "company": "Fibrotouch", - "phone": "852-420-2820", - "email": "zoe@fibrotouch.com" - }, - { - "id": 7406, - "guid": "c704579b-e084-4032-835b-e3726f90c01a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Gerald", - "company": "Teknoplexon", - "phone": "802-502-2232", - "email": "faith@teknoplexon.com" - }, - { - "id": 7407, - "guid": "de8037e1-0c04-4f8f-a3c8-0dff8953e39c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Oldman", - "company": "Transtouch", - "phone": "894-414-3804", - "email": "chloe@transtouch.com" - }, - { - "id": 7408, - "guid": "bddc2c29-3a01-436d-bbd8-7119881f89c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Campbell", - "company": "eSteganoergy", - "phone": "897-529-2837", - "email": "alyssa@esteganoergy.com" - }, - { - "id": 7409, - "guid": "ddad9f7d-6bb3-4515-b0b6-67e9e2110dad", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Wallace", - "company": "Westmedia", - "phone": "800-426-2034", - "email": "kimberly@westmedia.com" - }, - { - "id": 7410, - "guid": "dd5c85ba-3de3-41d9-9166-1cb1e5ae4716", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth WifKinson", - "company": "Netsystems", - "phone": "881-550-2965", - "email": "elizabeth@netsystems.com" - }, - { - "id": 7411, - "guid": "e69fb7a3-0436-433a-8697-4ea6aaee92f7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Sherlock", - "company": "Rapigrafix", - "phone": "827-564-3646", - "email": "savannah@rapigrafix.com" - }, - { - "id": 7412, - "guid": "5d898a3b-4d05-4c6a-803f-6fa0365c1b3b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey White", - "company": "iMedconik", - "phone": "887-559-3007", - "email": "aubrey@imedconik.com" - }, - { - "id": 7413, - "guid": "2aa5541d-c821-463c-90ef-417f3f867184", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexandra Abramson", - "company": "iQualcar", - "phone": "823-467-2650", - "email": "alexandra@iqualcar.com" - }, - { - "id": 7414, - "guid": "63ec9e8e-cf34-49f0-931c-8dbfce790ed1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Hawkins", - "company": "Videobanc", - "phone": "853-408-3050", - "email": "katelyn@videobanc.com" - }, - { - "id": 7415, - "guid": "de442d19-7b99-491c-96b5-bb53750c577a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Owen", - "company": "Robocomm", - "phone": "876-447-3941", - "email": "maria@robocomm.com" - }, - { - "id": 7416, - "guid": "fbf6e8c2-3006-42d1-9564-9f5317500ac8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Samantha Gilmore", - "company": "Ventanium", - "phone": "890-408-2927", - "email": "samantha@ventanium.com" - }, - { - "id": 7417, - "guid": "3b3f91c6-5f9e-4eec-90cd-607d171d8712", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Hailey", - "company": "Compuamerica", - "phone": "805-521-2424", - "email": "molly@compuamerica.com" - }, - { - "id": 7418, - "guid": "b9930e4f-b1a9-424a-a3f4-9425e80a1ff5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Wood", - "company": "Genland", - "phone": "826-443-3358", - "email": "paige@genland.com" - }, - { - "id": 7419, - "guid": "282f2374-42e8-45bb-97fb-8055bb4b82db", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Gilmore", - "company": "Infraique", - "phone": "853-519-3098", - "email": "alexis@infraique.com" - }, - { - "id": 7420, - "guid": "4a76f396-a48a-44fc-95d7-2721ee1d96aa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Crossman", - "company": "Aluco", - "phone": "815-443-2148", - "email": "destiny@aluco.com" - }, - { - "id": 7421, - "guid": "dedca403-079e-4426-8465-44f5e103c0d6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Higgins", - "company": "Multitiqua", - "phone": "865-536-3652", - "email": "riley@multitiqua.com" - }, - { - "id": 7422, - "guid": "550f1a7f-3434-4696-aa26-68e3bff5999d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emma Harrison", - "company": "Syssoft", - "phone": "800-496-3021", - "email": "emma@syssoft.com" - }, - { - "id": 7423, - "guid": "0718789c-fa79-4c9e-b0f7-65e6ccd03c91", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Bailey Winter", - "company": "US Infratouch", - "phone": "849-587-2808", - "email": "bailey@us infratouch.com" - }, - { - "id": 7424, - "guid": "405cf8ca-eb85-4adf-b619-6c473c119e71", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Timmons", - "company": "Conrama", - "phone": "898-455-2979", - "email": "bella@conrama.com" - }, - { - "id": 7425, - "guid": "c40aee27-979e-484f-8702-02e6ca4657e2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Owen", - "company": "Allnet", - "phone": "891-526-2293", - "email": "lily@allnet.com" - }, - { - "id": 7426, - "guid": "57dc99ce-32ea-4c30-8d28-6658f3dc1421", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Trinity Watson", - "company": "Videobanc", - "phone": "836-430-2955", - "email": "trinity@videobanc.com" - }, - { - "id": 7427, - "guid": "b67f49da-c476-4cc3-9852-ea44e929f3f6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emily Campbell", - "company": "Genland", - "phone": "882-517-2795", - "email": "emily@genland.com" - }, - { - "id": 7428, - "guid": "3625d583-8f34-4f89-bf93-14677976a7da", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Thornton", - "company": "OpKeycomm", - "phone": "871-511-3296", - "email": "kaitlyn@opkeycomm.com" - }, - { - "id": 7429, - "guid": "2f19c707-13b4-425a-9907-abd6c5ef8cce", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Ward", - "company": "Conotomics", - "phone": "820-517-2525", - "email": "amelia@conotomics.com" - }, - { - "id": 7430, - "guid": "c56aef74-51a4-4aa1-be15-f8de80ba83fc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Abramson", - "company": "SysVenamerica", - "phone": "805-527-3924", - "email": "gianna@sysvenamerica.com" - }, - { - "id": 7431, - "guid": "c19a238e-0669-475a-b5d3-08e2a7cf1b76", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Layla Thomson", - "company": "Allnet", - "phone": "810-542-3381", - "email": "layla@allnet.com" - }, - { - "id": 7432, - "guid": "34b7d8d3-b750-48f3-ae00-6d2a08b7034c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bailey Charlson", - "company": "Compuamerica", - "phone": "809-582-3816", - "email": "bailey@compuamerica.com" - }, - { - "id": 7433, - "guid": "c5cb0dfa-6cfc-4c65-a0aa-7cf9aaa17992", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gianna Miller", - "company": "Cryptotegrity", - "phone": "821-417-2933", - "email": "gianna@cryptotegrity.com" - }, - { - "id": 7434, - "guid": "bdceb254-f9d3-4735-bb8c-1fd16da5964b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Victoria Hoggarth", - "company": "Videobanc", - "phone": "833-496-3308", - "email": "victoria@videobanc.com" - }, - { - "id": 7435, - "guid": "7c8408b4-5c54-4055-be67-9332248ae743", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Caroline Nathan", - "company": "Videobanc", - "phone": "894-516-2789", - "email": "caroline@videobanc.com" - }, - { - "id": 7436, - "guid": "40adb753-3e9c-44f7-bc21-783781ac770a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Gilbert", - "company": "Safetrust", - "phone": "873-426-2517", - "email": "sarah@safetrust.com" - }, - { - "id": 7437, - "guid": "f6809485-ba31-4176-b4d8-6259a3a64e74", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Youmans", - "company": "Xeicon", - "phone": "808-440-3523", - "email": "gianna@xeicon.com" - }, - { - "id": 7438, - "guid": "81880fa1-d6d0-4be2-9e3a-05a7466d1702", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Croftoon", - "company": "Rapigrafix", - "phone": "831-499-3920", - "email": "chloe@rapigrafix.com" - }, - { - "id": 7439, - "guid": "7c23783f-286d-4b69-a359-2aa52d8f4760", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Molly Gilbert", - "company": "Proline", - "phone": "868-471-3634", - "email": "molly@proline.com" - }, - { - "id": 7440, - "guid": "01bcaa42-a1c9-4dd0-97e4-5ab1f43a903e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Payton Harrison", - "company": "Netsystems", - "phone": "876-435-2966", - "email": "payton@netsystems.com" - }, - { - "id": 7441, - "guid": "658a6594-512d-4117-b031-706b995d5bbc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Wayne", - "company": "Jamrola", - "phone": "821-579-3971", - "email": "avery@jamrola.com" - }, - { - "id": 7442, - "guid": "472e9879-483a-49c5-8a1f-5dbe7deb7936", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Oswald", - "company": "Titanigraf", - "phone": "851-553-2144", - "email": "chloe@titanigraf.com" - }, - { - "id": 7443, - "guid": "f964c2b1-1ea9-4125-8a9d-1e100e79aedb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Cramer", - "company": "Thermotomic", - "phone": "884-540-3635", - "email": "layla@thermotomic.com" - }, - { - "id": 7444, - "guid": "b01fc946-35d0-428b-8546-177e127e0c64", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hannah Conors", - "company": "eSteganoergy", - "phone": "833-528-3721", - "email": "hannah@esteganoergy.com" - }, - { - "id": 7445, - "guid": "d8894389-8645-4e8b-ac04-f6bb132b8f9d", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Peyton Wayne", - "company": "Xeicon", - "phone": "846-490-2453", - "email": "peyton@xeicon.com" - }, - { - "id": 7446, - "guid": "a0e45974-a6e6-4737-b5c8-2c07739b5ba8", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Olivia Abramson", - "company": "Qualserve", - "phone": "866-410-3261", - "email": "olivia@qualserve.com" - }, - { - "id": 7447, - "guid": "7a34470d-cab1-42e9-803b-9042b3fe4449", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Gilbert", - "company": "Genland", - "phone": "866-490-3438", - "email": "paige@genland.com" - }, - { - "id": 7448, - "guid": "51287e0c-fe21-4410-b9f5-3c6b07c4a6ba", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Creighton", - "company": "Syssoft", - "phone": "802-427-2029", - "email": "jasmine@syssoft.com" - }, - { - "id": 7449, - "guid": "c05264cb-1e60-443f-8e88-877f56df6990", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Gill", - "company": "Videobanc", - "phone": "801-538-2229", - "email": "hannah@videobanc.com" - }, - { - "id": 7450, - "guid": "78500b89-b5f6-4dfa-aec8-c13310197592", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Creighton", - "company": "Polytheon", - "phone": "839-437-2524", - "email": "morgan@polytheon.com" - }, - { - "id": 7451, - "guid": "067bcf6f-dca1-4f8c-9d13-f24061822327", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Aaliyah Osborne", - "company": "Unconix", - "phone": "800-447-3480", - "email": "aaliyah@unconix.com" - }, - { - "id": 7452, - "guid": "81b9fb57-ae6f-47bc-bfde-1a7ece615298", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Makayla Gilmore", - "company": "Jamconik", - "phone": "861-506-3571", - "email": "makayla@jamconik.com" - }, - { - "id": 7453, - "guid": "2c8d4103-050a-40f8-80d7-63a888debcac", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Nathan", - "company": "Robotomic", - "phone": "845-566-2083", - "email": "camila@robotomic.com" - }, - { - "id": 7454, - "guid": "06edbf53-f206-486b-8464-9288e6a27a68", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Chandter", - "company": "Gigaura", - "phone": "861-580-3474", - "email": "payton@gigaura.com" - }, - { - "id": 7455, - "guid": "f0069985-ee72-4887-8d2e-ff0c9defc8b8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Carey", - "company": "Enlogia", - "phone": "826-552-2519", - "email": "emma@enlogia.com" - }, - { - "id": 7456, - "guid": "7ae284a0-96c6-4fd3-9398-69742644dabd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Watson", - "company": "Netseco", - "phone": "886-547-2036", - "email": "madeline@netseco.com" - }, - { - "id": 7457, - "guid": "65311106-f530-4453-917b-5ab14039db0f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sofia Vance", - "company": "Westmedia", - "phone": "857-471-2202", - "email": "sofia@westmedia.com" - }, - { - "id": 7458, - "guid": "81b628b5-e1d8-4550-b7c8-4a6436b0da29", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Thornton", - "company": "Fibrotopia", - "phone": "882-439-2499", - "email": "grace@fibrotopia.com" - }, - { - "id": 7459, - "guid": "35f9dea7-9e5f-4d14-82f9-d29961ce0b3d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Layla Thomson", - "company": "Ameritron", - "phone": "896-437-2777", - "email": "layla@ameritron.com" - }, - { - "id": 7460, - "guid": "81c054bd-9697-4dc5-aaa6-7f86df916d4a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Vance", - "company": "Compuamerica", - "phone": "873-416-2760", - "email": "kimberly@compuamerica.com" - }, - { - "id": 7461, - "guid": "47a96240-bafe-4920-a754-c66e2bc2c6e9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Daniels", - "company": "Thermotomic", - "phone": "841-575-3540", - "email": "ella@thermotomic.com" - }, - { - "id": 7462, - "guid": "f890e31b-0e71-4781-a0d0-7414d24fd6ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Nelson", - "company": "Infragraph", - "phone": "887-564-3688", - "email": "chloe@infragraph.com" - }, - { - "id": 7463, - "guid": "955bb2b0-b226-4cd0-b40e-184c0e2a3e28", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Gilmore", - "company": "Qualserve", - "phone": "827-570-2820", - "email": "hannah@qualserve.com" - }, - { - "id": 7464, - "guid": "d9f76196-0429-4400-b84b-41f49173ca6e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Chandter", - "company": "Aprama", - "phone": "874-437-2400", - "email": "charlotte@aprama.com" - }, - { - "id": 7465, - "guid": "76cc65a2-3503-4eab-8278-6a4a675a9b73", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Vance", - "company": "Netseco", - "phone": "847-493-3781", - "email": "isabella@netseco.com" - }, - { - "id": 7466, - "guid": "54773a7c-caf0-45db-b3c1-e8bc7cf52f37", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Caroline WifKinson", - "company": "Unconix", - "phone": "803-538-2093", - "email": "caroline@unconix.com" - }, - { - "id": 7467, - "guid": "6d4acbe8-5126-4f4f-903d-3ec45bba67d4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Payton Timmons", - "company": "Vencom", - "phone": "891-548-3650", - "email": "payton@vencom.com" - }, - { - "id": 7468, - "guid": "7a5c9903-3339-4e6a-bcc6-625b1e3fa18b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Carrington", - "company": "Ventanium", - "phone": "838-452-2678", - "email": "madelyn@ventanium.com" - }, - { - "id": 7469, - "guid": "f5eecbe6-601a-4acb-81ec-eb1282ed8701", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Carrington", - "company": "Ventanium", - "phone": "873-563-3916", - "email": "lillian@ventanium.com" - }, - { - "id": 7470, - "guid": "ace5d408-b29e-4a23-85fd-9e365a4a19c5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Haig", - "company": "Transtouch", - "phone": "873-440-3400", - "email": "emma@transtouch.com" - }, - { - "id": 7471, - "guid": "7cca516a-b809-41af-b493-ceda5a09b33a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brianna Cook", - "company": "Venconix", - "phone": "896-505-2646", - "email": "brianna@venconix.com" - }, - { - "id": 7472, - "guid": "bd40070a-e8b0-423e-bb89-0c58bf8dd55f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Khloe Cramer", - "company": "Anaframe", - "phone": "889-404-3972", - "email": "khloe@anaframe.com" - }, - { - "id": 7473, - "guid": "32e868ff-ed77-4a56-9d33-d72934509a0c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Fulton", - "company": "Xeicon", - "phone": "861-526-2024", - "email": "evelyn@xeicon.com" - }, - { - "id": 7474, - "guid": "3b6329c7-c2a7-46bd-93ce-1f5d1b3596d7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Otis", - "company": "Rapigrafix", - "phone": "807-458-3045", - "email": "abigail@rapigrafix.com" - }, - { - "id": 7475, - "guid": "a48595c4-2440-4e96-81d7-e162af5300da", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Gardner", - "company": "Mescatron", - "phone": "834-542-3337", - "email": "addison@mescatron.com" - }, - { - "id": 7476, - "guid": "9fad2024-a6dd-4d35-beef-fd66d057332e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emma Haig", - "company": "Mescaridic", - "phone": "858-590-2157", - "email": "emma@mescaridic.com" - }, - { - "id": 7477, - "guid": "cd220345-af6b-4d8a-a94f-d137c4d0c5be", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Hailey", - "company": "Superscope", - "phone": "824-595-3707", - "email": "ariana@superscope.com" - }, - { - "id": 7478, - "guid": "abce3f3e-6344-4fb7-8b75-91c8e2592015", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabella Ford", - "company": "Thermotomic", - "phone": "897-497-3789", - "email": "isabella@thermotomic.com" - }, - { - "id": 7479, - "guid": "3f138f67-4b35-4c9a-b7d6-c20fe8024e08", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Gardner", - "company": "Truetomic", - "phone": "888-402-2866", - "email": "morgan@truetomic.com" - }, - { - "id": 7480, - "guid": "fabc0f82-8e0a-4c1d-b666-a1f8ac8de9f5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Oliver", - "company": "Compuamerica", - "phone": "866-514-3266", - "email": "abigail@compuamerica.com" - }, - { - "id": 7481, - "guid": "f70efa3e-724f-40cd-bead-78460b48d6a1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Gibbs", - "company": "Steganoconiche", - "phone": "876-468-3478", - "email": "katherine@steganoconiche.com" - }, - { - "id": 7482, - "guid": "2b4315e1-7d65-4bfb-9041-39f48eb3f705", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katherine Davidson", - "company": "InfoAirway", - "phone": "871-432-3481", - "email": "katherine@infoairway.com" - }, - { - "id": 7483, - "guid": "d9b80477-3604-4c51-9fa7-a2a4dd5ade49", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Carter", - "company": "SysVenamerica", - "phone": "887-585-2405", - "email": "avery@sysvenamerica.com" - }, - { - "id": 7484, - "guid": "28fe926a-baf9-409e-b1de-def0b5bc3c49", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kayla Goodman", - "company": "RoboAerlogix", - "phone": "851-440-3119", - "email": "kayla@roboaerlogix.com" - }, - { - "id": 7485, - "guid": "dfed877c-1242-47f3-8b40-92e5506e49b5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Wallace", - "company": "Tekcar", - "phone": "881-571-3915", - "email": "eva@tekcar.com" - }, - { - "id": 7486, - "guid": "b7740b87-5cbe-4537-9787-a538979dc58e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Brooks", - "company": "Tekcar", - "phone": "864-557-2785", - "email": "lauren@tekcar.com" - }, - { - "id": 7487, - "guid": "be0a46bb-636b-404b-a0c0-4c2353523f2e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Hancock", - "company": "Indisco", - "phone": "813-544-3284", - "email": "lauren@indisco.com" - }, - { - "id": 7488, - "guid": "31e87168-29df-4526-88d7-46c202ad8f36", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Nash", - "company": "Techtron", - "phone": "820-552-2184", - "email": "jessica@techtron.com" - }, - { - "id": 7489, - "guid": "a9a37694-9595-4030-a506-db68ae7956ad", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Victoria Hamphrey", - "company": "Safetrust", - "phone": "835-569-3786", - "email": "victoria@safetrust.com" - }, - { - "id": 7490, - "guid": "0a063306-0c97-43ae-9336-9f537dbd78c0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Wood", - "company": "Teraserv", - "phone": "840-528-3225", - "email": "molly@teraserv.com" - }, - { - "id": 7491, - "guid": "406559e7-79eb-4a07-b6f4-46f555a33eef", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Savannah Carroll", - "company": "Aluco", - "phone": "828-467-2398", - "email": "savannah@aluco.com" - }, - { - "id": 7492, - "guid": "c6717ec8-7b64-4d6f-a10b-0980cc60224a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Hamphrey", - "company": "Allphysiche", - "phone": "859-585-3270", - "email": "jasmine@allphysiche.com" - }, - { - "id": 7493, - "guid": "66e0dea6-f1eb-44c3-9e3f-3ae72c0b8304", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jocelyn Smith", - "company": "Xeicon", - "phone": "823-403-2983", - "email": "jocelyn@xeicon.com" - }, - { - "id": 7494, - "guid": "eee2169c-8728-42e2-b674-14d4eb8625b1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Haig", - "company": "Raylog", - "phone": "812-558-3883", - "email": "layla@raylog.com" - }, - { - "id": 7495, - "guid": "218e5bba-8578-47e0-b37a-f16e4470058c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Andrea Brickman", - "company": "Nanobanc", - "phone": "871-484-3448", - "email": "andrea@nanobanc.com" - }, - { - "id": 7496, - "guid": "cbadc653-bc84-4426-9d84-9ef200a2649c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Hawkins", - "company": "Textiqua", - "phone": "878-412-2933", - "email": "hannah@textiqua.com" - }, - { - "id": 7497, - "guid": "8f875490-d2d6-4ae7-a6b8-0a1d762911c7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Stanley", - "company": "Jamrola", - "phone": "854-526-3537", - "email": "katherine@jamrola.com" - }, - { - "id": 7498, - "guid": "154b771c-4f36-4f5a-9735-154b03f7e596", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Harrison", - "company": "Gigaura", - "phone": "872-479-3263", - "email": "isabelle@gigaura.com" - }, - { - "id": 7499, - "guid": "153d6346-192f-4876-9b84-1a845da55bce", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Chandter", - "company": "Thermotomic", - "phone": "894-441-2550", - "email": "alexa@thermotomic.com" - }, - { - "id": 7500, - "guid": "dc25df37-1bcf-4a88-aaff-49dab60e8049", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Carter", - "company": "Aprama", - "phone": "863-580-2886", - "email": "katelyn@aprama.com" - }, - { - "id": 7501, - "guid": "b0eb7a9a-f63c-4ca1-b374-7ed215afe665", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Osborne", - "company": "Allphysiche", - "phone": "888-427-3500", - "email": "anna@allphysiche.com" - }, - { - "id": 7502, - "guid": "6857ec92-5fce-4484-a500-920997e96a20", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Cramer", - "company": "Aluco", - "phone": "893-418-3810", - "email": "evelyn@aluco.com" - }, - { - "id": 7503, - "guid": "50bceed5-978a-4d42-8200-7900616f0d0a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Vaughan", - "company": "Celgra", - "phone": "804-473-2930", - "email": "vanessa@celgra.com" - }, - { - "id": 7504, - "guid": "5430e292-d0aa-4575-83b5-c03b31c41b08", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Goodman", - "company": "Videobanc", - "phone": "862-462-2532", - "email": "mariah@videobanc.com" - }, - { - "id": 7505, - "guid": "be64c517-97cc-44b3-9fa3-86425ce00ef6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Turner", - "company": "Truetomic", - "phone": "806-512-2558", - "email": "audrey@truetomic.com" - }, - { - "id": 7506, - "guid": "b24150bc-459b-4148-be7d-3c59acba980f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Gardner", - "company": "Robocomm", - "phone": "891-514-3776", - "email": "elizabeth@robocomm.com" - }, - { - "id": 7507, - "guid": "01db3de0-c0da-4842-8d51-8300c4f70f92", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Croftoon", - "company": "Videobanc", - "phone": "855-420-3107", - "email": "claire@videobanc.com" - }, - { - "id": 7508, - "guid": "c3d73db8-8b6f-4f41-95fa-8691750bce28", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Miers", - "company": "Transtouch", - "phone": "852-521-2283", - "email": "lillian@transtouch.com" - }, - { - "id": 7509, - "guid": "63c5e317-2e96-474a-8f87-1aa5b21713e2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madeline Gate", - "company": "Generola", - "phone": "856-540-2773", - "email": "madeline@generola.com" - }, - { - "id": 7510, - "guid": "2f0c8b67-6643-4341-8250-b1a3bedafb23", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Miln", - "company": "Proline", - "phone": "802-462-3971", - "email": "allison@proline.com" - }, - { - "id": 7511, - "guid": "01d4a0ca-5678-4496-ab4e-631b31fe8d29", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Wood", - "company": "Jamconik", - "phone": "860-584-2208", - "email": "alyssa@jamconik.com" - }, - { - "id": 7512, - "guid": "49d42c31-d1fc-4e34-955e-54e823366931", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Milton", - "company": "Conrama", - "phone": "896-504-2322", - "email": "ariana@conrama.com" - }, - { - "id": 7513, - "guid": "3c775a0f-c347-4dde-b085-cb051e55f413", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Wallace", - "company": "Proline", - "phone": "849-440-2122", - "email": "madeline@proline.com" - }, - { - "id": 7514, - "guid": "cca8fad6-40ee-4344-9e7f-a02a8d3b63da", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Oldman", - "company": "Keytheon", - "phone": "839-573-3347", - "email": "madelyn@keytheon.com" - }, - { - "id": 7515, - "guid": "c86dd3f2-bc0a-47c2-973b-093f02886501", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Gibbs", - "company": "Pacwest", - "phone": "811-457-3706", - "email": "ariana@pacwest.com" - }, - { - "id": 7516, - "guid": "d22e7819-9045-4942-974c-2043b4c8e520", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Victoria Sherlock", - "company": "Infraique", - "phone": "804-599-3544", - "email": "victoria@infraique.com" - }, - { - "id": 7517, - "guid": "7dbf129f-4441-4868-ac5d-4efdc6661808", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Gill", - "company": "Navivacs", - "phone": "824-484-3469", - "email": "kayla@navivacs.com" - }, - { - "id": 7518, - "guid": "9b3ba793-8157-4bf7-8d9e-ed561cf2489c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Wainwright", - "company": "Qualserve", - "phone": "829-520-2636", - "email": "brooklyn@qualserve.com" - }, - { - "id": 7519, - "guid": "5d8db5a8-7ea1-4fb2-acae-9fd921ee527e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Croftoon", - "company": "Ventanium", - "phone": "893-487-2503", - "email": "brooke@ventanium.com" - }, - { - "id": 7520, - "guid": "0d44e86e-0148-4b98-b5b5-9f4a618027ba", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Wood", - "company": "Safetrust", - "phone": "846-401-2624", - "email": "gabriella@safetrust.com" - }, - { - "id": 7521, - "guid": "3083988a-6cfe-4f13-a167-c63857048a2c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Samantha Waller", - "company": "Safeagra", - "phone": "802-598-3557", - "email": "samantha@safeagra.com" - }, - { - "id": 7522, - "guid": "b70a1245-c343-41e9-bbcf-46c2a736090b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Ward", - "company": "Steganoconiche", - "phone": "855-457-2353", - "email": "vanessa@steganoconiche.com" - }, - { - "id": 7523, - "guid": "0555ac7e-d7ac-4438-847a-32b34bc1c944", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ariana Thomson", - "company": "Quintegrity", - "phone": "822-584-2251", - "email": "ariana@quintegrity.com" - }, - { - "id": 7524, - "guid": "1514c127-2468-4194-8073-f00617269a31", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Chapman", - "company": "Ventanium", - "phone": "846-597-3422", - "email": "kaylee@ventanium.com" - }, - { - "id": 7525, - "guid": "f616d6d2-208e-4d1d-8336-df19a041bba5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Bush", - "company": "eSteganoergy", - "phone": "879-593-2115", - "email": "evelyn@esteganoergy.com" - }, - { - "id": 7526, - "guid": "9519d4a9-3b3c-42d1-aecb-d5cd8d240483", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Smith", - "company": "Safeagra", - "phone": "848-532-3000", - "email": "madeline@safeagra.com" - }, - { - "id": 7527, - "guid": "86658d4b-d4ed-443c-9369-d13bc3c8091b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Freeman", - "company": "InfoAirway", - "phone": "829-473-2652", - "email": "payton@infoairway.com" - }, - { - "id": 7528, - "guid": "f0a4fd63-311d-44cc-a4f3-cf01b9e96d03", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Angelina Clapton", - "company": "Videobanc", - "phone": "838-579-3917", - "email": "angelina@videobanc.com" - }, - { - "id": 7529, - "guid": "d59aa2ff-5b49-479c-bf20-b4f2ab248055", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madeline Freeman", - "company": "Pacwest", - "phone": "826-442-3793", - "email": "madeline@pacwest.com" - }, - { - "id": 7530, - "guid": "9a911bef-e3b7-4ea2-8d65-27fd4c473d4a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Hailey", - "company": "SysVenamerica", - "phone": "868-586-3366", - "email": "samantha@sysvenamerica.com" - }, - { - "id": 7531, - "guid": "a1bfa9ab-eb89-4192-b836-c1f6294d3823", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Timmons", - "company": "Thermotomic", - "phone": "834-451-2787", - "email": "faith@thermotomic.com" - }, - { - "id": 7532, - "guid": "d5a5b13d-788e-4857-83c3-cab482959e87", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Abramson", - "company": "Mescaridic", - "phone": "804-466-3864", - "email": "bella@mescaridic.com" - }, - { - "id": 7533, - "guid": "ec9be5ca-02a8-4363-b857-eb26bfa0d732", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Youmans", - "company": "Aluco", - "phone": "867-548-2799", - "email": "andrea@aluco.com" - }, - { - "id": 7534, - "guid": "5b36f6e6-f031-4744-bd54-4e0af561b5e2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Stanley", - "company": "Allnet", - "phone": "881-581-2629", - "email": "taylor@allnet.com" - }, - { - "id": 7535, - "guid": "96d6d578-16b0-4e96-8393-7cb444851345", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Owen", - "company": "SysUSA", - "phone": "815-596-2411", - "email": "zoey@sysusa.com" - }, - { - "id": 7536, - "guid": "3e0b976f-6c36-468e-88b9-1f580394d430", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ariana Wayne", - "company": "Robocomm", - "phone": "873-568-3347", - "email": "ariana@robocomm.com" - }, - { - "id": 7537, - "guid": "c7991eb5-be91-4875-8542-702f43daecdb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Goldman", - "company": "Compuamerica", - "phone": "844-594-2878", - "email": "morgan@compuamerica.com" - }, - { - "id": 7538, - "guid": "9caf5e82-8e9c-4e84-ac12-6ef30e182fdc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Gilbert", - "company": "Teratopia", - "phone": "842-426-2528", - "email": "emma@teratopia.com" - }, - { - "id": 7539, - "guid": "5ee00f9a-6e6f-44f8-a2e1-25419fe5659a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Murphy", - "company": "eEyetanic", - "phone": "893-506-3888", - "email": "claire@eeyetanic.com" - }, - { - "id": 7540, - "guid": "93b1ba0a-9e89-4a25-98d9-b1d1f711a6f3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Sherlock", - "company": "Aprama", - "phone": "818-549-2450", - "email": "ella@aprama.com" - }, - { - "id": 7541, - "guid": "89d2b607-1c41-45f1-a9dd-257d99f292bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Morgan Warren", - "company": "Superscope", - "phone": "864-419-2812", - "email": "morgan@superscope.com" - }, - { - "id": 7542, - "guid": "f048607f-5e5d-4709-869e-a1146ced5729", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Olivia Gibbs", - "company": "Westtomik", - "phone": "882-569-2666", - "email": "olivia@westtomik.com" - }, - { - "id": 7543, - "guid": "38102dc0-f5db-482f-ae8e-007838120eed", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Carter", - "company": "Gigaura", - "phone": "828-410-2369", - "email": "bella@gigaura.com" - }, - { - "id": 7544, - "guid": "878fa865-6bef-4226-a7f0-97e73c80bf4a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jocelyn Fulton", - "company": "Generola", - "phone": "818-470-3471", - "email": "jocelyn@generola.com" - }, - { - "id": 7545, - "guid": "68ba6aee-b4d3-4cf8-880b-1f5abca12ab1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Serenity Day", - "company": "Truetomic", - "phone": "876-486-3252", - "email": "serenity@truetomic.com" - }, - { - "id": 7546, - "guid": "9ce09c8a-93e1-4820-a328-56f8144c6ef2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mya Youmans", - "company": "Navivacs", - "phone": "811-403-3317", - "email": "mya@navivacs.com" - }, - { - "id": 7547, - "guid": "5fc1352c-9c17-416d-bdfe-72d873878c69", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Ford", - "company": "Qualserve", - "phone": "852-459-3344", - "email": "autumn@qualserve.com" - }, - { - "id": 7548, - "guid": "3d29e0c1-ca1f-4646-8fee-0ffeeb8b1d7b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Brickman", - "company": "Sontopia", - "phone": "835-438-2495", - "email": "riley@sontopia.com" - }, - { - "id": 7549, - "guid": "b5ab6f63-5ca9-4279-be2e-4b037f9d6277", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Oldridge", - "company": "Skydata", - "phone": "898-405-2365", - "email": "alyssa@skydata.com" - }, - { - "id": 7550, - "guid": "e42c7ad4-b08a-47b4-97c4-2db974550895", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Rachel Hawkins", - "company": "Anagraph", - "phone": "800-521-2863", - "email": "rachel@anagraph.com" - }, - { - "id": 7551, - "guid": "fc1b0e9f-1990-43d3-a8c5-3faa99666f50", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Melanie Goodman", - "company": "Robotemplate", - "phone": "805-458-2280", - "email": "melanie@robotemplate.com" - }, - { - "id": 7552, - "guid": "6db799b2-3be8-4cc5-ae4e-a420f9347c49", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Otis", - "company": "Proline", - "phone": "829-507-3575", - "email": "molly@proline.com" - }, - { - "id": 7553, - "guid": "8dfabf9b-4dbe-4706-bdc6-a552f36cdb8c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Claire Hodges", - "company": "Fibrotouch", - "phone": "804-530-3802", - "email": "claire@fibrotouch.com" - }, - { - "id": 7554, - "guid": "a102eba3-ad46-4abb-aaae-ad1dd38ac06f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Smith", - "company": "Netseco", - "phone": "880-446-3243", - "email": "julia@netseco.com" - }, - { - "id": 7555, - "guid": "6a9f031d-635a-4374-be90-d36359eaf362", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Gill", - "company": "Interliant", - "phone": "875-487-2462", - "email": "makayla@interliant.com" - }, - { - "id": 7556, - "guid": "bfbca81d-c049-464e-865e-d1aaeddd7198", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Ford", - "company": "Conrama", - "phone": "873-559-2952", - "email": "victoria@conrama.com" - }, - { - "id": 7557, - "guid": "dd81f385-3760-4b46-9d44-414f0caa3253", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Andrea Stanley", - "company": "Indisco", - "phone": "874-469-2634", - "email": "andrea@indisco.com" - }, - { - "id": 7558, - "guid": "30d20e28-2bbd-46c9-9640-13c121cfb568", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Camila Brickman", - "company": "Aprama", - "phone": "846-600-3036", - "email": "camila@aprama.com" - }, - { - "id": 7559, - "guid": "766cd433-0f5e-4157-8b10-ff011e6a04e7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Thornton", - "company": "Proline", - "phone": "860-434-3206", - "email": "maya@proline.com" - }, - { - "id": 7560, - "guid": "abc4a6d5-7f9a-4940-aad6-376ff3d4424d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Wallace", - "company": "Infraique", - "phone": "836-473-2984", - "email": "gabrielle@infraique.com" - }, - { - "id": 7561, - "guid": "b259c20d-6329-4010-b7f7-7bdf2b4cb8ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Owen", - "company": "Truetomic", - "phone": "839-496-2550", - "email": "savannah@truetomic.com" - }, - { - "id": 7562, - "guid": "177e4819-e23e-4699-9d75-503c8662daba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Milton", - "company": "Conotomics", - "phone": "896-446-2349", - "email": "genesis@conotomics.com" - }, - { - "id": 7563, - "guid": "d72a087a-5974-4edc-8813-4c6977537cc9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Neal", - "company": "Unologic", - "phone": "855-564-2143", - "email": "mariah@unologic.com" - }, - { - "id": 7564, - "guid": "b5add8ae-c189-4c04-8901-591c51dd2b2b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Galbraith", - "company": "SysVenamerica", - "phone": "812-505-2265", - "email": "faith@sysvenamerica.com" - }, - { - "id": 7565, - "guid": "60eb4dd8-293e-4896-9e79-2635db70f137", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sofia Clapton", - "company": "Techtron", - "phone": "844-563-2178", - "email": "sofia@techtron.com" - }, - { - "id": 7566, - "guid": "c14d9cdc-fe69-4d6a-a39d-34608e149610", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Bush", - "company": "Westmedia", - "phone": "842-510-3262", - "email": "kylie@westmedia.com" - }, - { - "id": 7567, - "guid": "910bc933-af58-4909-b020-a08300704d24", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Sophie Youmans", - "company": "Anaframe", - "phone": "849-548-2390", - "email": "sophie@anaframe.com" - }, - { - "id": 7568, - "guid": "57fcade4-58d2-4c56-8fd0-ae8869775690", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Galbraith", - "company": "Skydata", - "phone": "809-466-3706", - "email": "angelina@skydata.com" - }, - { - "id": 7569, - "guid": "f8a6c269-ea2a-45ec-934e-c5f886ab20ba", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Osborne", - "company": "Unconix", - "phone": "804-528-2745", - "email": "ava@unconix.com" - }, - { - "id": 7570, - "guid": "6af0d2b3-8737-4a70-82e5-44c3b90bc370", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Wayne", - "company": "Polytheon", - "phone": "887-419-2001", - "email": "brooklyn@polytheon.com" - }, - { - "id": 7571, - "guid": "22feb4ff-0e21-419b-ae64-c0fbbe56eb62", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Gate", - "company": "Navivacs", - "phone": "811-468-3964", - "email": "leah@navivacs.com" - }, - { - "id": 7572, - "guid": "5d3734ec-a2d0-4f65-9d2d-ba61c35605d7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Mercer", - "company": "Fibrotopia", - "phone": "871-501-2030", - "email": "chloe@fibrotopia.com" - }, - { - "id": 7573, - "guid": "5815672b-a8db-4b04-a539-664479320c8e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Wayne", - "company": "Orthosoft", - "phone": "851-488-3216", - "email": "khloe@orthosoft.com" - }, - { - "id": 7574, - "guid": "9802369a-b61c-4bb1-a22e-6edcf0948d02", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Youmans", - "company": "Syssoft", - "phone": "860-510-3589", - "email": "alexis@syssoft.com" - }, - { - "id": 7575, - "guid": "df2227b1-f3b1-4c93-b32c-3aad303144a0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Carter", - "company": "Technogra", - "phone": "867-588-3213", - "email": "leah@technogra.com" - }, - { - "id": 7576, - "guid": "1e6084b1-10f4-45b4-b12b-5b2ec75e58c8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Brown", - "company": "Netseco", - "phone": "849-471-3689", - "email": "bailey@netseco.com" - }, - { - "id": 7577, - "guid": "03c43b99-4b4b-4500-ab71-ab3cc20a0a40", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madison Campbell", - "company": "Rapigrafix", - "phone": "812-435-2980", - "email": "madison@rapigrafix.com" - }, - { - "id": 7578, - "guid": "739a8db8-c069-4d85-8bd9-47223421bb34", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Camila Wayne", - "company": "Aluco", - "phone": "866-485-3274", - "email": "camila@aluco.com" - }, - { - "id": 7579, - "guid": "1982af9c-7f75-4a49-88ed-21e2d965c8b9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Abigail Walkman", - "company": "Turbomart", - "phone": "886-432-3655", - "email": "abigail@turbomart.com" - }, - { - "id": 7580, - "guid": "3265c661-688c-455f-8da7-4ead81363e40", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Youmans", - "company": "Robotemplate", - "phone": "866-547-2349", - "email": "victoria@robotemplate.com" - }, - { - "id": 7581, - "guid": "5c954e89-31fd-4b87-9c76-1fd337070b34", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lauren Oldridge", - "company": "Inridium", - "phone": "870-440-2129", - "email": "lauren@inridium.com" - }, - { - "id": 7582, - "guid": "c5184ee3-26e5-48bf-89dd-e3a521f0ad85", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Nevaeh Sherlock", - "company": "Westmedia", - "phone": "863-451-3347", - "email": "nevaeh@westmedia.com" - }, - { - "id": 7583, - "guid": "162d3d35-f1c9-4599-9cd9-87a88fdb533e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Thornton", - "company": "Infraique", - "phone": "876-470-2118", - "email": "ella@infraique.com" - }, - { - "id": 7584, - "guid": "fcff640e-a034-4cae-954f-e0c2d848cf0c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Katelyn Oldridge", - "company": "Pacwest", - "phone": "883-494-2448", - "email": "katelyn@pacwest.com" - }, - { - "id": 7585, - "guid": "48f83eb4-8fea-4c8b-9a20-93208fcb7170", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Oldridge", - "company": "Navivacs", - "phone": "873-488-2082", - "email": "destiny@navivacs.com" - }, - { - "id": 7586, - "guid": "ef1246db-b532-4e6c-8c1e-c485b0663c59", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Smith", - "company": "Netsystems", - "phone": "822-413-3719", - "email": "sophie@netsystems.com" - }, - { - "id": 7587, - "guid": "aff96891-75e2-443d-8216-7e3738678a31", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Hancock", - "company": "Fibroserve", - "phone": "810-428-3439", - "email": "angelina@fibroserve.com" - }, - { - "id": 7588, - "guid": "be3861cb-0be9-4255-926e-2232015e4f58", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Sheldon", - "company": "Xeicon", - "phone": "894-559-2887", - "email": "brooklyn@xeicon.com" - }, - { - "id": 7589, - "guid": "06879bd9-3896-44f9-a2bb-e59a511a0195", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Hoggarth", - "company": "Raylog", - "phone": "875-410-3307", - "email": "evelyn@raylog.com" - }, - { - "id": 7590, - "guid": "7fb2482d-68e5-45ef-b7b9-59756255ba5f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Vaughan", - "company": "Unologic", - "phone": "832-502-2969", - "email": "abigail@unologic.com" - }, - { - "id": 7591, - "guid": "912f581c-3a6a-4183-8227-b33657fdafb2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Peyton Fisher", - "company": "Anaframe", - "phone": "855-568-3071", - "email": "peyton@anaframe.com" - }, - { - "id": 7592, - "guid": "85e80d76-ad11-4694-bda7-5c806a46ac57", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Oliver", - "company": "Tekcar", - "phone": "841-443-2605", - "email": "paige@tekcar.com" - }, - { - "id": 7593, - "guid": "9f9647ab-25a4-4bc2-a68e-92acb8c99d3d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Ward", - "company": "SysUSA", - "phone": "826-435-3707", - "email": "destiny@sysusa.com" - }, - { - "id": 7594, - "guid": "f7a3f67c-fc45-4f6d-8b9e-f63fa0fef43c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Wayne", - "company": "Technogra", - "phone": "806-442-3499", - "email": "alexis@technogra.com" - }, - { - "id": 7595, - "guid": "87367ae0-b182-4e40-8081-80ed00ac0bc4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Oliver", - "company": "Technogra", - "phone": "874-448-3218", - "email": "natalie@technogra.com" - }, - { - "id": 7596, - "guid": "1ab9eed7-dc55-420e-b627-e04f4424ddd2", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooklyn Morrison", - "company": "Jamconik", - "phone": "876-442-3535", - "email": "brooklyn@jamconik.com" - }, - { - "id": 7597, - "guid": "355b6c92-8508-4efa-b0df-d64d3525b961", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Amelia Youmans", - "company": "SysUSA", - "phone": "841-492-3909", - "email": "amelia@sysusa.com" - }, - { - "id": 7598, - "guid": "363e1535-0782-4261-9bb9-55b2ebfb36f3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Wood", - "company": "Multitiqua", - "phone": "892-546-2930", - "email": "mia@multitiqua.com" - }, - { - "id": 7599, - "guid": "832b6efe-2a5e-475c-b57b-0c3b54f8ba8d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Creighton", - "company": "iOptystix", - "phone": "892-512-3667", - "email": "kaylee@ioptystix.com" - }, - { - "id": 7600, - "guid": "ffe25672-8f82-4908-991d-04562b393b82", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Charlson", - "company": "Nanobanc", - "phone": "885-488-3012", - "email": "jessica@nanobanc.com" - }, - { - "id": 7601, - "guid": "07d043f2-c095-4d5f-a045-73211f21958b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexis Harrison", - "company": "Videobanc", - "phone": "814-547-2377", - "email": "alexis@videobanc.com" - }, - { - "id": 7602, - "guid": "185adb33-c69f-4956-a4c9-1693c31c81c2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Gilbert", - "company": "Systheon", - "phone": "862-404-3613", - "email": "andrea@systheon.com" - }, - { - "id": 7603, - "guid": "5e8cf22e-58ef-4d60-aab3-0453c131734e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Savannah Abramson", - "company": "Steganoconiche", - "phone": "891-599-3715", - "email": "savannah@steganoconiche.com" - }, - { - "id": 7604, - "guid": "88e5c7ad-dd97-4102-95ad-ce131d6faa5e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Smith", - "company": "Rapigrafix", - "phone": "856-517-2492", - "email": "alexa@rapigrafix.com" - }, - { - "id": 7605, - "guid": "36ebf29b-1daf-4a74-b347-913b7d34c94b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny WifKinson", - "company": "Superscope", - "phone": "852-538-3063", - "email": "destiny@superscope.com" - }, - { - "id": 7606, - "guid": "f3a3b88b-76f9-415d-91bf-e92ddac7dc4a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Thomson", - "company": "Polytheon", - "phone": "881-459-2220", - "email": "natalie@polytheon.com" - }, - { - "id": 7607, - "guid": "859e37e3-9ec0-4d67-89de-5b8548befa38", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Serenity Higgins", - "company": "Anagraph", - "phone": "840-451-3705", - "email": "serenity@anagraph.com" - }, - { - "id": 7608, - "guid": "a1fd6f59-8dad-41c5-a1ae-a05a15ec04ef", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Hodges", - "company": "Fibrotopia", - "phone": "856-581-2923", - "email": "mya@fibrotopia.com" - }, - { - "id": 7609, - "guid": "f59eb9e8-740f-4338-8dad-361f87964e92", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity WifKinson", - "company": "Anaframe", - "phone": "863-419-3756", - "email": "serenity@anaframe.com" - }, - { - "id": 7610, - "guid": "eced5ccc-1518-453d-8932-f4bc00ce060a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Ogden", - "company": "Robotemplate", - "phone": "894-407-2671", - "email": "kaitlyn@robotemplate.com" - }, - { - "id": 7611, - "guid": "162aad5e-4a52-4a8c-b3bf-d4b69e414a97", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabrielle Hoggarth", - "company": "iOptystix", - "phone": "882-400-3890", - "email": "gabrielle@ioptystix.com" - }, - { - "id": 7612, - "guid": "9cecd403-b092-4ed2-affd-9b6cfd4ab8ed", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Crossman", - "company": "Unconix", - "phone": "898-548-3550", - "email": "charlotte@unconix.com" - }, - { - "id": 7613, - "guid": "b25c580f-f0c3-410f-a522-71854615cafc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophie Charlson", - "company": "iMedconik", - "phone": "889-499-2856", - "email": "sophie@imedconik.com" - }, - { - "id": 7614, - "guid": "933d9419-9d70-471c-84f2-a3bdf277dc2a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Molligan", - "company": "Allphysiche", - "phone": "811-470-2315", - "email": "sarah@allphysiche.com" - }, - { - "id": 7615, - "guid": "b6417bd0-3e89-449c-8c19-29336e199130", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Ella Otis", - "company": "Keytheon", - "phone": "869-591-3772", - "email": "ella@keytheon.com" - }, - { - "id": 7616, - "guid": "da3152ce-d59d-4286-8b8d-a7f5a2302ddd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Oswald", - "company": "Systheon", - "phone": "886-431-3947", - "email": "madeline@systheon.com" - }, - { - "id": 7617, - "guid": "a5cd97dd-28a2-40af-b291-4dfe1a052610", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Winter", - "company": "iMedconik", - "phone": "891-558-3241", - "email": "mackenzie@imedconik.com" - }, - { - "id": 7618, - "guid": "06e305ce-76e7-45e2-91b1-24a9226c5fe6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Hancock", - "company": "Titanigraf", - "phone": "899-576-3232", - "email": "isabella@titanigraf.com" - }, - { - "id": 7619, - "guid": "ca230fdb-8883-43c1-ade0-7e23faf12cbc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Faith Miller", - "company": "Multitiqua", - "phone": "875-441-3718", - "email": "faith@multitiqua.com" - }, - { - "id": 7620, - "guid": "23f25e6c-f799-4864-895d-3d2be3575700", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Andrea Miller", - "company": "Transtouch", - "phone": "888-421-2162", - "email": "andrea@transtouch.com" - }, - { - "id": 7621, - "guid": "5c372aef-a7f6-4333-884f-c0e1e6c28a03", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexis White", - "company": "Westgate", - "phone": "851-416-3693", - "email": "alexis@westgate.com" - }, - { - "id": 7622, - "guid": "3c271098-9fb1-4165-8cfb-9e058f009f11", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Abigail Croftoon", - "company": "Conrama", - "phone": "846-473-3971", - "email": "abigail@conrama.com" - }, - { - "id": 7623, - "guid": "a178d3d9-b4ab-4093-b9c6-52bfccd6394b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Hailey", - "company": "Safeagra", - "phone": "894-442-2596", - "email": "molly@safeagra.com" - }, - { - "id": 7624, - "guid": "24855a14-6323-44dc-96a9-5632fb7e05ea", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Conors", - "company": "Robotomic", - "phone": "873-444-3085", - "email": "mackenzie@robotomic.com" - }, - { - "id": 7625, - "guid": "97a95f6a-81cd-428a-8067-8f4c7dd4ecc0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Wallace", - "company": "Cryptotemplate", - "phone": "820-559-3809", - "email": "mia@cryptotemplate.com" - }, - { - "id": 7626, - "guid": "37ea1200-65ef-426a-9cfd-3c4a843ab644", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexandra Gilmore", - "company": "InfoAirway", - "phone": "846-465-2164", - "email": "alexandra@infoairway.com" - }, - { - "id": 7627, - "guid": "032f08f4-15ba-430e-8347-57eea20c3a3a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Wayne", - "company": "Compuamerica", - "phone": "807-464-3546", - "email": "ava@compuamerica.com" - }, - { - "id": 7628, - "guid": "2ecd8130-a753-4e4b-a707-b04616c4a346", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Day", - "company": "Anaframe", - "phone": "852-571-2319", - "email": "mya@anaframe.com" - }, - { - "id": 7629, - "guid": "7f06d02d-29dc-4809-8b47-50f81559d07c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Vanessa Warren", - "company": "Idmax", - "phone": "831-598-2468", - "email": "vanessa@idmax.com" - }, - { - "id": 7630, - "guid": "e88922f5-bfd2-4434-9279-a3d393f54268", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Ward", - "company": "Openserve", - "phone": "821-474-2064", - "email": "gabriella@openserve.com" - }, - { - "id": 7631, - "guid": "f42db03c-7aef-4ab1-ab4a-04b64927d12c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Carroll", - "company": "Mescatron", - "phone": "840-577-3564", - "email": "riley@mescatron.com" - }, - { - "id": 7632, - "guid": "9a311bbd-0340-480d-860f-bb5d9f5c3273", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Miers", - "company": "Aluco", - "phone": "874-426-2099", - "email": "eva@aluco.com" - }, - { - "id": 7633, - "guid": "78a64487-92be-472e-981f-e1c371ca4726", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Galbraith", - "company": "Westtomik", - "phone": "835-472-3125", - "email": "faith@westtomik.com" - }, - { - "id": 7634, - "guid": "f70e908e-3901-4f59-963a-4f9f76ca0317", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Hawkins", - "company": "Teraserv", - "phone": "824-564-3690", - "email": "abigail@teraserv.com" - }, - { - "id": 7635, - "guid": "7bb1f737-239a-4f5f-9a5d-7d6b8ea60c34", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jessica Campbell", - "company": "Inridium", - "phone": "818-598-2176", - "email": "jessica@inridium.com" - }, - { - "id": 7636, - "guid": "9c5e70d4-9c52-404e-b0d8-9cfb70b6753e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Melanie Gerald", - "company": "Skydata", - "phone": "820-549-2041", - "email": "melanie@skydata.com" - }, - { - "id": 7637, - "guid": "e21d48be-11af-41a0-a9ef-e8bfb6dc45f6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexa Chapman", - "company": "Generola", - "phone": "877-419-2988", - "email": "alexa@generola.com" - }, - { - "id": 7638, - "guid": "ad3b907d-08bb-4968-88a8-7e75b6c3eb67", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Caroline Vaughan", - "company": "Fibrotopia", - "phone": "869-516-2512", - "email": "caroline@fibrotopia.com" - }, - { - "id": 7639, - "guid": "21fd2925-4e47-4465-ad8f-6355ada31e9b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Vanessa Clapton", - "company": "Infraique", - "phone": "819-518-3056", - "email": "vanessa@infraique.com" - }, - { - "id": 7640, - "guid": "da35f78a-6824-413d-8772-58116bcdcac5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Timmons", - "company": "Aluco", - "phone": "806-422-3828", - "email": "leah@aluco.com" - }, - { - "id": 7641, - "guid": "347f220f-9953-42ea-bb56-47725192a95a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Sherlock", - "company": "Titanigraf", - "phone": "844-442-3580", - "email": "angelina@titanigraf.com" - }, - { - "id": 7642, - "guid": "3c509cae-894d-4daf-8b28-846b287e9bd4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Brown", - "company": "Thermotomic", - "phone": "851-436-3643", - "email": "melanie@thermotomic.com" - }, - { - "id": 7643, - "guid": "65525f0e-74fb-4279-acf0-0d9895355848", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Wesley", - "company": "US Infratouch", - "phone": "803-565-3542", - "email": "chloe@us infratouch.com" - }, - { - "id": 7644, - "guid": "14d5cf8b-4fee-4f30-85df-211676ce8275", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Creighton", - "company": "OpKeycomm", - "phone": "847-435-3523", - "email": "avery@opkeycomm.com" - }, - { - "id": 7645, - "guid": "863aa066-7ea9-4963-b44d-037f7851858b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Nash", - "company": "Indisco", - "phone": "806-493-2860", - "email": "ashley@indisco.com" - }, - { - "id": 7646, - "guid": "254d2535-1310-44eb-b417-a64781533a5a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Katelyn Goldman", - "company": "Airdyne", - "phone": "840-534-2409", - "email": "katelyn@airdyne.com" - }, - { - "id": 7647, - "guid": "82bfb035-d164-45c5-a17d-6e69ffea8f86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Taylor Brooks", - "company": "Anaframe", - "phone": "843-593-3539", - "email": "taylor@anaframe.com" - }, - { - "id": 7648, - "guid": "d7db91ed-5d55-4a8b-b939-d6b0367da03f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Oliver", - "company": "Thermotomic", - "phone": "864-420-3232", - "email": "gabriella@thermotomic.com" - }, - { - "id": 7649, - "guid": "999e88c7-c9de-4798-8c0c-7d5f807f2fb5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mia Clapton", - "company": "Titanirola", - "phone": "809-582-2956", - "email": "mia@titanirola.com" - }, - { - "id": 7650, - "guid": "fda6cc86-a102-4db4-866c-51c131cc00f8", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Chapman", - "company": "Compuamerica", - "phone": "818-499-3111", - "email": "mya@compuamerica.com" - }, - { - "id": 7651, - "guid": "83b393b5-faae-47ba-83e3-ae703a0d3931", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hailey Ward", - "company": "Xeicon", - "phone": "833-427-3389", - "email": "hailey@xeicon.com" - }, - { - "id": 7652, - "guid": "444ba61e-7edb-4c36-8f49-45207db343d7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Gate", - "company": "iOptystix", - "phone": "857-447-2581", - "email": "savannah@ioptystix.com" - }, - { - "id": 7653, - "guid": "b6e5dfe6-1e7e-4408-a5c2-e0fbc487faa3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Stanley", - "company": "iOptystix", - "phone": "800-573-3274", - "email": "alexis@ioptystix.com" - }, - { - "id": 7654, - "guid": "205b5f1b-56ee-4ee7-a81a-435d2549b2cc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Goldman", - "company": "Airdyne", - "phone": "819-481-2291", - "email": "hailey@airdyne.com" - }, - { - "id": 7655, - "guid": "8b73bada-7c23-4de2-9870-5701298840ce", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Chesterton", - "company": "Indisco", - "phone": "896-462-3415", - "email": "charlotte@indisco.com" - }, - { - "id": 7656, - "guid": "b06ff15c-566e-404d-b6ce-4c21c2c4d5fb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Abramson", - "company": "iSkyvaco", - "phone": "854-547-2250", - "email": "caroline@iskyvaco.com" - }, - { - "id": 7657, - "guid": "6ca0d58c-69e1-4ba2-9d3a-75183395b3bd", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaylee Nelson", - "company": "Gigaura", - "phone": "861-450-2094", - "email": "kaylee@gigaura.com" - }, - { - "id": 7658, - "guid": "7d165cce-5feb-429c-b84b-58317ab4749d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Gustman", - "company": "Pacwest", - "phone": "844-419-3956", - "email": "allison@pacwest.com" - }, - { - "id": 7659, - "guid": "6c0086f8-2373-47db-a8d4-4ff45e4984f8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabrielle Smith", - "company": "Allphysiche", - "phone": "874-461-2061", - "email": "gabrielle@allphysiche.com" - }, - { - "id": 7660, - "guid": "40db4ee7-a18f-4042-bef2-5b42f1d85b2e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Oldman", - "company": "Steganoconiche", - "phone": "868-470-2174", - "email": "nevaeh@steganoconiche.com" - }, - { - "id": 7661, - "guid": "33856128-3f5a-407a-b9e1-ebd1fde0aea6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Waller", - "company": "Netsystems", - "phone": "817-522-2558", - "email": "chloe@netsystems.com" - }, - { - "id": 7662, - "guid": "d6565435-d6a6-4e3e-a04b-3676417d23ee", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Young", - "company": "Orthomedia", - "phone": "835-475-2200", - "email": "zoe@orthomedia.com" - }, - { - "id": 7663, - "guid": "9282f375-4f96-4d5e-888b-ea674edcc998", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Molligan", - "company": "Westtomik", - "phone": "857-405-3873", - "email": "grace@westtomik.com" - }, - { - "id": 7664, - "guid": "18cc955a-9a62-447c-963e-38a2a9f2a88d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Thomson", - "company": "Safetrust", - "phone": "874-438-2293", - "email": "destiny@safetrust.com" - }, - { - "id": 7665, - "guid": "9262f065-0501-4eee-b92e-8f0a7bfeacf1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jasmine Nelson", - "company": "Teratopia", - "phone": "898-456-3605", - "email": "jasmine@teratopia.com" - }, - { - "id": 7666, - "guid": "bca43ad0-bcbc-43b8-9614-c58b4a9844f5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Grace Thomson", - "company": "Jamconik", - "phone": "871-501-2962", - "email": "grace@jamconik.com" - }, - { - "id": 7667, - "guid": "ed685a73-ee58-406b-9019-6102e23ac503", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gabriella Daniels", - "company": "SysUSA", - "phone": "825-416-3775", - "email": "gabriella@sysusa.com" - }, - { - "id": 7668, - "guid": "b17c16a3-2ed5-4619-8e61-4ecc357cd2d9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Abramson", - "company": "iOptystix", - "phone": "811-433-3183", - "email": "chloe@ioptystix.com" - }, - { - "id": 7669, - "guid": "df8c5773-3fd1-4726-af21-65d9e092f343", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mariah Gibbs", - "company": "Jamrola", - "phone": "835-486-3524", - "email": "mariah@jamrola.com" - }, - { - "id": 7670, - "guid": "949e081d-e890-4da9-a628-78f2a4b1a667", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kylie Campbell", - "company": "Nanobanc", - "phone": "851-526-3757", - "email": "kylie@nanobanc.com" - }, - { - "id": 7671, - "guid": "74fa4ee6-339d-4aad-870c-9abd3d78d8b0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Gill", - "company": "Celgra", - "phone": "850-491-3409", - "email": "emma@celgra.com" - }, - { - "id": 7672, - "guid": "ac881b7b-c79f-4471-98d9-8a973b35f163", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hannah Cook", - "company": "Multitiqua", - "phone": "875-458-3335", - "email": "hannah@multitiqua.com" - }, - { - "id": 7673, - "guid": "6fcb9595-2626-476a-94e2-f0b47c0dadb0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Chesterton", - "company": "Nanobanc", - "phone": "878-489-2360", - "email": "eva@nanobanc.com" - }, - { - "id": 7674, - "guid": "66baba06-e84a-4801-a14f-103e8d87b0e9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Hardman", - "company": "Cryptotegrity", - "phone": "846-484-3011", - "email": "jasmine@cryptotegrity.com" - }, - { - "id": 7675, - "guid": "47aa8cff-5ae1-4ae5-9e90-c33fe0038a01", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Mercer", - "company": "Hypervaco", - "phone": "849-439-3458", - "email": "zoe@hypervaco.com" - }, - { - "id": 7676, - "guid": "5a1640c7-c271-4dbe-91a7-92076ca21fd1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophie Molligan", - "company": "Polytheon", - "phone": "882-571-3305", - "email": "sophie@polytheon.com" - }, - { - "id": 7677, - "guid": "2a5ea8aa-accc-4fdc-8744-de4391f0516e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Autumn Hailey", - "company": "Safeagra", - "phone": "859-550-3325", - "email": "autumn@safeagra.com" - }, - { - "id": 7678, - "guid": "457239a1-01ea-408c-a72f-df8888b0ffd3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Morrison", - "company": "Superscope", - "phone": "869-561-3672", - "email": "eva@superscope.com" - }, - { - "id": 7679, - "guid": "95b51da4-db8d-4b8d-bb67-8a7e49b5e79a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Charlotte Adamson", - "company": "Titanigraf", - "phone": "832-429-3816", - "email": "charlotte@titanigraf.com" - }, - { - "id": 7680, - "guid": "fb83f566-dc10-4d7d-8a7a-1a37d58cee49", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emily Brickman", - "company": "Technogra", - "phone": "840-478-2906", - "email": "emily@technogra.com" - }, - { - "id": 7681, - "guid": "6d7e233d-a9f3-4c6a-baf6-0677a8222962", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Serenity Crossman", - "company": "Anaframe", - "phone": "849-531-2111", - "email": "serenity@anaframe.com" - }, - { - "id": 7682, - "guid": "1cf76473-a5c3-45ca-a083-d9e4bf924d09", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Nash", - "company": "Fibrotouch", - "phone": "814-567-3604", - "email": "riley@fibrotouch.com" - }, - { - "id": 7683, - "guid": "883edece-06c4-4f20-a092-9f71670723f7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Vaughan", - "company": "US Omnigraphik", - "phone": "898-464-3934", - "email": "riley@us omnigraphik.com" - }, - { - "id": 7684, - "guid": "dc711415-0468-4d18-82dc-1248c9689876", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kaitlyn Thorndike", - "company": "Conotomics", - "phone": "815-401-2409", - "email": "kaitlyn@conotomics.com" - }, - { - "id": 7685, - "guid": "cf93d890-14cd-4731-b6a6-c7dc1b1ec9bf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Higgins", - "company": "Multitiqua", - "phone": "837-475-3551", - "email": "eva@multitiqua.com" - }, - { - "id": 7686, - "guid": "808cf68d-d77e-4147-93d9-abf8daa1a917", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Young", - "company": "InfoAirway", - "phone": "818-422-3688", - "email": "andrea@infoairway.com" - }, - { - "id": 7687, - "guid": "1d1b3fe2-b5fc-4d6e-bad0-fa623bde06ba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Gardner", - "company": "Videobanc", - "phone": "840-435-3025", - "email": "lauren@videobanc.com" - }, - { - "id": 7688, - "guid": "e6ba68f9-8a7e-4b11-8c30-f25970e2696a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Thomson", - "company": "SysUSA", - "phone": "842-456-3132", - "email": "avery@sysusa.com" - }, - { - "id": 7689, - "guid": "177fbbd9-451f-44eb-a9cc-8584b69d0ffb", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Hancock", - "company": "Aprama", - "phone": "880-435-3998", - "email": "alexa@aprama.com" - }, - { - "id": 7690, - "guid": "0c79e942-2e88-41a8-af96-a6f5d80e72df", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Hodges", - "company": "Techtron", - "phone": "821-476-2752", - "email": "makayla@techtron.com" - }, - { - "id": 7691, - "guid": "37b81689-7ff6-4e03-a37e-7c02f3293b40", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Crossman", - "company": "Safeagra", - "phone": "892-531-3760", - "email": "aubrey@safeagra.com" - }, - { - "id": 7692, - "guid": "b3466ef8-1191-4347-9c55-c04cb51723d0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Smith", - "company": "Westmedia", - "phone": "824-537-3947", - "email": "brianna@westmedia.com" - }, - { - "id": 7693, - "guid": "27912e20-e07a-49ce-aff3-8fc0d588df46", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Ogden", - "company": "iMedconik", - "phone": "885-534-3387", - "email": "sophia@imedconik.com" - }, - { - "id": 7694, - "guid": "6c2a480a-96b0-4135-a91e-468f03f9b485", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Daniels", - "company": "Conrama", - "phone": "894-494-2862", - "email": "brooke@conrama.com" - }, - { - "id": 7695, - "guid": "7d5d5c38-3201-412a-b9e8-caace62ec97b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Madeline Miller", - "company": "Tekcar", - "phone": "855-547-2810", - "email": "madeline@tekcar.com" - }, - { - "id": 7696, - "guid": "13c98f02-699f-4f37-8cb0-4e338d00d0b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Gilbert", - "company": "iMedconik", - "phone": "876-571-2004", - "email": "hannah@imedconik.com" - }, - { - "id": 7697, - "guid": "5ebdc74f-49be-4254-a8fb-d14427486959", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Molligan", - "company": "Safeagra", - "phone": "840-488-3140", - "email": "sarah@safeagra.com" - }, - { - "id": 7698, - "guid": "b0a5138a-1681-4fed-b908-79bda2a76cff", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Audrey Hawkins", - "company": "Textiqua", - "phone": "862-501-2786", - "email": "audrey@textiqua.com" - }, - { - "id": 7699, - "guid": "4995802c-194c-4085-b74e-3a257d6cc51d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah White", - "company": "Titanirola", - "phone": "826-569-2582", - "email": "leah@titanirola.com" - }, - { - "id": 7700, - "guid": "3f8d23c0-f338-4250-980f-2ea3c9564407", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mariah Owen", - "company": "iQualcar", - "phone": "822-464-3078", - "email": "mariah@iqualcar.com" - }, - { - "id": 7701, - "guid": "a0a66450-5de1-47eb-9dce-6bb51ef56867", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Oliver", - "company": "Robotomic", - "phone": "898-552-3102", - "email": "riley@robotomic.com" - }, - { - "id": 7702, - "guid": "de326c55-24ce-4333-92c9-a561c3a857c4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophia Conors", - "company": "iEnland", - "phone": "854-496-2774", - "email": "sophia@ienland.com" - }, - { - "id": 7703, - "guid": "49eea403-cf44-47f6-85e6-d57670e42fbe", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Carrington", - "company": "Mescatron", - "phone": "816-431-3996", - "email": "angelina@mescatron.com" - }, - { - "id": 7704, - "guid": "511379c3-87b5-4906-9d09-a1cfafcdf7a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Eva Higgins", - "company": "Fibroserve", - "phone": "895-439-2141", - "email": "eva@fibroserve.com" - }, - { - "id": 7705, - "guid": "17b142c2-a139-49e3-ba4a-af07ec4229ae", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Campbell", - "company": "Inridium", - "phone": "872-420-3368", - "email": "elizabeth@inridium.com" - }, - { - "id": 7706, - "guid": "4f394bce-ae4e-4f4a-a15e-27c1ab839ba0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Gilbert", - "company": "Transtouch", - "phone": "869-545-3151", - "email": "ava@transtouch.com" - }, - { - "id": 7707, - "guid": "34a7408d-c9c7-467d-a64c-eda12d35154b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Jasmine Vaughan", - "company": "Robocomm", - "phone": "872-479-3794", - "email": "jasmine@robocomm.com" - }, - { - "id": 7708, - "guid": "a6704ae8-7aec-48f3-88ea-1488f96dc5da", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Anna Nathan", - "company": "Teknoplexon", - "phone": "828-591-2822", - "email": "anna@teknoplexon.com" - }, - { - "id": 7709, - "guid": "9f0cb340-c546-4d67-9b24-1587c4765a79", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Ogden", - "company": "Enlogia", - "phone": "817-409-2621", - "email": "savannah@enlogia.com" - }, - { - "id": 7710, - "guid": "3e81d014-6f35-430a-be7c-550e0f2e2ed3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Walkman", - "company": "Allnet", - "phone": "846-479-3961", - "email": "amelia@allnet.com" - }, - { - "id": 7711, - "guid": "346eb4ee-a355-4cfa-849d-f45526cf123a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Harrison", - "company": "Genland", - "phone": "832-409-2199", - "email": "riley@genland.com" - }, - { - "id": 7712, - "guid": "9924e0ed-49eb-4f82-8b72-7d22b35564fe", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Wainwright", - "company": "Technogra", - "phone": "874-497-3710", - "email": "ashley@technogra.com" - }, - { - "id": 7713, - "guid": "e2e171f5-3d6b-4040-8010-b242f65b6cff", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Arianna Nash", - "company": "Fibrotouch", - "phone": "831-520-3071", - "email": "arianna@fibrotouch.com" - }, - { - "id": 7714, - "guid": "a9a177ce-b7ad-47e1-8c29-f5f214b1a7e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Miers", - "company": "Polytheon", - "phone": "873-542-3912", - "email": "maya@polytheon.com" - }, - { - "id": 7715, - "guid": "96f0d843-1722-492a-85af-04df46876014", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexa Hodges", - "company": "Videobanc", - "phone": "800-521-3948", - "email": "alexa@videobanc.com" - }, - { - "id": 7716, - "guid": "198085c7-ec06-47e1-a598-def7c8d63e50", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Samantha Abramson", - "company": "Truegate", - "phone": "823-567-2552", - "email": "samantha@truegate.com" - }, - { - "id": 7717, - "guid": "10f7eb2e-ec83-4b0d-ba58-e94ae6bce4a9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alyssa Nash", - "company": "Idmax", - "phone": "801-568-2341", - "email": "alyssa@idmax.com" - }, - { - "id": 7718, - "guid": "f361560e-cbc1-436a-b065-df6e0c6617e7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Croftoon", - "company": "iSkyvaco", - "phone": "815-549-2817", - "email": "alexa@iskyvaco.com" - }, - { - "id": 7719, - "guid": "29b9ad16-0d4c-4b47-9506-48e8ae5dd6ad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ariana Youmans", - "company": "Truegate", - "phone": "867-474-2233", - "email": "ariana@truegate.com" - }, - { - "id": 7720, - "guid": "6affb596-313b-477a-9d85-4183d567258a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lillian Sherlock", - "company": "Netseco", - "phone": "873-422-3887", - "email": "lillian@netseco.com" - }, - { - "id": 7721, - "guid": "976fe721-fceb-4954-b42f-fe5125ef7b5a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Taylor Thornton", - "company": "Infraique", - "phone": "894-540-3945", - "email": "taylor@infraique.com" - }, - { - "id": 7722, - "guid": "fc4345f6-ede8-4fcc-936c-b3a0822626e4", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Stanley", - "company": "Cryptotemplate", - "phone": "826-531-2077", - "email": "madeline@cryptotemplate.com" - }, - { - "id": 7723, - "guid": "fd28b147-938d-489f-91b2-f2f10523d183", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Cramer", - "company": "Idmax", - "phone": "818-473-2147", - "email": "payton@idmax.com" - }, - { - "id": 7724, - "guid": "953e5bbe-a895-484a-8d9f-607aca6b4da5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Haig", - "company": "Orthosoft", - "phone": "854-428-3959", - "email": "hannah@orthosoft.com" - }, - { - "id": 7725, - "guid": "4a64c8ac-4dde-48c1-ae67-cbe6dc434190", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Bush", - "company": "Superscope", - "phone": "868-580-3447", - "email": "mya@superscope.com" - }, - { - "id": 7726, - "guid": "5b63b370-dc1b-4915-acd8-c36d378556ed", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Turner", - "company": "Truetomic", - "phone": "870-429-2837", - "email": "samantha@truetomic.com" - }, - { - "id": 7727, - "guid": "3c956b1d-966b-4807-8b68-23ee8bb987e8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Nelson", - "company": "iQualcar", - "phone": "863-559-3053", - "email": "addison@iqualcar.com" - }, - { - "id": 7728, - "guid": "a9dea506-8dac-438f-85de-af555e14397b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Carter", - "company": "iEnland", - "phone": "881-547-3639", - "email": "kaylee@ienland.com" - }, - { - "id": 7729, - "guid": "2260c697-52a0-492f-ae09-cbc0495c7ada", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Waller", - "company": "Jamrola", - "phone": "888-429-3034", - "email": "kaitlyn@jamrola.com" - }, - { - "id": 7730, - "guid": "74be5811-e28f-4ce1-a0e7-4a0cd1c5a278", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Molly Murphy", - "company": "Rapigrafix", - "phone": "804-459-2830", - "email": "molly@rapigrafix.com" - }, - { - "id": 7731, - "guid": "dc90c384-524a-43af-8ba0-94c1f81b1d7d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madelyn Hailey", - "company": "Superscope", - "phone": "883-402-2257", - "email": "madelyn@superscope.com" - }, - { - "id": 7732, - "guid": "051d2b0c-51b1-4f17-be05-4d8c833b640c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Youmans", - "company": "Venconix", - "phone": "841-586-2606", - "email": "alyssa@venconix.com" - }, - { - "id": 7733, - "guid": "184f9558-3fde-4bdb-9227-174ed3198fee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Croftoon", - "company": "Orthomedia", - "phone": "849-477-2306", - "email": "katherine@orthomedia.com" - }, - { - "id": 7734, - "guid": "8c48e550-e00b-4d7d-9d33-49b261a04174", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Gerald", - "company": "Systheon", - "phone": "878-457-2196", - "email": "nevaeh@systheon.com" - }, - { - "id": 7735, - "guid": "2aecc240-50d4-4dad-9583-54cab5d740b8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Oliver", - "company": "Genland", - "phone": "861-496-3930", - "email": "riley@genland.com" - }, - { - "id": 7736, - "guid": "f153820e-46e9-4ce1-98e7-d76480a30fcb", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Webster", - "company": "Celgra", - "phone": "823-439-2514", - "email": "kayla@celgra.com" - }, - { - "id": 7737, - "guid": "90da797f-b650-496e-b5b6-2ea6564d0514", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Carter", - "company": "US Omnigraphik", - "phone": "859-449-3059", - "email": "genesis@us omnigraphik.com" - }, - { - "id": 7738, - "guid": "8403a0da-0495-4604-bb67-5d13abfd6cbd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Khloe Webster", - "company": "Pacwest", - "phone": "844-511-2897", - "email": "khloe@pacwest.com" - }, - { - "id": 7739, - "guid": "a5c89dd0-97d1-4368-a08c-8e772c1ae8ec", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Galbraith", - "company": "Vencom", - "phone": "851-591-3709", - "email": "vanessa@vencom.com" - }, - { - "id": 7740, - "guid": "3f4a4c63-90f8-448d-aee5-cd29e2bbcfd8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Destiny Brown", - "company": "RoboAerlogix", - "phone": "822-538-3928", - "email": "destiny@roboaerlogix.com" - }, - { - "id": 7741, - "guid": "4c5c625b-8b31-446d-9f42-126a0b156268", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Hancock", - "company": "SysUSA", - "phone": "844-439-3769", - "email": "emily@sysusa.com" - }, - { - "id": 7742, - "guid": "3c4f9afb-0f4f-4ec5-8882-f588c7a8627e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Zoe Stanley", - "company": "Polytheon", - "phone": "844-453-2034", - "email": "zoe@polytheon.com" - }, - { - "id": 7743, - "guid": "c7685a6c-1fd5-46d7-bc89-57163206f007", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Brickman", - "company": "Fibrotopia", - "phone": "832-559-3322", - "email": "isabella@fibrotopia.com" - }, - { - "id": 7744, - "guid": "f46fe732-1721-44c8-9601-039d478d8381", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mackenzie Timmons", - "company": "iMedconik", - "phone": "877-565-2181", - "email": "mackenzie@imedconik.com" - }, - { - "id": 7745, - "guid": "18fe06ce-9615-4704-9095-425092513c11", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Conors", - "company": "Generola", - "phone": "836-545-2421", - "email": "angelina@generola.com" - }, - { - "id": 7746, - "guid": "37a3b4d4-3722-437d-a5a0-358dc94bf05c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Gibbs", - "company": "Robotemplate", - "phone": "880-443-2260", - "email": "natalie@robotemplate.com" - }, - { - "id": 7747, - "guid": "c51b5e89-ba73-4fa5-828e-ca6048e975ad", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Wood", - "company": "Ameritron", - "phone": "877-457-2153", - "email": "maria@ameritron.com" - }, - { - "id": 7748, - "guid": "c2824b20-1e06-42d1-bbc8-da5df6495d43", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kaitlyn Walkman", - "company": "Robotemplate", - "phone": "858-534-2223", - "email": "kaitlyn@robotemplate.com" - }, - { - "id": 7749, - "guid": "53ea04d4-3633-4a63-86bd-118ea4d18b58", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Owen", - "company": "Ameritron", - "phone": "866-483-2253", - "email": "valeria@ameritron.com" - }, - { - "id": 7750, - "guid": "8207d2c0-db29-409d-8a5e-4a0246afafca", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Goldman", - "company": "Venconix", - "phone": "869-402-2352", - "email": "faith@venconix.com" - }, - { - "id": 7751, - "guid": "3f280fe1-dbb4-4a92-abb4-c55d1a6573d7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ariana Walkman", - "company": "Airdyne", - "phone": "890-552-3130", - "email": "ariana@airdyne.com" - }, - { - "id": 7752, - "guid": "5d48b8b6-3121-40d1-98a6-b1c1bf5cc202", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Vaughan", - "company": "Conrama", - "phone": "806-455-3276", - "email": "taylor@conrama.com" - }, - { - "id": 7753, - "guid": "bb92ad11-c8ad-48d2-b913-a1f374ddc69b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Higgins", - "company": "Sontopia", - "phone": "808-534-2559", - "email": "leah@sontopia.com" - }, - { - "id": 7754, - "guid": "ddfa3dce-d126-46be-995b-cc98722568c4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Wallace", - "company": "Fibrotopia", - "phone": "892-468-2373", - "email": "emily@fibrotopia.com" - }, - { - "id": 7755, - "guid": "2e1ad7b9-5e80-4fb0-a907-c2caa2a1455c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Goodman", - "company": "Transtouch", - "phone": "801-423-3134", - "email": "khloe@transtouch.com" - }, - { - "id": 7756, - "guid": "9e036507-b67f-4f19-b2cb-1436f594f5b8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoe Milton", - "company": "Dynarama", - "phone": "894-519-3080", - "email": "zoe@dynarama.com" - }, - { - "id": 7757, - "guid": "dd970f19-62d2-4dd2-b235-0f731fa7a078", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madeline Morrison", - "company": "Techtron", - "phone": "818-490-2624", - "email": "madeline@techtron.com" - }, - { - "id": 7758, - "guid": "f2eedfc6-9bb2-4de3-9b03-8f75ba578cd1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Claire Creighton", - "company": "Hypervaco", - "phone": "874-451-2129", - "email": "claire@hypervaco.com" - }, - { - "id": 7759, - "guid": "3b14fa7c-9ae5-4689-b6f7-53a89298032a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Conors", - "company": "Ameritron", - "phone": "809-423-3341", - "email": "lily@ameritron.com" - }, - { - "id": 7760, - "guid": "6ed160b6-daca-4bad-a8c2-a6e70227dadf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Anna Michaelson", - "company": "Interliant", - "phone": "808-412-2340", - "email": "anna@interliant.com" - }, - { - "id": 7761, - "guid": "893ae498-b906-46f4-9f23-1810ee5dbc86", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Nathan", - "company": "Unologic", - "phone": "810-599-3727", - "email": "alexa@unologic.com" - }, - { - "id": 7762, - "guid": "a654901d-bbbf-4537-897a-cb4816f867fa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Chandter", - "company": "Safetrust", - "phone": "879-527-2881", - "email": "jasmine@safetrust.com" - }, - { - "id": 7763, - "guid": "27314384-9f5d-4971-826a-6d3fdfcc048e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Makayla Owen", - "company": "Sontopia", - "phone": "851-486-2967", - "email": "makayla@sontopia.com" - }, - { - "id": 7764, - "guid": "05455d16-2646-4645-aacf-012e97d95389", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Carrington", - "company": "Steganoconiche", - "phone": "899-530-3347", - "email": "sophie@steganoconiche.com" - }, - { - "id": 7765, - "guid": "30461f16-237d-489c-9e09-3e22520777f8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Melanie Conors", - "company": "Steganoconiche", - "phone": "885-590-3993", - "email": "melanie@steganoconiche.com" - }, - { - "id": 7766, - "guid": "186a886a-596c-4f87-9ef0-3564b3d0e60f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Gilson", - "company": "Turbomart", - "phone": "850-572-2579", - "email": "hannah@turbomart.com" - }, - { - "id": 7767, - "guid": "2e12ee6e-5914-4f49-94a6-c6259d2027b8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Waller", - "company": "Thermotomic", - "phone": "804-600-2016", - "email": "makayla@thermotomic.com" - }, - { - "id": 7768, - "guid": "96199844-4c17-42c8-a540-6f20d41e2556", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alyssa Owen", - "company": "Keytheon", - "phone": "895-537-2304", - "email": "alyssa@keytheon.com" - }, - { - "id": 7769, - "guid": "697da8c6-1e6e-4829-a12a-0b086c532829", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Thorndike", - "company": "Polytheon", - "phone": "841-478-2030", - "email": "angelina@polytheon.com" - }, - { - "id": 7770, - "guid": "04639744-f324-4c85-9314-e5c4625988e7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Eva Morrison", - "company": "Keytheon", - "phone": "852-585-2902", - "email": "eva@keytheon.com" - }, - { - "id": 7771, - "guid": "8ae141cd-7efa-4529-8d2a-8b4d1eb2801b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Khloe Brown", - "company": "iOptystix", - "phone": "805-466-2791", - "email": "khloe@ioptystix.com" - }, - { - "id": 7772, - "guid": "9b053323-b60d-4843-af98-4cfde93b7ba2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Molly Carey", - "company": "Hypervaco", - "phone": "855-432-2115", - "email": "molly@hypervaco.com" - }, - { - "id": 7773, - "guid": "8e1a171e-376b-4211-ae35-1bade07d27ef", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Gibbs", - "company": "Netsystems", - "phone": "896-554-3115", - "email": "ariana@netsystems.com" - }, - { - "id": 7774, - "guid": "dadbdb58-c0e9-45fc-8d37-a5aa326f1b30", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Rachel Milton", - "company": "Sontopia", - "phone": "881-454-3644", - "email": "rachel@sontopia.com" - }, - { - "id": 7775, - "guid": "119832e1-5e8e-453e-8d43-e80447fb520f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Paige Brickman", - "company": "Infraique", - "phone": "808-504-2349", - "email": "paige@infraique.com" - }, - { - "id": 7776, - "guid": "1b5eff64-9dd4-4dca-8748-13df43bfbfb4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Goodman", - "company": "Orthomedia", - "phone": "832-429-2920", - "email": "mia@orthomedia.com" - }, - { - "id": 7777, - "guid": "74e76eb9-4277-4c96-9bd8-08290f0bc8da", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace Fulton", - "company": "Keytheon", - "phone": "862-502-2051", - "email": "grace@keytheon.com" - }, - { - "id": 7778, - "guid": "616448a8-6808-4d03-92f9-644db4b2e6de", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Elizabeth Chapman", - "company": "Superscope", - "phone": "806-451-2077", - "email": "elizabeth@superscope.com" - }, - { - "id": 7779, - "guid": "76cfc710-440b-4fc1-bdc5-d5cb27e1bcc6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Vance", - "company": "Technogra", - "phone": "871-436-2402", - "email": "ashley@technogra.com" - }, - { - "id": 7780, - "guid": "964c3780-559c-45bc-ae70-f80ea50382b3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Carter", - "company": "Xeicon", - "phone": "843-412-3434", - "email": "jasmine@xeicon.com" - }, - { - "id": 7781, - "guid": "4ecc4d33-a7b5-4730-af4e-2584a6cabec9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Evelyn Campbell", - "company": "eEyetanic", - "phone": "881-416-3852", - "email": "evelyn@eeyetanic.com" - }, - { - "id": 7782, - "guid": "644cc064-cf4e-4179-bb9a-588ea01b9621", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Stanley", - "company": "OpKeycomm", - "phone": "831-438-3758", - "email": "bailey@opkeycomm.com" - }, - { - "id": 7783, - "guid": "f24d886b-0c00-4c8a-9143-7843c2ab27d0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Croftoon", - "company": "Jamrola", - "phone": "804-545-2144", - "email": "mya@jamrola.com" - }, - { - "id": 7784, - "guid": "a1e7d4e8-06e9-4ad3-bd20-a9ad2a67282c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Watson", - "company": "Aprama", - "phone": "870-558-2851", - "email": "lily@aprama.com" - }, - { - "id": 7785, - "guid": "730982de-c21a-431d-89dc-c72774af57b5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Nelson", - "company": "Transtouch", - "phone": "833-504-2214", - "email": "zoe@transtouch.com" - }, - { - "id": 7786, - "guid": "eac580e3-ad7e-483c-8e0b-9ff962588557", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Otis", - "company": "Superscope", - "phone": "844-429-2309", - "email": "arianna@superscope.com" - }, - { - "id": 7787, - "guid": "9800a1ee-4181-471e-a0f6-18b433094491", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hannah Bush", - "company": "Safeagra", - "phone": "806-561-3764", - "email": "hannah@safeagra.com" - }, - { - "id": 7788, - "guid": "6022383b-768d-4b39-9f81-e8bff5de4565", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Hardman", - "company": "Robotomic", - "phone": "886-498-2718", - "email": "maria@robotomic.com" - }, - { - "id": 7789, - "guid": "a43099a7-f6ad-4d54-a40c-7b1cd10f16a2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Layla Nelson", - "company": "Titanigraf", - "phone": "828-473-2176", - "email": "layla@titanigraf.com" - }, - { - "id": 7790, - "guid": "a74700c7-d3b7-4e4c-b477-6cddd5f8a8ce", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Fulton", - "company": "Thermotomic", - "phone": "823-530-3578", - "email": "mya@thermotomic.com" - }, - { - "id": 7791, - "guid": "31fddb49-d4fc-4189-99a1-a4ec6541c787", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Ford", - "company": "Techtron", - "phone": "884-447-2454", - "email": "faith@techtron.com" - }, - { - "id": 7792, - "guid": "5cb16015-8e42-4eb7-b902-cb64b29f66b8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Gustman", - "company": "Interliant", - "phone": "817-525-3616", - "email": "caroline@interliant.com" - }, - { - "id": 7793, - "guid": "7e0ea543-bca1-41e1-be41-29ba93af1665", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline WifKinson", - "company": "Pacwest", - "phone": "834-537-2683", - "email": "madeline@pacwest.com" - }, - { - "id": 7794, - "guid": "61b3a9e7-fef6-44df-be10-b7d5e5120d29", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jasmine Haig", - "company": "Jamrola", - "phone": "868-481-2801", - "email": "jasmine@jamrola.com" - }, - { - "id": 7795, - "guid": "25637b6b-5735-4176-be1c-c1b6ecaeb533", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katherine Oliver", - "company": "Pericenta", - "phone": "802-498-2979", - "email": "katherine@pericenta.com" - }, - { - "id": 7796, - "guid": "2010e30c-3820-4bd3-956a-12ac802958cf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Olivia Gill", - "company": "eSteganoergy", - "phone": "878-428-3566", - "email": "olivia@esteganoergy.com" - }, - { - "id": 7797, - "guid": "02585197-183c-4d4c-ade3-bff2b5255f51", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Addison Wallace", - "company": "Netseco", - "phone": "862-499-3215", - "email": "addison@netseco.com" - }, - { - "id": 7798, - "guid": "7b0aea7f-edaa-4fce-acbe-b076c7095ad4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Carrington", - "company": "Infraique", - "phone": "805-539-3181", - "email": "anna@infraique.com" - }, - { - "id": 7799, - "guid": "b7ebb796-dece-48ce-b9d7-e42fa8abfb4c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Brickman", - "company": "Venconix", - "phone": "860-408-3801", - "email": "allison@venconix.com" - }, - { - "id": 7800, - "guid": "2cc78ee2-a32b-4964-87f7-6ff1e7e4cdda", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley Carrington", - "company": "Inridium", - "phone": "851-503-2760", - "email": "riley@inridium.com" - }, - { - "id": 7801, - "guid": "5293c81a-6acf-48fc-83c5-b2989521cabe", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Gibbs", - "company": "Ameritron", - "phone": "899-451-3146", - "email": "katelyn@ameritron.com" - }, - { - "id": 7802, - "guid": "d0d99214-e89f-408c-92c5-a957e6c9e52f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Gilmore", - "company": "Westmedia", - "phone": "871-525-3814", - "email": "mariah@westmedia.com" - }, - { - "id": 7803, - "guid": "320fe793-a447-4f54-bbf8-32417f3dcd40", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Gibbs", - "company": "Truetomic", - "phone": "871-447-2734", - "email": "payton@truetomic.com" - }, - { - "id": 7804, - "guid": "f1249fb8-4a8d-4241-811d-3f319871f5e8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Milton", - "company": "Airdyne", - "phone": "879-574-3921", - "email": "katherine@airdyne.com" - }, - { - "id": 7805, - "guid": "91759d8f-72be-402b-b54b-6f5640673089", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Khloe Turner", - "company": "Proline", - "phone": "869-456-2577", - "email": "khloe@proline.com" - }, - { - "id": 7806, - "guid": "4701816f-ce20-46c9-960f-3b0edbb839f6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Owen", - "company": "Videobanc", - "phone": "862-503-3318", - "email": "madeline@videobanc.com" - }, - { - "id": 7807, - "guid": "f02dd9a0-d7b6-4371-a8cb-0208cccb9705", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Fisher", - "company": "Steganoconiche", - "phone": "859-588-3246", - "email": "gabrielle@steganoconiche.com" - }, - { - "id": 7808, - "guid": "46de6dc8-baa0-4f7e-ab37-4facaa069d74", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madelyn Higgins", - "company": "Jamconik", - "phone": "846-441-2403", - "email": "madelyn@jamconik.com" - }, - { - "id": 7809, - "guid": "2e1c1907-de55-44c6-bcff-4a550529f03b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Thomson", - "company": "Ameritron", - "phone": "852-513-3036", - "email": "madison@ameritron.com" - }, - { - "id": 7810, - "guid": "d363aaec-1b96-4ffb-a490-b105c7acc05a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Bush", - "company": "Multitiqua", - "phone": "899-549-3368", - "email": "caroline@multitiqua.com" - }, - { - "id": 7811, - "guid": "cc58b91f-bc7d-40c2-a11d-90e64df607f8", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Eva Hamphrey", - "company": "Systheon", - "phone": "853-498-2073", - "email": "eva@systheon.com" - }, - { - "id": 7812, - "guid": "3d50d714-703c-41cf-8e26-2eed66281c98", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Webster", - "company": "Celgra", - "phone": "800-478-3671", - "email": "maya@celgra.com" - }, - { - "id": 7813, - "guid": "76f10172-d861-4110-837a-0afaa763d8fb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bella Wainwright", - "company": "Openserve", - "phone": "869-409-3407", - "email": "bella@openserve.com" - }, - { - "id": 7814, - "guid": "1b33f0db-9c37-4344-84d5-478544f827c8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Eva Ogden", - "company": "Teratopia", - "phone": "872-581-3576", - "email": "eva@teratopia.com" - }, - { - "id": 7815, - "guid": "c342aaff-567e-4103-9495-93a1523aaacf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Wood", - "company": "Openserve", - "phone": "891-556-2047", - "email": "maya@openserve.com" - }, - { - "id": 7816, - "guid": "1921615d-ea89-45f1-b797-6c550e1f10ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Vaughan", - "company": "US Infratouch", - "phone": "887-422-2486", - "email": "katelyn@us infratouch.com" - }, - { - "id": 7817, - "guid": "1c4caf7c-ebc9-430b-ab66-bbd65daa47b1", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Carroll", - "company": "Anagraph", - "phone": "877-419-2743", - "email": "charlotte@anagraph.com" - }, - { - "id": 7818, - "guid": "820f94e9-cc0f-4a4f-8c89-4be2d753babd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Thorndike", - "company": "Conrama", - "phone": "878-548-2219", - "email": "camila@conrama.com" - }, - { - "id": 7819, - "guid": "296d5370-98e8-4dd5-b7c2-1f853a33f91c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Miers", - "company": "Aprama", - "phone": "805-444-3604", - "email": "serenity@aprama.com" - }, - { - "id": 7820, - "guid": "4e8381b7-d56b-42df-a33e-55abbc79b815", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Olivia Nathan", - "company": "Xeicon", - "phone": "832-500-2200", - "email": "olivia@xeicon.com" - }, - { - "id": 7821, - "guid": "1d7f5b68-e6f3-4d83-b1dc-1f9fa9cb31df", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Timmons", - "company": "Ventanium", - "phone": "810-540-3484", - "email": "camila@ventanium.com" - }, - { - "id": 7822, - "guid": "aad75040-d60c-40bd-b5ce-5c4aeebd99d9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Campbell", - "company": "Nanobanc", - "phone": "841-579-2686", - "email": "payton@nanobanc.com" - }, - { - "id": 7823, - "guid": "99c65963-c7bd-478a-9a7f-938443b8ab14", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kimberly Charlson", - "company": "Tekcar", - "phone": "869-550-3413", - "email": "kimberly@tekcar.com" - }, - { - "id": 7824, - "guid": "56677b0c-e66c-47a7-b8dd-8695a66f65d5", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Gardner", - "company": "Ameritron", - "phone": "844-533-2096", - "email": "mya@ameritron.com" - }, - { - "id": 7825, - "guid": "f0423844-f983-47b8-b389-96509562ae3d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Hancock", - "company": "Rapigrafix", - "phone": "823-590-2047", - "email": "genesis@rapigrafix.com" - }, - { - "id": 7826, - "guid": "0fa383f6-5e51-4583-b540-2e0962ad5309", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Samantha Carter", - "company": "eSteganoergy", - "phone": "822-449-3887", - "email": "samantha@esteganoergy.com" - }, - { - "id": 7827, - "guid": "180a1fce-44ba-4e78-9bca-54df0c4686e2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Nelson", - "company": "Jamrola", - "phone": "850-525-3518", - "email": "bailey@jamrola.com" - }, - { - "id": 7828, - "guid": "c4c4c237-1e9e-413c-a81f-0cf4981b1608", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Destiny Wayne", - "company": "Celgra", - "phone": "807-422-3490", - "email": "destiny@celgra.com" - }, - { - "id": 7829, - "guid": "000ac5dd-1619-487f-bf3a-6cf63987a786", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Vaughan", - "company": "Mescatron", - "phone": "877-445-2108", - "email": "bailey@mescatron.com" - }, - { - "id": 7830, - "guid": "3d776955-3398-4720-ad3c-51ea4b640b21", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Gardner", - "company": "Unologic", - "phone": "815-531-2419", - "email": "destiny@unologic.com" - }, - { - "id": 7831, - "guid": "d6a70abe-cb43-436b-82f9-cce55a890144", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Khloe Thornton", - "company": "Cryptotegrity", - "phone": "841-492-3923", - "email": "khloe@cryptotegrity.com" - }, - { - "id": 7832, - "guid": "6a9331b2-7164-4ddd-94d3-d20bbff0509f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Webster", - "company": "iEnland", - "phone": "829-545-2300", - "email": "katelyn@ienland.com" - }, - { - "id": 7833, - "guid": "3ae22c7a-cf61-46e4-996e-dc1e03c3a222", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gianna Carter", - "company": "Allnet", - "phone": "876-493-2129", - "email": "gianna@allnet.com" - }, - { - "id": 7834, - "guid": "8d1ff690-a97a-480e-9257-6add6922f74e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ella Oswald", - "company": "RoboAerlogix", - "phone": "892-592-2107", - "email": "ella@roboaerlogix.com" - }, - { - "id": 7835, - "guid": "94a092a4-f97f-4e9c-abe8-32dad49f684f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Payton Wesley", - "company": "Techtron", - "phone": "866-543-3835", - "email": "payton@techtron.com" - }, - { - "id": 7836, - "guid": "39391ce5-a641-4d00-a8a8-8280963789e5", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Ogden", - "company": "Navivacs", - "phone": "831-537-3882", - "email": "nevaeh@navivacs.com" - }, - { - "id": 7837, - "guid": "38106332-b6f2-483e-ab08-15a2659b14d5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Chandter", - "company": "Aluco", - "phone": "881-572-2431", - "email": "zoey@aluco.com" - }, - { - "id": 7838, - "guid": "5e81fb91-8ff9-4158-be4d-315ff742b46b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aaliyah Hancock", - "company": "Allnet", - "phone": "806-586-2843", - "email": "aaliyah@allnet.com" - }, - { - "id": 7839, - "guid": "479f5e32-c9da-4727-8047-b3ef5c82f8bd", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maya Ford", - "company": "Qualserve", - "phone": "815-453-2159", - "email": "maya@qualserve.com" - }, - { - "id": 7840, - "guid": "b200c8ca-7053-46d6-bcc7-d39856c217f9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Sherlock", - "company": "Inridium", - "phone": "817-550-3401", - "email": "arianna@inridium.com" - }, - { - "id": 7841, - "guid": "5248f5d8-dd48-4d9c-9da9-fc2d783f7f4e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Gilmore", - "company": "Hypervaco", - "phone": "833-547-2939", - "email": "katelyn@hypervaco.com" - }, - { - "id": 7842, - "guid": "6af599c9-44a9-47c8-be4c-eb2032937865", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Molligan", - "company": "Dynarama", - "phone": "836-534-3854", - "email": "audrey@dynarama.com" - }, - { - "id": 7843, - "guid": "70e33081-1baf-4b8c-adc9-b86138f4fd12", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Avery Miln", - "company": "Superscope", - "phone": "873-513-3622", - "email": "avery@superscope.com" - }, - { - "id": 7844, - "guid": "cf5df45d-bd1a-4b8f-be31-550428ed305a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ella Hancock", - "company": "iEnland", - "phone": "814-499-3306", - "email": "ella@ienland.com" - }, - { - "id": 7845, - "guid": "5a976513-48bc-4638-ad9d-307f7b6895e2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Chandter", - "company": "iMedconik", - "phone": "806-488-3172", - "email": "taylor@imedconik.com" - }, - { - "id": 7846, - "guid": "bd28baaa-3aa5-47d7-9117-666174b277f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mackenzie Croftoon", - "company": "OpKeycomm", - "phone": "888-556-2442", - "email": "mackenzie@opkeycomm.com" - }, - { - "id": 7847, - "guid": "46f8ca6c-fb90-4b42-834a-84edc26e5780", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Gilbert", - "company": "Unologic", - "phone": "843-583-3906", - "email": "isabella@unologic.com" - }, - { - "id": 7848, - "guid": "4bd4d0ac-42ec-4e7b-874f-60e118c6e347", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Abramson", - "company": "Mescatron", - "phone": "836-444-3529", - "email": "ashley@mescatron.com" - }, - { - "id": 7849, - "guid": "b1ae9f93-3563-4e8c-bbc6-e1736b463022", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Nathan", - "company": "Cryptotemplate", - "phone": "876-419-2317", - "email": "mariah@cryptotemplate.com" - }, - { - "id": 7850, - "guid": "40552ef8-c655-4f61-a8b7-f87048e4c06a", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Gerald", - "company": "RoboAerlogix", - "phone": "832-432-3226", - "email": "kayla@roboaerlogix.com" - }, - { - "id": 7851, - "guid": "fe4bc964-7c7e-4fdf-a618-29c703242eff", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella White", - "company": "Mescaridic", - "phone": "812-476-2856", - "email": "ella@mescaridic.com" - }, - { - "id": 7852, - "guid": "87a1d246-5da1-4bbd-ae7e-dcf38177ada5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madeline Hailey", - "company": "Robocomm", - "phone": "896-416-3682", - "email": "madeline@robocomm.com" - }, - { - "id": 7853, - "guid": "7c9dd8a7-6445-4e3e-9931-494e76f47a96", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Gill", - "company": "Westgate", - "phone": "894-429-2051", - "email": "madelyn@westgate.com" - }, - { - "id": 7854, - "guid": "cf766b19-36d8-414d-aab4-da573d96fa27", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alyssa Clapton", - "company": "Generola", - "phone": "879-482-3532", - "email": "alyssa@generola.com" - }, - { - "id": 7855, - "guid": "9b3b80a6-aea3-4d7e-85d5-ffa088b2dca5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooke Harrison", - "company": "Fibroserve", - "phone": "802-502-2594", - "email": "brooke@fibroserve.com" - }, - { - "id": 7856, - "guid": "94251e9d-8b20-4972-ad24-aadd48ba905e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Freeman", - "company": "SysVenamerica", - "phone": "864-495-2886", - "email": "emma@sysvenamerica.com" - }, - { - "id": 7857, - "guid": "13120f45-c198-4c00-aac9-a31c99f969a6", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Webster", - "company": "Aprama", - "phone": "829-423-2868", - "email": "zoey@aprama.com" - }, - { - "id": 7858, - "guid": "66622c79-4dfc-4904-8da4-a27f7f9a0d7d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Faith Calhoun", - "company": "Truegate", - "phone": "823-401-2112", - "email": "faith@truegate.com" - }, - { - "id": 7859, - "guid": "5c4df5ec-e0de-4a64-97d7-e16133d60b37", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Milton", - "company": "Fibrotouch", - "phone": "822-542-3656", - "email": "olivia@fibrotouch.com" - }, - { - "id": 7860, - "guid": "23a286cc-e082-4965-800a-246db0975e82", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Nevaeh Oldridge", - "company": "iMedconik", - "phone": "893-565-2072", - "email": "nevaeh@imedconik.com" - }, - { - "id": 7861, - "guid": "255e18ec-1d67-4dcf-8478-bb524faecbae", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Otis", - "company": "Anagraph", - "phone": "887-457-3580", - "email": "vanessa@anagraph.com" - }, - { - "id": 7862, - "guid": "ff5b149d-e5f5-457e-910c-1b2dba9c6e1a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Nash", - "company": "Truegate", - "phone": "806-513-2816", - "email": "isabelle@truegate.com" - }, - { - "id": 7863, - "guid": "8ab27d89-11a6-4623-89e6-a3da436fd628", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Hancock", - "company": "Pericenta", - "phone": "818-573-2897", - "email": "alexis@pericenta.com" - }, - { - "id": 7864, - "guid": "f678ead3-8903-4a6e-8641-8bc9d5ba0bd8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Autumn Oswald", - "company": "Jamconik", - "phone": "834-552-3254", - "email": "autumn@jamconik.com" - }, - { - "id": 7865, - "guid": "607bb6f6-f28a-4609-8870-e9d7af3f68b9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabrielle Crossman", - "company": "Xeicon", - "phone": "884-512-2758", - "email": "gabrielle@xeicon.com" - }, - { - "id": 7866, - "guid": "569d897f-2232-41ac-a0b9-d3d9501325f2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Wesley", - "company": "Tekcar", - "phone": "851-500-3502", - "email": "taylor@tekcar.com" - }, - { - "id": 7867, - "guid": "ae82d1b7-8927-4a38-944e-9245413e8a9a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kimberly Oswald", - "company": "Teraserv", - "phone": "886-567-3147", - "email": "kimberly@teraserv.com" - }, - { - "id": 7868, - "guid": "9cd01856-5964-4da9-87e7-ebee02b5b1ca", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kylie Gibbs", - "company": "Pericenta", - "phone": "858-445-3647", - "email": "kylie@pericenta.com" - }, - { - "id": 7869, - "guid": "a39f96b2-8e75-4bc1-bc25-87ee00c9d03b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Chapman", - "company": "Quintegrity", - "phone": "890-590-2689", - "email": "andrea@quintegrity.com" - }, - { - "id": 7870, - "guid": "af59b34b-ffa7-4ec7-ae92-165ded19a963", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Vanessa Galbraith", - "company": "Mescatron", - "phone": "813-428-3011", - "email": "vanessa@mescatron.com" - }, - { - "id": 7871, - "guid": "5ad6f84f-672f-42ed-b8e3-855d50ac550f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabelle Murphy", - "company": "Xeicon", - "phone": "805-519-3374", - "email": "isabelle@xeicon.com" - }, - { - "id": 7872, - "guid": "a0ba3a81-2f94-47a7-b3c0-205a8de600fc", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Morrison", - "company": "Venconix", - "phone": "850-517-2185", - "email": "trinity@venconix.com" - }, - { - "id": 7873, - "guid": "c0623b85-86b9-415f-bda7-10f833798e2b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Audrey Haig", - "company": "Unconix", - "phone": "833-526-2487", - "email": "audrey@unconix.com" - }, - { - "id": 7874, - "guid": "79ccdaf2-d1f3-46bc-9508-6b379e9aa3cb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Ogden", - "company": "Conrama", - "phone": "888-477-2527", - "email": "charlotte@conrama.com" - }, - { - "id": 7875, - "guid": "966d7dac-dcce-40c6-bccc-9e4bb2b3e6d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabrielle Smith", - "company": "Syssoft", - "phone": "810-483-2853", - "email": "gabrielle@syssoft.com" - }, - { - "id": 7876, - "guid": "1218614a-2754-4c83-82df-658f4e27f947", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sophia Hodges", - "company": "Fibroserve", - "phone": "885-495-2424", - "email": "sophia@fibroserve.com" - }, - { - "id": 7877, - "guid": "a3b310ee-ff91-45fc-95ae-dd721bd16eb7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bella Goodman", - "company": "Techtron", - "phone": "814-403-2795", - "email": "bella@techtron.com" - }, - { - "id": 7878, - "guid": "57926fae-6090-454c-9979-5977eb69003a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sofia Hodges", - "company": "Raylog", - "phone": "846-506-3236", - "email": "sofia@raylog.com" - }, - { - "id": 7879, - "guid": "19281393-08e2-41e6-a5d1-1bf4324c8345", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Autumn Day", - "company": "Robotemplate", - "phone": "875-507-2917", - "email": "autumn@robotemplate.com" - }, - { - "id": 7880, - "guid": "65c9c0cb-3866-4317-9c3f-c6d7e7e9bb3f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Day", - "company": "Syssoft", - "phone": "808-430-2356", - "email": "madison@syssoft.com" - }, - { - "id": 7881, - "guid": "c0de0e53-18a7-4045-a212-7807e3fef3f5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kimberly Otis", - "company": "US Infratouch", - "phone": "832-577-2434", - "email": "kimberly@us infratouch.com" - }, - { - "id": 7882, - "guid": "c512f148-e83c-498c-82dc-8ff6c7243f03", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Nathan", - "company": "Aprama", - "phone": "899-564-2411", - "email": "vanessa@aprama.com" - }, - { - "id": 7883, - "guid": "9e98366c-1ce9-4a61-ab8d-be008f822f58", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Amelia Goldman", - "company": "Multitiqua", - "phone": "898-571-3539", - "email": "amelia@multitiqua.com" - }, - { - "id": 7884, - "guid": "cf1307a9-aa3b-4feb-8606-92c0507c7e51", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Valeria Hamphrey", - "company": "RoboAerlogix", - "phone": "895-515-3554", - "email": "valeria@roboaerlogix.com" - }, - { - "id": 7885, - "guid": "1ee11dda-b1ab-45ce-b0f3-1d3712f73dae", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Walkman", - "company": "SysUSA", - "phone": "800-429-2756", - "email": "paige@sysusa.com" - }, - { - "id": 7886, - "guid": "789c21dc-92d9-482d-b306-f65979568085", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Isabella Nelson", - "company": "Unologic", - "phone": "884-460-2239", - "email": "isabella@unologic.com" - }, - { - "id": 7887, - "guid": "f6fd384b-6239-42c6-81c5-55f54468a00b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Oldridge", - "company": "Techtron", - "phone": "886-400-3899", - "email": "aaliyah@techtron.com" - }, - { - "id": 7888, - "guid": "d433153e-8efe-4f13-ac4e-8cf0511eafa5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mackenzie Day", - "company": "eEyetanic", - "phone": "896-454-2958", - "email": "mackenzie@eeyetanic.com" - }, - { - "id": 7889, - "guid": "7fbfecad-ddbb-4275-b985-66a2e1879420", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Stanley", - "company": "Allphysiche", - "phone": "814-480-2699", - "email": "alexa@allphysiche.com" - }, - { - "id": 7890, - "guid": "06f9c194-8a78-4afa-9146-b0a2075c2497", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Goldman", - "company": "Rapigrafix", - "phone": "866-431-2232", - "email": "mya@rapigrafix.com" - }, - { - "id": 7891, - "guid": "53723b24-752c-4187-b7cb-f57617bb4393", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Youmans", - "company": "Aluco", - "phone": "820-446-3093", - "email": "julia@aluco.com" - }, - { - "id": 7892, - "guid": "361d09bc-9b26-40f4-b1b4-0cd3ec57a028", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Wainwright", - "company": "Systheon", - "phone": "835-441-2641", - "email": "autumn@systheon.com" - }, - { - "id": 7893, - "guid": "17ae6907-c6f7-4307-af56-57f366ec752d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Hoggarth", - "company": "Pacwest", - "phone": "880-472-3213", - "email": "rachel@pacwest.com" - }, - { - "id": 7894, - "guid": "bea9ba86-9cf7-46a1-aa92-c42f56651433", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bella Davidson", - "company": "Anaframe", - "phone": "810-550-2653", - "email": "bella@anaframe.com" - }, - { - "id": 7895, - "guid": "075f5b1c-6ab7-4659-9af8-5900c44f9b7b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Otis", - "company": "US Infratouch", - "phone": "831-412-3945", - "email": "kylie@us infratouch.com" - }, - { - "id": 7896, - "guid": "aefaf94f-ad32-42f7-b4e3-ce4d00ebd69c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Autumn Hodges", - "company": "Pericenta", - "phone": "832-545-2851", - "email": "autumn@pericenta.com" - }, - { - "id": 7897, - "guid": "467c6a17-a410-41ab-802d-1468209433ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kimberly Oldridge", - "company": "Inridium", - "phone": "829-465-2386", - "email": "kimberly@inridium.com" - }, - { - "id": 7898, - "guid": "7641dea0-8dd0-4deb-adbd-c1f9b4bca9af", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Gate", - "company": "Aluco", - "phone": "827-437-2786", - "email": "kylie@aluco.com" - }, - { - "id": 7899, - "guid": "4ea9822e-b55b-4e21-8b5c-2fb0fd6f3f67", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Hodges", - "company": "Rapigrafix", - "phone": "894-405-2930", - "email": "layla@rapigrafix.com" - }, - { - "id": 7900, - "guid": "13dfa9dd-768f-48b9-a87d-3e6637b70b6f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Calhoun", - "company": "Venconix", - "phone": "882-565-3675", - "email": "andrea@venconix.com" - }, - { - "id": 7901, - "guid": "7c18f36c-7379-465e-aa27-ef9b83a64d42", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Youmans", - "company": "Aluco", - "phone": "858-405-2318", - "email": "gianna@aluco.com" - }, - { - "id": 7902, - "guid": "ca2c0d34-6677-4e59-ad52-492b5afdffc3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Sherlock", - "company": "Jamrola", - "phone": "866-476-3053", - "email": "serenity@jamrola.com" - }, - { - "id": 7903, - "guid": "557392c8-bd79-4c66-ad1f-6e1236d72b11", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia Miller", - "company": "Qualserve", - "phone": "816-472-3249", - "email": "mia@qualserve.com" - }, - { - "id": 7904, - "guid": "97af2569-3db5-4108-a0ea-b7d72b95cf1c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Youmans", - "company": "Entcast", - "phone": "855-485-3344", - "email": "faith@entcast.com" - }, - { - "id": 7905, - "guid": "a0be07e3-87e1-4423-99e7-2814a3616091", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaylee Mercer", - "company": "Rapigrafix", - "phone": "812-435-3818", - "email": "kaylee@rapigrafix.com" - }, - { - "id": 7906, - "guid": "fba67414-4170-4155-af1e-77303e91640d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Goldman", - "company": "Westmedia", - "phone": "840-409-2617", - "email": "morgan@westmedia.com" - }, - { - "id": 7907, - "guid": "b55b1a6f-0542-474a-9057-fba3fb360bb5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Addison Turner", - "company": "InfoAirway", - "phone": "893-569-3419", - "email": "addison@infoairway.com" - }, - { - "id": 7908, - "guid": "f1893369-0eb2-4de7-b0e3-1dc885c07373", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Hailey", - "company": "Idmax", - "phone": "854-567-2406", - "email": "kylie@idmax.com" - }, - { - "id": 7909, - "guid": "6253d31c-9e1c-4b52-9ace-78e8149c2ae5", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Wesley", - "company": "Proline", - "phone": "834-522-2679", - "email": "abigail@proline.com" - }, - { - "id": 7910, - "guid": "bceba3d0-a5f6-45f6-892a-6b3e854fe9c0", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Charlotte Wainwright", - "company": "Teraserv", - "phone": "845-403-3070", - "email": "charlotte@teraserv.com" - }, - { - "id": 7911, - "guid": "99974ffb-df62-4d3d-af47-8f4e95319229", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Fisher", - "company": "Navivacs", - "phone": "882-403-2882", - "email": "sofia@navivacs.com" - }, - { - "id": 7912, - "guid": "4fcb2ac6-c106-415d-899d-157957b661d8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Warren", - "company": "RoboAerlogix", - "phone": "839-447-2564", - "email": "isabella@roboaerlogix.com" - }, - { - "id": 7913, - "guid": "a0a3a048-e649-460d-b3e5-35217360fa81", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Carroll", - "company": "eEyetanic", - "phone": "882-480-3602", - "email": "kaitlyn@eeyetanic.com" - }, - { - "id": 7914, - "guid": "2577a3d7-abbc-454e-a71c-75b30fc77454", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Rachel Creighton", - "company": "Inridium", - "phone": "825-462-3454", - "email": "rachel@inridium.com" - }, - { - "id": 7915, - "guid": "f55df275-c613-4a2d-b62d-4f0396c0371f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Timmons", - "company": "Mescatron", - "phone": "815-418-3202", - "email": "rachel@mescatron.com" - }, - { - "id": 7916, - "guid": "ed76a193-f18d-4c18-b703-18325e1d3f1f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Smith", - "company": "Unconix", - "phone": "887-428-3027", - "email": "nevaeh@unconix.com" - }, - { - "id": 7917, - "guid": "06fababc-ba20-4cdf-ba41-fefe10cca1c3", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ariana Walkman", - "company": "Jamconik", - "phone": "875-487-3920", - "email": "ariana@jamconik.com" - }, - { - "id": 7918, - "guid": "b25a796d-beb5-4a14-a60f-eb525d8c61d4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Hawkins", - "company": "Venconix", - "phone": "898-548-3592", - "email": "melanie@venconix.com" - }, - { - "id": 7919, - "guid": "1e9847ef-02cd-4158-8e65-badf7aaa56f7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alyssa Bush", - "company": "Indisco", - "phone": "899-574-3601", - "email": "alyssa@indisco.com" - }, - { - "id": 7920, - "guid": "11343452-8914-482a-b986-63057d53073c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Adamson", - "company": "Westmedia", - "phone": "807-462-3902", - "email": "molly@westmedia.com" - }, - { - "id": 7921, - "guid": "9e90d0c7-0ab1-4830-915b-fedf637ec157", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Thorndike", - "company": "Textiqua", - "phone": "892-559-2874", - "email": "jasmine@textiqua.com" - }, - { - "id": 7922, - "guid": "294093ec-f136-40fa-a3d3-71d6446d3fe6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Cramer", - "company": "Idmax", - "phone": "889-479-3602", - "email": "makayla@idmax.com" - }, - { - "id": 7923, - "guid": "d47fc6ac-8dbe-43b6-861d-1e32ce6fcac1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lillian Thornton", - "company": "Videobanc", - "phone": "822-477-2717", - "email": "lillian@videobanc.com" - }, - { - "id": 7924, - "guid": "6993206f-d345-48a0-96fc-a2fb773e3170", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Vance", - "company": "Superscope", - "phone": "890-555-3448", - "email": "grace@superscope.com" - }, - { - "id": 7925, - "guid": "6d7db331-8417-401f-873a-af81cdb7dc85", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabriella Thornton", - "company": "RoboAerlogix", - "phone": "866-466-2854", - "email": "gabriella@roboaerlogix.com" - }, - { - "id": 7926, - "guid": "d0e27d1f-de8f-4861-b380-b02e9cf07a6f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maria Waller", - "company": "Generola", - "phone": "895-492-2813", - "email": "maria@generola.com" - }, - { - "id": 7927, - "guid": "31debef8-d9e2-4b05-aab8-401b28c87ea0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke Winter", - "company": "Textiqua", - "phone": "839-545-2251", - "email": "brooke@textiqua.com" - }, - { - "id": 7928, - "guid": "883de06b-fc0f-4b5d-9e9b-dcaf8e1768ec", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Oliver", - "company": "iEnland", - "phone": "883-436-2777", - "email": "aaliyah@ienland.com" - }, - { - "id": 7929, - "guid": "1b964c67-e38b-4759-9f1a-3e3f1159df4a", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mya Osborne", - "company": "Entcast", - "phone": "826-414-3774", - "email": "mya@entcast.com" - }, - { - "id": 7930, - "guid": "f2ca7df5-e116-47a7-8385-9dd9d5ce4f7a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Isabella Gill", - "company": "Robotemplate", - "phone": "885-402-2903", - "email": "isabella@robotemplate.com" - }, - { - "id": 7931, - "guid": "e7f3c404-6010-4a1f-b910-186b4057969c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Winter", - "company": "Fibrotopia", - "phone": "852-596-2234", - "email": "alexa@fibrotopia.com" - }, - { - "id": 7932, - "guid": "d430265c-acf1-44e0-ad20-c78481231eae", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Hardman", - "company": "OpKeycomm", - "phone": "864-474-3897", - "email": "gianna@opkeycomm.com" - }, - { - "id": 7933, - "guid": "1eb806e0-6266-4c13-9bac-cecb8a90b527", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Andrea Oldridge", - "company": "Textiqua", - "phone": "863-521-2145", - "email": "andrea@textiqua.com" - }, - { - "id": 7934, - "guid": "3c145c2e-5d37-48a6-8299-ee9fa1fb21f6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kimberly Watson", - "company": "Vencom", - "phone": "871-464-2708", - "email": "kimberly@vencom.com" - }, - { - "id": 7935, - "guid": "5e4d02cc-56dd-46f4-b598-098d0b631e5e", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Khloe Thorndike", - "company": "Anagraph", - "phone": "828-477-3484", - "email": "khloe@anagraph.com" - }, - { - "id": 7936, - "guid": "4920c0f7-fdd6-4b1e-8a3a-fb7539538819", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Layla Nash", - "company": "iQualcar", - "phone": "803-414-3948", - "email": "layla@iqualcar.com" - }, - { - "id": 7937, - "guid": "93e5cf2d-9f74-416e-9de6-4194677ee066", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mariah Hancock", - "company": "Quintegrity", - "phone": "846-591-2663", - "email": "mariah@quintegrity.com" - }, - { - "id": 7938, - "guid": "60672526-d5b0-495f-8800-aa14e38f96fb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mariah Carter", - "company": "Celgra", - "phone": "851-568-3549", - "email": "mariah@celgra.com" - }, - { - "id": 7939, - "guid": "518af87e-6e57-477d-80f3-179d6b29aed4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Genesis Day", - "company": "Safeagra", - "phone": "835-409-3692", - "email": "genesis@safeagra.com" - }, - { - "id": 7940, - "guid": "a538ea46-ec10-45f5-b2d3-d4a0a224d8ad", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Grace Gerald", - "company": "Technogra", - "phone": "803-497-3430", - "email": "grace@technogra.com" - }, - { - "id": 7941, - "guid": "0f761c88-2b3f-4a68-95f0-7b3da03ccfdc", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Olivia Turner", - "company": "Interliant", - "phone": "818-565-3200", - "email": "olivia@interliant.com" - }, - { - "id": 7942, - "guid": "e6883815-c199-4852-9fe2-7f76e2047f97", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Amelia Daniels", - "company": "Polytheon", - "phone": "896-575-2586", - "email": "amelia@polytheon.com" - }, - { - "id": 7943, - "guid": "b04b0b9b-0bce-4025-a52e-126c46339990", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Trinity Goldman", - "company": "Titanirola", - "phone": "801-487-3250", - "email": "trinity@titanirola.com" - }, - { - "id": 7944, - "guid": "4d2d5c05-b474-4904-ae94-41c71ebb7474", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Trinity Chandter", - "company": "Sontopia", - "phone": "826-488-2851", - "email": "trinity@sontopia.com" - }, - { - "id": 7945, - "guid": "96a88972-dec5-448a-a81d-ab4ef97677e8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Gill", - "company": "Nanobanc", - "phone": "870-541-2493", - "email": "brooklyn@nanobanc.com" - }, - { - "id": 7946, - "guid": "8f043f54-ea92-4825-b183-2c89a94e05d1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Freeman", - "company": "Tekcar", - "phone": "860-472-2494", - "email": "melanie@tekcar.com" - }, - { - "id": 7947, - "guid": "de386055-77ee-4ac4-b9a4-f64a7f70747b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Faith Goodman", - "company": "Fibrotouch", - "phone": "835-459-2671", - "email": "faith@fibrotouch.com" - }, - { - "id": 7948, - "guid": "045e5cad-7d62-4fc5-8037-1b1c51224436", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexis Hamphrey", - "company": "Textiqua", - "phone": "885-565-2480", - "email": "alexis@textiqua.com" - }, - { - "id": 7949, - "guid": "94a5b89c-e868-44b1-a2a5-acd863e8e512", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Clapton", - "company": "Safetrust", - "phone": "891-511-2244", - "email": "lauren@safetrust.com" - }, - { - "id": 7950, - "guid": "76cb8615-5e36-493f-a4a4-22a9fb452376", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brooklyn Thomson", - "company": "RoboAerlogix", - "phone": "832-482-3145", - "email": "brooklyn@roboaerlogix.com" - }, - { - "id": 7951, - "guid": "57f4592d-c16a-4105-848e-8d92acf44b42", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Creighton", - "company": "eEyetanic", - "phone": "845-569-3344", - "email": "katherine@eeyetanic.com" - }, - { - "id": 7952, - "guid": "2850a9a5-7ee9-418f-bcfa-6c12564c3775", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Wesley", - "company": "InfoAirway", - "phone": "850-450-2791", - "email": "aaliyah@infoairway.com" - }, - { - "id": 7953, - "guid": "07411d04-6714-403b-b7c1-57475343db5c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Savannah Turner", - "company": "Compuamerica", - "phone": "886-586-2211", - "email": "savannah@compuamerica.com" - }, - { - "id": 7954, - "guid": "3da2185b-2097-431a-b2ea-42829737ed51", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Vance", - "company": "Truegate", - "phone": "844-513-2908", - "email": "kaitlyn@truegate.com" - }, - { - "id": 7955, - "guid": "f0716838-055d-4578-b939-cd6472406284", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Clapton", - "company": "Aprama", - "phone": "843-577-2807", - "email": "sydney@aprama.com" - }, - { - "id": 7956, - "guid": "ba024067-1b9a-4acc-8273-61fc0f945ebe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mia Abramson", - "company": "Interliant", - "phone": "899-575-3257", - "email": "mia@interliant.com" - }, - { - "id": 7957, - "guid": "9485ac02-0372-4213-a4d0-f73fc771b481", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Leah Milton", - "company": "Robocomm", - "phone": "809-501-2320", - "email": "leah@robocomm.com" - }, - { - "id": 7958, - "guid": "439a2039-f761-446b-a9ed-02a084da5d83", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Chapman", - "company": "iQualcar", - "phone": "813-401-2516", - "email": "morgan@iqualcar.com" - }, - { - "id": 7959, - "guid": "3e6ee003-1527-409c-8249-3b34a0aca1c6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Natalie Conors", - "company": "Robocomm", - "phone": "897-407-2688", - "email": "natalie@robocomm.com" - }, - { - "id": 7960, - "guid": "467733ba-1b6d-4734-ae64-f07226c4cc7d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Bush", - "company": "Superscope", - "phone": "888-435-2304", - "email": "genesis@superscope.com" - }, - { - "id": 7961, - "guid": "69a4ffcf-c633-4987-a770-56e035532f53", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooklyn Youmans", - "company": "Teratopia", - "phone": "844-447-2561", - "email": "brooklyn@teratopia.com" - }, - { - "id": 7962, - "guid": "346046b9-cef2-4588-a29b-0b647db0d652", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Warren", - "company": "Pericenta", - "phone": "847-561-2183", - "email": "khloe@pericenta.com" - }, - { - "id": 7963, - "guid": "16f5b8bd-83e4-41b7-bee7-737f5d6d795a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Riley Osborne", - "company": "Fibrotouch", - "phone": "848-551-2592", - "email": "riley@fibrotouch.com" - }, - { - "id": 7964, - "guid": "771eb827-ff13-4d00-ac4b-9644340557f9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Galbraith", - "company": "Celgra", - "phone": "884-432-3547", - "email": "kylie@celgra.com" - }, - { - "id": 7965, - "guid": "b6648827-7a1a-4a64-b0d3-3059faf783b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Brickman", - "company": "Jamconik", - "phone": "825-495-3101", - "email": "savannah@jamconik.com" - }, - { - "id": 7966, - "guid": "b2906a28-aa62-496a-9907-0656cab620d4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Youmans", - "company": "Venconix", - "phone": "872-400-3534", - "email": "addison@venconix.com" - }, - { - "id": 7967, - "guid": "e0c2ad4c-8bf9-4285-b37d-6ec5ab2648e8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ashley White", - "company": "Interliant", - "phone": "802-472-2091", - "email": "ashley@interliant.com" - }, - { - "id": 7968, - "guid": "95c64647-746f-44d6-a379-eecf7fd5c6c3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Thomson", - "company": "Interliant", - "phone": "836-402-3668", - "email": "bella@interliant.com" - }, - { - "id": 7969, - "guid": "cf26a463-dae7-43dd-9aef-86f81e4a3df2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Gardner", - "company": "Rapigrafix", - "phone": "801-420-3876", - "email": "katelyn@rapigrafix.com" - }, - { - "id": 7970, - "guid": "47f9fef8-ec84-48ed-a833-1d8af1adb8a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Savannah Crossman", - "company": "Entcast", - "phone": "853-494-2554", - "email": "savannah@entcast.com" - }, - { - "id": 7971, - "guid": "92194e25-f095-422d-afa7-39679a32457a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaitlyn Gill", - "company": "Cryptotegrity", - "phone": "891-468-3585", - "email": "kaitlyn@cryptotegrity.com" - }, - { - "id": 7972, - "guid": "1a5349bd-4a8a-4849-99c3-17878582e9f4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kaitlyn Goodman", - "company": "Proline", - "phone": "886-561-2941", - "email": "kaitlyn@proline.com" - }, - { - "id": 7973, - "guid": "180b9f61-36ff-4ae2-a781-7b095591ecc3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Hancock", - "company": "Infragraph", - "phone": "823-543-3302", - "email": "hannah@infragraph.com" - }, - { - "id": 7974, - "guid": "59a76900-b0dc-4be3-84f9-33b33712af36", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Timmons", - "company": "Idmax", - "phone": "868-568-2444", - "email": "savannah@idmax.com" - }, - { - "id": 7975, - "guid": "4fb8e22a-b968-44a0-a7bb-312b95f62444", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabella Morrison", - "company": "Netsystems", - "phone": "893-479-2683", - "email": "isabella@netsystems.com" - }, - { - "id": 7976, - "guid": "8f5c0527-b970-4116-80d5-062f25925a7f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Hamphrey", - "company": "Technogra", - "phone": "869-401-3559", - "email": "jessica@technogra.com" - }, - { - "id": 7977, - "guid": "f49f17b7-85c9-4081-aea7-368b224f5def", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Turner", - "company": "iOptystix", - "phone": "812-574-3711", - "email": "emma@ioptystix.com" - }, - { - "id": 7978, - "guid": "c124f5fb-d484-4cc4-a5d1-26e21ddee89a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Cook", - "company": "Conotomics", - "phone": "816-410-3019", - "email": "genesis@conotomics.com" - }, - { - "id": 7979, - "guid": "a19820f9-c002-4290-bbb8-de98f443b334", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoe Gilbert", - "company": "Thermotomic", - "phone": "893-407-2063", - "email": "zoe@thermotomic.com" - }, - { - "id": 7980, - "guid": "9156a35b-a7cd-44c5-b140-4ccf4e3e51ef", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lily Nelson", - "company": "Superscope", - "phone": "839-489-2683", - "email": "lily@superscope.com" - }, - { - "id": 7981, - "guid": "d5008cc7-9977-4494-8302-445902c3ddb2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Galbraith", - "company": "Unologic", - "phone": "853-467-2833", - "email": "bella@unologic.com" - }, - { - "id": 7982, - "guid": "109d9d54-0f8f-40c8-9910-33ec1a1aebaa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Watson", - "company": "Robotemplate", - "phone": "837-519-3452", - "email": "morgan@robotemplate.com" - }, - { - "id": 7983, - "guid": "11d479d9-04b5-41a1-80f6-9847393db7ab", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Murphy", - "company": "Techtron", - "phone": "866-400-2817", - "email": "makayla@techtron.com" - }, - { - "id": 7984, - "guid": "67b512f5-ead6-40dc-a050-d0dc89776277", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Osborne", - "company": "InfoAirway", - "phone": "807-566-2852", - "email": "madeline@infoairway.com" - }, - { - "id": 7985, - "guid": "c13f5a59-a84e-4095-b9f0-81dc37fd8ac2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Youmans", - "company": "RoboAerlogix", - "phone": "882-432-2099", - "email": "angelina@roboaerlogix.com" - }, - { - "id": 7986, - "guid": "462ea9e0-1f70-4069-a625-d7c5ea3377d9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mariah Gustman", - "company": "Qualserve", - "phone": "866-497-3960", - "email": "mariah@qualserve.com" - }, - { - "id": 7987, - "guid": "a2d032a9-b7f8-42fd-ab84-7c266f77eab7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Chesterton", - "company": "iMedconik", - "phone": "893-579-3715", - "email": "natalie@imedconik.com" - }, - { - "id": 7988, - "guid": "c65e7dc7-128d-42d7-8e32-1dd6d2553002", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Sherlock", - "company": "Ventanium", - "phone": "880-461-2495", - "email": "gabrielle@ventanium.com" - }, - { - "id": 7989, - "guid": "b345bacb-dc78-4643-835c-e0127e259283", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Hamphrey", - "company": "Superscope", - "phone": "857-427-2617", - "email": "anna@superscope.com" - }, - { - "id": 7990, - "guid": "2ca7fade-bae5-40c1-bfa5-ee150edabd4f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Gardner", - "company": "Entcast", - "phone": "814-586-2229", - "email": "samantha@entcast.com" - }, - { - "id": 7991, - "guid": "36e5b4ae-a5a1-4ae9-abc8-5f42e6f7933f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Gill", - "company": "iSkyvaco", - "phone": "800-441-3600", - "email": "aaliyah@iskyvaco.com" - }, - { - "id": 7992, - "guid": "5cbe12b6-7d2b-4cd2-b350-304e70d4616c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Payton Milton", - "company": "US Omnigraphik", - "phone": "868-470-2319", - "email": "payton@us omnigraphik.com" - }, - { - "id": 7993, - "guid": "44c2bd08-5a78-48c9-90d2-ec09b3d24220", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hannah Morrison", - "company": "Enlogia", - "phone": "853-596-3835", - "email": "hannah@enlogia.com" - }, - { - "id": 7994, - "guid": "b5a9218d-d522-4c18-ba65-c1d08bae3640", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mackenzie Davidson", - "company": "Xeicon", - "phone": "883-539-3647", - "email": "mackenzie@xeicon.com" - }, - { - "id": 7995, - "guid": "94377570-a2a9-44f4-ae1b-fd5cbfe3843d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Young", - "company": "Celgra", - "phone": "822-413-2391", - "email": "lauren@celgra.com" - }, - { - "id": 7996, - "guid": "0f903117-583e-4e57-b6a3-7e4dcf54225d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Amelia Winter", - "company": "Hypervaco", - "phone": "833-453-2544", - "email": "amelia@hypervaco.com" - }, - { - "id": 7997, - "guid": "efe81c70-fc23-4208-847b-ba8baf48ea01", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Savannah Charlson", - "company": "Xeicon", - "phone": "850-519-3146", - "email": "savannah@xeicon.com" - }, - { - "id": 7998, - "guid": "6ae11d28-d3d3-4755-9f7b-6451e90bc8c7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Vanessa Stanley", - "company": "Netseco", - "phone": "860-443-2367", - "email": "vanessa@netseco.com" - }, - { - "id": 7999, - "guid": "7427de9a-26c2-4763-8097-5c52fb6bd220", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Oswald", - "company": "RoboAerlogix", - "phone": "826-492-3045", - "email": "samantha@roboaerlogix.com" - }, - { - "id": 8000, - "guid": "38cd656d-6019-4d55-a071-b36b823c32ee", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Miers", - "company": "Anaframe", - "phone": "862-502-3923", - "email": "savannah@anaframe.com" - }, - { - "id": 8001, - "guid": "8f881e50-47ec-4c81-8c70-4d086c4d12fd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Miller", - "company": "Unconix", - "phone": "887-424-3361", - "email": "allison@unconix.com" - }, - { - "id": 8002, - "guid": "1662fddc-84b5-4b4e-8406-8cabb47f346b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Miln", - "company": "Pacwest", - "phone": "833-550-2271", - "email": "bailey@pacwest.com" - }, - { - "id": 8003, - "guid": "0667efa0-7a1b-437a-bb49-6476921b305a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Daniels", - "company": "Robotemplate", - "phone": "842-594-3970", - "email": "jocelyn@robotemplate.com" - }, - { - "id": 8004, - "guid": "89dbdbf6-ebd8-4b4d-9cab-594adf264ea2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Charlotte Carey", - "company": "Multitiqua", - "phone": "818-593-2767", - "email": "charlotte@multitiqua.com" - }, - { - "id": 8005, - "guid": "6d74f253-c0f0-4396-9b81-6a02503e8e10", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabella Sherlock", - "company": "Compuamerica", - "phone": "837-496-3542", - "email": "isabella@compuamerica.com" - }, - { - "id": 8006, - "guid": "b84f4074-7de9-4594-becc-e46900cf406f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Amelia Hancock", - "company": "Anaframe", - "phone": "801-444-2293", - "email": "amelia@anaframe.com" - }, - { - "id": 8007, - "guid": "ccf7c0ec-0b32-44d0-9131-b47932c50aec", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa White", - "company": "Unologic", - "phone": "813-481-2335", - "email": "alexa@unologic.com" - }, - { - "id": 8008, - "guid": "fdcf4a81-e0b0-46d8-a41d-228ca234d12b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Hancock", - "company": "Netsystems", - "phone": "894-483-2175", - "email": "hannah@netsystems.com" - }, - { - "id": 8009, - "guid": "17fb3320-b5f0-44e0-b75b-8cbc59296704", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maria White", - "company": "Techtron", - "phone": "813-501-2757", - "email": "maria@techtron.com" - }, - { - "id": 8010, - "guid": "b42d8569-1e30-4a3d-9bff-272a88ff04a6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Isabella Brown", - "company": "SysUSA", - "phone": "819-560-2391", - "email": "isabella@sysusa.com" - }, - { - "id": 8011, - "guid": "ac4976c7-bb31-4207-868c-e7c9c21b2a2e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Neal", - "company": "Airdyne", - "phone": "823-437-3129", - "email": "caroline@airdyne.com" - }, - { - "id": 8012, - "guid": "825d6d6e-28d9-4ec9-8a75-d241fedbc4ba", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Morrison", - "company": "Cryptotegrity", - "phone": "876-445-3838", - "email": "lauren@cryptotegrity.com" - }, - { - "id": 8013, - "guid": "b9264989-07f2-459c-8cda-1eea77742696", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Davidson", - "company": "iMedconik", - "phone": "834-425-3657", - "email": "khloe@imedconik.com" - }, - { - "id": 8014, - "guid": "0722e3a1-1b0a-44c8-801e-81406bef84e2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Arianna Fulton", - "company": "Multitiqua", - "phone": "818-422-2056", - "email": "arianna@multitiqua.com" - }, - { - "id": 8015, - "guid": "0fa83630-fea6-4acc-ae9b-538f02465e6d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Gabrielle Goldman", - "company": "Qualserve", - "phone": "806-456-3374", - "email": "gabrielle@qualserve.com" - }, - { - "id": 8016, - "guid": "920c2714-0e11-45bb-8f78-5d3c40bcb058", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Grace Molligan", - "company": "SysUSA", - "phone": "853-528-2724", - "email": "grace@sysusa.com" - }, - { - "id": 8017, - "guid": "b43c6240-f2dc-4680-b9ff-ff5d1a01fbde", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexis Miller", - "company": "RoboAerlogix", - "phone": "885-409-3227", - "email": "alexis@roboaerlogix.com" - }, - { - "id": 8018, - "guid": "9fa6625c-a6c0-44a6-b23f-86ee47f7b72d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Neal", - "company": "eEyetanic", - "phone": "805-504-2379", - "email": "allison@eeyetanic.com" - }, - { - "id": 8019, - "guid": "10292e2b-c3c2-4be7-8480-7882399c8ef9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Crossman", - "company": "Dynarama", - "phone": "873-462-3241", - "email": "morgan@dynarama.com" - }, - { - "id": 8020, - "guid": "5d1378d9-8930-4785-b458-1d00acebd543", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Freeman", - "company": "Conrama", - "phone": "803-460-2885", - "email": "madeline@conrama.com" - }, - { - "id": 8021, - "guid": "cdbb1e86-9fb5-4e47-8913-f873d7198b34", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Bush", - "company": "Westmedia", - "phone": "896-575-2501", - "email": "peyton@westmedia.com" - }, - { - "id": 8022, - "guid": "a8748546-662d-4b4c-82c1-b62988eb1827", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Miln", - "company": "Indisco", - "phone": "820-595-2397", - "email": "katelyn@indisco.com" - }, - { - "id": 8023, - "guid": "af69de02-ab84-4f80-8d48-c51e5ec3aff6", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Wayne", - "company": "Technogra", - "phone": "825-456-3050", - "email": "olivia@technogra.com" - }, - { - "id": 8024, - "guid": "af30d902-32bf-4c7f-a783-e2ece3b5f296", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Webster", - "company": "Mescaridic", - "phone": "831-552-2498", - "email": "zoe@mescaridic.com" - }, - { - "id": 8025, - "guid": "6d217a9f-d203-49b2-9238-704ffcece62d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Hailey", - "company": "Teknoplexon", - "phone": "814-472-2047", - "email": "sophia@teknoplexon.com" - }, - { - "id": 8026, - "guid": "c54702e9-635d-4e30-ad76-c0861b68adaf", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Camila Thornton", - "company": "iSkyvaco", - "phone": "824-484-3316", - "email": "camila@iskyvaco.com" - }, - { - "id": 8027, - "guid": "4e246242-946b-4d78-9c0d-8feaf6b52fe4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Fisher", - "company": "Thermotomic", - "phone": "815-588-2498", - "email": "gianna@thermotomic.com" - }, - { - "id": 8028, - "guid": "73ef0cfe-5e7f-47fc-908f-88d8bbd1ea12", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Higgins", - "company": "Xeicon", - "phone": "862-558-3227", - "email": "bailey@xeicon.com" - }, - { - "id": 8029, - "guid": "a49ece04-d253-491a-abdf-14dc3863a122", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Webster", - "company": "Cryptotegrity", - "phone": "860-420-3914", - "email": "savannah@cryptotegrity.com" - }, - { - "id": 8030, - "guid": "7da3ff1a-3a3a-4904-b0b7-bed927384a69", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mia Smith", - "company": "Fibrotouch", - "phone": "853-452-2511", - "email": "mia@fibrotouch.com" - }, - { - "id": 8031, - "guid": "a4c50e38-6178-4af3-b997-fa9f7fbcf88f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Hoggarth", - "company": "Keytheon", - "phone": "800-541-3283", - "email": "serenity@keytheon.com" - }, - { - "id": 8032, - "guid": "39f8d33c-eccf-4a00-82c5-0ca3ee0bdcc0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Peyton Chapman", - "company": "Orthosoft", - "phone": "811-477-3673", - "email": "peyton@orthosoft.com" - }, - { - "id": 8033, - "guid": "8efbc334-9801-4205-bd02-222563356e1f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Bush", - "company": "Hypervaco", - "phone": "800-506-2219", - "email": "camila@hypervaco.com" - }, - { - "id": 8034, - "guid": "5eae949f-b8c1-41ff-8960-50b4bc422743", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Michaelson", - "company": "Mescaridic", - "phone": "837-430-3870", - "email": "chloe@mescaridic.com" - }, - { - "id": 8035, - "guid": "d6133730-e4a4-4235-8d19-e6783034e138", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jocelyn Ogden", - "company": "Tekcar", - "phone": "806-462-2299", - "email": "jocelyn@tekcar.com" - }, - { - "id": 8036, - "guid": "2ef84047-904d-420e-a1a2-d74412a36849", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Serenity Chandter", - "company": "Venconix", - "phone": "850-543-3740", - "email": "serenity@venconix.com" - }, - { - "id": 8037, - "guid": "d5803df8-83b3-4b7d-9092-6e5207628637", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Katherine Oldridge", - "company": "Multitiqua", - "phone": "851-574-2843", - "email": "katherine@multitiqua.com" - }, - { - "id": 8038, - "guid": "199a4f74-c565-4433-851b-aeaf48660fd9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hailey Cook", - "company": "Steganoconiche", - "phone": "815-422-3809", - "email": "hailey@steganoconiche.com" - }, - { - "id": 8039, - "guid": "46a8025b-4a1e-40a1-b4d3-6bc7e8d73519", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Nevaeh Galbraith", - "company": "Anagraph", - "phone": "857-501-3965", - "email": "nevaeh@anagraph.com" - }, - { - "id": 8040, - "guid": "67ea179b-f834-403c-855f-08cb9df5a3b0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Olivia Thornton", - "company": "Cryptotemplate", - "phone": "863-423-2827", - "email": "olivia@cryptotemplate.com" - }, - { - "id": 8041, - "guid": "b2676b4f-d205-49e5-81e4-b12ebaa41455", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabrielle Crossman", - "company": "InfoAirway", - "phone": "891-548-3068", - "email": "gabrielle@infoairway.com" - }, - { - "id": 8042, - "guid": "581a9805-0a51-4a3d-b006-1fe35a5a3220", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Morrison", - "company": "Jamrola", - "phone": "834-520-2129", - "email": "gabrielle@jamrola.com" - }, - { - "id": 8043, - "guid": "6430500c-c1be-4d99-b917-c55f2fbbf479", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Creighton", - "company": "Nanobanc", - "phone": "825-531-2286", - "email": "madeline@nanobanc.com" - }, - { - "id": 8044, - "guid": "2cfc1153-2ddf-42cd-bc8a-ead85a4d8e3f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Genesis Hailey", - "company": "Thermotomic", - "phone": "825-474-3440", - "email": "genesis@thermotomic.com" - }, - { - "id": 8045, - "guid": "05dccc83-1edd-4802-b6c2-57d2219b199b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Vanessa Wayne", - "company": "Allphysiche", - "phone": "899-465-3644", - "email": "vanessa@allphysiche.com" - }, - { - "id": 8046, - "guid": "e6d5ebca-03a7-4591-a1fe-6cda0f83daf2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Charlotte Cook", - "company": "Syssoft", - "phone": "871-431-2953", - "email": "charlotte@syssoft.com" - }, - { - "id": 8047, - "guid": "1381a9b8-b2db-4ed3-8464-9da0b01333f9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaylee Osborne", - "company": "Robocomm", - "phone": "803-497-3717", - "email": "kaylee@robocomm.com" - }, - { - "id": 8048, - "guid": "3ee7609f-240e-40b3-bf71-9c9c9d4da6bb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Wood", - "company": "Teraserv", - "phone": "816-410-3689", - "email": "sydney@teraserv.com" - }, - { - "id": 8049, - "guid": "d9d5c7c7-f24d-4d16-90cc-d9ad092a5273", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Nevaeh Clapton", - "company": "Conrama", - "phone": "835-593-3113", - "email": "nevaeh@conrama.com" - }, - { - "id": 8050, - "guid": "aff291c9-e4db-495c-9c71-88ebeb66c300", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Miers", - "company": "Vencom", - "phone": "880-410-2463", - "email": "katherine@vencom.com" - }, - { - "id": 8051, - "guid": "bf1816c2-3d72-4708-b24b-a6d5fbf73e51", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Murphy", - "company": "Aprama", - "phone": "855-450-3453", - "email": "vanessa@aprama.com" - }, - { - "id": 8052, - "guid": "8e7cb09e-a08f-4169-9f64-b8667510e318", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Adamson", - "company": "OpKeycomm", - "phone": "839-479-3140", - "email": "abigail@opkeycomm.com" - }, - { - "id": 8053, - "guid": "23d2eef4-55c8-4382-9d6f-59cf7d69891f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Winter", - "company": "iSkyvaco", - "phone": "847-512-2276", - "email": "isabella@iskyvaco.com" - }, - { - "id": 8054, - "guid": "f8485cce-18c1-4951-abe5-f27566f9b5e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Winter", - "company": "Orthomedia", - "phone": "889-440-3747", - "email": "addison@orthomedia.com" - }, - { - "id": 8055, - "guid": "a91eb5fd-debe-4e02-bc0f-f3b4a08cbdc4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Anna Chapman", - "company": "Infragraph", - "phone": "872-533-3468", - "email": "anna@infragraph.com" - }, - { - "id": 8056, - "guid": "3995bdb4-0189-4be4-bcfb-cc3b96a8c59e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Allison Wesley", - "company": "Syssoft", - "phone": "897-548-3562", - "email": "allison@syssoft.com" - }, - { - "id": 8057, - "guid": "43f4505c-051c-4045-b3af-b275a95e0604", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Milton", - "company": "Titanigraf", - "phone": "842-521-3762", - "email": "maria@titanigraf.com" - }, - { - "id": 8058, - "guid": "385da824-6744-4cd5-8572-0fe16d245331", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jasmine Sheldon", - "company": "Conotomics", - "phone": "831-465-2416", - "email": "jasmine@conotomics.com" - }, - { - "id": 8059, - "guid": "5eba0ece-0244-4a19-a1e6-14a45f275b77", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Thomson", - "company": "Mescatron", - "phone": "821-588-2531", - "email": "makayla@mescatron.com" - }, - { - "id": 8060, - "guid": "e5a924db-0b4c-4fe6-843b-3cfeada3573e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kimberly Bush", - "company": "Aluco", - "phone": "892-477-3113", - "email": "kimberly@aluco.com" - }, - { - "id": 8061, - "guid": "4adbcdfa-7dfd-4b41-bb0d-02fe737992ee", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Conors", - "company": "Compuamerica", - "phone": "812-415-3180", - "email": "emma@compuamerica.com" - }, - { - "id": 8062, - "guid": "03e39b65-543e-459c-bb14-15c1baac1da8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Avery Hardman", - "company": "eSteganoergy", - "phone": "840-488-3033", - "email": "avery@esteganoergy.com" - }, - { - "id": 8063, - "guid": "f8db28ca-13f5-491e-aa0a-063f8767e926", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Oswald", - "company": "Compuamerica", - "phone": "864-531-3654", - "email": "audrey@compuamerica.com" - }, - { - "id": 8064, - "guid": "53bee8b6-f7cd-4bfe-9517-7a4df98d1e67", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sydney Abramson", - "company": "Conotomics", - "phone": "899-405-2453", - "email": "sydney@conotomics.com" - }, - { - "id": 8065, - "guid": "7e12da42-c3bd-476f-af5e-020284f0d9d6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Chapman", - "company": "Systheon", - "phone": "800-552-3108", - "email": "hailey@systheon.com" - }, - { - "id": 8066, - "guid": "aa2a6c56-8ff2-474f-88cf-a12b704608e3", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Gate", - "company": "Fibrotopia", - "phone": "813-580-3559", - "email": "aaliyah@fibrotopia.com" - }, - { - "id": 8067, - "guid": "e45867e4-f62f-4866-8f01-a5bbc43bedf2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lillian Clapton", - "company": "Inridium", - "phone": "834-512-3941", - "email": "lillian@inridium.com" - }, - { - "id": 8068, - "guid": "56a58dc4-3b7f-450a-9976-23f4a46a6d2d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Kylie Gilmore", - "company": "Safetrust", - "phone": "851-486-3802", - "email": "kylie@safetrust.com" - }, - { - "id": 8069, - "guid": "1142467b-fbcf-4021-86a2-68d2aededab1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jasmine Chesterton", - "company": "Nanobanc", - "phone": "880-549-2384", - "email": "jasmine@nanobanc.com" - }, - { - "id": 8070, - "guid": "5b1bf81b-c07b-4a55-99ac-884f9b5d42d6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexa Gate", - "company": "Westtomik", - "phone": "884-407-3861", - "email": "alexa@westtomik.com" - }, - { - "id": 8071, - "guid": "7aea7b2b-6cb3-4cf7-9e5b-dd54c862ba01", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooklyn Calhoun", - "company": "eEyetanic", - "phone": "888-411-2379", - "email": "brooklyn@eeyetanic.com" - }, - { - "id": 8072, - "guid": "c99e55e9-714c-4b11-98a8-615792fe262e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Owen", - "company": "Celgra", - "phone": "812-402-2151", - "email": "kimberly@celgra.com" - }, - { - "id": 8073, - "guid": "74d30991-53b8-4cbf-9932-9b8fd9cf9a4a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Fulton", - "company": "Westgate", - "phone": "878-528-2408", - "email": "claire@westgate.com" - }, - { - "id": 8074, - "guid": "4ace3aac-b5e9-4298-8f0b-eb1feb098164", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Peyton Neal", - "company": "eEyetanic", - "phone": "895-599-3446", - "email": "peyton@eeyetanic.com" - }, - { - "id": 8075, - "guid": "87676675-2b64-47fb-ab47-69502dac06f5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lily Carter", - "company": "Fibrotouch", - "phone": "813-494-2390", - "email": "lily@fibrotouch.com" - }, - { - "id": 8076, - "guid": "9c626cbd-fa0c-455d-ae73-b260b23eb16e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Caroline Nash", - "company": "iOptystix", - "phone": "838-577-3454", - "email": "caroline@ioptystix.com" - }, - { - "id": 8077, - "guid": "69ed7833-c729-406f-bd52-fea6f5690d3b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Vance", - "company": "Videobanc", - "phone": "816-581-3983", - "email": "gianna@videobanc.com" - }, - { - "id": 8078, - "guid": "936baafa-3c11-4ab9-96a4-5f9bb6dfc24b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Ward", - "company": "Ventanium", - "phone": "865-451-3203", - "email": "valeria@ventanium.com" - }, - { - "id": 8079, - "guid": "f8c1dd91-c76f-4335-9bf8-bfea01f80ce6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Angelina Wesley", - "company": "Quintegrity", - "phone": "890-504-3884", - "email": "angelina@quintegrity.com" - }, - { - "id": 8080, - "guid": "87954b80-37e3-42e1-8029-3f63b3e2c139", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Anna Hoggarth", - "company": "Dynarama", - "phone": "829-553-2271", - "email": "anna@dynarama.com" - }, - { - "id": 8081, - "guid": "479d822f-0367-4075-b3a8-47a114d4dd85", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Hawkins", - "company": "Proline", - "phone": "833-515-3812", - "email": "alyssa@proline.com" - }, - { - "id": 8082, - "guid": "25964503-cb04-4be0-9503-b2727699acbb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Walkman", - "company": "Conotomics", - "phone": "852-436-3792", - "email": "katelyn@conotomics.com" - }, - { - "id": 8083, - "guid": "b560a379-def4-4ae8-b2d1-542e87d042d0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gabriella Oswald", - "company": "iQualcar", - "phone": "852-450-3447", - "email": "gabriella@iqualcar.com" - }, - { - "id": 8084, - "guid": "c63fca5c-a773-4dad-b049-faec425adddc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Andrea Gate", - "company": "Idmax", - "phone": "805-544-2389", - "email": "andrea@idmax.com" - }, - { - "id": 8085, - "guid": "bc1bb7b5-2d79-498b-82c8-9e421057052c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sarah Thorndike", - "company": "Sontopia", - "phone": "831-419-3947", - "email": "sarah@sontopia.com" - }, - { - "id": 8086, - "guid": "ef126cec-e037-40fd-b9bf-5e1013369cad", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Gilbert", - "company": "Fibrotouch", - "phone": "862-463-3250", - "email": "molly@fibrotouch.com" - }, - { - "id": 8087, - "guid": "03719441-b96b-4120-a403-354a78337b90", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Winter", - "company": "Fibrotopia", - "phone": "891-460-2412", - "email": "layla@fibrotopia.com" - }, - { - "id": 8088, - "guid": "272665cb-96c7-43df-a9b9-d8fb4a0e31da", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Brooklyn Osborne", - "company": "Cryptotegrity", - "phone": "806-472-2366", - "email": "brooklyn@cryptotegrity.com" - }, - { - "id": 8089, - "guid": "f5b4a1cb-fdc4-4ff3-be52-6e4ff7eee78f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Paige Wood", - "company": "Syssoft", - "phone": "817-406-2374", - "email": "paige@syssoft.com" - }, - { - "id": 8090, - "guid": "2d187814-68b3-42af-8a44-9dfc3c667f75", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Audrey Warren", - "company": "Jamconik", - "phone": "840-545-2221", - "email": "audrey@jamconik.com" - }, - { - "id": 8091, - "guid": "355ff6db-dda1-41fb-ab13-9a1ac066ec7d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Oldman", - "company": "Truetomic", - "phone": "858-538-2645", - "email": "serenity@truetomic.com" - }, - { - "id": 8092, - "guid": "f9dee953-bcf7-4c52-9d75-4fb36e4a56d2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Hoggarth", - "company": "Quintegrity", - "phone": "895-497-3079", - "email": "riley@quintegrity.com" - }, - { - "id": 8093, - "guid": "469798da-22ee-42c4-96ea-e9b98ac98f87", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Nelson", - "company": "Orthosoft", - "phone": "851-509-2033", - "email": "layla@orthosoft.com" - }, - { - "id": 8094, - "guid": "8b347c31-3506-4b80-bd71-0d4b5d419023", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Camila Gilmore", - "company": "Netsystems", - "phone": "813-537-2575", - "email": "camila@netsystems.com" - }, - { - "id": 8095, - "guid": "8a477c28-f24f-4d5f-9627-2457974f4848", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Warren", - "company": "Keytheon", - "phone": "896-575-2567", - "email": "victoria@keytheon.com" - }, - { - "id": 8096, - "guid": "e86ede52-5f00-46e2-a71d-1609e0adfa30", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Abigail Owen", - "company": "Robotemplate", - "phone": "837-591-2813", - "email": "abigail@robotemplate.com" - }, - { - "id": 8097, - "guid": "66ec5f5c-e07c-4749-9a1c-1687b5276cd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Otis", - "company": "Allnet", - "phone": "882-571-3199", - "email": "emma@allnet.com" - }, - { - "id": 8098, - "guid": "7b93a1b6-bee6-4df0-8b0d-a5df4a05fd6a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Vance", - "company": "Ameritron", - "phone": "882-463-3665", - "email": "alexandra@ameritron.com" - }, - { - "id": 8099, - "guid": "6ba8aacf-db1d-447e-9dd4-6a41a57b8469", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Oldman", - "company": "Dynarama", - "phone": "892-490-3193", - "email": "emma@dynarama.com" - }, - { - "id": 8100, - "guid": "28681f33-f2bc-41c1-935f-f46e53ea2b58", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Carroll", - "company": "Unconix", - "phone": "889-415-3375", - "email": "lillian@unconix.com" - }, - { - "id": 8101, - "guid": "1ccfc931-aabd-453c-bc8d-b99d6587267a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Ogden", - "company": "Syssoft", - "phone": "825-427-2927", - "email": "grace@syssoft.com" - }, - { - "id": 8102, - "guid": "fb23bb26-6a8c-4351-9afd-87e7e0ce787f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Neal", - "company": "Idmax", - "phone": "820-576-2481", - "email": "natalie@idmax.com" - }, - { - "id": 8103, - "guid": "34cc0905-8fb0-446e-845d-4eea0d5bd0fe", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Audrey Ogden", - "company": "Teratopia", - "phone": "866-465-2259", - "email": "audrey@teratopia.com" - }, - { - "id": 8104, - "guid": "128bb517-416e-4068-aef5-87dd43c1cca7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sofia Osborne", - "company": "Multitiqua", - "phone": "825-419-2583", - "email": "sofia@multitiqua.com" - }, - { - "id": 8105, - "guid": "93221e9c-b86d-4cf4-8f34-07d8f2e73380", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ashley Michaelson", - "company": "SysVenamerica", - "phone": "830-476-3219", - "email": "ashley@sysvenamerica.com" - }, - { - "id": 8106, - "guid": "79d6ac36-fbf1-4ede-9b43-d0f8347138cb", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Avery Nathan", - "company": "Fibrotopia", - "phone": "828-571-3764", - "email": "avery@fibrotopia.com" - }, - { - "id": 8107, - "guid": "a3d6f939-7ccb-49c6-9e0b-989c59b4d93d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mya Campbell", - "company": "Technogra", - "phone": "857-491-3850", - "email": "mya@technogra.com" - }, - { - "id": 8108, - "guid": "27c8a0ca-9d30-41fc-9ebc-37a39309846b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Wesley", - "company": "iSkyvaco", - "phone": "890-409-3580", - "email": "elizabeth@iskyvaco.com" - }, - { - "id": 8109, - "guid": "f13e8637-4c4a-421b-841a-7a63c47d94ca", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Oswald", - "company": "Compuamerica", - "phone": "852-502-3350", - "email": "bailey@compuamerica.com" - }, - { - "id": 8110, - "guid": "0e8ec181-c0e8-4a3c-9a06-5f5864a02caf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Gerald", - "company": "iEnland", - "phone": "859-441-3125", - "email": "melanie@ienland.com" - }, - { - "id": 8111, - "guid": "1346d4de-5ca1-4458-ae20-6bda3f0f09fb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Anna Chesterton", - "company": "Thermotomic", - "phone": "885-437-3415", - "email": "anna@thermotomic.com" - }, - { - "id": 8112, - "guid": "52216d56-c8ab-42f6-ab31-16d5b5d33450", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny Smith", - "company": "Thermotomic", - "phone": "898-402-2276", - "email": "destiny@thermotomic.com" - }, - { - "id": 8113, - "guid": "08b848c4-3961-4a6d-b67e-2f5948403d3a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Maria Hawkins", - "company": "Infraique", - "phone": "850-568-2671", - "email": "maria@infraique.com" - }, - { - "id": 8114, - "guid": "2cdbba1a-e4b7-4d96-91f2-c37da59ea93a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Higgins", - "company": "Orthomedia", - "phone": "859-525-2365", - "email": "katherine@orthomedia.com" - }, - { - "id": 8115, - "guid": "2343fb7b-12f6-4aea-8ed5-5b753df0cb9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Cramer", - "company": "Teratopia", - "phone": "870-405-3117", - "email": "ava@teratopia.com" - }, - { - "id": 8116, - "guid": "2fd1d683-ac54-4bac-b407-d02f46cebe87", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Croftoon", - "company": "InfoAirway", - "phone": "862-598-2507", - "email": "mia@infoairway.com" - }, - { - "id": 8117, - "guid": "daea86ce-7195-4352-aaa1-ee502af071d1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Vance", - "company": "Teknoplexon", - "phone": "873-514-2033", - "email": "arianna@teknoplexon.com" - }, - { - "id": 8118, - "guid": "0c409d00-d2ea-4f69-aead-1eb18d257e15", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Gilson", - "company": "Cryptotemplate", - "phone": "825-444-2416", - "email": "grace@cryptotemplate.com" - }, - { - "id": 8119, - "guid": "bbbf90fc-f99a-4606-9ff0-83244d95caaf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Brown", - "company": "Celgra", - "phone": "815-580-2780", - "email": "lauren@celgra.com" - }, - { - "id": 8120, - "guid": "82579d69-a673-4388-bd8b-cc8cda286eda", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Paige Morrison", - "company": "Robotemplate", - "phone": "836-429-3581", - "email": "paige@robotemplate.com" - }, - { - "id": 8121, - "guid": "be6a43ca-c8cc-4ea9-8631-4290dc655bfe", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaylee Wallace", - "company": "Thermotomic", - "phone": "882-451-3216", - "email": "kaylee@thermotomic.com" - }, - { - "id": 8122, - "guid": "c0d85695-3577-4809-8ba7-ccda9636ea2c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Goodman", - "company": "InfoAirway", - "phone": "879-573-2119", - "email": "brianna@infoairway.com" - }, - { - "id": 8123, - "guid": "2f8d91b8-545b-4353-864e-29852cb21349", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Bush", - "company": "Westtomik", - "phone": "852-527-3084", - "email": "bella@westtomik.com" - }, - { - "id": 8124, - "guid": "9bf76114-d797-4e95-868b-13c715338be8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Day", - "company": "Infragraph", - "phone": "849-514-3824", - "email": "genesis@infragraph.com" - }, - { - "id": 8125, - "guid": "f11f7fc7-1ea8-4c36-9115-f126d9755cd4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Autumn Youmans", - "company": "Teratopia", - "phone": "821-481-2061", - "email": "autumn@teratopia.com" - }, - { - "id": 8126, - "guid": "df436ab8-b9de-47a6-a419-fe322f2359b1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Ward", - "company": "iEnland", - "phone": "866-595-3641", - "email": "autumn@ienland.com" - }, - { - "id": 8127, - "guid": "38bb448e-34c7-4559-8c99-62d7b4265a8a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Wood", - "company": "InfoAirway", - "phone": "825-448-3611", - "email": "sophie@infoairway.com" - }, - { - "id": 8128, - "guid": "4380eddd-6a4c-42bb-8d1f-7e21f5c7ed07", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Brown", - "company": "Pacwest", - "phone": "840-478-2602", - "email": "hailey@pacwest.com" - }, - { - "id": 8129, - "guid": "9a0b5c3d-e952-44e8-bf8b-c802e1552712", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabrielle Davidson", - "company": "Thermotomic", - "phone": "803-485-2052", - "email": "gabrielle@thermotomic.com" - }, - { - "id": 8130, - "guid": "95dfcb92-7d7b-4d15-8631-f0b2bc5b26fc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Grace Wallace", - "company": "US Omnigraphik", - "phone": "800-478-3031", - "email": "grace@us omnigraphik.com" - }, - { - "id": 8131, - "guid": "75d4f931-1be7-4ef6-87bf-ba301917c1a5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Nash", - "company": "Pericenta", - "phone": "864-497-3621", - "email": "faith@pericenta.com" - }, - { - "id": 8132, - "guid": "1b7f68d7-7d08-411c-97eb-ee5e709fe1ba", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Leah Clapton", - "company": "Aluco", - "phone": "849-479-2431", - "email": "leah@aluco.com" - }, - { - "id": 8133, - "guid": "fee867e7-456a-42f4-966d-687f1fd07662", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emily Timmons", - "company": "Navivacs", - "phone": "835-412-2200", - "email": "emily@navivacs.com" - }, - { - "id": 8134, - "guid": "1f1aaf78-33e3-4d80-a3f5-63eed21ccdab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Amelia Gustman", - "company": "Airdyne", - "phone": "879-406-3859", - "email": "amelia@airdyne.com" - }, - { - "id": 8135, - "guid": "c8234010-64d7-45e6-a974-e08b5ced1367", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Olivia Oldman", - "company": "Interliant", - "phone": "816-556-2032", - "email": "olivia@interliant.com" - }, - { - "id": 8136, - "guid": "06d79441-e601-4aae-a8e4-78e6b548866d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Nash", - "company": "Unconix", - "phone": "876-544-3164", - "email": "mya@unconix.com" - }, - { - "id": 8137, - "guid": "db9554fa-8a8f-472a-bf51-d6e4790d23ab", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Sherlock", - "company": "Sontopia", - "phone": "852-522-3315", - "email": "kylie@sontopia.com" - }, - { - "id": 8138, - "guid": "f066184c-5c66-4f9c-b2dd-4b272d60fe51", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Turner", - "company": "Allnet", - "phone": "874-543-3810", - "email": "aubrey@allnet.com" - }, - { - "id": 8139, - "guid": "a8c6dd1b-6ae5-4433-8138-d833c6926932", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Croftoon", - "company": "Celgra", - "phone": "877-494-3990", - "email": "anna@celgra.com" - }, - { - "id": 8140, - "guid": "3e43751d-94a7-4593-a13e-e33232313743", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mya Sheldon", - "company": "Robotemplate", - "phone": "826-591-3112", - "email": "mya@robotemplate.com" - }, - { - "id": 8141, - "guid": "c711b00b-093c-49bf-bd19-2397d0a12c76", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella Carey", - "company": "Jamrola", - "phone": "877-548-2090", - "email": "bella@jamrola.com" - }, - { - "id": 8142, - "guid": "de582b69-755b-4e50-842f-b4ece91c1923", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aaliyah Youmans", - "company": "Anagraph", - "phone": "885-566-3293", - "email": "aaliyah@anagraph.com" - }, - { - "id": 8143, - "guid": "74cd5d46-99a8-4617-a9f7-3c9d7d047061", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Winter", - "company": "Superscope", - "phone": "868-579-3488", - "email": "claire@superscope.com" - }, - { - "id": 8144, - "guid": "279d15fa-af64-40bb-8dbe-523c26689dd8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kaitlyn Osborne", - "company": "Xeicon", - "phone": "896-537-3810", - "email": "kaitlyn@xeicon.com" - }, - { - "id": 8145, - "guid": "75df740c-f033-4410-b553-2f1087090b39", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Melanie Davidson", - "company": "Celgra", - "phone": "825-562-2815", - "email": "melanie@celgra.com" - }, - { - "id": 8146, - "guid": "cd2df65b-963f-4903-a9fd-fede2eb26f0e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Oliver", - "company": "iOptystix", - "phone": "816-594-3388", - "email": "katherine@ioptystix.com" - }, - { - "id": 8147, - "guid": "4ded8597-ab59-4e45-b2db-12ba5c3b05e7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Hodges", - "company": "Inridium", - "phone": "840-506-3721", - "email": "taylor@inridium.com" - }, - { - "id": 8148, - "guid": "c9a7e56a-7e40-4dd4-856e-a3b9ca220b17", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Bush", - "company": "iSkyvaco", - "phone": "843-599-2133", - "email": "madison@iskyvaco.com" - }, - { - "id": 8149, - "guid": "951f9887-db00-4866-a6a4-69274bedd4bd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Valeria Morrison", - "company": "Superscope", - "phone": "866-423-3155", - "email": "valeria@superscope.com" - }, - { - "id": 8150, - "guid": "26f3900b-891a-4fcf-866e-9e764c07ded5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Nelson", - "company": "Syssoft", - "phone": "861-547-2363", - "email": "bella@syssoft.com" - }, - { - "id": 8151, - "guid": "b656e9a6-96cd-4056-ae8a-8dc23ce8b95e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Young", - "company": "Idmax", - "phone": "868-501-3219", - "email": "aaliyah@idmax.com" - }, - { - "id": 8152, - "guid": "9ce466b6-ee94-470a-99cd-aae0dce1e59f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Michaelson", - "company": "SysUSA", - "phone": "852-550-2611", - "email": "abigail@sysusa.com" - }, - { - "id": 8153, - "guid": "f3e5682e-04c5-430e-b931-17183817cc71", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Claire Thorndike", - "company": "Netseco", - "phone": "813-547-2120", - "email": "claire@netseco.com" - }, - { - "id": 8154, - "guid": "d0150734-ec15-4ab8-a8a1-a85269e8a42c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Hamphrey", - "company": "Infraique", - "phone": "802-421-2166", - "email": "sofia@infraique.com" - }, - { - "id": 8155, - "guid": "153186c7-1787-4e70-8d49-4cadb4637819", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Khloe Goodman", - "company": "Qualserve", - "phone": "854-429-3044", - "email": "khloe@qualserve.com" - }, - { - "id": 8156, - "guid": "44511cd9-db1a-44d8-a198-b44854a05020", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Hardman", - "company": "Vencom", - "phone": "857-538-3624", - "email": "emma@vencom.com" - }, - { - "id": 8157, - "guid": "13db1bf4-4b0a-4a65-a3fd-3b552b34fcb4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Chandter", - "company": "Allnet", - "phone": "849-484-2601", - "email": "alexis@allnet.com" - }, - { - "id": 8158, - "guid": "a7832e72-3378-4c86-8be8-f090fc2664f7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Michaelson", - "company": "Vencom", - "phone": "892-480-2984", - "email": "valeria@vencom.com" - }, - { - "id": 8159, - "guid": "94cb5ca5-eea1-4552-aee8-58dcd1e6259b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Hailey", - "company": "Airdyne", - "phone": "826-542-2626", - "email": "peyton@airdyne.com" - }, - { - "id": 8160, - "guid": "aa55cdb4-dcb5-43b8-bb90-0da6d6f77c80", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Wesley", - "company": "Proline", - "phone": "830-501-2560", - "email": "mia@proline.com" - }, - { - "id": 8161, - "guid": "c64fc3d3-b4c6-4206-8360-766b73208a3d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabrielle Miller", - "company": "Infragraph", - "phone": "817-580-2689", - "email": "gabrielle@infragraph.com" - }, - { - "id": 8162, - "guid": "ae69a487-dd97-4fbf-b819-6b0e0b9dae52", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Carter", - "company": "iSkyvaco", - "phone": "802-449-3719", - "email": "gabrielle@iskyvaco.com" - }, - { - "id": 8163, - "guid": "3c99087c-21b9-449c-a3c7-01c78cbf60b8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Evelyn Charlson", - "company": "Aluco", - "phone": "875-588-2959", - "email": "evelyn@aluco.com" - }, - { - "id": 8164, - "guid": "cee5628a-7f0f-49a7-ae6d-ec41e9f4cbe8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Olivia Gustman", - "company": "Cryptotegrity", - "phone": "874-552-2716", - "email": "olivia@cryptotegrity.com" - }, - { - "id": 8165, - "guid": "82519c6e-d2cc-456a-9286-26f442f24346", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Sheldon", - "company": "Fibroserve", - "phone": "853-460-2950", - "email": "lily@fibroserve.com" - }, - { - "id": 8166, - "guid": "24105968-fe43-40f8-b073-59a4099a0974", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Young", - "company": "Fibrotouch", - "phone": "892-502-3449", - "email": "katherine@fibrotouch.com" - }, - { - "id": 8167, - "guid": "2d686b07-16ca-4253-a7d8-f2753764503b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Angelina Thornton", - "company": "Titanigraf", - "phone": "863-443-3940", - "email": "angelina@titanigraf.com" - }, - { - "id": 8168, - "guid": "b46d9b07-3339-4dd0-aa57-9bbe82c6f2a8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sydney Gilson", - "company": "Robocomm", - "phone": "862-487-2305", - "email": "sydney@robocomm.com" - }, - { - "id": 8169, - "guid": "39a66434-5b08-435e-ac6a-bb428d9e9891", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Taylor Cook", - "company": "eSteganoergy", - "phone": "879-450-2068", - "email": "taylor@esteganoergy.com" - }, - { - "id": 8170, - "guid": "93be2a42-92cb-4cad-bb6c-1774851a7cee", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Miller", - "company": "Robocomm", - "phone": "840-472-3973", - "email": "destiny@robocomm.com" - }, - { - "id": 8171, - "guid": "525b11f8-7d44-4018-828b-5a1d75a59723", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Murphy", - "company": "Nanobanc", - "phone": "878-457-2149", - "email": "aaliyah@nanobanc.com" - }, - { - "id": 8172, - "guid": "9e015b82-5f62-478a-a960-d8d0fdef1453", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Angelina Oldridge", - "company": "Venconix", - "phone": "880-445-3809", - "email": "angelina@venconix.com" - }, - { - "id": 8173, - "guid": "4f8065a9-0c4e-4b41-87dd-94c3268132ed", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Chapman", - "company": "Superscope", - "phone": "818-443-3146", - "email": "zoe@superscope.com" - }, - { - "id": 8174, - "guid": "7873d25b-3f00-488e-a1a2-2fdd20767f5c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabriella Carrington", - "company": "Thermotomic", - "phone": "879-460-3316", - "email": "gabriella@thermotomic.com" - }, - { - "id": 8175, - "guid": "81ad4f14-ec89-4c32-bd79-176a56d5040f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Layla Wesley", - "company": "Westmedia", - "phone": "841-498-3649", - "email": "layla@westmedia.com" - }, - { - "id": 8176, - "guid": "abead14a-3cde-489d-b4df-08fb081ba4e7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gianna Fulton", - "company": "Infraique", - "phone": "819-493-2415", - "email": "gianna@infraique.com" - }, - { - "id": 8177, - "guid": "3552ce13-be6e-41cd-8cbf-44c0cbe4cc34", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Nelson", - "company": "OpKeycomm", - "phone": "833-480-3624", - "email": "emma@opkeycomm.com" - }, - { - "id": 8178, - "guid": "e84cd07f-42cc-4c17-835b-2dde7690bd84", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah WifKinson", - "company": "Enlogia", - "phone": "803-581-3978", - "email": "aaliyah@enlogia.com" - }, - { - "id": 8179, - "guid": "130e458d-7c91-45fa-8520-c821a4a2206e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly WifKinson", - "company": "Textiqua", - "phone": "838-600-3671", - "email": "kimberly@textiqua.com" - }, - { - "id": 8180, - "guid": "d192c515-5715-46b1-b9ed-34838c698bc7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooklyn Molligan", - "company": "Infragraph", - "phone": "827-579-3044", - "email": "brooklyn@infragraph.com" - }, - { - "id": 8181, - "guid": "a1cecb9d-3d8b-4f9e-835a-dec1bf99e9ed", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Wallace", - "company": "Robotemplate", - "phone": "887-547-3428", - "email": "maya@robotemplate.com" - }, - { - "id": 8182, - "guid": "34d8e311-d2dd-40b1-afe2-d843067a7abf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Eva Harrison", - "company": "Steganoconiche", - "phone": "803-588-3218", - "email": "eva@steganoconiche.com" - }, - { - "id": 8183, - "guid": "41dec8ea-fae1-475d-95c2-6eb66550f8a9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emma Smith", - "company": "Titanirola", - "phone": "813-430-2504", - "email": "emma@titanirola.com" - }, - { - "id": 8184, - "guid": "a292a499-92ff-46b0-b812-3de6f10ad801", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Hoggarth", - "company": "Titanirola", - "phone": "872-455-3542", - "email": "gianna@titanirola.com" - }, - { - "id": 8185, - "guid": "ccff9319-9728-4421-afed-63b61f866159", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Conors", - "company": "Truetomic", - "phone": "806-460-2136", - "email": "addison@truetomic.com" - }, - { - "id": 8186, - "guid": "da1bc43b-4f51-4dcf-8dbe-c1c1661064b9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia Harrison", - "company": "Tekcar", - "phone": "896-471-3375", - "email": "mia@tekcar.com" - }, - { - "id": 8187, - "guid": "4a027c77-82e2-4bb4-b503-6e00b536931e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ashley Hodges", - "company": "Conotomics", - "phone": "823-537-3319", - "email": "ashley@conotomics.com" - }, - { - "id": 8188, - "guid": "1a90d87c-29fd-4269-938d-38b7334bd0e2", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Gustman", - "company": "Syssoft", - "phone": "899-424-2507", - "email": "hannah@syssoft.com" - }, - { - "id": 8189, - "guid": "6c9d722c-ec08-4513-8bb1-7056cf46ce55", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Oliver", - "company": "SysUSA", - "phone": "856-507-3773", - "email": "taylor@sysusa.com" - }, - { - "id": 8190, - "guid": "269d196a-fb71-44d4-b73b-fd5ed1a6d1a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Hoggarth", - "company": "Quintegrity", - "phone": "821-442-3799", - "email": "destiny@quintegrity.com" - }, - { - "id": 8191, - "guid": "c2ab1c0e-bea2-447d-a911-5ef2f0a58f69", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brianna Hodges", - "company": "Pacwest", - "phone": "816-531-3595", - "email": "brianna@pacwest.com" - }, - { - "id": 8192, - "guid": "3eb7eec9-acb1-4cc4-a2cc-df95aedef816", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Oliver", - "company": "Infraique", - "phone": "835-583-3233", - "email": "taylor@infraique.com" - }, - { - "id": 8193, - "guid": "9f9a584e-b3d8-4c3f-a302-7124fa893389", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Abigail Turner", - "company": "Vencom", - "phone": "870-555-2755", - "email": "abigail@vencom.com" - }, - { - "id": 8194, - "guid": "d3a0ac7f-8800-471d-a9e4-e76499a02260", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Gardner", - "company": "Enlogia", - "phone": "813-529-2815", - "email": "kylie@enlogia.com" - }, - { - "id": 8195, - "guid": "27a1721c-77c8-4f10-aa2f-4fcae1d6f07d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mariah Vaughan", - "company": "Systheon", - "phone": "823-510-3424", - "email": "mariah@systheon.com" - }, - { - "id": 8196, - "guid": "7c149b97-187f-4947-a8fd-46db54ffc292", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Day", - "company": "Robocomm", - "phone": "864-513-2391", - "email": "payton@robocomm.com" - }, - { - "id": 8197, - "guid": "2dc33af0-db9d-4796-a3ee-140fd9ed322f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Taylor Winter", - "company": "OpKeycomm", - "phone": "805-447-2067", - "email": "taylor@opkeycomm.com" - }, - { - "id": 8198, - "guid": "1ad7e690-e982-4c37-8cc6-e82254f710c7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Serenity Gate", - "company": "Safetrust", - "phone": "823-446-3252", - "email": "serenity@safetrust.com" - }, - { - "id": 8199, - "guid": "5b7233f0-b7bd-4248-be03-e1f77b18946e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Goldman", - "company": "Steganoconiche", - "phone": "860-480-3578", - "email": "sophie@steganoconiche.com" - }, - { - "id": 8200, - "guid": "1ee30b48-6535-481c-beeb-14211e2c2618", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Carter", - "company": "Transtouch", - "phone": "886-577-3353", - "email": "gabriella@transtouch.com" - }, - { - "id": 8201, - "guid": "dc493559-8812-4a96-8206-867d178cf362", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Serenity Hodges", - "company": "Pericenta", - "phone": "827-504-2547", - "email": "serenity@pericenta.com" - }, - { - "id": 8202, - "guid": "8949d9c3-ed8c-4dc1-ad86-ea8876984249", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Morgan Smith", - "company": "OpKeycomm", - "phone": "808-475-3391", - "email": "morgan@opkeycomm.com" - }, - { - "id": 8203, - "guid": "1d0a8391-49a1-4860-a788-cb382cdfc7fd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Michaelson", - "company": "Anaframe", - "phone": "841-561-3798", - "email": "olivia@anaframe.com" - }, - { - "id": 8204, - "guid": "adf4b710-eb9e-4c6b-b9cd-cbf25b4a0f61", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Gate", - "company": "Venconix", - "phone": "823-517-3675", - "email": "molly@venconix.com" - }, - { - "id": 8205, - "guid": "1db44870-192a-4998-a796-97de5fa19321", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Elizabeth Winter", - "company": "Compuamerica", - "phone": "857-504-2641", - "email": "elizabeth@compuamerica.com" - }, - { - "id": 8206, - "guid": "fd2763de-f4d5-4ea2-babe-df6c79cde289", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Sherlock", - "company": "Rapigrafix", - "phone": "837-510-2735", - "email": "molly@rapigrafix.com" - }, - { - "id": 8207, - "guid": "5e43b27c-9e75-4956-af1e-8c09b4c08483", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Milton", - "company": "Thermotomic", - "phone": "810-459-2803", - "email": "isabella@thermotomic.com" - }, - { - "id": 8208, - "guid": "58005f49-7858-4ee6-b396-3d2b1a361821", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Hamphrey", - "company": "Textiqua", - "phone": "893-559-2378", - "email": "emma@textiqua.com" - }, - { - "id": 8209, - "guid": "74519a9c-0e30-477c-8c40-ddb99b97dc63", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Charlson", - "company": "Westtomik", - "phone": "880-480-3018", - "email": "peyton@westtomik.com" - }, - { - "id": 8210, - "guid": "603bbf8a-12de-4797-acd9-9765b607c320", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Wayne", - "company": "Videobanc", - "phone": "821-522-2388", - "email": "alexa@videobanc.com" - }, - { - "id": 8211, - "guid": "329bda42-8bcb-47b6-bce0-cb2ee1d95ac3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Clapton", - "company": "Allnet", - "phone": "859-404-2663", - "email": "mya@allnet.com" - }, - { - "id": 8212, - "guid": "c76a6e87-b83c-4131-b398-36a6e1cb4a12", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Croftoon", - "company": "Robotomic", - "phone": "838-509-2014", - "email": "brooklyn@robotomic.com" - }, - { - "id": 8213, - "guid": "97249e3f-dc86-4c62-ad01-c450b41e3f77", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Smith", - "company": "Titanigraf", - "phone": "845-518-2643", - "email": "taylor@titanigraf.com" - }, - { - "id": 8214, - "guid": "f618357a-3fd2-4fab-b842-96a3a8dfaabf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Melanie Ward", - "company": "Jamrola", - "phone": "873-512-3682", - "email": "melanie@jamrola.com" - }, - { - "id": 8215, - "guid": "4085b82a-c863-4c16-a38e-9b1264ad6d9f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Thorndike", - "company": "Allphysiche", - "phone": "846-518-2200", - "email": "lauren@allphysiche.com" - }, - { - "id": 8216, - "guid": "65c027f2-154e-4b0a-8afc-7c4079ec1c78", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Turner", - "company": "Vencom", - "phone": "898-447-3644", - "email": "chloe@vencom.com" - }, - { - "id": 8217, - "guid": "1970483a-dcfd-45c5-8ddb-f39cb1f6f756", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Camila Wallace", - "company": "Fibroserve", - "phone": "888-420-3991", - "email": "camila@fibroserve.com" - }, - { - "id": 8218, - "guid": "0b447ea3-b628-447b-8427-37df7e8bd1b3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Genesis Gardner", - "company": "Interliant", - "phone": "886-568-3752", - "email": "genesis@interliant.com" - }, - { - "id": 8219, - "guid": "10d24d92-ed3b-4019-919f-a5b49468f911", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Riley Gilbert", - "company": "Conotomics", - "phone": "813-551-3137", - "email": "riley@conotomics.com" - }, - { - "id": 8220, - "guid": "09c0ccf7-704f-4c60-9483-33605f47c1e7", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lauren Brooks", - "company": "Airdyne", - "phone": "893-478-3494", - "email": "lauren@airdyne.com" - }, - { - "id": 8221, - "guid": "97dd10ee-f5cb-4d12-b5be-f530b43d643c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Gill", - "company": "Dynarama", - "phone": "851-552-3485", - "email": "maya@dynarama.com" - }, - { - "id": 8222, - "guid": "40f1f769-bb96-4179-b7c7-1cc46492f10f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Waller", - "company": "Robotomic", - "phone": "893-405-2960", - "email": "sophia@robotomic.com" - }, - { - "id": 8223, - "guid": "971db92b-d8e9-486a-badf-065f769f04b2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mya Miller", - "company": "Safetrust", - "phone": "892-537-2190", - "email": "mya@safetrust.com" - }, - { - "id": 8224, - "guid": "5ee1c361-7c77-450f-9610-86bd188dc39b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Stanley", - "company": "Mescaridic", - "phone": "870-561-3803", - "email": "riley@mescaridic.com" - }, - { - "id": 8225, - "guid": "32e4a4a5-5ed7-455e-bc32-24876ff16af0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Chesterton", - "company": "Thermotomic", - "phone": "839-589-2256", - "email": "sophie@thermotomic.com" - }, - { - "id": 8226, - "guid": "1410cb1b-cbb7-431d-a881-964e71240584", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bella Freeman", - "company": "Jamrola", - "phone": "822-595-2760", - "email": "bella@jamrola.com" - }, - { - "id": 8227, - "guid": "58c611d6-f9db-4ae4-9db8-7e27e94573d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Warren", - "company": "Skydata", - "phone": "859-487-2064", - "email": "mariah@skydata.com" - }, - { - "id": 8228, - "guid": "304e29dc-a5d2-484f-96b1-4170d2e9e0fe", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Brickman", - "company": "Navivacs", - "phone": "856-583-2610", - "email": "victoria@navivacs.com" - }, - { - "id": 8229, - "guid": "61c6e659-9086-4591-9d84-0c498f449670", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Cramer", - "company": "Qualserve", - "phone": "858-598-3266", - "email": "trinity@qualserve.com" - }, - { - "id": 8230, - "guid": "d5308ea3-3872-492f-8c0e-7f5a8d390ff4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Victoria Nelson", - "company": "Fibrotopia", - "phone": "878-447-3961", - "email": "victoria@fibrotopia.com" - }, - { - "id": 8231, - "guid": "a7670f97-44d7-49da-afe0-18f051bed6f5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Otis", - "company": "eSteganoergy", - "phone": "852-406-2126", - "email": "sophia@esteganoergy.com" - }, - { - "id": 8232, - "guid": "87a4540e-3174-49a4-95f5-31a71b712b22", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lauren Carter", - "company": "iSkyvaco", - "phone": "885-570-3380", - "email": "lauren@iskyvaco.com" - }, - { - "id": 8233, - "guid": "91224df4-023e-4cef-b94e-1935b6f8ec96", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Morgan Haig", - "company": "Thermotomic", - "phone": "860-516-2690", - "email": "morgan@thermotomic.com" - }, - { - "id": 8234, - "guid": "c091f652-8a75-4cfb-9943-23e9c947b5d1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Mercer", - "company": "Proline", - "phone": "896-592-2466", - "email": "mia@proline.com" - }, - { - "id": 8235, - "guid": "92a5aaba-69cc-435f-9a08-235768273607", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Camila WifKinson", - "company": "US Omnigraphik", - "phone": "887-405-2235", - "email": "camila@us omnigraphik.com" - }, - { - "id": 8236, - "guid": "97a4f630-7a05-4453-adec-29c94de488e9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Fisher", - "company": "Polytheon", - "phone": "834-508-2048", - "email": "hannah@polytheon.com" - }, - { - "id": 8237, - "guid": "946d0345-4b7f-45b5-83d0-d77bc223359e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lily Higgins", - "company": "Ventanium", - "phone": "813-590-2101", - "email": "lily@ventanium.com" - }, - { - "id": 8238, - "guid": "8ea71cdc-103d-430a-b21f-366fe051eea7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Fisher", - "company": "Tekcar", - "phone": "809-541-3811", - "email": "caroline@tekcar.com" - }, - { - "id": 8239, - "guid": "5223e194-39b6-417e-b82b-d699ce3beb7c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Crossman", - "company": "Orthomedia", - "phone": "834-544-2950", - "email": "makayla@orthomedia.com" - }, - { - "id": 8240, - "guid": "2a9b87fc-5c8f-406a-a8e5-e4e6513987ce", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Molligan", - "company": "Airdyne", - "phone": "820-410-3709", - "email": "audrey@airdyne.com" - }, - { - "id": 8241, - "guid": "cf5715cc-89eb-4943-b426-6b7f2f23b5f7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Avery Nash", - "company": "Conrama", - "phone": "836-567-2808", - "email": "avery@conrama.com" - }, - { - "id": 8242, - "guid": "d64ad197-03e4-4157-994c-eb595e67df67", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Avery Goldman", - "company": "Steganoconiche", - "phone": "835-591-2419", - "email": "avery@steganoconiche.com" - }, - { - "id": 8243, - "guid": "c1a867a1-493f-49dc-9ed8-f78fe97380a0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Gate", - "company": "Syssoft", - "phone": "876-434-3382", - "email": "caroline@syssoft.com" - }, - { - "id": 8244, - "guid": "4590ee1e-179d-429d-8275-4f800e0e6a00", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Elizabeth Milton", - "company": "Safetrust", - "phone": "855-516-2403", - "email": "elizabeth@safetrust.com" - }, - { - "id": 8245, - "guid": "c92f9004-91d9-4d22-ae1e-3695b38e85a0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Layla Owen", - "company": "Pericenta", - "phone": "838-474-2655", - "email": "layla@pericenta.com" - }, - { - "id": 8246, - "guid": "b7d563bc-a667-4ca1-b224-06260fec3e86", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sydney Charlson", - "company": "iEnland", - "phone": "849-488-2662", - "email": "sydney@ienland.com" - }, - { - "id": 8247, - "guid": "d8efb23d-6f44-4188-8e83-82f866ad3283", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabrielle Vance", - "company": "Gigaura", - "phone": "803-447-3980", - "email": "gabrielle@gigaura.com" - }, - { - "id": 8248, - "guid": "cfdcb18c-1287-4b23-b1d1-8be06cd07d68", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mackenzie Oliver", - "company": "Conrama", - "phone": "830-483-3137", - "email": "mackenzie@conrama.com" - }, - { - "id": 8249, - "guid": "3174309f-7025-494f-bca0-ef90cb6b7d1e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sydney Gilson", - "company": "Unconix", - "phone": "836-444-3984", - "email": "sydney@unconix.com" - }, - { - "id": 8250, - "guid": "5cfd6623-6511-4165-8baa-a841af5889fe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Hailey", - "company": "Teraserv", - "phone": "815-431-3273", - "email": "arianna@teraserv.com" - }, - { - "id": 8251, - "guid": "33fd6c0e-b98f-4de3-b7e6-7ba3a46d9baa", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Miller", - "company": "Aprama", - "phone": "839-475-2189", - "email": "eva@aprama.com" - }, - { - "id": 8252, - "guid": "ca154d63-f8a5-45c7-b2d3-e83ee5e81001", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Hawkins", - "company": "Westtomik", - "phone": "837-530-2540", - "email": "alexa@westtomik.com" - }, - { - "id": 8253, - "guid": "95a45313-c51e-405a-8cd4-34844df7a0cc", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoey Hailey", - "company": "Proline", - "phone": "887-514-3612", - "email": "zoey@proline.com" - }, - { - "id": 8254, - "guid": "385136f1-275a-4ba3-a48e-e9d7912d781b", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Abramson", - "company": "Jamrola", - "phone": "836-499-3301", - "email": "olivia@jamrola.com" - }, - { - "id": 8255, - "guid": "c75b9625-0f8c-4261-944f-62c9a88ab5b5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Allison Higgins", - "company": "Keytheon", - "phone": "871-432-3303", - "email": "allison@keytheon.com" - }, - { - "id": 8256, - "guid": "812a49e6-f46f-4075-a3ad-af72c0aabdef", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Gilson", - "company": "Westmedia", - "phone": "858-505-2381", - "email": "kylie@westmedia.com" - }, - { - "id": 8257, - "guid": "7f749422-7f95-450b-a38f-7b5eac3e84ef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Waller", - "company": "Titanirola", - "phone": "837-496-2989", - "email": "maya@titanirola.com" - }, - { - "id": 8258, - "guid": "669518fc-468d-48ad-9320-2e95e5f1b4bc", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Molly Adamson", - "company": "Venconix", - "phone": "807-572-2070", - "email": "molly@venconix.com" - }, - { - "id": 8259, - "guid": "2250d16e-00c3-465b-9bd2-4b733975d54e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Smith", - "company": "Polytheon", - "phone": "822-431-3272", - "email": "melanie@polytheon.com" - }, - { - "id": 8260, - "guid": "c4437961-3d22-407c-bb92-091754cd65d9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Miln", - "company": "Orthomedia", - "phone": "814-457-2781", - "email": "valeria@orthomedia.com" - }, - { - "id": 8261, - "guid": "f514b451-ae71-474f-9d25-b752bfc21421", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Hoggarth", - "company": "Aluco", - "phone": "829-403-3855", - "email": "mia@aluco.com" - }, - { - "id": 8262, - "guid": "8c366e9d-6e48-4215-81a9-dc3d1fb6a6e5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Smith", - "company": "Ameritron", - "phone": "827-586-2158", - "email": "madeline@ameritron.com" - }, - { - "id": 8263, - "guid": "cd645cd0-963d-4826-811b-dd4f117f2f01", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Otis", - "company": "Celgra", - "phone": "899-504-3980", - "email": "alexis@celgra.com" - }, - { - "id": 8264, - "guid": "ba00c9c1-0e0e-4966-9e27-2fc15e5b0093", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Morrison", - "company": "eSteganoergy", - "phone": "862-402-3365", - "email": "kylie@esteganoergy.com" - }, - { - "id": 8265, - "guid": "30ff3e4f-d63a-4ec0-bdef-8cc01ad581a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Claire Calhoun", - "company": "Syssoft", - "phone": "872-494-2456", - "email": "claire@syssoft.com" - }, - { - "id": 8266, - "guid": "2a640d6f-b0a5-41ae-9748-b4de91e18e5a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Goldman", - "company": "Polytheon", - "phone": "842-576-3343", - "email": "lily@polytheon.com" - }, - { - "id": 8267, - "guid": "c58c2285-6005-418c-9579-564432de911e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Morgan Abramson", - "company": "Titanirola", - "phone": "837-418-3259", - "email": "morgan@titanirola.com" - }, - { - "id": 8268, - "guid": "3a4394ed-cdb3-4b85-94ab-f2800f813e54", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Gardner", - "company": "Thermotomic", - "phone": "803-403-3211", - "email": "lauren@thermotomic.com" - }, - { - "id": 8269, - "guid": "0bc6c01b-db5a-48ca-953c-83001f2d7d42", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Wood", - "company": "Turbomart", - "phone": "870-544-2690", - "email": "melanie@turbomart.com" - }, - { - "id": 8270, - "guid": "cd764012-ba99-49a3-a4cd-3123ae5e3cbf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabriella Freeman", - "company": "Orthomedia", - "phone": "819-440-3403", - "email": "gabriella@orthomedia.com" - }, - { - "id": 8271, - "guid": "152db238-b317-4b45-acdd-44988c326a87", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Melanie Walkman", - "company": "Tekcar", - "phone": "841-484-3031", - "email": "melanie@tekcar.com" - }, - { - "id": 8272, - "guid": "fd069cb7-092e-4fb4-a5f9-7ab1cc0f3c2d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brianna Carey", - "company": "Interliant", - "phone": "891-439-2985", - "email": "brianna@interliant.com" - }, - { - "id": 8273, - "guid": "09853e25-9197-40f7-820a-3f12d44952b2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Smith", - "company": "Ventanium", - "phone": "883-471-3306", - "email": "lillian@ventanium.com" - }, - { - "id": 8274, - "guid": "581e3c84-44f6-4dcc-ae89-46906c834bda", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Serenity Wallace", - "company": "US Omnigraphik", - "phone": "862-526-3431", - "email": "serenity@us omnigraphik.com" - }, - { - "id": 8275, - "guid": "4198fcc6-894a-42fb-b270-12cd3804eab0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Anna Gerald", - "company": "Airdyne", - "phone": "872-557-3718", - "email": "anna@airdyne.com" - }, - { - "id": 8276, - "guid": "73d96dd7-5565-4d6f-a2c2-b7684c4670b2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooklyn Chandter", - "company": "Ventanium", - "phone": "886-484-2525", - "email": "brooklyn@ventanium.com" - }, - { - "id": 8277, - "guid": "1066dff8-32a4-4e82-a2cd-f44c0f5e2944", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Hardman", - "company": "Orthomedia", - "phone": "848-483-2977", - "email": "samantha@orthomedia.com" - }, - { - "id": 8278, - "guid": "3458f457-d921-4dbd-96c0-67f3c6dc3dfb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Carey", - "company": "iQualcar", - "phone": "830-558-2203", - "email": "sarah@iqualcar.com" - }, - { - "id": 8279, - "guid": "bb684ddb-1e7a-4730-af76-05a9a33eb499", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madelyn Hardman", - "company": "eSteganoergy", - "phone": "832-482-2922", - "email": "madelyn@esteganoergy.com" - }, - { - "id": 8280, - "guid": "ab425991-7940-4379-a764-caf96a874580", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Conors", - "company": "SysUSA", - "phone": "817-552-3530", - "email": "evelyn@sysusa.com" - }, - { - "id": 8281, - "guid": "550887cf-3b54-4ddb-803d-e34326de84f4", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Gabriella Thornton", - "company": "Titanigraf", - "phone": "831-572-2028", - "email": "gabriella@titanigraf.com" - }, - { - "id": 8282, - "guid": "4eedc39d-5b52-4b40-9d5d-b3deb3a7786b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Oldridge", - "company": "Vencom", - "phone": "886-531-3825", - "email": "lillian@vencom.com" - }, - { - "id": 8283, - "guid": "825ba9ff-1bf2-43e8-bbd4-f2b6a6704e99", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Higgins", - "company": "Turbomart", - "phone": "868-600-2357", - "email": "kaitlyn@turbomart.com" - }, - { - "id": 8284, - "guid": "ff2da5b1-4576-4fbe-90f9-cf5be4a906bc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Brown", - "company": "Teratopia", - "phone": "898-510-2547", - "email": "faith@teratopia.com" - }, - { - "id": 8285, - "guid": "baebac28-e1c1-4567-a91e-5403e50a93d0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Chesterton", - "company": "Proline", - "phone": "889-454-3267", - "email": "sydney@proline.com" - }, - { - "id": 8286, - "guid": "6fb72b5b-66fe-49c1-9d15-f6fe3c3bf03e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Lily Hawkins", - "company": "Tekcar", - "phone": "848-421-3092", - "email": "lily@tekcar.com" - }, - { - "id": 8287, - "guid": "55dd6703-22b1-446c-931b-70afb4e5980f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ashley Harrison", - "company": "Tekcar", - "phone": "823-453-3764", - "email": "ashley@tekcar.com" - }, - { - "id": 8288, - "guid": "8609b6b5-7956-4015-88fb-5e17974c9800", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Freeman", - "company": "Syssoft", - "phone": "870-552-3762", - "email": "mya@syssoft.com" - }, - { - "id": 8289, - "guid": "aec8d166-76c1-43ed-93e4-e9d287fdd262", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ashley Neal", - "company": "Thermotomic", - "phone": "830-498-2430", - "email": "ashley@thermotomic.com" - }, - { - "id": 8290, - "guid": "491db45e-701c-4179-bd32-fe4b10a20277", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophie Thorndike", - "company": "Keytheon", - "phone": "865-566-3863", - "email": "sophie@keytheon.com" - }, - { - "id": 8291, - "guid": "b0853501-d57a-4dcb-8581-184f930db60f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Oldman", - "company": "Jamrola", - "phone": "860-531-3538", - "email": "makayla@jamrola.com" - }, - { - "id": 8292, - "guid": "09d7bc1d-9af5-41a7-bf66-6d03e0427954", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kayla Oliver", - "company": "Inridium", - "phone": "842-546-3781", - "email": "kayla@inridium.com" - }, - { - "id": 8293, - "guid": "879e7b12-6724-4d11-8692-315ea105d5c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Goldman", - "company": "iQualcar", - "phone": "876-556-3962", - "email": "elizabeth@iqualcar.com" - }, - { - "id": 8294, - "guid": "735b1191-cefe-41f7-ba07-4ea2e7ad4132", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Allison Daniels", - "company": "Genland", - "phone": "806-575-2611", - "email": "allison@genland.com" - }, - { - "id": 8295, - "guid": "8906bc47-0289-44e7-9d45-783c1571a632", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ariana Oliver", - "company": "Pacwest", - "phone": "890-489-2046", - "email": "ariana@pacwest.com" - }, - { - "id": 8296, - "guid": "517b6d4c-235a-4454-8ade-24c175f4dbc1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Carroll", - "company": "Infraique", - "phone": "830-484-2844", - "email": "peyton@infraique.com" - }, - { - "id": 8297, - "guid": "770bc7ad-8f86-45f4-ad4a-0863ae785169", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Camila Oldridge", - "company": "Techtron", - "phone": "842-407-2670", - "email": "camila@techtron.com" - }, - { - "id": 8298, - "guid": "b435d598-79a0-4108-97cc-2bb96365de4d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Autumn Davidson", - "company": "Netseco", - "phone": "838-420-2543", - "email": "autumn@netseco.com" - }, - { - "id": 8299, - "guid": "5a0c2d5b-47d6-4b54-b631-1f70db73f2db", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Ogden", - "company": "Cryptotegrity", - "phone": "871-545-3142", - "email": "peyton@cryptotegrity.com" - }, - { - "id": 8300, - "guid": "37c2776b-c301-46e6-9b31-40839f0400ca", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Trinity Carroll", - "company": "Safeagra", - "phone": "845-500-3679", - "email": "trinity@safeagra.com" - }, - { - "id": 8301, - "guid": "5eb87781-90f2-4dd6-a5c1-647307efcb52", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Carroll", - "company": "Orthomedia", - "phone": "832-468-2398", - "email": "julia@orthomedia.com" - }, - { - "id": 8302, - "guid": "472cd54f-dc7e-4b45-9622-6cfd7d46e8ae", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Eva Davidson", - "company": "eEyetanic", - "phone": "843-439-2507", - "email": "eva@eeyetanic.com" - }, - { - "id": 8303, - "guid": "832c0728-fba9-4063-b002-a49ca38fa1e3", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Chapman", - "company": "InfoAirway", - "phone": "811-408-3492", - "email": "chloe@infoairway.com" - }, - { - "id": 8304, - "guid": "178d9335-512e-4940-b49c-c269196d1d89", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Sherlock", - "company": "Xeicon", - "phone": "888-426-2242", - "email": "jessica@xeicon.com" - }, - { - "id": 8305, - "guid": "8cc48ec8-981d-439a-8714-162097e5a097", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Hawkins", - "company": "Netsystems", - "phone": "870-402-2162", - "email": "ava@netsystems.com" - }, - { - "id": 8306, - "guid": "521c21d1-e04e-40c2-9591-84755dfeddda", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Thorndike", - "company": "Nanobanc", - "phone": "894-502-2516", - "email": "gabrielle@nanobanc.com" - }, - { - "id": 8307, - "guid": "5121f28a-639a-4721-aad8-45d06810b0d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabelle Daniels", - "company": "Quintegrity", - "phone": "835-493-3116", - "email": "isabelle@quintegrity.com" - }, - { - "id": 8308, - "guid": "23e6a965-27c6-4d6d-90c4-46974779c0e2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Hoggarth", - "company": "Turbomart", - "phone": "883-464-2886", - "email": "madeline@turbomart.com" - }, - { - "id": 8309, - "guid": "5636e404-45a2-49a5-a18d-5baca429a8d0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Carrington", - "company": "Entcast", - "phone": "844-499-3792", - "email": "caroline@entcast.com" - }, - { - "id": 8310, - "guid": "1280f16c-890c-4a33-8b19-fa4f6a6a380b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Miller", - "company": "iSkyvaco", - "phone": "826-407-3520", - "email": "andrea@iskyvaco.com" - }, - { - "id": 8311, - "guid": "aa5a4fd5-4ee0-417e-81be-552f4adf1b3a", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Croftoon", - "company": "Gigaura", - "phone": "898-468-2415", - "email": "trinity@gigaura.com" - }, - { - "id": 8312, - "guid": "0f4cd99b-66b1-44f1-9134-fa85920a1be2", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sofia Miln", - "company": "Technogra", - "phone": "823-406-2880", - "email": "sofia@technogra.com" - }, - { - "id": 8313, - "guid": "e508494f-ee34-4b78-b57a-77b483a42f7e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Milton", - "company": "Titanirola", - "phone": "833-584-2155", - "email": "katherine@titanirola.com" - }, - { - "id": 8314, - "guid": "20bc9dc0-ad55-45f3-80ff-d5ed4ee91502", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Brickman", - "company": "Textiqua", - "phone": "808-521-2085", - "email": "savannah@textiqua.com" - }, - { - "id": 8315, - "guid": "b8c0dfbe-2c86-4c6d-978c-b6907099e344", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Wallace", - "company": "Keytheon", - "phone": "836-457-2541", - "email": "payton@keytheon.com" - }, - { - "id": 8316, - "guid": "880a47b4-4b4a-4f29-848b-13b5567db036", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Miers", - "company": "Safetrust", - "phone": "877-440-2909", - "email": "savannah@safetrust.com" - }, - { - "id": 8317, - "guid": "6aa57c8c-e08c-4a8e-8168-10f693fed1bb", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Angelina Hamphrey", - "company": "US Omnigraphik", - "phone": "820-494-2883", - "email": "angelina@us omnigraphik.com" - }, - { - "id": 8318, - "guid": "f6545775-f7ea-48e2-91a3-ec15c2ae2c58", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ava Wayne", - "company": "Ameritron", - "phone": "808-465-3903", - "email": "ava@ameritron.com" - }, - { - "id": 8319, - "guid": "41a6976b-d33d-43c7-99f9-d710d8f8ffdc", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaitlyn Webster", - "company": "iOptystix", - "phone": "853-425-3170", - "email": "kaitlyn@ioptystix.com" - }, - { - "id": 8320, - "guid": "c7631fa4-1208-4058-ac59-004997ca720c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Thorndike", - "company": "Aprama", - "phone": "882-501-2889", - "email": "lauren@aprama.com" - }, - { - "id": 8321, - "guid": "9e923bbc-5386-43ad-8821-050f36b4dc55", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Hamphrey", - "company": "Syssoft", - "phone": "801-466-2853", - "email": "molly@syssoft.com" - }, - { - "id": 8322, - "guid": "69a233c3-3914-4b11-bc7a-cd9278731903", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sophia Nelson", - "company": "Syssoft", - "phone": "855-598-3879", - "email": "sophia@syssoft.com" - }, - { - "id": 8323, - "guid": "47bdd5c9-28ab-4e73-9820-07a42e53e29a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe White", - "company": "Mescatron", - "phone": "822-401-3216", - "email": "zoe@mescatron.com" - }, - { - "id": 8324, - "guid": "d7e932a2-36d3-4090-a321-bd77d347c1eb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Taylor Cramer", - "company": "Mescatron", - "phone": "889-541-2592", - "email": "taylor@mescatron.com" - }, - { - "id": 8325, - "guid": "0ff5f9a3-fce1-4f69-a815-fa774d13ebb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Audrey Hardman", - "company": "Thermotomic", - "phone": "837-485-2000", - "email": "audrey@thermotomic.com" - }, - { - "id": 8326, - "guid": "ed74a878-65e0-4992-904f-6612b6b27c5a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophie Carroll", - "company": "Quintegrity", - "phone": "882-474-2912", - "email": "sophie@quintegrity.com" - }, - { - "id": 8327, - "guid": "9c426b08-b4f0-44a0-8ec5-598b4948ddec", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ella Higgins", - "company": "Venconix", - "phone": "832-555-3262", - "email": "ella@venconix.com" - }, - { - "id": 8328, - "guid": "1b66c283-2d3c-4eaa-b4e8-4185545a2944", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Galbraith", - "company": "iSkyvaco", - "phone": "884-449-2173", - "email": "lily@iskyvaco.com" - }, - { - "id": 8329, - "guid": "9c616093-3209-473e-92fe-c7c3673bb702", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Hodges", - "company": "SysVenamerica", - "phone": "862-525-3957", - "email": "mia@sysvenamerica.com" - }, - { - "id": 8330, - "guid": "8d95f14f-dec8-44ba-b1a2-2c428a22d192", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Vaughan", - "company": "Interliant", - "phone": "871-400-3471", - "email": "peyton@interliant.com" - }, - { - "id": 8331, - "guid": "87b15e14-9f92-4861-8acd-8cd5980d39ff", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Waller", - "company": "Robotomic", - "phone": "869-529-2829", - "email": "mya@robotomic.com" - }, - { - "id": 8332, - "guid": "99ce1951-436c-431d-9461-f3f38a681b41", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sophia Timmons", - "company": "Unconix", - "phone": "880-564-3312", - "email": "sophia@unconix.com" - }, - { - "id": 8333, - "guid": "77780412-7763-4c88-9d01-c7c10a10bfb2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Gibbs", - "company": "Conrama", - "phone": "817-579-2017", - "email": "aaliyah@conrama.com" - }, - { - "id": 8334, - "guid": "578c3a34-c970-4e45-92b4-fcb093f86d60", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Higgins", - "company": "Videobanc", - "phone": "847-458-3209", - "email": "makayla@videobanc.com" - }, - { - "id": 8335, - "guid": "9354420b-20b6-4b8b-9322-b361d35ad02f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Calhoun", - "company": "Xeicon", - "phone": "811-432-3237", - "email": "gabriella@xeicon.com" - }, - { - "id": 8336, - "guid": "9eab17d4-4b95-4642-b446-157ab361f5b7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Hamphrey", - "company": "Vencom", - "phone": "872-546-2440", - "email": "kaylee@vencom.com" - }, - { - "id": 8337, - "guid": "402e0e2c-05c9-4b68-9c4a-fd234769034a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Harrison", - "company": "Mescaridic", - "phone": "881-493-2712", - "email": "madeline@mescaridic.com" - }, - { - "id": 8338, - "guid": "1d593d96-cd0d-46b2-abbc-d5d0f97111b1", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mackenzie Gill", - "company": "Vencom", - "phone": "854-481-3270", - "email": "mackenzie@vencom.com" - }, - { - "id": 8339, - "guid": "b45fa5bf-06da-4617-aed7-be46df279c3d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Fisher", - "company": "Interliant", - "phone": "886-484-2431", - "email": "khloe@interliant.com" - }, - { - "id": 8340, - "guid": "87582b1d-01bf-49db-8705-09abfab77696", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Chapman", - "company": "Netseco", - "phone": "830-481-3224", - "email": "natalie@netseco.com" - }, - { - "id": 8341, - "guid": "349b4d66-89c8-42a6-b25e-588fcc16f348", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Maria Thorndike", - "company": "Pacwest", - "phone": "805-572-2234", - "email": "maria@pacwest.com" - }, - { - "id": 8342, - "guid": "b59becbf-cfaa-4bf1-89a7-17e23aea7682", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Wallace", - "company": "Techtron", - "phone": "805-448-3893", - "email": "kayla@techtron.com" - }, - { - "id": 8343, - "guid": "468dfea4-24ad-4074-9c4c-b6e6d37fc880", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alyssa Abramson", - "company": "Gigaura", - "phone": "869-557-2320", - "email": "alyssa@gigaura.com" - }, - { - "id": 8344, - "guid": "7cdb6fe5-99e4-4041-9331-8c3bfabeacb0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Wood", - "company": "Quintegrity", - "phone": "867-574-2064", - "email": "sofia@quintegrity.com" - }, - { - "id": 8345, - "guid": "d2a432cf-8e6f-4381-ae23-8f435f19fcd2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Riley Chandter", - "company": "Inridium", - "phone": "843-582-2726", - "email": "riley@inridium.com" - }, - { - "id": 8346, - "guid": "1e56aa78-46e0-4808-b043-b03fcea37096", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Gilmore", - "company": "Steganoconiche", - "phone": "836-432-3112", - "email": "emma@steganoconiche.com" - }, - { - "id": 8347, - "guid": "06245622-b78f-4d22-974e-d10f7c0231ef", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ariana Timmons", - "company": "Unologic", - "phone": "842-506-2037", - "email": "ariana@unologic.com" - }, - { - "id": 8348, - "guid": "0fc82a2c-1352-445c-a965-7413ab09b773", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kylie Brown", - "company": "SysVenamerica", - "phone": "879-428-3631", - "email": "kylie@sysvenamerica.com" - }, - { - "id": 8349, - "guid": "a749c5a2-3ee8-4ea0-a7a0-5454f1c622c9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Otis", - "company": "Fibroserve", - "phone": "853-563-3401", - "email": "lauren@fibroserve.com" - }, - { - "id": 8350, - "guid": "0aca1d58-e4ee-4529-8839-0d1afacc1455", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Payton Michaelson", - "company": "Dynarama", - "phone": "832-440-2131", - "email": "payton@dynarama.com" - }, - { - "id": 8351, - "guid": "c4058261-0dfe-4e01-a02b-24b0b7e34066", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Watson", - "company": "Gigaura", - "phone": "800-523-3747", - "email": "jocelyn@gigaura.com" - }, - { - "id": 8352, - "guid": "e2800346-3dc7-4a17-9bdd-9c97304ac480", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Charlson", - "company": "Anaframe", - "phone": "813-450-3573", - "email": "bella@anaframe.com" - }, - { - "id": 8353, - "guid": "7a477a0a-97e9-4e7b-8da6-ed128e7785b6", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabelle Nash", - "company": "Interliant", - "phone": "833-577-2274", - "email": "isabelle@interliant.com" - }, - { - "id": 8354, - "guid": "1f3693c2-6fef-42f1-a1b6-85dc49a99ef7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Taylor Gilmore", - "company": "Mescatron", - "phone": "809-423-3821", - "email": "taylor@mescatron.com" - }, - { - "id": 8355, - "guid": "7911e479-8b41-484a-aca6-3f5349553408", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Abigail Crossman", - "company": "Vencom", - "phone": "891-592-3828", - "email": "abigail@vencom.com" - }, - { - "id": 8356, - "guid": "17b512b5-6fa2-4346-908a-39288c7264c3", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brooklyn Vance", - "company": "Systheon", - "phone": "889-559-2881", - "email": "brooklyn@systheon.com" - }, - { - "id": 8357, - "guid": "7c0f79c2-35b6-4a06-b3f2-0c2a671485a7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Chesterton", - "company": "Robotomic", - "phone": "873-577-2917", - "email": "autumn@robotomic.com" - }, - { - "id": 8358, - "guid": "0befe9e6-6c5c-44bd-a9f2-4dd7a5167b5d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Galbraith", - "company": "Anagraph", - "phone": "856-509-3023", - "email": "arianna@anagraph.com" - }, - { - "id": 8359, - "guid": "48bd543c-07fc-4382-8eb9-37f22082008c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Abigail Cook", - "company": "Allnet", - "phone": "898-448-2579", - "email": "abigail@allnet.com" - }, - { - "id": 8360, - "guid": "971684a9-1e2a-4398-9dfc-8b09110ebfdd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Gustman", - "company": "Mescatron", - "phone": "887-568-3025", - "email": "emily@mescatron.com" - }, - { - "id": 8361, - "guid": "3b9b5363-31c5-4b75-a42a-4d4ef45d9e24", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maya Haig", - "company": "Robotomic", - "phone": "819-572-2230", - "email": "maya@robotomic.com" - }, - { - "id": 8362, - "guid": "dc075ef7-570e-44fa-ab7a-46e72dda572c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Harrison", - "company": "Anaframe", - "phone": "832-544-2245", - "email": "natalie@anaframe.com" - }, - { - "id": 8363, - "guid": "d48d07a0-6c68-472b-93af-aac57a88a0df", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooklyn Young", - "company": "Nanobanc", - "phone": "823-435-3237", - "email": "brooklyn@nanobanc.com" - }, - { - "id": 8364, - "guid": "3fd35aef-737c-41cf-a6b1-7080f9c77563", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Victoria Wesley", - "company": "Fibrotopia", - "phone": "861-563-2712", - "email": "victoria@fibrotopia.com" - }, - { - "id": 8365, - "guid": "f082dfb9-83a4-4c11-9580-7196b0d452a1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mia Hancock", - "company": "Titanigraf", - "phone": "840-533-2626", - "email": "mia@titanigraf.com" - }, - { - "id": 8366, - "guid": "12c8e014-fcba-4cac-ba5b-1df255d579eb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Abigail Gerald", - "company": "Anagraph", - "phone": "806-521-3942", - "email": "abigail@anagraph.com" - }, - { - "id": 8367, - "guid": "ddcfd112-53d1-4a45-86a3-6eaf533fbba0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Higgins", - "company": "Teraserv", - "phone": "810-477-3063", - "email": "sofia@teraserv.com" - }, - { - "id": 8368, - "guid": "f2db81b1-63cb-412c-bc3b-c014ec57ebc8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Hamphrey", - "company": "Xeicon", - "phone": "824-572-3593", - "email": "allison@xeicon.com" - }, - { - "id": 8369, - "guid": "e2bf675e-a114-45cd-85c1-0072b44d352d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Hawkins", - "company": "Proline", - "phone": "876-572-3280", - "email": "molly@proline.com" - }, - { - "id": 8370, - "guid": "d161c3c5-102e-4140-8eb8-615ae44244a5", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Destiny Nelson", - "company": "eSteganoergy", - "phone": "836-505-2128", - "email": "destiny@esteganoergy.com" - }, - { - "id": 8371, - "guid": "b38a8731-9381-48f5-83b9-a6cd75574dad", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Sherlock", - "company": "SysVenamerica", - "phone": "867-568-3304", - "email": "grace@sysvenamerica.com" - }, - { - "id": 8372, - "guid": "0cf63de4-5fdf-4f38-a43d-5f604430d421", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Isabelle Walkman", - "company": "Multitiqua", - "phone": "827-450-2705", - "email": "isabelle@multitiqua.com" - }, - { - "id": 8373, - "guid": "32b84f4f-785b-42c0-b79a-029ed97d90d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ava Hancock", - "company": "Gigaura", - "phone": "883-418-2616", - "email": "ava@gigaura.com" - }, - { - "id": 8374, - "guid": "b9a7358a-e0f7-408d-9133-299a712261aa", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Gerald", - "company": "Teknoplexon", - "phone": "815-581-2764", - "email": "natalie@teknoplexon.com" - }, - { - "id": 8375, - "guid": "24126d08-f957-42a0-b101-3c72de66748b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Walkman", - "company": "Anagraph", - "phone": "840-511-2787", - "email": "avery@anagraph.com" - }, - { - "id": 8376, - "guid": "b4ba721c-eab9-4673-9197-1f15e0345419", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Eva Carrington", - "company": "Turbomart", - "phone": "852-557-2658", - "email": "eva@turbomart.com" - }, - { - "id": 8377, - "guid": "89f046ee-1fe7-4a25-88b8-aa390e3e5447", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Trinity Mercer", - "company": "Anagraph", - "phone": "815-448-3436", - "email": "trinity@anagraph.com" - }, - { - "id": 8378, - "guid": "1d224353-d32d-4a2c-8d83-1ec16b8ee4d0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Aaliyah Sheldon", - "company": "Navivacs", - "phone": "820-519-3659", - "email": "aaliyah@navivacs.com" - }, - { - "id": 8379, - "guid": "95383f98-9bad-463f-9404-a356dfe961d7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Hamphrey", - "company": "Cryptotemplate", - "phone": "875-593-3775", - "email": "layla@cryptotemplate.com" - }, - { - "id": 8380, - "guid": "44cb20ed-1bca-424a-a94b-f7741a5b36c2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Gibbs", - "company": "Cryptotemplate", - "phone": "807-574-3838", - "email": "jessica@cryptotemplate.com" - }, - { - "id": 8381, - "guid": "5b827ee2-5ae7-48a5-b5de-4d99d55c7680", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Clapton", - "company": "US Omnigraphik", - "phone": "814-582-2787", - "email": "ashley@us omnigraphik.com" - }, - { - "id": 8382, - "guid": "c5025147-9286-4ce2-9949-a31bec384976", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Wallace", - "company": "Cryptotemplate", - "phone": "892-484-2228", - "email": "lauren@cryptotemplate.com" - }, - { - "id": 8383, - "guid": "4a6d7dbb-7e27-492c-b123-75d4d78bb289", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mia WifKinson", - "company": "InfoAirway", - "phone": "806-462-3834", - "email": "mia@infoairway.com" - }, - { - "id": 8384, - "guid": "f57cf4d7-8f70-4e0a-82a1-d1be15418486", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Hawkins", - "company": "Sontopia", - "phone": "830-455-3949", - "email": "kaylee@sontopia.com" - }, - { - "id": 8385, - "guid": "505bf157-8e29-401a-8e4a-2e337716a682", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mia Warren", - "company": "iEnland", - "phone": "811-516-2243", - "email": "mia@ienland.com" - }, - { - "id": 8386, - "guid": "b9d19f0f-52e9-47a5-81d4-a99dd8691a2f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Goldman", - "company": "OpKeycomm", - "phone": "800-590-2260", - "email": "alexa@opkeycomm.com" - }, - { - "id": 8387, - "guid": "75e7fc8f-12ff-4a6c-8ad9-62b08a66c0ef", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Brooke Owen", - "company": "Mescaridic", - "phone": "887-581-2846", - "email": "brooke@mescaridic.com" - }, - { - "id": 8388, - "guid": "172f7e9d-2925-428d-80b8-37ac29cb9995", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Madelyn Hamphrey", - "company": "SysUSA", - "phone": "850-597-3160", - "email": "madelyn@sysusa.com" - }, - { - "id": 8389, - "guid": "6d15c688-c0fc-4ac5-a4e7-c35b05b1fdaa", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Warren", - "company": "Qualserve", - "phone": "805-597-3911", - "email": "sophia@qualserve.com" - }, - { - "id": 8390, - "guid": "50704eec-3fed-4ba4-9bdb-5af1997cccc8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Gianna Wallace", - "company": "Celgra", - "phone": "803-475-2280", - "email": "gianna@celgra.com" - }, - { - "id": 8391, - "guid": "a00c6d52-c4b8-4c8d-9c70-1a5a33603ea3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Fulton", - "company": "Vencom", - "phone": "879-540-2010", - "email": "chloe@vencom.com" - }, - { - "id": 8392, - "guid": "4d6cf8b6-ee99-4f41-9549-f8b3adacf05a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Allison Oswald", - "company": "iMedconik", - "phone": "865-440-3625", - "email": "allison@imedconik.com" - }, - { - "id": 8393, - "guid": "daa879ab-d8f1-4796-b5ea-80a7bbe9e2e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Winter", - "company": "Genland", - "phone": "863-439-2214", - "email": "sofia@genland.com" - }, - { - "id": 8394, - "guid": "b5214487-c768-4973-b6d9-5252e3a2bbd5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Higgins", - "company": "Cryptotemplate", - "phone": "829-483-3097", - "email": "brooke@cryptotemplate.com" - }, - { - "id": 8395, - "guid": "80c18b47-ee5d-4de1-b54a-6a6635c1b8e9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emily Nathan", - "company": "Polytheon", - "phone": "824-453-3595", - "email": "emily@polytheon.com" - }, - { - "id": 8396, - "guid": "82b7fe13-b712-4d01-a333-a300ac7abc22", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Evelyn Mercer", - "company": "Gigaura", - "phone": "867-514-3771", - "email": "evelyn@gigaura.com" - }, - { - "id": 8397, - "guid": "20b56bc8-704e-4212-9eaa-8fb860268a4b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Hawkins", - "company": "Aprama", - "phone": "882-432-2564", - "email": "gabrielle@aprama.com" - }, - { - "id": 8398, - "guid": "cf30626d-23d9-4048-b802-1d91cf831d0e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madison Thomson", - "company": "Indisco", - "phone": "851-455-3990", - "email": "madison@indisco.com" - }, - { - "id": 8399, - "guid": "79eaa55e-98b9-460c-a9e8-8244d7629ba6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Emma Young", - "company": "Netsystems", - "phone": "839-486-3534", - "email": "emma@netsystems.com" - }, - { - "id": 8400, - "guid": "28ae7458-f315-4ead-b7a4-088aeac8f565", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Eva Vance", - "company": "Truetomic", - "phone": "895-489-3905", - "email": "eva@truetomic.com" - }, - { - "id": 8401, - "guid": "ddad6457-cf4b-487d-be21-b957aaa24cf1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Goldman", - "company": "Multitiqua", - "phone": "875-494-2905", - "email": "madelyn@multitiqua.com" - }, - { - "id": 8402, - "guid": "d470356f-c081-4ff3-9014-9f0e66ed8e62", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Claire Timmons", - "company": "Orthomedia", - "phone": "856-479-3936", - "email": "claire@orthomedia.com" - }, - { - "id": 8403, - "guid": "8ccb4b88-7406-44c8-9794-2c1cc4164d48", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Hodges", - "company": "Idmax", - "phone": "803-557-2649", - "email": "katelyn@idmax.com" - }, - { - "id": 8404, - "guid": "32ad24a1-68aa-48cb-b2ab-143f40cd65f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Owen", - "company": "Fibrotopia", - "phone": "835-445-2867", - "email": "angelina@fibrotopia.com" - }, - { - "id": 8405, - "guid": "8c78993f-0f13-4360-8330-b286398c44c9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Vance", - "company": "Multitiqua", - "phone": "838-534-2525", - "email": "trinity@multitiqua.com" - }, - { - "id": 8406, - "guid": "e75ee1d1-1d9c-4589-92c0-125b781344c3", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Vaughan", - "company": "Conrama", - "phone": "833-473-2564", - "email": "khloe@conrama.com" - }, - { - "id": 8407, - "guid": "d447b0bd-95b2-45d2-8b95-9f2f6f2a5f76", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica White", - "company": "Westgate", - "phone": "805-441-2052", - "email": "jessica@westgate.com" - }, - { - "id": 8408, - "guid": "a4f6c130-6928-4f56-94af-37adcdb0b8da", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Vaughan", - "company": "Ventanium", - "phone": "868-598-2327", - "email": "evelyn@ventanium.com" - }, - { - "id": 8409, - "guid": "34b969cb-628c-4abc-8bbc-a858c6a736a3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Higgins", - "company": "Enlogia", - "phone": "808-419-3088", - "email": "lily@enlogia.com" - }, - { - "id": 8410, - "guid": "4652f74b-aa0f-4a9c-a12a-1b64b642c77d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hannah Oldman", - "company": "Superscope", - "phone": "855-454-2704", - "email": "hannah@superscope.com" - }, - { - "id": 8411, - "guid": "a26feea1-60ff-4053-88a7-1deec28244b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Trinity Conors", - "company": "Qualserve", - "phone": "870-550-2459", - "email": "trinity@qualserve.com" - }, - { - "id": 8412, - "guid": "3e3b292b-efcd-4a8b-93d6-673dde3568b5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Mercer", - "company": "Pacwest", - "phone": "888-464-2611", - "email": "leah@pacwest.com" - }, - { - "id": 8413, - "guid": "21476c30-07dc-40fa-90c9-eceb7529e025", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexis Miller", - "company": "Indisco", - "phone": "838-437-2765", - "email": "alexis@indisco.com" - }, - { - "id": 8414, - "guid": "211fea93-b218-432c-b3dd-8961b5cb1098", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Winter", - "company": "Nanobanc", - "phone": "895-572-2627", - "email": "destiny@nanobanc.com" - }, - { - "id": 8415, - "guid": "8d3fff5d-03cc-48da-9521-eb0b68ff2a69", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Serenity Murphy", - "company": "eEyetanic", - "phone": "871-590-2939", - "email": "serenity@eeyetanic.com" - }, - { - "id": 8416, - "guid": "727c4c86-1c65-4193-979e-bf5824e70b2a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Carroll", - "company": "iMedconik", - "phone": "873-464-3291", - "email": "andrea@imedconik.com" - }, - { - "id": 8417, - "guid": "4e5421df-0433-4bf6-9f2a-1bcbb5834594", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabella Carter", - "company": "Aluco", - "phone": "886-589-3808", - "email": "isabella@aluco.com" - }, - { - "id": 8418, - "guid": "0006d6c2-9d4d-46ff-9e3f-5734c582a1df", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Adamson", - "company": "Teratopia", - "phone": "889-435-3089", - "email": "chloe@teratopia.com" - }, - { - "id": 8419, - "guid": "29f832d9-89ed-4010-98b1-63efa3c2c0f4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Chandter", - "company": "Qualserve", - "phone": "818-526-3000", - "email": "zoey@qualserve.com" - }, - { - "id": 8420, - "guid": "be6a6b12-1318-4546-aa28-e30479ee3e3c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Elizabeth Ford", - "company": "Conrama", - "phone": "848-412-3133", - "email": "elizabeth@conrama.com" - }, - { - "id": 8421, - "guid": "48ec226f-37bf-40ca-a87d-a3233067d3f7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Camila Gerald", - "company": "Entcast", - "phone": "886-469-3984", - "email": "camila@entcast.com" - }, - { - "id": 8422, - "guid": "c0c1a992-067b-42ed-8f2d-4fa4a93e6bfb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Chapman", - "company": "iOptystix", - "phone": "839-519-2814", - "email": "alexis@ioptystix.com" - }, - { - "id": 8423, - "guid": "1737e16e-5a16-4a87-a7bc-8900eed2790c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Young", - "company": "Truetomic", - "phone": "849-510-2566", - "email": "emily@truetomic.com" - }, - { - "id": 8424, - "guid": "24707085-4fea-469a-ac1f-a0ec804666fe", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katherine Adamson", - "company": "Tekcar", - "phone": "873-521-2511", - "email": "katherine@tekcar.com" - }, - { - "id": 8425, - "guid": "fe3cd75f-3368-408c-9b47-1f866255fd9f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Vance", - "company": "Navivacs", - "phone": "880-453-3605", - "email": "samantha@navivacs.com" - }, - { - "id": 8426, - "guid": "7debe49e-9d5b-4ae2-808b-24a21d7ec0a9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Carrington", - "company": "eEyetanic", - "phone": "844-543-3843", - "email": "mya@eeyetanic.com" - }, - { - "id": 8427, - "guid": "cf91f2ce-10f1-4cf0-89d8-12ecbde79ac7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Walkman", - "company": "Quintegrity", - "phone": "871-554-3687", - "email": "angelina@quintegrity.com" - }, - { - "id": 8428, - "guid": "bed228cb-c4c6-45d7-84c7-e600f848b140", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Gill", - "company": "Airdyne", - "phone": "800-550-3506", - "email": "khloe@airdyne.com" - }, - { - "id": 8429, - "guid": "632ec299-f0c3-459b-8823-458fc4b1f874", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Owen", - "company": "Netsystems", - "phone": "872-425-3624", - "email": "victoria@netsystems.com" - }, - { - "id": 8430, - "guid": "9a3c725c-9107-4818-8926-849c86211451", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ashley Warren", - "company": "Westmedia", - "phone": "836-596-3975", - "email": "ashley@westmedia.com" - }, - { - "id": 8431, - "guid": "1c6d3f26-f088-4a83-854b-b09fbd0c83f0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Genesis Nelson", - "company": "iSkyvaco", - "phone": "835-490-3480", - "email": "genesis@iskyvaco.com" - }, - { - "id": 8432, - "guid": "b55ab5b1-587c-4f21-aa56-6d60820e1343", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kimberly Hodges", - "company": "Superscope", - "phone": "892-426-3146", - "email": "kimberly@superscope.com" - }, - { - "id": 8433, - "guid": "15ce9f77-0563-4432-9123-f5129f0dd2be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Chapman", - "company": "SysVenamerica", - "phone": "822-481-3175", - "email": "olivia@sysvenamerica.com" - }, - { - "id": 8434, - "guid": "812a0f77-c7b1-4b03-b9fc-66cdbd8355c0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Carrington", - "company": "Videobanc", - "phone": "897-511-2266", - "email": "abigail@videobanc.com" - }, - { - "id": 8435, - "guid": "68cc7795-3d89-4797-8d25-ccf5a058a676", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Bush", - "company": "Pericenta", - "phone": "868-408-2627", - "email": "elizabeth@pericenta.com" - }, - { - "id": 8436, - "guid": "f8c4d8e1-ece5-4b91-96e7-22f7ae423c71", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Fulton", - "company": "Aprama", - "phone": "847-551-3288", - "email": "allison@aprama.com" - }, - { - "id": 8437, - "guid": "ca62e716-925f-4437-b737-d312dbfcf8eb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Galbraith", - "company": "SysUSA", - "phone": "835-483-3635", - "email": "abigail@sysusa.com" - }, - { - "id": 8438, - "guid": "59e1d71b-8c1b-40f9-bb5d-c63ea1e9df6a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Addison Gibbs", - "company": "Multitiqua", - "phone": "853-560-3993", - "email": "addison@multitiqua.com" - }, - { - "id": 8439, - "guid": "e0083284-9416-47de-9bc0-0bbf46c77425", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Wesley", - "company": "Entcast", - "phone": "801-492-3895", - "email": "madelyn@entcast.com" - }, - { - "id": 8440, - "guid": "e8923056-1f38-4954-a9f4-14d0e8b57938", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kayla Oldridge", - "company": "Westmedia", - "phone": "890-556-3714", - "email": "kayla@westmedia.com" - }, - { - "id": 8441, - "guid": "2a5f81c8-4c8c-4fac-9a6b-90bb4a55f26a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe WifKinson", - "company": "iSkyvaco", - "phone": "808-479-2994", - "email": "chloe@iskyvaco.com" - }, - { - "id": 8442, - "guid": "d2468288-8823-45cb-9325-f1e2fc43598b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sofia Charlson", - "company": "Techtron", - "phone": "898-451-3336", - "email": "sofia@techtron.com" - }, - { - "id": 8443, - "guid": "23e68d34-e55c-4873-83ae-306859ac8eaa", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Amelia Chandter", - "company": "eEyetanic", - "phone": "878-410-2010", - "email": "amelia@eeyetanic.com" - }, - { - "id": 8444, - "guid": "b99a9cdb-4a54-4d62-a17b-9921e2520d1d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Abramson", - "company": "Techtron", - "phone": "838-536-3978", - "email": "kylie@techtron.com" - }, - { - "id": 8445, - "guid": "e64e8b54-444d-487d-ba48-a6432a8ebc57", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mariah Thomson", - "company": "Pacwest", - "phone": "884-520-2014", - "email": "mariah@pacwest.com" - }, - { - "id": 8446, - "guid": "3349701f-9639-4cdd-8eb8-3c20e9f14a94", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Eva Molligan", - "company": "iMedconik", - "phone": "804-522-3757", - "email": "eva@imedconik.com" - }, - { - "id": 8447, - "guid": "9b42ffd2-6c6a-4351-94e6-c3161c0dccc4", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Fisher", - "company": "Westtomik", - "phone": "815-488-3666", - "email": "kaitlyn@westtomik.com" - }, - { - "id": 8448, - "guid": "766c4be9-b119-4a11-9244-be0310b443ce", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Faith Gilson", - "company": "Netseco", - "phone": "836-498-3003", - "email": "faith@netseco.com" - }, - { - "id": 8449, - "guid": "fd136c97-9f2e-4810-b12a-e9cd594fbc20", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Hamphrey", - "company": "Compuamerica", - "phone": "831-451-2383", - "email": "makayla@compuamerica.com" - }, - { - "id": 8450, - "guid": "4f176e66-a2ea-49bc-9e91-c1c13686260f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kimberly Waller", - "company": "Systheon", - "phone": "884-523-3604", - "email": "kimberly@systheon.com" - }, - { - "id": 8451, - "guid": "f7af45b1-7686-48f0-b56b-741ffe68c6d6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alexandra Carrington", - "company": "Rapigrafix", - "phone": "829-542-2112", - "email": "alexandra@rapigrafix.com" - }, - { - "id": 8452, - "guid": "bae57a58-1fa1-4179-80c8-9ee773f6fe82", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Oswald", - "company": "Mescaridic", - "phone": "845-426-2644", - "email": "julia@mescaridic.com" - }, - { - "id": 8453, - "guid": "95a4656d-7330-414e-8b91-19e746657ad3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity Goldman", - "company": "Infraique", - "phone": "891-589-2710", - "email": "trinity@infraique.com" - }, - { - "id": 8454, - "guid": "2ff105ad-8c09-499d-94bc-1e118bb86d60", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Evelyn Gerald", - "company": "US Infratouch", - "phone": "813-497-2189", - "email": "evelyn@us infratouch.com" - }, - { - "id": 8455, - "guid": "d53232bf-258f-4a3c-a176-e7d5b4c91529", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Bailey Adamson", - "company": "Mescatron", - "phone": "891-465-3389", - "email": "bailey@mescatron.com" - }, - { - "id": 8456, - "guid": "0e73d66b-8faf-4562-8277-e9f4c2152906", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Gibbs", - "company": "Robotemplate", - "phone": "815-511-3601", - "email": "avery@robotemplate.com" - }, - { - "id": 8457, - "guid": "b862ad6a-d2d0-4570-afad-eaf2d59e7294", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Vanessa Calhoun", - "company": "RoboAerlogix", - "phone": "834-464-2629", - "email": "vanessa@roboaerlogix.com" - }, - { - "id": 8458, - "guid": "f77d8bad-3e8a-4003-ab09-ee9a85b3067f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Waller", - "company": "US Omnigraphik", - "phone": "876-516-3754", - "email": "julia@us omnigraphik.com" - }, - { - "id": 8459, - "guid": "f87e4041-d8be-4c12-ac4a-db648038f67d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gabriella Neal", - "company": "Allnet", - "phone": "818-463-2524", - "email": "gabriella@allnet.com" - }, - { - "id": 8460, - "guid": "7321de90-1ba6-4944-81af-6ea4d1370343", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Goodman", - "company": "Entcast", - "phone": "899-550-3150", - "email": "katherine@entcast.com" - }, - { - "id": 8461, - "guid": "61844b72-bfa1-411d-8f07-6755cc87c57c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Stanley", - "company": "SysUSA", - "phone": "845-450-3933", - "email": "mia@sysusa.com" - }, - { - "id": 8462, - "guid": "b29fa8e1-295b-46cb-8f28-a815e8d19d23", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaylee Youmans", - "company": "Fibroserve", - "phone": "896-581-3675", - "email": "kaylee@fibroserve.com" - }, - { - "id": 8463, - "guid": "db35bb9c-37cb-4440-8703-5b50af96f983", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Chandter", - "company": "Teknoplexon", - "phone": "822-471-3752", - "email": "brianna@teknoplexon.com" - }, - { - "id": 8464, - "guid": "89f79127-3eaa-4f3b-af80-d2da47226d83", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Sarah Nelson", - "company": "Systheon", - "phone": "808-594-3343", - "email": "sarah@systheon.com" - }, - { - "id": 8465, - "guid": "ed6b789b-4b96-43e5-96bc-8bb19514519a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mackenzie Goldman", - "company": "Ventanium", - "phone": "815-410-2199", - "email": "mackenzie@ventanium.com" - }, - { - "id": 8466, - "guid": "969663d9-13b4-43d2-a672-5ddd035a0e50", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Nathan", - "company": "Conotomics", - "phone": "816-458-2790", - "email": "melanie@conotomics.com" - }, - { - "id": 8467, - "guid": "2b2feeb3-3cd9-4c91-929a-873b8a56b862", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mia Gate", - "company": "Gigaura", - "phone": "821-509-2489", - "email": "mia@gigaura.com" - }, - { - "id": 8468, - "guid": "6628f728-34ed-4e9c-beb5-fcd32eb6b55a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoe Gate", - "company": "Hypervaco", - "phone": "831-521-2546", - "email": "zoe@hypervaco.com" - }, - { - "id": 8469, - "guid": "046bc5eb-8784-4ede-b14b-53544cea3028", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Vaughan", - "company": "Unconix", - "phone": "875-454-2973", - "email": "lillian@unconix.com" - }, - { - "id": 8470, - "guid": "4d844da9-28ad-445c-af5b-8e5cc3d0bf5f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Gate", - "company": "Steganoconiche", - "phone": "810-559-3191", - "email": "julia@steganoconiche.com" - }, - { - "id": 8471, - "guid": "bf979522-2769-484d-baaf-9a331467f035", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Hailey", - "company": "Enlogia", - "phone": "899-434-2394", - "email": "rachel@enlogia.com" - }, - { - "id": 8472, - "guid": "abb05269-cc27-4432-a0c3-af3bf434d838", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Destiny Neal", - "company": "Thermotomic", - "phone": "823-587-2870", - "email": "destiny@thermotomic.com" - }, - { - "id": 8473, - "guid": "f63802a6-0d94-42d2-ba9b-7a968e4e131f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Michaelson", - "company": "eSteganoergy", - "phone": "895-486-3117", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 8474, - "guid": "f358a762-23d5-4b5b-8df3-1b7781a94e8a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Hodges", - "company": "Technogra", - "phone": "800-424-3975", - "email": "kylie@technogra.com" - }, - { - "id": 8475, - "guid": "168a4e43-016a-4dd9-8926-41596f4b0d04", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Mia Gibbs", - "company": "Nanobanc", - "phone": "812-541-3348", - "email": "mia@nanobanc.com" - }, - { - "id": 8476, - "guid": "a951d5bb-9b8d-4bdf-9ad9-f34e81b841f8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Bush", - "company": "Navivacs", - "phone": "841-473-3760", - "email": "madison@navivacs.com" - }, - { - "id": 8477, - "guid": "2ae9b120-8f7d-4df6-9951-7e39da0542a8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Sherlock", - "company": "Orthomedia", - "phone": "868-536-3856", - "email": "hailey@orthomedia.com" - }, - { - "id": 8478, - "guid": "2b41f018-0a15-4b32-9a7c-ab85dbbd4afb", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Andrea Brooks", - "company": "Navivacs", - "phone": "888-447-2934", - "email": "andrea@navivacs.com" - }, - { - "id": 8479, - "guid": "9836b104-c21d-4490-ab7f-28510b2d6df7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Jasmine Bush", - "company": "Compuamerica", - "phone": "809-462-3990", - "email": "jasmine@compuamerica.com" - }, - { - "id": 8480, - "guid": "174fee5b-fd3f-4f22-bfe9-1214bb9365d9", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brooke Brown", - "company": "iEnland", - "phone": "827-461-3316", - "email": "brooke@ienland.com" - }, - { - "id": 8481, - "guid": "3fce9540-baab-4179-9c12-dc976c521d4d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Oldridge", - "company": "Infraique", - "phone": "835-468-3486", - "email": "evelyn@infraique.com" - }, - { - "id": 8482, - "guid": "48ba0dbc-4c70-4f83-b941-f419891245a0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Khloe Oliver", - "company": "Robocomm", - "phone": "804-462-3938", - "email": "khloe@robocomm.com" - }, - { - "id": 8483, - "guid": "6db9ebc9-831f-4179-8e2d-e058cda006be", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Timmons", - "company": "Teraserv", - "phone": "887-555-3516", - "email": "alexis@teraserv.com" - }, - { - "id": 8484, - "guid": "3e23303c-1e5c-4ef1-9759-64e3cd298ff8", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Autumn Neal", - "company": "iOptystix", - "phone": "898-426-3963", - "email": "autumn@ioptystix.com" - }, - { - "id": 8485, - "guid": "81af92c7-65a7-46ab-8b7d-9e9ad2a14f4b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Day", - "company": "Inridium", - "phone": "892-520-3580", - "email": "julia@inridium.com" - }, - { - "id": 8486, - "guid": "45764b83-9489-4068-82b9-6cea5c25bfc4", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Freeman", - "company": "Conrama", - "phone": "815-597-3622", - "email": "morgan@conrama.com" - }, - { - "id": 8487, - "guid": "1ab6af48-a061-4920-85eb-11e31c01f806", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Morgan Wainwright", - "company": "Tekcar", - "phone": "857-476-3610", - "email": "morgan@tekcar.com" - }, - { - "id": 8488, - "guid": "478ce3e3-cbf4-4342-93cd-d85400f297e1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aubrey Goodman", - "company": "Pericenta", - "phone": "861-474-3086", - "email": "aubrey@pericenta.com" - }, - { - "id": 8489, - "guid": "eda33811-c447-4408-8581-498ab84b1eb3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophia Webster", - "company": "Jamrola", - "phone": "818-544-2608", - "email": "sophia@jamrola.com" - }, - { - "id": 8490, - "guid": "5e720abc-fab8-4a0f-962f-a74d594e4f37", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle WifKinson", - "company": "Steganoconiche", - "phone": "863-434-3893", - "email": "gabrielle@steganoconiche.com" - }, - { - "id": 8491, - "guid": "15484965-0d4c-4b6d-a0a7-85b7695e3b6b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooke Haig", - "company": "SysUSA", - "phone": "826-518-2663", - "email": "brooke@sysusa.com" - }, - { - "id": 8492, - "guid": "7967e561-ad17-4b66-867d-a33da89a58d2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Bush", - "company": "iSkyvaco", - "phone": "826-499-3855", - "email": "emily@iskyvaco.com" - }, - { - "id": 8493, - "guid": "bfd2c57f-fad2-4f93-a8f8-6f0936a5d1ee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gabrielle Gate", - "company": "Transtouch", - "phone": "894-503-2994", - "email": "gabrielle@transtouch.com" - }, - { - "id": 8494, - "guid": "63cdabc5-5cdc-4d22-8961-abfe49c68232", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Michaelson", - "company": "Allnet", - "phone": "824-440-2073", - "email": "savannah@allnet.com" - }, - { - "id": 8495, - "guid": "13d7a86a-4f27-4975-b5f3-f30415305d48", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Nathan", - "company": "Ventanium", - "phone": "847-410-2480", - "email": "kayla@ventanium.com" - }, - { - "id": 8496, - "guid": "0fc38905-f050-48e4-a24e-a355db369561", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophia Calhoun", - "company": "Conotomics", - "phone": "892-489-2952", - "email": "sophia@conotomics.com" - }, - { - "id": 8497, - "guid": "92a86ca2-2d75-4d32-bfb1-9b62af72deb2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Makayla Ogden", - "company": "Hypervaco", - "phone": "816-456-2267", - "email": "makayla@hypervaco.com" - }, - { - "id": 8498, - "guid": "e03437ff-c570-46b7-99ee-78d5d310194a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madison Chapman", - "company": "Orthosoft", - "phone": "838-571-3584", - "email": "madison@orthosoft.com" - }, - { - "id": 8499, - "guid": "8eaa81ee-9f15-4aaa-858b-fc7677596622", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Day", - "company": "Cryptotegrity", - "phone": "870-516-2238", - "email": "avery@cryptotegrity.com" - }, - { - "id": 8500, - "guid": "3415a5ae-47f2-4fbd-bd9f-09796c1c9096", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Molly Calhoun", - "company": "Indisco", - "phone": "842-437-3088", - "email": "molly@indisco.com" - }, - { - "id": 8501, - "guid": "059f11c5-54fd-4fa4-befe-4c9c1d89fd28", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Elizabeth Gilbert", - "company": "Netsystems", - "phone": "816-495-2878", - "email": "elizabeth@netsystems.com" - }, - { - "id": 8502, - "guid": "300ac36a-1533-462a-b783-c8041d1c1889", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Higgins", - "company": "Jamrola", - "phone": "886-523-2747", - "email": "lily@jamrola.com" - }, - { - "id": 8503, - "guid": "fde95b3a-33a9-4a6e-a7fb-ecdb777a93d3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Ward", - "company": "Fibrotouch", - "phone": "889-520-2712", - "email": "vanessa@fibrotouch.com" - }, - { - "id": 8504, - "guid": "2dcf19b7-1375-43db-9a0e-a89c94692800", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jocelyn Oswald", - "company": "Skydata", - "phone": "850-442-2519", - "email": "jocelyn@skydata.com" - }, - { - "id": 8505, - "guid": "2f5c935e-5c9b-4fb1-bb6b-a43351fc9019", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Brooke Charlson", - "company": "Robocomm", - "phone": "816-470-3756", - "email": "brooke@robocomm.com" - }, - { - "id": 8506, - "guid": "5856b9ce-d7d9-47fb-b693-8a3e7d04ff74", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Hawkins", - "company": "Technogra", - "phone": "846-461-3584", - "email": "sophia@technogra.com" - }, - { - "id": 8507, - "guid": "f63087e8-3c55-4ab6-8cf8-097f219ffd63", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Gill", - "company": "Teratopia", - "phone": "818-573-3552", - "email": "chloe@teratopia.com" - }, - { - "id": 8508, - "guid": "f385c785-15ea-444f-9d74-538fd3c0b225", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Emily Campbell", - "company": "Proline", - "phone": "807-533-2765", - "email": "emily@proline.com" - }, - { - "id": 8509, - "guid": "798ce5a5-47f1-4f4c-9194-814c6ccdaee4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Faith Gerald", - "company": "Hypervaco", - "phone": "880-593-2819", - "email": "faith@hypervaco.com" - }, - { - "id": 8510, - "guid": "bd72b070-44e3-4115-b19b-bbb3610f1e61", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Oliver", - "company": "Robotemplate", - "phone": "888-553-2643", - "email": "aaliyah@robotemplate.com" - }, - { - "id": 8511, - "guid": "2da2ec79-23b1-478e-b459-e535d0a9c4f5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Otis", - "company": "Truegate", - "phone": "816-567-3246", - "email": "trinity@truegate.com" - }, - { - "id": 8512, - "guid": "b84bc1d8-cbb0-4a24-9d47-5693c8ba186f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Chloe Galbraith", - "company": "Videobanc", - "phone": "822-539-2167", - "email": "chloe@videobanc.com" - }, - { - "id": 8513, - "guid": "ee514c3b-ba26-4997-8147-044d5a01e806", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Sherlock", - "company": "Titanirola", - "phone": "877-490-2149", - "email": "khloe@titanirola.com" - }, - { - "id": 8514, - "guid": "4b441586-86b8-4ae9-8436-953b97d30ff5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Khloe Cook", - "company": "Openserve", - "phone": "850-566-3680", - "email": "khloe@openserve.com" - }, - { - "id": 8515, - "guid": "9c68c7a1-13fc-4dd3-85b6-4657af75e271", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Neal", - "company": "Pericenta", - "phone": "859-510-2247", - "email": "kaitlyn@pericenta.com" - }, - { - "id": 8516, - "guid": "1cb6672e-b024-41bf-b93a-d41c7f05d362", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brianna Hamphrey", - "company": "Keytheon", - "phone": "811-508-3125", - "email": "brianna@keytheon.com" - }, - { - "id": 8517, - "guid": "a9115097-ae35-44ec-8951-ec465240bef0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Arianna Higgins", - "company": "Videobanc", - "phone": "872-513-2904", - "email": "arianna@videobanc.com" - }, - { - "id": 8518, - "guid": "444f300a-4750-419f-b212-3605a40a08c1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kylie Miller", - "company": "iEnland", - "phone": "837-429-3792", - "email": "kylie@ienland.com" - }, - { - "id": 8519, - "guid": "00533b6d-1525-445a-a879-4c9f6fac2266", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Morgan Fisher", - "company": "Aprama", - "phone": "835-412-2114", - "email": "morgan@aprama.com" - }, - { - "id": 8520, - "guid": "40118223-421e-427d-aeba-7c5923e80c8b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lily Freeman", - "company": "Openserve", - "phone": "896-543-3596", - "email": "lily@openserve.com" - }, - { - "id": 8521, - "guid": "a521c13e-76cd-4cc9-a680-75e54dcf6f1b", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Adamson", - "company": "Safeagra", - "phone": "840-539-2091", - "email": "andrea@safeagra.com" - }, - { - "id": 8522, - "guid": "3d529510-9f39-497a-b162-77b6ee525572", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Claire Gerald", - "company": "RoboAerlogix", - "phone": "810-482-2947", - "email": "claire@roboaerlogix.com" - }, - { - "id": 8523, - "guid": "eb60cc99-5e31-444d-a8f0-1a0002a8d14d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Timmons", - "company": "Skydata", - "phone": "860-587-2141", - "email": "molly@skydata.com" - }, - { - "id": 8524, - "guid": "27f8365e-0ba1-41a7-8ca0-3fd886ed6676", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sydney Gibbs", - "company": "Nanobanc", - "phone": "875-522-3614", - "email": "sydney@nanobanc.com" - }, - { - "id": 8525, - "guid": "2d12cee5-24c2-4163-80ee-15e38d0e5c80", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ava Brooks", - "company": "Conrama", - "phone": "845-446-3155", - "email": "ava@conrama.com" - }, - { - "id": 8526, - "guid": "dff78594-d933-41b9-9ea4-0ac915ff2b58", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Michaelson", - "company": "Enlogia", - "phone": "805-476-3839", - "email": "katelyn@enlogia.com" - }, - { - "id": 8527, - "guid": "8277b8bd-f568-4901-844f-d7cb6f8cf56f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Chloe Vaughan", - "company": "Inridium", - "phone": "856-467-3115", - "email": "chloe@inridium.com" - }, - { - "id": 8528, - "guid": "0128f6a5-95f3-4390-8741-3681a3dc4d51", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabriella Wallace", - "company": "Skydata", - "phone": "875-554-2353", - "email": "gabriella@skydata.com" - }, - { - "id": 8529, - "guid": "031e4591-4b08-4cdd-887a-7858a12fad16", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Walkman", - "company": "Safeagra", - "phone": "871-514-3516", - "email": "mya@safeagra.com" - }, - { - "id": 8530, - "guid": "df8e3273-d690-4a69-a715-30ce4551401c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica Hoggarth", - "company": "Cryptotegrity", - "phone": "877-497-2333", - "email": "jessica@cryptotegrity.com" - }, - { - "id": 8531, - "guid": "82358941-e260-4c0e-ba9c-21938a0fa2b9", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sofia Chandter", - "company": "Mescatron", - "phone": "839-457-3833", - "email": "sofia@mescatron.com" - }, - { - "id": 8532, - "guid": "b5febdb1-5511-4870-a7b2-8973661a8f35", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Youmans", - "company": "Proline", - "phone": "876-521-3557", - "email": "alexis@proline.com" - }, - { - "id": 8533, - "guid": "656577d5-acd0-40b0-9dbd-f992104da9a5", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Sheldon", - "company": "Indisco", - "phone": "863-432-2262", - "email": "lily@indisco.com" - }, - { - "id": 8534, - "guid": "984c2514-6034-492a-84e8-da75de427836", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Julia Oliver", - "company": "Polytheon", - "phone": "845-483-2186", - "email": "julia@polytheon.com" - }, - { - "id": 8535, - "guid": "dbeda92f-96f4-4d3e-b346-6b0b4b424905", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Milton", - "company": "Textiqua", - "phone": "877-522-2287", - "email": "kimberly@textiqua.com" - }, - { - "id": 8536, - "guid": "0c1ecb69-9628-4778-a541-708478ac2945", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sophie Fulton", - "company": "Qualserve", - "phone": "828-578-2655", - "email": "sophie@qualserve.com" - }, - { - "id": 8537, - "guid": "a60bac0e-36d5-4269-95e4-12dd75c35be4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Harrison", - "company": "Airdyne", - "phone": "802-426-3018", - "email": "zoe@airdyne.com" - }, - { - "id": 8538, - "guid": "315869b6-5faa-4d9a-b996-3d5892890bbf", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexis Crossman", - "company": "InfoAirway", - "phone": "897-418-2287", - "email": "alexis@infoairway.com" - }, - { - "id": 8539, - "guid": "b05d55c1-b473-4bff-908e-6af017a6a9cb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Miers", - "company": "Generola", - "phone": "829-577-3937", - "email": "maya@generola.com" - }, - { - "id": 8540, - "guid": "cf54a312-58b1-4297-aade-bb289d05d012", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Isabella Carrington", - "company": "iEnland", - "phone": "819-558-3070", - "email": "isabella@ienland.com" - }, - { - "id": 8541, - "guid": "e0b76449-024e-4166-b77d-89fa095ee699", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabella Hoggarth", - "company": "Mescaridic", - "phone": "870-455-2348", - "email": "isabella@mescaridic.com" - }, - { - "id": 8542, - "guid": "9ca26011-bc4b-44f6-be4a-f04bdf1e64cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Chloe Miers", - "company": "Robocomm", - "phone": "895-511-3407", - "email": "chloe@robocomm.com" - }, - { - "id": 8543, - "guid": "0d73dfb6-0041-40bf-b0e1-1a3c511ac22b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Natalie Hancock", - "company": "Fibrotopia", - "phone": "884-494-2409", - "email": "natalie@fibrotopia.com" - }, - { - "id": 8544, - "guid": "1925ccf5-764d-4931-b144-b2bdeb8000d4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Gerald", - "company": "Gigaura", - "phone": "840-400-2404", - "email": "alexa@gigaura.com" - }, - { - "id": 8545, - "guid": "8cfc5519-d3e7-4fa4-9695-7acd17734278", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Riley Hamphrey", - "company": "Pacwest", - "phone": "830-438-2809", - "email": "riley@pacwest.com" - }, - { - "id": 8546, - "guid": "14bcf7b5-f2ad-4c89-bfc6-e72f86873eae", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Taylor Crossman", - "company": "iQualcar", - "phone": "887-495-3233", - "email": "taylor@iqualcar.com" - }, - { - "id": 8547, - "guid": "1d418ab9-30a3-44d3-9548-06f7c34c435a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Layla Hailey", - "company": "Steganoconiche", - "phone": "824-494-2978", - "email": "layla@steganoconiche.com" - }, - { - "id": 8548, - "guid": "93d67fdc-0bfd-4f4f-8677-26021b9b8532", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Hardman", - "company": "Robocomm", - "phone": "888-536-3912", - "email": "gabrielle@robocomm.com" - }, - { - "id": 8549, - "guid": "695faf89-1526-4174-9348-14ce93382dd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Gilbert", - "company": "Openserve", - "phone": "852-522-2209", - "email": "lauren@openserve.com" - }, - { - "id": 8550, - "guid": "e84b8773-0760-4c11-8609-a0df4e127163", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hailey Thomson", - "company": "Indisco", - "phone": "822-505-3864", - "email": "hailey@indisco.com" - }, - { - "id": 8551, - "guid": "9b5f5f22-82cf-4a58-b66c-ae16772919f6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Ford", - "company": "Netsystems", - "phone": "846-406-2396", - "email": "maria@netsystems.com" - }, - { - "id": 8552, - "guid": "2ea5e94b-8aff-40b4-9d01-779ef2b69f34", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Molly Chesterton", - "company": "Thermotomic", - "phone": "864-455-3914", - "email": "molly@thermotomic.com" - }, - { - "id": 8553, - "guid": "d4b9f81c-61c7-437c-8600-3a903298e545", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Owen", - "company": "Titanigraf", - "phone": "833-470-2636", - "email": "gabrielle@titanigraf.com" - }, - { - "id": 8554, - "guid": "b27d5e9c-c3e5-4b97-897e-96d467d9ae43", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Samantha Wallace", - "company": "eEyetanic", - "phone": "833-450-2015", - "email": "samantha@eeyetanic.com" - }, - { - "id": 8555, - "guid": "22d5eda9-859d-4fdb-8314-702a11ae246c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Rachel Hodges", - "company": "Teratopia", - "phone": "890-504-3088", - "email": "rachel@teratopia.com" - }, - { - "id": 8556, - "guid": "d42e18e2-7ff7-4b49-97e0-7dba90009d88", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Hodges", - "company": "Infragraph", - "phone": "829-402-3796", - "email": "gianna@infragraph.com" - }, - { - "id": 8557, - "guid": "fd6b6816-2acc-4047-87ba-20962ebed3ac", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Angelina Abramson", - "company": "Videobanc", - "phone": "837-462-3122", - "email": "angelina@videobanc.com" - }, - { - "id": 8558, - "guid": "9b56774a-ba97-4ef6-bd63-736c056aae2d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Ashley Milton", - "company": "Syssoft", - "phone": "859-469-3279", - "email": "ashley@syssoft.com" - }, - { - "id": 8559, - "guid": "352979c7-91c2-4879-abdf-5201e9b8a24c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Destiny Hawkins", - "company": "Technogra", - "phone": "864-562-2818", - "email": "destiny@technogra.com" - }, - { - "id": 8560, - "guid": "c2580f0c-38e0-4440-971b-1a52ec3e523f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Autumn Calhoun", - "company": "Generola", - "phone": "821-465-3331", - "email": "autumn@generola.com" - }, - { - "id": 8561, - "guid": "73487cbe-68ed-4558-9d5d-5d8d2f9c7e31", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Freeman", - "company": "Orthosoft", - "phone": "890-416-2733", - "email": "maya@orthosoft.com" - }, - { - "id": 8562, - "guid": "a63ec5a4-5785-4cd2-af1e-9dfb7de75a2b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Gerald", - "company": "Anaframe", - "phone": "841-565-2662", - "email": "katelyn@anaframe.com" - }, - { - "id": 8563, - "guid": "3066f223-cad5-4da1-a827-2998149345bb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Neal", - "company": "iEnland", - "phone": "848-455-3822", - "email": "allison@ienland.com" - }, - { - "id": 8564, - "guid": "4b814d7f-d050-48b6-832d-82fdb8c72e21", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaylee Hawkins", - "company": "iOptystix", - "phone": "809-408-2254", - "email": "kaylee@ioptystix.com" - }, - { - "id": 8565, - "guid": "2f2fd307-a5e2-4482-90c7-23a07840230a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Hannah Ogden", - "company": "SysUSA", - "phone": "865-458-2129", - "email": "hannah@sysusa.com" - }, - { - "id": 8566, - "guid": "f38d2c72-b614-42b2-9947-17e9313f0d5d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Morgan Haig", - "company": "RoboAerlogix", - "phone": "869-587-3004", - "email": "morgan@roboaerlogix.com" - }, - { - "id": 8567, - "guid": "374496ee-216f-4fa5-b50a-63edc550b652", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Hardman", - "company": "Compuamerica", - "phone": "894-513-2212", - "email": "natalie@compuamerica.com" - }, - { - "id": 8568, - "guid": "183acf1c-ae23-49d0-b73e-5bf5bfde7f85", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Anna Freeman", - "company": "US Infratouch", - "phone": "877-412-3832", - "email": "anna@us infratouch.com" - }, - { - "id": 8569, - "guid": "86c12017-fdbe-4f48-89a7-a5197cebebe7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Angelina Wesley", - "company": "Xeicon", - "phone": "889-491-3609", - "email": "angelina@xeicon.com" - }, - { - "id": 8570, - "guid": "01f98363-0c1d-4172-9010-2b79a7b9c958", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Watson", - "company": "Textiqua", - "phone": "855-449-2521", - "email": "lauren@textiqua.com" - }, - { - "id": 8571, - "guid": "e75aad1a-dea3-45f0-bbd3-fe07498d0f8a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Lauren Wesley", - "company": "Thermotomic", - "phone": "825-441-2853", - "email": "lauren@thermotomic.com" - }, - { - "id": 8572, - "guid": "39e49ca4-f20f-4d8d-b7bb-d170768088d0", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Gilmore", - "company": "Truetomic", - "phone": "883-563-2224", - "email": "emily@truetomic.com" - }, - { - "id": 8573, - "guid": "3007d8fb-3d9b-4779-a9f8-b6d9fcf9d2f5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Morrison", - "company": "Celgra", - "phone": "813-559-3806", - "email": "alyssa@celgra.com" - }, - { - "id": 8574, - "guid": "747504ef-af40-48ba-94cc-cd40c7a3fdb2", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Haig", - "company": "Proline", - "phone": "800-456-3351", - "email": "isabelle@proline.com" - }, - { - "id": 8575, - "guid": "2bf565a0-fe5a-4bf3-b4ed-03aa85e19acc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Vaughan", - "company": "Techtron", - "phone": "823-595-3440", - "email": "isabelle@techtron.com" - }, - { - "id": 8576, - "guid": "5567de2d-507e-45ca-a0fe-6ec7330e23ae", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Thorndike", - "company": "Enlogia", - "phone": "886-473-3188", - "email": "peyton@enlogia.com" - }, - { - "id": 8577, - "guid": "201449dd-6759-430f-9404-dc7f95552cc0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Destiny Milton", - "company": "Xeicon", - "phone": "841-473-3224", - "email": "destiny@xeicon.com" - }, - { - "id": 8578, - "guid": "bc76fb37-a57e-415e-93ce-6c51ceae5176", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoe Adamson", - "company": "Systheon", - "phone": "806-577-2357", - "email": "zoe@systheon.com" - }, - { - "id": 8579, - "guid": "fdf0e357-d7ab-4b80-aee8-9151bab8bd5f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Warren", - "company": "Ventanium", - "phone": "891-562-3253", - "email": "zoe@ventanium.com" - }, - { - "id": 8580, - "guid": "523bde9c-13f2-430e-9e22-4bc454d26233", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Madeline Crossman", - "company": "Celgra", - "phone": "810-476-2801", - "email": "madeline@celgra.com" - }, - { - "id": 8581, - "guid": "b611f259-e5e5-4f2b-b753-7ce645a85d80", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Goodman", - "company": "Orthomedia", - "phone": "841-530-3533", - "email": "faith@orthomedia.com" - }, - { - "id": 8582, - "guid": "0316e2a9-24c7-4653-8b37-1e227103fe12", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Gill", - "company": "Anaframe", - "phone": "815-542-3875", - "email": "sofia@anaframe.com" - }, - { - "id": 8583, - "guid": "e4a60fe6-b971-4c99-b36b-ba6304bf0581", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emma Fisher", - "company": "iSkyvaco", - "phone": "894-485-2295", - "email": "emma@iskyvaco.com" - }, - { - "id": 8584, - "guid": "ce27d9d2-1a2a-4e6d-8f53-cea1a4cd208a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Makayla Otis", - "company": "Safeagra", - "phone": "872-524-3994", - "email": "makayla@safeagra.com" - }, - { - "id": 8585, - "guid": "5c927ccc-9073-49bd-aba2-79892633b36c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaitlyn Gibbs", - "company": "US Omnigraphik", - "phone": "871-467-2038", - "email": "kaitlyn@us omnigraphik.com" - }, - { - "id": 8586, - "guid": "13a2b70e-9d5a-4e2b-94b7-85980b377d63", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Elizabeth Nelson", - "company": "Infraique", - "phone": "827-599-2994", - "email": "elizabeth@infraique.com" - }, - { - "id": 8587, - "guid": "6e395e28-4802-471a-8bb3-e67539f9c087", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Chandter", - "company": "Gigaura", - "phone": "831-578-2523", - "email": "melanie@gigaura.com" - }, - { - "id": 8588, - "guid": "df91c777-9c8d-40f2-9f11-1cdfdba8c23d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Jessica Gerald", - "company": "Mescatron", - "phone": "810-434-2317", - "email": "jessica@mescatron.com" - }, - { - "id": 8589, - "guid": "0ba41066-bb82-4488-8ec7-f5d530fc6723", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Creighton", - "company": "Gigaura", - "phone": "834-595-3853", - "email": "alexa@gigaura.com" - }, - { - "id": 8590, - "guid": "19bdc713-8e26-4703-8983-6119421d5b47", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mariah Hardman", - "company": "Titanirola", - "phone": "860-473-2495", - "email": "mariah@titanirola.com" - }, - { - "id": 8591, - "guid": "3d874cc3-13c9-4deb-ba7a-026bfb5c1ade", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison Chapman", - "company": "Venconix", - "phone": "836-419-2881", - "email": "madison@venconix.com" - }, - { - "id": 8592, - "guid": "90fd9d31-59f1-44cb-a9c5-2863a05805f2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Cramer", - "company": "Truegate", - "phone": "846-410-2828", - "email": "serenity@truegate.com" - }, - { - "id": 8593, - "guid": "c5c7df07-51c3-492b-87c2-f894d5620b40", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Ward", - "company": "Orthosoft", - "phone": "827-575-2380", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 8594, - "guid": "4c19cf54-5ce5-4eb5-baec-f681fee40c00", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Makayla Fisher", - "company": "Jamrola", - "phone": "833-536-3626", - "email": "makayla@jamrola.com" - }, - { - "id": 8595, - "guid": "a73f5de1-4750-4955-a42d-5a1448ed934a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maya Sherlock", - "company": "Xeicon", - "phone": "866-447-2844", - "email": "maya@xeicon.com" - }, - { - "id": 8596, - "guid": "74cf733d-4098-44c2-a0dd-1a026dc35ac8", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Camila Daniels", - "company": "Entcast", - "phone": "848-578-2012", - "email": "camila@entcast.com" - }, - { - "id": 8597, - "guid": "9c88dc80-a074-4b0d-938a-4a99bc37d033", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Gilson", - "company": "iOptystix", - "phone": "818-566-3872", - "email": "maya@ioptystix.com" - }, - { - "id": 8598, - "guid": "5530fde3-fbfb-4669-8876-f5de20e24c7e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Otis", - "company": "Superscope", - "phone": "841-454-2780", - "email": "alexandra@superscope.com" - }, - { - "id": 8599, - "guid": "ee93476a-f852-44ff-921f-30bb189a84e7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Taylor Miln", - "company": "Robocomm", - "phone": "820-447-2391", - "email": "taylor@robocomm.com" - }, - { - "id": 8600, - "guid": "b8cf9ed6-3894-4986-9dc4-8ca9d7841340", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Brooks", - "company": "Aluco", - "phone": "820-478-3861", - "email": "molly@aluco.com" - }, - { - "id": 8601, - "guid": "d6c2c6ad-1b5a-466f-a397-8426ac4fa380", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Zoey Hancock", - "company": "Mescatron", - "phone": "809-453-2036", - "email": "zoey@mescatron.com" - }, - { - "id": 8602, - "guid": "46ce300f-797c-4787-9b90-5bc9f67a24d0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Rachel Winter", - "company": "Raylog", - "phone": "845-447-2899", - "email": "rachel@raylog.com" - }, - { - "id": 8603, - "guid": "4dc6b31a-f725-4792-b70a-185fbeacbc88", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Gate", - "company": "Mescatron", - "phone": "865-547-3834", - "email": "mariah@mescatron.com" - }, - { - "id": 8604, - "guid": "3749beb7-a8c3-4488-9132-86280022e35c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Ogden", - "company": "iQualcar", - "phone": "828-427-3758", - "email": "madeline@iqualcar.com" - }, - { - "id": 8605, - "guid": "fe9e9167-0da2-45fa-be39-6c53b3be032d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Eva Oldman", - "company": "eSteganoergy", - "phone": "862-481-2668", - "email": "eva@esteganoergy.com" - }, - { - "id": 8606, - "guid": "81848eb2-dddc-4eb3-83ff-1d12d4c24c39", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Chloe Timmons", - "company": "Unologic", - "phone": "822-449-3217", - "email": "chloe@unologic.com" - }, - { - "id": 8607, - "guid": "15e19520-8fd8-41e2-9e1b-36c5a77353df", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katherine Owen", - "company": "InfoAirway", - "phone": "834-541-3676", - "email": "katherine@infoairway.com" - }, - { - "id": 8608, - "guid": "cafce564-5683-4c9c-9cbf-d62fb4275552", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jasmine Oliver", - "company": "Compuamerica", - "phone": "889-595-2825", - "email": "jasmine@compuamerica.com" - }, - { - "id": 8609, - "guid": "4dfcb9dd-2bc7-40b8-b375-6cbaa1071603", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Hardman", - "company": "Robotomic", - "phone": "868-591-3969", - "email": "addison@robotomic.com" - }, - { - "id": 8610, - "guid": "af6791aa-5185-4e71-89f4-785cd75af95f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Destiny Smith", - "company": "Idmax", - "phone": "887-464-3584", - "email": "destiny@idmax.com" - }, - { - "id": 8611, - "guid": "1b3d8145-0c70-4b81-9f4c-80f8d4d6bf42", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Morrison", - "company": "Hypervaco", - "phone": "882-551-2953", - "email": "mariah@hypervaco.com" - }, - { - "id": 8612, - "guid": "ff7486c0-9793-41e1-9c34-6145eb9f8100", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Waller", - "company": "Xeicon", - "phone": "814-407-3086", - "email": "zoey@xeicon.com" - }, - { - "id": 8613, - "guid": "e9d7f12e-2b33-437f-9384-3e9fdbf18663", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Gerald", - "company": "SysVenamerica", - "phone": "870-585-2351", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 8614, - "guid": "4dc495b2-8873-43c9-8292-de78d20ef8e1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Day", - "company": "Turbomart", - "phone": "814-579-2267", - "email": "abigail@turbomart.com" - }, - { - "id": 8615, - "guid": "3dc16901-fbc4-40ea-85a8-6781a9a4a078", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Young", - "company": "Textiqua", - "phone": "857-549-3157", - "email": "zoey@textiqua.com" - }, - { - "id": 8616, - "guid": "7014b3d6-65ce-4762-a303-f0bfd05cf165", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophia Miers", - "company": "Syssoft", - "phone": "846-592-3949", - "email": "sophia@syssoft.com" - }, - { - "id": 8617, - "guid": "71b59733-0e62-4a30-b62b-b2ad39a1715a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Thorndike", - "company": "Safeagra", - "phone": "867-549-2495", - "email": "isabella@safeagra.com" - }, - { - "id": 8618, - "guid": "b125c98d-216e-48c9-9984-a61fbd2c4b07", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Young", - "company": "iMedconik", - "phone": "882-516-2321", - "email": "bailey@imedconik.com" - }, - { - "id": 8619, - "guid": "c97c49aa-9fd7-43bc-84ae-aa5fb66812c1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Campbell", - "company": "Pacwest", - "phone": "884-503-3022", - "email": "chloe@pacwest.com" - }, - { - "id": 8620, - "guid": "b58cb025-dd13-433c-aeb4-3bdef0d28a2b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Hancock", - "company": "Westmedia", - "phone": "850-435-2095", - "email": "evelyn@westmedia.com" - }, - { - "id": 8621, - "guid": "76ccb129-7c9b-4559-bd9e-2ac7087b4328", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Hodges", - "company": "Inridium", - "phone": "892-547-2906", - "email": "alexa@inridium.com" - }, - { - "id": 8622, - "guid": "74244231-07c8-4941-a8bd-aa685019b027", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Smith", - "company": "Jamrola", - "phone": "869-542-3104", - "email": "taylor@jamrola.com" - }, - { - "id": 8623, - "guid": "f546e0ee-9692-44ec-b008-8e2ccb0055df", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Miller", - "company": "iMedconik", - "phone": "819-580-2483", - "email": "emily@imedconik.com" - }, - { - "id": 8624, - "guid": "91533688-a37c-4ac1-9dba-e5b6654202f0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Brooks", - "company": "Pericenta", - "phone": "804-538-3890", - "email": "peyton@pericenta.com" - }, - { - "id": 8625, - "guid": "93fb94c9-9883-445e-90cd-4357257a90a9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Mercer", - "company": "Fibroserve", - "phone": "850-453-3649", - "email": "molly@fibroserve.com" - }, - { - "id": 8626, - "guid": "48eee11e-388a-4039-a757-67a6290e6237", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Trinity Calhoun", - "company": "US Infratouch", - "phone": "858-496-2380", - "email": "trinity@us infratouch.com" - }, - { - "id": 8627, - "guid": "a9abf056-8873-4cf3-aa80-acc7bc4adb7d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Vaughan", - "company": "InfoAirway", - "phone": "874-595-3459", - "email": "autumn@infoairway.com" - }, - { - "id": 8628, - "guid": "1477eedd-9428-40dd-ad3b-4cf53f70efe7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Chandter", - "company": "Westgate", - "phone": "845-442-3090", - "email": "khloe@westgate.com" - }, - { - "id": 8629, - "guid": "0b8ff6a2-a729-4f0d-9a8b-b2b6aaf9663b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Caroline Otis", - "company": "Teratopia", - "phone": "819-572-2760", - "email": "caroline@teratopia.com" - }, - { - "id": 8630, - "guid": "2031d3e1-c63d-40a9-b636-554c6774372d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Destiny WifKinson", - "company": "Netseco", - "phone": "894-489-2274", - "email": "destiny@netseco.com" - }, - { - "id": 8631, - "guid": "fe332cc6-9eb7-4b09-a0e7-227fe55cd89f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Wesley", - "company": "iOptystix", - "phone": "846-558-3099", - "email": "alexis@ioptystix.com" - }, - { - "id": 8632, - "guid": "a598b20f-1c52-414f-a260-d693d41bb47a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Carter", - "company": "Entcast", - "phone": "828-460-3669", - "email": "serenity@entcast.com" - }, - { - "id": 8633, - "guid": "ffdb9c98-9c74-40a4-b80e-081453e3a20b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Murphy", - "company": "Idmax", - "phone": "861-406-2519", - "email": "abigail@idmax.com" - }, - { - "id": 8634, - "guid": "ecfc141a-aa2b-4fb5-8f27-7789a8c04888", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Neal", - "company": "Genland", - "phone": "868-553-2497", - "email": "jasmine@genland.com" - }, - { - "id": 8635, - "guid": "e7a5b2e1-a235-4039-b1e7-13b802ece755", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Fulton", - "company": "Celgra", - "phone": "882-477-2346", - "email": "angelina@celgra.com" - }, - { - "id": 8636, - "guid": "17c3c61a-ba7c-4e6d-bf26-ac8392d038cb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Croftoon", - "company": "Fibrotouch", - "phone": "865-589-2523", - "email": "kayla@fibrotouch.com" - }, - { - "id": 8637, - "guid": "59eff461-7670-4501-8572-61af558d2240", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Warren", - "company": "Fibrotouch", - "phone": "841-522-3689", - "email": "anna@fibrotouch.com" - }, - { - "id": 8638, - "guid": "54cc7624-5991-431c-bdcb-5b5cd4320a98", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Wood", - "company": "Cryptotegrity", - "phone": "894-576-3207", - "email": "andrea@cryptotegrity.com" - }, - { - "id": 8639, - "guid": "ad65aca4-24f2-4330-8fed-6c149b8a45c6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Vanessa Fulton", - "company": "Keytheon", - "phone": "827-417-3062", - "email": "vanessa@keytheon.com" - }, - { - "id": 8640, - "guid": "11e0a64c-2dba-47f5-8baf-05746a5555c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Chandter", - "company": "Infraique", - "phone": "862-419-2074", - "email": "elizabeth@infraique.com" - }, - { - "id": 8641, - "guid": "25661819-6fe0-4929-8362-0ddd5b8d8d73", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Charlson", - "company": "SysUSA", - "phone": "801-411-3166", - "email": "gabrielle@sysusa.com" - }, - { - "id": 8642, - "guid": "d9b5c341-49d5-4615-bc57-8acb7b634684", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Nevaeh Warren", - "company": "Fibrotopia", - "phone": "812-554-2602", - "email": "nevaeh@fibrotopia.com" - }, - { - "id": 8643, - "guid": "b983897c-736f-41ab-8e89-dc71c1116ddc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Ward", - "company": "Fibrotopia", - "phone": "887-543-2744", - "email": "chloe@fibrotopia.com" - }, - { - "id": 8644, - "guid": "c7611531-526c-46c4-af48-d4f11d1d83db", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Addison Wood", - "company": "Rapigrafix", - "phone": "885-428-3556", - "email": "addison@rapigrafix.com" - }, - { - "id": 8645, - "guid": "1a2446f3-013d-4858-a605-0865f8d361b1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Chloe Wood", - "company": "Genland", - "phone": "896-541-3929", - "email": "chloe@genland.com" - }, - { - "id": 8646, - "guid": "47de666a-0895-4139-82ba-e537f65e1799", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Arianna Hancock", - "company": "Conotomics", - "phone": "894-460-2558", - "email": "arianna@conotomics.com" - }, - { - "id": 8647, - "guid": "8a09c8b6-5a68-4e55-934b-72b9fde58f90", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jasmine Gilbert", - "company": "iMedconik", - "phone": "836-448-2646", - "email": "jasmine@imedconik.com" - }, - { - "id": 8648, - "guid": "7e959fb1-b82f-4641-a28b-696225b97174", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Brooks", - "company": "Infraique", - "phone": "820-531-3576", - "email": "taylor@infraique.com" - }, - { - "id": 8649, - "guid": "826de13c-4e54-4e90-a1a5-0cbd69fe570e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kayla Gustman", - "company": "Celgra", - "phone": "893-598-2052", - "email": "kayla@celgra.com" - }, - { - "id": 8650, - "guid": "1e8d33dd-b1e3-4d7f-8176-886ac29210f8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Smith", - "company": "Syssoft", - "phone": "896-493-2696", - "email": "sophia@syssoft.com" - }, - { - "id": 8651, - "guid": "31896e51-2f5d-4ef1-a470-0d3aac90cef7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Payton Carrington", - "company": "US Infratouch", - "phone": "833-550-3184", - "email": "payton@us infratouch.com" - }, - { - "id": 8652, - "guid": "427bde85-8b3a-4b32-9496-e27db90ef504", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Addison Gill", - "company": "Infraique", - "phone": "868-437-2710", - "email": "addison@infraique.com" - }, - { - "id": 8653, - "guid": "317a4f7b-ef08-4f04-ac4b-6a4e105377ef", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mariah Youmans", - "company": "Truegate", - "phone": "861-543-3408", - "email": "mariah@truegate.com" - }, - { - "id": 8654, - "guid": "56a1305b-103e-4a61-a9cf-fde17425e9e1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Samantha Chapman", - "company": "Openserve", - "phone": "822-409-2355", - "email": "samantha@openserve.com" - }, - { - "id": 8655, - "guid": "445e2536-3991-4cad-b62a-891dbd562eb0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Wayne", - "company": "Ameritron", - "phone": "835-499-2612", - "email": "trinity@ameritron.com" - }, - { - "id": 8656, - "guid": "63a33c07-4fe7-4343-b176-19c351491c81", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kylie Hoggarth", - "company": "Sontopia", - "phone": "836-522-2129", - "email": "kylie@sontopia.com" - }, - { - "id": 8657, - "guid": "6089b05d-511d-4830-aeca-0fd7f748c779", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Murphy", - "company": "Robotemplate", - "phone": "840-440-2342", - "email": "jasmine@robotemplate.com" - }, - { - "id": 8658, - "guid": "6fbc7015-afea-48a0-9393-83cb26e4183e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Chapman", - "company": "Skydata", - "phone": "841-523-3575", - "email": "sophia@skydata.com" - }, - { - "id": 8659, - "guid": "09d844eb-c830-4bc5-bed4-fa624f1d4dec", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Jessica Winter", - "company": "Tekcar", - "phone": "801-597-3596", - "email": "jessica@tekcar.com" - }, - { - "id": 8660, - "guid": "97c1045e-5237-481f-a9bc-a69e60527810", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emma Thorndike", - "company": "Proline", - "phone": "838-463-3416", - "email": "emma@proline.com" - }, - { - "id": 8661, - "guid": "8d8b06e2-d868-46d7-86b5-99ffe5a59330", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Gilbert", - "company": "RoboAerlogix", - "phone": "818-482-2917", - "email": "sarah@roboaerlogix.com" - }, - { - "id": 8662, - "guid": "a161aa5c-3475-42cf-8338-844fe9b74287", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sofia Goodman", - "company": "Indisco", - "phone": "884-479-2372", - "email": "sofia@indisco.com" - }, - { - "id": 8663, - "guid": "027b4523-a14c-4b6a-b615-523c09092fd0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Morgan Croftoon", - "company": "Dynarama", - "phone": "892-454-3025", - "email": "morgan@dynarama.com" - }, - { - "id": 8664, - "guid": "923c9c04-76fa-4833-862d-3153513548d8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lauren Morrison", - "company": "Transtouch", - "phone": "889-527-2598", - "email": "lauren@transtouch.com" - }, - { - "id": 8665, - "guid": "ad49407f-5bc9-4f47-aa0c-b3373ec7f293", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Hailey Oswald", - "company": "Steganoconiche", - "phone": "882-477-3475", - "email": "hailey@steganoconiche.com" - }, - { - "id": 8666, - "guid": "f9043d20-5110-47ea-806b-e1bfa1c85478", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Anna Carrington", - "company": "Generola", - "phone": "839-586-3333", - "email": "anna@generola.com" - }, - { - "id": 8667, - "guid": "b69043ce-49e6-43fa-b34b-2fee952f28f3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Ava Molligan", - "company": "Jamrola", - "phone": "899-429-3017", - "email": "ava@jamrola.com" - }, - { - "id": 8668, - "guid": "1ae22bc2-44f3-47cc-b308-18c9632d5fbd", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kaylee Gilbert", - "company": "Nanobanc", - "phone": "874-511-3807", - "email": "kaylee@nanobanc.com" - }, - { - "id": 8669, - "guid": "231d6271-d45c-43bb-a535-bdaa17e22b68", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madelyn Osborne", - "company": "RoboAerlogix", - "phone": "838-564-3735", - "email": "madelyn@roboaerlogix.com" - }, - { - "id": 8670, - "guid": "d2e78d2b-1902-4de5-b458-cf7f7f8668b0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Walkman", - "company": "Multitiqua", - "phone": "880-521-3844", - "email": "kayla@multitiqua.com" - }, - { - "id": 8671, - "guid": "ecdcc894-8996-4cec-b031-e732816bd7c0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Vance", - "company": "Orthomedia", - "phone": "898-463-2966", - "email": "andrea@orthomedia.com" - }, - { - "id": 8672, - "guid": "d666817c-1bee-4cc7-8446-f821328f07a4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Nathan", - "company": "Westgate", - "phone": "851-553-3993", - "email": "bailey@westgate.com" - }, - { - "id": 8673, - "guid": "591cac81-94d0-46ab-ae5c-787f795df9d1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Khloe Cook", - "company": "Truetomic", - "phone": "809-501-2027", - "email": "khloe@truetomic.com" - }, - { - "id": 8674, - "guid": "62981cc2-8ea4-4a6b-a7f6-595271a34325", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Oliver", - "company": "Tekcar", - "phone": "848-491-2572", - "email": "payton@tekcar.com" - }, - { - "id": 8675, - "guid": "00fc873e-c696-4435-8ee3-9343a2b5c185", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Allison Charlson", - "company": "Qualserve", - "phone": "830-455-2795", - "email": "allison@qualserve.com" - }, - { - "id": 8676, - "guid": "4a5d41a9-41b4-42b2-9923-a0470ec0b4c8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Conors", - "company": "Titanigraf", - "phone": "881-574-3725", - "email": "gabriella@titanigraf.com" - }, - { - "id": 8677, - "guid": "4e8f632d-b7cd-46f9-ae37-13d4cefafa7a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Chandter", - "company": "Mescaridic", - "phone": "885-505-2310", - "email": "elizabeth@mescaridic.com" - }, - { - "id": 8678, - "guid": "dd934d2c-bc47-43c0-988e-54aaa9757d71", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Gerald", - "company": "Westgate", - "phone": "862-423-2421", - "email": "zoey@westgate.com" - }, - { - "id": 8679, - "guid": "35d1a3d1-fcb3-4698-bcc5-e5a1e875cd11", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Melanie Gustman", - "company": "Robocomm", - "phone": "810-495-3106", - "email": "melanie@robocomm.com" - }, - { - "id": 8680, - "guid": "30cb7666-f001-4332-a403-0fa885ea45f4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Faith Gustman", - "company": "Titanigraf", - "phone": "892-421-2126", - "email": "faith@titanigraf.com" - }, - { - "id": 8681, - "guid": "80090f5d-d3de-4000-8da8-ef81ed73880f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Bailey Gill", - "company": "iEnland", - "phone": "897-449-3141", - "email": "bailey@ienland.com" - }, - { - "id": 8682, - "guid": "8bb36a07-2e05-4325-a3b7-0cea91337572", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooke Thomson", - "company": "Pericenta", - "phone": "838-543-2691", - "email": "brooke@pericenta.com" - }, - { - "id": 8683, - "guid": "36dcc537-4e46-4918-8695-287cdb01075d", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kylie Hawkins", - "company": "Inridium", - "phone": "850-494-3543", - "email": "kylie@inridium.com" - }, - { - "id": 8684, - "guid": "846fd3b6-318f-4fc2-9978-d8bcee10b230", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Savannah Harrison", - "company": "Teraserv", - "phone": "800-510-3592", - "email": "savannah@teraserv.com" - }, - { - "id": 8685, - "guid": "4e6db245-d2a2-4649-a47e-66453389a3c3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Nathan", - "company": "OpKeycomm", - "phone": "807-514-2653", - "email": "avery@opkeycomm.com" - }, - { - "id": 8686, - "guid": "028d8b89-bfa2-4350-8833-9713c6a7b323", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Gate", - "company": "US Infratouch", - "phone": "871-435-2435", - "email": "payton@us infratouch.com" - }, - { - "id": 8687, - "guid": "ab7c824a-6048-43f6-9214-30cfa6db83bb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Carey", - "company": "Turbomart", - "phone": "896-502-3517", - "email": "emily@turbomart.com" - }, - { - "id": 8688, - "guid": "6e889bba-4bfe-4385-8902-e400769801ba", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Anna Ford", - "company": "Safeagra", - "phone": "862-559-3968", - "email": "anna@safeagra.com" - }, - { - "id": 8689, - "guid": "2f7ef788-c705-41ce-bf0a-b0a906582836", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Valeria Oliver", - "company": "iOptystix", - "phone": "848-428-3933", - "email": "valeria@ioptystix.com" - }, - { - "id": 8690, - "guid": "4dc6cc99-4de9-42fb-acf6-d2862443206a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Charlotte Oldridge", - "company": "Openserve", - "phone": "811-530-3453", - "email": "charlotte@openserve.com" - }, - { - "id": 8691, - "guid": "b8527fe0-c48c-4ec0-985d-e1007ae0bbea", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Turner", - "company": "Westtomik", - "phone": "854-454-2016", - "email": "trinity@westtomik.com" - }, - { - "id": 8692, - "guid": "ed0be1ca-a06c-4e13-92a1-f919daa43507", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Rachel Michaelson", - "company": "Westtomik", - "phone": "882-597-2186", - "email": "rachel@westtomik.com" - }, - { - "id": 8693, - "guid": "f5861758-3b3f-4b85-8af8-d4d7c2ec609d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Chesterton", - "company": "Unconix", - "phone": "846-524-2970", - "email": "isabella@unconix.com" - }, - { - "id": 8694, - "guid": "c5d0b6bd-d2d5-4788-a619-afbd3a17b7ed", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna Fisher", - "company": "Quintegrity", - "phone": "873-592-3193", - "email": "gianna@quintegrity.com" - }, - { - "id": 8695, - "guid": "99092010-4b0f-42a5-ba1e-b9718ff41121", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Sydney Chapman", - "company": "Ameritron", - "phone": "886-508-2072", - "email": "sydney@ameritron.com" - }, - { - "id": 8696, - "guid": "f730985e-217c-439d-8205-bf9d309175f3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Mercer", - "company": "Infraique", - "phone": "867-544-2600", - "email": "peyton@infraique.com" - }, - { - "id": 8697, - "guid": "1e46163d-2cee-4134-add3-18dc32920d0a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Andrea Campbell", - "company": "Anagraph", - "phone": "888-564-3908", - "email": "andrea@anagraph.com" - }, - { - "id": 8698, - "guid": "8bb57834-df37-4818-8f64-781350988bb3", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Trinity Ford", - "company": "Proline", - "phone": "844-573-2936", - "email": "trinity@proline.com" - }, - { - "id": 8699, - "guid": "a70edab7-244b-46a0-8ee2-72012edee6f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Oldridge", - "company": "Proline", - "phone": "868-458-2069", - "email": "allison@proline.com" - }, - { - "id": 8700, - "guid": "6ec6f4a5-c36e-4cf0-a20d-51f780464cf2", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Molly Gibbs", - "company": "Unologic", - "phone": "895-468-3330", - "email": "molly@unologic.com" - }, - { - "id": 8701, - "guid": "2bb2544d-9bd1-4cc6-adef-e39ed8b278ec", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gabriella Wesley", - "company": "Syssoft", - "phone": "860-433-2627", - "email": "gabriella@syssoft.com" - }, - { - "id": 8702, - "guid": "06eec316-bcc7-4f48-8004-fca3e00747d1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Gabriella Thorndike", - "company": "Allphysiche", - "phone": "838-555-3029", - "email": "gabriella@allphysiche.com" - }, - { - "id": 8703, - "guid": "ca042c0d-04dc-4ab8-9096-e9e992184d2c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Rachel Gustman", - "company": "Anaframe", - "phone": "826-457-2458", - "email": "rachel@anaframe.com" - }, - { - "id": 8704, - "guid": "20088635-c3b4-4246-8f50-ac2c892cae94", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Walkman", - "company": "Hypervaco", - "phone": "849-458-2092", - "email": "trinity@hypervaco.com" - }, - { - "id": 8705, - "guid": "d541cdb2-cd48-4038-a030-f35b4a94fb70", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Hodges", - "company": "Navivacs", - "phone": "880-589-3420", - "email": "madeline@navivacs.com" - }, - { - "id": 8706, - "guid": "30a52e9f-f577-4970-9e5d-bf776841a9fa", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Higgins", - "company": "Sontopia", - "phone": "881-566-3573", - "email": "makayla@sontopia.com" - }, - { - "id": 8707, - "guid": "4761a428-31b7-4256-98b2-e764f6dcb1d2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Valeria Gilmore", - "company": "Quintegrity", - "phone": "841-454-3359", - "email": "valeria@quintegrity.com" - }, - { - "id": 8708, - "guid": "b617d8a5-ac0d-4da9-99ab-4e7a6dc53693", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Katelyn Morrison", - "company": "Superscope", - "phone": "832-433-3414", - "email": "katelyn@superscope.com" - }, - { - "id": 8709, - "guid": "b4504572-8cbe-4f4d-b145-df110e7bf9a1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Hamphrey", - "company": "Multitiqua", - "phone": "850-413-3139", - "email": "hannah@multitiqua.com" - }, - { - "id": 8710, - "guid": "60420a28-040e-4be2-aa4f-37f36542eec6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Allison Smith", - "company": "Multitiqua", - "phone": "843-516-3607", - "email": "allison@multitiqua.com" - }, - { - "id": 8711, - "guid": "434d0086-ce29-45a8-9c7f-e509cb0ca333", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Leah Carroll", - "company": "Entcast", - "phone": "838-566-2525", - "email": "leah@entcast.com" - }, - { - "id": 8712, - "guid": "a9f6d811-5e21-45ea-ae20-f2a50518cee9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kylie Oldman", - "company": "Enlogia", - "phone": "831-426-3903", - "email": "kylie@enlogia.com" - }, - { - "id": 8713, - "guid": "f8701fcb-9ff7-4d46-a616-cc9d6f5d3bb8", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Faith Oldridge", - "company": "Steganoconiche", - "phone": "891-401-2673", - "email": "faith@steganoconiche.com" - }, - { - "id": 8714, - "guid": "127c9cba-9c1c-47af-a8bf-6b02e4174470", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katelyn Chapman", - "company": "SysVenamerica", - "phone": "889-511-2406", - "email": "katelyn@sysvenamerica.com" - }, - { - "id": 8715, - "guid": "e5f32096-4972-4c7a-8e30-b8904d356837", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Leah Freeman", - "company": "iMedconik", - "phone": "811-444-2421", - "email": "leah@imedconik.com" - }, - { - "id": 8716, - "guid": "bfee4ff4-031f-4bab-9992-95a603210897", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Audrey Adamson", - "company": "Quintegrity", - "phone": "857-490-3730", - "email": "audrey@quintegrity.com" - }, - { - "id": 8717, - "guid": "5da377ca-3d92-49ba-ac35-2a83334c6746", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Conors", - "company": "Genland", - "phone": "804-405-2026", - "email": "morgan@genland.com" - }, - { - "id": 8718, - "guid": "99efedfe-b6c4-41b2-9548-39055531a826", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Anna Hancock", - "company": "Orthosoft", - "phone": "846-498-2178", - "email": "anna@orthosoft.com" - }, - { - "id": 8719, - "guid": "2423568d-dcbd-4d6f-a24f-97b1d6fd3e8e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Isabella Gate", - "company": "Titanigraf", - "phone": "884-511-3754", - "email": "isabella@titanigraf.com" - }, - { - "id": 8720, - "guid": "f5caa2c1-1148-4790-864e-e88843e1eb57", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aaliyah Ogden", - "company": "eSteganoergy", - "phone": "836-423-3580", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 8721, - "guid": "bda4f5af-ebb3-4174-8113-99b64e5e4991", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gabriella Milton", - "company": "eSteganoergy", - "phone": "893-515-2424", - "email": "gabriella@esteganoergy.com" - }, - { - "id": 8722, - "guid": "314a3ec3-0ec2-4ff2-a88c-4de95f15ce54", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Crossman", - "company": "Conotomics", - "phone": "828-490-2685", - "email": "jocelyn@conotomics.com" - }, - { - "id": 8723, - "guid": "2e0218d4-e891-49d6-b942-d9cd271b5fc2", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Katelyn Chandter", - "company": "Ameritron", - "phone": "827-574-2840", - "email": "katelyn@ameritron.com" - }, - { - "id": 8724, - "guid": "0ec8c918-a7c7-49da-aed7-0154bb7a0277", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Miller", - "company": "Netseco", - "phone": "804-456-3452", - "email": "vanessa@netseco.com" - }, - { - "id": 8725, - "guid": "c175dfd4-634a-4a57-a968-563f275f5267", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Miers", - "company": "Jamrola", - "phone": "887-427-2346", - "email": "morgan@jamrola.com" - }, - { - "id": 8726, - "guid": "15f07203-d5c3-4fb5-a9cb-0643cb3643bd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Vaughan", - "company": "Quintegrity", - "phone": "870-569-2150", - "email": "trinity@quintegrity.com" - }, - { - "id": 8727, - "guid": "a8110813-4e90-4d0c-97ca-1bea6eadc2e9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Goldman", - "company": "Safetrust", - "phone": "892-536-2629", - "email": "riley@safetrust.com" - }, - { - "id": 8728, - "guid": "a2b612ce-fdb1-44e4-a97a-11d6339638ac", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Sherlock", - "company": "Titanigraf", - "phone": "863-528-2455", - "email": "taylor@titanigraf.com" - }, - { - "id": 8729, - "guid": "8605b3b8-65f6-421d-9ec6-fd5ade1db50a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Waller", - "company": "US Infratouch", - "phone": "890-449-2852", - "email": "sarah@us infratouch.com" - }, - { - "id": 8730, - "guid": "27c56790-3a23-44e4-8498-72c20feca562", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Payton Galbraith", - "company": "Inridium", - "phone": "863-544-3702", - "email": "payton@inridium.com" - }, - { - "id": 8731, - "guid": "91420fe5-52fc-43a7-9434-b0308be97287", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Autumn Neal", - "company": "iMedconik", - "phone": "820-418-2560", - "email": "autumn@imedconik.com" - }, - { - "id": 8732, - "guid": "085b2605-d93a-4bfa-a799-7186fb45923d", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Carter", - "company": "Qualserve", - "phone": "878-594-3609", - "email": "elizabeth@qualserve.com" - }, - { - "id": 8733, - "guid": "7c1d0a0e-f8ce-4aac-97a5-0d2a1ffd0086", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Kaylee Osborne", - "company": "Cryptotemplate", - "phone": "844-461-3645", - "email": "kaylee@cryptotemplate.com" - }, - { - "id": 8734, - "guid": "2944ad0a-a2b1-412f-8e86-c33c4f0c030c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Rachel Ogden", - "company": "Syssoft", - "phone": "822-532-2885", - "email": "rachel@syssoft.com" - }, - { - "id": 8735, - "guid": "a750b167-f26f-48c9-9fe6-08ed9da3039b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Molligan", - "company": "Airdyne", - "phone": "883-402-3306", - "email": "lily@airdyne.com" - }, - { - "id": 8736, - "guid": "8efe3218-781c-4125-b378-ebe4244cb944", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Grace Hailey", - "company": "iOptystix", - "phone": "836-538-2783", - "email": "grace@ioptystix.com" - }, - { - "id": 8737, - "guid": "5667f87e-f62f-4e09-95f4-64f6b15e7d9a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Higgins", - "company": "Truegate", - "phone": "858-596-2514", - "email": "samantha@truegate.com" - }, - { - "id": 8738, - "guid": "57109875-100c-432c-a377-b43925110ce5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jasmine Oliver", - "company": "Unologic", - "phone": "881-575-2090", - "email": "jasmine@unologic.com" - }, - { - "id": 8739, - "guid": "b7b69d67-6d40-49bf-b6cf-d6bdf1163cf9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Thornton", - "company": "Infragraph", - "phone": "840-423-2027", - "email": "ariana@infragraph.com" - }, - { - "id": 8740, - "guid": "ad4c7966-8228-43b9-843b-6127dc1ac56e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Chloe Davidson", - "company": "Infragraph", - "phone": "836-581-2627", - "email": "chloe@infragraph.com" - }, - { - "id": 8741, - "guid": "4e9218e4-9895-43de-a7e6-15ed028dbbeb", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hannah Hoggarth", - "company": "Orthosoft", - "phone": "895-592-2564", - "email": "hannah@orthosoft.com" - }, - { - "id": 8742, - "guid": "417a1a19-862a-4976-9e12-2bdd0f4f9817", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Faith Davidson", - "company": "Robotemplate", - "phone": "867-438-2893", - "email": "faith@robotemplate.com" - }, - { - "id": 8743, - "guid": "ff2150c7-a675-4aff-ad4c-fb55c3f92a09", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mia Carter", - "company": "SysVenamerica", - "phone": "814-528-3359", - "email": "mia@sysvenamerica.com" - }, - { - "id": 8744, - "guid": "082233a0-c8a4-4193-a178-d5036e69213c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Ogden", - "company": "Ventanium", - "phone": "841-594-2534", - "email": "serenity@ventanium.com" - }, - { - "id": 8745, - "guid": "7da04544-35b0-406b-80c1-6ccdd15d57c8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Walkman", - "company": "iOptystix", - "phone": "841-553-3941", - "email": "mariah@ioptystix.com" - }, - { - "id": 8746, - "guid": "9d62092d-817a-4390-aee5-9fc5a3fbbecc", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexandra Harrison", - "company": "Turbomart", - "phone": "878-417-3208", - "email": "alexandra@turbomart.com" - }, - { - "id": 8747, - "guid": "85aa8487-5065-45e4-9f77-d865d77aaba5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brianna Gilmore", - "company": "SysUSA", - "phone": "877-487-3853", - "email": "brianna@sysusa.com" - }, - { - "id": 8748, - "guid": "e07a5c3e-af91-47a8-aaa9-385cd3f6c60e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Gerald", - "company": "Compuamerica", - "phone": "820-472-2355", - "email": "emily@compuamerica.com" - }, - { - "id": 8749, - "guid": "228cca7c-f7c4-416d-87c1-a89dd8d7bdd3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jocelyn White", - "company": "Xeicon", - "phone": "850-508-2404", - "email": "jocelyn@xeicon.com" - }, - { - "id": 8750, - "guid": "24aea4d9-3b60-45f2-9445-0da1cb2991f3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Hodges", - "company": "Indisco", - "phone": "860-515-2656", - "email": "alexandra@indisco.com" - }, - { - "id": 8751, - "guid": "b1654e5d-c333-48f9-aaa3-11e7e59512ba", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Michaelson", - "company": "Conrama", - "phone": "827-566-2279", - "email": "claire@conrama.com" - }, - { - "id": 8752, - "guid": "8653abb8-fc9c-4a5c-a8f6-611f9802c45e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Abigail Waller", - "company": "Quintegrity", - "phone": "848-486-2250", - "email": "abigail@quintegrity.com" - }, - { - "id": 8753, - "guid": "4be4f0aa-08bb-46fc-b3cf-93804c402614", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Hoggarth", - "company": "Compuamerica", - "phone": "802-531-3359", - "email": "sophie@compuamerica.com" - }, - { - "id": 8754, - "guid": "bca53c1b-2923-47c8-a8ae-a1cfeba63854", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Caroline Chapman", - "company": "Inridium", - "phone": "871-567-2251", - "email": "caroline@inridium.com" - }, - { - "id": 8755, - "guid": "ac4fdd14-75db-427e-8880-e422432b0534", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Chapman", - "company": "Westtomik", - "phone": "868-508-2377", - "email": "andrea@westtomik.com" - }, - { - "id": 8756, - "guid": "198faeb8-1953-423c-a259-453435567f81", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Savannah Hawkins", - "company": "Keytheon", - "phone": "853-422-2303", - "email": "savannah@keytheon.com" - }, - { - "id": 8757, - "guid": "7181e0db-43e9-4d31-a1c7-630d6dfd79d6", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Hawkins", - "company": "Navivacs", - "phone": "806-492-3086", - "email": "serenity@navivacs.com" - }, - { - "id": 8758, - "guid": "50bd5455-d619-4a7d-ac49-fea7cc19b039", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Isabelle Watson", - "company": "Cryptotegrity", - "phone": "889-433-2504", - "email": "isabelle@cryptotegrity.com" - }, - { - "id": 8759, - "guid": "f053a763-2acc-4b17-b615-6bf03fe67889", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Higgins", - "company": "SysVenamerica", - "phone": "871-578-3436", - "email": "khloe@sysvenamerica.com" - }, - { - "id": 8760, - "guid": "64d91a1a-ff6b-4897-aefa-446a3d078f46", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brooklyn Clapton", - "company": "Syssoft", - "phone": "831-466-3260", - "email": "brooklyn@syssoft.com" - }, - { - "id": 8761, - "guid": "3b390b04-7101-4822-840d-4cafdf2472f2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Riley Young", - "company": "Hypervaco", - "phone": "827-409-3631", - "email": "riley@hypervaco.com" - }, - { - "id": 8762, - "guid": "4d37f0b8-ca65-4b07-a5bd-85bf74195863", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mia Hoggarth", - "company": "eSteganoergy", - "phone": "885-496-3416", - "email": "mia@esteganoergy.com" - }, - { - "id": 8763, - "guid": "fb68ddc6-4768-4d8a-a423-ce19f40c5e50", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mackenzie Young", - "company": "Teknoplexon", - "phone": "811-497-2928", - "email": "mackenzie@teknoplexon.com" - }, - { - "id": 8764, - "guid": "da75a316-7676-4a74-bf2f-eb6ea295f5b1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Calhoun", - "company": "Allnet", - "phone": "866-401-3136", - "email": "kaitlyn@allnet.com" - }, - { - "id": 8765, - "guid": "a87e6650-1ecc-49ce-ba26-c44bbd57244f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Oswald", - "company": "Ventanium", - "phone": "863-583-3963", - "email": "grace@ventanium.com" - }, - { - "id": 8766, - "guid": "758fea71-69ba-4dc6-9e6e-e2b4a1612743", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabelle Youmans", - "company": "Conotomics", - "phone": "847-520-2390", - "email": "isabelle@conotomics.com" - }, - { - "id": 8767, - "guid": "1a369bd5-8bc9-46c8-b4bf-64593829a6d8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Bush", - "company": "Skydata", - "phone": "873-554-3041", - "email": "leah@skydata.com" - }, - { - "id": 8768, - "guid": "ad832760-a997-464e-88cb-ca130927132d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Molligan", - "company": "Thermotomic", - "phone": "899-509-3472", - "email": "payton@thermotomic.com" - }, - { - "id": 8769, - "guid": "0e827b43-2a24-4e7b-96b7-7e37bba0f0a6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Vanessa Morrison", - "company": "Vencom", - "phone": "830-588-3860", - "email": "vanessa@vencom.com" - }, - { - "id": 8770, - "guid": "4102cade-1bbe-4ea1-8c83-f36f560c6c03", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Higgins", - "company": "Jamconik", - "phone": "884-433-2811", - "email": "khloe@jamconik.com" - }, - { - "id": 8771, - "guid": "23776005-8854-4b85-831e-03e28a95e02f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Oswald", - "company": "Hypervaco", - "phone": "824-567-3583", - "email": "madeline@hypervaco.com" - }, - { - "id": 8772, - "guid": "9efdbc2e-097a-47f7-a32d-71a18b055b64", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brianna Carey", - "company": "iOptystix", - "phone": "893-426-2394", - "email": "brianna@ioptystix.com" - }, - { - "id": 8773, - "guid": "8617f804-90cd-4ffa-ba19-2f8dde701dea", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Riley Miers", - "company": "Orthomedia", - "phone": "812-493-2722", - "email": "riley@orthomedia.com" - }, - { - "id": 8774, - "guid": "b3b53f73-3912-4723-8d46-5c89102d044f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alyssa Nash", - "company": "US Infratouch", - "phone": "820-594-3908", - "email": "alyssa@us infratouch.com" - }, - { - "id": 8775, - "guid": "aa6159fe-cedf-4aa9-b487-9af996de6bd5", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alexandra Galbraith", - "company": "Qualserve", - "phone": "841-414-3751", - "email": "alexandra@qualserve.com" - }, - { - "id": 8776, - "guid": "659f0f27-eeff-45b8-bd3e-a3621c42aec7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Olivia Vance", - "company": "Ventanium", - "phone": "815-574-2525", - "email": "olivia@ventanium.com" - }, - { - "id": 8777, - "guid": "c207611a-4ead-4419-ba6c-e48c9e2bc4e6", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Gilbert", - "company": "Genland", - "phone": "816-467-3336", - "email": "kylie@genland.com" - }, - { - "id": 8778, - "guid": "29a1bd8d-7823-4bd4-9fbb-ba24502d8192", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Nevaeh Nash", - "company": "Polytheon", - "phone": "837-520-3614", - "email": "nevaeh@polytheon.com" - }, - { - "id": 8779, - "guid": "5ea4fc37-7eda-402a-ac05-13769c28d453", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Timmons", - "company": "iEnland", - "phone": "884-504-2522", - "email": "brooklyn@ienland.com" - }, - { - "id": 8780, - "guid": "afad02ce-2e80-40f4-9e28-2e6349dc902f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Gate", - "company": "Vencom", - "phone": "801-471-3586", - "email": "chloe@vencom.com" - }, - { - "id": 8781, - "guid": "1737859c-bddf-47d4-8672-aa1645926517", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Walkman", - "company": "Westmedia", - "phone": "813-403-2317", - "email": "sophie@westmedia.com" - }, - { - "id": 8782, - "guid": "630087ed-dec3-46f1-a0d9-58d62283dcc4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Genesis Walkman", - "company": "Celgra", - "phone": "862-470-3752", - "email": "genesis@celgra.com" - }, - { - "id": 8783, - "guid": "acace6b3-83d1-49d5-9dfe-0da936196cd0", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Gustman", - "company": "US Infratouch", - "phone": "806-537-3752", - "email": "victoria@us infratouch.com" - }, - { - "id": 8784, - "guid": "b491bcb0-4f9c-4fa9-8112-5004f19ef60a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Fulton", - "company": "Teraserv", - "phone": "814-481-3806", - "email": "sophie@teraserv.com" - }, - { - "id": 8785, - "guid": "d010d44b-ed42-43b0-9db1-2e9afdfa4aba", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Kaylee Cramer", - "company": "Videobanc", - "phone": "820-579-2327", - "email": "kaylee@videobanc.com" - }, - { - "id": 8786, - "guid": "99288248-31f4-4617-824c-36b637347bb1", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Goodman", - "company": "Titanigraf", - "phone": "890-448-2091", - "email": "alexandra@titanigraf.com" - }, - { - "id": 8787, - "guid": "323bce62-1117-4075-8002-bb3576bd7246", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Peyton Watson", - "company": "Nanobanc", - "phone": "830-501-2847", - "email": "peyton@nanobanc.com" - }, - { - "id": 8788, - "guid": "5e7003c7-2d87-41dc-b90e-eaad4fef9b29", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Isabelle Gill", - "company": "Interliant", - "phone": "849-401-3011", - "email": "isabelle@interliant.com" - }, - { - "id": 8789, - "guid": "9dfc10df-4c23-4c78-990e-a822ad0de9d1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoey Fulton", - "company": "US Infratouch", - "phone": "869-426-3945", - "email": "zoey@us infratouch.com" - }, - { - "id": 8790, - "guid": "007d375a-2575-419d-a17e-928b958b5422", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Hoggarth", - "company": "Infraique", - "phone": "893-475-3866", - "email": "brooklyn@infraique.com" - }, - { - "id": 8791, - "guid": "fcadf158-2c05-44f8-bc48-1faaff8422dc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Morgan Adamson", - "company": "Inridium", - "phone": "826-578-2737", - "email": "morgan@inridium.com" - }, - { - "id": 8792, - "guid": "fe9ae140-6b1c-4ded-bcda-c9cd76a02222", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Brooks", - "company": "Netsystems", - "phone": "884-462-3792", - "email": "avery@netsystems.com" - }, - { - "id": 8793, - "guid": "8bbd8618-74b5-432c-a3cd-803f0e91e190", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Wayne", - "company": "Robotomic", - "phone": "869-487-2736", - "email": "katherine@robotomic.com" - }, - { - "id": 8794, - "guid": "1b4c9679-80d1-4abf-9153-68b6955ee7ba", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Andrea Galbraith", - "company": "Fibrotopia", - "phone": "840-574-2250", - "email": "andrea@fibrotopia.com" - }, - { - "id": 8795, - "guid": "94205e64-fba0-4b37-9595-30971e3aecd4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Camila Vaughan", - "company": "SysUSA", - "phone": "806-529-2106", - "email": "camila@sysusa.com" - }, - { - "id": 8796, - "guid": "8357cd4a-e8b9-4afe-8f8a-17d5884a0d78", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabrielle Watson", - "company": "Keytheon", - "phone": "860-449-2328", - "email": "gabrielle@keytheon.com" - }, - { - "id": 8797, - "guid": "b4335a78-3995-486a-88fd-0250ae2ba18c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Genesis Gibbs", - "company": "Systheon", - "phone": "856-522-3597", - "email": "genesis@systheon.com" - }, - { - "id": 8798, - "guid": "d7b08e71-1807-4a0b-be49-bfde51b28a92", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Ella Osborne", - "company": "Airdyne", - "phone": "865-447-2737", - "email": "ella@airdyne.com" - }, - { - "id": 8799, - "guid": "010e23ad-5ca6-4143-bf2e-df7ec1b71b1c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Allison Hawkins", - "company": "iSkyvaco", - "phone": "878-580-2816", - "email": "allison@iskyvaco.com" - }, - { - "id": 8800, - "guid": "343af1e1-4810-4044-aecf-677b95849614", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Morrison", - "company": "Infraique", - "phone": "877-428-3744", - "email": "amelia@infraique.com" - }, - { - "id": 8801, - "guid": "c4d5fd89-442d-4882-b944-057762bd4e70", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Waller", - "company": "Ameritron", - "phone": "870-545-3228", - "email": "trinity@ameritron.com" - }, - { - "id": 8802, - "guid": "b5e8d746-8daa-45d7-b221-b608a9485828", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Day", - "company": "Fibrotopia", - "phone": "837-571-3624", - "email": "sarah@fibrotopia.com" - }, - { - "id": 8803, - "guid": "86e562c3-45b2-40d2-8893-fcf56aa6f43e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Serenity Sherlock", - "company": "Safeagra", - "phone": "850-511-3025", - "email": "serenity@safeagra.com" - }, - { - "id": 8804, - "guid": "0fbb4eb6-d95b-455c-a037-7b1a599b6558", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Riley White", - "company": "Netsystems", - "phone": "860-579-2010", - "email": "riley@netsystems.com" - }, - { - "id": 8805, - "guid": "9ae45d29-26d0-4173-b40b-0738a8611c1f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Victoria White", - "company": "Titanirola", - "phone": "888-434-3407", - "email": "victoria@titanirola.com" - }, - { - "id": 8806, - "guid": "51275ae9-ad9e-44ea-a70f-a0a2f1546fcc", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Grace White", - "company": "Robotomic", - "phone": "803-594-2428", - "email": "grace@robotomic.com" - }, - { - "id": 8807, - "guid": "b88b1ff9-b96e-46d0-babc-4b5328268765", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Chandter", - "company": "Anaframe", - "phone": "828-488-2614", - "email": "zoey@anaframe.com" - }, - { - "id": 8808, - "guid": "082c9f89-2e93-4a02-b965-28de4674bf16", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Alexa Nash", - "company": "Techtron", - "phone": "881-431-3940", - "email": "alexa@techtron.com" - }, - { - "id": 8809, - "guid": "70bc0cf8-7584-4a9d-8ad9-ef070db3ae70", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Morgan Murphy", - "company": "InfoAirway", - "phone": "885-583-3664", - "email": "morgan@infoairway.com" - }, - { - "id": 8810, - "guid": "110065a3-0787-403c-b147-fae7e5308db1", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Gate", - "company": "Safetrust", - "phone": "809-489-3668", - "email": "maria@safetrust.com" - }, - { - "id": 8811, - "guid": "202001f1-803d-4832-8beb-f28483e0ce08", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Anna Wayne", - "company": "Keytheon", - "phone": "807-420-2424", - "email": "anna@keytheon.com" - }, - { - "id": 8812, - "guid": "8148fd81-3eeb-455d-8d3f-7a8909b2d478", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Hardman", - "company": "OpKeycomm", - "phone": "840-511-2500", - "email": "emily@opkeycomm.com" - }, - { - "id": 8813, - "guid": "c943f1a2-b0f4-4af5-a192-14b63d65a590", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Carey", - "company": "Generola", - "phone": "854-423-3669", - "email": "gianna@generola.com" - }, - { - "id": 8814, - "guid": "bf0b4532-f30b-464d-9870-e9d790e4887c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Valeria Oldman", - "company": "Robotemplate", - "phone": "834-448-3921", - "email": "valeria@robotemplate.com" - }, - { - "id": 8815, - "guid": "5a51f967-abdc-4da9-ac45-08a6113ca48a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Evelyn Daniels", - "company": "iOptystix", - "phone": "871-536-2781", - "email": "evelyn@ioptystix.com" - }, - { - "id": 8816, - "guid": "806e32a8-6deb-4493-8e7d-a332dbd84fd2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Gardner", - "company": "Technogra", - "phone": "854-483-3270", - "email": "bella@technogra.com" - }, - { - "id": 8817, - "guid": "c5fff96f-b600-47d7-a655-4e6f69343f76", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Waller", - "company": "Sontopia", - "phone": "871-554-2637", - "email": "kaitlyn@sontopia.com" - }, - { - "id": 8818, - "guid": "30c39ee1-3a01-45c1-87c6-adea27e25b29", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lily Young", - "company": "Cryptotemplate", - "phone": "887-455-3885", - "email": "lily@cryptotemplate.com" - }, - { - "id": 8819, - "guid": "a16e5c15-20a1-4184-8516-485def224dd5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Caroline Adamson", - "company": "iEnland", - "phone": "827-458-2638", - "email": "caroline@ienland.com" - }, - { - "id": 8820, - "guid": "039eb966-7c9e-4f48-95a6-4bf11eb690c7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Allison Creighton", - "company": "Thermotomic", - "phone": "812-463-3695", - "email": "allison@thermotomic.com" - }, - { - "id": 8821, - "guid": "77d95ddd-2090-4e3b-8ee5-18c68f05f6ac", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Hancock", - "company": "Allnet", - "phone": "856-578-2446", - "email": "jessica@allnet.com" - }, - { - "id": 8822, - "guid": "5c72a270-4a50-4052-9fa8-a0cd2e23f7f6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Caroline Hancock", - "company": "Truetomic", - "phone": "814-565-2522", - "email": "caroline@truetomic.com" - }, - { - "id": 8823, - "guid": "8c406bb0-1e62-4453-bf12-b59401d4fedc", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jessica Walkman", - "company": "Navivacs", - "phone": "800-479-2231", - "email": "jessica@navivacs.com" - }, - { - "id": 8824, - "guid": "b7225c4e-3ed2-4f79-8b10-fa0f2c54755c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Leah Hardman", - "company": "Tekcar", - "phone": "817-401-2428", - "email": "leah@tekcar.com" - }, - { - "id": 8825, - "guid": "f0f14678-cf0a-4f84-a942-2ba6e346239c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jocelyn Creighton", - "company": "US Infratouch", - "phone": "883-583-2539", - "email": "jocelyn@us infratouch.com" - }, - { - "id": 8826, - "guid": "aa90ca6b-49d3-4b08-a223-fbc15bc2bfcf", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Adamson", - "company": "Techtron", - "phone": "872-505-3840", - "email": "maya@techtron.com" - }, - { - "id": 8827, - "guid": "dfa1071c-caad-4b66-b14e-d5614419872a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Hardman", - "company": "Cryptotegrity", - "phone": "843-402-2145", - "email": "allison@cryptotegrity.com" - }, - { - "id": 8828, - "guid": "162375a3-e230-4744-a3a7-89b48c1df686", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ella Gilbert", - "company": "iQualcar", - "phone": "891-547-3468", - "email": "ella@iqualcar.com" - }, - { - "id": 8829, - "guid": "841912b2-b21e-49ca-9b3b-d4c031cd00c6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Watson", - "company": "Venconix", - "phone": "820-418-2220", - "email": "lauren@venconix.com" - }, - { - "id": 8830, - "guid": "2bf1f3d4-1536-461a-89ae-5bdc3ffb69ce", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Murphy", - "company": "Idmax", - "phone": "898-475-3205", - "email": "sophia@idmax.com" - }, - { - "id": 8831, - "guid": "b6a29d21-9965-4702-a216-898f401688b5", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Evelyn Miers", - "company": "Orthomedia", - "phone": "822-450-3096", - "email": "evelyn@orthomedia.com" - }, - { - "id": 8832, - "guid": "14c3b278-9f11-4a60-9d32-e3019f98d87a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Riley Brown", - "company": "Interliant", - "phone": "814-482-2633", - "email": "riley@interliant.com" - }, - { - "id": 8833, - "guid": "18db32f9-78ce-4f62-a266-975bbd1f93ea", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madison Crossman", - "company": "RoboAerlogix", - "phone": "819-530-2406", - "email": "madison@roboaerlogix.com" - }, - { - "id": 8834, - "guid": "82966a80-04f3-4ca2-a51c-f4fff26d6be3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Brickman", - "company": "Enlogia", - "phone": "802-443-2394", - "email": "faith@enlogia.com" - }, - { - "id": 8835, - "guid": "831e5342-ef0b-41b6-8f64-3007aeeeae87", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Grace Wallace", - "company": "Orthomedia", - "phone": "895-485-2212", - "email": "grace@orthomedia.com" - }, - { - "id": 8836, - "guid": "9e076318-1c04-4c4f-b048-a12dc5339560", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Maria Gate", - "company": "Idmax", - "phone": "876-482-2219", - "email": "maria@idmax.com" - }, - { - "id": 8837, - "guid": "00c61dd2-1cc2-409e-8de3-2bbe6f3eed45", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Bella Oswald", - "company": "Syssoft", - "phone": "893-543-2111", - "email": "bella@syssoft.com" - }, - { - "id": 8838, - "guid": "66824818-205f-4d6e-b319-f8496ea6a42d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Hamphrey", - "company": "Conrama", - "phone": "811-580-3434", - "email": "kayla@conrama.com" - }, - { - "id": 8839, - "guid": "345beb6b-32b3-4b4f-8c91-b605069abc1b", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Timmons", - "company": "Quintegrity", - "phone": "861-420-3742", - "email": "lauren@quintegrity.com" - }, - { - "id": 8840, - "guid": "dc0de5fe-4e1d-42c1-bb59-5037d6774731", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Trinity Brown", - "company": "Robocomm", - "phone": "843-505-2079", - "email": "trinity@robocomm.com" - }, - { - "id": 8841, - "guid": "9b9a63a4-97a6-4c31-8f5b-07cc53667bf1", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Owen", - "company": "Quintegrity", - "phone": "883-462-3682", - "email": "mya@quintegrity.com" - }, - { - "id": 8842, - "guid": "626a174e-07b7-4061-af2d-cc89cd0a37e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sarah Fulton", - "company": "Genland", - "phone": "825-568-3114", - "email": "sarah@genland.com" - }, - { - "id": 8843, - "guid": "51b7853e-6a6b-4e98-958e-97de991feb17", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Nevaeh Haig", - "company": "Westtomik", - "phone": "844-484-3328", - "email": "nevaeh@westtomik.com" - }, - { - "id": 8844, - "guid": "5e73db91-3737-474e-b462-f8708c266d9c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Serenity Molligan", - "company": "Genland", - "phone": "859-430-2398", - "email": "serenity@genland.com" - }, - { - "id": 8845, - "guid": "a2d02355-6b8e-4a81-aa1a-c027792cea6e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Nathan", - "company": "Anagraph", - "phone": "843-468-2817", - "email": "brooke@anagraph.com" - }, - { - "id": 8846, - "guid": "a19f2aa2-2779-4005-98fc-5d679e2869fb", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Victoria Gilmore", - "company": "Generola", - "phone": "813-539-3660", - "email": "victoria@generola.com" - }, - { - "id": 8847, - "guid": "10bf3456-d25b-466e-a758-ac2e5e8252eb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Vaughan", - "company": "Conrama", - "phone": "856-490-3561", - "email": "addison@conrama.com" - }, - { - "id": 8848, - "guid": "09ab56d0-678a-4f1d-ade0-aa1415744e43", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lillian Brooks", - "company": "Tekcar", - "phone": "880-436-3181", - "email": "lillian@tekcar.com" - }, - { - "id": 8849, - "guid": "2ce232a4-9842-409e-803a-2cee21f5a64a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Milton", - "company": "Celgra", - "phone": "837-486-3649", - "email": "destiny@celgra.com" - }, - { - "id": 8850, - "guid": "9ed7e01d-e56a-434f-bab2-8f75682ab24f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Avery Neal", - "company": "Unconix", - "phone": "853-528-3600", - "email": "avery@unconix.com" - }, - { - "id": 8851, - "guid": "d39b766b-1d65-414e-949e-800a64df8096", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Jocelyn Conors", - "company": "Cryptotemplate", - "phone": "810-473-2735", - "email": "jocelyn@cryptotemplate.com" - }, - { - "id": 8852, - "guid": "3c9988ae-9c06-4666-8064-d7af1f8ab397", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Charlson", - "company": "Netseco", - "phone": "809-486-2099", - "email": "makayla@netseco.com" - }, - { - "id": 8853, - "guid": "7bdbd94a-aa52-4238-97ae-b2a7d260379b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Vanessa Gate", - "company": "Safeagra", - "phone": "881-465-2638", - "email": "vanessa@safeagra.com" - }, - { - "id": 8854, - "guid": "e71573a8-33cf-4508-8a40-412ed35eb237", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Audrey Wallace", - "company": "Conotomics", - "phone": "828-531-3104", - "email": "audrey@conotomics.com" - }, - { - "id": 8855, - "guid": "4f5cb61c-66eb-42f9-b106-16c82207f2e7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kayla Morrison", - "company": "Fibroserve", - "phone": "898-456-3680", - "email": "kayla@fibroserve.com" - }, - { - "id": 8856, - "guid": "9357add6-2fa1-4a8f-ab00-4dfd46f9043f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Molly Milton", - "company": "Allphysiche", - "phone": "819-495-3766", - "email": "molly@allphysiche.com" - }, - { - "id": 8857, - "guid": "faf0fe61-2605-4ddf-a871-4235e624cec7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Otis", - "company": "Mescatron", - "phone": "853-540-2126", - "email": "kaitlyn@mescatron.com" - }, - { - "id": 8858, - "guid": "07ee27db-5510-462e-b1fd-5f8fdf888d69", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexandra Fisher", - "company": "Titanirola", - "phone": "815-549-2183", - "email": "alexandra@titanirola.com" - }, - { - "id": 8859, - "guid": "c6214139-76b2-4a4f-a8b3-e9476549e643", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexandra Hamphrey", - "company": "Unconix", - "phone": "898-571-3595", - "email": "alexandra@unconix.com" - }, - { - "id": 8860, - "guid": "3b17acce-a9cc-4184-a522-6a130bf80c7d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Elizabeth Warren", - "company": "Orthomedia", - "phone": "869-467-2536", - "email": "elizabeth@orthomedia.com" - }, - { - "id": 8861, - "guid": "3450c38f-aa77-4227-b341-a72a8937fb7c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Croftoon", - "company": "Unologic", - "phone": "810-478-2921", - "email": "nevaeh@unologic.com" - }, - { - "id": 8862, - "guid": "2d66ae1a-899b-4fed-83b3-7020230ee1b2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Makayla Ford", - "company": "iSkyvaco", - "phone": "862-554-2585", - "email": "makayla@iskyvaco.com" - }, - { - "id": 8863, - "guid": "f15fe1d7-2ea0-43af-acbc-bc777c3a0ede", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Oliver", - "company": "Fibrotouch", - "phone": "855-426-3092", - "email": "payton@fibrotouch.com" - }, - { - "id": 8864, - "guid": "98dd119f-9a18-4de7-a524-f4a854be656e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Calhoun", - "company": "Safeagra", - "phone": "899-422-3091", - "email": "kaylee@safeagra.com" - }, - { - "id": 8865, - "guid": "1fe69d17-7446-47ce-9d26-0c939ec98602", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie WifKinson", - "company": "Nanobanc", - "phone": "853-408-2777", - "email": "mackenzie@nanobanc.com" - }, - { - "id": 8866, - "guid": "5a07472f-eb5d-4906-8e66-d40085c653c2", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jasmine Cook", - "company": "Gigaura", - "phone": "866-404-3026", - "email": "jasmine@gigaura.com" - }, - { - "id": 8867, - "guid": "9c0b630a-633a-411d-ba69-8aa112e6bfad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Anna Cook", - "company": "Robocomm", - "phone": "855-581-3758", - "email": "anna@robocomm.com" - }, - { - "id": 8868, - "guid": "b2260ac4-513c-41e4-ba26-365957c7e8a6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Youmans", - "company": "Unologic", - "phone": "812-534-3965", - "email": "kaitlyn@unologic.com" - }, - { - "id": 8869, - "guid": "ea87c66e-f97c-4385-896b-b77871c95031", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Victoria Winter", - "company": "Multitiqua", - "phone": "804-465-3538", - "email": "victoria@multitiqua.com" - }, - { - "id": 8870, - "guid": "46882256-bcbb-4759-b976-59a5d7924c4b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Day", - "company": "Pericenta", - "phone": "883-493-2646", - "email": "addison@pericenta.com" - }, - { - "id": 8871, - "guid": "804062cd-e251-4eb6-8098-606c2c5dc14f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexa Bush", - "company": "Aluco", - "phone": "863-436-3101", - "email": "alexa@aluco.com" - }, - { - "id": 8872, - "guid": "25fc7a2a-f698-4227-a35e-1591881f4503", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophia Gilbert", - "company": "iEnland", - "phone": "810-482-3934", - "email": "sophia@ienland.com" - }, - { - "id": 8873, - "guid": "a997847e-701c-4186-8170-52a22f2a45ab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoey Winter", - "company": "Airdyne", - "phone": "877-497-2128", - "email": "zoey@airdyne.com" - }, - { - "id": 8874, - "guid": "ab4b0144-69ff-4953-9eaf-cda3b8325bbc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Hodges", - "company": "Keytheon", - "phone": "864-425-3140", - "email": "lily@keytheon.com" - }, - { - "id": 8875, - "guid": "52c63d02-9d56-434c-b1a6-fbda7726375c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Gibbs", - "company": "Raylog", - "phone": "856-515-3364", - "email": "gabrielle@raylog.com" - }, - { - "id": 8876, - "guid": "1eaff0b5-0597-4274-87e2-bf8eee47d5b2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Oliver", - "company": "iEnland", - "phone": "869-590-2937", - "email": "savannah@ienland.com" - }, - { - "id": 8877, - "guid": "044eba01-5aa0-454f-96df-fd4058869582", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mya Chapman", - "company": "Thermotomic", - "phone": "803-495-2242", - "email": "mya@thermotomic.com" - }, - { - "id": 8878, - "guid": "f4da29f7-5cde-4903-8663-8bb1d23fadd8", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Galbraith", - "company": "Westgate", - "phone": "801-453-3050", - "email": "vanessa@westgate.com" - }, - { - "id": 8879, - "guid": "ee31b70f-ffac-4dfd-870b-674331eb2f7a", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Savannah Wesley", - "company": "Unologic", - "phone": "806-521-3872", - "email": "savannah@unologic.com" - }, - { - "id": 8880, - "guid": "003514dd-1043-4bc1-843e-50c5dca4e638", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mariah Goodman", - "company": "Ameritron", - "phone": "822-589-3750", - "email": "mariah@ameritron.com" - }, - { - "id": 8881, - "guid": "676e936d-4e7b-4ffc-a144-a76e07ed02f3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Grace Charlson", - "company": "Gigaura", - "phone": "869-580-2511", - "email": "grace@gigaura.com" - }, - { - "id": 8882, - "guid": "8a4609bc-4e54-407e-b19f-d1b3c2d2350c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Melanie Higgins", - "company": "Ameritron", - "phone": "877-564-3264", - "email": "melanie@ameritron.com" - }, - { - "id": 8883, - "guid": "6e476687-df69-4224-ad62-27ddcfbb1315", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Mercer", - "company": "Thermotomic", - "phone": "887-465-3272", - "email": "alexis@thermotomic.com" - }, - { - "id": 8884, - "guid": "a1f0a928-7ebe-46d3-b240-86dca03ae693", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Oldridge", - "company": "Tekcar", - "phone": "848-411-2387", - "email": "zoey@tekcar.com" - }, - { - "id": 8885, - "guid": "acaee3ce-7e62-4956-8377-a74f8a092a71", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Rachel Gerald", - "company": "Xeicon", - "phone": "826-597-3657", - "email": "rachel@xeicon.com" - }, - { - "id": 8886, - "guid": "15a69bfb-3d71-4f2b-b2e7-a149d08bbf85", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Genesis Hoggarth", - "company": "Jamconik", - "phone": "832-580-2298", - "email": "genesis@jamconik.com" - }, - { - "id": 8887, - "guid": "d46fbd3f-9a77-4ccd-9d61-deb82b5da32d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Khloe Higgins", - "company": "Pericenta", - "phone": "844-578-2260", - "email": "khloe@pericenta.com" - }, - { - "id": 8888, - "guid": "bd2a9340-106f-4de2-bafb-07629563ddad", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Hoggarth", - "company": "Indisco", - "phone": "836-596-3561", - "email": "mariah@indisco.com" - }, - { - "id": 8889, - "guid": "d6b0acd6-8a8f-4a53-85da-831ba0b3308d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Ariana Harrison", - "company": "Keytheon", - "phone": "891-514-2153", - "email": "ariana@keytheon.com" - }, - { - "id": 8890, - "guid": "bbd133ca-55f4-44ad-a988-ad52596579a9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Ogden", - "company": "Orthomedia", - "phone": "880-497-3547", - "email": "eva@orthomedia.com" - }, - { - "id": 8891, - "guid": "6237bd77-968b-4a58-a6d7-a905257bc20c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Davidson", - "company": "Ameritron", - "phone": "805-474-2592", - "email": "kaitlyn@ameritron.com" - }, - { - "id": 8892, - "guid": "dd125378-c2b2-4038-9c9a-e384819cb1f5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Avery Turner", - "company": "Unologic", - "phone": "844-422-3245", - "email": "avery@unologic.com" - }, - { - "id": 8893, - "guid": "ea444a26-78bc-4abc-b0c2-c8cc33d26524", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lauren Gilson", - "company": "Entcast", - "phone": "860-593-2798", - "email": "lauren@entcast.com" - }, - { - "id": 8894, - "guid": "730a4827-31c9-43ec-a490-e086f6458806", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Serenity Adamson", - "company": "Sontopia", - "phone": "827-533-2314", - "email": "serenity@sontopia.com" - }, - { - "id": 8895, - "guid": "e7045cf9-cb29-4b2f-abc4-74f086434f40", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kayla Abramson", - "company": "US Omnigraphik", - "phone": "836-444-2638", - "email": "kayla@us omnigraphik.com" - }, - { - "id": 8896, - "guid": "3148cf6c-2b7e-436d-80c2-2b37695ebab2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madison Abramson", - "company": "Teraserv", - "phone": "835-575-2414", - "email": "madison@teraserv.com" - }, - { - "id": 8897, - "guid": "73401169-9e85-4f85-8c63-d305ab772a1d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoe Sherlock", - "company": "Sontopia", - "phone": "867-428-2402", - "email": "zoe@sontopia.com" - }, - { - "id": 8898, - "guid": "48709b5b-d54a-4e4d-8def-34843acc5d87", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Carrington", - "company": "Pacwest", - "phone": "808-524-2377", - "email": "aubrey@pacwest.com" - }, - { - "id": 8899, - "guid": "4bb0a298-a60a-4923-8067-8d3e34b22831", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Gibbs", - "company": "US Omnigraphik", - "phone": "876-523-2502", - "email": "kayla@us omnigraphik.com" - }, - { - "id": 8900, - "guid": "030519cd-32a1-45fa-b5c8-86e30ac2b236", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mariah Chapman", - "company": "Systheon", - "phone": "872-567-2422", - "email": "mariah@systheon.com" - }, - { - "id": 8901, - "guid": "366f616d-e10f-4308-8b43-13c66c299885", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Carroll", - "company": "Aluco", - "phone": "842-415-2577", - "email": "maya@aluco.com" - }, - { - "id": 8902, - "guid": "6388bafc-440b-4058-8b6f-8361f911cc9a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Hancock", - "company": "Videobanc", - "phone": "888-525-3673", - "email": "arianna@videobanc.com" - }, - { - "id": 8903, - "guid": "0be0c6af-dc87-43ba-9421-b287d76ae9a9", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Brooks", - "company": "Jamconik", - "phone": "882-537-2836", - "email": "evelyn@jamconik.com" - }, - { - "id": 8904, - "guid": "34df624e-02fc-4fb4-a0f6-41e9da853bde", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Wesley", - "company": "Unologic", - "phone": "804-517-2711", - "email": "ava@unologic.com" - }, - { - "id": 8905, - "guid": "d5236b30-57f2-4f1e-ba80-9674c8fb7b0a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Vaughan", - "company": "Nanobanc", - "phone": "861-590-2289", - "email": "valeria@nanobanc.com" - }, - { - "id": 8906, - "guid": "a0c50579-a6df-4dbd-8e81-473b4c25c0a1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Carey", - "company": "SysUSA", - "phone": "850-526-2922", - "email": "kylie@sysusa.com" - }, - { - "id": 8907, - "guid": "6301b069-e930-42cf-819e-82f3c4c070b4", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Oldridge", - "company": "Pacwest", - "phone": "816-589-3621", - "email": "madeline@pacwest.com" - }, - { - "id": 8908, - "guid": "516f1086-6458-447b-96f9-83568a4571a1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Audrey Adamson", - "company": "iEnland", - "phone": "823-559-2106", - "email": "audrey@ienland.com" - }, - { - "id": 8909, - "guid": "32773459-427d-4e0f-9382-638e245f29db", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Allison Davidson", - "company": "iSkyvaco", - "phone": "810-416-2004", - "email": "allison@iskyvaco.com" - }, - { - "id": 8910, - "guid": "b37ca76f-2dfd-4dc1-9e13-d515aa8c2327", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Creighton", - "company": "iQualcar", - "phone": "888-556-3894", - "email": "natalie@iqualcar.com" - }, - { - "id": 8911, - "guid": "fc16a44e-d77f-4cee-a02c-3e4aec699cea", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sarah Daniels", - "company": "Anaframe", - "phone": "817-479-2210", - "email": "sarah@anaframe.com" - }, - { - "id": 8912, - "guid": "b7a641c7-8619-4587-9032-ed8aae00c6e8", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kaylee Youmans", - "company": "Netseco", - "phone": "857-562-2561", - "email": "kaylee@netseco.com" - }, - { - "id": 8913, - "guid": "479cf290-5d2f-4db5-924f-5cda40c7050f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Vaughan", - "company": "OpKeycomm", - "phone": "859-421-3305", - "email": "avery@opkeycomm.com" - }, - { - "id": 8914, - "guid": "37701dd0-c842-46b0-adeb-aa25f73659d9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Smith", - "company": "Superscope", - "phone": "886-469-3424", - "email": "claire@superscope.com" - }, - { - "id": 8915, - "guid": "a6737e37-7398-4588-853c-a571653d71c2", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Molly Cramer", - "company": "Conrama", - "phone": "806-420-3531", - "email": "molly@conrama.com" - }, - { - "id": 8916, - "guid": "e7e1a0e6-566d-4bc3-80a5-15e18947b180", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Nelson", - "company": "Interliant", - "phone": "808-593-2845", - "email": "isabelle@interliant.com" - }, - { - "id": 8917, - "guid": "380e736e-7355-401a-bb57-c2c290153aaa", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kaylee Oldridge", - "company": "Technogra", - "phone": "855-596-3251", - "email": "kaylee@technogra.com" - }, - { - "id": 8918, - "guid": "55936df7-ae52-47ee-b039-5d44de300e20", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Angelina Wayne", - "company": "Westtomik", - "phone": "862-526-3811", - "email": "angelina@westtomik.com" - }, - { - "id": 8919, - "guid": "e1fdeb44-a704-478c-b2f3-9bd4f4051daf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Riley Thorndike", - "company": "Proline", - "phone": "851-516-2551", - "email": "riley@proline.com" - }, - { - "id": 8920, - "guid": "b087cc76-3e40-4fe3-b6bb-c4bc7cb448a7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Samantha Day", - "company": "RoboAerlogix", - "phone": "841-473-2334", - "email": "samantha@roboaerlogix.com" - }, - { - "id": 8921, - "guid": "99b123e9-e391-4552-a0b5-721a7b542974", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexis Ogden", - "company": "Rapigrafix", - "phone": "896-510-3073", - "email": "alexis@rapigrafix.com" - }, - { - "id": 8922, - "guid": "08e7045d-4507-43c5-b188-c676a2371a7b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Owen", - "company": "Transtouch", - "phone": "829-459-2338", - "email": "maya@transtouch.com" - }, - { - "id": 8923, - "guid": "e4b022fb-d7ca-4c5a-af32-efb96a705da5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Goodman", - "company": "Entcast", - "phone": "812-423-2056", - "email": "julia@entcast.com" - }, - { - "id": 8924, - "guid": "38bfdb90-3641-4200-81a2-8eb7d6c55a03", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Croftoon", - "company": "Proline", - "phone": "881-515-3280", - "email": "madelyn@proline.com" - }, - { - "id": 8925, - "guid": "d3f38132-320b-4a05-ae61-58d5e0ebecdb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Olivia Hawkins", - "company": "Infragraph", - "phone": "825-503-3677", - "email": "olivia@infragraph.com" - }, - { - "id": 8926, - "guid": "3e7f3a52-c4e0-4afd-99ce-6a077848bbe7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Arianna Turner", - "company": "Netseco", - "phone": "826-502-3524", - "email": "arianna@netseco.com" - }, - { - "id": 8927, - "guid": "1fc359bb-e92e-4a9b-a077-6bc6aad7fb54", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Alexa Neal", - "company": "Generola", - "phone": "866-589-2072", - "email": "alexa@generola.com" - }, - { - "id": 8928, - "guid": "288ae37b-00ab-4b5e-b71d-43c3a299ba81", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Hancock", - "company": "Teratopia", - "phone": "857-534-2669", - "email": "eva@teratopia.com" - }, - { - "id": 8929, - "guid": "4783cde8-38e0-4d8d-9af6-8ab1555a6f0c", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Gustman", - "company": "Fibrotouch", - "phone": "833-530-2268", - "email": "rachel@fibrotouch.com" - }, - { - "id": 8930, - "guid": "54171105-86f7-43ea-b7ae-67c68b23d341", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Daniels", - "company": "Jamrola", - "phone": "843-457-3579", - "email": "mackenzie@jamrola.com" - }, - { - "id": 8931, - "guid": "cb6c4ba8-0796-45c3-aff2-552abfa53b9c", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sofia Fisher", - "company": "Anagraph", - "phone": "820-445-3098", - "email": "sofia@anagraph.com" - }, - { - "id": 8932, - "guid": "92b65195-320f-42b9-9c73-4d9debaad8c3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Carroll", - "company": "Idmax", - "phone": "831-562-2896", - "email": "hannah@idmax.com" - }, - { - "id": 8933, - "guid": "3f2b3637-e5a2-45ce-80a7-3a89c698e102", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Hodges", - "company": "Robotemplate", - "phone": "846-421-2474", - "email": "molly@robotemplate.com" - }, - { - "id": 8934, - "guid": "83e7a93a-325f-47fa-b30e-15e5cd58e4f8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Miller", - "company": "Hypervaco", - "phone": "872-418-2762", - "email": "zoey@hypervaco.com" - }, - { - "id": 8935, - "guid": "54cfaca1-8e42-4d66-b886-c2d8520a98c7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Katelyn Thomson", - "company": "Videobanc", - "phone": "833-564-2922", - "email": "katelyn@videobanc.com" - }, - { - "id": 8936, - "guid": "d9e8975c-ece1-4810-bf3e-b2782038538f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia Harrison", - "company": "Mescatron", - "phone": "834-487-3791", - "email": "sophia@mescatron.com" - }, - { - "id": 8937, - "guid": "ddf85d98-7a2f-4cb4-928a-708a2b3ea4c1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Trinity Galbraith", - "company": "Westmedia", - "phone": "807-400-3242", - "email": "trinity@westmedia.com" - }, - { - "id": 8938, - "guid": "fb5e47fe-4088-4ecc-9869-5128df7a895a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Clapton", - "company": "Superscope", - "phone": "848-441-2619", - "email": "aubrey@superscope.com" - }, - { - "id": 8939, - "guid": "8a70ea44-00f6-4f1f-8a8d-62d1b545ebf9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Anna Carter", - "company": "Xeicon", - "phone": "873-457-3659", - "email": "anna@xeicon.com" - }, - { - "id": 8940, - "guid": "65ce3f90-1c3b-4e90-9bd6-f68642765bf5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Peyton Higgins", - "company": "iMedconik", - "phone": "889-540-3012", - "email": "peyton@imedconik.com" - }, - { - "id": 8941, - "guid": "65a67d5f-4e34-4b85-adfc-4e99197c6fae", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Paige Waller", - "company": "Airdyne", - "phone": "832-451-2227", - "email": "paige@airdyne.com" - }, - { - "id": 8942, - "guid": "0c75b12c-5f54-4844-b7d6-13fe3573e8e9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kylie Oswald", - "company": "Robotomic", - "phone": "800-556-3110", - "email": "kylie@robotomic.com" - }, - { - "id": 8943, - "guid": "f2af0848-0a61-46e1-af3d-cbcb1bad5794", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emily Webster", - "company": "iOptystix", - "phone": "869-508-3173", - "email": "emily@ioptystix.com" - }, - { - "id": 8944, - "guid": "267913b5-008f-46f4-8111-6f53c2c94a8b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Valeria Conors", - "company": "Thermotomic", - "phone": "834-584-3332", - "email": "valeria@thermotomic.com" - }, - { - "id": 8945, - "guid": "993a26d4-8ef0-4222-8486-9f6588a3a1b0", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Layla Creighton", - "company": "OpKeycomm", - "phone": "836-510-2276", - "email": "layla@opkeycomm.com" - }, - { - "id": 8946, - "guid": "cd6d07dc-d028-4d91-b15a-12895b66e4fa", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Payton Gerald", - "company": "Idmax", - "phone": "897-540-3809", - "email": "payton@idmax.com" - }, - { - "id": 8947, - "guid": "889769fa-70fb-4cb5-b09e-662ce92624c1", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Caroline Oliver", - "company": "Ventanium", - "phone": "814-574-2598", - "email": "caroline@ventanium.com" - }, - { - "id": 8948, - "guid": "6f1aef2c-f788-4ad0-934c-319102c176a4", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Destiny Nash", - "company": "Mescatron", - "phone": "833-483-3244", - "email": "destiny@mescatron.com" - }, - { - "id": 8949, - "guid": "a7f59da1-9aa2-467d-ae19-0ff008e2a1f4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Gill", - "company": "Orthosoft", - "phone": "884-524-3745", - "email": "maya@orthosoft.com" - }, - { - "id": 8950, - "guid": "7c36de3d-e5aa-4775-a59a-3521a88a6e22", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Osborne", - "company": "Pacwest", - "phone": "890-580-3077", - "email": "autumn@pacwest.com" - }, - { - "id": 8951, - "guid": "d0f087a7-13e8-4390-8295-e9800434e698", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Molly Hoggarth", - "company": "Skydata", - "phone": "879-429-3318", - "email": "molly@skydata.com" - }, - { - "id": 8952, - "guid": "a32be629-10e7-4a5f-ae91-35f267f4099f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Destiny Otis", - "company": "Airdyne", - "phone": "852-512-3507", - "email": "destiny@airdyne.com" - }, - { - "id": 8953, - "guid": "4f4dc774-4ea8-4b1e-b6c5-88118e001a31", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Trinity Webster", - "company": "Xeicon", - "phone": "803-506-3668", - "email": "trinity@xeicon.com" - }, - { - "id": 8954, - "guid": "67b0a750-1d3b-46e6-8d29-535f81c213db", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexis Winter", - "company": "Celgra", - "phone": "801-551-2562", - "email": "alexis@celgra.com" - }, - { - "id": 8955, - "guid": "beb38966-7b97-4355-ba74-10ca7d2c317f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Wood", - "company": "Allphysiche", - "phone": "801-467-2130", - "email": "katherine@allphysiche.com" - }, - { - "id": 8956, - "guid": "7773eccd-ee91-42cf-9271-72569531444a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Melanie Oswald", - "company": "Aluco", - "phone": "892-432-2463", - "email": "melanie@aluco.com" - }, - { - "id": 8957, - "guid": "61211f65-9b13-4703-b053-46d9ee6641d3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sofia Harrison", - "company": "Westgate", - "phone": "894-511-3026", - "email": "sofia@westgate.com" - }, - { - "id": 8958, - "guid": "10cb3429-0674-4763-a7bc-883142449f3a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Angelina Wayne", - "company": "eSteganoergy", - "phone": "829-464-2328", - "email": "angelina@esteganoergy.com" - }, - { - "id": 8959, - "guid": "03d05636-4159-4406-85cb-050d5b7f97c7", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Abigail Young", - "company": "Robotemplate", - "phone": "887-528-3199", - "email": "abigail@robotemplate.com" - }, - { - "id": 8960, - "guid": "50ee6a40-16b4-4604-bdb2-61f933c92153", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Leah Hardman", - "company": "Robotomic", - "phone": "833-560-2650", - "email": "leah@robotomic.com" - }, - { - "id": 8961, - "guid": "4366736f-d3c8-4f65-8bb9-d8f2b6ccb5a8", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Emma Morrison", - "company": "Conotomics", - "phone": "839-559-2822", - "email": "emma@conotomics.com" - }, - { - "id": 8962, - "guid": "80924487-3daf-4319-8d96-330dd0fa2f79", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Payton Gill", - "company": "iQualcar", - "phone": "895-530-3359", - "email": "payton@iqualcar.com" - }, - { - "id": 8963, - "guid": "8607966e-7f29-40c8-af51-a44f836c759e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Nash", - "company": "Turbomart", - "phone": "898-597-3194", - "email": "gianna@turbomart.com" - }, - { - "id": 8964, - "guid": "d8904346-3ff6-4c02-878f-d655a468ac31", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Emma Turner", - "company": "Safetrust", - "phone": "828-410-3577", - "email": "emma@safetrust.com" - }, - { - "id": 8965, - "guid": "b62740ba-70b9-41af-84c0-9bac47eac200", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Riley Youmans", - "company": "Cryptotegrity", - "phone": "857-496-2535", - "email": "riley@cryptotegrity.com" - }, - { - "id": 8966, - "guid": "9d427321-dea5-4272-957d-825a3a0cdbce", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Molligan", - "company": "Jamrola", - "phone": "836-479-2820", - "email": "lily@jamrola.com" - }, - { - "id": 8967, - "guid": "40bf14f0-52b9-4eb2-bd85-132481f51d43", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Valeria Adamson", - "company": "Rapigrafix", - "phone": "829-432-3134", - "email": "valeria@rapigrafix.com" - }, - { - "id": 8968, - "guid": "de8418ba-faa6-42c4-ae5f-dfc6b80cad5a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Wallace", - "company": "Entcast", - "phone": "871-498-3884", - "email": "gianna@entcast.com" - }, - { - "id": 8969, - "guid": "b1fd626a-9a29-4eb5-a56e-bb0ce7ee215f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoey Gilson", - "company": "Transtouch", - "phone": "855-497-3691", - "email": "zoey@transtouch.com" - }, - { - "id": 8970, - "guid": "38aefad9-6a98-4630-9da2-dfa7ba46363d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Lauren Haig", - "company": "Thermotomic", - "phone": "832-515-2421", - "email": "lauren@thermotomic.com" - }, - { - "id": 8971, - "guid": "83d90c92-0110-452c-8ecf-844b5148fa7f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Serenity Gilmore", - "company": "Safeagra", - "phone": "879-415-2224", - "email": "serenity@safeagra.com" - }, - { - "id": 8972, - "guid": "aca0bf20-2b5c-4074-8fdd-a3ccfad16a9a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Caroline Molligan", - "company": "SysVenamerica", - "phone": "864-558-3198", - "email": "caroline@sysvenamerica.com" - }, - { - "id": 8973, - "guid": "47fd216a-a85f-4d22-b091-a5305fc0be9a", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Layla Morrison", - "company": "Transtouch", - "phone": "892-574-3952", - "email": "layla@transtouch.com" - }, - { - "id": 8974, - "guid": "385c3bec-676a-4d7c-b172-e16372cb4a86", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kaylee Nathan", - "company": "SysUSA", - "phone": "839-428-2293", - "email": "kaylee@sysusa.com" - }, - { - "id": 8975, - "guid": "5a12fca5-ae17-4b2d-a1ac-b3c484ba30dd", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Victoria Creighton", - "company": "Interliant", - "phone": "811-420-3619", - "email": "victoria@interliant.com" - }, - { - "id": 8976, - "guid": "cc92d6d0-430c-4fbc-98eb-7e60c46760e2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lillian Carey", - "company": "Mescaridic", - "phone": "837-490-3176", - "email": "lillian@mescaridic.com" - }, - { - "id": 8977, - "guid": "7d891f62-8464-44f0-bece-04ae39fe4e4c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Trinity Thorndike", - "company": "Airdyne", - "phone": "821-533-2623", - "email": "trinity@airdyne.com" - }, - { - "id": 8978, - "guid": "95444e4f-1356-4eec-a43c-5025fa542cb7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Watson", - "company": "Thermotomic", - "phone": "811-528-2416", - "email": "elizabeth@thermotomic.com" - }, - { - "id": 8979, - "guid": "6327978b-2915-4d33-8b2d-115e93f2d582", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Conors", - "company": "Hypervaco", - "phone": "830-497-2223", - "email": "katherine@hypervaco.com" - }, - { - "id": 8980, - "guid": "e108f2e6-d4c2-40d9-b355-fd17ffa9784f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Conors", - "company": "Videobanc", - "phone": "871-508-2315", - "email": "kaitlyn@videobanc.com" - }, - { - "id": 8981, - "guid": "8a4e8b8f-1e23-4b6f-9b1b-6f77d16d7471", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Olivia Adamson", - "company": "eSteganoergy", - "phone": "847-523-2914", - "email": "olivia@esteganoergy.com" - }, - { - "id": 8982, - "guid": "d9696760-7b75-40ff-8b21-68091b3fb5cf", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Brown", - "company": "Anagraph", - "phone": "868-425-3011", - "email": "charlotte@anagraph.com" - }, - { - "id": 8983, - "guid": "64d51a5c-e0a6-4170-a82d-eaa7ef6553ff", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Cook", - "company": "Fibroserve", - "phone": "880-443-2257", - "email": "mariah@fibroserve.com" - }, - { - "id": 8984, - "guid": "40e54c6c-0e47-424b-a3e9-fafa7723b9ad", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Paige Crossman", - "company": "Pacwest", - "phone": "818-573-3073", - "email": "paige@pacwest.com" - }, - { - "id": 8985, - "guid": "85aa6a66-dfd7-4642-90ff-11103034ea15", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Faith Gill", - "company": "Fibrotouch", - "phone": "860-588-2093", - "email": "faith@fibrotouch.com" - }, - { - "id": 8986, - "guid": "d2faa103-13ba-4488-950a-bbd8f8a6dd54", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kimberly Otis", - "company": "Ventanium", - "phone": "863-497-3991", - "email": "kimberly@ventanium.com" - }, - { - "id": 8987, - "guid": "acfc17e3-08b4-4dc5-b2a8-50aabdd11b11", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Audrey Ford", - "company": "Inridium", - "phone": "851-493-2365", - "email": "audrey@inridium.com" - }, - { - "id": 8988, - "guid": "6cbd83aa-b09e-4d42-87de-ede989b9429f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Murphy", - "company": "Fibrotopia", - "phone": "879-563-3609", - "email": "vanessa@fibrotopia.com" - }, - { - "id": 8989, - "guid": "b7b5af3f-07ef-44c4-9a88-c2de4303c066", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kylie Adamson", - "company": "Conrama", - "phone": "808-443-3665", - "email": "kylie@conrama.com" - }, - { - "id": 8990, - "guid": "5d0012a1-26f9-4414-b2e5-95f4762e087b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Crossman", - "company": "Technogra", - "phone": "865-489-3885", - "email": "claire@technogra.com" - }, - { - "id": 8991, - "guid": "14daf91c-c631-49ee-a519-1806c1721a57", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Ashley Miln", - "company": "Systheon", - "phone": "859-553-3388", - "email": "ashley@systheon.com" - }, - { - "id": 8992, - "guid": "51b2b55a-d6c5-4256-808f-9e6dd5b62eed", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Turner", - "company": "Safeagra", - "phone": "870-545-2887", - "email": "alyssa@safeagra.com" - }, - { - "id": 8993, - "guid": "6e2a567d-4a7c-42c5-b8df-997a84cf01e8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lauren Gerald", - "company": "Videobanc", - "phone": "898-548-2230", - "email": "lauren@videobanc.com" - }, - { - "id": 8994, - "guid": "26b7fc8f-9266-4119-9a8b-79e304e7a686", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Smith", - "company": "Truetomic", - "phone": "839-489-3730", - "email": "alyssa@truetomic.com" - }, - { - "id": 8995, - "guid": "1ef340a6-d753-4664-8a71-e7cf95215ef3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Watson", - "company": "Orthomedia", - "phone": "861-562-3057", - "email": "makayla@orthomedia.com" - }, - { - "id": 8996, - "guid": "c192b660-811f-4806-b0dc-c02413b44e7a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Maria Gardner", - "company": "Aluco", - "phone": "806-547-2471", - "email": "maria@aluco.com" - }, - { - "id": 8997, - "guid": "700b9d8b-6b36-4ce6-80dd-5400e353d245", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Maya Wesley", - "company": "Hypervaco", - "phone": "867-568-2659", - "email": "maya@hypervaco.com" - }, - { - "id": 8998, - "guid": "c2420ddf-9f58-4497-b37e-62f242b1803b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kylie Nash", - "company": "Orthosoft", - "phone": "867-591-3324", - "email": "kylie@orthosoft.com" - }, - { - "id": 8999, - "guid": "bee754c0-2a1d-4e28-bebb-0a2cfb0abccf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Taylor Oswald", - "company": "Netsystems", - "phone": "849-535-2677", - "email": "taylor@netsystems.com" - }, - { - "id": 9000, - "guid": "112ed03f-3864-4a11-a4fb-a07ca4f8cb0c", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Bella Crossman", - "company": "Truetomic", - "phone": "852-444-2886", - "email": "bella@truetomic.com" - }, - { - "id": 9001, - "guid": "d891c730-0141-4a1f-aa3c-b4efc3ed6e49", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoey Daniels", - "company": "Qualserve", - "phone": "844-414-3559", - "email": "zoey@qualserve.com" - }, - { - "id": 9002, - "guid": "42585dcb-28cc-4840-92df-cd98f98e771a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Adamson", - "company": "Multitiqua", - "phone": "839-516-3719", - "email": "hannah@multitiqua.com" - }, - { - "id": 9003, - "guid": "76b70861-b42c-422b-9a66-0cba98c8b405", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Eva Chandter", - "company": "Airdyne", - "phone": "882-556-2592", - "email": "eva@airdyne.com" - }, - { - "id": 9004, - "guid": "123a0b68-d51b-44e8-b9e1-473af6fad797", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maya Gustman", - "company": "Raylog", - "phone": "837-579-3324", - "email": "maya@raylog.com" - }, - { - "id": 9005, - "guid": "874e297c-d7ab-461b-b29d-0de1148d93db", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bailey Goodman", - "company": "Teraserv", - "phone": "865-581-2604", - "email": "bailey@teraserv.com" - }, - { - "id": 9006, - "guid": "a65d479a-cd4a-40a3-8db7-60c91f0e49a9", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Natalie Ogden", - "company": "Netseco", - "phone": "812-559-2404", - "email": "natalie@netseco.com" - }, - { - "id": 9007, - "guid": "2f148006-accd-43e2-99c6-3013560bf016", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Samantha Miers", - "company": "Textiqua", - "phone": "865-493-2773", - "email": "samantha@textiqua.com" - }, - { - "id": 9008, - "guid": "9693f211-2490-4ead-9e31-e4d6f907c2c0", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Thorndike", - "company": "Multitiqua", - "phone": "824-416-2034", - "email": "kayla@multitiqua.com" - }, - { - "id": 9009, - "guid": "78f6051d-a16a-4c31-85e6-f44ae2fd71a9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Taylor Miller", - "company": "Enlogia", - "phone": "847-482-2064", - "email": "taylor@enlogia.com" - }, - { - "id": 9010, - "guid": "712772c7-6039-43a8-acc9-b24179f5ef50", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kayla Gustman", - "company": "Anaframe", - "phone": "890-537-2730", - "email": "kayla@anaframe.com" - }, - { - "id": 9011, - "guid": "103e21dd-fdf3-47b6-8965-16826c3f02e6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Aubrey Goldman", - "company": "Truegate", - "phone": "817-451-3505", - "email": "aubrey@truegate.com" - }, - { - "id": 9012, - "guid": "23c0b8e7-7b85-4cce-a354-d447972dfde6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lillian Neal", - "company": "Nanobanc", - "phone": "833-587-2998", - "email": "lillian@nanobanc.com" - }, - { - "id": 9013, - "guid": "940d989b-0c92-4b7a-b262-f602d4b40632", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Chloe Webster", - "company": "Raylog", - "phone": "836-432-3100", - "email": "chloe@raylog.com" - }, - { - "id": 9014, - "guid": "fd4a4fa6-f26c-4d1d-856c-2c8d2c87bcf3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Julia Day", - "company": "Idmax", - "phone": "867-404-3118", - "email": "julia@idmax.com" - }, - { - "id": 9015, - "guid": "b2c667f6-997a-4569-aa0a-595e0327265e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Autumn Calhoun", - "company": "iEnland", - "phone": "823-435-3623", - "email": "autumn@ienland.com" - }, - { - "id": 9016, - "guid": "f60da5a3-6eb2-47fb-a828-cf70791e08c3", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooklyn Warren", - "company": "Pericenta", - "phone": "803-423-3199", - "email": "brooklyn@pericenta.com" - }, - { - "id": 9017, - "guid": "6ad7b01e-a460-4c9c-b9fc-fc4ec77914e0", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Autumn Gilbert", - "company": "Aluco", - "phone": "848-438-3173", - "email": "autumn@aluco.com" - }, - { - "id": 9018, - "guid": "b1cf9658-f782-45eb-8b46-418c2c8d3d53", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Ward", - "company": "Robocomm", - "phone": "803-571-3004", - "email": "layla@robocomm.com" - }, - { - "id": 9019, - "guid": "458954a4-4e92-4138-b18e-9b2a81b9efc8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Addison Wesley", - "company": "Compuamerica", - "phone": "816-430-2394", - "email": "addison@compuamerica.com" - }, - { - "id": 9020, - "guid": "fe9d967e-5212-46b2-ad5c-fc7e9249eabe", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Hardman", - "company": "Ventanium", - "phone": "808-561-3507", - "email": "ashley@ventanium.com" - }, - { - "id": 9021, - "guid": "ef7f0471-3706-44cf-b80a-fa396e23ff1a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gabrielle Watson", - "company": "Anaframe", - "phone": "805-489-3042", - "email": "gabrielle@anaframe.com" - }, - { - "id": 9022, - "guid": "db996be3-8627-4d43-8663-78ad93270852", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Ford", - "company": "Openserve", - "phone": "837-555-3064", - "email": "angelina@openserve.com" - }, - { - "id": 9023, - "guid": "49eaab0c-8d89-4030-ae4c-465c3e9dddee", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Layla Sheldon", - "company": "US Infratouch", - "phone": "890-490-3108", - "email": "layla@us infratouch.com" - }, - { - "id": 9024, - "guid": "b7e7c412-278b-4228-8610-a15a6ddd937c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Brianna Carter", - "company": "Vencom", - "phone": "811-432-3919", - "email": "brianna@vencom.com" - }, - { - "id": 9025, - "guid": "ccab5224-e251-4b48-849e-9726b160f1ad", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Alyssa Gustman", - "company": "Orthomedia", - "phone": "871-483-2080", - "email": "alyssa@orthomedia.com" - }, - { - "id": 9026, - "guid": "31fd91e6-a448-4b2d-ad36-715816096489", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Riley Gustman", - "company": "Allnet", - "phone": "821-400-2978", - "email": "riley@allnet.com" - }, - { - "id": 9027, - "guid": "47edb618-2dff-4798-bdee-798afa8c6153", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Youmans", - "company": "Unconix", - "phone": "875-528-3795", - "email": "bailey@unconix.com" - }, - { - "id": 9028, - "guid": "b68a51ae-7c9f-4797-b91e-8e6765222dab", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Valeria Carroll", - "company": "Generola", - "phone": "836-568-3741", - "email": "valeria@generola.com" - }, - { - "id": 9029, - "guid": "d522f672-f79b-415f-b008-27fd97c3d690", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Gardner", - "company": "Polytheon", - "phone": "896-471-2659", - "email": "brooklyn@polytheon.com" - }, - { - "id": 9030, - "guid": "ab684df3-15f4-44ed-975a-3217f0f32b49", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Abigail Hardman", - "company": "Allphysiche", - "phone": "859-495-2685", - "email": "abigail@allphysiche.com" - }, - { - "id": 9031, - "guid": "79637660-7089-4a9e-9582-0a1da144bcfb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sofia Gill", - "company": "Entcast", - "phone": "807-443-2963", - "email": "sofia@entcast.com" - }, - { - "id": 9032, - "guid": "4fbee00e-6f4b-40bb-a33b-f3e1c7ae4b4c", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Higgins", - "company": "Techtron", - "phone": "896-470-3597", - "email": "maya@techtron.com" - }, - { - "id": 9033, - "guid": "f10a4f3d-998f-442b-a93b-da5104f9348f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoey Chapman", - "company": "Titanirola", - "phone": "801-575-3701", - "email": "zoey@titanirola.com" - }, - { - "id": 9034, - "guid": "db85eb07-3894-46d1-884a-8bbe50e53e2a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aaliyah Miers", - "company": "Mescaridic", - "phone": "879-584-2911", - "email": "aaliyah@mescaridic.com" - }, - { - "id": 9035, - "guid": "d0e8e320-7ea2-4db0-97d8-54f513f1c916", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Oliver", - "company": "Turbomart", - "phone": "885-568-2438", - "email": "hailey@turbomart.com" - }, - { - "id": 9036, - "guid": "77ccd7d6-8077-48b2-96b8-356e72ea5190", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jessica White", - "company": "iQualcar", - "phone": "851-407-3822", - "email": "jessica@iqualcar.com" - }, - { - "id": 9037, - "guid": "1a1cc512-f842-472f-a46f-941d786d5045", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Andrea Cook", - "company": "Netseco", - "phone": "899-571-2508", - "email": "andrea@netseco.com" - }, - { - "id": 9038, - "guid": "d5f37434-fa1e-47b9-b361-2c6caaf6daad", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jasmine Smith", - "company": "Cryptotegrity", - "phone": "885-494-3824", - "email": "jasmine@cryptotegrity.com" - }, - { - "id": 9039, - "guid": "ea067cff-66b7-48e5-a6c8-ea2bc9010d67", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ashley Vaughan", - "company": "Qualserve", - "phone": "842-591-3887", - "email": "ashley@qualserve.com" - }, - { - "id": 9040, - "guid": "74181988-e78c-4d4b-ae6a-e18dbdf8903e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Khloe Bush", - "company": "Conotomics", - "phone": "854-467-3794", - "email": "khloe@conotomics.com" - }, - { - "id": 9041, - "guid": "3ff3ab01-c605-4d40-9bb3-b3772b60c0f6", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis WifKinson", - "company": "Celgra", - "phone": "859-555-3864", - "email": "alexis@celgra.com" - }, - { - "id": 9042, - "guid": "8c6c3f83-25e7-44ab-9b7c-14385d4cb9c6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Young", - "company": "Quintegrity", - "phone": "839-412-2383", - "email": "evelyn@quintegrity.com" - }, - { - "id": 9043, - "guid": "a5ecc2e6-807d-4826-b6b7-6eb25d22f5c9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Thorndike", - "company": "Mescaridic", - "phone": "800-454-2460", - "email": "katherine@mescaridic.com" - }, - { - "id": 9044, - "guid": "7c1524bf-eb75-4093-a7e1-ba2757c6dab8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Makayla Conors", - "company": "Aluco", - "phone": "841-533-2248", - "email": "makayla@aluco.com" - }, - { - "id": 9045, - "guid": "3176982d-0867-4147-8f15-25a8d341d3cb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Abramson", - "company": "Netseco", - "phone": "838-542-3055", - "email": "grace@netseco.com" - }, - { - "id": 9046, - "guid": "687deb8d-1845-46fe-a21e-846d1e545a99", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Elizabeth Webster", - "company": "Textiqua", - "phone": "885-422-2743", - "email": "elizabeth@textiqua.com" - }, - { - "id": 9047, - "guid": "3e2c895b-1284-4fc4-b541-f07160dd099d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Grace Hailey", - "company": "Openserve", - "phone": "844-488-3578", - "email": "grace@openserve.com" - }, - { - "id": 9048, - "guid": "e55d63ed-1d61-4d96-80b8-ebce22d0ecfa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Galbraith", - "company": "Tekcar", - "phone": "891-546-2889", - "email": "maya@tekcar.com" - }, - { - "id": 9049, - "guid": "f1916670-a447-41a2-a1ed-4808b7520d9f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Osborne", - "company": "Conrama", - "phone": "804-527-3501", - "email": "zoey@conrama.com" - }, - { - "id": 9050, - "guid": "d3e81b90-6615-4af2-b00e-4bb074aca31a", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Paige Ford", - "company": "Qualserve", - "phone": "883-576-3009", - "email": "paige@qualserve.com" - }, - { - "id": 9051, - "guid": "fcdcbb71-1aa5-49ca-aa13-89d19e36ed04", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Lillian Miller", - "company": "eSteganoergy", - "phone": "861-495-2000", - "email": "lillian@esteganoergy.com" - }, - { - "id": 9052, - "guid": "8f699b42-3807-43ae-8bad-22e8d9249825", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Emily Nash", - "company": "Inridium", - "phone": "813-573-3013", - "email": "emily@inridium.com" - }, - { - "id": 9053, - "guid": "cfb747fa-e1c8-48b2-8dba-cb7deace3cbc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabelle Brooks", - "company": "Superscope", - "phone": "850-400-3037", - "email": "isabelle@superscope.com" - }, - { - "id": 9054, - "guid": "c034ae89-17d8-4951-a9ca-77529b69ccb5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva White", - "company": "US Infratouch", - "phone": "818-525-2394", - "email": "eva@us infratouch.com" - }, - { - "id": 9055, - "guid": "b09ab643-4e17-4e53-8a3c-e75467923403", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Galbraith", - "company": "Technogra", - "phone": "875-560-3617", - "email": "aaliyah@technogra.com" - }, - { - "id": 9056, - "guid": "2c8a78ec-0e88-43a4-85d8-f92775ebf05b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Andrea Webster", - "company": "Fibrotouch", - "phone": "865-584-2828", - "email": "andrea@fibrotouch.com" - }, - { - "id": 9057, - "guid": "2204be85-3798-4bde-963f-5ff4ab1f9fde", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Ward", - "company": "Conrama", - "phone": "887-492-3953", - "email": "sophia@conrama.com" - }, - { - "id": 9058, - "guid": "3b5d2039-79e0-4bb3-ab11-13206b0f03cf", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gabriella Carter", - "company": "Pacwest", - "phone": "882-502-3603", - "email": "gabriella@pacwest.com" - }, - { - "id": 9059, - "guid": "f229fbd5-5d08-4176-b5d7-4bff6a337ff8", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Warren", - "company": "Tekcar", - "phone": "878-408-3557", - "email": "abigail@tekcar.com" - }, - { - "id": 9060, - "guid": "41bcd114-08ce-4d17-bfe8-640d74aea480", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Leah Wayne", - "company": "Transtouch", - "phone": "849-413-2897", - "email": "leah@transtouch.com" - }, - { - "id": 9061, - "guid": "2b755b42-f088-46f9-b3e9-f73f24cc19dc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Victoria Croftoon", - "company": "Robotomic", - "phone": "855-565-2496", - "email": "victoria@robotomic.com" - }, - { - "id": 9062, - "guid": "db58337b-7cab-4762-a77e-2da111abd574", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kimberly Turner", - "company": "Anaframe", - "phone": "848-538-3260", - "email": "kimberly@anaframe.com" - }, - { - "id": 9063, - "guid": "1e2692bc-7894-495b-8639-cbf2d5a7cc8f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Destiny Sheldon", - "company": "Titanirola", - "phone": "846-579-2725", - "email": "destiny@titanirola.com" - }, - { - "id": 9064, - "guid": "17e00e9d-7bf7-4c90-9ed3-06886555ee83", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Audrey Sherlock", - "company": "Conotomics", - "phone": "851-512-3755", - "email": "audrey@conotomics.com" - }, - { - "id": 9065, - "guid": "1eb5a121-45a9-4bcf-b0b2-c2a329331271", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emily WifKinson", - "company": "Fibrotopia", - "phone": "869-596-2007", - "email": "emily@fibrotopia.com" - }, - { - "id": 9066, - "guid": "0820e456-a503-4df3-bcf6-b64bf209d67c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Carrington", - "company": "Truetomic", - "phone": "888-508-2017", - "email": "taylor@truetomic.com" - }, - { - "id": 9067, - "guid": "564ef0ff-f7ca-4770-a827-7428f521f041", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Hannah Gill", - "company": "Rapigrafix", - "phone": "824-449-3983", - "email": "hannah@rapigrafix.com" - }, - { - "id": 9068, - "guid": "0fbc2374-4130-45ab-9185-6f6f5edc3a24", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Zoey Wood", - "company": "Textiqua", - "phone": "844-410-3058", - "email": "zoey@textiqua.com" - }, - { - "id": 9069, - "guid": "1a109338-e797-49d1-a378-75202adccfa9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexis Ward", - "company": "Robotomic", - "phone": "845-580-2402", - "email": "alexis@robotomic.com" - }, - { - "id": 9070, - "guid": "8c0d81ba-7026-421d-a627-927677a3e408", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Emma Charlson", - "company": "Westgate", - "phone": "838-520-2127", - "email": "emma@westgate.com" - }, - { - "id": 9071, - "guid": "fc4caee1-d871-4804-8f99-d13381850e6f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Conors", - "company": "iOptystix", - "phone": "807-544-3198", - "email": "camila@ioptystix.com" - }, - { - "id": 9072, - "guid": "26e96704-7b72-4bf1-b282-43cbf657cc24", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooke Timmons", - "company": "Titanigraf", - "phone": "881-456-2857", - "email": "brooke@titanigraf.com" - }, - { - "id": 9073, - "guid": "1fb5f516-485b-47a5-98e6-efaeb1a8424d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Ella Campbell", - "company": "Infraique", - "phone": "829-571-2612", - "email": "ella@infraique.com" - }, - { - "id": 9074, - "guid": "0a4a61bc-dcd6-4881-846e-69a7be76016c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Murphy", - "company": "Keytheon", - "phone": "812-443-2686", - "email": "peyton@keytheon.com" - }, - { - "id": 9075, - "guid": "e4e72701-a1b4-4c9b-b1f0-52eefcc4dcfe", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Kayla Day", - "company": "Celgra", - "phone": "877-578-2002", - "email": "kayla@celgra.com" - }, - { - "id": 9076, - "guid": "90d45a76-c3e5-4c29-91d5-c0d645afc563", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mackenzie Otis", - "company": "Pericenta", - "phone": "871-525-2110", - "email": "mackenzie@pericenta.com" - }, - { - "id": 9077, - "guid": "a295ac69-4e3e-4259-8d15-664a87b5011c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gianna Murphy", - "company": "Transtouch", - "phone": "859-541-3285", - "email": "gianna@transtouch.com" - }, - { - "id": 9078, - "guid": "fbb9f59f-5ca6-425e-86de-d7eb7f199231", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alyssa Charlson", - "company": "Openserve", - "phone": "810-428-3349", - "email": "alyssa@openserve.com" - }, - { - "id": 9079, - "guid": "41cd36db-f671-4644-9198-e8c5766600a9", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Hawkins", - "company": "Transtouch", - "phone": "886-553-2150", - "email": "sarah@transtouch.com" - }, - { - "id": 9080, - "guid": "ed726701-4d61-4961-8dbf-911aa41e7b78", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabriella Miln", - "company": "Multitiqua", - "phone": "859-508-3537", - "email": "gabriella@multitiqua.com" - }, - { - "id": 9081, - "guid": "f1d3a5ff-1c94-4155-8fe6-6ac7938ac5bb", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Ogden", - "company": "SysUSA", - "phone": "887-403-2409", - "email": "jasmine@sysusa.com" - }, - { - "id": 9082, - "guid": "3eb6ce4b-4c96-4aee-a070-23f0aec35323", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Emma Carroll", - "company": "Idmax", - "phone": "831-433-3310", - "email": "emma@idmax.com" - }, - { - "id": 9083, - "guid": "9c15e679-0fd3-46a1-aab0-23d7cbdff7eb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Carrington", - "company": "Allnet", - "phone": "807-534-2125", - "email": "alyssa@allnet.com" - }, - { - "id": 9084, - "guid": "af015149-9a87-4f24-9311-7ab1f45f5582", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia WifKinson", - "company": "Superscope", - "phone": "801-472-2399", - "email": "amelia@superscope.com" - }, - { - "id": 9085, - "guid": "03d88023-9bb5-403a-8a09-f50534476dc2", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Creighton", - "company": "Hypervaco", - "phone": "852-492-3125", - "email": "bailey@hypervaco.com" - }, - { - "id": 9086, - "guid": "0b397ac9-b350-4118-b394-beb71f7f7ff7", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Brianna Cook", - "company": "Mescatron", - "phone": "813-586-3882", - "email": "brianna@mescatron.com" - }, - { - "id": 9087, - "guid": "fb8d5948-9a3e-41fb-8d0f-619722c42c0e", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Brickman", - "company": "Aluco", - "phone": "836-558-3717", - "email": "zoey@aluco.com" - }, - { - "id": 9088, - "guid": "c73d7c31-0f1f-428a-a333-091b6f370fd5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lillian Carey", - "company": "iEnland", - "phone": "878-412-3775", - "email": "lillian@ienland.com" - }, - { - "id": 9089, - "guid": "9e2e0e55-e268-4d13-a47d-26b41f5f29dd", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Camila Oswald", - "company": "SysVenamerica", - "phone": "843-450-2649", - "email": "camila@sysvenamerica.com" - }, - { - "id": 9090, - "guid": "1f6a2491-a7e5-4893-beaf-754df976bbad", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Brooks", - "company": "Allphysiche", - "phone": "829-471-3251", - "email": "elizabeth@allphysiche.com" - }, - { - "id": 9091, - "guid": "337e6ce2-4bfe-4aba-919e-bedcd684e989", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Trinity Otis", - "company": "Skydata", - "phone": "886-468-2500", - "email": "trinity@skydata.com" - }, - { - "id": 9092, - "guid": "7460f21d-0338-4a9e-b528-5876fdaa4236", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Valeria Chandter", - "company": "Pericenta", - "phone": "823-551-2809", - "email": "valeria@pericenta.com" - }, - { - "id": 9093, - "guid": "9c376093-4eb5-4b74-82ac-1c1b9c3c6b5f", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mackenzie Michaelson", - "company": "US Omnigraphik", - "phone": "829-412-3897", - "email": "mackenzie@us omnigraphik.com" - }, - { - "id": 9094, - "guid": "cad07d5b-50e0-40c7-8d80-a829a943ed37", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Murphy", - "company": "Indisco", - "phone": "890-464-3222", - "email": "paige@indisco.com" - }, - { - "id": 9095, - "guid": "e35eec40-9549-44f7-9dd5-e413aa881a5f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Wayne", - "company": "Indisco", - "phone": "849-455-2586", - "email": "faith@indisco.com" - }, - { - "id": 9096, - "guid": "afeacd7b-eac4-4e18-9c94-be08c3d11183", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Higgins", - "company": "Steganoconiche", - "phone": "850-515-2834", - "email": "julia@steganoconiche.com" - }, - { - "id": 9097, - "guid": "ef2de116-7e8a-4ad3-8648-a50a07bc174c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Zoey Hamphrey", - "company": "eEyetanic", - "phone": "899-516-2299", - "email": "zoey@eeyetanic.com" - }, - { - "id": 9098, - "guid": "7771e07d-f901-4e71-be3b-c07963d138ef", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Peyton Bush", - "company": "Raylog", - "phone": "863-537-2391", - "email": "peyton@raylog.com" - }, - { - "id": 9099, - "guid": "211c4db7-e13f-449b-8dec-a89b435b3e88", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Melanie Molligan", - "company": "Orthosoft", - "phone": "876-438-3860", - "email": "melanie@orthosoft.com" - }, - { - "id": 9100, - "guid": "e17b8d0d-cb90-40d1-a36f-c5e54e7aa10e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aubrey Mercer", - "company": "Qualserve", - "phone": "843-459-2529", - "email": "aubrey@qualserve.com" - }, - { - "id": 9101, - "guid": "04ecf962-43c4-475b-ad73-64bb6d7691fa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maya Gardner", - "company": "Titanirola", - "phone": "811-400-3629", - "email": "maya@titanirola.com" - }, - { - "id": 9102, - "guid": "c0ef238d-ee3b-4e76-99a1-861eb537ec4c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lily Wesley", - "company": "Truetomic", - "phone": "899-550-3337", - "email": "lily@truetomic.com" - }, - { - "id": 9103, - "guid": "958f564f-99ca-4068-9e55-0e4d0a018550", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Emily Carroll", - "company": "Raylog", - "phone": "860-450-2648", - "email": "emily@raylog.com" - }, - { - "id": 9104, - "guid": "deff2d0e-b89c-44b6-a1a5-a55b9ffa6f9f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Khloe Galbraith", - "company": "SysUSA", - "phone": "892-452-3869", - "email": "khloe@sysusa.com" - }, - { - "id": 9105, - "guid": "3c4aeb14-c6aa-422f-bc7d-faa56a996640", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Natalie Vaughan", - "company": "Teraserv", - "phone": "874-576-2987", - "email": "natalie@teraserv.com" - }, - { - "id": 9106, - "guid": "c6a9a877-6fb7-46b4-a492-4e22b5f2af1b", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Genesis Neal", - "company": "Raylog", - "phone": "811-474-3363", - "email": "genesis@raylog.com" - }, - { - "id": 9107, - "guid": "08c1151f-865d-4736-bea6-23d93e716497", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Morgan Goodman", - "company": "Safetrust", - "phone": "879-417-3767", - "email": "morgan@safetrust.com" - }, - { - "id": 9108, - "guid": "da1086d3-c637-4a0b-8a37-b5591bec9763", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Elizabeth Michaelson", - "company": "Openserve", - "phone": "875-505-3437", - "email": "elizabeth@openserve.com" - }, - { - "id": 9109, - "guid": "8033c673-3a9c-4d0a-9267-7de05e462c66", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexa Freeman", - "company": "Techtron", - "phone": "812-520-2238", - "email": "alexa@techtron.com" - }, - { - "id": 9110, - "guid": "82392044-892c-49b1-b6b0-c3fbbb81450b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hailey Vance", - "company": "Westgate", - "phone": "846-417-3655", - "email": "hailey@westgate.com" - }, - { - "id": 9111, - "guid": "b8b126b3-bc6a-4ab7-8298-8742ab0cb201", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Avery Freeman", - "company": "Keytheon", - "phone": "826-439-3257", - "email": "avery@keytheon.com" - }, - { - "id": 9112, - "guid": "f2265170-7d55-4db2-b426-ec13bc7a4332", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Evelyn Sheldon", - "company": "Cryptotegrity", - "phone": "888-425-3094", - "email": "evelyn@cryptotegrity.com" - }, - { - "id": 9113, - "guid": "b222f4ad-390f-4697-8f62-b5f2e8390e81", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Vanessa Miller", - "company": "Vencom", - "phone": "834-418-3192", - "email": "vanessa@vencom.com" - }, - { - "id": 9114, - "guid": "16dfa318-b84e-40d4-b5d3-c4ed5d6d1565", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Waller", - "company": "Hypervaco", - "phone": "896-434-3780", - "email": "aubrey@hypervaco.com" - }, - { - "id": 9115, - "guid": "354ebee5-d19e-4a0d-830e-819155a06ad5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Charlotte Davidson", - "company": "Infraique", - "phone": "833-473-2110", - "email": "charlotte@infraique.com" - }, - { - "id": 9116, - "guid": "75054605-10fb-4978-be34-225e80a97f42", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoe Gardner", - "company": "US Omnigraphik", - "phone": "801-477-2640", - "email": "zoe@us omnigraphik.com" - }, - { - "id": 9117, - "guid": "51ecf242-d82e-43ff-9fff-680ff4b7ad47", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Cook", - "company": "US Infratouch", - "phone": "882-529-2421", - "email": "nevaeh@us infratouch.com" - }, - { - "id": 9118, - "guid": "7a15c8de-08df-487d-b584-ff5a19e9de94", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Hoggarth", - "company": "InfoAirway", - "phone": "889-532-3569", - "email": "khloe@infoairway.com" - }, - { - "id": 9119, - "guid": "fcab4c9d-bef9-4119-9d2d-7eaedbf4d6c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madelyn Nash", - "company": "Westtomik", - "phone": "821-578-2771", - "email": "madelyn@westtomik.com" - }, - { - "id": 9120, - "guid": "10101374-22b5-4d3e-8f80-3cafc2f7f5c2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Fulton", - "company": "Allnet", - "phone": "845-490-2351", - "email": "kayla@allnet.com" - }, - { - "id": 9121, - "guid": "daadd526-5a83-4492-96e3-84628c103240", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Morgan Day", - "company": "Allnet", - "phone": "868-501-3947", - "email": "morgan@allnet.com" - }, - { - "id": 9122, - "guid": "86e15806-36ee-4982-bd41-de6e44f86fe0", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Emily Vaughan", - "company": "iOptystix", - "phone": "800-518-3858", - "email": "emily@ioptystix.com" - }, - { - "id": 9123, - "guid": "b041439e-8085-4021-952b-578daede660e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Zoey Croftoon", - "company": "Unconix", - "phone": "868-553-2056", - "email": "zoey@unconix.com" - }, - { - "id": 9124, - "guid": "3d501c3e-7b2e-41c1-b9bd-4384dbf087be", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Emma Gilmore", - "company": "Westgate", - "phone": "826-583-3077", - "email": "emma@westgate.com" - }, - { - "id": 9125, - "guid": "8d23b95a-67c5-49ff-83e0-ddae212b32ca", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Serenity Smith", - "company": "Ameritron", - "phone": "839-436-3138", - "email": "serenity@ameritron.com" - }, - { - "id": 9126, - "guid": "553034fb-5c02-4beb-8ff1-cdc3caf667fe", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Molly Cramer", - "company": "iMedconik", - "phone": "882-455-3956", - "email": "molly@imedconik.com" - }, - { - "id": 9127, - "guid": "aa119590-6b04-4b05-9b8c-7c065dfe5a92", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Elizabeth Bush", - "company": "Truegate", - "phone": "888-548-2280", - "email": "elizabeth@truegate.com" - }, - { - "id": 9128, - "guid": "9b73437e-3072-44e9-99cd-95a29cbcf1ac", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Melanie Hardman", - "company": "Sontopia", - "phone": "838-509-3544", - "email": "melanie@sontopia.com" - }, - { - "id": 9129, - "guid": "26d5bdeb-8e7f-4c48-8fd5-0678dfb4153d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Jessica Wayne", - "company": "Allphysiche", - "phone": "802-557-3265", - "email": "jessica@allphysiche.com" - }, - { - "id": 9130, - "guid": "20958520-9eb3-4150-9260-54b170e68b8a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Owen", - "company": "Entcast", - "phone": "846-471-3964", - "email": "lauren@entcast.com" - }, - { - "id": 9131, - "guid": "2c404314-b27d-487c-ad5d-c07fa8ae1334", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Camila Carroll", - "company": "Mescatron", - "phone": "843-539-3212", - "email": "camila@mescatron.com" - }, - { - "id": 9132, - "guid": "714d82c5-7945-4829-937e-8489a30e6575", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Bella Day", - "company": "Generola", - "phone": "809-512-2048", - "email": "bella@generola.com" - }, - { - "id": 9133, - "guid": "4a491a9f-fe8c-4522-9bc3-119708cc5fe5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Arianna Hawkins", - "company": "iEnland", - "phone": "886-403-2453", - "email": "arianna@ienland.com" - }, - { - "id": 9134, - "guid": "7ca9bf9f-f383-4253-bc2b-fe59b97b2c79", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Charlotte Owen", - "company": "Entcast", - "phone": "864-423-3165", - "email": "charlotte@entcast.com" - }, - { - "id": 9135, - "guid": "8ef69fab-15c5-4125-8097-890cf8ffddba", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Brooke Brooks", - "company": "Hypervaco", - "phone": "840-497-2957", - "email": "brooke@hypervaco.com" - }, - { - "id": 9136, - "guid": "70777339-1ba4-449f-9270-1c2ef6d35214", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Peyton Thornton", - "company": "Openserve", - "phone": "867-482-3481", - "email": "peyton@openserve.com" - }, - { - "id": 9137, - "guid": "4b4d742a-4cf6-4ae0-85f4-b33a5a6cdccf", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Julia Osborne", - "company": "Titanirola", - "phone": "854-505-3180", - "email": "julia@titanirola.com" - }, - { - "id": 9138, - "guid": "7fcf139d-69ad-4aef-867c-d2a20044d428", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Gate", - "company": "Teknoplexon", - "phone": "820-507-3375", - "email": "alexa@teknoplexon.com" - }, - { - "id": 9139, - "guid": "c9366443-6272-437d-8e43-6a79c8b4b6da", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Genesis Sheldon", - "company": "Truetomic", - "phone": "835-539-2135", - "email": "genesis@truetomic.com" - }, - { - "id": 9140, - "guid": "ccce89b9-c8c0-4951-977c-5e08f11dcc4a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sydney Nelson", - "company": "Conotomics", - "phone": "829-475-2179", - "email": "sydney@conotomics.com" - }, - { - "id": 9141, - "guid": "845119ff-e989-43ee-b1a3-3d12cca8489a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Genesis Chesterton", - "company": "Xeicon", - "phone": "887-414-3287", - "email": "genesis@xeicon.com" - }, - { - "id": 9142, - "guid": "52f0fa82-369a-4b0f-bd09-c0b5230f2073", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Chloe Thomson", - "company": "Truegate", - "phone": "805-539-3104", - "email": "chloe@truegate.com" - }, - { - "id": 9143, - "guid": "2b6b3be7-f179-40fd-a655-377b21e59e1a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Lily Timmons", - "company": "Inridium", - "phone": "836-532-3296", - "email": "lily@inridium.com" - }, - { - "id": 9144, - "guid": "d469bceb-39ba-4c93-9ff2-c5e161bb8cbb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophia Wesley", - "company": "Tekcar", - "phone": "889-471-2370", - "email": "sophia@tekcar.com" - }, - { - "id": 9145, - "guid": "4d76ec95-6514-4baa-b9d1-07789cda0482", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Audrey Nelson", - "company": "Genland", - "phone": "878-553-2066", - "email": "audrey@genland.com" - }, - { - "id": 9146, - "guid": "a2428287-f2e1-49df-a51e-ad95b8d1dabd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brianna Smith", - "company": "Unologic", - "phone": "829-546-3272", - "email": "brianna@unologic.com" - }, - { - "id": 9147, - "guid": "3975fe72-e1c7-45ad-944d-b3dc43cc32bb", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Destiny Crossman", - "company": "Videobanc", - "phone": "829-413-2157", - "email": "destiny@videobanc.com" - }, - { - "id": 9148, - "guid": "3999fc30-b357-4865-9fd8-db0ec250352b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Hardman", - "company": "Unconix", - "phone": "888-540-2355", - "email": "peyton@unconix.com" - }, - { - "id": 9149, - "guid": "ec583d15-c0a6-4690-82f2-2495ae554e27", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Rachel Walkman", - "company": "Pacwest", - "phone": "810-537-3677", - "email": "rachel@pacwest.com" - }, - { - "id": 9150, - "guid": "7a20fb23-9133-4a7d-8835-bc6c90316be9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Faith Clapton", - "company": "Technogra", - "phone": "897-467-2257", - "email": "faith@technogra.com" - }, - { - "id": 9151, - "guid": "8e3a7edb-b8d6-4841-a929-2b6886a02d73", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Arianna Milton", - "company": "Fibrotopia", - "phone": "895-593-3113", - "email": "arianna@fibrotopia.com" - }, - { - "id": 9152, - "guid": "e30b2656-f0c0-49f5-a5ad-021368cc6462", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Avery Goodman", - "company": "Dynarama", - "phone": "899-439-3714", - "email": "avery@dynarama.com" - }, - { - "id": 9153, - "guid": "c8010792-2b24-468a-8d8d-148e0ad056d2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Oldridge", - "company": "Venconix", - "phone": "887-497-2813", - "email": "peyton@venconix.com" - }, - { - "id": 9154, - "guid": "9dd0cbc5-d28a-4f7c-ae81-0763ed94f9f9", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Owen", - "company": "Robotemplate", - "phone": "865-435-3682", - "email": "katelyn@robotemplate.com" - }, - { - "id": 9155, - "guid": "e0efb809-08d0-44e9-9418-1ac532cf002d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Sheldon", - "company": "Allnet", - "phone": "893-593-3550", - "email": "zoe@allnet.com" - }, - { - "id": 9156, - "guid": "2cf12d5d-5a80-408c-b7a8-ac192916bdf6", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Sophia Milton", - "company": "Technogra", - "phone": "814-424-3655", - "email": "sophia@technogra.com" - }, - { - "id": 9157, - "guid": "9aa8bcf9-be0a-4cb7-acb5-60bf52055f3a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Fisher", - "company": "Netseco", - "phone": "845-483-2997", - "email": "jocelyn@netseco.com" - }, - { - "id": 9158, - "guid": "0c0a1914-1c41-4744-adb2-a85f16a338b2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Webster", - "company": "Infraique", - "phone": "804-415-2095", - "email": "natalie@infraique.com" - }, - { - "id": 9159, - "guid": "71bc2ee5-0bbe-4c05-86ac-d19ab35e3d6f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Hodges", - "company": "Unconix", - "phone": "898-478-2239", - "email": "kayla@unconix.com" - }, - { - "id": 9160, - "guid": "4d569571-10ac-45a2-a356-bc2545bf830f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kayla Otis", - "company": "Gigaura", - "phone": "898-429-3948", - "email": "kayla@gigaura.com" - }, - { - "id": 9161, - "guid": "74c4af92-c8c6-416e-8a02-dd7e1fd8aef9", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Ariana Nash", - "company": "Infraique", - "phone": "873-506-2826", - "email": "ariana@infraique.com" - }, - { - "id": 9162, - "guid": "7e140a30-a797-4a4b-9e2a-1fb0c51779f9", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Bella Miller", - "company": "Proline", - "phone": "831-428-2036", - "email": "bella@proline.com" - }, - { - "id": 9163, - "guid": "45dd468d-f3cd-4751-bc2f-222cbac9d3b1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Higgins", - "company": "Teraserv", - "phone": "837-557-2736", - "email": "destiny@teraserv.com" - }, - { - "id": 9164, - "guid": "aff02aa7-172d-482b-b5d1-2bf2916c859d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Natalie Carter", - "company": "Navivacs", - "phone": "895-575-3516", - "email": "natalie@navivacs.com" - }, - { - "id": 9165, - "guid": "df1ee505-1f8c-433c-8e71-c8b4a12e41c7", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Isabella Walkman", - "company": "Enlogia", - "phone": "828-489-3478", - "email": "isabella@enlogia.com" - }, - { - "id": 9166, - "guid": "716214c5-85cd-484f-b0a9-1d7d08b6973e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kaitlyn Timmons", - "company": "Inridium", - "phone": "847-571-3922", - "email": "kaitlyn@inridium.com" - }, - { - "id": 9167, - "guid": "6dd4c467-9b8a-44ae-b036-3efa12820dd4", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Thorndike", - "company": "Aprama", - "phone": "805-504-2397", - "email": "madeline@aprama.com" - }, - { - "id": 9168, - "guid": "4326d766-5a29-48bd-92aa-8156df24c62e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Daniels", - "company": "Conrama", - "phone": "871-525-3242", - "email": "aaliyah@conrama.com" - }, - { - "id": 9169, - "guid": "e9d0eb31-eed1-41ae-a050-28630f02e337", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Natalie Davidson", - "company": "Nanobanc", - "phone": "881-474-3246", - "email": "natalie@nanobanc.com" - }, - { - "id": 9170, - "guid": "4b06854a-a27f-4154-8ab4-b5d66a8d3326", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Brooke Smith", - "company": "iSkyvaco", - "phone": "856-446-2203", - "email": "brooke@iskyvaco.com" - }, - { - "id": 9171, - "guid": "1df7752a-0570-405f-a4db-6f703c1378be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Jessica Gibbs", - "company": "Transtouch", - "phone": "889-454-3313", - "email": "jessica@transtouch.com" - }, - { - "id": 9172, - "guid": "56b9d44a-7a80-496b-bd03-09fe57deb3e4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Clapton", - "company": "Teratopia", - "phone": "867-559-2030", - "email": "ella@teratopia.com" - }, - { - "id": 9173, - "guid": "db881f4c-91d1-4a39-b562-1128b679b709", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Addison Croftoon", - "company": "Hypervaco", - "phone": "833-561-2189", - "email": "addison@hypervaco.com" - }, - { - "id": 9174, - "guid": "e49f1304-0d28-4a7b-bea8-95c3c8dc4081", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Vance", - "company": "Titanirola", - "phone": "847-528-2099", - "email": "angelina@titanirola.com" - }, - { - "id": 9175, - "guid": "7b36280c-fe95-4548-b147-85984095c72e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Gianna Gilmore", - "company": "RoboAerlogix", - "phone": "852-460-3180", - "email": "gianna@roboaerlogix.com" - }, - { - "id": 9176, - "guid": "de41cf07-67ff-4490-867d-7b15a59d8559", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Paige Turner", - "company": "Rapigrafix", - "phone": "883-524-2034", - "email": "paige@rapigrafix.com" - }, - { - "id": 9177, - "guid": "853e5fce-6a15-47b3-99d0-d886d6da7fd9", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Serenity Thorndike", - "company": "Safeagra", - "phone": "825-435-3929", - "email": "serenity@safeagra.com" - }, - { - "id": 9178, - "guid": "b8038b6f-4a8e-408d-a9bf-40e32d5ff6bd", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Elizabeth Stanley", - "company": "Genland", - "phone": "846-540-2406", - "email": "elizabeth@genland.com" - }, - { - "id": 9179, - "guid": "b49ae69a-d4f1-4d9a-8b21-5f7d9eebf3ce", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Lily Fisher", - "company": "Robotemplate", - "phone": "877-431-3540", - "email": "lily@robotemplate.com" - }, - { - "id": 9180, - "guid": "f1f83bc8-7699-4f4f-8a0e-181f5188ff58", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Carroll", - "company": "Unologic", - "phone": "868-543-3267", - "email": "layla@unologic.com" - }, - { - "id": 9181, - "guid": "75dd26be-1115-476e-b379-6cfb94c28bd4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Day", - "company": "Pericenta", - "phone": "898-563-2508", - "email": "melanie@pericenta.com" - }, - { - "id": 9182, - "guid": "0ef5e373-8dfb-471b-865e-d4e220da5098", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Brooklyn Hancock", - "company": "Airdyne", - "phone": "816-594-3671", - "email": "brooklyn@airdyne.com" - }, - { - "id": 9183, - "guid": "cbf1bde5-73c2-4965-9ffb-cc839a29b673", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Paige Adamson", - "company": "iEnland", - "phone": "852-461-2446", - "email": "paige@ienland.com" - }, - { - "id": 9184, - "guid": "14736154-f578-4808-9d17-d6eef68ce6c4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Mercer", - "company": "Videobanc", - "phone": "890-443-2122", - "email": "peyton@videobanc.com" - }, - { - "id": 9185, - "guid": "24439e9a-b385-4124-a1df-2e2de8d4a764", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Bailey Carey", - "company": "Allphysiche", - "phone": "864-415-2290", - "email": "bailey@allphysiche.com" - }, - { - "id": 9186, - "guid": "8ae69bda-7227-47a4-8729-e41d6dde36d6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Bailey Chesterton", - "company": "Turbomart", - "phone": "864-467-2829", - "email": "bailey@turbomart.com" - }, - { - "id": 9187, - "guid": "1205297e-56c8-4df8-8701-b146dd3689ec", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mia Abramson", - "company": "Aluco", - "phone": "844-493-2913", - "email": "mia@aluco.com" - }, - { - "id": 9188, - "guid": "cfbd3b27-e41b-494c-9fc4-0a328d7fc8c5", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maya Nash", - "company": "Truegate", - "phone": "864-465-3769", - "email": "maya@truegate.com" - }, - { - "id": 9189, - "guid": "06300ff9-6ae5-4c6a-b86b-d8548c107f7a", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mya WifKinson", - "company": "Gigaura", - "phone": "846-469-3284", - "email": "mya@gigaura.com" - }, - { - "id": 9190, - "guid": "184ba1aa-1b02-41df-97a1-61d3aed6b74c", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Makayla Gilmore", - "company": "Netseco", - "phone": "813-509-3591", - "email": "makayla@netseco.com" - }, - { - "id": 9191, - "guid": "3fa2e688-5557-4d66-9a1f-d2207e7a6568", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Nevaeh Carey", - "company": "Superscope", - "phone": "804-496-3311", - "email": "nevaeh@superscope.com" - }, - { - "id": 9192, - "guid": "2413dce6-de72-486c-b33c-60dc2ed555f2", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Fisher", - "company": "Syssoft", - "phone": "877-542-2424", - "email": "gabrielle@syssoft.com" - }, - { - "id": 9193, - "guid": "cfe2807a-38f4-4f31-8ea7-eb8252cd13cf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Destiny Calhoun", - "company": "Conrama", - "phone": "863-449-2625", - "email": "destiny@conrama.com" - }, - { - "id": 9194, - "guid": "d770405c-908f-4617-902f-74d51266a9a7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Miers", - "company": "Pericenta", - "phone": "870-544-2824", - "email": "gianna@pericenta.com" - }, - { - "id": 9195, - "guid": "6c324367-bc0f-4b10-a2e4-002468a3fab9", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Miers", - "company": "Anagraph", - "phone": "829-521-2374", - "email": "natalie@anagraph.com" - }, - { - "id": 9196, - "guid": "de00b264-a8be-4b20-8892-35ead678fe6b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis WifKinson", - "company": "Inridium", - "phone": "867-466-2235", - "email": "genesis@inridium.com" - }, - { - "id": 9197, - "guid": "25a908a0-1d58-488f-854f-1854146e5a47", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Lauren Cramer", - "company": "Enlogia", - "phone": "802-538-3229", - "email": "lauren@enlogia.com" - }, - { - "id": 9198, - "guid": "84ad58e1-b224-4200-b836-fe9c9ffaf73f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Abigail Waller", - "company": "Allphysiche", - "phone": "831-594-3294", - "email": "abigail@allphysiche.com" - }, - { - "id": 9199, - "guid": "29c99b84-c135-4bfc-a318-c039dd754773", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Brooklyn Gill", - "company": "InfoAirway", - "phone": "830-551-3420", - "email": "brooklyn@infoairway.com" - }, - { - "id": 9200, - "guid": "a4924cc2-a2f5-4fb3-b2ef-4c96c411f415", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Gibbs", - "company": "Steganoconiche", - "phone": "812-430-2141", - "email": "evelyn@steganoconiche.com" - }, - { - "id": 9201, - "guid": "f0869e0d-d30c-4154-8da2-97ee2fce5f02", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Milton", - "company": "Westgate", - "phone": "846-410-3289", - "email": "kylie@westgate.com" - }, - { - "id": 9202, - "guid": "8b5adc11-a730-4a54-bb12-7854470e0cd4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lillian Hodges", - "company": "Mescatron", - "phone": "876-554-2617", - "email": "lillian@mescatron.com" - }, - { - "id": 9203, - "guid": "7675f4e4-8b41-477f-b406-45736e8191ce", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Abramson", - "company": "Steganoconiche", - "phone": "872-483-3258", - "email": "jocelyn@steganoconiche.com" - }, - { - "id": 9204, - "guid": "72935409-a434-4e96-b0ce-fedf8f929ebf", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mackenzie Owen", - "company": "Jamconik", - "phone": "810-420-2868", - "email": "mackenzie@jamconik.com" - }, - { - "id": 9205, - "guid": "ef04808a-893f-41fe-8ff6-1403b011c41e", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Allison Hawkins", - "company": "Anagraph", - "phone": "885-429-2900", - "email": "allison@anagraph.com" - }, - { - "id": 9206, - "guid": "8ecb3f73-f6af-4d6f-973d-a0db3882e563", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mya Crossman", - "company": "Steganoconiche", - "phone": "870-517-3941", - "email": "mya@steganoconiche.com" - }, - { - "id": 9207, - "guid": "f0de3541-1e32-48c9-8baf-9b39cadcf8d9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Eva Chandter", - "company": "Syssoft", - "phone": "886-464-2715", - "email": "eva@syssoft.com" - }, - { - "id": 9208, - "guid": "a6366da4-aced-4a40-abc9-02803b071267", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madeline Youmans", - "company": "Gigaura", - "phone": "892-519-2504", - "email": "madeline@gigaura.com" - }, - { - "id": 9209, - "guid": "bb4b9755-67a5-410a-9e28-537022caf37e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Ella Croftoon", - "company": "iSkyvaco", - "phone": "889-495-3279", - "email": "ella@iskyvaco.com" - }, - { - "id": 9210, - "guid": "a261eafa-15ca-466c-9f28-bf76f42eaa25", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexis Brown", - "company": "iSkyvaco", - "phone": "827-586-2037", - "email": "alexis@iskyvaco.com" - }, - { - "id": 9211, - "guid": "83203b1c-0472-46ae-ba31-667ff1b90981", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Leah Turner", - "company": "Jamconik", - "phone": "858-430-3781", - "email": "leah@jamconik.com" - }, - { - "id": 9212, - "guid": "82ba6529-ac3a-4b92-ae1d-9123897971f3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Michaelson", - "company": "Safetrust", - "phone": "817-495-2855", - "email": "claire@safetrust.com" - }, - { - "id": 9213, - "guid": "bc4d977f-adbf-4b24-83d9-a0bc9e46394a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Harrison", - "company": "Videobanc", - "phone": "815-437-3867", - "email": "paige@videobanc.com" - }, - { - "id": 9214, - "guid": "f3ad8605-46a3-4804-b932-f34e31f6efde", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Jessica Day", - "company": "Textiqua", - "phone": "872-467-2347", - "email": "jessica@textiqua.com" - }, - { - "id": 9215, - "guid": "0def5a2a-43a9-481e-843c-e8f5e874bf99", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Chloe Warren", - "company": "Robotomic", - "phone": "894-504-3856", - "email": "chloe@robotomic.com" - }, - { - "id": 9216, - "guid": "7b86e5ab-069f-44e0-8b9a-786bed449069", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoe Watson", - "company": "Steganoconiche", - "phone": "827-490-3716", - "email": "zoe@steganoconiche.com" - }, - { - "id": 9217, - "guid": "28f21b6f-87dd-4ae4-8eea-9253b2b61c5d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey WifKinson", - "company": "Jamconik", - "phone": "812-540-2224", - "email": "bailey@jamconik.com" - }, - { - "id": 9218, - "guid": "3f5afce1-4bc6-4f8a-baef-7bbf94a0ef8f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Amelia Galbraith", - "company": "Aprama", - "phone": "897-459-2112", - "email": "amelia@aprama.com" - }, - { - "id": 9219, - "guid": "876ce489-34b9-4932-93af-f7431902b5ce", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mya Hamphrey", - "company": "Enlogia", - "phone": "839-408-3473", - "email": "mya@enlogia.com" - }, - { - "id": 9220, - "guid": "9dc51971-2ed6-4735-bf54-cd8a908a394c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Audrey Murphy", - "company": "Skydata", - "phone": "825-600-2980", - "email": "audrey@skydata.com" - }, - { - "id": 9221, - "guid": "4596b7f9-6dbc-492c-90cd-9e4924b74799", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Brooks", - "company": "Proline", - "phone": "823-401-3987", - "email": "allison@proline.com" - }, - { - "id": 9222, - "guid": "b542dd50-1f4e-44fc-8d33-9c92603b68c8", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Genesis Creighton", - "company": "Safeagra", - "phone": "809-578-2877", - "email": "genesis@safeagra.com" - }, - { - "id": 9223, - "guid": "10b8b3c0-db59-4b79-85de-d5c77e09aa71", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Olivia Vance", - "company": "Allphysiche", - "phone": "844-456-2955", - "email": "olivia@allphysiche.com" - }, - { - "id": 9224, - "guid": "cf9e2405-24c5-418b-8bab-211bf8ff2afb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Katelyn Brickman", - "company": "RoboAerlogix", - "phone": "846-593-3982", - "email": "katelyn@roboaerlogix.com" - }, - { - "id": 9225, - "guid": "d4c5cbda-26da-44e1-9426-1138eaa93007", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Payton Nelson", - "company": "Polytheon", - "phone": "834-560-3588", - "email": "payton@polytheon.com" - }, - { - "id": 9226, - "guid": "42f5515f-512c-488b-9b5c-fc14e742233e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah White", - "company": "Netseco", - "phone": "839-533-3714", - "email": "savannah@netseco.com" - }, - { - "id": 9227, - "guid": "5fac3c3f-f72a-4314-8f17-a27d3d8b60db", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Jasmine Gibbs", - "company": "Multitiqua", - "phone": "871-555-3666", - "email": "jasmine@multitiqua.com" - }, - { - "id": 9228, - "guid": "8f4c73b0-994f-4520-9ecd-3c2fb0599d00", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Hawkins", - "company": "Allnet", - "phone": "830-511-2563", - "email": "jocelyn@allnet.com" - }, - { - "id": 9229, - "guid": "fa6f9e7b-088d-4f6a-aa82-2bc8d129f456", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Zoey Morrison", - "company": "iQualcar", - "phone": "866-497-2585", - "email": "zoey@iqualcar.com" - }, - { - "id": 9230, - "guid": "baee88d5-94bf-4f1e-b960-4a2a5f35579e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Thorndike", - "company": "SysUSA", - "phone": "889-422-3846", - "email": "sofia@sysusa.com" - }, - { - "id": 9231, - "guid": "4af901a6-e262-4d45-a42c-b0c5a548ad19", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mariah Adamson", - "company": "Polytheon", - "phone": "895-579-2723", - "email": "mariah@polytheon.com" - }, - { - "id": 9232, - "guid": "e0a860d7-5675-4056-ad68-448dca272cf8", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Khloe Young", - "company": "Pericenta", - "phone": "869-598-3654", - "email": "khloe@pericenta.com" - }, - { - "id": 9233, - "guid": "44328f83-9664-4420-b60e-e8c5ef960e5c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Ashley Otis", - "company": "Infraique", - "phone": "800-458-3216", - "email": "ashley@infraique.com" - }, - { - "id": 9234, - "guid": "f3c4a22d-8800-431c-8078-7c2185ed9d2c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Natalie Creighton", - "company": "Xeicon", - "phone": "813-507-2210", - "email": "natalie@xeicon.com" - }, - { - "id": 9235, - "guid": "40b81651-c1b2-472e-bf92-9125c4e53833", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Fulton", - "company": "Jamrola", - "phone": "878-430-2781", - "email": "kayla@jamrola.com" - }, - { - "id": 9236, - "guid": "b04ce453-698c-4c19-9245-d7f214a756fe", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Turner", - "company": "Orthomedia", - "phone": "846-555-3048", - "email": "layla@orthomedia.com" - }, - { - "id": 9237, - "guid": "cec92e5a-0eee-40af-bbff-a67523b151d7", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Vanessa Campbell", - "company": "Keytheon", - "phone": "894-519-2378", - "email": "vanessa@keytheon.com" - }, - { - "id": 9238, - "guid": "c1ebd748-4b03-41a8-b533-c3b03c5a8f71", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jasmine Murphy", - "company": "Westgate", - "phone": "887-483-3059", - "email": "jasmine@westgate.com" - }, - { - "id": 9239, - "guid": "eaf5e47d-633a-4c12-b226-452f1f41ccb0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Bush", - "company": "eSteganoergy", - "phone": "868-534-3920", - "email": "emma@esteganoergy.com" - }, - { - "id": 9240, - "guid": "fa6cef30-dc5d-425c-8c90-988c0f191296", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Charlson", - "company": "Teknoplexon", - "phone": "878-524-3861", - "email": "alexandra@teknoplexon.com" - }, - { - "id": 9241, - "guid": "acf891fe-c429-4446-bf3a-0f5dba3b280d", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Bush", - "company": "Hypervaco", - "phone": "816-461-2245", - "email": "lauren@hypervaco.com" - }, - { - "id": 9242, - "guid": "fb246fc3-3542-4731-a2fb-aaf0bc7ca6d1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Kaitlyn Thorndike", - "company": "InfoAirway", - "phone": "805-532-2477", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 9243, - "guid": "8218f3bb-eeaa-4f29-83a1-766659074eff", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Elizabeth Michaelson", - "company": "Inridium", - "phone": "835-425-3111", - "email": "elizabeth@inridium.com" - }, - { - "id": 9244, - "guid": "5b419ca7-17b3-4dca-a65c-770d02a6db6c", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Cook", - "company": "Technogra", - "phone": "876-496-2826", - "email": "layla@technogra.com" - }, - { - "id": 9245, - "guid": "7dcd52bf-f1f1-4c6b-8931-408bdb6267e8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoe Chesterton", - "company": "Mescatron", - "phone": "865-408-2769", - "email": "zoe@mescatron.com" - }, - { - "id": 9246, - "guid": "02b6cf41-fc06-4d99-9f7d-4f987597c709", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Clapton", - "company": "Netsystems", - "phone": "892-436-2047", - "email": "kaitlyn@netsystems.com" - }, - { - "id": 9247, - "guid": "299ceeb1-24f4-4cdb-b199-cb75ae6e29a5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Zoey Fisher", - "company": "Entcast", - "phone": "834-596-2217", - "email": "zoey@entcast.com" - }, - { - "id": 9248, - "guid": "cfab6fb8-1804-48b7-8cce-bc8053f76254", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Carter", - "company": "Cryptotegrity", - "phone": "822-573-3383", - "email": "ashley@cryptotegrity.com" - }, - { - "id": 9249, - "guid": "492dc677-59bf-4601-82fd-1d97898969b9", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Khloe Brooks", - "company": "Tekcar", - "phone": "833-500-3820", - "email": "khloe@tekcar.com" - }, - { - "id": 9250, - "guid": "f53cfa66-a320-436e-bef9-7cb8f3bee33a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madelyn Smith", - "company": "Fibrotouch", - "phone": "850-455-3999", - "email": "madelyn@fibrotouch.com" - }, - { - "id": 9251, - "guid": "28dfe6cd-b726-4e01-952e-5d0d558cc643", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Evelyn Hoggarth", - "company": "Mescaridic", - "phone": "832-499-2084", - "email": "evelyn@mescaridic.com" - }, - { - "id": 9252, - "guid": "8b298080-5824-456b-b32d-dab52ef339d7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Timmons", - "company": "Indisco", - "phone": "856-514-3119", - "email": "paige@indisco.com" - }, - { - "id": 9253, - "guid": "b677f361-c9ef-435b-8ad2-9cb0dec7a343", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Charlson", - "company": "Openserve", - "phone": "853-421-2144", - "email": "avery@openserve.com" - }, - { - "id": 9254, - "guid": "1bf1d34c-a44d-41b2-a0d2-a964e5276f42", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Gianna Sheldon", - "company": "Celgra", - "phone": "815-471-2290", - "email": "gianna@celgra.com" - }, - { - "id": 9255, - "guid": "676c7761-7d26-46a9-911f-980713278758", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Nash", - "company": "Dynarama", - "phone": "852-531-3423", - "email": "sophie@dynarama.com" - }, - { - "id": 9256, - "guid": "c731e027-8808-4996-b191-3e538413b7ff", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Youmans", - "company": "Systheon", - "phone": "898-468-3776", - "email": "destiny@systheon.com" - }, - { - "id": 9257, - "guid": "72ada880-7d03-4ed0-be03-29b892e3153e", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Hailey", - "company": "Conotomics", - "phone": "888-481-2792", - "email": "claire@conotomics.com" - }, - { - "id": 9258, - "guid": "dc929dce-a6fd-45ce-9fc3-3e2ab921558b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Trinity Vaughan", - "company": "Textiqua", - "phone": "835-514-3882", - "email": "trinity@textiqua.com" - }, - { - "id": 9259, - "guid": "cc88753c-26d2-4b15-a09c-3a32f563146f", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katherine Hawkins", - "company": "Vencom", - "phone": "874-511-3839", - "email": "katherine@vencom.com" - }, - { - "id": 9260, - "guid": "9453ee59-5943-4039-bc6e-a9b22089fc84", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Gill", - "company": "Allphysiche", - "phone": "829-512-2459", - "email": "gianna@allphysiche.com" - }, - { - "id": 9261, - "guid": "8c1208a9-b9ff-477f-a389-329eb080f342", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hailey Gustman", - "company": "Syssoft", - "phone": "830-476-3864", - "email": "hailey@syssoft.com" - }, - { - "id": 9262, - "guid": "f23d361b-f1b8-4d06-8c84-5ea95baa22da", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Claire Wesley", - "company": "Qualserve", - "phone": "833-579-3636", - "email": "claire@qualserve.com" - }, - { - "id": 9263, - "guid": "13def011-bec6-46d7-a1cd-97cd275de512", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Madison Day", - "company": "Textiqua", - "phone": "875-582-2557", - "email": "madison@textiqua.com" - }, - { - "id": 9264, - "guid": "0b1cbb51-e88e-4de4-8c5a-cd5cc0282bf2", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Layla Adamson", - "company": "Indisco", - "phone": "888-441-3413", - "email": "layla@indisco.com" - }, - { - "id": 9265, - "guid": "fdfb30df-f301-475f-9dc7-1786a217d7d6", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maria Clapton", - "company": "Infragraph", - "phone": "857-428-2868", - "email": "maria@infragraph.com" - }, - { - "id": 9266, - "guid": "e9a3531f-5e28-4203-84e0-a5808f7f0894", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Arianna Gilmore", - "company": "eEyetanic", - "phone": "898-578-2688", - "email": "arianna@eeyetanic.com" - }, - { - "id": 9267, - "guid": "dde9bd7d-57bd-4943-ad52-3a314ba2b6a0", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sydney Fulton", - "company": "Skydata", - "phone": "852-596-3266", - "email": "sydney@skydata.com" - }, - { - "id": 9268, - "guid": "d634c647-478e-4cf4-9a73-961b94777e8c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Allison Campbell", - "company": "Celgra", - "phone": "880-595-3449", - "email": "allison@celgra.com" - }, - { - "id": 9269, - "guid": "efd6fafc-453f-4a9f-96e6-06031576f777", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Layla Freeman", - "company": "eSteganoergy", - "phone": "818-532-3061", - "email": "layla@esteganoergy.com" - }, - { - "id": 9270, - "guid": "32b676ff-3504-4b76-8f3f-a3c5eee949a5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Oldman", - "company": "Safetrust", - "phone": "829-474-2718", - "email": "aaliyah@safetrust.com" - }, - { - "id": 9271, - "guid": "fc8467ff-71a0-417f-96ba-67e9d6b80cf4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Oldman", - "company": "Generola", - "phone": "804-523-3946", - "email": "alexa@generola.com" - }, - { - "id": 9272, - "guid": "b384eaab-28fa-49ab-ba66-5585bb88647c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Payton Gill", - "company": "Conrama", - "phone": "881-566-2475", - "email": "payton@conrama.com" - }, - { - "id": 9273, - "guid": "52b6bef0-4b89-4229-96c4-101595e0ba8c", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Brown", - "company": "Robotomic", - "phone": "896-591-3302", - "email": "aubrey@robotomic.com" - }, - { - "id": 9274, - "guid": "5d9ee993-39e0-4092-a716-03f469b15bd1", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Addison Ford", - "company": "Pacwest", - "phone": "808-419-2500", - "email": "addison@pacwest.com" - }, - { - "id": 9275, - "guid": "c6955531-a34f-4481-8bf8-7b2ad07a0863", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madelyn Oldman", - "company": "Vencom", - "phone": "857-403-3104", - "email": "madelyn@vencom.com" - }, - { - "id": 9276, - "guid": "5d727647-84fc-4545-b92e-aec7b00cbac9", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Rachel Turner", - "company": "Fibroserve", - "phone": "868-598-2883", - "email": "rachel@fibroserve.com" - }, - { - "id": 9277, - "guid": "57a39e45-b0a4-4e84-908a-6f9c07ecc3fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Katelyn Oswald", - "company": "Fibroserve", - "phone": "874-425-2075", - "email": "katelyn@fibroserve.com" - }, - { - "id": 9278, - "guid": "10cc7fc9-ad18-4e05-b041-f2b45271bd0f", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Claire Carey", - "company": "SysVenamerica", - "phone": "857-473-2327", - "email": "claire@sysvenamerica.com" - }, - { - "id": 9279, - "guid": "1ac905ef-b7f8-436f-b361-a493b80c5577", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabriella Nash", - "company": "Multitiqua", - "phone": "827-586-2685", - "email": "gabriella@multitiqua.com" - }, - { - "id": 9280, - "guid": "8205201d-df72-4b01-bc90-60fc97d4d29a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Mia Waller", - "company": "Sontopia", - "phone": "889-418-3903", - "email": "mia@sontopia.com" - }, - { - "id": 9281, - "guid": "4153e218-5095-43c2-ab39-b3bf40af7a8c", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Madeline Youmans", - "company": "Venconix", - "phone": "846-422-2191", - "email": "madeline@venconix.com" - }, - { - "id": 9282, - "guid": "22a3db29-a5e9-4ab8-9d75-be5aeb6f0858", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Savannah Winter", - "company": "Interliant", - "phone": "880-506-3920", - "email": "savannah@interliant.com" - }, - { - "id": 9283, - "guid": "7f21cfb1-1ae6-451b-8823-684ce3b3d010", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Valeria Carey", - "company": "Westtomik", - "phone": "801-537-3268", - "email": "valeria@westtomik.com" - }, - { - "id": 9284, - "guid": "34120489-ef1e-4929-9d37-0e9a0f78aede", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madeline Winter", - "company": "Navivacs", - "phone": "856-521-2414", - "email": "madeline@navivacs.com" - }, - { - "id": 9285, - "guid": "0c263661-421d-4624-9884-c2d4227c9be4", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Thomson", - "company": "Pericenta", - "phone": "878-416-3575", - "email": "hannah@pericenta.com" - }, - { - "id": 9286, - "guid": "bc897f17-cc5b-4325-b29d-0e9dbe0b70da", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexa Gate", - "company": "Dynarama", - "phone": "873-401-3452", - "email": "alexa@dynarama.com" - }, - { - "id": 9287, - "guid": "9f616e2e-cf4c-44dd-b477-37b1e4ceef5a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Autumn Hancock", - "company": "Jamrola", - "phone": "834-463-2240", - "email": "autumn@jamrola.com" - }, - { - "id": 9288, - "guid": "c428d691-d5ae-43f1-a47b-c7d7f75c78c1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Wayne", - "company": "Technogra", - "phone": "833-569-3902", - "email": "autumn@technogra.com" - }, - { - "id": 9289, - "guid": "5021f7ca-d467-43c3-99a3-e858091f41f6", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alyssa Wainwright", - "company": "Enlogia", - "phone": "865-409-3082", - "email": "alyssa@enlogia.com" - }, - { - "id": 9290, - "guid": "ab3ef647-e1d1-4c3e-8984-544cec7657e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Watson", - "company": "Conrama", - "phone": "812-534-2942", - "email": "riley@conrama.com" - }, - { - "id": 9291, - "guid": "618b2b97-d1e5-4274-b969-a2fa134ae995", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Campbell", - "company": "Pericenta", - "phone": "868-594-3005", - "email": "samantha@pericenta.com" - }, - { - "id": 9292, - "guid": "ef43d592-9824-42f0-a8b0-7956ad26850a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Kylie Calhoun", - "company": "Airdyne", - "phone": "876-495-3574", - "email": "kylie@airdyne.com" - }, - { - "id": 9293, - "guid": "389193ed-936f-48ff-ba7a-171370e48f7a", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Faith Carter", - "company": "Celgra", - "phone": "862-433-3286", - "email": "faith@celgra.com" - }, - { - "id": 9294, - "guid": "0caa67a6-84a6-4f31-97c7-29b987475f44", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Gilmore", - "company": "Cryptotemplate", - "phone": "870-508-2591", - "email": "kylie@cryptotemplate.com" - }, - { - "id": 9295, - "guid": "8db1f25d-b2c4-4fe6-b608-77bfe9467369", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ella Carey", - "company": "Tekcar", - "phone": "841-412-2976", - "email": "ella@tekcar.com" - }, - { - "id": 9296, - "guid": "99dce0f7-5c3c-48a5-8c82-4c63dc40b3eb", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Gardner", - "company": "Polytheon", - "phone": "889-492-2519", - "email": "kylie@polytheon.com" - }, - { - "id": 9297, - "guid": "afef6091-7e72-4383-a734-16f576ffa9c4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mackenzie Carter", - "company": "Openserve", - "phone": "858-418-3547", - "email": "mackenzie@openserve.com" - }, - { - "id": 9298, - "guid": "5a24dea4-ee73-4d55-9905-827757addbf5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Aaliyah Stanley", - "company": "Allnet", - "phone": "817-418-2036", - "email": "aaliyah@allnet.com" - }, - { - "id": 9299, - "guid": "32fed91b-daa6-4b1b-b60c-4ef7be784d9d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Conors", - "company": "Conrama", - "phone": "823-460-3183", - "email": "gianna@conrama.com" - }, - { - "id": 9300, - "guid": "91c34c1d-663c-4666-b608-0cb4be9dfbf0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Sydney Nash", - "company": "Robocomm", - "phone": "858-460-3264", - "email": "sydney@robocomm.com" - }, - { - "id": 9301, - "guid": "1ab1228e-9d04-4265-9ece-ba981c3bd6ef", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Abigail Neal", - "company": "Multitiqua", - "phone": "813-443-3595", - "email": "abigail@multitiqua.com" - }, - { - "id": 9302, - "guid": "741a1753-0639-43d0-88df-f4bcea8760bf", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Hannah Hoggarth", - "company": "Airdyne", - "phone": "871-484-2298", - "email": "hannah@airdyne.com" - }, - { - "id": 9303, - "guid": "f594eab3-9316-4081-9539-138dbd1c0f47", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Autumn Waller", - "company": "iSkyvaco", - "phone": "842-541-2038", - "email": "autumn@iskyvaco.com" - }, - { - "id": 9304, - "guid": "abf737d0-e28f-4635-a31d-3df0b913c895", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Andrea Gerald", - "company": "iEnland", - "phone": "876-493-2763", - "email": "andrea@ienland.com" - }, - { - "id": 9305, - "guid": "c76ead35-a1d6-438d-8309-c31077a32105", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Maria Day", - "company": "Navivacs", - "phone": "850-486-2929", - "email": "maria@navivacs.com" - }, - { - "id": 9306, - "guid": "6ea56ffe-100a-4167-bfba-9708b62d89ca", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Trinity Clapton", - "company": "Aprama", - "phone": "870-567-3883", - "email": "trinity@aprama.com" - }, - { - "id": 9307, - "guid": "40c7ed81-95b9-4639-9ac8-c49417f3c16d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lillian Miller", - "company": "Teratopia", - "phone": "869-487-2317", - "email": "lillian@teratopia.com" - }, - { - "id": 9308, - "guid": "693d58dd-a185-4c64-bdb5-e68f1951ea70", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emily Gilson", - "company": "Infraique", - "phone": "868-437-2198", - "email": "emily@infraique.com" - }, - { - "id": 9309, - "guid": "ae58e289-7e42-4330-986c-6241834bc609", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sofia Hailey", - "company": "Indisco", - "phone": "850-545-3061", - "email": "sofia@indisco.com" - }, - { - "id": 9310, - "guid": "18ea53ac-33ae-446e-83db-192b922dfe74", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Croftoon", - "company": "Technogra", - "phone": "801-507-2517", - "email": "hailey@technogra.com" - }, - { - "id": 9311, - "guid": "763586b2-f1d4-443b-86e1-08358e6ffc73", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Oswald", - "company": "Robotemplate", - "phone": "881-493-3182", - "email": "victoria@robotemplate.com" - }, - { - "id": 9312, - "guid": "babab58b-74e8-400b-953d-ce0247938d26", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Molligan", - "company": "Openserve", - "phone": "807-479-3076", - "email": "emma@openserve.com" - }, - { - "id": 9313, - "guid": "b5a6e370-3630-4eb3-8fab-922259063bca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kimberly Carter", - "company": "Allphysiche", - "phone": "818-492-2241", - "email": "kimberly@allphysiche.com" - }, - { - "id": 9314, - "guid": "ad8611cf-69c1-4911-900c-5159e0dd61ed", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee White", - "company": "Videobanc", - "phone": "831-540-2076", - "email": "kaylee@videobanc.com" - }, - { - "id": 9315, - "guid": "5199e8f9-3806-4f83-ad86-fd5cedc9f04e", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Kayla Turner", - "company": "Videobanc", - "phone": "833-406-3398", - "email": "kayla@videobanc.com" - }, - { - "id": 9316, - "guid": "ada7b808-9a08-447d-9fc0-8b68475e6737", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Destiny Nelson", - "company": "Technogra", - "phone": "881-482-2991", - "email": "destiny@technogra.com" - }, - { - "id": 9317, - "guid": "5ca2cf83-1095-44fd-8be8-c0eb46f23334", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Gibbs", - "company": "Sontopia", - "phone": "834-558-2649", - "email": "allison@sontopia.com" - }, - { - "id": 9318, - "guid": "b9500aa8-9b14-4ef4-9f93-68e66dda6f48", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Cramer", - "company": "Skydata", - "phone": "814-590-2270", - "email": "sophie@skydata.com" - }, - { - "id": 9319, - "guid": "7e75331f-b3ea-4e1a-a093-03ff266e6fc1", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Katherine Conors", - "company": "US Infratouch", - "phone": "825-432-3023", - "email": "katherine@us infratouch.com" - }, - { - "id": 9320, - "guid": "b9d092a0-0ae3-42dc-a5e2-3d07411d5ba4", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Vanessa Otis", - "company": "Xeicon", - "phone": "822-567-2561", - "email": "vanessa@xeicon.com" - }, - { - "id": 9321, - "guid": "5b0cfac0-f809-4f13-93d8-3efc509d3474", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Hardman", - "company": "Celgra", - "phone": "874-548-2920", - "email": "charlotte@celgra.com" - }, - { - "id": 9322, - "guid": "1b8c1a92-276e-426f-a34f-17b9a3273c8c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Warren", - "company": "Westgate", - "phone": "850-431-2882", - "email": "destiny@westgate.com" - }, - { - "id": 9323, - "guid": "ee61a122-e846-4575-a1cf-9be1a717bec1", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Hamphrey", - "company": "Textiqua", - "phone": "866-554-3945", - "email": "avery@textiqua.com" - }, - { - "id": 9324, - "guid": "b9395293-856c-4cce-9b32-b743363b5fbd", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Thornton", - "company": "Netsystems", - "phone": "837-444-2676", - "email": "katelyn@netsystems.com" - }, - { - "id": 9325, - "guid": "fb8ec06b-51db-46cc-ba1b-99360af3bc67", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Isabelle Charlson", - "company": "eSteganoergy", - "phone": "853-436-3516", - "email": "isabelle@esteganoergy.com" - }, - { - "id": 9326, - "guid": "7ac505a6-ad78-4a1a-9e08-c0eefdead26d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Trinity Waller", - "company": "Transtouch", - "phone": "897-561-2137", - "email": "trinity@transtouch.com" - }, - { - "id": 9327, - "guid": "153efa07-77e5-49d2-971c-b712d1dd6a5c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexa Gerald", - "company": "US Infratouch", - "phone": "852-524-2008", - "email": "alexa@us infratouch.com" - }, - { - "id": 9328, - "guid": "15bd73bd-5034-4618-a18b-714d78c13086", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Allison Fulton", - "company": "Rapigrafix", - "phone": "852-581-3460", - "email": "allison@rapigrafix.com" - }, - { - "id": 9329, - "guid": "a8e319d2-0571-4510-88ca-04206a69792d", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Claire Warren", - "company": "Technogra", - "phone": "889-570-2748", - "email": "claire@technogra.com" - }, - { - "id": 9330, - "guid": "f5600909-e02d-475d-ba0e-1c414cd83a54", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lily Chesterton", - "company": "Nanobanc", - "phone": "833-599-2164", - "email": "lily@nanobanc.com" - }, - { - "id": 9331, - "guid": "08e70898-de63-41ec-9d75-f7a9c8d7cb16", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila WifKinson", - "company": "Inridium", - "phone": "809-580-2861", - "email": "camila@inridium.com" - }, - { - "id": 9332, - "guid": "34f8085f-3224-49f4-8045-4b28c2448c8f", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madison Miers", - "company": "Conotomics", - "phone": "828-565-2176", - "email": "madison@conotomics.com" - }, - { - "id": 9333, - "guid": "e963546f-e1a1-4d40-8fc5-732149820652", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Gerald", - "company": "Jamconik", - "phone": "805-521-2433", - "email": "addison@jamconik.com" - }, - { - "id": 9334, - "guid": "8611e77d-4f11-45ed-a5b9-2d613d686a8d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Winter", - "company": "Nanobanc", - "phone": "820-441-2222", - "email": "eva@nanobanc.com" - }, - { - "id": 9335, - "guid": "0aaf1861-4ac8-47e2-b2a0-7611a553c4cb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Murphy", - "company": "Superscope", - "phone": "813-456-2116", - "email": "avery@superscope.com" - }, - { - "id": 9336, - "guid": "288aa271-c8a7-4500-8bb7-fa3bbdf56db3", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Kylie Turner", - "company": "Thermotomic", - "phone": "851-594-2072", - "email": "kylie@thermotomic.com" - }, - { - "id": 9337, - "guid": "32c3618e-df40-4081-93f8-bbb4c791f936", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Destiny Wesley", - "company": "Multitiqua", - "phone": "874-505-3626", - "email": "destiny@multitiqua.com" - }, - { - "id": 9338, - "guid": "6ecd24b0-eea4-433b-9707-5504a4400b25", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Leah Winter", - "company": "Robotemplate", - "phone": "812-558-3925", - "email": "leah@robotemplate.com" - }, - { - "id": 9339, - "guid": "82f71e83-cebe-4d98-a0f0-863e3134a1a0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Aubrey Calhoun", - "company": "Turbomart", - "phone": "897-587-2744", - "email": "aubrey@turbomart.com" - }, - { - "id": 9340, - "guid": "2c418575-79ec-4d2b-9ad1-0dcd5b45c18f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sophia Daniels", - "company": "Robotomic", - "phone": "817-452-3066", - "email": "sophia@robotomic.com" - }, - { - "id": 9341, - "guid": "68d334fe-a417-4836-8989-3a27dc74b991", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Hoggarth", - "company": "Jamconik", - "phone": "898-440-3857", - "email": "peyton@jamconik.com" - }, - { - "id": 9342, - "guid": "3fedce47-efd0-40a2-a9f3-6362a76747ec", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Aaliyah Ogden", - "company": "Fibroserve", - "phone": "863-506-2401", - "email": "aaliyah@fibroserve.com" - }, - { - "id": 9343, - "guid": "d4f10d40-507a-4ce5-8c9e-f5cd51bc1596", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Thomson", - "company": "Mescaridic", - "phone": "809-499-2087", - "email": "claire@mescaridic.com" - }, - { - "id": 9344, - "guid": "50b1e174-ee26-40a6-a94b-cc3c5c35de5e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Mariah Milton", - "company": "Venconix", - "phone": "875-526-2780", - "email": "mariah@venconix.com" - }, - { - "id": 9345, - "guid": "16b56385-bd18-4bd9-8691-f0b82bc6d4b6", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Claire Nash", - "company": "Skydata", - "phone": "836-592-2124", - "email": "claire@skydata.com" - }, - { - "id": 9346, - "guid": "6ef49fcd-d80d-4840-8505-664985c0a60b", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jasmine Campbell", - "company": "US Infratouch", - "phone": "854-498-2315", - "email": "jasmine@us infratouch.com" - }, - { - "id": 9347, - "guid": "724bf993-d9f1-4876-9d39-97915bc03315", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lillian Gerald", - "company": "Truegate", - "phone": "856-577-2379", - "email": "lillian@truegate.com" - }, - { - "id": 9348, - "guid": "1a3d17c1-bc8b-445e-ae8d-a36ef2a05222", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Isabella Nelson", - "company": "Allnet", - "phone": "887-468-3520", - "email": "isabella@allnet.com" - }, - { - "id": 9349, - "guid": "35db7d57-e6c8-4c3a-997a-1c8da8c8597e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Peyton Hancock", - "company": "Mescaridic", - "phone": "811-562-2455", - "email": "peyton@mescaridic.com" - }, - { - "id": 9350, - "guid": "d15e5d9b-1d9e-46a2-9d3b-d039357df0b5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Gabrielle Oswald", - "company": "Truegate", - "phone": "820-496-3724", - "email": "gabrielle@truegate.com" - }, - { - "id": 9351, - "guid": "24604570-1e1e-4ca2-8c5e-22701cfa7ad9", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brianna Campbell", - "company": "Dynarama", - "phone": "828-416-2807", - "email": "brianna@dynarama.com" - }, - { - "id": 9352, - "guid": "800e3cf2-e1e8-4aad-a72b-df2d4e84d98c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Allison Hamphrey", - "company": "Cryptotegrity", - "phone": "852-457-2479", - "email": "allison@cryptotegrity.com" - }, - { - "id": 9353, - "guid": "bae9bf64-eded-43bc-b6c3-085ebb297609", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Brianna Fisher", - "company": "Entcast", - "phone": "816-527-3370", - "email": "brianna@entcast.com" - }, - { - "id": 9354, - "guid": "e669c931-b390-4220-9c57-3006778ab017", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Lillian Wayne", - "company": "Cryptotegrity", - "phone": "869-466-2516", - "email": "lillian@cryptotegrity.com" - }, - { - "id": 9355, - "guid": "3b7e7632-0c42-4295-ae1d-020182e06517", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lauren Goldman", - "company": "Technogra", - "phone": "895-503-2391", - "email": "lauren@technogra.com" - }, - { - "id": 9356, - "guid": "c12af9eb-b995-4202-8d36-fdc4bb573874", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Youmans", - "company": "iOptystix", - "phone": "853-416-3329", - "email": "sophia@ioptystix.com" - }, - { - "id": 9357, - "guid": "df193bd6-02fa-424a-8966-79663c6e51bb", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madeline Miln", - "company": "Aluco", - "phone": "816-534-3883", - "email": "madeline@aluco.com" - }, - { - "id": 9358, - "guid": "47a4bbdf-8b48-44fe-996e-269f61d24f3b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Allison Thornton", - "company": "Mescatron", - "phone": "862-591-2309", - "email": "allison@mescatron.com" - }, - { - "id": 9359, - "guid": "5eada09e-2799-44d3-8b28-047757fc2ffd", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Abigail Hancock", - "company": "Technogra", - "phone": "806-566-2277", - "email": "abigail@technogra.com" - }, - { - "id": 9360, - "guid": "f954b7dc-eee8-45c8-afb3-43d9eac7f772", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Gardner", - "company": "Conrama", - "phone": "810-565-2690", - "email": "kayla@conrama.com" - }, - { - "id": 9361, - "guid": "ee74f9b7-9aa8-4373-b19a-759747e43471", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Arianna Nathan", - "company": "Systheon", - "phone": "833-572-3626", - "email": "arianna@systheon.com" - }, - { - "id": 9362, - "guid": "b17cd6e1-e33b-42b6-b824-a70b1d132317", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aaliyah Winter", - "company": "SysUSA", - "phone": "847-474-3691", - "email": "aaliyah@sysusa.com" - }, - { - "id": 9363, - "guid": "98a1428e-b1a3-4d04-acdd-7d1a80749809", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Maya Bush", - "company": "Idmax", - "phone": "813-600-2545", - "email": "maya@idmax.com" - }, - { - "id": 9364, - "guid": "64984e76-850c-4acb-88c5-7d68ea4a5ff7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Julia Owen", - "company": "Anaframe", - "phone": "836-475-3886", - "email": "julia@anaframe.com" - }, - { - "id": 9365, - "guid": "c86f6eec-82bf-441b-80d5-30a008c8f63f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Addison Milton", - "company": "Nanobanc", - "phone": "895-413-2159", - "email": "addison@nanobanc.com" - }, - { - "id": 9366, - "guid": "5e8c2452-ab7f-4440-b8e8-15eb7dfaa76b", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sarah Nathan", - "company": "Unologic", - "phone": "871-536-2270", - "email": "sarah@unologic.com" - }, - { - "id": 9367, - "guid": "d3448008-91c5-4823-836f-efb788e41513", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madison White", - "company": "SysVenamerica", - "phone": "823-508-2004", - "email": "madison@sysvenamerica.com" - }, - { - "id": 9368, - "guid": "3cf042db-a0ba-4e2f-87b2-78c2db4105e3", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Savannah Neal", - "company": "Compuamerica", - "phone": "814-540-3473", - "email": "savannah@compuamerica.com" - }, - { - "id": 9369, - "guid": "ff1cd3fb-51d6-444e-bddd-a025c588a60b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Sheldon", - "company": "Airdyne", - "phone": "849-542-3223", - "email": "jessica@airdyne.com" - }, - { - "id": 9370, - "guid": "9e5d8080-35c5-4a09-9060-d03de2759aeb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Layla Daniels", - "company": "Unconix", - "phone": "824-402-2079", - "email": "layla@unconix.com" - }, - { - "id": 9371, - "guid": "c0d057b0-9acd-4c1e-a5fb-5ce257e6edeb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Melanie Thornton", - "company": "Textiqua", - "phone": "847-434-2596", - "email": "melanie@textiqua.com" - }, - { - "id": 9372, - "guid": "d40c00c6-04c1-4be0-9931-39f4edf9ade1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Makayla Ford", - "company": "Techtron", - "phone": "889-462-3096", - "email": "makayla@techtron.com" - }, - { - "id": 9373, - "guid": "241cd71b-0b5c-4476-ac19-2b039cbc695f", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Carroll", - "company": "Truetomic", - "phone": "883-513-3391", - "email": "emily@truetomic.com" - }, - { - "id": 9374, - "guid": "96b56bcd-ffa9-4ae6-9e09-18f8bca43d0e", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lillian Brickman", - "company": "Polytheon", - "phone": "892-555-3010", - "email": "lillian@polytheon.com" - }, - { - "id": 9375, - "guid": "08aa7c33-a1be-422e-8a4b-90ba12cacf45", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Audrey Gustman", - "company": "Vencom", - "phone": "861-475-3914", - "email": "audrey@vencom.com" - }, - { - "id": 9376, - "guid": "40e38cb4-9d03-42ac-b478-6c05bde9cf14", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Genesis Gustman", - "company": "Enlogia", - "phone": "858-451-2151", - "email": "genesis@enlogia.com" - }, - { - "id": 9377, - "guid": "10527778-0e8e-4131-8763-50a57f44d39d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Aaliyah Timmons", - "company": "Systheon", - "phone": "844-493-2591", - "email": "aaliyah@systheon.com" - }, - { - "id": 9378, - "guid": "51ff7253-72c2-40c2-89e0-6a0d3e60b34c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ava Sherlock", - "company": "eSteganoergy", - "phone": "819-415-3842", - "email": "ava@esteganoergy.com" - }, - { - "id": 9379, - "guid": "7d4c5bff-b63a-4e5e-96a5-0d3670605501", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Destiny Haig", - "company": "Pacwest", - "phone": "891-524-3223", - "email": "destiny@pacwest.com" - }, - { - "id": 9380, - "guid": "ddd58209-6fb8-4e19-a47a-7cd63f77f4f8", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Peyton Turner", - "company": "Orthomedia", - "phone": "867-508-3093", - "email": "peyton@orthomedia.com" - }, - { - "id": 9381, - "guid": "8995b202-a641-48d2-9878-f25fec68ba68", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Avery Thornton", - "company": "Vencom", - "phone": "847-478-3239", - "email": "avery@vencom.com" - }, - { - "id": 9382, - "guid": "3b64aaa4-e424-4d96-829b-7dfaf6dee09d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Gabrielle Michaelson", - "company": "Polytheon", - "phone": "896-440-3759", - "email": "gabrielle@polytheon.com" - }, - { - "id": 9383, - "guid": "14920cb3-fe95-4da0-9cb9-dcc59cd16c84", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Gilmore", - "company": "Hypervaco", - "phone": "828-587-3080", - "email": "chloe@hypervaco.com" - }, - { - "id": 9384, - "guid": "5a4c90dd-6608-4f7b-aa40-dd235c50bd1f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Julia Campbell", - "company": "Conrama", - "phone": "815-525-2988", - "email": "julia@conrama.com" - }, - { - "id": 9385, - "guid": "04bfe0d1-8fe2-4b43-9e0d-22ba8ef76d1e", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Trinity Carrington", - "company": "Rapigrafix", - "phone": "804-464-2277", - "email": "trinity@rapigrafix.com" - }, - { - "id": 9386, - "guid": "35051d7d-f8d9-492d-8b7f-f6df713e7c90", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Osborne", - "company": "Interliant", - "phone": "887-534-2617", - "email": "elizabeth@interliant.com" - }, - { - "id": 9387, - "guid": "3fb3d849-3811-4cb4-ba6b-de69d607db12", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Stanley", - "company": "Celgra", - "phone": "810-555-3407", - "email": "emily@celgra.com" - }, - { - "id": 9388, - "guid": "68542703-6cac-45dc-91f5-5220af057953", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Wallace", - "company": "Truegate", - "phone": "807-483-2601", - "email": "eva@truegate.com" - }, - { - "id": 9389, - "guid": "c2a6362a-9737-49e0-95c7-b4230bf5dc07", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ava Goldman", - "company": "Titanigraf", - "phone": "895-445-2261", - "email": "ava@titanigraf.com" - }, - { - "id": 9390, - "guid": "74f6ce21-b7a0-4c64-aa54-db620b4956b7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Kayla Daniels", - "company": "Westgate", - "phone": "872-505-3058", - "email": "kayla@westgate.com" - }, - { - "id": 9391, - "guid": "98f1a498-30d2-4a2f-b3e3-7bea38505cfd", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Julia Gilbert", - "company": "Robotemplate", - "phone": "834-500-3454", - "email": "julia@robotemplate.com" - }, - { - "id": 9392, - "guid": "2268a44f-5a81-4ad6-b352-44247f991e05", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Natalie Wood", - "company": "Jamrola", - "phone": "869-433-3892", - "email": "natalie@jamrola.com" - }, - { - "id": 9393, - "guid": "e7278835-bce6-4e50-af4c-729f8a2a72ad", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Genesis Warren", - "company": "Pacwest", - "phone": "810-574-3638", - "email": "genesis@pacwest.com" - }, - { - "id": 9394, - "guid": "2177c540-2488-4ca7-8e7f-aeb7904009e0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Gianna Cook", - "company": "Mescatron", - "phone": "874-409-3459", - "email": "gianna@mescatron.com" - }, - { - "id": 9395, - "guid": "52fa618f-bc03-4763-8b3e-4af09d4eb66d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emma Oswald", - "company": "Genland", - "phone": "848-443-3875", - "email": "emma@genland.com" - }, - { - "id": 9396, - "guid": "50621225-600f-42ce-bacc-bf83104e5012", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kayla Walkman", - "company": "Airdyne", - "phone": "879-410-2604", - "email": "kayla@airdyne.com" - }, - { - "id": 9397, - "guid": "cacd2c8f-51d1-4bb5-956c-9f6fbfee6aee", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Allison Harrison", - "company": "Proline", - "phone": "899-483-2433", - "email": "allison@proline.com" - }, - { - "id": 9398, - "guid": "f72334cf-ee9b-49fd-91af-f521fae531a4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kylie Haig", - "company": "Interliant", - "phone": "848-495-3989", - "email": "kylie@interliant.com" - }, - { - "id": 9399, - "guid": "a2805a22-3000-4c63-b98e-1638adc5462f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Amelia Charlson", - "company": "Westmedia", - "phone": "876-430-3760", - "email": "amelia@westmedia.com" - }, - { - "id": 9400, - "guid": "9c419155-4189-4883-9152-bfdef4950afa", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Aaliyah Nash", - "company": "Superscope", - "phone": "807-481-3495", - "email": "aaliyah@superscope.com" - }, - { - "id": 9401, - "guid": "7eb2ae57-7433-4357-910c-29bbc53cfe05", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Chloe Smith", - "company": "Raylog", - "phone": "839-403-3144", - "email": "chloe@raylog.com" - }, - { - "id": 9402, - "guid": "246d0e82-6c85-45b4-98d5-ed072989f40f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Samantha Timmons", - "company": "Mescaridic", - "phone": "867-595-2408", - "email": "samantha@mescaridic.com" - }, - { - "id": 9403, - "guid": "a691a3e6-a36a-430a-b12a-825d90c0e5fb", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Gilbert", - "company": "Titanirola", - "phone": "870-505-2427", - "email": "julia@titanirola.com" - }, - { - "id": 9404, - "guid": "6792cdd4-0139-48e1-a3cd-44752887c5a3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Chesterton", - "company": "iSkyvaco", - "phone": "823-525-3494", - "email": "anna@iskyvaco.com" - }, - { - "id": 9405, - "guid": "563c4bdc-91b0-4128-adda-33155dd73d8b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Mercer", - "company": "Polytheon", - "phone": "867-581-2717", - "email": "alexis@polytheon.com" - }, - { - "id": 9406, - "guid": "3a4e795b-10f8-4ef2-910e-c8388ba3558e", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hailey Goodman", - "company": "iMedconik", - "phone": "803-442-2289", - "email": "hailey@imedconik.com" - }, - { - "id": 9407, - "guid": "58ca1997-d13d-4eb3-871c-4b3e77269f85", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexis Hancock", - "company": "Navivacs", - "phone": "828-531-2010", - "email": "alexis@navivacs.com" - }, - { - "id": 9408, - "guid": "1470304a-3ac7-439f-8ec2-4d21643bce99", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Maria Gibbs", - "company": "eEyetanic", - "phone": "897-448-3582", - "email": "maria@eeyetanic.com" - }, - { - "id": 9409, - "guid": "3aa3a02c-3215-47ca-bd1f-7fcb1a6eed19", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hailey Gilson", - "company": "Robocomm", - "phone": "896-557-3239", - "email": "hailey@robocomm.com" - }, - { - "id": 9410, - "guid": "0b5e06fc-fbf5-47a5-a2d7-16c7b24da2d4", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Natalie Brown", - "company": "Techtron", - "phone": "891-556-3405", - "email": "natalie@techtron.com" - }, - { - "id": 9411, - "guid": "2d810d31-6ae5-4c24-b705-7331b55e3196", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aaliyah Chapman", - "company": "Rapigrafix", - "phone": "870-557-2904", - "email": "aaliyah@rapigrafix.com" - }, - { - "id": 9412, - "guid": "ce6ea90c-fa33-4f26-978c-ebcd90dc86e4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Samantha Charlson", - "company": "Robocomm", - "phone": "861-442-3434", - "email": "samantha@robocomm.com" - }, - { - "id": 9413, - "guid": "8de62252-7b91-45f7-8eeb-dbeac4bfe066", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Victoria Mercer", - "company": "iOptystix", - "phone": "861-479-2159", - "email": "victoria@ioptystix.com" - }, - { - "id": 9414, - "guid": "04c972b5-dac6-40a2-9531-8e860005182c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Rachel Wallace", - "company": "Interliant", - "phone": "832-520-2770", - "email": "rachel@interliant.com" - }, - { - "id": 9415, - "guid": "498e95be-ffb4-420a-a9bf-497e004c2db1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Clapton", - "company": "Cryptotemplate", - "phone": "872-480-3248", - "email": "amelia@cryptotemplate.com" - }, - { - "id": 9416, - "guid": "2d7770bd-557a-43cd-9704-7f2b2b97116c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katelyn Gardner", - "company": "iQualcar", - "phone": "872-456-3073", - "email": "katelyn@iqualcar.com" - }, - { - "id": 9417, - "guid": "c0ec24c8-0e30-4d88-a5b5-8702204597aa", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Riley Carrington", - "company": "Teknoplexon", - "phone": "819-511-3432", - "email": "riley@teknoplexon.com" - }, - { - "id": 9418, - "guid": "6ec43d3c-2a8f-43dc-a4b2-e97ea650ba5e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Owen", - "company": "Jamconik", - "phone": "853-507-2446", - "email": "valeria@jamconik.com" - }, - { - "id": 9419, - "guid": "f5fccdc1-822f-4375-b9bf-f90371422655", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Nathan", - "company": "Safeagra", - "phone": "867-404-3316", - "email": "alexa@safeagra.com" - }, - { - "id": 9420, - "guid": "e5a68fb0-b95d-488f-8679-804434838ef7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Jasmine WifKinson", - "company": "Enlogia", - "phone": "838-480-3983", - "email": "jasmine@enlogia.com" - }, - { - "id": 9421, - "guid": "87614921-3bb5-4b73-b703-96fd6651d85b", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Vance", - "company": "Teknoplexon", - "phone": "845-526-2389", - "email": "kaitlyn@teknoplexon.com" - }, - { - "id": 9422, - "guid": "e4e8f127-e8aa-40c3-829d-db0282be157d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooklyn Haig", - "company": "Hypervaco", - "phone": "848-533-3524", - "email": "brooklyn@hypervaco.com" - }, - { - "id": 9423, - "guid": "e72cfc30-4027-4848-b919-53e746a33d1b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Audrey Croftoon", - "company": "Skydata", - "phone": "819-493-3335", - "email": "audrey@skydata.com" - }, - { - "id": 9424, - "guid": "8f551a1f-21a6-4502-9d62-e289d5d8bffa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Evelyn Molligan", - "company": "Entcast", - "phone": "849-401-2658", - "email": "evelyn@entcast.com" - }, - { - "id": 9425, - "guid": "7ed1b3ce-bcb1-4da0-9bca-19ad680ee5de", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Miers", - "company": "Interliant", - "phone": "806-583-3751", - "email": "rachel@interliant.com" - }, - { - "id": 9426, - "guid": "671f710b-dd8b-4bba-ac58-07695c2399d6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Riley Nash", - "company": "Superscope", - "phone": "876-470-3026", - "email": "riley@superscope.com" - }, - { - "id": 9427, - "guid": "a6525632-6304-4102-a048-5d1099a8f89d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alyssa Gustman", - "company": "Titanirola", - "phone": "826-518-3658", - "email": "alyssa@titanirola.com" - }, - { - "id": 9428, - "guid": "cae17307-dbbb-4466-b7af-6cd3e995472d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Gardner", - "company": "Teratopia", - "phone": "820-532-3929", - "email": "molly@teratopia.com" - }, - { - "id": 9429, - "guid": "28df0cb8-61f5-4d8e-b008-ab62519aa8ac", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Timmons", - "company": "Jamrola", - "phone": "824-580-3084", - "email": "chloe@jamrola.com" - }, - { - "id": 9430, - "guid": "40a8c287-7d03-4eef-a730-e628436b1666", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Payton Hailey", - "company": "Raylog", - "phone": "805-458-3380", - "email": "payton@raylog.com" - }, - { - "id": 9431, - "guid": "baa3bd43-8589-42aa-b8c6-84195c6d1d58", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophie Molligan", - "company": "Enlogia", - "phone": "889-556-2452", - "email": "sophie@enlogia.com" - }, - { - "id": 9432, - "guid": "cf373397-5fb1-495f-b78d-d7fdb8f4d396", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Katherine Vance", - "company": "Videobanc", - "phone": "873-509-2018", - "email": "katherine@videobanc.com" - }, - { - "id": 9433, - "guid": "417ce12b-551c-4186-a7ba-1ee683d30eb9", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bailey Thorndike", - "company": "Orthosoft", - "phone": "848-478-2976", - "email": "bailey@orthosoft.com" - }, - { - "id": 9434, - "guid": "3dde39a3-c136-452d-b340-5cdd5dfb89a2", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Hailey Oldridge", - "company": "iMedconik", - "phone": "883-540-3394", - "email": "hailey@imedconik.com" - }, - { - "id": 9435, - "guid": "229640ef-409d-4b39-a864-71a036838d59", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Jocelyn Mercer", - "company": "OpKeycomm", - "phone": "813-504-3826", - "email": "jocelyn@opkeycomm.com" - }, - { - "id": 9436, - "guid": "64f7edcd-b102-4474-806a-7d682dc141c2", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Chesterton", - "company": "Robocomm", - "phone": "856-493-3934", - "email": "katherine@robocomm.com" - }, - { - "id": 9437, - "guid": "a043aea0-bab7-487c-8d21-946d46b00a41", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Wayne", - "company": "Systheon", - "phone": "841-585-2483", - "email": "amelia@systheon.com" - }, - { - "id": 9438, - "guid": "88d2e14f-ef3b-42e5-9078-c36d4f52ae52", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Freeman", - "company": "eEyetanic", - "phone": "853-408-3054", - "email": "kayla@eeyetanic.com" - }, - { - "id": 9439, - "guid": "4ecc9262-2217-4b08-8b48-b1575b62ce4c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mia Carroll", - "company": "Indisco", - "phone": "848-597-3931", - "email": "mia@indisco.com" - }, - { - "id": 9440, - "guid": "8b645c97-3331-493d-a24d-9fa45073afa5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Trinity Oldman", - "company": "Safeagra", - "phone": "834-485-2219", - "email": "trinity@safeagra.com" - }, - { - "id": 9441, - "guid": "cbcccb5a-d78c-47e1-974f-cb3813bcab39", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Katelyn Carey", - "company": "Technogra", - "phone": "830-557-2162", - "email": "katelyn@technogra.com" - }, - { - "id": 9442, - "guid": "d39d538b-30e2-421c-b654-22595ab2967a", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Freeman", - "company": "Enlogia", - "phone": "832-502-2325", - "email": "madeline@enlogia.com" - }, - { - "id": 9443, - "guid": "4d2a5d94-7754-428f-b8e3-2998c8e1d09b", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Mariah Youmans", - "company": "Teraserv", - "phone": "875-519-2702", - "email": "mariah@teraserv.com" - }, - { - "id": 9444, - "guid": "6dff6932-9291-42e1-b058-54ef56d0b0cf", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Nevaeh Gilbert", - "company": "Westgate", - "phone": "860-455-2631", - "email": "nevaeh@westgate.com" - }, - { - "id": 9445, - "guid": "45529e84-3f14-49b7-9f48-f66f9c6734a8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Daniels", - "company": "Navivacs", - "phone": "847-439-3530", - "email": "serenity@navivacs.com" - }, - { - "id": 9446, - "guid": "e1b64f41-c381-47b1-a71c-9dc5925fe78f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ava Owen", - "company": "SysUSA", - "phone": "853-475-3608", - "email": "ava@sysusa.com" - }, - { - "id": 9447, - "guid": "69c7f156-17eb-4309-9d86-92bcb78e2763", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madelyn Gardner", - "company": "Compuamerica", - "phone": "860-420-3665", - "email": "madelyn@compuamerica.com" - }, - { - "id": 9448, - "guid": "c6c0be00-000e-47f0-b614-13ffe636b6e2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Eva Freeman", - "company": "Genland", - "phone": "865-476-2725", - "email": "eva@genland.com" - }, - { - "id": 9449, - "guid": "affd5305-ddd3-47bb-a049-6e32f9c35d05", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Molly Young", - "company": "Infraique", - "phone": "807-488-3306", - "email": "molly@infraique.com" - }, - { - "id": 9450, - "guid": "8a899692-4d76-4485-8ad8-b413de5f7d2b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Adamson", - "company": "eSteganoergy", - "phone": "869-534-2651", - "email": "hailey@esteganoergy.com" - }, - { - "id": 9451, - "guid": "56117cbb-78a6-402c-af3d-246018fb78ef", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Hailey Mercer", - "company": "Titanirola", - "phone": "834-435-3529", - "email": "hailey@titanirola.com" - }, - { - "id": 9452, - "guid": "6f33261e-2dae-4ee2-8b22-2b99913ef3f7", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Andrea Thornton", - "company": "Idmax", - "phone": "881-415-2799", - "email": "andrea@idmax.com" - }, - { - "id": 9453, - "guid": "c105c131-dacb-43b8-95c3-1a65a95fbcf4", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Michaelson", - "company": "Technogra", - "phone": "871-443-2146", - "email": "alexandra@technogra.com" - }, - { - "id": 9454, - "guid": "7c1fbd52-48e7-462a-826d-7a10648aea58", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Jocelyn Oldman", - "company": "Unologic", - "phone": "816-550-3867", - "email": "jocelyn@unologic.com" - }, - { - "id": 9455, - "guid": "96c861af-798e-471d-8d5e-4253c14d508a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Victoria Brown", - "company": "Systheon", - "phone": "897-589-3333", - "email": "victoria@systheon.com" - }, - { - "id": 9456, - "guid": "b0301f8a-78aa-47f3-b202-d51be5000fdb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Zoey Ogden", - "company": "Technogra", - "phone": "849-582-2213", - "email": "zoey@technogra.com" - }, - { - "id": 9457, - "guid": "2ce1538d-6fe5-4ce4-9533-7c13fe971b3a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Mya Oldman", - "company": "Vencom", - "phone": "868-569-2080", - "email": "mya@vencom.com" - }, - { - "id": 9458, - "guid": "2f594270-6c7d-495a-a365-7a787d1d3a9a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Taylor Charlson", - "company": "SysUSA", - "phone": "839-597-2337", - "email": "taylor@sysusa.com" - }, - { - "id": 9459, - "guid": "daa4a7f4-813c-471a-99b6-cbc4695b252f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Molligan", - "company": "Raylog", - "phone": "849-536-3003", - "email": "kayla@raylog.com" - }, - { - "id": 9460, - "guid": "a0af47e4-a8de-452a-9027-a29b4d54f8d6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gianna Goodman", - "company": "Westgate", - "phone": "815-518-3002", - "email": "gianna@westgate.com" - }, - { - "id": 9461, - "guid": "fb246d7c-c333-4789-a030-d4d59cc58c32", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Calhoun", - "company": "Teratopia", - "phone": "837-401-2773", - "email": "destiny@teratopia.com" - }, - { - "id": 9462, - "guid": "0bf77909-f7dd-4e9c-931c-0cc2658e3526", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Katherine Molligan", - "company": "Safeagra", - "phone": "824-547-3719", - "email": "katherine@safeagra.com" - }, - { - "id": 9463, - "guid": "f240661b-bfe2-4a8a-8715-d6aeb24683b1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Katelyn Charlson", - "company": "Teraserv", - "phone": "839-499-2079", - "email": "katelyn@teraserv.com" - }, - { - "id": 9464, - "guid": "ef7188ad-871d-4c85-b108-64f4ff219d0d", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabella Osborne", - "company": "Titanigraf", - "phone": "895-560-3313", - "email": "isabella@titanigraf.com" - }, - { - "id": 9465, - "guid": "e43c0944-34c0-4830-bb33-b43909578885", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Isabella Hoggarth", - "company": "RoboAerlogix", - "phone": "824-481-3560", - "email": "isabella@roboaerlogix.com" - }, - { - "id": 9466, - "guid": "44a83639-d761-4c36-b73b-f78887e7f3a1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Madelyn Thomson", - "company": "Indisco", - "phone": "831-515-3076", - "email": "madelyn@indisco.com" - }, - { - "id": 9467, - "guid": "ccb12583-8303-471a-9207-95e1530aeabc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Rachel Day", - "company": "Aprama", - "phone": "844-583-3242", - "email": "rachel@aprama.com" - }, - { - "id": 9468, - "guid": "3887683f-b3aa-4d82-b563-83a4c2d5dd02", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Serenity Watson", - "company": "Unologic", - "phone": "892-595-3168", - "email": "serenity@unologic.com" - }, - { - "id": 9469, - "guid": "cfe92bd3-8520-495b-84d4-ed1fbc557342", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Gilbert", - "company": "Mescatron", - "phone": "881-449-3647", - "email": "brooklyn@mescatron.com" - }, - { - "id": 9470, - "guid": "174f14dd-84c2-4348-8ae0-022340bea1a2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Alexandra Davidson", - "company": "Enlogia", - "phone": "832-573-3602", - "email": "alexandra@enlogia.com" - }, - { - "id": 9471, - "guid": "1563e004-254d-4958-810e-d490740c6532", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Madeline Vance", - "company": "Raylog", - "phone": "876-513-2075", - "email": "madeline@raylog.com" - }, - { - "id": 9472, - "guid": "65cc1633-a764-4f60-83ee-ae99d8b53be0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophie Thornton", - "company": "Orthomedia", - "phone": "871-405-2561", - "email": "sophie@orthomedia.com" - }, - { - "id": 9473, - "guid": "2203e443-6131-4953-950b-bb48a0ad13e3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Harrison", - "company": "Technogra", - "phone": "816-586-2530", - "email": "gabrielle@technogra.com" - }, - { - "id": 9474, - "guid": "d945e285-988a-4010-b439-1f747fed4c22", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Autumn Brooks", - "company": "Westmedia", - "phone": "834-475-3109", - "email": "autumn@westmedia.com" - }, - { - "id": 9475, - "guid": "bac67158-ddb2-4938-b38c-58e64f3fd80a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Angelina Cook", - "company": "Jamrola", - "phone": "834-595-3146", - "email": "angelina@jamrola.com" - }, - { - "id": 9476, - "guid": "7f3580db-76dd-40b2-8a58-aeb7be418373", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Andrea Campbell", - "company": "Celgra", - "phone": "855-529-2848", - "email": "andrea@celgra.com" - }, - { - "id": 9477, - "guid": "3d790179-e4b0-4580-9d69-7dabe2393504", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Riley Abramson", - "company": "Textiqua", - "phone": "872-466-3843", - "email": "riley@textiqua.com" - }, - { - "id": 9478, - "guid": "deaa1b25-f7dd-4ed2-a994-477005cdbf86", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Riley Miers", - "company": "iQualcar", - "phone": "817-408-3018", - "email": "riley@iqualcar.com" - }, - { - "id": 9479, - "guid": "3a935b0d-8e03-46d5-8b2b-d62e3bca6fe4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Ashley Conors", - "company": "Robotemplate", - "phone": "889-472-3023", - "email": "ashley@robotemplate.com" - }, - { - "id": 9480, - "guid": "fee460e0-852d-4290-896b-70fc70714642", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Gianna Gate", - "company": "Enlogia", - "phone": "850-554-3534", - "email": "gianna@enlogia.com" - }, - { - "id": 9481, - "guid": "af368c0d-8902-48ab-92eb-3e9c1e1a145f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Aubrey Adamson", - "company": "iMedconik", - "phone": "813-534-3320", - "email": "aubrey@imedconik.com" - }, - { - "id": 9482, - "guid": "9049b216-3e6e-46c9-bc9f-351ce5721baf", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia WifKinson", - "company": "Anaframe", - "phone": "816-506-3058", - "email": "julia@anaframe.com" - }, - { - "id": 9483, - "guid": "6871cbf1-ea51-45c9-a77d-f30f8d8aa4c8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lauren Fulton", - "company": "Rapigrafix", - "phone": "869-439-3905", - "email": "lauren@rapigrafix.com" - }, - { - "id": 9484, - "guid": "33467938-ba1a-4987-924d-759836ddf6de", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Grace Osborne", - "company": "eEyetanic", - "phone": "823-470-2191", - "email": "grace@eeyetanic.com" - }, - { - "id": 9485, - "guid": "cbba6951-b06b-4590-bc12-272719e9a6c0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Camila Galbraith", - "company": "Celgra", - "phone": "841-537-3389", - "email": "camila@celgra.com" - }, - { - "id": 9486, - "guid": "e575f8b6-0cee-4628-9c74-5a68e952c1b7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Abigail Stanley", - "company": "iSkyvaco", - "phone": "863-451-2317", - "email": "abigail@iskyvaco.com" - }, - { - "id": 9487, - "guid": "65bbf7a1-0a57-4474-9251-5b03bebf58eb", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Madelyn Sherlock", - "company": "Teratopia", - "phone": "835-530-2610", - "email": "madelyn@teratopia.com" - }, - { - "id": 9488, - "guid": "1731e92e-87bd-4d9a-a650-b4edb5f0bef9", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Payton White", - "company": "Transtouch", - "phone": "815-425-3046", - "email": "payton@transtouch.com" - }, - { - "id": 9489, - "guid": "4da3d44c-cf57-4557-8610-239174d56546", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Genesis Miers", - "company": "Conotomics", - "phone": "864-589-2313", - "email": "genesis@conotomics.com" - }, - { - "id": 9490, - "guid": "d1d33cee-2bff-44a3-8ea6-d65717532671", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Miller", - "company": "Keytheon", - "phone": "895-468-3807", - "email": "hannah@keytheon.com" - }, - { - "id": 9491, - "guid": "3d5dbf8e-c3a7-40f4-9b3f-3ed4a5fe25c8", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Charlotte Turner", - "company": "Westtomik", - "phone": "809-436-2917", - "email": "charlotte@westtomik.com" - }, - { - "id": 9492, - "guid": "158f3e53-2c19-455a-a2c0-25a4e36d0125", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Thorndike", - "company": "iOptystix", - "phone": "886-592-3077", - "email": "madison@ioptystix.com" - }, - { - "id": 9493, - "guid": "52008ecb-57af-400d-ba3d-d898f6a4df09", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Aaliyah Miers", - "company": "eSteganoergy", - "phone": "862-487-3820", - "email": "aaliyah@esteganoergy.com" - }, - { - "id": 9494, - "guid": "c77efd71-c280-4cf2-9b10-12f3029f2579", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Paige Crossman", - "company": "Textiqua", - "phone": "828-559-3536", - "email": "paige@textiqua.com" - }, - { - "id": 9495, - "guid": "fa012b2e-deb9-453c-bd80-7171dfe37da4", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Brooke Osborne", - "company": "Teratopia", - "phone": "848-580-2325", - "email": "brooke@teratopia.com" - }, - { - "id": 9496, - "guid": "66a8db73-5f4b-40e5-b618-fb906b7fb8be", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Ashley Cramer", - "company": "Robocomm", - "phone": "825-566-3516", - "email": "ashley@robocomm.com" - }, - { - "id": 9497, - "guid": "6ee1b25d-8fb7-494a-b87b-1fadb47fc3a7", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Murphy", - "company": "Cryptotemplate", - "phone": "886-414-2473", - "email": "gianna@cryptotemplate.com" - }, - { - "id": 9498, - "guid": "24efd7c4-114f-438f-8551-909e54f5fc1d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Zoey Miller", - "company": "Generola", - "phone": "835-461-2061", - "email": "zoey@generola.com" - }, - { - "id": 9499, - "guid": "e9883943-8f64-46a5-8791-b6ecad080ff6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Destiny Watson", - "company": "Cryptotemplate", - "phone": "805-408-2757", - "email": "destiny@cryptotemplate.com" - }, - { - "id": 9500, - "guid": "1c7610c6-9697-46ce-8386-4c1d1f274146", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Jessica Vaughan", - "company": "iMedconik", - "phone": "868-475-2908", - "email": "jessica@imedconik.com" - }, - { - "id": 9501, - "guid": "6fee57e8-3744-4da8-b3b6-f255e3e10f18", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Michaelson", - "company": "Textiqua", - "phone": "831-503-3897", - "email": "katelyn@textiqua.com" - }, - { - "id": 9502, - "guid": "cbcfe8b3-3bbf-4feb-81ec-2d6462ed4ab1", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Payton Goldman", - "company": "Airdyne", - "phone": "887-548-3180", - "email": "payton@airdyne.com" - }, - { - "id": 9503, - "guid": "e6a1ec80-0578-4cc2-a0d6-64972d4f3476", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mackenzie Cramer", - "company": "Textiqua", - "phone": "811-537-2800", - "email": "mackenzie@textiqua.com" - }, - { - "id": 9504, - "guid": "0be80f6d-95dc-49b5-aba9-8a861a519f13", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Ashley Miln", - "company": "Gigaura", - "phone": "855-416-3465", - "email": "ashley@gigaura.com" - }, - { - "id": 9505, - "guid": "e0463af5-36a5-4044-9133-a15e20bd1fdc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brooklyn Goldman", - "company": "Truetomic", - "phone": "856-485-3672", - "email": "brooklyn@truetomic.com" - }, - { - "id": 9506, - "guid": "4a3009e2-39f5-44b8-9a65-f246c06bc8ab", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Sophie Nash", - "company": "iOptystix", - "phone": "845-573-3051", - "email": "sophie@ioptystix.com" - }, - { - "id": 9507, - "guid": "b656c16d-64c8-4b72-ad54-b941257c0040", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Madison Wood", - "company": "Xeicon", - "phone": "823-432-3974", - "email": "madison@xeicon.com" - }, - { - "id": 9508, - "guid": "86b9d6af-8b3e-4570-8779-04f0dbc00752", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexa Hodges", - "company": "Inridium", - "phone": "841-596-2407", - "email": "alexa@inridium.com" - }, - { - "id": 9509, - "guid": "4c7601ea-cf2c-4410-bca7-aa7d2966d2b6", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Makayla Nelson", - "company": "iQualcar", - "phone": "895-561-2341", - "email": "makayla@iqualcar.com" - }, - { - "id": 9510, - "guid": "7e5225f8-7f3d-4ac0-bb26-e1e81119096f", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Chloe Gilmore", - "company": "Ameritron", - "phone": "868-486-2899", - "email": "chloe@ameritron.com" - }, - { - "id": 9511, - "guid": "6a41220a-3011-45be-96bb-ee88688af787", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Trinity Gilbert", - "company": "Syssoft", - "phone": "845-455-3768", - "email": "trinity@syssoft.com" - }, - { - "id": 9512, - "guid": "6167add3-3caf-4f29-bccb-633ec9b3ab44", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Timmons", - "company": "Unologic", - "phone": "826-562-2053", - "email": "madeline@unologic.com" - }, - { - "id": 9513, - "guid": "9eac0a8f-c5e4-417d-9b77-dadff7fa4c74", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Fisher", - "company": "Airdyne", - "phone": "830-446-2397", - "email": "anna@airdyne.com" - }, - { - "id": 9514, - "guid": "f669cbdd-5206-4ff3-959c-4f643201fd8e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Molly Chesterton", - "company": "Unconix", - "phone": "851-404-2133", - "email": "molly@unconix.com" - }, - { - "id": 9515, - "guid": "e385ba10-1a1c-44e7-9228-e2ae8ba2da32", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mya Ward", - "company": "Venconix", - "phone": "866-496-2472", - "email": "mya@venconix.com" - }, - { - "id": 9516, - "guid": "887bf756-b670-4980-87c4-c28b9a23761e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Carroll", - "company": "OpKeycomm", - "phone": "834-448-3629", - "email": "lillian@opkeycomm.com" - }, - { - "id": 9517, - "guid": "277c8198-e250-4be7-8f2d-c35f58c97d62", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Peyton Smith", - "company": "Multitiqua", - "phone": "890-485-2918", - "email": "peyton@multitiqua.com" - }, - { - "id": 9518, - "guid": "e4326a9c-c914-4020-9264-236e1191a399", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Emily Clapton", - "company": "US Omnigraphik", - "phone": "847-442-3984", - "email": "emily@us omnigraphik.com" - }, - { - "id": 9519, - "guid": "918c9f78-a028-43a4-996c-12fa8ab9098f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Olivia Hawkins", - "company": "Jamconik", - "phone": "881-599-2148", - "email": "olivia@jamconik.com" - }, - { - "id": 9520, - "guid": "37c7e7c5-a41d-4564-9f2a-fd595e1b43a5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Alexis Hancock", - "company": "Indisco", - "phone": "855-516-3425", - "email": "alexis@indisco.com" - }, - { - "id": 9521, - "guid": "c8d5a30f-c48d-477b-a99e-af02455bb857", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Warren", - "company": "eSteganoergy", - "phone": "811-525-3003", - "email": "savannah@esteganoergy.com" - }, - { - "id": 9522, - "guid": "df9857ac-1448-459c-8971-410e590773a2", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Bella Cramer", - "company": "Techtron", - "phone": "851-443-3560", - "email": "bella@techtron.com" - }, - { - "id": 9523, - "guid": "d89ea8dd-3bfa-4088-9ed5-68b83e106814", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Isabelle Brooks", - "company": "Allnet", - "phone": "881-451-2732", - "email": "isabelle@allnet.com" - }, - { - "id": 9524, - "guid": "c8d21822-f073-4949-b8d1-a8f726dd0b54", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Lauren Sherlock", - "company": "Robotemplate", - "phone": "836-498-2352", - "email": "lauren@robotemplate.com" - }, - { - "id": 9525, - "guid": "9bc71db5-7624-411e-90b7-5dcc8578c7ec", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brianna Abramson", - "company": "Teraserv", - "phone": "859-481-3007", - "email": "brianna@teraserv.com" - }, - { - "id": 9526, - "guid": "d52f30f9-ce25-4a6e-8eca-3fa1da8a887b", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hannah Thorndike", - "company": "Cryptotemplate", - "phone": "885-471-2940", - "email": "hannah@cryptotemplate.com" - }, - { - "id": 9527, - "guid": "3f80c5b0-4810-4273-9c19-f7a6a7f95fe3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Alexa Wayne", - "company": "Techtron", - "phone": "828-467-2772", - "email": "alexa@techtron.com" - }, - { - "id": 9528, - "guid": "18ef656e-b47b-4408-8d2e-dff09109c27a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Allison Chandter", - "company": "Interliant", - "phone": "864-420-3545", - "email": "allison@interliant.com" - }, - { - "id": 9529, - "guid": "097cfeff-c65e-40f7-ba4e-8ebfa67ac031", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Osborne", - "company": "Titanigraf", - "phone": "887-464-2334", - "email": "sarah@titanigraf.com" - }, - { - "id": 9530, - "guid": "510b7545-5410-49b1-a187-f9221a6f6b4a", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Mia Thomson", - "company": "Raylog", - "phone": "868-453-3680", - "email": "mia@raylog.com" - }, - { - "id": 9531, - "guid": "5718fd39-40b2-4a02-ae8b-39fe7023e426", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Crossman", - "company": "Unologic", - "phone": "815-597-3468", - "email": "madeline@unologic.com" - }, - { - "id": 9532, - "guid": "5cc16dad-327c-4f53-b733-7651d32b7f7f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaitlyn Carroll", - "company": "Airdyne", - "phone": "899-477-2829", - "email": "kaitlyn@airdyne.com" - }, - { - "id": 9533, - "guid": "e43965a5-5aa4-43a8-aba5-a6d616af3988", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sophia Hailey", - "company": "Netseco", - "phone": "898-590-2227", - "email": "sophia@netseco.com" - }, - { - "id": 9534, - "guid": "27b75a09-836b-4f09-ba54-1f618ee78dac", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Claire Walkman", - "company": "Thermotomic", - "phone": "813-600-2589", - "email": "claire@thermotomic.com" - }, - { - "id": 9535, - "guid": "1372f7f5-81ea-40af-9857-3904bf4658de", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Adamson", - "company": "Westgate", - "phone": "861-568-3568", - "email": "kaylee@westgate.com" - }, - { - "id": 9536, - "guid": "ff2b175b-dbc6-4901-b0de-db98a56bae72", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Emma Sherlock", - "company": "SysUSA", - "phone": "831-547-2292", - "email": "emma@sysusa.com" - }, - { - "id": 9537, - "guid": "1f296dc8-49f6-4cca-aa8b-0237e1108c98", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Emily Oldridge", - "company": "Gigaura", - "phone": "853-476-2826", - "email": "emily@gigaura.com" - }, - { - "id": 9538, - "guid": "e01513ff-cac8-4256-9942-f1255ec30022", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Jessica Wainwright", - "company": "Dynarama", - "phone": "892-494-2867", - "email": "jessica@dynarama.com" - }, - { - "id": 9539, - "guid": "670c9fe8-25cc-4e02-a623-0453c5af0420", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Gianna Webster", - "company": "Interliant", - "phone": "841-544-3171", - "email": "gianna@interliant.com" - }, - { - "id": 9540, - "guid": "7f82a5eb-6322-48e6-8029-8a632bfd3a7d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Davidson", - "company": "Navivacs", - "phone": "876-567-3101", - "email": "alexandra@navivacs.com" - }, - { - "id": 9541, - "guid": "449468be-339b-4198-ad94-0bc778ee433d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Gill", - "company": "Fibrotouch", - "phone": "828-453-2466", - "email": "mackenzie@fibrotouch.com" - }, - { - "id": 9542, - "guid": "51c72039-b259-41fd-83b8-d0352216a154", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Jocelyn Hardman", - "company": "Westmedia", - "phone": "846-486-3077", - "email": "jocelyn@westmedia.com" - }, - { - "id": 9543, - "guid": "5db2d528-2a0a-423e-8bfa-b8320d97f7ad", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Rachel Bush", - "company": "Multitiqua", - "phone": "854-495-3223", - "email": "rachel@multitiqua.com" - }, - { - "id": 9544, - "guid": "4fc80f37-f849-4ea0-a565-7a1ec6b6c294", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Julia Wayne", - "company": "Robotomic", - "phone": "831-591-2473", - "email": "julia@robotomic.com" - }, - { - "id": 9545, - "guid": "52ea3fe6-2cfb-4f8f-a92a-53c57e02e452", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Amelia Miln", - "company": "Robotomic", - "phone": "845-564-2964", - "email": "amelia@robotomic.com" - }, - { - "id": 9546, - "guid": "14173b18-8a63-4b18-946f-bbd2ff7e5592", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Leah Warren", - "company": "Safeagra", - "phone": "815-516-2426", - "email": "leah@safeagra.com" - }, - { - "id": 9547, - "guid": "dabbcc37-b229-4b6a-8990-0f679a4c45d8", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sofia Bush", - "company": "SysVenamerica", - "phone": "889-575-2584", - "email": "sofia@sysvenamerica.com" - }, - { - "id": 9548, - "guid": "0744774f-dc6b-42a9-8afe-70cb3af70ccc", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gianna Chapman", - "company": "Truetomic", - "phone": "876-500-3840", - "email": "gianna@truetomic.com" - }, - { - "id": 9549, - "guid": "4671f239-f100-4e4b-895c-a2d85b763ce8", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Abigail Goldman", - "company": "Cryptotemplate", - "phone": "855-419-3688", - "email": "abigail@cryptotemplate.com" - }, - { - "id": 9550, - "guid": "e04e05bc-2dfa-4e3f-8eaf-74ddd402a345", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Taylor Oswald", - "company": "Steganoconiche", - "phone": "876-439-2323", - "email": "taylor@steganoconiche.com" - }, - { - "id": 9551, - "guid": "d641e853-efe6-4ffa-9479-8acd883ab6f2", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Gianna Haig", - "company": "Interliant", - "phone": "831-461-2159", - "email": "gianna@interliant.com" - }, - { - "id": 9552, - "guid": "b23c90a1-dcba-4630-8b13-225344079958", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Madeline Waller", - "company": "Ventanium", - "phone": "879-584-3050", - "email": "madeline@ventanium.com" - }, - { - "id": 9553, - "guid": "be2e7ca5-64e9-469a-add7-efa23372ad66", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Hailey Molligan", - "company": "Turbomart", - "phone": "882-400-2403", - "email": "hailey@turbomart.com" - }, - { - "id": 9554, - "guid": "af6ffb4d-e558-464d-a89d-781eab868aa4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Harrison", - "company": "eEyetanic", - "phone": "880-405-2517", - "email": "destiny@eeyetanic.com" - }, - { - "id": 9555, - "guid": "8626f19d-03e0-4a24-a456-2cd0165388ba", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Michaelson", - "company": "Westtomik", - "phone": "880-422-2557", - "email": "kaitlyn@westtomik.com" - }, - { - "id": 9556, - "guid": "5fde2d9d-34ca-45dc-b122-3adf0a244be0", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Aubrey Thornton", - "company": "Quintegrity", - "phone": "866-567-3556", - "email": "aubrey@quintegrity.com" - }, - { - "id": 9557, - "guid": "cc545908-d676-4ffa-aab7-59b8d5c66bed", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Ella Conors", - "company": "Unconix", - "phone": "875-541-2801", - "email": "ella@unconix.com" - }, - { - "id": 9558, - "guid": "24cf09d7-aad2-4a4c-9399-64144575f94c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Warren", - "company": "Entcast", - "phone": "849-402-2342", - "email": "mackenzie@entcast.com" - }, - { - "id": 9559, - "guid": "5d7f054e-a4de-485c-a245-67d126836b0c", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Maria Creighton", - "company": "Enlogia", - "phone": "839-570-2643", - "email": "maria@enlogia.com" - }, - { - "id": 9560, - "guid": "15696f3e-a2a6-411d-88cf-22ab7e28abbf", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Aubrey Chesterton", - "company": "Celgra", - "phone": "803-400-2014", - "email": "aubrey@celgra.com" - }, - { - "id": 9561, - "guid": "24b25dc3-00b3-4b99-80bd-a9527c203ab5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Victoria Nelson", - "company": "Truegate", - "phone": "871-566-2768", - "email": "victoria@truegate.com" - }, - { - "id": 9562, - "guid": "9a0637b6-7062-4cb8-b8d4-4aba2dca8d37", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Gabrielle Cook", - "company": "eEyetanic", - "phone": "854-404-2729", - "email": "gabrielle@eeyetanic.com" - }, - { - "id": 9563, - "guid": "d9d82b0a-7ff5-4986-84c1-37730c77dbab", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Mya Smith", - "company": "Netsystems", - "phone": "819-581-2951", - "email": "mya@netsystems.com" - }, - { - "id": 9564, - "guid": "182fcd1b-4876-4d20-94aa-dd740ca3ccab", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Bailey Wayne", - "company": "Technogra", - "phone": "881-468-2221", - "email": "bailey@technogra.com" - }, - { - "id": 9565, - "guid": "f2cd8c65-cf80-4926-b511-d8480fd17f8b", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Oswald", - "company": "Genland", - "phone": "832-461-3654", - "email": "aubrey@genland.com" - }, - { - "id": 9566, - "guid": "242090bd-b422-4856-ab98-d1f13c37e5d9", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Lily Goldman", - "company": "Tekcar", - "phone": "866-598-3562", - "email": "lily@tekcar.com" - }, - { - "id": 9567, - "guid": "1b6a20dc-da25-417b-b562-e31fc4292181", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Chloe Day", - "company": "Safeagra", - "phone": "811-487-3230", - "email": "chloe@safeagra.com" - }, - { - "id": 9568, - "guid": "22564c2b-43ed-4a2f-bdbb-e4543a024c7e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabelle Oliver", - "company": "Steganoconiche", - "phone": "853-523-3300", - "email": "isabelle@steganoconiche.com" - }, - { - "id": 9569, - "guid": "c78c13f3-117e-4211-b343-cd4459bf7948", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Genesis Turner", - "company": "Navivacs", - "phone": "813-485-3375", - "email": "genesis@navivacs.com" - }, - { - "id": 9570, - "guid": "9c542c53-93be-4faf-b2e3-0bacf06ac452", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Alexis Bush", - "company": "Robocomm", - "phone": "861-429-3851", - "email": "alexis@robocomm.com" - }, - { - "id": 9571, - "guid": "2802953a-9b3a-47f9-b6d0-871ec35ad156", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Rachel Conors", - "company": "Transtouch", - "phone": "846-563-2231", - "email": "rachel@transtouch.com" - }, - { - "id": 9572, - "guid": "b34ef01a-334f-40f7-ad15-f4d85672599f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Audrey Otis", - "company": "Infragraph", - "phone": "873-592-3369", - "email": "audrey@infragraph.com" - }, - { - "id": 9573, - "guid": "7b0bea88-1df4-4311-9182-7e613f0bda39", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaitlyn Chesterton", - "company": "Interliant", - "phone": "802-557-3029", - "email": "kaitlyn@interliant.com" - }, - { - "id": 9574, - "guid": "5f41f9b8-6216-4036-944a-b8932e54d2a3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Nevaeh Daniels", - "company": "iSkyvaco", - "phone": "883-474-2030", - "email": "nevaeh@iskyvaco.com" - }, - { - "id": 9575, - "guid": "7c7d9a94-3bae-4073-864b-d11cba535ec5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Mya Campbell", - "company": "Westmedia", - "phone": "869-599-2101", - "email": "mya@westmedia.com" - }, - { - "id": 9576, - "guid": "872a5cd0-043f-4f30-b9b5-8de03b0f8492", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bella White", - "company": "Skydata", - "phone": "862-502-2949", - "email": "bella@skydata.com" - }, - { - "id": 9577, - "guid": "5d7d2182-564f-4847-93c0-c16e34703726", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madison Hailey", - "company": "RoboAerlogix", - "phone": "850-435-3250", - "email": "madison@roboaerlogix.com" - }, - { - "id": 9578, - "guid": "4993269a-e8cf-4aa8-bccf-601d3f695628", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Gianna Wainwright", - "company": "InfoAirway", - "phone": "866-438-2184", - "email": "gianna@infoairway.com" - }, - { - "id": 9579, - "guid": "3fc92ee4-579d-401b-9c41-33883d2036f7", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Abigail Warren", - "company": "Polytheon", - "phone": "888-458-2880", - "email": "abigail@polytheon.com" - }, - { - "id": 9580, - "guid": "24dfdcc9-357a-411c-8679-38faff975945", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Hannah Oswald", - "company": "OpKeycomm", - "phone": "872-549-3473", - "email": "hannah@opkeycomm.com" - }, - { - "id": 9581, - "guid": "8d109031-500d-4e23-9cb4-f266f39edd9a", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Hailey Miller", - "company": "Unologic", - "phone": "854-413-2222", - "email": "hailey@unologic.com" - }, - { - "id": 9582, - "guid": "4cffbdd5-6a9f-4dae-8e64-88e82267821d", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madison Mercer", - "company": "Quintegrity", - "phone": "824-463-2529", - "email": "madison@quintegrity.com" - }, - { - "id": 9583, - "guid": "b5ac9a92-f04f-4a5d-bd22-55c1831f2ab7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Hannah Wood", - "company": "InfoAirway", - "phone": "877-463-3907", - "email": "hannah@infoairway.com" - }, - { - "id": 9584, - "guid": "02073969-1f5b-4091-9764-7d68ba8bdfd5", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ariana Thornton", - "company": "Technogra", - "phone": "852-416-3995", - "email": "ariana@technogra.com" - }, - { - "id": 9585, - "guid": "4120cfeb-4963-42e6-bdc4-837d8655ed5b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madison Webster", - "company": "Qualserve", - "phone": "899-573-2313", - "email": "madison@qualserve.com" - }, - { - "id": 9586, - "guid": "ec3cf2e6-0d9d-4f84-9d0b-ebdb00746342", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Mia Gilbert", - "company": "Orthosoft", - "phone": "866-528-2913", - "email": "mia@orthosoft.com" - }, - { - "id": 9587, - "guid": "24f2430f-b9d4-45ed-9e33-8ecb87c9b6c1", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Claire Cramer", - "company": "iMedconik", - "phone": "894-424-3208", - "email": "claire@imedconik.com" - }, - { - "id": 9588, - "guid": "6dba34e9-d788-409a-88dd-019ad03edc30", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Genesis Galbraith", - "company": "Multitiqua", - "phone": "847-484-2597", - "email": "genesis@multitiqua.com" - }, - { - "id": 9589, - "guid": "19280359-d88f-4a58-8ed5-fb02be8ab629", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Julia Thornton", - "company": "Compuamerica", - "phone": "826-550-2578", - "email": "julia@compuamerica.com" - }, - { - "id": 9590, - "guid": "8efa3f1c-cadf-41b4-ad5a-fe6dfdb7891f", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Vanessa Charlson", - "company": "Allphysiche", - "phone": "876-588-2228", - "email": "vanessa@allphysiche.com" - }, - { - "id": 9591, - "guid": "c5a29daa-ad0c-4706-a7e5-ae6ba001e58f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Sherlock", - "company": "Pacwest", - "phone": "860-403-3913", - "email": "isabella@pacwest.com" - }, - { - "id": 9592, - "guid": "60ec1e67-3dab-43f2-8a8e-1dcb21648a5f", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Ashley Osborne", - "company": "iOptystix", - "phone": "831-565-2746", - "email": "ashley@ioptystix.com" - }, - { - "id": 9593, - "guid": "5cbade22-655f-44a2-b560-4f49c7dc1bf6", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Brooklyn Conors", - "company": "Inridium", - "phone": "828-560-3181", - "email": "brooklyn@inridium.com" - }, - { - "id": 9594, - "guid": "1c26071b-a53b-41a6-811a-1bd690048ef8", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Morgan Michaelson", - "company": "Safetrust", - "phone": "845-523-2286", - "email": "morgan@safetrust.com" - }, - { - "id": 9595, - "guid": "04092695-b4be-4e49-80fe-3b922c590624", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Zoe Daniels", - "company": "iSkyvaco", - "phone": "888-471-2489", - "email": "zoe@iskyvaco.com" - }, - { - "id": 9596, - "guid": "7c6b2b95-4a49-47a4-93fd-1526466ea23d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Katherine Campbell", - "company": "Steganoconiche", - "phone": "803-471-3330", - "email": "katherine@steganoconiche.com" - }, - { - "id": 9597, - "guid": "2b9020a3-ecfe-45f8-9b6d-f9a0410dfb44", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Katelyn Oldridge", - "company": "Vencom", - "phone": "890-580-2746", - "email": "katelyn@vencom.com" - }, - { - "id": 9598, - "guid": "106b3a97-bbb0-4c17-b383-08887b85c0a6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Hailey Oliver", - "company": "Techtron", - "phone": "832-589-2128", - "email": "hailey@techtron.com" - }, - { - "id": 9599, - "guid": "0d762ef9-a37b-4dc4-8c0d-6906ccc4d23c", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Paige Brickman", - "company": "Mescatron", - "phone": "876-513-2740", - "email": "paige@mescatron.com" - }, - { - "id": 9600, - "guid": "91da25e5-0698-401a-a367-87df990f63f5", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kayla Carey", - "company": "eEyetanic", - "phone": "890-485-2305", - "email": "kayla@eeyetanic.com" - }, - { - "id": 9601, - "guid": "9d90d48d-009c-4d1a-a5f9-733a0797cca2", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sofia Nash", - "company": "iQualcar", - "phone": "897-598-3971", - "email": "sofia@iqualcar.com" - }, - { - "id": 9602, - "guid": "5f9df8fc-44a0-4047-9fc6-a843e196e6ca", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Brooke Galbraith", - "company": "Compuamerica", - "phone": "829-424-3813", - "email": "brooke@compuamerica.com" - }, - { - "id": 9603, - "guid": "4c0173af-8ed4-43d4-8381-6afc9877e5a0", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Vanessa Carey", - "company": "Entcast", - "phone": "821-559-3024", - "email": "vanessa@entcast.com" - }, - { - "id": 9604, - "guid": "d5fce6e3-a66e-4f3f-9825-3d6d4cf82628", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Layla Miln", - "company": "Entcast", - "phone": "893-578-3618", - "email": "layla@entcast.com" - }, - { - "id": 9605, - "guid": "f913e224-6529-4d07-9a83-a58b38995c9f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Addison Day", - "company": "Polytheon", - "phone": "881-598-2806", - "email": "addison@polytheon.com" - }, - { - "id": 9606, - "guid": "15d5bfc2-d123-49a9-b546-e6a390d6384e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Zoey Gilbert", - "company": "eEyetanic", - "phone": "844-514-3135", - "email": "zoey@eeyetanic.com" - }, - { - "id": 9607, - "guid": "3df6c1a5-7af6-4985-afa1-e6bddd0cda85", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Riley Ward", - "company": "Quintegrity", - "phone": "827-599-3335", - "email": "riley@quintegrity.com" - }, - { - "id": 9608, - "guid": "7882fd44-543d-4bcd-9b27-a89f1806d9e7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Addison Bush", - "company": "Polytheon", - "phone": "886-576-2034", - "email": "addison@polytheon.com" - }, - { - "id": 9609, - "guid": "a3b211a5-8113-40b0-9495-927e6f3f54f4", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jasmine Sheldon", - "company": "Fibrotopia", - "phone": "840-519-3324", - "email": "jasmine@fibrotopia.com" - }, - { - "id": 9610, - "guid": "35979deb-d043-406e-815c-f5d386988f22", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Alyssa Ogden", - "company": "Netseco", - "phone": "844-594-2473", - "email": "alyssa@netseco.com" - }, - { - "id": 9611, - "guid": "8b2e4150-5da4-4d53-8dd3-461c8fd4d0b6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Aaliyah Hodges", - "company": "Safeagra", - "phone": "874-547-2080", - "email": "aaliyah@safeagra.com" - }, - { - "id": 9612, - "guid": "9661c8a8-53fd-46e4-a6d7-3fab25701ab2", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Valeria Gustman", - "company": "Jamrola", - "phone": "836-592-3260", - "email": "valeria@jamrola.com" - }, - { - "id": 9613, - "guid": "3debe8aa-9879-451b-8729-902fa13d47ba", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Lily Adamson", - "company": "Titanirola", - "phone": "889-492-3158", - "email": "lily@titanirola.com" - }, - { - "id": 9614, - "guid": "6164954d-54be-4e76-b144-0234db44a006", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Alexa Turner", - "company": "eSteganoergy", - "phone": "830-576-3004", - "email": "alexa@esteganoergy.com" - }, - { - "id": 9615, - "guid": "7eb0fbf4-36c0-4600-9bbf-44c842c6dc1a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Freeman", - "company": "US Omnigraphik", - "phone": "852-560-3681", - "email": "brianna@us omnigraphik.com" - }, - { - "id": 9616, - "guid": "083ba1ba-45d8-4b3f-b9c0-96e9235da3e0", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madelyn Wallace", - "company": "Orthosoft", - "phone": "868-455-3487", - "email": "madelyn@orthosoft.com" - }, - { - "id": 9617, - "guid": "e5c22535-2a79-46ff-a848-e42955d459bb", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Genesis Haig", - "company": "Venconix", - "phone": "847-411-2808", - "email": "genesis@venconix.com" - }, - { - "id": 9618, - "guid": "e6bfbe84-04ee-4c2d-9ab2-fd6d8a71d05c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mackenzie Carrington", - "company": "Rapigrafix", - "phone": "886-498-3280", - "email": "mackenzie@rapigrafix.com" - }, - { - "id": 9619, - "guid": "20ab695a-fc69-4d90-bf62-8a98ca9f6134", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Isabella Otis", - "company": "Conrama", - "phone": "859-595-3752", - "email": "isabella@conrama.com" - }, - { - "id": 9620, - "guid": "e5939431-b5a1-40c0-a609-6f161814e139", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hannah Wesley", - "company": "Robocomm", - "phone": "804-589-2206", - "email": "hannah@robocomm.com" - }, - { - "id": 9621, - "guid": "72ed205f-a9fb-4505-b94a-642a68a62fb7", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Creighton", - "company": "Superscope", - "phone": "896-524-3908", - "email": "isabelle@superscope.com" - }, - { - "id": 9622, - "guid": "eadd0a46-39a1-433e-ad04-ca175ed0b0ca", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Osborne", - "company": "Cryptotegrity", - "phone": "875-414-3753", - "email": "hailey@cryptotegrity.com" - }, - { - "id": 9623, - "guid": "d3846d3c-4142-492b-8dae-55cf03a396c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Stanley", - "company": "Syssoft", - "phone": "897-578-2379", - "email": "kaitlyn@syssoft.com" - }, - { - "id": 9624, - "guid": "7d8d6dc9-4b5c-4d0e-85ef-ff1f044b90f6", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Julia Higgins", - "company": "Airdyne", - "phone": "852-401-2732", - "email": "julia@airdyne.com" - }, - { - "id": 9625, - "guid": "36dae3b9-f646-419e-a8fe-9ff8ab9e4b63", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gianna WifKinson", - "company": "SysVenamerica", - "phone": "824-455-2290", - "email": "gianna@sysvenamerica.com" - }, - { - "id": 9626, - "guid": "638b60bf-5b60-4477-a68d-84cbb8120ef4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Avery Stanley", - "company": "Textiqua", - "phone": "851-593-2285", - "email": "avery@textiqua.com" - }, - { - "id": 9627, - "guid": "ad937c91-2704-4079-9240-7908a3b11396", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Wainwright", - "company": "Titanirola", - "phone": "809-592-3894", - "email": "nevaeh@titanirola.com" - }, - { - "id": 9628, - "guid": "f343f575-6ef0-45a4-bb56-b04727d5d32b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Arianna Murphy", - "company": "Pacwest", - "phone": "868-428-3183", - "email": "arianna@pacwest.com" - }, - { - "id": 9629, - "guid": "68669a9e-d56a-4c70-98b4-20955cc1d255", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Osborne", - "company": "Dynarama", - "phone": "827-420-3878", - "email": "emily@dynarama.com" - }, - { - "id": 9630, - "guid": "1b7f3f4e-4210-485f-8667-88fbfd574153", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Hailey Daniels", - "company": "Gigaura", - "phone": "895-476-2194", - "email": "hailey@gigaura.com" - }, - { - "id": 9631, - "guid": "f515488f-beeb-454e-8587-a2f7fa6a424c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Peyton Brickman", - "company": "Keytheon", - "phone": "826-406-3958", - "email": "peyton@keytheon.com" - }, - { - "id": 9632, - "guid": "d1b74a11-66e7-47bf-8b0e-b1fd93008ea9", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Zoey Brooks", - "company": "Superscope", - "phone": "872-418-3764", - "email": "zoey@superscope.com" - }, - { - "id": 9633, - "guid": "5251646b-dcbf-4127-9b7c-9c978244dfca", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sarah Oldman", - "company": "SysVenamerica", - "phone": "840-561-2148", - "email": "sarah@sysvenamerica.com" - }, - { - "id": 9634, - "guid": "bdc2bd56-adfe-4534-9547-521ad420fbf3", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kylie Murphy", - "company": "Safeagra", - "phone": "875-499-3129", - "email": "kylie@safeagra.com" - }, - { - "id": 9635, - "guid": "9d523320-8ef3-4694-9a16-f5472b62f650", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Peyton Cramer", - "company": "Cryptotegrity", - "phone": "818-430-2350", - "email": "peyton@cryptotegrity.com" - }, - { - "id": 9636, - "guid": "db6ac80a-4e8f-4824-a873-072c25e588ad", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Elizabeth Wayne", - "company": "Ventanium", - "phone": "804-440-2384", - "email": "elizabeth@ventanium.com" - }, - { - "id": 9637, - "guid": "b92cf2e5-d0a6-43fe-8363-dd121a3a76a9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Peyton Cook", - "company": "Infraique", - "phone": "892-442-3953", - "email": "peyton@infraique.com" - }, - { - "id": 9638, - "guid": "fef7b138-5758-4c4b-be89-39688aeb5c1a", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Mercer", - "company": "Techtron", - "phone": "821-581-2611", - "email": "hailey@techtron.com" - }, - { - "id": 9639, - "guid": "20f210e9-ab97-41f6-8e0e-7bcbc34f32a4", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Andrea White", - "company": "Orthomedia", - "phone": "824-544-2811", - "email": "andrea@orthomedia.com" - }, - { - "id": 9640, - "guid": "b762cf4e-25ed-46b1-b620-8f2bcad19216", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Savannah Fulton", - "company": "SysUSA", - "phone": "819-463-3150", - "email": "savannah@sysusa.com" - }, - { - "id": 9641, - "guid": "23fb4906-793a-4d56-9992-ccf36ece609d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bella Gilbert", - "company": "Pericenta", - "phone": "800-467-2832", - "email": "bella@pericenta.com" - }, - { - "id": 9642, - "guid": "091b3114-fddb-4731-a099-d4a970264c79", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Gabrielle Neal", - "company": "Infragraph", - "phone": "852-500-3173", - "email": "gabrielle@infragraph.com" - }, - { - "id": 9643, - "guid": "0e05963e-7901-4de0-b8b7-96e3e2d007e3", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Charlotte Wesley", - "company": "Anaframe", - "phone": "828-529-3840", - "email": "charlotte@anaframe.com" - }, - { - "id": 9644, - "guid": "acac9502-8466-4c65-8f12-331aa295e2e1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Arianna Walkman", - "company": "Conrama", - "phone": "872-505-3871", - "email": "arianna@conrama.com" - }, - { - "id": 9645, - "guid": "99d886c6-2216-4b77-8794-72a8f37ab752", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Caroline Day", - "company": "Conrama", - "phone": "823-465-2826", - "email": "caroline@conrama.com" - }, - { - "id": 9646, - "guid": "7d7c8206-6276-4353-9a2f-0b837bd3697c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Hannah Milton", - "company": "Westmedia", - "phone": "877-546-2941", - "email": "hannah@westmedia.com" - }, - { - "id": 9647, - "guid": "c0f8cc5a-b172-46a4-b0ce-d98730a8baf7", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ariana Owen", - "company": "Systheon", - "phone": "856-506-3060", - "email": "ariana@systheon.com" - }, - { - "id": 9648, - "guid": "02cd72eb-7636-4b18-95b9-191427d2cd58", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Bailey Sherlock", - "company": "Compuamerica", - "phone": "848-535-2369", - "email": "bailey@compuamerica.com" - }, - { - "id": 9649, - "guid": "67e2c782-a0c7-4757-a548-4b685726e724", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Charlotte Oswald", - "company": "eSteganoergy", - "phone": "818-447-2787", - "email": "charlotte@esteganoergy.com" - }, - { - "id": 9650, - "guid": "8c284b2a-3248-480a-bcfe-c5b3c95936e7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Grace Oldman", - "company": "Videobanc", - "phone": "836-597-3203", - "email": "grace@videobanc.com" - }, - { - "id": 9651, - "guid": "93bacc09-bdd1-498d-8010-980cdb2a4f0c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lillian Hardman", - "company": "Generola", - "phone": "882-473-2404", - "email": "lillian@generola.com" - }, - { - "id": 9652, - "guid": "0a826474-bc88-4f1d-adf1-1d2479498681", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Jessica Walkman", - "company": "US Infratouch", - "phone": "894-450-2751", - "email": "jessica@us infratouch.com" - }, - { - "id": 9653, - "guid": "4f3ca17a-35af-4971-b82a-37ebe22598a3", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Zoe Milton", - "company": "Safeagra", - "phone": "840-543-2825", - "email": "zoe@safeagra.com" - }, - { - "id": 9654, - "guid": "61cda98c-5ef1-4ef0-b055-a986e849c7f4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Ford", - "company": "Conrama", - "phone": "830-426-3248", - "email": "melanie@conrama.com" - }, - { - "id": 9655, - "guid": "76e66414-2527-493d-8bb9-39056483db87", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Gate", - "company": "eEyetanic", - "phone": "812-528-2994", - "email": "sarah@eeyetanic.com" - }, - { - "id": 9656, - "guid": "f334beca-c5bd-478c-a23c-a895b2d5a44a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Eva Goodman", - "company": "InfoAirway", - "phone": "813-439-3602", - "email": "eva@infoairway.com" - }, - { - "id": 9657, - "guid": "89fd8b71-7177-424d-b352-6d1ef11ca17d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Molly Galbraith", - "company": "Syssoft", - "phone": "823-504-2733", - "email": "molly@syssoft.com" - }, - { - "id": 9658, - "guid": "77350744-17f4-4f93-accd-f47f87c37ec5", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Andrea Gill", - "company": "Fibrotouch", - "phone": "814-579-2095", - "email": "andrea@fibrotouch.com" - }, - { - "id": 9659, - "guid": "14584ce7-248d-4d07-8606-992f99bf4eb7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Khloe Clapton", - "company": "Anaframe", - "phone": "850-544-2782", - "email": "khloe@anaframe.com" - }, - { - "id": 9660, - "guid": "5746a7d0-4aef-4367-8edf-424131d51274", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lauren Clapton", - "company": "Raylog", - "phone": "841-511-3380", - "email": "lauren@raylog.com" - }, - { - "id": 9661, - "guid": "229de8d9-a62e-47b5-a5bd-2cce61251965", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Brooke Carey", - "company": "Truegate", - "phone": "808-484-2220", - "email": "brooke@truegate.com" - }, - { - "id": 9662, - "guid": "82abae8f-890d-4234-a1c8-a35b5baf1bc0", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Wainwright", - "company": "Teratopia", - "phone": "859-405-3922", - "email": "angelina@teratopia.com" - }, - { - "id": 9663, - "guid": "bf338515-4d2f-4bb5-9acd-a771f2a7a95c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Julia Wood", - "company": "Multitiqua", - "phone": "813-574-2373", - "email": "julia@multitiqua.com" - }, - { - "id": 9664, - "guid": "e74199b0-5078-4c47-a13f-596d6aed1426", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Taylor Clapton", - "company": "Keytheon", - "phone": "833-468-2393", - "email": "taylor@keytheon.com" - }, - { - "id": 9665, - "guid": "fea6037a-2935-4480-94fb-be15982ff4b5", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Arianna Brickman", - "company": "Indisco", - "phone": "831-405-2898", - "email": "arianna@indisco.com" - }, - { - "id": 9666, - "guid": "0870a050-af1d-40a6-bb44-5ab2b315ec86", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Victoria Harrison", - "company": "Interliant", - "phone": "887-566-3756", - "email": "victoria@interliant.com" - }, - { - "id": 9667, - "guid": "642699bc-22c1-4878-8015-cd8c92d2affe", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Isabella Waller", - "company": "Airdyne", - "phone": "833-423-3181", - "email": "isabella@airdyne.com" - }, - { - "id": 9668, - "guid": "ef1b9a97-7257-4b1d-9158-626c5ca9481d", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Makayla Hoggarth", - "company": "Conrama", - "phone": "880-599-3419", - "email": "makayla@conrama.com" - }, - { - "id": 9669, - "guid": "bc5c3f16-0ad4-4596-975e-abca007844fc", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Payton Nash", - "company": "eSteganoergy", - "phone": "883-446-2293", - "email": "payton@esteganoergy.com" - }, - { - "id": 9670, - "guid": "2138897a-2d8d-4c48-9832-87aa048cbc7d", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Victoria Wesley", - "company": "Multitiqua", - "phone": "877-506-2053", - "email": "victoria@multitiqua.com" - }, - { - "id": 9671, - "guid": "2ea8a0e3-0922-48b0-887d-82478e82129f", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Brooke Miers", - "company": "Allnet", - "phone": "807-468-3578", - "email": "brooke@allnet.com" - }, - { - "id": 9672, - "guid": "de59a406-0317-4412-863d-cd74d21badf3", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Maya Youmans", - "company": "Entcast", - "phone": "886-481-3317", - "email": "maya@entcast.com" - }, - { - "id": 9673, - "guid": "e32644af-0571-4fdb-b932-72212fb24a50", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gabrielle Timmons", - "company": "Interliant", - "phone": "866-568-3414", - "email": "gabrielle@interliant.com" - }, - { - "id": 9674, - "guid": "a3580fa8-a1e1-47e7-ae69-d7d9e50e3abd", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Emma Brown", - "company": "Polytheon", - "phone": "870-425-3965", - "email": "emma@polytheon.com" - }, - { - "id": 9675, - "guid": "9f152581-8cb6-4918-adb4-3e6f0b334b79", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Lauren Gardner", - "company": "SysVenamerica", - "phone": "820-551-2632", - "email": "lauren@sysvenamerica.com" - }, - { - "id": 9676, - "guid": "b77b22e1-da93-491d-be65-a7783a3260b6", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Emily Carter", - "company": "Quintegrity", - "phone": "847-411-2811", - "email": "emily@quintegrity.com" - }, - { - "id": 9677, - "guid": "543e818f-14a2-4721-9434-d14853587d6f", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Zoe Miers", - "company": "Enlogia", - "phone": "853-563-2650", - "email": "zoe@enlogia.com" - }, - { - "id": 9678, - "guid": "f68aa135-b79f-4223-819c-b7ec6f777169", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Sarah Gilmore", - "company": "Robotomic", - "phone": "825-546-3323", - "email": "sarah@robotomic.com" - }, - { - "id": 9679, - "guid": "664b5d7e-2a05-4a73-ba49-c9ef33096ba7", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Angelina Molligan", - "company": "Allphysiche", - "phone": "826-594-2249", - "email": "angelina@allphysiche.com" - }, - { - "id": 9680, - "guid": "34a29165-6236-4684-94fa-4320f96eca10", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Isabella Wood", - "company": "Teraserv", - "phone": "879-413-3086", - "email": "isabella@teraserv.com" - }, - { - "id": 9681, - "guid": "78533ef5-3904-46d3-a932-d2ec4869fe3c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madelyn Mercer", - "company": "Jamconik", - "phone": "812-401-3366", - "email": "madelyn@jamconik.com" - }, - { - "id": 9682, - "guid": "b0a5b98a-19ef-4163-819b-941d55d5769a", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Aubrey Neal", - "company": "Titanigraf", - "phone": "819-471-2467", - "email": "aubrey@titanigraf.com" - }, - { - "id": 9683, - "guid": "d7dc8fb6-0665-4770-9315-e2f97e93d905", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Katelyn Chapman", - "company": "RoboAerlogix", - "phone": "824-565-3218", - "email": "katelyn@roboaerlogix.com" - }, - { - "id": 9684, - "guid": "a0f9c3ea-196c-4f58-9b06-8a52684c24da", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Hailey Fulton", - "company": "Anagraph", - "phone": "800-533-3918", - "email": "hailey@anagraph.com" - }, - { - "id": 9685, - "guid": "ab6cc5e5-372f-47b4-afa4-c2812c5c2094", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Samantha Carter", - "company": "iEnland", - "phone": "899-461-3111", - "email": "samantha@ienland.com" - }, - { - "id": 9686, - "guid": "677cd461-c612-432c-a1f8-0d501f3aaba1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Eva Wayne", - "company": "Jamconik", - "phone": "801-407-2372", - "email": "eva@jamconik.com" - }, - { - "id": 9687, - "guid": "19614b26-c604-4b54-aec6-510ed5263797", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Hailey Wesley", - "company": "InfoAirway", - "phone": "826-435-2906", - "email": "hailey@infoairway.com" - }, - { - "id": 9688, - "guid": "d70210f4-227d-48d5-ad77-d1853784cf35", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Jessica Davidson", - "company": "Robocomm", - "phone": "890-479-2386", - "email": "jessica@robocomm.com" - }, - { - "id": 9689, - "guid": "b448b1d0-b658-4816-baf0-ccbe0db835cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Caroline Carey", - "company": "Truetomic", - "phone": "822-428-2931", - "email": "caroline@truetomic.com" - }, - { - "id": 9690, - "guid": "f59a14e0-1a69-4929-89a3-9b9be4e7f689", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sophia Higgins", - "company": "Orthosoft", - "phone": "876-581-3154", - "email": "sophia@orthosoft.com" - }, - { - "id": 9691, - "guid": "d24ef1eb-7364-4029-8546-8e6ca1886e6e", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Gibbs", - "company": "Dynarama", - "phone": "876-468-3004", - "email": "eva@dynarama.com" - }, - { - "id": 9692, - "guid": "772104e8-ec75-45e4-83b7-7905948e7736", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sarah Wallace", - "company": "Teratopia", - "phone": "854-523-2405", - "email": "sarah@teratopia.com" - }, - { - "id": 9693, - "guid": "70d2264a-e937-4691-9d1c-5b62ba8c54a4", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Mackenzie Freeman", - "company": "Xeicon", - "phone": "824-453-3359", - "email": "mackenzie@xeicon.com" - }, - { - "id": 9694, - "guid": "7a32c351-183d-4753-bfb6-50803f7f095d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Brooklyn Nelson", - "company": "Sontopia", - "phone": "840-484-2036", - "email": "brooklyn@sontopia.com" - }, - { - "id": 9695, - "guid": "c24e3885-9144-4d8b-96cc-f7da0e06f3db", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Abigail Carter", - "company": "iEnland", - "phone": "824-494-2780", - "email": "abigail@ienland.com" - }, - { - "id": 9696, - "guid": "28fba140-5ae4-45b8-bd51-34608d1c667d", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Jasmine Oliver", - "company": "Nanobanc", - "phone": "895-571-3066", - "email": "jasmine@nanobanc.com" - }, - { - "id": 9697, - "guid": "5fb0bb2b-ec26-48f5-8178-57f6ee2a669d", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Nash", - "company": "Orthosoft", - "phone": "872-516-2927", - "email": "kaitlyn@orthosoft.com" - }, - { - "id": 9698, - "guid": "a710936b-f042-4d51-9712-b71dea872d95", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Valeria Harrison", - "company": "Superscope", - "phone": "821-553-2954", - "email": "valeria@superscope.com" - }, - { - "id": 9699, - "guid": "ff5059fc-4efd-4e28-81ed-0d5ebf175f83", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Layla Clapton", - "company": "Technogra", - "phone": "808-490-2357", - "email": "layla@technogra.com" - }, - { - "id": 9700, - "guid": "214229b0-61fb-4aba-98e5-3d6ff1543a46", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Sophie Gibbs", - "company": "Anaframe", - "phone": "807-579-2454", - "email": "sophie@anaframe.com" - }, - { - "id": 9701, - "guid": "b4873717-14cb-4273-bd8b-5a0180e7411a", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Samantha Gibbs", - "company": "Teratopia", - "phone": "891-556-2269", - "email": "samantha@teratopia.com" - }, - { - "id": 9702, - "guid": "c98d6eaf-0879-462c-ac4d-be30d45ed226", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Mia Oldman", - "company": "Pacwest", - "phone": "898-445-2363", - "email": "mia@pacwest.com" - }, - { - "id": 9703, - "guid": "59f638d5-d460-42b4-99fe-ea77f26dd097", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Madison Gill", - "company": "iEnland", - "phone": "869-491-3483", - "email": "madison@ienland.com" - }, - { - "id": 9704, - "guid": "ef35da57-653b-42ed-b2f6-1c934a0c0d1f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madeline Gerald", - "company": "Fibroserve", - "phone": "805-461-3824", - "email": "madeline@fibroserve.com" - }, - { - "id": 9705, - "guid": "b9074bbb-b20a-411b-8744-c168aaaced00", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Evelyn Thomson", - "company": "Aluco", - "phone": "831-477-2641", - "email": "evelyn@aluco.com" - }, - { - "id": 9706, - "guid": "88a1d44c-ebe7-4f6d-8ac4-b1ee6635033b", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Carrington", - "company": "Netsystems", - "phone": "847-517-3134", - "email": "leah@netsystems.com" - }, - { - "id": 9707, - "guid": "f998a17d-2264-4a6f-8e82-378feedd0caf", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Sophia Morrison", - "company": "Superscope", - "phone": "829-541-2070", - "email": "sophia@superscope.com" - }, - { - "id": 9708, - "guid": "dcd59dd3-8d1c-4b5b-88a5-49c213879e4e", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kayla Osborne", - "company": "Interliant", - "phone": "841-542-2133", - "email": "kayla@interliant.com" - }, - { - "id": 9709, - "guid": "0d12d8a7-4110-4b60-b541-837d02863b3a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Paige Bush", - "company": "Entcast", - "phone": "876-554-3032", - "email": "paige@entcast.com" - }, - { - "id": 9710, - "guid": "60b4d51d-3beb-46fc-ab1e-a1571b7bf887", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Bailey Sherlock", - "company": "Qualserve", - "phone": "881-503-3584", - "email": "bailey@qualserve.com" - }, - { - "id": 9711, - "guid": "114c820e-4576-4c7b-a06e-cacc9911e00f", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Olivia Day", - "company": "Compuamerica", - "phone": "845-536-3935", - "email": "olivia@compuamerica.com" - }, - { - "id": 9712, - "guid": "782a5819-adb4-4e3c-8752-4f06337e8149", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Alexandra Gilbert", - "company": "Venconix", - "phone": "879-519-3894", - "email": "alexandra@venconix.com" - }, - { - "id": 9713, - "guid": "328f2622-e722-45ce-867a-bc2b39bcad34", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Alexis Campbell", - "company": "SysVenamerica", - "phone": "823-539-2611", - "email": "alexis@sysvenamerica.com" - }, - { - "id": 9714, - "guid": "8e83f8aa-12ad-4354-a557-5728d5137566", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Ella Davidson", - "company": "Thermotomic", - "phone": "838-497-3856", - "email": "ella@thermotomic.com" - }, - { - "id": 9715, - "guid": "226b6e5e-a447-4aaf-ab0c-2e9eeb11295d", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Evelyn Mercer", - "company": "SysVenamerica", - "phone": "866-495-2579", - "email": "evelyn@sysvenamerica.com" - }, - { - "id": 9716, - "guid": "8b31dcd5-1e56-453b-a9ad-b594b2874f7a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Destiny Oliver", - "company": "Inridium", - "phone": "878-481-3845", - "email": "destiny@inridium.com" - }, - { - "id": 9717, - "guid": "734ca1db-aace-4529-9d35-45b76eeec08c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aubrey Goldman", - "company": "Turbomart", - "phone": "883-407-2409", - "email": "aubrey@turbomart.com" - }, - { - "id": 9718, - "guid": "ba539f24-f159-43cc-a0b0-eb0f819668f1", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Angelina Gibbs", - "company": "Truegate", - "phone": "899-575-3455", - "email": "angelina@truegate.com" - }, - { - "id": 9719, - "guid": "178bf2e1-d3e8-4fe8-9b28-6bef554b81b2", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Young", - "company": "Ameritron", - "phone": "837-546-2865", - "email": "madison@ameritron.com" - }, - { - "id": 9720, - "guid": "fbfaab1c-89cf-4558-96bb-4e3b531fb8e6", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Faith Ward", - "company": "eSteganoergy", - "phone": "868-477-2136", - "email": "faith@esteganoergy.com" - }, - { - "id": 9721, - "guid": "3a9e6049-5a23-4c99-9b5d-e33254fe95cc", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Hailey", - "company": "Vencom", - "phone": "895-576-2108", - "email": "trinity@vencom.com" - }, - { - "id": 9722, - "guid": "08acd113-621a-4a7f-8ba2-c4c7820793bc", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Zoey Charlson", - "company": "Unconix", - "phone": "877-505-2038", - "email": "zoey@unconix.com" - }, - { - "id": 9723, - "guid": "cc41a578-a368-439d-b394-31b19803f9b3", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Riley Warren", - "company": "Infragraph", - "phone": "834-440-2498", - "email": "riley@infragraph.com" - }, - { - "id": 9724, - "guid": "3fd93302-0f77-4d44-acc0-06102d108d7d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Aaliyah Sherlock", - "company": "Inridium", - "phone": "833-574-2960", - "email": "aaliyah@inridium.com" - }, - { - "id": 9725, - "guid": "56c8069e-78b2-4bdb-8db9-32516da23bfa", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Andrea Davidson", - "company": "Mescaridic", - "phone": "892-593-2757", - "email": "andrea@mescaridic.com" - }, - { - "id": 9726, - "guid": "de6ad98a-5061-45ac-b5db-bd351b064382", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Destiny Vaughan", - "company": "SysVenamerica", - "phone": "886-455-2578", - "email": "destiny@sysvenamerica.com" - }, - { - "id": 9727, - "guid": "8803bd63-ffe7-4953-b051-f86760ed35b9", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Andrea Chesterton", - "company": "Inridium", - "phone": "865-440-2728", - "email": "andrea@inridium.com" - }, - { - "id": 9728, - "guid": "a345848b-4c91-4f96-a075-348065be1263", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Madeline Hawkins", - "company": "Jamrola", - "phone": "828-405-2096", - "email": "madeline@jamrola.com" - }, - { - "id": 9729, - "guid": "d83293b9-cb2f-420b-8b40-19527443b584", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Zoey Galbraith", - "company": "Robocomm", - "phone": "898-558-2725", - "email": "zoey@robocomm.com" - }, - { - "id": 9730, - "guid": "50ad7f73-1d74-4cb9-8237-1455a2aa5db0", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Charlson", - "company": "Anaframe", - "phone": "836-409-3800", - "email": "emma@anaframe.com" - }, - { - "id": 9731, - "guid": "08f40f47-7a46-4ce8-a52f-819ca3ccde51", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katherine Gerald", - "company": "Openserve", - "phone": "838-554-2852", - "email": "katherine@openserve.com" - }, - { - "id": 9732, - "guid": "c45eb71e-1e37-4536-a2aa-2014c668459f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Andrea Owen", - "company": "Westmedia", - "phone": "865-598-3528", - "email": "andrea@westmedia.com" - }, - { - "id": 9733, - "guid": "2a1cf063-4b9b-48a6-ba55-06cc9d5688ad", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Peyton Harrison", - "company": "Infragraph", - "phone": "891-592-3956", - "email": "peyton@infragraph.com" - }, - { - "id": 9734, - "guid": "716a04f9-14f5-4797-a196-00b1c64846d7", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Angelina Creighton", - "company": "Inridium", - "phone": "873-499-2243", - "email": "angelina@inridium.com" - }, - { - "id": 9735, - "guid": "fb1ed191-6dab-4b98-ba11-bb86e5b3e52b", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Emily Gardner", - "company": "Aluco", - "phone": "871-462-2407", - "email": "emily@aluco.com" - }, - { - "id": 9736, - "guid": "e2fb1155-efc0-4f40-babb-669736368011", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Avery Miers", - "company": "Celgra", - "phone": "832-583-3459", - "email": "avery@celgra.com" - }, - { - "id": 9737, - "guid": "8d678286-86e0-49c4-bb3e-d2fccdcbf5f5", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mia Chapman", - "company": "Pacwest", - "phone": "873-431-3078", - "email": "mia@pacwest.com" - }, - { - "id": 9738, - "guid": "521fae26-31b7-448f-a79e-f0becf75ce68", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Olivia Oswald", - "company": "Ameritron", - "phone": "892-452-2033", - "email": "olivia@ameritron.com" - }, - { - "id": 9739, - "guid": "3d0248cd-6dde-4d61-a276-96ad114db4bd", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Avery Higgins", - "company": "Quintegrity", - "phone": "886-587-2109", - "email": "avery@quintegrity.com" - }, - { - "id": 9740, - "guid": "68659480-4827-451c-92dc-93138ee4eb0c", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Bailey Michaelson", - "company": "Nanobanc", - "phone": "837-520-2646", - "email": "bailey@nanobanc.com" - }, - { - "id": 9741, - "guid": "d6a1459f-b061-431c-bd4d-12ea5915d30f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sophie Young", - "company": "Multitiqua", - "phone": "864-584-3261", - "email": "sophie@multitiqua.com" - }, - { - "id": 9742, - "guid": "a5d609a8-b54e-45f3-9e14-13f9f0b69896", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Lauren Clapton", - "company": "Hypervaco", - "phone": "805-407-3665", - "email": "lauren@hypervaco.com" - }, - { - "id": 9743, - "guid": "3ef2e1eb-68c5-4b42-bc9d-21518fa88a42", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Madelyn Morrison", - "company": "Ventanium", - "phone": "814-522-2553", - "email": "madelyn@ventanium.com" - }, - { - "id": 9744, - "guid": "9f7f58d2-3225-4ee0-a861-731d5a049611", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Wesley", - "company": "Robocomm", - "phone": "864-472-3744", - "email": "valeria@robocomm.com" - }, - { - "id": 9745, - "guid": "f8a1b8b4-b04b-4e5a-8c59-626388012736", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Gabrielle Turner", - "company": "Robocomm", - "phone": "840-468-3963", - "email": "gabrielle@robocomm.com" - }, - { - "id": 9746, - "guid": "24522e5f-84cf-4bfb-b70c-4b54ba5f3050", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Andrea Turner", - "company": "Turbomart", - "phone": "883-462-2017", - "email": "andrea@turbomart.com" - }, - { - "id": 9747, - "guid": "822e3544-1e7e-4cde-8be9-2c5403ef04d3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Leah Wainwright", - "company": "Fibroserve", - "phone": "824-530-3029", - "email": "leah@fibroserve.com" - }, - { - "id": 9748, - "guid": "bb237d18-2397-4993-9003-7a170c6aa5f7", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Zoe Miln", - "company": "Dynarama", - "phone": "845-404-2051", - "email": "zoe@dynarama.com" - }, - { - "id": 9749, - "guid": "f4ee3152-7276-4760-aa6c-6b23a8c1f648", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Anna Smith", - "company": "Robotomic", - "phone": "818-577-3323", - "email": "anna@robotomic.com" - }, - { - "id": 9750, - "guid": "1ffca76a-84db-4f2d-9a25-f1d8a058284d", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Addison Timmons", - "company": "Allnet", - "phone": "877-414-3900", - "email": "addison@allnet.com" - }, - { - "id": 9751, - "guid": "48e81e0c-65b2-4e61-beb4-67c46ed564d7", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alexandra Carey", - "company": "Ventanium", - "phone": "893-451-2755", - "email": "alexandra@ventanium.com" - }, - { - "id": 9752, - "guid": "87fa90c6-04ba-4a82-a063-da09f06b8d55", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Carrington", - "company": "Celgra", - "phone": "804-597-3482", - "email": "trinity@celgra.com" - }, - { - "id": 9753, - "guid": "06d2cbe9-3847-4b32-944a-0a385127f10b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Zoe Chapman", - "company": "Technogra", - "phone": "892-424-2743", - "email": "zoe@technogra.com" - }, - { - "id": 9754, - "guid": "bd213185-86d6-4085-8f23-5f82cea9b9fb", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Haig", - "company": "Raylog", - "phone": "895-424-3772", - "email": "isabella@raylog.com" - }, - { - "id": 9755, - "guid": "ee1b1c9a-0ce7-4fd7-840c-976894bdfe15", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Jessica Thornton", - "company": "Conrama", - "phone": "849-526-2118", - "email": "jessica@conrama.com" - }, - { - "id": 9756, - "guid": "50cdd66c-f043-48f1-a5bd-e3eed27354e4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Kaitlyn Freeman", - "company": "Multitiqua", - "phone": "889-443-2485", - "email": "kaitlyn@multitiqua.com" - }, - { - "id": 9757, - "guid": "582f8a68-e361-4fda-98c0-95708adab5d8", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Bailey Hawkins", - "company": "Cryptotegrity", - "phone": "838-540-3679", - "email": "bailey@cryptotegrity.com" - }, - { - "id": 9758, - "guid": "10343a95-3444-4c3e-87e2-1c179db72c51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Hailey Thomson", - "company": "Pericenta", - "phone": "800-452-2967", - "email": "hailey@pericenta.com" - }, - { - "id": 9759, - "guid": "eab0c35c-7be4-4a7f-b9cf-d43573cdd5a0", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Gianna Goldman", - "company": "Orthosoft", - "phone": "865-444-2540", - "email": "gianna@orthosoft.com" - }, - { - "id": 9760, - "guid": "a2c48055-c743-4cc6-9ebb-e65c033c0741", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Sophie Morrison", - "company": "Teraserv", - "phone": "815-510-3766", - "email": "sophie@teraserv.com" - }, - { - "id": 9761, - "guid": "6b93823a-75bd-44d6-9196-4668a450c5ab", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Autumn Gill", - "company": "Celgra", - "phone": "881-405-2512", - "email": "autumn@celgra.com" - }, - { - "id": 9762, - "guid": "12547552-d885-41ae-befb-a98c3f042523", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Savannah Molligan", - "company": "Tekcar", - "phone": "896-564-3819", - "email": "savannah@tekcar.com" - }, - { - "id": 9763, - "guid": "53b8fe96-9601-4a00-bbf9-849f0797a5f2", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Hannah Wesley", - "company": "Interliant", - "phone": "827-585-2657", - "email": "hannah@interliant.com" - }, - { - "id": 9764, - "guid": "f501a065-9b59-4b89-a5a4-f0c6f3558a3b", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Makayla Thorndike", - "company": "Westgate", - "phone": "881-456-2208", - "email": "makayla@westgate.com" - }, - { - "id": 9765, - "guid": "f23ac418-615a-4e13-8829-e0ff2ef07c10", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madelyn Wesley", - "company": "Teraserv", - "phone": "892-536-2209", - "email": "madelyn@teraserv.com" - }, - { - "id": 9766, - "guid": "960dab98-a1c9-4dfb-b50a-a3816b295be7", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Evelyn Stanley", - "company": "Multitiqua", - "phone": "897-472-3373", - "email": "evelyn@multitiqua.com" - }, - { - "id": 9767, - "guid": "30c041cc-2c44-47b7-b6e7-63767c918b69", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Victoria Youmans", - "company": "Multitiqua", - "phone": "800-468-2258", - "email": "victoria@multitiqua.com" - }, - { - "id": 9768, - "guid": "1c91408d-af70-4fd9-a877-2b8309598a2e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Katherine Thomson", - "company": "Allnet", - "phone": "839-532-3853", - "email": "katherine@allnet.com" - }, - { - "id": 9769, - "guid": "999f138f-3bec-4f77-9d15-988ee979d74a", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Hannah Mercer", - "company": "Allphysiche", - "phone": "814-419-2934", - "email": "hannah@allphysiche.com" - }, - { - "id": 9770, - "guid": "650a4485-c151-4b5e-a5f5-d513acc1dab3", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Sarah Oliver", - "company": "Raylog", - "phone": "843-578-3831", - "email": "sarah@raylog.com" - }, - { - "id": 9771, - "guid": "bacc800b-c413-4211-912c-b2d5bf019d76", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Isabella Chesterton", - "company": "Mescatron", - "phone": "814-567-2275", - "email": "isabella@mescatron.com" - }, - { - "id": 9772, - "guid": "8e7d54ab-8212-4837-b88b-0ccabd67cdb7", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Leah Bush", - "company": "iMedconik", - "phone": "855-451-3486", - "email": "leah@imedconik.com" - }, - { - "id": 9773, - "guid": "d6676149-fed8-49ba-9690-a4821d99f2dd", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Savannah Timmons", - "company": "Ameritron", - "phone": "817-462-2889", - "email": "savannah@ameritron.com" - }, - { - "id": 9774, - "guid": "e9516599-3c0b-4c45-954b-f68a7defe18c", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Madison Thorndike", - "company": "Titanigraf", - "phone": "859-576-2238", - "email": "madison@titanigraf.com" - }, - { - "id": 9775, - "guid": "d4e68e2c-d394-4a5f-9113-f2362aa647ba", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Murphy", - "company": "Infraique", - "phone": "848-474-2152", - "email": "alexa@infraique.com" - }, - { - "id": 9776, - "guid": "dccdc4b5-0512-400f-a461-c79b46f060ff", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sophia Wallace", - "company": "Unologic", - "phone": "839-473-3305", - "email": "sophia@unologic.com" - }, - { - "id": 9777, - "guid": "a484998a-378c-44b9-95d0-3c721f22d21b", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Emma Gilson", - "company": "Unconix", - "phone": "809-481-3669", - "email": "emma@unconix.com" - }, - { - "id": 9778, - "guid": "d956904f-7767-40ff-8ac1-1ad61cbb86d1", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madeline Chandter", - "company": "Netsystems", - "phone": "807-522-3005", - "email": "madeline@netsystems.com" - }, - { - "id": 9779, - "guid": "dd930aed-86ba-405d-9ca9-8de0fa43c207", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Audrey Waller", - "company": "Ventanium", - "phone": "859-416-3258", - "email": "audrey@ventanium.com" - }, - { - "id": 9780, - "guid": "f7e38607-6e09-4dd5-89c3-efb07eebdad3", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Jocelyn Owen", - "company": "Robotemplate", - "phone": "860-577-2202", - "email": "jocelyn@robotemplate.com" - }, - { - "id": 9781, - "guid": "5198def4-4cc3-44f4-a391-aa4cbd90fcb8", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Maria Charlson", - "company": "Superscope", - "phone": "867-454-2657", - "email": "maria@superscope.com" - }, - { - "id": 9782, - "guid": "73f83af7-6264-4cf7-8e35-d2a393b9db33", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mia Michaelson", - "company": "iMedconik", - "phone": "846-443-3316", - "email": "mia@imedconik.com" - }, - { - "id": 9783, - "guid": "796cf870-f352-457f-901c-a2cda4b60a5a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Madeline Miller", - "company": "Superscope", - "phone": "846-433-3615", - "email": "madeline@superscope.com" - }, - { - "id": 9784, - "guid": "c6618a05-7409-4901-8102-385ce75e2961", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Young", - "company": "Robotomic", - "phone": "827-443-3342", - "email": "sofia@robotomic.com" - }, - { - "id": 9785, - "guid": "8c702460-7cea-4dcc-909f-3706d5ed6900", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Mya Gate", - "company": "eSteganoergy", - "phone": "888-416-3241", - "email": "mya@esteganoergy.com" - }, - { - "id": 9786, - "guid": "ad6c0195-b5cb-4577-97fe-455e6c6d56ab", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Bella Miller", - "company": "Entcast", - "phone": "818-421-2836", - "email": "bella@entcast.com" - }, - { - "id": 9787, - "guid": "1eedb2b0-c66b-4a32-9404-9a8eb4ad5301", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Mariah Abramson", - "company": "Proline", - "phone": "824-561-3670", - "email": "mariah@proline.com" - }, - { - "id": 9788, - "guid": "5549d282-f53f-445a-88de-c84c1d414460", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Grace Carter", - "company": "Videobanc", - "phone": "859-490-2533", - "email": "grace@videobanc.com" - }, - { - "id": 9789, - "guid": "29e17a77-6a1e-4454-a7a0-51dcbcf2ea8a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Camila Thornton", - "company": "Polytheon", - "phone": "891-405-3440", - "email": "camila@polytheon.com" - }, - { - "id": 9790, - "guid": "755bd3e7-1a09-42f3-b118-b3d3bb7f0c50", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Serenity Haig", - "company": "Techtron", - "phone": "812-572-2339", - "email": "serenity@techtron.com" - }, - { - "id": 9791, - "guid": "7584a4fc-1d5a-4b5a-82fc-bfa7c3bce809", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jasmine Galbraith", - "company": "SysVenamerica", - "phone": "803-587-3736", - "email": "jasmine@sysvenamerica.com" - }, - { - "id": 9792, - "guid": "4f7f4c6d-6608-4b53-9db1-01c39d70e534", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Nevaeh Gate", - "company": "Conrama", - "phone": "837-527-2540", - "email": "nevaeh@conrama.com" - }, - { - "id": 9793, - "guid": "80d74514-70fa-4b62-89ac-90e35a2d9f35", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Claire Nathan", - "company": "Technogra", - "phone": "850-535-2619", - "email": "claire@technogra.com" - }, - { - "id": 9794, - "guid": "39c763a6-dd67-4f25-ae3e-f6a3ac197bd7", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Thornton", - "company": "OpKeycomm", - "phone": "855-510-2341", - "email": "ava@opkeycomm.com" - }, - { - "id": 9795, - "guid": "14073ccc-e195-4c77-98b1-34b42bf9ea53", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Bush", - "company": "Allnet", - "phone": "838-496-2927", - "email": "aubrey@allnet.com" - }, - { - "id": 9796, - "guid": "8c855597-8669-4e47-a6cb-78748245db9c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexa Oldman", - "company": "Videobanc", - "phone": "899-428-2618", - "email": "alexa@videobanc.com" - }, - { - "id": 9797, - "guid": "71d6be82-3e8d-4cc8-820d-f2e857176e54", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Charlotte Molligan", - "company": "US Omnigraphik", - "phone": "868-436-3010", - "email": "charlotte@us omnigraphik.com" - }, - { - "id": 9798, - "guid": "5b217be7-ed49-4b4d-b4a0-920d7b898181", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Mackenzie White", - "company": "Westgate", - "phone": "830-481-3122", - "email": "mackenzie@westgate.com" - }, - { - "id": 9799, - "guid": "3029977d-8637-4f17-b409-1ea08b7bcddb", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Kaitlyn Gilbert", - "company": "Techtron", - "phone": "861-441-2695", - "email": "kaitlyn@techtron.com" - }, - { - "id": 9800, - "guid": "c7b378dc-30a3-4147-bff0-70c7f7212e63", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Lauren Youmans", - "company": "Nanobanc", - "phone": "852-515-3325", - "email": "lauren@nanobanc.com" - }, - { - "id": 9801, - "guid": "c70275fd-ed3f-432f-ba0f-2ebac3dec0eb", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brooklyn Hancock", - "company": "Inridium", - "phone": "859-451-3225", - "email": "brooklyn@inridium.com" - }, - { - "id": 9802, - "guid": "ddae181e-89af-4036-9f69-184717070970", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Emily Brooks", - "company": "Hypervaco", - "phone": "893-573-3495", - "email": "emily@hypervaco.com" - }, - { - "id": 9803, - "guid": "5b59ea40-d75e-467d-8042-92d6456fa470", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Jocelyn Thomson", - "company": "Idmax", - "phone": "876-417-2112", - "email": "jocelyn@idmax.com" - }, - { - "id": 9804, - "guid": "6c340b64-f8c0-40cc-aa9c-e03d7ee05bb5", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Katelyn Oliver", - "company": "Indisco", - "phone": "871-432-3165", - "email": "katelyn@indisco.com" - }, - { - "id": 9805, - "guid": "39b52c26-f458-4ed3-b13c-df1ffd41be2e", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Melanie Webster", - "company": "Robocomm", - "phone": "834-595-2757", - "email": "melanie@robocomm.com" - }, - { - "id": 9806, - "guid": "16b287d6-86d4-4216-aa91-f332c6303620", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Emma Calhoun", - "company": "Technogra", - "phone": "875-568-2793", - "email": "emma@technogra.com" - }, - { - "id": 9807, - "guid": "12275193-20e5-4e1f-9a9d-65f23dcaf671", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Maya Morrison", - "company": "eEyetanic", - "phone": "872-576-2853", - "email": "maya@eeyetanic.com" - }, - { - "id": 9808, - "guid": "69cdb514-0a4c-45ff-886f-1a84ef9d8ae5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Maya Oswald", - "company": "Transtouch", - "phone": "801-420-2313", - "email": "maya@transtouch.com" - }, - { - "id": 9809, - "guid": "a63e7ba5-a794-4e00-9fdc-d9339c6522c0", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Natalie Walkman", - "company": "Pericenta", - "phone": "899-560-3968", - "email": "natalie@pericenta.com" - }, - { - "id": 9810, - "guid": "5d2cdb68-96db-4416-beac-07ea742391bc", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Claire Timmons", - "company": "RoboAerlogix", - "phone": "840-479-2340", - "email": "claire@roboaerlogix.com" - }, - { - "id": 9811, - "guid": "7665db69-837f-4654-9dbf-2517383f4a6a", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Savannah Watson", - "company": "iQualcar", - "phone": "871-433-3662", - "email": "savannah@iqualcar.com" - }, - { - "id": 9812, - "guid": "9ecf90ec-44d7-4ec4-9e7e-43d6aae463b5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Taylor Carey", - "company": "Dynarama", - "phone": "823-505-3193", - "email": "taylor@dynarama.com" - }, - { - "id": 9813, - "guid": "578e4a80-6bad-4379-b527-a316801c15eb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Sophia Carey", - "company": "InfoAirway", - "phone": "828-567-2341", - "email": "sophia@infoairway.com" - }, - { - "id": 9814, - "guid": "ea4aaa48-9ea7-4c6f-a761-96ccbe8dd87e", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kayla Winter", - "company": "Multitiqua", - "phone": "857-497-2679", - "email": "kayla@multitiqua.com" - }, - { - "id": 9815, - "guid": "cefdf625-5574-48d4-8b17-e67f7f757e0c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Morgan Young", - "company": "Infragraph", - "phone": "874-456-3538", - "email": "morgan@infragraph.com" - }, - { - "id": 9816, - "guid": "cdc5ebfb-f4ac-4417-bf10-77b71933425e", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sofia Wayne", - "company": "Westmedia", - "phone": "835-423-3670", - "email": "sofia@westmedia.com" - }, - { - "id": 9817, - "guid": "c8fdd51b-e907-478a-9f00-58f7ba5f96df", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Evelyn Ogden", - "company": "Conrama", - "phone": "843-494-3057", - "email": "evelyn@conrama.com" - }, - { - "id": 9818, - "guid": "fb3fe580-bb03-487e-a1fa-25c31e2881c4", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Gabrielle Abramson", - "company": "Raylog", - "phone": "895-509-2198", - "email": "gabrielle@raylog.com" - }, - { - "id": 9819, - "guid": "2b159042-94c0-447e-8f44-375515a91ad0", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Bush", - "company": "Jamrola", - "phone": "815-490-3100", - "email": "mya@jamrola.com" - }, - { - "id": 9820, - "guid": "b4b5c17f-ec23-4df6-8fe7-af3def96e33f", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Wayne", - "company": "Enlogia", - "phone": "805-531-2304", - "email": "kylie@enlogia.com" - }, - { - "id": 9821, - "guid": "29b99562-f466-4bd4-86b3-7e4fb87b3865", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Genesis Wood", - "company": "Titanirola", - "phone": "823-585-2156", - "email": "genesis@titanirola.com" - }, - { - "id": 9822, - "guid": "6c02d98b-a38e-4ad9-ad13-1712560930f4", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Zoe Gilson", - "company": "Proline", - "phone": "824-560-3073", - "email": "zoe@proline.com" - }, - { - "id": 9823, - "guid": "60a02a95-841d-4b58-b83e-d639e0e768a7", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Maya Day", - "company": "Keytheon", - "phone": "885-563-3890", - "email": "maya@keytheon.com" - }, - { - "id": 9824, - "guid": "527f2d51-e8a7-4657-b51d-574d2198447b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Makayla Creighton", - "company": "iMedconik", - "phone": "885-536-2557", - "email": "makayla@imedconik.com" - }, - { - "id": 9825, - "guid": "aa058d63-6c2c-4cd9-a5d7-c687c9a7ffcb", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Chloe Otis", - "company": "Qualserve", - "phone": "872-479-2617", - "email": "chloe@qualserve.com" - }, - { - "id": 9826, - "guid": "5d6d1715-161c-4c92-8f19-c96e575a31d5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Olivia Winter", - "company": "Cryptotemplate", - "phone": "827-424-2152", - "email": "olivia@cryptotemplate.com" - }, - { - "id": 9827, - "guid": "007f60cc-77d4-4e98-a189-76516b311fb3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Brooks", - "company": "Openserve", - "phone": "896-465-3761", - "email": "lily@openserve.com" - }, - { - "id": 9828, - "guid": "69955367-735d-4b61-8313-f0b72fc22c59", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Evelyn Sheldon", - "company": "Unconix", - "phone": "853-556-2600", - "email": "evelyn@unconix.com" - }, - { - "id": 9829, - "guid": "ee59f93f-b924-47fa-887a-f748eb0d00cd", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kayla Ward", - "company": "Anagraph", - "phone": "836-436-2213", - "email": "kayla@anagraph.com" - }, - { - "id": 9830, - "guid": "0141975d-f179-444f-97cf-e9b87a78d45b", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Anna Waller", - "company": "iQualcar", - "phone": "824-580-3540", - "email": "anna@iqualcar.com" - }, - { - "id": 9831, - "guid": "d9023478-9ac7-4821-aba4-7290975847f5", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Isabelle Waller", - "company": "US Infratouch", - "phone": "885-417-2493", - "email": "isabelle@us infratouch.com" - }, - { - "id": 9832, - "guid": "6df180f1-09e3-436a-9f2d-d17e7461d864", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Zoe Nelson", - "company": "Truegate", - "phone": "865-400-3407", - "email": "zoe@truegate.com" - }, - { - "id": 9833, - "guid": "74280344-f55a-43b4-b2f2-bf2d3a084b2a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Brianna Neal", - "company": "Dynarama", - "phone": "839-469-2452", - "email": "brianna@dynarama.com" - }, - { - "id": 9834, - "guid": "51faba49-0a63-46d8-ad89-59a73040728c", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maya Gerald", - "company": "Safeagra", - "phone": "868-503-3978", - "email": "maya@safeagra.com" - }, - { - "id": 9835, - "guid": "4a26fad1-3e4f-4f86-8342-73e3049fa908", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Wesley", - "company": "Orthosoft", - "phone": "816-408-2248", - "email": "isabelle@orthosoft.com" - }, - { - "id": 9836, - "guid": "10633b6e-507c-4275-9229-74ae6fc0cde4", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Avery Nash", - "company": "Unologic", - "phone": "848-479-3923", - "email": "avery@unologic.com" - }, - { - "id": 9837, - "guid": "742d85fa-b119-43a5-bcb3-65950faec539", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Julia Hancock", - "company": "Cryptotemplate", - "phone": "804-592-3977", - "email": "julia@cryptotemplate.com" - }, - { - "id": 9838, - "guid": "a1d2f499-a02f-42eb-8de5-3ad22e8cc5c7", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Andrea Nathan", - "company": "Unconix", - "phone": "848-471-3731", - "email": "andrea@unconix.com" - }, - { - "id": 9839, - "guid": "2fb3d688-e200-4248-b058-49846ecdd3da", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Abigail Bush", - "company": "Aluco", - "phone": "864-431-2283", - "email": "abigail@aluco.com" - }, - { - "id": 9840, - "guid": "4cc46b95-3f2e-486c-92d2-a39c7cd5617f", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Mya Turner", - "company": "Robocomm", - "phone": "838-444-2348", - "email": "mya@robocomm.com" - }, - { - "id": 9841, - "guid": "b27faea4-d9f6-4235-9a57-2f4cf6018c5c", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aaliyah Freeman", - "company": "OpKeycomm", - "phone": "831-438-3617", - "email": "aaliyah@opkeycomm.com" - }, - { - "id": 9842, - "guid": "61c9a92a-20a7-476e-a9df-d5318f2b6916", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Vanessa Oldridge", - "company": "Orthomedia", - "phone": "845-436-3548", - "email": "vanessa@orthomedia.com" - }, - { - "id": 9843, - "guid": "bb8dce99-9ab8-424a-b539-a88477bec78d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Kaitlyn Morrison", - "company": "InfoAirway", - "phone": "842-529-2793", - "email": "kaitlyn@infoairway.com" - }, - { - "id": 9844, - "guid": "dfe1a9fa-15c9-4c01-90ef-32f09a6d46ff", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Nevaeh Miers", - "company": "US Omnigraphik", - "phone": "894-403-3065", - "email": "nevaeh@us omnigraphik.com" - }, - { - "id": 9845, - "guid": "79adacd8-d5fb-4ee2-a78c-e3be2be2958b", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Angelina Clapton", - "company": "Netsystems", - "phone": "893-402-3912", - "email": "angelina@netsystems.com" - }, - { - "id": 9846, - "guid": "8ad105fd-a138-41c4-b1da-d20dfe2ed104", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Avery Conors", - "company": "Interliant", - "phone": "800-542-3479", - "email": "avery@interliant.com" - }, - { - "id": 9847, - "guid": "cad5a905-3600-40d3-8881-3c8502b2ef75", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Julia Ford", - "company": "Polytheon", - "phone": "835-468-2833", - "email": "julia@polytheon.com" - }, - { - "id": 9848, - "guid": "a588be80-2aee-4162-ac89-a786336169b1", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Lauren Hawkins", - "company": "Quintegrity", - "phone": "854-433-2149", - "email": "lauren@quintegrity.com" - }, - { - "id": 9849, - "guid": "b649fe74-9cd7-4a62-ac44-0411d04696a7", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Alexis Sheldon", - "company": "Enlogia", - "phone": "870-585-3223", - "email": "alexis@enlogia.com" - }, - { - "id": 9850, - "guid": "1d9df9d9-1cf1-4e0e-9f64-33ffe0740740", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kayla Youmans", - "company": "Videobanc", - "phone": "801-520-2734", - "email": "kayla@videobanc.com" - }, - { - "id": 9851, - "guid": "b42d3cde-3e29-4d50-adea-a6b382e07363", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Victoria Ward", - "company": "Openserve", - "phone": "874-431-2350", - "email": "victoria@openserve.com" - }, - { - "id": 9852, - "guid": "658e9b11-97c3-4f79-9bd7-ac3a4e9fed10", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Alexandra Haig", - "company": "OpKeycomm", - "phone": "881-594-2852", - "email": "alexandra@opkeycomm.com" - }, - { - "id": 9853, - "guid": "0d943fc1-b3d1-44b3-ab68-d03c93823aac", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Vaughan", - "company": "Turbomart", - "phone": "835-424-2126", - "email": "khloe@turbomart.com" - }, - { - "id": 9854, - "guid": "c04992bd-2727-4825-b2ff-46f1848019dc", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Alexandra Wayne", - "company": "Openserve", - "phone": "856-599-2394", - "email": "alexandra@openserve.com" - }, - { - "id": 9855, - "guid": "227aff4b-be25-47b2-abd7-866e6c7663f5", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Hailey Gilbert", - "company": "Pacwest", - "phone": "845-410-2442", - "email": "hailey@pacwest.com" - }, - { - "id": 9856, - "guid": "73786860-fc96-4d5c-b44e-2ee2475e8da3", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Gilmore", - "company": "Turbomart", - "phone": "840-574-2199", - "email": "molly@turbomart.com" - }, - { - "id": 9857, - "guid": "286b68eb-bcb3-4226-8f48-95530784d2d6", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Destiny Calhoun", - "company": "Aluco", - "phone": "879-482-2429", - "email": "destiny@aluco.com" - }, - { - "id": 9858, - "guid": "f582d61a-aadc-4965-abcb-c02c537d09bf", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Bailey Crossman", - "company": "Ventanium", - "phone": "811-560-2503", - "email": "bailey@ventanium.com" - }, - { - "id": 9859, - "guid": "7f69418d-66bb-4ac6-827c-52b867fa1799", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Eva Warren", - "company": "Ameritron", - "phone": "810-461-3166", - "email": "eva@ameritron.com" - }, - { - "id": 9860, - "guid": "a97d3618-58af-4b77-8466-db00f05008bb", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Savannah Waller", - "company": "Aprama", - "phone": "811-418-2854", - "email": "savannah@aprama.com" - }, - { - "id": 9861, - "guid": "f96cba5a-a10e-47c7-a4a8-5f54346f8721", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Kaitlyn Nelson", - "company": "Mescaridic", - "phone": "818-525-3372", - "email": "kaitlyn@mescaridic.com" - }, - { - "id": 9862, - "guid": "762ca8f6-6144-4cf8-b868-b8cb61231e04", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Alexandra Hancock", - "company": "Techtron", - "phone": "809-593-3597", - "email": "alexandra@techtron.com" - }, - { - "id": 9863, - "guid": "d17b6f35-626d-41ec-93b9-b587c1c9059f", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Lillian Clapton", - "company": "Netseco", - "phone": "833-518-3186", - "email": "lillian@netseco.com" - }, - { - "id": 9864, - "guid": "4764486b-cbf9-4cdc-a2d3-c2f68341c370", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Alexa Day", - "company": "Navivacs", - "phone": "871-511-2249", - "email": "alexa@navivacs.com" - }, - { - "id": 9865, - "guid": "543f3656-f7b3-445d-95dc-9f688dd5455c", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Mackenzie Gardner", - "company": "Airdyne", - "phone": "861-590-3748", - "email": "mackenzie@airdyne.com" - }, - { - "id": 9866, - "guid": "6a529774-0660-42fb-9878-688d89685d9d", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kaitlyn Ford", - "company": "Enlogia", - "phone": "860-404-3103", - "email": "kaitlyn@enlogia.com" - }, - { - "id": 9867, - "guid": "bd086f7c-8bb6-4e09-ba29-5a9aa76de973", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hannah Milton", - "company": "Ameritron", - "phone": "850-514-2412", - "email": "hannah@ameritron.com" - }, - { - "id": 9868, - "guid": "bd87fbe1-0308-40e8-a05a-bf53f70457ba", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Gabrielle Conors", - "company": "Keytheon", - "phone": "819-404-3981", - "email": "gabrielle@keytheon.com" - }, - { - "id": 9869, - "guid": "2258c7d9-8bb1-45af-833e-e29a3ec2f3da", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Addison Wallace", - "company": "Syssoft", - "phone": "847-403-2043", - "email": "addison@syssoft.com" - }, - { - "id": 9870, - "guid": "f3b5af4b-92ac-4027-a21f-761f3e72018a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Peyton Carter", - "company": "Genland", - "phone": "884-463-3143", - "email": "peyton@genland.com" - }, - { - "id": 9871, - "guid": "3e189888-be06-4b1d-9f4b-9577e0fbb357", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Kimberly Carter", - "company": "Pericenta", - "phone": "816-404-2442", - "email": "kimberly@pericenta.com" - }, - { - "id": 9872, - "guid": "56e37fd2-e573-4464-8d39-da35f260dda0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaylee Carter", - "company": "Netseco", - "phone": "846-566-2970", - "email": "kaylee@netseco.com" - }, - { - "id": 9873, - "guid": "69f49a52-54da-4371-9a45-a3461757d42c", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Sophie Hodges", - "company": "Vencom", - "phone": "871-403-3438", - "email": "sophie@vencom.com" - }, - { - "id": 9874, - "guid": "6c891f77-6306-49b1-b86a-dfe9b5c13299", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aubrey Haig", - "company": "iQualcar", - "phone": "865-526-3096", - "email": "aubrey@iqualcar.com" - }, - { - "id": 9875, - "guid": "443d9ec8-f825-4c1b-82f3-eb9727280bbc", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Alexis Oldman", - "company": "Robotemplate", - "phone": "811-560-2994", - "email": "alexis@robotemplate.com" - }, - { - "id": 9876, - "guid": "1ec3fabe-218e-41f3-8598-5f803c9b2cf0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Autumn Gilmore", - "company": "Anaframe", - "phone": "884-484-3898", - "email": "autumn@anaframe.com" - }, - { - "id": 9877, - "guid": "328539b5-b472-4578-96c2-61c1edb8b8d0", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Julia Wainwright", - "company": "Mescatron", - "phone": "840-491-2586", - "email": "julia@mescatron.com" - }, - { - "id": 9878, - "guid": "c0205808-7757-4001-b406-517e5a1d92b1", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Madison Hamphrey", - "company": "Compuamerica", - "phone": "810-458-3927", - "email": "madison@compuamerica.com" - }, - { - "id": 9879, - "guid": "c9497b09-3711-43e7-9430-8700f5f43b3c", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Chloe Galbraith", - "company": "Truetomic", - "phone": "838-481-3292", - "email": "chloe@truetomic.com" - }, - { - "id": 9880, - "guid": "9db43c95-a7db-4abf-be4f-ca1bfdfc1c2c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Addison Ward", - "company": "Westmedia", - "phone": "824-412-2357", - "email": "addison@westmedia.com" - }, - { - "id": 9881, - "guid": "53cd720d-6020-44f4-8216-03d861606b6d", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Kaylee Charlson", - "company": "Fibrotouch", - "phone": "816-412-3879", - "email": "kaylee@fibrotouch.com" - }, - { - "id": 9882, - "guid": "661cc35e-3207-4119-90af-1e20ca3c5a81", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Sydney Nathan", - "company": "iEnland", - "phone": "835-555-3579", - "email": "sydney@ienland.com" - }, - { - "id": 9883, - "guid": "c666f4ad-285c-4381-88cd-eed9a0dbc115", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Eva Gate", - "company": "Orthosoft", - "phone": "878-417-2342", - "email": "eva@orthosoft.com" - }, - { - "id": 9884, - "guid": "e5a36dd9-288c-4bc4-8543-2b325fee335d", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Genesis Hamphrey", - "company": "Videobanc", - "phone": "884-540-2167", - "email": "genesis@videobanc.com" - }, - { - "id": 9885, - "guid": "c819f5b3-778b-4585-b509-98aeb208f565", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Julia Murphy", - "company": "Interliant", - "phone": "806-478-2608", - "email": "julia@interliant.com" - }, - { - "id": 9886, - "guid": "2ef85973-819b-4507-8035-97f4569c4e02", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Ashley Wallace", - "company": "Ameritron", - "phone": "858-417-3423", - "email": "ashley@ameritron.com" - }, - { - "id": 9887, - "guid": "2b310ea9-c170-4d86-86f8-051ec4cccc94", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Kayla Hodges", - "company": "iEnland", - "phone": "897-473-2558", - "email": "kayla@ienland.com" - }, - { - "id": 9888, - "guid": "e67fa941-1dbb-4a16-9e32-c79ddaa72bac", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Taylor Wainwright", - "company": "Netseco", - "phone": "853-523-3172", - "email": "taylor@netseco.com" - }, - { - "id": 9889, - "guid": "28fb7bfc-40a6-4bfa-a23e-3bbfebf4cada", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Chloe Ford", - "company": "iOptystix", - "phone": "803-534-2812", - "email": "chloe@ioptystix.com" - }, - { - "id": 9890, - "guid": "22365f78-213a-49be-8a7e-6ee773bf7b2c", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Mia Hamphrey", - "company": "Infragraph", - "phone": "824-405-3568", - "email": "mia@infragraph.com" - }, - { - "id": 9891, - "guid": "811e3821-8d10-44a6-854c-75f0a890a6d6", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Kylie Gilmore", - "company": "iMedconik", - "phone": "879-430-3709", - "email": "kylie@imedconik.com" - }, - { - "id": 9892, - "guid": "7b917876-ca48-4b02-af03-191102e3238e", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Trinity Hodges", - "company": "Fibroserve", - "phone": "853-476-2124", - "email": "trinity@fibroserve.com" - }, - { - "id": 9893, - "guid": "0b9c5d5d-27d9-4cda-9db1-492759070e92", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Amelia Gustman", - "company": "Transtouch", - "phone": "855-406-2679", - "email": "amelia@transtouch.com" - }, - { - "id": 9894, - "guid": "647385f2-ec94-40bd-8df6-98da3904bf42", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Grace Wesley", - "company": "Mescatron", - "phone": "877-415-2519", - "email": "grace@mescatron.com" - }, - { - "id": 9895, - "guid": "7c1dd05c-6f6a-463f-b1bf-b70a884d711c", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Kaylee Bush", - "company": "iSkyvaco", - "phone": "804-591-3104", - "email": "kaylee@iskyvaco.com" - }, - { - "id": 9896, - "guid": "ee179327-7465-47e6-88e9-860825514bfb", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Amelia Hancock", - "company": "Truetomic", - "phone": "894-476-3554", - "email": "amelia@truetomic.com" - }, - { - "id": 9897, - "guid": "a789875a-7256-41ef-90b5-e2efd3966c3d", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Caroline Sherlock", - "company": "Westgate", - "phone": "890-566-3275", - "email": "caroline@westgate.com" - }, - { - "id": 9898, - "guid": "01cbf650-e04a-48d3-85dd-c87133752e74", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mya Brown", - "company": "Robotomic", - "phone": "866-597-2897", - "email": "mya@robotomic.com" - }, - { - "id": 9899, - "guid": "2d624312-0a60-4419-98c8-548eb041866c", - "picture": "http://placehold.it/32x32", - "age": 36, - "name": "Brianna Thomson", - "company": "Sontopia", - "phone": "861-578-3857", - "email": "brianna@sontopia.com" - }, - { - "id": 9900, - "guid": "ca6e7450-559b-4d06-8b74-9f622e2a561e", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Anna Freeman", - "company": "eSteganoergy", - "phone": "807-406-3664", - "email": "anna@esteganoergy.com" - }, - { - "id": 9901, - "guid": "0fe551a0-ad39-435b-8c3e-0f17e1cc0d3b", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Goodman", - "company": "Technogra", - "phone": "804-535-2049", - "email": "sarah@technogra.com" - }, - { - "id": 9902, - "guid": "70d95451-7030-4937-af75-68185fe9f74b", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Katelyn Gill", - "company": "Ameritron", - "phone": "882-536-3733", - "email": "katelyn@ameritron.com" - }, - { - "id": 9903, - "guid": "b54a616c-89bb-4be5-b443-296d61f565c1", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Valeria Gibbs", - "company": "Compuamerica", - "phone": "846-489-3724", - "email": "valeria@compuamerica.com" - }, - { - "id": 9904, - "guid": "d513ca35-6dd4-4d63-aab4-11e7ace7bda9", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Audrey Sherlock", - "company": "US Omnigraphik", - "phone": "873-473-3815", - "email": "audrey@us omnigraphik.com" - }, - { - "id": 9905, - "guid": "2c56f2b9-6c09-422f-b346-63f179fabf52", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Samantha Nelson", - "company": "Truetomic", - "phone": "809-413-2874", - "email": "samantha@truetomic.com" - }, - { - "id": 9906, - "guid": "485a5f2d-e74e-4bb9-ab6d-c05f2710bea4", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Molly Hardman", - "company": "Allnet", - "phone": "826-518-3192", - "email": "molly@allnet.com" - }, - { - "id": 9907, - "guid": "23e51b91-7a83-4c48-8228-eb562e6dc92f", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Madison Otis", - "company": "Titanirola", - "phone": "848-494-3269", - "email": "madison@titanirola.com" - }, - { - "id": 9908, - "guid": "c3b2c4c8-da62-4ed3-8e84-32374c7dd265", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Ashley Walkman", - "company": "Idmax", - "phone": "859-477-2123", - "email": "ashley@idmax.com" - }, - { - "id": 9909, - "guid": "1cde343e-8354-497b-bf2a-40e68c384897", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Mya Gilson", - "company": "Robocomm", - "phone": "894-527-2193", - "email": "mya@robocomm.com" - }, - { - "id": 9910, - "guid": "72bdfaa1-5981-4d59-9783-74c2613d5f9e", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Madison Campbell", - "company": "InfoAirway", - "phone": "820-441-3529", - "email": "madison@infoairway.com" - }, - { - "id": 9911, - "guid": "8b8cc378-b05e-4644-875e-2fae9daae70f", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Melanie Hamphrey", - "company": "SysVenamerica", - "phone": "824-589-3506", - "email": "melanie@sysvenamerica.com" - }, - { - "id": 9912, - "guid": "065ded78-81cc-49a2-b7ae-9bda3ad8091d", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Maria Molligan", - "company": "Celgra", - "phone": "811-496-2753", - "email": "maria@celgra.com" - }, - { - "id": 9913, - "guid": "76fb32eb-61ef-433b-b3da-5b682ea31b3b", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Serenity Calhoun", - "company": "Polytheon", - "phone": "881-574-2183", - "email": "serenity@polytheon.com" - }, - { - "id": 9914, - "guid": "5d6ff175-f83d-4546-9eda-eb68d1c93bf3", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Katelyn Croftoon", - "company": "Infraique", - "phone": "891-443-2174", - "email": "katelyn@infraique.com" - }, - { - "id": 9915, - "guid": "80929aee-e336-4b92-befe-cfb6ba422531", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Nevaeh Wayne", - "company": "Infraique", - "phone": "874-505-2004", - "email": "nevaeh@infraique.com" - }, - { - "id": 9916, - "guid": "44c5a0a6-8b79-43a6-9d74-307b3a42555b", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Savannah Neal", - "company": "Hypervaco", - "phone": "843-543-2258", - "email": "savannah@hypervaco.com" - }, - { - "id": 9917, - "guid": "60109d55-c324-4b64-a399-1290fbc6976f", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Sophie Oliver", - "company": "Ventanium", - "phone": "837-440-3030", - "email": "sophie@ventanium.com" - }, - { - "id": 9918, - "guid": "fd624950-8b00-4fae-bfbe-8677914becb8", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Morgan Mercer", - "company": "Gigaura", - "phone": "879-600-2991", - "email": "morgan@gigaura.com" - }, - { - "id": 9919, - "guid": "786d7d70-7f86-4aba-aa40-720ad5d313df", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Mya Vaughan", - "company": "Dynarama", - "phone": "857-435-2797", - "email": "mya@dynarama.com" - }, - { - "id": 9920, - "guid": "538aa817-f784-415b-b35f-3fec08639611", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Sofia Creighton", - "company": "Vencom", - "phone": "876-412-2140", - "email": "sofia@vencom.com" - }, - { - "id": 9921, - "guid": "42213da9-5bd4-4e42-929a-5e8484eda44f", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Mia Gustman", - "company": "Titanigraf", - "phone": "852-485-3079", - "email": "mia@titanigraf.com" - }, - { - "id": 9922, - "guid": "1c3fec75-6a0e-418f-942d-efe9e2f72c82", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Angelina Vance", - "company": "iEnland", - "phone": "867-547-3959", - "email": "angelina@ienland.com" - }, - { - "id": 9923, - "guid": "3ca16555-239c-42ce-a768-089f04f72d51", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Ava Thorndike", - "company": "Truegate", - "phone": "892-527-2627", - "email": "ava@truegate.com" - }, - { - "id": 9924, - "guid": "a028df80-f0ce-45cd-b194-0d546e62bebc", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Claire Ward", - "company": "Sontopia", - "phone": "863-419-3401", - "email": "claire@sontopia.com" - }, - { - "id": 9925, - "guid": "44f6905f-3d24-4e68-a6f4-fdbc29db07f9", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Brianna Conors", - "company": "Teknoplexon", - "phone": "813-528-2212", - "email": "brianna@teknoplexon.com" - }, - { - "id": 9926, - "guid": "c16f48c5-b060-480a-b794-e2507af55819", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Aaliyah Owen", - "company": "Transtouch", - "phone": "882-519-3936", - "email": "aaliyah@transtouch.com" - }, - { - "id": 9927, - "guid": "56a9d19e-a44f-4553-b6f8-ed91fbd2e039", - "picture": "http://placehold.it/32x32", - "age": 22, - "name": "Lily Oliver", - "company": "Skydata", - "phone": "879-582-2797", - "email": "lily@skydata.com" - }, - { - "id": 9928, - "guid": "51cb648f-0784-4f24-8737-a61646881863", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Addison Chesterton", - "company": "Pacwest", - "phone": "892-582-3498", - "email": "addison@pacwest.com" - }, - { - "id": 9929, - "guid": "f40caea6-9b71-4e6e-8384-f8250f29ba84", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Madeline Ward", - "company": "Westtomik", - "phone": "894-504-2539", - "email": "madeline@westtomik.com" - }, - { - "id": 9930, - "guid": "d9f60091-7b87-43b1-878a-ece7d8d5187b", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Oswald", - "company": "Orthosoft", - "phone": "893-553-2341", - "email": "mackenzie@orthosoft.com" - }, - { - "id": 9931, - "guid": "27e8ec92-969e-433c-9150-04b2200f73d0", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Gabrielle Murphy", - "company": "Hypervaco", - "phone": "820-455-2560", - "email": "gabrielle@hypervaco.com" - }, - { - "id": 9932, - "guid": "f239e1b4-f495-4cc5-9eaf-b80c32d779a1", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Hailey Ford", - "company": "Netseco", - "phone": "801-585-2442", - "email": "hailey@netseco.com" - }, - { - "id": 9933, - "guid": "59ad0906-139f-4791-a86d-b6af1b967c92", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Kaitlyn Abramson", - "company": "Robocomm", - "phone": "895-472-3237", - "email": "kaitlyn@robocomm.com" - }, - { - "id": 9934, - "guid": "195843be-d25f-46d9-a55a-3e5a731c924e", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Sophia WifKinson", - "company": "Entcast", - "phone": "892-431-3870", - "email": "sophia@entcast.com" - }, - { - "id": 9935, - "guid": "9cb59e21-9fd8-4661-a4af-6d401a0358c6", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Hannah Timmons", - "company": "Airdyne", - "phone": "810-488-2542", - "email": "hannah@airdyne.com" - }, - { - "id": 9936, - "guid": "c3acaf8a-a481-4463-a311-be6f4d5b7c8e", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Rachel Carrington", - "company": "Netsystems", - "phone": "853-549-2669", - "email": "rachel@netsystems.com" - }, - { - "id": 9937, - "guid": "fdc1f3c1-8ec0-4767-83dd-ed1d12c1ea36", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Amelia Gilmore", - "company": "Conrama", - "phone": "833-526-3384", - "email": "amelia@conrama.com" - }, - { - "id": 9938, - "guid": "152ed4e4-ebcd-4784-9f78-3ec980373b0a", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Isabelle Daniels", - "company": "Anagraph", - "phone": "839-483-2265", - "email": "isabelle@anagraph.com" - }, - { - "id": 9939, - "guid": "e1e0debb-5e01-4ef4-aef4-38de2e2ce45d", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Peyton Osborne", - "company": "Indisco", - "phone": "814-556-2656", - "email": "peyton@indisco.com" - }, - { - "id": 9940, - "guid": "f9330485-ceaf-49de-9717-f13f115bc00f", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Olivia Hamphrey", - "company": "Aluco", - "phone": "898-566-2706", - "email": "olivia@aluco.com" - }, - { - "id": 9941, - "guid": "53408f64-8960-4785-bbfe-f58cc3394fc1", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Eva Wayne", - "company": "Truetomic", - "phone": "820-455-2892", - "email": "eva@truetomic.com" - }, - { - "id": 9942, - "guid": "587adc41-47e8-4f48-a381-877ce7295b03", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Maya Milton", - "company": "Allphysiche", - "phone": "818-480-3944", - "email": "maya@allphysiche.com" - }, - { - "id": 9943, - "guid": "095fe5ca-ecd1-4a3f-b8d5-e4bbabac7eba", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Victoria Cook", - "company": "Cryptotegrity", - "phone": "889-482-2152", - "email": "victoria@cryptotegrity.com" - }, - { - "id": 9944, - "guid": "f85595ee-2309-4a89-8008-ad88c9ff47a3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Faith Miln", - "company": "OpKeycomm", - "phone": "829-556-3593", - "email": "faith@opkeycomm.com" - }, - { - "id": 9945, - "guid": "5e230c57-fd04-438a-bdb4-33c10de44949", - "picture": "http://placehold.it/32x32", - "age": 26, - "name": "Ashley Brown", - "company": "Netsystems", - "phone": "870-524-2471", - "email": "ashley@netsystems.com" - }, - { - "id": 9946, - "guid": "6d71a154-6499-42f1-a9df-36a5a247f84e", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Payton Ogden", - "company": "Dynarama", - "phone": "834-523-3792", - "email": "payton@dynarama.com" - }, - { - "id": 9947, - "guid": "fa11d4db-1b0f-46b6-bbc8-22303efc81b0", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Lily Michaelson", - "company": "Vencom", - "phone": "803-554-2206", - "email": "lily@vencom.com" - }, - { - "id": 9948, - "guid": "5f2fdc6e-effd-44c4-aa16-c49a134b1aee", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Sarah Miln", - "company": "iSkyvaco", - "phone": "806-475-2362", - "email": "sarah@iskyvaco.com" - }, - { - "id": 9949, - "guid": "a606dba0-bf87-4c87-9fd7-9c635a4dcb24", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Isabella Thomson", - "company": "Titanirola", - "phone": "877-499-3840", - "email": "isabella@titanirola.com" - }, - { - "id": 9950, - "guid": "c1102f1d-34fa-4869-8356-11470626fd46", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Isabella Murphy", - "company": "Safetrust", - "phone": "850-434-2539", - "email": "isabella@safetrust.com" - }, - { - "id": 9951, - "guid": "1d5d550e-d3e4-4c9f-993e-7779eafcb52e", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Avery Carrington", - "company": "Infraique", - "phone": "822-487-3216", - "email": "avery@infraique.com" - }, - { - "id": 9952, - "guid": "d170dd0e-d1c6-4927-b803-c04f014a157a", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Elizabeth Molligan", - "company": "Allphysiche", - "phone": "885-570-2293", - "email": "elizabeth@allphysiche.com" - }, - { - "id": 9953, - "guid": "f3101e83-ce8e-4a1e-8c0c-ae25e68b8be5", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Aubrey Chesterton", - "company": "Celgra", - "phone": "845-449-3971", - "email": "aubrey@celgra.com" - }, - { - "id": 9954, - "guid": "ad8cb734-5599-46be-9d62-93f7c0020a2f", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Kaitlyn Bush", - "company": "iMedconik", - "phone": "824-413-2933", - "email": "kaitlyn@imedconik.com" - }, - { - "id": 9955, - "guid": "029b9d90-f923-44fa-9fb4-9f0ab7aa200d", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Olivia Higgins", - "company": "iOptystix", - "phone": "833-450-2557", - "email": "olivia@ioptystix.com" - }, - { - "id": 9956, - "guid": "a02ff2ac-4052-4b72-8077-8dbfffc9b2c5", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Elizabeth Chapman", - "company": "Tekcar", - "phone": "823-425-2737", - "email": "elizabeth@tekcar.com" - }, - { - "id": 9957, - "guid": "eda6953e-41f9-40a4-bf35-84c9b300fc34", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Aubrey Cook", - "company": "US Omnigraphik", - "phone": "878-533-2526", - "email": "aubrey@us omnigraphik.com" - }, - { - "id": 9958, - "guid": "22f3b266-8b91-420c-a865-468012c8e557", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Valeria Gill", - "company": "Unconix", - "phone": "845-493-2043", - "email": "valeria@unconix.com" - }, - { - "id": 9959, - "guid": "0718745e-dc1c-4a00-bb12-7b94e2864bd3", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Lily Gilson", - "company": "Cryptotemplate", - "phone": "832-411-2078", - "email": "lily@cryptotemplate.com" - }, - { - "id": 9960, - "guid": "0c2a3ab8-92e7-493f-9f2d-fba1a5044a66", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Rachel Ward", - "company": "Fibrotopia", - "phone": "879-528-2335", - "email": "rachel@fibrotopia.com" - }, - { - "id": 9961, - "guid": "c3a8d485-a2ae-4533-b981-08b64dd78a67", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Alexandra WifKinson", - "company": "Polytheon", - "phone": "821-511-2720", - "email": "alexandra@polytheon.com" - }, - { - "id": 9962, - "guid": "b274e275-8798-4ec5-ba04-7df87d9fe0db", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Abigail Winter", - "company": "RoboAerlogix", - "phone": "813-534-3390", - "email": "abigail@roboaerlogix.com" - }, - { - "id": 9963, - "guid": "eed8ca6e-736e-4d87-afeb-9c0afd373d24", - "picture": "http://placehold.it/32x32", - "age": 24, - "name": "Ariana Oldridge", - "company": "Keytheon", - "phone": "862-453-3635", - "email": "ariana@keytheon.com" - }, - { - "id": 9964, - "guid": "c0c3c4b2-baf8-434a-b409-62cf2b22301d", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Autumn Turner", - "company": "Ventanium", - "phone": "812-526-3323", - "email": "autumn@ventanium.com" - }, - { - "id": 9965, - "guid": "228a4600-89fe-49da-96c9-344e2e0f1902", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Emma Stanley", - "company": "Truetomic", - "phone": "892-541-2799", - "email": "emma@truetomic.com" - }, - { - "id": 9966, - "guid": "c7540a3c-bdf5-4864-9817-39a941a9253c", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Natalie Young", - "company": "Multitiqua", - "phone": "865-484-2664", - "email": "natalie@multitiqua.com" - }, - { - "id": 9967, - "guid": "9164a583-2618-4f5a-ba4b-fc05328343c0", - "picture": "http://placehold.it/32x32", - "age": 20, - "name": "Layla Higgins", - "company": "Cryptotemplate", - "phone": "839-508-3713", - "email": "layla@cryptotemplate.com" - }, - { - "id": 9968, - "guid": "cf0c9a82-b137-4d4c-a7fd-aaea210a5562", - "picture": "http://placehold.it/32x32", - "age": 33, - "name": "Alyssa Young", - "company": "Aprama", - "phone": "815-459-3900", - "email": "alyssa@aprama.com" - }, - { - "id": 9969, - "guid": "b942dff8-2e30-4a2b-a1b3-a354770d63de", - "picture": "http://placehold.it/32x32", - "age": 27, - "name": "Zoe Mercer", - "company": "Robocomm", - "phone": "843-424-3111", - "email": "zoe@robocomm.com" - }, - { - "id": 9970, - "guid": "f27693d8-300d-4992-89c1-7ff6ca7d35b3", - "picture": "http://placehold.it/32x32", - "age": 40, - "name": "Khloe Brooks", - "company": "Skydata", - "phone": "814-541-2140", - "email": "khloe@skydata.com" - }, - { - "id": 9971, - "guid": "00b3b3ce-ecb2-46d4-85c1-52428833827a", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Payton Youmans", - "company": "Hypervaco", - "phone": "809-542-2060", - "email": "payton@hypervaco.com" - }, - { - "id": 9972, - "guid": "4e0559c2-b5ed-479c-a520-4d1639588c22", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Alexis Gustman", - "company": "Titanirola", - "phone": "817-572-2590", - "email": "alexis@titanirola.com" - }, - { - "id": 9973, - "guid": "ae14bb75-4d57-4041-9391-019837d235aa", - "picture": "http://placehold.it/32x32", - "age": 23, - "name": "Sarah Youmans", - "company": "Fibrotopia", - "phone": "843-580-2593", - "email": "sarah@fibrotopia.com" - }, - { - "id": 9974, - "guid": "ef34213d-66a5-4851-ad36-2cae7de0a037", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Lily Calhoun", - "company": "Genland", - "phone": "821-558-2103", - "email": "lily@genland.com" - }, - { - "id": 9975, - "guid": "989955d0-c142-4f56-8c38-f8b7378ce53a", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Khloe Gilson", - "company": "Titanirola", - "phone": "864-579-2174", - "email": "khloe@titanirola.com" - }, - { - "id": 9976, - "guid": "b6de3e1f-b8a4-40c5-801f-d5b2d5c629b1", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sofia Nash", - "company": "iEnland", - "phone": "802-598-3359", - "email": "sofia@ienland.com" - }, - { - "id": 9977, - "guid": "8175374f-ab14-4117-a53a-31374b438c96", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Leah Conors", - "company": "Teraserv", - "phone": "878-402-3468", - "email": "leah@teraserv.com" - }, - { - "id": 9978, - "guid": "9776ac92-a7b8-46de-b27b-13ade119a2ff", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Samantha Miln", - "company": "Generola", - "phone": "857-456-2643", - "email": "samantha@generola.com" - }, - { - "id": 9979, - "guid": "2ddfa94d-97b6-48c5-ba5d-e9609350652f", - "picture": "http://placehold.it/32x32", - "age": 25, - "name": "Savannah Cramer", - "company": "Westtomik", - "phone": "884-462-3504", - "email": "savannah@westtomik.com" - }, - { - "id": 9980, - "guid": "dd6b38f3-de17-4527-b945-73233322a567", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Serenity Miln", - "company": "Superscope", - "phone": "811-464-3207", - "email": "serenity@superscope.com" - }, - { - "id": 9981, - "guid": "d72c0940-5c11-40db-9e90-045a62aafbdb", - "picture": "http://placehold.it/32x32", - "age": 30, - "name": "Madelyn Turner", - "company": "US Omnigraphik", - "phone": "849-553-2409", - "email": "madelyn@us omnigraphik.com" - }, - { - "id": 9982, - "guid": "69969bc7-8e47-46e5-a92c-4dd3a7fa2849", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Lauren Oldman", - "company": "Infraique", - "phone": "871-413-2220", - "email": "lauren@infraique.com" - }, - { - "id": 9983, - "guid": "aadfe8a1-7c52-47cc-9f92-48508f1ad2e4", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Natalie Sheldon", - "company": "iOptystix", - "phone": "833-478-3454", - "email": "natalie@ioptystix.com" - }, - { - "id": 9984, - "guid": "b3c608d0-eef8-423b-89e8-fafcbff60133", - "picture": "http://placehold.it/32x32", - "age": 37, - "name": "Molly Ford", - "company": "Hypervaco", - "phone": "803-549-2265", - "email": "molly@hypervaco.com" - }, - { - "id": 9985, - "guid": "8ba071e2-4b7f-4a9e-937c-a81436d612a5", - "picture": "http://placehold.it/32x32", - "age": 39, - "name": "Faith Calhoun", - "company": "Inridium", - "phone": "847-575-3770", - "email": "faith@inridium.com" - }, - { - "id": 9986, - "guid": "8b83d9a6-6fa1-4d13-8387-dad421dd3049", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Emily Sherlock", - "company": "Westmedia", - "phone": "818-558-2415", - "email": "emily@westmedia.com" - }, - { - "id": 9987, - "guid": "a2465842-db94-4d2a-bd34-1911f4de4af5", - "picture": "http://placehold.it/32x32", - "age": 32, - "name": "Elizabeth Hancock", - "company": "RoboAerlogix", - "phone": "881-549-2181", - "email": "elizabeth@roboaerlogix.com" - }, - { - "id": 9988, - "guid": "211ffa5d-9610-4e1c-9049-6e0d39cf6525", - "picture": "http://placehold.it/32x32", - "age": 21, - "name": "Anna Conors", - "company": "Technogra", - "phone": "824-599-2100", - "email": "anna@technogra.com" - }, - { - "id": 9989, - "guid": "9f38e5c5-86ab-44be-ae02-aca51b27974a", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Maria White", - "company": "eSteganoergy", - "phone": "855-461-2011", - "email": "maria@esteganoergy.com" - }, - { - "id": 9990, - "guid": "2c6e6847-38bf-4646-9dec-d5d7e474eb98", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Mackenzie Mercer", - "company": "Mescatron", - "phone": "839-486-3459", - "email": "mackenzie@mescatron.com" - }, - { - "id": 9991, - "guid": "81d77f63-f908-4f4c-a69d-a0d670c4ea79", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Layla Gilbert", - "company": "OpKeycomm", - "phone": "807-422-2141", - "email": "layla@opkeycomm.com" - }, - { - "id": 9992, - "guid": "df2cda1d-4ca9-4035-9961-9a6962465b70", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Sofia Sherlock", - "company": "Ventanium", - "phone": "874-424-3867", - "email": "sofia@ventanium.com" - }, - { - "id": 9993, - "guid": "95609191-2c52-4e06-b5b1-fb80cc3a7cfe", - "picture": "http://placehold.it/32x32", - "age": 34, - "name": "Aubrey Crossman", - "company": "Airdyne", - "phone": "806-405-3107", - "email": "aubrey@airdyne.com" - }, - { - "id": 9994, - "guid": "c0b75fa4-f19e-493a-8b13-93256fe3da20", - "picture": "http://placehold.it/32x32", - "age": 28, - "name": "Maria Molligan", - "company": "Indisco", - "phone": "861-531-2351", - "email": "maria@indisco.com" - }, - { - "id": 9995, - "guid": "65fcae57-6040-4e73-985f-104a5d5f4cc6", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Faith Gate", - "company": "Titanigraf", - "phone": "801-539-2772", - "email": "faith@titanigraf.com" - }, - { - "id": 9996, - "guid": "84517666-06af-4f43-96e1-ab9c249f69f1", - "picture": "http://placehold.it/32x32", - "age": 38, - "name": "Alexa Gardner", - "company": "Truetomic", - "phone": "834-429-3698", - "email": "alexa@truetomic.com" - }, - { - "id": 9997, - "guid": "c2dbfbcb-c6a0-40a4-bc8e-59f5b9c3f2ee", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Kimberly Goodman", - "company": "Orthomedia", - "phone": "853-469-2640", - "email": "kimberly@orthomedia.com" - }, - { - "id": 9998, - "guid": "64e7a5c7-f9a9-497e-af8d-18efa50ac6e5", - "picture": "http://placehold.it/32x32", - "age": 35, - "name": "Sarah Walkman", - "company": "Robotemplate", - "phone": "813-467-3895", - "email": "sarah@robotemplate.com" - }, - { - "id": 9999, - "guid": "25a658ae-86d1-4de7-af75-8b560d564774", - "picture": "http://placehold.it/32x32", - "age": 31, - "name": "Brianna Osborne", - "company": "Teraserv", - "phone": "853-568-2057", - "email": "brianna@teraserv.com" - }, - { - "id": 10000, - "guid": "71284fec-690c-48a2-903b-5a4b44ed1349", - "picture": "http://placehold.it/32x32", - "age": 29, - "name": "Faith Gustman", - "company": "Venconix", - "phone": "875-470-2265", - "email": "faith@venconix.com" - } - ] -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/libs/ascentFrom.js b/truebit-implementation/node_modules/oboe/test/libs/ascentFrom.js deleted file mode 100644 index 9429784e..00000000 --- a/truebit-implementation/node_modules/oboe/test/libs/ascentFrom.js +++ /dev/null @@ -1,29 +0,0 @@ -/** pass me an object with only one child at each level and will return a nodeStack - * and pathStack which describes the only possibly descent top-to-bottom - * - * @param {Object} description eg { a: {foo: {a:'target'}}} - */ -function ascentFrom( description ) { - - function onlyMapping(obj) { - // this for won't loop but it is the most obvious way to extract a - // key/value pair where the key is unknown - for( var i in obj ) { - return {key:i, node:obj[i]}; - } - } - - var ascent = list({key:ROOT_PATH, node:description}), - curDesc = description; - - while( typeof curDesc == 'object' ) { - - var mapping = onlyMapping(curDesc); - - curDesc = mapping.node; - - ascent = cons( mapping, ascent ); - } - - return ascent; -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/oboe/test/libs/calledLikeMatcher.js b/truebit-implementation/node_modules/oboe/test/libs/calledLikeMatcher.js deleted file mode 100644 index ef90366e..00000000 --- a/truebit-implementation/node_modules/oboe/test/libs/calledLikeMatcher.js +++ /dev/null @@ -1,48 +0,0 @@ -var calledLikeMatcher = { - /* Under Jasmine's toHaveBeenCalledLike, subject(foo, undefined) - is considered different from subject(foo). This is slightly - looser and considers those equal. - */ - toHaveBeenCalledLike:function(/*expectedArgs*/){ - var expectedArgs = Array.prototype.slice.apply(arguments); - var actualCalls = this.actual.calls; - - if( !actualCalls || actualCalls.length == 0 ){ - this.message = function(){ - return "Expected spy " + this.actual.identity + " to have been called like " + jasmine.pp(expectedArgs) + " but it has never been called." - }; - return false; - } - - var equals = this.env.equals_.bind(this.env); - - this.message = function() { - var invertedMessage = "Expected spy " + this.actual.identity + " not to have been called like " + jasmine.pp(expectedArgs) + " but it was."; - var positiveMessage = ""; - if (this.actual.callCount === 0) { - positiveMessage = "Expected spy " + this.actual.identity + " to have been called like " + jasmine.pp(expectedArgs) + " but it was never called."; - } else { - positiveMessage = "Expected spy " + this.actual.identity + " to have been called like " + jasmine.pp(expectedArgs) + " but actual calls were " + jasmine.pp(this.actual.argsForCall).replace(/^\[ | \]$/g, '') - } - return [positiveMessage, invertedMessage]; - }; - - return actualCalls.some(function( actualCall ){ - - var actualArgs = actualCall.args; - - // check for one too many arguments given. But this is ok - // if the extra arg is undefined. - if( actualArgs[expectedArgs.length] != undefined ) { - - return false; - } - - return expectedArgs.every(function( expectedArg, index ){ - - return equals( actualArgs[index], expectedArg ); - }); - - }); - } - } diff --git a/truebit-implementation/node_modules/oboe/test/libs/es5-sham.js b/truebit-implementation/node_modules/oboe/test/libs/es5-sham.js deleted file mode 100644 index d8d89056..00000000 --- a/truebit-implementation/node_modules/oboe/test/libs/es5-sham.js +++ /dev/null @@ -1,444 +0,0 @@ -// Copyright 2009-2012 by contributors, MIT License -// vim: ts=4 sts=4 sw=4 expandtab - -// Module systems magic dance -(function (definition) { - // RequireJS - if (typeof define == "function") { - define(definition); - // YUI3 - } else if (typeof YUI == "function") { - YUI.add("es5-sham", definition); - // CommonJS and -``` - -This script is browserified and wrapped in a [umd](https://github.com/umdjs/umd) -wrapper so you should be able to use it standalone or together with a module -loader. - -## API - -### `psl.parse(domain)` - -Parse domain based on Public Suffix List. Returns an `Object` with the following -properties: - -* `tld`: Top level domain (this is the _public suffix_). -* `sld`: Second level domain (the first private part of the domain name). -* `domain`: The domain name is the `sld` + `tld`. -* `subdomain`: Optional parts left of the domain. - -#### Example: - -```js -var psl = require('psl'); - -// Parse domain without subdomain -var parsed = psl.parse('google.com'); -console.log(parsed.tld); // 'com' -console.log(parsed.sld); // 'google' -console.log(parsed.domain); // 'google.com' -console.log(parsed.subdomain); // null - -// Parse domain with subdomain -var parsed = psl.parse('www.google.com'); -console.log(parsed.tld); // 'com' -console.log(parsed.sld); // 'google' -console.log(parsed.domain); // 'google.com' -console.log(parsed.subdomain); // 'www' - -// Parse domain with nested subdomains -var parsed = psl.parse('a.b.c.d.foo.com'); -console.log(parsed.tld); // 'com' -console.log(parsed.sld); // 'foo' -console.log(parsed.domain); // 'foo.com' -console.log(parsed.subdomain); // 'a.b.c.d' -``` - -### `psl.get(domain)` - -Get domain name, `sld` + `tld`. Returns `null` if not valid. - -#### Example: - -```js -var psl = require('psl'); - -// null input. -psl.get(null); // null - -// Mixed case. -psl.get('COM'); // null -psl.get('example.COM'); // 'example.com' -psl.get('WwW.example.COM'); // 'example.com' - -// Unlisted TLD. -psl.get('example'); // null -psl.get('example.example'); // 'example.example' -psl.get('b.example.example'); // 'example.example' -psl.get('a.b.example.example'); // 'example.example' - -// TLD with only 1 rule. -psl.get('biz'); // null -psl.get('domain.biz'); // 'domain.biz' -psl.get('b.domain.biz'); // 'domain.biz' -psl.get('a.b.domain.biz'); // 'domain.biz' - -// TLD with some 2-level rules. -psl.get('uk.com'); // null); -psl.get('example.uk.com'); // 'example.uk.com'); -psl.get('b.example.uk.com'); // 'example.uk.com'); - -// More complex TLD. -psl.get('c.kobe.jp'); // null -psl.get('b.c.kobe.jp'); // 'b.c.kobe.jp' -psl.get('a.b.c.kobe.jp'); // 'b.c.kobe.jp' -psl.get('city.kobe.jp'); // 'city.kobe.jp' -psl.get('www.city.kobe.jp'); // 'city.kobe.jp' - -// IDN labels. -psl.get('食狮.com.cn'); // '食狮.com.cn' -psl.get('食狮.公司.cn'); // '食狮.公司.cn' -psl.get('www.食狮.公司.cn'); // '食狮.公司.cn' - -// Same as above, but punycoded. -psl.get('xn--85x722f.com.cn'); // 'xn--85x722f.com.cn' -psl.get('xn--85x722f.xn--55qx5d.cn'); // 'xn--85x722f.xn--55qx5d.cn' -psl.get('www.xn--85x722f.xn--55qx5d.cn'); // 'xn--85x722f.xn--55qx5d.cn' -``` - -### `psl.isValid(domain)` - -Check whether a domain has a valid Public Suffix. Returns a `Boolean` indicating -whether the domain has a valid Public Suffix. - -#### Example - -```js -var psl = require('psl'); - -psl.isValid('google.com'); // true -psl.isValid('www.google.com'); // true -psl.isValid('x.yz'); // false -``` - - -## Testing and Building - -Test are written using [`mocha`](https://mochajs.org/) and can be -run in two different environments: `node` and `phantomjs`. - -```sh -# This will run `eslint`, `mocha` and `karma`. -npm test - -# Individual test environments -# Run tests in node only. -./node_modules/.bin/mocha test -# Run tests in phantomjs only. -./node_modules/.bin/karma start ./karma.conf.js --single-run - -# Build data (parse raw list) and create dist files -npm run build -``` - -Feel free to fork if you see possible improvements! - - -## Acknowledgements - -* Mozilla Foundation's [Public Suffix List](https://publicsuffix.org/) -* Thanks to Rob Stradling of [Comodo](https://www.comodo.com/) for providing - test data. -* Inspired by [weppos/publicsuffix-ruby](https://github.com/weppos/publicsuffix-ruby) - - -## License - -The MIT License (MIT) - -Copyright (c) 2017 Lupo Montero - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/psl/data/rules.json b/truebit-implementation/node_modules/psl/data/rules.json deleted file mode 100644 index 38d8d8bd..00000000 --- a/truebit-implementation/node_modules/psl/data/rules.json +++ /dev/null @@ -1 +0,0 @@ -["ac","com.ac","edu.ac","gov.ac","net.ac","mil.ac","org.ac","ad","nom.ad","ae","co.ae","net.ae","org.ae","sch.ae","ac.ae","gov.ae","mil.ae","aero","accident-investigation.aero","accident-prevention.aero","aerobatic.aero","aeroclub.aero","aerodrome.aero","agents.aero","aircraft.aero","airline.aero","airport.aero","air-surveillance.aero","airtraffic.aero","air-traffic-control.aero","ambulance.aero","amusement.aero","association.aero","author.aero","ballooning.aero","broker.aero","caa.aero","cargo.aero","catering.aero","certification.aero","championship.aero","charter.aero","civilaviation.aero","club.aero","conference.aero","consultant.aero","consulting.aero","control.aero","council.aero","crew.aero","design.aero","dgca.aero","educator.aero","emergency.aero","engine.aero","engineer.aero","entertainment.aero","equipment.aero","exchange.aero","express.aero","federation.aero","flight.aero","freight.aero","fuel.aero","gliding.aero","government.aero","groundhandling.aero","group.aero","hanggliding.aero","homebuilt.aero","insurance.aero","journal.aero","journalist.aero","leasing.aero","logistics.aero","magazine.aero","maintenance.aero","media.aero","microlight.aero","modelling.aero","navigation.aero","parachuting.aero","paragliding.aero","passenger-association.aero","pilot.aero","press.aero","production.aero","recreation.aero","repbody.aero","res.aero","research.aero","rotorcraft.aero","safety.aero","scientist.aero","services.aero","show.aero","skydiving.aero","software.aero","student.aero","trader.aero","trading.aero","trainer.aero","union.aero","workinggroup.aero","works.aero","af","gov.af","com.af","org.af","net.af","edu.af","ag","com.ag","org.ag","net.ag","co.ag","nom.ag","ai","off.ai","com.ai","net.ai","org.ai","al","com.al","edu.al","gov.al","mil.al","net.al","org.al","am","ao","ed.ao","gv.ao","og.ao","co.ao","pb.ao","it.ao","aq","ar","com.ar","edu.ar","gob.ar","gov.ar","int.ar","mil.ar","musica.ar","net.ar","org.ar","tur.ar","arpa","e164.arpa","in-addr.arpa","ip6.arpa","iris.arpa","uri.arpa","urn.arpa","as","gov.as","asia","at","ac.at","co.at","gv.at","or.at","au","com.au","net.au","org.au","edu.au","gov.au","asn.au","id.au","info.au","conf.au","oz.au","act.au","nsw.au","nt.au","qld.au","sa.au","tas.au","vic.au","wa.au","act.edu.au","nsw.edu.au","nt.edu.au","qld.edu.au","sa.edu.au","tas.edu.au","vic.edu.au","wa.edu.au","qld.gov.au","sa.gov.au","tas.gov.au","vic.gov.au","wa.gov.au","aw","com.aw","ax","az","com.az","net.az","int.az","gov.az","org.az","edu.az","info.az","pp.az","mil.az","name.az","pro.az","biz.az","ba","com.ba","edu.ba","gov.ba","mil.ba","net.ba","org.ba","bb","biz.bb","co.bb","com.bb","edu.bb","gov.bb","info.bb","net.bb","org.bb","store.bb","tv.bb","*.bd","be","ac.be","bf","gov.bf","bg","a.bg","b.bg","c.bg","d.bg","e.bg","f.bg","g.bg","h.bg","i.bg","j.bg","k.bg","l.bg","m.bg","n.bg","o.bg","p.bg","q.bg","r.bg","s.bg","t.bg","u.bg","v.bg","w.bg","x.bg","y.bg","z.bg","0.bg","1.bg","2.bg","3.bg","4.bg","5.bg","6.bg","7.bg","8.bg","9.bg","bh","com.bh","edu.bh","net.bh","org.bh","gov.bh","bi","co.bi","com.bi","edu.bi","or.bi","org.bi","biz","bj","asso.bj","barreau.bj","gouv.bj","bm","com.bm","edu.bm","gov.bm","net.bm","org.bm","*.bn","bo","com.bo","edu.bo","gob.bo","int.bo","org.bo","net.bo","mil.bo","tv.bo","web.bo","academia.bo","agro.bo","arte.bo","blog.bo","bolivia.bo","ciencia.bo","cooperativa.bo","democracia.bo","deporte.bo","ecologia.bo","economia.bo","empresa.bo","indigena.bo","industria.bo","info.bo","medicina.bo","movimiento.bo","musica.bo","natural.bo","nombre.bo","noticias.bo","patria.bo","politica.bo","profesional.bo","plurinacional.bo","pueblo.bo","revista.bo","salud.bo","tecnologia.bo","tksat.bo","transporte.bo","wiki.bo","br","9guacu.br","abc.br","adm.br","adv.br","agr.br","aju.br","am.br","anani.br","aparecida.br","arq.br","art.br","ato.br","b.br","barueri.br","belem.br","bhz.br","bio.br","blog.br","bmd.br","boavista.br","bsb.br","campinagrande.br","campinas.br","caxias.br","cim.br","cng.br","cnt.br","com.br","contagem.br","coop.br","cri.br","cuiaba.br","curitiba.br","def.br","ecn.br","eco.br","edu.br","emp.br","eng.br","esp.br","etc.br","eti.br","far.br","feira.br","flog.br","floripa.br","fm.br","fnd.br","fortal.br","fot.br","foz.br","fst.br","g12.br","ggf.br","goiania.br","gov.br","ac.gov.br","al.gov.br","am.gov.br","ap.gov.br","ba.gov.br","ce.gov.br","df.gov.br","es.gov.br","go.gov.br","ma.gov.br","mg.gov.br","ms.gov.br","mt.gov.br","pa.gov.br","pb.gov.br","pe.gov.br","pi.gov.br","pr.gov.br","rj.gov.br","rn.gov.br","ro.gov.br","rr.gov.br","rs.gov.br","sc.gov.br","se.gov.br","sp.gov.br","to.gov.br","gru.br","imb.br","ind.br","inf.br","jab.br","jampa.br","jdf.br","joinville.br","jor.br","jus.br","leg.br","lel.br","londrina.br","macapa.br","maceio.br","manaus.br","maringa.br","mat.br","med.br","mil.br","morena.br","mp.br","mus.br","natal.br","net.br","niteroi.br","*.nom.br","not.br","ntr.br","odo.br","org.br","osasco.br","palmas.br","poa.br","ppg.br","pro.br","psc.br","psi.br","pvh.br","qsl.br","radio.br","rec.br","recife.br","ribeirao.br","rio.br","riobranco.br","riopreto.br","salvador.br","sampa.br","santamaria.br","santoandre.br","saobernardo.br","saogonca.br","sjc.br","slg.br","slz.br","sorocaba.br","srv.br","taxi.br","teo.br","the.br","tmp.br","trd.br","tur.br","tv.br","udi.br","vet.br","vix.br","vlog.br","wiki.br","zlg.br","bs","com.bs","net.bs","org.bs","edu.bs","gov.bs","bt","com.bt","edu.bt","gov.bt","net.bt","org.bt","bv","bw","co.bw","org.bw","by","gov.by","mil.by","com.by","of.by","bz","com.bz","net.bz","org.bz","edu.bz","gov.bz","ca","ab.ca","bc.ca","mb.ca","nb.ca","nf.ca","nl.ca","ns.ca","nt.ca","nu.ca","on.ca","pe.ca","qc.ca","sk.ca","yk.ca","gc.ca","cat","cc","cd","gov.cd","cf","cg","ch","ci","org.ci","or.ci","com.ci","co.ci","edu.ci","ed.ci","ac.ci","net.ci","go.ci","asso.ci","aéroport.ci","int.ci","presse.ci","md.ci","gouv.ci","*.ck","!www.ck","cl","gov.cl","gob.cl","co.cl","mil.cl","cm","co.cm","com.cm","gov.cm","net.cm","cn","ac.cn","com.cn","edu.cn","gov.cn","net.cn","org.cn","mil.cn","公司.cn","网络.cn","網絡.cn","ah.cn","bj.cn","cq.cn","fj.cn","gd.cn","gs.cn","gz.cn","gx.cn","ha.cn","hb.cn","he.cn","hi.cn","hl.cn","hn.cn","jl.cn","js.cn","jx.cn","ln.cn","nm.cn","nx.cn","qh.cn","sc.cn","sd.cn","sh.cn","sn.cn","sx.cn","tj.cn","xj.cn","xz.cn","yn.cn","zj.cn","hk.cn","mo.cn","tw.cn","co","arts.co","com.co","edu.co","firm.co","gov.co","info.co","int.co","mil.co","net.co","nom.co","org.co","rec.co","web.co","com","coop","cr","ac.cr","co.cr","ed.cr","fi.cr","go.cr","or.cr","sa.cr","cu","com.cu","edu.cu","org.cu","net.cu","gov.cu","inf.cu","cv","cw","com.cw","edu.cw","net.cw","org.cw","cx","gov.cx","cy","ac.cy","biz.cy","com.cy","ekloges.cy","gov.cy","ltd.cy","name.cy","net.cy","org.cy","parliament.cy","press.cy","pro.cy","tm.cy","cz","de","dj","dk","dm","com.dm","net.dm","org.dm","edu.dm","gov.dm","do","art.do","com.do","edu.do","gob.do","gov.do","mil.do","net.do","org.do","sld.do","web.do","dz","com.dz","org.dz","net.dz","gov.dz","edu.dz","asso.dz","pol.dz","art.dz","ec","com.ec","info.ec","net.ec","fin.ec","k12.ec","med.ec","pro.ec","org.ec","edu.ec","gov.ec","gob.ec","mil.ec","edu","ee","edu.ee","gov.ee","riik.ee","lib.ee","med.ee","com.ee","pri.ee","aip.ee","org.ee","fie.ee","eg","com.eg","edu.eg","eun.eg","gov.eg","mil.eg","name.eg","net.eg","org.eg","sci.eg","*.er","es","com.es","nom.es","org.es","gob.es","edu.es","et","com.et","gov.et","org.et","edu.et","biz.et","name.et","info.et","net.et","eu","fi","aland.fi","*.fj","*.fk","fm","fo","fr","com.fr","asso.fr","nom.fr","prd.fr","presse.fr","tm.fr","aeroport.fr","assedic.fr","avocat.fr","avoues.fr","cci.fr","chambagri.fr","chirurgiens-dentistes.fr","experts-comptables.fr","geometre-expert.fr","gouv.fr","greta.fr","huissier-justice.fr","medecin.fr","notaires.fr","pharmacien.fr","port.fr","veterinaire.fr","ga","gb","gd","ge","com.ge","edu.ge","gov.ge","org.ge","mil.ge","net.ge","pvt.ge","gf","gg","co.gg","net.gg","org.gg","gh","com.gh","edu.gh","gov.gh","org.gh","mil.gh","gi","com.gi","ltd.gi","gov.gi","mod.gi","edu.gi","org.gi","gl","co.gl","com.gl","edu.gl","net.gl","org.gl","gm","gn","ac.gn","com.gn","edu.gn","gov.gn","org.gn","net.gn","gov","gp","com.gp","net.gp","mobi.gp","edu.gp","org.gp","asso.gp","gq","gr","com.gr","edu.gr","net.gr","org.gr","gov.gr","gs","gt","com.gt","edu.gt","gob.gt","ind.gt","mil.gt","net.gt","org.gt","gu","com.gu","edu.gu","gov.gu","guam.gu","info.gu","net.gu","org.gu","web.gu","gw","gy","co.gy","com.gy","edu.gy","gov.gy","net.gy","org.gy","hk","com.hk","edu.hk","gov.hk","idv.hk","net.hk","org.hk","公司.hk","教育.hk","敎育.hk","政府.hk","個人.hk","个人.hk","箇人.hk","網络.hk","网络.hk","组織.hk","網絡.hk","网絡.hk","组织.hk","組織.hk","組织.hk","hm","hn","com.hn","edu.hn","org.hn","net.hn","mil.hn","gob.hn","hr","iz.hr","from.hr","name.hr","com.hr","ht","com.ht","shop.ht","firm.ht","info.ht","adult.ht","net.ht","pro.ht","org.ht","med.ht","art.ht","coop.ht","pol.ht","asso.ht","edu.ht","rel.ht","gouv.ht","perso.ht","hu","co.hu","info.hu","org.hu","priv.hu","sport.hu","tm.hu","2000.hu","agrar.hu","bolt.hu","casino.hu","city.hu","erotica.hu","erotika.hu","film.hu","forum.hu","games.hu","hotel.hu","ingatlan.hu","jogasz.hu","konyvelo.hu","lakas.hu","media.hu","news.hu","reklam.hu","sex.hu","shop.hu","suli.hu","szex.hu","tozsde.hu","utazas.hu","video.hu","id","ac.id","biz.id","co.id","desa.id","go.id","mil.id","my.id","net.id","or.id","sch.id","web.id","ie","gov.ie","il","ac.il","co.il","gov.il","idf.il","k12.il","muni.il","net.il","org.il","im","ac.im","co.im","com.im","ltd.co.im","net.im","org.im","plc.co.im","tt.im","tv.im","in","co.in","firm.in","net.in","org.in","gen.in","ind.in","nic.in","ac.in","edu.in","res.in","gov.in","mil.in","info","int","eu.int","io","com.io","iq","gov.iq","edu.iq","mil.iq","com.iq","org.iq","net.iq","ir","ac.ir","co.ir","gov.ir","id.ir","net.ir","org.ir","sch.ir","ایران.ir","ايران.ir","is","net.is","com.is","edu.is","gov.is","org.is","int.is","it","gov.it","edu.it","abr.it","abruzzo.it","aosta-valley.it","aostavalley.it","bas.it","basilicata.it","cal.it","calabria.it","cam.it","campania.it","emilia-romagna.it","emiliaromagna.it","emr.it","friuli-v-giulia.it","friuli-ve-giulia.it","friuli-vegiulia.it","friuli-venezia-giulia.it","friuli-veneziagiulia.it","friuli-vgiulia.it","friuliv-giulia.it","friulive-giulia.it","friulivegiulia.it","friulivenezia-giulia.it","friuliveneziagiulia.it","friulivgiulia.it","fvg.it","laz.it","lazio.it","lig.it","liguria.it","lom.it","lombardia.it","lombardy.it","lucania.it","mar.it","marche.it","mol.it","molise.it","piedmont.it","piemonte.it","pmn.it","pug.it","puglia.it","sar.it","sardegna.it","sardinia.it","sic.it","sicilia.it","sicily.it","taa.it","tos.it","toscana.it","trentin-sud-tirol.it","trentin-süd-tirol.it","trentin-sudtirol.it","trentin-südtirol.it","trentin-sued-tirol.it","trentin-suedtirol.it","trentino-a-adige.it","trentino-aadige.it","trentino-alto-adige.it","trentino-altoadige.it","trentino-s-tirol.it","trentino-stirol.it","trentino-sud-tirol.it","trentino-süd-tirol.it","trentino-sudtirol.it","trentino-südtirol.it","trentino-sued-tirol.it","trentino-suedtirol.it","trentino.it","trentinoa-adige.it","trentinoaadige.it","trentinoalto-adige.it","trentinoaltoadige.it","trentinos-tirol.it","trentinostirol.it","trentinosud-tirol.it","trentinosüd-tirol.it","trentinosudtirol.it","trentinosüdtirol.it","trentinosued-tirol.it","trentinosuedtirol.it","trentinsud-tirol.it","trentinsüd-tirol.it","trentinsudtirol.it","trentinsüdtirol.it","trentinsued-tirol.it","trentinsuedtirol.it","tuscany.it","umb.it","umbria.it","val-d-aosta.it","val-daosta.it","vald-aosta.it","valdaosta.it","valle-aosta.it","valle-d-aosta.it","valle-daosta.it","valleaosta.it","valled-aosta.it","valledaosta.it","vallee-aoste.it","vallée-aoste.it","vallee-d-aoste.it","vallée-d-aoste.it","valleeaoste.it","valléeaoste.it","valleedaoste.it","valléedaoste.it","vao.it","vda.it","ven.it","veneto.it","ag.it","agrigento.it","al.it","alessandria.it","alto-adige.it","altoadige.it","an.it","ancona.it","andria-barletta-trani.it","andria-trani-barletta.it","andriabarlettatrani.it","andriatranibarletta.it","ao.it","aosta.it","aoste.it","ap.it","aq.it","aquila.it","ar.it","arezzo.it","ascoli-piceno.it","ascolipiceno.it","asti.it","at.it","av.it","avellino.it","ba.it","balsan-sudtirol.it","balsan-südtirol.it","balsan-suedtirol.it","balsan.it","bari.it","barletta-trani-andria.it","barlettatraniandria.it","belluno.it","benevento.it","bergamo.it","bg.it","bi.it","biella.it","bl.it","bn.it","bo.it","bologna.it","bolzano-altoadige.it","bolzano.it","bozen-sudtirol.it","bozen-südtirol.it","bozen-suedtirol.it","bozen.it","br.it","brescia.it","brindisi.it","bs.it","bt.it","bulsan-sudtirol.it","bulsan-südtirol.it","bulsan-suedtirol.it","bulsan.it","bz.it","ca.it","cagliari.it","caltanissetta.it","campidano-medio.it","campidanomedio.it","campobasso.it","carbonia-iglesias.it","carboniaiglesias.it","carrara-massa.it","carraramassa.it","caserta.it","catania.it","catanzaro.it","cb.it","ce.it","cesena-forli.it","cesena-forlì.it","cesenaforli.it","cesenaforlì.it","ch.it","chieti.it","ci.it","cl.it","cn.it","co.it","como.it","cosenza.it","cr.it","cremona.it","crotone.it","cs.it","ct.it","cuneo.it","cz.it","dell-ogliastra.it","dellogliastra.it","en.it","enna.it","fc.it","fe.it","fermo.it","ferrara.it","fg.it","fi.it","firenze.it","florence.it","fm.it","foggia.it","forli-cesena.it","forlì-cesena.it","forlicesena.it","forlìcesena.it","fr.it","frosinone.it","ge.it","genoa.it","genova.it","go.it","gorizia.it","gr.it","grosseto.it","iglesias-carbonia.it","iglesiascarbonia.it","im.it","imperia.it","is.it","isernia.it","kr.it","la-spezia.it","laquila.it","laspezia.it","latina.it","lc.it","le.it","lecce.it","lecco.it","li.it","livorno.it","lo.it","lodi.it","lt.it","lu.it","lucca.it","macerata.it","mantova.it","massa-carrara.it","massacarrara.it","matera.it","mb.it","mc.it","me.it","medio-campidano.it","mediocampidano.it","messina.it","mi.it","milan.it","milano.it","mn.it","mo.it","modena.it","monza-brianza.it","monza-e-della-brianza.it","monza.it","monzabrianza.it","monzaebrianza.it","monzaedellabrianza.it","ms.it","mt.it","na.it","naples.it","napoli.it","no.it","novara.it","nu.it","nuoro.it","og.it","ogliastra.it","olbia-tempio.it","olbiatempio.it","or.it","oristano.it","ot.it","pa.it","padova.it","padua.it","palermo.it","parma.it","pavia.it","pc.it","pd.it","pe.it","perugia.it","pesaro-urbino.it","pesarourbino.it","pescara.it","pg.it","pi.it","piacenza.it","pisa.it","pistoia.it","pn.it","po.it","pordenone.it","potenza.it","pr.it","prato.it","pt.it","pu.it","pv.it","pz.it","ra.it","ragusa.it","ravenna.it","rc.it","re.it","reggio-calabria.it","reggio-emilia.it","reggiocalabria.it","reggioemilia.it","rg.it","ri.it","rieti.it","rimini.it","rm.it","rn.it","ro.it","roma.it","rome.it","rovigo.it","sa.it","salerno.it","sassari.it","savona.it","si.it","siena.it","siracusa.it","so.it","sondrio.it","sp.it","sr.it","ss.it","suedtirol.it","südtirol.it","sv.it","ta.it","taranto.it","te.it","tempio-olbia.it","tempioolbia.it","teramo.it","terni.it","tn.it","to.it","torino.it","tp.it","tr.it","trani-andria-barletta.it","trani-barletta-andria.it","traniandriabarletta.it","tranibarlettaandria.it","trapani.it","trento.it","treviso.it","trieste.it","ts.it","turin.it","tv.it","ud.it","udine.it","urbino-pesaro.it","urbinopesaro.it","va.it","varese.it","vb.it","vc.it","ve.it","venezia.it","venice.it","verbania.it","vercelli.it","verona.it","vi.it","vibo-valentia.it","vibovalentia.it","vicenza.it","viterbo.it","vr.it","vs.it","vt.it","vv.it","je","co.je","net.je","org.je","*.jm","jo","com.jo","org.jo","net.jo","edu.jo","sch.jo","gov.jo","mil.jo","name.jo","jobs","jp","ac.jp","ad.jp","co.jp","ed.jp","go.jp","gr.jp","lg.jp","ne.jp","or.jp","aichi.jp","akita.jp","aomori.jp","chiba.jp","ehime.jp","fukui.jp","fukuoka.jp","fukushima.jp","gifu.jp","gunma.jp","hiroshima.jp","hokkaido.jp","hyogo.jp","ibaraki.jp","ishikawa.jp","iwate.jp","kagawa.jp","kagoshima.jp","kanagawa.jp","kochi.jp","kumamoto.jp","kyoto.jp","mie.jp","miyagi.jp","miyazaki.jp","nagano.jp","nagasaki.jp","nara.jp","niigata.jp","oita.jp","okayama.jp","okinawa.jp","osaka.jp","saga.jp","saitama.jp","shiga.jp","shimane.jp","shizuoka.jp","tochigi.jp","tokushima.jp","tokyo.jp","tottori.jp","toyama.jp","wakayama.jp","yamagata.jp","yamaguchi.jp","yamanashi.jp","栃木.jp","愛知.jp","愛媛.jp","兵庫.jp","熊本.jp","茨城.jp","北海道.jp","千葉.jp","和歌山.jp","長崎.jp","長野.jp","新潟.jp","青森.jp","静岡.jp","東京.jp","石川.jp","埼玉.jp","三重.jp","京都.jp","佐賀.jp","大分.jp","大阪.jp","奈良.jp","宮城.jp","宮崎.jp","富山.jp","山口.jp","山形.jp","山梨.jp","岩手.jp","岐阜.jp","岡山.jp","島根.jp","広島.jp","徳島.jp","沖縄.jp","滋賀.jp","神奈川.jp","福井.jp","福岡.jp","福島.jp","秋田.jp","群馬.jp","香川.jp","高知.jp","鳥取.jp","鹿児島.jp","*.kawasaki.jp","*.kitakyushu.jp","*.kobe.jp","*.nagoya.jp","*.sapporo.jp","*.sendai.jp","*.yokohama.jp","!city.kawasaki.jp","!city.kitakyushu.jp","!city.kobe.jp","!city.nagoya.jp","!city.sapporo.jp","!city.sendai.jp","!city.yokohama.jp","aisai.aichi.jp","ama.aichi.jp","anjo.aichi.jp","asuke.aichi.jp","chiryu.aichi.jp","chita.aichi.jp","fuso.aichi.jp","gamagori.aichi.jp","handa.aichi.jp","hazu.aichi.jp","hekinan.aichi.jp","higashiura.aichi.jp","ichinomiya.aichi.jp","inazawa.aichi.jp","inuyama.aichi.jp","isshiki.aichi.jp","iwakura.aichi.jp","kanie.aichi.jp","kariya.aichi.jp","kasugai.aichi.jp","kira.aichi.jp","kiyosu.aichi.jp","komaki.aichi.jp","konan.aichi.jp","kota.aichi.jp","mihama.aichi.jp","miyoshi.aichi.jp","nishio.aichi.jp","nisshin.aichi.jp","obu.aichi.jp","oguchi.aichi.jp","oharu.aichi.jp","okazaki.aichi.jp","owariasahi.aichi.jp","seto.aichi.jp","shikatsu.aichi.jp","shinshiro.aichi.jp","shitara.aichi.jp","tahara.aichi.jp","takahama.aichi.jp","tobishima.aichi.jp","toei.aichi.jp","togo.aichi.jp","tokai.aichi.jp","tokoname.aichi.jp","toyoake.aichi.jp","toyohashi.aichi.jp","toyokawa.aichi.jp","toyone.aichi.jp","toyota.aichi.jp","tsushima.aichi.jp","yatomi.aichi.jp","akita.akita.jp","daisen.akita.jp","fujisato.akita.jp","gojome.akita.jp","hachirogata.akita.jp","happou.akita.jp","higashinaruse.akita.jp","honjo.akita.jp","honjyo.akita.jp","ikawa.akita.jp","kamikoani.akita.jp","kamioka.akita.jp","katagami.akita.jp","kazuno.akita.jp","kitaakita.akita.jp","kosaka.akita.jp","kyowa.akita.jp","misato.akita.jp","mitane.akita.jp","moriyoshi.akita.jp","nikaho.akita.jp","noshiro.akita.jp","odate.akita.jp","oga.akita.jp","ogata.akita.jp","semboku.akita.jp","yokote.akita.jp","yurihonjo.akita.jp","aomori.aomori.jp","gonohe.aomori.jp","hachinohe.aomori.jp","hashikami.aomori.jp","hiranai.aomori.jp","hirosaki.aomori.jp","itayanagi.aomori.jp","kuroishi.aomori.jp","misawa.aomori.jp","mutsu.aomori.jp","nakadomari.aomori.jp","noheji.aomori.jp","oirase.aomori.jp","owani.aomori.jp","rokunohe.aomori.jp","sannohe.aomori.jp","shichinohe.aomori.jp","shingo.aomori.jp","takko.aomori.jp","towada.aomori.jp","tsugaru.aomori.jp","tsuruta.aomori.jp","abiko.chiba.jp","asahi.chiba.jp","chonan.chiba.jp","chosei.chiba.jp","choshi.chiba.jp","chuo.chiba.jp","funabashi.chiba.jp","futtsu.chiba.jp","hanamigawa.chiba.jp","ichihara.chiba.jp","ichikawa.chiba.jp","ichinomiya.chiba.jp","inzai.chiba.jp","isumi.chiba.jp","kamagaya.chiba.jp","kamogawa.chiba.jp","kashiwa.chiba.jp","katori.chiba.jp","katsuura.chiba.jp","kimitsu.chiba.jp","kisarazu.chiba.jp","kozaki.chiba.jp","kujukuri.chiba.jp","kyonan.chiba.jp","matsudo.chiba.jp","midori.chiba.jp","mihama.chiba.jp","minamiboso.chiba.jp","mobara.chiba.jp","mutsuzawa.chiba.jp","nagara.chiba.jp","nagareyama.chiba.jp","narashino.chiba.jp","narita.chiba.jp","noda.chiba.jp","oamishirasato.chiba.jp","omigawa.chiba.jp","onjuku.chiba.jp","otaki.chiba.jp","sakae.chiba.jp","sakura.chiba.jp","shimofusa.chiba.jp","shirako.chiba.jp","shiroi.chiba.jp","shisui.chiba.jp","sodegaura.chiba.jp","sosa.chiba.jp","tako.chiba.jp","tateyama.chiba.jp","togane.chiba.jp","tohnosho.chiba.jp","tomisato.chiba.jp","urayasu.chiba.jp","yachimata.chiba.jp","yachiyo.chiba.jp","yokaichiba.chiba.jp","yokoshibahikari.chiba.jp","yotsukaido.chiba.jp","ainan.ehime.jp","honai.ehime.jp","ikata.ehime.jp","imabari.ehime.jp","iyo.ehime.jp","kamijima.ehime.jp","kihoku.ehime.jp","kumakogen.ehime.jp","masaki.ehime.jp","matsuno.ehime.jp","matsuyama.ehime.jp","namikata.ehime.jp","niihama.ehime.jp","ozu.ehime.jp","saijo.ehime.jp","seiyo.ehime.jp","shikokuchuo.ehime.jp","tobe.ehime.jp","toon.ehime.jp","uchiko.ehime.jp","uwajima.ehime.jp","yawatahama.ehime.jp","echizen.fukui.jp","eiheiji.fukui.jp","fukui.fukui.jp","ikeda.fukui.jp","katsuyama.fukui.jp","mihama.fukui.jp","minamiechizen.fukui.jp","obama.fukui.jp","ohi.fukui.jp","ono.fukui.jp","sabae.fukui.jp","sakai.fukui.jp","takahama.fukui.jp","tsuruga.fukui.jp","wakasa.fukui.jp","ashiya.fukuoka.jp","buzen.fukuoka.jp","chikugo.fukuoka.jp","chikuho.fukuoka.jp","chikujo.fukuoka.jp","chikushino.fukuoka.jp","chikuzen.fukuoka.jp","chuo.fukuoka.jp","dazaifu.fukuoka.jp","fukuchi.fukuoka.jp","hakata.fukuoka.jp","higashi.fukuoka.jp","hirokawa.fukuoka.jp","hisayama.fukuoka.jp","iizuka.fukuoka.jp","inatsuki.fukuoka.jp","kaho.fukuoka.jp","kasuga.fukuoka.jp","kasuya.fukuoka.jp","kawara.fukuoka.jp","keisen.fukuoka.jp","koga.fukuoka.jp","kurate.fukuoka.jp","kurogi.fukuoka.jp","kurume.fukuoka.jp","minami.fukuoka.jp","miyako.fukuoka.jp","miyama.fukuoka.jp","miyawaka.fukuoka.jp","mizumaki.fukuoka.jp","munakata.fukuoka.jp","nakagawa.fukuoka.jp","nakama.fukuoka.jp","nishi.fukuoka.jp","nogata.fukuoka.jp","ogori.fukuoka.jp","okagaki.fukuoka.jp","okawa.fukuoka.jp","oki.fukuoka.jp","omuta.fukuoka.jp","onga.fukuoka.jp","onojo.fukuoka.jp","oto.fukuoka.jp","saigawa.fukuoka.jp","sasaguri.fukuoka.jp","shingu.fukuoka.jp","shinyoshitomi.fukuoka.jp","shonai.fukuoka.jp","soeda.fukuoka.jp","sue.fukuoka.jp","tachiarai.fukuoka.jp","tagawa.fukuoka.jp","takata.fukuoka.jp","toho.fukuoka.jp","toyotsu.fukuoka.jp","tsuiki.fukuoka.jp","ukiha.fukuoka.jp","umi.fukuoka.jp","usui.fukuoka.jp","yamada.fukuoka.jp","yame.fukuoka.jp","yanagawa.fukuoka.jp","yukuhashi.fukuoka.jp","aizubange.fukushima.jp","aizumisato.fukushima.jp","aizuwakamatsu.fukushima.jp","asakawa.fukushima.jp","bandai.fukushima.jp","date.fukushima.jp","fukushima.fukushima.jp","furudono.fukushima.jp","futaba.fukushima.jp","hanawa.fukushima.jp","higashi.fukushima.jp","hirata.fukushima.jp","hirono.fukushima.jp","iitate.fukushima.jp","inawashiro.fukushima.jp","ishikawa.fukushima.jp","iwaki.fukushima.jp","izumizaki.fukushima.jp","kagamiishi.fukushima.jp","kaneyama.fukushima.jp","kawamata.fukushima.jp","kitakata.fukushima.jp","kitashiobara.fukushima.jp","koori.fukushima.jp","koriyama.fukushima.jp","kunimi.fukushima.jp","miharu.fukushima.jp","mishima.fukushima.jp","namie.fukushima.jp","nango.fukushima.jp","nishiaizu.fukushima.jp","nishigo.fukushima.jp","okuma.fukushima.jp","omotego.fukushima.jp","ono.fukushima.jp","otama.fukushima.jp","samegawa.fukushima.jp","shimogo.fukushima.jp","shirakawa.fukushima.jp","showa.fukushima.jp","soma.fukushima.jp","sukagawa.fukushima.jp","taishin.fukushima.jp","tamakawa.fukushima.jp","tanagura.fukushima.jp","tenei.fukushima.jp","yabuki.fukushima.jp","yamato.fukushima.jp","yamatsuri.fukushima.jp","yanaizu.fukushima.jp","yugawa.fukushima.jp","anpachi.gifu.jp","ena.gifu.jp","gifu.gifu.jp","ginan.gifu.jp","godo.gifu.jp","gujo.gifu.jp","hashima.gifu.jp","hichiso.gifu.jp","hida.gifu.jp","higashishirakawa.gifu.jp","ibigawa.gifu.jp","ikeda.gifu.jp","kakamigahara.gifu.jp","kani.gifu.jp","kasahara.gifu.jp","kasamatsu.gifu.jp","kawaue.gifu.jp","kitagata.gifu.jp","mino.gifu.jp","minokamo.gifu.jp","mitake.gifu.jp","mizunami.gifu.jp","motosu.gifu.jp","nakatsugawa.gifu.jp","ogaki.gifu.jp","sakahogi.gifu.jp","seki.gifu.jp","sekigahara.gifu.jp","shirakawa.gifu.jp","tajimi.gifu.jp","takayama.gifu.jp","tarui.gifu.jp","toki.gifu.jp","tomika.gifu.jp","wanouchi.gifu.jp","yamagata.gifu.jp","yaotsu.gifu.jp","yoro.gifu.jp","annaka.gunma.jp","chiyoda.gunma.jp","fujioka.gunma.jp","higashiagatsuma.gunma.jp","isesaki.gunma.jp","itakura.gunma.jp","kanna.gunma.jp","kanra.gunma.jp","katashina.gunma.jp","kawaba.gunma.jp","kiryu.gunma.jp","kusatsu.gunma.jp","maebashi.gunma.jp","meiwa.gunma.jp","midori.gunma.jp","minakami.gunma.jp","naganohara.gunma.jp","nakanojo.gunma.jp","nanmoku.gunma.jp","numata.gunma.jp","oizumi.gunma.jp","ora.gunma.jp","ota.gunma.jp","shibukawa.gunma.jp","shimonita.gunma.jp","shinto.gunma.jp","showa.gunma.jp","takasaki.gunma.jp","takayama.gunma.jp","tamamura.gunma.jp","tatebayashi.gunma.jp","tomioka.gunma.jp","tsukiyono.gunma.jp","tsumagoi.gunma.jp","ueno.gunma.jp","yoshioka.gunma.jp","asaminami.hiroshima.jp","daiwa.hiroshima.jp","etajima.hiroshima.jp","fuchu.hiroshima.jp","fukuyama.hiroshima.jp","hatsukaichi.hiroshima.jp","higashihiroshima.hiroshima.jp","hongo.hiroshima.jp","jinsekikogen.hiroshima.jp","kaita.hiroshima.jp","kui.hiroshima.jp","kumano.hiroshima.jp","kure.hiroshima.jp","mihara.hiroshima.jp","miyoshi.hiroshima.jp","naka.hiroshima.jp","onomichi.hiroshima.jp","osakikamijima.hiroshima.jp","otake.hiroshima.jp","saka.hiroshima.jp","sera.hiroshima.jp","seranishi.hiroshima.jp","shinichi.hiroshima.jp","shobara.hiroshima.jp","takehara.hiroshima.jp","abashiri.hokkaido.jp","abira.hokkaido.jp","aibetsu.hokkaido.jp","akabira.hokkaido.jp","akkeshi.hokkaido.jp","asahikawa.hokkaido.jp","ashibetsu.hokkaido.jp","ashoro.hokkaido.jp","assabu.hokkaido.jp","atsuma.hokkaido.jp","bibai.hokkaido.jp","biei.hokkaido.jp","bifuka.hokkaido.jp","bihoro.hokkaido.jp","biratori.hokkaido.jp","chippubetsu.hokkaido.jp","chitose.hokkaido.jp","date.hokkaido.jp","ebetsu.hokkaido.jp","embetsu.hokkaido.jp","eniwa.hokkaido.jp","erimo.hokkaido.jp","esan.hokkaido.jp","esashi.hokkaido.jp","fukagawa.hokkaido.jp","fukushima.hokkaido.jp","furano.hokkaido.jp","furubira.hokkaido.jp","haboro.hokkaido.jp","hakodate.hokkaido.jp","hamatonbetsu.hokkaido.jp","hidaka.hokkaido.jp","higashikagura.hokkaido.jp","higashikawa.hokkaido.jp","hiroo.hokkaido.jp","hokuryu.hokkaido.jp","hokuto.hokkaido.jp","honbetsu.hokkaido.jp","horokanai.hokkaido.jp","horonobe.hokkaido.jp","ikeda.hokkaido.jp","imakane.hokkaido.jp","ishikari.hokkaido.jp","iwamizawa.hokkaido.jp","iwanai.hokkaido.jp","kamifurano.hokkaido.jp","kamikawa.hokkaido.jp","kamishihoro.hokkaido.jp","kamisunagawa.hokkaido.jp","kamoenai.hokkaido.jp","kayabe.hokkaido.jp","kembuchi.hokkaido.jp","kikonai.hokkaido.jp","kimobetsu.hokkaido.jp","kitahiroshima.hokkaido.jp","kitami.hokkaido.jp","kiyosato.hokkaido.jp","koshimizu.hokkaido.jp","kunneppu.hokkaido.jp","kuriyama.hokkaido.jp","kuromatsunai.hokkaido.jp","kushiro.hokkaido.jp","kutchan.hokkaido.jp","kyowa.hokkaido.jp","mashike.hokkaido.jp","matsumae.hokkaido.jp","mikasa.hokkaido.jp","minamifurano.hokkaido.jp","mombetsu.hokkaido.jp","moseushi.hokkaido.jp","mukawa.hokkaido.jp","muroran.hokkaido.jp","naie.hokkaido.jp","nakagawa.hokkaido.jp","nakasatsunai.hokkaido.jp","nakatombetsu.hokkaido.jp","nanae.hokkaido.jp","nanporo.hokkaido.jp","nayoro.hokkaido.jp","nemuro.hokkaido.jp","niikappu.hokkaido.jp","niki.hokkaido.jp","nishiokoppe.hokkaido.jp","noboribetsu.hokkaido.jp","numata.hokkaido.jp","obihiro.hokkaido.jp","obira.hokkaido.jp","oketo.hokkaido.jp","okoppe.hokkaido.jp","otaru.hokkaido.jp","otobe.hokkaido.jp","otofuke.hokkaido.jp","otoineppu.hokkaido.jp","oumu.hokkaido.jp","ozora.hokkaido.jp","pippu.hokkaido.jp","rankoshi.hokkaido.jp","rebun.hokkaido.jp","rikubetsu.hokkaido.jp","rishiri.hokkaido.jp","rishirifuji.hokkaido.jp","saroma.hokkaido.jp","sarufutsu.hokkaido.jp","shakotan.hokkaido.jp","shari.hokkaido.jp","shibecha.hokkaido.jp","shibetsu.hokkaido.jp","shikabe.hokkaido.jp","shikaoi.hokkaido.jp","shimamaki.hokkaido.jp","shimizu.hokkaido.jp","shimokawa.hokkaido.jp","shinshinotsu.hokkaido.jp","shintoku.hokkaido.jp","shiranuka.hokkaido.jp","shiraoi.hokkaido.jp","shiriuchi.hokkaido.jp","sobetsu.hokkaido.jp","sunagawa.hokkaido.jp","taiki.hokkaido.jp","takasu.hokkaido.jp","takikawa.hokkaido.jp","takinoue.hokkaido.jp","teshikaga.hokkaido.jp","tobetsu.hokkaido.jp","tohma.hokkaido.jp","tomakomai.hokkaido.jp","tomari.hokkaido.jp","toya.hokkaido.jp","toyako.hokkaido.jp","toyotomi.hokkaido.jp","toyoura.hokkaido.jp","tsubetsu.hokkaido.jp","tsukigata.hokkaido.jp","urakawa.hokkaido.jp","urausu.hokkaido.jp","uryu.hokkaido.jp","utashinai.hokkaido.jp","wakkanai.hokkaido.jp","wassamu.hokkaido.jp","yakumo.hokkaido.jp","yoichi.hokkaido.jp","aioi.hyogo.jp","akashi.hyogo.jp","ako.hyogo.jp","amagasaki.hyogo.jp","aogaki.hyogo.jp","asago.hyogo.jp","ashiya.hyogo.jp","awaji.hyogo.jp","fukusaki.hyogo.jp","goshiki.hyogo.jp","harima.hyogo.jp","himeji.hyogo.jp","ichikawa.hyogo.jp","inagawa.hyogo.jp","itami.hyogo.jp","kakogawa.hyogo.jp","kamigori.hyogo.jp","kamikawa.hyogo.jp","kasai.hyogo.jp","kasuga.hyogo.jp","kawanishi.hyogo.jp","miki.hyogo.jp","minamiawaji.hyogo.jp","nishinomiya.hyogo.jp","nishiwaki.hyogo.jp","ono.hyogo.jp","sanda.hyogo.jp","sannan.hyogo.jp","sasayama.hyogo.jp","sayo.hyogo.jp","shingu.hyogo.jp","shinonsen.hyogo.jp","shiso.hyogo.jp","sumoto.hyogo.jp","taishi.hyogo.jp","taka.hyogo.jp","takarazuka.hyogo.jp","takasago.hyogo.jp","takino.hyogo.jp","tamba.hyogo.jp","tatsuno.hyogo.jp","toyooka.hyogo.jp","yabu.hyogo.jp","yashiro.hyogo.jp","yoka.hyogo.jp","yokawa.hyogo.jp","ami.ibaraki.jp","asahi.ibaraki.jp","bando.ibaraki.jp","chikusei.ibaraki.jp","daigo.ibaraki.jp","fujishiro.ibaraki.jp","hitachi.ibaraki.jp","hitachinaka.ibaraki.jp","hitachiomiya.ibaraki.jp","hitachiota.ibaraki.jp","ibaraki.ibaraki.jp","ina.ibaraki.jp","inashiki.ibaraki.jp","itako.ibaraki.jp","iwama.ibaraki.jp","joso.ibaraki.jp","kamisu.ibaraki.jp","kasama.ibaraki.jp","kashima.ibaraki.jp","kasumigaura.ibaraki.jp","koga.ibaraki.jp","miho.ibaraki.jp","mito.ibaraki.jp","moriya.ibaraki.jp","naka.ibaraki.jp","namegata.ibaraki.jp","oarai.ibaraki.jp","ogawa.ibaraki.jp","omitama.ibaraki.jp","ryugasaki.ibaraki.jp","sakai.ibaraki.jp","sakuragawa.ibaraki.jp","shimodate.ibaraki.jp","shimotsuma.ibaraki.jp","shirosato.ibaraki.jp","sowa.ibaraki.jp","suifu.ibaraki.jp","takahagi.ibaraki.jp","tamatsukuri.ibaraki.jp","tokai.ibaraki.jp","tomobe.ibaraki.jp","tone.ibaraki.jp","toride.ibaraki.jp","tsuchiura.ibaraki.jp","tsukuba.ibaraki.jp","uchihara.ibaraki.jp","ushiku.ibaraki.jp","yachiyo.ibaraki.jp","yamagata.ibaraki.jp","yawara.ibaraki.jp","yuki.ibaraki.jp","anamizu.ishikawa.jp","hakui.ishikawa.jp","hakusan.ishikawa.jp","kaga.ishikawa.jp","kahoku.ishikawa.jp","kanazawa.ishikawa.jp","kawakita.ishikawa.jp","komatsu.ishikawa.jp","nakanoto.ishikawa.jp","nanao.ishikawa.jp","nomi.ishikawa.jp","nonoichi.ishikawa.jp","noto.ishikawa.jp","shika.ishikawa.jp","suzu.ishikawa.jp","tsubata.ishikawa.jp","tsurugi.ishikawa.jp","uchinada.ishikawa.jp","wajima.ishikawa.jp","fudai.iwate.jp","fujisawa.iwate.jp","hanamaki.iwate.jp","hiraizumi.iwate.jp","hirono.iwate.jp","ichinohe.iwate.jp","ichinoseki.iwate.jp","iwaizumi.iwate.jp","iwate.iwate.jp","joboji.iwate.jp","kamaishi.iwate.jp","kanegasaki.iwate.jp","karumai.iwate.jp","kawai.iwate.jp","kitakami.iwate.jp","kuji.iwate.jp","kunohe.iwate.jp","kuzumaki.iwate.jp","miyako.iwate.jp","mizusawa.iwate.jp","morioka.iwate.jp","ninohe.iwate.jp","noda.iwate.jp","ofunato.iwate.jp","oshu.iwate.jp","otsuchi.iwate.jp","rikuzentakata.iwate.jp","shiwa.iwate.jp","shizukuishi.iwate.jp","sumita.iwate.jp","tanohata.iwate.jp","tono.iwate.jp","yahaba.iwate.jp","yamada.iwate.jp","ayagawa.kagawa.jp","higashikagawa.kagawa.jp","kanonji.kagawa.jp","kotohira.kagawa.jp","manno.kagawa.jp","marugame.kagawa.jp","mitoyo.kagawa.jp","naoshima.kagawa.jp","sanuki.kagawa.jp","tadotsu.kagawa.jp","takamatsu.kagawa.jp","tonosho.kagawa.jp","uchinomi.kagawa.jp","utazu.kagawa.jp","zentsuji.kagawa.jp","akune.kagoshima.jp","amami.kagoshima.jp","hioki.kagoshima.jp","isa.kagoshima.jp","isen.kagoshima.jp","izumi.kagoshima.jp","kagoshima.kagoshima.jp","kanoya.kagoshima.jp","kawanabe.kagoshima.jp","kinko.kagoshima.jp","kouyama.kagoshima.jp","makurazaki.kagoshima.jp","matsumoto.kagoshima.jp","minamitane.kagoshima.jp","nakatane.kagoshima.jp","nishinoomote.kagoshima.jp","satsumasendai.kagoshima.jp","soo.kagoshima.jp","tarumizu.kagoshima.jp","yusui.kagoshima.jp","aikawa.kanagawa.jp","atsugi.kanagawa.jp","ayase.kanagawa.jp","chigasaki.kanagawa.jp","ebina.kanagawa.jp","fujisawa.kanagawa.jp","hadano.kanagawa.jp","hakone.kanagawa.jp","hiratsuka.kanagawa.jp","isehara.kanagawa.jp","kaisei.kanagawa.jp","kamakura.kanagawa.jp","kiyokawa.kanagawa.jp","matsuda.kanagawa.jp","minamiashigara.kanagawa.jp","miura.kanagawa.jp","nakai.kanagawa.jp","ninomiya.kanagawa.jp","odawara.kanagawa.jp","oi.kanagawa.jp","oiso.kanagawa.jp","sagamihara.kanagawa.jp","samukawa.kanagawa.jp","tsukui.kanagawa.jp","yamakita.kanagawa.jp","yamato.kanagawa.jp","yokosuka.kanagawa.jp","yugawara.kanagawa.jp","zama.kanagawa.jp","zushi.kanagawa.jp","aki.kochi.jp","geisei.kochi.jp","hidaka.kochi.jp","higashitsuno.kochi.jp","ino.kochi.jp","kagami.kochi.jp","kami.kochi.jp","kitagawa.kochi.jp","kochi.kochi.jp","mihara.kochi.jp","motoyama.kochi.jp","muroto.kochi.jp","nahari.kochi.jp","nakamura.kochi.jp","nankoku.kochi.jp","nishitosa.kochi.jp","niyodogawa.kochi.jp","ochi.kochi.jp","okawa.kochi.jp","otoyo.kochi.jp","otsuki.kochi.jp","sakawa.kochi.jp","sukumo.kochi.jp","susaki.kochi.jp","tosa.kochi.jp","tosashimizu.kochi.jp","toyo.kochi.jp","tsuno.kochi.jp","umaji.kochi.jp","yasuda.kochi.jp","yusuhara.kochi.jp","amakusa.kumamoto.jp","arao.kumamoto.jp","aso.kumamoto.jp","choyo.kumamoto.jp","gyokuto.kumamoto.jp","kamiamakusa.kumamoto.jp","kikuchi.kumamoto.jp","kumamoto.kumamoto.jp","mashiki.kumamoto.jp","mifune.kumamoto.jp","minamata.kumamoto.jp","minamioguni.kumamoto.jp","nagasu.kumamoto.jp","nishihara.kumamoto.jp","oguni.kumamoto.jp","ozu.kumamoto.jp","sumoto.kumamoto.jp","takamori.kumamoto.jp","uki.kumamoto.jp","uto.kumamoto.jp","yamaga.kumamoto.jp","yamato.kumamoto.jp","yatsushiro.kumamoto.jp","ayabe.kyoto.jp","fukuchiyama.kyoto.jp","higashiyama.kyoto.jp","ide.kyoto.jp","ine.kyoto.jp","joyo.kyoto.jp","kameoka.kyoto.jp","kamo.kyoto.jp","kita.kyoto.jp","kizu.kyoto.jp","kumiyama.kyoto.jp","kyotamba.kyoto.jp","kyotanabe.kyoto.jp","kyotango.kyoto.jp","maizuru.kyoto.jp","minami.kyoto.jp","minamiyamashiro.kyoto.jp","miyazu.kyoto.jp","muko.kyoto.jp","nagaokakyo.kyoto.jp","nakagyo.kyoto.jp","nantan.kyoto.jp","oyamazaki.kyoto.jp","sakyo.kyoto.jp","seika.kyoto.jp","tanabe.kyoto.jp","uji.kyoto.jp","ujitawara.kyoto.jp","wazuka.kyoto.jp","yamashina.kyoto.jp","yawata.kyoto.jp","asahi.mie.jp","inabe.mie.jp","ise.mie.jp","kameyama.mie.jp","kawagoe.mie.jp","kiho.mie.jp","kisosaki.mie.jp","kiwa.mie.jp","komono.mie.jp","kumano.mie.jp","kuwana.mie.jp","matsusaka.mie.jp","meiwa.mie.jp","mihama.mie.jp","minamiise.mie.jp","misugi.mie.jp","miyama.mie.jp","nabari.mie.jp","shima.mie.jp","suzuka.mie.jp","tado.mie.jp","taiki.mie.jp","taki.mie.jp","tamaki.mie.jp","toba.mie.jp","tsu.mie.jp","udono.mie.jp","ureshino.mie.jp","watarai.mie.jp","yokkaichi.mie.jp","furukawa.miyagi.jp","higashimatsushima.miyagi.jp","ishinomaki.miyagi.jp","iwanuma.miyagi.jp","kakuda.miyagi.jp","kami.miyagi.jp","kawasaki.miyagi.jp","marumori.miyagi.jp","matsushima.miyagi.jp","minamisanriku.miyagi.jp","misato.miyagi.jp","murata.miyagi.jp","natori.miyagi.jp","ogawara.miyagi.jp","ohira.miyagi.jp","onagawa.miyagi.jp","osaki.miyagi.jp","rifu.miyagi.jp","semine.miyagi.jp","shibata.miyagi.jp","shichikashuku.miyagi.jp","shikama.miyagi.jp","shiogama.miyagi.jp","shiroishi.miyagi.jp","tagajo.miyagi.jp","taiwa.miyagi.jp","tome.miyagi.jp","tomiya.miyagi.jp","wakuya.miyagi.jp","watari.miyagi.jp","yamamoto.miyagi.jp","zao.miyagi.jp","aya.miyazaki.jp","ebino.miyazaki.jp","gokase.miyazaki.jp","hyuga.miyazaki.jp","kadogawa.miyazaki.jp","kawaminami.miyazaki.jp","kijo.miyazaki.jp","kitagawa.miyazaki.jp","kitakata.miyazaki.jp","kitaura.miyazaki.jp","kobayashi.miyazaki.jp","kunitomi.miyazaki.jp","kushima.miyazaki.jp","mimata.miyazaki.jp","miyakonojo.miyazaki.jp","miyazaki.miyazaki.jp","morotsuka.miyazaki.jp","nichinan.miyazaki.jp","nishimera.miyazaki.jp","nobeoka.miyazaki.jp","saito.miyazaki.jp","shiiba.miyazaki.jp","shintomi.miyazaki.jp","takaharu.miyazaki.jp","takanabe.miyazaki.jp","takazaki.miyazaki.jp","tsuno.miyazaki.jp","achi.nagano.jp","agematsu.nagano.jp","anan.nagano.jp","aoki.nagano.jp","asahi.nagano.jp","azumino.nagano.jp","chikuhoku.nagano.jp","chikuma.nagano.jp","chino.nagano.jp","fujimi.nagano.jp","hakuba.nagano.jp","hara.nagano.jp","hiraya.nagano.jp","iida.nagano.jp","iijima.nagano.jp","iiyama.nagano.jp","iizuna.nagano.jp","ikeda.nagano.jp","ikusaka.nagano.jp","ina.nagano.jp","karuizawa.nagano.jp","kawakami.nagano.jp","kiso.nagano.jp","kisofukushima.nagano.jp","kitaaiki.nagano.jp","komagane.nagano.jp","komoro.nagano.jp","matsukawa.nagano.jp","matsumoto.nagano.jp","miasa.nagano.jp","minamiaiki.nagano.jp","minamimaki.nagano.jp","minamiminowa.nagano.jp","minowa.nagano.jp","miyada.nagano.jp","miyota.nagano.jp","mochizuki.nagano.jp","nagano.nagano.jp","nagawa.nagano.jp","nagiso.nagano.jp","nakagawa.nagano.jp","nakano.nagano.jp","nozawaonsen.nagano.jp","obuse.nagano.jp","ogawa.nagano.jp","okaya.nagano.jp","omachi.nagano.jp","omi.nagano.jp","ookuwa.nagano.jp","ooshika.nagano.jp","otaki.nagano.jp","otari.nagano.jp","sakae.nagano.jp","sakaki.nagano.jp","saku.nagano.jp","sakuho.nagano.jp","shimosuwa.nagano.jp","shinanomachi.nagano.jp","shiojiri.nagano.jp","suwa.nagano.jp","suzaka.nagano.jp","takagi.nagano.jp","takamori.nagano.jp","takayama.nagano.jp","tateshina.nagano.jp","tatsuno.nagano.jp","togakushi.nagano.jp","togura.nagano.jp","tomi.nagano.jp","ueda.nagano.jp","wada.nagano.jp","yamagata.nagano.jp","yamanouchi.nagano.jp","yasaka.nagano.jp","yasuoka.nagano.jp","chijiwa.nagasaki.jp","futsu.nagasaki.jp","goto.nagasaki.jp","hasami.nagasaki.jp","hirado.nagasaki.jp","iki.nagasaki.jp","isahaya.nagasaki.jp","kawatana.nagasaki.jp","kuchinotsu.nagasaki.jp","matsuura.nagasaki.jp","nagasaki.nagasaki.jp","obama.nagasaki.jp","omura.nagasaki.jp","oseto.nagasaki.jp","saikai.nagasaki.jp","sasebo.nagasaki.jp","seihi.nagasaki.jp","shimabara.nagasaki.jp","shinkamigoto.nagasaki.jp","togitsu.nagasaki.jp","tsushima.nagasaki.jp","unzen.nagasaki.jp","ando.nara.jp","gose.nara.jp","heguri.nara.jp","higashiyoshino.nara.jp","ikaruga.nara.jp","ikoma.nara.jp","kamikitayama.nara.jp","kanmaki.nara.jp","kashiba.nara.jp","kashihara.nara.jp","katsuragi.nara.jp","kawai.nara.jp","kawakami.nara.jp","kawanishi.nara.jp","koryo.nara.jp","kurotaki.nara.jp","mitsue.nara.jp","miyake.nara.jp","nara.nara.jp","nosegawa.nara.jp","oji.nara.jp","ouda.nara.jp","oyodo.nara.jp","sakurai.nara.jp","sango.nara.jp","shimoichi.nara.jp","shimokitayama.nara.jp","shinjo.nara.jp","soni.nara.jp","takatori.nara.jp","tawaramoto.nara.jp","tenkawa.nara.jp","tenri.nara.jp","uda.nara.jp","yamatokoriyama.nara.jp","yamatotakada.nara.jp","yamazoe.nara.jp","yoshino.nara.jp","aga.niigata.jp","agano.niigata.jp","gosen.niigata.jp","itoigawa.niigata.jp","izumozaki.niigata.jp","joetsu.niigata.jp","kamo.niigata.jp","kariwa.niigata.jp","kashiwazaki.niigata.jp","minamiuonuma.niigata.jp","mitsuke.niigata.jp","muika.niigata.jp","murakami.niigata.jp","myoko.niigata.jp","nagaoka.niigata.jp","niigata.niigata.jp","ojiya.niigata.jp","omi.niigata.jp","sado.niigata.jp","sanjo.niigata.jp","seiro.niigata.jp","seirou.niigata.jp","sekikawa.niigata.jp","shibata.niigata.jp","tagami.niigata.jp","tainai.niigata.jp","tochio.niigata.jp","tokamachi.niigata.jp","tsubame.niigata.jp","tsunan.niigata.jp","uonuma.niigata.jp","yahiko.niigata.jp","yoita.niigata.jp","yuzawa.niigata.jp","beppu.oita.jp","bungoono.oita.jp","bungotakada.oita.jp","hasama.oita.jp","hiji.oita.jp","himeshima.oita.jp","hita.oita.jp","kamitsue.oita.jp","kokonoe.oita.jp","kuju.oita.jp","kunisaki.oita.jp","kusu.oita.jp","oita.oita.jp","saiki.oita.jp","taketa.oita.jp","tsukumi.oita.jp","usa.oita.jp","usuki.oita.jp","yufu.oita.jp","akaiwa.okayama.jp","asakuchi.okayama.jp","bizen.okayama.jp","hayashima.okayama.jp","ibara.okayama.jp","kagamino.okayama.jp","kasaoka.okayama.jp","kibichuo.okayama.jp","kumenan.okayama.jp","kurashiki.okayama.jp","maniwa.okayama.jp","misaki.okayama.jp","nagi.okayama.jp","niimi.okayama.jp","nishiawakura.okayama.jp","okayama.okayama.jp","satosho.okayama.jp","setouchi.okayama.jp","shinjo.okayama.jp","shoo.okayama.jp","soja.okayama.jp","takahashi.okayama.jp","tamano.okayama.jp","tsuyama.okayama.jp","wake.okayama.jp","yakage.okayama.jp","aguni.okinawa.jp","ginowan.okinawa.jp","ginoza.okinawa.jp","gushikami.okinawa.jp","haebaru.okinawa.jp","higashi.okinawa.jp","hirara.okinawa.jp","iheya.okinawa.jp","ishigaki.okinawa.jp","ishikawa.okinawa.jp","itoman.okinawa.jp","izena.okinawa.jp","kadena.okinawa.jp","kin.okinawa.jp","kitadaito.okinawa.jp","kitanakagusuku.okinawa.jp","kumejima.okinawa.jp","kunigami.okinawa.jp","minamidaito.okinawa.jp","motobu.okinawa.jp","nago.okinawa.jp","naha.okinawa.jp","nakagusuku.okinawa.jp","nakijin.okinawa.jp","nanjo.okinawa.jp","nishihara.okinawa.jp","ogimi.okinawa.jp","okinawa.okinawa.jp","onna.okinawa.jp","shimoji.okinawa.jp","taketomi.okinawa.jp","tarama.okinawa.jp","tokashiki.okinawa.jp","tomigusuku.okinawa.jp","tonaki.okinawa.jp","urasoe.okinawa.jp","uruma.okinawa.jp","yaese.okinawa.jp","yomitan.okinawa.jp","yonabaru.okinawa.jp","yonaguni.okinawa.jp","zamami.okinawa.jp","abeno.osaka.jp","chihayaakasaka.osaka.jp","chuo.osaka.jp","daito.osaka.jp","fujiidera.osaka.jp","habikino.osaka.jp","hannan.osaka.jp","higashiosaka.osaka.jp","higashisumiyoshi.osaka.jp","higashiyodogawa.osaka.jp","hirakata.osaka.jp","ibaraki.osaka.jp","ikeda.osaka.jp","izumi.osaka.jp","izumiotsu.osaka.jp","izumisano.osaka.jp","kadoma.osaka.jp","kaizuka.osaka.jp","kanan.osaka.jp","kashiwara.osaka.jp","katano.osaka.jp","kawachinagano.osaka.jp","kishiwada.osaka.jp","kita.osaka.jp","kumatori.osaka.jp","matsubara.osaka.jp","minato.osaka.jp","minoh.osaka.jp","misaki.osaka.jp","moriguchi.osaka.jp","neyagawa.osaka.jp","nishi.osaka.jp","nose.osaka.jp","osakasayama.osaka.jp","sakai.osaka.jp","sayama.osaka.jp","sennan.osaka.jp","settsu.osaka.jp","shijonawate.osaka.jp","shimamoto.osaka.jp","suita.osaka.jp","tadaoka.osaka.jp","taishi.osaka.jp","tajiri.osaka.jp","takaishi.osaka.jp","takatsuki.osaka.jp","tondabayashi.osaka.jp","toyonaka.osaka.jp","toyono.osaka.jp","yao.osaka.jp","ariake.saga.jp","arita.saga.jp","fukudomi.saga.jp","genkai.saga.jp","hamatama.saga.jp","hizen.saga.jp","imari.saga.jp","kamimine.saga.jp","kanzaki.saga.jp","karatsu.saga.jp","kashima.saga.jp","kitagata.saga.jp","kitahata.saga.jp","kiyama.saga.jp","kouhoku.saga.jp","kyuragi.saga.jp","nishiarita.saga.jp","ogi.saga.jp","omachi.saga.jp","ouchi.saga.jp","saga.saga.jp","shiroishi.saga.jp","taku.saga.jp","tara.saga.jp","tosu.saga.jp","yoshinogari.saga.jp","arakawa.saitama.jp","asaka.saitama.jp","chichibu.saitama.jp","fujimi.saitama.jp","fujimino.saitama.jp","fukaya.saitama.jp","hanno.saitama.jp","hanyu.saitama.jp","hasuda.saitama.jp","hatogaya.saitama.jp","hatoyama.saitama.jp","hidaka.saitama.jp","higashichichibu.saitama.jp","higashimatsuyama.saitama.jp","honjo.saitama.jp","ina.saitama.jp","iruma.saitama.jp","iwatsuki.saitama.jp","kamiizumi.saitama.jp","kamikawa.saitama.jp","kamisato.saitama.jp","kasukabe.saitama.jp","kawagoe.saitama.jp","kawaguchi.saitama.jp","kawajima.saitama.jp","kazo.saitama.jp","kitamoto.saitama.jp","koshigaya.saitama.jp","kounosu.saitama.jp","kuki.saitama.jp","kumagaya.saitama.jp","matsubushi.saitama.jp","minano.saitama.jp","misato.saitama.jp","miyashiro.saitama.jp","miyoshi.saitama.jp","moroyama.saitama.jp","nagatoro.saitama.jp","namegawa.saitama.jp","niiza.saitama.jp","ogano.saitama.jp","ogawa.saitama.jp","ogose.saitama.jp","okegawa.saitama.jp","omiya.saitama.jp","otaki.saitama.jp","ranzan.saitama.jp","ryokami.saitama.jp","saitama.saitama.jp","sakado.saitama.jp","satte.saitama.jp","sayama.saitama.jp","shiki.saitama.jp","shiraoka.saitama.jp","soka.saitama.jp","sugito.saitama.jp","toda.saitama.jp","tokigawa.saitama.jp","tokorozawa.saitama.jp","tsurugashima.saitama.jp","urawa.saitama.jp","warabi.saitama.jp","yashio.saitama.jp","yokoze.saitama.jp","yono.saitama.jp","yorii.saitama.jp","yoshida.saitama.jp","yoshikawa.saitama.jp","yoshimi.saitama.jp","aisho.shiga.jp","gamo.shiga.jp","higashiomi.shiga.jp","hikone.shiga.jp","koka.shiga.jp","konan.shiga.jp","kosei.shiga.jp","koto.shiga.jp","kusatsu.shiga.jp","maibara.shiga.jp","moriyama.shiga.jp","nagahama.shiga.jp","nishiazai.shiga.jp","notogawa.shiga.jp","omihachiman.shiga.jp","otsu.shiga.jp","ritto.shiga.jp","ryuoh.shiga.jp","takashima.shiga.jp","takatsuki.shiga.jp","torahime.shiga.jp","toyosato.shiga.jp","yasu.shiga.jp","akagi.shimane.jp","ama.shimane.jp","gotsu.shimane.jp","hamada.shimane.jp","higashiizumo.shimane.jp","hikawa.shimane.jp","hikimi.shimane.jp","izumo.shimane.jp","kakinoki.shimane.jp","masuda.shimane.jp","matsue.shimane.jp","misato.shimane.jp","nishinoshima.shimane.jp","ohda.shimane.jp","okinoshima.shimane.jp","okuizumo.shimane.jp","shimane.shimane.jp","tamayu.shimane.jp","tsuwano.shimane.jp","unnan.shimane.jp","yakumo.shimane.jp","yasugi.shimane.jp","yatsuka.shimane.jp","arai.shizuoka.jp","atami.shizuoka.jp","fuji.shizuoka.jp","fujieda.shizuoka.jp","fujikawa.shizuoka.jp","fujinomiya.shizuoka.jp","fukuroi.shizuoka.jp","gotemba.shizuoka.jp","haibara.shizuoka.jp","hamamatsu.shizuoka.jp","higashiizu.shizuoka.jp","ito.shizuoka.jp","iwata.shizuoka.jp","izu.shizuoka.jp","izunokuni.shizuoka.jp","kakegawa.shizuoka.jp","kannami.shizuoka.jp","kawanehon.shizuoka.jp","kawazu.shizuoka.jp","kikugawa.shizuoka.jp","kosai.shizuoka.jp","makinohara.shizuoka.jp","matsuzaki.shizuoka.jp","minamiizu.shizuoka.jp","mishima.shizuoka.jp","morimachi.shizuoka.jp","nishiizu.shizuoka.jp","numazu.shizuoka.jp","omaezaki.shizuoka.jp","shimada.shizuoka.jp","shimizu.shizuoka.jp","shimoda.shizuoka.jp","shizuoka.shizuoka.jp","susono.shizuoka.jp","yaizu.shizuoka.jp","yoshida.shizuoka.jp","ashikaga.tochigi.jp","bato.tochigi.jp","haga.tochigi.jp","ichikai.tochigi.jp","iwafune.tochigi.jp","kaminokawa.tochigi.jp","kanuma.tochigi.jp","karasuyama.tochigi.jp","kuroiso.tochigi.jp","mashiko.tochigi.jp","mibu.tochigi.jp","moka.tochigi.jp","motegi.tochigi.jp","nasu.tochigi.jp","nasushiobara.tochigi.jp","nikko.tochigi.jp","nishikata.tochigi.jp","nogi.tochigi.jp","ohira.tochigi.jp","ohtawara.tochigi.jp","oyama.tochigi.jp","sakura.tochigi.jp","sano.tochigi.jp","shimotsuke.tochigi.jp","shioya.tochigi.jp","takanezawa.tochigi.jp","tochigi.tochigi.jp","tsuga.tochigi.jp","ujiie.tochigi.jp","utsunomiya.tochigi.jp","yaita.tochigi.jp","aizumi.tokushima.jp","anan.tokushima.jp","ichiba.tokushima.jp","itano.tokushima.jp","kainan.tokushima.jp","komatsushima.tokushima.jp","matsushige.tokushima.jp","mima.tokushima.jp","minami.tokushima.jp","miyoshi.tokushima.jp","mugi.tokushima.jp","nakagawa.tokushima.jp","naruto.tokushima.jp","sanagochi.tokushima.jp","shishikui.tokushima.jp","tokushima.tokushima.jp","wajiki.tokushima.jp","adachi.tokyo.jp","akiruno.tokyo.jp","akishima.tokyo.jp","aogashima.tokyo.jp","arakawa.tokyo.jp","bunkyo.tokyo.jp","chiyoda.tokyo.jp","chofu.tokyo.jp","chuo.tokyo.jp","edogawa.tokyo.jp","fuchu.tokyo.jp","fussa.tokyo.jp","hachijo.tokyo.jp","hachioji.tokyo.jp","hamura.tokyo.jp","higashikurume.tokyo.jp","higashimurayama.tokyo.jp","higashiyamato.tokyo.jp","hino.tokyo.jp","hinode.tokyo.jp","hinohara.tokyo.jp","inagi.tokyo.jp","itabashi.tokyo.jp","katsushika.tokyo.jp","kita.tokyo.jp","kiyose.tokyo.jp","kodaira.tokyo.jp","koganei.tokyo.jp","kokubunji.tokyo.jp","komae.tokyo.jp","koto.tokyo.jp","kouzushima.tokyo.jp","kunitachi.tokyo.jp","machida.tokyo.jp","meguro.tokyo.jp","minato.tokyo.jp","mitaka.tokyo.jp","mizuho.tokyo.jp","musashimurayama.tokyo.jp","musashino.tokyo.jp","nakano.tokyo.jp","nerima.tokyo.jp","ogasawara.tokyo.jp","okutama.tokyo.jp","ome.tokyo.jp","oshima.tokyo.jp","ota.tokyo.jp","setagaya.tokyo.jp","shibuya.tokyo.jp","shinagawa.tokyo.jp","shinjuku.tokyo.jp","suginami.tokyo.jp","sumida.tokyo.jp","tachikawa.tokyo.jp","taito.tokyo.jp","tama.tokyo.jp","toshima.tokyo.jp","chizu.tottori.jp","hino.tottori.jp","kawahara.tottori.jp","koge.tottori.jp","kotoura.tottori.jp","misasa.tottori.jp","nanbu.tottori.jp","nichinan.tottori.jp","sakaiminato.tottori.jp","tottori.tottori.jp","wakasa.tottori.jp","yazu.tottori.jp","yonago.tottori.jp","asahi.toyama.jp","fuchu.toyama.jp","fukumitsu.toyama.jp","funahashi.toyama.jp","himi.toyama.jp","imizu.toyama.jp","inami.toyama.jp","johana.toyama.jp","kamiichi.toyama.jp","kurobe.toyama.jp","nakaniikawa.toyama.jp","namerikawa.toyama.jp","nanto.toyama.jp","nyuzen.toyama.jp","oyabe.toyama.jp","taira.toyama.jp","takaoka.toyama.jp","tateyama.toyama.jp","toga.toyama.jp","tonami.toyama.jp","toyama.toyama.jp","unazuki.toyama.jp","uozu.toyama.jp","yamada.toyama.jp","arida.wakayama.jp","aridagawa.wakayama.jp","gobo.wakayama.jp","hashimoto.wakayama.jp","hidaka.wakayama.jp","hirogawa.wakayama.jp","inami.wakayama.jp","iwade.wakayama.jp","kainan.wakayama.jp","kamitonda.wakayama.jp","katsuragi.wakayama.jp","kimino.wakayama.jp","kinokawa.wakayama.jp","kitayama.wakayama.jp","koya.wakayama.jp","koza.wakayama.jp","kozagawa.wakayama.jp","kudoyama.wakayama.jp","kushimoto.wakayama.jp","mihama.wakayama.jp","misato.wakayama.jp","nachikatsuura.wakayama.jp","shingu.wakayama.jp","shirahama.wakayama.jp","taiji.wakayama.jp","tanabe.wakayama.jp","wakayama.wakayama.jp","yuasa.wakayama.jp","yura.wakayama.jp","asahi.yamagata.jp","funagata.yamagata.jp","higashine.yamagata.jp","iide.yamagata.jp","kahoku.yamagata.jp","kaminoyama.yamagata.jp","kaneyama.yamagata.jp","kawanishi.yamagata.jp","mamurogawa.yamagata.jp","mikawa.yamagata.jp","murayama.yamagata.jp","nagai.yamagata.jp","nakayama.yamagata.jp","nanyo.yamagata.jp","nishikawa.yamagata.jp","obanazawa.yamagata.jp","oe.yamagata.jp","oguni.yamagata.jp","ohkura.yamagata.jp","oishida.yamagata.jp","sagae.yamagata.jp","sakata.yamagata.jp","sakegawa.yamagata.jp","shinjo.yamagata.jp","shirataka.yamagata.jp","shonai.yamagata.jp","takahata.yamagata.jp","tendo.yamagata.jp","tozawa.yamagata.jp","tsuruoka.yamagata.jp","yamagata.yamagata.jp","yamanobe.yamagata.jp","yonezawa.yamagata.jp","yuza.yamagata.jp","abu.yamaguchi.jp","hagi.yamaguchi.jp","hikari.yamaguchi.jp","hofu.yamaguchi.jp","iwakuni.yamaguchi.jp","kudamatsu.yamaguchi.jp","mitou.yamaguchi.jp","nagato.yamaguchi.jp","oshima.yamaguchi.jp","shimonoseki.yamaguchi.jp","shunan.yamaguchi.jp","tabuse.yamaguchi.jp","tokuyama.yamaguchi.jp","toyota.yamaguchi.jp","ube.yamaguchi.jp","yuu.yamaguchi.jp","chuo.yamanashi.jp","doshi.yamanashi.jp","fuefuki.yamanashi.jp","fujikawa.yamanashi.jp","fujikawaguchiko.yamanashi.jp","fujiyoshida.yamanashi.jp","hayakawa.yamanashi.jp","hokuto.yamanashi.jp","ichikawamisato.yamanashi.jp","kai.yamanashi.jp","kofu.yamanashi.jp","koshu.yamanashi.jp","kosuge.yamanashi.jp","minami-alps.yamanashi.jp","minobu.yamanashi.jp","nakamichi.yamanashi.jp","nanbu.yamanashi.jp","narusawa.yamanashi.jp","nirasaki.yamanashi.jp","nishikatsura.yamanashi.jp","oshino.yamanashi.jp","otsuki.yamanashi.jp","showa.yamanashi.jp","tabayama.yamanashi.jp","tsuru.yamanashi.jp","uenohara.yamanashi.jp","yamanakako.yamanashi.jp","yamanashi.yamanashi.jp","ke","ac.ke","co.ke","go.ke","info.ke","me.ke","mobi.ke","ne.ke","or.ke","sc.ke","kg","org.kg","net.kg","com.kg","edu.kg","gov.kg","mil.kg","*.kh","ki","edu.ki","biz.ki","net.ki","org.ki","gov.ki","info.ki","com.ki","km","org.km","nom.km","gov.km","prd.km","tm.km","edu.km","mil.km","ass.km","com.km","coop.km","asso.km","presse.km","medecin.km","notaires.km","pharmaciens.km","veterinaire.km","gouv.km","kn","net.kn","org.kn","edu.kn","gov.kn","kp","com.kp","edu.kp","gov.kp","org.kp","rep.kp","tra.kp","kr","ac.kr","co.kr","es.kr","go.kr","hs.kr","kg.kr","mil.kr","ms.kr","ne.kr","or.kr","pe.kr","re.kr","sc.kr","busan.kr","chungbuk.kr","chungnam.kr","daegu.kr","daejeon.kr","gangwon.kr","gwangju.kr","gyeongbuk.kr","gyeonggi.kr","gyeongnam.kr","incheon.kr","jeju.kr","jeonbuk.kr","jeonnam.kr","seoul.kr","ulsan.kr","kw","com.kw","edu.kw","emb.kw","gov.kw","ind.kw","net.kw","org.kw","ky","edu.ky","gov.ky","com.ky","org.ky","net.ky","kz","org.kz","edu.kz","net.kz","gov.kz","mil.kz","com.kz","la","int.la","net.la","info.la","edu.la","gov.la","per.la","com.la","org.la","lb","com.lb","edu.lb","gov.lb","net.lb","org.lb","lc","com.lc","net.lc","co.lc","org.lc","edu.lc","gov.lc","li","lk","gov.lk","sch.lk","net.lk","int.lk","com.lk","org.lk","edu.lk","ngo.lk","soc.lk","web.lk","ltd.lk","assn.lk","grp.lk","hotel.lk","ac.lk","lr","com.lr","edu.lr","gov.lr","org.lr","net.lr","ls","co.ls","org.ls","lt","gov.lt","lu","lv","com.lv","edu.lv","gov.lv","org.lv","mil.lv","id.lv","net.lv","asn.lv","conf.lv","ly","com.ly","net.ly","gov.ly","plc.ly","edu.ly","sch.ly","med.ly","org.ly","id.ly","ma","co.ma","net.ma","gov.ma","org.ma","ac.ma","press.ma","mc","tm.mc","asso.mc","md","me","co.me","net.me","org.me","edu.me","ac.me","gov.me","its.me","priv.me","mg","org.mg","nom.mg","gov.mg","prd.mg","tm.mg","edu.mg","mil.mg","com.mg","co.mg","mh","mil","mk","com.mk","org.mk","net.mk","edu.mk","gov.mk","inf.mk","name.mk","ml","com.ml","edu.ml","gouv.ml","gov.ml","net.ml","org.ml","presse.ml","*.mm","mn","gov.mn","edu.mn","org.mn","mo","com.mo","net.mo","org.mo","edu.mo","gov.mo","mobi","mp","mq","mr","gov.mr","ms","com.ms","edu.ms","gov.ms","net.ms","org.ms","mt","com.mt","edu.mt","net.mt","org.mt","mu","com.mu","net.mu","org.mu","gov.mu","ac.mu","co.mu","or.mu","museum","academy.museum","agriculture.museum","air.museum","airguard.museum","alabama.museum","alaska.museum","amber.museum","ambulance.museum","american.museum","americana.museum","americanantiques.museum","americanart.museum","amsterdam.museum","and.museum","annefrank.museum","anthro.museum","anthropology.museum","antiques.museum","aquarium.museum","arboretum.museum","archaeological.museum","archaeology.museum","architecture.museum","art.museum","artanddesign.museum","artcenter.museum","artdeco.museum","arteducation.museum","artgallery.museum","arts.museum","artsandcrafts.museum","asmatart.museum","assassination.museum","assisi.museum","association.museum","astronomy.museum","atlanta.museum","austin.museum","australia.museum","automotive.museum","aviation.museum","axis.museum","badajoz.museum","baghdad.museum","bahn.museum","bale.museum","baltimore.museum","barcelona.museum","baseball.museum","basel.museum","baths.museum","bauern.museum","beauxarts.museum","beeldengeluid.museum","bellevue.museum","bergbau.museum","berkeley.museum","berlin.museum","bern.museum","bible.museum","bilbao.museum","bill.museum","birdart.museum","birthplace.museum","bonn.museum","boston.museum","botanical.museum","botanicalgarden.museum","botanicgarden.museum","botany.museum","brandywinevalley.museum","brasil.museum","bristol.museum","british.museum","britishcolumbia.museum","broadcast.museum","brunel.museum","brussel.museum","brussels.museum","bruxelles.museum","building.museum","burghof.museum","bus.museum","bushey.museum","cadaques.museum","california.museum","cambridge.museum","can.museum","canada.museum","capebreton.museum","carrier.museum","cartoonart.museum","casadelamoneda.museum","castle.museum","castres.museum","celtic.museum","center.museum","chattanooga.museum","cheltenham.museum","chesapeakebay.museum","chicago.museum","children.museum","childrens.museum","childrensgarden.museum","chiropractic.museum","chocolate.museum","christiansburg.museum","cincinnati.museum","cinema.museum","circus.museum","civilisation.museum","civilization.museum","civilwar.museum","clinton.museum","clock.museum","coal.museum","coastaldefence.museum","cody.museum","coldwar.museum","collection.museum","colonialwilliamsburg.museum","coloradoplateau.museum","columbia.museum","columbus.museum","communication.museum","communications.museum","community.museum","computer.museum","computerhistory.museum","comunicações.museum","contemporary.museum","contemporaryart.museum","convent.museum","copenhagen.museum","corporation.museum","correios-e-telecomunicações.museum","corvette.museum","costume.museum","countryestate.museum","county.museum","crafts.museum","cranbrook.museum","creation.museum","cultural.museum","culturalcenter.museum","culture.museum","cyber.museum","cymru.museum","dali.museum","dallas.museum","database.museum","ddr.museum","decorativearts.museum","delaware.museum","delmenhorst.museum","denmark.museum","depot.museum","design.museum","detroit.museum","dinosaur.museum","discovery.museum","dolls.museum","donostia.museum","durham.museum","eastafrica.museum","eastcoast.museum","education.museum","educational.museum","egyptian.museum","eisenbahn.museum","elburg.museum","elvendrell.museum","embroidery.museum","encyclopedic.museum","england.museum","entomology.museum","environment.museum","environmentalconservation.museum","epilepsy.museum","essex.museum","estate.museum","ethnology.museum","exeter.museum","exhibition.museum","family.museum","farm.museum","farmequipment.museum","farmers.museum","farmstead.museum","field.museum","figueres.museum","filatelia.museum","film.museum","fineart.museum","finearts.museum","finland.museum","flanders.museum","florida.museum","force.museum","fortmissoula.museum","fortworth.museum","foundation.museum","francaise.museum","frankfurt.museum","franziskaner.museum","freemasonry.museum","freiburg.museum","fribourg.museum","frog.museum","fundacio.museum","furniture.museum","gallery.museum","garden.museum","gateway.museum","geelvinck.museum","gemological.museum","geology.museum","georgia.museum","giessen.museum","glas.museum","glass.museum","gorge.museum","grandrapids.museum","graz.museum","guernsey.museum","halloffame.museum","hamburg.museum","handson.museum","harvestcelebration.museum","hawaii.museum","health.museum","heimatunduhren.museum","hellas.museum","helsinki.museum","hembygdsforbund.museum","heritage.museum","histoire.museum","historical.museum","historicalsociety.museum","historichouses.museum","historisch.museum","historisches.museum","history.museum","historyofscience.museum","horology.museum","house.museum","humanities.museum","illustration.museum","imageandsound.museum","indian.museum","indiana.museum","indianapolis.museum","indianmarket.museum","intelligence.museum","interactive.museum","iraq.museum","iron.museum","isleofman.museum","jamison.museum","jefferson.museum","jerusalem.museum","jewelry.museum","jewish.museum","jewishart.museum","jfk.museum","journalism.museum","judaica.museum","judygarland.museum","juedisches.museum","juif.museum","karate.museum","karikatur.museum","kids.museum","koebenhavn.museum","koeln.museum","kunst.museum","kunstsammlung.museum","kunstunddesign.museum","labor.museum","labour.museum","lajolla.museum","lancashire.museum","landes.museum","lans.museum","läns.museum","larsson.museum","lewismiller.museum","lincoln.museum","linz.museum","living.museum","livinghistory.museum","localhistory.museum","london.museum","losangeles.museum","louvre.museum","loyalist.museum","lucerne.museum","luxembourg.museum","luzern.museum","mad.museum","madrid.museum","mallorca.museum","manchester.museum","mansion.museum","mansions.museum","manx.museum","marburg.museum","maritime.museum","maritimo.museum","maryland.museum","marylhurst.museum","media.museum","medical.museum","medizinhistorisches.museum","meeres.museum","memorial.museum","mesaverde.museum","michigan.museum","midatlantic.museum","military.museum","mill.museum","miners.museum","mining.museum","minnesota.museum","missile.museum","missoula.museum","modern.museum","moma.museum","money.museum","monmouth.museum","monticello.museum","montreal.museum","moscow.museum","motorcycle.museum","muenchen.museum","muenster.museum","mulhouse.museum","muncie.museum","museet.museum","museumcenter.museum","museumvereniging.museum","music.museum","national.museum","nationalfirearms.museum","nationalheritage.museum","nativeamerican.museum","naturalhistory.museum","naturalhistorymuseum.museum","naturalsciences.museum","nature.museum","naturhistorisches.museum","natuurwetenschappen.museum","naumburg.museum","naval.museum","nebraska.museum","neues.museum","newhampshire.museum","newjersey.museum","newmexico.museum","newport.museum","newspaper.museum","newyork.museum","niepce.museum","norfolk.museum","north.museum","nrw.museum","nuernberg.museum","nuremberg.museum","nyc.museum","nyny.museum","oceanographic.museum","oceanographique.museum","omaha.museum","online.museum","ontario.museum","openair.museum","oregon.museum","oregontrail.museum","otago.museum","oxford.museum","pacific.museum","paderborn.museum","palace.museum","paleo.museum","palmsprings.museum","panama.museum","paris.museum","pasadena.museum","pharmacy.museum","philadelphia.museum","philadelphiaarea.museum","philately.museum","phoenix.museum","photography.museum","pilots.museum","pittsburgh.museum","planetarium.museum","plantation.museum","plants.museum","plaza.museum","portal.museum","portland.museum","portlligat.museum","posts-and-telecommunications.museum","preservation.museum","presidio.museum","press.museum","project.museum","public.museum","pubol.museum","quebec.museum","railroad.museum","railway.museum","research.museum","resistance.museum","riodejaneiro.museum","rochester.museum","rockart.museum","roma.museum","russia.museum","saintlouis.museum","salem.museum","salvadordali.museum","salzburg.museum","sandiego.museum","sanfrancisco.museum","santabarbara.museum","santacruz.museum","santafe.museum","saskatchewan.museum","satx.museum","savannahga.museum","schlesisches.museum","schoenbrunn.museum","schokoladen.museum","school.museum","schweiz.museum","science.museum","scienceandhistory.museum","scienceandindustry.museum","sciencecenter.museum","sciencecenters.museum","science-fiction.museum","sciencehistory.museum","sciences.museum","sciencesnaturelles.museum","scotland.museum","seaport.museum","settlement.museum","settlers.museum","shell.museum","sherbrooke.museum","sibenik.museum","silk.museum","ski.museum","skole.museum","society.museum","sologne.museum","soundandvision.museum","southcarolina.museum","southwest.museum","space.museum","spy.museum","square.museum","stadt.museum","stalbans.museum","starnberg.museum","state.museum","stateofdelaware.museum","station.museum","steam.museum","steiermark.museum","stjohn.museum","stockholm.museum","stpetersburg.museum","stuttgart.museum","suisse.museum","surgeonshall.museum","surrey.museum","svizzera.museum","sweden.museum","sydney.museum","tank.museum","tcm.museum","technology.museum","telekommunikation.museum","television.museum","texas.museum","textile.museum","theater.museum","time.museum","timekeeping.museum","topology.museum","torino.museum","touch.museum","town.museum","transport.museum","tree.museum","trolley.museum","trust.museum","trustee.museum","uhren.museum","ulm.museum","undersea.museum","university.museum","usa.museum","usantiques.museum","usarts.museum","uscountryestate.museum","usculture.museum","usdecorativearts.museum","usgarden.museum","ushistory.museum","ushuaia.museum","uslivinghistory.museum","utah.museum","uvic.museum","valley.museum","vantaa.museum","versailles.museum","viking.museum","village.museum","virginia.museum","virtual.museum","virtuel.museum","vlaanderen.museum","volkenkunde.museum","wales.museum","wallonie.museum","war.museum","washingtondc.museum","watchandclock.museum","watch-and-clock.museum","western.museum","westfalen.museum","whaling.museum","wildlife.museum","williamsburg.museum","windmill.museum","workshop.museum","york.museum","yorkshire.museum","yosemite.museum","youth.museum","zoological.museum","zoology.museum","ירושלים.museum","иком.museum","mv","aero.mv","biz.mv","com.mv","coop.mv","edu.mv","gov.mv","info.mv","int.mv","mil.mv","museum.mv","name.mv","net.mv","org.mv","pro.mv","mw","ac.mw","biz.mw","co.mw","com.mw","coop.mw","edu.mw","gov.mw","int.mw","museum.mw","net.mw","org.mw","mx","com.mx","org.mx","gob.mx","edu.mx","net.mx","my","com.my","net.my","org.my","gov.my","edu.my","mil.my","name.my","mz","ac.mz","adv.mz","co.mz","edu.mz","gov.mz","mil.mz","net.mz","org.mz","na","info.na","pro.na","name.na","school.na","or.na","dr.na","us.na","mx.na","ca.na","in.na","cc.na","tv.na","ws.na","mobi.na","co.na","com.na","org.na","name","nc","asso.nc","nom.nc","ne","net","nf","com.nf","net.nf","per.nf","rec.nf","web.nf","arts.nf","firm.nf","info.nf","other.nf","store.nf","ng","com.ng","edu.ng","gov.ng","i.ng","mil.ng","mobi.ng","name.ng","net.ng","org.ng","sch.ng","ni","ac.ni","biz.ni","co.ni","com.ni","edu.ni","gob.ni","in.ni","info.ni","int.ni","mil.ni","net.ni","nom.ni","org.ni","web.ni","nl","bv.nl","no","fhs.no","vgs.no","fylkesbibl.no","folkebibl.no","museum.no","idrett.no","priv.no","mil.no","stat.no","dep.no","kommune.no","herad.no","aa.no","ah.no","bu.no","fm.no","hl.no","hm.no","jan-mayen.no","mr.no","nl.no","nt.no","of.no","ol.no","oslo.no","rl.no","sf.no","st.no","svalbard.no","tm.no","tr.no","va.no","vf.no","gs.aa.no","gs.ah.no","gs.bu.no","gs.fm.no","gs.hl.no","gs.hm.no","gs.jan-mayen.no","gs.mr.no","gs.nl.no","gs.nt.no","gs.of.no","gs.ol.no","gs.oslo.no","gs.rl.no","gs.sf.no","gs.st.no","gs.svalbard.no","gs.tm.no","gs.tr.no","gs.va.no","gs.vf.no","akrehamn.no","åkrehamn.no","algard.no","ålgård.no","arna.no","brumunddal.no","bryne.no","bronnoysund.no","brønnøysund.no","drobak.no","drøbak.no","egersund.no","fetsund.no","floro.no","florø.no","fredrikstad.no","hokksund.no","honefoss.no","hønefoss.no","jessheim.no","jorpeland.no","jørpeland.no","kirkenes.no","kopervik.no","krokstadelva.no","langevag.no","langevåg.no","leirvik.no","mjondalen.no","mjøndalen.no","mo-i-rana.no","mosjoen.no","mosjøen.no","nesoddtangen.no","orkanger.no","osoyro.no","osøyro.no","raholt.no","råholt.no","sandnessjoen.no","sandnessjøen.no","skedsmokorset.no","slattum.no","spjelkavik.no","stathelle.no","stavern.no","stjordalshalsen.no","stjørdalshalsen.no","tananger.no","tranby.no","vossevangen.no","afjord.no","åfjord.no","agdenes.no","al.no","ål.no","alesund.no","ålesund.no","alstahaug.no","alta.no","áltá.no","alaheadju.no","álaheadju.no","alvdal.no","amli.no","åmli.no","amot.no","åmot.no","andebu.no","andoy.no","andøy.no","andasuolo.no","ardal.no","årdal.no","aremark.no","arendal.no","ås.no","aseral.no","åseral.no","asker.no","askim.no","askvoll.no","askoy.no","askøy.no","asnes.no","åsnes.no","audnedaln.no","aukra.no","aure.no","aurland.no","aurskog-holand.no","aurskog-høland.no","austevoll.no","austrheim.no","averoy.no","averøy.no","balestrand.no","ballangen.no","balat.no","bálát.no","balsfjord.no","bahccavuotna.no","báhccavuotna.no","bamble.no","bardu.no","beardu.no","beiarn.no","bajddar.no","bájddar.no","baidar.no","báidár.no","berg.no","bergen.no","berlevag.no","berlevåg.no","bearalvahki.no","bearalváhki.no","bindal.no","birkenes.no","bjarkoy.no","bjarkøy.no","bjerkreim.no","bjugn.no","bodo.no","bodø.no","badaddja.no","bådåddjå.no","budejju.no","bokn.no","bremanger.no","bronnoy.no","brønnøy.no","bygland.no","bykle.no","barum.no","bærum.no","bo.telemark.no","bø.telemark.no","bo.nordland.no","bø.nordland.no","bievat.no","bievát.no","bomlo.no","bømlo.no","batsfjord.no","båtsfjord.no","bahcavuotna.no","báhcavuotna.no","dovre.no","drammen.no","drangedal.no","dyroy.no","dyrøy.no","donna.no","dønna.no","eid.no","eidfjord.no","eidsberg.no","eidskog.no","eidsvoll.no","eigersund.no","elverum.no","enebakk.no","engerdal.no","etne.no","etnedal.no","evenes.no","evenassi.no","evenášši.no","evje-og-hornnes.no","farsund.no","fauske.no","fuossko.no","fuoisku.no","fedje.no","fet.no","finnoy.no","finnøy.no","fitjar.no","fjaler.no","fjell.no","flakstad.no","flatanger.no","flekkefjord.no","flesberg.no","flora.no","fla.no","flå.no","folldal.no","forsand.no","fosnes.no","frei.no","frogn.no","froland.no","frosta.no","frana.no","fræna.no","froya.no","frøya.no","fusa.no","fyresdal.no","forde.no","førde.no","gamvik.no","gangaviika.no","gáŋgaviika.no","gaular.no","gausdal.no","gildeskal.no","gildeskål.no","giske.no","gjemnes.no","gjerdrum.no","gjerstad.no","gjesdal.no","gjovik.no","gjøvik.no","gloppen.no","gol.no","gran.no","grane.no","granvin.no","gratangen.no","grimstad.no","grong.no","kraanghke.no","kråanghke.no","grue.no","gulen.no","hadsel.no","halden.no","halsa.no","hamar.no","hamaroy.no","habmer.no","hábmer.no","hapmir.no","hápmir.no","hammerfest.no","hammarfeasta.no","hámmárfeasta.no","haram.no","hareid.no","harstad.no","hasvik.no","aknoluokta.no","ákŋoluokta.no","hattfjelldal.no","aarborte.no","haugesund.no","hemne.no","hemnes.no","hemsedal.no","heroy.more-og-romsdal.no","herøy.møre-og-romsdal.no","heroy.nordland.no","herøy.nordland.no","hitra.no","hjartdal.no","hjelmeland.no","hobol.no","hobøl.no","hof.no","hol.no","hole.no","holmestrand.no","holtalen.no","holtålen.no","hornindal.no","horten.no","hurdal.no","hurum.no","hvaler.no","hyllestad.no","hagebostad.no","hægebostad.no","hoyanger.no","høyanger.no","hoylandet.no","høylandet.no","ha.no","hå.no","ibestad.no","inderoy.no","inderøy.no","iveland.no","jevnaker.no","jondal.no","jolster.no","jølster.no","karasjok.no","karasjohka.no","kárášjohka.no","karlsoy.no","galsa.no","gálsá.no","karmoy.no","karmøy.no","kautokeino.no","guovdageaidnu.no","klepp.no","klabu.no","klæbu.no","kongsberg.no","kongsvinger.no","kragero.no","kragerø.no","kristiansand.no","kristiansund.no","krodsherad.no","krødsherad.no","kvalsund.no","rahkkeravju.no","ráhkkerávju.no","kvam.no","kvinesdal.no","kvinnherad.no","kviteseid.no","kvitsoy.no","kvitsøy.no","kvafjord.no","kvæfjord.no","giehtavuoatna.no","kvanangen.no","kvænangen.no","navuotna.no","návuotna.no","kafjord.no","kåfjord.no","gaivuotna.no","gáivuotna.no","larvik.no","lavangen.no","lavagis.no","loabat.no","loabát.no","lebesby.no","davvesiida.no","leikanger.no","leirfjord.no","leka.no","leksvik.no","lenvik.no","leangaviika.no","leaŋgaviika.no","lesja.no","levanger.no","lier.no","lierne.no","lillehammer.no","lillesand.no","lindesnes.no","lindas.no","lindås.no","lom.no","loppa.no","lahppi.no","láhppi.no","lund.no","lunner.no","luroy.no","lurøy.no","luster.no","lyngdal.no","lyngen.no","ivgu.no","lardal.no","lerdal.no","lærdal.no","lodingen.no","lødingen.no","lorenskog.no","lørenskog.no","loten.no","løten.no","malvik.no","masoy.no","måsøy.no","muosat.no","muosát.no","mandal.no","marker.no","marnardal.no","masfjorden.no","meland.no","meldal.no","melhus.no","meloy.no","meløy.no","meraker.no","meråker.no","moareke.no","moåreke.no","midsund.no","midtre-gauldal.no","modalen.no","modum.no","molde.no","moskenes.no","moss.no","mosvik.no","malselv.no","målselv.no","malatvuopmi.no","málatvuopmi.no","namdalseid.no","aejrie.no","namsos.no","namsskogan.no","naamesjevuemie.no","nååmesjevuemie.no","laakesvuemie.no","nannestad.no","narvik.no","narviika.no","naustdal.no","nedre-eiker.no","nes.akershus.no","nes.buskerud.no","nesna.no","nesodden.no","nesseby.no","unjarga.no","unjárga.no","nesset.no","nissedal.no","nittedal.no","nord-aurdal.no","nord-fron.no","nord-odal.no","norddal.no","nordkapp.no","davvenjarga.no","davvenjárga.no","nordre-land.no","nordreisa.no","raisa.no","ráisa.no","nore-og-uvdal.no","notodden.no","naroy.no","nærøy.no","notteroy.no","nøtterøy.no","odda.no","oksnes.no","øksnes.no","oppdal.no","oppegard.no","oppegård.no","orkdal.no","orland.no","ørland.no","orskog.no","ørskog.no","orsta.no","ørsta.no","os.hedmark.no","os.hordaland.no","osen.no","osteroy.no","osterøy.no","ostre-toten.no","østre-toten.no","overhalla.no","ovre-eiker.no","øvre-eiker.no","oyer.no","øyer.no","oygarden.no","øygarden.no","oystre-slidre.no","øystre-slidre.no","porsanger.no","porsangu.no","porsáŋgu.no","porsgrunn.no","radoy.no","radøy.no","rakkestad.no","rana.no","ruovat.no","randaberg.no","rauma.no","rendalen.no","rennebu.no","rennesoy.no","rennesøy.no","rindal.no","ringebu.no","ringerike.no","ringsaker.no","rissa.no","risor.no","risør.no","roan.no","rollag.no","rygge.no","ralingen.no","rælingen.no","rodoy.no","rødøy.no","romskog.no","rømskog.no","roros.no","røros.no","rost.no","røst.no","royken.no","røyken.no","royrvik.no","røyrvik.no","rade.no","råde.no","salangen.no","siellak.no","saltdal.no","salat.no","sálát.no","sálat.no","samnanger.no","sande.more-og-romsdal.no","sande.møre-og-romsdal.no","sande.vestfold.no","sandefjord.no","sandnes.no","sandoy.no","sandøy.no","sarpsborg.no","sauda.no","sauherad.no","sel.no","selbu.no","selje.no","seljord.no","sigdal.no","siljan.no","sirdal.no","skaun.no","skedsmo.no","ski.no","skien.no","skiptvet.no","skjervoy.no","skjervøy.no","skierva.no","skiervá.no","skjak.no","skjåk.no","skodje.no","skanland.no","skånland.no","skanit.no","skánit.no","smola.no","smøla.no","snillfjord.no","snasa.no","snåsa.no","snoasa.no","snaase.no","snåase.no","sogndal.no","sokndal.no","sola.no","solund.no","songdalen.no","sortland.no","spydeberg.no","stange.no","stavanger.no","steigen.no","steinkjer.no","stjordal.no","stjørdal.no","stokke.no","stor-elvdal.no","stord.no","stordal.no","storfjord.no","omasvuotna.no","strand.no","stranda.no","stryn.no","sula.no","suldal.no","sund.no","sunndal.no","surnadal.no","sveio.no","svelvik.no","sykkylven.no","sogne.no","søgne.no","somna.no","sømna.no","sondre-land.no","søndre-land.no","sor-aurdal.no","sør-aurdal.no","sor-fron.no","sør-fron.no","sor-odal.no","sør-odal.no","sor-varanger.no","sør-varanger.no","matta-varjjat.no","mátta-várjjat.no","sorfold.no","sørfold.no","sorreisa.no","sørreisa.no","sorum.no","sørum.no","tana.no","deatnu.no","time.no","tingvoll.no","tinn.no","tjeldsund.no","dielddanuorri.no","tjome.no","tjøme.no","tokke.no","tolga.no","torsken.no","tranoy.no","tranøy.no","tromso.no","tromsø.no","tromsa.no","romsa.no","trondheim.no","troandin.no","trysil.no","trana.no","træna.no","trogstad.no","trøgstad.no","tvedestrand.no","tydal.no","tynset.no","tysfjord.no","divtasvuodna.no","divttasvuotna.no","tysnes.no","tysvar.no","tysvær.no","tonsberg.no","tønsberg.no","ullensaker.no","ullensvang.no","ulvik.no","utsira.no","vadso.no","vadsø.no","cahcesuolo.no","čáhcesuolo.no","vaksdal.no","valle.no","vang.no","vanylven.no","vardo.no","vardø.no","varggat.no","várggát.no","vefsn.no","vaapste.no","vega.no","vegarshei.no","vegårshei.no","vennesla.no","verdal.no","verran.no","vestby.no","vestnes.no","vestre-slidre.no","vestre-toten.no","vestvagoy.no","vestvågøy.no","vevelstad.no","vik.no","vikna.no","vindafjord.no","volda.no","voss.no","varoy.no","værøy.no","vagan.no","vågan.no","voagat.no","vagsoy.no","vågsøy.no","vaga.no","vågå.no","valer.ostfold.no","våler.østfold.no","valer.hedmark.no","våler.hedmark.no","*.np","nr","biz.nr","info.nr","gov.nr","edu.nr","org.nr","net.nr","com.nr","nu","nz","ac.nz","co.nz","cri.nz","geek.nz","gen.nz","govt.nz","health.nz","iwi.nz","kiwi.nz","maori.nz","mil.nz","māori.nz","net.nz","org.nz","parliament.nz","school.nz","om","co.om","com.om","edu.om","gov.om","med.om","museum.om","net.om","org.om","pro.om","onion","org","pa","ac.pa","gob.pa","com.pa","org.pa","sld.pa","edu.pa","net.pa","ing.pa","abo.pa","med.pa","nom.pa","pe","edu.pe","gob.pe","nom.pe","mil.pe","org.pe","com.pe","net.pe","pf","com.pf","org.pf","edu.pf","*.pg","ph","com.ph","net.ph","org.ph","gov.ph","edu.ph","ngo.ph","mil.ph","i.ph","pk","com.pk","net.pk","edu.pk","org.pk","fam.pk","biz.pk","web.pk","gov.pk","gob.pk","gok.pk","gon.pk","gop.pk","gos.pk","info.pk","pl","com.pl","net.pl","org.pl","aid.pl","agro.pl","atm.pl","auto.pl","biz.pl","edu.pl","gmina.pl","gsm.pl","info.pl","mail.pl","miasta.pl","media.pl","mil.pl","nieruchomosci.pl","nom.pl","pc.pl","powiat.pl","priv.pl","realestate.pl","rel.pl","sex.pl","shop.pl","sklep.pl","sos.pl","szkola.pl","targi.pl","tm.pl","tourism.pl","travel.pl","turystyka.pl","gov.pl","ap.gov.pl","ic.gov.pl","is.gov.pl","us.gov.pl","kmpsp.gov.pl","kppsp.gov.pl","kwpsp.gov.pl","psp.gov.pl","wskr.gov.pl","kwp.gov.pl","mw.gov.pl","ug.gov.pl","um.gov.pl","umig.gov.pl","ugim.gov.pl","upow.gov.pl","uw.gov.pl","starostwo.gov.pl","pa.gov.pl","po.gov.pl","psse.gov.pl","pup.gov.pl","rzgw.gov.pl","sa.gov.pl","so.gov.pl","sr.gov.pl","wsa.gov.pl","sko.gov.pl","uzs.gov.pl","wiih.gov.pl","winb.gov.pl","pinb.gov.pl","wios.gov.pl","witd.gov.pl","wzmiuw.gov.pl","piw.gov.pl","wiw.gov.pl","griw.gov.pl","wif.gov.pl","oum.gov.pl","sdn.gov.pl","zp.gov.pl","uppo.gov.pl","mup.gov.pl","wuoz.gov.pl","konsulat.gov.pl","oirm.gov.pl","augustow.pl","babia-gora.pl","bedzin.pl","beskidy.pl","bialowieza.pl","bialystok.pl","bielawa.pl","bieszczady.pl","boleslawiec.pl","bydgoszcz.pl","bytom.pl","cieszyn.pl","czeladz.pl","czest.pl","dlugoleka.pl","elblag.pl","elk.pl","glogow.pl","gniezno.pl","gorlice.pl","grajewo.pl","ilawa.pl","jaworzno.pl","jelenia-gora.pl","jgora.pl","kalisz.pl","kazimierz-dolny.pl","karpacz.pl","kartuzy.pl","kaszuby.pl","katowice.pl","kepno.pl","ketrzyn.pl","klodzko.pl","kobierzyce.pl","kolobrzeg.pl","konin.pl","konskowola.pl","kutno.pl","lapy.pl","lebork.pl","legnica.pl","lezajsk.pl","limanowa.pl","lomza.pl","lowicz.pl","lubin.pl","lukow.pl","malbork.pl","malopolska.pl","mazowsze.pl","mazury.pl","mielec.pl","mielno.pl","mragowo.pl","naklo.pl","nowaruda.pl","nysa.pl","olawa.pl","olecko.pl","olkusz.pl","olsztyn.pl","opoczno.pl","opole.pl","ostroda.pl","ostroleka.pl","ostrowiec.pl","ostrowwlkp.pl","pila.pl","pisz.pl","podhale.pl","podlasie.pl","polkowice.pl","pomorze.pl","pomorskie.pl","prochowice.pl","pruszkow.pl","przeworsk.pl","pulawy.pl","radom.pl","rawa-maz.pl","rybnik.pl","rzeszow.pl","sanok.pl","sejny.pl","slask.pl","slupsk.pl","sosnowiec.pl","stalowa-wola.pl","skoczow.pl","starachowice.pl","stargard.pl","suwalki.pl","swidnica.pl","swiebodzin.pl","swinoujscie.pl","szczecin.pl","szczytno.pl","tarnobrzeg.pl","tgory.pl","turek.pl","tychy.pl","ustka.pl","walbrzych.pl","warmia.pl","warszawa.pl","waw.pl","wegrow.pl","wielun.pl","wlocl.pl","wloclawek.pl","wodzislaw.pl","wolomin.pl","wroclaw.pl","zachpomor.pl","zagan.pl","zarow.pl","zgora.pl","zgorzelec.pl","pm","pn","gov.pn","co.pn","org.pn","edu.pn","net.pn","post","pr","com.pr","net.pr","org.pr","gov.pr","edu.pr","isla.pr","pro.pr","biz.pr","info.pr","name.pr","est.pr","prof.pr","ac.pr","pro","aaa.pro","aca.pro","acct.pro","avocat.pro","bar.pro","cpa.pro","eng.pro","jur.pro","law.pro","med.pro","recht.pro","ps","edu.ps","gov.ps","sec.ps","plo.ps","com.ps","org.ps","net.ps","pt","net.pt","gov.pt","org.pt","edu.pt","int.pt","publ.pt","com.pt","nome.pt","pw","co.pw","ne.pw","or.pw","ed.pw","go.pw","belau.pw","py","com.py","coop.py","edu.py","gov.py","mil.py","net.py","org.py","qa","com.qa","edu.qa","gov.qa","mil.qa","name.qa","net.qa","org.qa","sch.qa","re","asso.re","com.re","nom.re","ro","arts.ro","com.ro","firm.ro","info.ro","nom.ro","nt.ro","org.ro","rec.ro","store.ro","tm.ro","www.ro","rs","ac.rs","co.rs","edu.rs","gov.rs","in.rs","org.rs","ru","ac.ru","edu.ru","gov.ru","int.ru","mil.ru","test.ru","rw","gov.rw","net.rw","edu.rw","ac.rw","com.rw","co.rw","int.rw","mil.rw","gouv.rw","sa","com.sa","net.sa","org.sa","gov.sa","med.sa","pub.sa","edu.sa","sch.sa","sb","com.sb","edu.sb","gov.sb","net.sb","org.sb","sc","com.sc","gov.sc","net.sc","org.sc","edu.sc","sd","com.sd","net.sd","org.sd","edu.sd","med.sd","tv.sd","gov.sd","info.sd","se","a.se","ac.se","b.se","bd.se","brand.se","c.se","d.se","e.se","f.se","fh.se","fhsk.se","fhv.se","g.se","h.se","i.se","k.se","komforb.se","kommunalforbund.se","komvux.se","l.se","lanbib.se","m.se","n.se","naturbruksgymn.se","o.se","org.se","p.se","parti.se","pp.se","press.se","r.se","s.se","t.se","tm.se","u.se","w.se","x.se","y.se","z.se","sg","com.sg","net.sg","org.sg","gov.sg","edu.sg","per.sg","sh","com.sh","net.sh","gov.sh","org.sh","mil.sh","si","sj","sk","sl","com.sl","net.sl","edu.sl","gov.sl","org.sl","sm","sn","art.sn","com.sn","edu.sn","gouv.sn","org.sn","perso.sn","univ.sn","so","com.so","net.so","org.so","sr","st","co.st","com.st","consulado.st","edu.st","embaixada.st","gov.st","mil.st","net.st","org.st","principe.st","saotome.st","store.st","su","sv","com.sv","edu.sv","gob.sv","org.sv","red.sv","sx","gov.sx","sy","edu.sy","gov.sy","net.sy","mil.sy","com.sy","org.sy","sz","co.sz","ac.sz","org.sz","tc","td","tel","tf","tg","th","ac.th","co.th","go.th","in.th","mi.th","net.th","or.th","tj","ac.tj","biz.tj","co.tj","com.tj","edu.tj","go.tj","gov.tj","int.tj","mil.tj","name.tj","net.tj","nic.tj","org.tj","test.tj","web.tj","tk","tl","gov.tl","tm","com.tm","co.tm","org.tm","net.tm","nom.tm","gov.tm","mil.tm","edu.tm","tn","com.tn","ens.tn","fin.tn","gov.tn","ind.tn","intl.tn","nat.tn","net.tn","org.tn","info.tn","perso.tn","tourism.tn","edunet.tn","rnrt.tn","rns.tn","rnu.tn","mincom.tn","agrinet.tn","defense.tn","turen.tn","to","com.to","gov.to","net.to","org.to","edu.to","mil.to","tr","com.tr","info.tr","biz.tr","net.tr","org.tr","web.tr","gen.tr","tv.tr","av.tr","dr.tr","bbs.tr","name.tr","tel.tr","gov.tr","bel.tr","pol.tr","mil.tr","k12.tr","edu.tr","kep.tr","nc.tr","gov.nc.tr","tt","co.tt","com.tt","org.tt","net.tt","biz.tt","info.tt","pro.tt","int.tt","coop.tt","jobs.tt","mobi.tt","travel.tt","museum.tt","aero.tt","name.tt","gov.tt","edu.tt","tv","tw","edu.tw","gov.tw","mil.tw","com.tw","net.tw","org.tw","idv.tw","game.tw","ebiz.tw","club.tw","網路.tw","組織.tw","商業.tw","tz","ac.tz","co.tz","go.tz","hotel.tz","info.tz","me.tz","mil.tz","mobi.tz","ne.tz","or.tz","sc.tz","tv.tz","ua","com.ua","edu.ua","gov.ua","in.ua","net.ua","org.ua","cherkassy.ua","cherkasy.ua","chernigov.ua","chernihiv.ua","chernivtsi.ua","chernovtsy.ua","ck.ua","cn.ua","cr.ua","crimea.ua","cv.ua","dn.ua","dnepropetrovsk.ua","dnipropetrovsk.ua","dominic.ua","donetsk.ua","dp.ua","if.ua","ivano-frankivsk.ua","kh.ua","kharkiv.ua","kharkov.ua","kherson.ua","khmelnitskiy.ua","khmelnytskyi.ua","kiev.ua","kirovograd.ua","km.ua","kr.ua","krym.ua","ks.ua","kv.ua","kyiv.ua","lg.ua","lt.ua","lugansk.ua","lutsk.ua","lv.ua","lviv.ua","mk.ua","mykolaiv.ua","nikolaev.ua","od.ua","odesa.ua","odessa.ua","pl.ua","poltava.ua","rivne.ua","rovno.ua","rv.ua","sb.ua","sebastopol.ua","sevastopol.ua","sm.ua","sumy.ua","te.ua","ternopil.ua","uz.ua","uzhgorod.ua","vinnica.ua","vinnytsia.ua","vn.ua","volyn.ua","yalta.ua","zaporizhzhe.ua","zaporizhzhia.ua","zhitomir.ua","zhytomyr.ua","zp.ua","zt.ua","ug","co.ug","or.ug","ac.ug","sc.ug","go.ug","ne.ug","com.ug","org.ug","uk","ac.uk","co.uk","gov.uk","ltd.uk","me.uk","net.uk","nhs.uk","org.uk","plc.uk","police.uk","*.sch.uk","us","dni.us","fed.us","isa.us","kids.us","nsn.us","ak.us","al.us","ar.us","as.us","az.us","ca.us","co.us","ct.us","dc.us","de.us","fl.us","ga.us","gu.us","hi.us","ia.us","id.us","il.us","in.us","ks.us","ky.us","la.us","ma.us","md.us","me.us","mi.us","mn.us","mo.us","ms.us","mt.us","nc.us","nd.us","ne.us","nh.us","nj.us","nm.us","nv.us","ny.us","oh.us","ok.us","or.us","pa.us","pr.us","ri.us","sc.us","sd.us","tn.us","tx.us","ut.us","vi.us","vt.us","va.us","wa.us","wi.us","wv.us","wy.us","k12.ak.us","k12.al.us","k12.ar.us","k12.as.us","k12.az.us","k12.ca.us","k12.co.us","k12.ct.us","k12.dc.us","k12.de.us","k12.fl.us","k12.ga.us","k12.gu.us","k12.ia.us","k12.id.us","k12.il.us","k12.in.us","k12.ks.us","k12.ky.us","k12.la.us","k12.ma.us","k12.md.us","k12.me.us","k12.mi.us","k12.mn.us","k12.mo.us","k12.ms.us","k12.mt.us","k12.nc.us","k12.ne.us","k12.nh.us","k12.nj.us","k12.nm.us","k12.nv.us","k12.ny.us","k12.oh.us","k12.ok.us","k12.or.us","k12.pa.us","k12.pr.us","k12.ri.us","k12.sc.us","k12.tn.us","k12.tx.us","k12.ut.us","k12.vi.us","k12.vt.us","k12.va.us","k12.wa.us","k12.wi.us","k12.wy.us","cc.ak.us","cc.al.us","cc.ar.us","cc.as.us","cc.az.us","cc.ca.us","cc.co.us","cc.ct.us","cc.dc.us","cc.de.us","cc.fl.us","cc.ga.us","cc.gu.us","cc.hi.us","cc.ia.us","cc.id.us","cc.il.us","cc.in.us","cc.ks.us","cc.ky.us","cc.la.us","cc.ma.us","cc.md.us","cc.me.us","cc.mi.us","cc.mn.us","cc.mo.us","cc.ms.us","cc.mt.us","cc.nc.us","cc.nd.us","cc.ne.us","cc.nh.us","cc.nj.us","cc.nm.us","cc.nv.us","cc.ny.us","cc.oh.us","cc.ok.us","cc.or.us","cc.pa.us","cc.pr.us","cc.ri.us","cc.sc.us","cc.sd.us","cc.tn.us","cc.tx.us","cc.ut.us","cc.vi.us","cc.vt.us","cc.va.us","cc.wa.us","cc.wi.us","cc.wv.us","cc.wy.us","lib.ak.us","lib.al.us","lib.ar.us","lib.as.us","lib.az.us","lib.ca.us","lib.co.us","lib.ct.us","lib.dc.us","lib.fl.us","lib.ga.us","lib.gu.us","lib.hi.us","lib.ia.us","lib.id.us","lib.il.us","lib.in.us","lib.ks.us","lib.ky.us","lib.la.us","lib.ma.us","lib.md.us","lib.me.us","lib.mi.us","lib.mn.us","lib.mo.us","lib.ms.us","lib.mt.us","lib.nc.us","lib.nd.us","lib.ne.us","lib.nh.us","lib.nj.us","lib.nm.us","lib.nv.us","lib.ny.us","lib.oh.us","lib.ok.us","lib.or.us","lib.pa.us","lib.pr.us","lib.ri.us","lib.sc.us","lib.sd.us","lib.tn.us","lib.tx.us","lib.ut.us","lib.vi.us","lib.vt.us","lib.va.us","lib.wa.us","lib.wi.us","lib.wy.us","pvt.k12.ma.us","chtr.k12.ma.us","paroch.k12.ma.us","ann-arbor.mi.us","cog.mi.us","dst.mi.us","eaton.mi.us","gen.mi.us","mus.mi.us","tec.mi.us","washtenaw.mi.us","uy","com.uy","edu.uy","gub.uy","mil.uy","net.uy","org.uy","uz","co.uz","com.uz","net.uz","org.uz","va","vc","com.vc","net.vc","org.vc","gov.vc","mil.vc","edu.vc","ve","arts.ve","co.ve","com.ve","e12.ve","edu.ve","firm.ve","gob.ve","gov.ve","info.ve","int.ve","mil.ve","net.ve","org.ve","rec.ve","store.ve","tec.ve","web.ve","vg","vi","co.vi","com.vi","k12.vi","net.vi","org.vi","vn","com.vn","net.vn","org.vn","edu.vn","gov.vn","int.vn","ac.vn","biz.vn","info.vn","name.vn","pro.vn","health.vn","vu","com.vu","edu.vu","net.vu","org.vu","wf","ws","com.ws","net.ws","org.ws","gov.ws","edu.ws","yt","امارات","հայ","বাংলা","бг","бел","中国","中國","الجزائر","مصر","ею","გე","ελ","香港","公司.香港","教育.香港","政府.香港","個人.香港","網絡.香港","組織.香港","ಭಾರತ","ଭାରତ","ভাৰত","भारतम्","भारोत","ڀارت","ഭാരതം","भारत","بارت","بھارت","భారత్","ભારત","ਭਾਰਤ","ভারত","இந்தியா","ایران","ايران","عراق","الاردن","한국","қаз","ලංකා","இலங்கை","المغرب","мкд","мон","澳門","澳门","مليسيا","عمان","پاکستان","پاكستان","فلسطين","срб","пр.срб","орг.срб","обр.срб","од.срб","упр.срб","ак.срб","рф","قطر","السعودية","السعودیة","السعودیۃ","السعوديه","سودان","新加坡","சிங்கப்பூர்","سورية","سوريا","ไทย","ศึกษา.ไทย","ธุรกิจ.ไทย","รัฐบาล.ไทย","ทหาร.ไทย","เน็ต.ไทย","องค์กร.ไทย","تونس","台灣","台湾","臺灣","укр","اليمن","xxx","*.ye","ac.za","agric.za","alt.za","co.za","edu.za","gov.za","grondar.za","law.za","mil.za","net.za","ngo.za","nis.za","nom.za","org.za","school.za","tm.za","web.za","zm","ac.zm","biz.zm","co.zm","com.zm","edu.zm","gov.zm","info.zm","mil.zm","net.zm","org.zm","sch.zm","zw","ac.zw","co.zw","gov.zw","mil.zw","org.zw","aaa","aarp","abarth","abb","abbott","abbvie","abc","able","abogado","abudhabi","academy","accenture","accountant","accountants","aco","active","actor","adac","ads","adult","aeg","aetna","afamilycompany","afl","africa","agakhan","agency","aig","aigo","airbus","airforce","airtel","akdn","alfaromeo","alibaba","alipay","allfinanz","allstate","ally","alsace","alstom","americanexpress","americanfamily","amex","amfam","amica","amsterdam","analytics","android","anquan","anz","aol","apartments","app","apple","aquarelle","arab","aramco","archi","army","art","arte","asda","associates","athleta","attorney","auction","audi","audible","audio","auspost","author","auto","autos","avianca","aws","axa","azure","baby","baidu","banamex","bananarepublic","band","bank","bar","barcelona","barclaycard","barclays","barefoot","bargains","baseball","basketball","bauhaus","bayern","bbc","bbt","bbva","bcg","bcn","beats","beauty","beer","bentley","berlin","best","bestbuy","bet","bharti","bible","bid","bike","bing","bingo","bio","black","blackfriday","blanco","blockbuster","blog","bloomberg","blue","bms","bmw","bnl","bnpparibas","boats","boehringer","bofa","bom","bond","boo","book","booking","bosch","bostik","boston","bot","boutique","box","bradesco","bridgestone","broadway","broker","brother","brussels","budapest","bugatti","build","builders","business","buy","buzz","bzh","cab","cafe","cal","call","calvinklein","cam","camera","camp","cancerresearch","canon","capetown","capital","capitalone","car","caravan","cards","care","career","careers","cars","cartier","casa","case","caseih","cash","casino","catering","catholic","cba","cbn","cbre","cbs","ceb","center","ceo","cern","cfa","cfd","chanel","channel","charity","chase","chat","cheap","chintai","christmas","chrome","chrysler","church","cipriani","circle","cisco","citadel","citi","citic","city","cityeats","claims","cleaning","click","clinic","clinique","clothing","cloud","club","clubmed","coach","codes","coffee","college","cologne","comcast","commbank","community","company","compare","computer","comsec","condos","construction","consulting","contact","contractors","cooking","cookingchannel","cool","corsica","country","coupon","coupons","courses","credit","creditcard","creditunion","cricket","crown","crs","cruise","cruises","csc","cuisinella","cymru","cyou","dabur","dad","dance","data","date","dating","datsun","day","dclk","dds","deal","dealer","deals","degree","delivery","dell","deloitte","delta","democrat","dental","dentist","desi","design","dev","dhl","diamonds","diet","digital","direct","directory","discount","discover","dish","diy","dnp","docs","doctor","dodge","dog","doha","domains","dot","download","drive","dtv","dubai","duck","dunlop","duns","dupont","durban","dvag","dvr","earth","eat","eco","edeka","education","email","emerck","energy","engineer","engineering","enterprises","epost","epson","equipment","ericsson","erni","esq","estate","esurance","etisalat","eurovision","eus","events","everbank","exchange","expert","exposed","express","extraspace","fage","fail","fairwinds","faith","family","fan","fans","farm","farmers","fashion","fast","fedex","feedback","ferrari","ferrero","fiat","fidelity","fido","film","final","finance","financial","fire","firestone","firmdale","fish","fishing","fit","fitness","flickr","flights","flir","florist","flowers","fly","foo","food","foodnetwork","football","ford","forex","forsale","forum","foundation","fox","free","fresenius","frl","frogans","frontdoor","frontier","ftr","fujitsu","fujixerox","fun","fund","furniture","futbol","fyi","gal","gallery","gallo","gallup","game","games","gap","garden","gbiz","gdn","gea","gent","genting","george","ggee","gift","gifts","gives","giving","glade","glass","gle","global","globo","gmail","gmbh","gmo","gmx","godaddy","gold","goldpoint","golf","goo","goodhands","goodyear","goog","google","gop","got","grainger","graphics","gratis","green","gripe","grocery","group","guardian","gucci","guge","guide","guitars","guru","hair","hamburg","hangout","haus","hbo","hdfc","hdfcbank","health","healthcare","help","helsinki","here","hermes","hgtv","hiphop","hisamitsu","hitachi","hiv","hkt","hockey","holdings","holiday","homedepot","homegoods","homes","homesense","honda","honeywell","horse","hospital","host","hosting","hot","hoteles","hotels","hotmail","house","how","hsbc","hughes","hyatt","hyundai","ibm","icbc","ice","icu","ieee","ifm","ikano","imamat","imdb","immo","immobilien","inc","industries","infiniti","ing","ink","institute","insurance","insure","intel","international","intuit","investments","ipiranga","irish","iselect","ismaili","ist","istanbul","itau","itv","iveco","jaguar","java","jcb","jcp","jeep","jetzt","jewelry","jio","jlc","jll","jmp","jnj","joburg","jot","joy","jpmorgan","jprs","juegos","juniper","kaufen","kddi","kerryhotels","kerrylogistics","kerryproperties","kfh","kia","kim","kinder","kindle","kitchen","kiwi","koeln","komatsu","kosher","kpmg","kpn","krd","kred","kuokgroup","kyoto","lacaixa","ladbrokes","lamborghini","lamer","lancaster","lancia","lancome","land","landrover","lanxess","lasalle","lat","latino","latrobe","law","lawyer","lds","lease","leclerc","lefrak","legal","lego","lexus","lgbt","liaison","lidl","life","lifeinsurance","lifestyle","lighting","like","lilly","limited","limo","lincoln","linde","link","lipsy","live","living","lixil","llc","loan","loans","locker","locus","loft","lol","london","lotte","lotto","love","lpl","lplfinancial","ltd","ltda","lundbeck","lupin","luxe","luxury","macys","madrid","maif","maison","makeup","man","management","mango","map","market","marketing","markets","marriott","marshalls","maserati","mattel","mba","mckinsey","med","media","meet","melbourne","meme","memorial","men","menu","merckmsd","metlife","miami","microsoft","mini","mint","mit","mitsubishi","mlb","mls","mma","mobile","mobily","moda","moe","moi","mom","monash","money","monster","mopar","mormon","mortgage","moscow","moto","motorcycles","mov","movie","movistar","msd","mtn","mtr","mutual","nab","nadex","nagoya","nationwide","natura","navy","nba","nec","netbank","netflix","network","neustar","new","newholland","news","next","nextdirect","nexus","nfl","ngo","nhk","nico","nike","nikon","ninja","nissan","nissay","nokia","northwesternmutual","norton","now","nowruz","nowtv","nra","nrw","ntt","nyc","obi","observer","off","office","okinawa","olayan","olayangroup","oldnavy","ollo","omega","one","ong","onl","online","onyourside","ooo","open","oracle","orange","organic","origins","osaka","otsuka","ott","ovh","page","panasonic","panerai","paris","pars","partners","parts","party","passagens","pay","pccw","pet","pfizer","pharmacy","phd","philips","phone","photo","photography","photos","physio","piaget","pics","pictet","pictures","pid","pin","ping","pink","pioneer","pizza","place","play","playstation","plumbing","plus","pnc","pohl","poker","politie","porn","pramerica","praxi","press","prime","prod","productions","prof","progressive","promo","properties","property","protection","pru","prudential","pub","pwc","qpon","quebec","quest","qvc","racing","radio","raid","read","realestate","realtor","realty","recipes","red","redstone","redumbrella","rehab","reise","reisen","reit","reliance","ren","rent","rentals","repair","report","republican","rest","restaurant","review","reviews","rexroth","rich","richardli","ricoh","rightathome","ril","rio","rip","rmit","rocher","rocks","rodeo","rogers","room","rsvp","rugby","ruhr","run","rwe","ryukyu","saarland","safe","safety","sakura","sale","salon","samsclub","samsung","sandvik","sandvikcoromant","sanofi","sap","sarl","sas","save","saxo","sbi","sbs","sca","scb","schaeffler","schmidt","scholarships","school","schule","schwarz","science","scjohnson","scor","scot","search","seat","secure","security","seek","select","sener","services","ses","seven","sew","sex","sexy","sfr","shangrila","sharp","shaw","shell","shia","shiksha","shoes","shop","shopping","shouji","show","showtime","shriram","silk","sina","singles","site","ski","skin","sky","skype","sling","smart","smile","sncf","soccer","social","softbank","software","sohu","solar","solutions","song","sony","soy","space","spiegel","sport","spot","spreadbetting","srl","srt","stada","staples","star","starhub","statebank","statefarm","statoil","stc","stcgroup","stockholm","storage","store","stream","studio","study","style","sucks","supplies","supply","support","surf","surgery","suzuki","swatch","swiftcover","swiss","sydney","symantec","systems","tab","taipei","talk","taobao","target","tatamotors","tatar","tattoo","tax","taxi","tci","tdk","team","tech","technology","telecity","telefonica","temasek","tennis","teva","thd","theater","theatre","tiaa","tickets","tienda","tiffany","tips","tires","tirol","tjmaxx","tjx","tkmaxx","tmall","today","tokyo","tools","top","toray","toshiba","total","tours","town","toyota","toys","trade","trading","training","travel","travelchannel","travelers","travelersinsurance","trust","trv","tube","tui","tunes","tushu","tvs","ubank","ubs","uconnect","unicom","university","uno","uol","ups","vacations","vana","vanguard","vegas","ventures","verisign","versicherung","vet","viajes","video","vig","viking","villas","vin","vip","virgin","visa","vision","vista","vistaprint","viva","vivo","vlaanderen","vodka","volkswagen","volvo","vote","voting","voto","voyage","vuelos","wales","walmart","walter","wang","wanggou","warman","watch","watches","weather","weatherchannel","webcam","weber","website","wed","wedding","weibo","weir","whoswho","wien","wiki","williamhill","win","windows","wine","winners","wme","wolterskluwer","woodside","work","works","world","wow","wtc","wtf","xbox","xerox","xfinity","xihuan","xin","कॉम","セール","佛山","慈善","集团","在线","大众汽车","点看","คอม","八卦","موقع","公益","公司","香格里拉","网站","移动","我爱你","москва","католик","онлайн","сайт","联通","קום","时尚","微博","淡马锡","ファッション","орг","नेट","ストア","삼성","商标","商店","商城","дети","ポイント","新闻","工行","家電","كوم","中文网","中信","娱乐","谷歌","電訊盈科","购物","クラウド","通販","网店","संगठन","餐厅","网络","ком","诺基亚","食品","飞利浦","手表","手机","ارامكو","العليان","اتصالات","بازار","موبايلي","ابوظبي","كاثوليك","همراه","닷컴","政府","شبكة","بيتك","عرب","机构","组织机构","健康","招聘","рус","珠宝","大拿","みんな","グーグル","世界","書籍","网址","닷넷","コム","天主教","游戏","vermögensberater","vermögensberatung","企业","信息","嘉里大酒店","嘉里","广东","政务","xyz","yachts","yahoo","yamaxun","yandex","yodobashi","yoga","yokohama","you","youtube","yun","zappos","zara","zero","zip","zippo","zone","zuerich","cc.ua","inf.ua","ltd.ua","beep.pl","*.compute.estate","*.alces.network","alwaysdata.net","cloudfront.net","*.compute.amazonaws.com","*.compute-1.amazonaws.com","*.compute.amazonaws.com.cn","us-east-1.amazonaws.com","cn-north-1.eb.amazonaws.com.cn","elasticbeanstalk.com","ap-northeast-1.elasticbeanstalk.com","ap-northeast-2.elasticbeanstalk.com","ap-northeast-3.elasticbeanstalk.com","ap-south-1.elasticbeanstalk.com","ap-southeast-1.elasticbeanstalk.com","ap-southeast-2.elasticbeanstalk.com","ca-central-1.elasticbeanstalk.com","eu-central-1.elasticbeanstalk.com","eu-west-1.elasticbeanstalk.com","eu-west-2.elasticbeanstalk.com","eu-west-3.elasticbeanstalk.com","sa-east-1.elasticbeanstalk.com","us-east-1.elasticbeanstalk.com","us-east-2.elasticbeanstalk.com","us-gov-west-1.elasticbeanstalk.com","us-west-1.elasticbeanstalk.com","us-west-2.elasticbeanstalk.com","*.elb.amazonaws.com","*.elb.amazonaws.com.cn","s3.amazonaws.com","s3-ap-northeast-1.amazonaws.com","s3-ap-northeast-2.amazonaws.com","s3-ap-south-1.amazonaws.com","s3-ap-southeast-1.amazonaws.com","s3-ap-southeast-2.amazonaws.com","s3-ca-central-1.amazonaws.com","s3-eu-central-1.amazonaws.com","s3-eu-west-1.amazonaws.com","s3-eu-west-2.amazonaws.com","s3-eu-west-3.amazonaws.com","s3-external-1.amazonaws.com","s3-fips-us-gov-west-1.amazonaws.com","s3-sa-east-1.amazonaws.com","s3-us-gov-west-1.amazonaws.com","s3-us-east-2.amazonaws.com","s3-us-west-1.amazonaws.com","s3-us-west-2.amazonaws.com","s3.ap-northeast-2.amazonaws.com","s3.ap-south-1.amazonaws.com","s3.cn-north-1.amazonaws.com.cn","s3.ca-central-1.amazonaws.com","s3.eu-central-1.amazonaws.com","s3.eu-west-2.amazonaws.com","s3.eu-west-3.amazonaws.com","s3.us-east-2.amazonaws.com","s3.dualstack.ap-northeast-1.amazonaws.com","s3.dualstack.ap-northeast-2.amazonaws.com","s3.dualstack.ap-south-1.amazonaws.com","s3.dualstack.ap-southeast-1.amazonaws.com","s3.dualstack.ap-southeast-2.amazonaws.com","s3.dualstack.ca-central-1.amazonaws.com","s3.dualstack.eu-central-1.amazonaws.com","s3.dualstack.eu-west-1.amazonaws.com","s3.dualstack.eu-west-2.amazonaws.com","s3.dualstack.eu-west-3.amazonaws.com","s3.dualstack.sa-east-1.amazonaws.com","s3.dualstack.us-east-1.amazonaws.com","s3.dualstack.us-east-2.amazonaws.com","s3-website-us-east-1.amazonaws.com","s3-website-us-west-1.amazonaws.com","s3-website-us-west-2.amazonaws.com","s3-website-ap-northeast-1.amazonaws.com","s3-website-ap-southeast-1.amazonaws.com","s3-website-ap-southeast-2.amazonaws.com","s3-website-eu-west-1.amazonaws.com","s3-website-sa-east-1.amazonaws.com","s3-website.ap-northeast-2.amazonaws.com","s3-website.ap-south-1.amazonaws.com","s3-website.ca-central-1.amazonaws.com","s3-website.eu-central-1.amazonaws.com","s3-website.eu-west-2.amazonaws.com","s3-website.eu-west-3.amazonaws.com","s3-website.us-east-2.amazonaws.com","t3l3p0rt.net","tele.amune.org","on-aptible.com","user.party.eus","pimienta.org","poivron.org","potager.org","sweetpepper.org","myasustor.com","myfritz.net","*.awdev.ca","*.advisor.ws","backplaneapp.io","betainabox.com","bnr.la","blackbaudcdn.net","boomla.net","boxfuse.io","square7.ch","bplaced.com","bplaced.de","square7.de","bplaced.net","square7.net","browsersafetymark.io","mycd.eu","ae.org","ar.com","br.com","cn.com","com.de","com.se","de.com","eu.com","gb.com","gb.net","hu.com","hu.net","jp.net","jpn.com","kr.com","mex.com","no.com","qc.com","ru.com","sa.com","se.net","uk.com","uk.net","us.com","uy.com","za.bz","za.com","africa.com","gr.com","in.net","us.org","co.com","c.la","certmgr.org","xenapponazure.com","virtueeldomein.nl","cleverapps.io","c66.me","cloud66.ws","jdevcloud.com","wpdevcloud.com","cloudaccess.host","freesite.host","cloudaccess.net","cloudcontrolled.com","cloudcontrolapp.com","co.ca","*.otap.co","co.cz","c.cdn77.org","cdn77-ssl.net","r.cdn77.net","rsc.cdn77.org","ssl.origin.cdn77-secure.org","cloudns.asia","cloudns.biz","cloudns.club","cloudns.cc","cloudns.eu","cloudns.in","cloudns.info","cloudns.org","cloudns.pro","cloudns.pw","cloudns.us","cloudeity.net","cnpy.gdn","co.nl","co.no","webhosting.be","hosting-cluster.nl","dyn.cosidns.de","dynamisches-dns.de","dnsupdater.de","internet-dns.de","l-o-g-i-n.de","dynamic-dns.info","feste-ip.net","knx-server.net","static-access.net","realm.cz","*.cryptonomic.net","cupcake.is","cyon.link","cyon.site","daplie.me","localhost.daplie.me","dattolocal.com","dattorelay.com","dattoweb.com","mydatto.com","dattolocal.net","mydatto.net","biz.dk","co.dk","firm.dk","reg.dk","store.dk","debian.net","dedyn.io","dnshome.de","drayddns.com","dreamhosters.com","mydrobo.com","drud.io","drud.us","duckdns.org","dy.fi","tunk.org","dyndns-at-home.com","dyndns-at-work.com","dyndns-blog.com","dyndns-free.com","dyndns-home.com","dyndns-ip.com","dyndns-mail.com","dyndns-office.com","dyndns-pics.com","dyndns-remote.com","dyndns-server.com","dyndns-web.com","dyndns-wiki.com","dyndns-work.com","dyndns.biz","dyndns.info","dyndns.org","dyndns.tv","at-band-camp.net","ath.cx","barrel-of-knowledge.info","barrell-of-knowledge.info","better-than.tv","blogdns.com","blogdns.net","blogdns.org","blogsite.org","boldlygoingnowhere.org","broke-it.net","buyshouses.net","cechire.com","dnsalias.com","dnsalias.net","dnsalias.org","dnsdojo.com","dnsdojo.net","dnsdojo.org","does-it.net","doesntexist.com","doesntexist.org","dontexist.com","dontexist.net","dontexist.org","doomdns.com","doomdns.org","dvrdns.org","dyn-o-saur.com","dynalias.com","dynalias.net","dynalias.org","dynathome.net","dyndns.ws","endofinternet.net","endofinternet.org","endoftheinternet.org","est-a-la-maison.com","est-a-la-masion.com","est-le-patron.com","est-mon-blogueur.com","for-better.biz","for-more.biz","for-our.info","for-some.biz","for-the.biz","forgot.her.name","forgot.his.name","from-ak.com","from-al.com","from-ar.com","from-az.net","from-ca.com","from-co.net","from-ct.com","from-dc.com","from-de.com","from-fl.com","from-ga.com","from-hi.com","from-ia.com","from-id.com","from-il.com","from-in.com","from-ks.com","from-ky.com","from-la.net","from-ma.com","from-md.com","from-me.org","from-mi.com","from-mn.com","from-mo.com","from-ms.com","from-mt.com","from-nc.com","from-nd.com","from-ne.com","from-nh.com","from-nj.com","from-nm.com","from-nv.com","from-ny.net","from-oh.com","from-ok.com","from-or.com","from-pa.com","from-pr.com","from-ri.com","from-sc.com","from-sd.com","from-tn.com","from-tx.com","from-ut.com","from-va.com","from-vt.com","from-wa.com","from-wi.com","from-wv.com","from-wy.com","ftpaccess.cc","fuettertdasnetz.de","game-host.org","game-server.cc","getmyip.com","gets-it.net","go.dyndns.org","gotdns.com","gotdns.org","groks-the.info","groks-this.info","ham-radio-op.net","here-for-more.info","hobby-site.com","hobby-site.org","home.dyndns.org","homedns.org","homeftp.net","homeftp.org","homeip.net","homelinux.com","homelinux.net","homelinux.org","homeunix.com","homeunix.net","homeunix.org","iamallama.com","in-the-band.net","is-a-anarchist.com","is-a-blogger.com","is-a-bookkeeper.com","is-a-bruinsfan.org","is-a-bulls-fan.com","is-a-candidate.org","is-a-caterer.com","is-a-celticsfan.org","is-a-chef.com","is-a-chef.net","is-a-chef.org","is-a-conservative.com","is-a-cpa.com","is-a-cubicle-slave.com","is-a-democrat.com","is-a-designer.com","is-a-doctor.com","is-a-financialadvisor.com","is-a-geek.com","is-a-geek.net","is-a-geek.org","is-a-green.com","is-a-guru.com","is-a-hard-worker.com","is-a-hunter.com","is-a-knight.org","is-a-landscaper.com","is-a-lawyer.com","is-a-liberal.com","is-a-libertarian.com","is-a-linux-user.org","is-a-llama.com","is-a-musician.com","is-a-nascarfan.com","is-a-nurse.com","is-a-painter.com","is-a-patsfan.org","is-a-personaltrainer.com","is-a-photographer.com","is-a-player.com","is-a-republican.com","is-a-rockstar.com","is-a-socialist.com","is-a-soxfan.org","is-a-student.com","is-a-teacher.com","is-a-techie.com","is-a-therapist.com","is-an-accountant.com","is-an-actor.com","is-an-actress.com","is-an-anarchist.com","is-an-artist.com","is-an-engineer.com","is-an-entertainer.com","is-by.us","is-certified.com","is-found.org","is-gone.com","is-into-anime.com","is-into-cars.com","is-into-cartoons.com","is-into-games.com","is-leet.com","is-lost.org","is-not-certified.com","is-saved.org","is-slick.com","is-uberleet.com","is-very-bad.org","is-very-evil.org","is-very-good.org","is-very-nice.org","is-very-sweet.org","is-with-theband.com","isa-geek.com","isa-geek.net","isa-geek.org","isa-hockeynut.com","issmarterthanyou.com","isteingeek.de","istmein.de","kicks-ass.net","kicks-ass.org","knowsitall.info","land-4-sale.us","lebtimnetz.de","leitungsen.de","likes-pie.com","likescandy.com","merseine.nu","mine.nu","misconfused.org","mypets.ws","myphotos.cc","neat-url.com","office-on-the.net","on-the-web.tv","podzone.net","podzone.org","readmyblog.org","saves-the-whales.com","scrapper-site.net","scrapping.cc","selfip.biz","selfip.com","selfip.info","selfip.net","selfip.org","sells-for-less.com","sells-for-u.com","sells-it.net","sellsyourhome.org","servebbs.com","servebbs.net","servebbs.org","serveftp.net","serveftp.org","servegame.org","shacknet.nu","simple-url.com","space-to-rent.com","stuff-4-sale.org","stuff-4-sale.us","teaches-yoga.com","thruhere.net","traeumtgerade.de","webhop.biz","webhop.info","webhop.net","webhop.org","worse-than.tv","writesthisblog.com","ddnss.de","dyn.ddnss.de","dyndns.ddnss.de","dyndns1.de","dyn-ip24.de","home-webserver.de","dyn.home-webserver.de","myhome-server.de","ddnss.org","definima.net","definima.io","bci.dnstrace.pro","ddnsfree.com","ddnsgeek.com","giize.com","gleeze.com","kozow.com","loseyourip.com","ooguy.com","theworkpc.com","casacam.net","dynu.net","accesscam.org","camdvr.org","freeddns.org","mywire.org","webredirect.org","myddns.rocks","blogsite.xyz","dynv6.net","e4.cz","mytuleap.com","enonic.io","customer.enonic.io","eu.org","al.eu.org","asso.eu.org","at.eu.org","au.eu.org","be.eu.org","bg.eu.org","ca.eu.org","cd.eu.org","ch.eu.org","cn.eu.org","cy.eu.org","cz.eu.org","de.eu.org","dk.eu.org","edu.eu.org","ee.eu.org","es.eu.org","fi.eu.org","fr.eu.org","gr.eu.org","hr.eu.org","hu.eu.org","ie.eu.org","il.eu.org","in.eu.org","int.eu.org","is.eu.org","it.eu.org","jp.eu.org","kr.eu.org","lt.eu.org","lu.eu.org","lv.eu.org","mc.eu.org","me.eu.org","mk.eu.org","mt.eu.org","my.eu.org","net.eu.org","ng.eu.org","nl.eu.org","no.eu.org","nz.eu.org","paris.eu.org","pl.eu.org","pt.eu.org","q-a.eu.org","ro.eu.org","ru.eu.org","se.eu.org","si.eu.org","sk.eu.org","tr.eu.org","uk.eu.org","us.eu.org","eu-1.evennode.com","eu-2.evennode.com","eu-3.evennode.com","eu-4.evennode.com","us-1.evennode.com","us-2.evennode.com","us-3.evennode.com","us-4.evennode.com","twmail.cc","twmail.net","twmail.org","mymailer.com.tw","url.tw","apps.fbsbx.com","ru.net","adygeya.ru","bashkiria.ru","bir.ru","cbg.ru","com.ru","dagestan.ru","grozny.ru","kalmykia.ru","kustanai.ru","marine.ru","mordovia.ru","msk.ru","mytis.ru","nalchik.ru","nov.ru","pyatigorsk.ru","spb.ru","vladikavkaz.ru","vladimir.ru","abkhazia.su","adygeya.su","aktyubinsk.su","arkhangelsk.su","armenia.su","ashgabad.su","azerbaijan.su","balashov.su","bashkiria.su","bryansk.su","bukhara.su","chimkent.su","dagestan.su","east-kazakhstan.su","exnet.su","georgia.su","grozny.su","ivanovo.su","jambyl.su","kalmykia.su","kaluga.su","karacol.su","karaganda.su","karelia.su","khakassia.su","krasnodar.su","kurgan.su","kustanai.su","lenug.su","mangyshlak.su","mordovia.su","msk.su","murmansk.su","nalchik.su","navoi.su","north-kazakhstan.su","nov.su","obninsk.su","penza.su","pokrovsk.su","sochi.su","spb.su","tashkent.su","termez.su","togliatti.su","troitsk.su","tselinograd.su","tula.su","tuva.su","vladikavkaz.su","vladimir.su","vologda.su","channelsdvr.net","fastlylb.net","map.fastlylb.net","freetls.fastly.net","map.fastly.net","a.prod.fastly.net","global.prod.fastly.net","a.ssl.fastly.net","b.ssl.fastly.net","global.ssl.fastly.net","fastpanel.direct","fastvps-server.com","fhapp.xyz","fedorainfracloud.org","fedorapeople.org","cloud.fedoraproject.org","app.os.fedoraproject.org","app.os.stg.fedoraproject.org","filegear.me","firebaseapp.com","flynnhub.com","flynnhosting.net","freebox-os.com","freeboxos.com","fbx-os.fr","fbxos.fr","freebox-os.fr","freeboxos.fr","freedesktop.org","*.futurecms.at","*.ex.futurecms.at","*.in.futurecms.at","futurehosting.at","futuremailing.at","*.ex.ortsinfo.at","*.kunden.ortsinfo.at","*.statics.cloud","service.gov.uk","github.io","githubusercontent.com","gitlab.io","homeoffice.gov.uk","ro.im","shop.ro","goip.de","*.0emm.com","appspot.com","blogspot.ae","blogspot.al","blogspot.am","blogspot.ba","blogspot.be","blogspot.bg","blogspot.bj","blogspot.ca","blogspot.cf","blogspot.ch","blogspot.cl","blogspot.co.at","blogspot.co.id","blogspot.co.il","blogspot.co.ke","blogspot.co.nz","blogspot.co.uk","blogspot.co.za","blogspot.com","blogspot.com.ar","blogspot.com.au","blogspot.com.br","blogspot.com.by","blogspot.com.co","blogspot.com.cy","blogspot.com.ee","blogspot.com.eg","blogspot.com.es","blogspot.com.mt","blogspot.com.ng","blogspot.com.tr","blogspot.com.uy","blogspot.cv","blogspot.cz","blogspot.de","blogspot.dk","blogspot.fi","blogspot.fr","blogspot.gr","blogspot.hk","blogspot.hr","blogspot.hu","blogspot.ie","blogspot.in","blogspot.is","blogspot.it","blogspot.jp","blogspot.kr","blogspot.li","blogspot.lt","blogspot.lu","blogspot.md","blogspot.mk","blogspot.mr","blogspot.mx","blogspot.my","blogspot.nl","blogspot.no","blogspot.pe","blogspot.pt","blogspot.qa","blogspot.re","blogspot.ro","blogspot.rs","blogspot.ru","blogspot.se","blogspot.sg","blogspot.si","blogspot.sk","blogspot.sn","blogspot.td","blogspot.tw","blogspot.ug","blogspot.vn","cloudfunctions.net","cloud.goog","codespot.com","googleapis.com","googlecode.com","pagespeedmobilizer.com","publishproxy.com","withgoogle.com","withyoutube.com","hashbang.sh","hasura.app","hasura-app.io","hepforge.org","herokuapp.com","herokussl.com","myravendb.com","ravendb.community","ravendb.me","development.run","ravendb.run","moonscale.net","iki.fi","biz.at","info.at","info.cx","ac.leg.br","al.leg.br","am.leg.br","ap.leg.br","ba.leg.br","ce.leg.br","df.leg.br","es.leg.br","go.leg.br","ma.leg.br","mg.leg.br","ms.leg.br","mt.leg.br","pa.leg.br","pb.leg.br","pe.leg.br","pi.leg.br","pr.leg.br","rj.leg.br","rn.leg.br","ro.leg.br","rr.leg.br","rs.leg.br","sc.leg.br","se.leg.br","sp.leg.br","to.leg.br","pixolino.com","ipifony.net","mein-iserv.de","test-iserv.de","myjino.ru","*.hosting.myjino.ru","*.landing.myjino.ru","*.spectrum.myjino.ru","*.vps.myjino.ru","*.triton.zone","*.cns.joyent.com","js.org","keymachine.de","knightpoint.systems","co.krd","edu.krd","git-repos.de","lcube-server.de","svn-repos.de","app.lmpm.com","linkitools.space","linkyard.cloud","linkyard-cloud.ch","we.bs","uklugs.org","glug.org.uk","lug.org.uk","lugs.org.uk","barsy.bg","barsy.co.uk","barsyonline.co.uk","barsycenter.com","barsyonline.com","barsy.club","barsy.de","barsy.eu","barsy.in","barsy.info","barsy.io","barsy.me","barsy.menu","barsy.mobi","barsy.net","barsy.online","barsy.org","barsy.pro","barsy.pub","barsy.shop","barsy.site","barsy.support","barsy.uk","*.magentosite.cloud","mayfirst.info","mayfirst.org","hb.cldmail.ru","miniserver.com","memset.net","cloud.metacentrum.cz","custom.metacentrum.cz","flt.cloud.muni.cz","usr.cloud.muni.cz","meteorapp.com","eu.meteorapp.com","co.pl","azurecontainer.io","azurewebsites.net","azure-mobile.net","cloudapp.net","mozilla-iot.org","bmoattachments.org","net.ru","org.ru","pp.ru","bitballoon.com","netlify.com","4u.com","ngrok.io","nh-serv.co.uk","nfshost.com","dnsking.ch","mypi.co","n4t.co","001www.com","ddnslive.com","myiphost.com","forumz.info","16-b.it","32-b.it","64-b.it","soundcast.me","tcp4.me","dnsup.net","hicam.net","now-dns.net","ownip.net","vpndns.net","dynserv.org","now-dns.org","x443.pw","now-dns.top","ntdll.top","freeddns.us","crafting.xyz","zapto.xyz","nsupdate.info","nerdpol.ovh","blogsyte.com","brasilia.me","cable-modem.org","ciscofreak.com","collegefan.org","couchpotatofries.org","damnserver.com","ddns.me","ditchyourip.com","dnsfor.me","dnsiskinky.com","dvrcam.info","dynns.com","eating-organic.net","fantasyleague.cc","geekgalaxy.com","golffan.us","health-carereform.com","homesecuritymac.com","homesecuritypc.com","hopto.me","ilovecollege.info","loginto.me","mlbfan.org","mmafan.biz","myactivedirectory.com","mydissent.net","myeffect.net","mymediapc.net","mypsx.net","mysecuritycamera.com","mysecuritycamera.net","mysecuritycamera.org","net-freaks.com","nflfan.org","nhlfan.net","no-ip.ca","no-ip.co.uk","no-ip.net","noip.us","onthewifi.com","pgafan.net","point2this.com","pointto.us","privatizehealthinsurance.net","quicksytes.com","read-books.org","securitytactics.com","serveexchange.com","servehumour.com","servep2p.com","servesarcasm.com","stufftoread.com","ufcfan.org","unusualperson.com","workisboring.com","3utilities.com","bounceme.net","ddns.net","ddnsking.com","gotdns.ch","hopto.org","myftp.biz","myftp.org","myvnc.com","no-ip.biz","no-ip.info","no-ip.org","noip.me","redirectme.net","servebeer.com","serveblog.net","servecounterstrike.com","serveftp.com","servegame.com","servehalflife.com","servehttp.com","serveirc.com","serveminecraft.net","servemp3.com","servepics.com","servequake.com","sytes.net","webhop.me","zapto.org","stage.nodeart.io","nodum.co","nodum.io","pcloud.host","nyc.mn","nom.ae","nom.af","nom.ai","nom.al","nym.by","nym.bz","nom.cl","nom.gd","nom.ge","nom.gl","nym.gr","nom.gt","nym.gy","nom.hn","nym.ie","nom.im","nom.ke","nym.kz","nym.la","nym.lc","nom.li","nym.li","nym.lt","nym.lu","nym.me","nom.mk","nym.mn","nym.mx","nom.nu","nym.nz","nym.pe","nym.pt","nom.pw","nom.qa","nym.ro","nom.rs","nom.si","nym.sk","nom.st","nym.su","nym.sx","nom.tj","nym.tw","nom.ug","nom.uy","nom.vc","nom.vg","cya.gg","cloudycluster.net","nid.io","opencraft.hosting","operaunite.com","outsystemscloud.com","ownprovider.com","own.pm","ox.rs","oy.lc","pgfog.com","pagefrontapp.com","art.pl","gliwice.pl","krakow.pl","poznan.pl","wroc.pl","zakopane.pl","pantheonsite.io","gotpantheon.com","mypep.link","on-web.fr","*.platform.sh","*.platformsh.site","xen.prgmr.com","priv.at","protonet.io","chirurgiens-dentistes-en-france.fr","byen.site","ras.ru","qa2.com","dev-myqnapcloud.com","alpha-myqnapcloud.com","myqnapcloud.com","*.quipelements.com","vapor.cloud","vaporcloud.io","rackmaze.com","rackmaze.net","rhcloud.com","resindevice.io","devices.resinstaging.io","hzc.io","wellbeingzone.eu","ptplus.fit","wellbeingzone.co.uk","sandcats.io","logoip.de","logoip.com","schokokeks.net","scrysec.com","firewall-gateway.com","firewall-gateway.de","my-gateway.de","my-router.de","spdns.de","spdns.eu","firewall-gateway.net","my-firewall.org","myfirewall.org","spdns.org","*.s5y.io","*.sensiosite.cloud","biz.ua","co.ua","pp.ua","shiftedit.io","myshopblocks.com","1kapp.com","appchizi.com","applinzi.com","sinaapp.com","vipsinaapp.com","bounty-full.com","alpha.bounty-full.com","beta.bounty-full.com","static.land","dev.static.land","sites.static.land","apps.lair.io","*.stolos.io","spacekit.io","customer.speedpartner.de","storj.farm","utwente.io","temp-dns.com","diskstation.me","dscloud.biz","dscloud.me","dscloud.mobi","dsmynas.com","dsmynas.net","dsmynas.org","familyds.com","familyds.net","familyds.org","i234.me","myds.me","synology.me","vpnplus.to","taifun-dns.de","gda.pl","gdansk.pl","gdynia.pl","med.pl","sopot.pl","gwiddle.co.uk","cust.dev.thingdust.io","cust.disrec.thingdust.io","cust.prod.thingdust.io","cust.testing.thingdust.io","bloxcms.com","townnews-staging.com","12hp.at","2ix.at","4lima.at","lima-city.at","12hp.ch","2ix.ch","4lima.ch","lima-city.ch","trafficplex.cloud","de.cool","12hp.de","2ix.de","4lima.de","lima-city.de","1337.pictures","clan.rip","lima-city.rocks","webspace.rocks","lima.zone","*.transurl.be","*.transurl.eu","*.transurl.nl","tuxfamily.org","dd-dns.de","diskstation.eu","diskstation.org","dray-dns.de","draydns.de","dyn-vpn.de","dynvpn.de","mein-vigor.de","my-vigor.de","my-wan.de","syno-ds.de","synology-diskstation.de","synology-ds.de","uber.space","*.uberspace.de","hk.com","hk.org","ltd.hk","inc.hk","virtualuser.de","virtual-user.de","lib.de.us","2038.io","router.management","v-info.info","wedeploy.io","wedeploy.me","wedeploy.sh","remotewd.com","wmflabs.org","half.host","xnbay.com","u2.xnbay.com","u2-local.xnbay.com","cistron.nl","demon.nl","xs4all.space","official.academy","yolasite.com","ybo.faith","yombo.me","homelink.one","ybo.party","ybo.review","ybo.science","ybo.trade","nohost.me","noho.st","za.net","za.org","now.sh","zone.id"] \ No newline at end of file diff --git a/truebit-implementation/node_modules/psl/dist/psl.js b/truebit-implementation/node_modules/psl/dist/psl.js deleted file mode 100644 index 24f5933b..00000000 --- a/truebit-implementation/node_modules/psl/dist/psl.js +++ /dev/null @@ -1,812 +0,0 @@ -(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.psl = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= punySuffix.length) { - // return memo; - // } - //} - return rule; - }, null); -}; - - -// -// Error codes and messages. -// -exports.errorCodes = { - DOMAIN_TOO_SHORT: 'Domain name too short.', - DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.', - LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.', - LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.', - LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.', - LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.', - LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.' -}; - - -// -// Validate domain name and throw if not valid. -// -// From wikipedia: -// -// Hostnames are composed of series of labels concatenated with dots, as are all -// domain names. Each label must be between 1 and 63 characters long, and the -// entire hostname (including the delimiting dots) has a maximum of 255 chars. -// -// Allowed chars: -// -// * `a-z` -// * `0-9` -// * `-` but not as a starting or ending character -// * `.` as a separator for the textual portions of a domain name -// -// * http://en.wikipedia.org/wiki/Domain_name -// * http://en.wikipedia.org/wiki/Hostname -// -internals.validate = function (input) { - - // Before we can validate we need to take care of IDNs with unicode chars. - var ascii = Punycode.toASCII(input); - - if (ascii.length < 1) { - return 'DOMAIN_TOO_SHORT'; - } - if (ascii.length > 255) { - return 'DOMAIN_TOO_LONG'; - } - - // Check each part's length and allowed chars. - var labels = ascii.split('.'); - var label; - - for (var i = 0; i < labels.length; ++i) { - label = labels[i]; - if (!label.length) { - return 'LABEL_TOO_SHORT'; - } - if (label.length > 63) { - return 'LABEL_TOO_LONG'; - } - if (label.charAt(0) === '-') { - return 'LABEL_STARTS_WITH_DASH'; - } - if (label.charAt(label.length - 1) === '-') { - return 'LABEL_ENDS_WITH_DASH'; - } - if (!/^[a-z0-9\-]+$/.test(label)) { - return 'LABEL_INVALID_CHARS'; - } - } -}; - - -// -// Public API -// - - -// -// Parse domain. -// -exports.parse = function (input) { - - if (typeof input !== 'string') { - throw new TypeError('Domain name must be a string.'); - } - - // Force domain to lowercase. - var domain = input.slice(0).toLowerCase(); - - // Handle FQDN. - // TODO: Simply remove trailing dot? - if (domain.charAt(domain.length - 1) === '.') { - domain = domain.slice(0, domain.length - 1); - } - - // Validate and sanitise input. - var error = internals.validate(domain); - if (error) { - return { - input: input, - error: { - message: exports.errorCodes[error], - code: error - } - }; - } - - var parsed = { - input: input, - tld: null, - sld: null, - domain: null, - subdomain: null, - listed: false - }; - - var domainParts = domain.split('.'); - - // Non-Internet TLD - if (domainParts[domainParts.length - 1] === 'local') { - return parsed; - } - - var handlePunycode = function () { - - if (!/xn--/.test(domain)) { - return parsed; - } - if (parsed.domain) { - parsed.domain = Punycode.toASCII(parsed.domain); - } - if (parsed.subdomain) { - parsed.subdomain = Punycode.toASCII(parsed.subdomain); - } - return parsed; - }; - - var rule = internals.findRule(domain); - - // Unlisted tld. - if (!rule) { - if (domainParts.length < 2) { - return parsed; - } - parsed.tld = domainParts.pop(); - parsed.sld = domainParts.pop(); - parsed.domain = [parsed.sld, parsed.tld].join('.'); - if (domainParts.length) { - parsed.subdomain = domainParts.pop(); - } - return handlePunycode(); - } - - // At this point we know the public suffix is listed. - parsed.listed = true; - - var tldParts = rule.suffix.split('.'); - var privateParts = domainParts.slice(0, domainParts.length - tldParts.length); - - if (rule.exception) { - privateParts.push(tldParts.shift()); - } - - parsed.tld = tldParts.join('.'); - - if (!privateParts.length) { - return handlePunycode(); - } - - if (rule.wildcard) { - tldParts.unshift(privateParts.pop()); - parsed.tld = tldParts.join('.'); - } - - if (!privateParts.length) { - return handlePunycode(); - } - - parsed.sld = privateParts.pop(); - parsed.domain = [parsed.sld, parsed.tld].join('.'); - - if (privateParts.length) { - parsed.subdomain = privateParts.join('.'); - } - - return handlePunycode(); -}; - - -// -// Get domain. -// -exports.get = function (domain) { - - if (!domain) { - return null; - } - return exports.parse(domain).domain || null; -}; - - -// -// Check whether domain belongs to a known public suffix. -// -exports.isValid = function (domain) { - - var parsed = exports.parse(domain); - return Boolean(parsed.domain && parsed.listed); -}; - -},{"./data/rules.json":1,"punycode":3}],3:[function(require,module,exports){ -(function (global){ -/*! https://mths.be/punycode v1.4.1 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.4.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define('punycode', function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[2])(2) -}); diff --git a/truebit-implementation/node_modules/psl/dist/psl.min.js b/truebit-implementation/node_modules/psl/dist/psl.min.js deleted file mode 100644 index 68fa8105..00000000 --- a/truebit-implementation/node_modules/psl/dist/psl.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).psl=a()}}(function(){return function s(m,t,u){function r(o,a){if(!t[o]){if(!m[o]){var i="function"==typeof require&&require;if(!a&&i)return i(o,!0);if(p)return p(o,!0);var e=new Error("Cannot find module '"+o+"'");throw e.code="MODULE_NOT_FOUND",e}var n=t[o]={exports:{}};m[o][0].call(n.exports,function(a){return r(m[o][1][a]||a)},n,n.exports,s,m,t,u)}return t[o].exports}for(var p="function"==typeof require&&require,a=0;a= 0x80 (not a basic code point)","invalid-input":"Invalid input"},c=b-y,x=Math.floor,q=String.fromCharCode;function A(a){throw new RangeError(k[a])}function g(a,o){for(var i=a.length,e=[];i--;)e[i]=o(a[i]);return e}function l(a,o){var i=a.split("@"),e="";return 1>>10&1023|55296),a=56320|1023&a),o+=q(a)}).join("")}function L(a,o){return a+22+75*(a<26)-((0!=o)<<5)}function I(a,o,i){var e=0;for(a=i?x(a/t):a>>1,a+=x(a/o);c*f>>1x((d-l)/m))&&A("overflow"),l+=u*m,!(u<(r=t<=j?y:j+f<=t?f:t-j));t+=b)m>x(d/(p=b-r))&&A("overflow"),m*=p;j=I(l-s,o=c.length+1,0==s),x(l/o)>d-h&&A("overflow"),h+=x(l/o),l%=o,c.splice(l++,0,h)}return _(c)}function j(a){var o,i,e,n,s,m,t,u,r,p,k,c,g,l,h,j=[];for(c=(a=O(a)).length,o=w,s=v,m=i=0;mx((d-i)/(g=e+1))&&A("overflow"),i+=(t-o)*g,o=t,m=0;md&&A("overflow"),k==o){for(u=i,r=b;!(u<(p=r<=s?y:s+f<=r?f:r-s));r+=b)h=u-p,l=b-p,j.push(q(L(p+h%l,0))),u=x(h/l);j.push(q(L(u,0))),s=I(i,g,e==n),i=0,++e}++i,++o}return j.join("")}if(n={version:"1.4.1",ucs2:{decode:O,encode:_},decode:h,encode:j,toASCII:function(a){return l(a,function(a){return r.test(a)?"xn--"+j(a):a})},toUnicode:function(a){return l(a,function(a){return u.test(a)?h(a.slice(4).toLowerCase()):a})}},o&&i)if(T.exports==o)i.exports=n;else for(s in n)n.hasOwnProperty(s)&&(o[s]=n[s]);else a.punycode=n}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[2])(2)}); diff --git a/truebit-implementation/node_modules/psl/index.js b/truebit-implementation/node_modules/psl/index.js deleted file mode 100644 index da7bc121..00000000 --- a/truebit-implementation/node_modules/psl/index.js +++ /dev/null @@ -1,269 +0,0 @@ -/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */ -'use strict'; - - -var Punycode = require('punycode'); - - -var internals = {}; - - -// -// Read rules from file. -// -internals.rules = require('./data/rules.json').map(function (rule) { - - return { - rule: rule, - suffix: rule.replace(/^(\*\.|\!)/, ''), - punySuffix: -1, - wildcard: rule.charAt(0) === '*', - exception: rule.charAt(0) === '!' - }; -}); - - -// -// Check is given string ends with `suffix`. -// -internals.endsWith = function (str, suffix) { - - return str.indexOf(suffix, str.length - suffix.length) !== -1; -}; - - -// -// Find rule for a given domain. -// -internals.findRule = function (domain) { - - var punyDomain = Punycode.toASCII(domain); - return internals.rules.reduce(function (memo, rule) { - - if (rule.punySuffix === -1){ - rule.punySuffix = Punycode.toASCII(rule.suffix); - } - if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) { - return memo; - } - // This has been commented out as it never seems to run. This is because - // sub tlds always appear after their parents and we never find a shorter - // match. - //if (memo) { - // var memoSuffix = Punycode.toASCII(memo.suffix); - // if (memoSuffix.length >= punySuffix.length) { - // return memo; - // } - //} - return rule; - }, null); -}; - - -// -// Error codes and messages. -// -exports.errorCodes = { - DOMAIN_TOO_SHORT: 'Domain name too short.', - DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.', - LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.', - LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.', - LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.', - LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.', - LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.' -}; - - -// -// Validate domain name and throw if not valid. -// -// From wikipedia: -// -// Hostnames are composed of series of labels concatenated with dots, as are all -// domain names. Each label must be between 1 and 63 characters long, and the -// entire hostname (including the delimiting dots) has a maximum of 255 chars. -// -// Allowed chars: -// -// * `a-z` -// * `0-9` -// * `-` but not as a starting or ending character -// * `.` as a separator for the textual portions of a domain name -// -// * http://en.wikipedia.org/wiki/Domain_name -// * http://en.wikipedia.org/wiki/Hostname -// -internals.validate = function (input) { - - // Before we can validate we need to take care of IDNs with unicode chars. - var ascii = Punycode.toASCII(input); - - if (ascii.length < 1) { - return 'DOMAIN_TOO_SHORT'; - } - if (ascii.length > 255) { - return 'DOMAIN_TOO_LONG'; - } - - // Check each part's length and allowed chars. - var labels = ascii.split('.'); - var label; - - for (var i = 0; i < labels.length; ++i) { - label = labels[i]; - if (!label.length) { - return 'LABEL_TOO_SHORT'; - } - if (label.length > 63) { - return 'LABEL_TOO_LONG'; - } - if (label.charAt(0) === '-') { - return 'LABEL_STARTS_WITH_DASH'; - } - if (label.charAt(label.length - 1) === '-') { - return 'LABEL_ENDS_WITH_DASH'; - } - if (!/^[a-z0-9\-]+$/.test(label)) { - return 'LABEL_INVALID_CHARS'; - } - } -}; - - -// -// Public API -// - - -// -// Parse domain. -// -exports.parse = function (input) { - - if (typeof input !== 'string') { - throw new TypeError('Domain name must be a string.'); - } - - // Force domain to lowercase. - var domain = input.slice(0).toLowerCase(); - - // Handle FQDN. - // TODO: Simply remove trailing dot? - if (domain.charAt(domain.length - 1) === '.') { - domain = domain.slice(0, domain.length - 1); - } - - // Validate and sanitise input. - var error = internals.validate(domain); - if (error) { - return { - input: input, - error: { - message: exports.errorCodes[error], - code: error - } - }; - } - - var parsed = { - input: input, - tld: null, - sld: null, - domain: null, - subdomain: null, - listed: false - }; - - var domainParts = domain.split('.'); - - // Non-Internet TLD - if (domainParts[domainParts.length - 1] === 'local') { - return parsed; - } - - var handlePunycode = function () { - - if (!/xn--/.test(domain)) { - return parsed; - } - if (parsed.domain) { - parsed.domain = Punycode.toASCII(parsed.domain); - } - if (parsed.subdomain) { - parsed.subdomain = Punycode.toASCII(parsed.subdomain); - } - return parsed; - }; - - var rule = internals.findRule(domain); - - // Unlisted tld. - if (!rule) { - if (domainParts.length < 2) { - return parsed; - } - parsed.tld = domainParts.pop(); - parsed.sld = domainParts.pop(); - parsed.domain = [parsed.sld, parsed.tld].join('.'); - if (domainParts.length) { - parsed.subdomain = domainParts.pop(); - } - return handlePunycode(); - } - - // At this point we know the public suffix is listed. - parsed.listed = true; - - var tldParts = rule.suffix.split('.'); - var privateParts = domainParts.slice(0, domainParts.length - tldParts.length); - - if (rule.exception) { - privateParts.push(tldParts.shift()); - } - - parsed.tld = tldParts.join('.'); - - if (!privateParts.length) { - return handlePunycode(); - } - - if (rule.wildcard) { - tldParts.unshift(privateParts.pop()); - parsed.tld = tldParts.join('.'); - } - - if (!privateParts.length) { - return handlePunycode(); - } - - parsed.sld = privateParts.pop(); - parsed.domain = [parsed.sld, parsed.tld].join('.'); - - if (privateParts.length) { - parsed.subdomain = privateParts.join('.'); - } - - return handlePunycode(); -}; - - -// -// Get domain. -// -exports.get = function (domain) { - - if (!domain) { - return null; - } - return exports.parse(domain).domain || null; -}; - - -// -// Check whether domain belongs to a known public suffix. -// -exports.isValid = function (domain) { - - var parsed = exports.parse(domain); - return Boolean(parsed.domain && parsed.listed); -}; diff --git a/truebit-implementation/node_modules/psl/karma.conf.js b/truebit-implementation/node_modules/psl/karma.conf.js deleted file mode 100644 index f5b99819..00000000 --- a/truebit-implementation/node_modules/psl/karma.conf.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - - -module.exports = function (config) { - - config.set({ - - browsers: ['PhantomJS'], - - frameworks: ['browserify', 'mocha'], - - files: [ - 'test/**/*.spec.js' - ], - - preprocessors: { - 'test/**/*.spec.js': ['browserify'] - }, - - reporters: ['mocha'], - - client: { - mocha: { - reporter: 'tap' - } - }, - - plugins: [ - 'karma-browserify', - 'karma-mocha', - 'karma-mocha-reporter', - 'karma-phantomjs-launcher' - ] - - }); - -}; - diff --git a/truebit-implementation/node_modules/psl/package.json b/truebit-implementation/node_modules/psl/package.json deleted file mode 100644 index 4a563f1b..00000000 --- a/truebit-implementation/node_modules/psl/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "_from": "psl@^1.1.24", - "_id": "psl@1.1.29", - "_inBundle": false, - "_integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", - "_location": "/psl", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "psl@^1.1.24", - "name": "psl", - "escapedName": "psl", - "rawSpec": "^1.1.24", - "saveSpec": null, - "fetchSpec": "^1.1.24" - }, - "_requiredBy": [ - "/tough-cookie" - ], - "_resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "_shasum": "60f580d360170bb722a797cc704411e6da850c67", - "_spec": "psl@^1.1.24", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tough-cookie", - "author": { - "name": "Lupo Montero" - }, - "bugs": { - "url": "https://github.com/wrangr/psl/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Domain name parser based on the Public Suffix List", - "devDependencies": { - "JSONStream": "^1.3.3", - "browserify": "^16.2.2", - "eslint": "^5.2.0", - "eslint-config-hapi": "^12.0.0", - "eslint-plugin-hapi": "^4.1.0", - "event-stream": "^3.3.4", - "karma": "^2.0.5", - "karma-browserify": "^5.3.0", - "karma-mocha": "^1.3.0", - "karma-mocha-reporter": "^2.2.5", - "karma-phantomjs-launcher": "^1.0.4", - "mocha": "^5.2.0", - "phantomjs-prebuilt": "^2.1.16", - "request": "^2.87.0", - "uglify-js": "^3.4.6", - "watchify": "^3.11.0" - }, - "homepage": "https://github.com/wrangr/psl#readme", - "keywords": [ - "publicsuffix", - "publicsuffixlist" - ], - "license": "MIT", - "main": "index.js", - "name": "psl", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/wrangr/psl.git" - }, - "scripts": { - "build": "browserify ./index.js --standalone=psl > ./dist/psl.js", - "postbuild": "cat ./dist/psl.js | uglifyjs -c -m > ./dist/psl.min.js", - "prebuild": "node ./data/build.js", - "pretest": "eslint .", - "test": "mocha test && karma start ./karma.conf.js --single-run", - "watch": "mocha test --watch" - }, - "version": "1.1.29" -} diff --git a/truebit-implementation/node_modules/psl/yarn.lock b/truebit-implementation/node_modules/psl/yarn.lock deleted file mode 100644 index 8735efe9..00000000 --- a/truebit-implementation/node_modules/psl/yarn.lock +++ /dev/null @@ -1,4532 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -JSONStream@^1.0.3: - version "1.3.2" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -JSONStream@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.3.tgz#27b4b8fbbfeab4e71bcf551e7f27be8d952239bf" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -accepts@~1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-jsx@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" - dependencies: - acorn "^5.0.3" - -acorn-node@^1.2.0, acorn-node@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" - dependencies: - acorn "^5.4.1" - xtend "^4.0.1" - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.3, acorn@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" - -acorn@^5.4.1: - version "5.5.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" - -addressparser@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - -agent-base@4, agent-base@^4.1.0, agent-base@^4.2.0, agent-base@~4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - dependencies: - es6-promisify "^5.0.0" - -ajv-keywords@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv@^5.1.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.0.1, ajv@^6.5.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.1" - -amqplib@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.2.tgz#d2d7313c7ffaa4d10bcf1e6252de4591b6cc7b63" - dependencies: - bitsyntax "~0.0.4" - bluebird "^3.4.6" - buffer-more-ints "0.0.2" - readable-stream "1.x >=1.1.9" - safe-buffer "^5.0.1" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -ast-types@0.x.x: - version "0.11.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" - -astw@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" - dependencies: - acorn "^4.0.3" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async@~2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.2.1, aws4@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" - -axios@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" - dependencies: - follow-redirects "1.0.0" - -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -bitsyntax@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.0.4.tgz#eb10cc6f82b8c490e3e85698f07e83d46e0cba82" - dependencies: - buffer-more-ints "0.0.2" - -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - -bluebird@^3.3.0, bluebird@^3.4.6: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -body-parser@^1.16.1: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^0.1.2: - version "0.1.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" - dependencies: - expand-range "^0.1.0" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-resolve@^1.11.0, browser-resolve@^1.7.0: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -browserify@^16.1.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.0.tgz#04ba47c4150555532978453818160666aa3bd8a7" - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp "^0.5.0" - module-deps "^6.0.0" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - -browserify@^16.2.2: - version "16.2.2" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.2.tgz#4b1f66ba0e54fa39dbc5aa4be9629142143d91b0" - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp "^0.5.0" - module-deps "^6.0.0" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - -buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" - -buffer-more-ints@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz#26b3885d10fa13db7fc01aae3aab870199e0124c" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -buildmail@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" - dependencies: - addressparser "1.0.1" - libbase64 "0.1.0" - libmime "3.0.0" - libqp "1.1.0" - nodemailer-fetch "1.6.0" - nodemailer-shared "1.1.0" - punycode "1.4.1" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cached-path-relative@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - -chokidar@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -circular-json@^0.5.4: - version "0.5.5" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.5.tgz#64182ef359042d37cd8e767fc9de878b1e9447d3" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -colors@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.3.tgz#1b152a9c4f6c9f74bc4bb96233ad0b7983b79744" - -combine-lists@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" - dependencies: - lodash "^4.5.0" - -combine-source-map@^0.8.0, combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@2.15.1, commander@^2.9.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - -commander@~2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.2.1, component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect@^3.6.0: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -constants-browserify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^1.1.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@^2.2.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -create-ecdh@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.1.tgz#44223dfed533193ba5ba54e0df5709b89acf1f82" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -crypto-browserify@^3.0.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - -date-format@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@2, debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@~2.6.4, debug@~2.6.6: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@3.1.0, debug@^3.1.0, debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -deps-sort@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" - dependencies: - JSONStream "^1.0.3" - shasum "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detective@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.1.0.tgz#7a20d89236d7b331ccea65832e7123b5551bb7cb" - dependencies: - acorn-node "^1.3.0" - defined "^1.0.0" - minimist "^1.1.1" - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - -domain-browser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -double-ended-queue@^2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" - -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - dependencies: - readable-stream "^2.0.2" - -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -encodeurl@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -engine.io-client@~3.1.0: - version "3.1.6" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary2 "~1.0.2" - -engine.io@~3.1.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.5.tgz#0e7ef9d690eb0b35597f1d4ad02a26ca2dba3845" - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - optionalDependencies: - uws "~9.14.0" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - -es-abstract@^1.10.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es6-promise@^4.0.3: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - dependencies: - es6-promise "^4.0.3" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@1.x.x: - version "1.9.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-hapi@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-hapi/-/eslint-config-hapi-12.0.0.tgz#2bcacc0e050d6734f95df077dc921fa755576d7e" - -eslint-plugin-hapi@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-hapi/-/eslint-plugin-hapi-4.1.0.tgz#ca6b97b7621ae45cf70ab92f8c847a85414a56c9" - dependencies: - hapi-capitalize-modules "1.x.x" - hapi-for-you "1.x.x" - hapi-no-var "1.x.x" - hapi-scope-start "2.x.x" - no-arrowception "1.x.x" - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.2.0.tgz#3901ae249195d473e633c4acbc370068b1c964dc" - dependencies: - ajv "^6.5.0" - babel-code-frame "^6.26.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^4.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.2" - imurmurhash "^0.1.4" - inquirer "^5.2.0" - is-resolvable "^1.1.0" - js-yaml "^3.11.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.1.0" - require-uncached "^1.0.3" - semver "^5.5.0" - string.prototype.matchall "^2.0.0" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^4.0.3" - text-table "^0.2.0" - -espree@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" - dependencies: - acorn "^5.6.0" - acorn-jsx "^4.1.1" - -esprima@3.x.x, esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -event-stream@^3.3.4: - version "3.3.4" - resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - -events@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-2.0.0.tgz#cbbb56bf3ab1ac18d71c43bb32c86255062769f2" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -expand-braces@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" - dependencies: - array-slice "^0.2.3" - array-unique "^0.2.1" - braces "^0.1.2" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" - dependencies: - is-number "^0.1.1" - repeat-string "^0.2.2" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -external-editor@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@^1.6.5: - version "1.6.6" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" - dependencies: - concat-stream "1.6.0" - debug "2.6.9" - mkdirp "0.5.0" - yauzl "2.4.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - dependencies: - pend "~1.2.0" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -follow-redirects@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" - dependencies: - debug "^2.2.0" - -follow-redirects@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" - dependencies: - debug "^3.1.0" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - -form-data@~2.3.0, form-data@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.3.tgz#08292982e7059f6674c93d8b829c1e8604979ac0" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.9.0" - -fsevents@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-uri@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.2.tgz#5c795e71326f6ca1286f2fc82575cd2bab2af578" - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "3" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.7.0: - version "11.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - -hapi-capitalize-modules@1.x.x: - version "1.1.6" - resolved "https://registry.yarnpkg.com/hapi-capitalize-modules/-/hapi-capitalize-modules-1.1.6.tgz#7991171415e15e6aa3231e64dda73c8146665318" - -hapi-for-you@1.x.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hapi-for-you/-/hapi-for-you-1.0.0.tgz#d362fbee8d7bda9c2c7801e207e5a5cd1a0b6a7b" - -hapi-no-var@1.x.x: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hapi-no-var/-/hapi-no-var-1.0.1.tgz#e9d87fd4de6149104a3fca797ef5c2ef5c182342" - -hapi-scope-start@2.x.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/hapi-scope-start/-/hapi-scope-start-2.1.1.tgz#7495a726fe72b7bca8de2cdcc1d87cd8ce6ab4f2" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-binary2@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -has@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hasha@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" - dependencies: - is-stream "^1.0.1" - pinkie-promise "^2.0.0" - -hat@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -hipchat-notifier@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" - dependencies: - lodash "^4.0.0" - request "^2.0.0" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" - -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - -http-errors@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-errors@1.6.3, http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - dependencies: - agent-base "4" - debug "3.1.0" - -http-proxy@^1.13.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - dependencies: - eventemitter3 "^3.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -httpntlm@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" - dependencies: - httpreq ">=0.4.22" - underscore "~1.7.0" - -httpreq@>=0.4.22: - version "0.4.24" - resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -iconv-lite@0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.4.17, iconv-lite@^0.4.4: - version "0.4.21" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" - dependencies: - safer-buffer "^2.1.0" - -ieee754@^1.1.4: - version "1.1.11" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.3.tgz#e2d58c9654d75b542529fa28d80ac95b29e4f467" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflection@~1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" - -inflection@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - dependencies: - source-map "~0.5.3" - -inquirer@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.1.0" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^5.5.2" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -insert-module-globals@^7.0.0: - version "7.0.6" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.6.tgz#15a31d9d394e76d08838b9173016911d7fd4ea1b" - dependencies: - JSONStream "^1.0.3" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - lexical-scope "^1.2.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - xtend "^4.0.0" - -ip@^1.1.2, ip@^1.1.4, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.0, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - -isarray@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" - -isbinaryfile@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -js-string-escape@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -karma-browserify@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/karma-browserify/-/karma-browserify-5.3.0.tgz#9001796dfd1196cbc0327b022a00c6345a28e5dd" - dependencies: - convert-source-map "^1.1.3" - hat "^0.0.3" - js-string-escape "^1.0.0" - lodash "^4.17.10" - minimatch "^3.0.0" - os-shim "^0.1.3" - -karma-mocha-reporter@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560" - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - strip-ansi "^4.0.0" - -karma-mocha@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf" - dependencies: - minimist "1.2.0" - -karma-phantomjs-launcher@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2" - dependencies: - lodash "^4.0.1" - phantomjs-prebuilt "^2.1.7" - -karma@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.5.tgz#3710c7a2e71b1c439313f283846d88e04e4f918c" - dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - chokidar "^2.0.3" - colors "^1.1.0" - combine-lists "^1.0.0" - connect "^3.6.0" - core-js "^2.2.0" - di "^0.0.1" - dom-serialize "^2.2.0" - expand-braces "^0.1.1" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^4.17.4" - log4js "^2.5.3" - mime "^1.3.4" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "2.0.4" - source-map "^0.6.1" - tmp "0.0.33" - useragent "2.2.1" - -kew@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -labeled-stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" - dependencies: - inherits "^2.0.1" - isarray "^2.0.4" - stream-splicer "^2.0.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lexical-scope@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" - dependencies: - astw "^2.0.0" - -libbase64@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" - -libmime@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" - dependencies: - iconv-lite "0.4.15" - libbase64 "0.1.0" - libqp "1.1.0" - -libqp@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" - -log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -log4js@^2.5.3: - version "2.11.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-2.11.0.tgz#bf3902eff65c6923d9ce9cfbd2db54160e34005a" - dependencies: - circular-json "^0.5.4" - date-format "^1.2.0" - debug "^3.1.0" - semver "^5.5.0" - streamroller "0.7.0" - optionalDependencies: - amqplib "^0.5.2" - axios "^0.15.3" - hipchat-notifier "^1.1.0" - loggly "^1.1.0" - mailgun-js "^0.18.0" - nodemailer "^2.5.0" - redis "^2.7.1" - slack-node "~0.2.0" - -loggly@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee" - dependencies: - json-stringify-safe "5.0.x" - request "2.75.x" - timespan "2.3.x" - -lru-cache@2.2.x: - version "2.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" - -lru-cache@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -mailcomposer@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" - dependencies: - buildmail "4.0.1" - libmime "3.0.0" - -mailgun-js@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/mailgun-js/-/mailgun-js-0.18.1.tgz#ee39aa18d7bb598a5ce9ede84afb681defc8a6b0" - dependencies: - async "~2.6.0" - debug "~3.1.0" - form-data "~2.3.0" - inflection "~1.12.0" - is-stream "^1.1.0" - path-proxy "~1.0.0" - promisify-call "^2.0.2" - proxy-agent "~3.0.0" - tsscmp "~1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - dependencies: - mime-db "~1.33.0" - -mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -minipass@^2.2.1, minipass@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.4.tgz#03c824d84551ec38a8d1bb5bc350a5a30a354a40" - dependencies: - safe-buffer "^5.1.1" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" - dependencies: - minimist "0.0.8" - -mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mocha@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" - dependencies: - browser-stdout "1.3.1" - commander "2.15.1" - debug "3.1.0" - diff "3.5.0" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.5" - he "1.1.1" - minimatch "3.0.4" - mkdirp "0.5.1" - supports-color "5.4.0" - -module-deps@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.0.2.tgz#660217d1602b863ac8d4d16951a3720dd9aa4c80" - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.0" - concat-stream "~1.6.0" - defined "^1.0.0" - detective "^5.0.2" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.4.0" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -needle@^2.2.0, needle@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - -nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" - -no-arrowception@1.x.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/no-arrowception/-/no-arrowception-1.0.0.tgz#5bf3e95eb9c41b57384a805333daa3b734ee327a" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-pre-gyp@^0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.0" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.1.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - -nodemailer-direct-transport@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" - dependencies: - nodemailer-shared "1.1.0" - smtp-connection "2.12.0" - -nodemailer-fetch@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" - -nodemailer-shared@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" - dependencies: - nodemailer-fetch "1.6.0" - -nodemailer-smtp-pool@2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-smtp-transport@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-wellknown@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" - -nodemailer@^2.5.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" - dependencies: - libmime "3.0.0" - mailcomposer "4.0.1" - nodemailer-direct-transport "3.3.2" - nodemailer-shared "1.1.0" - nodemailer-smtp-pool "2.8.2" - nodemailer-smtp-transport "2.7.2" - socks "1.1.9" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" - -npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.8: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-browserify@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-shim@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -outpipe@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" - dependencies: - shell-quote "^1.4.2" - -pac-proxy-agent@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-2.0.2.tgz#90d9f6730ab0f4d2607dcdcd4d3d641aa26c3896" - dependencies: - agent-base "^4.2.0" - debug "^3.1.0" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^3.0.0" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - dependencies: - path-platform "~0.11.15" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - -path-proxy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e" - dependencies: - inflection "~1.3.0" - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - dependencies: - through "~2.3" - -pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -phantomjs-prebuilt@^2.1.16, phantomjs-prebuilt@^2.1.7: - version "2.1.16" - resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef" - dependencies: - es6-promise "^4.0.3" - extract-zip "^1.6.5" - fs-extra "^1.0.0" - hasha "^2.2.0" - kew "^0.7.0" - progress "^1.1.8" - request "^2.81.0" - request-progress "^2.0.1" - which "^1.2.10" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@~0.11.0: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - -promisify-call@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/promisify-call/-/promisify-call-2.0.4.tgz#d48c2d45652ccccd52801ddecbd533a6d4bd5fba" - dependencies: - with-callback "^1.0.2" - -proxy-agent@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.0.1.tgz#4fb7b61b1476d0fe8e3a3384d90e2460bbded3f9" - dependencies: - agent-base "^4.2.0" - debug "^3.1.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^4.1.2" - pac-proxy-agent "^2.0.1" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - -proxy-from-env@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -public-encrypt@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@1.4.1, punycode@^1.3.2, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -qjobs@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - -qs@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~6.2.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - -qs@~6.5.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -raw-body@^2.2.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - -rc@^1.1.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" - dependencies: - deep-extend "^0.5.1" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - dependencies: - readable-stream "^2.0.2" - -readable-stream@1.1.x, "readable-stream@1.x >=1.1.9": - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@2, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -redis-commands@^1.2.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.5.tgz#4495889414f1e886261180b1442e7295602d83a2" - -redis-parser@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" - -redis@^2.7.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" - dependencies: - double-ended-queue "^2.1.0-0" - redis-commands "^1.2.0" - redis-parser "^2.6.0" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" - dependencies: - define-properties "^1.1.2" - -regexpp@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -request-progress@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" - dependencies: - throttleit "^1.0.0" - -request@2.75.x: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@^2.0.0, request@^2.74.0, request@^2.81.0: - version "2.85.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -request@^2.87.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -requestretry@^1.2.2: - version "1.13.0" - resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.13.0.tgz#213ec1006eeb750e8b8ce54176283d15a8d55d94" - dependencies: - extend "^3.0.0" - lodash "^4.15.0" - request "^2.74.0" - when "^3.7.7" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.4, resolve@^1.4.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" - dependencies: - path-parse "^1.0.5" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -rimraf@^2.2.8, rimraf@^2.6.0, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -rxjs@^5.5.2: - version "5.5.11" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" - dependencies: - symbol-observable "1.0.1" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -semver@^5.3.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@^1.4.2, shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slack-node@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" - dependencies: - requestretry "^1.2.2" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -smart-buffer@^1.0.13, smart-buffer@^1.0.4: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - -smart-buffer@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" - -smtp-connection@2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" - dependencies: - httpntlm "1.6.1" - nodemailer-shared "1.1.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - -socket.io-client@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~2.6.4" - engine.io-client "~3.1.0" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.1.1" - to-array "0.1.4" - -socket.io-parser@~3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - has-binary2 "~1.0.2" - isarray "2.0.1" - -socket.io@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" - dependencies: - debug "~2.6.6" - engine.io "~3.1.0" - socket.io-adapter "~1.1.0" - socket.io-client "2.0.4" - socket.io-parser "~3.1.1" - -socks-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" - dependencies: - agent-base "^4.1.0" - socks "^1.1.10" - -socks-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" - dependencies: - agent-base "~4.2.0" - socks "~2.2.0" - -socks@1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" - dependencies: - ip "^1.1.2" - smart-buffer "^1.0.4" - -socks@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - -socks@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.1.tgz#68ad678b3642fbc5d99c64c165bc561eab0215f9" - dependencies: - ip "^1.1.5" - smart-buffer "^4.0.1" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.5.6, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stream-browserify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - -stream-http@^2.0.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.3" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-splicer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - -streamroller@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b" - dependencies: - date-format "^1.2.0" - debug "^3.1.0" - mkdirp "^0.5.1" - readable-stream "^2.3.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string.prototype.matchall@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz#2af8fe3d2d6dc53ca2a59bd376b089c3c152b3c8" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.10.0" - function-bind "^1.1.1" - has-symbols "^1.0.0" - regexp.prototype.flags "^1.2.0" - -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - dependencies: - minimist "^1.1.0" - -supports-color@5.4.0, supports-color@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - dependencies: - has-flag "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - dependencies: - acorn-node "^1.2.0" - -table@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -tar@^4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.2.4" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - dependencies: - process "~0.11.0" - -timespan@2.3.x: - version "2.3.0" - resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" - -tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - -tsscmp@~1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" - -tty-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.15: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-js@^3.4.6: - version "3.4.6" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.6.tgz#bc546d53f3e02b05d97d0ca5a7abfe0fb0384ddb" - dependencies: - commander "~2.16.0" - source-map "~0.6.1" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - -uri-js@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -url@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -useragent@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e" - dependencies: - lru-cache "2.2.x" - tmp "0.0.x" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3, util@~0.10.1: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -uws@~9.14.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/uws/-/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.0.1.tgz#a15d7762c4c48fa6bf9f3309a21340f00ed23063" - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - -watchify@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.0.tgz#03f1355c643955e7ab8dcbf399f624644221330f" - dependencies: - anymatch "^1.3.0" - browserify "^16.1.0" - chokidar "^1.0.0" - defined "^1.0.0" - outpipe "^1.1.0" - through2 "^2.0.0" - xtend "^4.0.0" - -when@^3.7.7: - version "3.7.8" - resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" - -which@^1.2.10, which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - -with-callback@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/with-callback/-/with-callback-1.0.2.tgz#a09629b9a920028d721404fb435bdcff5c91bc21" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - dependencies: - fd-slicer "~1.0.1" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/truebit-implementation/node_modules/public-encrypt/.travis.yml b/truebit-implementation/node_modules/public-encrypt/.travis.yml deleted file mode 100644 index 1b726667..00000000 --- a/truebit-implementation/node_modules/public-encrypt/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.11" - - "0.12" - - iojs \ No newline at end of file diff --git a/truebit-implementation/node_modules/public-encrypt/LICENSE b/truebit-implementation/node_modules/public-encrypt/LICENSE deleted file mode 100644 index c9ddc0fe..00000000 --- a/truebit-implementation/node_modules/public-encrypt/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2017 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/public-encrypt/browser.js b/truebit-implementation/node_modules/public-encrypt/browser.js deleted file mode 100644 index 4032f686..00000000 --- a/truebit-implementation/node_modules/public-encrypt/browser.js +++ /dev/null @@ -1,10 +0,0 @@ -exports.publicEncrypt = require('./publicEncrypt') -exports.privateDecrypt = require('./privateDecrypt') - -exports.privateEncrypt = function privateEncrypt (key, buf) { - return exports.publicEncrypt(key, buf, true) -} - -exports.publicDecrypt = function publicDecrypt (key, buf) { - return exports.privateDecrypt(key, buf, true) -} diff --git a/truebit-implementation/node_modules/public-encrypt/index.js b/truebit-implementation/node_modules/public-encrypt/index.js deleted file mode 100644 index 6ff4014e..00000000 --- a/truebit-implementation/node_modules/public-encrypt/index.js +++ /dev/null @@ -1,18 +0,0 @@ -var crypto = require('crypto') -if (typeof crypto.publicEncrypt !== 'function') { - crypto = require('./browser') -} -exports.publicEncrypt = crypto.publicEncrypt -exports.privateDecrypt = crypto.privateDecrypt - -if (typeof crypto.privateEncrypt !== 'function') { - exports.privateEncrypt = require('./browser').privateEncrypt -} else { - exports.privateEncrypt = crypto.privateEncrypt -} - -if (typeof crypto.publicDecrypt !== 'function') { - exports.publicDecrypt = require('./browser').publicDecrypt -} else { - exports.publicDecrypt = crypto.publicDecrypt -} diff --git a/truebit-implementation/node_modules/public-encrypt/mgf.js b/truebit-implementation/node_modules/public-encrypt/mgf.js deleted file mode 100644 index b966f317..00000000 --- a/truebit-implementation/node_modules/public-encrypt/mgf.js +++ /dev/null @@ -1,19 +0,0 @@ -var createHash = require('create-hash') -var Buffer = require('safe-buffer').Buffer - -module.exports = function (seed, len) { - var t = Buffer.alloc(0) - var i = 0 - var c - while (t.length < len) { - c = i2ops(i++) - t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]) - } - return t.slice(0, len) -} - -function i2ops (c) { - var out = Buffer.allocUnsafe(4) - out.writeUInt32BE(c, 0) - return out -} diff --git a/truebit-implementation/node_modules/public-encrypt/package.json b/truebit-implementation/node_modules/public-encrypt/package.json deleted file mode 100644 index c70f5934..00000000 --- a/truebit-implementation/node_modules/public-encrypt/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "public-encrypt@^4.0.0", - "_id": "public-encrypt@4.0.3", - "_inBundle": false, - "_integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "_location": "/public-encrypt", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "public-encrypt@^4.0.0", - "name": "public-encrypt", - "escapedName": "public-encrypt", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/crypto-browserify" - ], - "_resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "_shasum": "4fcc9d77a07e48ba7527e7cbe0de33d0701331e0", - "_spec": "public-encrypt@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": { - "name": "Calvin Metcalf" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/publicEncrypt/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "deprecated": false, - "description": "browserify version of publicEncrypt & privateDecrypt", - "devDependencies": { - "standard": "^12.0.0", - "tap-spec": "^2.1.2", - "tape": "^3.0.3" - }, - "directories": { - "test": "test" - }, - "homepage": "https://github.com/crypto-browserify/publicEncrypt", - "license": "MIT", - "main": "index.js", - "name": "public-encrypt", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/publicEncrypt.git" - }, - "scripts": { - "lint": "standard", - "test": "node test/index.js | tspec" - }, - "version": "4.0.3" -} diff --git a/truebit-implementation/node_modules/public-encrypt/privateDecrypt.js b/truebit-implementation/node_modules/public-encrypt/privateDecrypt.js deleted file mode 100644 index 8fc6dfec..00000000 --- a/truebit-implementation/node_modules/public-encrypt/privateDecrypt.js +++ /dev/null @@ -1,105 +0,0 @@ -var parseKeys = require('parse-asn1') -var mgf = require('./mgf') -var xor = require('./xor') -var BN = require('bn.js') -var crt = require('browserify-rsa') -var createHash = require('create-hash') -var withPublic = require('./withPublic') -var Buffer = require('safe-buffer').Buffer - -module.exports = function privateDecrypt (privateKey, enc, reverse) { - var padding - if (privateKey.padding) { - padding = privateKey.padding - } else if (reverse) { - padding = 1 - } else { - padding = 4 - } - - var key = parseKeys(privateKey) - var k = key.modulus.byteLength() - if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { - throw new Error('decryption error') - } - var msg - if (reverse) { - msg = withPublic(new BN(enc), key) - } else { - msg = crt(enc, key) - } - var zBuffer = Buffer.alloc(k - msg.length) - msg = Buffer.concat([zBuffer, msg], k) - if (padding === 4) { - return oaep(key, msg) - } else if (padding === 1) { - return pkcs1(key, msg, reverse) - } else if (padding === 3) { - return msg - } else { - throw new Error('unknown padding') - } -} - -function oaep (key, msg) { - var k = key.modulus.byteLength() - var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() - var hLen = iHash.length - if (msg[0] !== 0) { - throw new Error('decryption error') - } - var maskedSeed = msg.slice(1, hLen + 1) - var maskedDb = msg.slice(hLen + 1) - var seed = xor(maskedSeed, mgf(maskedDb, hLen)) - var db = xor(maskedDb, mgf(seed, k - hLen - 1)) - if (compare(iHash, db.slice(0, hLen))) { - throw new Error('decryption error') - } - var i = hLen - while (db[i] === 0) { - i++ - } - if (db[i++] !== 1) { - throw new Error('decryption error') - } - return db.slice(i) -} - -function pkcs1 (key, msg, reverse) { - var p1 = msg.slice(0, 2) - var i = 2 - var status = 0 - while (msg[i++] !== 0) { - if (i >= msg.length) { - status++ - break - } - } - var ps = msg.slice(2, i - 1) - - if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) { - status++ - } - if (ps.length < 8) { - status++ - } - if (status) { - throw new Error('decryption error') - } - return msg.slice(i) -} -function compare (a, b) { - a = Buffer.from(a) - b = Buffer.from(b) - var dif = 0 - var len = a.length - if (a.length !== b.length) { - dif++ - len = Math.min(a.length, b.length) - } - var i = -1 - while (++i < len) { - dif += (a[i] ^ b[i]) - } - return dif -} diff --git a/truebit-implementation/node_modules/public-encrypt/publicEncrypt.js b/truebit-implementation/node_modules/public-encrypt/publicEncrypt.js deleted file mode 100644 index 122aa765..00000000 --- a/truebit-implementation/node_modules/public-encrypt/publicEncrypt.js +++ /dev/null @@ -1,88 +0,0 @@ -var parseKeys = require('parse-asn1') -var randomBytes = require('randombytes') -var createHash = require('create-hash') -var mgf = require('./mgf') -var xor = require('./xor') -var BN = require('bn.js') -var withPublic = require('./withPublic') -var crt = require('browserify-rsa') -var Buffer = require('safe-buffer').Buffer - -module.exports = function publicEncrypt (publicKey, msg, reverse) { - var padding - if (publicKey.padding) { - padding = publicKey.padding - } else if (reverse) { - padding = 1 - } else { - padding = 4 - } - var key = parseKeys(publicKey) - var paddedMsg - if (padding === 4) { - paddedMsg = oaep(key, msg) - } else if (padding === 1) { - paddedMsg = pkcs1(key, msg, reverse) - } else if (padding === 3) { - paddedMsg = new BN(msg) - if (paddedMsg.cmp(key.modulus) >= 0) { - throw new Error('data too long for modulus') - } - } else { - throw new Error('unknown padding') - } - if (reverse) { - return crt(paddedMsg, key) - } else { - return withPublic(paddedMsg, key) - } -} - -function oaep (key, msg) { - var k = key.modulus.byteLength() - var mLen = msg.length - var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() - var hLen = iHash.length - var hLen2 = 2 * hLen - if (mLen > k - hLen2 - 2) { - throw new Error('message too long') - } - var ps = Buffer.alloc(k - mLen - hLen2 - 2) - var dblen = k - hLen - 1 - var seed = randomBytes(hLen) - var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)) - var maskedSeed = xor(seed, mgf(maskedDb, hLen)) - return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)) -} -function pkcs1 (key, msg, reverse) { - var mLen = msg.length - var k = key.modulus.byteLength() - if (mLen > k - 11) { - throw new Error('message too long') - } - var ps - if (reverse) { - ps = Buffer.alloc(k - mLen - 3, 0xff) - } else { - ps = nonZero(k - mLen - 3) - } - return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)) -} -function nonZero (len) { - var out = Buffer.allocUnsafe(len) - var i = 0 - var cache = randomBytes(len * 2) - var cur = 0 - var num - while (i < len) { - if (cur === cache.length) { - cache = randomBytes(len * 2) - cur = 0 - } - num = cache[cur++] - if (num) { - out[i++] = num - } - } - return out -} diff --git a/truebit-implementation/node_modules/public-encrypt/readme.md b/truebit-implementation/node_modules/public-encrypt/readme.md deleted file mode 100644 index 96fe944f..00000000 --- a/truebit-implementation/node_modules/public-encrypt/readme.md +++ /dev/null @@ -1,8 +0,0 @@ -publicEncrypt -=== - -[![Build Status](https://travis-ci.org/crypto-browserify/publicEncrypt.svg)](https://travis-ci.org/crypto-browserify/publicEncrypt) - -publicEncrypt/privateDecrypt for browserify - -[Blog post about the moving parts that have gone into this.](http://calvinmetcalf.com/post/109301244759/porting-nodejs-crypto-to-the-browser-part-3) diff --git a/truebit-implementation/node_modules/public-encrypt/test/1024.priv b/truebit-implementation/node_modules/public-encrypt/test/1024.priv deleted file mode 100644 index 72062169..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/1024.priv +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKulUTZ8B1qccZ8c -DXRGSY08gW8KvLlcxxxGC4gZHNT3CBUF8n5R4KE30aZyYZ/rtsQZu05juZJxaJ0q -mbe75dlQ5d+Xc9BMXeQg/MpTZw5TAN7OIdGYYpFBe+1PLZ6wEfjkYrMqMUcfq2Lq -hTLdAbvBJnuRcYZLqmBeOQ8FTrKrAgMBAAECgYEAnkHRbEPU3/WISSQrP36iyCb2 -S/SBZwKkzmvCrBxDWhPeDswp9c/2JY76rNWfLzy8iXgUG8WUzvHje61Qh3gmBcKe -bUaTGl4Vy8Ha1YBADo5RfRrdm0FE4tvgvu/TkqFqpBBZweu54285hk5zlG7n/D7Y -dnNXUpu5MlNb5x3gW0kCQQDUL//cwcXUxY/evaJP4jSe+ZwEQZo+zXRLiPUulBoV -aw28CVMuxdgwqAo1X1IKefPeUaf7RQu8gCKaRnpGuEuXAkEAzxZTfMmvmCUDIew4 -5Gk6bK265XQWdhcgiq254lpBGOYmDj9yCE7yA+zmASQwMsXTdQOi1hOCEyrXuSJ5 -c++EDQJAFh3WrnzoEPByuYXMmET8tSFRWMQ5vpgNqh3haHR5b4gUC2hxaiunCBNL -1RpVY9AoUiDywGcG/SPh93CnKB3niwJBAKP7AtsifZgVXtiizB4aMThTjVYaSZrz -D0Kg9DuHylpkDChmFu77TGrNUQgAVuYtfhb/bRblVa/F0hJ4eQHT3JUCQBVT68tb -OgRUk0aP9tC3021VN82X6+klowSQN8oBPX8+TfDWSUilp/+j24Hky+Z29Do7yR/R -qutnL92CvBlVLV4= ------END PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/1024.pub b/truebit-implementation/node_modules/public-encrypt/test/1024.pub deleted file mode 100644 index 2dba785d..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/1024.pub +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrpVE2fAdanHGfHA10RkmNPIFv -Cry5XMccRguIGRzU9wgVBfJ+UeChN9GmcmGf67bEGbtOY7mScWidKpm3u+XZUOXf -l3PQTF3kIPzKU2cOUwDeziHRmGKRQXvtTy2esBH45GKzKjFHH6ti6oUy3QG7wSZ7 -kXGGS6pgXjkPBU6yqwIDAQAB ------END PUBLIC KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/ec.pass.priv b/truebit-implementation/node_modules/public-encrypt/test/ec.pass.priv deleted file mode 100644 index bf1836d5..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/ec.pass.priv +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIHeMEkGCSqGSIb3DQEFDTA8MBsGCSqGSIb3DQEFDDAOBAi9LqZQx4JFXAICCAAw -HQYJYIZIAWUDBAECBBA+js1fG4Rv/yRN7oZvxbgyBIGQ/D4yj86M1x8lMsnAHQ/K -7/ryb/baDNHqN9LTZanEGBuyxgrTzt08SiL+h91yFGMoaly029K1VgEI8Lxu5Np/ -A+LK7ewh73ABzsbuxYdcXI+rKnrvLN9Tt6veDs4GlqTTsWwq5wF0C+6gaYRBXA74 -T1b6NykGh2UNL5U5pHZEYdOVLz+lRJL7gYqlweNHP/S3 ------END ENCRYPTED PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/ec.priv b/truebit-implementation/node_modules/public-encrypt/test/ec.priv deleted file mode 100644 index 25fffbd8..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/ec.priv +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHQCAQEEIDF6Xv8Sv//wGUWD+c780ppGrU0QdZWCAzxAQPQX8r/uoAcGBSuBBAAK -oUQDQgAEIZeowDylls4K/wfBjO18bYo7gGx8nYQRija4e/qEMikOHJai7geeUreU -r5Xky/Ax7s2dGtegsPNsPgGe5MpQvg== ------END EC PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/ec.pub b/truebit-implementation/node_modules/public-encrypt/test/ec.pub deleted file mode 100644 index 2e39e5bb..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/ec.pub +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEIZeowDylls4K/wfBjO18bYo7gGx8nYQR -ija4e/qEMikOHJai7geeUreUr5Xky/Ax7s2dGtegsPNsPgGe5MpQvg== ------END PUBLIC KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/index.js b/truebit-implementation/node_modules/public-encrypt/test/index.js deleted file mode 100644 index 85b32e30..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/index.js +++ /dev/null @@ -1,113 +0,0 @@ -var test = require('tape') -var fs = require('fs') -var parseKeys = require('parse-asn1') -var Buffer = require('safe-buffer').Buffer -var path = require('path') - -require('./nodeTests') -var rsa1024 = { - private: fs.readFileSync(path.join(__dirname, 'rsa.1024.priv')), - public: fs.readFileSync(path.join(__dirname, 'rsa.1024.pub')) -} -var rsa1024priv = { - private: fs.readFileSync(path.join(__dirname, 'rsa.1024.priv')), - public: fs.readFileSync(path.join(__dirname, 'rsa.1024.priv')) -} - -var rsa2028 = { - private: fs.readFileSync(path.join(__dirname, 'rsa.2028.priv')), - public: fs.readFileSync(path.join(__dirname, 'rsa.2028.pub')) -} -var nonrsa1024 = { - private: fs.readFileSync(path.join(__dirname, '1024.priv')), - public: fs.readFileSync(path.join(__dirname, '1024.pub')) -} -var nonrsa1024str = { - private: fs.readFileSync(path.join(__dirname, '1024.priv')).toString(), - public: fs.readFileSync(path.join(__dirname, '1024.pub')).toString() -} -var pass1024 = { - private: { - passphrase: 'fooo', - key: fs.readFileSync(path.join(__dirname, 'pass.1024.priv')) - }, - public: fs.readFileSync(path.join(__dirname, 'pass.1024.pub')) -} -var pass2028 = { - private: { - passphrase: 'password', - key: fs.readFileSync(path.join(__dirname, 'rsa.pass.priv')) - }, - public: fs.readFileSync(path.join(__dirname, 'rsa.pass.pub')) -} - -var nodeCrypto = require('../') -var myCrypto = require('../browser') -function _testIt (keys, message, t) { - var pub = keys.public - var priv = keys.private - t.test(message.toString(), function (t) { - t.plan(8) - - var myEnc = myCrypto.publicEncrypt(pub, message) - var nodeEnc = nodeCrypto.publicEncrypt(pub, message) - t.equals(myCrypto.privateDecrypt(priv, myEnc).toString('hex'), message.toString('hex'), 'my decrypter my message') - t.equals(myCrypto.privateDecrypt(priv, nodeEnc).toString('hex'), message.toString('hex'), 'my decrypter node\'s message') - t.equals(nodeCrypto.privateDecrypt(priv, myEnc).toString('hex'), message.toString('hex'), 'node decrypter my message') - t.equals(nodeCrypto.privateDecrypt(priv, nodeEnc).toString('hex'), message.toString('hex'), 'node decrypter node\'s message') - myEnc = myCrypto.privateEncrypt(priv, message) - nodeEnc = nodeCrypto.privateEncrypt(priv, message) - t.equals(myCrypto.publicDecrypt(pub, myEnc).toString('hex'), message.toString('hex'), 'reverse methods my decrypter my message') - t.equals(myCrypto.publicDecrypt(pub, nodeEnc).toString('hex'), message.toString('hex'), 'reverse methods my decrypter node\'s message') - t.equals(nodeCrypto.publicDecrypt(pub, myEnc).toString('hex'), message.toString('hex'), 'reverse methods node decrypter my message') - t.equals(nodeCrypto.publicDecrypt(pub, nodeEnc).toString('hex'), message.toString('hex'), 'reverse methods node decrypter node\'s message') - }) -} -function testIt (keys, message, t) { - _testIt(keys, message, t) - _testIt(paddingObject(keys, 1), Buffer.concat([message, Buffer.from(' with RSA_PKCS1_PADDING')]), t) - var parsedKey = parseKeys(keys.public) - var k = parsedKey.modulus.byteLength() - var zBuf = Buffer.alloc(k) - var msg = Buffer.concat([zBuf, message, Buffer.from(' with no padding')]).slice(-k) - _testIt(paddingObject(keys, 3), msg, t) -} -function paddingObject (keys, padding) { - return { - public: addPadding(keys.public, padding), - private: addPadding(keys.private, padding) - } -} -function addPadding (key, padding) { - if (typeof key === 'string' || Buffer.isBuffer(key)) { - return { - key: key, - padding: padding - } - } - var out = { - key: key.key, - padding: padding - } - if ('passphrase' in key) { - out.passphrase = key.passphrase - } - return out -} -function testRun (i) { - test('run ' + i, function (t) { - testIt(rsa1024priv, Buffer.from('1024 2 private keys'), t) - testIt(rsa1024, Buffer.from('1024 keys'), t) - testIt(rsa2028, Buffer.from('2028 keys'), t) - testIt(nonrsa1024, Buffer.from('1024 keys non-rsa key'), t) - testIt(pass1024, Buffer.from('1024 keys and password'), t) - testIt(nonrsa1024str, Buffer.from('1024 keys non-rsa key as a string'), t) - testIt(pass2028, Buffer.from('2028 rsa key with variant passwords'), t) - }) -} - -var i = 0 -var num = 20 -while (++i <= num) { - testRun(i) -} diff --git a/truebit-implementation/node_modules/public-encrypt/test/nodeTests.js b/truebit-implementation/node_modules/public-encrypt/test/nodeTests.js deleted file mode 100644 index f022e071..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/nodeTests.js +++ /dev/null @@ -1,51 +0,0 @@ -var crypto = require('../browser') -var test = require('tape') -var fs = require('fs') -var Buffer = require('safe-buffer').Buffer -var path = require('path') -// Test RSA encryption/decryption -test('node tests', function (t) { - var keyPem = fs.readFileSync(path.join(__dirname, 'test_key.pem'), 'ascii') - var rsaPubPem = fs.readFileSync(path.join(__dirname, 'test_rsa_pubkey.pem'), - 'ascii') - var rsaKeyPem = fs.readFileSync(path.join(__dirname, 'test_rsa_privkey.pem'), - 'ascii') - var rsaKeyPemEncrypted = fs.readFileSync(path.join( - __dirname, 'test_rsa_privkey_encrypted.pem'), 'ascii') - var input = 'I AM THE WALRUS' - var bufferToEncrypt = Buffer.from(input) - - var encryptedBuffer = crypto.publicEncrypt(rsaPubPem, bufferToEncrypt) - - var decryptedBuffer = crypto.privateDecrypt(rsaKeyPem, encryptedBuffer) - t.equal(input, decryptedBuffer.toString()) - - var decryptedBufferWithPassword = crypto.privateDecrypt({ - key: rsaKeyPemEncrypted, - passphrase: 'password' - }, encryptedBuffer) - t.equal(input, decryptedBufferWithPassword.toString()) - - // encryptedBuffer = crypto.publicEncrypt(certPem, bufferToEncrypt); - - // decryptedBuffer = crypto.privateDecrypt(keyPem, encryptedBuffer); - // t.equal(input, decryptedBuffer.toString()); - - encryptedBuffer = crypto.publicEncrypt(keyPem, bufferToEncrypt) - - decryptedBuffer = crypto.privateDecrypt(keyPem, encryptedBuffer) - t.equal(input, decryptedBuffer.toString()) - - encryptedBuffer = crypto.privateEncrypt(keyPem, bufferToEncrypt) - - decryptedBuffer = crypto.publicDecrypt(keyPem, encryptedBuffer) - t.equal(input, decryptedBuffer.toString()) - - t.throws(function () { - crypto.privateDecrypt({ - key: rsaKeyPemEncrypted, - passphrase: 'wrong' - }, encryptedBuffer) - }) - t.end() -}) diff --git a/truebit-implementation/node_modules/public-encrypt/test/pass.1024.priv b/truebit-implementation/node_modules/public-encrypt/test/pass.1024.priv deleted file mode 100644 index b9f38845..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/pass.1024.priv +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIICzzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIji3ZZ6JbsA4CAggA -MB0GCWCGSAFlAwQBFgQQC6MKblq8zyX90/KmgotsMQSCAoDghNf+yxPC/KRh7F3O -k0lMgtDkV+wCLDv7aBvUqy8Ry2zqFPIlfLb8XtSW943XEu6KUI13IZPEr8p9h1ve -Iye6L0g6uAgbFxBE2DwBBSI7mYr7lokr4v0k+inMKf4JeRdI9XWgwOILKTGf1vH7 -PhvBnqLhOg6BIOuF426qpiyYlmRda74d0Th4o6ZyhyMSzPI1XbWSg719Ew3N/tLe -OHdYl0eFrgNjq+xO4Ev+W7eNIh/XBMQtk9wo+mxeNdldRnX822HxTsL8fSSPs+9T -W5M/2EBTJMSsswSjZyFkq8ehtxovI2u0IBX1IiPulyUZLnSNPDV1eUVClK6rk+q1 -kVsfJhUr2qvIjNlQWlbEXQj4VwGtgl0++l8vdpj59MuN2J3Nx5TNMLjA6BYAa/tr -Bu928QoT7ET+SGx5XKCwKb5fwXmDlV5zZC4kZWTaF/d/Icvj5F+fDZuYFg1JOXNZ -+q2oA1qMYaHGX6lF3pbO84ebg1iwQTDM8iIqFeSMGUJTnk/3a7sqfaWQbEQwGb+X -fXnSTwkF+wO2rriPbFvWyzecWu67zDCP0ZWUgGb86sSJCM7xRGShESwCjOrb88F1 -5SZjyIqogrkc3IWiLH9gc5U8d86qoFjJnP6BfwYks1UIyXNGKfZTCqICpMphV+IS -b0N2jprjLTkWR6nxYGSH1bkKMs7x1M0FBLWWLAZqPn9X3pe6JwIBds04O6XjF0un -oxwDjcJdoxVs7PgRiM5d1Tubqu2zmpCCmXNiqi9B0+rV9/jHg9IA5gUfvYdCcEv+ -oAr90I+2+PuBFa9lgdbDV6DtZk4bSYluqamxVeLPg/vrewYfVfDv6jftfY1D0DEy -69H0 ------END ENCRYPTED PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/pass.1024.pub b/truebit-implementation/node_modules/public-encrypt/test/pass.1024.pub deleted file mode 100644 index 617e7fb1..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/pass.1024.pub +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSK/7i5BV0x+gmX16Wrm7kRkCZ -y1QUt6wiM2g+SAZTYR0381VnSMX2cv7CpN3499lZj1rL5S7YTaZZwX3RvU5fz56/ -eDX6ciL/PZsbclN2KdkMWYgmcb9J1zUeoMQ3cjfFUCdQZ/ZvDWa+wY2Zg8os2Bow -AoufHtYHm3eOly/cWwIDAQAB ------END PUBLIC KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/rsa.1024.priv b/truebit-implementation/node_modules/public-encrypt/test/rsa.1024.priv deleted file mode 100644 index d3b5fdab..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/rsa.1024.priv +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICVAIBAAJ/OwswbFo/uyC8ltGf/yA1A+gV5IGdnAgPbUSI3GzbHCA+x+TLG/tL -vbRw3r1smppY/jkkpiVW1ErSMuN0uixp5gb78Z9rH1XpWb5WWgp3WaY/9EHMjMdO -kQ/9LVZvRvl/M/Fi6owP+q+amJI1BEjECYfbhGL3rmlVdq4qXc40QwIDAQABAn8I -VZ0BPoAOhyF33KFMHxy8r28fsVgxJUYgM3NqQgdv4fFawCYXjhJz9duU5YJGFJGJ -WUGeHlkyYFlpi4f3m7tY7JawmQUWB0MNSoKHI3cgDX4/tfBN8ni+cO0eSoR5czBY -EsAHBU47p1awNFAHwd+ZEuv9H4RmMn7p279rQTtpAkAH3Nqs2/vrRF2cZUN4fIXf -4xHsQBByUayGq8a3J0UGaSFWv68zTUKFherr9uZotNp7NJ4jBXiARw0q8docXUG1 -AkAHgmOKHoORtAmikqpmFEJZOtsXMaLCIm4EszPo5ciYoLMBcVit09AdiQlt7ZJL -DY02svU1b0agCZ97kDkmHDkXAkACa8M9JELuDs/P/vIGYDkMVatIFfW6bWF02eFG -taWwMqCcSEsWvbw0xqYt34jURpNbCjmCyQVwYfAw/+TLhP9dAkAFwRjdwjw37qpj -ddg1mNiu37b7swFxmkiMOXZRxaNNsfb56A14RpN3zob3QdGUybGodMIKTFbmU/lu -CjqAxafJAkAG2yf6RWbwFIWfMyt7WYCh0VaGBCcgy574AinVieEo3ZZyFfC63+xm -3uoaNy4iLoJv4GCjqUBz3ZfcVaO/DDWG ------END RSA PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/rsa.1024.pub b/truebit-implementation/node_modules/public-encrypt/test/rsa.1024.pub deleted file mode 100644 index 7ba06369..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/rsa.1024.pub +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIGGAn87CzBsWj+7ILyW0Z//IDUD6BXkgZ2cCA9tRIjcbNscID7H5Msb+0u9tHDe -vWyamlj+OSSmJVbUStIy43S6LGnmBvvxn2sfVelZvlZaCndZpj/0QcyMx06RD/0t -Vm9G+X8z8WLqjA/6r5qYkjUESMQJh9uEYveuaVV2ripdzjRDAgMBAAE= ------END RSA PUBLIC KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/rsa.2028.priv b/truebit-implementation/node_modules/public-encrypt/test/rsa.2028.priv deleted file mode 100644 index 10e651d8..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/rsa.2028.priv +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEjwIBAAKB/gy7mjaWgPeFdVYDZWRCA9BNiv3pPb0es27+FKY0hszLaOw47ExC -tAWpDsH48TXAfyHBYwBLguayfk4LGIupxb+CGMbRo3xEp0CbfY1Jby26T9vGjRC1 -foHDDUJG84uaRbyHqaf4i6zt4gVR+xlAEIjkaFAAK8cOoXAT1CVqGLLljUCchL8P -jaHj/yriZ/S7rdwlI3LnABxwwmLrmR/v71WtpmO/aNG8N+1po+QwaghTkyQ59E/Z -vAuOkFWHok2q/R6PYAa2jdZ9zim0FqOP+nkQaEDRbBFBmBqTv5fFGfk2WsAfKf/R -G0/VFd+ZeM5251TeTvXH695nlSGauVl9AgMBAAECgf4LrWHY/l54ouThZWvvbrug -pfz6sJX2g9l7yXmWlEWsPECVo/7SUbpYFpt6OZy99zSg+IKbGqWKfdhoKrTwIVtC -L0YZ0NlmdnANSIz0roxQG7ZxkL5+vHSw/PmD9x4Uwf+Cz8hATCmNBv1qc60dkyuW -4CLqe72qaTiVWRoO1iagQghNcLoo6vSy65ExLaCDTPha7yu2vw4hFZpWiEjW4dxf -rFdLiix52BC86YlAlxME/rLg8IJVvilbyo9aWdXmxOaUTLRv6PkFD1/gVdw8V9Qr -SLN9FlK2kkjiX0dzoibvZw3tMnt3yydAx0X87+sMRVahC1bp3kVPz4Hy0EWX4QJ/ -PM31vGiuITk2NCd51DXt1Ltn2OP5FaJSmCaEjh0XkU4qouYyjXWt8Bu6BTCl2vua -Fg0Uji9C+IkPLmaUMbMIOwaTk8cWqLthSxsLe70J5OkGrgfKUM/w+BHH1Pt/Pjzj -C++l0kiFaOVDVaAV9GpLPLCBoK/PC9Rb/rxMMoCCNwJ/NZuedIny2w3LMii77h/T -zSvergNGhjY6Rnva8lLXJ6dlrkcPAyps3gWwxqj4NR0T+GM0bDUPVLb7M07XV7SX -v7VJGm52JbRGwM1ss+r8XTTNemeGk+WRxG7TgtsMqYGXLfB8Qxk/f5/Mcc00Tl8u -wXFNsfxJxmt6AbsTr3g36wJ/IhOnibz9Ad+nchlBnN3QeW3CKHqzaR18voqvtVm2 -kJfHK15prH/sSGmxmiEGgrCJTZxtDbaNCO7/VBjnKudUUIhCAwsLtuq0/zub9vAd -8G1scfIpv5qaSNzmKoX8bOwArvrS6wP7yKrcTsuWIlHD8rJVI7IEDnQoTp5G8fK1 -hwJ/MIh8M5v0r5dUYEv6oIJWGcle6AH1JmsP5WIafgq72Z2288pHcCFHwNY8Dg9J -76QswVLnUhPTlmm3EOOPGEtam2iAD5r0Afytlb4lbNoQsj2szeXONDXB+6oueajh -VNELUr8HcSP5lgzRZjJW6aFIzj9LDRmQnUAOjGSXVOQtEwJ/MCQZ7N/v4dIKeDRA -8d8UExZ3+gGHumziztGRJ0tQryZH2PakP5I7V+1l7qEUnJ2c3mF+e1v41Ep9LCvh -bzrPKw9dxh18g4b+7bMpsWPnsraKh6ipxc7aaOaZV0Dxgez4zcZu0P1olO0cN3KM -nxJ0Pds3R8bAhNCDdS2JZaRp5Q== ------END RSA PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/rsa.2028.pub b/truebit-implementation/node_modules/public-encrypt/test/rsa.2028.pub deleted file mode 100644 index b36dca4d..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/rsa.2028.pub +++ /dev/null @@ -1,8 +0,0 @@ ------BEGIN RSA PUBLIC KEY----- -MIIBBgKB/gy7mjaWgPeFdVYDZWRCA9BNiv3pPb0es27+FKY0hszLaOw47ExCtAWp -DsH48TXAfyHBYwBLguayfk4LGIupxb+CGMbRo3xEp0CbfY1Jby26T9vGjRC1foHD -DUJG84uaRbyHqaf4i6zt4gVR+xlAEIjkaFAAK8cOoXAT1CVqGLLljUCchL8PjaHj -/yriZ/S7rdwlI3LnABxwwmLrmR/v71WtpmO/aNG8N+1po+QwaghTkyQ59E/ZvAuO -kFWHok2q/R6PYAa2jdZ9zim0FqOP+nkQaEDRbBFBmBqTv5fFGfk2WsAfKf/RG0/V -Fd+ZeM5251TeTvXH695nlSGauVl9AgMBAAE= ------END RSA PUBLIC KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/rsa.pass.priv b/truebit-implementation/node_modules/public-encrypt/test/rsa.pass.priv deleted file mode 100644 index 99e82135..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/rsa.pass.priv +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CBC,7A6A055AD675947A657041422F06D439 - -HQdjzAKUuqqKhZHmpzzY/monfqFhiHnZ5c24jtR9fM4aQJXf/e1fz6MEhyIz6XON -sb4CnXZstnxUuVWDkHEu6KWQ/dKALgiDUuT+UdMawVoVPGdgyWZp35pQPWi3fT2V -XZn58YkG8bO3Y403eZPyhadOefD1VtuFuK6/f90jjzx6ZDnwveXpYgFV7Jy1/pFd -cLLMf07C+hbk416nX6UVipWe4GH+ADFom5ZCfAaUotM7n8i149dULNF4YYi2wP31 -1YaDH5vf1CqiaieDY7xLzpEixwJz6ZEg3gLXaUvz2MpF8owiGI3eP0g7voWp3xt4 -TQx/qDURlaXiaRriWdWtpKyW1MFuJ5+KdNtR1/kXr2BLPB/ZLwyqtynUy8ZYpb4+ -WIRYpUGeb//ZHGhlCH7CRMdABsal4wTwnzi9fW4Ax96ecJ2SlwCuKxwS7iEq2y1/ -FAfGwsE+XufHhme5p6XjKfiHx+zJMIB2NMkrm+wm4PbMTrGVnw5/41/r6XxOB8fe -iKi12Jth4dusc1vYGYfzKop9uEM6CZ6+Chqzb+Zyh/xUiZVlCX/BYnxr7yXUm9aR -PHQgxkn2Act8FgQB3Kgs3jCiCRIJrlsnybeWzQ3YO9TjC4MxygmmwODDBpsOKnEi -kXXS54+cZFjcsva4uJVwhAywRPVUkLzmTkH0tGiwCHjeQNECm+TLahkkEIXrVTb9 -c9creNXMgE6jVVz+R43HXsGvTcgMcBLyFRQJe2nVaj/dQ5JbF4uqNnQzRjAbD34K -uTpFaJ/kmlgcmeScRLnwaoYwFlmhSC+bK0dfY1Jr6AQRA6IDP7nIjqWNDCHNBB8r -Qj1v2KWoVQe3xNHaXhkbJPbA2DKlUIqffkBVtMKtt9KuG3Rccf3bVYAW6oid73/D -z7DMAF5G/OpVR8VbGh1WxXuR7zEVDUwpwsp9ek5dqN8BnBz1ppdZNIKqzszneckU -s2l/6mZBmgV1Nfy/cQU6U5s3S1Xc75UDQVLms3CIOpFTRIpecNTdfa31fYy/svy0 -M2lWTbCva0dOyuvMUhTgBL4I7Qa2dUMPXHMZatV5ooHYq/BZJA1r84C5cM5r+umE -2LLv/BlUr7RaQHhaKGn4Qhpzo5yRDE9mEqDpLVkbg8SxMsdf/pEF5/VyUwA9t8RT -fKVsInRd386tDqJSDbSFqKTvLztr/5YCyzZzvC2YB1voko/caOGd2d/G51Ij+bXU -xEN8U4fHDBsHwPUGb31uZUhTXpL37KiOqZmXFoH2usmuvx882XvyGcV0F4tstMaR -KLKzl2PwqzAYGFexLkYKMz0TYIeN6h3b86ETazPPU49nkaEU23Dx21J2Rb3UlH+I -lDQF3wuH1QlYiTnlcVa/Zu4QQg0/iP8ALkZ06mvn9e9mOtnA8gsh4B2oLqc19VLU -bcpv40dV1H3W9Lcx9B8JYUp0c/Oyno1D7Yj3tjGcwMKECmUpHi4kksehVo0/P933 -xmFmC6eyWYVdO9upvY/vKSB7b1dMt85iWr3gnMsSfRYc6jsbSxdjOPST46UsIzjx -wa1DS6+Bv5tiaC4uC6X+0tCAZo+UOQMYUbTGRR/7g/c= ------END RSA PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/rsa.pass.pub b/truebit-implementation/node_modules/public-encrypt/test/rsa.pass.pub deleted file mode 100644 index 655cc3a4..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/rsa.pass.pub +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBHjANBgkqhkiG9w0BAQEFAAOCAQsAMIIBBgKB/gy7mjaWgPeFdVYDZWRCA9BN -iv3pPb0es27+FKY0hszLaOw47ExCtAWpDsH48TXAfyHBYwBLguayfk4LGIupxb+C -GMbRo3xEp0CbfY1Jby26T9vGjRC1foHDDUJG84uaRbyHqaf4i6zt4gVR+xlAEIjk -aFAAK8cOoXAT1CVqGLLljUCchL8PjaHj/yriZ/S7rdwlI3LnABxwwmLrmR/v71Wt -pmO/aNG8N+1po+QwaghTkyQ59E/ZvAuOkFWHok2q/R6PYAa2jdZ9zim0FqOP+nkQ -aEDRbBFBmBqTv5fFGfk2WsAfKf/RG0/VFd+ZeM5251TeTvXH695nlSGauVl9AgMB -AAE= ------END PUBLIC KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/test_cert.pem b/truebit-implementation/node_modules/public-encrypt/test/test_cert.pem deleted file mode 100644 index a3c1e4a0..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/test_cert.pem +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgIJAKL0UG+mRkSPMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNV -BAYTAlVLMRQwEgYDVQQIEwtBY2tuYWNrIEx0ZDETMBEGA1UEBxMKUmh5cyBKb25l -czEQMA4GA1UEChMHbm9kZS5qczEdMBsGA1UECxMUVGVzdCBUTFMgQ2VydGlmaWNh -dGUxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0wOTExMTEwOTUyMjJaFw0yOTExMDYw -OTUyMjJaMH0xCzAJBgNVBAYTAlVLMRQwEgYDVQQIEwtBY2tuYWNrIEx0ZDETMBEG -A1UEBxMKUmh5cyBKb25lczEQMA4GA1UEChMHbm9kZS5qczEdMBsGA1UECxMUVGVz -dCBUTFMgQ2VydGlmaWNhdGUxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG -9w0BAQEFAAOBjQAwgYkCgYEA8d8Hc6atq78Jt1HLp9agA/wpQfsFvkYUdZ1YsdvO -kL2janjwHQgMMCy/Njal3FUEW0OLPebKZUJ8L44JBXSlVxU4zyiiSOWld8EkTetR -AVT3WKQq3ud+cnxv7g8rGRQp1UHZwmdbZ1wEfAYq8QjYx6m1ciMgRo7DaDQhD29k -d+UCAwEAAaOB4zCB4DAdBgNVHQ4EFgQUL9miTJn+HKNuTmx/oMWlZP9cd4QwgbAG -A1UdIwSBqDCBpYAUL9miTJn+HKNuTmx/oMWlZP9cd4ShgYGkfzB9MQswCQYDVQQG -EwJVSzEUMBIGA1UECBMLQWNrbmFjayBMdGQxEzARBgNVBAcTClJoeXMgSm9uZXMx -EDAOBgNVBAoTB25vZGUuanMxHTAbBgNVBAsTFFRlc3QgVExTIENlcnRpZmljYXRl -MRIwEAYDVQQDEwlsb2NhbGhvc3SCCQCi9FBvpkZEjzAMBgNVHRMEBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4GBADRXXA2xSUK5W1i3oLYWW6NEDVWkTQ9RveplyeS9MOkP -e7yPcpz0+O0ZDDrxR9chAiZ7fmdBBX1Tr+pIuCrG/Ud49SBqeS5aMJGVwiSd7o1n -dhU2Sz3Q60DwJEL1VenQHiVYlWWtqXBThe9ggqRPnCfsCRTP8qifKkjk45zWPcpN ------END CERTIFICATE----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/test_key.pem b/truebit-implementation/node_modules/public-encrypt/test/test_key.pem deleted file mode 100644 index 48fd93c9..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/test_key.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQDx3wdzpq2rvwm3Ucun1qAD/ClB+wW+RhR1nVix286QvaNqePAd -CAwwLL82NqXcVQRbQ4s95splQnwvjgkFdKVXFTjPKKJI5aV3wSRN61EBVPdYpCre -535yfG/uDysZFCnVQdnCZ1tnXAR8BirxCNjHqbVyIyBGjsNoNCEPb2R35QIDAQAB -AoGBAJNem9C4ftrFNGtQ2DB0Udz7uDuucepkErUy4MbFsc947GfENjDKJXr42Kx0 -kYx09ImS1vUpeKpH3xiuhwqe7tm4FsCBg4TYqQle14oxxm7TNeBwwGC3OB7hiokb -aAjbPZ1hAuNs6ms3Ybvvj6Lmxzx42m8O5DXCG2/f+KMvaNUhAkEA/ekrOsWkNoW9 -2n3m+msdVuxeek4B87EoTOtzCXb1dybIZUVv4J48VAiM43hhZHWZck2boD/hhwjC -M5NWd4oY6QJBAPPcgBVNdNZSZ8hR4ogI4nzwWrQhl9MRbqqtfOn2TK/tjMv10ALg -lPmn3SaPSNRPKD2hoLbFuHFERlcS79pbCZ0CQQChX3PuIna/gDitiJ8oQLOg7xEM -wk9TRiDK4kl2lnhjhe6PDpaQN4E4F0cTuwqLAoLHtrNWIcOAQvzKMrYdu1MhAkBm -Et3qDMnjDAs05lGT72QeN90/mPAcASf5eTTYGahv21cb6IBxM+AnwAPpqAAsHhYR -9h13Y7uYbaOjvuF23LRhAkBoI9eaSMn+l81WXOVUHnzh3ZwB4GuTyxMXXNOhuiFd -0z4LKAMh99Z4xQmqSoEkXsfM4KPpfhYjF/bwIcP5gOei ------END RSA PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/test_rsa_privkey.pem b/truebit-implementation/node_modules/public-encrypt/test/test_rsa_privkey.pem deleted file mode 100644 index 425518a0..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/test_rsa_privkey.pem +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF -NUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F -UR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB -AoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA -QWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK -kqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg -f1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u -412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc -mSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7 -kpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA -gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW -G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI -7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA== ------END RSA PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/test_rsa_privkey_encrypted.pem b/truebit-implementation/node_modules/public-encrypt/test/test_rsa_privkey_encrypted.pem deleted file mode 100644 index 08e76171..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/test_rsa_privkey_encrypted.pem +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-128-CBC,9D916E00476DFF9E70FA4BA9E3A6CB0E - -oj0VC35ShSEqlfJ0rLGgkqJCyIK+mXSsa/X/xAur+lI/RVOVTWd7oQQGTdI/0rLX -PdQR02Na3X9Rptezh6J04PfMGeFysxdT6RpC+rkHRPVbN0F4TqxSNNXzkwK70+EF -dSuDMyVKv9YN4wWDf0g6VKe4ShAH/sqICQBrVyzWyYLvH/hwZmZZ1QEab6ylIKtb -EJunwu9BxVVA04bbuATKkKjJOqDn0fG8hb4bYbyD02dJwgLePzzn36F31kcBCEHI -tESlD3RsS+EtfpfgPkplXNOhqYzkD9auDb7Zy+ZwL20fjnJb75OSGu8gOg3KTljt -mApZOg0nJ5Jk9ATAdyzyVSFOM1Hhcw12ws06Dq9KRnXgO6bbuadLTFRDdvSYDFvD -ijUb+97UolQfYIXQMqXli3EIvHr7CTWe/3mpoDgK1mtr0+923Bm97XgE7KSr0L46 -n5QpNjCZf1vbXldNmW+TRifiJMgtVdS7x0N4vqDPNEe+FelVv3U4Pz3HIOtFuWLr -ZCxlgVxJY4IsyYlV0ItQjIv8fJiAyemZdO2lA9K6h0eEF+9Apr3i79JGWUi74p5D -Ooak4le0Va9O34f6FxCGn/a54A6bhKu24Ub/0gr/e4WRa7693euEdgIAZXhtMu2Z -taU5SKjjXPzjmRCM2kINHTCENlaU4oFzTmj3TYY/jdKyNP1bHa07NhlomladkIHK -GD6HaYkcbuwvh8hOPsopSwuS+NqjnGPq9Vv4ecBC+9veDEmpIE1iR6FK9Hjrre88 -kLoMQNmA+vuc8jG4/FIHM3SauQiR1ZJ6+zkz97kcmOf+X7LRaS4j6lfFR6qHiJ6y ------END RSA PRIVATE KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/test/test_rsa_pubkey.pem b/truebit-implementation/node_modules/public-encrypt/test/test_rsa_pubkey.pem deleted file mode 100644 index b3bbf6cb..00000000 --- a/truebit-implementation/node_modules/public-encrypt/test/test_rsa_pubkey.pem +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3 -6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6 -Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw -oYi+1hqp1fIekaxsyQIDAQAB ------END PUBLIC KEY----- diff --git a/truebit-implementation/node_modules/public-encrypt/withPublic.js b/truebit-implementation/node_modules/public-encrypt/withPublic.js deleted file mode 100644 index 417a1bf7..00000000 --- a/truebit-implementation/node_modules/public-encrypt/withPublic.js +++ /dev/null @@ -1,12 +0,0 @@ -var BN = require('bn.js') -var Buffer = require('safe-buffer').Buffer - -function withPublic (paddedMsg, key) { - return Buffer.from(paddedMsg - .toRed(BN.mont(key.modulus)) - .redPow(new BN(key.publicExponent)) - .fromRed() - .toArray()) -} - -module.exports = withPublic diff --git a/truebit-implementation/node_modules/public-encrypt/xor.js b/truebit-implementation/node_modules/public-encrypt/xor.js deleted file mode 100644 index 10d2764e..00000000 --- a/truebit-implementation/node_modules/public-encrypt/xor.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = function xor (a, b) { - var len = a.length - var i = -1 - while (++i < len) { - a[i] ^= b[i] - } - return a -} diff --git a/truebit-implementation/node_modules/punycode/LICENSE-MIT.txt b/truebit-implementation/node_modules/punycode/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7e..00000000 --- a/truebit-implementation/node_modules/punycode/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/punycode/README.md b/truebit-implementation/node_modules/punycode/README.md deleted file mode 100644 index ee2f9d63..00000000 --- a/truebit-implementation/node_modules/punycode/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/codecov/c/github/bestiejs/punycode.js.svg)](https://codecov.io/gh/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) - -Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). - -This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: - -* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) -* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) -* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) -* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) -* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) - -This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). - -The current version supports recent versions of Node.js only. It provides a CommonJS module and an ES6 module. For the old version that offers the same functionality with broader support, including Rhino, Ringo, Narwhal, and web browsers, see [v1.4.1](https://github.com/bestiejs/punycode.js/releases/tag/v1.4.1). - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install punycode --save -``` - -In [Node.js](https://nodejs.org/): - -```js -const punycode = require('punycode'); -``` - -## API - -### `punycode.decode(string)` - -Converts a Punycode string of ASCII symbols to a string of Unicode symbols. - -```js -// decode domain name parts -punycode.decode('maana-pta'); // 'mañana' -punycode.decode('--dqo34k'); // '☃-⌘' -``` - -### `punycode.encode(string)` - -Converts a string of Unicode symbols to a Punycode string of ASCII symbols. - -```js -// encode domain name parts -punycode.encode('mañana'); // 'maana-pta' -punycode.encode('☃-⌘'); // '--dqo34k' -``` - -### `punycode.toUnicode(input)` - -Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. - -```js -// decode domain names -punycode.toUnicode('xn--maana-pta.com'); -// → 'mañana.com' -punycode.toUnicode('xn----dqo34k.com'); -// → '☃-⌘.com' - -// decode email addresses -punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); -// → 'джумла@джpумлатест.bрфa' -``` - -### `punycode.toASCII(input)` - -Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. - -```js -// encode domain names -punycode.toASCII('mañana.com'); -// → 'xn--maana-pta.com' -punycode.toASCII('☃-⌘.com'); -// → 'xn----dqo34k.com' - -// encode email addresses -punycode.toASCII('джумла@джpумлатест.bрфa'); -// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' -``` - -### `punycode.ucs2` - -#### `punycode.ucs2.decode(string)` - -Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. - -```js -punycode.ucs2.decode('abc'); -// → [0x61, 0x62, 0x63] -// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: -punycode.ucs2.decode('\uD834\uDF06'); -// → [0x1D306] -``` - -#### `punycode.ucs2.encode(codePoints)` - -Creates a string based on an array of numeric code point values. - -```js -punycode.ucs2.encode([0x61, 0x62, 0x63]); -// → 'abc' -punycode.ucs2.encode([0x1D306]); -// → '\uD834\uDF06' -``` - -### `punycode.version` - -A string representing the current Punycode.js version number. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/truebit-implementation/node_modules/punycode/package.json b/truebit-implementation/node_modules/punycode/package.json deleted file mode 100644 index c8483ef6..00000000 --- a/truebit-implementation/node_modules/punycode/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_from": "punycode@^2.1.0", - "_id": "punycode@2.1.1", - "_inBundle": false, - "_integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "_location": "/punycode", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "punycode@^2.1.0", - "name": "punycode", - "escapedName": "punycode", - "rawSpec": "^2.1.0", - "saveSpec": null, - "fetchSpec": "^2.1.0" - }, - "_requiredBy": [ - "/uri-js" - ], - "_resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "_shasum": "b58b010ac40c22c5657616c8d2c2c02c7bf479ec", - "_spec": "punycode@^2.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/uri-js", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "bugs": { - "url": "https://github.com/bestiejs/punycode.js/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "deprecated": false, - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "devDependencies": { - "codecov": "^1.0.1", - "istanbul": "^0.4.1", - "mocha": "^2.5.3" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "LICENSE-MIT.txt", - "punycode.js", - "punycode.es6.js" - ], - "homepage": "https://mths.be/punycode", - "jsnext:main": "punycode.es6.js", - "jspm": { - "map": { - "./punycode.js": { - "node": "@node/punycode" - } - } - }, - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "license": "MIT", - "main": "punycode.js", - "module": "punycode.es6.js", - "name": "punycode", - "repository": { - "type": "git", - "url": "git+https://github.com/bestiejs/punycode.js.git" - }, - "scripts": { - "prepublish": "node scripts/prepublish.js", - "test": "mocha tests" - }, - "version": "2.1.1" -} diff --git a/truebit-implementation/node_modules/punycode/punycode.es6.js b/truebit-implementation/node_modules/punycode/punycode.es6.js deleted file mode 100644 index 4610bc9e..00000000 --- a/truebit-implementation/node_modules/punycode/punycode.es6.js +++ /dev/null @@ -1,441 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, fn) { - const result = []; - let length = array.length; - while (length--) { - result[length] = fn(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ -function mapDomain(string, fn) { - const parts = string.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - const labels = string.split('.'); - const encoded = map(labels, fn).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = array => String.fromCodePoint(...array); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint - 0x30 < 0x0A) { - return codePoint - 0x16; - } - if (codePoint - 0x41 < 0x1A) { - return codePoint - 0x41; - } - if (codePoint - 0x61 < 0x1A) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - let oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - let inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - let basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue == n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.1.0', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode }; -export default punycode; diff --git a/truebit-implementation/node_modules/punycode/punycode.js b/truebit-implementation/node_modules/punycode/punycode.js deleted file mode 100644 index ea61fd0d..00000000 --- a/truebit-implementation/node_modules/punycode/punycode.js +++ /dev/null @@ -1,440 +0,0 @@ -'use strict'; - -/** Highest positive signed 32-bit float value */ -const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -const base = 36; -const tMin = 1; -const tMax = 26; -const skew = 38; -const damp = 700; -const initialBias = 72; -const initialN = 128; // 0x80 -const delimiter = '-'; // '\x2D' - -/** Regular expressions */ -const regexPunycode = /^xn--/; -const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars -const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -const errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -const baseMinusTMin = base - tMin; -const floor = Math.floor; -const stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, fn) { - const result = []; - let length = array.length; - while (length--) { - result[length] = fn(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ -function mapDomain(string, fn) { - const parts = string.split('@'); - let result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - const labels = string.split('.'); - const encoded = map(labels, fn).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - const output = []; - let counter = 0; - const length = string.length; - while (counter < length) { - const value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - const extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -const ucs2encode = array => String.fromCodePoint(...array); - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -const basicToDigit = function(codePoint) { - if (codePoint - 0x30 < 0x0A) { - return codePoint - 0x16; - } - if (codePoint - 0x41 < 0x1A) { - return codePoint - 0x41; - } - if (codePoint - 0x61 < 0x1A) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -const digitToBasic = function(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -const adapt = function(delta, numPoints, firstTime) { - let k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -const decode = function(input) { - // Don't use UCS-2. - const output = []; - const inputLength = input.length; - let i = 0; - let n = initialN; - let bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - let basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (let j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - let oldi = i; - for (let w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - const digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - const baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - const out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - - } - - return String.fromCodePoint(...output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -const encode = function(input) { - const output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - let inputLength = input.length; - - // Initialize the state. - let n = initialN; - let delta = 0; - let bias = initialBias; - - // Handle the basic code points. - for (const currentValue of input) { - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - let basicLength = output.length; - let handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - let m = maxInt; - for (const currentValue of input) { - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - const handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (const currentValue of input) { - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - if (currentValue == n) { - // Represent delta as a generalized variable-length integer. - let q = delta; - for (let k = base; /* no condition */; k += base) { - const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - const qMinusT = q - t; - const baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -const toUnicode = function(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -const toASCII = function(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -const punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.1.0', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -module.exports = punycode; diff --git a/truebit-implementation/node_modules/qs/.editorconfig b/truebit-implementation/node_modules/qs/.editorconfig deleted file mode 100644 index b2654e7a..00000000 --- a/truebit-implementation/node_modules/qs/.editorconfig +++ /dev/null @@ -1,30 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -max_line_length = 140 - -[test/*] -max_line_length = off - -[*.md] -max_line_length = off - -[*.json] -max_line_length = off - -[Makefile] -max_line_length = off - -[CHANGELOG.md] -indent_style = space -indent_size = 2 - -[LICENSE] -indent_size = 2 -max_line_length = off diff --git a/truebit-implementation/node_modules/qs/.eslintignore b/truebit-implementation/node_modules/qs/.eslintignore deleted file mode 100644 index 1521c8b7..00000000 --- a/truebit-implementation/node_modules/qs/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist diff --git a/truebit-implementation/node_modules/qs/.eslintrc b/truebit-implementation/node_modules/qs/.eslintrc deleted file mode 100644 index b7a87b93..00000000 --- a/truebit-implementation/node_modules/qs/.eslintrc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "root": true, - - "extends": "@ljharb", - - "rules": { - "complexity": 0, - "consistent-return": 1, - "func-name-matching": 0, - "id-length": [2, { "min": 1, "max": 25, "properties": "never" }], - "indent": [2, 4], - "max-params": [2, 12], - "max-statements": [2, 45], - "no-continue": 1, - "no-magic-numbers": 0, - "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], - "operator-linebreak": [2, "before"], - } -} diff --git a/truebit-implementation/node_modules/qs/CHANGELOG.md b/truebit-implementation/node_modules/qs/CHANGELOG.md deleted file mode 100644 index fe523209..00000000 --- a/truebit-implementation/node_modules/qs/CHANGELOG.md +++ /dev/null @@ -1,226 +0,0 @@ -## **6.5.2** -- [Fix] use `safer-buffer` instead of `Buffer` constructor -- [Refactor] utils: `module.exports` one thing, instead of mutating `exports` (#230) -- [Dev Deps] update `browserify`, `eslint`, `iconv-lite`, `safer-buffer`, `tape`, `browserify` - -## **6.5.1** -- [Fix] Fix parsing & compacting very deep objects (#224) -- [Refactor] name utils functions -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` -- [Tests] up to `node` `v8.4`; use `nvm install-latest-npm` so newer npm doesn’t break older node -- [Tests] Use precise dist for Node.js 0.6 runtime (#225) -- [Tests] make 0.6 required, now that it’s passing -- [Tests] on `node` `v8.2`; fix npm on node 0.6 - -## **6.5.0** -- [New] add `utils.assign` -- [New] pass default encoder/decoder to custom encoder/decoder functions (#206) -- [New] `parse`/`stringify`: add `ignoreQueryPrefix`/`addQueryPrefix` options, respectively (#213) -- [Fix] Handle stringifying empty objects with addQueryPrefix (#217) -- [Fix] do not mutate `options` argument (#207) -- [Refactor] `parse`: cache index to reuse in else statement (#182) -- [Docs] add various badges to readme (#208) -- [Dev Deps] update `eslint`, `browserify`, `iconv-lite`, `tape` -- [Tests] up to `node` `v8.1`, `v7.10`, `v6.11`; npm v4.6 breaks on node < v1; npm v5+ breaks on node < v4 -- [Tests] add `editorconfig-tools` - -## **6.4.0** -- [New] `qs.stringify`: add `encodeValuesOnly` option -- [Fix] follow `allowPrototypes` option during merge (#201, #201) -- [Fix] support keys starting with brackets (#202, #200) -- [Fix] chmod a-x -- [Dev Deps] update `eslint` -- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds -- [eslint] reduce warnings - -## **6.3.2** -- [Fix] follow `allowPrototypes` option during merge (#201, #200) -- [Dev Deps] update `eslint` -- [Fix] chmod a-x -- [Fix] support keys starting with brackets (#202, #200) -- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds - -## **6.3.1** -- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties (thanks, @snyk!) -- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `browserify`, `iconv-lite`, `qs-iconv`, `tape` -- [Tests] on all node minors; improve test matrix -- [Docs] document stringify option `allowDots` (#195) -- [Docs] add empty object and array values example (#195) -- [Docs] Fix minor inconsistency/typo (#192) -- [Docs] document stringify option `sort` (#191) -- [Refactor] `stringify`: throw faster with an invalid encoder -- [Refactor] remove unnecessary escapes (#184) -- Remove contributing.md, since `qs` is no longer part of `hapi` (#183) - -## **6.3.0** -- [New] Add support for RFC 1738 (#174, #173) -- [New] `stringify`: Add `serializeDate` option to customize Date serialization (#159) -- [Fix] ensure `utils.merge` handles merging two arrays -- [Refactor] only constructors should be capitalized -- [Refactor] capitalized var names are for constructors only -- [Refactor] avoid using a sparse array -- [Robustness] `formats`: cache `String#replace` -- [Dev Deps] update `browserify`, `eslint`, `@ljharb/eslint-config`; add `safe-publish-latest` -- [Tests] up to `node` `v6.8`, `v4.6`; improve test matrix -- [Tests] flesh out arrayLimit/arrayFormat tests (#107) -- [Tests] skip Object.create tests when null objects are not available -- [Tests] Turn on eslint for test files (#175) - -## **6.2.3** -- [Fix] follow `allowPrototypes` option during merge (#201, #200) -- [Fix] chmod a-x -- [Fix] support keys starting with brackets (#202, #200) -- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds - -## **6.2.2** -- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties - -## **6.2.1** -- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values -- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call` -- [Tests] remove `parallelshell` since it does not reliably report failures -- [Tests] up to `node` `v6.3`, `v5.12` -- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv` - -## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed) -- [New] pass Buffers to the encoder/decoder directly (#161) -- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160) -- [Fix] fix compacting of nested sparse arrays (#150) - -## **6.1.2 -- [Fix] follow `allowPrototypes` option during merge (#201, #200) -- [Fix] chmod a-x -- [Fix] support keys starting with brackets (#202, #200) -- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds - -## **6.1.1** -- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties - -## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed) -- [New] allowDots option for `stringify` (#151) -- [Fix] "sort" option should work at a depth of 3 or more (#151) -- [Fix] Restore `dist` directory; will be removed in v7 (#148) - -## **6.0.4** -- [Fix] follow `allowPrototypes` option during merge (#201, #200) -- [Fix] chmod a-x -- [Fix] support keys starting with brackets (#202, #200) -- [Tests] up to `node` `v7.7`, `v6.10`,` v4.8`; disable osx builds since they block linux builds - -## **6.0.3** -- [Fix] ensure that `allowPrototypes: false` does not ever shadow Object.prototype properties -- [Fix] Restore `dist` directory; will be removed in v7 (#148) - -## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed) -- Revert ES6 requirement and restore support for node down to v0.8. - -## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed) -- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json - -## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed) -- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4 - -## **5.2.1** -- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values - -## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed) -- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string - -## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed) -- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional -- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify - -## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed) -- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false -- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm - -## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed) -- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional - -## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed) -- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation" - -## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed) -- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties -- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost -- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing -- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object -- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option -- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects. -- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47 -- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986 -- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign -- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute - -## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed) -- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function - -## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed) -- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option - -## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed) -- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57 -- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader - -## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed) -- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object - -## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed) -- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError". - -## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed) -- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46 - -## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed) -- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer? -- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45 -- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39 - -## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed) -- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number - -## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed) -- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array -- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x - -## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed) -- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value -- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty -- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver? - -## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed) -- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31 -- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects - -## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed) -- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present -- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays -- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge -- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters? - -## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed) -- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter - -## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed) -- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit? -- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit -- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20 - -## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed) -- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values - -## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed) -- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters -- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block - -## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed) -- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument -- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed - -## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed) -- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted -- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null -- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README - -## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed) -- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index diff --git a/truebit-implementation/node_modules/qs/LICENSE b/truebit-implementation/node_modules/qs/LICENSE deleted file mode 100644 index d4569487..00000000 --- a/truebit-implementation/node_modules/qs/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2014 Nathan LaFreniere and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * 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. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS 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 HOLDERS AND 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. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors diff --git a/truebit-implementation/node_modules/qs/README.md b/truebit-implementation/node_modules/qs/README.md deleted file mode 100644 index d8119666..00000000 --- a/truebit-implementation/node_modules/qs/README.md +++ /dev/null @@ -1,475 +0,0 @@ -# qs [![Version Badge][2]][1] - -[![Build Status][3]][4] -[![dependency status][5]][6] -[![dev dependency status][7]][8] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -[![npm badge][11]][1] - -A querystring parsing and stringifying library with some added security. - -Lead Maintainer: [Jordan Harband](https://github.com/ljharb) - -The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring). - -## Usage - -```javascript -var qs = require('qs'); -var assert = require('assert'); - -var obj = qs.parse('a=c'); -assert.deepEqual(obj, { a: 'c' }); - -var str = qs.stringify(obj); -assert.equal(str, 'a=c'); -``` - -### Parsing Objects - -[](#preventEval) -```javascript -qs.parse(string, [options]); -``` - -**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`. -For example, the string `'foo[bar]=baz'` converts to: - -```javascript -assert.deepEqual(qs.parse('foo[bar]=baz'), { - foo: { - bar: 'baz' - } -}); -``` - -When using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like: - -```javascript -var nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true }); -assert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } }); -``` - -By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option. - -```javascript -var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }); -assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } }); -``` - -URI encoded strings work too: - -```javascript -assert.deepEqual(qs.parse('a%5Bb%5D=c'), { - a: { b: 'c' } -}); -``` - -You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`: - -```javascript -assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), { - foo: { - bar: { - baz: 'foobarbaz' - } - } -}); -``` - -By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like -`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be: - -```javascript -var expected = { - a: { - b: { - c: { - d: { - e: { - f: { - '[g][h][i]': 'j' - } - } - } - } - } - } -}; -var string = 'a[b][c][d][e][f][g][h][i]=j'; -assert.deepEqual(qs.parse(string), expected); -``` - -This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`: - -```javascript -var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }); -assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }); -``` - -The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number. - -For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option: - -```javascript -var limited = qs.parse('a=b&c=d', { parameterLimit: 1 }); -assert.deepEqual(limited, { a: 'b' }); -``` - -To bypass the leading question mark, use `ignoreQueryPrefix`: - -```javascript -var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true }); -assert.deepEqual(prefixed, { a: 'b', c: 'd' }); -``` - -An optional delimiter can also be passed: - -```javascript -var delimited = qs.parse('a=b;c=d', { delimiter: ';' }); -assert.deepEqual(delimited, { a: 'b', c: 'd' }); -``` - -Delimiters can be a regular expression too: - -```javascript -var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }); -assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' }); -``` - -Option `allowDots` can be used to enable dot notation: - -```javascript -var withDots = qs.parse('a.b=c', { allowDots: true }); -assert.deepEqual(withDots, { a: { b: 'c' } }); -``` - -### Parsing Arrays - -**qs** can also parse arrays using a similar `[]` notation: - -```javascript -var withArray = qs.parse('a[]=b&a[]=c'); -assert.deepEqual(withArray, { a: ['b', 'c'] }); -``` - -You may specify an index as well: - -```javascript -var withIndexes = qs.parse('a[1]=c&a[0]=b'); -assert.deepEqual(withIndexes, { a: ['b', 'c'] }); -``` - -Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number -to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving -their order: - -```javascript -var noSparse = qs.parse('a[1]=b&a[15]=c'); -assert.deepEqual(noSparse, { a: ['b', 'c'] }); -``` - -Note that an empty string is also a value, and will be preserved: - -```javascript -var withEmptyString = qs.parse('a[]=&a[]=b'); -assert.deepEqual(withEmptyString, { a: ['', 'b'] }); - -var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c'); -assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] }); -``` - -**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will -instead be converted to an object with the index as the key: - -```javascript -var withMaxIndex = qs.parse('a[100]=b'); -assert.deepEqual(withMaxIndex, { a: { '100': 'b' } }); -``` - -This limit can be overridden by passing an `arrayLimit` option: - -```javascript -var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 }); -assert.deepEqual(withArrayLimit, { a: { '1': 'b' } }); -``` - -To disable array parsing entirely, set `parseArrays` to `false`. - -```javascript -var noParsingArrays = qs.parse('a[]=b', { parseArrays: false }); -assert.deepEqual(noParsingArrays, { a: { '0': 'b' } }); -``` - -If you mix notations, **qs** will merge the two items into an object: - -```javascript -var mixedNotation = qs.parse('a[0]=b&a[b]=c'); -assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } }); -``` - -You can also create arrays of objects: - -```javascript -var arraysOfObjects = qs.parse('a[][b]=c'); -assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] }); -``` - -### Stringifying - -[](#preventEval) -```javascript -qs.stringify(object, [options]); -``` - -When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect: - -```javascript -assert.equal(qs.stringify({ a: 'b' }), 'a=b'); -assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); -``` - -This encoding can be disabled by setting the `encode` option to `false`: - -```javascript -var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false }); -assert.equal(unencoded, 'a[b]=c'); -``` - -Encoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`: -```javascript -var encodedValues = qs.stringify( - { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, - { encodeValuesOnly: true } -); -assert.equal(encodedValues,'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h'); -``` - -This encoding can also be replaced by a custom encoding method set as `encoder` option: - -```javascript -var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { - // Passed in values `a`, `b`, `c` - return // Return encoded string -}}) -``` - -_(Note: the `encoder` option does not apply if `encode` is `false`)_ - -Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values: - -```javascript -var decoded = qs.parse('x=z', { decoder: function (str) { - // Passed in values `x`, `z` - return // Return decoded string -}}) -``` - -Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage. - -When arrays are stringified, by default they are given explicit indices: - -```javascript -qs.stringify({ a: ['b', 'c', 'd'] }); -// 'a[0]=b&a[1]=c&a[2]=d' -``` - -You may override this by setting the `indices` option to `false`: - -```javascript -qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); -// 'a=b&a=c&a=d' -``` - -You may use the `arrayFormat` option to specify the format of the output array: - -```javascript -qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) -// 'a[0]=b&a[1]=c' -qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) -// 'a[]=b&a[]=c' -qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) -// 'a=b&a=c' -``` - -When objects are stringified, by default they use bracket notation: - -```javascript -qs.stringify({ a: { b: { c: 'd', e: 'f' } } }); -// 'a[b][c]=d&a[b][e]=f' -``` - -You may override this to use dot notation by setting the `allowDots` option to `true`: - -```javascript -qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true }); -// 'a.b.c=d&a.b.e=f' -``` - -Empty strings and null values will omit the value, but the equals sign (=) remains in place: - -```javascript -assert.equal(qs.stringify({ a: '' }), 'a='); -``` - -Key with no values (such as an empty object or array) will return nothing: - -```javascript -assert.equal(qs.stringify({ a: [] }), ''); -assert.equal(qs.stringify({ a: {} }), ''); -assert.equal(qs.stringify({ a: [{}] }), ''); -assert.equal(qs.stringify({ a: { b: []} }), ''); -assert.equal(qs.stringify({ a: { b: {}} }), ''); -``` - -Properties that are set to `undefined` will be omitted entirely: - -```javascript -assert.equal(qs.stringify({ a: null, b: undefined }), 'a='); -``` - -The query string may optionally be prepended with a question mark: - -```javascript -assert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d'); -``` - -The delimiter may be overridden with stringify as well: - -```javascript -assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); -``` - -If you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option: - -```javascript -var date = new Date(7); -assert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A')); -assert.equal( - qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }), - 'a=7' -); -``` - -You may use the `sort` option to affect the order of parameter keys: - -```javascript -function alphabeticalSort(a, b) { - return a.localeCompare(b); -} -assert.equal(qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y'); -``` - -Finally, you can use the `filter` option to restrict which keys will be included in the stringified output. -If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you -pass an array, it will be used to select properties and array indices for stringification: - -```javascript -function filterFunc(prefix, value) { - if (prefix == 'b') { - // Return an `undefined` value to omit a property. - return; - } - if (prefix == 'e[f]') { - return value.getTime(); - } - if (prefix == 'e[g][0]') { - return value * 2; - } - return value; -} -qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc }); -// 'a=b&c=d&e[f]=123&e[g][0]=4' -qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); -// 'a=b&e=f' -qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] }); -// 'a[0]=b&a[2]=d' -``` - -### Handling of `null` values - -By default, `null` values are treated like empty strings: - -```javascript -var withNull = qs.stringify({ a: null, b: '' }); -assert.equal(withNull, 'a=&b='); -``` - -Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings. - -```javascript -var equalsInsensitive = qs.parse('a&b='); -assert.deepEqual(equalsInsensitive, { a: '', b: '' }); -``` - -To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null` -values have no `=` sign: - -```javascript -var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true }); -assert.equal(strictNull, 'a&b='); -``` - -To parse values without `=` back to `null` use the `strictNullHandling` flag: - -```javascript -var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true }); -assert.deepEqual(parsedStrictNull, { a: null, b: '' }); -``` - -To completely skip rendering keys with `null` values, use the `skipNulls` flag: - -```javascript -var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true }); -assert.equal(nullsSkipped, 'a=b'); -``` - -### Dealing with special character sets - -By default the encoding and decoding of characters is done in `utf-8`. If you -wish to encode querystrings to a different character set (i.e. -[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the -[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library: - -```javascript -var encoder = require('qs-iconv/encoder')('shift_jis'); -var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder }); -assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I'); -``` - -This also works for decoding of query strings: - -```javascript -var decoder = require('qs-iconv/decoder')('shift_jis'); -var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder }); -assert.deepEqual(obj, { a: 'こんにちは!' }); -``` - -### RFC 3986 and RFC 1738 space encoding - -RFC3986 used as default option and encodes ' ' to *%20* which is backward compatible. -In the same time, output can be stringified as per RFC1738 with ' ' equal to '+'. - -``` -assert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); -assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c'); -assert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c'); -``` - -[1]: https://npmjs.org/package/qs -[2]: http://versionbadg.es/ljharb/qs.svg -[3]: https://api.travis-ci.org/ljharb/qs.svg -[4]: https://travis-ci.org/ljharb/qs -[5]: https://david-dm.org/ljharb/qs.svg -[6]: https://david-dm.org/ljharb/qs -[7]: https://david-dm.org/ljharb/qs/dev-status.svg -[8]: https://david-dm.org/ljharb/qs?type=dev -[9]: https://ci.testling.com/ljharb/qs.png -[10]: https://ci.testling.com/ljharb/qs -[11]: https://nodei.co/npm/qs.png?downloads=true&stars=true -[license-image]: http://img.shields.io/npm/l/qs.svg -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/qs.svg -[downloads-url]: http://npm-stat.com/charts.html?package=qs diff --git a/truebit-implementation/node_modules/qs/dist/qs.js b/truebit-implementation/node_modules/qs/dist/qs.js deleted file mode 100644 index ecf7ba44..00000000 --- a/truebit-implementation/node_modules/qs/dist/qs.js +++ /dev/null @@ -1,638 +0,0 @@ -(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.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= 0; --i) { - var obj; - var root = chain[i]; - - if (root === '[]') { - obj = []; - obj = obj.concat(leaf); - } else { - obj = options.plainObjects ? Object.create(null) : {}; - var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; - var index = parseInt(cleanRoot, 10); - if ( - !isNaN(index) - && root !== cleanRoot - && String(index) === cleanRoot - && index >= 0 - && (options.parseArrays && index <= options.arrayLimit) - ) { - obj = []; - obj[index] = leaf; - } else { - obj[cleanRoot] = leaf; - } - } - - leaf = obj; - } - - return leaf; -}; - -var parseKeys = function parseQueryStringKeys(givenKey, val, options) { - if (!givenKey) { - return; - } - - // Transform dot notation to bracket notation - var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; - - // The regex chunks - - var brackets = /(\[[^[\]]*])/; - var child = /(\[[^[\]]*])/g; - - // Get the parent - - var segment = brackets.exec(key); - var parent = segment ? key.slice(0, segment.index) : key; - - // Stash the parent if it exists - - var keys = []; - if (parent) { - // If we aren't using plain objects, optionally prefix keys - // that would overwrite object prototype properties - if (!options.plainObjects && has.call(Object.prototype, parent)) { - if (!options.allowPrototypes) { - return; - } - } - - keys.push(parent); - } - - // Loop through children appending to the array until we hit depth - - var i = 0; - while ((segment = child.exec(key)) !== null && i < options.depth) { - i += 1; - if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { - if (!options.allowPrototypes) { - return; - } - } - keys.push(segment[1]); - } - - // If there's a remainder, just add whatever is left - - if (segment) { - keys.push('[' + key.slice(segment.index) + ']'); - } - - return parseObject(keys, val, options); -}; - -module.exports = function (str, opts) { - var options = opts ? utils.assign({}, opts) : {}; - - if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { - throw new TypeError('Decoder has to be a function.'); - } - - options.ignoreQueryPrefix = options.ignoreQueryPrefix === true; - options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; - options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; - options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; - options.parseArrays = options.parseArrays !== false; - options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; - options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; - options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; - options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; - options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; - options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - - if (str === '' || str === null || typeof str === 'undefined') { - return options.plainObjects ? Object.create(null) : {}; - } - - var tempObj = typeof str === 'string' ? parseValues(str, options) : str; - var obj = options.plainObjects ? Object.create(null) : {}; - - // Iterate over the keys and setup the new object - - var keys = Object.keys(tempObj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var newObj = parseKeys(key, tempObj[key], options); - obj = utils.merge(obj, newObj, options); - } - - return utils.compact(obj); -}; - -},{"./utils":5}],4:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var formats = require('./formats'); - -var arrayPrefixGenerators = { - brackets: function brackets(prefix) { // eslint-disable-line func-name-matching - return prefix + '[]'; - }, - indices: function indices(prefix, key) { // eslint-disable-line func-name-matching - return prefix + '[' + key + ']'; - }, - repeat: function repeat(prefix) { // eslint-disable-line func-name-matching - return prefix; - } -}; - -var toISO = Date.prototype.toISOString; - -var defaults = { - delimiter: '&', - encode: true, - encoder: utils.encode, - encodeValuesOnly: false, - serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching - return toISO.call(date); - }, - skipNulls: false, - strictNullHandling: false -}; - -var stringify = function stringify( // eslint-disable-line func-name-matching - object, - prefix, - generateArrayPrefix, - strictNullHandling, - skipNulls, - encoder, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly -) { - var obj = object; - if (typeof filter === 'function') { - obj = filter(prefix, obj); - } else if (obj instanceof Date) { - obj = serializeDate(obj); - } else if (obj === null) { - if (strictNullHandling) { - return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix; - } - - obj = ''; - } - - if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { - if (encoder) { - var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder); - return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))]; - } - return [formatter(prefix) + '=' + formatter(String(obj))]; - } - - var values = []; - - if (typeof obj === 'undefined') { - return values; - } - - var objKeys; - if (Array.isArray(filter)) { - objKeys = filter; - } else { - var keys = Object.keys(obj); - objKeys = sort ? keys.sort(sort) : keys; - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - if (Array.isArray(obj)) { - values = values.concat(stringify( - obj[key], - generateArrayPrefix(prefix, key), - generateArrayPrefix, - strictNullHandling, - skipNulls, - encoder, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly - )); - } else { - values = values.concat(stringify( - obj[key], - prefix + (allowDots ? '.' + key : '[' + key + ']'), - generateArrayPrefix, - strictNullHandling, - skipNulls, - encoder, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly - )); - } - } - - return values; -}; - -module.exports = function (object, opts) { - var obj = object; - var options = opts ? utils.assign({}, opts) : {}; - - if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { - throw new TypeError('Encoder has to be a function.'); - } - - var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; - var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; - var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; - var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; - var sort = typeof options.sort === 'function' ? options.sort : null; - var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; - var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; - var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; - if (typeof options.format === 'undefined') { - options.format = formats['default']; - } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { - throw new TypeError('Unknown format option provided.'); - } - var formatter = formats.formatters[options.format]; - var objKeys; - var filter; - - if (typeof options.filter === 'function') { - filter = options.filter; - obj = filter('', obj); - } else if (Array.isArray(options.filter)) { - filter = options.filter; - objKeys = filter; - } - - var keys = []; - - if (typeof obj !== 'object' || obj === null) { - return ''; - } - - var arrayFormat; - if (options.arrayFormat in arrayPrefixGenerators) { - arrayFormat = options.arrayFormat; - } else if ('indices' in options) { - arrayFormat = options.indices ? 'indices' : 'repeat'; - } else { - arrayFormat = 'indices'; - } - - var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; - - if (!objKeys) { - objKeys = Object.keys(obj); - } - - if (sort) { - objKeys.sort(sort); - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - keys = keys.concat(stringify( - obj[key], - key, - generateArrayPrefix, - strictNullHandling, - skipNulls, - encode ? encoder : null, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly - )); - } - - var joined = keys.join(delimiter); - var prefix = options.addQueryPrefix === true ? '?' : ''; - - return joined.length > 0 ? prefix + joined : ''; -}; - -},{"./formats":1,"./utils":5}],5:[function(require,module,exports){ -'use strict'; - -var has = Object.prototype.hasOwnProperty; - -var hexTable = (function () { - var array = []; - for (var i = 0; i < 256; ++i) { - array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); - } - - return array; -}()); - -var compactQueue = function compactQueue(queue) { - var obj; - - while (queue.length) { - var item = queue.pop(); - obj = item.obj[item.prop]; - - if (Array.isArray(obj)) { - var compacted = []; - - for (var j = 0; j < obj.length; ++j) { - if (typeof obj[j] !== 'undefined') { - compacted.push(obj[j]); - } - } - - item.obj[item.prop] = compacted; - } - } - - return obj; -}; - -var arrayToObject = function arrayToObject(source, options) { - var obj = options && options.plainObjects ? Object.create(null) : {}; - for (var i = 0; i < source.length; ++i) { - if (typeof source[i] !== 'undefined') { - obj[i] = source[i]; - } - } - - return obj; -}; - -var merge = function merge(target, source, options) { - if (!source) { - return target; - } - - if (typeof source !== 'object') { - if (Array.isArray(target)) { - target.push(source); - } else if (typeof target === 'object') { - if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) { - target[source] = true; - } - } else { - return [target, source]; - } - - return target; - } - - if (typeof target !== 'object') { - return [target].concat(source); - } - - var mergeTarget = target; - if (Array.isArray(target) && !Array.isArray(source)) { - mergeTarget = arrayToObject(target, options); - } - - if (Array.isArray(target) && Array.isArray(source)) { - source.forEach(function (item, i) { - if (has.call(target, i)) { - if (target[i] && typeof target[i] === 'object') { - target[i] = merge(target[i], item, options); - } else { - target.push(item); - } - } else { - target[i] = item; - } - }); - return target; - } - - return Object.keys(source).reduce(function (acc, key) { - var value = source[key]; - - if (has.call(acc, key)) { - acc[key] = merge(acc[key], value, options); - } else { - acc[key] = value; - } - return acc; - }, mergeTarget); -}; - -var assign = function assignSingleSource(target, source) { - return Object.keys(source).reduce(function (acc, key) { - acc[key] = source[key]; - return acc; - }, target); -}; - -var decode = function (str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (e) { - return str; - } -}; - -var encode = function encode(str) { - // This code was originally written by Brian White (mscdex) for the io.js core querystring library. - // It has been adapted here for stricter adherence to RFC 3986 - if (str.length === 0) { - return str; - } - - var string = typeof str === 'string' ? str : String(str); - - var out = ''; - for (var i = 0; i < string.length; ++i) { - var c = string.charCodeAt(i); - - if ( - c === 0x2D // - - || c === 0x2E // . - || c === 0x5F // _ - || c === 0x7E // ~ - || (c >= 0x30 && c <= 0x39) // 0-9 - || (c >= 0x41 && c <= 0x5A) // a-z - || (c >= 0x61 && c <= 0x7A) // A-Z - ) { - out += string.charAt(i); - continue; - } - - if (c < 0x80) { - out = out + hexTable[c]; - continue; - } - - if (c < 0x800) { - out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - if (c < 0xD800 || c >= 0xE000) { - out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - i += 1; - c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); - out += hexTable[0xF0 | (c >> 18)] - + hexTable[0x80 | ((c >> 12) & 0x3F)] - + hexTable[0x80 | ((c >> 6) & 0x3F)] - + hexTable[0x80 | (c & 0x3F)]; - } - - return out; -}; - -var compact = function compact(value) { - var queue = [{ obj: { o: value }, prop: 'o' }]; - var refs = []; - - for (var i = 0; i < queue.length; ++i) { - var item = queue[i]; - var obj = item.obj[item.prop]; - - var keys = Object.keys(obj); - for (var j = 0; j < keys.length; ++j) { - var key = keys[j]; - var val = obj[key]; - if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { - queue.push({ obj: obj, prop: key }); - refs.push(val); - } - } - } - - return compactQueue(queue); -}; - -var isRegExp = function isRegExp(obj) { - return Object.prototype.toString.call(obj) === '[object RegExp]'; -}; - -var isBuffer = function isBuffer(obj) { - if (obj === null || typeof obj === 'undefined') { - return false; - } - - return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); -}; - -module.exports = { - arrayToObject: arrayToObject, - assign: assign, - compact: compact, - decode: decode, - encode: encode, - isBuffer: isBuffer, - isRegExp: isRegExp, - merge: merge -}; - -},{}]},{},[2])(2) -}); diff --git a/truebit-implementation/node_modules/qs/lib/formats.js b/truebit-implementation/node_modules/qs/lib/formats.js deleted file mode 100644 index df459975..00000000 --- a/truebit-implementation/node_modules/qs/lib/formats.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var replace = String.prototype.replace; -var percentTwenties = /%20/g; - -module.exports = { - 'default': 'RFC3986', - formatters: { - RFC1738: function (value) { - return replace.call(value, percentTwenties, '+'); - }, - RFC3986: function (value) { - return value; - } - }, - RFC1738: 'RFC1738', - RFC3986: 'RFC3986' -}; diff --git a/truebit-implementation/node_modules/qs/lib/index.js b/truebit-implementation/node_modules/qs/lib/index.js deleted file mode 100644 index 0d6a97dc..00000000 --- a/truebit-implementation/node_modules/qs/lib/index.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var stringify = require('./stringify'); -var parse = require('./parse'); -var formats = require('./formats'); - -module.exports = { - formats: formats, - parse: parse, - stringify: stringify -}; diff --git a/truebit-implementation/node_modules/qs/lib/parse.js b/truebit-implementation/node_modules/qs/lib/parse.js deleted file mode 100644 index 8c9872ec..00000000 --- a/truebit-implementation/node_modules/qs/lib/parse.js +++ /dev/null @@ -1,174 +0,0 @@ -'use strict'; - -var utils = require('./utils'); - -var has = Object.prototype.hasOwnProperty; - -var defaults = { - allowDots: false, - allowPrototypes: false, - arrayLimit: 20, - decoder: utils.decode, - delimiter: '&', - depth: 5, - parameterLimit: 1000, - plainObjects: false, - strictNullHandling: false -}; - -var parseValues = function parseQueryStringValues(str, options) { - var obj = {}; - var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; - var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; - var parts = cleanStr.split(options.delimiter, limit); - - for (var i = 0; i < parts.length; ++i) { - var part = parts[i]; - - var bracketEqualsPos = part.indexOf(']='); - var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; - - var key, val; - if (pos === -1) { - key = options.decoder(part, defaults.decoder); - val = options.strictNullHandling ? null : ''; - } else { - key = options.decoder(part.slice(0, pos), defaults.decoder); - val = options.decoder(part.slice(pos + 1), defaults.decoder); - } - if (has.call(obj, key)) { - obj[key] = [].concat(obj[key]).concat(val); - } else { - obj[key] = val; - } - } - - return obj; -}; - -var parseObject = function (chain, val, options) { - var leaf = val; - - for (var i = chain.length - 1; i >= 0; --i) { - var obj; - var root = chain[i]; - - if (root === '[]') { - obj = []; - obj = obj.concat(leaf); - } else { - obj = options.plainObjects ? Object.create(null) : {}; - var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; - var index = parseInt(cleanRoot, 10); - if ( - !isNaN(index) - && root !== cleanRoot - && String(index) === cleanRoot - && index >= 0 - && (options.parseArrays && index <= options.arrayLimit) - ) { - obj = []; - obj[index] = leaf; - } else { - obj[cleanRoot] = leaf; - } - } - - leaf = obj; - } - - return leaf; -}; - -var parseKeys = function parseQueryStringKeys(givenKey, val, options) { - if (!givenKey) { - return; - } - - // Transform dot notation to bracket notation - var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; - - // The regex chunks - - var brackets = /(\[[^[\]]*])/; - var child = /(\[[^[\]]*])/g; - - // Get the parent - - var segment = brackets.exec(key); - var parent = segment ? key.slice(0, segment.index) : key; - - // Stash the parent if it exists - - var keys = []; - if (parent) { - // If we aren't using plain objects, optionally prefix keys - // that would overwrite object prototype properties - if (!options.plainObjects && has.call(Object.prototype, parent)) { - if (!options.allowPrototypes) { - return; - } - } - - keys.push(parent); - } - - // Loop through children appending to the array until we hit depth - - var i = 0; - while ((segment = child.exec(key)) !== null && i < options.depth) { - i += 1; - if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { - if (!options.allowPrototypes) { - return; - } - } - keys.push(segment[1]); - } - - // If there's a remainder, just add whatever is left - - if (segment) { - keys.push('[' + key.slice(segment.index) + ']'); - } - - return parseObject(keys, val, options); -}; - -module.exports = function (str, opts) { - var options = opts ? utils.assign({}, opts) : {}; - - if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') { - throw new TypeError('Decoder has to be a function.'); - } - - options.ignoreQueryPrefix = options.ignoreQueryPrefix === true; - options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter; - options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth; - options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit; - options.parseArrays = options.parseArrays !== false; - options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder; - options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots; - options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects; - options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes; - options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit; - options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - - if (str === '' || str === null || typeof str === 'undefined') { - return options.plainObjects ? Object.create(null) : {}; - } - - var tempObj = typeof str === 'string' ? parseValues(str, options) : str; - var obj = options.plainObjects ? Object.create(null) : {}; - - // Iterate over the keys and setup the new object - - var keys = Object.keys(tempObj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var newObj = parseKeys(key, tempObj[key], options); - obj = utils.merge(obj, newObj, options); - } - - return utils.compact(obj); -}; diff --git a/truebit-implementation/node_modules/qs/lib/stringify.js b/truebit-implementation/node_modules/qs/lib/stringify.js deleted file mode 100644 index ab915ac4..00000000 --- a/truebit-implementation/node_modules/qs/lib/stringify.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict'; - -var utils = require('./utils'); -var formats = require('./formats'); - -var arrayPrefixGenerators = { - brackets: function brackets(prefix) { // eslint-disable-line func-name-matching - return prefix + '[]'; - }, - indices: function indices(prefix, key) { // eslint-disable-line func-name-matching - return prefix + '[' + key + ']'; - }, - repeat: function repeat(prefix) { // eslint-disable-line func-name-matching - return prefix; - } -}; - -var toISO = Date.prototype.toISOString; - -var defaults = { - delimiter: '&', - encode: true, - encoder: utils.encode, - encodeValuesOnly: false, - serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching - return toISO.call(date); - }, - skipNulls: false, - strictNullHandling: false -}; - -var stringify = function stringify( // eslint-disable-line func-name-matching - object, - prefix, - generateArrayPrefix, - strictNullHandling, - skipNulls, - encoder, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly -) { - var obj = object; - if (typeof filter === 'function') { - obj = filter(prefix, obj); - } else if (obj instanceof Date) { - obj = serializeDate(obj); - } else if (obj === null) { - if (strictNullHandling) { - return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix; - } - - obj = ''; - } - - if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) { - if (encoder) { - var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder); - return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))]; - } - return [formatter(prefix) + '=' + formatter(String(obj))]; - } - - var values = []; - - if (typeof obj === 'undefined') { - return values; - } - - var objKeys; - if (Array.isArray(filter)) { - objKeys = filter; - } else { - var keys = Object.keys(obj); - objKeys = sort ? keys.sort(sort) : keys; - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - if (Array.isArray(obj)) { - values = values.concat(stringify( - obj[key], - generateArrayPrefix(prefix, key), - generateArrayPrefix, - strictNullHandling, - skipNulls, - encoder, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly - )); - } else { - values = values.concat(stringify( - obj[key], - prefix + (allowDots ? '.' + key : '[' + key + ']'), - generateArrayPrefix, - strictNullHandling, - skipNulls, - encoder, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly - )); - } - } - - return values; -}; - -module.exports = function (object, opts) { - var obj = object; - var options = opts ? utils.assign({}, opts) : {}; - - if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') { - throw new TypeError('Encoder has to be a function.'); - } - - var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter; - var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling; - var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls; - var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode; - var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder; - var sort = typeof options.sort === 'function' ? options.sort : null; - var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots; - var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate; - var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly; - if (typeof options.format === 'undefined') { - options.format = formats['default']; - } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) { - throw new TypeError('Unknown format option provided.'); - } - var formatter = formats.formatters[options.format]; - var objKeys; - var filter; - - if (typeof options.filter === 'function') { - filter = options.filter; - obj = filter('', obj); - } else if (Array.isArray(options.filter)) { - filter = options.filter; - objKeys = filter; - } - - var keys = []; - - if (typeof obj !== 'object' || obj === null) { - return ''; - } - - var arrayFormat; - if (options.arrayFormat in arrayPrefixGenerators) { - arrayFormat = options.arrayFormat; - } else if ('indices' in options) { - arrayFormat = options.indices ? 'indices' : 'repeat'; - } else { - arrayFormat = 'indices'; - } - - var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; - - if (!objKeys) { - objKeys = Object.keys(obj); - } - - if (sort) { - objKeys.sort(sort); - } - - for (var i = 0; i < objKeys.length; ++i) { - var key = objKeys[i]; - - if (skipNulls && obj[key] === null) { - continue; - } - - keys = keys.concat(stringify( - obj[key], - key, - generateArrayPrefix, - strictNullHandling, - skipNulls, - encode ? encoder : null, - filter, - sort, - allowDots, - serializeDate, - formatter, - encodeValuesOnly - )); - } - - var joined = keys.join(delimiter); - var prefix = options.addQueryPrefix === true ? '?' : ''; - - return joined.length > 0 ? prefix + joined : ''; -}; diff --git a/truebit-implementation/node_modules/qs/lib/utils.js b/truebit-implementation/node_modules/qs/lib/utils.js deleted file mode 100644 index 8775a327..00000000 --- a/truebit-implementation/node_modules/qs/lib/utils.js +++ /dev/null @@ -1,213 +0,0 @@ -'use strict'; - -var has = Object.prototype.hasOwnProperty; - -var hexTable = (function () { - var array = []; - for (var i = 0; i < 256; ++i) { - array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); - } - - return array; -}()); - -var compactQueue = function compactQueue(queue) { - var obj; - - while (queue.length) { - var item = queue.pop(); - obj = item.obj[item.prop]; - - if (Array.isArray(obj)) { - var compacted = []; - - for (var j = 0; j < obj.length; ++j) { - if (typeof obj[j] !== 'undefined') { - compacted.push(obj[j]); - } - } - - item.obj[item.prop] = compacted; - } - } - - return obj; -}; - -var arrayToObject = function arrayToObject(source, options) { - var obj = options && options.plainObjects ? Object.create(null) : {}; - for (var i = 0; i < source.length; ++i) { - if (typeof source[i] !== 'undefined') { - obj[i] = source[i]; - } - } - - return obj; -}; - -var merge = function merge(target, source, options) { - if (!source) { - return target; - } - - if (typeof source !== 'object') { - if (Array.isArray(target)) { - target.push(source); - } else if (typeof target === 'object') { - if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) { - target[source] = true; - } - } else { - return [target, source]; - } - - return target; - } - - if (typeof target !== 'object') { - return [target].concat(source); - } - - var mergeTarget = target; - if (Array.isArray(target) && !Array.isArray(source)) { - mergeTarget = arrayToObject(target, options); - } - - if (Array.isArray(target) && Array.isArray(source)) { - source.forEach(function (item, i) { - if (has.call(target, i)) { - if (target[i] && typeof target[i] === 'object') { - target[i] = merge(target[i], item, options); - } else { - target.push(item); - } - } else { - target[i] = item; - } - }); - return target; - } - - return Object.keys(source).reduce(function (acc, key) { - var value = source[key]; - - if (has.call(acc, key)) { - acc[key] = merge(acc[key], value, options); - } else { - acc[key] = value; - } - return acc; - }, mergeTarget); -}; - -var assign = function assignSingleSource(target, source) { - return Object.keys(source).reduce(function (acc, key) { - acc[key] = source[key]; - return acc; - }, target); -}; - -var decode = function (str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (e) { - return str; - } -}; - -var encode = function encode(str) { - // This code was originally written by Brian White (mscdex) for the io.js core querystring library. - // It has been adapted here for stricter adherence to RFC 3986 - if (str.length === 0) { - return str; - } - - var string = typeof str === 'string' ? str : String(str); - - var out = ''; - for (var i = 0; i < string.length; ++i) { - var c = string.charCodeAt(i); - - if ( - c === 0x2D // - - || c === 0x2E // . - || c === 0x5F // _ - || c === 0x7E // ~ - || (c >= 0x30 && c <= 0x39) // 0-9 - || (c >= 0x41 && c <= 0x5A) // a-z - || (c >= 0x61 && c <= 0x7A) // A-Z - ) { - out += string.charAt(i); - continue; - } - - if (c < 0x80) { - out = out + hexTable[c]; - continue; - } - - if (c < 0x800) { - out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - if (c < 0xD800 || c >= 0xE000) { - out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); - continue; - } - - i += 1; - c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); - out += hexTable[0xF0 | (c >> 18)] - + hexTable[0x80 | ((c >> 12) & 0x3F)] - + hexTable[0x80 | ((c >> 6) & 0x3F)] - + hexTable[0x80 | (c & 0x3F)]; - } - - return out; -}; - -var compact = function compact(value) { - var queue = [{ obj: { o: value }, prop: 'o' }]; - var refs = []; - - for (var i = 0; i < queue.length; ++i) { - var item = queue[i]; - var obj = item.obj[item.prop]; - - var keys = Object.keys(obj); - for (var j = 0; j < keys.length; ++j) { - var key = keys[j]; - var val = obj[key]; - if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { - queue.push({ obj: obj, prop: key }); - refs.push(val); - } - } - } - - return compactQueue(queue); -}; - -var isRegExp = function isRegExp(obj) { - return Object.prototype.toString.call(obj) === '[object RegExp]'; -}; - -var isBuffer = function isBuffer(obj) { - if (obj === null || typeof obj === 'undefined') { - return false; - } - - return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); -}; - -module.exports = { - arrayToObject: arrayToObject, - assign: assign, - compact: compact, - decode: decode, - encode: encode, - isBuffer: isBuffer, - isRegExp: isRegExp, - merge: merge -}; diff --git a/truebit-implementation/node_modules/qs/package.json b/truebit-implementation/node_modules/qs/package.json deleted file mode 100644 index 30b24f01..00000000 --- a/truebit-implementation/node_modules/qs/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_from": "qs@6.5.2", - "_id": "qs@6.5.2", - "_inBundle": false, - "_integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "_location": "/qs", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "qs@6.5.2", - "name": "qs", - "escapedName": "qs", - "rawSpec": "6.5.2", - "saveSpec": null, - "fetchSpec": "6.5.2" - }, - "_requiredBy": [ - "/body-parser", - "/express", - "/request" - ], - "_resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "_shasum": "cb3ae806e8740444584ef154ce8ee98d403f3e36", - "_spec": "qs@6.5.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "bugs": { - "url": "https://github.com/ljharb/qs/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jordan Harband", - "email": "ljharb@gmail.com", - "url": "http://ljharb.codes" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "A querystring parser that supports nesting and arrays, with a depth limit", - "devDependencies": { - "@ljharb/eslint-config": "^12.2.1", - "browserify": "^16.2.0", - "covert": "^1.1.0", - "editorconfig-tools": "^0.1.1", - "eslint": "^4.19.1", - "evalmd": "^0.0.17", - "iconv-lite": "^0.4.21", - "mkdirp": "^0.5.1", - "qs-iconv": "^1.0.4", - "safe-publish-latest": "^1.1.1", - "safer-buffer": "^2.1.2", - "tape": "^4.9.0" - }, - "engines": { - "node": ">=0.6" - }, - "homepage": "https://github.com/ljharb/qs", - "keywords": [ - "querystring", - "qs" - ], - "license": "BSD-3-Clause", - "main": "lib/index.js", - "name": "qs", - "repository": { - "type": "git", - "url": "git+https://github.com/ljharb/qs.git" - }, - "scripts": { - "coverage": "covert test", - "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js", - "lint": "eslint lib/*.js test/*.js", - "prelint": "editorconfig-tools check * lib/* test/*", - "prepublish": "safe-publish-latest && npm run dist", - "pretest": "npm run --silent readme && npm run --silent lint", - "readme": "evalmd README.md", - "test": "npm run --silent coverage", - "tests-only": "node test" - }, - "version": "6.5.2" -} diff --git a/truebit-implementation/node_modules/qs/test/.eslintrc b/truebit-implementation/node_modules/qs/test/.eslintrc deleted file mode 100644 index 20175d64..00000000 --- a/truebit-implementation/node_modules/qs/test/.eslintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "rules": { - "array-bracket-newline": 0, - "array-element-newline": 0, - "consistent-return": 2, - "max-lines": 0, - "max-nested-callbacks": [2, 3], - "max-statements": 0, - "no-buffer-constructor": 0, - "no-extend-native": 0, - "no-magic-numbers": 0, - "object-curly-newline": 0, - "sort-keys": 0 - } -} diff --git a/truebit-implementation/node_modules/qs/test/index.js b/truebit-implementation/node_modules/qs/test/index.js deleted file mode 100644 index 5e6bc8fb..00000000 --- a/truebit-implementation/node_modules/qs/test/index.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -require('./parse'); - -require('./stringify'); - -require('./utils'); diff --git a/truebit-implementation/node_modules/qs/test/parse.js b/truebit-implementation/node_modules/qs/test/parse.js deleted file mode 100644 index 0f8fe457..00000000 --- a/truebit-implementation/node_modules/qs/test/parse.js +++ /dev/null @@ -1,574 +0,0 @@ -'use strict'; - -var test = require('tape'); -var qs = require('../'); -var utils = require('../lib/utils'); -var iconv = require('iconv-lite'); -var SaferBuffer = require('safer-buffer').Buffer; - -test('parse()', function (t) { - t.test('parses a simple string', function (st) { - st.deepEqual(qs.parse('0=foo'), { 0: 'foo' }); - st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' }); - st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } }); - st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } }); - st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } }); - st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null }); - st.deepEqual(qs.parse('foo'), { foo: '' }); - st.deepEqual(qs.parse('foo='), { foo: '' }); - st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' }); - st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' }); - st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' }); - st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' }); - st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' }); - st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null }); - st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' }); - st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), { - cht: 'p3', - chd: 't:60,40', - chs: '250x100', - chl: 'Hello|World' - }); - st.end(); - }); - - t.test('allows enabling dot notation', function (st) { - st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' }); - st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } }); - st.end(); - }); - - t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string'); - t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string'); - t.deepEqual( - qs.parse('a[b][c][d][e][f][g][h]=i'), - { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } }, - 'defaults to a depth of 5' - ); - - t.test('only parses one level when depth = 1', function (st) { - st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } }); - st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } }); - st.end(); - }); - - t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array'); - - t.test('parses an explicit array', function (st) { - st.deepEqual(qs.parse('a[]=b'), { a: ['b'] }); - st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] }); - st.end(); - }); - - t.test('parses a mix of simple and explicit arrays', function (st) { - st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] }); - - st.deepEqual(qs.parse('a[1]=b&a=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[]=b&a=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] }); - - st.deepEqual(qs.parse('a=b&a[1]=c', { arrayLimit: 20 }), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a=b&a[]=c', { arrayLimit: 0 }), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] }); - - st.end(); - }); - - t.test('parses a nested array', function (st) { - st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } }); - st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } }); - st.end(); - }); - - t.test('allows to specify array indices', function (st) { - st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] }); - st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] }); - st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 20 }), { a: ['c'] }); - st.deepEqual(qs.parse('a[1]=c', { arrayLimit: 0 }), { a: { 1: 'c' } }); - st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] }); - st.end(); - }); - - t.test('limits specific array indices to arrayLimit', function (st) { - st.deepEqual(qs.parse('a[20]=a', { arrayLimit: 20 }), { a: ['a'] }); - st.deepEqual(qs.parse('a[21]=a', { arrayLimit: 20 }), { a: { 21: 'a' } }); - st.end(); - }); - - t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number'); - - t.test('supports encoded = signs', function (st) { - st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' }); - st.end(); - }); - - t.test('is ok with url encoded strings', function (st) { - st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } }); - st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } }); - st.end(); - }); - - t.test('allows brackets in the value', function (st) { - st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' }); - st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' }); - st.end(); - }); - - t.test('allows empty values', function (st) { - st.deepEqual(qs.parse(''), {}); - st.deepEqual(qs.parse(null), {}); - st.deepEqual(qs.parse(undefined), {}); - st.end(); - }); - - t.test('transforms arrays to objects', function (st) { - st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); - st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); - st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', 0: 'bar' } }); - st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { 0: 'bar', bad: 'baz' } }); - st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); - st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); - - st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { 0: 'b', t: 'u' } }); - st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { 0: 'b', t: 'u', hasOwnProperty: 'c' } }); - st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { 0: 'b', x: 'y' } }); - st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { 0: 'b', hasOwnProperty: 'c', x: 'y' } }); - st.end(); - }); - - t.test('transforms arrays to objects (dot notation)', function (st) { - st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } }); - st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } }); - st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } }); - st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] }); - st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] }); - st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); - st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar' } }); - st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { 0: 'bar', bad: 'baz' } }); - st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', 0: 'bar', 1: 'foo' } }); - st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] }); - st.end(); - }); - - t.test('correctly prunes undefined values when converting an array to an object', function (st) { - st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { 2: 'b', 99999999: 'c' } }); - st.end(); - }); - - t.test('supports malformed uri characters', function (st) { - st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null }); - st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' }); - st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' }); - st.end(); - }); - - t.test('doesn\'t produce empty keys', function (st) { - st.deepEqual(qs.parse('_r=1&'), { _r: '1' }); - st.end(); - }); - - t.test('cannot access Object prototype', function (st) { - qs.parse('constructor[prototype][bad]=bad'); - qs.parse('bad[constructor][prototype][bad]=bad'); - st.equal(typeof Object.prototype.bad, 'undefined'); - st.end(); - }); - - t.test('parses arrays of objects', function (st) { - st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); - st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] }); - st.end(); - }); - - t.test('allows for empty strings in arrays', function (st) { - st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] }); - - st.deepEqual( - qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }), - { a: ['b', null, 'c', ''] }, - 'with arrayLimit 20 + array indices: null then empty string works' - ); - st.deepEqual( - qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }), - { a: ['b', null, 'c', ''] }, - 'with arrayLimit 0 + array brackets: null then empty string works' - ); - - st.deepEqual( - qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }), - { a: ['b', '', 'c', null] }, - 'with arrayLimit 20 + array indices: empty string then null works' - ); - st.deepEqual( - qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }), - { a: ['b', '', 'c', null] }, - 'with arrayLimit 0 + array brackets: empty string then null works' - ); - - st.deepEqual( - qs.parse('a[]=&a[]=b&a[]=c'), - { a: ['', 'b', 'c'] }, - 'array brackets: empty strings work' - ); - st.end(); - }); - - t.test('compacts sparse arrays', function (st) { - st.deepEqual(qs.parse('a[10]=1&a[2]=2', { arrayLimit: 20 }), { a: ['2', '1'] }); - st.deepEqual(qs.parse('a[1][b][2][c]=1', { arrayLimit: 20 }), { a: [{ b: [{ c: '1' }] }] }); - st.deepEqual(qs.parse('a[1][2][3][c]=1', { arrayLimit: 20 }), { a: [[[{ c: '1' }]]] }); - st.deepEqual(qs.parse('a[1][2][3][c][1]=1', { arrayLimit: 20 }), { a: [[[{ c: ['1'] }]]] }); - st.end(); - }); - - t.test('parses semi-parsed strings', function (st) { - st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } }); - st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } }); - st.end(); - }); - - t.test('parses buffers correctly', function (st) { - var b = SaferBuffer.from('test'); - st.deepEqual(qs.parse({ a: b }), { a: b }); - st.end(); - }); - - t.test('continues parsing when no parent is found', function (st) { - st.deepEqual(qs.parse('[]=&a=b'), { 0: '', a: 'b' }); - st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { 0: null, a: 'b' }); - st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' }); - st.end(); - }); - - t.test('does not error when parsing a very long array', function (st) { - var str = 'a[]=a'; - while (Buffer.byteLength(str) < 128 * 1024) { - str = str + '&' + str; - } - - st.doesNotThrow(function () { - qs.parse(str); - }); - - st.end(); - }); - - t.test('should not throw when a native prototype has an enumerable property', { parallel: false }, function (st) { - Object.prototype.crash = ''; - Array.prototype.crash = ''; - st.doesNotThrow(qs.parse.bind(null, 'a=b')); - st.deepEqual(qs.parse('a=b'), { a: 'b' }); - st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c')); - st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] }); - delete Object.prototype.crash; - delete Array.prototype.crash; - st.end(); - }); - - t.test('parses a string with an alternative string delimiter', function (st) { - st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('parses a string with an alternative RegExp delimiter', function (st) { - st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('does not use non-splittable objects as delimiters', function (st) { - st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('allows overriding parameter limit', function (st) { - st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' }); - st.end(); - }); - - t.test('allows setting the parameter limit to Infinity', function (st) { - st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('allows overriding array limit', function (st) { - st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { 0: 'b' } }); - st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } }); - st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { 0: 'b', 1: 'c' } }); - st.end(); - }); - - t.test('allows disabling array parsing', function (st) { - st.deepEqual(qs.parse('a[0]=b&a[1]=c', { parseArrays: false }), { a: { 0: 'b', 1: 'c' } }); - st.end(); - }); - - t.test('allows for query string prefix', function (st) { - st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); - st.deepEqual(qs.parse('foo=bar', { ignoreQueryPrefix: true }), { foo: 'bar' }); - st.deepEqual(qs.parse('?foo=bar', { ignoreQueryPrefix: false }), { '?foo': 'bar' }); - st.end(); - }); - - t.test('parses an object', function (st) { - var input = { - 'user[name]': { 'pop[bob]': 3 }, - 'user[email]': null - }; - - var expected = { - user: { - name: { 'pop[bob]': 3 }, - email: null - } - }; - - var result = qs.parse(input); - - st.deepEqual(result, expected); - st.end(); - }); - - t.test('parses an object in dot notation', function (st) { - var input = { - 'user.name': { 'pop[bob]': 3 }, - 'user.email.': null - }; - - var expected = { - user: { - name: { 'pop[bob]': 3 }, - email: null - } - }; - - var result = qs.parse(input, { allowDots: true }); - - st.deepEqual(result, expected); - st.end(); - }); - - t.test('parses an object and not child values', function (st) { - var input = { - 'user[name]': { 'pop[bob]': { test: 3 } }, - 'user[email]': null - }; - - var expected = { - user: { - name: { 'pop[bob]': { test: 3 } }, - email: null - } - }; - - var result = qs.parse(input); - - st.deepEqual(result, expected); - st.end(); - }); - - t.test('does not blow up when Buffer global is missing', function (st) { - var tempBuffer = global.Buffer; - delete global.Buffer; - var result = qs.parse('a=b&c=d'); - global.Buffer = tempBuffer; - st.deepEqual(result, { a: 'b', c: 'd' }); - st.end(); - }); - - t.test('does not crash when parsing circular references', function (st) { - var a = {}; - a.b = a; - - var parsed; - - st.doesNotThrow(function () { - parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a }); - }); - - st.equal('foo' in parsed, true, 'parsed has "foo" property'); - st.equal('bar' in parsed.foo, true); - st.equal('baz' in parsed.foo, true); - st.equal(parsed.foo.bar, 'baz'); - st.deepEqual(parsed.foo.baz, a); - st.end(); - }); - - t.test('does not crash when parsing deep objects', function (st) { - var parsed; - var str = 'foo'; - - for (var i = 0; i < 5000; i++) { - str += '[p]'; - } - - str += '=bar'; - - st.doesNotThrow(function () { - parsed = qs.parse(str, { depth: 5000 }); - }); - - st.equal('foo' in parsed, true, 'parsed has "foo" property'); - - var depth = 0; - var ref = parsed.foo; - while ((ref = ref.p)) { - depth += 1; - } - - st.equal(depth, 5000, 'parsed is 5000 properties deep'); - - st.end(); - }); - - t.test('parses null objects correctly', { skip: !Object.create }, function (st) { - var a = Object.create(null); - a.b = 'c'; - - st.deepEqual(qs.parse(a), { b: 'c' }); - var result = qs.parse({ a: a }); - st.equal('a' in result, true, 'result has "a" property'); - st.deepEqual(result.a, a); - st.end(); - }); - - t.test('parses dates correctly', function (st) { - var now = new Date(); - st.deepEqual(qs.parse({ a: now }), { a: now }); - st.end(); - }); - - t.test('parses regular expressions correctly', function (st) { - var re = /^test$/; - st.deepEqual(qs.parse({ a: re }), { a: re }); - st.end(); - }); - - t.test('does not allow overwriting prototype properties', function (st) { - st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: false }), {}); - st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: false }), {}); - - st.deepEqual( - qs.parse('toString', { allowPrototypes: false }), - {}, - 'bare "toString" results in {}' - ); - - st.end(); - }); - - t.test('can allow overwriting prototype properties', function (st) { - st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }); - st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }); - - st.deepEqual( - qs.parse('toString', { allowPrototypes: true }), - { toString: '' }, - 'bare "toString" results in { toString: "" }' - ); - - st.end(); - }); - - t.test('params starting with a closing bracket', function (st) { - st.deepEqual(qs.parse(']=toString'), { ']': 'toString' }); - st.deepEqual(qs.parse(']]=toString'), { ']]': 'toString' }); - st.deepEqual(qs.parse(']hello]=toString'), { ']hello]': 'toString' }); - st.end(); - }); - - t.test('params starting with a starting bracket', function (st) { - st.deepEqual(qs.parse('[=toString'), { '[': 'toString' }); - st.deepEqual(qs.parse('[[=toString'), { '[[': 'toString' }); - st.deepEqual(qs.parse('[hello[=toString'), { '[hello[': 'toString' }); - st.end(); - }); - - t.test('add keys to objects', function (st) { - st.deepEqual( - qs.parse('a[b]=c&a=d'), - { a: { b: 'c', d: true } }, - 'can add keys to objects' - ); - - st.deepEqual( - qs.parse('a[b]=c&a=toString'), - { a: { b: 'c' } }, - 'can not overwrite prototype' - ); - - st.deepEqual( - qs.parse('a[b]=c&a=toString', { allowPrototypes: true }), - { a: { b: 'c', toString: true } }, - 'can overwrite prototype with allowPrototypes true' - ); - - st.deepEqual( - qs.parse('a[b]=c&a=toString', { plainObjects: true }), - { a: { b: 'c', toString: true } }, - 'can overwrite prototype with plainObjects true' - ); - - st.end(); - }); - - t.test('can return null objects', { skip: !Object.create }, function (st) { - var expected = Object.create(null); - expected.a = Object.create(null); - expected.a.b = 'c'; - expected.a.hasOwnProperty = 'd'; - st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected); - st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null)); - var expectedArray = Object.create(null); - expectedArray.a = Object.create(null); - expectedArray.a[0] = 'b'; - expectedArray.a.c = 'd'; - st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray); - st.end(); - }); - - t.test('can parse with custom encoding', function (st) { - st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', { - decoder: function (str) { - var reg = /%([0-9A-F]{2})/ig; - var result = []; - var parts = reg.exec(str); - while (parts) { - result.push(parseInt(parts[1], 16)); - parts = reg.exec(str); - } - return iconv.decode(SaferBuffer.from(result), 'shift_jis').toString(); - } - }), { 県: '大阪府' }); - st.end(); - }); - - t.test('receives the default decoder as a second argument', function (st) { - st.plan(1); - qs.parse('a', { - decoder: function (str, defaultDecoder) { - st.equal(defaultDecoder, utils.decode); - } - }); - st.end(); - }); - - t.test('throws error with wrong decoder', function (st) { - st['throws'](function () { - qs.parse({}, { decoder: 'string' }); - }, new TypeError('Decoder has to be a function.')); - st.end(); - }); - - t.test('does not mutate the options argument', function (st) { - var options = {}; - qs.parse('a[b]=true', options); - st.deepEqual(options, {}); - st.end(); - }); - - t.end(); -}); diff --git a/truebit-implementation/node_modules/qs/test/stringify.js b/truebit-implementation/node_modules/qs/test/stringify.js deleted file mode 100644 index 165ac621..00000000 --- a/truebit-implementation/node_modules/qs/test/stringify.js +++ /dev/null @@ -1,597 +0,0 @@ -'use strict'; - -var test = require('tape'); -var qs = require('../'); -var utils = require('../lib/utils'); -var iconv = require('iconv-lite'); -var SaferBuffer = require('safer-buffer').Buffer; - -test('stringify()', function (t) { - t.test('stringifies a querystring object', function (st) { - st.equal(qs.stringify({ a: 'b' }), 'a=b'); - st.equal(qs.stringify({ a: 1 }), 'a=1'); - st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2'); - st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z'); - st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC'); - st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80'); - st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90'); - st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7'); - st.end(); - }); - - t.test('adds query prefix', function (st) { - st.equal(qs.stringify({ a: 'b' }, { addQueryPrefix: true }), '?a=b'); - st.end(); - }); - - t.test('with query prefix, outputs blank string given an empty object', function (st) { - st.equal(qs.stringify({}, { addQueryPrefix: true }), ''); - st.end(); - }); - - t.test('stringifies a nested object', function (st) { - st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); - st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e'); - st.end(); - }); - - t.test('stringifies a nested object with dots notation', function (st) { - st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c'); - st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e'); - st.end(); - }); - - t.test('stringifies an array value', function (st) { - st.equal( - qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'indices' }), - 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', - 'indices => indices' - ); - st.equal( - qs.stringify({ a: ['b', 'c', 'd'] }, { arrayFormat: 'brackets' }), - 'a%5B%5D=b&a%5B%5D=c&a%5B%5D=d', - 'brackets => brackets' - ); - st.equal( - qs.stringify({ a: ['b', 'c', 'd'] }), - 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d', - 'default => indices' - ); - st.end(); - }); - - t.test('omits nulls when asked', function (st) { - st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b'); - st.end(); - }); - - t.test('omits nested nulls when asked', function (st) { - st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c'); - st.end(); - }); - - t.test('omits array indices when asked', function (st) { - st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d'); - st.end(); - }); - - t.test('stringifies a nested array value', function (st) { - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'indices' }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { arrayFormat: 'brackets' }), 'a%5Bb%5D%5B%5D=c&a%5Bb%5D%5B%5D=d'); - st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d'); - st.end(); - }); - - t.test('stringifies a nested array value with dots notation', function (st) { - st.equal( - qs.stringify( - { a: { b: ['c', 'd'] } }, - { allowDots: true, encode: false, arrayFormat: 'indices' } - ), - 'a.b[0]=c&a.b[1]=d', - 'indices: stringifies with dots + indices' - ); - st.equal( - qs.stringify( - { a: { b: ['c', 'd'] } }, - { allowDots: true, encode: false, arrayFormat: 'brackets' } - ), - 'a.b[]=c&a.b[]=d', - 'brackets: stringifies with dots + brackets' - ); - st.equal( - qs.stringify( - { a: { b: ['c', 'd'] } }, - { allowDots: true, encode: false } - ), - 'a.b[0]=c&a.b[1]=d', - 'default: stringifies with dots + indices' - ); - st.end(); - }); - - t.test('stringifies an object inside an array', function (st) { - st.equal( - qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'indices' }), - 'a%5B0%5D%5Bb%5D=c', - 'indices => brackets' - ); - st.equal( - qs.stringify({ a: [{ b: 'c' }] }, { arrayFormat: 'brackets' }), - 'a%5B%5D%5Bb%5D=c', - 'brackets => brackets' - ); - st.equal( - qs.stringify({ a: [{ b: 'c' }] }), - 'a%5B0%5D%5Bb%5D=c', - 'default => indices' - ); - - st.equal( - qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'indices' }), - 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', - 'indices => indices' - ); - - st.equal( - qs.stringify({ a: [{ b: { c: [1] } }] }, { arrayFormat: 'brackets' }), - 'a%5B%5D%5Bb%5D%5Bc%5D%5B%5D=1', - 'brackets => brackets' - ); - - st.equal( - qs.stringify({ a: [{ b: { c: [1] } }] }), - 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1', - 'default => indices' - ); - - st.end(); - }); - - t.test('stringifies an array with mixed objects and primitives', function (st) { - st.equal( - qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'indices' }), - 'a[0][b]=1&a[1]=2&a[2]=3', - 'indices => indices' - ); - st.equal( - qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false, arrayFormat: 'brackets' }), - 'a[][b]=1&a[]=2&a[]=3', - 'brackets => brackets' - ); - st.equal( - qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), - 'a[0][b]=1&a[1]=2&a[2]=3', - 'default => indices' - ); - - st.end(); - }); - - t.test('stringifies an object inside an array with dots notation', function (st) { - st.equal( - qs.stringify( - { a: [{ b: 'c' }] }, - { allowDots: true, encode: false, arrayFormat: 'indices' } - ), - 'a[0].b=c', - 'indices => indices' - ); - st.equal( - qs.stringify( - { a: [{ b: 'c' }] }, - { allowDots: true, encode: false, arrayFormat: 'brackets' } - ), - 'a[].b=c', - 'brackets => brackets' - ); - st.equal( - qs.stringify( - { a: [{ b: 'c' }] }, - { allowDots: true, encode: false } - ), - 'a[0].b=c', - 'default => indices' - ); - - st.equal( - qs.stringify( - { a: [{ b: { c: [1] } }] }, - { allowDots: true, encode: false, arrayFormat: 'indices' } - ), - 'a[0].b.c[0]=1', - 'indices => indices' - ); - st.equal( - qs.stringify( - { a: [{ b: { c: [1] } }] }, - { allowDots: true, encode: false, arrayFormat: 'brackets' } - ), - 'a[].b.c[]=1', - 'brackets => brackets' - ); - st.equal( - qs.stringify( - { a: [{ b: { c: [1] } }] }, - { allowDots: true, encode: false } - ), - 'a[0].b.c[0]=1', - 'default => indices' - ); - - st.end(); - }); - - t.test('does not omit object keys when indices = false', function (st) { - st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c'); - st.end(); - }); - - t.test('uses indices notation for arrays when indices=true', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c'); - st.end(); - }); - - t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c'); - st.end(); - }); - - t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c'); - st.end(); - }); - - t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c'); - st.end(); - }); - - t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) { - st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c'); - st.end(); - }); - - t.test('stringifies a complicated object', function (st) { - st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e'); - st.end(); - }); - - t.test('stringifies an empty value', function (st) { - st.equal(qs.stringify({ a: '' }), 'a='); - st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a'); - - st.equal(qs.stringify({ a: '', b: '' }), 'a=&b='); - st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b='); - - st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D='); - st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D'); - st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D='); - - st.end(); - }); - - t.test('stringifies a null object', { skip: !Object.create }, function (st) { - var obj = Object.create(null); - obj.a = 'b'; - st.equal(qs.stringify(obj), 'a=b'); - st.end(); - }); - - t.test('returns an empty string for invalid input', function (st) { - st.equal(qs.stringify(undefined), ''); - st.equal(qs.stringify(false), ''); - st.equal(qs.stringify(null), ''); - st.equal(qs.stringify(''), ''); - st.end(); - }); - - t.test('stringifies an object with a null object as a child', { skip: !Object.create }, function (st) { - var obj = { a: Object.create(null) }; - - obj.a.b = 'c'; - st.equal(qs.stringify(obj), 'a%5Bb%5D=c'); - st.end(); - }); - - t.test('drops keys with a value of undefined', function (st) { - st.equal(qs.stringify({ a: undefined }), ''); - - st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D'); - st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D='); - st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D='); - st.end(); - }); - - t.test('url encodes values', function (st) { - st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); - st.end(); - }); - - t.test('stringifies a date', function (st) { - var now = new Date(); - var str = 'a=' + encodeURIComponent(now.toISOString()); - st.equal(qs.stringify({ a: now }), str); - st.end(); - }); - - t.test('stringifies the weird object from qs', function (st) { - st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F'); - st.end(); - }); - - t.test('skips properties that are part of the object prototype', function (st) { - Object.prototype.crash = 'test'; - st.equal(qs.stringify({ a: 'b' }), 'a=b'); - st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c'); - delete Object.prototype.crash; - st.end(); - }); - - t.test('stringifies boolean values', function (st) { - st.equal(qs.stringify({ a: true }), 'a=true'); - st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true'); - st.equal(qs.stringify({ b: false }), 'b=false'); - st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false'); - st.end(); - }); - - t.test('stringifies buffer values', function (st) { - st.equal(qs.stringify({ a: SaferBuffer.from('test') }), 'a=test'); - st.equal(qs.stringify({ a: { b: SaferBuffer.from('test') } }), 'a%5Bb%5D=test'); - st.end(); - }); - - t.test('stringifies an object using an alternative delimiter', function (st) { - st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d'); - st.end(); - }); - - t.test('doesn\'t blow up when Buffer global is missing', function (st) { - var tempBuffer = global.Buffer; - delete global.Buffer; - var result = qs.stringify({ a: 'b', c: 'd' }); - global.Buffer = tempBuffer; - st.equal(result, 'a=b&c=d'); - st.end(); - }); - - t.test('selects properties when filter=array', function (st) { - st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b'); - st.equal(qs.stringify({ a: 1 }, { filter: [] }), ''); - - st.equal( - qs.stringify( - { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, - { filter: ['a', 'b', 0, 2], arrayFormat: 'indices' } - ), - 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', - 'indices => indices' - ); - st.equal( - qs.stringify( - { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, - { filter: ['a', 'b', 0, 2], arrayFormat: 'brackets' } - ), - 'a%5Bb%5D%5B%5D=1&a%5Bb%5D%5B%5D=3', - 'brackets => brackets' - ); - st.equal( - qs.stringify( - { a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, - { filter: ['a', 'b', 0, 2] } - ), - 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3', - 'default => indices' - ); - - st.end(); - }); - - t.test('supports custom representations when filter=function', function (st) { - var calls = 0; - var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } }; - var filterFunc = function (prefix, value) { - calls += 1; - if (calls === 1) { - st.equal(prefix, '', 'prefix is empty'); - st.equal(value, obj); - } else if (prefix === 'c') { - return void 0; - } else if (value instanceof Date) { - st.equal(prefix, 'e[f]'); - return value.getTime(); - } - return value; - }; - - st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000'); - st.equal(calls, 5); - st.end(); - }); - - t.test('can disable uri encoding', function (st) { - st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b'); - st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c'); - st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c'); - st.end(); - }); - - t.test('can sort the keys', function (st) { - var sort = function (a, b) { - return a.localeCompare(b); - }; - st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y'); - st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a'); - st.end(); - }); - - t.test('can sort the keys at depth 3 or more too', function (st) { - var sort = function (a, b) { - return a.localeCompare(b); - }; - st.equal( - qs.stringify( - { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, - { sort: sort, encode: false } - ), - 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb' - ); - st.equal( - qs.stringify( - { a: 'a', z: { zj: { zjb: 'zjb', zja: 'zja' }, zi: { zib: 'zib', zia: 'zia' } }, b: 'b' }, - { sort: null, encode: false } - ), - 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b' - ); - st.end(); - }); - - t.test('can stringify with custom encoding', function (st) { - st.equal(qs.stringify({ 県: '大阪府', '': '' }, { - encoder: function (str) { - if (str.length === 0) { - return ''; - } - var buf = iconv.encode(str, 'shiftjis'); - var result = []; - for (var i = 0; i < buf.length; ++i) { - result.push(buf.readUInt8(i).toString(16)); - } - return '%' + result.join('%'); - } - }), '%8c%a7=%91%e5%8d%e3%95%7b&='); - st.end(); - }); - - t.test('receives the default encoder as a second argument', function (st) { - st.plan(2); - qs.stringify({ a: 1 }, { - encoder: function (str, defaultEncoder) { - st.equal(defaultEncoder, utils.encode); - } - }); - st.end(); - }); - - t.test('throws error with wrong encoder', function (st) { - st['throws'](function () { - qs.stringify({}, { encoder: 'string' }); - }, new TypeError('Encoder has to be a function.')); - st.end(); - }); - - t.test('can use custom encoder for a buffer object', { skip: typeof Buffer === 'undefined' }, function (st) { - st.equal(qs.stringify({ a: SaferBuffer.from([1]) }, { - encoder: function (buffer) { - if (typeof buffer === 'string') { - return buffer; - } - return String.fromCharCode(buffer.readUInt8(0) + 97); - } - }), 'a=b'); - st.end(); - }); - - t.test('serializeDate option', function (st) { - var date = new Date(); - st.equal( - qs.stringify({ a: date }), - 'a=' + date.toISOString().replace(/:/g, '%3A'), - 'default is toISOString' - ); - - var mutatedDate = new Date(); - mutatedDate.toISOString = function () { - throw new SyntaxError(); - }; - st['throws'](function () { - mutatedDate.toISOString(); - }, SyntaxError); - st.equal( - qs.stringify({ a: mutatedDate }), - 'a=' + Date.prototype.toISOString.call(mutatedDate).replace(/:/g, '%3A'), - 'toISOString works even when method is not locally present' - ); - - var specificDate = new Date(6); - st.equal( - qs.stringify( - { a: specificDate }, - { serializeDate: function (d) { return d.getTime() * 7; } } - ), - 'a=42', - 'custom serializeDate function called' - ); - - st.end(); - }); - - t.test('RFC 1738 spaces serialization', function (st) { - st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC1738 }), 'a=b+c'); - st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC1738 }), 'a+b=c+d'); - st.end(); - }); - - t.test('RFC 3986 spaces serialization', function (st) { - st.equal(qs.stringify({ a: 'b c' }, { format: qs.formats.RFC3986 }), 'a=b%20c'); - st.equal(qs.stringify({ 'a b': 'c d' }, { format: qs.formats.RFC3986 }), 'a%20b=c%20d'); - st.end(); - }); - - t.test('Backward compatibility to RFC 3986', function (st) { - st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c'); - st.end(); - }); - - t.test('Edge cases and unknown formats', function (st) { - ['UFO1234', false, 1234, null, {}, []].forEach( - function (format) { - st['throws']( - function () { - qs.stringify({ a: 'b c' }, { format: format }); - }, - new TypeError('Unknown format option provided.') - ); - } - ); - st.end(); - }); - - t.test('encodeValuesOnly', function (st) { - st.equal( - qs.stringify( - { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, - { encodeValuesOnly: true } - ), - 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' - ); - st.equal( - qs.stringify( - { a: 'b', c: ['d', 'e'], f: [['g'], ['h']] } - ), - 'a=b&c%5B0%5D=d&c%5B1%5D=e&f%5B0%5D%5B0%5D=g&f%5B1%5D%5B0%5D=h' - ); - st.end(); - }); - - t.test('encodeValuesOnly - strictNullHandling', function (st) { - st.equal( - qs.stringify( - { a: { b: null } }, - { encodeValuesOnly: true, strictNullHandling: true } - ), - 'a[b]' - ); - st.end(); - }); - - t.test('does not mutate the options argument', function (st) { - var options = {}; - qs.stringify({}, options); - st.deepEqual(options, {}); - st.end(); - }); - - t.end(); -}); diff --git a/truebit-implementation/node_modules/qs/test/utils.js b/truebit-implementation/node_modules/qs/test/utils.js deleted file mode 100644 index eff4011a..00000000 --- a/truebit-implementation/node_modules/qs/test/utils.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -var test = require('tape'); -var utils = require('../lib/utils'); - -test('merge()', function (t) { - t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key'); - - var oneMerged = utils.merge({ foo: 'bar' }, { foo: { first: '123' } }); - t.deepEqual(oneMerged, { foo: ['bar', { first: '123' }] }, 'merges a standalone and an object into an array'); - - var twoMerged = utils.merge({ foo: ['bar', { first: '123' }] }, { foo: { second: '456' } }); - t.deepEqual(twoMerged, { foo: { 0: 'bar', 1: { first: '123' }, second: '456' } }, 'merges a standalone and two objects into an array'); - - var sandwiched = utils.merge({ foo: ['bar', { first: '123', second: '456' }] }, { foo: 'baz' }); - t.deepEqual(sandwiched, { foo: ['bar', { first: '123', second: '456' }, 'baz'] }, 'merges an object sandwiched by two standalones into an array'); - - var nestedArrays = utils.merge({ foo: ['baz'] }, { foo: ['bar', 'xyzzy'] }); - t.deepEqual(nestedArrays, { foo: ['baz', 'bar', 'xyzzy'] }); - - t.end(); -}); - -test('assign()', function (t) { - var target = { a: 1, b: 2 }; - var source = { b: 3, c: 4 }; - var result = utils.assign(target, source); - - t.equal(result, target, 'returns the target'); - t.deepEqual(target, { a: 1, b: 3, c: 4 }, 'target and source are merged'); - t.deepEqual(source, { b: 3, c: 4 }, 'source is untouched'); - - t.end(); -}); diff --git a/truebit-implementation/node_modules/query-string/index.js b/truebit-implementation/node_modules/query-string/index.js deleted file mode 100644 index 10f156a4..00000000 --- a/truebit-implementation/node_modules/query-string/index.js +++ /dev/null @@ -1,224 +0,0 @@ -'use strict'; -var strictUriEncode = require('strict-uri-encode'); -var objectAssign = require('object-assign'); -var decodeComponent = require('decode-uri-component'); - -function encoderForArrayFormat(opts) { - switch (opts.arrayFormat) { - case 'index': - return function (key, value, index) { - return value === null ? [ - encode(key, opts), - '[', - index, - ']' - ].join('') : [ - encode(key, opts), - '[', - encode(index, opts), - ']=', - encode(value, opts) - ].join(''); - }; - - case 'bracket': - return function (key, value) { - return value === null ? encode(key, opts) : [ - encode(key, opts), - '[]=', - encode(value, opts) - ].join(''); - }; - - default: - return function (key, value) { - return value === null ? encode(key, opts) : [ - encode(key, opts), - '=', - encode(value, opts) - ].join(''); - }; - } -} - -function parserForArrayFormat(opts) { - var result; - - switch (opts.arrayFormat) { - case 'index': - return function (key, value, accumulator) { - result = /\[(\d*)\]$/.exec(key); - - key = key.replace(/\[\d*\]$/, ''); - - if (!result) { - accumulator[key] = value; - return; - } - - if (accumulator[key] === undefined) { - accumulator[key] = {}; - } - - accumulator[key][result[1]] = value; - }; - - case 'bracket': - return function (key, value, accumulator) { - result = /(\[\])$/.exec(key); - key = key.replace(/\[\]$/, ''); - - if (!result) { - accumulator[key] = value; - return; - } else if (accumulator[key] === undefined) { - accumulator[key] = [value]; - return; - } - - accumulator[key] = [].concat(accumulator[key], value); - }; - - default: - return function (key, value, accumulator) { - if (accumulator[key] === undefined) { - accumulator[key] = value; - return; - } - - accumulator[key] = [].concat(accumulator[key], value); - }; - } -} - -function encode(value, opts) { - if (opts.encode) { - return opts.strict ? strictUriEncode(value) : encodeURIComponent(value); - } - - return value; -} - -function keysSorter(input) { - if (Array.isArray(input)) { - return input.sort(); - } else if (typeof input === 'object') { - return keysSorter(Object.keys(input)).sort(function (a, b) { - return Number(a) - Number(b); - }).map(function (key) { - return input[key]; - }); - } - - return input; -} - -function extract(str) { - var queryStart = str.indexOf('?'); - if (queryStart === -1) { - return ''; - } - return str.slice(queryStart + 1); -} - -function parse(str, opts) { - opts = objectAssign({arrayFormat: 'none'}, opts); - - var formatter = parserForArrayFormat(opts); - - // Create an object with no prototype - // https://github.com/sindresorhus/query-string/issues/47 - var ret = Object.create(null); - - if (typeof str !== 'string') { - return ret; - } - - str = str.trim().replace(/^[?#&]/, ''); - - if (!str) { - return ret; - } - - str.split('&').forEach(function (param) { - var parts = param.replace(/\+/g, ' ').split('='); - // Firefox (pre 40) decodes `%3D` to `=` - // https://github.com/sindresorhus/query-string/pull/37 - var key = parts.shift(); - var val = parts.length > 0 ? parts.join('=') : undefined; - - // missing `=` should be `null`: - // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters - val = val === undefined ? null : decodeComponent(val); - - formatter(decodeComponent(key), val, ret); - }); - - return Object.keys(ret).sort().reduce(function (result, key) { - var val = ret[key]; - if (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) { - // Sort object keys, not values - result[key] = keysSorter(val); - } else { - result[key] = val; - } - - return result; - }, Object.create(null)); -} - -exports.extract = extract; -exports.parse = parse; - -exports.stringify = function (obj, opts) { - var defaults = { - encode: true, - strict: true, - arrayFormat: 'none' - }; - - opts = objectAssign(defaults, opts); - - if (opts.sort === false) { - opts.sort = function () {}; - } - - var formatter = encoderForArrayFormat(opts); - - return obj ? Object.keys(obj).sort(opts.sort).map(function (key) { - var val = obj[key]; - - if (val === undefined) { - return ''; - } - - if (val === null) { - return encode(key, opts); - } - - if (Array.isArray(val)) { - var result = []; - - val.slice().forEach(function (val2) { - if (val2 === undefined) { - return; - } - - result.push(formatter(key, val2, result.length)); - }); - - return result.join('&'); - } - - return encode(key, opts) + '=' + encode(val, opts); - }).filter(function (x) { - return x.length > 0; - }).join('&') : ''; -}; - -exports.parseUrl = function (str, opts) { - return { - url: str.split('?')[0] || '', - query: parse(extract(str), opts) - }; -}; diff --git a/truebit-implementation/node_modules/query-string/license b/truebit-implementation/node_modules/query-string/license deleted file mode 100644 index e7af2f77..00000000 --- a/truebit-implementation/node_modules/query-string/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/query-string/package.json b/truebit-implementation/node_modules/query-string/package.json deleted file mode 100644 index c6b4ddcc..00000000 --- a/truebit-implementation/node_modules/query-string/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "query-string@^5.0.1", - "_id": "query-string@5.1.1", - "_inBundle": false, - "_integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "_location": "/query-string", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "query-string@^5.0.1", - "name": "query-string", - "escapedName": "query-string", - "rawSpec": "^5.0.1", - "saveSpec": null, - "fetchSpec": "^5.0.1" - }, - "_requiredBy": [ - "/xhr-request" - ], - "_resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "_shasum": "a78c012b71c17e05f2e3fa2319dd330682efb3cb", - "_spec": "query-string@^5.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/xhr-request", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/query-string/issues" - }, - "bundleDependencies": false, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "deprecated": false, - "description": "Parse and stringify URL query strings", - "devDependencies": { - "ava": "^0.17.0", - "xo": "^0.16.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/query-string#readme", - "keywords": [ - "browser", - "querystring", - "query", - "string", - "qs", - "param", - "parameter", - "url", - "uri", - "parse", - "stringify", - "encode", - "decode" - ], - "license": "MIT", - "name": "query-string", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/query-string.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "5.1.1" -} diff --git a/truebit-implementation/node_modules/query-string/readme.md b/truebit-implementation/node_modules/query-string/readme.md deleted file mode 100644 index c9273eae..00000000 --- a/truebit-implementation/node_modules/query-string/readme.md +++ /dev/null @@ -1,224 +0,0 @@ -# query-string [![Build Status](https://travis-ci.org/sindresorhus/query-string.svg?branch=master)](https://travis-ci.org/sindresorhus/query-string) - -> Parse and stringify URL [query strings](https://en.wikipedia.org/wiki/Query_string) - ---- - -

🔥 Want to strengthen your core JavaScript skills and master ES6?
I would personally recommend this awesome ES6 course by Wes Bos.
Also check out his Node.js, React, Sublime courses.

- ---- - - -## Install - -``` -$ npm install query-string -``` - - - - - - -## Usage - -```js -const queryString = require('query-string'); - -console.log(location.search); -//=> '?foo=bar' - -const parsed = queryString.parse(location.search); -console.log(parsed); -//=> {foo: 'bar'} - -console.log(location.hash); -//=> '#token=bada55cafe' - -const parsedHash = queryString.parse(location.hash); -console.log(parsedHash); -//=> {token: 'bada55cafe'} - -parsed.foo = 'unicorn'; -parsed.ilike = 'pizza'; - -const stringified = queryString.stringify(parsed); -//=> 'foo=unicorn&ilike=pizza' - -location.search = stringified; -// note that `location.search` automatically prepends a question mark -console.log(location.search); -//=> '?foo=unicorn&ilike=pizza' -``` - - -## API - -### .parse(*string*, *[options]*) - -Parse a query string into an object. Leading `?` or `#` are ignored, so you can pass `location.search` or `location.hash` directly. - -The returned object is created with [`Object.create(null)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) and thus does not have a `prototype`. - -URI components are decoded with [`decode-uri-component`](https://github.com/SamVerschueren/decode-uri-component). - -#### arrayFormat - -Type: `string`
-Default: `'none'` - -Supports both `index` for an indexed array representation or `bracket` for a *bracketed* array representation. - -- `bracket`: stands for parsing correctly arrays with bracket representation on the query string, such as: - -```js -queryString.parse('foo[]=1&foo[]=2&foo[]=3', {arrayFormat: 'bracket'}); -//=> foo: [1,2,3] -``` - -- `index`: stands for parsing taking the index into account, such as: - -```js -queryString.parse('foo[0]=1&foo[1]=2&foo[3]=3', {arrayFormat: 'index'}); -//=> foo: [1,2,3] -``` - -- `none`: is the **default** option and removes any bracket representation, such as: - -```js -queryString.parse('foo=1&foo=2&foo=3'); -//=> foo: [1,2,3] -``` - -### .stringify(*object*, *[options]*) - -Stringify an object into a query string, sorting the keys. - -#### strict - -Type: `boolean`
-Default: `true` - -Strictly encode URI components with [strict-uri-encode](https://github.com/kevva/strict-uri-encode). It uses [encodeURIComponent](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) -if set to false. You probably [don't care](https://github.com/sindresorhus/query-string/issues/42) about this option. - -#### encode - -Type: `boolean`
-Default: `true` - -[URL encode](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) the keys and values. - -#### arrayFormat - -Type: `string`
-Default: `'none'` - -Supports both `index` for an indexed array representation or `bracket` for a *bracketed* array representation. - -- `bracket`: stands for parsing correctly arrays with bracket representation on the query string, such as: - -```js -queryString.stringify({foo: [1,2,3]}, {arrayFormat: 'bracket'}); -// => foo[]=1&foo[]=2&foo[]=3 -``` - -- `index`: stands for parsing taking the index into account, such as: - -```js -queryString.stringify({foo: [1,2,3]}, {arrayFormat: 'index'}); -// => foo[0]=1&foo[1]=2&foo[3]=3 -``` - -- `none`: is the __default__ option and removes any bracket representation, such as: - -```js -queryString.stringify({foo: [1,2,3]}); -// => foo=1&foo=2&foo=3 -``` - -#### sort - -Type: `Function` `boolean` - -Supports both `Function` as a custom sorting function or `false` to disable sorting. - -```js -const order = ['c', 'a', 'b']; -queryString.stringify({ a: 1, b: 2, c: 3}, { - sort: (m, n) => order.indexOf(m) >= order.indexOf(n) -}); -// => 'c=3&a=1&b=2' -``` - -```js -queryString.stringify({ b: 1, c: 2, a: 3}, {sort: false}); -// => 'c=3&a=1&b=2' -``` - -If omitted, keys are sorted using `Array#sort`, which means, converting them to strings and comparing strings in Unicode code point order. - -### .extract(*string*) - -Extract a query string from a URL that can be passed into `.parse()`. - -### .parseUrl(*string*, *[options]*) - -Extract the URL and the query string as an object. - -The `options` are the same as for `.parse()`. - -Returns an object with a `url` and `query` property. - -```js -queryString.parseUrl('https://foo.bar?foo=bar'); -//=> {url: 'https://foo.bar', query: {foo: 'bar'}} -``` - - -## Nesting - -This module intentionally doesn't support nesting as it's not spec'd and varies between implementations, which causes a lot of [edge cases](https://github.com/visionmedia/node-querystring/issues). - -You're much better off just converting the object to a JSON string: - -```js -queryString.stringify({ - foo: 'bar', - nested: JSON.stringify({ - unicorn: 'cake' - }) -}); -//=> 'foo=bar&nested=%7B%22unicorn%22%3A%22cake%22%7D' -``` - -However, there is support for multiple instances of the same key: - -```js -queryString.parse('likes=cake&name=bob&likes=icecream'); -//=> {likes: ['cake', 'icecream'], name: 'bob'} - -queryString.stringify({color: ['taupe', 'chartreuse'], id: '515'}); -//=> 'color=chartreuse&color=taupe&id=515' -``` - - -## Falsy values - -Sometimes you want to unset a key, or maybe just make it present without assigning a value to it. Here is how falsy values are stringified: - -```js -queryString.stringify({foo: false}); -//=> 'foo=false' - -queryString.stringify({foo: null}); -//=> 'foo' - -queryString.stringify({foo: undefined}); -//=> '' -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/truebit-implementation/node_modules/randombytes/.travis.yml b/truebit-implementation/node_modules/randombytes/.travis.yml deleted file mode 100644 index 69fdf713..00000000 --- a/truebit-implementation/node_modules/randombytes/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -matrix: - include: - - node_js: '7' - env: TEST_SUITE=test - - node_js: '6' - env: TEST_SUITE=test - - node_js: '5' - env: TEST_SUITE=test - - node_js: '4' - env: TEST_SUITE=test - - node_js: '4' - env: TEST_SUITE=phantom -script: "npm run-script $TEST_SUITE" diff --git a/truebit-implementation/node_modules/randombytes/.zuul.yml b/truebit-implementation/node_modules/randombytes/.zuul.yml deleted file mode 100644 index 96d9cfbd..00000000 --- a/truebit-implementation/node_modules/randombytes/.zuul.yml +++ /dev/null @@ -1 +0,0 @@ -ui: tape diff --git a/truebit-implementation/node_modules/randombytes/LICENSE b/truebit-implementation/node_modules/randombytes/LICENSE deleted file mode 100644 index fea9d48a..00000000 --- a/truebit-implementation/node_modules/randombytes/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 crypto-browserify - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/randombytes/README.md b/truebit-implementation/node_modules/randombytes/README.md deleted file mode 100644 index 3bacba4d..00000000 --- a/truebit-implementation/node_modules/randombytes/README.md +++ /dev/null @@ -1,14 +0,0 @@ -randombytes -=== - -[![Version](http://img.shields.io/npm/v/randombytes.svg)](https://www.npmjs.org/package/randombytes) [![Build Status](https://travis-ci.org/crypto-browserify/randombytes.svg?branch=master)](https://travis-ci.org/crypto-browserify/randombytes) - -randombytes from node that works in the browser. In node you just get crypto.randomBytes, but in the browser it uses .crypto/msCrypto.getRandomValues - -```js -var randomBytes = require('randombytes'); -randomBytes(16);//get 16 random bytes -randomBytes(16, function (err, resp) { - // resp is 16 random bytes -}); -``` diff --git a/truebit-implementation/node_modules/randombytes/browser.js b/truebit-implementation/node_modules/randombytes/browser.js deleted file mode 100644 index 58990c55..00000000 --- a/truebit-implementation/node_modules/randombytes/browser.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict' - -function oldBrowser () { - throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') -} - -var Buffer = require('safe-buffer').Buffer -var crypto = global.crypto || global.msCrypto - -if (crypto && crypto.getRandomValues) { - module.exports = randomBytes -} else { - module.exports = oldBrowser -} - -function randomBytes (size, cb) { - // phantomjs needs to throw - if (size > 65536) throw new Error('requested too many random bytes') - // in case browserify isn't using the Uint8Array version - var rawBytes = new global.Uint8Array(size) - - // This will not work in older browsers. - // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues - if (size > 0) { // getRandomValues fails on IE if size == 0 - crypto.getRandomValues(rawBytes) - } - - // XXX: phantomjs doesn't like a buffer being passed here - var bytes = Buffer.from(rawBytes.buffer) - - if (typeof cb === 'function') { - return process.nextTick(function () { - cb(null, bytes) - }) - } - - return bytes -} diff --git a/truebit-implementation/node_modules/randombytes/index.js b/truebit-implementation/node_modules/randombytes/index.js deleted file mode 100644 index a2d9e391..00000000 --- a/truebit-implementation/node_modules/randombytes/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('crypto').randomBytes diff --git a/truebit-implementation/node_modules/randombytes/package.json b/truebit-implementation/node_modules/randombytes/package.json deleted file mode 100644 index 164e06a8..00000000 --- a/truebit-implementation/node_modules/randombytes/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "_from": "randombytes@^2.0.0", - "_id": "randombytes@2.0.6", - "_inBundle": false, - "_integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "_location": "/randombytes", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "randombytes@^2.0.0", - "name": "randombytes", - "escapedName": "randombytes", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/browserify-rsa", - "/crypto-browserify", - "/diffie-hellman", - "/public-encrypt", - "/randomfill" - ], - "_resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "_shasum": "d302c522948588848a8d300c932b44c24231da80", - "_spec": "randombytes@^2.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": "", - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/randombytes/issues" - }, - "bundleDependencies": false, - "dependencies": { - "safe-buffer": "^5.1.0" - }, - "deprecated": false, - "description": "random bytes from browserify stand alone", - "devDependencies": { - "phantomjs": "^1.9.9", - "standard": "^10.0.2", - "tap-spec": "^2.1.2", - "tape": "^4.6.3", - "zuul": "^3.7.2" - }, - "homepage": "https://github.com/crypto-browserify/randombytes", - "keywords": [ - "crypto", - "random" - ], - "license": "MIT", - "main": "index.js", - "name": "randombytes", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/crypto-browserify/randombytes.git" - }, - "scripts": { - "local": "zuul --local --no-coverage -- test.js", - "phantom": "zuul --phantom -- test.js", - "test": "standard && node test.js | tspec" - }, - "version": "2.0.6" -} diff --git a/truebit-implementation/node_modules/randombytes/test.js b/truebit-implementation/node_modules/randombytes/test.js deleted file mode 100644 index 8e34dcaa..00000000 --- a/truebit-implementation/node_modules/randombytes/test.js +++ /dev/null @@ -1,56 +0,0 @@ -var test = require('tape') -var randomBytes = require('./') - -test('sync', function (t) { - t.plan(4) - t.equals(randomBytes(0).length, 0, 'len: ' + 0) - t.equals(randomBytes(3).length, 3, 'len: ' + 3) - t.equals(randomBytes(30).length, 30, 'len: ' + 30) - t.equals(randomBytes(300).length, 300, 'len: ' + 300) -}) - -test('async', function (t) { - t.plan(4) - - randomBytes(0, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 0, 'len: ' + 0) - }) - - randomBytes(3, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 3, 'len: ' + 3) - }) - - randomBytes(30, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 30, 'len: ' + 30) - }) - - randomBytes(300, function (err, resp) { - if (err) throw err - - t.equals(resp.length, 300, 'len: ' + 300) - }) -}) - -if (process.browser) { - test('requesting to much throws', function (t) { - t.plan(1) - t.throws(function () { - randomBytes(65537) - }) - }) - - test('requesting to much throws async', function (t) { - t.plan(1) - t.throws(function () { - randomBytes(65537, function () { - t.ok(false, 'should not get here') - }) - }) - }) -} diff --git a/truebit-implementation/node_modules/randomfill/.travis.yml b/truebit-implementation/node_modules/randomfill/.travis.yml deleted file mode 100644 index 69fdf713..00000000 --- a/truebit-implementation/node_modules/randomfill/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -matrix: - include: - - node_js: '7' - env: TEST_SUITE=test - - node_js: '6' - env: TEST_SUITE=test - - node_js: '5' - env: TEST_SUITE=test - - node_js: '4' - env: TEST_SUITE=test - - node_js: '4' - env: TEST_SUITE=phantom -script: "npm run-script $TEST_SUITE" diff --git a/truebit-implementation/node_modules/randomfill/.zuul.yml b/truebit-implementation/node_modules/randomfill/.zuul.yml deleted file mode 100644 index 96d9cfbd..00000000 --- a/truebit-implementation/node_modules/randomfill/.zuul.yml +++ /dev/null @@ -1 +0,0 @@ -ui: tape diff --git a/truebit-implementation/node_modules/randomfill/LICENSE b/truebit-implementation/node_modules/randomfill/LICENSE deleted file mode 100644 index fea9d48a..00000000 --- a/truebit-implementation/node_modules/randomfill/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 crypto-browserify - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/randomfill/README.md b/truebit-implementation/node_modules/randomfill/README.md deleted file mode 100644 index 1ae13adf..00000000 --- a/truebit-implementation/node_modules/randomfill/README.md +++ /dev/null @@ -1,15 +0,0 @@ -randomfill -=== - -[![Version](http://img.shields.io/npm/v/randomfill.svg)](https://www.npmjs.org/package/randomfill) - -randomfill from node that works in the browser. In node you just get crypto.randomBytes, but in the browser it uses .crypto/msCrypto.getRandomValues - -```js -var randomFill = require('randomfill'); -var buf -randomFill.randomFillSync(16);//get 16 random bytes -randomFill.randomFill(16, function (err, resp) { - // resp is 16 random bytes -}); -``` diff --git a/truebit-implementation/node_modules/randomfill/browser.js b/truebit-implementation/node_modules/randomfill/browser.js deleted file mode 100644 index ce34a693..00000000 --- a/truebit-implementation/node_modules/randomfill/browser.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict' - -function oldBrowser () { - throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') -} -var safeBuffer = require('safe-buffer') -var randombytes = require('randombytes') -var Buffer = safeBuffer.Buffer -var kBufferMaxLength = safeBuffer.kMaxLength -var crypto = global.crypto || global.msCrypto -var kMaxUint32 = Math.pow(2, 32) - 1 -function assertOffset (offset, length) { - if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare - throw new TypeError('offset must be a number') - } - - if (offset > kMaxUint32 || offset < 0) { - throw new TypeError('offset must be a uint32') - } - - if (offset > kBufferMaxLength || offset > length) { - throw new RangeError('offset out of range') - } -} - -function assertSize (size, offset, length) { - if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare - throw new TypeError('size must be a number') - } - - if (size > kMaxUint32 || size < 0) { - throw new TypeError('size must be a uint32') - } - - if (size + offset > length || size > kBufferMaxLength) { - throw new RangeError('buffer too small') - } -} -if ((crypto && crypto.getRandomValues) || !process.browser) { - exports.randomFill = randomFill - exports.randomFillSync = randomFillSync -} else { - exports.randomFill = oldBrowser - exports.randomFillSync = oldBrowser -} -function randomFill (buf, offset, size, cb) { - if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { - throw new TypeError('"buf" argument must be a Buffer or Uint8Array') - } - - if (typeof offset === 'function') { - cb = offset - offset = 0 - size = buf.length - } else if (typeof size === 'function') { - cb = size - size = buf.length - offset - } else if (typeof cb !== 'function') { - throw new TypeError('"cb" argument must be a function') - } - assertOffset(offset, buf.length) - assertSize(size, offset, buf.length) - return actualFill(buf, offset, size, cb) -} - -function actualFill (buf, offset, size, cb) { - if (process.browser) { - var ourBuf = buf.buffer - var uint = new Uint8Array(ourBuf, offset, size) - crypto.getRandomValues(uint) - if (cb) { - process.nextTick(function () { - cb(null, buf) - }) - return - } - return buf - } - if (cb) { - randombytes(size, function (err, bytes) { - if (err) { - return cb(err) - } - bytes.copy(buf, offset) - cb(null, buf) - }) - return - } - var bytes = randombytes(size) - bytes.copy(buf, offset) - return buf -} -function randomFillSync (buf, offset, size) { - if (typeof offset === 'undefined') { - offset = 0 - } - if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { - throw new TypeError('"buf" argument must be a Buffer or Uint8Array') - } - - assertOffset(offset, buf.length) - - if (size === undefined) size = buf.length - offset - - assertSize(size, offset, buf.length) - - return actualFill(buf, offset, size) -} diff --git a/truebit-implementation/node_modules/randomfill/index.js b/truebit-implementation/node_modules/randomfill/index.js deleted file mode 100644 index e2b5f7a7..00000000 --- a/truebit-implementation/node_modules/randomfill/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var crypto = require('crypto') -if (typeof crypto.randomFill === 'function' && typeof crypto.randomFillSync === 'function') { - exports.randomFill = crypto.randomFill - exports.randomFillSync = crypto.randomFillSync -} else { - module.exports = require('./browser') -} diff --git a/truebit-implementation/node_modules/randomfill/package.json b/truebit-implementation/node_modules/randomfill/package.json deleted file mode 100644 index 10bc9bf8..00000000 --- a/truebit-implementation/node_modules/randomfill/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "randomfill@^1.0.3", - "_id": "randomfill@1.0.4", - "_inBundle": false, - "_integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "_location": "/randomfill", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "randomfill@^1.0.3", - "name": "randomfill", - "escapedName": "randomfill", - "rawSpec": "^1.0.3", - "saveSpec": null, - "fetchSpec": "^1.0.3" - }, - "_requiredBy": [ - "/crypto-browserify" - ], - "_resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "_shasum": "c92196fc86ab42be983f1bf31778224931d61458", - "_spec": "randomfill@^1.0.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/crypto-browserify", - "author": "", - "browser": "browser.js", - "bugs": { - "url": "https://github.com/crypto-browserify/randomfill/issues" - }, - "bundleDependencies": false, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - }, - "deprecated": false, - "description": "random fill from browserify stand alone", - "devDependencies": { - "phantomjs": "^1.9.9", - "standard": "^10.0.2", - "tap-spec": "^2.1.2", - "tape": "^4.6.3", - "zuul": "^3.7.2" - }, - "homepage": "https://github.com/crypto-browserify/randomfill", - "keywords": [ - "crypto", - "random" - ], - "license": "MIT", - "main": "index.js", - "name": "randomfill", - "repository": { - "type": "git", - "url": "git+https://github.com/crypto-browserify/randomfill.git" - }, - "scripts": { - "local": "zuul --local --no-coverage -- test.js", - "phantom": "zuul --phantom -- test.js", - "test": "standard && node test.js | tspec" - }, - "version": "1.0.4" -} diff --git a/truebit-implementation/node_modules/randomfill/test.js b/truebit-implementation/node_modules/randomfill/test.js deleted file mode 100644 index eff227c2..00000000 --- a/truebit-implementation/node_modules/randomfill/test.js +++ /dev/null @@ -1,28 +0,0 @@ -var test = require('tape') -var crypto = require('./browser') -var Buffer = require('safe-buffer').Buffer -test('sync', function (t) { - t.test('first', function (t) { - const buf = Buffer.alloc(10) - const before = buf.toString('hex') - crypto.randomFillSync(buf, 5, 5) - const after = buf.toString('hex') - t.notEqual(before, after) - t.equal(before.slice(0, 10), after.slice(0, 10)) - t.end() - }) -}) -test('async', function (t) { - t.test('first', function (t) { - const buf = Buffer.alloc(10) - const before = buf.toString('hex') - crypto.randomFill(buf, 5, 5, function (err, bufa) { - t.error(err) - const after = bufa.toString('hex') - t.notEqual(before, after) - t.equal(before.slice(0, 10), after.slice(0, 10)) - t.ok(buf === bufa, 'same buffer') - t.end() - }) - }) -}) diff --git a/truebit-implementation/node_modules/randomhex/README.md b/truebit-implementation/node_modules/randomhex/README.md deleted file mode 100644 index cc65707c..00000000 --- a/truebit-implementation/node_modules/randomhex/README.md +++ /dev/null @@ -1,26 +0,0 @@ -randomHex -=== - -Will create a random bytes HEX string, in node.js and browsers with crypto. - -This library uses the [crypto.randomBytes()](https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback) in node.js, -and [crypto.getRandomValues()](https://developer.mozilla.org/en/docs/Web/API/RandomSource/getRandomValues) in the browser. - -Both of those random generators should provide cryptographically strong pseudo-random data. - -``` -$ npm install randomhex -``` - - - -```js -var randomHex = require('randomhex'); - -randomHex(16); // get 16 random bytes as HEX string (0x + 32 chars) -> "0xd59e72dbf8612798aa1674834c80894e" - -randomHex(32, console.log); // get 32 random bytes as HEX string (0x + 64 chars) -> null "0x409de75fc727d81a7d9f59580130ce3e76124679eb5c4647eb18c40512450c29" - -``` diff --git a/truebit-implementation/node_modules/randomhex/package.json b/truebit-implementation/node_modules/randomhex/package.json deleted file mode 100644 index d870cf89..00000000 --- a/truebit-implementation/node_modules/randomhex/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "_from": "randomhex@0.1.5", - "_id": "randomhex@0.1.5", - "_inBundle": false, - "_integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=", - "_location": "/randomhex", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "randomhex@0.1.5", - "name": "randomhex", - "escapedName": "randomhex", - "rawSpec": "0.1.5", - "saveSpec": null, - "fetchSpec": "0.1.5" - }, - "_requiredBy": [ - "/web3-utils" - ], - "_resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "_shasum": "baceef982329091400f2a2912c6cd02f1094f585", - "_spec": "randomhex@0.1.5", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-utils", - "browser": { - "crypto": "./src/browser.js" - }, - "bugs": { - "url": "https://github.com/frozeman/randomHex/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Will generate a random HEX string of a specifc byte size.", - "devDependencies": { - "chai": "^3.0.0" - }, - "homepage": "https://github.com/frozeman/randomHex#readme", - "license": "MIT", - "main": "src/index.js", - "name": "randomhex", - "repository": { - "type": "git", - "url": "git+https://github.com/frozeman/randomHex.git" - }, - "scripts": { - "test": "mocha test.js" - }, - "version": "0.1.5" -} diff --git a/truebit-implementation/node_modules/randomhex/src/browser.js b/truebit-implementation/node_modules/randomhex/src/browser.js deleted file mode 100644 index 6dd9caae..00000000 --- a/truebit-implementation/node_modules/randomhex/src/browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = window.crypto; \ No newline at end of file diff --git a/truebit-implementation/node_modules/randomhex/src/crypto.js b/truebit-implementation/node_modules/randomhex/src/crypto.js deleted file mode 100644 index c11b2595..00000000 --- a/truebit-implementation/node_modules/randomhex/src/crypto.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('crypto'); \ No newline at end of file diff --git a/truebit-implementation/node_modules/randomhex/src/index.js b/truebit-implementation/node_modules/randomhex/src/index.js deleted file mode 100644 index fc2e8d55..00000000 --- a/truebit-implementation/node_modules/randomhex/src/index.js +++ /dev/null @@ -1,64 +0,0 @@ -var randomHex = function(size, callback) { - var crypto = require('./crypto.js'); - var isCallback = (typeof callback === 'function'); - - - if (size > 65536) { - if(isCallback) { - callback(new Error('Requested too many random bytes.')); - } else { - throw new Error('Requested too many random bytes.'); - } - }; - - - // is node - if (typeof crypto !== 'undefined' && crypto.randomBytes) { - - if(isCallback) { - crypto.randomBytes(size, function(err, result){ - if(!err) { - callback(null, '0x'+ result.toString('hex')); - } else { - callback(error); - } - }) - } else { - return '0x'+ crypto.randomBytes(size).toString('hex'); - } - - // is browser - } else { - var cryptoLib; - - if (typeof crypto !== 'undefined') { - cryptoLib = crypto; - } else if(typeof msCrypto !== 'undefined') { - cryptoLib = msCrypto; - } - - if (cryptoLib && cryptoLib.getRandomValues) { - var randomBytes = cryptoLib.getRandomValues(new Uint8Array(size)); - var returnValue = '0x'+ Array.from(randomBytes).map(function(arr){ return arr.toString(16); }).join(''); - - if(isCallback) { - callback(null, returnValue); - } else { - return returnValue; - } - - // not crypto object - } else { - var error = new Error('No "crypto" object available. This Browser doesn\'t support generating secure random bytes.'); - - if(isCallback) { - callback(error); - } else { - throw error; - } - } - } -}; - - -module.exports = randomHex; diff --git a/truebit-implementation/node_modules/randomhex/test.js b/truebit-implementation/node_modules/randomhex/test.js deleted file mode 100644 index fc48d992..00000000 --- a/truebit-implementation/node_modules/randomhex/test.js +++ /dev/null @@ -1,69 +0,0 @@ -var chai = require('chai'); -var assert = chai.assert; -var randomHex = require('./src/index.js'); - - -describe('randomHex', function () { - it('should generate random bytes with a specific length sync', function () { - - assert.equal(randomHex(0).length, 2 + 0) - assert.equal(randomHex(3).length, 2 + 6) - assert.equal(randomHex(30).length, 2 + 60) - assert.equal(randomHex(300).length, 2 + 600) - assert.isTrue(/^0x[a-f0-9]+$/.test(randomHex(300))); - }); - - it('should generate random bytes with a specific length async', function (done) { - - randomHex(0, function (err, resp) { - if (err) throw err - - assert.equal(resp.length, 2 + 0); - done(); - }) - }); - it('should generate random bytes with a specific length async', function (done) { - - randomHex(3, function (err, resp) { - if (err) throw err - - assert.equal(resp.length, 2 + 6); - done(); - }) - }); - it('should generate random bytes with a specific length async', function (done) { - - randomHex(30, function (err, resp) { - if (err) throw err - - assert.equal(resp.length, 2 + 60); - assert.isTrue(/^0x[a-f0-9]+$/.test(resp)); - done(); - }) - }); - it('should generate random bytes with a specific length async', function (done) { - - randomHex(300, function (err, resp) { - if (err) throw err - - assert.equal(resp.length, 2 + 600); - done(); - }) - }); - - - it('requesting to much throws sync', function () { - assert.throws(randomHex.bind(null, 65537)); - }); - - it('requesting to much throws async', function (done) { - - randomHex(65537, function (err, res) { - - assert.isTrue(err instanceof Error); - done(); - }) - - }); -}); - diff --git a/truebit-implementation/node_modules/range-parser/HISTORY.md b/truebit-implementation/node_modules/range-parser/HISTORY.md deleted file mode 100644 index 5e01eef4..00000000 --- a/truebit-implementation/node_modules/range-parser/HISTORY.md +++ /dev/null @@ -1,51 +0,0 @@ -1.2.0 / 2016-06-01 -================== - - * Add `combine` option to combine overlapping ranges - -1.1.0 / 2016-05-13 -================== - - * Fix incorrectly returning -1 when there is at least one valid range - * perf: remove internal function - -1.0.3 / 2015-10-29 -================== - - * perf: enable strict mode - -1.0.2 / 2014-09-08 -================== - - * Support Node.js 0.6 - -1.0.1 / 2014-09-07 -================== - - * Move repository to jshttp - -1.0.0 / 2013-12-11 -================== - - * Add repository to package.json - * Add MIT license - -0.0.4 / 2012-06-17 -================== - - * Change ret -1 for unsatisfiable and -2 when invalid - -0.0.3 / 2012-06-17 -================== - - * Fix last-byte-pos default to len - 1 - -0.0.2 / 2012-06-14 -================== - - * Add `.type` - -0.0.1 / 2012-06-11 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/range-parser/LICENSE b/truebit-implementation/node_modules/range-parser/LICENSE deleted file mode 100644 index 35999543..00000000 --- a/truebit-implementation/node_modules/range-parser/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2014 TJ Holowaychuk -Copyright (c) 2015-2016 Douglas Christopher Wilson [ -// { start: 0, end: 10 }, -// { start: 50, end: 60 } -// ] -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/range-parser.svg -[npm-url]: https://npmjs.org/package/range-parser -[node-version-image]: https://img.shields.io/node/v/range-parser.svg -[node-version-url]: https://nodejs.org/endownload -[travis-image]: https://img.shields.io/travis/jshttp/range-parser.svg -[travis-url]: https://travis-ci.org/jshttp/range-parser -[coveralls-image]: https://img.shields.io/coveralls/jshttp/range-parser.svg -[coveralls-url]: https://coveralls.io/r/jshttp/range-parser -[downloads-image]: https://img.shields.io/npm/dm/range-parser.svg -[downloads-url]: https://npmjs.org/package/range-parser diff --git a/truebit-implementation/node_modules/range-parser/index.js b/truebit-implementation/node_modules/range-parser/index.js deleted file mode 100644 index 83b2eb6b..00000000 --- a/truebit-implementation/node_modules/range-parser/index.js +++ /dev/null @@ -1,158 +0,0 @@ -/*! - * range-parser - * Copyright(c) 2012-2014 TJ Holowaychuk - * Copyright(c) 2015-2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = rangeParser - -/** - * Parse "Range" header `str` relative to the given file `size`. - * - * @param {Number} size - * @param {String} str - * @param {Object} [options] - * @return {Array} - * @public - */ - -function rangeParser (size, str, options) { - var index = str.indexOf('=') - - if (index === -1) { - return -2 - } - - // split the range string - var arr = str.slice(index + 1).split(',') - var ranges = [] - - // add ranges type - ranges.type = str.slice(0, index) - - // parse all ranges - for (var i = 0; i < arr.length; i++) { - var range = arr[i].split('-') - var start = parseInt(range[0], 10) - var end = parseInt(range[1], 10) - - // -nnn - if (isNaN(start)) { - start = size - end - end = size - 1 - // nnn- - } else if (isNaN(end)) { - end = size - 1 - } - - // limit last-byte-pos to current length - if (end > size - 1) { - end = size - 1 - } - - // invalid or unsatisifiable - if (isNaN(start) || isNaN(end) || start > end || start < 0) { - continue - } - - // add range - ranges.push({ - start: start, - end: end - }) - } - - if (ranges.length < 1) { - // unsatisifiable - return -1 - } - - return options && options.combine - ? combineRanges(ranges) - : ranges -} - -/** - * Combine overlapping & adjacent ranges. - * @private - */ - -function combineRanges (ranges) { - var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart) - - for (var j = 0, i = 1; i < ordered.length; i++) { - var range = ordered[i] - var current = ordered[j] - - if (range.start > current.end + 1) { - // next range - ordered[++j] = range - } else if (range.end > current.end) { - // extend range - current.end = range.end - current.index = Math.min(current.index, range.index) - } - } - - // trim ordered array - ordered.length = j + 1 - - // generate combined range - var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex) - - // copy ranges type - combined.type = ranges.type - - return combined -} - -/** - * Map function to add index value to ranges. - * @private - */ - -function mapWithIndex (range, index) { - return { - start: range.start, - end: range.end, - index: index - } -} - -/** - * Map function to remove index value from ranges. - * @private - */ - -function mapWithoutIndex (range) { - return { - start: range.start, - end: range.end - } -} - -/** - * Sort function to sort ranges by index. - * @private - */ - -function sortByRangeIndex (a, b) { - return a.index - b.index -} - -/** - * Sort function to sort ranges by start position. - * @private - */ - -function sortByRangeStart (a, b) { - return a.start - b.start -} diff --git a/truebit-implementation/node_modules/range-parser/package.json b/truebit-implementation/node_modules/range-parser/package.json deleted file mode 100644 index 4a28d936..00000000 --- a/truebit-implementation/node_modules/range-parser/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "range-parser@~1.2.0", - "_id": "range-parser@1.2.0", - "_inBundle": false, - "_integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "_location": "/range-parser", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "range-parser@~1.2.0", - "name": "range-parser", - "escapedName": "range-parser", - "rawSpec": "~1.2.0", - "saveSpec": null, - "fetchSpec": "~1.2.0" - }, - "_requiredBy": [ - "/express", - "/send" - ], - "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "_shasum": "f49be6b487894ddc40dcc94a322f611092e00d5e", - "_spec": "range-parser@~1.2.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "bugs": { - "url": "https://github.com/jshttp/range-parser/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "James Wyatt Cready", - "email": "wyatt.cready@lanetix.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "deprecated": false, - "description": "Range header field string parser", - "devDependencies": { - "eslint": "2.11.1", - "eslint-config-standard": "5.3.1", - "eslint-plugin-promise": "1.1.0", - "eslint-plugin-standard": "1.3.2", - "istanbul": "0.4.3", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "homepage": "https://github.com/jshttp/range-parser#readme", - "keywords": [ - "range", - "parser", - "http" - ], - "license": "MIT", - "name": "range-parser", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/range-parser.git" - }, - "scripts": { - "lint": "eslint **/*.js", - "test": "mocha --reporter spec", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" - }, - "version": "1.2.0" -} diff --git a/truebit-implementation/node_modules/raw-body/HISTORY.md b/truebit-implementation/node_modules/raw-body/HISTORY.md deleted file mode 100644 index b08ec23b..00000000 --- a/truebit-implementation/node_modules/raw-body/HISTORY.md +++ /dev/null @@ -1,258 +0,0 @@ -2.3.3 / 2018-05-08 -================== - - * deps: http-errors@1.6.3 - - deps: depd@~1.1.2 - - deps: setprototypeof@1.1.0 - - deps: statuses@'>= 1.3.1 < 2' - * deps: iconv-lite@0.4.23 - - Fix loading encoding with year appended - - Fix deprecation warnings on Node.js 10+ - -2.3.2 / 2017-09-09 -================== - - * deps: iconv-lite@0.4.19 - - Fix ISO-8859-1regression - - Update Windows-1255 - -2.3.1 / 2017-09-07 -================== - - * deps: bytes@3.0.0 - * deps: http-errors@1.6.2 - - deps: depd@1.1.1 - * perf: skip buffer decoding on overage chunk - -2.3.0 / 2017-08-04 -================== - - * Add TypeScript definitions - * Use `http-errors` for standard emitted errors - * deps: bytes@2.5.0 - * deps: iconv-lite@0.4.18 - - Add support for React Native - - Add a warning if not loaded as utf-8 - - Fix CESU-8 decoding in Node.js 8 - - Improve speed of ISO-8859-1 encoding - -2.2.0 / 2017-01-02 -================== - - * deps: iconv-lite@0.4.15 - - Added encoding MS-31J - - Added encoding MS-932 - - Added encoding MS-936 - - Added encoding MS-949 - - Added encoding MS-950 - - Fix GBK/GB18030 handling of Euro character - -2.1.7 / 2016-06-19 -================== - - * deps: bytes@2.4.0 - * perf: remove double-cleanup on happy path - -2.1.6 / 2016-03-07 -================== - - * deps: bytes@2.3.0 - - Drop partial bytes on all parsed units - - Fix parsing byte string that looks like hex - -2.1.5 / 2015-11-30 -================== - - * deps: bytes@2.2.0 - * deps: iconv-lite@0.4.13 - -2.1.4 / 2015-09-27 -================== - - * Fix masking critical errors from `iconv-lite` - * deps: iconv-lite@0.4.12 - - Fix CESU-8 decoding in Node.js 4.x - -2.1.3 / 2015-09-12 -================== - - * Fix sync callback when attaching data listener causes sync read - - Node.js 0.10 compatibility issue - -2.1.2 / 2015-07-05 -================== - - * Fix error stack traces to skip `makeError` - * deps: iconv-lite@0.4.11 - - Add encoding CESU-8 - -2.1.1 / 2015-06-14 -================== - - * Use `unpipe` module for unpiping requests - -2.1.0 / 2015-05-28 -================== - - * deps: iconv-lite@0.4.10 - - Improved UTF-16 endianness detection - - Leading BOM is now removed when decoding - - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails - -2.0.2 / 2015-05-21 -================== - - * deps: bytes@2.1.0 - - Slight optimizations - -2.0.1 / 2015-05-10 -================== - - * Fix a false-positive when unpiping in Node.js 0.8 - -2.0.0 / 2015-05-08 -================== - - * Return a promise without callback instead of thunk - * deps: bytes@2.0.1 - - units no longer case sensitive when parsing - -1.3.4 / 2015-04-15 -================== - - * Fix hanging callback if request aborts during read - * deps: iconv-lite@0.4.8 - - Add encoding alias UNICODE-1-1-UTF-7 - -1.3.3 / 2015-02-08 -================== - - * deps: iconv-lite@0.4.7 - - Gracefully support enumerables on `Object.prototype` - -1.3.2 / 2015-01-20 -================== - - * deps: iconv-lite@0.4.6 - - Fix rare aliases of single-byte encodings - -1.3.1 / 2014-11-21 -================== - - * deps: iconv-lite@0.4.5 - - Fix Windows-31J and X-SJIS encoding support - -1.3.0 / 2014-07-20 -================== - - * Fully unpipe the stream on error - - Fixes `Cannot switch to old mode now` error on Node.js 0.10+ - -1.2.3 / 2014-07-20 -================== - - * deps: iconv-lite@0.4.4 - - Added encoding UTF-7 - -1.2.2 / 2014-06-19 -================== - - * Send invalid encoding error to callback - -1.2.1 / 2014-06-15 -================== - - * deps: iconv-lite@0.4.3 - - Added encodings UTF-16BE and UTF-16 with BOM - -1.2.0 / 2014-06-13 -================== - - * Passing string as `options` interpreted as encoding - * Support all encodings from `iconv-lite` - -1.1.7 / 2014-06-12 -================== - - * use `string_decoder` module from npm - -1.1.6 / 2014-05-27 -================== - - * check encoding for old streams1 - * support node.js < 0.10.6 - -1.1.5 / 2014-05-14 -================== - - * bump bytes - -1.1.4 / 2014-04-19 -================== - - * allow true as an option - * bump bytes - -1.1.3 / 2014-03-02 -================== - - * fix case when length=null - -1.1.2 / 2013-12-01 -================== - - * be less strict on state.encoding check - -1.1.1 / 2013-11-27 -================== - - * add engines - -1.1.0 / 2013-11-27 -================== - - * add err.statusCode and err.type - * allow for encoding option to be true - * pause the stream instead of dumping on error - * throw if the stream's encoding is set - -1.0.1 / 2013-11-19 -================== - - * dont support streams1, throw if dev set encoding - -1.0.0 / 2013-11-17 -================== - - * rename `expected` option to `length` - -0.2.0 / 2013-11-15 -================== - - * republish - -0.1.1 / 2013-11-15 -================== - - * use bytes - -0.1.0 / 2013-11-11 -================== - - * generator support - -0.0.3 / 2013-10-10 -================== - - * update repo - -0.0.2 / 2013-09-14 -================== - - * dump stream on bad headers - * listen to events after defining received and buffers - -0.0.1 / 2013-09-14 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/raw-body/LICENSE b/truebit-implementation/node_modules/raw-body/LICENSE deleted file mode 100644 index d695c8fd..00000000 --- a/truebit-implementation/node_modules/raw-body/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2014 Jonathan Ong -Copyright (c) 2014-2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/raw-body/README.md b/truebit-implementation/node_modules/raw-body/README.md deleted file mode 100644 index 2ce79d27..00000000 --- a/truebit-implementation/node_modules/raw-body/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# raw-body - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] - -Gets the entire buffer of a stream either as a `Buffer` or a string. -Validates the stream's length against an expected length and maximum limit. -Ideal for parsing request bodies. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install raw-body -``` - -### TypeScript - -This module includes a [TypeScript](https://www.typescriptlang.org/) -declaration file to enable auto complete in compatible editors and type -information for TypeScript projects. This module depends on the Node.js -types, so install `@types/node`: - -```sh -$ npm install @types/node -``` - -## API - - - -```js -var getRawBody = require('raw-body') -``` - -### getRawBody(stream, [options], [callback]) - -**Returns a promise if no callback specified and global `Promise` exists.** - -Options: - -- `length` - The length of the stream. - If the contents of the stream do not add up to this length, - an `400` error code is returned. -- `limit` - The byte limit of the body. - This is the number of bytes or any string format supported by - [bytes](https://www.npmjs.com/package/bytes), - for example `1000`, `'500kb'` or `'3mb'`. - If the body ends up being larger than this limit, - a `413` error code is returned. -- `encoding` - The encoding to use to decode the body into a string. - By default, a `Buffer` instance will be returned when no encoding is specified. - Most likely, you want `utf-8`, so setting `encoding` to `true` will decode as `utf-8`. - You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme). - -You can also pass a string in place of options to just specify the encoding. - -If an error occurs, the stream will be paused, everything unpiped, -and you are responsible for correctly disposing the stream. -For HTTP requests, no handling is required if you send a response. -For streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks. - -## Errors - -This module creates errors depending on the error condition during reading. -The error may be an error from the underlying Node.js implementation, but is -otherwise an error created by this module, which has the following attributes: - - * `limit` - the limit in bytes - * `length` and `expected` - the expected length of the stream - * `received` - the received bytes - * `encoding` - the invalid encoding - * `status` and `statusCode` - the corresponding status code for the error - * `type` - the error type - -### Types - -The errors from this module have a `type` property which allows for the progamatic -determination of the type of error returned. - -#### encoding.unsupported - -This error will occur when the `encoding` option is specified, but the value does -not map to an encoding supported by the [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme) -module. - -#### entity.too.large - -This error will occur when the `limit` option is specified, but the stream has -an entity that is larger. - -#### request.aborted - -This error will occur when the request stream is aborted by the client before -reading the body has finished. - -#### request.size.invalid - -This error will occur when the `length` option is specified, but the stream has -emitted more bytes. - -#### stream.encoding.set - -This error will occur when the given stream has an encoding set on it, making it -a decoded stream. The stream should not have an encoding set and is expected to -emit `Buffer` objects. - -## Examples - -### Simple Express example - -```js -var contentType = require('content-type') -var express = require('express') -var getRawBody = require('raw-body') - -var app = express() - -app.use(function (req, res, next) { - getRawBody(req, { - length: req.headers['content-length'], - limit: '1mb', - encoding: contentType.parse(req).parameters.charset - }, function (err, string) { - if (err) return next(err) - req.text = string - next() - }) -}) - -// now access req.text -``` - -### Simple Koa example - -```js -var contentType = require('content-type') -var getRawBody = require('raw-body') -var koa = require('koa') - -var app = koa() - -app.use(function * (next) { - this.text = yield getRawBody(this.req, { - length: this.req.headers['content-length'], - limit: '1mb', - encoding: contentType.parse(this.req).parameters.charset - }) - yield next -}) - -// now access this.text -``` - -### Using as a promise - -To use this library as a promise, simply omit the `callback` and a promise is -returned, provided that a global `Promise` is defined. - -```js -var getRawBody = require('raw-body') -var http = require('http') - -var server = http.createServer(function (req, res) { - getRawBody(req) - .then(function (buf) { - res.statusCode = 200 - res.end(buf.length + ' bytes submitted') - }) - .catch(function (err) { - res.statusCode = 500 - res.end(err.message) - }) -}) - -server.listen(3000) -``` - -### Using with TypeScript - -```ts -import * as getRawBody from 'raw-body'; -import * as http from 'http'; - -const server = http.createServer((req, res) => { - getRawBody(req) - .then((buf) => { - res.statusCode = 200; - res.end(buf.length + ' bytes submitted'); - }) - .catch((err) => { - res.statusCode = err.statusCode; - res.end(err.message); - }); -}); - -server.listen(3000); -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/raw-body.svg -[npm-url]: https://npmjs.org/package/raw-body -[node-version-image]: https://img.shields.io/node/v/raw-body.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/stream-utils/raw-body/master.svg -[travis-url]: https://travis-ci.org/stream-utils/raw-body -[coveralls-image]: https://img.shields.io/coveralls/stream-utils/raw-body/master.svg -[coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master -[downloads-image]: https://img.shields.io/npm/dm/raw-body.svg -[downloads-url]: https://npmjs.org/package/raw-body diff --git a/truebit-implementation/node_modules/raw-body/index.d.ts b/truebit-implementation/node_modules/raw-body/index.d.ts deleted file mode 100644 index dcbbebd4..00000000 --- a/truebit-implementation/node_modules/raw-body/index.d.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Readable } from 'stream'; - -declare namespace getRawBody { - export type Encoding = string | true; - - export interface Options { - /** - * The expected length of the stream. - */ - length?: number | string | null; - /** - * The byte limit of the body. This is the number of bytes or any string - * format supported by `bytes`, for example `1000`, `'500kb'` or `'3mb'`. - */ - limit?: number | string | null; - /** - * The encoding to use to decode the body into a string. By default, a - * `Buffer` instance will be returned when no encoding is specified. Most - * likely, you want `utf-8`, so setting encoding to `true` will decode as - * `utf-8`. You can use any type of encoding supported by `iconv-lite`. - */ - encoding?: Encoding | null; - } - - export interface RawBodyError extends Error { - /** - * The limit in bytes. - */ - limit?: number; - /** - * The expected length of the stream. - */ - length?: number; - expected?: number; - /** - * The received bytes. - */ - received?: number; - /** - * The encoding. - */ - encoding?: string; - /** - * The corresponding status code for the error. - */ - status: number; - statusCode: number; - /** - * The error type. - */ - type: string; - } -} - -/** - * Gets the entire buffer of a stream either as a `Buffer` or a string. - * Validates the stream's length against an expected length and maximum - * limit. Ideal for parsing request bodies. - */ -declare function getRawBody( - stream: Readable, - callback: (err: getRawBody.RawBodyError, body: Buffer) => void -): void; - -declare function getRawBody( - stream: Readable, - options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding, - callback: (err: getRawBody.RawBodyError, body: string) => void -): void; - -declare function getRawBody( - stream: Readable, - options: getRawBody.Options, - callback: (err: getRawBody.RawBodyError, body: Buffer) => void -): void; - -declare function getRawBody( - stream: Readable, - options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding -): Promise; - -declare function getRawBody( - stream: Readable, - options?: getRawBody.Options -): Promise; - -export = getRawBody; diff --git a/truebit-implementation/node_modules/raw-body/index.js b/truebit-implementation/node_modules/raw-body/index.js deleted file mode 100644 index 7fe81860..00000000 --- a/truebit-implementation/node_modules/raw-body/index.js +++ /dev/null @@ -1,286 +0,0 @@ -/*! - * raw-body - * Copyright(c) 2013-2014 Jonathan Ong - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var bytes = require('bytes') -var createError = require('http-errors') -var iconv = require('iconv-lite') -var unpipe = require('unpipe') - -/** - * Module exports. - * @public - */ - -module.exports = getRawBody - -/** - * Module variables. - * @private - */ - -var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: / - -/** - * Get the decoder for a given encoding. - * - * @param {string} encoding - * @private - */ - -function getDecoder (encoding) { - if (!encoding) return null - - try { - return iconv.getDecoder(encoding) - } catch (e) { - // error getting decoder - if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e - - // the encoding was not found - throw createError(415, 'specified encoding unsupported', { - encoding: encoding, - type: 'encoding.unsupported' - }) - } -} - -/** - * Get the raw body of a stream (typically HTTP). - * - * @param {object} stream - * @param {object|string|function} [options] - * @param {function} [callback] - * @public - */ - -function getRawBody (stream, options, callback) { - var done = callback - var opts = options || {} - - if (options === true || typeof options === 'string') { - // short cut for encoding - opts = { - encoding: options - } - } - - if (typeof options === 'function') { - done = options - opts = {} - } - - // validate callback is a function, if provided - if (done !== undefined && typeof done !== 'function') { - throw new TypeError('argument callback must be a function') - } - - // require the callback without promises - if (!done && !global.Promise) { - throw new TypeError('argument callback is required') - } - - // get encoding - var encoding = opts.encoding !== true - ? opts.encoding - : 'utf-8' - - // convert the limit to an integer - var limit = bytes.parse(opts.limit) - - // convert the expected length to an integer - var length = opts.length != null && !isNaN(opts.length) - ? parseInt(opts.length, 10) - : null - - if (done) { - // classic callback style - return readStream(stream, encoding, length, limit, done) - } - - return new Promise(function executor (resolve, reject) { - readStream(stream, encoding, length, limit, function onRead (err, buf) { - if (err) return reject(err) - resolve(buf) - }) - }) -} - -/** - * Halt a stream. - * - * @param {Object} stream - * @private - */ - -function halt (stream) { - // unpipe everything from the stream - unpipe(stream) - - // pause stream - if (typeof stream.pause === 'function') { - stream.pause() - } -} - -/** - * Read the data from the stream. - * - * @param {object} stream - * @param {string} encoding - * @param {number} length - * @param {number} limit - * @param {function} callback - * @public - */ - -function readStream (stream, encoding, length, limit, callback) { - var complete = false - var sync = true - - // check the length and limit options. - // note: we intentionally leave the stream paused, - // so users should handle the stream themselves. - if (limit !== null && length !== null && length > limit) { - return done(createError(413, 'request entity too large', { - expected: length, - length: length, - limit: limit, - type: 'entity.too.large' - })) - } - - // streams1: assert request encoding is buffer. - // streams2+: assert the stream encoding is buffer. - // stream._decoder: streams1 - // state.encoding: streams2 - // state.decoder: streams2, specifically < 0.10.6 - var state = stream._readableState - if (stream._decoder || (state && (state.encoding || state.decoder))) { - // developer error - return done(createError(500, 'stream encoding should not be set', { - type: 'stream.encoding.set' - })) - } - - var received = 0 - var decoder - - try { - decoder = getDecoder(encoding) - } catch (err) { - return done(err) - } - - var buffer = decoder - ? '' - : [] - - // attach listeners - stream.on('aborted', onAborted) - stream.on('close', cleanup) - stream.on('data', onData) - stream.on('end', onEnd) - stream.on('error', onEnd) - - // mark sync section complete - sync = false - - function done () { - var args = new Array(arguments.length) - - // copy arguments - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - - // mark complete - complete = true - - if (sync) { - process.nextTick(invokeCallback) - } else { - invokeCallback() - } - - function invokeCallback () { - cleanup() - - if (args[0]) { - // halt the stream on error - halt(stream) - } - - callback.apply(null, args) - } - } - - function onAborted () { - if (complete) return - - done(createError(400, 'request aborted', { - code: 'ECONNABORTED', - expected: length, - length: length, - received: received, - type: 'request.aborted' - })) - } - - function onData (chunk) { - if (complete) return - - received += chunk.length - - if (limit !== null && received > limit) { - done(createError(413, 'request entity too large', { - limit: limit, - received: received, - type: 'entity.too.large' - })) - } else if (decoder) { - buffer += decoder.write(chunk) - } else { - buffer.push(chunk) - } - } - - function onEnd (err) { - if (complete) return - if (err) return done(err) - - if (length !== null && received !== length) { - done(createError(400, 'request size did not match content length', { - expected: length, - length: length, - received: received, - type: 'request.size.invalid' - })) - } else { - var string = decoder - ? buffer + (decoder.end() || '') - : Buffer.concat(buffer) - done(null, string) - } - } - - function cleanup () { - buffer = null - - stream.removeListener('aborted', onAborted) - stream.removeListener('data', onData) - stream.removeListener('end', onEnd) - stream.removeListener('error', onEnd) - stream.removeListener('close', cleanup) - } -} diff --git a/truebit-implementation/node_modules/raw-body/package.json b/truebit-implementation/node_modules/raw-body/package.json deleted file mode 100644 index 2a4ce5cc..00000000 --- a/truebit-implementation/node_modules/raw-body/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_from": "raw-body@2.3.3", - "_id": "raw-body@2.3.3", - "_inBundle": false, - "_integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "_location": "/raw-body", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "raw-body@2.3.3", - "name": "raw-body", - "escapedName": "raw-body", - "rawSpec": "2.3.3", - "saveSpec": null, - "fetchSpec": "2.3.3" - }, - "_requiredBy": [ - "/body-parser" - ], - "_resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "_shasum": "1b324ece6b5706e153855bc1148c65bb7f6ea0c3", - "_spec": "raw-body@2.3.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/stream-utils/raw-body/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Raynos", - "email": "raynos2@gmail.com" - } - ], - "dependencies": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "deprecated": false, - "description": "Get and validate the raw body of a readable stream.", - "devDependencies": { - "bluebird": "3.5.1", - "eslint": "4.19.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.11.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.7.0", - "eslint-plugin-standard": "3.1.0", - "istanbul": "0.4.5", - "mocha": "2.5.3", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "index.d.ts", - "index.js" - ], - "homepage": "https://github.com/stream-utils/raw-body#readme", - "license": "MIT", - "name": "raw-body", - "repository": { - "type": "git", - "url": "git+https://github.com/stream-utils/raw-body.git" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --trace-deprecation --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --trace-deprecation --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --trace-deprecation --reporter spec --check-leaks test/" - }, - "version": "2.3.3" -} diff --git a/truebit-implementation/node_modules/readable-stream/.travis.yml b/truebit-implementation/node_modules/readable-stream/.travis.yml deleted file mode 100644 index 40992555..00000000 --- a/truebit-implementation/node_modules/readable-stream/.travis.yml +++ /dev/null @@ -1,55 +0,0 @@ -sudo: false -language: node_js -before_install: - - npm install -g npm@2 - - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g -notifications: - email: false -matrix: - fast_finish: true - include: - - node_js: '0.8' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.10' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.11' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.12' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 1 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 2 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 3 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 4 - env: TASK=test - - node_js: 5 - env: TASK=test - - node_js: 6 - env: TASK=test - - node_js: 7 - env: TASK=test - - node_js: 8 - env: TASK=test - - node_js: 9 - env: TASK=test -script: "npm run $TASK" -env: - global: - - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= - - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/truebit-implementation/node_modules/readable-stream/CONTRIBUTING.md b/truebit-implementation/node_modules/readable-stream/CONTRIBUTING.md deleted file mode 100644 index f478d58d..00000000 --- a/truebit-implementation/node_modules/readable-stream/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -# Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - -## Moderation Policy - -The [Node.js Moderation Policy] applies to this WG. - -## Code of Conduct - -The [Node.js Code of Conduct][] applies to this WG. - -[Node.js Code of Conduct]: -https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md -[Node.js Moderation Policy]: -https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/truebit-implementation/node_modules/readable-stream/GOVERNANCE.md b/truebit-implementation/node_modules/readable-stream/GOVERNANCE.md deleted file mode 100644 index 16ffb93f..00000000 --- a/truebit-implementation/node_modules/readable-stream/GOVERNANCE.md +++ /dev/null @@ -1,136 +0,0 @@ -### Streams Working Group - -The Node.js Streams is jointly governed by a Working Group -(WG) -that is responsible for high-level guidance of the project. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Conduct guidelines -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project -[README.md](./README.md#current-project-team-members). - -### Collaborators - -The readable-stream GitHub repository is -maintained by the WG and additional Collaborators who are added by the -WG on an ongoing basis. - -Individuals making significant and valuable contributions are made -Collaborators and given commit-access to the project. These -individuals are identified by the WG and their addition as -Collaborators is discussed during the WG meeting. - -_Note:_ If you make a significant contribution and are not considered -for commit-access log an issue or contact a WG member directly and it -will be brought up in the next WG meeting. - -Modifications of the contents of the readable-stream repository are -made on -a collaborative basis. Anybody with a GitHub account may propose a -modification via pull request and it will be considered by the project -Collaborators. All pull requests must be reviewed and accepted by a -Collaborator with sufficient expertise who is able to take full -responsibility for the change. In the case of pull requests proposed -by an existing Collaborator, an additional Collaborator is required -for sign-off. Consensus should be sought if additional Collaborators -participate and there is disagreement around a particular -modification. See _Consensus Seeking Process_ below for further detail -on the consensus model used for governance. - -Collaborators may opt to elevate significant or controversial -modifications, or modifications that have not found consensus to the -WG for discussion by assigning the ***WG-agenda*** tag to a pull -request or issue. The WG should serve as the final arbiter where -required. - -For the current list of Collaborators, see the project -[README.md](./README.md#members). - -### WG Membership - -WG seats are not time-limited. There is no fixed size of the WG. -However, the expected target is between 6 and 12, to ensure adequate -coverage of important areas of expertise, balanced with the ability to -make decisions efficiently. - -There is no specific set of requirements or qualifications for WG -membership beyond these rules. - -The WG may add additional members to the WG by unanimous consensus. - -A WG member may be removed from the WG by voluntary resignation, or by -unanimous consensus of all other WG members. - -Changes to WG membership should be posted in the agenda, and may be -suggested as any other agenda item (see "WG Meetings" below). - -If an addition or removal is proposed during a meeting, and the full -WG is not in attendance to participate, then the addition or removal -is added to the agenda for the subsequent meeting. This is to ensure -that all members are given the opportunity to participate in all -membership decisions. If a WG member is unable to attend a meeting -where a planned membership decision is being made, then their consent -is assumed. - -No more than 1/3 of the WG members may be affiliated with the same -employer. If removal or resignation of a WG member, or a change of -employment by a WG member, creates a situation where more than 1/3 of -the WG membership shares an employer, then the situation must be -immediately remedied by the resignation or removal of one or more WG -members affiliated with the over-represented employer(s). - -### WG Meetings - -The WG meets occasionally on a Google Hangout On Air. A designated moderator -approved by the WG runs the meeting. Each meeting should be -published to YouTube. - -Items are added to the WG agenda that are considered contentious or -are modifications of governance, contribution policy, WG membership, -or release process. - -The intention of the agenda is not to approve or review all patches; -that should happen continuously on GitHub and be handled by the larger -group of Collaborators. - -Any community member or contributor can ask that something be added to -the next meeting's agenda by logging a GitHub Issue. Any Collaborator, -WG member or the moderator can add the item to the agenda by adding -the ***WG-agenda*** tag to the issue. - -Prior to each WG meeting the moderator will share the Agenda with -members of the WG. WG members can add any items they like to the -agenda at the beginning of each meeting. The moderator and the WG -cannot veto or remove items. - -The WG may invite persons or representatives from certain projects to -participate in a non-voting capacity. - -The moderator is responsible for summarizing the discussion of each -agenda item and sends it as a pull request after the meeting. - -### Consensus Seeking Process - -The WG follows a -[Consensus -Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) -decision-making model. - -When an agenda item has appeared to reach a consensus the moderator -will ask "Does anyone object?" as a final call for dissent from the -consensus. - -If an agenda item cannot reach a consensus a WG member can call for -either a closing vote or a vote to table the issue to the next -meeting. The call for a vote must be seconded by a majority of the WG -or else the discussion will continue. Simple majority wins. - -Note that changes to WG membership require a majority consensus. See -"WG Membership" above. diff --git a/truebit-implementation/node_modules/readable-stream/LICENSE b/truebit-implementation/node_modules/readable-stream/LICENSE deleted file mode 100644 index 2873b3b2..00000000 --- a/truebit-implementation/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. -""" diff --git a/truebit-implementation/node_modules/readable-stream/README.md b/truebit-implementation/node_modules/readable-stream/README.md deleted file mode 100644 index 23fe3f3e..00000000 --- a/truebit-implementation/node_modules/readable-stream/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# readable-stream - -***Node-core v8.11.1 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) - -```bash -npm install --save readable-stream -``` - -***Node-core streams for userland*** - -This package is a mirror of the Streams2 and Streams3 implementations in -Node-core. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.11.1/docs/api/stream.html). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -# Streams Working Group - -`readable-stream` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - - -## Team Members - -* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> - - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> - - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D -* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> -* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> - - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E -* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> diff --git a/truebit-implementation/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/truebit-implementation/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md deleted file mode 100644 index 83275f19..00000000 --- a/truebit-implementation/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +++ /dev/null @@ -1,60 +0,0 @@ -# streams WG Meeting 2015-01-30 - -## Links - -* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg -* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 -* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ - -## Agenda - -Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. - -* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) -* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) -* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) -* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) - -## Minutes - -### adopt a charter - -* group: +1's all around - -### What versioning scheme should be adopted? -* group: +1’s 3.0.0 -* domenic+group: pulling in patches from other sources where appropriate -* mikeal: version independently, suggesting versions for io.js -* mikeal+domenic: work with TC to notify in advance of changes -simpler stream creation - -### streamline creation of streams -* sam: streamline creation of streams -* domenic: nice simple solution posted - but, we lose the opportunity to change the model - may not be backwards incompatible (double check keys) - - **action item:** domenic will check - -### remove implicit flowing of streams on(‘data’) -* add isFlowing / isPaused -* mikeal: worrying that we’re documenting polyfill methods – confuses users -* domenic: more reflective API is probably good, with warning labels for users -* new section for mad scientists (reflective stream access) -* calvin: name the “third state” -* mikeal: maybe borrow the name from whatwg? -* domenic: we’re missing the “third state” -* consensus: kind of difficult to name the third state -* mikeal: figure out differences in states / compat -* mathias: always flow on data – eliminates third state - * explore what it breaks - -**action items:** -* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) -* ask rod/build for infrastructure -* **chris**: explore the “flow on data” approach -* add isPaused/isFlowing -* add new docs section -* move isPaused to that section - - diff --git a/truebit-implementation/node_modules/readable-stream/duplex-browser.js b/truebit-implementation/node_modules/readable-stream/duplex-browser.js deleted file mode 100644 index f8b2db83..00000000 --- a/truebit-implementation/node_modules/readable-stream/duplex-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/_stream_duplex.js'); diff --git a/truebit-implementation/node_modules/readable-stream/duplex.js b/truebit-implementation/node_modules/readable-stream/duplex.js deleted file mode 100644 index 46924cbf..00000000 --- a/truebit-implementation/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').Duplex diff --git a/truebit-implementation/node_modules/readable-stream/lib/_stream_duplex.js b/truebit-implementation/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index a1ca813e..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - keys.push(key); - }return keys; -}; -/**/ - -module.exports = Duplex; - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -{ - // avoid scope creep, the keys array can then be collected - var keys = objectKeys(Writable.prototype); - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; - - this.once('end', onend); -} - -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - pna.nextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -Object.defineProperty(Duplex.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); - -Duplex.prototype._destroy = function (err, cb) { - this.push(null); - this.end(); - - pna.nextTick(cb, err); -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/readable-stream/lib/_stream_passthrough.js b/truebit-implementation/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index a9c83588..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/readable-stream/lib/_stream_readable.js b/truebit-implementation/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index bf34ac65..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,1019 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -module.exports = Readable; - -/**/ -var isArray = require('isarray'); -/**/ - -/**/ -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; - -/**/ -var EE = require('events').EventEmitter; - -var EElistenerCount = function (emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -/**/ - -var Buffer = require('safe-buffer').Buffer; -var OurUint8Array = global.Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -/**/ -var debugUtil = require('util'); -var debug = void 0; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - -var BufferList = require('./internal/streams/BufferList'); -var destroyImpl = require('./internal/streams/destroy'); -var StringDecoder; - -util.inherits(Readable, Stream); - -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; - -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); - - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - 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]]; -} - -function ReadableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var readableHwm = options.readableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - - // has it been destroyed - this.destroyed = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - if (!(this instanceof Readable)) return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - if (options) { - if (typeof options.read === 'function') this._read = options.read; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - - Stream.call(this); -} - -Object.defineProperty(Readable.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - } -}); - -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; -Readable.prototype._destroy = function (err, cb) { - this.push(null); - cb(err); -}; - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (addToFront) { - if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); - } else if (state.ended) { - stream.emit('error', new Error('stream.push() after EOF')); - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - } - } - - return needMoreData(state); -} - -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - - if (state.needReadable) emitReadable(stream); - } - maybeReadMore(stream, state); -} - -function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); -} - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } else { - state.length -= n; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - - return ret; -}; - -function onEofChunk(stream, state) { - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - pna.nextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - this.emit('error', new Error('_read() is not implemented')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - // If the user pushes more data while we're writing to dest then we'll end up - // in ondata again. However, we only want to increase awaitDrain once because - // dest will only emit one 'drain' event for the multiple writes. - // => Introduce a guard on increasing awaitDrain. - var increasedAwaitDrain = false; - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - increasedAwaitDrain = false; - var ret = dest.write(chunk); - if (false === ret && !increasedAwaitDrain) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', src._readableState.awaitDrain); - src._readableState.awaitDrain++; - increasedAwaitDrain = true; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } - - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function () { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { hasUnpiped: false }; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, unpipeInfo); - }return this; - } - - // try to find the right one. - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - - dest.emit('unpipe', this, unpipeInfo); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - if (ev === 'data') { - // Start flowing on next tick if stream isn't explicitly paused - if (this._readableState.flowing !== false) this.resume(); - } else if (ev === 'readable') { - var state = this._readableState; - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.emittedReadable = false; - if (!state.reading) { - pna.nextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - pna.nextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - if (!state.reading) { - debug('resume read 0'); - stream.read(0); - } - - state.resumeScheduled = false; - state.awaitDrain = 0; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null) {} -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var _this = this; - - var state = this._readableState; - var paused = false; - - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - - _this.push(null); - }); - - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - this._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return this; -}; - -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._readableState.highWaterMark; - } -}); - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - 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); - state.buffer.clear(); - } else { - // read part of list - ret = fromListPartial(n, state.buffer, state.decoder); - } - - return ret; -} - -// Extracts only enough buffered data to satisfy the amount requested. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - // slice is the same for buffers and strings - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - // first chunk is a perfect match - ret = list.shift(); - } else { - // result spans more than one buffer - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; -} - -// Copies a specified amount of characters from the list of buffered data -// chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -// Copies a specified amount of bytes from the list of buffered data chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBuffer(n, list) { - var ret = Buffer.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - pna.nextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/readable-stream/lib/_stream_transform.js b/truebit-implementation/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index 5d1f8b87..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -'use strict'; - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) { - return this.emit('error', new Error('write callback called multiple times')); - } - - ts.writechunk = null; - ts.writecb = null; - - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); - - cb(er); - - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - - Duplex.call(this, options); - - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - - if (typeof options.flush === 'function') this._flush = options.flush; - } - - // When the writable side finishes, then flush out anything remaining. - this.on('prefinish', prefinish); -} - -function prefinish() { - var _this = this; - - if (typeof this._flush === 'function') { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('_transform() is not implemented'); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -Transform.prototype._destroy = function (err, cb) { - var _this2 = this; - - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - _this2.emit('close'); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); - - if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); - - return stream.push(null); -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/readable-stream/lib/_stream_writable.js b/truebit-implementation/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index b3f4e85a..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,687 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// 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. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -module.exports = Writable; - -/* */ -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ -var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; -/**/ - -/**/ -var Duplex; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ - -/**/ -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -/**/ - -var Buffer = require('safe-buffer').Buffer; -var OurUint8Array = global.Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -var destroyImpl = require('./internal/streams/destroy'); - -util.inherits(Writable, Stream); - -function nop() {} - -function WritableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var writableHwm = options.writableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // if _final has been called - this.finalCalled = false; - - // drain event flag. - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // has it been destroyed - this.destroyed = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // count buffered requests - this.bufferedRequestCount = 0; - - // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); - -// Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. -var realHasInstance; -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function (object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function (object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { - return new Writable(options); - } - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - - if (typeof options.writev === 'function') this._writev = options.writev; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - - if (typeof options.final === 'function') this._final = options.final; - } - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe, not readable')); -}; - -function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - pna.nextTick(cb, er); -} - -// Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. -function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; - - if (chunk === null) { - er = new TypeError('May not write null values to stream'); - } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - if (er) { - stream.emit('error', er); - pna.nextTick(cb, er); - valid = false; - } - return valid; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - - if (typeof cb !== 'function') cb = nop; - - if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function () { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - 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); - this._writableState.defaultEncoding = encoding; - return this; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - pna.nextTick(cb, er); - // this can emit finish, and it will always happen - // after error - pna.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - // this can emit finish, but finish must - // always follow error - finishMaybe(stream, state); - } -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - - var count = 0; - var allBuffers = true; - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - buffer.allBuffers = allBuffers; - - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('_write() is not implemented')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) endWritable(this, state, cb); -}; - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - if (err) { - stream.emit('error', err); - } - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function') { - state.pendingcb++; - state.finalCalled = true; - pna.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - } - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} - -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - if (state.corkedRequestsFree) { - state.corkedRequestsFree.next = corkReq; - } else { - state.corkedRequestsFree = corkReq; - } -} - -Object.defineProperty(Writable.prototype, 'destroyed', { - get: function () { - if (this._writableState === undefined) { - return false; - } - return this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._writableState.destroyed = value; - } -}); - -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; -Writable.prototype._destroy = function (err, cb) { - this.end(); - cb(err); -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/BufferList.js b/truebit-implementation/node_modules/readable-stream/lib/internal/streams/BufferList.js deleted file mode 100644 index aefc68bd..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/BufferList.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Buffer = require('safe-buffer').Buffer; -var util = require('util'); - -function copyBuffer(src, target, offset) { - src.copy(target, offset); -} - -module.exports = function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; - } - - BufferList.prototype.push = function push(v) { - var entry = { data: v, next: null }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - }; - - BufferList.prototype.unshift = function unshift(v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - }; - - BufferList.prototype.shift = function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - }; - - BufferList.prototype.clear = function clear() { - this.head = this.tail = null; - this.length = 0; - }; - - BufferList.prototype.join = function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) { - ret += s + p.data; - }return ret; - }; - - BufferList.prototype.concat = function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - if (this.length === 1) return this.head.data; - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - }; - - return BufferList; -}(); - -if (util && util.inspect && util.inspect.custom) { - module.exports.prototype[util.inspect.custom] = function () { - var obj = util.inspect({ length: this.length }); - return this.constructor.name + ' ' + obj; - }; -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/destroy.js b/truebit-implementation/node_modules/readable-stream/lib/internal/streams/destroy.js deleted file mode 100644 index 5a0a0d88..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/destroy.js +++ /dev/null @@ -1,74 +0,0 @@ -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -// undocumented cb() API, needed for core, not for public API -function destroy(err, cb) { - var _this = this; - - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { - pna.nextTick(emitErrorNT, this, err); - } - return this; - } - - // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - if (this._readableState) { - this._readableState.destroyed = true; - } - - // if this is a duplex stream mark the writable part as destroyed as well - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - pna.nextTick(emitErrorNT, _this, err); - if (_this._writableState) { - _this._writableState.errorEmitted = true; - } - } else if (cb) { - cb(err); - } - }); - - return this; -} - -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} - -function emitErrorNT(self, err) { - self.emit('error', err); -} - -module.exports = { - destroy: destroy, - undestroy: undestroy -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/truebit-implementation/node_modules/readable-stream/lib/internal/streams/stream-browser.js deleted file mode 100644 index 9332a3fd..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/stream-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('events').EventEmitter; diff --git a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/stream.js b/truebit-implementation/node_modules/readable-stream/lib/internal/streams/stream.js deleted file mode 100644 index ce2ad5b6..00000000 --- a/truebit-implementation/node_modules/readable-stream/lib/internal/streams/stream.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('stream'); diff --git a/truebit-implementation/node_modules/readable-stream/package.json b/truebit-implementation/node_modules/readable-stream/package.json deleted file mode 100644 index 607ad15e..00000000 --- a/truebit-implementation/node_modules/readable-stream/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_from": "readable-stream@^2.3.0", - "_id": "readable-stream@2.3.6", - "_inBundle": false, - "_integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "_location": "/readable-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "readable-stream@^2.3.0", - "name": "readable-stream", - "escapedName": "readable-stream", - "rawSpec": "^2.3.0", - "saveSpec": null, - "fetchSpec": "^2.3.0" - }, - "_requiredBy": [ - "/bl", - "/tar-stream" - ], - "_resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "_shasum": "b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf", - "_spec": "readable-stream@^2.3.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar-stream", - "browser": { - "util": false, - "./readable.js": "./readable-browser.js", - "./writable.js": "./writable-browser.js", - "./duplex.js": "./duplex-browser.js", - "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" - }, - "bugs": { - "url": "https://github.com/nodejs/readable-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "deprecated": false, - "description": "Streams3, a user-land copy of the stream library from Node.js", - "devDependencies": { - "assert": "^1.4.0", - "babel-polyfill": "^6.9.1", - "buffer": "^4.9.0", - "lolex": "^2.3.2", - "nyc": "^6.4.0", - "tap": "^0.7.0", - "tape": "^4.8.0" - }, - "homepage": "https://github.com/nodejs/readable-stream#readme", - "keywords": [ - "readable", - "stream", - "pipe" - ], - "license": "MIT", - "main": "readable.js", - "name": "readable-stream", - "nyc": { - "include": [ - "lib/**.js" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream.git" - }, - "scripts": { - "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", - "cover": "nyc npm test", - "report": "nyc report --reporter=lcov", - "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js" - }, - "version": "2.3.6" -} diff --git a/truebit-implementation/node_modules/readable-stream/passthrough.js b/truebit-implementation/node_modules/readable-stream/passthrough.js deleted file mode 100644 index ffd791d7..00000000 --- a/truebit-implementation/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').PassThrough diff --git a/truebit-implementation/node_modules/readable-stream/readable-browser.js b/truebit-implementation/node_modules/readable-stream/readable-browser.js deleted file mode 100644 index e5037259..00000000 --- a/truebit-implementation/node_modules/readable-stream/readable-browser.js +++ /dev/null @@ -1,7 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/truebit-implementation/node_modules/readable-stream/readable.js b/truebit-implementation/node_modules/readable-stream/readable.js deleted file mode 100644 index ec89ec53..00000000 --- a/truebit-implementation/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,19 +0,0 @@ -var Stream = require('stream'); -if (process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream; - exports = module.exports = Stream.Readable; - exports.Readable = Stream.Readable; - exports.Writable = Stream.Writable; - exports.Duplex = Stream.Duplex; - exports.Transform = Stream.Transform; - exports.PassThrough = Stream.PassThrough; - exports.Stream = Stream; -} else { - exports = module.exports = require('./lib/_stream_readable.js'); - exports.Stream = Stream || exports; - exports.Readable = exports; - exports.Writable = require('./lib/_stream_writable.js'); - exports.Duplex = require('./lib/_stream_duplex.js'); - exports.Transform = require('./lib/_stream_transform.js'); - exports.PassThrough = require('./lib/_stream_passthrough.js'); -} diff --git a/truebit-implementation/node_modules/readable-stream/transform.js b/truebit-implementation/node_modules/readable-stream/transform.js deleted file mode 100644 index b1baba26..00000000 --- a/truebit-implementation/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').Transform diff --git a/truebit-implementation/node_modules/readable-stream/writable-browser.js b/truebit-implementation/node_modules/readable-stream/writable-browser.js deleted file mode 100644 index ebdde6a8..00000000 --- a/truebit-implementation/node_modules/readable-stream/writable-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/_stream_writable.js'); diff --git a/truebit-implementation/node_modules/readable-stream/writable.js b/truebit-implementation/node_modules/readable-stream/writable.js deleted file mode 100644 index 3211a6f8..00000000 --- a/truebit-implementation/node_modules/readable-stream/writable.js +++ /dev/null @@ -1,8 +0,0 @@ -var Stream = require("stream") -var Writable = require("./lib/_stream_writable.js") - -if (process.env.READABLE_STREAM === 'disable') { - module.exports = Stream && Stream.Writable || Writable -} else { - module.exports = Writable -} diff --git a/truebit-implementation/node_modules/request/CHANGELOG.md b/truebit-implementation/node_modules/request/CHANGELOG.md deleted file mode 100644 index 751514d2..00000000 --- a/truebit-implementation/node_modules/request/CHANGELOG.md +++ /dev/null @@ -1,709 +0,0 @@ -## Change Log - -### v2.87.0 (2018/05/21) -- [#2943](https://github.com/request/request/pull/2943) Replace hawk dependency with a local implemenation (#2943) (@hueniverse) - -### v2.86.0 (2018/05/15) -- [#2885](https://github.com/request/request/pull/2885) Remove redundant code (for Node.js 0.9.4 and below) and dependency (@ChALkeR) -- [#2942](https://github.com/request/request/pull/2942) Make Test GREEN Again! (@simov) -- [#2923](https://github.com/request/request/pull/2923) Alterations for failing CI tests (@gareth-robinson) - -### v2.85.0 (2018/03/12) -- [#2880](https://github.com/request/request/pull/2880) Revert "Update hawk to 7.0.7 (#2880)" (@simov) - -### v2.84.0 (2018/03/12) -- [#2793](https://github.com/request/request/pull/2793) Fixed calculation of oauth_body_hash, issue #2792 (@dvishniakov) -- [#2880](https://github.com/request/request/pull/2880) Update hawk to 7.0.7 (#2880) (@kornel-kedzierski) - -### v2.83.0 (2017/09/27) -- [#2776](https://github.com/request/request/pull/2776) Updating tough-cookie due to security fix. (#2776) (@karlnorling) - -### v2.82.0 (2017/09/19) -- [#2703](https://github.com/request/request/pull/2703) Add Node.js v8 to Travis CI (@ryysud) -- [#2751](https://github.com/request/request/pull/2751) Update of hawk and qs to latest version (#2751) (@Olivier-Moreau) -- [#2658](https://github.com/request/request/pull/2658) Fixed some text in README.md (#2658) (@Marketionist) -- [#2635](https://github.com/request/request/pull/2635) chore(package): update aws-sign2 to version 0.7.0 (#2635) (@greenkeeperio-bot) -- [#2641](https://github.com/request/request/pull/2641) Update README to simplify & update convenience methods (#2641) (@FredKSchott) -- [#2541](https://github.com/request/request/pull/2541) Add convenience method for HTTP OPTIONS (#2541) (@jamesseanwright) -- [#2605](https://github.com/request/request/pull/2605) Add promise support section to README (#2605) (@FredKSchott) -- [#2579](https://github.com/request/request/pull/2579) refactor(lint): replace eslint with standard (#2579) (@ahmadnassri) -- [#2598](https://github.com/request/request/pull/2598) Update codecov to version 2.0.2 🚀 (@greenkeeperio-bot) -- [#2590](https://github.com/request/request/pull/2590) Adds test-timing keepAlive test (@nicjansma) -- [#2589](https://github.com/request/request/pull/2589) fix tabulation on request example README.MD (@odykyi) -- [#2594](https://github.com/request/request/pull/2594) chore(dependencies): har-validator to 5.x [removes babel dep] (@ahmadnassri) - -### v2.81.0 (2017/03/09) -- [#2584](https://github.com/request/request/pull/2584) Security issue: Upgrade qs to version 6.4.0 (@sergejmueller) -- [#2578](https://github.com/request/request/pull/2578) safe-buffer doesn't zero-fill by default, its just a polyfill. (#2578) (@mikeal) -- [#2566](https://github.com/request/request/pull/2566) Timings: Tracks 'lookup', adds 'wait' time, fixes connection re-use (#2566) (@nicjansma) -- [#2574](https://github.com/request/request/pull/2574) Migrating to safe-buffer for improved security. (@mikeal) -- [#2573](https://github.com/request/request/pull/2573) fixes #2572 (@ahmadnassri) - -### v2.80.0 (2017/03/04) -- [#2571](https://github.com/request/request/pull/2571) Correctly format the Host header for IPv6 addresses (@JamesMGreene) -- [#2558](https://github.com/request/request/pull/2558) Update README.md example snippet (@FredKSchott) -- [#2221](https://github.com/request/request/pull/2221) Adding a simple Response object reference in argument specification (@calamarico) -- [#2452](https://github.com/request/request/pull/2452) Adds .timings array with DNC, TCP, request and response times (@nicjansma) -- [#2553](https://github.com/request/request/pull/2553) add ISSUE_TEMPLATE, move PR template (@FredKSchott) -- [#2539](https://github.com/request/request/pull/2539) Create PULL_REQUEST_TEMPLATE.md (@FredKSchott) -- [#2524](https://github.com/request/request/pull/2524) Update caseless to version 0.12.0 🚀 (@greenkeeperio-bot) -- [#2460](https://github.com/request/request/pull/2460) Fix wrong MIME type in example (@OwnageIsMagic) -- [#2514](https://github.com/request/request/pull/2514) Change tags to keywords in package.json (@humphd) -- [#2492](https://github.com/request/request/pull/2492) More lenient gzip decompression (@addaleax) - -### v2.79.0 (2016/11/18) -- [#2368](https://github.com/request/request/pull/2368) Fix typeof check in test-pool.js (@forivall) -- [#2394](https://github.com/request/request/pull/2394) Use `files` in package.json (@SimenB) -- [#2463](https://github.com/request/request/pull/2463) AWS support for session tokens for temporary credentials (@simov) -- [#2467](https://github.com/request/request/pull/2467) Migrate to uuid (@simov, @antialias) -- [#2459](https://github.com/request/request/pull/2459) Update taper to version 0.5.0 🚀 (@greenkeeperio-bot) -- [#2448](https://github.com/request/request/pull/2448) Make other connect timeout test more reliable too (@mscdex) - -### v2.78.0 (2016/11/03) -- [#2447](https://github.com/request/request/pull/2447) Always set request timeout on keep-alive connections (@mscdex) - -### v2.77.0 (2016/11/03) -- [#2439](https://github.com/request/request/pull/2439) Fix socket 'connect' listener handling (@mscdex) -- [#2442](https://github.com/request/request/pull/2442) 👻😱 Node.js 0.10 is unmaintained 😱👻 (@greenkeeperio-bot) -- [#2435](https://github.com/request/request/pull/2435) Add followOriginalHttpMethod to redirect to original HTTP method (@kirrg001) -- [#2414](https://github.com/request/request/pull/2414) Improve test-timeout reliability (@mscdex) - -### v2.76.0 (2016/10/25) -- [#2424](https://github.com/request/request/pull/2424) Handle buffers directly instead of using "bl" (@zertosh) -- [#2415](https://github.com/request/request/pull/2415) Re-enable timeout tests on Travis + other fixes (@mscdex) -- [#2431](https://github.com/request/request/pull/2431) Improve timeouts accuracy and node v6.8.0+ compatibility (@mscdex, @greenkeeperio-bot) -- [#2428](https://github.com/request/request/pull/2428) Update qs to version 6.3.0 🚀 (@greenkeeperio-bot) -- [#2420](https://github.com/request/request/pull/2420) change .on to .once, remove possible memory leaks (@duereg) -- [#2426](https://github.com/request/request/pull/2426) Remove "isFunction" helper in favor of "typeof" check (@zertosh) -- [#2425](https://github.com/request/request/pull/2425) Simplify "defer" helper creation (@zertosh) -- [#2402](https://github.com/request/request/pull/2402) form-data@2.1.1 breaks build 🚨 (@greenkeeperio-bot) -- [#2393](https://github.com/request/request/pull/2393) Update form-data to version 2.1.0 🚀 (@greenkeeperio-bot) - -### v2.75.0 (2016/09/17) -- [#2381](https://github.com/request/request/pull/2381) Drop support for Node 0.10 (@simov) -- [#2377](https://github.com/request/request/pull/2377) Update form-data to version 2.0.0 🚀 (@greenkeeperio-bot) -- [#2353](https://github.com/request/request/pull/2353) Add greenkeeper ignored packages (@simov) -- [#2351](https://github.com/request/request/pull/2351) Update karma-tap to version 3.0.1 🚀 (@greenkeeperio-bot) -- [#2348](https://github.com/request/request/pull/2348) form-data@1.0.1 breaks build 🚨 (@greenkeeperio-bot) -- [#2349](https://github.com/request/request/pull/2349) Check error type instead of string (@scotttrinh) - -### v2.74.0 (2016/07/22) -- [#2295](https://github.com/request/request/pull/2295) Update tough-cookie to 2.3.0 (@stash-sfdc) -- [#2280](https://github.com/request/request/pull/2280) Update karma-tap to version 2.0.1 🚀 (@greenkeeperio-bot) - -### v2.73.0 (2016/07/09) -- [#2240](https://github.com/request/request/pull/2240) Remove connectionErrorHandler to fix #1903 (@zarenner) -- [#2251](https://github.com/request/request/pull/2251) tape@4.6.0 breaks build 🚨 (@greenkeeperio-bot) -- [#2225](https://github.com/request/request/pull/2225) Update docs (@ArtskydJ) -- [#2203](https://github.com/request/request/pull/2203) Update browserify to version 13.0.1 🚀 (@greenkeeperio-bot) -- [#2275](https://github.com/request/request/pull/2275) Update karma to version 1.1.1 🚀 (@greenkeeperio-bot) -- [#2204](https://github.com/request/request/pull/2204) Add codecov.yml and disable PR comments (@simov) -- [#2212](https://github.com/request/request/pull/2212) Fix link to http.IncomingMessage documentation (@nazieb) -- [#2208](https://github.com/request/request/pull/2208) Update to form-data RC4 and pass null values to it (@simov) -- [#2207](https://github.com/request/request/pull/2207) Move aws4 require statement to the top (@simov) -- [#2199](https://github.com/request/request/pull/2199) Update karma-coverage to version 1.0.0 🚀 (@greenkeeperio-bot) -- [#2206](https://github.com/request/request/pull/2206) Update qs to version 6.2.0 🚀 (@greenkeeperio-bot) -- [#2205](https://github.com/request/request/pull/2205) Use server-destory to close hanging sockets in tests (@simov) -- [#2200](https://github.com/request/request/pull/2200) Update karma-cli to version 1.0.0 🚀 (@greenkeeperio-bot) - -### v2.72.0 (2016/04/17) -- [#2176](https://github.com/request/request/pull/2176) Do not try to pipe Gzip responses with no body (@simov) -- [#2175](https://github.com/request/request/pull/2175) Add 'delete' alias for the 'del' API method (@simov, @MuhanZou) -- [#2172](https://github.com/request/request/pull/2172) Add support for deflate content encoding (@czardoz) -- [#2169](https://github.com/request/request/pull/2169) Add callback option (@simov) -- [#2165](https://github.com/request/request/pull/2165) Check for self.req existence inside the write method (@simov) -- [#2167](https://github.com/request/request/pull/2167) Fix TravisCI badge reference master branch (@a0viedo) - -### v2.71.0 (2016/04/12) -- [#2164](https://github.com/request/request/pull/2164) Catch errors from the underlying http module (@simov) - -### v2.70.0 (2016/04/05) -- [#2147](https://github.com/request/request/pull/2147) Update eslint to version 2.5.3 🚀 (@simov, @greenkeeperio-bot) -- [#2009](https://github.com/request/request/pull/2009) Support JSON stringify replacer argument. (@elyobo) -- [#2142](https://github.com/request/request/pull/2142) Update eslint to version 2.5.1 🚀 (@greenkeeperio-bot) -- [#2128](https://github.com/request/request/pull/2128) Update browserify-istanbul to version 2.0.0 🚀 (@greenkeeperio-bot) -- [#2115](https://github.com/request/request/pull/2115) Update eslint to version 2.3.0 🚀 (@simov, @greenkeeperio-bot) -- [#2089](https://github.com/request/request/pull/2089) Fix badges (@simov) -- [#2092](https://github.com/request/request/pull/2092) Update browserify-istanbul to version 1.0.0 🚀 (@greenkeeperio-bot) -- [#2079](https://github.com/request/request/pull/2079) Accept read stream as body option (@simov) -- [#2070](https://github.com/request/request/pull/2070) Update bl to version 1.1.2 🚀 (@greenkeeperio-bot) -- [#2063](https://github.com/request/request/pull/2063) Up bluebird and oauth-sign (@simov) -- [#2058](https://github.com/request/request/pull/2058) Karma fixes for latest versions (@eiriksm) -- [#2057](https://github.com/request/request/pull/2057) Update contributing guidelines (@simov) -- [#2054](https://github.com/request/request/pull/2054) Update qs to version 6.1.0 🚀 (@greenkeeperio-bot) - -### v2.69.0 (2016/01/27) -- [#2041](https://github.com/request/request/pull/2041) restore aws4 as regular dependency (@rmg) - -### v2.68.0 (2016/01/27) -- [#2036](https://github.com/request/request/pull/2036) Add AWS Signature Version 4 (@simov, @mirkods) -- [#2022](https://github.com/request/request/pull/2022) Convert numeric multipart bodies to string (@simov, @feross) -- [#2024](https://github.com/request/request/pull/2024) Update har-validator dependency for nsp advisory #76 (@TylerDixon) -- [#2016](https://github.com/request/request/pull/2016) Update qs to version 6.0.2 🚀 (@greenkeeperio-bot) -- [#2007](https://github.com/request/request/pull/2007) Use the `extend` module instead of util._extend (@simov) -- [#2003](https://github.com/request/request/pull/2003) Update browserify to version 13.0.0 🚀 (@greenkeeperio-bot) -- [#1989](https://github.com/request/request/pull/1989) Update buffer-equal to version 1.0.0 🚀 (@greenkeeperio-bot) -- [#1956](https://github.com/request/request/pull/1956) Check form-data content-length value before setting up the header (@jongyoonlee) -- [#1958](https://github.com/request/request/pull/1958) Use IncomingMessage.destroy method (@simov) -- [#1952](https://github.com/request/request/pull/1952) Adds example for Tor proxy (@prometheansacrifice) -- [#1943](https://github.com/request/request/pull/1943) Update eslint to version 1.10.3 🚀 (@simov, @greenkeeperio-bot) -- [#1924](https://github.com/request/request/pull/1924) Update eslint to version 1.10.1 🚀 (@greenkeeperio-bot) -- [#1915](https://github.com/request/request/pull/1915) Remove content-length and transfer-encoding headers from defaultProxyHeaderWhiteList (@yaxia) - -### v2.67.0 (2015/11/19) -- [#1913](https://github.com/request/request/pull/1913) Update http-signature to version 1.1.0 🚀 (@greenkeeperio-bot) - -### v2.66.0 (2015/11/18) -- [#1906](https://github.com/request/request/pull/1906) Update README URLs based on HTTP redirects (@ReadmeCritic) -- [#1905](https://github.com/request/request/pull/1905) Convert typed arrays into regular buffers (@simov) -- [#1902](https://github.com/request/request/pull/1902) node-uuid@1.4.7 breaks build 🚨 (@greenkeeperio-bot) -- [#1894](https://github.com/request/request/pull/1894) Fix tunneling after redirection from https (Original: #1881) (@simov, @falms) -- [#1893](https://github.com/request/request/pull/1893) Update eslint to version 1.9.0 🚀 (@greenkeeperio-bot) -- [#1852](https://github.com/request/request/pull/1852) Update eslint to version 1.7.3 🚀 (@simov, @greenkeeperio-bot, @paulomcnally, @michelsalib, @arbaaz, @nsklkn, @LoicMahieu, @JoshWillik, @jzaefferer, @ryanwholey, @djchie, @thisconnect, @mgenereu, @acroca, @Sebmaster, @KoltesDigital) -- [#1876](https://github.com/request/request/pull/1876) Implement loose matching for har mime types (@simov) -- [#1875](https://github.com/request/request/pull/1875) Update bluebird to version 3.0.2 🚀 (@simov, @greenkeeperio-bot) -- [#1871](https://github.com/request/request/pull/1871) Update browserify to version 12.0.1 🚀 (@greenkeeperio-bot) -- [#1866](https://github.com/request/request/pull/1866) Add missing quotes on x-token property in README (@miguelmota) -- [#1874](https://github.com/request/request/pull/1874) Fix typo in README.md (@gswalden) -- [#1860](https://github.com/request/request/pull/1860) Improve referer header tests and docs (@simov) -- [#1861](https://github.com/request/request/pull/1861) Remove redundant call to Stream constructor (@watson) -- [#1857](https://github.com/request/request/pull/1857) Fix Referer header to point to the original host name (@simov) -- [#1850](https://github.com/request/request/pull/1850) Update karma-coverage to version 0.5.3 🚀 (@greenkeeperio-bot) -- [#1847](https://github.com/request/request/pull/1847) Use node's latest version when building (@simov) -- [#1836](https://github.com/request/request/pull/1836) Tunnel: fix wrong property name (@KoltesDigital) -- [#1820](https://github.com/request/request/pull/1820) Set href as request.js uses it (@mgenereu) -- [#1840](https://github.com/request/request/pull/1840) Update http-signature to version 1.0.2 🚀 (@greenkeeperio-bot) -- [#1845](https://github.com/request/request/pull/1845) Update istanbul to version 0.4.0 🚀 (@greenkeeperio-bot) - -### v2.65.0 (2015/10/11) -- [#1833](https://github.com/request/request/pull/1833) Update aws-sign2 to version 0.6.0 🚀 (@greenkeeperio-bot) -- [#1811](https://github.com/request/request/pull/1811) Enable loose cookie parsing in tough-cookie (@Sebmaster) -- [#1830](https://github.com/request/request/pull/1830) Bring back tilde ranges for all dependencies (@simov) -- [#1821](https://github.com/request/request/pull/1821) Implement support for RFC 2617 MD5-sess algorithm. (@BigDSK) -- [#1828](https://github.com/request/request/pull/1828) Updated qs dependency to 5.2.0 (@acroca) -- [#1818](https://github.com/request/request/pull/1818) Extract `readResponseBody` method out of `onRequestResponse` (@pvoisin) -- [#1819](https://github.com/request/request/pull/1819) Run stringify once (@mgenereu) -- [#1814](https://github.com/request/request/pull/1814) Updated har-validator to version 2.0.2 (@greenkeeperio-bot) -- [#1807](https://github.com/request/request/pull/1807) Updated tough-cookie to version 2.1.0 (@greenkeeperio-bot) -- [#1800](https://github.com/request/request/pull/1800) Add caret ranges for devDependencies, except eslint (@simov) -- [#1799](https://github.com/request/request/pull/1799) Updated karma-browserify to version 4.4.0 (@greenkeeperio-bot) -- [#1797](https://github.com/request/request/pull/1797) Updated tape to version 4.2.0 (@greenkeeperio-bot) -- [#1788](https://github.com/request/request/pull/1788) Pinned all dependencies (@greenkeeperio-bot) - -### v2.64.0 (2015/09/25) -- [#1787](https://github.com/request/request/pull/1787) npm ignore examples, release.sh and disabled.appveyor.yml (@thisconnect) -- [#1775](https://github.com/request/request/pull/1775) Fix typo in README.md (@djchie) -- [#1776](https://github.com/request/request/pull/1776) Changed word 'conjuction' to read 'conjunction' in README.md (@ryanwholey) -- [#1785](https://github.com/request/request/pull/1785) Revert: Set default application/json content-type when using json option #1772 (@simov) - -### v2.63.0 (2015/09/21) -- [#1772](https://github.com/request/request/pull/1772) Set default application/json content-type when using json option (@jzaefferer) - -### v2.62.0 (2015/09/15) -- [#1768](https://github.com/request/request/pull/1768) Add node 4.0 to the list of build targets (@simov) -- [#1767](https://github.com/request/request/pull/1767) Query strings now cooperate with unix sockets (@JoshWillik) -- [#1750](https://github.com/request/request/pull/1750) Revert doc about installation of tough-cookie added in #884 (@LoicMahieu) -- [#1746](https://github.com/request/request/pull/1746) Missed comma in Readme (@nsklkn) -- [#1743](https://github.com/request/request/pull/1743) Fix options not being initialized in defaults method (@simov) - -### v2.61.0 (2015/08/19) -- [#1721](https://github.com/request/request/pull/1721) Minor fix in README.md (@arbaaz) -- [#1733](https://github.com/request/request/pull/1733) Avoid useless Buffer transformation (@michelsalib) -- [#1726](https://github.com/request/request/pull/1726) Update README.md (@paulomcnally) -- [#1715](https://github.com/request/request/pull/1715) Fix forever option in node > 0.10 #1709 (@calibr) -- [#1716](https://github.com/request/request/pull/1716) Do not create Buffer from Object in setContentLength(iojs v3.0 issue) (@calibr) -- [#1711](https://github.com/request/request/pull/1711) Add ability to detect connect timeouts (@kevinburke) -- [#1712](https://github.com/request/request/pull/1712) Set certificate expiration to August 2, 2018 (@kevinburke) -- [#1700](https://github.com/request/request/pull/1700) debug() when JSON.parse() on a response body fails (@phillipj) - -### v2.60.0 (2015/07/21) -- [#1687](https://github.com/request/request/pull/1687) Fix caseless bug - content-type not being set for multipart/form-data (@simov, @garymathews) - -### v2.59.0 (2015/07/20) -- [#1671](https://github.com/request/request/pull/1671) Add tests and docs for using the agent, agentClass, agentOptions and forever options. - Forever option defaults to using http(s).Agent in node 0.12+ (@simov) -- [#1679](https://github.com/request/request/pull/1679) Fix - do not remove OAuth param when using OAuth realm (@simov, @jhalickman) -- [#1668](https://github.com/request/request/pull/1668) updated dependencies (@deamme) -- [#1656](https://github.com/request/request/pull/1656) Fix form method (@simov) -- [#1651](https://github.com/request/request/pull/1651) Preserve HEAD method when using followAllRedirects (@simov) -- [#1652](https://github.com/request/request/pull/1652) Update `encoding` option documentation in README.md (@daniel347x) -- [#1650](https://github.com/request/request/pull/1650) Allow content-type overriding when using the `form` option (@simov) -- [#1646](https://github.com/request/request/pull/1646) Clarify the nature of setting `ca` in `agentOptions` (@jeffcharles) - -### v2.58.0 (2015/06/16) -- [#1638](https://github.com/request/request/pull/1638) Use the `extend` module to deep extend in the defaults method (@simov) -- [#1631](https://github.com/request/request/pull/1631) Move tunnel logic into separate module (@simov) -- [#1634](https://github.com/request/request/pull/1634) Fix OAuth query transport_method (@simov) -- [#1603](https://github.com/request/request/pull/1603) Add codecov (@simov) - -### v2.57.0 (2015/05/31) -- [#1615](https://github.com/request/request/pull/1615) Replace '.client' with '.socket' as the former was deprecated in 2.2.0. (@ChALkeR) - -### v2.56.0 (2015/05/28) -- [#1610](https://github.com/request/request/pull/1610) Bump module dependencies (@simov) -- [#1600](https://github.com/request/request/pull/1600) Extract the querystring logic into separate module (@simov) -- [#1607](https://github.com/request/request/pull/1607) Re-generate certificates (@simov) -- [#1599](https://github.com/request/request/pull/1599) Move getProxyFromURI logic below the check for Invaild URI (#1595) (@simov) -- [#1598](https://github.com/request/request/pull/1598) Fix the way http verbs are defined in order to please intellisense IDEs (@simov, @flannelJesus) -- [#1591](https://github.com/request/request/pull/1591) A few minor fixes: (@simov) -- [#1584](https://github.com/request/request/pull/1584) Refactor test-default tests (according to comments in #1430) (@simov) -- [#1585](https://github.com/request/request/pull/1585) Fixing documentation regarding TLS options (#1583) (@mainakae) -- [#1574](https://github.com/request/request/pull/1574) Refresh the oauth_nonce on redirect (#1573) (@simov) -- [#1570](https://github.com/request/request/pull/1570) Discovered tests that weren't properly running (@seanstrom) -- [#1569](https://github.com/request/request/pull/1569) Fix pause before response arrives (@kevinoid) -- [#1558](https://github.com/request/request/pull/1558) Emit error instead of throw (@simov) -- [#1568](https://github.com/request/request/pull/1568) Fix stall when piping gzipped response (@kevinoid) -- [#1560](https://github.com/request/request/pull/1560) Update combined-stream (@apechimp) -- [#1543](https://github.com/request/request/pull/1543) Initial support for oauth_body_hash on json payloads (@simov, @aesopwolf) -- [#1541](https://github.com/request/request/pull/1541) Fix coveralls (@simov) -- [#1540](https://github.com/request/request/pull/1540) Fix recursive defaults for convenience methods (@simov) -- [#1536](https://github.com/request/request/pull/1536) More eslint style rules (@froatsnook) -- [#1533](https://github.com/request/request/pull/1533) Adding dependency status bar to README.md (@YasharF) -- [#1539](https://github.com/request/request/pull/1539) ensure the latest version of har-validator is included (@ahmadnassri) -- [#1516](https://github.com/request/request/pull/1516) forever+pool test (@devTristan) - -### v2.55.0 (2015/04/05) -- [#1520](https://github.com/request/request/pull/1520) Refactor defaults (@simov) -- [#1525](https://github.com/request/request/pull/1525) Delete request headers with undefined value. (@froatsnook) -- [#1521](https://github.com/request/request/pull/1521) Add promise tests (@simov) -- [#1518](https://github.com/request/request/pull/1518) Fix defaults (@simov) -- [#1515](https://github.com/request/request/pull/1515) Allow static invoking of convenience methods (@simov) -- [#1505](https://github.com/request/request/pull/1505) Fix multipart boundary extraction regexp (@simov) -- [#1510](https://github.com/request/request/pull/1510) Fix basic auth form data (@simov) - -### v2.54.0 (2015/03/24) -- [#1501](https://github.com/request/request/pull/1501) HTTP Archive 1.2 support (@ahmadnassri) -- [#1486](https://github.com/request/request/pull/1486) Add a test for the forever agent (@akshayp) -- [#1500](https://github.com/request/request/pull/1500) Adding handling for no auth method and null bearer (@philberg) -- [#1498](https://github.com/request/request/pull/1498) Add table of contents in readme (@simov) -- [#1477](https://github.com/request/request/pull/1477) Add support for qs options via qsOptions key (@simov) -- [#1496](https://github.com/request/request/pull/1496) Parameters encoded to base 64 should be decoded as UTF-8, not ASCII. (@albanm) -- [#1494](https://github.com/request/request/pull/1494) Update eslint (@froatsnook) -- [#1474](https://github.com/request/request/pull/1474) Require Colon in Basic Auth (@erykwalder) -- [#1481](https://github.com/request/request/pull/1481) Fix baseUrl and redirections. (@burningtree) -- [#1469](https://github.com/request/request/pull/1469) Feature/base url (@froatsnook) -- [#1459](https://github.com/request/request/pull/1459) Add option to time request/response cycle (including rollup of redirects) (@aaron-em) -- [#1468](https://github.com/request/request/pull/1468) Re-enable io.js/node 0.12 build (@simov, @mikeal, @BBB) -- [#1442](https://github.com/request/request/pull/1442) Fixed the issue with strictSSL tests on 0.12 & io.js by explicitly setting a cipher that matches the cert. (@BBB, @nickmccurdy, @demohi, @simov, @0x4139) -- [#1460](https://github.com/request/request/pull/1460) localAddress or proxy config is lost when redirecting (@simov, @0x4139) -- [#1453](https://github.com/request/request/pull/1453) Test on Node.js 0.12 and io.js with allowed failures (@nickmccurdy, @demohi) -- [#1426](https://github.com/request/request/pull/1426) Fixing tests to pass on io.js and node 0.12 (only test-https.js stiff failing) (@mikeal) -- [#1446](https://github.com/request/request/pull/1446) Missing HTTP referer header with redirects Fixes #1038 (@simov, @guimon) -- [#1428](https://github.com/request/request/pull/1428) Deprecate Node v0.8.x (@nylen) -- [#1436](https://github.com/request/request/pull/1436) Add ability to set a requester without setting default options (@tikotzky) -- [#1435](https://github.com/request/request/pull/1435) dry up verb methods (@sethpollack) -- [#1423](https://github.com/request/request/pull/1423) Allow fully qualified multipart content-type header (@simov) -- [#1430](https://github.com/request/request/pull/1430) Fix recursive requester (@tikotzky) -- [#1429](https://github.com/request/request/pull/1429) Throw error when making HEAD request with a body (@tikotzky) -- [#1419](https://github.com/request/request/pull/1419) Add note that the project is broken in 0.12.x (@nylen) -- [#1413](https://github.com/request/request/pull/1413) Fix basic auth (@simov) -- [#1397](https://github.com/request/request/pull/1397) Improve pipe-from-file tests (@nylen) - -### v2.53.0 (2015/02/02) -- [#1396](https://github.com/request/request/pull/1396) Do not rfc3986 escape JSON bodies (@nylen, @simov) -- [#1392](https://github.com/request/request/pull/1392) Improve `timeout` option description (@watson) - -### v2.52.0 (2015/02/02) -- [#1383](https://github.com/request/request/pull/1383) Add missing HTTPS options that were not being passed to tunnel (@brichard19) (@nylen) -- [#1388](https://github.com/request/request/pull/1388) Upgrade mime-types package version (@roderickhsiao) -- [#1389](https://github.com/request/request/pull/1389) Revise Setup Tunnel Function (@seanstrom) -- [#1374](https://github.com/request/request/pull/1374) Allow explicitly disabling tunneling for proxied https destinations (@nylen) -- [#1376](https://github.com/request/request/pull/1376) Use karma-browserify for tests. Add browser test coverage reporter. (@eiriksm) -- [#1366](https://github.com/request/request/pull/1366) Refactor OAuth into separate module (@simov) -- [#1373](https://github.com/request/request/pull/1373) Rewrite tunnel test to be pure Node.js (@nylen) -- [#1371](https://github.com/request/request/pull/1371) Upgrade test reporter (@nylen) -- [#1360](https://github.com/request/request/pull/1360) Refactor basic, bearer, digest auth logic into separate class (@simov) -- [#1354](https://github.com/request/request/pull/1354) Remove circular dependency from debugging code (@nylen) -- [#1351](https://github.com/request/request/pull/1351) Move digest auth into private prototype method (@simov) -- [#1352](https://github.com/request/request/pull/1352) Update hawk dependency to ~2.3.0 (@mridgway) -- [#1353](https://github.com/request/request/pull/1353) Correct travis-ci badge (@dogancelik) -- [#1349](https://github.com/request/request/pull/1349) Make sure we return on errored browser requests. (@eiriksm) -- [#1346](https://github.com/request/request/pull/1346) getProxyFromURI Extraction Refactor (@seanstrom) -- [#1337](https://github.com/request/request/pull/1337) Standardize test ports on 6767 (@nylen) -- [#1341](https://github.com/request/request/pull/1341) Emit FormData error events as Request error events (@nylen, @rwky) -- [#1343](https://github.com/request/request/pull/1343) Clean up readme badges, and add Travis and Coveralls badges (@nylen) -- [#1345](https://github.com/request/request/pull/1345) Update README.md (@Aaron-Hartwig) -- [#1338](https://github.com/request/request/pull/1338) Always wait for server.close() callback in tests (@nylen) -- [#1342](https://github.com/request/request/pull/1342) Add mock https server and redo start of browser tests for this purpose. (@eiriksm) -- [#1339](https://github.com/request/request/pull/1339) Improve auth docs (@nylen) -- [#1335](https://github.com/request/request/pull/1335) Add support for OAuth plaintext signature method (@simov) -- [#1332](https://github.com/request/request/pull/1332) Add clean script to remove test-browser.js after the tests run (@seanstrom) -- [#1327](https://github.com/request/request/pull/1327) Fix errors generating coverage reports. (@nylen) -- [#1330](https://github.com/request/request/pull/1330) Return empty buffer upon empty response body and encoding is set to null (@seanstrom) -- [#1326](https://github.com/request/request/pull/1326) Use faster container-based infrastructure on Travis (@nylen) -- [#1315](https://github.com/request/request/pull/1315) Implement rfc3986 option (@simov, @nylen, @apoco, @DullReferenceException, @mmalecki, @oliamb, @cliffcrosland, @LewisJEllis, @eiriksm, @poislagarde) -- [#1314](https://github.com/request/request/pull/1314) Detect urlencoded form data header via regex (@simov) -- [#1317](https://github.com/request/request/pull/1317) Improve OAuth1.0 server side flow example (@simov) - -### v2.51.0 (2014/12/10) -- [#1310](https://github.com/request/request/pull/1310) Revert changes introduced in https://github.com/request/request/pull/1282 (@simov) - -### v2.50.0 (2014/12/09) -- [#1308](https://github.com/request/request/pull/1308) Add browser test to keep track of browserify compability. (@eiriksm) -- [#1299](https://github.com/request/request/pull/1299) Add optional support for jsonReviver (@poislagarde) -- [#1277](https://github.com/request/request/pull/1277) Add Coveralls configuration (@simov) -- [#1307](https://github.com/request/request/pull/1307) Upgrade form-data, add back browserify compability. Fixes #455. (@eiriksm) -- [#1305](https://github.com/request/request/pull/1305) Fix typo in README.md (@LewisJEllis) -- [#1288](https://github.com/request/request/pull/1288) Update README.md to explain custom file use case (@cliffcrosland) - -### v2.49.0 (2014/11/28) -- [#1295](https://github.com/request/request/pull/1295) fix(proxy): no-proxy false positive (@oliamb) -- [#1292](https://github.com/request/request/pull/1292) Upgrade `caseless` to 0.8.1 (@mmalecki) -- [#1276](https://github.com/request/request/pull/1276) Set transfer encoding for multipart/related to chunked by default (@simov) -- [#1275](https://github.com/request/request/pull/1275) Fix multipart content-type headers detection (@simov) -- [#1269](https://github.com/request/request/pull/1269) adds streams example for review (@tbuchok) -- [#1238](https://github.com/request/request/pull/1238) Add examples README.md (@simov) - -### v2.48.0 (2014/11/12) -- [#1263](https://github.com/request/request/pull/1263) Fixed a syntax error / typo in README.md (@xna2) -- [#1253](https://github.com/request/request/pull/1253) Add multipart chunked flag (@simov, @nylen) -- [#1251](https://github.com/request/request/pull/1251) Clarify that defaults() does not modify global defaults (@nylen) -- [#1250](https://github.com/request/request/pull/1250) Improve documentation for pool and maxSockets options (@nylen) -- [#1237](https://github.com/request/request/pull/1237) Documenting error handling when using streams (@vmattos) -- [#1244](https://github.com/request/request/pull/1244) Finalize changelog command (@nylen) -- [#1241](https://github.com/request/request/pull/1241) Fix typo (@alexanderGugel) -- [#1223](https://github.com/request/request/pull/1223) Show latest version number instead of "upcoming" in changelog (@nylen) -- [#1236](https://github.com/request/request/pull/1236) Document how to use custom CA in README (#1229) (@hypesystem) -- [#1228](https://github.com/request/request/pull/1228) Support for oauth with RSA-SHA1 signing (@nylen) -- [#1216](https://github.com/request/request/pull/1216) Made json and multipart options coexist (@nylen, @simov) -- [#1225](https://github.com/request/request/pull/1225) Allow header white/exclusive lists in any case. (@RReverser) - -### v2.47.0 (2014/10/26) -- [#1222](https://github.com/request/request/pull/1222) Move from mikeal/request to request/request (@nylen) -- [#1220](https://github.com/request/request/pull/1220) update qs dependency to 2.3.1 (@FredKSchott) -- [#1212](https://github.com/request/request/pull/1212) Improve tests/test-timeout.js (@nylen) -- [#1219](https://github.com/request/request/pull/1219) remove old globalAgent workaround for node 0.4 (@request) -- [#1214](https://github.com/request/request/pull/1214) Remove cruft left over from optional dependencies (@nylen) -- [#1215](https://github.com/request/request/pull/1215) Add proxyHeaderExclusiveList option for proxy-only headers. (@RReverser) -- [#1211](https://github.com/request/request/pull/1211) Allow 'Host' header instead of 'host' and remember case across redirects (@nylen) -- [#1208](https://github.com/request/request/pull/1208) Improve release script (@nylen) -- [#1213](https://github.com/request/request/pull/1213) Support for custom cookie store (@nylen, @mitsuru) -- [#1197](https://github.com/request/request/pull/1197) Clean up some code around setting the agent (@FredKSchott) -- [#1209](https://github.com/request/request/pull/1209) Improve multipart form append test (@simov) -- [#1207](https://github.com/request/request/pull/1207) Update changelog (@nylen) -- [#1185](https://github.com/request/request/pull/1185) Stream multipart/related bodies (@simov) - -### v2.46.0 (2014/10/23) -- [#1198](https://github.com/request/request/pull/1198) doc for TLS/SSL protocol options (@shawnzhu) -- [#1200](https://github.com/request/request/pull/1200) Add a Gitter chat badge to README.md (@gitter-badger) -- [#1196](https://github.com/request/request/pull/1196) Upgrade taper test reporter to v0.3.0 (@nylen) -- [#1199](https://github.com/request/request/pull/1199) Fix lint error: undeclared var i (@nylen) -- [#1191](https://github.com/request/request/pull/1191) Move self.proxy decision logic out of init and into a helper (@FredKSchott) -- [#1190](https://github.com/request/request/pull/1190) Move _buildRequest() logic back into init (@FredKSchott) -- [#1186](https://github.com/request/request/pull/1186) Support Smarter Unix URL Scheme (@FredKSchott) -- [#1178](https://github.com/request/request/pull/1178) update form documentation for new usage (@FredKSchott) -- [#1180](https://github.com/request/request/pull/1180) Enable no-mixed-requires linting rule (@nylen) -- [#1184](https://github.com/request/request/pull/1184) Don't forward authorization header across redirects to different hosts (@nylen) -- [#1183](https://github.com/request/request/pull/1183) Correct README about pre and postamble CRLF using multipart and not mult... (@netpoetica) -- [#1179](https://github.com/request/request/pull/1179) Lint tests directory (@nylen) -- [#1169](https://github.com/request/request/pull/1169) add metadata for form-data file field (@dotcypress) -- [#1173](https://github.com/request/request/pull/1173) remove optional dependencies (@seanstrom) -- [#1165](https://github.com/request/request/pull/1165) Cleanup event listeners and remove function creation from init (@FredKSchott) -- [#1174](https://github.com/request/request/pull/1174) update the request.cookie docs to have a valid cookie example (@seanstrom) -- [#1168](https://github.com/request/request/pull/1168) create a detach helper and use detach helper in replace of nextTick (@seanstrom) -- [#1171](https://github.com/request/request/pull/1171) in post can send form data and use callback (@MiroRadenovic) -- [#1159](https://github.com/request/request/pull/1159) accept charset for x-www-form-urlencoded content-type (@seanstrom) -- [#1157](https://github.com/request/request/pull/1157) Update README.md: body with json=true (@Rob--W) -- [#1164](https://github.com/request/request/pull/1164) Disable tests/test-timeout.js on Travis (@nylen) -- [#1153](https://github.com/request/request/pull/1153) Document how to run a single test (@nylen) -- [#1144](https://github.com/request/request/pull/1144) adds documentation for the "response" event within the streaming section (@tbuchok) -- [#1162](https://github.com/request/request/pull/1162) Update eslintrc file to no longer allow past errors (@FredKSchott) -- [#1155](https://github.com/request/request/pull/1155) Support/use self everywhere (@seanstrom) -- [#1161](https://github.com/request/request/pull/1161) fix no-use-before-define lint warnings (@emkay) -- [#1156](https://github.com/request/request/pull/1156) adding curly brackets to get rid of lint errors (@emkay) -- [#1151](https://github.com/request/request/pull/1151) Fix localAddress test on OS X (@nylen) -- [#1145](https://github.com/request/request/pull/1145) documentation: fix outdated reference to setCookieSync old name in README (@FredKSchott) -- [#1131](https://github.com/request/request/pull/1131) Update pool documentation (@FredKSchott) -- [#1143](https://github.com/request/request/pull/1143) Rewrite all tests to use tape (@nylen) -- [#1137](https://github.com/request/request/pull/1137) Add ability to specifiy querystring lib in options. (@jgrund) -- [#1138](https://github.com/request/request/pull/1138) allow hostname and port in place of host on uri (@cappslock) -- [#1134](https://github.com/request/request/pull/1134) Fix multiple redirects and `self.followRedirect` (@blakeembrey) -- [#1130](https://github.com/request/request/pull/1130) documentation fix: add note about npm test for contributing (@FredKSchott) -- [#1120](https://github.com/request/request/pull/1120) Support/refactor request setup tunnel (@seanstrom) -- [#1129](https://github.com/request/request/pull/1129) linting fix: convert double quote strings to use single quotes (@FredKSchott) -- [#1124](https://github.com/request/request/pull/1124) linting fix: remove unneccesary semi-colons (@FredKSchott) - -### v2.45.0 (2014/10/06) -- [#1128](https://github.com/request/request/pull/1128) Add test for setCookie regression (@nylen) -- [#1127](https://github.com/request/request/pull/1127) added tests around using objects as values in a query string (@bcoe) -- [#1103](https://github.com/request/request/pull/1103) Support/refactor request constructor (@nylen, @seanstrom) -- [#1119](https://github.com/request/request/pull/1119) add basic linting to request library (@FredKSchott) -- [#1121](https://github.com/request/request/pull/1121) Revert "Explicitly use sync versions of cookie functions" (@nylen) -- [#1118](https://github.com/request/request/pull/1118) linting fix: Restructure bad empty if statement (@FredKSchott) -- [#1117](https://github.com/request/request/pull/1117) Fix a bad check for valid URIs (@FredKSchott) -- [#1113](https://github.com/request/request/pull/1113) linting fix: space out operators (@FredKSchott) -- [#1116](https://github.com/request/request/pull/1116) Fix typo in `noProxyHost` definition (@FredKSchott) -- [#1114](https://github.com/request/request/pull/1114) linting fix: Added a `new` operator that was missing when creating and throwing a new error (@FredKSchott) -- [#1096](https://github.com/request/request/pull/1096) No_proxy support (@samcday) -- [#1107](https://github.com/request/request/pull/1107) linting-fix: remove unused variables (@FredKSchott) -- [#1112](https://github.com/request/request/pull/1112) linting fix: Make return values consistent and more straitforward (@FredKSchott) -- [#1111](https://github.com/request/request/pull/1111) linting fix: authPieces was getting redeclared (@FredKSchott) -- [#1105](https://github.com/request/request/pull/1105) Use strict mode in request (@FredKSchott) -- [#1110](https://github.com/request/request/pull/1110) linting fix: replace lazy '==' with more strict '===' (@FredKSchott) -- [#1109](https://github.com/request/request/pull/1109) linting fix: remove function call from if-else conditional statement (@FredKSchott) -- [#1102](https://github.com/request/request/pull/1102) Fix to allow setting a `requester` on recursive calls to `request.defaults` (@tikotzky) -- [#1095](https://github.com/request/request/pull/1095) Tweaking engines in package.json (@pdehaan) -- [#1082](https://github.com/request/request/pull/1082) Forward the socket event from the httpModule request (@seanstrom) -- [#972](https://github.com/request/request/pull/972) Clarify gzip handling in the README (@kevinoid) -- [#1089](https://github.com/request/request/pull/1089) Mention that encoding defaults to utf8, not Buffer (@stuartpb) -- [#1088](https://github.com/request/request/pull/1088) Fix cookie example in README.md and make it more clear (@pipi32167) -- [#1027](https://github.com/request/request/pull/1027) Add support for multipart form data in request options. (@crocket) -- [#1076](https://github.com/request/request/pull/1076) use Request.abort() to abort the request when the request has timed-out (@seanstrom) -- [#1068](https://github.com/request/request/pull/1068) add optional postamble required by .NET multipart requests (@netpoetica) - -### v2.43.0 (2014/09/18) -- [#1057](https://github.com/request/request/pull/1057) Defaults should not overwrite defined options (@davidwood) -- [#1046](https://github.com/request/request/pull/1046) Propagate datastream errors, useful in case gzip fails. (@ZJONSSON, @Janpot) -- [#1063](https://github.com/request/request/pull/1063) copy the input headers object #1060 (@finnp) -- [#1031](https://github.com/request/request/pull/1031) Explicitly use sync versions of cookie functions (@ZJONSSON) -- [#1056](https://github.com/request/request/pull/1056) Fix redirects when passing url.parse(x) as URL to convenience method (@nylen) - -### v2.42.0 (2014/09/04) -- [#1053](https://github.com/request/request/pull/1053) Fix #1051 Parse auth properly when using non-tunneling proxy (@isaacs) - -### v2.41.0 (2014/09/04) -- [#1050](https://github.com/request/request/pull/1050) Pass whitelisted headers to tunneling proxy. Organize all tunneling logic. (@isaacs, @Feldhacker) -- [#1035](https://github.com/request/request/pull/1035) souped up nodei.co badge (@rvagg) -- [#1048](https://github.com/request/request/pull/1048) Aws is now possible over a proxy (@steven-aerts) -- [#1039](https://github.com/request/request/pull/1039) extract out helper functions to a helper file (@seanstrom) -- [#1021](https://github.com/request/request/pull/1021) Support/refactor indexjs (@seanstrom) -- [#1033](https://github.com/request/request/pull/1033) Improve and document debug options (@nylen) -- [#1034](https://github.com/request/request/pull/1034) Fix readme headings (@nylen) -- [#1030](https://github.com/request/request/pull/1030) Allow recursive request.defaults (@tikotzky) -- [#1029](https://github.com/request/request/pull/1029) Fix a couple of typos (@nylen) -- [#675](https://github.com/request/request/pull/675) Checking for SSL fault on connection before reading SSL properties (@VRMink) -- [#989](https://github.com/request/request/pull/989) Added allowRedirect function. Should return true if redirect is allowed or false otherwise (@doronin) -- [#1025](https://github.com/request/request/pull/1025) [fixes #1023] Set self._ended to true once response has ended (@mridgway) -- [#1020](https://github.com/request/request/pull/1020) Add back removed debug metadata (@FredKSchott) -- [#1008](https://github.com/request/request/pull/1008) Moving to module instead of cutomer buffer concatenation. (@mikeal) -- [#770](https://github.com/request/request/pull/770) Added dependency badge for README file; (@timgluz, @mafintosh, @lalitkapoor, @stash, @bobyrizov) -- [#1016](https://github.com/request/request/pull/1016) toJSON no longer results in an infinite loop, returns simple objects (@FredKSchott) -- [#1018](https://github.com/request/request/pull/1018) Remove pre-0.4.4 HTTPS fix (@mmalecki) -- [#1006](https://github.com/request/request/pull/1006) Migrate to caseless, fixes #1001 (@mikeal) -- [#995](https://github.com/request/request/pull/995) Fix parsing array of objects (@sjonnet19) -- [#999](https://github.com/request/request/pull/999) Fix fallback for browserify for optional modules. (@eiriksm) -- [#996](https://github.com/request/request/pull/996) Wrong oauth signature when multiple same param keys exist [updated] (@bengl) - -### v2.40.0 (2014/08/06) -- [#992](https://github.com/request/request/pull/992) Fix security vulnerability. Update qs (@poeticninja) -- [#988](https://github.com/request/request/pull/988) “--” -> “—” (@upisfree) -- [#987](https://github.com/request/request/pull/987) Show optional modules as being loaded by the module that reqeusted them (@iarna) - -### v2.39.0 (2014/07/24) -- [#976](https://github.com/request/request/pull/976) Update README.md (@pvoznenko) - -### v2.38.0 (2014/07/22) -- [#952](https://github.com/request/request/pull/952) Adding support to client certificate with proxy use case (@ofirshaked) -- [#884](https://github.com/request/request/pull/884) Documented tough-cookie installation. (@wbyoung) -- [#935](https://github.com/request/request/pull/935) Correct repository url (@fritx) -- [#963](https://github.com/request/request/pull/963) Update changelog (@nylen) -- [#960](https://github.com/request/request/pull/960) Support gzip with encoding on node pre-v0.9.4 (@kevinoid) -- [#953](https://github.com/request/request/pull/953) Add async Content-Length computation when using form-data (@LoicMahieu) -- [#844](https://github.com/request/request/pull/844) Add support for HTTP[S]_PROXY environment variables. Fixes #595. (@jvmccarthy) -- [#946](https://github.com/request/request/pull/946) defaults: merge headers (@aj0strow) - -### v2.37.0 (2014/07/07) -- [#957](https://github.com/request/request/pull/957) Silence EventEmitter memory leak warning #311 (@watson) -- [#955](https://github.com/request/request/pull/955) check for content-length header before setting it in nextTick (@camilleanne) -- [#951](https://github.com/request/request/pull/951) Add support for gzip content decoding (@kevinoid) -- [#949](https://github.com/request/request/pull/949) Manually enter querystring in form option (@charlespwd) -- [#944](https://github.com/request/request/pull/944) Make request work with browserify (@eiriksm) -- [#943](https://github.com/request/request/pull/943) New mime module (@eiriksm) -- [#927](https://github.com/request/request/pull/927) Bump version of hawk dep. (@samccone) -- [#907](https://github.com/request/request/pull/907) append secureOptions to poolKey (@medovob) - -### v2.35.0 (2014/05/17) -- [#901](https://github.com/request/request/pull/901) Fixes #555 (@pigulla) -- [#897](https://github.com/request/request/pull/897) merge with default options (@vohof) -- [#891](https://github.com/request/request/pull/891) fixes 857 - options object is mutated by calling request (@lalitkapoor) -- [#869](https://github.com/request/request/pull/869) Pipefilter test (@tgohn) -- [#866](https://github.com/request/request/pull/866) Fix typo (@dandv) -- [#861](https://github.com/request/request/pull/861) Add support for RFC 6750 Bearer Tokens (@phedny) -- [#809](https://github.com/request/request/pull/809) upgrade tunnel-proxy to 0.4.0 (@ksato9700) -- [#850](https://github.com/request/request/pull/850) Fix word consistency in readme (@0xNobody) -- [#810](https://github.com/request/request/pull/810) add some exposition to mpu example in README.md (@mikermcneil) -- [#840](https://github.com/request/request/pull/840) improve error reporting for invalid protocols (@FND) -- [#821](https://github.com/request/request/pull/821) added secureOptions back (@nw) -- [#815](https://github.com/request/request/pull/815) Create changelog based on pull requests (@lalitkapoor) - -### v2.34.0 (2014/02/18) -- [#516](https://github.com/request/request/pull/516) UNIX Socket URL Support (@lyuzashi) -- [#801](https://github.com/request/request/pull/801) 794 ignore cookie parsing and domain errors (@lalitkapoor) -- [#802](https://github.com/request/request/pull/802) Added the Apache license to the package.json. (@keskival) -- [#793](https://github.com/request/request/pull/793) Adds content-length calculation when submitting forms using form-data li... (@Juul) -- [#785](https://github.com/request/request/pull/785) Provide ability to override content-type when `json` option used (@vvo) -- [#781](https://github.com/request/request/pull/781) simpler isReadStream function (@joaojeronimo) - -### v2.32.0 (2014/01/16) -- [#767](https://github.com/request/request/pull/767) Use tough-cookie CookieJar sync API (@stash) -- [#764](https://github.com/request/request/pull/764) Case-insensitive authentication scheme (@bobyrizov) -- [#763](https://github.com/request/request/pull/763) Upgrade tough-cookie to 0.10.0 (@stash) -- [#744](https://github.com/request/request/pull/744) Use Cookie.parse (@lalitkapoor) -- [#757](https://github.com/request/request/pull/757) require aws-sign2 (@mafintosh) - -### v2.31.0 (2014/01/08) -- [#645](https://github.com/request/request/pull/645) update twitter api url to v1.1 (@mick) -- [#746](https://github.com/request/request/pull/746) README: Markdown code highlight (@weakish) -- [#745](https://github.com/request/request/pull/745) updating setCookie example to make it clear that the callback is required (@emkay) -- [#742](https://github.com/request/request/pull/742) Add note about JSON output body type (@iansltx) -- [#741](https://github.com/request/request/pull/741) README example is using old cookie jar api (@emkay) -- [#736](https://github.com/request/request/pull/736) Fix callback arguments documentation (@mmalecki) -- [#732](https://github.com/request/request/pull/732) JSHINT: Creating global 'for' variable. Should be 'for (var ...'. (@Fritz-Lium) -- [#730](https://github.com/request/request/pull/730) better HTTP DIGEST support (@dai-shi) -- [#728](https://github.com/request/request/pull/728) Fix TypeError when calling request.cookie (@scarletmeow) -- [#727](https://github.com/request/request/pull/727) fix requester bug (@jchris) -- [#724](https://github.com/request/request/pull/724) README.md: add custom HTTP Headers example. (@tcort) -- [#719](https://github.com/request/request/pull/719) Made a comment gender neutral. (@unsetbit) -- [#715](https://github.com/request/request/pull/715) Request.multipart no longer crashes when header 'Content-type' present (@pastaclub) -- [#710](https://github.com/request/request/pull/710) Fixing listing in callback part of docs. (@lukasz-zak) -- [#696](https://github.com/request/request/pull/696) Edited README.md for formatting and clarity of phrasing (@Zearin) -- [#694](https://github.com/request/request/pull/694) Typo in README (@VRMink) -- [#690](https://github.com/request/request/pull/690) Handle blank password in basic auth. (@diversario) -- [#682](https://github.com/request/request/pull/682) Optional dependencies (@Turbo87) -- [#683](https://github.com/request/request/pull/683) Travis CI support (@Turbo87) -- [#674](https://github.com/request/request/pull/674) change cookie module,to tough-cookie.please check it . (@sxyizhiren) -- [#666](https://github.com/request/request/pull/666) make `ciphers` and `secureProtocol` to work in https request (@richarddong) -- [#656](https://github.com/request/request/pull/656) Test case for #304. (@diversario) -- [#662](https://github.com/request/request/pull/662) option.tunnel to explicitly disable tunneling (@seanmonstar) -- [#659](https://github.com/request/request/pull/659) fix failure when running with NODE_DEBUG=request, and a test for that (@jrgm) -- [#630](https://github.com/request/request/pull/630) Send random cnonce for HTTP Digest requests (@wprl) -- [#619](https://github.com/request/request/pull/619) decouple things a bit (@joaojeronimo) -- [#613](https://github.com/request/request/pull/613) Fixes #583, moved initialization of self.uri.pathname (@lexander) -- [#605](https://github.com/request/request/pull/605) Only include ":" + pass in Basic Auth if it's defined (fixes #602) (@bendrucker) -- [#596](https://github.com/request/request/pull/596) Global agent is being used when pool is specified (@Cauldrath) -- [#594](https://github.com/request/request/pull/594) Emit complete event when there is no callback (@RomainLK) -- [#601](https://github.com/request/request/pull/601) Fixed a small typo (@michalstanko) -- [#589](https://github.com/request/request/pull/589) Prevent setting headers after they are sent (@geek) -- [#587](https://github.com/request/request/pull/587) Global cookie jar disabled by default (@threepointone) -- [#544](https://github.com/request/request/pull/544) Update http-signature version. (@davidlehn) -- [#581](https://github.com/request/request/pull/581) Fix spelling of "ignoring." (@bigeasy) -- [#568](https://github.com/request/request/pull/568) use agentOptions to create agent when specified in request (@SamPlacette) -- [#564](https://github.com/request/request/pull/564) Fix redirections (@criloz) -- [#541](https://github.com/request/request/pull/541) The exported request function doesn't have an auth method (@tschaub) -- [#542](https://github.com/request/request/pull/542) Expose Request class (@regality) -- [#536](https://github.com/request/request/pull/536) Allow explicitly empty user field for basic authentication. (@mikeando) -- [#532](https://github.com/request/request/pull/532) fix typo (@fredericosilva) -- [#497](https://github.com/request/request/pull/497) Added redirect event (@Cauldrath) -- [#503](https://github.com/request/request/pull/503) Fix basic auth for passwords that contain colons (@tonistiigi) -- [#521](https://github.com/request/request/pull/521) Improving test-localAddress.js (@noway) -- [#529](https://github.com/request/request/pull/529) dependencies versions bump (@jodaka) -- [#523](https://github.com/request/request/pull/523) Updating dependencies (@noway) -- [#520](https://github.com/request/request/pull/520) Fixing test-tunnel.js (@noway) -- [#519](https://github.com/request/request/pull/519) Update internal path state on post-creation QS changes (@jblebrun) -- [#510](https://github.com/request/request/pull/510) Add HTTP Signature support. (@davidlehn) -- [#502](https://github.com/request/request/pull/502) Fix POST (and probably other) requests that are retried after 401 Unauthorized (@nylen) -- [#508](https://github.com/request/request/pull/508) Honor the .strictSSL option when using proxies (tunnel-agent) (@jhs) -- [#512](https://github.com/request/request/pull/512) Make password optional to support the format: http://username@hostname/ (@pajato1) -- [#513](https://github.com/request/request/pull/513) add 'localAddress' support (@yyfrankyy) -- [#498](https://github.com/request/request/pull/498) Moving response emit above setHeaders on destination streams (@kenperkins) -- [#490](https://github.com/request/request/pull/490) Empty response body (3-rd argument) must be passed to callback as an empty string (@Olegas) -- [#479](https://github.com/request/request/pull/479) Changing so if Accept header is explicitly set, sending json does not ov... (@RoryH) -- [#475](https://github.com/request/request/pull/475) Use `unescape` from `querystring` (@shimaore) -- [#473](https://github.com/request/request/pull/473) V0.10 compat (@isaacs) -- [#471](https://github.com/request/request/pull/471) Using querystring library from visionmedia (@kbackowski) -- [#461](https://github.com/request/request/pull/461) Strip the UTF8 BOM from a UTF encoded response (@kppullin) -- [#460](https://github.com/request/request/pull/460) hawk 0.10.0 (@hueniverse) -- [#462](https://github.com/request/request/pull/462) if query params are empty, then request path shouldn't end with a '?' (merges cleanly now) (@jaipandya) -- [#456](https://github.com/request/request/pull/456) hawk 0.9.0 (@hueniverse) -- [#429](https://github.com/request/request/pull/429) Copy options before adding callback. (@nrn, @nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) -- [#454](https://github.com/request/request/pull/454) Destroy the response if present when destroying the request (clean merge) (@mafintosh) -- [#310](https://github.com/request/request/pull/310) Twitter Oauth Stuff Out of Date; Now Updated (@joemccann, @isaacs, @mscdex) -- [#413](https://github.com/request/request/pull/413) rename googledoodle.png to .jpg (@nfriedly, @youurayy, @jplock, @kapetan, @landeiro, @othiym23, @mmalecki) -- [#448](https://github.com/request/request/pull/448) Convenience method for PATCH (@mloar) -- [#444](https://github.com/request/request/pull/444) protect against double callbacks on error path (@spollack) -- [#433](https://github.com/request/request/pull/433) Added support for HTTPS cert & key (@mmalecki) -- [#430](https://github.com/request/request/pull/430) Respect specified {Host,host} headers, not just {host} (@andrewschaaf) -- [#415](https://github.com/request/request/pull/415) Fixed a typo. (@jerem) -- [#338](https://github.com/request/request/pull/338) Add more auth options, including digest support (@nylen) -- [#403](https://github.com/request/request/pull/403) Optimize environment lookup to happen once only (@mmalecki) -- [#398](https://github.com/request/request/pull/398) Add more reporting to tests (@mmalecki) -- [#388](https://github.com/request/request/pull/388) Ensure "safe" toJSON doesn't break EventEmitters (@othiym23) -- [#381](https://github.com/request/request/pull/381) Resolving "Invalid signature. Expected signature base string: " (@landeiro) -- [#380](https://github.com/request/request/pull/380) Fixes missing host header on retried request when using forever agent (@mac-) -- [#376](https://github.com/request/request/pull/376) Headers lost on redirect (@kapetan) -- [#375](https://github.com/request/request/pull/375) Fix for missing oauth_timestamp parameter (@jplock) -- [#374](https://github.com/request/request/pull/374) Correct Host header for proxy tunnel CONNECT (@youurayy) -- [#370](https://github.com/request/request/pull/370) Twitter reverse auth uses x_auth_mode not x_auth_type (@drudge) -- [#369](https://github.com/request/request/pull/369) Don't remove x_auth_mode for Twitter reverse auth (@drudge) -- [#344](https://github.com/request/request/pull/344) Make AWS auth signing find headers correctly (@nlf) -- [#363](https://github.com/request/request/pull/363) rfc3986 on base_uri, now passes tests (@jeffmarshall) -- [#362](https://github.com/request/request/pull/362) Running `rfc3986` on `base_uri` in `oauth.hmacsign` instead of just `encodeURIComponent` (@jeffmarshall) -- [#361](https://github.com/request/request/pull/361) Don't create a Content-Length header if we already have it set (@danjenkins) -- [#360](https://github.com/request/request/pull/360) Delete self._form along with everything else on redirect (@jgautier) -- [#355](https://github.com/request/request/pull/355) stop sending erroneous headers on redirected requests (@azylman) -- [#332](https://github.com/request/request/pull/332) Fix #296 - Only set Content-Type if body exists (@Marsup) -- [#343](https://github.com/request/request/pull/343) Allow AWS to work in more situations, added a note in the README on its usage (@nlf) -- [#320](https://github.com/request/request/pull/320) request.defaults() doesn't need to wrap jar() (@StuartHarris) -- [#322](https://github.com/request/request/pull/322) Fix + test for piped into request bumped into redirect. #321 (@alexindigo) -- [#326](https://github.com/request/request/pull/326) Do not try to remove listener from an undefined connection (@CartoDB) -- [#318](https://github.com/request/request/pull/318) Pass servername to tunneling secure socket creation (@isaacs) -- [#317](https://github.com/request/request/pull/317) Workaround for #313 (@isaacs) -- [#293](https://github.com/request/request/pull/293) Allow parser errors to bubble up to request (@mscdex) -- [#290](https://github.com/request/request/pull/290) A test for #289 (@isaacs) -- [#280](https://github.com/request/request/pull/280) Like in node.js print options if NODE_DEBUG contains the word request (@Filirom1) -- [#207](https://github.com/request/request/pull/207) Fix #206 Change HTTP/HTTPS agent when redirecting between protocols (@isaacs) -- [#214](https://github.com/request/request/pull/214) documenting additional behavior of json option (@jphaas, @vpulim) -- [#272](https://github.com/request/request/pull/272) Boundary begins with CRLF? (@elspoono, @timshadel, @naholyr, @nanodocumet, @TehShrike) -- [#284](https://github.com/request/request/pull/284) Remove stray `console.log()` call in multipart generator. (@bcherry) -- [#241](https://github.com/request/request/pull/241) Composability updates suggested by issue #239 (@polotek) -- [#282](https://github.com/request/request/pull/282) OAuth Authorization header contains non-"oauth_" parameters (@jplock) -- [#279](https://github.com/request/request/pull/279) fix tests with boundary by injecting boundry from header (@benatkin) -- [#273](https://github.com/request/request/pull/273) Pipe back pressure issue (@mafintosh) -- [#268](https://github.com/request/request/pull/268) I'm not OCD seriously (@TehShrike) -- [#263](https://github.com/request/request/pull/263) Bug in OAuth key generation for sha1 (@nanodocumet) -- [#265](https://github.com/request/request/pull/265) uncaughtException when redirected to invalid URI (@naholyr) -- [#262](https://github.com/request/request/pull/262) JSON test should check for equality (@timshadel) -- [#261](https://github.com/request/request/pull/261) Setting 'pool' to 'false' does NOT disable Agent pooling (@timshadel) -- [#249](https://github.com/request/request/pull/249) Fix for the fix of your (closed) issue #89 where self.headers[content-length] is set to 0 for all methods (@sethbridges, @polotek, @zephrax, @jeromegn) -- [#255](https://github.com/request/request/pull/255) multipart allow body === '' ( the empty string ) (@Filirom1) -- [#260](https://github.com/request/request/pull/260) fixed just another leak of 'i' (@sreuter) -- [#246](https://github.com/request/request/pull/246) Fixing the set-cookie header (@jeromegn) -- [#243](https://github.com/request/request/pull/243) Dynamic boundary (@zephrax) -- [#240](https://github.com/request/request/pull/240) don't error when null is passed for options (@polotek) -- [#211](https://github.com/request/request/pull/211) Replace all occurrences of special chars in RFC3986 (@chriso, @vpulim) -- [#224](https://github.com/request/request/pull/224) Multipart content-type change (@janjongboom) -- [#217](https://github.com/request/request/pull/217) need to use Authorization (titlecase) header with Tumblr OAuth (@visnup) -- [#203](https://github.com/request/request/pull/203) Fix cookie and redirect bugs and add auth support for HTTPS tunnel (@vpulim) -- [#199](https://github.com/request/request/pull/199) Tunnel (@isaacs) -- [#198](https://github.com/request/request/pull/198) Bugfix on forever usage of util.inherits (@isaacs) -- [#197](https://github.com/request/request/pull/197) Make ForeverAgent work with HTTPS (@isaacs) -- [#193](https://github.com/request/request/pull/193) Fixes GH-119 (@goatslacker) -- [#188](https://github.com/request/request/pull/188) Add abort support to the returned request (@itay) -- [#176](https://github.com/request/request/pull/176) Querystring option (@csainty) -- [#182](https://github.com/request/request/pull/182) Fix request.defaults to support (uri, options, callback) api (@twilson63) -- [#180](https://github.com/request/request/pull/180) Modified the post, put, head and del shortcuts to support uri optional param (@twilson63) -- [#179](https://github.com/request/request/pull/179) fix to add opts in .pipe(stream, opts) (@substack) -- [#177](https://github.com/request/request/pull/177) Issue #173 Support uri as first and optional config as second argument (@twilson63) -- [#170](https://github.com/request/request/pull/170) can't create a cookie in a wrapped request (defaults) (@fabianonunes) -- [#168](https://github.com/request/request/pull/168) Picking off an EasyFix by adding some missing mimetypes. (@serby) -- [#161](https://github.com/request/request/pull/161) Fix cookie jar/headers.cookie collision (#125) (@papandreou) -- [#162](https://github.com/request/request/pull/162) Fix issue #159 (@dpetukhov) -- [#90](https://github.com/request/request/pull/90) add option followAllRedirects to follow post/put redirects (@jroes) -- [#148](https://github.com/request/request/pull/148) Retry Agent (@thejh) -- [#146](https://github.com/request/request/pull/146) Multipart should respect content-type if previously set (@apeace) -- [#144](https://github.com/request/request/pull/144) added "form" option to readme (@petejkim) -- [#133](https://github.com/request/request/pull/133) Fixed cookies parsing (@afanasy) -- [#135](https://github.com/request/request/pull/135) host vs hostname (@iangreenleaf) -- [#132](https://github.com/request/request/pull/132) return the body as a Buffer when encoding is set to null (@jahewson) -- [#112](https://github.com/request/request/pull/112) Support using a custom http-like module (@jhs) -- [#104](https://github.com/request/request/pull/104) Cookie handling contains bugs (@janjongboom) -- [#121](https://github.com/request/request/pull/121) Another patch for cookie handling regression (@jhurliman) -- [#117](https://github.com/request/request/pull/117) Remove the global `i` (@3rd-Eden) -- [#110](https://github.com/request/request/pull/110) Update to Iris Couch URL (@jhs) -- [#86](https://github.com/request/request/pull/86) Can't post binary to multipart requests (@kkaefer) -- [#105](https://github.com/request/request/pull/105) added test for proxy option. (@dominictarr) -- [#102](https://github.com/request/request/pull/102) Implemented cookies - closes issue 82: https://github.com/mikeal/request/issues/82 (@alessioalex) -- [#97](https://github.com/request/request/pull/97) Typo in previous pull causes TypeError in non-0.5.11 versions (@isaacs) -- [#96](https://github.com/request/request/pull/96) Authless parsed url host support (@isaacs) -- [#81](https://github.com/request/request/pull/81) Enhance redirect handling (@danmactough) -- [#78](https://github.com/request/request/pull/78) Don't try to do strictSSL for non-ssl connections (@isaacs) -- [#76](https://github.com/request/request/pull/76) Bug when a request fails and a timeout is set (@Marsup) -- [#70](https://github.com/request/request/pull/70) add test script to package.json (@isaacs, @aheckmann) -- [#73](https://github.com/request/request/pull/73) Fix #71 Respect the strictSSL flag (@isaacs) -- [#69](https://github.com/request/request/pull/69) Flatten chunked requests properly (@isaacs) -- [#67](https://github.com/request/request/pull/67) fixed global variable leaks (@aheckmann) -- [#66](https://github.com/request/request/pull/66) Do not overwrite established content-type headers for read stream deliver (@voodootikigod) -- [#53](https://github.com/request/request/pull/53) Parse json: Issue #51 (@benatkin) -- [#45](https://github.com/request/request/pull/45) Added timeout option (@mbrevoort) -- [#35](https://github.com/request/request/pull/35) The "end" event isn't emitted for some responses (@voxpelli) -- [#31](https://github.com/request/request/pull/31) Error on piping a request to a destination (@tobowers) \ No newline at end of file diff --git a/truebit-implementation/node_modules/request/LICENSE b/truebit-implementation/node_modules/request/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/truebit-implementation/node_modules/request/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/truebit-implementation/node_modules/request/README.md b/truebit-implementation/node_modules/request/README.md deleted file mode 100644 index b91623d2..00000000 --- a/truebit-implementation/node_modules/request/README.md +++ /dev/null @@ -1,1097 +0,0 @@ - -# Request - Simplified HTTP client - -[![npm package](https://nodei.co/npm/request.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/request/) - -[![Build status](https://img.shields.io/travis/request/request/master.svg?style=flat-square)](https://travis-ci.org/request/request) -[![Coverage](https://img.shields.io/codecov/c/github/request/request.svg?style=flat-square)](https://codecov.io/github/request/request?branch=master) -[![Coverage](https://img.shields.io/coveralls/request/request.svg?style=flat-square)](https://coveralls.io/r/request/request) -[![Dependency Status](https://img.shields.io/david/request/request.svg?style=flat-square)](https://david-dm.org/request/request) -[![Known Vulnerabilities](https://snyk.io/test/npm/request/badge.svg?style=flat-square)](https://snyk.io/test/npm/request) -[![Gitter](https://img.shields.io/badge/gitter-join_chat-blue.svg?style=flat-square)](https://gitter.im/request/request?utm_source=badge) - - -## Super simple to use - -Request is designed to be the simplest way possible to make http calls. It supports HTTPS and follows redirects by default. - -```js -var request = require('request'); -request('http://www.google.com', function (error, response, body) { - console.log('error:', error); // Print the error if one occurred - console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received - console.log('body:', body); // Print the HTML for the Google homepage. -}); -``` - - -## Table of contents - -- [Streaming](#streaming) -- [Promises & Async/Await](#promises--asyncawait) -- [Forms](#forms) -- [HTTP Authentication](#http-authentication) -- [Custom HTTP Headers](#custom-http-headers) -- [OAuth Signing](#oauth-signing) -- [Proxies](#proxies) -- [Unix Domain Sockets](#unix-domain-sockets) -- [TLS/SSL Protocol](#tlsssl-protocol) -- [Support for HAR 1.2](#support-for-har-12) -- [**All Available Options**](#requestoptions-callback) - -Request also offers [convenience methods](#convenience-methods) like -`request.defaults` and `request.post`, and there are -lots of [usage examples](#examples) and several -[debugging techniques](#debugging). - - ---- - - -## Streaming - -You can stream any response to a file stream. - -```js -request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')) -``` - -You can also stream a file to a PUT or POST request. This method will also check the file extension against a mapping of file extensions to content-types (in this case `application/json`) and use the proper `content-type` in the PUT request (if the headers don’t already provide one). - -```js -fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json')) -``` - -Request can also `pipe` to itself. When doing so, `content-type` and `content-length` are preserved in the PUT headers. - -```js -request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png')) -``` - -Request emits a "response" event when a response is received. The `response` argument will be an instance of [http.IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage). - -```js -request - .get('http://google.com/img.png') - .on('response', function(response) { - console.log(response.statusCode) // 200 - console.log(response.headers['content-type']) // 'image/png' - }) - .pipe(request.put('http://mysite.com/img.png')) -``` - -To easily handle errors when streaming requests, listen to the `error` event before piping: - -```js -request - .get('http://mysite.com/doodle.png') - .on('error', function(err) { - console.log(err) - }) - .pipe(fs.createWriteStream('doodle.png')) -``` - -Now let’s get fancy. - -```js -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - if (req.method === 'PUT') { - req.pipe(request.put('http://mysite.com/doodle.png')) - } else if (req.method === 'GET' || req.method === 'HEAD') { - request.get('http://mysite.com/doodle.png').pipe(resp) - } - } -}) -``` - -You can also `pipe()` from `http.ServerRequest` instances, as well as to `http.ServerResponse` instances. The HTTP method, headers, and entity-body data will be sent. Which means that, if you don't really care about security, you can do: - -```js -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - var x = request('http://mysite.com/doodle.png') - req.pipe(x) - x.pipe(resp) - } -}) -``` - -And since `pipe()` returns the destination stream in ≥ Node 0.5.x you can do one line proxying. :) - -```js -req.pipe(request('http://mysite.com/doodle.png')).pipe(resp) -``` - -Also, none of this new functionality conflicts with requests previous features, it just expands them. - -```js -var r = request.defaults({'proxy':'http://localproxy.com'}) - -http.createServer(function (req, resp) { - if (req.url === '/doodle.png') { - r.get('http://google.com/doodle.png').pipe(resp) - } -}) -``` - -You can still use intermediate proxies, the requests will still follow HTTP forwards, etc. - -[back to top](#table-of-contents) - - ---- - - -## Promises & Async/Await - -`request` supports both streaming and callback interfaces natively. If you'd like `request` to return a Promise instead, you can use an alternative interface wrapper for `request`. These wrappers can be useful if you prefer to work with Promises, or if you'd like to use `async`/`await` in ES2017. - -Several alternative interfaces are provided by the request team, including: -- [`request-promise`](https://github.com/request/request-promise) (uses [Bluebird](https://github.com/petkaantonov/bluebird) Promises) -- [`request-promise-native`](https://github.com/request/request-promise-native) (uses native Promises) -- [`request-promise-any`](https://github.com/request/request-promise-any) (uses [any-promise](https://www.npmjs.com/package/any-promise) Promises) - - -[back to top](#table-of-contents) - - ---- - - -## Forms - -`request` supports `application/x-www-form-urlencoded` and `multipart/form-data` form uploads. For `multipart/related` refer to the `multipart` API. - - -#### application/x-www-form-urlencoded (URL-Encoded Forms) - -URL-encoded forms are simple. - -```js -request.post('http://service.com/upload', {form:{key:'value'}}) -// or -request.post('http://service.com/upload').form({key:'value'}) -// or -request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ }) -``` - - -#### multipart/form-data (Multipart Form Uploads) - -For `multipart/form-data` we use the [form-data](https://github.com/form-data/form-data) library by [@felixge](https://github.com/felixge). For the most cases, you can pass your upload form data via the `formData` option. - - -```js -var formData = { - // Pass a simple key-value pair - my_field: 'my_value', - // Pass data via Buffers - my_buffer: Buffer.from([1, 2, 3]), - // Pass data via Streams - my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), - // Pass multiple values /w an Array - attachments: [ - fs.createReadStream(__dirname + '/attachment1.jpg'), - fs.createReadStream(__dirname + '/attachment2.jpg') - ], - // Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS} - // Use case: for some types of streams, you'll need to provide "file"-related information manually. - // See the `form-data` README for more information about options: https://github.com/form-data/form-data - custom_file: { - value: fs.createReadStream('/dev/urandom'), - options: { - filename: 'topsecret.jpg', - contentType: 'image/jpeg' - } - } -}; -request.post({url:'http://service.com/upload', formData: formData}, function optionalCallback(err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); -}); -``` - -For advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) - -```js -// NOTE: Advanced use-case, for normal use see 'formData' usage above -var r = request.post('http://service.com/upload', function optionalCallback(err, httpResponse, body) {...}) -var form = r.form(); -form.append('my_field', 'my_value'); -form.append('my_buffer', Buffer.from([1, 2, 3])); -form.append('custom_file', fs.createReadStream(__dirname + '/unicycle.jpg'), {filename: 'unicycle.jpg'}); -``` -See the [form-data README](https://github.com/form-data/form-data) for more information & examples. - - -#### multipart/related - -Some variations in different HTTP implementations require a newline/CRLF before, after, or both before and after the boundary of a `multipart/related` request (using the multipart option). This has been observed in the .NET WebAPI version 4.0. You can turn on a boundary preambleCRLF or postamble by passing them as `true` to your request options. - -```js - request({ - method: 'PUT', - preambleCRLF: true, - postambleCRLF: true, - uri: 'http://service.com/upload', - multipart: [ - { - 'content-type': 'application/json', - body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - }, - { body: 'I am an attachment' }, - { body: fs.createReadStream('image.png') } - ], - // alternatively pass an object containing additional options - multipart: { - chunked: false, - data: [ - { - 'content-type': 'application/json', - body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - }, - { body: 'I am an attachment' } - ] - } - }, - function (error, response, body) { - if (error) { - return console.error('upload failed:', error); - } - console.log('Upload successful! Server responded with:', body); - }) -``` - -[back to top](#table-of-contents) - - ---- - - -## HTTP Authentication - -```js -request.get('http://some.server.com/').auth('username', 'password', false); -// or -request.get('http://some.server.com/', { - 'auth': { - 'user': 'username', - 'pass': 'password', - 'sendImmediately': false - } -}); -// or -request.get('http://some.server.com/').auth(null, null, true, 'bearerToken'); -// or -request.get('http://some.server.com/', { - 'auth': { - 'bearer': 'bearerToken' - } -}); -``` - -If passed as an option, `auth` should be a hash containing values: - -- `user` || `username` -- `pass` || `password` -- `sendImmediately` (optional) -- `bearer` (optional) - -The method form takes parameters -`auth(username, password, sendImmediately, bearer)`. - -`sendImmediately` defaults to `true`, which causes a basic or bearer -authentication header to be sent. If `sendImmediately` is `false`, then -`request` will retry with a proper authentication header after receiving a -`401` response from the server (which must contain a `WWW-Authenticate` header -indicating the required authentication method). - -Note that you can also specify basic authentication using the URL itself, as -detailed in [RFC 1738](http://www.ietf.org/rfc/rfc1738.txt). Simply pass the -`user:password` before the host with an `@` sign: - -```js -var username = 'username', - password = 'password', - url = 'http://' + username + ':' + password + '@some.server.com'; - -request({url: url}, function (error, response, body) { - // Do more stuff with 'body' here -}); -``` - -Digest authentication is supported, but it only works with `sendImmediately` -set to `false`; otherwise `request` will send basic authentication on the -initial request, which will probably cause the request to fail. - -Bearer authentication is supported, and is activated when the `bearer` value is -available. The value may be either a `String` or a `Function` returning a -`String`. Using a function to supply the bearer token is particularly useful if -used in conjunction with `defaults` to allow a single function to supply the -last known token at the time of sending a request, or to compute one on the fly. - -[back to top](#table-of-contents) - - ---- - - -## Custom HTTP Headers - -HTTP Headers, such as `User-Agent`, can be set in the `options` object. -In the example below, we call the github API to find out the number -of stars and forks for the request repository. This requires a -custom `User-Agent` header as well as https. - -```js -var request = require('request'); - -var options = { - url: 'https://api.github.com/repos/request/request', - headers: { - 'User-Agent': 'request' - } -}; - -function callback(error, response, body) { - if (!error && response.statusCode == 200) { - var info = JSON.parse(body); - console.log(info.stargazers_count + " Stars"); - console.log(info.forks_count + " Forks"); - } -} - -request(options, callback); -``` - -[back to top](#table-of-contents) - - ---- - - -## OAuth Signing - -[OAuth version 1.0](https://tools.ietf.org/html/rfc5849) is supported. The -default signing algorithm is -[HMAC-SHA1](https://tools.ietf.org/html/rfc5849#section-3.4.2): - -```js -// OAuth1.0 - 3-legged server side flow (Twitter example) -// step 1 -var qs = require('querystring') - , oauth = - { callback: 'http://mysite.com/callback/' - , consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - } - , url = 'https://api.twitter.com/oauth/request_token' - ; -request.post({url:url, oauth:oauth}, function (e, r, body) { - // Ideally, you would take the body in the response - // and construct a URL that a user clicks on (like a sign in button). - // The verifier is only available in the response after a user has - // verified with twitter that they are authorizing your app. - - // step 2 - var req_data = qs.parse(body) - var uri = 'https://api.twitter.com/oauth/authenticate' - + '?' + qs.stringify({oauth_token: req_data.oauth_token}) - // redirect the user to the authorize uri - - // step 3 - // after the user is redirected back to your server - var auth_data = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: auth_data.oauth_token - , token_secret: req_data.oauth_token_secret - , verifier: auth_data.oauth_verifier - } - , url = 'https://api.twitter.com/oauth/access_token' - ; - request.post({url:url, oauth:oauth}, function (e, r, body) { - // ready to make signed requests on behalf of the user - var perm_data = qs.parse(body) - , oauth = - { consumer_key: CONSUMER_KEY - , consumer_secret: CONSUMER_SECRET - , token: perm_data.oauth_token - , token_secret: perm_data.oauth_token_secret - } - , url = 'https://api.twitter.com/1.1/users/show.json' - , qs = - { screen_name: perm_data.screen_name - , user_id: perm_data.user_id - } - ; - request.get({url:url, oauth:oauth, qs:qs, json:true}, function (e, r, user) { - console.log(user) - }) - }) -}) -``` - -For [RSA-SHA1 signing](https://tools.ietf.org/html/rfc5849#section-3.4.3), make -the following changes to the OAuth options object: -* Pass `signature_method : 'RSA-SHA1'` -* Instead of `consumer_secret`, specify a `private_key` string in - [PEM format](http://how2ssl.com/articles/working_with_pem_files/) - -For [PLAINTEXT signing](http://oauth.net/core/1.0/#anchor22), make -the following changes to the OAuth options object: -* Pass `signature_method : 'PLAINTEXT'` - -To send OAuth parameters via query params or in a post body as described in The -[Consumer Request Parameters](http://oauth.net/core/1.0/#consumer_req_param) -section of the oauth1 spec: -* Pass `transport_method : 'query'` or `transport_method : 'body'` in the OAuth - options object. -* `transport_method` defaults to `'header'` - -To use [Request Body Hash](https://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html) you can either -* Manually generate the body hash and pass it as a string `body_hash: '...'` -* Automatically generate the body hash by passing `body_hash: true` - -[back to top](#table-of-contents) - - ---- - - -## Proxies - -If you specify a `proxy` option, then the request (and any subsequent -redirects) will be sent via a connection to the proxy server. - -If your endpoint is an `https` url, and you are using a proxy, then -request will send a `CONNECT` request to the proxy server *first*, and -then use the supplied connection to connect to the endpoint. - -That is, first it will make a request like: - -``` -HTTP/1.1 CONNECT endpoint-server.com:80 -Host: proxy-server.com -User-Agent: whatever user agent you specify -``` - -and then the proxy server make a TCP connection to `endpoint-server` -on port `80`, and return a response that looks like: - -``` -HTTP/1.1 200 OK -``` - -At this point, the connection is left open, and the client is -communicating directly with the `endpoint-server.com` machine. - -See [the wikipedia page on HTTP Tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel) -for more information. - -By default, when proxying `http` traffic, request will simply make a -standard proxied `http` request. This is done by making the `url` -section of the initial line of the request a fully qualified url to -the endpoint. - -For example, it will make a single request that looks like: - -``` -HTTP/1.1 GET http://endpoint-server.com/some-url -Host: proxy-server.com -Other-Headers: all go here - -request body or whatever -``` - -Because a pure "http over http" tunnel offers no additional security -or other features, it is generally simpler to go with a -straightforward HTTP proxy in this case. However, if you would like -to force a tunneling proxy, you may set the `tunnel` option to `true`. - -You can also make a standard proxied `http` request by explicitly setting -`tunnel : false`, but **note that this will allow the proxy to see the traffic -to/from the destination server**. - -If you are using a tunneling proxy, you may set the -`proxyHeaderWhiteList` to share certain headers with the proxy. - -You can also set the `proxyHeaderExclusiveList` to share certain -headers only with the proxy and not with destination host. - -By default, this set is: - -``` -accept -accept-charset -accept-encoding -accept-language -accept-ranges -cache-control -content-encoding -content-language -content-length -content-location -content-md5 -content-range -content-type -connection -date -expect -max-forwards -pragma -proxy-authorization -referer -te -transfer-encoding -user-agent -via -``` - -Note that, when using a tunneling proxy, the `proxy-authorization` -header and any headers from custom `proxyHeaderExclusiveList` are -*never* sent to the endpoint server, but only to the proxy server. - - -### Controlling proxy behaviour using environment variables - -The following environment variables are respected by `request`: - - * `HTTP_PROXY` / `http_proxy` - * `HTTPS_PROXY` / `https_proxy` - * `NO_PROXY` / `no_proxy` - -When `HTTP_PROXY` / `http_proxy` are set, they will be used to proxy non-SSL requests that do not have an explicit `proxy` configuration option present. Similarly, `HTTPS_PROXY` / `https_proxy` will be respected for SSL requests that do not have an explicit `proxy` configuration option. It is valid to define a proxy in one of the environment variables, but then override it for a specific request, using the `proxy` configuration option. Furthermore, the `proxy` configuration option can be explicitly set to false / null to opt out of proxying altogether for that request. - -`request` is also aware of the `NO_PROXY`/`no_proxy` environment variables. These variables provide a granular way to opt out of proxying, on a per-host basis. It should contain a comma separated list of hosts to opt out of proxying. It is also possible to opt of proxying when a particular destination port is used. Finally, the variable may be set to `*` to opt out of the implicit proxy configuration of the other environment variables. - -Here's some examples of valid `no_proxy` values: - - * `google.com` - don't proxy HTTP/HTTPS requests to Google. - * `google.com:443` - don't proxy HTTPS requests to Google, but *do* proxy HTTP requests to Google. - * `google.com:443, yahoo.com:80` - don't proxy HTTPS requests to Google, and don't proxy HTTP requests to Yahoo! - * `*` - ignore `https_proxy`/`http_proxy` environment variables altogether. - -[back to top](#table-of-contents) - - ---- - - -## UNIX Domain Sockets - -`request` supports making requests to [UNIX Domain Sockets](https://en.wikipedia.org/wiki/Unix_domain_socket). To make one, use the following URL scheme: - -```js -/* Pattern */ 'http://unix:SOCKET:PATH' -/* Example */ request.get('http://unix:/absolute/path/to/unix.socket:/request/path') -``` - -Note: The `SOCKET` path is assumed to be absolute to the root of the host file system. - -[back to top](#table-of-contents) - - ---- - - -## TLS/SSL Protocol - -TLS/SSL Protocol options, such as `cert`, `key` and `passphrase`, can be -set directly in `options` object, in the `agentOptions` property of the `options` object, or even in `https.globalAgent.options`. Keep in mind that, although `agentOptions` allows for a slightly wider range of configurations, the recommended way is via `options` object directly, as using `agentOptions` or `https.globalAgent.options` would not be applied in the same way in proxied environments (as data travels through a TLS connection instead of an http/https agent). - -```js -var fs = require('fs') - , path = require('path') - , certFile = path.resolve(__dirname, 'ssl/client.crt') - , keyFile = path.resolve(__dirname, 'ssl/client.key') - , caFile = path.resolve(__dirname, 'ssl/ca.cert.pem') - , request = require('request'); - -var options = { - url: 'https://api.some-server.com/', - cert: fs.readFileSync(certFile), - key: fs.readFileSync(keyFile), - passphrase: 'password', - ca: fs.readFileSync(caFile) -}; - -request.get(options); -``` - -### Using `options.agentOptions` - -In the example below, we call an API that requires client side SSL certificate -(in PEM format) with passphrase protected private key (in PEM format) and disable the SSLv3 protocol: - -```js -var fs = require('fs') - , path = require('path') - , certFile = path.resolve(__dirname, 'ssl/client.crt') - , keyFile = path.resolve(__dirname, 'ssl/client.key') - , request = require('request'); - -var options = { - url: 'https://api.some-server.com/', - agentOptions: { - cert: fs.readFileSync(certFile), - key: fs.readFileSync(keyFile), - // Or use `pfx` property replacing `cert` and `key` when using private key, certificate and CA certs in PFX or PKCS12 format: - // pfx: fs.readFileSync(pfxFilePath), - passphrase: 'password', - securityOptions: 'SSL_OP_NO_SSLv3' - } -}; - -request.get(options); -``` - -It is able to force using SSLv3 only by specifying `secureProtocol`: - -```js -request.get({ - url: 'https://api.some-server.com/', - agentOptions: { - secureProtocol: 'SSLv3_method' - } -}); -``` - -It is possible to accept other certificates than those signed by generally allowed Certificate Authorities (CAs). -This can be useful, for example, when using self-signed certificates. -To require a different root certificate, you can specify the signing CA by adding the contents of the CA's certificate file to the `agentOptions`. -The certificate the domain presents must be signed by the root certificate specified: - -```js -request.get({ - url: 'https://api.some-server.com/', - agentOptions: { - ca: fs.readFileSync('ca.cert.pem') - } -}); -``` - -[back to top](#table-of-contents) - - ---- - -## Support for HAR 1.2 - -The `options.har` property will override the values: `url`, `method`, `qs`, `headers`, `form`, `formData`, `body`, `json`, as well as construct multipart data and read files from disk when `request.postData.params[].fileName` is present without a matching `value`. - -A validation step will check if the HAR Request format matches the latest spec (v1.2) and will skip parsing if not matching. - -```js - var request = require('request') - request({ - // will be ignored - method: 'GET', - uri: 'http://www.google.com', - - // HTTP Archive Request Object - har: { - url: 'http://www.mockbin.com/har', - method: 'POST', - headers: [ - { - name: 'content-type', - value: 'application/x-www-form-urlencoded' - } - ], - postData: { - mimeType: 'application/x-www-form-urlencoded', - params: [ - { - name: 'foo', - value: 'bar' - }, - { - name: 'hello', - value: 'world' - } - ] - } - } - }) - - // a POST request will be sent to http://www.mockbin.com - // with body an application/x-www-form-urlencoded body: - // foo=bar&hello=world -``` - -[back to top](#table-of-contents) - - ---- - -## request(options, callback) - -The first argument can be either a `url` or an `options` object. The only required option is `uri`; all others are optional. - -- `uri` || `url` - fully qualified uri or a parsed url object from `url.parse()` -- `baseUrl` - fully qualified uri string used as the base url. Most useful with `request.defaults`, for example when you want to do many requests to the same domain. If `baseUrl` is `https://example.com/api/`, then requesting `/end/point?test=true` will fetch `https://example.com/api/end/point?test=true`. When `baseUrl` is given, `uri` must also be a string. -- `method` - http method (default: `"GET"`) -- `headers` - http headers (default: `{}`) - ---- - -- `qs` - object containing querystring values to be appended to the `uri` -- `qsParseOptions` - object containing options to pass to the [qs.parse](https://github.com/hapijs/qs#parsing-objects) method. Alternatively pass options to the [querystring.parse](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_parse_str_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}` -- `qsStringifyOptions` - object containing options to pass to the [qs.stringify](https://github.com/hapijs/qs#stringifying) method. Alternatively pass options to the [querystring.stringify](https://nodejs.org/docs/v0.12.0/api/querystring.html#querystring_querystring_stringify_obj_sep_eq_options) method using this format `{sep:';', eq:':', options:{}}`. For example, to change the way arrays are converted to query strings using the `qs` module pass the `arrayFormat` option with one of `indices|brackets|repeat` -- `useQuerystring` - if true, use `querystring` to stringify and parse - querystrings, otherwise use `qs` (default: `false`). Set this option to - `true` if you need arrays to be serialized as `foo=bar&foo=baz` instead of the - default `foo[0]=bar&foo[1]=baz`. - ---- - -- `body` - entity body for PATCH, POST and PUT requests. Must be a `Buffer`, `String` or `ReadStream`. If `json` is `true`, then `body` must be a JSON-serializable object. -- `form` - when passed an object or a querystring, this sets `body` to a querystring representation of value, and adds `Content-type: application/x-www-form-urlencoded` header. When passed no options, a `FormData` instance is returned (and is piped to request). See "Forms" section above. -- `formData` - data to pass for a `multipart/form-data` request. See - [Forms](#forms) section above. -- `multipart` - array of objects which contain their own headers and `body` - attributes. Sends a `multipart/related` request. See [Forms](#forms) section - above. - - Alternatively you can pass in an object `{chunked: false, data: []}` where - `chunked` is used to specify whether the request is sent in - [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding) - In non-chunked requests, data items with body streams are not allowed. -- `preambleCRLF` - append a newline/CRLF before the boundary of your `multipart/form-data` request. -- `postambleCRLF` - append a newline/CRLF at the end of the boundary of your `multipart/form-data` request. -- `json` - sets `body` to JSON representation of value and adds `Content-type: application/json` header. Additionally, parses the response body as JSON. -- `jsonReviver` - a [reviver function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) that will be passed to `JSON.parse()` when parsing a JSON response body. -- `jsonReplacer` - a [replacer function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) that will be passed to `JSON.stringify()` when stringifying a JSON request body. - ---- - -- `auth` - a hash containing values `user` || `username`, `pass` || `password`, and `sendImmediately` (optional). See documentation above. -- `oauth` - options for OAuth HMAC-SHA1 signing. See documentation above. -- `hawk` - options for [Hawk signing](https://github.com/hueniverse/hawk). The `credentials` key must contain the necessary signing info, [see hawk docs for details](https://github.com/hueniverse/hawk#usage-example). -- `aws` - `object` containing AWS signing information. Should have the properties `key`, `secret`, and optionally `session` (note that this only works for services that require session as part of the canonical string). Also requires the property `bucket`, unless you’re specifying your `bucket` as part of the path, or the request doesn’t use a bucket (i.e. GET Services). If you want to use AWS sign version 4 use the parameter `sign_version` with value `4` otherwise the default is version 2. If you are using SigV4, you can also include a `service` property that specifies the service name. **Note:** you need to `npm install aws4` first. -- `httpSignature` - options for the [HTTP Signature Scheme](https://github.com/joyent/node-http-signature/blob/master/http_signing.md) using [Joyent's library](https://github.com/joyent/node-http-signature). The `keyId` and `key` properties must be specified. See the docs for other options. - ---- - -- `followRedirect` - follow HTTP 3xx responses as redirects (default: `true`). This property can also be implemented as function which gets `response` object as a single argument and should return `true` if redirects should continue or `false` otherwise. -- `followAllRedirects` - follow non-GET HTTP 3xx responses as redirects (default: `false`) -- `followOriginalHttpMethod` - by default we redirect to HTTP method GET. you can enable this property to redirect to the original HTTP method (default: `false`) -- `maxRedirects` - the maximum number of redirects to follow (default: `10`) -- `removeRefererHeader` - removes the referer header when a redirect happens (default: `false`). **Note:** if true, referer header set in the initial request is preserved during redirect chain. - ---- - -- `encoding` - encoding to be used on `setEncoding` of response data. If `null`, the `body` is returned as a `Buffer`. Anything else **(including the default value of `undefined`)** will be passed as the [encoding](http://nodejs.org/api/buffer.html#buffer_buffer) parameter to `toString()` (meaning this is effectively `utf8` by default). (**Note:** if you expect binary data, you should set `encoding: null`.) -- `gzip` - if `true`, add an `Accept-Encoding` header to request compressed content encodings from the server (if not already present) and decode supported content encodings in the response. **Note:** Automatic decoding of the response content is performed on the body data returned through `request` (both through the `request` stream and passed to the callback function) but is not performed on the `response` stream (available from the `response` event) which is the unmodified `http.IncomingMessage` object which may contain compressed data. See example below. -- `jar` - if `true`, remember cookies for future use (or define your custom cookie jar; see examples section) - ---- - -- `agent` - `http(s).Agent` instance to use -- `agentClass` - alternatively specify your agent's class name -- `agentOptions` - and pass its options. **Note:** for HTTPS see [tls API doc for TLS/SSL options](http://nodejs.org/api/tls.html#tls_tls_connect_options_callback) and the [documentation above](#using-optionsagentoptions). -- `forever` - set to `true` to use the [forever-agent](https://github.com/request/forever-agent) **Note:** Defaults to `http(s).Agent({keepAlive:true})` in node 0.12+ -- `pool` - an object describing which agents to use for the request. If this option is omitted the request will use the global agent (as long as your options allow for it). Otherwise, request will search the pool for your custom agent. If no custom agent is found, a new agent will be created and added to the pool. **Note:** `pool` is used only when the `agent` option is not specified. - - A `maxSockets` property can also be provided on the `pool` object to set the max number of sockets for all agents created (ex: `pool: {maxSockets: Infinity}`). - - Note that if you are sending multiple requests in a loop and creating - multiple new `pool` objects, `maxSockets` will not work as intended. To - work around this, either use [`request.defaults`](#requestdefaultsoptions) - with your pool options or create the pool object with the `maxSockets` - property outside of the loop. -- `timeout` - integer containing the number of milliseconds to wait for a -server to send response headers (and start the response body) before aborting -the request. Note that if the underlying TCP connection cannot be established, -the OS-wide TCP connection timeout will overrule the `timeout` option ([the -default in Linux can be anywhere from 20-120 seconds][linux-timeout]). - -[linux-timeout]: http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout - ---- - -- `localAddress` - local interface to bind for network connections. -- `proxy` - an HTTP proxy to be used. Supports proxy Auth with Basic Auth, identical to support for the `url` parameter (by embedding the auth info in the `uri`) -- `strictSSL` - if `true`, requires SSL certificates be valid. **Note:** to use your own certificate authority, you need to specify an agent that was created with that CA as an option. -- `tunnel` - controls the behavior of - [HTTP `CONNECT` tunneling](https://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_tunneling) - as follows: - - `undefined` (default) - `true` if the destination is `https`, `false` otherwise - - `true` - always tunnel to the destination by making a `CONNECT` request to - the proxy - - `false` - request the destination as a `GET` request. -- `proxyHeaderWhiteList` - a whitelist of headers to send to a - tunneling proxy. -- `proxyHeaderExclusiveList` - a whitelist of headers to send - exclusively to a tunneling proxy and not to destination. - ---- - -- `time` - if `true`, the request-response cycle (including all redirects) is timed at millisecond resolution. When set, the following properties are added to the response object: - - `elapsedTime` Duration of the entire request/response in milliseconds (*deprecated*). - - `responseStartTime` Timestamp when the response began (in Unix Epoch milliseconds) (*deprecated*). - - `timingStart` Timestamp of the start of the request (in Unix Epoch milliseconds). - - `timings` Contains event timestamps in millisecond resolution relative to `timingStart`. If there were redirects, the properties reflect the timings of the final request in the redirect chain: - - `socket` Relative timestamp when the [`http`](https://nodejs.org/api/http.html#http_event_socket) module's `socket` event fires. This happens when the socket is assigned to the request. - - `lookup` Relative timestamp when the [`net`](https://nodejs.org/api/net.html#net_event_lookup) module's `lookup` event fires. This happens when the DNS has been resolved. - - `connect`: Relative timestamp when the [`net`](https://nodejs.org/api/net.html#net_event_connect) module's `connect` event fires. This happens when the server acknowledges the TCP connection. - - `response`: Relative timestamp when the [`http`](https://nodejs.org/api/http.html#http_event_response) module's `response` event fires. This happens when the first bytes are received from the server. - - `end`: Relative timestamp when the last bytes of the response are received. - - `timingPhases` Contains the durations of each request phase. If there were redirects, the properties reflect the timings of the final request in the redirect chain: - - `wait`: Duration of socket initialization (`timings.socket`) - - `dns`: Duration of DNS lookup (`timings.lookup` - `timings.socket`) - - `tcp`: Duration of TCP connection (`timings.connect` - `timings.socket`) - - `firstByte`: Duration of HTTP server response (`timings.response` - `timings.connect`) - - `download`: Duration of HTTP download (`timings.end` - `timings.response`) - - `total`: Duration entire HTTP round-trip (`timings.end`) - -- `har` - a [HAR 1.2 Request Object](http://www.softwareishard.com/blog/har-12-spec/#request), will be processed from HAR format into options overwriting matching values *(see the [HAR 1.2 section](#support-for-har-1.2) for details)* -- `callback` - alternatively pass the request's callback in the options object - -The callback argument gets 3 arguments: - -1. An `error` when applicable (usually from [`http.ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) object) -2. An [`http.IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) object (Response object) -3. The third is the `response` body (`String` or `Buffer`, or JSON object if the `json` option is supplied) - -[back to top](#table-of-contents) - - ---- - -## Convenience methods - -There are also shorthand methods for different HTTP METHODs and some other conveniences. - - -### request.defaults(options) - -This method **returns a wrapper** around the normal request API that defaults -to whatever options you pass to it. - -**Note:** `request.defaults()` **does not** modify the global request API; -instead, it **returns a wrapper** that has your default settings applied to it. - -**Note:** You can call `.defaults()` on the wrapper that is returned from -`request.defaults` to add/override defaults that were previously defaulted. - -For example: -```js -//requests using baseRequest() will set the 'x-token' header -var baseRequest = request.defaults({ - headers: {'x-token': 'my-token'} -}) - -//requests using specialRequest() will include the 'x-token' header set in -//baseRequest and will also include the 'special' header -var specialRequest = baseRequest.defaults({ - headers: {special: 'special value'} -}) -``` - -### request.METHOD() - -These HTTP method convenience functions act just like `request()` but with a default method already set for you: - -- *request.get()*: Defaults to `method: "GET"`. -- *request.post()*: Defaults to `method: "POST"`. -- *request.put()*: Defaults to `method: "PUT"`. -- *request.patch()*: Defaults to `method: "PATCH"`. -- *request.del() / request.delete()*: Defaults to `method: "DELETE"`. -- *request.head()*: Defaults to `method: "HEAD"`. -- *request.options()*: Defaults to `method: "OPTIONS"`. - -### request.cookie() - -Function that creates a new cookie. - -```js -request.cookie('key1=value1') -``` -### request.jar() - -Function that creates a new cookie jar. - -```js -request.jar() -``` - -[back to top](#table-of-contents) - - ---- - - -## Debugging - -There are at least three ways to debug the operation of `request`: - -1. Launch the node process like `NODE_DEBUG=request node script.js` - (`lib,request,otherlib` works too). - -2. Set `require('request').debug = true` at any time (this does the same thing - as #1). - -3. Use the [request-debug module](https://github.com/request/request-debug) to - view request and response headers and bodies. - -[back to top](#table-of-contents) - - ---- - -## Timeouts - -Most requests to external servers should have a timeout attached, in case the -server is not responding in a timely manner. Without a timeout, your code may -have a socket open/consume resources for minutes or more. - -There are two main types of timeouts: **connection timeouts** and **read -timeouts**. A connect timeout occurs if the timeout is hit while your client is -attempting to establish a connection to a remote machine (corresponding to the -[connect() call][connect] on the socket). A read timeout occurs any time the -server is too slow to send back a part of the response. - -These two situations have widely different implications for what went wrong -with the request, so it's useful to be able to distinguish them. You can detect -timeout errors by checking `err.code` for an 'ETIMEDOUT' value. Further, you -can detect whether the timeout was a connection timeout by checking if the -`err.connect` property is set to `true`. - -```js -request.get('http://10.255.255.1', {timeout: 1500}, function(err) { - console.log(err.code === 'ETIMEDOUT'); - // Set to `true` if the timeout was a connection timeout, `false` or - // `undefined` otherwise. - console.log(err.connect === true); - process.exit(0); -}); -``` - -[connect]: http://linux.die.net/man/2/connect - -## Examples: - -```js - var request = require('request') - , rand = Math.floor(Math.random()*100000000).toString() - ; - request( - { method: 'PUT' - , uri: 'http://mikeal.iriscouch.com/testjs/' + rand - , multipart: - [ { 'content-type': 'application/json' - , body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) - } - , { body: 'I am an attachment' } - ] - } - , function (error, response, body) { - if(response.statusCode == 201){ - console.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand) - } else { - console.log('error: '+ response.statusCode) - console.log(body) - } - } - ) -``` - -For backwards-compatibility, response compression is not supported by default. -To accept gzip-compressed responses, set the `gzip` option to `true`. Note -that the body data passed through `request` is automatically decompressed -while the response object is unmodified and will contain compressed data if -the server sent a compressed response. - -```js - var request = require('request') - request( - { method: 'GET' - , uri: 'http://www.google.com' - , gzip: true - } - , function (error, response, body) { - // body is the decompressed response body - console.log('server encoded the data as: ' + (response.headers['content-encoding'] || 'identity')) - console.log('the decoded data is: ' + body) - } - ) - .on('data', function(data) { - // decompressed data as it is received - console.log('decoded chunk: ' + data) - }) - .on('response', function(response) { - // unmodified http.IncomingMessage object - response.on('data', function(data) { - // compressed data as it is received - console.log('received ' + data.length + ' bytes of compressed data') - }) - }) -``` - -Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set `jar` to `true` (either in `defaults` or `options`). - -```js -var request = request.defaults({jar: true}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` - -To use a custom cookie jar (instead of `request`’s global cookie jar), set `jar` to an instance of `request.jar()` (either in `defaults` or `options`) - -```js -var j = request.jar() -var request = request.defaults({jar:j}) -request('http://www.google.com', function () { - request('http://images.google.com') -}) -``` - -OR - -```js -var j = request.jar(); -var cookie = request.cookie('key1=value1'); -var url = 'http://www.google.com'; -j.setCookie(cookie, url); -request({url: url, jar: j}, function () { - request('http://images.google.com') -}) -``` - -To use a custom cookie store (such as a -[`FileCookieStore`](https://github.com/mitsuru/tough-cookie-filestore) -which supports saving to and restoring from JSON files), pass it as a parameter -to `request.jar()`: - -```js -var FileCookieStore = require('tough-cookie-filestore'); -// NOTE - currently the 'cookies.json' file must already exist! -var j = request.jar(new FileCookieStore('cookies.json')); -request = request.defaults({ jar : j }) -request('http://www.google.com', function() { - request('http://images.google.com') -}) -``` - -The cookie store must be a -[`tough-cookie`](https://github.com/SalesforceEng/tough-cookie) -store and it must support synchronous operations; see the -[`CookieStore` API docs](https://github.com/SalesforceEng/tough-cookie#cookiestore-api) -for details. - -To inspect your cookie jar after a request: - -```js -var j = request.jar() -request({url: 'http://www.google.com', jar: j}, function () { - var cookie_string = j.getCookieString(url); // "key1=value1; key2=value2; ..." - var cookies = j.getCookies(url); - // [{key: 'key1', value: 'value1', domain: "www.google.com", ...}, ...] -}) -``` - -[back to top](#table-of-contents) diff --git a/truebit-implementation/node_modules/request/index.js b/truebit-implementation/node_modules/request/index.js deleted file mode 100755 index f9b480a1..00000000 --- a/truebit-implementation/node_modules/request/index.js +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2010-2012 Mikeal Rogers -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -'use strict' - -var extend = require('extend') -var cookies = require('./lib/cookies') -var helpers = require('./lib/helpers') - -var paramsHaveRequestBody = helpers.paramsHaveRequestBody - -// organize params for patch, post, put, head, del -function initParams (uri, options, callback) { - if (typeof options === 'function') { - callback = options - } - - var params = {} - if (typeof options === 'object') { - extend(params, options, {uri: uri}) - } else if (typeof uri === 'string') { - extend(params, {uri: uri}) - } else { - extend(params, uri) - } - - params.callback = callback || params.callback - return params -} - -function request (uri, options, callback) { - if (typeof uri === 'undefined') { - throw new Error('undefined is not a valid uri or options object.') - } - - var params = initParams(uri, options, callback) - - if (params.method === 'HEAD' && paramsHaveRequestBody(params)) { - throw new Error('HTTP HEAD requests MUST NOT include a request body.') - } - - return new request.Request(params) -} - -function verbFunc (verb) { - var method = verb.toUpperCase() - return function (uri, options, callback) { - var params = initParams(uri, options, callback) - params.method = method - return request(params, params.callback) - } -} - -// define like this to please codeintel/intellisense IDEs -request.get = verbFunc('get') -request.head = verbFunc('head') -request.options = verbFunc('options') -request.post = verbFunc('post') -request.put = verbFunc('put') -request.patch = verbFunc('patch') -request.del = verbFunc('delete') -request['delete'] = verbFunc('delete') - -request.jar = function (store) { - return cookies.jar(store) -} - -request.cookie = function (str) { - return cookies.parse(str) -} - -function wrapRequestMethod (method, options, requester, verb) { - return function (uri, opts, callback) { - var params = initParams(uri, opts, callback) - - var target = {} - extend(true, target, options, params) - - target.pool = params.pool || options.pool - - if (verb) { - target.method = verb.toUpperCase() - } - - if (typeof requester === 'function') { - method = requester - } - - return method(target, target.callback) - } -} - -request.defaults = function (options, requester) { - var self = this - - options = options || {} - - if (typeof options === 'function') { - requester = options - options = {} - } - - var defaults = wrapRequestMethod(self, options, requester) - - var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete'] - verbs.forEach(function (verb) { - defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb) - }) - - defaults.cookie = wrapRequestMethod(self.cookie, options, requester) - defaults.jar = self.jar - defaults.defaults = self.defaults - return defaults -} - -request.forever = function (agentOptions, optionsArg) { - var options = {} - if (optionsArg) { - extend(options, optionsArg) - } - if (agentOptions) { - options.agentOptions = agentOptions - } - - options.forever = true - return request.defaults(options) -} - -// Exports - -module.exports = request -request.Request = require('./request') -request.initParams = initParams - -// Backwards compatibility for request.debug -Object.defineProperty(request, 'debug', { - enumerable: true, - get: function () { - return request.Request.debug - }, - set: function (debug) { - request.Request.debug = debug - } -}) diff --git a/truebit-implementation/node_modules/request/lib/auth.js b/truebit-implementation/node_modules/request/lib/auth.js deleted file mode 100644 index f5edf32c..00000000 --- a/truebit-implementation/node_modules/request/lib/auth.js +++ /dev/null @@ -1,167 +0,0 @@ -'use strict' - -var caseless = require('caseless') -var uuid = require('uuid/v4') -var helpers = require('./helpers') - -var md5 = helpers.md5 -var toBase64 = helpers.toBase64 - -function Auth (request) { - // define all public properties here - this.request = request - this.hasAuth = false - this.sentAuth = false - this.bearerToken = null - this.user = null - this.pass = null -} - -Auth.prototype.basic = function (user, pass, sendImmediately) { - var self = this - if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) { - self.request.emit('error', new Error('auth() received invalid user or password')) - } - self.user = user - self.pass = pass - self.hasAuth = true - var header = user + ':' + (pass || '') - if (sendImmediately || typeof sendImmediately === 'undefined') { - var authHeader = 'Basic ' + toBase64(header) - self.sentAuth = true - return authHeader - } -} - -Auth.prototype.bearer = function (bearer, sendImmediately) { - var self = this - self.bearerToken = bearer - self.hasAuth = true - if (sendImmediately || typeof sendImmediately === 'undefined') { - if (typeof bearer === 'function') { - bearer = bearer() - } - var authHeader = 'Bearer ' + (bearer || '') - self.sentAuth = true - return authHeader - } -} - -Auth.prototype.digest = function (method, path, authHeader) { - // TODO: More complete implementation of RFC 2617. - // - handle challenge.domain - // - support qop="auth-int" only - // - handle Authentication-Info (not necessarily?) - // - check challenge.stale (not necessarily?) - // - increase nc (not necessarily?) - // For reference: - // http://tools.ietf.org/html/rfc2617#section-3 - // https://github.com/bagder/curl/blob/master/lib/http_digest.c - - var self = this - - var challenge = {} - var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi - for (;;) { - var match = re.exec(authHeader) - if (!match) { - break - } - challenge[match[1]] = match[2] || match[3] - } - - /** - * RFC 2617: handle both MD5 and MD5-sess algorithms. - * - * If the algorithm directive's value is "MD5" or unspecified, then HA1 is - * HA1=MD5(username:realm:password) - * If the algorithm directive's value is "MD5-sess", then HA1 is - * HA1=MD5(MD5(username:realm:password):nonce:cnonce) - */ - var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) { - var ha1 = md5(user + ':' + realm + ':' + pass) - if (algorithm && algorithm.toLowerCase() === 'md5-sess') { - return md5(ha1 + ':' + nonce + ':' + cnonce) - } else { - return ha1 - } - } - - var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth' - var nc = qop && '00000001' - var cnonce = qop && uuid().replace(/-/g, '') - var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce) - var ha2 = md5(method + ':' + path) - var digestResponse = qop - ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) - : md5(ha1 + ':' + challenge.nonce + ':' + ha2) - var authValues = { - username: self.user, - realm: challenge.realm, - nonce: challenge.nonce, - uri: path, - qop: qop, - response: digestResponse, - nc: nc, - cnonce: cnonce, - algorithm: challenge.algorithm, - opaque: challenge.opaque - } - - authHeader = [] - for (var k in authValues) { - if (authValues[k]) { - if (k === 'qop' || k === 'nc' || k === 'algorithm') { - authHeader.push(k + '=' + authValues[k]) - } else { - authHeader.push(k + '="' + authValues[k] + '"') - } - } - } - authHeader = 'Digest ' + authHeader.join(', ') - self.sentAuth = true - return authHeader -} - -Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) { - var self = this - var request = self.request - - var authHeader - if (bearer === undefined && user === undefined) { - self.request.emit('error', new Error('no auth mechanism defined')) - } else if (bearer !== undefined) { - authHeader = self.bearer(bearer, sendImmediately) - } else { - authHeader = self.basic(user, pass, sendImmediately) - } - if (authHeader) { - request.setHeader('authorization', authHeader) - } -} - -Auth.prototype.onResponse = function (response) { - var self = this - var request = self.request - - if (!self.hasAuth || self.sentAuth) { return null } - - var c = caseless(response.headers) - - var authHeader = c.get('www-authenticate') - var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase() - request.debug('reauth', authVerb) - - switch (authVerb) { - case 'basic': - return self.basic(self.user, self.pass, true) - - case 'bearer': - return self.bearer(self.bearerToken, true) - - case 'digest': - return self.digest(request.method, request.path, authHeader) - } -} - -exports.Auth = Auth diff --git a/truebit-implementation/node_modules/request/lib/cookies.js b/truebit-implementation/node_modules/request/lib/cookies.js deleted file mode 100644 index bd5d46be..00000000 --- a/truebit-implementation/node_modules/request/lib/cookies.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict' - -var tough = require('tough-cookie') - -var Cookie = tough.Cookie -var CookieJar = tough.CookieJar - -exports.parse = function (str) { - if (str && str.uri) { - str = str.uri - } - if (typeof str !== 'string') { - throw new Error('The cookie function only accepts STRING as param') - } - return Cookie.parse(str, {loose: true}) -} - -// Adapt the sometimes-Async api of tough.CookieJar to our requirements -function RequestJar (store) { - var self = this - self._jar = new CookieJar(store, {looseMode: true}) -} -RequestJar.prototype.setCookie = function (cookieOrStr, uri, options) { - var self = this - return self._jar.setCookieSync(cookieOrStr, uri, options || {}) -} -RequestJar.prototype.getCookieString = function (uri) { - var self = this - return self._jar.getCookieStringSync(uri) -} -RequestJar.prototype.getCookies = function (uri) { - var self = this - return self._jar.getCookiesSync(uri) -} - -exports.jar = function (store) { - return new RequestJar(store) -} diff --git a/truebit-implementation/node_modules/request/lib/getProxyFromURI.js b/truebit-implementation/node_modules/request/lib/getProxyFromURI.js deleted file mode 100644 index 4633ba5f..00000000 --- a/truebit-implementation/node_modules/request/lib/getProxyFromURI.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict' - -function formatHostname (hostname) { - // canonicalize the hostname, so that 'oogle.com' won't match 'google.com' - return hostname.replace(/^\.*/, '.').toLowerCase() -} - -function parseNoProxyZone (zone) { - zone = zone.trim().toLowerCase() - - var zoneParts = zone.split(':', 2) - var zoneHost = formatHostname(zoneParts[0]) - var zonePort = zoneParts[1] - var hasPort = zone.indexOf(':') > -1 - - return {hostname: zoneHost, port: zonePort, hasPort: hasPort} -} - -function uriInNoProxy (uri, noProxy) { - var port = uri.port || (uri.protocol === 'https:' ? '443' : '80') - var hostname = formatHostname(uri.hostname) - var noProxyList = noProxy.split(',') - - // iterate through the noProxyList until it finds a match. - return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) { - var isMatchedAt = hostname.indexOf(noProxyZone.hostname) - var hostnameMatched = ( - isMatchedAt > -1 && - (isMatchedAt === hostname.length - noProxyZone.hostname.length) - ) - - if (noProxyZone.hasPort) { - return (port === noProxyZone.port) && hostnameMatched - } - - return hostnameMatched - }) -} - -function getProxyFromURI (uri) { - // Decide the proper request proxy to use based on the request URI object and the - // environmental variables (NO_PROXY, HTTP_PROXY, etc.) - // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html) - - var noProxy = process.env.NO_PROXY || process.env.no_proxy || '' - - // if the noProxy is a wildcard then return null - - if (noProxy === '*') { - return null - } - - // if the noProxy is not empty and the uri is found return null - - if (noProxy !== '' && uriInNoProxy(uri, noProxy)) { - return null - } - - // Check for HTTP or HTTPS Proxy in environment Else default to null - - if (uri.protocol === 'http:') { - return process.env.HTTP_PROXY || - process.env.http_proxy || null - } - - if (uri.protocol === 'https:') { - return process.env.HTTPS_PROXY || - process.env.https_proxy || - process.env.HTTP_PROXY || - process.env.http_proxy || null - } - - // if none of that works, return null - // (What uri protocol are you using then?) - - return null -} - -module.exports = getProxyFromURI diff --git a/truebit-implementation/node_modules/request/lib/har.js b/truebit-implementation/node_modules/request/lib/har.js deleted file mode 100644 index 2f660309..00000000 --- a/truebit-implementation/node_modules/request/lib/har.js +++ /dev/null @@ -1,205 +0,0 @@ -'use strict' - -var fs = require('fs') -var qs = require('querystring') -var validate = require('har-validator') -var extend = require('extend') - -function Har (request) { - this.request = request -} - -Har.prototype.reducer = function (obj, pair) { - // new property ? - if (obj[pair.name] === undefined) { - obj[pair.name] = pair.value - return obj - } - - // existing? convert to array - var arr = [ - obj[pair.name], - pair.value - ] - - obj[pair.name] = arr - - return obj -} - -Har.prototype.prep = function (data) { - // construct utility properties - data.queryObj = {} - data.headersObj = {} - data.postData.jsonObj = false - data.postData.paramsObj = false - - // construct query objects - if (data.queryString && data.queryString.length) { - data.queryObj = data.queryString.reduce(this.reducer, {}) - } - - // construct headers objects - if (data.headers && data.headers.length) { - // loweCase header keys - data.headersObj = data.headers.reduceRight(function (headers, header) { - headers[header.name] = header.value - return headers - }, {}) - } - - // construct Cookie header - if (data.cookies && data.cookies.length) { - var cookies = data.cookies.map(function (cookie) { - return cookie.name + '=' + cookie.value - }) - - if (cookies.length) { - data.headersObj.cookie = cookies.join('; ') - } - } - - // prep body - function some (arr) { - return arr.some(function (type) { - return data.postData.mimeType.indexOf(type) === 0 - }) - } - - if (some([ - 'multipart/mixed', - 'multipart/related', - 'multipart/form-data', - 'multipart/alternative'])) { - // reset values - data.postData.mimeType = 'multipart/form-data' - } else if (some([ - 'application/x-www-form-urlencoded'])) { - if (!data.postData.params) { - data.postData.text = '' - } else { - data.postData.paramsObj = data.postData.params.reduce(this.reducer, {}) - - // always overwrite - data.postData.text = qs.stringify(data.postData.paramsObj) - } - } else if (some([ - 'text/json', - 'text/x-json', - 'application/json', - 'application/x-json'])) { - data.postData.mimeType = 'application/json' - - if (data.postData.text) { - try { - data.postData.jsonObj = JSON.parse(data.postData.text) - } catch (e) { - this.request.debug(e) - - // force back to text/plain - data.postData.mimeType = 'text/plain' - } - } - } - - return data -} - -Har.prototype.options = function (options) { - // skip if no har property defined - if (!options.har) { - return options - } - - var har = {} - extend(har, options.har) - - // only process the first entry - if (har.log && har.log.entries) { - har = har.log.entries[0] - } - - // add optional properties to make validation successful - har.url = har.url || options.url || options.uri || options.baseUrl || '/' - har.httpVersion = har.httpVersion || 'HTTP/1.1' - har.queryString = har.queryString || [] - har.headers = har.headers || [] - har.cookies = har.cookies || [] - har.postData = har.postData || {} - har.postData.mimeType = har.postData.mimeType || 'application/octet-stream' - - har.bodySize = 0 - har.headersSize = 0 - har.postData.size = 0 - - if (!validate.request(har)) { - return options - } - - // clean up and get some utility properties - var req = this.prep(har) - - // construct new options - if (req.url) { - options.url = req.url - } - - if (req.method) { - options.method = req.method - } - - if (Object.keys(req.queryObj).length) { - options.qs = req.queryObj - } - - if (Object.keys(req.headersObj).length) { - options.headers = req.headersObj - } - - function test (type) { - return req.postData.mimeType.indexOf(type) === 0 - } - if (test('application/x-www-form-urlencoded')) { - options.form = req.postData.paramsObj - } else if (test('application/json')) { - if (req.postData.jsonObj) { - options.body = req.postData.jsonObj - options.json = true - } - } else if (test('multipart/form-data')) { - options.formData = {} - - req.postData.params.forEach(function (param) { - var attachment = {} - - if (!param.fileName && !param.fileName && !param.contentType) { - options.formData[param.name] = param.value - return - } - - // attempt to read from disk! - if (param.fileName && !param.value) { - attachment.value = fs.createReadStream(param.fileName) - } else if (param.value) { - attachment.value = param.value - } - - if (param.fileName) { - attachment.options = { - filename: param.fileName, - contentType: param.contentType ? param.contentType : null - } - } - - options.formData[param.name] = attachment - }) - } else { - if (req.postData.text) { - options.body = req.postData.text - } - } - - return options -} - -exports.Har = Har diff --git a/truebit-implementation/node_modules/request/lib/hawk.js b/truebit-implementation/node_modules/request/lib/hawk.js deleted file mode 100644 index de48a985..00000000 --- a/truebit-implementation/node_modules/request/lib/hawk.js +++ /dev/null @@ -1,89 +0,0 @@ -'use strict' - -var crypto = require('crypto') - -function randomString (size) { - var bits = (size + 1) * 6 - var buffer = crypto.randomBytes(Math.ceil(bits / 8)) - var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '') - return string.slice(0, size) -} - -function calculatePayloadHash (payload, algorithm, contentType) { - var hash = crypto.createHash(algorithm) - hash.update('hawk.1.payload\n') - hash.update((contentType ? contentType.split(';')[0].trim().toLowerCase() : '') + '\n') - hash.update(payload || '') - hash.update('\n') - return hash.digest('base64') -} - -exports.calculateMac = function (credentials, opts) { - var normalized = 'hawk.1.header\n' + - opts.ts + '\n' + - opts.nonce + '\n' + - (opts.method || '').toUpperCase() + '\n' + - opts.resource + '\n' + - opts.host.toLowerCase() + '\n' + - opts.port + '\n' + - (opts.hash || '') + '\n' - - if (opts.ext) { - normalized = normalized + opts.ext.replace('\\', '\\\\').replace('\n', '\\n') - } - - normalized = normalized + '\n' - - if (opts.app) { - normalized = normalized + opts.app + '\n' + (opts.dlg || '') + '\n' - } - - var hmac = crypto.createHmac(credentials.algorithm, credentials.key).update(normalized) - var digest = hmac.digest('base64') - return digest -} - -exports.header = function (uri, method, opts) { - var timestamp = opts.timestamp || Math.floor((Date.now() + (opts.localtimeOffsetMsec || 0)) / 1000) - var credentials = opts.credentials - if (!credentials || !credentials.id || !credentials.key || !credentials.algorithm) { - return '' - } - - if (['sha1', 'sha256'].indexOf(credentials.algorithm) === -1) { - return '' - } - - var artifacts = { - ts: timestamp, - nonce: opts.nonce || randomString(6), - method: method, - resource: uri.pathname + (uri.search || ''), - host: uri.hostname, - port: uri.port || (uri.protocol === 'http:' ? 80 : 443), - hash: opts.hash, - ext: opts.ext, - app: opts.app, - dlg: opts.dlg - } - - if (!artifacts.hash && (opts.payload || opts.payload === '')) { - artifacts.hash = calculatePayloadHash(opts.payload, credentials.algorithm, opts.contentType) - } - - var mac = exports.calculateMac(credentials, artifacts) - - var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== '' - var header = 'Hawk id="' + credentials.id + - '", ts="' + artifacts.ts + - '", nonce="' + artifacts.nonce + - (artifacts.hash ? '", hash="' + artifacts.hash : '') + - (hasExt ? '", ext="' + artifacts.ext.replace(/\\/g, '\\\\').replace(/"/g, '\\"') : '') + - '", mac="' + mac + '"' - - if (artifacts.app) { - header = header + ', app="' + artifacts.app + (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"' - } - - return header -} diff --git a/truebit-implementation/node_modules/request/lib/helpers.js b/truebit-implementation/node_modules/request/lib/helpers.js deleted file mode 100644 index 8b2a7e6e..00000000 --- a/truebit-implementation/node_modules/request/lib/helpers.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict' - -var jsonSafeStringify = require('json-stringify-safe') -var crypto = require('crypto') -var Buffer = require('safe-buffer').Buffer - -var defer = typeof setImmediate === 'undefined' - ? process.nextTick - : setImmediate - -function paramsHaveRequestBody (params) { - return ( - params.body || - params.requestBodyStream || - (params.json && typeof params.json !== 'boolean') || - params.multipart - ) -} - -function safeStringify (obj, replacer) { - var ret - try { - ret = JSON.stringify(obj, replacer) - } catch (e) { - ret = jsonSafeStringify(obj, replacer) - } - return ret -} - -function md5 (str) { - return crypto.createHash('md5').update(str).digest('hex') -} - -function isReadStream (rs) { - return rs.readable && rs.path && rs.mode -} - -function toBase64 (str) { - return Buffer.from(str || '', 'utf8').toString('base64') -} - -function copy (obj) { - var o = {} - Object.keys(obj).forEach(function (i) { - o[i] = obj[i] - }) - return o -} - -function version () { - var numbers = process.version.replace('v', '').split('.') - return { - major: parseInt(numbers[0], 10), - minor: parseInt(numbers[1], 10), - patch: parseInt(numbers[2], 10) - } -} - -exports.paramsHaveRequestBody = paramsHaveRequestBody -exports.safeStringify = safeStringify -exports.md5 = md5 -exports.isReadStream = isReadStream -exports.toBase64 = toBase64 -exports.copy = copy -exports.version = version -exports.defer = defer diff --git a/truebit-implementation/node_modules/request/lib/multipart.js b/truebit-implementation/node_modules/request/lib/multipart.js deleted file mode 100644 index 6a009bc1..00000000 --- a/truebit-implementation/node_modules/request/lib/multipart.js +++ /dev/null @@ -1,112 +0,0 @@ -'use strict' - -var uuid = require('uuid/v4') -var CombinedStream = require('combined-stream') -var isstream = require('isstream') -var Buffer = require('safe-buffer').Buffer - -function Multipart (request) { - this.request = request - this.boundary = uuid() - this.chunked = false - this.body = null -} - -Multipart.prototype.isChunked = function (options) { - var self = this - var chunked = false - var parts = options.data || options - - if (!parts.forEach) { - self.request.emit('error', new Error('Argument error, options.multipart.')) - } - - if (options.chunked !== undefined) { - chunked = options.chunked - } - - if (self.request.getHeader('transfer-encoding') === 'chunked') { - chunked = true - } - - if (!chunked) { - parts.forEach(function (part) { - if (typeof part.body === 'undefined') { - self.request.emit('error', new Error('Body attribute missing in multipart.')) - } - if (isstream(part.body)) { - chunked = true - } - }) - } - - return chunked -} - -Multipart.prototype.setHeaders = function (chunked) { - var self = this - - if (chunked && !self.request.hasHeader('transfer-encoding')) { - self.request.setHeader('transfer-encoding', 'chunked') - } - - var header = self.request.getHeader('content-type') - - if (!header || header.indexOf('multipart') === -1) { - self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) - } else { - if (header.indexOf('boundary') !== -1) { - self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1') - } else { - self.request.setHeader('content-type', header + '; boundary=' + self.boundary) - } - } -} - -Multipart.prototype.build = function (parts, chunked) { - var self = this - var body = chunked ? new CombinedStream() : [] - - function add (part) { - if (typeof part === 'number') { - part = part.toString() - } - return chunked ? body.append(part) : body.push(Buffer.from(part)) - } - - if (self.request.preambleCRLF) { - add('\r\n') - } - - parts.forEach(function (part) { - var preamble = '--' + self.boundary + '\r\n' - Object.keys(part).forEach(function (key) { - if (key === 'body') { return } - preamble += key + ': ' + part[key] + '\r\n' - }) - preamble += '\r\n' - add(preamble) - add(part.body) - add('\r\n') - }) - add('--' + self.boundary + '--') - - if (self.request.postambleCRLF) { - add('\r\n') - } - - return body -} - -Multipart.prototype.onRequest = function (options) { - var self = this - - var chunked = self.isChunked(options) - var parts = options.data || options - - self.setHeaders(chunked) - self.chunked = chunked - self.body = self.build(parts, chunked) -} - -exports.Multipart = Multipart diff --git a/truebit-implementation/node_modules/request/lib/oauth.js b/truebit-implementation/node_modules/request/lib/oauth.js deleted file mode 100644 index 96de72b8..00000000 --- a/truebit-implementation/node_modules/request/lib/oauth.js +++ /dev/null @@ -1,148 +0,0 @@ -'use strict' - -var url = require('url') -var qs = require('qs') -var caseless = require('caseless') -var uuid = require('uuid/v4') -var oauth = require('oauth-sign') -var crypto = require('crypto') -var Buffer = require('safe-buffer').Buffer - -function OAuth (request) { - this.request = request - this.params = null -} - -OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) { - var oa = {} - for (var i in _oauth) { - oa['oauth_' + i] = _oauth[i] - } - if (!oa.oauth_version) { - oa.oauth_version = '1.0' - } - if (!oa.oauth_timestamp) { - oa.oauth_timestamp = Math.floor(Date.now() / 1000).toString() - } - if (!oa.oauth_nonce) { - oa.oauth_nonce = uuid().replace(/-/g, '') - } - if (!oa.oauth_signature_method) { - oa.oauth_signature_method = 'HMAC-SHA1' - } - - var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key // eslint-disable-line camelcase - delete oa.oauth_consumer_secret - delete oa.oauth_private_key - - var token_secret = oa.oauth_token_secret // eslint-disable-line camelcase - delete oa.oauth_token_secret - - var realm = oa.oauth_realm - delete oa.oauth_realm - delete oa.oauth_transport_method - - var baseurl = uri.protocol + '//' + uri.host + uri.pathname - var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&')) - - oa.oauth_signature = oauth.sign( - oa.oauth_signature_method, - method, - baseurl, - params, - consumer_secret_or_private_key, // eslint-disable-line camelcase - token_secret // eslint-disable-line camelcase - ) - - if (realm) { - oa.realm = realm - } - - return oa -} - -OAuth.prototype.buildBodyHash = function (_oauth, body) { - if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) { - this.request.emit('error', new Error('oauth: ' + _oauth.signature_method + - ' signature_method not supported with body_hash signing.')) - } - - var shasum = crypto.createHash('sha1') - shasum.update(body || '') - var sha1 = shasum.digest('hex') - - return Buffer.from(sha1, 'hex').toString('base64') -} - -OAuth.prototype.concatParams = function (oa, sep, wrap) { - wrap = wrap || '' - - var params = Object.keys(oa).filter(function (i) { - return i !== 'realm' && i !== 'oauth_signature' - }).sort() - - if (oa.realm) { - params.splice(0, 0, 'realm') - } - params.push('oauth_signature') - - return params.map(function (i) { - return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap - }).join(sep) -} - -OAuth.prototype.onRequest = function (_oauth) { - var self = this - self.params = _oauth - - var uri = self.request.uri || {} - var method = self.request.method || '' - var headers = caseless(self.request.headers) - var body = self.request.body || '' - var qsLib = self.request.qsLib || qs - - var form - var query - var contentType = headers.get('content-type') || '' - var formContentType = 'application/x-www-form-urlencoded' - var transport = _oauth.transport_method || 'header' - - if (contentType.slice(0, formContentType.length) === formContentType) { - contentType = formContentType - form = body - } - if (uri.query) { - query = uri.query - } - if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) { - self.request.emit('error', new Error('oauth: transport_method of body requires POST ' + - 'and content-type ' + formContentType)) - } - - if (!form && typeof _oauth.body_hash === 'boolean') { - _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString()) - } - - var oa = self.buildParams(_oauth, uri, method, query, form, qsLib) - - switch (transport) { - case 'header': - self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '"')) - break - - case 'query': - var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&') - self.request.uri = url.parse(href) - self.request.path = self.request.uri.path - break - - case 'body': - self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&') - break - - default: - self.request.emit('error', new Error('oauth: transport_method invalid')) - } -} - -exports.OAuth = OAuth diff --git a/truebit-implementation/node_modules/request/lib/querystring.js b/truebit-implementation/node_modules/request/lib/querystring.js deleted file mode 100644 index 4a32cd14..00000000 --- a/truebit-implementation/node_modules/request/lib/querystring.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict' - -var qs = require('qs') -var querystring = require('querystring') - -function Querystring (request) { - this.request = request - this.lib = null - this.useQuerystring = null - this.parseOptions = null - this.stringifyOptions = null -} - -Querystring.prototype.init = function (options) { - if (this.lib) { return } - - this.useQuerystring = options.useQuerystring - this.lib = (this.useQuerystring ? querystring : qs) - - this.parseOptions = options.qsParseOptions || {} - this.stringifyOptions = options.qsStringifyOptions || {} -} - -Querystring.prototype.stringify = function (obj) { - return (this.useQuerystring) - ? this.rfc3986(this.lib.stringify(obj, - this.stringifyOptions.sep || null, - this.stringifyOptions.eq || null, - this.stringifyOptions)) - : this.lib.stringify(obj, this.stringifyOptions) -} - -Querystring.prototype.parse = function (str) { - return (this.useQuerystring) - ? this.lib.parse(str, - this.parseOptions.sep || null, - this.parseOptions.eq || null, - this.parseOptions) - : this.lib.parse(str, this.parseOptions) -} - -Querystring.prototype.rfc3986 = function (str) { - return str.replace(/[!'()*]/g, function (c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -Querystring.prototype.unescape = querystring.unescape - -exports.Querystring = Querystring diff --git a/truebit-implementation/node_modules/request/lib/redirect.js b/truebit-implementation/node_modules/request/lib/redirect.js deleted file mode 100644 index b9150e77..00000000 --- a/truebit-implementation/node_modules/request/lib/redirect.js +++ /dev/null @@ -1,154 +0,0 @@ -'use strict' - -var url = require('url') -var isUrl = /^https?:/ - -function Redirect (request) { - this.request = request - this.followRedirect = true - this.followRedirects = true - this.followAllRedirects = false - this.followOriginalHttpMethod = false - this.allowRedirect = function () { return true } - this.maxRedirects = 10 - this.redirects = [] - this.redirectsFollowed = 0 - this.removeRefererHeader = false -} - -Redirect.prototype.onRequest = function (options) { - var self = this - - if (options.maxRedirects !== undefined) { - self.maxRedirects = options.maxRedirects - } - if (typeof options.followRedirect === 'function') { - self.allowRedirect = options.followRedirect - } - if (options.followRedirect !== undefined) { - self.followRedirects = !!options.followRedirect - } - if (options.followAllRedirects !== undefined) { - self.followAllRedirects = options.followAllRedirects - } - if (self.followRedirects || self.followAllRedirects) { - self.redirects = self.redirects || [] - } - if (options.removeRefererHeader !== undefined) { - self.removeRefererHeader = options.removeRefererHeader - } - if (options.followOriginalHttpMethod !== undefined) { - self.followOriginalHttpMethod = options.followOriginalHttpMethod - } -} - -Redirect.prototype.redirectTo = function (response) { - var self = this - var request = self.request - - var redirectTo = null - if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) { - var location = response.caseless.get('location') - request.debug('redirect', location) - - if (self.followAllRedirects) { - redirectTo = location - } else if (self.followRedirects) { - switch (request.method) { - case 'PATCH': - case 'PUT': - case 'POST': - case 'DELETE': - // Do not follow redirects - break - default: - redirectTo = location - break - } - } - } else if (response.statusCode === 401) { - var authHeader = request._auth.onResponse(response) - if (authHeader) { - request.setHeader('authorization', authHeader) - redirectTo = request.uri - } - } - return redirectTo -} - -Redirect.prototype.onResponse = function (response) { - var self = this - var request = self.request - - var redirectTo = self.redirectTo(response) - if (!redirectTo || !self.allowRedirect.call(request, response)) { - return false - } - - request.debug('redirect to', redirectTo) - - // ignore any potential response body. it cannot possibly be useful - // to us at this point. - // response.resume should be defined, but check anyway before calling. Workaround for browserify. - if (response.resume) { - response.resume() - } - - if (self.redirectsFollowed >= self.maxRedirects) { - request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href)) - return false - } - self.redirectsFollowed += 1 - - if (!isUrl.test(redirectTo)) { - redirectTo = url.resolve(request.uri.href, redirectTo) - } - - var uriPrev = request.uri - request.uri = url.parse(redirectTo) - - // handle the case where we change protocol from https to http or vice versa - if (request.uri.protocol !== uriPrev.protocol) { - delete request.agent - } - - self.redirects.push({ statusCode: response.statusCode, redirectUri: redirectTo }) - - if (self.followAllRedirects && request.method !== 'HEAD' && - response.statusCode !== 401 && response.statusCode !== 307) { - request.method = self.followOriginalHttpMethod ? request.method : 'GET' - } - // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215 - delete request.src - delete request.req - delete request._started - if (response.statusCode !== 401 && response.statusCode !== 307) { - // Remove parameters from the previous response, unless this is the second request - // for a server that requires digest authentication. - delete request.body - delete request._form - if (request.headers) { - request.removeHeader('host') - request.removeHeader('content-type') - request.removeHeader('content-length') - if (request.uri.hostname !== request.originalHost.split(':')[0]) { - // Remove authorization if changing hostnames (but not if just - // changing ports or protocols). This matches the behavior of curl: - // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710 - request.removeHeader('authorization') - } - } - } - - if (!self.removeRefererHeader) { - request.setHeader('referer', uriPrev.href) - } - - request.emit('redirect') - - request.init() - - return true -} - -exports.Redirect = Redirect diff --git a/truebit-implementation/node_modules/request/lib/tunnel.js b/truebit-implementation/node_modules/request/lib/tunnel.js deleted file mode 100644 index 4479003f..00000000 --- a/truebit-implementation/node_modules/request/lib/tunnel.js +++ /dev/null @@ -1,175 +0,0 @@ -'use strict' - -var url = require('url') -var tunnel = require('tunnel-agent') - -var defaultProxyHeaderWhiteList = [ - 'accept', - 'accept-charset', - 'accept-encoding', - 'accept-language', - 'accept-ranges', - 'cache-control', - 'content-encoding', - 'content-language', - 'content-location', - 'content-md5', - 'content-range', - 'content-type', - 'connection', - 'date', - 'expect', - 'max-forwards', - 'pragma', - 'referer', - 'te', - 'user-agent', - 'via' -] - -var defaultProxyHeaderExclusiveList = [ - 'proxy-authorization' -] - -function constructProxyHost (uriObject) { - var port = uriObject.port - var protocol = uriObject.protocol - var proxyHost = uriObject.hostname + ':' - - if (port) { - proxyHost += port - } else if (protocol === 'https:') { - proxyHost += '443' - } else { - proxyHost += '80' - } - - return proxyHost -} - -function constructProxyHeaderWhiteList (headers, proxyHeaderWhiteList) { - var whiteList = proxyHeaderWhiteList - .reduce(function (set, header) { - set[header.toLowerCase()] = true - return set - }, {}) - - return Object.keys(headers) - .filter(function (header) { - return whiteList[header.toLowerCase()] - }) - .reduce(function (set, header) { - set[header] = headers[header] - return set - }, {}) -} - -function constructTunnelOptions (request, proxyHeaders) { - var proxy = request.proxy - - var tunnelOptions = { - proxy: { - host: proxy.hostname, - port: +proxy.port, - proxyAuth: proxy.auth, - headers: proxyHeaders - }, - headers: request.headers, - ca: request.ca, - cert: request.cert, - key: request.key, - passphrase: request.passphrase, - pfx: request.pfx, - ciphers: request.ciphers, - rejectUnauthorized: request.rejectUnauthorized, - secureOptions: request.secureOptions, - secureProtocol: request.secureProtocol - } - - return tunnelOptions -} - -function constructTunnelFnName (uri, proxy) { - var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http') - var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http') - return [uriProtocol, proxyProtocol].join('Over') -} - -function getTunnelFn (request) { - var uri = request.uri - var proxy = request.proxy - var tunnelFnName = constructTunnelFnName(uri, proxy) - return tunnel[tunnelFnName] -} - -function Tunnel (request) { - this.request = request - this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList - this.proxyHeaderExclusiveList = [] - if (typeof request.tunnel !== 'undefined') { - this.tunnelOverride = request.tunnel - } -} - -Tunnel.prototype.isEnabled = function () { - var self = this - var request = self.request - // Tunnel HTTPS by default. Allow the user to override this setting. - - // If self.tunnelOverride is set (the user specified a value), use it. - if (typeof self.tunnelOverride !== 'undefined') { - return self.tunnelOverride - } - - // If the destination is HTTPS, tunnel. - if (request.uri.protocol === 'https:') { - return true - } - - // Otherwise, do not use tunnel. - return false -} - -Tunnel.prototype.setup = function (options) { - var self = this - var request = self.request - - options = options || {} - - if (typeof request.proxy === 'string') { - request.proxy = url.parse(request.proxy) - } - - if (!request.proxy || !request.tunnel) { - return false - } - - // Setup Proxy Header Exclusive List and White List - if (options.proxyHeaderWhiteList) { - self.proxyHeaderWhiteList = options.proxyHeaderWhiteList - } - if (options.proxyHeaderExclusiveList) { - self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList - } - - var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList) - var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList) - - // Setup Proxy Headers and Proxy Headers Host - // Only send the Proxy White Listed Header names - var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList) - proxyHeaders.host = constructProxyHost(request.uri) - - proxyHeaderExclusiveList.forEach(request.removeHeader, request) - - // Set Agent from Tunnel Data - var tunnelFn = getTunnelFn(request) - var tunnelOptions = constructTunnelOptions(request, proxyHeaders) - request.agent = tunnelFn(tunnelOptions) - - return true -} - -Tunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList -Tunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList -exports.Tunnel = Tunnel diff --git a/truebit-implementation/node_modules/request/package.json b/truebit-implementation/node_modules/request/package.json deleted file mode 100644 index 7775bf63..00000000 --- a/truebit-implementation/node_modules/request/package.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "_from": "request@^2.79.0", - "_id": "request@2.88.0", - "_inBundle": false, - "_integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "_location": "/request", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "request@^2.79.0", - "name": "request", - "escapedName": "request", - "rawSpec": "^2.79.0", - "saveSpec": null, - "fetchSpec": "^2.79.0" - }, - "_requiredBy": [ - "/servify" - ], - "_resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "_shasum": "9c2fca4f7d35b592efe57c7f0a55e81052124fef", - "_spec": "request@^2.79.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/servify", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com" - }, - "bugs": { - "url": "http://github.com/request/request/issues" - }, - "bundleDependencies": false, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "deprecated": false, - "description": "Simplified HTTP request client.", - "devDependencies": { - "bluebird": "^3.2.1", - "browserify": "^13.0.1", - "browserify-istanbul": "^2.0.0", - "buffer-equal": "^1.0.0", - "codecov": "^3.0.4", - "coveralls": "^3.0.2", - "function-bind": "^1.0.2", - "istanbul": "^0.4.0", - "karma": "^3.0.0", - "karma-browserify": "^5.0.1", - "karma-cli": "^1.0.0", - "karma-coverage": "^1.0.0", - "karma-phantomjs-launcher": "^1.0.0", - "karma-tap": "^3.0.1", - "phantomjs-prebuilt": "^2.1.3", - "rimraf": "^2.2.8", - "server-destroy": "^1.0.1", - "standard": "^9.0.0", - "tape": "^4.6.0", - "taper": "^0.5.0" - }, - "engines": { - "node": ">= 4" - }, - "files": [ - "lib/", - "index.js", - "request.js" - ], - "greenkeeper": { - "ignore": [ - "hawk", - "har-validator" - ] - }, - "homepage": "https://github.com/request/request#readme", - "keywords": [ - "http", - "simple", - "util", - "utility" - ], - "license": "Apache-2.0", - "main": "index.js", - "name": "request", - "repository": { - "type": "git", - "url": "git+https://github.com/request/request.git" - }, - "scripts": { - "lint": "standard", - "test": "npm run lint && npm run test-ci && npm run test-browser", - "test-browser": "node tests/browser/start.js", - "test-ci": "taper tests/test-*.js", - "test-cov": "istanbul cover tape tests/test-*.js" - }, - "version": "2.88.0" -} diff --git a/truebit-implementation/node_modules/request/request.js b/truebit-implementation/node_modules/request/request.js deleted file mode 100644 index 90bed4f4..00000000 --- a/truebit-implementation/node_modules/request/request.js +++ /dev/null @@ -1,1551 +0,0 @@ -'use strict' - -var http = require('http') -var https = require('https') -var url = require('url') -var util = require('util') -var stream = require('stream') -var zlib = require('zlib') -var aws2 = require('aws-sign2') -var aws4 = require('aws4') -var httpSignature = require('http-signature') -var mime = require('mime-types') -var caseless = require('caseless') -var ForeverAgent = require('forever-agent') -var FormData = require('form-data') -var extend = require('extend') -var isstream = require('isstream') -var isTypedArray = require('is-typedarray').strict -var helpers = require('./lib/helpers') -var cookies = require('./lib/cookies') -var getProxyFromURI = require('./lib/getProxyFromURI') -var Querystring = require('./lib/querystring').Querystring -var Har = require('./lib/har').Har -var Auth = require('./lib/auth').Auth -var OAuth = require('./lib/oauth').OAuth -var hawk = require('./lib/hawk') -var Multipart = require('./lib/multipart').Multipart -var Redirect = require('./lib/redirect').Redirect -var Tunnel = require('./lib/tunnel').Tunnel -var now = require('performance-now') -var Buffer = require('safe-buffer').Buffer - -var safeStringify = helpers.safeStringify -var isReadStream = helpers.isReadStream -var toBase64 = helpers.toBase64 -var defer = helpers.defer -var copy = helpers.copy -var version = helpers.version -var globalCookieJar = cookies.jar() - -var globalPool = {} - -function filterForNonReserved (reserved, options) { - // Filter out properties that are not reserved. - // Reserved values are passed in at call site. - - var object = {} - for (var i in options) { - var notReserved = (reserved.indexOf(i) === -1) - if (notReserved) { - object[i] = options[i] - } - } - return object -} - -function filterOutReservedFunctions (reserved, options) { - // Filter out properties that are functions and are reserved. - // Reserved values are passed in at call site. - - var object = {} - for (var i in options) { - var isReserved = !(reserved.indexOf(i) === -1) - var isFunction = (typeof options[i] === 'function') - if (!(isReserved && isFunction)) { - object[i] = options[i] - } - } - return object -} - -// Return a simpler request object to allow serialization -function requestToJSON () { - var self = this - return { - uri: self.uri, - method: self.method, - headers: self.headers - } -} - -// Return a simpler response object to allow serialization -function responseToJSON () { - var self = this - return { - statusCode: self.statusCode, - body: self.body, - headers: self.headers, - request: requestToJSON.call(self.request) - } -} - -function Request (options) { - // if given the method property in options, set property explicitMethod to true - - // extend the Request instance with any non-reserved properties - // remove any reserved functions from the options object - // set Request instance to be readable and writable - // call init - - var self = this - - // start with HAR, then override with additional options - if (options.har) { - self._har = new Har(self) - options = self._har.options(options) - } - - stream.Stream.call(self) - var reserved = Object.keys(Request.prototype) - var nonReserved = filterForNonReserved(reserved, options) - - extend(self, nonReserved) - options = filterOutReservedFunctions(reserved, options) - - self.readable = true - self.writable = true - if (options.method) { - self.explicitMethod = true - } - self._qs = new Querystring(self) - self._auth = new Auth(self) - self._oauth = new OAuth(self) - self._multipart = new Multipart(self) - self._redirect = new Redirect(self) - self._tunnel = new Tunnel(self) - self.init(options) -} - -util.inherits(Request, stream.Stream) - -// Debugging -Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG) -function debug () { - if (Request.debug) { - console.error('REQUEST %s', util.format.apply(util, arguments)) - } -} -Request.prototype.debug = debug - -Request.prototype.init = function (options) { - // init() contains all the code to setup the request object. - // the actual outgoing request is not started until start() is called - // this function is called from both the constructor and on redirect. - var self = this - if (!options) { - options = {} - } - self.headers = self.headers ? copy(self.headers) : {} - - // Delete headers with value undefined since they break - // ClientRequest.OutgoingMessage.setHeader in node 0.12 - for (var headerName in self.headers) { - if (typeof self.headers[headerName] === 'undefined') { - delete self.headers[headerName] - } - } - - caseless.httpify(self, self.headers) - - if (!self.method) { - self.method = options.method || 'GET' - } - if (!self.localAddress) { - self.localAddress = options.localAddress - } - - self._qs.init(options) - - debug(options) - if (!self.pool && self.pool !== false) { - self.pool = globalPool - } - self.dests = self.dests || [] - self.__isRequestRequest = true - - // Protect against double callback - if (!self._callback && self.callback) { - self._callback = self.callback - self.callback = function () { - if (self._callbackCalled) { - return // Print a warning maybe? - } - self._callbackCalled = true - self._callback.apply(self, arguments) - } - self.on('error', self.callback.bind()) - self.on('complete', self.callback.bind(self, null)) - } - - // People use this property instead all the time, so support it - if (!self.uri && self.url) { - self.uri = self.url - delete self.url - } - - // If there's a baseUrl, then use it as the base URL (i.e. uri must be - // specified as a relative path and is appended to baseUrl). - if (self.baseUrl) { - if (typeof self.baseUrl !== 'string') { - return self.emit('error', new Error('options.baseUrl must be a string')) - } - - if (typeof self.uri !== 'string') { - return self.emit('error', new Error('options.uri must be a string when using options.baseUrl')) - } - - if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) { - return self.emit('error', new Error('options.uri must be a path when using options.baseUrl')) - } - - // Handle all cases to make sure that there's only one slash between - // baseUrl and uri. - var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1 - var uriStartsWithSlash = self.uri.indexOf('/') === 0 - - if (baseUrlEndsWithSlash && uriStartsWithSlash) { - self.uri = self.baseUrl + self.uri.slice(1) - } else if (baseUrlEndsWithSlash || uriStartsWithSlash) { - self.uri = self.baseUrl + self.uri - } else if (self.uri === '') { - self.uri = self.baseUrl - } else { - self.uri = self.baseUrl + '/' + self.uri - } - delete self.baseUrl - } - - // A URI is needed by this point, emit error if we haven't been able to get one - if (!self.uri) { - return self.emit('error', new Error('options.uri is a required argument')) - } - - // If a string URI/URL was given, parse it into a URL object - if (typeof self.uri === 'string') { - self.uri = url.parse(self.uri) - } - - // Some URL objects are not from a URL parsed string and need href added - if (!self.uri.href) { - self.uri.href = url.format(self.uri) - } - - // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme - if (self.uri.protocol === 'unix:') { - return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`')) - } - - // Support Unix Sockets - if (self.uri.host === 'unix') { - self.enableUnixSocket() - } - - if (self.strictSSL === false) { - self.rejectUnauthorized = false - } - - if (!self.uri.pathname) { self.uri.pathname = '/' } - - if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) { - // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar - // Detect and reject it as soon as possible - var faultyUri = url.format(self.uri) - var message = 'Invalid URI "' + faultyUri + '"' - if (Object.keys(options).length === 0) { - // No option ? This can be the sign of a redirect - // As this is a case where the user cannot do anything (they didn't call request directly with this URL) - // they should be warned that it can be caused by a redirection (can save some hair) - message += '. This can be caused by a crappy redirection.' - } - // This error was fatal - self.abort() - return self.emit('error', new Error(message)) - } - - if (!self.hasOwnProperty('proxy')) { - self.proxy = getProxyFromURI(self.uri) - } - - self.tunnel = self._tunnel.isEnabled() - if (self.proxy) { - self._tunnel.setup(options) - } - - self._redirect.onRequest(options) - - self.setHost = false - if (!self.hasHeader('host')) { - var hostHeaderName = self.originalHostHeaderName || 'host' - self.setHeader(hostHeaderName, self.uri.host) - // Drop :port suffix from Host header if known protocol. - if (self.uri.port) { - if ((self.uri.port === '80' && self.uri.protocol === 'http:') || - (self.uri.port === '443' && self.uri.protocol === 'https:')) { - self.setHeader(hostHeaderName, self.uri.hostname) - } - } - self.setHost = true - } - - self.jar(self._jar || options.jar) - - if (!self.uri.port) { - if (self.uri.protocol === 'http:') { self.uri.port = 80 } else if (self.uri.protocol === 'https:') { self.uri.port = 443 } - } - - if (self.proxy && !self.tunnel) { - self.port = self.proxy.port - self.host = self.proxy.hostname - } else { - self.port = self.uri.port - self.host = self.uri.hostname - } - - if (options.form) { - self.form(options.form) - } - - if (options.formData) { - var formData = options.formData - var requestForm = self.form() - var appendFormValue = function (key, value) { - if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) { - requestForm.append(key, value.value, value.options) - } else { - requestForm.append(key, value) - } - } - for (var formKey in formData) { - if (formData.hasOwnProperty(formKey)) { - var formValue = formData[formKey] - if (formValue instanceof Array) { - for (var j = 0; j < formValue.length; j++) { - appendFormValue(formKey, formValue[j]) - } - } else { - appendFormValue(formKey, formValue) - } - } - } - } - - if (options.qs) { - self.qs(options.qs) - } - - if (self.uri.path) { - self.path = self.uri.path - } else { - self.path = self.uri.pathname + (self.uri.search || '') - } - - if (self.path.length === 0) { - self.path = '/' - } - - // Auth must happen last in case signing is dependent on other headers - if (options.aws) { - self.aws(options.aws) - } - - if (options.hawk) { - self.hawk(options.hawk) - } - - if (options.httpSignature) { - self.httpSignature(options.httpSignature) - } - - if (options.auth) { - if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) { - options.auth.user = options.auth.username - } - if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) { - options.auth.pass = options.auth.password - } - - self.auth( - options.auth.user, - options.auth.pass, - options.auth.sendImmediately, - options.auth.bearer - ) - } - - if (self.gzip && !self.hasHeader('accept-encoding')) { - self.setHeader('accept-encoding', 'gzip, deflate') - } - - if (self.uri.auth && !self.hasHeader('authorization')) { - var uriAuthPieces = self.uri.auth.split(':').map(function (item) { return self._qs.unescape(item) }) - self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true) - } - - if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) { - var proxyAuthPieces = self.proxy.auth.split(':').map(function (item) { return self._qs.unescape(item) }) - var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':')) - self.setHeader('proxy-authorization', authHeader) - } - - if (self.proxy && !self.tunnel) { - self.path = (self.uri.protocol + '//' + self.uri.host + self.path) - } - - if (options.json) { - self.json(options.json) - } - if (options.multipart) { - self.multipart(options.multipart) - } - - if (options.time) { - self.timing = true - - // NOTE: elapsedTime is deprecated in favor of .timings - self.elapsedTime = self.elapsedTime || 0 - } - - function setContentLength () { - if (isTypedArray(self.body)) { - self.body = Buffer.from(self.body) - } - - if (!self.hasHeader('content-length')) { - var length - if (typeof self.body === 'string') { - length = Buffer.byteLength(self.body) - } else if (Array.isArray(self.body)) { - length = self.body.reduce(function (a, b) { return a + b.length }, 0) - } else { - length = self.body.length - } - - if (length) { - self.setHeader('content-length', length) - } else { - self.emit('error', new Error('Argument error, options.body.')) - } - } - } - if (self.body && !isstream(self.body)) { - setContentLength() - } - - if (options.oauth) { - self.oauth(options.oauth) - } else if (self._oauth.params && self.hasHeader('authorization')) { - self.oauth(self._oauth.params) - } - - var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol - var defaultModules = {'http:': http, 'https:': https} - var httpModules = self.httpModules || {} - - self.httpModule = httpModules[protocol] || defaultModules[protocol] - - if (!self.httpModule) { - return self.emit('error', new Error('Invalid protocol: ' + protocol)) - } - - if (options.ca) { - self.ca = options.ca - } - - if (!self.agent) { - if (options.agentOptions) { - self.agentOptions = options.agentOptions - } - - if (options.agentClass) { - self.agentClass = options.agentClass - } else if (options.forever) { - var v = version() - // use ForeverAgent in node 0.10- only - if (v.major === 0 && v.minor <= 10) { - self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL - } else { - self.agentClass = self.httpModule.Agent - self.agentOptions = self.agentOptions || {} - self.agentOptions.keepAlive = true - } - } else { - self.agentClass = self.httpModule.Agent - } - } - - if (self.pool === false) { - self.agent = false - } else { - self.agent = self.agent || self.getNewAgent() - } - - self.on('pipe', function (src) { - if (self.ntick && self._started) { - self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.')) - } - self.src = src - if (isReadStream(src)) { - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', mime.lookup(src.path)) - } - } else { - if (src.headers) { - for (var i in src.headers) { - if (!self.hasHeader(i)) { - self.setHeader(i, src.headers[i]) - } - } - } - if (self._json && !self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - if (src.method && !self.explicitMethod) { - self.method = src.method - } - } - - // self.on('pipe', function () { - // console.error('You have already piped to this stream. Pipeing twice is likely to break the request.') - // }) - }) - - defer(function () { - if (self._aborted) { - return - } - - var end = function () { - if (self._form) { - if (!self._auth.hasAuth) { - self._form.pipe(self) - } else if (self._auth.hasAuth && self._auth.sentAuth) { - self._form.pipe(self) - } - } - if (self._multipart && self._multipart.chunked) { - self._multipart.body.pipe(self) - } - if (self.body) { - if (isstream(self.body)) { - self.body.pipe(self) - } else { - setContentLength() - if (Array.isArray(self.body)) { - self.body.forEach(function (part) { - self.write(part) - }) - } else { - self.write(self.body) - } - self.end() - } - } else if (self.requestBodyStream) { - console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.') - self.requestBodyStream.pipe(self) - } else if (!self.src) { - if (self._auth.hasAuth && !self._auth.sentAuth) { - self.end() - return - } - if (self.method !== 'GET' && typeof self.method !== 'undefined') { - self.setHeader('content-length', 0) - } - self.end() - } - } - - if (self._form && !self.hasHeader('content-length')) { - // Before ending the request, we had to compute the length of the whole form, asyncly - self.setHeader(self._form.getHeaders(), true) - self._form.getLength(function (err, length) { - if (!err && !isNaN(length)) { - self.setHeader('content-length', length) - } - end() - }) - } else { - end() - } - - self.ntick = true - }) -} - -Request.prototype.getNewAgent = function () { - var self = this - var Agent = self.agentClass - var options = {} - if (self.agentOptions) { - for (var i in self.agentOptions) { - options[i] = self.agentOptions[i] - } - } - if (self.ca) { - options.ca = self.ca - } - if (self.ciphers) { - options.ciphers = self.ciphers - } - if (self.secureProtocol) { - options.secureProtocol = self.secureProtocol - } - if (self.secureOptions) { - options.secureOptions = self.secureOptions - } - if (typeof self.rejectUnauthorized !== 'undefined') { - options.rejectUnauthorized = self.rejectUnauthorized - } - - if (self.cert && self.key) { - options.key = self.key - options.cert = self.cert - } - - if (self.pfx) { - options.pfx = self.pfx - } - - if (self.passphrase) { - options.passphrase = self.passphrase - } - - var poolKey = '' - - // different types of agents are in different pools - if (Agent !== self.httpModule.Agent) { - poolKey += Agent.name - } - - // ca option is only relevant if proxy or destination are https - var proxy = self.proxy - if (typeof proxy === 'string') { - proxy = url.parse(proxy) - } - var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:' - - if (isHttps) { - if (options.ca) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.ca - } - - if (typeof options.rejectUnauthorized !== 'undefined') { - if (poolKey) { - poolKey += ':' - } - poolKey += options.rejectUnauthorized - } - - if (options.cert) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.cert.toString('ascii') + options.key.toString('ascii') - } - - if (options.pfx) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.pfx.toString('ascii') - } - - if (options.ciphers) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.ciphers - } - - if (options.secureProtocol) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.secureProtocol - } - - if (options.secureOptions) { - if (poolKey) { - poolKey += ':' - } - poolKey += options.secureOptions - } - } - - if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) { - // not doing anything special. Use the globalAgent - return self.httpModule.globalAgent - } - - // we're using a stored agent. Make sure it's protocol-specific - poolKey = self.uri.protocol + poolKey - - // generate a new agent for this setting if none yet exists - if (!self.pool[poolKey]) { - self.pool[poolKey] = new Agent(options) - // properly set maxSockets on new agents - if (self.pool.maxSockets) { - self.pool[poolKey].maxSockets = self.pool.maxSockets - } - } - - return self.pool[poolKey] -} - -Request.prototype.start = function () { - // start() is called once we are ready to send the outgoing HTTP request. - // this is usually called on the first write(), end() or on nextTick() - var self = this - - if (self.timing) { - // All timings will be relative to this request's startTime. In order to do this, - // we need to capture the wall-clock start time (via Date), immediately followed - // by the high-resolution timer (via now()). While these two won't be set - // at the _exact_ same time, they should be close enough to be able to calculate - // high-resolution, monotonically non-decreasing timestamps relative to startTime. - var startTime = new Date().getTime() - var startTimeNow = now() - } - - if (self._aborted) { - return - } - - self._started = true - self.method = self.method || 'GET' - self.href = self.uri.href - - if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) { - self.setHeader('content-length', self.src.stat.size) - } - if (self._aws) { - self.aws(self._aws, true) - } - - // We have a method named auth, which is completely different from the http.request - // auth option. If we don't remove it, we're gonna have a bad time. - var reqOptions = copy(self) - delete reqOptions.auth - - debug('make request', self.uri.href) - - // node v6.8.0 now supports a `timeout` value in `http.request()`, but we - // should delete it for now since we handle timeouts manually for better - // consistency with node versions before v6.8.0 - delete reqOptions.timeout - - try { - self.req = self.httpModule.request(reqOptions) - } catch (err) { - self.emit('error', err) - return - } - - if (self.timing) { - self.startTime = startTime - self.startTimeNow = startTimeNow - - // Timing values will all be relative to startTime (by comparing to startTimeNow - // so we have an accurate clock) - self.timings = {} - } - - var timeout - if (self.timeout && !self.timeoutTimer) { - if (self.timeout < 0) { - timeout = 0 - } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) { - timeout = self.timeout - } - } - - self.req.on('response', self.onRequestResponse.bind(self)) - self.req.on('error', self.onRequestError.bind(self)) - self.req.on('drain', function () { - self.emit('drain') - }) - - self.req.on('socket', function (socket) { - // `._connecting` was the old property which was made public in node v6.1.0 - var isConnecting = socket._connecting || socket.connecting - if (self.timing) { - self.timings.socket = now() - self.startTimeNow - - if (isConnecting) { - var onLookupTiming = function () { - self.timings.lookup = now() - self.startTimeNow - } - - var onConnectTiming = function () { - self.timings.connect = now() - self.startTimeNow - } - - socket.once('lookup', onLookupTiming) - socket.once('connect', onConnectTiming) - - // clean up timing event listeners if needed on error - self.req.once('error', function () { - socket.removeListener('lookup', onLookupTiming) - socket.removeListener('connect', onConnectTiming) - }) - } - } - - var setReqTimeout = function () { - // This timeout sets the amount of time to wait *between* bytes sent - // from the server once connected. - // - // In particular, it's useful for erroring if the server fails to send - // data halfway through streaming a response. - self.req.setTimeout(timeout, function () { - if (self.req) { - self.abort() - var e = new Error('ESOCKETTIMEDOUT') - e.code = 'ESOCKETTIMEDOUT' - e.connect = false - self.emit('error', e) - } - }) - } - if (timeout !== undefined) { - // Only start the connection timer if we're actually connecting a new - // socket, otherwise if we're already connected (because this is a - // keep-alive connection) do not bother. This is important since we won't - // get a 'connect' event for an already connected socket. - if (isConnecting) { - var onReqSockConnect = function () { - socket.removeListener('connect', onReqSockConnect) - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - setReqTimeout() - } - - socket.on('connect', onReqSockConnect) - - self.req.on('error', function (err) { // eslint-disable-line handle-callback-err - socket.removeListener('connect', onReqSockConnect) - }) - - // Set a timeout in memory - this block will throw if the server takes more - // than `timeout` to write the HTTP status and headers (corresponding to - // the on('response') event on the client). NB: this measures wall-clock - // time, not the time between bytes sent by the server. - self.timeoutTimer = setTimeout(function () { - socket.removeListener('connect', onReqSockConnect) - self.abort() - var e = new Error('ETIMEDOUT') - e.code = 'ETIMEDOUT' - e.connect = true - self.emit('error', e) - }, timeout) - } else { - // We're already connected - setReqTimeout() - } - } - self.emit('socket', socket) - }) - - self.emit('request', self.req) -} - -Request.prototype.onRequestError = function (error) { - var self = this - if (self._aborted) { - return - } - if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' && - self.agent.addRequestNoreuse) { - self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) } - self.start() - self.req.end() - return - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - self.emit('error', error) -} - -Request.prototype.onRequestResponse = function (response) { - var self = this - - if (self.timing) { - self.timings.response = now() - self.startTimeNow - } - - debug('onRequestResponse', self.uri.href, response.statusCode, response.headers) - response.on('end', function () { - if (self.timing) { - self.timings.end = now() - self.startTimeNow - response.timingStart = self.startTime - - // fill in the blanks for any periods that didn't trigger, such as - // no lookup or connect due to keep alive - if (!self.timings.socket) { - self.timings.socket = 0 - } - if (!self.timings.lookup) { - self.timings.lookup = self.timings.socket - } - if (!self.timings.connect) { - self.timings.connect = self.timings.lookup - } - if (!self.timings.response) { - self.timings.response = self.timings.connect - } - - debug('elapsed time', self.timings.end) - - // elapsedTime includes all redirects - self.elapsedTime += Math.round(self.timings.end) - - // NOTE: elapsedTime is deprecated in favor of .timings - response.elapsedTime = self.elapsedTime - - // timings is just for the final fetch - response.timings = self.timings - - // pre-calculate phase timings as well - response.timingPhases = { - wait: self.timings.socket, - dns: self.timings.lookup - self.timings.socket, - tcp: self.timings.connect - self.timings.lookup, - firstByte: self.timings.response - self.timings.connect, - download: self.timings.end - self.timings.response, - total: self.timings.end - } - } - debug('response end', self.uri.href, response.statusCode, response.headers) - }) - - if (self._aborted) { - debug('aborted', self.uri.href) - response.resume() - return - } - - self.response = response - response.request = self - response.toJSON = responseToJSON - - // XXX This is different on 0.10, because SSL is strict by default - if (self.httpModule === https && - self.strictSSL && (!response.hasOwnProperty('socket') || - !response.socket.authorized)) { - debug('strict ssl error', self.uri.href) - var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL' - self.emit('error', new Error('SSL Error: ' + sslErr)) - return - } - - // Save the original host before any redirect (if it changes, we need to - // remove any authorization headers). Also remember the case of the header - // name because lots of broken servers expect Host instead of host and we - // want the caller to be able to specify this. - self.originalHost = self.getHeader('host') - if (!self.originalHostHeaderName) { - self.originalHostHeaderName = self.hasHeader('host') - } - if (self.setHost) { - self.removeHeader('host') - } - if (self.timeout && self.timeoutTimer) { - clearTimeout(self.timeoutTimer) - self.timeoutTimer = null - } - - var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar - var addCookie = function (cookie) { - // set the cookie if it's domain in the href's domain. - try { - targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true}) - } catch (e) { - self.emit('error', e) - } - } - - response.caseless = caseless(response.headers) - - if (response.caseless.has('set-cookie') && (!self._disableCookies)) { - var headerName = response.caseless.has('set-cookie') - if (Array.isArray(response.headers[headerName])) { - response.headers[headerName].forEach(addCookie) - } else { - addCookie(response.headers[headerName]) - } - } - - if (self._redirect.onResponse(response)) { - return // Ignore the rest of the response - } else { - // Be a good stream and emit end when the response is finished. - // Hack to emit end on close because of a core bug that never fires end - response.on('close', function () { - if (!self._ended) { - self.response.emit('end') - } - }) - - response.once('end', function () { - self._ended = true - }) - - var noBody = function (code) { - return ( - self.method === 'HEAD' || - // Informational - (code >= 100 && code < 200) || - // No Content - code === 204 || - // Not Modified - code === 304 - ) - } - - var responseContent - if (self.gzip && !noBody(response.statusCode)) { - var contentEncoding = response.headers['content-encoding'] || 'identity' - contentEncoding = contentEncoding.trim().toLowerCase() - - // Be more lenient with decoding compressed responses, since (very rarely) - // servers send slightly invalid gzip responses that are still accepted - // by common browsers. - // Always using Z_SYNC_FLUSH is what cURL does. - var zlibOptions = { - flush: zlib.Z_SYNC_FLUSH, - finishFlush: zlib.Z_SYNC_FLUSH - } - - if (contentEncoding === 'gzip') { - responseContent = zlib.createGunzip(zlibOptions) - response.pipe(responseContent) - } else if (contentEncoding === 'deflate') { - responseContent = zlib.createInflate(zlibOptions) - response.pipe(responseContent) - } else { - // Since previous versions didn't check for Content-Encoding header, - // ignore any invalid values to preserve backwards-compatibility - if (contentEncoding !== 'identity') { - debug('ignoring unrecognized Content-Encoding ' + contentEncoding) - } - responseContent = response - } - } else { - responseContent = response - } - - if (self.encoding) { - if (self.dests.length !== 0) { - console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.') - } else { - responseContent.setEncoding(self.encoding) - } - } - - if (self._paused) { - responseContent.pause() - } - - self.responseContent = responseContent - - self.emit('response', response) - - self.dests.forEach(function (dest) { - self.pipeDest(dest) - }) - - responseContent.on('data', function (chunk) { - if (self.timing && !self.responseStarted) { - self.responseStartTime = (new Date()).getTime() - - // NOTE: responseStartTime is deprecated in favor of .timings - response.responseStartTime = self.responseStartTime - } - self._destdata = true - self.emit('data', chunk) - }) - responseContent.once('end', function (chunk) { - self.emit('end', chunk) - }) - responseContent.on('error', function (error) { - self.emit('error', error) - }) - responseContent.on('close', function () { self.emit('close') }) - - if (self.callback) { - self.readResponseBody(response) - } else { // if no callback - self.on('end', function () { - if (self._aborted) { - debug('aborted', self.uri.href) - return - } - self.emit('complete', response) - }) - } - } - debug('finish init function', self.uri.href) -} - -Request.prototype.readResponseBody = function (response) { - var self = this - debug("reading response's body") - var buffers = [] - var bufferLength = 0 - var strings = [] - - self.on('data', function (chunk) { - if (!Buffer.isBuffer(chunk)) { - strings.push(chunk) - } else if (chunk.length) { - bufferLength += chunk.length - buffers.push(chunk) - } - }) - self.on('end', function () { - debug('end event', self.uri.href) - if (self._aborted) { - debug('aborted', self.uri.href) - // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request. - // This can lead to leaky behavior if the user retains a reference to the request object. - buffers = [] - bufferLength = 0 - return - } - - if (bufferLength) { - debug('has body', self.uri.href, bufferLength) - response.body = Buffer.concat(buffers, bufferLength) - if (self.encoding !== null) { - response.body = response.body.toString(self.encoding) - } - // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request. - // This can lead to leaky behavior if the user retains a reference to the request object. - buffers = [] - bufferLength = 0 - } else if (strings.length) { - // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation. - // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse(). - if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') { - strings[0] = strings[0].substring(1) - } - response.body = strings.join('') - } - - if (self._json) { - try { - response.body = JSON.parse(response.body, self._jsonReviver) - } catch (e) { - debug('invalid JSON received', self.uri.href) - } - } - debug('emitting complete', self.uri.href) - if (typeof response.body === 'undefined' && !self._json) { - response.body = self.encoding === null ? Buffer.alloc(0) : '' - } - self.emit('complete', response, response.body) - }) -} - -Request.prototype.abort = function () { - var self = this - self._aborted = true - - if (self.req) { - self.req.abort() - } else if (self.response) { - self.response.destroy() - } - - self.emit('abort') -} - -Request.prototype.pipeDest = function (dest) { - var self = this - var response = self.response - // Called after the response is received - if (dest.headers && !dest.headersSent) { - if (response.caseless.has('content-type')) { - var ctname = response.caseless.has('content-type') - if (dest.setHeader) { - dest.setHeader(ctname, response.headers[ctname]) - } else { - dest.headers[ctname] = response.headers[ctname] - } - } - - if (response.caseless.has('content-length')) { - var clname = response.caseless.has('content-length') - if (dest.setHeader) { - dest.setHeader(clname, response.headers[clname]) - } else { - dest.headers[clname] = response.headers[clname] - } - } - } - if (dest.setHeader && !dest.headersSent) { - for (var i in response.headers) { - // If the response content is being decoded, the Content-Encoding header - // of the response doesn't represent the piped content, so don't pass it. - if (!self.gzip || i !== 'content-encoding') { - dest.setHeader(i, response.headers[i]) - } - } - dest.statusCode = response.statusCode - } - if (self.pipefilter) { - self.pipefilter(response, dest) - } -} - -Request.prototype.qs = function (q, clobber) { - var self = this - var base - if (!clobber && self.uri.query) { - base = self._qs.parse(self.uri.query) - } else { - base = {} - } - - for (var i in q) { - base[i] = q[i] - } - - var qs = self._qs.stringify(base) - - if (qs === '') { - return self - } - - self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs) - self.url = self.uri - self.path = self.uri.path - - if (self.uri.host === 'unix') { - self.enableUnixSocket() - } - - return self -} -Request.prototype.form = function (form) { - var self = this - if (form) { - if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { - self.setHeader('content-type', 'application/x-www-form-urlencoded') - } - self.body = (typeof form === 'string') - ? self._qs.rfc3986(form.toString('utf8')) - : self._qs.stringify(form).toString('utf8') - return self - } - // create form-data object - self._form = new FormData() - self._form.on('error', function (err) { - err.message = 'form-data: ' + err.message - self.emit('error', err) - self.abort() - }) - return self._form -} -Request.prototype.multipart = function (multipart) { - var self = this - - self._multipart.onRequest(multipart) - - if (!self._multipart.chunked) { - self.body = self._multipart.body - } - - return self -} -Request.prototype.json = function (val) { - var self = this - - if (!self.hasHeader('accept')) { - self.setHeader('accept', 'application/json') - } - - if (typeof self.jsonReplacer === 'function') { - self._jsonReplacer = self.jsonReplacer - } - - self._json = true - if (typeof val === 'boolean') { - if (self.body !== undefined) { - if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { - self.body = safeStringify(self.body, self._jsonReplacer) - } else { - self.body = self._qs.rfc3986(self.body) - } - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - } - } else { - self.body = safeStringify(val, self._jsonReplacer) - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } - } - - if (typeof self.jsonReviver === 'function') { - self._jsonReviver = self.jsonReviver - } - - return self -} -Request.prototype.getHeader = function (name, headers) { - var self = this - var result, re, match - if (!headers) { - headers = self.headers - } - Object.keys(headers).forEach(function (key) { - if (key.length !== name.length) { - return - } - re = new RegExp(name, 'i') - match = key.match(re) - if (match) { - result = headers[key] - } - }) - return result -} -Request.prototype.enableUnixSocket = function () { - // Get the socket & request paths from the URL - var unixParts = this.uri.path.split(':') - var host = unixParts[0] - var path = unixParts[1] - // Apply unix properties to request - this.socketPath = host - this.uri.pathname = path - this.uri.path = path - this.uri.host = host - this.uri.hostname = host - this.uri.isUnix = true -} - -Request.prototype.auth = function (user, pass, sendImmediately, bearer) { - var self = this - - self._auth.onRequest(user, pass, sendImmediately, bearer) - - return self -} -Request.prototype.aws = function (opts, now) { - var self = this - - if (!now) { - self._aws = opts - return self - } - - if (opts.sign_version === 4 || opts.sign_version === '4') { - // use aws4 - var options = { - host: self.uri.host, - path: self.uri.path, - method: self.method, - headers: self.headers, - body: self.body - } - if (opts.service) { - options.service = opts.service - } - var signRes = aws4.sign(options, { - accessKeyId: opts.key, - secretAccessKey: opts.secret, - sessionToken: opts.session - }) - self.setHeader('authorization', signRes.headers.Authorization) - self.setHeader('x-amz-date', signRes.headers['X-Amz-Date']) - if (signRes.headers['X-Amz-Security-Token']) { - self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token']) - } - } else { - // default: use aws-sign2 - var date = new Date() - self.setHeader('date', date.toUTCString()) - var auth = { - key: opts.key, - secret: opts.secret, - verb: self.method.toUpperCase(), - date: date, - contentType: self.getHeader('content-type') || '', - md5: self.getHeader('content-md5') || '', - amazonHeaders: aws2.canonicalizeHeaders(self.headers) - } - var path = self.uri.path - if (opts.bucket && path) { - auth.resource = '/' + opts.bucket + path - } else if (opts.bucket && !path) { - auth.resource = '/' + opts.bucket - } else if (!opts.bucket && path) { - auth.resource = path - } else if (!opts.bucket && !path) { - auth.resource = '/' - } - auth.resource = aws2.canonicalizeResource(auth.resource) - self.setHeader('authorization', aws2.authorization(auth)) - } - - return self -} -Request.prototype.httpSignature = function (opts) { - var self = this - httpSignature.signRequest({ - getHeader: function (header) { - return self.getHeader(header, self.headers) - }, - setHeader: function (header, value) { - self.setHeader(header, value) - }, - method: self.method, - path: self.path - }, opts) - debug('httpSignature authorization', self.getHeader('authorization')) - - return self -} -Request.prototype.hawk = function (opts) { - var self = this - self.setHeader('Authorization', hawk.header(self.uri, self.method, opts)) -} -Request.prototype.oauth = function (_oauth) { - var self = this - - self._oauth.onRequest(_oauth) - - return self -} - -Request.prototype.jar = function (jar) { - var self = this - var cookies - - if (self._redirect.redirectsFollowed === 0) { - self.originalCookieHeader = self.getHeader('cookie') - } - - if (!jar) { - // disable cookies - cookies = false - self._disableCookies = true - } else { - var targetCookieJar = (jar && jar.getCookieString) ? jar : globalCookieJar - var urihref = self.uri.href - // fetch cookie in the Specified host - if (targetCookieJar) { - cookies = targetCookieJar.getCookieString(urihref) - } - } - - // if need cookie and cookie is not empty - if (cookies && cookies.length) { - if (self.originalCookieHeader) { - // Don't overwrite existing Cookie header - self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies) - } else { - self.setHeader('cookie', cookies) - } - } - self._jar = jar - return self -} - -// Stream API -Request.prototype.pipe = function (dest, opts) { - var self = this - - if (self.response) { - if (self._destdata) { - self.emit('error', new Error('You cannot pipe after data has been emitted from the response.')) - } else if (self._ended) { - self.emit('error', new Error('You cannot pipe after the response has been ended.')) - } else { - stream.Stream.prototype.pipe.call(self, dest, opts) - self.pipeDest(dest) - return dest - } - } else { - self.dests.push(dest) - stream.Stream.prototype.pipe.call(self, dest, opts) - return dest - } -} -Request.prototype.write = function () { - var self = this - if (self._aborted) { return } - - if (!self._started) { - self.start() - } - if (self.req) { - return self.req.write.apply(self.req, arguments) - } -} -Request.prototype.end = function (chunk) { - var self = this - if (self._aborted) { return } - - if (chunk) { - self.write(chunk) - } - if (!self._started) { - self.start() - } - if (self.req) { - self.req.end() - } -} -Request.prototype.pause = function () { - var self = this - if (!self.responseContent) { - self._paused = true - } else { - self.responseContent.pause.apply(self.responseContent, arguments) - } -} -Request.prototype.resume = function () { - var self = this - if (!self.responseContent) { - self._paused = false - } else { - self.responseContent.resume.apply(self.responseContent, arguments) - } -} -Request.prototype.destroy = function () { - var self = this - if (!self._ended) { - self.end() - } else if (self.response) { - self.response.destroy() - } -} - -Request.defaultProxyHeaderWhiteList = - Tunnel.defaultProxyHeaderWhiteList.slice() - -Request.defaultProxyHeaderExclusiveList = - Tunnel.defaultProxyHeaderExclusiveList.slice() - -// Exports - -Request.prototype.toJSON = requestToJSON -module.exports = Request diff --git a/truebit-implementation/node_modules/rimraf/LICENSE b/truebit-implementation/node_modules/rimraf/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/truebit-implementation/node_modules/rimraf/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/rimraf/README.md b/truebit-implementation/node_modules/rimraf/README.md deleted file mode 100644 index 423b8cf8..00000000 --- a/truebit-implementation/node_modules/rimraf/README.md +++ /dev/null @@ -1,101 +0,0 @@ -[![Build Status](https://travis-ci.org/isaacs/rimraf.svg?branch=master)](https://travis-ci.org/isaacs/rimraf) [![Dependency Status](https://david-dm.org/isaacs/rimraf.svg)](https://david-dm.org/isaacs/rimraf) [![devDependency Status](https://david-dm.org/isaacs/rimraf/dev-status.svg)](https://david-dm.org/isaacs/rimraf#info=devDependencies) - -The [UNIX command](http://en.wikipedia.org/wiki/Rm_(Unix)) `rm -rf` for node. - -Install with `npm install rimraf`, or just drop rimraf.js somewhere. - -## API - -`rimraf(f, [opts], callback)` - -The first parameter will be interpreted as a globbing pattern for files. If you -want to disable globbing you can do so with `opts.disableGlob` (defaults to -`false`). This might be handy, for instance, if you have filenames that contain -globbing wildcard characters. - -The callback will be called with an error if there is one. Certain -errors are handled for you: - -* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of - `opts.maxBusyTries` times before giving up, adding 100ms of wait - between each attempt. The default `maxBusyTries` is 3. -* `ENOENT` - If the file doesn't exist, rimraf will return - successfully, since your desired outcome is already the case. -* `EMFILE` - Since `readdir` requires opening a file descriptor, it's - possible to hit `EMFILE` if too many file descriptors are in use. - In the sync case, there's nothing to be done for this. But in the - async case, rimraf will gradually back off with timeouts up to - `opts.emfileWait` ms, which defaults to 1000. - -## options - -* unlink, chmod, stat, lstat, rmdir, readdir, - unlinkSync, chmodSync, statSync, lstatSync, rmdirSync, readdirSync - - In order to use a custom file system library, you can override - specific fs functions on the options object. - - If any of these functions are present on the options object, then - the supplied function will be used instead of the default fs - method. - - Sync methods are only relevant for `rimraf.sync()`, of course. - - For example: - - ```javascript - var myCustomFS = require('some-custom-fs') - - rimraf('some-thing', myCustomFS, callback) - ``` - -* maxBusyTries - - If an `EBUSY`, `ENOTEMPTY`, or `EPERM` error code is encountered - on Windows systems, then rimraf will retry with a linear backoff - wait of 100ms longer on each try. The default maxBusyTries is 3. - - Only relevant for async usage. - -* emfileWait - - If an `EMFILE` error is encountered, then rimraf will retry - repeatedly with a linear backoff of 1ms longer on each try, until - the timeout counter hits this max. The default limit is 1000. - - If you repeatedly encounter `EMFILE` errors, then consider using - [graceful-fs](http://npm.im/graceful-fs) in your program. - - Only relevant for async usage. - -* glob - - Set to `false` to disable [glob](http://npm.im/glob) pattern - matching. - - Set to an object to pass options to the glob module. The default - glob options are `{ nosort: true, silent: true }`. - - Glob version 6 is used in this module. - - Relevant for both sync and async usage. - -* disableGlob - - Set to any non-falsey value to disable globbing entirely. - (Equivalent to setting `glob: false`.) - -## rimraf.sync - -It can remove stuff synchronously, too. But that's not so good. Use -the async API. It's better. - -## CLI - -If installed with `npm install rimraf -g` it can be used as a global -command `rimraf [ ...]` which is useful for cross platform support. - -## mkdirp - -If you need to create a directory recursively, check out -[mkdirp](https://github.com/substack/node-mkdirp). diff --git a/truebit-implementation/node_modules/rimraf/bin.js b/truebit-implementation/node_modules/rimraf/bin.js deleted file mode 100755 index 0d1e17be..00000000 --- a/truebit-implementation/node_modules/rimraf/bin.js +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env node - -var rimraf = require('./') - -var help = false -var dashdash = false -var noglob = false -var args = process.argv.slice(2).filter(function(arg) { - if (dashdash) - return !!arg - else if (arg === '--') - dashdash = true - else if (arg === '--no-glob' || arg === '-G') - noglob = true - else if (arg === '--glob' || arg === '-g') - noglob = false - else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/)) - help = true - else - return !!arg -}) - -if (help || args.length === 0) { - // If they didn't ask for help, then this is not a "success" - var log = help ? console.log : console.error - log('Usage: rimraf [ ...]') - log('') - log(' Deletes all files and folders at "path" recursively.') - log('') - log('Options:') - log('') - log(' -h, --help Display this usage info') - log(' -G, --no-glob Do not expand glob patterns in arguments') - log(' -g, --glob Expand glob patterns in arguments (default)') - process.exit(help ? 0 : 1) -} else - go(0) - -function go (n) { - if (n >= args.length) - return - var options = {} - if (noglob) - options = { glob: false } - rimraf(args[n], options, function (er) { - if (er) - throw er - go(n+1) - }) -} diff --git a/truebit-implementation/node_modules/rimraf/package.json b/truebit-implementation/node_modules/rimraf/package.json deleted file mode 100644 index 477cd007..00000000 --- a/truebit-implementation/node_modules/rimraf/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "rimraf@2", - "_id": "rimraf@2.6.2", - "_inBundle": false, - "_integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "_location": "/rimraf", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "rimraf@2", - "name": "rimraf", - "escapedName": "rimraf", - "rawSpec": "2", - "saveSpec": null, - "fetchSpec": "2" - }, - "_requiredBy": [ - "/fstream" - ], - "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "_shasum": "2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36", - "_spec": "rimraf@2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/fstream", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bin": { - "rimraf": "./bin.js" - }, - "bugs": { - "url": "https://github.com/isaacs/rimraf/issues" - }, - "bundleDependencies": false, - "dependencies": { - "glob": "^7.0.5" - }, - "deprecated": false, - "description": "A deep deletion module for node (like `rm -rf`)", - "devDependencies": { - "mkdirp": "^0.5.1", - "tap": "^10.1.2" - }, - "files": [ - "LICENSE", - "README.md", - "bin.js", - "rimraf.js" - ], - "homepage": "https://github.com/isaacs/rimraf#readme", - "license": "ISC", - "main": "rimraf.js", - "name": "rimraf", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/rimraf.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "2.6.2" -} diff --git a/truebit-implementation/node_modules/rimraf/rimraf.js b/truebit-implementation/node_modules/rimraf/rimraf.js deleted file mode 100644 index e80dd106..00000000 --- a/truebit-implementation/node_modules/rimraf/rimraf.js +++ /dev/null @@ -1,364 +0,0 @@ -module.exports = rimraf -rimraf.sync = rimrafSync - -var assert = require("assert") -var path = require("path") -var fs = require("fs") -var glob = require("glob") -var _0666 = parseInt('666', 8) - -var defaultGlobOpts = { - nosort: true, - silent: true -} - -// for EMFILE handling -var timeout = 0 - -var isWindows = (process.platform === "win32") - -function defaults (options) { - var methods = [ - 'unlink', - 'chmod', - 'stat', - 'lstat', - 'rmdir', - 'readdir' - ] - methods.forEach(function(m) { - options[m] = options[m] || fs[m] - m = m + 'Sync' - options[m] = options[m] || fs[m] - }) - - options.maxBusyTries = options.maxBusyTries || 3 - options.emfileWait = options.emfileWait || 1000 - if (options.glob === false) { - options.disableGlob = true - } - options.disableGlob = options.disableGlob || false - options.glob = options.glob || defaultGlobOpts -} - -function rimraf (p, options, cb) { - if (typeof options === 'function') { - cb = options - options = {} - } - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert.equal(typeof cb, 'function', 'rimraf: callback function required') - assert(options, 'rimraf: invalid options argument provided') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - defaults(options) - - var busyTries = 0 - var errState = null - var n = 0 - - if (options.disableGlob || !glob.hasMagic(p)) - return afterGlob(null, [p]) - - options.lstat(p, function (er, stat) { - if (!er) - return afterGlob(null, [p]) - - glob(p, options.glob, afterGlob) - }) - - function next (er) { - errState = errState || er - if (--n === 0) - cb(errState) - } - - function afterGlob (er, results) { - if (er) - return cb(er) - - n = results.length - if (n === 0) - return cb() - - results.forEach(function (p) { - rimraf_(p, options, function CB (er) { - if (er) { - if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && - busyTries < options.maxBusyTries) { - busyTries ++ - var time = busyTries * 100 - // try again, with the same exact callback as this one. - return setTimeout(function () { - rimraf_(p, options, CB) - }, time) - } - - // this one won't happen if graceful-fs is used. - if (er.code === "EMFILE" && timeout < options.emfileWait) { - return setTimeout(function () { - rimraf_(p, options, CB) - }, timeout ++) - } - - // already gone - if (er.code === "ENOENT") er = null - } - - timeout = 0 - next(er) - }) - }) - } -} - -// Two possible strategies. -// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR -// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR -// -// Both result in an extra syscall when you guess wrong. However, there -// are likely far more normal files in the world than directories. This -// is based on the assumption that a the average number of files per -// directory is >= 1. -// -// If anyone ever complains about this, then I guess the strategy could -// be made configurable somehow. But until then, YAGNI. -function rimraf_ (p, options, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - - // sunos lets the root user unlink directories, which is... weird. - // so we have to lstat here and make sure it's not a dir. - options.lstat(p, function (er, st) { - if (er && er.code === "ENOENT") - return cb(null) - - // Windows can EPERM on stat. Life is suffering. - if (er && er.code === "EPERM" && isWindows) - fixWinEPERM(p, options, er, cb) - - if (st && st.isDirectory()) - return rmdir(p, options, er, cb) - - options.unlink(p, function (er) { - if (er) { - if (er.code === "ENOENT") - return cb(null) - if (er.code === "EPERM") - return (isWindows) - ? fixWinEPERM(p, options, er, cb) - : rmdir(p, options, er, cb) - if (er.code === "EISDIR") - return rmdir(p, options, er, cb) - } - return cb(er) - }) - }) -} - -function fixWinEPERM (p, options, er, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - if (er) - assert(er instanceof Error) - - options.chmod(p, _0666, function (er2) { - if (er2) - cb(er2.code === "ENOENT" ? null : er) - else - options.stat(p, function(er3, stats) { - if (er3) - cb(er3.code === "ENOENT" ? null : er) - else if (stats.isDirectory()) - rmdir(p, options, er, cb) - else - options.unlink(p, cb) - }) - }) -} - -function fixWinEPERMSync (p, options, er) { - assert(p) - assert(options) - if (er) - assert(er instanceof Error) - - try { - options.chmodSync(p, _0666) - } catch (er2) { - if (er2.code === "ENOENT") - return - else - throw er - } - - try { - var stats = options.statSync(p) - } catch (er3) { - if (er3.code === "ENOENT") - return - else - throw er - } - - if (stats.isDirectory()) - rmdirSync(p, options, er) - else - options.unlinkSync(p) -} - -function rmdir (p, options, originalEr, cb) { - assert(p) - assert(options) - if (originalEr) - assert(originalEr instanceof Error) - assert(typeof cb === 'function') - - // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) - // if we guessed wrong, and it's not a directory, then - // raise the original error. - options.rmdir(p, function (er) { - if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) - rmkids(p, options, cb) - else if (er && er.code === "ENOTDIR") - cb(originalEr) - else - cb(er) - }) -} - -function rmkids(p, options, cb) { - assert(p) - assert(options) - assert(typeof cb === 'function') - - options.readdir(p, function (er, files) { - if (er) - return cb(er) - var n = files.length - if (n === 0) - return options.rmdir(p, cb) - var errState - files.forEach(function (f) { - rimraf(path.join(p, f), options, function (er) { - if (errState) - return - if (er) - return cb(errState = er) - if (--n === 0) - options.rmdir(p, cb) - }) - }) - }) -} - -// this looks simpler, and is strictly *faster*, but will -// tie up the JavaScript thread and fail on excessively -// deep directory trees. -function rimrafSync (p, options) { - options = options || {} - defaults(options) - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert(options, 'rimraf: missing options') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - var results - - if (options.disableGlob || !glob.hasMagic(p)) { - results = [p] - } else { - try { - options.lstatSync(p) - results = [p] - } catch (er) { - results = glob.sync(p, options.glob) - } - } - - if (!results.length) - return - - for (var i = 0; i < results.length; i++) { - var p = results[i] - - try { - var st = options.lstatSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - - // Windows can EPERM on stat. Life is suffering. - if (er.code === "EPERM" && isWindows) - fixWinEPERMSync(p, options, er) - } - - try { - // sunos lets the root user unlink directories, which is... weird. - if (st && st.isDirectory()) - rmdirSync(p, options, null) - else - options.unlinkSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - if (er.code === "EPERM") - return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) - if (er.code !== "EISDIR") - throw er - - rmdirSync(p, options, er) - } - } -} - -function rmdirSync (p, options, originalEr) { - assert(p) - assert(options) - if (originalEr) - assert(originalEr instanceof Error) - - try { - options.rmdirSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - if (er.code === "ENOTDIR") - throw originalEr - if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") - rmkidsSync(p, options) - } -} - -function rmkidsSync (p, options) { - assert(p) - assert(options) - options.readdirSync(p).forEach(function (f) { - rimrafSync(path.join(p, f), options) - }) - - // We only end up here once we got ENOTEMPTY at least once, and - // at this point, we are guaranteed to have removed all the kids. - // So, we know that it won't be ENOENT or ENOTDIR or anything else. - // try really hard to delete stuff on windows, because it has a - // PROFOUNDLY annoying habit of not closing handles promptly when - // files are deleted, resulting in spurious ENOTEMPTY errors. - var retries = isWindows ? 100 : 1 - var i = 0 - do { - var threw = true - try { - var ret = options.rmdirSync(p, options) - threw = false - return ret - } finally { - if (++i < retries && threw) - continue - } - } while (true) -} diff --git a/truebit-implementation/node_modules/ripemd160/CHANGELOG.md b/truebit-implementation/node_modules/ripemd160/CHANGELOG.md deleted file mode 100644 index 91ba9128..00000000 --- a/truebit-implementation/node_modules/ripemd160/CHANGELOG.md +++ /dev/null @@ -1,72 +0,0 @@ -2.0.1 / 2016-06-22 ------------------- -- added LICENSE file. - -2.0.0 / 2016-04-11 ------------------- -- rewritten, license change BSD-3 to MIT. [#13][#13] -- stream support [#13][#13] - -1.0.1 / 2015-05-05 ------------------- -- standard formatting - -1.0.0 / 2015-01-14 ------------------- -- updated dev deps -- added more test fixtures -- updated readme with usage, testing, etc -- moved from https://github.com/cryptocoinjs/ripemd160 to https://github.com/crypto-browserify/ripemd160 - -0.2.1 / 2014-12-31 ------------------- -- made license clear in `package.json` -- deleted `Makefile`, moved targets to `package.json` -- removed `terst` for `assert` - -0.2.0 / 2014-03-09 ------------------- -* removed bower.json and component.json -* changed 4 spacing to 2 -* returns `Buffer` type now, input must be Array, Uint8Array, Buffer, or string -* remove deps: `convert-hex` and `convert-string` - -0.1.0 / 2013-11-20 ------------------- -* changed package name -* removed AMD support - -0.0.2 / 2013-11-06 ------------------- -* fixed component.json file - -0.0.1 / 2013-11-03 ------------------- -* initial release - - -[#13]: https://github.com/crypto-browserify/ripemd160/pull/13 - -[#12]: https://github.com/crypto-browserify/ripemd160/pull/12 - -[#11]: https://github.com/crypto-browserify/ripemd160/pull/11 - -[#10]: https://github.com/crypto-browserify/ripemd160/pull/10 - -[#9]: https://github.com/crypto-browserify/ripemd160/pull/9 - -[#8]: https://github.com/crypto-browserify/ripemd160/issues/8 - -[#7]: https://github.com/crypto-browserify/ripemd160/pull/7 - -[#6]: https://github.com/crypto-browserify/ripemd160/pull/6 - -[#5]: https://github.com/crypto-browserify/ripemd160/issues/5 - -[#4]: https://github.com/crypto-browserify/ripemd160/pull/4 - -[#3]: https://github.com/crypto-browserify/ripemd160/pull/3 - -[#2]: https://github.com/crypto-browserify/ripemd160/pull/2 - -[#1]: https://github.com/crypto-browserify/ripemd160/pull/1 diff --git a/truebit-implementation/node_modules/ripemd160/LICENSE b/truebit-implementation/node_modules/ripemd160/LICENSE deleted file mode 100644 index cbe3544b..00000000 --- a/truebit-implementation/node_modules/ripemd160/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 crypto-browserify - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/ripemd160/README.md b/truebit-implementation/node_modules/ripemd160/README.md deleted file mode 100644 index 056c6a21..00000000 --- a/truebit-implementation/node_modules/ripemd160/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# ripemd160 - -[![NPM Package](https://img.shields.io/npm/v/ripemd160.svg?style=flat-square)](https://www.npmjs.org/package/ripemd160) -[![Build Status](https://img.shields.io/travis/crypto-browserify/ripemd160.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/ripemd160) -[![Dependency status](https://img.shields.io/david/crypto-browserify/ripemd160.svg?style=flat-square)](https://david-dm.org/crypto-browserify/ripemd160#info=dependencies) - -[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) - -Node style `ripemd160` on pure JavaScript. - -## Example - -```js -var RIPEMD160 = require('ripemd160') - -console.log(new RIPEMD160().update('42').digest('hex')) -// => 0df020ba32aa9b8b904471ff582ce6b579bf8bc8 - -var ripemd160stream = new RIPEMD160() -ripemd160stream.end('42') -console.log(ripemd160stream.read().toString('hex')) -// => 0df020ba32aa9b8b904471ff582ce6b579bf8bc8 -``` - -## LICENSE - -MIT diff --git a/truebit-implementation/node_modules/ripemd160/index.js b/truebit-implementation/node_modules/ripemd160/index.js deleted file mode 100644 index 870de9c3..00000000 --- a/truebit-implementation/node_modules/ripemd160/index.js +++ /dev/null @@ -1,163 +0,0 @@ -'use strict' -var Buffer = require('buffer').Buffer -var inherits = require('inherits') -var HashBase = require('hash-base') - -var ARRAY16 = new Array(16) - -var zl = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -] - -var zr = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -] - -var sl = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -] - -var sr = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -] - -var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] -var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] - -function RIPEMD160 () { - HashBase.call(this, 64) - - // state - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 -} - -inherits(RIPEMD160, HashBase) - -RIPEMD160.prototype._update = function () { - var words = ARRAY16 - for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) - - var al = this._a | 0 - var bl = this._b | 0 - var cl = this._c | 0 - var dl = this._d | 0 - var el = this._e | 0 - - var ar = this._a | 0 - var br = this._b | 0 - var cr = this._c | 0 - var dr = this._d | 0 - var er = this._e | 0 - - // computation - for (var i = 0; i < 80; i += 1) { - var tl - var tr - if (i < 16) { - tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) - tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) - } else if (i < 32) { - tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) - tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) - } else if (i < 48) { - tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) - tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) - } else if (i < 64) { - tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) - tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) - } else { // if (i<80) { - tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) - tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) - } - - al = el - el = dl - dl = rotl(cl, 10) - cl = bl - bl = tl - - ar = er - er = dr - dr = rotl(cr, 10) - cr = br - br = tr - } - - // update state - var t = (this._b + cl + dr) | 0 - this._b = (this._c + dl + er) | 0 - this._c = (this._d + el + ar) | 0 - this._d = (this._e + al + br) | 0 - this._e = (this._a + bl + cr) | 0 - this._a = t -} - -RIPEMD160.prototype._digest = function () { - // create padding and handle blocks - this._block[this._blockOffset++] = 0x80 - if (this._blockOffset > 56) { - this._block.fill(0, this._blockOffset, 64) - this._update() - this._blockOffset = 0 - } - - this._block.fill(0, this._blockOffset, 56) - this._block.writeUInt32LE(this._length[0], 56) - this._block.writeUInt32LE(this._length[1], 60) - this._update() - - // produce result - var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) - buffer.writeInt32LE(this._a, 0) - buffer.writeInt32LE(this._b, 4) - buffer.writeInt32LE(this._c, 8) - buffer.writeInt32LE(this._d, 12) - buffer.writeInt32LE(this._e, 16) - return buffer -} - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) -} - -function fn1 (a, b, c, d, e, m, k, s) { - return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 -} - -function fn2 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 -} - -function fn3 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 -} - -function fn4 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 -} - -function fn5 (a, b, c, d, e, m, k, s) { - return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 -} - -module.exports = RIPEMD160 diff --git a/truebit-implementation/node_modules/ripemd160/package.json b/truebit-implementation/node_modules/ripemd160/package.json deleted file mode 100644 index d5757bcd..00000000 --- a/truebit-implementation/node_modules/ripemd160/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "ripemd160@^2.0.1", - "_id": "ripemd160@2.0.2", - "_inBundle": false, - "_integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "_location": "/ripemd160", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ripemd160@^2.0.1", - "name": "ripemd160", - "escapedName": "ripemd160", - "rawSpec": "^2.0.1", - "saveSpec": null, - "fetchSpec": "^2.0.1" - }, - "_requiredBy": [ - "/create-hash", - "/create-hmac", - "/pbkdf2" - ], - "_resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "_shasum": "a1c1a6f624751577ba5d07914cbc92850585890c", - "_spec": "ripemd160@^2.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/create-hash", - "bugs": { - "url": "https://github.com/crypto-browserify/ripemd160/issues" - }, - "bundleDependencies": false, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - }, - "deprecated": false, - "description": "Compute ripemd160 of bytes or strings.", - "devDependencies": { - "hash-test-vectors": "^1.3.2", - "standard": "^6.0.7", - "tape": "^4.5.1" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/crypto-browserify/ripemd160#readme", - "keywords": [ - "string", - "strings", - "ripemd160", - "ripe160", - "bitcoin", - "bytes", - "cryptography" - ], - "license": "MIT", - "main": "./index", - "name": "ripemd160", - "repository": { - "url": "git+https://github.com/crypto-browserify/ripemd160.git", - "type": "git" - }, - "scripts": { - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "node test/*.js" - }, - "version": "2.0.2" -} diff --git a/truebit-implementation/node_modules/safe-buffer/LICENSE b/truebit-implementation/node_modules/safe-buffer/LICENSE deleted file mode 100644 index 0c068cee..00000000 --- a/truebit-implementation/node_modules/safe-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/safe-buffer/README.md b/truebit-implementation/node_modules/safe-buffer/README.md deleted file mode 100644 index e9a81afd..00000000 --- a/truebit-implementation/node_modules/safe-buffer/README.md +++ /dev/null @@ -1,584 +0,0 @@ -# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg -[travis-url]: https://travis-ci.org/feross/safe-buffer -[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg -[npm-url]: https://npmjs.org/package/safe-buffer -[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg -[downloads-url]: https://npmjs.org/package/safe-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -#### Safer Node.js Buffer API - -**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, -`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** - -**Uses the built-in implementation when available.** - -## install - -``` -npm install safe-buffer -``` - -## usage - -The goal of this package is to provide a safe replacement for the node.js `Buffer`. - -It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to -the top of your node.js modules: - -```js -var Buffer = require('safe-buffer').Buffer - -// Existing buffer code will continue to work without issues: - -new Buffer('hey', 'utf8') -new Buffer([1, 2, 3], 'utf8') -new Buffer(obj) -new Buffer(16) // create an uninitialized buffer (potentially unsafe) - -// But you can use these new explicit APIs to make clear what you want: - -Buffer.from('hey', 'utf8') // convert from many types to a Buffer -Buffer.alloc(16) // create a zero-filled buffer (safe) -Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) -``` - -## api - -### Class Method: Buffer.from(array) - - -* `array` {Array} - -Allocates a new `Buffer` using an `array` of octets. - -```js -const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); - // creates a new Buffer containing ASCII bytes - // ['b','u','f','f','e','r'] -``` - -A `TypeError` will be thrown if `array` is not an `Array`. - -### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) - - -* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or - a `new ArrayBuffer()` -* `byteOffset` {Number} Default: `0` -* `length` {Number} Default: `arrayBuffer.length - byteOffset` - -When passed a reference to the `.buffer` property of a `TypedArray` instance, -the newly created `Buffer` will share the same allocated memory as the -TypedArray. - -```js -const arr = new Uint16Array(2); -arr[0] = 5000; -arr[1] = 4000; - -const buf = Buffer.from(arr.buffer); // shares the memory with arr; - -console.log(buf); - // Prints: - -// changing the TypedArray changes the Buffer also -arr[1] = 6000; - -console.log(buf); - // Prints: -``` - -The optional `byteOffset` and `length` arguments specify a memory range within -the `arrayBuffer` that will be shared by the `Buffer`. - -```js -const ab = new ArrayBuffer(10); -const buf = Buffer.from(ab, 0, 2); -console.log(buf.length); - // Prints: 2 -``` - -A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. - -### Class Method: Buffer.from(buffer) - - -* `buffer` {Buffer} - -Copies the passed `buffer` data onto a new `Buffer` instance. - -```js -const buf1 = Buffer.from('buffer'); -const buf2 = Buffer.from(buf1); - -buf1[0] = 0x61; -console.log(buf1.toString()); - // 'auffer' -console.log(buf2.toString()); - // 'buffer' (copy is not changed) -``` - -A `TypeError` will be thrown if `buffer` is not a `Buffer`. - -### Class Method: Buffer.from(str[, encoding]) - - -* `str` {String} String to encode. -* `encoding` {String} Encoding to use, Default: `'utf8'` - -Creates a new `Buffer` containing the given JavaScript string `str`. If -provided, the `encoding` parameter identifies the character encoding. -If not provided, `encoding` defaults to `'utf8'`. - -```js -const buf1 = Buffer.from('this is a tést'); -console.log(buf1.toString()); - // prints: this is a tést -console.log(buf1.toString('ascii')); - // prints: this is a tC)st - -const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); -console.log(buf2.toString()); - // prints: this is a tést -``` - -A `TypeError` will be thrown if `str` is not a string. - -### Class Method: Buffer.alloc(size[, fill[, encoding]]) - - -* `size` {Number} -* `fill` {Value} Default: `undefined` -* `encoding` {String} Default: `utf8` - -Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the -`Buffer` will be *zero-filled*. - -```js -const buf = Buffer.alloc(5); -console.log(buf); - // -``` - -The `size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -If `fill` is specified, the allocated `Buffer` will be initialized by calling -`buf.fill(fill)`. See [`buf.fill()`][] for more information. - -```js -const buf = Buffer.alloc(5, 'a'); -console.log(buf); - // -``` - -If both `fill` and `encoding` are specified, the allocated `Buffer` will be -initialized by calling `buf.fill(fill, encoding)`. For example: - -```js -const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); -console.log(buf); - // -``` - -Calling `Buffer.alloc(size)` can be significantly slower than the alternative -`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance -contents will *never contain sensitive data*. - -A `TypeError` will be thrown if `size` is not a number. - -### Class Method: Buffer.allocUnsafe(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must -be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit -architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is -thrown. A zero-length Buffer will be created if a `size` less than or equal to -0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -```js -const buf = Buffer.allocUnsafe(5); -console.log(buf); - // - // (octets will be different, every time) -buf.fill(0); -console.log(buf); - // -``` - -A `TypeError` will be thrown if `size` is not a number. - -Note that the `Buffer` module pre-allocates an internal `Buffer` instance of -size `Buffer.poolSize` that is used as a pool for the fast allocation of new -`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated -`new Buffer(size)` constructor) only when `size` is less than or equal to -`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default -value of `Buffer.poolSize` is `8192` but can be modified. - -Use of this pre-allocated internal memory pool is a key difference between -calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. -Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer -pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal -Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The -difference is subtle but can be important when an application requires the -additional performance that `Buffer.allocUnsafe(size)` provides. - -### Class Method: Buffer.allocUnsafeSlow(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The -`size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, -allocations under 4KB are, by default, sliced from a single pre-allocated -`Buffer`. This allows applications to avoid the garbage collection overhead of -creating many individually allocated Buffers. This approach improves both -performance and memory usage by eliminating the need to track and cleanup as -many `Persistent` objects. - -However, in the case where a developer may need to retain a small chunk of -memory from a pool for an indeterminate amount of time, it may be appropriate -to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then -copy out the relevant bits. - -```js -// need to keep around a few small chunks of memory -const store = []; - -socket.on('readable', () => { - const data = socket.read(); - // allocate for retained data - const sb = Buffer.allocUnsafeSlow(10); - // copy the data into the new allocation - data.copy(sb, 0, 0, 10); - store.push(sb); -}); -``` - -Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* -a developer has observed undue memory retention in their applications. - -A `TypeError` will be thrown if `size` is not a number. - -### All the Rest - -The rest of the `Buffer` API is exactly the same as in node.js. -[See the docs](https://nodejs.org/api/buffer.html). - - -## Related links - -- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) -- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) - -## Why is `Buffer` unsafe? - -Today, the node.js `Buffer` constructor is overloaded to handle many different argument -types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), -`ArrayBuffer`, and also `Number`. - -The API is optimized for convenience: you can throw any type at it, and it will try to do -what you want. - -Because the Buffer constructor is so powerful, you often see code like this: - -```js -// Convert UTF-8 strings to hex -function toHex (str) { - return new Buffer(str).toString('hex') -} -``` - -***But what happens if `toHex` is called with a `Number` argument?*** - -### Remote Memory Disclosure - -If an attacker can make your program call the `Buffer` constructor with a `Number` -argument, then they can make it allocate uninitialized memory from the node.js process. -This could potentially disclose TLS private keys, user data, or database passwords. - -When the `Buffer` constructor is passed a `Number` argument, it returns an -**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like -this, you **MUST** overwrite the contents before returning it to the user. - -From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): - -> `new Buffer(size)` -> -> - `size` Number -> -> The underlying memory for `Buffer` instances created in this way is not initialized. -> **The contents of a newly created `Buffer` are unknown and could contain sensitive -> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. - -(Emphasis our own.) - -Whenever the programmer intended to create an uninitialized `Buffer` you often see code -like this: - -```js -var buf = new Buffer(16) - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### Would this ever be a problem in real code? - -Yes. It's surprisingly common to forget to check the type of your variables in a -dynamically-typed language like JavaScript. - -Usually the consequences of assuming the wrong type is that your program crashes with an -uncaught exception. But the failure mode for forgetting to check the type of arguments to -the `Buffer` constructor is more catastrophic. - -Here's an example of a vulnerable service that takes a JSON payload and converts it to -hex: - -```js -// Take a JSON payload {str: "some string"} and convert it to hex -var server = http.createServer(function (req, res) { - var data = '' - req.setEncoding('utf8') - req.on('data', function (chunk) { - data += chunk - }) - req.on('end', function () { - var body = JSON.parse(data) - res.end(new Buffer(body.str).toString('hex')) - }) -}) - -server.listen(8080) -``` - -In this example, an http client just has to send: - -```json -{ - "str": 1000 -} -``` - -and it will get back 1,000 bytes of uninitialized memory from the server. - -This is a very serious bug. It's similar in severity to the -[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process -memory by remote attackers. - - -### Which real-world packages were vulnerable? - -#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) - -[Mathias Buus](https://github.com/mafintosh) and I -([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, -[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow -anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get -them to reveal 20 bytes at a time of uninitialized memory from the node.js process. - -Here's -[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) -that fixed it. We released a new fixed version, created a -[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all -vulnerable versions on npm so users will get a warning to upgrade to a newer version. - -#### [`ws`](https://www.npmjs.com/package/ws) - -That got us wondering if there were other vulnerable packages. Sure enough, within a short -period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the -most popular WebSocket implementation in node.js. - -If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as -expected, then uninitialized server memory would be disclosed to the remote peer. - -These were the vulnerable methods: - -```js -socket.send(number) -socket.ping(number) -socket.pong(number) -``` - -Here's a vulnerable socket server with some echo functionality: - -```js -server.on('connection', function (socket) { - socket.on('message', function (message) { - message = JSON.parse(message) - if (message.type === 'echo') { - socket.send(message.data) // send back the user's message - } - }) -}) -``` - -`socket.send(number)` called on the server, will disclose server memory. - -Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue -was fixed, with a more detailed explanation. Props to -[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the -[Node Security Project disclosure](https://nodesecurity.io/advisories/67). - - -### What's the solution? - -It's important that node.js offers a fast way to get memory otherwise performance-critical -applications would needlessly get a lot slower. - -But we need a better way to *signal our intent* as programmers. **When we want -uninitialized memory, we should request it explicitly.** - -Sensitive functionality should not be packed into a developer-friendly API that loosely -accepts many different types. This type of API encourages the lazy practice of passing -variables in without checking the type very carefully. - -#### A new API: `Buffer.allocUnsafe(number)` - -The functionality of creating buffers with uninitialized memory should be part of another -API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that -frequently gets user input of all sorts of different types passed into it. - -```js -var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### How do we fix node.js core? - -We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as -`semver-major`) which defends against one case: - -```js -var str = 16 -new Buffer(str, 'utf8') -``` - -In this situation, it's implied that the programmer intended the first argument to be a -string, since they passed an encoding as a second argument. Today, node.js will allocate -uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not -what the programmer intended. - -But this is only a partial solution, since if the programmer does `new Buffer(variable)` -(without an `encoding` parameter) there's no way to know what they intended. If `variable` -is sometimes a number, then uninitialized memory will sometimes be returned. - -### What's the real long-term fix? - -We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when -we need uninitialized memory. But that would break 1000s of packages. - -~~We believe the best solution is to:~~ - -~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ - -~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ - -#### Update - -We now support adding three new APIs: - -- `Buffer.from(value)` - convert from any type to a buffer -- `Buffer.alloc(size)` - create a zero-filled buffer -- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size - -This solves the core problem that affected `ws` and `bittorrent-dht` which is -`Buffer(variable)` getting tricked into taking a number argument. - -This way, existing code continues working and the impact on the npm ecosystem will be -minimal. Over time, npm maintainers can migrate performance-critical code to use -`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. - - -### Conclusion - -We think there's a serious design issue with the `Buffer` API as it exists today. It -promotes insecure software by putting high-risk functionality into a convenient API -with friendly "developer ergonomics". - -This wasn't merely a theoretical exercise because we found the issue in some of the -most popular npm packages. - -Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of -`buffer`. - -```js -var Buffer = require('safe-buffer').Buffer -``` - -Eventually, we hope that node.js core can switch to this new, safer behavior. We believe -the impact on the ecosystem would be minimal since it's not a breaking change. -Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while -older, insecure packages would magically become safe from this attack vector. - - -## links - -- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) -- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) -- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) - - -## credit - -The original issues in `bittorrent-dht` -([disclosure](https://nodesecurity.io/advisories/68)) and -`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by -[Mathias Buus](https://github.com/mafintosh) and -[Feross Aboukhadijeh](http://feross.org/). - -Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues -and for his work running the [Node Security Project](https://nodesecurity.io/). - -Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and -auditing the code. - - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/truebit-implementation/node_modules/safe-buffer/index.d.ts b/truebit-implementation/node_modules/safe-buffer/index.d.ts deleted file mode 100644 index e9fed809..00000000 --- a/truebit-implementation/node_modules/safe-buffer/index.d.ts +++ /dev/null @@ -1,187 +0,0 @@ -declare module "safe-buffer" { - export class Buffer { - length: number - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): { type: 'Buffer', data: any[] }; - equals(otherBuffer: Buffer): boolean; - compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - */ - constructor (str: string, encoding?: string); - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - */ - constructor (size: number); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: Uint8Array); - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - */ - constructor (arrayBuffer: ArrayBuffer); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: any[]); - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - */ - constructor (buffer: Buffer); - prototype: Buffer; - /** - * Allocates a new Buffer using an {array} of octets. - * - * @param array - */ - static from(array: any[]): Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() - * @param byteOffset - * @param length - */ - static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Copies the passed {buffer} data onto a new Buffer instance. - * - * @param buffer - */ - static from(buffer: Buffer): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - * - * @param str - */ - static from(str: string, encoding?: string): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - static isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - static isEncoding(encoding: string): boolean; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - static byteLength(string: string, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - static concat(list: Buffer[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - static compare(buf1: Buffer, buf2: Buffer): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafeSlow(size: number): Buffer; - } -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/safe-buffer/index.js b/truebit-implementation/node_modules/safe-buffer/index.js deleted file mode 100644 index 22438dab..00000000 --- a/truebit-implementation/node_modules/safe-buffer/index.js +++ /dev/null @@ -1,62 +0,0 @@ -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} diff --git a/truebit-implementation/node_modules/safe-buffer/package.json b/truebit-implementation/node_modules/safe-buffer/package.json deleted file mode 100644 index f003788f..00000000 --- a/truebit-implementation/node_modules/safe-buffer/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_from": "safe-buffer@^5.0.1", - "_id": "safe-buffer@5.1.2", - "_inBundle": false, - "_integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "_location": "/safe-buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "safe-buffer@^5.0.1", - "name": "safe-buffer", - "escapedName": "safe-buffer", - "rawSpec": "^5.0.1", - "saveSpec": null, - "fetchSpec": "^5.0.1" - }, - "_requiredBy": [ - "/bl", - "/browserify-aes", - "/browserify-des", - "/cipher-base", - "/create-hmac", - "/evp_bytestokey", - "/express", - "/got", - "/hash-base", - "/md5.js", - "/pbkdf2", - "/public-encrypt", - "/randombytes", - "/randomfill", - "/readable-stream", - "/request", - "/sha.js", - "/string_decoder", - "/tunnel-agent", - "/ws" - ], - "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "_shasum": "991ec69d296e0313747d59bdfd2b745c35f8828d", - "_spec": "safe-buffer@^5.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "http://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/safe-buffer/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Safer Node.js Buffer API", - "devDependencies": { - "standard": "*", - "tape": "^4.0.0" - }, - "homepage": "https://github.com/feross/safe-buffer", - "keywords": [ - "buffer", - "buffer allocate", - "node security", - "safe", - "safe-buffer", - "security", - "uninitialized" - ], - "license": "MIT", - "main": "index.js", - "name": "safe-buffer", - "repository": { - "type": "git", - "url": "git://github.com/feross/safe-buffer.git" - }, - "scripts": { - "test": "standard && tape test/*.js" - }, - "types": "index.d.ts", - "version": "5.1.2" -} diff --git a/truebit-implementation/node_modules/safer-buffer/LICENSE b/truebit-implementation/node_modules/safer-buffer/LICENSE deleted file mode 100644 index 4fe9e6f1..00000000 --- a/truebit-implementation/node_modules/safer-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Nikita Skovoroda - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/safer-buffer/Porting-Buffer.md b/truebit-implementation/node_modules/safer-buffer/Porting-Buffer.md deleted file mode 100644 index 68d86bab..00000000 --- a/truebit-implementation/node_modules/safer-buffer/Porting-Buffer.md +++ /dev/null @@ -1,268 +0,0 @@ -# Porting to the Buffer.from/Buffer.alloc API - - -## Overview - -- [Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.](#variant-1) (*recommended*) -- [Variant 2: Use a polyfill](#variant-2) -- [Variant 3: manual detection, with safeguards](#variant-3) - -### Finding problematic bits of code using grep - -Just run `grep -nrE '[^a-zA-Z](Slow)?Buffer\s*\(' --exclude-dir node_modules`. - -It will find all the potentially unsafe places in your own code (with some considerably unlikely -exceptions). - -### Finding problematic bits of code using Node.js 8 - -If you’re using Node.js ≥ 8.0.0 (which is recommended), Node.js exposes multiple options that help with finding the relevant pieces of code: - -- `--trace-warnings` will make Node.js show a stack trace for this warning and other warnings that are printed by Node.js. -- `--trace-deprecation` does the same thing, but only for deprecation warnings. -- `--pending-deprecation` will show more types of deprecation warnings. In particular, it will show the `Buffer()` deprecation warning, even on Node.js 8. - -You can set these flags using an environment variable: - -```console -$ export NODE_OPTIONS='--trace-warnings --pending-deprecation' -$ cat example.js -'use strict'; -const foo = new Buffer('foo'); -$ node example.js -(node:7147) [DEP0005] DeprecationWarning: The Buffer() and new Buffer() constructors are not recommended for use due to security and usability concerns. Please use the new Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() construction methods instead. - at showFlaggedDeprecation (buffer.js:127:13) - at new Buffer (buffer.js:148:3) - at Object. (/path/to/example.js:2:13) - [... more stack trace lines ...] -``` - -### Finding problematic bits of code using linters - -Eslint rules [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) -or -[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) -also find calls to deprecated `Buffer()` API. Those rules are included in some pre-sets. - -There is a drawback, though, that it doesn't always -[work correctly](https://github.com/chalker/safer-buffer#why-not-safe-buffer) when `Buffer` is -overriden e.g. with a polyfill, so recommended is a combination of this and some other method -described above. - - -## Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x. - -This is the recommended solution nowadays that would imply only minimal overhead. - -The Node.js 5.x release line has been unsupported since July 2016, and the Node.js 4.x release line reaches its End of Life in April 2018 (→ [Schedule](https://github.com/nodejs/Release#release-schedule)). This means that these versions of Node.js will *not* receive any updates, even in case of security issues, so using these release lines should be avoided, if at all possible. - -What you would do in this case is to convert all `new Buffer()` or `Buffer()` calls to use `Buffer.alloc()` or `Buffer.from()`, in the following way: - -- For `new Buffer(number)`, replace it with `Buffer.alloc(number)`. -- For `new Buffer(string)` (or `new Buffer(string, encoding)`), replace it with `Buffer.from(string)` (or `Buffer.from(string, encoding)`). -- For all other combinations of arguments (these are much rarer), also replace `new Buffer(...arguments)` with `Buffer.from(...arguments)`. - -Note that `Buffer.alloc()` is also _faster_ on the current Node.js versions than -`new Buffer(size).fill(0)`, which is what you would otherwise need to ensure zero-filling. - -Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) -or -[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) -is recommended to avoid accidential unsafe Buffer API usage. - -There is also a [JSCodeshift codemod](https://github.com/joyeecheung/node-dep-codemod#dep005) -for automatically migrating Buffer constructors to `Buffer.alloc()` or `Buffer.from()`. -Note that it currently only works with cases where the arguments are literals or where the -constructor is invoked with two arguments. - -_If you currently support those older Node.js versions and dropping them would be a semver-major change -for you, or if you support older branches of your packages, consider using [Variant 2](#variant-2) -or [Variant 3](#variant-3) on older branches, so people using those older branches will also receive -the fix. That way, you will eradicate potential issues caused by unguarded Buffer API usage and -your users will not observe a runtime deprecation warning when running your code on Node.js 10._ - - -## Variant 2: Use a polyfill - -Utilize [safer-buffer](https://www.npmjs.com/package/safer-buffer) as a polyfill to support older -Node.js versions. - -You would take exacly the same steps as in [Variant 1](#variant-1), but with a polyfill -`const Buffer = require('safer-buffer').Buffer` in all files where you use the new `Buffer` api. - -Make sure that you do not use old `new Buffer` API — in any files where the line above is added, -using old `new Buffer()` API will _throw_. It will be easy to notice that in CI, though. - -Alternatively, you could use [buffer-from](https://www.npmjs.com/package/buffer-from) and/or -[buffer-alloc](https://www.npmjs.com/package/buffer-alloc) [ponyfills](https://ponyfill.com/) — -those are great, the only downsides being 4 deps in the tree and slightly more code changes to -migrate off them (as you would be using e.g. `Buffer.from` under a different name). If you need only -`Buffer.from` polyfilled — `buffer-from` alone which comes with no extra dependencies. - -_Alternatively, you could use [safe-buffer](https://www.npmjs.com/package/safe-buffer) — it also -provides a polyfill, but takes a different approach which has -[it's drawbacks](https://github.com/chalker/safer-buffer#why-not-safe-buffer). It will allow you -to also use the older `new Buffer()` API in your code, though — but that's arguably a benefit, as -it is problematic, can cause issues in your code, and will start emitting runtime deprecation -warnings starting with Node.js 10._ - -Note that in either case, it is important that you also remove all calls to the old Buffer -API manually — just throwing in `safe-buffer` doesn't fix the problem by itself, it just provides -a polyfill for the new API. I have seen people doing that mistake. - -Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) -or -[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) -is recommended. - -_Don't forget to drop the polyfill usage once you drop support for Node.js < 4.5.0._ - - -## Variant 3 — manual detection, with safeguards - -This is useful if you create Buffer instances in only a few places (e.g. one), or you have your own -wrapper around them. - -### Buffer(0) - -This special case for creating empty buffers can be safely replaced with `Buffer.concat([])`, which -returns the same result all the way down to Node.js 0.8.x. - -### Buffer(notNumber) - -Before: - -```js -var buf = new Buffer(notNumber, encoding); -``` - -After: - -```js -var buf; -if (Buffer.from && Buffer.from !== Uint8Array.from) { - buf = Buffer.from(notNumber, encoding); -} else { - if (typeof notNumber === 'number') - throw new Error('The "size" argument must be of type number.'); - buf = new Buffer(notNumber, encoding); -} -``` - -`encoding` is optional. - -Note that the `typeof notNumber` before `new Buffer` is required (for cases when `notNumber` argument is not -hard-coded) and _is not caused by the deprecation of Buffer constructor_ — it's exactly _why_ the -Buffer constructor is deprecated. Ecosystem packages lacking this type-check caused numereous -security issues — situations when unsanitized user input could end up in the `Buffer(arg)` create -problems ranging from DoS to leaking sensitive information to the attacker from the process memory. - -When `notNumber` argument is hardcoded (e.g. literal `"abc"` or `[0,1,2]`), the `typeof` check can -be omitted. - -Also note that using TypeScript does not fix this problem for you — when libs written in -`TypeScript` are used from JS, or when user input ends up there — it behaves exactly as pure JS, as -all type checks are translation-time only and are not present in the actual JS code which TS -compiles to. - -### Buffer(number) - -For Node.js 0.10.x (and below) support: - -```js -var buf; -if (Buffer.alloc) { - buf = Buffer.alloc(number); -} else { - buf = new Buffer(number); - buf.fill(0); -} -``` - -Otherwise (Node.js ≥ 0.12.x): - -```js -const buf = Buffer.alloc ? Buffer.alloc(number) : new Buffer(number).fill(0); -``` - -## Regarding Buffer.allocUnsafe - -Be extra cautious when using `Buffer.allocUnsafe`: - * Don't use it if you don't have a good reason to - * e.g. you probably won't ever see a performance difference for small buffers, in fact, those - might be even faster with `Buffer.alloc()`, - * if your code is not in the hot code path — you also probably won't notice a difference, - * keep in mind that zero-filling minimizes the potential risks. - * If you use it, make sure that you never return the buffer in a partially-filled state, - * if you are writing to it sequentially — always truncate it to the actuall written length - -Errors in handling buffers allocated with `Buffer.allocUnsafe` could result in various issues, -ranged from undefined behaviour of your code to sensitive data (user input, passwords, certs) -leaking to the remote attacker. - -_Note that the same applies to `new Buffer` usage without zero-filling, depending on the Node.js -version (and lacking type checks also adds DoS to the list of potential problems)._ - - -## FAQ - - -### What is wrong with the `Buffer` constructor? - -The `Buffer` constructor could be used to create a buffer in many different ways: - -- `new Buffer(42)` creates a `Buffer` of 42 bytes. Before Node.js 8, this buffer contained - *arbitrary memory* for performance reasons, which could include anything ranging from - program source code to passwords and encryption keys. -- `new Buffer('abc')` creates a `Buffer` that contains the UTF-8-encoded version of - the string `'abc'`. A second argument could specify another encoding: For example, - `new Buffer(string, 'base64')` could be used to convert a Base64 string into the original - sequence of bytes that it represents. -- There are several other combinations of arguments. - -This meant that, in code like `var buffer = new Buffer(foo);`, *it is not possible to tell -what exactly the contents of the generated buffer are* without knowing the type of `foo`. - -Sometimes, the value of `foo` comes from an external source. For example, this function -could be exposed as a service on a web server, converting a UTF-8 string into its Base64 form: - -``` -function stringToBase64(req, res) { - // The request body should have the format of `{ string: 'foobar' }` - const rawBytes = new Buffer(req.body.string) - const encoded = rawBytes.toString('base64') - res.end({ encoded: encoded }) -} -``` - -Note that this code does *not* validate the type of `req.body.string`: - -- `req.body.string` is expected to be a string. If this is the case, all goes well. -- `req.body.string` is controlled by the client that sends the request. -- If `req.body.string` is the *number* `50`, the `rawBytes` would be 50 bytes: - - Before Node.js 8, the content would be uninitialized - - After Node.js 8, the content would be `50` bytes with the value `0` - -Because of the missing type check, an attacker could intentionally send a number -as part of the request. Using this, they can either: - -- Read uninitialized memory. This **will** leak passwords, encryption keys and other - kinds of sensitive information. (Information leak) -- Force the program to allocate a large amount of memory. For example, when specifying - `500000000` as the input value, each request will allocate 500MB of memory. - This can be used to either exhaust the memory available of a program completely - and make it crash, or slow it down significantly. (Denial of Service) - -Both of these scenarios are considered serious security issues in a real-world -web server context. - -when using `Buffer.from(req.body.string)` instead, passing a number will always -throw an exception instead, giving a controlled behaviour that can always be -handled by the program. - - -### The `Buffer()` constructor has been deprecated for a while. Is this really an issue? - -Surveys of code in the `npm` ecosystem have shown that the `Buffer()` constructor is still -widely used. This includes new code, and overall usage of such code has actually been -*increasing*. diff --git a/truebit-implementation/node_modules/safer-buffer/Readme.md b/truebit-implementation/node_modules/safer-buffer/Readme.md deleted file mode 100644 index 14b08229..00000000 --- a/truebit-implementation/node_modules/safer-buffer/Readme.md +++ /dev/null @@ -1,156 +0,0 @@ -# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url] - -[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master -[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer -[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg -[npm-url]: https://npmjs.org/package/safer-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com -[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg -[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md - -Modern Buffer API polyfill without footguns, working on Node.js from 0.8 to current. - -## How to use? - -First, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API. - -Then, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use -`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new -Buffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._ - -Also, see the -[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide. - -## Do I need it? - -Hopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that -is the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()` -though. - -See the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) -for a better description. - -## Why not [safe-buffer](https://npmjs.com/safe-buffer)? - -_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and -itself contains footguns._ - -`safe-buffer` could be used safely to get the new API while still keeping support for older -Node.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API -I found out that `safe-buffer` is itself causing problems in some cases. - -For example, consider the following snippet: - -```console -$ cat example.unsafe.js -console.log(Buffer(20)) -$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js - -$ standard example.unsafe.js -standard: Use JavaScript Standard Style (https://standardjs.com) - /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead. -``` - -This is allocates and writes to console an uninitialized chunk of memory. -[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people -to avoid using unsafe API. - -Let's now throw in `safe-buffer`! - -```console -$ cat example.safe-buffer.js -const Buffer = require('safe-buffer').Buffer -console.log(Buffer(20)) -$ standard example.safe-buffer.js -$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js - -``` - -See the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior -remains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out -chunks of uninitialized memory. -_And this code will still emit runtime warnings on Node.js 10.x and above._ - -That was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or -emitting warnings on it, but that significantly diverges from `safe-buffer` design. After some -discussion, it was decided to move my approach into a separate package, and _this is that separate -package_. - -This footgun is not imaginary — I observed top-downloaded packages doing that kind of thing, -«fixing» the lint warning by blindly including `safe-buffer` without any actual changes. - -Also in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request -can bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go -unnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even -pass CI. _I also observed that being done in popular packages._ - -Some examples: - * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31) - (a module with 548 759 downloads/month), - * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61) - (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)), - * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c) - (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)), - * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec) - (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)), - * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1) - (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)). - * And there are a lot more over the ecosystem. - -I filed a PR at -[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to -partially fix that (for cases when that lint rule is used), but it is a semver-major change for -linter rules and presets, so it would take significant time for that to reach actual setups. -_It also hasn't been released yet (2018-03-20)._ - -Also, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake. -It still supports it with an explicit concern barier, by placing it under -`require('safer-buffer/dangereous')`. - -## But isn't throwing bad? - -Not really. It's an error that could be noticed and fixed early, instead of causing havoc later like -unguarded `new Buffer()` calls that end up receiving user input can do. - -This package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so -it is really simple to keep track of things and make sure that you don't mix old API usage with that. -Also, CI should hint anything that you might have missed. - -New commits, if tested, won't land new usage of unsafe Buffer API this way. -_Node.js 10.x also deals with that by printing a runtime depecation warning._ - -### Would it affect third-party modules? - -No, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`. -Don't do that. - -### But I don't want throwing… - -That is also fine! - -Also, it could be better in some cases when you don't comprehensive enough test coverage. - -In that case — just don't override `Buffer` and use -`var SaferBuffer = require('safer-buffer').Buffer` instead. - -That way, everything using `Buffer` natively would still work, but there would be two drawbacks: - -* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and - `SaferBuffer.alloc` instead. -* You are still open to accidentally using the insecure deprecated API — use a linter to catch that. - -Note that using a linter to catch accidential `Buffer` constructor usage in this case is strongly -recommended. `Buffer` is not overriden in this usecase, so linters won't get confused. - -## «Without footguns»? - -Well, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property -on older versions and duping things from there. You shouldn't do that in your code, probabably. - -The intention is to remove the most significant footguns that affect lots of packages in the -ecosystem, and to do it in the proper way. - -Also, this package doesn't protect against security issues affecting some Node.js versions, so for -usage in your own production code, it is still recommended to update to a Node.js version -[supported by upstream](https://github.com/nodejs/release#release-schedule). diff --git a/truebit-implementation/node_modules/safer-buffer/dangerous.js b/truebit-implementation/node_modules/safer-buffer/dangerous.js deleted file mode 100644 index ca41fdc5..00000000 --- a/truebit-implementation/node_modules/safer-buffer/dangerous.js +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint-disable node/no-deprecated-api */ - -'use strict' - -var buffer = require('buffer') -var Buffer = buffer.Buffer -var safer = require('./safer.js') -var Safer = safer.Buffer - -var dangerous = {} - -var key - -for (key in safer) { - if (!safer.hasOwnProperty(key)) continue - dangerous[key] = safer[key] -} - -var Dangereous = dangerous.Buffer = {} - -// Copy Safer API -for (key in Safer) { - if (!Safer.hasOwnProperty(key)) continue - Dangereous[key] = Safer[key] -} - -// Copy those missing unsafe methods, if they are present -for (key in Buffer) { - if (!Buffer.hasOwnProperty(key)) continue - if (Dangereous.hasOwnProperty(key)) continue - Dangereous[key] = Buffer[key] -} - -if (!Dangereous.allocUnsafe) { - Dangereous.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) - } - if (size < 0 || size >= 2 * (1 << 30)) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } - return Buffer(size) - } -} - -if (!Dangereous.allocUnsafeSlow) { - Dangereous.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) - } - if (size < 0 || size >= 2 * (1 << 30)) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } - return buffer.SlowBuffer(size) - } -} - -module.exports = dangerous diff --git a/truebit-implementation/node_modules/safer-buffer/package.json b/truebit-implementation/node_modules/safer-buffer/package.json deleted file mode 100644 index 501a351f..00000000 --- a/truebit-implementation/node_modules/safer-buffer/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "safer-buffer@>= 2.1.2 < 3", - "_id": "safer-buffer@2.1.2", - "_inBundle": false, - "_integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "_location": "/safer-buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "safer-buffer@>= 2.1.2 < 3", - "name": "safer-buffer", - "escapedName": "safer-buffer", - "rawSpec": ">= 2.1.2 < 3", - "saveSpec": null, - "fetchSpec": ">= 2.1.2 < 3" - }, - "_requiredBy": [ - "/asn1", - "/ecc-jsbn", - "/iconv-lite", - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "_shasum": "44fa161b0187b9549dd84bb91802f9bd8385cd6a", - "_spec": "safer-buffer@>= 2.1.2 < 3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/iconv-lite", - "author": { - "name": "Nikita Skovoroda", - "email": "chalkerx@gmail.com", - "url": "https://github.com/ChALkeR" - }, - "bugs": { - "url": "https://github.com/ChALkeR/safer-buffer/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Modern Buffer API polyfill without footguns", - "devDependencies": { - "standard": "^11.0.1", - "tape": "^4.9.0" - }, - "files": [ - "Porting-Buffer.md", - "Readme.md", - "tests.js", - "dangerous.js", - "safer.js" - ], - "homepage": "https://github.com/ChALkeR/safer-buffer#readme", - "license": "MIT", - "main": "safer.js", - "name": "safer-buffer", - "repository": { - "type": "git", - "url": "git+https://github.com/ChALkeR/safer-buffer.git" - }, - "scripts": { - "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js", - "test": "standard && tape tests.js" - }, - "version": "2.1.2" -} diff --git a/truebit-implementation/node_modules/safer-buffer/safer.js b/truebit-implementation/node_modules/safer-buffer/safer.js deleted file mode 100644 index 37c7e1aa..00000000 --- a/truebit-implementation/node_modules/safer-buffer/safer.js +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-disable node/no-deprecated-api */ - -'use strict' - -var buffer = require('buffer') -var Buffer = buffer.Buffer - -var safer = {} - -var key - -for (key in buffer) { - if (!buffer.hasOwnProperty(key)) continue - if (key === 'SlowBuffer' || key === 'Buffer') continue - safer[key] = buffer[key] -} - -var Safer = safer.Buffer = {} -for (key in Buffer) { - if (!Buffer.hasOwnProperty(key)) continue - if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue - Safer[key] = Buffer[key] -} - -safer.Buffer.prototype = Buffer.prototype - -if (!Safer.from || Safer.from === Uint8Array.from) { - Safer.from = function (value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) - } - if (value && typeof value.length === 'undefined') { - throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) - } - return Buffer(value, encodingOrOffset, length) - } -} - -if (!Safer.alloc) { - Safer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) - } - if (size < 0 || size >= 2 * (1 << 30)) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } - var buf = Buffer(size) - if (!fill || fill.length === 0) { - buf.fill(0) - } else if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - return buf - } -} - -if (!safer.kStringMaxLength) { - try { - safer.kStringMaxLength = process.binding('buffer').kStringMaxLength - } catch (e) { - // we can't determine kStringMaxLength in environments where process.binding - // is unsupported, so let's not set it - } -} - -if (!safer.constants) { - safer.constants = { - MAX_LENGTH: safer.kMaxLength - } - if (safer.kStringMaxLength) { - safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength - } -} - -module.exports = safer diff --git a/truebit-implementation/node_modules/safer-buffer/tests.js b/truebit-implementation/node_modules/safer-buffer/tests.js deleted file mode 100644 index 7ed2777c..00000000 --- a/truebit-implementation/node_modules/safer-buffer/tests.js +++ /dev/null @@ -1,406 +0,0 @@ -/* eslint-disable node/no-deprecated-api */ - -'use strict' - -var test = require('tape') - -var buffer = require('buffer') - -var index = require('./') -var safer = require('./safer') -var dangerous = require('./dangerous') - -/* Inheritance tests */ - -test('Default is Safer', function (t) { - t.equal(index, safer) - t.notEqual(safer, dangerous) - t.notEqual(index, dangerous) - t.end() -}) - -test('Is not a function', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.equal(typeof impl, 'object') - t.equal(typeof impl.Buffer, 'object') - }); - [buffer].forEach(function (impl) { - t.equal(typeof impl, 'object') - t.equal(typeof impl.Buffer, 'function') - }) - t.end() -}) - -test('Constructor throws', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.throws(function () { impl.Buffer() }) - t.throws(function () { impl.Buffer(0) }) - t.throws(function () { impl.Buffer('a') }) - t.throws(function () { impl.Buffer('a', 'utf-8') }) - t.throws(function () { return new impl.Buffer() }) - t.throws(function () { return new impl.Buffer(0) }) - t.throws(function () { return new impl.Buffer('a') }) - t.throws(function () { return new impl.Buffer('a', 'utf-8') }) - }) - t.end() -}) - -test('Safe methods exist', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.equal(typeof impl.Buffer.alloc, 'function', 'alloc') - t.equal(typeof impl.Buffer.from, 'function', 'from') - }) - t.end() -}) - -test('Unsafe methods exist only in Dangerous', function (t) { - [index, safer].forEach(function (impl) { - t.equal(typeof impl.Buffer.allocUnsafe, 'undefined') - t.equal(typeof impl.Buffer.allocUnsafeSlow, 'undefined') - }); - [dangerous].forEach(function (impl) { - t.equal(typeof impl.Buffer.allocUnsafe, 'function') - t.equal(typeof impl.Buffer.allocUnsafeSlow, 'function') - }) - t.end() -}) - -test('Generic methods/properties are defined and equal', function (t) { - ['poolSize', 'isBuffer', 'concat', 'byteLength'].forEach(function (method) { - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl.Buffer[method], buffer.Buffer[method], method) - t.notEqual(typeof impl.Buffer[method], 'undefined', method) - }) - }) - t.end() -}) - -test('Built-in buffer static methods/properties are inherited', function (t) { - Object.keys(buffer).forEach(function (method) { - if (method === 'SlowBuffer' || method === 'Buffer') return; - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl[method], buffer[method], method) - t.notEqual(typeof impl[method], 'undefined', method) - }) - }) - t.end() -}) - -test('Built-in Buffer static methods/properties are inherited', function (t) { - Object.keys(buffer.Buffer).forEach(function (method) { - if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl.Buffer[method], buffer.Buffer[method], method) - t.notEqual(typeof impl.Buffer[method], 'undefined', method) - }) - }) - t.end() -}) - -test('.prototype property of Buffer is inherited', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl.Buffer.prototype, buffer.Buffer.prototype, 'prototype') - t.notEqual(typeof impl.Buffer.prototype, 'undefined', 'prototype') - }) - t.end() -}) - -test('All Safer methods are present in Dangerous', function (t) { - Object.keys(safer).forEach(function (method) { - if (method === 'Buffer') return; - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl[method], safer[method], method) - if (method !== 'kStringMaxLength') { - t.notEqual(typeof impl[method], 'undefined', method) - } - }) - }) - Object.keys(safer.Buffer).forEach(function (method) { - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl.Buffer[method], safer.Buffer[method], method) - t.notEqual(typeof impl.Buffer[method], 'undefined', method) - }) - }) - t.end() -}) - -test('Safe methods from Dangerous methods are present in Safer', function (t) { - Object.keys(dangerous).forEach(function (method) { - if (method === 'Buffer') return; - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl[method], dangerous[method], method) - if (method !== 'kStringMaxLength') { - t.notEqual(typeof impl[method], 'undefined', method) - } - }) - }) - Object.keys(dangerous.Buffer).forEach(function (method) { - if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl.Buffer[method], dangerous.Buffer[method], method) - t.notEqual(typeof impl.Buffer[method], 'undefined', method) - }) - }) - t.end() -}) - -/* Behaviour tests */ - -test('Methods return Buffers', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 10))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 'a'))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10, 'x'))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(9, 'ab'))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(''))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string'))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string', 'utf-8'))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([0, 42, 3]))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(new Uint8Array([0, 42, 3])))) - t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([]))) - }); - ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { - t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](0))) - t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](10))) - }) - t.end() -}) - -test('Constructor is buffer.Buffer', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl.Buffer.alloc(0).constructor, buffer.Buffer) - t.equal(impl.Buffer.alloc(0, 10).constructor, buffer.Buffer) - t.equal(impl.Buffer.alloc(0, 'a').constructor, buffer.Buffer) - t.equal(impl.Buffer.alloc(10).constructor, buffer.Buffer) - t.equal(impl.Buffer.alloc(10, 'x').constructor, buffer.Buffer) - t.equal(impl.Buffer.alloc(9, 'ab').constructor, buffer.Buffer) - t.equal(impl.Buffer.from('').constructor, buffer.Buffer) - t.equal(impl.Buffer.from('string').constructor, buffer.Buffer) - t.equal(impl.Buffer.from('string', 'utf-8').constructor, buffer.Buffer) - t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').constructor, buffer.Buffer) - t.equal(impl.Buffer.from([0, 42, 3]).constructor, buffer.Buffer) - t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).constructor, buffer.Buffer) - t.equal(impl.Buffer.from([]).constructor, buffer.Buffer) - }); - [0, 10, 100].forEach(function (arg) { - t.equal(dangerous.Buffer.allocUnsafe(arg).constructor, buffer.Buffer) - t.equal(dangerous.Buffer.allocUnsafeSlow(arg).constructor, buffer.SlowBuffer(0).constructor) - }) - t.end() -}) - -test('Invalid calls throw', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.throws(function () { impl.Buffer.from(0) }) - t.throws(function () { impl.Buffer.from(10) }) - t.throws(function () { impl.Buffer.from(10, 'utf-8') }) - t.throws(function () { impl.Buffer.from('string', 'invalid encoding') }) - t.throws(function () { impl.Buffer.from(-10) }) - t.throws(function () { impl.Buffer.from(1e90) }) - t.throws(function () { impl.Buffer.from(Infinity) }) - t.throws(function () { impl.Buffer.from(-Infinity) }) - t.throws(function () { impl.Buffer.from(NaN) }) - t.throws(function () { impl.Buffer.from(null) }) - t.throws(function () { impl.Buffer.from(undefined) }) - t.throws(function () { impl.Buffer.from() }) - t.throws(function () { impl.Buffer.from({}) }) - t.throws(function () { impl.Buffer.alloc('') }) - t.throws(function () { impl.Buffer.alloc('string') }) - t.throws(function () { impl.Buffer.alloc('string', 'utf-8') }) - t.throws(function () { impl.Buffer.alloc('b25ldHdvdGhyZWU=', 'base64') }) - t.throws(function () { impl.Buffer.alloc(-10) }) - t.throws(function () { impl.Buffer.alloc(1e90) }) - t.throws(function () { impl.Buffer.alloc(2 * (1 << 30)) }) - t.throws(function () { impl.Buffer.alloc(Infinity) }) - t.throws(function () { impl.Buffer.alloc(-Infinity) }) - t.throws(function () { impl.Buffer.alloc(null) }) - t.throws(function () { impl.Buffer.alloc(undefined) }) - t.throws(function () { impl.Buffer.alloc() }) - t.throws(function () { impl.Buffer.alloc([]) }) - t.throws(function () { impl.Buffer.alloc([0, 42, 3]) }) - t.throws(function () { impl.Buffer.alloc({}) }) - }); - ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { - t.throws(function () { dangerous.Buffer[method]('') }) - t.throws(function () { dangerous.Buffer[method]('string') }) - t.throws(function () { dangerous.Buffer[method]('string', 'utf-8') }) - t.throws(function () { dangerous.Buffer[method](2 * (1 << 30)) }) - t.throws(function () { dangerous.Buffer[method](Infinity) }) - if (dangerous.Buffer[method] === buffer.Buffer.allocUnsafe) { - t.skip('Skipping, older impl of allocUnsafe coerced negative sizes to 0') - } else { - t.throws(function () { dangerous.Buffer[method](-10) }) - t.throws(function () { dangerous.Buffer[method](-1e90) }) - t.throws(function () { dangerous.Buffer[method](-Infinity) }) - } - t.throws(function () { dangerous.Buffer[method](null) }) - t.throws(function () { dangerous.Buffer[method](undefined) }) - t.throws(function () { dangerous.Buffer[method]() }) - t.throws(function () { dangerous.Buffer[method]([]) }) - t.throws(function () { dangerous.Buffer[method]([0, 42, 3]) }) - t.throws(function () { dangerous.Buffer[method]({}) }) - }) - t.end() -}) - -test('Buffers have appropriate lengths', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.equal(impl.Buffer.alloc(0).length, 0) - t.equal(impl.Buffer.alloc(10).length, 10) - t.equal(impl.Buffer.from('').length, 0) - t.equal(impl.Buffer.from('string').length, 6) - t.equal(impl.Buffer.from('string', 'utf-8').length, 6) - t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').length, 11) - t.equal(impl.Buffer.from([0, 42, 3]).length, 3) - t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).length, 3) - t.equal(impl.Buffer.from([]).length, 0) - }); - ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { - t.equal(dangerous.Buffer[method](0).length, 0) - t.equal(dangerous.Buffer[method](10).length, 10) - }) - t.end() -}) - -test('Buffers have appropriate lengths (2)', function (t) { - t.equal(index.Buffer.alloc, safer.Buffer.alloc) - t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) - var ok = true; - [ safer.Buffer.alloc, - dangerous.Buffer.allocUnsafe, - dangerous.Buffer.allocUnsafeSlow - ].forEach(function (method) { - for (var i = 0; i < 1e2; i++) { - var length = Math.round(Math.random() * 1e5) - var buf = method(length) - if (!buffer.Buffer.isBuffer(buf)) ok = false - if (buf.length !== length) ok = false - } - }) - t.ok(ok) - t.end() -}) - -test('.alloc(size) is zero-filled and has correct length', function (t) { - t.equal(index.Buffer.alloc, safer.Buffer.alloc) - t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) - var ok = true - for (var i = 0; i < 1e2; i++) { - var length = Math.round(Math.random() * 2e6) - var buf = index.Buffer.alloc(length) - if (!buffer.Buffer.isBuffer(buf)) ok = false - if (buf.length !== length) ok = false - var j - for (j = 0; j < length; j++) { - if (buf[j] !== 0) ok = false - } - buf.fill(1) - for (j = 0; j < length; j++) { - if (buf[j] !== 1) ok = false - } - } - t.ok(ok) - t.end() -}) - -test('.allocUnsafe / .allocUnsafeSlow are fillable and have correct lengths', function (t) { - ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { - var ok = true - for (var i = 0; i < 1e2; i++) { - var length = Math.round(Math.random() * 2e6) - var buf = dangerous.Buffer[method](length) - if (!buffer.Buffer.isBuffer(buf)) ok = false - if (buf.length !== length) ok = false - buf.fill(0, 0, length) - var j - for (j = 0; j < length; j++) { - if (buf[j] !== 0) ok = false - } - buf.fill(1, 0, length) - for (j = 0; j < length; j++) { - if (buf[j] !== 1) ok = false - } - } - t.ok(ok, method) - }) - t.end() -}) - -test('.alloc(size, fill) is `fill`-filled', function (t) { - t.equal(index.Buffer.alloc, safer.Buffer.alloc) - t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) - var ok = true - for (var i = 0; i < 1e2; i++) { - var length = Math.round(Math.random() * 2e6) - var fill = Math.round(Math.random() * 255) - var buf = index.Buffer.alloc(length, fill) - if (!buffer.Buffer.isBuffer(buf)) ok = false - if (buf.length !== length) ok = false - for (var j = 0; j < length; j++) { - if (buf[j] !== fill) ok = false - } - } - t.ok(ok) - t.end() -}) - -test('.alloc(size, fill) is `fill`-filled', function (t) { - t.equal(index.Buffer.alloc, safer.Buffer.alloc) - t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) - var ok = true - for (var i = 0; i < 1e2; i++) { - var length = Math.round(Math.random() * 2e6) - var fill = Math.round(Math.random() * 255) - var buf = index.Buffer.alloc(length, fill) - if (!buffer.Buffer.isBuffer(buf)) ok = false - if (buf.length !== length) ok = false - for (var j = 0; j < length; j++) { - if (buf[j] !== fill) ok = false - } - } - t.ok(ok) - t.deepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 97)) - t.notDeepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 98)) - - var tmp = new buffer.Buffer(2) - tmp.fill('ok') - if (tmp[1] === tmp[0]) { - // Outdated Node.js - t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('ooooo')) - } else { - t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('okoko')) - } - t.notDeepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('kokok')) - - t.end() -}) - -test('safer.Buffer.from returns results same as Buffer constructor', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.deepEqual(impl.Buffer.from(''), new buffer.Buffer('')) - t.deepEqual(impl.Buffer.from('string'), new buffer.Buffer('string')) - t.deepEqual(impl.Buffer.from('string', 'utf-8'), new buffer.Buffer('string', 'utf-8')) - t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), new buffer.Buffer('b25ldHdvdGhyZWU=', 'base64')) - t.deepEqual(impl.Buffer.from([0, 42, 3]), new buffer.Buffer([0, 42, 3])) - t.deepEqual(impl.Buffer.from(new Uint8Array([0, 42, 3])), new buffer.Buffer(new Uint8Array([0, 42, 3]))) - t.deepEqual(impl.Buffer.from([]), new buffer.Buffer([])) - }) - t.end() -}) - -test('safer.Buffer.from returns consistent results', function (t) { - [index, safer, dangerous].forEach(function (impl) { - t.deepEqual(impl.Buffer.from(''), impl.Buffer.alloc(0)) - t.deepEqual(impl.Buffer.from([]), impl.Buffer.alloc(0)) - t.deepEqual(impl.Buffer.from(new Uint8Array([])), impl.Buffer.alloc(0)) - t.deepEqual(impl.Buffer.from('string', 'utf-8'), impl.Buffer.from('string')) - t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from([115, 116, 114, 105, 110, 103])) - t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from(impl.Buffer.from('string'))) - t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), impl.Buffer.from('onetwothree')) - t.notDeepEqual(impl.Buffer.from('b25ldHdvdGhyZWU='), impl.Buffer.from('onetwothree')) - }) - t.end() -}) diff --git a/truebit-implementation/node_modules/scrypt-js/LICENSE.txt b/truebit-implementation/node_modules/scrypt-js/LICENSE.txt deleted file mode 100644 index a9c5e0ab..00000000 --- a/truebit-implementation/node_modules/scrypt-js/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Richard Moore - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/scrypt-js/README.md b/truebit-implementation/node_modules/scrypt-js/README.md deleted file mode 100644 index 8352f97e..00000000 --- a/truebit-implementation/node_modules/scrypt-js/README.md +++ /dev/null @@ -1,190 +0,0 @@ -scrypt -====== - -The [scrypt](https://en.wikipedia.org/wiki/Scrypt) password-base key derivation function (pkbdf) is an algorithm designed to be brute-force resistant that converts human readable passwords into fixed length arrays of bytes, which can then be used as a key for symetric block ciphers, private keys, et cetera. - -### Features: -- **Non-blocking** - Gives other events in the event loop opportunities to run (asynchrorous) -- **Cancellable** - If the key is not longer required, the computation can be cancelled -- **Progress Callback** - Provides the current progress of key derivation as a percentage complete - - -Tuning ------- - -The scrypt algorithm is, by design, expensive to execute, which increases the amount of time an attacker requires in order to brute force guess a password, adjustable by several parameters which can be tuned: -- **N** - The general work factor; increasing this increases the difficulty of the overall derivation -- **p** - The memory cost; increasing this increases the memory required during derivation -- **r** - The parallelization factor; increasing the computation required during derivation - - - -Installing ----------- - -**node.js** - -You should likely not use this module for *node.js* as there are many faster [alternatives](https://www.npmjs.com/package/scrypt), but if you so wish to do so: - -``` -npm install scrypt-js -``` - - -**browser** - -```html - -``` - -API ---- - -```html - - - - - - - - - - - - - -``` - -Encoding Notes --------------- - -``` -TL;DR - either only allow ASCII characters in passwords, or use - String.prototype.normalize('NFKC') on any password -``` - -It is *HIGHLY* recommended that you do **NOT** pass strings into this (or any password-base key derivation function) library without careful consideration; you should convert your strings to a canonical format that you will use consistently across all platforms. - -When encoding passowrds with UTF-8, it is important to realize that there may be multiple UTF-8 representations of a given string. Since the key generated by a password-base key derivation function is *dependant on the specific bytes*, this matters a great deal. - -**Composed vs. Decomposed** - -Certain UTF-8 code points can be combined with other characters to create composed characters. For example, the letter *a with the umlaut diacritic mark* (two dots over it) can be expressed two ways; as its composed form, U+00FC; or its decomposed form, which is the letter "u" followed by U+0308 (which basically means modify the previous character by adding an umlaut to it). - -```javascript -// In the following two cases, a "u" with an umlaut would be seen -> '\u00fc' -> 'u\u0308' - - -// In its composed form, it is 2 bytes long -> new Buffer('u\u0308'.normalize('NFKC')) - -> new Buffer('\u00fc') - - -// Whereas the decomposed form is 3 bytes, the letter u followed by U+0308 -> new Buffer('\u00fc'.normalize('NFKD')) - -> new Buffer('u\u0308') - -``` - - -**Compatibility equivalence mode** - -Certain strings are often displayed the same, even though they may have different semantic means. For example, UTF-8 provides a code point for the roman number for one, which appears as the letter I, in most fonts identically. Compatibility equivalence will fold these two cases into simply the capital letter I. - -``` -> '\u2160' -'I' -> 'I' -'I' -> '\u2160' === 'I' -false -> '\u2160'.normalize('NFKC') === 'I' -true -``` - - -**Normalizing** - -The `normalize()` method of a string can be used to convert a string to a specific form. Without going into too much detail, I generally recommend `NFKC`, however if you wish to dive deeper into this, a nice short summary can be found in Pythons [unicodedata module](https://docs.python.org/2/library/unicodedata.html#unicodedata.normalize)'s documentation. - -For browsers without `normalize()` support, the [npm unorm module](https://www.npmjs.com/package/unorm) can be used to polyfill strings. - - -**Another example of encoding woes** - -One quick story I will share is a project which used the `SHA256(encodeURI(password))` as a key, which (ignorig [raindbow table attacks](https://en.wikipedia.org/wiki/Rainbow_table)) had an unfortunate consequence of old web browsers replacing spaces with `+` while on new web browsers, replacing it with a `%20`, causing issues for anyone who used spaces in their password. - - -### Suggestions - -- While it may be inconvenient to many international users, one option is to restrict passwords to a safe subset of ASCII, for example: `/^[A-Za-z0-9!@#$%^&*()]+$/`. -- My personal recommendation is to normalize to the NFKC form, however, one could imagine setting their password to a Chinese phrase on one computer, and then one day using a computer that does not have Chinese input capabilites and therefore be unable to log in. - -**See:** [Unicode Equivalence](https://en.wikipedia.org/wiki/Unicode_equivalence) - - -Tests ------ - -The test cases from the [scrypt whitepaper](http://www.tarsnap.com/scrypt/scrypt.pdf) are included in `test/test-vectors.json` and can be run using: - -```javascript -npm test -``` - -Special Thanks --------------- - -I would like to thank @dchest for his [scrypt-async](https://github.com/dchest/scrypt-async-js) library and for his assistance providing feedback and optimization suggestions. - - -License -------- - -MIT license. - - -References ----------- - -- [scrypt white paper](http://www.tarsnap.com/scrypt/scrypt.pdf) -- [wikipedia](https://en.wikipedia.org/wiki/Scrypt) -- [scrypt-async npm module](https://www.npmjs.com/package/scrypt-async) -- [scryptsy npm module](https://www.npmjs.com/package/scryptsy) -- [Unicode Equivalence](https://en.wikipedia.org/wiki/Unicode_equivalence) - - -Donations ---------- - -Obviously, it's all licensed under the MIT license, so use it as you wish; but if you'd like to buy me a coffee, I won't complain. =) - -- Bitcoin - `1LsxZkCZpQXyiGsoAnAW9nRRfck3Nvv7QS` -- Dogecoin - `DF1VMTgyPsew619hwq5tT2RP8BNh2ZpzWA` -- Testnet3 - `muf7Vak4ZCVgtYZCnGStDXuoEdmZuo2nhA` diff --git a/truebit-implementation/node_modules/scrypt-js/index.html b/truebit-implementation/node_modules/scrypt-js/index.html deleted file mode 100644 index 1e5609ac..00000000 --- a/truebit-implementation/node_modules/scrypt-js/index.html +++ /dev/null @@ -1,286 +0,0 @@ - - - scrypt-js - - - -
-
-

scrypt-js

-
- - - - - - -
-
-
-
Nlog2 [1, 63]
- -
-
-
r
- -
-
-
p
- -
-
-
dkLen
- -
-
-
- -
0%
-
-
-
-
- - - - - - - - - diff --git a/truebit-implementation/node_modules/scrypt-js/package.json b/truebit-implementation/node_modules/scrypt-js/package.json deleted file mode 100644 index 9969c552..00000000 --- a/truebit-implementation/node_modules/scrypt-js/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "_from": "scrypt-js@2.0.3", - "_id": "scrypt-js@2.0.3", - "_inBundle": false, - "_integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=", - "_location": "/scrypt-js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "scrypt-js@2.0.3", - "name": "scrypt-js", - "escapedName": "scrypt-js", - "rawSpec": "2.0.3", - "saveSpec": null, - "fetchSpec": "2.0.3" - }, - "_requiredBy": [ - "/ethers" - ], - "_resolved": "http://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "_shasum": "bb0040be03043da9a012a2cea9fc9f852cfc87d4", - "_spec": "scrypt-js@2.0.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ethers", - "author": { - "name": "Richard Moore", - "email": "me@ricmoo.com" - }, - "bugs": { - "url": "https://github.com/ricmoo/scrypt-js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "The scrypt password-based key derivation function with asynchronous operation and ablility to be cancelled.", - "devDependencies": { - "nodeunit": "0.9.1" - }, - "homepage": "https://github.com/ricmoo/scrypt-js#readme", - "keywords": [ - "scrypt", - "pbkdf", - "password", - "async", - "asynchronous", - "stepwise" - ], - "license": "MIT", - "main": "scrypt.js", - "name": "scrypt-js", - "repository": { - "type": "git", - "url": "git://github.com/ricmoo/scrypt-js.git" - }, - "scripts": { - "test": "node test/test-scrypt.js" - }, - "version": "2.0.3" -} diff --git a/truebit-implementation/node_modules/scrypt-js/scrypt.js b/truebit-implementation/node_modules/scrypt-js/scrypt.js deleted file mode 100644 index 4ab31c8b..00000000 --- a/truebit-implementation/node_modules/scrypt-js/scrypt.js +++ /dev/null @@ -1,452 +0,0 @@ -"use strict"; - -(function(root) { - var MAX_VALUE = 0x7fffffff; - - // The SHA256 and PBKDF2 implementation are from scrypt-async-js: - // See: https://github.com/dchest/scrypt-async-js - function SHA256(m) { - var K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, - 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, - 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, - 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, - 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, - 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, - 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, - 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, - 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, - 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - ]; - - var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a; - var h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; - var w = new Array(64); - - function blocks(p) { - var off = 0, len = p.length; - while (len >= 64) { - var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2; - - for (i = 0; i < 16; i++) { - j = off + i*4; - w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) | - ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff); - } - - for (i = 16; i < 64; i++) { - u = w[i-2]; - t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10); - - u = w[i-15]; - t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3); - - w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0; - } - - for (i = 0; i < 64; i++) { - t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^ - ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) + - ((h + ((K[i] + w[i]) | 0)) | 0)) | 0; - - t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^ - ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - h0 = (h0 + a) | 0; - h1 = (h1 + b) | 0; - h2 = (h2 + c) | 0; - h3 = (h3 + d) | 0; - h4 = (h4 + e) | 0; - h5 = (h5 + f) | 0; - h6 = (h6 + g) | 0; - h7 = (h7 + h) | 0; - - off += 64; - len -= 64; - } - } - - blocks(m); - - var i, bytesLeft = m.length % 64, - bitLenHi = (m.length / 0x20000000) | 0, - bitLenLo = m.length << 3, - numZeros = (bytesLeft < 56) ? 56 : 120, - p = m.slice(m.length - bytesLeft, m.length); - - p.push(0x80); - for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); } - p.push((bitLenHi>>>24) & 0xff); - p.push((bitLenHi>>>16) & 0xff); - p.push((bitLenHi>>>8) & 0xff); - p.push((bitLenHi>>>0) & 0xff); - p.push((bitLenLo>>>24) & 0xff); - p.push((bitLenLo>>>16) & 0xff); - p.push((bitLenLo>>>8) & 0xff); - p.push((bitLenLo>>>0) & 0xff); - - blocks(p); - - return [ - (h0>>>24) & 0xff, (h0>>>16) & 0xff, (h0>>>8) & 0xff, (h0>>>0) & 0xff, - (h1>>>24) & 0xff, (h1>>>16) & 0xff, (h1>>>8) & 0xff, (h1>>>0) & 0xff, - (h2>>>24) & 0xff, (h2>>>16) & 0xff, (h2>>>8) & 0xff, (h2>>>0) & 0xff, - (h3>>>24) & 0xff, (h3>>>16) & 0xff, (h3>>>8) & 0xff, (h3>>>0) & 0xff, - (h4>>>24) & 0xff, (h4>>>16) & 0xff, (h4>>>8) & 0xff, (h4>>>0) & 0xff, - (h5>>>24) & 0xff, (h5>>>16) & 0xff, (h5>>>8) & 0xff, (h5>>>0) & 0xff, - (h6>>>24) & 0xff, (h6>>>16) & 0xff, (h6>>>8) & 0xff, (h6>>>0) & 0xff, - (h7>>>24) & 0xff, (h7>>>16) & 0xff, (h7>>>8) & 0xff, (h7>>>0) & 0xff - ]; - } - - function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) { - // compress password if it's longer than hash block length - password = password.length <= 64 ? password : SHA256(password); - - var i; - var innerLen = 64 + salt.length + 4; - var inner = new Array(innerLen); - var outerKey = new Array(64); - var dk = []; - - // inner = (password ^ ipad) || salt || counter - for (i = 0; i < 64; i++) inner[i] = 0x36; - for (i = 0; i < password.length; i++) inner[i] ^= password[i]; - for (i = 0; i < salt.length; i++) inner[64+i] = salt[i]; - for (i = innerLen - 4; i < innerLen; i++) inner[i] = 0; - - // outerKey = password ^ opad - for (i = 0; i < 64; i++) outerKey[i] = 0x5c; - for (i = 0; i < password.length; i++) outerKey[i] ^= password[i]; - - // increments counter inside inner - function incrementCounter() { - for (var i = innerLen-1; i >= innerLen-4; i--) { - inner[i]++; - if (inner[i] <= 0xff) return; - inner[i] = 0; - } - } - - // output blocks = SHA256(outerKey || SHA256(inner)) ... - while (dkLen >= 32) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner)))); - dkLen -= 32; - } - if (dkLen > 0) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen)); - } - - return dk; - } - - // The following is an adaptation of scryptsy - // See: https://www.npmjs.com/package/scryptsy - function blockmix_salsa8(BY, Yi, r, x, _X) { - var i; - - arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16); - for (i = 0; i < 2 * r; i++) { - blockxor(BY, i * 16, _X, 16); - salsa20_8(_X, x); - arraycopy(_X, 0, BY, Yi + (i * 16), 16); - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16); - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16); - } - } - - function R(a, b) { - return (a << b) | (a >>> (32 - b)); - } - - function salsa20_8(B, x) { - arraycopy(B, 0, x, 0, 16); - - for (var i = 8; i > 0; i -= 2) { - x[ 4] ^= R(x[ 0] + x[12], 7); - x[ 8] ^= R(x[ 4] + x[ 0], 9); - x[12] ^= R(x[ 8] + x[ 4], 13); - x[ 0] ^= R(x[12] + x[ 8], 18); - x[ 9] ^= R(x[ 5] + x[ 1], 7); - x[13] ^= R(x[ 9] + x[ 5], 9); - x[ 1] ^= R(x[13] + x[ 9], 13); - x[ 5] ^= R(x[ 1] + x[13], 18); - x[14] ^= R(x[10] + x[ 6], 7); - x[ 2] ^= R(x[14] + x[10], 9); - x[ 6] ^= R(x[ 2] + x[14], 13); - x[10] ^= R(x[ 6] + x[ 2], 18); - x[ 3] ^= R(x[15] + x[11], 7); - x[ 7] ^= R(x[ 3] + x[15], 9); - x[11] ^= R(x[ 7] + x[ 3], 13); - x[15] ^= R(x[11] + x[ 7], 18); - x[ 1] ^= R(x[ 0] + x[ 3], 7); - x[ 2] ^= R(x[ 1] + x[ 0], 9); - x[ 3] ^= R(x[ 2] + x[ 1], 13); - x[ 0] ^= R(x[ 3] + x[ 2], 18); - x[ 6] ^= R(x[ 5] + x[ 4], 7); - x[ 7] ^= R(x[ 6] + x[ 5], 9); - x[ 4] ^= R(x[ 7] + x[ 6], 13); - x[ 5] ^= R(x[ 4] + x[ 7], 18); - x[11] ^= R(x[10] + x[ 9], 7); - x[ 8] ^= R(x[11] + x[10], 9); - x[ 9] ^= R(x[ 8] + x[11], 13); - x[10] ^= R(x[ 9] + x[ 8], 18); - x[12] ^= R(x[15] + x[14], 7); - x[13] ^= R(x[12] + x[15], 9); - x[14] ^= R(x[13] + x[12], 13); - x[15] ^= R(x[14] + x[13], 18); - } - - for (i = 0; i < 16; ++i) { - B[i] += x[i]; - } - } - - // naive approach... going back to loop unrolling may yield additional performance - function blockxor(S, Si, D, len) { - for (var i = 0; i < len; i++) { - D[i] ^= S[Si + i] - } - } - - function arraycopy(src, srcPos, dest, destPos, length) { - while (length--) { - dest[destPos++] = src[srcPos++]; - } - } - - function checkBufferish(o) { - if (!o || typeof(o.length) !== 'number') { - return false; - } - for (var i = 0; i < o.length; i++) { - if (typeof(o[i]) !== 'number') { return false; } - - var v = parseInt(o[i]); - if (v != o[i] || v < 0 || v >= 256) { - return false; - } - } - return true; - } - - function ensureInteger(value, name) { - var intValue = parseInt(value); - if (value != intValue) { throw new Error('invalid ' + name); } - return intValue; - } - - // N = Cpu cost, r = Memory cost, p = parallelization cost - // callback(error, progress, key) - function scrypt(password, salt, N, r, p, dkLen, callback) { - - if (!callback) { throw new Error('missing callback'); } - - N = ensureInteger(N, 'N'); - r = ensureInteger(r, 'r'); - p = ensureInteger(p, 'p'); - - dkLen = ensureInteger(dkLen, 'dkLen'); - - if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); } - - if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); } - if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); } - - if (!checkBufferish(password)) { - throw new Error('password must be an array or buffer'); - } - - if (!checkBufferish(salt)) { - throw new Error('salt must be an array or buffer'); - } - - var b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r); - var B = new Uint32Array(p * 32 * r) - for (var i = 0; i < B.length; i++) { - var j = i * 4; - B[i] = ((b[j + 3] & 0xff) << 24) | - ((b[j + 2] & 0xff) << 16) | - ((b[j + 1] & 0xff) << 8) | - ((b[j + 0] & 0xff) << 0); - } - - var XY = new Uint32Array(64 * r); - var V = new Uint32Array(32 * r * N); - - var Yi = 32 * r; - - // scratch space - var x = new Uint32Array(16); // salsa20_8 - var _X = new Uint32Array(16); // blockmix_salsa8 - - var totalOps = p * N * 2; - var currentOp = 0; - var lastPercent10 = null; - - // Set this to true to abandon the scrypt on the next step - var stop = false; - - // State information - var state = 0; - var i0 = 0, i1; - var Bi; - - // How many blockmix_salsa8 can we do per step? - var limit = parseInt(1000 / r); - - // Trick from scrypt-async; if there is a setImmediate shim in place, use it - var nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout; - - // This is really all I changed; making scryptsy a state machine so we occasionally - // stop and give other evnts on the evnt loop a chance to run. ~RicMoo - var incrementalSMix = function() { - if (stop) { - return callback(new Error('cancelled'), currentOp / totalOps); - } - - switch (state) { - case 0: - // for (var i = 0; i < p; i++)... - Bi = i0 * 32 * r; - - arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1 - - state = 1; // Move to ROMix 2 - i1 = 0; - - // Fall through - - case 1: - - // Run up to 1000 steps of the first inner smix loop - var steps = N - i1; - if (steps > limit) { steps = limit; } - for (var i = 0; i < steps; i++) { // ROMix - 2 - arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3 - blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4 - } - - // for (var i = 0; i < N; i++) - i1 += steps; - currentOp += steps; - - // Call the callback with the progress (optionally stopping us) - var percent10 = parseInt(1000 * currentOp / totalOps); - if (percent10 !== lastPercent10) { - stop = callback(null, currentOp / totalOps); - if (stop) { break; } - lastPercent10 = percent10; - } - - if (i1 < N) { - break; - } - - i1 = 0; // Move to ROMix 6 - state = 2; - - // Fall through - - case 2: - - // Run up to 1000 steps of the second inner smix loop - var steps = N - i1; - if (steps > limit) { steps = limit; } - for (var i = 0; i < steps; i++) { // ROMix - 6 - var offset = (2 * r - 1) * 16; // ROMix - 7 - var j = XY[offset] & (N - 1); - blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner) - blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer) - } - - // for (var i = 0; i < N; i++)... - i1 += steps; - currentOp += steps; - - // Call the callback with the progress (optionally stopping us) - var percent10 = parseInt(1000 * currentOp / totalOps); - if (percent10 !== lastPercent10) { - stop = callback(null, currentOp / totalOps); - if (stop) { break; } - lastPercent10 = percent10; - } - - if (i1 < N) { - break; - } - - arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10 - - // for (var i = 0; i < p; i++)... - i0++; - if (i0 < p) { - state = 0; - break; - } - - b = []; - for (var i = 0; i < B.length; i++) { - b.push((B[i] >> 0) & 0xff); - b.push((B[i] >> 8) & 0xff); - b.push((B[i] >> 16) & 0xff); - b.push((B[i] >> 24) & 0xff); - } - - var derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen); - - // Done; don't break (which would reschedule) - return callback(null, 1.0, derivedKey); - } - - // Schedule the next steps - nextTick(incrementalSMix); - } - - // Bootstrap the incremental smix - incrementalSMix(); - } - - // node.js - if (typeof(exports) !== 'undefined') { - module.exports = scrypt; - - // RequireJS/AMD - // http://www.requirejs.org/docs/api.html - // https://github.com/amdjs/amdjs-api/wiki/AMD - } else if (typeof(define) === 'function' && define.amd) { - define(scrypt); - - // Web Browsers - } else if (root) { - - // If there was an existing library "scrypt", make sure it is still available - if (root.scrypt) { - root._scrypt = root.scrypt; - } - - root.scrypt = scrypt; - } - -})(this); diff --git a/truebit-implementation/node_modules/scrypt-js/test/test-scrypt.js b/truebit-implementation/node_modules/scrypt-js/test/test-scrypt.js deleted file mode 100644 index 4ec694d9..00000000 --- a/truebit-implementation/node_modules/scrypt-js/test/test-scrypt.js +++ /dev/null @@ -1,39 +0,0 @@ -var nodeunit = require('nodeunit'); - -var scrypt = require('../scrypt.js'); - -var testVectors = require('./test-vectors.json'); - -function makeTest(options) { - var password = new Buffer(options.password, 'hex'); - var salt = new Buffer(options.salt, 'hex'); - var N = options.N; - var p = options.p; - var r = options.r; - var dkLen = options.dkLen; - - var derivedKeyHex = options.derivedKey; - - return function (test) { - scrypt(password, salt, N, r, p, dkLen, function(error, progress, key) { - if (error) { - console.log(error); - - } else if (key) { - key = new Buffer(key); - test.equal(derivedKeyHex, key.toString('hex'), 'failed to generate correct derived key'); - test.done(); - } else { - } - }); - } -} - -var Tests = {scrypt: {}}; -for (var i = 0; i < testVectors.length; i++) { - var test = testVectors[i]; - Tests.scrypt['test-' + Object.keys(Tests.scrypt).length] = makeTest(test); -} - - -nodeunit.reporters.default.run(Tests); diff --git a/truebit-implementation/node_modules/scrypt-js/test/test-vectors.json b/truebit-implementation/node_modules/scrypt-js/test/test-vectors.json deleted file mode 100644 index 15da7eb3..00000000 --- a/truebit-implementation/node_modules/scrypt-js/test/test-vectors.json +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "password": "", - "salt": "", - "N": 16, - "p": 1, - "r": 1, - "dkLen": 64, - "derivedKey": "77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906" - }, - { - "password": "70617373776f7264", - "salt": "4e61436c", - "N": 1024, - "p": 16, - "r": 8, - "dkLen": 64, - "derivedKey": "fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640" - }, - { - "password": "706c656173656c65746d65696e", - "salt": "536f6469756d43686c6f72696465", - "N": 16384, - "p": 1, - "r": 8, - "dkLen": 64, - "derivedKey": "7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887" - }, - { - "password": "706c656173656c65746d65696e", - "salt": "536f6469756d43686c6f72696465", - "N": 1048576, - "p": 1, - "r": 8, - "dkLen": 64, - "derivedKey": "2101cb9b6a511aaeaddbbe09cf70f881ec568d574a2ffd4dabe5ee9820adaa478e56fd8f4ba5d09ffa1c6d927c40f4c337304049e8a952fbcbf45c6fa77a41a4" - }, - - { - "password": "70617373776f7264", - "salt": "7269636d6f6f", - "N": "262144", - "p": "1", - "r": "8", - "dkLen": "32", - "derivedKey": "e286ed0298808c0b4bb4272ce947091b0da06bb530c4cbab3923e44ff48bbc25" - } - -] diff --git a/truebit-implementation/node_modules/scrypt-js/thirdparty/buffer.js b/truebit-implementation/node_modules/scrypt-js/thirdparty/buffer.js deleted file mode 100644 index 6aa51e4f..00000000 --- a/truebit-implementation/node_modules/scrypt-js/thirdparty/buffer.js +++ /dev/null @@ -1,1381 +0,0 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.buffer=e()}}(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 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 - - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length - - var L = 0 - - function push (v) { - arr[L++] = v - } - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } - - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } - - return arr - } - - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length - - function encode (num) { - return lookup.charAt(num) - } - - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } - - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } - - return output - } - - exports.toByteArray = b64ToByteArray - exports.fromByteArray = uint8ToBase64 -}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) - -},{}],2:[function(require,module,exports){ -exports.read = function(buffer, offset, isLE, mLen, nBytes) { - var e, m, - eLen = nBytes * 8 - mLen - 1, - eMax = (1 << eLen) - 1, - eBias = eMax >> 1, - nBits = -7, - i = isLE ? (nBytes - 1) : 0, - d = isLE ? -1 : 1, - s = buffer[offset + i]; - - i += d; - - e = s & ((1 << (-nBits)) - 1); - s >>= (-nBits); - nBits += eLen; - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); - - m = e & ((1 << (-nBits)) - 1); - e >>= (-nBits); - nBits += mLen; - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); - - if (e === 0) { - e = 1 - eBias; - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity); - } else { - m = m + Math.pow(2, mLen); - e = e - eBias; - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen); -}; - -exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c, - eLen = nBytes * 8 - mLen - 1, - eMax = (1 << eLen) - 1, - eBias = eMax >> 1, - rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), - i = isLE ? 0 : (nBytes - 1), - d = isLE ? 1 : -1, - s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; - - value = Math.abs(value); - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0; - e = eMax; - } else { - e = Math.floor(Math.log(value) / Math.LN2); - if (value * (c = Math.pow(2, -e)) < 1) { - e--; - c *= 2; - } - if (e + eBias >= 1) { - value += rt / c; - } else { - value += rt * Math.pow(2, 1 - eBias); - } - if (value * c >= 2) { - e++; - c /= 2; - } - - if (e + eBias >= eMax) { - m = 0; - e = eMax; - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen); - e = e + eBias; - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); - e = 0; - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); - - e = (e << mLen) | m; - eLen += mLen; - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); - - buffer[offset + i - d] |= s * 128; -}; - -},{}],"buffer":[function(require,module,exports){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = Buffer -exports.INSPECT_MAX_BYTES = 50 -Buffer.poolSize = 8192 - -/** - * If `TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Note: - * - * - Implementation must support adding new properties to `Uint8Array` instances. - * Firefox 4-29 lacked support, fixed in Firefox 30+. - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. - * - * We detect these buggy browsers and set `TYPED_ARRAY_SUPPORT` to `false` so they will - * get the Object implementation, which is slower but will work correctly. - */ -var TYPED_ARRAY_SUPPORT = (function () { - try { - var buf = new ArrayBuffer(0) - var arr = new Uint8Array(buf) - arr.foo = function () { return 42 } - return 42 === arr.foo() && // typed array instances can be augmented - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -})() - -/** - * Class: Buffer - * ============= - * - * The Buffer constructor returns instances of `Uint8Array` that are augmented - * with function properties for all the node `Buffer` API functions. We use - * `Uint8Array` so that square bracket notation works as expected -- it returns - * a single octet. - * - * By augmenting the instances, we can avoid modifying the `Uint8Array` - * prototype. - */ -function Buffer (subject, encoding, noZero) { - if (!(this instanceof Buffer)) - return new Buffer(subject, encoding, noZero) - - var type = typeof subject - - // Find the length - var length - if (type === 'number') - length = subject > 0 ? subject >>> 0 : 0 - else if (type === 'string') { - if (encoding === 'base64') - subject = base64clean(subject) - length = Buffer.byteLength(subject, encoding) - } else if (type === 'object' && subject !== null) { // assume object is array-like - if (subject.type === 'Buffer' && isArray(subject.data)) - subject = subject.data - length = +subject.length > 0 ? Math.floor(+subject.length) : 0 - } else - throw new Error('First argument needs to be a number, array or string.') - - var buf - if (TYPED_ARRAY_SUPPORT) { - // Preferred: Return an augmented `Uint8Array` instance for best performance - buf = Buffer._augment(new Uint8Array(length)) - } else { - // Fallback: Return THIS instance of Buffer (created by `new`) - buf = this - buf.length = length - buf._isBuffer = true - } - - var i - if (TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') { - // Speed optimization -- use set if we're copying from a typed array - buf._set(subject) - } else if (isArrayish(subject)) { - // Treat array-ish objects as a byte array - if (Buffer.isBuffer(subject)) { - for (i = 0; i < length; i++) - buf[i] = subject.readUInt8(i) - } else { - for (i = 0; i < length; i++) - buf[i] = ((subject[i] % 256) + 256) % 256 - } - } else if (type === 'string') { - buf.write(subject, 0, encoding) - } else if (type === 'number' && !TYPED_ARRAY_SUPPORT && !noZero) { - for (i = 0; i < length; i++) { - buf[i] = 0 - } - } - - return buf -} - -// STATIC METHODS -// ============== - -Buffer.isEncoding = function (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'binary': - case 'base64': - case 'raw': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.isBuffer = function (b) { - return !!(b != null && b._isBuffer) -} - -Buffer.byteLength = function (str, encoding) { - var ret - str = str.toString() - switch (encoding || 'utf8') { - case 'hex': - ret = str.length / 2 - break - case 'utf8': - case 'utf-8': - ret = utf8ToBytes(str).length - break - case 'ascii': - case 'binary': - case 'raw': - ret = str.length - break - case 'base64': - ret = base64ToBytes(str).length - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = str.length * 2 - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.concat = function (list, totalLength) { - assert(isArray(list), 'Usage: Buffer.concat(list[, length])') - - if (list.length === 0) { - return new Buffer(0) - } else if (list.length === 1) { - return list[0] - } - - var i - if (totalLength === undefined) { - totalLength = 0 - for (i = 0; i < list.length; i++) { - totalLength += list[i].length - } - } - - var buf = new Buffer(totalLength) - var pos = 0 - for (i = 0; i < list.length; i++) { - var item = list[i] - item.copy(buf, pos) - pos += item.length - } - return buf -} - -Buffer.compare = function (a, b) { - assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers') - var x = a.length - var y = b.length - for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {} - if (i !== len) { - x = a[i] - y = b[i] - } - if (x < y) { - return -1 - } - if (y < x) { - return 1 - } - return 0 -} - -// BUFFER INSTANCE METHODS -// ======================= - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - assert(strLen % 2 === 0, 'Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; i++) { - var byte = parseInt(string.substr(i * 2, 2), 16) - assert(!isNaN(byte), 'Invalid hex string') - buf[offset + i] = byte - } - return i -} - -function utf8Write (buf, string, offset, length) { - var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length) - return charsWritten -} - -function asciiWrite (buf, string, offset, length) { - var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) - return charsWritten -} - -function binaryWrite (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) - return charsWritten -} - -function utf16leWrite (buf, string, offset, length) { - var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length) - return charsWritten -} - -Buffer.prototype.write = function (string, offset, length, encoding) { - // Support both (string, offset, length, encoding) - // and the legacy (string, encoding, offset, length) - if (isFinite(offset)) { - if (!isFinite(length)) { - encoding = length - length = undefined - } - } else { // legacy - var swap = encoding - encoding = offset - offset = length - length = swap - } - - offset = Number(offset) || 0 - var remaining = this.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - encoding = String(encoding || 'utf8').toLowerCase() - - var ret - switch (encoding) { - case 'hex': - ret = hexWrite(this, string, offset, length) - break - case 'utf8': - case 'utf-8': - ret = utf8Write(this, string, offset, length) - break - case 'ascii': - ret = asciiWrite(this, string, offset, length) - break - case 'binary': - ret = binaryWrite(this, string, offset, length) - break - case 'base64': - ret = base64Write(this, string, offset, length) - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = utf16leWrite(this, string, offset, length) - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.prototype.toString = function (encoding, start, end) { - var self = this - - encoding = String(encoding || 'utf8').toLowerCase() - start = Number(start) || 0 - end = (end === undefined) ? self.length : Number(end) - - // Fastpath empty strings - if (end === start) - return '' - - var ret - switch (encoding) { - case 'hex': - ret = hexSlice(self, start, end) - break - case 'utf8': - case 'utf-8': - ret = utf8Slice(self, start, end) - break - case 'ascii': - ret = asciiSlice(self, start, end) - break - case 'binary': - ret = binarySlice(self, start, end) - break - case 'base64': - ret = base64Slice(self, start, end) - break - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - ret = utf16leSlice(self, start, end) - break - default: - throw new Error('Unknown encoding') - } - return ret -} - -Buffer.prototype.toJSON = function () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -Buffer.prototype.equals = function (b) { - assert(Buffer.isBuffer(b), 'Argument must be a Buffer') - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.compare = function (b) { - assert(Buffer.isBuffer(b), 'Argument must be a Buffer') - return Buffer.compare(this, b) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function (target, target_start, start, end) { - var source = this - - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (!target_start) target_start = 0 - - // Copy 0 bytes; we're done - if (end === start) return - if (target.length === 0 || source.length === 0) return - - // Fatal error conditions - assert(end >= start, 'sourceEnd < sourceStart') - assert(target_start >= 0 && target_start < target.length, - 'targetStart out of bounds') - assert(start >= 0 && start < source.length, 'sourceStart out of bounds') - assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) - end = this.length - if (target.length - target_start < end - start) - end = target.length - target_start + start - - var len = end - start - - if (len < 100 || !TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < len; i++) { - target[i + target_start] = this[i + start] - } - } else { - target._set(this.subarray(start, start + len), target_start) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - var res = '' - var tmp = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - if (buf[i] <= 0x7F) { - res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) - tmp = '' - } else { - tmp += '%' + buf[i].toString(16) - } - } - - return res + decodeUtf8Char(tmp) -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function binarySlice (buf, start, end) { - return asciiSlice(buf, start, end) -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; i++) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} - -Buffer.prototype.slice = function (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len; - if (start < 0) - start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) - end = 0 - } else if (end > len) { - end = len - } - - if (end < start) - end = start - - if (TYPED_ARRAY_SUPPORT) { - return Buffer._augment(this.subarray(start, end)) - } else { - var sliceLen = end - start - var newBuf = new Buffer(sliceLen, undefined, true) - for (var i = 0; i < sliceLen; i++) { - newBuf[i] = this[i + start] - } - return newBuf - } -} - -// `get` will be removed in Node 0.13+ -Buffer.prototype.get = function (offset) { - console.log('.get() is deprecated. Access using array indexes instead.') - return this.readUInt8(offset) -} - -// `set` will be removed in Node 0.13+ -Buffer.prototype.set = function (v, offset) { - console.log('.set() is deprecated. Access using array indexes instead.') - return this.writeUInt8(v, offset) -} - -Buffer.prototype.readUInt8 = function (offset, noAssert) { - if (!noAssert) { - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'Trying to read beyond buffer length') - } - - if (offset >= this.length) - return - - return this[offset] -} - -function readUInt16 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val - if (littleEndian) { - val = buf[offset] - if (offset + 1 < len) - val |= buf[offset + 1] << 8 - } else { - val = buf[offset] << 8 - if (offset + 1 < len) - val |= buf[offset + 1] - } - return val -} - -Buffer.prototype.readUInt16LE = function (offset, noAssert) { - return readUInt16(this, offset, true, noAssert) -} - -Buffer.prototype.readUInt16BE = function (offset, noAssert) { - return readUInt16(this, offset, false, noAssert) -} - -function readUInt32 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val - if (littleEndian) { - if (offset + 2 < len) - val = buf[offset + 2] << 16 - if (offset + 1 < len) - val |= buf[offset + 1] << 8 - val |= buf[offset] - if (offset + 3 < len) - val = val + (buf[offset + 3] << 24 >>> 0) - } else { - if (offset + 1 < len) - val = buf[offset + 1] << 16 - if (offset + 2 < len) - val |= buf[offset + 2] << 8 - if (offset + 3 < len) - val |= buf[offset + 3] - val = val + (buf[offset] << 24 >>> 0) - } - return val -} - -Buffer.prototype.readUInt32LE = function (offset, noAssert) { - return readUInt32(this, offset, true, noAssert) -} - -Buffer.prototype.readUInt32BE = function (offset, noAssert) { - return readUInt32(this, offset, false, noAssert) -} - -Buffer.prototype.readInt8 = function (offset, noAssert) { - if (!noAssert) { - assert(offset !== undefined && offset !== null, - 'missing offset') - assert(offset < this.length, 'Trying to read beyond buffer length') - } - - if (offset >= this.length) - return - - var neg = this[offset] & 0x80 - if (neg) - return (0xff - this[offset] + 1) * -1 - else - return this[offset] -} - -function readInt16 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val = readUInt16(buf, offset, littleEndian, true) - var neg = val & 0x8000 - if (neg) - return (0xffff - val + 1) * -1 - else - return val -} - -Buffer.prototype.readInt16LE = function (offset, noAssert) { - return readInt16(this, offset, true, noAssert) -} - -Buffer.prototype.readInt16BE = function (offset, noAssert) { - return readInt16(this, offset, false, noAssert) -} - -function readInt32 (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - var len = buf.length - if (offset >= len) - return - - var val = readUInt32(buf, offset, littleEndian, true) - var neg = val & 0x80000000 - if (neg) - return (0xffffffff - val + 1) * -1 - else - return val -} - -Buffer.prototype.readInt32LE = function (offset, noAssert) { - return readInt32(this, offset, true, noAssert) -} - -Buffer.prototype.readInt32BE = function (offset, noAssert) { - return readInt32(this, offset, false, noAssert) -} - -function readFloat (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset + 3 < buf.length, 'Trying to read beyond buffer length') - } - - return ieee754.read(buf, offset, littleEndian, 23, 4) -} - -Buffer.prototype.readFloatLE = function (offset, noAssert) { - return readFloat(this, offset, true, noAssert) -} - -Buffer.prototype.readFloatBE = function (offset, noAssert) { - return readFloat(this, offset, false, noAssert) -} - -function readDouble (buf, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset + 7 < buf.length, 'Trying to read beyond buffer length') - } - - return ieee754.read(buf, offset, littleEndian, 52, 8) -} - -Buffer.prototype.readDoubleLE = function (offset, noAssert) { - return readDouble(this, offset, true, noAssert) -} - -Buffer.prototype.readDoubleBE = function (offset, noAssert) { - return readDouble(this, offset, false, noAssert) -} - -Buffer.prototype.writeUInt8 = function (value, offset, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'trying to write beyond buffer length') - verifuint(value, 0xff) - } - - if (offset >= this.length) return - - this[offset] = value - return offset + 1 -} - -function writeUInt16 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'trying to write beyond buffer length') - verifuint(value, 0xffff) - } - - var len = buf.length - if (offset >= len) - return - - for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) { - buf[offset + i] = - (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } - return offset + 2 -} - -Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) { - return writeUInt16(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) { - return writeUInt16(this, value, offset, false, noAssert) -} - -function writeUInt32 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'trying to write beyond buffer length') - verifuint(value, 0xffffffff) - } - - var len = buf.length - if (offset >= len) - return - - for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) { - buf[offset + i] = - (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } - return offset + 4 -} - -Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) { - return writeUInt32(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) { - return writeUInt32(this, value, offset, false, noAssert) -} - -Buffer.prototype.writeInt8 = function (value, offset, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset < this.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7f, -0x80) - } - - if (offset >= this.length) - return - - if (value >= 0) - this.writeUInt8(value, offset, noAssert) - else - this.writeUInt8(0xff + value + 1, offset, noAssert) - return offset + 1 -} - -function writeInt16 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 1 < buf.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7fff, -0x8000) - } - - var len = buf.length - if (offset >= len) - return - - if (value >= 0) - writeUInt16(buf, value, offset, littleEndian, noAssert) - else - writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert) - return offset + 2 -} - -Buffer.prototype.writeInt16LE = function (value, offset, noAssert) { - return writeInt16(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeInt16BE = function (value, offset, noAssert) { - return writeInt16(this, value, offset, false, noAssert) -} - -function writeInt32 (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') - verifsint(value, 0x7fffffff, -0x80000000) - } - - var len = buf.length - if (offset >= len) - return - - if (value >= 0) - writeUInt32(buf, value, offset, littleEndian, noAssert) - else - writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert) - return offset + 4 -} - -Buffer.prototype.writeInt32LE = function (value, offset, noAssert) { - return writeInt32(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeInt32BE = function (value, offset, noAssert) { - return writeInt32(this, value, offset, false, noAssert) -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 3 < buf.length, 'Trying to write beyond buffer length') - verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - - var len = buf.length - if (offset >= len) - return - - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - assert(value !== undefined && value !== null, 'missing value') - assert(typeof littleEndian === 'boolean', 'missing or invalid endian') - assert(offset !== undefined && offset !== null, 'missing offset') - assert(offset + 7 < buf.length, - 'Trying to write beyond buffer length') - verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - - var len = buf.length - if (offset >= len) - return - - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// fill(value, start=0, end=buffer.length) -Buffer.prototype.fill = function (value, start, end) { - if (!value) value = 0 - if (!start) start = 0 - if (!end) end = this.length - - assert(end >= start, 'end < start') - - // Fill 0 bytes; we're done - if (end === start) return - if (this.length === 0) return - - assert(start >= 0 && start < this.length, 'start out of bounds') - assert(end >= 0 && end <= this.length, 'end out of bounds') - - var i - if (typeof value === 'number') { - for (i = start; i < end; i++) { - this[i] = value - } - } else { - var bytes = utf8ToBytes(value.toString()) - var len = bytes.length - for (i = start; i < end; i++) { - this[i] = bytes[i % len] - } - } - - return this -} - -Buffer.prototype.inspect = function () { - var out = [] - var len = this.length - for (var i = 0; i < len; i++) { - out[i] = toHex(this[i]) - if (i === exports.INSPECT_MAX_BYTES) { - out[i + 1] = '...' - break - } - } - return '' -} - -/** - * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. - * Added in Node 0.12. Only available in browsers that support ArrayBuffer. - */ -Buffer.prototype.toArrayBuffer = function () { - if (typeof Uint8Array !== 'undefined') { - if (TYPED_ARRAY_SUPPORT) { - return (new Buffer(this)).buffer - } else { - var buf = new Uint8Array(this.length) - for (var i = 0, len = buf.length; i < len; i += 1) { - buf[i] = this[i] - } - return buf.buffer - } - } else { - throw new Error('Buffer.toArrayBuffer not supported in this browser') - } -} - -// HELPER FUNCTIONS -// ================ - -var BP = Buffer.prototype - -/** - * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods - */ -Buffer._augment = function (arr) { - arr._isBuffer = true - - // save reference to original Uint8Array get/set methods before overwriting - arr._get = arr.get - arr._set = arr.set - - // deprecated, will be removed in node 0.13+ - arr.get = BP.get - arr.set = BP.set - - arr.write = BP.write - arr.toString = BP.toString - arr.toLocaleString = BP.toString - arr.toJSON = BP.toJSON - arr.equals = BP.equals - arr.compare = BP.compare - arr.copy = BP.copy - arr.slice = BP.slice - arr.readUInt8 = BP.readUInt8 - arr.readUInt16LE = BP.readUInt16LE - arr.readUInt16BE = BP.readUInt16BE - arr.readUInt32LE = BP.readUInt32LE - arr.readUInt32BE = BP.readUInt32BE - arr.readInt8 = BP.readInt8 - arr.readInt16LE = BP.readInt16LE - arr.readInt16BE = BP.readInt16BE - arr.readInt32LE = BP.readInt32LE - arr.readInt32BE = BP.readInt32BE - arr.readFloatLE = BP.readFloatLE - arr.readFloatBE = BP.readFloatBE - arr.readDoubleLE = BP.readDoubleLE - arr.readDoubleBE = BP.readDoubleBE - arr.writeUInt8 = BP.writeUInt8 - arr.writeUInt16LE = BP.writeUInt16LE - arr.writeUInt16BE = BP.writeUInt16BE - arr.writeUInt32LE = BP.writeUInt32LE - arr.writeUInt32BE = BP.writeUInt32BE - arr.writeInt8 = BP.writeInt8 - arr.writeInt16LE = BP.writeInt16LE - arr.writeInt16BE = BP.writeInt16BE - arr.writeInt32LE = BP.writeInt32LE - arr.writeInt32BE = BP.writeInt32BE - arr.writeFloatLE = BP.writeFloatLE - arr.writeFloatBE = BP.writeFloatBE - arr.writeDoubleLE = BP.writeDoubleLE - arr.writeDoubleBE = BP.writeDoubleBE - arr.fill = BP.fill - arr.inspect = BP.inspect - arr.toArrayBuffer = BP.toArrayBuffer - - return arr -} - -var INVALID_BASE64_RE = /[^+\/0-9A-z]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -function isArray (subject) { - return (Array.isArray || function (subject) { - return Object.prototype.toString.call(subject) === '[object Array]' - })(subject) -} - -function isArrayish (subject) { - return isArray(subject) || Buffer.isBuffer(subject) || - subject && typeof subject === 'object' && - typeof subject.length === 'number' -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - var b = str.charCodeAt(i) - if (b <= 0x7F) { - byteArray.push(b) - } else { - var start = i - if (b >= 0xD800 && b <= 0xDFFF) i++ - var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%') - for (var j = 0; j < h.length; j++) { - byteArray.push(parseInt(h[j], 16)) - } - } - } - return byteArray -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; i++) { - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(str) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; i++) { - if ((i + offset >= dst.length) || (i >= src.length)) - break - dst[i + offset] = src[i] - } - return i -} - -function decodeUtf8Char (str) { - try { - return decodeURIComponent(str) - } catch (err) { - return String.fromCharCode(0xFFFD) // UTF 8 invalid char - } -} - -/* - * We have to make sure that the value is a valid integer. This means that it - * is non-negative. It has no fractional component and that it does not - * exceed the maximum allowed value. - */ -function verifuint (value, max) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value >= 0, 'specified a negative value for writing an unsigned value') - assert(value <= max, 'value is larger than maximum value for type') - assert(Math.floor(value) === value, 'value has a fractional component') -} - -function verifsint (value, max, min) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value <= max, 'value larger than maximum allowed value') - assert(value >= min, 'value smaller than minimum allowed value') - assert(Math.floor(value) === value, 'value has a fractional component') -} - -function verifIEEE754 (value, max, min) { - assert(typeof value === 'number', 'cannot write a non-number as a number') - assert(value <= max, 'value larger than maximum allowed value') - assert(value >= min, 'value smaller than minimum allowed value') -} - -function assert (test, message) { - if (!test) throw new Error(message || 'Failed assertion') -} - -},{"base64-js":1,"ieee754":2}]},{},[])("buffer") -}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/scrypt-js/thirdparty/setImmediate.js b/truebit-implementation/node_modules/scrypt-js/thirdparty/setImmediate.js deleted file mode 100644 index 5abe55cc..00000000 --- a/truebit-implementation/node_modules/scrypt-js/thirdparty/setImmediate.js +++ /dev/null @@ -1,175 +0,0 @@ -(function (global, undefined) { - "use strict"; - - if (global.setImmediate) { - return; - } - - var nextHandle = 1; // Spec says greater than zero - var tasksByHandle = {}; - var currentlyRunningATask = false; - var doc = global.document; - var setImmediate; - - function addFromSetImmediateArguments(args) { - tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args); - return nextHandle++; - } - - // This function accepts the same arguments as setImmediate, but - // returns a function that requires no arguments. - function partiallyApplied(handler) { - var args = [].slice.call(arguments, 1); - return function() { - if (typeof handler === "function") { - handler.apply(undefined, args); - } else { - (new Function("" + handler))(); - } - }; - } - - function runIfPresent(handle) { - // From the spec: "Wait until any invocations of this algorithm started before this one have completed." - // So if we're currently running a task, we'll need to delay this invocation. - if (currentlyRunningATask) { - // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a - // "too much recursion" error. - setTimeout(partiallyApplied(runIfPresent, handle), 0); - } else { - var task = tasksByHandle[handle]; - if (task) { - currentlyRunningATask = true; - try { - task(); - } finally { - clearImmediate(handle); - currentlyRunningATask = false; - } - } - } - } - - function clearImmediate(handle) { - delete tasksByHandle[handle]; - } - - function installNextTickImplementation() { - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - process.nextTick(partiallyApplied(runIfPresent, handle)); - return handle; - }; - } - - function canUsePostMessage() { - // The test against `importScripts` prevents this implementation from being installed inside a web worker, - // where `global.postMessage` means something completely different and can't be used for this purpose. - if (global.postMessage && !global.importScripts) { - var postMessageIsAsynchronous = true; - var oldOnMessage = global.onmessage; - global.onmessage = function() { - postMessageIsAsynchronous = false; - }; - global.postMessage("", "*"); - global.onmessage = oldOnMessage; - return postMessageIsAsynchronous; - } - } - - function installPostMessageImplementation() { - // Installs an event handler on `global` for the `message` event: see - // * https://developer.mozilla.org/en/DOM/window.postMessage - // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages - - var messagePrefix = "setImmediate$" + Math.random() + "$"; - var onGlobalMessage = function(event) { - if (event.source === global && - typeof event.data === "string" && - event.data.indexOf(messagePrefix) === 0) { - runIfPresent(+event.data.slice(messagePrefix.length)); - } - }; - - if (global.addEventListener) { - global.addEventListener("message", onGlobalMessage, false); - } else { - global.attachEvent("onmessage", onGlobalMessage); - } - - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - global.postMessage(messagePrefix + handle, "*"); - return handle; - }; - } - - function installMessageChannelImplementation() { - var channel = new MessageChannel(); - channel.port1.onmessage = function(event) { - var handle = event.data; - runIfPresent(handle); - }; - - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - channel.port2.postMessage(handle); - return handle; - }; - } - - function installReadyStateChangeImplementation() { - var html = doc.documentElement; - setImmediate = function() { - var handle = addFromSetImmediateArguments(arguments); - // Create a - - - - -

Swarm.js Demo

- -

Provider: - - -

- -

- - - - -

- -
- -
-

Downloads to try:

- - - - - - - - - - - - - -
Demo text62cb02b7d506e24f347ba0e8029e24bac12c4c2edd80498c9cbe64c30b97b96b
Demo image76b9b41b169cbe78cf92f4fa413065536051588db5b1dd052ed12c78754d1008
Demo directory4531d4d568f9f164cb0426bb826fc612fc83329c2b5fb21601a2f457ddcccaf6
-

This demo only interprets PNG, JPG and text. Any other binary is shown as a hex string.

-
- - diff --git a/truebit-implementation/node_modules/swarm-js/examples/dapp_uploader_dapp/index.js b/truebit-implementation/node_modules/swarm-js/examples/dapp_uploader_dapp/index.js deleted file mode 100644 index 1468b63d..00000000 --- a/truebit-implementation/node_modules/swarm-js/examples/dapp_uploader_dapp/index.js +++ /dev/null @@ -1,75 +0,0 @@ -let swarm = Swarm.at("http://swarm-gateways.net"); - -// Uploads a file or directory to the Swarm network -const upload = dir => { - swarm.upload(dir).then(print).catch(console.log); -}; - -// Downloads from Swarm and inserts on site -const download = () => { - const hash = prompt("Hash:"); - if (hash) swarm.download(hash).then(print).catch(console.log); -}; - -// Sets the Swarm provider / gateway -const setProvider = e => { - swarm = Swarm.at(document.getElementById("provider").value); -}; - -// Pretty printers -const print = val => { - let p = document.createElement("p"); - let o = document.getElementById("output"); - p.appendChild(toHTML(val)); - o.insertBefore(p, o.firstChild); -}; - -// Interprets data as text/png/jpg/raw/directory, builds an HTML -const toHTML = val => { - // Directory - if (val instanceof Object && !val.length) { - let table = document.createElement("table"); - for (var key in val) { - let row = document.createElement("tr"); - let cell0 = document.createElement("td"); - let cell1 = document.createElement("td"); - cell0.appendChild(toHTML(key)); - cell1.appendChild(toHTML(val[key].data)); - row.appendChild(cell0); - row.appendChild(cell1); - table.appendChild(row); - } - return table; - - // String - } else if (typeof val === "string") { - let span = document.createElement("span"); - span.innerHTML = val; - return span; - - // Buffer - } else if (val.length) { - // PNG - if (val[1] === 80 && val[2] === 78 && val[3] === 71) { - let image = document.createElement("img"); - image.src = "data:image/png;base64," + btoa(String.fromCharCode.apply(null,val)); - return image; - - // JPG - } else if (val[0] === 0xFF && val[1] === 0xD8 && val[val.length-2] === 0xFF && val[val.length-1] === 0xD9) { - let image = document.createElement("img"); - image.src = "data:image/jpg;base64," + btoa(String.fromCharCode.apply(null,val)); - return image; - - // Plain text / binary data - } else { - let isText = true; - for (let i = 0; i < val.length; ++i) - if (val[i] < 32 || val[i] > 126) - isText = false; - return toHTML(isText - ? [].map.call(val, c => String.fromCharCode(c)).join("") - : [].map.call(val, b => ("00"+b.toString(16)).slice(-2)).join("")); - }; - }; -}; diff --git a/truebit-implementation/node_modules/swarm-js/examples/dapp_uploader_dapp/swarm.min.js b/truebit-implementation/node_modules/swarm-js/examples/dapp_uploader_dapp/swarm.min.js deleted file mode 100644 index e69de29b..00000000 diff --git a/truebit-implementation/node_modules/swarm-js/examples/run_node.js b/truebit-implementation/node_modules/swarm-js/examples/run_node.js deleted file mode 100644 index 15fdf0b5..00000000 --- a/truebit-implementation/node_modules/swarm-js/examples/run_node.js +++ /dev/null @@ -1,36 +0,0 @@ -// THIS IS OUTDATED -// TODO: update it - -const Swarm = require("./.."); -const fs = require("fs"); -const path = require("path"); -const privateKeyPath = path.join(process.cwd(), "swarmPrivateKey"); - -// Writes a temporary private key file to disk -fs.writeFileSync(privateKeyPath, "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"); - -// To run Swarm locally, you need a running Geth -// node and an Ethereum account/password -const swarmSetup = { - privateKey: privateKeyPath, - dataDir: process.env.HOME + "/Library/Ethereum/testnet", - ensApi: process.env.HOME + "/Library/Ethereum/testnet/geth.ipc", - binPath: process.env.HOME + "/.swarm/swarm" -}; - -// Magically starts a local Swarm node -// Downloads binaries if necessary -Swarm.local(swarmSetup)(swarm => new Promise((resolve, reject) => { - // Removes the temporary private key file - fs.unlinkSync(privateKeyPath); - - // Uploads data using the local node - swarm.upload("test").then(hash => { - console.log("Uploaded data. Address:", hash); - - // Closes the Swarm process. - resolve(); - }).catch(e => console.log(e)); -})) -.then(() => console.log("Done!")) -.catch(e => console.log(e)); diff --git a/truebit-implementation/node_modules/swarm-js/examples/simple_usage.js b/truebit-implementation/node_modules/swarm-js/examples/simple_usage.js deleted file mode 100644 index 398aa573..00000000 --- a/truebit-implementation/node_modules/swarm-js/examples/simple_usage.js +++ /dev/null @@ -1,31 +0,0 @@ -const swarm = require("./..").at("http://swarm-gateways.net"); - -(async () => { - try { - // Uploading raw data - const file = "this is a test"; - const fileHash = await swarm.upload(new Buffer(file)) - console.log("Uploaded file. SwarmHash:", fileHash); - - //// Downloading raw data - const fileBuffer = await swarm.download(fileHash); - console.log("Downloaded file. Contents:", swarm.toString(fileBuffer)); - - // Uploading directory - const dir = { - "/foo.txt": {type: "text/plain", data: "this is foo.txt"}, - "/bar.txt": {type: "text/plain", data: "this is bar.txt"} - }; - const dirHash = await swarm.upload(dir); - console.log("Uploaded directory. SwarmHash:", dirHash); - - //// Downloaading a directory - const dirObj = await swarm.download(dirHash); - console.log("Downloaded directory. Contents:"); - for (let path in dirObj) - console.log("-", path, ":", swarm.toString(dirObj[path].data)); - } catch (e) { - console.log(e); - } - -})(); diff --git a/truebit-implementation/node_modules/swarm-js/lib/api-browser.js b/truebit-implementation/node_modules/swarm-js/lib/api-browser.js deleted file mode 100644 index 8b9e4486..00000000 --- a/truebit-implementation/node_modules/swarm-js/lib/api-browser.js +++ /dev/null @@ -1,32 +0,0 @@ -var unavailable = function unavailable() { - throw "This swarm.js function isn't available on the browser."; -}; - -var fsp = { readFile: unavailable }; -var files = { download: unavailable, safeDownloadArchived: unavailable, directoryTree: unavailable }; -var os = { platform: unavailable, arch: unavailable }; -var path = { join: unavailable, slice: unavailable }; -var child_process = { spawn: unavailable }; -var mimetype = { lookup: unavailable }; -var defaultArchives = {}; -var downloadUrl = null; -var request = require("xhr-request-promise"); -var bytes = require("eth-lib/lib/bytes"); -var hash = require("./swarm-hash.js"); -var pick = require("./pick.js"); -var swarm = require("./swarm"); - -module.exports = swarm({ - fsp: fsp, - files: files, - os: os, - path: path, - child_process: child_process, - defaultArchives: defaultArchives, - mimetype: mimetype, - request: request, - downloadUrl: downloadUrl, - bytes: bytes, - hash: hash, - pick: pick -}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/swarm-js/lib/api-node.js b/truebit-implementation/node_modules/swarm-js/lib/api-node.js deleted file mode 100644 index b82c5b29..00000000 --- a/truebit-implementation/node_modules/swarm-js/lib/api-node.js +++ /dev/null @@ -1,40 +0,0 @@ -var fsp = require("fs-promise"); -var files = require("./files.js"); -var os = require("os"); -var path = require("path"); -var child_process = require("child_process"); -var mimetype = require('mime-types'); -var defaultArchives = require("./../archives/archives.json"); -var requester = require("xhr-request-promise"); -var downloadUrl = "http://ethereum-mist.s3.amazonaws.com/swarm/"; -var bytes = require("eth-lib/lib/bytes"); -var hash = require("./swarm-hash.js"); -var pick = require("./pick.js"); -var swarm = require("./swarm"); - -// Fixes issue that causes xhr-request-promise on Node.js to only accept Buffer -var request = function request(url, params) { - var newParams = {}; - for (var key in params) { - newParams[key] = params[key]; - } - if (typeof newParams.body !== "undefined") { - newParams.body = newParams.body instanceof Buffer ? newParams.body : new Buffer(newParams.body); - } - return requester(url, newParams); -}; - -module.exports = swarm({ - fsp: fsp, - files: files, - os: os, - path: path, - child_process: child_process, - defaultArchives: defaultArchives, - mimetype: mimetype, - request: request, - downloadUrl: downloadUrl, - bytes: bytes, - hash: hash, - pick: pick -}); \ No newline at end of file diff --git a/truebit-implementation/node_modules/swarm-js/lib/files.js b/truebit-implementation/node_modules/swarm-js/lib/files.js deleted file mode 100644 index 877fa4df..00000000 --- a/truebit-implementation/node_modules/swarm-js/lib/files.js +++ /dev/null @@ -1,251 +0,0 @@ -// This module implements some file download utils. Its most important export -// is `safeDownloadTargzFile`, which, given a file, its md5, a tar.gz url, its -// md5 and a path, returns a Promise that will only resolve once the exact file -// you expect is available on that path. - -var Q = require("bluebird"); -var assert = require("assert"); -var crypto = require("crypto"); -var fs = require("fs"); -var fsp = require("fs-promise"); -var got = require("got"); -var mkdirp = require("mkdirp-promise"); -var path = require("path"); - -// TODO: this lib takes 0.5s to load! Must be replaced asap. -// Perhaps just use the unix `tar` command (cross platform?) -var targz = require("tar.gz"); - -// String -> String ~> Promise String -// Downloads a file from an url to a path. -// Returns a promise containing the path. -var download = function download(url) { - return function (filePath) { - var promise = Q.resolve(mkdirp(path.dirname(filePath))).then(function () { - return new Q(function (resolve, reject) { - var writeStream = fs.createWriteStream(filePath); - var downloadStream = got.stream(url); - downloadStream.on("end", function () { - return resolve(filePath); - }); - downloadStream.on("data", function (chunk) { - return promise.onDataCallback(chunk); - }); - downloadStream.on("error", reject); - downloadStream.pipe(writeStream); - }); - }); - promise.onDataCallback = function () {}; - promise.onData = function (callback) { - promise.onDataCallback = callback || function () {}; - return promise; - }; - return promise; - }; -}; - -// String -> String ~> Promise String -// Hashes a file using the given algorithm (ex: "md5"). -// Returns a promise containing the hashed string. -var hash = function hash(algorithm) { - return function (path) { - return new Q(function (resolve, reject) { - var readStream = fs.ReadStream(path); - var hash = crypto.createHash(algorithm); - readStream.on("data", function (d) { - return hash.update(d); - }); - readStream.on("end", function () { - return resolve(hash.digest("hex")); - }); - readStream.on("error", reject); - }); - }; -}; - -// String -> String ~> Promise () -// Asserts a file matches this md5 hash. -// Returns a promise containing its path. -var checksum = function checksum(fileHash) { - return function (path) { - return hash("md5")(path).then(function (actualHash) { - return actualHash === fileHash; - }).then(assert).then(function () { - return path; - }); - }; -}; - -// String ~> String ~> String ~> Promise String -// Downloads a file to a directory, check. -// Checks if the md5 hash matches. -// Returns a promise containing the path. -var downloadAndCheck = function downloadAndCheck(url) { - return function (path) { - return function (fileHash) { - return download(url)(path).then(checksum(fileHash)); - }; - }; -}; - -// String -> String ~> Promise String -// TODO: work for zip and other types -var extract = function extract(fromPath) { - return function (toPath) { - return targz().extract(fromPath, toPath).then(function () { - return toPath; - }); - }; -}; - -// String ~> Promise String -// Reads a file as an UTF8 string. -// Returns a promise containing that string. -var readUTF8 = function readUTF8(path) { - return fsp.readFile(path, { encoding: "utf8" }); -}; - -// String ~> Promise Bool -var isDirectory = function isDirectory(path) { - return fsp.exists(path).then(assert).then(function () { - return fsp.lstat(path); - }).then(function (stats) { - return stats.isDirectory(); - }).catch(function () { - return false; - }); -}; - -// String -> Promise String -var directoryTree = function directoryTree(dirPath) { - var paths = []; - var search = function search(dirPath) { - return isDirectory(dirPath).then(function (isDir) { - if (isDir) { - var searchOnDir = function searchOnDir(dir) { - return search(path.join(dirPath, dir)); - }; - return Q.all(Q.map(fsp.readdir(dirPath), searchOnDir)); - } else { - paths.push(dirPath); - }; - }); - }; - return Q.all(search(dirPath)).then(function () { - return paths; - }); -}; - -// Regex -> String ~> Promise (Array String) -var search = function search(regex) { - return function (dirPath) { - return directoryTree(dirPath).then(function (tree) { - return tree.filter(function (path) { - return regex.test(path); - }); - }); - }; -}; - -// String -> String -> String -> String ~> Promise String -// Downloads a file inside a tar.gz and places it at `filePath`. -// Checks the md5 hash of the tar before extracting it. -// Checks the md5 hash of the file after extracting it. -// If all is OK, returns a promise containing the file path. -var safeDownloadArchived = function safeDownloadArchived(url) { - return function (archiveHash) { - return function (fileHash) { - return function (filePath) { - var fileDir = path.dirname(filePath); - var fileName = path.basename(filePath); - var archivePath = path.join(fileDir, ".swarm_downloads/files.tar.gz"); - var archiveDir = path.dirname(archivePath); - var promise = Q.resolve(mkdirp(archiveDir)).then(function () { - return checksum(fileHash)(filePath); - }).then(function () { - return filePath; - }).catch(function () { - return fsp.exists(archiveDir).then(function (exists) { - return !exists ? fsp.mkdir(archiveDir) : null; - }).then(function () { - return download(url)(archivePath).onData(promise.onDataCallback); - }).then(function () { - return hash("md5")(archivePath); - }).then(function () { - return archiveHash ? checksum(archiveHash)(archivePath) : null; - }).then(function () { - return extract(archivePath)(archiveDir); - }).then(function () { - return search(new RegExp(fileName + "$"))(archiveDir); - }).then(function (fp) { - return fsp.rename(fp[0], filePath); - }).then(function () { - return fsp.unlink(archivePath); - }).then(function () { - return fileHash ? checksum(fileHash)(filePath) : null; - }).then(function () { - return filePath; - }); - }); - promise.onDataCallback = function () {}; - promise.onData = function (callback) { - promise.onDataCallback = callback || function () {}; - return promise; - }; - return promise; - }; - }; - }; -}; - -// String -> String ~> Promise String -// Like `safeDownloadArchivedFile`, but without the checksums. -var downloadArchived = function downloadArchived(url) { - return function (path) { - return safeDownloadArchived(url)(null)(null)(path); - }; -}; - -// () => Promise Bool -// Tests the implementation by downloading a predetermined tar.gz -// from a mocked HTTP-server into a mocked filesystem. Does some -// redundancy tests such as checking the file constents and double -// checking its MD5 hash. -// Returns a promise containing a boolean, true if tests passed. -var test = function test() { - var filePath = "/swarm/foo.txt"; - var fileHash = "d3b07384d113edec49eaa6238ad5ff00"; - var archiveUrl = "http://localhost:12534"; - var archiveHash = "7fa45f946bb2a696bdd9972e0fbceac2"; - var archiveData = new Buffer([0x1f, 0x8b, 0x08, 0x00, 0xf1, 0x34, 0xaf, 0x58, 0x00, 0x03, 0xed, 0xcf, 0x3d, 0x0e, 0x83, 0x30, 0x0c, 0x86, 0x61, 0x66, 0x4e, 0xe1, 0x13, 0x54, 0xce, 0x0f, 0xc9, 0x79, 0x58, 0xb2, 0x46, 0x82, 0x14, 0x71, 0x7c, 0xd2, 0x06, 0x31, 0x52, 0x75, 0x40, 0x08, 0xe9, 0x7d, 0x96, 0x4f, 0x96, 0x3d, 0x7c, 0x4e, 0x39, 0xbf, 0xca, 0x5a, 0xba, 0x2b, 0xa9, 0x6a, 0xf0, 0x5e, 0x3e, 0x19, 0xc3, 0xf0, 0x4d, 0xb5, 0x6d, 0xde, 0x79, 0x31, 0x4e, 0x07, 0x17, 0x9c, 0xb5, 0x31, 0x8a, 0x1a, 0xab, 0xc6, 0x77, 0xa2, 0x97, 0xb6, 0xda, 0xbd, 0xe7, 0x32, 0x4e, 0xb5, 0xca, 0xf2, 0xe3, 0xae, 0x9e, 0xa5, 0x74, 0xb2, 0x6f, 0x8f, 0xc8, 0x91, 0x0f, 0x91, 0x72, 0xee, 0xef, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xdf, 0x06, 0xb3, 0x2a, 0xda, 0xed, 0x00, 0x28, 0x00, 0x00]); - - var crypto = require("crypto"); - var fsMock = require("mock-fs")({ "/swarm": {} }); - var httpMock = require("http").createServer(function (_, res) { - return res.end(archiveData); - }).listen(12534); - - return safeDownloadArchived(archiveUrl)(archiveHash)(fileHash)(filePath).then(checksum(fileHash)).then(readUTF8).then(function (text) { - return text === "foo\n"; - }).then(assert).then(function () { - return safeDownloadArchived(archiveUrl)(archiveHash)(fileHash)(filePath); - }).then(function () { - return true; - }).catch(false).finally(function () { - return httpMock.close(); - }); -}; - -module.exports = { - download: download, - hash: hash, - checksum: checksum, - downloadAndCheck: downloadAndCheck, - extract: extract, - readUTF8: readUTF8, - safeDownloadArchived: safeDownloadArchived, - directoryTree: directoryTree, - downloadArchived: downloadArchived, - search: search, - test: test -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/swarm-js/lib/pick.js b/truebit-implementation/node_modules/swarm-js/lib/pick.js deleted file mode 100644 index 2c510e21..00000000 --- a/truebit-implementation/node_modules/swarm-js/lib/pick.js +++ /dev/null @@ -1,57 +0,0 @@ -var picker = function picker(type) { - return function () { - return new Promise(function (resolve, reject) { - var fileLoader = function fileLoader(e) { - var directory = {}; - var totalFiles = e.target.files.length; - var loadedFiles = 0; - [].map.call(e.target.files, function (file) { - var reader = new FileReader(); - reader.onload = function (e) { - var data = new Uint8Array(e.target.result); - if (type === "directory") { - var path = file.webkitRelativePath; - directory[path.slice(path.indexOf("/") + 1)] = { - type: "text/plain", - data: data - }; - if (++loadedFiles === totalFiles) resolve(directory); - } else if (type === "file") { - var _path = file.webkitRelativePath; - resolve({ "type": mimetype.lookup(_path), "data": data }); - } else { - resolve(data); - } - }; - reader.readAsArrayBuffer(file); - }); - }; - - var fileInput = void 0; - if (type === "directory") { - fileInput = document.createElement("input"); - fileInput.addEventListener("change", fileLoader); - fileInput.type = "file"; - fileInput.webkitdirectory = true; - fileInput.mozdirectory = true; - fileInput.msdirectory = true; - fileInput.odirectory = true; - fileInput.directory = true; - } else { - fileInput = document.createElement("input"); - fileInput.addEventListener("change", fileLoader); - fileInput.type = "file"; - }; - - var mouseEvent = document.createEvent("MouseEvents"); - mouseEvent.initEvent("click", true, false); - fileInput.dispatchEvent(mouseEvent); - }); - }; -}; - -module.exports = { - data: picker("data"), - file: picker("file"), - directory: picker("directory") -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/swarm-js/lib/swarm-hash.js b/truebit-implementation/node_modules/swarm-js/lib/swarm-hash.js deleted file mode 100644 index c7bd6204..00000000 --- a/truebit-implementation/node_modules/swarm-js/lib/swarm-hash.js +++ /dev/null @@ -1,40 +0,0 @@ -// Thanks https://github.com/axic/swarmhash - -var keccak = require("eth-lib/lib/hash").keccak256; -var Bytes = require("eth-lib/lib/bytes"); - -var swarmHashBlock = function swarmHashBlock(length, data) { - var lengthEncoded = Bytes.reverse(Bytes.pad(6, Bytes.fromNumber(length))); - var bytes = Bytes.flatten([lengthEncoded, "0x0000", data]); - return keccak(bytes).slice(2); -}; - -// (Bytes | Uint8Array | String) -> String -var swarmHash = function swarmHash(data) { - if (typeof data === "string" && data.slice(0, 2) !== "0x") { - data = Bytes.fromString(data); - } else if (typeof data !== "string" && data.length !== undefined) { - data = Bytes.fromUint8Array(data); - } - - var length = Bytes.length(data); - - if (length <= 4096) { - return swarmHashBlock(length, data); - } - - var maxSize = 4096; - while (maxSize * (4096 / 32) < length) { - maxSize *= 4096 / 32; - } - - var innerNodes = []; - for (var i = 0; i < length; i += maxSize) { - var size = maxSize < length - i ? maxSize : length - i; - innerNodes.push(swarmHash(Bytes.slice(data, i, i + size))); - } - - return swarmHashBlock(length, Bytes.flatten(innerNodes)); -}; - -module.exports = swarmHash; \ No newline at end of file diff --git a/truebit-implementation/node_modules/swarm-js/lib/swarm.js b/truebit-implementation/node_modules/swarm-js/lib/swarm.js deleted file mode 100644 index 43bba4a0..00000000 --- a/truebit-implementation/node_modules/swarm-js/lib/swarm.js +++ /dev/null @@ -1,625 +0,0 @@ -// TODO: this is a temporary fix to hide those libraries from the browser. A -// slightly better long-term solution would be to split this file into two, -// separating the functions that are used on Node.js from the functions that -// are used only on the browser. -module.exports = function (_ref) { - var fsp = _ref.fsp, - files = _ref.files, - os = _ref.os, - path = _ref.path, - child_process = _ref.child_process, - mimetype = _ref.mimetype, - defaultArchives = _ref.defaultArchives, - request = _ref.request, - downloadUrl = _ref.downloadUrl, - bytes = _ref.bytes, - hash = _ref.hash, - pick = _ref.pick; - - - // ∀ a . String -> JSON -> Map String a -o Map String a - // Inserts a key/val pair in an object impurely. - var impureInsert = function impureInsert(key) { - return function (val) { - return function (map) { - return map[key] = val, map; - }; - }; - }; - - // String -> JSON -> Map String JSON - // Merges an array of keys and an array of vals into an object. - var toMap = function toMap(keys) { - return function (vals) { - var map = {}; - for (var i = 0, l = keys.length; i < l; ++i) { - map[keys[i]] = vals[i]; - }return map; - }; - }; - - // ∀ a . Map String a -> Map String a -> Map String a - // Merges two maps into one. - var merge = function merge(a) { - return function (b) { - var map = {}; - for (var key in a) { - map[key] = a[key]; - }for (var _key in b) { - map[_key] = b[_key]; - }return map; - }; - }; - - // ∀ a . [a] -> [a] -> Bool - var equals = function equals(a) { - return function (b) { - if (a.length !== b.length) { - return false; - } else { - for (var i = 0, l = a.length; i < a; ++i) { - if (a[i] !== b[i]) return false; - } - } - return true; - }; - }; - - // String -> String -> String - var rawUrl = function rawUrl(swarmUrl) { - return function (hash) { - return swarmUrl + "/bzzr:/" + hash; - }; - }; - - // String -> String -> Promise Uint8Array - // Gets the raw contents of a Swarm hash address. - var downloadData = function downloadData(swarmUrl) { - return function (hash) { - return request(rawUrl(swarmUrl)(hash), { responseType: "arraybuffer" }).then(function (arrayBuffer) { - var uint8Array = new Uint8Array(arrayBuffer); - var error404 = [52, 48, 52, 32, 112, 97, 103, 101, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100, 10]; - if (equals(uint8Array)(error404)) throw "Error 404."; - return uint8Array; - }); - }; - }; - - // type Entry = {"type": String, "hash": String} - // type File = {"type": String, "data": Uint8Array} - - // String -> String -> Promise (Map String Entry) - // Solves the manifest of a Swarm address recursively. - // Returns a map from full paths to entries. - var downloadEntries = function downloadEntries(swarmUrl) { - return function (hash) { - var search = function search(hash) { - return function (path) { - return function (routes) { - // Formats an entry to the Swarm.js type. - var format = function format(entry) { - return { - type: entry.contentType, - hash: entry.hash }; - }; - - // To download a single entry: - // if type is bzz-manifest, go deeper - // if not, add it to the routing table - var downloadEntry = function downloadEntry(entry) { - if (entry.path === undefined) { - return Promise.resolve(); - } else { - return entry.contentType === "application/bzz-manifest+json" ? search(entry.hash)(path + entry.path)(routes) : Promise.resolve(impureInsert(path + entry.path)(format(entry))(routes)); - } - }; - - // Downloads the initial manifest and then each entry. - return downloadData(swarmUrl)(hash).then(function (text) { - return JSON.parse(toString(text)).entries; - }).then(function (entries) { - return Promise.all(entries.map(downloadEntry)); - }).then(function () { - return routes; - }); - }; - }; - }; - - return search(hash)("")({}); - }; - }; - - // String -> String -> Promise (Map String String) - // Same as `downloadEntries`, but returns only hashes (no types). - var downloadRoutes = function downloadRoutes(swarmUrl) { - return function (hash) { - return downloadEntries(swarmUrl)(hash).then(function (entries) { - return toMap(Object.keys(entries))(Object.keys(entries).map(function (route) { - return entries[route].hash; - })); - }); - }; - }; - - // String -> String -> Promise (Map String File) - // Gets the entire directory tree in a Swarm address. - // Returns a promise mapping paths to file contents. - var downloadDirectory = function downloadDirectory(swarmUrl) { - return function (hash) { - return downloadEntries(swarmUrl)(hash).then(function (entries) { - var paths = Object.keys(entries); - var hashs = paths.map(function (path) { - return entries[path].hash; - }); - var types = paths.map(function (path) { - return entries[path].type; - }); - var datas = hashs.map(downloadData(swarmUrl)); - var files = function files(datas) { - return datas.map(function (data, i) { - return { type: types[i], data: data }; - }); - }; - return Promise.all(datas).then(function (datas) { - return toMap(paths)(files(datas)); - }); - }); - }; - }; - - // String -> String -> String -> Promise String - // Gets the raw contents of a Swarm hash address. - // Returns a promise with the downloaded file path. - var downloadDataToDisk = function downloadDataToDisk(swarmUrl) { - return function (hash) { - return function (filePath) { - return files.download(rawUrl(swarmUrl)(hash))(filePath); - }; - }; - }; - - // String -> String -> String -> Promise (Map String String) - // Gets the entire directory tree in a Swarm address. - // Returns a promise mapping paths to file contents. - var downloadDirectoryToDisk = function downloadDirectoryToDisk(swarmUrl) { - return function (hash) { - return function (dirPath) { - return downloadRoutes(swarmUrl)(hash).then(function (routingTable) { - var downloads = []; - for (var route in routingTable) { - if (route.length > 0) { - var filePath = path.join(dirPath, route); - downloads.push(downloadDataToDisk(swarmUrl)(routingTable[route])(filePath)); - }; - }; - return Promise.all(downloads).then(function () { - return dirPath; - }); - }); - }; - }; - }; - - // String -> Uint8Array -> Promise String - // Uploads raw data to Swarm. - // Returns a promise with the uploaded hash. - var uploadData = function uploadData(swarmUrl) { - return function (data) { - return request(swarmUrl + "/bzzr:/", { - body: typeof data === "string" ? fromString(data) : data, - method: "POST" }); - }; - }; - - // String -> String -> String -> File -> Promise String - // Uploads a file to the Swarm manifest at a given hash, under a specific - // route. Returns a promise containing the uploaded hash. - // FIXME: for some reasons Swarm-Gateways is sometimes returning - // error 404 (bad request), so we retry up to 3 times. Why? - var uploadToManifest = function uploadToManifest(swarmUrl) { - return function (hash) { - return function (route) { - return function (file) { - var attempt = function attempt(n) { - var slashRoute = route[0] === "/" ? route : "/" + route; - var url = swarmUrl + "/bzz:/" + hash + slashRoute; - var opt = { - method: "PUT", - headers: { "Content-Type": file.type }, - body: file.data }; - return request(url, opt).then(function (response) { - if (response.indexOf("error") !== -1) { - throw response; - } - return response; - }).catch(function (e) { - return n > 0 && attempt(n - 1); - }); - }; - return attempt(3); - }; - }; - }; - }; - - // String -> {type: String, data: Uint8Array} -> Promise String - var uploadFile = function uploadFile(swarmUrl) { - return function (file) { - return uploadDirectory(swarmUrl)({ "": file }); - }; - }; - - // String -> String -> Promise String - var uploadFileFromDisk = function uploadFileFromDisk(swarmUrl) { - return function (filePath) { - return fsp.readFile(filePath).then(function (data) { - return uploadFile(swarmUrl)({ type: mimetype.lookup(filePath), data: data }); - }); - }; - }; - - // String -> Map String File -> Promise String - // Uploads a directory to Swarm. The directory is - // represented as a map of routes and files. - // A default path is encoded by having a "" route. - var uploadDirectory = function uploadDirectory(swarmUrl) { - return function (directory) { - return uploadData(swarmUrl)("{}").then(function (hash) { - var uploadRoute = function uploadRoute(route) { - return function (hash) { - return uploadToManifest(swarmUrl)(hash)(route)(directory[route]); - }; - }; - var uploadToHash = function uploadToHash(hash, route) { - return hash.then(uploadRoute(route)); - }; - return Object.keys(directory).reduce(uploadToHash, Promise.resolve(hash)); - }); - }; - }; - - // String -> Promise String - var uploadDataFromDisk = function uploadDataFromDisk(swarmUrl) { - return function (filePath) { - return fsp.readFile(filePath).then(uploadData(swarmUrl)); - }; - }; - - // String -> Nullable String -> String -> Promise String - var uploadDirectoryFromDisk = function uploadDirectoryFromDisk(swarmUrl) { - return function (defaultPath) { - return function (dirPath) { - return files.directoryTree(dirPath).then(function (fullPaths) { - return Promise.all(fullPaths.map(function (path) { - return fsp.readFile(path); - })).then(function (datas) { - var paths = fullPaths.map(function (path) { - return path.slice(dirPath.length); - }); - var types = fullPaths.map(function (path) { - return mimetype.lookup(path) || "text/plain"; - }); - return toMap(paths)(datas.map(function (data, i) { - return { type: types[i], data: data }; - })); - }); - }).then(function (directory) { - return merge(defaultPath ? { "": directory[defaultPath] } : {})(directory); - }).then(uploadDirectory(swarmUrl)); - }; - }; - }; - - // String -> UploadInfo -> Promise String - // Simplified multi-type upload which calls the correct - // one based on the type of the argument given. - var _upload = function _upload(swarmUrl) { - return function (arg) { - // Upload raw data from browser - if (arg.pick === "data") { - return pick.data().then(uploadData(swarmUrl)); - - // Upload a file from browser - } else if (arg.pick === "file") { - return pick.file().then(uploadFile(swarmUrl)); - - // Upload a directory from browser - } else if (arg.pick === "directory") { - return pick.directory().then(uploadDirectory(swarmUrl)); - - // Upload directory/file from disk - } else if (arg.path) { - switch (arg.kind) { - case "data": - return uploadDataFromDisk(swarmUrl)(arg.path); - case "file": - return uploadFileFromDisk(swarmUrl)(arg.path); - case "directory": - return uploadDirectoryFromDisk(swarmUrl)(arg.defaultFile)(arg.path); - }; - - // Upload UTF-8 string or raw data (buffer) - } else if (arg.length || typeof arg === "string") { - return uploadData(swarmUrl)(arg); - - // Upload directory with JSON - } else if (arg instanceof Object) { - return uploadDirectory(swarmUrl)(arg); - } - - return Promise.reject(new Error("Bad arguments")); - }; - }; - - // String -> String -> Nullable String -> Promise (String | Uint8Array | Map String Uint8Array) - // Simplified multi-type download which calls the correct function based on - // the type of the argument given, and on whether the Swwarm address has a - // directory or a file. - var _download = function _download(swarmUrl) { - return function (hash) { - return function (path) { - return isDirectory(swarmUrl)(hash).then(function (isDir) { - if (isDir) { - return path ? downloadDirectoryToDisk(swarmUrl)(hash)(path) : downloadDirectory(swarmUrl)(hash); - } else { - return path ? downloadDataToDisk(swarmUrl)(hash)(path) : downloadData(swarmUrl)(hash); - } - }); - }; - }; - }; - - // String -> Promise String - // Downloads the Swarm binaries into a path. Returns a promise that only - // resolves when the exact Swarm file is there, and verified to be correct. - // If it was already there to begin with, skips the download. - var downloadBinary = function downloadBinary(path, archives) { - var system = os.platform().replace("win32", "windows") + "-" + (os.arch() === "x64" ? "amd64" : "386"); - var archive = (archives || defaultArchives)[system]; - var archiveUrl = downloadUrl + archive.archive + ".tar.gz"; - var archiveMD5 = archive.archiveMD5; - var binaryMD5 = archive.binaryMD5; - return files.safeDownloadArchived(archiveUrl)(archiveMD5)(binaryMD5)(path); - }; - - // type SwarmSetup = { - // account : String, - // password : String, - // dataDir : String, - // binPath : String, - // ensApi : String, - // onDownloadProgress : Number ~> (), - // archives : [{ - // archive: String, - // binaryMD5: String, - // archiveMD5: String - // }] - // } - - // SwarmSetup ~> Promise Process - // Starts the Swarm process. - var startProcess = function startProcess(swarmSetup) { - return new Promise(function (resolve, reject) { - var spawn = child_process.spawn; - - - var hasString = function hasString(str) { - return function (buffer) { - return ('' + buffer).indexOf(str) !== -1; - }; - }; - var account = swarmSetup.account, - password = swarmSetup.password, - dataDir = swarmSetup.dataDir, - ensApi = swarmSetup.ensApi, - privateKey = swarmSetup.privateKey; - - - var STARTUP_TIMEOUT_SECS = 3; - var WAITING_PASSWORD = 0; - var STARTING = 1; - var LISTENING = 2; - var PASSWORD_PROMPT_HOOK = "Passphrase"; - var LISTENING_HOOK = "Swarm http proxy started"; - - var state = WAITING_PASSWORD; - - var swarmProcess = spawn(swarmSetup.binPath, ['--bzzaccount', account || privateKey, '--datadir', dataDir, '--ens-api', ensApi]); - - var handleProcessOutput = function handleProcessOutput(data) { - if (state === WAITING_PASSWORD && hasString(PASSWORD_PROMPT_HOOK)(data)) { - setTimeout(function () { - state = STARTING; - swarmProcess.stdin.write(password + '\n'); - }, 500); - } else if (hasString(LISTENING_HOOK)(data)) { - state = LISTENING; - clearTimeout(timeout); - resolve(swarmProcess); - } - }; - - swarmProcess.stdout.on('data', handleProcessOutput); - swarmProcess.stderr.on('data', handleProcessOutput); - //swarmProcess.on('close', () => setTimeout(restart, 2000)); - - var restart = function restart() { - return startProcess(swarmSetup).then(resolve).catch(reject); - }; - var error = function error() { - return reject(new Error("Couldn't start swarm process.")); - }; - var timeout = setTimeout(error, 20000); - }); - }; - - // Process ~> Promise () - // Stops the Swarm process. - var stopProcess = function stopProcess(process) { - return new Promise(function (resolve, reject) { - process.stderr.removeAllListeners('data'); - process.stdout.removeAllListeners('data'); - process.stdin.removeAllListeners('error'); - process.removeAllListeners('error'); - process.removeAllListeners('exit'); - process.kill('SIGINT'); - - var killTimeout = setTimeout(function () { - return process.kill('SIGKILL'); - }, 8000); - - process.once('close', function () { - clearTimeout(killTimeout); - resolve(); - }); - }); - }; - - // SwarmSetup -> (SwarmAPI -> Promise ()) -> Promise () - // Receives a Swarm configuration object and a callback function. It then - // checks if a local Swarm node is running. If no local Swarm is found, it - // downloads the Swarm binaries to the dataDir (if not there), checksums, - // starts the Swarm process and calls the callback function with an API - // object using the local node. That callback must return a promise which - // will resolve when it is done using the API, so that this function can - // close the Swarm process properly. Returns a promise that resolves when the - // user is done with the API and the Swarm process is closed. - // TODO: check if Swarm process is already running (improve `isAvailable`) - var local = function local(swarmSetup) { - return function (useAPI) { - return _isAvailable("http://localhost:8500").then(function (isAvailable) { - return isAvailable ? useAPI(at("http://localhost:8500")).then(function () {}) : downloadBinary(swarmSetup.binPath, swarmSetup.archives).onData(function (data) { - return (swarmSetup.onProgress || function () {})(data.length); - }).then(function () { - return startProcess(swarmSetup); - }).then(function (process) { - return useAPI(at("http://localhost:8500")).then(function () { - return process; - }); - }).then(stopProcess); - }); - }; - }; - - // String ~> Promise Bool - // Returns true if Swarm is available on `url`. - // Perfoms a test upload to determine that. - // TODO: improve this? - var _isAvailable = function _isAvailable(swarmUrl) { - var testFile = "test"; - var testHash = "c9a99c7d326dcc6316f32fe2625b311f6dc49a175e6877681ded93137d3569e7"; - return uploadData(swarmUrl)(testFile).then(function (hash) { - return hash === testHash; - }).catch(function () { - return false; - }); - }; - - // String -> String ~> Promise Bool - // Returns a Promise which is true if that Swarm address is a directory. - // Determines that by checking that it (i) is a JSON, (ii) has a .entries. - // TODO: improve this? - var isDirectory = function isDirectory(swarmUrl) { - return function (hash) { - return downloadData(swarmUrl)(hash).then(function (data) { - try { - return !!JSON.parse(toString(data)).entries; - } catch (e) { - return false; - } - }); - }; - }; - - // Uncurries a function; used to allow the f(x,y,z) style on exports. - var uncurry = function uncurry(f) { - return function (a, b, c, d, e) { - var p; - // Hardcoded because efficiency (`arguments` is very slow). - if (typeof a !== "undefined") p = f(a); - if (typeof b !== "undefined") p = f(b); - if (typeof c !== "undefined") p = f(c); - if (typeof d !== "undefined") p = f(d); - if (typeof e !== "undefined") p = f(e); - return p; - }; - }; - - // () -> Promise Bool - // Not sure how to mock Swarm to test it properly. Ideas? - var test = function test() { - return Promise.resolve(true); - }; - - // Uint8Array -> String - var toString = function toString(uint8Array) { - return bytes.toString(bytes.fromUint8Array(uint8Array)); - }; - - // String -> Uint8Array - var fromString = function fromString(string) { - return bytes.toUint8Array(bytes.fromString(string)); - }; - - // String -> SwarmAPI - // Fixes the `swarmUrl`, returning an API where you don't have to pass it. - var at = function at(swarmUrl) { - return { - download: function download(hash, path) { - return _download(swarmUrl)(hash)(path); - }, - downloadData: uncurry(downloadData(swarmUrl)), - downloadDataToDisk: uncurry(downloadDataToDisk(swarmUrl)), - downloadDirectory: uncurry(downloadDirectory(swarmUrl)), - downloadDirectoryToDisk: uncurry(downloadDirectoryToDisk(swarmUrl)), - downloadEntries: uncurry(downloadEntries(swarmUrl)), - downloadRoutes: uncurry(downloadRoutes(swarmUrl)), - isAvailable: function isAvailable() { - return _isAvailable(swarmUrl); - }, - upload: function upload(arg) { - return _upload(swarmUrl)(arg); - }, - uploadData: uncurry(uploadData(swarmUrl)), - uploadFile: uncurry(uploadFile(swarmUrl)), - uploadFileFromDisk: uncurry(uploadFile(swarmUrl)), - uploadDataFromDisk: uncurry(uploadDataFromDisk(swarmUrl)), - uploadDirectory: uncurry(uploadDirectory(swarmUrl)), - uploadDirectoryFromDisk: uncurry(uploadDirectoryFromDisk(swarmUrl)), - uploadToManifest: uncurry(uploadToManifest(swarmUrl)), - pick: pick, - hash: hash, - fromString: fromString, - toString: toString - }; - }; - - return { - at: at, - local: local, - download: _download, - downloadBinary: downloadBinary, - downloadData: downloadData, - downloadDataToDisk: downloadDataToDisk, - downloadDirectory: downloadDirectory, - downloadDirectoryToDisk: downloadDirectoryToDisk, - downloadEntries: downloadEntries, - downloadRoutes: downloadRoutes, - isAvailable: _isAvailable, - startProcess: startProcess, - stopProcess: stopProcess, - upload: _upload, - uploadData: uploadData, - uploadDataFromDisk: uploadDataFromDisk, - uploadFile: uploadFile, - uploadFileFromDisk: uploadFileFromDisk, - uploadDirectory: uploadDirectory, - uploadDirectoryFromDisk: uploadDirectoryFromDisk, - uploadToManifest: uploadToManifest, - pick: pick, - hash: hash, - fromString: fromString, - toString: toString - }; -}; diff --git a/truebit-implementation/node_modules/swarm-js/package.json b/truebit-implementation/node_modules/swarm-js/package.json deleted file mode 100644 index 18750a43..00000000 --- a/truebit-implementation/node_modules/swarm-js/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "_from": "swarm-js@0.1.37", - "_id": "swarm-js@0.1.37", - "_inBundle": false, - "_integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", - "_location": "/swarm-js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "swarm-js@0.1.37", - "name": "swarm-js", - "escapedName": "swarm-js", - "rawSpec": "0.1.37", - "saveSpec": null, - "fetchSpec": "0.1.37" - }, - "_requiredBy": [ - "/web3-bzz" - ], - "_resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "_shasum": "27d485317a340bbeec40292af783cc10acfa4663", - "_spec": "swarm-js@0.1.37", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-bzz", - "author": { - "name": "MaiaVictor" - }, - "browser": "lib/api-browser.js", - "bugs": { - "url": "https://github.com/maiavictor/swarm-js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^2.1.2", - "fs-promise": "^2.0.0", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar.gz": "^1.0.5", - "xhr-request-promise": "^0.1.2" - }, - "deprecated": false, - "description": "Swarm tools for JavaScript.", - "devDependencies": { - "babel-cli": "^6.24.1", - "babel-preset-es2015": "^6.24.1" - }, - "homepage": "https://github.com/maiavictor/swarm-js#readme", - "license": "MIT", - "main": "lib/api-node.js", - "name": "swarm-js", - "repository": { - "type": "git", - "url": "git+https://github.com/maiavictor/swarm-js.git" - }, - "scripts": { - "babel": "babel src --out-dir=lib", - "build": "npm run bundle; npm run minify", - "bundle": "browserify -d lib/swarm.js > examples/example_dapp_uploader/swarm.min.js", - "minify": "ccjs examples/example_dapp_uploader/swarm.min.js > examples/example_dapp_uploader/swarm.min.js_; mv examples/example_dapp_uploader/swarm.min.js_ examples/example_dapp_uploader/swarm.min.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "0.1.37" -} diff --git a/truebit-implementation/node_modules/swarm-js/scripts/prepareArchives.js b/truebit-implementation/node_modules/swarm-js/scripts/prepareArchives.js deleted file mode 100644 index 5d8202a1..00000000 --- a/truebit-implementation/node_modules/swarm-js/scripts/prepareArchives.js +++ /dev/null @@ -1,97 +0,0 @@ -const Q = require("bluebird"); -const decompress = require("decompress"); -const files = require("./../src/files.js"); -const fs = require("fs-extra"); -const fsp = require("fs-promise"); -const got = require("got"); -const path = require("path"); -const targz = require("tar.gz"); -const xml = require("xml2js"); - -// Downloads list of Geth releases -console.log("Retrieving list of Geth releases from https://gethstore.blob.core.windows.net."); -got("https://gethstore.blob.core.windows.net/builds?restype=container&comp=list") - - // Parses XML - .then((res) => new Q((resolve, reject) => { - console.log("Parsing XML."); - xml.parseString(res.body, (err, res) => { - if (err) { - reject(); - } - else { - resolve(res.EnumerationResults.Blobs[0].Blob); - } - }); - })) - - // Formats data - .then(blobs => { - console.log("Formatting blobs."); - return blobs - .filter((file) => { - const isStable = !/unstable/.test(file.Name[0]); - const hasSwarm = /alltools/.test(file.Name[0]); - const isArchive = !/\.asc$/.test(file.Name[0]); - return isStable && hasSwarm && isArchive; - }) - .map((file) => { - const gethArchiveName = file.Name[0]; - const parts = gethArchiveName.split("-"); - const props = file.Properties[0]; - const swarmArchiveExt = parts[2] === "windows" ? ".exe" : ""; - const swarmArchiveName = `swarm-${parts[2]}-${parts[3]}-${parts[4]}${swarmArchiveExt}`; - return { - date: new Date(props["Last-Modified"]), - hash: props["Content-MD5"][0], - os: parts[2], - arch: parts[3], - version: parts[4], - gethArchiveName: gethArchiveName, - gethArchivePath: path.join(process.cwd(), "tmp_downloads", gethArchiveName), - gethArchiveUrl: "https://gethstore.blob.core.windows.net/builds/" + gethArchiveName, - gethFilesPath: path.join(process.cwd(), "tmp_downloads", gethArchiveName.replace(/(\.zip|\.tar\.gz)/,"")), - swarmArchiveName: swarmArchiveName, - swarmBinaryDir: path.join(process.cwd(), "tmp_downloads", swarmArchiveName), - swarmBinaryPath: path.join(process.cwd(), "tmp_downloads", swarmArchiveName, "swarm" + swarmArchiveExt), - swarmArchivePath: path.join(process.cwd(), "archives", swarmArchiveName + ".tar.gz"), - } - }) - .sort((a, b) => a.date - b.date) - }) - - // Downloads Geth archives - .then(binaries => { - console.log("Downloading archives."); - if (!fs.existsSync("archives")) - fs.mkdirSync(path.join(process.cwd(), "archives")); - let archives = {}; - return Q.all(binaries - .filter(bin => bin.version === binaries[binaries.length - 1].version) - .map(bin => { - const archive = archives[bin.os + "-" + bin.arch] = { - archive: bin.swarmArchiveName - }; - console.log("Downloading " + bin.gethArchivePath + "."); - return files.download(bin.gethArchiveUrl)(bin.gethArchivePath) - .then(path => (console.log("Downloaded " + path + "."), path)) - .then(path => decompress(path, "tmp_downloads")) - .then(() => !fs.existsSync(bin.swarmBinaryDir) && fsp.mkdir(bin.swarmBinaryDir)) - .then(() => files.search(/swarm(.exe|)$/)(bin.gethFilesPath)) - .then(([swarmPath]) => fsp.rename(swarmPath, bin.swarmBinaryPath)) - .then(() => files.hash("md5")(bin.swarmBinaryPath)) - .then(binaryMD5 => archive.binaryMD5 = binaryMD5) - .then(() => targz().compress(bin.swarmBinaryDir, bin.swarmArchivePath)) - .then(() => files.hash("md5")(bin.swarmArchivePath)) - .then(archiveMD5 => archive.archiveMD5 = archiveMD5) - .catch(e => console.log(e)); - })) - .then(() => fs.writeFileSync("archives/archives.json", JSON.stringify(archives, null, 2))); - }) - - // Finishes - .then(() => { - fs.removeSync(path.join(process.cwd(), "tmp_downloads")); - console.log("Done.") - }) - .catch(e => console.log(e)); diff --git a/truebit-implementation/node_modules/swarm-js/src/api-browser.js b/truebit-implementation/node_modules/swarm-js/src/api-browser.js deleted file mode 100644 index e0dc9e8b..00000000 --- a/truebit-implementation/node_modules/swarm-js/src/api-browser.js +++ /dev/null @@ -1,30 +0,0 @@ -const unavailable = () => { throw "This swarm.js function isn't available on the browser."; } - -const fsp = {readFile: unavailable}; -const files = {download: unavailable, safeDownloadArchived: unavailable, directoryTree: unavailable}; -const os = {platform: unavailable, arch: unavailable}; -const path = {join: unavailable, slice: unavailable}; -const child_process = {spawn: unavailable}; -const mimetype = {lookup: unavailable}; -const defaultArchives = {}; -const downloadUrl = null; -const request = require("xhr-request-promise"); -const bytes = require("eth-lib/lib/bytes"); -const hash = require("./swarm-hash.js"); -const pick = require("./pick.js"); -const swarm = require("./swarm"); - -module.exports = swarm({ - fsp, - files, - os, - path, - child_process, - defaultArchives, - mimetype, - request, - downloadUrl, - bytes, - hash, - pick -}); diff --git a/truebit-implementation/node_modules/swarm-js/src/api-node.js b/truebit-implementation/node_modules/swarm-js/src/api-node.js deleted file mode 100644 index 6bb91948..00000000 --- a/truebit-implementation/node_modules/swarm-js/src/api-node.js +++ /dev/null @@ -1,42 +0,0 @@ -const fsp = require("fs-promise"); -const files = require("./files.js"); -const os = require("os"); -const path = require("path"); -const child_process = require("child_process"); -const mimetype = require('mime-types'); -const defaultArchives = require("./../archives/archives.json"); -const requester = require("xhr-request-promise"); -const downloadUrl = "http://ethereum-mist.s3.amazonaws.com/swarm/"; -const bytes = require("eth-lib/lib/bytes"); -const hash = require("./swarm-hash.js"); -const pick = require("./pick.js"); -const swarm = require("./swarm"); - -// Fixes issue that causes xhr-request-promise on Node.js to only accept Buffer -const request = (url, params) => { - let newParams = {}; - for (let key in params) { - newParams[key] = params[key]; - } - if (typeof newParams.body !== "undefined") { - newParams.body = newParams.body instanceof Buffer - ? newParams.body - : new Buffer(newParams.body); - } - return requester(url, newParams); -}; - -module.exports = swarm({ - fsp, - files, - os, - path, - child_process, - defaultArchives, - mimetype, - request, - downloadUrl, - bytes, - hash, - pick -}); diff --git a/truebit-implementation/node_modules/swarm-js/src/files.js b/truebit-implementation/node_modules/swarm-js/src/files.js deleted file mode 100644 index aba8ee5f..00000000 --- a/truebit-implementation/node_modules/swarm-js/src/files.js +++ /dev/null @@ -1,198 +0,0 @@ -// This module implements some file download utils. Its most important export -// is `safeDownloadTargzFile`, which, given a file, its md5, a tar.gz url, its -// md5 and a path, returns a Promise that will only resolve once the exact file -// you expect is available on that path. - -const Q = require("bluebird"); -const assert = require("assert"); -const crypto = require("crypto"); -const fs = require("fs"); -const fsp = require("fs-promise"); -const got = require("got"); -const mkdirp = require("mkdirp-promise"); -const path = require("path"); - -// TODO: this lib takes 0.5s to load! Must be replaced asap. -// Perhaps just use the unix `tar` command (cross platform?) -const targz = require("tar.gz"); - -// String -> String ~> Promise String -// Downloads a file from an url to a path. -// Returns a promise containing the path. -const download = url => filePath => { - const promise = Q.resolve(mkdirp(path.dirname(filePath))).then(() => - new Q((resolve, reject) => { - const writeStream = fs.createWriteStream(filePath); - const downloadStream = got.stream(url); - downloadStream.on("end", () => resolve(filePath)); - downloadStream.on("data", chunk => promise.onDataCallback(chunk)); - downloadStream.on("error", reject); - downloadStream.pipe(writeStream); - })); - promise.onDataCallback = () => {}; - promise.onData = callback => { - promise.onDataCallback = callback || (() => {}); - return promise; - } - return promise; -}; - -// String -> String ~> Promise String -// Hashes a file using the given algorithm (ex: "md5"). -// Returns a promise containing the hashed string. -const hash = algorithm => path => - new Q((resolve, reject) => { - const readStream = fs.ReadStream(path); - const hash = crypto.createHash(algorithm); - readStream.on("data", d => hash.update(d)); - readStream.on("end", () => resolve(hash.digest("hex"))); - readStream.on("error", reject); - }); - -// String -> String ~> Promise () -// Asserts a file matches this md5 hash. -// Returns a promise containing its path. -const checksum = fileHash => path => - hash("md5")(path) - .then(actualHash => actualHash === fileHash) - .then(assert) - .then(() => path); - -// String ~> String ~> String ~> Promise String -// Downloads a file to a directory, check. -// Checks if the md5 hash matches. -// Returns a promise containing the path. -const downloadAndCheck = url => path => fileHash => - download(url)(path) - .then(checksum(fileHash)); - -// String -> String ~> Promise String -// TODO: work for zip and other types -const extract = fromPath => toPath => - targz() - .extract(fromPath, toPath) - .then(() => toPath); - -// String ~> Promise String -// Reads a file as an UTF8 string. -// Returns a promise containing that string. -const readUTF8 = path => - fsp.readFile (path, {encoding: "utf8"}); - -// String ~> Promise Bool -const isDirectory = path => - fsp.exists(path) - .then(assert) - .then(() => fsp.lstat(path)) - .then(stats => stats.isDirectory()) - .catch(() => false); - -// String -> Promise String -const directoryTree = dirPath => { - let paths = []; - const search = dirPath => - isDirectory(dirPath).then(isDir => { - if (isDir) { - const searchOnDir = dir => search (path.join(dirPath, dir)); - return Q.all(Q.map(fsp.readdir(dirPath), searchOnDir)); - } else { - paths.push(dirPath); - }; - }); - return Q.all(search (dirPath)).then(() => paths); -} - -// Regex -> String ~> Promise (Array String) -const search = regex => dirPath => - directoryTree(dirPath) - .then(tree => tree.filter(path => regex.test(path))); - -// String -> String -> String -> String ~> Promise String -// Downloads a file inside a tar.gz and places it at `filePath`. -// Checks the md5 hash of the tar before extracting it. -// Checks the md5 hash of the file after extracting it. -// If all is OK, returns a promise containing the file path. -const safeDownloadArchived = url => archiveHash => fileHash => filePath => { - const fileDir = path.dirname(filePath); - const fileName = path.basename(filePath); - const archivePath = path.join(fileDir, ".swarm_downloads/files.tar.gz"); - const archiveDir = path.dirname(archivePath); - const promise = Q.resolve(mkdirp(archiveDir)) - .then(() => checksum (fileHash) (filePath)) - .then(() => filePath) - .catch(() => fsp.exists(archiveDir) - .then(exists => !exists ? fsp.mkdir(archiveDir) : null) - .then(() => download (url)(archivePath).onData(promise.onDataCallback)) - .then(() => hash("md5")(archivePath)) - .then(() => archiveHash ? checksum(archiveHash)(archivePath) : null) - .then(() => extract (archivePath) (archiveDir)) - .then(() => search (new RegExp(fileName+"$")) (archiveDir)) - .then(fp => fsp.rename (fp[0], filePath)) - .then(() => fsp.unlink (archivePath)) - .then(() => fileHash ? checksum(fileHash)(filePath) : null) - .then(() => filePath)); - promise.onDataCallback = () => {}; - promise.onData = callback => { - promise.onDataCallback = callback || (() => {}); - return promise; - }; - return promise; -}; - -// String -> String ~> Promise String -// Like `safeDownloadArchivedFile`, but without the checksums. -const downloadArchived = url => path => - safeDownloadArchived (url) (null) (null) (path); - -// () => Promise Bool -// Tests the implementation by downloading a predetermined tar.gz -// from a mocked HTTP-server into a mocked filesystem. Does some -// redundancy tests such as checking the file constents and double -// checking its MD5 hash. -// Returns a promise containing a boolean, true if tests passed. -const test = () => { - const filePath = "/swarm/foo.txt"; - const fileHash = "d3b07384d113edec49eaa6238ad5ff00"; - const archiveUrl = "http://localhost:12534"; - const archiveHash = "7fa45f946bb2a696bdd9972e0fbceac2"; - const archiveData = new Buffer([ - 0x1f,0x8b,0x08,0x00,0xf1,0x34,0xaf,0x58,0x00,0x03,0xed,0xcf,0x3d,0x0e,0x83,0x30, - 0x0c,0x86,0x61,0x66,0x4e,0xe1,0x13,0x54,0xce,0x0f,0xc9,0x79,0x58,0xb2,0x46,0x82, - 0x14,0x71,0x7c,0xd2,0x06,0x31,0x52,0x75,0x40,0x08,0xe9,0x7d,0x96,0x4f,0x96,0x3d, - 0x7c,0x4e,0x39,0xbf,0xca,0x5a,0xba,0x2b,0xa9,0x6a,0xf0,0x5e,0x3e,0x19,0xc3,0xf0, - 0x4d,0xb5,0x6d,0xde,0x79,0x31,0x4e,0x07,0x17,0x9c,0xb5,0x31,0x8a,0x1a,0xab,0xc6, - 0x77,0xa2,0x97,0xb6,0xda,0xbd,0xe7,0x32,0x4e,0xb5,0xca,0xf2,0xe3,0xae,0x9e,0xa5, - 0x74,0xb2,0x6f,0x8f,0xc8,0x91,0x0f,0x91,0x72,0xee,0xef,0xee,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xdf,0x06,0xb3,0x2a,0xda, - 0xed,0x00,0x28,0x00,0x00]); - - const crypto = require("crypto"); - const fsMock = require("mock-fs")({"/swarm":{}}); - const httpMock = require("http") - .createServer((_,res) => res.end(archiveData)) - .listen(12534); - - return safeDownloadArchived (archiveUrl) (archiveHash) (fileHash) (filePath) - .then(checksum (fileHash)) - .then(readUTF8) - .then(text => text === "foo\n") - .then(assert) - .then(() => safeDownloadArchived (archiveUrl) (archiveHash) (fileHash) (filePath)) - .then(() => true) - .catch(false) - .finally(() => httpMock.close()); -}; - -module.exports = { - download, - hash, - checksum, - downloadAndCheck, - extract, - readUTF8, - safeDownloadArchived, - directoryTree, - downloadArchived, - search, - test -}; diff --git a/truebit-implementation/node_modules/swarm-js/src/pick.js b/truebit-implementation/node_modules/swarm-js/src/pick.js deleted file mode 100644 index 224cc2dd..00000000 --- a/truebit-implementation/node_modules/swarm-js/src/pick.js +++ /dev/null @@ -1,54 +0,0 @@ -const picker = type => () => new Promise((resolve, reject) => { - const fileLoader = e => { - const directory = {}; - const totalFiles = e.target.files.length; - let loadedFiles = 0; - [].map.call(e.target.files, file => { - const reader = new FileReader(); - reader.onload = e => { - const data = new Uint8Array(e.target.result); - if (type === "directory") { - const path = file.webkitRelativePath; - directory[path.slice(path.indexOf("/")+1)] = { - type: "text/plain", - data: data - }; - if (++loadedFiles === totalFiles) - resolve(directory); - } else if (type === "file") { - const path = file.webkitRelativePath; - resolve({"type": mimetype.lookup(path), "data": data}); - } else { - resolve(data); - } - }; - reader.readAsArrayBuffer(file); - }); - }; - - let fileInput; - if (type === "directory") { - fileInput = document.createElement("input"); - fileInput.addEventListener("change", fileLoader); - fileInput.type = "file"; - fileInput.webkitdirectory = true; - fileInput.mozdirectory = true; - fileInput.msdirectory = true; - fileInput.odirectory = true; - fileInput.directory = true; - } else { - fileInput = document.createElement("input"); - fileInput.addEventListener("change", fileLoader); - fileInput.type = "file"; - }; - - const mouseEvent = document.createEvent("MouseEvents"); - mouseEvent.initEvent("click", true, false); - fileInput.dispatchEvent(mouseEvent); -}); - -module.exports = { - data: picker("data"), - file: picker("file"), - directory: picker("directory"), -} diff --git a/truebit-implementation/node_modules/swarm-js/src/swarm-hash.js b/truebit-implementation/node_modules/swarm-js/src/swarm-hash.js deleted file mode 100644 index 56135cb0..00000000 --- a/truebit-implementation/node_modules/swarm-js/src/swarm-hash.js +++ /dev/null @@ -1,40 +0,0 @@ -// Thanks https://github.com/axic/swarmhash - -const keccak = require("eth-lib/lib/hash").keccak256; -const Bytes = require("eth-lib/lib/bytes"); - -const swarmHashBlock = (length, data) => { - const lengthEncoded = Bytes.reverse(Bytes.pad(6, Bytes.fromNumber(length))); - const bytes = Bytes.flatten([lengthEncoded, "0x0000", data]); - return keccak(bytes).slice(2); -}; - -// (Bytes | Uint8Array | String) -> String -const swarmHash = data => { - if (typeof data === "string" && data.slice(0,2) !== "0x") { - data = Bytes.fromString(data); - } else if (typeof data !== "string" && data.length !== undefined) { - data = Bytes.fromUint8Array(data); - } - - const length = Bytes.length(data); - - if (length <= 4096) { - return swarmHashBlock(length, data); - } - - let maxSize = 4096; - while ((maxSize * (4096 / 32)) < length) { - maxSize *= (4096 / 32); - } - - let innerNodes = []; - for (let i = 0; i < length; i += maxSize) { - const size = (maxSize < (length - i)) ? maxSize : (length - i); - innerNodes.push(swarmHash(Bytes.slice(data, i, i + size))); - } - - return swarmHashBlock(length, Bytes.flatten(innerNodes)); -}; - -module.exports = swarmHash; diff --git a/truebit-implementation/node_modules/swarm-js/src/swarm.js b/truebit-implementation/node_modules/swarm-js/src/swarm.js deleted file mode 100644 index 5d5ae393..00000000 --- a/truebit-implementation/node_modules/swarm-js/src/swarm.js +++ /dev/null @@ -1,490 +0,0 @@ -// TODO: this is a temporary fix to hide those libraries from the browser. A -// slightly better long-term solution would be to split this file into two, -// separating the functions that are used on Node.js from the functions that -// are used only on the browser. -module.exports = ({ - fsp, - files, - os, - path, - child_process, - mimetype, - defaultArchives, - request, - downloadUrl, - bytes, - hash, - pick -}) => { - - // ∀ a . String -> JSON -> Map String a -o Map String a - // Inserts a key/val pair in an object impurely. - const impureInsert = key => val => map => - (map[key] = val, map); - - // String -> JSON -> Map String JSON - // Merges an array of keys and an array of vals into an object. - const toMap = keys => vals => { - let map = {}; - for (let i = 0, l = keys.length; i < l; ++i) - map[keys[i]] = vals[i]; - return map; - }; - - // ∀ a . Map String a -> Map String a -> Map String a - // Merges two maps into one. - const merge = a => b => { - let map = {}; - for (let key in a) - map[key] = a[key]; - for (let key in b) - map[key] = b[key]; - return map; - }; - - // ∀ a . [a] -> [a] -> Bool - const equals = a => b => { - if (a.length !== b.length) { - return false; - } else { - for (let i = 0, l = a.length; i < a; ++i) { - if (a[i] !== b[i]) return false; - } - } - return true; - } - - // String -> String -> String - const rawUrl = swarmUrl => hash => - `${swarmUrl}/bzzr:/${hash}` - - // String -> String -> Promise Uint8Array - // Gets the raw contents of a Swarm hash address. - const downloadData = swarmUrl => hash => - request(rawUrl(swarmUrl)(hash), {responseType: "arraybuffer"}) - .then(arrayBuffer => { - const uint8Array = new Uint8Array(arrayBuffer); - const error404 = [52,48,52,32,112,97,103,101,32,110,111,116,32,102,111,117,110,100,10]; - if (equals(uint8Array)(error404)) - throw "Error 404."; - return uint8Array; - }); - - // type Entry = {"type": String, "hash": String} - // type File = {"type": String, "data": Uint8Array} - - // String -> String -> Promise (Map String Entry) - // Solves the manifest of a Swarm address recursively. - // Returns a map from full paths to entries. - const downloadEntries = swarmUrl => hash => { - const search = hash => path => routes => { - // Formats an entry to the Swarm.js type. - const format = entry => ({ - type: entry.contentType, - hash: entry.hash}); - - // To download a single entry: - // if type is bzz-manifest, go deeper - // if not, add it to the routing table - const downloadEntry = entry => { - if (entry.path === undefined) { - return Promise.resolve(); - } else { - return entry.contentType === "application/bzz-manifest+json" - ? search (entry.hash) (path + entry.path) (routes) - : Promise.resolve (impureInsert (path + entry.path) (format(entry)) (routes)); - } - } - - // Downloads the initial manifest and then each entry. - return downloadData(swarmUrl)(hash) - .then(text => JSON.parse(toString(text)).entries) - .then(entries => Promise.all(entries.map(downloadEntry))) - .then(() => routes); - } - - return search (hash) ("") ({}); - } - - // String -> String -> Promise (Map String String) - // Same as `downloadEntries`, but returns only hashes (no types). - const downloadRoutes = swarmUrl => hash => - downloadEntries(swarmUrl)(hash) - .then(entries => toMap - (Object.keys(entries)) - (Object.keys(entries).map(route => entries[route].hash))); - - // String -> String -> Promise (Map String File) - // Gets the entire directory tree in a Swarm address. - // Returns a promise mapping paths to file contents. - const downloadDirectory = swarmUrl => hash => - downloadEntries (swarmUrl) (hash) - .then(entries => { - const paths = Object.keys(entries); - const hashs = paths.map(path => entries[path].hash); - const types = paths.map(path => entries[path].type); - const datas = hashs.map(downloadData(swarmUrl)); - const files = datas => datas.map((data, i) => ({type: types[i], data: data})); - return Promise.all(datas).then(datas => toMap(paths)(files(datas))); - }); - - // String -> String -> String -> Promise String - // Gets the raw contents of a Swarm hash address. - // Returns a promise with the downloaded file path. - const downloadDataToDisk = swarmUrl => hash => filePath => - files.download (rawUrl(swarmUrl)(hash)) (filePath); - - // String -> String -> String -> Promise (Map String String) - // Gets the entire directory tree in a Swarm address. - // Returns a promise mapping paths to file contents. - const downloadDirectoryToDisk = swarmUrl => hash => dirPath => - downloadRoutes (swarmUrl) (hash) - .then(routingTable => { - let downloads = []; - for (let route in routingTable) { - if (route.length > 0) { - const filePath = path.join(dirPath, route); - downloads.push(downloadDataToDisk(swarmUrl)(routingTable[route])(filePath)); - }; - }; - return Promise.all(downloads).then(() => dirPath); - }); - - // String -> Uint8Array -> Promise String - // Uploads raw data to Swarm. - // Returns a promise with the uploaded hash. - const uploadData = swarmUrl => data => - request(`${swarmUrl}/bzzr:/`, { - body: typeof data === "string" ? fromString(data) : data, - method: "POST"}); - - // String -> String -> String -> File -> Promise String - // Uploads a file to the Swarm manifest at a given hash, under a specific - // route. Returns a promise containing the uploaded hash. - // FIXME: for some reasons Swarm-Gateways is sometimes returning - // error 404 (bad request), so we retry up to 3 times. Why? - const uploadToManifest = swarmUrl => hash => route => file => { - const attempt = n => { - const slashRoute = route[0] === "/" ? route : "/" + route; - const url = `${swarmUrl}/bzz:/${hash}${slashRoute}`; - const opt = { - method: "PUT", - headers: {"Content-Type": file.type}, - body: file.data}; - return request(url, opt) - .then(response => { - if (response.indexOf("error") !== -1) { - throw response; - } - return response; - }) - .catch(e => n > 0 && attempt(n-1)); - }; - return attempt(3); - }; - - // String -> {type: String, data: Uint8Array} -> Promise String - const uploadFile = swarmUrl => file => - uploadDirectory(swarmUrl)({"": file}); - - // String -> String -> Promise String - const uploadFileFromDisk = swarmUrl => filePath => - fsp.readFile(filePath) - .then(data => uploadFile(swarmUrl)({type: mimetype.lookup(filePath), data: data})); - - // String -> Map String File -> Promise String - // Uploads a directory to Swarm. The directory is - // represented as a map of routes and files. - // A default path is encoded by having a "" route. - const uploadDirectory = swarmUrl => directory => - uploadData(swarmUrl)("{}") - .then(hash => { - const uploadRoute = route => hash => uploadToManifest(swarmUrl)(hash)(route)(directory[route]); - const uploadToHash = (hash, route) => hash.then(uploadRoute(route)); - return Object.keys(directory).reduce(uploadToHash, Promise.resolve(hash)); - }); - - // String -> Promise String - const uploadDataFromDisk = swarmUrl => filePath => - fsp.readFile(filePath) - .then(uploadData(swarmUrl)); - - // String -> Nullable String -> String -> Promise String - const uploadDirectoryFromDisk = swarmUrl => defaultPath => dirPath => - files.directoryTree(dirPath) - .then(fullPaths => Promise.all(fullPaths.map(path => fsp.readFile(path))).then(datas => { - const paths = fullPaths.map(path => path.slice(dirPath.length)); - const types = fullPaths.map(path => mimetype.lookup(path) || "text/plain"); - return toMap (paths) (datas.map((data, i) => ({type: types[i], data: data}))); - })) - .then(directory => merge (defaultPath ? {"": directory[defaultPath]} : {}) (directory)) - .then(uploadDirectory(swarmUrl)); - - // String -> UploadInfo -> Promise String - // Simplified multi-type upload which calls the correct - // one based on the type of the argument given. - const upload = swarmUrl => arg => { - // Upload raw data from browser - if (arg.pick === "data") { - return pick.data().then(uploadData(swarmUrl)); - - // Upload a file from browser - } else if (arg.pick === "file") { - return pick.file().then(uploadFile(swarmUrl)); - - // Upload a directory from browser - } else if (arg.pick === "directory") { - return pick.directory().then(uploadDirectory(swarmUrl)); - - // Upload directory/file from disk - } else if (arg.path) { - switch (arg.kind) { - case "data": return uploadDataFromDisk(swarmUrl)(arg.path); - case "file": return uploadFileFromDisk(swarmUrl)(arg.path); - case "directory": return uploadDirectoryFromDisk(swarmUrl)(arg.defaultFile)(arg.path); - }; - - // Upload UTF-8 string or raw data (buffer) - } else if (arg.length || typeof arg === "string") { - return uploadData(swarmUrl)(arg); - - // Upload directory with JSON - } else if (arg instanceof Object) { - return uploadDirectory(swarmUrl)(arg); - } - - return Promise.reject(new Error("Bad arguments")); - } - - // String -> String -> Nullable String -> Promise (String | Uint8Array | Map String Uint8Array) - // Simplified multi-type download which calls the correct function based on - // the type of the argument given, and on whether the Swwarm address has a - // directory or a file. - const download = swarmUrl => hash => path => - isDirectory(swarmUrl)(hash).then(isDir => { - if (isDir) { - return path - ? downloadDirectoryToDisk(swarmUrl)(hash)(path) - : downloadDirectory(swarmUrl)(hash); - } else { - return path - ? downloadDataToDisk(swarmUrl)(hash)(path) - : downloadData(swarmUrl)(hash); - } - }); - - // String -> Promise String - // Downloads the Swarm binaries into a path. Returns a promise that only - // resolves when the exact Swarm file is there, and verified to be correct. - // If it was already there to begin with, skips the download. - const downloadBinary = (path, archives) => { - const system = os.platform().replace("win32","windows") + "-" + (os.arch() === "x64" ? "amd64" : "386"); - const archive = (archives || defaultArchives)[system]; - const archiveUrl = downloadUrl + archive.archive + ".tar.gz"; - const archiveMD5 = archive.archiveMD5; - const binaryMD5 = archive.binaryMD5; - return files.safeDownloadArchived(archiveUrl)(archiveMD5)(binaryMD5)(path); - }; - - // type SwarmSetup = { - // account : String, - // password : String, - // dataDir : String, - // binPath : String, - // ensApi : String, - // onDownloadProgress : Number ~> (), - // archives : [{ - // archive: String, - // binaryMD5: String, - // archiveMD5: String - // }] - // } - - // SwarmSetup ~> Promise Process - // Starts the Swarm process. - const startProcess = swarmSetup => new Promise((resolve, reject) => { - const {spawn} = child_process; - - const hasString = str => buffer => ('' + buffer).indexOf(str) !== -1; - const {account, password, dataDir, ensApi, privateKey} = swarmSetup; - - const STARTUP_TIMEOUT_SECS = 3; - const WAITING_PASSWORD = 0; - const STARTING = 1; - const LISTENING = 2; - const PASSWORD_PROMPT_HOOK = "Passphrase"; - const LISTENING_HOOK = "Swarm http proxy started"; - - let state = WAITING_PASSWORD; - - const swarmProcess = spawn(swarmSetup.binPath, [ - '--bzzaccount', account || privateKey, - '--datadir', dataDir, - '--ens-api', ensApi]); - - const handleProcessOutput = data => { - if (state === WAITING_PASSWORD && hasString (PASSWORD_PROMPT_HOOK) (data)) { - setTimeout(() => { - state = STARTING; - swarmProcess.stdin.write(password + '\n'); - }, 500); - } else if (hasString (LISTENING_HOOK) (data)) { - state = LISTENING; - clearTimeout(timeout); - resolve(swarmProcess); - } - } - - swarmProcess.stdout.on('data', handleProcessOutput); - swarmProcess.stderr.on('data', handleProcessOutput); - //swarmProcess.on('close', () => setTimeout(restart, 2000)); - - let restart = () => startProcess(swarmSetup).then(resolve).catch(reject); - let error = () => reject(new Error("Couldn't start swarm process.")); - let timeout = setTimeout(error, 20000); - }); - - // Process ~> Promise () - // Stops the Swarm process. - const stopProcess = process => new Promise((resolve, reject) => { - process.stderr.removeAllListeners('data'); - process.stdout.removeAllListeners('data'); - process.stdin.removeAllListeners('error'); - process.removeAllListeners('error'); - process.removeAllListeners('exit'); - process.kill('SIGINT'); - - const killTimeout = setTimeout( - () => process.kill('SIGKILL'), - 8000); - - process.once('close', () => { - clearTimeout(killTimeout); - resolve(); - }); - }); - - // SwarmSetup -> (SwarmAPI -> Promise ()) -> Promise () - // Receives a Swarm configuration object and a callback function. It then - // checks if a local Swarm node is running. If no local Swarm is found, it - // downloads the Swarm binaries to the dataDir (if not there), checksums, - // starts the Swarm process and calls the callback function with an API - // object using the local node. That callback must return a promise which - // will resolve when it is done using the API, so that this function can - // close the Swarm process properly. Returns a promise that resolves when the - // user is done with the API and the Swarm process is closed. - // TODO: check if Swarm process is already running (improve `isAvailable`) - const local = swarmSetup => useAPI => - isAvailable("http://localhost:8500").then(isAvailable => - isAvailable - ? useAPI(at("http://localhost:8500")).then(() => {}) - : downloadBinary(swarmSetup.binPath, swarmSetup.archives) - .onData(data => (swarmSetup.onProgress || (() => {}))(data.length)) - .then(() => startProcess(swarmSetup)) - .then(process => useAPI(at("http://localhost:8500")).then(() => process)) - .then(stopProcess)); - - // String ~> Promise Bool - // Returns true if Swarm is available on `url`. - // Perfoms a test upload to determine that. - // TODO: improve this? - const isAvailable = swarmUrl => { - const testFile = "test"; - const testHash = "c9a99c7d326dcc6316f32fe2625b311f6dc49a175e6877681ded93137d3569e7"; - return uploadData(swarmUrl)(testFile) - .then(hash => hash === testHash) - .catch(() => false); - }; - - // String -> String ~> Promise Bool - // Returns a Promise which is true if that Swarm address is a directory. - // Determines that by checking that it (i) is a JSON, (ii) has a .entries. - // TODO: improve this? - const isDirectory = swarmUrl => hash => - downloadData(swarmUrl)(hash) - .then(data => { - try { - return !!JSON.parse(toString(data)).entries; - } catch (e) { - return false; - } - }); - - // Uncurries a function; used to allow the f(x,y,z) style on exports. - const uncurry = f => (a,b,c,d,e) => { - var p; - // Hardcoded because efficiency (`arguments` is very slow). - if (typeof a !== "undefined") p = f(a); - if (typeof b !== "undefined") p = f(b); - if (typeof c !== "undefined") p = f(c); - if (typeof d !== "undefined") p = f(d); - if (typeof e !== "undefined") p = f(e); - return p; - }; - - // () -> Promise Bool - // Not sure how to mock Swarm to test it properly. Ideas? - const test = () => Promise.resolve(true); - - // Uint8Array -> String - const toString = uint8Array => - bytes.toString(bytes.fromUint8Array(uint8Array)); - - // String -> Uint8Array - const fromString = string => - bytes.toUint8Array(bytes.fromString(string)); - - // String -> SwarmAPI - // Fixes the `swarmUrl`, returning an API where you don't have to pass it. - const at = swarmUrl => ({ - download: (hash,path) => download(swarmUrl)(hash)(path), - downloadData: uncurry(downloadData(swarmUrl)), - downloadDataToDisk: uncurry(downloadDataToDisk(swarmUrl)), - downloadDirectory: uncurry(downloadDirectory(swarmUrl)), - downloadDirectoryToDisk: uncurry(downloadDirectoryToDisk(swarmUrl)), - downloadEntries: uncurry(downloadEntries(swarmUrl)), - downloadRoutes: uncurry(downloadRoutes(swarmUrl)), - isAvailable: () => isAvailable(swarmUrl), - upload: (arg) => upload(swarmUrl)(arg), - uploadData: uncurry(uploadData(swarmUrl)), - uploadFile: uncurry(uploadFile(swarmUrl)), - uploadFileFromDisk: uncurry(uploadFile(swarmUrl)), - uploadDataFromDisk: uncurry(uploadDataFromDisk(swarmUrl)), - uploadDirectory: uncurry(uploadDirectory(swarmUrl)), - uploadDirectoryFromDisk: uncurry(uploadDirectoryFromDisk(swarmUrl)), - uploadToManifest: uncurry(uploadToManifest(swarmUrl)), - pick: pick, - hash: hash, - fromString: fromString, - toString: toString - }); - - return { - at, - local, - download, - downloadBinary, - downloadData, - downloadDataToDisk, - downloadDirectory, - downloadDirectoryToDisk, - downloadEntries, - downloadRoutes, - isAvailable, - startProcess, - stopProcess, - upload, - uploadData, - uploadDataFromDisk, - uploadFile, - uploadFileFromDisk, - uploadDirectory, - uploadDirectoryFromDisk, - uploadToManifest, - pick, - hash, - fromString, - toString - }; - -}; diff --git a/truebit-implementation/node_modules/tar-stream/LICENSE b/truebit-implementation/node_modules/tar-stream/LICENSE deleted file mode 100644 index 757562ec..00000000 --- a/truebit-implementation/node_modules/tar-stream/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/tar-stream/README.md b/truebit-implementation/node_modules/tar-stream/README.md deleted file mode 100644 index 96abbca1..00000000 --- a/truebit-implementation/node_modules/tar-stream/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# tar-stream - -tar-stream is a streaming tar parser and generator and nothing else. It is streams2 and operates purely using streams which means you can easily extract/parse tarballs without ever hitting the file system. - -Note that you still need to gunzip your data if you have a `.tar.gz`. We recommend using [gunzip-maybe](https://github.com/mafintosh/gunzip-maybe) in conjunction with this. - -``` -npm install tar-stream -``` - -[![build status](https://secure.travis-ci.org/mafintosh/tar-stream.png)](http://travis-ci.org/mafintosh/tar-stream) -[![License](https://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT) - -## Usage - -tar-stream exposes two streams, [pack](https://github.com/mafintosh/tar-stream#packing) which creates tarballs and [extract](https://github.com/mafintosh/tar-stream#extracting) which extracts tarballs. To [modify an existing tarball](https://github.com/mafintosh/tar-stream#modifying-existing-tarballs) use both. - - -It implementes USTAR with additional support for pax extended headers. It should be compatible with all popular tar distributions out there (gnutar, bsdtar etc) - -## Related - -If you want to pack/unpack directories on the file system check out [tar-fs](https://github.com/mafintosh/tar-fs) which provides file system bindings to this module. - -## Packing - -To create a pack stream use `tar.pack()` and call `pack.entry(header, [callback])` to add tar entries. - -``` js -var tar = require('tar-stream') -var pack = tar.pack() // pack is a streams2 stream - -// add a file called my-test.txt with the content "Hello World!" -pack.entry({ name: 'my-test.txt' }, 'Hello World!') - -// add a file called my-stream-test.txt from a stream -var entry = pack.entry({ name: 'my-stream-test.txt', size: 11 }, function(err) { - // the stream was added - // no more entries - pack.finalize() -}) - -entry.write('hello') -entry.write(' ') -entry.write('world') -entry.end() - -// pipe the pack stream somewhere -pack.pipe(process.stdout) -``` - -## Extracting - -To extract a stream use `tar.extract()` and listen for `extract.on('entry', (header, stream, next) )` - -``` js -var extract = tar.extract() - -extract.on('entry', function(header, stream, next) { - // header is the tar header - // stream is the content body (might be an empty stream) - // call next when you are done with this entry - - stream.on('end', function() { - next() // ready for next entry - }) - - stream.resume() // just auto drain the stream -}) - -extract.on('finish', function() { - // all entries read -}) - -pack.pipe(extract) -``` - -The tar archive is streamed sequentially, meaning you **must** drain each entry's stream as you get them or else the main extract stream will receive backpressure and stop reading. - -## Headers - -The header object using in `entry` should contain the following properties. -Most of these values can be found by stat'ing a file. - -``` js -{ - name: 'path/to/this/entry.txt', - size: 1314, // entry size. defaults to 0 - mode: 0644, // entry mode. defaults to to 0755 for dirs and 0644 otherwise - mtime: new Date(), // last modified date for entry. defaults to now. - type: 'file', // type of entry. defaults to file. can be: - // file | link | symlink | directory | block-device - // character-device | fifo | contiguous-file - linkname: 'path', // linked file name - uid: 0, // uid of entry owner. defaults to 0 - gid: 0, // gid of entry owner. defaults to 0 - uname: 'maf', // uname of entry owner. defaults to null - gname: 'staff', // gname of entry owner. defaults to null - devmajor: 0, // device major version. defaults to 0 - devminor: 0 // device minor version. defaults to 0 -} -``` - -## Modifying existing tarballs - -Using tar-stream it is easy to rewrite paths / change modes etc in an existing tarball. - -``` js -var extract = tar.extract() -var pack = tar.pack() -var path = require('path') - -extract.on('entry', function(header, stream, callback) { - // let's prefix all names with 'tmp' - header.name = path.join('tmp', header.name) - // write the new entry to the pack stream - stream.pipe(pack.entry(header, callback)) -}) - -extract.on('finish', function() { - // all entries done - lets finalize it - pack.finalize() -}) - -// pipe the old tarball to the extractor -oldTarballStream.pipe(extract) - -// pipe the new tarball the another stream -pack.pipe(newTarballStream) -``` - -## Saving tarball to fs - - -``` js -var fs = require('fs') -var tar = require('tar-stream') - -var pack = tar.pack() // pack is a streams2 stream -var path = 'YourTarBall.tar' -var yourTarball = fs.createWriteStream(path) - -// add a file called YourFile.txt with the content "Hello World!" -pack.entry({name: 'YourFile.txt'}, 'Hello World!', function (err) { - if (err) throw err - pack.finalize() -}) - -// pipe the pack stream to your file -pack.pipe(yourTarball) - -yourTarball.on('close', function () { - console.log(path + ' has been written') - fs.stat(path, function(err, stats) { - if (err) throw err - console.log(stats) - console.log('Got file info successfully!') - }) -}) -``` - -## Performance - -[See tar-fs for a performance comparison with node-tar](https://github.com/mafintosh/tar-fs/blob/master/README.md#performance) - -# License - -MIT diff --git a/truebit-implementation/node_modules/tar-stream/extract.js b/truebit-implementation/node_modules/tar-stream/extract.js deleted file mode 100644 index 19a4255a..00000000 --- a/truebit-implementation/node_modules/tar-stream/extract.js +++ /dev/null @@ -1,258 +0,0 @@ -var util = require('util') -var bl = require('bl') -var xtend = require('xtend') -var headers = require('./headers') - -var Writable = require('readable-stream').Writable -var PassThrough = require('readable-stream').PassThrough - -var noop = function () {} - -var overflow = function (size) { - size &= 511 - return size && 512 - size -} - -var emptyStream = function (self, offset) { - var s = new Source(self, offset) - s.end() - return s -} - -var mixinPax = function (header, pax) { - if (pax.path) header.name = pax.path - if (pax.linkpath) header.linkname = pax.linkpath - if (pax.size) header.size = parseInt(pax.size, 10) - header.pax = pax - return header -} - -var Source = function (self, offset) { - this._parent = self - this.offset = offset - PassThrough.call(this) -} - -util.inherits(Source, PassThrough) - -Source.prototype.destroy = function (err) { - this._parent.destroy(err) -} - -var Extract = function (opts) { - if (!(this instanceof Extract)) return new Extract(opts) - Writable.call(this, opts) - - opts = opts || {} - - this._offset = 0 - this._buffer = bl() - this._missing = 0 - this._partial = false - this._onparse = noop - this._header = null - this._stream = null - this._overflow = null - this._cb = null - this._locked = false - this._destroyed = false - this._pax = null - this._paxGlobal = null - this._gnuLongPath = null - this._gnuLongLinkPath = null - - var self = this - var b = self._buffer - - var oncontinue = function () { - self._continue() - } - - var onunlock = function (err) { - self._locked = false - if (err) return self.destroy(err) - if (!self._stream) oncontinue() - } - - var onstreamend = function () { - self._stream = null - var drain = overflow(self._header.size) - if (drain) self._parse(drain, ondrain) - else self._parse(512, onheader) - if (!self._locked) oncontinue() - } - - var ondrain = function () { - self._buffer.consume(overflow(self._header.size)) - self._parse(512, onheader) - oncontinue() - } - - var onpaxglobalheader = function () { - var size = self._header.size - self._paxGlobal = headers.decodePax(b.slice(0, size)) - b.consume(size) - onstreamend() - } - - var onpaxheader = function () { - var size = self._header.size - self._pax = headers.decodePax(b.slice(0, size)) - if (self._paxGlobal) self._pax = xtend(self._paxGlobal, self._pax) - b.consume(size) - onstreamend() - } - - var ongnulongpath = function () { - var size = self._header.size - this._gnuLongPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding) - b.consume(size) - onstreamend() - } - - var ongnulonglinkpath = function () { - var size = self._header.size - this._gnuLongLinkPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding) - b.consume(size) - onstreamend() - } - - var onheader = function () { - var offset = self._offset - var header - try { - header = self._header = headers.decode(b.slice(0, 512), opts.filenameEncoding) - } catch (err) { - self.emit('error', err) - } - b.consume(512) - - if (!header) { - self._parse(512, onheader) - oncontinue() - return - } - if (header.type === 'gnu-long-path') { - self._parse(header.size, ongnulongpath) - oncontinue() - return - } - if (header.type === 'gnu-long-link-path') { - self._parse(header.size, ongnulonglinkpath) - oncontinue() - return - } - if (header.type === 'pax-global-header') { - self._parse(header.size, onpaxglobalheader) - oncontinue() - return - } - if (header.type === 'pax-header') { - self._parse(header.size, onpaxheader) - oncontinue() - return - } - - if (self._gnuLongPath) { - header.name = self._gnuLongPath - self._gnuLongPath = null - } - - if (self._gnuLongLinkPath) { - header.linkname = self._gnuLongLinkPath - self._gnuLongLinkPath = null - } - - if (self._pax) { - self._header = header = mixinPax(header, self._pax) - self._pax = null - } - - self._locked = true - - if (!header.size || header.type === 'directory') { - self._parse(512, onheader) - self.emit('entry', header, emptyStream(self, offset), onunlock) - return - } - - self._stream = new Source(self, offset) - - self.emit('entry', header, self._stream, onunlock) - self._parse(header.size, onstreamend) - oncontinue() - } - - this._onheader = onheader - this._parse(512, onheader) -} - -util.inherits(Extract, Writable) - -Extract.prototype.destroy = function (err) { - if (this._destroyed) return - this._destroyed = true - - if (err) this.emit('error', err) - this.emit('close') - if (this._stream) this._stream.emit('close') -} - -Extract.prototype._parse = function (size, onparse) { - if (this._destroyed) return - this._offset += size - this._missing = size - if (onparse === this._onheader) this._partial = false - this._onparse = onparse -} - -Extract.prototype._continue = function () { - if (this._destroyed) return - var cb = this._cb - this._cb = noop - if (this._overflow) this._write(this._overflow, undefined, cb) - else cb() -} - -Extract.prototype._write = function (data, enc, cb) { - if (this._destroyed) return - - var s = this._stream - var b = this._buffer - var missing = this._missing - if (data.length) this._partial = true - - // we do not reach end-of-chunk now. just forward it - - if (data.length < missing) { - this._missing -= data.length - this._overflow = null - if (s) return s.write(data, cb) - b.append(data) - return cb() - } - - // end-of-chunk. the parser should call cb. - - this._cb = cb - this._missing = 0 - - var overflow = null - if (data.length > missing) { - overflow = data.slice(missing) - data = data.slice(0, missing) - } - - if (s) s.end(data) - else b.append(data) - - this._overflow = overflow - this._onparse() -} - -Extract.prototype._final = function (cb) { - if (this._partial) return this.destroy(new Error('Unexpected end of data')) - cb() -} - -module.exports = Extract diff --git a/truebit-implementation/node_modules/tar-stream/headers.js b/truebit-implementation/node_modules/tar-stream/headers.js deleted file mode 100644 index 6efbc4a3..00000000 --- a/truebit-implementation/node_modules/tar-stream/headers.js +++ /dev/null @@ -1,283 +0,0 @@ -var toBuffer = require('to-buffer') -var alloc = require('buffer-alloc') - -var ZEROS = '0000000000000000000' -var SEVENS = '7777777777777777777' -var ZERO_OFFSET = '0'.charCodeAt(0) -var USTAR = 'ustar\x0000' -var MASK = parseInt('7777', 8) - -var clamp = function (index, len, defaultValue) { - if (typeof index !== 'number') return defaultValue - index = ~~index // Coerce to integer. - if (index >= len) return len - if (index >= 0) return index - index += len - if (index >= 0) return index - return 0 -} - -var toType = function (flag) { - switch (flag) { - case 0: - return 'file' - case 1: - return 'link' - case 2: - return 'symlink' - case 3: - return 'character-device' - case 4: - return 'block-device' - case 5: - return 'directory' - case 6: - return 'fifo' - case 7: - return 'contiguous-file' - case 72: - return 'pax-header' - case 55: - return 'pax-global-header' - case 27: - return 'gnu-long-link-path' - case 28: - case 30: - return 'gnu-long-path' - } - - return null -} - -var toTypeflag = function (flag) { - switch (flag) { - case 'file': - return 0 - case 'link': - return 1 - case 'symlink': - return 2 - case 'character-device': - return 3 - case 'block-device': - return 4 - case 'directory': - return 5 - case 'fifo': - return 6 - case 'contiguous-file': - return 7 - case 'pax-header': - return 72 - } - - return 0 -} - -var indexOf = function (block, num, offset, end) { - for (; offset < end; offset++) { - if (block[offset] === num) return offset - } - return end -} - -var cksum = function (block) { - var sum = 8 * 32 - for (var i = 0; i < 148; i++) sum += block[i] - for (var j = 156; j < 512; j++) sum += block[j] - return sum -} - -var encodeOct = function (val, n) { - val = val.toString(8) - if (val.length > n) return SEVENS.slice(0, n) + ' ' - else return ZEROS.slice(0, n - val.length) + val + ' ' -} - -/* Copied from the node-tar repo and modified to meet - * tar-stream coding standard. - * - * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349 - */ -function parse256 (buf) { - // first byte MUST be either 80 or FF - // 80 for positive, FF for 2's comp - var positive - if (buf[0] === 0x80) positive = true - else if (buf[0] === 0xFF) positive = false - else return null - - // build up a base-256 tuple from the least sig to the highest - var zero = false - var tuple = [] - for (var i = buf.length - 1; i > 0; i--) { - var byte = buf[i] - if (positive) tuple.push(byte) - else if (zero && byte === 0) tuple.push(0) - else if (zero) { - zero = false - tuple.push(0x100 - byte) - } else tuple.push(0xFF - byte) - } - - var sum = 0 - var l = tuple.length - for (i = 0; i < l; i++) { - sum += tuple[i] * Math.pow(256, i) - } - - return positive ? sum : -1 * sum -} - -var decodeOct = function (val, offset, length) { - val = val.slice(offset, offset + length) - offset = 0 - - // If prefixed with 0x80 then parse as a base-256 integer - if (val[offset] & 0x80) { - return parse256(val) - } else { - // Older versions of tar can prefix with spaces - while (offset < val.length && val[offset] === 32) offset++ - var end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length) - while (offset < end && val[offset] === 0) offset++ - if (end === offset) return 0 - return parseInt(val.slice(offset, end).toString(), 8) - } -} - -var decodeStr = function (val, offset, length, encoding) { - return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString(encoding) -} - -var addLength = function (str) { - var len = Buffer.byteLength(str) - var digits = Math.floor(Math.log(len) / Math.log(10)) + 1 - if (len + digits >= Math.pow(10, digits)) digits++ - - return (len + digits) + str -} - -exports.decodeLongPath = function (buf, encoding) { - return decodeStr(buf, 0, buf.length, encoding) -} - -exports.encodePax = function (opts) { // TODO: encode more stuff in pax - var result = '' - if (opts.name) result += addLength(' path=' + opts.name + '\n') - if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\n') - var pax = opts.pax - if (pax) { - for (var key in pax) { - result += addLength(' ' + key + '=' + pax[key] + '\n') - } - } - return toBuffer(result) -} - -exports.decodePax = function (buf) { - var result = {} - - while (buf.length) { - var i = 0 - while (i < buf.length && buf[i] !== 32) i++ - var len = parseInt(buf.slice(0, i).toString(), 10) - if (!len) return result - - var b = buf.slice(i + 1, len - 1).toString() - var keyIndex = b.indexOf('=') - if (keyIndex === -1) return result - result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1) - - buf = buf.slice(len) - } - - return result -} - -exports.encode = function (opts) { - var buf = alloc(512) - var name = opts.name - var prefix = '' - - if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/' - if (Buffer.byteLength(name) !== name.length) return null // utf-8 - - while (Buffer.byteLength(name) > 100) { - var i = name.indexOf('/') - if (i === -1) return null - prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i) - name = name.slice(i + 1) - } - - if (Buffer.byteLength(name) > 100 || Buffer.byteLength(prefix) > 155) return null - if (opts.linkname && Buffer.byteLength(opts.linkname) > 100) return null - - buf.write(name) - buf.write(encodeOct(opts.mode & MASK, 6), 100) - buf.write(encodeOct(opts.uid, 6), 108) - buf.write(encodeOct(opts.gid, 6), 116) - buf.write(encodeOct(opts.size, 11), 124) - buf.write(encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136) - - buf[156] = ZERO_OFFSET + toTypeflag(opts.type) - - if (opts.linkname) buf.write(opts.linkname, 157) - - buf.write(USTAR, 257) - if (opts.uname) buf.write(opts.uname, 265) - if (opts.gname) buf.write(opts.gname, 297) - buf.write(encodeOct(opts.devmajor || 0, 6), 329) - buf.write(encodeOct(opts.devminor || 0, 6), 337) - - if (prefix) buf.write(prefix, 345) - - buf.write(encodeOct(cksum(buf), 6), 148) - - return buf -} - -exports.decode = function (buf, filenameEncoding) { - var typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET - - var name = decodeStr(buf, 0, 100, filenameEncoding) - var mode = decodeOct(buf, 100, 8) - var uid = decodeOct(buf, 108, 8) - var gid = decodeOct(buf, 116, 8) - var size = decodeOct(buf, 124, 12) - var mtime = decodeOct(buf, 136, 12) - var type = toType(typeflag) - var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding) - var uname = decodeStr(buf, 265, 32) - var gname = decodeStr(buf, 297, 32) - var devmajor = decodeOct(buf, 329, 8) - var devminor = decodeOct(buf, 337, 8) - - if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name - - // to support old tar versions that use trailing / to indicate dirs - if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5 - - var c = cksum(buf) - - // checksum is still initial value if header was null. - if (c === 8 * 32) return null - - // valid checksum - if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?') - - return { - name: name, - mode: mode, - uid: uid, - gid: gid, - size: size, - mtime: new Date(1000 * mtime), - type: type, - linkname: linkname, - uname: uname, - gname: gname, - devmajor: devmajor, - devminor: devminor - } -} diff --git a/truebit-implementation/node_modules/tar-stream/index.js b/truebit-implementation/node_modules/tar-stream/index.js deleted file mode 100644 index 64817048..00000000 --- a/truebit-implementation/node_modules/tar-stream/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.extract = require('./extract') -exports.pack = require('./pack') diff --git a/truebit-implementation/node_modules/tar-stream/pack.js b/truebit-implementation/node_modules/tar-stream/pack.js deleted file mode 100644 index 72d96a0c..00000000 --- a/truebit-implementation/node_modules/tar-stream/pack.js +++ /dev/null @@ -1,255 +0,0 @@ -var constants = require('fs-constants') -var eos = require('end-of-stream') -var util = require('util') -var alloc = require('buffer-alloc') -var toBuffer = require('to-buffer') - -var Readable = require('readable-stream').Readable -var Writable = require('readable-stream').Writable -var StringDecoder = require('string_decoder').StringDecoder - -var headers = require('./headers') - -var DMODE = parseInt('755', 8) -var FMODE = parseInt('644', 8) - -var END_OF_TAR = alloc(1024) - -var noop = function () {} - -var overflow = function (self, size) { - size &= 511 - if (size) self.push(END_OF_TAR.slice(0, 512 - size)) -} - -function modeToType (mode) { - switch (mode & constants.S_IFMT) { - case constants.S_IFBLK: return 'block-device' - case constants.S_IFCHR: return 'character-device' - case constants.S_IFDIR: return 'directory' - case constants.S_IFIFO: return 'fifo' - case constants.S_IFLNK: return 'symlink' - } - - return 'file' -} - -var Sink = function (to) { - Writable.call(this) - this.written = 0 - this._to = to - this._destroyed = false -} - -util.inherits(Sink, Writable) - -Sink.prototype._write = function (data, enc, cb) { - this.written += data.length - if (this._to.push(data)) return cb() - this._to._drain = cb -} - -Sink.prototype.destroy = function () { - if (this._destroyed) return - this._destroyed = true - this.emit('close') -} - -var LinkSink = function () { - Writable.call(this) - this.linkname = '' - this._decoder = new StringDecoder('utf-8') - this._destroyed = false -} - -util.inherits(LinkSink, Writable) - -LinkSink.prototype._write = function (data, enc, cb) { - this.linkname += this._decoder.write(data) - cb() -} - -LinkSink.prototype.destroy = function () { - if (this._destroyed) return - this._destroyed = true - this.emit('close') -} - -var Void = function () { - Writable.call(this) - this._destroyed = false -} - -util.inherits(Void, Writable) - -Void.prototype._write = function (data, enc, cb) { - cb(new Error('No body allowed for this entry')) -} - -Void.prototype.destroy = function () { - if (this._destroyed) return - this._destroyed = true - this.emit('close') -} - -var Pack = function (opts) { - if (!(this instanceof Pack)) return new Pack(opts) - Readable.call(this, opts) - - this._drain = noop - this._finalized = false - this._finalizing = false - this._destroyed = false - this._stream = null -} - -util.inherits(Pack, Readable) - -Pack.prototype.entry = function (header, buffer, callback) { - if (this._stream) throw new Error('already piping an entry') - if (this._finalized || this._destroyed) return - - if (typeof buffer === 'function') { - callback = buffer - buffer = null - } - - if (!callback) callback = noop - - var self = this - - if (!header.size || header.type === 'symlink') header.size = 0 - if (!header.type) header.type = modeToType(header.mode) - if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE - if (!header.uid) header.uid = 0 - if (!header.gid) header.gid = 0 - if (!header.mtime) header.mtime = new Date() - - if (typeof buffer === 'string') buffer = toBuffer(buffer) - if (Buffer.isBuffer(buffer)) { - header.size = buffer.length - this._encode(header) - this.push(buffer) - overflow(self, header.size) - process.nextTick(callback) - return new Void() - } - - if (header.type === 'symlink' && !header.linkname) { - var linkSink = new LinkSink() - eos(linkSink, function (err) { - if (err) { // stream was closed - self.destroy() - return callback(err) - } - - header.linkname = linkSink.linkname - self._encode(header) - callback() - }) - - return linkSink - } - - this._encode(header) - - if (header.type !== 'file' && header.type !== 'contiguous-file') { - process.nextTick(callback) - return new Void() - } - - var sink = new Sink(this) - - this._stream = sink - - eos(sink, function (err) { - self._stream = null - - if (err) { // stream was closed - self.destroy() - return callback(err) - } - - if (sink.written !== header.size) { // corrupting tar - self.destroy() - return callback(new Error('size mismatch')) - } - - overflow(self, header.size) - if (self._finalizing) self.finalize() - callback() - }) - - return sink -} - -Pack.prototype.finalize = function () { - if (this._stream) { - this._finalizing = true - return - } - - if (this._finalized) return - this._finalized = true - this.push(END_OF_TAR) - this.push(null) -} - -Pack.prototype.destroy = function (err) { - if (this._destroyed) return - this._destroyed = true - - if (err) this.emit('error', err) - this.emit('close') - if (this._stream && this._stream.destroy) this._stream.destroy() -} - -Pack.prototype._encode = function (header) { - if (!header.pax) { - var buf = headers.encode(header) - if (buf) { - this.push(buf) - return - } - } - this._encodePax(header) -} - -Pack.prototype._encodePax = function (header) { - var paxHeader = headers.encodePax({ - name: header.name, - linkname: header.linkname, - pax: header.pax - }) - - var newHeader = { - name: 'PaxHeader', - mode: header.mode, - uid: header.uid, - gid: header.gid, - size: paxHeader.length, - mtime: header.mtime, - type: 'pax-header', - linkname: header.linkname && 'PaxHeader', - uname: header.uname, - gname: header.gname, - devmajor: header.devmajor, - devminor: header.devminor - } - - this.push(headers.encode(newHeader)) - this.push(paxHeader) - overflow(this, paxHeader.length) - - newHeader.size = header.size - newHeader.type = header.type - this.push(headers.encode(newHeader)) -} - -Pack.prototype._read = function (n) { - var drain = this._drain - this._drain = noop - drain() -} - -module.exports = Pack diff --git a/truebit-implementation/node_modules/tar-stream/package.json b/truebit-implementation/node_modules/tar-stream/package.json deleted file mode 100644 index 82ba09b4..00000000 --- a/truebit-implementation/node_modules/tar-stream/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_from": "tar-stream@^1.5.2", - "_id": "tar-stream@1.6.2", - "_inBundle": false, - "_integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "_location": "/tar-stream", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "tar-stream@^1.5.2", - "name": "tar-stream", - "escapedName": "tar-stream", - "rawSpec": "^1.5.2", - "saveSpec": null, - "fetchSpec": "^1.5.2" - }, - "_requiredBy": [ - "/decompress-tar" - ], - "_resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "_shasum": "8ea55dab37972253d9a9af90fdcd559ae435c555", - "_spec": "tar-stream@^1.5.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-tar", - "author": { - "name": "Mathias Buus", - "email": "mathiasbuus@gmail.com" - }, - "bugs": { - "url": "https://github.com/mafintosh/tar-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "deprecated": false, - "description": "tar-stream is a streaming tar parser and generator and nothing else. It is streams2 and operates purely using streams which means you can easily extract/parse tarballs without ever hitting the file system.", - "devDependencies": { - "concat-stream": "^1.6.2", - "standard": "^11.0.1", - "tape": "^4.9.0" - }, - "directories": { - "test": "test" - }, - "engines": { - "node": ">= 0.8.0" - }, - "files": [ - "*.js", - "LICENSE" - ], - "homepage": "https://github.com/mafintosh/tar-stream", - "keywords": [ - "tar", - "tarball", - "parse", - "parser", - "generate", - "generator", - "stream", - "stream2", - "streams", - "streams2", - "streaming", - "pack", - "extract", - "modify" - ], - "license": "MIT", - "main": "index.js", - "name": "tar-stream", - "repository": { - "type": "git", - "url": "git+https://github.com/mafintosh/tar-stream.git" - }, - "scripts": { - "test": "standard && tape test/extract.js test/pack.js", - "test-all": "standard && tape test/*.js" - }, - "version": "1.6.2" -} diff --git a/truebit-implementation/node_modules/tar.gz/LICENSE b/truebit-implementation/node_modules/tar.gz/LICENSE deleted file mode 100644 index 7da5d48a..00000000 --- a/truebit-implementation/node_modules/tar.gz/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015-2016, Alan Hoffmeister - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/tar.gz/README.md b/truebit-implementation/node_modules/tar.gz/README.md deleted file mode 100644 index 63b4f7e8..00000000 --- a/truebit-implementation/node_modules/tar.gz/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# ⚠️ This module isn't maintained anymore ⚠️ -# ⚠️ Este módulo ya no se mantiene ⚠️ -# ⚠️ 该模块不再被维护 ⚠️ - -No one should be using this module since it's not being maintained anymore. This -repository and the package will still be online for research purpose only. - -To interact with gzipped tarballs please use the tar module instead: -https://npmjs/com/tar - - -### License (ISC) - -``` -Copyright (c) 2015, Alan Hoffmeister - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -``` diff --git a/truebit-implementation/node_modules/tar.gz/bin/targz b/truebit-implementation/node_modules/tar.gz/bin/targz deleted file mode 100755 index a88a48b5..00000000 --- a/truebit-implementation/node_modules/tar.gz/bin/targz +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env node - -// jshint maxlen: 103 -var targz = require('../'); -var commander = require('commander'); -var package = require('../package.json'); -var fs = require('fs'); -commander.version(package.version); - -// Extract files -commander - .command('extract ') - .alias('e') - .description('Extracts the source tarball into the target directory') - .action(function(source, target) { - targz().extract(source, target, function(err) { - if (err) - throw err; - }); - }); - -// Compress files -commander - .command('compress ') - .alias('c') - .description('Compress the source directory into the target tarball') - .option('-l, --level', 'Compression level', 6) - .option('-m, --memlevel', 'Memory level used during compression', 6) - .action(function(source, target, options) { - targz({ - memLevel: options.memlevel, - level: options.level - }).compress(source, target, function(err) { - if (err) - throw err; - }); - }); - -// List paths -commander - .command('list ') - .alias('l') - .description('List all paths inside the source tarball') - .action(function(source) { - var parse = targz().createParseStream(); - parse.on('entry', function(entry) { - console.log(entry.path); - }); - - fs.createReadStream(source).pipe(parse); - }); - -// Catch all -commander.parse(process.argv); diff --git a/truebit-implementation/node_modules/tar.gz/history.md b/truebit-implementation/node_modules/tar.gz/history.md deleted file mode 100644 index 69fe1263..00000000 --- a/truebit-implementation/node_modules/tar.gz/history.md +++ /dev/null @@ -1,15 +0,0 @@ -### `v1.0.4` - -* Update fstream version to remove `graceful-fs` warning - -### `v1.0.2` - -* Exclude `bin` folder from `.npmignore` - -### `v1.0.1` - -* Fixed error from zlib not caught while extracting (#16) - -### `v1.0.0` - -* Full code refactoring, tests and integrations diff --git a/truebit-implementation/node_modules/tar.gz/index.js b/truebit-implementation/node_modules/tar.gz/index.js deleted file mode 100644 index 5bf05134..00000000 --- a/truebit-implementation/node_modules/tar.gz/index.js +++ /dev/null @@ -1,183 +0,0 @@ -var tar = require('tar'); -var fstream = require('fstream'); -var zlib = require('zlib'); -var mout = require('mout'); -var fs = require('fs'); -var bluebird = require('bluebird'); - -/** - * Construct and setup all tarball functions - * @param {Object} [zoptions] The zlib options https://goo.gl/R40wrD - * @param {Object} [toptions] The tar options https://goo.gl/bqklaR - * @class - */ -var TarGz = module.exports = function(zoptions, toptions) { - - // Chech if it's a new instance, otherwise initiate a new one - if (!(this instanceof TarGz)) - return new TarGz(zoptions, toptions); - - // Clone our options to avoid reference errors - this._options = { - zlib: zoptions ? mout.lang.deepClone(zoptions) : {}, - tar: toptions ? mout.lang.deepClone(toptions) : {} - }; -}; - -/** - * Creates a readstream that transforms a directory into a - * tarball stream that can be piped - * @param {String} directory The directory to be tarballed - * @return {Stream} A ReadStream that can be piped - */ -TarGz.prototype.createReadStream = function(directory) { - - // Create all needed streams - var stream1 = fstream.Reader(directory); - var stream2 = tar.Pack(this._options.tar); - var stream3 = zlib.createGzip(this._options.zlib); - - // Bubble erros - this._bubble(stream3, stream2, stream1); - - return stream1.pipe(stream2).pipe(stream3); -}; - -/** - * Creates a writestream that receives a tarball stream and decompress - * to a destination directory - * @param {String} directory The directory where files will be extracted - * @return {Stream} A stream that you can write a tarball file - */ -TarGz.prototype.createWriteStream = function(directory) { - var stream1 = zlib.createGunzip(this._options.zlib); - var stream2 = tar.Extract({ - path: directory, - strip: this._options.tar.strip || 0 - }); - - this._bubble(stream1, stream2); - stream1.pipe(stream2); - - return stream1; -}; - -/** - * Parse a tarball stream and emit entry event for each entry parsed inside - * the piped tarball - * @return {Stream} A gunzip stream that also emits entry - */ -TarGz.prototype.createParseStream = function() { - var stream1 = zlib.createGunzip(this._options.zlib); - var stream2 = tar.Parse(); - - this._bubble(stream1, stream2); - - // Capture the entry event - stream2.on('entry', function(entry) { - stream1.emit('entry', entry); - }); - - stream1.pipe(stream2); - return stream1; -}; - -/** - * A sugar method to compress a directory to a file - * @param {String} source The directory the be tarballed - * @param {String} destination The file where the result will be wrote - * @param {Function} [cb] An optinal callback that will be called when the - * job is done - * @return {Promise} An promise that will be fulfilled when the job is done - */ -TarGz.prototype.compress = bluebird.method(function(source, destination, cb) { - var def = bluebird.defer(); - - // Handle callbacks - def.promise - .then(function() { - if (cb) - process.nextTick(function() { - cb(); - }); - }) - .catch(function(err) { - if (cb) - process.nextTick(function() { - cb(err); - }); - }); - - // Create all streams that we need - var write = fs.createWriteStream(destination); - var read = this.createReadStream(source); - - // Listen to events - write.on('error', def.callback); - write.on('finish', def.callback); - read.on('error', def.callback); - - // Pipe everything - read.pipe(write); - - return def.promise; -}); - -/** - * A sugar method to decompress into a directory - * @param {String} source The tarball to be extracted - * @param {String} destination A folder where the tarball will be extracted - * @param {Function} [cb] An optinal callback that will be called when the - * job is done - * @return {Promise} An promise that will be fulfilled when the job is done - */ -TarGz.prototype.extract = bluebird.method(function(source, destination, cb) { - var def = bluebird.defer(); - - // Handle callbacks - def.promise - .then(function() { - if (cb) - process.nextTick(function() { - cb(); - }); - }) - .catch(function(err) { - if (cb) - process.nextTick(function() { - cb(err); - }); - }); - - // Create all streams that we need - var read = fs.createReadStream(source); - var write = this.createWriteStream(destination); - - // Listen to events - write.on('error', def.callback); - write.on('finish', def.callback); - read.on('error', def.callback); - - // Pipe everything - read.pipe(write); - - return def.promise; -}); - -/** - * Internal tool for bubbling stream errors - * @param {Stream} destination The final stream where other streams should have - * their errors bubbled - * @param {...Stream} stream Streams that will emit error to the final stream - */ -TarGz.prototype._bubble = function( /* destination, stream, ... */ ) { - var streams = Array.prototype.slice.call(arguments); - var destination = streams.shift(); - - streams.forEach(function(stream) { - stream.on('error', function(err) { - destination.emit('error', err); - }); - }); - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/LICENSE b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/LICENSE deleted file mode 100644 index 4182a1e1..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2015 Petka Antonov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/README.md b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/README.md deleted file mode 100644 index fcb1daa7..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/README.md +++ /dev/null @@ -1,677 +0,0 @@ - - Promises/A+ logo - -[![Build Status](https://travis-ci.org/petkaantonov/bluebird.svg?branch=master)](https://travis-ci.org/petkaantonov/bluebird) -[![coverage-98%](http://img.shields.io/badge/coverage-98%-brightgreen.svg?style=flat)](http://petkaantonov.github.io/bluebird/coverage/debug/index.html) - -**Got a question?** Join us on [stackoverflow](http://stackoverflow.com/questions/tagged/bluebird), the [mailing list](https://groups.google.com/forum/#!forum/bluebird-js) or chat on [IRC](https://webchat.freenode.net/?channels=#promises) - -# Introduction - -Bluebird is a fully featured [promise](#what-are-promises-and-why-should-i-use-them) library with focus on innovative features and performance - - - -# Topics - -- [Features](#features) -- [Quick start](#quick-start) -- [API Reference and examples](API.md) -- [Support](#support) -- [What are promises and why should I use them?](#what-are-promises-and-why-should-i-use-them) -- [Questions and issues](#questions-and-issues) -- [Error handling](#error-handling) -- [Development](#development) - - [Testing](#testing) - - [Benchmarking](#benchmarks) - - [Custom builds](#custom-builds) - - [For library authors](#for-library-authors) -- [What is the sync build?](#what-is-the-sync-build) -- [License](#license) -- [Snippets for common problems](https://github.com/petkaantonov/bluebird/wiki/Snippets) -- [Promise anti-patterns](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns) -- [Changelog](changelog.md) -- [Optimization guide](#optimization-guide) - -# Features -bluebird logo - -- [Promises A+](http://promisesaplus.com) -- [Synchronous inspection](API.md#synchronous-inspection) -- [Concurrency coordination](API.md#collections) -- [Promisification on steroids](API.md#promisification) -- [Resource management through a parallel of python `with`/C# `using`](API.md#resource-management) -- [Cancellation and timeouts](API.md#cancellation) -- [Parallel for C# `async` and `await`](API.md#generators) -- Mind blowing utilities such as - - [`.bind()`](API.md#binddynamic-thisarg---promise) - - [`.call()`](API.md#callstring-propertyname--dynamic-arg---promise) - - [`Promise.join()`](API.md#promisejoinpromisethenablevalue-promises-function-handler---promise) - - [And](API.md#core) [much](API.md#timers) [more](API.md#utility)! -- [Practical debugging solutions and sane defaults](#error-handling) -- [Sick performance](benchmark/) - -
- -# Quick start - -## Node.js - - npm install bluebird - -Then: - -```js -var Promise = require("bluebird"); -``` - -## Browsers - -There are many ways to use bluebird in browsers: - -- Direct downloads - - Full build [bluebird.js](https://cdn.jsdelivr.net/bluebird/2.10.2/bluebird.js) - - Full build minified [bluebird.min.js](https://cdn.jsdelivr.net/bluebird/2.10.2/bluebird.min.js) -- You may use browserify on the main export -- You may use the [bower](http://bower.io) package. - -When using script tags the global variables `Promise` and `P` (alias for `Promise`) become available. - -A [minimal bluebird browser build](#custom-builds) is ≈38.92KB minified*, 11.65KB gzipped and has no external dependencies. - -*Google Closure Compiler using Simple. - -#### Browser support - -Browsers that [implement ECMA-262, edition 3](http://en.wikipedia.org/wiki/Ecmascript#Implementations) and later are supported. - -[![Selenium Test Status](https://saucelabs.com/browser-matrix/petka_antonov.svg)](https://saucelabs.com/u/petka_antonov) - -**Note** that in ECMA-262, edition 3 (IE7, IE8 etc.) it is not possible to use methods that have keyword names like `.catch` and `.finally`. The [API documentation](API.md) always lists a compatible alternative name that you can use if you need to support these browsers. For example `.catch` is replaced with `.caught` and `.finally` with `.lastly`. - -Also, [long stack trace](API.md#promiselongstacktraces---void) support is only available in Chrome, Firefox and Internet Explorer 10+. - -After quick start, see [API Reference and examples](API.md) - -
- -# Support - -- Mailing list: [bluebird-js@googlegroups.com](https://groups.google.com/forum/#!forum/bluebird-js) -- IRC: #promises @freenode -- StackOverflow: [bluebird tag](http://stackoverflow.com/questions/tagged/bluebird) -- Bugs and feature requests: [github issue tracker](https://github.com/petkaantonov/bluebird/issues?state=open) - -
- -# What are promises and why should I use them? - -You should use promises to turn this: - -```js -fs.readFile("file.json", function(err, val) { - if( err ) { - console.error("unable to read file"); - } - else { - try { - val = JSON.parse(val); - console.log(val.success); - } - catch( e ) { - console.error("invalid json in file"); - } - } -}); -``` - -Into this: - -```js -fs.readFileAsync("file.json").then(JSON.parse).then(function(val) { - console.log(val.success); -}) -.catch(SyntaxError, function(e) { - console.error("invalid json in file"); -}) -.catch(function(e) { - console.error("unable to read file"); -}); -``` - -*If you are wondering "there is no `readFileAsync` method on `fs` that returns a promise", see [promisification](API.md#promisification)* - -Actually you might notice the latter has a lot in common with code that would do the same using synchronous I/O: - -```js -try { - var val = JSON.parse(fs.readFileSync("file.json")); - console.log(val.success); -} -//Syntax actually not supported in JS but drives the point -catch(SyntaxError e) { - console.error("invalid json in file"); -} -catch(Error e) { - console.error("unable to read file"); -} -``` - -And that is the point - being able to have something that is a lot like `return` and `throw` in synchronous code. - -You can also use promises to improve code that was written with callback helpers: - - -```js -//Copyright Plato http://stackoverflow.com/a/19385911/995876 -//CC BY-SA 2.5 -mapSeries(URLs, function (URL, done) { - var options = {}; - needle.get(URL, options, function (error, response, body) { - if (error) { - return done(error); - } - try { - var ret = JSON.parse(body); - return done(null, ret); - } - catch (e) { - done(e); - } - }); -}, function (err, results) { - if (err) { - console.log(err); - } else { - console.log('All Needle requests successful'); - // results is a 1 to 1 mapping in order of URLs > needle.body - processAndSaveAllInDB(results, function (err) { - if (err) { - return done(err); - } - console.log('All Needle requests saved'); - done(null); - }); - } -}); -``` - -Is more pleasing to the eye when done with promises: - -```js -Promise.promisifyAll(needle); -var options = {}; - -var current = Promise.resolve(); -Promise.map(URLs, function(URL) { - current = current.then(function () { - return needle.getAsync(URL, options); - }); - return current; -}).map(function(responseAndBody){ - return JSON.parse(responseAndBody[1]); -}).then(function (results) { - return processAndSaveAllInDB(results); -}).then(function(){ - console.log('All Needle requests saved'); -}).catch(function (e) { - console.log(e); -}); -``` - -Also promises don't just give you correspondences for synchronous features but can also be used as limited event emitters or callback aggregators. - -More reading: - - - [Promise nuggets](https://promise-nuggets.github.io/) - - [Why I am switching to promises](http://spion.github.io/posts/why-i-am-switching-to-promises.html) - - [What is the the point of promises](http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/#toc_1) - - [Snippets for common problems](https://github.com/petkaantonov/bluebird/wiki/Snippets) - - [Promise anti-patterns](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns) - -# Questions and issues - -The [github issue tracker](https://github.com/petkaantonov/bluebird/issues) is **_only_** for bug reports and feature requests. Anything else, such as questions for help in using the library, should be posted in [StackOverflow](http://stackoverflow.com/questions/tagged/bluebird) under tags `promise` and `bluebird`. - -# Error handling - -This is a problem every promise library needs to handle in some way. Unhandled rejections/exceptions don't really have a good agreed-on asynchronous correspondence. The problem is that it is impossible to predict the future and know if a rejected promise will eventually be handled. - -There are two common pragmatic attempts at solving the problem that promise libraries do. - -The more popular one is to have the user explicitly communicate that they are done and any unhandled rejections should be thrown, like so: - -```js -download().then(...).then(...).done(); -``` - -For handling this problem, in my opinion, this is completely unacceptable and pointless. The user must remember to explicitly call `.done` and that cannot be justified when the problem is forgetting to create an error handler in the first place. - -The second approach, which is what bluebird by default takes, is to call a registered handler if a rejection is unhandled by the start of a second turn. The default handler is to write the stack trace to `stderr` or `console.error` in browsers. This is close to what happens with synchronous code - your code doesn't work as expected and you open console and see a stack trace. Nice. - -Of course this is not perfect, if your code for some reason needs to swoop in and attach error handler to some promise after the promise has been hanging around a while then you will see annoying messages. In that case you can use the `.done()` method to signal that any hanging exceptions should be thrown. - -If you want to override the default handler for these possibly unhandled rejections, you can pass yours like so: - -```js -Promise.onPossiblyUnhandledRejection(function(error){ - throw error; -}); -``` - -If you want to also enable long stack traces, call: - -```js -Promise.longStackTraces(); -``` - -right after the library is loaded. - -In node.js use the environment flag `BLUEBIRD_DEBUG`: - -``` -BLUEBIRD_DEBUG=1 node server.js -``` - -to enable long stack traces in all instances of bluebird. - -Long stack traces cannot be disabled after being enabled, and cannot be enabled after promises have already been created. Long stack traces imply a substantial performance penalty, even after using every trick to optimize them. - -Long stack traces are enabled by default in the debug build. - -#### Expected and unexpected errors - -A practical problem with Promises/A+ is that it models Javascript `try-catch` too closely for its own good. Therefore by default promises inherit `try-catch` warts such as the inability to specify the error types that the catch block is eligible for. It is an anti-pattern in every other language to use catch-all handlers because they swallow exceptions that you might not know about. - -Now, Javascript does have a perfectly fine and working way of creating error type hierarchies. It is still quite awkward to use them with the built-in `try-catch` however: - -```js -try { - //code -} -catch(e) { - if( e instanceof WhatIWantError) { - //handle - } - else { - throw e; - } -} -``` - -Without such checking, unexpected errors would be silently swallowed. However, with promises, bluebird brings the future (hopefully) here now and extends the `.catch` to [accept potential error type eligibility](API.md#catchfunction-errorclass-function-handler---promise). - -For instance here it is expected that some evil or incompetent entity will try to crash our server from `SyntaxError` by providing syntactically invalid JSON: - -```js -getJSONFromSomewhere().then(function(jsonString) { - return JSON.parse(jsonString); -}).then(function(object) { - console.log("it was valid json: ", object); -}).catch(SyntaxError, function(e){ - console.log("don't be evil"); -}); -``` - -Here any kind of unexpected error will be automatically reported on `stderr` along with a stack trace because we only register a handler for the expected `SyntaxError`. - -Ok, so, that's pretty neat. But actually not many libraries define error types and it is in fact a complete ghetto out there with ad hoc strings being attached as some arbitrary property name like `.name`, `.type`, `.code`, not having any property at all or even throwing strings as errors and so on. So how can we still listen for expected errors? - -Bluebird defines a special error type `OperationalError` (you can get a reference from `Promise.OperationalError`). This type of error is given as rejection reason by promisified methods when -their underlying library gives an untyped, but expected error. Primitives such as strings, and error objects that are directly created like `new Error("database didn't respond")` are considered untyped. - -Example of such library is the node core library `fs`. So if we promisify it, we can catch just the errors we want pretty easily and have programmer errors be redirected to unhandled rejection handler so that we notice them: - -```js -//Read more about promisification in the API Reference: -//API.md -var fs = Promise.promisifyAll(require("fs")); - -fs.readFileAsync("myfile.json").then(JSON.parse).then(function (json) { - console.log("Successful json"); -}).catch(SyntaxError, function (e) { - console.error("file contains invalid json"); -}).catch(Promise.OperationalError, function (e) { - console.error("unable to read file, because: ", e.message); -}); -``` - -The last `catch` handler is only invoked when the `fs` module explicitly used the `err` argument convention of async callbacks to inform of an expected error. The `OperationalError` instance will contain the original error in its `.cause` property but it does have a direct copy of the `.message` and `.stack` too. In this code any unexpected error - be it in our code or the `fs` module - would not be caught by these handlers and therefore not swallowed. - -Since a `catch` handler typed to `Promise.OperationalError` is expected to be used very often, it has a neat shorthand: - -```js -.error(function (e) { - console.error("unable to read file, because: ", e.message); -}); -``` - -See [API documentation for `.error()`](API.md#error-rejectedhandler----promise) - -Finally, Bluebird also supports predicate-based filters. If you pass a -predicate function instead of an error type, the predicate will receive -the error as an argument. The return result will be used to determine whether -the error handler should be called. - -Predicates should allow for very fine grained control over caught errors: -pattern matching, error typesets with set operations and many other techniques -can be implemented on top of them. - -Example of using a predicate-based filter: - -```js -var Promise = require("bluebird"); -var request = Promise.promisify(require("request")); - -function clientError(e) { - return e.code >= 400 && e.code < 500; -} - -request("http://www.google.com").then(function(contents){ - console.log(contents); -}).catch(clientError, function(e){ - //A client error like 400 Bad Request happened -}); -``` - -**Danger:** The JavaScript language allows throwing primitive values like strings. Throwing primitives can lead to worse or no stack traces. Primitives [are not exceptions](http://www.devthought.com/2011/12/22/a-string-is-not-an-error/). You should consider always throwing Error objects when handling exceptions. - -
- -#### How do long stack traces differ from e.g. Q? - -Bluebird attempts to have more elaborate traces. Consider: - -```js -Error.stackTraceLimit = 25; -Q.longStackSupport = true; -Q().then(function outer() { - return Q().then(function inner() { - return Q().then(function evenMoreInner() { - a.b.c.d(); - }).catch(function catcher(e){ - console.error(e.stack); - }); - }) -}); -``` - -You will see - - ReferenceError: a is not defined - at evenMoreInner (:7:13) - From previous event: - at inner (:6:20) - -Compare to: - -```js -Error.stackTraceLimit = 25; -Promise.longStackTraces(); -Promise.resolve().then(function outer() { - return Promise.resolve().then(function inner() { - return Promise.resolve().then(function evenMoreInner() { - a.b.c.d(); - }).catch(function catcher(e){ - console.error(e.stack); - }); - }); -}); -``` - - ReferenceError: a is not defined - at evenMoreInner (:7:13) - From previous event: - at inner (:6:36) - From previous event: - at outer (:5:32) - From previous event: - at :4:21 - at Object.InjectedScript._evaluateOn (:572:39) - at Object.InjectedScript._evaluateAndWrap (:531:52) - at Object.InjectedScript.evaluate (:450:21) - - -A better and more practical example of the differences can be seen in gorgikosev's [debuggability competition](https://github.com/spion/async-compare#debuggability). - -
- -# Development - -For development tasks such as running benchmarks or testing, you need to clone the repository and install dev-dependencies. - -Install [node](http://nodejs.org/) and [npm](https://npmjs.org/) - - git clone git@github.com:petkaantonov/bluebird.git - cd bluebird - npm install - -## Testing - -To run all tests, run - - node tools/test - -If you need to run generator tests run the `tool/test.js` script with `--harmony` argument and node 0.11+: - - node-dev --harmony tools/test - -You may specify an individual test file to run with the `--run` script flag: - - node tools/test --run=cancel.js - - -This enables output from the test and may give a better idea where the test is failing. The parameter to `--run` can be any file name located in `test/mocha` folder. - -#### Testing in browsers - -To run the test in a browser instead of node, pass the flag `--browser` to the test tool - - node tools/test --run=cancel.js --browser - -This will automatically create a server (default port 9999) and open it in your default browser once the tests have been compiled. - -Keep the test tab active because some tests are timing-sensitive and will fail if the browser is throttling timeouts. Chrome will do this for example when the tab is not active. - -#### Supported options by the test tool - -The value of boolean flags is determined by presence, if you want to pass false value for a boolean flag, use the `no-`-prefix e.g. `--no-browser`. - - - `--run=String` - Which tests to run (or compile when testing in browser). Default `"all"`. Can also be a glob string (relative to ./test/mocha folder). - - `--cover=String`. Create code coverage using the String as istanbul reporter. Coverage is created in the ./coverage folder. No coverage is created by default, default reporter is `"html"` (use `--cover` to use default reporter). - - `--browser` - Whether to compile tests for browsers. Default `false`. - - `--port=Number` - Port where local server is hosted when testing in browser. Default `9999` - - `--execute-browser-tests` - Whether to execute the compiled tests for browser when using `--browser`. Default `true`. - - `--open-browser` - Whether to open the default browser when executing browser tests. Default `true`. - - `--fake-timers` - Whether to use fake timers (`setTimeout` etc) when running tests in node. Default `true`. - - `--js-hint` - Whether to run JSHint on source files. Default `true`. - - `--saucelabs` - Whether to create a tunnel to sauce labs and run tests in their VMs instead of your browser when compiling tests for browser. Default `false`. - -## Benchmarks - -To run a benchmark, run the given command for a benchmark while on the project root. Requires bash (on windows the mingw32 that comes with git works fine too). - -Node 0.11.2+ is required to run the generator examples. - -### 1\. DoxBee sequential - -Currently the most relevant benchmark is @gorkikosev's benchmark in the article [Analysis of generators and other async patterns in node](http://spion.github.io/posts/analysis-generators-and-other-async-patterns-node.html). The benchmark emulates a situation where n amount of users are making a request in parallel to execute some mixed async/sync action. The benchmark has been modified to include a warm-up phase to minimize any JITing during timed sections. - -Command: `bench doxbee` - -### 2\. Made-up parallel - -This made-up scenario runs 15 shimmed queries in parallel. - -Command: `bench parallel` - -## Custom builds - -Custom builds for browsers are supported through a command-line utility. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following features can be disabled
Feature(s)Command line identifier
.any and Promise.anyany
.race and Promise.racerace
.call and .getcall_get
.filter and Promise.filterfilter
.map and Promise.mapmap
.reduce and Promise.reducereduce
.props and Promise.propsprops
.settle and Promise.settlesettle
.some and Promise.somesome
.nodeifynodeify
Promise.coroutine and Promise.spawngenerators
Progressionprogress
Promisificationpromisify
Cancellationcancel
Timerstimers
Resource managementusing
- - -Make sure you have cloned the repo somewhere and did `npm install` successfully. - -After that you can run: - - node tools/build --features="core" - - -The above builds the most minimal build you can get. You can add more features separated by spaces from the above list: - - node tools/build --features="core filter map reduce" - -The custom build file will be found from `/js/browser/bluebird.js`. It will have a comment that lists the disabled and enabled features. - -Note that the build leaves the `/js/main` etc folders with same features so if you use the folder for node.js at the same time, don't forget to build -a full version afterwards (after having taken a copy of the bluebird.js somewhere): - - node tools/build --debug --main --zalgo --browser --minify - -#### Supported options by the build tool - -The value of boolean flags is determined by presence, if you want to pass false value for a boolean flag, use the `no-`-prefix e.g. `--no-debug`. - - - `--main` - Whether to build the main build. The main build is placed at `js/main` directory. Default `false`. - - `--debug` - Whether to build the debug build. The debug build is placed at `js/debug` directory. Default `false`. - - `--zalgo` - Whether to build the zalgo build. The zalgo build is placed at `js/zalgo` directory. Default `false`. - - `--browser` - Whether to compile the browser build. The browser build file is placed at `js/browser/bluebird.js` Default `false`. - - `--minify` - Whether to minify the compiled browser build. The minified browser build file is placed at `js/browser/bluebird.min.js` Default `true`. - - `--features=String` - See [custom builds](#custom-builds) - -
- -## For library authors - -Building a library that depends on bluebird? You should know about a few features. - -If your library needs to do something obtrusive like adding or modifying methods on the `Promise` prototype, uses long stack traces or uses a custom unhandled rejection handler then... that's totally ok as long as you don't use `require("bluebird")`. Instead you should create a file -that creates an isolated copy. For example, creating a file called `bluebird-extended.js` that contains: - -```js - //NOTE the function call right after -module.exports = require("bluebird/js/main/promise")(); -``` - -Your library can then use `var Promise = require("bluebird-extended");` and do whatever it wants with it. Then if the application or other library uses their own bluebird promises they will all play well together because of Promises/A+ thenable assimilation magic. - -You should also know about [`.nodeify()`](API.md#nodeifyfunction-callback---promise) which makes it easy to provide a dual callback/promise API. - -
- -## What is the sync build? - -You may now use sync build by: - - var Promise = require("bluebird/zalgo"); - -The sync build is provided to see how forced asynchronity affects benchmarks. It should not be used in real code due to the implied hazards. - -The normal async build gives Promises/A+ guarantees about asynchronous resolution of promises. Some people think this affects performance or just plain love their code having a possibility -of stack overflow errors and non-deterministic behavior. - -The sync build skips the async call trampoline completely, e.g code like: - - async.invoke( this.fn, this, val ); - -Appears as this in the sync build: - - this.fn(val); - -This should pressure the CPU slightly less and thus the sync build should perform better. Indeed it does, but only marginally. The biggest performance boosts are from writing efficient Javascript, not from compromising determinism. - -Note that while some benchmarks are waiting for the next event tick, the CPU is actually not in use during that time. So the resulting benchmark result is not completely accurate because on node.js you only care about how much the CPU is taxed. Any time spent on CPU is time the whole process (or server) is paralyzed. And it is not graceful like it would be with threads. - - -```js -var cache = new Map(); //ES6 Map or DataStructures/Map or whatever... -function getResult(url) { - var resolver = Promise.pending(); - if (cache.has(url)) { - resolver.resolve(cache.get(url)); - } - else { - http.get(url, function(err, content) { - if (err) resolver.reject(err); - else { - cache.set(url, content); - resolver.resolve(content); - } - }); - } - return resolver.promise; -} - - - -//The result of console.log is truly random without async guarantees -function guessWhatItPrints( url ) { - var i = 3; - getResult(url).then(function(){ - i = 4; - }); - console.log(i); -} -``` - -# Optimization guide - -Articles about optimization will be periodically posted in [the wiki section](https://github.com/petkaantonov/bluebird/wiki), polishing edits are welcome. - -A single cohesive guide compiled from the articles will probably be done eventually. - -# License - -The MIT License (MIT) - -Copyright (c) 2015 Petka Antonov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/changelog.md b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/changelog.md deleted file mode 100644 index 406d2156..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/changelog.md +++ /dev/null @@ -1,1730 +0,0 @@ -## 2.11.0 (2016-08-30) - -Features: - - - Add Promise.version - - Add Promise.getNewLibraryCopy - -## 2.10.2 (2015-10-01) - -Features: - - - `.timeout()` now takes a custom error object as second argument - -## 2.10.1 (2015-09-21) - - - Fix error "Cannot promisify an API that has normal methods with 'Async'-suffix" when promisifying certain objects with a custom promisifier - -## 2.10.0 (2015-09-08) - -Features: - - - `Promise.using` can now take the promises-for-resources as an array ([#733](.)). - - Browser builds for minimal core are now hosted on CDN ([#724](.)). - -Bugfixes: - - - Disabling debug mode with `BLUEBIRD_DEBUG=0` environment variable now works ([#719](.)). - - Fix unhandled rejection reporting when passing rejected promise to `.return()` ([#721](.)). - - Fix unbound promise's then handlers being called with wrong `this` value ([#738](.)). - -## 2.9.34 (2015-07-15) - -Bugfixes: - -- Correct domain for .map, .each, .filter, .reduce callbacks ([#701](.)). - - Preserve bound-with-promise promises across the entire chain ([#702](.)). - -## 2.9.33 (2015-07-09) - -Bugfixes: - - - Methods on `Function.prototype` are no longer promisified ([#680](.)). - -## 2.9.32 (2015-07-03) - -Bugfixes: - - - Fix `.return(primitiveValue)` returning a wrapped version of the primitive value when a Node.js domain is active ([#689](.)). - -## 2.9.31 (2015-07-03) - -Bugfixes: - - - Fix Promises/A+ compliance issue regarding circular thenables: the correct behavior is to go into an infinite loop instead of warning with an error (Fixes [#682](.)). - - Fix "(node) warning: possible EventEmitter memory leak detected" ([#661](.)). - - Fix callbacks sometimes being called with a wrong node.js domain ([#664](.)). - - Fix callbacks sometimes not being called at all in iOS 8.1 WebApp mode ([#666](.), [#687](.)). - -## 2.9.30 (2015-06-14) - -Bugfixes: - - - Fix regression with `promisifyAll` not promisifying certain methods - -## 2.9.29 (2015-06-14) - -Bugfixes: - - - Improve `promisifyAll` detection of functions that are class constructors. Fixes mongodb 2.x promisification. - -## 2.9.28 (2015-06-14) - -Bugfixes: - - - Fix handled rejection being reported as unhandled in certain scenarios when using [.all](.) or [Promise.join](.) ([#645](.)) - - Fix custom scheduler not being called in Google Chrome when long stack traces are enabled ([#650](.)) - -## 2.9.27 (2015-05-30) - -Bugfixes: - - - Fix `sinon.useFakeTimers()` breaking scheduler ([#631](.)) - -Misc: - - - Add nw testing facilities (`node tools/test --nw`) - -## 2.9.26 (2015-05-25) - -Bugfixes: - - - Fix crash in NW [#624](.) - - Fix [`.return()`](.) not supporting `undefined` as return value [#627](.) - -## 2.9.25 (2015-04-28) - -Bugfixes: - - - Fix crash in node 0.8 - -## 2.9.24 (2015-04-02) - -Bugfixes: - - - Fix not being able to load multiple bluebird copies introduced in 2.9.22 ([#559](.), [#561](.), [#560](.)). - -## 2.9.23 (2015-04-02) - -Bugfixes: - - - Fix node.js domain propagation ([#521](.)). - -## 2.9.22 (2015-04-02) - - - Fix `.promisify` crashing in phantom JS ([#556](.)) - -## 2.9.21 (2015-03-30) - - - Fix error object's `'stack'`' overwriting causing an error when its defined to be a setter that throws an error ([#552](.)). - -## 2.9.20 (2015-03-29) - -Bugfixes: - - - Fix regression where there is a long delay between calling `.cancel()` and promise actually getting cancelled in Chrome when long stack traces are enabled - -## 2.9.19 (2015-03-29) - -Bugfixes: - - - Fix crashing in Chrome when long stack traces are disabled - -## 2.9.18 (2015-03-29) - -Bugfixes: - - - Fix settlePromises using trampoline - -## 2.9.17 (2015-03-29) - - -Bugfixes: - - - Fix Chrome DevTools async stack traceability ([#542](.)). - -## 2.9.16 (2015-03-28) - -Features: - - - Use setImmediate if available - -## 2.9.15 (2015-03-26) - -Features: - - - Added `.asCallback` alias for `.nodeify`. - -Bugfixes: - - - Don't always use nextTick, but try to pick up setImmediate or setTimeout in NW. Fixes [#534](.), [#525](.) - - Make progress a core feature. Fixes [#535](.) Note that progress has been removed in 3.x - this is only a fix necessary for 2.x custom builds. - -## 2.9.14 (2015-03-12) - -Bugfixes: - - - Always use process.nextTick. Fixes [#525](.) - -## 2.9.13 (2015-02-27) - -Bugfixes: - - - Fix .each, .filter, .reduce and .map callbacks being called synchornously if the input is immediate. ([#513](https://github.com/petkaantonov/bluebird/issues/513)) - -## 2.9.12 (2015-02-19) - -Bugfixes: - - - Fix memory leak introduced in 2.9.0 ([#502](https://github.com/petkaantonov/bluebird/issues/502)) - -## 2.9.11 (2015-02-19) - -Bugfixes: - - - Fix [#503](https://github.com/petkaantonov/bluebird/issues/503) - -## 2.9.10 (2015-02-18) - -Bugfixes: - - - Fix [#501](https://github.com/petkaantonov/bluebird/issues/501) - -## 2.9.9 (2015-02-12) - -Bugfixes: - - - Fix `TypeError: Cannot assign to read only property 'length'` when jsdom has declared a read-only length for all objects to inherit. - -## 2.9.8 (2015-02-10) - -Bugfixes: - - - Fix regression introduced in 2.9.7 where promisify didn't properly dynamically look up methods on `this` - -## 2.9.7 (2015-02-08) - -Bugfixes: - - - Fix `promisify` not retaining custom properties of the function. This enables promisifying the `"request"` module's export function and its methods at the same time. - - Fix `promisifyAll` methods being dependent on `this` when they are not originally dependent on `this`. This enables e.g. passing promisified `fs` functions directly as callbacks without having to bind them to `fs`. - - Fix `process.nextTick` being used over `setImmediate` in node. - -## 2.9.6 (2015-02-02) - -Bugfixes: - - - Node environment detection can no longer be fooled - -## 2.9.5 (2015-02-02) - -Misc: - - - Warn when [`.then()`](.) is passed non-functions - -## 2.9.4 (2015-01-30) - -Bugfixes: - - - Fix [.timeout()](.) not calling `clearTimeout` with the proper handle in node causing the process to wait for unneeded timeout. This was a regression introduced in 2.9.1. - -## 2.9.3 (2015-01-27) - -Bugfixes: - - - Fix node-webkit compatibility issue ([#467](https://github.com/petkaantonov/bluebird/pull/467)) - - Fix long stack trace support in recent firefox versions - -## 2.9.2 (2015-01-26) - -Bugfixes: - - - Fix critical bug regarding to using promisifyAll in browser that was introduced in 2.9.0 ([#466](https://github.com/petkaantonov/bluebird/issues/466)). - -Misc: - - - Add `"browser"` entry point to package.json - -## 2.9.1 (2015-01-24) - -Features: - - - If a bound promise is returned by the callback to [`Promise.method`](#promisemethodfunction-fn---function) and [`Promise.try`](#promisetryfunction-fn--arraydynamicdynamic-arguments--dynamic-ctx----promise), the returned promise will be bound to the same value - -## 2.9.0 (2015-01-24) - -Features: - - - Add [`Promise.fromNode`](API.md#promisefromnodefunction-resolver---promise) - - Add new paramter `value` for [`Promise.bind`](API.md#promisebinddynamic-thisarg--dynamic-value---promise) - -Bugfixes: - - - Fix several issues with [`cancellation`](API.md#cancellation) and [`.bind()`](API.md#binddynamic-thisarg---promise) interoperation when `thisArg` is a promise or thenable - - Fix promises created in [`disposers`](API#disposerfunction-disposer---disposer) not having proper long stack trace context - - Fix [`Promise.join`](API.md#promisejoinpromisethenablevalue-promises-function-handler---promise) sometimes passing the passed in callback function as the last argument to itself. - -Misc: - - - Reduce minified full browser build file size by not including unused code generation functionality. - - Major internal refactoring related to testing code and source code file layout - -## 2.8.2 (2015-01-20) - -Features: - - - [Global rejection events](https://github.com/petkaantonov/bluebird/blob/master/API.md#global-rejection-events) are now fired both as DOM3 events and as legacy events in browsers - -## 2.8.1 (2015-01-20) - -Bugfixes: - - - Fix long stack trace stiching consistency when rejected from thenables - -## 2.8.0 (2015-01-19) - -Features: - - - Major debuggability improvements: - - Long stack traces have been re-designed. They are now much more readable, - succint, relevant and consistent across bluebird features. - - Long stack traces are supported now in IE10+ - -## 2.7.1 (2015-01-15) - -Bugfixes: - - - Fix [#447](https://github.com/petkaantonov/bluebird/issues/447) - -## 2.7.0 (2015-01-15) - -Features: - - - Added more context to stack traces originating from coroutines ([#421](https://github.com/petkaantonov/bluebird/issues/421)) - - Implemented [global rejection events](https://github.com/petkaantonov/bluebird/blob/master/API.md#global-rejection-events) ([#428](https://github.com/petkaantonov/bluebird/issues/428), [#357](https://github.com/petkaantonov/bluebird/issues/357)) - - [Custom promisifiers](https://github.com/petkaantonov/bluebird/blob/master/API.md#option-promisifier) are now passed the default promisifier which can be used to add enhancements on top of normal node promisification - - [Promisification filters](https://github.com/petkaantonov/bluebird/blob/master/API.md#option-filter) are now passed `passesDefaultFilter` boolean - -Bugfixes: - - - Fix `.noConflict()` call signature ([#446](https://github.com/petkaantonov/bluebird/issues/446)) - - Fix `Promise.method`ified functions being called with `undefined` when they were called with no arguments - -## 2.6.4 (2015-01-12) - -Bugfixes: - - - `OperationalErrors` thrown by promisified functions retain custom properties, such as `.code` and `.path`. - -## 2.6.3 (2015-01-12) - -Bugfixes: - - - Fix [#429](https://github.com/petkaantonov/bluebird/issues/429) - - Fix [#432](https://github.com/petkaantonov/bluebird/issues/432) - - Fix [#433](https://github.com/petkaantonov/bluebird/issues/433) - -## 2.6.2 (2015-01-07) - -Bugfixes: - - - Fix [#426](https://github.com/petkaantonov/bluebird/issues/426) - -## 2.6.1 (2015-01-07) - -Bugfixes: - - - Fixed built browser files not being included in the git tag release for bower - -## 2.6.0 (2015-01-06) - -Features: - - - Significantly improve parallel promise performance and memory usage (+50% faster, -50% less memory) - - -## 2.5.3 (2014-12-30) - -## 2.5.2 (2014-12-29) - -Bugfixes: - - - Fix bug where already resolved promise gets attached more handlers while calling its handlers resulting in some handlers not being called - - Fix bug where then handlers are not called in the same order as they would run if Promises/A+ 2.3.2 was implemented as adoption - - Fix bug where using `Object.create(null)` as a rejection reason would crash bluebird - -## 2.5.1 (2014-12-29) - -Bugfixes: - - - Fix `.finally` throwing null error when it is derived from a promise that is resolved with a promise that is resolved with a promise - -## 2.5.0 (2014-12-28) - -Features: - - - [`.get`](#API.md#https://github.com/petkaantonov/bluebird/blob/master/API.md#getstring-propertyname---promise) now supports negative indexing. - -Bugfixes: - - - Fix bug with `Promise.method` wrapped function returning a promise that never resolves if the function returns a promise that is resolved with another promise - - Fix bug with `Promise.delay` never resolving if the value is a promise that is resolved with another promise - -## 2.4.3 (2014-12-28) - -Bugfixes: - - - Fix memory leak as described in [this Promises/A+ spec issue](https://github.com/promises-aplus/promises-spec/issues/179). - -## 2.4.2 (2014-12-21) - -Bugfixes: - - - Fix bug where spread rejected handler is ignored in case of rejection - - Fix synchronous scheduler passed to `setScheduler` causing infinite loop - -## 2.4.1 (2014-12-20) - -Features: - - - Error messages now have links to wiki pages for additional information - - Promises now clean up all references (to handlers, child promises etc) as soon as possible. - -## 2.4.0 (2014-12-18) - -Features: - - - Better filtering of bluebird internal calls in long stack traces, especially when using minified file in browsers - - Small performance improvements for all collection methods - - Promises now delete references to handlers attached to them as soon as possible - - Additional stack traces are now output on stderr/`console.warn` for errors that are thrown in the process/window from rejected `.done()` promises. See [#411](https://github.com/petkaantonov/bluebird/issues/411) - -## 2.3.11 (2014-10-31) - -Bugfixes: - - - Fix [#371](https://github.com/petkaantonov/bluebird/issues/371), [#373](https://github.com/petkaantonov/bluebird/issues/373) - - -## 2.3.10 (2014-10-28) - -Features: - - - `Promise.method` no longer wraps primitive errors - - `Promise.try` no longer wraps primitive errors - -## 2.3.7 (2014-10-25) - -Bugfixes: - - - Fix [#359](https://github.com/petkaantonov/bluebird/issues/359), [#362](https://github.com/petkaantonov/bluebird/issues/362) and [#364](https://github.com/petkaantonov/bluebird/issues/364) - -## 2.3.6 (2014-10-15) - -Features: - - - Implement [`.reflect()`](API.md#reflect---promisepromiseinspection) - -## 2.3.5 (2014-10-06) - -Bugfixes: - - - Fix issue when promisifying methods whose names contain the string 'args' - -## 2.3.4 (2014-09-27) - - - `P` alias was not declared inside WebWorkers - -## 2.3.3 (2014-09-27) - -Bugfixes: - - - Fix [#318](https://github.com/petkaantonov/bluebird/issues/318), [#314](https://github.com/petkaantonov/bluebird/issues/314) - -## 2.3.2 (2014-08-25) - -Bugfixes: - - - `P` alias for `Promise` now exists in global scope when using browser builds without a module loader, fixing an issue with firefox extensions - -## 2.3.1 (2014-08-23) - -Features: - - - `.using` can now be used with disposers created from different bluebird copy - -## 2.3.0 (2014-08-13) - -Features: - - - [`.bind()`](API.md#binddynamic-thisarg---promise) and [`Promise.bind()`](API.md#promisebinddynamic-thisarg---promise) now await for the resolution of the `thisArg` if it's a promise or a thenable - -Bugfixes: - - - Fix [#276](https://github.com/petkaantonov/bluebird/issues/276) - -## 2.2.2 (2014-07-14) - - - Fix [#259](https://github.com/petkaantonov/bluebird/issues/259) - -## 2.2.1 (2014-07-07) - - - Fix multiline error messages only showing the first line - -## 2.2.0 (2014-07-07) - -Bugfixes: - - - `.any` and `.some` now consistently reject with RangeError when input array contains too few promises - - Fix iteration bug with `.reduce` when input array contains already fulfilled promises - -## 2.1.3 (2014-06-18) - -Bugfixes: - - - Fix [#235](https://github.com/petkaantonov/bluebird/issues/235) - -## 2.1.2 (2014-06-15) - -Bugfixes: - - - Fix [#232](https://github.com/petkaantonov/bluebird/issues/232) - -## 2.1.1 (2014-06-11) - -## 2.1.0 (2014-06-11) - -Features: - - - Add [`promisifier`](API.md#option-promisifier) option to `Promise.promisifyAll()` - - Improve performance of `.props()` and collection methods when used with immediate values - - -Bugfixes: - - - Fix a bug where .reduce calls the callback for an already visited item - - Fix a bug where stack trace limit is calculated to be too small, which resulted in too short stack traces - -Add undocumented experimental `yieldHandler` option to `Promise.coroutine` - -## 2.0.7 (2014-06-08) -## 2.0.6 (2014-06-07) -## 2.0.5 (2014-06-05) -## 2.0.4 (2014-06-05) -## 2.0.3 (2014-06-05) -## 2.0.2 (2014-06-04) -## 2.0.1 (2014-06-04) - -## 2.0.0 (2014-06-04) - -#What's new in 2.0 - -- [Resource management](API.md#resource-management) - never leak resources again -- [Promisification](API.md#promisification) on steroids - entire modules can now be promisified with one line of code -- [`.map()`](API.md#mapfunction-mapper--object-options---promise), [`.each()`](API.md#eachfunction-iterator---promise), [`.filter()`](API.md#filterfunction-filterer--object-options---promise), [`.reduce()`](API.md#reducefunction-reducer--dynamic-initialvalue---promise) reimagined from simple sugar to powerful concurrency coordination tools -- [API Documentation](API.md) has been reorganized and more elaborate examples added -- Deprecated [progression](#progression-migration) and [deferreds](#deferred-migration) -- Improved performance and readability - -Features: - -- Added [`using()`](API.md#promiseusingpromisedisposer-promise-promisedisposer-promise--function-handler---promise) and [`disposer()`](API.md#disposerfunction-disposer---disposer) -- [`.map()`](API.md#mapfunction-mapper--object-options---promise) now calls the handler as soon as items in the input array become fulfilled -- Added a concurrency option to [`.map()`](API.md#mapfunction-mapper--object-options---promise) -- [`.filter()`](API.md#filterfunction-filterer--object-options---promise) now calls the handler as soon as items in the input array become fulfilled -- Added a concurrency option to [`.filter()`](API.md#filterfunction-filterer--object-options---promise) -- [`.reduce()`](API.md#reducefunction-reducer--dynamic-initialvalue---promise) now calls the handler as soon as items in the input array become fulfilled, but in-order -- Added [`.each()`](API.md#eachfunction-iterator---promise) -- [`Promise.resolve()`](API.md#promiseresolvedynamic-value---promise) behaves like `Promise.cast`. `Promise.cast` deprecated. -- [Synchronous inspection](API.md#synchronous-inspection): Removed `.inspect()`, added [`.value()`](API.md#value---dynamic) and [`.reason()`](API.md#reason---dynamic) -- [`Promise.join()`](API.md#promisejoinpromisethenablevalue-promises-function-handler---promise) now takes a function as the last argument -- Added [`Promise.setScheduler()`](API.md#promisesetschedulerfunction-scheduler---void) -- [`.cancel()`](API.md#cancelerror-reason---promise) supports a custom cancellation reason -- [`.timeout()`](API.md#timeoutint-ms--string-message---promise) now cancels the promise instead of rejecting it -- [`.nodeify()`](API.md#nodeifyfunction-callback--object-options---promise) now supports passing multiple success results when mapping promises to nodebacks -- Added `suffix` and `filter` options to [`Promise.promisifyAll()`](API.md#promisepromisifyallobject-target--object-options---object) - -Breaking changes: - -- Sparse array holes are not skipped by collection methods but treated as existing elements with `undefined` value -- `.map()` and `.filter()` do not call the given mapper or filterer function in any specific order -- Removed the `.inspect()` method -- Yielding an array from a coroutine is not supported by default. You can use [`coroutine.addYieldHandler()`](API.md#promisecoroutineaddyieldhandlerfunction-handler---void) to configure the old behavior (or any behavior you want). -- [`.any()`](API.md#any---promise) and [`.some()`](API.md#someint-count---promise) no longer use an array as the rejection reason. [`AggregateError`](API.md#aggregateerror) is used instead. - - -## 1.2.4 (2014-04-27) - -Bugfixes: - - - Fix promisifyAll causing a syntax error when a method name is not a valid identifier - - Fix syntax error when es5.js is used in strict mode - -## 1.2.3 (2014-04-17) - -Bugfixes: - - - Fix [#179](https://github.com/petkaantonov/bluebird/issues/179) - -## 1.2.2 (2014-04-09) - -Bugfixes: - - - Promisified methods from promisifyAll no longer call the original method when it is overriden - - Nodeify doesn't pass second argument to the callback if the promise is fulfilled with `undefined` - -## 1.2.1 (2014-03-31) - -Bugfixes: - - - Fix [#168](https://github.com/petkaantonov/bluebird/issues/168) - -## 1.2.0 (2014-03-29) - -Features: - - - New method: [`.value()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#value---dynamic) - - New method: [`.reason()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#reason---dynamic) - - New method: [`Promise.onUnhandledRejectionHandled()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#promiseonunhandledrejectionhandledfunction-handler---undefined) - - `Promise.map()`, `.map()`, `Promise.filter()` and `.filter()` start calling their callbacks as soon as possible while retaining a correct order. See [`8085922f`](https://github.com/petkaantonov/bluebird/commit/8085922fb95a9987fda0cf2337598ab4a98dc315). - -Bugfixes: - - - Fix [#165](https://github.com/petkaantonov/bluebird/issues/165) - - Fix [#166](https://github.com/petkaantonov/bluebird/issues/166) - -## 1.1.1 (2014-03-18) - -Bugfixes: - - - [#138](https://github.com/petkaantonov/bluebird/issues/138) - - [#144](https://github.com/petkaantonov/bluebird/issues/144) - - [#148](https://github.com/petkaantonov/bluebird/issues/148) - - [#151](https://github.com/petkaantonov/bluebird/issues/151) - -## 1.1.0 (2014-03-08) - -Features: - - - Implement [`Promise.prototype.tap()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#tapfunction-handler---promise) - - Implement [`Promise.coroutine.addYieldHandler()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#promisecoroutineaddyieldhandlerfunction-handler---void) - - Deprecate `Promise.prototype.spawn` - -Bugfixes: - - - Fix already rejected promises being reported as unhandled when handled through collection methods - - Fix browserisfy crashing from checking `process.version.indexOf` - -## 1.0.8 (2014-03-03) - -Bugfixes: - - - Fix active domain being lost across asynchronous boundaries in Node.JS 10.xx - -## 1.0.7 (2014-02-25) - -Bugfixes: - - - Fix handled errors being reported - -## 1.0.6 (2014-02-17) - -Bugfixes: - - - Fix bug with unhandled rejections not being reported - when using `Promise.try` or `Promise.method` without - attaching further handlers - -## 1.0.5 (2014-02-15) - -Features: - - - Node.js performance: promisified functions try to check amount of passed arguments in most optimal order - - Node.js promisified functions will have same `.length` as the original function minus one (for the callback parameter) - -## 1.0.4 (2014-02-09) - -Features: - - - Possibly unhandled rejection handler will always get a stack trace, even if the rejection or thrown error was not an error - - Unhandled rejections are tracked per promise, not per error. So if you create multiple branches from a single ancestor and that ancestor gets rejected, each branch with no error handler with the end will cause a possibly unhandled rejection handler invocation - -Bugfixes: - - - Fix unhandled non-writable objects or primitives not reported by possibly unhandled rejection handler - -## 1.0.3 (2014-02-05) - -Bugfixes: - - - [#93](https://github.com/petkaantonov/bluebird/issues/93) - -## 1.0.2 (2014-02-04) - -Features: - - - Significantly improve performance of foreign bluebird thenables - -Bugfixes: - - - [#88](https://github.com/petkaantonov/bluebird/issues/88) - -## 1.0.1 (2014-01-28) - -Features: - - - Error objects that have property `.isAsync = true` will now be caught by `.error()` - -Bugfixes: - - - Fix TypeError and RangeError shims not working without `new` operator - -## 1.0.0 (2014-01-12) - -Features: - - - `.filter`, `.map`, and `.reduce` no longer skip sparse array holes. This is a backwards incompatible change. - - Like `.map` and `.filter`, `.reduce` now allows returning promises and thenables from the iteration function. - -Bugfixes: - - - [#58](https://github.com/petkaantonov/bluebird/issues/58) - - [#61](https://github.com/petkaantonov/bluebird/issues/61) - - [#64](https://github.com/petkaantonov/bluebird/issues/64) - - [#60](https://github.com/petkaantonov/bluebird/issues/60) - -## 0.11.6-1 (2013-12-29) - -## 0.11.6-0 (2013-12-29) - -Features: - - - You may now return promises and thenables from the filterer function used in `Promise.filter` and `Promise.prototype.filter`. - - - `.error()` now catches additional sources of rejections: - - - Rejections originating from `Promise.reject` - - - Rejections originating from thenables using - the `reject` callback - - - Rejections originating from promisified callbacks - which use the `errback` argument - - - Rejections originating from `new Promise` constructor - where the `reject` callback is called explicitly - - - Rejections originating from `PromiseResolver` where - `.reject()` method is called explicitly - -Bugfixes: - - - Fix `captureStackTrace` being called when it was `null` - - Fix `Promise.map` not unwrapping thenables - -## 0.11.5-1 (2013-12-15) - -## 0.11.5-0 (2013-12-03) - -Features: - - - Improve performance of collection methods - - Improve performance of promise chains - -## 0.11.4-1 (2013-12-02) - -## 0.11.4-0 (2013-12-02) - -Bugfixes: - - - Fix `Promise.some` behavior with arguments like negative integers, 0... - - Fix stack traces of synchronously throwing promisified functions' - -## 0.11.3-0 (2013-12-02) - -Features: - - - Improve performance of generators - -Bugfixes: - - - Fix critical bug with collection methods. - -## 0.11.2-0 (2013-12-02) - -Features: - - - Improve performance of all collection methods - -## 0.11.1-0 (2013-12-02) - -Features: - -- Improve overall performance. -- Improve performance of promisified functions. -- Improve performance of catch filters. -- Improve performance of .finally. - -Bugfixes: - -- Fix `.finally()` rejecting if passed non-function. It will now ignore non-functions like `.then`. -- Fix `.finally()` not converting thenables returned from the handler to promises. -- `.spread()` now rejects if the ultimate value given to it is not spreadable. - -## 0.11.0-0 (2013-12-02) - -Features: - - - Improve overall performance when not using `.bind()` or cancellation. - - Promises are now not cancellable by default. This is backwards incompatible change - see [`.cancellable()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#cancellable---promise) - - [`Promise.delay`](https://github.com/petkaantonov/bluebird/blob/master/API.md#promisedelaydynamic-value-int-ms---promise) - - [`.delay()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#delayint-ms---promise) - - [`.timeout()`](https://github.com/petkaantonov/bluebird/blob/master/API.md#timeoutint-ms--string-message---promise) - -## 0.10.14-0 (2013-12-01) - -Bugfixes: - - - Fix race condition when mixing 3rd party asynchrony. - -## 0.10.13-1 (2013-11-30) - -## 0.10.13-0 (2013-11-30) - -Bugfixes: - - - Fix another bug with progression. - -## 0.10.12-0 (2013-11-30) - -Bugfixes: - - - Fix bug with progression. - -## 0.10.11-4 (2013-11-29) - -## 0.10.11-2 (2013-11-29) - -Bugfixes: - - - Fix `.race()` not propagating bound values. - -## 0.10.11-1 (2013-11-29) - -Features: - - - Improve performance of `Promise.race` - -## 0.10.11-0 (2013-11-29) - -Bugfixes: - - - Fixed `Promise.promisifyAll` invoking property accessors. Only data properties with function values are considered. - -## 0.10.10-0 (2013-11-28) - -Features: - - - Disable long stack traces in browsers by default. Call `Promise.longStackTraces()` to enable them. - -## 0.10.9-1 (2013-11-27) - -Bugfixes: - - - Fail early when `new Promise` is constructed incorrectly - -## 0.10.9-0 (2013-11-27) - -Bugfixes: - - - Promise.props now takes a [thenable-for-collection](https://github.com/petkaantonov/bluebird/blob/f41edac61b7c421608ff439bb5a09b7cffeadcf9/test/mocha/props.js#L197-L217) - - All promise collection methods now reject when a promise-or-thenable-for-collection turns out not to give a collection - -## 0.10.8-0 (2013-11-25) - -Features: - - - All static collection methods take thenable-for-collection - -## 0.10.7-0 (2013-11-25) - -Features: - - - throw TypeError when thenable resolves with itself - - Make .race() and Promise.race() forever pending on empty collections - -## 0.10.6-0 (2013-11-25) - -Bugfixes: - - - Promise.resolve and PromiseResolver.resolve follow thenables too. - -## 0.10.5-0 (2013-11-24) - -Bugfixes: - - - Fix infinite loop when thenable resolves with itself - -## 0.10.4-1 (2013-11-24) - -Bugfixes: - - - Fix a file missing from build. (Critical fix) - -## 0.10.4-0 (2013-11-24) - -Features: - - - Remove dependency of es5-shim and es5-sham when using ES3. - -## 0.10.3-0 (2013-11-24) - -Features: - - - Improve performance of `Promise.method` - -## 0.10.2-1 (2013-11-24) - -Features: - - - Rename PromiseResolver#asCallback to PromiseResolver#callback - -## 0.10.2-0 (2013-11-24) - -Features: - - - Remove memoization of thenables - -## 0.10.1-0 (2013-11-21) - -Features: - - - Add methods `Promise.resolve()`, `Promise.reject()`, `Promise.defer()` and `.resolve()`. - -## 0.10.0-1 (2013-11-17) - -## 0.10.0-0 (2013-11-17) - -Features: - - - Implement `Promise.method()` - - Implement `.return()` - - Implement `.throw()` - -Bugfixes: - - - Fix promises being able to use themselves as resolution or follower value - -## 0.9.11-1 (2013-11-14) - -Features: - - - Implicit `Promise.all()` when yielding an array from generators - -## 0.9.11-0 (2013-11-13) - -Bugfixes: - - - Fix `.spread` not unwrapping thenables - -## 0.9.10-2 (2013-11-13) - -Features: - - - Improve performance of promisified functions on V8 - -Bugfixes: - - - Report unhandled rejections even when long stack traces are disabled - - Fix `.error()` showing up in stack traces - -## 0.9.10-1 (2013-11-05) - -Bugfixes: - - - Catch filter method calls showing in stack traces - -## 0.9.10-0 (2013-11-05) - -Bugfixes: - - - Support primitives in catch filters - -## 0.9.9-0 (2013-11-05) - -Features: - - - Add `Promise.race()` and `.race()` - -## 0.9.8-0 (2013-11-01) - -Bugfixes: - - - Fix bug with `Promise.try` not unwrapping returned promises and thenables - -## 0.9.7-0 (2013-10-29) - -Bugfixes: - - - Fix bug with build files containing duplicated code for promise.js - -## 0.9.6-0 (2013-10-28) - -Features: - - - Improve output of reporting unhandled non-errors - - Implement RejectionError wrapping and `.error()` method - -## 0.9.5-0 (2013-10-27) - -Features: - - - Allow fresh copies of the library to be made - -## 0.9.4-1 (2013-10-27) - -## 0.9.4-0 (2013-10-27) - -Bugfixes: - - - Rollback non-working multiple fresh copies feature - -## 0.9.3-0 (2013-10-27) - -Features: - - - Allow fresh copies of the library to be made - - Add more components to customized builds - -## 0.9.2-1 (2013-10-25) - -## 0.9.2-0 (2013-10-25) - -Features: - - - Allow custom builds - -## 0.9.1-1 (2013-10-22) - -Bugfixes: - - - Fix unhandled rethrown exceptions not reported - -## 0.9.1-0 (2013-10-22) - -Features: - - - Improve performance of `Promise.try` - - Extend `Promise.try` to accept arguments and ctx to make it more usable in promisification of synchronous functions. - -## 0.9.0-0 (2013-10-18) - -Features: - - - Implement `.bind` and `Promise.bind` - -Bugfixes: - - - Fix `.some()` when argument is a pending promise that later resolves to an array - -## 0.8.5-1 (2013-10-17) - -Features: - - - Enable process wide long stack traces through BLUEBIRD_DEBUG environment variable - -## 0.8.5-0 (2013-10-16) - -Features: - - - Improve performance of all collection methods - -Bugfixes: - - - Fix .finally passing the value to handlers - - Remove kew from benchmarks due to bugs in the library breaking the benchmark - - Fix some bluebird library calls potentially appearing in stack traces - -## 0.8.4-1 (2013-10-15) - -Bugfixes: - - - Fix .pending() call showing in long stack traces - -## 0.8.4-0 (2013-10-15) - -Bugfixes: - - - Fix PromiseArray and its sub-classes swallowing possibly unhandled rejections - -## 0.8.3-3 (2013-10-14) - -Bugfixes: - - - Fix AMD-declaration using named module. - -## 0.8.3-2 (2013-10-14) - -Features: - - - The mortals that can handle it may now release Zalgo by `require("bluebird/zalgo");` - -## 0.8.3-1 (2013-10-14) - -Bugfixes: - - - Fix memory leak when using the same promise to attach handlers over and over again - -## 0.8.3-0 (2013-10-13) - -Features: - - - Add `Promise.props()` and `Promise.prototype.props()`. They work like `.all()` for object properties. - -Bugfixes: - - - Fix bug with .some returning garbage when sparse arrays have rejections - -## 0.8.2-2 (2013-10-13) - -Features: - - - Improve performance of `.reduce()` when `initialValue` can be synchronously cast to a value - -## 0.8.2-1 (2013-10-12) - -Bugfixes: - - - Fix .npmignore having irrelevant files - -## 0.8.2-0 (2013-10-12) - -Features: - - - Improve performance of `.some()` - -## 0.8.1-0 (2013-10-11) - -Bugfixes: - - - Remove uses of dynamic evaluation (`new Function`, `eval` etc) when strictly not necessary. Use feature detection to use static evaluation to avoid errors when dynamic evaluation is prohibited. - -## 0.8.0-3 (2013-10-10) - -Features: - - - Add `.asCallback` property to `PromiseResolver`s - -## 0.8.0-2 (2013-10-10) - -## 0.8.0-1 (2013-10-09) - -Features: - - - Improve overall performance. Be able to sustain infinite recursion when using promises. - -## 0.8.0-0 (2013-10-09) - -Bugfixes: - - - Fix stackoverflow error when function calls itself "synchronously" from a promise handler - -## 0.7.12-2 (2013-10-09) - -Bugfixes: - - - Fix safari 6 not using `MutationObserver` as a scheduler - - Fix process exceptions interfering with internal queue flushing - -## 0.7.12-1 (2013-10-09) - -Bugfixes: - - - Don't try to detect if generators are available to allow shims to be used - -## 0.7.12-0 (2013-10-08) - -Features: - - - Promisification now consider all functions on the object and its prototype chain - - Individual promisifcation uses current `this` if no explicit receiver is given - - Give better stack traces when promisified callbacks throw or errback primitives such as strings by wrapping them in an `Error` object. - -Bugfixes: - - - Fix runtime APIs throwing synchronous errors - -## 0.7.11-0 (2013-10-08) - -Features: - - - Deprecate `Promise.promisify(Object target)` in favor of `Promise.promisifyAll(Object target)` to avoid confusion with function objects - - Coroutines now throw error when a non-promise is `yielded` - -## 0.7.10-1 (2013-10-05) - -Features: - - - Make tests pass Internet Explorer 8 - -## 0.7.10-0 (2013-10-05) - -Features: - - - Create browser tests - -## 0.7.9-1 (2013-10-03) - -Bugfixes: - - - Fix promise cast bug when thenable fulfills using itself as the fulfillment value - -## 0.7.9-0 (2013-10-03) - -Features: - - - More performance improvements when long stack traces are enabled - -## 0.7.8-1 (2013-10-02) - -Features: - - - Performance improvements when long stack traces are enabled - -## 0.7.8-0 (2013-10-02) - -Bugfixes: - - - Fix promisified methods not turning synchronous exceptions into rejections - -## 0.7.7-1 (2013-10-02) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.7-0 (2013-10-01) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.6-0 (2013-09-29) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.5-0 (2013-09-28) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.4-1 (2013-09-28) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.4-0 (2013-09-28) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.3-1 (2013-09-28) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.3-0 (2013-09-27) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.2-0 (2013-09-27) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.1-5 (2013-09-26) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.1-4 (2013-09-25) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.1-3 (2013-09-25) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.1-2 (2013-09-24) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.1-1 (2013-09-24) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.1-0 (2013-09-24) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.0-1 (2013-09-23) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.7.0-0 (2013-09-23) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.5-2 (2013-09-20) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.5-1 (2013-09-18) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.5-0 (2013-09-18) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.4-1 (2013-09-18) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.4-0 (2013-09-18) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.3-4 (2013-09-18) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.3-3 (2013-09-18) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.3-2 (2013-09-16) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.3-1 (2013-09-16) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.3-0 (2013-09-15) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.2-1 (2013-09-14) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.2-0 (2013-09-14) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.1-0 (2013-09-14) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.6.0-0 (2013-09-13) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.9-6 (2013-09-12) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.9-5 (2013-09-12) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.9-4 (2013-09-12) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.9-3 (2013-09-11) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.9-2 (2013-09-11) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.9-1 (2013-09-11) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.9-0 (2013-09-11) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.8-1 (2013-09-11) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.8-0 (2013-09-11) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.7-0 (2013-09-11) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.6-1 (2013-09-10) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.6-0 (2013-09-10) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.5-1 (2013-09-10) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.5-0 (2013-09-09) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.4-1 (2013-09-08) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.4-0 (2013-09-08) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.3-0 (2013-09-07) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.2-0 (2013-09-07) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.1-0 (2013-09-07) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.5.0-0 (2013-09-07) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.4.0-0 (2013-09-06) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.3.0-1 (2013-09-06) - -Features: - - - feature - -Bugfixes: - - - bugfix - -## 0.3.0 (2013-09-06) diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/browser/bluebird.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/browser/bluebird.js deleted file mode 100644 index 2f7c13ff..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/browser/bluebird.js +++ /dev/null @@ -1,4892 +0,0 @@ -/* @preserve - * The MIT License (MIT) - * - * Copyright (c) 2013-2015 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * 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. - * - */ -/** - * bluebird build version 2.11.0 - * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, cancel, using, filter, any, each, timers -*/ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;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 _dereq_=="function"&&_dereq_;for(var o=0;o 0; -}; - -Async.prototype.throwLater = function(fn, arg) { - if (arguments.length === 1) { - arg = fn; - fn = function () { throw arg; }; - } - if (typeof setTimeout !== "undefined") { - setTimeout(function() { - fn(arg); - }, 0); - } else try { - this._schedule(function() { - fn(arg); - }); - } catch (e) { - throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/m3OTXk\u000a"); - } -}; - -function AsyncInvokeLater(fn, receiver, arg) { - this._lateQueue.push(fn, receiver, arg); - this._queueTick(); -} - -function AsyncInvoke(fn, receiver, arg) { - this._normalQueue.push(fn, receiver, arg); - this._queueTick(); -} - -function AsyncSettlePromises(promise) { - this._normalQueue._pushOne(promise); - this._queueTick(); -} - -if (!util.hasDevTools) { - Async.prototype.invokeLater = AsyncInvokeLater; - Async.prototype.invoke = AsyncInvoke; - Async.prototype.settlePromises = AsyncSettlePromises; -} else { - if (schedule.isStatic) { - schedule = function(fn) { setTimeout(fn, 0); }; - } - Async.prototype.invokeLater = function (fn, receiver, arg) { - if (this._trampolineEnabled) { - AsyncInvokeLater.call(this, fn, receiver, arg); - } else { - this._schedule(function() { - setTimeout(function() { - fn.call(receiver, arg); - }, 100); - }); - } - }; - - Async.prototype.invoke = function (fn, receiver, arg) { - if (this._trampolineEnabled) { - AsyncInvoke.call(this, fn, receiver, arg); - } else { - this._schedule(function() { - fn.call(receiver, arg); - }); - } - }; - - Async.prototype.settlePromises = function(promise) { - if (this._trampolineEnabled) { - AsyncSettlePromises.call(this, promise); - } else { - this._schedule(function() { - promise._settlePromises(); - }); - } - }; -} - -Async.prototype.invokeFirst = function (fn, receiver, arg) { - this._normalQueue.unshift(fn, receiver, arg); - this._queueTick(); -}; - -Async.prototype._drainQueue = function(queue) { - while (queue.length() > 0) { - var fn = queue.shift(); - if (typeof fn !== "function") { - fn._settlePromises(); - continue; - } - var receiver = queue.shift(); - var arg = queue.shift(); - fn.call(receiver, arg); - } -}; - -Async.prototype._drainQueues = function () { - this._drainQueue(this._normalQueue); - this._reset(); - this._drainQueue(this._lateQueue); -}; - -Async.prototype._queueTick = function () { - if (!this._isTickUsed) { - this._isTickUsed = true; - this._schedule(this.drainQueues); - } -}; - -Async.prototype._reset = function () { - this._isTickUsed = false; -}; - -module.exports = new Async(); -module.exports.firstLineError = firstLineError; - -},{"./queue.js":28,"./schedule.js":31,"./util.js":38}],3:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise) { -var rejectThis = function(_, e) { - this._reject(e); -}; - -var targetRejected = function(e, context) { - context.promiseRejectionQueued = true; - context.bindingPromise._then(rejectThis, rejectThis, null, this, e); -}; - -var bindingResolved = function(thisArg, context) { - if (this._isPending()) { - this._resolveCallback(context.target); - } -}; - -var bindingRejected = function(e, context) { - if (!context.promiseRejectionQueued) this._reject(e); -}; - -Promise.prototype.bind = function (thisArg) { - var maybePromise = tryConvertToPromise(thisArg); - var ret = new Promise(INTERNAL); - ret._propagateFrom(this, 1); - var target = this._target(); - - ret._setBoundTo(maybePromise); - if (maybePromise instanceof Promise) { - var context = { - promiseRejectionQueued: false, - promise: ret, - target: target, - bindingPromise: maybePromise - }; - target._then(INTERNAL, targetRejected, ret._progress, ret, context); - maybePromise._then( - bindingResolved, bindingRejected, ret._progress, ret, context); - } else { - ret._resolveCallback(target); - } - return ret; -}; - -Promise.prototype._setBoundTo = function (obj) { - if (obj !== undefined) { - this._bitField = this._bitField | 131072; - this._boundTo = obj; - } else { - this._bitField = this._bitField & (~131072); - } -}; - -Promise.prototype._isBound = function () { - return (this._bitField & 131072) === 131072; -}; - -Promise.bind = function (thisArg, value) { - var maybePromise = tryConvertToPromise(thisArg); - var ret = new Promise(INTERNAL); - - ret._setBoundTo(maybePromise); - if (maybePromise instanceof Promise) { - maybePromise._then(function() { - ret._resolveCallback(value); - }, ret._reject, ret._progress, ret, null); - } else { - ret._resolveCallback(value); - } - return ret; -}; -}; - -},{}],4:[function(_dereq_,module,exports){ -"use strict"; -var old; -if (typeof Promise !== "undefined") old = Promise; -function noConflict() { - try { if (Promise === bluebird) Promise = old; } - catch (e) {} - return bluebird; -} -var bluebird = _dereq_("./promise.js")(); -bluebird.noConflict = noConflict; -module.exports = bluebird; - -},{"./promise.js":23}],5:[function(_dereq_,module,exports){ -"use strict"; -var cr = Object.create; -if (cr) { - var callerCache = cr(null); - var getterCache = cr(null); - callerCache[" size"] = getterCache[" size"] = 0; -} - -module.exports = function(Promise) { -var util = _dereq_("./util.js"); -var canEvaluate = util.canEvaluate; -var isIdentifier = util.isIdentifier; - -var getMethodCaller; -var getGetter; -if (!true) { -var makeMethodCaller = function (methodName) { - return new Function("ensureMethod", " \n\ - return function(obj) { \n\ - 'use strict' \n\ - var len = this.length; \n\ - ensureMethod(obj, 'methodName'); \n\ - switch(len) { \n\ - case 1: return obj.methodName(this[0]); \n\ - case 2: return obj.methodName(this[0], this[1]); \n\ - case 3: return obj.methodName(this[0], this[1], this[2]); \n\ - case 0: return obj.methodName(); \n\ - default: \n\ - return obj.methodName.apply(obj, this); \n\ - } \n\ - }; \n\ - ".replace(/methodName/g, methodName))(ensureMethod); -}; - -var makeGetter = function (propertyName) { - return new Function("obj", " \n\ - 'use strict'; \n\ - return obj.propertyName; \n\ - ".replace("propertyName", propertyName)); -}; - -var getCompiled = function(name, compiler, cache) { - var ret = cache[name]; - if (typeof ret !== "function") { - if (!isIdentifier(name)) { - return null; - } - ret = compiler(name); - cache[name] = ret; - cache[" size"]++; - if (cache[" size"] > 512) { - var keys = Object.keys(cache); - for (var i = 0; i < 256; ++i) delete cache[keys[i]]; - cache[" size"] = keys.length - 256; - } - } - return ret; -}; - -getMethodCaller = function(name) { - return getCompiled(name, makeMethodCaller, callerCache); -}; - -getGetter = function(name) { - return getCompiled(name, makeGetter, getterCache); -}; -} - -function ensureMethod(obj, methodName) { - var fn; - if (obj != null) fn = obj[methodName]; - if (typeof fn !== "function") { - var message = "Object " + util.classString(obj) + " has no method '" + - util.toString(methodName) + "'"; - throw new Promise.TypeError(message); - } - return fn; -} - -function caller(obj) { - var methodName = this.pop(); - var fn = ensureMethod(obj, methodName); - return fn.apply(obj, this); -} -Promise.prototype.call = function (methodName) { - var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} - if (!true) { - if (canEvaluate) { - var maybeCaller = getMethodCaller(methodName); - if (maybeCaller !== null) { - return this._then( - maybeCaller, undefined, undefined, args, undefined); - } - } - } - args.push(methodName); - return this._then(caller, undefined, undefined, args, undefined); -}; - -function namedGetter(obj) { - return obj[this]; -} -function indexedGetter(obj) { - var index = +this; - if (index < 0) index = Math.max(0, index + obj.length); - return obj[index]; -} -Promise.prototype.get = function (propertyName) { - var isIndex = (typeof propertyName === "number"); - var getter; - if (!isIndex) { - if (canEvaluate) { - var maybeGetter = getGetter(propertyName); - getter = maybeGetter !== null ? maybeGetter : namedGetter; - } else { - getter = namedGetter; - } - } else { - getter = indexedGetter; - } - return this._then(getter, undefined, undefined, propertyName, undefined); -}; -}; - -},{"./util.js":38}],6:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -var errors = _dereq_("./errors.js"); -var async = _dereq_("./async.js"); -var CancellationError = errors.CancellationError; - -Promise.prototype._cancel = function (reason) { - if (!this.isCancellable()) return this; - var parent; - var promiseToReject = this; - while ((parent = promiseToReject._cancellationParent) !== undefined && - parent.isCancellable()) { - promiseToReject = parent; - } - this._unsetCancellable(); - promiseToReject._target()._rejectCallback(reason, false, true); -}; - -Promise.prototype.cancel = function (reason) { - if (!this.isCancellable()) return this; - if (reason === undefined) reason = new CancellationError(); - async.invokeLater(this._cancel, this, reason); - return this; -}; - -Promise.prototype.cancellable = function () { - if (this._cancellable()) return this; - async.enableTrampoline(); - this._setCancellable(); - this._cancellationParent = undefined; - return this; -}; - -Promise.prototype.uncancellable = function () { - var ret = this.then(); - ret._unsetCancellable(); - return ret; -}; - -Promise.prototype.fork = function (didFulfill, didReject, didProgress) { - var ret = this._then(didFulfill, didReject, didProgress, - undefined, undefined); - - ret._setCancellable(); - ret._cancellationParent = undefined; - return ret; -}; -}; - -},{"./async.js":2,"./errors.js":13}],7:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function() { -var async = _dereq_("./async.js"); -var util = _dereq_("./util.js"); -var bluebirdFramePattern = - /[\\\/]bluebird[\\\/]js[\\\/](main|debug|zalgo|instrumented)/; -var stackFramePattern = null; -var formatStack = null; -var indentStackFrames = false; -var warn; - -function CapturedTrace(parent) { - this._parent = parent; - var length = this._length = 1 + (parent === undefined ? 0 : parent._length); - captureStackTrace(this, CapturedTrace); - if (length > 32) this.uncycle(); -} -util.inherits(CapturedTrace, Error); - -CapturedTrace.prototype.uncycle = function() { - var length = this._length; - if (length < 2) return; - var nodes = []; - var stackToIndex = {}; - - for (var i = 0, node = this; node !== undefined; ++i) { - nodes.push(node); - node = node._parent; - } - length = this._length = i; - for (var i = length - 1; i >= 0; --i) { - var stack = nodes[i].stack; - if (stackToIndex[stack] === undefined) { - stackToIndex[stack] = i; - } - } - for (var i = 0; i < length; ++i) { - var currentStack = nodes[i].stack; - var index = stackToIndex[currentStack]; - if (index !== undefined && index !== i) { - if (index > 0) { - nodes[index - 1]._parent = undefined; - nodes[index - 1]._length = 1; - } - nodes[i]._parent = undefined; - nodes[i]._length = 1; - var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; - - if (index < length - 1) { - cycleEdgeNode._parent = nodes[index + 1]; - cycleEdgeNode._parent.uncycle(); - cycleEdgeNode._length = - cycleEdgeNode._parent._length + 1; - } else { - cycleEdgeNode._parent = undefined; - cycleEdgeNode._length = 1; - } - var currentChildLength = cycleEdgeNode._length + 1; - for (var j = i - 2; j >= 0; --j) { - nodes[j]._length = currentChildLength; - currentChildLength++; - } - return; - } - } -}; - -CapturedTrace.prototype.parent = function() { - return this._parent; -}; - -CapturedTrace.prototype.hasParent = function() { - return this._parent !== undefined; -}; - -CapturedTrace.prototype.attachExtraTrace = function(error) { - if (error.__stackCleaned__) return; - this.uncycle(); - var parsed = CapturedTrace.parseStackAndMessage(error); - var message = parsed.message; - var stacks = [parsed.stack]; - - var trace = this; - while (trace !== undefined) { - stacks.push(cleanStack(trace.stack.split("\n"))); - trace = trace._parent; - } - removeCommonRoots(stacks); - removeDuplicateOrEmptyJumps(stacks); - util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); - util.notEnumerableProp(error, "__stackCleaned__", true); -}; - -function reconstructStack(message, stacks) { - for (var i = 0; i < stacks.length - 1; ++i) { - stacks[i].push("From previous event:"); - stacks[i] = stacks[i].join("\n"); - } - if (i < stacks.length) { - stacks[i] = stacks[i].join("\n"); - } - return message + "\n" + stacks.join("\n"); -} - -function removeDuplicateOrEmptyJumps(stacks) { - for (var i = 0; i < stacks.length; ++i) { - if (stacks[i].length === 0 || - ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { - stacks.splice(i, 1); - i--; - } - } -} - -function removeCommonRoots(stacks) { - var current = stacks[0]; - for (var i = 1; i < stacks.length; ++i) { - var prev = stacks[i]; - var currentLastIndex = current.length - 1; - var currentLastLine = current[currentLastIndex]; - var commonRootMeetPoint = -1; - - for (var j = prev.length - 1; j >= 0; --j) { - if (prev[j] === currentLastLine) { - commonRootMeetPoint = j; - break; - } - } - - for (var j = commonRootMeetPoint; j >= 0; --j) { - var line = prev[j]; - if (current[currentLastIndex] === line) { - current.pop(); - currentLastIndex--; - } else { - break; - } - } - current = prev; - } -} - -function cleanStack(stack) { - var ret = []; - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - var isTraceLine = stackFramePattern.test(line) || - " (No stack trace)" === line; - var isInternalFrame = isTraceLine && shouldIgnore(line); - if (isTraceLine && !isInternalFrame) { - if (indentStackFrames && line.charAt(0) !== " ") { - line = " " + line; - } - ret.push(line); - } - } - return ret; -} - -function stackFramesAsArray(error) { - var stack = error.stack.replace(/\s+$/g, "").split("\n"); - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - if (" (No stack trace)" === line || stackFramePattern.test(line)) { - break; - } - } - if (i > 0) { - stack = stack.slice(i); - } - return stack; -} - -CapturedTrace.parseStackAndMessage = function(error) { - var stack = error.stack; - var message = error.toString(); - stack = typeof stack === "string" && stack.length > 0 - ? stackFramesAsArray(error) : [" (No stack trace)"]; - return { - message: message, - stack: cleanStack(stack) - }; -}; - -CapturedTrace.formatAndLogError = function(error, title) { - if (typeof console !== "undefined") { - var message; - if (typeof error === "object" || typeof error === "function") { - var stack = error.stack; - message = title + formatStack(stack, error); - } else { - message = title + String(error); - } - if (typeof warn === "function") { - warn(message); - } else if (typeof console.log === "function" || - typeof console.log === "object") { - console.log(message); - } - } -}; - -CapturedTrace.unhandledRejection = function (reason) { - CapturedTrace.formatAndLogError(reason, "^--- With additional stack trace: "); -}; - -CapturedTrace.isSupported = function () { - return typeof captureStackTrace === "function"; -}; - -CapturedTrace.fireRejectionEvent = -function(name, localHandler, reason, promise) { - var localEventFired = false; - try { - if (typeof localHandler === "function") { - localEventFired = true; - if (name === "rejectionHandled") { - localHandler(promise); - } else { - localHandler(reason, promise); - } - } - } catch (e) { - async.throwLater(e); - } - - var globalEventFired = false; - try { - globalEventFired = fireGlobalEvent(name, reason, promise); - } catch (e) { - globalEventFired = true; - async.throwLater(e); - } - - var domEventFired = false; - if (fireDomEvent) { - try { - domEventFired = fireDomEvent(name.toLowerCase(), { - reason: reason, - promise: promise - }); - } catch (e) { - domEventFired = true; - async.throwLater(e); - } - } - - if (!globalEventFired && !localEventFired && !domEventFired && - name === "unhandledRejection") { - CapturedTrace.formatAndLogError(reason, "Unhandled rejection "); - } -}; - -function formatNonError(obj) { - var str; - if (typeof obj === "function") { - str = "[function " + - (obj.name || "anonymous") + - "]"; - } else { - str = obj.toString(); - var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; - if (ruselessToString.test(str)) { - try { - var newStr = JSON.stringify(obj); - str = newStr; - } - catch(e) { - - } - } - if (str.length === 0) { - str = "(empty array)"; - } - } - return ("(<" + snip(str) + ">, no stack trace)"); -} - -function snip(str) { - var maxChars = 41; - if (str.length < maxChars) { - return str; - } - return str.substr(0, maxChars - 3) + "..."; -} - -var shouldIgnore = function() { return false; }; -var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; -function parseLineInfo(line) { - var matches = line.match(parseLineInfoRegex); - if (matches) { - return { - fileName: matches[1], - line: parseInt(matches[2], 10) - }; - } -} -CapturedTrace.setBounds = function(firstLineError, lastLineError) { - if (!CapturedTrace.isSupported()) return; - var firstStackLines = firstLineError.stack.split("\n"); - var lastStackLines = lastLineError.stack.split("\n"); - var firstIndex = -1; - var lastIndex = -1; - var firstFileName; - var lastFileName; - for (var i = 0; i < firstStackLines.length; ++i) { - var result = parseLineInfo(firstStackLines[i]); - if (result) { - firstFileName = result.fileName; - firstIndex = result.line; - break; - } - } - for (var i = 0; i < lastStackLines.length; ++i) { - var result = parseLineInfo(lastStackLines[i]); - if (result) { - lastFileName = result.fileName; - lastIndex = result.line; - break; - } - } - if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || - firstFileName !== lastFileName || firstIndex >= lastIndex) { - return; - } - - shouldIgnore = function(line) { - if (bluebirdFramePattern.test(line)) return true; - var info = parseLineInfo(line); - if (info) { - if (info.fileName === firstFileName && - (firstIndex <= info.line && info.line <= lastIndex)) { - return true; - } - } - return false; - }; -}; - -var captureStackTrace = (function stackDetection() { - var v8stackFramePattern = /^\s*at\s*/; - var v8stackFormatter = function(stack, error) { - if (typeof stack === "string") return stack; - - if (error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - if (typeof Error.stackTraceLimit === "number" && - typeof Error.captureStackTrace === "function") { - Error.stackTraceLimit = Error.stackTraceLimit + 6; - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - var captureStackTrace = Error.captureStackTrace; - - shouldIgnore = function(line) { - return bluebirdFramePattern.test(line); - }; - return function(receiver, ignoreUntil) { - Error.stackTraceLimit = Error.stackTraceLimit + 6; - captureStackTrace(receiver, ignoreUntil); - Error.stackTraceLimit = Error.stackTraceLimit - 6; - }; - } - var err = new Error(); - - if (typeof err.stack === "string" && - err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { - stackFramePattern = /@/; - formatStack = v8stackFormatter; - indentStackFrames = true; - return function captureStackTrace(o) { - o.stack = new Error().stack; - }; - } - - var hasStackAfterThrow; - try { throw new Error(); } - catch(e) { - hasStackAfterThrow = ("stack" in e); - } - if (!("stack" in err) && hasStackAfterThrow && - typeof Error.stackTraceLimit === "number") { - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - return function captureStackTrace(o) { - Error.stackTraceLimit = Error.stackTraceLimit + 6; - try { throw new Error(); } - catch(e) { o.stack = e.stack; } - Error.stackTraceLimit = Error.stackTraceLimit - 6; - }; - } - - formatStack = function(stack, error) { - if (typeof stack === "string") return stack; - - if ((typeof error === "object" || - typeof error === "function") && - error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - return null; - -})([]); - -var fireDomEvent; -var fireGlobalEvent = (function() { - if (util.isNode) { - return function(name, reason, promise) { - if (name === "rejectionHandled") { - return process.emit(name, promise); - } else { - return process.emit(name, reason, promise); - } - }; - } else { - var customEventWorks = false; - var anyEventWorks = true; - try { - var ev = new self.CustomEvent("test"); - customEventWorks = ev instanceof CustomEvent; - } catch (e) {} - if (!customEventWorks) { - try { - var event = document.createEvent("CustomEvent"); - event.initCustomEvent("testingtheevent", false, true, {}); - self.dispatchEvent(event); - } catch (e) { - anyEventWorks = false; - } - } - if (anyEventWorks) { - fireDomEvent = function(type, detail) { - var event; - if (customEventWorks) { - event = new self.CustomEvent(type, { - detail: detail, - bubbles: false, - cancelable: true - }); - } else if (self.dispatchEvent) { - event = document.createEvent("CustomEvent"); - event.initCustomEvent(type, false, true, detail); - } - - return event ? !self.dispatchEvent(event) : false; - }; - } - - var toWindowMethodNameMap = {}; - toWindowMethodNameMap["unhandledRejection"] = ("on" + - "unhandledRejection").toLowerCase(); - toWindowMethodNameMap["rejectionHandled"] = ("on" + - "rejectionHandled").toLowerCase(); - - return function(name, reason, promise) { - var methodName = toWindowMethodNameMap[name]; - var method = self[methodName]; - if (!method) return false; - if (name === "rejectionHandled") { - method.call(self, promise); - } else { - method.call(self, reason, promise); - } - return true; - }; - } -})(); - -if (typeof console !== "undefined" && typeof console.warn !== "undefined") { - warn = function (message) { - console.warn(message); - }; - if (util.isNode && process.stderr.isTTY) { - warn = function(message) { - process.stderr.write("\u001b[31m" + message + "\u001b[39m\n"); - }; - } else if (!util.isNode && typeof (new Error().stack) === "string") { - warn = function(message) { - console.warn("%c" + message, "color: red"); - }; - } -} - -return CapturedTrace; -}; - -},{"./async.js":2,"./util.js":38}],8:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(NEXT_FILTER) { -var util = _dereq_("./util.js"); -var errors = _dereq_("./errors.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var keys = _dereq_("./es5.js").keys; -var TypeError = errors.TypeError; - -function CatchFilter(instances, callback, promise) { - this._instances = instances; - this._callback = callback; - this._promise = promise; -} - -function safePredicate(predicate, e) { - var safeObject = {}; - var retfilter = tryCatch(predicate).call(safeObject, e); - - if (retfilter === errorObj) return retfilter; - - var safeKeys = keys(safeObject); - if (safeKeys.length) { - errorObj.e = new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a"); - return errorObj; - } - return retfilter; -} - -CatchFilter.prototype.doFilter = function (e) { - var cb = this._callback; - var promise = this._promise; - var boundTo = promise._boundValue(); - for (var i = 0, len = this._instances.length; i < len; ++i) { - var item = this._instances[i]; - var itemIsErrorType = item === Error || - (item != null && item.prototype instanceof Error); - - if (itemIsErrorType && e instanceof item) { - var ret = tryCatch(cb).call(boundTo, e); - if (ret === errorObj) { - NEXT_FILTER.e = ret.e; - return NEXT_FILTER; - } - return ret; - } else if (typeof item === "function" && !itemIsErrorType) { - var shouldHandle = safePredicate(item, e); - if (shouldHandle === errorObj) { - e = errorObj.e; - break; - } else if (shouldHandle) { - var ret = tryCatch(cb).call(boundTo, e); - if (ret === errorObj) { - NEXT_FILTER.e = ret.e; - return NEXT_FILTER; - } - return ret; - } - } - } - NEXT_FILTER.e = e; - return NEXT_FILTER; -}; - -return CatchFilter; -}; - -},{"./errors.js":13,"./es5.js":14,"./util.js":38}],9:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, CapturedTrace, isDebugging) { -var contextStack = []; -function Context() { - this._trace = new CapturedTrace(peekContext()); -} -Context.prototype._pushContext = function () { - if (!isDebugging()) return; - if (this._trace !== undefined) { - contextStack.push(this._trace); - } -}; - -Context.prototype._popContext = function () { - if (!isDebugging()) return; - if (this._trace !== undefined) { - contextStack.pop(); - } -}; - -function createContext() { - if (isDebugging()) return new Context(); -} - -function peekContext() { - var lastIndex = contextStack.length - 1; - if (lastIndex >= 0) { - return contextStack[lastIndex]; - } - return undefined; -} - -Promise.prototype._peekContext = peekContext; -Promise.prototype._pushContext = Context.prototype._pushContext; -Promise.prototype._popContext = Context.prototype._popContext; - -return createContext; -}; - -},{}],10:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, CapturedTrace) { -var getDomain = Promise._getDomain; -var async = _dereq_("./async.js"); -var Warning = _dereq_("./errors.js").Warning; -var util = _dereq_("./util.js"); -var canAttachTrace = util.canAttachTrace; -var unhandledRejectionHandled; -var possiblyUnhandledRejection; -var debugging = false || (util.isNode && - (!!process.env["BLUEBIRD_DEBUG"] || - process.env["NODE_ENV"] === "development")); - -if (util.isNode && process.env["BLUEBIRD_DEBUG"] == 0) debugging = false; - -if (debugging) { - async.disableTrampolineIfNecessary(); -} - -Promise.prototype._ignoreRejections = function() { - this._unsetRejectionIsUnhandled(); - this._bitField = this._bitField | 16777216; -}; - -Promise.prototype._ensurePossibleRejectionHandled = function () { - if ((this._bitField & 16777216) !== 0) return; - this._setRejectionIsUnhandled(); - async.invokeLater(this._notifyUnhandledRejection, this, undefined); -}; - -Promise.prototype._notifyUnhandledRejectionIsHandled = function () { - CapturedTrace.fireRejectionEvent("rejectionHandled", - unhandledRejectionHandled, undefined, this); -}; - -Promise.prototype._notifyUnhandledRejection = function () { - if (this._isRejectionUnhandled()) { - var reason = this._getCarriedStackTrace() || this._settledValue; - this._setUnhandledRejectionIsNotified(); - CapturedTrace.fireRejectionEvent("unhandledRejection", - possiblyUnhandledRejection, reason, this); - } -}; - -Promise.prototype._setUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField | 524288; -}; - -Promise.prototype._unsetUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField & (~524288); -}; - -Promise.prototype._isUnhandledRejectionNotified = function () { - return (this._bitField & 524288) > 0; -}; - -Promise.prototype._setRejectionIsUnhandled = function () { - this._bitField = this._bitField | 2097152; -}; - -Promise.prototype._unsetRejectionIsUnhandled = function () { - this._bitField = this._bitField & (~2097152); - if (this._isUnhandledRejectionNotified()) { - this._unsetUnhandledRejectionIsNotified(); - this._notifyUnhandledRejectionIsHandled(); - } -}; - -Promise.prototype._isRejectionUnhandled = function () { - return (this._bitField & 2097152) > 0; -}; - -Promise.prototype._setCarriedStackTrace = function (capturedTrace) { - this._bitField = this._bitField | 1048576; - this._fulfillmentHandler0 = capturedTrace; -}; - -Promise.prototype._isCarryingStackTrace = function () { - return (this._bitField & 1048576) > 0; -}; - -Promise.prototype._getCarriedStackTrace = function () { - return this._isCarryingStackTrace() - ? this._fulfillmentHandler0 - : undefined; -}; - -Promise.prototype._captureStackTrace = function () { - if (debugging) { - this._trace = new CapturedTrace(this._peekContext()); - } - return this; -}; - -Promise.prototype._attachExtraTrace = function (error, ignoreSelf) { - if (debugging && canAttachTrace(error)) { - var trace = this._trace; - if (trace !== undefined) { - if (ignoreSelf) trace = trace._parent; - } - if (trace !== undefined) { - trace.attachExtraTrace(error); - } else if (!error.__stackCleaned__) { - var parsed = CapturedTrace.parseStackAndMessage(error); - util.notEnumerableProp(error, "stack", - parsed.message + "\n" + parsed.stack.join("\n")); - util.notEnumerableProp(error, "__stackCleaned__", true); - } - } -}; - -Promise.prototype._warn = function(message) { - var warning = new Warning(message); - var ctx = this._peekContext(); - if (ctx) { - ctx.attachExtraTrace(warning); - } else { - var parsed = CapturedTrace.parseStackAndMessage(warning); - warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); - } - CapturedTrace.formatAndLogError(warning, ""); -}; - -Promise.onPossiblyUnhandledRejection = function (fn) { - var domain = getDomain(); - possiblyUnhandledRejection = - typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) - : undefined; -}; - -Promise.onUnhandledRejectionHandled = function (fn) { - var domain = getDomain(); - unhandledRejectionHandled = - typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) - : undefined; -}; - -Promise.longStackTraces = function () { - if (async.haveItemsQueued() && - debugging === false - ) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/DT1qyG\u000a"); - } - debugging = CapturedTrace.isSupported(); - if (debugging) { - async.disableTrampolineIfNecessary(); - } -}; - -Promise.hasLongStackTraces = function () { - return debugging && CapturedTrace.isSupported(); -}; - -if (!CapturedTrace.isSupported()) { - Promise.longStackTraces = function(){}; - debugging = false; -} - -return function() { - return debugging; -}; -}; - -},{"./async.js":2,"./errors.js":13,"./util.js":38}],11:[function(_dereq_,module,exports){ -"use strict"; -var util = _dereq_("./util.js"); -var isPrimitive = util.isPrimitive; - -module.exports = function(Promise) { -var returner = function () { - return this; -}; -var thrower = function () { - throw this; -}; -var returnUndefined = function() {}; -var throwUndefined = function() { - throw undefined; -}; - -var wrapper = function (value, action) { - if (action === 1) { - return function () { - throw value; - }; - } else if (action === 2) { - return function () { - return value; - }; - } -}; - - -Promise.prototype["return"] = -Promise.prototype.thenReturn = function (value) { - if (value === undefined) return this.then(returnUndefined); - - if (isPrimitive(value)) { - return this._then( - wrapper(value, 2), - undefined, - undefined, - undefined, - undefined - ); - } else if (value instanceof Promise) { - value._ignoreRejections(); - } - return this._then(returner, undefined, undefined, value, undefined); -}; - -Promise.prototype["throw"] = -Promise.prototype.thenThrow = function (reason) { - if (reason === undefined) return this.then(throwUndefined); - - if (isPrimitive(reason)) { - return this._then( - wrapper(reason, 1), - undefined, - undefined, - undefined, - undefined - ); - } - return this._then(thrower, undefined, undefined, reason, undefined); -}; -}; - -},{"./util.js":38}],12:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseReduce = Promise.reduce; - -Promise.prototype.each = function (fn) { - return PromiseReduce(this, fn, null, INTERNAL); -}; - -Promise.each = function (promises, fn) { - return PromiseReduce(promises, fn, null, INTERNAL); -}; -}; - -},{}],13:[function(_dereq_,module,exports){ -"use strict"; -var es5 = _dereq_("./es5.js"); -var Objectfreeze = es5.freeze; -var util = _dereq_("./util.js"); -var inherits = util.inherits; -var notEnumerableProp = util.notEnumerableProp; - -function subError(nameProperty, defaultMessage) { - function SubError(message) { - if (!(this instanceof SubError)) return new SubError(message); - notEnumerableProp(this, "message", - typeof message === "string" ? message : defaultMessage); - notEnumerableProp(this, "name", nameProperty); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } else { - Error.call(this); - } - } - inherits(SubError, Error); - return SubError; -} - -var _TypeError, _RangeError; -var Warning = subError("Warning", "warning"); -var CancellationError = subError("CancellationError", "cancellation error"); -var TimeoutError = subError("TimeoutError", "timeout error"); -var AggregateError = subError("AggregateError", "aggregate error"); -try { - _TypeError = TypeError; - _RangeError = RangeError; -} catch(e) { - _TypeError = subError("TypeError", "type error"); - _RangeError = subError("RangeError", "range error"); -} - -var methods = ("join pop push shift unshift slice filter forEach some " + - "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); - -for (var i = 0; i < methods.length; ++i) { - if (typeof Array.prototype[methods[i]] === "function") { - AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; - } -} - -es5.defineProperty(AggregateError.prototype, "length", { - value: 0, - configurable: false, - writable: true, - enumerable: true -}); -AggregateError.prototype["isOperational"] = true; -var level = 0; -AggregateError.prototype.toString = function() { - var indent = Array(level * 4 + 1).join(" "); - var ret = "\n" + indent + "AggregateError of:" + "\n"; - level++; - indent = Array(level * 4 + 1).join(" "); - for (var i = 0; i < this.length; ++i) { - var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; - var lines = str.split("\n"); - for (var j = 0; j < lines.length; ++j) { - lines[j] = indent + lines[j]; - } - str = lines.join("\n"); - ret += str + "\n"; - } - level--; - return ret; -}; - -function OperationalError(message) { - if (!(this instanceof OperationalError)) - return new OperationalError(message); - notEnumerableProp(this, "name", "OperationalError"); - notEnumerableProp(this, "message", message); - this.cause = message; - this["isOperational"] = true; - - if (message instanceof Error) { - notEnumerableProp(this, "message", message.message); - notEnumerableProp(this, "stack", message.stack); - } else if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - -} -inherits(OperationalError, Error); - -var errorTypes = Error["__BluebirdErrorTypes__"]; -if (!errorTypes) { - errorTypes = Objectfreeze({ - CancellationError: CancellationError, - TimeoutError: TimeoutError, - OperationalError: OperationalError, - RejectionError: OperationalError, - AggregateError: AggregateError - }); - notEnumerableProp(Error, "__BluebirdErrorTypes__", errorTypes); -} - -module.exports = { - Error: Error, - TypeError: _TypeError, - RangeError: _RangeError, - CancellationError: errorTypes.CancellationError, - OperationalError: errorTypes.OperationalError, - TimeoutError: errorTypes.TimeoutError, - AggregateError: errorTypes.AggregateError, - Warning: Warning -}; - -},{"./es5.js":14,"./util.js":38}],14:[function(_dereq_,module,exports){ -var isES5 = (function(){ - "use strict"; - return this === undefined; -})(); - -if (isES5) { - module.exports = { - freeze: Object.freeze, - defineProperty: Object.defineProperty, - getDescriptor: Object.getOwnPropertyDescriptor, - keys: Object.keys, - names: Object.getOwnPropertyNames, - getPrototypeOf: Object.getPrototypeOf, - isArray: Array.isArray, - isES5: isES5, - propertyIsWritable: function(obj, prop) { - var descriptor = Object.getOwnPropertyDescriptor(obj, prop); - return !!(!descriptor || descriptor.writable || descriptor.set); - } - }; -} else { - var has = {}.hasOwnProperty; - var str = {}.toString; - var proto = {}.constructor.prototype; - - var ObjectKeys = function (o) { - var ret = []; - for (var key in o) { - if (has.call(o, key)) { - ret.push(key); - } - } - return ret; - }; - - var ObjectGetDescriptor = function(o, key) { - return {value: o[key]}; - }; - - var ObjectDefineProperty = function (o, key, desc) { - o[key] = desc.value; - return o; - }; - - var ObjectFreeze = function (obj) { - return obj; - }; - - var ObjectGetPrototypeOf = function (obj) { - try { - return Object(obj).constructor.prototype; - } - catch (e) { - return proto; - } - }; - - var ArrayIsArray = function (obj) { - try { - return str.call(obj) === "[object Array]"; - } - catch(e) { - return false; - } - }; - - module.exports = { - isArray: ArrayIsArray, - keys: ObjectKeys, - names: ObjectKeys, - defineProperty: ObjectDefineProperty, - getDescriptor: ObjectGetDescriptor, - freeze: ObjectFreeze, - getPrototypeOf: ObjectGetPrototypeOf, - isES5: isES5, - propertyIsWritable: function() { - return true; - } - }; -} - -},{}],15:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseMap = Promise.map; - -Promise.prototype.filter = function (fn, options) { - return PromiseMap(this, fn, options, INTERNAL); -}; - -Promise.filter = function (promises, fn, options) { - return PromiseMap(promises, fn, options, INTERNAL); -}; -}; - -},{}],16:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) { -var util = _dereq_("./util.js"); -var isPrimitive = util.isPrimitive; -var thrower = util.thrower; - -function returnThis() { - return this; -} -function throwThis() { - throw this; -} -function return$(r) { - return function() { - return r; - }; -} -function throw$(r) { - return function() { - throw r; - }; -} -function promisedFinally(ret, reasonOrValue, isFulfilled) { - var then; - if (isPrimitive(reasonOrValue)) { - then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue); - } else { - then = isFulfilled ? returnThis : throwThis; - } - return ret._then(then, thrower, undefined, reasonOrValue, undefined); -} - -function finallyHandler(reasonOrValue) { - var promise = this.promise; - var handler = this.handler; - - var ret = promise._isBound() - ? handler.call(promise._boundValue()) - : handler(); - - if (ret !== undefined) { - var maybePromise = tryConvertToPromise(ret, promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - return promisedFinally(maybePromise, reasonOrValue, - promise.isFulfilled()); - } - } - - if (promise.isRejected()) { - NEXT_FILTER.e = reasonOrValue; - return NEXT_FILTER; - } else { - return reasonOrValue; - } -} - -function tapHandler(value) { - var promise = this.promise; - var handler = this.handler; - - var ret = promise._isBound() - ? handler.call(promise._boundValue(), value) - : handler(value); - - if (ret !== undefined) { - var maybePromise = tryConvertToPromise(ret, promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - return promisedFinally(maybePromise, value, true); - } - } - return value; -} - -Promise.prototype._passThroughHandler = function (handler, isFinally) { - if (typeof handler !== "function") return this.then(); - - var promiseAndHandler = { - promise: this, - handler: handler - }; - - return this._then( - isFinally ? finallyHandler : tapHandler, - isFinally ? finallyHandler : undefined, undefined, - promiseAndHandler, undefined); -}; - -Promise.prototype.lastly = -Promise.prototype["finally"] = function (handler) { - return this._passThroughHandler(handler, true); -}; - -Promise.prototype.tap = function (handler) { - return this._passThroughHandler(handler, false); -}; -}; - -},{"./util.js":38}],17:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, - apiRejection, - INTERNAL, - tryConvertToPromise) { -var errors = _dereq_("./errors.js"); -var TypeError = errors.TypeError; -var util = _dereq_("./util.js"); -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; -var yieldHandlers = []; - -function promiseFromYieldHandler(value, yieldHandlers, traceParent) { - for (var i = 0; i < yieldHandlers.length; ++i) { - traceParent._pushContext(); - var result = tryCatch(yieldHandlers[i])(value); - traceParent._popContext(); - if (result === errorObj) { - traceParent._pushContext(); - var ret = Promise.reject(errorObj.e); - traceParent._popContext(); - return ret; - } - var maybePromise = tryConvertToPromise(result, traceParent); - if (maybePromise instanceof Promise) return maybePromise; - } - return null; -} - -function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { - var promise = this._promise = new Promise(INTERNAL); - promise._captureStackTrace(); - this._stack = stack; - this._generatorFunction = generatorFunction; - this._receiver = receiver; - this._generator = undefined; - this._yieldHandlers = typeof yieldHandler === "function" - ? [yieldHandler].concat(yieldHandlers) - : yieldHandlers; -} - -PromiseSpawn.prototype.promise = function () { - return this._promise; -}; - -PromiseSpawn.prototype._run = function () { - this._generator = this._generatorFunction.call(this._receiver); - this._receiver = - this._generatorFunction = undefined; - this._next(undefined); -}; - -PromiseSpawn.prototype._continue = function (result) { - if (result === errorObj) { - return this._promise._rejectCallback(result.e, false, true); - } - - var value = result.value; - if (result.done === true) { - this._promise._resolveCallback(value); - } else { - var maybePromise = tryConvertToPromise(value, this._promise); - if (!(maybePromise instanceof Promise)) { - maybePromise = - promiseFromYieldHandler(maybePromise, - this._yieldHandlers, - this._promise); - if (maybePromise === null) { - this._throw( - new TypeError( - "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/4Y4pDk\u000a\u000a".replace("%s", value) + - "From coroutine:\u000a" + - this._stack.split("\n").slice(1, -7).join("\n") - ) - ); - return; - } - } - maybePromise._then( - this._next, - this._throw, - undefined, - this, - null - ); - } -}; - -PromiseSpawn.prototype._throw = function (reason) { - this._promise._attachExtraTrace(reason); - this._promise._pushContext(); - var result = tryCatch(this._generator["throw"]) - .call(this._generator, reason); - this._promise._popContext(); - this._continue(result); -}; - -PromiseSpawn.prototype._next = function (value) { - this._promise._pushContext(); - var result = tryCatch(this._generator.next).call(this._generator, value); - this._promise._popContext(); - this._continue(result); -}; - -Promise.coroutine = function (generatorFunction, options) { - if (typeof generatorFunction !== "function") { - throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a"); - } - var yieldHandler = Object(options).yieldHandler; - var PromiseSpawn$ = PromiseSpawn; - var stack = new Error().stack; - return function () { - var generator = generatorFunction.apply(this, arguments); - var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, - stack); - spawn._generator = generator; - spawn._next(undefined); - return spawn.promise(); - }; -}; - -Promise.coroutine.addYieldHandler = function(fn) { - if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - yieldHandlers.push(fn); -}; - -Promise.spawn = function (generatorFunction) { - if (typeof generatorFunction !== "function") { - return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a"); - } - var spawn = new PromiseSpawn(generatorFunction, this); - var ret = spawn.promise(); - spawn._run(Promise.spawn); - return ret; -}; -}; - -},{"./errors.js":13,"./util.js":38}],18:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) { -var util = _dereq_("./util.js"); -var canEvaluate = util.canEvaluate; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var reject; - -if (!true) { -if (canEvaluate) { - var thenCallback = function(i) { - return new Function("value", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = value; \n\ - holder.checkFulfillment(this); \n\ - ".replace(/Index/g, i)); - }; - - var caller = function(count) { - var values = []; - for (var i = 1; i <= count; ++i) values.push("holder.p" + i); - return new Function("holder", " \n\ - 'use strict'; \n\ - var callback = holder.fn; \n\ - return callback(values); \n\ - ".replace(/values/g, values.join(", "))); - }; - var thenCallbacks = []; - var callers = [undefined]; - for (var i = 1; i <= 5; ++i) { - thenCallbacks.push(thenCallback(i)); - callers.push(caller(i)); - } - - var Holder = function(total, fn) { - this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null; - this.fn = fn; - this.total = total; - this.now = 0; - }; - - Holder.prototype.callers = callers; - Holder.prototype.checkFulfillment = function(promise) { - var now = this.now; - now++; - var total = this.total; - if (now >= total) { - var handler = this.callers[total]; - promise._pushContext(); - var ret = tryCatch(handler)(this); - promise._popContext(); - if (ret === errorObj) { - promise._rejectCallback(ret.e, false, true); - } else { - promise._resolveCallback(ret); - } - } else { - this.now = now; - } - }; - - var reject = function (reason) { - this._reject(reason); - }; -} -} - -Promise.join = function () { - var last = arguments.length - 1; - var fn; - if (last > 0 && typeof arguments[last] === "function") { - fn = arguments[last]; - if (!true) { - if (last < 6 && canEvaluate) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var holder = new Holder(last, fn); - var callbacks = thenCallbacks; - for (var i = 0; i < last; ++i) { - var maybePromise = tryConvertToPromise(arguments[i], ret); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - if (maybePromise._isPending()) { - maybePromise._then(callbacks[i], reject, - undefined, ret, holder); - } else if (maybePromise._isFulfilled()) { - callbacks[i].call(ret, - maybePromise._value(), holder); - } else { - ret._reject(maybePromise._reason()); - } - } else { - callbacks[i].call(ret, maybePromise, holder); - } - } - return ret; - } - } - } - var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];} - if (fn) args.pop(); - var ret = new PromiseArray(args).promise(); - return fn !== undefined ? ret.spread(fn) : ret; -}; - -}; - -},{"./util.js":38}],19:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL) { -var getDomain = Promise._getDomain; -var async = _dereq_("./async.js"); -var util = _dereq_("./util.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var PENDING = {}; -var EMPTY_ARRAY = []; - -function MappingPromiseArray(promises, fn, limit, _filter) { - this.constructor$(promises); - this._promise._captureStackTrace(); - var domain = getDomain(); - this._callback = domain === null ? fn : domain.bind(fn); - this._preservedValues = _filter === INTERNAL - ? new Array(this.length()) - : null; - this._limit = limit; - this._inFlight = 0; - this._queue = limit >= 1 ? [] : EMPTY_ARRAY; - async.invoke(init, this, undefined); -} -util.inherits(MappingPromiseArray, PromiseArray); -function init() {this._init$(undefined, -2);} - -MappingPromiseArray.prototype._init = function () {}; - -MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { - var values = this._values; - var length = this.length(); - var preservedValues = this._preservedValues; - var limit = this._limit; - if (values[index] === PENDING) { - values[index] = value; - if (limit >= 1) { - this._inFlight--; - this._drainQueue(); - if (this._isResolved()) return; - } - } else { - if (limit >= 1 && this._inFlight >= limit) { - values[index] = value; - this._queue.push(index); - return; - } - if (preservedValues !== null) preservedValues[index] = value; - - var callback = this._callback; - var receiver = this._promise._boundValue(); - this._promise._pushContext(); - var ret = tryCatch(callback).call(receiver, value, index, length); - this._promise._popContext(); - if (ret === errorObj) return this._reject(ret.e); - - var maybePromise = tryConvertToPromise(ret, this._promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - if (maybePromise._isPending()) { - if (limit >= 1) this._inFlight++; - values[index] = PENDING; - return maybePromise._proxyPromiseArray(this, index); - } else if (maybePromise._isFulfilled()) { - ret = maybePromise._value(); - } else { - return this._reject(maybePromise._reason()); - } - } - values[index] = ret; - } - var totalResolved = ++this._totalResolved; - if (totalResolved >= length) { - if (preservedValues !== null) { - this._filter(values, preservedValues); - } else { - this._resolve(values); - } - - } -}; - -MappingPromiseArray.prototype._drainQueue = function () { - var queue = this._queue; - var limit = this._limit; - var values = this._values; - while (queue.length > 0 && this._inFlight < limit) { - if (this._isResolved()) return; - var index = queue.pop(); - this._promiseFulfilled(values[index], index); - } -}; - -MappingPromiseArray.prototype._filter = function (booleans, values) { - var len = values.length; - var ret = new Array(len); - var j = 0; - for (var i = 0; i < len; ++i) { - if (booleans[i]) ret[j++] = values[i]; - } - ret.length = j; - this._resolve(ret); -}; - -MappingPromiseArray.prototype.preservedValues = function () { - return this._preservedValues; -}; - -function map(promises, fn, options, _filter) { - var limit = typeof options === "object" && options !== null - ? options.concurrency - : 0; - limit = typeof limit === "number" && - isFinite(limit) && limit >= 1 ? limit : 0; - return new MappingPromiseArray(promises, fn, limit, _filter); -} - -Promise.prototype.map = function (fn, options) { - if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - - return map(this, fn, options, null).promise(); -}; - -Promise.map = function (promises, fn, options, _filter) { - if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - return map(promises, fn, options, _filter).promise(); -}; - - -}; - -},{"./async.js":2,"./util.js":38}],20:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, INTERNAL, tryConvertToPromise, apiRejection) { -var util = _dereq_("./util.js"); -var tryCatch = util.tryCatch; - -Promise.method = function (fn) { - if (typeof fn !== "function") { - throw new Promise.TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - } - return function () { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value = tryCatch(fn).apply(this, arguments); - ret._popContext(); - ret._resolveFromSyncValue(value); - return ret; - }; -}; - -Promise.attempt = Promise["try"] = function (fn, args, ctx) { - if (typeof fn !== "function") { - return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - } - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value = util.isArray(args) - ? tryCatch(fn).apply(ctx, args) - : tryCatch(fn).call(ctx, args); - ret._popContext(); - ret._resolveFromSyncValue(value); - return ret; -}; - -Promise.prototype._resolveFromSyncValue = function (value) { - if (value === util.errorObj) { - this._rejectCallback(value.e, false, true); - } else { - this._resolveCallback(value, true); - } -}; -}; - -},{"./util.js":38}],21:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -var util = _dereq_("./util.js"); -var async = _dereq_("./async.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -function spreadAdapter(val, nodeback) { - var promise = this; - if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); - var ret = - tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -function successAdapter(val, nodeback) { - var promise = this; - var receiver = promise._boundValue(); - var ret = val === undefined - ? tryCatch(nodeback).call(receiver, null) - : tryCatch(nodeback).call(receiver, null, val); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} -function errorAdapter(reason, nodeback) { - var promise = this; - if (!reason) { - var target = promise._target(); - var newReason = target._getCarriedStackTrace(); - newReason.cause = reason; - reason = newReason; - } - var ret = tryCatch(nodeback).call(promise._boundValue(), reason); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -Promise.prototype.asCallback = -Promise.prototype.nodeify = function (nodeback, options) { - if (typeof nodeback == "function") { - var adapter = successAdapter; - if (options !== undefined && Object(options).spread) { - adapter = spreadAdapter; - } - this._then( - adapter, - errorAdapter, - undefined, - this, - nodeback - ); - } - return this; -}; -}; - -},{"./async.js":2,"./util.js":38}],22:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, PromiseArray) { -var util = _dereq_("./util.js"); -var async = _dereq_("./async.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -Promise.prototype.progressed = function (handler) { - return this._then(undefined, undefined, handler, undefined, undefined); -}; - -Promise.prototype._progress = function (progressValue) { - if (this._isFollowingOrFulfilledOrRejected()) return; - this._target()._progressUnchecked(progressValue); - -}; - -Promise.prototype._progressHandlerAt = function (index) { - return index === 0 - ? this._progressHandler0 - : this[(index << 2) + index - 5 + 2]; -}; - -Promise.prototype._doProgressWith = function (progression) { - var progressValue = progression.value; - var handler = progression.handler; - var promise = progression.promise; - var receiver = progression.receiver; - - var ret = tryCatch(handler).call(receiver, progressValue); - if (ret === errorObj) { - if (ret.e != null && - ret.e.name !== "StopProgressPropagation") { - var trace = util.canAttachTrace(ret.e) - ? ret.e : new Error(util.toString(ret.e)); - promise._attachExtraTrace(trace); - promise._progress(ret.e); - } - } else if (ret instanceof Promise) { - ret._then(promise._progress, null, null, promise, undefined); - } else { - promise._progress(ret); - } -}; - - -Promise.prototype._progressUnchecked = function (progressValue) { - var len = this._length(); - var progress = this._progress; - for (var i = 0; i < len; i++) { - var handler = this._progressHandlerAt(i); - var promise = this._promiseAt(i); - if (!(promise instanceof Promise)) { - var receiver = this._receiverAt(i); - if (typeof handler === "function") { - handler.call(receiver, progressValue, promise); - } else if (receiver instanceof PromiseArray && - !receiver._isResolved()) { - receiver._promiseProgressed(progressValue, promise); - } - continue; - } - - if (typeof handler === "function") { - async.invoke(this._doProgressWith, this, { - handler: handler, - promise: promise, - receiver: this._receiverAt(i), - value: progressValue - }); - } else { - async.invoke(progress, promise, progressValue); - } - } -}; -}; - -},{"./async.js":2,"./util.js":38}],23:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function() { -var makeSelfResolutionError = function () { - return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/LhFpo0\u000a"); -}; -var reflect = function() { - return new Promise.PromiseInspection(this._target()); -}; -var apiRejection = function(msg) { - return Promise.reject(new TypeError(msg)); -}; - -var util = _dereq_("./util.js"); - -var getDomain; -if (util.isNode) { - getDomain = function() { - var ret = process.domain; - if (ret === undefined) ret = null; - return ret; - }; -} else { - getDomain = function() { - return null; - }; -} -util.notEnumerableProp(Promise, "_getDomain", getDomain); - -var UNDEFINED_BINDING = {}; -var async = _dereq_("./async.js"); -var errors = _dereq_("./errors.js"); -var TypeError = Promise.TypeError = errors.TypeError; -Promise.RangeError = errors.RangeError; -Promise.CancellationError = errors.CancellationError; -Promise.TimeoutError = errors.TimeoutError; -Promise.OperationalError = errors.OperationalError; -Promise.RejectionError = errors.OperationalError; -Promise.AggregateError = errors.AggregateError; -var INTERNAL = function(){}; -var APPLY = {}; -var NEXT_FILTER = {e: null}; -var tryConvertToPromise = _dereq_("./thenables.js")(Promise, INTERNAL); -var PromiseArray = - _dereq_("./promise_array.js")(Promise, INTERNAL, - tryConvertToPromise, apiRejection); -var CapturedTrace = _dereq_("./captured_trace.js")(); -var isDebugging = _dereq_("./debuggability.js")(Promise, CapturedTrace); - /*jshint unused:false*/ -var createContext = - _dereq_("./context.js")(Promise, CapturedTrace, isDebugging); -var CatchFilter = _dereq_("./catch_filter.js")(NEXT_FILTER); -var PromiseResolver = _dereq_("./promise_resolver.js"); -var nodebackForPromise = PromiseResolver._nodebackForPromise; -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; - -function Promise(resolver) { - if (typeof resolver !== "function") { - throw new TypeError("the promise constructor requires a resolver function\u000a\u000a See http://goo.gl/EC22Yn\u000a"); - } - if (this.constructor !== Promise) { - throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/KsIlge\u000a"); - } - this._bitField = 0; - this._fulfillmentHandler0 = undefined; - this._rejectionHandler0 = undefined; - this._progressHandler0 = undefined; - this._promise0 = undefined; - this._receiver0 = undefined; - this._settledValue = undefined; - if (resolver !== INTERNAL) this._resolveFromResolver(resolver); -} - -Promise.prototype.toString = function () { - return "[object Promise]"; -}; - -Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { - var len = arguments.length; - if (len > 1) { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (typeof item === "function") { - catchInstances[j++] = item; - } else { - return Promise.reject( - new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a")); - } - } - catchInstances.length = j; - fn = arguments[i]; - var catchFilter = new CatchFilter(catchInstances, fn, this); - return this._then(undefined, catchFilter.doFilter, undefined, - catchFilter, undefined); - } - return this._then(undefined, fn, undefined, undefined, undefined); -}; - -Promise.prototype.reflect = function () { - return this._then(reflect, reflect, undefined, this, undefined); -}; - -Promise.prototype.then = function (didFulfill, didReject, didProgress) { - if (isDebugging() && arguments.length > 0 && - typeof didFulfill !== "function" && - typeof didReject !== "function") { - var msg = ".then() only accepts functions but was passed: " + - util.classString(didFulfill); - if (arguments.length > 1) { - msg += ", " + util.classString(didReject); - } - this._warn(msg); - } - return this._then(didFulfill, didReject, didProgress, - undefined, undefined); -}; - -Promise.prototype.done = function (didFulfill, didReject, didProgress) { - var promise = this._then(didFulfill, didReject, didProgress, - undefined, undefined); - promise._setIsFinal(); -}; - -Promise.prototype.spread = function (didFulfill, didReject) { - return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined); -}; - -Promise.prototype.isCancellable = function () { - return !this.isResolved() && - this._cancellable(); -}; - -Promise.prototype.toJSON = function () { - var ret = { - isFulfilled: false, - isRejected: false, - fulfillmentValue: undefined, - rejectionReason: undefined - }; - if (this.isFulfilled()) { - ret.fulfillmentValue = this.value(); - ret.isFulfilled = true; - } else if (this.isRejected()) { - ret.rejectionReason = this.reason(); - ret.isRejected = true; - } - return ret; -}; - -Promise.prototype.all = function () { - return new PromiseArray(this).promise(); -}; - -Promise.prototype.error = function (fn) { - return this.caught(util.originatesFromRejection, fn); -}; - -Promise.getNewLibraryCopy = module.exports; - -Promise.is = function (val) { - return val instanceof Promise; -}; - -Promise.fromNode = function(fn) { - var ret = new Promise(INTERNAL); - var result = tryCatch(fn)(nodebackForPromise(ret)); - if (result === errorObj) { - ret._rejectCallback(result.e, true, true); - } - return ret; -}; - -Promise.all = function (promises) { - return new PromiseArray(promises).promise(); -}; - -Promise.defer = Promise.pending = function () { - var promise = new Promise(INTERNAL); - return new PromiseResolver(promise); -}; - -Promise.cast = function (obj) { - var ret = tryConvertToPromise(obj); - if (!(ret instanceof Promise)) { - var val = ret; - ret = new Promise(INTERNAL); - ret._fulfillUnchecked(val); - } - return ret; -}; - -Promise.resolve = Promise.fulfilled = Promise.cast; - -Promise.reject = Promise.rejected = function (reason) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._rejectCallback(reason, true); - return ret; -}; - -Promise.setScheduler = function(fn) { - if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - var prev = async._schedule; - async._schedule = fn; - return prev; -}; - -Promise.prototype._then = function ( - didFulfill, - didReject, - didProgress, - receiver, - internalData -) { - var haveInternalData = internalData !== undefined; - var ret = haveInternalData ? internalData : new Promise(INTERNAL); - - if (!haveInternalData) { - ret._propagateFrom(this, 4 | 1); - ret._captureStackTrace(); - } - - var target = this._target(); - if (target !== this) { - if (receiver === undefined) receiver = this._boundTo; - if (!haveInternalData) ret._setIsMigrated(); - } - - var callbackIndex = target._addCallbacks(didFulfill, - didReject, - didProgress, - ret, - receiver, - getDomain()); - - if (target._isResolved() && !target._isSettlePromisesQueued()) { - async.invoke( - target._settlePromiseAtPostResolution, target, callbackIndex); - } - - return ret; -}; - -Promise.prototype._settlePromiseAtPostResolution = function (index) { - if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled(); - this._settlePromiseAt(index); -}; - -Promise.prototype._length = function () { - return this._bitField & 131071; -}; - -Promise.prototype._isFollowingOrFulfilledOrRejected = function () { - return (this._bitField & 939524096) > 0; -}; - -Promise.prototype._isFollowing = function () { - return (this._bitField & 536870912) === 536870912; -}; - -Promise.prototype._setLength = function (len) { - this._bitField = (this._bitField & -131072) | - (len & 131071); -}; - -Promise.prototype._setFulfilled = function () { - this._bitField = this._bitField | 268435456; -}; - -Promise.prototype._setRejected = function () { - this._bitField = this._bitField | 134217728; -}; - -Promise.prototype._setFollowing = function () { - this._bitField = this._bitField | 536870912; -}; - -Promise.prototype._setIsFinal = function () { - this._bitField = this._bitField | 33554432; -}; - -Promise.prototype._isFinal = function () { - return (this._bitField & 33554432) > 0; -}; - -Promise.prototype._cancellable = function () { - return (this._bitField & 67108864) > 0; -}; - -Promise.prototype._setCancellable = function () { - this._bitField = this._bitField | 67108864; -}; - -Promise.prototype._unsetCancellable = function () { - this._bitField = this._bitField & (~67108864); -}; - -Promise.prototype._setIsMigrated = function () { - this._bitField = this._bitField | 4194304; -}; - -Promise.prototype._unsetIsMigrated = function () { - this._bitField = this._bitField & (~4194304); -}; - -Promise.prototype._isMigrated = function () { - return (this._bitField & 4194304) > 0; -}; - -Promise.prototype._receiverAt = function (index) { - var ret = index === 0 - ? this._receiver0 - : this[ - index * 5 - 5 + 4]; - if (ret === UNDEFINED_BINDING) { - return undefined; - } else if (ret === undefined && this._isBound()) { - return this._boundValue(); - } - return ret; -}; - -Promise.prototype._promiseAt = function (index) { - return index === 0 - ? this._promise0 - : this[index * 5 - 5 + 3]; -}; - -Promise.prototype._fulfillmentHandlerAt = function (index) { - return index === 0 - ? this._fulfillmentHandler0 - : this[index * 5 - 5 + 0]; -}; - -Promise.prototype._rejectionHandlerAt = function (index) { - return index === 0 - ? this._rejectionHandler0 - : this[index * 5 - 5 + 1]; -}; - -Promise.prototype._boundValue = function() { - var ret = this._boundTo; - if (ret !== undefined) { - if (ret instanceof Promise) { - if (ret.isFulfilled()) { - return ret.value(); - } else { - return undefined; - } - } - } - return ret; -}; - -Promise.prototype._migrateCallbacks = function (follower, index) { - var fulfill = follower._fulfillmentHandlerAt(index); - var reject = follower._rejectionHandlerAt(index); - var progress = follower._progressHandlerAt(index); - var promise = follower._promiseAt(index); - var receiver = follower._receiverAt(index); - if (promise instanceof Promise) promise._setIsMigrated(); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, progress, promise, receiver, null); -}; - -Promise.prototype._addCallbacks = function ( - fulfill, - reject, - progress, - promise, - receiver, - domain -) { - var index = this._length(); - - if (index >= 131071 - 5) { - index = 0; - this._setLength(0); - } - - if (index === 0) { - this._promise0 = promise; - if (receiver !== undefined) this._receiver0 = receiver; - if (typeof fulfill === "function" && !this._isCarryingStackTrace()) { - this._fulfillmentHandler0 = - domain === null ? fulfill : domain.bind(fulfill); - } - if (typeof reject === "function") { - this._rejectionHandler0 = - domain === null ? reject : domain.bind(reject); - } - if (typeof progress === "function") { - this._progressHandler0 = - domain === null ? progress : domain.bind(progress); - } - } else { - var base = index * 5 - 5; - this[base + 3] = promise; - this[base + 4] = receiver; - if (typeof fulfill === "function") { - this[base + 0] = - domain === null ? fulfill : domain.bind(fulfill); - } - if (typeof reject === "function") { - this[base + 1] = - domain === null ? reject : domain.bind(reject); - } - if (typeof progress === "function") { - this[base + 2] = - domain === null ? progress : domain.bind(progress); - } - } - this._setLength(index + 1); - return index; -}; - -Promise.prototype._setProxyHandlers = function (receiver, promiseSlotValue) { - var index = this._length(); - - if (index >= 131071 - 5) { - index = 0; - this._setLength(0); - } - if (index === 0) { - this._promise0 = promiseSlotValue; - this._receiver0 = receiver; - } else { - var base = index * 5 - 5; - this[base + 3] = promiseSlotValue; - this[base + 4] = receiver; - } - this._setLength(index + 1); -}; - -Promise.prototype._proxyPromiseArray = function (promiseArray, index) { - this._setProxyHandlers(promiseArray, index); -}; - -Promise.prototype._resolveCallback = function(value, shouldBind) { - if (this._isFollowingOrFulfilledOrRejected()) return; - if (value === this) - return this._rejectCallback(makeSelfResolutionError(), false, true); - var maybePromise = tryConvertToPromise(value, this); - if (!(maybePromise instanceof Promise)) return this._fulfill(value); - - var propagationFlags = 1 | (shouldBind ? 4 : 0); - this._propagateFrom(maybePromise, propagationFlags); - var promise = maybePromise._target(); - if (promise._isPending()) { - var len = this._length(); - for (var i = 0; i < len; ++i) { - promise._migrateCallbacks(this, i); - } - this._setFollowing(); - this._setLength(0); - this._setFollowee(promise); - } else if (promise._isFulfilled()) { - this._fulfillUnchecked(promise._value()); - } else { - this._rejectUnchecked(promise._reason(), - promise._getCarriedStackTrace()); - } -}; - -Promise.prototype._rejectCallback = -function(reason, synchronous, shouldNotMarkOriginatingFromRejection) { - if (!shouldNotMarkOriginatingFromRejection) { - util.markAsOriginatingFromRejection(reason); - } - var trace = util.ensureErrorObject(reason); - var hasStack = trace === reason; - this._attachExtraTrace(trace, synchronous ? hasStack : false); - this._reject(reason, hasStack ? undefined : trace); -}; - -Promise.prototype._resolveFromResolver = function (resolver) { - var promise = this; - this._captureStackTrace(); - this._pushContext(); - var synchronous = true; - var r = tryCatch(resolver)(function(value) { - if (promise === null) return; - promise._resolveCallback(value); - promise = null; - }, function (reason) { - if (promise === null) return; - promise._rejectCallback(reason, synchronous); - promise = null; - }); - synchronous = false; - this._popContext(); - - if (r !== undefined && r === errorObj && promise !== null) { - promise._rejectCallback(r.e, true, true); - promise = null; - } -}; - -Promise.prototype._settlePromiseFromHandler = function ( - handler, receiver, value, promise -) { - if (promise._isRejected()) return; - promise._pushContext(); - var x; - if (receiver === APPLY && !this._isRejected()) { - x = tryCatch(handler).apply(this._boundValue(), value); - } else { - x = tryCatch(handler).call(receiver, value); - } - promise._popContext(); - - if (x === errorObj || x === promise || x === NEXT_FILTER) { - var err = x === promise ? makeSelfResolutionError() : x.e; - promise._rejectCallback(err, false, true); - } else { - promise._resolveCallback(x); - } -}; - -Promise.prototype._target = function() { - var ret = this; - while (ret._isFollowing()) ret = ret._followee(); - return ret; -}; - -Promise.prototype._followee = function() { - return this._rejectionHandler0; -}; - -Promise.prototype._setFollowee = function(promise) { - this._rejectionHandler0 = promise; -}; - -Promise.prototype._cleanValues = function () { - if (this._cancellable()) { - this._cancellationParent = undefined; - } -}; - -Promise.prototype._propagateFrom = function (parent, flags) { - if ((flags & 1) > 0 && parent._cancellable()) { - this._setCancellable(); - this._cancellationParent = parent; - } - if ((flags & 4) > 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -}; - -Promise.prototype._fulfill = function (value) { - if (this._isFollowingOrFulfilledOrRejected()) return; - this._fulfillUnchecked(value); -}; - -Promise.prototype._reject = function (reason, carriedStackTrace) { - if (this._isFollowingOrFulfilledOrRejected()) return; - this._rejectUnchecked(reason, carriedStackTrace); -}; - -Promise.prototype._settlePromiseAt = function (index) { - var promise = this._promiseAt(index); - var isPromise = promise instanceof Promise; - - if (isPromise && promise._isMigrated()) { - promise._unsetIsMigrated(); - return async.invoke(this._settlePromiseAt, this, index); - } - var handler = this._isFulfilled() - ? this._fulfillmentHandlerAt(index) - : this._rejectionHandlerAt(index); - - var carriedStackTrace = - this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined; - var value = this._settledValue; - var receiver = this._receiverAt(index); - this._clearCallbackDataAtIndex(index); - - if (typeof handler === "function") { - if (!isPromise) { - handler.call(receiver, value, promise); - } else { - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (receiver instanceof PromiseArray) { - if (!receiver._isResolved()) { - if (this._isFulfilled()) { - receiver._promiseFulfilled(value, promise); - } - else { - receiver._promiseRejected(value, promise); - } - } - } else if (isPromise) { - if (this._isFulfilled()) { - promise._fulfill(value); - } else { - promise._reject(value, carriedStackTrace); - } - } - - if (index >= 4 && (index & 31) === 4) - async.invokeLater(this._setLength, this, 0); -}; - -Promise.prototype._clearCallbackDataAtIndex = function(index) { - if (index === 0) { - if (!this._isCarryingStackTrace()) { - this._fulfillmentHandler0 = undefined; - } - this._rejectionHandler0 = - this._progressHandler0 = - this._receiver0 = - this._promise0 = undefined; - } else { - var base = index * 5 - 5; - this[base + 3] = - this[base + 4] = - this[base + 0] = - this[base + 1] = - this[base + 2] = undefined; - } -}; - -Promise.prototype._isSettlePromisesQueued = function () { - return (this._bitField & - -1073741824) === -1073741824; -}; - -Promise.prototype._setSettlePromisesQueued = function () { - this._bitField = this._bitField | -1073741824; -}; - -Promise.prototype._unsetSettlePromisesQueued = function () { - this._bitField = this._bitField & (~-1073741824); -}; - -Promise.prototype._queueSettlePromises = function() { - async.settlePromises(this); - this._setSettlePromisesQueued(); -}; - -Promise.prototype._fulfillUnchecked = function (value) { - if (value === this) { - var err = makeSelfResolutionError(); - this._attachExtraTrace(err); - return this._rejectUnchecked(err, undefined); - } - this._setFulfilled(); - this._settledValue = value; - this._cleanValues(); - - if (this._length() > 0) { - this._queueSettlePromises(); - } -}; - -Promise.prototype._rejectUncheckedCheckError = function (reason) { - var trace = util.ensureErrorObject(reason); - this._rejectUnchecked(reason, trace === reason ? undefined : trace); -}; - -Promise.prototype._rejectUnchecked = function (reason, trace) { - if (reason === this) { - var err = makeSelfResolutionError(); - this._attachExtraTrace(err); - return this._rejectUnchecked(err); - } - this._setRejected(); - this._settledValue = reason; - this._cleanValues(); - - if (this._isFinal()) { - async.throwLater(function(e) { - if ("stack" in e) { - async.invokeFirst( - CapturedTrace.unhandledRejection, undefined, e); - } - throw e; - }, trace === undefined ? reason : trace); - return; - } - - if (trace !== undefined && trace !== reason) { - this._setCarriedStackTrace(trace); - } - - if (this._length() > 0) { - this._queueSettlePromises(); - } else { - this._ensurePossibleRejectionHandled(); - } -}; - -Promise.prototype._settlePromises = function () { - this._unsetSettlePromisesQueued(); - var len = this._length(); - for (var i = 0; i < len; i++) { - this._settlePromiseAt(i); - } -}; - - -util.notEnumerableProp(Promise, - "_makeSelfResolutionError", - makeSelfResolutionError); - -_dereq_("./progress.js")(Promise, PromiseArray); -_dereq_("./method.js")(Promise, INTERNAL, tryConvertToPromise, apiRejection); -_dereq_("./bind.js")(Promise, INTERNAL, tryConvertToPromise); -_dereq_("./finally.js")(Promise, NEXT_FILTER, tryConvertToPromise); -_dereq_("./direct_resolve.js")(Promise); -_dereq_("./synchronous_inspection.js")(Promise); -_dereq_("./join.js")(Promise, PromiseArray, tryConvertToPromise, INTERNAL); -Promise.version = "2.11.0"; -Promise.Promise = Promise; -_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL); -_dereq_('./cancel.js')(Promise); -_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext); -_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise); -_dereq_('./nodeify.js')(Promise); -_dereq_('./call_get.js')(Promise); -_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); -_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); -_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL); -_dereq_('./settle.js')(Promise, PromiseArray); -_dereq_('./some.js')(Promise, PromiseArray, apiRejection); -_dereq_('./promisify.js')(Promise, INTERNAL); -_dereq_('./any.js')(Promise); -_dereq_('./each.js')(Promise, INTERNAL); -_dereq_('./timers.js')(Promise, INTERNAL); -_dereq_('./filter.js')(Promise, INTERNAL); - - util.toFastProperties(Promise); - util.toFastProperties(Promise.prototype); - function fillTypes(value) { - var p = new Promise(INTERNAL); - p._fulfillmentHandler0 = value; - p._rejectionHandler0 = value; - p._progressHandler0 = value; - p._promise0 = value; - p._receiver0 = value; - p._settledValue = value; - } - // Complete slack tracking, opt out of field-type tracking and - // stabilize map - fillTypes({a: 1}); - fillTypes({b: 2}); - fillTypes({c: 3}); - fillTypes(1); - fillTypes(function(){}); - fillTypes(undefined); - fillTypes(false); - fillTypes(new Promise(INTERNAL)); - CapturedTrace.setBounds(async.firstLineError, util.lastLineError); - return Promise; - -}; - -},{"./any.js":1,"./async.js":2,"./bind.js":3,"./call_get.js":5,"./cancel.js":6,"./captured_trace.js":7,"./catch_filter.js":8,"./context.js":9,"./debuggability.js":10,"./direct_resolve.js":11,"./each.js":12,"./errors.js":13,"./filter.js":15,"./finally.js":16,"./generators.js":17,"./join.js":18,"./map.js":19,"./method.js":20,"./nodeify.js":21,"./progress.js":22,"./promise_array.js":24,"./promise_resolver.js":25,"./promisify.js":26,"./props.js":27,"./race.js":29,"./reduce.js":30,"./settle.js":32,"./some.js":33,"./synchronous_inspection.js":34,"./thenables.js":35,"./timers.js":36,"./using.js":37,"./util.js":38}],24:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, - apiRejection) { -var util = _dereq_("./util.js"); -var isArray = util.isArray; - -function toResolutionValue(val) { - switch(val) { - case -2: return []; - case -3: return {}; - } -} - -function PromiseArray(values) { - var promise = this._promise = new Promise(INTERNAL); - var parent; - if (values instanceof Promise) { - parent = values; - promise._propagateFrom(parent, 1 | 4); - } - this._values = values; - this._length = 0; - this._totalResolved = 0; - this._init(undefined, -2); -} -PromiseArray.prototype.length = function () { - return this._length; -}; - -PromiseArray.prototype.promise = function () { - return this._promise; -}; - -PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { - var values = tryConvertToPromise(this._values, this._promise); - if (values instanceof Promise) { - values = values._target(); - this._values = values; - if (values._isFulfilled()) { - values = values._value(); - if (!isArray(values)) { - var err = new Promise.TypeError("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a"); - this.__hardReject__(err); - return; - } - } else if (values._isPending()) { - values._then( - init, - this._reject, - undefined, - this, - resolveValueIfEmpty - ); - return; - } else { - this._reject(values._reason()); - return; - } - } else if (!isArray(values)) { - this._promise._reject(apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a")._reason()); - return; - } - - if (values.length === 0) { - if (resolveValueIfEmpty === -5) { - this._resolveEmptyArray(); - } - else { - this._resolve(toResolutionValue(resolveValueIfEmpty)); - } - return; - } - var len = this.getActualLength(values.length); - this._length = len; - this._values = this.shouldCopyValues() ? new Array(len) : this._values; - var promise = this._promise; - for (var i = 0; i < len; ++i) { - var isResolved = this._isResolved(); - var maybePromise = tryConvertToPromise(values[i], promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - if (isResolved) { - maybePromise._ignoreRejections(); - } else if (maybePromise._isPending()) { - maybePromise._proxyPromiseArray(this, i); - } else if (maybePromise._isFulfilled()) { - this._promiseFulfilled(maybePromise._value(), i); - } else { - this._promiseRejected(maybePromise._reason(), i); - } - } else if (!isResolved) { - this._promiseFulfilled(maybePromise, i); - } - } -}; - -PromiseArray.prototype._isResolved = function () { - return this._values === null; -}; - -PromiseArray.prototype._resolve = function (value) { - this._values = null; - this._promise._fulfill(value); -}; - -PromiseArray.prototype.__hardReject__ = -PromiseArray.prototype._reject = function (reason) { - this._values = null; - this._promise._rejectCallback(reason, false, true); -}; - -PromiseArray.prototype._promiseProgressed = function (progressValue, index) { - this._promise._progress({ - index: index, - value: progressValue - }); -}; - - -PromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - this._resolve(this._values); - } -}; - -PromiseArray.prototype._promiseRejected = function (reason, index) { - this._totalResolved++; - this._reject(reason); -}; - -PromiseArray.prototype.shouldCopyValues = function () { - return true; -}; - -PromiseArray.prototype.getActualLength = function (len) { - return len; -}; - -return PromiseArray; -}; - -},{"./util.js":38}],25:[function(_dereq_,module,exports){ -"use strict"; -var util = _dereq_("./util.js"); -var maybeWrapAsError = util.maybeWrapAsError; -var errors = _dereq_("./errors.js"); -var TimeoutError = errors.TimeoutError; -var OperationalError = errors.OperationalError; -var haveGetters = util.haveGetters; -var es5 = _dereq_("./es5.js"); - -function isUntypedError(obj) { - return obj instanceof Error && - es5.getPrototypeOf(obj) === Error.prototype; -} - -var rErrorKey = /^(?:name|message|stack|cause)$/; -function wrapAsOperationalError(obj) { - var ret; - if (isUntypedError(obj)) { - ret = new OperationalError(obj); - ret.name = obj.name; - ret.message = obj.message; - ret.stack = obj.stack; - var keys = es5.keys(obj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (!rErrorKey.test(key)) { - ret[key] = obj[key]; - } - } - return ret; - } - util.markAsOriginatingFromRejection(obj); - return obj; -} - -function nodebackForPromise(promise) { - return function(err, value) { - if (promise === null) return; - - if (err) { - var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); - promise._attachExtraTrace(wrapped); - promise._reject(wrapped); - } else if (arguments.length > 2) { - var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} - promise._fulfill(args); - } else { - promise._fulfill(value); - } - - promise = null; - }; -} - - -var PromiseResolver; -if (!haveGetters) { - PromiseResolver = function (promise) { - this.promise = promise; - this.asCallback = nodebackForPromise(promise); - this.callback = this.asCallback; - }; -} -else { - PromiseResolver = function (promise) { - this.promise = promise; - }; -} -if (haveGetters) { - var prop = { - get: function() { - return nodebackForPromise(this.promise); - } - }; - es5.defineProperty(PromiseResolver.prototype, "asCallback", prop); - es5.defineProperty(PromiseResolver.prototype, "callback", prop); -} - -PromiseResolver._nodebackForPromise = nodebackForPromise; - -PromiseResolver.prototype.toString = function () { - return "[object PromiseResolver]"; -}; - -PromiseResolver.prototype.resolve = -PromiseResolver.prototype.fulfill = function (value) { - if (!(this instanceof PromiseResolver)) { - throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a"); - } - this.promise._resolveCallback(value); -}; - -PromiseResolver.prototype.reject = function (reason) { - if (!(this instanceof PromiseResolver)) { - throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a"); - } - this.promise._rejectCallback(reason); -}; - -PromiseResolver.prototype.progress = function (value) { - if (!(this instanceof PromiseResolver)) { - throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a"); - } - this.promise._progress(value); -}; - -PromiseResolver.prototype.cancel = function (err) { - this.promise.cancel(err); -}; - -PromiseResolver.prototype.timeout = function () { - this.reject(new TimeoutError("timeout")); -}; - -PromiseResolver.prototype.isResolved = function () { - return this.promise.isResolved(); -}; - -PromiseResolver.prototype.toJSON = function () { - return this.promise.toJSON(); -}; - -module.exports = PromiseResolver; - -},{"./errors.js":13,"./es5.js":14,"./util.js":38}],26:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var THIS = {}; -var util = _dereq_("./util.js"); -var nodebackForPromise = _dereq_("./promise_resolver.js") - ._nodebackForPromise; -var withAppended = util.withAppended; -var maybeWrapAsError = util.maybeWrapAsError; -var canEvaluate = util.canEvaluate; -var TypeError = _dereq_("./errors").TypeError; -var defaultSuffix = "Async"; -var defaultPromisified = {__isPromisified__: true}; -var noCopyProps = [ - "arity", "length", - "name", - "arguments", - "caller", - "callee", - "prototype", - "__isPromisified__" -]; -var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); - -var defaultFilter = function(name) { - return util.isIdentifier(name) && - name.charAt(0) !== "_" && - name !== "constructor"; -}; - -function propsFilter(key) { - return !noCopyPropsPattern.test(key); -} - -function isPromisified(fn) { - try { - return fn.__isPromisified__ === true; - } - catch (e) { - return false; - } -} - -function hasPromisified(obj, key, suffix) { - var val = util.getDataPropertyOrDefault(obj, key + suffix, - defaultPromisified); - return val ? isPromisified(val) : false; -} -function checkValid(ret, suffix, suffixRegexp) { - for (var i = 0; i < ret.length; i += 2) { - var key = ret[i]; - if (suffixRegexp.test(key)) { - var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); - for (var j = 0; j < ret.length; j += 2) { - if (ret[j] === keyWithoutAsyncSuffix) { - throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/iWrZbw\u000a" - .replace("%s", suffix)); - } - } - } - } -} - -function promisifiableMethods(obj, suffix, suffixRegexp, filter) { - var keys = util.inheritedDataKeys(obj); - var ret = []; - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var value = obj[key]; - var passesDefaultFilter = filter === defaultFilter - ? true : defaultFilter(key, value, obj); - if (typeof value === "function" && - !isPromisified(value) && - !hasPromisified(obj, key, suffix) && - filter(key, value, obj, passesDefaultFilter)) { - ret.push(key, value); - } - } - checkValid(ret, suffix, suffixRegexp); - return ret; -} - -var escapeIdentRegex = function(str) { - return str.replace(/([$])/, "\\$"); -}; - -var makeNodePromisifiedEval; -if (!true) { -var switchCaseArgumentOrder = function(likelyArgumentCount) { - var ret = [likelyArgumentCount]; - var min = Math.max(0, likelyArgumentCount - 1 - 3); - for(var i = likelyArgumentCount - 1; i >= min; --i) { - ret.push(i); - } - for(var i = likelyArgumentCount + 1; i <= 3; ++i) { - ret.push(i); - } - return ret; -}; - -var argumentSequence = function(argumentCount) { - return util.filledRange(argumentCount, "_arg", ""); -}; - -var parameterDeclaration = function(parameterCount) { - return util.filledRange( - Math.max(parameterCount, 3), "_arg", ""); -}; - -var parameterCount = function(fn) { - if (typeof fn.length === "number") { - return Math.max(Math.min(fn.length, 1023 + 1), 0); - } - return 0; -}; - -makeNodePromisifiedEval = -function(callback, receiver, originalName, fn) { - var newParameterCount = Math.max(0, parameterCount(fn) - 1); - var argumentOrder = switchCaseArgumentOrder(newParameterCount); - var shouldProxyThis = typeof callback === "string" || receiver === THIS; - - function generateCallForArgumentCount(count) { - var args = argumentSequence(count).join(", "); - var comma = count > 0 ? ", " : ""; - var ret; - if (shouldProxyThis) { - ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; - } else { - ret = receiver === undefined - ? "ret = callback({{args}}, nodeback); break;\n" - : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; - } - return ret.replace("{{args}}", args).replace(", ", comma); - } - - function generateArgumentSwitchCase() { - var ret = ""; - for (var i = 0; i < argumentOrder.length; ++i) { - ret += "case " + argumentOrder[i] +":" + - generateCallForArgumentCount(argumentOrder[i]); - } - - ret += " \n\ - default: \n\ - var args = new Array(len + 1); \n\ - var i = 0; \n\ - for (var i = 0; i < len; ++i) { \n\ - args[i] = arguments[i]; \n\ - } \n\ - args[i] = nodeback; \n\ - [CodeForCall] \n\ - break; \n\ - ".replace("[CodeForCall]", (shouldProxyThis - ? "ret = callback.apply(this, args);\n" - : "ret = callback.apply(receiver, args);\n")); - return ret; - } - - var getFunctionCode = typeof callback === "string" - ? ("this != null ? this['"+callback+"'] : fn") - : "fn"; - - return new Function("Promise", - "fn", - "receiver", - "withAppended", - "maybeWrapAsError", - "nodebackForPromise", - "tryCatch", - "errorObj", - "notEnumerableProp", - "INTERNAL","'use strict'; \n\ - var ret = function (Parameters) { \n\ - 'use strict'; \n\ - var len = arguments.length; \n\ - var promise = new Promise(INTERNAL); \n\ - promise._captureStackTrace(); \n\ - var nodeback = nodebackForPromise(promise); \n\ - var ret; \n\ - var callback = tryCatch([GetFunctionCode]); \n\ - switch(len) { \n\ - [CodeForSwitchCase] \n\ - } \n\ - if (ret === errorObj) { \n\ - promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ - } \n\ - return promise; \n\ - }; \n\ - notEnumerableProp(ret, '__isPromisified__', true); \n\ - return ret; \n\ - " - .replace("Parameters", parameterDeclaration(newParameterCount)) - .replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) - .replace("[GetFunctionCode]", getFunctionCode))( - Promise, - fn, - receiver, - withAppended, - maybeWrapAsError, - nodebackForPromise, - util.tryCatch, - util.errorObj, - util.notEnumerableProp, - INTERNAL - ); -}; -} - -function makeNodePromisifiedClosure(callback, receiver, _, fn) { - var defaultThis = (function() {return this;})(); - var method = callback; - if (typeof method === "string") { - callback = fn; - } - function promisified() { - var _receiver = receiver; - if (receiver === THIS) _receiver = this; - var promise = new Promise(INTERNAL); - promise._captureStackTrace(); - var cb = typeof method === "string" && this !== defaultThis - ? this[method] : callback; - var fn = nodebackForPromise(promise); - try { - cb.apply(_receiver, withAppended(arguments, fn)); - } catch(e) { - promise._rejectCallback(maybeWrapAsError(e), true, true); - } - return promise; - } - util.notEnumerableProp(promisified, "__isPromisified__", true); - return promisified; -} - -var makeNodePromisified = canEvaluate - ? makeNodePromisifiedEval - : makeNodePromisifiedClosure; - -function promisifyAll(obj, suffix, filter, promisifier) { - var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); - var methods = - promisifiableMethods(obj, suffix, suffixRegexp, filter); - - for (var i = 0, len = methods.length; i < len; i+= 2) { - var key = methods[i]; - var fn = methods[i+1]; - var promisifiedKey = key + suffix; - if (promisifier === makeNodePromisified) { - obj[promisifiedKey] = - makeNodePromisified(key, THIS, key, fn, suffix); - } else { - var promisified = promisifier(fn, function() { - return makeNodePromisified(key, THIS, key, fn, suffix); - }); - util.notEnumerableProp(promisified, "__isPromisified__", true); - obj[promisifiedKey] = promisified; - } - } - util.toFastProperties(obj); - return obj; -} - -function promisify(callback, receiver) { - return makeNodePromisified(callback, receiver, undefined, callback); -} - -Promise.promisify = function (fn, receiver) { - if (typeof fn !== "function") { - throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - } - if (isPromisified(fn)) { - return fn; - } - var ret = promisify(fn, arguments.length < 2 ? THIS : receiver); - util.copyDescriptors(fn, ret, propsFilter); - return ret; -}; - -Promise.promisifyAll = function (target, options) { - if (typeof target !== "function" && typeof target !== "object") { - throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/9ITlV0\u000a"); - } - options = Object(options); - var suffix = options.suffix; - if (typeof suffix !== "string") suffix = defaultSuffix; - var filter = options.filter; - if (typeof filter !== "function") filter = defaultFilter; - var promisifier = options.promisifier; - if (typeof promisifier !== "function") promisifier = makeNodePromisified; - - if (!util.isIdentifier(suffix)) { - throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/8FZo5V\u000a"); - } - - var keys = util.inheritedDataKeys(target); - for (var i = 0; i < keys.length; ++i) { - var value = target[keys[i]]; - if (keys[i] !== "constructor" && - util.isClass(value)) { - promisifyAll(value.prototype, suffix, filter, promisifier); - promisifyAll(value, suffix, filter, promisifier); - } - } - - return promisifyAll(target, suffix, filter, promisifier); -}; -}; - - -},{"./errors":13,"./promise_resolver.js":25,"./util.js":38}],27:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function( - Promise, PromiseArray, tryConvertToPromise, apiRejection) { -var util = _dereq_("./util.js"); -var isObject = util.isObject; -var es5 = _dereq_("./es5.js"); - -function PropertiesPromiseArray(obj) { - var keys = es5.keys(obj); - var len = keys.length; - var values = new Array(len * 2); - for (var i = 0; i < len; ++i) { - var key = keys[i]; - values[i] = obj[key]; - values[i + len] = key; - } - this.constructor$(values); -} -util.inherits(PropertiesPromiseArray, PromiseArray); - -PropertiesPromiseArray.prototype._init = function () { - this._init$(undefined, -3) ; -}; - -PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - var val = {}; - var keyOffset = this.length(); - for (var i = 0, len = this.length(); i < len; ++i) { - val[this._values[i + keyOffset]] = this._values[i]; - } - this._resolve(val); - } -}; - -PropertiesPromiseArray.prototype._promiseProgressed = function (value, index) { - this._promise._progress({ - key: this._values[index + this.length()], - value: value - }); -}; - -PropertiesPromiseArray.prototype.shouldCopyValues = function () { - return false; -}; - -PropertiesPromiseArray.prototype.getActualLength = function (len) { - return len >> 1; -}; - -function props(promises) { - var ret; - var castValue = tryConvertToPromise(promises); - - if (!isObject(castValue)) { - return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/OsFKC8\u000a"); - } else if (castValue instanceof Promise) { - ret = castValue._then( - Promise.props, undefined, undefined, undefined, undefined); - } else { - ret = new PropertiesPromiseArray(castValue).promise(); - } - - if (castValue instanceof Promise) { - ret._propagateFrom(castValue, 4); - } - return ret; -} - -Promise.prototype.props = function () { - return props(this); -}; - -Promise.props = function (promises) { - return props(promises); -}; -}; - -},{"./es5.js":14,"./util.js":38}],28:[function(_dereq_,module,exports){ -"use strict"; -function arrayMove(src, srcIndex, dst, dstIndex, len) { - for (var j = 0; j < len; ++j) { - dst[j + dstIndex] = src[j + srcIndex]; - src[j + srcIndex] = void 0; - } -} - -function Queue(capacity) { - this._capacity = capacity; - this._length = 0; - this._front = 0; -} - -Queue.prototype._willBeOverCapacity = function (size) { - return this._capacity < size; -}; - -Queue.prototype._pushOne = function (arg) { - var length = this.length(); - this._checkCapacity(length + 1); - var i = (this._front + length) & (this._capacity - 1); - this[i] = arg; - this._length = length + 1; -}; - -Queue.prototype._unshiftOne = function(value) { - var capacity = this._capacity; - this._checkCapacity(this.length() + 1); - var front = this._front; - var i = (((( front - 1 ) & - ( capacity - 1) ) ^ capacity ) - capacity ); - this[i] = value; - this._front = i; - this._length = this.length() + 1; -}; - -Queue.prototype.unshift = function(fn, receiver, arg) { - this._unshiftOne(arg); - this._unshiftOne(receiver); - this._unshiftOne(fn); -}; - -Queue.prototype.push = function (fn, receiver, arg) { - var length = this.length() + 3; - if (this._willBeOverCapacity(length)) { - this._pushOne(fn); - this._pushOne(receiver); - this._pushOne(arg); - return; - } - var j = this._front + length - 3; - this._checkCapacity(length); - var wrapMask = this._capacity - 1; - this[(j + 0) & wrapMask] = fn; - this[(j + 1) & wrapMask] = receiver; - this[(j + 2) & wrapMask] = arg; - this._length = length; -}; - -Queue.prototype.shift = function () { - var front = this._front, - ret = this[front]; - - this[front] = undefined; - this._front = (front + 1) & (this._capacity - 1); - this._length--; - return ret; -}; - -Queue.prototype.length = function () { - return this._length; -}; - -Queue.prototype._checkCapacity = function (size) { - if (this._capacity < size) { - this._resizeTo(this._capacity << 1); - } -}; - -Queue.prototype._resizeTo = function (capacity) { - var oldCapacity = this._capacity; - this._capacity = capacity; - var front = this._front; - var length = this._length; - var moveItemsCount = (front + length) & (oldCapacity - 1); - arrayMove(this, 0, this, oldCapacity, moveItemsCount); -}; - -module.exports = Queue; - -},{}],29:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function( - Promise, INTERNAL, tryConvertToPromise, apiRejection) { -var isArray = _dereq_("./util.js").isArray; - -var raceLater = function (promise) { - return promise.then(function(array) { - return race(array, promise); - }); -}; - -function race(promises, parent) { - var maybePromise = tryConvertToPromise(promises); - - if (maybePromise instanceof Promise) { - return raceLater(maybePromise); - } else if (!isArray(promises)) { - return apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a"); - } - - var ret = new Promise(INTERNAL); - if (parent !== undefined) { - ret._propagateFrom(parent, 4 | 1); - } - var fulfill = ret._fulfill; - var reject = ret._reject; - for (var i = 0, len = promises.length; i < len; ++i) { - var val = promises[i]; - - if (val === undefined && !(i in promises)) { - continue; - } - - Promise.cast(val)._then(fulfill, reject, undefined, ret, null); - } - return ret; -} - -Promise.race = function (promises) { - return race(promises, undefined); -}; - -Promise.prototype.race = function () { - return race(this, undefined); -}; - -}; - -},{"./util.js":38}],30:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL) { -var getDomain = Promise._getDomain; -var async = _dereq_("./async.js"); -var util = _dereq_("./util.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -function ReductionPromiseArray(promises, fn, accum, _each) { - this.constructor$(promises); - this._promise._captureStackTrace(); - this._preservedValues = _each === INTERNAL ? [] : null; - this._zerothIsAccum = (accum === undefined); - this._gotAccum = false; - this._reducingIndex = (this._zerothIsAccum ? 1 : 0); - this._valuesPhase = undefined; - var maybePromise = tryConvertToPromise(accum, this._promise); - var rejected = false; - var isPromise = maybePromise instanceof Promise; - if (isPromise) { - maybePromise = maybePromise._target(); - if (maybePromise._isPending()) { - maybePromise._proxyPromiseArray(this, -1); - } else if (maybePromise._isFulfilled()) { - accum = maybePromise._value(); - this._gotAccum = true; - } else { - this._reject(maybePromise._reason()); - rejected = true; - } - } - if (!(isPromise || this._zerothIsAccum)) this._gotAccum = true; - var domain = getDomain(); - this._callback = domain === null ? fn : domain.bind(fn); - this._accum = accum; - if (!rejected) async.invoke(init, this, undefined); -} -function init() { - this._init$(undefined, -5); -} -util.inherits(ReductionPromiseArray, PromiseArray); - -ReductionPromiseArray.prototype._init = function () {}; - -ReductionPromiseArray.prototype._resolveEmptyArray = function () { - if (this._gotAccum || this._zerothIsAccum) { - this._resolve(this._preservedValues !== null - ? [] : this._accum); - } -}; - -ReductionPromiseArray.prototype._promiseFulfilled = function (value, index) { - var values = this._values; - values[index] = value; - var length = this.length(); - var preservedValues = this._preservedValues; - var isEach = preservedValues !== null; - var gotAccum = this._gotAccum; - var valuesPhase = this._valuesPhase; - var valuesPhaseIndex; - if (!valuesPhase) { - valuesPhase = this._valuesPhase = new Array(length); - for (valuesPhaseIndex=0; valuesPhaseIndex= this._length) { - this._resolve(this._values); - } -}; - -SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { - var ret = new PromiseInspection(); - ret._bitField = 268435456; - ret._settledValue = value; - this._promiseResolved(index, ret); -}; -SettledPromiseArray.prototype._promiseRejected = function (reason, index) { - var ret = new PromiseInspection(); - ret._bitField = 134217728; - ret._settledValue = reason; - this._promiseResolved(index, ret); -}; - -Promise.settle = function (promises) { - return new SettledPromiseArray(promises).promise(); -}; - -Promise.prototype.settle = function () { - return new SettledPromiseArray(this).promise(); -}; -}; - -},{"./util.js":38}],33:[function(_dereq_,module,exports){ -"use strict"; -module.exports = -function(Promise, PromiseArray, apiRejection) { -var util = _dereq_("./util.js"); -var RangeError = _dereq_("./errors.js").RangeError; -var AggregateError = _dereq_("./errors.js").AggregateError; -var isArray = util.isArray; - - -function SomePromiseArray(values) { - this.constructor$(values); - this._howMany = 0; - this._unwrap = false; - this._initialized = false; -} -util.inherits(SomePromiseArray, PromiseArray); - -SomePromiseArray.prototype._init = function () { - if (!this._initialized) { - return; - } - if (this._howMany === 0) { - this._resolve([]); - return; - } - this._init$(undefined, -5); - var isArrayResolved = isArray(this._values); - if (!this._isResolved() && - isArrayResolved && - this._howMany > this._canPossiblyFulfill()) { - this._reject(this._getRangeError(this.length())); - } -}; - -SomePromiseArray.prototype.init = function () { - this._initialized = true; - this._init(); -}; - -SomePromiseArray.prototype.setUnwrap = function () { - this._unwrap = true; -}; - -SomePromiseArray.prototype.howMany = function () { - return this._howMany; -}; - -SomePromiseArray.prototype.setHowMany = function (count) { - this._howMany = count; -}; - -SomePromiseArray.prototype._promiseFulfilled = function (value) { - this._addFulfilled(value); - if (this._fulfilled() === this.howMany()) { - this._values.length = this.howMany(); - if (this.howMany() === 1 && this._unwrap) { - this._resolve(this._values[0]); - } else { - this._resolve(this._values); - } - } - -}; -SomePromiseArray.prototype._promiseRejected = function (reason) { - this._addRejected(reason); - if (this.howMany() > this._canPossiblyFulfill()) { - var e = new AggregateError(); - for (var i = this.length(); i < this._values.length; ++i) { - e.push(this._values[i]); - } - this._reject(e); - } -}; - -SomePromiseArray.prototype._fulfilled = function () { - return this._totalResolved; -}; - -SomePromiseArray.prototype._rejected = function () { - return this._values.length - this.length(); -}; - -SomePromiseArray.prototype._addRejected = function (reason) { - this._values.push(reason); -}; - -SomePromiseArray.prototype._addFulfilled = function (value) { - this._values[this._totalResolved++] = value; -}; - -SomePromiseArray.prototype._canPossiblyFulfill = function () { - return this.length() - this._rejected(); -}; - -SomePromiseArray.prototype._getRangeError = function (count) { - var message = "Input array must contain at least " + - this._howMany + " items but contains only " + count + " items"; - return new RangeError(message); -}; - -SomePromiseArray.prototype._resolveEmptyArray = function () { - this._reject(this._getRangeError(0)); -}; - -function some(promises, howMany) { - if ((howMany | 0) !== howMany || howMany < 0) { - return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/1wAmHx\u000a"); - } - var ret = new SomePromiseArray(promises); - var promise = ret.promise(); - ret.setHowMany(howMany); - ret.init(); - return promise; -} - -Promise.some = function (promises, howMany) { - return some(promises, howMany); -}; - -Promise.prototype.some = function (howMany) { - return some(this, howMany); -}; - -Promise._SomePromiseArray = SomePromiseArray; -}; - -},{"./errors.js":13,"./util.js":38}],34:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise) { -function PromiseInspection(promise) { - if (promise !== undefined) { - promise = promise._target(); - this._bitField = promise._bitField; - this._settledValue = promise._settledValue; - } - else { - this._bitField = 0; - this._settledValue = undefined; - } -} - -PromiseInspection.prototype.value = function () { - if (!this.isFulfilled()) { - throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a"); - } - return this._settledValue; -}; - -PromiseInspection.prototype.error = -PromiseInspection.prototype.reason = function () { - if (!this.isRejected()) { - throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a"); - } - return this._settledValue; -}; - -PromiseInspection.prototype.isFulfilled = -Promise.prototype._isFulfilled = function () { - return (this._bitField & 268435456) > 0; -}; - -PromiseInspection.prototype.isRejected = -Promise.prototype._isRejected = function () { - return (this._bitField & 134217728) > 0; -}; - -PromiseInspection.prototype.isPending = -Promise.prototype._isPending = function () { - return (this._bitField & 402653184) === 0; -}; - -PromiseInspection.prototype.isResolved = -Promise.prototype._isResolved = function () { - return (this._bitField & 402653184) > 0; -}; - -Promise.prototype.isPending = function() { - return this._target()._isPending(); -}; - -Promise.prototype.isRejected = function() { - return this._target()._isRejected(); -}; - -Promise.prototype.isFulfilled = function() { - return this._target()._isFulfilled(); -}; - -Promise.prototype.isResolved = function() { - return this._target()._isResolved(); -}; - -Promise.prototype._value = function() { - return this._settledValue; -}; - -Promise.prototype._reason = function() { - this._unsetRejectionIsUnhandled(); - return this._settledValue; -}; - -Promise.prototype.value = function() { - var target = this._target(); - if (!target.isFulfilled()) { - throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a"); - } - return target._settledValue; -}; - -Promise.prototype.reason = function() { - var target = this._target(); - if (!target.isRejected()) { - throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a"); - } - target._unsetRejectionIsUnhandled(); - return target._settledValue; -}; - - -Promise.PromiseInspection = PromiseInspection; -}; - -},{}],35:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var util = _dereq_("./util.js"); -var errorObj = util.errorObj; -var isObject = util.isObject; - -function tryConvertToPromise(obj, context) { - if (isObject(obj)) { - if (obj instanceof Promise) { - return obj; - } - else if (isAnyBluebirdPromise(obj)) { - var ret = new Promise(INTERNAL); - obj._then( - ret._fulfillUnchecked, - ret._rejectUncheckedCheckError, - ret._progressUnchecked, - ret, - null - ); - return ret; - } - var then = util.tryCatch(getThen)(obj); - if (then === errorObj) { - if (context) context._pushContext(); - var ret = Promise.reject(then.e); - if (context) context._popContext(); - return ret; - } else if (typeof then === "function") { - return doThenable(obj, then, context); - } - } - return obj; -} - -function getThen(obj) { - return obj.then; -} - -var hasProp = {}.hasOwnProperty; -function isAnyBluebirdPromise(obj) { - return hasProp.call(obj, "_promise0"); -} - -function doThenable(x, then, context) { - var promise = new Promise(INTERNAL); - var ret = promise; - if (context) context._pushContext(); - promise._captureStackTrace(); - if (context) context._popContext(); - var synchronous = true; - var result = util.tryCatch(then).call(x, - resolveFromThenable, - rejectFromThenable, - progressFromThenable); - synchronous = false; - if (promise && result === errorObj) { - promise._rejectCallback(result.e, true, true); - promise = null; - } - - function resolveFromThenable(value) { - if (!promise) return; - promise._resolveCallback(value); - promise = null; - } - - function rejectFromThenable(reason) { - if (!promise) return; - promise._rejectCallback(reason, synchronous, true); - promise = null; - } - - function progressFromThenable(value) { - if (!promise) return; - if (typeof promise._progress === "function") { - promise._progress(value); - } - } - return ret; -} - -return tryConvertToPromise; -}; - -},{"./util.js":38}],36:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var util = _dereq_("./util.js"); -var TimeoutError = Promise.TimeoutError; - -var afterTimeout = function (promise, message) { - if (!promise.isPending()) return; - - var err; - if(!util.isPrimitive(message) && (message instanceof Error)) { - err = message; - } else { - if (typeof message !== "string") { - message = "operation timed out"; - } - err = new TimeoutError(message); - } - util.markAsOriginatingFromRejection(err); - promise._attachExtraTrace(err); - promise._cancel(err); -}; - -var afterValue = function(value) { return delay(+this).thenReturn(value); }; -var delay = Promise.delay = function (value, ms) { - if (ms === undefined) { - ms = value; - value = undefined; - var ret = new Promise(INTERNAL); - setTimeout(function() { ret._fulfill(); }, ms); - return ret; - } - ms = +ms; - return Promise.resolve(value)._then(afterValue, null, null, ms, undefined); -}; - -Promise.prototype.delay = function (ms) { - return delay(this, ms); -}; - -function successClear(value) { - var handle = this; - if (handle instanceof Number) handle = +handle; - clearTimeout(handle); - return value; -} - -function failureClear(reason) { - var handle = this; - if (handle instanceof Number) handle = +handle; - clearTimeout(handle); - throw reason; -} - -Promise.prototype.timeout = function (ms, message) { - ms = +ms; - var ret = this.then().cancellable(); - ret._cancellationParent = this; - var handle = setTimeout(function timeoutTimeout() { - afterTimeout(ret, message); - }, ms); - return ret._then(successClear, failureClear, undefined, handle, undefined); -}; - -}; - -},{"./util.js":38}],37:[function(_dereq_,module,exports){ -"use strict"; -module.exports = function (Promise, apiRejection, tryConvertToPromise, - createContext) { - var TypeError = _dereq_("./errors.js").TypeError; - var inherits = _dereq_("./util.js").inherits; - var PromiseInspection = Promise.PromiseInspection; - - function inspectionMapper(inspections) { - var len = inspections.length; - for (var i = 0; i < len; ++i) { - var inspection = inspections[i]; - if (inspection.isRejected()) { - return Promise.reject(inspection.error()); - } - inspections[i] = inspection._settledValue; - } - return inspections; - } - - function thrower(e) { - setTimeout(function(){throw e;}, 0); - } - - function castPreservingDisposable(thenable) { - var maybePromise = tryConvertToPromise(thenable); - if (maybePromise !== thenable && - typeof thenable._isDisposable === "function" && - typeof thenable._getDisposer === "function" && - thenable._isDisposable()) { - maybePromise._setDisposable(thenable._getDisposer()); - } - return maybePromise; - } - function dispose(resources, inspection) { - var i = 0; - var len = resources.length; - var ret = Promise.defer(); - function iterator() { - if (i >= len) return ret.resolve(); - var maybePromise = castPreservingDisposable(resources[i++]); - if (maybePromise instanceof Promise && - maybePromise._isDisposable()) { - try { - maybePromise = tryConvertToPromise( - maybePromise._getDisposer().tryDispose(inspection), - resources.promise); - } catch (e) { - return thrower(e); - } - if (maybePromise instanceof Promise) { - return maybePromise._then(iterator, thrower, - null, null, null); - } - } - iterator(); - } - iterator(); - return ret.promise; - } - - function disposerSuccess(value) { - var inspection = new PromiseInspection(); - inspection._settledValue = value; - inspection._bitField = 268435456; - return dispose(this, inspection).thenReturn(value); - } - - function disposerFail(reason) { - var inspection = new PromiseInspection(); - inspection._settledValue = reason; - inspection._bitField = 134217728; - return dispose(this, inspection).thenThrow(reason); - } - - function Disposer(data, promise, context) { - this._data = data; - this._promise = promise; - this._context = context; - } - - Disposer.prototype.data = function () { - return this._data; - }; - - Disposer.prototype.promise = function () { - return this._promise; - }; - - Disposer.prototype.resource = function () { - if (this.promise().isFulfilled()) { - return this.promise().value(); - } - return null; - }; - - Disposer.prototype.tryDispose = function(inspection) { - var resource = this.resource(); - var context = this._context; - if (context !== undefined) context._pushContext(); - var ret = resource !== null - ? this.doDispose(resource, inspection) : null; - if (context !== undefined) context._popContext(); - this._promise._unsetDisposable(); - this._data = null; - return ret; - }; - - Disposer.isDisposer = function (d) { - return (d != null && - typeof d.resource === "function" && - typeof d.tryDispose === "function"); - }; - - function FunctionDisposer(fn, promise, context) { - this.constructor$(fn, promise, context); - } - inherits(FunctionDisposer, Disposer); - - FunctionDisposer.prototype.doDispose = function (resource, inspection) { - var fn = this.data(); - return fn.call(resource, resource, inspection); - }; - - function maybeUnwrapDisposer(value) { - if (Disposer.isDisposer(value)) { - this.resources[this.index]._setDisposable(value); - return value.promise(); - } - return value; - } - - Promise.using = function () { - var len = arguments.length; - if (len < 2) return apiRejection( - "you must pass at least 2 arguments to Promise.using"); - var fn = arguments[len - 1]; - if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - - var input; - var spreadArgs = true; - if (len === 2 && Array.isArray(arguments[0])) { - input = arguments[0]; - len = input.length; - spreadArgs = false; - } else { - input = arguments; - len--; - } - var resources = new Array(len); - for (var i = 0; i < len; ++i) { - var resource = input[i]; - if (Disposer.isDisposer(resource)) { - var disposer = resource; - resource = resource.promise(); - resource._setDisposable(disposer); - } else { - var maybePromise = tryConvertToPromise(resource); - if (maybePromise instanceof Promise) { - resource = - maybePromise._then(maybeUnwrapDisposer, null, null, { - resources: resources, - index: i - }, undefined); - } - } - resources[i] = resource; - } - - var promise = Promise.settle(resources) - .then(inspectionMapper) - .then(function(vals) { - promise._pushContext(); - var ret; - try { - ret = spreadArgs - ? fn.apply(undefined, vals) : fn.call(undefined, vals); - } finally { - promise._popContext(); - } - return ret; - }) - ._then( - disposerSuccess, disposerFail, undefined, resources, undefined); - resources.promise = promise; - return promise; - }; - - Promise.prototype._setDisposable = function (disposer) { - this._bitField = this._bitField | 262144; - this._disposer = disposer; - }; - - Promise.prototype._isDisposable = function () { - return (this._bitField & 262144) > 0; - }; - - Promise.prototype._getDisposer = function () { - return this._disposer; - }; - - Promise.prototype._unsetDisposable = function () { - this._bitField = this._bitField & (~262144); - this._disposer = undefined; - }; - - Promise.prototype.disposer = function (fn) { - if (typeof fn === "function") { - return new FunctionDisposer(fn, this, createContext()); - } - throw new TypeError(); - }; - -}; - -},{"./errors.js":13,"./util.js":38}],38:[function(_dereq_,module,exports){ -"use strict"; -var es5 = _dereq_("./es5.js"); -var canEvaluate = typeof navigator == "undefined"; -var haveGetters = (function(){ - try { - var o = {}; - es5.defineProperty(o, "f", { - get: function () { - return 3; - } - }); - return o.f === 3; - } - catch (e) { - return false; - } - -})(); - -var errorObj = {e: {}}; -var tryCatchTarget; -function tryCatcher() { - try { - var target = tryCatchTarget; - tryCatchTarget = null; - return target.apply(this, arguments); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} -function tryCatch(fn) { - tryCatchTarget = fn; - return tryCatcher; -} - -var inherits = function(Child, Parent) { - var hasProp = {}.hasOwnProperty; - - function T() { - this.constructor = Child; - this.constructor$ = Parent; - for (var propertyName in Parent.prototype) { - if (hasProp.call(Parent.prototype, propertyName) && - propertyName.charAt(propertyName.length-1) !== "$" - ) { - this[propertyName + "$"] = Parent.prototype[propertyName]; - } - } - } - T.prototype = Parent.prototype; - Child.prototype = new T(); - return Child.prototype; -}; - - -function isPrimitive(val) { - return val == null || val === true || val === false || - typeof val === "string" || typeof val === "number"; - -} - -function isObject(value) { - return !isPrimitive(value); -} - -function maybeWrapAsError(maybeError) { - if (!isPrimitive(maybeError)) return maybeError; - - return new Error(safeToString(maybeError)); -} - -function withAppended(target, appendee) { - var len = target.length; - var ret = new Array(len + 1); - var i; - for (i = 0; i < len; ++i) { - ret[i] = target[i]; - } - ret[i] = appendee; - return ret; -} - -function getDataPropertyOrDefault(obj, key, defaultValue) { - if (es5.isES5) { - var desc = Object.getOwnPropertyDescriptor(obj, key); - - if (desc != null) { - return desc.get == null && desc.set == null - ? desc.value - : defaultValue; - } - } else { - return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; - } -} - -function notEnumerableProp(obj, name, value) { - if (isPrimitive(obj)) return obj; - var descriptor = { - value: value, - configurable: true, - enumerable: false, - writable: true - }; - es5.defineProperty(obj, name, descriptor); - return obj; -} - -function thrower(r) { - throw r; -} - -var inheritedDataKeys = (function() { - var excludedPrototypes = [ - Array.prototype, - Object.prototype, - Function.prototype - ]; - - var isExcludedProto = function(val) { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (excludedPrototypes[i] === val) { - return true; - } - } - return false; - }; - - if (es5.isES5) { - var getKeys = Object.getOwnPropertyNames; - return function(obj) { - var ret = []; - var visitedKeys = Object.create(null); - while (obj != null && !isExcludedProto(obj)) { - var keys; - try { - keys = getKeys(obj); - } catch (e) { - return ret; - } - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (visitedKeys[key]) continue; - visitedKeys[key] = true; - var desc = Object.getOwnPropertyDescriptor(obj, key); - if (desc != null && desc.get == null && desc.set == null) { - ret.push(key); - } - } - obj = es5.getPrototypeOf(obj); - } - return ret; - }; - } else { - var hasProp = {}.hasOwnProperty; - return function(obj) { - if (isExcludedProto(obj)) return []; - var ret = []; - - /*jshint forin:false */ - enumeration: for (var key in obj) { - if (hasProp.call(obj, key)) { - ret.push(key); - } else { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (hasProp.call(excludedPrototypes[i], key)) { - continue enumeration; - } - } - ret.push(key); - } - } - return ret; - }; - } - -})(); - -var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; -function isClass(fn) { - try { - if (typeof fn === "function") { - var keys = es5.names(fn.prototype); - - var hasMethods = es5.isES5 && keys.length > 1; - var hasMethodsOtherThanConstructor = keys.length > 0 && - !(keys.length === 1 && keys[0] === "constructor"); - var hasThisAssignmentAndStaticMethods = - thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; - - if (hasMethods || hasMethodsOtherThanConstructor || - hasThisAssignmentAndStaticMethods) { - return true; - } - } - return false; - } catch (e) { - return false; - } -} - -function toFastProperties(obj) { - /*jshint -W027,-W055,-W031*/ - function f() {} - f.prototype = obj; - var l = 8; - while (l--) new f(); - return obj; - eval(obj); -} - -var rident = /^[a-z$_][a-z$_0-9]*$/i; -function isIdentifier(str) { - return rident.test(str); -} - -function filledRange(count, prefix, suffix) { - var ret = new Array(count); - for(var i = 0; i < count; ++i) { - ret[i] = prefix + i + suffix; - } - return ret; -} - -function safeToString(obj) { - try { - return obj + ""; - } catch (e) { - return "[no string representation]"; - } -} - -function markAsOriginatingFromRejection(e) { - try { - notEnumerableProp(e, "isOperational", true); - } - catch(ignore) {} -} - -function originatesFromRejection(e) { - if (e == null) return false; - return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || - e["isOperational"] === true); -} - -function canAttachTrace(obj) { - return obj instanceof Error && es5.propertyIsWritable(obj, "stack"); -} - -var ensureErrorObject = (function() { - if (!("stack" in new Error())) { - return function(value) { - if (canAttachTrace(value)) return value; - try {throw new Error(safeToString(value));} - catch(err) {return err;} - }; - } else { - return function(value) { - if (canAttachTrace(value)) return value; - return new Error(safeToString(value)); - }; - } -})(); - -function classString(obj) { - return {}.toString.call(obj); -} - -function copyDescriptors(from, to, filter) { - var keys = es5.names(from); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (filter(key)) { - try { - es5.defineProperty(to, key, es5.getDescriptor(from, key)); - } catch (ignore) {} - } - } -} - -var ret = { - isClass: isClass, - isIdentifier: isIdentifier, - inheritedDataKeys: inheritedDataKeys, - getDataPropertyOrDefault: getDataPropertyOrDefault, - thrower: thrower, - isArray: es5.isArray, - haveGetters: haveGetters, - notEnumerableProp: notEnumerableProp, - isPrimitive: isPrimitive, - isObject: isObject, - canEvaluate: canEvaluate, - errorObj: errorObj, - tryCatch: tryCatch, - inherits: inherits, - withAppended: withAppended, - maybeWrapAsError: maybeWrapAsError, - toFastProperties: toFastProperties, - filledRange: filledRange, - toString: safeToString, - canAttachTrace: canAttachTrace, - ensureErrorObject: ensureErrorObject, - originatesFromRejection: originatesFromRejection, - markAsOriginatingFromRejection: markAsOriginatingFromRejection, - classString: classString, - copyDescriptors: copyDescriptors, - hasDevTools: typeof chrome !== "undefined" && chrome && - typeof chrome.loadTimes === "function", - isNode: typeof process !== "undefined" && - classString(process).toLowerCase() === "[object process]" -}; -ret.isRecentNode = ret.isNode && (function() { - var version = process.versions.node.split(".").map(Number); - return (version[0] === 0 && version[1] > 10) || (version[0] > 0); -})(); - -if (ret.isNode) ret.toFastProperties(process); - -try {throw new Error(); } catch (e) {ret.lastLineError = e;} -module.exports = ret; - -},{"./es5.js":14}]},{},[4])(4) -}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/browser/bluebird.min.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/browser/bluebird.min.js deleted file mode 100644 index bcbd9658..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/browser/bluebird.min.js +++ /dev/null @@ -1,31 +0,0 @@ -/* @preserve - * The MIT License (MIT) - * - * Copyright (c) 2013-2015 Petka Antonov - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * 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. - * - */ -/** - * bluebird build version 2.11.0 - * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, cancel, using, filter, any, each, timers -*/ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Promise=t()}}(function(){var t,e,r;return function n(t,e,r){function i(s,a){if(!e[s]){if(!t[s]){var u="function"==typeof _dereq_&&_dereq_;if(!a&&u)return u(s,!0);if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=e[s]={exports:{}};t[s][0].call(l.exports,function(e){var r=t[s][1][e];return i(r?r:e)},l,l.exports,n,t,e,r)}return e[s].exports}for(var o="function"==typeof _dereq_&&_dereq_,s=0;s0},n.prototype.throwLater=function(t,e){if(1===arguments.length&&(e=t,t=function(){throw e}),"undefined"!=typeof setTimeout)setTimeout(function(){t(e)},0);else try{this._schedule(function(){t(e)})}catch(r){throw new Error("No async scheduler available\n\n See http://goo.gl/m3OTXk\n")}},h.hasDevTools?(c.isStatic&&(c=function(t){setTimeout(t,0)}),n.prototype.invokeLater=function(t,e,r){this._trampolineEnabled?i.call(this,t,e,r):this._schedule(function(){setTimeout(function(){t.call(e,r)},100)})},n.prototype.invoke=function(t,e,r){this._trampolineEnabled?o.call(this,t,e,r):this._schedule(function(){t.call(e,r)})},n.prototype.settlePromises=function(t){this._trampolineEnabled?s.call(this,t):this._schedule(function(){t._settlePromises()})}):(n.prototype.invokeLater=i,n.prototype.invoke=o,n.prototype.settlePromises=s),n.prototype.invokeFirst=function(t,e,r){this._normalQueue.unshift(t,e,r),this._queueTick()},n.prototype._drainQueue=function(t){for(;t.length()>0;){var e=t.shift();if("function"==typeof e){var r=t.shift(),n=t.shift();e.call(r,n)}else e._settlePromises()}},n.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._drainQueue(this._lateQueue)},n.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},n.prototype._reset=function(){this._isTickUsed=!1},e.exports=new n,e.exports.firstLineError=a},{"./queue.js":28,"./schedule.js":31,"./util.js":38}],3:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n=function(t,e){this._reject(e)},i=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(n,n,null,this,t)},o=function(t,e){this._isPending()&&this._resolveCallback(e.target)},s=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(n){var a=r(n),u=new t(e);u._propagateFrom(this,1);var c=this._target();if(u._setBoundTo(a),a instanceof t){var l={promiseRejectionQueued:!1,promise:u,target:c,bindingPromise:a};c._then(e,i,u._progress,u,l),a._then(o,s,u._progress,u,l)}else u._resolveCallback(c);return u},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=131072|this._bitField,this._boundTo=t):this._bitField=-131073&this._bitField},t.prototype._isBound=function(){return 131072===(131072&this._bitField)},t.bind=function(n,i){var o=r(n),s=new t(e);return s._setBoundTo(o),o instanceof t?o._then(function(){s._resolveCallback(i)},s._reject,s._progress,s,null):s._resolveCallback(i),s}}},{}],4:[function(t,e,r){"use strict";function n(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise.js")();o.noConflict=n,e.exports=o},{"./promise.js":23}],5:[function(t,e,r){"use strict";var n=Object.create;if(n){var i=n(null),o=n(null);i[" size"]=o[" size"]=0}e.exports=function(e){function r(t,r){var n;if(null!=t&&(n=t[r]),"function"!=typeof n){var i="Object "+a.classString(t)+" has no method '"+a.toString(r)+"'";throw new e.TypeError(i)}return n}function n(t){var e=this.pop(),n=r(t,e);return n.apply(t,this)}function i(t){return t[this]}function o(t){var e=+this;return 0>e&&(e=Math.max(0,e+t.length)),t[e]}var s,a=t("./util.js"),u=a.canEvaluate;a.isIdentifier;e.prototype.call=function(t){for(var e=arguments.length,r=new Array(e-1),i=1;e>i;++i)r[i-1]=arguments[i];return r.push(t),this._then(n,void 0,void 0,r,void 0)},e.prototype.get=function(t){var e,r="number"==typeof t;if(r)e=o;else if(u){var n=s(t);e=null!==n?n:i}else e=i;return this._then(e,void 0,void 0,t,void 0)}}},{"./util.js":38}],6:[function(t,e,r){"use strict";e.exports=function(e){var r=t("./errors.js"),n=t("./async.js"),i=r.CancellationError;e.prototype._cancel=function(t){if(!this.isCancellable())return this;for(var e,r=this;void 0!==(e=r._cancellationParent)&&e.isCancellable();)r=e;this._unsetCancellable(),r._target()._rejectCallback(t,!1,!0)},e.prototype.cancel=function(t){return this.isCancellable()?(void 0===t&&(t=new i),n.invokeLater(this._cancel,this,t),this):this},e.prototype.cancellable=function(){return this._cancellable()?this:(n.enableTrampoline(),this._setCancellable(),this._cancellationParent=void 0,this)},e.prototype.uncancellable=function(){var t=this.then();return t._unsetCancellable(),t},e.prototype.fork=function(t,e,r){var n=this._then(t,e,r,void 0,void 0);return n._setCancellable(),n._cancellationParent=void 0,n}}},{"./async.js":2,"./errors.js":13}],7:[function(t,e,r){"use strict";e.exports=function(){function e(t){this._parent=t;var r=this._length=1+(void 0===t?0:t._length);j(this,e),r>32&&this.uncycle()}function r(t,e){for(var r=0;r=0;--a)if(n[a]===o){s=a;break}for(var a=s;a>=0;--a){var u=n[a];if(e[i]!==u)break;e.pop(),i--}e=n}}function o(t){for(var e=[],r=0;r0&&(e=e.slice(r)),e}function a(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t.toString();var r=/\[object [a-zA-Z0-9$_]+\]/;if(r.test(e))try{var n=JSON.stringify(t);e=n}catch(i){}0===e.length&&(e="(empty array)")}return"(<"+u(e)+">, no stack trace)"}function u(t){var e=41;return t.lengtht)){for(var e=[],r={},n=0,i=this;void 0!==i;++n)e.push(i),i=i._parent;t=this._length=n;for(var n=t-1;n>=0;--n){var o=e[n].stack;void 0===r[o]&&(r[o]=n)}for(var n=0;t>n;++n){var s=e[n].stack,a=r[s];if(void 0!==a&&a!==n){a>0&&(e[a-1]._parent=void 0,e[a-1]._length=1),e[n]._parent=void 0,e[n]._length=1;var u=n>0?e[n-1]:this;t-1>a?(u._parent=e[a+1],u._parent.uncycle(),u._length=u._parent._length+1):(u._parent=void 0,u._length=1);for(var c=u._length+1,l=n-2;l>=0;--l)e[l]._length=c,c++;return}}}},e.prototype.parent=function(){return this._parent},e.prototype.hasParent=function(){return void 0!==this._parent},e.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var s=e.parseStackAndMessage(t),a=s.message,u=[s.stack],c=this;void 0!==c;)u.push(o(c.stack.split("\n"))),c=c._parent;i(u),n(u),p.notEnumerableProp(t,"stack",r(a,u)),p.notEnumerableProp(t,"__stackCleaned__",!0)}},e.parseStackAndMessage=function(t){var e=t.stack,r=t.toString();return e="string"==typeof e&&e.length>0?s(t):[" (No stack trace)"],{message:r,stack:o(e)}},e.formatAndLogError=function(t,e){if("undefined"!=typeof console){var r;if("object"==typeof t||"function"==typeof t){var n=t.stack;r=e+d(n,t)}else r=e+String(t);"function"==typeof l?l(r):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}},e.unhandledRejection=function(t){e.formatAndLogError(t,"^--- With additional stack trace: ")},e.isSupported=function(){return"function"==typeof j},e.fireRejectionEvent=function(t,r,n,i){var o=!1;try{"function"==typeof r&&(o=!0,"rejectionHandled"===t?r(i):r(n,i))}catch(s){h.throwLater(s)}var a=!1;try{a=b(t,n,i)}catch(s){a=!0,h.throwLater(s)}var u=!1;if(m)try{u=m(t.toLowerCase(),{reason:n,promise:i})}catch(s){u=!0,h.throwLater(s)}a||o||u||"unhandledRejection"!==t||e.formatAndLogError(n,"Unhandled rejection ")};var y=function(){return!1},g=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;e.setBounds=function(t,r){if(e.isSupported()){for(var n,i,o=t.stack.split("\n"),s=r.stack.split("\n"),a=-1,u=-1,l=0;la||0>u||!n||!i||n!==i||a>=u||(y=function(t){if(f.test(t))return!0;var e=c(t);return e&&e.fileName===n&&a<=e.line&&e.line<=u?!0:!1})}};var m,j=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():a(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit=Error.stackTraceLimit+6,_=t,d=e;var r=Error.captureStackTrace;return y=function(t){return f.test(t)},function(t,e){Error.stackTraceLimit=Error.stackTraceLimit+6,r(t,e),Error.stackTraceLimit=Error.stackTraceLimit-6}}var n=new Error;if("string"==typeof n.stack&&n.stack.split("\n")[0].indexOf("stackDetection@")>=0)return _=/@/,d=e,v=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(o){i="stack"in o}return"stack"in n||!i||"number"!=typeof Error.stackTraceLimit?(d=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?a(e):e.toString()},null):(_=t,d=e,function(t){Error.stackTraceLimit=Error.stackTraceLimit+6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit=Error.stackTraceLimit-6})}([]),b=function(){if(p.isNode)return function(t,e,r){return"rejectionHandled"===t?process.emit(t,r):process.emit(t,e,r)};var t=!1,e=!0;try{var r=new self.CustomEvent("test");t=r instanceof CustomEvent}catch(n){}if(!t)try{var i=document.createEvent("CustomEvent");i.initCustomEvent("testingtheevent",!1,!0,{}),self.dispatchEvent(i)}catch(n){e=!1}e&&(m=function(e,r){var n;return t?n=new self.CustomEvent(e,{detail:r,bubbles:!1,cancelable:!0}):self.dispatchEvent&&(n=document.createEvent("CustomEvent"),n.initCustomEvent(e,!1,!0,r)),n?!self.dispatchEvent(n):!1});var o={};return o.unhandledRejection="onunhandledRejection".toLowerCase(),o.rejectionHandled="onrejectionHandled".toLowerCase(),function(t,e,r){var n=o[t],i=self[n];return i?("rejectionHandled"===t?i.call(self,r):i.call(self,e,r),!0):!1}}();return"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(l=function(t){console.warn(t)},p.isNode&&process.stderr.isTTY?l=function(t){process.stderr.write(""+t+"\n")}:p.isNode||"string"!=typeof(new Error).stack||(l=function(t){console.warn("%c"+t,"color: red")})),e}},{"./async.js":2,"./util.js":38}],8:[function(t,e,r){"use strict";e.exports=function(e){function r(t,e,r){this._instances=t,this._callback=e,this._promise=r}function n(t,e){var r={},n=s(t).call(r,e);if(n===a)return n;var i=u(r);return i.length?(a.e=new c("Catch filter must inherit from Error or be a simple predicate function\n\n See http://goo.gl/o84o68\n"),a):n}var i=t("./util.js"),o=t("./errors.js"),s=i.tryCatch,a=i.errorObj,u=t("./es5.js").keys,c=o.TypeError;return r.prototype.doFilter=function(t){for(var r=this._callback,i=this._promise,o=i._boundValue(),u=0,c=this._instances.length;c>u;++u){var l=this._instances[u],h=l===Error||null!=l&&l.prototype instanceof Error;if(h&&t instanceof l){var p=s(r).call(o,t);return p===a?(e.e=p.e,e):p}if("function"==typeof l&&!h){var f=n(l,t);if(f===a){t=a.e;break}if(f){var p=s(r).call(o,t);return p===a?(e.e=p.e,e):p}}}return e.e=t,e},r}},{"./errors.js":13,"./es5.js":14,"./util.js":38}],9:[function(t,e,r){"use strict";e.exports=function(t,e,r){function n(){this._trace=new e(o())}function i(){return r()?new n:void 0}function o(){var t=s.length-1;return t>=0?s[t]:void 0}var s=[];return n.prototype._pushContext=function(){r()&&void 0!==this._trace&&s.push(this._trace)},n.prototype._popContext=function(){r()&&void 0!==this._trace&&s.pop()},t.prototype._peekContext=o,t.prototype._pushContext=n.prototype._pushContext,t.prototype._popContext=n.prototype._popContext,i}},{}],10:[function(t,e,r){"use strict";e.exports=function(e,r){var n,i,o=e._getDomain,s=t("./async.js"),a=t("./errors.js").Warning,u=t("./util.js"),c=u.canAttachTrace,l=u.isNode&&(!!process.env.BLUEBIRD_DEBUG||"development"===process.env.NODE_ENV);return u.isNode&&0==process.env.BLUEBIRD_DEBUG&&(l=!1),l&&s.disableTrampolineIfNecessary(),e.prototype._ignoreRejections=function(){this._unsetRejectionIsUnhandled(),this._bitField=16777216|this._bitField},e.prototype._ensurePossibleRejectionHandled=function(){0===(16777216&this._bitField)&&(this._setRejectionIsUnhandled(),s.invokeLater(this._notifyUnhandledRejection,this,void 0))},e.prototype._notifyUnhandledRejectionIsHandled=function(){r.fireRejectionEvent("rejectionHandled",n,void 0,this)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._getCarriedStackTrace()||this._settledValue;this._setUnhandledRejectionIsNotified(),r.fireRejectionEvent("unhandledRejection",i,t,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=524288|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-524289&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(524288&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=2097152|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-2097153&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(2097152&this._bitField)>0},e.prototype._setCarriedStackTrace=function(t){this._bitField=1048576|this._bitField,this._fulfillmentHandler0=t},e.prototype._isCarryingStackTrace=function(){return(1048576&this._bitField)>0},e.prototype._getCarriedStackTrace=function(){return this._isCarryingStackTrace()?this._fulfillmentHandler0:void 0},e.prototype._captureStackTrace=function(){return l&&(this._trace=new r(this._peekContext())),this},e.prototype._attachExtraTrace=function(t,e){if(l&&c(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var i=r.parseStackAndMessage(t);u.notEnumerableProp(t,"stack",i.message+"\n"+i.stack.join("\n")),u.notEnumerableProp(t,"__stackCleaned__",!0)}}},e.prototype._warn=function(t){var e=new a(t),n=this._peekContext();if(n)n.attachExtraTrace(e);else{var i=r.parseStackAndMessage(e);e.stack=i.message+"\n"+i.stack.join("\n")}r.formatAndLogError(e,"")},e.onPossiblyUnhandledRejection=function(t){var e=o();i="function"==typeof t?null===e?t:e.bind(t):void 0},e.onUnhandledRejectionHandled=function(t){var e=o();n="function"==typeof t?null===e?t:e.bind(t):void 0},e.longStackTraces=function(){if(s.haveItemsQueued()&&l===!1)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/DT1qyG\n");l=r.isSupported(),l&&s.disableTrampolineIfNecessary()},e.hasLongStackTraces=function(){return l&&r.isSupported()},r.isSupported()||(e.longStackTraces=function(){},l=!1),function(){return l}}},{"./async.js":2,"./errors.js":13,"./util.js":38}],11:[function(t,e,r){"use strict";var n=t("./util.js"),i=n.isPrimitive;e.exports=function(t){var e=function(){return this},r=function(){throw this},n=function(){},o=function(){throw void 0},s=function(t,e){return 1===e?function(){throw t}:2===e?function(){return t}:void 0};t.prototype["return"]=t.prototype.thenReturn=function(r){return void 0===r?this.then(n):i(r)?this._then(s(r,2),void 0,void 0,void 0,void 0):(r instanceof t&&r._ignoreRejections(),this._then(e,void 0,void 0,r,void 0))},t.prototype["throw"]=t.prototype.thenThrow=function(t){return void 0===t?this.then(o):i(t)?this._then(s(t,1),void 0,void 0,void 0,void 0):this._then(r,void 0,void 0,t,void 0)}}},{"./util.js":38}],12:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.reduce;t.prototype.each=function(t){return r(this,t,null,e)},t.each=function(t,n){return r(t,n,null,e)}}},{}],13:[function(t,e,r){"use strict";function n(t,e){function r(n){return this instanceof r?(h(this,"message","string"==typeof n?n:e),h(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new r(n)}return l(r,Error),r}function i(t){return this instanceof i?(h(this,"name","OperationalError"),h(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(h(this,"message",t.message),h(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,s,a=t("./es5.js"),u=a.freeze,c=t("./util.js"),l=c.inherits,h=c.notEnumerableProp,p=n("Warning","warning"),f=n("CancellationError","cancellation error"),_=n("TimeoutError","timeout error"),d=n("AggregateError","aggregate error");try{o=TypeError,s=RangeError}catch(v){o=n("TypeError","type error"),s=n("RangeError","range error")}for(var y="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),g=0;g0&&"function"==typeof arguments[e]){t=arguments[e];var n}for(var i=arguments.length,o=new Array(i),s=0;i>s;++s)o[s]=arguments[s];t&&o.pop();var n=new r(o).promise();return void 0!==t?n.spread(t):n}}},{"./util.js":38}],19:[function(t,e,r){"use strict";e.exports=function(e,r,n,i,o){function s(t,e,r,n){this.constructor$(t),this._promise._captureStackTrace();var i=c();this._callback=null===i?e:i.bind(e),this._preservedValues=n===o?new Array(this.length()):null,this._limit=r,this._inFlight=0,this._queue=r>=1?[]:d,l.invoke(a,this,void 0)}function a(){this._init$(void 0,-2)}function u(t,e,r,n){var i="object"==typeof r&&null!==r?r.concurrency:0;return i="number"==typeof i&&isFinite(i)&&i>=1?i:0,new s(t,e,i,n)}var c=e._getDomain,l=t("./async.js"),h=t("./util.js"),p=h.tryCatch,f=h.errorObj,_={},d=[];h.inherits(s,r),s.prototype._init=function(){},s.prototype._promiseFulfilled=function(t,r){var n=this._values,o=this.length(),s=this._preservedValues,a=this._limit;if(n[r]===_){if(n[r]=t,a>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return}else{if(a>=1&&this._inFlight>=a)return n[r]=t,void this._queue.push(r);null!==s&&(s[r]=t);var u=this._callback,c=this._promise._boundValue();this._promise._pushContext();var l=p(u).call(c,t,r,o);if(this._promise._popContext(),l===f)return this._reject(l.e);var h=i(l,this._promise);if(h instanceof e){if(h=h._target(),h._isPending())return a>=1&&this._inFlight++,n[r]=_,h._proxyPromiseArray(this,r);if(!h._isFulfilled())return this._reject(h._reason());l=h._value()}n[r]=l}var d=++this._totalResolved;d>=o&&(null!==s?this._filter(n,s):this._resolve(n))},s.prototype._drainQueue=function(){for(var t=this._queue,e=this._limit,r=this._values;t.length>0&&this._inFlighto;++o)t[o]&&(n[i++]=e[o]);n.length=i,this._resolve(n)},s.prototype.preservedValues=function(){return this._preservedValues},e.prototype.map=function(t,e){return"function"!=typeof t?n("fn must be a function\n\n See http://goo.gl/916lJJ\n"):u(this,t,e,null).promise()},e.map=function(t,e,r,i){return"function"!=typeof e?n("fn must be a function\n\n See http://goo.gl/916lJJ\n"):u(t,e,r,i).promise()}}},{"./async.js":2,"./util.js":38}],20:[function(t,e,r){"use strict";e.exports=function(e,r,n,i){var o=t("./util.js"),s=o.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("fn must be a function\n\n See http://goo.gl/916lJJ\n");return function(){var n=new e(r);n._captureStackTrace(),n._pushContext();var i=s(t).apply(this,arguments);return n._popContext(),n._resolveFromSyncValue(i),n}},e.attempt=e["try"]=function(t,n,a){if("function"!=typeof t)return i("fn must be a function\n\n See http://goo.gl/916lJJ\n");var u=new e(r);u._captureStackTrace(),u._pushContext();var c=o.isArray(n)?s(t).apply(a,n):s(t).call(a,n);return u._popContext(),u._resolveFromSyncValue(c),u},e.prototype._resolveFromSyncValue=function(t){t===o.errorObj?this._rejectCallback(t.e,!1,!0):this._resolveCallback(t,!0)}}},{"./util.js":38}],21:[function(t,e,r){"use strict";e.exports=function(e){function r(t,e){var r=this;if(!o.isArray(t))return n.call(r,t,e);var i=a(e).apply(r._boundValue(),[null].concat(t));i===u&&s.throwLater(i.e)}function n(t,e){var r=this,n=r._boundValue(),i=void 0===t?a(e).call(n,null):a(e).call(n,null,t);i===u&&s.throwLater(i.e)}function i(t,e){var r=this;if(!t){var n=r._target(),i=n._getCarriedStackTrace();i.cause=t,t=i}var o=a(e).call(r._boundValue(),t);o===u&&s.throwLater(o.e)}var o=t("./util.js"),s=t("./async.js"),a=o.tryCatch,u=o.errorObj;e.prototype.asCallback=e.prototype.nodeify=function(t,e){if("function"==typeof t){var o=n;void 0!==e&&Object(e).spread&&(o=r),this._then(o,i,void 0,this,t)}return this}}},{"./async.js":2,"./util.js":38}],22:[function(t,e,r){"use strict";e.exports=function(e,r){var n=t("./util.js"),i=t("./async.js"),o=n.tryCatch,s=n.errorObj;e.prototype.progressed=function(t){return this._then(void 0,void 0,t,void 0,void 0)},e.prototype._progress=function(t){this._isFollowingOrFulfilledOrRejected()||this._target()._progressUnchecked(t)},e.prototype._progressHandlerAt=function(t){return 0===t?this._progressHandler0:this[(t<<2)+t-5+2]},e.prototype._doProgressWith=function(t){var r=t.value,i=t.handler,a=t.promise,u=t.receiver,c=o(i).call(u,r);if(c===s){if(null!=c.e&&"StopProgressPropagation"!==c.e.name){var l=n.canAttachTrace(c.e)?c.e:new Error(n.toString(c.e));a._attachExtraTrace(l),a._progress(c.e)}}else c instanceof e?c._then(a._progress,null,null,a,void 0):a._progress(c)},e.prototype._progressUnchecked=function(t){for(var n=this._length(),o=this._progress,s=0;n>s;s++){var a=this._progressHandlerAt(s),u=this._promiseAt(s);if(u instanceof e)"function"==typeof a?i.invoke(this._doProgressWith,this,{handler:a,promise:u,receiver:this._receiverAt(s),value:t}):i.invoke(o,u,t);else{var c=this._receiverAt(s);"function"==typeof a?a.call(c,t,u):c instanceof r&&!c._isResolved()&&c._promiseProgressed(t,u)}}}}},{"./async.js":2,"./util.js":38}],23:[function(t,e,r){"use strict";e.exports=function(){function r(t){if("function"!=typeof t)throw new p("the promise constructor requires a resolver function\n\n See http://goo.gl/EC22Yn\n");if(this.constructor!==r)throw new p("the promise constructor cannot be invoked directly\n\n See http://goo.gl/KsIlge\n");this._bitField=0,this._fulfillmentHandler0=void 0,this._rejectionHandler0=void 0,this._progressHandler0=void 0,this._promise0=void 0,this._receiver0=void 0,this._settledValue=void 0,t!==f&&this._resolveFromResolver(t)}function n(t){var e=new r(f);e._fulfillmentHandler0=t,e._rejectionHandler0=t,e._progressHandler0=t,e._promise0=t,e._receiver0=t,e._settledValue=t}var i,o=function(){return new p("circular promise resolution chain\n\n See http://goo.gl/LhFpo0\n")},s=function(){return new r.PromiseInspection(this._target())},a=function(t){return r.reject(new p(t))},u=t("./util.js");i=u.isNode?function(){var t=process.domain;return void 0===t&&(t=null),t}:function(){return null},u.notEnumerableProp(r,"_getDomain",i);var c={},l=t("./async.js"),h=t("./errors.js"),p=r.TypeError=h.TypeError;r.RangeError=h.RangeError,r.CancellationError=h.CancellationError,r.TimeoutError=h.TimeoutError,r.OperationalError=h.OperationalError,r.RejectionError=h.OperationalError,r.AggregateError=h.AggregateError;var f=function(){},_={},d={e:null},v=t("./thenables.js")(r,f),y=t("./promise_array.js")(r,f,v,a),g=t("./captured_trace.js")(),m=t("./debuggability.js")(r,g),j=t("./context.js")(r,g,m),b=t("./catch_filter.js")(d),w=t("./promise_resolver.js"),k=w._nodebackForPromise,E=u.errorObj,F=u.tryCatch;return r.prototype.toString=function(){return"[object Promise]"},r.prototype.caught=r.prototype["catch"]=function(t){var e=arguments.length;if(e>1){var n,i=new Array(e-1),o=0;for(n=0;e-1>n;++n){var s=arguments[n];if("function"!=typeof s)return r.reject(new p("Catch filter must inherit from Error or be a simple predicate function\n\n See http://goo.gl/o84o68\n"));i[o++]=s}i.length=o,t=arguments[n];var a=new b(i,t,this);return this._then(void 0,a.doFilter,void 0,a,void 0)}return this._then(void 0,t,void 0,void 0,void 0)},r.prototype.reflect=function(){return this._then(s,s,void 0,this,void 0)},r.prototype.then=function(t,e,r){if(m()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){var n=".then() only accepts functions but was passed: "+u.classString(t);arguments.length>1&&(n+=", "+u.classString(e)),this._warn(n)}return this._then(t,e,r,void 0,void 0); -},r.prototype.done=function(t,e,r){var n=this._then(t,e,r,void 0,void 0);n._setIsFinal()},r.prototype.spread=function(t,e){return this.all()._then(t,e,void 0,_,void 0)},r.prototype.isCancellable=function(){return!this.isResolved()&&this._cancellable()},r.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},r.prototype.all=function(){return new y(this).promise()},r.prototype.error=function(t){return this.caught(u.originatesFromRejection,t)},r.getNewLibraryCopy=e.exports,r.is=function(t){return t instanceof r},r.fromNode=function(t){var e=new r(f),n=F(t)(k(e));return n===E&&e._rejectCallback(n.e,!0,!0),e},r.all=function(t){return new y(t).promise()},r.defer=r.pending=function(){var t=new r(f);return new w(t)},r.cast=function(t){var e=v(t);if(!(e instanceof r)){var n=e;e=new r(f),e._fulfillUnchecked(n)}return e},r.resolve=r.fulfilled=r.cast,r.reject=r.rejected=function(t){var e=new r(f);return e._captureStackTrace(),e._rejectCallback(t,!0),e},r.setScheduler=function(t){if("function"!=typeof t)throw new p("fn must be a function\n\n See http://goo.gl/916lJJ\n");var e=l._schedule;return l._schedule=t,e},r.prototype._then=function(t,e,n,o,s){var a=void 0!==s,u=a?s:new r(f);a||(u._propagateFrom(this,5),u._captureStackTrace());var c=this._target();c!==this&&(void 0===o&&(o=this._boundTo),a||u._setIsMigrated());var h=c._addCallbacks(t,e,n,u,o,i());return c._isResolved()&&!c._isSettlePromisesQueued()&&l.invoke(c._settlePromiseAtPostResolution,c,h),u},r.prototype._settlePromiseAtPostResolution=function(t){this._isRejectionUnhandled()&&this._unsetRejectionIsUnhandled(),this._settlePromiseAt(t)},r.prototype._length=function(){return 131071&this._bitField},r.prototype._isFollowingOrFulfilledOrRejected=function(){return(939524096&this._bitField)>0},r.prototype._isFollowing=function(){return 536870912===(536870912&this._bitField)},r.prototype._setLength=function(t){this._bitField=-131072&this._bitField|131071&t},r.prototype._setFulfilled=function(){this._bitField=268435456|this._bitField},r.prototype._setRejected=function(){this._bitField=134217728|this._bitField},r.prototype._setFollowing=function(){this._bitField=536870912|this._bitField},r.prototype._setIsFinal=function(){this._bitField=33554432|this._bitField},r.prototype._isFinal=function(){return(33554432&this._bitField)>0},r.prototype._cancellable=function(){return(67108864&this._bitField)>0},r.prototype._setCancellable=function(){this._bitField=67108864|this._bitField},r.prototype._unsetCancellable=function(){this._bitField=-67108865&this._bitField},r.prototype._setIsMigrated=function(){this._bitField=4194304|this._bitField},r.prototype._unsetIsMigrated=function(){this._bitField=-4194305&this._bitField},r.prototype._isMigrated=function(){return(4194304&this._bitField)>0},r.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[5*t-5+4];return e===c?void 0:void 0===e&&this._isBound()?this._boundValue():e},r.prototype._promiseAt=function(t){return 0===t?this._promise0:this[5*t-5+3]},r.prototype._fulfillmentHandlerAt=function(t){return 0===t?this._fulfillmentHandler0:this[5*t-5+0]},r.prototype._rejectionHandlerAt=function(t){return 0===t?this._rejectionHandler0:this[5*t-5+1]},r.prototype._boundValue=function(){var t=this._boundTo;return void 0!==t&&t instanceof r?t.isFulfilled()?t.value():void 0:t},r.prototype._migrateCallbacks=function(t,e){var n=t._fulfillmentHandlerAt(e),i=t._rejectionHandlerAt(e),o=t._progressHandlerAt(e),s=t._promiseAt(e),a=t._receiverAt(e);s instanceof r&&s._setIsMigrated(),void 0===a&&(a=c),this._addCallbacks(n,i,o,s,a,null)},r.prototype._addCallbacks=function(t,e,r,n,i,o){var s=this._length();if(s>=131066&&(s=0,this._setLength(0)),0===s)this._promise0=n,void 0!==i&&(this._receiver0=i),"function"!=typeof t||this._isCarryingStackTrace()||(this._fulfillmentHandler0=null===o?t:o.bind(t)),"function"==typeof e&&(this._rejectionHandler0=null===o?e:o.bind(e)),"function"==typeof r&&(this._progressHandler0=null===o?r:o.bind(r));else{var a=5*s-5;this[a+3]=n,this[a+4]=i,"function"==typeof t&&(this[a+0]=null===o?t:o.bind(t)),"function"==typeof e&&(this[a+1]=null===o?e:o.bind(e)),"function"==typeof r&&(this[a+2]=null===o?r:o.bind(r))}return this._setLength(s+1),s},r.prototype._setProxyHandlers=function(t,e){var r=this._length();if(r>=131066&&(r=0,this._setLength(0)),0===r)this._promise0=e,this._receiver0=t;else{var n=5*r-5;this[n+3]=e,this[n+4]=t}this._setLength(r+1)},r.prototype._proxyPromiseArray=function(t,e){this._setProxyHandlers(t,e)},r.prototype._resolveCallback=function(t,e){if(!this._isFollowingOrFulfilledOrRejected()){if(t===this)return this._rejectCallback(o(),!1,!0);var n=v(t,this);if(!(n instanceof r))return this._fulfill(t);var i=1|(e?4:0);this._propagateFrom(n,i);var s=n._target();if(s._isPending()){for(var a=this._length(),u=0;a>u;++u)s._migrateCallbacks(this,u);this._setFollowing(),this._setLength(0),this._setFollowee(s)}else s._isFulfilled()?this._fulfillUnchecked(s._value()):this._rejectUnchecked(s._reason(),s._getCarriedStackTrace())}},r.prototype._rejectCallback=function(t,e,r){r||u.markAsOriginatingFromRejection(t);var n=u.ensureErrorObject(t),i=n===t;this._attachExtraTrace(n,e?i:!1),this._reject(t,i?void 0:n)},r.prototype._resolveFromResolver=function(t){var e=this;this._captureStackTrace(),this._pushContext();var r=!0,n=F(t)(function(t){null!==e&&(e._resolveCallback(t),e=null)},function(t){null!==e&&(e._rejectCallback(t,r),e=null)});r=!1,this._popContext(),void 0!==n&&n===E&&null!==e&&(e._rejectCallback(n.e,!0,!0),e=null)},r.prototype._settlePromiseFromHandler=function(t,e,r,n){if(!n._isRejected()){n._pushContext();var i;if(i=e!==_||this._isRejected()?F(t).call(e,r):F(t).apply(this._boundValue(),r),n._popContext(),i===E||i===n||i===d){var s=i===n?o():i.e;n._rejectCallback(s,!1,!0)}else n._resolveCallback(i)}},r.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},r.prototype._followee=function(){return this._rejectionHandler0},r.prototype._setFollowee=function(t){this._rejectionHandler0=t},r.prototype._cleanValues=function(){this._cancellable()&&(this._cancellationParent=void 0)},r.prototype._propagateFrom=function(t,e){(1&e)>0&&t._cancellable()&&(this._setCancellable(),this._cancellationParent=t),(4&e)>0&&t._isBound()&&this._setBoundTo(t._boundTo)},r.prototype._fulfill=function(t){this._isFollowingOrFulfilledOrRejected()||this._fulfillUnchecked(t)},r.prototype._reject=function(t,e){this._isFollowingOrFulfilledOrRejected()||this._rejectUnchecked(t,e)},r.prototype._settlePromiseAt=function(t){var e=this._promiseAt(t),n=e instanceof r;if(n&&e._isMigrated())return e._unsetIsMigrated(),l.invoke(this._settlePromiseAt,this,t);var i=this._isFulfilled()?this._fulfillmentHandlerAt(t):this._rejectionHandlerAt(t),o=this._isCarryingStackTrace()?this._getCarriedStackTrace():void 0,s=this._settledValue,a=this._receiverAt(t);this._clearCallbackDataAtIndex(t),"function"==typeof i?n?this._settlePromiseFromHandler(i,a,s,e):i.call(a,s,e):a instanceof y?a._isResolved()||(this._isFulfilled()?a._promiseFulfilled(s,e):a._promiseRejected(s,e)):n&&(this._isFulfilled()?e._fulfill(s):e._reject(s,o)),t>=4&&4===(31&t)&&l.invokeLater(this._setLength,this,0)},r.prototype._clearCallbackDataAtIndex=function(t){if(0===t)this._isCarryingStackTrace()||(this._fulfillmentHandler0=void 0),this._rejectionHandler0=this._progressHandler0=this._receiver0=this._promise0=void 0;else{var e=5*t-5;this[e+3]=this[e+4]=this[e+0]=this[e+1]=this[e+2]=void 0}},r.prototype._isSettlePromisesQueued=function(){return-1073741824===(-1073741824&this._bitField)},r.prototype._setSettlePromisesQueued=function(){this._bitField=-1073741824|this._bitField},r.prototype._unsetSettlePromisesQueued=function(){this._bitField=1073741823&this._bitField},r.prototype._queueSettlePromises=function(){l.settlePromises(this),this._setSettlePromisesQueued()},r.prototype._fulfillUnchecked=function(t){if(t===this){var e=o();return this._attachExtraTrace(e),this._rejectUnchecked(e,void 0)}this._setFulfilled(),this._settledValue=t,this._cleanValues(),this._length()>0&&this._queueSettlePromises()},r.prototype._rejectUncheckedCheckError=function(t){var e=u.ensureErrorObject(t);this._rejectUnchecked(t,e===t?void 0:e)},r.prototype._rejectUnchecked=function(t,e){if(t===this){var r=o();return this._attachExtraTrace(r),this._rejectUnchecked(r)}return this._setRejected(),this._settledValue=t,this._cleanValues(),this._isFinal()?void l.throwLater(function(t){throw"stack"in t&&l.invokeFirst(g.unhandledRejection,void 0,t),t},void 0===e?t:e):(void 0!==e&&e!==t&&this._setCarriedStackTrace(e),void(this._length()>0?this._queueSettlePromises():this._ensurePossibleRejectionHandled()))},r.prototype._settlePromises=function(){this._unsetSettlePromisesQueued();for(var t=this._length(),e=0;t>e;e++)this._settlePromiseAt(e)},u.notEnumerableProp(r,"_makeSelfResolutionError",o),t("./progress.js")(r,y),t("./method.js")(r,f,v,a),t("./bind.js")(r,f,v),t("./finally.js")(r,d,v),t("./direct_resolve.js")(r),t("./synchronous_inspection.js")(r),t("./join.js")(r,y,v,f),r.version="2.11.0",r.Promise=r,t("./map.js")(r,y,a,v,f),t("./cancel.js")(r),t("./using.js")(r,a,v,j),t("./generators.js")(r,a,f,v),t("./nodeify.js")(r),t("./call_get.js")(r),t("./props.js")(r,y,v,a),t("./race.js")(r,f,v,a),t("./reduce.js")(r,y,a,v,f),t("./settle.js")(r,y),t("./some.js")(r,y,a),t("./promisify.js")(r,f),t("./any.js")(r),t("./each.js")(r,f),t("./timers.js")(r,f),t("./filter.js")(r,f),u.toFastProperties(r),u.toFastProperties(r.prototype),n({a:1}),n({b:2}),n({c:3}),n(1),n(function(){}),n(void 0),n(!1),n(new r(f)),g.setBounds(l.firstLineError,u.lastLineError),r}},{"./any.js":1,"./async.js":2,"./bind.js":3,"./call_get.js":5,"./cancel.js":6,"./captured_trace.js":7,"./catch_filter.js":8,"./context.js":9,"./debuggability.js":10,"./direct_resolve.js":11,"./each.js":12,"./errors.js":13,"./filter.js":15,"./finally.js":16,"./generators.js":17,"./join.js":18,"./map.js":19,"./method.js":20,"./nodeify.js":21,"./progress.js":22,"./promise_array.js":24,"./promise_resolver.js":25,"./promisify.js":26,"./props.js":27,"./race.js":29,"./reduce.js":30,"./settle.js":32,"./some.js":33,"./synchronous_inspection.js":34,"./thenables.js":35,"./timers.js":36,"./using.js":37,"./util.js":38}],24:[function(t,e,r){"use strict";e.exports=function(e,r,n,i){function o(t){switch(t){case-2:return[];case-3:return{}}}function s(t){var n,i=this._promise=new e(r);t instanceof e&&(n=t,i._propagateFrom(n,5)),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var a=t("./util.js"),u=a.isArray;return s.prototype.length=function(){return this._length},s.prototype.promise=function(){return this._promise},s.prototype._init=function c(t,r){var s=n(this._values,this._promise);if(s instanceof e){if(s=s._target(),this._values=s,!s._isFulfilled())return s._isPending()?void s._then(c,this._reject,void 0,this,r):void this._reject(s._reason());if(s=s._value(),!u(s)){var a=new e.TypeError("expecting an array, a promise or a thenable\n\n See http://goo.gl/s8MMhc\n");return void this.__hardReject__(a)}}else if(!u(s))return void this._promise._reject(i("expecting an array, a promise or a thenable\n\n See http://goo.gl/s8MMhc\n")._reason());if(0===s.length)return void(-5===r?this._resolveEmptyArray():this._resolve(o(r)));var l=this.getActualLength(s.length);this._length=l,this._values=this.shouldCopyValues()?new Array(l):this._values;for(var h=this._promise,p=0;l>p;++p){var f=this._isResolved(),_=n(s[p],h);_ instanceof e?(_=_._target(),f?_._ignoreRejections():_._isPending()?_._proxyPromiseArray(this,p):_._isFulfilled()?this._promiseFulfilled(_._value(),p):this._promiseRejected(_._reason(),p)):f||this._promiseFulfilled(_,p)}},s.prototype._isResolved=function(){return null===this._values},s.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},s.prototype.__hardReject__=s.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1,!0)},s.prototype._promiseProgressed=function(t,e){this._promise._progress({index:e,value:t})},s.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var r=++this._totalResolved;r>=this._length&&this._resolve(this._values)},s.prototype._promiseRejected=function(t,e){this._totalResolved++,this._reject(t)},s.prototype.shouldCopyValues=function(){return!0},s.prototype.getActualLength=function(t){return t},s}},{"./util.js":38}],25:[function(t,e,r){"use strict";function n(t){return t instanceof Error&&f.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(n(t)){e=new h(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var r=f.keys(t),i=0;i2){for(var o=arguments.length,s=new Array(o-1),a=1;o>a;++a)s[a-1]=arguments[a];t._fulfill(s)}else t._fulfill(r);t=null}}}var s,a=t("./util.js"),u=a.maybeWrapAsError,c=t("./errors.js"),l=c.TimeoutError,h=c.OperationalError,p=a.haveGetters,f=t("./es5.js"),_=/^(?:name|message|stack|cause)$/;if(s=p?function(t){this.promise=t}:function(t){this.promise=t,this.asCallback=o(t),this.callback=this.asCallback},p){var d={get:function(){return o(this.promise)}};f.defineProperty(s.prototype,"asCallback",d),f.defineProperty(s.prototype,"callback",d)}s._nodebackForPromise=o,s.prototype.toString=function(){return"[object PromiseResolver]"},s.prototype.resolve=s.prototype.fulfill=function(t){if(!(this instanceof s))throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n See http://goo.gl/sdkXL9\n");this.promise._resolveCallback(t)},s.prototype.reject=function(t){if(!(this instanceof s))throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n See http://goo.gl/sdkXL9\n");this.promise._rejectCallback(t)},s.prototype.progress=function(t){if(!(this instanceof s))throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\n\n See http://goo.gl/sdkXL9\n");this.promise._progress(t)},s.prototype.cancel=function(t){this.promise.cancel(t)},s.prototype.timeout=function(){this.reject(new l("timeout"))},s.prototype.isResolved=function(){return this.promise.isResolved()},s.prototype.toJSON=function(){return this.promise.toJSON()},e.exports=s},{"./errors.js":13,"./es5.js":14,"./util.js":38}],26:[function(t,e,r){"use strict";e.exports=function(e,r){function n(t){return!w.test(t)}function i(t){try{return t.__isPromisified__===!0}catch(e){return!1}}function o(t,e,r){var n=f.getDataPropertyOrDefault(t,e+r,j);return n?i(n):!1}function s(t,e,r){for(var n=0;ns;s+=2){var c=o[s],l=o[s+1],h=c+e;if(n===F)t[h]=F(c,p,c,l,e);else{var _=n(l,function(){return F(c,p,c,l,e)});f.notEnumerableProp(_,"__isPromisified__",!0),t[h]=_}}return f.toFastProperties(t),t}function l(t,e){return F(t,e,void 0,t)}var h,p={},f=t("./util.js"),_=t("./promise_resolver.js")._nodebackForPromise,d=f.withAppended,v=f.maybeWrapAsError,y=f.canEvaluate,g=t("./errors").TypeError,m="Async",j={__isPromisified__:!0},b=["arity","length","name","arguments","caller","callee","prototype","__isPromisified__"],w=new RegExp("^(?:"+b.join("|")+")$"),k=function(t){return f.isIdentifier(t)&&"_"!==t.charAt(0)&&"constructor"!==t},E=function(t){return t.replace(/([$])/,"\\$")},F=y?h:u;e.promisify=function(t,e){if("function"!=typeof t)throw new g("fn must be a function\n\n See http://goo.gl/916lJJ\n");if(i(t))return t;var r=l(t,arguments.length<2?p:e);return f.copyDescriptors(t,r,n),r},e.promisifyAll=function(t,e){if("function"!=typeof t&&"object"!=typeof t)throw new g("the target of promisifyAll must be an object or a function\n\n See http://goo.gl/9ITlV0\n");e=Object(e);var r=e.suffix;"string"!=typeof r&&(r=m);var n=e.filter;"function"!=typeof n&&(n=k);var i=e.promisifier;if("function"!=typeof i&&(i=F),!f.isIdentifier(r))throw new RangeError("suffix must be a valid identifier\n\n See http://goo.gl/8FZo5V\n");for(var o=f.inheritedDataKeys(t),s=0;si;++i){var o=e[i];n[i]=t[o],n[i+r]=o}this.constructor$(n)}function s(t){var r,s=n(t);return u(s)?(r=s instanceof e?s._then(e.props,void 0,void 0,void 0,void 0):new o(s).promise(),s instanceof e&&r._propagateFrom(s,4),r):i("cannot await properties of a non-object\n\n See http://goo.gl/OsFKC8\n")}var a=t("./util.js"),u=a.isObject,c=t("./es5.js");a.inherits(o,r),o.prototype._init=function(){this._init$(void 0,-3)},o.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var r=++this._totalResolved;if(r>=this._length){for(var n={},i=this.length(),o=0,s=this.length();s>o;++o)n[this._values[o+i]]=this._values[o];this._resolve(n)}},o.prototype._promiseProgressed=function(t,e){this._promise._progress({key:this._values[e+this.length()],value:t})},o.prototype.shouldCopyValues=function(){return!1},o.prototype.getActualLength=function(t){return t>>1},e.prototype.props=function(){return s(this)},e.props=function(t){return s(t)}}},{"./es5.js":14,"./util.js":38}],28:[function(t,e,r){"use strict";function n(t,e,r,n,i){for(var o=0;i>o;++o)r[o+n]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacityp;++p){var _=t[p];(void 0!==_||p in t)&&e.cast(_)._then(l,h,void 0,c,null)}return c}var s=t("./util.js").isArray,a=function(t){return t.then(function(e){return o(e,t)})};e.race=function(t){return o(t,void 0)},e.prototype.race=function(){return o(this,void 0)}}},{"./util.js":38}],30:[function(t,e,r){"use strict";e.exports=function(e,r,n,i,o){function s(t,r,n,s){this.constructor$(t),this._promise._captureStackTrace(),this._preservedValues=s===o?[]:null,this._zerothIsAccum=void 0===n,this._gotAccum=!1,this._reducingIndex=this._zerothIsAccum?1:0,this._valuesPhase=void 0;var u=i(n,this._promise),h=!1,p=u instanceof e;p&&(u=u._target(),u._isPending()?u._proxyPromiseArray(this,-1):u._isFulfilled()?(n=u._value(),this._gotAccum=!0):(this._reject(u._reason()),h=!0)),p||this._zerothIsAccum||(this._gotAccum=!0);var f=c();this._callback=null===f?r:f.bind(r),this._accum=n,h||l.invoke(a,this,void 0)}function a(){this._init$(void 0,-5)}function u(t,e,r,i){if("function"!=typeof e)return n("fn must be a function\n\n See http://goo.gl/916lJJ\n");var o=new s(t,e,r,i);return o.promise()}var c=e._getDomain,l=t("./async.js"),h=t("./util.js"),p=h.tryCatch,f=h.errorObj;h.inherits(s,r),s.prototype._init=function(){},s.prototype._resolveEmptyArray=function(){(this._gotAccum||this._zerothIsAccum)&&this._resolve(null!==this._preservedValues?[]:this._accum)},s.prototype._promiseFulfilled=function(t,r){var n=this._values;n[r]=t;var o,s=this.length(),a=this._preservedValues,u=null!==a,c=this._gotAccum,l=this._valuesPhase;if(!l)for(l=this._valuesPhase=new Array(s),o=0;s>o;++o)l[o]=0;if(o=l[r],0===r&&this._zerothIsAccum?(this._accum=t,this._gotAccum=c=!0,l[r]=0===o?1:2):-1===r?(this._accum=t,this._gotAccum=c=!0):0===o?l[r]=1:(l[r]=2,this._accum=t),c){for(var h,_=this._callback,d=this._promise._boundValue(),v=this._reducingIndex;s>v;++v)if(o=l[v],2!==o){if(1!==o)return;if(t=n[v],this._promise._pushContext(),u?(a.push(t),h=p(_).call(d,t,v,s)):h=p(_).call(d,this._accum,t,v,s),this._promise._popContext(),h===f)return this._reject(h.e);var y=i(h,this._promise);if(y instanceof e){if(y=y._target(),y._isPending())return l[v]=4,y._proxyPromiseArray(this,v);if(!y._isFulfilled())return this._reject(y._reason());h=y._value()}this._reducingIndex=v+1,this._accum=h}else this._reducingIndex=v+1;this._resolve(u?a:this._accum)}},e.prototype.reduce=function(t,e){return u(this,t,e,null)},e.reduce=function(t,e,r,n){return u(t,e,r,n)}}},{"./async.js":2,"./util.js":38}],31:[function(t,e,r){"use strict";var n,i=t("./util"),o=function(){throw new Error("No async scheduler available\n\n See http://goo.gl/m3OTXk\n")};if(i.isNode&&"undefined"==typeof MutationObserver){var s=global.setImmediate,a=process.nextTick;n=i.isRecentNode?function(t){s.call(global,t)}:function(t){a.call(process,t)}}else"undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&window.navigator.standalone?n="undefined"!=typeof setImmediate?function(t){setImmediate(t)}:"undefined"!=typeof setTimeout?function(t){setTimeout(t,0)}:o:(n=function(t){var e=document.createElement("div"),r=new MutationObserver(t);return r.observe(e,{attributes:!0}),function(){e.classList.toggle("foo")}},n.isStatic=!0);e.exports=n},{"./util":38}],32:[function(t,e,r){"use strict";e.exports=function(e,r){function n(t){this.constructor$(t)}var i=e.PromiseInspection,o=t("./util.js");o.inherits(n,r),n.prototype._promiseResolved=function(t,e){this._values[t]=e;var r=++this._totalResolved;r>=this._length&&this._resolve(this._values)},n.prototype._promiseFulfilled=function(t,e){var r=new i;r._bitField=268435456,r._settledValue=t,this._promiseResolved(e,r)},n.prototype._promiseRejected=function(t,e){var r=new i;r._bitField=134217728,r._settledValue=t,this._promiseResolved(e,r)},e.settle=function(t){return new n(t).promise()},e.prototype.settle=function(){return new n(this).promise()}}},{"./util.js":38}],33:[function(t,e,r){"use strict";e.exports=function(e,r,n){function i(t){this.constructor$(t),this._howMany=0,this._unwrap=!1,this._initialized=!1}function o(t,e){if((0|e)!==e||0>e)return n("expecting a positive integer\n\n See http://goo.gl/1wAmHx\n");var r=new i(t),o=r.promise();return r.setHowMany(e),r.init(),o}var s=t("./util.js"),a=t("./errors.js").RangeError,u=t("./errors.js").AggregateError,c=s.isArray;s.inherits(i,r),i.prototype._init=function(){if(this._initialized){if(0===this._howMany)return void this._resolve([]);this._init$(void 0,-5);var t=c(this._values);!this._isResolved()&&t&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}},i.prototype.init=function(){this._initialized=!0,this._init()},i.prototype.setUnwrap=function(){this._unwrap=!0},i.prototype.howMany=function(){return this._howMany},i.prototype.setHowMany=function(t){this._howMany=t},i.prototype._promiseFulfilled=function(t){this._addFulfilled(t),this._fulfilled()===this.howMany()&&(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values))},i.prototype._promiseRejected=function(t){if(this._addRejected(t),this.howMany()>this._canPossiblyFulfill()){for(var e=new u,r=this.length();r0},e.prototype.isRejected=t.prototype._isRejected=function(){return(134217728&this._bitField)>0},e.prototype.isPending=t.prototype._isPending=function(){return 0===(402653184&this._bitField)},e.prototype.isResolved=t.prototype._isResolved=function(){return(402653184&this._bitField)>0},t.prototype.isPending=function(){return this._target()._isPending()},t.prototype.isRejected=function(){return this._target()._isRejected()},t.prototype.isFulfilled=function(){return this._target()._isFulfilled()},t.prototype.isResolved=function(){return this._target()._isResolved()},t.prototype._value=function(){return this._settledValue},t.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue},t.prototype.value=function(){var t=this._target();if(!t.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/hc1DLj\n");return t._settledValue},t.prototype.reason=function(){var t=this._target();if(!t.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/hPuiwB\n");return t._unsetRejectionIsUnhandled(),t._settledValue},t.PromiseInspection=e}},{}],35:[function(t,e,r){"use strict";e.exports=function(e,r){function n(t,n){if(c(t)){if(t instanceof e)return t;if(o(t)){var l=new e(r);return t._then(l._fulfillUnchecked,l._rejectUncheckedCheckError,l._progressUnchecked,l,null),l}var h=a.tryCatch(i)(t);if(h===u){n&&n._pushContext();var l=e.reject(h.e);return n&&n._popContext(),l}if("function"==typeof h)return s(t,h,n)}return t}function i(t){return t.then}function o(t){return l.call(t,"_promise0")}function s(t,n,i){function o(t){l&&(l._resolveCallback(t),l=null)}function s(t){l&&(l._rejectCallback(t,p,!0),l=null)}function c(t){l&&"function"==typeof l._progress&&l._progress(t)}var l=new e(r),h=l;i&&i._pushContext(),l._captureStackTrace(),i&&i._popContext();var p=!0,f=a.tryCatch(n).call(t,o,s,c);return p=!1,l&&f===u&&(l._rejectCallback(f.e,!0,!0),l=null),h}var a=t("./util.js"),u=a.errorObj,c=a.isObject,l={}.hasOwnProperty;return n}},{"./util.js":38}],36:[function(t,e,r){"use strict";e.exports=function(e,r){function n(t){var e=this;return e instanceof Number&&(e=+e),clearTimeout(e),t}function i(t){var e=this;throw e instanceof Number&&(e=+e),clearTimeout(e),t}var o=t("./util.js"),s=e.TimeoutError,a=function(t,e){if(t.isPending()){var r;!o.isPrimitive(e)&&e instanceof Error?r=e:("string"!=typeof e&&(e="operation timed out"),r=new s(e)),o.markAsOriginatingFromRejection(r),t._attachExtraTrace(r),t._cancel(r)}},u=function(t){return c(+this).thenReturn(t)},c=e.delay=function(t,n){if(void 0===n){n=t,t=void 0;var i=new e(r);return setTimeout(function(){i._fulfill()},n),i}return n=+n,e.resolve(t)._then(u,null,null,n,void 0)};e.prototype.delay=function(t){return c(this,t)},e.prototype.timeout=function(t,e){t=+t;var r=this.then().cancellable();r._cancellationParent=this;var o=setTimeout(function(){a(r,e)},t);return r._then(n,i,void 0,o,void 0)}}},{"./util.js":38}],37:[function(t,e,r){"use strict";e.exports=function(e,r,n,i){function o(t){for(var r=t.length,n=0;r>n;++n){var i=t[n];if(i.isRejected())return e.reject(i.error());t[n]=i._settledValue}return t}function s(t){setTimeout(function(){throw t},0)}function a(t){var e=n(t);return e!==t&&"function"==typeof t._isDisposable&&"function"==typeof t._getDisposer&&t._isDisposable()&&e._setDisposable(t._getDisposer()),e}function u(t,r){function i(){if(o>=u)return c.resolve();var l=a(t[o++]);if(l instanceof e&&l._isDisposable()){try{l=n(l._getDisposer().tryDispose(r),t.promise)}catch(h){return s(h)}if(l instanceof e)return l._then(i,s,null,null,null)}i()}var o=0,u=t.length,c=e.defer();return i(),c.promise}function c(t){var e=new v;return e._settledValue=t,e._bitField=268435456,u(this,e).thenReturn(t)}function l(t){var e=new v;return e._settledValue=t,e._bitField=134217728,u(this,e).thenThrow(t)}function h(t,e,r){this._data=t,this._promise=e,this._context=r}function p(t,e,r){this.constructor$(t,e,r)}function f(t){return h.isDisposer(t)?(this.resources[this.index]._setDisposable(t),t.promise()):t}var _=t("./errors.js").TypeError,d=t("./util.js").inherits,v=e.PromiseInspection;h.prototype.data=function(){return this._data},h.prototype.promise=function(){return this._promise},h.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():null},h.prototype.tryDispose=function(t){var e=this.resource(),r=this._context;void 0!==r&&r._pushContext();var n=null!==e?this.doDispose(e,t):null;return void 0!==r&&r._popContext(),this._promise._unsetDisposable(),this._data=null,n},h.isDisposer=function(t){return null!=t&&"function"==typeof t.resource&&"function"==typeof t.tryDispose},d(p,h),p.prototype.doDispose=function(t,e){var r=this.data();return r.call(t,t,e)},e.using=function(){var t=arguments.length;if(2>t)return r("you must pass at least 2 arguments to Promise.using");var i=arguments[t-1];if("function"!=typeof i)return r("fn must be a function\n\n See http://goo.gl/916lJJ\n");var s,a=!0;2===t&&Array.isArray(arguments[0])?(s=arguments[0], -t=s.length,a=!1):(s=arguments,t--);for(var u=new Array(t),p=0;t>p;++p){var _=s[p];if(h.isDisposer(_)){var d=_;_=_.promise(),_._setDisposable(d)}else{var v=n(_);v instanceof e&&(_=v._then(f,null,null,{resources:u,index:p},void 0))}u[p]=_}var y=e.settle(u).then(o).then(function(t){y._pushContext();var e;try{e=a?i.apply(void 0,t):i.call(void 0,t)}finally{y._popContext()}return e})._then(c,l,void 0,u,void 0);return u.promise=y,y},e.prototype._setDisposable=function(t){this._bitField=262144|this._bitField,this._disposer=t},e.prototype._isDisposable=function(){return(262144&this._bitField)>0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-262145&this._bitField,this._disposer=void 0},e.prototype.disposer=function(t){if("function"==typeof t)return new p(t,this,i());throw new _}}},{"./errors.js":13,"./util.js":38}],38:[function(t,e,r){"use strict";function n(){try{var t=C;return C=null,t.apply(this,arguments)}catch(e){return F.e=e,F}}function i(t){return C=t,n}function o(t){return null==t||t===!0||t===!1||"string"==typeof t||"number"==typeof t}function s(t){return!o(t)}function a(t){return o(t)?new Error(v(t)):t}function u(t,e){var r,n=t.length,i=new Array(n+1);for(r=0;n>r;++r)i[r]=t[r];return i[r]=e,i}function c(t,e,r){if(!w.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var n=Object.getOwnPropertyDescriptor(t,e);return null!=n?null==n.get&&null==n.set?n.value:r:void 0}function l(t,e,r){if(o(t))return t;var n={value:r,configurable:!0,enumerable:!1,writable:!0};return w.defineProperty(t,e,n),t}function h(t){throw t}function p(t){try{if("function"==typeof t){var e=w.names(t.prototype),r=w.isES5&&e.length>1,n=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=x.test(t+"")&&w.names(t).length>0;if(r||n||i)return!0}return!1}catch(o){return!1}}function f(t){function e(){}e.prototype=t;for(var r=8;r--;)new e;return t}function _(t){return R.test(t)}function d(t,e,r){for(var n=new Array(t),i=0;t>i;++i)n[i]=e+i+r;return n}function v(t){try{return t+""}catch(e){return"[no string representation]"}}function y(t){try{l(t,"isOperational",!0)}catch(e){}}function g(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function m(t){return t instanceof Error&&w.propertyIsWritable(t,"stack")}function j(t){return{}.toString.call(t)}function b(t,e,r){for(var n=w.names(t),i=0;i10||t[0]>0}(),A.isNode&&A.toFastProperties(process);try{throw new Error}catch(O){A.lastLineError=O}e.exports=A},{"./es5.js":14}]},{},[4])(4)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise); \ No newline at end of file diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/any.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/any.js deleted file mode 100644 index 05a6228e..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/any.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -var SomePromiseArray = Promise._SomePromiseArray; -function any(promises) { - var ret = new SomePromiseArray(promises); - var promise = ret.promise(); - ret.setHowMany(1); - ret.setUnwrap(); - ret.init(); - return promise; -} - -Promise.any = function (promises) { - return any(promises); -}; - -Promise.prototype.any = function () { - return any(this); -}; - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/assert.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/assert.js deleted file mode 100644 index a98955c4..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/assert.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -module.exports = (function(){ -var AssertionError = (function() { - function AssertionError(a) { - this.constructor$(a); - this.message = a; - this.name = "AssertionError"; - } - AssertionError.prototype = new Error(); - AssertionError.prototype.constructor = AssertionError; - AssertionError.prototype.constructor$ = Error; - return AssertionError; -})(); - -function getParams(args) { - var params = []; - for (var i = 0; i < args.length; ++i) params.push("arg" + i); - return params; -} - -function nativeAssert(callName, args, expect) { - try { - var params = getParams(args); - var constructorArgs = params; - constructorArgs.push("return " + - callName + "("+ params.join(",") + ");"); - var fn = Function.apply(null, constructorArgs); - return fn.apply(null, args); - } catch (e) { - if (!(e instanceof SyntaxError)) { - throw e; - } else { - return expect; - } - } -} - -return function assert(boolExpr, message) { - if (boolExpr === true) return; - - if (typeof boolExpr === "string" && - boolExpr.charAt(0) === "%") { - var nativeCallName = boolExpr; - var $_len = arguments.length;var args = new Array($_len - 2); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];} - if (nativeAssert(nativeCallName, args, message) === message) return; - message = (nativeCallName + " !== " + message); - } - - var ret = new AssertionError(message); - if (Error.captureStackTrace) { - Error.captureStackTrace(ret, assert); - } - throw ret; -}; -})(); diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/async.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/async.js deleted file mode 100644 index 01044596..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/async.js +++ /dev/null @@ -1,150 +0,0 @@ -"use strict"; -var firstLineError; -try {throw new Error(); } catch (e) {firstLineError = e;} -var schedule = require("./schedule.js"); -var Queue = require("./queue.js"); -var util = require("./util.js"); - -function Async() { - this._isTickUsed = false; - this._lateQueue = new Queue(16); - this._normalQueue = new Queue(16); - this._trampolineEnabled = true; - var self = this; - this.drainQueues = function () { - self._drainQueues(); - }; - this._schedule = - schedule.isStatic ? schedule(this.drainQueues) : schedule; -} - -Async.prototype.disableTrampolineIfNecessary = function() { - if (util.hasDevTools) { - this._trampolineEnabled = false; - } -}; - -Async.prototype.enableTrampoline = function() { - if (!this._trampolineEnabled) { - this._trampolineEnabled = true; - this._schedule = function(fn) { - setTimeout(fn, 0); - }; - } -}; - -Async.prototype.haveItemsQueued = function () { - return this._normalQueue.length() > 0; -}; - -Async.prototype.throwLater = function(fn, arg) { - if (arguments.length === 1) { - arg = fn; - fn = function () { throw arg; }; - } - if (typeof setTimeout !== "undefined") { - setTimeout(function() { - fn(arg); - }, 0); - } else try { - this._schedule(function() { - fn(arg); - }); - } catch (e) { - throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/m3OTXk\u000a"); - } -}; - -function AsyncInvokeLater(fn, receiver, arg) { - this._lateQueue.push(fn, receiver, arg); - this._queueTick(); -} - -function AsyncInvoke(fn, receiver, arg) { - this._normalQueue.push(fn, receiver, arg); - this._queueTick(); -} - -function AsyncSettlePromises(promise) { - this._normalQueue._pushOne(promise); - this._queueTick(); -} - -if (!util.hasDevTools) { - Async.prototype.invokeLater = AsyncInvokeLater; - Async.prototype.invoke = AsyncInvoke; - Async.prototype.settlePromises = AsyncSettlePromises; -} else { - if (schedule.isStatic) { - schedule = function(fn) { setTimeout(fn, 0); }; - } - Async.prototype.invokeLater = function (fn, receiver, arg) { - if (this._trampolineEnabled) { - AsyncInvokeLater.call(this, fn, receiver, arg); - } else { - this._schedule(function() { - setTimeout(function() { - fn.call(receiver, arg); - }, 100); - }); - } - }; - - Async.prototype.invoke = function (fn, receiver, arg) { - if (this._trampolineEnabled) { - AsyncInvoke.call(this, fn, receiver, arg); - } else { - this._schedule(function() { - fn.call(receiver, arg); - }); - } - }; - - Async.prototype.settlePromises = function(promise) { - if (this._trampolineEnabled) { - AsyncSettlePromises.call(this, promise); - } else { - this._schedule(function() { - promise._settlePromises(); - }); - } - }; -} - -Async.prototype.invokeFirst = function (fn, receiver, arg) { - this._normalQueue.unshift(fn, receiver, arg); - this._queueTick(); -}; - -Async.prototype._drainQueue = function(queue) { - while (queue.length() > 0) { - var fn = queue.shift(); - if (typeof fn !== "function") { - fn._settlePromises(); - continue; - } - var receiver = queue.shift(); - var arg = queue.shift(); - fn.call(receiver, arg); - } -}; - -Async.prototype._drainQueues = function () { - this._drainQueue(this._normalQueue); - this._reset(); - this._drainQueue(this._lateQueue); -}; - -Async.prototype._queueTick = function () { - if (!this._isTickUsed) { - this._isTickUsed = true; - this._schedule(this.drainQueues); - } -}; - -Async.prototype._reset = function () { - this._isTickUsed = false; -}; - -module.exports = new Async(); -module.exports.firstLineError = firstLineError; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/bind.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/bind.js deleted file mode 100644 index 9d8257ae..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/bind.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise) { -var rejectThis = function(_, e) { - this._reject(e); -}; - -var targetRejected = function(e, context) { - context.promiseRejectionQueued = true; - context.bindingPromise._then(rejectThis, rejectThis, null, this, e); -}; - -var bindingResolved = function(thisArg, context) { - if (this._isPending()) { - this._resolveCallback(context.target); - } -}; - -var bindingRejected = function(e, context) { - if (!context.promiseRejectionQueued) this._reject(e); -}; - -Promise.prototype.bind = function (thisArg) { - var maybePromise = tryConvertToPromise(thisArg); - var ret = new Promise(INTERNAL); - ret._propagateFrom(this, 1); - var target = this._target(); - - ret._setBoundTo(maybePromise); - if (maybePromise instanceof Promise) { - var context = { - promiseRejectionQueued: false, - promise: ret, - target: target, - bindingPromise: maybePromise - }; - target._then(INTERNAL, targetRejected, ret._progress, ret, context); - maybePromise._then( - bindingResolved, bindingRejected, ret._progress, ret, context); - } else { - ret._resolveCallback(target); - } - return ret; -}; - -Promise.prototype._setBoundTo = function (obj) { - if (obj !== undefined) { - this._bitField = this._bitField | 131072; - this._boundTo = obj; - } else { - this._bitField = this._bitField & (~131072); - } -}; - -Promise.prototype._isBound = function () { - return (this._bitField & 131072) === 131072; -}; - -Promise.bind = function (thisArg, value) { - var maybePromise = tryConvertToPromise(thisArg); - var ret = new Promise(INTERNAL); - - ret._setBoundTo(maybePromise); - if (maybePromise instanceof Promise) { - maybePromise._then(function() { - ret._resolveCallback(value); - }, ret._reject, ret._progress, ret, null); - } else { - ret._resolveCallback(value); - } - return ret; -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/bluebird.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/bluebird.js deleted file mode 100644 index ed6226e7..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/bluebird.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -var old; -if (typeof Promise !== "undefined") old = Promise; -function noConflict() { - try { if (Promise === bluebird) Promise = old; } - catch (e) {} - return bluebird; -} -var bluebird = require("./promise.js")(); -bluebird.noConflict = noConflict; -module.exports = bluebird; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/call_get.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/call_get.js deleted file mode 100644 index 62c166d5..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/call_get.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; -var cr = Object.create; -if (cr) { - var callerCache = cr(null); - var getterCache = cr(null); - callerCache[" size"] = getterCache[" size"] = 0; -} - -module.exports = function(Promise) { -var util = require("./util.js"); -var canEvaluate = util.canEvaluate; -var isIdentifier = util.isIdentifier; - -var getMethodCaller; -var getGetter; -if (!false) { -var makeMethodCaller = function (methodName) { - return new Function("ensureMethod", " \n\ - return function(obj) { \n\ - 'use strict' \n\ - var len = this.length; \n\ - ensureMethod(obj, 'methodName'); \n\ - switch(len) { \n\ - case 1: return obj.methodName(this[0]); \n\ - case 2: return obj.methodName(this[0], this[1]); \n\ - case 3: return obj.methodName(this[0], this[1], this[2]); \n\ - case 0: return obj.methodName(); \n\ - default: \n\ - return obj.methodName.apply(obj, this); \n\ - } \n\ - }; \n\ - ".replace(/methodName/g, methodName))(ensureMethod); -}; - -var makeGetter = function (propertyName) { - return new Function("obj", " \n\ - 'use strict'; \n\ - return obj.propertyName; \n\ - ".replace("propertyName", propertyName)); -}; - -var getCompiled = function(name, compiler, cache) { - var ret = cache[name]; - if (typeof ret !== "function") { - if (!isIdentifier(name)) { - return null; - } - ret = compiler(name); - cache[name] = ret; - cache[" size"]++; - if (cache[" size"] > 512) { - var keys = Object.keys(cache); - for (var i = 0; i < 256; ++i) delete cache[keys[i]]; - cache[" size"] = keys.length - 256; - } - } - return ret; -}; - -getMethodCaller = function(name) { - return getCompiled(name, makeMethodCaller, callerCache); -}; - -getGetter = function(name) { - return getCompiled(name, makeGetter, getterCache); -}; -} - -function ensureMethod(obj, methodName) { - var fn; - if (obj != null) fn = obj[methodName]; - if (typeof fn !== "function") { - var message = "Object " + util.classString(obj) + " has no method '" + - util.toString(methodName) + "'"; - throw new Promise.TypeError(message); - } - return fn; -} - -function caller(obj) { - var methodName = this.pop(); - var fn = ensureMethod(obj, methodName); - return fn.apply(obj, this); -} -Promise.prototype.call = function (methodName) { - var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} - if (!false) { - if (canEvaluate) { - var maybeCaller = getMethodCaller(methodName); - if (maybeCaller !== null) { - return this._then( - maybeCaller, undefined, undefined, args, undefined); - } - } - } - args.push(methodName); - return this._then(caller, undefined, undefined, args, undefined); -}; - -function namedGetter(obj) { - return obj[this]; -} -function indexedGetter(obj) { - var index = +this; - if (index < 0) index = Math.max(0, index + obj.length); - return obj[index]; -} -Promise.prototype.get = function (propertyName) { - var isIndex = (typeof propertyName === "number"); - var getter; - if (!isIndex) { - if (canEvaluate) { - var maybeGetter = getGetter(propertyName); - getter = maybeGetter !== null ? maybeGetter : namedGetter; - } else { - getter = namedGetter; - } - } else { - getter = indexedGetter; - } - return this._then(getter, undefined, undefined, propertyName, undefined); -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/cancel.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/cancel.js deleted file mode 100644 index 9eb40b6f..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/cancel.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -var errors = require("./errors.js"); -var async = require("./async.js"); -var CancellationError = errors.CancellationError; - -Promise.prototype._cancel = function (reason) { - if (!this.isCancellable()) return this; - var parent; - var promiseToReject = this; - while ((parent = promiseToReject._cancellationParent) !== undefined && - parent.isCancellable()) { - promiseToReject = parent; - } - this._unsetCancellable(); - promiseToReject._target()._rejectCallback(reason, false, true); -}; - -Promise.prototype.cancel = function (reason) { - if (!this.isCancellable()) return this; - if (reason === undefined) reason = new CancellationError(); - async.invokeLater(this._cancel, this, reason); - return this; -}; - -Promise.prototype.cancellable = function () { - if (this._cancellable()) return this; - async.enableTrampoline(); - this._setCancellable(); - this._cancellationParent = undefined; - return this; -}; - -Promise.prototype.uncancellable = function () { - var ret = this.then(); - ret._unsetCancellable(); - return ret; -}; - -Promise.prototype.fork = function (didFulfill, didReject, didProgress) { - var ret = this._then(didFulfill, didReject, didProgress, - undefined, undefined); - - ret._setCancellable(); - ret._cancellationParent = undefined; - return ret; -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/captured_trace.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/captured_trace.js deleted file mode 100644 index 802acd35..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/captured_trace.js +++ /dev/null @@ -1,493 +0,0 @@ -"use strict"; -module.exports = function() { -var async = require("./async.js"); -var util = require("./util.js"); -var bluebirdFramePattern = - /[\\\/]bluebird[\\\/]js[\\\/](main|debug|zalgo|instrumented)/; -var stackFramePattern = null; -var formatStack = null; -var indentStackFrames = false; -var warn; - -function CapturedTrace(parent) { - this._parent = parent; - var length = this._length = 1 + (parent === undefined ? 0 : parent._length); - captureStackTrace(this, CapturedTrace); - if (length > 32) this.uncycle(); -} -util.inherits(CapturedTrace, Error); - -CapturedTrace.prototype.uncycle = function() { - var length = this._length; - if (length < 2) return; - var nodes = []; - var stackToIndex = {}; - - for (var i = 0, node = this; node !== undefined; ++i) { - nodes.push(node); - node = node._parent; - } - length = this._length = i; - for (var i = length - 1; i >= 0; --i) { - var stack = nodes[i].stack; - if (stackToIndex[stack] === undefined) { - stackToIndex[stack] = i; - } - } - for (var i = 0; i < length; ++i) { - var currentStack = nodes[i].stack; - var index = stackToIndex[currentStack]; - if (index !== undefined && index !== i) { - if (index > 0) { - nodes[index - 1]._parent = undefined; - nodes[index - 1]._length = 1; - } - nodes[i]._parent = undefined; - nodes[i]._length = 1; - var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; - - if (index < length - 1) { - cycleEdgeNode._parent = nodes[index + 1]; - cycleEdgeNode._parent.uncycle(); - cycleEdgeNode._length = - cycleEdgeNode._parent._length + 1; - } else { - cycleEdgeNode._parent = undefined; - cycleEdgeNode._length = 1; - } - var currentChildLength = cycleEdgeNode._length + 1; - for (var j = i - 2; j >= 0; --j) { - nodes[j]._length = currentChildLength; - currentChildLength++; - } - return; - } - } -}; - -CapturedTrace.prototype.parent = function() { - return this._parent; -}; - -CapturedTrace.prototype.hasParent = function() { - return this._parent !== undefined; -}; - -CapturedTrace.prototype.attachExtraTrace = function(error) { - if (error.__stackCleaned__) return; - this.uncycle(); - var parsed = CapturedTrace.parseStackAndMessage(error); - var message = parsed.message; - var stacks = [parsed.stack]; - - var trace = this; - while (trace !== undefined) { - stacks.push(cleanStack(trace.stack.split("\n"))); - trace = trace._parent; - } - removeCommonRoots(stacks); - removeDuplicateOrEmptyJumps(stacks); - util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); - util.notEnumerableProp(error, "__stackCleaned__", true); -}; - -function reconstructStack(message, stacks) { - for (var i = 0; i < stacks.length - 1; ++i) { - stacks[i].push("From previous event:"); - stacks[i] = stacks[i].join("\n"); - } - if (i < stacks.length) { - stacks[i] = stacks[i].join("\n"); - } - return message + "\n" + stacks.join("\n"); -} - -function removeDuplicateOrEmptyJumps(stacks) { - for (var i = 0; i < stacks.length; ++i) { - if (stacks[i].length === 0 || - ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { - stacks.splice(i, 1); - i--; - } - } -} - -function removeCommonRoots(stacks) { - var current = stacks[0]; - for (var i = 1; i < stacks.length; ++i) { - var prev = stacks[i]; - var currentLastIndex = current.length - 1; - var currentLastLine = current[currentLastIndex]; - var commonRootMeetPoint = -1; - - for (var j = prev.length - 1; j >= 0; --j) { - if (prev[j] === currentLastLine) { - commonRootMeetPoint = j; - break; - } - } - - for (var j = commonRootMeetPoint; j >= 0; --j) { - var line = prev[j]; - if (current[currentLastIndex] === line) { - current.pop(); - currentLastIndex--; - } else { - break; - } - } - current = prev; - } -} - -function cleanStack(stack) { - var ret = []; - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - var isTraceLine = stackFramePattern.test(line) || - " (No stack trace)" === line; - var isInternalFrame = isTraceLine && shouldIgnore(line); - if (isTraceLine && !isInternalFrame) { - if (indentStackFrames && line.charAt(0) !== " ") { - line = " " + line; - } - ret.push(line); - } - } - return ret; -} - -function stackFramesAsArray(error) { - var stack = error.stack.replace(/\s+$/g, "").split("\n"); - for (var i = 0; i < stack.length; ++i) { - var line = stack[i]; - if (" (No stack trace)" === line || stackFramePattern.test(line)) { - break; - } - } - if (i > 0) { - stack = stack.slice(i); - } - return stack; -} - -CapturedTrace.parseStackAndMessage = function(error) { - var stack = error.stack; - var message = error.toString(); - stack = typeof stack === "string" && stack.length > 0 - ? stackFramesAsArray(error) : [" (No stack trace)"]; - return { - message: message, - stack: cleanStack(stack) - }; -}; - -CapturedTrace.formatAndLogError = function(error, title) { - if (typeof console !== "undefined") { - var message; - if (typeof error === "object" || typeof error === "function") { - var stack = error.stack; - message = title + formatStack(stack, error); - } else { - message = title + String(error); - } - if (typeof warn === "function") { - warn(message); - } else if (typeof console.log === "function" || - typeof console.log === "object") { - console.log(message); - } - } -}; - -CapturedTrace.unhandledRejection = function (reason) { - CapturedTrace.formatAndLogError(reason, "^--- With additional stack trace: "); -}; - -CapturedTrace.isSupported = function () { - return typeof captureStackTrace === "function"; -}; - -CapturedTrace.fireRejectionEvent = -function(name, localHandler, reason, promise) { - var localEventFired = false; - try { - if (typeof localHandler === "function") { - localEventFired = true; - if (name === "rejectionHandled") { - localHandler(promise); - } else { - localHandler(reason, promise); - } - } - } catch (e) { - async.throwLater(e); - } - - var globalEventFired = false; - try { - globalEventFired = fireGlobalEvent(name, reason, promise); - } catch (e) { - globalEventFired = true; - async.throwLater(e); - } - - var domEventFired = false; - if (fireDomEvent) { - try { - domEventFired = fireDomEvent(name.toLowerCase(), { - reason: reason, - promise: promise - }); - } catch (e) { - domEventFired = true; - async.throwLater(e); - } - } - - if (!globalEventFired && !localEventFired && !domEventFired && - name === "unhandledRejection") { - CapturedTrace.formatAndLogError(reason, "Unhandled rejection "); - } -}; - -function formatNonError(obj) { - var str; - if (typeof obj === "function") { - str = "[function " + - (obj.name || "anonymous") + - "]"; - } else { - str = obj.toString(); - var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; - if (ruselessToString.test(str)) { - try { - var newStr = JSON.stringify(obj); - str = newStr; - } - catch(e) { - - } - } - if (str.length === 0) { - str = "(empty array)"; - } - } - return ("(<" + snip(str) + ">, no stack trace)"); -} - -function snip(str) { - var maxChars = 41; - if (str.length < maxChars) { - return str; - } - return str.substr(0, maxChars - 3) + "..."; -} - -var shouldIgnore = function() { return false; }; -var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; -function parseLineInfo(line) { - var matches = line.match(parseLineInfoRegex); - if (matches) { - return { - fileName: matches[1], - line: parseInt(matches[2], 10) - }; - } -} -CapturedTrace.setBounds = function(firstLineError, lastLineError) { - if (!CapturedTrace.isSupported()) return; - var firstStackLines = firstLineError.stack.split("\n"); - var lastStackLines = lastLineError.stack.split("\n"); - var firstIndex = -1; - var lastIndex = -1; - var firstFileName; - var lastFileName; - for (var i = 0; i < firstStackLines.length; ++i) { - var result = parseLineInfo(firstStackLines[i]); - if (result) { - firstFileName = result.fileName; - firstIndex = result.line; - break; - } - } - for (var i = 0; i < lastStackLines.length; ++i) { - var result = parseLineInfo(lastStackLines[i]); - if (result) { - lastFileName = result.fileName; - lastIndex = result.line; - break; - } - } - if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || - firstFileName !== lastFileName || firstIndex >= lastIndex) { - return; - } - - shouldIgnore = function(line) { - if (bluebirdFramePattern.test(line)) return true; - var info = parseLineInfo(line); - if (info) { - if (info.fileName === firstFileName && - (firstIndex <= info.line && info.line <= lastIndex)) { - return true; - } - } - return false; - }; -}; - -var captureStackTrace = (function stackDetection() { - var v8stackFramePattern = /^\s*at\s*/; - var v8stackFormatter = function(stack, error) { - if (typeof stack === "string") return stack; - - if (error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - if (typeof Error.stackTraceLimit === "number" && - typeof Error.captureStackTrace === "function") { - Error.stackTraceLimit = Error.stackTraceLimit + 6; - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - var captureStackTrace = Error.captureStackTrace; - - shouldIgnore = function(line) { - return bluebirdFramePattern.test(line); - }; - return function(receiver, ignoreUntil) { - Error.stackTraceLimit = Error.stackTraceLimit + 6; - captureStackTrace(receiver, ignoreUntil); - Error.stackTraceLimit = Error.stackTraceLimit - 6; - }; - } - var err = new Error(); - - if (typeof err.stack === "string" && - err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { - stackFramePattern = /@/; - formatStack = v8stackFormatter; - indentStackFrames = true; - return function captureStackTrace(o) { - o.stack = new Error().stack; - }; - } - - var hasStackAfterThrow; - try { throw new Error(); } - catch(e) { - hasStackAfterThrow = ("stack" in e); - } - if (!("stack" in err) && hasStackAfterThrow && - typeof Error.stackTraceLimit === "number") { - stackFramePattern = v8stackFramePattern; - formatStack = v8stackFormatter; - return function captureStackTrace(o) { - Error.stackTraceLimit = Error.stackTraceLimit + 6; - try { throw new Error(); } - catch(e) { o.stack = e.stack; } - Error.stackTraceLimit = Error.stackTraceLimit - 6; - }; - } - - formatStack = function(stack, error) { - if (typeof stack === "string") return stack; - - if ((typeof error === "object" || - typeof error === "function") && - error.name !== undefined && - error.message !== undefined) { - return error.toString(); - } - return formatNonError(error); - }; - - return null; - -})([]); - -var fireDomEvent; -var fireGlobalEvent = (function() { - if (util.isNode) { - return function(name, reason, promise) { - if (name === "rejectionHandled") { - return process.emit(name, promise); - } else { - return process.emit(name, reason, promise); - } - }; - } else { - var customEventWorks = false; - var anyEventWorks = true; - try { - var ev = new self.CustomEvent("test"); - customEventWorks = ev instanceof CustomEvent; - } catch (e) {} - if (!customEventWorks) { - try { - var event = document.createEvent("CustomEvent"); - event.initCustomEvent("testingtheevent", false, true, {}); - self.dispatchEvent(event); - } catch (e) { - anyEventWorks = false; - } - } - if (anyEventWorks) { - fireDomEvent = function(type, detail) { - var event; - if (customEventWorks) { - event = new self.CustomEvent(type, { - detail: detail, - bubbles: false, - cancelable: true - }); - } else if (self.dispatchEvent) { - event = document.createEvent("CustomEvent"); - event.initCustomEvent(type, false, true, detail); - } - - return event ? !self.dispatchEvent(event) : false; - }; - } - - var toWindowMethodNameMap = {}; - toWindowMethodNameMap["unhandledRejection"] = ("on" + - "unhandledRejection").toLowerCase(); - toWindowMethodNameMap["rejectionHandled"] = ("on" + - "rejectionHandled").toLowerCase(); - - return function(name, reason, promise) { - var methodName = toWindowMethodNameMap[name]; - var method = self[methodName]; - if (!method) return false; - if (name === "rejectionHandled") { - method.call(self, promise); - } else { - method.call(self, reason, promise); - } - return true; - }; - } -})(); - -if (typeof console !== "undefined" && typeof console.warn !== "undefined") { - warn = function (message) { - console.warn(message); - }; - if (util.isNode && process.stderr.isTTY) { - warn = function(message) { - process.stderr.write("\u001b[31m" + message + "\u001b[39m\n"); - }; - } else if (!util.isNode && typeof (new Error().stack) === "string") { - warn = function(message) { - console.warn("%c" + message, "color: red"); - }; - } -} - -return CapturedTrace; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/catch_filter.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/catch_filter.js deleted file mode 100644 index df127333..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/catch_filter.js +++ /dev/null @@ -1,66 +0,0 @@ -"use strict"; -module.exports = function(NEXT_FILTER) { -var util = require("./util.js"); -var errors = require("./errors.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var keys = require("./es5.js").keys; -var TypeError = errors.TypeError; - -function CatchFilter(instances, callback, promise) { - this._instances = instances; - this._callback = callback; - this._promise = promise; -} - -function safePredicate(predicate, e) { - var safeObject = {}; - var retfilter = tryCatch(predicate).call(safeObject, e); - - if (retfilter === errorObj) return retfilter; - - var safeKeys = keys(safeObject); - if (safeKeys.length) { - errorObj.e = new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a"); - return errorObj; - } - return retfilter; -} - -CatchFilter.prototype.doFilter = function (e) { - var cb = this._callback; - var promise = this._promise; - var boundTo = promise._boundValue(); - for (var i = 0, len = this._instances.length; i < len; ++i) { - var item = this._instances[i]; - var itemIsErrorType = item === Error || - (item != null && item.prototype instanceof Error); - - if (itemIsErrorType && e instanceof item) { - var ret = tryCatch(cb).call(boundTo, e); - if (ret === errorObj) { - NEXT_FILTER.e = ret.e; - return NEXT_FILTER; - } - return ret; - } else if (typeof item === "function" && !itemIsErrorType) { - var shouldHandle = safePredicate(item, e); - if (shouldHandle === errorObj) { - e = errorObj.e; - break; - } else if (shouldHandle) { - var ret = tryCatch(cb).call(boundTo, e); - if (ret === errorObj) { - NEXT_FILTER.e = ret.e; - return NEXT_FILTER; - } - return ret; - } - } - } - NEXT_FILTER.e = e; - return NEXT_FILTER; -}; - -return CatchFilter; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/context.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/context.js deleted file mode 100644 index ccd7702b..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/context.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -module.exports = function(Promise, CapturedTrace, isDebugging) { -var contextStack = []; -function Context() { - this._trace = new CapturedTrace(peekContext()); -} -Context.prototype._pushContext = function () { - if (!isDebugging()) return; - if (this._trace !== undefined) { - contextStack.push(this._trace); - } -}; - -Context.prototype._popContext = function () { - if (!isDebugging()) return; - if (this._trace !== undefined) { - contextStack.pop(); - } -}; - -function createContext() { - if (isDebugging()) return new Context(); -} - -function peekContext() { - var lastIndex = contextStack.length - 1; - if (lastIndex >= 0) { - return contextStack[lastIndex]; - } - return undefined; -} - -Promise.prototype._peekContext = peekContext; -Promise.prototype._pushContext = Context.prototype._pushContext; -Promise.prototype._popContext = Context.prototype._popContext; - -return createContext; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/debuggability.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/debuggability.js deleted file mode 100644 index 106baf65..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/debuggability.js +++ /dev/null @@ -1,162 +0,0 @@ -"use strict"; -module.exports = function(Promise, CapturedTrace) { -var getDomain = Promise._getDomain; -var async = require("./async.js"); -var Warning = require("./errors.js").Warning; -var util = require("./util.js"); -var canAttachTrace = util.canAttachTrace; -var unhandledRejectionHandled; -var possiblyUnhandledRejection; -var debugging = false || (util.isNode && - (!!process.env["BLUEBIRD_DEBUG"] || - process.env["NODE_ENV"] === "development")); - -if (util.isNode && process.env["BLUEBIRD_DEBUG"] == 0) debugging = false; - -if (debugging) { - async.disableTrampolineIfNecessary(); -} - -Promise.prototype._ignoreRejections = function() { - this._unsetRejectionIsUnhandled(); - this._bitField = this._bitField | 16777216; -}; - -Promise.prototype._ensurePossibleRejectionHandled = function () { - if ((this._bitField & 16777216) !== 0) return; - this._setRejectionIsUnhandled(); - async.invokeLater(this._notifyUnhandledRejection, this, undefined); -}; - -Promise.prototype._notifyUnhandledRejectionIsHandled = function () { - CapturedTrace.fireRejectionEvent("rejectionHandled", - unhandledRejectionHandled, undefined, this); -}; - -Promise.prototype._notifyUnhandledRejection = function () { - if (this._isRejectionUnhandled()) { - var reason = this._getCarriedStackTrace() || this._settledValue; - this._setUnhandledRejectionIsNotified(); - CapturedTrace.fireRejectionEvent("unhandledRejection", - possiblyUnhandledRejection, reason, this); - } -}; - -Promise.prototype._setUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField | 524288; -}; - -Promise.prototype._unsetUnhandledRejectionIsNotified = function () { - this._bitField = this._bitField & (~524288); -}; - -Promise.prototype._isUnhandledRejectionNotified = function () { - return (this._bitField & 524288) > 0; -}; - -Promise.prototype._setRejectionIsUnhandled = function () { - this._bitField = this._bitField | 2097152; -}; - -Promise.prototype._unsetRejectionIsUnhandled = function () { - this._bitField = this._bitField & (~2097152); - if (this._isUnhandledRejectionNotified()) { - this._unsetUnhandledRejectionIsNotified(); - this._notifyUnhandledRejectionIsHandled(); - } -}; - -Promise.prototype._isRejectionUnhandled = function () { - return (this._bitField & 2097152) > 0; -}; - -Promise.prototype._setCarriedStackTrace = function (capturedTrace) { - this._bitField = this._bitField | 1048576; - this._fulfillmentHandler0 = capturedTrace; -}; - -Promise.prototype._isCarryingStackTrace = function () { - return (this._bitField & 1048576) > 0; -}; - -Promise.prototype._getCarriedStackTrace = function () { - return this._isCarryingStackTrace() - ? this._fulfillmentHandler0 - : undefined; -}; - -Promise.prototype._captureStackTrace = function () { - if (debugging) { - this._trace = new CapturedTrace(this._peekContext()); - } - return this; -}; - -Promise.prototype._attachExtraTrace = function (error, ignoreSelf) { - if (debugging && canAttachTrace(error)) { - var trace = this._trace; - if (trace !== undefined) { - if (ignoreSelf) trace = trace._parent; - } - if (trace !== undefined) { - trace.attachExtraTrace(error); - } else if (!error.__stackCleaned__) { - var parsed = CapturedTrace.parseStackAndMessage(error); - util.notEnumerableProp(error, "stack", - parsed.message + "\n" + parsed.stack.join("\n")); - util.notEnumerableProp(error, "__stackCleaned__", true); - } - } -}; - -Promise.prototype._warn = function(message) { - var warning = new Warning(message); - var ctx = this._peekContext(); - if (ctx) { - ctx.attachExtraTrace(warning); - } else { - var parsed = CapturedTrace.parseStackAndMessage(warning); - warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); - } - CapturedTrace.formatAndLogError(warning, ""); -}; - -Promise.onPossiblyUnhandledRejection = function (fn) { - var domain = getDomain(); - possiblyUnhandledRejection = - typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) - : undefined; -}; - -Promise.onUnhandledRejectionHandled = function (fn) { - var domain = getDomain(); - unhandledRejectionHandled = - typeof fn === "function" ? (domain === null ? fn : domain.bind(fn)) - : undefined; -}; - -Promise.longStackTraces = function () { - if (async.haveItemsQueued() && - debugging === false - ) { - throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/DT1qyG\u000a"); - } - debugging = CapturedTrace.isSupported(); - if (debugging) { - async.disableTrampolineIfNecessary(); - } -}; - -Promise.hasLongStackTraces = function () { - return debugging && CapturedTrace.isSupported(); -}; - -if (!CapturedTrace.isSupported()) { - Promise.longStackTraces = function(){}; - debugging = false; -} - -return function() { - return debugging; -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/direct_resolve.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/direct_resolve.js deleted file mode 100644 index 054685a1..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/direct_resolve.js +++ /dev/null @@ -1,63 +0,0 @@ -"use strict"; -var util = require("./util.js"); -var isPrimitive = util.isPrimitive; - -module.exports = function(Promise) { -var returner = function () { - return this; -}; -var thrower = function () { - throw this; -}; -var returnUndefined = function() {}; -var throwUndefined = function() { - throw undefined; -}; - -var wrapper = function (value, action) { - if (action === 1) { - return function () { - throw value; - }; - } else if (action === 2) { - return function () { - return value; - }; - } -}; - - -Promise.prototype["return"] = -Promise.prototype.thenReturn = function (value) { - if (value === undefined) return this.then(returnUndefined); - - if (isPrimitive(value)) { - return this._then( - wrapper(value, 2), - undefined, - undefined, - undefined, - undefined - ); - } else if (value instanceof Promise) { - value._ignoreRejections(); - } - return this._then(returner, undefined, undefined, value, undefined); -}; - -Promise.prototype["throw"] = -Promise.prototype.thenThrow = function (reason) { - if (reason === undefined) return this.then(throwUndefined); - - if (isPrimitive(reason)) { - return this._then( - wrapper(reason, 1), - undefined, - undefined, - undefined, - undefined - ); - } - return this._then(thrower, undefined, undefined, reason, undefined); -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/each.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/each.js deleted file mode 100644 index a37e22c0..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/each.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseReduce = Promise.reduce; - -Promise.prototype.each = function (fn) { - return PromiseReduce(this, fn, null, INTERNAL); -}; - -Promise.each = function (promises, fn) { - return PromiseReduce(promises, fn, null, INTERNAL); -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/errors.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/errors.js deleted file mode 100644 index c334bb1c..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/errors.js +++ /dev/null @@ -1,111 +0,0 @@ -"use strict"; -var es5 = require("./es5.js"); -var Objectfreeze = es5.freeze; -var util = require("./util.js"); -var inherits = util.inherits; -var notEnumerableProp = util.notEnumerableProp; - -function subError(nameProperty, defaultMessage) { - function SubError(message) { - if (!(this instanceof SubError)) return new SubError(message); - notEnumerableProp(this, "message", - typeof message === "string" ? message : defaultMessage); - notEnumerableProp(this, "name", nameProperty); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } else { - Error.call(this); - } - } - inherits(SubError, Error); - return SubError; -} - -var _TypeError, _RangeError; -var Warning = subError("Warning", "warning"); -var CancellationError = subError("CancellationError", "cancellation error"); -var TimeoutError = subError("TimeoutError", "timeout error"); -var AggregateError = subError("AggregateError", "aggregate error"); -try { - _TypeError = TypeError; - _RangeError = RangeError; -} catch(e) { - _TypeError = subError("TypeError", "type error"); - _RangeError = subError("RangeError", "range error"); -} - -var methods = ("join pop push shift unshift slice filter forEach some " + - "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); - -for (var i = 0; i < methods.length; ++i) { - if (typeof Array.prototype[methods[i]] === "function") { - AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; - } -} - -es5.defineProperty(AggregateError.prototype, "length", { - value: 0, - configurable: false, - writable: true, - enumerable: true -}); -AggregateError.prototype["isOperational"] = true; -var level = 0; -AggregateError.prototype.toString = function() { - var indent = Array(level * 4 + 1).join(" "); - var ret = "\n" + indent + "AggregateError of:" + "\n"; - level++; - indent = Array(level * 4 + 1).join(" "); - for (var i = 0; i < this.length; ++i) { - var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; - var lines = str.split("\n"); - for (var j = 0; j < lines.length; ++j) { - lines[j] = indent + lines[j]; - } - str = lines.join("\n"); - ret += str + "\n"; - } - level--; - return ret; -}; - -function OperationalError(message) { - if (!(this instanceof OperationalError)) - return new OperationalError(message); - notEnumerableProp(this, "name", "OperationalError"); - notEnumerableProp(this, "message", message); - this.cause = message; - this["isOperational"] = true; - - if (message instanceof Error) { - notEnumerableProp(this, "message", message.message); - notEnumerableProp(this, "stack", message.stack); - } else if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } - -} -inherits(OperationalError, Error); - -var errorTypes = Error["__BluebirdErrorTypes__"]; -if (!errorTypes) { - errorTypes = Objectfreeze({ - CancellationError: CancellationError, - TimeoutError: TimeoutError, - OperationalError: OperationalError, - RejectionError: OperationalError, - AggregateError: AggregateError - }); - notEnumerableProp(Error, "__BluebirdErrorTypes__", errorTypes); -} - -module.exports = { - Error: Error, - TypeError: _TypeError, - RangeError: _RangeError, - CancellationError: errorTypes.CancellationError, - OperationalError: errorTypes.OperationalError, - TimeoutError: errorTypes.TimeoutError, - AggregateError: errorTypes.AggregateError, - Warning: Warning -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/es5.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/es5.js deleted file mode 100644 index ea41d5a5..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/es5.js +++ /dev/null @@ -1,80 +0,0 @@ -var isES5 = (function(){ - "use strict"; - return this === undefined; -})(); - -if (isES5) { - module.exports = { - freeze: Object.freeze, - defineProperty: Object.defineProperty, - getDescriptor: Object.getOwnPropertyDescriptor, - keys: Object.keys, - names: Object.getOwnPropertyNames, - getPrototypeOf: Object.getPrototypeOf, - isArray: Array.isArray, - isES5: isES5, - propertyIsWritable: function(obj, prop) { - var descriptor = Object.getOwnPropertyDescriptor(obj, prop); - return !!(!descriptor || descriptor.writable || descriptor.set); - } - }; -} else { - var has = {}.hasOwnProperty; - var str = {}.toString; - var proto = {}.constructor.prototype; - - var ObjectKeys = function (o) { - var ret = []; - for (var key in o) { - if (has.call(o, key)) { - ret.push(key); - } - } - return ret; - }; - - var ObjectGetDescriptor = function(o, key) { - return {value: o[key]}; - }; - - var ObjectDefineProperty = function (o, key, desc) { - o[key] = desc.value; - return o; - }; - - var ObjectFreeze = function (obj) { - return obj; - }; - - var ObjectGetPrototypeOf = function (obj) { - try { - return Object(obj).constructor.prototype; - } - catch (e) { - return proto; - } - }; - - var ArrayIsArray = function (obj) { - try { - return str.call(obj) === "[object Array]"; - } - catch(e) { - return false; - } - }; - - module.exports = { - isArray: ArrayIsArray, - keys: ObjectKeys, - names: ObjectKeys, - defineProperty: ObjectDefineProperty, - getDescriptor: ObjectGetDescriptor, - freeze: ObjectFreeze, - getPrototypeOf: ObjectGetPrototypeOf, - isES5: isES5, - propertyIsWritable: function() { - return true; - } - }; -} diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/filter.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/filter.js deleted file mode 100644 index ed57bf01..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/filter.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var PromiseMap = Promise.map; - -Promise.prototype.filter = function (fn, options) { - return PromiseMap(this, fn, options, INTERNAL); -}; - -Promise.filter = function (promises, fn, options) { - return PromiseMap(promises, fn, options, INTERNAL); -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/finally.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/finally.js deleted file mode 100644 index c9342bcf..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/finally.js +++ /dev/null @@ -1,98 +0,0 @@ -"use strict"; -module.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) { -var util = require("./util.js"); -var isPrimitive = util.isPrimitive; -var thrower = util.thrower; - -function returnThis() { - return this; -} -function throwThis() { - throw this; -} -function return$(r) { - return function() { - return r; - }; -} -function throw$(r) { - return function() { - throw r; - }; -} -function promisedFinally(ret, reasonOrValue, isFulfilled) { - var then; - if (isPrimitive(reasonOrValue)) { - then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue); - } else { - then = isFulfilled ? returnThis : throwThis; - } - return ret._then(then, thrower, undefined, reasonOrValue, undefined); -} - -function finallyHandler(reasonOrValue) { - var promise = this.promise; - var handler = this.handler; - - var ret = promise._isBound() - ? handler.call(promise._boundValue()) - : handler(); - - if (ret !== undefined) { - var maybePromise = tryConvertToPromise(ret, promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - return promisedFinally(maybePromise, reasonOrValue, - promise.isFulfilled()); - } - } - - if (promise.isRejected()) { - NEXT_FILTER.e = reasonOrValue; - return NEXT_FILTER; - } else { - return reasonOrValue; - } -} - -function tapHandler(value) { - var promise = this.promise; - var handler = this.handler; - - var ret = promise._isBound() - ? handler.call(promise._boundValue(), value) - : handler(value); - - if (ret !== undefined) { - var maybePromise = tryConvertToPromise(ret, promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - return promisedFinally(maybePromise, value, true); - } - } - return value; -} - -Promise.prototype._passThroughHandler = function (handler, isFinally) { - if (typeof handler !== "function") return this.then(); - - var promiseAndHandler = { - promise: this, - handler: handler - }; - - return this._then( - isFinally ? finallyHandler : tapHandler, - isFinally ? finallyHandler : undefined, undefined, - promiseAndHandler, undefined); -}; - -Promise.prototype.lastly = -Promise.prototype["finally"] = function (handler) { - return this._passThroughHandler(handler, true); -}; - -Promise.prototype.tap = function (handler) { - return this._passThroughHandler(handler, false); -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/generators.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/generators.js deleted file mode 100644 index 4c0568d2..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/generators.js +++ /dev/null @@ -1,136 +0,0 @@ -"use strict"; -module.exports = function(Promise, - apiRejection, - INTERNAL, - tryConvertToPromise) { -var errors = require("./errors.js"); -var TypeError = errors.TypeError; -var util = require("./util.js"); -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; -var yieldHandlers = []; - -function promiseFromYieldHandler(value, yieldHandlers, traceParent) { - for (var i = 0; i < yieldHandlers.length; ++i) { - traceParent._pushContext(); - var result = tryCatch(yieldHandlers[i])(value); - traceParent._popContext(); - if (result === errorObj) { - traceParent._pushContext(); - var ret = Promise.reject(errorObj.e); - traceParent._popContext(); - return ret; - } - var maybePromise = tryConvertToPromise(result, traceParent); - if (maybePromise instanceof Promise) return maybePromise; - } - return null; -} - -function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { - var promise = this._promise = new Promise(INTERNAL); - promise._captureStackTrace(); - this._stack = stack; - this._generatorFunction = generatorFunction; - this._receiver = receiver; - this._generator = undefined; - this._yieldHandlers = typeof yieldHandler === "function" - ? [yieldHandler].concat(yieldHandlers) - : yieldHandlers; -} - -PromiseSpawn.prototype.promise = function () { - return this._promise; -}; - -PromiseSpawn.prototype._run = function () { - this._generator = this._generatorFunction.call(this._receiver); - this._receiver = - this._generatorFunction = undefined; - this._next(undefined); -}; - -PromiseSpawn.prototype._continue = function (result) { - if (result === errorObj) { - return this._promise._rejectCallback(result.e, false, true); - } - - var value = result.value; - if (result.done === true) { - this._promise._resolveCallback(value); - } else { - var maybePromise = tryConvertToPromise(value, this._promise); - if (!(maybePromise instanceof Promise)) { - maybePromise = - promiseFromYieldHandler(maybePromise, - this._yieldHandlers, - this._promise); - if (maybePromise === null) { - this._throw( - new TypeError( - "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/4Y4pDk\u000a\u000a".replace("%s", value) + - "From coroutine:\u000a" + - this._stack.split("\n").slice(1, -7).join("\n") - ) - ); - return; - } - } - maybePromise._then( - this._next, - this._throw, - undefined, - this, - null - ); - } -}; - -PromiseSpawn.prototype._throw = function (reason) { - this._promise._attachExtraTrace(reason); - this._promise._pushContext(); - var result = tryCatch(this._generator["throw"]) - .call(this._generator, reason); - this._promise._popContext(); - this._continue(result); -}; - -PromiseSpawn.prototype._next = function (value) { - this._promise._pushContext(); - var result = tryCatch(this._generator.next).call(this._generator, value); - this._promise._popContext(); - this._continue(result); -}; - -Promise.coroutine = function (generatorFunction, options) { - if (typeof generatorFunction !== "function") { - throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a"); - } - var yieldHandler = Object(options).yieldHandler; - var PromiseSpawn$ = PromiseSpawn; - var stack = new Error().stack; - return function () { - var generator = generatorFunction.apply(this, arguments); - var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, - stack); - spawn._generator = generator; - spawn._next(undefined); - return spawn.promise(); - }; -}; - -Promise.coroutine.addYieldHandler = function(fn) { - if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - yieldHandlers.push(fn); -}; - -Promise.spawn = function (generatorFunction) { - if (typeof generatorFunction !== "function") { - return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a"); - } - var spawn = new PromiseSpawn(generatorFunction, this); - var ret = spawn.promise(); - spawn._run(Promise.spawn); - return ret; -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/join.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/join.js deleted file mode 100644 index cf33eb1d..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/join.js +++ /dev/null @@ -1,107 +0,0 @@ -"use strict"; -module.exports = -function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) { -var util = require("./util.js"); -var canEvaluate = util.canEvaluate; -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var reject; - -if (!false) { -if (canEvaluate) { - var thenCallback = function(i) { - return new Function("value", "holder", " \n\ - 'use strict'; \n\ - holder.pIndex = value; \n\ - holder.checkFulfillment(this); \n\ - ".replace(/Index/g, i)); - }; - - var caller = function(count) { - var values = []; - for (var i = 1; i <= count; ++i) values.push("holder.p" + i); - return new Function("holder", " \n\ - 'use strict'; \n\ - var callback = holder.fn; \n\ - return callback(values); \n\ - ".replace(/values/g, values.join(", "))); - }; - var thenCallbacks = []; - var callers = [undefined]; - for (var i = 1; i <= 5; ++i) { - thenCallbacks.push(thenCallback(i)); - callers.push(caller(i)); - } - - var Holder = function(total, fn) { - this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null; - this.fn = fn; - this.total = total; - this.now = 0; - }; - - Holder.prototype.callers = callers; - Holder.prototype.checkFulfillment = function(promise) { - var now = this.now; - now++; - var total = this.total; - if (now >= total) { - var handler = this.callers[total]; - promise._pushContext(); - var ret = tryCatch(handler)(this); - promise._popContext(); - if (ret === errorObj) { - promise._rejectCallback(ret.e, false, true); - } else { - promise._resolveCallback(ret); - } - } else { - this.now = now; - } - }; - - var reject = function (reason) { - this._reject(reason); - }; -} -} - -Promise.join = function () { - var last = arguments.length - 1; - var fn; - if (last > 0 && typeof arguments[last] === "function") { - fn = arguments[last]; - if (!false) { - if (last < 6 && canEvaluate) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - var holder = new Holder(last, fn); - var callbacks = thenCallbacks; - for (var i = 0; i < last; ++i) { - var maybePromise = tryConvertToPromise(arguments[i], ret); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - if (maybePromise._isPending()) { - maybePromise._then(callbacks[i], reject, - undefined, ret, holder); - } else if (maybePromise._isFulfilled()) { - callbacks[i].call(ret, - maybePromise._value(), holder); - } else { - ret._reject(maybePromise._reason()); - } - } else { - callbacks[i].call(ret, maybePromise, holder); - } - } - return ret; - } - } - } - var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];} - if (fn) args.pop(); - var ret = new PromiseArray(args).promise(); - return fn !== undefined ? ret.spread(fn) : ret; -}; - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/map.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/map.js deleted file mode 100644 index 2f40efd2..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/map.js +++ /dev/null @@ -1,133 +0,0 @@ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL) { -var getDomain = Promise._getDomain; -var async = require("./async.js"); -var util = require("./util.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -var PENDING = {}; -var EMPTY_ARRAY = []; - -function MappingPromiseArray(promises, fn, limit, _filter) { - this.constructor$(promises); - this._promise._captureStackTrace(); - var domain = getDomain(); - this._callback = domain === null ? fn : domain.bind(fn); - this._preservedValues = _filter === INTERNAL - ? new Array(this.length()) - : null; - this._limit = limit; - this._inFlight = 0; - this._queue = limit >= 1 ? [] : EMPTY_ARRAY; - async.invoke(init, this, undefined); -} -util.inherits(MappingPromiseArray, PromiseArray); -function init() {this._init$(undefined, -2);} - -MappingPromiseArray.prototype._init = function () {}; - -MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { - var values = this._values; - var length = this.length(); - var preservedValues = this._preservedValues; - var limit = this._limit; - if (values[index] === PENDING) { - values[index] = value; - if (limit >= 1) { - this._inFlight--; - this._drainQueue(); - if (this._isResolved()) return; - } - } else { - if (limit >= 1 && this._inFlight >= limit) { - values[index] = value; - this._queue.push(index); - return; - } - if (preservedValues !== null) preservedValues[index] = value; - - var callback = this._callback; - var receiver = this._promise._boundValue(); - this._promise._pushContext(); - var ret = tryCatch(callback).call(receiver, value, index, length); - this._promise._popContext(); - if (ret === errorObj) return this._reject(ret.e); - - var maybePromise = tryConvertToPromise(ret, this._promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - if (maybePromise._isPending()) { - if (limit >= 1) this._inFlight++; - values[index] = PENDING; - return maybePromise._proxyPromiseArray(this, index); - } else if (maybePromise._isFulfilled()) { - ret = maybePromise._value(); - } else { - return this._reject(maybePromise._reason()); - } - } - values[index] = ret; - } - var totalResolved = ++this._totalResolved; - if (totalResolved >= length) { - if (preservedValues !== null) { - this._filter(values, preservedValues); - } else { - this._resolve(values); - } - - } -}; - -MappingPromiseArray.prototype._drainQueue = function () { - var queue = this._queue; - var limit = this._limit; - var values = this._values; - while (queue.length > 0 && this._inFlight < limit) { - if (this._isResolved()) return; - var index = queue.pop(); - this._promiseFulfilled(values[index], index); - } -}; - -MappingPromiseArray.prototype._filter = function (booleans, values) { - var len = values.length; - var ret = new Array(len); - var j = 0; - for (var i = 0; i < len; ++i) { - if (booleans[i]) ret[j++] = values[i]; - } - ret.length = j; - this._resolve(ret); -}; - -MappingPromiseArray.prototype.preservedValues = function () { - return this._preservedValues; -}; - -function map(promises, fn, options, _filter) { - var limit = typeof options === "object" && options !== null - ? options.concurrency - : 0; - limit = typeof limit === "number" && - isFinite(limit) && limit >= 1 ? limit : 0; - return new MappingPromiseArray(promises, fn, limit, _filter); -} - -Promise.prototype.map = function (fn, options) { - if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - - return map(this, fn, options, null).promise(); -}; - -Promise.map = function (promises, fn, options, _filter) { - if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - return map(promises, fn, options, _filter).promise(); -}; - - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/method.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/method.js deleted file mode 100644 index 3d3eeb17..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/method.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -module.exports = -function(Promise, INTERNAL, tryConvertToPromise, apiRejection) { -var util = require("./util.js"); -var tryCatch = util.tryCatch; - -Promise.method = function (fn) { - if (typeof fn !== "function") { - throw new Promise.TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - } - return function () { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value = tryCatch(fn).apply(this, arguments); - ret._popContext(); - ret._resolveFromSyncValue(value); - return ret; - }; -}; - -Promise.attempt = Promise["try"] = function (fn, args, ctx) { - if (typeof fn !== "function") { - return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - } - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._pushContext(); - var value = util.isArray(args) - ? tryCatch(fn).apply(ctx, args) - : tryCatch(fn).call(ctx, args); - ret._popContext(); - ret._resolveFromSyncValue(value); - return ret; -}; - -Promise.prototype._resolveFromSyncValue = function (value) { - if (value === util.errorObj) { - this._rejectCallback(value.e, false, true); - } else { - this._resolveCallback(value, true); - } -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/nodeify.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/nodeify.js deleted file mode 100644 index 257565db..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/nodeify.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -var util = require("./util.js"); -var async = require("./async.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -function spreadAdapter(val, nodeback) { - var promise = this; - if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); - var ret = - tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -function successAdapter(val, nodeback) { - var promise = this; - var receiver = promise._boundValue(); - var ret = val === undefined - ? tryCatch(nodeback).call(receiver, null) - : tryCatch(nodeback).call(receiver, null, val); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} -function errorAdapter(reason, nodeback) { - var promise = this; - if (!reason) { - var target = promise._target(); - var newReason = target._getCarriedStackTrace(); - newReason.cause = reason; - reason = newReason; - } - var ret = tryCatch(nodeback).call(promise._boundValue(), reason); - if (ret === errorObj) { - async.throwLater(ret.e); - } -} - -Promise.prototype.asCallback = -Promise.prototype.nodeify = function (nodeback, options) { - if (typeof nodeback == "function") { - var adapter = successAdapter; - if (options !== undefined && Object(options).spread) { - adapter = spreadAdapter; - } - this._then( - adapter, - errorAdapter, - undefined, - this, - nodeback - ); - } - return this; -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/progress.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/progress.js deleted file mode 100644 index 2e3e95e5..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/progress.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; -module.exports = function(Promise, PromiseArray) { -var util = require("./util.js"); -var async = require("./async.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; - -Promise.prototype.progressed = function (handler) { - return this._then(undefined, undefined, handler, undefined, undefined); -}; - -Promise.prototype._progress = function (progressValue) { - if (this._isFollowingOrFulfilledOrRejected()) return; - this._target()._progressUnchecked(progressValue); - -}; - -Promise.prototype._progressHandlerAt = function (index) { - return index === 0 - ? this._progressHandler0 - : this[(index << 2) + index - 5 + 2]; -}; - -Promise.prototype._doProgressWith = function (progression) { - var progressValue = progression.value; - var handler = progression.handler; - var promise = progression.promise; - var receiver = progression.receiver; - - var ret = tryCatch(handler).call(receiver, progressValue); - if (ret === errorObj) { - if (ret.e != null && - ret.e.name !== "StopProgressPropagation") { - var trace = util.canAttachTrace(ret.e) - ? ret.e : new Error(util.toString(ret.e)); - promise._attachExtraTrace(trace); - promise._progress(ret.e); - } - } else if (ret instanceof Promise) { - ret._then(promise._progress, null, null, promise, undefined); - } else { - promise._progress(ret); - } -}; - - -Promise.prototype._progressUnchecked = function (progressValue) { - var len = this._length(); - var progress = this._progress; - for (var i = 0; i < len; i++) { - var handler = this._progressHandlerAt(i); - var promise = this._promiseAt(i); - if (!(promise instanceof Promise)) { - var receiver = this._receiverAt(i); - if (typeof handler === "function") { - handler.call(receiver, progressValue, promise); - } else if (receiver instanceof PromiseArray && - !receiver._isResolved()) { - receiver._promiseProgressed(progressValue, promise); - } - continue; - } - - if (typeof handler === "function") { - async.invoke(this._doProgressWith, this, { - handler: handler, - promise: promise, - receiver: this._receiverAt(i), - value: progressValue - }); - } else { - async.invoke(progress, promise, progressValue); - } - } -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise.js deleted file mode 100644 index 820d0c78..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise.js +++ /dev/null @@ -1,759 +0,0 @@ -"use strict"; -module.exports = function() { -var makeSelfResolutionError = function () { - return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/LhFpo0\u000a"); -}; -var reflect = function() { - return new Promise.PromiseInspection(this._target()); -}; -var apiRejection = function(msg) { - return Promise.reject(new TypeError(msg)); -}; - -var util = require("./util.js"); - -var getDomain; -if (util.isNode) { - getDomain = function() { - var ret = process.domain; - if (ret === undefined) ret = null; - return ret; - }; -} else { - getDomain = function() { - return null; - }; -} -util.notEnumerableProp(Promise, "_getDomain", getDomain); - -var UNDEFINED_BINDING = {}; -var async = require("./async.js"); -var errors = require("./errors.js"); -var TypeError = Promise.TypeError = errors.TypeError; -Promise.RangeError = errors.RangeError; -Promise.CancellationError = errors.CancellationError; -Promise.TimeoutError = errors.TimeoutError; -Promise.OperationalError = errors.OperationalError; -Promise.RejectionError = errors.OperationalError; -Promise.AggregateError = errors.AggregateError; -var INTERNAL = function(){}; -var APPLY = {}; -var NEXT_FILTER = {e: null}; -var tryConvertToPromise = require("./thenables.js")(Promise, INTERNAL); -var PromiseArray = - require("./promise_array.js")(Promise, INTERNAL, - tryConvertToPromise, apiRejection); -var CapturedTrace = require("./captured_trace.js")(); -var isDebugging = require("./debuggability.js")(Promise, CapturedTrace); - /*jshint unused:false*/ -var createContext = - require("./context.js")(Promise, CapturedTrace, isDebugging); -var CatchFilter = require("./catch_filter.js")(NEXT_FILTER); -var PromiseResolver = require("./promise_resolver.js"); -var nodebackForPromise = PromiseResolver._nodebackForPromise; -var errorObj = util.errorObj; -var tryCatch = util.tryCatch; - -function Promise(resolver) { - if (typeof resolver !== "function") { - throw new TypeError("the promise constructor requires a resolver function\u000a\u000a See http://goo.gl/EC22Yn\u000a"); - } - if (this.constructor !== Promise) { - throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/KsIlge\u000a"); - } - this._bitField = 0; - this._fulfillmentHandler0 = undefined; - this._rejectionHandler0 = undefined; - this._progressHandler0 = undefined; - this._promise0 = undefined; - this._receiver0 = undefined; - this._settledValue = undefined; - if (resolver !== INTERNAL) this._resolveFromResolver(resolver); -} - -Promise.prototype.toString = function () { - return "[object Promise]"; -}; - -Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { - var len = arguments.length; - if (len > 1) { - var catchInstances = new Array(len - 1), - j = 0, i; - for (i = 0; i < len - 1; ++i) { - var item = arguments[i]; - if (typeof item === "function") { - catchInstances[j++] = item; - } else { - return Promise.reject( - new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a")); - } - } - catchInstances.length = j; - fn = arguments[i]; - var catchFilter = new CatchFilter(catchInstances, fn, this); - return this._then(undefined, catchFilter.doFilter, undefined, - catchFilter, undefined); - } - return this._then(undefined, fn, undefined, undefined, undefined); -}; - -Promise.prototype.reflect = function () { - return this._then(reflect, reflect, undefined, this, undefined); -}; - -Promise.prototype.then = function (didFulfill, didReject, didProgress) { - if (isDebugging() && arguments.length > 0 && - typeof didFulfill !== "function" && - typeof didReject !== "function") { - var msg = ".then() only accepts functions but was passed: " + - util.classString(didFulfill); - if (arguments.length > 1) { - msg += ", " + util.classString(didReject); - } - this._warn(msg); - } - return this._then(didFulfill, didReject, didProgress, - undefined, undefined); -}; - -Promise.prototype.done = function (didFulfill, didReject, didProgress) { - var promise = this._then(didFulfill, didReject, didProgress, - undefined, undefined); - promise._setIsFinal(); -}; - -Promise.prototype.spread = function (didFulfill, didReject) { - return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined); -}; - -Promise.prototype.isCancellable = function () { - return !this.isResolved() && - this._cancellable(); -}; - -Promise.prototype.toJSON = function () { - var ret = { - isFulfilled: false, - isRejected: false, - fulfillmentValue: undefined, - rejectionReason: undefined - }; - if (this.isFulfilled()) { - ret.fulfillmentValue = this.value(); - ret.isFulfilled = true; - } else if (this.isRejected()) { - ret.rejectionReason = this.reason(); - ret.isRejected = true; - } - return ret; -}; - -Promise.prototype.all = function () { - return new PromiseArray(this).promise(); -}; - -Promise.prototype.error = function (fn) { - return this.caught(util.originatesFromRejection, fn); -}; - -Promise.getNewLibraryCopy = module.exports; - -Promise.is = function (val) { - return val instanceof Promise; -}; - -Promise.fromNode = function(fn) { - var ret = new Promise(INTERNAL); - var result = tryCatch(fn)(nodebackForPromise(ret)); - if (result === errorObj) { - ret._rejectCallback(result.e, true, true); - } - return ret; -}; - -Promise.all = function (promises) { - return new PromiseArray(promises).promise(); -}; - -Promise.defer = Promise.pending = function () { - var promise = new Promise(INTERNAL); - return new PromiseResolver(promise); -}; - -Promise.cast = function (obj) { - var ret = tryConvertToPromise(obj); - if (!(ret instanceof Promise)) { - var val = ret; - ret = new Promise(INTERNAL); - ret._fulfillUnchecked(val); - } - return ret; -}; - -Promise.resolve = Promise.fulfilled = Promise.cast; - -Promise.reject = Promise.rejected = function (reason) { - var ret = new Promise(INTERNAL); - ret._captureStackTrace(); - ret._rejectCallback(reason, true); - return ret; -}; - -Promise.setScheduler = function(fn) { - if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - var prev = async._schedule; - async._schedule = fn; - return prev; -}; - -Promise.prototype._then = function ( - didFulfill, - didReject, - didProgress, - receiver, - internalData -) { - var haveInternalData = internalData !== undefined; - var ret = haveInternalData ? internalData : new Promise(INTERNAL); - - if (!haveInternalData) { - ret._propagateFrom(this, 4 | 1); - ret._captureStackTrace(); - } - - var target = this._target(); - if (target !== this) { - if (receiver === undefined) receiver = this._boundTo; - if (!haveInternalData) ret._setIsMigrated(); - } - - var callbackIndex = target._addCallbacks(didFulfill, - didReject, - didProgress, - ret, - receiver, - getDomain()); - - if (target._isResolved() && !target._isSettlePromisesQueued()) { - async.invoke( - target._settlePromiseAtPostResolution, target, callbackIndex); - } - - return ret; -}; - -Promise.prototype._settlePromiseAtPostResolution = function (index) { - if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled(); - this._settlePromiseAt(index); -}; - -Promise.prototype._length = function () { - return this._bitField & 131071; -}; - -Promise.prototype._isFollowingOrFulfilledOrRejected = function () { - return (this._bitField & 939524096) > 0; -}; - -Promise.prototype._isFollowing = function () { - return (this._bitField & 536870912) === 536870912; -}; - -Promise.prototype._setLength = function (len) { - this._bitField = (this._bitField & -131072) | - (len & 131071); -}; - -Promise.prototype._setFulfilled = function () { - this._bitField = this._bitField | 268435456; -}; - -Promise.prototype._setRejected = function () { - this._bitField = this._bitField | 134217728; -}; - -Promise.prototype._setFollowing = function () { - this._bitField = this._bitField | 536870912; -}; - -Promise.prototype._setIsFinal = function () { - this._bitField = this._bitField | 33554432; -}; - -Promise.prototype._isFinal = function () { - return (this._bitField & 33554432) > 0; -}; - -Promise.prototype._cancellable = function () { - return (this._bitField & 67108864) > 0; -}; - -Promise.prototype._setCancellable = function () { - this._bitField = this._bitField | 67108864; -}; - -Promise.prototype._unsetCancellable = function () { - this._bitField = this._bitField & (~67108864); -}; - -Promise.prototype._setIsMigrated = function () { - this._bitField = this._bitField | 4194304; -}; - -Promise.prototype._unsetIsMigrated = function () { - this._bitField = this._bitField & (~4194304); -}; - -Promise.prototype._isMigrated = function () { - return (this._bitField & 4194304) > 0; -}; - -Promise.prototype._receiverAt = function (index) { - var ret = index === 0 - ? this._receiver0 - : this[ - index * 5 - 5 + 4]; - if (ret === UNDEFINED_BINDING) { - return undefined; - } else if (ret === undefined && this._isBound()) { - return this._boundValue(); - } - return ret; -}; - -Promise.prototype._promiseAt = function (index) { - return index === 0 - ? this._promise0 - : this[index * 5 - 5 + 3]; -}; - -Promise.prototype._fulfillmentHandlerAt = function (index) { - return index === 0 - ? this._fulfillmentHandler0 - : this[index * 5 - 5 + 0]; -}; - -Promise.prototype._rejectionHandlerAt = function (index) { - return index === 0 - ? this._rejectionHandler0 - : this[index * 5 - 5 + 1]; -}; - -Promise.prototype._boundValue = function() { - var ret = this._boundTo; - if (ret !== undefined) { - if (ret instanceof Promise) { - if (ret.isFulfilled()) { - return ret.value(); - } else { - return undefined; - } - } - } - return ret; -}; - -Promise.prototype._migrateCallbacks = function (follower, index) { - var fulfill = follower._fulfillmentHandlerAt(index); - var reject = follower._rejectionHandlerAt(index); - var progress = follower._progressHandlerAt(index); - var promise = follower._promiseAt(index); - var receiver = follower._receiverAt(index); - if (promise instanceof Promise) promise._setIsMigrated(); - if (receiver === undefined) receiver = UNDEFINED_BINDING; - this._addCallbacks(fulfill, reject, progress, promise, receiver, null); -}; - -Promise.prototype._addCallbacks = function ( - fulfill, - reject, - progress, - promise, - receiver, - domain -) { - var index = this._length(); - - if (index >= 131071 - 5) { - index = 0; - this._setLength(0); - } - - if (index === 0) { - this._promise0 = promise; - if (receiver !== undefined) this._receiver0 = receiver; - if (typeof fulfill === "function" && !this._isCarryingStackTrace()) { - this._fulfillmentHandler0 = - domain === null ? fulfill : domain.bind(fulfill); - } - if (typeof reject === "function") { - this._rejectionHandler0 = - domain === null ? reject : domain.bind(reject); - } - if (typeof progress === "function") { - this._progressHandler0 = - domain === null ? progress : domain.bind(progress); - } - } else { - var base = index * 5 - 5; - this[base + 3] = promise; - this[base + 4] = receiver; - if (typeof fulfill === "function") { - this[base + 0] = - domain === null ? fulfill : domain.bind(fulfill); - } - if (typeof reject === "function") { - this[base + 1] = - domain === null ? reject : domain.bind(reject); - } - if (typeof progress === "function") { - this[base + 2] = - domain === null ? progress : domain.bind(progress); - } - } - this._setLength(index + 1); - return index; -}; - -Promise.prototype._setProxyHandlers = function (receiver, promiseSlotValue) { - var index = this._length(); - - if (index >= 131071 - 5) { - index = 0; - this._setLength(0); - } - if (index === 0) { - this._promise0 = promiseSlotValue; - this._receiver0 = receiver; - } else { - var base = index * 5 - 5; - this[base + 3] = promiseSlotValue; - this[base + 4] = receiver; - } - this._setLength(index + 1); -}; - -Promise.prototype._proxyPromiseArray = function (promiseArray, index) { - this._setProxyHandlers(promiseArray, index); -}; - -Promise.prototype._resolveCallback = function(value, shouldBind) { - if (this._isFollowingOrFulfilledOrRejected()) return; - if (value === this) - return this._rejectCallback(makeSelfResolutionError(), false, true); - var maybePromise = tryConvertToPromise(value, this); - if (!(maybePromise instanceof Promise)) return this._fulfill(value); - - var propagationFlags = 1 | (shouldBind ? 4 : 0); - this._propagateFrom(maybePromise, propagationFlags); - var promise = maybePromise._target(); - if (promise._isPending()) { - var len = this._length(); - for (var i = 0; i < len; ++i) { - promise._migrateCallbacks(this, i); - } - this._setFollowing(); - this._setLength(0); - this._setFollowee(promise); - } else if (promise._isFulfilled()) { - this._fulfillUnchecked(promise._value()); - } else { - this._rejectUnchecked(promise._reason(), - promise._getCarriedStackTrace()); - } -}; - -Promise.prototype._rejectCallback = -function(reason, synchronous, shouldNotMarkOriginatingFromRejection) { - if (!shouldNotMarkOriginatingFromRejection) { - util.markAsOriginatingFromRejection(reason); - } - var trace = util.ensureErrorObject(reason); - var hasStack = trace === reason; - this._attachExtraTrace(trace, synchronous ? hasStack : false); - this._reject(reason, hasStack ? undefined : trace); -}; - -Promise.prototype._resolveFromResolver = function (resolver) { - var promise = this; - this._captureStackTrace(); - this._pushContext(); - var synchronous = true; - var r = tryCatch(resolver)(function(value) { - if (promise === null) return; - promise._resolveCallback(value); - promise = null; - }, function (reason) { - if (promise === null) return; - promise._rejectCallback(reason, synchronous); - promise = null; - }); - synchronous = false; - this._popContext(); - - if (r !== undefined && r === errorObj && promise !== null) { - promise._rejectCallback(r.e, true, true); - promise = null; - } -}; - -Promise.prototype._settlePromiseFromHandler = function ( - handler, receiver, value, promise -) { - if (promise._isRejected()) return; - promise._pushContext(); - var x; - if (receiver === APPLY && !this._isRejected()) { - x = tryCatch(handler).apply(this._boundValue(), value); - } else { - x = tryCatch(handler).call(receiver, value); - } - promise._popContext(); - - if (x === errorObj || x === promise || x === NEXT_FILTER) { - var err = x === promise ? makeSelfResolutionError() : x.e; - promise._rejectCallback(err, false, true); - } else { - promise._resolveCallback(x); - } -}; - -Promise.prototype._target = function() { - var ret = this; - while (ret._isFollowing()) ret = ret._followee(); - return ret; -}; - -Promise.prototype._followee = function() { - return this._rejectionHandler0; -}; - -Promise.prototype._setFollowee = function(promise) { - this._rejectionHandler0 = promise; -}; - -Promise.prototype._cleanValues = function () { - if (this._cancellable()) { - this._cancellationParent = undefined; - } -}; - -Promise.prototype._propagateFrom = function (parent, flags) { - if ((flags & 1) > 0 && parent._cancellable()) { - this._setCancellable(); - this._cancellationParent = parent; - } - if ((flags & 4) > 0 && parent._isBound()) { - this._setBoundTo(parent._boundTo); - } -}; - -Promise.prototype._fulfill = function (value) { - if (this._isFollowingOrFulfilledOrRejected()) return; - this._fulfillUnchecked(value); -}; - -Promise.prototype._reject = function (reason, carriedStackTrace) { - if (this._isFollowingOrFulfilledOrRejected()) return; - this._rejectUnchecked(reason, carriedStackTrace); -}; - -Promise.prototype._settlePromiseAt = function (index) { - var promise = this._promiseAt(index); - var isPromise = promise instanceof Promise; - - if (isPromise && promise._isMigrated()) { - promise._unsetIsMigrated(); - return async.invoke(this._settlePromiseAt, this, index); - } - var handler = this._isFulfilled() - ? this._fulfillmentHandlerAt(index) - : this._rejectionHandlerAt(index); - - var carriedStackTrace = - this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined; - var value = this._settledValue; - var receiver = this._receiverAt(index); - this._clearCallbackDataAtIndex(index); - - if (typeof handler === "function") { - if (!isPromise) { - handler.call(receiver, value, promise); - } else { - this._settlePromiseFromHandler(handler, receiver, value, promise); - } - } else if (receiver instanceof PromiseArray) { - if (!receiver._isResolved()) { - if (this._isFulfilled()) { - receiver._promiseFulfilled(value, promise); - } - else { - receiver._promiseRejected(value, promise); - } - } - } else if (isPromise) { - if (this._isFulfilled()) { - promise._fulfill(value); - } else { - promise._reject(value, carriedStackTrace); - } - } - - if (index >= 4 && (index & 31) === 4) - async.invokeLater(this._setLength, this, 0); -}; - -Promise.prototype._clearCallbackDataAtIndex = function(index) { - if (index === 0) { - if (!this._isCarryingStackTrace()) { - this._fulfillmentHandler0 = undefined; - } - this._rejectionHandler0 = - this._progressHandler0 = - this._receiver0 = - this._promise0 = undefined; - } else { - var base = index * 5 - 5; - this[base + 3] = - this[base + 4] = - this[base + 0] = - this[base + 1] = - this[base + 2] = undefined; - } -}; - -Promise.prototype._isSettlePromisesQueued = function () { - return (this._bitField & - -1073741824) === -1073741824; -}; - -Promise.prototype._setSettlePromisesQueued = function () { - this._bitField = this._bitField | -1073741824; -}; - -Promise.prototype._unsetSettlePromisesQueued = function () { - this._bitField = this._bitField & (~-1073741824); -}; - -Promise.prototype._queueSettlePromises = function() { - async.settlePromises(this); - this._setSettlePromisesQueued(); -}; - -Promise.prototype._fulfillUnchecked = function (value) { - if (value === this) { - var err = makeSelfResolutionError(); - this._attachExtraTrace(err); - return this._rejectUnchecked(err, undefined); - } - this._setFulfilled(); - this._settledValue = value; - this._cleanValues(); - - if (this._length() > 0) { - this._queueSettlePromises(); - } -}; - -Promise.prototype._rejectUncheckedCheckError = function (reason) { - var trace = util.ensureErrorObject(reason); - this._rejectUnchecked(reason, trace === reason ? undefined : trace); -}; - -Promise.prototype._rejectUnchecked = function (reason, trace) { - if (reason === this) { - var err = makeSelfResolutionError(); - this._attachExtraTrace(err); - return this._rejectUnchecked(err); - } - this._setRejected(); - this._settledValue = reason; - this._cleanValues(); - - if (this._isFinal()) { - async.throwLater(function(e) { - if ("stack" in e) { - async.invokeFirst( - CapturedTrace.unhandledRejection, undefined, e); - } - throw e; - }, trace === undefined ? reason : trace); - return; - } - - if (trace !== undefined && trace !== reason) { - this._setCarriedStackTrace(trace); - } - - if (this._length() > 0) { - this._queueSettlePromises(); - } else { - this._ensurePossibleRejectionHandled(); - } -}; - -Promise.prototype._settlePromises = function () { - this._unsetSettlePromisesQueued(); - var len = this._length(); - for (var i = 0; i < len; i++) { - this._settlePromiseAt(i); - } -}; - - -util.notEnumerableProp(Promise, - "_makeSelfResolutionError", - makeSelfResolutionError); - -require("./progress.js")(Promise, PromiseArray); -require("./method.js")(Promise, INTERNAL, tryConvertToPromise, apiRejection); -require("./bind.js")(Promise, INTERNAL, tryConvertToPromise); -require("./finally.js")(Promise, NEXT_FILTER, tryConvertToPromise); -require("./direct_resolve.js")(Promise); -require("./synchronous_inspection.js")(Promise); -require("./join.js")(Promise, PromiseArray, tryConvertToPromise, INTERNAL); -Promise.version = "2.11.0"; -Promise.Promise = Promise; -require('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL); -require('./cancel.js')(Promise); -require('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext); -require('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise); -require('./nodeify.js')(Promise); -require('./call_get.js')(Promise); -require('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); -require('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); -require('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL); -require('./settle.js')(Promise, PromiseArray); -require('./some.js')(Promise, PromiseArray, apiRejection); -require('./promisify.js')(Promise, INTERNAL); -require('./any.js')(Promise); -require('./each.js')(Promise, INTERNAL); -require('./timers.js')(Promise, INTERNAL); -require('./filter.js')(Promise, INTERNAL); - - util.toFastProperties(Promise); - util.toFastProperties(Promise.prototype); - function fillTypes(value) { - var p = new Promise(INTERNAL); - p._fulfillmentHandler0 = value; - p._rejectionHandler0 = value; - p._progressHandler0 = value; - p._promise0 = value; - p._receiver0 = value; - p._settledValue = value; - } - // Complete slack tracking, opt out of field-type tracking and - // stabilize map - fillTypes({a: 1}); - fillTypes({b: 2}); - fillTypes({c: 3}); - fillTypes(1); - fillTypes(function(){}); - fillTypes(undefined); - fillTypes(false); - fillTypes(new Promise(INTERNAL)); - CapturedTrace.setBounds(async.firstLineError, util.lastLineError); - return Promise; - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise_array.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise_array.js deleted file mode 100644 index b2e8f1cc..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise_array.js +++ /dev/null @@ -1,142 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL, tryConvertToPromise, - apiRejection) { -var util = require("./util.js"); -var isArray = util.isArray; - -function toResolutionValue(val) { - switch(val) { - case -2: return []; - case -3: return {}; - } -} - -function PromiseArray(values) { - var promise = this._promise = new Promise(INTERNAL); - var parent; - if (values instanceof Promise) { - parent = values; - promise._propagateFrom(parent, 1 | 4); - } - this._values = values; - this._length = 0; - this._totalResolved = 0; - this._init(undefined, -2); -} -PromiseArray.prototype.length = function () { - return this._length; -}; - -PromiseArray.prototype.promise = function () { - return this._promise; -}; - -PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { - var values = tryConvertToPromise(this._values, this._promise); - if (values instanceof Promise) { - values = values._target(); - this._values = values; - if (values._isFulfilled()) { - values = values._value(); - if (!isArray(values)) { - var err = new Promise.TypeError("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a"); - this.__hardReject__(err); - return; - } - } else if (values._isPending()) { - values._then( - init, - this._reject, - undefined, - this, - resolveValueIfEmpty - ); - return; - } else { - this._reject(values._reason()); - return; - } - } else if (!isArray(values)) { - this._promise._reject(apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a")._reason()); - return; - } - - if (values.length === 0) { - if (resolveValueIfEmpty === -5) { - this._resolveEmptyArray(); - } - else { - this._resolve(toResolutionValue(resolveValueIfEmpty)); - } - return; - } - var len = this.getActualLength(values.length); - this._length = len; - this._values = this.shouldCopyValues() ? new Array(len) : this._values; - var promise = this._promise; - for (var i = 0; i < len; ++i) { - var isResolved = this._isResolved(); - var maybePromise = tryConvertToPromise(values[i], promise); - if (maybePromise instanceof Promise) { - maybePromise = maybePromise._target(); - if (isResolved) { - maybePromise._ignoreRejections(); - } else if (maybePromise._isPending()) { - maybePromise._proxyPromiseArray(this, i); - } else if (maybePromise._isFulfilled()) { - this._promiseFulfilled(maybePromise._value(), i); - } else { - this._promiseRejected(maybePromise._reason(), i); - } - } else if (!isResolved) { - this._promiseFulfilled(maybePromise, i); - } - } -}; - -PromiseArray.prototype._isResolved = function () { - return this._values === null; -}; - -PromiseArray.prototype._resolve = function (value) { - this._values = null; - this._promise._fulfill(value); -}; - -PromiseArray.prototype.__hardReject__ = -PromiseArray.prototype._reject = function (reason) { - this._values = null; - this._promise._rejectCallback(reason, false, true); -}; - -PromiseArray.prototype._promiseProgressed = function (progressValue, index) { - this._promise._progress({ - index: index, - value: progressValue - }); -}; - - -PromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - this._resolve(this._values); - } -}; - -PromiseArray.prototype._promiseRejected = function (reason, index) { - this._totalResolved++; - this._reject(reason); -}; - -PromiseArray.prototype.shouldCopyValues = function () { - return true; -}; - -PromiseArray.prototype.getActualLength = function (len) { - return len; -}; - -return PromiseArray; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise_resolver.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise_resolver.js deleted file mode 100644 index b180a328..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promise_resolver.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; -var util = require("./util.js"); -var maybeWrapAsError = util.maybeWrapAsError; -var errors = require("./errors.js"); -var TimeoutError = errors.TimeoutError; -var OperationalError = errors.OperationalError; -var haveGetters = util.haveGetters; -var es5 = require("./es5.js"); - -function isUntypedError(obj) { - return obj instanceof Error && - es5.getPrototypeOf(obj) === Error.prototype; -} - -var rErrorKey = /^(?:name|message|stack|cause)$/; -function wrapAsOperationalError(obj) { - var ret; - if (isUntypedError(obj)) { - ret = new OperationalError(obj); - ret.name = obj.name; - ret.message = obj.message; - ret.stack = obj.stack; - var keys = es5.keys(obj); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (!rErrorKey.test(key)) { - ret[key] = obj[key]; - } - } - return ret; - } - util.markAsOriginatingFromRejection(obj); - return obj; -} - -function nodebackForPromise(promise) { - return function(err, value) { - if (promise === null) return; - - if (err) { - var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); - promise._attachExtraTrace(wrapped); - promise._reject(wrapped); - } else if (arguments.length > 2) { - var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} - promise._fulfill(args); - } else { - promise._fulfill(value); - } - - promise = null; - }; -} - - -var PromiseResolver; -if (!haveGetters) { - PromiseResolver = function (promise) { - this.promise = promise; - this.asCallback = nodebackForPromise(promise); - this.callback = this.asCallback; - }; -} -else { - PromiseResolver = function (promise) { - this.promise = promise; - }; -} -if (haveGetters) { - var prop = { - get: function() { - return nodebackForPromise(this.promise); - } - }; - es5.defineProperty(PromiseResolver.prototype, "asCallback", prop); - es5.defineProperty(PromiseResolver.prototype, "callback", prop); -} - -PromiseResolver._nodebackForPromise = nodebackForPromise; - -PromiseResolver.prototype.toString = function () { - return "[object PromiseResolver]"; -}; - -PromiseResolver.prototype.resolve = -PromiseResolver.prototype.fulfill = function (value) { - if (!(this instanceof PromiseResolver)) { - throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a"); - } - this.promise._resolveCallback(value); -}; - -PromiseResolver.prototype.reject = function (reason) { - if (!(this instanceof PromiseResolver)) { - throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a"); - } - this.promise._rejectCallback(reason); -}; - -PromiseResolver.prototype.progress = function (value) { - if (!(this instanceof PromiseResolver)) { - throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a"); - } - this.promise._progress(value); -}; - -PromiseResolver.prototype.cancel = function (err) { - this.promise.cancel(err); -}; - -PromiseResolver.prototype.timeout = function () { - this.reject(new TimeoutError("timeout")); -}; - -PromiseResolver.prototype.isResolved = function () { - return this.promise.isResolved(); -}; - -PromiseResolver.prototype.toJSON = function () { - return this.promise.toJSON(); -}; - -module.exports = PromiseResolver; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promisify.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promisify.js deleted file mode 100644 index 86763d60..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/promisify.js +++ /dev/null @@ -1,307 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var THIS = {}; -var util = require("./util.js"); -var nodebackForPromise = require("./promise_resolver.js") - ._nodebackForPromise; -var withAppended = util.withAppended; -var maybeWrapAsError = util.maybeWrapAsError; -var canEvaluate = util.canEvaluate; -var TypeError = require("./errors").TypeError; -var defaultSuffix = "Async"; -var defaultPromisified = {__isPromisified__: true}; -var noCopyProps = [ - "arity", "length", - "name", - "arguments", - "caller", - "callee", - "prototype", - "__isPromisified__" -]; -var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); - -var defaultFilter = function(name) { - return util.isIdentifier(name) && - name.charAt(0) !== "_" && - name !== "constructor"; -}; - -function propsFilter(key) { - return !noCopyPropsPattern.test(key); -} - -function isPromisified(fn) { - try { - return fn.__isPromisified__ === true; - } - catch (e) { - return false; - } -} - -function hasPromisified(obj, key, suffix) { - var val = util.getDataPropertyOrDefault(obj, key + suffix, - defaultPromisified); - return val ? isPromisified(val) : false; -} -function checkValid(ret, suffix, suffixRegexp) { - for (var i = 0; i < ret.length; i += 2) { - var key = ret[i]; - if (suffixRegexp.test(key)) { - var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); - for (var j = 0; j < ret.length; j += 2) { - if (ret[j] === keyWithoutAsyncSuffix) { - throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/iWrZbw\u000a" - .replace("%s", suffix)); - } - } - } - } -} - -function promisifiableMethods(obj, suffix, suffixRegexp, filter) { - var keys = util.inheritedDataKeys(obj); - var ret = []; - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - var value = obj[key]; - var passesDefaultFilter = filter === defaultFilter - ? true : defaultFilter(key, value, obj); - if (typeof value === "function" && - !isPromisified(value) && - !hasPromisified(obj, key, suffix) && - filter(key, value, obj, passesDefaultFilter)) { - ret.push(key, value); - } - } - checkValid(ret, suffix, suffixRegexp); - return ret; -} - -var escapeIdentRegex = function(str) { - return str.replace(/([$])/, "\\$"); -}; - -var makeNodePromisifiedEval; -if (!false) { -var switchCaseArgumentOrder = function(likelyArgumentCount) { - var ret = [likelyArgumentCount]; - var min = Math.max(0, likelyArgumentCount - 1 - 3); - for(var i = likelyArgumentCount - 1; i >= min; --i) { - ret.push(i); - } - for(var i = likelyArgumentCount + 1; i <= 3; ++i) { - ret.push(i); - } - return ret; -}; - -var argumentSequence = function(argumentCount) { - return util.filledRange(argumentCount, "_arg", ""); -}; - -var parameterDeclaration = function(parameterCount) { - return util.filledRange( - Math.max(parameterCount, 3), "_arg", ""); -}; - -var parameterCount = function(fn) { - if (typeof fn.length === "number") { - return Math.max(Math.min(fn.length, 1023 + 1), 0); - } - return 0; -}; - -makeNodePromisifiedEval = -function(callback, receiver, originalName, fn) { - var newParameterCount = Math.max(0, parameterCount(fn) - 1); - var argumentOrder = switchCaseArgumentOrder(newParameterCount); - var shouldProxyThis = typeof callback === "string" || receiver === THIS; - - function generateCallForArgumentCount(count) { - var args = argumentSequence(count).join(", "); - var comma = count > 0 ? ", " : ""; - var ret; - if (shouldProxyThis) { - ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; - } else { - ret = receiver === undefined - ? "ret = callback({{args}}, nodeback); break;\n" - : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; - } - return ret.replace("{{args}}", args).replace(", ", comma); - } - - function generateArgumentSwitchCase() { - var ret = ""; - for (var i = 0; i < argumentOrder.length; ++i) { - ret += "case " + argumentOrder[i] +":" + - generateCallForArgumentCount(argumentOrder[i]); - } - - ret += " \n\ - default: \n\ - var args = new Array(len + 1); \n\ - var i = 0; \n\ - for (var i = 0; i < len; ++i) { \n\ - args[i] = arguments[i]; \n\ - } \n\ - args[i] = nodeback; \n\ - [CodeForCall] \n\ - break; \n\ - ".replace("[CodeForCall]", (shouldProxyThis - ? "ret = callback.apply(this, args);\n" - : "ret = callback.apply(receiver, args);\n")); - return ret; - } - - var getFunctionCode = typeof callback === "string" - ? ("this != null ? this['"+callback+"'] : fn") - : "fn"; - - return new Function("Promise", - "fn", - "receiver", - "withAppended", - "maybeWrapAsError", - "nodebackForPromise", - "tryCatch", - "errorObj", - "notEnumerableProp", - "INTERNAL","'use strict'; \n\ - var ret = function (Parameters) { \n\ - 'use strict'; \n\ - var len = arguments.length; \n\ - var promise = new Promise(INTERNAL); \n\ - promise._captureStackTrace(); \n\ - var nodeback = nodebackForPromise(promise); \n\ - var ret; \n\ - var callback = tryCatch([GetFunctionCode]); \n\ - switch(len) { \n\ - [CodeForSwitchCase] \n\ - } \n\ - if (ret === errorObj) { \n\ - promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ - } \n\ - return promise; \n\ - }; \n\ - notEnumerableProp(ret, '__isPromisified__', true); \n\ - return ret; \n\ - " - .replace("Parameters", parameterDeclaration(newParameterCount)) - .replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) - .replace("[GetFunctionCode]", getFunctionCode))( - Promise, - fn, - receiver, - withAppended, - maybeWrapAsError, - nodebackForPromise, - util.tryCatch, - util.errorObj, - util.notEnumerableProp, - INTERNAL - ); -}; -} - -function makeNodePromisifiedClosure(callback, receiver, _, fn) { - var defaultThis = (function() {return this;})(); - var method = callback; - if (typeof method === "string") { - callback = fn; - } - function promisified() { - var _receiver = receiver; - if (receiver === THIS) _receiver = this; - var promise = new Promise(INTERNAL); - promise._captureStackTrace(); - var cb = typeof method === "string" && this !== defaultThis - ? this[method] : callback; - var fn = nodebackForPromise(promise); - try { - cb.apply(_receiver, withAppended(arguments, fn)); - } catch(e) { - promise._rejectCallback(maybeWrapAsError(e), true, true); - } - return promise; - } - util.notEnumerableProp(promisified, "__isPromisified__", true); - return promisified; -} - -var makeNodePromisified = canEvaluate - ? makeNodePromisifiedEval - : makeNodePromisifiedClosure; - -function promisifyAll(obj, suffix, filter, promisifier) { - var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); - var methods = - promisifiableMethods(obj, suffix, suffixRegexp, filter); - - for (var i = 0, len = methods.length; i < len; i+= 2) { - var key = methods[i]; - var fn = methods[i+1]; - var promisifiedKey = key + suffix; - if (promisifier === makeNodePromisified) { - obj[promisifiedKey] = - makeNodePromisified(key, THIS, key, fn, suffix); - } else { - var promisified = promisifier(fn, function() { - return makeNodePromisified(key, THIS, key, fn, suffix); - }); - util.notEnumerableProp(promisified, "__isPromisified__", true); - obj[promisifiedKey] = promisified; - } - } - util.toFastProperties(obj); - return obj; -} - -function promisify(callback, receiver) { - return makeNodePromisified(callback, receiver, undefined, callback); -} - -Promise.promisify = function (fn, receiver) { - if (typeof fn !== "function") { - throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - } - if (isPromisified(fn)) { - return fn; - } - var ret = promisify(fn, arguments.length < 2 ? THIS : receiver); - util.copyDescriptors(fn, ret, propsFilter); - return ret; -}; - -Promise.promisifyAll = function (target, options) { - if (typeof target !== "function" && typeof target !== "object") { - throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/9ITlV0\u000a"); - } - options = Object(options); - var suffix = options.suffix; - if (typeof suffix !== "string") suffix = defaultSuffix; - var filter = options.filter; - if (typeof filter !== "function") filter = defaultFilter; - var promisifier = options.promisifier; - if (typeof promisifier !== "function") promisifier = makeNodePromisified; - - if (!util.isIdentifier(suffix)) { - throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/8FZo5V\u000a"); - } - - var keys = util.inheritedDataKeys(target); - for (var i = 0; i < keys.length; ++i) { - var value = target[keys[i]]; - if (keys[i] !== "constructor" && - util.isClass(value)) { - promisifyAll(value.prototype, suffix, filter, promisifier); - promisifyAll(value, suffix, filter, promisifier); - } - } - - return promisifyAll(target, suffix, filter, promisifier); -}; -}; - diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/props.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/props.js deleted file mode 100644 index d6f9e64b..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/props.js +++ /dev/null @@ -1,79 +0,0 @@ -"use strict"; -module.exports = function( - Promise, PromiseArray, tryConvertToPromise, apiRejection) { -var util = require("./util.js"); -var isObject = util.isObject; -var es5 = require("./es5.js"); - -function PropertiesPromiseArray(obj) { - var keys = es5.keys(obj); - var len = keys.length; - var values = new Array(len * 2); - for (var i = 0; i < len; ++i) { - var key = keys[i]; - values[i] = obj[key]; - values[i + len] = key; - } - this.constructor$(values); -} -util.inherits(PropertiesPromiseArray, PromiseArray); - -PropertiesPromiseArray.prototype._init = function () { - this._init$(undefined, -3) ; -}; - -PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { - this._values[index] = value; - var totalResolved = ++this._totalResolved; - if (totalResolved >= this._length) { - var val = {}; - var keyOffset = this.length(); - for (var i = 0, len = this.length(); i < len; ++i) { - val[this._values[i + keyOffset]] = this._values[i]; - } - this._resolve(val); - } -}; - -PropertiesPromiseArray.prototype._promiseProgressed = function (value, index) { - this._promise._progress({ - key: this._values[index + this.length()], - value: value - }); -}; - -PropertiesPromiseArray.prototype.shouldCopyValues = function () { - return false; -}; - -PropertiesPromiseArray.prototype.getActualLength = function (len) { - return len >> 1; -}; - -function props(promises) { - var ret; - var castValue = tryConvertToPromise(promises); - - if (!isObject(castValue)) { - return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/OsFKC8\u000a"); - } else if (castValue instanceof Promise) { - ret = castValue._then( - Promise.props, undefined, undefined, undefined, undefined); - } else { - ret = new PropertiesPromiseArray(castValue).promise(); - } - - if (castValue instanceof Promise) { - ret._propagateFrom(castValue, 4); - } - return ret; -} - -Promise.prototype.props = function () { - return props(this); -}; - -Promise.props = function (promises) { - return props(promises); -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/queue.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/queue.js deleted file mode 100644 index 84d57d5f..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/queue.js +++ /dev/null @@ -1,90 +0,0 @@ -"use strict"; -function arrayMove(src, srcIndex, dst, dstIndex, len) { - for (var j = 0; j < len; ++j) { - dst[j + dstIndex] = src[j + srcIndex]; - src[j + srcIndex] = void 0; - } -} - -function Queue(capacity) { - this._capacity = capacity; - this._length = 0; - this._front = 0; -} - -Queue.prototype._willBeOverCapacity = function (size) { - return this._capacity < size; -}; - -Queue.prototype._pushOne = function (arg) { - var length = this.length(); - this._checkCapacity(length + 1); - var i = (this._front + length) & (this._capacity - 1); - this[i] = arg; - this._length = length + 1; -}; - -Queue.prototype._unshiftOne = function(value) { - var capacity = this._capacity; - this._checkCapacity(this.length() + 1); - var front = this._front; - var i = (((( front - 1 ) & - ( capacity - 1) ) ^ capacity ) - capacity ); - this[i] = value; - this._front = i; - this._length = this.length() + 1; -}; - -Queue.prototype.unshift = function(fn, receiver, arg) { - this._unshiftOne(arg); - this._unshiftOne(receiver); - this._unshiftOne(fn); -}; - -Queue.prototype.push = function (fn, receiver, arg) { - var length = this.length() + 3; - if (this._willBeOverCapacity(length)) { - this._pushOne(fn); - this._pushOne(receiver); - this._pushOne(arg); - return; - } - var j = this._front + length - 3; - this._checkCapacity(length); - var wrapMask = this._capacity - 1; - this[(j + 0) & wrapMask] = fn; - this[(j + 1) & wrapMask] = receiver; - this[(j + 2) & wrapMask] = arg; - this._length = length; -}; - -Queue.prototype.shift = function () { - var front = this._front, - ret = this[front]; - - this[front] = undefined; - this._front = (front + 1) & (this._capacity - 1); - this._length--; - return ret; -}; - -Queue.prototype.length = function () { - return this._length; -}; - -Queue.prototype._checkCapacity = function (size) { - if (this._capacity < size) { - this._resizeTo(this._capacity << 1); - } -}; - -Queue.prototype._resizeTo = function (capacity) { - var oldCapacity = this._capacity; - this._capacity = capacity; - var front = this._front; - var length = this._length; - var moveItemsCount = (front + length) & (oldCapacity - 1); - arrayMove(this, 0, this, oldCapacity, moveItemsCount); -}; - -module.exports = Queue; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/race.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/race.js deleted file mode 100644 index 30e7bb09..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/race.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; -module.exports = function( - Promise, INTERNAL, tryConvertToPromise, apiRejection) { -var isArray = require("./util.js").isArray; - -var raceLater = function (promise) { - return promise.then(function(array) { - return race(array, promise); - }); -}; - -function race(promises, parent) { - var maybePromise = tryConvertToPromise(promises); - - if (maybePromise instanceof Promise) { - return raceLater(maybePromise); - } else if (!isArray(promises)) { - return apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a"); - } - - var ret = new Promise(INTERNAL); - if (parent !== undefined) { - ret._propagateFrom(parent, 4 | 1); - } - var fulfill = ret._fulfill; - var reject = ret._reject; - for (var i = 0, len = promises.length; i < len; ++i) { - var val = promises[i]; - - if (val === undefined && !(i in promises)) { - continue; - } - - Promise.cast(val)._then(fulfill, reject, undefined, ret, null); - } - return ret; -} - -Promise.race = function (promises) { - return race(promises, undefined); -}; - -Promise.prototype.race = function () { - return race(this, undefined); -}; - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/reduce.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/reduce.js deleted file mode 100644 index 1f92dafa..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/reduce.js +++ /dev/null @@ -1,148 +0,0 @@ -"use strict"; -module.exports = function(Promise, - PromiseArray, - apiRejection, - tryConvertToPromise, - INTERNAL) { -var getDomain = Promise._getDomain; -var async = require("./async.js"); -var util = require("./util.js"); -var tryCatch = util.tryCatch; -var errorObj = util.errorObj; -function ReductionPromiseArray(promises, fn, accum, _each) { - this.constructor$(promises); - this._promise._captureStackTrace(); - this._preservedValues = _each === INTERNAL ? [] : null; - this._zerothIsAccum = (accum === undefined); - this._gotAccum = false; - this._reducingIndex = (this._zerothIsAccum ? 1 : 0); - this._valuesPhase = undefined; - var maybePromise = tryConvertToPromise(accum, this._promise); - var rejected = false; - var isPromise = maybePromise instanceof Promise; - if (isPromise) { - maybePromise = maybePromise._target(); - if (maybePromise._isPending()) { - maybePromise._proxyPromiseArray(this, -1); - } else if (maybePromise._isFulfilled()) { - accum = maybePromise._value(); - this._gotAccum = true; - } else { - this._reject(maybePromise._reason()); - rejected = true; - } - } - if (!(isPromise || this._zerothIsAccum)) this._gotAccum = true; - var domain = getDomain(); - this._callback = domain === null ? fn : domain.bind(fn); - this._accum = accum; - if (!rejected) async.invoke(init, this, undefined); -} -function init() { - this._init$(undefined, -5); -} -util.inherits(ReductionPromiseArray, PromiseArray); - -ReductionPromiseArray.prototype._init = function () {}; - -ReductionPromiseArray.prototype._resolveEmptyArray = function () { - if (this._gotAccum || this._zerothIsAccum) { - this._resolve(this._preservedValues !== null - ? [] : this._accum); - } -}; - -ReductionPromiseArray.prototype._promiseFulfilled = function (value, index) { - var values = this._values; - values[index] = value; - var length = this.length(); - var preservedValues = this._preservedValues; - var isEach = preservedValues !== null; - var gotAccum = this._gotAccum; - var valuesPhase = this._valuesPhase; - var valuesPhaseIndex; - if (!valuesPhase) { - valuesPhase = this._valuesPhase = new Array(length); - for (valuesPhaseIndex=0; valuesPhaseIndex= this._length) { - this._resolve(this._values); - } -}; - -SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { - var ret = new PromiseInspection(); - ret._bitField = 268435456; - ret._settledValue = value; - this._promiseResolved(index, ret); -}; -SettledPromiseArray.prototype._promiseRejected = function (reason, index) { - var ret = new PromiseInspection(); - ret._bitField = 134217728; - ret._settledValue = reason; - this._promiseResolved(index, ret); -}; - -Promise.settle = function (promises) { - return new SettledPromiseArray(promises).promise(); -}; - -Promise.prototype.settle = function () { - return new SettledPromiseArray(this).promise(); -}; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/some.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/some.js deleted file mode 100644 index f3968cf1..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/some.js +++ /dev/null @@ -1,125 +0,0 @@ -"use strict"; -module.exports = -function(Promise, PromiseArray, apiRejection) { -var util = require("./util.js"); -var RangeError = require("./errors.js").RangeError; -var AggregateError = require("./errors.js").AggregateError; -var isArray = util.isArray; - - -function SomePromiseArray(values) { - this.constructor$(values); - this._howMany = 0; - this._unwrap = false; - this._initialized = false; -} -util.inherits(SomePromiseArray, PromiseArray); - -SomePromiseArray.prototype._init = function () { - if (!this._initialized) { - return; - } - if (this._howMany === 0) { - this._resolve([]); - return; - } - this._init$(undefined, -5); - var isArrayResolved = isArray(this._values); - if (!this._isResolved() && - isArrayResolved && - this._howMany > this._canPossiblyFulfill()) { - this._reject(this._getRangeError(this.length())); - } -}; - -SomePromiseArray.prototype.init = function () { - this._initialized = true; - this._init(); -}; - -SomePromiseArray.prototype.setUnwrap = function () { - this._unwrap = true; -}; - -SomePromiseArray.prototype.howMany = function () { - return this._howMany; -}; - -SomePromiseArray.prototype.setHowMany = function (count) { - this._howMany = count; -}; - -SomePromiseArray.prototype._promiseFulfilled = function (value) { - this._addFulfilled(value); - if (this._fulfilled() === this.howMany()) { - this._values.length = this.howMany(); - if (this.howMany() === 1 && this._unwrap) { - this._resolve(this._values[0]); - } else { - this._resolve(this._values); - } - } - -}; -SomePromiseArray.prototype._promiseRejected = function (reason) { - this._addRejected(reason); - if (this.howMany() > this._canPossiblyFulfill()) { - var e = new AggregateError(); - for (var i = this.length(); i < this._values.length; ++i) { - e.push(this._values[i]); - } - this._reject(e); - } -}; - -SomePromiseArray.prototype._fulfilled = function () { - return this._totalResolved; -}; - -SomePromiseArray.prototype._rejected = function () { - return this._values.length - this.length(); -}; - -SomePromiseArray.prototype._addRejected = function (reason) { - this._values.push(reason); -}; - -SomePromiseArray.prototype._addFulfilled = function (value) { - this._values[this._totalResolved++] = value; -}; - -SomePromiseArray.prototype._canPossiblyFulfill = function () { - return this.length() - this._rejected(); -}; - -SomePromiseArray.prototype._getRangeError = function (count) { - var message = "Input array must contain at least " + - this._howMany + " items but contains only " + count + " items"; - return new RangeError(message); -}; - -SomePromiseArray.prototype._resolveEmptyArray = function () { - this._reject(this._getRangeError(0)); -}; - -function some(promises, howMany) { - if ((howMany | 0) !== howMany || howMany < 0) { - return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/1wAmHx\u000a"); - } - var ret = new SomePromiseArray(promises); - var promise = ret.promise(); - ret.setHowMany(howMany); - ret.init(); - return promise; -} - -Promise.some = function (promises, howMany) { - return some(promises, howMany); -}; - -Promise.prototype.some = function (howMany) { - return some(this, howMany); -}; - -Promise._SomePromiseArray = SomePromiseArray; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/synchronous_inspection.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/synchronous_inspection.js deleted file mode 100644 index 7aac1496..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/synchronous_inspection.js +++ /dev/null @@ -1,94 +0,0 @@ -"use strict"; -module.exports = function(Promise) { -function PromiseInspection(promise) { - if (promise !== undefined) { - promise = promise._target(); - this._bitField = promise._bitField; - this._settledValue = promise._settledValue; - } - else { - this._bitField = 0; - this._settledValue = undefined; - } -} - -PromiseInspection.prototype.value = function () { - if (!this.isFulfilled()) { - throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a"); - } - return this._settledValue; -}; - -PromiseInspection.prototype.error = -PromiseInspection.prototype.reason = function () { - if (!this.isRejected()) { - throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a"); - } - return this._settledValue; -}; - -PromiseInspection.prototype.isFulfilled = -Promise.prototype._isFulfilled = function () { - return (this._bitField & 268435456) > 0; -}; - -PromiseInspection.prototype.isRejected = -Promise.prototype._isRejected = function () { - return (this._bitField & 134217728) > 0; -}; - -PromiseInspection.prototype.isPending = -Promise.prototype._isPending = function () { - return (this._bitField & 402653184) === 0; -}; - -PromiseInspection.prototype.isResolved = -Promise.prototype._isResolved = function () { - return (this._bitField & 402653184) > 0; -}; - -Promise.prototype.isPending = function() { - return this._target()._isPending(); -}; - -Promise.prototype.isRejected = function() { - return this._target()._isRejected(); -}; - -Promise.prototype.isFulfilled = function() { - return this._target()._isFulfilled(); -}; - -Promise.prototype.isResolved = function() { - return this._target()._isResolved(); -}; - -Promise.prototype._value = function() { - return this._settledValue; -}; - -Promise.prototype._reason = function() { - this._unsetRejectionIsUnhandled(); - return this._settledValue; -}; - -Promise.prototype.value = function() { - var target = this._target(); - if (!target.isFulfilled()) { - throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a"); - } - return target._settledValue; -}; - -Promise.prototype.reason = function() { - var target = this._target(); - if (!target.isRejected()) { - throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a"); - } - target._unsetRejectionIsUnhandled(); - return target._settledValue; -}; - - -Promise.PromiseInspection = PromiseInspection; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/thenables.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/thenables.js deleted file mode 100644 index eadfffb5..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/thenables.js +++ /dev/null @@ -1,84 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var util = require("./util.js"); -var errorObj = util.errorObj; -var isObject = util.isObject; - -function tryConvertToPromise(obj, context) { - if (isObject(obj)) { - if (obj instanceof Promise) { - return obj; - } - else if (isAnyBluebirdPromise(obj)) { - var ret = new Promise(INTERNAL); - obj._then( - ret._fulfillUnchecked, - ret._rejectUncheckedCheckError, - ret._progressUnchecked, - ret, - null - ); - return ret; - } - var then = util.tryCatch(getThen)(obj); - if (then === errorObj) { - if (context) context._pushContext(); - var ret = Promise.reject(then.e); - if (context) context._popContext(); - return ret; - } else if (typeof then === "function") { - return doThenable(obj, then, context); - } - } - return obj; -} - -function getThen(obj) { - return obj.then; -} - -var hasProp = {}.hasOwnProperty; -function isAnyBluebirdPromise(obj) { - return hasProp.call(obj, "_promise0"); -} - -function doThenable(x, then, context) { - var promise = new Promise(INTERNAL); - var ret = promise; - if (context) context._pushContext(); - promise._captureStackTrace(); - if (context) context._popContext(); - var synchronous = true; - var result = util.tryCatch(then).call(x, - resolveFromThenable, - rejectFromThenable, - progressFromThenable); - synchronous = false; - if (promise && result === errorObj) { - promise._rejectCallback(result.e, true, true); - promise = null; - } - - function resolveFromThenable(value) { - if (!promise) return; - promise._resolveCallback(value); - promise = null; - } - - function rejectFromThenable(reason) { - if (!promise) return; - promise._rejectCallback(reason, synchronous, true); - promise = null; - } - - function progressFromThenable(value) { - if (!promise) return; - if (typeof promise._progress === "function") { - promise._progress(value); - } - } - return ret; -} - -return tryConvertToPromise; -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/timers.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/timers.js deleted file mode 100644 index f26431a1..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/timers.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -module.exports = function(Promise, INTERNAL) { -var util = require("./util.js"); -var TimeoutError = Promise.TimeoutError; - -var afterTimeout = function (promise, message) { - if (!promise.isPending()) return; - - var err; - if(!util.isPrimitive(message) && (message instanceof Error)) { - err = message; - } else { - if (typeof message !== "string") { - message = "operation timed out"; - } - err = new TimeoutError(message); - } - util.markAsOriginatingFromRejection(err); - promise._attachExtraTrace(err); - promise._cancel(err); -}; - -var afterValue = function(value) { return delay(+this).thenReturn(value); }; -var delay = Promise.delay = function (value, ms) { - if (ms === undefined) { - ms = value; - value = undefined; - var ret = new Promise(INTERNAL); - setTimeout(function() { ret._fulfill(); }, ms); - return ret; - } - ms = +ms; - return Promise.resolve(value)._then(afterValue, null, null, ms, undefined); -}; - -Promise.prototype.delay = function (ms) { - return delay(this, ms); -}; - -function successClear(value) { - var handle = this; - if (handle instanceof Number) handle = +handle; - clearTimeout(handle); - return value; -} - -function failureClear(reason) { - var handle = this; - if (handle instanceof Number) handle = +handle; - clearTimeout(handle); - throw reason; -} - -Promise.prototype.timeout = function (ms, message) { - ms = +ms; - var ret = this.then().cancellable(); - ret._cancellationParent = this; - var handle = setTimeout(function timeoutTimeout() { - afterTimeout(ret, message); - }, ms); - return ret._then(successClear, failureClear, undefined, handle, undefined); -}; - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/using.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/using.js deleted file mode 100644 index 957182d0..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/using.js +++ /dev/null @@ -1,213 +0,0 @@ -"use strict"; -module.exports = function (Promise, apiRejection, tryConvertToPromise, - createContext) { - var TypeError = require("./errors.js").TypeError; - var inherits = require("./util.js").inherits; - var PromiseInspection = Promise.PromiseInspection; - - function inspectionMapper(inspections) { - var len = inspections.length; - for (var i = 0; i < len; ++i) { - var inspection = inspections[i]; - if (inspection.isRejected()) { - return Promise.reject(inspection.error()); - } - inspections[i] = inspection._settledValue; - } - return inspections; - } - - function thrower(e) { - setTimeout(function(){throw e;}, 0); - } - - function castPreservingDisposable(thenable) { - var maybePromise = tryConvertToPromise(thenable); - if (maybePromise !== thenable && - typeof thenable._isDisposable === "function" && - typeof thenable._getDisposer === "function" && - thenable._isDisposable()) { - maybePromise._setDisposable(thenable._getDisposer()); - } - return maybePromise; - } - function dispose(resources, inspection) { - var i = 0; - var len = resources.length; - var ret = Promise.defer(); - function iterator() { - if (i >= len) return ret.resolve(); - var maybePromise = castPreservingDisposable(resources[i++]); - if (maybePromise instanceof Promise && - maybePromise._isDisposable()) { - try { - maybePromise = tryConvertToPromise( - maybePromise._getDisposer().tryDispose(inspection), - resources.promise); - } catch (e) { - return thrower(e); - } - if (maybePromise instanceof Promise) { - return maybePromise._then(iterator, thrower, - null, null, null); - } - } - iterator(); - } - iterator(); - return ret.promise; - } - - function disposerSuccess(value) { - var inspection = new PromiseInspection(); - inspection._settledValue = value; - inspection._bitField = 268435456; - return dispose(this, inspection).thenReturn(value); - } - - function disposerFail(reason) { - var inspection = new PromiseInspection(); - inspection._settledValue = reason; - inspection._bitField = 134217728; - return dispose(this, inspection).thenThrow(reason); - } - - function Disposer(data, promise, context) { - this._data = data; - this._promise = promise; - this._context = context; - } - - Disposer.prototype.data = function () { - return this._data; - }; - - Disposer.prototype.promise = function () { - return this._promise; - }; - - Disposer.prototype.resource = function () { - if (this.promise().isFulfilled()) { - return this.promise().value(); - } - return null; - }; - - Disposer.prototype.tryDispose = function(inspection) { - var resource = this.resource(); - var context = this._context; - if (context !== undefined) context._pushContext(); - var ret = resource !== null - ? this.doDispose(resource, inspection) : null; - if (context !== undefined) context._popContext(); - this._promise._unsetDisposable(); - this._data = null; - return ret; - }; - - Disposer.isDisposer = function (d) { - return (d != null && - typeof d.resource === "function" && - typeof d.tryDispose === "function"); - }; - - function FunctionDisposer(fn, promise, context) { - this.constructor$(fn, promise, context); - } - inherits(FunctionDisposer, Disposer); - - FunctionDisposer.prototype.doDispose = function (resource, inspection) { - var fn = this.data(); - return fn.call(resource, resource, inspection); - }; - - function maybeUnwrapDisposer(value) { - if (Disposer.isDisposer(value)) { - this.resources[this.index]._setDisposable(value); - return value.promise(); - } - return value; - } - - Promise.using = function () { - var len = arguments.length; - if (len < 2) return apiRejection( - "you must pass at least 2 arguments to Promise.using"); - var fn = arguments[len - 1]; - if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a"); - - var input; - var spreadArgs = true; - if (len === 2 && Array.isArray(arguments[0])) { - input = arguments[0]; - len = input.length; - spreadArgs = false; - } else { - input = arguments; - len--; - } - var resources = new Array(len); - for (var i = 0; i < len; ++i) { - var resource = input[i]; - if (Disposer.isDisposer(resource)) { - var disposer = resource; - resource = resource.promise(); - resource._setDisposable(disposer); - } else { - var maybePromise = tryConvertToPromise(resource); - if (maybePromise instanceof Promise) { - resource = - maybePromise._then(maybeUnwrapDisposer, null, null, { - resources: resources, - index: i - }, undefined); - } - } - resources[i] = resource; - } - - var promise = Promise.settle(resources) - .then(inspectionMapper) - .then(function(vals) { - promise._pushContext(); - var ret; - try { - ret = spreadArgs - ? fn.apply(undefined, vals) : fn.call(undefined, vals); - } finally { - promise._popContext(); - } - return ret; - }) - ._then( - disposerSuccess, disposerFail, undefined, resources, undefined); - resources.promise = promise; - return promise; - }; - - Promise.prototype._setDisposable = function (disposer) { - this._bitField = this._bitField | 262144; - this._disposer = disposer; - }; - - Promise.prototype._isDisposable = function () { - return (this._bitField & 262144) > 0; - }; - - Promise.prototype._getDisposer = function () { - return this._disposer; - }; - - Promise.prototype._unsetDisposable = function () { - this._bitField = this._bitField & (~262144); - this._disposer = undefined; - }; - - Promise.prototype.disposer = function (fn) { - if (typeof fn === "function") { - return new FunctionDisposer(fn, this, createContext()); - } - throw new TypeError(); - }; - -}; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/util.js b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/util.js deleted file mode 100644 index ea393447..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/js/main/util.js +++ /dev/null @@ -1,321 +0,0 @@ -"use strict"; -var es5 = require("./es5.js"); -var canEvaluate = typeof navigator == "undefined"; -var haveGetters = (function(){ - try { - var o = {}; - es5.defineProperty(o, "f", { - get: function () { - return 3; - } - }); - return o.f === 3; - } - catch (e) { - return false; - } - -})(); - -var errorObj = {e: {}}; -var tryCatchTarget; -function tryCatcher() { - try { - var target = tryCatchTarget; - tryCatchTarget = null; - return target.apply(this, arguments); - } catch (e) { - errorObj.e = e; - return errorObj; - } -} -function tryCatch(fn) { - tryCatchTarget = fn; - return tryCatcher; -} - -var inherits = function(Child, Parent) { - var hasProp = {}.hasOwnProperty; - - function T() { - this.constructor = Child; - this.constructor$ = Parent; - for (var propertyName in Parent.prototype) { - if (hasProp.call(Parent.prototype, propertyName) && - propertyName.charAt(propertyName.length-1) !== "$" - ) { - this[propertyName + "$"] = Parent.prototype[propertyName]; - } - } - } - T.prototype = Parent.prototype; - Child.prototype = new T(); - return Child.prototype; -}; - - -function isPrimitive(val) { - return val == null || val === true || val === false || - typeof val === "string" || typeof val === "number"; - -} - -function isObject(value) { - return !isPrimitive(value); -} - -function maybeWrapAsError(maybeError) { - if (!isPrimitive(maybeError)) return maybeError; - - return new Error(safeToString(maybeError)); -} - -function withAppended(target, appendee) { - var len = target.length; - var ret = new Array(len + 1); - var i; - for (i = 0; i < len; ++i) { - ret[i] = target[i]; - } - ret[i] = appendee; - return ret; -} - -function getDataPropertyOrDefault(obj, key, defaultValue) { - if (es5.isES5) { - var desc = Object.getOwnPropertyDescriptor(obj, key); - - if (desc != null) { - return desc.get == null && desc.set == null - ? desc.value - : defaultValue; - } - } else { - return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; - } -} - -function notEnumerableProp(obj, name, value) { - if (isPrimitive(obj)) return obj; - var descriptor = { - value: value, - configurable: true, - enumerable: false, - writable: true - }; - es5.defineProperty(obj, name, descriptor); - return obj; -} - -function thrower(r) { - throw r; -} - -var inheritedDataKeys = (function() { - var excludedPrototypes = [ - Array.prototype, - Object.prototype, - Function.prototype - ]; - - var isExcludedProto = function(val) { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (excludedPrototypes[i] === val) { - return true; - } - } - return false; - }; - - if (es5.isES5) { - var getKeys = Object.getOwnPropertyNames; - return function(obj) { - var ret = []; - var visitedKeys = Object.create(null); - while (obj != null && !isExcludedProto(obj)) { - var keys; - try { - keys = getKeys(obj); - } catch (e) { - return ret; - } - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (visitedKeys[key]) continue; - visitedKeys[key] = true; - var desc = Object.getOwnPropertyDescriptor(obj, key); - if (desc != null && desc.get == null && desc.set == null) { - ret.push(key); - } - } - obj = es5.getPrototypeOf(obj); - } - return ret; - }; - } else { - var hasProp = {}.hasOwnProperty; - return function(obj) { - if (isExcludedProto(obj)) return []; - var ret = []; - - /*jshint forin:false */ - enumeration: for (var key in obj) { - if (hasProp.call(obj, key)) { - ret.push(key); - } else { - for (var i = 0; i < excludedPrototypes.length; ++i) { - if (hasProp.call(excludedPrototypes[i], key)) { - continue enumeration; - } - } - ret.push(key); - } - } - return ret; - }; - } - -})(); - -var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; -function isClass(fn) { - try { - if (typeof fn === "function") { - var keys = es5.names(fn.prototype); - - var hasMethods = es5.isES5 && keys.length > 1; - var hasMethodsOtherThanConstructor = keys.length > 0 && - !(keys.length === 1 && keys[0] === "constructor"); - var hasThisAssignmentAndStaticMethods = - thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; - - if (hasMethods || hasMethodsOtherThanConstructor || - hasThisAssignmentAndStaticMethods) { - return true; - } - } - return false; - } catch (e) { - return false; - } -} - -function toFastProperties(obj) { - /*jshint -W027,-W055,-W031*/ - function f() {} - f.prototype = obj; - var l = 8; - while (l--) new f(); - return obj; - eval(obj); -} - -var rident = /^[a-z$_][a-z$_0-9]*$/i; -function isIdentifier(str) { - return rident.test(str); -} - -function filledRange(count, prefix, suffix) { - var ret = new Array(count); - for(var i = 0; i < count; ++i) { - ret[i] = prefix + i + suffix; - } - return ret; -} - -function safeToString(obj) { - try { - return obj + ""; - } catch (e) { - return "[no string representation]"; - } -} - -function markAsOriginatingFromRejection(e) { - try { - notEnumerableProp(e, "isOperational", true); - } - catch(ignore) {} -} - -function originatesFromRejection(e) { - if (e == null) return false; - return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || - e["isOperational"] === true); -} - -function canAttachTrace(obj) { - return obj instanceof Error && es5.propertyIsWritable(obj, "stack"); -} - -var ensureErrorObject = (function() { - if (!("stack" in new Error())) { - return function(value) { - if (canAttachTrace(value)) return value; - try {throw new Error(safeToString(value));} - catch(err) {return err;} - }; - } else { - return function(value) { - if (canAttachTrace(value)) return value; - return new Error(safeToString(value)); - }; - } -})(); - -function classString(obj) { - return {}.toString.call(obj); -} - -function copyDescriptors(from, to, filter) { - var keys = es5.names(from); - for (var i = 0; i < keys.length; ++i) { - var key = keys[i]; - if (filter(key)) { - try { - es5.defineProperty(to, key, es5.getDescriptor(from, key)); - } catch (ignore) {} - } - } -} - -var ret = { - isClass: isClass, - isIdentifier: isIdentifier, - inheritedDataKeys: inheritedDataKeys, - getDataPropertyOrDefault: getDataPropertyOrDefault, - thrower: thrower, - isArray: es5.isArray, - haveGetters: haveGetters, - notEnumerableProp: notEnumerableProp, - isPrimitive: isPrimitive, - isObject: isObject, - canEvaluate: canEvaluate, - errorObj: errorObj, - tryCatch: tryCatch, - inherits: inherits, - withAppended: withAppended, - maybeWrapAsError: maybeWrapAsError, - toFastProperties: toFastProperties, - filledRange: filledRange, - toString: safeToString, - canAttachTrace: canAttachTrace, - ensureErrorObject: ensureErrorObject, - originatesFromRejection: originatesFromRejection, - markAsOriginatingFromRejection: markAsOriginatingFromRejection, - classString: classString, - copyDescriptors: copyDescriptors, - hasDevTools: typeof chrome !== "undefined" && chrome && - typeof chrome.loadTimes === "function", - isNode: typeof process !== "undefined" && - classString(process).toLowerCase() === "[object process]" -}; -ret.isRecentNode = ret.isNode && (function() { - var version = process.versions.node.split(".").map(Number); - return (version[0] === 0 && version[1] > 10) || (version[0] > 0); -})(); - -if (ret.isNode) ret.toFastProperties(process); - -try {throw new Error(); } catch (e) {ret.lastLineError = e;} -module.exports = ret; diff --git a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/package.json b/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/package.json deleted file mode 100644 index f524d556..00000000 --- a/truebit-implementation/node_modules/tar.gz/node_modules/bluebird/package.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "_from": "bluebird@^2.9.34", - "_id": "bluebird@2.11.0", - "_inBundle": false, - "_integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "_location": "/tar.gz/bluebird", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "bluebird@^2.9.34", - "name": "bluebird", - "escapedName": "bluebird", - "rawSpec": "^2.9.34", - "saveSpec": null, - "fetchSpec": "^2.9.34" - }, - "_requiredBy": [ - "/tar.gz" - ], - "_resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "_shasum": "534b9033c022c9579c56ba3b3e5a5caafbb650e1", - "_spec": "bluebird@^2.9.34", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar.gz", - "author": { - "name": "Petka Antonov", - "email": "petka_antonov@hotmail.com", - "url": "http://github.com/petkaantonov/" - }, - "browser": "./js/browser/bluebird.js", - "bugs": { - "url": "http://github.com/petkaantonov/bluebird/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Full featured Promises/A+ implementation with exceptionally good performance", - "devDependencies": { - "acorn": "~0.6.0", - "baconjs": "^0.7.43", - "bluebird": "^2.9.2", - "body-parser": "^1.10.2", - "browserify": "^8.1.1", - "cli-table": "~0.3.1", - "co": "^4.2.0", - "cross-spawn": "^0.2.3", - "glob": "^4.3.2", - "grunt-saucelabs": "~8.4.1", - "highland": "^2.3.0", - "istanbul": "^0.3.5", - "jshint": "^2.6.0", - "jshint-stylish": "~0.2.0", - "kefir": "^2.4.1", - "mkdirp": "~0.5.0", - "mocha": "~2.1", - "open": "~0.0.5", - "optimist": "~0.6.1", - "rimraf": "~2.2.6", - "rx": "^2.3.25", - "serve-static": "^1.7.1", - "sinon": "~1.7.3", - "uglify-js": "~2.4.16" - }, - "files": [ - "js/browser", - "js/main", - "js/zalgo", - "zalgo.js" - ], - "homepage": "https://github.com/petkaantonov/bluebird", - "keywords": [ - "promise", - "performance", - "promises", - "promises-a", - "promises-aplus", - "async", - "await", - "deferred", - "deferreds", - "future", - "flow control", - "dsl", - "fluent interface", - "parallel", - "thread", - "concurrency" - ], - "license": "MIT", - "main": "./js/main/bluebird.js", - "name": "bluebird", - "repository": { - "type": "git", - "url": "git://github.com/petkaantonov/bluebird.git" - }, - "scripts": { - "generate-browser-core": "node tools/build.js --features=core --no-debug --main --zalgo --browser --minify && mv js/browser/bluebird.js js/browser/bluebird.core.js && mv js/browser/bluebird.min.js js/browser/bluebird.core.min.js", - "istanbul": "istanbul", - "lint": "node scripts/jshint.js", - "prepublish": "node tools/build.js --no-debug --main --zalgo --browser --minify", - "test": "node tools/test.js" - }, - "version": "2.11.0" -} diff --git a/truebit-implementation/node_modules/tar.gz/package.json b/truebit-implementation/node_modules/tar.gz/package.json deleted file mode 100644 index 40dce85d..00000000 --- a/truebit-implementation/node_modules/tar.gz/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "tar.gz@^1.0.5", - "_id": "tar.gz@1.0.7", - "_inBundle": false, - "_integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", - "_location": "/tar.gz", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "tar.gz@^1.0.5", - "name": "tar.gz", - "escapedName": "tar.gz", - "rawSpec": "^1.0.5", - "saveSpec": null, - "fetchSpec": "^1.0.5" - }, - "_requiredBy": [ - "/swarm-js" - ], - "_resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", - "_shasum": "577ef2c595faaa73452ef0415fed41113212257b", - "_spec": "tar.gz@^1.0.5", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Alan Hoffmeister", - "email": "alanhoffmeister@gmail.com" - }, - "bin": { - "targz": "bin/targz" - }, - "bugs": { - "url": "https://github.com/alanhoff/node-tar.gz/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bluebird": "^2.9.34", - "commander": "^2.8.1", - "fstream": "^1.0.8", - "mout": "^0.11.0", - "tar": "^2.1.1" - }, - "deprecated": "⚠️ WARNING ⚠️ tar.gz module has been deprecated and your application is vulnerable. Please use tar module instead: https://npmjs.com/tar", - "description": "⚠️ DEPRECATED ⚠️ Pure javascript tarball tools for Node.js", - "devDependencies": { - "chai": "^3.2.0", - "coveralls": "^2.11.3", - "istanbul": "^0.3.17", - "mocha": "^2.2.5", - "temp": "^0.8.3" - }, - "homepage": "https://github.com/alanhoff/node-tar.gz#readme", - "keywords": [ - "compression", - "decompression", - "compress", - "decompress", - "tar", - "tape", - "archive", - "tape", - "arquive", - "gzip", - "gz", - "tarball" - ], - "license": "ISC", - "main": "index.js", - "name": "tar.gz", - "repository": { - "type": "git", - "url": "git+https://github.com/alanhoff/node-tar.gz.git" - }, - "scripts": { - "test": "mocha --tdd --bail test/**/*-test.js", - "travis": "istanbul cover ./node_modules/.bin/_mocha --report lcovonly -- -R spec test/**/*-test.js && cat ./coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf ./coverage" - }, - "version": "1.0.7" -} diff --git a/truebit-implementation/node_modules/tar/.npmignore b/truebit-implementation/node_modules/tar/.npmignore deleted file mode 100644 index c167ad5b..00000000 --- a/truebit-implementation/node_modules/tar/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -.*.swp -node_modules -examples/extract/ -test/tmp/ -test/fixtures/ diff --git a/truebit-implementation/node_modules/tar/.travis.yml b/truebit-implementation/node_modules/tar/.travis.yml deleted file mode 100644 index fca8ef01..00000000 --- a/truebit-implementation/node_modules/tar/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.10 - - 0.11 diff --git a/truebit-implementation/node_modules/tar/LICENSE b/truebit-implementation/node_modules/tar/LICENSE deleted file mode 100644 index 019b7e40..00000000 --- a/truebit-implementation/node_modules/tar/LICENSE +++ /dev/null @@ -1,12 +0,0 @@ -The ISC License -Copyright (c) Isaac Z. Schlueter and Contributors -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/tar/README.md b/truebit-implementation/node_modules/tar/README.md deleted file mode 100644 index cfda2ac1..00000000 --- a/truebit-implementation/node_modules/tar/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# node-tar - -Tar for Node.js. - -[![NPM](https://nodei.co/npm/tar.png)](https://nodei.co/npm/tar/) - -## API - -See `examples/` for usage examples. - -### var tar = require('tar') - -Returns an object with `.Pack`, `.Extract` and `.Parse` methods. - -### tar.Pack([properties]) - -Returns a through stream. Use -[fstream](https://npmjs.org/package/fstream) to write files into the -pack stream and you will receive tar archive data from the pack -stream. - -This only works with directories, it does not work with individual files. - -The optional `properties` object are used to set properties in the tar -'Global Extended Header'. If the `fromBase` property is set to true, -the tar will contain files relative to the path passed, and not with -the path included. - -### tar.Extract([options]) - -Returns a through stream. Write tar data to the stream and the files -in the tarball will be extracted onto the filesystem. - -`options` can be: - -```js -{ - path: '/path/to/extract/tar/into', - strip: 0, // how many path segments to strip from the root when extracting -} -``` - -`options` also get passed to the `fstream.Writer` instance that `tar` -uses internally. - -### tar.Parse() - -Returns a writable stream. Write tar data to it and it will emit -`entry` events for each entry parsed from the tarball. This is used by -`tar.Extract`. diff --git a/truebit-implementation/node_modules/tar/examples/extracter.js b/truebit-implementation/node_modules/tar/examples/extracter.js deleted file mode 100644 index f6253a72..00000000 --- a/truebit-implementation/node_modules/tar/examples/extracter.js +++ /dev/null @@ -1,19 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - - -function onError(err) { - console.error('An error occurred:', err) -} - -function onEnd() { - console.log('Extracted!') -} - -var extractor = tar.Extract({path: __dirname + "/extract"}) - .on('error', onError) - .on('end', onEnd); - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .on('error', onError) - .pipe(extractor); diff --git a/truebit-implementation/node_modules/tar/examples/packer.js b/truebit-implementation/node_modules/tar/examples/packer.js deleted file mode 100644 index 039969ce..00000000 --- a/truebit-implementation/node_modules/tar/examples/packer.js +++ /dev/null @@ -1,24 +0,0 @@ -var tar = require("../tar.js") - , fstream = require("fstream") - , fs = require("fs") - -var dirDest = fs.createWriteStream('dir.tar') - - -function onError(err) { - console.error('An error occurred:', err) -} - -function onEnd() { - console.log('Packed!') -} - -var packer = tar.Pack({ noProprietary: true }) - .on('error', onError) - .on('end', onEnd); - -// This must be a "directory" -fstream.Reader({ path: __dirname, type: "Directory" }) - .on('error', onError) - .pipe(packer) - .pipe(dirDest) diff --git a/truebit-implementation/node_modules/tar/examples/reader.js b/truebit-implementation/node_modules/tar/examples/reader.js deleted file mode 100644 index 39f3f088..00000000 --- a/truebit-implementation/node_modules/tar/examples/reader.js +++ /dev/null @@ -1,36 +0,0 @@ -var tar = require("../tar.js") - , fs = require("fs") - -fs.createReadStream(__dirname + "/../test/fixtures/c.tar") - .pipe(tar.Parse()) - .on("extendedHeader", function (e) { - console.error("extended pax header", e.props) - e.on("end", function () { - console.error("extended pax fields:", e.fields) - }) - }) - .on("ignoredEntry", function (e) { - console.error("ignoredEntry?!?", e.props) - }) - .on("longLinkpath", function (e) { - console.error("longLinkpath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("longPath", function (e) { - console.error("longPath entry", e.props) - e.on("end", function () { - console.error("value=%j", e.body.toString()) - }) - }) - .on("entry", function (e) { - console.error("entry", e.props) - e.on("data", function (c) { - console.error(" >>>" + c.toString().replace(/\n/g, "\\n")) - }) - e.on("end", function () { - console.error(" << 0 - return !this._needDrain -} - -EntryWriter.prototype.end = function (c) { - // console.error(".. ew end") - if (c) this._buffer.push(c) - this._buffer.push(EOF) - this._ended = true - this._process() - this._needDrain = this._buffer.length > 0 -} - -EntryWriter.prototype.pause = function () { - // console.error(".. ew pause") - this._paused = true - this.emit("pause") -} - -EntryWriter.prototype.resume = function () { - // console.error(".. ew resume") - this._paused = false - this.emit("resume") - this._process() -} - -EntryWriter.prototype.add = function (entry) { - // console.error(".. ew add") - if (!this.parent) return this.emit("error", new Error("no parent")) - - // make sure that the _header and such is emitted, and clear out - // the _currentEntry link on the parent. - if (!this._ended) this.end() - - return this.parent.add(entry) -} - -EntryWriter.prototype._header = function () { - // console.error(".. ew header") - if (this._didHeader) return - this._didHeader = true - - var headerBlock = TarHeader.encode(this.props) - - if (this.props.needExtended && !this._meta) { - var me = this - - ExtendedHeaderWriter = ExtendedHeaderWriter || - require("./extended-header-writer.js") - - ExtendedHeaderWriter(this.props) - .on("data", function (c) { - me.emit("data", c) - }) - .on("error", function (er) { - me.emit("error", er) - }) - .end() - } - - // console.error(".. .. ew headerBlock emitting") - this.emit("data", headerBlock) - this.emit("header") -} - -EntryWriter.prototype._process = function () { - // console.error(".. .. ew process") - if (!this._didHeader && !this._meta) { - this._header() - } - - if (this._paused || this._processing) { - // console.error(".. .. .. paused=%j, processing=%j", this._paused, this._processing) - return - } - - this._processing = true - - var buf = this._buffer - for (var i = 0; i < buf.length; i ++) { - // console.error(".. .. .. i=%d", i) - - var c = buf[i] - - if (c === EOF) this._stream.end() - else this._stream.write(c) - - if (this._paused) { - // console.error(".. .. .. paused mid-emission") - this._processing = false - if (i < buf.length) { - this._needDrain = true - this._buffer = buf.slice(i + 1) - } - return - } - } - - // console.error(".. .. .. emitted") - this._buffer.length = 0 - this._processing = false - - // console.error(".. .. .. emitting drain") - this.emit("drain") -} - -EntryWriter.prototype.destroy = function () {} diff --git a/truebit-implementation/node_modules/tar/lib/entry.js b/truebit-implementation/node_modules/tar/lib/entry.js deleted file mode 100644 index 591202bd..00000000 --- a/truebit-implementation/node_modules/tar/lib/entry.js +++ /dev/null @@ -1,220 +0,0 @@ -// A passthrough read/write stream that sets its properties -// based on a header, extendedHeader, and globalHeader -// -// Can be either a file system object of some sort, or -// a pax/ustar metadata entry. - -module.exports = Entry - -var TarHeader = require("./header.js") - , tar = require("../tar") - , assert = require("assert").ok - , Stream = require("stream").Stream - , inherits = require("inherits") - , fstream = require("fstream").Abstract - -function Entry (header, extended, global) { - Stream.call(this) - this.readable = true - this.writable = true - - this._needDrain = false - this._paused = false - this._reading = false - this._ending = false - this._ended = false - this._remaining = 0 - this._abort = false - this._queue = [] - this._index = 0 - this._queueLen = 0 - - this._read = this._read.bind(this) - - this.props = {} - this._header = header - this._extended = extended || {} - - // globals can change throughout the course of - // a file parse operation. Freeze it at its current state. - this._global = {} - var me = this - Object.keys(global || {}).forEach(function (g) { - me._global[g] = global[g] - }) - - this._setProps() -} - -inherits(Entry, Stream) - -Entry.prototype.write = function (c) { - if (this._ending) this.error("write() after end()", null, true) - if (this._remaining === 0) { - this.error("invalid bytes past eof") - } - - // often we'll get a bunch of \0 at the end of the last write, - // since chunks will always be 512 bytes when reading a tarball. - if (c.length > this._remaining) { - c = c.slice(0, this._remaining) - } - this._remaining -= c.length - - // put it on the stack. - var ql = this._queueLen - this._queue.push(c) - this._queueLen ++ - - this._read() - - // either paused, or buffered - if (this._paused || ql > 0) { - this._needDrain = true - return false - } - - return true -} - -Entry.prototype.end = function (c) { - if (c) this.write(c) - this._ending = true - this._read() -} - -Entry.prototype.pause = function () { - this._paused = true - this.emit("pause") -} - -Entry.prototype.resume = function () { - // console.error(" Tar Entry resume", this.path) - this.emit("resume") - this._paused = false - this._read() - return this._queueLen - this._index > 1 -} - - // This is bound to the instance -Entry.prototype._read = function () { - // console.error(" Tar Entry _read", this.path) - - if (this._paused || this._reading || this._ended) return - - // set this flag so that event handlers don't inadvertently - // get multiple _read() calls running. - this._reading = true - - // have any data to emit? - while (this._index < this._queueLen && !this._paused) { - var chunk = this._queue[this._index ++] - this.emit("data", chunk) - } - - // check if we're drained - if (this._index >= this._queueLen) { - this._queue.length = this._queueLen = this._index = 0 - if (this._needDrain) { - this._needDrain = false - this.emit("drain") - } - if (this._ending) { - this._ended = true - this.emit("end") - } - } - - // if the queue gets too big, then pluck off whatever we can. - // this should be fairly rare. - var mql = this._maxQueueLen - if (this._queueLen > mql && this._index > 0) { - mql = Math.min(this._index, mql) - this._index -= mql - this._queueLen -= mql - this._queue = this._queue.slice(mql) - } - - this._reading = false -} - -Entry.prototype._setProps = function () { - // props = extended->global->header->{} - var header = this._header - , extended = this._extended - , global = this._global - , props = this.props - - // first get the values from the normal header. - var fields = tar.fields - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = header[field] - if (typeof val !== "undefined") props[field] = val - } - - // next, the global header for this file. - // numeric values, etc, will have already been parsed. - ;[global, extended].forEach(function (p) { - Object.keys(p).forEach(function (f) { - if (typeof p[f] !== "undefined") props[f] = p[f] - }) - }) - - // no nulls allowed in path or linkpath - ;["path", "linkpath"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = props[p].split("\0")[0] - } - }) - - - // set date fields to be a proper date - ;["mtime", "ctime", "atime"].forEach(function (p) { - if (props.hasOwnProperty(p)) { - props[p] = new Date(props[p] * 1000) - } - }) - - // set the type so that we know what kind of file to create - var type - switch (tar.types[props.type]) { - case "OldFile": - case "ContiguousFile": - type = "File" - break - - case "GNUDumpDir": - type = "Directory" - break - - case undefined: - type = "Unknown" - break - - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - default: - type = tar.types[props.type] - } - - this.type = type - this.path = props.path - this.size = props.size - - // size is special, since it signals when the file needs to end. - this._remaining = props.size -} - -// the parser may not call write if _abort is true. -// useful for skipping data from some files quickly. -Entry.prototype.abort = function(){ - this._abort = true -} - -Entry.prototype.warn = fstream.warn -Entry.prototype.error = fstream.error diff --git a/truebit-implementation/node_modules/tar/lib/extended-header-writer.js b/truebit-implementation/node_modules/tar/lib/extended-header-writer.js deleted file mode 100644 index 1728c458..00000000 --- a/truebit-implementation/node_modules/tar/lib/extended-header-writer.js +++ /dev/null @@ -1,191 +0,0 @@ - -module.exports = ExtendedHeaderWriter - -var inherits = require("inherits") - , EntryWriter = require("./entry-writer.js") - -inherits(ExtendedHeaderWriter, EntryWriter) - -var tar = require("../tar.js") - , path = require("path") - , TarHeader = require("./header.js") - -// props is the props of the thing we need to write an -// extended header for. -// Don't be shy with it. Just encode everything. -function ExtendedHeaderWriter (props) { - // console.error(">> ehw ctor") - var me = this - - if (!(me instanceof ExtendedHeaderWriter)) { - return new ExtendedHeaderWriter(props) - } - - me.fields = props - - var p = - { path : ("PaxHeader" + path.join("/", props.path || "")) - .replace(/\\/g, "/").substr(0, 100) - , mode : props.mode || 0666 - , uid : props.uid || 0 - , gid : props.gid || 0 - , size : 0 // will be set later - , mtime : props.mtime || Date.now() / 1000 - , type : "x" - , linkpath : "" - , ustar : "ustar\0" - , ustarver : "00" - , uname : props.uname || "" - , gname : props.gname || "" - , devmaj : props.devmaj || 0 - , devmin : props.devmin || 0 - } - - - EntryWriter.call(me, p) - // console.error(">> ehw props", me.props) - me.props = p - - me._meta = true -} - -ExtendedHeaderWriter.prototype.end = function () { - // console.error(">> ehw end") - var me = this - - if (me._ended) return - me._ended = true - - me._encodeFields() - - if (me.props.size === 0) { - // nothing to write! - me._ready = true - me._stream.end() - return - } - - me._stream.write(TarHeader.encode(me.props)) - me.body.forEach(function (l) { - me._stream.write(l) - }) - me._ready = true - - // console.error(">> ehw _process calling end()", me.props) - this._stream.end() -} - -ExtendedHeaderWriter.prototype._encodeFields = function () { - // console.error(">> ehw _encodeFields") - this.body = [] - if (this.fields.prefix) { - this.fields.path = this.fields.prefix + "/" + this.fields.path - this.fields.prefix = "" - } - encodeFields(this.fields, "", this.body, this.fields.noProprietary) - var me = this - this.body.forEach(function (l) { - me.props.size += l.length - }) -} - -function encodeFields (fields, prefix, body, nop) { - // console.error(">> >> ehw encodeFields") - // "%d %s=%s\n", , , - // The length is a decimal number, and includes itself and the \n - // Numeric values are decimal strings. - - Object.keys(fields).forEach(function (k) { - var val = fields[k] - , numeric = tar.numeric[k] - - if (prefix) k = prefix + "." + k - - // already including NODETAR.type, don't need File=true also - if (k === fields.type && val === true) return - - switch (k) { - // don't include anything that's always handled just fine - // in the normal header, or only meaningful in the context - // of nodetar - case "mode": - case "cksum": - case "ustar": - case "ustarver": - case "prefix": - case "basename": - case "dirname": - case "needExtended": - case "block": - case "filter": - return - - case "rdev": - if (val === 0) return - break - - case "nlink": - case "dev": // Truly a hero among men, Creator of Star! - case "ino": // Speak his name with reverent awe! It is: - k = "SCHILY." + k - break - - default: break - } - - if (val && typeof val === "object" && - !Buffer.isBuffer(val)) encodeFields(val, k, body, nop) - else if (val === null || val === undefined) return - else body.push.apply(body, encodeField(k, val, nop)) - }) - - return body -} - -function encodeField (k, v, nop) { - // lowercase keys must be valid, otherwise prefix with - // "NODETAR." - if (k.charAt(0) === k.charAt(0).toLowerCase()) { - var m = k.split(".")[0] - if (!tar.knownExtended[m]) k = "NODETAR." + k - } - - // no proprietary - if (nop && k.charAt(0) !== k.charAt(0).toLowerCase()) { - return [] - } - - if (typeof val === "number") val = val.toString(10) - - var s = new Buffer(" " + k + "=" + v + "\n") - , digits = Math.floor(Math.log(s.length) / Math.log(10)) + 1 - - // console.error("1 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - // if adding that many digits will make it go over that length, - // then add one to it. For example, if the string is: - // " foo=bar\n" - // then that's 9 characters. With the "9", that bumps the length - // up to 10. However, this is invalid: - // "10 foo=bar\n" - // but, since that's actually 11 characters, since 10 adds another - // character to the length, and the length includes the number - // itself. In that case, just bump it up again. - if (s.length + digits >= Math.pow(10, digits)) digits += 1 - // console.error("2 s=%j digits=%j s.length=%d", s.toString(), digits, s.length) - - var len = digits + s.length - // console.error("3 s=%j digits=%j s.length=%d len=%d", s.toString(), digits, s.length, len) - var lenBuf = new Buffer("" + len) - if (lenBuf.length + s.length !== len) { - throw new Error("Bad length calculation\n"+ - "len="+len+"\n"+ - "lenBuf="+JSON.stringify(lenBuf.toString())+"\n"+ - "lenBuf.length="+lenBuf.length+"\n"+ - "digits="+digits+"\n"+ - "s="+JSON.stringify(s.toString())+"\n"+ - "s.length="+s.length) - } - - return [lenBuf, s] -} diff --git a/truebit-implementation/node_modules/tar/lib/extended-header.js b/truebit-implementation/node_modules/tar/lib/extended-header.js deleted file mode 100644 index 74f432ce..00000000 --- a/truebit-implementation/node_modules/tar/lib/extended-header.js +++ /dev/null @@ -1,140 +0,0 @@ -// An Entry consisting of: -// -// "%d %s=%s\n", , , -// -// The length is a decimal number, and includes itself and the \n -// \0 does not terminate anything. Only the length terminates the string. -// Numeric values are decimal strings. - -module.exports = ExtendedHeader - -var Entry = require("./entry.js") - , inherits = require("inherits") - , tar = require("../tar.js") - , numeric = tar.numeric - , keyTrans = { "SCHILY.dev": "dev" - , "SCHILY.ino": "ino" - , "SCHILY.nlink": "nlink" } - -function ExtendedHeader () { - Entry.apply(this, arguments) - this.on("data", this._parse) - this.fields = {} - this._position = 0 - this._fieldPos = 0 - this._state = SIZE - this._sizeBuf = [] - this._keyBuf = [] - this._valBuf = [] - this._size = -1 - this._key = "" -} - -inherits(ExtendedHeader, Entry) -ExtendedHeader.prototype._parse = parse - -var s = 0 - , states = ExtendedHeader.states = {} - , SIZE = states.SIZE = s++ - , KEY = states.KEY = s++ - , VAL = states.VAL = s++ - , ERR = states.ERR = s++ - -Object.keys(states).forEach(function (s) { - states[states[s]] = states[s] -}) - -states[s] = null - -// char code values for comparison -var _0 = "0".charCodeAt(0) - , _9 = "9".charCodeAt(0) - , point = ".".charCodeAt(0) - , a = "a".charCodeAt(0) - , Z = "Z".charCodeAt(0) - , a = "a".charCodeAt(0) - , z = "z".charCodeAt(0) - , space = " ".charCodeAt(0) - , eq = "=".charCodeAt(0) - , cr = "\n".charCodeAt(0) - -function parse (c) { - if (this._state === ERR) return - - for ( var i = 0, l = c.length - ; i < l - ; this._position++, this._fieldPos++, i++) { - // console.error("top of loop, size="+this._size) - - var b = c[i] - - if (this._size >= 0 && this._fieldPos > this._size) { - error(this, "field exceeds length="+this._size) - return - } - - switch (this._state) { - case ERR: return - - case SIZE: - // console.error("parsing size, b=%d, rest=%j", b, c.slice(i).toString()) - if (b === space) { - this._state = KEY - // this._fieldPos = this._sizeBuf.length - this._size = parseInt(new Buffer(this._sizeBuf).toString(), 10) - this._sizeBuf.length = 0 - continue - } - if (b < _0 || b > _9) { - error(this, "expected [" + _0 + ".." + _9 + "], got " + b) - return - } - this._sizeBuf.push(b) - continue - - case KEY: - // can be any char except =, not > size. - if (b === eq) { - this._state = VAL - this._key = new Buffer(this._keyBuf).toString() - if (keyTrans[this._key]) this._key = keyTrans[this._key] - this._keyBuf.length = 0 - continue - } - this._keyBuf.push(b) - continue - - case VAL: - // field must end with cr - if (this._fieldPos === this._size - 1) { - // console.error("finished with "+this._key) - if (b !== cr) { - error(this, "expected \\n at end of field") - return - } - var val = new Buffer(this._valBuf).toString() - if (numeric[this._key]) { - val = parseFloat(val) - } - this.fields[this._key] = val - - this._valBuf.length = 0 - this._state = SIZE - this._size = -1 - this._fieldPos = -1 - continue - } - this._valBuf.push(b) - continue - } - } -} - -function error (me, msg) { - msg = "invalid header: " + msg - + "\nposition=" + me._position - + "\nfield position=" + me._fieldPos - - me.error(msg) - me.state = ERR -} diff --git a/truebit-implementation/node_modules/tar/lib/extract.js b/truebit-implementation/node_modules/tar/lib/extract.js deleted file mode 100644 index fe1bb976..00000000 --- a/truebit-implementation/node_modules/tar/lib/extract.js +++ /dev/null @@ -1,94 +0,0 @@ -// give it a tarball and a path, and it'll dump the contents - -module.exports = Extract - -var tar = require("../tar.js") - , fstream = require("fstream") - , inherits = require("inherits") - , path = require("path") - -function Extract (opts) { - if (!(this instanceof Extract)) return new Extract(opts) - tar.Parse.apply(this) - - if (typeof opts !== "object") { - opts = { path: opts } - } - - // better to drop in cwd? seems more standard. - opts.path = opts.path || path.resolve("node-tar-extract") - opts.type = "Directory" - opts.Directory = true - - // similar to --strip or --strip-components - opts.strip = +opts.strip - if (!opts.strip || opts.strip <= 0) opts.strip = 0 - - this._fst = fstream.Writer(opts) - - this.pause() - var me = this - - // Hardlinks in tarballs are relative to the root - // of the tarball. So, they need to be resolved against - // the target directory in order to be created properly. - me.on("entry", function (entry) { - // if there's a "strip" argument, then strip off that many - // path components. - if (opts.strip) { - var p = entry.path.split("/").slice(opts.strip).join("/") - entry.path = entry.props.path = p - if (entry.linkpath) { - var lp = entry.linkpath.split("/").slice(opts.strip).join("/") - entry.linkpath = entry.props.linkpath = lp - } - } - if (entry.type === "Link") { - entry.linkpath = entry.props.linkpath = - path.join(opts.path, path.join("/", entry.props.linkpath)) - } - - if (entry.type === "SymbolicLink") { - var dn = path.dirname(entry.path) || "" - var linkpath = entry.props.linkpath - var target = path.resolve(opts.path, dn, linkpath) - if (target.indexOf(opts.path) !== 0) { - linkpath = path.join(opts.path, path.join("/", linkpath)) - } - entry.linkpath = entry.props.linkpath = linkpath - } - }) - - this._fst.on("ready", function () { - me.pipe(me._fst, { end: false }) - me.resume() - }) - - this._fst.on('error', function(err) { - me.emit('error', err) - }) - - this._fst.on('drain', function() { - me.emit('drain') - }) - - // this._fst.on("end", function () { - // console.error("\nEEEE Extract End", me._fst.path) - // }) - - this._fst.on("close", function () { - // console.error("\nEEEE Extract End", me._fst.path) - me.emit("finish") - me.emit("end") - me.emit("close") - }) -} - -inherits(Extract, tar.Parse) - -Extract.prototype._streamEnd = function () { - var me = this - if (!me._ended || me._entry) me.error("unexpected eof") - me._fst.end() - // my .end() is coming later. -} diff --git a/truebit-implementation/node_modules/tar/lib/global-header-writer.js b/truebit-implementation/node_modules/tar/lib/global-header-writer.js deleted file mode 100644 index 0bfc7b80..00000000 --- a/truebit-implementation/node_modules/tar/lib/global-header-writer.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = GlobalHeaderWriter - -var ExtendedHeaderWriter = require("./extended-header-writer.js") - , inherits = require("inherits") - -inherits(GlobalHeaderWriter, ExtendedHeaderWriter) - -function GlobalHeaderWriter (props) { - if (!(this instanceof GlobalHeaderWriter)) { - return new GlobalHeaderWriter(props) - } - ExtendedHeaderWriter.call(this, props) - this.props.type = "g" -} diff --git a/truebit-implementation/node_modules/tar/lib/header.js b/truebit-implementation/node_modules/tar/lib/header.js deleted file mode 100644 index 05b237c0..00000000 --- a/truebit-implementation/node_modules/tar/lib/header.js +++ /dev/null @@ -1,385 +0,0 @@ -// parse a 512-byte header block to a data object, or vice-versa -// If the data won't fit nicely in a simple header, then generate -// the appropriate extended header file, and return that. - -module.exports = TarHeader - -var tar = require("../tar.js") - , fields = tar.fields - , fieldOffs = tar.fieldOffs - , fieldEnds = tar.fieldEnds - , fieldSize = tar.fieldSize - , numeric = tar.numeric - , assert = require("assert").ok - , space = " ".charCodeAt(0) - , slash = "/".charCodeAt(0) - , bslash = process.platform === "win32" ? "\\".charCodeAt(0) : null - -function TarHeader (block) { - if (!(this instanceof TarHeader)) return new TarHeader(block) - if (block) this.decode(block) -} - -TarHeader.prototype = - { decode : decode - , encode: encode - , calcSum: calcSum - , checkSum: checkSum - } - -TarHeader.parseNumeric = parseNumeric -TarHeader.encode = encode -TarHeader.decode = decode - -// note that this will only do the normal ustar header, not any kind -// of extended posix header file. If something doesn't fit comfortably, -// then it will set obj.needExtended = true, and set the block to -// the closest approximation. -function encode (obj) { - if (!obj && !(this instanceof TarHeader)) throw new Error( - "encode must be called on a TarHeader, or supplied an object") - - obj = obj || this - var block = obj.block = new Buffer(512) - - // if the object has a "prefix", then that's actually an extension of - // the path field. - if (obj.prefix) { - // console.error("%% header encoding, got a prefix", obj.prefix) - obj.path = obj.prefix + "/" + obj.path - // console.error("%% header encoding, prefixed path", obj.path) - obj.prefix = "" - } - - obj.needExtended = false - - if (obj.mode) { - if (typeof obj.mode === "string") obj.mode = parseInt(obj.mode, 8) - obj.mode = obj.mode & 0777 - } - - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , off = fieldOffs[f] - , end = fieldEnds[f] - , ret - - switch (field) { - case "cksum": - // special, done below, after all the others - break - - case "prefix": - // special, this is an extension of the "path" field. - // console.error("%% header encoding, skip prefix later") - break - - case "type": - // convert from long name to a single char. - var type = obj.type || "0" - if (type.length > 1) { - type = tar.types[obj.type] - if (!type) type = "0" - } - writeText(block, off, end, type) - break - - case "path": - // uses the "prefix" field if > 100 bytes, but <= 255 - var pathLen = Buffer.byteLength(obj.path) - , pathFSize = fieldSize[fields.path] - , prefFSize = fieldSize[fields.prefix] - - // paths between 100 and 255 should use the prefix field. - // longer than 255 - if (pathLen > pathFSize && - pathLen <= pathFSize + prefFSize) { - // need to find a slash somewhere in the middle so that - // path and prefix both fit in their respective fields - var searchStart = pathLen - 1 - pathFSize - , searchEnd = prefFSize - , found = false - , pathBuf = new Buffer(obj.path) - - for ( var s = searchStart - ; (s <= searchEnd) - ; s ++ ) { - if (pathBuf[s] === slash || pathBuf[s] === bslash) { - found = s - break - } - } - - if (found !== false) { - prefix = pathBuf.slice(0, found).toString("utf8") - path = pathBuf.slice(found + 1).toString("utf8") - - ret = writeText(block, off, end, path) - off = fieldOffs[fields.prefix] - end = fieldEnds[fields.prefix] - // console.error("%% header writing prefix", off, end, prefix) - ret = writeText(block, off, end, prefix) || ret - break - } - } - - // paths less than 100 chars don't need a prefix - // and paths longer than 255 need an extended header and will fail - // on old implementations no matter what we do here. - // Null out the prefix, and fallthrough to default. - // console.error("%% header writing no prefix") - var poff = fieldOffs[fields.prefix] - , pend = fieldEnds[fields.prefix] - writeText(block, poff, pend, "") - // fallthrough - - // all other fields are numeric or text - default: - ret = numeric[field] - ? writeNumeric(block, off, end, obj[field]) - : writeText(block, off, end, obj[field] || "") - break - } - obj.needExtended = obj.needExtended || ret - } - - var off = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - writeNumeric(block, off, end, calcSum.call(this, block)) - - return block -} - -// if it's a negative number, or greater than will fit, -// then use write256. -var MAXNUM = { 12: 077777777777 - , 11: 07777777777 - , 8 : 07777777 - , 7 : 0777777 } -function writeNumeric (block, off, end, num) { - var writeLen = end - off - , maxNum = MAXNUM[writeLen] || 0 - - num = num || 0 - // console.error(" numeric", num) - - if (num instanceof Date || - Object.prototype.toString.call(num) === "[object Date]") { - num = num.getTime() / 1000 - } - - if (num > maxNum || num < 0) { - write256(block, off, end, num) - // need an extended header if negative or too big. - return true - } - - // god, tar is so annoying - // if the string is small enough, you should put a space - // between the octal string and the \0, but if it doesn't - // fit, then don't. - var numStr = Math.floor(num).toString(8) - if (num < MAXNUM[writeLen - 1]) numStr += " " - - // pad with "0" chars - if (numStr.length < writeLen) { - numStr = (new Array(writeLen - numStr.length).join("0")) + numStr - } - - if (numStr.length !== writeLen - 1) { - throw new Error("invalid length: " + JSON.stringify(numStr) + "\n" + - "expected: "+writeLen) - } - block.write(numStr, off, writeLen, "utf8") - block[end - 1] = 0 -} - -function write256 (block, off, end, num) { - var buf = block.slice(off, end) - var positive = num >= 0 - buf[0] = positive ? 0x80 : 0xFF - - // get the number as a base-256 tuple - if (!positive) num *= -1 - var tuple = [] - do { - var n = num % 256 - tuple.push(n) - num = (num - n) / 256 - } while (num) - - var bytes = tuple.length - - var fill = buf.length - bytes - for (var i = 1; i < fill; i ++) { - buf[i] = positive ? 0 : 0xFF - } - - // tuple is a base256 number, with [0] as the *least* significant byte - // if it's negative, then we need to flip all the bits once we hit the - // first non-zero bit. The 2's-complement is (0x100 - n), and the 1's- - // complement is (0xFF - n). - var zero = true - for (i = bytes; i > 0; i --) { - var byte = tuple[bytes - i] - if (positive) buf[fill + i] = byte - else if (zero && byte === 0) buf[fill + i] = 0 - else if (zero) { - zero = false - buf[fill + i] = 0x100 - byte - } else buf[fill + i] = 0xFF - byte - } -} - -function writeText (block, off, end, str) { - // strings are written as utf8, then padded with \0 - var strLen = Buffer.byteLength(str) - , writeLen = Math.min(strLen, end - off) - // non-ascii fields need extended headers - // long fields get truncated - , needExtended = strLen !== str.length || strLen > writeLen - - // write the string, and null-pad - if (writeLen > 0) block.write(str, off, writeLen, "utf8") - for (var i = off + writeLen; i < end; i ++) block[i] = 0 - - return needExtended -} - -function calcSum (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - if (!block) throw new Error("Need block to checksum") - - // now figure out what it would be if the cksum was " " - var sum = 0 - , start = fieldOffs[fields.cksum] - , end = fieldEnds[fields.cksum] - - for (var i = 0; i < fieldOffs[fields.cksum]; i ++) { - sum += block[i] - } - - for (var i = start; i < end; i ++) { - sum += space - } - - for (var i = end; i < 512; i ++) { - sum += block[i] - } - - return sum -} - - -function checkSum (block) { - var sum = calcSum.call(this, block) - block = block || this.block - - var cksum = block.slice(fieldOffs[fields.cksum], fieldEnds[fields.cksum]) - cksum = parseNumeric(cksum) - - return cksum === sum -} - -function decode (block) { - block = block || this.block - assert(Buffer.isBuffer(block) && block.length === 512) - - this.block = block - this.cksumValid = this.checkSum() - - var prefix = null - - // slice off each field. - for (var f = 0; fields[f] !== null; f ++) { - var field = fields[f] - , val = block.slice(fieldOffs[f], fieldEnds[f]) - - switch (field) { - case "ustar": - // if not ustar, then everything after that is just padding. - if (val.toString() !== "ustar\0") { - this.ustar = false - return - } else { - // console.error("ustar:", val, val.toString()) - this.ustar = val.toString() - } - break - - // prefix is special, since it might signal the xstar header - case "prefix": - var atime = parseNumeric(val.slice(131, 131 + 12)) - , ctime = parseNumeric(val.slice(131 + 12, 131 + 12 + 12)) - if ((val[130] === 0 || val[130] === space) && - typeof atime === "number" && - typeof ctime === "number" && - val[131 + 12] === space && - val[131 + 12 + 12] === space) { - this.atime = atime - this.ctime = ctime - val = val.slice(0, 130) - } - prefix = val.toString("utf8").replace(/\0+$/, "") - // console.error("%% header reading prefix", prefix) - break - - // all other fields are null-padding text - // or a number. - default: - if (numeric[field]) { - this[field] = parseNumeric(val) - } else { - this[field] = val.toString("utf8").replace(/\0+$/, "") - } - break - } - } - - // if we got a prefix, then prepend it to the path. - if (prefix) { - this.path = prefix + "/" + this.path - // console.error("%% header got a prefix", this.path) - } -} - -function parse256 (buf) { - // first byte MUST be either 80 or FF - // 80 for positive, FF for 2's comp - var positive - if (buf[0] === 0x80) positive = true - else if (buf[0] === 0xFF) positive = false - else return null - - // build up a base-256 tuple from the least sig to the highest - var zero = false - , tuple = [] - for (var i = buf.length - 1; i > 0; i --) { - var byte = buf[i] - if (positive) tuple.push(byte) - else if (zero && byte === 0) tuple.push(0) - else if (zero) { - zero = false - tuple.push(0x100 - byte) - } else tuple.push(0xFF - byte) - } - - for (var sum = 0, i = 0, l = tuple.length; i < l; i ++) { - sum += tuple[i] * Math.pow(256, i) - } - - return positive ? sum : -1 * sum -} - -function parseNumeric (f) { - if (f[0] & 0x80) return parse256(f) - - var str = f.toString("utf8").split("\0")[0].trim() - , res = parseInt(str, 8) - - return isNaN(res) ? null : res -} - diff --git a/truebit-implementation/node_modules/tar/lib/pack.js b/truebit-implementation/node_modules/tar/lib/pack.js deleted file mode 100644 index 5a3bb95a..00000000 --- a/truebit-implementation/node_modules/tar/lib/pack.js +++ /dev/null @@ -1,236 +0,0 @@ -// pipe in an fstream, and it'll make a tarball. -// key-value pair argument is global extended header props. - -module.exports = Pack - -var EntryWriter = require("./entry-writer.js") - , Stream = require("stream").Stream - , path = require("path") - , inherits = require("inherits") - , GlobalHeaderWriter = require("./global-header-writer.js") - , collect = require("fstream").collect - , eof = new Buffer(512) - -for (var i = 0; i < 512; i ++) eof[i] = 0 - -inherits(Pack, Stream) - -function Pack (props) { - // console.error("-- p ctor") - var me = this - if (!(me instanceof Pack)) return new Pack(props) - - if (props) me._noProprietary = props.noProprietary - else me._noProprietary = false - - me._global = props - - me.readable = true - me.writable = true - me._buffer = [] - // console.error("-- -- set current to null in ctor") - me._currentEntry = null - me._processing = false - - me._pipeRoot = null - me.on("pipe", function (src) { - if (src.root === me._pipeRoot) return - me._pipeRoot = src - src.on("end", function () { - me._pipeRoot = null - }) - me.add(src) - }) -} - -Pack.prototype.addGlobal = function (props) { - // console.error("-- p addGlobal") - if (this._didGlobal) return - this._didGlobal = true - - var me = this - GlobalHeaderWriter(props) - .on("data", function (c) { - me.emit("data", c) - }) - .end() -} - -Pack.prototype.add = function (stream) { - if (this._global && !this._didGlobal) this.addGlobal(this._global) - - if (this._ended) return this.emit("error", new Error("add after end")) - - collect(stream) - this._buffer.push(stream) - this._process() - this._needDrain = this._buffer.length > 0 - return !this._needDrain -} - -Pack.prototype.pause = function () { - this._paused = true - if (this._currentEntry) this._currentEntry.pause() - this.emit("pause") -} - -Pack.prototype.resume = function () { - this._paused = false - if (this._currentEntry) this._currentEntry.resume() - this.emit("resume") - this._process() -} - -Pack.prototype.end = function () { - this._ended = true - this._buffer.push(eof) - this._process() -} - -Pack.prototype._process = function () { - var me = this - if (me._paused || me._processing) { - return - } - - var entry = me._buffer.shift() - - if (!entry) { - if (me._needDrain) { - me.emit("drain") - } - return - } - - if (entry.ready === false) { - // console.error("-- entry is not ready", entry) - me._buffer.unshift(entry) - entry.on("ready", function () { - // console.error("-- -- ready!", entry) - me._process() - }) - return - } - - me._processing = true - - if (entry === eof) { - // need 2 ending null blocks. - me.emit("data", eof) - me.emit("data", eof) - me.emit("end") - me.emit("close") - return - } - - // Change the path to be relative to the root dir that was - // added to the tarball. - // - // XXX This should be more like how -C works, so you can - // explicitly set a root dir, and also explicitly set a pathname - // in the tarball to use. That way we can skip a lot of extra - // work when resolving symlinks for bundled dependencies in npm. - - var root = path.dirname((entry.root || entry).path); - if (me._global && me._global.fromBase && entry.root && entry.root.path) { - // user set 'fromBase: true' indicating tar root should be directory itself - root = entry.root.path; - } - - var wprops = {} - - Object.keys(entry.props || {}).forEach(function (k) { - wprops[k] = entry.props[k] - }) - - if (me._noProprietary) wprops.noProprietary = true - - wprops.path = path.relative(root, entry.path || '') - - // actually not a matter of opinion or taste. - if (process.platform === "win32") { - wprops.path = wprops.path.replace(/\\/g, "/") - } - - if (!wprops.type) - wprops.type = 'Directory' - - switch (wprops.type) { - // sockets not supported - case "Socket": - return - - case "Directory": - wprops.path += "/" - wprops.size = 0 - break - - case "Link": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(root, lp) || "." - wprops.size = 0 - break - - case "SymbolicLink": - var lp = path.resolve(path.dirname(entry.path), entry.linkpath) - wprops.linkpath = path.relative(path.dirname(entry.path), lp) || "." - wprops.size = 0 - break - } - - // console.error("-- new writer", wprops) - // if (!wprops.type) { - // // console.error("-- no type?", entry.constructor.name, entry) - // } - - // console.error("-- -- set current to new writer", wprops.path) - var writer = me._currentEntry = EntryWriter(wprops) - - writer.parent = me - - // writer.on("end", function () { - // // console.error("-- -- writer end", writer.path) - // }) - - writer.on("data", function (c) { - me.emit("data", c) - }) - - writer.on("header", function () { - Buffer.prototype.toJSON = function () { - return this.toString().split(/\0/).join(".") - } - // console.error("-- -- writer header %j", writer.props) - if (writer.props.size === 0) nextEntry() - }) - writer.on("close", nextEntry) - - var ended = false - function nextEntry () { - if (ended) return - ended = true - - // console.error("-- -- writer close", writer.path) - // console.error("-- -- set current to null", wprops.path) - me._currentEntry = null - me._processing = false - me._process() - } - - writer.on("error", function (er) { - // console.error("-- -- writer error", writer.path) - me.emit("error", er) - }) - - // if it's the root, then there's no need to add its entries, - // or data, since they'll be added directly. - if (entry === me._pipeRoot) { - // console.error("-- is the root, don't auto-add") - writer.add = null - } - - entry.pipe(writer) -} - -Pack.prototype.destroy = function () {} -Pack.prototype.write = function () {} diff --git a/truebit-implementation/node_modules/tar/lib/parse.js b/truebit-implementation/node_modules/tar/lib/parse.js deleted file mode 100644 index 600ad782..00000000 --- a/truebit-implementation/node_modules/tar/lib/parse.js +++ /dev/null @@ -1,275 +0,0 @@ - -// A writable stream. -// It emits "entry" events, which provide a readable stream that has -// header info attached. - -module.exports = Parse.create = Parse - -var stream = require("stream") - , Stream = stream.Stream - , BlockStream = require("block-stream") - , tar = require("../tar.js") - , TarHeader = require("./header.js") - , Entry = require("./entry.js") - , BufferEntry = require("./buffer-entry.js") - , ExtendedHeader = require("./extended-header.js") - , assert = require("assert").ok - , inherits = require("inherits") - , fstream = require("fstream") - -// reading a tar is a lot like reading a directory -// However, we're actually not going to run the ctor, -// since it does a stat and various other stuff. -// This inheritance gives us the pause/resume/pipe -// behavior that is desired. -inherits(Parse, fstream.Reader) - -function Parse () { - var me = this - if (!(me instanceof Parse)) return new Parse() - - // doesn't apply fstream.Reader ctor? - // no, becasue we don't want to stat/etc, we just - // want to get the entry/add logic from .pipe() - Stream.apply(me) - - me.writable = true - me.readable = true - me._stream = new BlockStream(512) - me.position = 0 - me._ended = false - - me._stream.on("error", function (e) { - me.emit("error", e) - }) - - me._stream.on("data", function (c) { - me._process(c) - }) - - me._stream.on("end", function () { - me._streamEnd() - }) - - me._stream.on("drain", function () { - me.emit("drain") - }) -} - -// overridden in Extract class, since it needs to -// wait for its DirWriter part to finish before -// emitting "end" -Parse.prototype._streamEnd = function () { - var me = this - if (!me._ended || me._entry) me.error("unexpected eof") - me.emit("end") -} - -// a tar reader is actually a filter, not just a readable stream. -// So, you should pipe a tarball stream into it, and it needs these -// write/end methods to do that. -Parse.prototype.write = function (c) { - if (this._ended) { - // gnutar puts a LOT of nulls at the end. - // you can keep writing these things forever. - // Just ignore them. - for (var i = 0, l = c.length; i > l; i ++) { - if (c[i] !== 0) return this.error("write() after end()") - } - return - } - return this._stream.write(c) -} - -Parse.prototype.end = function (c) { - this._ended = true - return this._stream.end(c) -} - -// don't need to do anything, since we're just -// proxying the data up from the _stream. -// Just need to override the parent's "Not Implemented" -// error-thrower. -Parse.prototype._read = function () {} - -Parse.prototype._process = function (c) { - assert(c && c.length === 512, "block size should be 512") - - // one of three cases. - // 1. A new header - // 2. A part of a file/extended header - // 3. One of two or more EOF null blocks - - if (this._entry) { - var entry = this._entry - if(!entry._abort) entry.write(c) - else { - entry._remaining -= c.length - if(entry._remaining < 0) entry._remaining = 0 - } - if (entry._remaining === 0) { - entry.end() - this._entry = null - } - } else { - // either zeroes or a header - var zero = true - for (var i = 0; i < 512 && zero; i ++) { - zero = c[i] === 0 - } - - // eof is *at least* 2 blocks of nulls, and then the end of the - // file. you can put blocks of nulls between entries anywhere, - // so appending one tarball to another is technically valid. - // ending without the eof null blocks is not allowed, however. - if (zero) { - if (this._eofStarted) - this._ended = true - this._eofStarted = true - } else { - this._eofStarted = false - this._startEntry(c) - } - } - - this.position += 512 -} - -// take a header chunk, start the right kind of entry. -Parse.prototype._startEntry = function (c) { - var header = new TarHeader(c) - , self = this - , entry - , ev - , EntryType - , onend - , meta = false - - if (null === header.size || !header.cksumValid) { - var e = new Error("invalid tar file") - e.header = header - e.tar_file_offset = this.position - e.tar_block = this.position / 512 - return this.emit("error", e) - } - - switch (tar.types[header.type]) { - case "File": - case "OldFile": - case "Link": - case "SymbolicLink": - case "CharacterDevice": - case "BlockDevice": - case "Directory": - case "FIFO": - case "ContiguousFile": - case "GNUDumpDir": - // start a file. - // pass in any extended headers - // These ones consumers are typically most interested in. - EntryType = Entry - ev = "entry" - break - - case "GlobalExtendedHeader": - // extended headers that apply to the rest of the tarball - EntryType = ExtendedHeader - onend = function () { - self._global = self._global || {} - Object.keys(entry.fields).forEach(function (k) { - self._global[k] = entry.fields[k] - }) - } - ev = "globalExtendedHeader" - meta = true - break - - case "ExtendedHeader": - case "OldExtendedHeader": - // extended headers that apply to the next entry - EntryType = ExtendedHeader - onend = function () { - self._extended = entry.fields - } - ev = "extendedHeader" - meta = true - break - - case "NextFileHasLongLinkpath": - // set linkpath= in extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.linkpath = entry.body - } - ev = "longLinkpath" - meta = true - break - - case "NextFileHasLongPath": - case "OldGnuLongPath": - // set path= in file-extended header - EntryType = BufferEntry - onend = function () { - self._extended = self._extended || {} - self._extended.path = entry.body - } - ev = "longPath" - meta = true - break - - default: - // all the rest we skip, but still set the _entry - // member, so that we can skip over their data appropriately. - // emit an event to say that this is an ignored entry type? - EntryType = Entry - ev = "ignoredEntry" - break - } - - var global, extended - if (meta) { - global = extended = null - } else { - var global = this._global - var extended = this._extended - - // extendedHeader only applies to one entry, so once we start - // an entry, it's over. - this._extended = null - } - entry = new EntryType(header, extended, global) - entry.meta = meta - - // only proxy data events of normal files. - if (!meta) { - entry.on("data", function (c) { - me.emit("data", c) - }) - } - - if (onend) entry.on("end", onend) - - this._entry = entry - var me = this - - entry.on("pause", function () { - me.pause() - }) - - entry.on("resume", function () { - me.resume() - }) - - if (this.listeners("*").length) { - this.emit("*", ev, entry) - } - - this.emit(ev, entry) - - // Zero-byte entry. End immediately. - if (entry.props.size === 0) { - entry.end() - this._entry = null - } -} diff --git a/truebit-implementation/node_modules/tar/package.json b/truebit-implementation/node_modules/tar/package.json deleted file mode 100644 index 84831ff2..00000000 --- a/truebit-implementation/node_modules/tar/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "tar@^2.1.1", - "_id": "tar@2.2.1", - "_inBundle": false, - "_integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "_location": "/tar", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "tar@^2.1.1", - "name": "tar", - "escapedName": "tar", - "rawSpec": "^2.1.1", - "saveSpec": null, - "fetchSpec": "^2.1.1" - }, - "_requiredBy": [ - "/tar.gz" - ], - "_resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "_shasum": "8e4d2a256c0e2185c6b18ad694aec968b83cb1d1", - "_spec": "tar@^2.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar.gz", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/node-tar/issues" - }, - "bundleDependencies": false, - "dependencies": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - }, - "deprecated": false, - "description": "tar for node", - "devDependencies": { - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "rimraf": "1.x", - "tap": "0.x" - }, - "homepage": "https://github.com/isaacs/node-tar#readme", - "license": "ISC", - "main": "tar.js", - "name": "tar", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-tar.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "2.2.1" -} diff --git a/truebit-implementation/node_modules/tar/tar.js b/truebit-implementation/node_modules/tar/tar.js deleted file mode 100644 index a81298b9..00000000 --- a/truebit-implementation/node_modules/tar/tar.js +++ /dev/null @@ -1,173 +0,0 @@ -// field paths that every tar file must have. -// header is padded to 512 bytes. -var f = 0 - , fields = {} - , path = fields.path = f++ - , mode = fields.mode = f++ - , uid = fields.uid = f++ - , gid = fields.gid = f++ - , size = fields.size = f++ - , mtime = fields.mtime = f++ - , cksum = fields.cksum = f++ - , type = fields.type = f++ - , linkpath = fields.linkpath = f++ - , headerSize = 512 - , blockSize = 512 - , fieldSize = [] - -fieldSize[path] = 100 -fieldSize[mode] = 8 -fieldSize[uid] = 8 -fieldSize[gid] = 8 -fieldSize[size] = 12 -fieldSize[mtime] = 12 -fieldSize[cksum] = 8 -fieldSize[type] = 1 -fieldSize[linkpath] = 100 - -// "ustar\0" may introduce another bunch of headers. -// these are optional, and will be nulled out if not present. - -var ustar = fields.ustar = f++ - , ustarver = fields.ustarver = f++ - , uname = fields.uname = f++ - , gname = fields.gname = f++ - , devmaj = fields.devmaj = f++ - , devmin = fields.devmin = f++ - , prefix = fields.prefix = f++ - , fill = fields.fill = f++ - -// terminate fields. -fields[f] = null - -fieldSize[ustar] = 6 -fieldSize[ustarver] = 2 -fieldSize[uname] = 32 -fieldSize[gname] = 32 -fieldSize[devmaj] = 8 -fieldSize[devmin] = 8 -fieldSize[prefix] = 155 -fieldSize[fill] = 12 - -// nb: prefix field may in fact be 130 bytes of prefix, -// a null char, 12 bytes for atime, 12 bytes for ctime. -// -// To recognize this format: -// 1. prefix[130] === ' ' or '\0' -// 2. atime and ctime are octal numeric values -// 3. atime and ctime have ' ' in their last byte - -var fieldEnds = {} - , fieldOffs = {} - , fe = 0 -for (var i = 0; i < f; i ++) { - fieldOffs[i] = fe - fieldEnds[i] = (fe += fieldSize[i]) -} - -// build a translation table of field paths. -Object.keys(fields).forEach(function (f) { - if (fields[f] !== null) fields[fields[f]] = f -}) - -// different values of the 'type' field -// paths match the values of Stats.isX() functions, where appropriate -var types = - { 0: "File" - , "\0": "OldFile" // like 0 - , "": "OldFile" - , 1: "Link" - , 2: "SymbolicLink" - , 3: "CharacterDevice" - , 4: "BlockDevice" - , 5: "Directory" - , 6: "FIFO" - , 7: "ContiguousFile" // like 0 - // posix headers - , g: "GlobalExtendedHeader" // k=v for the rest of the archive - , x: "ExtendedHeader" // k=v for the next file - // vendor-specific stuff - , A: "SolarisACL" // skip - , D: "GNUDumpDir" // like 5, but with data, which should be skipped - , I: "Inode" // metadata only, skip - , K: "NextFileHasLongLinkpath" // data = link path of next file - , L: "NextFileHasLongPath" // data = path of next file - , M: "ContinuationFile" // skip - , N: "OldGnuLongPath" // like L - , S: "SparseFile" // skip - , V: "TapeVolumeHeader" // skip - , X: "OldExtendedHeader" // like x - } - -Object.keys(types).forEach(function (t) { - types[types[t]] = types[types[t]] || t -}) - -// values for the mode field -var modes = - { suid: 04000 // set uid on extraction - , sgid: 02000 // set gid on extraction - , svtx: 01000 // set restricted deletion flag on dirs on extraction - , uread: 0400 - , uwrite: 0200 - , uexec: 0100 - , gread: 040 - , gwrite: 020 - , gexec: 010 - , oread: 4 - , owrite: 2 - , oexec: 1 - , all: 07777 - } - -var numeric = - { mode: true - , uid: true - , gid: true - , size: true - , mtime: true - , devmaj: true - , devmin: true - , cksum: true - , atime: true - , ctime: true - , dev: true - , ino: true - , nlink: true - } - -Object.keys(modes).forEach(function (t) { - modes[modes[t]] = modes[modes[t]] || t -}) - -var knownExtended = - { atime: true - , charset: true - , comment: true - , ctime: true - , gid: true - , gname: true - , linkpath: true - , mtime: true - , path: true - , realtime: true - , security: true - , size: true - , uid: true - , uname: true } - - -exports.fields = fields -exports.fieldSize = fieldSize -exports.fieldOffs = fieldOffs -exports.fieldEnds = fieldEnds -exports.types = types -exports.modes = modes -exports.numeric = numeric -exports.headerSize = headerSize -exports.blockSize = blockSize -exports.knownExtended = knownExtended - -exports.Pack = require("./lib/pack.js") -exports.Parse = require("./lib/parse.js") -exports.Extract = require("./lib/extract.js") diff --git a/truebit-implementation/node_modules/tar/test/00-setup-fixtures.js b/truebit-implementation/node_modules/tar/test/00-setup-fixtures.js deleted file mode 100644 index 1524ff7a..00000000 --- a/truebit-implementation/node_modules/tar/test/00-setup-fixtures.js +++ /dev/null @@ -1,53 +0,0 @@ -// the fixtures have some weird stuff that is painful -// to include directly in the repo for various reasons. -// -// So, unpack the fixtures with the system tar first. -// -// This means, of course, that it'll only work if you -// already have a tar implementation, and some of them -// will not properly unpack the fixtures anyway. -// -// But, since usually those tests will fail on Windows -// and other systems with less capable filesystems anyway, -// at least this way we don't cause inconveniences by -// merely cloning the repo or installing the package. - -var tap = require("tap") -, child_process = require("child_process") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) - -test("extract fixtures", function (t) { - var c = child_process.spawn("tar" - ,["xzvf", "fixtures.tgz"] - ,{ cwd: __dirname }) - - c.stdout.on("data", errwrite) - c.stderr.on("data", errwrite) - function errwrite (chunk) { - process.stderr.write(chunk) - } - - c.on("exit", function (code) { - t.equal(code, 0, "extract fixtures should exit with 0") - if (code) { - t.comment("Note, all tests from here on out will fail because of this.") - } - t.end() - }) -}) diff --git a/truebit-implementation/node_modules/tar/test/cb-never-called-1.0.1.tgz b/truebit-implementation/node_modules/tar/test/cb-never-called-1.0.1.tgz deleted file mode 100644 index 9e7014d8..00000000 Binary files a/truebit-implementation/node_modules/tar/test/cb-never-called-1.0.1.tgz and /dev/null differ diff --git a/truebit-implementation/node_modules/tar/test/dir-normalization.js b/truebit-implementation/node_modules/tar/test/dir-normalization.js deleted file mode 100644 index 9719c42f..00000000 --- a/truebit-implementation/node_modules/tar/test/dir-normalization.js +++ /dev/null @@ -1,177 +0,0 @@ -// Set the umask, so that it works the same everywhere. -process.umask(parseInt('22', 8)) - -var fs = require('fs') -var path = require('path') - -var fstream = require('fstream') -var test = require('tap').test - -var tar = require('../tar.js') -var file = path.resolve(__dirname, 'dir-normalization.tar') -var target = path.resolve(__dirname, 'tmp/dir-normalization-test') -var ee = 0 - -var expectEntries = [ - { path: 'fixtures/', - mode: '755', - type: '5', - linkpath: '' - }, - { path: 'fixtures/a/', - mode: '755', - type: '5', - linkpath: '' - }, - { path: 'fixtures/the-chumbler', - mode: '755', - type: '2', - linkpath: path.resolve(target, 'a/b/c/d/the-chumbler'), - }, - { path: 'fixtures/a/b/', - mode: '755', - type: '5', - linkpath: '' - }, - { path: 'fixtures/a/x', - mode: '644', - type: '0', - linkpath: '' - }, - { path: 'fixtures/a/b/c/', - mode: '755', - type: '5', - linkpath: '' - }, - { path: 'fixtures/a/b/c/y', - mode: '755', - type: '2', - linkpath: '../../x', - } -] - -var ef = 0 -var expectFiles = [ - { path: '', - mode: '40755', - type: 'Directory', - depth: 0, - linkpath: undefined - }, - { path: '/fixtures', - mode: '40755', - type: 'Directory', - depth: 1, - linkpath: undefined - }, - { path: '/fixtures/a', - mode: '40755', - type: 'Directory', - depth: 2, - linkpath: undefined - }, - { path: '/fixtures/a/b', - mode: '40755', - type: 'Directory', - depth: 3, - linkpath: undefined - }, - { path: '/fixtures/a/b/c', - mode: '40755', - type: 'Directory', - depth: 4, - linkpath: undefined - }, - { path: '/fixtures/a/b/c/y', - mode: '120755', - type: 'SymbolicLink', - depth: 5, - linkpath: '../../x' - }, - { path: '/fixtures/a/x', - mode: '100644', - type: 'File', - depth: 3, - linkpath: undefined - }, - { path: '/fixtures/the-chumbler', - mode: '120755', - type: 'SymbolicLink', - depth: 2, - linkpath: path.resolve(target, 'a/b/c/d/the-chumbler') - } -] - -test('preclean', function (t) { - require('rimraf').sync(path.join(__dirname, '/tmp/dir-normalization-test')) - t.pass('cleaned!') - t.end() -}) - -test('extract test', function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - inp.pipe(extract) - - extract.on('end', function () { - t.equal(ee, expectEntries.length, 'should see ' + expectEntries.length + ' entries') - - // should get no more entries after end - extract.removeAllListeners('entry') - extract.on('entry', function (e) { - t.fail('Should not get entries after end!') - }) - - next() - }) - - extract.on('entry', function (entry) { - var mode = entry.props.mode & (~parseInt('22', 8)) - var found = { - path: entry.path, - mode: mode.toString(8), - type: entry.props.type, - linkpath: entry.props.linkpath, - } - - var wanted = expectEntries[ee++] - t.equivalent(found, wanted, 'tar entry ' + ee + ' ' + (wanted && wanted.path)) - }) - - function next () { - var r = fstream.Reader({ - path: target, - type: 'Directory', - sort: 'alpha' - }) - - r.on('ready', function () { - foundEntry(r) - }) - - r.on('end', finish) - - function foundEntry (entry) { - var p = entry.path.substr(target.length) - var mode = entry.props.mode & (~parseInt('22', 8)) - var found = { - path: p, - mode: mode.toString(8), - type: entry.props.type, - depth: entry.props.depth, - linkpath: entry.props.linkpath - } - - var wanted = expectFiles[ef++] - t.equivalent(found, wanted, 'unpacked file ' + ef + ' ' + (wanted && wanted.path)) - - entry.on('entry', foundEntry) - } - - function finish () { - t.equal(ef, expectFiles.length, 'should have ' + ef + ' items') - t.end() - } - } -}) diff --git a/truebit-implementation/node_modules/tar/test/dir-normalization.tar b/truebit-implementation/node_modules/tar/test/dir-normalization.tar deleted file mode 100644 index 3c484535..00000000 Binary files a/truebit-implementation/node_modules/tar/test/dir-normalization.tar and /dev/null differ diff --git a/truebit-implementation/node_modules/tar/test/error-on-broken.js b/truebit-implementation/node_modules/tar/test/error-on-broken.js deleted file mode 100644 index e484920f..00000000 --- a/truebit-implementation/node_modules/tar/test/error-on-broken.js +++ /dev/null @@ -1,33 +0,0 @@ -var fs = require('fs') -var path = require('path') -var zlib = require('zlib') - -var tap = require('tap') - -var tar = require('../tar.js') - -var file = path.join(__dirname, 'cb-never-called-1.0.1.tgz') -var target = path.join(__dirname, 'tmp/extract-test') - -tap.test('preclean', function (t) { - require('rimraf').sync(__dirname + '/tmp/extract-test') - t.pass('cleaned!') - t.end() -}) - -tap.test('extract test', function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - inp.pipe(zlib.createGunzip()).pipe(extract) - - extract.on('error', function (er) { - t.equal(er.message, 'unexpected eof', 'error noticed') - t.end() - }) - - extract.on('end', function () { - t.fail('shouldn\'t reach this point due to errors') - t.end() - }) -}) diff --git a/truebit-implementation/node_modules/tar/test/extract-move.js b/truebit-implementation/node_modules/tar/test/extract-move.js deleted file mode 100644 index 45400cd9..00000000 --- a/truebit-implementation/node_modules/tar/test/extract-move.js +++ /dev/null @@ -1,132 +0,0 @@ -// Set the umask, so that it works the same everywhere. -process.umask(parseInt('22', 8)) - -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , gfs = require("graceful-fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/dir.tar") - , target = path.resolve(__dirname, "tmp/extract-test") - , index = 0 - , fstream = require("fstream") - , rimraf = require("rimraf") - , mkdirp = require("mkdirp") - - , ee = 0 - , expectEntries = [ - { - "path" : "dir/", - "mode" : "750", - "type" : "5", - "depth" : undefined, - "size" : 0, - "linkpath" : "", - "nlink" : undefined, - "dev" : undefined, - "ino" : undefined - }, - { - "path" : "dir/sub/", - "mode" : "750", - "type" : "5", - "depth" : undefined, - "size" : 0, - "linkpath" : "", - "nlink" : undefined, - "dev" : undefined, - "ino" : undefined - } ] - -function slow (fs, method, t1, t2) { - var orig = fs[method] - if (!orig) return null - fs[method] = function () { - var args = [].slice.call(arguments) - console.error("slow", method, args[0]) - var cb = args.pop() - - setTimeout(function () { - orig.apply(fs, args.concat(function(er, data) { - setTimeout(function() { - cb(er, data) - }, t2) - })) - }, t1) - } -} - -// Make sure we get the graceful-fs that fstream is using. -var gfs2 -try { - gfs2 = require("fstream/node_modules/graceful-fs") -} catch (er) {} - -var slowMethods = ["chown", "chmod", "utimes", "lutimes"] -slowMethods.forEach(function (method) { - var t1 = 500 - var t2 = 0 - slow(fs, method, t1, t2) - slow(gfs, method, t1, t2) - if (gfs2) { - slow(gfs2, method, t1, t2) - } -}) - - - -// The extract class basically just pipes the input -// to a Reader, and then to a fstream.DirWriter - -// So, this is as much a test of fstream.Reader and fstream.Writer -// as it is of tar.Extract, but it sort of makes sense. - -tap.test("preclean", function (t) { - rimraf.sync(target) - /mkdirp.sync(target) - t.pass("cleaned!") - t.end() -}) - -tap.test("extract test", function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - // give it a weird buffer size to try to break in odd places - inp.bufferSize = 1234 - - inp.pipe(extract) - - extract.on("end", function () { - rimraf.sync(target) - - t.equal(ee, expectEntries.length, "should see "+ee+" entries") - - // should get no more entries after end - extract.removeAllListeners("entry") - extract.on("entry", function (e) { - t.fail("Should not get entries after end!") - }) - - t.end() - }) - - - extract.on("entry", function (entry) { - var found = - { path: entry.path - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - , dev: entry.props.dev - , ino: entry.props.ino - } - - var wanted = expectEntries[ee ++] - - t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path) - }) -}) diff --git a/truebit-implementation/node_modules/tar/test/extract.js b/truebit-implementation/node_modules/tar/test/extract.js deleted file mode 100644 index eca4e7cc..00000000 --- a/truebit-implementation/node_modules/tar/test/extract.js +++ /dev/null @@ -1,367 +0,0 @@ -// Set the umask, so that it works the same everywhere. -process.umask(parseInt('22', 8)) - -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , target = path.resolve(__dirname, "tmp/extract-test") - , index = 0 - , fstream = require("fstream") - - , ee = 0 - , expectEntries = -[ { path: 'c.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'cc.txt', - mode: '644', - type: '0', - depth: undefined, - size: 513, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 100, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: 'Ω.txt', - mode: '644', - type: '0', - depth: undefined, - size: 2, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51693379 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 1, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '0', - depth: undefined, - size: 201, - linkpath: '', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '777', - type: '2', - depth: undefined, - size: 0, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: undefined, - dev: undefined, - ino: undefined }, - { path: '200-hard', - mode: '644', - type: '0', - depth: undefined, - size: 200, - linkpath: '', - nlink: 2, - dev: 234881026, - ino: 51681874 }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '644', - type: '1', - depth: undefined, - size: 0, - linkpath: path.resolve(target, '200-hard'), - nlink: 2, - dev: 234881026, - ino: 51681874 } ] - - , ef = 0 - , expectFiles = -[ { path: '', - mode: '40755', - type: 'Directory', - depth: 0, - linkpath: undefined }, - { path: '/200-hard', - mode: '100644', - type: 'File', - depth: 1, - size: 200, - linkpath: undefined, - nlink: 2 }, - { path: '/200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: '120777', - type: 'SymbolicLink', - depth: 1, - size: 200, - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - nlink: 1 }, - { path: '/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'Link', - depth: 1, - size: 200, - linkpath: path.join(target, '200-hard'), - nlink: 2 }, - { path: '/c.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/cc.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 513, - linkpath: undefined, - nlink: 1 }, - { path: '/r', - mode: '40755', - type: 'Directory', - depth: 1, - linkpath: undefined }, - { path: '/r/e', - mode: '40755', - type: 'Directory', - depth: 2, - linkpath: undefined }, - { path: '/r/e/a', - mode: '40755', - type: 'Directory', - depth: 3, - linkpath: undefined }, - { path: '/r/e/a/l', - mode: '40755', - type: 'Directory', - depth: 4, - linkpath: undefined }, - { path: '/r/e/a/l/l', - mode: '40755', - type: 'Directory', - depth: 5, - linkpath: undefined }, - { path: '/r/e/a/l/l/y', - mode: '40755', - type: 'Directory', - depth: 6, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-', - mode: '40755', - type: 'Directory', - depth: 7, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d', - mode: '40755', - type: 'Directory', - depth: 8, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e', - mode: '40755', - type: 'Directory', - depth: 9, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e', - mode: '40755', - type: 'Directory', - depth: 10, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p', - mode: '40755', - type: 'Directory', - depth: 11, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-', - mode: '40755', - type: 'Directory', - depth: 12, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f', - mode: '40755', - type: 'Directory', - depth: 13, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o', - mode: '40755', - type: 'Directory', - depth: 14, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l', - mode: '40755', - type: 'Directory', - depth: 15, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d', - mode: '40755', - type: 'Directory', - depth: 16, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e', - mode: '40755', - type: 'Directory', - depth: 17, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r', - mode: '40755', - type: 'Directory', - depth: 18, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-', - mode: '40755', - type: 'Directory', - depth: 19, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p', - mode: '40755', - type: 'Directory', - depth: 20, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a', - mode: '40755', - type: 'Directory', - depth: 21, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t', - mode: '40755', - type: 'Directory', - depth: 22, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h', - mode: '40755', - type: 'Directory', - depth: 23, - linkpath: undefined }, - { path: '/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: '100644', - type: 'File', - depth: 24, - size: 100, - linkpath: undefined, - nlink: 1 }, - { path: '/Ω.txt', - mode: '100644', - type: 'File', - depth: 1, - size: 2, - linkpath: undefined, - nlink: 1 } ] - - - -// The extract class basically just pipes the input -// to a Reader, and then to a fstream.DirWriter - -// So, this is as much a test of fstream.Reader and fstream.Writer -// as it is of tar.Extract, but it sort of makes sense. - -tap.test("preclean", function (t) { - require("rimraf").sync(__dirname + "/tmp/extract-test") - t.pass("cleaned!") - t.end() -}) - -tap.test("extract test", function (t) { - var extract = tar.Extract(target) - var inp = fs.createReadStream(file) - - // give it a weird buffer size to try to break in odd places - inp.bufferSize = 1234 - - inp.pipe(extract) - - extract.on("end", function () { - t.equal(ee, expectEntries.length, "should see "+ee+" entries") - - // should get no more entries after end - extract.removeAllListeners("entry") - extract.on("entry", function (e) { - t.fail("Should not get entries after end!") - }) - - next() - }) - - extract.on("entry", function (entry) { - var found = - { path: entry.path - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - , dev: entry.props.dev - , ino: entry.props.ino - } - - var wanted = expectEntries[ee ++] - - t.equivalent(found, wanted, "tar entry " + ee + " " + wanted.path) - }) - - function next () { - var r = fstream.Reader({ path: target - , type: "Directory" - // this is just to encourage consistency - , sort: "alpha" }) - - r.on("ready", function () { - foundEntry(r) - }) - - r.on("end", finish) - - function foundEntry (entry) { - var p = entry.path.substr(target.length) - var found = - { path: p - , mode: entry.props.mode.toString(8) - , type: entry.props.type - , depth: entry.props.depth - , size: entry.props.size - , linkpath: entry.props.linkpath - , nlink: entry.props.nlink - } - - var wanted = expectFiles[ef ++] - - t.has(found, wanted, "unpacked file " + ef + " " + wanted.path) - - entry.on("entry", foundEntry) - } - - function finish () { - t.equal(ef, expectFiles.length, "should have "+ef+" items") - t.end() - } - } -}) diff --git a/truebit-implementation/node_modules/tar/test/fixtures.tgz b/truebit-implementation/node_modules/tar/test/fixtures.tgz deleted file mode 100644 index f1676023..00000000 Binary files a/truebit-implementation/node_modules/tar/test/fixtures.tgz and /dev/null differ diff --git a/truebit-implementation/node_modules/tar/test/header.js b/truebit-implementation/node_modules/tar/test/header.js deleted file mode 100644 index 8ea6f795..00000000 --- a/truebit-implementation/node_modules/tar/test/header.js +++ /dev/null @@ -1,183 +0,0 @@ -var tap = require("tap") -var TarHeader = require("../lib/header.js") -var tar = require("../tar.js") -var fs = require("fs") - - -var headers = - { "a.txt file header": - [ "612e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303430312031313635313336303333332030313234353100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'a.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 257 - , mtime: 1319493851 - , cksum: 5417 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "omega pax": // the extended header from omega tar. - [ "5061784865616465722fcea92e74787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303137302031313534333731303631312030313530353100207800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'PaxHeader/Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 120 - , mtime: 1301254537 - , cksum: 6697 - , type: 'x' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "omega file header": - [ "cea92e7478740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030322031313534333731303631312030313330373200203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'Ω.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 2 - , mtime: 1301254537 - , cksum: 5690 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } ] - - , "foo.js file header": - [ "666f6f2e6a730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030303030342031313534333637303734312030313236313700203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'foo.js' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 4 - , mtime: 1301246433 - , cksum: 5519 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "b.txt file header": - [ "622e747874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030303036343420003035373736312000303030303234200030303030303030313030302031313635313336303637372030313234363100203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000757374617200303069736161637300000000000000000000000000000000000000000000000000007374616666000000000000000000000000000000000000000000000000000000303030303030200030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true - , path: 'b.txt' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 512 - , mtime: 1319494079 - , cksum: 5425 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - - , "deep nested file": - [ "636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363633030303634342000303537373631200030303030323420003030303030303030313434203131363532313531353333203034333331340020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075737461720030306973616163730000000000000000000000000000000000000000000000000000737461666600000000000000000000000000000000000000000000000000000030303030303020003030303030302000722f652f612f6c2f6c2f792f2d2f642f652f652f702f2d2f662f6f2f6c2f642f652f722f2d2f702f612f742f680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - , { cksumValid: true, - path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' - , mode: 420 - , uid: 24561 - , gid: 20 - , size: 100 - , mtime: 1319687003 - , cksum: 18124 - , type: '0' - , linkpath: '' - , ustar: 'ustar\0' - , ustarver: '00' - , uname: 'isaacs' - , gname: 'staff' - , devmaj: 0 - , devmin: 0 - , fill: '' } - ] - } - -tap.test("parsing", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , header = new Buffer(h[0], "hex") - , expect = h[1] - , parsed = new TarHeader(header) - - // console.error(parsed) - t.has(parsed, expect, "parse " + name) - }) - t.end() -}) - -tap.test("encoding", function (t) { - Object.keys(headers).forEach(function (name) { - var h = headers[name] - , expect = new Buffer(h[0], "hex") - , encoded = TarHeader.encode(h[1]) - - // might have slightly different bytes, since the standard - // isn't very strict, but should have the same semantics - // checkSum will be different, but cksumValid will be true - - var th = new TarHeader(encoded) - delete h[1].block - delete h[1].needExtended - delete h[1].cksum - t.has(th, h[1], "fields "+name) - }) - t.end() -}) - -// test these manually. they're a bit rare to find in the wild -tap.test("parseNumeric tests", function (t) { - var parseNumeric = TarHeader.parseNumeric - , numbers = - { "303737373737373700": 2097151 - , "30373737373737373737373700": 8589934591 - , "303030303036343400": 420 - , "800000ffffffffffff": 281474976710655 - , "ffffff000000000001": -281474976710654 - , "ffffff000000000000": -281474976710655 - , "800000000000200000": 2097152 - , "8000000000001544c5": 1393861 - , "ffffffffffff1544c5": -15383354 } - Object.keys(numbers).forEach(function (n) { - var b = new Buffer(n, "hex") - t.equal(parseNumeric(b), numbers[n], n + " === " + numbers[n]) - }) - t.end() -}) diff --git a/truebit-implementation/node_modules/tar/test/pack-no-proprietary.js b/truebit-implementation/node_modules/tar/test/pack-no-proprietary.js deleted file mode 100644 index d4b03a1f..00000000 --- a/truebit-implementation/node_modules/tar/test/pack-no-proprietary.js +++ /dev/null @@ -1,886 +0,0 @@ -// This is exactly like test/pack.js, except that it's excluding -// any proprietary headers. -// -// This loses some information about the filesystem, but creates -// tarballs that are supported by more versions of tar, especially -// old non-spec-compliant copies of gnutar. - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - uid: uid, - gid: gid, - size: 200 } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/dir/', - mode: 488, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/dir/sub/', - mode: 488, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - uid: uid, - gid: gid, - size: 2 } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , uid: uid - , gid: gid - , size: 2 } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var props = doGH ? pkg : {} - props.noProprietary = true - var pack = Pack(props) - var writer = Writer(target) - - // global header should be skipped regardless, since it has no content. - var entry = 0 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - if (ev !== wanted[0] || e.path !== wanted[1].path) { - console.error("wanted", wanted) - console.error([ev, e.props]) - e.on("end", function () { - console.error(e.fields) - throw "break" - }) - } - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/truebit-implementation/node_modules/tar/test/pack.js b/truebit-implementation/node_modules/tar/test/pack.js deleted file mode 100644 index 0f16c07b..00000000 --- a/truebit-implementation/node_modules/tar/test/pack.js +++ /dev/null @@ -1,952 +0,0 @@ - -// the symlink file is excluded from git, because it makes -// windows freak the hell out. -var fs = require("fs") - , path = require("path") - , symlink = path.resolve(__dirname, "fixtures/symlink") -try { fs.unlinkSync(symlink) } catch (e) {} -fs.symlinkSync("./hardlink-1", symlink) -process.on("exit", function () { - fs.unlinkSync(symlink) -}) - - -var tap = require("tap") - , tar = require("../tar.js") - , pkg = require("../package.json") - , Pack = tar.Pack - , fstream = require("fstream") - , Reader = fstream.Reader - , Writer = fstream.Writer - , input = path.resolve(__dirname, "fixtures/") - , target = path.resolve(__dirname, "tmp/pack.tar") - , uid = process.getuid ? process.getuid() : 0 - , gid = process.getgid ? process.getgid() : 0 - - , entries = - - // the global header and root fixtures/ dir are going to get - // a different date each time, so omit that bit. - // Also, dev/ino values differ across machines, so that's not - // included. - [ [ 'globalExtendedHeader', - { path: 'PaxHeader/', - mode: 438, - uid: 0, - gid: 0, - type: 'g', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { "NODETAR.author": pkg.author, - "NODETAR.name": pkg.name, - "NODETAR.description": pkg.description, - "NODETAR.version": pkg.version, - "NODETAR.repository.type": pkg.repository.type, - "NODETAR.repository.url": pkg.repository.url, - "NODETAR.main": pkg.main, - "NODETAR.scripts.test": pkg.scripts.test } ] - - , [ 'entry', - { path: 'fixtures/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 200, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/a.txt', - mode: 420, - uid: uid, - gid: gid, - size: 257, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/b.txt', - mode: 420, - uid: uid, - gid: gid, - size: 512, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/c.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/cc.txt', - mode: 420, - uid: uid, - gid: gid, - size: 513, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/dir/', - mode: 488, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/dir/sub/', - mode: 488, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - - , [ 'entry', - { path: 'fixtures/foo.js', - mode: 420, - uid: uid, - gid: gid, - size: 4, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-1', - mode: 420, - uid: uid, - gid: gid, - size: 200, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/hardlink-2', - mode: 420, - uid: uid, - gid: gid, - size: 0, - type: '1', - linkpath: 'fixtures/hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/omega.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/packtest/star.4.html', - mode: 420, - uid: uid, - gid: gid, - size: 54081, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'fixtures/packtest/Ω.txt', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - uid: uid, - gid: gid, - size: 2, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/packtest/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '2', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - - , [ 'entry', - { path: 'fixtures/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/', - mode: 493, - uid: uid, - gid: gid, - size: 0, - type: '5', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: uid, - gid: gid, - size: 100, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'entry', - { path: 'fixtures/symlink', - uid: uid, - gid: gid, - size: 0, - type: '2', - linkpath: 'hardlink-1', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' } ] - - , [ 'extendedHeader', - { path: 'PaxHeader/fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - type: 'x', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: "fixtures/Ω.txt" - , "NODETAR.depth": "1" - , "NODETAR.type": "File" - , nlink: 1 - , uid: uid - , gid: gid - , size: 2 - , "NODETAR.blksize": "4096" - , "NODETAR.blocks": "8" } ] - - , [ 'entry', - { path: 'fixtures/Ω.txt', - mode: 420, - uid: uid, - gid: gid, - size: 2, - type: '0', - linkpath: '', - ustar: 'ustar\u0000', - ustarver: '00', - uname: '', - gname: '', - devmaj: 0, - devmin: 0, - fill: '', - 'NODETAR.depth': '1', - 'NODETAR.type': 'File', - nlink: 1, - 'NODETAR.blksize': '4096', - 'NODETAR.blocks': '8' } ] - ] - - -// first, make sure that the hardlinks are actually hardlinks, or this -// won't work. Git has a way of replacing them with a copy. -var hard1 = path.resolve(__dirname, "fixtures/hardlink-1") - , hard2 = path.resolve(__dirname, "fixtures/hardlink-2") - , fs = require("fs") - -try { fs.unlinkSync(hard2) } catch (e) {} -fs.linkSync(hard1, hard2) - -tap.test("with global header", { timeout: 10000 }, function (t) { - runTest(t, true) -}) - -tap.test("without global header", { timeout: 10000 }, function (t) { - runTest(t, false) -}) - -tap.test("with from base", { timeout: 10000 }, function (t) { - runTest(t, true, true) -}) - -function alphasort (a, b) { - return a === b ? 0 - : a.toLowerCase() > b.toLowerCase() ? 1 - : a.toLowerCase() < b.toLowerCase() ? -1 - : a > b ? 1 - : -1 -} - - -function runTest (t, doGH, doFromBase) { - var reader = Reader({ path: input - , filter: function () { - return !this.path.match(/\.(tar|hex)$/) - } - , sort: alphasort - }) - - var props = doGH ? pkg : {} - if(doFromBase) props.fromBase = true; - - var pack = Pack(props) - var writer = Writer(target) - - // skip the global header if we're not doing that. - var entry = doGH ? 0 : 1 - - t.ok(reader, "reader ok") - t.ok(pack, "pack ok") - t.ok(writer, "writer ok") - - pack.pipe(writer) - - var parse = tar.Parse() - t.ok(parse, "parser should be ok") - - pack.on("data", function (c) { - // console.error("PACK DATA") - if (c.length !== 512) { - // this one is too noisy, only assert if it'll be relevant - t.equal(c.length, 512, "parser should emit data in 512byte blocks") - } - parse.write(c) - }) - - pack.on("end", function () { - // console.error("PACK END") - t.pass("parser ends") - parse.end() - }) - - pack.on("error", function (er) { - t.fail("pack error", er) - }) - - parse.on("error", function (er) { - t.fail("parse error", er) - }) - - writer.on("error", function (er) { - t.fail("writer error", er) - }) - - reader.on("error", function (er) { - t.fail("reader error", er) - }) - - parse.on("*", function (ev, e) { - var wanted = entries[entry++] - if (!wanted) { - t.fail("unexpected event: "+ev) - return - } - t.equal(ev, wanted[0], "event type should be "+wanted[0]) - - if(doFromBase) { - if(wanted[1].path.indexOf('fixtures/') && wanted[1].path.length == 100) - wanted[1].path = wanted[1].path.replace('fixtures/', '') + 'ccccccccc' - - if(wanted[1]) wanted[1].path = wanted[1].path.replace('fixtures/', '').replace('//', '/') - if(wanted[1].path == '') wanted[1].path = '/' - if(wanted[2] && wanted[2].path) wanted[2].path = wanted[2].path.replace('fixtures', '').replace(/^\//, '') - - wanted[1].linkpath = wanted[1].linkpath.replace('fixtures/', '') - } - - if (ev !== wanted[0] || e.path !== wanted[1].path) { - console.error("wanted", wanted) - console.error([ev, e.props]) - e.on("end", function () { - console.error(e.fields) - throw "break" - }) - } - - - t.has(e.props, wanted[1], "properties "+wanted[1].path) - if (wanted[2]) { - e.on("end", function () { - if (!e.fields) { - t.ok(e.fields, "should get fields") - } else { - t.has(e.fields, wanted[2], "should get expected fields") - } - }) - } - }) - - reader.pipe(pack) - - writer.on("close", function () { - t.equal(entry, entries.length, "should get all expected entries") - t.pass("it finished") - t.end() - }) - -} diff --git a/truebit-implementation/node_modules/tar/test/parse-discard.js b/truebit-implementation/node_modules/tar/test/parse-discard.js deleted file mode 100644 index da01a65c..00000000 --- a/truebit-implementation/node_modules/tar/test/parse-discard.js +++ /dev/null @@ -1,29 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - -tap.test("parser test", function (t) { - var parser = tar.Parse() - var total = 0 - var dataTotal = 0 - - parser.on("end", function () { - - t.equals(total-513,dataTotal,'should have discarded only c.txt') - - t.end() - }) - - fs.createReadStream(file) - .pipe(parser) - .on('entry',function(entry){ - if(entry.path === 'c.txt') entry.abort() - - total += entry.size; - entry.on('data',function(data){ - dataTotal += data.length - }) - }) -}) diff --git a/truebit-implementation/node_modules/tar/test/parse.js b/truebit-implementation/node_modules/tar/test/parse.js deleted file mode 100644 index f765a501..00000000 --- a/truebit-implementation/node_modules/tar/test/parse.js +++ /dev/null @@ -1,359 +0,0 @@ -var tap = require("tap") - , tar = require("../tar.js") - , fs = require("fs") - , path = require("path") - , file = path.resolve(__dirname, "fixtures/c.tar") - , index = 0 - - , expect = -[ [ 'entry', - { path: 'c.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:10:58 GMT'), - cksum: 5422, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'cc.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 513, - mtime: new Date('Wed, 26 Oct 2011 01:11:02 GMT'), - cksum: 5525, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 100, - mtime: new Date('Thu, 27 Oct 2011 03:43:23 GMT'), - cksum: 18124, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 120, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 6702, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: 'Ω.txt', - ctime: 1319737909, - atime: 1319739061, - dev: 234881026, - ino: 51693379, - nlink: 1 } ], - [ 'entry', - { path: 'Ω.txt', - mode: 420, - uid: 24561, - gid: 20, - size: 2, - mtime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - cksum: 5695, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 17:51:49 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:11:01 GMT'), - dev: 234881026, - ino: 51693379, - nlink: 1 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1319686868, - atime: 1319741254, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14570, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - atime: new Date('Thu, 27 Oct 2011 18:47:34 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 1 }, - undefined ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 1000, - gid: 1000, - size: 201, - mtime: new Date('Thu, 27 Oct 2011 22:21:50 GMT'), - cksum: 14086, - type: '0', - linkpath: '', - ustar: false }, - undefined ], - [ 'longLinkpath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4975, - type: 'K', - linkpath: '', - ustar: false }, - '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ], - [ 'longPath', - { path: '././@LongLink', - mode: 0, - uid: 0, - gid: 0, - size: 201, - mtime: new Date('Thu, 01 Jan 1970 00:00:00 GMT'), - cksum: 4976, - type: 'L', - linkpath: '', - ustar: false }, - '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL' ], - [ 'entry', - { path: '200LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', - mode: 511, - uid: 1000, - gid: 1000, - size: 0, - mtime: new Date('Fri, 28 Oct 2011 23:05:17 GMT'), - cksum: 21603, - type: '2', - linkpath: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ustar: false }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 143, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 6533, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { ctime: 1320617144, - atime: 1320617232, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200-hard', - mode: 420, - uid: 24561, - gid: 20, - size: 200, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 5526, - type: '0', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:07:12 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ], - [ 'extendedHeader', - { path: 'PaxHeader/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 353, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 14488, - type: 'x', - linkpath: '', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '' }, - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - ctime: 1320617144, - atime: 1320617406, - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 } ], - [ 'entry', - { path: '200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc', - mode: 420, - uid: 24561, - gid: 20, - size: 0, - mtime: new Date('Thu, 27 Oct 2011 03:41:08 GMT'), - cksum: 15173, - type: '1', - linkpath: '200-hard', - ustar: 'ustar\0', - ustarver: '00', - uname: 'isaacs', - gname: 'staff', - devmaj: 0, - devmin: 0, - fill: '', - ctime: new Date('Sun, 06 Nov 2011 22:05:44 GMT'), - atime: new Date('Sun, 06 Nov 2011 22:10:06 GMT'), - 'LIBARCHIVE.creationtime': '1319686852', - dev: 234881026, - ino: 51681874, - nlink: 2 }, - undefined ] ] - - -tap.test("parser test", function (t) { - var parser = tar.Parse() - - parser.on("end", function () { - t.equal(index, expect.length, "saw all expected events") - t.end() - }) - - fs.createReadStream(file) - .pipe(parser) - .on("*", function (ev, entry) { - var wanted = expect[index] - if (!wanted) { - return t.fail("Unexpected event: " + ev) - } - var result = [ev, entry.props] - entry.on("end", function () { - result.push(entry.fields || entry.body) - - t.equal(ev, wanted[0], index + " event type") - t.equivalent(entry.props, wanted[1], wanted[1].path + " entry properties") - if (wanted[2]) { - t.equivalent(result[2], wanted[2], "metadata values") - } - index ++ - }) - }) -}) diff --git a/truebit-implementation/node_modules/tar/test/zz-cleanup.js b/truebit-implementation/node_modules/tar/test/zz-cleanup.js deleted file mode 100644 index a00ff7fa..00000000 --- a/truebit-implementation/node_modules/tar/test/zz-cleanup.js +++ /dev/null @@ -1,20 +0,0 @@ -// clean up the fixtures - -var tap = require("tap") -, rimraf = require("rimraf") -, test = tap.test -, path = require("path") - -test("clean fixtures", function (t) { - rimraf(path.resolve(__dirname, "fixtures"), function (er) { - t.ifError(er, "rimraf ./fixtures/") - t.end() - }) -}) - -test("clean tmp", function (t) { - rimraf(path.resolve(__dirname, "tmp"), function (er) { - t.ifError(er, "rimraf ./tmp/") - t.end() - }) -}) diff --git a/truebit-implementation/node_modules/thenify-all/History.md b/truebit-implementation/node_modules/thenify-all/History.md deleted file mode 100644 index 16e378c0..00000000 --- a/truebit-implementation/node_modules/thenify-all/History.md +++ /dev/null @@ -1,11 +0,0 @@ - -1.6.0 / 2015-01-11 -================== - - * feat: exports thenify - * support node 0.8+ - -1.5.0 / 2015-01-09 -================== - - * feat: support backward compatible with callback diff --git a/truebit-implementation/node_modules/thenify-all/LICENSE b/truebit-implementation/node_modules/thenify-all/LICENSE deleted file mode 100644 index a7ae8ee9..00000000 --- a/truebit-implementation/node_modules/thenify-all/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/thenify-all/README.md b/truebit-implementation/node_modules/thenify-all/README.md deleted file mode 100644 index 8e7829e9..00000000 --- a/truebit-implementation/node_modules/thenify-all/README.md +++ /dev/null @@ -1,66 +0,0 @@ - -# thenify-all - -[![NPM version][npm-image]][npm-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] -[![Dependency Status][david-image]][david-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] -[![Gittip][gittip-image]][gittip-url] - -Promisifies all the selected functions in an object. - -```js -var thenifyAll = require('thenify-all'); - -var fs = thenifyAll(require('fs'), {}, [ - 'readFile', - 'writeFile', -]); - -fs.readFile(__filename).then(function (buffer) { - console.log(buffer.toString()); -}); -``` - -## API - -### var obj = thenifyAll(source, [obj], [methods]) - -Promisifies all the selected functions in an object. - -- `source` - the source object for the async functions -- `obj` - the destination to set all the promisified methods -- `methods` - an array of method names of `source` - -### var obj = thenifyAll.withCallback(source, [obj], [methods]) - -Promisifies all the selected functions in an object and backward compatible with callback. - -- `source` - the source object for the async functions -- `obj` - the destination to set all the promisified methods -- `methods` - an array of method names of `source` - -### thenifyAll.thenify - -Exports [thenify](https://github.com/thenables/thenify) this package uses. - -[gitter-image]: https://badges.gitter.im/thenables/thenify-all.png -[gitter-url]: https://gitter.im/thenables/thenify-all -[npm-image]: https://img.shields.io/npm/v/thenify-all.svg?style=flat-square -[npm-url]: https://npmjs.org/package/thenify-all -[github-tag]: http://img.shields.io/github/tag/thenables/thenify-all.svg?style=flat-square -[github-url]: https://github.com/thenables/thenify-all/tags -[travis-image]: https://img.shields.io/travis/thenables/thenify-all.svg?style=flat-square -[travis-url]: https://travis-ci.org/thenables/thenify-all -[coveralls-image]: https://img.shields.io/coveralls/thenables/thenify-all.svg?style=flat-square -[coveralls-url]: https://coveralls.io/r/thenables/thenify-all -[david-image]: http://img.shields.io/david/thenables/thenify-all.svg?style=flat-square -[david-url]: https://david-dm.org/thenables/thenify-all -[license-image]: http://img.shields.io/npm/l/thenify-all.svg?style=flat-square -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/thenify-all.svg?style=flat-square -[downloads-url]: https://npmjs.org/package/thenify-all -[gittip-image]: https://img.shields.io/gratipay/jonathanong.svg?style=flat-square -[gittip-url]: https://gratipay.com/jonathanong/ diff --git a/truebit-implementation/node_modules/thenify-all/index.js b/truebit-implementation/node_modules/thenify-all/index.js deleted file mode 100644 index e0cc69ce..00000000 --- a/truebit-implementation/node_modules/thenify-all/index.js +++ /dev/null @@ -1,73 +0,0 @@ - -var thenify = require('thenify') - -module.exports = thenifyAll -thenifyAll.withCallback = withCallback -thenifyAll.thenify = thenify - -/** - * Promisifies all the selected functions in an object. - * - * @param {Object} source the source object for the async functions - * @param {Object} [destination] the destination to set all the promisified methods - * @param {Array} [methods] an array of method names of `source` - * @return {Object} - * @api public - */ - -function thenifyAll(source, destination, methods) { - return promisifyAll(source, destination, methods, thenify) -} - -/** - * Promisifies all the selected functions in an object and backward compatible with callback. - * - * @param {Object} source the source object for the async functions - * @param {Object} [destination] the destination to set all the promisified methods - * @param {Array} [methods] an array of method names of `source` - * @return {Object} - * @api public - */ - -function withCallback(source, destination, methods) { - return promisifyAll(source, destination, methods, thenify.withCallback) -} - -function promisifyAll(source, destination, methods, promisify) { - if (!destination) { - destination = {}; - methods = Object.keys(source) - } - - if (Array.isArray(destination)) { - methods = destination - destination = {} - } - - if (!methods) { - methods = Object.keys(source) - } - - if (typeof source === 'function') destination = promisify(source) - - methods.forEach(function (name) { - // promisify only if it's a function - if (typeof source[name] === 'function') destination[name] = promisify(source[name]) - }) - - // proxy the rest - Object.keys(source).forEach(function (name) { - if (deprecated(source, name)) return - if (destination[name]) return - destination[name] = source[name] - }) - - return destination -} - -function deprecated(source, name) { - var desc = Object.getOwnPropertyDescriptor(source, name) - if (!desc || !desc.get) return false - if (desc.get.name === 'deprecated') return true - return false -} diff --git a/truebit-implementation/node_modules/thenify-all/package.json b/truebit-implementation/node_modules/thenify-all/package.json deleted file mode 100644 index 53f2ed55..00000000 --- a/truebit-implementation/node_modules/thenify-all/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "_from": "thenify-all@^1.6.0", - "_id": "thenify-all@1.6.0", - "_inBundle": false, - "_integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "_location": "/thenify-all", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "thenify-all@^1.6.0", - "name": "thenify-all", - "escapedName": "thenify-all", - "rawSpec": "^1.6.0", - "saveSpec": null, - "fetchSpec": "^1.6.0" - }, - "_requiredBy": [ - "/fs-promise", - "/mz" - ], - "_resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "_shasum": "1a1918d402d8fc3f98fbf234db0bcc8cc10e9726", - "_spec": "thenify-all@^1.6.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/fs-promise", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/thenables/thenify-all/issues" - }, - "bundleDependencies": false, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "deprecated": false, - "description": "Promisifies all the selected functions in an object", - "devDependencies": { - "bluebird": "2", - "istanbul": "0", - "mocha": "2" - }, - "engines": { - "node": ">=0.8" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/thenables/thenify-all#readme", - "keywords": [ - "promisify", - "promise", - "thenify", - "then", - "es6" - ], - "license": "MIT", - "name": "thenify-all", - "repository": { - "type": "git", - "url": "git+https://github.com/thenables/thenify-all.git" - }, - "scripts": { - "test": "mocha --reporter spec", - "test-cov": "istanbul cover node_modules/.bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/.bin/_mocha --report lcovonly -- --reporter dot" - }, - "version": "1.6.0" -} diff --git a/truebit-implementation/node_modules/thenify/History.md b/truebit-implementation/node_modules/thenify/History.md deleted file mode 100644 index 734e5d8c..00000000 --- a/truebit-implementation/node_modules/thenify/History.md +++ /dev/null @@ -1,5 +0,0 @@ - -3.3.0 / 2017-05-19 -================== - - * feat: support options.multiArgs and options.withCallback (#27) diff --git a/truebit-implementation/node_modules/thenify/LICENSE b/truebit-implementation/node_modules/thenify/LICENSE deleted file mode 100644 index bed701c6..00000000 --- a/truebit-implementation/node_modules/thenify/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/thenify/README.md b/truebit-implementation/node_modules/thenify/README.md deleted file mode 100644 index 3afce3e0..00000000 --- a/truebit-implementation/node_modules/thenify/README.md +++ /dev/null @@ -1,120 +0,0 @@ - -# thenify - -[![NPM version][npm-image]][npm-url] -[![Build status][travis-image]][travis-url] -[![Test coverage][coveralls-image]][coveralls-url] -[![Dependency Status][david-image]][david-url] -[![License][license-image]][license-url] -[![Downloads][downloads-image]][downloads-url] - -Promisify a callback-based function using [`any-promise`](https://github.com/kevinbeaty/any-promise). - -- Preserves function names -- Uses a native promise implementation if available and tries to fall back to a promise implementation such as `bluebird` -- Converts multiple arguments from the callback into an `Array`, also support change the behavior by `options.multiArgs` -- Resulting function never deoptimizes -- Supports both callback and promise style - -An added benefit is that `throw`n errors in that async function will be caught by the promise! - -## API - -### fn = thenify(fn, options) - -Promisifies a function. - -### Options - -`options` are optional. - -- `options.withCallback` - support both callback and promise style, default to `false`. -- `options.multiArgs` - change the behavior when callback have multiple arguments. default to `true`. - - `true` - converts multiple arguments to an array - - `false`- always use the first argument - - `Array` - converts multiple arguments to an object with keys provided in `options.multiArgs` - -- Turn async functions into promises - -```js -var thenify = require('thenify'); - -var somethingAsync = thenify(function somethingAsync(a, b, c, callback) { - callback(null, a, b, c); -}); -``` - -- Backward compatible with callback - -```js -var thenify = require('thenify'); - -var somethingAsync = thenify(function somethingAsync(a, b, c, callback) { - callback(null, a, b, c); -}, { withCallback: true }); - -// somethingAsync(a, b, c).then(onFulfilled).catch(onRejected); -// somethingAsync(a, b, c, function () {}); -``` - -or use `thenify.withCallback()` - -```js -var thenify = require('thenify').withCallback; - -var somethingAsync = thenify(function somethingAsync(a, b, c, callback) { - callback(null, a, b, c); -}); - -// somethingAsync(a, b, c).then(onFulfilled).catch(onRejected); -// somethingAsync(a, b, c, function () {}); -``` - -- Always return the first argument in callback - -```js -var thenify = require('thenify'); - -var promise = thenify(function (callback) { - callback(null, 1, 2, 3); -}, { multiArgs: false }); - -// promise().then(function onFulfilled(value) { -// assert.equal(value, 1); -// }); -``` - -- Converts callback arguments to an object - -```js -var thenify = require('thenify'); - -var promise = thenify(function (callback) { - callback(null, 1, 2, 3); -}, { multiArgs: [ 'one', 'tow', 'three' ] }); - -// promise().then(function onFulfilled(value) { -// assert.deepEqual(value, { -// one: 1, -// tow: 2, -// three: 3 -// }); -// }); -``` - -[gitter-image]: https://badges.gitter.im/thenables/thenify.png -[gitter-url]: https://gitter.im/thenables/thenify -[npm-image]: https://img.shields.io/npm/v/thenify.svg?style=flat-square -[npm-url]: https://npmjs.org/package/thenify -[github-tag]: http://img.shields.io/github/tag/thenables/thenify.svg?style=flat-square -[github-url]: https://github.com/thenables/thenify/tags -[travis-image]: https://img.shields.io/travis/thenables/thenify.svg?style=flat-square -[travis-url]: https://travis-ci.org/thenables/thenify -[coveralls-image]: https://img.shields.io/coveralls/thenables/thenify.svg?style=flat-square -[coveralls-url]: https://coveralls.io/r/thenables/thenify -[david-image]: http://img.shields.io/david/thenables/thenify.svg?style=flat-square -[david-url]: https://david-dm.org/thenables/thenify -[license-image]: http://img.shields.io/npm/l/thenify.svg?style=flat-square -[license-url]: LICENSE -[downloads-image]: http://img.shields.io/npm/dm/thenify.svg?style=flat-square -[downloads-url]: https://npmjs.org/package/thenify diff --git a/truebit-implementation/node_modules/thenify/index.js b/truebit-implementation/node_modules/thenify/index.js deleted file mode 100644 index 161d32e6..00000000 --- a/truebit-implementation/node_modules/thenify/index.js +++ /dev/null @@ -1,80 +0,0 @@ - -var Promise = require('any-promise') -var assert = require('assert') - -module.exports = thenify - -/** - * Turn async functions into promises - * - * @param {Function} $$__fn__$$ - * @return {Function} - * @api public - */ - -function thenify($$__fn__$$, options) { - assert(typeof $$__fn__$$ === 'function') - return eval(createWrapper($$__fn__$$.name, options)) -} - -/** - * Turn async functions into promises and backward compatible with callback - * - * @param {Function} $$__fn__$$ - * @return {Function} - * @api public - */ - -thenify.withCallback = function ($$__fn__$$, options) { - assert(typeof $$__fn__$$ === 'function') - options = options || {} - options.withCallback = true - if (options.multiArgs === undefined) options.multiArgs = true - return eval(createWrapper($$__fn__$$.name, options)) -} - -function createCallback(resolve, reject, multiArgs) { - return function(err, value) { - if (err) return reject(err) - var length = arguments.length - - if (length <= 2 || !multiArgs) return resolve(value) - - if (Array.isArray(multiArgs)) { - var values = {} - for (var i = 1; i < length; i++) values[multiArgs[i - 1]] = arguments[i] - return resolve(values) - } - - var values = new Array(length - 1) - for (var i = 1; i < length; ++i) values[i - 1] = arguments[i] - resolve(values) - } -} - -function createWrapper(name, options) { - name = (name || '').replace(/\s|bound(?!$)/g, '') - options = options || {} - // default to true - var multiArgs = options.multiArgs !== undefined ? options.multiArgs : true - multiArgs = 'var multiArgs = ' + JSON.stringify(multiArgs) + '\n' - - var withCallback = options.withCallback ? - 'var lastType = typeof arguments[len - 1]\n' - + 'if (lastType === "function") return $$__fn__$$.apply(self, arguments)\n' - : '' - - return '(function ' + name + '() {\n' - + 'var self = this\n' - + 'var len = arguments.length\n' - + multiArgs - + withCallback - + 'var args = new Array(len + 1)\n' - + 'for (var i = 0; i < len; ++i) args[i] = arguments[i]\n' - + 'var lastIndex = i\n' - + 'return new Promise(function (resolve, reject) {\n' - + 'args[lastIndex] = createCallback(resolve, reject, multiArgs)\n' - + '$$__fn__$$.apply(self, args)\n' - + '})\n' - + '})' -} diff --git a/truebit-implementation/node_modules/thenify/package.json b/truebit-implementation/node_modules/thenify/package.json deleted file mode 100644 index b0fc8083..00000000 --- a/truebit-implementation/node_modules/thenify/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "_from": "thenify@>= 3.1.0 < 4", - "_id": "thenify@3.3.0", - "_inBundle": false, - "_integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "_location": "/thenify", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "thenify@>= 3.1.0 < 4", - "name": "thenify", - "escapedName": "thenify", - "rawSpec": ">= 3.1.0 < 4", - "saveSpec": null, - "fetchSpec": ">= 3.1.0 < 4" - }, - "_requiredBy": [ - "/thenify-all" - ], - "_resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "_shasum": "e69e38a1babe969b0108207978b9f62b88604839", - "_spec": "thenify@>= 3.1.0 < 4", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/thenify-all", - "author": { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - }, - "bugs": { - "url": "https://github.com/thenables/thenify/issues" - }, - "bundleDependencies": false, - "dependencies": { - "any-promise": "^1.0.0" - }, - "deprecated": false, - "description": "Promisify a callback-based function", - "devDependencies": { - "bluebird": "^3.1.1", - "istanbul": "^0.4.0", - "mocha": "^3.0.2" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/thenables/thenify#readme", - "keywords": [ - "promisify", - "promise", - "thenify", - "then", - "es6" - ], - "license": "MIT", - "name": "thenify", - "repository": { - "type": "git", - "url": "git+https://github.com/thenables/thenify.git" - }, - "scripts": { - "test": "mocha --reporter spec", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" - }, - "version": "3.3.0" -} diff --git a/truebit-implementation/node_modules/through/.travis.yml b/truebit-implementation/node_modules/through/.travis.yml deleted file mode 100644 index c693a939..00000000 --- a/truebit-implementation/node_modules/through/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - "0.10" diff --git a/truebit-implementation/node_modules/through/LICENSE.APACHE2 b/truebit-implementation/node_modules/through/LICENSE.APACHE2 deleted file mode 100644 index 6366c047..00000000 --- a/truebit-implementation/node_modules/through/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/truebit-implementation/node_modules/through/LICENSE.MIT b/truebit-implementation/node_modules/through/LICENSE.MIT deleted file mode 100644 index 6eafbd73..00000000 --- a/truebit-implementation/node_modules/through/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/through/index.js b/truebit-implementation/node_modules/through/index.js deleted file mode 100644 index ca5fc590..00000000 --- a/truebit-implementation/node_modules/through/index.js +++ /dev/null @@ -1,108 +0,0 @@ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end, opts) { - write = write || function (data) { this.queue(data) } - end = end || function () { this.queue(null) } - - var ended = false, destroyed = false, buffer = [], _ended = false - var stream = new Stream() - stream.readable = stream.writable = true - stream.paused = false - -// stream.autoPause = !(opts && opts.autoPause === false) - stream.autoDestroy = !(opts && opts.autoDestroy === false) - - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } - - stream.queue = stream.push = function (data) { -// console.error(ended) - if(_ended) return stream - if(data === null) _ended = true - buffer.push(data) - drain() - return stream - } - - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' - - stream.on('end', function () { - stream.readable = false - if(!stream.writable && stream.autoDestroy) - process.nextTick(function () { - stream.destroy() - }) - }) - - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable && stream.autoDestroy) - stream.destroy() - } - - stream.end = function (data) { - if(ended) return - ended = true - if(arguments.length) stream.write(data) - _end() // will emit or queue - return stream - } - - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - return stream - } - - stream.pause = function () { - if(stream.paused) return - stream.paused = true - return stream - } - - stream.resume = function () { - if(stream.paused) { - stream.paused = false - stream.emit('resume') - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - return stream - } - return stream -} - diff --git a/truebit-implementation/node_modules/through/package.json b/truebit-implementation/node_modules/through/package.json deleted file mode 100644 index bde2d4ea..00000000 --- a/truebit-implementation/node_modules/through/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "through@^2.3.6", - "_id": "through@2.3.8", - "_inBundle": false, - "_integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "_location": "/through", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "through@^2.3.6", - "name": "through", - "escapedName": "through", - "rawSpec": "^2.3.6", - "saveSpec": null, - "fetchSpec": "^2.3.6" - }, - "_requiredBy": [ - "/unbzip2-stream" - ], - "_resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "_shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5", - "_spec": "through@^2.3.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/unbzip2-stream", - "author": { - "name": "Dominic Tarr", - "email": "dominic.tarr@gmail.com", - "url": "dominictarr.com" - }, - "bugs": { - "url": "https://github.com/dominictarr/through/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "simplified stream construction", - "devDependencies": { - "from": "~0.1.3", - "stream-spec": "~0.3.5", - "tape": "~2.3.2" - }, - "homepage": "https://github.com/dominictarr/through", - "keywords": [ - "stream", - "streams", - "user-streams", - "pipe" - ], - "license": "MIT", - "main": "index.js", - "name": "through", - "repository": { - "type": "git", - "url": "git+https://github.com/dominictarr/through.git" - }, - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "testling": { - "browsers": [ - "ie/8..latest", - "ff/15..latest", - "chrome/20..latest", - "safari/5.1..latest" - ], - "files": "test/*.js" - }, - "version": "2.3.8" -} diff --git a/truebit-implementation/node_modules/through/readme.markdown b/truebit-implementation/node_modules/through/readme.markdown deleted file mode 100644 index cb34c813..00000000 --- a/truebit-implementation/node_modules/through/readme.markdown +++ /dev/null @@ -1,64 +0,0 @@ -#through - -[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) -[![testling badge](https://ci.testling.com/dominictarr/through.png)](https://ci.testling.com/dominictarr/through) - -Easy way to create a `Stream` that is both `readable` and `writable`. - -* Pass in optional `write` and `end` methods. -* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`. -* Use `this.pause()` and `this.resume()` to manage flow. -* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`). - -This function is the basis for most of the synchronous streams in -[event-stream](http://github.com/dominictarr/event-stream). - -``` js -var through = require('through') - -through(function write(data) { - this.queue(data) //data *must* not be null - }, - function end () { //optional - this.queue(null) - }) -``` - -Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`, -and this.emit('end') - -``` js -var through = require('through') - -through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) -``` - -## Extended Options - -You will probably not need these 99% of the time. - -### autoDestroy=false - -By default, `through` emits close when the writable -and readable side of the stream has ended. -If that is not desired, set `autoDestroy=false`. - -``` js -var through = require('through') - -//like this -var ts = through(write, end, {autoDestroy: false}) -//or like this -var ts = through(write, end) -ts.autoDestroy = false -``` - -## License - -MIT / Apache2 diff --git a/truebit-implementation/node_modules/through/test/async.js b/truebit-implementation/node_modules/through/test/async.js deleted file mode 100644 index 46bdbaeb..00000000 --- a/truebit-implementation/node_modules/through/test/async.js +++ /dev/null @@ -1,28 +0,0 @@ -var from = require('from') -var through = require('../') - -var tape = require('tape') - -tape('simple async example', function (t) { - - var n = 0, expected = [1,2,3,4,5], actual = [] - from(expected) - .pipe(through(function(data) { - this.pause() - n ++ - setTimeout(function(){ - console.log('pushing data', data) - this.push(data) - this.resume() - }.bind(this), 300) - })).pipe(through(function(data) { - console.log('pushing data second time', data); - this.push(data) - })).on('data', function (d) { - actual.push(d) - }).on('end', function() { - t.deepEqual(actual, expected) - t.end() - }) - -}) diff --git a/truebit-implementation/node_modules/through/test/auto-destroy.js b/truebit-implementation/node_modules/through/test/auto-destroy.js deleted file mode 100644 index 9a8fd000..00000000 --- a/truebit-implementation/node_modules/through/test/auto-destroy.js +++ /dev/null @@ -1,30 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - ts.autoDestroy = false - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.notOk(closed) - ts.destroy() - assert.ok(closed) - assert.end() -}) - diff --git a/truebit-implementation/node_modules/through/test/buffering.js b/truebit-implementation/node_modules/through/test/buffering.js deleted file mode 100644 index b0084bfc..00000000 --- a/truebit-implementation/node_modules/through/test/buffering.js +++ /dev/null @@ -1,71 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('buffering', function(assert) { - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - assert.deepEqual(actual, [1, 2, 3]) - ts.pause() - ts.write(4) - ts.write(5) - ts.write(6) - assert.deepEqual(actual, [1, 2, 3]) - ts.resume() - assert.deepEqual(actual, [1, 2, 3, 4, 5, 6]) - ts.pause() - ts.end() - assert.ok(!ended) - ts.resume() - assert.ok(ended) - assert.end() -}) - -test('buffering has data in queue, when ends', function (assert) { - - /* - * If stream ends while paused with data in the queue, - * stream should still emit end after all data is written - * on resume. - */ - - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.pause() - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.deepEqual(actual, [], 'no data written yet, still paused') - assert.ok(!ended, 'end not emitted yet, still paused') - ts.resume() - assert.deepEqual(actual, [1, 2, 3], 'resumed, all data should be delivered') - assert.ok(ended, 'end should be emitted once all data was delivered') - assert.end(); -}) diff --git a/truebit-implementation/node_modules/through/test/end.js b/truebit-implementation/node_modules/through/test/end.js deleted file mode 100644 index fa113f58..00000000 --- a/truebit-implementation/node_modules/through/test/end.js +++ /dev/null @@ -1,45 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.ok(closed) - assert.end() -}) - -test('end only once', function (t) { - - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - t.equal(ended, false) - ended = true - }) - - ts.queue(null) - ts.queue(null) - ts.queue(null) - - ts.resume() - - t.end() -}) diff --git a/truebit-implementation/node_modules/through/test/index.js b/truebit-implementation/node_modules/through/test/index.js deleted file mode 100644 index 96da82f9..00000000 --- a/truebit-implementation/node_modules/through/test/index.js +++ /dev/null @@ -1,133 +0,0 @@ - -var test = require('tape') -var spec = require('stream-spec') -var through = require('../') - -/* - I'm using these two functions, and not streams and pipe - so there is less to break. if this test fails it must be - the implementation of _through_ -*/ - -function write(array, stream) { - array = array.slice() - function next() { - while(array.length) - if(stream.write(array.shift()) === false) - return stream.once('drain', next) - - stream.end() - } - - next() -} - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -test('simple defaults', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through() - var s = spec(t).through().pausable() - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - assert.end() - }) - - t.on('close', s.validate) - - write(expected, t) -}); - -test('simple functions', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through(function (data) { - this.emit('data', data*2) - }) - var s = spec(t).through().pausable() - - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected.map(function (data) { - return data*2 - })) - assert.end() - }) - - t.on('close', s.validate) - - write(expected, t) -}) - -test('pauses', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l) //Math.random()) - - var t = through() - - var s = spec(t) - .through() - .pausable() - - t.on('data', function () { - if(Math.random() > 0.1) return - t.pause() - process.nextTick(function () { - t.resume() - }) - }) - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - }) - - t.on('close', function () { - s.validate() - assert.end() - }) - - write(expected, t) -}) - -test('does not soft-end on `undefined`', function(assert) { - var stream = through() - , count = 0 - - stream.on('data', function (data) { - count++ - }) - - stream.write(undefined) - stream.write(undefined) - - assert.equal(count, 2) - - assert.end() -}) diff --git a/truebit-implementation/node_modules/timed-out/index.js b/truebit-implementation/node_modules/timed-out/index.js deleted file mode 100644 index 94007a4a..00000000 --- a/truebit-implementation/node_modules/timed-out/index.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -module.exports = function (req, time) { - if (req.timeoutTimer) { - return req; - } - - var delays = isNaN(time) ? time : {socket: time, connect: time}; - var host = req._headers ? (' to ' + req._headers.host) : ''; - - if (delays.connect !== undefined) { - req.timeoutTimer = setTimeout(function timeoutHandler() { - req.abort(); - var e = new Error('Connection timed out on request' + host); - e.code = 'ETIMEDOUT'; - req.emit('error', e); - }, delays.connect); - } - - // Clear the connection timeout timer once a socket is assigned to the - // request and is connected. - req.on('socket', function assign(socket) { - // Socket may come from Agent pool and may be already connected. - if (!(socket.connecting || socket._connecting)) { - connect(); - return; - } - - socket.once('connect', connect); - }); - - function clear() { - if (req.timeoutTimer) { - clearTimeout(req.timeoutTimer); - req.timeoutTimer = null; - } - } - - function connect() { - clear(); - - if (delays.socket !== undefined) { - // Abort the request if there is no activity on the socket for more - // than `delays.socket` milliseconds. - req.setTimeout(delays.socket, function socketTimeoutHandler() { - req.abort(); - var e = new Error('Socket timed out on request' + host); - e.code = 'ESOCKETTIMEDOUT'; - req.emit('error', e); - }); - } - } - - return req.on('error', clear); -}; diff --git a/truebit-implementation/node_modules/timed-out/license b/truebit-implementation/node_modules/timed-out/license deleted file mode 100644 index faadd528..00000000 --- a/truebit-implementation/node_modules/timed-out/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/timed-out/package.json b/truebit-implementation/node_modules/timed-out/package.json deleted file mode 100644 index 4f282e61..00000000 --- a/truebit-implementation/node_modules/timed-out/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "_from": "timed-out@^4.0.0", - "_id": "timed-out@4.0.1", - "_inBundle": false, - "_integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "_location": "/timed-out", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "timed-out@^4.0.0", - "name": "timed-out", - "escapedName": "timed-out", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/got", - "/xhr-request" - ], - "_resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "_shasum": "f32eacac5a175bea25d7fab565ab3ed8741ef56f", - "_spec": "timed-out@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Vsevolod Strukchinsky", - "email": "floatdrop@gmail.com" - }, - "bugs": { - "url": "https://github.com/floatdrop/timed-out/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Emit `ETIMEDOUT` or `ESOCKETTIMEDOUT` when ClientRequest is hanged", - "devDependencies": { - "mocha": "*", - "xo": "^0.16.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/floatdrop/timed-out#readme", - "keywords": [ - "http", - "https", - "get", - "got", - "url", - "uri", - "request", - "util", - "utility", - "simple" - ], - "license": "MIT", - "name": "timed-out", - "repository": { - "type": "git", - "url": "git+https://github.com/floatdrop/timed-out.git" - }, - "scripts": { - "test": "xo && mocha" - }, - "version": "4.0.1" -} diff --git a/truebit-implementation/node_modules/timed-out/readme.md b/truebit-implementation/node_modules/timed-out/readme.md deleted file mode 100644 index fa0a0356..00000000 --- a/truebit-implementation/node_modules/timed-out/readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# timed-out [![Build Status](https://travis-ci.org/floatdrop/timed-out.svg?branch=master)](https://travis-ci.org/floatdrop/timed-out) - -> Timeout HTTP/HTTPS requests - -Emit Error object with `code` property equal `ETIMEDOUT` or `ESOCKETTIMEDOUT` when ClientRequest is hanged. - -## Usage - -```js -var get = require('http').get; -var timeout = require('timed-out'); - -var req = get('http://www.google.ru'); -timeout(req, 2000); // Set 2 seconds limit -``` - -### API - -#### timedout(request, time) - -##### request - -*Required* -Type: [`ClientRequest`](http://nodejs.org/api/http.html#http_class_http_clientrequest) - -The request to watch on. - -##### time - -*Required* -Type: `number` or `object` - -Time in milliseconds to wait for `connect` event on socket and also time to wait on inactive socket. - -Or you can pass Object with following fields: - -- `connect` - time to wait for connection -- `socket` - time to wait for activity on socket - -## License - -MIT © [Vsevolod Strukchinsky](floatdrop@gmail.com) diff --git a/truebit-implementation/node_modules/to-buffer/.travis.yml b/truebit-implementation/node_modules/to-buffer/.travis.yml deleted file mode 100644 index ac468723..00000000 --- a/truebit-implementation/node_modules/to-buffer/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -sudo: false - -language: node_js - -node_js: - - "5" - - "4" - - "0.12" - - "0.10" diff --git a/truebit-implementation/node_modules/to-buffer/LICENSE b/truebit-implementation/node_modules/to-buffer/LICENSE deleted file mode 100644 index bae9da7b..00000000 --- a/truebit-implementation/node_modules/to-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/to-buffer/README.md b/truebit-implementation/node_modules/to-buffer/README.md deleted file mode 100644 index fe334a4f..00000000 --- a/truebit-implementation/node_modules/to-buffer/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# to-buffer - -Pass in a string, get a buffer back. Pass in a buffer, get the same buffer back. - -``` -npm install to-buffer -``` - -[![build status](https://travis-ci.org/mafintosh/to-buffer.svg?branch=master)](https://travis-ci.org/mafintosh/to-buffer) - -## Usage - -``` js -var toBuffer = require('to-buffer') -console.log(toBuffer('hi')) // -console.log(toBuffer(Buffer('hi'))) // -console.log(toBuffer('6869', 'hex')) // -console.log(toBuffer(43)) // throws -``` - -## License - -MIT diff --git a/truebit-implementation/node_modules/to-buffer/index.js b/truebit-implementation/node_modules/to-buffer/index.js deleted file mode 100644 index 9bd49788..00000000 --- a/truebit-implementation/node_modules/to-buffer/index.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = toBuffer - -var makeBuffer = Buffer.from && Buffer.from !== Uint8Array.from ? Buffer.from : bufferFrom - -function bufferFrom (buf, enc) { - return new Buffer(buf, enc) -} - -function toBuffer (buf, enc) { - if (Buffer.isBuffer(buf)) return buf - if (typeof buf === 'string') return makeBuffer(buf, enc) - if (Array.isArray(buf)) return makeBuffer(buf) - throw new Error('Input should be a buffer or a string') -} diff --git a/truebit-implementation/node_modules/to-buffer/package.json b/truebit-implementation/node_modules/to-buffer/package.json deleted file mode 100644 index 493602c9..00000000 --- a/truebit-implementation/node_modules/to-buffer/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "_from": "to-buffer@^1.1.1", - "_id": "to-buffer@1.1.1", - "_inBundle": false, - "_integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "_location": "/to-buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "to-buffer@^1.1.1", - "name": "to-buffer", - "escapedName": "to-buffer", - "rawSpec": "^1.1.1", - "saveSpec": null, - "fetchSpec": "^1.1.1" - }, - "_requiredBy": [ - "/tar-stream" - ], - "_resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "_shasum": "493bd48f62d7c43fcded313a03dcadb2e1213a80", - "_spec": "to-buffer@^1.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar-stream", - "author": { - "name": "Mathias Buus", - "url": "@mafintosh" - }, - "bugs": { - "url": "https://github.com/mafintosh/to-buffer/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Pass in a string, get a buffer back. Pass in a buffer, get the same buffer back", - "devDependencies": { - "standard": "^6.0.5", - "tape": "^4.4.0" - }, - "homepage": "https://github.com/mafintosh/to-buffer", - "license": "MIT", - "main": "index.js", - "name": "to-buffer", - "repository": { - "type": "git", - "url": "git+https://github.com/mafintosh/to-buffer.git" - }, - "scripts": { - "test": "standard && tape test.js" - }, - "version": "1.1.1" -} diff --git a/truebit-implementation/node_modules/to-buffer/test.js b/truebit-implementation/node_modules/to-buffer/test.js deleted file mode 100644 index f5e97d6e..00000000 --- a/truebit-implementation/node_modules/to-buffer/test.js +++ /dev/null @@ -1,26 +0,0 @@ -var tape = require('tape') -var toBuffer = require('./') - -tape('buffer returns buffer', function (t) { - t.same(toBuffer(Buffer('hi')), Buffer('hi')) - t.end() -}) - -tape('string returns buffer', function (t) { - t.same(toBuffer('hi'), Buffer('hi')) - t.end() -}) - -tape('string + enc returns buffer', function (t) { - t.same(toBuffer('6869', 'hex'), Buffer('hi')) - t.end() -}) - -tape('other input throws', function (t) { - try { - toBuffer(42) - } catch (err) { - t.same(err.message, 'Input should be a buffer or a string') - t.end() - } -}) diff --git a/truebit-implementation/node_modules/tough-cookie/LICENSE b/truebit-implementation/node_modules/tough-cookie/LICENSE deleted file mode 100644 index 22204e87..00000000 --- a/truebit-implementation/node_modules/tough-cookie/LICENSE +++ /dev/null @@ -1,12 +0,0 @@ -Copyright (c) 2015, Salesforce.com, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. 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. - -3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS 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. diff --git a/truebit-implementation/node_modules/tough-cookie/README.md b/truebit-implementation/node_modules/tough-cookie/README.md deleted file mode 100644 index d28bd460..00000000 --- a/truebit-implementation/node_modules/tough-cookie/README.md +++ /dev/null @@ -1,507 +0,0 @@ -[RFC6265](https://tools.ietf.org/html/rfc6265) Cookies and CookieJar for Node.js - -[![npm package](https://nodei.co/npm/tough-cookie.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/tough-cookie/) - -[![Build Status](https://travis-ci.org/salesforce/tough-cookie.png?branch=master)](https://travis-ci.org/salesforce/tough-cookie) - -# Synopsis - -``` javascript -var tough = require('tough-cookie'); -var Cookie = tough.Cookie; -var cookie = Cookie.parse(header); -cookie.value = 'somethingdifferent'; -header = cookie.toString(); - -var cookiejar = new tough.CookieJar(); -cookiejar.setCookie(cookie, 'http://currentdomain.example.com/path', cb); -// ... -cookiejar.getCookies('http://example.com/otherpath',function(err,cookies) { - res.headers['cookie'] = cookies.join('; '); -}); -``` - -# Installation - -It's _so_ easy! - -`npm install tough-cookie` - -Why the name? NPM modules `cookie`, `cookies` and `cookiejar` were already taken. - -## Version Support - -Support for versions of node.js will follow that of the [request](https://www.npmjs.com/package/request) module. - -# API - -## tough - -Functions on the module you get from `require('tough-cookie')`. All can be used as pure functions and don't need to be "bound". - -**Note**: prior to 1.0.x, several of these functions took a `strict` parameter. This has since been removed from the API as it was no longer necessary. - -### `parseDate(string)` - -Parse a cookie date string into a `Date`. Parses according to RFC6265 Section 5.1.1, not `Date.parse()`. - -### `formatDate(date)` - -Format a Date into a RFC1123 string (the RFC6265-recommended format). - -### `canonicalDomain(str)` - -Transforms a domain-name into a canonical domain-name. The canonical domain-name is a trimmed, lowercased, stripped-of-leading-dot and optionally punycode-encoded domain-name (Section 5.1.2 of RFC6265). For the most part, this function is idempotent (can be run again on its output without ill effects). - -### `domainMatch(str,domStr[,canonicalize=true])` - -Answers "does this real domain match the domain in a cookie?". The `str` is the "current" domain-name and the `domStr` is the "cookie" domain-name. Matches according to RFC6265 Section 5.1.3, but it helps to think of it as a "suffix match". - -The `canonicalize` parameter will run the other two parameters through `canonicalDomain` or not. - -### `defaultPath(path)` - -Given a current request/response path, gives the Path apropriate for storing in a cookie. This is basically the "directory" of a "file" in the path, but is specified by Section 5.1.4 of the RFC. - -The `path` parameter MUST be _only_ the pathname part of a URI (i.e. excludes the hostname, query, fragment, etc.). This is the `.pathname` property of node's `uri.parse()` output. - -### `pathMatch(reqPath,cookiePath)` - -Answers "does the request-path path-match a given cookie-path?" as per RFC6265 Section 5.1.4. Returns a boolean. - -This is essentially a prefix-match where `cookiePath` is a prefix of `reqPath`. - -### `parse(cookieString[, options])` - -alias for `Cookie.parse(cookieString[, options])` - -### `fromJSON(string)` - -alias for `Cookie.fromJSON(string)` - -### `getPublicSuffix(hostname)` - -Returns the public suffix of this hostname. The public suffix is the shortest domain-name upon which a cookie can be set. Returns `null` if the hostname cannot have cookies set for it. - -For example: `www.example.com` and `www.subdomain.example.com` both have public suffix `example.com`. - -For further information, see http://publicsuffix.org/. This module derives its list from that site. This call is currently a wrapper around [`psl`](https://www.npmjs.com/package/psl)'s [get() method](https://www.npmjs.com/package/psl#pslgetdomain). - -### `cookieCompare(a,b)` - -For use with `.sort()`, sorts a list of cookies into the recommended order given in the RFC (Section 5.4 step 2). The sort algorithm is, in order of precedence: - -* Longest `.path` -* oldest `.creation` (which has a 1ms precision, same as `Date`) -* lowest `.creationIndex` (to get beyond the 1ms precision) - -``` javascript -var cookies = [ /* unsorted array of Cookie objects */ ]; -cookies = cookies.sort(cookieCompare); -``` - -**Note**: Since JavaScript's `Date` is limited to a 1ms precision, cookies within the same milisecond are entirely possible. This is especially true when using the `now` option to `.setCookie()`. The `.creationIndex` property is a per-process global counter, assigned during construction with `new Cookie()`. This preserves the spirit of the RFC sorting: older cookies go first. This works great for `MemoryCookieStore`, since `Set-Cookie` headers are parsed in order, but may not be so great for distributed systems. Sophisticated `Store`s may wish to set this to some other _logical clock_ such that if cookies A and B are created in the same millisecond, but cookie A is created before cookie B, then `A.creationIndex < B.creationIndex`. If you want to alter the global counter, which you probably _shouldn't_ do, it's stored in `Cookie.cookiesCreated`. - -### `permuteDomain(domain)` - -Generates a list of all possible domains that `domainMatch()` the parameter. May be handy for implementing cookie stores. - -### `permutePath(path)` - -Generates a list of all possible paths that `pathMatch()` the parameter. May be handy for implementing cookie stores. - - -## Cookie - -Exported via `tough.Cookie`. - -### `Cookie.parse(cookieString[, options])` - -Parses a single Cookie or Set-Cookie HTTP header into a `Cookie` object. Returns `undefined` if the string can't be parsed. - -The options parameter is not required and currently has only one property: - - * _loose_ - boolean - if `true` enable parsing of key-less cookies like `=abc` and `=`, which are not RFC-compliant. - -If options is not an object, it is ignored, which means you can use `Array#map` with it. - -Here's how to process the Set-Cookie header(s) on a node HTTP/HTTPS response: - -``` javascript -if (res.headers['set-cookie'] instanceof Array) - cookies = res.headers['set-cookie'].map(Cookie.parse); -else - cookies = [Cookie.parse(res.headers['set-cookie'])]; -``` - -_Note:_ in version 2.3.3, tough-cookie limited the number of spaces before the `=` to 256 characters. This limitation has since been removed. -See [Issue 92](https://github.com/salesforce/tough-cookie/issues/92) - -### Properties - -Cookie object properties: - - * _key_ - string - the name or key of the cookie (default "") - * _value_ - string - the value of the cookie (default "") - * _expires_ - `Date` - if set, the `Expires=` attribute of the cookie (defaults to the string `"Infinity"`). See `setExpires()` - * _maxAge_ - seconds - if set, the `Max-Age=` attribute _in seconds_ of the cookie. May also be set to strings `"Infinity"` and `"-Infinity"` for non-expiry and immediate-expiry, respectively. See `setMaxAge()` - * _domain_ - string - the `Domain=` attribute of the cookie - * _path_ - string - the `Path=` of the cookie - * _secure_ - boolean - the `Secure` cookie flag - * _httpOnly_ - boolean - the `HttpOnly` cookie flag - * _extensions_ - `Array` - any unrecognized cookie attributes as strings (even if equal-signs inside) - * _creation_ - `Date` - when this cookie was constructed - * _creationIndex_ - number - set at construction, used to provide greater sort precision (please see `cookieCompare(a,b)` for a full explanation) - -After a cookie has been passed through `CookieJar.setCookie()` it will have the following additional attributes: - - * _hostOnly_ - boolean - is this a host-only cookie (i.e. no Domain field was set, but was instead implied) - * _pathIsDefault_ - boolean - if true, there was no Path field on the cookie and `defaultPath()` was used to derive one. - * _creation_ - `Date` - **modified** from construction to when the cookie was added to the jar - * _lastAccessed_ - `Date` - last time the cookie got accessed. Will affect cookie cleaning once implemented. Using `cookiejar.getCookies(...)` will update this attribute. - -### `Cookie([{properties}])` - -Receives an options object that can contain any of the above Cookie properties, uses the default for unspecified properties. - -### `.toString()` - -encode to a Set-Cookie header value. The Expires cookie field is set using `formatDate()`, but is omitted entirely if `.expires` is `Infinity`. - -### `.cookieString()` - -encode to a Cookie header value (i.e. the `.key` and `.value` properties joined with '='). - -### `.setExpires(String)` - -sets the expiry based on a date-string passed through `parseDate()`. If parseDate returns `null` (i.e. can't parse this date string), `.expires` is set to `"Infinity"` (a string) is set. - -### `.setMaxAge(number)` - -sets the maxAge in seconds. Coerces `-Infinity` to `"-Infinity"` and `Infinity` to `"Infinity"` so it JSON serializes correctly. - -### `.expiryTime([now=Date.now()])` - -### `.expiryDate([now=Date.now()])` - -expiryTime() Computes the absolute unix-epoch milliseconds that this cookie expires. expiryDate() works similarly, except it returns a `Date` object. Note that in both cases the `now` parameter should be milliseconds. - -Max-Age takes precedence over Expires (as per the RFC). The `.creation` attribute -- or, by default, the `now` parameter -- is used to offset the `.maxAge` attribute. - -If Expires (`.expires`) is set, that's returned. - -Otherwise, `expiryTime()` returns `Infinity` and `expiryDate()` returns a `Date` object for "Tue, 19 Jan 2038 03:14:07 GMT" (latest date that can be expressed by a 32-bit `time_t`; the common limit for most user-agents). - -### `.TTL([now=Date.now()])` - -compute the TTL relative to `now` (milliseconds). The same precedence rules as for `expiryTime`/`expiryDate` apply. - -The "number" `Infinity` is returned for cookies without an explicit expiry and `0` is returned if the cookie is expired. Otherwise a time-to-live in milliseconds is returned. - -### `.canonicalizedDoman()` - -### `.cdomain()` - -return the canonicalized `.domain` field. This is lower-cased and punycode (RFC3490) encoded if the domain has any non-ASCII characters. - -### `.toJSON()` - -For convenience in using `JSON.serialize(cookie)`. Returns a plain-old `Object` that can be JSON-serialized. - -Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are exported in ISO format (`.toISOString()`). - -**NOTE**: Custom `Cookie` properties will be discarded. In tough-cookie 1.x, since there was no `.toJSON` method explicitly defined, all enumerable properties were captured. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. - -### `Cookie.fromJSON(strOrObj)` - -Does the reverse of `cookie.toJSON()`. If passed a string, will `JSON.parse()` that first. - -Any `Date` properties (i.e., `.expires`, `.creation`, and `.lastAccessed`) are parsed via `Date.parse()`, not the tough-cookie `parseDate`, since it's JavaScript/JSON-y timestamps being handled at this layer. - -Returns `null` upon JSON parsing error. - -### `.clone()` - -Does a deep clone of this cookie, exactly implemented as `Cookie.fromJSON(cookie.toJSON())`. - -### `.validate()` - -Status: *IN PROGRESS*. Works for a few things, but is by no means comprehensive. - -validates cookie attributes for semantic correctness. Useful for "lint" checking any Set-Cookie headers you generate. For now, it returns a boolean, but eventually could return a reason string -- you can future-proof with this construct: - -``` javascript -if (cookie.validate() === true) { - // it's tasty -} else { - // yuck! -} -``` - - -## CookieJar - -Exported via `tough.CookieJar`. - -### `CookieJar([store],[options])` - -Simply use `new CookieJar()`. If you'd like to use a custom store, pass that to the constructor otherwise a `MemoryCookieStore` will be created and used. - -The `options` object can be omitted and can have the following properties: - - * _rejectPublicSuffixes_ - boolean - default `true` - reject cookies with domains like "com" and "co.uk" - * _looseMode_ - boolean - default `false` - accept malformed cookies like `bar` and `=bar`, which have an implied empty name. - This is not in the standard, but is used sometimes on the web and is accepted by (most) browsers. - -Since eventually this module would like to support database/remote/etc. CookieJars, continuation passing style is used for CookieJar methods. - -### `.setCookie(cookieOrString, currentUrl, [{options},] cb(err,cookie))` - -Attempt to set the cookie in the cookie jar. If the operation fails, an error will be given to the callback `cb`, otherwise the cookie is passed through. The cookie will have updated `.creation`, `.lastAccessed` and `.hostOnly` properties. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _ignoreError_ - boolean - default `false` - silently ignore things like parse errors and invalid domains. `Store` errors aren't ignored by this option. - -As per the RFC, the `.hostOnly` property is set if there was no "Domain=" parameter in the cookie string (or `.domain` was null on the Cookie object). The `.domain` property is set to the fully-qualified hostname of `currentUrl` in this case. Matching this cookie requires an exact hostname match (not a `domainMatch` as per usual). - -### `.setCookieSync(cookieOrString, currentUrl, [{options}])` - -Synchronous version of `setCookie`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getCookies(currentUrl, [{options},] cb(err,cookies))` - -Retrieve the list of cookies that can be sent in a Cookie header for the current url. - -If an error is encountered, that's passed as `err` to the callback, otherwise an `Array` of `Cookie` objects is passed. The array is sorted with `cookieCompare()` unless the `{sort:false}` option is given. - -The `options` object can be omitted and can have the following properties: - - * _http_ - boolean - default `true` - indicates if this is an HTTP or non-HTTP API. Affects HttpOnly cookies. - * _secure_ - boolean - autodetect from url - indicates if this is a "Secure" API. If the currentUrl starts with `https:` or `wss:` then this is defaulted to `true`, otherwise `false`. - * _now_ - Date - default `new Date()` - what to use for the creation/access time of cookies - * _expire_ - boolean - default `true` - perform expiry-time checking of cookies and asynchronously remove expired cookies from the store. Using `false` will return expired cookies and **not** remove them from the store (which is useful for replaying Set-Cookie headers, potentially). - * _allPaths_ - boolean - default `false` - if `true`, do not scope cookies by path. The default uses RFC-compliant path scoping. **Note**: may not be supported by the underlying store (the default `MemoryCookieStore` supports it). - -The `.lastAccessed` property of the returned cookies will have been updated. - -### `.getCookiesSync(currentUrl, [{options}])` - -Synchronous version of `getCookies`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getCookieString(...)` - -Accepts the same options as `.getCookies()` but passes a string suitable for a Cookie header rather than an array to the callback. Simply maps the `Cookie` array via `.cookieString()`. - -### `.getCookieStringSync(...)` - -Synchronous version of `getCookieString`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.getSetCookieStrings(...)` - -Returns an array of strings suitable for **Set-Cookie** headers. Accepts the same options as `.getCookies()`. Simply maps the cookie array via `.toString()`. - -### `.getSetCookieStringsSync(...)` - -Synchronous version of `getSetCookieStrings`; only works with synchronous stores (e.g. the default `MemoryCookieStore`). - -### `.serialize(cb(err,serializedObject))` - -Serialize the Jar if the underlying store supports `.getAllCookies`. - -**NOTE**: Custom `Cookie` properties will be discarded. If you want a property to be serialized, add the property name to the `Cookie.serializableProperties` Array. - -See [Serialization Format]. - -### `.serializeSync()` - -Sync version of .serialize - -### `.toJSON()` - -Alias of .serializeSync() for the convenience of `JSON.stringify(cookiejar)`. - -### `CookieJar.deserialize(serialized, [store], cb(err,object))` - -A new Jar is created and the serialized Cookies are added to the underlying store. Each `Cookie` is added via `store.putCookie` in the order in which they appear in the serialization. - -The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. - -As a convenience, if `serialized` is a string, it is passed through `JSON.parse` first. If that throws an error, this is passed to the callback. - -### `CookieJar.deserializeSync(serialized, [store])` - -Sync version of `.deserialize`. _Note_ that the `store` must be synchronous for this to work. - -### `CookieJar.fromJSON(string)` - -Alias of `.deserializeSync` to provide consistency with `Cookie.fromJSON()`. - -### `.clone([store,]cb(err,newJar))` - -Produces a deep clone of this jar. Modifications to the original won't affect the clone, and vice versa. - -The `store` argument is optional, but should be an instance of `Store`. By default, a new instance of `MemoryCookieStore` is created. Transferring between store types is supported so long as the source implements `.getAllCookies()` and the destination implements `.putCookie()`. - -### `.cloneSync([store])` - -Synchronous version of `.clone`, returning a new `CookieJar` instance. - -The `store` argument is optional, but must be a _synchronous_ `Store` instance if specified. If not passed, a new instance of `MemoryCookieStore` is used. - -The _source_ and _destination_ must both be synchronous `Store`s. If one or both stores are asynchronous, use `.clone` instead. Recall that `MemoryCookieStore` supports both synchronous and asynchronous API calls. - -## Store - -Base class for CookieJar stores. Available as `tough.Store`. - -## Store API - -The storage model for each `CookieJar` instance can be replaced with a custom implementation. The default is `MemoryCookieStore` which can be found in the `lib/memstore.js` file. The API uses continuation-passing-style to allow for asynchronous stores. - -Stores should inherit from the base `Store` class, which is available as `require('tough-cookie').Store`. - -Stores are asynchronous by default, but if `store.synchronous` is set to `true`, then the `*Sync` methods on the of the containing `CookieJar` can be used (however, the continuation-passing style - -All `domain` parameters will have been normalized before calling. - -The Cookie store must have all of the following methods. - -### `store.findCookie(domain, path, key, cb(err,cookie))` - -Retrieve a cookie with the given domain, path and key (a.k.a. name). The RFC maintains that exactly one of these cookies should exist in a store. If the store is using versioning, this means that the latest/newest such cookie should be returned. - -Callback takes an error and the resulting `Cookie` object. If no cookie is found then `null` MUST be passed instead (i.e. not an error). - -### `store.findCookies(domain, path, cb(err,cookies))` - -Locates cookies matching the given domain and path. This is most often called in the context of `cookiejar.getCookies()` above. - -If no cookies are found, the callback MUST be passed an empty array. - -The resulting list will be checked for applicability to the current request according to the RFC (domain-match, path-match, http-only-flag, secure-flag, expiry, etc.), so it's OK to use an optimistic search algorithm when implementing this method. However, the search algorithm used SHOULD try to find cookies that `domainMatch()` the domain and `pathMatch()` the path in order to limit the amount of checking that needs to be done. - -As of version 0.9.12, the `allPaths` option to `cookiejar.getCookies()` above will cause the path here to be `null`. If the path is `null`, path-matching MUST NOT be performed (i.e. domain-matching only). - -### `store.putCookie(cookie, cb(err))` - -Adds a new cookie to the store. The implementation SHOULD replace any existing cookie with the same `.domain`, `.path`, and `.key` properties -- depending on the nature of the implementation, it's possible that between the call to `fetchCookie` and `putCookie` that a duplicate `putCookie` can occur. - -The `cookie` object MUST NOT be modified; the caller will have already updated the `.creation` and `.lastAccessed` properties. - -Pass an error if the cookie cannot be stored. - -### `store.updateCookie(oldCookie, newCookie, cb(err))` - -Update an existing cookie. The implementation MUST update the `.value` for a cookie with the same `domain`, `.path` and `.key`. The implementation SHOULD check that the old value in the store is equivalent to `oldCookie` - how the conflict is resolved is up to the store. - -The `.lastAccessed` property will always be different between the two objects (to the precision possible via JavaScript's clock). Both `.creation` and `.creationIndex` are guaranteed to be the same. Stores MAY ignore or defer the `.lastAccessed` change at the cost of affecting how cookies are selected for automatic deletion (e.g., least-recently-used, which is up to the store to implement). - -Stores may wish to optimize changing the `.value` of the cookie in the store versus storing a new cookie. If the implementation doesn't define this method a stub that calls `putCookie(newCookie,cb)` will be added to the store object. - -The `newCookie` and `oldCookie` objects MUST NOT be modified. - -Pass an error if the newCookie cannot be stored. - -### `store.removeCookie(domain, path, key, cb(err))` - -Remove a cookie from the store (see notes on `findCookie` about the uniqueness constraint). - -The implementation MUST NOT pass an error if the cookie doesn't exist; only pass an error due to the failure to remove an existing cookie. - -### `store.removeCookies(domain, path, cb(err))` - -Removes matching cookies from the store. The `path` parameter is optional, and if missing means all paths in a domain should be removed. - -Pass an error ONLY if removing any existing cookies failed. - -### `store.getAllCookies(cb(err, cookies))` - -Produces an `Array` of all cookies during `jar.serialize()`. The items in the array can be true `Cookie` objects or generic `Object`s with the [Serialization Format] data structure. - -Cookies SHOULD be returned in creation order to preserve sorting via `compareCookies()`. For reference, `MemoryCookieStore` will sort by `.creationIndex` since it uses true `Cookie` objects internally. If you don't return the cookies in creation order, they'll still be sorted by creation time, but this only has a precision of 1ms. See `compareCookies` for more detail. - -Pass an error if retrieval fails. - -## MemoryCookieStore - -Inherits from `Store`. - -A just-in-memory CookieJar synchronous store implementation, used by default. Despite being a synchronous implementation, it's usable with both the synchronous and asynchronous forms of the `CookieJar` API. - -## Community Cookie Stores - -These are some Store implementations authored and maintained by the community. They aren't official and we don't vouch for them but you may be interested to have a look: - -- [`db-cookie-store`](https://github.com/JSBizon/db-cookie-store): SQL including SQLite-based databases -- [`file-cookie-store`](https://github.com/JSBizon/file-cookie-store): Netscape cookie file format on disk -- [`redis-cookie-store`](https://github.com/benkroeger/redis-cookie-store): Redis -- [`tough-cookie-filestore`](https://github.com/mitsuru/tough-cookie-filestore): JSON on disk -- [`tough-cookie-web-storage-store`](https://github.com/exponentjs/tough-cookie-web-storage-store): DOM localStorage and sessionStorage - - -# Serialization Format - -**NOTE**: if you want to have custom `Cookie` properties serialized, add the property name to `Cookie.serializableProperties`. - -```js - { - // The version of tough-cookie that serialized this jar. - version: 'tough-cookie@1.x.y', - - // add the store type, to make humans happy: - storeType: 'MemoryCookieStore', - - // CookieJar configuration: - rejectPublicSuffixes: true, - // ... future items go here - - // Gets filled from jar.store.getAllCookies(): - cookies: [ - { - key: 'string', - value: 'string', - // ... - /* other Cookie.serializableProperties go here */ - } - ] - } -``` - -# Copyright and License - -(tl;dr: BSD-3-Clause with some MPL/2.0) - -```text - Copyright (c) 2015, Salesforce.com, Inc. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. 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. - - 3. Neither the name of Salesforce.com nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - - THIS 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. -``` diff --git a/truebit-implementation/node_modules/tough-cookie/lib/cookie.js b/truebit-implementation/node_modules/tough-cookie/lib/cookie.js deleted file mode 100644 index 039a0e71..00000000 --- a/truebit-implementation/node_modules/tough-cookie/lib/cookie.js +++ /dev/null @@ -1,1431 +0,0 @@ -/*! - * Copyright (c) 2015, Salesforce.com, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. 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. - * - * 3. Neither the name of Salesforce.com nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS 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. - */ -'use strict'; -var net = require('net'); -var urlParse = require('url').parse; -var util = require('util'); -var pubsuffix = require('./pubsuffix-psl'); -var Store = require('./store').Store; -var MemoryCookieStore = require('./memstore').MemoryCookieStore; -var pathMatch = require('./pathMatch').pathMatch; -var VERSION = require('../package.json').version; - -var punycode; -try { - punycode = require('punycode'); -} catch(e) { - console.warn("tough-cookie: can't load punycode; won't use punycode for domain normalization"); -} - -// From RFC6265 S4.1.1 -// note that it excludes \x3B ";" -var COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/; - -var CONTROL_CHARS = /[\x00-\x1F]/; - -// From Chromium // '\r', '\n' and '\0' should be treated as a terminator in -// the "relaxed" mode, see: -// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60 -var TERMINATORS = ['\n', '\r', '\0']; - -// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"' -// Note ';' is \x3B -var PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/; - -// date-time parsing constants (RFC6265 S5.1.1) - -var DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; - -var MONTH_TO_NUM = { - jan:0, feb:1, mar:2, apr:3, may:4, jun:5, - jul:6, aug:7, sep:8, oct:9, nov:10, dec:11 -}; -var NUM_TO_MONTH = [ - 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec' -]; -var NUM_TO_DAY = [ - 'Sun','Mon','Tue','Wed','Thu','Fri','Sat' -]; - -var MAX_TIME = 2147483647000; // 31-bit max -var MIN_TIME = 0; // 31-bit min - -/* - * Parses a Natural number (i.e., non-negative integer) with either the - * *DIGIT ( non-digit *OCTET ) - * or - * *DIGIT - * grammar (RFC6265 S5.1.1). - * - * The "trailingOK" boolean controls if the grammar accepts a - * "( non-digit *OCTET )" trailer. - */ -function parseDigits(token, minDigits, maxDigits, trailingOK) { - var count = 0; - while (count < token.length) { - var c = token.charCodeAt(count); - // "non-digit = %x00-2F / %x3A-FF" - if (c <= 0x2F || c >= 0x3A) { - break; - } - count++; - } - - // constrain to a minimum and maximum number of digits. - if (count < minDigits || count > maxDigits) { - return null; - } - - if (!trailingOK && count != token.length) { - return null; - } - - return parseInt(token.substr(0,count), 10); -} - -function parseTime(token) { - var parts = token.split(':'); - var result = [0,0,0]; - - /* RF6256 S5.1.1: - * time = hms-time ( non-digit *OCTET ) - * hms-time = time-field ":" time-field ":" time-field - * time-field = 1*2DIGIT - */ - - if (parts.length !== 3) { - return null; - } - - for (var i = 0; i < 3; i++) { - // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be - // followed by "( non-digit *OCTET )" so therefore the last time-field can - // have a trailer - var trailingOK = (i == 2); - var num = parseDigits(parts[i], 1, 2, trailingOK); - if (num === null) { - return null; - } - result[i] = num; - } - - return result; -} - -function parseMonth(token) { - token = String(token).substr(0,3).toLowerCase(); - var num = MONTH_TO_NUM[token]; - return num >= 0 ? num : null; -} - -/* - * RFC6265 S5.1.1 date parser (see RFC for full grammar) - */ -function parseDate(str) { - if (!str) { - return; - } - - /* RFC6265 S5.1.1: - * 2. Process each date-token sequentially in the order the date-tokens - * appear in the cookie-date - */ - var tokens = str.split(DATE_DELIM); - if (!tokens) { - return; - } - - var hour = null; - var minute = null; - var second = null; - var dayOfMonth = null; - var month = null; - var year = null; - - for (var i=0; i= 70 && year <= 99) { - year += 1900; - } else if (year >= 0 && year <= 69) { - year += 2000; - } - } - } - } - - /* RFC 6265 S5.1.1 - * "5. Abort these steps and fail to parse the cookie-date if: - * * at least one of the found-day-of-month, found-month, found- - * year, or found-time flags is not set, - * * the day-of-month-value is less than 1 or greater than 31, - * * the year-value is less than 1601, - * * the hour-value is greater than 23, - * * the minute-value is greater than 59, or - * * the second-value is greater than 59. - * (Note that leap seconds cannot be represented in this syntax.)" - * - * So, in order as above: - */ - if ( - dayOfMonth === null || month === null || year === null || second === null || - dayOfMonth < 1 || dayOfMonth > 31 || - year < 1601 || - hour > 23 || - minute > 59 || - second > 59 - ) { - return; - } - - return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second)); -} - -function formatDate(date) { - var d = date.getUTCDate(); d = d >= 10 ? d : '0'+d; - var h = date.getUTCHours(); h = h >= 10 ? h : '0'+h; - var m = date.getUTCMinutes(); m = m >= 10 ? m : '0'+m; - var s = date.getUTCSeconds(); s = s >= 10 ? s : '0'+s; - return NUM_TO_DAY[date.getUTCDay()] + ', ' + - d+' '+ NUM_TO_MONTH[date.getUTCMonth()] +' '+ date.getUTCFullYear() +' '+ - h+':'+m+':'+s+' GMT'; -} - -// S5.1.2 Canonicalized Host Names -function canonicalDomain(str) { - if (str == null) { - return null; - } - str = str.trim().replace(/^\./,''); // S4.1.2.3 & S5.2.3: ignore leading . - - // convert to IDN if any non-ASCII characters - if (punycode && /[^\u0001-\u007f]/.test(str)) { - str = punycode.toASCII(str); - } - - return str.toLowerCase(); -} - -// S5.1.3 Domain Matching -function domainMatch(str, domStr, canonicalize) { - if (str == null || domStr == null) { - return null; - } - if (canonicalize !== false) { - str = canonicalDomain(str); - domStr = canonicalDomain(domStr); - } - - /* - * "The domain string and the string are identical. (Note that both the - * domain string and the string will have been canonicalized to lower case at - * this point)" - */ - if (str == domStr) { - return true; - } - - /* "All of the following [three] conditions hold:" (order adjusted from the RFC) */ - - /* "* The string is a host name (i.e., not an IP address)." */ - if (net.isIP(str)) { - return false; - } - - /* "* The domain string is a suffix of the string" */ - var idx = str.indexOf(domStr); - if (idx <= 0) { - return false; // it's a non-match (-1) or prefix (0) - } - - // e.g "a.b.c".indexOf("b.c") === 2 - // 5 === 3+2 - if (str.length !== domStr.length + idx) { // it's not a suffix - return false; - } - - /* "* The last character of the string that is not included in the domain - * string is a %x2E (".") character." */ - if (str.substr(idx-1,1) !== '.') { - return false; - } - - return true; -} - - -// RFC6265 S5.1.4 Paths and Path-Match - -/* - * "The user agent MUST use an algorithm equivalent to the following algorithm - * to compute the default-path of a cookie:" - * - * Assumption: the path (and not query part or absolute uri) is passed in. - */ -function defaultPath(path) { - // "2. If the uri-path is empty or if the first character of the uri-path is not - // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. - if (!path || path.substr(0,1) !== "/") { - return "/"; - } - - // "3. If the uri-path contains no more than one %x2F ("/") character, output - // %x2F ("/") and skip the remaining step." - if (path === "/") { - return path; - } - - var rightSlash = path.lastIndexOf("/"); - if (rightSlash === 0) { - return "/"; - } - - // "4. Output the characters of the uri-path from the first character up to, - // but not including, the right-most %x2F ("/")." - return path.slice(0, rightSlash); -} - -function trimTerminator(str) { - for (var t = 0; t < TERMINATORS.length; t++) { - var terminatorIdx = str.indexOf(TERMINATORS[t]); - if (terminatorIdx !== -1) { - str = str.substr(0,terminatorIdx); - } - } - - return str; -} - -function parseCookiePair(cookiePair, looseMode) { - cookiePair = trimTerminator(cookiePair); - - var firstEq = cookiePair.indexOf('='); - if (looseMode) { - if (firstEq === 0) { // '=' is immediately at start - cookiePair = cookiePair.substr(1); - firstEq = cookiePair.indexOf('='); // might still need to split on '=' - } - } else { // non-loose mode - if (firstEq <= 0) { // no '=' or is at start - return; // needs to have non-empty "cookie-name" - } - } - - var cookieName, cookieValue; - if (firstEq <= 0) { - cookieName = ""; - cookieValue = cookiePair.trim(); - } else { - cookieName = cookiePair.substr(0, firstEq).trim(); - cookieValue = cookiePair.substr(firstEq+1).trim(); - } - - if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) { - return; - } - - var c = new Cookie(); - c.key = cookieName; - c.value = cookieValue; - return c; -} - -function parse(str, options) { - if (!options || typeof options !== 'object') { - options = {}; - } - str = str.trim(); - - // We use a regex to parse the "name-value-pair" part of S5.2 - var firstSemi = str.indexOf(';'); // S5.2 step 1 - var cookiePair = (firstSemi === -1) ? str : str.substr(0, firstSemi); - var c = parseCookiePair(cookiePair, !!options.loose); - if (!c) { - return; - } - - if (firstSemi === -1) { - return c; - } - - // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string - // (including the %x3B (";") in question)." plus later on in the same section - // "discard the first ";" and trim". - var unparsed = str.slice(firstSemi + 1).trim(); - - // "If the unparsed-attributes string is empty, skip the rest of these - // steps." - if (unparsed.length === 0) { - return c; - } - - /* - * S5.2 says that when looping over the items "[p]rocess the attribute-name - * and attribute-value according to the requirements in the following - * subsections" for every item. Plus, for many of the individual attributes - * in S5.3 it says to use the "attribute-value of the last attribute in the - * cookie-attribute-list". Therefore, in this implementation, we overwrite - * the previous value. - */ - var cookie_avs = unparsed.split(';'); - while (cookie_avs.length) { - var av = cookie_avs.shift().trim(); - if (av.length === 0) { // happens if ";;" appears - continue; - } - var av_sep = av.indexOf('='); - var av_key, av_value; - - if (av_sep === -1) { - av_key = av; - av_value = null; - } else { - av_key = av.substr(0,av_sep); - av_value = av.substr(av_sep+1); - } - - av_key = av_key.trim().toLowerCase(); - - if (av_value) { - av_value = av_value.trim(); - } - - switch(av_key) { - case 'expires': // S5.2.1 - if (av_value) { - var exp = parseDate(av_value); - // "If the attribute-value failed to parse as a cookie date, ignore the - // cookie-av." - if (exp) { - // over and underflow not realistically a concern: V8's getTime() seems to - // store something larger than a 32-bit time_t (even with 32-bit node) - c.expires = exp; - } - } - break; - - case 'max-age': // S5.2.2 - if (av_value) { - // "If the first character of the attribute-value is not a DIGIT or a "-" - // character ...[or]... If the remainder of attribute-value contains a - // non-DIGIT character, ignore the cookie-av." - if (/^-?[0-9]+$/.test(av_value)) { - var delta = parseInt(av_value, 10); - // "If delta-seconds is less than or equal to zero (0), let expiry-time - // be the earliest representable date and time." - c.setMaxAge(delta); - } - } - break; - - case 'domain': // S5.2.3 - // "If the attribute-value is empty, the behavior is undefined. However, - // the user agent SHOULD ignore the cookie-av entirely." - if (av_value) { - // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E - // (".") character." - var domain = av_value.trim().replace(/^\./, ''); - if (domain) { - // "Convert the cookie-domain to lower case." - c.domain = domain.toLowerCase(); - } - } - break; - - case 'path': // S5.2.4 - /* - * "If the attribute-value is empty or if the first character of the - * attribute-value is not %x2F ("/"): - * Let cookie-path be the default-path. - * Otherwise: - * Let cookie-path be the attribute-value." - * - * We'll represent the default-path as null since it depends on the - * context of the parsing. - */ - c.path = av_value && av_value[0] === "/" ? av_value : null; - break; - - case 'secure': // S5.2.5 - /* - * "If the attribute-name case-insensitively matches the string "Secure", - * the user agent MUST append an attribute to the cookie-attribute-list - * with an attribute-name of Secure and an empty attribute-value." - */ - c.secure = true; - break; - - case 'httponly': // S5.2.6 -- effectively the same as 'secure' - c.httpOnly = true; - break; - - default: - c.extensions = c.extensions || []; - c.extensions.push(av); - break; - } - } - - return c; -} - -// avoid the V8 deoptimization monster! -function jsonParse(str) { - var obj; - try { - obj = JSON.parse(str); - } catch (e) { - return e; - } - return obj; -} - -function fromJSON(str) { - if (!str) { - return null; - } - - var obj; - if (typeof str === 'string') { - obj = jsonParse(str); - if (obj instanceof Error) { - return null; - } - } else { - // assume it's an Object - obj = str; - } - - var c = new Cookie(); - for (var i=0; i 1) { - var lindex = path.lastIndexOf('/'); - if (lindex === 0) { - break; - } - path = path.substr(0,lindex); - permutations.push(path); - } - permutations.push('/'); - return permutations; -} - -function getCookieContext(url) { - if (url instanceof Object) { - return url; - } - // NOTE: decodeURI will throw on malformed URIs (see GH-32). - // Therefore, we will just skip decoding for such URIs. - try { - url = decodeURI(url); - } - catch(err) { - // Silently swallow error - } - - return urlParse(url); -} - -function Cookie(options) { - options = options || {}; - - Object.keys(options).forEach(function(prop) { - if (Cookie.prototype.hasOwnProperty(prop) && - Cookie.prototype[prop] !== options[prop] && - prop.substr(0,1) !== '_') - { - this[prop] = options[prop]; - } - }, this); - - this.creation = this.creation || new Date(); - - // used to break creation ties in cookieCompare(): - Object.defineProperty(this, 'creationIndex', { - configurable: false, - enumerable: false, // important for assert.deepEqual checks - writable: true, - value: ++Cookie.cookiesCreated - }); -} - -Cookie.cookiesCreated = 0; // incremented each time a cookie is created - -Cookie.parse = parse; -Cookie.fromJSON = fromJSON; - -Cookie.prototype.key = ""; -Cookie.prototype.value = ""; - -// the order in which the RFC has them: -Cookie.prototype.expires = "Infinity"; // coerces to literal Infinity -Cookie.prototype.maxAge = null; // takes precedence over expires for TTL -Cookie.prototype.domain = null; -Cookie.prototype.path = null; -Cookie.prototype.secure = false; -Cookie.prototype.httpOnly = false; -Cookie.prototype.extensions = null; - -// set by the CookieJar: -Cookie.prototype.hostOnly = null; // boolean when set -Cookie.prototype.pathIsDefault = null; // boolean when set -Cookie.prototype.creation = null; // Date when set; defaulted by Cookie.parse -Cookie.prototype.lastAccessed = null; // Date when set -Object.defineProperty(Cookie.prototype, 'creationIndex', { - configurable: true, - enumerable: false, - writable: true, - value: 0 -}); - -Cookie.serializableProperties = Object.keys(Cookie.prototype) - .filter(function(prop) { - return !( - Cookie.prototype[prop] instanceof Function || - prop === 'creationIndex' || - prop.substr(0,1) === '_' - ); - }); - -Cookie.prototype.inspect = function inspect() { - var now = Date.now(); - return 'Cookie="'+this.toString() + - '; hostOnly='+(this.hostOnly != null ? this.hostOnly : '?') + - '; aAge='+(this.lastAccessed ? (now-this.lastAccessed.getTime())+'ms' : '?') + - '; cAge='+(this.creation ? (now-this.creation.getTime())+'ms' : '?') + - '"'; -}; - -// Use the new custom inspection symbol to add the custom inspect function if -// available. -if (util.inspect.custom) { - Cookie.prototype[util.inspect.custom] = Cookie.prototype.inspect; -} - -Cookie.prototype.toJSON = function() { - var obj = {}; - - var props = Cookie.serializableProperties; - for (var i=0; i - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/README.md b/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/README.md deleted file mode 100644 index 7ad7d1fa..00000000 --- a/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/README.md +++ /dev/null @@ -1,176 +0,0 @@ -# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/coveralls/bestiejs/punycode.js/master.svg)](https://coveralls.io/r/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) - -A robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891), and works on nearly all JavaScript platforms. - -This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: - -* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) -* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) -* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) -* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) -* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) - -This project is [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with [Node.js v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) and [io.js v1.0.0+](https://github.com/iojs/io.js/blob/v1.x/lib/punycode.js). - -## Installation - -Via [npm](https://www.npmjs.com/) (only required for Node.js releases older than v0.6.2): - -```bash -npm install punycode -``` - -Via [Bower](http://bower.io/): - -```bash -bower install punycode -``` - -Via [Component](https://github.com/component/component): - -```bash -component install bestiejs/punycode.js -``` - -In a browser: - -```html - -``` - -In [Node.js](https://nodejs.org/), [io.js](https://iojs.org/), [Narwhal](http://narwhaljs.org/), and [RingoJS](http://ringojs.org/): - -```js -var punycode = require('punycode'); -``` - -In [Rhino](http://www.mozilla.org/rhino/): - -```js -load('punycode.js'); -``` - -Using an AMD loader like [RequireJS](http://requirejs.org/): - -```js -require( - { - 'paths': { - 'punycode': 'path/to/punycode' - } - }, - ['punycode'], - function(punycode) { - console.log(punycode); - } -); -``` - -## API - -### `punycode.decode(string)` - -Converts a Punycode string of ASCII symbols to a string of Unicode symbols. - -```js -// decode domain name parts -punycode.decode('maana-pta'); // 'mañana' -punycode.decode('--dqo34k'); // '☃-⌘' -``` - -### `punycode.encode(string)` - -Converts a string of Unicode symbols to a Punycode string of ASCII symbols. - -```js -// encode domain name parts -punycode.encode('mañana'); // 'maana-pta' -punycode.encode('☃-⌘'); // '--dqo34k' -``` - -### `punycode.toUnicode(input)` - -Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. - -```js -// decode domain names -punycode.toUnicode('xn--maana-pta.com'); -// → 'mañana.com' -punycode.toUnicode('xn----dqo34k.com'); -// → '☃-⌘.com' - -// decode email addresses -punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); -// → 'джумла@джpумлатест.bрфa' -``` - -### `punycode.toASCII(input)` - -Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. - -```js -// encode domain names -punycode.toASCII('mañana.com'); -// → 'xn--maana-pta.com' -punycode.toASCII('☃-⌘.com'); -// → 'xn----dqo34k.com' - -// encode email addresses -punycode.toASCII('джумла@джpумлатест.bрфa'); -// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' -``` - -### `punycode.ucs2` - -#### `punycode.ucs2.decode(string)` - -Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. - -```js -punycode.ucs2.decode('abc'); -// → [0x61, 0x62, 0x63] -// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: -punycode.ucs2.decode('\uD834\uDF06'); -// → [0x1D306] -``` - -#### `punycode.ucs2.encode(codePoints)` - -Creates a string based on an array of numeric code point values. - -```js -punycode.ucs2.encode([0x61, 0x62, 0x63]); -// → 'abc' -punycode.ucs2.encode([0x1D306]); -// → '\uD834\uDF06' -``` - -### `punycode.version` - -A string representing the current Punycode.js version number. - -## Unit tests & code coverage - -After cloning this repository, run `npm install --dev` to install the dependencies needed for Punycode.js development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. - -Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`. - -To generate the code coverage report, use `grunt cover`. - -Feel free to fork if you see possible improvements! - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## Contributors - -| [![twitter/jdalton](https://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") | -|---| -| [John-David Dalton](http://allyoucanleet.com/) | - -## License - -Punycode.js is available under the [MIT](https://mths.be/mit) license. diff --git a/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/package.json b/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/package.json deleted file mode 100644 index 7954813b..00000000 --- a/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "punycode@^1.4.1", - "_id": "punycode@1.4.1", - "_inBundle": false, - "_integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "_location": "/tough-cookie/punycode", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "punycode@^1.4.1", - "name": "punycode", - "escapedName": "punycode", - "rawSpec": "^1.4.1", - "saveSpec": null, - "fetchSpec": "^1.4.1" - }, - "_requiredBy": [ - "/tough-cookie" - ], - "_resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "_shasum": "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e", - "_spec": "punycode@^1.4.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tough-cookie", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "bugs": { - "url": "https://github.com/bestiejs/punycode.js/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - { - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - } - ], - "deprecated": false, - "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", - "devDependencies": { - "coveralls": "^2.11.4", - "grunt": "^0.4.5", - "grunt-contrib-uglify": "^0.11.0", - "grunt-shell": "^1.1.2", - "istanbul": "^0.4.1", - "qunit-extras": "^1.4.4", - "qunitjs": "~1.11.0", - "requirejs": "^2.1.22" - }, - "files": [ - "LICENSE-MIT.txt", - "punycode.js" - ], - "homepage": "https://mths.be/punycode", - "jspm": { - "map": { - "./punycode.js": { - "node": "@node/punycode" - } - } - }, - "keywords": [ - "punycode", - "unicode", - "idn", - "idna", - "dns", - "url", - "domain" - ], - "license": "MIT", - "main": "punycode.js", - "name": "punycode", - "repository": { - "type": "git", - "url": "git+https://github.com/bestiejs/punycode.js.git" - }, - "scripts": { - "test": "node tests/tests.js" - }, - "version": "1.4.1" -} diff --git a/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/punycode.js b/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/punycode.js deleted file mode 100644 index 2c87f6cc..00000000 --- a/truebit-implementation/node_modules/tough-cookie/node_modules/punycode/punycode.js +++ /dev/null @@ -1,533 +0,0 @@ -/*! https://mths.be/punycode v1.4.1 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.4.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define('punycode', function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); diff --git a/truebit-implementation/node_modules/tough-cookie/package.json b/truebit-implementation/node_modules/tough-cookie/package.json deleted file mode 100644 index f11af204..00000000 --- a/truebit-implementation/node_modules/tough-cookie/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_from": "tough-cookie@~2.4.3", - "_id": "tough-cookie@2.4.3", - "_inBundle": false, - "_integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "_location": "/tough-cookie", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "tough-cookie@~2.4.3", - "name": "tough-cookie", - "escapedName": "tough-cookie", - "rawSpec": "~2.4.3", - "saveSpec": null, - "fetchSpec": "~2.4.3" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "_shasum": "53f36da3f47783b0925afa06ff9f3b165280f781", - "_spec": "tough-cookie@~2.4.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Jeremy Stashewsky", - "email": "jstash@gmail.com" - }, - "bugs": { - "url": "https://github.com/salesforce/tough-cookie/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Alexander Savin" - }, - { - "name": "Ian Livingstone" - }, - { - "name": "Ivan Nikulin" - }, - { - "name": "Lalit Kapoor" - }, - { - "name": "Sam Thompson" - }, - { - "name": "Sebastian Mayr" - } - ], - "dependencies": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "deprecated": false, - "description": "RFC6265 Cookies and Cookie Jar for node.js", - "devDependencies": { - "async": "^1.4.2", - "nyc": "^11.6.0", - "string.prototype.repeat": "^0.2.0", - "vows": "^0.8.1" - }, - "engines": { - "node": ">=0.8" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/salesforce/tough-cookie", - "keywords": [ - "HTTP", - "cookie", - "cookies", - "set-cookie", - "cookiejar", - "jar", - "RFC6265", - "RFC2965" - ], - "license": "BSD-3-Clause", - "main": "./lib/cookie", - "name": "tough-cookie", - "repository": { - "type": "git", - "url": "git://github.com/salesforce/tough-cookie.git" - }, - "scripts": { - "cover": "nyc --reporter=lcov --reporter=html vows test/*_test.js", - "test": "vows test/*_test.js" - }, - "version": "2.4.3" -} diff --git a/truebit-implementation/node_modules/trim/.npmignore b/truebit-implementation/node_modules/trim/.npmignore deleted file mode 100644 index f1250e58..00000000 --- a/truebit-implementation/node_modules/trim/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/truebit-implementation/node_modules/trim/History.md b/truebit-implementation/node_modules/trim/History.md deleted file mode 100644 index c8aa68fa..00000000 --- a/truebit-implementation/node_modules/trim/History.md +++ /dev/null @@ -1,5 +0,0 @@ - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/trim/Makefile b/truebit-implementation/node_modules/trim/Makefile deleted file mode 100644 index 4e9c8d36..00000000 --- a/truebit-implementation/node_modules/trim/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should \ - --reporter spec - -.PHONY: test \ No newline at end of file diff --git a/truebit-implementation/node_modules/trim/Readme.md b/truebit-implementation/node_modules/trim/Readme.md deleted file mode 100644 index 3460f523..00000000 --- a/truebit-implementation/node_modules/trim/Readme.md +++ /dev/null @@ -1,69 +0,0 @@ - -# trim - - Trims string whitespace. - -## Installation - -``` -$ npm install trim -$ component install component/trim -``` - -## API - - - [trim(str)](#trimstr) - - [.left(str)](#leftstr) - - [.right(str)](#rightstr) - - - -### trim(str) -should trim leading / trailing whitespace. - -```js -trim(' foo bar ').should.equal('foo bar'); -trim('\n\n\nfoo bar\n\r\n\n').should.equal('foo bar'); -``` - - -### .left(str) -should trim leading whitespace. - -```js -trim.left(' foo bar ').should.equal('foo bar '); -``` - - -### .right(str) -should trim trailing whitespace. - -```js -trim.right(' foo bar ').should.equal(' foo bar'); -``` - - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/trim/component.json b/truebit-implementation/node_modules/trim/component.json deleted file mode 100644 index 560b2589..00000000 --- a/truebit-implementation/node_modules/trim/component.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "trim", - "version": "0.0.1", - "description": "Trim string whitespace", - "keywords": ["string", "trim"], - "scripts": ["index.js"] -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/trim/index.js b/truebit-implementation/node_modules/trim/index.js deleted file mode 100644 index 640c24cf..00000000 --- a/truebit-implementation/node_modules/trim/index.js +++ /dev/null @@ -1,14 +0,0 @@ - -exports = module.exports = trim; - -function trim(str){ - return str.replace(/^\s*|\s*$/g, ''); -} - -exports.left = function(str){ - return str.replace(/^\s*/, ''); -}; - -exports.right = function(str){ - return str.replace(/\s*$/, ''); -}; diff --git a/truebit-implementation/node_modules/trim/package.json b/truebit-implementation/node_modules/trim/package.json deleted file mode 100644 index c4838275..00000000 --- a/truebit-implementation/node_modules/trim/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "_from": "trim@0.0.1", - "_id": "trim@0.0.1", - "_inBundle": false, - "_integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "_location": "/trim", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "trim@0.0.1", - "name": "trim", - "escapedName": "trim", - "rawSpec": "0.0.1", - "saveSpec": null, - "fetchSpec": "0.0.1" - }, - "_requiredBy": [ - "/parse-headers" - ], - "_resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "_shasum": "5858547f6b290757ee95cccc666fb50084c460dd", - "_spec": "trim@0.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/parse-headers", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "bundleDependencies": false, - "component": { - "scripts": { - "trim/index.js": "index.js" - } - }, - "dependencies": {}, - "deprecated": false, - "description": "Trim string whitespace", - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "string", - "trim" - ], - "main": "index", - "name": "trim", - "version": "0.0.1" -} diff --git a/truebit-implementation/node_modules/tunnel-agent/LICENSE b/truebit-implementation/node_modules/tunnel-agent/LICENSE deleted file mode 100644 index a4a9aee0..00000000 --- a/truebit-implementation/node_modules/tunnel-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/truebit-implementation/node_modules/tunnel-agent/README.md b/truebit-implementation/node_modules/tunnel-agent/README.md deleted file mode 100644 index bb533d56..00000000 --- a/truebit-implementation/node_modules/tunnel-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -tunnel-agent -============ - -HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module. diff --git a/truebit-implementation/node_modules/tunnel-agent/index.js b/truebit-implementation/node_modules/tunnel-agent/index.js deleted file mode 100644 index 3ee9abc5..00000000 --- a/truebit-implementation/node_modules/tunnel-agent/index.js +++ /dev/null @@ -1,244 +0,0 @@ -'use strict' - -var net = require('net') - , tls = require('tls') - , http = require('http') - , https = require('https') - , events = require('events') - , assert = require('assert') - , util = require('util') - , Buffer = require('safe-buffer').Buffer - ; - -exports.httpOverHttp = httpOverHttp -exports.httpsOverHttp = httpsOverHttp -exports.httpOverHttps = httpOverHttps -exports.httpsOverHttps = httpsOverHttps - - -function httpOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - return agent -} - -function httpsOverHttp(options) { - var agent = new TunnelingAgent(options) - agent.request = http.request - agent.createSocket = createSecureSocket - agent.defaultPort = 443 - return agent -} - -function httpOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - return agent -} - -function httpsOverHttps(options) { - var agent = new TunnelingAgent(options) - agent.request = https.request - agent.createSocket = createSecureSocket - agent.defaultPort = 443 - return agent -} - - -function TunnelingAgent(options) { - var self = this - self.options = options || {} - self.proxyOptions = self.options.proxy || {} - self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets - self.requests = [] - self.sockets = [] - - self.on('free', function onFree(socket, host, port) { - for (var i = 0, len = self.requests.length; i < len; ++i) { - var pending = self.requests[i] - if (pending.host === host && pending.port === port) { - // Detect the request to connect same origin server, - // reuse the connection. - self.requests.splice(i, 1) - pending.request.onSocket(socket) - return - } - } - socket.destroy() - self.removeSocket(socket) - }) -} -util.inherits(TunnelingAgent, events.EventEmitter) - -TunnelingAgent.prototype.addRequest = function addRequest(req, options) { - var self = this - - // Legacy API: addRequest(req, host, port, path) - if (typeof options === 'string') { - options = { - host: options, - port: arguments[2], - path: arguments[3] - }; - } - - if (self.sockets.length >= this.maxSockets) { - // We are over limit so we'll add it to the queue. - self.requests.push({host: options.host, port: options.port, request: req}) - return - } - - // If we are under maxSockets create a new one. - self.createConnection({host: options.host, port: options.port, request: req}) -} - -TunnelingAgent.prototype.createConnection = function createConnection(pending) { - var self = this - - self.createSocket(pending, function(socket) { - socket.on('free', onFree) - socket.on('close', onCloseOrRemove) - socket.on('agentRemove', onCloseOrRemove) - pending.request.onSocket(socket) - - function onFree() { - self.emit('free', socket, pending.host, pending.port) - } - - function onCloseOrRemove(err) { - self.removeSocket(socket) - socket.removeListener('free', onFree) - socket.removeListener('close', onCloseOrRemove) - socket.removeListener('agentRemove', onCloseOrRemove) - } - }) -} - -TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { - var self = this - var placeholder = {} - self.sockets.push(placeholder) - - var connectOptions = mergeOptions({}, self.proxyOptions, - { method: 'CONNECT' - , path: options.host + ':' + options.port - , agent: false - } - ) - if (connectOptions.proxyAuth) { - connectOptions.headers = connectOptions.headers || {} - connectOptions.headers['Proxy-Authorization'] = 'Basic ' + - Buffer.from(connectOptions.proxyAuth).toString('base64') - } - - debug('making CONNECT request') - var connectReq = self.request(connectOptions) - connectReq.useChunkedEncodingByDefault = false // for v0.6 - connectReq.once('response', onResponse) // for v0.6 - connectReq.once('upgrade', onUpgrade) // for v0.6 - connectReq.once('connect', onConnect) // for v0.7 or later - connectReq.once('error', onError) - connectReq.end() - - function onResponse(res) { - // Very hacky. This is necessary to avoid http-parser leaks. - res.upgrade = true - } - - function onUpgrade(res, socket, head) { - // Hacky. - process.nextTick(function() { - onConnect(res, socket, head) - }) - } - - function onConnect(res, socket, head) { - connectReq.removeAllListeners() - socket.removeAllListeners() - - if (res.statusCode === 200) { - assert.equal(head.length, 0) - debug('tunneling connection has established') - self.sockets[self.sockets.indexOf(placeholder)] = socket - cb(socket) - } else { - debug('tunneling socket could not be established, statusCode=%d', res.statusCode) - var error = new Error('tunneling socket could not be established, ' + 'statusCode=' + res.statusCode) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } - } - - function onError(cause) { - connectReq.removeAllListeners() - - debug('tunneling socket could not be established, cause=%s\n', cause.message, cause.stack) - var error = new Error('tunneling socket could not be established, ' + 'cause=' + cause.message) - error.code = 'ECONNRESET' - options.request.emit('error', error) - self.removeSocket(placeholder) - } -} - -TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { - var pos = this.sockets.indexOf(socket) - if (pos === -1) return - - this.sockets.splice(pos, 1) - - var pending = this.requests.shift() - if (pending) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createConnection(pending) - } -} - -function createSecureSocket(options, cb) { - var self = this - TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { - // 0 is dummy port for v0.6 - var secureSocket = tls.connect(0, mergeOptions({}, self.options, - { servername: options.host - , socket: socket - } - )) - self.sockets[self.sockets.indexOf(socket)] = secureSocket - cb(secureSocket) - }) -} - - -function mergeOptions(target) { - for (var i = 1, len = arguments.length; i < len; ++i) { - var overrides = arguments[i] - if (typeof overrides === 'object') { - var keys = Object.keys(overrides) - for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { - var k = keys[j] - if (overrides[k] !== undefined) { - target[k] = overrides[k] - } - } - } - } - return target -} - - -var debug -if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { - var args = Array.prototype.slice.call(arguments) - if (typeof args[0] === 'string') { - args[0] = 'TUNNEL: ' + args[0] - } else { - args.unshift('TUNNEL:') - } - console.error.apply(console, args) - } -} else { - debug = function() {} -} -exports.debug = debug // for test diff --git a/truebit-implementation/node_modules/tunnel-agent/package.json b/truebit-implementation/node_modules/tunnel-agent/package.json deleted file mode 100644 index 72f2f8f9..00000000 --- a/truebit-implementation/node_modules/tunnel-agent/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "_from": "tunnel-agent@^0.6.0", - "_id": "tunnel-agent@0.6.0", - "_inBundle": false, - "_integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "_location": "/tunnel-agent", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "tunnel-agent@^0.6.0", - "name": "tunnel-agent", - "escapedName": "tunnel-agent", - "rawSpec": "^0.6.0", - "saveSpec": null, - "fetchSpec": "^0.6.0" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "_shasum": "27a5dea06b36b04a0a9966774b290868f0fc40fd", - "_spec": "tunnel-agent@^0.6.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/tunnel-agent/issues" - }, - "bundleDependencies": false, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "deprecated": false, - "description": "HTTP proxy tunneling agent. Formerly part of mikeal/request, now a standalone module.", - "devDependencies": {}, - "engines": { - "node": "*" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/mikeal/tunnel-agent#readme", - "license": "Apache-2.0", - "main": "index.js", - "name": "tunnel-agent", - "optionalDependencies": {}, - "repository": { - "url": "git+https://github.com/mikeal/tunnel-agent.git" - }, - "version": "0.6.0" -} diff --git a/truebit-implementation/node_modules/tweetnacl/.npmignore b/truebit-implementation/node_modules/tweetnacl/.npmignore deleted file mode 100644 index 7d98dcbd..00000000 --- a/truebit-implementation/node_modules/tweetnacl/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -.eslintrc -.travis.yml -bower.json -test diff --git a/truebit-implementation/node_modules/tweetnacl/AUTHORS.md b/truebit-implementation/node_modules/tweetnacl/AUTHORS.md deleted file mode 100644 index 6d74d406..00000000 --- a/truebit-implementation/node_modules/tweetnacl/AUTHORS.md +++ /dev/null @@ -1,28 +0,0 @@ -List of TweetNaCl.js authors -============================ - - Alphabetical order by first name. - Format: Name (GitHub username or URL) - -* AndSDev (@AndSDev) -* Devi Mandiri (@devi) -* Dmitry Chestnykh (@dchest) - -List of authors of third-party public domain code from which TweetNaCl.js code was derived -========================================================================================== - -[TweetNaCl](http://tweetnacl.cr.yp.to/) --------------------------------------- - -* Bernard van Gastel -* Daniel J. Bernstein -* Peter Schwabe -* Sjaak Smetsers -* Tanja Lange -* Wesley Janssen - - -[Poly1305-donna](https://github.com/floodyberry/poly1305-donna) --------------------------------------------------------------- - -* Andrew Moon (@floodyberry) diff --git a/truebit-implementation/node_modules/tweetnacl/CHANGELOG.md b/truebit-implementation/node_modules/tweetnacl/CHANGELOG.md deleted file mode 100644 index 92a4fdc5..00000000 --- a/truebit-implementation/node_modules/tweetnacl/CHANGELOG.md +++ /dev/null @@ -1,221 +0,0 @@ -TweetNaCl.js Changelog -====================== - - -v0.14.5 -------- - -* Fixed incomplete return types in TypeScript typings. -* Replaced COPYING.txt with LICENSE file, which now has public domain dedication - text from The Unlicense. License fields in package.json and bower.json have - been set to "Unlicense". The project was and will be in the public domain -- - this change just makes it easier for automated tools to know about this fact by - using the widely recognized and SPDX-compatible template for public domain - dedication. - - -v0.14.4 -------- - -* Added TypeScript type definitions (contributed by @AndSDev). -* Improved benchmarking code. - - -v0.14.3 -------- - -Fixed a bug in the fast version of Poly1305 and brought it back. - -Thanks to @floodyberry for promptly responding and fixing the original C code: - -> "The issue was not properly detecting if st->h was >= 2^130 - 5, coupled with -> [testing mistake] not catching the failure. The chance of the bug affecting -> anything in the real world is essentially zero luckily, but it's good to have -> it fixed." - -https://github.com/floodyberry/poly1305-donna/issues/2#issuecomment-202698577 - - -v0.14.2 -------- - -Switched Poly1305 fast version back to original (slow) version due to a bug. - - -v0.14.1 -------- - -No code changes, just tweaked packaging and added COPYING.txt. - - -v0.14.0 -------- - -* **Breaking change!** All functions from `nacl.util` have been removed. These - functions are no longer available: - - nacl.util.decodeUTF8 - nacl.util.encodeUTF8 - nacl.util.decodeBase64 - nacl.util.encodeBase64 - - If want to continue using them, you can include - package: - - - - - or - - var nacl = require('tweetnacl'); - nacl.util = require('tweetnacl-util'); - - However it is recommended to use better packages that have wider - compatibility and better performance. Functions from `nacl.util` were never - intended to be robust solution for string conversion and were included for - convenience: cryptography library is not the right place for them. - - Currently calling these functions will throw error pointing to - `tweetnacl-util-js` (in the next version this error message will be removed). - -* Improved detection of available random number generators, making it possible - to use `nacl.randomBytes` and related functions in Web Workers without - changes. - -* Changes to testing (see README). - - -v0.13.3 -------- - -No code changes. - -* Reverted license field in package.json to "Public domain". - -* Fixed typo in README. - - -v0.13.2 -------- - -* Fixed undefined variable bug in fast version of Poly1305. No worries, this - bug was *never* triggered. - -* Specified CC0 public domain dedication. - -* Updated development dependencies. - - -v0.13.1 -------- - -* Exclude `crypto` and `buffer` modules from browserify builds. - - -v0.13.0 -------- - -* Made `nacl-fast` the default version in NPM package. Now - `require("tweetnacl")` will use fast version; to get the original version, - use `require("tweetnacl/nacl.js")`. - -* Cleanup temporary array after generating random bytes. - - -v0.12.2 -------- - -* Improved performance of curve operations, making `nacl.scalarMult`, `nacl.box`, - `nacl.sign` and related functions up to 3x faster in `nacl-fast` version. - - -v0.12.1 -------- - -* Significantly improved performance of Salsa20 (~1.5x faster) and - Poly1305 (~3.5x faster) in `nacl-fast` version. - - -v0.12.0 -------- - -* Instead of using the given secret key directly, TweetNaCl.js now copies it to - a new array in `nacl.box.keyPair.fromSecretKey` and - `nacl.sign.keyPair.fromSecretKey`. - - -v0.11.2 -------- - -* Added new constant: `nacl.sign.seedLength`. - - -v0.11.1 -------- - -* Even faster hash for both short and long inputs (in `nacl-fast`). - - -v0.11.0 -------- - -* Implement `nacl.sign.keyPair.fromSeed` to enable creation of sign key pairs - deterministically from a 32-byte seed. (It behaves like - [libsodium's](http://doc.libsodium.org/public-key_cryptography/public-key_signatures.html) - `crypto_sign_seed_keypair`: the seed becomes a secret part of the secret key.) - -* Fast version now has an improved hash implementation that is 2x-5x faster. - -* Fixed benchmarks, which may have produced incorrect measurements. - - -v0.10.1 -------- - -* Exported undocumented `nacl.lowlevel.crypto_core_hsalsa20`. - - -v0.10.0 -------- - -* **Signature API breaking change!** `nacl.sign` and `nacl.sign.open` now deal - with signed messages, and new `nacl.sign.detached` and - `nacl.sign.detached.verify` are available. - - Previously, `nacl.sign` returned a signature, and `nacl.sign.open` accepted a - message and "detached" signature. This was unlike NaCl's API, which dealt with - signed messages (concatenation of signature and message). - - The new API is: - - nacl.sign(message, secretKey) -> signedMessage - nacl.sign.open(signedMessage, publicKey) -> message | null - - Since detached signatures are common, two new API functions were introduced: - - nacl.sign.detached(message, secretKey) -> signature - nacl.sign.detached.verify(message, signature, publicKey) -> true | false - - (Note that it's `verify`, not `open`, and it returns a boolean value, unlike - `open`, which returns an "unsigned" message.) - -* NPM package now comes without `test` directory to keep it small. - - -v0.9.2 ------- - -* Improved documentation. -* Fast version: increased theoretical message size limit from 2^32-1 to 2^52 - bytes in Poly1305 (and thus, secretbox and box). However this has no impact - in practice since JavaScript arrays or ArrayBuffers are limited to 32-bit - indexes, and most implementations won't allocate more than a gigabyte or so. - (Obviously, there are no tests for the correctness of implementation.) Also, - it's not recommended to use messages that large without splitting them into - smaller packets anyway. - - -v0.9.1 ------- - -* Initial release diff --git a/truebit-implementation/node_modules/tweetnacl/LICENSE b/truebit-implementation/node_modules/tweetnacl/LICENSE deleted file mode 100644 index cf1ab25d..00000000 --- a/truebit-implementation/node_modules/tweetnacl/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -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 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. - -For more information, please refer to diff --git a/truebit-implementation/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md b/truebit-implementation/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a8eb4a9a..00000000 --- a/truebit-implementation/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,20 +0,0 @@ -# Important! - -If your contribution is not trivial (not a typo fix, etc.), we can only accept -it if you dedicate your copyright for the contribution to the public domain. -Make sure you understand what it means (see http://unlicense.org/)! If you -agree, please add yourself to AUTHORS.md file, and include the following text -to your pull request description or a comment in it: - ------------------------------------------------------------------------------- - - I dedicate any and all copyright interest in this software to the - public domain. I make this dedication for the benefit of the public at - large and to the detriment of my heirs and successors. I intend this - dedication to be an overt act of relinquishment in perpetuity of all - present and future rights to this software under copyright law. - - Anyone is free to copy, modify, publish, use, compile, sell, or - distribute this software, either in source code form or as a compiled - binary, for any purpose, commercial or non-commercial, and by any - means. diff --git a/truebit-implementation/node_modules/tweetnacl/README.md b/truebit-implementation/node_modules/tweetnacl/README.md deleted file mode 100644 index ffb6871d..00000000 --- a/truebit-implementation/node_modules/tweetnacl/README.md +++ /dev/null @@ -1,459 +0,0 @@ -TweetNaCl.js -============ - -Port of [TweetNaCl](http://tweetnacl.cr.yp.to) / [NaCl](http://nacl.cr.yp.to/) -to JavaScript for modern browsers and Node.js. Public domain. - -[![Build Status](https://travis-ci.org/dchest/tweetnacl-js.svg?branch=master) -](https://travis-ci.org/dchest/tweetnacl-js) - -Demo: - -**:warning: The library is stable and API is frozen, however it has not been -independently reviewed. If you can help reviewing it, please [contact -me](mailto:dmitry@codingrobots.com).** - -Documentation -============= - -* [Overview](#overview) -* [Installation](#installation) -* [Usage](#usage) - * [Public-key authenticated encryption (box)](#public-key-authenticated-encryption-box) - * [Secret-key authenticated encryption (secretbox)](#secret-key-authenticated-encryption-secretbox) - * [Scalar multiplication](#scalar-multiplication) - * [Signatures](#signatures) - * [Hashing](#hashing) - * [Random bytes generation](#random-bytes-generation) - * [Constant-time comparison](#constant-time-comparison) -* [System requirements](#system-requirements) -* [Development and testing](#development-and-testing) -* [Benchmarks](#benchmarks) -* [Contributors](#contributors) -* [Who uses it](#who-uses-it) - - -Overview --------- - -The primary goal of this project is to produce a translation of TweetNaCl to -JavaScript which is as close as possible to the original C implementation, plus -a thin layer of idiomatic high-level API on top of it. - -There are two versions, you can use either of them: - -* `nacl.js` is the port of TweetNaCl with minimum differences from the - original + high-level API. - -* `nacl-fast.js` is like `nacl.js`, but with some functions replaced with - faster versions. - - -Installation ------------- - -You can install TweetNaCl.js via a package manager: - -[Bower](http://bower.io): - - $ bower install tweetnacl - -[NPM](https://www.npmjs.org/): - - $ npm install tweetnacl - -or [download source code](https://github.com/dchest/tweetnacl-js/releases). - - -Usage ------ - -All API functions accept and return bytes as `Uint8Array`s. If you need to -encode or decode strings, use functions from - or one of the more robust codec -packages. - -In Node.js v4 and later `Buffer` objects are backed by `Uint8Array`s, so you -can freely pass them to TweetNaCl.js functions as arguments. The returned -objects are still `Uint8Array`s, so if you need `Buffer`s, you'll have to -convert them manually; make sure to convert using copying: `new Buffer(array)`, -instead of sharing: `new Buffer(array.buffer)`, because some functions return -subarrays of their buffers. - - -### Public-key authenticated encryption (box) - -Implements *curve25519-xsalsa20-poly1305*. - -#### nacl.box.keyPair() - -Generates a new random key pair for box and returns it as an object with -`publicKey` and `secretKey` members: - - { - publicKey: ..., // Uint8Array with 32-byte public key - secretKey: ... // Uint8Array with 32-byte secret key - } - - -#### nacl.box.keyPair.fromSecretKey(secretKey) - -Returns a key pair for box with public key corresponding to the given secret -key. - -#### nacl.box(message, nonce, theirPublicKey, mySecretKey) - -Encrypt and authenticates message using peer's public key, our secret key, and -the given nonce, which must be unique for each distinct message for a key pair. - -Returns an encrypted and authenticated message, which is -`nacl.box.overheadLength` longer than the original message. - -#### nacl.box.open(box, nonce, theirPublicKey, mySecretKey) - -Authenticates and decrypts the given box with peer's public key, our secret -key, and the given nonce. - -Returns the original message, or `false` if authentication fails. - -#### nacl.box.before(theirPublicKey, mySecretKey) - -Returns a precomputed shared key which can be used in `nacl.box.after` and -`nacl.box.open.after`. - -#### nacl.box.after(message, nonce, sharedKey) - -Same as `nacl.box`, but uses a shared key precomputed with `nacl.box.before`. - -#### nacl.box.open.after(box, nonce, sharedKey) - -Same as `nacl.box.open`, but uses a shared key precomputed with `nacl.box.before`. - -#### nacl.box.publicKeyLength = 32 - -Length of public key in bytes. - -#### nacl.box.secretKeyLength = 32 - -Length of secret key in bytes. - -#### nacl.box.sharedKeyLength = 32 - -Length of precomputed shared key in bytes. - -#### nacl.box.nonceLength = 24 - -Length of nonce in bytes. - -#### nacl.box.overheadLength = 16 - -Length of overhead added to box compared to original message. - - -### Secret-key authenticated encryption (secretbox) - -Implements *xsalsa20-poly1305*. - -#### nacl.secretbox(message, nonce, key) - -Encrypt and authenticates message using the key and the nonce. The nonce must -be unique for each distinct message for this key. - -Returns an encrypted and authenticated message, which is -`nacl.secretbox.overheadLength` longer than the original message. - -#### nacl.secretbox.open(box, nonce, key) - -Authenticates and decrypts the given secret box using the key and the nonce. - -Returns the original message, or `false` if authentication fails. - -#### nacl.secretbox.keyLength = 32 - -Length of key in bytes. - -#### nacl.secretbox.nonceLength = 24 - -Length of nonce in bytes. - -#### nacl.secretbox.overheadLength = 16 - -Length of overhead added to secret box compared to original message. - - -### Scalar multiplication - -Implements *curve25519*. - -#### nacl.scalarMult(n, p) - -Multiplies an integer `n` by a group element `p` and returns the resulting -group element. - -#### nacl.scalarMult.base(n) - -Multiplies an integer `n` by a standard group element and returns the resulting -group element. - -#### nacl.scalarMult.scalarLength = 32 - -Length of scalar in bytes. - -#### nacl.scalarMult.groupElementLength = 32 - -Length of group element in bytes. - - -### Signatures - -Implements [ed25519](http://ed25519.cr.yp.to). - -#### nacl.sign.keyPair() - -Generates new random key pair for signing and returns it as an object with -`publicKey` and `secretKey` members: - - { - publicKey: ..., // Uint8Array with 32-byte public key - secretKey: ... // Uint8Array with 64-byte secret key - } - -#### nacl.sign.keyPair.fromSecretKey(secretKey) - -Returns a signing key pair with public key corresponding to the given -64-byte secret key. The secret key must have been generated by -`nacl.sign.keyPair` or `nacl.sign.keyPair.fromSeed`. - -#### nacl.sign.keyPair.fromSeed(seed) - -Returns a new signing key pair generated deterministically from a 32-byte seed. -The seed must contain enough entropy to be secure. This method is not -recommended for general use: instead, use `nacl.sign.keyPair` to generate a new -key pair from a random seed. - -#### nacl.sign(message, secretKey) - -Signs the message using the secret key and returns a signed message. - -#### nacl.sign.open(signedMessage, publicKey) - -Verifies the signed message and returns the message without signature. - -Returns `null` if verification failed. - -#### nacl.sign.detached(message, secretKey) - -Signs the message using the secret key and returns a signature. - -#### nacl.sign.detached.verify(message, signature, publicKey) - -Verifies the signature for the message and returns `true` if verification -succeeded or `false` if it failed. - -#### nacl.sign.publicKeyLength = 32 - -Length of signing public key in bytes. - -#### nacl.sign.secretKeyLength = 64 - -Length of signing secret key in bytes. - -#### nacl.sign.seedLength = 32 - -Length of seed for `nacl.sign.keyPair.fromSeed` in bytes. - -#### nacl.sign.signatureLength = 64 - -Length of signature in bytes. - - -### Hashing - -Implements *SHA-512*. - -#### nacl.hash(message) - -Returns SHA-512 hash of the message. - -#### nacl.hash.hashLength = 64 - -Length of hash in bytes. - - -### Random bytes generation - -#### nacl.randomBytes(length) - -Returns a `Uint8Array` of the given length containing random bytes of -cryptographic quality. - -**Implementation note** - -TweetNaCl.js uses the following methods to generate random bytes, -depending on the platform it runs on: - -* `window.crypto.getRandomValues` (WebCrypto standard) -* `window.msCrypto.getRandomValues` (Internet Explorer 11) -* `crypto.randomBytes` (Node.js) - -If the platform doesn't provide a suitable PRNG, the following functions, -which require random numbers, will throw exception: - -* `nacl.randomBytes` -* `nacl.box.keyPair` -* `nacl.sign.keyPair` - -Other functions are deterministic and will continue working. - -If a platform you are targeting doesn't implement secure random number -generator, but you somehow have a cryptographically-strong source of entropy -(not `Math.random`!), and you know what you are doing, you can plug it into -TweetNaCl.js like this: - - nacl.setPRNG(function(x, n) { - // ... copy n random bytes into x ... - }); - -Note that `nacl.setPRNG` *completely replaces* internal random byte generator -with the one provided. - - -### Constant-time comparison - -#### nacl.verify(x, y) - -Compares `x` and `y` in constant time and returns `true` if their lengths are -non-zero and equal, and their contents are equal. - -Returns `false` if either of the arguments has zero length, or arguments have -different lengths, or their contents differ. - - -System requirements -------------------- - -TweetNaCl.js supports modern browsers that have a cryptographically secure -pseudorandom number generator and typed arrays, including the latest versions -of: - -* Chrome -* Firefox -* Safari (Mac, iOS) -* Internet Explorer 11 - -Other systems: - -* Node.js - - -Development and testing ------------------------- - -Install NPM modules needed for development: - - $ npm install - -To build minified versions: - - $ npm run build - -Tests use minified version, so make sure to rebuild it every time you change -`nacl.js` or `nacl-fast.js`. - -### Testing - -To run tests in Node.js: - - $ npm run test-node - -By default all tests described here work on `nacl.min.js`. To test other -versions, set environment variable `NACL_SRC` to the file name you want to test. -For example, the following command will test fast minified version: - - $ NACL_SRC=nacl-fast.min.js npm run test-node - -To run full suite of tests in Node.js, including comparing outputs of -JavaScript port to outputs of the original C version: - - $ npm run test-node-all - -To prepare tests for browsers: - - $ npm run build-test-browser - -and then open `test/browser/test.html` (or `test/browser/test-fast.html`) to -run them. - -To run headless browser tests with `tape-run` (powered by Electron): - - $ npm run test-browser - -(If you get `Error: spawn ENOENT`, install *xvfb*: `sudo apt-get install xvfb`.) - -To run tests in both Node and Electron: - - $ npm test - -### Benchmarking - -To run benchmarks in Node.js: - - $ npm run bench - $ NACL_SRC=nacl-fast.min.js npm run bench - -To run benchmarks in a browser, open `test/benchmark/bench.html` (or -`test/benchmark/bench-fast.html`). - - -Benchmarks ----------- - -For reference, here are benchmarks from MacBook Pro (Retina, 13-inch, Mid 2014) -laptop with 2.6 GHz Intel Core i5 CPU (Intel) in Chrome 53/OS X and Xiaomi Redmi -Note 3 smartphone with 1.8 GHz Qualcomm Snapdragon 650 64-bit CPU (ARM) in -Chrome 52/Android: - -| | nacl.js Intel | nacl-fast.js Intel | nacl.js ARM | nacl-fast.js ARM | -| ------------- |:-------------:|:-------------------:|:-------------:|:-----------------:| -| salsa20 | 1.3 MB/s | 128 MB/s | 0.4 MB/s | 43 MB/s | -| poly1305 | 13 MB/s | 171 MB/s | 4 MB/s | 52 MB/s | -| hash | 4 MB/s | 34 MB/s | 0.9 MB/s | 12 MB/s | -| secretbox 1K | 1113 op/s | 57583 op/s | 334 op/s | 14227 op/s | -| box 1K | 145 op/s | 718 op/s | 37 op/s | 368 op/s | -| scalarMult | 171 op/s | 733 op/s | 56 op/s | 380 op/s | -| sign | 77 op/s | 200 op/s | 20 op/s | 61 op/s | -| sign.open | 39 op/s | 102 op/s | 11 op/s | 31 op/s | - -(You can run benchmarks on your devices by clicking on the links at the bottom -of the [home page](https://tweetnacl.js.org)). - -In short, with *nacl-fast.js* and 1024-byte messages you can expect to encrypt and -authenticate more than 57000 messages per second on a typical laptop or more than -14000 messages per second on a $170 smartphone, sign about 200 and verify 100 -messages per second on a laptop or 60 and 30 messages per second on a smartphone, -per CPU core (with Web Workers you can do these operations in parallel), -which is good enough for most applications. - - -Contributors ------------- - -See AUTHORS.md file. - - -Third-party libraries based on TweetNaCl.js -------------------------------------------- - -* [forward-secrecy](https://github.com/alax/forward-secrecy) — Axolotl ratchet implementation -* [nacl-stream](https://github.com/dchest/nacl-stream-js) - streaming encryption -* [tweetnacl-auth-js](https://github.com/dchest/tweetnacl-auth-js) — implementation of [`crypto_auth`](http://nacl.cr.yp.to/auth.html) -* [chloride](https://github.com/dominictarr/chloride) - unified API for various NaCl modules - - -Who uses it ------------ - -Some notable users of TweetNaCl.js: - -* [miniLock](http://minilock.io/) -* [Stellar](https://www.stellar.org/) diff --git a/truebit-implementation/node_modules/tweetnacl/nacl-fast.js b/truebit-implementation/node_modules/tweetnacl/nacl-fast.js deleted file mode 100644 index 5e4562fe..00000000 --- a/truebit-implementation/node_modules/tweetnacl/nacl-fast.js +++ /dev/null @@ -1,2388 +0,0 @@ -(function(nacl) { -'use strict'; - -// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. -// Public domain. -// -// Implementation derived from TweetNaCl version 20140427. -// See for details: http://tweetnacl.cr.yp.to/ - -var gf = function(init) { - var i, r = new Float64Array(16); - if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; - return r; -}; - -// Pluggable, initialized in high-level API below. -var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; - -var _0 = new Uint8Array(16); -var _9 = new Uint8Array(32); _9[0] = 9; - -var gf0 = gf(), - gf1 = gf([1]), - _121665 = gf([0xdb41, 1]), - D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), - D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), - X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), - Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), - I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); - -function ts64(x, i, h, l) { - x[i] = (h >> 24) & 0xff; - x[i+1] = (h >> 16) & 0xff; - x[i+2] = (h >> 8) & 0xff; - x[i+3] = h & 0xff; - x[i+4] = (l >> 24) & 0xff; - x[i+5] = (l >> 16) & 0xff; - x[i+6] = (l >> 8) & 0xff; - x[i+7] = l & 0xff; -} - -function vn(x, xi, y, yi, n) { - var i,d = 0; - for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; - return (1 & ((d - 1) >>> 8)) - 1; -} - -function crypto_verify_16(x, xi, y, yi) { - return vn(x,xi,y,yi,16); -} - -function crypto_verify_32(x, xi, y, yi) { - return vn(x,xi,y,yi,32); -} - -function core_salsa20(o, p, k, c) { - var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, - j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, - j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, - j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, - j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, - j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, - j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, - j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, - j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, - j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, - j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, - j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, - j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, - j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, - j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, - j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; - - var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, - x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, - x15 = j15, u; - - for (var i = 0; i < 20; i += 2) { - u = x0 + x12 | 0; - x4 ^= u<<7 | u>>>(32-7); - u = x4 + x0 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x4 | 0; - x12 ^= u<<13 | u>>>(32-13); - u = x12 + x8 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x1 | 0; - x9 ^= u<<7 | u>>>(32-7); - u = x9 + x5 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x9 | 0; - x1 ^= u<<13 | u>>>(32-13); - u = x1 + x13 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x6 | 0; - x14 ^= u<<7 | u>>>(32-7); - u = x14 + x10 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x14 | 0; - x6 ^= u<<13 | u>>>(32-13); - u = x6 + x2 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x11 | 0; - x3 ^= u<<7 | u>>>(32-7); - u = x3 + x15 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x3 | 0; - x11 ^= u<<13 | u>>>(32-13); - u = x11 + x7 | 0; - x15 ^= u<<18 | u>>>(32-18); - - u = x0 + x3 | 0; - x1 ^= u<<7 | u>>>(32-7); - u = x1 + x0 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x1 | 0; - x3 ^= u<<13 | u>>>(32-13); - u = x3 + x2 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x4 | 0; - x6 ^= u<<7 | u>>>(32-7); - u = x6 + x5 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x6 | 0; - x4 ^= u<<13 | u>>>(32-13); - u = x4 + x7 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x9 | 0; - x11 ^= u<<7 | u>>>(32-7); - u = x11 + x10 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x11 | 0; - x9 ^= u<<13 | u>>>(32-13); - u = x9 + x8 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x14 | 0; - x12 ^= u<<7 | u>>>(32-7); - u = x12 + x15 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x12 | 0; - x14 ^= u<<13 | u>>>(32-13); - u = x14 + x13 | 0; - x15 ^= u<<18 | u>>>(32-18); - } - x0 = x0 + j0 | 0; - x1 = x1 + j1 | 0; - x2 = x2 + j2 | 0; - x3 = x3 + j3 | 0; - x4 = x4 + j4 | 0; - x5 = x5 + j5 | 0; - x6 = x6 + j6 | 0; - x7 = x7 + j7 | 0; - x8 = x8 + j8 | 0; - x9 = x9 + j9 | 0; - x10 = x10 + j10 | 0; - x11 = x11 + j11 | 0; - x12 = x12 + j12 | 0; - x13 = x13 + j13 | 0; - x14 = x14 + j14 | 0; - x15 = x15 + j15 | 0; - - o[ 0] = x0 >>> 0 & 0xff; - o[ 1] = x0 >>> 8 & 0xff; - o[ 2] = x0 >>> 16 & 0xff; - o[ 3] = x0 >>> 24 & 0xff; - - o[ 4] = x1 >>> 0 & 0xff; - o[ 5] = x1 >>> 8 & 0xff; - o[ 6] = x1 >>> 16 & 0xff; - o[ 7] = x1 >>> 24 & 0xff; - - o[ 8] = x2 >>> 0 & 0xff; - o[ 9] = x2 >>> 8 & 0xff; - o[10] = x2 >>> 16 & 0xff; - o[11] = x2 >>> 24 & 0xff; - - o[12] = x3 >>> 0 & 0xff; - o[13] = x3 >>> 8 & 0xff; - o[14] = x3 >>> 16 & 0xff; - o[15] = x3 >>> 24 & 0xff; - - o[16] = x4 >>> 0 & 0xff; - o[17] = x4 >>> 8 & 0xff; - o[18] = x4 >>> 16 & 0xff; - o[19] = x4 >>> 24 & 0xff; - - o[20] = x5 >>> 0 & 0xff; - o[21] = x5 >>> 8 & 0xff; - o[22] = x5 >>> 16 & 0xff; - o[23] = x5 >>> 24 & 0xff; - - o[24] = x6 >>> 0 & 0xff; - o[25] = x6 >>> 8 & 0xff; - o[26] = x6 >>> 16 & 0xff; - o[27] = x6 >>> 24 & 0xff; - - o[28] = x7 >>> 0 & 0xff; - o[29] = x7 >>> 8 & 0xff; - o[30] = x7 >>> 16 & 0xff; - o[31] = x7 >>> 24 & 0xff; - - o[32] = x8 >>> 0 & 0xff; - o[33] = x8 >>> 8 & 0xff; - o[34] = x8 >>> 16 & 0xff; - o[35] = x8 >>> 24 & 0xff; - - o[36] = x9 >>> 0 & 0xff; - o[37] = x9 >>> 8 & 0xff; - o[38] = x9 >>> 16 & 0xff; - o[39] = x9 >>> 24 & 0xff; - - o[40] = x10 >>> 0 & 0xff; - o[41] = x10 >>> 8 & 0xff; - o[42] = x10 >>> 16 & 0xff; - o[43] = x10 >>> 24 & 0xff; - - o[44] = x11 >>> 0 & 0xff; - o[45] = x11 >>> 8 & 0xff; - o[46] = x11 >>> 16 & 0xff; - o[47] = x11 >>> 24 & 0xff; - - o[48] = x12 >>> 0 & 0xff; - o[49] = x12 >>> 8 & 0xff; - o[50] = x12 >>> 16 & 0xff; - o[51] = x12 >>> 24 & 0xff; - - o[52] = x13 >>> 0 & 0xff; - o[53] = x13 >>> 8 & 0xff; - o[54] = x13 >>> 16 & 0xff; - o[55] = x13 >>> 24 & 0xff; - - o[56] = x14 >>> 0 & 0xff; - o[57] = x14 >>> 8 & 0xff; - o[58] = x14 >>> 16 & 0xff; - o[59] = x14 >>> 24 & 0xff; - - o[60] = x15 >>> 0 & 0xff; - o[61] = x15 >>> 8 & 0xff; - o[62] = x15 >>> 16 & 0xff; - o[63] = x15 >>> 24 & 0xff; -} - -function core_hsalsa20(o,p,k,c) { - var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, - j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, - j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, - j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, - j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, - j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, - j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, - j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, - j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, - j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, - j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, - j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, - j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, - j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, - j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, - j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; - - var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, - x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, - x15 = j15, u; - - for (var i = 0; i < 20; i += 2) { - u = x0 + x12 | 0; - x4 ^= u<<7 | u>>>(32-7); - u = x4 + x0 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x4 | 0; - x12 ^= u<<13 | u>>>(32-13); - u = x12 + x8 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x1 | 0; - x9 ^= u<<7 | u>>>(32-7); - u = x9 + x5 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x9 | 0; - x1 ^= u<<13 | u>>>(32-13); - u = x1 + x13 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x6 | 0; - x14 ^= u<<7 | u>>>(32-7); - u = x14 + x10 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x14 | 0; - x6 ^= u<<13 | u>>>(32-13); - u = x6 + x2 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x11 | 0; - x3 ^= u<<7 | u>>>(32-7); - u = x3 + x15 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x3 | 0; - x11 ^= u<<13 | u>>>(32-13); - u = x11 + x7 | 0; - x15 ^= u<<18 | u>>>(32-18); - - u = x0 + x3 | 0; - x1 ^= u<<7 | u>>>(32-7); - u = x1 + x0 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x1 | 0; - x3 ^= u<<13 | u>>>(32-13); - u = x3 + x2 | 0; - x0 ^= u<<18 | u>>>(32-18); - - u = x5 + x4 | 0; - x6 ^= u<<7 | u>>>(32-7); - u = x6 + x5 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x6 | 0; - x4 ^= u<<13 | u>>>(32-13); - u = x4 + x7 | 0; - x5 ^= u<<18 | u>>>(32-18); - - u = x10 + x9 | 0; - x11 ^= u<<7 | u>>>(32-7); - u = x11 + x10 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x11 | 0; - x9 ^= u<<13 | u>>>(32-13); - u = x9 + x8 | 0; - x10 ^= u<<18 | u>>>(32-18); - - u = x15 + x14 | 0; - x12 ^= u<<7 | u>>>(32-7); - u = x12 + x15 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x12 | 0; - x14 ^= u<<13 | u>>>(32-13); - u = x14 + x13 | 0; - x15 ^= u<<18 | u>>>(32-18); - } - - o[ 0] = x0 >>> 0 & 0xff; - o[ 1] = x0 >>> 8 & 0xff; - o[ 2] = x0 >>> 16 & 0xff; - o[ 3] = x0 >>> 24 & 0xff; - - o[ 4] = x5 >>> 0 & 0xff; - o[ 5] = x5 >>> 8 & 0xff; - o[ 6] = x5 >>> 16 & 0xff; - o[ 7] = x5 >>> 24 & 0xff; - - o[ 8] = x10 >>> 0 & 0xff; - o[ 9] = x10 >>> 8 & 0xff; - o[10] = x10 >>> 16 & 0xff; - o[11] = x10 >>> 24 & 0xff; - - o[12] = x15 >>> 0 & 0xff; - o[13] = x15 >>> 8 & 0xff; - o[14] = x15 >>> 16 & 0xff; - o[15] = x15 >>> 24 & 0xff; - - o[16] = x6 >>> 0 & 0xff; - o[17] = x6 >>> 8 & 0xff; - o[18] = x6 >>> 16 & 0xff; - o[19] = x6 >>> 24 & 0xff; - - o[20] = x7 >>> 0 & 0xff; - o[21] = x7 >>> 8 & 0xff; - o[22] = x7 >>> 16 & 0xff; - o[23] = x7 >>> 24 & 0xff; - - o[24] = x8 >>> 0 & 0xff; - o[25] = x8 >>> 8 & 0xff; - o[26] = x8 >>> 16 & 0xff; - o[27] = x8 >>> 24 & 0xff; - - o[28] = x9 >>> 0 & 0xff; - o[29] = x9 >>> 8 & 0xff; - o[30] = x9 >>> 16 & 0xff; - o[31] = x9 >>> 24 & 0xff; -} - -function crypto_core_salsa20(out,inp,k,c) { - core_salsa20(out,inp,k,c); -} - -function crypto_core_hsalsa20(out,inp,k,c) { - core_hsalsa20(out,inp,k,c); -} - -var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); - // "expand 32-byte k" - -function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - mpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; - } - return 0; -} - -function crypto_stream_salsa20(c,cpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = x[i]; - } - return 0; -} - -function crypto_stream(c,cpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - var sn = new Uint8Array(8); - for (var i = 0; i < 8; i++) sn[i] = n[i+16]; - return crypto_stream_salsa20(c,cpos,d,sn,s); -} - -function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - var sn = new Uint8Array(8); - for (var i = 0; i < 8; i++) sn[i] = n[i+16]; - return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); -} - -/* -* Port of Andrew Moon's Poly1305-donna-16. Public domain. -* https://github.com/floodyberry/poly1305-donna -*/ - -var poly1305 = function(key) { - this.buffer = new Uint8Array(16); - this.r = new Uint16Array(10); - this.h = new Uint16Array(10); - this.pad = new Uint16Array(8); - this.leftover = 0; - this.fin = 0; - - var t0, t1, t2, t3, t4, t5, t6, t7; - - t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; - t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; - t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; - t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; - t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; - this.r[5] = ((t4 >>> 1)) & 0x1ffe; - t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; - t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; - t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; - this.r[9] = ((t7 >>> 5)) & 0x007f; - - this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; - this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; - this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; - this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; - this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; - this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; - this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; - this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; -}; - -poly1305.prototype.blocks = function(m, mpos, bytes) { - var hibit = this.fin ? 0 : (1 << 11); - var t0, t1, t2, t3, t4, t5, t6, t7, c; - var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; - - var h0 = this.h[0], - h1 = this.h[1], - h2 = this.h[2], - h3 = this.h[3], - h4 = this.h[4], - h5 = this.h[5], - h6 = this.h[6], - h7 = this.h[7], - h8 = this.h[8], - h9 = this.h[9]; - - var r0 = this.r[0], - r1 = this.r[1], - r2 = this.r[2], - r3 = this.r[3], - r4 = this.r[4], - r5 = this.r[5], - r6 = this.r[6], - r7 = this.r[7], - r8 = this.r[8], - r9 = this.r[9]; - - while (bytes >= 16) { - t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; - t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; - t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; - t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; - t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; - h5 += ((t4 >>> 1)) & 0x1fff; - t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; - t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; - t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; - h9 += ((t7 >>> 5)) | hibit; - - c = 0; - - d0 = c; - d0 += h0 * r0; - d0 += h1 * (5 * r9); - d0 += h2 * (5 * r8); - d0 += h3 * (5 * r7); - d0 += h4 * (5 * r6); - c = (d0 >>> 13); d0 &= 0x1fff; - d0 += h5 * (5 * r5); - d0 += h6 * (5 * r4); - d0 += h7 * (5 * r3); - d0 += h8 * (5 * r2); - d0 += h9 * (5 * r1); - c += (d0 >>> 13); d0 &= 0x1fff; - - d1 = c; - d1 += h0 * r1; - d1 += h1 * r0; - d1 += h2 * (5 * r9); - d1 += h3 * (5 * r8); - d1 += h4 * (5 * r7); - c = (d1 >>> 13); d1 &= 0x1fff; - d1 += h5 * (5 * r6); - d1 += h6 * (5 * r5); - d1 += h7 * (5 * r4); - d1 += h8 * (5 * r3); - d1 += h9 * (5 * r2); - c += (d1 >>> 13); d1 &= 0x1fff; - - d2 = c; - d2 += h0 * r2; - d2 += h1 * r1; - d2 += h2 * r0; - d2 += h3 * (5 * r9); - d2 += h4 * (5 * r8); - c = (d2 >>> 13); d2 &= 0x1fff; - d2 += h5 * (5 * r7); - d2 += h6 * (5 * r6); - d2 += h7 * (5 * r5); - d2 += h8 * (5 * r4); - d2 += h9 * (5 * r3); - c += (d2 >>> 13); d2 &= 0x1fff; - - d3 = c; - d3 += h0 * r3; - d3 += h1 * r2; - d3 += h2 * r1; - d3 += h3 * r0; - d3 += h4 * (5 * r9); - c = (d3 >>> 13); d3 &= 0x1fff; - d3 += h5 * (5 * r8); - d3 += h6 * (5 * r7); - d3 += h7 * (5 * r6); - d3 += h8 * (5 * r5); - d3 += h9 * (5 * r4); - c += (d3 >>> 13); d3 &= 0x1fff; - - d4 = c; - d4 += h0 * r4; - d4 += h1 * r3; - d4 += h2 * r2; - d4 += h3 * r1; - d4 += h4 * r0; - c = (d4 >>> 13); d4 &= 0x1fff; - d4 += h5 * (5 * r9); - d4 += h6 * (5 * r8); - d4 += h7 * (5 * r7); - d4 += h8 * (5 * r6); - d4 += h9 * (5 * r5); - c += (d4 >>> 13); d4 &= 0x1fff; - - d5 = c; - d5 += h0 * r5; - d5 += h1 * r4; - d5 += h2 * r3; - d5 += h3 * r2; - d5 += h4 * r1; - c = (d5 >>> 13); d5 &= 0x1fff; - d5 += h5 * r0; - d5 += h6 * (5 * r9); - d5 += h7 * (5 * r8); - d5 += h8 * (5 * r7); - d5 += h9 * (5 * r6); - c += (d5 >>> 13); d5 &= 0x1fff; - - d6 = c; - d6 += h0 * r6; - d6 += h1 * r5; - d6 += h2 * r4; - d6 += h3 * r3; - d6 += h4 * r2; - c = (d6 >>> 13); d6 &= 0x1fff; - d6 += h5 * r1; - d6 += h6 * r0; - d6 += h7 * (5 * r9); - d6 += h8 * (5 * r8); - d6 += h9 * (5 * r7); - c += (d6 >>> 13); d6 &= 0x1fff; - - d7 = c; - d7 += h0 * r7; - d7 += h1 * r6; - d7 += h2 * r5; - d7 += h3 * r4; - d7 += h4 * r3; - c = (d7 >>> 13); d7 &= 0x1fff; - d7 += h5 * r2; - d7 += h6 * r1; - d7 += h7 * r0; - d7 += h8 * (5 * r9); - d7 += h9 * (5 * r8); - c += (d7 >>> 13); d7 &= 0x1fff; - - d8 = c; - d8 += h0 * r8; - d8 += h1 * r7; - d8 += h2 * r6; - d8 += h3 * r5; - d8 += h4 * r4; - c = (d8 >>> 13); d8 &= 0x1fff; - d8 += h5 * r3; - d8 += h6 * r2; - d8 += h7 * r1; - d8 += h8 * r0; - d8 += h9 * (5 * r9); - c += (d8 >>> 13); d8 &= 0x1fff; - - d9 = c; - d9 += h0 * r9; - d9 += h1 * r8; - d9 += h2 * r7; - d9 += h3 * r6; - d9 += h4 * r5; - c = (d9 >>> 13); d9 &= 0x1fff; - d9 += h5 * r4; - d9 += h6 * r3; - d9 += h7 * r2; - d9 += h8 * r1; - d9 += h9 * r0; - c += (d9 >>> 13); d9 &= 0x1fff; - - c = (((c << 2) + c)) | 0; - c = (c + d0) | 0; - d0 = c & 0x1fff; - c = (c >>> 13); - d1 += c; - - h0 = d0; - h1 = d1; - h2 = d2; - h3 = d3; - h4 = d4; - h5 = d5; - h6 = d6; - h7 = d7; - h8 = d8; - h9 = d9; - - mpos += 16; - bytes -= 16; - } - this.h[0] = h0; - this.h[1] = h1; - this.h[2] = h2; - this.h[3] = h3; - this.h[4] = h4; - this.h[5] = h5; - this.h[6] = h6; - this.h[7] = h7; - this.h[8] = h8; - this.h[9] = h9; -}; - -poly1305.prototype.finish = function(mac, macpos) { - var g = new Uint16Array(10); - var c, mask, f, i; - - if (this.leftover) { - i = this.leftover; - this.buffer[i++] = 1; - for (; i < 16; i++) this.buffer[i] = 0; - this.fin = 1; - this.blocks(this.buffer, 0, 16); - } - - c = this.h[1] >>> 13; - this.h[1] &= 0x1fff; - for (i = 2; i < 10; i++) { - this.h[i] += c; - c = this.h[i] >>> 13; - this.h[i] &= 0x1fff; - } - this.h[0] += (c * 5); - c = this.h[0] >>> 13; - this.h[0] &= 0x1fff; - this.h[1] += c; - c = this.h[1] >>> 13; - this.h[1] &= 0x1fff; - this.h[2] += c; - - g[0] = this.h[0] + 5; - c = g[0] >>> 13; - g[0] &= 0x1fff; - for (i = 1; i < 10; i++) { - g[i] = this.h[i] + c; - c = g[i] >>> 13; - g[i] &= 0x1fff; - } - g[9] -= (1 << 13); - - mask = (c ^ 1) - 1; - for (i = 0; i < 10; i++) g[i] &= mask; - mask = ~mask; - for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; - - this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; - this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; - this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; - this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; - this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; - this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; - this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; - this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; - - f = this.h[0] + this.pad[0]; - this.h[0] = f & 0xffff; - for (i = 1; i < 8; i++) { - f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; - this.h[i] = f & 0xffff; - } - - mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; - mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; - mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; - mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; - mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; - mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; - mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; - mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; - mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; - mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; - mac[macpos+10] = (this.h[5] >>> 0) & 0xff; - mac[macpos+11] = (this.h[5] >>> 8) & 0xff; - mac[macpos+12] = (this.h[6] >>> 0) & 0xff; - mac[macpos+13] = (this.h[6] >>> 8) & 0xff; - mac[macpos+14] = (this.h[7] >>> 0) & 0xff; - mac[macpos+15] = (this.h[7] >>> 8) & 0xff; -}; - -poly1305.prototype.update = function(m, mpos, bytes) { - var i, want; - - if (this.leftover) { - want = (16 - this.leftover); - if (want > bytes) - want = bytes; - for (i = 0; i < want; i++) - this.buffer[this.leftover + i] = m[mpos+i]; - bytes -= want; - mpos += want; - this.leftover += want; - if (this.leftover < 16) - return; - this.blocks(this.buffer, 0, 16); - this.leftover = 0; - } - - if (bytes >= 16) { - want = bytes - (bytes % 16); - this.blocks(m, mpos, want); - mpos += want; - bytes -= want; - } - - if (bytes) { - for (i = 0; i < bytes; i++) - this.buffer[this.leftover + i] = m[mpos+i]; - this.leftover += bytes; - } -}; - -function crypto_onetimeauth(out, outpos, m, mpos, n, k) { - var s = new poly1305(k); - s.update(m, mpos, n); - s.finish(out, outpos); - return 0; -} - -function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { - var x = new Uint8Array(16); - crypto_onetimeauth(x,0,m,mpos,n,k); - return crypto_verify_16(h,hpos,x,0); -} - -function crypto_secretbox(c,m,d,n,k) { - var i; - if (d < 32) return -1; - crypto_stream_xor(c,0,m,0,d,n,k); - crypto_onetimeauth(c, 16, c, 32, d - 32, c); - for (i = 0; i < 16; i++) c[i] = 0; - return 0; -} - -function crypto_secretbox_open(m,c,d,n,k) { - var i; - var x = new Uint8Array(32); - if (d < 32) return -1; - crypto_stream(x,0,32,n,k); - if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; - crypto_stream_xor(m,0,c,0,d,n,k); - for (i = 0; i < 32; i++) m[i] = 0; - return 0; -} - -function set25519(r, a) { - var i; - for (i = 0; i < 16; i++) r[i] = a[i]|0; -} - -function car25519(o) { - var i, v, c = 1; - for (i = 0; i < 16; i++) { - v = o[i] + c + 65535; - c = Math.floor(v / 65536); - o[i] = v - c * 65536; - } - o[0] += c-1 + 37 * (c-1); -} - -function sel25519(p, q, b) { - var t, c = ~(b-1); - for (var i = 0; i < 16; i++) { - t = c & (p[i] ^ q[i]); - p[i] ^= t; - q[i] ^= t; - } -} - -function pack25519(o, n) { - var i, j, b; - var m = gf(), t = gf(); - for (i = 0; i < 16; i++) t[i] = n[i]; - car25519(t); - car25519(t); - car25519(t); - for (j = 0; j < 2; j++) { - m[0] = t[0] - 0xffed; - for (i = 1; i < 15; i++) { - m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); - m[i-1] &= 0xffff; - } - m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); - b = (m[15]>>16) & 1; - m[14] &= 0xffff; - sel25519(t, m, 1-b); - } - for (i = 0; i < 16; i++) { - o[2*i] = t[i] & 0xff; - o[2*i+1] = t[i]>>8; - } -} - -function neq25519(a, b) { - var c = new Uint8Array(32), d = new Uint8Array(32); - pack25519(c, a); - pack25519(d, b); - return crypto_verify_32(c, 0, d, 0); -} - -function par25519(a) { - var d = new Uint8Array(32); - pack25519(d, a); - return d[0] & 1; -} - -function unpack25519(o, n) { - var i; - for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); - o[15] &= 0x7fff; -} - -function A(o, a, b) { - for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; -} - -function Z(o, a, b) { - for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; -} - -function M(o, a, b) { - var v, c, - t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, - t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, - t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, - t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, - b0 = b[0], - b1 = b[1], - b2 = b[2], - b3 = b[3], - b4 = b[4], - b5 = b[5], - b6 = b[6], - b7 = b[7], - b8 = b[8], - b9 = b[9], - b10 = b[10], - b11 = b[11], - b12 = b[12], - b13 = b[13], - b14 = b[14], - b15 = b[15]; - - v = a[0]; - t0 += v * b0; - t1 += v * b1; - t2 += v * b2; - t3 += v * b3; - t4 += v * b4; - t5 += v * b5; - t6 += v * b6; - t7 += v * b7; - t8 += v * b8; - t9 += v * b9; - t10 += v * b10; - t11 += v * b11; - t12 += v * b12; - t13 += v * b13; - t14 += v * b14; - t15 += v * b15; - v = a[1]; - t1 += v * b0; - t2 += v * b1; - t3 += v * b2; - t4 += v * b3; - t5 += v * b4; - t6 += v * b5; - t7 += v * b6; - t8 += v * b7; - t9 += v * b8; - t10 += v * b9; - t11 += v * b10; - t12 += v * b11; - t13 += v * b12; - t14 += v * b13; - t15 += v * b14; - t16 += v * b15; - v = a[2]; - t2 += v * b0; - t3 += v * b1; - t4 += v * b2; - t5 += v * b3; - t6 += v * b4; - t7 += v * b5; - t8 += v * b6; - t9 += v * b7; - t10 += v * b8; - t11 += v * b9; - t12 += v * b10; - t13 += v * b11; - t14 += v * b12; - t15 += v * b13; - t16 += v * b14; - t17 += v * b15; - v = a[3]; - t3 += v * b0; - t4 += v * b1; - t5 += v * b2; - t6 += v * b3; - t7 += v * b4; - t8 += v * b5; - t9 += v * b6; - t10 += v * b7; - t11 += v * b8; - t12 += v * b9; - t13 += v * b10; - t14 += v * b11; - t15 += v * b12; - t16 += v * b13; - t17 += v * b14; - t18 += v * b15; - v = a[4]; - t4 += v * b0; - t5 += v * b1; - t6 += v * b2; - t7 += v * b3; - t8 += v * b4; - t9 += v * b5; - t10 += v * b6; - t11 += v * b7; - t12 += v * b8; - t13 += v * b9; - t14 += v * b10; - t15 += v * b11; - t16 += v * b12; - t17 += v * b13; - t18 += v * b14; - t19 += v * b15; - v = a[5]; - t5 += v * b0; - t6 += v * b1; - t7 += v * b2; - t8 += v * b3; - t9 += v * b4; - t10 += v * b5; - t11 += v * b6; - t12 += v * b7; - t13 += v * b8; - t14 += v * b9; - t15 += v * b10; - t16 += v * b11; - t17 += v * b12; - t18 += v * b13; - t19 += v * b14; - t20 += v * b15; - v = a[6]; - t6 += v * b0; - t7 += v * b1; - t8 += v * b2; - t9 += v * b3; - t10 += v * b4; - t11 += v * b5; - t12 += v * b6; - t13 += v * b7; - t14 += v * b8; - t15 += v * b9; - t16 += v * b10; - t17 += v * b11; - t18 += v * b12; - t19 += v * b13; - t20 += v * b14; - t21 += v * b15; - v = a[7]; - t7 += v * b0; - t8 += v * b1; - t9 += v * b2; - t10 += v * b3; - t11 += v * b4; - t12 += v * b5; - t13 += v * b6; - t14 += v * b7; - t15 += v * b8; - t16 += v * b9; - t17 += v * b10; - t18 += v * b11; - t19 += v * b12; - t20 += v * b13; - t21 += v * b14; - t22 += v * b15; - v = a[8]; - t8 += v * b0; - t9 += v * b1; - t10 += v * b2; - t11 += v * b3; - t12 += v * b4; - t13 += v * b5; - t14 += v * b6; - t15 += v * b7; - t16 += v * b8; - t17 += v * b9; - t18 += v * b10; - t19 += v * b11; - t20 += v * b12; - t21 += v * b13; - t22 += v * b14; - t23 += v * b15; - v = a[9]; - t9 += v * b0; - t10 += v * b1; - t11 += v * b2; - t12 += v * b3; - t13 += v * b4; - t14 += v * b5; - t15 += v * b6; - t16 += v * b7; - t17 += v * b8; - t18 += v * b9; - t19 += v * b10; - t20 += v * b11; - t21 += v * b12; - t22 += v * b13; - t23 += v * b14; - t24 += v * b15; - v = a[10]; - t10 += v * b0; - t11 += v * b1; - t12 += v * b2; - t13 += v * b3; - t14 += v * b4; - t15 += v * b5; - t16 += v * b6; - t17 += v * b7; - t18 += v * b8; - t19 += v * b9; - t20 += v * b10; - t21 += v * b11; - t22 += v * b12; - t23 += v * b13; - t24 += v * b14; - t25 += v * b15; - v = a[11]; - t11 += v * b0; - t12 += v * b1; - t13 += v * b2; - t14 += v * b3; - t15 += v * b4; - t16 += v * b5; - t17 += v * b6; - t18 += v * b7; - t19 += v * b8; - t20 += v * b9; - t21 += v * b10; - t22 += v * b11; - t23 += v * b12; - t24 += v * b13; - t25 += v * b14; - t26 += v * b15; - v = a[12]; - t12 += v * b0; - t13 += v * b1; - t14 += v * b2; - t15 += v * b3; - t16 += v * b4; - t17 += v * b5; - t18 += v * b6; - t19 += v * b7; - t20 += v * b8; - t21 += v * b9; - t22 += v * b10; - t23 += v * b11; - t24 += v * b12; - t25 += v * b13; - t26 += v * b14; - t27 += v * b15; - v = a[13]; - t13 += v * b0; - t14 += v * b1; - t15 += v * b2; - t16 += v * b3; - t17 += v * b4; - t18 += v * b5; - t19 += v * b6; - t20 += v * b7; - t21 += v * b8; - t22 += v * b9; - t23 += v * b10; - t24 += v * b11; - t25 += v * b12; - t26 += v * b13; - t27 += v * b14; - t28 += v * b15; - v = a[14]; - t14 += v * b0; - t15 += v * b1; - t16 += v * b2; - t17 += v * b3; - t18 += v * b4; - t19 += v * b5; - t20 += v * b6; - t21 += v * b7; - t22 += v * b8; - t23 += v * b9; - t24 += v * b10; - t25 += v * b11; - t26 += v * b12; - t27 += v * b13; - t28 += v * b14; - t29 += v * b15; - v = a[15]; - t15 += v * b0; - t16 += v * b1; - t17 += v * b2; - t18 += v * b3; - t19 += v * b4; - t20 += v * b5; - t21 += v * b6; - t22 += v * b7; - t23 += v * b8; - t24 += v * b9; - t25 += v * b10; - t26 += v * b11; - t27 += v * b12; - t28 += v * b13; - t29 += v * b14; - t30 += v * b15; - - t0 += 38 * t16; - t1 += 38 * t17; - t2 += 38 * t18; - t3 += 38 * t19; - t4 += 38 * t20; - t5 += 38 * t21; - t6 += 38 * t22; - t7 += 38 * t23; - t8 += 38 * t24; - t9 += 38 * t25; - t10 += 38 * t26; - t11 += 38 * t27; - t12 += 38 * t28; - t13 += 38 * t29; - t14 += 38 * t30; - // t15 left as is - - // first car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); - - // second car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); - - o[ 0] = t0; - o[ 1] = t1; - o[ 2] = t2; - o[ 3] = t3; - o[ 4] = t4; - o[ 5] = t5; - o[ 6] = t6; - o[ 7] = t7; - o[ 8] = t8; - o[ 9] = t9; - o[10] = t10; - o[11] = t11; - o[12] = t12; - o[13] = t13; - o[14] = t14; - o[15] = t15; -} - -function S(o, a) { - M(o, a, a); -} - -function inv25519(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 253; a >= 0; a--) { - S(c, c); - if(a !== 2 && a !== 4) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function pow2523(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 250; a >= 0; a--) { - S(c, c); - if(a !== 1) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function crypto_scalarmult(q, n, p) { - var z = new Uint8Array(32); - var x = new Float64Array(80), r, i; - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(); - for (i = 0; i < 31; i++) z[i] = n[i]; - z[31]=(n[31]&127)|64; - z[0]&=248; - unpack25519(x,p); - for (i = 0; i < 16; i++) { - b[i]=x[i]; - d[i]=a[i]=c[i]=0; - } - a[0]=d[0]=1; - for (i=254; i>=0; --i) { - r=(z[i>>>3]>>>(i&7))&1; - sel25519(a,b,r); - sel25519(c,d,r); - A(e,a,c); - Z(a,a,c); - A(c,b,d); - Z(b,b,d); - S(d,e); - S(f,a); - M(a,c,a); - M(c,b,e); - A(e,a,c); - Z(a,a,c); - S(b,a); - Z(c,d,f); - M(a,c,_121665); - A(a,a,d); - M(c,c,a); - M(a,d,f); - M(d,b,x); - S(b,e); - sel25519(a,b,r); - sel25519(c,d,r); - } - for (i = 0; i < 16; i++) { - x[i+16]=a[i]; - x[i+32]=c[i]; - x[i+48]=b[i]; - x[i+64]=d[i]; - } - var x32 = x.subarray(32); - var x16 = x.subarray(16); - inv25519(x32,x32); - M(x16,x16,x32); - pack25519(q,x16); - return 0; -} - -function crypto_scalarmult_base(q, n) { - return crypto_scalarmult(q, n, _9); -} - -function crypto_box_keypair(y, x) { - randombytes(x, 32); - return crypto_scalarmult_base(y, x); -} - -function crypto_box_beforenm(k, y, x) { - var s = new Uint8Array(32); - crypto_scalarmult(s, x, y); - return crypto_core_hsalsa20(k, _0, s, sigma); -} - -var crypto_box_afternm = crypto_secretbox; -var crypto_box_open_afternm = crypto_secretbox_open; - -function crypto_box(c, m, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_afternm(c, m, d, n, k); -} - -function crypto_box_open(m, c, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_open_afternm(m, c, d, n, k); -} - -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; - -function crypto_hashblocks_hl(hh, hl, m, n) { - var wh = new Int32Array(16), wl = new Int32Array(16), - bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, - bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, - th, tl, i, j, h, l, a, b, c, d; - - var ah0 = hh[0], - ah1 = hh[1], - ah2 = hh[2], - ah3 = hh[3], - ah4 = hh[4], - ah5 = hh[5], - ah6 = hh[6], - ah7 = hh[7], - - al0 = hl[0], - al1 = hl[1], - al2 = hl[2], - al3 = hl[3], - al4 = hl[4], - al5 = hl[5], - al6 = hl[6], - al7 = hl[7]; - - var pos = 0; - while (n >= 128) { - for (i = 0; i < 16; i++) { - j = 8 * i + pos; - wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; - wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; - } - for (i = 0; i < 80; i++) { - bh0 = ah0; - bh1 = ah1; - bh2 = ah2; - bh3 = ah3; - bh4 = ah4; - bh5 = ah5; - bh6 = ah6; - bh7 = ah7; - - bl0 = al0; - bl1 = al1; - bl2 = al2; - bl3 = al3; - bl4 = al4; - bl5 = al5; - bl6 = al6; - bl7 = al7; - - // add - h = ah7; - l = al7; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - // Sigma1 - h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); - l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // Ch - h = (ah4 & ah5) ^ (~ah4 & ah6); - l = (al4 & al5) ^ (~al4 & al6); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // K - h = K[i*2]; - l = K[i*2+1]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // w - h = wh[i%16]; - l = wl[i%16]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - th = c & 0xffff | d << 16; - tl = a & 0xffff | b << 16; - - // add - h = th; - l = tl; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - // Sigma0 - h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); - l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // Maj - h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); - l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - bh7 = (c & 0xffff) | (d << 16); - bl7 = (a & 0xffff) | (b << 16); - - // add - h = bh3; - l = bl3; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = th; - l = tl; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - bh3 = (c & 0xffff) | (d << 16); - bl3 = (a & 0xffff) | (b << 16); - - ah1 = bh0; - ah2 = bh1; - ah3 = bh2; - ah4 = bh3; - ah5 = bh4; - ah6 = bh5; - ah7 = bh6; - ah0 = bh7; - - al1 = bl0; - al2 = bl1; - al3 = bl2; - al4 = bl3; - al5 = bl4; - al6 = bl5; - al7 = bl6; - al0 = bl7; - - if (i%16 === 15) { - for (j = 0; j < 16; j++) { - // add - h = wh[j]; - l = wl[j]; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = wh[(j+9)%16]; - l = wl[(j+9)%16]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // sigma0 - th = wh[(j+1)%16]; - tl = wl[(j+1)%16]; - h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); - l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - // sigma1 - th = wh[(j+14)%16]; - tl = wl[(j+14)%16]; - h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); - l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - wh[j] = (c & 0xffff) | (d << 16); - wl[j] = (a & 0xffff) | (b << 16); - } - } - } - - // add - h = ah0; - l = al0; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[0]; - l = hl[0]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[0] = ah0 = (c & 0xffff) | (d << 16); - hl[0] = al0 = (a & 0xffff) | (b << 16); - - h = ah1; - l = al1; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[1]; - l = hl[1]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[1] = ah1 = (c & 0xffff) | (d << 16); - hl[1] = al1 = (a & 0xffff) | (b << 16); - - h = ah2; - l = al2; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[2]; - l = hl[2]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[2] = ah2 = (c & 0xffff) | (d << 16); - hl[2] = al2 = (a & 0xffff) | (b << 16); - - h = ah3; - l = al3; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[3]; - l = hl[3]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[3] = ah3 = (c & 0xffff) | (d << 16); - hl[3] = al3 = (a & 0xffff) | (b << 16); - - h = ah4; - l = al4; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[4]; - l = hl[4]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[4] = ah4 = (c & 0xffff) | (d << 16); - hl[4] = al4 = (a & 0xffff) | (b << 16); - - h = ah5; - l = al5; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[5]; - l = hl[5]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[5] = ah5 = (c & 0xffff) | (d << 16); - hl[5] = al5 = (a & 0xffff) | (b << 16); - - h = ah6; - l = al6; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[6]; - l = hl[6]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[6] = ah6 = (c & 0xffff) | (d << 16); - hl[6] = al6 = (a & 0xffff) | (b << 16); - - h = ah7; - l = al7; - - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; - - h = hh[7]; - l = hl[7]; - - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; - - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; - - hh[7] = ah7 = (c & 0xffff) | (d << 16); - hl[7] = al7 = (a & 0xffff) | (b << 16); - - pos += 128; - n -= 128; - } - - return n; -} - -function crypto_hash(out, m, n) { - var hh = new Int32Array(8), - hl = new Int32Array(8), - x = new Uint8Array(256), - i, b = n; - - hh[0] = 0x6a09e667; - hh[1] = 0xbb67ae85; - hh[2] = 0x3c6ef372; - hh[3] = 0xa54ff53a; - hh[4] = 0x510e527f; - hh[5] = 0x9b05688c; - hh[6] = 0x1f83d9ab; - hh[7] = 0x5be0cd19; - - hl[0] = 0xf3bcc908; - hl[1] = 0x84caa73b; - hl[2] = 0xfe94f82b; - hl[3] = 0x5f1d36f1; - hl[4] = 0xade682d1; - hl[5] = 0x2b3e6c1f; - hl[6] = 0xfb41bd6b; - hl[7] = 0x137e2179; - - crypto_hashblocks_hl(hh, hl, m, n); - n %= 128; - - for (i = 0; i < n; i++) x[i] = m[b-n+i]; - x[n] = 128; - - n = 256-128*(n<112?1:0); - x[n-9] = 0; - ts64(x, n-8, (b / 0x20000000) | 0, b << 3); - crypto_hashblocks_hl(hh, hl, x, n); - - for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); - - return 0; -} - -function add(p, q) { - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(), - g = gf(), h = gf(), t = gf(); - - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); - - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} - -function cswap(p, q, b) { - var i; - for (i = 0; i < 4; i++) { - sel25519(p[i], q[i], b); - } -} - -function pack(r, p) { - var tx = gf(), ty = gf(), zi = gf(); - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} - -function scalarmult(p, q, s) { - var b, i; - set25519(p[0], gf0); - set25519(p[1], gf1); - set25519(p[2], gf1); - set25519(p[3], gf0); - for (i = 255; i >= 0; --i) { - b = (s[(i/8)|0] >> (i&7)) & 1; - cswap(p, q, b); - add(q, p); - add(p, p); - cswap(p, q, b); - } -} - -function scalarbase(p, s) { - var q = [gf(), gf(), gf(), gf()]; - set25519(q[0], X); - set25519(q[1], Y); - set25519(q[2], gf1); - M(q[3], X, Y); - scalarmult(p, q, s); -} - -function crypto_sign_keypair(pk, sk, seeded) { - var d = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()]; - var i; - - if (!seeded) randombytes(sk, 32); - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - scalarbase(p, d); - pack(pk, p); - - for (i = 0; i < 32; i++) sk[i+32] = pk[i]; - return 0; -} - -var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); - -function modL(r, x) { - var carry, i, j, k; - for (i = 63; i >= 32; --i) { - carry = 0; - for (j = i - 32, k = i - 12; j < k; ++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry * 256; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - for (j = 0; j < 32; j++) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - for (j = 0; j < 32; j++) x[j] -= carry * L[j]; - for (i = 0; i < 32; i++) { - x[i+1] += x[i] >> 8; - r[i] = x[i] & 255; - } -} - -function reduce(r) { - var x = new Float64Array(64), i; - for (i = 0; i < 64; i++) x[i] = r[i]; - for (i = 0; i < 64; i++) r[i] = 0; - modL(r, x); -} - -// Note: difference from C - smlen returned, not passed as argument. -function crypto_sign(sm, m, n, sk) { - var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); - var i, j, x = new Float64Array(64); - var p = [gf(), gf(), gf(), gf()]; - - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - var smlen = n + 64; - for (i = 0; i < n; i++) sm[64 + i] = m[i]; - for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; - - crypto_hash(r, sm.subarray(32), n+32); - reduce(r); - scalarbase(p, r); - pack(sm, p); - - for (i = 32; i < 64; i++) sm[i] = sk[i]; - crypto_hash(h, sm, n + 64); - reduce(h); - - for (i = 0; i < 64; i++) x[i] = 0; - for (i = 0; i < 32; i++) x[i] = r[i]; - for (i = 0; i < 32; i++) { - for (j = 0; j < 32; j++) { - x[i+j] += h[i] * d[j]; - } - } - - modL(sm.subarray(32), x); - return smlen; -} - -function unpackneg(r, p) { - var t = gf(), chk = gf(), num = gf(), - den = gf(), den2 = gf(), den4 = gf(), - den6 = gf(); - - set25519(r[2], gf1); - unpack25519(r[1], p); - S(num, r[1]); - M(den, num, D); - Z(num, num, r[2]); - A(den, r[2], den); - - S(den2, den); - S(den4, den2); - M(den6, den4, den2); - M(t, den6, num); - M(t, t, den); - - pow2523(t, t); - M(t, t, num); - M(t, t, den); - M(t, t, den); - M(r[0], t, den); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) M(r[0], r[0], I); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) return -1; - - if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); - - M(r[3], r[0], r[1]); - return 0; -} - -function crypto_sign_open(m, sm, n, pk) { - var i, mlen; - var t = new Uint8Array(32), h = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()], - q = [gf(), gf(), gf(), gf()]; - - mlen = -1; - if (n < 64) return -1; - - if (unpackneg(q, pk)) return -1; - - for (i = 0; i < n; i++) m[i] = sm[i]; - for (i = 0; i < 32; i++) m[i+32] = pk[i]; - crypto_hash(h, m, n); - reduce(h); - scalarmult(p, q, h); - - scalarbase(q, sm.subarray(32)); - add(p, q); - pack(t, p); - - n -= 64; - if (crypto_verify_32(sm, 0, t, 0)) { - for (i = 0; i < n; i++) m[i] = 0; - return -1; - } - - for (i = 0; i < n; i++) m[i] = sm[i + 64]; - mlen = n; - return mlen; -} - -var crypto_secretbox_KEYBYTES = 32, - crypto_secretbox_NONCEBYTES = 24, - crypto_secretbox_ZEROBYTES = 32, - crypto_secretbox_BOXZEROBYTES = 16, - crypto_scalarmult_BYTES = 32, - crypto_scalarmult_SCALARBYTES = 32, - crypto_box_PUBLICKEYBYTES = 32, - crypto_box_SECRETKEYBYTES = 32, - crypto_box_BEFORENMBYTES = 32, - crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, - crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, - crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, - crypto_sign_BYTES = 64, - crypto_sign_PUBLICKEYBYTES = 32, - crypto_sign_SECRETKEYBYTES = 64, - crypto_sign_SEEDBYTES = 32, - crypto_hash_BYTES = 64; - -nacl.lowlevel = { - crypto_core_hsalsa20: crypto_core_hsalsa20, - crypto_stream_xor: crypto_stream_xor, - crypto_stream: crypto_stream, - crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, - crypto_stream_salsa20: crypto_stream_salsa20, - crypto_onetimeauth: crypto_onetimeauth, - crypto_onetimeauth_verify: crypto_onetimeauth_verify, - crypto_verify_16: crypto_verify_16, - crypto_verify_32: crypto_verify_32, - crypto_secretbox: crypto_secretbox, - crypto_secretbox_open: crypto_secretbox_open, - crypto_scalarmult: crypto_scalarmult, - crypto_scalarmult_base: crypto_scalarmult_base, - crypto_box_beforenm: crypto_box_beforenm, - crypto_box_afternm: crypto_box_afternm, - crypto_box: crypto_box, - crypto_box_open: crypto_box_open, - crypto_box_keypair: crypto_box_keypair, - crypto_hash: crypto_hash, - crypto_sign: crypto_sign, - crypto_sign_keypair: crypto_sign_keypair, - crypto_sign_open: crypto_sign_open, - - crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, - crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, - crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, - crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, - crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, - crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, - crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, - crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, - crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, - crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, - crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, - crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, - crypto_sign_BYTES: crypto_sign_BYTES, - crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, - crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, - crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, - crypto_hash_BYTES: crypto_hash_BYTES -}; - -/* High-level API */ - -function checkLengths(k, n) { - if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); - if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); -} - -function checkBoxLengths(pk, sk) { - if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); - if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); -} - -function checkArrayTypes() { - var t, i; - for (i = 0; i < arguments.length; i++) { - if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') - throw new TypeError('unexpected type ' + t + ', use Uint8Array'); - } -} - -function cleanup(arr) { - for (var i = 0; i < arr.length; i++) arr[i] = 0; -} - -// TODO: Completely remove this in v0.15. -if (!nacl.util) { - nacl.util = {}; - nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { - throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); - }; -} - -nacl.randomBytes = function(n) { - var b = new Uint8Array(n); - randombytes(b, n); - return b; -}; - -nacl.secretbox = function(msg, nonce, key) { - checkArrayTypes(msg, nonce, key); - checkLengths(key, nonce); - var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); - var c = new Uint8Array(m.length); - for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; - crypto_secretbox(c, m, m.length, nonce, key); - return c.subarray(crypto_secretbox_BOXZEROBYTES); -}; - -nacl.secretbox.open = function(box, nonce, key) { - checkArrayTypes(box, nonce, key); - checkLengths(key, nonce); - var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); - var m = new Uint8Array(c.length); - for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; - if (c.length < 32) return false; - if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; - return m.subarray(crypto_secretbox_ZEROBYTES); -}; - -nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; -nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; -nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; - -nacl.scalarMult = function(n, p) { - checkArrayTypes(n, p); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult(q, n, p); - return q; -}; - -nacl.scalarMult.base = function(n) { - checkArrayTypes(n); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult_base(q, n); - return q; -}; - -nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; -nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; - -nacl.box = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox(msg, nonce, k); -}; - -nacl.box.before = function(publicKey, secretKey) { - checkArrayTypes(publicKey, secretKey); - checkBoxLengths(publicKey, secretKey); - var k = new Uint8Array(crypto_box_BEFORENMBYTES); - crypto_box_beforenm(k, publicKey, secretKey); - return k; -}; - -nacl.box.after = nacl.secretbox; - -nacl.box.open = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox.open(msg, nonce, k); -}; - -nacl.box.open.after = nacl.secretbox.open; - -nacl.box.keyPair = function() { - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); - crypto_box_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.box.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_box_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - crypto_scalarmult_base(pk, secretKey); - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; -nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; -nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; -nacl.box.nonceLength = crypto_box_NONCEBYTES; -nacl.box.overheadLength = nacl.secretbox.overheadLength; - -nacl.sign = function(msg, secretKey) { - checkArrayTypes(msg, secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); - crypto_sign(signedMsg, msg, msg.length, secretKey); - return signedMsg; -}; - -nacl.sign.open = function(signedMsg, publicKey) { - if (arguments.length !== 2) - throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); - checkArrayTypes(signedMsg, publicKey); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var tmp = new Uint8Array(signedMsg.length); - var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); - if (mlen < 0) return null; - var m = new Uint8Array(mlen); - for (var i = 0; i < m.length; i++) m[i] = tmp[i]; - return m; -}; - -nacl.sign.detached = function(msg, secretKey) { - var signedMsg = nacl.sign(msg, secretKey); - var sig = new Uint8Array(crypto_sign_BYTES); - for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; - return sig; -}; - -nacl.sign.detached.verify = function(msg, sig, publicKey) { - checkArrayTypes(msg, sig, publicKey); - if (sig.length !== crypto_sign_BYTES) - throw new Error('bad signature size'); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var sm = new Uint8Array(crypto_sign_BYTES + msg.length); - var m = new Uint8Array(crypto_sign_BYTES + msg.length); - var i; - for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; - for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; - return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); -}; - -nacl.sign.keyPair = function() { - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - crypto_sign_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.sign.keyPair.fromSeed = function(seed) { - checkArrayTypes(seed); - if (seed.length !== crypto_sign_SEEDBYTES) - throw new Error('bad seed size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - for (var i = 0; i < 32; i++) sk[i] = seed[i]; - crypto_sign_keypair(pk, sk, true); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; -nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; -nacl.sign.seedLength = crypto_sign_SEEDBYTES; -nacl.sign.signatureLength = crypto_sign_BYTES; - -nacl.hash = function(msg) { - checkArrayTypes(msg); - var h = new Uint8Array(crypto_hash_BYTES); - crypto_hash(h, msg, msg.length); - return h; -}; - -nacl.hash.hashLength = crypto_hash_BYTES; - -nacl.verify = function(x, y) { - checkArrayTypes(x, y); - // Zero length arguments are considered not equal. - if (x.length === 0 || y.length === 0) return false; - if (x.length !== y.length) return false; - return (vn(x, 0, y, 0, x.length) === 0) ? true : false; -}; - -nacl.setPRNG = function(fn) { - randombytes = fn; -}; - -(function() { - // Initialize PRNG if environment provides CSPRNG. - // If not, methods calling randombytes will throw. - var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; - if (crypto && crypto.getRandomValues) { - // Browsers. - var QUOTA = 65536; - nacl.setPRNG(function(x, n) { - var i, v = new Uint8Array(n); - for (i = 0; i < n; i += QUOTA) { - crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); - } - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } else if (typeof require !== 'undefined') { - // Node.js. - crypto = require('crypto'); - if (crypto && crypto.randomBytes) { - nacl.setPRNG(function(x, n) { - var i, v = crypto.randomBytes(n); - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } - } -})(); - -})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/truebit-implementation/node_modules/tweetnacl/nacl-fast.min.js b/truebit-implementation/node_modules/tweetnacl/nacl-fast.min.js deleted file mode 100644 index 8bc47daa..00000000 --- a/truebit-implementation/node_modules/tweetnacl/nacl-fast.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(r){"use strict";function t(r,t,n,e){r[t]=n>>24&255,r[t+1]=n>>16&255,r[t+2]=n>>8&255,r[t+3]=255&n,r[t+4]=e>>24&255,r[t+5]=e>>16&255,r[t+6]=e>>8&255,r[t+7]=255&e}function n(r,t,n,e,o){var i,h=0;for(i=0;i>>8)-1}function e(r,t,e,o){return n(r,t,e,o,16)}function o(r,t,e,o){return n(r,t,e,o,32)}function i(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;d=d+i|0,U=U+h|0,E=E+a|0,x=x+f|0,M=M+s|0,m=m+c|0,B=B+u|0,S=S+y|0,K=K+l|0,T=T+w|0,Y=Y+p|0,k=k+v|0,L=L+b|0,z=z+g|0,R=R+_|0,P=P+A|0,r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=U>>>0&255,r[5]=U>>>8&255,r[6]=U>>>16&255,r[7]=U>>>24&255,r[8]=E>>>0&255,r[9]=E>>>8&255,r[10]=E>>>16&255,r[11]=E>>>24&255,r[12]=x>>>0&255,r[13]=x>>>8&255,r[14]=x>>>16&255,r[15]=x>>>24&255,r[16]=M>>>0&255,r[17]=M>>>8&255,r[18]=M>>>16&255,r[19]=M>>>24&255,r[20]=m>>>0&255,r[21]=m>>>8&255,r[22]=m>>>16&255,r[23]=m>>>24&255,r[24]=B>>>0&255,r[25]=B>>>8&255,r[26]=B>>>16&255,r[27]=B>>>24&255,r[28]=S>>>0&255,r[29]=S>>>8&255,r[30]=S>>>16&255,r[31]=S>>>24&255,r[32]=K>>>0&255,r[33]=K>>>8&255,r[34]=K>>>16&255,r[35]=K>>>24&255,r[36]=T>>>0&255,r[37]=T>>>8&255,r[38]=T>>>16&255,r[39]=T>>>24&255,r[40]=Y>>>0&255,r[41]=Y>>>8&255,r[42]=Y>>>16&255,r[43]=Y>>>24&255,r[44]=k>>>0&255,r[45]=k>>>8&255,r[46]=k>>>16&255,r[47]=k>>>24&255,r[48]=L>>>0&255,r[49]=L>>>8&255,r[50]=L>>>16&255,r[51]=L>>>24&255,r[52]=z>>>0&255,r[53]=z>>>8&255,r[54]=z>>>16&255,r[55]=z>>>24&255,r[56]=R>>>0&255,r[57]=R>>>8&255,r[58]=R>>>16&255,r[59]=R>>>24&255,r[60]=P>>>0&255,r[61]=P>>>8&255,r[62]=P>>>16&255,r[63]=P>>>24&255}function h(r,t,n,e){for(var o,i=255&e[0]|(255&e[1])<<8|(255&e[2])<<16|(255&e[3])<<24,h=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,f=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,s=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,c=255&e[4]|(255&e[5])<<8|(255&e[6])<<16|(255&e[7])<<24,u=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,y=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,w=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,p=255&e[8]|(255&e[9])<<8|(255&e[10])<<16|(255&e[11])<<24,v=255&n[16]|(255&n[17])<<8|(255&n[18])<<16|(255&n[19])<<24,b=255&n[20]|(255&n[21])<<8|(255&n[22])<<16|(255&n[23])<<24,g=255&n[24]|(255&n[25])<<8|(255&n[26])<<16|(255&n[27])<<24,_=255&n[28]|(255&n[29])<<8|(255&n[30])<<16|(255&n[31])<<24,A=255&e[12]|(255&e[13])<<8|(255&e[14])<<16|(255&e[15])<<24,d=i,U=h,E=a,x=f,M=s,m=c,B=u,S=y,K=l,T=w,Y=p,k=v,L=b,z=g,R=_,P=A,O=0;O<20;O+=2)o=d+L|0,M^=o<<7|o>>>25,o=M+d|0,K^=o<<9|o>>>23,o=K+M|0,L^=o<<13|o>>>19,o=L+K|0,d^=o<<18|o>>>14,o=m+U|0,T^=o<<7|o>>>25,o=T+m|0,z^=o<<9|o>>>23,o=z+T|0,U^=o<<13|o>>>19,o=U+z|0,m^=o<<18|o>>>14,o=Y+B|0,R^=o<<7|o>>>25,o=R+Y|0,E^=o<<9|o>>>23,o=E+R|0,B^=o<<13|o>>>19,o=B+E|0,Y^=o<<18|o>>>14,o=P+k|0,x^=o<<7|o>>>25,o=x+P|0,S^=o<<9|o>>>23,o=S+x|0,k^=o<<13|o>>>19,o=k+S|0,P^=o<<18|o>>>14,o=d+x|0,U^=o<<7|o>>>25,o=U+d|0,E^=o<<9|o>>>23,o=E+U|0,x^=o<<13|o>>>19,o=x+E|0,d^=o<<18|o>>>14,o=m+M|0,B^=o<<7|o>>>25,o=B+m|0,S^=o<<9|o>>>23,o=S+B|0,M^=o<<13|o>>>19,o=M+S|0,m^=o<<18|o>>>14,o=Y+T|0,k^=o<<7|o>>>25,o=k+Y|0,K^=o<<9|o>>>23,o=K+k|0,T^=o<<13|o>>>19,o=T+K|0,Y^=o<<18|o>>>14,o=P+R|0,L^=o<<7|o>>>25,o=L+P|0,z^=o<<9|o>>>23,o=z+L|0,R^=o<<13|o>>>19,o=R+z|0,P^=o<<18|o>>>14;r[0]=d>>>0&255,r[1]=d>>>8&255,r[2]=d>>>16&255,r[3]=d>>>24&255,r[4]=m>>>0&255,r[5]=m>>>8&255,r[6]=m>>>16&255,r[7]=m>>>24&255,r[8]=Y>>>0&255,r[9]=Y>>>8&255,r[10]=Y>>>16&255,r[11]=Y>>>24&255,r[12]=P>>>0&255,r[13]=P>>>8&255,r[14]=P>>>16&255,r[15]=P>>>24&255,r[16]=B>>>0&255,r[17]=B>>>8&255,r[18]=B>>>16&255,r[19]=B>>>24&255,r[20]=S>>>0&255,r[21]=S>>>8&255,r[22]=S>>>16&255,r[23]=S>>>24&255,r[24]=K>>>0&255,r[25]=K>>>8&255,r[26]=K>>>16&255,r[27]=K>>>24&255,r[28]=T>>>0&255,r[29]=T>>>8&255,r[30]=T>>>16&255,r[31]=T>>>24&255}function a(r,t,n,e){i(r,t,n,e)}function f(r,t,n,e){h(r,t,n,e)}function s(r,t,n,e,o,i,h){var f,s,c=new Uint8Array(16),u=new Uint8Array(64);for(s=0;s<16;s++)c[s]=0;for(s=0;s<8;s++)c[s]=i[s];for(;o>=64;){for(a(u,c,h,ur),s=0;s<64;s++)r[t+s]=n[e+s]^u[s];for(f=1,s=8;s<16;s++)f=f+(255&c[s])|0,c[s]=255&f,f>>>=8;o-=64,t+=64,e+=64}if(o>0)for(a(u,c,h,ur),s=0;s=64;){for(a(s,f,o,ur),h=0;h<64;h++)r[t+h]=s[h];for(i=1,h=8;h<16;h++)i=i+(255&f[h])|0,f[h]=255&i,i>>>=8;n-=64,t+=64}if(n>0)for(a(s,f,o,ur),h=0;h>16&1),i[n-1]&=65535;i[15]=h[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,_(h,i,1-o)}for(n=0;n<16;n++)r[2*n]=255&h[n],r[2*n+1]=h[n]>>8}function d(r,t){var n=new Uint8Array(32),e=new Uint8Array(32);return A(n,r),A(e,t),o(n,0,e,0)}function U(r){var t=new Uint8Array(32);return A(t,r),1&t[0]}function E(r,t){var n;for(n=0;n<16;n++)r[n]=t[2*n]+(t[2*n+1]<<8);r[15]&=32767}function x(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]+n[e]}function M(r,t,n){for(var e=0;e<16;e++)r[e]=t[e]-n[e]}function m(r,t,n){var e,o,i=0,h=0,a=0,f=0,s=0,c=0,u=0,y=0,l=0,w=0,p=0,v=0,b=0,g=0,_=0,A=0,d=0,U=0,E=0,x=0,M=0,m=0,B=0,S=0,K=0,T=0,Y=0,k=0,L=0,z=0,R=0,P=n[0],O=n[1],N=n[2],C=n[3],F=n[4],I=n[5],G=n[6],Z=n[7],j=n[8],q=n[9],V=n[10],X=n[11],D=n[12],H=n[13],J=n[14],Q=n[15];e=t[0],i+=e*P,h+=e*O,a+=e*N,f+=e*C,s+=e*F,c+=e*I,u+=e*G,y+=e*Z,l+=e*j,w+=e*q,p+=e*V,v+=e*X,b+=e*D,g+=e*H,_+=e*J,A+=e*Q,e=t[1],h+=e*P,a+=e*O,f+=e*N,s+=e*C,c+=e*F,u+=e*I,y+=e*G,l+=e*Z,w+=e*j,p+=e*q,v+=e*V,b+=e*X,g+=e*D,_+=e*H,A+=e*J,d+=e*Q,e=t[2],a+=e*P,f+=e*O,s+=e*N,c+=e*C,u+=e*F,y+=e*I,l+=e*G,w+=e*Z,p+=e*j,v+=e*q,b+=e*V,g+=e*X,_+=e*D,A+=e*H,d+=e*J,U+=e*Q,e=t[3],f+=e*P,s+=e*O,c+=e*N,u+=e*C,y+=e*F,l+=e*I,w+=e*G,p+=e*Z,v+=e*j,b+=e*q,g+=e*V,_+=e*X,A+=e*D,d+=e*H,U+=e*J,E+=e*Q,e=t[4],s+=e*P,c+=e*O,u+=e*N,y+=e*C,l+=e*F,w+=e*I,p+=e*G,v+=e*Z,b+=e*j,g+=e*q,_+=e*V,A+=e*X,d+=e*D,U+=e*H,E+=e*J,x+=e*Q,e=t[5],c+=e*P,u+=e*O,y+=e*N,l+=e*C,w+=e*F,p+=e*I,v+=e*G,b+=e*Z,g+=e*j,_+=e*q,A+=e*V,d+=e*X,U+=e*D,E+=e*H,x+=e*J,M+=e*Q,e=t[6],u+=e*P,y+=e*O,l+=e*N,w+=e*C,p+=e*F,v+=e*I,b+=e*G,g+=e*Z,_+=e*j,A+=e*q,d+=e*V,U+=e*X,E+=e*D,x+=e*H,M+=e*J,m+=e*Q,e=t[7],y+=e*P,l+=e*O,w+=e*N,p+=e*C,v+=e*F,b+=e*I,g+=e*G,_+=e*Z,A+=e*j,d+=e*q,U+=e*V,E+=e*X,x+=e*D,M+=e*H,m+=e*J,B+=e*Q,e=t[8],l+=e*P,w+=e*O,p+=e*N,v+=e*C,b+=e*F,g+=e*I,_+=e*G,A+=e*Z,d+=e*j,U+=e*q,E+=e*V,x+=e*X,M+=e*D,m+=e*H,B+=e*J,S+=e*Q,e=t[9],w+=e*P,p+=e*O,v+=e*N,b+=e*C,g+=e*F,_+=e*I,A+=e*G,d+=e*Z,U+=e*j,E+=e*q,x+=e*V,M+=e*X,m+=e*D,B+=e*H,S+=e*J,K+=e*Q,e=t[10],p+=e*P,v+=e*O,b+=e*N,g+=e*C,_+=e*F,A+=e*I,d+=e*G,U+=e*Z,E+=e*j,x+=e*q,M+=e*V,m+=e*X,B+=e*D,S+=e*H,K+=e*J,T+=e*Q,e=t[11],v+=e*P,b+=e*O,g+=e*N,_+=e*C,A+=e*F,d+=e*I,U+=e*G,E+=e*Z,x+=e*j,M+=e*q,m+=e*V,B+=e*X;S+=e*D;K+=e*H,T+=e*J,Y+=e*Q,e=t[12],b+=e*P,g+=e*O,_+=e*N,A+=e*C,d+=e*F,U+=e*I,E+=e*G,x+=e*Z,M+=e*j,m+=e*q,B+=e*V,S+=e*X,K+=e*D,T+=e*H,Y+=e*J,k+=e*Q,e=t[13],g+=e*P,_+=e*O,A+=e*N,d+=e*C,U+=e*F,E+=e*I,x+=e*G,M+=e*Z,m+=e*j,B+=e*q,S+=e*V,K+=e*X,T+=e*D,Y+=e*H,k+=e*J,L+=e*Q,e=t[14],_+=e*P,A+=e*O,d+=e*N,U+=e*C,E+=e*F,x+=e*I,M+=e*G,m+=e*Z,B+=e*j,S+=e*q,K+=e*V,T+=e*X,Y+=e*D,k+=e*H,L+=e*J,z+=e*Q,e=t[15],A+=e*P,d+=e*O,U+=e*N,E+=e*C,x+=e*F,M+=e*I,m+=e*G,B+=e*Z,S+=e*j,K+=e*q,T+=e*V,Y+=e*X,k+=e*D,L+=e*H,z+=e*J,R+=e*Q,i+=38*d,h+=38*U,a+=38*E,f+=38*x,s+=38*M,c+=38*m,u+=38*B,y+=38*S,l+=38*K,w+=38*T,p+=38*Y,v+=38*k,b+=38*L,g+=38*z,_+=38*R,o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),o=1,e=i+o+65535,o=Math.floor(e/65536),i=e-65536*o,e=h+o+65535,o=Math.floor(e/65536),h=e-65536*o,e=a+o+65535,o=Math.floor(e/65536),a=e-65536*o,e=f+o+65535,o=Math.floor(e/65536),f=e-65536*o,e=s+o+65535,o=Math.floor(e/65536),s=e-65536*o,e=c+o+65535,o=Math.floor(e/65536),c=e-65536*o,e=u+o+65535,o=Math.floor(e/65536),u=e-65536*o,e=y+o+65535,o=Math.floor(e/65536),y=e-65536*o,e=l+o+65535,o=Math.floor(e/65536),l=e-65536*o,e=w+o+65535,o=Math.floor(e/65536),w=e-65536*o,e=p+o+65535,o=Math.floor(e/65536),p=e-65536*o,e=v+o+65535,o=Math.floor(e/65536),v=e-65536*o,e=b+o+65535,o=Math.floor(e/65536),b=e-65536*o,e=g+o+65535,o=Math.floor(e/65536),g=e-65536*o,e=_+o+65535,o=Math.floor(e/65536),_=e-65536*o,e=A+o+65535,o=Math.floor(e/65536),A=e-65536*o,i+=o-1+37*(o-1),r[0]=i,r[1]=h,r[2]=a,r[3]=f,r[4]=s,r[5]=c,r[6]=u,r[7]=y,r[8]=l,r[9]=w,r[10]=p,r[11]=v,r[12]=b,r[13]=g;r[14]=_;r[15]=A}function B(r,t){m(r,t,t)}function S(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=253;n>=0;n--)B(e,e),2!==n&&4!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function K(r,t){var n,e=$();for(n=0;n<16;n++)e[n]=t[n];for(n=250;n>=0;n--)B(e,e),1!==n&&m(e,e,t);for(n=0;n<16;n++)r[n]=e[n]}function T(r,t,n){var e,o,i=new Uint8Array(32),h=new Float64Array(80),a=$(),f=$(),s=$(),c=$(),u=$(),y=$();for(o=0;o<31;o++)i[o]=t[o];for(i[31]=127&t[31]|64,i[0]&=248,E(h,n),o=0;o<16;o++)f[o]=h[o],c[o]=a[o]=s[o]=0;for(a[0]=c[0]=1,o=254;o>=0;--o)e=i[o>>>3]>>>(7&o)&1,_(a,f,e),_(s,c,e),x(u,a,s),M(a,a,s),x(s,f,c),M(f,f,c),B(c,u),B(y,a),m(a,s,a),m(s,f,u),x(u,a,s),M(a,a,s),B(f,a),M(s,c,y),m(a,s,ir),x(a,a,c),m(s,s,a),m(a,c,y),m(c,f,h),B(f,u),_(a,f,e),_(s,c,e);for(o=0;o<16;o++)h[o+16]=a[o],h[o+32]=s[o],h[o+48]=f[o],h[o+64]=c[o];var l=h.subarray(32),w=h.subarray(16);return S(l,l),m(w,w,l),A(r,w),0}function Y(r,t){return T(r,t,nr)}function k(r,t){return rr(t,32),Y(r,t)}function L(r,t,n){var e=new Uint8Array(32);return T(e,n,t),f(r,tr,e,ur)}function z(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),lr(r,t,n,e,h)}function R(r,t,n,e,o,i){var h=new Uint8Array(32);return L(h,o,i),wr(r,t,n,e,h)}function P(r,t,n,e){for(var o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U,E,x,M,m,B,S,K,T=new Int32Array(16),Y=new Int32Array(16),k=r[0],L=r[1],z=r[2],R=r[3],P=r[4],O=r[5],N=r[6],C=r[7],F=t[0],I=t[1],G=t[2],Z=t[3],j=t[4],q=t[5],V=t[6],X=t[7],D=0;e>=128;){for(U=0;U<16;U++)E=8*U+D,T[U]=n[E+0]<<24|n[E+1]<<16|n[E+2]<<8|n[E+3],Y[U]=n[E+4]<<24|n[E+5]<<16|n[E+6]<<8|n[E+7];for(U=0;U<80;U++)if(o=k,i=L,h=z,a=R,f=P,s=O,c=N,u=C,y=F,l=I,w=G,p=Z,v=j,b=q,g=V,_=X,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(P>>>14|j<<18)^(P>>>18|j<<14)^(j>>>9|P<<23),M=(j>>>14|P<<18)^(j>>>18|P<<14)^(P>>>9|j<<23),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=P&O^~P&N,M=j&q^~j&V,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=pr[2*U],M=pr[2*U+1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=T[U%16],M=Y[U%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,A=65535&S|K<<16,d=65535&m|B<<16,x=A,M=d,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=(k>>>28|F<<4)^(F>>>2|k<<30)^(F>>>7|k<<25),M=(F>>>28|k<<4)^(k>>>2|F<<30)^(k>>>7|F<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,x=k&L^k&z^L&z,M=F&I^F&G^I&G,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,u=65535&S|K<<16,_=65535&m|B<<16,x=a,M=p,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=A,M=d,m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,a=65535&S|K<<16,p=65535&m|B<<16,L=o,z=i,R=h,P=a,O=f,N=s,C=c,k=u,I=y,G=l,Z=w,j=p,q=v,V=b,X=g,F=_,U%16===15)for(E=0;E<16;E++)x=T[E],M=Y[E],m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=T[(E+9)%16],M=Y[(E+9)%16],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+1)%16],d=Y[(E+1)%16],x=(A>>>1|d<<31)^(A>>>8|d<<24)^A>>>7,M=(d>>>1|A<<31)^(d>>>8|A<<24)^(d>>>7|A<<25),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,A=T[(E+14)%16],d=Y[(E+14)%16],x=(A>>>19|d<<13)^(d>>>29|A<<3)^A>>>6,M=(d>>>19|A<<13)^(A>>>29|d<<3)^(d>>>6|A<<26),m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,T[E]=65535&S|K<<16,Y[E]=65535&m|B<<16;x=k,M=F,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[0],M=t[0],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[0]=k=65535&S|K<<16,t[0]=F=65535&m|B<<16,x=L,M=I,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[1],M=t[1],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[1]=L=65535&S|K<<16,t[1]=I=65535&m|B<<16,x=z,M=G,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[2],M=t[2],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[2]=z=65535&S|K<<16,t[2]=G=65535&m|B<<16,x=R,M=Z,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[3],M=t[3],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[3]=R=65535&S|K<<16,t[3]=Z=65535&m|B<<16,x=P,M=j,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[4],M=t[4],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[4]=P=65535&S|K<<16,t[4]=j=65535&m|B<<16,x=O,M=q,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[5],M=t[5],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[5]=O=65535&S|K<<16,t[5]=q=65535&m|B<<16,x=N,M=V,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[6],M=t[6],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[6]=N=65535&S|K<<16,t[6]=V=65535&m|B<<16,x=C,M=X,m=65535&M,B=M>>>16,S=65535&x,K=x>>>16,x=r[7],M=t[7],m+=65535&M,B+=M>>>16,S+=65535&x,K+=x>>>16,B+=m>>>16,S+=B>>>16,K+=S>>>16,r[7]=C=65535&S|K<<16,t[7]=X=65535&m|B<<16,D+=128,e-=128}return e}function O(r,n,e){var o,i=new Int32Array(8),h=new Int32Array(8),a=new Uint8Array(256),f=e;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,h[0]=4089235720,h[1]=2227873595,h[2]=4271175723,h[3]=1595750129,h[4]=2917565137,h[5]=725511199,h[6]=4215389547,h[7]=327033209,P(i,h,n,e),e%=128,o=0;o=0;--o)e=n[o/8|0]>>(7&o)&1,C(r,t,e),N(t,r),N(r,r),C(r,t,e)}function G(r,t){var n=[$(),$(),$(),$()];b(n[0],fr),b(n[1],sr),b(n[2],or),m(n[3],fr,sr),I(r,n,t)}function Z(r,t,n){var e,o=new Uint8Array(64),i=[$(),$(),$(),$()];for(n||rr(t,32),O(o,t,32),o[0]&=248,o[31]&=127,o[31]|=64,G(i,o),F(r,i),e=0;e<32;e++)t[e+32]=r[e];return 0}function j(r,t){var n,e,o,i;for(e=63;e>=32;--e){for(n=0,o=e-32,i=e-12;o>8,t[o]-=256*n;t[o]+=n,t[e]=0}for(n=0,o=0;o<32;o++)t[o]+=n-(t[31]>>4)*vr[o],n=t[o]>>8,t[o]&=255;for(o=0;o<32;o++)t[o]-=n*vr[o];for(e=0;e<32;e++)t[e+1]+=t[e]>>8,r[e]=255&t[e]}function q(r){var t,n=new Float64Array(64);for(t=0;t<64;t++)n[t]=r[t];for(t=0;t<64;t++)r[t]=0;j(r,n)}function V(r,t,n,e){var o,i,h=new Uint8Array(64),a=new Uint8Array(64),f=new Uint8Array(64),s=new Float64Array(64),c=[$(),$(),$(),$()];O(h,e,32),h[0]&=248,h[31]&=127,h[31]|=64;var u=n+64;for(o=0;o>7&&M(r[0],er,r[0]),m(r[3],r[0],r[1]),0)}function D(r,t,n,e){var i,h,a=new Uint8Array(32),f=new Uint8Array(64),s=[$(),$(),$(),$()],c=[$(),$(),$(),$()];if(h=-1,n<64)return-1;if(X(c,e))return-1;for(i=0;i>>13|n<<3),e=255&r[4]|(255&r[5])<<8,this.r[2]=7939&(n>>>10|e<<6),o=255&r[6]|(255&r[7])<<8,this.r[3]=8191&(e>>>7|o<<9),i=255&r[8]|(255&r[9])<<8,this.r[4]=255&(o>>>4|i<<12),this.r[5]=i>>>1&8190,h=255&r[10]|(255&r[11])<<8,this.r[6]=8191&(i>>>14|h<<2),a=255&r[12]|(255&r[13])<<8,this.r[7]=8065&(h>>>11|a<<5),f=255&r[14]|(255&r[15])<<8,this.r[8]=8191&(a>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&r[16]|(255&r[17])<<8,this.pad[1]=255&r[18]|(255&r[19])<<8,this.pad[2]=255&r[20]|(255&r[21])<<8,this.pad[3]=255&r[22]|(255&r[23])<<8,this.pad[4]=255&r[24]|(255&r[25])<<8,this.pad[5]=255&r[26]|(255&r[27])<<8,this.pad[6]=255&r[28]|(255&r[29])<<8,this.pad[7]=255&r[30]|(255&r[31])<<8};yr.prototype.blocks=function(r,t,n){for(var e,o,i,h,a,f,s,c,u,y,l,w,p,v,b,g,_,A,d,U=this.fin?0:2048,E=this.h[0],x=this.h[1],M=this.h[2],m=this.h[3],B=this.h[4],S=this.h[5],K=this.h[6],T=this.h[7],Y=this.h[8],k=this.h[9],L=this.r[0],z=this.r[1],R=this.r[2],P=this.r[3],O=this.r[4],N=this.r[5],C=this.r[6],F=this.r[7],I=this.r[8],G=this.r[9];n>=16;)e=255&r[t+0]|(255&r[t+1])<<8,E+=8191&e,o=255&r[t+2]|(255&r[t+3])<<8,x+=8191&(e>>>13|o<<3),i=255&r[t+4]|(255&r[t+5])<<8,M+=8191&(o>>>10|i<<6),h=255&r[t+6]|(255&r[t+7])<<8,m+=8191&(i>>>7|h<<9),a=255&r[t+8]|(255&r[t+9])<<8,B+=8191&(h>>>4|a<<12),S+=a>>>1&8191,f=255&r[t+10]|(255&r[t+11])<<8,K+=8191&(a>>>14|f<<2),s=255&r[t+12]|(255&r[t+13])<<8,T+=8191&(f>>>11|s<<5),c=255&r[t+14]|(255&r[t+15])<<8,Y+=8191&(s>>>8|c<<8),k+=c>>>5|U,u=0,y=u,y+=E*L,y+=x*(5*G),y+=M*(5*I),y+=m*(5*F),y+=B*(5*C),u=y>>>13,y&=8191,y+=S*(5*N),y+=K*(5*O),y+=T*(5*P),y+=Y*(5*R),y+=k*(5*z),u+=y>>>13,y&=8191,l=u,l+=E*z,l+=x*L,l+=M*(5*G),l+=m*(5*I),l+=B*(5*F),u=l>>>13,l&=8191,l+=S*(5*C),l+=K*(5*N),l+=T*(5*O),l+=Y*(5*P),l+=k*(5*R),u+=l>>>13,l&=8191,w=u,w+=E*R,w+=x*z,w+=M*L,w+=m*(5*G),w+=B*(5*I),u=w>>>13,w&=8191,w+=S*(5*F),w+=K*(5*C),w+=T*(5*N),w+=Y*(5*O),w+=k*(5*P),u+=w>>>13,w&=8191,p=u,p+=E*P,p+=x*R,p+=M*z,p+=m*L,p+=B*(5*G),u=p>>>13,p&=8191,p+=S*(5*I),p+=K*(5*F),p+=T*(5*C),p+=Y*(5*N),p+=k*(5*O),u+=p>>>13,p&=8191,v=u,v+=E*O,v+=x*P,v+=M*R,v+=m*z,v+=B*L,u=v>>>13,v&=8191,v+=S*(5*G),v+=K*(5*I),v+=T*(5*F),v+=Y*(5*C),v+=k*(5*N),u+=v>>>13,v&=8191,b=u,b+=E*N,b+=x*O,b+=M*P,b+=m*R,b+=B*z,u=b>>>13,b&=8191,b+=S*L,b+=K*(5*G),b+=T*(5*I),b+=Y*(5*F),b+=k*(5*C),u+=b>>>13,b&=8191,g=u,g+=E*C,g+=x*N,g+=M*O,g+=m*P,g+=B*R,u=g>>>13,g&=8191,g+=S*z,g+=K*L,g+=T*(5*G),g+=Y*(5*I),g+=k*(5*F),u+=g>>>13,g&=8191,_=u,_+=E*F,_+=x*C,_+=M*N,_+=m*O,_+=B*P,u=_>>>13,_&=8191,_+=S*R,_+=K*z,_+=T*L,_+=Y*(5*G),_+=k*(5*I),u+=_>>>13,_&=8191,A=u,A+=E*I,A+=x*F,A+=M*C,A+=m*N,A+=B*O,u=A>>>13,A&=8191,A+=S*P,A+=K*R,A+=T*z,A+=Y*L,A+=k*(5*G),u+=A>>>13,A&=8191,d=u,d+=E*G,d+=x*I,d+=M*F,d+=m*C,d+=B*N,u=d>>>13,d&=8191,d+=S*O,d+=K*P,d+=T*R,d+=Y*z,d+=k*L,u+=d>>>13,d&=8191,u=(u<<2)+u|0,u=u+y|0,y=8191&u,u>>>=13,l+=u,E=y,x=l,M=w,m=p,B=v,S=b,K=g,T=_,Y=A,k=d,t+=16,n-=16;this.h[0]=E,this.h[1]=x,this.h[2]=M,this.h[3]=m,this.h[4]=B,this.h[5]=S,this.h[6]=K,this.h[7]=T,this.h[8]=Y,this.h[9]=k},yr.prototype.finish=function(r,t){var n,e,o,i,h=new Uint16Array(10);if(this.leftover){for(i=this.leftover,this.buffer[i++]=1;i<16;i++)this.buffer[i]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(n=this.h[1]>>>13,this.h[1]&=8191,i=2;i<10;i++)this.h[i]+=n,n=this.h[i]>>>13,this.h[i]&=8191;for(this.h[0]+=5*n,n=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=n,n=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=n,h[0]=this.h[0]+5,n=h[0]>>>13,h[0]&=8191,i=1;i<10;i++)h[i]=this.h[i]+n,n=h[i]>>>13,h[i]&=8191;for(h[9]-=8192,e=(1^n)-1,i=0;i<10;i++)h[i]&=e;for(e=~e,i=0;i<10;i++)this.h[i]=this.h[i]&e|h[i];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),o=this.h[0]+this.pad[0],this.h[0]=65535&o,i=1;i<8;i++)o=(this.h[i]+this.pad[i]|0)+(o>>>16)|0,this.h[i]=65535&o;r[t+0]=this.h[0]>>>0&255,r[t+1]=this.h[0]>>>8&255,r[t+2]=this.h[1]>>>0&255,r[t+3]=this.h[1]>>>8&255,r[t+4]=this.h[2]>>>0&255,r[t+5]=this.h[2]>>>8&255,r[t+6]=this.h[3]>>>0&255,r[t+7]=this.h[3]>>>8&255,r[t+8]=this.h[4]>>>0&255,r[t+9]=this.h[4]>>>8&255,r[t+10]=this.h[5]>>>0&255,r[t+11]=this.h[5]>>>8&255,r[t+12]=this.h[6]>>>0&255,r[t+13]=this.h[6]>>>8&255,r[t+14]=this.h[7]>>>0&255,r[t+15]=this.h[7]>>>8&255},yr.prototype.update=function(r,t,n){var e,o;if(this.leftover){for(o=16-this.leftover,o>n&&(o=n),e=0;e=16&&(o=n-n%16,this.blocks(r,t,o),t+=o,n-=o),n){for(e=0;e=0},r.sign.keyPair=function(){var r=new Uint8Array(Tr),t=new Uint8Array(Yr);return Z(r,t),{publicKey:r,secretKey:t}},r.sign.keyPair.fromSecretKey=function(r){if(Q(r),r.length!==Yr)throw new Error("bad secret key size");for(var t=new Uint8Array(Tr),n=0;n void): void; -} diff --git a/truebit-implementation/node_modules/tweetnacl/nacl.js b/truebit-implementation/node_modules/tweetnacl/nacl.js deleted file mode 100644 index f72dd78d..00000000 --- a/truebit-implementation/node_modules/tweetnacl/nacl.js +++ /dev/null @@ -1,1175 +0,0 @@ -(function(nacl) { -'use strict'; - -// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. -// Public domain. -// -// Implementation derived from TweetNaCl version 20140427. -// See for details: http://tweetnacl.cr.yp.to/ - -var u64 = function(h, l) { this.hi = h|0 >>> 0; this.lo = l|0 >>> 0; }; -var gf = function(init) { - var i, r = new Float64Array(16); - if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; - return r; -}; - -// Pluggable, initialized in high-level API below. -var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; - -var _0 = new Uint8Array(16); -var _9 = new Uint8Array(32); _9[0] = 9; - -var gf0 = gf(), - gf1 = gf([1]), - _121665 = gf([0xdb41, 1]), - D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), - D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), - X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), - Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), - I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); - -function L32(x, c) { return (x << c) | (x >>> (32 - c)); } - -function ld32(x, i) { - var u = x[i+3] & 0xff; - u = (u<<8)|(x[i+2] & 0xff); - u = (u<<8)|(x[i+1] & 0xff); - return (u<<8)|(x[i+0] & 0xff); -} - -function dl64(x, i) { - var h = (x[i] << 24) | (x[i+1] << 16) | (x[i+2] << 8) | x[i+3]; - var l = (x[i+4] << 24) | (x[i+5] << 16) | (x[i+6] << 8) | x[i+7]; - return new u64(h, l); -} - -function st32(x, j, u) { - var i; - for (i = 0; i < 4; i++) { x[j+i] = u & 255; u >>>= 8; } -} - -function ts64(x, i, u) { - x[i] = (u.hi >> 24) & 0xff; - x[i+1] = (u.hi >> 16) & 0xff; - x[i+2] = (u.hi >> 8) & 0xff; - x[i+3] = u.hi & 0xff; - x[i+4] = (u.lo >> 24) & 0xff; - x[i+5] = (u.lo >> 16) & 0xff; - x[i+6] = (u.lo >> 8) & 0xff; - x[i+7] = u.lo & 0xff; -} - -function vn(x, xi, y, yi, n) { - var i,d = 0; - for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; - return (1 & ((d - 1) >>> 8)) - 1; -} - -function crypto_verify_16(x, xi, y, yi) { - return vn(x,xi,y,yi,16); -} - -function crypto_verify_32(x, xi, y, yi) { - return vn(x,xi,y,yi,32); -} - -function core(out,inp,k,c,h) { - var w = new Uint32Array(16), x = new Uint32Array(16), - y = new Uint32Array(16), t = new Uint32Array(4); - var i, j, m; - - for (i = 0; i < 4; i++) { - x[5*i] = ld32(c, 4*i); - x[1+i] = ld32(k, 4*i); - x[6+i] = ld32(inp, 4*i); - x[11+i] = ld32(k, 16+4*i); - } - - for (i = 0; i < 16; i++) y[i] = x[i]; - - for (i = 0; i < 20; i++) { - for (j = 0; j < 4; j++) { - for (m = 0; m < 4; m++) t[m] = x[(5*j+4*m)%16]; - t[1] ^= L32((t[0]+t[3])|0, 7); - t[2] ^= L32((t[1]+t[0])|0, 9); - t[3] ^= L32((t[2]+t[1])|0,13); - t[0] ^= L32((t[3]+t[2])|0,18); - for (m = 0; m < 4; m++) w[4*j+(j+m)%4] = t[m]; - } - for (m = 0; m < 16; m++) x[m] = w[m]; - } - - if (h) { - for (i = 0; i < 16; i++) x[i] = (x[i] + y[i]) | 0; - for (i = 0; i < 4; i++) { - x[5*i] = (x[5*i] - ld32(c, 4*i)) | 0; - x[6+i] = (x[6+i] - ld32(inp, 4*i)) | 0; - } - for (i = 0; i < 4; i++) { - st32(out,4*i,x[5*i]); - st32(out,16+4*i,x[6+i]); - } - } else { - for (i = 0; i < 16; i++) st32(out, 4 * i, (x[i] + y[i]) | 0); - } -} - -function crypto_core_salsa20(out,inp,k,c) { - core(out,inp,k,c,false); - return 0; -} - -function crypto_core_hsalsa20(out,inp,k,c) { - core(out,inp,k,c,true); - return 0; -} - -var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); - // "expand 32-byte k" - -function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - if (!b) return 0; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - if (m) mpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = (m?m[mpos+i]:0) ^ x[i]; - } - return 0; -} - -function crypto_stream_salsa20(c,cpos,d,n,k) { - return crypto_stream_salsa20_xor(c,cpos,null,0,d,n,k); -} - -function crypto_stream(c,cpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - return crypto_stream_salsa20(c,cpos,d,n.subarray(16),s); -} - -function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,n.subarray(16),s); -} - -function add1305(h, c) { - var j, u = 0; - for (j = 0; j < 17; j++) { - u = (u + ((h[j] + c[j]) | 0)) | 0; - h[j] = u & 255; - u >>>= 8; - } -} - -var minusp = new Uint32Array([ - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252 -]); - -function crypto_onetimeauth(out, outpos, m, mpos, n, k) { - var s, i, j, u; - var x = new Uint32Array(17), r = new Uint32Array(17), - h = new Uint32Array(17), c = new Uint32Array(17), - g = new Uint32Array(17); - for (j = 0; j < 17; j++) r[j]=h[j]=0; - for (j = 0; j < 16; j++) r[j]=k[j]; - r[3]&=15; - r[4]&=252; - r[7]&=15; - r[8]&=252; - r[11]&=15; - r[12]&=252; - r[15]&=15; - - while (n > 0) { - for (j = 0; j < 17; j++) c[j] = 0; - for (j = 0; (j < 16) && (j < n); ++j) c[j] = m[mpos+j]; - c[j] = 1; - mpos += j; n -= j; - add1305(h,c); - for (i = 0; i < 17; i++) { - x[i] = 0; - for (j = 0; j < 17; j++) x[i] = (x[i] + (h[j] * ((j <= i) ? r[i - j] : ((320 * r[i + 17 - j])|0))) | 0) | 0; - } - for (i = 0; i < 17; i++) h[i] = x[i]; - u = 0; - for (j = 0; j < 16; j++) { - u = (u + h[j]) | 0; - h[j] = u & 255; - u >>>= 8; - } - u = (u + h[16]) | 0; h[16] = u & 3; - u = (5 * (u >>> 2)) | 0; - for (j = 0; j < 16; j++) { - u = (u + h[j]) | 0; - h[j] = u & 255; - u >>>= 8; - } - u = (u + h[16]) | 0; h[16] = u; - } - - for (j = 0; j < 17; j++) g[j] = h[j]; - add1305(h,minusp); - s = (-(h[16] >>> 7) | 0); - for (j = 0; j < 17; j++) h[j] ^= s & (g[j] ^ h[j]); - - for (j = 0; j < 16; j++) c[j] = k[j + 16]; - c[16] = 0; - add1305(h,c); - for (j = 0; j < 16; j++) out[outpos+j] = h[j]; - return 0; -} - -function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { - var x = new Uint8Array(16); - crypto_onetimeauth(x,0,m,mpos,n,k); - return crypto_verify_16(h,hpos,x,0); -} - -function crypto_secretbox(c,m,d,n,k) { - var i; - if (d < 32) return -1; - crypto_stream_xor(c,0,m,0,d,n,k); - crypto_onetimeauth(c, 16, c, 32, d - 32, c); - for (i = 0; i < 16; i++) c[i] = 0; - return 0; -} - -function crypto_secretbox_open(m,c,d,n,k) { - var i; - var x = new Uint8Array(32); - if (d < 32) return -1; - crypto_stream(x,0,32,n,k); - if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; - crypto_stream_xor(m,0,c,0,d,n,k); - for (i = 0; i < 32; i++) m[i] = 0; - return 0; -} - -function set25519(r, a) { - var i; - for (i = 0; i < 16; i++) r[i] = a[i]|0; -} - -function car25519(o) { - var c; - var i; - for (i = 0; i < 16; i++) { - o[i] += 65536; - c = Math.floor(o[i] / 65536); - o[(i+1)*(i<15?1:0)] += c - 1 + 37 * (c-1) * (i===15?1:0); - o[i] -= (c * 65536); - } -} - -function sel25519(p, q, b) { - var t, c = ~(b-1); - for (var i = 0; i < 16; i++) { - t = c & (p[i] ^ q[i]); - p[i] ^= t; - q[i] ^= t; - } -} - -function pack25519(o, n) { - var i, j, b; - var m = gf(), t = gf(); - for (i = 0; i < 16; i++) t[i] = n[i]; - car25519(t); - car25519(t); - car25519(t); - for (j = 0; j < 2; j++) { - m[0] = t[0] - 0xffed; - for (i = 1; i < 15; i++) { - m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); - m[i-1] &= 0xffff; - } - m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); - b = (m[15]>>16) & 1; - m[14] &= 0xffff; - sel25519(t, m, 1-b); - } - for (i = 0; i < 16; i++) { - o[2*i] = t[i] & 0xff; - o[2*i+1] = t[i]>>8; - } -} - -function neq25519(a, b) { - var c = new Uint8Array(32), d = new Uint8Array(32); - pack25519(c, a); - pack25519(d, b); - return crypto_verify_32(c, 0, d, 0); -} - -function par25519(a) { - var d = new Uint8Array(32); - pack25519(d, a); - return d[0] & 1; -} - -function unpack25519(o, n) { - var i; - for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); - o[15] &= 0x7fff; -} - -function A(o, a, b) { - var i; - for (i = 0; i < 16; i++) o[i] = (a[i] + b[i])|0; -} - -function Z(o, a, b) { - var i; - for (i = 0; i < 16; i++) o[i] = (a[i] - b[i])|0; -} - -function M(o, a, b) { - var i, j, t = new Float64Array(31); - for (i = 0; i < 31; i++) t[i] = 0; - for (i = 0; i < 16; i++) { - for (j = 0; j < 16; j++) { - t[i+j] += a[i] * b[j]; - } - } - for (i = 0; i < 15; i++) { - t[i] += 38 * t[i+16]; - } - for (i = 0; i < 16; i++) o[i] = t[i]; - car25519(o); - car25519(o); -} - -function S(o, a) { - M(o, a, a); -} - -function inv25519(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 253; a >= 0; a--) { - S(c, c); - if(a !== 2 && a !== 4) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function pow2523(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 250; a >= 0; a--) { - S(c, c); - if(a !== 1) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} - -function crypto_scalarmult(q, n, p) { - var z = new Uint8Array(32); - var x = new Float64Array(80), r, i; - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(); - for (i = 0; i < 31; i++) z[i] = n[i]; - z[31]=(n[31]&127)|64; - z[0]&=248; - unpack25519(x,p); - for (i = 0; i < 16; i++) { - b[i]=x[i]; - d[i]=a[i]=c[i]=0; - } - a[0]=d[0]=1; - for (i=254; i>=0; --i) { - r=(z[i>>>3]>>>(i&7))&1; - sel25519(a,b,r); - sel25519(c,d,r); - A(e,a,c); - Z(a,a,c); - A(c,b,d); - Z(b,b,d); - S(d,e); - S(f,a); - M(a,c,a); - M(c,b,e); - A(e,a,c); - Z(a,a,c); - S(b,a); - Z(c,d,f); - M(a,c,_121665); - A(a,a,d); - M(c,c,a); - M(a,d,f); - M(d,b,x); - S(b,e); - sel25519(a,b,r); - sel25519(c,d,r); - } - for (i = 0; i < 16; i++) { - x[i+16]=a[i]; - x[i+32]=c[i]; - x[i+48]=b[i]; - x[i+64]=d[i]; - } - var x32 = x.subarray(32); - var x16 = x.subarray(16); - inv25519(x32,x32); - M(x16,x16,x32); - pack25519(q,x16); - return 0; -} - -function crypto_scalarmult_base(q, n) { - return crypto_scalarmult(q, n, _9); -} - -function crypto_box_keypair(y, x) { - randombytes(x, 32); - return crypto_scalarmult_base(y, x); -} - -function crypto_box_beforenm(k, y, x) { - var s = new Uint8Array(32); - crypto_scalarmult(s, x, y); - return crypto_core_hsalsa20(k, _0, s, sigma); -} - -var crypto_box_afternm = crypto_secretbox; -var crypto_box_open_afternm = crypto_secretbox_open; - -function crypto_box(c, m, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_afternm(c, m, d, n, k); -} - -function crypto_box_open(m, c, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_open_afternm(m, c, d, n, k); -} - -function add64() { - var a = 0, b = 0, c = 0, d = 0, m16 = 65535, l, h, i; - for (i = 0; i < arguments.length; i++) { - l = arguments[i].lo; - h = arguments[i].hi; - a += (l & m16); b += (l >>> 16); - c += (h & m16); d += (h >>> 16); - } - - b += (a >>> 16); - c += (b >>> 16); - d += (c >>> 16); - - return new u64((c & m16) | (d << 16), (a & m16) | (b << 16)); -} - -function shr64(x, c) { - return new u64((x.hi >>> c), (x.lo >>> c) | (x.hi << (32 - c))); -} - -function xor64() { - var l = 0, h = 0, i; - for (i = 0; i < arguments.length; i++) { - l ^= arguments[i].lo; - h ^= arguments[i].hi; - } - return new u64(h, l); -} - -function R(x, c) { - var h, l, c1 = 32 - c; - if (c < 32) { - h = (x.hi >>> c) | (x.lo << c1); - l = (x.lo >>> c) | (x.hi << c1); - } else if (c < 64) { - h = (x.lo >>> c) | (x.hi << c1); - l = (x.hi >>> c) | (x.lo << c1); - } - return new u64(h, l); -} - -function Ch(x, y, z) { - var h = (x.hi & y.hi) ^ (~x.hi & z.hi), - l = (x.lo & y.lo) ^ (~x.lo & z.lo); - return new u64(h, l); -} - -function Maj(x, y, z) { - var h = (x.hi & y.hi) ^ (x.hi & z.hi) ^ (y.hi & z.hi), - l = (x.lo & y.lo) ^ (x.lo & z.lo) ^ (y.lo & z.lo); - return new u64(h, l); -} - -function Sigma0(x) { return xor64(R(x,28), R(x,34), R(x,39)); } -function Sigma1(x) { return xor64(R(x,14), R(x,18), R(x,41)); } -function sigma0(x) { return xor64(R(x, 1), R(x, 8), shr64(x,7)); } -function sigma1(x) { return xor64(R(x,19), R(x,61), shr64(x,6)); } - -var K = [ - new u64(0x428a2f98, 0xd728ae22), new u64(0x71374491, 0x23ef65cd), - new u64(0xb5c0fbcf, 0xec4d3b2f), new u64(0xe9b5dba5, 0x8189dbbc), - new u64(0x3956c25b, 0xf348b538), new u64(0x59f111f1, 0xb605d019), - new u64(0x923f82a4, 0xaf194f9b), new u64(0xab1c5ed5, 0xda6d8118), - new u64(0xd807aa98, 0xa3030242), new u64(0x12835b01, 0x45706fbe), - new u64(0x243185be, 0x4ee4b28c), new u64(0x550c7dc3, 0xd5ffb4e2), - new u64(0x72be5d74, 0xf27b896f), new u64(0x80deb1fe, 0x3b1696b1), - new u64(0x9bdc06a7, 0x25c71235), new u64(0xc19bf174, 0xcf692694), - new u64(0xe49b69c1, 0x9ef14ad2), new u64(0xefbe4786, 0x384f25e3), - new u64(0x0fc19dc6, 0x8b8cd5b5), new u64(0x240ca1cc, 0x77ac9c65), - new u64(0x2de92c6f, 0x592b0275), new u64(0x4a7484aa, 0x6ea6e483), - new u64(0x5cb0a9dc, 0xbd41fbd4), new u64(0x76f988da, 0x831153b5), - new u64(0x983e5152, 0xee66dfab), new u64(0xa831c66d, 0x2db43210), - new u64(0xb00327c8, 0x98fb213f), new u64(0xbf597fc7, 0xbeef0ee4), - new u64(0xc6e00bf3, 0x3da88fc2), new u64(0xd5a79147, 0x930aa725), - new u64(0x06ca6351, 0xe003826f), new u64(0x14292967, 0x0a0e6e70), - new u64(0x27b70a85, 0x46d22ffc), new u64(0x2e1b2138, 0x5c26c926), - new u64(0x4d2c6dfc, 0x5ac42aed), new u64(0x53380d13, 0x9d95b3df), - new u64(0x650a7354, 0x8baf63de), new u64(0x766a0abb, 0x3c77b2a8), - new u64(0x81c2c92e, 0x47edaee6), new u64(0x92722c85, 0x1482353b), - new u64(0xa2bfe8a1, 0x4cf10364), new u64(0xa81a664b, 0xbc423001), - new u64(0xc24b8b70, 0xd0f89791), new u64(0xc76c51a3, 0x0654be30), - new u64(0xd192e819, 0xd6ef5218), new u64(0xd6990624, 0x5565a910), - new u64(0xf40e3585, 0x5771202a), new u64(0x106aa070, 0x32bbd1b8), - new u64(0x19a4c116, 0xb8d2d0c8), new u64(0x1e376c08, 0x5141ab53), - new u64(0x2748774c, 0xdf8eeb99), new u64(0x34b0bcb5, 0xe19b48a8), - new u64(0x391c0cb3, 0xc5c95a63), new u64(0x4ed8aa4a, 0xe3418acb), - new u64(0x5b9cca4f, 0x7763e373), new u64(0x682e6ff3, 0xd6b2b8a3), - new u64(0x748f82ee, 0x5defb2fc), new u64(0x78a5636f, 0x43172f60), - new u64(0x84c87814, 0xa1f0ab72), new u64(0x8cc70208, 0x1a6439ec), - new u64(0x90befffa, 0x23631e28), new u64(0xa4506ceb, 0xde82bde9), - new u64(0xbef9a3f7, 0xb2c67915), new u64(0xc67178f2, 0xe372532b), - new u64(0xca273ece, 0xea26619c), new u64(0xd186b8c7, 0x21c0c207), - new u64(0xeada7dd6, 0xcde0eb1e), new u64(0xf57d4f7f, 0xee6ed178), - new u64(0x06f067aa, 0x72176fba), new u64(0x0a637dc5, 0xa2c898a6), - new u64(0x113f9804, 0xbef90dae), new u64(0x1b710b35, 0x131c471b), - new u64(0x28db77f5, 0x23047d84), new u64(0x32caab7b, 0x40c72493), - new u64(0x3c9ebe0a, 0x15c9bebc), new u64(0x431d67c4, 0x9c100d4c), - new u64(0x4cc5d4be, 0xcb3e42b6), new u64(0x597f299c, 0xfc657e2a), - new u64(0x5fcb6fab, 0x3ad6faec), new u64(0x6c44198c, 0x4a475817) -]; - -function crypto_hashblocks(x, m, n) { - var z = [], b = [], a = [], w = [], t, i, j; - - for (i = 0; i < 8; i++) z[i] = a[i] = dl64(x, 8*i); - - var pos = 0; - while (n >= 128) { - for (i = 0; i < 16; i++) w[i] = dl64(m, 8*i+pos); - for (i = 0; i < 80; i++) { - for (j = 0; j < 8; j++) b[j] = a[j]; - t = add64(a[7], Sigma1(a[4]), Ch(a[4], a[5], a[6]), K[i], w[i%16]); - b[7] = add64(t, Sigma0(a[0]), Maj(a[0], a[1], a[2])); - b[3] = add64(b[3], t); - for (j = 0; j < 8; j++) a[(j+1)%8] = b[j]; - if (i%16 === 15) { - for (j = 0; j < 16; j++) { - w[j] = add64(w[j], w[(j+9)%16], sigma0(w[(j+1)%16]), sigma1(w[(j+14)%16])); - } - } - } - - for (i = 0; i < 8; i++) { - a[i] = add64(a[i], z[i]); - z[i] = a[i]; - } - - pos += 128; - n -= 128; - } - - for (i = 0; i < 8; i++) ts64(x, 8*i, z[i]); - return n; -} - -var iv = new Uint8Array([ - 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, - 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, - 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b, - 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1, - 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1, - 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f, - 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b, - 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79 -]); - -function crypto_hash(out, m, n) { - var h = new Uint8Array(64), x = new Uint8Array(256); - var i, b = n; - - for (i = 0; i < 64; i++) h[i] = iv[i]; - - crypto_hashblocks(h, m, n); - n %= 128; - - for (i = 0; i < 256; i++) x[i] = 0; - for (i = 0; i < n; i++) x[i] = m[b-n+i]; - x[n] = 128; - - n = 256-128*(n<112?1:0); - x[n-9] = 0; - ts64(x, n-8, new u64((b / 0x20000000) | 0, b << 3)); - crypto_hashblocks(h, x, n); - - for (i = 0; i < 64; i++) out[i] = h[i]; - - return 0; -} - -function add(p, q) { - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(), - g = gf(), h = gf(), t = gf(); - - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); - - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} - -function cswap(p, q, b) { - var i; - for (i = 0; i < 4; i++) { - sel25519(p[i], q[i], b); - } -} - -function pack(r, p) { - var tx = gf(), ty = gf(), zi = gf(); - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} - -function scalarmult(p, q, s) { - var b, i; - set25519(p[0], gf0); - set25519(p[1], gf1); - set25519(p[2], gf1); - set25519(p[3], gf0); - for (i = 255; i >= 0; --i) { - b = (s[(i/8)|0] >> (i&7)) & 1; - cswap(p, q, b); - add(q, p); - add(p, p); - cswap(p, q, b); - } -} - -function scalarbase(p, s) { - var q = [gf(), gf(), gf(), gf()]; - set25519(q[0], X); - set25519(q[1], Y); - set25519(q[2], gf1); - M(q[3], X, Y); - scalarmult(p, q, s); -} - -function crypto_sign_keypair(pk, sk, seeded) { - var d = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()]; - var i; - - if (!seeded) randombytes(sk, 32); - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - scalarbase(p, d); - pack(pk, p); - - for (i = 0; i < 32; i++) sk[i+32] = pk[i]; - return 0; -} - -var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); - -function modL(r, x) { - var carry, i, j, k; - for (i = 63; i >= 32; --i) { - carry = 0; - for (j = i - 32, k = i - 12; j < k; ++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry * 256; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - for (j = 0; j < 32; j++) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - for (j = 0; j < 32; j++) x[j] -= carry * L[j]; - for (i = 0; i < 32; i++) { - x[i+1] += x[i] >> 8; - r[i] = x[i] & 255; - } -} - -function reduce(r) { - var x = new Float64Array(64), i; - for (i = 0; i < 64; i++) x[i] = r[i]; - for (i = 0; i < 64; i++) r[i] = 0; - modL(r, x); -} - -// Note: difference from C - smlen returned, not passed as argument. -function crypto_sign(sm, m, n, sk) { - var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); - var i, j, x = new Float64Array(64); - var p = [gf(), gf(), gf(), gf()]; - - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - - var smlen = n + 64; - for (i = 0; i < n; i++) sm[64 + i] = m[i]; - for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; - - crypto_hash(r, sm.subarray(32), n+32); - reduce(r); - scalarbase(p, r); - pack(sm, p); - - for (i = 32; i < 64; i++) sm[i] = sk[i]; - crypto_hash(h, sm, n + 64); - reduce(h); - - for (i = 0; i < 64; i++) x[i] = 0; - for (i = 0; i < 32; i++) x[i] = r[i]; - for (i = 0; i < 32; i++) { - for (j = 0; j < 32; j++) { - x[i+j] += h[i] * d[j]; - } - } - - modL(sm.subarray(32), x); - return smlen; -} - -function unpackneg(r, p) { - var t = gf(), chk = gf(), num = gf(), - den = gf(), den2 = gf(), den4 = gf(), - den6 = gf(); - - set25519(r[2], gf1); - unpack25519(r[1], p); - S(num, r[1]); - M(den, num, D); - Z(num, num, r[2]); - A(den, r[2], den); - - S(den2, den); - S(den4, den2); - M(den6, den4, den2); - M(t, den6, num); - M(t, t, den); - - pow2523(t, t); - M(t, t, num); - M(t, t, den); - M(t, t, den); - M(r[0], t, den); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) M(r[0], r[0], I); - - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) return -1; - - if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); - - M(r[3], r[0], r[1]); - return 0; -} - -function crypto_sign_open(m, sm, n, pk) { - var i, mlen; - var t = new Uint8Array(32), h = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()], - q = [gf(), gf(), gf(), gf()]; - - mlen = -1; - if (n < 64) return -1; - - if (unpackneg(q, pk)) return -1; - - for (i = 0; i < n; i++) m[i] = sm[i]; - for (i = 0; i < 32; i++) m[i+32] = pk[i]; - crypto_hash(h, m, n); - reduce(h); - scalarmult(p, q, h); - - scalarbase(q, sm.subarray(32)); - add(p, q); - pack(t, p); - - n -= 64; - if (crypto_verify_32(sm, 0, t, 0)) { - for (i = 0; i < n; i++) m[i] = 0; - return -1; - } - - for (i = 0; i < n; i++) m[i] = sm[i + 64]; - mlen = n; - return mlen; -} - -var crypto_secretbox_KEYBYTES = 32, - crypto_secretbox_NONCEBYTES = 24, - crypto_secretbox_ZEROBYTES = 32, - crypto_secretbox_BOXZEROBYTES = 16, - crypto_scalarmult_BYTES = 32, - crypto_scalarmult_SCALARBYTES = 32, - crypto_box_PUBLICKEYBYTES = 32, - crypto_box_SECRETKEYBYTES = 32, - crypto_box_BEFORENMBYTES = 32, - crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, - crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, - crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, - crypto_sign_BYTES = 64, - crypto_sign_PUBLICKEYBYTES = 32, - crypto_sign_SECRETKEYBYTES = 64, - crypto_sign_SEEDBYTES = 32, - crypto_hash_BYTES = 64; - -nacl.lowlevel = { - crypto_core_hsalsa20: crypto_core_hsalsa20, - crypto_stream_xor: crypto_stream_xor, - crypto_stream: crypto_stream, - crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, - crypto_stream_salsa20: crypto_stream_salsa20, - crypto_onetimeauth: crypto_onetimeauth, - crypto_onetimeauth_verify: crypto_onetimeauth_verify, - crypto_verify_16: crypto_verify_16, - crypto_verify_32: crypto_verify_32, - crypto_secretbox: crypto_secretbox, - crypto_secretbox_open: crypto_secretbox_open, - crypto_scalarmult: crypto_scalarmult, - crypto_scalarmult_base: crypto_scalarmult_base, - crypto_box_beforenm: crypto_box_beforenm, - crypto_box_afternm: crypto_box_afternm, - crypto_box: crypto_box, - crypto_box_open: crypto_box_open, - crypto_box_keypair: crypto_box_keypair, - crypto_hash: crypto_hash, - crypto_sign: crypto_sign, - crypto_sign_keypair: crypto_sign_keypair, - crypto_sign_open: crypto_sign_open, - - crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, - crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, - crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, - crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, - crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, - crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, - crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, - crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, - crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, - crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, - crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, - crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, - crypto_sign_BYTES: crypto_sign_BYTES, - crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, - crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, - crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, - crypto_hash_BYTES: crypto_hash_BYTES -}; - -/* High-level API */ - -function checkLengths(k, n) { - if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); - if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); -} - -function checkBoxLengths(pk, sk) { - if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); - if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); -} - -function checkArrayTypes() { - var t, i; - for (i = 0; i < arguments.length; i++) { - if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') - throw new TypeError('unexpected type ' + t + ', use Uint8Array'); - } -} - -function cleanup(arr) { - for (var i = 0; i < arr.length; i++) arr[i] = 0; -} - -// TODO: Completely remove this in v0.15. -if (!nacl.util) { - nacl.util = {}; - nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() { - throw new Error('nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js'); - }; -} - -nacl.randomBytes = function(n) { - var b = new Uint8Array(n); - randombytes(b, n); - return b; -}; - -nacl.secretbox = function(msg, nonce, key) { - checkArrayTypes(msg, nonce, key); - checkLengths(key, nonce); - var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); - var c = new Uint8Array(m.length); - for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; - crypto_secretbox(c, m, m.length, nonce, key); - return c.subarray(crypto_secretbox_BOXZEROBYTES); -}; - -nacl.secretbox.open = function(box, nonce, key) { - checkArrayTypes(box, nonce, key); - checkLengths(key, nonce); - var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); - var m = new Uint8Array(c.length); - for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; - if (c.length < 32) return false; - if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; - return m.subarray(crypto_secretbox_ZEROBYTES); -}; - -nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; -nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; -nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; - -nacl.scalarMult = function(n, p) { - checkArrayTypes(n, p); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult(q, n, p); - return q; -}; - -nacl.scalarMult.base = function(n) { - checkArrayTypes(n); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult_base(q, n); - return q; -}; - -nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; -nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; - -nacl.box = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox(msg, nonce, k); -}; - -nacl.box.before = function(publicKey, secretKey) { - checkArrayTypes(publicKey, secretKey); - checkBoxLengths(publicKey, secretKey); - var k = new Uint8Array(crypto_box_BEFORENMBYTES); - crypto_box_beforenm(k, publicKey, secretKey); - return k; -}; - -nacl.box.after = nacl.secretbox; - -nacl.box.open = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox.open(msg, nonce, k); -}; - -nacl.box.open.after = nacl.secretbox.open; - -nacl.box.keyPair = function() { - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); - crypto_box_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.box.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_box_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - crypto_scalarmult_base(pk, secretKey); - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; -nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; -nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; -nacl.box.nonceLength = crypto_box_NONCEBYTES; -nacl.box.overheadLength = nacl.secretbox.overheadLength; - -nacl.sign = function(msg, secretKey) { - checkArrayTypes(msg, secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); - crypto_sign(signedMsg, msg, msg.length, secretKey); - return signedMsg; -}; - -nacl.sign.open = function(signedMsg, publicKey) { - if (arguments.length !== 2) - throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); - checkArrayTypes(signedMsg, publicKey); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var tmp = new Uint8Array(signedMsg.length); - var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); - if (mlen < 0) return null; - var m = new Uint8Array(mlen); - for (var i = 0; i < m.length; i++) m[i] = tmp[i]; - return m; -}; - -nacl.sign.detached = function(msg, secretKey) { - var signedMsg = nacl.sign(msg, secretKey); - var sig = new Uint8Array(crypto_sign_BYTES); - for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; - return sig; -}; - -nacl.sign.detached.verify = function(msg, sig, publicKey) { - checkArrayTypes(msg, sig, publicKey); - if (sig.length !== crypto_sign_BYTES) - throw new Error('bad signature size'); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var sm = new Uint8Array(crypto_sign_BYTES + msg.length); - var m = new Uint8Array(crypto_sign_BYTES + msg.length); - var i; - for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; - for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; - return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); -}; - -nacl.sign.keyPair = function() { - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - crypto_sign_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; - -nacl.sign.keyPair.fromSeed = function(seed) { - checkArrayTypes(seed); - if (seed.length !== crypto_sign_SEEDBYTES) - throw new Error('bad seed size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - for (var i = 0; i < 32; i++) sk[i] = seed[i]; - crypto_sign_keypair(pk, sk, true); - return {publicKey: pk, secretKey: sk}; -}; - -nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; -nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; -nacl.sign.seedLength = crypto_sign_SEEDBYTES; -nacl.sign.signatureLength = crypto_sign_BYTES; - -nacl.hash = function(msg) { - checkArrayTypes(msg); - var h = new Uint8Array(crypto_hash_BYTES); - crypto_hash(h, msg, msg.length); - return h; -}; - -nacl.hash.hashLength = crypto_hash_BYTES; - -nacl.verify = function(x, y) { - checkArrayTypes(x, y); - // Zero length arguments are considered not equal. - if (x.length === 0 || y.length === 0) return false; - if (x.length !== y.length) return false; - return (vn(x, 0, y, 0, x.length) === 0) ? true : false; -}; - -nacl.setPRNG = function(fn) { - randombytes = fn; -}; - -(function() { - // Initialize PRNG if environment provides CSPRNG. - // If not, methods calling randombytes will throw. - var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null; - if (crypto && crypto.getRandomValues) { - // Browsers. - var QUOTA = 65536; - nacl.setPRNG(function(x, n) { - var i, v = new Uint8Array(n); - for (i = 0; i < n; i += QUOTA) { - crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA))); - } - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } else if (typeof require !== 'undefined') { - // Node.js. - crypto = require('crypto'); - if (crypto && crypto.randomBytes) { - nacl.setPRNG(function(x, n) { - var i, v = crypto.randomBytes(n); - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } - } -})(); - -})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {})); diff --git a/truebit-implementation/node_modules/tweetnacl/nacl.min.js b/truebit-implementation/node_modules/tweetnacl/nacl.min.js deleted file mode 100644 index 4484974e..00000000 --- a/truebit-implementation/node_modules/tweetnacl/nacl.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(r){"use strict";function n(r,n){return r<>>32-n}function e(r,n){var e=255&r[n+3];return e=e<<8|255&r[n+2],e=e<<8|255&r[n+1],e<<8|255&r[n+0]}function t(r,n){var e=r[n]<<24|r[n+1]<<16|r[n+2]<<8|r[n+3],t=r[n+4]<<24|r[n+5]<<16|r[n+6]<<8|r[n+7];return new sr(e,t)}function o(r,n,e){var t;for(t=0;t<4;t++)r[n+t]=255&e,e>>>=8}function i(r,n,e){r[n]=e.hi>>24&255,r[n+1]=e.hi>>16&255,r[n+2]=e.hi>>8&255,r[n+3]=255&e.hi,r[n+4]=e.lo>>24&255,r[n+5]=e.lo>>16&255,r[n+6]=e.lo>>8&255,r[n+7]=255&e.lo}function a(r,n,e,t,o){var i,a=0;for(i=0;i>>8)-1}function f(r,n,e,t){return a(r,n,e,t,16)}function u(r,n,e,t){return a(r,n,e,t,32)}function c(r,t,i,a,f){var u,c,w,y=new Uint32Array(16),l=new Uint32Array(16),s=new Uint32Array(16),h=new Uint32Array(4);for(u=0;u<4;u++)l[5*u]=e(a,4*u),l[1+u]=e(i,4*u),l[6+u]=e(t,4*u),l[11+u]=e(i,16+4*u);for(u=0;u<16;u++)s[u]=l[u];for(u=0;u<20;u++){for(c=0;c<4;c++){for(w=0;w<4;w++)h[w]=l[(5*c+4*w)%16];for(h[1]^=n(h[0]+h[3]|0,7),h[2]^=n(h[1]+h[0]|0,9),h[3]^=n(h[2]+h[1]|0,13),h[0]^=n(h[3]+h[2]|0,18),w=0;w<4;w++)y[4*c+(c+w)%4]=h[w]}for(w=0;w<16;w++)l[w]=y[w]}if(f){for(u=0;u<16;u++)l[u]=l[u]+s[u]|0;for(u=0;u<4;u++)l[5*u]=l[5*u]-e(a,4*u)|0,l[6+u]=l[6+u]-e(t,4*u)|0;for(u=0;u<4;u++)o(r,4*u,l[5*u]),o(r,16+4*u,l[6+u])}else for(u=0;u<16;u++)o(r,4*u,l[u]+s[u]|0)}function w(r,n,e,t){return c(r,n,e,t,!1),0}function y(r,n,e,t){return c(r,n,e,t,!0),0}function l(r,n,e,t,o,i,a){var f,u,c=new Uint8Array(16),y=new Uint8Array(64);if(!o)return 0;for(u=0;u<16;u++)c[u]=0;for(u=0;u<8;u++)c[u]=i[u];for(;o>=64;){for(w(y,c,a,Br),u=0;u<64;u++)r[n+u]=(e?e[t+u]:0)^y[u];for(f=1,u=8;u<16;u++)f=f+(255&c[u])|0,c[u]=255&f,f>>>=8;o-=64,n+=64,e&&(t+=64)}if(o>0)for(w(y,c,a,Br),u=0;u>>=8}function b(r,n,e,t,o,i){var a,f,u,c,w=new Uint32Array(17),y=new Uint32Array(17),l=new Uint32Array(17),s=new Uint32Array(17),h=new Uint32Array(17);for(u=0;u<17;u++)y[u]=l[u]=0;for(u=0;u<16;u++)y[u]=i[u];for(y[3]&=15,y[4]&=252,y[7]&=15,y[8]&=252,y[11]&=15,y[12]&=252,y[15]&=15;o>0;){for(u=0;u<17;u++)s[u]=0;for(u=0;u<16&&u>>=8;for(c=c+l[16]|0,l[16]=3&c,c=5*(c>>>2)|0,u=0;u<16;u++)c=c+l[u]|0,l[u]=255&c,c>>>=8;c=c+l[16]|0,l[16]=c}for(u=0;u<17;u++)h[u]=l[u];for(v(l,Sr),a=0|-(l[16]>>>7),u=0;u<17;u++)l[u]^=a&(h[u]^l[u]);for(u=0;u<16;u++)s[u]=i[u+16];for(s[16]=0,v(l,s),u=0;u<16;u++)r[n+u]=l[u];return 0}function p(r,n,e,t,o,i){var a=new Uint8Array(16);return b(a,0,e,t,o,i),f(r,n,a,0)}function _(r,n,e,t,o){var i;if(e<32)return-1;for(g(r,0,n,0,e,t,o),b(r,16,r,32,e-32,r),i=0;i<16;i++)r[i]=0;return 0}function A(r,n,e,t,o){var i,a=new Uint8Array(32);if(e<32)return-1;if(h(a,0,32,t,o),0!==p(n,16,n,32,e-32,a))return-1;for(g(r,0,n,0,e,t,o),i=0;i<32;i++)r[i]=0;return 0}function U(r,n){var e;for(e=0;e<16;e++)r[e]=0|n[e]}function E(r){var n,e;for(e=0;e<16;e++)r[e]+=65536,n=Math.floor(r[e]/65536),r[(e+1)*(e<15?1:0)]+=n-1+37*(n-1)*(15===e?1:0),r[e]-=65536*n}function d(r,n,e){for(var t,o=~(e-1),i=0;i<16;i++)t=o&(r[i]^n[i]),r[i]^=t,n[i]^=t}function x(r,n){var e,t,o,i=hr(),a=hr();for(e=0;e<16;e++)a[e]=n[e];for(E(a),E(a),E(a),t=0;t<2;t++){for(i[0]=a[0]-65517,e=1;e<15;e++)i[e]=a[e]-65535-(i[e-1]>>16&1),i[e-1]&=65535;i[15]=a[15]-32767-(i[14]>>16&1),o=i[15]>>16&1,i[14]&=65535,d(a,i,1-o)}for(e=0;e<16;e++)r[2*e]=255&a[e],r[2*e+1]=a[e]>>8}function m(r,n){var e=new Uint8Array(32),t=new Uint8Array(32);return x(e,r),x(t,n),u(e,0,t,0)}function B(r){var n=new Uint8Array(32);return x(n,r),1&n[0]}function S(r,n){var e;for(e=0;e<16;e++)r[e]=n[2*e]+(n[2*e+1]<<8);r[15]&=32767}function K(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]+e[t]|0}function T(r,n,e){var t;for(t=0;t<16;t++)r[t]=n[t]-e[t]|0}function Y(r,n,e){var t,o,i=new Float64Array(31);for(t=0;t<31;t++)i[t]=0;for(t=0;t<16;t++)for(o=0;o<16;o++)i[t+o]+=n[t]*e[o];for(t=0;t<15;t++)i[t]+=38*i[t+16];for(t=0;t<16;t++)r[t]=i[t];E(r),E(r)}function L(r,n){Y(r,n,n)}function k(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=253;e>=0;e--)L(t,t),2!==e&&4!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function z(r,n){var e,t=hr();for(e=0;e<16;e++)t[e]=n[e];for(e=250;e>=0;e--)L(t,t),1!==e&&Y(t,t,n);for(e=0;e<16;e++)r[e]=t[e]}function R(r,n,e){var t,o,i=new Uint8Array(32),a=new Float64Array(80),f=hr(),u=hr(),c=hr(),w=hr(),y=hr(),l=hr();for(o=0;o<31;o++)i[o]=n[o];for(i[31]=127&n[31]|64,i[0]&=248,S(a,e),o=0;o<16;o++)u[o]=a[o],w[o]=f[o]=c[o]=0;for(f[0]=w[0]=1,o=254;o>=0;--o)t=i[o>>>3]>>>(7&o)&1,d(f,u,t),d(c,w,t),K(y,f,c),T(f,f,c),K(c,u,w),T(u,u,w),L(w,y),L(l,f),Y(f,c,f),Y(c,u,y),K(y,f,c),T(f,f,c),L(u,f),T(c,w,l),Y(f,c,Ar),K(f,f,w),Y(c,c,f),Y(f,w,l),Y(w,u,a),L(u,y),d(f,u,t),d(c,w,t);for(o=0;o<16;o++)a[o+16]=f[o],a[o+32]=c[o],a[o+48]=u[o],a[o+64]=w[o];var s=a.subarray(32),h=a.subarray(16);return k(s,s),Y(h,h,s),x(r,h),0}function P(r,n){return R(r,n,br)}function O(r,n){return gr(n,32),P(r,n)}function F(r,n,e){var t=new Uint8Array(32);return R(t,e,n),y(r,vr,t,Br)}function N(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Kr(r,n,e,t,a)}function C(r,n,e,t,o,i){var a=new Uint8Array(32);return F(a,o,i),Tr(r,n,e,t,a)}function M(){var r,n,e,t=0,o=0,i=0,a=0,f=65535;for(e=0;e>>16,i+=n&f,a+=n>>>16;return o+=t>>>16,i+=o>>>16,a+=i>>>16,new sr(i&f|a<<16,t&f|o<<16)}function G(r,n){return new sr(r.hi>>>n,r.lo>>>n|r.hi<<32-n)}function Z(){var r,n=0,e=0;for(r=0;r>>n|r.lo<>>n|r.hi<>>n|r.hi<>>n|r.lo<=128;){for(a=0;a<16;a++)y[a]=t(n,8*a+l);for(a=0;a<80;a++){for(f=0;f<8;f++)c[f]=w[f];for(o=M(w[7],X(w[4]),q(w[4],w[5],w[6]),Yr[a],y[a%16]),c[7]=M(o,V(w[0]),I(w[0],w[1],w[2])),c[3]=M(c[3],o),f=0;f<8;f++)w[(f+1)%8]=c[f];if(a%16===15)for(f=0;f<16;f++)y[f]=M(y[f],y[(f+9)%16],D(y[(f+1)%16]),H(y[(f+14)%16]))}for(a=0;a<8;a++)w[a]=M(w[a],u[a]),u[a]=w[a];l+=128,e-=128}for(a=0;a<8;a++)i(r,8*a,u[a]);return e}function Q(r,n,e){var t,o=new Uint8Array(64),a=new Uint8Array(256),f=e;for(t=0;t<64;t++)o[t]=Lr[t];for(J(o,n,e),e%=128,t=0;t<256;t++)a[t]=0;for(t=0;t=0;--o)t=e[o/8|0]>>(7&o)&1,$(r,n,t),W(n,r),W(r,r),$(r,n,t)}function er(r,n){var e=[hr(),hr(),hr(),hr()];U(e[0],dr),U(e[1],xr),U(e[2],_r),Y(e[3],dr,xr),nr(r,e,n)}function tr(r,n,e){var t,o=new Uint8Array(64),i=[hr(),hr(),hr(),hr()];for(e||gr(n,32),Q(o,n,32),o[0]&=248,o[31]&=127,o[31]|=64,er(i,o),rr(r,i),t=0;t<32;t++)n[t+32]=r[t];return 0}function or(r,n){var e,t,o,i;for(t=63;t>=32;--t){for(e=0,o=t-32,i=t-12;o>8,n[o]-=256*e;n[o]+=e,n[t]=0}for(e=0,o=0;o<32;o++)n[o]+=e-(n[31]>>4)*kr[o],e=n[o]>>8,n[o]&=255;for(o=0;o<32;o++)n[o]-=e*kr[o];for(t=0;t<32;t++)n[t+1]+=n[t]>>8,r[t]=255&n[t]}function ir(r){var n,e=new Float64Array(64);for(n=0;n<64;n++)e[n]=r[n];for(n=0;n<64;n++)r[n]=0;or(r,e)}function ar(r,n,e,t){var o,i,a=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),w=[hr(),hr(),hr(),hr()];Q(a,t,32),a[0]&=248,a[31]&=127,a[31]|=64;var y=e+64;for(o=0;o>7&&T(r[0],pr,r[0]),Y(r[3],r[0],r[1]),0)}function ur(r,n,e,t){var o,i,a=new Uint8Array(32),f=new Uint8Array(64),c=[hr(),hr(),hr(),hr()],w=[hr(),hr(),hr(),hr()];if(i=-1,e<64)return-1;if(fr(w,t))return-1;for(o=0;o=0},r.sign.keyPair=function(){var r=new Uint8Array(Vr),n=new Uint8Array(Xr);return tr(r,n),{publicKey:r,secretKey:n}},r.sign.keyPair.fromSecretKey=function(r){if(yr(r),r.length!==Xr)throw new Error("bad secret key size");for(var n=new Uint8Array(Vr),e=0;e/dev/null && browserify test/browser/init.js test/*.quick.js | uglifyjs -c -m -o test/browser/_bundle-quick.js 2>/dev/null", - "lint": "eslint nacl.js nacl-fast.js test/*.js test/benchmark/*.js", - "test": "npm run test-node-all && npm run test-browser", - "test-browser": "NACL_SRC=${NACL_SRC:='nacl.min.js'} && npm run build-test-browser && cat $NACL_SRC test/browser/_bundle.js | tape-run | faucet", - "test-node": "tape test/*.js | faucet", - "test-node-all": "make -C test/c && tape test/*.js test/c/*.js | faucet" - }, - "types": "nacl.d.ts", - "version": "0.14.5" -} diff --git a/truebit-implementation/node_modules/type-is/HISTORY.md b/truebit-implementation/node_modules/type-is/HISTORY.md deleted file mode 100644 index 183290cb..00000000 --- a/truebit-implementation/node_modules/type-is/HISTORY.md +++ /dev/null @@ -1,236 +0,0 @@ -1.6.16 / 2018-02-16 -=================== - - * deps: mime-types@~2.1.18 - - Add `application/raml+yaml` with extension `.raml` - - Add `application/wasm` with extension `.wasm` - - Add `text/shex` with extension `.shex` - - Add extensions for JPEG-2000 images - - Add extensions from IANA for `message/*` types - - Add extension `.mjs` to `application/javascript` - - Add extension `.wadl` to `application/vnd.sun.wadl+xml` - - Add extension `.gz` to `application/gzip` - - Add glTF types and extensions - - Add new mime types - - Update extensions `.md` and `.markdown` to be `text/markdown` - - Update font MIME types - - Update `text/hjson` to registered `application/hjson` - -1.6.15 / 2017-03-31 -=================== - - * deps: mime-types@~2.1.15 - - Add new mime types - -1.6.14 / 2016-11-18 -=================== - - * deps: mime-types@~2.1.13 - - Add new mime types - -1.6.13 / 2016-05-18 -=================== - - * deps: mime-types@~2.1.11 - - Add new mime types - -1.6.12 / 2016-02-28 -=================== - - * deps: mime-types@~2.1.10 - - Add new mime types - - Fix extension of `application/dash+xml` - - Update primary extension for `audio/mp4` - -1.6.11 / 2016-01-29 -=================== - - * deps: mime-types@~2.1.9 - - Add new mime types - -1.6.10 / 2015-12-01 -=================== - - * deps: mime-types@~2.1.8 - - Add new mime types - -1.6.9 / 2015-09-27 -================== - - * deps: mime-types@~2.1.7 - - Add new mime types - -1.6.8 / 2015-09-04 -================== - - * deps: mime-types@~2.1.6 - - Add new mime types - -1.6.7 / 2015-08-20 -================== - - * Fix type error when given invalid type to match against - * deps: mime-types@~2.1.5 - - Add new mime types - -1.6.6 / 2015-07-31 -================== - - * deps: mime-types@~2.1.4 - - Add new mime types - -1.6.5 / 2015-07-16 -================== - - * deps: mime-types@~2.1.3 - - Add new mime types - -1.6.4 / 2015-07-01 -================== - - * deps: mime-types@~2.1.2 - - Add new mime types - * perf: enable strict mode - * perf: remove argument reassignment - -1.6.3 / 2015-06-08 -================== - - * deps: mime-types@~2.1.1 - - Add new mime types - * perf: reduce try block size - * perf: remove bitwise operations - -1.6.2 / 2015-05-10 -================== - - * deps: mime-types@~2.0.11 - - Add new mime types - -1.6.1 / 2015-03-13 -================== - - * deps: mime-types@~2.0.10 - - Add new mime types - -1.6.0 / 2015-02-12 -================== - - * fix false-positives in `hasBody` `Transfer-Encoding` check - * support wildcard for both type and subtype (`*/*`) - -1.5.7 / 2015-02-09 -================== - - * fix argument reassignment - * deps: mime-types@~2.0.9 - - Add new mime types - -1.5.6 / 2015-01-29 -================== - - * deps: mime-types@~2.0.8 - - Add new mime types - -1.5.5 / 2014-12-30 -================== - - * deps: mime-types@~2.0.7 - - Add new mime types - - Fix missing extensions - - Fix various invalid MIME type entries - - Remove example template MIME types - - deps: mime-db@~1.5.0 - -1.5.4 / 2014-12-10 -================== - - * deps: mime-types@~2.0.4 - - Add new mime types - - deps: mime-db@~1.3.0 - -1.5.3 / 2014-11-09 -================== - - * deps: mime-types@~2.0.3 - - Add new mime types - - deps: mime-db@~1.2.0 - -1.5.2 / 2014-09-28 -================== - - * deps: mime-types@~2.0.2 - - Add new mime types - - deps: mime-db@~1.1.0 - -1.5.1 / 2014-09-07 -================== - - * Support Node.js 0.6 - * deps: media-typer@0.3.0 - * deps: mime-types@~2.0.1 - - Support Node.js 0.6 - -1.5.0 / 2014-09-05 -================== - - * fix `hasbody` to be true for `content-length: 0` - -1.4.0 / 2014-09-02 -================== - - * update mime-types - -1.3.2 / 2014-06-24 -================== - - * use `~` range on mime-types - -1.3.1 / 2014-06-19 -================== - - * fix global variable leak - -1.3.0 / 2014-06-19 -================== - - * improve type parsing - - - invalid media type never matches - - media type not case-sensitive - - extra LWS does not affect results - -1.2.2 / 2014-06-19 -================== - - * fix behavior on unknown type argument - -1.2.1 / 2014-06-03 -================== - - * switch dependency from `mime` to `mime-types@1.0.0` - -1.2.0 / 2014-05-11 -================== - - * support suffix matching: - - - `+json` matches `application/vnd+json` - - `*/vnd+json` matches `application/vnd+json` - - `application/*+json` matches `application/vnd+json` - -1.1.0 / 2014-04-12 -================== - - * add non-array values support - * expose internal utilities: - - - `.is()` - - `.hasBody()` - - `.normalize()` - - `.match()` - -1.0.1 / 2014-03-30 -================== - - * add `multipart` as a shorthand diff --git a/truebit-implementation/node_modules/type-is/LICENSE b/truebit-implementation/node_modules/type-is/LICENSE deleted file mode 100644 index 386b7b69..00000000 --- a/truebit-implementation/node_modules/type-is/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/type-is/README.md b/truebit-implementation/node_modules/type-is/README.md deleted file mode 100644 index 70c47dae..00000000 --- a/truebit-implementation/node_modules/type-is/README.md +++ /dev/null @@ -1,146 +0,0 @@ -# type-is - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Infer the content-type of a request. - -### Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install type-is -``` - -## API - -```js -var http = require('http') -var typeis = require('type-is') - -http.createServer(function (req, res) { - var istext = typeis(req, ['text/*']) - res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text') -}) -``` - -### type = typeis(request, types) - -`request` is the node HTTP request. `types` is an array of types. - - - -```js -// req.headers.content-type = 'application/json' - -typeis(req, ['json']) // 'json' -typeis(req, ['html', 'json']) // 'json' -typeis(req, ['application/*']) // 'application/json' -typeis(req, ['application/json']) // 'application/json' - -typeis(req, ['html']) // false -``` - -### typeis.hasBody(request) - -Returns a Boolean if the given `request` has a body, regardless of the -`Content-Type` header. - -Having a body has no relation to how large the body is (it may be 0 bytes). -This is similar to how file existence works. If a body does exist, then this -indicates that there is data to read from the Node.js request stream. - - - -```js -if (typeis.hasBody(req)) { - // read the body, since there is one - - req.on('data', function (chunk) { - // ... - }) -} -``` - -### type = typeis.is(mediaType, types) - -`mediaType` is the [media type](https://tools.ietf.org/html/rfc6838) string. `types` is an array of types. - - - -```js -var mediaType = 'application/json' - -typeis.is(mediaType, ['json']) // 'json' -typeis.is(mediaType, ['html', 'json']) // 'json' -typeis.is(mediaType, ['application/*']) // 'application/json' -typeis.is(mediaType, ['application/json']) // 'application/json' - -typeis.is(mediaType, ['html']) // false -``` - -### Each type can be: - -- An extension name such as `json`. This name will be returned if matched. -- A mime type such as `application/json`. -- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. The full mime type will be returned if matched. -- A suffix such as `+json`. This can be combined with a wildcard such as `*/vnd+json` or `application/*+json`. The full mime type will be returned if matched. - -`false` will be returned if no type matches or the content type is invalid. - -`null` will be returned if the request does not have a body. - -## Examples - -### Example body parser - -```js -var express = require('express') -var typeis = require('type-is') - -var app = express() - -app.use(function bodyParser (req, res, next) { - if (!typeis.hasBody(req)) { - return next() - } - - switch (typeis(req, ['urlencoded', 'json', 'multipart'])) { - case 'urlencoded': - // parse urlencoded body - throw new Error('implement urlencoded body parsing') - case 'json': - // parse json body - throw new Error('implement json body parsing') - case 'multipart': - // parse multipart body - throw new Error('implement multipart body parsing') - default: - // 415 error code - res.statusCode = 415 - res.end() - break - } -}) -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/type-is.svg -[npm-url]: https://npmjs.org/package/type-is -[node-version-image]: https://img.shields.io/node/v/type-is.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/type-is/master.svg -[travis-url]: https://travis-ci.org/jshttp/type-is -[coveralls-image]: https://img.shields.io/coveralls/jshttp/type-is/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master -[downloads-image]: https://img.shields.io/npm/dm/type-is.svg -[downloads-url]: https://npmjs.org/package/type-is diff --git a/truebit-implementation/node_modules/type-is/index.js b/truebit-implementation/node_modules/type-is/index.js deleted file mode 100644 index 4da73011..00000000 --- a/truebit-implementation/node_modules/type-is/index.js +++ /dev/null @@ -1,262 +0,0 @@ -/*! - * type-is - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var typer = require('media-typer') -var mime = require('mime-types') - -/** - * Module exports. - * @public - */ - -module.exports = typeofrequest -module.exports.is = typeis -module.exports.hasBody = hasbody -module.exports.normalize = normalize -module.exports.match = mimeMatch - -/** - * Compare a `value` content-type with `types`. - * Each `type` can be an extension like `html`, - * a special shortcut like `multipart` or `urlencoded`, - * or a mime type. - * - * If no types match, `false` is returned. - * Otherwise, the first `type` that matches is returned. - * - * @param {String} value - * @param {Array} types - * @public - */ - -function typeis (value, types_) { - var i - var types = types_ - - // remove parameters and normalize - var val = tryNormalizeType(value) - - // no type or invalid - if (!val) { - return false - } - - // support flattened arguments - if (types && !Array.isArray(types)) { - types = new Array(arguments.length - 1) - for (i = 0; i < types.length; i++) { - types[i] = arguments[i + 1] - } - } - - // no types, return the content type - if (!types || !types.length) { - return val - } - - var type - for (i = 0; i < types.length; i++) { - if (mimeMatch(normalize(type = types[i]), val)) { - return type[0] === '+' || type.indexOf('*') !== -1 - ? val - : type - } - } - - // no matches - return false -} - -/** - * Check if a request has a request body. - * A request with a body __must__ either have `transfer-encoding` - * or `content-length` headers set. - * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3 - * - * @param {Object} request - * @return {Boolean} - * @public - */ - -function hasbody (req) { - return req.headers['transfer-encoding'] !== undefined || - !isNaN(req.headers['content-length']) -} - -/** - * Check if the incoming request contains the "Content-Type" - * header field, and it contains any of the give mime `type`s. - * If there is no request body, `null` is returned. - * If there is no content type, `false` is returned. - * Otherwise, it returns the first `type` that matches. - * - * Examples: - * - * // With Content-Type: text/html; charset=utf-8 - * this.is('html'); // => 'html' - * this.is('text/html'); // => 'text/html' - * this.is('text/*', 'application/json'); // => 'text/html' - * - * // When Content-Type is application/json - * this.is('json', 'urlencoded'); // => 'json' - * this.is('application/json'); // => 'application/json' - * this.is('html', 'application/*'); // => 'application/json' - * - * this.is('html'); // => false - * - * @param {String|Array} types... - * @return {String|false|null} - * @public - */ - -function typeofrequest (req, types_) { - var types = types_ - - // no body - if (!hasbody(req)) { - return null - } - - // support flattened arguments - if (arguments.length > 2) { - types = new Array(arguments.length - 1) - for (var i = 0; i < types.length; i++) { - types[i] = arguments[i + 1] - } - } - - // request content type - var value = req.headers['content-type'] - - return typeis(value, types) -} - -/** - * Normalize a mime type. - * If it's a shorthand, expand it to a valid mime type. - * - * In general, you probably want: - * - * var type = is(req, ['urlencoded', 'json', 'multipart']); - * - * Then use the appropriate body parsers. - * These three are the most common request body types - * and are thus ensured to work. - * - * @param {String} type - * @private - */ - -function normalize (type) { - if (typeof type !== 'string') { - // invalid type - return false - } - - switch (type) { - case 'urlencoded': - return 'application/x-www-form-urlencoded' - case 'multipart': - return 'multipart/*' - } - - if (type[0] === '+') { - // "+json" -> "*/*+json" expando - return '*/*' + type - } - - return type.indexOf('/') === -1 - ? mime.lookup(type) - : type -} - -/** - * Check if `expected` mime type - * matches `actual` mime type with - * wildcard and +suffix support. - * - * @param {String} expected - * @param {String} actual - * @return {Boolean} - * @private - */ - -function mimeMatch (expected, actual) { - // invalid type - if (expected === false) { - return false - } - - // split types - var actualParts = actual.split('/') - var expectedParts = expected.split('/') - - // invalid format - if (actualParts.length !== 2 || expectedParts.length !== 2) { - return false - } - - // validate type - if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) { - return false - } - - // validate suffix wildcard - if (expectedParts[1].substr(0, 2) === '*+') { - return expectedParts[1].length <= actualParts[1].length + 1 && - expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length) - } - - // validate subtype - if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) { - return false - } - - return true -} - -/** - * Normalize a type and remove parameters. - * - * @param {string} value - * @return {string} - * @private - */ - -function normalizeType (value) { - // parse the type - var type = typer.parse(value) - - // remove the parameters - type.parameters = undefined - - // reformat it - return typer.format(type) -} - -/** - * Try to normalize a type and remove parameters. - * - * @param {string} value - * @return {string} - * @private - */ - -function tryNormalizeType (value) { - try { - return normalizeType(value) - } catch (err) { - return null - } -} diff --git a/truebit-implementation/node_modules/type-is/package.json b/truebit-implementation/node_modules/type-is/package.json deleted file mode 100644 index 6e2a5125..00000000 --- a/truebit-implementation/node_modules/type-is/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_from": "type-is@~1.6.16", - "_id": "type-is@1.6.16", - "_inBundle": false, - "_integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "_location": "/type-is", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "type-is@~1.6.16", - "name": "type-is", - "escapedName": "type-is", - "rawSpec": "~1.6.16", - "saveSpec": null, - "fetchSpec": "~1.6.16" - }, - "_requiredBy": [ - "/body-parser", - "/express" - ], - "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "_shasum": "f89ce341541c672b25ee7ae3c73dee3b2be50194", - "_spec": "type-is@~1.6.16", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/body-parser", - "bugs": { - "url": "https://github.com/jshttp/type-is/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - { - "name": "Jonathan Ong", - "email": "me@jongleberry.com", - "url": "http://jongleberry.com" - } - ], - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - }, - "deprecated": false, - "description": "Infer the content-type of a request.", - "devDependencies": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.8.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "5.2.1", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/type-is#readme", - "keywords": [ - "content", - "type", - "checking" - ], - "license": "MIT", - "name": "type-is", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/type-is.git" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.6.16" -} diff --git a/truebit-implementation/node_modules/typedarray-to-buffer/.airtap.yml b/truebit-implementation/node_modules/typedarray-to-buffer/.airtap.yml deleted file mode 100644 index 34177802..00000000 --- a/truebit-implementation/node_modules/typedarray-to-buffer/.airtap.yml +++ /dev/null @@ -1,15 +0,0 @@ -sauce_connect: true -loopback: airtap.local -browsers: - - name: chrome - version: latest - - name: firefox - version: latest - - name: safari - version: latest - - name: microsoftedge - version: latest - - name: ie - version: latest - - name: iphone - version: latest diff --git a/truebit-implementation/node_modules/typedarray-to-buffer/.travis.yml b/truebit-implementation/node_modules/typedarray-to-buffer/.travis.yml deleted file mode 100644 index f25afbd2..00000000 --- a/truebit-implementation/node_modules/typedarray-to-buffer/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -language: node_js -node_js: - - lts/* -addons: - sauce_connect: true - hosts: - - airtap.local -env: - global: - - secure: i51rE9rZGHbcZWlL58j3H1qtL23OIV2r0X4TcQKNI3pw2mubdHFJmfPNNO19ItfReu8wwQMxOehKamwaNvqMiKWyHfn/QcThFQysqzgGZ6AgnUbYx9od6XFNDeWd1sVBf7QBAL07y7KWlYGWCwFwWjabSVySzQhEBdisPcskfkI= - - secure: BKq6/5z9LK3KDkTjs7BGeBZ1KsWgz+MsAXZ4P64NSeVGFaBdXU45+ww1mwxXFt5l22/mhyOQZfebQl+kGVqRSZ+DEgQeCymkNZ6CD8c6w6cLuOJXiXwuu/cDM2DD0tfGeu2YZC7yEikP7BqEFwH3D324rRzSGLF2RSAAwkOI7bE= diff --git a/truebit-implementation/node_modules/typedarray-to-buffer/LICENSE b/truebit-implementation/node_modules/typedarray-to-buffer/LICENSE deleted file mode 100644 index 0c068cee..00000000 --- a/truebit-implementation/node_modules/typedarray-to-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/typedarray-to-buffer/README.md b/truebit-implementation/node_modules/typedarray-to-buffer/README.md deleted file mode 100644 index 35761fb5..00000000 --- a/truebit-implementation/node_modules/typedarray-to-buffer/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# typedarray-to-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/typedarray-to-buffer/master.svg -[travis-url]: https://travis-ci.org/feross/typedarray-to-buffer -[npm-image]: https://img.shields.io/npm/v/typedarray-to-buffer.svg -[npm-url]: https://npmjs.org/package/typedarray-to-buffer -[downloads-image]: https://img.shields.io/npm/dm/typedarray-to-buffer.svg -[downloads-url]: https://npmjs.org/package/typedarray-to-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -#### Convert a typed array to a [Buffer](https://github.com/feross/buffer) without a copy. - -[![saucelabs][saucelabs-image]][saucelabs-url] - -[saucelabs-image]: https://saucelabs.com/browser-matrix/typedarray-to-buffer.svg -[saucelabs-url]: https://saucelabs.com/u/typedarray-to-buffer - -Say you're using the ['buffer'](https://github.com/feross/buffer) module on npm, or -[browserify](http://browserify.org/) and you're working with lots of binary data. - -Unfortunately, sometimes the browser or someone else's API gives you a typed array like -`Uint8Array` to work with and you need to convert it to a `Buffer`. What do you do? - -Of course: `Buffer.from(uint8array)` - -But, alas, every time you do `Buffer.from(uint8array)` **the entire array gets copied**. -The `Buffer` constructor does a copy; this is -defined by the [node docs](http://nodejs.org/api/buffer.html) and the 'buffer' module -matches the node API exactly. - -So, how can we avoid this expensive copy in -[performance critical applications](https://github.com/feross/buffer/issues/22)? - -***Simply use this module, of course!*** - -If you have an `ArrayBuffer`, you don't need this module, because -`Buffer.from(arrayBuffer)` -[is already efficient](https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length). - -## install - -```bash -npm install typedarray-to-buffer -``` - -## usage - -To convert a typed array to a `Buffer` **without a copy**, do this: - -```js -var toBuffer = require('typedarray-to-buffer') - -var arr = new Uint8Array([1, 2, 3]) -arr = toBuffer(arr) - -// arr is a buffer now! - -arr.toString() // '\u0001\u0002\u0003' -arr.readUInt16BE(0) // 258 -``` - -## how it works - -If the browser supports typed arrays, then `toBuffer` will **augment the typed array** you -pass in with the `Buffer` methods and return it. See [how does Buffer -work?](https://github.com/feross/buffer#how-does-it-work) for more about how augmentation -works. - -This module uses the typed array's underlying `ArrayBuffer` to back the new `Buffer`. This -respects the "view" on the `ArrayBuffer`, i.e. `byteOffset` and `byteLength`. In other -words, if you do `toBuffer(new Uint32Array([1, 2, 3]))`, then the new `Buffer` will -contain `[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]`, **not** `[1, 2, 3]`. And it still doesn't -require a copy. - -If the browser doesn't support typed arrays, then `toBuffer` will create a new `Buffer` -object, copy the data into it, and return it. There's no simple performance optimization -we can do for old browsers. Oh well. - -If this module is used in node, then it will just call `Buffer.from`. This is just for -the convenience of modules that work in both node and the browser. - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org). diff --git a/truebit-implementation/node_modules/typedarray-to-buffer/index.js b/truebit-implementation/node_modules/typedarray-to-buffer/index.js deleted file mode 100644 index 5fa394dd..00000000 --- a/truebit-implementation/node_modules/typedarray-to-buffer/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Convert a typed array to a Buffer without a copy - * - * Author: Feross Aboukhadijeh - * License: MIT - * - * `npm install typedarray-to-buffer` - */ - -var isTypedArray = require('is-typedarray').strict - -module.exports = function typedarrayToBuffer (arr) { - if (isTypedArray(arr)) { - // To avoid a copy, use the typed array's underlying ArrayBuffer to back new Buffer - var buf = Buffer.from(arr.buffer) - if (arr.byteLength !== arr.buffer.byteLength) { - // Respect the "view", i.e. byteOffset and byteLength, without doing a copy - buf = buf.slice(arr.byteOffset, arr.byteOffset + arr.byteLength) - } - return buf - } else { - // Pass through all other types to `Buffer.from` - return Buffer.from(arr) - } -} diff --git a/truebit-implementation/node_modules/typedarray-to-buffer/package.json b/truebit-implementation/node_modules/typedarray-to-buffer/package.json deleted file mode 100644 index 59f158f2..00000000 --- a/truebit-implementation/node_modules/typedarray-to-buffer/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_from": "typedarray-to-buffer@^3.1.2", - "_id": "typedarray-to-buffer@3.1.5", - "_inBundle": false, - "_integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "_location": "/typedarray-to-buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "typedarray-to-buffer@^3.1.2", - "name": "typedarray-to-buffer", - "escapedName": "typedarray-to-buffer", - "rawSpec": "^3.1.2", - "saveSpec": null, - "fetchSpec": "^3.1.2" - }, - "_requiredBy": [ - "/websocket" - ], - "_resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "_shasum": "a97ee7a9ff42691b9f783ff1bc5112fe3fca9080", - "_spec": "typedarray-to-buffer@^3.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/websocket", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "http://feross.org/" - }, - "bugs": { - "url": "https://github.com/feross/typedarray-to-buffer/issues" - }, - "bundleDependencies": false, - "dependencies": { - "is-typedarray": "^1.0.0" - }, - "deprecated": false, - "description": "Convert a typed array to a Buffer without a copy", - "devDependencies": { - "airtap": "0.0.4", - "standard": "*", - "tape": "^4.0.0" - }, - "homepage": "http://feross.org", - "keywords": [ - "buffer", - "typed array", - "convert", - "no copy", - "uint8array", - "uint16array", - "uint32array", - "int16array", - "int32array", - "float32array", - "float64array", - "browser", - "arraybuffer", - "dataview" - ], - "license": "MIT", - "main": "index.js", - "name": "typedarray-to-buffer", - "repository": { - "type": "git", - "url": "git://github.com/feross/typedarray-to-buffer.git" - }, - "scripts": { - "test": "standard && npm run test-node && npm run test-browser", - "test-browser": "airtap -- test/*.js", - "test-browser-local": "airtap --local -- test/*.js", - "test-node": "tape test/*.js" - }, - "version": "3.1.5" -} diff --git a/truebit-implementation/node_modules/typedarray-to-buffer/test/basic.js b/truebit-implementation/node_modules/typedarray-to-buffer/test/basic.js deleted file mode 100644 index 35210968..00000000 --- a/truebit-implementation/node_modules/typedarray-to-buffer/test/basic.js +++ /dev/null @@ -1,50 +0,0 @@ -var test = require('tape') -var toBuffer = require('../') - -test('convert to buffer from Uint8Array', function (t) { - if (typeof Uint8Array !== 'undefined') { - var arr = new Uint8Array([1, 2, 3]) - arr = toBuffer(arr) - - t.deepEqual(arr, Buffer.from([1, 2, 3]), 'contents equal') - t.ok(Buffer.isBuffer(arr), 'is buffer') - t.equal(arr.readUInt8(0), 1) - t.equal(arr.readUInt8(1), 2) - t.equal(arr.readUInt8(2), 3) - } else { - t.pass('browser lacks Uint8Array support, skip test') - } - t.end() -}) - -test('convert to buffer from another arrayview type (Uint32Array)', function (t) { - if (typeof Uint32Array !== 'undefined' && Buffer.TYPED_ARRAY_SUPPORT !== false) { - var arr = new Uint32Array([1, 2, 3]) - arr = toBuffer(arr) - - t.deepEqual(arr, Buffer.from([1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0]), 'contents equal') - t.ok(Buffer.isBuffer(arr), 'is buffer') - t.equal(arr.readUInt32LE(0), 1) - t.equal(arr.readUInt32LE(4), 2) - t.equal(arr.readUInt32LE(8), 3) - t.equal(arr instanceof Uint8Array, true) - } else { - t.pass('browser lacks Uint32Array support, skip test') - } - t.end() -}) - -test('convert to buffer from ArrayBuffer', function (t) { - if (typeof Uint32Array !== 'undefined' && Buffer.TYPED_ARRAY_SUPPORT !== false) { - var arr = new Uint32Array([1, 2, 3]).subarray(1, 2) - arr = toBuffer(arr) - - t.deepEqual(arr, Buffer.from([2, 0, 0, 0]), 'contents equal') - t.ok(Buffer.isBuffer(arr), 'is buffer') - t.equal(arr.readUInt32LE(0), 2) - t.equal(arr instanceof Uint8Array, true) - } else { - t.pass('browser lacks ArrayBuffer support, skip test') - } - t.end() -}) diff --git a/truebit-implementation/node_modules/ultron/LICENSE b/truebit-implementation/node_modules/ultron/LICENSE deleted file mode 100644 index 6dc9316a..00000000 --- a/truebit-implementation/node_modules/ultron/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/ultron/README.md b/truebit-implementation/node_modules/ultron/README.md deleted file mode 100644 index c9d8b07a..00000000 --- a/truebit-implementation/node_modules/ultron/README.md +++ /dev/null @@ -1,113 +0,0 @@ -# Ultron - -[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](http://img.shields.io/npm/v/ultron.svg?style=flat-square)](http://browsenpm.org/package/ultron)[![Build Status](http://img.shields.io/travis/unshiftio/ultron/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/ultron)[![Dependencies](https://img.shields.io/david/unshiftio/ultron.svg?style=flat-square)](https://david-dm.org/unshiftio/ultron)[![Coverage Status](http://img.shields.io/coveralls/unshiftio/ultron/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/ultron?branch=master)[![IRC channel](http://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](http://webchat.freenode.net/?channels=unshift) - -Ultron is a high-intelligence robot. It gathers intelligence so it can start -improving upon his rudimentary design. It will learn your event emitting -patterns and find ways to exterminate them. Allowing you to remove only the -event emitters that **you** assigned and not the ones that your users or -developers assigned. This can prevent race conditions, memory leaks and even file -descriptor leaks from ever happening as you won't remove clean up processes. - -## Installation - -The module is designed to be used in browsers using browserify and in Node.js. -You can install the module through the public npm registry by running the -following command in CLI: - -``` -npm install --save ultron -``` - -## Usage - -In all examples we assume that you've required the library as following: - -```js -'use strict'; - -var Ultron = require('ultron'); -``` - -Now that we've required the library we can construct our first `Ultron` instance. -The constructor requires one argument which should be the `EventEmitter` -instance that we need to operate upon. This can be the `EventEmitter` module -that ships with Node.js or `EventEmitter3` or anything else as long as it -follow the same API and internal structure as these 2. So with that in mind we -can create the instance: - -```js -// -// For the sake of this example we're going to construct an empty EventEmitter -// -var EventEmitter = require('events').EventEmitter; // or require('eventmitter3'); -var events = new EventEmitter(); - -var ultron = new Ultron(events); -``` - -You can now use the following API's from the Ultron instance: - -### Ultron.on - -Register a new event listener for the given event. It follows the exact same API -as `EventEmitter.on` but it will return itself instead of returning the -EventEmitter instance. If you are using EventEmitter3 it also supports the -context param: - -```js -ultron.on('event-name', handler, { custom: 'function context' }); -``` - -Just like you would expect, it can also be chained together. - -```js -ultron -.on('event-name', handler) -.on('another event', handler); -``` - -### Ultron.once - -Exactly the same as the [Ultron.on](#ultronon) but it only allows the execution -once. - -Just like you would expect, it can also be chained together. - -```js -ultron -.once('event-name', handler, { custom: 'this value' }) -.once('another event', handler); -``` - -### Ultron.remove - -This is where all the magic happens and the safe removal starts. This function -accepts different argument styles: - -- No arguments, assume that all events need to be removed so it will work as - `removeAllListeners()` API. -- 1 argument, when it's a string it will be split on ` ` and `,` to create a - list of events that need to be cleared. -- Multiple arguments, we assume that they are all names of events that need to - be cleared. - -```js -ultron.remove('foo, bar baz'); // Removes foo, bar and baz. -ultron.remove('foo', 'bar', 'baz'); // Removes foo, bar and baz. -ultron.remove(); // Removes everything. -``` - -If you just want to remove a single event listener using a function reference -you can still use the EventEmitter's `removeListener(event, fn)` API: - -```js -function foo() {} - -ultron.on('foo', foo); -events.removeListener('foo', foo); -``` - -## License - -MIT diff --git a/truebit-implementation/node_modules/ultron/index.js b/truebit-implementation/node_modules/ultron/index.js deleted file mode 100644 index f78071ec..00000000 --- a/truebit-implementation/node_modules/ultron/index.js +++ /dev/null @@ -1,136 +0,0 @@ -'use strict'; - -var has = Object.prototype.hasOwnProperty; - -/** - * An auto incrementing id which we can use to create "unique" Ultron instances - * so we can track the event emitters that are added through the Ultron - * interface. - * - * @type {Number} - * @private - */ -var id = 0; - -/** - * Ultron is high-intelligence robot. It gathers intelligence so it can start improving - * upon his rudimentary design. It will learn from your EventEmitting patterns - * and exterminate them. - * - * @constructor - * @param {EventEmitter} ee EventEmitter instance we need to wrap. - * @api public - */ -function Ultron(ee) { - if (!(this instanceof Ultron)) return new Ultron(ee); - - this.id = id++; - this.ee = ee; -} - -/** - * Register a new EventListener for the given event. - * - * @param {String} event Name of the event. - * @param {Functon} fn Callback function. - * @param {Mixed} context The context of the function. - * @returns {Ultron} - * @api public - */ -Ultron.prototype.on = function on(event, fn, context) { - fn.__ultron = this.id; - this.ee.on(event, fn, context); - - return this; -}; -/** - * Add an EventListener that's only called once. - * - * @param {String} event Name of the event. - * @param {Function} fn Callback function. - * @param {Mixed} context The context of the function. - * @returns {Ultron} - * @api public - */ -Ultron.prototype.once = function once(event, fn, context) { - fn.__ultron = this.id; - this.ee.once(event, fn, context); - - return this; -}; - -/** - * Remove the listeners we assigned for the given event. - * - * @returns {Ultron} - * @api public - */ -Ultron.prototype.remove = function remove() { - var args = arguments - , ee = this.ee - , event; - - // - // When no event names are provided we assume that we need to clear all the - // events that were assigned through us. - // - if (args.length === 1 && 'string' === typeof args[0]) { - args = args[0].split(/[, ]+/); - } else if (!args.length) { - if (ee.eventNames) { - args = ee.eventNames(); - } else if (ee._events) { - args = []; - - for (event in ee._events) { - if (has.call(ee._events, event)) args.push(event); - } - - if (Object.getOwnPropertySymbols) { - args = args.concat(Object.getOwnPropertySymbols(ee._events)); - } - } - } - - for (var i = 0; i < args.length; i++) { - var listeners = ee.listeners(args[i]); - - for (var j = 0; j < listeners.length; j++) { - event = listeners[j]; - - // - // Once listeners have a `listener` property that stores the real listener - // in the EventEmitter that ships with Node.js. - // - if (event.listener) { - if (event.listener.__ultron !== this.id) continue; - } else if (event.__ultron !== this.id) { - continue; - } - - ee.removeListener(args[i], event); - } - } - - return this; -}; - -/** - * Destroy the Ultron instance, remove all listeners and release all references. - * - * @returns {Boolean} - * @api public - */ -Ultron.prototype.destroy = function destroy() { - if (!this.ee) return false; - - this.remove(); - this.ee = null; - - return true; -}; - -// -// Expose the module. -// -module.exports = Ultron; diff --git a/truebit-implementation/node_modules/ultron/package.json b/truebit-implementation/node_modules/ultron/package.json deleted file mode 100644 index 4869a355..00000000 --- a/truebit-implementation/node_modules/ultron/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "ultron@~1.1.0", - "_id": "ultron@1.1.1", - "_inBundle": false, - "_integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "_location": "/ultron", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ultron@~1.1.0", - "name": "ultron", - "escapedName": "ultron", - "rawSpec": "~1.1.0", - "saveSpec": null, - "fetchSpec": "~1.1.0" - }, - "_requiredBy": [ - "/ws" - ], - "_resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "_shasum": "9fe1536a10a664a65266a1e3ccf85fd36302bc9c", - "_spec": "ultron@~1.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ws", - "author": { - "name": "Arnout Kazemier" - }, - "bugs": { - "url": "https://github.com/unshiftio/ultron/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Ultron is high-intelligence robot. It gathers intel so it can start improving upon his rudimentary design", - "devDependencies": { - "assume": "~1.5.0", - "eventemitter3": "2.0.x", - "istanbul": "0.4.x", - "mocha": "~4.0.0", - "pre-commit": "~1.2.0" - }, - "homepage": "https://github.com/unshiftio/ultron", - "keywords": [ - "Ultron", - "robot", - "gather", - "intelligence", - "event", - "events", - "eventemitter", - "emitter", - "cleanup" - ], - "license": "MIT", - "main": "index.js", - "name": "ultron", - "repository": { - "type": "git", - "url": "git+https://github.com/unshiftio/ultron.git" - }, - "scripts": { - "100%": "istanbul check-coverage --statements 100 --functions 100 --lines 100 --branches 100", - "coverage": "istanbul cover _mocha -- test.js", - "test": "mocha test.js", - "test-travis": "istanbul cover _mocha --report lcovonly -- test.js", - "watch": "mocha --watch test.js" - }, - "version": "1.1.1" -} diff --git a/truebit-implementation/node_modules/unbzip2-stream/LICENSE b/truebit-implementation/node_modules/unbzip2-stream/LICENSE deleted file mode 100644 index 0983ec14..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2017 by Jan Boelsche (jan@lagomorph.de) - -based on bzip2.js - a small bzip2 decompression implementation -Copyright 2011 by antimatter15 (antimatter15@gmail.com) - -Based on micro-bunzip by Rob Landley (rob@landley.net). - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/unbzip2-stream/README.md b/truebit-implementation/node_modules/unbzip2-stream/README.md deleted file mode 100644 index e8441c63..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/README.md +++ /dev/null @@ -1,59 +0,0 @@ -[![npm version](https://badge.fury.io/js/unbzip2-stream.svg)](http://badge.fury.io/js/unbzip2-stream) - -unbzip2-stream -=== -streaming bzip2 decompressor in pure JS for Node and browserify. - -Buffers ---- -When browserified, the stream emits instances of [feross/buffer](https://github.com/feross/buffer) instead of raw Uint8Arrays to have a consistant API across browsers and Node. - -Usage ---- -``` js -var bz2 = require('unbzip2-stream'); -var fs = require('fs'); - -// decompress test.bz2 and output the result -fs.createReadStream('./test.bz2').pipe(bz2()).pipe(process.stdout); -``` - -Also see [test/browser/download.js](https://github.com/regular/unbzip2-stream/blob/master/test/browser/download.js) for an example of decompressing a file while downloading. - -Or, using a - -``` - -Tests ---- -To run tests in Node: - - npm run test - -To run tests in PhantomJS - - npm run browser-test - -Additional Tests ----------------- -There are two more tests that specifically test decompression of a very large file. Because I don't want to include large binary files in this repository, the files are created by running an npm script. - - npm run prepare-long-test - -You can now - - npm run long-test - -And to run a test in chrome that downloads and decompresses a large binary file - - npm run download-test - -Open the browser's console to see the output. - diff --git a/truebit-implementation/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js b/truebit-implementation/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js deleted file mode 100644 index 49d4fe1f..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.unbzip2Stream=e()}}(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=(25e3+1e5*blockSize||4)){decompressAndQueue(this)}},function end(x){while(!broken&&hasBytes>bitReader.bytesRead){decompressAndQueue(this)}if(!broken){if(streamCRC!==null)stream.emit("error",new Error("input stream ended prematurely"));this.queue(null)}})}}).call(this,require("buffer").Buffer)},{"./lib/bit_iterator":2,"./lib/bzip2":3,buffer:6,through:27}],2:[function(require,module,exports){var BITMASK=[0,1,3,7,15,31,63,127,255];module.exports=function bitIterator(nextBuffer){var bit=0,byte=0;var bytes=nextBuffer();var f=function(n){if(n===null&&bit!=0){bit=0;byte++;return}var result=0;while(n>0){if(byte>=bytes.length){byte=0;bytes=nextBuffer()}var left=8-bit;if(bit===0&&n>0)f.bytesRead++;if(n>=left){result<<=left;result|=BITMASK[left]&bytes[byte++];bit=0;n-=left}else{result<<=n;result|=(bytes[byte]&BITMASK[n]<<8-n-bit)>>8-n-bit;bit+=n;n=0}}return result};f.bytesRead=0;return f}},{}],3:[function(require,module,exports){function Bzip2Error(message){this.name="Bzip2Error";this.message=message;this.stack=(new Error).stack}Bzip2Error.prototype=new Error;var message={Error:function(message){throw new Bzip2Error(message)}};var bzip2={};bzip2.Bzip2Error=Bzip2Error;bzip2.crcTable=[0,79764919,159529838,222504665,319059676,398814059,445009330,507990021,638119352,583659535,797628118,726387553,890018660,835552979,1015980042,944750013,1276238704,1221641927,1167319070,1095957929,1595256236,1540665371,1452775106,1381403509,1780037320,1859660671,1671105958,1733955601,2031960084,2111593891,1889500026,1952343757,2552477408,2632100695,2443283854,2506133561,2334638140,2414271883,2191915858,2254759653,3190512472,3135915759,3081330742,3009969537,2905550212,2850959411,2762807018,2691435357,3560074640,3505614887,3719321342,3648080713,3342211916,3287746299,3467911202,3396681109,4063920168,4143685023,4223187782,4286162673,3779000052,3858754371,3904687514,3967668269,881225847,809987520,1023691545,969234094,662832811,591600412,771767749,717299826,311336399,374308984,453813921,533576470,25881363,88864420,134795389,214552010,2023205639,2086057648,1897238633,1976864222,1804852699,1867694188,1645340341,1724971778,1587496639,1516133128,1461550545,1406951526,1302016099,1230646740,1142491917,1087903418,2896545431,2825181984,2770861561,2716262478,3215044683,3143675388,3055782693,3001194130,2326604591,2389456536,2200899649,2280525302,2578013683,2640855108,2418763421,2498394922,3769900519,3832873040,3912640137,3992402750,4088425275,4151408268,4197601365,4277358050,3334271071,3263032808,3476998961,3422541446,3585640067,3514407732,3694837229,3640369242,1762451694,1842216281,1619975040,1682949687,2047383090,2127137669,1938468188,2001449195,1325665622,1271206113,1183200824,1111960463,1543535498,1489069629,1434599652,1363369299,622672798,568075817,748617968,677256519,907627842,853037301,1067152940,995781531,51762726,131386257,177728840,240578815,269590778,349224269,429104020,491947555,4046411278,4126034873,4172115296,4234965207,3794477266,3874110821,3953728444,4016571915,3609705398,3555108353,3735388376,3664026991,3290680682,3236090077,3449943556,3378572211,3174993278,3120533705,3032266256,2961025959,2923101090,2868635157,2813903052,2742672763,2604032198,2683796849,2461293480,2524268063,2284983834,2364738477,2175806836,2238787779,1569362073,1498123566,1409854455,1355396672,1317987909,1246755826,1192025387,1137557660,2072149281,2135122070,1912620623,1992383480,1753615357,1816598090,1627664531,1707420964,295390185,358241886,404320391,483945776,43990325,106832002,186451547,266083308,932423249,861060070,1041341759,986742920,613929101,542559546,756411363,701822548,3316196985,3244833742,3425377559,3370778784,3601682597,3530312978,3744426955,3689838204,3819031489,3881883254,3928223919,4007849240,4037393693,4100235434,4180117107,4259748804,2310601993,2373574846,2151335527,2231098320,2596047829,2659030626,2470359227,2550115596,2947551409,2876312838,2788305887,2733848168,3165939309,3094707162,3040238851,2985771188];bzip2.array=function(bytes){var bit=0,byte=0;var BITMASK=[0,1,3,7,15,31,63,127,255];return function(n){var result=0;while(n>0){var left=8-bit;if(n>=left){result<<=left;result|=BITMASK[left]&bytes[byte++];bit=0;n-=left}else{result<<=n;result|=(bytes[byte]&BITMASK[n]<<8-n-bit)>>8-n-bit;bit+=n;n=0}}return result}};bzip2.simple=function(srcbuffer,stream){var bits=bzip2.array(srcbuffer);var size=bzip2.header(bits);var ret=false;var bufsize=1e5*size;var buf=new Int32Array(bufsize);do{ret=bzip2.decompress(bits,stream,buf,bufsize)}while(!ret)};bzip2.header=function(bits){this.byteCount=new Int32Array(256);this.symToByte=new Uint8Array(256);this.mtfSymbol=new Int32Array(256);this.selectors=new Uint8Array(32768);if(bits(8*3)!=4348520)message.Error("No magic number found");var i=bits(8)-48;if(i<1||i>9)message.Error("Not a BZIP archive");return i};bzip2.decompress=function(bits,stream,buf,bufsize,streamCRC){var MAX_HUFCODE_BITS=20;var MAX_SYMBOLS=258;var SYMBOL_RUNA=0;var SYMBOL_RUNB=1;var GROUP_SIZE=50;var crc=0^-1;for(var h="",i=0;i<6;i++)h+=bits(8).toString(16);if(h=="177245385090"){var finalCRC=bits(32)|0;if(finalCRC!==streamCRC)message.Error("Error in bzip2: crc32 do not match");bits(null);return null}if(h!="314159265359")message.Error("eek not valid bzip data");var crcblock=bits(32)|0;if(bits(1))message.Error("unsupported obsolete version");var origPtr=bits(24);if(origPtr>bufsize)message.Error("Initial position larger than buffer size");var t=bits(16);var symTotal=0;for(i=0;i<16;i++){if(t&1<<15-i){var k=bits(16);for(j=0;j<16;j++){if(k&1<<15-j){this.symToByte[symTotal++]=16*i+j}}}}var groupCount=bits(3);if(groupCount<2||groupCount>6)message.Error("another error");var nSelectors=bits(15);if(nSelectors==0)message.Error("meh");for(var i=0;i=groupCount)message.Error("whoops another error");var uc=this.mtfSymbol[j];for(var k=j-1;k>=0;k--){this.mtfSymbol[k+1]=this.mtfSymbol[k]}this.mtfSymbol[0]=uc;this.selectors[i]=uc}var symCount=symTotal+2;var groups=[];var length=new Uint8Array(MAX_SYMBOLS),temp=new Uint16Array(MAX_HUFCODE_BITS+1);var hufGroup;for(var j=0;jMAX_HUFCODE_BITS)message.Error("I gave up a while ago on writing error messages");if(!bits(1))break;if(!bits(1))t++;else t--}length[i]=t}var minLen,maxLen;minLen=maxLen=length[0];for(var i=1;imaxLen)maxLen=length[i];else if(length[i]=nSelectors)message.Error("meow i'm a kitty, that's an error");hufGroup=groups[this.selectors[selector++]];base=hufGroup.base.subarray(1);limit=hufGroup.limit.subarray(1)}i=hufGroup.minLen;j=bits(i);while(true){if(i>hufGroup.maxLen)message.Error("rawr i'm a dinosaur");if(j<=limit[i])break;i++;j=j<<1|bits(1)}j-=base[i];if(j<0||j>=MAX_SYMBOLS)message.Error("moo i'm a cow");var nextSym=hufGroup.permute[j];if(nextSym==SYMBOL_RUNA||nextSym==SYMBOL_RUNB){if(!runPos){runPos=1;t=0}if(nextSym==SYMBOL_RUNA)t+=runPos;else t+=2*runPos;runPos<<=1;continue}if(runPos){runPos=0;if(count+t>bufsize)message.Error("Boom.");uc=this.symToByte[this.mtfSymbol[0]];this.byteCount[uc]+=t;while(t--)buf[count++]=uc}if(nextSym>symTotal)break;if(count>=bufsize)message.Error("I can't think of anything. Error");i=nextSym-1;uc=this.mtfSymbol[i];for(var k=i-1;k>=0;k--){this.mtfSymbol[k+1]=this.mtfSymbol[k]}this.mtfSymbol[0]=uc;uc=this.symToByte[uc];this.byteCount[uc]++;buf[count++]=uc}if(origPtr<0||origPtr>=count)message.Error("I'm a monkey and I'm throwing something at someone, namely you");var j=0;for(var i=0;i<256;i++){k=j+this.byteCount[i];this.byteCount[i]=j;j=k}for(var i=0;i>=8;run=-1}count=count;var copies,previous,outbyte;while(count){count--;previous=current;pos=buf[pos];current=pos&255;pos>>=8;if(run++==3){copies=current;outbyte=previous;current=-1}else{copies=1;outbyte=current}while(copies--){crc=(crc<<8^this.crcTable[(crc>>24^outbyte)&255])&4294967295;stream(outbyte)}if(current!=previous)run=0}crc=(crc^-1)>>>0;if((crc|0)!=(crcblock|0))message.Error("Error in bzip2: crc32 do not match");if(streamCRC===null)streamCRC=0;streamCRC=(crc^(streamCRC<<1|streamCRC>>>31))&4294967295;return streamCRC};module.exports=bzip2},{}],4:[function(require,module,exports){var lookup="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";(function(exports){"use strict";var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var PLUS="+".charCodeAt(0);var SLASH="/".charCodeAt(0);var NUMBER="0".charCodeAt(0);var LOWER="a".charCodeAt(0);var UPPER="A".charCodeAt(0);var PLUS_URL_SAFE="-".charCodeAt(0);var SLASH_URL_SAFE="_".charCodeAt(0);function decode(elt){var code=elt.charCodeAt(0);if(code===PLUS||code===PLUS_URL_SAFE)return 62;if(code===SLASH||code===SLASH_URL_SAFE)return 63;if(code0){throw new Error("Invalid string. Length must be a multiple of 4")}var len=b64.length;placeHolders="="===b64.charAt(len-2)?2:"="===b64.charAt(len-1)?1:0;arr=new Arr(b64.length*3/4-placeHolders);l=placeHolders>0?b64.length-4:b64.length;var L=0;function push(v){arr[L++]=v}for(i=0,j=0;i>16);push((tmp&65280)>>8);push(tmp&255)}if(placeHolders===2){tmp=decode(b64.charAt(i))<<2|decode(b64.charAt(i+1))>>4;push(tmp&255)}else if(placeHolders===1){tmp=decode(b64.charAt(i))<<10|decode(b64.charAt(i+1))<<4|decode(b64.charAt(i+2))>>2;push(tmp>>8&255);push(tmp&255)}return arr}function uint8ToBase64(uint8){var i,extraBytes=uint8.length%3,output="",temp,length;function encode(num){return lookup.charAt(num)}function tripletToBase64(num){return encode(num>>18&63)+encode(num>>12&63)+encode(num>>6&63)+encode(num&63)}for(i=0,length=uint8.length-extraBytes;i>2);output+=encode(temp<<4&63);output+="==";break;case 2:temp=(uint8[uint8.length-2]<<8)+uint8[uint8.length-1];output+=encode(temp>>10);output+=encode(temp>>4&63);output+=encode(temp<<2&63);output+="=";break}return output}exports.toByteArray=b64ToByteArray;exports.fromByteArray=uint8ToBase64})(typeof exports==="undefined"?this.base64js={}:exports)},{}],5:[function(require,module,exports){},{}],6:[function(require,module,exports){(function(global){"use strict";var base64=require("base64-js");var ieee754=require("ieee754");var isArray=require("isarray");exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;Buffer.poolSize=8192;var rootParent={};Buffer.TYPED_ARRAY_SUPPORT=global.TYPED_ARRAY_SUPPORT!==undefined?global.TYPED_ARRAY_SUPPORT:typedArraySupport();function typedArraySupport(){function Bar(){}try{var arr=new Uint8Array(1);arr.foo=function(){return 42};arr.constructor=Bar;return arr.foo()===42&&arr.constructor===Bar&&typeof arr.subarray==="function"&&arr.subarray(1,1).byteLength===0}catch(e){return false}}function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function Buffer(arg){if(!(this instanceof Buffer)){if(arguments.length>1)return new Buffer(arg,arguments[1]);return new Buffer(arg)}if(!Buffer.TYPED_ARRAY_SUPPORT){this.length=0;this.parent=undefined}if(typeof arg==="number"){return fromNumber(this,arg)}if(typeof arg==="string"){return fromString(this,arg,arguments.length>1?arguments[1]:"utf8")}return fromObject(this,arg)}function fromNumber(that,length){that=allocate(that,length<0?0:checked(length)|0);if(!Buffer.TYPED_ARRAY_SUPPORT){for(var i=0;i>>1;if(fromPool)that.parent=rootParent;return that}function checked(length){if(length>=kMaxLength()){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+kMaxLength().toString(16)+" bytes")}return length|0}function SlowBuffer(subject,encoding){if(!(this instanceof SlowBuffer))return new SlowBuffer(subject,encoding);var buf=new Buffer(subject,encoding);delete buf.parent;return buf}Buffer.isBuffer=function isBuffer(b){return!!(b!=null&&b._isBuffer)};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;var i=0;var len=Math.min(x,y);while(i>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;start=start|0;end=end===undefined||end===Infinity?this.length:end|0;if(!encoding)encoding="utf8";if(start<0)start=0;if(end>this.length)end=this.length;if(end<=start)return"";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"binary":return binarySlice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype.toString=function toString(){var length=this.length|0;if(length===0)return"";if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments)};Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return""};Buffer.prototype.compare=function compare(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return 0;return Buffer.compare(this,b)};Buffer.prototype.indexOf=function indexOf(val,byteOffset){if(byteOffset>2147483647)byteOffset=2147483647;else if(byteOffset<-2147483648)byteOffset=-2147483648;byteOffset>>=0;if(this.length===0)return-1;if(byteOffset>=this.length)return-1;if(byteOffset<0)byteOffset=Math.max(this.length+byteOffset,0);if(typeof val==="string"){if(val.length===0)return-1;return String.prototype.indexOf.call(this,val,byteOffset)}if(Buffer.isBuffer(val)){return arrayIndexOf(this,val,byteOffset)}if(typeof val==="number"){if(Buffer.TYPED_ARRAY_SUPPORT&&Uint8Array.prototype.indexOf==="function"){return Uint8Array.prototype.indexOf.call(this,val,byteOffset)}return arrayIndexOf(this,[val],byteOffset)}function arrayIndexOf(arr,val,byteOffset){var foundIndex=-1;for(var i=0;byteOffset+iremaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new Error("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;iremaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"binary":return binaryWrite(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}var res="";var i=0;while(ilen)end=len;var out="";for(var i=start;ilen){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(endlength)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError("buffer must be a Buffer instance");if(value>max||valuebuf.length)throw new RangeError("index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength),0);var mul=1;var i=0;this[offset]=value&255;while(++i=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,255,0);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);this[offset]=value&255;return offset+1};function objectWriteUInt16(buf,value,offset,littleEndian){if(value<0)value=65535+value+1;for(var i=0,j=Math.min(buf.length-offset,2);i>>(littleEndian?i:1-i)*8}}Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};function objectWriteUInt32(buf,value,offset,littleEndian){if(value<0)value=4294967295+value+1;for(var i=0,j=Math.min(buf.length-offset,4);i>>(littleEndian?i:3-i)*8&255}}Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=value<0?1:0;this[offset]=value&255;while(++i>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=value<0?1:0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(value>max||valuebuf.length)throw new RangeError("index out of range");if(offset<0)throw new RangeError("index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,4,34028234663852886e22,-34028234663852886e22)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,8,17976931348623157e292,-17976931348623157e292)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart=0;i--){target[i+targetStart]=this[i+start]}}else if(len<1e3||!Buffer.TYPED_ARRAY_SUPPORT){for(i=0;i=this.length)throw new RangeError("start out of bounds");if(end<0||end>this.length)throw new RangeError("end out of bounds");var i;if(typeof value==="number"){for(i=start;i55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"base64-js":4,ieee754:9,isarray:12}],7:[function(require,module,exports){(function(Buffer){function isArray(arg){if(Array.isArray){return Array.isArray(arg)}return objectToString(arg)==="[object Array]"}exports.isArray=isArray;function isBoolean(arg){return typeof arg==="boolean"}exports.isBoolean=isBoolean;function isNull(arg){return arg===null}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==="number"}exports.isNumber=isNumber;function isString(arg){return typeof arg==="string"}exports.isString=isString;function isSymbol(arg){return typeof arg==="symbol"}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0}exports.isUndefined=isUndefined;function isRegExp(re){return objectToString(re)==="[object RegExp]"}exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==="object"&&arg!==null}exports.isObject=isObject;function isDate(d){return objectToString(d)==="[object Date]"}exports.isDate=isDate;function isError(e){return objectToString(e)==="[object Error]"||e instanceof Error}exports.isError=isError;function isFunction(arg){return typeof arg==="function"}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==="boolean"||typeof arg==="number"||typeof arg==="string"||typeof arg==="symbol"||typeof arg==="undefined"}exports.isPrimitive=isPrimitive;exports.isBuffer=Buffer.isBuffer;function objectToString(o){return Object.prototype.toString.call(o)}}).call(this,{isBuffer:require("../../is-buffer/index.js")})},{"../../is-buffer/index.js":11}],8:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}throw TypeError('Uncaught, unspecified "error" event.')}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:len=arguments.length;args=new Array(len-1);for(i=1;i0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-- >0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else{while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.listenerCount=function(emitter,type){var ret;if(!emitter._events||!emitter._events[type])ret=0;else if(isFunction(emitter._events[type]))ret=1;else ret=emitter._events[type].length;return ret};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],9:[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],10:[function(require,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],11:[function(require,module,exports){module.exports=function(obj){return obj!=null&&(isBuffer(obj)||isSlowBuffer(obj)||!!obj._isBuffer)};function isBuffer(obj){return!!obj.constructor&&typeof obj.constructor.isBuffer==="function"&&obj.constructor.isBuffer(obj)}function isSlowBuffer(obj){return typeof obj.readFloatLE==="function"&&typeof obj.slice==="function"&&isBuffer(obj.slice(0,0))}},{}],12:[function(require,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=="[object Array]"}},{}],13:[function(require,module,exports){var process=module.exports={};var queue=[];var draining=false;function drainQueue(){if(draining){return}draining=true;var currentQueue;var len=queue.length;while(len){currentQueue=queue;queue=[];var i=-1;while(++i0){if(state.ended&&!addToFront){var e=new Error("stream.push() after EOF");stream.emit("error",e)}else if(state.endEmitted&&addToFront){var e=new Error("stream.unshift() after end event");stream.emit("error",e)}else{if(state.decoder&&!addToFront&&!encoding)chunk=state.decoder.write(chunk);if(!addToFront)state.reading=false;if(state.flowing&&state.length===0&&!state.sync){stream.emit("data",chunk);stream.read(0)}else{state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream)}maybeReadMore(stream,state)}}else if(!addToFront){state.reading=false}return needMoreData(state)}function needMoreData(state){return!state.ended&&(state.needReadable||state.length=MAX_HWM){n=MAX_HWM}else{n--;for(var p=1;p<32;p<<=1)n|=n>>p;n++}return n}function howMuchToRead(n,state){if(state.length===0&&state.ended)return 0;if(state.objectMode)return n===0?0:1;if(isNaN(n)||util.isNull(n)){if(state.flowing&&state.buffer.length)return state.buffer[0].length;else return state.length}if(n<=0)return 0;if(n>state.highWaterMark)state.highWaterMark=roundUpToNextPowerOf2(n);if(n>state.length){if(!state.ended){state.needReadable=true;return 0}else return state.length}return n}Readable.prototype.read=function(n){debug("read",n);var state=this._readableState;var nOrig=n;if(!util.isNumber(n)||n>0)state.emittedReadable=false;if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){debug("read: emitReadable",state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null}var doRead=state.needReadable;debug("need readable",doRead);if(state.length===0||state.length-n0)ret=fromList(n,state);else ret=null;if(util.isNull(ret)){state.needReadable=true;n=0}state.length-=n;if(state.length===0&&!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended&&state.length===0)endReadable(this);if(!util.isNull(ret))this.emit("data",ret);return ret};function chunkInvalid(state,chunk){var er=null;if(!util.isBuffer(chunk)&&!util.isString(chunk)&&!util.isNullOrUndefined(chunk)&&!state.objectMode){er=new TypeError("Invalid non-string/buffer chunk")}return er}function onEofChunk(stream,state){if(state.decoder&&!state.ended){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;emitReadable(stream)}function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(!state.emittedReadable){debug("emitReadable",state.flowing);state.emittedReadable=true;if(state.sync)process.nextTick(function(){emitReadable_(stream)});else emitReadable_(stream)}}function emitReadable_(stream){debug("emit readable");stream.emit("readable");flow(stream)}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;process.nextTick(function(){maybeReadMore_(stream,state)})}}function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length=length){if(stringMode)ret=list.join("");else ret=Buffer.concat(list,length);list.length=0}else{if(n0)throw new Error("endReadable called on non-empty stream");if(!state.endEmitted){state.ended=true;process.nextTick(function(){if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end")}})}}function forEach(xs,f){for(var i=0,l=xs.length;i1){var cbs=[];for(var c=0;c=this.charLength-this.charReceived?this.charLength-this.charReceived:buffer.length;buffer.copy(this.charBuffer,this.charReceived,0,available);this.charReceived+=available;if(this.charReceived=55296&&charCode<=56319){this.charLength+=this.surrogateSize;charStr="";continue}this.charReceived=this.charLength=0;if(buffer.length===0){return charStr}break}this.detectIncompleteChar(buffer);var end=buffer.length;if(this.charLength){buffer.copy(this.charBuffer,0,buffer.length-this.charReceived,end);end-=this.charReceived}charStr+=buffer.toString(this.encoding,0,end);var end=charStr.length-1;var charCode=charStr.charCodeAt(end);if(charCode>=55296&&charCode<=56319){var size=this.surrogateSize;this.charLength+=size;this.charReceived+=size;this.charBuffer.copy(this.charBuffer,size,0,size);buffer.copy(this.charBuffer,0,0,size);return charStr.substring(0,end)}return charStr};StringDecoder.prototype.detectIncompleteChar=function(buffer){var i=buffer.length>=3?3:buffer.length;for(;i>0;i--){var c=buffer[buffer.length-i];if(i==1&&c>>5==6){this.charLength=2;break}if(i<=2&&c>>4==14){this.charLength=3;break}if(i<=3&&c>>3==30){this.charLength=4;break}}this.charReceived=i};StringDecoder.prototype.end=function(buffer){var res="";if(buffer&&buffer.length)res=this.write(buffer);if(this.charReceived){var cr=this.charReceived;var buf=this.charBuffer;var enc=this.encoding;res+=buf.slice(0,cr).toString(enc)}return res};function passThroughWrite(buffer){return buffer.toString(this.encoding)}function utf16DetectIncompleteChar(buffer){this.charReceived=buffer.length%2;this.charLength=this.charReceived?2:0}function base64DetectIncompleteChar(buffer){this.charReceived=buffer.length%3;this.charLength=this.charReceived?3:0}},{buffer:6}],22:[function(require,module,exports){module.exports=require("./lib/_stream_passthrough.js")},{"./lib/_stream_passthrough.js":16}],23:[function(require,module,exports){(function(process){exports=module.exports=require("./lib/_stream_readable.js");exports.Stream=require("stream");exports.Readable=exports;exports.Writable=require("./lib/_stream_writable.js");exports.Duplex=require("./lib/_stream_duplex.js");exports.Transform=require("./lib/_stream_transform.js");exports.PassThrough=require("./lib/_stream_passthrough.js");if(!process.browser&&process.env.READABLE_STREAM==="disable"){module.exports=require("stream")}}).call(this,require("_process"))},{"./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,stream:26}],24:[function(require,module,exports){module.exports=require("./lib/_stream_transform.js")},{"./lib/_stream_transform.js":18}],25:[function(require,module,exports){module.exports=require("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":19}],26:[function(require,module,exports){module.exports=Stream;var EE=require("events").EventEmitter;var inherits=require("inherits");inherits(Stream,EE);Stream.Readable=require("readable-stream/readable.js");Stream.Writable=require("readable-stream/writable.js");Stream.Duplex=require("readable-stream/duplex.js");Stream.Transform=require("readable-stream/transform.js");Stream.PassThrough=require("readable-stream/passthrough.js");Stream.Stream=Stream;function Stream(){EE.call(this)}Stream.prototype.pipe=function(dest,options){var source=this;function ondata(chunk){if(dest.writable){if(false===dest.write(chunk)&&source.pause){source.pause()}}}source.on("data",ondata);function ondrain(){if(source.readable&&source.resume){source.resume()}}dest.on("drain",ondrain);if(!dest._isStdio&&(!options||options.end!==false)){source.on("end",onend);source.on("close",onclose)}var didOnEnd=false;function onend(){if(didOnEnd)return;didOnEnd=true;dest.end()}function onclose(){if(didOnEnd)return;didOnEnd=true;if(typeof dest.destroy==="function")dest.destroy()}function onerror(er){cleanup();if(EE.listenerCount(this,"error")===0){throw er}}source.on("error",onerror);dest.on("error",onerror);function cleanup(){source.removeListener("data",ondata);dest.removeListener("drain",ondrain);source.removeListener("end",onend);source.removeListener("close",onclose);source.removeListener("error",onerror);dest.removeListener("error",onerror);source.removeListener("end",cleanup);source.removeListener("close",cleanup);dest.removeListener("close",cleanup)}source.on("end",cleanup);source.on("close",cleanup);dest.on("close",cleanup);dest.emit("pipe",source);return dest}},{events:8,inherits:10,"readable-stream/duplex.js":14,"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){(function(process){var Stream=require("stream");exports=module.exports=through;through.through=through;function through(write,end,opts){write=write||function(data){this.queue(data)};end=end||function(){this.queue(null)};var ended=false,destroyed=false,buffer=[],_ended=false;var stream=new Stream;stream.readable=stream.writable=true;stream.paused=false;stream.autoDestroy=!(opts&&opts.autoDestroy===false);stream.write=function(data){write.call(this,data);return!stream.paused};function drain(){while(buffer.length&&!stream.paused){var data=buffer.shift();if(null===data)return stream.emit("end");else stream.emit("data",data)}}stream.queue=stream.push=function(data){if(_ended)return stream;if(data===null)_ended=true;buffer.push(data);drain();return stream};stream.on("end",function(){stream.readable=false;if(!stream.writable&&stream.autoDestroy)process.nextTick(function(){stream.destroy()})});function _end(){stream.writable=false;end.call(stream);if(!stream.readable&&stream.autoDestroy)stream.destroy()}stream.end=function(data){if(ended)return;ended=true;if(arguments.length)stream.write(data);_end();return stream};stream.destroy=function(){if(destroyed)return;destroyed=true;ended=true;buffer.length=0;stream.writable=stream.readable=false;stream.emit("close");return stream};stream.pause=function(){if(stream.paused)return;stream.paused=true;return stream};stream.resume=function(){if(stream.paused){stream.paused=false;stream.emit("resume")}drain();if(!stream.paused)stream.emit("drain");return stream};return stream}}).call(this,require("_process"))},{_process:13,stream:26}]},{},[1])(1)}); diff --git a/truebit-implementation/node_modules/unbzip2-stream/index.js b/truebit-implementation/node_modules/unbzip2-stream/index.js deleted file mode 100644 index d2cefaf1..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/index.js +++ /dev/null @@ -1,92 +0,0 @@ -var through = require('through'); -var bz2 = require('./lib/bzip2'); -var bitIterator = require('./lib/bit_iterator'); - -module.exports = unbzip2Stream; - -function unbzip2Stream() { - var bufferQueue = []; - var hasBytes = 0; - var blockSize = 0; - var broken = false; - var done = false; - var bitReader = null; - var streamCRC = null; - - function decompressBlock(push){ - if(!blockSize){ - blockSize = bz2.header(bitReader); - //console.error("got header of", blockSize); - return true; - }else{ - var bufsize = 100000 * blockSize; - var buf = new Int32Array(bufsize); - - var chunk = []; - var f = function(b) { - chunk.push(b); - }; - - streamCRC = bz2.decompress(bitReader, f, buf, bufsize, streamCRC); - if (streamCRC === null) { - // reset for next bzip2 header - blockSize = 0; - return false; - }else{ - //console.error('decompressed', chunk.length,'bytes'); - push(new Buffer(chunk)); - return true; - } - } - } - - var outlength = 0; - function decompressAndQueue(stream) { - if (broken) return; - try { - return decompressBlock(function(d) { - stream.queue(d); - if (d !== null) { - //console.error('write at', outlength.toString(16)); - outlength += d.length; - } else { - //console.error('written EOS'); - } - }); - } catch(e) { - //console.error(e); - stream.emit('error', e); - broken = true; - return false; - } - } - - return through( - function write(data) { - //console.error('received', data.length,'bytes in', typeof data); - bufferQueue.push(data); - hasBytes += data.length; - if (bitReader === null) { - bitReader = bitIterator(function() { - return bufferQueue.shift(); - }); - } - while (!broken && hasBytes - bitReader.bytesRead + 1 >= ((25000 + 100000 * blockSize) || 4)){ - //console.error('decompressing with', hasBytes - bitReader.bytesRead + 1, 'bytes in buffer'); - decompressAndQueue(this); - } - }, - function end(x) { - //console.error(x,'last compressing with', hasBytes, 'bytes in buffer'); - while (!broken && hasBytes > bitReader.bytesRead){ - decompressAndQueue(this); - } - if (!broken) { - if (streamCRC !== null) - stream.emit('error', new Error("input stream ended prematurely")); - this.queue(null); - } - } - ); -} - diff --git a/truebit-implementation/node_modules/unbzip2-stream/lib/bit_iterator.js b/truebit-implementation/node_modules/unbzip2-stream/lib/bit_iterator.js deleted file mode 100644 index 270e2d64..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/lib/bit_iterator.js +++ /dev/null @@ -1,39 +0,0 @@ -var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF]; - -// returns a function that reads bits. -// takes a buffer iterator as input -module.exports = function bitIterator(nextBuffer) { - var bit = 0, byte = 0; - var bytes = nextBuffer(); - var f = function(n) { - if (n === null && bit != 0) { // align to byte boundary - bit = 0 - byte++; - return; - } - var result = 0; - while(n > 0) { - if (byte >= bytes.length) { - byte = 0; - bytes = nextBuffer(); - } - var left = 8 - bit; - if (bit === 0 && n > 0) - f.bytesRead++; - if (n >= left) { - result <<= left; - result |= (BITMASK[left] & bytes[byte++]); - bit = 0; - n -= left; - } else { - result <<= n; - result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit)); - bit += n; - n = 0; - } - } - return result; - }; - f.bytesRead = 0; - return f; -}; diff --git a/truebit-implementation/node_modules/unbzip2-stream/lib/bzip2.js b/truebit-implementation/node_modules/unbzip2-stream/lib/bzip2.js deleted file mode 100644 index 6968e23f..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/lib/bzip2.js +++ /dev/null @@ -1,367 +0,0 @@ -/* - bzip2.js - a small bzip2 decompression implementation - - Copyright 2011 by antimatter15 (antimatter15@gmail.com) - - Based on micro-bunzip by Rob Landley (rob@landley.net). - - Copyright (c) 2011 by antimatter15 (antimatter15@gmail.com). - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included - in all copies or substantial portions of the Software. - - 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. -*/ -function Bzip2Error(message) { - this.name = 'Bzip2Error'; - this.message = message; - this.stack = (new Error()).stack; -} -Bzip2Error.prototype = new Error; - -var message = { - Error: function(message) {throw new Bzip2Error(message);} -}; - -var bzip2 = {}; -bzip2.Bzip2Error = Bzip2Error; - -bzip2.crcTable = -[ - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, - 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, - 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, - 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, - 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, - 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, - 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, - 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, - 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, - 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, - 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, - 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, - 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, - 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, - 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, - 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, - 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, - 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, - 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, - 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, - 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, - 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, - 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, - 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, - 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, - 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, - 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, - 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, - 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, - 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, - 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, - 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, - 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, - 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, - 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, - 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, - 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, - 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, - 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 -]; - -bzip2.array = function(bytes) { - var bit = 0, byte = 0; - var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF ]; - return function(n) { - var result = 0; - while(n > 0) { - var left = 8 - bit; - if (n >= left) { - result <<= left; - result |= (BITMASK[left] & bytes[byte++]); - bit = 0; - n -= left; - } else { - result <<= n; - result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit)); - bit += n; - n = 0; - } - } - return result; - } -} - - -bzip2.simple = function(srcbuffer, stream) { - var bits = bzip2.array(srcbuffer); - var size = bzip2.header(bits); - var ret = false; - var bufsize = 100000 * size; - var buf = new Int32Array(bufsize); - - do { - ret = bzip2.decompress(bits, stream, buf, bufsize); - } while(!ret); -} - -bzip2.header = function(bits) { - this.byteCount = new Int32Array(256); - this.symToByte = new Uint8Array(256); - this.mtfSymbol = new Int32Array(256); - this.selectors = new Uint8Array(0x8000); - - if (bits(8*3) != 4348520) message.Error("No magic number found"); - - var i = bits(8) - 48; - if (i < 1 || i > 9) message.Error("Not a BZIP archive"); - return i; -}; - - -//takes a function for reading the block data (starting with 0x314159265359) -//a block size (0-9) (optional, defaults to 9) -//a length at which to stop decompressing and return the output -bzip2.decompress = function(bits, stream, buf, bufsize, streamCRC) { - var MAX_HUFCODE_BITS = 20; - var MAX_SYMBOLS = 258; - var SYMBOL_RUNA = 0; - var SYMBOL_RUNB = 1; - var GROUP_SIZE = 50; - var crc = 0 ^ (-1); - - for(var h = '', i = 0; i < 6; i++) h += bits(8).toString(16); - if (h == "177245385090") { - var finalCRC = bits(32)|0; - if (finalCRC !== streamCRC) message.Error("Error in bzip2: crc32 do not match"); - // align stream to byte - bits(null); - return null; // reset streamCRC for next call - } - if (h != "314159265359") message.Error("eek not valid bzip data"); - var crcblock = bits(32)|0; // CRC code - if (bits(1)) message.Error("unsupported obsolete version"); - var origPtr = bits(24); - if (origPtr > bufsize) message.Error("Initial position larger than buffer size"); - var t = bits(16); - var symTotal = 0; - for (i = 0; i < 16; i++) { - if (t & (1 << (15 - i))) { - var k = bits(16); - for(j = 0; j < 16; j++) { - if (k & (1 << (15 - j))) { - this.symToByte[symTotal++] = (16 * i) + j; - } - } - } - } - - var groupCount = bits(3); - if (groupCount < 2 || groupCount > 6) message.Error("another error"); - var nSelectors = bits(15); - if (nSelectors == 0) message.Error("meh"); - for(var i = 0; i < groupCount; i++) this.mtfSymbol[i] = i; - - for(var i = 0; i < nSelectors; i++) { - for(var j = 0; bits(1); j++) if (j >= groupCount) message.Error("whoops another error"); - var uc = this.mtfSymbol[j]; - for(var k = j-1; k>=0; k--) { - this.mtfSymbol[k+1] = this.mtfSymbol[k]; - } - this.mtfSymbol[0] = uc; - this.selectors[i] = uc; - } - - var symCount = symTotal + 2; - var groups = []; - var length = new Uint8Array(MAX_SYMBOLS), - temp = new Uint16Array(MAX_HUFCODE_BITS+1); - - var hufGroup; - - for(var j = 0; j < groupCount; j++) { - t = bits(5); //lengths - for(var i = 0; i < symCount; i++) { - while(true){ - if (t < 1 || t > MAX_HUFCODE_BITS) message.Error("I gave up a while ago on writing error messages"); - if (!bits(1)) break; - if (!bits(1)) t++; - else t--; - } - length[i] = t; - } - var minLen, maxLen; - minLen = maxLen = length[0]; - for(var i = 1; i < symCount; i++) { - if (length[i] > maxLen) maxLen = length[i]; - else if (length[i] < minLen) minLen = length[i]; - } - hufGroup = groups[j] = {}; - hufGroup.permute = new Int32Array(MAX_SYMBOLS); - hufGroup.limit = new Int32Array(MAX_HUFCODE_BITS + 1); - hufGroup.base = new Int32Array(MAX_HUFCODE_BITS + 1); - - hufGroup.minLen = minLen; - hufGroup.maxLen = maxLen; - var base = hufGroup.base.subarray(1); - var limit = hufGroup.limit.subarray(1); - var pp = 0; - for(var i = minLen; i <= maxLen; i++) - for(var t = 0; t < symCount; t++) - if (length[t] == i) hufGroup.permute[pp++] = t; - for(i = minLen; i <= maxLen; i++) temp[i] = limit[i] = 0; - for(i = 0; i < symCount; i++) temp[length[i]]++; - pp = t = 0; - for(i = minLen; i < maxLen; i++) { - pp += temp[i]; - limit[i] = pp - 1; - pp <<= 1; - base[i+1] = pp - (t += temp[i]); - } - limit[maxLen] = pp + temp[maxLen] - 1; - base[minLen] = 0; - } - - for(var i = 0; i < 256; i++) { - this.mtfSymbol[i] = i; - this.byteCount[i] = 0; - } - var runPos, count, symCount, selector; - runPos = count = symCount = selector = 0; - while(true) { - if (!(symCount--)) { - symCount = GROUP_SIZE - 1; - if (selector >= nSelectors) message.Error("meow i'm a kitty, that's an error"); - hufGroup = groups[this.selectors[selector++]]; - base = hufGroup.base.subarray(1); - limit = hufGroup.limit.subarray(1); - } - i = hufGroup.minLen; - j = bits(i); - while(true) { - if (i > hufGroup.maxLen) message.Error("rawr i'm a dinosaur"); - if (j <= limit[i]) break; - i++; - j = (j << 1) | bits(1); - } - j -= base[i]; - if (j < 0 || j >= MAX_SYMBOLS) message.Error("moo i'm a cow"); - var nextSym = hufGroup.permute[j]; - if (nextSym == SYMBOL_RUNA || nextSym == SYMBOL_RUNB) { - if (!runPos){ - runPos = 1; - t = 0; - } - if (nextSym == SYMBOL_RUNA) t += runPos; - else t += 2 * runPos; - runPos <<= 1; - continue; - } - if (runPos) { - runPos = 0; - if (count + t > bufsize) message.Error("Boom."); - uc = this.symToByte[this.mtfSymbol[0]]; - this.byteCount[uc] += t; - while(t--) buf[count++] = uc; - } - if (nextSym > symTotal) break; - if (count >= bufsize) message.Error("I can't think of anything. Error"); - i = nextSym - 1; - uc = this.mtfSymbol[i]; - for(var k = i-1; k>=0; k--) { - this.mtfSymbol[k+1] = this.mtfSymbol[k]; - } - this.mtfSymbol[0] = uc - uc = this.symToByte[uc]; - this.byteCount[uc]++; - buf[count++] = uc; - } - if (origPtr < 0 || origPtr >= count) message.Error("I'm a monkey and I'm throwing something at someone, namely you"); - var j = 0; - for(var i = 0; i < 256; i++) { - k = j + this.byteCount[i]; - this.byteCount[i] = j; - j = k; - } - for(var i = 0; i < count; i++) { - uc = buf[i] & 0xff; - buf[this.byteCount[uc]] |= (i << 8); - this.byteCount[uc]++; - } - var pos = 0, current = 0, run = 0; - if (count) { - pos = buf[origPtr]; - current = (pos & 0xff); - pos >>= 8; - run = -1; - } - count = count; - var copies, previous, outbyte; - while(count) { - count--; - previous = current; - pos = buf[pos]; - current = pos & 0xff; - pos >>= 8; - if (run++ == 3) { - copies = current; - outbyte = previous; - current = -1; - } else { - copies = 1; - outbyte = current; - } - while(copies--) { - crc = ((crc << 8) ^ this.crcTable[((crc>>24) ^ outbyte) & 0xFF])&0xFFFFFFFF; // crc32 - stream(outbyte); - } - if (current != previous) run = 0; - } - - crc = (crc ^ (-1)) >>> 0; - if ((crc|0) != (crcblock|0)) message.Error("Error in bzip2: crc32 do not match"); - if (streamCRC === null) - streamCRC = 0; - streamCRC = (crc ^ ((streamCRC << 1) | (streamCRC >>> 31))) & 0xFFFFFFFF; - return streamCRC; -} - -module.exports = bzip2; diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/.travis.yml b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/.travis.yml deleted file mode 100644 index 939cb517..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.11" \ No newline at end of file diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/LICENSE.MIT b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/LICENSE.MIT deleted file mode 100644 index 96d3f68a..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/LICENSE.MIT +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/README.md b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/README.md deleted file mode 100644 index ed31d1ab..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/README.md +++ /dev/null @@ -1,31 +0,0 @@ -base64-js -========= - -`base64-js` does basic base64 encoding/decoding in pure JS. - -[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js) - -[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js) - -Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. - -Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. - -## install - -With [npm](https://npmjs.org) do: - -`npm install base64-js` - -## methods - -`var base64 = require('base64-js')` - -`base64` has two exposed functions, `toByteArray` and `fromByteArray`, which both take a single argument. - -* `toByteArray` - Takes a base64 string and returns a byte array -* `fromByteArray` - Takes a byte array and returns a base64 string - -## license - -MIT \ No newline at end of file diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/bench/bench.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/bench/bench.js deleted file mode 100644 index 0689e08a..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/bench/bench.js +++ /dev/null @@ -1,19 +0,0 @@ -var random = require('crypto').pseudoRandomBytes - -var b64 = require('../') -var fs = require('fs') -var path = require('path') -var data = random(1e6).toString('base64') -//fs.readFileSync(path.join(__dirname, 'example.b64'), 'ascii').split('\n').join('') -var start = Date.now() -var raw = b64.toByteArray(data) -var middle = Date.now() -var data = b64.fromByteArray(raw) -var end = Date.now() - -console.log('decode ms, decode ops/ms, encode ms, encode ops/ms') -console.log( - middle - start, data.length / (middle - start), - end - middle, data.length / (end - middle)) -//console.log(data) - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/lib/b64.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/lib/b64.js deleted file mode 100644 index 46001d2f..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/lib/b64.js +++ /dev/null @@ -1,124 +0,0 @@ -var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -;(function (exports) { - 'use strict'; - - var Arr = (typeof Uint8Array !== 'undefined') - ? Uint8Array - : Array - - var PLUS = '+'.charCodeAt(0) - var SLASH = '/'.charCodeAt(0) - var NUMBER = '0'.charCodeAt(0) - var LOWER = 'a'.charCodeAt(0) - var UPPER = 'A'.charCodeAt(0) - var PLUS_URL_SAFE = '-'.charCodeAt(0) - var SLASH_URL_SAFE = '_'.charCodeAt(0) - - function decode (elt) { - var code = elt.charCodeAt(0) - if (code === PLUS || - code === PLUS_URL_SAFE) - return 62 // '+' - if (code === SLASH || - code === SLASH_URL_SAFE) - return 63 // '/' - if (code < NUMBER) - return -1 //no match - if (code < NUMBER + 10) - return code - NUMBER + 26 + 26 - if (code < UPPER + 26) - return code - UPPER - if (code < LOWER + 26) - return code - LOWER + 26 - } - - function b64ToByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - - if (b64.length % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 - - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length - - var L = 0 - - function push (v) { - arr[L++] = v - } - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } - - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } - - return arr - } - - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length - - function encode (num) { - return lookup.charAt(num) - } - - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } - - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } - - return output - } - - exports.toByteArray = b64ToByteArray - exports.fromByteArray = uint8ToBase64 -}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/package.json b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/package.json deleted file mode 100644 index 1e2d0427..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "base64-js@0.0.8", - "_id": "base64-js@0.0.8", - "_inBundle": false, - "_integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", - "_location": "/unbzip2-stream/base64-js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "base64-js@0.0.8", - "name": "base64-js", - "escapedName": "base64-js", - "rawSpec": "0.0.8", - "saveSpec": null, - "fetchSpec": "0.0.8" - }, - "_requiredBy": [ - "/unbzip2-stream/buffer" - ], - "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "_shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978", - "_spec": "base64-js@0.0.8", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer", - "author": { - "name": "T. Jameson Little", - "email": "t.jameson.little@gmail.com" - }, - "bugs": { - "url": "https://github.com/beatgammit/base64-js/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Base64 encoding/decoding in pure JS", - "devDependencies": { - "tape": "~2.3.2" - }, - "engines": { - "node": ">= 0.4" - }, - "homepage": "https://github.com/beatgammit/base64-js#readme", - "license": "MIT", - "main": "lib/b64.js", - "name": "base64-js", - "repository": { - "type": "git", - "url": "git://github.com/beatgammit/base64-js.git" - }, - "scripts": { - "test": "tape test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "chrome/4..latest", - "firefox/3..latest", - "safari/5.1..latest", - "opera/11.0..latest", - "iphone/6", - "ipad/6" - ] - }, - "version": "0.0.8" -} diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/test/convert.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/test/convert.js deleted file mode 100644 index 60b09c01..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/test/convert.js +++ /dev/null @@ -1,51 +0,0 @@ -var test = require('tape'), - b64 = require('../lib/b64'), - checks = [ - 'a', - 'aa', - 'aaa', - 'hi', - 'hi!', - 'hi!!', - 'sup', - 'sup?', - 'sup?!' - ]; - -test('convert to base64 and back', function (t) { - t.plan(checks.length); - - for (var i = 0; i < checks.length; i++) { - var check = checks[i], - b64Str, - arr, - str; - - b64Str = b64.fromByteArray(map(check, function (char) { return char.charCodeAt(0); })); - - arr = b64.toByteArray(b64Str); - str = map(arr, function (byte) { return String.fromCharCode(byte); }).join(''); - - t.equal(check, str, 'Checked ' + check); - } - -}); - -function map (arr, callback) { - var res = [], - kValue, - mappedValue; - - for (var k = 0, len = arr.length; k < len; k++) { - if ((typeof arr === 'string' && !!arr.charAt(k))) { - kValue = arr.charAt(k); - mappedValue = callback(kValue, k, arr); - res[k] = mappedValue; - } else if (typeof arr !== 'string' && k in arr) { - kValue = arr[k]; - mappedValue = callback(kValue, k, arr); - res[k] = mappedValue; - } - } - return res; -} diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/test/url-safe.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/test/url-safe.js deleted file mode 100644 index dc437e96..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/base64-js/test/url-safe.js +++ /dev/null @@ -1,18 +0,0 @@ -var test = require('tape'), - b64 = require('../lib/b64'); - -test('decode url-safe style base64 strings', function (t) { - var expected = [0xff, 0xff, 0xbe, 0xff, 0xef, 0xbf, 0xfb, 0xef, 0xff]; - - var actual = b64.toByteArray('//++/++/++//'); - for (var i = 0; i < actual.length; i++) { - t.equal(actual[i], expected[i]) - } - - actual = b64.toByteArray('__--_--_--__'); - for (var i = 0; i < actual.length; i++) { - t.equal(actual[i], expected[i]) - } - - t.end(); -}); diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.npmignore b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.npmignore deleted file mode 100644 index 4cea1824..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.npmignore +++ /dev/null @@ -1 +0,0 @@ -perf/ diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.travis.yml b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.travis.yml deleted file mode 100644 index abf846f5..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - '4' -sudo: false -env: - global: - - secure: AUsK+8fYSpwIMHcVt8Mu9SpG9RPHp4XDAwCQfpU3d5U65q8OVVC6C+XjvnNmEd2PoEJRHem8ZXEyRVfGM1sttKZLZP70TEKZOpOiRQnZiTQCAJ92TfGsDj/F4LoWSjUZUpfeg9b3iSp8G5dVw3+q9QZPIu6eykASK6bfcg//Cyg= - - secure: eQBKJWu7XbhAN4ZvOOhMenC0IPpoYj+wZVVzzsLwUppfJqlrHV0CUW8rJdvZNiaGhYhoyHTnAcynpTE5kZfg3XjevOvF8PGY5wUYCki9BI+rp+pvVPZE/DNUAQpFR2gd2nxMJ4kYv7GVb6i/DfuqJa0h8IuY4zcMuKWwbQd3Az8= diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.zuul.yml b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.zuul.yml deleted file mode 100644 index a0b4b39a..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/.zuul.yml +++ /dev/null @@ -1,22 +0,0 @@ -ui: tape -scripts: - - "./test/_polyfill.js" -browsers: - - name: chrome - version: -2..latest - - name: firefox - version: -2..latest - - name: safari - version: [6, 7, 8, 9..latest] - - name: ie - version: 8..latest - - name: microsoftedge - version: 20..latest - - name: opera - version: 11..latest - - name: iphone - version: [5.1, 6.1, 7.1, 8.4, 9.1..latest] - - name: ipad - version: [5.1, 6.1, 7.1, 8.4, 9.1..latest] - - name: android - version: 4.0..latest diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/LICENSE b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/LICENSE deleted file mode 100644 index d6bf75dc..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh, and other contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/README.md b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/README.md deleted file mode 100644 index 671607f3..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/README.md +++ /dev/null @@ -1,364 +0,0 @@ -# buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][npm-url] - -#### The buffer module from [node.js](http://nodejs.org/), for the browser. - -[![saucelabs][saucelabs-image]][saucelabs-url] - -[travis-image]: https://img.shields.io/travis/feross/buffer.svg?style=flat -[travis-url]: https://travis-ci.org/feross/buffer -[npm-image]: https://img.shields.io/npm/v/buffer.svg?style=flat -[npm-url]: https://npmjs.org/package/buffer -[downloads-image]: https://img.shields.io/npm/dm/buffer.svg?style=flat -[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg -[saucelabs-url]: https://saucelabs.com/u/buffer - -With [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module. - -The goal is to provide an API that is 100% identical to -[node's Buffer API](http://iojs.org/api/buffer.html). Read the -[official docs](http://iojs.org/api/buffer.html) for the full list of properties, -instance methods, and class methods that are supported. - -## features - -- Manipulate binary data like a boss, in all browsers -- even IE6! -- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`) -- Extremely small bundle size (**5.04KB minified + gzipped**, 35.5KB with comments) -- Excellent browser support (IE 6+, Chrome 4+, Firefox 3+, Safari 5.1+, Opera 11+, iOS, etc.) -- Preserves Node API exactly, with one important difference (see below) -- `.slice()` returns instances of the same type (Buffer) -- Square-bracket `buf[4]` notation works, even in old browsers like IE6! -- Does not modify any browser prototypes or put anything on `window` -- Comprehensive test suite (including all buffer tests from node.js core) - - -## install - -To use this module directly (without browserify), install it: - -```bash -npm install buffer -``` - -This module was previously called **native-buffer-browserify**, but please use **buffer** -from now on. - -A standalone bundle is available [here](https://wzrd.in/standalone/buffer), for non-browserify users. - - -## usage - -The module's API is identical to node's `Buffer` API. Read the -[official docs](http://iojs.org/api/buffer.html) for the full list of properties, -instance methods, and class methods that are supported. - -As mentioned above, `require('buffer')` or use the `Buffer` global with -[browserify](http://browserify.org) and this module will automatically be included -in your bundle. Almost any npm module will work in the browser, even if it assumes that -the node `Buffer` API will be available. - -To depend on this module explicitly (without browserify), require it like this: - -```js -var Buffer = require('buffer/').Buffer // note: the trailing slash is important! -``` - -To require this module explicitly, use `require('buffer/')` which tells the node.js module -lookup algorithm (also used by browserify) to use the **npm module** named `buffer` -instead of the **node.js core** module named `buffer`! - - -## how does it work? - -`Buffer` is a subclass of `Uint8Array` augmented with all the `Buffer` API methods. -The `Uint8Array` prototype is not modified. - - -## one minor difference - -#### In old browsers, `buf.slice()` does not modify parent buffer's memory - -If you only support modern browsers (specifically, those with typed array support), -then this issue does not affect you. If you support super old browsers, then read on. - -In node, the `slice()` method returns a new `Buffer` that shares underlying memory -with the original Buffer. When you modify one buffer, you modify the other. -[Read more.](http://iojs.org/api/buffer.html#buffer_buf_slice_start_end) - -In browsers with typed array support, this `Buffer` implementation supports this -behavior. In browsers without typed arrays, an alternate buffer implementation is -used that is based on `Object` which has no mechanism to point separate -`Buffer`s to the same underlying slab of memory. - -You can see which browser versions lack typed array support -[here](https://github.com/feross/buffer/blob/master/index.js#L20-L46). - - -## tracking the latest node api - -This module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer -API is considered **stable** in the -[node stability index](http://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index), -so it is unlikely that there will ever be breaking changes. -Nonetheless, when/if the Buffer API changes in node, this module's API will change -accordingly. - -## performance - -See perf tests in `/perf`. - -`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a -sanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will -always be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module, -which is included to compare against. - -### Chrome 38 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ | -| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | | -| | | | | -| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | | -| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | | -| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | | -| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ | -| | | | | -| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | | -| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | | -| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ | -| | | | | -| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ | -| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | | -| | | | | -| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ | -| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | | -| | | | | -| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ | -| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | | -| | | | | -| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | | -| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | | -| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ | - - -### Firefox 33 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | | -| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ | -| | | | | -| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | | -| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | | -| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | | -| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ | -| | | | | -| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | | -| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | | -| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ | -| | | | | -| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | | -| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ | -| | | | | -| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | | -| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ | -| | | | | -| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ | -| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | | -| | | | | -| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | | -| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | | -| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ | - -### Safari 8 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ | -| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | | -| | | | | -| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | | -| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | | -| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | | -| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ | -| | | | | -| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | | -| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | | -| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ | -| | | | | -| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | | -| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ | -| | | | | -| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | | -| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ | -| | | | | -| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | | -| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ | -| | | | | -| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | | -| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | | -| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ | - - -### Node 0.11.14 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | | -| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ | -| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | | -| | | | | -| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | | -| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ | -| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | | -| | | | | -| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | | -| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ | -| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | | -| | | | | -| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | | -| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ | -| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | | -| | | | | -| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | | -| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | | -| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | | -| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ | -| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | | -| | | | | -| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ | -| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | | -| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | | -| | | | | -| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ | -| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | | -| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | | -| | | | | -| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | | -| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | | -| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ | -| | | | | -| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | | -| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ | -| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | | -| | | | | -| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | | -| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ | -| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | | - -### iojs 1.8.1 - -| Method | Operations | Accuracy | Sampled | Fastest | -|:-------|:-----------|:---------|:--------|:-------:| -| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | | -| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | | -| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ | -| | | | | -| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | | -| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | | -| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ | -| | | | | -| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | | -| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | | -| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ | -| | | | | -| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | | -| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ | -| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | | -| | | | | -| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | | -| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | | -| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ | -| | | | | -| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | | -| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ | -| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | | -| | | | | -| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ | -| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | | -| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | | -| | | | | -| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ | -| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | | -| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | | -| | | | | -| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | | -| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | | -| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ | -| | | | | -| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | | -| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | | -| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ | -| | | | | -| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | | -| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ | -| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | | -| | | | | - -## Testing the project - -First, install the project: - - npm install - -Then, to run tests in Node.js, run: - - npm run test-node - -To test locally in a browser, you can run: - - npm run test-browser-local - -This will print out a URL that you can then open in a browser to run the tests, using [Zuul](https://github.com/defunctzombie/zuul). - -To run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run: - - npm test - -This is what's run in Travis, to check against various browsers. The list of browsers is kept in the `.zuul.yml` file. - -## JavaScript Standard Style - -This module uses [JavaScript Standard Style](https://github.com/feross/standard). - -[![js-standard-style](https://raw.githubusercontent.com/feross/standard/master/badge.png)](https://github.com/feross/standard) - -To test that the code conforms to the style, `npm install` and run: - - ./node_modules/.bin/standard - -## credit - -This was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify). - - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis. diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/bin/download-node-tests.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/bin/download-node-tests.js deleted file mode 100755 index c1a88467..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/bin/download-node-tests.js +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env node - -var concat = require('concat-stream') -var fs = require('fs') -var hyperquest = require('hyperquest') -var cp = require('child_process') -var split = require('split') -var through = require('through2') - -var url = 'https://api.github.com/repos/nodejs/io.js/contents' -var dirs = [ - '/test/parallel', - '/test/pummel' -] - -cp.execSync('rm -rf node/*.js', { cwd: __dirname + '/../test' }) -cp.execSync('rm -rf node-es6/*.js', { cwd: __dirname + '/../test' }) - -var httpOpts = { - headers: { - 'User-Agent': null - // auth if github rate-limits you... - // 'Authorization': 'Basic ' + Buffer('username:password').toString('base64'), - } -} - -dirs.forEach(function (dir) { - var req = hyperquest(url + dir, httpOpts) - req.pipe(concat(function (data) { - if (req.response.statusCode !== 200) { - throw new Error(url + dir + ': ' + data.toString()) - } - downloadBufferTests(dir, JSON.parse(data)) - })) -}) - -function downloadBufferTests (dir, files) { - files.forEach(function (file) { - if (!/test-buffer.*/.test(file.name)) return - - var path - if (file.name === 'test-buffer-iterator.js' || - file.name === 'test-buffer-arraybuffer.js') { - path = __dirname + '/../test/node-es6/' + file.name - } else if (file.name === 'test-buffer-fakes.js') { - // These teses only apply to node, where they're calling into C++ and need to - // ensure the prototype can't be faked, or else there will be a segfault. - return - } else { - path = __dirname + '/../test/node/' + file.name - } - - console.log(file.download_url) - hyperquest(file.download_url, httpOpts) - .pipe(split()) - .pipe(testfixer(file.name)) - .pipe(fs.createWriteStream(path)) - .on('finish', function () { - console.log('wrote ' + file.name) - }) - }) -} - -function testfixer (filename) { - var firstline = true - - return through(function (line, enc, cb) { - line = line.toString() - - if (firstline) { - // require buffer explicitly - var preamble = 'if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false;\n' + - 'var Buffer = require(\'../../\').Buffer;' - if (/use strict/.test(line)) line += '\n' + preamble - else line + preamble + '\n' + line - firstline = false - } - - // use `var` instead of `const`/`let` - line = line.replace(/(const|let) /g, 'var ') - - // make `require('common')` work - line = line.replace(/(var common = require.*)/g, 'var common = {};') - - // use `Buffer.isBuffer` instead of `instanceof Buffer` - line = line.replace(/buf instanceof Buffer/g, 'Buffer.isBuffer(buf)') - - // require browser buffer - line = line.replace(/(.*)require\('buffer'\)(.*)/g, '$1require(\'../../\')$2') - - // smalloc is only used for kMaxLength - line = line.replace( - /require\('smalloc'\)/g, - '{ kMaxLength: process.env.OBJECT_IMPL ? 0x3fffffff : 0x7fffffff }' - ) - - // comment out console logs - line = line.replace(/(.*console\..*)/g, '// $1') - - // we can't reliably test typed array max-sizes in the browser - if (filename === 'test-buffer-big.js') { - line = line.replace(/(.*new Int8Array.*RangeError.*)/, '// $1') - line = line.replace(/(.*new ArrayBuffer.*RangeError.*)/, '// $1') - line = line.replace(/(.*new Float64Array.*RangeError.*)/, '// $1') - } - - // https://github.com/iojs/io.js/blob/v0.12/test/parallel/test-buffer.js#L38 - // we can't run this because we need to support - // browsers that don't have typed arrays - if (filename === 'test-buffer.js') { - line = line.replace(/b\[0\] = -1;/, 'b[0] = 255;') - } - - // https://github.com/iojs/io.js/blob/v0.12/test/parallel/test-buffer.js#L1138 - // unfortunately we can't run this as it touches - // node streams which do an instanceof check - // and crypto-browserify doesn't work in old - // versions of ie - if (filename === 'test-buffer.js') { - line = line.replace(/^(\s*)(var crypto = require.*)/, '$1// $2') - line = line.replace(/(crypto.createHash.*\))/, '1 /*$1*/') - } - - cb(null, line + '\n') - }) -} diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/bin/test.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/bin/test.js deleted file mode 100644 index 2fc368b9..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/bin/test.js +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env node - -var cp = require('child_process') - -var runBrowserTests = !process.env.TRAVIS_PULL_REQUEST || - process.env.TRAVIS_PULL_REQUEST === 'false' - -var node = cp.spawn('npm', ['run', 'test-node'], { stdio: 'inherit' }) -node.on('close', function (code) { - if (code === 0 && runBrowserTests) { - var browser = cp.spawn('npm', ['run', 'test-browser'], { stdio: 'inherit' }) - browser.on('close', function (code) { - process.exit(code) - }) - } else { - process.exit(code) - } -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/index.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/index.js deleted file mode 100644 index 0dc9007d..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/index.js +++ /dev/null @@ -1,1548 +0,0 @@ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = require('base64-js') -var ieee754 = require('ieee754') -var isArray = require('isarray') - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 -Buffer.poolSize = 8192 // not used by this implementation - -var rootParent = {} - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Due to various browser bugs, sometimes the Object implementation will be used even - * when the browser supports typed arrays. - * - * Note: - * - * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property - * on objects. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. - - * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they - * get the Object implementation, which is slower but behaves correctly. - */ -Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined - ? global.TYPED_ARRAY_SUPPORT - : typedArraySupport() - -function typedArraySupport () { - function Bar () {} - try { - var arr = new Uint8Array(1) - arr.foo = function () { return 42 } - arr.constructor = Bar - return arr.foo() === 42 && // typed array instances can be augmented - arr.constructor === Bar && // constructor can be set - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -} - -function kMaxLength () { - return Buffer.TYPED_ARRAY_SUPPORT - ? 0x7fffffff - : 0x3fffffff -} - -/** - * Class: Buffer - * ============= - * - * The Buffer constructor returns instances of `Uint8Array` that are augmented - * with function properties for all the node `Buffer` API functions. We use - * `Uint8Array` so that square bracket notation works as expected -- it returns - * a single octet. - * - * By augmenting the instances, we can avoid modifying the `Uint8Array` - * prototype. - */ -function Buffer (arg) { - if (!(this instanceof Buffer)) { - // Avoid going through an ArgumentsAdaptorTrampoline in the common case. - if (arguments.length > 1) return new Buffer(arg, arguments[1]) - return new Buffer(arg) - } - - if (!Buffer.TYPED_ARRAY_SUPPORT) { - this.length = 0 - this.parent = undefined - } - - // Common case. - if (typeof arg === 'number') { - return fromNumber(this, arg) - } - - // Slightly less common case. - if (typeof arg === 'string') { - return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8') - } - - // Unusual. - return fromObject(this, arg) -} - -function fromNumber (that, length) { - that = allocate(that, length < 0 ? 0 : checked(length) | 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < length; i++) { - that[i] = 0 - } - } - return that -} - -function fromString (that, string, encoding) { - if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8' - - // Assumption: byteLength() return value is always < kMaxLength. - var length = byteLength(string, encoding) | 0 - that = allocate(that, length) - - that.write(string, encoding) - return that -} - -function fromObject (that, object) { - if (Buffer.isBuffer(object)) return fromBuffer(that, object) - - if (isArray(object)) return fromArray(that, object) - - if (object == null) { - throw new TypeError('must start with number, buffer, array or string') - } - - if (typeof ArrayBuffer !== 'undefined') { - if (object.buffer instanceof ArrayBuffer) { - return fromTypedArray(that, object) - } - if (object instanceof ArrayBuffer) { - return fromArrayBuffer(that, object) - } - } - - if (object.length) return fromArrayLike(that, object) - - return fromJsonObject(that, object) -} - -function fromBuffer (that, buffer) { - var length = checked(buffer.length) | 0 - that = allocate(that, length) - buffer.copy(that, 0, 0, length) - return that -} - -function fromArray (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -// Duplicate of fromArray() to keep fromArray() monomorphic. -function fromTypedArray (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - // Truncating the elements is probably not what people expect from typed - // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior - // of the old Buffer constructor. - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -function fromArrayBuffer (that, array) { - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - array.byteLength - that = Buffer._augment(new Uint8Array(array)) - } else { - // Fallback: Return an object instance of the Buffer class - that = fromTypedArray(that, new Uint8Array(array)) - } - return that -} - -function fromArrayLike (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object. -// Returns a zero-length buffer for inputs that don't conform to the spec. -function fromJsonObject (that, object) { - var array - var length = 0 - - if (object.type === 'Buffer' && isArray(object.data)) { - array = object.data - length = checked(array.length) | 0 - } - that = allocate(that, length) - - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} - -if (Buffer.TYPED_ARRAY_SUPPORT) { - Buffer.prototype.__proto__ = Uint8Array.prototype - Buffer.__proto__ = Uint8Array -} else { - // pre-set for values that may exist in the future - Buffer.prototype.length = undefined - Buffer.prototype.parent = undefined -} - -function allocate (that, length) { - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = Buffer._augment(new Uint8Array(length)) - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - that.length = length - that._isBuffer = true - } - - var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1 - if (fromPool) that.parent = rootParent - - return that -} - -function checked (length) { - // Note: cannot use `length < kMaxLength` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= kMaxLength()) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + kMaxLength().toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (subject, encoding) { - if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) - - var buf = new Buffer(subject, encoding) - delete buf.parent - return buf -} - -Buffer.isBuffer = function isBuffer (b) { - return !!(b != null && b._isBuffer) -} - -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - var i = 0 - var len = Math.min(x, y) - while (i < len) { - if (a[i] !== b[i]) break - - ++i - } - - if (i !== len) { - x = a[i] - y = b[i] - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'binary': - case 'base64': - case 'raw': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') - - if (list.length === 0) { - return new Buffer(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; i++) { - length += list[i].length - } - } - - var buf = new Buffer(length) - var pos = 0 - for (i = 0; i < list.length; i++) { - var item = list[i] - item.copy(buf, pos) - pos += item.length - } - return buf -} - -function byteLength (string, encoding) { - if (typeof string !== 'string') string = '' + string - - var len = string.length - if (len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'binary': - // Deprecated - case 'raw': - case 'raws': - return len - case 'utf8': - case 'utf-8': - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - start = start | 0 - end = end === undefined || end === Infinity ? this.length : end | 0 - - if (!encoding) encoding = 'utf8' - if (start < 0) start = 0 - if (end > this.length) end = this.length - if (end <= start) return '' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'binary': - return binarySlice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toString = function toString () { - var length = this.length | 0 - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } - return '' -} - -Buffer.prototype.compare = function compare (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return 0 - return Buffer.compare(this, b) -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset) { - if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff - else if (byteOffset < -0x80000000) byteOffset = -0x80000000 - byteOffset >>= 0 - - if (this.length === 0) return -1 - if (byteOffset >= this.length) return -1 - - // Negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) - - if (typeof val === 'string') { - if (val.length === 0) return -1 // special case: looking for empty string always fails - return String.prototype.indexOf.call(this, val, byteOffset) - } - if (Buffer.isBuffer(val)) { - return arrayIndexOf(this, val, byteOffset) - } - if (typeof val === 'number') { - if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { - return Uint8Array.prototype.indexOf.call(this, val, byteOffset) - } - return arrayIndexOf(this, [ val ], byteOffset) - } - - function arrayIndexOf (arr, val, byteOffset) { - var foundIndex = -1 - for (var i = 0; byteOffset + i < arr.length; i++) { - if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex - } else { - foundIndex = -1 - } - } - return -1 - } - - throw new TypeError('val must be string, number or Buffer') -} - -// `get` is deprecated -Buffer.prototype.get = function get (offset) { - console.log('.get() is deprecated. Access using array indexes instead.') - return this.readUInt8(offset) -} - -// `set` is deprecated -Buffer.prototype.set = function set (v, offset) { - console.log('.set() is deprecated. Access using array indexes instead.') - return this.writeUInt8(v, offset) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new Error('Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; i++) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (isNaN(parsed)) throw new Error('Invalid hex string') - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function binaryWrite (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset | 0 - if (isFinite(length)) { - length = length | 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - // legacy write(string, encoding, offset, length) - remove in v0.13 - } else { - var swap = encoding - encoding = offset - offset = length | 0 - length = swap - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'binary': - return binaryWrite(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function binarySlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; i++) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf - if (Buffer.TYPED_ARRAY_SUPPORT) { - newBuf = Buffer._augment(this.subarray(start, end)) - } else { - var sliceLen = end - start - newBuf = new Buffer(sliceLen, undefined) - for (var i = 0; i < sliceLen; i++) { - newBuf[i] = this[i + start] - } - } - - if (newBuf.length) newBuf.parent = this.parent || this - - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') - if (value > max || value < min) throw new RangeError('value is out of bounds') - if (offset + ext > buf.length) throw new RangeError('index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - this[offset] = (value & 0xff) - return offset + 1 -} - -function objectWriteUInt16 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { - buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -function objectWriteUInt32 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffffffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { - buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = value < 0 ? 1 : 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = value < 0 ? 1 : 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (value > max || value < min) throw new RangeError('value is out of bounds') - if (offset + ext > buf.length) throw new RangeError('index out of range') - if (offset < 0) throw new RangeError('index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; i--) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { - // ascending copy from start - for (i = 0; i < len; i++) { - target[i + targetStart] = this[i + start] - } - } else { - target._set(this.subarray(start, start + len), targetStart) - } - - return len -} - -// fill(value, start=0, end=buffer.length) -Buffer.prototype.fill = function fill (value, start, end) { - if (!value) value = 0 - if (!start) start = 0 - if (!end) end = this.length - - if (end < start) throw new RangeError('end < start') - - // Fill 0 bytes; we're done - if (end === start) return - if (this.length === 0) return - - if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') - if (end < 0 || end > this.length) throw new RangeError('end out of bounds') - - var i - if (typeof value === 'number') { - for (i = start; i < end; i++) { - this[i] = value - } - } else { - var bytes = utf8ToBytes(value.toString()) - var len = bytes.length - for (i = start; i < end; i++) { - this[i] = bytes[i % len] - } - } - - return this -} - -/** - * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. - * Added in Node 0.12. Only available in browsers that support ArrayBuffer. - */ -Buffer.prototype.toArrayBuffer = function toArrayBuffer () { - if (typeof Uint8Array !== 'undefined') { - if (Buffer.TYPED_ARRAY_SUPPORT) { - return (new Buffer(this)).buffer - } else { - var buf = new Uint8Array(this.length) - for (var i = 0, len = buf.length; i < len; i += 1) { - buf[i] = this[i] - } - return buf.buffer - } - } else { - throw new TypeError('Buffer.toArrayBuffer not supported in this browser') - } -} - -// HELPER FUNCTIONS -// ================ - -var BP = Buffer.prototype - -/** - * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods - */ -Buffer._augment = function _augment (arr) { - arr.constructor = Buffer - arr._isBuffer = true - - // save reference to original Uint8Array set method before overwriting - arr._set = arr.set - - // deprecated - arr.get = BP.get - arr.set = BP.set - - arr.write = BP.write - arr.toString = BP.toString - arr.toLocaleString = BP.toString - arr.toJSON = BP.toJSON - arr.equals = BP.equals - arr.compare = BP.compare - arr.indexOf = BP.indexOf - arr.copy = BP.copy - arr.slice = BP.slice - arr.readUIntLE = BP.readUIntLE - arr.readUIntBE = BP.readUIntBE - arr.readUInt8 = BP.readUInt8 - arr.readUInt16LE = BP.readUInt16LE - arr.readUInt16BE = BP.readUInt16BE - arr.readUInt32LE = BP.readUInt32LE - arr.readUInt32BE = BP.readUInt32BE - arr.readIntLE = BP.readIntLE - arr.readIntBE = BP.readIntBE - arr.readInt8 = BP.readInt8 - arr.readInt16LE = BP.readInt16LE - arr.readInt16BE = BP.readInt16BE - arr.readInt32LE = BP.readInt32LE - arr.readInt32BE = BP.readInt32BE - arr.readFloatLE = BP.readFloatLE - arr.readFloatBE = BP.readFloatBE - arr.readDoubleLE = BP.readDoubleLE - arr.readDoubleBE = BP.readDoubleBE - arr.writeUInt8 = BP.writeUInt8 - arr.writeUIntLE = BP.writeUIntLE - arr.writeUIntBE = BP.writeUIntBE - arr.writeUInt16LE = BP.writeUInt16LE - arr.writeUInt16BE = BP.writeUInt16BE - arr.writeUInt32LE = BP.writeUInt32LE - arr.writeUInt32BE = BP.writeUInt32BE - arr.writeIntLE = BP.writeIntLE - arr.writeIntBE = BP.writeIntBE - arr.writeInt8 = BP.writeInt8 - arr.writeInt16LE = BP.writeInt16LE - arr.writeInt16BE = BP.writeInt16BE - arr.writeInt32LE = BP.writeInt32LE - arr.writeInt32BE = BP.writeInt32BE - arr.writeFloatLE = BP.writeFloatLE - arr.writeFloatBE = BP.writeFloatBE - arr.writeDoubleLE = BP.writeDoubleLE - arr.writeDoubleBE = BP.writeDoubleBE - arr.fill = BP.fill - arr.inspect = BP.inspect - arr.toArrayBuffer = BP.toArrayBuffer - - return arr -} - -var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; i++) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; i++) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; i++) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/package.json b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/package.json deleted file mode 100644 index 011ab6aa..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_from": "buffer@^3.0.1", - "_id": "buffer@3.6.0", - "_inBundle": false, - "_integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", - "_location": "/unbzip2-stream/buffer", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "buffer@^3.0.1", - "name": "buffer", - "escapedName": "buffer", - "rawSpec": "^3.0.1", - "saveSpec": null, - "fetchSpec": "^3.0.1" - }, - "_requiredBy": [ - "/unbzip2-stream" - ], - "_resolved": "http://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "_shasum": "a72c936f77b96bf52f5f7e7b467180628551defb", - "_spec": "buffer@^3.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/unbzip2-stream", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "http://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/buffer/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Romain Beauxis", - "email": "toots@rastageeks.org" - }, - { - "name": "James Halliday", - "email": "mail@substack.net" - } - ], - "dependencies": { - "base64-js": "0.0.8", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "deprecated": false, - "description": "Node.js Buffer API, for the browser", - "devDependencies": { - "benchmark": "^1.0.0", - "browserify": "^12.0.1", - "concat-stream": "^1.4.7", - "hyperquest": "^1.0.1", - "is-nan": "^1.0.1", - "split": "^1.0.0", - "standard": "^5.0.0", - "tape": "^4.0.0", - "through2": "^2.0.0", - "zuul": "^3.0.0" - }, - "homepage": "https://github.com/feross/buffer", - "jspm": { - "map": { - "./index.js": { - "node": "@node/buffer" - } - } - }, - "keywords": [ - "buffer", - "browserify", - "compatible", - "browser", - "arraybuffer", - "uint8array", - "dataview" - ], - "license": "MIT", - "main": "index.js", - "name": "buffer", - "repository": { - "type": "git", - "url": "git://github.com/feross/buffer.git" - }, - "scripts": { - "perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html", - "perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js", - "size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c", - "test": "standard && node ./bin/test.js", - "test-browser": "zuul -- test/*.js test/node/*.js", - "test-browser-local": "zuul --local -- test/*.js test/node/*.js", - "test-node": "tape test/*.js test/node/*.js test/node-es6/*.js && OBJECT_IMPL=true tape test/*.js test/node/*.js" - }, - "standard": { - "ignore": [ - "test/node/*.js", - "test/node-es6/*.js", - "test/_polyfill.js", - "perf/*.js" - ] - }, - "version": "3.6.0" -} diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/_polyfill.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/_polyfill.js deleted file mode 100644 index 61f9c180..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/_polyfill.js +++ /dev/null @@ -1,150 +0,0 @@ -if (!Array.prototype.forEach) { - - Array.prototype.forEach = function(callback, thisArg) { - - var T, k; - - if (this == null) { - throw new TypeError(' this is null or not defined'); - } - - // 1. Let O be the result of calling ToObject passing the |this| value as the argument. - var O = Object(this); - - // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length". - // 3. Let len be ToUint32(lenValue). - var len = O.length >>> 0; - - // 4. If IsCallable(callback) is false, throw a TypeError exception. - // See: http://es5.github.com/#x9.11 - if (typeof callback !== "function") { - throw new TypeError(callback + ' is not a function'); - } - - // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. - if (arguments.length > 1) { - T = thisArg; - } - - // 6. Let k be 0 - k = 0; - - // 7. Repeat, while k < len - while (k < len) { - - var kValue; - - // a. Let Pk be ToString(k). - // This is implicit for LHS operands of the in operator - // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk. - // This step can be combined with c - // c. If kPresent is true, then - if (k in O) { - - // i. Let kValue be the result of calling the Get internal method of O with argument Pk. - kValue = O[k]; - - // ii. Call the Call internal method of callback with T as the this value and - // argument list containing kValue, k, and O. - callback.call(T, kValue, k, O); - } - // d. Increase k by 1. - k++; - } - // 8. return undefined - }; -} - -if (!Array.isArray) { - Array.isArray = function(arg) { - return Object.prototype.toString.call(arg) === '[object Array]'; - }; -} - -if (!Array.prototype.map) { - - Array.prototype.map = function(callback, thisArg) { - - var T, A, k; - - if (this == null) { - throw new TypeError(' this is null or not defined'); - } - - // 1. Let O be the result of calling ToObject passing the |this| - // value as the argument. - var O = Object(this); - - // 2. Let lenValue be the result of calling the Get internal - // method of O with the argument "length". - // 3. Let len be ToUint32(lenValue). - var len = O.length >>> 0; - - // 4. If IsCallable(callback) is false, throw a TypeError exception. - // See: http://es5.github.com/#x9.11 - if (typeof callback !== 'function') { - throw new TypeError(callback + ' is not a function'); - } - - // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. - if (arguments.length > 1) { - T = thisArg; - } - - // 6. Let A be a new array created as if by the expression new Array(len) - // where Array is the standard built-in constructor with that name and - // len is the value of len. - A = new Array(len); - - // 7. Let k be 0 - k = 0; - - // 8. Repeat, while k < len - while (k < len) { - - var kValue, mappedValue; - - // a. Let Pk be ToString(k). - // This is implicit for LHS operands of the in operator - // b. Let kPresent be the result of calling the HasProperty internal - // method of O with argument Pk. - // This step can be combined with c - // c. If kPresent is true, then - if (k in O) { - - // i. Let kValue be the result of calling the Get internal - // method of O with argument Pk. - kValue = O[k]; - - // ii. Let mappedValue be the result of calling the Call internal - // method of callback with T as the this value and argument - // list containing kValue, k, and O. - mappedValue = callback.call(T, kValue, k, O); - - // iii. Call the DefineOwnProperty internal method of A with arguments - // Pk, Property Descriptor - // { Value: mappedValue, - // Writable: true, - // Enumerable: true, - // Configurable: true }, - // and false. - - // In browsers that support Object.defineProperty, use the following: - // Object.defineProperty(A, k, { - // value: mappedValue, - // writable: true, - // enumerable: true, - // configurable: true - // }); - - // For best browser support, use the following: - A[k] = mappedValue; - } - // d. Increase k by 1. - k++; - } - - // 9. return A - return A; - }; -} diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/base64.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/base64.js deleted file mode 100644 index e4ecc56a..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/base64.js +++ /dev/null @@ -1,47 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('base64: ignore whitespace', function (t) { - var text = '\n YW9ldQ== ' - var buf = new B(text, 'base64') - t.equal(buf.toString(), 'aoeu') - t.end() -}) - -test('base64: strings without padding', function (t) { - t.equal((new B('YW9ldQ', 'base64').toString()), 'aoeu') - t.end() -}) - -test('base64: newline in utf8 -- should not be an issue', function (t) { - t.equal( - new B('LS0tCnRpdGxlOiBUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3QKdGFnczoK', 'base64').toString('utf8'), - '---\ntitle: Three dashes marks the spot\ntags:\n' - ) - t.end() -}) - -test('base64: newline in base64 -- should get stripped', function (t) { - t.equal( - new B('LS0tCnRpdGxlOiBUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3QKdGFnczoK\nICAtIHlhbWwKICAtIGZyb250LW1hdHRlcgogIC0gZGFzaGVzCmV4cGFuZWQt', 'base64').toString('utf8'), - '---\ntitle: Three dashes marks the spot\ntags:\n - yaml\n - front-matter\n - dashes\nexpaned-' - ) - t.end() -}) - -test('base64: tab characters in base64 - should get stripped', function (t) { - t.equal( - new B('LS0tCnRpdGxlOiBUaHJlZSBkYXNoZXMgbWFya3MgdGhlIHNwb3QKdGFnczoK\t\t\t\tICAtIHlhbWwKICAtIGZyb250LW1hdHRlcgogIC0gZGFzaGVzCmV4cGFuZWQt', 'base64').toString('utf8'), - '---\ntitle: Three dashes marks the spot\ntags:\n - yaml\n - front-matter\n - dashes\nexpaned-' - ) - t.end() -}) - -test('base64: invalid non-alphanumeric characters -- should be stripped', function (t) { - t.equal( - new B('!"#$%&\'()*,.:;<=>?@[\\]^`{|}~', 'base64').toString('utf8'), - '' - ) - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/basic.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/basic.js deleted file mode 100644 index d2fac762..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/basic.js +++ /dev/null @@ -1,91 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('buf.constructor is Buffer', function (t) { - var buf = new B([1, 2]) - t.strictEqual(buf.constructor, B) - t.end() -}) - -test('instanceof Buffer', function (t) { - var buf = new B([1, 2]) - t.ok(buf instanceof B) - t.end() -}) - -test('convert to Uint8Array in modern browsers', function (t) { - if (B.TYPED_ARRAY_SUPPORT) { - var buf = new B([1, 2]) - var uint8array = new Uint8Array(buf.buffer) - t.ok(uint8array instanceof Uint8Array) - t.equal(uint8array[0], 1) - t.equal(uint8array[1], 2) - } else { - t.pass('object impl: skipping test') - } - t.end() -}) - -test('indexes from a string', function (t) { - var buf = new B('abc') - t.equal(buf[0], 97) - t.equal(buf[1], 98) - t.equal(buf[2], 99) - t.end() -}) - -test('indexes from an array', function (t) { - var buf = new B([ 97, 98, 99 ]) - t.equal(buf[0], 97) - t.equal(buf[1], 98) - t.equal(buf[2], 99) - t.end() -}) - -test('setting index value should modify buffer contents', function (t) { - var buf = new B([ 97, 98, 99 ]) - t.equal(buf[2], 99) - t.equal(buf.toString(), 'abc') - - buf[2] += 10 - t.equal(buf[2], 109) - t.equal(buf.toString(), 'abm') - t.end() -}) - -test('storing negative number should cast to unsigned', function (t) { - var buf = new B(1) - - if (B.TYPED_ARRAY_SUPPORT) { - // This does not work with the object implementation -- nothing we can do! - buf[0] = -3 - t.equal(buf[0], 253) - } - - buf = new B(1) - buf.writeInt8(-3, 0) - t.equal(buf[0], 253) - - t.end() -}) - -test('test that memory is copied from array-like', function (t) { - if (B.TYPED_ARRAY_SUPPORT) { - var u = new Uint8Array(4) - var b = new B(u) - b[0] = 1 - b[1] = 2 - b[2] = 3 - b[3] = 4 - - t.equal(u[0], 0) - t.equal(u[1], 0) - t.equal(u[2], 0) - t.equal(u[3], 0) - } else { - t.pass('object impl: skipping test') - } - - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/compare.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/compare.js deleted file mode 100644 index 62b478c7..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/compare.js +++ /dev/null @@ -1,59 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('buffer.compare', function (t) { - var b = new B(1).fill('a') - var c = new B(1).fill('c') - var d = new B(2).fill('aa') - - t.equal(b.compare(c), -1) - t.equal(c.compare(d), 1) - t.equal(d.compare(b), 1) - t.equal(b.compare(d), -1) - - // static method - t.equal(B.compare(b, c), -1) - t.equal(B.compare(c, d), 1) - t.equal(B.compare(d, b), 1) - t.equal(B.compare(b, d), -1) - t.end() -}) - -test('buffer.compare argument validation', function (t) { - t.throws(function () { - var b = new B(1) - B.compare(b, 'abc') - }) - - t.throws(function () { - var b = new B(1) - B.compare('abc', b) - }) - - t.throws(function () { - var b = new B(1) - b.compare('abc') - }) - t.end() -}) - -test('buffer.equals', function (t) { - var b = new B(5).fill('abcdf') - var c = new B(5).fill('abcdf') - var d = new B(5).fill('abcde') - var e = new B(6).fill('abcdef') - - t.ok(b.equals(c)) - t.ok(!c.equals(d)) - t.ok(!d.equals(e)) - t.end() -}) - -test('buffer.equals argument validation', function (t) { - t.throws(function () { - var b = new B(1) - b.equals('abc') - }) - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/constructor.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/constructor.js deleted file mode 100644 index 1661c25d..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/constructor.js +++ /dev/null @@ -1,154 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('new buffer from array', function (t) { - t.equal( - new B([1, 2, 3]).toString(), - '\u0001\u0002\u0003' - ) - t.end() -}) - -test('new buffer from array w/ negatives', function (t) { - t.equal( - new B([-1, -2, -3]).toString('hex'), - 'fffefd' - ) - t.end() -}) - -test('new buffer from array with mixed signed input', function (t) { - t.equal( - new B([-255, 255, -128, 128, 512, -512, 511, -511]).toString('hex'), - '01ff80800000ff01' - ) - t.end() -}) - -test('new buffer from string', function (t) { - t.equal( - new B('hey', 'utf8').toString(), - 'hey' - ) - t.end() -}) - -test('new buffer from buffer', function (t) { - var b1 = new B('asdf') - var b2 = new B(b1) - t.equal(b1.toString('hex'), b2.toString('hex')) - t.end() -}) - -test('new buffer from Uint8Array', function (t) { - if (typeof Uint8Array !== 'undefined') { - var b1 = new Uint8Array([0, 1, 2, 3]) - var b2 = new B(b1) - t.equal(b1.length, b2.length) - t.equal(b1[0], 0) - t.equal(b1[1], 1) - t.equal(b1[2], 2) - t.equal(b1[3], 3) - t.equal(b1[4], undefined) - } - t.end() -}) - -test('new buffer from Uint16Array', function (t) { - if (typeof Uint16Array !== 'undefined') { - var b1 = new Uint16Array([0, 1, 2, 3]) - var b2 = new B(b1) - t.equal(b1.length, b2.length) - t.equal(b1[0], 0) - t.equal(b1[1], 1) - t.equal(b1[2], 2) - t.equal(b1[3], 3) - t.equal(b1[4], undefined) - } - t.end() -}) - -test('new buffer from Uint32Array', function (t) { - if (typeof Uint32Array !== 'undefined') { - var b1 = new Uint32Array([0, 1, 2, 3]) - var b2 = new B(b1) - t.equal(b1.length, b2.length) - t.equal(b1[0], 0) - t.equal(b1[1], 1) - t.equal(b1[2], 2) - t.equal(b1[3], 3) - t.equal(b1[4], undefined) - } - t.end() -}) - -test('new buffer from Int16Array', function (t) { - if (typeof Int16Array !== 'undefined') { - var b1 = new Int16Array([0, 1, 2, 3]) - var b2 = new B(b1) - t.equal(b1.length, b2.length) - t.equal(b1[0], 0) - t.equal(b1[1], 1) - t.equal(b1[2], 2) - t.equal(b1[3], 3) - t.equal(b1[4], undefined) - } - t.end() -}) - -test('new buffer from Int32Array', function (t) { - if (typeof Int32Array !== 'undefined') { - var b1 = new Int32Array([0, 1, 2, 3]) - var b2 = new B(b1) - t.equal(b1.length, b2.length) - t.equal(b1[0], 0) - t.equal(b1[1], 1) - t.equal(b1[2], 2) - t.equal(b1[3], 3) - t.equal(b1[4], undefined) - } - t.end() -}) - -test('new buffer from Float32Array', function (t) { - if (typeof Float32Array !== 'undefined') { - var b1 = new Float32Array([0, 1, 2, 3]) - var b2 = new B(b1) - t.equal(b1.length, b2.length) - t.equal(b1[0], 0) - t.equal(b1[1], 1) - t.equal(b1[2], 2) - t.equal(b1[3], 3) - t.equal(b1[4], undefined) - } - t.end() -}) - -test('new buffer from Float64Array', function (t) { - if (typeof Float64Array !== 'undefined') { - var b1 = new Float64Array([0, 1, 2, 3]) - var b2 = new B(b1) - t.equal(b1.length, b2.length) - t.equal(b1[0], 0) - t.equal(b1[1], 1) - t.equal(b1[2], 2) - t.equal(b1[3], 3) - t.equal(b1[4], undefined) - } - t.end() -}) - -test('new buffer from buffer.toJSON() output', function (t) { - if (typeof JSON === 'undefined') { - // ie6, ie7 lack support - t.end() - return - } - var buf = new B('test') - var json = JSON.stringify(buf) - var obj = JSON.parse(json) - var copy = new B(obj) - t.ok(buf.equals(copy)) - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/deprecated.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/deprecated.js deleted file mode 100644 index 991d6142..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/deprecated.js +++ /dev/null @@ -1,19 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('.get (deprecated)', function (t) { - var b = new B([7, 42]) - t.equal(b.get(0), 7) - t.equal(b.get(1), 42) - t.end() -}) - -test('.set (deprecated)', function (t) { - var b = new B(2) - b.set(7, 0) - b.set(42, 1) - t.equal(b[0], 7) - t.equal(b[1], 42) - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/from-string.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/from-string.js deleted file mode 100644 index e25db269..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/from-string.js +++ /dev/null @@ -1,132 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('detect utf16 surrogate pairs', function (t) { - var text = '\uD83D\uDE38' + '\uD83D\uDCAD' + '\uD83D\uDC4D' - var buf = new B(text) - t.equal(text, buf.toString()) - t.end() -}) - -test('detect utf16 surrogate pairs over U+20000 until U+10FFFF', function (t) { - var text = '\uD842\uDFB7' + '\uD93D\uDCAD' + '\uDBFF\uDFFF' - var buf = new B(text) - t.equal(text, buf.toString()) - t.end() -}) - -test('replace orphaned utf16 surrogate lead code point', function (t) { - var text = '\uD83D\uDE38' + '\uD83D' + '\uD83D\uDC4D' - var buf = new B(text) - t.deepEqual(buf, new B([ 0xf0, 0x9f, 0x98, 0xb8, 0xef, 0xbf, 0xbd, 0xf0, 0x9f, 0x91, 0x8d ])) - t.end() -}) - -test('replace orphaned utf16 surrogate trail code point', function (t) { - var text = '\uD83D\uDE38' + '\uDCAD' + '\uD83D\uDC4D' - var buf = new B(text) - t.deepEqual(buf, new B([ 0xf0, 0x9f, 0x98, 0xb8, 0xef, 0xbf, 0xbd, 0xf0, 0x9f, 0x91, 0x8d ])) - t.end() -}) - -test('do not write partial utf16 code units', function (t) { - var f = new B([0, 0, 0, 0, 0]) - t.equal(f.length, 5) - var size = f.write('あいうえお', 'utf16le') - t.equal(size, 4) - t.deepEqual(f, new B([0x42, 0x30, 0x44, 0x30, 0x00])) - t.end() -}) - -test('handle partial utf16 code points when encoding to utf8 the way node does', function (t) { - var text = '\uD83D\uDE38' + '\uD83D\uDC4D' - - var buf = new B(8) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0xf0, 0x9f, 0x98, 0xb8, 0xf0, 0x9f, 0x91, 0x8d ])) - - buf = new B(7) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0xf0, 0x9f, 0x98, 0xb8, 0x00, 0x00, 0x00 ])) - - buf = new B(6) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0xf0, 0x9f, 0x98, 0xb8, 0x00, 0x00 ])) - - buf = new B(5) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0xf0, 0x9f, 0x98, 0xb8, 0x00 ])) - - buf = new B(4) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0xf0, 0x9f, 0x98, 0xb8 ])) - - buf = new B(3) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x00, 0x00, 0x00 ])) - - buf = new B(2) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x00, 0x00 ])) - - buf = new B(1) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x00 ])) - - t.end() -}) - -test('handle invalid utf16 code points when encoding to utf8 the way node does', function (t) { - var text = 'a' + '\uDE38\uD83D' + 'b' - - var buf = new B(8) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61, 0xef, 0xbf, 0xbd, 0xef, 0xbf, 0xbd, 0x62 ])) - - buf = new B(7) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61, 0xef, 0xbf, 0xbd, 0xef, 0xbf, 0xbd ])) - - buf = new B(6) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61, 0xef, 0xbf, 0xbd, 0x00, 0x00 ])) - - buf = new B(5) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61, 0xef, 0xbf, 0xbd, 0x00 ])) - - buf = new B(4) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61, 0xef, 0xbf, 0xbd ])) - - buf = new B(3) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61, 0x00, 0x00 ])) - - buf = new B(2) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61, 0x00 ])) - - buf = new B(1) - buf.fill(0) - buf.write(text) - t.deepEqual(buf, new B([ 0x61 ])) - - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/methods.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/methods.js deleted file mode 100644 index f4bd3f21..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/methods.js +++ /dev/null @@ -1,127 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('buffer.toJSON', function (t) { - var data = [1, 2, 3, 4] - t.deepEqual( - new B(data).toJSON(), - { type: 'Buffer', data: [ 1, 2, 3, 4 ] } - ) - t.end() -}) - -test('buffer.copy', function (t) { - // copied from nodejs.org example - var buf1 = new B(26) - var buf2 = new B(26) - - for (var i = 0; i < 26; i++) { - buf1[i] = i + 97 // 97 is ASCII a - buf2[i] = 33 // ASCII ! - } - - buf1.copy(buf2, 8, 16, 20) - - t.equal( - buf2.toString('ascii', 0, 25), - '!!!!!!!!qrst!!!!!!!!!!!!!' - ) - t.end() -}) - -test('test offset returns are correct', function (t) { - var b = new B(16) - t.equal(4, b.writeUInt32LE(0, 0)) - t.equal(6, b.writeUInt16LE(0, 4)) - t.equal(7, b.writeUInt8(0, 6)) - t.equal(8, b.writeInt8(0, 7)) - t.equal(16, b.writeDoubleLE(0, 8)) - t.end() -}) - -test('concat() a varying number of buffers', function (t) { - var zero = [] - var one = [ new B('asdf') ] - var long = [] - for (var i = 0; i < 10; i++) { - long.push(new B('asdf')) - } - - var flatZero = B.concat(zero) - var flatOne = B.concat(one) - var flatLong = B.concat(long) - var flatLongLen = B.concat(long, 40) - - t.equal(flatZero.length, 0) - t.equal(flatOne.toString(), 'asdf') - t.deepEqual(flatOne, one[0]) - t.equal(flatLong.toString(), (new Array(10 + 1).join('asdf'))) - t.equal(flatLongLen.toString(), (new Array(10 + 1).join('asdf'))) - t.end() -}) - -test('fill', function (t) { - var b = new B(10) - b.fill(2) - t.equal(b.toString('hex'), '02020202020202020202') - t.end() -}) - -test('fill (string)', function (t) { - var b = new B(10) - b.fill('abc') - t.equal(b.toString(), 'abcabcabca') - b.fill('է') - t.equal(b.toString(), 'էէէէէ') - t.end() -}) - -test('copy() empty buffer with sourceEnd=0', function (t) { - var source = new B([42]) - var destination = new B([43]) - source.copy(destination, 0, 0, 0) - t.equal(destination.readUInt8(0), 43) - t.end() -}) - -test('copy() after slice()', function (t) { - var source = new B(200) - var dest = new B(200) - var expected = new B(200) - for (var i = 0; i < 200; i++) { - source[i] = i - dest[i] = 0 - } - - source.slice(2).copy(dest) - source.copy(expected, 0, 2) - t.deepEqual(dest, expected) - t.end() -}) - -test('copy() ascending', function (t) { - var b = new B('abcdefghij') - b.copy(b, 0, 3, 10) - t.equal(b.toString(), 'defghijhij') - t.end() -}) - -test('copy() descending', function (t) { - var b = new B('abcdefghij') - b.copy(b, 3, 0, 7) - t.equal(b.toString(), 'abcabcdefg') - t.end() -}) - -test('buffer.slice sets indexes', function (t) { - t.equal((new B('hallo')).slice(0, 5).toString(), 'hallo') - t.end() -}) - -test('buffer.slice out of range', function (t) { - t.plan(2) - t.equal((new B('hallo')).slice(0, 10).toString(), 'hallo') - t.equal((new B('hallo')).slice(10, 2).toString(), '') - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/README.txt b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/README.txt deleted file mode 100644 index 94199ff3..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/README.txt +++ /dev/null @@ -1 +0,0 @@ -node buffer tests that require ES6 (e.g. "for..of" construct) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/test-buffer-arraybuffer.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/test-buffer-arraybuffer.js deleted file mode 100644 index f0eb57c7..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/test-buffer-arraybuffer.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; - -var common = {}; -var assert = require('assert'); - -var Buffer = require('../../').Buffer; -var LENGTH = 16; - -var ab = new ArrayBuffer(LENGTH); -var dv = new DataView(ab); -var ui = new Uint8Array(ab); -var buf = new Buffer(ab); - - -assert.ok(Buffer.isBuffer(buf)); -// For backwards compatibility of old .parent property test that if buf is not -// a slice then .parent should be undefined. -assert.equal(buf.parent, undefined); -assert.equal(buf.buffer, ab); -assert.equal(buf.length, ab.byteLength); - - -buf.fill(0xC); -for (var i = 0; i < LENGTH; i++) { - assert.equal(ui[i], 0xC); - ui[i] = 0xF; - assert.equal(buf[i], 0xF); -} - -buf.writeUInt32LE(0xF00, 0); -buf.writeUInt32BE(0xB47, 4); -buf.writeDoubleLE(3.1415, 8); - -assert.equal(dv.getUint32(0, true), 0xF00); -assert.equal(dv.getUint32(4), 0xB47); -assert.equal(dv.getFloat64(8, true), 3.1415); - - -// Now test protecting users from doing stupid things - -assert.throws(function() { - function AB() { } - AB.__proto__ = ArrayBuffer; - AB.prototype.__proto__ = ArrayBuffer.prototype; - new Buffer(new AB()); -}, TypeError); - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/test-buffer-iterator.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/test-buffer-iterator.js deleted file mode 100644 index 3aa3fbf0..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node-es6/test-buffer-iterator.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; -var common = {}; -var assert = require('assert'); - -var buffer = new Buffer([1, 2, 3, 4, 5]); -var arr; -var b; - -// buffers should be iterable - -arr = []; - -for (b of buffer) - arr.push(b); - -assert.deepEqual(arr, [1, 2, 3, 4, 5]); - - -// buffer iterators should be iterable - -arr = []; - -for (b of buffer[Symbol.iterator]()) - arr.push(b); - -assert.deepEqual(arr, [1, 2, 3, 4, 5]); - - -// buffer#values() should return iterator for values - -arr = []; - -for (b of buffer.values()) - arr.push(b); - -assert.deepEqual(arr, [1, 2, 3, 4, 5]); - - -// buffer#keys() should return iterator for keys - -arr = []; - -for (b of buffer.keys()) - arr.push(b); - -assert.deepEqual(arr, [0, 1, 2, 3, 4]); - - -// buffer#entries() should return iterator for entries - -arr = []; - -for (var b of buffer.entries()) - arr.push(b); - -assert.deepEqual(arr, [ - [0, 1], - [1, 2], - [2, 3], - [3, 4], - [4, 5] -]); - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/README.txt b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/README.txt deleted file mode 100644 index a0fd927f..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/README.txt +++ /dev/null @@ -1 +0,0 @@ -node core buffer tests diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-ascii.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-ascii.js deleted file mode 100644 index 633a6779..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-ascii.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; -var common = {}; -var assert = require('assert'); - -// ASCII conversion in node.js simply masks off the high bits, -// it doesn't do transliteration. -assert.equal(Buffer('hérité').toString('ascii'), 'hC)ritC)'); - -// 71 characters, 78 bytes. The ’ character is a triple-byte sequence. -var input = 'C’est, graphiquement, la réunion d’un accent aigu ' + - 'et d’un accent grave.'; - -var expected = 'Cb\u0000\u0019est, graphiquement, la rC)union ' + - 'db\u0000\u0019un accent aigu et db\u0000\u0019un ' + - 'accent grave.'; - -var buf = Buffer(input); - -for (var i = 0; i < expected.length; ++i) { - assert.equal(buf.slice(i).toString('ascii'), expected.slice(i)); - - // Skip remainder of multi-byte sequence. - if (input.charCodeAt(i) > 65535) ++i; - if (input.charCodeAt(i) > 127) ++i; -} - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-bytelength.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-bytelength.js deleted file mode 100644 index d63922e9..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-bytelength.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; - -var common = {}; -var assert = require('assert'); -var Buffer = require('../../').Buffer; - -// coerce values to string -assert.equal(Buffer.byteLength(32, 'raw'), 2); -assert.equal(Buffer.byteLength(NaN, 'utf8'), 3); -assert.equal(Buffer.byteLength({}, 'raws'), 15); -assert.equal(Buffer.byteLength(), 9); - -// special case: zero length string -assert.equal(Buffer.byteLength('', 'ascii'), 0); -assert.equal(Buffer.byteLength('', 'HeX'), 0); - -// utf8 -assert.equal(Buffer.byteLength('∑éllö wørl∂!', 'utf-8'), 19); -assert.equal(Buffer.byteLength('κλμνξο', 'utf8'), 12); -assert.equal(Buffer.byteLength('挵挶挷挸挹', 'utf-8'), 15); -assert.equal(Buffer.byteLength('𠝹𠱓𠱸', 'UTF8'), 12); -// without an encoding, utf8 should be assumed -assert.equal(Buffer.byteLength('hey there'), 9); -assert.equal(Buffer.byteLength('𠱸挶νξ#xx :)'), 17); -assert.equal(Buffer.byteLength('hello world', ''), 11); -// it should also be assumed with unrecognized encoding -assert.equal(Buffer.byteLength('hello world', 'abc'), 11); -assert.equal(Buffer.byteLength('ßœ∑≈', 'unkn0wn enc0ding'), 10); - -// base64 -assert.equal(Buffer.byteLength('aGVsbG8gd29ybGQ=', 'base64'), 11); -assert.equal(Buffer.byteLength('bm9kZS5qcyByb2NrcyE=', 'base64'), 14); -assert.equal(Buffer.byteLength('aGkk', 'base64'), 3); -assert.equal(Buffer.byteLength('bHNrZGZsa3NqZmtsc2xrZmFqc2RsZmtqcw==', - 'base64'), 25); -// special padding -assert.equal(Buffer.byteLength('aaa=', 'base64'), 2); -assert.equal(Buffer.byteLength('aaaa==', 'base64'), 3); - -assert.equal(Buffer.byteLength('Il était tué'), 14); -assert.equal(Buffer.byteLength('Il était tué', 'utf8'), 14); -assert.equal(Buffer.byteLength('Il était tué', 'ascii'), 12); -assert.equal(Buffer.byteLength('Il était tué', 'binary'), 12); -['ucs2', 'ucs-2', 'utf16le', 'utf-16le'].forEach(function(encoding) { - assert.equal(24, Buffer.byteLength('Il était tué', encoding)); -}); - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-concat.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-concat.js deleted file mode 100644 index f6b60ae8..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-concat.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; -var common = {}; -var assert = require('assert'); - -var zero = []; -var one = [ new Buffer('asdf') ]; -var long = []; -for (var i = 0; i < 10; i++) long.push(new Buffer('asdf')); - -var flatZero = Buffer.concat(zero); -var flatOne = Buffer.concat(one); -var flatLong = Buffer.concat(long); -var flatLongLen = Buffer.concat(long, 40); - -assert(flatZero.length === 0); -assert(flatOne.toString() === 'asdf'); -// A special case where concat used to return the first item, -// if the length is one. This check is to make sure that we don't do that. -assert(flatOne !== one[0]); -assert(flatLong.toString() === (new Array(10 + 1).join('asdf'))); -assert(flatLongLen.toString() === (new Array(10 + 1).join('asdf'))); - -assert.throws(function() { - Buffer.concat([42]); -}, TypeError); - -// console.log('ok'); - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-indexof.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-indexof.js deleted file mode 100644 index 283b9c8b..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-indexof.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; -var common = {}; -var assert = require('assert'); - -var Buffer = require('../../').Buffer; - -var b = new Buffer('abcdef'); -var buf_a = new Buffer('a'); -var buf_bc = new Buffer('bc'); -var buf_f = new Buffer('f'); -var buf_z = new Buffer('z'); -var buf_empty = new Buffer(''); - -assert.equal(b.indexOf('a'), 0); -assert.equal(b.indexOf('a', 1), -1); -assert.equal(b.indexOf('a', -1), -1); -assert.equal(b.indexOf('a', -4), -1); -assert.equal(b.indexOf('a', -b.length), 0); -assert.equal(b.indexOf('a', NaN), 0); -assert.equal(b.indexOf('a', -Infinity), 0); -assert.equal(b.indexOf('a', Infinity), -1); -assert.equal(b.indexOf('bc'), 1); -assert.equal(b.indexOf('bc', 2), -1); -assert.equal(b.indexOf('bc', -1), -1); -assert.equal(b.indexOf('bc', -3), -1); -assert.equal(b.indexOf('bc', -5), 1); -assert.equal(b.indexOf('bc', NaN), 1); -assert.equal(b.indexOf('bc', -Infinity), 1); -assert.equal(b.indexOf('bc', Infinity), -1); -assert.equal(b.indexOf('f'), b.length - 1); -assert.equal(b.indexOf('z'), -1); -assert.equal(b.indexOf(''), -1); -assert.equal(b.indexOf('', 1), -1); -assert.equal(b.indexOf('', b.length + 1), -1); -assert.equal(b.indexOf('', Infinity), -1); -assert.equal(b.indexOf(buf_a), 0); -assert.equal(b.indexOf(buf_a, 1), -1); -assert.equal(b.indexOf(buf_a, -1), -1); -assert.equal(b.indexOf(buf_a, -4), -1); -assert.equal(b.indexOf(buf_a, -b.length), 0); -assert.equal(b.indexOf(buf_a, NaN), 0); -assert.equal(b.indexOf(buf_a, -Infinity), 0); -assert.equal(b.indexOf(buf_a, Infinity), -1); -assert.equal(b.indexOf(buf_bc), 1); -assert.equal(b.indexOf(buf_bc, 2), -1); -assert.equal(b.indexOf(buf_bc, -1), -1); -assert.equal(b.indexOf(buf_bc, -3), -1); -assert.equal(b.indexOf(buf_bc, -5), 1); -assert.equal(b.indexOf(buf_bc, NaN), 1); -assert.equal(b.indexOf(buf_bc, -Infinity), 1); -assert.equal(b.indexOf(buf_bc, Infinity), -1); -assert.equal(b.indexOf(buf_f), b.length - 1); -assert.equal(b.indexOf(buf_z), -1); -assert.equal(b.indexOf(buf_empty), -1); -assert.equal(b.indexOf(buf_empty, 1), -1); -assert.equal(b.indexOf(buf_empty, b.length + 1), -1); -assert.equal(b.indexOf(buf_empty, Infinity), -1); -assert.equal(b.indexOf(0x61), 0); -assert.equal(b.indexOf(0x61, 1), -1); -assert.equal(b.indexOf(0x61, -1), -1); -assert.equal(b.indexOf(0x61, -4), -1); -assert.equal(b.indexOf(0x61, -b.length), 0); -assert.equal(b.indexOf(0x61, NaN), 0); -assert.equal(b.indexOf(0x61, -Infinity), 0); -assert.equal(b.indexOf(0x61, Infinity), -1); -assert.equal(b.indexOf(0x0), -1); - -assert.throws(function() { - b.indexOf(function() { }); -}); -assert.throws(function() { - b.indexOf({}); -}); -assert.throws(function() { - b.indexOf([]); -}); - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-inspect.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-inspect.js deleted file mode 100644 index 719444f3..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer-inspect.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; -var common = {}; -var assert = require('assert'); - -var util = require('util'); - -var buffer = require('../../'); - -buffer.INSPECT_MAX_BYTES = 2; - -var b = new Buffer(4); -b.fill('1234'); - -var s = new buffer.SlowBuffer(4); -s.fill('1234'); - -var expected = ''; - -assert.strictEqual(util.inspect(b), expected); -assert.strictEqual(util.inspect(s), expected); - -b = new Buffer(2); -b.fill('12'); - -s = new buffer.SlowBuffer(2); -s.fill('12'); - -expected = ''; - -assert.strictEqual(util.inspect(b), expected); -assert.strictEqual(util.inspect(s), expected); - -buffer.INSPECT_MAX_BYTES = Infinity; - -assert.doesNotThrow(function() { - assert.strictEqual(util.inspect(b), expected); - assert.strictEqual(util.inspect(s), expected); -}); - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer.js deleted file mode 100644 index d6468f6a..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/node/test-buffer.js +++ /dev/null @@ -1,1194 +0,0 @@ -'use strict'; -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false; -var Buffer = require('../../').Buffer; -var common = {}; -var assert = require('assert'); - -var Buffer = require('../../').Buffer; -var SlowBuffer = require('../../').SlowBuffer; - -// counter to ensure unique value is always copied -var cntr = 0; - -var b = Buffer(1024); // safe constructor - -// console.log('b.length == %d', b.length); -assert.strictEqual(1024, b.length); - -b[0] = 255; -assert.strictEqual(b[0], 255); - -for (var i = 0; i < 1024; i++) { - b[i] = i % 256; -} - -for (var i = 0; i < 1024; i++) { - assert.strictEqual(i % 256, b[i]); -} - -var c = new Buffer(512); -// console.log('c.length == %d', c.length); -assert.strictEqual(512, c.length); - -// First check Buffer#fill() works as expected. - -assert.throws(function() { - Buffer(8).fill('a', -1); -}); - -assert.throws(function() { - Buffer(8).fill('a', 0, 9); -}); - -// Make sure this doesn't hang indefinitely. -Buffer(8).fill(''); - -var buf = new Buffer(64); -buf.fill(10); -for (var i = 0; i < buf.length; i++) - assert.equal(buf[i], 10); - -buf.fill(11, 0, buf.length >> 1); -for (var i = 0; i < buf.length >> 1; i++) - assert.equal(buf[i], 11); -for (var i = (buf.length >> 1) + 1; i < buf.length; i++) - assert.equal(buf[i], 10); - -buf.fill('h'); -for (var i = 0; i < buf.length; i++) - assert.equal('h'.charCodeAt(0), buf[i]); - -buf.fill(0); -for (var i = 0; i < buf.length; i++) - assert.equal(0, buf[i]); - -buf.fill(null); -for (var i = 0; i < buf.length; i++) - assert.equal(0, buf[i]); - -buf.fill(1, 16, 32); -for (var i = 0; i < 16; i++) - assert.equal(0, buf[i]); -for (; i < 32; i++) - assert.equal(1, buf[i]); -for (; i < buf.length; i++) - assert.equal(0, buf[i]); - -var buf = new Buffer(10); -buf.fill('abc'); -assert.equal(buf.toString(), 'abcabcabca'); -buf.fill('է'); -assert.equal(buf.toString(), 'էէէէէ'); - -// copy 512 bytes, from 0 to 512. -b.fill(++cntr); -c.fill(++cntr); -var copied = b.copy(c, 0, 0, 512); -// console.log('copied %d bytes from b into c', copied); -assert.strictEqual(512, copied); -for (var i = 0; i < c.length; i++) { - assert.strictEqual(b[i], c[i]); -} - -// copy c into b, without specifying sourceEnd -b.fill(++cntr); -c.fill(++cntr); -var copied = c.copy(b, 0, 0); -// console.log('copied %d bytes from c into b w/o sourceEnd', copied); -assert.strictEqual(c.length, copied); -for (var i = 0; i < c.length; i++) { - assert.strictEqual(c[i], b[i]); -} - -// copy c into b, without specifying sourceStart -b.fill(++cntr); -c.fill(++cntr); -var copied = c.copy(b, 0); -// console.log('copied %d bytes from c into b w/o sourceStart', copied); -assert.strictEqual(c.length, copied); -for (var i = 0; i < c.length; i++) { - assert.strictEqual(c[i], b[i]); -} - -// copy longer buffer b to shorter c without targetStart -b.fill(++cntr); -c.fill(++cntr); -var copied = b.copy(c); -// console.log('copied %d bytes from b into c w/o targetStart', copied); -assert.strictEqual(c.length, copied); -for (var i = 0; i < c.length; i++) { - assert.strictEqual(b[i], c[i]); -} - -// copy starting near end of b to c -b.fill(++cntr); -c.fill(++cntr); -var copied = b.copy(c, 0, b.length - Math.floor(c.length / 2)); -// console.log('copied %d bytes from end of b into beginning of c', copied); -assert.strictEqual(Math.floor(c.length / 2), copied); -for (var i = 0; i < Math.floor(c.length / 2); i++) { - assert.strictEqual(b[b.length - Math.floor(c.length / 2) + i], c[i]); -} -for (var i = Math.floor(c.length / 2) + 1; i < c.length; i++) { - assert.strictEqual(c[c.length - 1], c[i]); -} - -// try to copy 513 bytes, and check we don't overrun c -b.fill(++cntr); -c.fill(++cntr); -var copied = b.copy(c, 0, 0, 513); -// console.log('copied %d bytes from b trying to overrun c', copied); -assert.strictEqual(c.length, copied); -for (var i = 0; i < c.length; i++) { - assert.strictEqual(b[i], c[i]); -} - -// copy 768 bytes from b into b -b.fill(++cntr); -b.fill(++cntr, 256); -var copied = b.copy(b, 0, 256, 1024); -// console.log('copied %d bytes from b into b', copied); -assert.strictEqual(768, copied); -for (var i = 0; i < b.length; i++) { - assert.strictEqual(cntr, b[i]); -} - -// copy string longer than buffer length (failure will segfault) -var bb = new Buffer(10); -bb.fill('hello crazy world'); - - -var caught_error = null; - -// try to copy from before the beginning of b -caught_error = null; -try { - var copied = b.copy(c, 0, 100, 10); -} catch (err) { - caught_error = err; -} - -// copy throws at negative sourceStart -assert.throws(function() { - Buffer(5).copy(Buffer(5), 0, -1); -}, RangeError); - -// check sourceEnd resets to targetEnd if former is greater than the latter -b.fill(++cntr); -c.fill(++cntr); -var copied = b.copy(c, 0, 0, 1025); -// console.log('copied %d bytes from b into c', copied); -for (var i = 0; i < c.length; i++) { - assert.strictEqual(b[i], c[i]); -} - -// throw with negative sourceEnd -// console.log('test copy at negative sourceEnd'); -assert.throws(function() { - b.copy(c, 0, 0, -1); -}, RangeError); - -// when sourceStart is greater than sourceEnd, zero copied -assert.equal(b.copy(c, 0, 100, 10), 0); - -// when targetStart > targetLength, zero copied -assert.equal(b.copy(c, 512, 0, 10), 0); - -var caught_error; - -// invalid encoding for Buffer.toString -caught_error = null; -try { - var copied = b.toString('invalid'); -} catch (err) { - caught_error = err; -} -assert.strictEqual('Unknown encoding: invalid', caught_error.message); - -// invalid encoding for Buffer.write -caught_error = null; -try { - var copied = b.write('test string', 0, 5, 'invalid'); -} catch (err) { - caught_error = err; -} -assert.strictEqual('Unknown encoding: invalid', caught_error.message); - -// try to create 0-length buffers -new Buffer(''); -new Buffer('', 'ascii'); -new Buffer('', 'binary'); -new Buffer(0); - -// try to write a 0-length string beyond the end of b -assert.throws(function() { - b.write('', 2048); -}, RangeError); - -// throw when writing to negative offset -assert.throws(function() { - b.write('a', -1); -}, RangeError); - -// throw when writing past bounds from the pool -assert.throws(function() { - b.write('a', 2048); -}, RangeError); - -// throw when writing to negative offset -assert.throws(function() { - b.write('a', -1); -}, RangeError); - -// try to copy 0 bytes worth of data into an empty buffer -b.copy(new Buffer(0), 0, 0, 0); - -// try to copy 0 bytes past the end of the target buffer -b.copy(new Buffer(0), 1, 1, 1); -b.copy(new Buffer(1), 1, 1, 1); - -// try to copy 0 bytes from past the end of the source buffer -b.copy(new Buffer(1), 0, 2048, 2048); - -// try to toString() a 0-length slice of a buffer, both within and without the -// valid buffer range -assert.equal(new Buffer('abc').toString('ascii', 0, 0), ''); -assert.equal(new Buffer('abc').toString('ascii', -100, -100), ''); -assert.equal(new Buffer('abc').toString('ascii', 100, 100), ''); - -// try toString() with a object as a encoding -assert.equal(new Buffer('abc').toString({toString: function() { - return 'ascii'; -}}), 'abc'); - -// testing for smart defaults and ability to pass string values as offset -var writeTest = new Buffer('abcdes'); -writeTest.write('n', 'ascii'); -writeTest.write('o', 'ascii', '1'); -writeTest.write('d', '2', 'ascii'); -writeTest.write('e', 3, 'ascii'); -writeTest.write('j', 'ascii', 4); -assert.equal(writeTest.toString(), 'nodejs'); - -// ASCII slice test - -var asciiString = 'hello world'; -var offset = 100; - -for (var i = 0; i < asciiString.length; i++) { - b[i] = asciiString.charCodeAt(i); -} -var asciiSlice = b.toString('ascii', 0, asciiString.length); -assert.equal(asciiString, asciiSlice); - -var written = b.write(asciiString, offset, 'ascii'); -assert.equal(asciiString.length, written); -var asciiSlice = b.toString('ascii', offset, offset + asciiString.length); -assert.equal(asciiString, asciiSlice); - -var sliceA = b.slice(offset, offset + asciiString.length); -var sliceB = b.slice(offset, offset + asciiString.length); -for (var i = 0; i < asciiString.length; i++) { - assert.equal(sliceA[i], sliceB[i]); -} - -// UTF-8 slice test - -var utf8String = '¡hέlló wôrld!'; -var offset = 100; - -b.write(utf8String, 0, Buffer.byteLength(utf8String), 'utf8'); -var utf8Slice = b.toString('utf8', 0, Buffer.byteLength(utf8String)); -assert.equal(utf8String, utf8Slice); - -var written = b.write(utf8String, offset, 'utf8'); -assert.equal(Buffer.byteLength(utf8String), written); -utf8Slice = b.toString('utf8', offset, offset + Buffer.byteLength(utf8String)); -assert.equal(utf8String, utf8Slice); - -var sliceA = b.slice(offset, offset + Buffer.byteLength(utf8String)); -var sliceB = b.slice(offset, offset + Buffer.byteLength(utf8String)); -for (var i = 0; i < Buffer.byteLength(utf8String); i++) { - assert.equal(sliceA[i], sliceB[i]); -} - -var slice = b.slice(100, 150); -assert.equal(50, slice.length); -for (var i = 0; i < 50; i++) { - assert.equal(b[100 + i], slice[i]); -} - - -// make sure only top level parent propagates from allocPool -var b = new Buffer(5); -var c = b.slice(0, 4); -var d = c.slice(0, 2); -assert.equal(b.parent, c.parent); -assert.equal(b.parent, d.parent); - -// also from a non-pooled instance -var b = new SlowBuffer(5); -var c = b.slice(0, 4); -var d = c.slice(0, 2); - - -// Bug regression test -var testValue = '\u00F6\u65E5\u672C\u8A9E'; // ö日本語 -var buffer = new Buffer(32); -var size = buffer.write(testValue, 0, 'utf8'); -// console.log('bytes written to buffer: ' + size); -var slice = buffer.toString('utf8', 0, size); -assert.equal(slice, testValue); - - -// Test triple slice -var a = new Buffer(8); -for (var i = 0; i < 8; i++) a[i] = i; -var b = a.slice(4, 8); -assert.equal(4, b[0]); -assert.equal(5, b[1]); -assert.equal(6, b[2]); -assert.equal(7, b[3]); -var c = b.slice(2, 4); -assert.equal(6, c[0]); -assert.equal(7, c[1]); - - -var d = new Buffer([23, 42, 255]); -assert.equal(d.length, 3); -assert.equal(d[0], 23); -assert.equal(d[1], 42); -assert.equal(d[2], 255); -assert.deepEqual(d, new Buffer(d)); - -var e = new Buffer('über'); -// console.error('uber: \'%s\'', e.toString()); -assert.deepEqual(e, new Buffer([195, 188, 98, 101, 114])); - -var f = new Buffer('über', 'ascii'); -// console.error('f.length: %d (should be 4)', f.length); -assert.deepEqual(f, new Buffer([252, 98, 101, 114])); - -['ucs2', 'ucs-2', 'utf16le', 'utf-16le'].forEach(function(encoding) { - var f = new Buffer('über', encoding); -// console.error('f.length: %d (should be 8)', f.length); - assert.deepEqual(f, new Buffer([252, 0, 98, 0, 101, 0, 114, 0])); - - var f = new Buffer('привет', encoding); -// console.error('f.length: %d (should be 12)', f.length); - assert.deepEqual(f, new Buffer([63, 4, 64, 4, 56, 4, 50, 4, 53, 4, 66, 4])); - assert.equal(f.toString(encoding), 'привет'); - - var f = new Buffer([0, 0, 0, 0, 0]); - assert.equal(f.length, 5); - var size = f.write('あいうえお', encoding); -// console.error('bytes written to buffer: %d (should be 4)', size); - assert.equal(size, 4); - assert.deepEqual(f, new Buffer([0x42, 0x30, 0x44, 0x30, 0x00])); -}); - -var f = new Buffer('\uD83D\uDC4D', 'utf-16le'); // THUMBS UP SIGN (U+1F44D) -assert.equal(f.length, 4); -assert.deepEqual(f, new Buffer('3DD84DDC', 'hex')); - - -var arrayIsh = {0: 0, 1: 1, 2: 2, 3: 3, length: 4}; -var g = new Buffer(arrayIsh); -assert.deepEqual(g, new Buffer([0, 1, 2, 3])); -var strArrayIsh = {0: '0', 1: '1', 2: '2', 3: '3', length: 4}; -g = new Buffer(strArrayIsh); -assert.deepEqual(g, new Buffer([0, 1, 2, 3])); - - -// -// Test toString('base64') -// -assert.equal('TWFu', (new Buffer('Man')).toString('base64')); - -// test that regular and URL-safe base64 both work -var expected = [0xff, 0xff, 0xbe, 0xff, 0xef, 0xbf, 0xfb, 0xef, 0xff]; -assert.deepEqual(Buffer('//++/++/++//', 'base64'), Buffer(expected)); -assert.deepEqual(Buffer('__--_--_--__', 'base64'), Buffer(expected)); - -// big example -var quote = 'Man is distinguished, not only by his reason, but by this ' + - 'singular passion from other animals, which is a lust ' + - 'of the mind, that by a perseverance of delight in the continued ' + - 'and indefatigable generation of knowledge, exceeds the short ' + - 'vehemence of any carnal pleasure.'; -var expected = 'TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24s' + - 'IGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltY' + - 'WxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZX' + - 'JzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmR' + - 'lZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo' + - 'ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4='; -assert.equal(expected, (new Buffer(quote)).toString('base64')); - - -b = new Buffer(1024); -var bytesWritten = b.write(expected, 0, 'base64'); -assert.equal(quote.length, bytesWritten); -assert.equal(quote, b.toString('ascii', 0, quote.length)); - -// check that the base64 decoder ignores whitespace -var expectedWhite = expected.slice(0, 60) + ' \n' + - expected.slice(60, 120) + ' \n' + - expected.slice(120, 180) + ' \n' + - expected.slice(180, 240) + ' \n' + - expected.slice(240, 300) + '\n' + - expected.slice(300, 360) + '\n'; -b = new Buffer(1024); -bytesWritten = b.write(expectedWhite, 0, 'base64'); -assert.equal(quote.length, bytesWritten); -assert.equal(quote, b.toString('ascii', 0, quote.length)); - -// check that the base64 decoder on the constructor works -// even in the presence of whitespace. -b = new Buffer(expectedWhite, 'base64'); -assert.equal(quote.length, b.length); -assert.equal(quote, b.toString('ascii', 0, quote.length)); - -// check that the base64 decoder ignores illegal chars -var expectedIllegal = expected.slice(0, 60) + ' \x80' + - expected.slice(60, 120) + ' \xff' + - expected.slice(120, 180) + ' \x00' + - expected.slice(180, 240) + ' \x98' + - expected.slice(240, 300) + '\x03' + - expected.slice(300, 360); -b = new Buffer(expectedIllegal, 'base64'); -assert.equal(quote.length, b.length); -assert.equal(quote, b.toString('ascii', 0, quote.length)); - - -assert.equal(new Buffer('', 'base64').toString(), ''); -assert.equal(new Buffer('K', 'base64').toString(), ''); - -// multiple-of-4 with padding -assert.equal(new Buffer('Kg==', 'base64').toString(), '*'); -assert.equal(new Buffer('Kio=', 'base64').toString(), '**'); -assert.equal(new Buffer('Kioq', 'base64').toString(), '***'); -assert.equal(new Buffer('KioqKg==', 'base64').toString(), '****'); -assert.equal(new Buffer('KioqKio=', 'base64').toString(), '*****'); -assert.equal(new Buffer('KioqKioq', 'base64').toString(), '******'); -assert.equal(new Buffer('KioqKioqKg==', 'base64').toString(), '*******'); -assert.equal(new Buffer('KioqKioqKio=', 'base64').toString(), '********'); -assert.equal(new Buffer('KioqKioqKioq', 'base64').toString(), '*********'); -assert.equal(new Buffer('KioqKioqKioqKg==', 'base64').toString(), - '**********'); -assert.equal(new Buffer('KioqKioqKioqKio=', 'base64').toString(), - '***********'); -assert.equal(new Buffer('KioqKioqKioqKioq', 'base64').toString(), - '************'); -assert.equal(new Buffer('KioqKioqKioqKioqKg==', 'base64').toString(), - '*************'); -assert.equal(new Buffer('KioqKioqKioqKioqKio=', 'base64').toString(), - '**************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioq', 'base64').toString(), - '***************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKg==', 'base64').toString(), - '****************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKio=', 'base64').toString(), - '*****************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKioq', 'base64').toString(), - '******************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKioqKg==', 'base64').toString(), - '*******************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKioqKio=', 'base64').toString(), - '********************'); - -// no padding, not a multiple of 4 -assert.equal(new Buffer('Kg', 'base64').toString(), '*'); -assert.equal(new Buffer('Kio', 'base64').toString(), '**'); -assert.equal(new Buffer('KioqKg', 'base64').toString(), '****'); -assert.equal(new Buffer('KioqKio', 'base64').toString(), '*****'); -assert.equal(new Buffer('KioqKioqKg', 'base64').toString(), '*******'); -assert.equal(new Buffer('KioqKioqKio', 'base64').toString(), '********'); -assert.equal(new Buffer('KioqKioqKioqKg', 'base64').toString(), '**********'); -assert.equal(new Buffer('KioqKioqKioqKio', 'base64').toString(), '***********'); -assert.equal(new Buffer('KioqKioqKioqKioqKg', 'base64').toString(), - '*************'); -assert.equal(new Buffer('KioqKioqKioqKioqKio', 'base64').toString(), - '**************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKg', 'base64').toString(), - '****************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKio', 'base64').toString(), - '*****************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKioqKg', 'base64').toString(), - '*******************'); -assert.equal(new Buffer('KioqKioqKioqKioqKioqKioqKio', 'base64').toString(), - '********************'); - -// handle padding graciously, multiple-of-4 or not -assert.equal(new Buffer('72INjkR5fchcxk9+VgdGPFJDxUBFR5/rMFsghgxADiw==', - 'base64').length, 32); -assert.equal(new Buffer('72INjkR5fchcxk9+VgdGPFJDxUBFR5/rMFsghgxADiw=', - 'base64').length, 32); -assert.equal(new Buffer('72INjkR5fchcxk9+VgdGPFJDxUBFR5/rMFsghgxADiw', - 'base64').length, 32); -assert.equal(new Buffer('w69jACy6BgZmaFvv96HG6MYksWytuZu3T1FvGnulPg==', - 'base64').length, 31); -assert.equal(new Buffer('w69jACy6BgZmaFvv96HG6MYksWytuZu3T1FvGnulPg=', - 'base64').length, 31); -assert.equal(new Buffer('w69jACy6BgZmaFvv96HG6MYksWytuZu3T1FvGnulPg', - 'base64').length, 31); - -// This string encodes single '.' character in UTF-16 -var dot = new Buffer('//4uAA==', 'base64'); -assert.equal(dot[0], 0xff); -assert.equal(dot[1], 0xfe); -assert.equal(dot[2], 0x2e); -assert.equal(dot[3], 0x00); -assert.equal(dot.toString('base64'), '//4uAA=='); - -// Writing base64 at a position > 0 should not mangle the result. -// -// https://github.com/joyent/node/issues/402 -var segments = ['TWFkbmVzcz8h', 'IFRoaXM=', 'IGlz', 'IG5vZGUuanMh']; -var buf = new Buffer(64); -var pos = 0; - -for (var i = 0; i < segments.length; ++i) { - pos += b.write(segments[i], pos, 'base64'); -} -assert.equal(b.toString('binary', 0, pos), 'Madness?! This is node.js!'); - -// Creating buffers larger than pool size. -var l = Buffer.poolSize + 5; -var s = ''; -for (i = 0; i < l; i++) { - s += 'h'; -} - -var b = new Buffer(s); - -for (i = 0; i < l; i++) { - assert.equal('h'.charCodeAt(0), b[i]); -} - -var sb = b.toString(); -assert.equal(sb.length, s.length); -assert.equal(sb, s); - - -// Single argument slice -b = new Buffer('abcde'); -assert.equal('bcde', b.slice(1).toString()); - -// slice(0,0).length === 0 -assert.equal(0, Buffer('hello').slice(0, 0).length); - -// test hex toString -// console.log('Create hex string from buffer'); -var hexb = new Buffer(256); -for (var i = 0; i < 256; i++) { - hexb[i] = i; -} -var hexStr = hexb.toString('hex'); -assert.equal(hexStr, - '000102030405060708090a0b0c0d0e0f' + - '101112131415161718191a1b1c1d1e1f' + - '202122232425262728292a2b2c2d2e2f' + - '303132333435363738393a3b3c3d3e3f' + - '404142434445464748494a4b4c4d4e4f' + - '505152535455565758595a5b5c5d5e5f' + - '606162636465666768696a6b6c6d6e6f' + - '707172737475767778797a7b7c7d7e7f' + - '808182838485868788898a8b8c8d8e8f' + - '909192939495969798999a9b9c9d9e9f' + - 'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' + - 'b0b1b2b3b4b5b6b7b8b9babbbcbdbebf' + - 'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf' + - 'd0d1d2d3d4d5d6d7d8d9dadbdcdddedf' + - 'e0e1e2e3e4e5e6e7e8e9eaebecedeeef' + - 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'); - -// console.log('Create buffer from hex string'); -var hexb2 = new Buffer(hexStr, 'hex'); -for (var i = 0; i < 256; i++) { - assert.equal(hexb2[i], hexb[i]); -} - -// test an invalid slice end. -// console.log('Try to slice off the end of the buffer'); -var b = new Buffer([1, 2, 3, 4, 5]); -var b2 = b.toString('hex', 1, 10000); -var b3 = b.toString('hex', 1, 5); -var b4 = b.toString('hex', 1); -assert.equal(b2, b3); -assert.equal(b2, b4); - - -function buildBuffer(data) { - if (Array.isArray(data)) { - var buffer = new Buffer(data.length); - data.forEach(function(v, k) { - buffer[k] = v; - }); - return buffer; - } - return null; -} - -var x = buildBuffer([0x81, 0xa3, 0x66, 0x6f, 0x6f, 0xa3, 0x62, 0x61, 0x72]); - -// console.log(x.inspect()); -assert.equal('', x.inspect()); - -var z = x.slice(4); -// console.log(z.inspect()); -// console.log(z.length); -assert.equal(5, z.length); -assert.equal(0x6f, z[0]); -assert.equal(0xa3, z[1]); -assert.equal(0x62, z[2]); -assert.equal(0x61, z[3]); -assert.equal(0x72, z[4]); - -var z = x.slice(0); -// console.log(z.inspect()); -// console.log(z.length); -assert.equal(z.length, x.length); - -var z = x.slice(0, 4); -// console.log(z.inspect()); -// console.log(z.length); -assert.equal(4, z.length); -assert.equal(0x81, z[0]); -assert.equal(0xa3, z[1]); - -var z = x.slice(0, 9); -// console.log(z.inspect()); -// console.log(z.length); -assert.equal(9, z.length); - -var z = x.slice(1, 4); -// console.log(z.inspect()); -// console.log(z.length); -assert.equal(3, z.length); -assert.equal(0xa3, z[0]); - -var z = x.slice(2, 4); -// console.log(z.inspect()); -// console.log(z.length); -assert.equal(2, z.length); -assert.equal(0x66, z[0]); -assert.equal(0x6f, z[1]); - -assert.equal(0, Buffer('hello').slice(0, 0).length); - -['ucs2', 'ucs-2', 'utf16le', 'utf-16le'].forEach(function(encoding) { - var b = new Buffer(10); - b.write('あいうえお', encoding); - assert.equal(b.toString(encoding), 'あいうえお'); -}); - -// Binary encoding should write only one byte per character. -var b = Buffer([0xde, 0xad, 0xbe, 0xef]); -var s = String.fromCharCode(0xffff); -b.write(s, 0, 'binary'); -assert.equal(0xff, b[0]); -assert.equal(0xad, b[1]); -assert.equal(0xbe, b[2]); -assert.equal(0xef, b[3]); -s = String.fromCharCode(0xaaee); -b.write(s, 0, 'binary'); -assert.equal(0xee, b[0]); -assert.equal(0xad, b[1]); -assert.equal(0xbe, b[2]); -assert.equal(0xef, b[3]); - -// #1210 Test UTF-8 string includes null character -var buf = new Buffer('\0'); -assert.equal(buf.length, 1); -buf = new Buffer('\0\0'); -assert.equal(buf.length, 2); - -buf = new Buffer(2); -var written = buf.write(''); // 0byte -assert.equal(written, 0); -written = buf.write('\0'); // 1byte (v8 adds null terminator) -assert.equal(written, 1); -written = buf.write('a\0'); // 1byte * 2 -assert.equal(written, 2); -written = buf.write('あ'); // 3bytes -assert.equal(written, 0); -written = buf.write('\0あ'); // 1byte + 3bytes -assert.equal(written, 1); -written = buf.write('\0\0あ'); // 1byte * 2 + 3bytes -assert.equal(written, 2); - -buf = new Buffer(10); -written = buf.write('あいう'); // 3bytes * 3 (v8 adds null terminator) -assert.equal(written, 9); -written = buf.write('あいう\0'); // 3bytes * 3 + 1byte -assert.equal(written, 10); - -// #243 Test write() with maxLength -var buf = new Buffer(4); -buf.fill(0xFF); -var written = buf.write('abcd', 1, 2, 'utf8'); -// console.log(buf); -assert.equal(written, 2); -assert.equal(buf[0], 0xFF); -assert.equal(buf[1], 0x61); -assert.equal(buf[2], 0x62); -assert.equal(buf[3], 0xFF); - -buf.fill(0xFF); -written = buf.write('abcd', 1, 4); -// console.log(buf); -assert.equal(written, 3); -assert.equal(buf[0], 0xFF); -assert.equal(buf[1], 0x61); -assert.equal(buf[2], 0x62); -assert.equal(buf[3], 0x63); - -buf.fill(0xFF); -written = buf.write('abcd', 'utf8', 1, 2); // legacy style -// console.log(buf); -assert.equal(written, 2); -assert.equal(buf[0], 0xFF); -assert.equal(buf[1], 0x61); -assert.equal(buf[2], 0x62); -assert.equal(buf[3], 0xFF); - -buf.fill(0xFF); -written = buf.write('abcdef', 1, 2, 'hex'); -// console.log(buf); -assert.equal(written, 2); -assert.equal(buf[0], 0xFF); -assert.equal(buf[1], 0xAB); -assert.equal(buf[2], 0xCD); -assert.equal(buf[3], 0xFF); - -['ucs2', 'ucs-2', 'utf16le', 'utf-16le'].forEach(function(encoding) { - buf.fill(0xFF); - written = buf.write('abcd', 0, 2, encoding); -// console.log(buf); - assert.equal(written, 2); - assert.equal(buf[0], 0x61); - assert.equal(buf[1], 0x00); - assert.equal(buf[2], 0xFF); - assert.equal(buf[3], 0xFF); -}); - -// test offset returns are correct -var b = new Buffer(16); -assert.equal(4, b.writeUInt32LE(0, 0)); -assert.equal(6, b.writeUInt16LE(0, 4)); -assert.equal(7, b.writeUInt8(0, 6)); -assert.equal(8, b.writeInt8(0, 7)); -assert.equal(16, b.writeDoubleLE(0, 8)); - -// test unmatched surrogates not producing invalid utf8 output -// ef bf bd = utf-8 representation of unicode replacement character -// see https://codereview.chromium.org/121173009/ -buf = new Buffer('ab\ud800cd', 'utf8'); -assert.equal(buf[0], 0x61); -assert.equal(buf[1], 0x62); -assert.equal(buf[2], 0xef); -assert.equal(buf[3], 0xbf); -assert.equal(buf[4], 0xbd); -assert.equal(buf[5], 0x63); -assert.equal(buf[6], 0x64); - -// test for buffer overrun -buf = new Buffer([0, 0, 0, 0, 0]); // length: 5 -var sub = buf.slice(0, 4); // length: 4 -written = sub.write('12345', 'binary'); -assert.equal(written, 4); -assert.equal(buf[4], 0); - -// Check for fractional length args, junk length args, etc. -// https://github.com/joyent/node/issues/1758 - -// Call .fill() first, stops valgrind warning about uninitialized memory reads. -Buffer(3.3).fill().toString(); // throws bad argument error in commit 43cb4ec -assert.equal(Buffer(-1).length, 0); -assert.equal(Buffer(NaN).length, 0); -assert.equal(Buffer(3.3).length, 3); -assert.equal(Buffer({length: 3.3}).length, 3); -assert.equal(Buffer({length: 'BAM'}).length, 0); - -// Make sure that strings are not coerced to numbers. -assert.equal(Buffer('99').length, 2); -assert.equal(Buffer('13.37').length, 5); - -// Ensure that the length argument is respected. -'ascii utf8 hex base64 binary'.split(' ').forEach(function(enc) { - assert.equal(Buffer(1).write('aaaaaa', 0, 1, enc), 1); -}); - -// Regression test, guard against buffer overrun in the base64 decoder. -var a = Buffer(3); -var b = Buffer('xxx'); -a.write('aaaaaaaa', 'base64'); -assert.equal(b.toString(), 'xxx'); - -// issue GH-3416 -Buffer(Buffer(0), 0, 0); - -[ 'hex', - 'utf8', - 'utf-8', - 'ascii', - 'binary', - 'base64', - 'ucs2', - 'ucs-2', - 'utf16le', - 'utf-16le' ].forEach(function(enc) { - assert.equal(Buffer.isEncoding(enc), true); - }); - -[ 'utf9', - 'utf-7', - 'Unicode-FTW', - 'new gnu gun' ].forEach(function(enc) { - assert.equal(Buffer.isEncoding(enc), false); - }); - - -// GH-5110 -(function() { - var buffer = new Buffer('test'), - string = JSON.stringify(buffer); - - assert.equal(string, '{"type":"Buffer","data":[116,101,115,116]}'); - - assert.deepEqual(buffer, JSON.parse(string, function(key, value) { - return value && value.type === 'Buffer' - ? new Buffer(value.data) - : value; - })); -})(); - -// issue GH-7849 -(function() { - var buf = new Buffer('test'); - var json = JSON.stringify(buf); - var obj = JSON.parse(json); - var copy = new Buffer(obj); - - assert(buf.equals(copy)); -})(); - -// issue GH-4331 -assert.throws(function() { - new Buffer(0xFFFFFFFF); -}, RangeError); -assert.throws(function() { - new Buffer(0xFFFFFFFFF); -}, RangeError); - - -// attempt to overflow buffers, similar to previous bug in array buffers -assert.throws(function() { - var buf = new Buffer(8); - buf.readFloatLE(0xffffffff); -}, RangeError); - -assert.throws(function() { - var buf = new Buffer(8); - buf.writeFloatLE(0.0, 0xffffffff); -}, RangeError); - -assert.throws(function() { - var buf = new Buffer(8); - buf.readFloatLE(0xffffffff); -}, RangeError); - -assert.throws(function() { - var buf = new Buffer(8); - buf.writeFloatLE(0.0, 0xffffffff); -}, RangeError); - - -// ensure negative values can't get past offset -assert.throws(function() { - var buf = new Buffer(8); - buf.readFloatLE(-1); -}, RangeError); - -assert.throws(function() { - var buf = new Buffer(8); - buf.writeFloatLE(0.0, -1); -}, RangeError); - -assert.throws(function() { - var buf = new Buffer(8); - buf.readFloatLE(-1); -}, RangeError); - -assert.throws(function() { - var buf = new Buffer(8); - buf.writeFloatLE(0.0, -1); -}, RangeError); - -// offset checks -var buf = new Buffer(0); - -assert.throws(function() { buf.readUInt8(0); }, RangeError); -assert.throws(function() { buf.readInt8(0); }, RangeError); - -var buf = new Buffer([0xFF]); - -assert.equal(buf.readUInt8(0), 255); -assert.equal(buf.readInt8(0), -1); - -[16, 32].forEach(function(bits) { - var buf = new Buffer(bits / 8 - 1); - - assert.throws(function() { buf['readUInt' + bits + 'BE'](0); }, - RangeError, - 'readUInt' + bits + 'BE'); - - assert.throws(function() { buf['readUInt' + bits + 'LE'](0); }, - RangeError, - 'readUInt' + bits + 'LE'); - - assert.throws(function() { buf['readInt' + bits + 'BE'](0); }, - RangeError, - 'readInt' + bits + 'BE()'); - - assert.throws(function() { buf['readInt' + bits + 'LE'](0); }, - RangeError, - 'readInt' + bits + 'LE()'); -}); - -[16, 32].forEach(function(bits) { - var buf = new Buffer([0xFF, 0xFF, 0xFF, 0xFF]); - - assert.equal(buf['readUInt' + bits + 'BE'](0), - (0xFFFFFFFF >>> (32 - bits))); - - assert.equal(buf['readUInt' + bits + 'LE'](0), - (0xFFFFFFFF >>> (32 - bits))); - - assert.equal(buf['readInt' + bits + 'BE'](0), - (0xFFFFFFFF >> (32 - bits))); - - assert.equal(buf['readInt' + bits + 'LE'](0), - (0xFFFFFFFF >> (32 - bits))); -}); - -// test for common read(U)IntLE/BE -(function() { - var buf = new Buffer([0x01, 0x02, 0x03, 0x04, 0x05, 0x06]); - - assert.equal(buf.readUIntLE(0, 1), 0x01); - assert.equal(buf.readUIntBE(0, 1), 0x01); - assert.equal(buf.readUIntLE(0, 3), 0x030201); - assert.equal(buf.readUIntBE(0, 3), 0x010203); - assert.equal(buf.readUIntLE(0, 5), 0x0504030201); - assert.equal(buf.readUIntBE(0, 5), 0x0102030405); - assert.equal(buf.readUIntLE(0, 6), 0x060504030201); - assert.equal(buf.readUIntBE(0, 6), 0x010203040506); - assert.equal(buf.readIntLE(0, 1), 0x01); - assert.equal(buf.readIntBE(0, 1), 0x01); - assert.equal(buf.readIntLE(0, 3), 0x030201); - assert.equal(buf.readIntBE(0, 3), 0x010203); - assert.equal(buf.readIntLE(0, 5), 0x0504030201); - assert.equal(buf.readIntBE(0, 5), 0x0102030405); - assert.equal(buf.readIntLE(0, 6), 0x060504030201); - assert.equal(buf.readIntBE(0, 6), 0x010203040506); -})(); - -// test for common write(U)IntLE/BE -(function() { - var buf = new Buffer(3); - buf.writeUIntLE(0x123456, 0, 3); - assert.deepEqual(buf.toJSON().data, [0x56, 0x34, 0x12]); - assert.equal(buf.readUIntLE(0, 3), 0x123456); - - buf = new Buffer(3); - buf.writeUIntBE(0x123456, 0, 3); - assert.deepEqual(buf.toJSON().data, [0x12, 0x34, 0x56]); - assert.equal(buf.readUIntBE(0, 3), 0x123456); - - buf = new Buffer(3); - buf.writeIntLE(0x123456, 0, 3); - assert.deepEqual(buf.toJSON().data, [0x56, 0x34, 0x12]); - assert.equal(buf.readIntLE(0, 3), 0x123456); - - buf = new Buffer(3); - buf.writeIntBE(0x123456, 0, 3); - assert.deepEqual(buf.toJSON().data, [0x12, 0x34, 0x56]); - assert.equal(buf.readIntBE(0, 3), 0x123456); - - buf = new Buffer(3); - buf.writeIntLE(-0x123456, 0, 3); - assert.deepEqual(buf.toJSON().data, [0xaa, 0xcb, 0xed]); - assert.equal(buf.readIntLE(0, 3), -0x123456); - - buf = new Buffer(3); - buf.writeIntBE(-0x123456, 0, 3); - assert.deepEqual(buf.toJSON().data, [0xed, 0xcb, 0xaa]); - assert.equal(buf.readIntBE(0, 3), -0x123456); - - buf = new Buffer(5); - buf.writeUIntLE(0x1234567890, 0, 5); - assert.deepEqual(buf.toJSON().data, [0x90, 0x78, 0x56, 0x34, 0x12]); - assert.equal(buf.readUIntLE(0, 5), 0x1234567890); - - buf = new Buffer(5); - buf.writeUIntBE(0x1234567890, 0, 5); - assert.deepEqual(buf.toJSON().data, [0x12, 0x34, 0x56, 0x78, 0x90]); - assert.equal(buf.readUIntBE(0, 5), 0x1234567890); - - buf = new Buffer(5); - buf.writeIntLE(0x1234567890, 0, 5); - assert.deepEqual(buf.toJSON().data, [0x90, 0x78, 0x56, 0x34, 0x12]); - assert.equal(buf.readIntLE(0, 5), 0x1234567890); - - buf = new Buffer(5); - buf.writeIntBE(0x1234567890, 0, 5); - assert.deepEqual(buf.toJSON().data, [0x12, 0x34, 0x56, 0x78, 0x90]); - assert.equal(buf.readIntBE(0, 5), 0x1234567890); - - buf = new Buffer(5); - buf.writeIntLE(-0x1234567890, 0, 5); - assert.deepEqual(buf.toJSON().data, [0x70, 0x87, 0xa9, 0xcb, 0xed]); - assert.equal(buf.readIntLE(0, 5), -0x1234567890); - - buf = new Buffer(5); - buf.writeIntBE(-0x1234567890, 0, 5); - assert.deepEqual(buf.toJSON().data, [0xed, 0xcb, 0xa9, 0x87, 0x70]); - assert.equal(buf.readIntBE(0, 5), -0x1234567890); -})(); - -// test Buffer slice -(function() { - var buf = new Buffer('0123456789'); - assert.equal(buf.slice(-10, 10), '0123456789'); - assert.equal(buf.slice(-20, 10), '0123456789'); - assert.equal(buf.slice(-20, -10), ''); - assert.equal(buf.slice(0, -1), '012345678'); - assert.equal(buf.slice(2, -2), '234567'); - assert.equal(buf.slice(0, 65536), '0123456789'); - assert.equal(buf.slice(65536, 0), ''); - for (var i = 0, s = buf.toString(); i < buf.length; ++i) { - assert.equal(buf.slice(-i), s.slice(-i)); - assert.equal(buf.slice(0, -i), s.slice(0, -i)); - } - // try to slice a zero length Buffer - // see https://github.com/joyent/node/issues/5881 - SlowBuffer(0).slice(0, 1); -})(); - -// Regression test for #5482: should throw but not assert in C++ land. -assert.throws(function() { - Buffer('', 'buffer'); -}, TypeError); - -// Regression test for #6111. Constructing a buffer from another buffer -// should a) work, and b) not corrupt the source buffer. -(function() { - var a = [0]; - for (var i = 0; i < 7; ++i) a = a.concat(a); - a = a.map(function(_, i) { return i; }); - var b = Buffer(a); - var c = Buffer(b); - assert.equal(b.length, a.length); - assert.equal(c.length, a.length); - for (var i = 0, k = a.length; i < k; ++i) { - assert.equal(a[i], i); - assert.equal(b[i], i); - assert.equal(c[i], i); - } -})(); - - -assert.throws(function() { - new Buffer((-1 >>> 0) + 1); -}, RangeError); - -assert.throws(function() { - new SlowBuffer((-1 >>> 0) + 1); -}, RangeError); - -if (common.hasCrypto) { - // Test truncation after decode - // var crypto = require('crypto'); - - var b1 = new Buffer('YW55=======', 'base64'); - var b2 = new Buffer('YW55', 'base64'); - - assert.equal( - 1 /*crypto.createHash('sha1').update(b1).digest('hex')*/, - 1 /*crypto.createHash('sha1').update(b2).digest('hex')*/ - ); -} else { -// console.log('1..0 # Skipped: missing crypto'); -} - -// Test Compare -var b = new Buffer(1).fill('a'); -var c = new Buffer(1).fill('c'); -var d = new Buffer(2).fill('aa'); - -assert.equal(b.compare(c), -1); -assert.equal(c.compare(d), 1); -assert.equal(d.compare(b), 1); -assert.equal(b.compare(d), -1); -assert.equal(b.compare(b), 0); - -assert.equal(Buffer.compare(b, c), -1); -assert.equal(Buffer.compare(c, d), 1); -assert.equal(Buffer.compare(d, b), 1); -assert.equal(Buffer.compare(b, d), -1); -assert.equal(Buffer.compare(c, c), 0); - - -assert.throws(function() { - var b = new Buffer(1); - Buffer.compare(b, 'abc'); -}); - -assert.throws(function() { - var b = new Buffer(1); - Buffer.compare('abc', b); -}); - -assert.throws(function() { - var b = new Buffer(1); - b.compare('abc'); -}); - -// Test Equals -var b = new Buffer(5).fill('abcdf'); -var c = new Buffer(5).fill('abcdf'); -var d = new Buffer(5).fill('abcde'); -var e = new Buffer(6).fill('abcdef'); - -assert.ok(b.equals(c)); -assert.ok(!c.equals(d)); -assert.ok(!d.equals(e)); -assert.ok(d.equals(d)); - -assert.throws(function() { - var b = new Buffer(1); - b.equals('abc'); -}); - -// Regression test for https://github.com/nodejs/io.js/issues/649. -assert.throws(function() { Buffer(1422561062959).toString('utf8'); }); - -var ps = Buffer.poolSize; -Buffer.poolSize = 0; -assert.equal(Buffer(1).parent, undefined); -Buffer.poolSize = ps; - -// Test Buffer.copy() segfault -assert.throws(function() { - Buffer(10).copy(); -}); - -assert.throws(function() { - new Buffer(); -}, /must start with number, buffer, array or string/); - -assert.throws(function() { - new Buffer(null); -}, /must start with number, buffer, array or string/); - diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/slice.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/slice.js deleted file mode 100644 index 25c111c8..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/slice.js +++ /dev/null @@ -1,37 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('modifying buffer created by .slice() modifies original memory', function (t) { - if (!B.TYPED_ARRAY_SUPPORT) return t.end() - - var buf1 = new B(26) - for (var i = 0; i < 26; i++) { - buf1[i] = i + 97 // 97 is ASCII a - } - - var buf2 = buf1.slice(0, 3) - t.equal(buf2.toString('ascii', 0, buf2.length), 'abc') - - buf2[0] = '!'.charCodeAt(0) - t.equal(buf1.toString('ascii', 0, buf2.length), '!bc') - - t.end() -}) - -test('modifying parent buffer modifies .slice() buffer\'s memory', function (t) { - if (!B.TYPED_ARRAY_SUPPORT) return t.end() - - var buf1 = new B(26) - for (var i = 0; i < 26; i++) { - buf1[i] = i + 97 // 97 is ASCII a - } - - var buf2 = buf1.slice(0, 3) - t.equal(buf2.toString('ascii', 0, buf2.length), 'abc') - - buf1[0] = '!'.charCodeAt(0) - t.equal(buf2.toString('ascii', 0, buf2.length), '!bc') - - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/static.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/static.js deleted file mode 100644 index 68faa005..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/static.js +++ /dev/null @@ -1,31 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('Buffer.isEncoding', function (t) { - t.equal(B.isEncoding('HEX'), true) - t.equal(B.isEncoding('hex'), true) - t.equal(B.isEncoding('bad'), false) - t.end() -}) - -test('Buffer.isBuffer', function (t) { - t.equal(B.isBuffer(new B('hey', 'utf8')), true) - t.equal(B.isBuffer(new B([1, 2, 3], 'utf8')), true) - t.equal(B.isBuffer('hey'), false) - t.end() -}) - -test('Buffer.toArrayBuffer', function (t) { - var data = [1, 2, 3, 4, 5, 6, 7, 8] - if (typeof Uint8Array !== 'undefined') { - var result = new B(data).toArrayBuffer() - var expected = new Uint8Array(data).buffer - for (var i = 0; i < expected.byteLength; i++) { - t.equal(result[i], expected[i]) - } - } else { - t.pass('No toArrayBuffer() method provided in old browsers') - } - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/to-string.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/to-string.js deleted file mode 100644 index 2950d4d0..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/to-string.js +++ /dev/null @@ -1,233 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') - -test('utf8 buffer to base64', function (t) { - t.equal( - new B('Ձאab', 'utf8').toString('base64'), - '1YHXkGFi' - ) - t.end() -}) - -test('utf8 buffer to hex', function (t) { - t.equal( - new B('Ձאab', 'utf8').toString('hex'), - 'd581d7906162' - ) - t.end() -}) - -test('utf8 to utf8', function (t) { - t.equal( - new B('öäüõÖÄÜÕ', 'utf8').toString('utf8'), - 'öäüõÖÄÜÕ' - ) - t.end() -}) - -test('utf16le to utf16', function (t) { - t.equal( - new B(new B('abcd', 'utf8').toString('utf16le'), 'utf16le').toString('utf8'), - 'abcd' - ) - t.end() -}) - -test('utf16le to hex', function (t) { - t.equal( - new B('abcd', 'utf16le').toString('hex'), - '6100620063006400' - ) - t.end() -}) - -test('ascii buffer to base64', function (t) { - t.equal( - new B('123456!@#$%^', 'ascii').toString('base64'), - 'MTIzNDU2IUAjJCVe' - ) - t.end() -}) - -test('ascii buffer to hex', function (t) { - t.equal( - new B('123456!@#$%^', 'ascii').toString('hex'), - '31323334353621402324255e' - ) - t.end() -}) - -test('base64 buffer to utf8', function (t) { - t.equal( - new B('1YHXkGFi', 'base64').toString('utf8'), - 'Ձאab' - ) - t.end() -}) - -test('hex buffer to utf8', function (t) { - t.equal( - new B('d581d7906162', 'hex').toString('utf8'), - 'Ձאab' - ) - t.end() -}) - -test('base64 buffer to ascii', function (t) { - t.equal( - new B('MTIzNDU2IUAjJCVe', 'base64').toString('ascii'), - '123456!@#$%^' - ) - t.end() -}) - -test('hex buffer to ascii', function (t) { - t.equal( - new B('31323334353621402324255e', 'hex').toString('ascii'), - '123456!@#$%^' - ) - t.end() -}) - -test('base64 buffer to binary', function (t) { - t.equal( - new B('MTIzNDU2IUAjJCVe', 'base64').toString('binary'), - '123456!@#$%^' - ) - t.end() -}) - -test('hex buffer to binary', function (t) { - t.equal( - new B('31323334353621402324255e', 'hex').toString('binary'), - '123456!@#$%^' - ) - t.end() -}) - -test('utf8 to binary', function (t) { - /* jshint -W100 */ - t.equal( - new B('öäüõÖÄÜÕ', 'utf8').toString('binary'), - 'öäüõÖÄÜÕ' - ) - /* jshint +W100 */ - t.end() -}) - -test('utf8 replacement chars (1 byte sequence)', function (t) { - t.equal( - new B([ 0x80 ]).toString(), - '\uFFFD' - ) - t.equal( - new B([ 0x7F ]).toString(), - '\u007F' - ) - t.end() -}) - -test('utf8 replacement chars (2 byte sequences)', function (t) { - t.equal( - new B([ 0xC7 ]).toString(), - '\uFFFD' - ) - t.equal( - new B([ 0xC7, 0xB1 ]).toString(), - '\u01F1' - ) - t.equal( - new B([ 0xC0, 0xB1 ]).toString(), - '\uFFFD\uFFFD' - ) - t.equal( - new B([ 0xC1, 0xB1 ]).toString(), - '\uFFFD\uFFFD' - ) - t.end() -}) - -test('utf8 replacement chars (3 byte sequences)', function (t) { - t.equal( - new B([ 0xE0 ]).toString(), - '\uFFFD' - ) - t.equal( - new B([ 0xE0, 0xAC ]).toString(), - '\uFFFD\uFFFD' - ) - t.equal( - new B([ 0xE0, 0xAC, 0xB9 ]).toString(), - '\u0B39' - ) - t.end() -}) - -test('utf8 replacement chars (4 byte sequences)', function (t) { - t.equal( - new B([ 0xF4 ]).toString(), - '\uFFFD' - ) - t.equal( - new B([ 0xF4, 0x8F ]).toString(), - '\uFFFD\uFFFD' - ) - t.equal( - new B([ 0xF4, 0x8F, 0x80 ]).toString(), - '\uFFFD\uFFFD\uFFFD' - ) - t.equal( - new B([ 0xF4, 0x8F, 0x80, 0x84 ]).toString(), - '\uDBFC\uDC04' - ) - t.equal( - new B([ 0xFF ]).toString(), - '\uFFFD' - ) - t.equal( - new B([ 0xFF, 0x8F, 0x80, 0x84 ]).toString(), - '\uFFFD\uFFFD\uFFFD\uFFFD' - ) - t.end() -}) - -test('utf8 replacement chars on 256 random bytes', function (t) { - t.equal( - new B([ 152, 130, 206, 23, 243, 238, 197, 44, 27, 86, 208, 36, 163, 184, 164, 21, 94, 242, 178, 46, 25, 26, 253, 178, 72, 147, 207, 112, 236, 68, 179, 190, 29, 83, 239, 147, 125, 55, 143, 19, 157, 68, 157, 58, 212, 224, 150, 39, 128, 24, 94, 225, 120, 121, 75, 192, 112, 19, 184, 142, 203, 36, 43, 85, 26, 147, 227, 139, 242, 186, 57, 78, 11, 102, 136, 117, 180, 210, 241, 92, 3, 215, 54, 167, 249, 1, 44, 225, 146, 86, 2, 42, 68, 21, 47, 238, 204, 153, 216, 252, 183, 66, 222, 255, 15, 202, 16, 51, 134, 1, 17, 19, 209, 76, 238, 38, 76, 19, 7, 103, 249, 5, 107, 137, 64, 62, 170, 57, 16, 85, 179, 193, 97, 86, 166, 196, 36, 148, 138, 193, 210, 69, 187, 38, 242, 97, 195, 219, 252, 244, 38, 1, 197, 18, 31, 246, 53, 47, 134, 52, 105, 72, 43, 239, 128, 203, 73, 93, 199, 75, 222, 220, 166, 34, 63, 236, 11, 212, 76, 243, 171, 110, 78, 39, 205, 204, 6, 177, 233, 212, 243, 0, 33, 41, 122, 118, 92, 252, 0, 157, 108, 120, 70, 137, 100, 223, 243, 171, 232, 66, 126, 111, 142, 33, 3, 39, 117, 27, 107, 54, 1, 217, 227, 132, 13, 166, 3, 73, 53, 127, 225, 236, 134, 219, 98, 214, 125, 148, 24, 64, 142, 111, 231, 194, 42, 150, 185, 10, 182, 163, 244, 19, 4, 59, 135, 16 ]).toString(), - '\uFFFD\uFFFD\uFFFD\u0017\uFFFD\uFFFD\uFFFD\u002C\u001B\u0056\uFFFD\u0024\uFFFD\uFFFD\uFFFD\u0015\u005E\uFFFD\uFFFD\u002E\u0019\u001A\uFFFD\uFFFD\u0048\uFFFD\uFFFD\u0070\uFFFD\u0044\uFFFD\uFFFD\u001D\u0053\uFFFD\uFFFD\u007D\u0037\uFFFD\u0013\uFFFD\u0044\uFFFD\u003A\uFFFD\uFFFD\uFFFD\u0027\uFFFD\u0018\u005E\uFFFD\u0078\u0079\u004B\uFFFD\u0070\u0013\uFFFD\uFFFD\uFFFD\u0024\u002B\u0055\u001A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0039\u004E\u000B\u0066\uFFFD\u0075\uFFFD\uFFFD\uFFFD\u005C\u0003\uFFFD\u0036\uFFFD\uFFFD\u0001\u002C\uFFFD\uFFFD\u0056\u0002\u002A\u0044\u0015\u002F\uFFFD\u0319\uFFFD\uFFFD\uFFFD\u0042\uFFFD\uFFFD\u000F\uFFFD\u0010\u0033\uFFFD\u0001\u0011\u0013\uFFFD\u004C\uFFFD\u0026\u004C\u0013\u0007\u0067\uFFFD\u0005\u006B\uFFFD\u0040\u003E\uFFFD\u0039\u0010\u0055\uFFFD\uFFFD\u0061\u0056\uFFFD\uFFFD\u0024\uFFFD\uFFFD\uFFFD\uFFFD\u0045\uFFFD\u0026\uFFFD\u0061\uFFFD\uFFFD\uFFFD\uFFFD\u0026\u0001\uFFFD\u0012\u001F\uFFFD\u0035\u002F\uFFFD\u0034\u0069\u0048\u002B\uFFFD\uFFFD\uFFFD\u0049\u005D\uFFFD\u004B\uFFFD\u0726\u0022\u003F\uFFFD\u000B\uFFFD\u004C\uFFFD\uFFFD\u006E\u004E\u0027\uFFFD\uFFFD\u0006\uFFFD\uFFFD\uFFFD\uFFFD\u0000\u0021\u0029\u007A\u0076\u005C\uFFFD\u0000\uFFFD\u006C\u0078\u0046\uFFFD\u0064\uFFFD\uFFFD\uFFFD\uFFFD\u0042\u007E\u006F\uFFFD\u0021\u0003\u0027\u0075\u001B\u006B\u0036\u0001\uFFFD\uFFFD\uFFFD\u000D\uFFFD\u0003\u0049\u0035\u007F\uFFFD\uFFFD\uFFFD\uFFFD\u0062\uFFFD\u007D\uFFFD\u0018\u0040\uFFFD\u006F\uFFFD\uFFFD\u002A\uFFFD\uFFFD\u000A\uFFFD\uFFFD\uFFFD\u0013\u0004\u003B\uFFFD\u0010' - ) - t.end() -}) - -test('utf8 replacement chars for anything in the surrogate pair range', function (t) { - t.equal( - new B([ 0xED, 0x9F, 0xBF ]).toString(), - '\uD7FF' - ) - t.equal( - new B([ 0xED, 0xA0, 0x80 ]).toString(), - '\uFFFD\uFFFD\uFFFD' - ) - t.equal( - new B([ 0xED, 0xBE, 0x8B ]).toString(), - '\uFFFD\uFFFD\uFFFD' - ) - t.equal( - new B([ 0xED, 0xBF, 0xBF ]).toString(), - '\uFFFD\uFFFD\uFFFD' - ) - t.equal( - new B([ 0xEE, 0x80, 0x80 ]).toString(), - '\uE000' - ) - t.end() -}) - -test('utf8 don\'t replace the replacement char', function (t) { - t.equal( - new B('\uFFFD').toString(), - '\uFFFD' - ) - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/write.js b/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/write.js deleted file mode 100644 index 4039d192..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/node_modules/buffer/test/write.js +++ /dev/null @@ -1,131 +0,0 @@ -if (process.env.OBJECT_IMPL) global.TYPED_ARRAY_SUPPORT = false -var B = require('../').Buffer -var test = require('tape') -var isnan = require('is-nan') - -test('buffer.write string should get parsed as number', function (t) { - var b = new B(64) - b.writeUInt16LE('1003', 0) - t.equal(b.readUInt16LE(0), 1003) - t.end() -}) - -test('buffer.writeUInt8 a fractional number will get Math.floored', function (t) { - // Some extra work is necessary to make this test pass with the Object implementation - - var b = new B(1) - b.writeInt8(5.5, 0) - t.equal(b[0], 5) - t.end() -}) - -test('writeUint8 with a negative number throws', function (t) { - var buf = new B(1) - - t.throws(function () { - buf.writeUInt8(-3, 0) - }) - - t.end() -}) - -test('hex of write{Uint,Int}{8,16,32}{LE,BE}', function (t) { - t.plan(2 * (2 * 2 * 2 + 2)) - var hex = [ - '03', '0300', '0003', '03000000', '00000003', - 'fd', 'fdff', 'fffd', 'fdffffff', 'fffffffd' - ] - var reads = [ 3, 3, 3, 3, 3, -3, -3, -3, -3, -3 ] - var xs = ['UInt', 'Int'] - var ys = [8, 16, 32] - for (var i = 0; i < xs.length; i++) { - var x = xs[i] - for (var j = 0; j < ys.length; j++) { - var y = ys[j] - var endianesses = (y === 8) ? [''] : ['LE', 'BE'] - for (var k = 0; k < endianesses.length; k++) { - var z = endianesses[k] - - var v1 = new B(y / 8) - var writefn = 'write' + x + y + z - var val = (x === 'Int') ? -3 : 3 - v1[writefn](val, 0) - t.equal( - v1.toString('hex'), - hex.shift() - ) - var readfn = 'read' + x + y + z - t.equal( - v1[readfn](0), - reads.shift() - ) - } - } - } - t.end() -}) - -test('hex of write{Uint,Int}{8,16,32}{LE,BE} with overflow', function (t) { - if (!B.TYPED_ARRAY_SUPPORT) { - t.pass('object impl: skipping overflow test') - t.end() - return - } - - t.plan(3 * (2 * 2 * 2 + 2)) - var hex = [ - '', '03', '00', '030000', '000000', - '', 'fd', 'ff', 'fdffff', 'ffffff' - ] - var reads = [ - undefined, 3, 0, NaN, 0, - undefined, 253, -256, 16777213, -256 - ] - var xs = ['UInt', 'Int'] - var ys = [8, 16, 32] - for (var i = 0; i < xs.length; i++) { - var x = xs[i] - for (var j = 0; j < ys.length; j++) { - var y = ys[j] - var endianesses = (y === 8) ? [''] : ['LE', 'BE'] - for (var k = 0; k < endianesses.length; k++) { - var z = endianesses[k] - - var v1 = new B(y / 8 - 1) - var next = new B(4) - next.writeUInt32BE(0, 0) - var writefn = 'write' + x + y + z - var val = (x === 'Int') ? -3 : 3 - v1[writefn](val, 0, true) - t.equal( - v1.toString('hex'), - hex.shift() - ) - // check that nothing leaked to next buffer. - t.equal(next.readUInt32BE(0), 0) - // check that no bytes are read from next buffer. - next.writeInt32BE(~0, 0) - var readfn = 'read' + x + y + z - var r = reads.shift() - if (isnan(r)) t.pass('equal') - else t.equal(v1[readfn](0, true), r) - } - } - } - t.end() -}) -test('large values do not imporoperly roll over (ref #80)', function (t) { - var nums = [-25589992, -633756690, -898146932] - var out = new B(12) - out.fill(0) - out.writeInt32BE(nums[0], 0) - var newNum = out.readInt32BE(0) - t.equal(nums[0], newNum) - out.writeInt32BE(nums[1], 4) - newNum = out.readInt32BE(4) - t.equal(nums[1], newNum) - out.writeInt32BE(nums[2], 8) - newNum = out.readInt32BE(8) - t.equal(nums[2], newNum) - t.end() -}) diff --git a/truebit-implementation/node_modules/unbzip2-stream/package.json b/truebit-implementation/node_modules/unbzip2-stream/package.json deleted file mode 100644 index 50a958c4..00000000 --- a/truebit-implementation/node_modules/unbzip2-stream/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_from": "unbzip2-stream@^1.0.9", - "_id": "unbzip2-stream@1.3.1", - "_inBundle": false, - "_integrity": "sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==", - "_location": "/unbzip2-stream", - "_phantomChildren": { - "ieee754": "1.1.12", - "isarray": "1.0.0" - }, - "_requested": { - "type": "range", - "registry": true, - "raw": "unbzip2-stream@^1.0.9", - "name": "unbzip2-stream", - "escapedName": "unbzip2-stream", - "rawSpec": "^1.0.9", - "saveSpec": null, - "fetchSpec": "^1.0.9" - }, - "_requiredBy": [ - "/decompress-tarbz2" - ], - "_resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz", - "_shasum": "7854da51622a7e63624221196357803b552966a1", - "_spec": "unbzip2-stream@^1.0.9", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-tarbz2", - "author": { - "name": "Jan Bölsche", - "email": "jan@lagomorph.de" - }, - "bugs": { - "url": "https://github.com/regular/unbzip2-stream/issues" - }, - "bundleDependencies": false, - "dependencies": { - "buffer": "^3.0.1", - "through": "^2.3.6" - }, - "deprecated": false, - "description": "streaming unbzip2 implementation in pure javascript for node and browsers", - "devDependencies": { - "beefy": "^2.1.2", - "brfs": "^1.2.0", - "browserify": "^8.1.0", - "concat-stream": "^1.4.7", - "stream-equal": "^1.1.1", - "tape": "^3.4.0", - "tape-run": "^4.0.0", - "uglify-js": "^3.0.10" - }, - "files": [ - "index.js", - "lib", - "dist/unbzip2-stream.min.js" - ], - "homepage": "https://github.com/regular/unbzip2-stream#readme", - "keywords": [ - "bzip", - "bzip2", - "bz2", - "stream", - "streaming", - "decompress", - "through" - ], - "license": "MIT", - "main": "index.js", - "name": "unbzip2-stream", - "repository": { - "url": "git+https://github.com/regular/unbzip2-stream.git", - "type": "git" - }, - "scripts": { - "browser-test": "browserify -t brfs test/simple.js | tape-run", - "download-test": "beefy test/browser/long.js --open -- -t brfs", - "long-test": "tape test/extra/long.js", - "prepare": "mkdir -p dist && browserify -s unbzip2Stream index.js | uglifyjs > dist/unbzip2-stream.min.js", - "prepare-long-test": "head -c 104857600 < /dev/urandom | tee test/fixtures/vmlinux.bin | bzip2 > test/fixtures/vmlinux.bin.bz2", - "test": "tape test/*.js" - }, - "version": "1.3.1" -} diff --git a/truebit-implementation/node_modules/underscore/LICENSE b/truebit-implementation/node_modules/underscore/LICENSE deleted file mode 100644 index ad0e71bc..00000000 --- a/truebit-implementation/node_modules/underscore/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/underscore/README.md b/truebit-implementation/node_modules/underscore/README.md deleted file mode 100644 index c2ba2590..00000000 --- a/truebit-implementation/node_modules/underscore/README.md +++ /dev/null @@ -1,22 +0,0 @@ - __ - /\ \ __ - __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ - /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ - \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ - \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ - \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ - \ \____/ - \/___/ - -Underscore.js is a utility-belt library for JavaScript that provides -support for the usual functional suspects (each, map, reduce, filter...) -without extending any core JavaScript objects. - -For Docs, License, Tests, and pre-packed downloads, see: -http://underscorejs.org - -Underscore is an open-sourced component of DocumentCloud: -https://github.com/documentcloud - -Many thanks to our contributors: -https://github.com/jashkenas/underscore/contributors diff --git a/truebit-implementation/node_modules/underscore/package.json b/truebit-implementation/node_modules/underscore/package.json deleted file mode 100644 index 9c3683b7..00000000 --- a/truebit-implementation/node_modules/underscore/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_from": "underscore@1.8.3", - "_id": "underscore@1.8.3", - "_inBundle": false, - "_integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "_location": "/underscore", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "underscore@1.8.3", - "name": "underscore", - "escapedName": "underscore", - "rawSpec": "1.8.3", - "saveSpec": null, - "fetchSpec": "1.8.3" - }, - "_requiredBy": [ - "/web3-bzz", - "/web3-core-helpers", - "/web3-core-method", - "/web3-core-requestmanager", - "/web3-core-subscriptions", - "/web3-eth", - "/web3-eth-abi", - "/web3-eth-accounts", - "/web3-eth-contract", - "/web3-eth-ens", - "/web3-providers-ipc", - "/web3-providers-ws", - "/web3-utils" - ], - "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022", - "_spec": "underscore@1.8.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-bzz", - "author": { - "name": "Jeremy Ashkenas", - "email": "jeremy@documentcloud.org" - }, - "bugs": { - "url": "https://github.com/jashkenas/underscore/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "JavaScript's functional programming helper library.", - "devDependencies": { - "docco": "*", - "eslint": "0.6.x", - "karma": "~0.12.31", - "karma-qunit": "~0.1.4", - "qunit-cli": "~0.2.0", - "uglify-js": "2.4.x" - }, - "files": [ - "underscore.js", - "underscore-min.js", - "underscore-min.map", - "LICENSE" - ], - "homepage": "http://underscorejs.org", - "keywords": [ - "util", - "functional", - "server", - "client", - "browser" - ], - "license": "MIT", - "main": "underscore.js", - "name": "underscore", - "repository": { - "type": "git", - "url": "git://github.com/jashkenas/underscore.git" - }, - "scripts": { - "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", - "doc": "docco underscore.js", - "lint": "eslint underscore.js test/*.js", - "test": "npm run test-node && npm run lint", - "test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start", - "test-node": "qunit-cli test/*.js" - }, - "version": "1.8.3" -} diff --git a/truebit-implementation/node_modules/underscore/underscore-min.js b/truebit-implementation/node_modules/underscore/underscore-min.js deleted file mode 100644 index f01025b7..00000000 --- a/truebit-implementation/node_modules/underscore/underscore-min.js +++ /dev/null @@ -1,6 +0,0 @@ -// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. -(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this); -//# sourceMappingURL=underscore-min.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/underscore/underscore-min.map b/truebit-implementation/node_modules/underscore/underscore-min.map deleted file mode 100644 index cf356bf9..00000000 --- a/truebit-implementation/node_modules/underscore/underscore-min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"underscore-min.js","sources":["underscore.js"],"names":["createReduce","dir","iterator","obj","iteratee","memo","keys","index","length","currentKey","context","optimizeCb","isArrayLike","_","arguments","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","idx","i","Math","max","min","slice","call","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","constructor","proto","isFunction","prototype","ObjProto","prop","has","contains","push","root","this","previousUnderscore","ArrayProto","Array","Object","FuncProto","Function","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","nativeBind","bind","nativeCreate","create","Ctor","_wrapped","exports","module","VERSION","func","argCount","value","other","collection","accumulator","apply","identity","isObject","matcher","property","Infinity","createAssigner","keysFunc","undefinedOnly","source","l","key","baseCreate","result","MAX_ARRAY_INDEX","pow","each","forEach","map","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","includes","include","fromIndex","guard","values","indexOf","invoke","method","args","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","n","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","indexBy","countBy","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","startIndex","output","isArguments","j","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","object","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","stop","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extend","extendOwn","assign","pick","oiteratee","omit","String","defaults","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","name","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","text","settings","oldSettings","offset","variable","render","e","data","argument","chain","instance","_chain","mixin","valueOf","toJSON","define","amd"],"mappings":";;;;CAKC,WA4KC,QAASA,GAAaC,GAGpB,QAASC,GAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,GAClD,KAAOD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAAK,CACjD,GAAIQ,GAAaH,EAAOA,EAAKC,GAASA,CACtCF,GAAOD,EAASC,EAAMF,EAAIM,GAAaA,EAAYN,GAErD,MAAOE,GAGT,MAAO,UAASF,EAAKC,EAAUC,EAAMK,GACnCN,EAAWO,EAAWP,EAAUM,EAAS,EACzC,IAAIJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBD,EAAQN,EAAM,EAAI,EAAIO,EAAS,CAMnC,OAJIM,WAAUN,OAAS,IACrBH,EAAOF,EAAIG,EAAOA,EAAKC,GAASA,GAChCA,GAASN,GAEJC,EAASC,EAAKC,EAAUC,EAAMC,EAAMC,EAAOC,IA+ZtD,QAASO,GAA2Bd,GAClC,MAAO,UAASe,EAAOC,EAAWP,GAChCO,EAAYC,EAAGD,EAAWP,EAG1B,KAFA,GAAIF,GAASW,EAAUH,GACnBT,EAAQN,EAAM,EAAI,EAAIO,EAAS,EAC5BD,GAAS,GAAaC,EAARD,EAAgBA,GAASN,EAC5C,GAAIgB,EAAUD,EAAMT,GAAQA,EAAOS,GAAQ,MAAOT,EAEpD,QAAQ,GAsBZ,QAASa,GAAkBnB,EAAKoB,EAAeC,GAC7C,MAAO,UAASN,EAAOO,EAAMC,GAC3B,GAAIC,GAAI,EAAGjB,EAASW,EAAUH,EAC9B,IAAkB,gBAAPQ,GACLvB,EAAM,EACNwB,EAAID,GAAO,EAAIA,EAAME,KAAKC,IAAIH,EAAMhB,EAAQiB,GAE5CjB,EAASgB,GAAO,EAAIE,KAAKE,IAAIJ,EAAM,EAAGhB,GAAUgB,EAAMhB,EAAS,MAE9D,IAAIc,GAAeE,GAAOhB,EAE/B,MADAgB,GAAMF,EAAYN,EAAOO,GAClBP,EAAMQ,KAASD,EAAOC,GAAO,CAEtC,IAAID,IAASA,EAEX,MADAC,GAAMH,EAAcQ,EAAMC,KAAKd,EAAOS,EAAGjB,GAASK,EAAEkB,OAC7CP,GAAO,EAAIA,EAAMC,GAAK,CAE/B,KAAKD,EAAMvB,EAAM,EAAIwB,EAAIjB,EAAS,EAAGgB,GAAO,GAAWhB,EAANgB,EAAcA,GAAOvB,EACpE,GAAIe,EAAMQ,KAASD,EAAM,MAAOC,EAElC,QAAQ,GAqPZ,QAASQ,GAAoB7B,EAAKG,GAChC,GAAI2B,GAAaC,EAAmB1B,OAChC2B,EAAchC,EAAIgC,YAClBC,EAASvB,EAAEwB,WAAWF,IAAgBA,EAAYG,WAAcC,EAGhEC,EAAO,aAGX,KAFI3B,EAAE4B,IAAItC,EAAKqC,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAAOlC,EAAKqC,KAAKH,GAEpDP,KACLO,EAAON,EAAmBD,GACtBO,IAAQrC,IAAOA,EAAIqC,KAAUJ,EAAMI,KAAU3B,EAAE6B,SAASpC,EAAMkC,IAChElC,EAAKqC,KAAKH,GA74BhB,GAAII,GAAOC,KAGPC,EAAqBF,EAAK/B,EAG1BkC,EAAaC,MAAMV,UAAWC,EAAWU,OAAOX,UAAWY,EAAYC,SAASb,UAIlFK,EAAmBI,EAAWJ,KAC9Bd,EAAmBkB,EAAWlB,MAC9BuB,EAAmBb,EAASa,SAC5BC,EAAmBd,EAASc,eAK5BC,EAAqBN,MAAMO,QAC3BC,EAAqBP,OAAO3C,KAC5BmD,EAAqBP,EAAUQ,KAC/BC,EAAqBV,OAAOW,OAG1BC,EAAO,aAGPhD,EAAI,SAASV,GACf,MAAIA,aAAeU,GAAUV,EACvB0C,eAAgBhC,QACtBgC,KAAKiB,SAAW3D,GADiB,GAAIU,GAAEV,GAOlB,oBAAZ4D,UACa,mBAAXC,SAA0BA,OAAOD,UAC1CA,QAAUC,OAAOD,QAAUlD,GAE7BkD,QAAQlD,EAAIA,GAEZ+B,EAAK/B,EAAIA,EAIXA,EAAEoD,QAAU,OAKZ,IAAItD,GAAa,SAASuD,EAAMxD,EAASyD,GACvC,GAAIzD,QAAiB,GAAG,MAAOwD,EAC/B,QAAoB,MAAZC,EAAmB,EAAIA,GAC7B,IAAK,GAAG,MAAO,UAASC,GACtB,MAAOF,GAAKpC,KAAKpB,EAAS0D,GAE5B,KAAK,GAAG,MAAO,UAASA,EAAOC,GAC7B,MAAOH,GAAKpC,KAAKpB,EAAS0D,EAAOC,GAEnC,KAAK,GAAG,MAAO,UAASD,EAAO7D,EAAO+D,GACpC,MAAOJ,GAAKpC,KAAKpB,EAAS0D,EAAO7D,EAAO+D,GAE1C,KAAK,GAAG,MAAO,UAASC,EAAaH,EAAO7D,EAAO+D,GACjD,MAAOJ,GAAKpC,KAAKpB,EAAS6D,EAAaH,EAAO7D,EAAO+D,IAGzD,MAAO,YACL,MAAOJ,GAAKM,MAAM9D,EAASI,aAO3BI,EAAK,SAASkD,EAAO1D,EAASyD,GAChC,MAAa,OAATC,EAAsBvD,EAAE4D,SACxB5D,EAAEwB,WAAW+B,GAAezD,EAAWyD,EAAO1D,EAASyD,GACvDtD,EAAE6D,SAASN,GAAevD,EAAE8D,QAAQP,GACjCvD,EAAE+D,SAASR,GAEpBvD,GAAET,SAAW,SAASgE,EAAO1D,GAC3B,MAAOQ,GAAGkD,EAAO1D,EAASmE,KAI5B,IAAIC,GAAiB,SAASC,EAAUC,GACtC,MAAO,UAAS7E,GACd,GAAIK,GAASM,UAAUN,MACvB,IAAa,EAATA,GAAqB,MAAPL,EAAa,MAAOA,EACtC,KAAK,GAAII,GAAQ,EAAWC,EAARD,EAAgBA,IAIlC,IAAK,GAHD0E,GAASnE,UAAUP,GACnBD,EAAOyE,EAASE,GAChBC,EAAI5E,EAAKE,OACJiB,EAAI,EAAOyD,EAAJzD,EAAOA,IAAK,CAC1B,GAAI0D,GAAM7E,EAAKmB,EACVuD,IAAiB7E,EAAIgF,SAAc,KAAGhF,EAAIgF,GAAOF,EAAOE,IAGjE,MAAOhF,KAKPiF,EAAa,SAAS9C,GACxB,IAAKzB,EAAE6D,SAASpC,GAAY,QAC5B,IAAIqB,EAAc,MAAOA,GAAarB,EACtCuB,GAAKvB,UAAYA,CACjB,IAAI+C,GAAS,GAAIxB,EAEjB,OADAA,GAAKvB,UAAY,KACV+C,GAGLT,EAAW,SAASO,GACtB,MAAO,UAAShF,GACd,MAAc,OAAPA,MAAmB,GAAIA,EAAIgF,KAQlCG,EAAkB5D,KAAK6D,IAAI,EAAG,IAAM,EACpCpE,EAAYyD,EAAS,UACrBhE,EAAc,SAAS0D,GACzB,GAAI9D,GAASW,EAAUmD,EACvB,OAAwB,gBAAV9D,IAAsBA,GAAU,GAAe8E,GAAV9E,EASrDK,GAAE2E,KAAO3E,EAAE4E,QAAU,SAAStF,EAAKC,EAAUM,GAC3CN,EAAWO,EAAWP,EAAUM,EAChC,IAAIe,GAAGjB,CACP,IAAII,EAAYT,GACd,IAAKsB,EAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC3CrB,EAASD,EAAIsB,GAAIA,EAAGtB,OAEjB,CACL,GAAIG,GAAOO,EAAEP,KAAKH,EAClB,KAAKsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAC5CrB,EAASD,EAAIG,EAAKmB,IAAKnB,EAAKmB,GAAItB,GAGpC,MAAOA,IAITU,EAAE6E,IAAM7E,EAAE8E,QAAU,SAASxF,EAAKC,EAAUM,GAC1CN,EAAWc,EAAGd,EAAUM,EAIxB,KAAK,GAHDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OACvBoF,EAAU5C,MAAMxC,GACXD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtCqF,GAAQrF,GAASH,EAASD,EAAIM,GAAaA,EAAYN,GAEzD,MAAOyF,IA+BT/E,EAAEgF,OAAShF,EAAEiF,MAAQjF,EAAEkF,OAAS/F,EAAa,GAG7Ca,EAAEmF,YAAcnF,EAAEoF,MAAQjG,GAAc,GAGxCa,EAAEqF,KAAOrF,EAAEsF,OAAS,SAAShG,EAAKc,EAAWP,GAC3C,GAAIyE,EAMJ,OAJEA,GADEvE,EAAYT,GACRU,EAAEuF,UAAUjG,EAAKc,EAAWP,GAE5BG,EAAEwF,QAAQlG,EAAKc,EAAWP,GAE9ByE,QAAa,IAAKA,KAAS,EAAUhF,EAAIgF,GAA7C,QAKFtE,EAAEyF,OAASzF,EAAE0F,OAAS,SAASpG,EAAKc,EAAWP,GAC7C,GAAIkF,KAKJ,OAJA3E,GAAYC,EAAGD,EAAWP,GAC1BG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC7BvF,EAAUmD,EAAO7D,EAAOiG,IAAOZ,EAAQjD,KAAKyB,KAE3CwB,GAIT/E,EAAE4F,OAAS,SAAStG,EAAKc,EAAWP,GAClC,MAAOG,GAAEyF,OAAOnG,EAAKU,EAAE6F,OAAOxF,EAAGD,IAAaP,IAKhDG,EAAE8F,MAAQ9F,EAAE+F,IAAM,SAASzG,EAAKc,EAAWP,GACzCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,KAAKU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE3D,OAAO,GAKTU,EAAEgG,KAAOhG,EAAEiG,IAAM,SAAS3G,EAAKc,EAAWP,GACxCO,EAAYC,EAAGD,EAAWP,EAG1B,KAAK,GAFDJ,IAAQM,EAAYT,IAAQU,EAAEP,KAAKH,GACnCK,GAAUF,GAAQH,GAAKK,OAClBD,EAAQ,EAAWC,EAARD,EAAgBA,IAAS,CAC3C,GAAIE,GAAaH,EAAOA,EAAKC,GAASA,CACtC,IAAIU,EAAUd,EAAIM,GAAaA,EAAYN,GAAM,OAAO,EAE1D,OAAO,GAKTU,EAAE6B,SAAW7B,EAAEkG,SAAWlG,EAAEmG,QAAU,SAAS7G,EAAKoB,EAAM0F,EAAWC,GAGnE,MAFKtG,GAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,KACd,gBAAb8G,IAAyBC,KAAOD,EAAY,GAChDpG,EAAEuG,QAAQjH,EAAKoB,EAAM0F,IAAc,GAI5CpG,EAAEwG,OAAS,SAASlH,EAAKmH,GACvB,GAAIC,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7B0G,EAAS3G,EAAEwB,WAAWiF,EAC1B,OAAOzG,GAAE6E,IAAIvF,EAAK,SAASiE,GACzB,GAAIF,GAAOsD,EAASF,EAASlD,EAAMkD,EACnC,OAAe,OAARpD,EAAeA,EAAOA,EAAKM,MAAMJ,EAAOmD,MAKnD1G,EAAE4G,MAAQ,SAAStH,EAAKgF,GACtB,MAAOtE,GAAE6E,IAAIvF,EAAKU,EAAE+D,SAASO,KAK/BtE,EAAE6G,MAAQ,SAASvH,EAAKwH,GACtB,MAAO9G,GAAEyF,OAAOnG,EAAKU,EAAE8D,QAAQgD,KAKjC9G,EAAE+G,UAAY,SAASzH,EAAKwH,GAC1B,MAAO9G,GAAEqF,KAAK/F,EAAKU,EAAE8D,QAAQgD,KAI/B9G,EAAEc,IAAM,SAASxB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,GAAUR,IAAUiD,GAAgBjD,GAExC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACR2C,EAAQiB,IACVA,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IAC9BqB,EAAWC,GAAgBD,KAAchD,KAAYQ,KAAYR,OACnEQ,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAITxE,EAAEe,IAAM,SAASzB,EAAKC,EAAUM,GAC9B,GACI0D,GAAOyD,EADPxC,EAASR,IAAUiD,EAAejD,GAEtC,IAAgB,MAAZzE,GAA2B,MAAPD,EAAa,CACnCA,EAAMS,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,EACxC,KAAK,GAAIsB,GAAI,EAAGjB,EAASL,EAAIK,OAAYA,EAAJiB,EAAYA,IAC/C2C,EAAQjE,EAAIsB,GACA4D,EAARjB,IACFiB,EAASjB,OAIbhE,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,EAAOiG,GACjCqB,EAAWzH,EAASgE,EAAO7D,EAAOiG,IACnBsB,EAAXD,GAAwChD,MAAbgD,GAAoChD,MAAXQ,KACtDA,EAASjB,EACT0D,EAAeD,IAIrB,OAAOxC,IAKTxE,EAAEkH,QAAU,SAAS5H,GAInB,IAAK,GAAe6H,GAHhBC,EAAMrH,EAAYT,GAAOA,EAAMU,EAAEsG,OAAOhH,GACxCK,EAASyH,EAAIzH,OACb0H,EAAWlF,MAAMxC,GACZD,EAAQ,EAAiBC,EAARD,EAAgBA,IACxCyH,EAAOnH,EAAEsH,OAAO,EAAG5H,GACfyH,IAASzH,IAAO2H,EAAS3H,GAAS2H,EAASF,IAC/CE,EAASF,GAAQC,EAAI1H,EAEvB,OAAO2H,IAMTrH,EAAEuH,OAAS,SAASjI,EAAKkI,EAAGnB,GAC1B,MAAS,OAALmB,GAAanB,GACVtG,EAAYT,KAAMA,EAAMU,EAAEsG,OAAOhH,IAC/BA,EAAIU,EAAEsH,OAAOhI,EAAIK,OAAS,KAE5BK,EAAEkH,QAAQ5H,GAAK0B,MAAM,EAAGH,KAAKC,IAAI,EAAG0G,KAI7CxH,EAAEyH,OAAS,SAASnI,EAAKC,EAAUM,GAEjC,MADAN,GAAWc,EAAGd,EAAUM,GACjBG,EAAE4G,MAAM5G,EAAE6E,IAAIvF,EAAK,SAASiE,EAAO7D,EAAOiG,GAC/C,OACEpC,MAAOA,EACP7D,MAAOA,EACPgI,SAAUnI,EAASgE,EAAO7D,EAAOiG,MAElCgC,KAAK,SAASC,EAAMC,GACrB,GAAIC,GAAIF,EAAKF,SACTK,EAAIF,EAAMH,QACd,IAAII,IAAMC,EAAG,CACX,GAAID,EAAIC,GAAKD,QAAW,GAAG,MAAO,EAClC,IAAQC,EAAJD,GAASC,QAAW,GAAG,OAAQ,EAErC,MAAOH,GAAKlI,MAAQmI,EAAMnI,QACxB,SAIN,IAAIsI,GAAQ,SAASC,GACnB,MAAO,UAAS3I,EAAKC,EAAUM,GAC7B,GAAI2E,KAMJ,OALAjF,GAAWc,EAAGd,EAAUM,GACxBG,EAAE2E,KAAKrF,EAAK,SAASiE,EAAO7D,GAC1B,GAAI4E,GAAM/E,EAASgE,EAAO7D,EAAOJ,EACjC2I,GAASzD,EAAQjB,EAAOe,KAEnBE,GAMXxE,GAAEkI,QAAUF,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,GAAKxC,KAAKyB,GAAaiB,EAAOF,IAAQf,KAKvEvD,EAAEmI,QAAUH,EAAM,SAASxD,EAAQjB,EAAOe,GACxCE,EAAOF,GAAOf,IAMhBvD,EAAEoI,QAAUJ,EAAM,SAASxD,EAAQjB,EAAOe,GACpCtE,EAAE4B,IAAI4C,EAAQF,GAAME,EAAOF,KAAaE,EAAOF,GAAO,IAI5DtE,EAAEqI,QAAU,SAAS/I,GACnB,MAAKA,GACDU,EAAE0C,QAAQpD,GAAa0B,EAAMC,KAAK3B,GAClCS,EAAYT,GAAaU,EAAE6E,IAAIvF,EAAKU,EAAE4D,UACnC5D,EAAEsG,OAAOhH,OAIlBU,EAAEsI,KAAO,SAAShJ,GAChB,MAAW,OAAPA,EAAoB,EACjBS,EAAYT,GAAOA,EAAIK,OAASK,EAAEP,KAAKH,GAAKK,QAKrDK,EAAEuI,UAAY,SAASjJ,EAAKc,EAAWP,GACrCO,EAAYC,EAAGD,EAAWP,EAC1B,IAAI2I,MAAWC,IAIf,OAHAzI,GAAE2E,KAAKrF,EAAK,SAASiE,EAAOe,EAAKhF,IAC9Bc,EAAUmD,EAAOe,EAAKhF,GAAOkJ,EAAOC,GAAM3G,KAAKyB,MAE1CiF,EAAMC,IAShBzI,EAAE0I,MAAQ1I,EAAE2I,KAAO3I,EAAE4I,KAAO,SAASzI,EAAOqH,EAAGnB,GAC7C,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAM,GAC9BH,EAAE6I,QAAQ1I,EAAOA,EAAMR,OAAS6H,IAMzCxH,EAAE6I,QAAU,SAAS1I,EAAOqH,EAAGnB,GAC7B,MAAOrF,GAAMC,KAAKd,EAAO,EAAGU,KAAKC,IAAI,EAAGX,EAAMR,QAAe,MAAL6H,GAAanB,EAAQ,EAAImB,MAKnFxH,EAAE8I,KAAO,SAAS3I,EAAOqH,EAAGnB,GAC1B,MAAa,OAATlG,MAA2B,GACtB,MAALqH,GAAanB,EAAclG,EAAMA,EAAMR,OAAS,GAC7CK,EAAE+I,KAAK5I,EAAOU,KAAKC,IAAI,EAAGX,EAAMR,OAAS6H,KAMlDxH,EAAE+I,KAAO/I,EAAEgJ,KAAOhJ,EAAEiJ,KAAO,SAAS9I,EAAOqH,EAAGnB,GAC5C,MAAOrF,GAAMC,KAAKd,EAAY,MAALqH,GAAanB,EAAQ,EAAImB,IAIpDxH,EAAEkJ,QAAU,SAAS/I,GACnB,MAAOH,GAAEyF,OAAOtF,EAAOH,EAAE4D,UAI3B,IAAIuF,GAAU,SAASC,EAAOC,EAASC,EAAQC,GAE7C,IAAK,GADDC,MAAa7I,EAAM,EACdC,EAAI2I,GAAc,EAAG5J,EAASW,EAAU8I,GAAYzJ,EAAJiB,EAAYA,IAAK,CACxE,GAAI2C,GAAQ6F,EAAMxI,EAClB,IAAIb,EAAYwD,KAAWvD,EAAE0C,QAAQa,IAAUvD,EAAEyJ,YAAYlG,IAAS,CAE/D8F,IAAS9F,EAAQ4F,EAAQ5F,EAAO8F,EAASC,GAC9C,IAAII,GAAI,EAAGC,EAAMpG,EAAM5D,MAEvB,KADA6J,EAAO7J,QAAUgK,EACNA,EAAJD,GACLF,EAAO7I,KAAS4C,EAAMmG,SAEdJ,KACVE,EAAO7I,KAAS4C,GAGpB,MAAOiG,GAITxJ,GAAEmJ,QAAU,SAAShJ,EAAOkJ,GAC1B,MAAOF,GAAQhJ,EAAOkJ,GAAS,IAIjCrJ,EAAE4J,QAAU,SAASzJ,GACnB,MAAOH,GAAE6J,WAAW1J,EAAOa,EAAMC,KAAKhB,UAAW,KAMnDD,EAAE8J,KAAO9J,EAAE+J,OAAS,SAAS5J,EAAO6J,EAAUzK,EAAUM,GACjDG,EAAEiK,UAAUD,KACfnK,EAAUN,EACVA,EAAWyK,EACXA,GAAW,GAEG,MAAZzK,IAAkBA,EAAWc,EAAGd,EAAUM,GAG9C,KAAK,GAFD2E,MACA0F,KACKtJ,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAI2C,GAAQpD,EAAMS,GACdoG,EAAWzH,EAAWA,EAASgE,EAAO3C,EAAGT,GAASoD,CAClDyG,IACGpJ,GAAKsJ,IAASlD,GAAUxC,EAAO1C,KAAKyB,GACzC2G,EAAOlD,GACEzH,EACJS,EAAE6B,SAASqI,EAAMlD,KACpBkD,EAAKpI,KAAKkF,GACVxC,EAAO1C,KAAKyB,IAEJvD,EAAE6B,SAAS2C,EAAQjB,IAC7BiB,EAAO1C,KAAKyB,GAGhB,MAAOiB,IAKTxE,EAAEmK,MAAQ,WACR,MAAOnK,GAAE8J,KAAKX,EAAQlJ,WAAW,GAAM,KAKzCD,EAAEoK,aAAe,SAASjK,GAGxB,IAAK,GAFDqE,MACA6F,EAAapK,UAAUN,OAClBiB,EAAI,EAAGjB,EAASW,EAAUH,GAAYR,EAAJiB,EAAYA,IAAK,CAC1D,GAAIF,GAAOP,EAAMS,EACjB,KAAIZ,EAAE6B,SAAS2C,EAAQ9D,GAAvB,CACA,IAAK,GAAIgJ,GAAI,EAAOW,EAAJX,GACT1J,EAAE6B,SAAS5B,UAAUyJ,GAAIhJ,GADAgJ,KAG5BA,IAAMW,GAAY7F,EAAO1C,KAAKpB,IAEpC,MAAO8D,IAKTxE,EAAE6J,WAAa,SAAS1J,GACtB,GAAI4I,GAAOI,EAAQlJ,WAAW,GAAM,EAAM,EAC1C,OAAOD,GAAEyF,OAAOtF,EAAO,SAASoD,GAC9B,OAAQvD,EAAE6B,SAASkH,EAAMxF,MAM7BvD,EAAEsK,IAAM,WACN,MAAOtK,GAAEuK,MAAMtK,YAKjBD,EAAEuK,MAAQ,SAASpK,GAIjB,IAAK,GAHDR,GAASQ,GAASH,EAAEc,IAAIX,EAAOG,GAAWX,QAAU,EACpD6E,EAASrC,MAAMxC,GAEVD,EAAQ,EAAWC,EAARD,EAAgBA,IAClC8E,EAAO9E,GAASM,EAAE4G,MAAMzG,EAAOT,EAEjC,OAAO8E,IAMTxE,EAAEwK,OAAS,SAAS7E,EAAMW,GAExB,IAAK,GADD9B,MACK5D,EAAI,EAAGjB,EAASW,EAAUqF,GAAWhG,EAAJiB,EAAYA,IAChD0F,EACF9B,EAAOmB,EAAK/E,IAAM0F,EAAO1F,GAEzB4D,EAAOmB,EAAK/E,GAAG,IAAM+E,EAAK/E,GAAG,EAGjC,OAAO4D,IAiBTxE,EAAEuF,UAAYrF,EAA2B,GACzCF,EAAEyK,cAAgBvK,GAA4B,GAI9CF,EAAES,YAAc,SAASN,EAAOb,EAAKC,EAAUM,GAC7CN,EAAWc,EAAGd,EAAUM,EAAS,EAGjC,KAFA,GAAI0D,GAAQhE,EAASD,GACjBoL,EAAM,EAAGC,EAAOrK,EAAUH,GACjBwK,EAAND,GAAY,CACjB,GAAIE,GAAM/J,KAAKgK,OAAOH,EAAMC,GAAQ,EAChCpL,GAASY,EAAMyK,IAAQrH,EAAOmH,EAAME,EAAM,EAAQD,EAAOC,EAE/D,MAAOF,IAgCT1K,EAAEuG,QAAUhG,EAAkB,EAAGP,EAAEuF,UAAWvF,EAAES,aAChDT,EAAE8K,YAAcvK,GAAmB,EAAGP,EAAEyK,eAKxCzK,EAAE+K,MAAQ,SAASC,EAAOC,EAAMC,GAClB,MAARD,IACFA,EAAOD,GAAS,EAChBA,EAAQ,GAEVE,EAAOA,GAAQ,CAKf,KAAK,GAHDvL,GAASkB,KAAKC,IAAID,KAAKsK,MAAMF,EAAOD,GAASE,GAAO,GACpDH,EAAQ5I,MAAMxC,GAETgB,EAAM,EAAShB,EAANgB,EAAcA,IAAOqK,GAASE,EAC9CH,EAAMpK,GAAOqK,CAGf,OAAOD,GAQT,IAAIK,GAAe,SAASC,EAAYC,EAAWzL,EAAS0L,EAAgB7E,GAC1E,KAAM6E,YAA0BD,IAAY,MAAOD,GAAW1H,MAAM9D,EAAS6G,EAC7E,IAAI8E,GAAOjH,EAAW8G,EAAW5J,WAC7B+C,EAAS6G,EAAW1H,MAAM6H,EAAM9E,EACpC,OAAI1G,GAAE6D,SAASW,GAAgBA,EACxBgH,EAMTxL,GAAE6C,KAAO,SAASQ,EAAMxD,GACtB,GAAI+C,GAAcS,EAAKR,OAASD,EAAY,MAAOA,GAAWe,MAAMN,EAAMrC,EAAMC,KAAKhB,UAAW,GAChG,KAAKD,EAAEwB,WAAW6B,GAAO,KAAM,IAAIoI,WAAU,oCAC7C,IAAI/E,GAAO1F,EAAMC,KAAKhB,UAAW,GAC7ByL,EAAQ,WACV,MAAON,GAAa/H,EAAMqI,EAAO7L,EAASmC,KAAM0E,EAAKiF,OAAO3K,EAAMC,KAAKhB,aAEzE,OAAOyL,IAMT1L,EAAE4L,QAAU,SAASvI,GACnB,GAAIwI,GAAY7K,EAAMC,KAAKhB,UAAW,GAClCyL,EAAQ,WAGV,IAAK,GAFDI,GAAW,EAAGnM,EAASkM,EAAUlM,OACjC+G,EAAOvE,MAAMxC,GACRiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B8F,EAAK9F,GAAKiL,EAAUjL,KAAOZ,EAAIC,UAAU6L,KAAcD,EAAUjL,EAEnE,MAAOkL,EAAW7L,UAAUN,QAAQ+G,EAAK5E,KAAK7B,UAAU6L,KACxD,OAAOV,GAAa/H,EAAMqI,EAAO1J,KAAMA,KAAM0E,GAE/C,OAAOgF,IAMT1L,EAAE+L,QAAU,SAASzM,GACnB,GAAIsB,GAA8B0D,EAA3B3E,EAASM,UAAUN,MAC1B,IAAc,GAAVA,EAAa,KAAM,IAAIqM,OAAM,wCACjC,KAAKpL,EAAI,EAAOjB,EAAJiB,EAAYA,IACtB0D,EAAMrE,UAAUW,GAChBtB,EAAIgF,GAAOtE,EAAE6C,KAAKvD,EAAIgF,GAAMhF,EAE9B,OAAOA,IAITU,EAAEiM,QAAU,SAAS5I,EAAM6I,GACzB,GAAID,GAAU,SAAS3H,GACrB,GAAI6H,GAAQF,EAAQE,MAChBC,EAAU,IAAMF,EAASA,EAAOvI,MAAM3B,KAAM/B,WAAaqE,EAE7D,OADKtE,GAAE4B,IAAIuK,EAAOC,KAAUD,EAAMC,GAAW/I,EAAKM,MAAM3B,KAAM/B,YACvDkM,EAAMC,GAGf,OADAH,GAAQE,SACDF,GAKTjM,EAAEqM,MAAQ,SAAShJ,EAAMiJ,GACvB,GAAI5F,GAAO1F,EAAMC,KAAKhB,UAAW,EACjC,OAAOsM,YAAW,WAChB,MAAOlJ,GAAKM,MAAM,KAAM+C,IACvB4F,IAKLtM,EAAEwM,MAAQxM,EAAE4L,QAAQ5L,EAAEqM,MAAOrM,EAAG,GAOhCA,EAAEyM,SAAW,SAASpJ,EAAMiJ,EAAMI,GAChC,GAAI7M,GAAS6G,EAAMlC,EACfmI,EAAU,KACVC,EAAW,CACVF,KAASA,KACd,IAAIG,GAAQ,WACVD,EAAWF,EAAQI,WAAY,EAAQ,EAAI9M,EAAE+M,MAC7CJ,EAAU,KACVnI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,MAEjC,OAAO,YACL,GAAIqG,GAAM/M,EAAE+M,KACPH,IAAYF,EAAQI,WAAY,IAAOF,EAAWG,EACvD,IAAIC,GAAYV,GAAQS,EAAMH,EAc9B,OAbA/M,GAAUmC,KACV0E,EAAOzG,UACU,GAAb+M,GAAkBA,EAAYV,GAC5BK,IACFM,aAAaN,GACbA,EAAU,MAEZC,EAAWG,EACXvI,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,OACrBiG,GAAWD,EAAQQ,YAAa,IAC1CP,EAAUJ,WAAWM,EAAOG,IAEvBxI,IAQXxE,EAAEmN,SAAW,SAAS9J,EAAMiJ,EAAMc,GAChC,GAAIT,GAASjG,EAAM7G,EAASwN,EAAW7I,EAEnCqI,EAAQ,WACV,GAAI/D,GAAO9I,EAAE+M,MAAQM,CAEVf,GAAPxD,GAAeA,GAAQ,EACzB6D,EAAUJ,WAAWM,EAAOP,EAAOxD,IAEnC6D,EAAU,KACLS,IACH5I,EAASnB,EAAKM,MAAM9D,EAAS6G,GACxBiG,IAAS9M,EAAU6G,EAAO,QAKrC,OAAO,YACL7G,EAAUmC,KACV0E,EAAOzG,UACPoN,EAAYrN,EAAE+M,KACd,IAAIO,GAAUF,IAAcT,CAO5B,OANKA,KAASA,EAAUJ,WAAWM,EAAOP,IACtCgB,IACF9I,EAASnB,EAAKM,MAAM9D,EAAS6G,GAC7B7G,EAAU6G,EAAO,MAGZlC,IAOXxE,EAAEuN,KAAO,SAASlK,EAAMmK,GACtB,MAAOxN,GAAE4L,QAAQ4B,EAASnK,IAI5BrD,EAAE6F,OAAS,SAASzF,GAClB,MAAO,YACL,OAAQA,EAAUuD,MAAM3B,KAAM/B,aAMlCD,EAAEyN,QAAU,WACV,GAAI/G,GAAOzG,UACP+K,EAAQtE,EAAK/G,OAAS,CAC1B,OAAO,YAGL,IAFA,GAAIiB,GAAIoK,EACJxG,EAASkC,EAAKsE,GAAOrH,MAAM3B,KAAM/B,WAC9BW,KAAK4D,EAASkC,EAAK9F,GAAGK,KAAKe,KAAMwC,EACxC,OAAOA,KAKXxE,EAAE0N,MAAQ,SAASC,EAAOtK,GACxB,MAAO,YACL,QAAMsK,EAAQ,EACLtK,EAAKM,MAAM3B,KAAM/B,WAD1B,SAOJD,EAAE4N,OAAS,SAASD,EAAOtK,GACzB,GAAI7D,EACJ,OAAO,YAKL,QAJMmO,EAAQ,IACZnO,EAAO6D,EAAKM,MAAM3B,KAAM/B,YAEb,GAAT0N,IAAYtK,EAAO,MAChB7D,IAMXQ,EAAE6N,KAAO7N,EAAE4L,QAAQ5L,EAAE4N,OAAQ,EAM7B,IAAIE,KAAevL,SAAU,MAAMwL,qBAAqB,YACpD1M,GAAsB,UAAW,gBAAiB,WAClC,uBAAwB,iBAAkB,iBAqB9DrB,GAAEP,KAAO,SAASH,GAChB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIqD,EAAY,MAAOA,GAAWrD,EAClC,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAASU,EAAE4B,IAAItC,EAAKgF,IAAM7E,EAAKqC,KAAKwC,EAGpD,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEgO,QAAU,SAAS1O,GACnB,IAAKU,EAAE6D,SAASvE,GAAM,QACtB,IAAIG,KACJ,KAAK,GAAI6E,KAAOhF,GAAKG,EAAKqC,KAAKwC,EAG/B,OADIwJ,IAAY3M,EAAoB7B,EAAKG,GAClCA,GAITO,EAAEsG,OAAS,SAAShH,GAIlB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACd2G,EAASnE,MAAMxC,GACViB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1B0F,EAAO1F,GAAKtB,EAAIG,EAAKmB,GAEvB,OAAO0F,IAKTtG,EAAEiO,UAAY,SAAS3O,EAAKC,EAAUM,GACpCN,EAAWc,EAAGd,EAAUM,EAKtB,KAAK,GADDD,GAHFH,EAAQO,EAAEP,KAAKH,GACbK,EAASF,EAAKE,OACdoF,KAEKrF,EAAQ,EAAWC,EAARD,EAAgBA,IAClCE,EAAaH,EAAKC,GAClBqF,EAAQnF,GAAcL,EAASD,EAAIM,GAAaA,EAAYN,EAE9D,OAAOyF,IAIX/E,EAAEkO,MAAQ,SAAS5O,GAIjB,IAAK,GAHDG,GAAOO,EAAEP,KAAKH,GACdK,EAASF,EAAKE,OACduO,EAAQ/L,MAAMxC,GACTiB,EAAI,EAAOjB,EAAJiB,EAAYA,IAC1BsN,EAAMtN,IAAMnB,EAAKmB,GAAItB,EAAIG,EAAKmB,IAEhC,OAAOsN,IAITlO,EAAEmO,OAAS,SAAS7O,GAGlB,IAAK,GAFDkF,MACA/E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAChD4D,EAAOlF,EAAIG,EAAKmB,KAAOnB,EAAKmB,EAE9B,OAAO4D,IAKTxE,EAAEoO,UAAYpO,EAAEqO,QAAU,SAAS/O,GACjC,GAAIgP,KACJ,KAAK,GAAIhK,KAAOhF,GACVU,EAAEwB,WAAWlC,EAAIgF,KAAOgK,EAAMxM,KAAKwC,EAEzC,OAAOgK,GAAM3G,QAIf3H,EAAEuO,OAAStK,EAAejE,EAAEgO,SAI5BhO,EAAEwO,UAAYxO,EAAEyO,OAASxK,EAAejE,EAAEP,MAG1CO,EAAEwF,QAAU,SAASlG,EAAKc,EAAWP,GACnCO,EAAYC,EAAGD,EAAWP,EAE1B,KAAK,GADmByE,GAApB7E,EAAOO,EAAEP,KAAKH,GACTsB,EAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAEhD,GADA0D,EAAM7E,EAAKmB,GACPR,EAAUd,EAAIgF,GAAMA,EAAKhF,GAAM,MAAOgF,IAK9CtE,EAAE0O,KAAO,SAASlE,EAAQmE,EAAW9O,GACnC,GAA+BN,GAAUE,EAArC+E,KAAalF,EAAMkL,CACvB,IAAW,MAAPlL,EAAa,MAAOkF,EACpBxE,GAAEwB,WAAWmN,IACflP,EAAOO,EAAEgO,QAAQ1O,GACjBC,EAAWO,EAAW6O,EAAW9O,KAEjCJ,EAAO0J,EAAQlJ,WAAW,GAAO,EAAO,GACxCV,EAAW,SAASgE,EAAOe,EAAKhF,GAAO,MAAOgF,KAAOhF,IACrDA,EAAM8C,OAAO9C,GAEf,KAAK,GAAIsB,GAAI,EAAGjB,EAASF,EAAKE,OAAYA,EAAJiB,EAAYA,IAAK,CACrD,GAAI0D,GAAM7E,EAAKmB,GACX2C,EAAQjE,EAAIgF,EACZ/E,GAASgE,EAAOe,EAAKhF,KAAMkF,EAAOF,GAAOf,GAE/C,MAAOiB,IAITxE,EAAE4O,KAAO,SAAStP,EAAKC,EAAUM,GAC/B,GAAIG,EAAEwB,WAAWjC,GACfA,EAAWS,EAAE6F,OAAOtG,OACf,CACL,GAAIE,GAAOO,EAAE6E,IAAIsE,EAAQlJ,WAAW,GAAO,EAAO,GAAI4O,OACtDtP,GAAW,SAASgE,EAAOe,GACzB,OAAQtE,EAAE6B,SAASpC,EAAM6E,IAG7B,MAAOtE,GAAE0O,KAAKpP,EAAKC,EAAUM,IAI/BG,EAAE8O,SAAW7K,EAAejE,EAAEgO,SAAS,GAKvChO,EAAE+C,OAAS,SAAStB,EAAWsN,GAC7B,GAAIvK,GAASD,EAAW9C,EAExB,OADIsN,IAAO/O,EAAEwO,UAAUhK,EAAQuK,GACxBvK,GAITxE,EAAEgP,MAAQ,SAAS1P,GACjB,MAAKU,GAAE6D,SAASvE,GACTU,EAAE0C,QAAQpD,GAAOA,EAAI0B,QAAUhB,EAAEuO,UAAWjP,GADtBA,GAO/BU,EAAEiP,IAAM,SAAS3P,EAAK4P,GAEpB,MADAA,GAAY5P,GACLA,GAITU,EAAEmP,QAAU,SAAS3E,EAAQ1D,GAC3B,GAAIrH,GAAOO,EAAEP,KAAKqH,GAAQnH,EAASF,EAAKE,MACxC,IAAc,MAAV6K,EAAgB,OAAQ7K,CAE5B,KAAK,GADDL,GAAM8C,OAAOoI,GACR5J,EAAI,EAAOjB,EAAJiB,EAAYA,IAAK,CAC/B,GAAI0D,GAAM7E,EAAKmB,EACf,IAAIkG,EAAMxC,KAAShF,EAAIgF,MAAUA,IAAOhF,IAAM,OAAO,EAEvD,OAAO,EAKT,IAAI8P,GAAK,SAAStH,EAAGC,EAAGsH,EAAQC,GAG9B,GAAIxH,IAAMC,EAAG,MAAa,KAAND,GAAW,EAAIA,IAAM,EAAIC,CAE7C,IAAS,MAALD,GAAkB,MAALC,EAAW,MAAOD,KAAMC,CAErCD,aAAa9H,KAAG8H,EAAIA,EAAE7E,UACtB8E,YAAa/H,KAAG+H,EAAIA,EAAE9E,SAE1B,IAAIsM,GAAYhN,EAAStB,KAAK6G,EAC9B,IAAIyH,IAAchN,EAAStB,KAAK8G,GAAI,OAAO,CAC3C,QAAQwH,GAEN,IAAK,kBAEL,IAAK,kBAGH,MAAO,GAAKzH,GAAM,GAAKC,CACzB,KAAK,kBAGH,OAAKD,KAAOA,GAAWC,KAAOA,EAEhB,KAAND,EAAU,GAAKA,IAAM,EAAIC,GAAKD,KAAOC,CAC/C,KAAK,gBACL,IAAK,mBAIH,OAAQD,KAAOC,EAGnB,GAAIyH,GAA0B,mBAAdD,CAChB,KAAKC,EAAW,CACd,GAAgB,gBAAL1H,IAA6B,gBAALC,GAAe,OAAO,CAIzD,IAAI0H,GAAQ3H,EAAExG,YAAaoO,EAAQ3H,EAAEzG,WACrC,IAAImO,IAAUC,KAAW1P,EAAEwB,WAAWiO,IAAUA,YAAiBA,IACxCzP,EAAEwB,WAAWkO,IAAUA,YAAiBA,KACzC,eAAiB5H,IAAK,eAAiBC,GAC7D,OAAO,EAQXsH,EAASA,MACTC,EAASA,KAET,KADA,GAAI3P,GAAS0P,EAAO1P,OACbA,KAGL,GAAI0P,EAAO1P,KAAYmI,EAAG,MAAOwH,GAAO3P,KAAYoI,CAQtD,IAJAsH,EAAOvN,KAAKgG,GACZwH,EAAOxN,KAAKiG,GAGRyH,EAAW,CAGb,GADA7P,EAASmI,EAAEnI,OACPA,IAAWoI,EAAEpI,OAAQ,OAAO,CAEhC,MAAOA,KACL,IAAKyP,EAAGtH,EAAEnI,GAASoI,EAAEpI,GAAS0P,EAAQC,GAAS,OAAO,MAEnD,CAEL,GAAsBhL,GAAlB7E,EAAOO,EAAEP,KAAKqI,EAGlB,IAFAnI,EAASF,EAAKE,OAEVK,EAAEP,KAAKsI,GAAGpI,SAAWA,EAAQ,OAAO,CACxC,MAAOA,KAGL,GADA2E,EAAM7E,EAAKE,IACLK,EAAE4B,IAAImG,EAAGzD,KAAQ8K,EAAGtH,EAAExD,GAAMyD,EAAEzD,GAAM+K,EAAQC,GAAU,OAAO,EAMvE,MAFAD,GAAOM,MACPL,EAAOK,OACA,EAIT3P,GAAE4P,QAAU,SAAS9H,EAAGC,GACtB,MAAOqH,GAAGtH,EAAGC,IAKf/H,EAAE6P,QAAU,SAASvQ,GACnB,MAAW,OAAPA,GAAoB,EACpBS,EAAYT,KAASU,EAAE0C,QAAQpD,IAAQU,EAAE8P,SAASxQ,IAAQU,EAAEyJ,YAAYnK,IAA6B,IAAfA,EAAIK,OAChE,IAAvBK,EAAEP,KAAKH,GAAKK,QAIrBK,EAAE+P,UAAY,SAASzQ,GACrB,SAAUA,GAAwB,IAAjBA,EAAI0Q,WAKvBhQ,EAAE0C,QAAUD,GAAiB,SAASnD,GACpC,MAA8B,mBAAvBiD,EAAStB,KAAK3B,IAIvBU,EAAE6D,SAAW,SAASvE,GACpB,GAAI2Q,SAAc3Q,EAClB,OAAgB,aAAT2Q,GAAgC,WAATA,KAAuB3Q,GAIvDU,EAAE2E,MAAM,YAAa,WAAY,SAAU,SAAU,OAAQ,SAAU,SAAU,SAASuL,GACxFlQ,EAAE,KAAOkQ,GAAQ,SAAS5Q,GACxB,MAAOiD,GAAStB,KAAK3B,KAAS,WAAa4Q,EAAO,OAMjDlQ,EAAEyJ,YAAYxJ,aACjBD,EAAEyJ,YAAc,SAASnK,GACvB,MAAOU,GAAE4B,IAAItC,EAAK,YAMJ,kBAAP,KAAyC,gBAAb6Q,aACrCnQ,EAAEwB,WAAa,SAASlC,GACtB,MAAqB,kBAAPA,KAAqB,IAKvCU,EAAEoQ,SAAW,SAAS9Q,GACpB,MAAO8Q,UAAS9Q,KAAS4B,MAAMmP,WAAW/Q,KAI5CU,EAAEkB,MAAQ,SAAS5B,GACjB,MAAOU,GAAEsQ,SAAShR,IAAQA,KAASA,GAIrCU,EAAEiK,UAAY,SAAS3K,GACrB,MAAOA,MAAQ,GAAQA,KAAQ,GAAgC,qBAAvBiD,EAAStB,KAAK3B,IAIxDU,EAAEuQ,OAAS,SAASjR,GAClB,MAAe,QAARA,GAITU,EAAEwQ,YAAc,SAASlR,GACvB,MAAOA,SAAa,IAKtBU,EAAE4B,IAAM,SAAStC,EAAKgF,GACpB,MAAc,OAAPhF,GAAekD,EAAevB,KAAK3B,EAAKgF,IAQjDtE,EAAEyQ,WAAa,WAEb,MADA1O,GAAK/B,EAAIiC,EACFD,MAIThC,EAAE4D,SAAW,SAASL,GACpB,MAAOA,IAITvD,EAAE0Q,SAAW,SAASnN,GACpB,MAAO,YACL,MAAOA,KAIXvD,EAAE2Q,KAAO,aAET3Q,EAAE+D,SAAWA,EAGb/D,EAAE4Q,WAAa,SAAStR,GACtB,MAAc,OAAPA,EAAc,aAAe,SAASgF,GAC3C,MAAOhF,GAAIgF,KAMftE,EAAE8D,QAAU9D,EAAE6Q,QAAU,SAAS/J,GAE/B,MADAA,GAAQ9G,EAAEwO,aAAc1H,GACjB,SAASxH,GACd,MAAOU,GAAEmP,QAAQ7P,EAAKwH,KAK1B9G,EAAE2N,MAAQ,SAASnG,EAAGjI,EAAUM,GAC9B,GAAIiR,GAAQ3O,MAAMtB,KAAKC,IAAI,EAAG0G,GAC9BjI,GAAWO,EAAWP,EAAUM,EAAS,EACzC,KAAK,GAAIe,GAAI,EAAO4G,EAAJ5G,EAAOA,IAAKkQ,EAAMlQ,GAAKrB,EAASqB,EAChD,OAAOkQ,IAIT9Q,EAAEsH,OAAS,SAASvG,EAAKD,GAKvB,MAJW,OAAPA,IACFA,EAAMC,EACNA,EAAM,GAEDA,EAAMF,KAAKgK,MAAMhK,KAAKyG,UAAYxG,EAAMC,EAAM,KAIvDf,EAAE+M,IAAMgE,KAAKhE,KAAO,WAClB,OAAO,GAAIgE,OAAOC,UAIpB,IAAIC,IACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAEHC,EAAcxR,EAAEmO,OAAO8C,GAGvBQ,EAAgB,SAAS5M,GAC3B,GAAI6M,GAAU,SAASC,GACrB,MAAO9M,GAAI8M,IAGTvN,EAAS,MAAQpE,EAAEP,KAAKoF,GAAK+M,KAAK,KAAO,IACzCC,EAAaC,OAAO1N,GACpB2N,EAAgBD,OAAO1N,EAAQ,IACnC,OAAO,UAAS4N,GAEd,MADAA,GAAmB,MAAVA,EAAiB,GAAK,GAAKA,EAC7BH,EAAWI,KAAKD,GAAUA,EAAOE,QAAQH,EAAeL,GAAWM,GAG9EhS,GAAEmS,OAASV,EAAcR,GACzBjR,EAAEoS,SAAWX,EAAcD,GAI3BxR,EAAEwE,OAAS,SAASgG,EAAQzG,EAAUsO,GACpC,GAAI9O,GAAkB,MAAViH,MAAsB,GAAIA,EAAOzG,EAI7C,OAHIR,SAAe,KACjBA,EAAQ8O,GAEHrS,EAAEwB,WAAW+B,GAASA,EAAMtC,KAAKuJ,GAAUjH,EAKpD,IAAI+O,GAAY,CAChBtS,GAAEuS,SAAW,SAASC,GACpB,GAAIC,KAAOH,EAAY,EACvB,OAAOE,GAASA,EAASC,EAAKA,GAKhCzS,EAAE0S,kBACAC,SAAc,kBACdC,YAAc,mBACdT,OAAc,mBAMhB,IAAIU,GAAU,OAIVC,GACFxB,IAAU,IACVyB,KAAU,KACVC,KAAU,IACVC,KAAU,IACVC,SAAU,QACVC,SAAU,SAGRzB,EAAU,4BAEV0B,EAAa,SAASzB,GACxB,MAAO,KAAOmB,EAAQnB,GAOxB3R,GAAEqT,SAAW,SAASC,EAAMC,EAAUC,IAC/BD,GAAYC,IAAaD,EAAWC,GACzCD,EAAWvT,EAAE8O,YAAayE,EAAUvT,EAAE0S,iBAGtC,IAAI5O,GAAUgO,SACXyB,EAASpB,QAAUU,GAASzO,QAC5BmP,EAASX,aAAeC,GAASzO,QACjCmP,EAASZ,UAAYE,GAASzO,QAC/BwN,KAAK,KAAO,KAAM,KAGhBlS,EAAQ,EACR0E,EAAS,QACbkP,GAAKpB,QAAQpO,EAAS,SAAS6N,EAAOQ,EAAQS,EAAaD,EAAUc,GAanE,MAZArP,IAAUkP,EAAKtS,MAAMtB,EAAO+T,GAAQvB,QAAQR,EAAS0B,GACrD1T,EAAQ+T,EAAS9B,EAAMhS,OAEnBwS,EACF/N,GAAU,cAAgB+N,EAAS,iCAC1BS,EACTxO,GAAU,cAAgBwO,EAAc,uBAC/BD,IACTvO,GAAU,OAASuO,EAAW,YAIzBhB,IAETvN,GAAU,OAGLmP,EAASG,WAAUtP,EAAS,mBAAqBA,EAAS,OAE/DA,EAAS,2CACP,oDACAA,EAAS,eAEX,KACE,GAAIuP,GAAS,GAAIrR,UAASiR,EAASG,UAAY,MAAO,IAAKtP,GAC3D,MAAOwP,GAEP,KADAA,GAAExP,OAASA,EACLwP,EAGR,GAAIP,GAAW,SAASQ,GACtB,MAAOF,GAAO1S,KAAKe,KAAM6R,EAAM7T,IAI7B8T,EAAWP,EAASG,UAAY,KAGpC,OAFAL,GAASjP,OAAS,YAAc0P,EAAW,OAAS1P,EAAS,IAEtDiP,GAITrT,EAAE+T,MAAQ,SAASzU,GACjB,GAAI0U,GAAWhU,EAAEV,EAEjB,OADA0U,GAASC,QAAS,EACXD,EAUT,IAAIxP,GAAS,SAASwP,EAAU1U,GAC9B,MAAO0U,GAASC,OAASjU,EAAEV,GAAKyU,QAAUzU,EAI5CU,GAAEkU,MAAQ,SAAS5U,GACjBU,EAAE2E,KAAK3E,EAAEoO,UAAU9O,GAAM,SAAS4Q,GAChC,GAAI7M,GAAOrD,EAAEkQ,GAAQ5Q,EAAI4Q,EACzBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAIxJ,IAAQ1E,KAAKiB,SAEjB,OADAnB,GAAK6B,MAAM+C,EAAMzG,WACVuE,EAAOxC,KAAMqB,EAAKM,MAAM3D,EAAG0G,QAMxC1G,EAAEkU,MAAMlU,GAGRA,EAAE2E,MAAM,MAAO,OAAQ,UAAW,QAAS,OAAQ,SAAU,WAAY,SAASuL,GAChF,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,GAAI5Q,GAAM0C,KAAKiB,QAGf,OAFAwD,GAAO9C,MAAMrE,EAAKW,WACJ,UAATiQ,GAA6B,WAATA,GAAqC,IAAf5Q,EAAIK,cAAqBL,GAAI,GACrEkF,EAAOxC,KAAM1C,MAKxBU,EAAE2E,MAAM,SAAU,OAAQ,SAAU,SAASuL,GAC3C,GAAIzJ,GAASvE,EAAWgO,EACxBlQ,GAAEyB,UAAUyO,GAAQ,WAClB,MAAO1L,GAAOxC,KAAMyE,EAAO9C,MAAM3B,KAAKiB,SAAUhD,eAKpDD,EAAEyB,UAAU8B,MAAQ,WAClB,MAAOvB,MAAKiB,UAKdjD,EAAEyB,UAAU0S,QAAUnU,EAAEyB,UAAU2S,OAASpU,EAAEyB,UAAU8B,MAEvDvD,EAAEyB,UAAUc,SAAW,WACrB,MAAO,GAAKP,KAAKiB,UAUG,kBAAXoR,SAAyBA,OAAOC,KACzCD,OAAO,gBAAkB,WACvB,MAAOrU,OAGXiB,KAAKe"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/underscore/underscore.js b/truebit-implementation/node_modules/underscore/underscore.js deleted file mode 100644 index b29332f9..00000000 --- a/truebit-implementation/node_modules/underscore/underscore.js +++ /dev/null @@ -1,1548 +0,0 @@ -// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` in the browser, or `exports` on the server. - var root = this; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; - - // Create quick reference variables for speed access to core prototypes. - var - push = ArrayProto.push, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var - nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeBind = FuncProto.bind, - nativeCreate = Object.create; - - // Naked function reference for surrogate-prototype-swapping. - var Ctor = function(){}; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object. - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.8.3'; - - // Internal function that returns an efficient (for current engines) version - // of the passed-in callback, to be repeatedly applied in other Underscore - // functions. - var optimizeCb = function(func, context, argCount) { - if (context === void 0) return func; - switch (argCount == null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - case 2: return function(value, other) { - return func.call(context, value, other); - }; - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; - } - return function() { - return func.apply(context, arguments); - }; - }; - - // A mostly-internal function to generate callbacks that can be applied - // to each element in a collection, returning the desired result — either - // identity, an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { - if (value == null) return _.identity; - if (_.isFunction(value)) return optimizeCb(value, context, argCount); - if (_.isObject(value)) return _.matcher(value); - return _.property(value); - }; - _.iteratee = function(value, context) { - return cb(value, context, Infinity); - }; - - // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, undefinedOnly) { - return function(obj) { - var length = arguments.length; - if (length < 2 || obj == null) return obj; - for (var index = 1; index < length; index++) { - var source = arguments[index], - keys = keysFunc(source), - l = keys.length; - for (var i = 0; i < l; i++) { - var key = keys[i]; - if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; - } - } - return obj; - }; - }; - - // An internal function for creating a new object that inherits from another. - var baseCreate = function(prototype) { - if (!_.isObject(prototype)) return {}; - if (nativeCreate) return nativeCreate(prototype); - Ctor.prototype = prototype; - var result = new Ctor; - Ctor.prototype = null; - return result; - }; - - var property = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; - - // Helper for collection methods to determine whether a collection - // should be iterated as an array or as an object - // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength - // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 - var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var getLength = property('length'); - var isArrayLike = function(collection) { - var length = getLength(collection); - return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; - }; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles raw objects in addition to array-likes. Treats all - // sparse array-likes as if they were dense. - _.each = _.forEach = function(obj, iteratee, context) { - iteratee = optimizeCb(iteratee, context); - var i, length; - if (isArrayLike(obj)) { - for (i = 0, length = obj.length; i < length; i++) { - iteratee(obj[i], i, obj); - } - } else { - var keys = _.keys(obj); - for (i = 0, length = keys.length; i < length; i++) { - iteratee(obj[keys[i]], keys[i], obj); - } - } - return obj; - }; - - // Return the results of applying the iteratee to each element. - _.map = _.collect = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - results = Array(length); - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - results[index] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Create a reducing function iterating left or right. - function createReduce(dir) { - // Optimized iterator function as using arguments.length - // in the main function will deoptimize the, see #1991. - function iterator(obj, iteratee, memo, keys, index, length) { - for (; index >= 0 && index < length; index += dir) { - var currentKey = keys ? keys[index] : index; - memo = iteratee(memo, obj[currentKey], currentKey, obj); - } - return memo; - } - - return function(obj, iteratee, memo, context) { - iteratee = optimizeCb(iteratee, context, 4); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length, - index = dir > 0 ? 0 : length - 1; - // Determine the initial value if none is provided. - if (arguments.length < 3) { - memo = obj[keys ? keys[index] : index]; - index += dir; - } - return iterator(obj, iteratee, memo, keys, index, length); - }; - } - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. - _.reduce = _.foldl = _.inject = createReduce(1); - - // The right-associative version of reduce, also known as `foldr`. - _.reduceRight = _.foldr = createReduce(-1); - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, predicate, context) { - var key; - if (isArrayLike(obj)) { - key = _.findIndex(obj, predicate, context); - } else { - key = _.findKey(obj, predicate, context); - } - if (key !== void 0 && key !== -1) return obj[key]; - }; - - // Return all the elements that pass a truth test. - // Aliased as `select`. - _.filter = _.select = function(obj, predicate, context) { - var results = []; - predicate = cb(predicate, context); - _.each(obj, function(value, index, list) { - if (predicate(value, index, list)) results.push(value); - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, predicate, context) { - return _.filter(obj, _.negate(cb(predicate)), context); - }; - - // Determine whether all of the elements match a truth test. - // Aliased as `all`. - _.every = _.all = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (!predicate(obj[currentKey], currentKey, obj)) return false; - } - return true; - }; - - // Determine if at least one element in the object matches a truth test. - // Aliased as `any`. - _.some = _.any = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = !isArrayLike(obj) && _.keys(obj), - length = (keys || obj).length; - for (var index = 0; index < length; index++) { - var currentKey = keys ? keys[index] : index; - if (predicate(obj[currentKey], currentKey, obj)) return true; - } - return false; - }; - - // Determine if the array or object contains a given item (using `===`). - // Aliased as `includes` and `include`. - _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - if (typeof fromIndex != 'number' || guard) fromIndex = 0; - return _.indexOf(obj, item, fromIndex) >= 0; - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = function(obj, method) { - var args = slice.call(arguments, 2); - var isFunc = _.isFunction(method); - return _.map(obj, function(value) { - var func = isFunc ? method : value[method]; - return func == null ? func : func.apply(value, args); - }); - }; - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, _.property(key)); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs) { - return _.filter(obj, _.matcher(attrs)); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.find(obj, _.matcher(attrs)); - }; - - // Return the maximum element (or element-based computation). - _.max = function(obj, iteratee, context) { - var result = -Infinity, lastComputed = -Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value > result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed > lastComputed || computed === -Infinity && result === -Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iteratee, context) { - var result = Infinity, lastComputed = Infinity, - value, computed; - if (iteratee == null && obj != null) { - obj = isArrayLike(obj) ? obj : _.values(obj); - for (var i = 0, length = obj.length; i < length; i++) { - value = obj[i]; - if (value < result) { - result = value; - } - } - } else { - iteratee = cb(iteratee, context); - _.each(obj, function(value, index, list) { - computed = iteratee(value, index, list); - if (computed < lastComputed || computed === Infinity && result === Infinity) { - result = value; - lastComputed = computed; - } - }); - } - return result; - }; - - // Shuffle a collection, using the modern version of the - // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). - _.shuffle = function(obj) { - var set = isArrayLike(obj) ? obj : _.values(obj); - var length = set.length; - var shuffled = Array(length); - for (var index = 0, rand; index < length; index++) { - rand = _.random(0, index); - if (rand !== index) shuffled[index] = shuffled[rand]; - shuffled[rand] = set[index]; - } - return shuffled; - }; - - // Sample **n** random values from a collection. - // If **n** is not specified, returns a single random element. - // The internal `guard` argument allows it to work with `map`. - _.sample = function(obj, n, guard) { - if (n == null || guard) { - if (!isArrayLike(obj)) obj = _.values(obj); - return obj[_.random(obj.length - 1)]; - } - return _.shuffle(obj).slice(0, Math.max(0, n)); - }; - - // Sort the object's values by a criterion produced by an iteratee. - _.sortBy = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - return _.pluck(_.map(obj, function(value, index, list) { - return { - value: value, - index: index, - criteria: iteratee(value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index - right.index; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(behavior) { - return function(obj, iteratee, context) { - var result = {}; - iteratee = cb(iteratee, context); - _.each(obj, function(value, index) { - var key = iteratee(value, index, obj); - behavior(result, value, key); - }); - return result; - }; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = group(function(result, value, key) { - if (_.has(result, key)) result[key].push(value); else result[key] = [value]; - }); - - // Indexes the object's values by a criterion, similar to `groupBy`, but for - // when you know that your index values will be unique. - _.indexBy = group(function(result, value, key) { - result[key] = value; - }); - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = group(function(result, value, key) { - if (_.has(result, key)) result[key]++; else result[key] = 1; - }); - - // Safely create a real, live array from anything iterable. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (isArrayLike(obj)) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return isArrayLike(obj) ? obj.length : _.keys(obj).length; - }; - - // Split a collection into two arrays: one whose elements all satisfy the given - // predicate, and one whose elements all do not satisfy the predicate. - _.partition = function(obj, predicate, context) { - predicate = cb(predicate, context); - var pass = [], fail = []; - _.each(obj, function(value, key, obj) { - (predicate(value, key, obj) ? pass : fail).push(value); - }); - return [pass, fail]; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[0]; - return _.initial(array, array.length - n); - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. - _.initial = function(array, n, guard) { - return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. - _.last = function(array, n, guard) { - if (array == null) return void 0; - if (n == null || guard) return array[array.length - 1]; - return _.rest(array, Math.max(0, array.length - n)); - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, n == null || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, _.identity); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, strict, startIndex) { - var output = [], idx = 0; - for (var i = startIndex || 0, length = getLength(input); i < length; i++) { - var value = input[i]; - if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { - //flatten current level of array or arguments object - if (!shallow) value = flatten(value, shallow, strict); - var j = 0, len = value.length; - output.length += len; - while (j < len) { - output[idx++] = value[j++]; - } - } else if (!strict) { - output[idx++] = value; - } - } - return output; - }; - - // Flatten out an array, either recursively (by default), or just one level. - _.flatten = function(array, shallow) { - return flatten(array, shallow, false); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (!_.isBoolean(isSorted)) { - context = iteratee; - iteratee = isSorted; - isSorted = false; - } - if (iteratee != null) iteratee = cb(iteratee, context); - var result = []; - var seen = []; - for (var i = 0, length = getLength(array); i < length; i++) { - var value = array[i], - computed = iteratee ? iteratee(value, i, array) : value; - if (isSorted) { - if (!i || seen !== computed) result.push(value); - seen = computed; - } else if (iteratee) { - if (!_.contains(seen, computed)) { - seen.push(computed); - result.push(value); - } - } else if (!_.contains(result, value)) { - result.push(value); - } - } - return result; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(flatten(arguments, true, true)); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var result = []; - var argsLength = arguments.length; - for (var i = 0, length = getLength(array); i < length; i++) { - var item = array[i]; - if (_.contains(result, item)) continue; - for (var j = 1; j < argsLength; j++) { - if (!_.contains(arguments[j], item)) break; - } - if (j === argsLength) result.push(item); - } - return result; - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = function(array) { - var rest = flatten(arguments, true, true, 1); - return _.filter(array, function(value){ - return !_.contains(rest, value); - }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function() { - return _.unzip(arguments); - }; - - // Complement of _.zip. Unzip accepts an array of arrays and groups - // each array's elements on shared indices - _.unzip = function(array) { - var length = array && _.max(array, getLength).length || 0; - var result = Array(length); - - for (var index = 0; index < length; index++) { - result[index] = _.pluck(array, index); - } - return result; - }; - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. - _.object = function(list, values) { - var result = {}; - for (var i = 0, length = getLength(list); i < length; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // Generator function to create the findIndex and findLastIndex functions - function createPredicateIndexFinder(dir) { - return function(array, predicate, context) { - predicate = cb(predicate, context); - var length = getLength(array); - var index = dir > 0 ? 0 : length - 1; - for (; index >= 0 && index < length; index += dir) { - if (predicate(array[index], index, array)) return index; - } - return -1; - }; - } - - // Returns the first index on an array-like that passes a predicate test - _.findIndex = createPredicateIndexFinder(1); - _.findLastIndex = createPredicateIndexFinder(-1); - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iteratee, context) { - iteratee = cb(iteratee, context, 1); - var value = iteratee(obj); - var low = 0, high = getLength(array); - while (low < high) { - var mid = Math.floor((low + high) / 2); - if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; - } - return low; - }; - - // Generator function to create the indexOf and lastIndexOf functions - function createIndexFinder(dir, predicateFind, sortedIndex) { - return function(array, item, idx) { - var i = 0, length = getLength(array); - if (typeof idx == 'number') { - if (dir > 0) { - i = idx >= 0 ? idx : Math.max(idx + length, i); - } else { - length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; - } - } else if (sortedIndex && idx && length) { - idx = sortedIndex(array, item); - return array[idx] === item ? idx : -1; - } - if (item !== item) { - idx = predicateFind(slice.call(array, i, length), _.isNaN); - return idx >= 0 ? idx + i : -1; - } - for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { - if (array[idx] === item) return idx; - } - return -1; - }; - } - - // Return the position of the first occurrence of an item in an array, - // or -1 if the item is not included in the array. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); - _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (stop == null) { - stop = start || 0; - start = 0; - } - step = step || 1; - - var length = Math.max(Math.ceil((stop - start) / step), 0); - var range = Array(length); - - for (var idx = 0; idx < length; idx++, start += step) { - range[idx] = start; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Determines whether to execute a function as a constructor - // or a normal function with the provided arguments - var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { - if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); - var self = baseCreate(sourceFunc.prototype); - var result = sourceFunc.apply(self, args); - if (_.isObject(result)) return result; - return self; - }; - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = function(func, context) { - if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); - var args = slice.call(arguments, 2); - var bound = function() { - return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); - }; - return bound; - }; - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. _ acts - // as a placeholder, allowing any combination of arguments to be pre-filled. - _.partial = function(func) { - var boundArgs = slice.call(arguments, 1); - var bound = function() { - var position = 0, length = boundArgs.length; - var args = Array(length); - for (var i = 0; i < length; i++) { - args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; - } - while (position < arguments.length) args.push(arguments[position++]); - return executeBound(func, bound, this, this, args); - }; - return bound; - }; - - // Bind a number of an object's methods to that object. Remaining arguments - // are the method names to be bound. Useful for ensuring that all callbacks - // defined on an object belong to it. - _.bindAll = function(obj) { - var i, length = arguments.length, key; - if (length <= 1) throw new Error('bindAll must be passed function names'); - for (i = 1; i < length; i++) { - key = arguments[i]; - obj[key] = _.bind(obj[key], obj); - } - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memoize = function(key) { - var cache = memoize.cache; - var address = '' + (hasher ? hasher.apply(this, arguments) : key); - if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); - return cache[address]; - }; - memoize.cache = {}; - return memoize; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ - return func.apply(null, args); - }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = _.partial(_.delay, _, 1); - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - _.throttle = function(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - if (!options) options = {}; - var later = function() { - previous = options.leading === false ? 0 : _.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) context = args = null; - }; - return function() { - var now = _.now(); - if (!previous && options.leading === false) previous = now; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - previous = now; - result = func.apply(context, args); - if (!timeout) context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, args, context, timestamp, result; - - var later = function() { - var last = _.now() - timestamp; - - if (last < wait && last >= 0) { - timeout = setTimeout(later, wait - last); - } else { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - if (!timeout) context = args = null; - } - } - }; - - return function() { - context = this; - args = arguments; - timestamp = _.now(); - var callNow = immediate && !timeout; - if (!timeout) timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - context = args = null; - } - - return result; - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return _.partial(wrapper, func); - }; - - // Returns a negated version of the passed-in predicate. - _.negate = function(predicate) { - return function() { - return !predicate.apply(this, arguments); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var args = arguments; - var start = args.length - 1; - return function() { - var i = start; - var result = args[start].apply(this, arguments); - while (i--) result = args[i].call(this, result); - return result; - }; - }; - - // Returns a function that will only be executed on and after the Nth call. - _.after = function(times, func) { - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Returns a function that will only be executed up to (but not including) the Nth call. - _.before = function(times, func) { - var memo; - return function() { - if (--times > 0) { - memo = func.apply(this, arguments); - } - if (times <= 1) func = null; - return memo; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = _.partial(_.before, 2); - - // Object Functions - // ---------------- - - // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. - var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); - var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', - 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; - - function collectNonEnumProps(obj, keys) { - var nonEnumIdx = nonEnumerableProps.length; - var constructor = obj.constructor; - var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; - - // Constructor is a special case. - var prop = 'constructor'; - if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); - - while (nonEnumIdx--) { - prop = nonEnumerableProps[nonEnumIdx]; - if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { - keys.push(prop); - } - } - } - - // Retrieve the names of an object's own properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = function(obj) { - if (!_.isObject(obj)) return []; - if (nativeKeys) return nativeKeys(obj); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve all the property names of an object. - _.allKeys = function(obj) { - if (!_.isObject(obj)) return []; - var keys = []; - for (var key in obj) keys.push(key); - // Ahem, IE < 9. - if (hasEnumBug) collectNonEnumProps(obj, keys); - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var values = Array(length); - for (var i = 0; i < length; i++) { - values[i] = obj[keys[i]]; - } - return values; - }; - - // Returns the results of applying the iteratee to each element of the object - // In contrast to _.map it returns an object - _.mapObject = function(obj, iteratee, context) { - iteratee = cb(iteratee, context); - var keys = _.keys(obj), - length = keys.length, - results = {}, - currentKey; - for (var index = 0; index < length; index++) { - currentKey = keys[index]; - results[currentKey] = iteratee(obj[currentKey], currentKey, obj); - } - return results; - }; - - // Convert an object into a list of `[key, value]` pairs. - _.pairs = function(obj) { - var keys = _.keys(obj); - var length = keys.length; - var pairs = Array(length); - for (var i = 0; i < length; i++) { - pairs[i] = [keys[i], obj[keys[i]]]; - } - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - var keys = _.keys(obj); - for (var i = 0, length = keys.length; i < length; i++) { - result[obj[keys[i]]] = keys[i]; - } - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = createAssigner(_.allKeys); - - // Assigns a given object with all the own properties in the passed-in object(s) - // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - _.extendOwn = _.assign = createAssigner(_.keys); - - // Returns the first key on an object that passes a predicate test - _.findKey = function(obj, predicate, context) { - predicate = cb(predicate, context); - var keys = _.keys(obj), key; - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (predicate(obj[key], key, obj)) return key; - } - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = function(object, oiteratee, context) { - var result = {}, obj = object, iteratee, keys; - if (obj == null) return result; - if (_.isFunction(oiteratee)) { - keys = _.allKeys(obj); - iteratee = optimizeCb(oiteratee, context); - } else { - keys = flatten(arguments, false, false, 1); - iteratee = function(value, key, obj) { return key in obj; }; - obj = Object(obj); - } - for (var i = 0, length = keys.length; i < length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } - return result; - }; - - // Return a copy of the object without the blacklisted properties. - _.omit = function(obj, iteratee, context) { - if (_.isFunction(iteratee)) { - iteratee = _.negate(iteratee); - } else { - var keys = _.map(flatten(arguments, false, false, 1), String); - iteratee = function(value, key) { - return !_.contains(keys, key); - }; - } - return _.pick(obj, iteratee, context); - }; - - // Fill in a given object with default properties. - _.defaults = createAssigner(_.allKeys, true); - - // Creates an object that inherits from the given prototype object. - // If additional properties are provided then they will be added to the - // created object. - _.create = function(prototype, props) { - var result = baseCreate(prototype); - if (props) _.extendOwn(result, props); - return result; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Returns whether an object has a given set of `key:value` pairs. - _.isMatch = function(object, attrs) { - var keys = _.keys(attrs), length = keys.length; - if (object == null) return !length; - var obj = Object(object); - for (var i = 0; i < length; i++) { - var key = keys[i]; - if (attrs[key] !== obj[key] || !(key in obj)) return false; - } - return true; - }; - - - // Internal recursive comparison function for `isEqual`. - var eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) return a !== 0 || 1 / a === 1 / b; - // A strict comparison is necessary because `null == undefined`. - if (a == null || b == null) return a === b; - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) return false; - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case '[object RegExp]': - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return '' + a === '' + b; - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN - if (+a !== +a) return +b !== +b; - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - } - - var areArrays = className === '[object Array]'; - if (!areArrays) { - if (typeof a != 'object' || typeof b != 'object') return false; - - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && - _.isFunction(bCtor) && bCtor instanceof bCtor) - && ('constructor' in a && 'constructor' in b)) { - return false; - } - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) return bStack[length] === b; - } - - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) return false; - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], aStack, bStack)) return false; - } - } else { - // Deep compare objects. - var keys = _.keys(a), key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (_.keys(b).length !== length) return false; - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; - return _.keys(obj).length === 0; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - var type = typeof obj; - return type === 'function' || type === 'object' && !!obj; - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. - _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) === '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE < 9), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return _.has(obj, 'callee'); - }; - } - - // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, - // IE 11 (#1621), and in Safari 8 (#1929). - if (typeof /./ != 'function' && typeof Int8Array != 'object') { - _.isFunction = function(obj) { - return typeof obj == 'function' || false; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? (NaN is the only number which does not equal itself). - _.isNaN = function(obj) { - return _.isNumber(obj) && obj !== +obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, key) { - return obj != null && hasOwnProperty.call(obj, key); - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iteratees. - _.identity = function(value) { - return value; - }; - - // Predicate-generating functions. Often useful outside of Underscore. - _.constant = function(value) { - return function() { - return value; - }; - }; - - _.noop = function(){}; - - _.property = property; - - // Generates a function for a given object that returns a given property. - _.propertyOf = function(obj) { - return obj == null ? function(){} : function(key) { - return obj[key]; - }; - }; - - // Returns a predicate for checking whether an object has a given set of - // `key:value` pairs. - _.matcher = _.matches = function(attrs) { - attrs = _.extendOwn({}, attrs); - return function(obj) { - return _.isMatch(obj, attrs); - }; - }; - - // Run a function **n** times. - _.times = function(n, iteratee, context) { - var accum = Array(Math.max(0, n)); - iteratee = optimizeCb(iteratee, context, 1); - for (var i = 0; i < n; i++) accum[i] = iteratee(i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // A (possibly faster) way to get the current timestamp as an integer. - _.now = Date.now || function() { - return new Date().getTime(); - }; - - // List of HTML entities for escaping. - var escapeMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`' - }; - var unescapeMap = _.invert(escapeMap); - - // Functions for escaping and unescaping strings to/from HTML interpolation. - var createEscaper = function(map) { - var escaper = function(match) { - return map[match]; - }; - // Regexes for identifying a key that needs to be escaped - var source = '(?:' + _.keys(map).join('|') + ')'; - var testRegexp = RegExp(source); - var replaceRegexp = RegExp(source, 'g'); - return function(string) { - string = string == null ? '' : '' + string; - return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; - }; - }; - _.escape = createEscaper(escapeMap); - _.unescape = createEscaper(unescapeMap); - - // If the value of the named `property` is a function then invoke it with the - // `object` as context; otherwise, return it. - _.result = function(object, property, fallback) { - var value = object == null ? void 0 : object[property]; - if (value === void 0) { - value = fallback; - } - return _.isFunction(value) ? value.call(object) : value; - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g, - escape : /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escaper = /\\|'|\r|\n|\u2028|\u2029/g; - - var escapeChar = function(match) { - return '\\' + escapes[match]; - }; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - // NB: `oldSettings` only exists for backwards compatibility. - _.template = function(text, settings, oldSettings) { - if (!settings && oldSettings) settings = oldSettings; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset).replace(escaper, escapeChar); - index = offset + match.length; - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } else if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } else if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - - // Adobe VMs need the match returned to produce the correct offest. - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + 'return __p;\n'; - - try { - var render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled source as a convenience for precompilation. - var argument = settings.variable || 'obj'; - template.source = 'function(' + argument + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function. Start chaining a wrapped Underscore object. - _.chain = function(obj) { - var instance = _(obj); - instance._chain = true; - return instance; - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var result = function(instance, obj) { - return instance._chain ? _(obj).chain() : obj; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - _.each(_.functions(obj), function(name) { - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return result(this, func.apply(_, args)); - }; - }); - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; - return result(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - _.each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return result(this, method.apply(this._wrapped, arguments)); - }; - }); - - // Extracts the result from a wrapped and chained object. - _.prototype.value = function() { - return this._wrapped; - }; - - // Provide unwrapping proxy for some methods used in engine operations - // such as arithmetic and JSON stringification. - _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - - _.prototype.toString = function() { - return '' + this._wrapped; - }; - - // AMD registration happens at the end for compatibility with AMD loaders - // that may not enforce next-turn semantics on modules. Even though general - // practice for AMD registration is to be anonymous, underscore registers - // as a named module because, like jQuery, it is a base library that is - // popular enough to be bundled in a third party lib, but not be part of - // an AMD load request. Those cases could generate an error when an - // anonymous define() is called outside of a loader request. - if (typeof define === 'function' && define.amd) { - define('underscore', [], function() { - return _; - }); - } -}.call(this)); diff --git a/truebit-implementation/node_modules/unpipe/HISTORY.md b/truebit-implementation/node_modules/unpipe/HISTORY.md deleted file mode 100644 index 85e0f8d7..00000000 --- a/truebit-implementation/node_modules/unpipe/HISTORY.md +++ /dev/null @@ -1,4 +0,0 @@ -1.0.0 / 2015-06-14 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/unpipe/LICENSE b/truebit-implementation/node_modules/unpipe/LICENSE deleted file mode 100644 index aed01382..00000000 --- a/truebit-implementation/node_modules/unpipe/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/unpipe/README.md b/truebit-implementation/node_modules/unpipe/README.md deleted file mode 100644 index e536ad2c..00000000 --- a/truebit-implementation/node_modules/unpipe/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# unpipe - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Unpipe a stream from all destinations. - -## Installation - -```sh -$ npm install unpipe -``` - -## API - -```js -var unpipe = require('unpipe') -``` - -### unpipe(stream) - -Unpipes all destinations from a given stream. With stream 2+, this is -equivalent to `stream.unpipe()`. When used with streams 1 style streams -(typically Node.js 0.8 and below), this module attempts to undo the -actions done in `stream.pipe(dest)`. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/unpipe.svg -[npm-url]: https://npmjs.org/package/unpipe -[node-image]: https://img.shields.io/node/v/unpipe.svg -[node-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg -[travis-url]: https://travis-ci.org/stream-utils/unpipe -[coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg -[coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master -[downloads-image]: https://img.shields.io/npm/dm/unpipe.svg -[downloads-url]: https://npmjs.org/package/unpipe diff --git a/truebit-implementation/node_modules/unpipe/index.js b/truebit-implementation/node_modules/unpipe/index.js deleted file mode 100644 index 15c3d97a..00000000 --- a/truebit-implementation/node_modules/unpipe/index.js +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * unpipe - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = unpipe - -/** - * Determine if there are Node.js pipe-like data listeners. - * @private - */ - -function hasPipeDataListeners(stream) { - var listeners = stream.listeners('data') - - for (var i = 0; i < listeners.length; i++) { - if (listeners[i].name === 'ondata') { - return true - } - } - - return false -} - -/** - * Unpipe a stream from all destinations. - * - * @param {object} stream - * @public - */ - -function unpipe(stream) { - if (!stream) { - throw new TypeError('argument stream is required') - } - - if (typeof stream.unpipe === 'function') { - // new-style - stream.unpipe() - return - } - - // Node.js 0.8 hack - if (!hasPipeDataListeners(stream)) { - return - } - - var listener - var listeners = stream.listeners('close') - - for (var i = 0; i < listeners.length; i++) { - listener = listeners[i] - - if (listener.name !== 'cleanup' && listener.name !== 'onclose') { - continue - } - - // invoke the listener - listener.call(stream) - } -} diff --git a/truebit-implementation/node_modules/unpipe/package.json b/truebit-implementation/node_modules/unpipe/package.json deleted file mode 100644 index fb5af5b2..00000000 --- a/truebit-implementation/node_modules/unpipe/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "unpipe@1.0.0", - "_id": "unpipe@1.0.0", - "_inBundle": false, - "_integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "_location": "/unpipe", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "unpipe@1.0.0", - "name": "unpipe", - "escapedName": "unpipe", - "rawSpec": "1.0.0", - "saveSpec": null, - "fetchSpec": "1.0.0" - }, - "_requiredBy": [ - "/finalhandler", - "/raw-body" - ], - "_resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "_shasum": "b2bf4ee8514aae6165b4817829d21b2ef49904ec", - "_spec": "unpipe@1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/raw-body", - "author": { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - "bugs": { - "url": "https://github.com/stream-utils/unpipe/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Unpipe a stream from all destinations", - "devDependencies": { - "istanbul": "0.3.15", - "mocha": "2.2.5", - "readable-stream": "1.1.13" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "index.js" - ], - "homepage": "https://github.com/stream-utils/unpipe#readme", - "license": "MIT", - "name": "unpipe", - "repository": { - "type": "git", - "url": "git+https://github.com/stream-utils/unpipe.git" - }, - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/uri-js/README.md b/truebit-implementation/node_modules/uri-js/README.md deleted file mode 100644 index 3f225e74..00000000 --- a/truebit-implementation/node_modules/uri-js/README.md +++ /dev/null @@ -1,199 +0,0 @@ -# URI.js - -URI.js is an [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt) compliant, scheme extendable URI parsing/validating/resolving library for all JavaScript environments (browsers, Node.js, etc). -It is also compliant with the IRI ([RFC 3987](http://www.ietf.org/rfc/rfc3987.txt)), IDNA ([RFC 5890](http://www.ietf.org/rfc/rfc5890.txt)), IPv6 Address ([RFC 5952](http://www.ietf.org/rfc/rfc5952.txt)), IPv6 Zone Identifier ([RFC 6874](http://www.ietf.org/rfc/rfc6874.txt)) specifications. - -URI.js has an extensive test suite, and works in all (Node.js, web) environments. It weighs in at 6.2kb (gzipped, 16kb deflated). - -## API - -### Parsing - - URI.parse("uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body"); - //returns: - //{ - // scheme : "uri", - // userinfo : "user:pass", - // host : "example.com", - // port : 123, - // path : "/one/two.three", - // query : "q1=a1&q2=a2", - // fragment : "body" - //} - -### Serializing - - URI.serialize({scheme : "http", host : "example.com", fragment : "footer"}) === "http://example.com/#footer" - -### Resolving - - URI.resolve("uri://a/b/c/d?q", "../../g") === "uri://a/g" - -### Normalizing - - URI.normalize("HTTP://ABC.com:80/%7Esmith/home.html") === "http://abc.com/~smith/home.html" - -### Comparison - - URI.equal("example://a/b/c/%7Bfoo%7D", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d") === true - -### IP Support - - //IPv4 normalization - URI.normalize("//192.068.001.000") === "//192.68.1.0" - - //IPv6 normalization - URI.normalize("//[2001:0:0DB8::0:0001]") === "//[2001:0:db8::1]" - - //IPv6 zone identifier support - URI.parse("//[2001:db8::7%25en1]"); - //returns: - //{ - // host : "2001:db8::7%en1" - //} - -### IRI Support - - //convert IRI to URI - URI.serialize(URI.parse("http://examplé.org/rosé")) === "http://xn--exampl-gva.org/ros%C3%A9" - //convert URI to IRI - URI.serialize(URI.parse("http://xn--exampl-gva.org/ros%C3%A9"), {iri:true}) === "http://examplé.org/rosé" - -### Options - -All of the above functions can accept an additional options argument that is an object that can contain one or more of the following properties: - -* `scheme` (string) - - Indicates the scheme that the URI should be treated as, overriding the URI's normal scheme parsing behavior. - -* `reference` (string) - - If set to `"suffix"`, it indicates that the URI is in the suffix format, and the validator will use the option's `scheme` property to determine the URI's scheme. - -* `tolerant` (boolean, false) - - If set to `true`, the parser will relax URI resolving rules. - -* `absolutePath` (boolean, false) - - If set to `true`, the serializer will not resolve a relative `path` component. - -* `iri` (boolean, false) - - If set to `true`, the serializer will unescape non-ASCII characters as per [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). - -* `unicodeSupport` (boolean, false) - - If set to `true`, the parser will unescape non-ASCII characters in the parsed output as per [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). - -* `domainHost` (boolean, false) - - If set to `true`, the library will treat the `host` component as a domain name, and convert IDNs (International Domain Names) as per [RFC 5891](http://www.ietf.org/rfc/rfc5891.txt). - -## Scheme Extendable - -URI.js supports inserting custom [scheme](http://en.wikipedia.org/wiki/URI_scheme) dependent processing rules. Currently, URI.js has built in support for the following schemes: - -* http \[[RFC 2616](http://www.ietf.org/rfc/rfc2616.txt)\] -* https \[[RFC 2818](http://www.ietf.org/rfc/rfc2818.txt)\] -* mailto \[[RFC 6068](http://www.ietf.org/rfc/rfc6068.txt)\] -* urn \[[RFC 2141](http://www.ietf.org/rfc/rfc2141.txt)\] -* urn:uuid \[[RFC 4122](http://www.ietf.org/rfc/rfc4122.txt)\] - -### HTTP Support - - URI.equal("HTTP://ABC.COM:80", "http://abc.com/") === true - -### Mailto Support - - URI.parse("mailto:alpha@example.com,bravo@example.com?subject=SUBSCRIBE&body=Sign%20me%20up!"); - //returns: - //{ - // scheme : "mailto", - // to : ["alpha@example.com", "bravo@example.com"], - // subject : "SUBSCRIBE", - // body : "Sign me up!" - //} - - URI.serialize({ - scheme : "mailto", - to : ["alpha@example.com"], - subject : "REMOVE", - body : "Please remove me", - headers : { - cc : "charlie@example.com" - } - }) === "mailto:alpha@example.com?cc=charlie@example.com&subject=REMOVE&body=Please%20remove%20me" - -### URN Support - - URI.parse("urn:example:foo"); - //returns: - //{ - // scheme : "urn", - // nid : "example", - // nss : "foo", - //} - -#### URN UUID Support - - URI.parse("urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); - //returns: - //{ - // scheme : "urn", - // nid : "example", - // uuid : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6", - //} - -## Usage - -To load in a browser, use the following tag: - - - -To load in a CommonJS (Node.js) environment, first install with npm by running on the command line: - - npm install uri-js - -Then, in your code, load it using: - - const URI = require("uri-js"); - -If you are writing your code in ES6+ (ESNEXT) or TypeScript, you would load it using: - - import * as URI from "uri-js"; - -Or you can load just what you need using named exports: - - import { parse, serialize, resolve, resolveComponents, normalize, equal, removeDotSegments, pctEncChar, pctDecChars, escapeComponent, unescapeComponent } from "uri-js"; - -## Breaking changes - -### Breaking changes from 3.x - -URN parsing has been completely changed to better align with the specification. Scheme is now always `urn`, but has two new properties: `nid` which contains the Namspace Identifier, and `nss` which contains the Namespace Specific String. The `nss` property will be removed by higher order scheme handlers, such as the UUID URN scheme handler. - -The UUID of a URN can now be found in the `uuid` property. - -### Breaking changes from 2.x - -URI validation has been removed as it was slow, exposed a vulnerabilty, and was generally not useful. - -### Breaking changes from 1.x - -The `errors` array on parsed components is now an `error` string. - -## License ([Simplified BSD](http://en.wikipedia.org/wiki/BSD_licenses#2-clause)) - -Copyright 2011 Gary Court. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. 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. - -THIS SOFTWARE IS PROVIDED BY GARY COURT "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 GARY COURT 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. - -The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Gary Court. diff --git a/truebit-implementation/node_modules/uri-js/bower.json b/truebit-implementation/node_modules/uri-js/bower.json deleted file mode 100644 index 7a404401..00000000 --- a/truebit-implementation/node_modules/uri-js/bower.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "uri-js", - "description": "An RFC 3986/3987 compliant, scheme extendable URI/IRI parsing/validating/resolving library for JavaScript.", - "main": "dist/es5/uri.all.js", - "moduleType": [ - "globals", - "amd", - "node", - "es6" - ], - "authors": [ - "Gary Court " - ], - "license": "BSD-2-Clause", - "keywords": [ - "URI", - "IRI", - "IDN", - "URN", - "HTTP", - "HTTPS", - "MAILTO", - "RFC3986", - "RFC3987", - "RFC5891", - "RFC2616", - "RFC2818", - "RFC2141", - "RFC4122", - "RFC6068" - ], - "homepage": "https://github.com/garycourt/uri-js", - "repository": { - "type": "git", - "url": "http://github.com/garycourt/uri-js" - }, - "dependencies": { - "punycode": "^2.1.0" - }, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.d.ts b/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.d.ts deleted file mode 100644 index 320f5341..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -export interface URIComponents { - scheme?: string; - userinfo?: string; - host?: string; - port?: number | string; - path?: string; - query?: string; - fragment?: string; - reference?: string; - error?: string; -} -export interface URIOptions { - scheme?: string; - reference?: string; - tolerant?: boolean; - absolutePath?: boolean; - iri?: boolean; - unicodeSupport?: boolean; - domainHost?: boolean; -} -export interface URISchemeHandler { - scheme: string; - parse(components: ParentComponents, options: Options): Components; - serialize(components: Components, options: Options): ParentComponents; - unicodeSupport?: boolean; - domainHost?: boolean; - absolutePath?: boolean; -} -export interface URIRegExps { - NOT_SCHEME: RegExp; - NOT_USERINFO: RegExp; - NOT_HOST: RegExp; - NOT_PATH: RegExp; - NOT_PATH_NOSCHEME: RegExp; - NOT_QUERY: RegExp; - NOT_FRAGMENT: RegExp; - ESCAPE: RegExp; - UNRESERVED: RegExp; - OTHER_CHARS: RegExp; - PCT_ENCODED: RegExp; - IPV4ADDRESS: RegExp; - IPV6ADDRESS: RegExp; -} -export declare const SCHEMES: { - [scheme: string]: URISchemeHandler; -}; -export declare function pctEncChar(chr: string): string; -export declare function pctDecChars(str: string): string; -export declare function parse(uriString: string, options?: URIOptions): URIComponents; -export declare function removeDotSegments(input: string): string; -export declare function serialize(components: URIComponents, options?: URIOptions): string; -export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; -export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; -export declare function normalize(uri: string, options?: URIOptions): string; -export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; -export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; -export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; -export declare function escapeComponent(str: string, options?: URIOptions): string; -export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.js b/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.js deleted file mode 100644 index 2df06091..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.js +++ /dev/null @@ -1,1389 +0,0 @@ -/** @license URI.js v4.2.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.URI = global.URI || {}))); -}(this, (function (exports) { 'use strict'; - -function merge() { - for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) { - sets[_key] = arguments[_key]; - } - - if (sets.length > 1) { - sets[0] = sets[0].slice(0, -1); - var xl = sets.length - 1; - for (var x = 1; x < xl; ++x) { - sets[x] = sets[x].slice(1, -1); - } - sets[xl] = sets[xl].slice(1); - return sets.join(''); - } else { - return sets[0]; - } -} -function subexp(str) { - return "(?:" + str + ")"; -} -function typeOf(o) { - return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase(); -} -function toUpperCase(str) { - return str.toUpperCase(); -} -function toArray(obj) { - return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : []; -} -function assign(target, source) { - var obj = target; - if (source) { - for (var key in source) { - obj[key] = source[key]; - } - } - return obj; -} - -function buildExps(isIRI) { - var ALPHA$$ = "[A-Za-z]", - CR$ = "[\\x0D]", - DIGIT$$ = "[0-9]", - DQUOTE$$ = "[\\x22]", - HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), - //case-insensitive - LF$$ = "[\\x0A]", - SP$$ = "[\\x20]", - PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), - //expanded - GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", - SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", - RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), - UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", - //subset, excludes bidi control characters - IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", - //subset - UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), - SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), - USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), - DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), - DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), - //relaxed parsing rules - IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), - H16$ = subexp(HEXDIG$$ + "{1,4}"), - LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), - IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), - // 6( h16 ":" ) ls32 - IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), - // "::" 5( h16 ":" ) ls32 - IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), - //[ h16 ] "::" 4( h16 ":" ) ls32 - IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), - //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), - //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), - //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), - //[ *4( h16 ":" ) h16 ] "::" ls32 - IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), - //[ *5( h16 ":" ) h16 ] "::" h16 - IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), - //[ *6( h16 ":" ) h16 ] "::" - IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), - ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), - //RFC 6874 - IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), - //RFC 6874 - IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), - //RFC 6874, with relaxed parsing rules - IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), - IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), - //RFC 6874 - REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), - HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), - PORT$ = subexp(DIGIT$$ + "*"), - AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), - PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), - SEGMENT$ = subexp(PCHAR$ + "*"), - SEGMENT_NZ$ = subexp(PCHAR$ + "+"), - SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), - PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), - PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), - //simplified - PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), - //simplified - PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), - //simplified - PATH_EMPTY$ = "(?!" + PCHAR$ + ")", - PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), - FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), - HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), - RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), - ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), - GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", - SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; - return { - NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), - NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), - NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), - ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), - UNRESERVED: new RegExp(UNRESERVED$$, "g"), - OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), - PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), - IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), - IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules - }; -} -var URI_PROTOCOL = buildExps(false); - -var IRI_PROTOCOL = buildExps(true); - -var slicedToArray = function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - return sliceIterator(arr, i); - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - }; -}(); - - - - - - - - - - - - - -var toConsumableArray = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } else { - return Array.from(arr); - } -}; - -/** Highest positive signed 32-bit float value */ - -var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -var base = 36; -var tMin = 1; -var tMax = 26; -var skew = 38; -var damp = 700; -var initialBias = 72; -var initialN = 128; // 0x80 -var delimiter = '-'; // '\x2D' - -/** Regular expressions */ -var regexPunycode = /^xn--/; -var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars -var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -var errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -var baseMinusTMin = base - tMin; -var floor = Math.floor; -var stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error$1(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, fn) { - var result = []; - var length = array.length; - while (length--) { - result[length] = fn(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ -function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - while (counter < length) { - var value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - var extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { - // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -var ucs2encode = function ucs2encode(array) { - return String.fromCodePoint.apply(String, toConsumableArray(array)); -}; - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -var basicToDigit = function basicToDigit(codePoint) { - if (codePoint - 0x30 < 0x0A) { - return codePoint - 0x16; - } - if (codePoint - 0x41 < 0x1A) { - return codePoint - 0x41; - } - if (codePoint - 0x61 < 0x1A) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -var digitToBasic = function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -var adapt = function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -var decode = function decode(input) { - // Don't use UCS-2. - var output = []; - var inputLength = input.length; - var i = 0; - var n = initialN; - var bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - var basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (var j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error$1('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{ - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - var oldi = i; - for (var w = 1, k = base;; /* no condition */k += base) { - - if (index >= inputLength) { - error$1('invalid-input'); - } - - var digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error$1('overflow'); - } - - i += digit * w; - var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - - if (digit < t) { - break; - } - - var baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error$1('overflow'); - } - - w *= baseMinusT; - } - - var out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error$1('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - } - - return String.fromCodePoint.apply(String, output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -var encode = function encode(input) { - var output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - var inputLength = input.length; - - // Initialize the state. - var n = initialN; - var delta = 0; - var bias = initialBias; - - // Handle the basic code points. - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _currentValue2 = _step.value; - - if (_currentValue2 < 0x80) { - output.push(stringFromCharCode(_currentValue2)); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - var basicLength = output.length; - var handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - var m = maxInt; - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var currentValue = _step2.value; - - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - var handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error$1('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var _currentValue = _step3.value; - - if (_currentValue < n && ++delta > maxInt) { - error$1('overflow'); - } - if (_currentValue == n) { - // Represent delta as a generalized variable-length integer. - var q = delta; - for (var k = base;; /* no condition */k += base) { - var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - if (q < t) { - break; - } - var qMinusT = q - t; - var baseMinusT = base - t; - output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - ++delta; - ++n; - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -var toUnicode = function toUnicode(input) { - return mapDomain(input, function (string) { - return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -var toASCII = function toASCII(input) { - return mapDomain(input, function (string) { - return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -var punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.1.0', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -/** - * URI.js - * - * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. - * @author Gary Court - * @see http://github.com/garycourt/uri-js - */ -/** - * Copyright 2011 Gary Court. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY GARY COURT ``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 GARY COURT 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. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of Gary Court. - */ -var SCHEMES = {}; -function pctEncChar(chr) { - var c = chr.charCodeAt(0); - var e = void 0; - if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase(); - return e; -} -function pctDecChars(str) { - var newStr = ""; - var i = 0; - var il = str.length; - while (i < il) { - var c = parseInt(str.substr(i + 1, 2), 16); - if (c < 128) { - newStr += String.fromCharCode(c); - i += 3; - } else if (c >= 194 && c < 224) { - if (il - i >= 6) { - var c2 = parseInt(str.substr(i + 4, 2), 16); - newStr += String.fromCharCode((c & 31) << 6 | c2 & 63); - } else { - newStr += str.substr(i, 6); - } - i += 6; - } else if (c >= 224) { - if (il - i >= 9) { - var _c = parseInt(str.substr(i + 4, 2), 16); - var c3 = parseInt(str.substr(i + 7, 2), 16); - newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63); - } else { - newStr += str.substr(i, 9); - } - i += 9; - } else { - newStr += str.substr(i, 3); - i += 3; - } - } - return newStr; -} -function _normalizeComponentEncoding(components, protocol) { - function decodeUnreserved(str) { - var decStr = pctDecChars(str); - return !decStr.match(protocol.UNRESERVED) ? str : decStr; - } - if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); - if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - return components; -} - -function _stripLeadingZeros(str) { - return str.replace(/^0*(.*)/, "$1") || "0"; -} -function _normalizeIPv4(host, protocol) { - var matches = host.match(protocol.IPV4ADDRESS) || []; - - var _matches = slicedToArray(matches, 2), - address = _matches[1]; - - if (address) { - return address.split(".").map(_stripLeadingZeros).join("."); - } else { - return host; - } -} -function _normalizeIPv6(host, protocol) { - var matches = host.match(protocol.IPV6ADDRESS) || []; - - var _matches2 = slicedToArray(matches, 3), - address = _matches2[1], - zone = _matches2[2]; - - if (address) { - var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(), - _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), - last = _address$toLowerCase$2[0], - first = _address$toLowerCase$2[1]; - - var firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; - var lastFields = last.split(":").map(_stripLeadingZeros); - var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); - var fieldCount = isLastFieldIPv4Address ? 7 : 8; - var lastFieldsStart = lastFields.length - fieldCount; - var fields = Array(fieldCount); - for (var x = 0; x < fieldCount; ++x) { - fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; - } - if (isLastFieldIPv4Address) { - fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); - } - var allZeroFields = fields.reduce(function (acc, field, index) { - if (!field || field === "0") { - var lastLongest = acc[acc.length - 1]; - if (lastLongest && lastLongest.index + lastLongest.length === index) { - lastLongest.length++; - } else { - acc.push({ index: index, length: 1 }); - } - } - return acc; - }, []); - var longestZeroFields = allZeroFields.sort(function (a, b) { - return b.length - a.length; - })[0]; - var newHost = void 0; - if (longestZeroFields && longestZeroFields.length > 1) { - var newFirst = fields.slice(0, longestZeroFields.index); - var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); - newHost = newFirst.join(":") + "::" + newLast.join(":"); - } else { - newHost = fields.join(":"); - } - if (zone) { - newHost += "%" + zone; - } - return newHost; - } else { - return host; - } -} -var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; -var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined; -function parse(uriString) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var components = {}; - var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; - if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; - var matches = uriString.match(URI_PARSE); - if (matches) { - if (NO_MATCH_IS_UNDEFINED) { - //store each component - components.scheme = matches[1]; - components.userinfo = matches[3]; - components.host = matches[4]; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = matches[7]; - components.fragment = matches[8]; - //fix port number - if (isNaN(components.port)) { - components.port = matches[5]; - } - } else { - //IE FIX for improper RegExp matching - //store each component - components.scheme = matches[1] || undefined; - components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined; - components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined; - components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined; - //fix port number - if (isNaN(components.port)) { - components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined; - } - } - if (components.host) { - //normalize IP hosts - components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); - } - //determine reference type - if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { - components.reference = "same-document"; - } else if (components.scheme === undefined) { - components.reference = "relative"; - } else if (components.fragment === undefined) { - components.reference = "absolute"; - } else { - components.reference = "uri"; - } - //check for reference errors - if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { - components.error = components.error || "URI is not a " + options.reference + " reference."; - } - //find scheme handler - var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //check if scheme can't handle IRIs - if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { - //if host component is a domain name - if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) { - //convert Unicode IDN -> ASCII IDN - try { - components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; - } - } - //convert IRI -> URI - _normalizeComponentEncoding(components, URI_PROTOCOL); - } else { - //normalize encodings - _normalizeComponentEncoding(components, protocol); - } - //perform scheme specific parsing - if (schemeHandler && schemeHandler.parse) { - schemeHandler.parse(components, options); - } - } else { - components.error = components.error || "URI can not be parsed."; - } - return components; -} - -function _recomposeAuthority(components, options) { - var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; - var uriTokens = []; - if (components.userinfo !== undefined) { - uriTokens.push(components.userinfo); - uriTokens.push("@"); - } - if (components.host !== undefined) { - //normalize IP hosts, add brackets and escape zone separator for IPv6 - uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) { - return "[" + $1 + ($2 ? "%25" + $2 : "") + "]"; - })); - } - if (typeof components.port === "number") { - uriTokens.push(":"); - uriTokens.push(components.port.toString(10)); - } - return uriTokens.length ? uriTokens.join("") : undefined; -} - -var RDS1 = /^\.\.?\//; -var RDS2 = /^\/\.(\/|$)/; -var RDS3 = /^\/\.\.(\/|$)/; -var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; -function removeDotSegments(input) { - var output = []; - while (input.length) { - if (input.match(RDS1)) { - input = input.replace(RDS1, ""); - } else if (input.match(RDS2)) { - input = input.replace(RDS2, "/"); - } else if (input.match(RDS3)) { - input = input.replace(RDS3, "/"); - output.pop(); - } else if (input === "." || input === "..") { - input = ""; - } else { - var im = input.match(RDS5); - if (im) { - var s = im[0]; - input = input.slice(s.length); - output.push(s); - } else { - throw new Error("Unexpected dot segment condition"); - } - } - } - return output.join(""); -} - -function serialize(components) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL; - var uriTokens = []; - //find scheme handler - var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //perform scheme specific serialization - if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); - if (components.host) { - //if host component is an IPv6 address - if (protocol.IPV6ADDRESS.test(components.host)) {} - //TODO: normalize IPv6 address as per RFC 5952 - - //if host component is a domain name - else if (options.domainHost || schemeHandler && schemeHandler.domainHost) { - //convert IDN via punycode - try { - components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - } - } - //normalize encoding - _normalizeComponentEncoding(components, protocol); - if (options.reference !== "suffix" && components.scheme) { - uriTokens.push(components.scheme); - uriTokens.push(":"); - } - var authority = _recomposeAuthority(components, options); - if (authority !== undefined) { - if (options.reference !== "suffix") { - uriTokens.push("//"); - } - uriTokens.push(authority); - if (components.path && components.path.charAt(0) !== "/") { - uriTokens.push("/"); - } - } - if (components.path !== undefined) { - var s = components.path; - if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { - s = removeDotSegments(s); - } - if (authority === undefined) { - s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" - } - uriTokens.push(s); - } - if (components.query !== undefined) { - uriTokens.push("?"); - uriTokens.push(components.query); - } - if (components.fragment !== undefined) { - uriTokens.push("#"); - uriTokens.push(components.fragment); - } - return uriTokens.join(""); //merge tokens into a string -} - -function resolveComponents(base, relative) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var skipNormalization = arguments[3]; - - var target = {}; - if (!skipNormalization) { - base = parse(serialize(base, options), options); //normalize base components - relative = parse(serialize(relative, options), options); //normalize relative components - } - options = options || {}; - if (!options.tolerant && relative.scheme) { - target.scheme = relative.scheme; - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (!relative.path) { - target.path = base.path; - if (relative.query !== undefined) { - target.query = relative.query; - } else { - target.query = base.query; - } - } else { - if (relative.path.charAt(0) === "/") { - target.path = removeDotSegments(relative.path); - } else { - if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { - target.path = "/" + relative.path; - } else if (!base.path) { - target.path = relative.path; - } else { - target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; - } - target.path = removeDotSegments(target.path); - } - target.query = relative.query; - } - //target.authority = base.authority; - target.userinfo = base.userinfo; - target.host = base.host; - target.port = base.port; - } - target.scheme = base.scheme; - } - target.fragment = relative.fragment; - return target; -} - -function resolve(baseURI, relativeURI, options) { - var schemelessOptions = assign({ scheme: 'null' }, options); - return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); -} - -function normalize(uri, options) { - if (typeof uri === "string") { - uri = serialize(parse(uri, options), options); - } else if (typeOf(uri) === "object") { - uri = parse(serialize(uri, options), options); - } - return uri; -} - -function equal(uriA, uriB, options) { - if (typeof uriA === "string") { - uriA = serialize(parse(uriA, options), options); - } else if (typeOf(uriA) === "object") { - uriA = serialize(uriA, options); - } - if (typeof uriB === "string") { - uriB = serialize(parse(uriB, options), options); - } else if (typeOf(uriB) === "object") { - uriB = serialize(uriB, options); - } - return uriA === uriB; -} - -function escapeComponent(str, options) { - return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar); -} - -function unescapeComponent(str, options) { - return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars); -} - -var handler = { - scheme: "http", - domainHost: true, - parse: function parse(components, options) { - //report missing host - if (!components.host) { - components.error = components.error || "HTTP URIs must have a host."; - } - return components; - }, - serialize: function serialize(components, options) { - //normalize the default port - if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { - components.port = undefined; - } - //normalize the empty path - if (!components.path) { - components.path = "/"; - } - //NOTE: We do not parse query strings for HTTP URIs - //as WWW Form Url Encoded query strings are part of the HTML4+ spec, - //and not the HTTP spec. - return components; - } -}; - -var handler$1 = { - scheme: "https", - domainHost: handler.domainHost, - parse: handler.parse, - serialize: handler.serialize -}; - -var O = {}; -var isIRI = true; -//RFC 3986 -var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; -var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive -var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded -//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = -//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) -//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext -//const VCHAR$$ = "[\\x21-\\x7E]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext -//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); -//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); -//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); -var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; -var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; -var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); -var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; -var UNRESERVED = new RegExp(UNRESERVED$$, "g"); -var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); -var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); -var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); -var NOT_HFVALUE = NOT_HFNAME; -function decodeUnreserved(str) { - var decStr = pctDecChars(str); - return !decStr.match(UNRESERVED) ? str : decStr; -} -var handler$2 = { - scheme: "mailto", - parse: function parse$$1(components, options) { - var mailtoComponents = components; - var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : []; - mailtoComponents.path = undefined; - if (mailtoComponents.query) { - var unknownHeaders = false; - var headers = {}; - var hfields = mailtoComponents.query.split("&"); - for (var x = 0, xl = hfields.length; x < xl; ++x) { - var hfield = hfields[x].split("="); - switch (hfield[0]) { - case "to": - var toAddrs = hfield[1].split(","); - for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) { - to.push(toAddrs[_x]); - } - break; - case "subject": - mailtoComponents.subject = unescapeComponent(hfield[1], options); - break; - case "body": - mailtoComponents.body = unescapeComponent(hfield[1], options); - break; - default: - unknownHeaders = true; - headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); - break; - } - } - if (unknownHeaders) mailtoComponents.headers = headers; - } - mailtoComponents.query = undefined; - for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) { - var addr = to[_x2].split("@"); - addr[0] = unescapeComponent(addr[0]); - if (!options.unicodeSupport) { - //convert Unicode IDN -> ASCII IDN - try { - addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); - } catch (e) { - mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; - } - } else { - addr[1] = unescapeComponent(addr[1], options).toLowerCase(); - } - to[_x2] = addr.join("@"); - } - return mailtoComponents; - }, - serialize: function serialize$$1(mailtoComponents, options) { - var components = mailtoComponents; - var to = toArray(mailtoComponents.to); - if (to) { - for (var x = 0, xl = to.length; x < xl; ++x) { - var toAddr = String(to[x]); - var atIdx = toAddr.lastIndexOf("@"); - var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); - var domain = toAddr.slice(atIdx + 1); - //convert IDN via punycode - try { - domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain); - } catch (e) { - components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - to[x] = localPart + "@" + domain; - } - components.path = to.join(","); - } - var headers = mailtoComponents.headers = mailtoComponents.headers || {}; - if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; - if (mailtoComponents.body) headers["body"] = mailtoComponents.body; - var fields = []; - for (var name in headers) { - if (headers[name] !== O[name]) { - fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); - } - } - if (fields.length) { - components.query = fields.join("&"); - } - return components; - } -}; - -var URN_PARSE = /^([^\:]+)\:(.*)/; -//RFC 2141 -var handler$3 = { - scheme: "urn", - parse: function parse$$1(components, options) { - var matches = components.path && components.path.match(URN_PARSE); - var urnComponents = components; - if (matches) { - var scheme = options.scheme || urnComponents.scheme || "urn"; - var nid = matches[1].toLowerCase(); - var nss = matches[2]; - var urnScheme = scheme + ":" + (options.nid || nid); - var schemeHandler = SCHEMES[urnScheme]; - urnComponents.nid = nid; - urnComponents.nss = nss; - urnComponents.path = undefined; - if (schemeHandler) { - urnComponents = schemeHandler.parse(urnComponents, options); - } - } else { - urnComponents.error = urnComponents.error || "URN can not be parsed."; - } - return urnComponents; - }, - serialize: function serialize$$1(urnComponents, options) { - var scheme = options.scheme || urnComponents.scheme || "urn"; - var nid = urnComponents.nid; - var urnScheme = scheme + ":" + (options.nid || nid); - var schemeHandler = SCHEMES[urnScheme]; - if (schemeHandler) { - urnComponents = schemeHandler.serialize(urnComponents, options); - } - var uriComponents = urnComponents; - var nss = urnComponents.nss; - uriComponents.path = (nid || options.nid) + ":" + nss; - return uriComponents; - } -}; - -var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; -//RFC 4122 -var handler$4 = { - scheme: "urn:uuid", - parse: function parse(urnComponents, options) { - var uuidComponents = urnComponents; - uuidComponents.uuid = uuidComponents.nss; - uuidComponents.nss = undefined; - if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { - uuidComponents.error = uuidComponents.error || "UUID is not valid."; - } - return uuidComponents; - }, - serialize: function serialize(uuidComponents, options) { - var urnComponents = uuidComponents; - //normalize UUID - urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); - return urnComponents; - } -}; - -SCHEMES[handler.scheme] = handler; -SCHEMES[handler$1.scheme] = handler$1; -SCHEMES[handler$2.scheme] = handler$2; -SCHEMES[handler$3.scheme] = handler$3; -SCHEMES[handler$4.scheme] = handler$4; - -exports.SCHEMES = SCHEMES; -exports.pctEncChar = pctEncChar; -exports.pctDecChars = pctDecChars; -exports.parse = parse; -exports.removeDotSegments = removeDotSegments; -exports.serialize = serialize; -exports.resolveComponents = resolveComponents; -exports.resolve = resolve; -exports.normalize = normalize; -exports.equal = equal; -exports.escapeComponent = escapeComponent; -exports.unescapeComponent = unescapeComponent; - -Object.defineProperty(exports, '__esModule', { value: true }); - -}))); -//# sourceMappingURL=uri.all.js.map diff --git a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.js.map b/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.js.map deleted file mode 100644 index 536ffa88..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"uri.all.js","sources":["../../src/index.ts","../../src/schemes/urn-uuid.ts","../../src/schemes/urn.ts","../../src/schemes/mailto.ts","../../src/schemes/https.ts","../../src/schemes/http.ts","../../src/uri.ts","../../node_modules/punycode/punycode.es6.js","../../src/regexps-iri.ts","../../src/regexps-uri.ts","../../src/util.ts"],"sourcesContent":["import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (components.port === (String(components.scheme).toLowerCase() !== \"https\" ? 80 : 443) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(components.port.toString(10));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","export function merge(...sets:Array):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}"],"names":["SCHEMES","uuid","scheme","urn","mailto","https","http","urnComponents","nss","uuidComponents","toLowerCase","options","error","tolerant","match","UUID","undefined","handler","uriComponents","path","nid","schemeHandler","serialize","urnScheme","parse","matches","components","URN_PARSE","query","fields","join","length","push","name","replace","PCT_ENCODED","decodeUnreserved","toUpperCase","NOT_HFNAME","pctEncChar","headers","NOT_HFVALUE","O","mailtoComponents","body","subject","to","x","localPart","domain","iri","e","punycode","toASCII","unescapeComponent","toUnicode","toAddr","slice","atIdx","NOT_LOCAL_PART","lastIndexOf","String","xl","toArray","addr","unicodeSupport","split","unknownHeaders","hfield","toAddrs","hfields","decStr","UNRESERVED","str","pctDecChars","RegExp","merge","UNRESERVED$$","SOME_DELIMS$$","ATEXT$$","VCHAR$$","PCT_ENCODED$","QTEXT$$","subexp","HEXDIG$$","isIRI","domainHost","port","host","toString","URI_PROTOCOL","IRI_PROTOCOL","ESCAPE","escapeComponent","uriA","uriB","typeOf","equal","uri","normalize","resolveComponents","baseURI","schemelessOptions","relativeURI","assign","resolve","target","fragment","relative","base","userinfo","removeDotSegments","charAt","skipNormalization","uriTokens","s","authority","absolutePath","reference","_recomposeAuthority","protocol","IPV6ADDRESS","test","output","Error","input","im","RDS5","pop","RDS3","RDS2","RDS1","$1","$2","_normalizeIPv6","_normalizeIPv4","_","uriString","isNaN","indexOf","parseInt","NO_MATCH_IS_UNDEFINED","URI_PARSE","newHost","zone","newFirst","newLast","longestZeroFields","index","b","a","allZeroFields","sort","acc","lastLongest","field","reduce","fieldCount","isLastFieldIPv4Address","firstFields","lastFields","lastFieldsStart","Array","IPV4ADDRESS","last","map","_stripLeadingZeros","first","address","reverse","NOT_FRAGMENT","NOT_QUERY","NOT_PATH","NOT_PATH_NOSCHEME","NOT_HOST","NOT_USERINFO","NOT_SCHEME","_normalizeComponentEncoding","newStr","substr","i","fromCharCode","c","c2","c3","il","chr","charCodeAt","encode","decode","ucs2encode","ucs2decode","regexNonASCII","string","mapDomain","regexPunycode","n","delta","handledCPCount","adapt","handledCPCountPlusOne","basicLength","stringFromCharCode","digitToBasic","q","floor","qMinusT","baseMinusT","t","k","bias","tMin","tMax","currentValue","maxInt","m","inputLength","delimiter","initialBias","initialN","fromCodePoint","splice","out","oldi","w","digit","basicToDigit","basic","j","baseMinusTMin","skew","numPoints","firstTime","damp","flag","codePoint","array","value","extra","counter","result","encoded","labels","fn","regexSeparators","parts","RangeError","errors","type","Math","buildExps","IPV6ADDRESS$","ZONEID$","IPV4ADDRESS$","RESERVED$$","SUB_DELIMS$$","IPRIVATE$$","ALPHA$$","DIGIT$$","AUTHORITY_REF$","USERINFO$","HOST$","PORT$","SAMEDOC_REF$","FRAGMENT$","ABSOLUTE_REF$","SCHEME$","PATH_ABEMPTY$","PATH_ABSOLUTE$","PATH_ROOTLESS$","PATH_EMPTY$","QUERY$","RELATIVE_REF$","PATH_NOSCHEME$","GENERIC_REF$","ABSOLUTE_URI$","HIER_PART$","URI_REFERENCE$","URI$","RELATIVE$","RELATIVE_PART$","AUTHORITY$","PCHAR$","PATH$","SEGMENT_NZ$","SEGMENT_NZ_NC$","SEGMENT$","IP_LITERAL$","REG_NAME$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","H16$","LS32$","DEC_OCTET_RELAXED$","DEC_OCTET$","UCSCHAR$$","GEN_DELIMS$$","SP$$","DQUOTE$$","CR$","obj","key","source","setInterval","call","prototype","o","Object","shift","sets"],"mappings":";;;;;;;AUAA,SAAA4E,KAAA,GAAA;sCAAyBkP,IAAzB;YAAA;;;QACKA,KAAK/R,MAAL,GAAc,CAAlB,EAAqB;aACf,CAAL,IAAU+R,KAAK,CAAL,EAAQrQ,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;YACMK,KAAKgQ,KAAK/R,MAAL,GAAc,CAAzB;aACK,IAAIgB,IAAI,CAAb,EAAgBA,IAAIe,EAApB,EAAwB,EAAEf,CAA1B,EAA6B;iBACvBA,CAAL,IAAU+Q,KAAK/Q,CAAL,EAAQU,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;;aAEIK,EAAL,IAAWgQ,KAAKhQ,EAAL,EAASL,KAAT,CAAe,CAAf,CAAX;eACOqQ,KAAKhS,IAAL,CAAU,EAAV,CAAP;KAPD,MAQO;eACCgS,KAAK,CAAL,CAAP;;;AAIF,AAAA,SAAA3O,MAAA,CAAuBV,GAAvB,EAAA;WACQ,QAAQA,GAAR,GAAc,GAArB;;AAGD,AAAA,SAAAuB,MAAA,CAAuB2N,CAAvB,EAAA;WACQA,MAAM3S,SAAN,GAAkB,WAAlB,GAAiC2S,MAAM,IAAN,GAAa,MAAb,GAAsBC,OAAOF,SAAP,CAAiBjO,QAAjB,CAA0BgO,IAA1B,CAA+BE,CAA/B,EAAkCzP,KAAlC,CAAwC,GAAxC,EAA6C8D,GAA7C,GAAmD9D,KAAnD,CAAyD,GAAzD,EAA8D2P,KAA9D,GAAsEnT,WAAtE,EAA9D;;AAGD,AAAA,SAAA2B,WAAA,CAA4BoC,GAA5B,EAAA;WACQA,IAAIpC,WAAJ,EAAP;;AAGD,AAAA,SAAA0B,OAAA,CAAwBsP,GAAxB,EAAA;WACQA,QAAQrS,SAAR,IAAqBqS,QAAQ,IAA7B,GAAqCA,eAAenJ,KAAf,GAAuBmJ,GAAvB,GAA8B,OAAOA,IAAItR,MAAX,KAAsB,QAAtB,IAAkCsR,IAAInP,KAAtC,IAA+CmP,IAAIG,WAAnD,IAAkEH,IAAII,IAAtE,GAA6E,CAACJ,GAAD,CAA7E,GAAqFnJ,MAAMwJ,SAAN,CAAgBjQ,KAAhB,CAAsBgQ,IAAtB,CAA2BJ,GAA3B,CAAxJ,GAA4L,EAAnM;;AAID,AAAA,SAAA7M,MAAA,CAAuBE,MAAvB,EAAuC6M,MAAvC,EAAA;QACOF,MAAM3M,MAAZ;QACI6M,MAAJ,EAAY;aACN,IAAMD,GAAX,IAAkBC,MAAlB,EAA0B;gBACrBD,GAAJ,IAAWC,OAAOD,GAAP,CAAX;;;WAGKD,GAAP;;;ADnCD,SAAA3D,SAAA,CAA0BrK,KAA1B,EAAA;QAEE4K,UAAU,UADX;QAECmD,MAAM,SAFP;QAGClD,UAAU,OAHX;QAICiD,WAAW,SAJZ;QAKC/N,WAAWR,MAAMsL,OAAN,EAAe,UAAf,CALZ;;WAMQ,SANR;QAOCgD,OAAO,SAPR;QAQCjO,eAAeE,OAAOA,OAAO,YAAYC,QAAZ,GAAuB,GAAvB,GAA6BA,QAA7B,GAAwCA,QAAxC,GAAmD,GAAnD,GAAyDA,QAAzD,GAAoEA,QAA3E,IAAuF,GAAvF,GAA6FD,OAAO,gBAAgBC,QAAhB,GAA2B,GAA3B,GAAiCA,QAAjC,GAA4CA,QAAnD,CAA7F,GAA4J,GAA5J,GAAkKD,OAAO,MAAMC,QAAN,GAAiBA,QAAxB,CAAzK,CARhB;;mBASgB,yBAThB;QAUC2K,eAAe,qCAVhB;QAWCD,aAAalL,MAAMqO,YAAN,EAAoBlD,YAApB,CAXd;QAYCiD,YAAY3N,QAAQ,6EAAR,GAAwF,IAZrG;;iBAacA,QAAQ,mBAAR,GAA8B,IAb5C;;mBAcgBT,MAAMqL,OAAN,EAAeC,OAAf,EAAwB,gBAAxB,EAA0C8C,SAA1C,CAdhB;QAeCtC,UAAUvL,OAAO8K,UAAUrL,MAAMqL,OAAN,EAAeC,OAAf,EAAwB,aAAxB,CAAV,GAAmD,GAA1D,CAfX;QAgBCE,YAAYjL,OAAOA,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBkL,YAApB,EAAkC,OAAlC,CAA5B,IAA0E,GAAjF,CAhBb;QAiBCgD,aAAa5N,OAAOA,OAAO,SAAP,IAAoB,GAApB,GAA0BA,OAAO,WAAW+K,OAAlB,CAA1B,GAAuD,GAAvD,GAA6D/K,OAAO,MAAM+K,OAAN,GAAgBA,OAAvB,CAA7D,GAA+F,GAA/F,GAAqG/K,OAAO,UAAU+K,OAAjB,CAArG,GAAiI,GAAjI,GAAuIA,OAA9I,CAjBd;QAkBC4C,qBAAqB3N,OAAOA,OAAO,SAAP,IAAoB,GAApB,GAA0BA,OAAO,WAAW+K,OAAlB,CAA1B,GAAuD,GAAvD,GAA6D/K,OAAO,MAAM+K,OAAN,GAAgBA,OAAvB,CAA7D,GAA+F,GAA/F,GAAqG/K,OAAO,YAAY+K,OAAnB,CAArG,GAAmI,OAAnI,GAA6IA,OAApJ,CAlBtB;;mBAmBgB/K,OAAO2N,qBAAqB,KAArB,GAA6BA,kBAA7B,GAAkD,KAAlD,GAA0DA,kBAA1D,GAA+E,KAA/E,GAAuFA,kBAA9F,CAnBhB;QAoBCF,OAAOzN,OAAOC,WAAW,OAAlB,CApBR;QAqBCyN,QAAQ1N,OAAOA,OAAOyN,OAAO,KAAP,GAAeA,IAAtB,IAA8B,GAA9B,GAAoC/C,YAA3C,CArBT;QAsBCsC,gBAAgBhN,OAAmEA,OAAOyN,OAAO,KAAd,IAAuB,KAAvB,GAA+BC,KAAlG,CAtBjB;;oBAuBiB1N,OAAwD,WAAWA,OAAOyN,OAAO,KAAd,CAAX,GAAkC,KAAlC,GAA0CC,KAAlG,CAvBjB;;oBAwBiB1N,OAAOA,OAAwCyN,IAAxC,IAAgD,SAAhD,GAA4DzN,OAAOyN,OAAO,KAAd,CAA5D,GAAmF,KAAnF,GAA2FC,KAAlG,CAxBjB;;oBAyBiB1N,OAAOA,OAAOA,OAAOyN,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA4DzN,OAAOyN,OAAO,KAAd,CAA5D,GAAmF,KAAnF,GAA2FC,KAAlG,CAzBjB;;oBA0BiB1N,OAAOA,OAAOA,OAAOyN,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA4DzN,OAAOyN,OAAO,KAAd,CAA5D,GAAmF,KAAnF,GAA2FC,KAAlG,CA1BjB;;oBA2BiB1N,OAAOA,OAAOA,OAAOyN,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAAmEA,IAAnE,GAA0E,KAA1E,GAA2FC,KAAlG,CA3BjB;;oBA4BiB1N,OAAOA,OAAOA,OAAOyN,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA2FC,KAAlG,CA5BjB;;oBA6BiB1N,OAAOA,OAAOA,OAAOyN,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA2FA,IAAlG,CA7BjB;;oBA8BiBzN,OAAOA,OAAOA,OAAOyN,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAvD,CA9BjB;;mBA+BgBzN,OAAO,CAACgN,aAAD,EAAgBC,aAAhB,EAA+BC,aAA/B,EAA8CC,aAA9C,EAA6DC,aAA7D,EAA4EC,aAA5E,EAA2FC,aAA3F,EAA0GC,aAA1G,EAAyHC,aAAzH,EAAwI7Q,IAAxI,CAA6I,GAA7I,CAAP,CA/BhB;QAgCC8N,UAAUzK,OAAOA,OAAON,eAAe,GAAf,GAAqBI,YAA5B,IAA4C,GAAnD,CAhCX;;iBAiCcE,OAAOwK,eAAe,OAAf,GAAyBC,OAAhC,CAjCd;;yBAkCsBzK,OAAOwK,eAAexK,OAAO,iBAAiBC,QAAjB,GAA4B,MAAnC,CAAf,GAA4DwK,OAAnE,CAlCtB;;iBAmCczK,OAAO,SAASC,QAAT,GAAoB,MAApB,GAA6BR,MAAMC,YAAN,EAAoBkL,YAApB,EAAkC,OAAlC,CAA7B,GAA0E,GAAjF,CAnCd;QAoCCgC,cAAc5M,OAAO,QAAQA,OAAO8M,qBAAqB,GAArB,GAA2BtC,YAA3B,GAA0C,GAA1C,GAAgDuC,UAAvD,CAAR,GAA6E,KAApF,CApCf;;gBAqCa/M,OAAOA,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBkL,YAApB,CAA5B,IAAiE,GAAxE,CArCb;QAsCCM,QAAQlL,OAAO4M,cAAc,GAAd,GAAoBlC,YAApB,GAAmC,KAAnC,GAA2CmC,SAA3C,GAAuD,GAAvD,GAA6D,GAA7D,GAAmEA,SAA1E,CAtCT;QAuCC1B,QAAQnL,OAAO+K,UAAU,GAAjB,CAvCT;QAwCCuB,aAAatM,OAAOA,OAAOiL,YAAY,GAAnB,IAA0B,GAA1B,GAAgCC,KAAhC,GAAwClL,OAAO,QAAQmL,KAAf,CAAxC,GAAgE,GAAvE,CAxCd;QAyCCoB,SAASvM,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBkL,YAApB,EAAkC,UAAlC,CAA5B,CAzCV;QA0CC+B,WAAW3M,OAAOuM,SAAS,GAAhB,CA1CZ;QA2CCE,cAAczM,OAAOuM,SAAS,GAAhB,CA3Cf;QA4CCG,iBAAiB1M,OAAOA,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBkL,YAApB,EAAkC,OAAlC,CAA5B,IAA0E,GAAjF,CA5ClB;QA6CCY,gBAAgBxL,OAAOA,OAAO,QAAQ2M,QAAf,IAA2B,GAAlC,CA7CjB;QA8CClB,iBAAiBzL,OAAO,QAAQA,OAAOyM,cAAcjB,aAArB,CAAR,GAA8C,GAArD,CA9ClB;;qBA+CkBxL,OAAO0M,iBAAiBlB,aAAxB,CA/ClB;;qBAgDkBxL,OAAOyM,cAAcjB,aAArB,CAhDlB;;kBAiDe,QAAQe,MAAR,GAAiB,GAjDhC;QAkDCC,QAAQxM,OAAOwL,gBAAgB,GAAhB,GAAsBC,cAAtB,GAAuC,GAAvC,GAA6CK,cAA7C,GAA8D,GAA9D,GAAoEJ,cAApE,GAAqF,GAArF,GAA2FC,WAAlG,CAlDT;QAmDCC,SAAS5L,OAAOA,OAAOuM,SAAS,GAAT,GAAe9M,MAAM,UAAN,EAAkBoL,UAAlB,CAAtB,IAAuD,GAA9D,CAnDV;QAoDCQ,YAAYrL,OAAOA,OAAOuM,SAAS,WAAhB,IAA+B,GAAtC,CApDb;QAqDCN,aAAajM,OAAOA,OAAO,WAAWsM,UAAX,GAAwBd,aAA/B,IAAgD,GAAhD,GAAsDC,cAAtD,GAAuE,GAAvE,GAA6EC,cAA7E,GAA8F,GAA9F,GAAoGC,WAA3G,CArDd;QAsDCQ,OAAOnM,OAAOuL,UAAU,KAAV,GAAkBU,UAAlB,GAA+BjM,OAAO,QAAQ4L,MAAf,CAA/B,GAAwD,GAAxD,GAA8D5L,OAAO,QAAQqL,SAAf,CAA9D,GAA0F,GAAjG,CAtDR;QAuDCgB,iBAAiBrM,OAAOA,OAAO,WAAWsM,UAAX,GAAwBd,aAA/B,IAAgD,GAAhD,GAAsDC,cAAtD,GAAuE,GAAvE,GAA6EK,cAA7E,GAA8F,GAA9F,GAAoGH,WAA3G,CAvDlB;QAwDCS,YAAYpM,OAAOqM,iBAAiBrM,OAAO,QAAQ4L,MAAf,CAAjB,GAA0C,GAA1C,GAAgD5L,OAAO,QAAQqL,SAAf,CAAhD,GAA4E,GAAnF,CAxDb;QAyDCa,iBAAiBlM,OAAOmM,OAAO,GAAP,GAAaC,SAApB,CAzDlB;QA0DCJ,gBAAgBhM,OAAOuL,UAAU,KAAV,GAAkBU,UAAlB,GAA+BjM,OAAO,QAAQ4L,MAAf,CAA/B,GAAwD,GAA/D,CA1DjB;QA4DCG,eAAe,OAAOR,OAAP,GAAiB,MAAjB,GAA0BvL,OAAOA,OAAO,YAAYA,OAAO,MAAMiL,SAAN,GAAkB,IAAzB,CAAZ,GAA6C,IAA7C,GAAoDC,KAApD,GAA4D,GAA5D,GAAkElL,OAAO,SAASmL,KAAT,GAAiB,GAAxB,CAAlE,GAAiG,IAAxG,IAAgH,IAAhH,GAAuHK,aAAvH,GAAuI,GAAvI,GAA6IC,cAA7I,GAA8J,GAA9J,GAAoKC,cAApK,GAAqL,GAArL,GAA2LC,WAA3L,GAAyM,GAAhN,CAA1B,GAAiP3L,OAAO,SAAS4L,MAAT,GAAkB,GAAzB,CAAjP,GAAiR,GAAjR,GAAuR5L,OAAO,SAASqL,SAAT,GAAqB,GAA5B,CAAvR,GAA0T,IA5D1U;QA6DCQ,gBAAgB,WAAW7L,OAAOA,OAAO,YAAYA,OAAO,MAAMiL,SAAN,GAAkB,IAAzB,CAAZ,GAA6C,IAA7C,GAAoDC,KAApD,GAA4D,GAA5D,GAAkElL,OAAO,SAASmL,KAAT,GAAiB,GAAxB,CAAlE,GAAiG,IAAxG,IAAgH,IAAhH,GAAuHK,aAAvH,GAAuI,GAAvI,GAA6IC,cAA7I,GAA8J,GAA9J,GAAoKK,cAApK,GAAqL,GAArL,GAA2LH,WAA3L,GAAyM,GAAhN,CAAX,GAAkO3L,OAAO,SAAS4L,MAAT,GAAkB,GAAzB,CAAlO,GAAkQ,GAAlQ,GAAwQ5L,OAAO,SAASqL,SAAT,GAAqB,GAA5B,CAAxQ,GAA2S,IA7D5T;QA8DCC,gBAAgB,OAAOC,OAAP,GAAiB,MAAjB,GAA0BvL,OAAOA,OAAO,YAAYA,OAAO,MAAMiL,SAAN,GAAkB,IAAzB,CAAZ,GAA6C,IAA7C,GAAoDC,KAApD,GAA4D,GAA5D,GAAkElL,OAAO,SAASmL,KAAT,GAAiB,GAAxB,CAAlE,GAAiG,IAAxG,IAAgH,IAAhH,GAAuHK,aAAvH,GAAuI,GAAvI,GAA6IC,cAA7I,GAA8J,GAA9J,GAAoKC,cAApK,GAAqL,GAArL,GAA2LC,WAA3L,GAAyM,GAAhN,CAA1B,GAAiP3L,OAAO,SAAS4L,MAAT,GAAkB,GAAzB,CAAjP,GAAiR,IA9DlS;QA+DCR,eAAe,MAAMpL,OAAO,SAASqL,SAAT,GAAqB,GAA5B,CAAN,GAAyC,IA/DzD;QAgECL,iBAAiB,MAAMhL,OAAO,MAAMiL,SAAN,GAAkB,IAAzB,CAAN,GAAuC,IAAvC,GAA8CC,KAA9C,GAAsD,GAAtD,GAA4DlL,OAAO,SAASmL,KAAT,GAAiB,GAAxB,CAA5D,GAA2F,IAhE7G;WAmEO;oBACO,IAAI3L,MAAJ,CAAWC,MAAM,KAAN,EAAaqL,OAAb,EAAsBC,OAAtB,EAA+B,aAA/B,CAAX,EAA0D,GAA1D,CADP;sBAES,IAAIvL,MAAJ,CAAWC,MAAM,WAAN,EAAmBC,YAAnB,EAAiCkL,YAAjC,CAAX,EAA2D,GAA3D,CAFT;kBAGK,IAAIpL,MAAJ,CAAWC,MAAM,iBAAN,EAAyBC,YAAzB,EAAuCkL,YAAvC,CAAX,EAAiE,GAAjE,CAHL;kBAIK,IAAIpL,MAAJ,CAAWC,MAAM,iBAAN,EAAyBC,YAAzB,EAAuCkL,YAAvC,CAAX,EAAiE,GAAjE,CAJL;2BAKc,IAAIpL,MAAJ,CAAWC,MAAM,cAAN,EAAsBC,YAAtB,EAAoCkL,YAApC,CAAX,EAA8D,GAA9D,CALd;mBAMM,IAAIpL,MAAJ,CAAWC,MAAM,QAAN,EAAgBC,YAAhB,EAA8BkL,YAA9B,EAA4C,gBAA5C,EAA8DC,UAA9D,CAAX,EAAsF,GAAtF,CANN;sBAOS,IAAIrL,MAAJ,CAAWC,MAAM,QAAN,EAAgBC,YAAhB,EAA8BkL,YAA9B,EAA4C,gBAA5C,CAAX,EAA0E,GAA1E,CAPT;gBAQG,IAAIpL,MAAJ,CAAWC,MAAM,KAAN,EAAaC,YAAb,EAA2BkL,YAA3B,CAAX,EAAqD,GAArD,CARH;oBASO,IAAIpL,MAAJ,CAAWE,YAAX,EAAyB,GAAzB,CATP;qBAUQ,IAAIF,MAAJ,CAAWC,MAAM,QAAN,EAAgBC,YAAhB,EAA8BiL,UAA9B,CAAX,EAAsD,GAAtD,CAVR;qBAWQ,IAAInL,MAAJ,CAAWM,YAAX,EAAyB,GAAzB,CAXR;qBAYQ,IAAIN,MAAJ,CAAW,OAAOkL,YAAP,GAAsB,IAAjC,CAZR;qBAaQ,IAAIlL,MAAJ,CAAW,WAAWgL,YAAX,GAA0B,GAA1B,GAAgCxK,OAAOA,OAAO,iBAAiBC,QAAjB,GAA4B,MAAnC,IAA6C,GAA7C,GAAmDwK,OAAnD,GAA6D,GAApE,CAAhC,GAA2G,QAAtH,CAbR;KAAP;;AAiBD,mBAAeF,UAAU,KAAV,CAAf;;ADrFA,mBAAeA,UAAU,IAAV,CAAf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADDA;;AACA,IAAMpC,SAAS,UAAf;;;AAGA,IAAMzG,OAAO,EAAb;AACA,IAAMsG,OAAO,CAAb;AACA,IAAMC,OAAO,EAAb;AACA,IAAMkB,OAAO,EAAb;AACA,IAAMG,OAAO,GAAb;AACA,IAAMf,cAAc,EAApB;AACA,IAAMC,WAAW,GAAjB;AACA,IAAMF,YAAY,GAAlB;;;AAGA,IAAMtB,gBAAgB,OAAtB;AACA,IAAMH,gBAAgB,YAAtB;AACA,IAAMoD,kBAAkB,2BAAxB;;;AAGA,IAAMG,SAAS;aACF,iDADE;cAED,gDAFC;kBAGG;CAHlB;;;AAOA,IAAMlB,gBAAgBxH,OAAOsG,IAA7B;AACA,IAAMN,QAAQ4C,KAAK5C,KAAnB;AACA,IAAMH,qBAAqB7I,OAAOwH,YAAlC;;;;;;;;;;AAUA,SAASzK,OAAT,CAAe4O,IAAf,EAAqB;OACd,IAAIF,UAAJ,CAAeC,OAAOC,IAAP,CAAf,CAAN;;;;;;;;;;;AAWD,SAASnF,GAAT,CAAauE,KAAb,EAAoBO,EAApB,EAAwB;KACjBH,SAAS,EAAf;KACIjN,SAAS6M,MAAM7M,MAAnB;QACOA,QAAP,EAAiB;SACTA,MAAP,IAAiBoN,GAAGP,MAAM7M,MAAN,CAAH,CAAjB;;QAEMiN,MAAP;;;;;;;;;;;;;AAaD,SAAS9C,SAAT,CAAmBD,MAAnB,EAA2BkD,EAA3B,EAA+B;KACxBE,QAAQpD,OAAO/H,KAAP,CAAa,GAAb,CAAd;KACI8K,SAAS,EAAb;KACIK,MAAMtN,MAAN,GAAe,CAAnB,EAAsB;;;WAGZsN,MAAM,CAAN,IAAW,GAApB;WACSA,MAAM,CAAN,CAAT;;;UAGQpD,OAAO/J,OAAP,CAAekN,eAAf,EAAgC,MAAhC,CAAT;KACMF,SAASjD,OAAO/H,KAAP,CAAa,GAAb,CAAf;KACM+K,UAAU5E,IAAI6E,MAAJ,EAAYC,EAAZ,EAAgBrN,IAAhB,CAAqB,GAArB,CAAhB;QACOkN,SAASC,OAAhB;;;;;;;;;;;;;;;;AAgBD,SAASlD,UAAT,CAAoBE,MAApB,EAA4B;KACrBtE,SAAS,EAAf;KACIoH,UAAU,CAAd;KACMhN,SAASkK,OAAOlK,MAAtB;QACOgN,UAAUhN,MAAjB,EAAyB;MAClB8M,QAAQ5C,OAAON,UAAP,CAAkBoD,SAAlB,CAAd;MACIF,SAAS,MAAT,IAAmBA,SAAS,MAA5B,IAAsCE,UAAUhN,MAApD,EAA4D;;OAErD+M,QAAQ7C,OAAON,UAAP,CAAkBoD,SAAlB,CAAd;OACI,CAACD,QAAQ,MAAT,KAAoB,MAAxB,EAAgC;;WACxB9M,IAAP,CAAY,CAAC,CAAC6M,QAAQ,KAAT,KAAmB,EAApB,KAA2BC,QAAQ,KAAnC,IAA4C,OAAxD;IADD,MAEO;;;WAGC9M,IAAP,CAAY6M,KAAZ;;;GARF,MAWO;UACC7M,IAAP,CAAY6M,KAAZ;;;QAGKlH,MAAP;;;;;;;;;;;AAWD,IAAMmE,aAAa,SAAbA,UAAa;QAASjI,OAAO+J,aAAP,iCAAwBgB,KAAxB,EAAT;CAAnB;;;;;;;;;;;AAWA,IAAMV,eAAe,SAAfA,YAAe,CAASS,SAAT,EAAoB;KACpCA,YAAY,IAAZ,GAAmB,IAAvB,EAA6B;SACrBA,YAAY,IAAnB;;KAEGA,YAAY,IAAZ,GAAmB,IAAvB,EAA6B;SACrBA,YAAY,IAAnB;;KAEGA,YAAY,IAAZ,GAAmB,IAAvB,EAA6B;SACrBA,YAAY,IAAnB;;QAEM9H,IAAP;CAVD;;;;;;;;;;;;;AAwBA,IAAM8F,eAAe,SAAfA,YAAe,CAASsB,KAAT,EAAgBS,IAAhB,EAAsB;;;QAGnCT,QAAQ,EAAR,GAAa,MAAMA,QAAQ,EAAd,CAAb,IAAkC,CAACS,QAAQ,CAAT,KAAe,CAAjD,CAAP;CAHD;;;;;;;AAWA,IAAMnC,QAAQ,SAARA,KAAQ,CAASF,KAAT,EAAgBkC,SAAhB,EAA2BC,SAA3B,EAAsC;KAC/CvB,IAAI,CAAR;SACQuB,YAAY3B,MAAMR,QAAQoC,IAAd,CAAZ,GAAkCpC,SAAS,CAAnD;UACSQ,MAAMR,QAAQkC,SAAd,CAAT;+BAC8BlC,QAAQgC,gBAAgBjB,IAAhB,IAAwB,CAA9D,EAAiEH,KAAKpG,IAAtE,EAA4E;UACnEgG,MAAMR,QAAQgC,aAAd,CAAR;;QAEMxB,MAAMI,IAAI,CAACoB,gBAAgB,CAAjB,IAAsBhC,KAAtB,IAA+BA,QAAQiC,IAAvC,CAAV,CAAP;CAPD;;;;;;;;;AAiBA,IAAMzC,SAAS,SAATA,MAAS,CAAShE,KAAT,EAAgB;;KAExBF,SAAS,EAAf;KACM6F,cAAc3F,MAAM9F,MAA1B;KACIqJ,IAAI,CAAR;KACIgB,IAAIuB,QAAR;KACIT,OAAOQ,WAAX;;;;;;KAMIS,QAAQtG,MAAMjE,WAAN,CAAkB6J,SAAlB,CAAZ;KACIU,QAAQ,CAAZ,EAAe;UACN,CAAR;;;MAGI,IAAIC,IAAI,CAAb,EAAgBA,IAAID,KAApB,EAA2B,EAAEC,CAA7B,EAAgC;;MAE3BvG,MAAM8D,UAAN,CAAiByC,CAAjB,KAAuB,IAA3B,EAAiC;WAC1B,WAAN;;SAEMpM,IAAP,CAAY6F,MAAM8D,UAAN,CAAiByC,CAAjB,CAAZ;;;;;;MAMI,IAAIhF,QAAQ+E,QAAQ,CAAR,GAAYA,QAAQ,CAApB,GAAwB,CAAzC,EAA4C/E,QAAQoE,WAApD,4BAA4F;;;;;;;MAOvFO,OAAO3C,CAAX;OACK,IAAI4C,IAAI,CAAR,EAAWf,IAAIpG,IAApB,qBAA8CoG,KAAKpG,IAAnD,EAAyD;;OAEpDuC,SAASoE,WAAb,EAA0B;YACnB,eAAN;;;OAGKS,QAAQC,aAAarG,MAAM8D,UAAN,CAAiBvC,OAAjB,CAAb,CAAd;;OAEI6E,SAASpH,IAAT,IAAiBoH,QAAQpB,MAAM,CAACS,SAASlC,CAAV,IAAe4C,CAArB,CAA7B,EAAsD;YAC/C,UAAN;;;QAGIC,QAAQD,CAAb;OACMhB,IAAIC,KAAKC,IAAL,GAAYC,IAAZ,GAAoBF,KAAKC,OAAOE,IAAZ,GAAmBA,IAAnB,GAA0BH,IAAIC,IAA5D;;OAEIe,QAAQjB,CAAZ,EAAe;;;;OAITD,aAAalG,OAAOmG,CAA1B;OACIgB,IAAInB,MAAMS,SAASP,UAAf,CAAR,EAAoC;YAC7B,UAAN;;;QAGIA,UAAL;;;MAIKe,MAAMnG,OAAO5F,MAAP,GAAgB,CAA5B;SACOwK,MAAMnB,IAAI2C,IAAV,EAAgBD,GAAhB,EAAqBC,QAAQ,CAA7B,CAAP;;;;MAIIlB,MAAMzB,IAAI0C,GAAV,IAAiBR,SAASlB,CAA9B,EAAiC;WAC1B,UAAN;;;OAGIS,MAAMzB,IAAI0C,GAAV,CAAL;OACKA,GAAL;;;SAGOD,MAAP,CAAczC,GAAd,EAAmB,CAAnB,EAAsBgB,CAAtB;;;QAIMvI,OAAO+J,aAAP,eAAwBjG,MAAxB,CAAP;CAjFD;;;;;;;;;AA2FA,IAAMiE,SAAS,SAATA,MAAS,CAAS/D,KAAT,EAAgB;KACxBF,SAAS,EAAf;;;SAGQoE,WAAWlE,KAAX,CAAR;;;KAGI2F,cAAc3F,MAAM9F,MAAxB;;;KAGIqK,IAAIuB,QAAR;KACItB,QAAQ,CAAZ;KACIa,OAAOQ,WAAX;;;;;;;;uBAG2B7F,KAA3B,8HAAkC;OAAvBwF,cAAuB;;OAC7BA,iBAAe,IAAnB,EAAyB;WACjBrL,IAAP,CAAY0K,mBAAmBW,cAAnB,CAAZ;;;;;;;;;;;;;;;;;;KAIEZ,cAAc9E,OAAO5F,MAAzB;KACIuK,iBAAiBG,WAArB;;;;;;KAMIA,WAAJ,EAAiB;SACTzK,IAAP,CAAYyL,SAAZ;;;;QAIMnB,iBAAiBkB,WAAxB,EAAqC;;;;MAIhCD,IAAID,MAAR;;;;;;yBAC2BzF,KAA3B,mIAAkC;QAAvBwF,YAAuB;;QAC7BA,gBAAgBjB,CAAhB,IAAqBiB,eAAeE,CAAxC,EAA2C;SACtCF,YAAJ;;;;;;;;;;;;;;;;;;;;;MAMIb,wBAAwBF,iBAAiB,CAA/C;MACIiB,IAAInB,CAAJ,GAAQS,MAAM,CAACS,SAASjB,KAAV,IAAmBG,qBAAzB,CAAZ,EAA6D;WACtD,UAAN;;;WAGQ,CAACe,IAAInB,CAAL,IAAUI,qBAAnB;MACIe,CAAJ;;;;;;;yBAE2B1F,KAA3B,mIAAkC;QAAvBwF,aAAuB;;QAC7BA,gBAAejB,CAAf,IAAoB,EAAEC,KAAF,GAAUiB,MAAlC,EAA0C;aACnC,UAAN;;QAEGD,iBAAgBjB,CAApB,EAAuB;;SAElBQ,IAAIP,KAAR;UACK,IAAIY,IAAIpG,IAAb,qBAAuCoG,KAAKpG,IAA5C,EAAkD;UAC3CmG,IAAIC,KAAKC,IAAL,GAAYC,IAAZ,GAAoBF,KAAKC,OAAOE,IAAZ,GAAmBA,IAAnB,GAA0BH,IAAIC,IAA5D;UACIN,IAAII,CAAR,EAAW;;;UAGLF,UAAUF,IAAII,CAApB;UACMD,aAAalG,OAAOmG,CAA1B;aACOhL,IAAP,CACC0K,mBAAmBC,aAAaK,IAAIF,UAAUC,UAA3B,EAAuC,CAAvC,CAAnB,CADD;UAGIF,MAAMC,UAAUC,UAAhB,CAAJ;;;YAGM/K,IAAP,CAAY0K,mBAAmBC,aAAaC,CAAb,EAAgB,CAAhB,CAAnB,CAAZ;YACOL,MAAMF,KAAN,EAAaG,qBAAb,EAAoCF,kBAAkBG,WAAtD,CAAP;aACQ,CAAR;OACEH,cAAF;;;;;;;;;;;;;;;;;;IAIAD,KAAF;IACED,CAAF;;QAGMzE,OAAO7F,IAAP,CAAY,EAAZ,CAAP;CArFD;;;;;;;;;;;;;AAmGA,IAAMyB,YAAY,SAAZA,SAAY,CAASsE,KAAT,EAAgB;QAC1BqE,UAAUrE,KAAV,EAAiB,UAASoE,MAAT,EAAiB;SACjCE,cAAczE,IAAd,CAAmBuE,MAAnB,IACJJ,OAAOI,OAAOxI,KAAP,CAAa,CAAb,EAAgB/C,WAAhB,EAAP,CADI,GAEJuL,MAFH;EADM,CAAP;CADD;;;;;;;;;;;;;AAmBA,IAAM5I,UAAU,SAAVA,OAAU,CAASwE,KAAT,EAAgB;QACxBqE,UAAUrE,KAAV,EAAiB,UAASoE,MAAT,EAAiB;SACjCD,cAActE,IAAd,CAAmBuE,MAAnB,IACJ,SAASL,OAAOK,MAAP,CADL,GAEJA,MAFH;EADM,CAAP;CADD;;;;;AAWA,IAAM7I,WAAW;;;;;;YAML,OANK;;;;;;;;SAcR;YACG2I,UADH;YAEGD;EAhBK;WAkBND,MAlBM;WAmBND,MAnBM;YAoBLvI,OApBK;cAqBHE;CArBd,CAwBA;;ADvbA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,AACA,AACA,AACA,AAiDA,AAAO,IAAMvD,UAA6C,EAAnD;AAEP,AAAA,SAAAuC,UAAA,CAA2BmJ,GAA3B,EAAA;QACOJ,IAAII,IAAIC,UAAJ,CAAe,CAAf,CAAV;QACIxI,UAAJ;QAEImI,IAAI,EAAR,EAAYnI,IAAI,OAAOmI,EAAE7F,QAAF,CAAW,EAAX,EAAepD,WAAf,EAAX,CAAZ,KACK,IAAIiJ,IAAI,GAAR,EAAanI,IAAI,MAAMmI,EAAE7F,QAAF,CAAW,EAAX,EAAepD,WAAf,EAAV,CAAb,KACA,IAAIiJ,IAAI,IAAR,EAAcnI,IAAI,MAAM,CAAEmI,KAAK,CAAN,GAAW,GAAZ,EAAiB7F,QAAjB,CAA0B,EAA1B,EAA8BpD,WAA9B,EAAN,GAAoD,GAApD,GAA0D,CAAEiJ,IAAI,EAAL,GAAW,GAAZ,EAAiB7F,QAAjB,CAA0B,EAA1B,EAA8BpD,WAA9B,EAA9D,CAAd,KACAc,IAAI,MAAM,CAAEmI,KAAK,EAAN,GAAY,GAAb,EAAkB7F,QAAlB,CAA2B,EAA3B,EAA+BpD,WAA/B,EAAN,GAAqD,GAArD,GAA2D,CAAGiJ,KAAK,CAAN,GAAW,EAAZ,GAAkB,GAAnB,EAAwB7F,QAAxB,CAAiC,EAAjC,EAAqCpD,WAArC,EAA3D,GAAgH,GAAhH,GAAsH,CAAEiJ,IAAI,EAAL,GAAW,GAAZ,EAAiB7F,QAAjB,CAA0B,EAA1B,EAA8BpD,WAA9B,EAA1H;WAEEc,CAAP;;AAGD,AAAA,SAAAuB,WAAA,CAA4BD,GAA5B,EAAA;QACKyG,SAAS,EAAb;QACIE,IAAI,CAAR;QACMK,KAAKhH,IAAI1C,MAAf;WAEOqJ,IAAIK,EAAX,EAAe;YACRH,IAAI1C,SAASnE,IAAI0G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAV;YAEIE,IAAI,GAAR,EAAa;sBACFzH,OAAOwH,YAAP,CAAoBC,CAApB,CAAV;iBACK,CAAL;SAFD,MAIK,IAAIA,KAAK,GAAL,IAAYA,IAAI,GAApB,EAAyB;gBACxBG,KAAKL,CAAN,IAAY,CAAhB,EAAmB;oBACZG,KAAK3C,SAASnE,IAAI0G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAX;0BACUvH,OAAOwH,YAAP,CAAqB,CAACC,IAAI,EAAL,KAAY,CAAb,GAAmBC,KAAK,EAA5C,CAAV;aAFD,MAGO;0BACI9G,IAAI0G,MAAJ,CAAWC,CAAX,EAAc,CAAd,CAAV;;iBAEI,CAAL;SAPI,MASA,IAAIE,KAAK,GAAT,EAAc;gBACbG,KAAKL,CAAN,IAAY,CAAhB,EAAmB;oBACZG,KAAK3C,SAASnE,IAAI0G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAX;oBACMI,KAAK5C,SAASnE,IAAI0G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAX;0BACUvH,OAAOwH,YAAP,CAAqB,CAACC,IAAI,EAAL,KAAY,EAAb,GAAoB,CAACC,KAAK,EAAN,KAAa,CAAjC,GAAuCC,KAAK,EAAhE,CAAV;aAHD,MAIO;0BACI/G,IAAI0G,MAAJ,CAAWC,CAAX,EAAc,CAAd,CAAV;;iBAEI,CAAL;SARI,MAUA;sBACM3G,IAAI0G,MAAJ,CAAWC,CAAX,EAAc,CAAd,CAAV;iBACK,CAAL;;;WAIKF,MAAP;;AAGD,SAAAD,2BAAA,CAAqCvJ,UAArC,EAA+D8F,QAA/D,EAAA;aACApF,gBAAC,CAA0BqC,GAA1B,EAAD;YACQF,SAASG,YAAYD,GAAZ,CAAf;eACQ,CAACF,OAAOzD,KAAP,CAAa0G,SAAShD,UAAtB,CAAD,GAAqCC,GAArC,GAA2CF,MAAnD;;QAGG7C,WAAWxB,MAAf,EAAuBwB,WAAWxB,MAAX,GAAoB2D,OAAOnC,WAAWxB,MAAlB,EAA0BgC,OAA1B,CAAkCsF,SAASrF,WAA3C,EAAwDC,gBAAxD,EAA0E1B,WAA1E,GAAwFwB,OAAxF,CAAgGsF,SAASwD,UAAzG,EAAqH,EAArH,CAApB;QACnBtJ,WAAWoF,QAAX,KAAwB9F,SAA5B,EAAuCU,WAAWoF,QAAX,GAAsBjD,OAAOnC,WAAWoF,QAAlB,EAA4B5E,OAA5B,CAAoCsF,SAASrF,WAA7C,EAA0DC,gBAA1D,EAA4EF,OAA5E,CAAoFsF,SAASuD,YAA7F,EAA2GxI,UAA3G,EAAuHL,OAAvH,CAA+HsF,SAASrF,WAAxI,EAAqJE,WAArJ,CAAtB;QACnCX,WAAW8D,IAAX,KAAoBxE,SAAxB,EAAmCU,WAAW8D,IAAX,GAAkB3B,OAAOnC,WAAW8D,IAAlB,EAAwBtD,OAAxB,CAAgCsF,SAASrF,WAAzC,EAAsDC,gBAAtD,EAAwE1B,WAAxE,GAAsFwB,OAAtF,CAA8FsF,SAASsD,QAAvG,EAAiHvI,UAAjH,EAA6HL,OAA7H,CAAqIsF,SAASrF,WAA9I,EAA2JE,WAA3J,CAAlB;QAC/BX,WAAWP,IAAX,KAAoBH,SAAxB,EAAmCU,WAAWP,IAAX,GAAkB0C,OAAOnC,WAAWP,IAAlB,EAAwBe,OAAxB,CAAgCsF,SAASrF,WAAzC,EAAsDC,gBAAtD,EAAwEF,OAAxE,CAAiFR,WAAWxB,MAAX,GAAoBsH,SAASoD,QAA7B,GAAwCpD,SAASqD,iBAAlI,EAAsJtI,UAAtJ,EAAkKL,OAAlK,CAA0KsF,SAASrF,WAAnL,EAAgME,WAAhM,CAAlB;QAC/BX,WAAWE,KAAX,KAAqBZ,SAAzB,EAAoCU,WAAWE,KAAX,GAAmBiC,OAAOnC,WAAWE,KAAlB,EAAyBM,OAAzB,CAAiCsF,SAASrF,WAA1C,EAAuDC,gBAAvD,EAAyEF,OAAzE,CAAiFsF,SAASmD,SAA1F,EAAqGpI,UAArG,EAAiHL,OAAjH,CAAyHsF,SAASrF,WAAlI,EAA+IE,WAA/I,CAAnB;QAChCX,WAAWiF,QAAX,KAAwB3F,SAA5B,EAAuCU,WAAWiF,QAAX,GAAsB9C,OAAOnC,WAAWiF,QAAlB,EAA4BzE,OAA5B,CAAoCsF,SAASrF,WAA7C,EAA0DC,gBAA1D,EAA4EF,OAA5E,CAAoFsF,SAASkD,YAA7F,EAA2GnI,UAA3G,EAAuHL,OAAvH,CAA+HsF,SAASrF,WAAxI,EAAqJE,WAArJ,CAAtB;WAEhCX,UAAP;;AACA;AAED,SAAA4I,kBAAA,CAA4B7F,GAA5B,EAAA;WACQA,IAAIvC,OAAJ,CAAY,SAAZ,EAAuB,IAAvB,KAAgC,GAAvC;;AAGD,SAAAqG,cAAA,CAAwB/C,IAAxB,EAAqCgC,QAArC,EAAA;QACO/F,UAAU+D,KAAK1E,KAAL,CAAW0G,SAAS2C,WAApB,KAAoC,EAApD;;iCACoB1I,OAFrB;QAEU+I,OAFV;;QAIKA,OAAJ,EAAa;eACLA,QAAQtG,KAAR,CAAc,GAAd,EAAmBmG,GAAnB,CAAuBC,kBAAvB,EAA2CxI,IAA3C,CAAgD,GAAhD,CAAP;KADD,MAEO;eACC0D,IAAP;;;AAIF,SAAA8C,cAAA,CAAwB9C,IAAxB,EAAqCgC,QAArC,EAAA;QACO/F,UAAU+D,KAAK1E,KAAL,CAAW0G,SAASC,WAApB,KAAoC,EAApD;;kCAC0BhG,OAF3B;QAEU+I,OAFV;QAEmBxB,IAFnB;;QAIKwB,OAAJ,EAAa;oCACUA,QAAQ9J,WAAR,GAAsBwD,KAAtB,CAA4B,IAA5B,EAAkCuG,OAAlC,EADV;;YACLL,IADK;YACCG,KADD;;YAENR,cAAcQ,QAAQA,MAAMrG,KAAN,CAAY,GAAZ,EAAiBmG,GAAjB,CAAqBC,kBAArB,CAAR,GAAmD,EAAvE;YACMN,aAAaI,KAAKlG,KAAL,CAAW,GAAX,EAAgBmG,GAAhB,CAAoBC,kBAApB,CAAnB;YACMR,yBAAyBtC,SAAS2C,WAAT,CAAqBzC,IAArB,CAA0BsC,WAAWA,WAAWjI,MAAX,GAAoB,CAA/B,CAA1B,CAA/B;YACM8H,aAAaC,yBAAyB,CAAzB,GAA6B,CAAhD;YACMG,kBAAkBD,WAAWjI,MAAX,GAAoB8H,UAA5C;YACMhI,SAASqI,MAAcL,UAAd,CAAf;aAEK,IAAI9G,IAAI,CAAb,EAAgBA,IAAI8G,UAApB,EAAgC,EAAE9G,CAAlC,EAAqC;mBAC7BA,CAAP,IAAYgH,YAAYhH,CAAZ,KAAkBiH,WAAWC,kBAAkBlH,CAA7B,CAAlB,IAAqD,EAAjE;;YAGG+G,sBAAJ,EAA4B;mBACpBD,aAAa,CAApB,IAAyBtB,eAAe1G,OAAOgI,aAAa,CAApB,CAAf,EAAuCrC,QAAvC,CAAzB;;YAGK+B,gBAAgB1H,OAAO+H,MAAP,CAAmD,UAACH,GAAD,EAAME,KAAN,EAAaP,KAAb,EAA3E;gBACO,CAACO,KAAD,IAAUA,UAAU,GAAxB,EAA6B;oBACtBD,cAAcD,IAAIA,IAAI1H,MAAJ,GAAa,CAAjB,CAApB;oBACI2H,eAAeA,YAAYN,KAAZ,GAAoBM,YAAY3H,MAAhC,KAA2CqH,KAA9D,EAAqE;gCACxDrH,MAAZ;iBADD,MAEO;wBACFC,IAAJ,CAAS,EAAEoH,YAAF,EAASrH,QAAS,CAAlB,EAAT;;;mBAGK0H,GAAP;SATqB,EAUnB,EAVmB,CAAtB;YAYMN,oBAAoBI,cAAcC,IAAd,CAAmB,UAACF,CAAD,EAAID,CAAJ;mBAAUA,EAAEtH,MAAF,GAAWuH,EAAEvH,MAAvB;SAAnB,EAAkD,CAAlD,CAA1B;YAEIgH,gBAAJ;YACII,qBAAqBA,kBAAkBpH,MAAlB,GAA2B,CAApD,EAAuD;gBAChDkH,WAAWpH,OAAO4B,KAAP,CAAa,CAAb,EAAgB0F,kBAAkBC,KAAlC,CAAjB;gBACMF,UAAUrH,OAAO4B,KAAP,CAAa0F,kBAAkBC,KAAlB,GAA0BD,kBAAkBpH,MAAzD,CAAhB;sBACUkH,SAASnH,IAAT,CAAc,GAAd,IAAqB,IAArB,GAA4BoH,QAAQpH,IAAR,CAAa,GAAb,CAAtC;SAHD,MAIO;sBACID,OAAOC,IAAP,CAAY,GAAZ,CAAV;;YAGGkH,IAAJ,EAAU;uBACE,MAAMA,IAAjB;;eAGMD,OAAP;KA5CD,MA6CO;eACCvD,IAAP;;;AAIF,IAAMsD,YAAY,iIAAlB;AACA,IAAMD,wBAA4C,EAAD,CAAK/H,KAAL,CAAW,OAAX,EAAqB,CAArB,MAA4BE,SAA7E;AAEA,AAAA,SAAAQ,KAAA,CAAsBiH,SAAtB,EAAA;QAAwC9H,OAAxC,uEAA6D,EAA7D;;QACOe,aAA2B,EAAjC;QACM8F,WAAY7G,QAAQuC,GAAR,KAAgB,KAAhB,GAAwByC,YAAxB,GAAuCD,YAAzD;QAEI/E,QAAQ2G,SAAR,KAAsB,QAA1B,EAAoCmB,YAAY,CAAC9H,QAAQT,MAAR,GAAiBS,QAAQT,MAAR,GAAiB,GAAlC,GAAwC,EAAzC,IAA+C,IAA/C,GAAsDuI,SAAlE;QAE9BhH,UAAUgH,UAAU3H,KAAV,CAAgBgI,SAAhB,CAAhB;QAEIrH,OAAJ,EAAa;YACRoH,qBAAJ,EAA2B;;uBAEf3I,MAAX,GAAoBuB,QAAQ,CAAR,CAApB;uBACWqF,QAAX,GAAsBrF,QAAQ,CAAR,CAAtB;uBACW+D,IAAX,GAAkB/D,QAAQ,CAAR,CAAlB;uBACW8D,IAAX,GAAkBqD,SAASnH,QAAQ,CAAR,CAAT,EAAqB,EAArB,CAAlB;uBACWN,IAAX,GAAkBM,QAAQ,CAAR,KAAc,EAAhC;uBACWG,KAAX,GAAmBH,QAAQ,CAAR,CAAnB;uBACWkF,QAAX,GAAsBlF,QAAQ,CAAR,CAAtB;;gBAGIiH,MAAMhH,WAAW6D,IAAjB,CAAJ,EAA4B;2BAChBA,IAAX,GAAkB9D,QAAQ,CAAR,CAAlB;;SAZF,MAcO;;;uBAEKvB,MAAX,GAAoBuB,QAAQ,CAAR,KAAcT,SAAlC;uBACW8F,QAAX,GAAuB2B,UAAUE,OAAV,CAAkB,GAAlB,MAA2B,CAAC,CAA5B,GAAgClH,QAAQ,CAAR,CAAhC,GAA6CT,SAApE;uBACWwE,IAAX,GAAmBiD,UAAUE,OAAV,CAAkB,IAAlB,MAA4B,CAAC,CAA7B,GAAiClH,QAAQ,CAAR,CAAjC,GAA8CT,SAAjE;uBACWuE,IAAX,GAAkBqD,SAASnH,QAAQ,CAAR,CAAT,EAAqB,EAArB,CAAlB;uBACWN,IAAX,GAAkBM,QAAQ,CAAR,KAAc,EAAhC;uBACWG,KAAX,GAAoB6G,UAAUE,OAAV,CAAkB,GAAlB,MAA2B,CAAC,CAA5B,GAAgClH,QAAQ,CAAR,CAAhC,GAA6CT,SAAjE;uBACW2F,QAAX,GAAuB8B,UAAUE,OAAV,CAAkB,GAAlB,MAA2B,CAAC,CAA5B,GAAgClH,QAAQ,CAAR,CAAhC,GAA6CT,SAApE;;gBAGI0H,MAAMhH,WAAW6D,IAAjB,CAAJ,EAA4B;2BAChBA,IAAX,GAAmBkD,UAAU3H,KAAV,CAAgB,+BAAhB,IAAmDW,QAAQ,CAAR,CAAnD,GAAgET,SAAnF;;;YAIEU,WAAW8D,IAAf,EAAqB;;uBAETA,IAAX,GAAkB8C,eAAeC,eAAe7G,WAAW8D,IAA1B,EAAgCgC,QAAhC,CAAf,EAA0DA,QAA1D,CAAlB;;;YAIG9F,WAAWxB,MAAX,KAAsBc,SAAtB,IAAmCU,WAAWoF,QAAX,KAAwB9F,SAA3D,IAAwEU,WAAW8D,IAAX,KAAoBxE,SAA5F,IAAyGU,WAAW6D,IAAX,KAAoBvE,SAA7H,IAA0I,CAACU,WAAWP,IAAtJ,IAA8JO,WAAWE,KAAX,KAAqBZ,SAAvL,EAAkM;uBACtLsG,SAAX,GAAuB,eAAvB;SADD,MAEO,IAAI5F,WAAWxB,MAAX,KAAsBc,SAA1B,EAAqC;uBAChCsG,SAAX,GAAuB,UAAvB;SADM,MAEA,IAAI5F,WAAWiF,QAAX,KAAwB3F,SAA5B,EAAuC;uBAClCsG,SAAX,GAAuB,UAAvB;SADM,MAEA;uBACKA,SAAX,GAAuB,KAAvB;;;YAIG3G,QAAQ2G,SAAR,IAAqB3G,QAAQ2G,SAAR,KAAsB,QAA3C,IAAuD3G,QAAQ2G,SAAR,KAAsB5F,WAAW4F,SAA5F,EAAuG;uBAC3F1G,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,kBAAkBD,QAAQ2G,SAA1B,GAAsC,aAA7E;;;YAIKjG,gBAAgBrB,QAAQ,CAACW,QAAQT,MAAR,IAAkBwB,WAAWxB,MAA7B,IAAuC,EAAxC,EAA4CQ,WAA5C,EAAR,CAAtB;;YAGI,CAACC,QAAQsD,cAAT,KAA4B,CAAC5C,aAAD,IAAkB,CAACA,cAAc4C,cAA7D,CAAJ,EAAkF;;gBAE7EvC,WAAW8D,IAAX,KAAoB7E,QAAQ2E,UAAR,IAAuBjE,iBAAiBA,cAAciE,UAA1E,CAAJ,EAA4F;;oBAEvF;+BACQE,IAAX,GAAkBpC,SAASC,OAAT,CAAiB3B,WAAW8D,IAAX,CAAgBtD,OAAhB,CAAwBsF,SAASrF,WAAjC,EAA8CuC,WAA9C,EAA2DhE,WAA3D,EAAjB,CAAlB;iBADD,CAEE,OAAOyC,CAAP,EAAU;+BACAvC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,oEAAoEuC,CAA3G;;;;wCAI0BzB,UAA5B,EAAwCgE,YAAxC;SAXD,MAYO;;wCAEsBhE,UAA5B,EAAwC8F,QAAxC;;;YAIGnG,iBAAiBA,cAAcG,KAAnC,EAA0C;0BAC3BA,KAAd,CAAoBE,UAApB,EAAgCf,OAAhC;;KA3EF,MA6EO;mBACKC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,wBAAvC;;WAGMc,UAAP;;AACA;AAED,SAAA6F,mBAAA,CAA6B7F,UAA7B,EAAuDf,OAAvD,EAAA;QACO6G,WAAY7G,QAAQuC,GAAR,KAAgB,KAAhB,GAAwByC,YAAxB,GAAuCD,YAAzD;QACMwB,YAA0B,EAAhC;QAEIxF,WAAWoF,QAAX,KAAwB9F,SAA5B,EAAuC;kBAC5BgB,IAAV,CAAeN,WAAWoF,QAA1B;kBACU9E,IAAV,CAAe,GAAf;;QAGGN,WAAW8D,IAAX,KAAoBxE,SAAxB,EAAmC;;kBAExBgB,IAAV,CAAesG,eAAeC,eAAe1E,OAAOnC,WAAW8D,IAAlB,CAAf,EAAwCgC,QAAxC,CAAf,EAAkEA,QAAlE,EAA4EtF,OAA5E,CAAoFsF,SAASC,WAA7F,EAA0G,UAACe,CAAD,EAAIJ,EAAJ,EAAQC,EAAR;mBAAe,MAAMD,EAAN,IAAYC,KAAK,QAAQA,EAAb,GAAkB,EAA9B,IAAoC,GAAnD;SAA1G,CAAf;;QAGG,OAAO3G,WAAW6D,IAAlB,KAA2B,QAA/B,EAAyC;kBAC9BvD,IAAV,CAAe,GAAf;kBACUA,IAAV,CAAeN,WAAW6D,IAAX,CAAgBE,QAAhB,CAAyB,EAAzB,CAAf;;WAGMyB,UAAUnF,MAAV,GAAmBmF,UAAUpF,IAAV,CAAe,EAAf,CAAnB,GAAwCd,SAA/C;;AACA;AAED,IAAMmH,OAAO,UAAb;AACA,IAAMD,OAAO,aAAb;AACA,IAAMD,OAAO,eAAb;AACA,AACA,IAAMF,OAAO,wBAAb;AAEA,AAAA,SAAAhB,iBAAA,CAAkCc,KAAlC,EAAA;QACOF,SAAuB,EAA7B;WAEOE,MAAM9F,MAAb,EAAqB;YAChB8F,MAAM/G,KAAN,CAAYqH,IAAZ,CAAJ,EAAuB;oBACdN,MAAM3F,OAAN,CAAciG,IAAd,EAAoB,EAApB,CAAR;SADD,MAEO,IAAIN,MAAM/G,KAAN,CAAYoH,IAAZ,CAAJ,EAAuB;oBACrBL,MAAM3F,OAAN,CAAcgG,IAAd,EAAoB,GAApB,CAAR;SADM,MAEA,IAAIL,MAAM/G,KAAN,CAAYmH,IAAZ,CAAJ,EAAuB;oBACrBJ,MAAM3F,OAAN,CAAc+F,IAAd,EAAoB,GAApB,CAAR;mBACOD,GAAP;SAFM,MAGA,IAAIH,UAAU,GAAV,IAAiBA,UAAU,IAA/B,EAAqC;oBACnC,EAAR;SADM,MAEA;gBACAC,KAAKD,MAAM/G,KAAN,CAAYiH,IAAZ,CAAX;gBACID,EAAJ,EAAQ;oBACDX,IAAIW,GAAG,CAAH,CAAV;wBACQD,MAAMpE,KAAN,CAAY0D,EAAEpF,MAAd,CAAR;uBACOC,IAAP,CAAYmF,CAAZ;aAHD,MAIO;sBACA,IAAIS,KAAJ,CAAU,kCAAV,CAAN;;;;WAKID,OAAO7F,IAAP,CAAY,EAAZ,CAAP;;AACA;AAED,AAAA,SAAAR,SAAA,CAA0BI,UAA1B,EAAA;QAAoDf,OAApD,uEAAyE,EAAzE;;QACO6G,WAAY7G,QAAQuC,GAAR,GAAcyC,YAAd,GAA6BD,YAA/C;QACMwB,YAA0B,EAAhC;;QAGM7F,gBAAgBrB,QAAQ,CAACW,QAAQT,MAAR,IAAkBwB,WAAWxB,MAA7B,IAAuC,EAAxC,EAA4CQ,WAA5C,EAAR,CAAtB;;QAGIW,iBAAiBA,cAAcC,SAAnC,EAA8CD,cAAcC,SAAd,CAAwBI,UAAxB,EAAoCf,OAApC;QAE1Ce,WAAW8D,IAAf,EAAqB;;YAEhBgC,SAASC,WAAT,CAAqBC,IAArB,CAA0BhG,WAAW8D,IAArC,CAAJ,EAAgD;;;;aAK3C,IAAI7E,QAAQ2E,UAAR,IAAuBjE,iBAAiBA,cAAciE,UAA1D,EAAuE;;oBAEvE;+BACQE,IAAX,GAAmB,CAAC7E,QAAQuC,GAAT,GAAeE,SAASC,OAAT,CAAiB3B,WAAW8D,IAAX,CAAgBtD,OAAhB,CAAwBsF,SAASrF,WAAjC,EAA8CuC,WAA9C,EAA2DhE,WAA3D,EAAjB,CAAf,GAA4G0C,SAASG,SAAT,CAAmB7B,WAAW8D,IAA9B,CAA/H;iBADD,CAEE,OAAOrC,CAAP,EAAU;+BACAvC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,iDAAiD,CAACD,QAAQuC,GAAT,GAAe,OAAf,GAAyB,SAA1E,IAAuF,iBAAvF,GAA2GC,CAAlJ;;;;;gCAMyBzB,UAA5B,EAAwC8F,QAAxC;QAEI7G,QAAQ2G,SAAR,KAAsB,QAAtB,IAAkC5F,WAAWxB,MAAjD,EAAyD;kBAC9C8B,IAAV,CAAeN,WAAWxB,MAA1B;kBACU8B,IAAV,CAAe,GAAf;;QAGKoF,YAAYG,oBAAoB7F,UAApB,EAAgCf,OAAhC,CAAlB;QACIyG,cAAcpG,SAAlB,EAA6B;YACxBL,QAAQ2G,SAAR,KAAsB,QAA1B,EAAoC;sBACzBtF,IAAV,CAAe,IAAf;;kBAGSA,IAAV,CAAeoF,SAAf;YAEI1F,WAAWP,IAAX,IAAmBO,WAAWP,IAAX,CAAgB6F,MAAhB,CAAuB,CAAvB,MAA8B,GAArD,EAA0D;sBAC/ChF,IAAV,CAAe,GAAf;;;QAIEN,WAAWP,IAAX,KAAoBH,SAAxB,EAAmC;YAC9BmG,IAAIzF,WAAWP,IAAnB;YAEI,CAACR,QAAQ0G,YAAT,KAA0B,CAAChG,aAAD,IAAkB,CAACA,cAAcgG,YAA3D,CAAJ,EAA8E;gBACzEN,kBAAkBI,CAAlB,CAAJ;;YAGGC,cAAcpG,SAAlB,EAA6B;gBACxBmG,EAAEjF,OAAF,CAAU,OAAV,EAAmB,MAAnB,CAAJ,CAD4B;;kBAInBF,IAAV,CAAemF,CAAf;;QAGGzF,WAAWE,KAAX,KAAqBZ,SAAzB,EAAoC;kBACzBgB,IAAV,CAAe,GAAf;kBACUA,IAAV,CAAeN,WAAWE,KAA1B;;QAGGF,WAAWiF,QAAX,KAAwB3F,SAA5B,EAAuC;kBAC5BgB,IAAV,CAAe,GAAf;kBACUA,IAAV,CAAeN,WAAWiF,QAA1B;;WAGMO,UAAUpF,IAAV,CAAe,EAAf,CAAP,CAxED;;AAyEC;AAED,AAAA,SAAAsE,iBAAA,CAAkCS,IAAlC,EAAsDD,QAAtD,EAAA;QAA8EjG,OAA9E,uEAAmG,EAAnG;QAAuGsG,iBAAvG;;QACOP,SAAuB,EAA7B;QAEI,CAACO,iBAAL,EAAwB;eAChBzF,MAAMF,UAAUuF,IAAV,EAAgBlG,OAAhB,CAAN,EAAgCA,OAAhC,CAAP,CADuB;mBAEZa,MAAMF,UAAUsF,QAAV,EAAoBjG,OAApB,CAAN,EAAoCA,OAApC,CAAX,CAFuB;;cAIdA,WAAW,EAArB;QAEI,CAACA,QAAQE,QAAT,IAAqB+F,SAAS1G,MAAlC,EAA0C;eAClCA,MAAP,GAAgB0G,SAAS1G,MAAzB;;eAEO4G,QAAP,GAAkBF,SAASE,QAA3B;eACOtB,IAAP,GAAcoB,SAASpB,IAAvB;eACOD,IAAP,GAAcqB,SAASrB,IAAvB;eACOpE,IAAP,GAAc4F,kBAAkBH,SAASzF,IAAT,IAAiB,EAAnC,CAAd;eACOS,KAAP,GAAegF,SAAShF,KAAxB;KAPD,MAQO;YACFgF,SAASE,QAAT,KAAsB9F,SAAtB,IAAmC4F,SAASpB,IAAT,KAAkBxE,SAArD,IAAkE4F,SAASrB,IAAT,KAAkBvE,SAAxF,EAAmG;;mBAE3F8F,QAAP,GAAkBF,SAASE,QAA3B;mBACOtB,IAAP,GAAcoB,SAASpB,IAAvB;mBACOD,IAAP,GAAcqB,SAASrB,IAAvB;mBACOpE,IAAP,GAAc4F,kBAAkBH,SAASzF,IAAT,IAAiB,EAAnC,CAAd;mBACOS,KAAP,GAAegF,SAAShF,KAAxB;SAND,MAOO;gBACF,CAACgF,SAASzF,IAAd,EAAoB;uBACZA,IAAP,GAAc0F,KAAK1F,IAAnB;oBACIyF,SAAShF,KAAT,KAAmBZ,SAAvB,EAAkC;2BAC1BY,KAAP,GAAegF,SAAShF,KAAxB;iBADD,MAEO;2BACCA,KAAP,GAAeiF,KAAKjF,KAApB;;aALF,MAOO;oBACFgF,SAASzF,IAAT,CAAc6F,MAAd,CAAqB,CAArB,MAA4B,GAAhC,EAAqC;2BAC7B7F,IAAP,GAAc4F,kBAAkBH,SAASzF,IAA3B,CAAd;iBADD,MAEO;wBACF,CAAC0F,KAAKC,QAAL,KAAkB9F,SAAlB,IAA+B6F,KAAKrB,IAAL,KAAcxE,SAA7C,IAA0D6F,KAAKtB,IAAL,KAAcvE,SAAzE,KAAuF,CAAC6F,KAAK1F,IAAjG,EAAuG;+BAC/FA,IAAP,GAAc,MAAMyF,SAASzF,IAA7B;qBADD,MAEO,IAAI,CAAC0F,KAAK1F,IAAV,EAAgB;+BACfA,IAAP,GAAcyF,SAASzF,IAAvB;qBADM,MAEA;+BACCA,IAAP,GAAc0F,KAAK1F,IAAL,CAAUsC,KAAV,CAAgB,CAAhB,EAAmBoD,KAAK1F,IAAL,CAAUyC,WAAV,CAAsB,GAAtB,IAA6B,CAAhD,IAAqDgD,SAASzF,IAA5E;;2BAEMA,IAAP,GAAc4F,kBAAkBL,OAAOvF,IAAzB,CAAd;;uBAEMS,KAAP,GAAegF,SAAShF,KAAxB;;;mBAGMkF,QAAP,GAAkBD,KAAKC,QAAvB;mBACOtB,IAAP,GAAcqB,KAAKrB,IAAnB;mBACOD,IAAP,GAAcsB,KAAKtB,IAAnB;;eAEMrF,MAAP,GAAgB2G,KAAK3G,MAArB;;WAGMyG,QAAP,GAAkBC,SAASD,QAA3B;WAEOD,MAAP;;AACA;AAED,AAAA,SAAAD,OAAA,CAAwBJ,OAAxB,EAAwCE,WAAxC,EAA4D5F,OAA5D,EAAA;QACO2F,oBAAoBE,OAAO,EAAEtG,QAAS,MAAX,EAAP,EAA4BS,OAA5B,CAA1B;WACOW,UAAU8E,kBAAkB5E,MAAM6E,OAAN,EAAeC,iBAAf,CAAlB,EAAqD9E,MAAM+E,WAAN,EAAmBD,iBAAnB,CAArD,EAA4FA,iBAA5F,EAA+G,IAA/G,CAAV,EAAgIA,iBAAhI,CAAP;;AACA;AAID,AAAA,SAAAH,SAAA,CAA0BD,GAA1B,EAAmCvF,OAAnC,EAAA;QACK,OAAOuF,GAAP,KAAe,QAAnB,EAA6B;cACtB5E,UAAUE,MAAM0E,GAAN,EAAWvF,OAAX,CAAV,EAA+BA,OAA/B,CAAN;KADD,MAEO,IAAIqF,OAAOE,GAAP,MAAgB,QAApB,EAA8B;cAC9B1E,MAAMF,UAAyB4E,GAAzB,EAA8BvF,OAA9B,CAAN,EAA8CA,OAA9C,CAAN;;WAGMuF,GAAP;;AACA;AAID,AAAA,SAAAD,KAAA,CAAsBH,IAAtB,EAAgCC,IAAhC,EAA0CpF,OAA1C,EAAA;QACK,OAAOmF,IAAP,KAAgB,QAApB,EAA8B;eACtBxE,UAAUE,MAAMsE,IAAN,EAAYnF,OAAZ,CAAV,EAAgCA,OAAhC,CAAP;KADD,MAEO,IAAIqF,OAAOF,IAAP,MAAiB,QAArB,EAA+B;eAC9BxE,UAAyBwE,IAAzB,EAA+BnF,OAA/B,CAAP;;QAGG,OAAOoF,IAAP,KAAgB,QAApB,EAA8B;eACtBzE,UAAUE,MAAMuE,IAAN,EAAYpF,OAAZ,CAAV,EAAgCA,OAAhC,CAAP;KADD,MAEO,IAAIqF,OAAOD,IAAP,MAAiB,QAArB,EAA+B;eAC9BzE,UAAyByE,IAAzB,EAA+BpF,OAA/B,CAAP;;WAGMmF,SAASC,IAAhB;;AACA;AAED,AAAA,SAAAF,eAAA,CAAgCpB,GAAhC,EAA4C9D,OAA5C,EAAA;WACQ8D,OAAOA,IAAIgB,QAAJ,GAAevD,OAAf,CAAwB,CAACvB,OAAD,IAAY,CAACA,QAAQuC,GAArB,GAA2BwC,aAAaE,MAAxC,GAAiDD,aAAaC,MAAtF,EAA+FrD,UAA/F,CAAd;;AACA;AAED,AAAA,SAAAe,iBAAA,CAAkCmB,GAAlC,EAA8C9D,OAA9C,EAAA;WACQ8D,OAAOA,IAAIgB,QAAJ,GAAevD,OAAf,CAAwB,CAACvB,OAAD,IAAY,CAACA,QAAQuC,GAArB,GAA2BwC,aAAavD,WAAxC,GAAsDwD,aAAaxD,WAA3F,EAAyGuC,WAAzG,CAAd;CACA;;ADziBD,IAAMzD,UAA2B;YACvB,MADuB;gBAGnB,IAHmB;WAKxB,eAAUS,UAAV,EAAoCf,OAApC,EAAT;;YAEM,CAACe,WAAW8D,IAAhB,EAAsB;uBACV5E,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,6BAAvC;;eAGMc,UAAP;KAX+B;eAcpB,mBAAUA,UAAV,EAAoCf,OAApC,EAAb;;YAEMe,WAAW6D,IAAX,MAAqB1B,OAAOnC,WAAWxB,MAAlB,EAA0BQ,WAA1B,OAA4C,OAA5C,GAAsD,EAAtD,GAA2D,GAAhF,KAAwFgB,WAAW6D,IAAX,KAAoB,EAAhH,EAAoH;uBACxGA,IAAX,GAAkBvE,SAAlB;;;YAIG,CAACU,WAAWP,IAAhB,EAAsB;uBACVA,IAAX,GAAkB,GAAlB;;;;;eAOMO,UAAP;;CA7BF,CAiCA;;ADhCA,IAAMT,YAA2B;YACvB,OADuB;gBAEnBX,QAAKgF,UAFc;WAGxBhF,QAAKkB,KAHmB;eAIpBlB,QAAKgB;CAJlB,CAOA;;ADMA,IAAMoB,IAAkB,EAAxB;AACA,IAAM2C,QAAQ,IAAd;;AAGA,IAAMR,eAAe,4BAA4BQ,QAAQ,2EAAR,GAAsF,EAAlH,IAAwH,GAA7I;AACA,IAAMD,WAAW,aAAjB;AACA,IAAMH,eAAeE,OAAOA,OAAO,YAAYC,QAAZ,GAAuB,GAAvB,GAA6BA,QAA7B,GAAwCA,QAAxC,GAAmD,GAAnD,GAAyDA,QAAzD,GAAoEA,QAA3E,IAAuF,GAAvF,GAA6FD,OAAO,gBAAgBC,QAAhB,GAA2B,GAA3B,GAAiCA,QAAjC,GAA4CA,QAAnD,CAA7F,GAA4J,GAA5J,GAAkKD,OAAO,MAAMC,QAAN,GAAiBA,QAAxB,CAAzK,CAArB;;;;;;;;;;;;AAaA,IAAML,UAAU,uDAAhB;AACA,IAAMG,UAAU,4DAAhB;AACA,IAAMF,UAAUJ,MAAMM,OAAN,EAAe,YAAf,CAAhB;AACA,AACA,AACA,AACA,AAEA,AAEA,IAAMJ,gBAAgB,qCAAtB;AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AAEA,IAAMN,aAAa,IAAIG,MAAJ,CAAWE,YAAX,EAAyB,GAAzB,CAAnB;AACA,IAAM1C,cAAc,IAAIwC,MAAJ,CAAWM,YAAX,EAAyB,GAAzB,CAApB;AACA,IAAMtB,iBAAiB,IAAIgB,MAAJ,CAAWC,MAAM,KAAN,EAAaG,OAAb,EAAsB,OAAtB,EAA+B,OAA/B,EAAwCC,OAAxC,CAAX,EAA6D,GAA7D,CAAvB;AACA,AACA,IAAM1C,aAAa,IAAIqC,MAAJ,CAAWC,MAAM,KAAN,EAAaC,YAAb,EAA2BC,aAA3B,CAAX,EAAsD,GAAtD,CAAnB;AACA,IAAMrC,cAAcH,UAApB;AACA,AACA,AAEA,SAAAF,gBAAA,CAA0BqC,GAA1B,EAAA;QACOF,SAASG,YAAYD,GAAZ,CAAf;WACQ,CAACF,OAAOzD,KAAP,CAAa0D,UAAb,CAAD,GAA4BC,GAA5B,GAAkCF,MAA1C;;AAGD,IAAMtD,YAA8C;YAC1C,QAD0C;WAG3C,kBAAUS,UAAV,EAAoCf,OAApC,EAAT;YACQgC,mBAAmBjB,UAAzB;YACMoB,KAAKH,iBAAiBG,EAAjB,GAAuBH,iBAAiBxB,IAAjB,GAAwBwB,iBAAiBxB,IAAjB,CAAsB+C,KAAtB,CAA4B,GAA5B,CAAxB,GAA2D,EAA7F;yBACiB/C,IAAjB,GAAwBH,SAAxB;YAEI2B,iBAAiBf,KAArB,EAA4B;gBACvBuC,iBAAiB,KAArB;gBACM3B,UAAwB,EAA9B;gBACM8B,UAAU3B,iBAAiBf,KAAjB,CAAuBsC,KAAvB,CAA6B,GAA7B,CAAhB;iBAEK,IAAInB,IAAI,CAAR,EAAWe,KAAKQ,QAAQvC,MAA7B,EAAqCgB,IAAIe,EAAzC,EAA6C,EAAEf,CAA/C,EAAkD;oBAC3CqB,SAASE,QAAQvB,CAAR,EAAWmB,KAAX,CAAiB,GAAjB,CAAf;wBAEQE,OAAO,CAAP,CAAR;yBACM,IAAL;4BACOC,UAAUD,OAAO,CAAP,EAAUF,KAAV,CAAgB,GAAhB,CAAhB;6BACK,IAAInB,KAAI,CAAR,EAAWe,MAAKO,QAAQtC,MAA7B,EAAqCgB,KAAIe,GAAzC,EAA6C,EAAEf,EAA/C,EAAkD;+BAC9Cf,IAAH,CAAQqC,QAAQtB,EAAR,CAAR;;;yBAGG,SAAL;yCACkBF,OAAjB,GAA2BS,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAA3B;;yBAEI,MAAL;yCACkBiC,IAAjB,GAAwBU,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAAxB;;;yCAGiB,IAAjB;gCACQ2C,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAAR,IAAiD2C,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAAjD;;;;gBAKCwD,cAAJ,EAAoBxB,iBAAiBH,OAAjB,GAA2BA,OAA3B;;yBAGJZ,KAAjB,GAAyBZ,SAAzB;aAEK,IAAI+B,MAAI,CAAR,EAAWe,OAAKhB,GAAGf,MAAxB,EAAgCgB,MAAIe,IAApC,EAAwC,EAAEf,GAA1C,EAA6C;gBACtCiB,OAAOlB,GAAGC,GAAH,EAAMmB,KAAN,CAAY,GAAZ,CAAb;iBAEK,CAAL,IAAUZ,kBAAkBU,KAAK,CAAL,CAAlB,CAAV;gBAEI,CAACrD,QAAQsD,cAAb,EAA6B;;oBAExB;yBACE,CAAL,IAAUb,SAASC,OAAT,CAAiBC,kBAAkBU,KAAK,CAAL,CAAlB,EAA2BrD,OAA3B,EAAoCD,WAApC,EAAjB,CAAV;iBADD,CAEE,OAAOyC,CAAP,EAAU;qCACMvC,KAAjB,GAAyB+B,iBAAiB/B,KAAjB,IAA0B,6EAA6EuC,CAAhI;;aALF,MAOO;qBACD,CAAL,IAAUG,kBAAkBU,KAAK,CAAL,CAAlB,EAA2BrD,OAA3B,EAAoCD,WAApC,EAAV;;eAGEqC,GAAH,IAAQiB,KAAKlC,IAAL,CAAU,GAAV,CAAR;;eAGMa,gBAAP;KA5DkD;eA+DvC,sBAAUA,gBAAV,EAA6ChC,OAA7C,EAAb;YACQe,aAAaiB,gBAAnB;YACMG,KAAKiB,QAAQpB,iBAAiBG,EAAzB,CAAX;YACIA,EAAJ,EAAQ;iBACF,IAAIC,IAAI,CAAR,EAAWe,KAAKhB,GAAGf,MAAxB,EAAgCgB,IAAIe,EAApC,EAAwC,EAAEf,CAA1C,EAA6C;oBACtCS,SAASK,OAAOf,GAAGC,CAAH,CAAP,CAAf;oBACMW,QAAQF,OAAOI,WAAP,CAAmB,GAAnB,CAAd;oBACMZ,YAAaQ,OAAOC,KAAP,CAAa,CAAb,EAAgBC,KAAhB,CAAD,CAAyBxB,OAAzB,CAAiCC,WAAjC,EAA8CC,gBAA9C,EAAgEF,OAAhE,CAAwEC,WAAxE,EAAqFE,WAArF,EAAkGH,OAAlG,CAA0GyB,cAA1G,EAA0HpB,UAA1H,CAAlB;oBACIU,SAASO,OAAOC,KAAP,CAAaC,QAAQ,CAArB,CAAb;;oBAGI;6BACO,CAAC/C,QAAQuC,GAAT,GAAeE,SAASC,OAAT,CAAiBC,kBAAkBL,MAAlB,EAA0BtC,OAA1B,EAAmCD,WAAnC,EAAjB,CAAf,GAAoF0C,SAASG,SAAT,CAAmBN,MAAnB,CAA9F;iBADD,CAEE,OAAOE,CAAP,EAAU;+BACAvC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,0DAA0D,CAACD,QAAQuC,GAAT,GAAe,OAAf,GAAyB,SAAnF,IAAgG,iBAAhG,GAAoHC,CAA3J;;mBAGEJ,CAAH,IAAQC,YAAY,GAAZ,GAAkBC,MAA1B;;uBAGU9B,IAAX,GAAkB2B,GAAGhB,IAAH,CAAQ,GAAR,CAAlB;;YAGKU,UAAUG,iBAAiBH,OAAjB,GAA2BG,iBAAiBH,OAAjB,IAA4B,EAAvE;YAEIG,iBAAiBE,OAArB,EAA8BL,QAAQ,SAAR,IAAqBG,iBAAiBE,OAAtC;YAC1BF,iBAAiBC,IAArB,EAA2BJ,QAAQ,MAAR,IAAkBG,iBAAiBC,IAAnC;YAErBf,SAAS,EAAf;aACK,IAAMI,IAAX,IAAmBO,OAAnB,EAA4B;gBACvBA,QAAQP,IAAR,MAAkBS,EAAET,IAAF,CAAtB,EAA+B;uBACvBD,IAAP,CACCC,KAAKC,OAAL,CAAaC,WAAb,EAA0BC,gBAA1B,EAA4CF,OAA5C,CAAoDC,WAApD,EAAiEE,WAAjE,EAA8EH,OAA9E,CAAsFI,UAAtF,EAAkGC,UAAlG,IACA,GADA,GAEAC,QAAQP,IAAR,EAAcC,OAAd,CAAsBC,WAAtB,EAAmCC,gBAAnC,EAAqDF,OAArD,CAA6DC,WAA7D,EAA0EE,WAA1E,EAAuFH,OAAvF,CAA+FO,WAA/F,EAA4GF,UAA5G,CAHD;;;YAOEV,OAAOE,MAAX,EAAmB;uBACPH,KAAX,GAAmBC,OAAOC,IAAP,CAAY,GAAZ,CAAnB;;eAGMJ,UAAP;;CAzGF,CA6GA;;ADnKA,IAAMC,YAAY,iBAAlB;AACA,AAEA;AACA,IAAMV,YAAqD;YACjD,KADiD;WAGlD,kBAAUS,UAAV,EAAoCf,OAApC,EAAT;YACQc,UAAUC,WAAWP,IAAX,IAAmBO,WAAWP,IAAX,CAAgBL,KAAhB,CAAsBa,SAAtB,CAAnC;YACIpB,gBAAgBmB,UAApB;YAEID,OAAJ,EAAa;gBACNvB,SAASS,QAAQT,MAAR,IAAkBK,cAAcL,MAAhC,IAA0C,KAAzD;gBACMkB,MAAMK,QAAQ,CAAR,EAAWf,WAAX,EAAZ;gBACMF,MAAMiB,QAAQ,CAAR,CAAZ;gBACMF,YAAerB,MAAf,UAAyBS,QAAQS,GAAR,IAAeA,GAAxC,CAAN;gBACMC,gBAAgBrB,QAAQuB,SAAR,CAAtB;0BAEcH,GAAd,GAAoBA,GAApB;0BACcZ,GAAd,GAAoBA,GAApB;0BACcW,IAAd,GAAqBH,SAArB;gBAEIK,aAAJ,EAAmB;gCACFA,cAAcG,KAAd,CAAoBjB,aAApB,EAAmCI,OAAnC,CAAhB;;SAZF,MAcO;0BACQC,KAAd,GAAsBL,cAAcK,KAAd,IAAuB,wBAA7C;;eAGML,aAAP;KAzByD;eA4B9C,sBAAUA,aAAV,EAAuCI,OAAvC,EAAb;YACQT,SAASS,QAAQT,MAAR,IAAkBK,cAAcL,MAAhC,IAA0C,KAAzD;YACMkB,MAAMb,cAAca,GAA1B;YACMG,YAAerB,MAAf,UAAyBS,QAAQS,GAAR,IAAeA,GAAxC,CAAN;YACMC,gBAAgBrB,QAAQuB,SAAR,CAAtB;YAEIF,aAAJ,EAAmB;4BACFA,cAAcC,SAAd,CAAwBf,aAAxB,EAAuCI,OAAvC,CAAhB;;YAGKO,gBAAgBX,aAAtB;YACMC,MAAMD,cAAcC,GAA1B;sBACcW,IAAd,IAAwBC,OAAOT,QAAQS,GAAvC,UAA8CZ,GAA9C;eAEOU,aAAP;;CA1CF,CA8CA;;AD5DA,IAAMH,OAAO,0DAAb;AACA,AAEA;AACA,IAAME,YAAsE;YAClE,UADkE;WAGnE,eAAUV,aAAV,EAAuCI,OAAvC,EAAT;YACQF,iBAAiBF,aAAvB;uBACeN,IAAf,GAAsBQ,eAAeD,GAArC;uBACeA,GAAf,GAAqBQ,SAArB;YAEI,CAACL,QAAQE,QAAT,KAAsB,CAACJ,eAAeR,IAAhB,IAAwB,CAACQ,eAAeR,IAAf,CAAoBa,KAApB,CAA0BC,IAA1B,CAA/C,CAAJ,EAAqF;2BACrEH,KAAf,GAAuBH,eAAeG,KAAf,IAAwB,oBAA/C;;eAGMH,cAAP;KAZ0E;eAe/D,mBAAUA,cAAV,EAAyCE,OAAzC,EAAb;YACQJ,gBAAgBE,cAAtB;;sBAEcD,GAAd,GAAoB,CAACC,eAAeR,IAAf,IAAuB,EAAxB,EAA4BS,WAA5B,EAApB;eACOH,aAAP;;CAnBF,CAuBA;;ADhCAP,QAAQM,QAAKJ,MAAb,IAAuBI,OAAvB;AAEA,AACAN,QAAQK,UAAMH,MAAd,IAAwBG,SAAxB;AAEA,AACAL,QAAQI,UAAOF,MAAf,IAAyBE,SAAzB;AAEA,AACAJ,QAAQG,UAAID,MAAZ,IAAsBC,SAAtB;AAEA,AACAH,QAAQC,UAAKC,MAAb,IAAuBD,SAAvB,CAEA;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.min.d.ts b/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.min.d.ts deleted file mode 100644 index 320f5341..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.min.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -export interface URIComponents { - scheme?: string; - userinfo?: string; - host?: string; - port?: number | string; - path?: string; - query?: string; - fragment?: string; - reference?: string; - error?: string; -} -export interface URIOptions { - scheme?: string; - reference?: string; - tolerant?: boolean; - absolutePath?: boolean; - iri?: boolean; - unicodeSupport?: boolean; - domainHost?: boolean; -} -export interface URISchemeHandler { - scheme: string; - parse(components: ParentComponents, options: Options): Components; - serialize(components: Components, options: Options): ParentComponents; - unicodeSupport?: boolean; - domainHost?: boolean; - absolutePath?: boolean; -} -export interface URIRegExps { - NOT_SCHEME: RegExp; - NOT_USERINFO: RegExp; - NOT_HOST: RegExp; - NOT_PATH: RegExp; - NOT_PATH_NOSCHEME: RegExp; - NOT_QUERY: RegExp; - NOT_FRAGMENT: RegExp; - ESCAPE: RegExp; - UNRESERVED: RegExp; - OTHER_CHARS: RegExp; - PCT_ENCODED: RegExp; - IPV4ADDRESS: RegExp; - IPV6ADDRESS: RegExp; -} -export declare const SCHEMES: { - [scheme: string]: URISchemeHandler; -}; -export declare function pctEncChar(chr: string): string; -export declare function pctDecChars(str: string): string; -export declare function parse(uriString: string, options?: URIOptions): URIComponents; -export declare function removeDotSegments(input: string): string; -export declare function serialize(components: URIComponents, options?: URIOptions): string; -export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; -export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; -export declare function normalize(uri: string, options?: URIOptions): string; -export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; -export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; -export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; -export declare function escapeComponent(str: string, options?: URIOptions): string; -export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.min.js b/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.min.js deleted file mode 100644 index 1b791ef7..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/es5/uri.all.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/** @license URI.js v4.2.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ -!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(e.URI=e.URI||{})}(this,function(e){"use strict";function r(){for(var e=arguments.length,r=Array(e),n=0;n1){r[0]=r[0].slice(0,-1);for(var t=r.length-1,o=1;o1&&(t=n[0]+"@",e=n[1]),e=e.replace(j,"."),t+f(e.split("."),r).join(".")}function p(e){for(var r=[],n=0,t=e.length;n=55296&&o<=56319&&n>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function d(e){for(var r="",n=0,t=e.length;n=194&&o<224){if(t-n>=6){var a=parseInt(e.substr(n+4,2),16);r+=String.fromCharCode((31&o)<<6|63&a)}else r+=e.substr(n,6);n+=6}else if(o>=224){if(t-n>=9){var i=parseInt(e.substr(n+4,2),16),u=parseInt(e.substr(n+7,2),16);r+=String.fromCharCode((15&o)<<12|(63&i)<<6|63&u)}else r+=e.substr(n,9);n+=9}else r+=e.substr(n,3),n+=3}return r}function l(e,r){function n(e){var n=d(e);return n.match(r.UNRESERVED)?n:e}return e.scheme&&(e.scheme=String(e.scheme).replace(r.PCT_ENCODED,n).toLowerCase().replace(r.NOT_SCHEME,"")),e.userinfo!==undefined&&(e.userinfo=String(e.userinfo).replace(r.PCT_ENCODED,n).replace(r.NOT_USERINFO,h).replace(r.PCT_ENCODED,o)),e.host!==undefined&&(e.host=String(e.host).replace(r.PCT_ENCODED,n).toLowerCase().replace(r.NOT_HOST,h).replace(r.PCT_ENCODED,o)),e.path!==undefined&&(e.path=String(e.path).replace(r.PCT_ENCODED,n).replace(e.scheme?r.NOT_PATH:r.NOT_PATH_NOSCHEME,h).replace(r.PCT_ENCODED,o)),e.query!==undefined&&(e.query=String(e.query).replace(r.PCT_ENCODED,n).replace(r.NOT_QUERY,h).replace(r.PCT_ENCODED,o)),e.fragment!==undefined&&(e.fragment=String(e.fragment).replace(r.PCT_ENCODED,n).replace(r.NOT_FRAGMENT,h).replace(r.PCT_ENCODED,o)),e}function g(e){return e.replace(/^0*(.*)/,"$1")||"0"}function v(e,r){var n=e.match(r.IPV4ADDRESS)||[],t=R(n,2),o=t[1];return o?o.split(".").map(g).join("."):e}function m(e,r){var n=e.match(r.IPV6ADDRESS)||[],t=R(n,3),o=t[1],a=t[2];if(o){for(var i=o.toLowerCase().split("::").reverse(),u=R(i,2),s=u[0],f=u[1],c=f?f.split(":").map(g):[],p=s.split(":").map(g),h=r.IPV4ADDRESS.test(p[p.length-1]),d=h?7:8,l=p.length-d,m=Array(d),E=0;E1){var A=m.slice(0,y.index),D=m.slice(y.index+y.length);S=A.join(":")+"::"+D.join(":")}else S=m.join(":");return a&&(S+="%"+a),S}return e}function E(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},n={},t=!1!==r.iri?N:F;"suffix"===r.reference&&(e=(r.scheme?r.scheme+":":"")+"//"+e);var o=e.match(J);if(o){K?(n.scheme=o[1],n.userinfo=o[3],n.host=o[4],n.port=parseInt(o[5],10),n.path=o[6]||"",n.query=o[7],n.fragment=o[8],isNaN(n.port)&&(n.port=o[5])):(n.scheme=o[1]||undefined,n.userinfo=-1!==e.indexOf("@")?o[3]:undefined,n.host=-1!==e.indexOf("//")?o[4]:undefined,n.port=parseInt(o[5],10),n.path=o[6]||"",n.query=-1!==e.indexOf("?")?o[7]:undefined,n.fragment=-1!==e.indexOf("#")?o[8]:undefined,isNaN(n.port)&&(n.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?o[4]:undefined)),n.host&&(n.host=m(v(n.host,t),t)),n.scheme!==undefined||n.userinfo!==undefined||n.host!==undefined||n.port!==undefined||n.path||n.query!==undefined?n.scheme===undefined?n.reference="relative":n.fragment===undefined?n.reference="absolute":n.reference="uri":n.reference="same-document",r.reference&&"suffix"!==r.reference&&r.reference!==n.reference&&(n.error=n.error||"URI is not a "+r.reference+" reference.");var a=B[(r.scheme||n.scheme||"").toLowerCase()];if(r.unicodeSupport||a&&a.unicodeSupport)l(n,t);else{if(n.host&&(r.domainHost||a&&a.domainHost))try{n.host=Y.toASCII(n.host.replace(t.PCT_ENCODED,d).toLowerCase())}catch(i){n.error=n.error||"Host's domain name can not be converted to ASCII via punycode: "+i}l(n,F)}a&&a.parse&&a.parse(n,r)}else n.error=n.error||"URI can not be parsed.";return n}function C(e,r){var n=!1!==r.iri?N:F,t=[];return e.userinfo!==undefined&&(t.push(e.userinfo),t.push("@")),e.host!==undefined&&t.push(m(v(String(e.host),n),n).replace(n.IPV6ADDRESS,function(e,r,n){return"["+r+(n?"%25"+n:"")+"]"})),"number"==typeof e.port&&(t.push(":"),t.push(e.port.toString(10))),t.length?t.join(""):undefined}function y(e){for(var r=[];e.length;)if(e.match(W))e=e.replace(W,"");else if(e.match(X))e=e.replace(X,"/");else if(e.match(ee))e=e.replace(ee,"/"),r.pop();else if("."===e||".."===e)e="";else{var n=e.match(re);if(!n)throw new Error("Unexpected dot segment condition");var t=n[0];e=e.slice(t.length),r.push(t)}return r.join("")}function S(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},n=r.iri?N:F,t=[],o=B[(r.scheme||e.scheme||"").toLowerCase()];if(o&&o.serialize&&o.serialize(e,r),e.host)if(n.IPV6ADDRESS.test(e.host));else if(r.domainHost||o&&o.domainHost)try{e.host=r.iri?Y.toUnicode(e.host):Y.toASCII(e.host.replace(n.PCT_ENCODED,d).toLowerCase())}catch(u){e.error=e.error||"Host's domain name can not be converted to "+(r.iri?"Unicode":"ASCII")+" via punycode: "+u}l(e,n),"suffix"!==r.reference&&e.scheme&&(t.push(e.scheme),t.push(":"));var a=C(e,r);if(a!==undefined&&("suffix"!==r.reference&&t.push("//"),t.push(a),e.path&&"/"!==e.path.charAt(0)&&t.push("/")),e.path!==undefined){var i=e.path;r.absolutePath||o&&o.absolutePath||(i=y(i)),a===undefined&&(i=i.replace(/^\/\//,"/%2F")),t.push(i)}return e.query!==undefined&&(t.push("?"),t.push(e.query)),e.fragment!==undefined&&(t.push("#"),t.push(e.fragment)),t.join("")}function A(e,r){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{},t=arguments[3],o={};return t||(e=E(S(e,n),n),r=E(S(r,n),n)),n=n||{},!n.tolerant&&r.scheme?(o.scheme=r.scheme,o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=y(r.path||""),o.query=r.query):(r.userinfo!==undefined||r.host!==undefined||r.port!==undefined?(o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=y(r.path||""),o.query=r.query):(r.path?("/"===r.path.charAt(0)?o.path=y(r.path):(e.userinfo===undefined&&e.host===undefined&&e.port===undefined||e.path?e.path?o.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+r.path:o.path=r.path:o.path="/"+r.path,o.path=y(o.path)),o.query=r.query):(o.path=e.path,r.query!==undefined?o.query=r.query:o.query=e.query),o.userinfo=e.userinfo,o.host=e.host,o.port=e.port),o.scheme=e.scheme),o.fragment=r.fragment,o}function D(e,r,n){var t=i({scheme:"null"},n);return S(A(E(e,t),E(r,t),t,!0),t)}function w(e,r){return"string"==typeof e?e=S(E(e,r),r):"object"===t(e)&&(e=E(S(e,r),r)),e}function b(e,r,n){return"string"==typeof e?e=S(E(e,n),n):"object"===t(e)&&(e=S(e,n)),"string"==typeof r?r=S(E(r,n),n):"object"===t(r)&&(r=S(r,n)),e===r}function x(e,r){return e&&e.toString().replace(r&&r.iri?N.ESCAPE:F.ESCAPE,h)}function O(e,r){return e&&e.toString().replace(r&&r.iri?N.PCT_ENCODED:F.PCT_ENCODED,d)}function I(e){var r=d(e);return r.match(fe)?r:e}var F=u(!1),N=u(!0),R=function(){function e(e,r){var n=[],t=!0,o=!1,a=undefined;try{for(var i,u=e[Symbol.iterator]();!(t=(i=u.next()).done)&&(n.push(i.value),!r||n.length!==r);t=!0);}catch(s){o=!0,a=s}finally{try{!t&&u["return"]&&u["return"]()}finally{if(o)throw a}}return n}return function(r,n){if(Array.isArray(r))return r;if(Symbol.iterator in Object(r))return e(r,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),T=function(e){if(Array.isArray(e)){for(var r=0,n=Array(e.length);r= 0x80 (not a basic code point)","invalid-input":"Invalid input"},H=Math.floor,z=String.fromCharCode,L=function(e){return String.fromCodePoint.apply(String,T(e))},$=function(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:36},M=function(e,r){return e+22+75*(e<26)-((0!=r)<<5)},V=function(e,r,n){var t=0;for(e=n?H(e/700):e>>1,e+=H(e/r);e>455;t+=36)e=H(e/35);return H(t+36*e/(e+38))},k=function(e){var r=[],n=e.length,t=0,o=128,a=72,i=e.lastIndexOf("-");i<0&&(i=0);for(var u=0;u=128&&s("not-basic"),r.push(e.charCodeAt(u));for(var f=i>0?i+1:0;f=n&&s("invalid-input");var d=$(e.charCodeAt(f++));(d>=36||d>H((_-t)/p))&&s("overflow"),t+=d*p;var l=h<=a?1:h>=a+26?26:h-a;if(dH(_/g)&&s("overflow"),p*=g}var v=r.length+1;a=V(t-c,v,0==c),H(t/v)>_-o&&s("overflow"),o+=H(t/v),t%=v,r.splice(t++,0,o)}return String.fromCodePoint.apply(String,r)},Z=function(e){var r=[];e=p(e);var n=e.length,t=128,o=0,a=72,i=!0,u=!1,f=undefined;try{for(var c,h=e[Symbol.iterator]();!(i=(c=h.next()).done);i=!0){var d=c.value;d<128&&r.push(z(d))}}catch(j){u=!0,f=j}finally{try{!i&&h["return"]&&h["return"]()}finally{if(u)throw f}}var l=r.length,g=l;for(l&&r.push("-");g=t&&AH((_-o)/D)&&s("overflow"),o+=(v-t)*D,t=v;var w=!0,b=!1,x=undefined;try{for(var O,I=e[Symbol.iterator]();!(w=(O=I.next()).done);w=!0){var F=O.value;if(F_&&s("overflow"),F==t){for(var N=o,R=36;;R+=36){var T=R<=a?1:R>=a+26?26:R-a;if(NA-Z\\x5E-\\x7E]",'[\\"\\\\]'),fe=new RegExp(ae,"g"),ce=new RegExp(ue,"g"),pe=new RegExp(r("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',se),"g"),he=new RegExp(r("[^]",ae,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),de=he,le={scheme:"mailto",parse:function(e,r){var n=e,t=n.to=n.path?n.path.split(","):[];if(n.path=undefined,n.query){for(var o=!1,a={},i=n.query.split("&"),u=0,s=i.length;u):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(components.port.toString(10));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (components.port === (String(components.scheme).toLowerCase() !== \"https\" ? 80 : 443) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n"]} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/index.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/index.d.ts deleted file mode 100644 index be95efb2..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./uri"; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/index.js b/truebit-implementation/node_modules/uri-js/dist/esnext/index.js deleted file mode 100644 index de8868ff..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import { SCHEMES } from "./uri"; -import http from "./schemes/http"; -SCHEMES[http.scheme] = http; -import https from "./schemes/https"; -SCHEMES[https.scheme] = https; -import mailto from "./schemes/mailto"; -SCHEMES[mailto.scheme] = mailto; -import urn from "./schemes/urn"; -SCHEMES[urn.scheme] = urn; -import uuid from "./schemes/urn-uuid"; -SCHEMES[uuid.scheme] = uuid; -export * from "./uri"; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/index.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/index.js.map deleted file mode 100644 index e9e40087..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAE5B,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAE9B,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAEhC,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAE1B,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAE5B,cAAc,OAAO,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.d.ts deleted file mode 100644 index 6fc0f5db..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { URIRegExps } from "./uri"; -declare const _default: URIRegExps; -export default _default; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.js b/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.js deleted file mode 100644 index 86239cf3..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.js +++ /dev/null @@ -1,3 +0,0 @@ -import { buildExps } from "./regexps-uri"; -export default buildExps(true); -//# sourceMappingURL=regexps-iri.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.js.map deleted file mode 100644 index 2269c580..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-iri.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"regexps-iri.js","sourceRoot":"","sources":["../../src/regexps-iri.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,eAAe,SAAS,CAAC,IAAI,CAAC,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.d.ts deleted file mode 100644 index 10ec87bd..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { URIRegExps } from "./uri"; -export declare function buildExps(isIRI: boolean): URIRegExps; -declare const _default: URIRegExps; -export default _default; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.js b/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.js deleted file mode 100644 index 6e7e9a02..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.js +++ /dev/null @@ -1,42 +0,0 @@ -import { merge, subexp } from "./util"; -export function buildExps(isIRI) { - const ALPHA$$ = "[A-Za-z]", CR$ = "[\\x0D]", DIGIT$$ = "[0-9]", DQUOTE$$ = "[\\x22]", HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), //case-insensitive - LF$$ = "[\\x0A]", SP$$ = "[\\x20]", PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), //expanded - GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", //subset, excludes bidi control characters - IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", //subset - UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), //relaxed parsing rules - IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), H16$ = subexp(HEXDIG$$ + "{1,4}"), LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), // 6( h16 ":" ) ls32 - IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), // "::" 5( h16 ":" ) ls32 - IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), //[ h16 ] "::" 4( h16 ":" ) ls32 - IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), //[ *4( h16 ":" ) h16 ] "::" ls32 - IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), //[ *5( h16 ":" ) h16 ] "::" h16 - IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), //[ *6( h16 ":" ) h16 ] "::" - IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), //RFC 6874 - IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), //RFC 6874 - IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), //RFC 6874, with relaxed parsing rules - IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), //RFC 6874 - REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), PORT$ = subexp(DIGIT$$ + "*"), AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), SEGMENT$ = subexp(PCHAR$ + "*"), SEGMENT_NZ$ = subexp(PCHAR$ + "+"), SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), //simplified - PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified - PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified - PATH_EMPTY$ = "(?!" + PCHAR$ + ")", PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; - return { - NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), - NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), - NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), - ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), - UNRESERVED: new RegExp(UNRESERVED$$, "g"), - OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), - PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), - IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), - IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules - }; -} -export default buildExps(false); -//# sourceMappingURL=regexps-uri.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.js.map deleted file mode 100644 index cb028b80..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/regexps-uri.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"regexps-uri.js","sourceRoot":"","sources":["../../src/regexps-uri.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,oBAAoB,KAAa;IACtC,MACC,OAAO,GAAG,UAAU,EACpB,GAAG,GAAG,SAAS,EACf,OAAO,GAAG,OAAO,EACjB,QAAQ,GAAG,SAAS,EACpB,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,EAAG,kBAAkB;IAC1D,IAAI,GAAG,SAAS,EAChB,IAAI,GAAG,SAAS,EAChB,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAG,UAAU;IACvO,YAAY,GAAG,yBAAyB,EACxC,YAAY,GAAG,qCAAqC,EACpD,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,EAC9C,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,6EAA6E,CAAC,CAAC,CAAC,IAAI,EAAG,0CAA0C;IACrJ,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAG,QAAQ;IAC1D,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC,EACnE,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,GAAG,CAAC,EACxE,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EACjG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,EACnK,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,EAAG,uBAAuB;IAC3M,YAAY,GAAG,MAAM,CAAC,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,CAAC,EAChI,IAAI,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,EACjC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,EAChE,aAAa,GAAG,MAAM,CAA6D,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAkD,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAkC,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAU,IAAI,GAAG,KAAK,GAAY,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAkC,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAkC,IAAI,CAAE,EAAE,6CAA6C;IACvK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,CAAwC,EAAE,4BAA4B;IACtJ,YAAY,GAAG,MAAM,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACxK,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,EAAG,UAAU;IAC9E,UAAU,GAAG,MAAM,CAAC,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC,EAAG,UAAU;IAClE,kBAAkB,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,EAAG,sCAAsC;IACzI,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,EAClG,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,kBAAkB,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC,EAAG,UAAU;IACrH,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC,EACxF,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,EAC5F,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,EAC7B,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EACxF,MAAM,GAAG,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,EACnF,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,EAC/B,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,EAClC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EACtG,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,EACtD,cAAc,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,EAAG,YAAY;IACzF,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC,EAAG,YAAY;IACtE,cAAc,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,EAAG,YAAY;IACnE,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,GAAG,EAClC,KAAK,GAAG,MAAM,CAAC,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,CAAC,EACtH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,EAC3E,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,EACtD,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,CAAC,EACpI,IAAI,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,EAC5G,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,CAAC,EACxI,SAAS,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,EACnG,cAAc,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,EAC/C,aAAa,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,EAEnF,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,EAC7U,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,EAC/T,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,EACrS,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,EAC5D,cAAc,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAChH;IAED,OAAO;QACN,UAAU,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC;QAC3E,YAAY,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAC9E,QAAQ,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAChF,QAAQ,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAChF,iBAAiB,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QACtF,SAAS,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC;QACtG,YAAY,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC;QAC7F,MAAM,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAClE,UAAU,EAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC;QAC1C,WAAW,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC;QACxE,WAAW,EAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC;QAC3C,WAAW,EAAG,IAAI,MAAM,CAAC,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC;QACpD,WAAW,EAAG,IAAI,MAAM,CAAC,QAAQ,GAAG,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAE,sCAAsC;KACrL,CAAC;AACH,CAAC;AAED,eAAe,SAAS,CAAC,KAAK,CAAC,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.d.ts deleted file mode 100644 index 38999569..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { URISchemeHandler } from "../uri"; -declare const handler: URISchemeHandler; -export default handler; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.js b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.js deleted file mode 100644 index a2803698..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.js +++ /dev/null @@ -1,27 +0,0 @@ -const handler = { - scheme: "http", - domainHost: true, - parse: function (components, options) { - //report missing host - if (!components.host) { - components.error = components.error || "HTTP URIs must have a host."; - } - return components; - }, - serialize: function (components, options) { - //normalize the default port - if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { - components.port = undefined; - } - //normalize the empty path - if (!components.path) { - components.path = "/"; - } - //NOTE: We do not parse query strings for HTTP URIs - //as WWW Form Url Encoded query strings are part of the HTML4+ spec, - //and not the HTTP spec. - return components; - } -}; -export default handler; -//# sourceMappingURL=http.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.js.map deleted file mode 100644 index 83e2ad54..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/http.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/schemes/http.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,MAAM;IAEf,UAAU,EAAG,IAAI;IAEjB,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,qBAAqB;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,6BAA6B,CAAC;SACrE;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,SAAS,EAAG,UAAU,UAAwB,EAAE,OAAkB;QACjE,4BAA4B;QAC5B,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,EAAE,EAAE;YACnH,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC;SAC5B;QAED,0BAA0B;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;SACtB;QAED,mDAAmD;QACnD,oEAAoE;QACpE,wBAAwB;QAExB,OAAO,UAAU,CAAC;IACnB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.d.ts deleted file mode 100644 index 38999569..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { URISchemeHandler } from "../uri"; -declare const handler: URISchemeHandler; -export default handler; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.js b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.js deleted file mode 100644 index fc3c71a6..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.js +++ /dev/null @@ -1,9 +0,0 @@ -import http from "./http"; -const handler = { - scheme: "https", - domainHost: http.domainHost, - parse: http.parse, - serialize: http.serialize -}; -export default handler; -//# sourceMappingURL=https.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.js.map deleted file mode 100644 index 385b8efe..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/https.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"https.js","sourceRoot":"","sources":["../../../src/schemes/https.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,OAAO;IAChB,UAAU,EAAG,IAAI,CAAC,UAAU;IAC5B,KAAK,EAAG,IAAI,CAAC,KAAK;IAClB,SAAS,EAAG,IAAI,CAAC,SAAS;CAC1B,CAAA;AAED,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts deleted file mode 100644 index b0db4bfc..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { URISchemeHandler, URIComponents } from "../uri"; -export interface MailtoHeaders { - [hfname: string]: string; -} -export interface MailtoComponents extends URIComponents { - to: Array; - headers?: MailtoHeaders; - subject?: string; - body?: string; -} -declare const handler: URISchemeHandler; -export default handler; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.js b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.js deleted file mode 100644 index 2553713c..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.js +++ /dev/null @@ -1,148 +0,0 @@ -import { pctEncChar, pctDecChars, unescapeComponent } from "../uri"; -import punycode from "punycode"; -import { merge, subexp, toUpperCase, toArray } from "../util"; -const O = {}; -const isIRI = true; -//RFC 3986 -const UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; -const HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive -const PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded -//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = -//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) -//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext -//const VCHAR$$ = "[\\x21-\\x7E]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext -//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); -//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); -//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); -const ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; -const QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; -const VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); -const DOT_ATOM_TEXT$ = subexp(ATEXT$$ + "+" + subexp("\\." + ATEXT$$ + "+") + "*"); -const QUOTED_PAIR$ = subexp("\\\\" + VCHAR$$); -const QCONTENT$ = subexp(QTEXT$$ + "|" + QUOTED_PAIR$); -const QUOTED_STRING$ = subexp('\\"' + QCONTENT$ + "*" + '\\"'); -//RFC 6068 -const DTEXT_NO_OBS$$ = "[\\x21-\\x5A\\x5E-\\x7E]"; //%d33-90 / %d94-126 -const SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; -const QCHAR$ = subexp(UNRESERVED$$ + "|" + PCT_ENCODED$ + "|" + SOME_DELIMS$$); -const DOMAIN$ = subexp(DOT_ATOM_TEXT$ + "|" + "\\[" + DTEXT_NO_OBS$$ + "*" + "\\]"); -const LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + "|" + QUOTED_STRING$); -const ADDR_SPEC$ = subexp(LOCAL_PART$ + "\\@" + DOMAIN$); -const TO$ = subexp(ADDR_SPEC$ + subexp("\\," + ADDR_SPEC$) + "*"); -const HFNAME$ = subexp(QCHAR$ + "*"); -const HFVALUE$ = HFNAME$; -const HFIELD$ = subexp(HFNAME$ + "\\=" + HFVALUE$); -const HFIELDS2$ = subexp(HFIELD$ + subexp("\\&" + HFIELD$) + "*"); -const HFIELDS$ = subexp("\\?" + HFIELDS2$); -const MAILTO_URI = new RegExp("^mailto\\:" + TO$ + "?" + HFIELDS$ + "?$"); -const UNRESERVED = new RegExp(UNRESERVED$$, "g"); -const PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); -const NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); -const NOT_DOMAIN = new RegExp(merge("[^]", ATEXT$$, "[\\.]", "[\\[]", DTEXT_NO_OBS$$, "[\\]]"), "g"); -const NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); -const NOT_HFVALUE = NOT_HFNAME; -const TO = new RegExp("^" + TO$ + "$"); -const HFIELDS = new RegExp("^" + HFIELDS2$ + "$"); -function decodeUnreserved(str) { - const decStr = pctDecChars(str); - return (!decStr.match(UNRESERVED) ? str : decStr); -} -const handler = { - scheme: "mailto", - parse: function (components, options) { - const mailtoComponents = components; - const to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(",") : []); - mailtoComponents.path = undefined; - if (mailtoComponents.query) { - let unknownHeaders = false; - const headers = {}; - const hfields = mailtoComponents.query.split("&"); - for (let x = 0, xl = hfields.length; x < xl; ++x) { - const hfield = hfields[x].split("="); - switch (hfield[0]) { - case "to": - const toAddrs = hfield[1].split(","); - for (let x = 0, xl = toAddrs.length; x < xl; ++x) { - to.push(toAddrs[x]); - } - break; - case "subject": - mailtoComponents.subject = unescapeComponent(hfield[1], options); - break; - case "body": - mailtoComponents.body = unescapeComponent(hfield[1], options); - break; - default: - unknownHeaders = true; - headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); - break; - } - } - if (unknownHeaders) - mailtoComponents.headers = headers; - } - mailtoComponents.query = undefined; - for (let x = 0, xl = to.length; x < xl; ++x) { - const addr = to[x].split("@"); - addr[0] = unescapeComponent(addr[0]); - if (!options.unicodeSupport) { - //convert Unicode IDN -> ASCII IDN - try { - addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); - } - catch (e) { - mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; - } - } - else { - addr[1] = unescapeComponent(addr[1], options).toLowerCase(); - } - to[x] = addr.join("@"); - } - return mailtoComponents; - }, - serialize: function (mailtoComponents, options) { - const components = mailtoComponents; - const to = toArray(mailtoComponents.to); - if (to) { - for (let x = 0, xl = to.length; x < xl; ++x) { - const toAddr = String(to[x]); - const atIdx = toAddr.lastIndexOf("@"); - const localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); - let domain = toAddr.slice(atIdx + 1); - //convert IDN via punycode - try { - domain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain)); - } - catch (e) { - components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - to[x] = localPart + "@" + domain; - } - components.path = to.join(","); - } - const headers = mailtoComponents.headers = mailtoComponents.headers || {}; - if (mailtoComponents.subject) - headers["subject"] = mailtoComponents.subject; - if (mailtoComponents.body) - headers["body"] = mailtoComponents.body; - const fields = []; - for (const name in headers) { - if (headers[name] !== O[name]) { - fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + - "=" + - headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); - } - } - if (fields.length) { - components.query = fields.join("&"); - } - return components; - } -}; -export default handler; -//# sourceMappingURL=mailto.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.js.map deleted file mode 100644 index 82dba9a1..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/mailto.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mailto.js","sourceRoot":"","sources":["../../../src/schemes/mailto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACpE,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAa9D,MAAM,CAAC,GAAiB,EAAE,CAAC;AAC3B,MAAM,KAAK,GAAG,IAAI,CAAC;AAEnB,UAAU;AACV,MAAM,YAAY,GAAG,wBAAwB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,2EAA2E,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACjJ,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAE,kBAAkB;AACnD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAE,UAAU;AAE7O,qEAAqE;AACrE,yFAAyF;AACzF,+BAA+B;AAC/B,uGAAuG;AACvG,+GAA+G;AAC/G,kCAAkC;AAClC,+BAA+B;AAC/B,wGAAwG;AACxG,8EAA8E;AAC9E,8FAA8F;AAC9F,mGAAmG;AACnG,MAAM,OAAO,GAAG,uDAAuD,CAAC;AACxE,MAAM,OAAO,GAAG,4DAA4D,CAAC;AAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACnF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;AAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC;AACvD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AAE/D,UAAU;AACV,MAAM,cAAc,GAAG,0BAA0B,CAAC,CAAE,oBAAoB;AACxE,MAAM,aAAa,GAAG,qCAAqC,CAAC;AAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,aAAa,CAAC,CAAC;AAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG,KAAK,GAAG,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AACpF,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG,cAAc,CAAC,CAAC;AAClE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;AACzD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;AAClE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACrC,MAAM,QAAQ,GAAG,OAAO,CAAC;AACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;AACnD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;AAC3C,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE1E,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAClD,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACzF,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACrG,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9E,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;AAElD,0BAA0B,GAAU;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,OAAO,GAAuC;IACnD,MAAM,EAAG,QAAQ;IAEjB,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,MAAM,gBAAgB,GAAG,UAA8B,CAAC;QACxD,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjG,gBAAgB,CAAC,IAAI,GAAG,SAAS,CAAC;QAElC,IAAI,gBAAgB,CAAC,KAAK,EAAE;YAC3B,IAAI,cAAc,GAAG,KAAK,CAAA;YAC1B,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;gBACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAErC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE;oBAClB,KAAK,IAAI;wBACR,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;4BACjD,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;yBACpB;wBACD,MAAM;oBACP,KAAK,SAAS;wBACb,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBACjE,MAAM;oBACP,KAAK,MAAM;wBACV,gBAAgB,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBAC9D,MAAM;oBACP;wBACC,cAAc,GAAG,IAAI,CAAC;wBACtB,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBACvF,MAAM;iBACP;aACD;YAED,IAAI,cAAc;gBAAE,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;SACvD;QAED,gBAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;YAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAErC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC5B,kCAAkC;gBAClC,IAAI;oBACH,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;iBAC9E;gBAAC,OAAO,CAAC,EAAE;oBACX,gBAAgB,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,IAAI,0EAA0E,GAAG,CAAC,CAAC;iBAClI;aACD;iBAAM;gBACN,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;aAC5D;YAED,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACvB;QAED,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAED,SAAS,EAAG,UAAU,gBAAiC,EAAE,OAAkB;QAC1E,MAAM,UAAU,GAAG,gBAAiC,CAAC;QACrD,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,EAAE;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;gBAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gBACxJ,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAErC,0BAA0B;gBAC1B,IAAI;oBACH,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC1H;gBAAC,OAAO,CAAC,EAAE;oBACX,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,sDAAsD,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;iBAC7J;gBAED,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;aACjC;YAED,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/B;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,IAAI,EAAE,CAAC;QAE1E,IAAI,gBAAgB,CAAC,OAAO;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC;QAC5E,IAAI,gBAAgB,CAAC,IAAI;YAAE,OAAO,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAEnE,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;YAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC9B,MAAM,CAAC,IAAI,CACV,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;oBAC7G,GAAG;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CACvH,CAAC;aACF;SACD;QACD,IAAI,MAAM,CAAC,MAAM,EAAE;YAClB,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACpC;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;CACD,CAAA;AAED,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts deleted file mode 100644 index 261ddcea..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { URISchemeHandler, URIOptions } from "../uri"; -import { URNComponents } from "./urn"; -export interface UUIDComponents extends URNComponents { - uuid?: string; -} -declare const handler: URISchemeHandler; -export default handler; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js deleted file mode 100644 index 044c8a80..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js +++ /dev/null @@ -1,23 +0,0 @@ -const UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; -const UUID_PARSE = /^[0-9A-Fa-f\-]{36}/; -//RFC 4122 -const handler = { - scheme: "urn:uuid", - parse: function (urnComponents, options) { - const uuidComponents = urnComponents; - uuidComponents.uuid = uuidComponents.nss; - uuidComponents.nss = undefined; - if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { - uuidComponents.error = uuidComponents.error || "UUID is not valid."; - } - return uuidComponents; - }, - serialize: function (uuidComponents, options) { - const urnComponents = uuidComponents; - //normalize UUID - urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); - return urnComponents; - }, -}; -export default handler; -//# sourceMappingURL=urn-uuid.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map deleted file mode 100644 index 3b7a8b3a..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"urn-uuid.js","sourceRoot":"","sources":["../../../src/schemes/urn-uuid.ts"],"names":[],"mappings":"AAQA,MAAM,IAAI,GAAG,0DAA0D,CAAC;AACxE,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,UAAU;AACV,MAAM,OAAO,GAA+D;IAC3E,MAAM,EAAG,UAAU;IAEnB,KAAK,EAAG,UAAU,aAA2B,EAAE,OAAkB;QAChE,MAAM,cAAc,GAAG,aAA+B,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC;QACzC,cAAc,CAAC,GAAG,GAAG,SAAS,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;YACpF,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,oBAAoB,CAAC;SACpE;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,SAAS,EAAG,UAAU,cAA6B,EAAE,OAAkB;QACtE,MAAM,aAAa,GAAG,cAA+B,CAAC;QACtD,gBAAgB;QAChB,aAAa,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,OAAO,aAAa,CAAC;IACtB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.d.ts deleted file mode 100644 index 49481055..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; -export interface URNComponents extends URIComponents { - nid?: string; - nss?: string; -} -export interface URNOptions extends URIOptions { - nid?: string; -} -declare const handler: URISchemeHandler; -export default handler; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.js b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.js deleted file mode 100644 index b53161c2..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.js +++ /dev/null @@ -1,49 +0,0 @@ -import { SCHEMES } from "../uri"; -const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})"; -const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})"; -const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]"; -const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)"; -const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"); -const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"); -const URN_PARSE = /^([^\:]+)\:(.*)/; -const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g; -//RFC 2141 -const handler = { - scheme: "urn", - parse: function (components, options) { - const matches = components.path && components.path.match(URN_PARSE); - let urnComponents = components; - if (matches) { - const scheme = options.scheme || urnComponents.scheme || "urn"; - const nid = matches[1].toLowerCase(); - const nss = matches[2]; - const urnScheme = `${scheme}:${options.nid || nid}`; - const schemeHandler = SCHEMES[urnScheme]; - urnComponents.nid = nid; - urnComponents.nss = nss; - urnComponents.path = undefined; - if (schemeHandler) { - urnComponents = schemeHandler.parse(urnComponents, options); - } - } - else { - urnComponents.error = urnComponents.error || "URN can not be parsed."; - } - return urnComponents; - }, - serialize: function (urnComponents, options) { - const scheme = options.scheme || urnComponents.scheme || "urn"; - const nid = urnComponents.nid; - const urnScheme = `${scheme}:${options.nid || nid}`; - const schemeHandler = SCHEMES[urnScheme]; - if (schemeHandler) { - urnComponents = schemeHandler.serialize(urnComponents, options); - } - const uriComponents = urnComponents; - const nss = urnComponents.nss; - uriComponents.path = `${nid || options.nid}:${nss}`; - return uriComponents; - }, -}; -export default handler; -//# sourceMappingURL=urn.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.js.map deleted file mode 100644 index ea43b0be..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/schemes/urn.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"urn.js","sourceRoot":"","sources":["../../../src/schemes/urn.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,OAAO,EAAE,MAAM,QAAQ,CAAC;AAW7C,MAAM,IAAI,GAAG,qCAAqC,CAAC;AACnD,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,OAAO,GAAG,mEAAmE,CAAC;AACpF,MAAM,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,GAAG,GAAG,OAAO,GAAG,KAAK,CAAC;AAC7D,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACjE,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,YAAY,GAAG,iDAAiD,CAAC;AAEvE,UAAU;AACV,MAAM,OAAO,GAA8C;IAC1D,MAAM,EAAG,KAAK;IAEd,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,aAAa,GAAG,UAA2B,CAAC;QAEhD,IAAI,OAAO,EAAE;YACZ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK,CAAC;YAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACpD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAEzC,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;YACxB,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;YACxB,aAAa,CAAC,IAAI,GAAG,SAAS,CAAC;YAE/B,IAAI,aAAa,EAAE;gBAClB,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAkB,CAAC;aAC7E;SACD;aAAM;YACN,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,wBAAwB,CAAC;SACtE;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,SAAS,EAAG,UAAU,aAA2B,EAAE,OAAkB;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK,CAAC;QAC/D,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC9B,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,aAAa,EAAE;YAClB,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAkB,CAAC;SACjF;QAED,MAAM,aAAa,GAAG,aAA8B,CAAC;QACrD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC9B,aAAa,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAEpD,OAAO,aAAa,CAAC;IACtB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/uri.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/uri.d.ts deleted file mode 100644 index 320f5341..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/uri.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -export interface URIComponents { - scheme?: string; - userinfo?: string; - host?: string; - port?: number | string; - path?: string; - query?: string; - fragment?: string; - reference?: string; - error?: string; -} -export interface URIOptions { - scheme?: string; - reference?: string; - tolerant?: boolean; - absolutePath?: boolean; - iri?: boolean; - unicodeSupport?: boolean; - domainHost?: boolean; -} -export interface URISchemeHandler { - scheme: string; - parse(components: ParentComponents, options: Options): Components; - serialize(components: Components, options: Options): ParentComponents; - unicodeSupport?: boolean; - domainHost?: boolean; - absolutePath?: boolean; -} -export interface URIRegExps { - NOT_SCHEME: RegExp; - NOT_USERINFO: RegExp; - NOT_HOST: RegExp; - NOT_PATH: RegExp; - NOT_PATH_NOSCHEME: RegExp; - NOT_QUERY: RegExp; - NOT_FRAGMENT: RegExp; - ESCAPE: RegExp; - UNRESERVED: RegExp; - OTHER_CHARS: RegExp; - PCT_ENCODED: RegExp; - IPV4ADDRESS: RegExp; - IPV6ADDRESS: RegExp; -} -export declare const SCHEMES: { - [scheme: string]: URISchemeHandler; -}; -export declare function pctEncChar(chr: string): string; -export declare function pctDecChars(str: string): string; -export declare function parse(uriString: string, options?: URIOptions): URIComponents; -export declare function removeDotSegments(input: string): string; -export declare function serialize(components: URIComponents, options?: URIOptions): string; -export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; -export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; -export declare function normalize(uri: string, options?: URIOptions): string; -export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; -export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; -export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; -export declare function escapeComponent(str: string, options?: URIOptions): string; -export declare function unescapeComponent(str: string, options?: URIOptions): string; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/uri.js b/truebit-implementation/node_modules/uri-js/dist/esnext/uri.js deleted file mode 100644 index 2fb6d713..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/uri.js +++ /dev/null @@ -1,480 +0,0 @@ -/** - * URI.js - * - * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. - * @author Gary Court - * @see http://github.com/garycourt/uri-js - */ -/** - * Copyright 2011 Gary Court. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY GARY COURT ``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 GARY COURT 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. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of Gary Court. - */ -import URI_PROTOCOL from "./regexps-uri"; -import IRI_PROTOCOL from "./regexps-iri"; -import punycode from "punycode"; -import { toUpperCase, typeOf, assign } from "./util"; -export const SCHEMES = {}; -export function pctEncChar(chr) { - const c = chr.charCodeAt(0); - let e; - if (c < 16) - e = "%0" + c.toString(16).toUpperCase(); - else if (c < 128) - e = "%" + c.toString(16).toUpperCase(); - else if (c < 2048) - e = "%" + ((c >> 6) | 192).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); - else - e = "%" + ((c >> 12) | 224).toString(16).toUpperCase() + "%" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); - return e; -} -export function pctDecChars(str) { - let newStr = ""; - let i = 0; - const il = str.length; - while (i < il) { - const c = parseInt(str.substr(i + 1, 2), 16); - if (c < 128) { - newStr += String.fromCharCode(c); - i += 3; - } - else if (c >= 194 && c < 224) { - if ((il - i) >= 6) { - const c2 = parseInt(str.substr(i + 4, 2), 16); - newStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); - } - else { - newStr += str.substr(i, 6); - } - i += 6; - } - else if (c >= 224) { - if ((il - i) >= 9) { - const c2 = parseInt(str.substr(i + 4, 2), 16); - const c3 = parseInt(str.substr(i + 7, 2), 16); - newStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - } - else { - newStr += str.substr(i, 9); - } - i += 9; - } - else { - newStr += str.substr(i, 3); - i += 3; - } - } - return newStr; -} -function _normalizeComponentEncoding(components, protocol) { - function decodeUnreserved(str) { - const decStr = pctDecChars(str); - return (!decStr.match(protocol.UNRESERVED) ? str : decStr); - } - if (components.scheme) - components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); - if (components.userinfo !== undefined) - components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.host !== undefined) - components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.path !== undefined) - components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.query !== undefined) - components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.fragment !== undefined) - components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - return components; -} -; -function _stripLeadingZeros(str) { - return str.replace(/^0*(.*)/, "$1") || "0"; -} -function _normalizeIPv4(host, protocol) { - const matches = host.match(protocol.IPV4ADDRESS) || []; - const [, address] = matches; - if (address) { - return address.split(".").map(_stripLeadingZeros).join("."); - } - else { - return host; - } -} -function _normalizeIPv6(host, protocol) { - const matches = host.match(protocol.IPV6ADDRESS) || []; - const [, address, zone] = matches; - if (address) { - const [last, first] = address.toLowerCase().split('::').reverse(); - const firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; - const lastFields = last.split(":").map(_stripLeadingZeros); - const isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); - const fieldCount = isLastFieldIPv4Address ? 7 : 8; - const lastFieldsStart = lastFields.length - fieldCount; - const fields = Array(fieldCount); - for (let x = 0; x < fieldCount; ++x) { - fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; - } - if (isLastFieldIPv4Address) { - fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); - } - const allZeroFields = fields.reduce((acc, field, index) => { - if (!field || field === "0") { - const lastLongest = acc[acc.length - 1]; - if (lastLongest && lastLongest.index + lastLongest.length === index) { - lastLongest.length++; - } - else { - acc.push({ index, length: 1 }); - } - } - return acc; - }, []); - const longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0]; - let newHost; - if (longestZeroFields && longestZeroFields.length > 1) { - const newFirst = fields.slice(0, longestZeroFields.index); - const newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); - newHost = newFirst.join(":") + "::" + newLast.join(":"); - } - else { - newHost = fields.join(":"); - } - if (zone) { - newHost += "%" + zone; - } - return newHost; - } - else { - return host; - } -} -const URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; -const NO_MATCH_IS_UNDEFINED = ("").match(/(){0}/)[1] === undefined; -export function parse(uriString, options = {}) { - const components = {}; - const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); - if (options.reference === "suffix") - uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; - const matches = uriString.match(URI_PARSE); - if (matches) { - if (NO_MATCH_IS_UNDEFINED) { - //store each component - components.scheme = matches[1]; - components.userinfo = matches[3]; - components.host = matches[4]; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = matches[7]; - components.fragment = matches[8]; - //fix port number - if (isNaN(components.port)) { - components.port = matches[5]; - } - } - else { //IE FIX for improper RegExp matching - //store each component - components.scheme = matches[1] || undefined; - components.userinfo = (uriString.indexOf("@") !== -1 ? matches[3] : undefined); - components.host = (uriString.indexOf("//") !== -1 ? matches[4] : undefined); - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = (uriString.indexOf("?") !== -1 ? matches[7] : undefined); - components.fragment = (uriString.indexOf("#") !== -1 ? matches[8] : undefined); - //fix port number - if (isNaN(components.port)) { - components.port = (uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined); - } - } - if (components.host) { - //normalize IP hosts - components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); - } - //determine reference type - if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { - components.reference = "same-document"; - } - else if (components.scheme === undefined) { - components.reference = "relative"; - } - else if (components.fragment === undefined) { - components.reference = "absolute"; - } - else { - components.reference = "uri"; - } - //check for reference errors - if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { - components.error = components.error || "URI is not a " + options.reference + " reference."; - } - //find scheme handler - const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //check if scheme can't handle IRIs - if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { - //if host component is a domain name - if (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) { - //convert Unicode IDN -> ASCII IDN - try { - components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); - } - catch (e) { - components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; - } - } - //convert IRI -> URI - _normalizeComponentEncoding(components, URI_PROTOCOL); - } - else { - //normalize encodings - _normalizeComponentEncoding(components, protocol); - } - //perform scheme specific parsing - if (schemeHandler && schemeHandler.parse) { - schemeHandler.parse(components, options); - } - } - else { - components.error = components.error || "URI can not be parsed."; - } - return components; -} -; -function _recomposeAuthority(components, options) { - const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); - const uriTokens = []; - if (components.userinfo !== undefined) { - uriTokens.push(components.userinfo); - uriTokens.push("@"); - } - if (components.host !== undefined) { - //normalize IP hosts, add brackets and escape zone separator for IPv6 - uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => "[" + $1 + ($2 ? "%25" + $2 : "") + "]")); - } - if (typeof components.port === "number") { - uriTokens.push(":"); - uriTokens.push(components.port.toString(10)); - } - return uriTokens.length ? uriTokens.join("") : undefined; -} -; -const RDS1 = /^\.\.?\//; -const RDS2 = /^\/\.(\/|$)/; -const RDS3 = /^\/\.\.(\/|$)/; -const RDS4 = /^\.\.?$/; -const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; -export function removeDotSegments(input) { - const output = []; - while (input.length) { - if (input.match(RDS1)) { - input = input.replace(RDS1, ""); - } - else if (input.match(RDS2)) { - input = input.replace(RDS2, "/"); - } - else if (input.match(RDS3)) { - input = input.replace(RDS3, "/"); - output.pop(); - } - else if (input === "." || input === "..") { - input = ""; - } - else { - const im = input.match(RDS5); - if (im) { - const s = im[0]; - input = input.slice(s.length); - output.push(s); - } - else { - throw new Error("Unexpected dot segment condition"); - } - } - } - return output.join(""); -} -; -export function serialize(components, options = {}) { - const protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL); - const uriTokens = []; - //find scheme handler - const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //perform scheme specific serialization - if (schemeHandler && schemeHandler.serialize) - schemeHandler.serialize(components, options); - if (components.host) { - //if host component is an IPv6 address - if (protocol.IPV6ADDRESS.test(components.host)) { - //TODO: normalize IPv6 address as per RFC 5952 - } - //if host component is a domain name - else if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) { - //convert IDN via punycode - try { - components.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host)); - } - catch (e) { - components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - } - } - //normalize encoding - _normalizeComponentEncoding(components, protocol); - if (options.reference !== "suffix" && components.scheme) { - uriTokens.push(components.scheme); - uriTokens.push(":"); - } - const authority = _recomposeAuthority(components, options); - if (authority !== undefined) { - if (options.reference !== "suffix") { - uriTokens.push("//"); - } - uriTokens.push(authority); - if (components.path && components.path.charAt(0) !== "/") { - uriTokens.push("/"); - } - } - if (components.path !== undefined) { - let s = components.path; - if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { - s = removeDotSegments(s); - } - if (authority === undefined) { - s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" - } - uriTokens.push(s); - } - if (components.query !== undefined) { - uriTokens.push("?"); - uriTokens.push(components.query); - } - if (components.fragment !== undefined) { - uriTokens.push("#"); - uriTokens.push(components.fragment); - } - return uriTokens.join(""); //merge tokens into a string -} -; -export function resolveComponents(base, relative, options = {}, skipNormalization) { - const target = {}; - if (!skipNormalization) { - base = parse(serialize(base, options), options); //normalize base components - relative = parse(serialize(relative, options), options); //normalize relative components - } - options = options || {}; - if (!options.tolerant && relative.scheme) { - target.scheme = relative.scheme; - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } - else { - if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } - else { - if (!relative.path) { - target.path = base.path; - if (relative.query !== undefined) { - target.query = relative.query; - } - else { - target.query = base.query; - } - } - else { - if (relative.path.charAt(0) === "/") { - target.path = removeDotSegments(relative.path); - } - else { - if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { - target.path = "/" + relative.path; - } - else if (!base.path) { - target.path = relative.path; - } - else { - target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; - } - target.path = removeDotSegments(target.path); - } - target.query = relative.query; - } - //target.authority = base.authority; - target.userinfo = base.userinfo; - target.host = base.host; - target.port = base.port; - } - target.scheme = base.scheme; - } - target.fragment = relative.fragment; - return target; -} -; -export function resolve(baseURI, relativeURI, options) { - const schemelessOptions = assign({ scheme: 'null' }, options); - return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); -} -; -export function normalize(uri, options) { - if (typeof uri === "string") { - uri = serialize(parse(uri, options), options); - } - else if (typeOf(uri) === "object") { - uri = parse(serialize(uri, options), options); - } - return uri; -} -; -export function equal(uriA, uriB, options) { - if (typeof uriA === "string") { - uriA = serialize(parse(uriA, options), options); - } - else if (typeOf(uriA) === "object") { - uriA = serialize(uriA, options); - } - if (typeof uriB === "string") { - uriB = serialize(parse(uriB, options), options); - } - else if (typeOf(uriB) === "object") { - uriB = serialize(uriB, options); - } - return uriA === uriB; -} -; -export function escapeComponent(str, options) { - return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar); -} -; -export function unescapeComponent(str, options) { - return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars); -} -; -//# sourceMappingURL=uri.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/uri.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/uri.js.map deleted file mode 100644 index e1d831cb..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/uri.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"uri.js","sourceRoot":"","sources":["../../src/uri.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiDrD,MAAM,CAAC,MAAM,OAAO,GAAsC,EAAE,CAAC;AAE7D,MAAM,qBAAqB,GAAU;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAQ,CAAC;IAEb,IAAI,CAAC,GAAG,EAAE;QAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;SAC/C,IAAI,CAAC,GAAG,GAAG;QAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;SACpD,IAAI,CAAC,GAAG,IAAI;QAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;;QACxH,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAE3K,OAAO,CAAC,CAAC;AACV,CAAC;AAED,MAAM,sBAAsB,GAAU;IACrC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAEtB,OAAO,CAAC,GAAG,EAAE,EAAE;QACd,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,GAAG,GAAG,EAAE;YACZ,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,IAAI,CAAC,CAAC;SACP;aACI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE;gBAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;aAC3D;iBAAM;gBACN,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3B;YACD,CAAC,IAAI,CAAC,CAAC;SACP;aACI,IAAI,CAAC,IAAI,GAAG,EAAE;YAClB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE;gBAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;aAC/E;iBAAM;gBACN,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3B;YACD,CAAC,IAAI,CAAC,CAAC;SACP;aACI;YACJ,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,CAAC,IAAI,CAAC,CAAC;SACP;KACD;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,qCAAqC,UAAwB,EAAE,QAAmB;IACjF,0BAA0B,GAAU;QACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,UAAU,CAAC,MAAM;QAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpK,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC/N,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7N,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClQ,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;QAAE,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACnN,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE/N,OAAO,UAAU,CAAC;AACnB,CAAC;AAAA,CAAC;AAEF,4BAA4B,GAAU;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;AAC5C,CAAC;AAED,wBAAwB,IAAW,EAAE,QAAmB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IAE5B,IAAI,OAAO,EAAE;QACZ,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC5D;SAAM;QACN,OAAO,IAAI,CAAC;KACZ;AACF,CAAC;AAED,wBAAwB,IAAW,EAAE,QAAmB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC;IAElC,IAAI,OAAO,EAAE;QACZ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,sBAAsB,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC;QACvD,MAAM,MAAM,GAAG,KAAK,CAAS,UAAU,CAAC,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE;YACpC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;SACpE;QAED,IAAI,sBAAsB,EAAE;YAC3B,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;SAC1E;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAsC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9F,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,EAAE;gBAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxC,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,KAAK,KAAK,EAAE;oBACpE,WAAW,CAAC,MAAM,EAAE,CAAC;iBACrB;qBAAM;oBACN,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAG,CAAC,EAAE,CAAC,CAAC;iBAChC;aACD;YACD,OAAO,GAAG,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/E,IAAI,OAAc,CAAC;QACnB,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACjF,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxD;aAAM;YACN,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3B;QAED,IAAI,IAAI,EAAE;YACT,OAAO,IAAI,GAAG,GAAG,IAAI,CAAC;SACtB;QAED,OAAO,OAAO,CAAC;KACf;SAAM;QACN,OAAO,IAAI,CAAC;KACZ;AACF,CAAC;AAED,MAAM,SAAS,GAAG,iIAAiI,CAAC;AACpJ,MAAM,qBAAqB,GAAsB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;AAEvF,MAAM,gBAAgB,SAAgB,EAAE,UAAqB,EAAE;IAC9D,MAAM,UAAU,GAAiB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEvE,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ;QAAE,SAAS,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAEhH,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,OAAO,EAAE;QACZ,IAAI,qBAAqB,EAAE;YAC1B,sBAAsB;YACtB,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACjC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEjC,iBAAiB;YACjB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC3B,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aAC7B;SACD;aAAM,EAAG,qCAAqC;YAC9C,sBAAsB;YACtB,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YAC5C,UAAU,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/E,UAAU,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5E,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,UAAU,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5E,UAAU,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE/E,iBAAiB;YACjB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC3B,UAAU,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aAC9F;SACD;QAED,IAAI,UAAU,CAAC,IAAI,EAAE;YACpB,oBAAoB;YACpB,UAAU,CAAC,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;SACtF;QAED,0BAA0B;QAC1B,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE;YACjM,UAAU,CAAC,SAAS,GAAG,eAAe,CAAC;SACvC;aAAM,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE;YAC3C,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC;SAClC;aAAM,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7C,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC;SAClC;aAAM;YACN,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;SAC7B;QAED,4BAA4B;QAC5B,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,EAAE;YACtG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,eAAe,GAAG,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC;SAC3F;QAED,qBAAqB;QACrB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzF,mCAAmC;QACnC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;YACjF,oCAAoC;YACpC,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE;gBAC3F,kCAAkC;gBAClC,IAAI;oBACH,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;iBAC7G;gBAAC,OAAO,CAAC,EAAE;oBACX,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,iEAAiE,GAAG,CAAC,CAAC;iBAC7G;aACD;YACD,oBAAoB;YACpB,2BAA2B,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;SACtD;aAAM;YACN,qBAAqB;YACrB,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAClD;QAED,iCAAiC;QACjC,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,EAAE;YACzC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;SACzC;KACD;SAAM;QACN,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,wBAAwB,CAAC;KAChE;IAED,OAAO,UAAU,CAAC;AACnB,CAAC;AAAA,CAAC;AAEF,6BAA6B,UAAwB,EAAE,OAAkB;IACxE,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,SAAS,GAAiB,EAAE,CAAC;IAEnC,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE;QACtC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;QAClC,qEAAqE;QACrE,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;KAClL;IAED,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE;QACxC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;KAC7C;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAAA,CAAC;AAEF,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,IAAI,GAAG,aAAa,CAAC;AAC3B,MAAM,IAAI,GAAG,eAAe,CAAC;AAC7B,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,IAAI,GAAG,wBAAwB,CAAC;AAEtC,MAAM,4BAA4B,KAAY;IAC7C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,OAAO,KAAK,CAAC,MAAM,EAAE;QACpB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SAChC;aAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC7B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACjC;aAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC7B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,CAAC;SACb;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE;YAC3C,KAAK,GAAG,EAAE,CAAC;SACX;aAAM;YACN,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,EAAE,EAAE;gBACP,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACf;iBAAM;gBACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACpD;SACD;KACD;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAAA,CAAC;AAEF,MAAM,oBAAoB,UAAwB,EAAE,UAAqB,EAAE;IAC1E,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAiB,EAAE,CAAC;IAEnC,qBAAqB;IACrB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAEzF,uCAAuC;IACvC,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS;QAAE,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE3F,IAAI,UAAU,CAAC,IAAI,EAAE;QACpB,sCAAsC;QACtC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC/C,8CAA8C;SAC9C;QAED,oCAAoC;aAC/B,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE;YAC3E,0BAA0B;YAC1B,IAAI;gBACH,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;aACpK;YAAC,OAAO,CAAC,EAAE;gBACX,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,6CAA6C,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;aACpJ;SACD;KACD;IAED,oBAAoB;IACpB,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAElD,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE;QACxD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAK,SAAS,EAAE;QAC5B,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;YACnC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrB;QAED,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE1B,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACzD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACpB;KACD;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;QAClC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;YAC7E,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;SACzB;QAED,IAAI,SAAS,KAAK,SAAS,EAAE;YAC5B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAE,yCAAyC;SAC1E;QAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE;QACnC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACjC;IAED,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE;QACtC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,4BAA4B;AACzD,CAAC;AAAA,CAAC;AAEF,MAAM,4BAA4B,IAAkB,EAAE,QAAsB,EAAE,UAAqB,EAAE,EAAE,iBAA0B;IAChI,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAI,CAAC,iBAAiB,EAAE;QACvB,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,2BAA2B;QAC7E,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,+BAA+B;KACzF;IACD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;QACzC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAChC,wCAAwC;QACxC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;KAC9B;SAAM;QACN,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;YAClG,wCAAwC;YACxC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;SAC9B;aAAM;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACnB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE;oBACjC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;iBAC9B;qBAAM;oBACN,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;iBAC1B;aACD;iBAAM;gBACN,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBACpC,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAC/C;qBAAM;oBACN,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;wBACtG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;qBAClC;yBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;wBACtB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;qBAC5B;yBAAM;wBACN,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;qBACjF;oBACD,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBAC7C;gBACD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;aAC9B;YACD,oCAAoC;YACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAChC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACxB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACxB;QACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KAC5B;IAED,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAEpC,OAAO,MAAM,CAAC;AACf,CAAC;AAAA,CAAC;AAEF,MAAM,kBAAkB,OAAc,EAAE,WAAkB,EAAE,OAAmB;IAC9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,MAAM,EAAG,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC3J,CAAC;AAAA,CAAC;AAIF,MAAM,oBAAoB,GAAO,EAAE,OAAmB;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC5B,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAC9C;SAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;QACpC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAgB,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAC7D;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAAA,CAAC;AAIF,MAAM,gBAAgB,IAAQ,EAAE,IAAQ,EAAE,OAAmB;IAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAChD;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;QACrC,IAAI,GAAG,SAAS,CAAgB,IAAI,EAAE,OAAO,CAAC,CAAC;KAC/C;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAChD;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;QACrC,IAAI,GAAG,SAAS,CAAgB,IAAI,EAAE,OAAO,CAAC,CAAC;KAC/C;IAED,OAAO,IAAI,KAAK,IAAI,CAAC;AACtB,CAAC;AAAA,CAAC;AAEF,MAAM,0BAA0B,GAAU,EAAE,OAAmB;IAC9D,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1H,CAAC;AAAA,CAAC;AAEF,MAAM,4BAA4B,GAAU,EAAE,OAAmB;IAChE,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;AACrI,CAAC;AAAA,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/util.d.ts b/truebit-implementation/node_modules/uri-js/dist/esnext/util.d.ts deleted file mode 100644 index 8b484cd3..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/util.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare function merge(...sets: Array): string; -export declare function subexp(str: string): string; -export declare function typeOf(o: any): string; -export declare function toUpperCase(str: string): string; -export declare function toArray(obj: any): Array; -export declare function assign(target: object, source: any): any; diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/util.js b/truebit-implementation/node_modules/uri-js/dist/esnext/util.js deleted file mode 100644 index 45af46fe..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/util.js +++ /dev/null @@ -1,36 +0,0 @@ -export function merge(...sets) { - if (sets.length > 1) { - sets[0] = sets[0].slice(0, -1); - const xl = sets.length - 1; - for (let x = 1; x < xl; ++x) { - sets[x] = sets[x].slice(1, -1); - } - sets[xl] = sets[xl].slice(1); - return sets.join(''); - } - else { - return sets[0]; - } -} -export function subexp(str) { - return "(?:" + str + ")"; -} -export function typeOf(o) { - return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase()); -} -export function toUpperCase(str) { - return str.toUpperCase(); -} -export function toArray(obj) { - return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : []; -} -export function assign(target, source) { - const obj = target; - if (source) { - for (const key in source) { - obj[key] = source[key]; - } - } - return obj; -} -//# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/dist/esnext/util.js.map b/truebit-implementation/node_modules/uri-js/dist/esnext/util.js.map deleted file mode 100644 index 05d9df02..00000000 --- a/truebit-implementation/node_modules/uri-js/dist/esnext/util.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,IAAkB;IAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrB;SAAM;QACN,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;KACf;AACF,CAAC;AAED,MAAM,iBAAiB,GAAU;IAChC,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC1B,CAAC;AAED,MAAM,iBAAiB,CAAK;IAC3B,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACpJ,CAAC;AAED,MAAM,sBAAsB,GAAU;IACrC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,kBAAkB,GAAO;IAC9B,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvM,CAAC;AAGD,MAAM,iBAAiB,MAAc,EAAE,MAAW;IACjD,MAAM,GAAG,GAAG,MAAa,CAAC;IAC1B,IAAI,MAAM,EAAE;QACX,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACzB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SACvB;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/package.json b/truebit-implementation/node_modules/uri-js/package.json deleted file mode 100644 index ace7fac4..00000000 --- a/truebit-implementation/node_modules/uri-js/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_from": "uri-js@^4.2.2", - "_id": "uri-js@4.2.2", - "_inBundle": false, - "_integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "_location": "/uri-js", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "uri-js@^4.2.2", - "name": "uri-js", - "escapedName": "uri-js", - "rawSpec": "^4.2.2", - "saveSpec": null, - "fetchSpec": "^4.2.2" - }, - "_requiredBy": [ - "/ajv" - ], - "_resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "_shasum": "94c540e1ff772956e2299507c010aea6c8838eb0", - "_spec": "uri-js@^4.2.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ajv", - "author": { - "name": "Gary Court", - "email": "gary.court@gmail.com" - }, - "bugs": { - "url": "https://github.com/garycourt/uri-js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "punycode": "^2.1.0" - }, - "deprecated": false, - "description": "An RFC 3986/3987 compliant, scheme extendable URI/IRI parsing/validating/resolving library for JavaScript.", - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-plugin-external-helpers": "^6.22.0", - "babel-preset-latest": "^6.24.1", - "mocha": "^3.2.0", - "mocha-qunit-ui": "^0.1.3", - "rollup": "^0.41.6", - "rollup-plugin-babel": "^2.7.1", - "rollup-plugin-node-resolve": "^2.0.0", - "sorcery": "^0.10.0", - "typescript": "^2.8.1", - "uglify-js": "^2.8.14" - }, - "directories": { - "test": "tests" - }, - "homepage": "https://github.com/garycourt/uri-js", - "keywords": [ - "URI", - "IRI", - "IDN", - "URN", - "UUID", - "HTTP", - "HTTPS", - "MAILTO", - "RFC3986", - "RFC3987", - "RFC5891", - "RFC2616", - "RFC2818", - "RFC2141", - "RFC4122", - "RFC4291", - "RFC5952", - "RFC6068", - "RFC6874" - ], - "license": "BSD-2-Clause", - "main": "dist/es5/uri.all.js", - "name": "uri-js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/garycourt/uri-js.git" - }, - "scripts": { - "build": "npm run build:esnext && npm run build:es5 && npm run build:es5:min", - "build:es5": "rollup -c && cp dist/esnext/uri.d.ts dist/es5/uri.all.d.ts && npm run build:es5:fix-sourcemap", - "build:es5:fix-sourcemap": "sorcery -i dist/es5/uri.all.js", - "build:es5:min": "uglifyjs dist/es5/uri.all.js --support-ie8 --output dist/es5/uri.all.min.js --in-source-map dist/es5/uri.all.js.map --source-map uri.all.min.js.map --comments --compress --mangle --pure-funcs merge subexp && mv uri.all.min.js.map dist/es5/ && cp dist/es5/uri.all.d.ts dist/es5/uri.all.min.d.ts", - "build:esnext": "tsc", - "test": "mocha -u mocha-qunit-ui dist/es5/uri.all.js tests/tests.js" - }, - "types": "dist/es5/uri.all.d.ts", - "version": "4.2.2" -} diff --git a/truebit-implementation/node_modules/uri-js/rollup.config.js b/truebit-implementation/node_modules/uri-js/rollup.config.js deleted file mode 100644 index 5bb8b054..00000000 --- a/truebit-implementation/node_modules/uri-js/rollup.config.js +++ /dev/null @@ -1,32 +0,0 @@ -import resolve from 'rollup-plugin-node-resolve'; -import babel from 'rollup-plugin-babel'; -const packageJson = require('./package.json'); - -export default { - entry : "dist/esnext/index.js", - format : "umd", - moduleName : "URI", - plugins: [ - resolve({ - module: true, - jsnext: true, - preferBuiltins: false - }), - - babel({ - "presets": [ - ["latest", { - "es2015": { - "modules": false - } - }] - ], - "plugins": ["external-helpers"], - "externalHelpers": false - } -) - ], - dest : "dist/es5/uri.all.js", - sourceMap: true, - banner: "/** @license URI.js v" + packageJson.version + " (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */" -} diff --git a/truebit-implementation/node_modules/uri-js/src/index.ts b/truebit-implementation/node_modules/uri-js/src/index.ts deleted file mode 100644 index 6532a1bc..00000000 --- a/truebit-implementation/node_modules/uri-js/src/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { SCHEMES } from "./uri"; - -import http from "./schemes/http"; -SCHEMES[http.scheme] = http; - -import https from "./schemes/https"; -SCHEMES[https.scheme] = https; - -import mailto from "./schemes/mailto"; -SCHEMES[mailto.scheme] = mailto; - -import urn from "./schemes/urn"; -SCHEMES[urn.scheme] = urn; - -import uuid from "./schemes/urn-uuid"; -SCHEMES[uuid.scheme] = uuid; - -export * from "./uri"; diff --git a/truebit-implementation/node_modules/uri-js/src/punycode.d.ts b/truebit-implementation/node_modules/uri-js/src/punycode.d.ts deleted file mode 100644 index 4ecbd348..00000000 --- a/truebit-implementation/node_modules/uri-js/src/punycode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -declare module 'punycode' { - function ucs2decode(string:string):Array; - function ucs2encode(array:Array):string; - function decode(string:string):string; - function encode(string:string):string; - function toASCII(string:string):string; - function toUnicode(string:string):string; - - interface Punycode { - 'version': '2.2.0'; - 'ucs2': { - 'decode': typeof ucs2decode; - 'encode': typeof ucs2encode; - }, - 'decode': typeof decode; - 'encode': typeof encode; - 'toASCII': typeof toASCII; - 'toUnicode': typeof toUnicode; - } - - const punycode:Punycode; - - export default punycode; -} diff --git a/truebit-implementation/node_modules/uri-js/src/regexps-iri.ts b/truebit-implementation/node_modules/uri-js/src/regexps-iri.ts deleted file mode 100644 index 8bd605b4..00000000 --- a/truebit-implementation/node_modules/uri-js/src/regexps-iri.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { URIRegExps } from "./uri"; -import { buildExps } from "./regexps-uri"; - -export default buildExps(true); diff --git a/truebit-implementation/node_modules/uri-js/src/regexps-uri.ts b/truebit-implementation/node_modules/uri-js/src/regexps-uri.ts deleted file mode 100644 index 8d6b5479..00000000 --- a/truebit-implementation/node_modules/uri-js/src/regexps-uri.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { URIRegExps } from "./uri"; -import { merge, subexp } from "./util"; - -export function buildExps(isIRI:boolean):URIRegExps { - const - ALPHA$$ = "[A-Za-z]", - CR$ = "[\\x0D]", - DIGIT$$ = "[0-9]", - DQUOTE$$ = "[\\x22]", - HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), //case-insensitive - LF$$ = "[\\x0A]", - SP$$ = "[\\x20]", - PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), //expanded - GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", - SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", - RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), - UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", //subset, excludes bidi control characters - IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", //subset - UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), - SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), - USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), - DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), - DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), //relaxed parsing rules - IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), - H16$ = subexp(HEXDIG$$ + "{1,4}"), - LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), - IPV6ADDRESS1$ = subexp( subexp(H16$ + "\\:") + "{6}" + LS32$), // 6( h16 ":" ) ls32 - IPV6ADDRESS2$ = subexp( "\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), // "::" 5( h16 ":" ) ls32 - IPV6ADDRESS3$ = subexp(subexp( H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), //[ h16 ] "::" 4( h16 ":" ) ls32 - IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), //[ *4( h16 ":" ) h16 ] "::" ls32 - IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$ ), //[ *5( h16 ":" ) h16 ] "::" h16 - IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:" ), //[ *6( h16 ":" ) h16 ] "::" - IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), - ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), //RFC 6874 - IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), //RFC 6874 - IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), //RFC 6874, with relaxed parsing rules - IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), - IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), //RFC 6874 - REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), - HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), - PORT$ = subexp(DIGIT$$ + "*"), - AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), - PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), - SEGMENT$ = subexp(PCHAR$ + "*"), - SEGMENT_NZ$ = subexp(PCHAR$ + "+"), - SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), - PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), - PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), //simplified - PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified - PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified - PATH_EMPTY$ = "(?!" + PCHAR$ + ")", - PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), - FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), - HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), - RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), - ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), - - GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", - SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$" - ; - - return { - NOT_SCHEME : new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), - NOT_USERINFO : new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_HOST : new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH : new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH_NOSCHEME : new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_QUERY : new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), - NOT_FRAGMENT : new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), - ESCAPE : new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), - UNRESERVED : new RegExp(UNRESERVED$$, "g"), - OTHER_CHARS : new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), - PCT_ENCODED : new RegExp(PCT_ENCODED$, "g"), - IPV4ADDRESS : new RegExp("^(" + IPV4ADDRESS$ + ")$"), - IPV6ADDRESS : new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules - }; -} - -export default buildExps(false); diff --git a/truebit-implementation/node_modules/uri-js/src/schemes/http.ts b/truebit-implementation/node_modules/uri-js/src/schemes/http.ts deleted file mode 100644 index 3e53145c..00000000 --- a/truebit-implementation/node_modules/uri-js/src/schemes/http.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; - -const handler:URISchemeHandler = { - scheme : "http", - - domainHost : true, - - parse : function (components:URIComponents, options:URIOptions):URIComponents { - //report missing host - if (!components.host) { - components.error = components.error || "HTTP URIs must have a host."; - } - - return components; - }, - - serialize : function (components:URIComponents, options:URIOptions):URIComponents { - //normalize the default port - if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { - components.port = undefined; - } - - //normalize the empty path - if (!components.path) { - components.path = "/"; - } - - //NOTE: We do not parse query strings for HTTP URIs - //as WWW Form Url Encoded query strings are part of the HTML4+ spec, - //and not the HTTP spec. - - return components; - } -}; - -export default handler; \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/src/schemes/https.ts b/truebit-implementation/node_modules/uri-js/src/schemes/https.ts deleted file mode 100644 index a19a4942..00000000 --- a/truebit-implementation/node_modules/uri-js/src/schemes/https.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; -import http from "./http"; - -const handler:URISchemeHandler = { - scheme : "https", - domainHost : http.domainHost, - parse : http.parse, - serialize : http.serialize -} - -export default handler; \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/src/schemes/mailto.ts b/truebit-implementation/node_modules/uri-js/src/schemes/mailto.ts deleted file mode 100644 index 3faf320d..00000000 --- a/truebit-implementation/node_modules/uri-js/src/schemes/mailto.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; -import { pctEncChar, pctDecChars, unescapeComponent } from "../uri"; -import punycode from "punycode"; -import { merge, subexp, toUpperCase, toArray } from "../util"; - -export interface MailtoHeaders { - [hfname:string]:string -} - -export interface MailtoComponents extends URIComponents { - to:Array, - headers?:MailtoHeaders, - subject?:string, - body?:string -} - -const O:MailtoHeaders = {}; -const isIRI = true; - -//RFC 3986 -const UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; -const HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive -const PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded - -//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = -//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) -//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext -//const VCHAR$$ = "[\\x21-\\x7E]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext -//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); -//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); -//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); -const ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; -const QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; -const VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); -const DOT_ATOM_TEXT$ = subexp(ATEXT$$ + "+" + subexp("\\." + ATEXT$$ + "+") + "*"); -const QUOTED_PAIR$ = subexp("\\\\" + VCHAR$$); -const QCONTENT$ = subexp(QTEXT$$ + "|" + QUOTED_PAIR$); -const QUOTED_STRING$ = subexp('\\"' + QCONTENT$ + "*" + '\\"'); - -//RFC 6068 -const DTEXT_NO_OBS$$ = "[\\x21-\\x5A\\x5E-\\x7E]"; //%d33-90 / %d94-126 -const SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; -const QCHAR$ = subexp(UNRESERVED$$ + "|" + PCT_ENCODED$ + "|" + SOME_DELIMS$$); -const DOMAIN$ = subexp(DOT_ATOM_TEXT$ + "|" + "\\[" + DTEXT_NO_OBS$$ + "*" + "\\]"); -const LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + "|" + QUOTED_STRING$); -const ADDR_SPEC$ = subexp(LOCAL_PART$ + "\\@" + DOMAIN$); -const TO$ = subexp(ADDR_SPEC$ + subexp("\\," + ADDR_SPEC$) + "*"); -const HFNAME$ = subexp(QCHAR$ + "*"); -const HFVALUE$ = HFNAME$; -const HFIELD$ = subexp(HFNAME$ + "\\=" + HFVALUE$); -const HFIELDS2$ = subexp(HFIELD$ + subexp("\\&" + HFIELD$) + "*"); -const HFIELDS$ = subexp("\\?" + HFIELDS2$); -const MAILTO_URI = new RegExp("^mailto\\:" + TO$ + "?" + HFIELDS$ + "?$"); - -const UNRESERVED = new RegExp(UNRESERVED$$, "g"); -const PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); -const NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); -const NOT_DOMAIN = new RegExp(merge("[^]", ATEXT$$, "[\\.]", "[\\[]", DTEXT_NO_OBS$$, "[\\]]"), "g"); -const NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); -const NOT_HFVALUE = NOT_HFNAME; -const TO = new RegExp("^" + TO$ + "$"); -const HFIELDS = new RegExp("^" + HFIELDS2$ + "$"); - -function decodeUnreserved(str:string):string { - const decStr = pctDecChars(str); - return (!decStr.match(UNRESERVED) ? str : decStr); -} - -const handler:URISchemeHandler = { - scheme : "mailto", - - parse : function (components:URIComponents, options:URIOptions):MailtoComponents { - const mailtoComponents = components as MailtoComponents; - const to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(",") : []); - mailtoComponents.path = undefined; - - if (mailtoComponents.query) { - let unknownHeaders = false - const headers:MailtoHeaders = {}; - const hfields = mailtoComponents.query.split("&"); - - for (let x = 0, xl = hfields.length; x < xl; ++x) { - const hfield = hfields[x].split("="); - - switch (hfield[0]) { - case "to": - const toAddrs = hfield[1].split(","); - for (let x = 0, xl = toAddrs.length; x < xl; ++x) { - to.push(toAddrs[x]); - } - break; - case "subject": - mailtoComponents.subject = unescapeComponent(hfield[1], options); - break; - case "body": - mailtoComponents.body = unescapeComponent(hfield[1], options); - break; - default: - unknownHeaders = true; - headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); - break; - } - } - - if (unknownHeaders) mailtoComponents.headers = headers; - } - - mailtoComponents.query = undefined; - - for (let x = 0, xl = to.length; x < xl; ++x) { - const addr = to[x].split("@"); - - addr[0] = unescapeComponent(addr[0]); - - if (!options.unicodeSupport) { - //convert Unicode IDN -> ASCII IDN - try { - addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); - } catch (e) { - mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; - } - } else { - addr[1] = unescapeComponent(addr[1], options).toLowerCase(); - } - - to[x] = addr.join("@"); - } - - return mailtoComponents; - }, - - serialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents { - const components = mailtoComponents as URIComponents; - const to = toArray(mailtoComponents.to); - if (to) { - for (let x = 0, xl = to.length; x < xl; ++x) { - const toAddr = String(to[x]); - const atIdx = toAddr.lastIndexOf("@"); - const localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); - let domain = toAddr.slice(atIdx + 1); - - //convert IDN via punycode - try { - domain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain)); - } catch (e) { - components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - - to[x] = localPart + "@" + domain; - } - - components.path = to.join(","); - } - - const headers = mailtoComponents.headers = mailtoComponents.headers || {}; - - if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; - if (mailtoComponents.body) headers["body"] = mailtoComponents.body; - - const fields = []; - for (const name in headers) { - if (headers[name] !== O[name]) { - fields.push( - name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + - "=" + - headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar) - ); - } - } - if (fields.length) { - components.query = fields.join("&"); - } - - return components; - } -} - -export default handler; \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/src/schemes/urn-uuid.ts b/truebit-implementation/node_modules/uri-js/src/schemes/urn-uuid.ts deleted file mode 100644 index 56653292..00000000 --- a/truebit-implementation/node_modules/uri-js/src/schemes/urn-uuid.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; -import { URNComponents } from "./urn"; -import { SCHEMES } from "../uri"; - -export interface UUIDComponents extends URNComponents { - uuid?: string; -} - -const UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; -const UUID_PARSE = /^[0-9A-Fa-f\-]{36}/; - -//RFC 4122 -const handler:URISchemeHandler = { - scheme : "urn:uuid", - - parse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents { - const uuidComponents = urnComponents as UUIDComponents; - uuidComponents.uuid = uuidComponents.nss; - uuidComponents.nss = undefined; - - if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { - uuidComponents.error = uuidComponents.error || "UUID is not valid."; - } - - return uuidComponents; - }, - - serialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents { - const urnComponents = uuidComponents as URNComponents; - //normalize UUID - urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); - return urnComponents; - }, -}; - -export default handler; \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/src/schemes/urn.ts b/truebit-implementation/node_modules/uri-js/src/schemes/urn.ts deleted file mode 100644 index 590f9cce..00000000 --- a/truebit-implementation/node_modules/uri-js/src/schemes/urn.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; -import { pctEncChar, SCHEMES } from "../uri"; - -export interface URNComponents extends URIComponents { - nid?:string; - nss?:string; -} - -export interface URNOptions extends URIOptions { - nid?:string; -} - -const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})"; -const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})"; -const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]"; -const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)"; -const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"); -const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"); -const URN_PARSE = /^([^\:]+)\:(.*)/; -const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g; - -//RFC 2141 -const handler:URISchemeHandler = { - scheme : "urn", - - parse : function (components:URIComponents, options:URNOptions):URNComponents { - const matches = components.path && components.path.match(URN_PARSE); - let urnComponents = components as URNComponents; - - if (matches) { - const scheme = options.scheme || urnComponents.scheme || "urn"; - const nid = matches[1].toLowerCase(); - const nss = matches[2]; - const urnScheme = `${scheme}:${options.nid || nid}`; - const schemeHandler = SCHEMES[urnScheme]; - - urnComponents.nid = nid; - urnComponents.nss = nss; - urnComponents.path = undefined; - - if (schemeHandler) { - urnComponents = schemeHandler.parse(urnComponents, options) as URNComponents; - } - } else { - urnComponents.error = urnComponents.error || "URN can not be parsed."; - } - - return urnComponents; - }, - - serialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents { - const scheme = options.scheme || urnComponents.scheme || "urn"; - const nid = urnComponents.nid; - const urnScheme = `${scheme}:${options.nid || nid}`; - const schemeHandler = SCHEMES[urnScheme]; - - if (schemeHandler) { - urnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents; - } - - const uriComponents = urnComponents as URIComponents; - const nss = urnComponents.nss; - uriComponents.path = `${nid || options.nid}:${nss}`; - - return uriComponents; - }, -}; - -export default handler; \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/src/uri.ts b/truebit-implementation/node_modules/uri-js/src/uri.ts deleted file mode 100644 index c282c372..00000000 --- a/truebit-implementation/node_modules/uri-js/src/uri.ts +++ /dev/null @@ -1,556 +0,0 @@ -/** - * URI.js - * - * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. - * @author Gary Court - * @see http://github.com/garycourt/uri-js - */ - -/** - * Copyright 2011 Gary Court. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY GARY COURT ``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 GARY COURT 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. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of Gary Court. - */ - -import URI_PROTOCOL from "./regexps-uri"; -import IRI_PROTOCOL from "./regexps-iri"; -import punycode from "punycode"; -import { toUpperCase, typeOf, assign } from "./util"; - -export interface URIComponents { - scheme?:string; - userinfo?:string; - host?:string; - port?:number|string; - path?:string; - query?:string; - fragment?:string; - reference?:string; - error?:string; -} - -export interface URIOptions { - scheme?:string; - reference?:string; - tolerant?:boolean; - absolutePath?:boolean; - iri?:boolean; - unicodeSupport?:boolean; - domainHost?:boolean; -} - -export interface URISchemeHandler { - scheme:string; - parse(components:ParentComponents, options:Options):Components; - serialize(components:Components, options:Options):ParentComponents; - unicodeSupport?:boolean; - domainHost?:boolean; - absolutePath?:boolean; -} - -export interface URIRegExps { - NOT_SCHEME : RegExp, - NOT_USERINFO : RegExp, - NOT_HOST : RegExp, - NOT_PATH : RegExp, - NOT_PATH_NOSCHEME : RegExp, - NOT_QUERY : RegExp, - NOT_FRAGMENT : RegExp, - ESCAPE : RegExp, - UNRESERVED : RegExp, - OTHER_CHARS : RegExp, - PCT_ENCODED : RegExp, - IPV4ADDRESS : RegExp, - IPV6ADDRESS : RegExp, -} - -export const SCHEMES:{[scheme:string]:URISchemeHandler} = {}; - -export function pctEncChar(chr:string):string { - const c = chr.charCodeAt(0); - let e:string; - - if (c < 16) e = "%0" + c.toString(16).toUpperCase(); - else if (c < 128) e = "%" + c.toString(16).toUpperCase(); - else if (c < 2048) e = "%" + ((c >> 6) | 192).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); - else e = "%" + ((c >> 12) | 224).toString(16).toUpperCase() + "%" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); - - return e; -} - -export function pctDecChars(str:string):string { - let newStr = ""; - let i = 0; - const il = str.length; - - while (i < il) { - const c = parseInt(str.substr(i + 1, 2), 16); - - if (c < 128) { - newStr += String.fromCharCode(c); - i += 3; - } - else if (c >= 194 && c < 224) { - if ((il - i) >= 6) { - const c2 = parseInt(str.substr(i + 4, 2), 16); - newStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); - } else { - newStr += str.substr(i, 6); - } - i += 6; - } - else if (c >= 224) { - if ((il - i) >= 9) { - const c2 = parseInt(str.substr(i + 4, 2), 16); - const c3 = parseInt(str.substr(i + 7, 2), 16); - newStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - } else { - newStr += str.substr(i, 9); - } - i += 9; - } - else { - newStr += str.substr(i, 3); - i += 3; - } - } - - return newStr; -} - -function _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) { - function decodeUnreserved(str:string):string { - const decStr = pctDecChars(str); - return (!decStr.match(protocol.UNRESERVED) ? str : decStr); - } - - if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); - if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - - return components; -}; - -function _stripLeadingZeros(str:string):string { - return str.replace(/^0*(.*)/, "$1") || "0"; -} - -function _normalizeIPv4(host:string, protocol:URIRegExps):string { - const matches = host.match(protocol.IPV4ADDRESS) || []; - const [, address] = matches; - - if (address) { - return address.split(".").map(_stripLeadingZeros).join("."); - } else { - return host; - } -} - -function _normalizeIPv6(host:string, protocol:URIRegExps):string { - const matches = host.match(protocol.IPV6ADDRESS) || []; - const [, address, zone] = matches; - - if (address) { - const [last, first] = address.toLowerCase().split('::').reverse(); - const firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; - const lastFields = last.split(":").map(_stripLeadingZeros); - const isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); - const fieldCount = isLastFieldIPv4Address ? 7 : 8; - const lastFieldsStart = lastFields.length - fieldCount; - const fields = Array(fieldCount); - - for (let x = 0; x < fieldCount; ++x) { - fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; - } - - if (isLastFieldIPv4Address) { - fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); - } - - const allZeroFields = fields.reduce>((acc, field, index) => { - if (!field || field === "0") { - const lastLongest = acc[acc.length - 1]; - if (lastLongest && lastLongest.index + lastLongest.length === index) { - lastLongest.length++; - } else { - acc.push({ index, length : 1 }); - } - } - return acc; - }, []); - - const longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0]; - - let newHost:string; - if (longestZeroFields && longestZeroFields.length > 1) { - const newFirst = fields.slice(0, longestZeroFields.index) ; - const newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); - newHost = newFirst.join(":") + "::" + newLast.join(":"); - } else { - newHost = fields.join(":"); - } - - if (zone) { - newHost += "%" + zone; - } - - return newHost; - } else { - return host; - } -} - -const URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; -const NO_MATCH_IS_UNDEFINED = (("").match(/(){0}/))[1] === undefined; - -export function parse(uriString:string, options:URIOptions = {}):URIComponents { - const components:URIComponents = {}; - const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); - - if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; - - const matches = uriString.match(URI_PARSE); - - if (matches) { - if (NO_MATCH_IS_UNDEFINED) { - //store each component - components.scheme = matches[1]; - components.userinfo = matches[3]; - components.host = matches[4]; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = matches[7]; - components.fragment = matches[8]; - - //fix port number - if (isNaN(components.port)) { - components.port = matches[5]; - } - } else { //IE FIX for improper RegExp matching - //store each component - components.scheme = matches[1] || undefined; - components.userinfo = (uriString.indexOf("@") !== -1 ? matches[3] : undefined); - components.host = (uriString.indexOf("//") !== -1 ? matches[4] : undefined); - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = (uriString.indexOf("?") !== -1 ? matches[7] : undefined); - components.fragment = (uriString.indexOf("#") !== -1 ? matches[8] : undefined); - - //fix port number - if (isNaN(components.port)) { - components.port = (uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined); - } - } - - if (components.host) { - //normalize IP hosts - components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); - } - - //determine reference type - if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { - components.reference = "same-document"; - } else if (components.scheme === undefined) { - components.reference = "relative"; - } else if (components.fragment === undefined) { - components.reference = "absolute"; - } else { - components.reference = "uri"; - } - - //check for reference errors - if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { - components.error = components.error || "URI is not a " + options.reference + " reference."; - } - - //find scheme handler - const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - - //check if scheme can't handle IRIs - if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { - //if host component is a domain name - if (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) { - //convert Unicode IDN -> ASCII IDN - try { - components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; - } - } - //convert IRI -> URI - _normalizeComponentEncoding(components, URI_PROTOCOL); - } else { - //normalize encodings - _normalizeComponentEncoding(components, protocol); - } - - //perform scheme specific parsing - if (schemeHandler && schemeHandler.parse) { - schemeHandler.parse(components, options); - } - } else { - components.error = components.error || "URI can not be parsed."; - } - - return components; -}; - -function _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined { - const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); - const uriTokens:Array = []; - - if (components.userinfo !== undefined) { - uriTokens.push(components.userinfo); - uriTokens.push("@"); - } - - if (components.host !== undefined) { - //normalize IP hosts, add brackets and escape zone separator for IPv6 - uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => "[" + $1 + ($2 ? "%25" + $2 : "") + "]")); - } - - if (typeof components.port === "number") { - uriTokens.push(":"); - uriTokens.push(components.port.toString(10)); - } - - return uriTokens.length ? uriTokens.join("") : undefined; -}; - -const RDS1 = /^\.\.?\//; -const RDS2 = /^\/\.(\/|$)/; -const RDS3 = /^\/\.\.(\/|$)/; -const RDS4 = /^\.\.?$/; -const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; - -export function removeDotSegments(input:string):string { - const output:Array = []; - - while (input.length) { - if (input.match(RDS1)) { - input = input.replace(RDS1, ""); - } else if (input.match(RDS2)) { - input = input.replace(RDS2, "/"); - } else if (input.match(RDS3)) { - input = input.replace(RDS3, "/"); - output.pop(); - } else if (input === "." || input === "..") { - input = ""; - } else { - const im = input.match(RDS5); - if (im) { - const s = im[0]; - input = input.slice(s.length); - output.push(s); - } else { - throw new Error("Unexpected dot segment condition"); - } - } - } - - return output.join(""); -}; - -export function serialize(components:URIComponents, options:URIOptions = {}):string { - const protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL); - const uriTokens:Array = []; - - //find scheme handler - const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - - //perform scheme specific serialization - if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); - - if (components.host) { - //if host component is an IPv6 address - if (protocol.IPV6ADDRESS.test(components.host)) { - //TODO: normalize IPv6 address as per RFC 5952 - } - - //if host component is a domain name - else if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) { - //convert IDN via punycode - try { - components.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host)); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - } - } - - //normalize encoding - _normalizeComponentEncoding(components, protocol); - - if (options.reference !== "suffix" && components.scheme) { - uriTokens.push(components.scheme); - uriTokens.push(":"); - } - - const authority = _recomposeAuthority(components, options); - if (authority !== undefined) { - if (options.reference !== "suffix") { - uriTokens.push("//"); - } - - uriTokens.push(authority); - - if (components.path && components.path.charAt(0) !== "/") { - uriTokens.push("/"); - } - } - - if (components.path !== undefined) { - let s = components.path; - - if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { - s = removeDotSegments(s); - } - - if (authority === undefined) { - s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" - } - - uriTokens.push(s); - } - - if (components.query !== undefined) { - uriTokens.push("?"); - uriTokens.push(components.query); - } - - if (components.fragment !== undefined) { - uriTokens.push("#"); - uriTokens.push(components.fragment); - } - - return uriTokens.join(""); //merge tokens into a string -}; - -export function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents { - const target:URIComponents = {}; - - if (!skipNormalization) { - base = parse(serialize(base, options), options); //normalize base components - relative = parse(serialize(relative, options), options); //normalize relative components - } - options = options || {}; - - if (!options.tolerant && relative.scheme) { - target.scheme = relative.scheme; - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (!relative.path) { - target.path = base.path; - if (relative.query !== undefined) { - target.query = relative.query; - } else { - target.query = base.query; - } - } else { - if (relative.path.charAt(0) === "/") { - target.path = removeDotSegments(relative.path); - } else { - if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { - target.path = "/" + relative.path; - } else if (!base.path) { - target.path = relative.path; - } else { - target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; - } - target.path = removeDotSegments(target.path); - } - target.query = relative.query; - } - //target.authority = base.authority; - target.userinfo = base.userinfo; - target.host = base.host; - target.port = base.port; - } - target.scheme = base.scheme; - } - - target.fragment = relative.fragment; - - return target; -}; - -export function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string { - const schemelessOptions = assign({ scheme : 'null' }, options); - return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); -}; - -export function normalize(uri:string, options?:URIOptions):string; -export function normalize(uri:URIComponents, options?:URIOptions):URIComponents; -export function normalize(uri:any, options?:URIOptions):any { - if (typeof uri === "string") { - uri = serialize(parse(uri, options), options); - } else if (typeOf(uri) === "object") { - uri = parse(serialize(uri, options), options); - } - - return uri; -}; - -export function equal(uriA:string, uriB:string, options?: URIOptions):boolean; -export function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean; -export function equal(uriA:any, uriB:any, options?:URIOptions):boolean { - if (typeof uriA === "string") { - uriA = serialize(parse(uriA, options), options); - } else if (typeOf(uriA) === "object") { - uriA = serialize(uriA, options); - } - - if (typeof uriB === "string") { - uriB = serialize(parse(uriB, options), options); - } else if (typeOf(uriB) === "object") { - uriB = serialize(uriB, options); - } - - return uriA === uriB; -}; - -export function escapeComponent(str:string, options?:URIOptions):string { - return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar); -}; - -export function unescapeComponent(str:string, options?:URIOptions):string { - return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars); -}; diff --git a/truebit-implementation/node_modules/uri-js/src/util.ts b/truebit-implementation/node_modules/uri-js/src/util.ts deleted file mode 100644 index 29c6d5d4..00000000 --- a/truebit-implementation/node_modules/uri-js/src/util.ts +++ /dev/null @@ -1,40 +0,0 @@ -export function merge(...sets:Array):string { - if (sets.length > 1) { - sets[0] = sets[0].slice(0, -1); - const xl = sets.length - 1; - for (let x = 1; x < xl; ++x) { - sets[x] = sets[x].slice(1, -1); - } - sets[xl] = sets[xl].slice(1); - return sets.join(''); - } else { - return sets[0]; - } -} - -export function subexp(str:string):string { - return "(?:" + str + ")"; -} - -export function typeOf(o:any):string { - return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase()); -} - -export function toUpperCase(str:string):string { - return str.toUpperCase(); -} - -export function toArray(obj:any):Array { - return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : []; -} - - -export function assign(target: object, source: any): any { - const obj = target as any; - if (source) { - for (const key in source) { - obj[key] = source[key]; - } - } - return obj; -} \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/tests/qunit.css b/truebit-implementation/node_modules/uri-js/tests/qunit.css deleted file mode 100644 index a2e183d5..00000000 --- a/truebit-implementation/node_modules/uri-js/tests/qunit.css +++ /dev/null @@ -1,118 +0,0 @@ -ol#qunit-tests { - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - margin:0; - padding:0; - list-style-position:inside; - - font-size: smaller; -} -ol#qunit-tests li{ - padding:0.4em 0.5em 0.4em 2.5em; - border-bottom:1px solid #fff; - font-size:small; - list-style-position:inside; -} -ol#qunit-tests li ol{ - box-shadow: inset 0px 2px 13px #999; - -moz-box-shadow: inset 0px 2px 13px #999; - -webkit-box-shadow: inset 0px 2px 13px #999; - margin-top:0.5em; - margin-left:0; - padding:0.5em; - background-color:#fff; - border-radius:15px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; -} -ol#qunit-tests li li{ - border-bottom:none; - margin:0.5em; - background-color:#fff; - list-style-position: inside; - padding:0.4em 0.5em 0.4em 0.5em; -} - -ol#qunit-tests li li.pass{ - border-left:26px solid #C6E746; - background-color:#fff; - color:#5E740B; - } -ol#qunit-tests li li.fail{ - border-left:26px solid #EE5757; - background-color:#fff; - color:#710909; -} -ol#qunit-tests li.pass{ - background-color:#D2E0E6; - color:#528CE0; -} -ol#qunit-tests li.fail{ - background-color:#EE5757; - color:#000; -} -ol#qunit-tests li strong { - cursor:pointer; -} -h1#qunit-header{ - background-color:#0d3349; - margin:0; - padding:0.5em 0 0.5em 1em; - color:#fff; - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - border-top-right-radius:15px; - border-top-left-radius:15px; - -moz-border-radius-topright:15px; - -moz-border-radius-topleft:15px; - -webkit-border-top-right-radius:15px; - -webkit-border-top-left-radius:15px; - text-shadow: rgba(0, 0, 0, 0.5) 4px 4px 1px; -} -h2#qunit-banner{ - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - height:5px; - margin:0; - padding:0; -} -h2#qunit-banner.qunit-pass{ - background-color:#C6E746; -} -h2#qunit-banner.qunit-fail, #qunit-testrunner-toolbar { - background-color:#EE5757; -} -#qunit-testrunner-toolbar { - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - padding:0; - /*width:80%;*/ - padding:0em 0 0.5em 2em; - font-size: small; -} -h2#qunit-userAgent { - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - background-color:#2b81af; - margin:0; - padding:0; - color:#fff; - font-size: small; - padding:0.5em 0 0.5em 2.5em; - text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; -} -p#qunit-testresult{ - font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; - margin:0; - font-size: small; - color:#2b81af; - border-bottom-right-radius:15px; - border-bottom-left-radius:15px; - -moz-border-radius-bottomright:15px; - -moz-border-radius-bottomleft:15px; - -webkit-border-bottom-right-radius:15px; - -webkit-border-bottom-left-radius:15px; - background-color:#D2E0E6; - padding:0.5em 0.5em 0.5em 2.5em; -} -strong b.fail{ - color:#710909; - } -strong b.pass{ - color:#5E740B; - } \ No newline at end of file diff --git a/truebit-implementation/node_modules/uri-js/tests/qunit.js b/truebit-implementation/node_modules/uri-js/tests/qunit.js deleted file mode 100644 index e449fdf8..00000000 --- a/truebit-implementation/node_modules/uri-js/tests/qunit.js +++ /dev/null @@ -1,1042 +0,0 @@ -/* - * QUnit - A JavaScript Unit Testing Framework - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2009 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - */ - -(function(window) { - -var QUnit = { - - // Initialize the configuration options - init: function() { - config = { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: +new Date, - blocking: false, - autorun: false, - assertions: [], - filters: [], - queue: [] - }; - - var tests = id("qunit-tests"), - banner = id("qunit-banner"), - result = id("qunit-testresult"); - - if ( tests ) { - tests.innerHTML = ""; - } - - if ( banner ) { - banner.className = ""; - } - - if ( result ) { - result.parentNode.removeChild( result ); - } - }, - - // call on start of module test to prepend name to all tests - module: function(name, testEnvironment) { - config.currentModule = name; - - synchronize(function() { - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - config.currentModule = name; - config.moduleTestEnvironment = testEnvironment; - config.moduleStats = { all: 0, bad: 0 }; - - QUnit.moduleStart( name, testEnvironment ); - }); - }, - - asyncTest: function(testName, expected, callback) { - if ( arguments.length === 2 ) { - callback = expected; - expected = 0; - } - - QUnit.test(testName, expected, callback, true); - }, - - test: function(testName, expected, callback, async) { - var name = testName, testEnvironment, testEnvironmentArg; - - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - // is 2nd argument a testEnvironment? - if ( expected && typeof expected === 'object') { - testEnvironmentArg = expected; - expected = null; - } - - if ( config.currentModule ) { - name = config.currentModule + " module: " + name; - } - - if ( !validTest(name) ) { - return; - } - - synchronize(function() { - QUnit.testStart( testName ); - - testEnvironment = extend({ - setup: function() {}, - teardown: function() {} - }, config.moduleTestEnvironment); - if (testEnvironmentArg) { - extend(testEnvironment,testEnvironmentArg); - } - - // allow utility functions to access the current test environment - QUnit.current_testEnvironment = testEnvironment; - - config.assertions = []; - config.expected = expected; - - try { - if ( !config.pollution ) { - saveGlobal(); - } - - testEnvironment.setup.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Setup failed on " + name + ": " + e.message ); - } - - if ( async ) { - QUnit.stop(); - } - - try { - callback.call(testEnvironment); - } catch(e) { - fail("Test " + name + " died, exception and test follows", e, callback); - QUnit.ok( false, "Died on test #" + (config.assertions.length + 1) + ": " + e.message ); - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if ( config.blocking ) { - start(); - } - } - }); - - synchronize(function() { - try { - checkPollution(); - testEnvironment.teardown.call(testEnvironment); - } catch(e) { - QUnit.ok( false, "Teardown failed on " + name + ": " + e.message ); - } - - try { - QUnit.reset(); - } catch(e) { - fail("reset() failed, following Test " + name + ", exception and reset fn follows", e, reset); - } - - if ( config.expected && config.expected != config.assertions.length ) { - QUnit.ok( false, "Expected " + config.expected + " assertions, but " + config.assertions.length + " were run" ); - } - - var good = 0, bad = 0, - tests = id("qunit-tests"); - - config.stats.all += config.assertions.length; - config.moduleStats.all += config.assertions.length; - - if ( tests ) { - var ol = document.createElement("ol"); - ol.style.display = "none"; - - for ( var i = 0; i < config.assertions.length; i++ ) { - var assertion = config.assertions[i]; - - var li = document.createElement("li"); - li.className = assertion.result ? "pass" : "fail"; - li.appendChild(document.createTextNode(assertion.message || "(no message)")); - ol.appendChild( li ); - - if ( assertion.result ) { - good++; - } else { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - - var b = document.createElement("strong"); - b.innerHTML = name + " (" + bad + ", " + good + ", " + config.assertions.length + ")"; - - addEvent(b, "click", function() { - var next = b.nextSibling, display = next.style.display; - next.style.display = display === "none" ? "block" : "none"; - }); - - addEvent(b, "dblclick", function(e) { - var target = e && e.target ? e.target : window.event.srcElement; - if ( target.nodeName.toLowerCase() === "strong" ) { - var text = "", node = target.firstChild; - - while ( node.nodeType === 3 ) { - text += node.nodeValue; - node = node.nextSibling; - } - - text = text.replace(/(^\s*|\s*$)/g, ""); - - if ( window.location ) { - window.location.href = window.location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent(text); - } - } - }); - - var li = document.createElement("li"); - li.className = bad ? "fail" : "pass"; - li.appendChild( b ); - li.appendChild( ol ); - tests.appendChild( li ); - - if ( bad ) { - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "block"; - id("qunit-filter-pass").disabled = null; - id("qunit-filter-missing").disabled = null; - } - } - - } else { - for ( var i = 0; i < config.assertions.length; i++ ) { - if ( !config.assertions[i].result ) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - } - - QUnit.testDone( testName, bad, config.assertions.length ); - - if ( !window.setTimeout && !config.queue.length ) { - done(); - } - }); - - if ( window.setTimeout && !config.doneTimer ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - } - }, - - /** - * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. - */ - expect: function(asserts) { - config.expected = asserts; - }, - - /** - * Asserts true. - * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); - */ - ok: function(a, msg) { - QUnit.log(a, msg); - - config.assertions.push({ - result: !!a, - message: msg - }); - }, - - /** - * Checks that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * - * Prefered to ok( actual == expected, message ) - * - * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); - * - * @param Object actual - * @param Object expected - * @param String message (optional) - */ - equal: function(actual, expected, message) { - push(expected == actual, actual, expected, message); - }, - - notEqual: function(actual, expected, message) { - push(expected != actual, actual, expected, message); - }, - - deepEqual: function(a, b, message) { - push(QUnit.equiv(a, b), a, b, message); - }, - - notDeepEqual: function(a, b, message) { - push(!QUnit.equiv(a, b), a, b, message); - }, - - strictEqual: function(actual, expected, message) { - push(expected === actual, actual, expected, message); - }, - - notStrictEqual: function(actual, expected, message) { - push(expected !== actual, actual, expected, message); - }, - - start: function() { - // A slight delay, to avoid any current callbacks - if ( window.setTimeout ) { - window.setTimeout(function() { - if ( config.timeout ) { - clearTimeout(config.timeout); - } - - config.blocking = false; - process(); - }, 13); - } else { - config.blocking = false; - process(); - } - }, - - stop: function(timeout) { - config.blocking = true; - - if ( timeout && window.setTimeout ) { - config.timeout = window.setTimeout(function() { - QUnit.ok( false, "Test timed out" ); - QUnit.start(); - }, timeout); - } - }, - - /** - * Resets the test setup. Useful for tests that modify the DOM. - */ - reset: function() { - if ( window.jQuery ) { - jQuery("#main").html( config.fixture ); - jQuery.event.global = {}; - jQuery.ajaxSettings = extend({}, config.ajaxSettings); - } - }, - - /** - * Trigger an event on an element. - * - * @example triggerEvent( document.body, "click" ); - * - * @param DOMElement elem - * @param String type - */ - triggerEvent: function( elem, type, event ) { - if ( document.createEvent ) { - event = document.createEvent("MouseEvents"); - event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, - 0, 0, 0, 0, 0, false, false, false, false, 0, null); - elem.dispatchEvent( event ); - - } else if ( elem.fireEvent ) { - elem.fireEvent("on"+type); - } - }, - - // Safe object type checking - is: function( type, obj ) { - return Object.prototype.toString.call( obj ) === "[object "+ type +"]"; - }, - - // Logging callbacks - done: function(failures, total) {}, - log: function(result, message) {}, - testStart: function(name) {}, - testDone: function(name, failures, total) {}, - moduleStart: function(name, testEnvironment) {}, - moduleDone: function(name, failures, total) {} -}; - -// Backwards compatibility, deprecated -QUnit.equals = QUnit.equal; -QUnit.same = QUnit.deepEqual; - -// Maintain internal state -var config = { - // The queue of tests to run - queue: [], - - // block until document ready - blocking: true -}; - -// Load paramaters -(function() { - var location = window.location || { search: "", protocol: "file:" }, - GETParams = location.search.slice(1).split('&'); - - for ( var i = 0; i < GETParams.length; i++ ) { - GETParams[i] = decodeURIComponent( GETParams[i] ); - if ( GETParams[i] === "noglobals" ) { - GETParams.splice( i, 1 ); - i--; - config.noglobals = true; - } else if ( GETParams[i].search('=') > -1 ) { - GETParams.splice( i, 1 ); - i--; - } - } - - // restrict modules/tests by get parameters - config.filters = GETParams; - - // Figure out if we're running the tests from a server or not - QUnit.isLocal = !!(location.protocol === 'file:'); -})(); - -// Expose the API as global variables, unless an 'exports' -// object exists, in that case we assume we're in CommonJS -if ( typeof exports === "undefined" || typeof require === "undefined" ) { - extend(window, QUnit); - window.QUnit = QUnit; -} else { - extend(exports, QUnit); - exports.QUnit = QUnit; -} - -if ( typeof document === "undefined" || document.readyState === "complete" ) { - config.autorun = true; -} - -addEvent(window, "load", function() { - // Initialize the config, saving the execution queue - var oldconfig = extend({}, config); - QUnit.init(); - extend(config, oldconfig); - - config.blocking = false; - - var userAgent = id("qunit-userAgent"); - if ( userAgent ) { - userAgent.innerHTML = navigator.userAgent; - } - - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - toolbar.style.display = "none"; - - var filter = document.createElement("input"); - filter.type = "checkbox"; - filter.id = "qunit-filter-pass"; - filter.disabled = true; - addEvent( filter, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("pass") > -1 ) { - li[i].style.display = filter.checked ? "none" : ""; - } - } - }); - toolbar.appendChild( filter ); - - var label = document.createElement("label"); - label.setAttribute("for", "qunit-filter-pass"); - label.innerHTML = "Hide passed tests"; - toolbar.appendChild( label ); - - var missing = document.createElement("input"); - missing.type = "checkbox"; - missing.id = "qunit-filter-missing"; - missing.disabled = true; - addEvent( missing, "click", function() { - var li = document.getElementsByTagName("li"); - for ( var i = 0; i < li.length; i++ ) { - if ( li[i].className.indexOf("fail") > -1 && li[i].innerHTML.indexOf('missing test - untested code is broken code') > - 1 ) { - li[i].parentNode.parentNode.style.display = missing.checked ? "none" : "block"; - } - } - }); - toolbar.appendChild( missing ); - - label = document.createElement("label"); - label.setAttribute("for", "qunit-filter-missing"); - label.innerHTML = "Hide missing tests (untested code is broken code)"; - toolbar.appendChild( label ); - } - - var main = id('main'); - if ( main ) { - config.fixture = main.innerHTML; - } - - if ( window.jQuery ) { - config.ajaxSettings = window.jQuery.ajaxSettings; - } - - QUnit.start(); -}); - -function done() { - if ( config.doneTimer && window.clearTimeout ) { - window.clearTimeout( config.doneTimer ); - config.doneTimer = null; - } - - if ( config.queue.length ) { - config.doneTimer = window.setTimeout(function(){ - if ( !config.queue.length ) { - done(); - } else { - synchronize( done ); - } - }, 13); - - return; - } - - config.autorun = true; - - // Log the last module results - if ( config.currentModule ) { - QUnit.moduleDone( config.currentModule, config.moduleStats.bad, config.moduleStats.all ); - } - - var banner = id("qunit-banner"), - tests = id("qunit-tests"), - html = ['Tests completed in ', - +new Date - config.started, ' milliseconds.
', - '', config.stats.all - config.stats.bad, ' tests of ', config.stats.all, ' passed, ', config.stats.bad,' failed.'].join(''); - - if ( banner ) { - banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); - } - - if ( tests ) { - var result = id("qunit-testresult"); - - if ( !result ) { - result = document.createElement("p"); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore( result, tests.nextSibling ); - } - - result.innerHTML = html; - } - - QUnit.done( config.stats.bad, config.stats.all ); -} - -function validTest( name ) { - var i = config.filters.length, - run = false; - - if ( !i ) { - return true; - } - - while ( i-- ) { - var filter = config.filters[i], - not = filter.charAt(0) == '!'; - - if ( not ) { - filter = filter.slice(1); - } - - if ( name.indexOf(filter) !== -1 ) { - return !not; - } - - if ( not ) { - run = true; - } - } - - return run; -} - -function push(result, actual, expected, message) { - message = message || (result ? "okay" : "failed"); - QUnit.ok( result, result ? message + ": " + expected : message + ", expected: " + QUnit.jsDump.parse(expected) + " result: " + QUnit.jsDump.parse(actual) ); -} - -function synchronize( callback ) { - config.queue.push( callback ); - - if ( config.autorun && !config.blocking ) { - process(); - } -} - -function process() { - while ( config.queue.length && !config.blocking ) { - config.queue.shift()(); - } -} - -function saveGlobal() { - config.pollution = []; - - if ( config.noglobals ) { - for ( var key in window ) { - config.pollution.push( key ); - } - } -} - -function checkPollution( name ) { - var old = config.pollution; - saveGlobal(); - - var newGlobals = diff( old, config.pollution ); - if ( newGlobals.length > 0 ) { - ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); - config.expected++; - } - - var deletedGlobals = diff( config.pollution, old ); - if ( deletedGlobals.length > 0 ) { - ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); - config.expected++; - } -} - -// returns a new Array with the elements that are in a but not in b -function diff( a, b ) { - var result = a.slice(); - for ( var i = 0; i < result.length; i++ ) { - for ( var j = 0; j < b.length; j++ ) { - if ( result[i] === b[j] ) { - result.splice(i, 1); - i--; - break; - } - } - } - return result; -} - -function fail(message, exception, callback) { - if ( typeof console !== "undefined" && console.error && console.warn ) { - console.error(message); - console.error(exception); - console.warn(callback.toString()); - - } else if ( window.opera && opera.postError ) { - opera.postError(message, exception, callback.toString); - } -} - -function extend(a, b) { - for ( var prop in b ) { - a[prop] = b[prop]; - } - - return a; -} - -function addEvent(elem, type, fn) { - if ( elem.addEventListener ) { - elem.addEventListener( type, fn, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, fn ); - } else { - fn(); - } -} - -function id(name) { - return !!(typeof document !== "undefined" && document && document.getElementById) && - document.getElementById( name ); -} - -// Test for equality any JavaScript type. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rathé -QUnit.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - - - // Determine what is o. - function hoozit(o) { - if (QUnit.is("String", o)) { - return "string"; - - } else if (QUnit.is("Boolean", o)) { - return "boolean"; - - } else if (QUnit.is("Number", o)) { - - if (isNaN(o)) { - return "nan"; - } else { - return "number"; - } - - } else if (typeof o === "undefined") { - return "undefined"; - - // consider: typeof null === object - } else if (o === null) { - return "null"; - - // consider: typeof [] === object - } else if (QUnit.is( "Array", o)) { - return "array"; - - // consider: typeof new Date() === object - } else if (QUnit.is( "Date", o)) { - return "date"; - - // consider: /./ instanceof Object; - // /./ instanceof RegExp; - // typeof /./ === "function"; // => false in IE and Opera, - // true in FF and Safari - } else if (QUnit.is( "RegExp", o)) { - return "regexp"; - - } else if (typeof o === "object") { - return "object"; - - } else if (QUnit.is( "Function", o)) { - return "function"; - } else { - return undefined; - } - } - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = hoozit(o); - if (prop) { - if (hoozit(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - if (b instanceof a.constructor || a instanceof b.constructor) { - // to catch short annotaion VS 'new' annotation of a declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return hoozit(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return hoozit(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i; - var len; - - // b could be an object literal here - if ( ! (hoozit(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - for (i = 0; i < len; i++) { - if ( ! innerEquiv(a[i], b[i])) { - return false; - } - } - return true; - }, - - "object": function (b, a) { - var i; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if ( a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - - aProperties.push(i); // collect a's properties - - if ( ! innerEquiv(a[i], b[i])) { - eq = false; - } - } - - callers.pop(); // unstack, we are done - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || hoozit(a) !== hoozit(b)) { - return false; // don't lose time with error prone cases - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length -1)); - }; - - return innerEquiv; - -}(); - -/** - * jsDump - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) - * Date: 5/15/2008 - * @projectDescription Advanced and extensible data dumping for Javascript. - * @version 1.0.0 - * @author Ariel Flesler - * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} - */ -QUnit.jsDump = (function() { - function quote( str ) { - return '"' + str.toString().replace(/"/g, '\\"') + '"'; - }; - function literal( o ) { - return o + ''; - }; - function join( pre, arr, post ) { - var s = jsDump.separator(), - base = jsDump.indent(), - inner = jsDump.indent(1); - if ( arr.join ) - arr = arr.join( ',' + s + inner ); - if ( !arr ) - return pre + post; - return [ pre, inner + arr, base + post ].join(s); - }; - function array( arr ) { - var i = arr.length, ret = Array(i); - this.up(); - while ( i-- ) - ret[i] = this.parse( arr[i] ); - this.down(); - return join( '[', ret, ']' ); - }; - - var reName = /^function (\w+)/; - - var jsDump = { - parse:function( obj, type ) { //type is used mostly internally, you can fix a (custom)type in advance - var parser = this.parsers[ type || this.typeOf(obj) ]; - type = typeof parser; - - return type == 'function' ? parser.call( this, obj ) : - type == 'string' ? parser : - this.parsers.error; - }, - typeOf:function( obj ) { - var type; - if ( obj === null ) { - type = "null"; - } else if (typeof obj === "undefined") { - type = "undefined"; - } else if (QUnit.is("RegExp", obj)) { - type = "regexp"; - } else if (QUnit.is("Date", obj)) { - type = "date"; - } else if (QUnit.is("Function", obj)) { - type = "function"; - } else if (QUnit.is("Array", obj)) { - type = "array"; - } else if (QUnit.is("Window", obj) || QUnit.is("global", obj)) { - type = "window"; - } else if (QUnit.is("HTMLDocument", obj)) { - type = "document"; - } else if (QUnit.is("HTMLCollection", obj) || QUnit.is("NodeList", obj)) { - type = "nodelist"; - } else if (/^\[object HTML/.test(Object.prototype.toString.call( obj ))) { - type = "node"; - } else { - type = typeof obj; - } - return type; - }, - separator:function() { - return this.multiline ? this.HTML ? '
' : '\n' : this.HTML ? ' ' : ' '; - }, - indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing - if ( !this.multiline ) - return ''; - var chr = this.indentChar; - if ( this.HTML ) - chr = chr.replace(/\t/g,' ').replace(/ /g,' '); - return Array( this._depth_ + (extra||0) ).join(chr); - }, - up:function( a ) { - this._depth_ += a || 1; - }, - down:function( a ) { - this._depth_ -= a || 1; - }, - setParser:function( name, parser ) { - this.parsers[name] = parser; - }, - // The next 3 are exposed so you can use them - quote:quote, - literal:literal, - join:join, - // - _depth_: 1, - // This is the list of parsers, to modify them, use jsDump.setParser - parsers:{ - window: '[Window]', - document: '[Document]', - error:'[ERROR]', //when no parser is found, shouldn't happen - unknown: '[Unknown]', - 'null':'null', - undefined:'undefined', - 'function':function( fn ) { - var ret = 'function', - name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE - if ( name ) - ret += ' ' + name; - ret += '('; - - ret = [ ret, this.parse( fn, 'functionArgs' ), '){'].join(''); - return join( ret, this.parse(fn,'functionCode'), '}' ); - }, - array: array, - nodelist: array, - arguments: array, - object:function( map ) { - var ret = [ ]; - this.up(); - for ( var key in map ) - ret.push( this.parse(key,'key') + ': ' + this.parse(map[key]) ); - this.down(); - return join( '{', ret, '}' ); - }, - node:function( node ) { - var open = this.HTML ? '<' : '<', - close = this.HTML ? '>' : '>'; - - var tag = node.nodeName.toLowerCase(), - ret = open + tag; - - for ( var a in this.DOMAttrs ) { - var val = node[this.DOMAttrs[a]]; - if ( val ) - ret += ' ' + a + '=' + this.parse( val, 'attribute' ); - } - return ret + close + open + '/' + tag + close; - }, - functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function - var l = fn.length; - if ( !l ) return ''; - - var args = Array(l); - while ( l-- ) - args[l] = String.fromCharCode(97+l);//97 is 'a' - return ' ' + args.join(', ') + ' '; - }, - key:quote, //object calls it internally, the key part of an item in a map - functionCode:'[code]', //function calls it internally, it's the content of the function - attribute:quote, //node calls it internally, it's an html attribute value - string:quote, - date:quote, - regexp:literal, //regex - number:literal, - 'boolean':literal - }, - DOMAttrs:{//attributes to dump from nodes, name=>realName - id:'id', - name:'name', - 'class':'className' - }, - HTML:true,//if true, entities are escaped ( <, >, \t, space and \n ) - indentChar:' ',//indentation unit - multiline:true //if true, items in a collection, are separated by a \n, else just a space. - }; - - return jsDump; -})(); - -})(this); diff --git a/truebit-implementation/node_modules/uri-js/tests/test-es5-min.html b/truebit-implementation/node_modules/uri-js/tests/test-es5-min.html deleted file mode 100644 index b841c757..00000000 --- a/truebit-implementation/node_modules/uri-js/tests/test-es5-min.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - -

URI.js Test Suite

-

-
-

-
    - - diff --git a/truebit-implementation/node_modules/uri-js/tests/test-es5.html b/truebit-implementation/node_modules/uri-js/tests/test-es5.html deleted file mode 100644 index 2d89c66b..00000000 --- a/truebit-implementation/node_modules/uri-js/tests/test-es5.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - -

    URI.js Test Suite

    -

    -
    -

    -
      - - diff --git a/truebit-implementation/node_modules/uri-js/tests/tests.js b/truebit-implementation/node_modules/uri-js/tests/tests.js deleted file mode 100644 index 624191ce..00000000 --- a/truebit-implementation/node_modules/uri-js/tests/tests.js +++ /dev/null @@ -1,774 +0,0 @@ -// -// -// Tests -// -// - -if (typeof URI === "undefined") { - var URI = require("../dist/es5/uri.all"); -} - -test("Acquire URI", function () { - //URI = require("./uri").URI; - ok(URI); -}); - -test("URI Parsing", function () { - var components; - - //scheme - components = URI.parse("uri:"); - strictEqual(components.error, undefined, "scheme errors"); - strictEqual(components.scheme, "uri", "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //userinfo - components = URI.parse("//@"); - strictEqual(components.error, undefined, "userinfo errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, "@", "authority"); - strictEqual(components.userinfo, "", "userinfo"); - strictEqual(components.host, "", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //host - components = URI.parse("//"); - strictEqual(components.error, undefined, "host errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, "", "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //port - components = URI.parse("//:"); - strictEqual(components.error, undefined, "port errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, ":", "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "", "host"); - strictEqual(components.port, "", "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //path - components = URI.parse(""); - strictEqual(components.error, undefined, "path errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //query - components = URI.parse("?"); - strictEqual(components.error, undefined, "query errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, "", "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //fragment - components = URI.parse("#"); - strictEqual(components.error, undefined, "fragment errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, "", "fragment"); - - //fragment with character tabulation - components = URI.parse("#\t"); - strictEqual(components.error, undefined, "path errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, "%09", "fragment"); - - //fragment with line feed - components = URI.parse("#\n"); - strictEqual(components.error, undefined, "path errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, "%0A", "fragment"); - - //fragment with line tabulation - components = URI.parse("#\v"); - strictEqual(components.error, undefined, "path errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, "%0B", "fragment"); - - //fragment with form feed - components = URI.parse("#\f"); - strictEqual(components.error, undefined, "path errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, "%0C", "fragment"); - - //fragment with carriage return - components = URI.parse("#\r"); - strictEqual(components.error, undefined, "path errors"); - strictEqual(components.scheme, undefined, "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, "%0D", "fragment"); - - //all - components = URI.parse("uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body"); - strictEqual(components.error, undefined, "all errors"); - strictEqual(components.scheme, "uri", "scheme"); - //strictEqual(components.authority, "user:pass@example.com:123", "authority"); - strictEqual(components.userinfo, "user:pass", "userinfo"); - strictEqual(components.host, "example.com", "host"); - strictEqual(components.port, 123, "port"); - strictEqual(components.path, "/one/two.three", "path"); - strictEqual(components.query, "q1=a1&q2=a2", "query"); - strictEqual(components.fragment, "body", "fragment"); - - //IPv4address - components = URI.parse("//10.10.10.10"); - strictEqual(components.error, undefined, "IPv4address errors"); - strictEqual(components.scheme, undefined, "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "10.10.10.10", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //IPv6address - components = URI.parse("//[2001:db8::7]"); - strictEqual(components.error, undefined, "IPv4address errors"); - strictEqual(components.scheme, undefined, "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "2001:db8::7", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //mixed IPv4address & IPv6address - components = URI.parse("//[::ffff:129.144.52.38]"); - strictEqual(components.error, undefined, "IPv4address errors"); - strictEqual(components.scheme, undefined, "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "::ffff:129.144.52.38", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4) - components = URI.parse("uri://10.10.10.10.example.com/en/process"); - strictEqual(components.error, undefined, "mixed errors"); - strictEqual(components.scheme, "uri", "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "10.10.10.10.example.com", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "/en/process", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //IPv6address, example from bkw (https://github.com/garycourt/uri-js/pull/16) - components = URI.parse("//[2606:2800:220:1:248:1893:25c8:1946]/test"); - strictEqual(components.error, undefined, "IPv6address errors"); - strictEqual(components.scheme, undefined, "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "2606:2800:220:1:248:1893:25c8:1946", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "/test", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //IPv6address, example from RFC 5952 - components = URI.parse("//[2001:db8::1]:80"); - strictEqual(components.error, undefined, "IPv6address errors"); - strictEqual(components.scheme, undefined, "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "2001:db8::1", "host"); - strictEqual(components.port, 80, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //IPv6address with zone identifier, RFC 6874 - components = URI.parse("//[fe80::a%25en1]"); - strictEqual(components.error, undefined, "IPv4address errors"); - strictEqual(components.scheme, undefined, "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "fe80::a%en1", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - - //IPv6address with an unescaped interface specifier, example from pekkanikander (https://github.com/garycourt/uri-js/pull/22) - components = URI.parse("//[2001:db8::7%en0]"); - strictEqual(components.error, undefined, "IPv6address interface errors"); - strictEqual(components.scheme, undefined, "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, "2001:db8::7%en0", "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, "", "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); -}); - -test("URI Serialization", function () { - var components = { - scheme : undefined, - userinfo : undefined, - host : undefined, - port : undefined, - path : undefined, - query : undefined, - fragment : undefined - }; - strictEqual(URI.serialize(components), "", "Undefined Components"); - - components = { - scheme : "", - userinfo : "", - host : "", - port : 0, - path : "", - query : "", - fragment : "" - }; - strictEqual(URI.serialize(components), "//@:0?#", "Empty Components"); - - components = { - scheme : "uri", - userinfo : "foo:bar", - host : "example.com", - port : 1, - path : "path", - query : "query", - fragment : "fragment" - }; - strictEqual(URI.serialize(components), "uri://foo:bar@example.com:1/path?query#fragment", "All Components"); - - strictEqual(URI.serialize({path:"//path"}), "/%2Fpath", "Double slash path"); - strictEqual(URI.serialize({path:"foo:bar"}), "foo%3Abar", "Colon path"); - strictEqual(URI.serialize({path:"?query"}), "%3Fquery", "Query path"); - - //mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4) - strictEqual(URI.serialize({host:"10.10.10.10.example.com"}), "//10.10.10.10.example.com", "Mixed IPv4address & reg-name"); - - //IPv6address - strictEqual(URI.serialize({host:"2001:db8::7"}), "//[2001:db8::7]", "IPv6 Host"); - strictEqual(URI.serialize({host:"::ffff:129.144.52.38"}), "//[::ffff:129.144.52.38]", "IPv6 Mixed Host"); - strictEqual(URI.serialize({host:"2606:2800:220:1:248:1893:25c8:1946"}), "//[2606:2800:220:1:248:1893:25c8:1946]", "IPv6 Full Host"); - - //IPv6address with zone identifier, RFC 6874 - strictEqual(URI.serialize({host:"fe80::a%en1"}), "//[fe80::a%25en1]", "IPv6 Zone Unescaped Host"); - strictEqual(URI.serialize({host:"fe80::a%25en1"}), "//[fe80::a%25en1]", "IPv6 Zone Escaped Host"); -}); - -test("URI Resolving", function () { - //normal examples from RFC 3986 - var base = "uri://a/b/c/d;p?q"; - strictEqual(URI.resolve(base, "g:h"), "g:h", "g:h"); - strictEqual(URI.resolve(base, "g:h"), "g:h", "g:h"); - strictEqual(URI.resolve(base, "g"), "uri://a/b/c/g", "g"); - strictEqual(URI.resolve(base, "./g"), "uri://a/b/c/g", "./g"); - strictEqual(URI.resolve(base, "g/"), "uri://a/b/c/g/", "g/"); - strictEqual(URI.resolve(base, "/g"), "uri://a/g", "/g"); - strictEqual(URI.resolve(base, "//g"), "uri://g", "//g"); - strictEqual(URI.resolve(base, "?y"), "uri://a/b/c/d;p?y", "?y"); - strictEqual(URI.resolve(base, "g?y"), "uri://a/b/c/g?y", "g?y"); - strictEqual(URI.resolve(base, "#s"), "uri://a/b/c/d;p?q#s", "#s"); - strictEqual(URI.resolve(base, "g#s"), "uri://a/b/c/g#s", "g#s"); - strictEqual(URI.resolve(base, "g?y#s"), "uri://a/b/c/g?y#s", "g?y#s"); - strictEqual(URI.resolve(base, ";x"), "uri://a/b/c/;x", ";x"); - strictEqual(URI.resolve(base, "g;x"), "uri://a/b/c/g;x", "g;x"); - strictEqual(URI.resolve(base, "g;x?y#s"), "uri://a/b/c/g;x?y#s", "g;x?y#s"); - strictEqual(URI.resolve(base, ""), "uri://a/b/c/d;p?q", ""); - strictEqual(URI.resolve(base, "."), "uri://a/b/c/", "."); - strictEqual(URI.resolve(base, "./"), "uri://a/b/c/", "./"); - strictEqual(URI.resolve(base, ".."), "uri://a/b/", ".."); - strictEqual(URI.resolve(base, "../"), "uri://a/b/", "../"); - strictEqual(URI.resolve(base, "../g"), "uri://a/b/g", "../g"); - strictEqual(URI.resolve(base, "../.."), "uri://a/", "../.."); - strictEqual(URI.resolve(base, "../../"), "uri://a/", "../../"); - strictEqual(URI.resolve(base, "../../g"), "uri://a/g", "../../g"); - - //abnormal examples from RFC 3986 - strictEqual(URI.resolve(base, "../../../g"), "uri://a/g", "../../../g"); - strictEqual(URI.resolve(base, "../../../../g"), "uri://a/g", "../../../../g"); - - strictEqual(URI.resolve(base, "/./g"), "uri://a/g", "/./g"); - strictEqual(URI.resolve(base, "/../g"), "uri://a/g", "/../g"); - strictEqual(URI.resolve(base, "g."), "uri://a/b/c/g.", "g."); - strictEqual(URI.resolve(base, ".g"), "uri://a/b/c/.g", ".g"); - strictEqual(URI.resolve(base, "g.."), "uri://a/b/c/g..", "g.."); - strictEqual(URI.resolve(base, "..g"), "uri://a/b/c/..g", "..g"); - - strictEqual(URI.resolve(base, "./../g"), "uri://a/b/g", "./../g"); - strictEqual(URI.resolve(base, "./g/."), "uri://a/b/c/g/", "./g/."); - strictEqual(URI.resolve(base, "g/./h"), "uri://a/b/c/g/h", "g/./h"); - strictEqual(URI.resolve(base, "g/../h"), "uri://a/b/c/h", "g/../h"); - strictEqual(URI.resolve(base, "g;x=1/./y"), "uri://a/b/c/g;x=1/y", "g;x=1/./y"); - strictEqual(URI.resolve(base, "g;x=1/../y"), "uri://a/b/c/y", "g;x=1/../y"); - - strictEqual(URI.resolve(base, "g?y/./x"), "uri://a/b/c/g?y/./x", "g?y/./x"); - strictEqual(URI.resolve(base, "g?y/../x"), "uri://a/b/c/g?y/../x", "g?y/../x"); - strictEqual(URI.resolve(base, "g#s/./x"), "uri://a/b/c/g#s/./x", "g#s/./x"); - strictEqual(URI.resolve(base, "g#s/../x"), "uri://a/b/c/g#s/../x", "g#s/../x"); - - strictEqual(URI.resolve(base, "uri:g"), "uri:g", "uri:g"); - strictEqual(URI.resolve(base, "uri:g", {tolerant:true}), "uri://a/b/c/g", "uri:g"); - - //examples by PAEz - strictEqual(URI.resolve("//www.g.com/","/adf\ngf"), "//www.g.com/adf%0Agf", "/adf\\ngf"); - strictEqual(URI.resolve("//www.g.com/error\n/bleh/bleh",".."), "//www.g.com/error%0A/", "//www.g.com/error\\n/bleh/bleh"); -}); - -test("URI Normalizing", function () { - //test from RFC 3987 - strictEqual(URI.normalize("uri://www.example.org/red%09ros\xE9#red"), "uri://www.example.org/red%09ros%C3%A9#red"); - - //IPv4address - strictEqual(URI.normalize("//192.068.001.000"), "//192.68.1.0"); - - //IPv6address, example from RFC 3513 - strictEqual(URI.normalize("http://[1080::8:800:200C:417A]/"), "http://[1080::8:800:200c:417a]/"); - - //IPv6address, examples from RFC 5952 - strictEqual(URI.normalize("//[2001:0db8::0001]/"), "//[2001:db8::1]/"); - strictEqual(URI.normalize("//[2001:db8::1:0000:1]/"), "//[2001:db8::1:0:1]/"); - strictEqual(URI.normalize("//[2001:db8:0:0:0:0:2:1]/"), "//[2001:db8::2:1]/"); - strictEqual(URI.normalize("//[2001:db8:0:1:1:1:1:1]/"), "//[2001:db8:0:1:1:1:1:1]/"); - strictEqual(URI.normalize("//[2001:0:0:1:0:0:0:1]/"), "//[2001:0:0:1::1]/"); - strictEqual(URI.normalize("//[2001:db8:0:0:1:0:0:1]/"), "//[2001:db8::1:0:0:1]/"); - strictEqual(URI.normalize("//[2001:DB8::1]/"), "//[2001:db8::1]/"); - strictEqual(URI.normalize("//[0:0:0:0:0:ffff:192.0.2.1]/"), "//[::ffff:192.0.2.1]/"); - - //Mixed IPv4 and IPv6 address - strictEqual(URI.normalize("//[1:2:3:4:5:6:192.0.2.1]/"), "//[1:2:3:4:5:6:192.0.2.1]/"); - strictEqual(URI.normalize("//[1:2:3:4:5:6:192.068.001.000]/"), "//[1:2:3:4:5:6:192.68.1.0]/"); -}); - -test("URI Equals", function () { - //test from RFC 3986 - strictEqual(URI.equal("example://a/b/c/%7Bfoo%7D", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d"), true); - - //test from RFC 3987 - strictEqual(URI.equal("http://example.org/~user", "http://example.org/%7euser"), true); -}); - -test("Escape Component", function () { - var chr; - for (var d = 0; d <= 129; ++d) { - chr = String.fromCharCode(d); - if (!chr.match(/[\$\&\+\,\;\=]/)) { - strictEqual(URI.escapeComponent(chr), encodeURIComponent(chr)); - } else { - strictEqual(URI.escapeComponent(chr), chr); - } - } - strictEqual(URI.escapeComponent("\u00c0"), encodeURIComponent("\u00c0")); - strictEqual(URI.escapeComponent("\u07ff"), encodeURIComponent("\u07ff")); - strictEqual(URI.escapeComponent("\u0800"), encodeURIComponent("\u0800")); - strictEqual(URI.escapeComponent("\u30a2"), encodeURIComponent("\u30a2")); -}); - -test("Unescape Component", function () { - var chr; - for (var d = 0; d <= 129; ++d) { - chr = String.fromCharCode(d); - strictEqual(URI.unescapeComponent(encodeURIComponent(chr)), chr); - } - strictEqual(URI.unescapeComponent(encodeURIComponent("\u00c0")), "\u00c0"); - strictEqual(URI.unescapeComponent(encodeURIComponent("\u07ff")), "\u07ff"); - strictEqual(URI.unescapeComponent(encodeURIComponent("\u0800")), "\u0800"); - strictEqual(URI.unescapeComponent(encodeURIComponent("\u30a2")), "\u30a2"); -}); - -// -// IRI -// - - - -var IRI_OPTION = { iri : true, unicodeSupport : true }; - -test("IRI Parsing", function () { - var components = URI.parse("uri://us\xA0er:pa\uD7FFss@example.com:123/o\uF900ne/t\uFDCFwo.t\uFDF0hree?q1=a1\uF8FF\uE000&q2=a2#bo\uFFEFdy", IRI_OPTION); - strictEqual(components.error, undefined, "all errors"); - strictEqual(components.scheme, "uri", "scheme"); - //strictEqual(components.authority, "us\xA0er:pa\uD7FFss@example.com:123", "authority"); - strictEqual(components.userinfo, "us\xA0er:pa\uD7FFss", "userinfo"); - strictEqual(components.host, "example.com", "host"); - strictEqual(components.port, 123, "port"); - strictEqual(components.path, "/o\uF900ne/t\uFDCFwo.t\uFDF0hree", "path"); - strictEqual(components.query, "q1=a1\uF8FF\uE000&q2=a2", "query"); - strictEqual(components.fragment, "bo\uFFEFdy", "fragment"); -}); - -test("IRI Serialization", function () { - var components = { - scheme : "uri", - userinfo : "us\xA0er:pa\uD7FFss", - host : "example.com", - port : 123, - path : "/o\uF900ne/t\uFDCFwo.t\uFDF0hree", - query : "q1=a1\uF8FF\uE000&q2=a2", - fragment : "bo\uFFEFdy\uE001" - }; - strictEqual(URI.serialize(components, IRI_OPTION), "uri://us\xA0er:pa\uD7FFss@example.com:123/o\uF900ne/t\uFDCFwo.t\uFDF0hree?q1=a1\uF8FF\uE000&q2=a2#bo\uFFEFdy%EE%80%81"); -}); - -test("IRI Normalizing", function () { - strictEqual(URI.normalize("uri://www.example.org/red%09ros\xE9#red", IRI_OPTION), "uri://www.example.org/red%09ros\xE9#red"); -}); - -test("IRI Equals", function () { - //example from RFC 3987 - strictEqual(URI.equal("example://a/b/c/%7Bfoo%7D/ros\xE9", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d/ros%C3%A9", IRI_OPTION), true); -}); - -test("Convert IRI to URI", function () { - //example from RFC 3987 - strictEqual(URI.serialize(URI.parse("uri://www.example.org/red%09ros\xE9#red", IRI_OPTION)), "uri://www.example.org/red%09ros%C3%A9#red"); - - //Internationalized Domain Name conversion via punycode example from RFC 3987 - strictEqual(URI.serialize(URI.parse("uri://r\xE9sum\xE9.example.org", {iri:true, domainHost:true}), {domainHost:true}), "uri://xn--rsum-bpad.example.org"); -}); - -test("Convert URI to IRI", function () { - //examples from RFC 3987 - strictEqual(URI.serialize(URI.parse("uri://www.example.org/D%C3%BCrst"), IRI_OPTION), "uri://www.example.org/D\xFCrst"); - strictEqual(URI.serialize(URI.parse("uri://www.example.org/D%FCrst"), IRI_OPTION), "uri://www.example.org/D%FCrst"); - strictEqual(URI.serialize(URI.parse("uri://xn--99zt52a.example.org/%e2%80%ae"), IRI_OPTION), "uri://xn--99zt52a.example.org/%E2%80%AE"); //or uri://\u7D0D\u8C46.example.org/%E2%80%AE - - //Internationalized Domain Name conversion via punycode example from RFC 3987 - strictEqual(URI.serialize(URI.parse("uri://xn--rsum-bpad.example.org", {domainHost:true}), {iri:true, domainHost:true}), "uri://r\xE9sum\xE9.example.org"); -}); - -// -// HTTP -// - -if (URI.SCHEMES["http"]) { - - //module("HTTP"); - - test("HTTP Equals", function () { - //test from RFC 2616 - strictEqual(URI.equal("http://abc.com:80/~smith/home.html", "http://abc.com/~smith/home.html"), true); - strictEqual(URI.equal("http://ABC.com/%7Esmith/home.html", "http://abc.com/~smith/home.html"), true); - strictEqual(URI.equal("http://ABC.com:/%7esmith/home.html", "http://abc.com/~smith/home.html"), true); - strictEqual(URI.equal("HTTP://ABC.COM", "http://abc.com/"), true); - //test from RFC 3986 - strictEqual(URI.equal("http://example.com:/", "http://example.com:80/"), true); - }); - -} - -if (URI.SCHEMES["https"]) { - - //module("HTTPS"); - - test("HTTPS Equals", function () { - strictEqual(URI.equal("https://example.com", "https://example.com:443/"), true); - strictEqual(URI.equal("https://example.com:/", "https://example.com:443/"), true); - }); - -} - -// -// URN -// - -if (URI.SCHEMES["urn"]) { - - //module("URN"); - - test("URN Parsing", function () { - //example from RFC 2141 - var components = URI.parse("urn:foo:a123,456"); - strictEqual(components.error, undefined, "errors"); - strictEqual(components.scheme, "urn", "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, undefined, "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - strictEqual(components.nid, "foo", "nid"); - strictEqual(components.nss, "a123,456", "nss"); - }); - - test("URN Serialization", function () { - //example from RFC 2141 - var components = { - scheme : "urn", - nid : "foo", - nss : "a123,456" - }; - strictEqual(URI.serialize(components), "urn:foo:a123,456"); - }); - - test("URN Equals", function () { - //test from RFC 2141 - strictEqual(URI.equal("urn:foo:a123,456", "urn:foo:a123,456"), true); - strictEqual(URI.equal("urn:foo:a123,456", "URN:foo:a123,456"), true); - strictEqual(URI.equal("urn:foo:a123,456", "urn:FOO:a123,456"), true); - strictEqual(URI.equal("urn:foo:a123,456", "urn:foo:A123,456"), false); - strictEqual(URI.equal("urn:foo:a123%2C456", "URN:FOO:a123%2c456"), true); - }); - - test("URN Resolving", function () { - //example from epoberezkin - strictEqual(URI.resolve('', 'urn:some:ip:prop'), 'urn:some:ip:prop'); - strictEqual(URI.resolve('#', 'urn:some:ip:prop'), 'urn:some:ip:prop'); - strictEqual(URI.resolve('urn:some:ip:prop', 'urn:some:ip:prop'), 'urn:some:ip:prop'); - strictEqual(URI.resolve('urn:some:other:prop', 'urn:some:ip:prop'), 'urn:some:ip:prop'); - }); - - // - // URN UUID - // - - test("UUID Parsing", function () { - //example from RFC 4122 - var components = URI.parse("urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); - strictEqual(components.error, undefined, "errors"); - strictEqual(components.scheme, "urn", "scheme"); - //strictEqual(components.authority, undefined, "authority"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, undefined, "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - strictEqual(components.nid, "uuid", "nid"); - strictEqual(components.nss, undefined, "nss"); - strictEqual(components.uuid, "f81d4fae-7dec-11d0-a765-00a0c91e6bf6", "uuid"); - - components = URI.parse("urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6"); - notStrictEqual(components.error, undefined, "errors"); - }); - - test("UUID Serialization", function () { - //example from RFC 4122 - var components = { - scheme : "urn", - nid : "uuid", - uuid : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6" - }; - strictEqual(URI.serialize(components), "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); - - components = { - scheme : "urn", - nid : "uuid", - uuid : "notauuid-7dec-11d0-a765-00a0c91e6bf6" - }; - strictEqual(URI.serialize(components), "urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6"); - }); - - test("UUID Equals", function () { - strictEqual(URI.equal("URN:UUID:F81D4FAE-7DEC-11D0-A765-00A0C91E6BF6", "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"), true); - }); - - test("URN NID Override", function () { - var components = URI.parse("urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6", {nid:"uuid"}); - strictEqual(components.error, undefined, "errors"); - strictEqual(components.scheme, "urn", "scheme"); - strictEqual(components.path, undefined, "path"); - strictEqual(components.nid, "foo", "nid"); - strictEqual(components.nss, undefined, "nss"); - strictEqual(components.uuid, "f81d4fae-7dec-11d0-a765-00a0c91e6bf6", "uuid"); - - var components = { - scheme : "urn", - nid : "foo", - uuid : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6" - }; - strictEqual(URI.serialize(components, {nid:"uuid"}), "urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); - }); -} - -// -// Mailto -// - -if (URI.SCHEMES["mailto"]) { - - //module("Mailto"); - - test("Mailto Parse", function () { - var components; - - //tests from RFC 6068 - - components = URI.parse("mailto:chris@example.com"); - strictEqual(components.error, undefined, "error"); - strictEqual(components.scheme, "mailto", "scheme"); - strictEqual(components.userinfo, undefined, "userinfo"); - strictEqual(components.host, undefined, "host"); - strictEqual(components.port, undefined, "port"); - strictEqual(components.path, undefined, "path"); - strictEqual(components.query, undefined, "query"); - strictEqual(components.fragment, undefined, "fragment"); - deepEqual(components.to, ["chris@example.com"], "to"); - strictEqual(components.subject, undefined, "subject"); - strictEqual(components.body, undefined, "body"); - strictEqual(components.headers, undefined, "headers"); - - components = URI.parse("mailto:infobot@example.com?subject=current-issue"); - deepEqual(components.to, ["infobot@example.com"], "to"); - strictEqual(components.subject, "current-issue", "subject"); - - components = URI.parse("mailto:infobot@example.com?body=send%20current-issue"); - deepEqual(components.to, ["infobot@example.com"], "to"); - strictEqual(components.body, "send current-issue", "body"); - - components = URI.parse("mailto:infobot@example.com?body=send%20current-issue%0D%0Asend%20index"); - deepEqual(components.to, ["infobot@example.com"], "to"); - strictEqual(components.body, "send current-issue\x0D\x0Asend index", "body"); - - components = URI.parse("mailto:list@example.org?In-Reply-To=%3C3469A91.D10AF4C@example.com%3E"); - deepEqual(components.to, ["list@example.org"], "to"); - deepEqual(components.headers, {"In-Reply-To":"<3469A91.D10AF4C@example.com>"}, "headers"); - - components = URI.parse("mailto:majordomo@example.com?body=subscribe%20bamboo-l"); - deepEqual(components.to, ["majordomo@example.com"], "to"); - strictEqual(components.body, "subscribe bamboo-l", "body"); - - components = URI.parse("mailto:joe@example.com?cc=bob@example.com&body=hello"); - deepEqual(components.to, ["joe@example.com"], "to"); - strictEqual(components.body, "hello", "body"); - deepEqual(components.headers, {"cc":"bob@example.com"}, "headers"); - - components = URI.parse("mailto:joe@example.com?cc=bob@example.com?body=hello"); - if (URI.VALIDATE_SUPPORT) ok(components.error, "invalid header fields"); - - components = URI.parse("mailto:gorby%25kremvax@example.com"); - deepEqual(components.to, ["gorby%kremvax@example.com"], "to gorby%kremvax@example.com"); - - components = URI.parse("mailto:unlikely%3Faddress@example.com?blat=foop"); - deepEqual(components.to, ["unlikely?address@example.com"], "to unlikely?address@example.com"); - deepEqual(components.headers, {"blat":"foop"}, "headers"); - - components = URI.parse("mailto:Mike%26family@example.org"); - deepEqual(components.to, ["Mike&family@example.org"], "to Mike&family@example.org"); - - components = URI.parse("mailto:%22not%40me%22@example.org"); - deepEqual(components.to, ['"not@me"@example.org'], "to " + '"not@me"@example.org'); - - components = URI.parse("mailto:%22oh%5C%5Cno%22@example.org"); - deepEqual(components.to, ['"oh\\\\no"@example.org'], "to " + '"oh\\\\no"@example.org'); - - components = URI.parse("mailto:%22%5C%5C%5C%22it's%5C%20ugly%5C%5C%5C%22%22@example.org"); - deepEqual(components.to, ['"\\\\\\"it\'s\\ ugly\\\\\\""@example.org'], "to " + '"\\\\\\"it\'s\\ ugly\\\\\\""@example.org'); - - components = URI.parse("mailto:user@example.org?subject=caf%C3%A9"); - deepEqual(components.to, ["user@example.org"], "to"); - strictEqual(components.subject, "caf\xE9", "subject"); - - components = URI.parse("mailto:user@example.org?subject=%3D%3Futf-8%3FQ%3Fcaf%3DC3%3DA9%3F%3D"); - deepEqual(components.to, ["user@example.org"], "to"); - strictEqual(components.subject, "=?utf-8?Q?caf=C3=A9?=", "subject"); //TODO: Verify this - - components = URI.parse("mailto:user@example.org?subject=%3D%3Fiso-8859-1%3FQ%3Fcaf%3DE9%3F%3D"); - deepEqual(components.to, ["user@example.org"], "to"); - strictEqual(components.subject, "=?iso-8859-1?Q?caf=E9?=", "subject"); //TODO: Verify this - - components = URI.parse("mailto:user@example.org?subject=caf%C3%A9&body=caf%C3%A9"); - deepEqual(components.to, ["user@example.org"], "to"); - strictEqual(components.subject, "caf\xE9", "subject"); - strictEqual(components.body, "caf\xE9", "body"); - - if (URI.IRI_SUPPORT) { - components = URI.parse("mailto:user@%E7%B4%8D%E8%B1%86.example.org?subject=Test&body=NATTO"); - deepEqual(components.to, ["user@xn--99zt52a.example.org"], "to"); - strictEqual(components.subject, "Test", "subject"); - strictEqual(components.body, "NATTO", "body"); - } - - }); - - test("Mailto Serialize", function () { - var components; - - //tests from RFC 6068 - strictEqual(URI.serialize({scheme : "mailto", to : ["chris@example.com"]}), "mailto:chris@example.com"); - strictEqual(URI.serialize({scheme : "mailto", to : ["infobot@example.com"], body : "current-issue"}), "mailto:infobot@example.com?body=current-issue"); - strictEqual(URI.serialize({scheme : "mailto", to : ["infobot@example.com"], body : "send current-issue"}), "mailto:infobot@example.com?body=send%20current-issue"); - strictEqual(URI.serialize({scheme : "mailto", to : ["infobot@example.com"], body : "send current-issue\x0D\x0Asend index"}), "mailto:infobot@example.com?body=send%20current-issue%0D%0Asend%20index"); - strictEqual(URI.serialize({scheme : "mailto", to : ["list@example.org"], headers : {"In-Reply-To" : "<3469A91.D10AF4C@example.com>"}}), "mailto:list@example.org?In-Reply-To=%3C3469A91.D10AF4C@example.com%3E"); - strictEqual(URI.serialize({scheme : "mailto", to : ["majordomo@example.com"], body : "subscribe bamboo-l"}), "mailto:majordomo@example.com?body=subscribe%20bamboo-l"); - strictEqual(URI.serialize({scheme : "mailto", to : ["joe@example.com"], headers : {"cc" : "bob@example.com", "body" : "hello"}}), "mailto:joe@example.com?cc=bob@example.com&body=hello"); - strictEqual(URI.serialize({scheme : "mailto", to : ["gorby%25kremvax@example.com"]}), "mailto:gorby%25kremvax@example.com"); - strictEqual(URI.serialize({scheme : "mailto", to : ["unlikely%3Faddress@example.com"], headers : {"blat" : "foop"}}), "mailto:unlikely%3Faddress@example.com?blat=foop"); - strictEqual(URI.serialize({scheme : "mailto", to : ["Mike&family@example.org"]}), "mailto:Mike%26family@example.org"); - strictEqual(URI.serialize({scheme : "mailto", to : ['"not@me"@example.org']}), "mailto:%22not%40me%22@example.org"); - strictEqual(URI.serialize({scheme : "mailto", to : ['"oh\\\\no"@example.org']}), "mailto:%22oh%5C%5Cno%22@example.org"); - strictEqual(URI.serialize({scheme : "mailto", to : ['"\\\\\\"it\'s\\ ugly\\\\\\""@example.org']}), "mailto:%22%5C%5C%5C%22it's%5C%20ugly%5C%5C%5C%22%22@example.org"); - strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "caf\xE9"}), "mailto:user@example.org?subject=caf%C3%A9"); - strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "=?utf-8?Q?caf=C3=A9?="}), "mailto:user@example.org?subject=%3D%3Futf-8%3FQ%3Fcaf%3DC3%3DA9%3F%3D"); - strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "=?iso-8859-1?Q?caf=E9?="}), "mailto:user@example.org?subject=%3D%3Fiso-8859-1%3FQ%3Fcaf%3DE9%3F%3D"); - strictEqual(URI.serialize({scheme : "mailto", to : ["user@example.org"], subject : "caf\xE9", body : "caf\xE9"}), "mailto:user@example.org?subject=caf%C3%A9&body=caf%C3%A9"); - if (URI.IRI_SUPPORT) { - strictEqual(URI.serialize({scheme : "mailto", to : ["us\xE9r@\u7d0d\u8c46.example.org"], subject : "Test", body : "NATTO"}), "mailto:us%C3%A9r@xn--99zt52a.example.org?subject=Test&body=NATTO"); - } - - }); - - test("Mailto Equals", function () { - //tests from RFC 6068 - strictEqual(URI.equal("mailto:addr1@an.example,addr2@an.example", "mailto:?to=addr1@an.example,addr2@an.example"), true); - strictEqual(URI.equal("mailto:?to=addr1@an.example,addr2@an.example", "mailto:addr1@an.example?to=addr2@an.example"), true); - }); - -} diff --git a/truebit-implementation/node_modules/uri-js/tsconfig.json b/truebit-implementation/node_modules/uri-js/tsconfig.json deleted file mode 100644 index e2899857..00000000 --- a/truebit-implementation/node_modules/uri-js/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "module": "es2015", - "target": "esnext", - "noImplicitAny": true, - "sourceMap": true, - "alwaysStrict": true, - "declaration": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "importHelpers": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "outDir": "dist/esnext", - "strictNullChecks": true - }, - "include": [ - "src/**/*" - ] -} diff --git a/truebit-implementation/node_modules/uri-js/yarn.lock b/truebit-implementation/node_modules/uri-js/yarn.lock deleted file mode 100644 index 569687d5..00000000 --- a/truebit-implementation/node_modules/uri-js/yarn.lock +++ /dev/null @@ -1,1902 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-cli@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" - dependencies: - babel-core "^6.26.0" - babel-polyfill "^6.26.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - commander "^2.11.0" - convert-source-map "^1.5.0" - fs-readdir-recursive "^1.0.0" - glob "^7.1.2" - lodash "^4.17.4" - output-file-sync "^1.1.2" - path-is-absolute "^1.0.1" - slash "^1.0.0" - source-map "^0.5.6" - v8flags "^2.1.1" - optionalDependencies: - chokidar "^1.6.1" - -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@6, babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" - -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-external-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - -babel-plugin-transform-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.9.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-es2015@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.24.1" - babel-plugin-transform-es2015-classes "^6.24.1" - babel-plugin-transform-es2015-computed-properties "^6.24.1" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.24.1" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.24.1" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-plugin-transform-es2015-modules-systemjs "^6.24.1" - babel-plugin-transform-es2015-modules-umd "^6.24.1" - babel-plugin-transform-es2015-object-super "^6.24.1" - babel-plugin-transform-es2015-parameters "^6.24.1" - babel-plugin-transform-es2015-shorthand-properties "^6.24.1" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.24.1" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.24.1" - babel-plugin-transform-regenerator "^6.24.1" - -babel-preset-es2016@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz#f900bf93e2ebc0d276df9b8ab59724ebfd959f8b" - dependencies: - babel-plugin-transform-exponentiation-operator "^6.24.1" - -babel-preset-es2017@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz#597beadfb9f7f208bcfd8a12e9b2b29b8b2f14d1" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.24.1" - -babel-preset-latest@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz#677de069154a7485c2d25c577c02f624b85b85e8" - dependencies: - babel-preset-es2015 "^6.24.1" - babel-preset-es2016 "^6.24.1" - babel-preset-es2017 "^6.24.1" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -browser-resolve@^1.11.0: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - -buffer-crc32@^0.2.5: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - -builtin-modules@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chokidar@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - -commander@^2.11.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -convert-source-map@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -debug@2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" - dependencies: - ms "2.0.0" - -debug@^2.2.0, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -diff@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -es6-promise@^3.1.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -estree-walker@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -fs-readdir-recursive@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.5, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash@^4.17.4: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - dependencies: - mime-db "~1.33.0" - -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mocha-qunit-ui@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/mocha-qunit-ui/-/mocha-qunit-ui-0.1.3.tgz#e3e1ff1dac33222b10cef681efd7f82664141ea9" - -mocha@^3.2.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" - dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.6.8" - diff "3.2.0" - escape-string-regexp "1.0.5" - glob "7.1.1" - growl "1.9.2" - he "1.1.1" - json3 "3.3.2" - lodash.create "3.1.1" - mkdirp "0.5.1" - supports-color "3.1.2" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -nan@^2.3.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-path@^2.0.0, normalize-path@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -once@^1.3.0, once@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -output-file-sync@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" - dependencies: - graceful-fs "^4.1.4" - mkdirp "^0.5.1" - object-assign "^4.1.0" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -private@^0.1.6, private@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -rc@^1.1.7: - version "1.2.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" - -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.6: - version "1.6.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" - dependencies: - path-parse "^1.0.5" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -rollup-plugin-babel@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57" - dependencies: - babel-core "6" - babel-plugin-transform-es2015-classes "^6.9.0" - object-assign "^4.1.0" - rollup-pluginutils "^1.5.0" - -rollup-plugin-node-resolve@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.1.1.tgz#cbb783b0d15b02794d58915350b2f0d902b8ddc8" - dependencies: - browser-resolve "^1.11.0" - builtin-modules "^1.1.0" - resolve "^1.1.6" - -rollup-pluginutils@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" - dependencies: - estree-walker "^0.2.1" - minimatch "^3.0.2" - -rollup@^0.41.6: - version "0.41.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.41.6.tgz#e0d05497877a398c104d816d2733a718a7a94e2a" - dependencies: - source-map-support "^0.4.0" - -safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -sander@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" - dependencies: - es6-promise "^3.1.2" - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" - -semver@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sorcery@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.10.0.tgz#8ae90ad7d7cb05fc59f1ab0c637845d5c15a52b7" - dependencies: - buffer-crc32 "^0.2.5" - minimist "^1.2.0" - sander "^0.5.0" - sourcemap-codec "^1.3.0" - -source-map-support@^0.4.0, source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -sourcemap-codec@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.1.tgz#c8fd92d91889e902a07aee392bdd2c5863958ba2" - -sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -supports-color@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - dependencies: - has-flag "^1.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -tough-cookie@~2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -typescript@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.1.tgz#6160e4f8f195d5ba81d4876f9c0cc1fbc0820624" - -uglify-js@^2.8.14: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -uuid@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -v8flags@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - dependencies: - user-home "^1.1.1" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" diff --git a/truebit-implementation/node_modules/url-parse-lax/index.js b/truebit-implementation/node_modules/url-parse-lax/index.js deleted file mode 100644 index f9c0c65a..00000000 --- a/truebit-implementation/node_modules/url-parse-lax/index.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; -var url = require('url'); -var prependHttp = require('prepend-http'); - -module.exports = function (x) { - var withProtocol = prependHttp(x); - var parsed = url.parse(withProtocol); - - if (withProtocol !== x) { - parsed.protocol = null; - } - - return parsed; -}; diff --git a/truebit-implementation/node_modules/url-parse-lax/license b/truebit-implementation/node_modules/url-parse-lax/license deleted file mode 100644 index 654d0bfe..00000000 --- a/truebit-implementation/node_modules/url-parse-lax/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/url-parse-lax/package.json b/truebit-implementation/node_modules/url-parse-lax/package.json deleted file mode 100644 index 73fd3eba..00000000 --- a/truebit-implementation/node_modules/url-parse-lax/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "_from": "url-parse-lax@^1.0.0", - "_id": "url-parse-lax@1.0.0", - "_inBundle": false, - "_integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "_location": "/url-parse-lax", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "url-parse-lax@^1.0.0", - "name": "url-parse-lax", - "escapedName": "url-parse-lax", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "_shasum": "7af8f303645e9bd79a272e7a14ac68bc0609da73", - "_spec": "url-parse-lax@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/url-parse-lax/issues" - }, - "bundleDependencies": false, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "deprecated": false, - "description": "url.parse() with support for protocol-less URLs & IPs", - "devDependencies": { - "ava": "0.0.4" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/url-parse-lax#readme", - "keywords": [ - "url", - "uri", - "parse", - "parser", - "loose", - "lax", - "protocol", - "less", - "protocol-less", - "ip", - "ipv4", - "ipv6" - ], - "license": "MIT", - "name": "url-parse-lax", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/url-parse-lax.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/url-parse-lax/readme.md b/truebit-implementation/node_modules/url-parse-lax/readme.md deleted file mode 100644 index f2639446..00000000 --- a/truebit-implementation/node_modules/url-parse-lax/readme.md +++ /dev/null @@ -1,100 +0,0 @@ -# url-parse-lax [![Build Status](https://travis-ci.org/sindresorhus/url-parse-lax.svg?branch=master)](https://travis-ci.org/sindresorhus/url-parse-lax) - -> [`url.parse()`](https://nodejs.org/docs/latest/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost) with support for protocol-less URLs & IPs - - -## Install - -``` -$ npm install --save url-parse-lax -``` - - -## Usage - -```js -var urlParseLax = require('url-parse-lax'); - -urlParseLax('sindresorhus.com'); -/* -{ - protocol: null, - slashes: true, - auth: null, - host: 'sindresorhus.com', - port: null, - hostname: 'sindresorhus.com', - hash: null, - search: null, - query: null, - pathname: '/', - path: '/', - href: 'http://sindresorhus.com/' -} -*/ - -urlParseLax('[2001:db8::]:8000'); -/* -{ - protocol: null, - slashes: true, - auth: null, - host: '[2001:db8::]:8000', - port: '8000', - hostname: '2001:db8::', - hash: null, - search: null, - query: null, - pathname: '/', - path: '/', - href: 'http://[2001:db8::]:8000/' -} -*/ -``` - -And with the built-in `url.parse()`: - -```js -var url = require('url'); - -url.parse('sindresorhus.com'); -/* -{ - protocol: null, - slashes: null, - auth: null, - host: null, - port: null, - hostname: null, - hash: null, - search: null, - query: null, - pathname: 'sindresorhus', - path: 'sindresorhus', - href: 'sindresorhus' -} -*/ - -url.parse('[2001:db8::]:8000'); -/* -{ - protocol: null, - slashes: null, - auth: null, - host: null, - port: null, - hostname: null, - hash: null, - search: null, - query: null, - pathname: '[2001:db8::]:8000', - path: '[2001:db8::]:8000', - href: '[2001:db8::]:8000' -} -*/ -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/truebit-implementation/node_modules/url-set-query/LICENSE.md b/truebit-implementation/node_modules/url-set-query/LICENSE.md deleted file mode 100644 index 89a78cf2..00000000 --- a/truebit-implementation/node_modules/url-set-query/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) -Copyright (c) 2015 Matt DesLauriers - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/url-set-query/README.md b/truebit-implementation/node_modules/url-set-query/README.md deleted file mode 100644 index 3f74e240..00000000 --- a/truebit-implementation/node_modules/url-set-query/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# url-set-query - -[![stable](http://badges.github.io/stability-badges/dist/stable.svg)](http://github.com/badges/stability-badges) - -Small standalone function to set a query string on a URL, replacing the existing query and leaving the hash in place. - -## Example - -```js -var setQuery = require('url-set-query') - -setQuery('http://foo.com/index.html?state=open', 'beep=true') -//=> 'http://foo.com/index.html?beep=true' - -setQuery('http://foo.com/some/path#about', '?foo=5&open=true') -//=> 'http://foo.com/some/path?foo=5&open=true#about' - -setQuery('http://foo.com', 'foo=5') -//=> 'http://foo.com/?foo=5' - -// clears the query -setQuery('http://foo.com/index.html?filter=closed#about', '?') -//=> 'http://foo.com/index.html#about' -``` - -## Install - -```sh -npm install url-set-query --save -``` - -## Usage - -[![NPM](https://nodei.co/npm/url-set-query.png)](https://www.npmjs.com/package/url-set-query) - -#### `url = setQuery(url, [query])` - -Appends the given `query` String onto the URL, before the hash. If a query already exists, it will be replaced. Returns the new URL. - -If `query` is `'?'`, it is the same as clearing the query string from the `url`. - -If `query` is an empty string or undefined, no change will be made to `url`. - -## See Also - -To encode/decode from an object, see one of: - -- [querystring](https://www.npmjs.com/package/querystring) -- [query-string](https://www.npmjs.com/package/query-string) -- [qs](https://www.npmjs.com/package/qs) - - -## License - -MIT, see [LICENSE.md](http://github.com/mattdesl/url-set-query/blob/master/LICENSE.md) for details. diff --git a/truebit-implementation/node_modules/url-set-query/index.js b/truebit-implementation/node_modules/url-set-query/index.js deleted file mode 100644 index b06142e0..00000000 --- a/truebit-implementation/node_modules/url-set-query/index.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = urlSetQuery -function urlSetQuery (url, query) { - if (query) { - // remove optional leading symbols - query = query.trim().replace(/^(\?|#|&)/, '') - - // don't append empty query - query = query ? ('?' + query) : query - - var parts = url.split(/[\?\#]/) - var start = parts[0] - if (query && /\:\/\/[^\/]*$/.test(start)) { - // e.g. http://foo.com -> http://foo.com/ - start = start + '/' - } - var match = url.match(/(\#.*)$/) - url = start + query - if (match) { // add hash back in - url = url + match[0] - } - } - return url -} diff --git a/truebit-implementation/node_modules/url-set-query/package.json b/truebit-implementation/node_modules/url-set-query/package.json deleted file mode 100644 index 19f550ed..00000000 --- a/truebit-implementation/node_modules/url-set-query/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "_from": "url-set-query@^1.0.0", - "_id": "url-set-query@1.0.0", - "_inBundle": false, - "_integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=", - "_location": "/url-set-query", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "url-set-query@^1.0.0", - "name": "url-set-query", - "escapedName": "url-set-query", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/xhr-request" - ], - "_resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "_shasum": "016e8cfd7c20ee05cafe7795e892bd0702faa339", - "_spec": "url-set-query@^1.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/xhr-request", - "author": { - "name": "Matt DesLauriers", - "email": "dave.des@gmail.com", - "url": "https://github.com/mattdesl" - }, - "bugs": { - "url": "https://github.com/mattdesl/url-set-query/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "small function to append a query string to a URL", - "devDependencies": { - "tape": "^4.0.1" - }, - "homepage": "https://github.com/mattdesl/url-set-query", - "keywords": [ - "query", - "string", - "url", - "hash", - "querystring", - "qs", - "browser", - "node", - "queries", - "uri" - ], - "license": "MIT", - "main": "index.js", - "name": "url-set-query", - "repository": { - "type": "git", - "url": "git://github.com/mattdesl/url-set-query.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.0" -} diff --git a/truebit-implementation/node_modules/url-to-options/LICENSE b/truebit-implementation/node_modules/url-to-options/LICENSE deleted file mode 100644 index 274147ae..00000000 --- a/truebit-implementation/node_modules/url-to-options/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Steven Vachon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/url-to-options/README.md b/truebit-implementation/node_modules/url-to-options/README.md deleted file mode 100644 index 51586360..00000000 --- a/truebit-implementation/node_modules/url-to-options/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# url-to-options [![NPM Version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] - -Convert a WHATWG [URL](https://developer.mozilla.org/en/docs/Web/API/URL) to an `http.request`/`https.request` options object. - - -## Installation - -[Node.js](http://nodejs.org/) `>= 4` is required. To install, type this at the command line: -```shell -npm install url-to-options -``` - - -## Usage - -```js -const urlToOptions = require('url-to-options'); - -const url = new URL('http://user:pass@hostname:8080/'); - -const opts = urlToOptions(url); -//-> { auth:'user:pass', port:8080, … } -``` - - -[npm-image]: https://img.shields.io/npm/v/url-to-options.svg -[npm-url]: https://npmjs.org/package/url-to-options -[travis-image]: https://img.shields.io/travis/stevenvachon/url-to-options.svg -[travis-url]: https://travis-ci.org/stevenvachon/url-to-options diff --git a/truebit-implementation/node_modules/url-to-options/index.js b/truebit-implementation/node_modules/url-to-options/index.js deleted file mode 100644 index 25ef0bdc..00000000 --- a/truebit-implementation/node_modules/url-to-options/index.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - - - -// Copied from https://github.com/nodejs/node/blob/master/lib/internal/url.js - -function urlToOptions(url) { - var options = { - protocol: url.protocol, - hostname: url.hostname, - hash: url.hash, - search: url.search, - pathname: url.pathname, - path: `${url.pathname}${url.search}`, - href: url.href - }; - if (url.port !== '') { - options.port = Number(url.port); - } - if (url.username || url.password) { - options.auth = `${url.username}:${url.password}`; - } - return options; -} - - - -module.exports = urlToOptions; diff --git a/truebit-implementation/node_modules/url-to-options/package.json b/truebit-implementation/node_modules/url-to-options/package.json deleted file mode 100644 index 5e5f29f0..00000000 --- a/truebit-implementation/node_modules/url-to-options/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "url-to-options@^1.0.1", - "_id": "url-to-options@1.0.1", - "_inBundle": false, - "_integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "_location": "/url-to-options", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "url-to-options@^1.0.1", - "name": "url-to-options", - "escapedName": "url-to-options", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/got" - ], - "_resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "_shasum": "1505a03a289a48cbd7a434efbaeec5055f5633a9", - "_spec": "url-to-options@^1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/got", - "author": { - "name": "Steven Vachon", - "email": "contact@svachon.com", - "url": "https://www.svachon.com/" - }, - "bugs": { - "url": "https://github.com/stevenvachon/url-to-options/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Convert a WHATWG URL to an http(s).request options object.", - "devDependencies": { - "universal-url": "^1.0.0-alpha" - }, - "engines": { - "node": ">= 4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/stevenvachon/url-to-options#readme", - "keywords": [ - "http", - "https", - "url", - "whatwg" - ], - "license": "MIT", - "name": "url-to-options", - "repository": { - "type": "git", - "url": "git+https://github.com/stevenvachon/url-to-options.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/utf8/LICENSE-MIT.txt b/truebit-implementation/node_modules/utf8/LICENSE-MIT.txt deleted file mode 100644 index a41e0a7e..00000000 --- a/truebit-implementation/node_modules/utf8/LICENSE-MIT.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/utf8/README.md b/truebit-implementation/node_modules/utf8/README.md deleted file mode 100644 index 36b8de07..00000000 --- a/truebit-implementation/node_modules/utf8/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# utf8.js [![Build status](https://travis-ci.org/mathiasbynens/utf8.js.svg?branch=master)](https://travis-ci.org/mathiasbynens/utf8.js) [![Code coverage status](http://img.shields.io/coveralls/mathiasbynens/utf8.js/master.svg)](https://coveralls.io/r/mathiasbynens/utf8.js) [![Dependency status](https://gemnasium.com/mathiasbynens/utf8.js.svg)](https://gemnasium.com/mathiasbynens/utf8.js) - -_utf8.js_ is a well-tested UTF-8 encoder/decoder written in JavaScript. Unlike many other JavaScript solutions, it is designed to be a _proper_ UTF-8 encoder/decoder: it can encode/decode any scalar Unicode code point values, as per [the Encoding Standard](https://encoding.spec.whatwg.org/#utf-8). [Here’s an online demo.](https://mothereff.in/utf-8) - -Feel free to fork if you see possible improvements! - -## Installation - -Via [npm](https://www.npmjs.com/): - -```bash -npm install utf8 -``` - -Via [Bower](http://bower.io/): - -```bash -bower install utf8 -``` - -Via [Component](https://github.com/component/component): - -```bash -component install mathiasbynens/utf8.js -``` - -In a browser: - -```html - -``` - -In [Narwhal](http://narwhaljs.org/), [Node.js](https://nodejs.org/), and [RingoJS ≥ v0.8.0](http://ringojs.org/): - -```js -var utf8 = require('utf8'); -``` - -In [Rhino](http://www.mozilla.org/rhino/): - -```js -load('utf8.js'); -``` - -Using an AMD loader like [RequireJS](http://requirejs.org/): - -```js -require( - { - 'paths': { - 'utf8': 'path/to/utf8' - } - }, - ['utf8'], - function(utf8) { - console.log(utf8); - } -); -``` - -## API - -### `utf8.encode(string)` - -Encodes any given JavaScript string (`string`) as UTF-8, and returns the UTF-8-encoded version of the string. It throws an error if the input string contains a non-scalar value, i.e. a lone surrogate. (If you need to be able to encode non-scalar values as well, use [WTF-8](https://mths.be/wtf8) instead.) - -```js -// U+00A9 COPYRIGHT SIGN; see http://codepoints.net/U+00A9 -utf8.encode('\xA9'); -// → '\xC2\xA9' -// U+10001 LINEAR B SYLLABLE B038 E; see http://codepoints.net/U+10001 -utf8.encode('\uD800\uDC01'); -// → '\xF0\x90\x80\x81' -``` - -### `utf8.decode(byteString)` - -Decodes any given UTF-8-encoded string (`byteString`) as UTF-8, and returns the UTF-8-decoded version of the string. It throws an error when malformed UTF-8 is detected. (If you need to be able to decode encoded non-scalar values as well, use [WTF-8](https://mths.be/wtf8) instead.) - -```js -utf8.decode('\xC2\xA9'); -// → '\xA9' - -utf8.decode('\xF0\x90\x80\x81'); -// → '\uD800\uDC01' -// → U+10001 LINEAR B SYLLABLE B038 E -``` - -### `utf8.version` - -A string representing the semantic version number. - -## Support - -utf8.js has been tested in at least Chrome 27-39, Firefox 3-34, Safari 4-8, Opera 10-28, IE 6-11, Node.js v0.10.0, Narwhal 0.3.2, RingoJS 0.8-0.11, PhantomJS 1.9.0, and Rhino 1.7RC4. - -## Unit tests & code coverage - -After cloning this repository, run `npm install` to install the dependencies needed for development and testing. You may want to install Istanbul _globally_ using `npm install istanbul -g`. - -Once that’s done, you can run the unit tests in Node using `npm test` or `node tests/tests.js`. To run the tests in Rhino, Ringo, Narwhal, PhantomJS, and web browsers as well, use `grunt test`. - -To generate the code coverage report, use `grunt cover`. - -## FAQ - -### Why is the first release named v2.0.0? Haven’t you heard of [semantic versioning](http://semver.org/)? - -Long before utf8.js was created, the `utf8` module on npm was registered and used by another (slightly buggy) library. @ryanmcgrath was kind enough to give me access to the `utf8` package on npm when I told him about utf8.js. Since there has already been a v1.0.0 release of the old library, and to avoid breaking backwards compatibility with projects that rely on the `utf8` npm package, I decided the tag the first release of utf8.js as v2.0.0 and take it from there. - -## Author - -| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | -|---| -| [Mathias Bynens](https://mathiasbynens.be/) | - -## License - -utf8.js is available under the [MIT](https://mths.be/mit) license. diff --git a/truebit-implementation/node_modules/utf8/package.json b/truebit-implementation/node_modules/utf8/package.json deleted file mode 100644 index 75a25b18..00000000 --- a/truebit-implementation/node_modules/utf8/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "utf8@2.1.1", - "_id": "utf8@2.1.1", - "_inBundle": false, - "_integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=", - "_location": "/utf8", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "utf8@2.1.1", - "name": "utf8", - "escapedName": "utf8", - "rawSpec": "2.1.1", - "saveSpec": null, - "fetchSpec": "2.1.1" - }, - "_requiredBy": [ - "/web3-utils" - ], - "_resolved": "http://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "_shasum": "2e01db02f7d8d0944f77104f1609eb0c304cf768", - "_spec": "utf8@2.1.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-utils", - "author": { - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - }, - "bugs": { - "url": "https://github.com/mathiasbynens/utf8.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "A well-tested UTF-8 encoder/decoder written in JavaScript.", - "devDependencies": { - "coveralls": "^2.11.3", - "grunt": "^0.4.5", - "grunt-shell": "^1.1.2", - "istanbul": "^0.3.17", - "qunit-extras": "^1.4.2", - "qunitjs": "~1.11.0", - "requirejs": "^2.1.19" - }, - "files": [ - "LICENSE-MIT.txt", - "utf8.js" - ], - "homepage": "https://mths.be/utf8js", - "keywords": [ - "charset", - "encoding", - "unicode", - "utf8" - ], - "license": "MIT", - "main": "utf8.js", - "name": "utf8", - "repository": { - "type": "git", - "url": "git+https://github.com/mathiasbynens/utf8.js.git" - }, - "scripts": { - "test": "node tests/tests.js" - }, - "version": "2.1.1" -} diff --git a/truebit-implementation/node_modules/utf8/utf8.js b/truebit-implementation/node_modules/utf8/utf8.js deleted file mode 100644 index c138a38e..00000000 --- a/truebit-implementation/node_modules/utf8/utf8.js +++ /dev/null @@ -1,244 +0,0 @@ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); diff --git a/truebit-implementation/node_modules/util-deprecate/History.md b/truebit-implementation/node_modules/util-deprecate/History.md deleted file mode 100644 index acc86753..00000000 --- a/truebit-implementation/node_modules/util-deprecate/History.md +++ /dev/null @@ -1,16 +0,0 @@ - -1.0.2 / 2015-10-07 -================== - - * use try/catch when checking `localStorage` (#3, @kumavis) - -1.0.1 / 2014-11-25 -================== - - * browser: use `console.warn()` for deprecation calls - * browser: more jsdocs - -1.0.0 / 2014-04-30 -================== - - * initial commit diff --git a/truebit-implementation/node_modules/util-deprecate/LICENSE b/truebit-implementation/node_modules/util-deprecate/LICENSE deleted file mode 100644 index 6a60e8c2..00000000 --- a/truebit-implementation/node_modules/util-deprecate/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/util-deprecate/README.md b/truebit-implementation/node_modules/util-deprecate/README.md deleted file mode 100644 index 75622fa7..00000000 --- a/truebit-implementation/node_modules/util-deprecate/README.md +++ /dev/null @@ -1,53 +0,0 @@ -util-deprecate -============== -### The Node.js `util.deprecate()` function with browser support - -In Node.js, this module simply re-exports the `util.deprecate()` function. - -In the web browser (i.e. via browserify), a browser-specific implementation -of the `util.deprecate()` function is used. - - -## API - -A `deprecate()` function is the only thing exposed by this module. - -``` javascript -// setup: -exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); - - -// users see: -foo(); -// foo() is deprecated, use bar() instead -foo(); -foo(); -``` - - -## License - -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/util-deprecate/browser.js b/truebit-implementation/node_modules/util-deprecate/browser.js deleted file mode 100644 index 549ae2f0..00000000 --- a/truebit-implementation/node_modules/util-deprecate/browser.js +++ /dev/null @@ -1,67 +0,0 @@ - -/** - * Module exports. - */ - -module.exports = deprecate; - -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ - -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -} - -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ - -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!global.localStorage) return false; - } catch (_) { - return false; - } - var val = global.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; -} diff --git a/truebit-implementation/node_modules/util-deprecate/node.js b/truebit-implementation/node_modules/util-deprecate/node.js deleted file mode 100644 index 5e6fcff5..00000000 --- a/truebit-implementation/node_modules/util-deprecate/node.js +++ /dev/null @@ -1,6 +0,0 @@ - -/** - * For Node.js, simply re-export the core `util.deprecate` function. - */ - -module.exports = require('util').deprecate; diff --git a/truebit-implementation/node_modules/util-deprecate/package.json b/truebit-implementation/node_modules/util-deprecate/package.json deleted file mode 100644 index 3186d183..00000000 --- a/truebit-implementation/node_modules/util-deprecate/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "_from": "util-deprecate@~1.0.1", - "_id": "util-deprecate@1.0.2", - "_inBundle": false, - "_integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "_location": "/util-deprecate", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "util-deprecate@~1.0.1", - "name": "util-deprecate", - "escapedName": "util-deprecate", - "rawSpec": "~1.0.1", - "saveSpec": null, - "fetchSpec": "~1.0.1" - }, - "_requiredBy": [ - "/readable-stream" - ], - "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", - "_spec": "util-deprecate@~1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/readable-stream", - "author": { - "name": "Nathan Rajlich", - "email": "nathan@tootallnate.net", - "url": "http://n8.io/" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/TooTallNate/util-deprecate/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "The Node.js `util.deprecate()` function with browser support", - "homepage": "https://github.com/TooTallNate/util-deprecate", - "keywords": [ - "util", - "deprecate", - "browserify", - "browser", - "node" - ], - "license": "MIT", - "main": "node.js", - "name": "util-deprecate", - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/util-deprecate.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.0.2" -} diff --git a/truebit-implementation/node_modules/utils-merge/.npmignore b/truebit-implementation/node_modules/utils-merge/.npmignore deleted file mode 100644 index 3e538441..00000000 --- a/truebit-implementation/node_modules/utils-merge/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -CONTRIBUTING.md -Makefile -docs/ -examples/ -reports/ -test/ - -.jshintrc -.travis.yml diff --git a/truebit-implementation/node_modules/utils-merge/LICENSE b/truebit-implementation/node_modules/utils-merge/LICENSE deleted file mode 100644 index 76f6d083..00000000 --- a/truebit-implementation/node_modules/utils-merge/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2017 Jared Hanson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/utils-merge/README.md b/truebit-implementation/node_modules/utils-merge/README.md deleted file mode 100644 index 0cb71171..00000000 --- a/truebit-implementation/node_modules/utils-merge/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# utils-merge - -[![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge) -[![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge) -[![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge) -[![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge) -[![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge) - - -Merges the properties from a source object into a destination object. - -## Install - -```bash -$ npm install utils-merge -``` - -## Usage - -```javascript -var a = { foo: 'bar' } - , b = { bar: 'baz' }; - -merge(a, b); -// => { foo: 'bar', bar: 'baz' } -``` - -## License - -[The MIT License](http://opensource.org/licenses/MIT) - -Copyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> - - Sponsor diff --git a/truebit-implementation/node_modules/utils-merge/index.js b/truebit-implementation/node_modules/utils-merge/index.js deleted file mode 100644 index 4265c694..00000000 --- a/truebit-implementation/node_modules/utils-merge/index.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Merge object b with object a. - * - * var a = { foo: 'bar' } - * , b = { bar: 'baz' }; - * - * merge(a, b); - * // => { foo: 'bar', bar: 'baz' } - * - * @param {Object} a - * @param {Object} b - * @return {Object} - * @api public - */ - -exports = module.exports = function(a, b){ - if (a && b) { - for (var key in b) { - a[key] = b[key]; - } - } - return a; -}; diff --git a/truebit-implementation/node_modules/utils-merge/package.json b/truebit-implementation/node_modules/utils-merge/package.json deleted file mode 100644 index 3faec1c5..00000000 --- a/truebit-implementation/node_modules/utils-merge/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_from": "utils-merge@1.0.1", - "_id": "utils-merge@1.0.1", - "_inBundle": false, - "_integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "_location": "/utils-merge", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "utils-merge@1.0.1", - "name": "utils-merge", - "escapedName": "utils-merge", - "rawSpec": "1.0.1", - "saveSpec": null, - "fetchSpec": "1.0.1" - }, - "_requiredBy": [ - "/express" - ], - "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "_shasum": "9f95710f50a267947b2ccc124741c1028427e713", - "_spec": "utils-merge@1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/express", - "author": { - "name": "Jared Hanson", - "email": "jaredhanson@gmail.com", - "url": "http://www.jaredhanson.net/" - }, - "bugs": { - "url": "http://github.com/jaredhanson/utils-merge/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "merge() utility function", - "devDependencies": { - "chai": "1.x.x", - "make-node": "0.3.x", - "mocha": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - }, - "homepage": "https://github.com/jaredhanson/utils-merge#readme", - "keywords": [ - "util" - ], - "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "http://opensource.org/licenses/MIT" - } - ], - "main": "./index", - "name": "utils-merge", - "repository": { - "type": "git", - "url": "git://github.com/jaredhanson/utils-merge.git" - }, - "scripts": { - "test": "mocha --reporter spec --require test/bootstrap/node test/*.test.js" - }, - "version": "1.0.1" -} diff --git a/truebit-implementation/node_modules/uuid/.eslintrc.json b/truebit-implementation/node_modules/uuid/.eslintrc.json deleted file mode 100644 index 734a8e14..00000000 --- a/truebit-implementation/node_modules/uuid/.eslintrc.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "root": true, - "env": { - "browser": true, - "commonjs": true, - "node": true, - "mocha": true - }, - "extends": ["eslint:recommended"], - "rules": { - "array-bracket-spacing": ["warn", "never"], - "arrow-body-style": ["warn", "as-needed"], - "arrow-parens": ["warn", "as-needed"], - "arrow-spacing": "warn", - "brace-style": ["warn", "1tbs"], - "camelcase": "warn", - "comma-spacing": ["warn", {"after": true}], - "dot-notation": "warn", - "eqeqeq": ["warn", "smart"], - "indent": ["warn", 2, { - "SwitchCase": 1, - "FunctionDeclaration": {"parameters": 1}, - "MemberExpression": 1, - "CallExpression": {"arguments": 1} - }], - "key-spacing": ["warn", {"beforeColon": false, "afterColon": true, "mode": "minimum"}], - "keyword-spacing": "warn", - "no-console": "off", - "no-empty": "off", - "no-multi-spaces": "warn", - "no-redeclare": "off", - "no-restricted-globals": ["warn", "Promise"], - "no-trailing-spaces": "warn", - "no-undef": "error", - "no-unused-vars": ["warn", {"args": "none"}], - "one-var": ["warn", "never"], - "padded-blocks": ["warn", "never"], - "object-curly-spacing": ["warn", "never"], - "quotes": ["warn", "single"], - "react/prop-types": "off", - "react/jsx-no-bind": "off", - "semi": ["warn", "always"], - "space-before-blocks": ["warn", "always"], - "space-before-function-paren": ["warn", "never"], - "space-in-parens": ["warn", "never"] - } -} diff --git a/truebit-implementation/node_modules/uuid/AUTHORS b/truebit-implementation/node_modules/uuid/AUTHORS deleted file mode 100644 index 5a105230..00000000 --- a/truebit-implementation/node_modules/uuid/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -Robert Kieffer -Christoph Tavan -AJ ONeal -Vincent Voyer -Roman Shtylman diff --git a/truebit-implementation/node_modules/uuid/CHANGELOG.md b/truebit-implementation/node_modules/uuid/CHANGELOG.md deleted file mode 100644 index f29d3991..00000000 --- a/truebit-implementation/node_modules/uuid/CHANGELOG.md +++ /dev/null @@ -1,110 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -## [3.3.2](https://github.com/kelektiv/node-uuid/compare/v3.3.1...v3.3.2) (2018-06-28) - - -### Bug Fixes - -* typo ([305d877](https://github.com/kelektiv/node-uuid/commit/305d877)) - - - - -## [3.3.1](https://github.com/kelektiv/node-uuid/compare/v3.3.0...v3.3.1) (2018-06-28) - - -### Bug Fixes - -* fix [#284](https://github.com/kelektiv/node-uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/kelektiv/node-uuid/commit/f2a60f2)) - - - - -# [3.3.0](https://github.com/kelektiv/node-uuid/compare/v3.2.1...v3.3.0) (2018-06-22) - - -### Bug Fixes - -* assignment to readonly property to allow running in strict mode ([#270](https://github.com/kelektiv/node-uuid/issues/270)) ([d062fdc](https://github.com/kelektiv/node-uuid/commit/d062fdc)) -* fix [#229](https://github.com/kelektiv/node-uuid/issues/229) ([c9684d4](https://github.com/kelektiv/node-uuid/commit/c9684d4)) -* Get correct version of IE11 crypto ([#274](https://github.com/kelektiv/node-uuid/issues/274)) ([153d331](https://github.com/kelektiv/node-uuid/commit/153d331)) -* mem issue when generating uuid ([#267](https://github.com/kelektiv/node-uuid/issues/267)) ([c47702c](https://github.com/kelektiv/node-uuid/commit/c47702c)) - -### Features - -* enforce Conventional Commit style commit messages ([#282](https://github.com/kelektiv/node-uuid/issues/282)) ([cc9a182](https://github.com/kelektiv/node-uuid/commit/cc9a182)) - - - -## [3.2.1](https://github.com/kelektiv/node-uuid/compare/v3.2.0...v3.2.1) (2018-01-16) - - -### Bug Fixes - -* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b)) - - - - -# [3.2.0](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.2.0) (2018-01-16) - - -### Bug Fixes - -* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/kelektiv/node-uuid/commit/09fa824)) -* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b)) - - -### Features - -* Add v3 Support ([#217](https://github.com/kelektiv/node-uuid/issues/217)) ([d94f726](https://github.com/kelektiv/node-uuid/commit/d94f726)) - - -# [3.1.0](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.0.1) (2017-06-17) - -### Bug Fixes - -* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) -* Fix typo (#178) -* Simple typo fix (#165) - -### Features -* v5 support in CLI (#197) -* V5 support (#188) - - -# 3.0.1 (2016-11-28) - -* split uuid versions into separate files - - -# 3.0.0 (2016-11-17) - -* remove .parse and .unparse - - -# 2.0.0 - -* Removed uuid.BufferClass - - -# 1.4.0 - -* Improved module context detection -* Removed public RNG functions - - -# 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - - -# 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/truebit-implementation/node_modules/uuid/LICENSE.md b/truebit-implementation/node_modules/uuid/LICENSE.md deleted file mode 100644 index 8c84e398..00000000 --- a/truebit-implementation/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2010-2016 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/uuid/README.md b/truebit-implementation/node_modules/uuid/README.md deleted file mode 100644 index 9cbe1ac1..00000000 --- a/truebit-implementation/node_modules/uuid/README.md +++ /dev/null @@ -1,293 +0,0 @@ - - -# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Support for version 1, 3, 4 and 5 UUIDs -* Cross-platform -* Uses cryptographically-strong random number APIs (when available) -* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) - -[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be -supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] - -## Quickstart - CommonJS (Recommended) - -```shell -npm install uuid -``` - -Then generate your uuid version of choice ... - -Version 1 (timestamp): - -```javascript -const uuidv1 = require('uuid/v1'); -uuidv1(); // ⇨ '45745c60-7b1a-11e8-9c9c-2d42b21b1a3e' - -``` - -Version 3 (namespace): - -```javascript -const uuidv3 = require('uuid/v3'); - -// ... using predefined DNS namespace (for domain names) -uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' - -// ... using predefined URL namespace (for, well, URLs) -uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' - -// ... using a custom namespace -// -// Note: Custom namespaces should be a UUID string specific to your application! -// E.g. the one here was generated using this modules `uuid` CLI. -const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; -uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' - -``` - -Version 4 (random): - -```javascript -const uuidv4 = require('uuid/v4'); -uuidv4(); // ⇨ '10ba038e-48da-487b-96e8-8d3b99b6d18a' - -``` - -Version 5 (namespace): - -```javascript -const uuidv5 = require('uuid/v5'); - -// ... using predefined DNS namespace (for domain names) -uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec' - -// ... using predefined URL namespace (for, well, URLs) -uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' - -// ... using a custom namespace -// -// Note: Custom namespaces should be a UUID string specific to your application! -// E.g. the one here was generated using this modules `uuid` CLI. -const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; -uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' - -``` - -## Quickstart - Browser-ready Versions - -Browser-ready versions of this module are available via [wzrd.in](https://github.com/jfhbrook/wzrd.in). - -For version 1 uuids: - -```html - - -``` - -For version 3 uuids: - -```html - - -``` - -For version 4 uuids: - -```html - - -``` - -For version 5 uuids: - -```html - - -``` - -## API - -### Version 1 - -```javascript -const uuidv1 = require('uuid/v1'); - -// Incantations -uuidv1(); -uuidv1(options); -uuidv1(options, buffer, offset); -``` - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Note: The id is generated guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -const v1options = { - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}; -uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' - -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -const arr = new Array(); -uuidv1(null, arr, 0); // ⇨ [ 69, 117, 109, 208, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62 ] -uuidv1(null, arr, 16); // ⇨ [ 69, 117, 109, 208, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62, 69, 117, 109, 209, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62 ] - -``` - -### Version 3 - -```javascript -const uuidv3 = require('uuid/v3'); - -// Incantations -uuidv3(name, namespace); -uuidv3(name, namespace, buffer); -uuidv3(name, namespace, buffer, offset); -``` - -Generate and return a RFC4122 v3 UUID. - -* `name` - (String | Array[]) "name" to create UUID with -* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: - -```javascript -uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' - -``` - -### Version 4 - -```javascript -const uuidv4 = require('uuid/v4') - -// Incantations -uuidv4(); -uuidv4(options); -uuidv4(options, buffer, offset); -``` - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with predefined `random` values - -```javascript -const v4options = { - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}; -uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' - -``` - -Example: Generate two IDs in a single buffer - -```javascript -const buffer = new Array(); -uuidv4(null, buffer, 0); // ⇨ [ 54, 122, 218, 70, 45, 70, 65, 24, 171, 53, 95, 130, 83, 195, 242, 45 ] -uuidv4(null, buffer, 16); // ⇨ [ 54, 122, 218, 70, 45, 70, 65, 24, 171, 53, 95, 130, 83, 195, 242, 45, 108, 204, 255, 103, 171, 86, 76, 94, 178, 225, 188, 236, 150, 20, 151, 87 ] - -``` - -### Version 5 - -```javascript -const uuidv5 = require('uuid/v5'); - -// Incantations -uuidv5(name, namespace); -uuidv5(name, namespace, buffer); -uuidv5(name, namespace, buffer, offset); -``` - -Generate and return a RFC4122 v5 UUID. - -* `name` - (String | Array[]) "name" to create UUID with -* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: - -```javascript -uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' - -``` - -## Command Line - -UUIDs can be generated from the command line with the `uuid` command. - -```shell -$ uuid -ddeb27fb-d9a0-4624-be4d-4615062daed4 - -$ uuid v1 -02d37060-d446-11e7-a9fa-7bdae751ebe1 -``` - -Type `uuid --help` for usage details - -## Testing - -```shell -npm test -``` - ----- -Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/truebit-implementation/node_modules/uuid/README_js.md b/truebit-implementation/node_modules/uuid/README_js.md deleted file mode 100644 index f34453be..00000000 --- a/truebit-implementation/node_modules/uuid/README_js.md +++ /dev/null @@ -1,280 +0,0 @@ -```javascript --hide -runmd.onRequire = path => path.replace(/^uuid/, './'); -``` - -# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Support for version 1, 3, 4 and 5 UUIDs -* Cross-platform -* Uses cryptographically-strong random number APIs (when available) -* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) - -[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be -supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] - -## Quickstart - CommonJS (Recommended) - -```shell -npm install uuid -``` - -Then generate your uuid version of choice ... - -Version 1 (timestamp): - -```javascript --run v1 -const uuidv1 = require('uuid/v1'); -uuidv1(); // RESULT -``` - -Version 3 (namespace): - -```javascript --run v3 -const uuidv3 = require('uuid/v3'); - -// ... using predefined DNS namespace (for domain names) -uuidv3('hello.example.com', uuidv3.DNS); // RESULT - -// ... using predefined URL namespace (for, well, URLs) -uuidv3('http://example.com/hello', uuidv3.URL); // RESULT - -// ... using a custom namespace -// -// Note: Custom namespaces should be a UUID string specific to your application! -// E.g. the one here was generated using this modules `uuid` CLI. -const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; -uuidv3('Hello, World!', MY_NAMESPACE); // RESULT -``` - -Version 4 (random): - -```javascript --run v4 -const uuidv4 = require('uuid/v4'); -uuidv4(); // RESULT -``` - -Version 5 (namespace): - -```javascript --run v5 -const uuidv5 = require('uuid/v5'); - -// ... using predefined DNS namespace (for domain names) -uuidv5('hello.example.com', uuidv5.DNS); // RESULT - -// ... using predefined URL namespace (for, well, URLs) -uuidv5('http://example.com/hello', uuidv5.URL); // RESULT - -// ... using a custom namespace -// -// Note: Custom namespaces should be a UUID string specific to your application! -// E.g. the one here was generated using this modules `uuid` CLI. -const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; -uuidv5('Hello, World!', MY_NAMESPACE); // RESULT -``` - -## Quickstart - Browser-ready Versions - -Browser-ready versions of this module are available via [wzrd.in](https://github.com/jfhbrook/wzrd.in). - -For version 1 uuids: - -```html - - -``` - -For version 3 uuids: - -```html - - -``` - -For version 4 uuids: - -```html - - -``` - -For version 5 uuids: - -```html - - -``` - -## API - -### Version 1 - -```javascript -const uuidv1 = require('uuid/v1'); - -// Incantations -uuidv1(); -uuidv1(options); -uuidv1(options, buffer, offset); -``` - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Note: The id is generated guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript --run v1 -const v1options = { - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}; -uuidv1(v1options); // RESULT -``` - -Example: In-place generation of two binary IDs - -```javascript --run v1 -// Generate two ids in an array -const arr = new Array(); -uuidv1(null, arr, 0); // RESULT -uuidv1(null, arr, 16); // RESULT -``` - -### Version 3 - -```javascript -const uuidv3 = require('uuid/v3'); - -// Incantations -uuidv3(name, namespace); -uuidv3(name, namespace, buffer); -uuidv3(name, namespace, buffer, offset); -``` - -Generate and return a RFC4122 v3 UUID. - -* `name` - (String | Array[]) "name" to create UUID with -* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: - -```javascript --run v3 -uuidv3('hello world', MY_NAMESPACE); // RESULT -``` - -### Version 4 - -```javascript -const uuidv4 = require('uuid/v4') - -// Incantations -uuidv4(); -uuidv4(options); -uuidv4(options, buffer, offset); -``` - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with predefined `random` values - -```javascript --run v4 -const v4options = { - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}; -uuidv4(v4options); // RESULT -``` - -Example: Generate two IDs in a single buffer - -```javascript --run v4 -const buffer = new Array(); -uuidv4(null, buffer, 0); // RESULT -uuidv4(null, buffer, 16); // RESULT -``` - -### Version 5 - -```javascript -const uuidv5 = require('uuid/v5'); - -// Incantations -uuidv5(name, namespace); -uuidv5(name, namespace, buffer); -uuidv5(name, namespace, buffer, offset); -``` - -Generate and return a RFC4122 v5 UUID. - -* `name` - (String | Array[]) "name" to create UUID with -* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: - -```javascript --run v5 -uuidv5('hello world', MY_NAMESPACE); // RESULT -``` - -## Command Line - -UUIDs can be generated from the command line with the `uuid` command. - -```shell -$ uuid -ddeb27fb-d9a0-4624-be4d-4615062daed4 - -$ uuid v1 -02d37060-d446-11e7-a9fa-7bdae751ebe1 -``` - -Type `uuid --help` for usage details - -## Testing - -```shell -npm test -``` diff --git a/truebit-implementation/node_modules/uuid/bin/uuid b/truebit-implementation/node_modules/uuid/bin/uuid deleted file mode 100755 index 502626e6..00000000 --- a/truebit-implementation/node_modules/uuid/bin/uuid +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env node -var assert = require('assert'); - -function usage() { - console.log('Usage:'); - console.log(' uuid'); - console.log(' uuid v1'); - console.log(' uuid v3 '); - console.log(' uuid v4'); - console.log(' uuid v5 '); - console.log(' uuid --help'); - console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); -} - -var args = process.argv.slice(2); - -if (args.indexOf('--help') >= 0) { - usage(); - process.exit(0); -} -var version = args.shift() || 'v4'; - -switch (version) { - case 'v1': - var uuidV1 = require('../v1'); - console.log(uuidV1()); - break; - - case 'v3': - var uuidV3 = require('../v3'); - - var name = args.shift(); - var namespace = args.shift(); - assert(name != null, 'v3 name not specified'); - assert(namespace != null, 'v3 namespace not specified'); - - if (namespace == 'URL') namespace = uuidV3.URL; - if (namespace == 'DNS') namespace = uuidV3.DNS; - - console.log(uuidV3(name, namespace)); - break; - - case 'v4': - var uuidV4 = require('../v4'); - console.log(uuidV4()); - break; - - case 'v5': - var uuidV5 = require('../v5'); - - var name = args.shift(); - var namespace = args.shift(); - assert(name != null, 'v5 name not specified'); - assert(namespace != null, 'v5 namespace not specified'); - - if (namespace == 'URL') namespace = uuidV5.URL; - if (namespace == 'DNS') namespace = uuidV5.DNS; - - console.log(uuidV5(name, namespace)); - break; - - default: - usage(); - process.exit(1); -} diff --git a/truebit-implementation/node_modules/uuid/index.js b/truebit-implementation/node_modules/uuid/index.js deleted file mode 100644 index e96791ab..00000000 --- a/truebit-implementation/node_modules/uuid/index.js +++ /dev/null @@ -1,8 +0,0 @@ -var v1 = require('./v1'); -var v4 = require('./v4'); - -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; - -module.exports = uuid; diff --git a/truebit-implementation/node_modules/uuid/lib/bytesToUuid.js b/truebit-implementation/node_modules/uuid/lib/bytesToUuid.js deleted file mode 100644 index 847c4828..00000000 --- a/truebit-implementation/node_modules/uuid/lib/bytesToUuid.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -var byteToHex = []; -for (var i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).substr(1); -} - -function bytesToUuid(buf, offset) { - var i = offset || 0; - var bth = byteToHex; - // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 - return ([bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]]]).join(''); -} - -module.exports = bytesToUuid; diff --git a/truebit-implementation/node_modules/uuid/lib/md5-browser.js b/truebit-implementation/node_modules/uuid/lib/md5-browser.js deleted file mode 100644 index 9b3b6c7e..00000000 --- a/truebit-implementation/node_modules/uuid/lib/md5-browser.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Browser-compatible JavaScript MD5 - * - * Modification of JavaScript MD5 - * https://github.com/blueimp/JavaScript-MD5 - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * https://opensource.org/licenses/MIT - * - * Based on - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ - -'use strict'; - -function md5(bytes) { - if (typeof(bytes) == 'string') { - var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - bytes = new Array(msg.length); - for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); - } - - return md5ToHexEncodedArray( - wordsToMd5( - bytesToWords(bytes) - , bytes.length * 8) - ); -} - - -/* -* Convert an array of little-endian words to an array of bytes -*/ -function md5ToHexEncodedArray(input) { - var i; - var x; - var output = []; - var length32 = input.length * 32; - var hexTab = '0123456789abcdef'; - var hex; - - for (i = 0; i < length32; i += 8) { - x = (input[i >> 5] >>> (i % 32)) & 0xFF; - - hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); - - output.push(hex); - } - return output; -} - -/* -* Calculate the MD5 of an array of little-endian words, and a bit length. -*/ -function wordsToMd5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var i; - var olda; - var oldb; - var oldc; - var oldd; - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - - var d = 271733878; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5ff(a, b, c, d, x[i], 7, -680876936); - d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); - - a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5gg(b, c, d, a, x[i], 20, -373897302); - a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); - - a = md5hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5hh(d, a, b, c, x[i], 11, -358537222); - c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); - - a = md5ii(a, b, c, d, x[i], 6, -198630844); - d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); - - a = safeAdd(a, olda); - b = safeAdd(b, oldb); - c = safeAdd(c, oldc); - d = safeAdd(d, oldd); - } - return [a, b, c, d]; -} - -/* -* Convert an array bytes to an array of little-endian words -* Characters >255 have their high-byte silently ignored. -*/ -function bytesToWords(input) { - var i; - var output = []; - output[(input.length >> 2) - 1] = undefined; - for (i = 0; i < output.length; i += 1) { - output[i] = 0; - } - var length8 = input.length * 8; - for (i = 0; i < length8; i += 8) { - output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); - } - - return output; -} - -/* -* Add integers, wrapping at 2^32. This uses 16-bit operations internally -* to work around bugs in some JS interpreters. -*/ -function safeAdd(x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); -} - -/* -* Bitwise rotate a 32-bit number to the left. -*/ -function bitRotateLeft(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); -} - -/* -* These functions implement the four basic operations the algorithm uses. -*/ -function md5cmn(q, a, b, x, s, t) { - return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); -} -function md5ff(a, b, c, d, x, s, t) { - return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); -} -function md5gg(a, b, c, d, x, s, t) { - return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); -} -function md5hh(a, b, c, d, x, s, t) { - return md5cmn(b ^ c ^ d, a, b, x, s, t); -} -function md5ii(a, b, c, d, x, s, t) { - return md5cmn(c ^ (b | (~d)), a, b, x, s, t); -} - -module.exports = md5; diff --git a/truebit-implementation/node_modules/uuid/lib/md5.js b/truebit-implementation/node_modules/uuid/lib/md5.js deleted file mode 100644 index 7044b872..00000000 --- a/truebit-implementation/node_modules/uuid/lib/md5.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var crypto = require('crypto'); - -function md5(bytes) { - if (typeof Buffer.from === 'function') { - // Modern Buffer API - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - } else { - // Pre-v4 Buffer API - if (Array.isArray(bytes)) { - bytes = new Buffer(bytes); - } else if (typeof bytes === 'string') { - bytes = new Buffer(bytes, 'utf8'); - } - } - - return crypto.createHash('md5').update(bytes).digest(); -} - -module.exports = md5; diff --git a/truebit-implementation/node_modules/uuid/lib/rng-browser.js b/truebit-implementation/node_modules/uuid/lib/rng-browser.js deleted file mode 100644 index 6361fb81..00000000 --- a/truebit-implementation/node_modules/uuid/lib/rng-browser.js +++ /dev/null @@ -1,34 +0,0 @@ -// Unique ID creation requires a high quality random # generator. In the -// browser this is a little complicated due to unknown quality of Math.random() -// and inconsistent support for the `crypto` API. We do the best we can via -// feature-detection - -// getRandomValues needs to be invoked in a context where "this" is a Crypto -// implementation. Also, find the complete implementation of crypto on IE11. -var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || - (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); - -if (getRandomValues) { - // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto - var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef - - module.exports = function whatwgRNG() { - getRandomValues(rnds8); - return rnds8; - }; -} else { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var rnds = new Array(16); - - module.exports = function mathRNG() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return rnds; - }; -} diff --git a/truebit-implementation/node_modules/uuid/lib/rng.js b/truebit-implementation/node_modules/uuid/lib/rng.js deleted file mode 100644 index 58f0dc9c..00000000 --- a/truebit-implementation/node_modules/uuid/lib/rng.js +++ /dev/null @@ -1,8 +0,0 @@ -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = require('crypto'); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; diff --git a/truebit-implementation/node_modules/uuid/lib/sha1-browser.js b/truebit-implementation/node_modules/uuid/lib/sha1-browser.js deleted file mode 100644 index 5758ed75..00000000 --- a/truebit-implementation/node_modules/uuid/lib/sha1-browser.js +++ /dev/null @@ -1,89 +0,0 @@ -// Adapted from Chris Veness' SHA1 code at -// http://www.movable-type.co.uk/scripts/sha1.html -'use strict'; - -function f(s, x, y, z) { - switch (s) { - case 0: return (x & y) ^ (~x & z); - case 1: return x ^ y ^ z; - case 2: return (x & y) ^ (x & z) ^ (y & z); - case 3: return x ^ y ^ z; - } -} - -function ROTL(x, n) { - return (x << n) | (x>>> (32 - n)); -} - -function sha1(bytes) { - var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; - var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; - - if (typeof(bytes) == 'string') { - var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - bytes = new Array(msg.length); - for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); - } - - bytes.push(0x80); - - var l = bytes.length/4 + 2; - var N = Math.ceil(l/16); - var M = new Array(N); - - for (var i=0; i>> 0; - e = d; - d = c; - c = ROTL(b, 30) >>> 0; - b = a; - a = T; - } - - H[0] = (H[0] + a) >>> 0; - H[1] = (H[1] + b) >>> 0; - H[2] = (H[2] + c) >>> 0; - H[3] = (H[3] + d) >>> 0; - H[4] = (H[4] + e) >>> 0; - } - - return [ - H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, - H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, - H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, - H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, - H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff - ]; -} - -module.exports = sha1; diff --git a/truebit-implementation/node_modules/uuid/lib/sha1.js b/truebit-implementation/node_modules/uuid/lib/sha1.js deleted file mode 100644 index 0b54b250..00000000 --- a/truebit-implementation/node_modules/uuid/lib/sha1.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var crypto = require('crypto'); - -function sha1(bytes) { - if (typeof Buffer.from === 'function') { - // Modern Buffer API - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - } else { - // Pre-v4 Buffer API - if (Array.isArray(bytes)) { - bytes = new Buffer(bytes); - } else if (typeof bytes === 'string') { - bytes = new Buffer(bytes, 'utf8'); - } - } - - return crypto.createHash('sha1').update(bytes).digest(); -} - -module.exports = sha1; diff --git a/truebit-implementation/node_modules/uuid/lib/v35.js b/truebit-implementation/node_modules/uuid/lib/v35.js deleted file mode 100644 index 8b066cc5..00000000 --- a/truebit-implementation/node_modules/uuid/lib/v35.js +++ /dev/null @@ -1,57 +0,0 @@ -var bytesToUuid = require('./bytesToUuid'); - -function uuidToBytes(uuid) { - // Note: We assume we're being passed a valid uuid string - var bytes = []; - uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { - bytes.push(parseInt(hex, 16)); - }); - - return bytes; -} - -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - var bytes = new Array(str.length); - for (var i = 0; i < str.length; i++) { - bytes[i] = str.charCodeAt(i); - } - return bytes; -} - -module.exports = function(name, version, hashfunc) { - var generateUUID = function(value, namespace, buf, offset) { - var off = buf && offset || 0; - - if (typeof(value) == 'string') value = stringToBytes(value); - if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); - - if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); - if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); - - // Per 4.3 - var bytes = hashfunc(namespace.concat(value)); - bytes[6] = (bytes[6] & 0x0f) | version; - bytes[8] = (bytes[8] & 0x3f) | 0x80; - - if (buf) { - for (var idx = 0; idx < 16; ++idx) { - buf[off+idx] = bytes[idx]; - } - } - - return buf || bytesToUuid(bytes); - }; - - // Function#name is not settable on some platforms (#270) - try { - generateUUID.name = name; - } catch (err) { - } - - // Pre-defined namespaces, per Appendix C - generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; - generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; - - return generateUUID; -}; diff --git a/truebit-implementation/node_modules/uuid/package.json b/truebit-implementation/node_modules/uuid/package.json deleted file mode 100644 index c7c0e66c..00000000 --- a/truebit-implementation/node_modules/uuid/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_from": "uuid@^3.3.2", - "_id": "uuid@3.3.2", - "_inBundle": false, - "_integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "_location": "/uuid", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "uuid@^3.3.2", - "name": "uuid", - "escapedName": "uuid", - "rawSpec": "^3.3.2", - "saveSpec": null, - "fetchSpec": "^3.3.2" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "_shasum": "1b4af4955eb3077c501c23872fc6513811587131", - "_spec": "uuid@^3.3.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/request", - "bin": { - "uuid": "./bin/uuid" - }, - "browser": { - "./lib/rng.js": "./lib/rng-browser.js", - "./lib/sha1.js": "./lib/sha1-browser.js", - "./lib/md5.js": "./lib/md5-browser.js" - }, - "bugs": { - "url": "https://github.com/kelektiv/node-uuid/issues" - }, - "bundleDependencies": false, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] - }, - "contributors": [ - { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - }, - { - "name": "AJ ONeal", - "email": "coolaj86@gmail.com" - }, - { - "name": "Vincent Voyer", - "email": "vincent@zeroload.net" - }, - { - "name": "Roman Shtylman", - "email": "shtylman@gmail.com" - } - ], - "deprecated": false, - "description": "RFC4122 (v1, v4, and v5) UUIDs", - "devDependencies": { - "@commitlint/cli": "7.0.0", - "@commitlint/config-conventional": "7.0.1", - "eslint": "4.19.1", - "husky": "0.14.3", - "mocha": "5.2.0", - "runmd": "1.0.1", - "standard-version": "4.4.0" - }, - "homepage": "https://github.com/kelektiv/node-uuid#readme", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "license": "MIT", - "name": "uuid", - "repository": { - "type": "git", - "url": "git+https://github.com/kelektiv/node-uuid.git" - }, - "scripts": { - "commitmsg": "commitlint -E GIT_PARAMS", - "md": "runmd --watch --output=README.md README_js.md", - "prepare": "runmd --output=README.md README_js.md", - "release": "standard-version", - "test": "mocha test/test.js" - }, - "version": "3.3.2" -} diff --git a/truebit-implementation/node_modules/uuid/v1.js b/truebit-implementation/node_modules/uuid/v1.js deleted file mode 100644 index d84c0f45..00000000 --- a/truebit-implementation/node_modules/uuid/v1.js +++ /dev/null @@ -1,109 +0,0 @@ -var rng = require('./lib/rng'); -var bytesToUuid = require('./lib/bytesToUuid'); - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -var _nodeId; -var _clockseq; - -// Previous uuid creation time -var _lastMSecs = 0; -var _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - var node = options.node || _nodeId; - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 - if (node == null || clockseq == null) { - var seedBytes = rng(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [ - seedBytes[0] | 0x01, - seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] - ]; - } - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - for (var n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } - - return buf ? buf : bytesToUuid(b); -} - -module.exports = v1; diff --git a/truebit-implementation/node_modules/uuid/v3.js b/truebit-implementation/node_modules/uuid/v3.js deleted file mode 100644 index ee7e14c0..00000000 --- a/truebit-implementation/node_modules/uuid/v3.js +++ /dev/null @@ -1,4 +0,0 @@ -var v35 = require('./lib/v35.js'); -var md5 = require('./lib/md5'); - -module.exports = v35('v3', 0x30, md5); \ No newline at end of file diff --git a/truebit-implementation/node_modules/uuid/v4.js b/truebit-implementation/node_modules/uuid/v4.js deleted file mode 100644 index 1f07be1c..00000000 --- a/truebit-implementation/node_modules/uuid/v4.js +++ /dev/null @@ -1,29 +0,0 @@ -var rng = require('./lib/rng'); -var bytesToUuid = require('./lib/bytesToUuid'); - -function v4(options, buf, offset) { - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options === 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ++ii) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || bytesToUuid(rnds); -} - -module.exports = v4; diff --git a/truebit-implementation/node_modules/uuid/v5.js b/truebit-implementation/node_modules/uuid/v5.js deleted file mode 100644 index 4945baf3..00000000 --- a/truebit-implementation/node_modules/uuid/v5.js +++ /dev/null @@ -1,3 +0,0 @@ -var v35 = require('./lib/v35.js'); -var sha1 = require('./lib/sha1'); -module.exports = v35('v5', 0x50, sha1); diff --git a/truebit-implementation/node_modules/vary/HISTORY.md b/truebit-implementation/node_modules/vary/HISTORY.md deleted file mode 100644 index f6cbcf7f..00000000 --- a/truebit-implementation/node_modules/vary/HISTORY.md +++ /dev/null @@ -1,39 +0,0 @@ -1.1.2 / 2017-09-23 -================== - - * perf: improve header token parsing speed - -1.1.1 / 2017-03-20 -================== - - * perf: hoist regular expression - -1.1.0 / 2015-09-29 -================== - - * Only accept valid field names in the `field` argument - - Ensures the resulting string is a valid HTTP header value - -1.0.1 / 2015-07-08 -================== - - * Fix setting empty header from empty `field` - * perf: enable strict mode - * perf: remove argument reassignments - -1.0.0 / 2014-08-10 -================== - - * Accept valid `Vary` header string as `field` - * Add `vary.append` for low-level string manipulation - * Move to `jshttp` orgainzation - -0.1.0 / 2014-06-05 -================== - - * Support array of fields to set - -0.0.0 / 2014-06-04 -================== - - * Initial release diff --git a/truebit-implementation/node_modules/vary/LICENSE b/truebit-implementation/node_modules/vary/LICENSE deleted file mode 100644 index 84441fbb..00000000 --- a/truebit-implementation/node_modules/vary/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/vary/README.md b/truebit-implementation/node_modules/vary/README.md deleted file mode 100644 index cc000b34..00000000 --- a/truebit-implementation/node_modules/vary/README.md +++ /dev/null @@ -1,101 +0,0 @@ -# vary - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Manipulate the HTTP Vary header - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install vary -``` - -## API - - - -```js -var vary = require('vary') -``` - -### vary(res, field) - -Adds the given header `field` to the `Vary` response header of `res`. -This can be a string of a single field, a string of a valid `Vary` -header, or an array of multiple fields. - -This will append the header if not already listed, otherwise leaves -it listed in the current location. - - - -```js -// Append "Origin" to the Vary header of the response -vary(res, 'Origin') -``` - -### vary.append(header, field) - -Adds the given header `field` to the `Vary` response header string `header`. -This can be a string of a single field, a string of a valid `Vary` header, -or an array of multiple fields. - -This will append the header if not already listed, otherwise leaves -it listed in the current location. The new header string is returned. - - - -```js -// Get header string appending "Origin" to "Accept, User-Agent" -vary.append('Accept, User-Agent', 'Origin') -``` - -## Examples - -### Updating the Vary header when content is based on it - -```js -var http = require('http') -var vary = require('vary') - -http.createServer(function onRequest (req, res) { - // about to user-agent sniff - vary(res, 'User-Agent') - - var ua = req.headers['user-agent'] || '' - var isMobile = /mobi|android|touch|mini/i.test(ua) - - // serve site, depending on isMobile - res.setHeader('Content-Type', 'text/html') - res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user') -}) -``` - -## Testing - -```sh -$ npm test -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/vary.svg -[npm-url]: https://npmjs.org/package/vary -[node-version-image]: https://img.shields.io/node/v/vary.svg -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg -[travis-url]: https://travis-ci.org/jshttp/vary -[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/vary -[downloads-image]: https://img.shields.io/npm/dm/vary.svg -[downloads-url]: https://npmjs.org/package/vary diff --git a/truebit-implementation/node_modules/vary/index.js b/truebit-implementation/node_modules/vary/index.js deleted file mode 100644 index 5b5e7412..00000000 --- a/truebit-implementation/node_modules/vary/index.js +++ /dev/null @@ -1,149 +0,0 @@ -/*! - * vary - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - */ - -module.exports = vary -module.exports.append = append - -/** - * RegExp to match field-name in RFC 7230 sec 3.2 - * - * field-name = token - * token = 1*tchar - * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" - * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" - * / DIGIT / ALPHA - * ; any VCHAR, except delimiters - */ - -var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/ - -/** - * Append a field to a vary header. - * - * @param {String} header - * @param {String|Array} field - * @return {String} - * @public - */ - -function append (header, field) { - if (typeof header !== 'string') { - throw new TypeError('header argument is required') - } - - if (!field) { - throw new TypeError('field argument is required') - } - - // get fields array - var fields = !Array.isArray(field) - ? parse(String(field)) - : field - - // assert on invalid field names - for (var j = 0; j < fields.length; j++) { - if (!FIELD_NAME_REGEXP.test(fields[j])) { - throw new TypeError('field argument contains an invalid header name') - } - } - - // existing, unspecified vary - if (header === '*') { - return header - } - - // enumerate current values - var val = header - var vals = parse(header.toLowerCase()) - - // unspecified vary - if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) { - return '*' - } - - for (var i = 0; i < fields.length; i++) { - var fld = fields[i].toLowerCase() - - // append value (case-preserving) - if (vals.indexOf(fld) === -1) { - vals.push(fld) - val = val - ? val + ', ' + fields[i] - : fields[i] - } - } - - return val -} - -/** - * Parse a vary header into an array. - * - * @param {String} header - * @return {Array} - * @private - */ - -function parse (header) { - var end = 0 - var list = [] - var start = 0 - - // gather tokens - for (var i = 0, len = header.length; i < len; i++) { - switch (header.charCodeAt(i)) { - case 0x20: /* */ - if (start === end) { - start = end = i + 1 - } - break - case 0x2c: /* , */ - list.push(header.substring(start, end)) - start = end = i + 1 - break - default: - end = i + 1 - break - } - } - - // final token - list.push(header.substring(start, end)) - - return list -} - -/** - * Mark that a request is varied on a header field. - * - * @param {Object} res - * @param {String|Array} field - * @public - */ - -function vary (res, field) { - if (!res || !res.getHeader || !res.setHeader) { - // quack quack - throw new TypeError('res argument is required') - } - - // get existing header - var val = res.getHeader('Vary') || '' - var header = Array.isArray(val) - ? val.join(', ') - : String(val) - - // set new header - if ((val = append(header, field))) { - res.setHeader('Vary', val) - } -} diff --git a/truebit-implementation/node_modules/vary/package.json b/truebit-implementation/node_modules/vary/package.json deleted file mode 100644 index a30debbc..00000000 --- a/truebit-implementation/node_modules/vary/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_from": "vary@^1", - "_id": "vary@1.1.2", - "_inBundle": false, - "_integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "_location": "/vary", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "vary@^1", - "name": "vary", - "escapedName": "vary", - "rawSpec": "^1", - "saveSpec": null, - "fetchSpec": "^1" - }, - "_requiredBy": [ - "/cors", - "/express" - ], - "_resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "_shasum": "2299f02c6ded30d4a5961b0b9f74524a18f634fc", - "_spec": "vary@^1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/cors", - "author": { - "name": "Douglas Christopher Wilson", - "email": "doug@somethingdoug.com" - }, - "bugs": { - "url": "https://github.com/jshttp/vary/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Manipulate the HTTP Vary header", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "2.1.4", - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.7.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "5.1.1", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "2.5.3", - "supertest": "1.1.0" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "index.js" - ], - "homepage": "https://github.com/jshttp/vary#readme", - "keywords": [ - "http", - "res", - "vary" - ], - "license": "MIT", - "name": "vary", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/vary.git" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - }, - "version": "1.1.2" -} diff --git a/truebit-implementation/node_modules/verror/.npmignore b/truebit-implementation/node_modules/verror/.npmignore deleted file mode 100644 index f14aec80..00000000 --- a/truebit-implementation/node_modules/verror/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -.gitignore -.gitmodules -deps -examples -experiments -jsl.node.conf -Makefile -Makefile.targ -test diff --git a/truebit-implementation/node_modules/verror/CHANGES.md b/truebit-implementation/node_modules/verror/CHANGES.md deleted file mode 100644 index bbb745a2..00000000 --- a/truebit-implementation/node_modules/verror/CHANGES.md +++ /dev/null @@ -1,28 +0,0 @@ -# Changelog - -## Not yet released - -None yet. - -## v1.10.0 - -* #49 want convenience functions for MultiErrors - -## v1.9.0 - -* #47 could use VError.hasCauseWithName() - -## v1.8.1 - -* #39 captureStackTrace lost when inheriting from WError - -## v1.8.0 - -* #23 Preserve original stack trace(s) - -## v1.7.0 - -* #10 better support for extra properties on Errors -* #11 make it easy to find causes of a particular kind -* #29 No documentation on how to Install this package -* #36 elide development-only files from npm package diff --git a/truebit-implementation/node_modules/verror/CONTRIBUTING.md b/truebit-implementation/node_modules/verror/CONTRIBUTING.md deleted file mode 100644 index 750cef8d..00000000 --- a/truebit-implementation/node_modules/verror/CONTRIBUTING.md +++ /dev/null @@ -1,19 +0,0 @@ -# Contributing - -This repository uses [cr.joyent.us](https://cr.joyent.us) (Gerrit) for new -changes. Anyone can submit changes. To get started, see the [cr.joyent.us user -guide](https://github.com/joyent/joyent-gerrit/blob/master/docs/user/README.md). -This repo does not use GitHub pull requests. - -See the [Joyent Engineering -Guidelines](https://github.com/joyent/eng/blob/master/docs/index.md) for general -best practices expected in this repository. - -Contributions should be "make prepush" clean. The "prepush" target runs the -"check" target, which requires these separate tools: - -* https://github.com/davepacheco/jsstyle -* https://github.com/davepacheco/javascriptlint - -If you're changing something non-trivial or user-facing, you may want to submit -an issue first. diff --git a/truebit-implementation/node_modules/verror/LICENSE b/truebit-implementation/node_modules/verror/LICENSE deleted file mode 100644 index 82a5cb86..00000000 --- a/truebit-implementation/node_modules/verror/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2016, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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 diff --git a/truebit-implementation/node_modules/verror/README.md b/truebit-implementation/node_modules/verror/README.md deleted file mode 100644 index c1f0635e..00000000 --- a/truebit-implementation/node_modules/verror/README.md +++ /dev/null @@ -1,528 +0,0 @@ -# verror: rich JavaScript errors - -This module provides several classes in support of Joyent's [Best Practices for -Error Handling in Node.js](http://www.joyent.com/developers/node/design/errors). -If you find any of the behavior here confusing or surprising, check out that -document first. - -The error classes here support: - -* printf-style arguments for the message -* chains of causes -* properties to provide extra information about the error -* creating your own subclasses that support all of these - -The classes here are: - -* **VError**, for chaining errors while preserving each one's error message. - This is useful in servers and command-line utilities when you want to - propagate an error up a call stack, but allow various levels to add their own - context. See examples below. -* **WError**, for wrapping errors while hiding the lower-level messages from the - top-level error. This is useful for API endpoints where you don't want to - expose internal error messages, but you still want to preserve the error chain - for logging and debugging. -* **SError**, which is just like VError but interprets printf-style arguments - more strictly. -* **MultiError**, which is just an Error that encapsulates one or more other - errors. (This is used for parallel operations that return several errors.) - - -# Quick start - -First, install the package: - - npm install verror - -If nothing else, you can use VError as a drop-in replacement for the built-in -JavaScript Error class, with the addition of printf-style messages: - -```javascript -var err = new VError('missing file: "%s"', '/etc/passwd'); -console.log(err.message); -``` - -This prints: - - missing file: "/etc/passwd" - -You can also pass a `cause` argument, which is any other Error object: - -```javascript -var fs = require('fs'); -var filename = '/nonexistent'; -fs.stat(filename, function (err1) { - var err2 = new VError(err1, 'stat "%s"', filename); - console.error(err2.message); -}); -``` - -This prints out: - - stat "/nonexistent": ENOENT, stat '/nonexistent' - -which resembles how Unix programs typically report errors: - - $ sort /nonexistent - sort: open failed: /nonexistent: No such file or directory - -To match the Unixy feel, when you print out the error, just prepend the -program's name to the VError's `message`. Or just call -[node-cmdutil.fail(your_verror)](https://github.com/joyent/node-cmdutil), which -does this for you. - -You can get the next-level Error using `err.cause()`: - -```javascript -console.error(err2.cause().message); -``` - -prints: - - ENOENT, stat '/nonexistent' - -Of course, you can chain these as many times as you want, and it works with any -kind of Error: - -```javascript -var err1 = new Error('No such file or directory'); -var err2 = new VError(err1, 'failed to stat "%s"', '/junk'); -var err3 = new VError(err2, 'request failed'); -console.error(err3.message); -``` - -This prints: - - request failed: failed to stat "/junk": No such file or directory - -The idea is that each layer in the stack annotates the error with a description -of what it was doing. The end result is a message that explains what happened -at each level. - -You can also decorate Error objects with additional information so that callers -can not only handle each kind of error differently, but also construct their own -error messages (e.g., to localize them, format them, group them by type, and so -on). See the example below. - - -# Deeper dive - -The two main goals for VError are: - -* **Make it easy to construct clear, complete error messages intended for - people.** Clear error messages greatly improve both user experience and - debuggability, so we wanted to make it easy to build them. That's why the - constructor takes printf-style arguments. -* **Make it easy to construct objects with programmatically-accessible - metadata** (which we call _informational properties_). Instead of just saying - "connection refused while connecting to 192.168.1.2:80", you can add - properties like `"ip": "192.168.1.2"` and `"tcpPort": 80`. This can be used - for feeding into monitoring systems, analyzing large numbers of Errors (as - from a log file), or localizing error messages. - -To really make this useful, it also needs to be easy to compose Errors: -higher-level code should be able to augment the Errors reported by lower-level -code to provide a more complete description of what happened. Instead of saying -"connection refused", you can say "operation X failed: connection refused". -That's why VError supports `causes`. - -In order for all this to work, programmers need to know that it's generally safe -to wrap lower-level Errors with higher-level ones. If you have existing code -that handles Errors produced by a library, you should be able to wrap those -Errors with a VError to add information without breaking the error handling -code. There are two obvious ways that this could break such consumers: - -* The error's name might change. People typically use `name` to determine what - kind of Error they've got. To ensure compatibility, you can create VErrors - with custom names, but this approach isn't great because it prevents you from - representing complex failures. For this reason, VError provides - `findCauseByName`, which essentially asks: does this Error _or any of its - causes_ have this specific type? If error handling code uses - `findCauseByName`, then subsystems can construct very specific causal chains - for debuggability and still let people handle simple cases easily. There's an - example below. -* The error's properties might change. People often hang additional properties - off of Error objects. If we wrap an existing Error in a new Error, those - properties would be lost unless we copied them. But there are a variety of - both standard and non-standard Error properties that should _not_ be copied in - this way: most obviously `name`, `message`, and `stack`, but also `fileName`, - `lineNumber`, and a few others. Plus, it's useful for some Error subclasses - to have their own private properties -- and there'd be no way to know whether - these should be copied. For these reasons, VError first-classes these - information properties. You have to provide them in the constructor, you can - only fetch them with the `info()` function, and VError takes care of making - sure properties from causes wind up in the `info()` output. - -Let's put this all together with an example from the node-fast RPC library. -node-fast implements a simple RPC protocol for Node programs. There's a server -and client interface, and clients make RPC requests to servers. Let's say the -server fails with an UnauthorizedError with message "user 'bob' is not -authorized". The client wraps all server errors with a FastServerError. The -client also wraps all request errors with a FastRequestError that includes the -name of the RPC call being made. The result of this failed RPC might look like -this: - - name: FastRequestError - message: "request failed: server error: user 'bob' is not authorized" - rpcMsgid: - rpcMethod: GetObject - cause: - name: FastServerError - message: "server error: user 'bob' is not authorized" - cause: - name: UnauthorizedError - message: "user 'bob' is not authorized" - rpcUser: "bob" - -When the caller uses `VError.info()`, the information properties are collapsed -so that it looks like this: - - message: "request failed: server error: user 'bob' is not authorized" - rpcMsgid: - rpcMethod: GetObject - rpcUser: "bob" - -Taking this apart: - -* The error's message is a complete description of the problem. The caller can - report this directly to its caller, which can potentially make its way back to - an end user (if appropriate). It can also be logged. -* The caller can tell that the request failed on the server, rather than as a - result of a client problem (e.g., failure to serialize the request), a - transport problem (e.g., failure to connect to the server), or something else - (e.g., a timeout). They do this using `findCauseByName('FastServerError')` - rather than checking the `name` field directly. -* If the caller logs this error, the logs can be analyzed to aggregate - errors by cause, by RPC method name, by user, or whatever. Or the - error can be correlated with other events for the same rpcMsgid. -* It wasn't very hard for any part of the code to contribute to this Error. - Each part of the stack has just a few lines to provide exactly what it knows, - with very little boilerplate. - -It's not expected that you'd use these complex forms all the time. Despite -supporting the complex case above, you can still just do: - - new VError("my service isn't working"); - -for the simple cases. - - -# Reference: VError, WError, SError - -VError, WError, and SError are convenient drop-in replacements for `Error` that -support printf-style arguments, first-class causes, informational properties, -and other useful features. - - -## Constructors - -The VError constructor has several forms: - -```javascript -/* - * This is the most general form. You can specify any supported options - * (including "cause" and "info") this way. - */ -new VError(options, sprintf_args...) - -/* - * This is a useful shorthand when the only option you need is "cause". - */ -new VError(cause, sprintf_args...) - -/* - * This is a useful shorthand when you don't need any options at all. - */ -new VError(sprintf_args...) -``` - -All of these forms construct a new VError that behaves just like the built-in -JavaScript `Error` class, with some additional methods described below. - -In the first form, `options` is a plain object with any of the following -optional properties: - -Option name | Type | Meaning ----------------- | ---------------- | ------- -`name` | string | Describes what kind of error this is. This is intended for programmatic use to distinguish between different kinds of errors. Note that in modern versions of Node.js, this name is ignored in the `stack` property value, but callers can still use the `name` property to get at it. -`cause` | any Error object | Indicates that the new error was caused by `cause`. See `cause()` below. If unspecified, the cause will be `null`. -`strict` | boolean | If true, then `null` and `undefined` values in `sprintf_args` are passed through to `sprintf()`. Otherwise, these are replaced with the strings `'null'`, and '`undefined`', respectively. -`constructorOpt` | function | If specified, then the stack trace for this error ends at function `constructorOpt`. Functions called by `constructorOpt` will not show up in the stack. This is useful when this class is subclassed. -`info` | object | Specifies arbitrary informational properties that are available through the `VError.info(err)` static class method. See that method for details. - -The second form is equivalent to using the first form with the specified `cause` -as the error's cause. This form is distinguished from the first form because -the first argument is an Error. - -The third form is equivalent to using the first form with all default option -values. This form is distinguished from the other forms because the first -argument is not an object or an Error. - -The `WError` constructor is used exactly the same way as the `VError` -constructor. The `SError` constructor is also used the same way as the -`VError` constructor except that in all cases, the `strict` property is -overriden to `true. - - -## Public properties - -`VError`, `WError`, and `SError` all provide the same public properties as -JavaScript's built-in Error objects. - -Property name | Type | Meaning -------------- | ------ | ------- -`name` | string | Programmatically-usable name of the error. -`message` | string | Human-readable summary of the failure. Programmatically-accessible details are provided through `VError.info(err)` class method. -`stack` | string | Human-readable stack trace where the Error was constructed. - -For all of these classes, the printf-style arguments passed to the constructor -are processed with `sprintf()` to form a message. For `WError`, this becomes -the complete `message` property. For `SError` and `VError`, this message is -prepended to the message of the cause, if any (with a suitable separator), and -the result becomes the `message` property. - -The `stack` property is managed entirely by the underlying JavaScript -implementation. It's generally implemented using a getter function because -constructing the human-readable stack trace is somewhat expensive. - -## Class methods - -The following methods are defined on the `VError` class and as exported -functions on the `verror` module. They're defined this way rather than using -methods on VError instances so that they can be used on Errors not created with -`VError`. - -### `VError.cause(err)` - -The `cause()` function returns the next Error in the cause chain for `err`, or -`null` if there is no next error. See the `cause` argument to the constructor. -Errors can have arbitrarily long cause chains. You can walk the `cause` chain -by invoking `VError.cause(err)` on each subsequent return value. If `err` is -not a `VError`, the cause is `null`. - -### `VError.info(err)` - -Returns an object with all of the extra error information that's been associated -with this Error and all of its causes. These are the properties passed in using -the `info` option to the constructor. Properties not specified in the -constructor for this Error are implicitly inherited from this error's cause. - -These properties are intended to provide programmatically-accessible metadata -about the error. For an error that indicates a failure to resolve a DNS name, -informational properties might include the DNS name to be resolved, or even the -list of resolvers used to resolve it. The values of these properties should -generally be plain objects (i.e., consisting only of null, undefined, numbers, -booleans, strings, and objects and arrays containing only other plain objects). - -### `VError.fullStack(err)` - -Returns a string containing the full stack trace, with all nested errors recursively -reported as `'caused by:' + err.stack`. - -### `VError.findCauseByName(err, name)` - -The `findCauseByName()` function traverses the cause chain for `err`, looking -for an error whose `name` property matches the passed in `name` value. If no -match is found, `null` is returned. - -If all you want is to know _whether_ there's a cause (and you don't care what it -is), you can use `VError.hasCauseWithName(err, name)`. - -If a vanilla error or a non-VError error is passed in, then there is no cause -chain to traverse. In this scenario, the function will check the `name` -property of only `err`. - -### `VError.hasCauseWithName(err, name)` - -Returns true if and only if `VError.findCauseByName(err, name)` would return -a non-null value. This essentially determines whether `err` has any cause in -its cause chain that has name `name`. - -### `VError.errorFromList(errors)` - -Given an array of Error objects (possibly empty), return a single error -representing the whole collection of errors. If the list has: - -* 0 elements, returns `null` -* 1 element, returns the sole error -* more than 1 element, returns a MultiError referencing the whole list - -This is useful for cases where an operation may produce any number of errors, -and you ultimately want to implement the usual `callback(err)` pattern. You can -accumulate the errors in an array and then invoke -`callback(VError.errorFromList(errors))` when the operation is complete. - - -### `VError.errorForEach(err, func)` - -Convenience function for iterating an error that may itself be a MultiError. - -In all cases, `err` must be an Error. If `err` is a MultiError, then `func` is -invoked as `func(errorN)` for each of the underlying errors of the MultiError. -If `err` is any other kind of error, `func` is invoked once as `func(err)`. In -all cases, `func` is invoked synchronously. - -This is useful for cases where an operation may produce any number of warnings -that may be encapsulated with a MultiError -- but may not be. - -This function does not iterate an error's cause chain. - - -## Examples - -The "Demo" section above covers several basic cases. Here's a more advanced -case: - -```javascript -var err1 = new VError('something bad happened'); -/* ... */ -var err2 = new VError({ - 'name': 'ConnectionError', - 'cause': err1, - 'info': { - 'errno': 'ECONNREFUSED', - 'remote_ip': '127.0.0.1', - 'port': 215 - } -}, 'failed to connect to "%s:%d"', '127.0.0.1', 215); - -console.log(err2.message); -console.log(err2.name); -console.log(VError.info(err2)); -console.log(err2.stack); -``` - -This outputs: - - failed to connect to "127.0.0.1:215": something bad happened - ConnectionError - { errno: 'ECONNREFUSED', remote_ip: '127.0.0.1', port: 215 } - ConnectionError: failed to connect to "127.0.0.1:215": something bad happened - at Object. (/home/dap/node-verror/examples/info.js:5:12) - at Module._compile (module.js:456:26) - at Object.Module._extensions..js (module.js:474:10) - at Module.load (module.js:356:32) - at Function.Module._load (module.js:312:12) - at Function.Module.runMain (module.js:497:10) - at startup (node.js:119:16) - at node.js:935:3 - -Information properties are inherited up the cause chain, with values at the top -of the chain overriding same-named values lower in the chain. To continue that -example: - -```javascript -var err3 = new VError({ - 'name': 'RequestError', - 'cause': err2, - 'info': { - 'errno': 'EBADREQUEST' - } -}, 'request failed'); - -console.log(err3.message); -console.log(err3.name); -console.log(VError.info(err3)); -console.log(err3.stack); -``` - -This outputs: - - request failed: failed to connect to "127.0.0.1:215": something bad happened - RequestError - { errno: 'EBADREQUEST', remote_ip: '127.0.0.1', port: 215 } - RequestError: request failed: failed to connect to "127.0.0.1:215": something bad happened - at Object. (/home/dap/node-verror/examples/info.js:20:12) - at Module._compile (module.js:456:26) - at Object.Module._extensions..js (module.js:474:10) - at Module.load (module.js:356:32) - at Function.Module._load (module.js:312:12) - at Function.Module.runMain (module.js:497:10) - at startup (node.js:119:16) - at node.js:935:3 - -You can also print the complete stack trace of combined `Error`s by using -`VError.fullStack(err).` - -```javascript -var err1 = new VError('something bad happened'); -/* ... */ -var err2 = new VError(err1, 'something really bad happened here'); - -console.log(VError.fullStack(err2)); -``` - -This outputs: - - VError: something really bad happened here: something bad happened - at Object. (/home/dap/node-verror/examples/fullStack.js:5:12) - at Module._compile (module.js:409:26) - at Object.Module._extensions..js (module.js:416:10) - at Module.load (module.js:343:32) - at Function.Module._load (module.js:300:12) - at Function.Module.runMain (module.js:441:10) - at startup (node.js:139:18) - at node.js:968:3 - caused by: VError: something bad happened - at Object. (/home/dap/node-verror/examples/fullStack.js:3:12) - at Module._compile (module.js:409:26) - at Object.Module._extensions..js (module.js:416:10) - at Module.load (module.js:343:32) - at Function.Module._load (module.js:300:12) - at Function.Module.runMain (module.js:441:10) - at startup (node.js:139:18) - at node.js:968:3 - -`VError.fullStack` is also safe to use on regular `Error`s, so feel free to use -it whenever you need to extract the stack trace from an `Error`, regardless if -it's a `VError` or not. - -# Reference: MultiError - -MultiError is an Error class that represents a group of Errors. This is used -when you logically need to provide a single Error, but you want to preserve -information about multiple underying Errors. A common case is when you execute -several operations in parallel and some of them fail. - -MultiErrors are constructed as: - -```javascript -new MultiError(error_list) -``` - -`error_list` is an array of at least one `Error` object. - -The cause of the MultiError is the first error provided. None of the other -`VError` options are supported. The `message` for a MultiError consists the -`message` from the first error, prepended with a message indicating that there -were other errors. - -For example: - -```javascript -err = new MultiError([ - new Error('failed to resolve DNS name "abc.example.com"'), - new Error('failed to resolve DNS name "def.example.com"'), -]); - -console.error(err.message); -``` - -outputs: - - first of 2 errors: failed to resolve DNS name "abc.example.com" - -See the convenience function `VError.errorFromList`, which is sometimes simpler -to use than this constructor. - -## Public methods - - -### `errors()` - -Returns an array of the errors used to construct this MultiError. - - -# Contributing - -See separate [contribution guidelines](CONTRIBUTING.md). diff --git a/truebit-implementation/node_modules/verror/lib/verror.js b/truebit-implementation/node_modules/verror/lib/verror.js deleted file mode 100644 index 8663ddea..00000000 --- a/truebit-implementation/node_modules/verror/lib/verror.js +++ /dev/null @@ -1,451 +0,0 @@ -/* - * verror.js: richer JavaScript errors - */ - -var mod_assertplus = require('assert-plus'); -var mod_util = require('util'); - -var mod_extsprintf = require('extsprintf'); -var mod_isError = require('core-util-is').isError; -var sprintf = mod_extsprintf.sprintf; - -/* - * Public interface - */ - -/* So you can 'var VError = require('verror')' */ -module.exports = VError; -/* For compatibility */ -VError.VError = VError; -/* Other exported classes */ -VError.SError = SError; -VError.WError = WError; -VError.MultiError = MultiError; - -/* - * Common function used to parse constructor arguments for VError, WError, and - * SError. Named arguments to this function: - * - * strict force strict interpretation of sprintf arguments, even - * if the options in "argv" don't say so - * - * argv error's constructor arguments, which are to be - * interpreted as described in README.md. For quick - * reference, "argv" has one of the following forms: - * - * [ sprintf_args... ] (argv[0] is a string) - * [ cause, sprintf_args... ] (argv[0] is an Error) - * [ options, sprintf_args... ] (argv[0] is an object) - * - * This function normalizes these forms, producing an object with the following - * properties: - * - * options equivalent to "options" in third form. This will never - * be a direct reference to what the caller passed in - * (i.e., it may be a shallow copy), so it can be freely - * modified. - * - * shortmessage result of sprintf(sprintf_args), taking options.strict - * into account as described in README.md. - */ -function parseConstructorArguments(args) -{ - var argv, options, sprintf_args, shortmessage, k; - - mod_assertplus.object(args, 'args'); - mod_assertplus.bool(args.strict, 'args.strict'); - mod_assertplus.array(args.argv, 'args.argv'); - argv = args.argv; - - /* - * First, figure out which form of invocation we've been given. - */ - if (argv.length === 0) { - options = {}; - sprintf_args = []; - } else if (mod_isError(argv[0])) { - options = { 'cause': argv[0] }; - sprintf_args = argv.slice(1); - } else if (typeof (argv[0]) === 'object') { - options = {}; - for (k in argv[0]) { - options[k] = argv[0][k]; - } - sprintf_args = argv.slice(1); - } else { - mod_assertplus.string(argv[0], - 'first argument to VError, SError, or WError ' + - 'constructor must be a string, object, or Error'); - options = {}; - sprintf_args = argv; - } - - /* - * Now construct the error's message. - * - * extsprintf (which we invoke here with our caller's arguments in order - * to construct this Error's message) is strict in its interpretation of - * values to be processed by the "%s" specifier. The value passed to - * extsprintf must actually be a string or something convertible to a - * String using .toString(). Passing other values (notably "null" and - * "undefined") is considered a programmer error. The assumption is - * that if you actually want to print the string "null" or "undefined", - * then that's easy to do that when you're calling extsprintf; on the - * other hand, if you did NOT want that (i.e., there's actually a bug - * where the program assumes some variable is non-null and tries to - * print it, which might happen when constructing a packet or file in - * some specific format), then it's better to stop immediately than - * produce bogus output. - * - * However, sometimes the bug is only in the code calling VError, and a - * programmer might prefer to have the error message contain "null" or - * "undefined" rather than have the bug in the error path crash the - * program (making the first bug harder to identify). For that reason, - * by default VError converts "null" or "undefined" arguments to their - * string representations and passes those to extsprintf. Programmers - * desiring the strict behavior can use the SError class or pass the - * "strict" option to the VError constructor. - */ - mod_assertplus.object(options); - if (!options.strict && !args.strict) { - sprintf_args = sprintf_args.map(function (a) { - return (a === null ? 'null' : - a === undefined ? 'undefined' : a); - }); - } - - if (sprintf_args.length === 0) { - shortmessage = ''; - } else { - shortmessage = sprintf.apply(null, sprintf_args); - } - - return ({ - 'options': options, - 'shortmessage': shortmessage - }); -} - -/* - * See README.md for reference documentation. - */ -function VError() -{ - var args, obj, parsed, cause, ctor, message, k; - - args = Array.prototype.slice.call(arguments, 0); - - /* - * This is a regrettable pattern, but JavaScript's built-in Error class - * is defined to work this way, so we allow the constructor to be called - * without "new". - */ - if (!(this instanceof VError)) { - obj = Object.create(VError.prototype); - VError.apply(obj, arguments); - return (obj); - } - - /* - * For convenience and backwards compatibility, we support several - * different calling forms. Normalize them here. - */ - parsed = parseConstructorArguments({ - 'argv': args, - 'strict': false - }); - - /* - * If we've been given a name, apply it now. - */ - if (parsed.options.name) { - mod_assertplus.string(parsed.options.name, - 'error\'s "name" must be a string'); - this.name = parsed.options.name; - } - - /* - * For debugging, we keep track of the original short message (attached - * this Error particularly) separately from the complete message (which - * includes the messages of our cause chain). - */ - this.jse_shortmsg = parsed.shortmessage; - message = parsed.shortmessage; - - /* - * If we've been given a cause, record a reference to it and update our - * message appropriately. - */ - cause = parsed.options.cause; - if (cause) { - mod_assertplus.ok(mod_isError(cause), 'cause is not an Error'); - this.jse_cause = cause; - - if (!parsed.options.skipCauseMessage) { - message += ': ' + cause.message; - } - } - - /* - * If we've been given an object with properties, shallow-copy that - * here. We don't want to use a deep copy in case there are non-plain - * objects here, but we don't want to use the original object in case - * the caller modifies it later. - */ - this.jse_info = {}; - if (parsed.options.info) { - for (k in parsed.options.info) { - this.jse_info[k] = parsed.options.info[k]; - } - } - - this.message = message; - Error.call(this, message); - - if (Error.captureStackTrace) { - ctor = parsed.options.constructorOpt || this.constructor; - Error.captureStackTrace(this, ctor); - } - - return (this); -} - -mod_util.inherits(VError, Error); -VError.prototype.name = 'VError'; - -VError.prototype.toString = function ve_toString() -{ - var str = (this.hasOwnProperty('name') && this.name || - this.constructor.name || this.constructor.prototype.name); - if (this.message) - str += ': ' + this.message; - - return (str); -}; - -/* - * This method is provided for compatibility. New callers should use - * VError.cause() instead. That method also uses the saner `null` return value - * when there is no cause. - */ -VError.prototype.cause = function ve_cause() -{ - var cause = VError.cause(this); - return (cause === null ? undefined : cause); -}; - -/* - * Static methods - * - * These class-level methods are provided so that callers can use them on - * instances of Errors that are not VErrors. New interfaces should be provided - * only using static methods to eliminate the class of programming mistake where - * people fail to check whether the Error object has the corresponding methods. - */ - -VError.cause = function (err) -{ - mod_assertplus.ok(mod_isError(err), 'err must be an Error'); - return (mod_isError(err.jse_cause) ? err.jse_cause : null); -}; - -VError.info = function (err) -{ - var rv, cause, k; - - mod_assertplus.ok(mod_isError(err), 'err must be an Error'); - cause = VError.cause(err); - if (cause !== null) { - rv = VError.info(cause); - } else { - rv = {}; - } - - if (typeof (err.jse_info) == 'object' && err.jse_info !== null) { - for (k in err.jse_info) { - rv[k] = err.jse_info[k]; - } - } - - return (rv); -}; - -VError.findCauseByName = function (err, name) -{ - var cause; - - mod_assertplus.ok(mod_isError(err), 'err must be an Error'); - mod_assertplus.string(name, 'name'); - mod_assertplus.ok(name.length > 0, 'name cannot be empty'); - - for (cause = err; cause !== null; cause = VError.cause(cause)) { - mod_assertplus.ok(mod_isError(cause)); - if (cause.name == name) { - return (cause); - } - } - - return (null); -}; - -VError.hasCauseWithName = function (err, name) -{ - return (VError.findCauseByName(err, name) !== null); -}; - -VError.fullStack = function (err) -{ - mod_assertplus.ok(mod_isError(err), 'err must be an Error'); - - var cause = VError.cause(err); - - if (cause) { - return (err.stack + '\ncaused by: ' + VError.fullStack(cause)); - } - - return (err.stack); -}; - -VError.errorFromList = function (errors) -{ - mod_assertplus.arrayOfObject(errors, 'errors'); - - if (errors.length === 0) { - return (null); - } - - errors.forEach(function (e) { - mod_assertplus.ok(mod_isError(e)); - }); - - if (errors.length == 1) { - return (errors[0]); - } - - return (new MultiError(errors)); -}; - -VError.errorForEach = function (err, func) -{ - mod_assertplus.ok(mod_isError(err), 'err must be an Error'); - mod_assertplus.func(func, 'func'); - - if (err instanceof MultiError) { - err.errors().forEach(function iterError(e) { func(e); }); - } else { - func(err); - } -}; - - -/* - * SError is like VError, but stricter about types. You cannot pass "null" or - * "undefined" as string arguments to the formatter. - */ -function SError() -{ - var args, obj, parsed, options; - - args = Array.prototype.slice.call(arguments, 0); - if (!(this instanceof SError)) { - obj = Object.create(SError.prototype); - SError.apply(obj, arguments); - return (obj); - } - - parsed = parseConstructorArguments({ - 'argv': args, - 'strict': true - }); - - options = parsed.options; - VError.call(this, options, '%s', parsed.shortmessage); - - return (this); -} - -/* - * We don't bother setting SError.prototype.name because once constructed, - * SErrors are just like VErrors. - */ -mod_util.inherits(SError, VError); - - -/* - * Represents a collection of errors for the purpose of consumers that generally - * only deal with one error. Callers can extract the individual errors - * contained in this object, but may also just treat it as a normal single - * error, in which case a summary message will be printed. - */ -function MultiError(errors) -{ - mod_assertplus.array(errors, 'list of errors'); - mod_assertplus.ok(errors.length > 0, 'must be at least one error'); - this.ase_errors = errors; - - VError.call(this, { - 'cause': errors[0] - }, 'first of %d error%s', errors.length, errors.length == 1 ? '' : 's'); -} - -mod_util.inherits(MultiError, VError); -MultiError.prototype.name = 'MultiError'; - -MultiError.prototype.errors = function me_errors() -{ - return (this.ase_errors.slice(0)); -}; - - -/* - * See README.md for reference details. - */ -function WError() -{ - var args, obj, parsed, options; - - args = Array.prototype.slice.call(arguments, 0); - if (!(this instanceof WError)) { - obj = Object.create(WError.prototype); - WError.apply(obj, args); - return (obj); - } - - parsed = parseConstructorArguments({ - 'argv': args, - 'strict': false - }); - - options = parsed.options; - options['skipCauseMessage'] = true; - VError.call(this, options, '%s', parsed.shortmessage); - - return (this); -} - -mod_util.inherits(WError, VError); -WError.prototype.name = 'WError'; - -WError.prototype.toString = function we_toString() -{ - var str = (this.hasOwnProperty('name') && this.name || - this.constructor.name || this.constructor.prototype.name); - if (this.message) - str += ': ' + this.message; - if (this.jse_cause && this.jse_cause.message) - str += '; caused by ' + this.jse_cause.toString(); - - return (str); -}; - -/* - * For purely historical reasons, WError's cause() function allows you to set - * the cause. - */ -WError.prototype.cause = function we_cause(c) -{ - if (mod_isError(c)) - this.jse_cause = c; - - return (this.jse_cause); -}; diff --git a/truebit-implementation/node_modules/verror/package.json b/truebit-implementation/node_modules/verror/package.json deleted file mode 100644 index e5a7e5cc..00000000 --- a/truebit-implementation/node_modules/verror/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "_from": "verror@1.10.0", - "_id": "verror@1.10.0", - "_inBundle": false, - "_integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "_location": "/verror", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "verror@1.10.0", - "name": "verror", - "escapedName": "verror", - "rawSpec": "1.10.0", - "saveSpec": null, - "fetchSpec": "1.10.0" - }, - "_requiredBy": [ - "/jsprim" - ], - "_resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "_shasum": "3a105ca17053af55d6e270c1f8288682e18da400", - "_spec": "verror@1.10.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/jsprim", - "bugs": { - "url": "https://github.com/davepacheco/node-verror/issues" - }, - "bundleDependencies": false, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "deprecated": false, - "description": "richer JavaScript errors", - "engines": [ - "node >=0.6.0" - ], - "homepage": "https://github.com/davepacheco/node-verror#readme", - "license": "MIT", - "main": "./lib/verror.js", - "name": "verror", - "repository": { - "type": "git", - "url": "git://github.com/davepacheco/node-verror.git" - }, - "scripts": { - "test": "make test" - }, - "version": "1.10.0" -} diff --git a/truebit-implementation/node_modules/web3-bzz/README.md b/truebit-implementation/node_modules/web3-bzz/README.md deleted file mode 100644 index b52b05fe..00000000 --- a/truebit-implementation/node_modules/web3-bzz/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# web3-bzz - -This is a sub package of [web3.js][repo] - -This is the swarm package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-bzz -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-bzz.js` in your html file. -This will expose the `Web3Personal` object on the window object. - - -## Usage - -```js -// in node.js -var Web3Bzz = require('web3-bzz'); - -var bzz = new Web3Bzz('http://swarm-gateways.net'); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-bzz/package.json b/truebit-implementation/node_modules/web3-bzz/package.json deleted file mode 100644 index 98440a46..00000000 --- a/truebit-implementation/node_modules/web3-bzz/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "_from": "web3-bzz@1.0.0-beta.36", - "_id": "web3-bzz@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-clDRS/ziboJ5ytnrfxq80YSu9HQsT0vggnT3BkoXadrauyEE/9JNLxRu016jjUxqdkfdv4MgIPDdOS3Bv2ghiw==", - "_location": "/web3-bzz", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-bzz@1.0.0-beta.36", - "name": "web3-bzz", - "escapedName": "web3-bzz", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3" - ], - "_resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.36.tgz", - "_shasum": "adb3fe7a70053eb7843e32b106792b01b482ef41", - "_spec": "web3-bzz@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3", - "bundleDependencies": false, - "dependencies": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" - }, - "deprecated": false, - "description": "Web3 module to interact with the Swarm network.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-bzz", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-bzz" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-bzz/src/index.js b/truebit-implementation/node_modules/web3-bzz/src/index.js deleted file mode 100644 index cde9de05..00000000 --- a/truebit-implementation/node_modules/web3-bzz/src/index.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var swarm = require("swarm-js"); - - -var Bzz = function Bzz(provider) { - - this.givenProvider = Bzz.givenProvider; - - if (provider && provider._requestManager) { - provider = provider.currentProvider; - } - - // only allow file picker when in browser - if(typeof document !== 'undefined') { - this.pick = swarm.pick; - } - - this.setProvider(provider); -}; - -// set default ethereum provider -/* jshint ignore:start */ -Bzz.givenProvider = null; -if(typeof ethereumProvider !== 'undefined' && ethereumProvider.bzz) { - Bzz.givenProvider = ethereumProvider.bzz; -} -/* jshint ignore:end */ - -Bzz.prototype.setProvider = function(provider) { - // is ethereum provider - if(_.isObject(provider) && _.isString(provider.bzz)) { - provider = provider.bzz; - // is no string, set default - } - // else if(!_.isString(provider)) { - // provider = 'http://swarm-gateways.net'; // default to gateway - // } - - - if(_.isString(provider)) { - this.currentProvider = provider; - } else { - this.currentProvider = null; - - var noProviderError = new Error('No provider set, please set one using bzz.setProvider().'); - - this.download = this.upload = this.isAvailable = function(){ - throw noProviderError; - }; - - return false; - } - - // add functions - this.download = swarm.at(provider).download; - this.upload = swarm.at(provider).upload; - this.isAvailable = swarm.at(provider).isAvailable; - - return true; -}; - - -module.exports = Bzz; - diff --git a/truebit-implementation/node_modules/web3-core-helpers/README.md b/truebit-implementation/node_modules/web3-core-helpers/README.md deleted file mode 100644 index 0d973edf..00000000 --- a/truebit-implementation/node_modules/web3-core-helpers/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# web3-core-helpers - -This is a sub package of [web3.js][repo] - -Helper functions used in [web3.js][repo] packages. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-helpers -``` - -## Usage - -```js -// in node.js -var helpers = require('web3-core-helpers'); - -helpers.formatters; -helpers.errors; -... -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-core-helpers/package.json b/truebit-implementation/node_modules/web3-core-helpers/package.json deleted file mode 100644 index 42adf964..00000000 --- a/truebit-implementation/node_modules/web3-core-helpers/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "_from": "web3-core-helpers@1.0.0-beta.36", - "_id": "web3-core-helpers@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-gu74l0htiGWuxLQuMnZqKToFvkSM+UFPE7qUuy1ZosH/h2Jd+VBWg6k4CyNYVYfP0hL5x3CN8SBmB+HMowo55A==", - "_location": "/web3-core-helpers", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-core-helpers@1.0.0-beta.36", - "name": "web3-core-helpers", - "escapedName": "web3-core-helpers", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core", - "/web3-core-method", - "/web3-core-requestmanager", - "/web3-core-subscriptions", - "/web3-eth", - "/web3-eth-accounts", - "/web3-eth-contract", - "/web3-eth-ens", - "/web3-eth-personal", - "/web3-providers-http", - "/web3-providers-ipc", - "/web3-providers-ws" - ], - "_resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.36.tgz", - "_shasum": "6f618e80f1a6588d846efbfdc28f92ae0477f8d2", - "_spec": "web3-core-helpers@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core", - "bundleDependencies": false, - "dependencies": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 core tools helper for sub packages. This is an internal package.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-core-helpers", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-core-helpers" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-core-helpers/src/errors.js b/truebit-implementation/node_modules/web3-core-helpers/src/errors.js deleted file mode 100644 index 820b3038..00000000 --- a/truebit-implementation/node_modules/web3-core-helpers/src/errors.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file errors.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2017 - */ - -"use strict"; - -module.exports = { - ErrorResponse: function (result) { - var message = !!result && !!result.error && !!result.error.message ? result.error.message : JSON.stringify(result); - return new Error('Returned error: ' + message); - }, - InvalidNumberOfParams: function (got, expected, method) { - return new Error('Invalid number of parameters for "'+ method +'". Got '+ got +' expected '+ expected +'!'); - }, - InvalidConnection: function (host){ - return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.'); - }, - InvalidProvider: function () { - return new Error('Provider not set or invalid'); - }, - InvalidResponse: function (result){ - var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result); - return new Error(message); - }, - ConnectionTimeout: function (ms){ - return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived'); - } -}; diff --git a/truebit-implementation/node_modules/web3-core-helpers/src/formatters.js b/truebit-implementation/node_modules/web3-core-helpers/src/formatters.js deleted file mode 100644 index e82b7a37..00000000 --- a/truebit-implementation/node_modules/web3-core-helpers/src/formatters.js +++ /dev/null @@ -1,443 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file formatters.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2017 - */ - -"use strict"; - - -var _ = require('underscore'); -var utils = require('web3-utils'); -var Iban = require('web3-eth-iban'); - -/** - * Should the format output to a big number - * - * @method outputBigNumberFormatter - * @param {String|Number|BigNumber} number - * @returns {BigNumber} object - */ -var outputBigNumberFormatter = function (number) { - return utils.toBN(number).toString(10); -}; - -var isPredefinedBlockNumber = function (blockNumber) { - return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest'; -}; - -var inputDefaultBlockNumberFormatter = function (blockNumber) { - if (this && (blockNumber === undefined || blockNumber === null)) { - return this.defaultBlock; - } - if (blockNumber === 'genesis' || blockNumber === 'earliest') { - return '0x0'; - } - return inputBlockNumberFormatter(blockNumber); -}; - -var inputBlockNumberFormatter = function (blockNumber) { - if (blockNumber === undefined) { - return undefined; - } else if (isPredefinedBlockNumber(blockNumber)) { - return blockNumber; - } - return (utils.isHexStrict(blockNumber)) ? ((_.isString(blockNumber)) ? blockNumber.toLowerCase() : blockNumber) : utils.numberToHex(blockNumber); -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method _txInputFormatter - * @param {Object} transaction options - * @returns object - */ -var _txInputFormatter = function (options){ - - if (options.to) { // it might be contract creation - options.to = inputAddressFormatter(options.to); - } - - if (options.data && options.input) { - throw new Error('You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.'); - } - - if (!options.data && options.input) { - options.data = options.input; - delete options.input; - } - - if(options.data && !utils.isHex(options.data)) { - throw new Error('The data field must be HEX encoded data.'); - } - - // allow both - if (options.gas || options.gasLimit) { - options.gas = options.gas || options.gasLimit; - } - - ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) { - return options[key] !== undefined; - }).forEach(function(key){ - options[key] = utils.numberToHex(options[key]); - }); - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputCallFormatter - * @param {Object} transaction options - * @returns object -*/ -var inputCallFormatter = function (options){ - - options = _txInputFormatter(options); - - var from = options.from || (this ? this.defaultAccount : null); - - if (from) { - options.from = inputAddressFormatter(from); - } - - - return options; -}; - -/** - * Formats the input of a transaction and converts all values to HEX - * - * @method inputTransactionFormatter - * @param {Object} options - * @returns object -*/ -var inputTransactionFormatter = function (options) { - - options = _txInputFormatter(options); - - // check from, only if not number, or object - if (!_.isNumber(options.from) && !_.isObject(options.from)) { - options.from = options.from || (this ? this.defaultAccount : null); - - if (!options.from && !_.isNumber(options.from)) { - throw new Error('The send transactions "from" field must be defined!'); - } - - options.from = inputAddressFormatter(options.from); - } - - return options; -}; - -/** - * Hex encodes the data passed to eth_sign and personal_sign - * - * @method inputSignFormatter - * @param {String} data - * @returns {String} - */ -var inputSignFormatter = function (data) { - return (utils.isHexStrict(data)) ? data : utils.utf8ToHex(data); -}; - -/** - * Formats the output of a transaction to its proper values - * - * @method outputTransactionFormatter - * @param {Object} tx - * @returns {Object} -*/ -var outputTransactionFormatter = function (tx){ - if(tx.blockNumber !== null) - tx.blockNumber = utils.hexToNumber(tx.blockNumber); - if(tx.transactionIndex !== null) - tx.transactionIndex = utils.hexToNumber(tx.transactionIndex); - tx.nonce = utils.hexToNumber(tx.nonce); - tx.gas = utils.hexToNumber(tx.gas); - tx.gasPrice = outputBigNumberFormatter(tx.gasPrice); - tx.value = outputBigNumberFormatter(tx.value); - - if(tx.to && utils.isAddress(tx.to)) { // tx.to could be `0x0` or `null` while contract creation - tx.to = utils.toChecksumAddress(tx.to); - } else { - tx.to = null; // set to `null` if invalid address - } - - if(tx.from) { - tx.from = utils.toChecksumAddress(tx.from); - } - - return tx; -}; - -/** - * Formats the output of a transaction receipt to its proper values - * - * @method outputTransactionReceiptFormatter - * @param {Object} receipt - * @returns {Object} -*/ -var outputTransactionReceiptFormatter = function (receipt){ - if(typeof receipt !== 'object') { - throw new Error('Received receipt is invalid: '+ receipt); - } - - if(receipt.blockNumber !== null) - receipt.blockNumber = utils.hexToNumber(receipt.blockNumber); - if(receipt.transactionIndex !== null) - receipt.transactionIndex = utils.hexToNumber(receipt.transactionIndex); - receipt.cumulativeGasUsed = utils.hexToNumber(receipt.cumulativeGasUsed); - receipt.gasUsed = utils.hexToNumber(receipt.gasUsed); - - if(_.isArray(receipt.logs)) { - receipt.logs = receipt.logs.map(outputLogFormatter); - } - - if(receipt.contractAddress) { - receipt.contractAddress = utils.toChecksumAddress(receipt.contractAddress); - } - - if(typeof receipt.status !== 'undefined') { - receipt.status = Boolean(parseInt(receipt.status)); - } - - return receipt; -}; - -/** - * Formats the output of a block to its proper values - * - * @method outputBlockFormatter - * @param {Object} block - * @returns {Object} -*/ -var outputBlockFormatter = function(block) { - - // transform to number - block.gasLimit = utils.hexToNumber(block.gasLimit); - block.gasUsed = utils.hexToNumber(block.gasUsed); - block.size = utils.hexToNumber(block.size); - block.timestamp = utils.hexToNumber(block.timestamp); - if (block.number !== null) - block.number = utils.hexToNumber(block.number); - - if(block.difficulty) - block.difficulty = outputBigNumberFormatter(block.difficulty); - if(block.totalDifficulty) - block.totalDifficulty = outputBigNumberFormatter(block.totalDifficulty); - - if (_.isArray(block.transactions)) { - block.transactions.forEach(function(item){ - if(!_.isString(item)) - return outputTransactionFormatter(item); - }); - } - - if (block.miner) - block.miner = utils.toChecksumAddress(block.miner); - - return block; -}; - -/** - * Formats the input of a log - * - * @method inputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var inputLogFormatter = function(options) { - var toTopic = function(value){ - - if(value === null || typeof value === 'undefined') - return null; - - value = String(value); - - if(value.indexOf('0x') === 0) - return value; - else - return utils.fromUtf8(value); - }; - - if (options.fromBlock) - options.fromBlock = inputBlockNumberFormatter(options.fromBlock); - - if (options.toBlock) - options.toBlock = inputBlockNumberFormatter(options.toBlock); - - - // make sure topics, get converted to hex - options.topics = options.topics || []; - options.topics = options.topics.map(function(topic){ - return (_.isArray(topic)) ? topic.map(toTopic) : toTopic(topic); - }); - - toTopic = null; - - if (options.address) { - options.address = (_.isArray(options.address)) ? options.address.map(function (addr) { - return inputAddressFormatter(addr); - }) : inputAddressFormatter(options.address); - } - - return options; -}; - -/** - * Formats the output of a log - * - * @method outputLogFormatter - * @param {Object} log object - * @returns {Object} log -*/ -var outputLogFormatter = function(log) { - - // generate a custom log id - if(typeof log.blockHash === 'string' && - typeof log.transactionHash === 'string' && - typeof log.logIndex === 'string') { - var shaId = utils.sha3(log.blockHash.replace('0x','') + log.transactionHash.replace('0x','') + log.logIndex.replace('0x','')); - log.id = 'log_'+ shaId.replace('0x','').substr(0,8); - } else if(!log.id) { - log.id = null; - } - - if (log.blockNumber !== null) - log.blockNumber = utils.hexToNumber(log.blockNumber); - if (log.transactionIndex !== null) - log.transactionIndex = utils.hexToNumber(log.transactionIndex); - if (log.logIndex !== null) - log.logIndex = utils.hexToNumber(log.logIndex); - - if (log.address) { - log.address = utils.toChecksumAddress(log.address); - } - - return log; -}; - -/** - * Formats the input of a whisper post and converts all values to HEX - * - * @method inputPostFormatter - * @param {Object} transaction object - * @returns {Object} -*/ -var inputPostFormatter = function(post) { - - // post.payload = utils.toHex(post.payload); - - if (post.ttl) - post.ttl = utils.numberToHex(post.ttl); - if (post.workToProve) - post.workToProve = utils.numberToHex(post.workToProve); - if (post.priority) - post.priority = utils.numberToHex(post.priority); - - // fallback - if (!_.isArray(post.topics)) { - post.topics = post.topics ? [post.topics] : []; - } - - // format the following options - post.topics = post.topics.map(function(topic){ - // convert only if not hex - return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic); - }); - - return post; -}; - -/** - * Formats the output of a received post message - * - * @method outputPostFormatter - * @param {Object} - * @returns {Object} - */ -var outputPostFormatter = function(post){ - - post.expiry = utils.hexToNumber(post.expiry); - post.sent = utils.hexToNumber(post.sent); - post.ttl = utils.hexToNumber(post.ttl); - post.workProved = utils.hexToNumber(post.workProved); - // post.payloadRaw = post.payload; - // post.payload = utils.hexToAscii(post.payload); - - // if (utils.isJson(post.payload)) { - // post.payload = JSON.parse(post.payload); - // } - - // format the following options - if (!post.topics) { - post.topics = []; - } - post.topics = post.topics.map(function(topic){ - return utils.toUtf8(topic); - }); - - return post; -}; - -var inputAddressFormatter = function (address) { - var iban = new Iban(address); - if (iban.isValid() && iban.isDirect()) { - return iban.toAddress().toLowerCase(); - } else if (utils.isAddress(address)) { - return '0x' + address.toLowerCase().replace('0x',''); - } - throw new Error('Provided address "'+ address +'" is invalid, the capitalization checksum test failed, or its an indrect IBAN address which can\'t be converted.'); -}; - - -var outputSyncingFormatter = function(result) { - - result.startingBlock = utils.hexToNumber(result.startingBlock); - result.currentBlock = utils.hexToNumber(result.currentBlock); - result.highestBlock = utils.hexToNumber(result.highestBlock); - if (result.knownStates) { - result.knownStates = utils.hexToNumber(result.knownStates); - result.pulledStates = utils.hexToNumber(result.pulledStates); - } - - return result; -}; - -module.exports = { - inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter, - inputBlockNumberFormatter: inputBlockNumberFormatter, - inputCallFormatter: inputCallFormatter, - inputTransactionFormatter: inputTransactionFormatter, - inputAddressFormatter: inputAddressFormatter, - inputPostFormatter: inputPostFormatter, - inputLogFormatter: inputLogFormatter, - inputSignFormatter: inputSignFormatter, - outputBigNumberFormatter: outputBigNumberFormatter, - outputTransactionFormatter: outputTransactionFormatter, - outputTransactionReceiptFormatter: outputTransactionReceiptFormatter, - outputBlockFormatter: outputBlockFormatter, - outputLogFormatter: outputLogFormatter, - outputPostFormatter: outputPostFormatter, - outputSyncingFormatter: outputSyncingFormatter -}; - diff --git a/truebit-implementation/node_modules/web3-core-helpers/src/index.js b/truebit-implementation/node_modules/web3-core-helpers/src/index.js deleted file mode 100644 index b0f9a4db..00000000 --- a/truebit-implementation/node_modules/web3-core-helpers/src/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var errors = require('./errors'); -var formatters = require('./formatters'); - -module.exports = { - errors: errors, - formatters: formatters -}; - diff --git a/truebit-implementation/node_modules/web3-core-method/README.md b/truebit-implementation/node_modules/web3-core-method/README.md deleted file mode 100644 index 01c5dd4e..00000000 --- a/truebit-implementation/node_modules/web3-core-method/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# web3-core-method - -This is a sub package of [web3.js][repo] - -The Method package used within most [web3.js][repo] packages. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-method -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-core-method.js` in your html file. -This will expose the `Web3Method` object on the window object. - - -## Usage - -```js -// in node.js -var Web3Method = require('web3-core-method'); - -var method = new Web3Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [inputTransactionFormatter] -}); -method.attachToObject(myCoolLib); - -myCoolLib.sendTransaction({...}, function(){ ... }); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-core-method/package.json b/truebit-implementation/node_modules/web3-core-method/package.json deleted file mode 100644 index f49c4ace..00000000 --- a/truebit-implementation/node_modules/web3-core-method/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_from": "web3-core-method@1.0.0-beta.36", - "_id": "web3-core-method@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-dJsP3KkGaqBBSdxfzvLsYPOmVaSs1lR/3oKob/gtUYG7UyTnwquwliAc7OXj+gqRA2E/FHZcM83cWdl31ltdSA==", - "_location": "/web3-core-method", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-core-method@1.0.0-beta.36", - "name": "web3-core-method", - "escapedName": "web3-core-method", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core", - "/web3-eth", - "/web3-eth-accounts", - "/web3-eth-contract", - "/web3-eth-personal", - "/web3-net", - "/web3-shh" - ], - "_resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.36.tgz", - "_shasum": "855c0365ae7d0ead394d973ea9e28828602900e0", - "_spec": "web3-core-method@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core", - "bundleDependencies": false, - "dependencies": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Creates the methods on the web3 modules. This is an internal package.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-core-method", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-core-method" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-core-method/src/index.js b/truebit-implementation/node_modules/web3-core-method/src/index.js deleted file mode 100644 index e8012bf7..00000000 --- a/truebit-implementation/node_modules/web3-core-method/src/index.js +++ /dev/null @@ -1,607 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @author Marek Kotewicz - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var formatters = require('web3-core-helpers').formatters; -var utils = require('web3-utils'); -var promiEvent = require('web3-core-promievent'); -var Subscriptions = require('web3-core-subscriptions').subscriptions; - -var TIMEOUTBLOCK = 50; -var POLLINGTIMEOUT = 15 * TIMEOUTBLOCK; // ~average block time (seconds) * TIMEOUTBLOCK -var CONFIRMATIONBLOCKS = 24; - -var Method = function Method(options) { - - if(!options.call || !options.name) { - throw new Error('When creating a method you need to provide at least the "name" and "call" property.'); - } - - this.name = options.name; - this.call = options.call; - this.params = options.params || 0; - this.inputFormatter = options.inputFormatter; - this.outputFormatter = options.outputFormatter; - this.transformPayload = options.transformPayload; - this.extraFormatters = options.extraFormatters; - - this.requestManager = options.requestManager; - - // reference to eth.accounts - this.accounts = options.accounts; - - this.defaultBlock = options.defaultBlock || 'latest'; - this.defaultAccount = options.defaultAccount || null; -}; - -Method.prototype.setRequestManager = function (requestManager, accounts) { - this.requestManager = requestManager; - - // reference to eth.accounts - if (accounts) { - this.accounts = accounts; - } - -}; - -Method.prototype.createFunction = function (requestManager, accounts) { - var func = this.buildCall(); - func.call = this.call; - - this.setRequestManager(requestManager || this.requestManager, accounts || this.accounts); - - return func; -}; - -Method.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - func.call = this.call; - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - -/** - * Should be used to determine name of the jsonrpc method based on arguments - * - * @method getCall - * @param {Array} arguments - * @return {String} name of jsonrpc method - */ -Method.prototype.getCall = function (args) { - return _.isFunction(this.call) ? this.call(args) : this.call; -}; - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ -Method.prototype.extractCallback = function (args) { - if (_.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ -Method.prototype.validateArgs = function (args) { - if (args.length !== this.params) { - throw errors.InvalidNumberOfParams(args.length, this.params, this.name); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ -Method.prototype.formatInput = function (args) { - var _this = this; - - if (!this.inputFormatter) { - return args; - } - - return this.inputFormatter.map(function (formatter, index) { - // bind this for defaultBlock, and defaultAccount - return formatter ? formatter.call(_this, args[index]) : args[index]; - }); -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ -Method.prototype.formatOutput = function (result) { - var _this = this; - - if(_.isArray(result)) { - return result.map(function(res){ - return _this.outputFormatter && res ? _this.outputFormatter(res) : res; - }); - } else { - return this.outputFormatter && result ? this.outputFormatter(result) : result; - } -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Method.prototype.toPayload = function (args) { - var call = this.getCall(args); - var callback = this.extractCallback(args); - var params = this.formatInput(args); - this.validateArgs(params); - - var payload = { - method: call, - params: params, - callback: callback - }; - - if (this.transformPayload) { - payload = this.transformPayload(payload); - } - - return payload; -}; - - -Method.prototype._confirmTransaction = function (defer, result, payload) { - var method = this, - promiseResolved = false, - canUnsubscribe = true, - timeoutCount = 0, - confirmationCount = 0, - intervalId = null, - receiptJSON = '', - gasProvided = (_.isObject(payload.params[0]) && payload.params[0].gas) ? payload.params[0].gas : null, - isContractDeployment = _.isObject(payload.params[0]) && - payload.params[0].data && - payload.params[0].from && - !payload.params[0].to; - - // add custom send Methods - var _ethereumCalls = [ - new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - inputFormatter: [null], - outputFormatter: formatters.outputTransactionReceiptFormatter - }), - new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter] - }), - new Subscriptions({ - name: 'subscribe', - type: 'eth', - subscriptions: { - 'newBlockHeaders': { - subscriptionName: 'newHeads', // replace subscription with this name - params: 0, - outputFormatter: formatters.outputBlockFormatter - } - } - }) - ]; - // attach methods to this._ethereumCall - var _ethereumCall = {}; - _.each(_ethereumCalls, function (mthd) { - mthd.attachToObject(_ethereumCall); - mthd.requestManager = method.requestManager; // assign rather than call setRequestManager() - }); - - - // fire "receipt" and confirmation events and resolve after - var checkConfirmation = function (existingReceipt, isPolling, err, blockHeader, sub) { - if (!err) { - // create fake unsubscribe - if (!sub) { - sub = { - unsubscribe: function () { - clearInterval(intervalId); - } - }; - } - // if we have a valid receipt we don't need to send a request - return (existingReceipt ? promiEvent.resolve(existingReceipt) : _ethereumCall.getTransactionReceipt(result)) - // catch error from requesting receipt - .catch(function (err) { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError({message: 'Failed to check for transaction receipt:', data: err}, defer.eventEmitter, defer.reject); - }) - // if CONFIRMATION listener exists check for confirmations, by setting canUnsubscribe = false - .then(function(receipt) { - if (!receipt || !receipt.blockHash) { - throw new Error('Receipt missing or blockHash null'); - } - - // apply extra formatters - if (method.extraFormatters && method.extraFormatters.receiptFormatter) { - receipt = method.extraFormatters.receiptFormatter(receipt); - } - - // check if confirmation listener exists - if (defer.eventEmitter.listeners('confirmation').length > 0) { - - // If there was an immediately retrieved receipt, it's already - // been confirmed by the direct call to checkConfirmation needed - // for parity instant-seal - if (existingReceipt === undefined || confirmationCount !== 0){ - defer.eventEmitter.emit('confirmation', confirmationCount, receipt); - } - - canUnsubscribe = false; - confirmationCount++; - - if (confirmationCount === CONFIRMATIONBLOCKS + 1) { // add 1 so we account for conf 0 - sub.unsubscribe(); - defer.eventEmitter.removeAllListeners(); - } - } - - return receipt; - }) - // CHECK for CONTRACT DEPLOYMENT - .then(function(receipt) { - - if (isContractDeployment && !promiseResolved) { - - if (!receipt.contractAddress) { - - if (canUnsubscribe) { - sub.unsubscribe(); - promiseResolved = true; - } - - utils._fireError(new Error('The transaction receipt didn\'t contain a contract address.'), defer.eventEmitter, defer.reject); - return; - } - - _ethereumCall.getCode(receipt.contractAddress, function (e, code) { - - if (!code) { - return; - } - - - if (code.length > 2) { - defer.eventEmitter.emit('receipt', receipt); - - // if contract, return instance instead of receipt - if (method.extraFormatters && method.extraFormatters.contractDeployFormatter) { - defer.resolve(method.extraFormatters.contractDeployFormatter(receipt)); - } else { - defer.resolve(receipt); - } - - // need to remove listeners, as they aren't removed automatically when succesfull - if (canUnsubscribe) { - defer.eventEmitter.removeAllListeners(); - } - - } else { - utils._fireError(new Error('The contract code couldn\'t be stored, please check your gas limit.'), defer.eventEmitter, defer.reject); - } - - if (canUnsubscribe) { - sub.unsubscribe(); - } - promiseResolved = true; - }); - } - - return receipt; - }) - // CHECK for normal tx check for receipt only - .then(function(receipt) { - - if (!isContractDeployment && !promiseResolved) { - - if(!receipt.outOfGas && - (!gasProvided || gasProvided !== receipt.gasUsed) && - (receipt.status === true || receipt.status === '0x1' || typeof receipt.status === 'undefined')) { - defer.eventEmitter.emit('receipt', receipt); - defer.resolve(receipt); - - // need to remove listeners, as they aren't removed automatically when succesfull - if (canUnsubscribe) { - defer.eventEmitter.removeAllListeners(); - } - - } else { - receiptJSON = JSON.stringify(receipt, null, 2); - if (receipt.status === false || receipt.status === '0x0') { - utils._fireError(new Error("Transaction has been reverted by the EVM:\n" + receiptJSON), - defer.eventEmitter, defer.reject); - } else { - utils._fireError( - new Error("Transaction ran out of gas. Please provide more gas:\n" + receiptJSON), - defer.eventEmitter, defer.reject); - } - } - - if (canUnsubscribe) { - sub.unsubscribe(); - } - promiseResolved = true; - } - - }) - // time out the transaction if not mined after 50 blocks - .catch(function () { - timeoutCount++; - - // check to see if we are http polling - if(!!isPolling) { - // polling timeout is different than TIMEOUTBLOCK blocks since we are triggering every second - if (timeoutCount - 1 >= POLLINGTIMEOUT) { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError(new Error('Transaction was not mined within' + POLLINGTIMEOUT + ' seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!'), defer.eventEmitter, defer.reject); - } - } else { - if (timeoutCount - 1 >= TIMEOUTBLOCK) { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError(new Error('Transaction was not mined within 50 blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!'), defer.eventEmitter, defer.reject); - } - } - }); - - - } else { - sub.unsubscribe(); - promiseResolved = true; - utils._fireError({message: 'Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.', data: err}, defer.eventEmitter, defer.reject); - } - }; - - // start watching for confirmation depending on the support features of the provider - var startWatching = function(existingReceipt) { - // if provider allows PUB/SUB - if (_.isFunction(this.requestManager.provider.on)) { - _ethereumCall.subscribe('newBlockHeaders', checkConfirmation.bind(null, existingReceipt, false)); - } else { - intervalId = setInterval(checkConfirmation.bind(null, existingReceipt, true), 1000); - } - }.bind(this); - - - // first check if we already have a confirmed transaction - _ethereumCall.getTransactionReceipt(result) - .then(function(receipt) { - if (receipt && receipt.blockHash) { - if (defer.eventEmitter.listeners('confirmation').length > 0) { - // We must keep on watching for new Blocks, if a confirmation listener is present - startWatching(receipt); - } - checkConfirmation(receipt, false); - - } else if (!promiseResolved) { - startWatching(); - } - }) - .catch(function(){ - if (!promiseResolved) startWatching(); - }); - -}; - - -var getWallet = function(from, accounts) { - var wallet = null; - - // is index given - if (_.isNumber(from)) { - wallet = accounts.wallet[from]; - - // is account given - } else if (_.isObject(from) && from.address && from.privateKey) { - wallet = from; - - // search in wallet for address - } else { - wallet = accounts.wallet[from.toLowerCase()]; - } - - return wallet; -}; - -Method.prototype.buildCall = function() { - var method = this, - isSendTx = (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction'); // || method.call === 'personal_sendTransaction' - - // actual send function - var send = function () { - var defer = promiEvent(!isSendTx), - payload = method.toPayload(Array.prototype.slice.call(arguments)); - - - // CALLBACK function - var sendTxCallback = function (err, result) { - try { - result = method.formatOutput(result); - } catch(e) { - err = e; - } - - if (result instanceof Error) { - err = result; - } - - if (!err) { - if (payload.callback) { - payload.callback(null, result); - } - } else { - if(err.error) { - err = err.error; - } - - return utils._fireError(err, defer.eventEmitter, defer.reject, payload.callback); - } - - // return PROMISE - if (!isSendTx) { - - if (!err) { - defer.resolve(result); - - } - - // return PROMIEVENT - } else { - defer.eventEmitter.emit('transactionHash', result); - - method._confirmTransaction(defer, result, payload); - } - - }; - - // SENDS the SIGNED SIGNATURE - var sendSignedTx = function(sign){ - - var signedPayload = _.extend({}, payload, { - method: 'eth_sendRawTransaction', - params: [sign.rawTransaction] - }); - - method.requestManager.send(signedPayload, sendTxCallback); - }; - - - var sendRequest = function(payload, method) { - - if (method && method.accounts && method.accounts.wallet && method.accounts.wallet.length) { - var wallet; - - // ETH_SENDTRANSACTION - if (payload.method === 'eth_sendTransaction') { - var tx = payload.params[0]; - wallet = getWallet((_.isObject(tx)) ? tx.from : null, method.accounts); - - - // If wallet was found, sign tx, and send using sendRawTransaction - if (wallet && wallet.privateKey) { - return method.accounts.signTransaction(_.omit(tx, 'from'), wallet.privateKey).then(sendSignedTx); - } - - // ETH_SIGN - } else if (payload.method === 'eth_sign') { - var data = payload.params[1]; - wallet = getWallet(payload.params[0], method.accounts); - - // If wallet was found, sign tx, and send using sendRawTransaction - if (wallet && wallet.privateKey) { - var sign = method.accounts.sign(data, wallet.privateKey); - - if (payload.callback) { - payload.callback(null, sign.signature); - } - - defer.resolve(sign.signature); - return; - } - - - } - } - - return method.requestManager.send(payload, sendTxCallback); - }; - - // Send the actual transaction - if(isSendTx && _.isObject(payload.params[0]) && typeof payload.params[0].gasPrice === 'undefined') { - - var getGasPrice = (new Method({ - name: 'getGasPrice', - call: 'eth_gasPrice', - params: 0 - })).createFunction(method.requestManager); - - getGasPrice(function (err, gasPrice) { - - if (gasPrice) { - payload.params[0].gasPrice = gasPrice; - } - sendRequest(payload, method); - }); - - } else { - sendRequest(payload, method); - } - - - return defer.eventEmitter; - }; - - // necessary to attach things to the method - send.method = method; - // necessary for batch requests - send.request = this.request.bind(this); - return send; -}; - -/** - * Should be called to create the pure JSONRPC request which can be used in a batch request - * - * @method request - * @return {Object} jsonrpc request - */ -Method.prototype.request = function () { - var payload = this.toPayload(Array.prototype.slice.call(arguments)); - payload.format = this.formatOutput.bind(this); - return payload; -}; - -module.exports = Method; diff --git a/truebit-implementation/node_modules/web3-core-promievent/README.md b/truebit-implementation/node_modules/web3-core-promievent/README.md deleted file mode 100644 index cfdf0b6e..00000000 --- a/truebit-implementation/node_modules/web3-core-promievent/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# web3-core-promievent - -This is a sub package of [web3.js][repo] - -This is the PromiEvent package is used to return a EventEmitter mixed with a Promise to allow multiple final states as well as chaining. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-promievent -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-core-promievent.js` in your html file. -This will expose the `Web3PromiEvent` object on the window object. - - -## Usage - -```js -// in node.js -var Web3PromiEvent = require('web3-core-promievent'); - -var myFunc = function(){ - var promiEvent = Web3PromiEvent(); - - setTimeout(function() { - promiEvent.eventEmitter.emit('done', 'Hello!'); - promiEvent.resolve('Hello!'); - }, 10); - - return promiEvent.eventEmitter; -}; - - -// and run it -myFunc() -.then(console.log); -.on('done', console.log); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-core-promievent/package.json b/truebit-implementation/node_modules/web3-core-promievent/package.json deleted file mode 100644 index 7161eaba..00000000 --- a/truebit-implementation/node_modules/web3-core-promievent/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "_from": "web3-core-promievent@1.0.0-beta.36", - "_id": "web3-core-promievent@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-RGIL6TjcOeJTullFLMurChPTsg94cPF6LI763y/sPYtXTDol1vVa+J5aGLp/4WW8v+s+1bSQO6zYq2ZtkbmtEQ==", - "_location": "/web3-core-promievent", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-core-promievent@1.0.0-beta.36", - "name": "web3-core-promievent", - "escapedName": "web3-core-promievent", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core-method", - "/web3-eth-contract", - "/web3-eth-ens" - ], - "_resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.36.tgz", - "_shasum": "3a5127787fff751be6de272722cbc77dc9523fd5", - "_spec": "web3-core-promievent@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core-method", - "bundleDependencies": false, - "dependencies": { - "any-promise": "1.3.0", - "eventemitter3": "1.1.1" - }, - "deprecated": false, - "description": "This package extends eventEmitters with promises to allow chaining as well as multiple final states of a function.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-core-promievent", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-core-promievent" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-core-promievent/src/index.js b/truebit-implementation/node_modules/web3-core-promievent/src/index.js deleted file mode 100644 index 3799b3dc..00000000 --- a/truebit-implementation/node_modules/web3-core-promievent/src/index.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2016 - */ - -"use strict"; - -var EventEmitter = require('eventemitter3'); -var Promise = require("any-promise"); - -/** - * This function generates a defer promise and adds eventEmitter functionality to it - * - * @method eventifiedPromise - */ -var PromiEvent = function PromiEvent(justPromise) { - var resolve, reject, - eventEmitter = new Promise(function() { - resolve = arguments[0]; - reject = arguments[1]; - }); - - if(justPromise) { - return { - resolve: resolve, - reject: reject, - eventEmitter: eventEmitter - }; - } - - // get eventEmitter - var emitter = new EventEmitter(); - - // add eventEmitter to the promise - eventEmitter._events = emitter._events; - eventEmitter.emit = emitter.emit; - eventEmitter.on = emitter.on; - eventEmitter.once = emitter.once; - eventEmitter.off = emitter.off; - eventEmitter.listeners = emitter.listeners; - eventEmitter.addListener = emitter.addListener; - eventEmitter.removeListener = emitter.removeListener; - eventEmitter.removeAllListeners = emitter.removeAllListeners; - - return { - resolve: resolve, - reject: reject, - eventEmitter: eventEmitter - }; -}; - -PromiEvent.resolve = function(value) { - var promise = PromiEvent(true); - promise.resolve(value); - return promise.eventEmitter; -}; - -module.exports = PromiEvent; diff --git a/truebit-implementation/node_modules/web3-core-requestmanager/README.md b/truebit-implementation/node_modules/web3-core-requestmanager/README.md deleted file mode 100644 index 7e160bec..00000000 --- a/truebit-implementation/node_modules/web3-core-requestmanager/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# web3-core-requestmanager - -This is a sub package of [web3.js][repo] - -The requestmanager package is used by most [web3.js][repo] packages. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-requestmanager -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-core-requestmanager.js` in your html file. -This will expose the `Web3RequestManager` object on the window object. - - -## Usage - -```js -// in node.js -var Web3WsProvider = require('web3-providers-ws'); -var Web3RequestManager = require('web3-core-requestmanager'); - -var requestManager = new Web3RequestManager(new Web3WsProvider('ws://localhost:8546')); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-core-requestmanager/package.json b/truebit-implementation/node_modules/web3-core-requestmanager/package.json deleted file mode 100644 index e831eed4..00000000 --- a/truebit-implementation/node_modules/web3-core-requestmanager/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "_from": "web3-core-requestmanager@1.0.0-beta.36", - "_id": "web3-core-requestmanager@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-/CHuaMbiMDu1v8ANGYI7yFCnh1GaCWx5pKnUPJf+QTk2xAAw+Bvd97yZJIWPOK5AOPUIzxgwx9Ob/5ln6mTmYA==", - "_location": "/web3-core-requestmanager", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-core-requestmanager@1.0.0-beta.36", - "name": "web3-core-requestmanager", - "escapedName": "web3-core-requestmanager", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core" - ], - "_resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.36.tgz", - "_shasum": "70c8eead84da9ed1cf258e6dde3f137116d0691b", - "_spec": "web3-core-requestmanager@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core", - "bundleDependencies": false, - "dependencies": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-providers-http": "1.0.0-beta.36", - "web3-providers-ipc": "1.0.0-beta.36", - "web3-providers-ws": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module to handle requests to external providers.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-core-requestmanager", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-core-requestmanager" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-core-requestmanager/src/batch.js b/truebit-implementation/node_modules/web3-core-requestmanager/src/batch.js deleted file mode 100644 index c47aaf7b..00000000 --- a/truebit-implementation/node_modules/web3-core-requestmanager/src/batch.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file batch.js - * @author Marek Kotewicz - * @date 2015 - */ - -"use strict"; - -var Jsonrpc = require('./jsonrpc'); -var errors = require('web3-core-helpers').errors; - -var Batch = function (requestManager) { - this.requestManager = requestManager; - this.requests = []; -}; - -/** - * Should be called to add create new request to batch request - * - * @method add - * @param {Object} jsonrpc requet object - */ -Batch.prototype.add = function (request) { - this.requests.push(request); -}; - -/** - * Should be called to execute batch request - * - * @method execute - */ -Batch.prototype.execute = function () { - var requests = this.requests; - this.requestManager.sendBatch(requests, function (err, results) { - results = results || []; - requests.map(function (request, index) { - return results[index] || {}; - }).forEach(function (result, index) { - if (requests[index].callback) { - if (result && result.error) { - return requests[index].callback(errors.ErrorResponse(result)); - } - - if (!Jsonrpc.isValidResponse(result)) { - return requests[index].callback(errors.InvalidResponse(result)); - } - - try { - requests[index].callback(null, requests[index].format ? requests[index].format(result.result) : result.result); - } catch (err) { - requests[index].callback(err); - } - } - }); - }); -}; - -module.exports = Batch; - diff --git a/truebit-implementation/node_modules/web3-core-requestmanager/src/givenProvider.js b/truebit-implementation/node_modules/web3-core-requestmanager/src/givenProvider.js deleted file mode 100644 index cc215fcb..00000000 --- a/truebit-implementation/node_modules/web3-core-requestmanager/src/givenProvider.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file givenProvider.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var givenProvider = null; - -// ADD GIVEN PROVIDER -/* jshint ignore:start */ -var global = Function('return this')(); - -// EthereumProvider -if(typeof global.ethereumProvider !== 'undefined') { - givenProvider = global.ethereumProvider; - -// Legacy web3.currentProvider -} else if(typeof global.web3 !== 'undefined' && global.web3.currentProvider) { - - if(global.web3.currentProvider.sendAsync) { - global.web3.currentProvider.send = global.web3.currentProvider.sendAsync; - delete global.web3.currentProvider.sendAsync; - } - - // if connection is 'ipcProviderWrapper', add subscription support - if(!global.web3.currentProvider.on && - global.web3.currentProvider.connection && - global.web3.currentProvider.connection.constructor.name === 'ipcProviderWrapper') { - - global.web3.currentProvider.on = function (type, callback) { - - if(typeof callback !== 'function') - throw new Error('The second parameter callback must be a function.'); - - switch(type){ - case 'data': - this.connection.on('data', function(data) { - var result = ''; - - data = data.toString(); - - try { - result = JSON.parse(data); - } catch(e) { - return callback(new Error('Couldn\'t parse response data'+ data)); - } - - // notification - if(!result.id && result.method.indexOf('_subscription') !== -1) { - callback(null, result); - } - - }); - break; - - default: - this.connection.on(type, callback); - break; - } - }; - } - - givenProvider = global.web3.currentProvider; -} -/* jshint ignore:end */ - - -module.exports = givenProvider; diff --git a/truebit-implementation/node_modules/web3-core-requestmanager/src/index.js b/truebit-implementation/node_modules/web3-core-requestmanager/src/index.js deleted file mode 100644 index 4fc48d49..00000000 --- a/truebit-implementation/node_modules/web3-core-requestmanager/src/index.js +++ /dev/null @@ -1,246 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var Jsonrpc = require('./jsonrpc.js'); -var BatchManager = require('./batch.js'); -var givenProvider = require('./givenProvider.js'); - - - - /** - * It's responsible for passing messages to providers - * It's also responsible for polling the ethereum node for incoming messages - * Default poll timeout is 1 second - * Singleton - */ -var RequestManager = function RequestManager(provider) { - this.provider = null; - this.providers = RequestManager.providers; - - this.setProvider(provider); - this.subscriptions = {}; -}; - - - -RequestManager.givenProvider = givenProvider; - -RequestManager.providers = { - WebsocketProvider: require('web3-providers-ws'), - HttpProvider: require('web3-providers-http'), - IpcProvider: require('web3-providers-ipc') -}; - - - -/** - * Should be used to set provider of request manager - * - * @method setProvider - * @param {Object} p - */ -RequestManager.prototype.setProvider = function (p, net) { - var _this = this; - - // autodetect provider - if(p && typeof p === 'string' && this.providers) { - - // HTTP - if(/^http(s)?:\/\//i.test(p)) { - p = new this.providers.HttpProvider(p); - - // WS - } else if(/^ws(s)?:\/\//i.test(p)) { - p = new this.providers.WebsocketProvider(p); - - // IPC - } else if(p && typeof net === 'object' && typeof net.connect === 'function') { - p = new this.providers.IpcProvider(p, net); - - } else if(p) { - throw new Error('Can\'t autodetect provider for "'+ p +'"'); - } - } - - // reset the old one before changing, if still connected - if(this.provider && this.provider.connected) - this.clearSubscriptions(); - - - this.provider = p || null; - - // listen to incoming notifications - if(this.provider && this.provider.on) { - this.provider.on('data', function requestManagerNotification(result, deprecatedResult){ - result = result || deprecatedResult; // this is for possible old providers, which may had the error first handler - - // check for result.method, to prevent old providers errors to pass as result - if(result.method && _this.subscriptions[result.params.subscription] && _this.subscriptions[result.params.subscription].callback) { - _this.subscriptions[result.params.subscription].callback(null, result.params.result); - } - }); - // TODO add error, end, timeout, connect?? - // this.provider.on('error', function requestManagerNotification(result){ - // Object.keys(_this.subscriptions).forEach(function(id){ - // if(_this.subscriptions[id].callback) - // _this.subscriptions[id].callback(err); - // }); - // } - } -}; - - -/** - * Should be used to asynchronously send request - * - * @method sendAsync - * @param {Object} data - * @param {Function} callback - */ -RequestManager.prototype.send = function (data, callback) { - callback = callback || function(){}; - - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toPayload(data.method, data.params); - this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, result) { - if(result && result.id && payload.id !== result.id) return callback(new Error('Wrong response id "'+ result.id +'" (expected: "'+ payload.id +'") in '+ JSON.stringify(payload))); - - if (err) { - return callback(err); - } - - if (result && result.error) { - return callback(errors.ErrorResponse(result)); - } - - if (!Jsonrpc.isValidResponse(result)) { - return callback(errors.InvalidResponse(result)); - } - - callback(null, result.result); - }); -}; - -/** - * Should be called to asynchronously send batch request - * - * @method sendBatch - * @param {Array} batch data - * @param {Function} callback - */ -RequestManager.prototype.sendBatch = function (data, callback) { - if (!this.provider) { - return callback(errors.InvalidProvider()); - } - - var payload = Jsonrpc.toBatchPayload(data); - this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, results) { - if (err) { - return callback(err); - } - - if (!_.isArray(results)) { - return callback(errors.InvalidResponse(results)); - } - - callback(null, results); - }); -}; - - -/** - * Waits for notifications - * - * @method addSubscription - * @param {String} id the subscription id - * @param {String} name the subscription name - * @param {String} type the subscription namespace (eth, personal, etc) - * @param {Function} callback the callback to call for incoming notifications - */ -RequestManager.prototype.addSubscription = function (id, name, type, callback) { - if(this.provider.on) { - this.subscriptions[id] = { - callback: callback, - type: type, - name: name - }; - - } else { - throw new Error('The provider doesn\'t support subscriptions: '+ this.provider.constructor.name); - } -}; - -/** - * Waits for notifications - * - * @method removeSubscription - * @param {String} id the subscription id - * @param {Function} callback fired once the subscription is removed - */ -RequestManager.prototype.removeSubscription = function (id, callback) { - var _this = this; - - if(this.subscriptions[id]) { - - this.send({ - method: this.subscriptions[id].type + '_unsubscribe', - params: [id] - }, callback); - - // remove subscription - delete _this.subscriptions[id]; - } -}; - -/** - * Should be called to reset the subscriptions - * - * @method reset - */ -RequestManager.prototype.clearSubscriptions = function (keepIsSyncing) { - var _this = this; - - - // uninstall all subscriptions - Object.keys(this.subscriptions).forEach(function(id){ - if(!keepIsSyncing || _this.subscriptions[id].name !== 'syncing') - _this.removeSubscription(id); - }); - - - // reset notification callbacks etc. - if(this.provider.reset) - this.provider.reset(); -}; - -module.exports = { - Manager: RequestManager, - BatchManager: BatchManager -}; diff --git a/truebit-implementation/node_modules/web3-core-requestmanager/src/jsonrpc.js b/truebit-implementation/node_modules/web3-core-requestmanager/src/jsonrpc.js deleted file mode 100644 index dfb90184..00000000 --- a/truebit-implementation/node_modules/web3-core-requestmanager/src/jsonrpc.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file jsonrpc.js - * @authors: - * Fabian Vogelsteller - * Marek Kotewicz - * Aaron Kumavis - * @date 2015 - */ - -"use strict"; - -// Initialize Jsonrpc as a simple object with utility functions. -var Jsonrpc = { - messageId: 0 -}; - -/** - * Should be called to valid json create payload object - * - * @method toPayload - * @param {Function} method of jsonrpc call, required - * @param {Array} params, an array of method params, optional - * @returns {Object} valid jsonrpc payload object - */ -Jsonrpc.toPayload = function (method, params) { - if (!method) { - throw new Error('JSONRPC method should be specified for params: "'+ JSON.stringify(params) +'"!'); - } - - // advance message ID - Jsonrpc.messageId++; - - return { - jsonrpc: '2.0', - id: Jsonrpc.messageId, - method: method, - params: params || [] - }; -}; - -/** - * Should be called to check if jsonrpc response is valid - * - * @method isValidResponse - * @param {Object} - * @returns {Boolean} true if response is valid, otherwise false - */ -Jsonrpc.isValidResponse = function (response) { - return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response); - - function validateSingleMessage(message){ - return !!message && - !message.error && - message.jsonrpc === '2.0' && - (typeof message.id === 'number' || typeof message.id === 'string') && - message.result !== undefined; // only undefined is not valid json object - } -}; - -/** - * Should be called to create batch payload object - * - * @method toBatchPayload - * @param {Array} messages, an array of objects with method (required) and params (optional) fields - * @returns {Array} batch payload - */ -Jsonrpc.toBatchPayload = function (messages) { - return messages.map(function (message) { - return Jsonrpc.toPayload(message.method, message.params); - }); -}; - -module.exports = Jsonrpc; - diff --git a/truebit-implementation/node_modules/web3-core-subscriptions/README.md b/truebit-implementation/node_modules/web3-core-subscriptions/README.md deleted file mode 100644 index 98ae2f91..00000000 --- a/truebit-implementation/node_modules/web3-core-subscriptions/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# web3-core-subscriptions - -This is a sub package of [web3.js][repo] - -The subscriptions package used within some [web3.js][repo] packages. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core-subscriptions -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-core-subscriptions.js` in your html file. -This will expose the `Web3Subscriptions` object on the window object. - - -## Usage - -```js -// in node.js -var Web3Subscriptions = require('web3-core-subscriptions'); - -var sub = new Web3Subscriptions({ - name: 'subscribe', - type: 'eth', - subscriptions: { - 'newBlockHeaders': { - subscriptionName: 'newHeads', - params: 0, - outputFormatter: formatters.outputBlockFormatter - }, - 'pendingTransactions': { - params: 0, - outputFormatter: formatters.outputTransactionFormatter - } - } -}); -sub.attachToObject(myCoolLib); - -myCoolLib.subscribe('newBlockHeaders', function(){ ... }); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-core-subscriptions/package.json b/truebit-implementation/node_modules/web3-core-subscriptions/package.json deleted file mode 100644 index 077428c4..00000000 --- a/truebit-implementation/node_modules/web3-core-subscriptions/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "_from": "web3-core-subscriptions@1.0.0-beta.36", - "_id": "web3-core-subscriptions@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-/evyLQ8CMEYXC5aUCodDpmEnmGVYQxaIjiEIfA/85f9ifHkfzP1aOwCAjcsLsJWnwrWDagxSpjCYrDtnNabdEw==", - "_location": "/web3-core-subscriptions", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-core-subscriptions@1.0.0-beta.36", - "name": "web3-core-subscriptions", - "escapedName": "web3-core-subscriptions", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core-method", - "/web3-eth", - "/web3-eth-contract", - "/web3-shh" - ], - "_resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.36.tgz", - "_shasum": "20f1f20c85d5b40f1e5a49b070ba977a142621f3", - "_spec": "web3-core-subscriptions@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core-method", - "bundleDependencies": false, - "dependencies": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Manages web3 subscriptions. This is an internal package.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-core-subscriptions", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-core-subscriptions" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-core-subscriptions/src/index.js b/truebit-implementation/node_modules/web3-core-subscriptions/src/index.js deleted file mode 100644 index e12811af..00000000 --- a/truebit-implementation/node_modules/web3-core-subscriptions/src/index.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var Subscription = require('./subscription.js'); - - -var Subscriptions = function Subscriptions(options) { - this.name = options.name; - this.type = options.type; - this.subscriptions = options.subscriptions || {}; - this.requestManager = null; -}; - - -Subscriptions.prototype.setRequestManager = function (rm) { - this.requestManager = rm; -}; - - -Subscriptions.prototype.attachToObject = function (obj) { - var func = this.buildCall(); - var name = this.name.split('.'); - if (name.length > 1) { - obj[name[0]] = obj[name[0]] || {}; - obj[name[0]][name[1]] = func; - } else { - obj[name[0]] = func; - } -}; - - -Subscriptions.prototype.buildCall = function() { - var _this = this; - - return function(){ - if(!_this.subscriptions[arguments[0]]) { - console.warn('Subscription '+ JSON.stringify(arguments[0]) +' doesn\'t exist. Subscribing anyway.'); - } - - var subscription = new Subscription({ - subscription: _this.subscriptions[arguments[0]], - requestManager: _this.requestManager, - type: _this.type - }); - - return subscription.subscribe.apply(subscription, arguments); - }; -}; - - -module.exports = { - subscriptions: Subscriptions, - subscription: Subscription -}; diff --git a/truebit-implementation/node_modules/web3-core-subscriptions/src/subscription.js b/truebit-implementation/node_modules/web3-core-subscriptions/src/subscription.js deleted file mode 100644 index 330ee446..00000000 --- a/truebit-implementation/node_modules/web3-core-subscriptions/src/subscription.js +++ /dev/null @@ -1,307 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file subscription.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var EventEmitter = require('eventemitter3'); - -function Subscription(options) { - EventEmitter.call(this); - - this.id = null; - this.callback = _.identity; - this.arguments = null; - this._reconnectIntervalId = null; - - this.options = { - subscription: options.subscription, - type: options.type, - requestManager: options.requestManager - }; -} - -// INHERIT -Subscription.prototype = Object.create(EventEmitter.prototype); -Subscription.prototype.constructor = Subscription; - - -/** - * Should be used to extract callback from array of arguments. Modifies input param - * - * @method extractCallback - * @param {Array} arguments - * @return {Function|Null} callback, if exists - */ - -Subscription.prototype._extractCallback = function (args) { - if (_.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Should be called to check if the number of arguments is correct - * - * @method validateArgs - * @param {Array} arguments - * @throws {Error} if it is not - */ - -Subscription.prototype._validateArgs = function (args) { - var subscription = this.options.subscription; - - if(!subscription) - subscription = {}; - - if(!subscription.params) - subscription.params = 0; - - if (args.length !== subscription.params) { - throw errors.InvalidNumberOfParams(args.length, subscription.params + 1, args[0]); - } -}; - -/** - * Should be called to format input args of method - * - * @method formatInput - * @param {Array} - * @return {Array} - */ - -Subscription.prototype._formatInput = function (args) { - var subscription = this.options.subscription; - - if (!subscription) { - return args; - } - - if (!subscription.inputFormatter) { - return args; - } - - var formattedArgs = subscription.inputFormatter.map(function (formatter, index) { - return formatter ? formatter(args[index]) : args[index]; - }); - - return formattedArgs; -}; - -/** - * Should be called to format output(result) of method - * - * @method formatOutput - * @param {Object} - * @return {Object} - */ - -Subscription.prototype._formatOutput = function (result) { - var subscription = this.options.subscription; - - return (subscription && subscription.outputFormatter && result) ? subscription.outputFormatter(result) : result; -}; - -/** - * Should create payload from given input args - * - * @method toPayload - * @param {Array} args - * @return {Object} - */ -Subscription.prototype._toPayload = function (args) { - var params = []; - this.callback = this._extractCallback(args) || _.identity; - - if (!this.subscriptionMethod) { - this.subscriptionMethod = args.shift(); - - // replace subscription with given name - if (this.options.subscription.subscriptionName) { - this.subscriptionMethod = this.options.subscription.subscriptionName; - } - } - - if (!this.arguments) { - this.arguments = this._formatInput(args); - this._validateArgs(this.arguments); - args = []; // make empty after validation - - } - - // re-add subscriptionName - params.push(this.subscriptionMethod); - params = params.concat(this.arguments); - - - if (args.length) { - throw new Error('Only a callback is allowed as parameter on an already instantiated subscription.'); - } - - return { - method: this.options.type + '_subscribe', - params: params - }; -}; - -/** - * Unsubscribes and clears callbacks - * - * @method unsubscribe - * @return {Object} - */ -Subscription.prototype.unsubscribe = function(callback) { - this.options.requestManager.removeSubscription(this.id, callback); - this.id = null; - this.removeAllListeners(); - clearInterval(this._reconnectIntervalId); -}; - -/** - * Subscribes and watches for changes - * - * @method subscribe - * @param {String} subscription the subscription - * @param {Object} options the options object with address topics and fromBlock - * @return {Object} - */ -Subscription.prototype.subscribe = function() { - var _this = this; - var args = Array.prototype.slice.call(arguments); - var payload = this._toPayload(args); - - if(!payload) { - return this; - } - - if(!this.options.requestManager.provider) { - var err1 = new Error('No provider set.'); - this.callback(err1, null, this); - this.emit('error', err1); - return this; - } - - // throw error, if provider doesnt support subscriptions - if(!this.options.requestManager.provider.on) { - var err2 = new Error('The current provider doesn\'t support subscriptions: '+ this.options.requestManager.provider.constructor.name); - this.callback(err2, null, this); - this.emit('error', err2); - return this; - } - - // if id is there unsubscribe first - if (this.id) { - this.unsubscribe(); - } - - // store the params in the options object - this.options.params = payload.params[1]; - - // get past logs, if fromBlock is available - if(payload.params[0] === 'logs' && _.isObject(payload.params[1]) && payload.params[1].hasOwnProperty('fromBlock') && isFinite(payload.params[1].fromBlock)) { - // send the subscription request - this.options.requestManager.send({ - method: 'eth_getLogs', - params: [payload.params[1]] - }, function (err, logs) { - if(!err) { - logs.forEach(function(log){ - var output = _this._formatOutput(log); - _this.callback(null, output, _this); - _this.emit('data', output); - }); - - // TODO subscribe here? after the past logs? - - } else { - _this.callback(err, null, _this); - _this.emit('error', err); - } - }); - } - - // create subscription - // TODO move to separate function? so that past logs can go first? - - if(typeof payload.params[1] === 'object') - delete payload.params[1].fromBlock; - - this.options.requestManager.send(payload, function (err, result) { - if(!err && result) { - _this.id = result; - - // call callback on notifications - _this.options.requestManager.addSubscription(_this.id, payload.params[0] , _this.options.type, function(err, result) { - - if (!err) { - if (!_.isArray(result)) { - result = [result]; - } - - result.forEach(function(resultItem) { - var output = _this._formatOutput(resultItem); - - if (_.isFunction(_this.options.subscription.subscriptionHandler)) { - return _this.options.subscription.subscriptionHandler.call(_this, output); - } else { - _this.emit('data', output); - } - - // call the callback, last so that unsubscribe there won't affect the emit above - _this.callback(null, output, _this); - }); - } else { - // unsubscribe, but keep listeners - _this.options.requestManager.removeSubscription(_this.id); - - // re-subscribe, if connection fails - if(_this.options.requestManager.provider.once) { - _this._reconnectIntervalId = setInterval(function () { - // TODO check if that makes sense! - if (_this.options.requestManager.provider.reconnect) { - _this.options.requestManager.provider.reconnect(); - } - }, 500); - - _this.options.requestManager.provider.once('connect', function () { - clearInterval(_this._reconnectIntervalId); - _this.subscribe(_this.callback); - }); - } - _this.emit('error', err); - - // call the callback, last so that unsubscribe there won't affect the emit above - _this.callback(err, null, _this); - } - }); - } else { - _this.callback(err, null, _this); - _this.emit('error', err); - } - }); - - // return an object to cancel the subscription - return this; -}; - -module.exports = Subscription; diff --git a/truebit-implementation/node_modules/web3-core/README.md b/truebit-implementation/node_modules/web3-core/README.md deleted file mode 100644 index e5599128..00000000 --- a/truebit-implementation/node_modules/web3-core/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# web3-core - -This is a sub package of [web3.js][repo] - -The core package contains core functions for [web3.js][repo] packages. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-core -``` - - -## Usage - -```js -// in node.js -var core = require('web3-core'); - -var CoolLib = function CoolLib() { - - // sets _requestmanager and adds basic functions - core.packageInit(this, arguments); - -}; - - -CoolLib.providers; -CoolLib.givenProvider; -CoolLib.setProvider(); -CoolLib.BatchRequest(); -CoolLib.extend(); -... -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-core/package.json b/truebit-implementation/node_modules/web3-core/package.json deleted file mode 100644 index fb2a279a..00000000 --- a/truebit-implementation/node_modules/web3-core/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "_from": "web3-core@1.0.0-beta.36", - "_id": "web3-core@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-C2QW9CMMRZdYAiKiLkMrKRSp+gekSqTDgZTNvlxAdN1hXn4d9UmcmWSJXOmIHqr5N2ISbRod+bW+qChODxVE3Q==", - "_location": "/web3-core", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-core@1.0.0-beta.36", - "name": "web3-core", - "escapedName": "web3-core", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3", - "/web3-eth", - "/web3-eth-accounts", - "/web3-eth-contract", - "/web3-eth-ens", - "/web3-eth-personal", - "/web3-net", - "/web3-shh" - ], - "_resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.36.tgz", - "_shasum": "86182f2456c2cf1cd6e7654d314e195eac211917", - "_spec": "web3-core@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3", - "bundleDependencies": false, - "dependencies": { - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-requestmanager": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 core tools for sub packages. This is an internal package.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-core", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-core" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-core/src/extend.js b/truebit-implementation/node_modules/web3-core/src/extend.js deleted file mode 100644 index c8b78784..00000000 --- a/truebit-implementation/node_modules/web3-core/src/extend.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file extend.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - - -var formatters = require('web3-core-helpers').formatters; -var Method = require('web3-core-method'); -var utils = require('web3-utils'); - - -var extend = function (pckg) { - /* jshint maxcomplexity:5 */ - var ex = function (extension) { - - var extendedObject; - if (extension.property) { - if (!pckg[extension.property]) { - pckg[extension.property] = {}; - } - extendedObject = pckg[extension.property]; - } else { - extendedObject = pckg; - } - - if (extension.methods) { - extension.methods.forEach(function (method) { - if(!(method instanceof Method)) { - method = new Method(method); - } - - method.attachToObject(extendedObject); - method.setRequestManager(pckg._requestManager); - }); - } - - return pckg; - }; - - ex.formatters = formatters; - ex.utils = utils; - ex.Method = Method; - - return ex; -}; - - - -module.exports = extend; - diff --git a/truebit-implementation/node_modules/web3-core/src/index.js b/truebit-implementation/node_modules/web3-core/src/index.js deleted file mode 100644 index 29ecd36f..00000000 --- a/truebit-implementation/node_modules/web3-core/src/index.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - - -var requestManager = require('web3-core-requestmanager'); -var extend = require('./extend.js'); - -module.exports = { - packageInit: function (pkg, args) { - args = Array.prototype.slice.call(args); - - if (!pkg) { - throw new Error('You need to instantiate using the "new" keyword.'); - } - - - // make property of pkg._provider, which can properly set providers - Object.defineProperty(pkg, 'currentProvider', { - get: function () { - return pkg._provider; - }, - set: function (value) { - return pkg.setProvider(value); - }, - enumerable: true, - configurable: true - }); - - // inherit from web3 umbrella package - if (args[0] && args[0]._requestManager) { - pkg._requestManager = new requestManager.Manager(args[0].currentProvider); - - // set requestmanager on package - } else { - pkg._requestManager = new requestManager.Manager(); - pkg._requestManager.setProvider(args[0], args[1]); - } - - // add givenProvider - pkg.givenProvider = requestManager.Manager.givenProvider; - pkg.providers = requestManager.Manager.providers; - - pkg._provider = pkg._requestManager.provider; - - // add SETPROVIDER function (don't overwrite if already existing) - if (!pkg.setProvider) { - pkg.setProvider = function (provider, net) { - pkg._requestManager.setProvider(provider, net); - pkg._provider = pkg._requestManager.provider; - return true; - }; - } - - // attach batch request creation - pkg.BatchRequest = requestManager.BatchManager.bind(null, pkg._requestManager); - - // attach extend function - pkg.extend = extend(pkg); - }, - addProviders: function (pkg) { - pkg.givenProvider = requestManager.Manager.givenProvider; - pkg.providers = requestManager.Manager.providers; - } -}; - diff --git a/truebit-implementation/node_modules/web3-eth-abi/README.md b/truebit-implementation/node_modules/web3-eth-abi/README.md deleted file mode 100644 index 0cb883cf..00000000 --- a/truebit-implementation/node_modules/web3-eth-abi/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# web3-eth-abi - -This is a sub package of [web3.js][repo] - -This is the abi package to be used in the `web3-eth` package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-eth-abi -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-eth-abi.js` in your html file. -This will expose the `Web3EthAbi` object on the window object. - - -## Usage - -```js -// in node.js -var Web3EthAbi = require('web3-eth-abi'); - -Web3EthAbi.encodeFunctionSignature('myMethod(uint256,string)'); -> '0x24ee0097' -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-eth-abi/package.json b/truebit-implementation/node_modules/web3-eth-abi/package.json deleted file mode 100644 index bcbe30cf..00000000 --- a/truebit-implementation/node_modules/web3-eth-abi/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "_from": "web3-eth-abi@1.0.0-beta.36", - "_id": "web3-eth-abi@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-fBfW+7hvA0rxEMV45fO7JU+0R32ayT7aRwG9Cl6NW2/QvhFeME2qVbMIWw0q5MryPZGIN8A6366hKNuWvVidDg==", - "_location": "/web3-eth-abi", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-eth-abi@1.0.0-beta.36", - "name": "web3-eth-abi", - "escapedName": "web3-eth-abi", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-eth", - "/web3-eth-contract", - "/web3-eth-ens" - ], - "_resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.36.tgz", - "_shasum": "21c0f222701db827a8a269accb9cd18bbd8f70f9", - "_spec": "web3-eth-abi@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth", - "bundleDependencies": false, - "dependencies": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module encode and decode EVM in/output.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-eth-abi", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-eth-abi" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-eth-abi/src/index.js b/truebit-implementation/node_modules/web3-eth-abi/src/index.js deleted file mode 100644 index eca92c38..00000000 --- a/truebit-implementation/node_modules/web3-eth-abi/src/index.js +++ /dev/null @@ -1,311 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file index.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2018 - */ - -var _ = require('underscore'); -var utils = require('web3-utils'); - -var EthersAbi = require('ethers/utils/abi-coder').AbiCoder; -var ethersAbiCoder = new EthersAbi(function (type, value) { - if (type.match(/^u?int/) && !_.isArray(value) && (!_.isObject(value) || value.constructor.name !== 'BN')) { - return value.toString(); - } - return value; -}); - -// result method -function Result() { -} - -/** - * ABICoder prototype should be used to encode/decode solidity params of any type - */ -var ABICoder = function () { -}; - -/** - * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types. - * - * @method encodeFunctionSignature - * @param {String|Object} functionName - * @return {String} encoded function name - */ -ABICoder.prototype.encodeFunctionSignature = function (functionName) { - if (_.isObject(functionName)) { - functionName = utils._jsonInterfaceMethodToString(functionName); - } - - return utils.sha3(functionName).slice(0, 10); -}; - -/** - * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types. - * - * @method encodeEventSignature - * @param {String|Object} functionName - * @return {String} encoded function name - */ -ABICoder.prototype.encodeEventSignature = function (functionName) { - if (_.isObject(functionName)) { - functionName = utils._jsonInterfaceMethodToString(functionName); - } - - return utils.sha3(functionName); -}; - -/** - * Should be used to encode plain param - * - * @method encodeParameter - * @param {String} type - * @param {Object} param - * @return {String} encoded plain param - */ -ABICoder.prototype.encodeParameter = function (type, param) { - return this.encodeParameters([type], [param]); -}; - -/** - * Should be used to encode list of params - * - * @method encodeParameters - * @param {Array} types - * @param {Array} params - * @return {String} encoded list of params - */ -ABICoder.prototype.encodeParameters = function (types, params) { - return ethersAbiCoder.encode(this.mapTypes(types), params); -}; - -/** - * Map types if simplified format is used - * - * @method mapTypes - * @param {Array} types - * @return {Array} - */ -ABICoder.prototype.mapTypes = function (types) { - var self = this; - var mappedTypes = []; - types.forEach(function (type) { - if (self.isSimplifiedStructFormat(type)) { - var structName = Object.keys(type)[0]; - mappedTypes.push( - Object.assign( - self.mapStructNameAndType(structName), - { - components: self.mapStructToCoderFormat(type[structName]) - } - ) - ); - - return; - } - - mappedTypes.push(type); - }); - - return mappedTypes; -}; - -/** - * Check if type is simplified struct format - * - * @method isSimplifiedStructFormat - * @param {string | Object} type - * @returns {boolean} - */ -ABICoder.prototype.isSimplifiedStructFormat = function (type) { - return typeof type === 'object' && typeof type.components === 'undefined' && typeof type.name === 'undefined'; -}; - -/** - * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used - * - * @method mapStructNameAndType - * @param {string} structName - * @return {{type: string, name: *}} - */ -ABICoder.prototype.mapStructNameAndType = function (structName) { - var type = 'tuple'; - - if (structName.indexOf('[]') > -1) { - type = 'tuple[]'; - structName = structName.slice(0, -2); - } - - return {type: type, name: structName}; -}; - -/** - * Maps the simplified format in to the expected format of the ABICoder - * - * @method mapStructToCoderFormat - * @param {Object} struct - * @return {Array} - */ -ABICoder.prototype.mapStructToCoderFormat = function (struct) { - var self = this; - var components = []; - Object.keys(struct).forEach(function (key) { - if (typeof struct[key] === 'object') { - components.push( - Object.assign( - self.mapStructNameAndType(key), - { - components: self.mapStructToCoderFormat(struct[key]) - } - ) - ); - - return; - } - - components.push({ - name: key, - type: struct[key] - }); - }); - - return components; -}; - -/** - * Encodes a function call from its json interface and parameters. - * - * @method encodeFunctionCall - * @param {Array} jsonInterface - * @param {Array} params - * @return {String} The encoded ABI for this function call - */ -ABICoder.prototype.encodeFunctionCall = function (jsonInterface, params) { - return this.encodeFunctionSignature(jsonInterface) + this.encodeParameters(jsonInterface.inputs, params).replace('0x', ''); -}; - -/** - * Should be used to decode bytes to plain param - * - * @method decodeParameter - * @param {String} type - * @param {String} bytes - * @return {Object} plain param - */ -ABICoder.prototype.decodeParameter = function (type, bytes) { - return this.decodeParameters([type], bytes)[0]; -}; - -/** - * Should be used to decode list of params - * - * @method decodeParameter - * @param {Array} outputs - * @param {String} bytes - * @return {Array} array of plain params - */ -ABICoder.prototype.decodeParameters = function (outputs, bytes) { - if (!bytes || bytes === '0x' || bytes === '0X') { - throw new Error('Returned values aren\'t valid, did it run Out of Gas?'); - } - - var res = ethersAbiCoder.decode(this.mapTypes(outputs), '0x' + bytes.replace(/0x/i, '')); - var returnValue = new Result(); - returnValue.__length__ = 0; - - outputs.forEach(function (output, i) { - var decodedValue = res[returnValue.__length__]; - decodedValue = (decodedValue === '0x') ? null : decodedValue; - - returnValue[i] = decodedValue; - - if (_.isObject(output) && output.name) { - returnValue[output.name] = decodedValue; - } - - returnValue.__length__++; - }); - - return returnValue; -}; - -/** - * Decodes events non- and indexed parameters. - * - * @method decodeLog - * @param {Object} inputs - * @param {String} data - * @param {Array} topics - * @return {Array} array of plain params - */ -ABICoder.prototype.decodeLog = function (inputs, data, topics) { - var _this = this; - topics = _.isArray(topics) ? topics : [topics]; - - data = data || ''; - - var notIndexedInputs = []; - var indexedParams = []; - var topicCount = 0; - - // TODO check for anonymous logs? - - inputs.forEach(function (input, i) { - if (input.indexed) { - indexedParams[i] = (['bool', 'int', 'uint', 'address', 'fixed', 'ufixed'].find(function (staticType) { - return input.type.indexOf(staticType) !== -1; - })) ? _this.decodeParameter(input.type, topics[topicCount]) : topics[topicCount]; - topicCount++; - } else { - notIndexedInputs[i] = input; - } - }); - - - var nonIndexedData = data; - var notIndexedParams = (nonIndexedData) ? this.decodeParameters(notIndexedInputs, nonIndexedData) : []; - - var returnValue = new Result(); - returnValue.__length__ = 0; - - - inputs.forEach(function (res, i) { - returnValue[i] = (res.type === 'string') ? '' : null; - - if (typeof notIndexedParams[i] !== 'undefined') { - returnValue[i] = notIndexedParams[i]; - } - if (typeof indexedParams[i] !== 'undefined') { - returnValue[i] = indexedParams[i]; - } - - if (res.name) { - returnValue[res.name] = returnValue[i]; - } - - returnValue.__length__++; - }); - - return returnValue; -}; - -var coder = new ABICoder(); - -module.exports = coder; diff --git a/truebit-implementation/node_modules/web3-eth-accounts/README.md b/truebit-implementation/node_modules/web3-eth-accounts/README.md deleted file mode 100644 index 94c31e81..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# web3-eth-accounts - -This is a sub package of [web3.js][repo] - -This is the accounts package to be used in the `web3-eth` package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-eth-accounts -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-eth-accounts.js` in your html file. -This will expose the `Web3EthAccounts` object on the window object. - - -## Usage - -```js -// in node.js -var Web3EthAccounts = require('web3-eth-accounts'); - -var account = new Web3EthAccounts('ws://localhost:8546'); -account.create(); -> { - address: '0x2c7536E3605D9C16a7a3D7b1898e529396a65c23', - privateKey: '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318', - signTransaction: function(tx){...}, - sign: function(data){...}, - encrypt: function(password){...} -} -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/.npmignore b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/.npmignore deleted file mode 100644 index 7e202889..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -tmp/ -.DS_Store diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/README.md b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/README.md deleted file mode 100644 index 60746ebc..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Eth-Lib - -Lightweight Ethereum libraries. This is a temporary repository which will be used as the basis of an implementation on Idris (or similar). diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/abi.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/abi.js deleted file mode 100644 index de008e16..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/abi.js +++ /dev/null @@ -1,61 +0,0 @@ -// type Var = { -// name: String -// type: "uint256" | "bytes32" | ... -// } -// -// type Method = { -// name: String -// inputs: [Var] -// output: [Var] -// constant: Bool -// payable: Bool -// } - -var Bytes = require("./bytes"); -var Nat = require("./nat"); -var keccak256s = require("./hash").keccak256s; - -// (type : String), JSType(type) -> {data: Bytes, dynamic: Bool} -// ABI-encodes a single term. -var encode = function encode(type, value) { - if (type === "bytes") { - var length = Bytes.length(value); - var nextMul32 = (((length - 1) / 32 | 0) + 1) * 32; - var lengthEncoded = encode("uint256", Nat.fromNumber(length)).data; - var bytesEncoded = Bytes.padRight(nextMul32, value); - return { data: Bytes.concat(lengthEncoded, bytesEncoded), dynamic: true }; - } else if (type === "uint256" || type === "bytes32" || type === "address") { - return { data: Bytes.pad(32, value), dynamic: false }; - } else { - throw "Eth-lib can't encode ABI type " + type + " yet."; - } -}; - -// (method : Method), [JSType(method.inputs[i].type)] -> Bytes -// ABI-encodes the transaction data to call a method. -var methodData = function methodData(method, params) { - var methodSig = method.name + "(" + method.inputs.map(function (i) { - return i.type; - }).join(",") + ")"; - var methodHash = keccak256s(methodSig).slice(0, 10); - var encodedParams = params.map(function (param, i) { - return encode(method.inputs[i].type, param); - }); - var headBlock = "0x"; - var dataBlock = "0x"; - for (var i = 0; i < encodedParams.length; ++i) { - if (encodedParams[i].dynamic) { - var dataLoc = encodedParams.length * 32 + Bytes.length(dataBlock); - headBlock = Bytes.concat(headBlock, Bytes.pad(32, Nat.fromNumber(dataLoc))); - dataBlock = Bytes.concat(dataBlock, encodedParams[i].data); - } else { - headBlock = Bytes.concat(headBlock, encodedParams[i].data); - } - } - return Bytes.flatten([methodHash, headBlock, dataBlock]); -}; - -module.exports = { - encode: encode, - methodData: methodData -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/account.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/account.js deleted file mode 100644 index 7137551f..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/account.js +++ /dev/null @@ -1,81 +0,0 @@ -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var Bytes = require("./bytes"); -var Nat = require("./nat"); -var elliptic = require("elliptic"); -var rlp = require("./rlp"); -var secp256k1 = new elliptic.ec("secp256k1"); // eslint-disable-line - -var _require = require("./hash"), - keccak256 = _require.keccak256, - keccak256s = _require.keccak256s; - -var create = function create(entropy) { - var innerHex = keccak256(Bytes.concat(Bytes.random(32), entropy || Bytes.random(32))); - var middleHex = Bytes.concat(Bytes.concat(Bytes.random(32), innerHex), Bytes.random(32)); - var outerHex = keccak256(middleHex); - return fromPrivate(outerHex); -}; - -var toChecksum = function toChecksum(address) { - var addressHash = keccak256s(address.slice(2)); - var checksumAddress = "0x"; - for (var i = 0; i < 40; i++) { - checksumAddress += parseInt(addressHash[i + 2], 16) > 7 ? address[i + 2].toUpperCase() : address[i + 2]; - }return checksumAddress; -}; - -var fromPrivate = function fromPrivate(privateKey) { - var buffer = new Buffer(privateKey.slice(2), "hex"); - var ecKey = secp256k1.keyFromPrivate(buffer); - var publicKey = "0x" + ecKey.getPublic(false, 'hex').slice(2); - var publicHash = keccak256(publicKey); - var address = toChecksum("0x" + publicHash.slice(-40)); - return { - address: address, - privateKey: privateKey - }; -}; - -var encodeSignature = function encodeSignature(_ref) { - var _ref2 = _slicedToArray(_ref, 3), - v = _ref2[0], - r = Bytes.pad(32, _ref2[1]), - s = Bytes.pad(32, _ref2[2]); - - return Bytes.flatten([r, s, v]); -}; - -var decodeSignature = function decodeSignature(hex) { - return [Bytes.slice(64, Bytes.length(hex), hex), Bytes.slice(0, 32, hex), Bytes.slice(32, 64, hex)]; -}; - -var makeSigner = function makeSigner(addToV) { - return function (hash, privateKey) { - var signature = secp256k1.keyFromPrivate(new Buffer(privateKey.slice(2), "hex")).sign(new Buffer(hash.slice(2), "hex"), { canonical: true }); - return encodeSignature([Nat.fromString(Bytes.fromNumber(addToV + signature.recoveryParam)), Bytes.pad(32, Bytes.fromNat("0x" + signature.r.toString(16))), Bytes.pad(32, Bytes.fromNat("0x" + signature.s.toString(16)))]); - }; -}; - -var sign = makeSigner(27); // v=27|28 instead of 0|1... - -var recover = function recover(hash, signature) { - var vals = decodeSignature(signature); - var vrs = { v: Bytes.toNumber(vals[0]), r: vals[1].slice(2), s: vals[2].slice(2) }; - var ecPublicKey = secp256k1.recoverPubKey(new Buffer(hash.slice(2), "hex"), vrs, vrs.v < 2 ? vrs.v : 1 - vrs.v % 2); // because odd vals mean v=0... sadly that means v=0 means v=1... I hate that - var publicKey = "0x" + ecPublicKey.encode("hex", false).slice(2); - var publicHash = keccak256(publicKey); - var address = toChecksum("0x" + publicHash.slice(-40)); - return address; -}; - -module.exports = { - create: create, - toChecksum: toChecksum, - fromPrivate: fromPrivate, - sign: sign, - makeSigner: makeSigner, - recover: recover, - encodeSignature: encodeSignature, - decodeSignature: decodeSignature -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/api.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/api.js deleted file mode 100644 index 9bfe1bb6..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/api.js +++ /dev/null @@ -1,241 +0,0 @@ -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var Api = function Api(provider) { - var Nat = require("./nat"); - var Map = require("./map"); - var Bytes = require("./bytes"); - var keccak256s = require("./hash").keccak256s; - var send = function send(method) { - return function () { - for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) { - params[_key] = arguments[_key]; - } - - return new Promise(function (resolve, reject) { - return provider.send(method, params, function (err, result) { - return err ? reject(err) : resolve(result); - }); - }); - }; - }; - - // TODO check inputs - // TODO move to proper file - var encodeABI = function encodeABI(type, value) { - if (type === "bytes") { - var length = Bytes.length(value); - var nextMul32 = (((length - 1) / 32 | 0) + 1) * 32; - var lengthEncoded = encodeABI("uint256", Nat.fromNumber(length)).data; - var bytesEncoded = Bytes.padRight(nextMul32, value); - return { data: Bytes.concat(lengthEncoded, bytesEncoded), dynamic: true }; - } else if (type === "uint256" || type === "bytes32" || type === "address") { - return { data: Bytes.pad(32, value), dynamic: false }; - } else { - throw "Eth-lib can't encode ABI type " + type + " yet."; - } - }; - - var sendTransaction = send("eth_sendTransaction"); - var sendRawTransaction = send("eth_sendRawTransaction"); - var getTransactionReceipt = send("eth_getTransactionReceipt"); - var compileSolidity = send("eth_compileSolidity"); - var call = send("eth_call"); - var getBalance = send("eth_getBalance"); - var accounts = send("eth_accounts"); - - var removeEmptyTo = function removeEmptyTo(tx) { - return tx.to === "" || tx.to === "0x" ? Map.remove("to")(tx) : tx; - }; - - var waitTransactionReceipt = getTransactionReceipt; // TODO: implement correctly - - var addTransactionDefaults = async function addTransactionDefaults(tx) { - var baseDefaults = [tx.chainId || send("net_version")(), tx.gasPrice || send("eth_gasPrice")(), tx.nonce || send("eth_getTransactionCount")(tx.from, "latest"), tx.value || "0x0", tx.data || "0x"]; - - var _ref = await Promise.all(baseDefaults), - _ref2 = _slicedToArray(_ref, 5), - chainIdNum = _ref2[0], - gasPrice = _ref2[1], - nonce = _ref2[2], - value = _ref2[3], - data = _ref2[4]; - - var chainId = Nat.fromNumber(chainIdNum); - var from = tx.from; - var to = tx.to === "" || tx.to === "0x" ? null : tx.to; - var gas = tx.gas ? tx.gas : Nat.div(Nat.mul((await send("eth_estimateGas")({ - from: tx.from, - to: tx.to, - value: tx.value, - nonce: tx.nonce, - data: tx.data - })), "0x6"), "0x5"); - - return { - chainId: chainId, - from: from.toLowerCase(), - to: to.toLowerCase(), - gasPrice: gasPrice, - gas: gas, - nonce: nonce, - value: value, - data: data.toLowerCase() - }; - }; - - var sendTransactionWithDefaults = async function sendTransactionWithDefaults(tx) { - return sendTransaction(removeEmptyTo((await addTransactionDefaults(tx)))); - }; - - var callWithDefaults = function callWithDefaults(tx, block) { - return addTransactionDefaults(tx).then(function (tx) { - return call(removeEmptyTo(tx), block || "latest"); - }); - }; - - var callMethodData = function callMethodData(method) { - return function () { - for (var _len2 = arguments.length, params = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - params[_key2] = arguments[_key2]; - } - - var methodSig = method.name + "(" + method.inputs.map(function (i) { - return i.type; - }).join(",") + ")"; - var methodHash = keccak256s(methodSig).slice(0, 10); - var encodedParams = params.map(function (param, i) { - return encodeABI(method.inputs[i].type, param); - }); - var headBlock = "0x"; - var dataBlock = "0x"; - for (var i = 0; i < encodedParams.length; ++i) { - if (encodedParams[i].dynamic) { - var dataLoc = encodedParams.length * 32 + Bytes.length(dataBlock); - headBlock = Bytes.concat(headBlock, Bytes.pad(32, Nat.fromNumber(dataLoc))); - dataBlock = Bytes.concat(dataBlock, encodedParams[i].data); - } else { - headBlock = Bytes.concat(headBlock, encodedParams[i].data); - } - } - return Bytes.flatten([methodHash, headBlock, dataBlock]); - }; - }; - - // Address, Address, ContractInterface -> Contract - var contract = function contract(from, address, contractInterface) { - var contract = {}; - contract._address = address; - contract._from = from; - contract.broadcast = {}; - contractInterface.forEach(function (method) { - if (method && method.name) { - var _call = function _call(type, value) { - return function () { - var transaction = { - from: from, - to: address, - value: value, - data: callMethodData(method).apply(undefined, arguments) - }; - return type === "data" ? Promise.resolve(transaction) : method.constant ? callWithDefaults(transaction) : sendTransactionWithDefaults(transaction).then(type === "receipt" ? waitTransactionReceipt : function (x) { - return x; - }); - }; - }; - contract[method.name] = _call("receipt", "0x0"); - if (!method.constant) { - contract[method.name + "_data"] = _call("data", "0x0"); - contract[method.name + "_pay"] = function (value) { - return function () { - return _call("receipt", value).apply(undefined, arguments); - }; - }; - contract[method.name + "_pay_txHash"] = function (value) { - return function () { - return _call("txHash", value).apply(undefined, arguments); - }; - }; - contract[method.name + "_txHash"] = _call("txHash", "0x0"); - } - } - }); - return contract; - }; - - // Address, Bytecode -> TxHash - var deployBytecode_txHash = function deployBytecode_txHash(from, code) { - return sendTransactionWithDefaults({ from: from, data: code, to: "" }); - }; - - // Address, Bytecode -> Receipt - var deployBytecode = function deployBytecode(from, code) { - return deployBytecode_txHash(from, code).then(waitTransactionReceipt); - }; - - // Address, Bytecode, ContractInterface - var deployBytecodeContract = function deployBytecodeContract(from, code, contractInterface) { - return deployBytecode(from, code).then(function (receipt) { - return contract(from, receipt.contractAddress, contractInterface); - }); - }; - - // Address, String, Address -> Contract - var solidityContract = function solidityContract(from, source, at) { - return compileSolidity(source).then(function (_ref3) { - var abiDefinition = _ref3.info.abiDefinition; - return contract(from, at, abiDefinition); - }); - }; - - // Address, String -> TxHash - var deploySolidity_txHash = function deploySolidity_txHash(from, source) { - return compileSolidity(source).then(function (_ref4) { - var code = _ref4.code; - return deployBytecode_txHash(from, code); - }); - }; - - // Address, String -> Receipt - var deploySolidity = function deploySolidity(from, source) { - return deploySolidity_txHash(from, source).then(waitTransactionReceipt); - }; - - // Address, String -> Contract - var deploySolidityContract = function deploySolidityContract(from, source) { - return compileSolidity(source).then(function (_ref5) { - var code = _ref5.code, - abiDefinition = _ref5.info.abiDefinition; - return deployBytecodeContract(from, code, abiDefinition); - }); - }; - - return { - send: send, - - sendTransaction: sendTransaction, - sendRawTransaction: sendRawTransaction, - getTransactionReceipt: getTransactionReceipt, - call: call, - getBalance: getBalance, - accounts: accounts, - - waitTransactionReceipt: waitTransactionReceipt, - addTransactionDefaults: addTransactionDefaults, - sendTransactionWithDefaults: sendTransactionWithDefaults, - callWithDefaults: callWithDefaults, - callMethodData: callMethodData, - - contract: contract, - deployBytecode_txHash: deployBytecode_txHash, - deployBytecode: deployBytecode, - deployBytecodeContract: deployBytecodeContract, - - compileSolidity: compileSolidity, - solidityContract: solidityContract, - deploySolidity_txHash: deploySolidity_txHash, - deploySolidity: deploySolidity, - deploySolidityContract: deploySolidityContract - }; -}; - -module.exports = Api; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/array.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/array.js deleted file mode 100644 index 99e69c76..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/array.js +++ /dev/null @@ -1,40 +0,0 @@ -var generate = function generate(num, fn) { - var a = []; - for (var i = 0; i < num; ++i) { - a.push(fn(i)); - }return a; -}; - -var replicate = function replicate(num, val) { - return generate(num, function () { - return val; - }); -}; - -var concat = function concat(a, b) { - return a.concat(b); -}; - -var flatten = function flatten(a) { - var r = []; - for (var j = 0, J = a.length; j < J; ++j) { - for (var i = 0, I = a[j].length; i < I; ++i) { - r.push(a[j][i]); - } - }return r; -}; - -var chunksOf = function chunksOf(n, a) { - var b = []; - for (var i = 0, l = a.length; i < l; i += n) { - b.push(a.slice(i, i + n)); - }return b; -}; - -module.exports = { - generate: generate, - replicate: replicate, - concat: concat, - flatten: flatten, - chunksOf: chunksOf -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/bytes.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/bytes.js deleted file mode 100644 index 4ca0b978..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/bytes.js +++ /dev/null @@ -1,188 +0,0 @@ -var A = require("./array.js"); - -var at = function at(bytes, index) { - return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16); -}; - -var random = function random(bytes) { - var rnd = void 0; - if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (typeof require !== "undefined") rnd = require("c" + "rypto").randomBytes(bytes);else throw "Safe random numbers not available."; - var hex = "0x"; - for (var i = 0; i < bytes; ++i) { - hex += ("00" + rnd[i].toString(16)).slice(-2); - }return hex; -}; - -var length = function length(a) { - return (a.length - 2) / 2; -}; - -var flatten = function flatten(a) { - return "0x" + a.reduce(function (r, s) { - return r + s.slice(2); - }, ""); -}; - -var slice = function slice(i, j, bs) { - return "0x" + bs.slice(i * 2 + 2, j * 2 + 2); -}; - -var reverse = function reverse(hex) { - var rev = "0x"; - for (var i = 0, l = length(hex); i < l; ++i) { - rev += hex.slice((l - i) * 2, (l - i + 1) * 2); - } - return rev; -}; - -var pad = function pad(l, hex) { - return hex.length === l * 2 + 2 ? hex : pad(l, "0x" + "0" + hex.slice(2)); -}; - -var padRight = function padRight(l, hex) { - return hex.length === l * 2 + 2 ? hex : padRight(l, hex + "0"); -}; - -var toArray = function toArray(hex) { - var arr = []; - for (var i = 2, l = hex.length; i < l; i += 2) { - arr.push(parseInt(hex.slice(i, i + 2), 16)); - }return arr; -}; - -var fromArray = function fromArray(arr) { - var hex = "0x"; - for (var i = 0, l = arr.length; i < l; ++i) { - var b = arr[i]; - hex += (b < 16 ? "0" : "") + b.toString(16); - } - return hex; -}; - -var toUint8Array = function toUint8Array(hex) { - return new Uint8Array(toArray(hex)); -}; - -var fromUint8Array = function fromUint8Array(arr) { - return fromArray([].slice.call(arr, 0)); -}; - -var fromNumber = function fromNumber(num) { - var hex = num.toString(16); - return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex; -}; - -var toNumber = function toNumber(hex) { - return parseInt(hex.slice(2), 16); -}; - -var concat = function concat(a, b) { - return a.concat(b.slice(2)); -}; - -var fromNat = function fromNat(bn) { - return bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2); -}; - -var toNat = function toNat(bn) { - return bn[2] === "0" ? "0x" + bn.slice(3) : bn; -}; - -var fromAscii = function fromAscii(ascii) { - var hex = "0x"; - for (var i = 0; i < ascii.length; ++i) { - hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2); - }return hex; -}; - -var toAscii = function toAscii(hex) { - var ascii = ""; - for (var i = 2; i < hex.length; i += 2) { - ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16)); - }return ascii; -}; - -// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330 -var fromString = function fromString(s) { - var makeByte = function makeByte(uint8) { - var b = uint8.toString(16); - return b.length < 2 ? "0" + b : b; - }; - var bytes = "0x"; - for (var ci = 0; ci != s.length; ci++) { - var c = s.charCodeAt(ci); - if (c < 128) { - bytes += makeByte(c); - continue; - } - if (c < 2048) { - bytes += makeByte(c >> 6 | 192); - } else { - if (c > 0xd7ff && c < 0xdc00) { - if (++ci == s.length) return null; - var c2 = s.charCodeAt(ci); - if (c2 < 0xdc00 || c2 > 0xdfff) return null; - c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); - bytes += makeByte(c >> 18 | 240); - bytes += makeByte(c >> 12 & 63 | 128); - } else { - // c <= 0xffff - bytes += makeByte(c >> 12 | 224); - } - bytes += makeByte(c >> 6 & 63 | 128); - } - bytes += makeByte(c & 63 | 128); - } - return bytes; -}; - -var toString = function toString(bytes) { - var s = ''; - var i = 0; - var l = length(bytes); - while (i < l) { - var c = at(bytes, i++); - if (c > 127) { - if (c > 191 && c < 224) { - if (i >= l) return null; - c = (c & 31) << 6 | at(bytes, i) & 63; - } else if (c > 223 && c < 240) { - if (i + 1 >= l) return null; - c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63; - } else if (c > 239 && c < 248) { - if (i + 2 >= l) return null; - c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63; - } else return null; - ++i; - } - if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) { - c -= 0x10000; - s += String.fromCharCode(c >> 10 | 0xd800); - s += String.fromCharCode(c & 0x3FF | 0xdc00); - } else return null; - } - return s; -}; - -module.exports = { - random: random, - length: length, - concat: concat, - flatten: flatten, - slice: slice, - reverse: reverse, - pad: pad, - padRight: padRight, - fromAscii: fromAscii, - toAscii: toAscii, - fromString: fromString, - toString: toString, - fromNumber: fromNumber, - toNumber: toNumber, - fromNat: fromNat, - toNat: toNat, - fromArray: fromArray, - toArray: toArray, - fromUint8Array: fromUint8Array, - toUint8Array: toUint8Array -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/desubits.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/desubits.js deleted file mode 100644 index 6ddf8173..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/desubits.js +++ /dev/null @@ -1,58 +0,0 @@ -var Bytes = require("./bytes"); - -var inis = "pbtdkgxjfvlrmnsz".split(""); - -var mids = "auie".split(""); - -var back = [inis, mids].map(function (chars) { - var map = {}; - for (var i = 0; i < chars.length; ++i) { - map[chars[i]] = i; - }return map; -}); - -var syllableFromB64 = function syllableFromB64(b64) { - var ini = b64 >>> 2 & 15; - var mid = b64 >>> 0 & 3; - return inis[ini] + mids[mid]; -}; - -var syllableToB64 = function syllableToB64(syllable) { - var ini = back[0][syllable[0]]; - var mid = back[1][syllable[1]]; - return ini * 4 + mid; -}; - -var b64sFromBytes = function b64sFromBytes(bytes) { - //BoooooBoooooBoooooBooooo - //BoooooooBoooooooBooooooo - var b64s = [], - b64 = void 0; - for (var i = 0, l = Math.ceil(bytes.length * 8 / 6); i < l; ++i) { - var j = i / 8 * 6 | 0; - b64s.push(i % 4 === 0 ? bytes[j + 0] / 4 | 0 : i % 4 === 1 ? bytes[j + 0] % 4 * 16 + (bytes[j + 1] / 16 | 0) : i % 4 === 2 ? bytes[j + 0] % 16 * 4 + (bytes[j + 1] / 64 | 0) : bytes[j + 0] % 64 * 1); - } - return b64s; -}; - -var b64sToBytes = function b64sToBytes(b64s) { - var bytes = []; - for (var i = 0, l = Math.floor(b64s.length * 6 / 8); i < l; ++i) { - var j = i / 6 * 8 | 0; - bytes.push(i % 3 === 0 ? b64s[j + 0] % 64 * 4 + (b64s[j + 1] / 16 | 0) : i % 3 === 1 ? b64s[j + 0] % 16 * 16 + (b64s[j + 1] / 4 | 0) : b64s[j + 0] % 4 * 64 + (b64s[j + 1] / 1 | 0)); - } - return bytes; -}; - -var fromBytes = function fromBytes(bytes) { - return b64sFromBytes(Bytes.toArray(bytes)).map(syllableFromB64).join(""); -}; - -var toBytes = function toBytes(syllables) { - return Bytes.fromArray(b64sToBytes(syllables.match(/\w\w/g).map(syllableToB64))); -}; - -module.exports = { - fromBytes: fromBytes, - toBytes: toBytes -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/fn.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/fn.js deleted file mode 100644 index 342bc43c..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/fn.js +++ /dev/null @@ -1,10 +0,0 @@ -var times = function times(n, f, x) { - for (var i = 0; i < n; ++i) { - x = f(x); - } - return x; -}; - -module.exports = { - times: times -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/hash.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/hash.js deleted file mode 100644 index 66fa73de..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/hash.js +++ /dev/null @@ -1,339 +0,0 @@ -// This was ported from https://github.com/emn178/js-sha3, with some minor -// modifications and pruning. It is licensed under MIT: -// -// Copyright 2015-2016 Chen, Yi-Cyuan -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// 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. - -var HEX_CHARS = '0123456789abcdef'.split(''); -var KECCAK_PADDING = [1, 256, 65536, 16777216]; -var SHIFT = [0, 8, 16, 24]; -var RC = [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]; - -var Keccak = function Keccak(bits) { - return { - blocks: [], - reset: true, - block: 0, - start: 0, - blockCount: 1600 - (bits << 1) >> 5, - outputBlocks: bits >> 5, - s: function (s) { - return [].concat(s, s, s, s, s); - }([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) - }; -}; - -var update = function update(state, message) { - var length = message.length, - blocks = state.blocks, - byteCount = state.blockCount << 2, - blockCount = state.blockCount, - outputBlocks = state.outputBlocks, - s = state.s, - index = 0, - i, - code; - - // update - while (index < length) { - if (state.reset) { - state.reset = false; - blocks[0] = state.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (typeof message !== "string") { - for (i = state.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = state.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); - blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; - } - } - } - state.lastByteIndex = i; - if (i >= byteCount) { - state.start = i - byteCount; - state.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - state.reset = true; - } else { - state.start = i; - } - } - - // finalize - i = state.lastByteIndex; - blocks[i >> 2] |= KECCAK_PADDING[i & 3]; - if (state.lastByteIndex === byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - - // toString - var hex = '', - i = 0, - j = 0, - block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - return "0x" + hex; -}; - -var f = function f(s) { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ (c2 << 1 | c3 >>> 31); - l = c9 ^ (c3 << 1 | c2 >>> 31); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ (c4 << 1 | c5 >>> 31); - l = c1 ^ (c5 << 1 | c4 >>> 31); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ (c6 << 1 | c7 >>> 31); - l = c3 ^ (c7 << 1 | c6 >>> 31); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ (c8 << 1 | c9 >>> 31); - l = c5 ^ (c9 << 1 | c8 >>> 31); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ (c0 << 1 | c1 >>> 31); - l = c7 ^ (c1 << 1 | c0 >>> 31); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = s[11] << 4 | s[10] >>> 28; - b33 = s[10] << 4 | s[11] >>> 28; - b14 = s[20] << 3 | s[21] >>> 29; - b15 = s[21] << 3 | s[20] >>> 29; - b46 = s[31] << 9 | s[30] >>> 23; - b47 = s[30] << 9 | s[31] >>> 23; - b28 = s[40] << 18 | s[41] >>> 14; - b29 = s[41] << 18 | s[40] >>> 14; - b20 = s[2] << 1 | s[3] >>> 31; - b21 = s[3] << 1 | s[2] >>> 31; - b2 = s[13] << 12 | s[12] >>> 20; - b3 = s[12] << 12 | s[13] >>> 20; - b34 = s[22] << 10 | s[23] >>> 22; - b35 = s[23] << 10 | s[22] >>> 22; - b16 = s[33] << 13 | s[32] >>> 19; - b17 = s[32] << 13 | s[33] >>> 19; - b48 = s[42] << 2 | s[43] >>> 30; - b49 = s[43] << 2 | s[42] >>> 30; - b40 = s[5] << 30 | s[4] >>> 2; - b41 = s[4] << 30 | s[5] >>> 2; - b22 = s[14] << 6 | s[15] >>> 26; - b23 = s[15] << 6 | s[14] >>> 26; - b4 = s[25] << 11 | s[24] >>> 21; - b5 = s[24] << 11 | s[25] >>> 21; - b36 = s[34] << 15 | s[35] >>> 17; - b37 = s[35] << 15 | s[34] >>> 17; - b18 = s[45] << 29 | s[44] >>> 3; - b19 = s[44] << 29 | s[45] >>> 3; - b10 = s[6] << 28 | s[7] >>> 4; - b11 = s[7] << 28 | s[6] >>> 4; - b42 = s[17] << 23 | s[16] >>> 9; - b43 = s[16] << 23 | s[17] >>> 9; - b24 = s[26] << 25 | s[27] >>> 7; - b25 = s[27] << 25 | s[26] >>> 7; - b6 = s[36] << 21 | s[37] >>> 11; - b7 = s[37] << 21 | s[36] >>> 11; - b38 = s[47] << 24 | s[46] >>> 8; - b39 = s[46] << 24 | s[47] >>> 8; - b30 = s[8] << 27 | s[9] >>> 5; - b31 = s[9] << 27 | s[8] >>> 5; - b12 = s[18] << 20 | s[19] >>> 12; - b13 = s[19] << 20 | s[18] >>> 12; - b44 = s[29] << 7 | s[28] >>> 25; - b45 = s[28] << 7 | s[29] >>> 25; - b26 = s[38] << 8 | s[39] >>> 24; - b27 = s[39] << 8 | s[38] >>> 24; - b8 = s[48] << 14 | s[49] >>> 18; - b9 = s[49] << 14 | s[48] >>> 18; - - s[0] = b0 ^ ~b2 & b4; - s[1] = b1 ^ ~b3 & b5; - s[10] = b10 ^ ~b12 & b14; - s[11] = b11 ^ ~b13 & b15; - s[20] = b20 ^ ~b22 & b24; - s[21] = b21 ^ ~b23 & b25; - s[30] = b30 ^ ~b32 & b34; - s[31] = b31 ^ ~b33 & b35; - s[40] = b40 ^ ~b42 & b44; - s[41] = b41 ^ ~b43 & b45; - s[2] = b2 ^ ~b4 & b6; - s[3] = b3 ^ ~b5 & b7; - s[12] = b12 ^ ~b14 & b16; - s[13] = b13 ^ ~b15 & b17; - s[22] = b22 ^ ~b24 & b26; - s[23] = b23 ^ ~b25 & b27; - s[32] = b32 ^ ~b34 & b36; - s[33] = b33 ^ ~b35 & b37; - s[42] = b42 ^ ~b44 & b46; - s[43] = b43 ^ ~b45 & b47; - s[4] = b4 ^ ~b6 & b8; - s[5] = b5 ^ ~b7 & b9; - s[14] = b14 ^ ~b16 & b18; - s[15] = b15 ^ ~b17 & b19; - s[24] = b24 ^ ~b26 & b28; - s[25] = b25 ^ ~b27 & b29; - s[34] = b34 ^ ~b36 & b38; - s[35] = b35 ^ ~b37 & b39; - s[44] = b44 ^ ~b46 & b48; - s[45] = b45 ^ ~b47 & b49; - s[6] = b6 ^ ~b8 & b0; - s[7] = b7 ^ ~b9 & b1; - s[16] = b16 ^ ~b18 & b10; - s[17] = b17 ^ ~b19 & b11; - s[26] = b26 ^ ~b28 & b20; - s[27] = b27 ^ ~b29 & b21; - s[36] = b36 ^ ~b38 & b30; - s[37] = b37 ^ ~b39 & b31; - s[46] = b46 ^ ~b48 & b40; - s[47] = b47 ^ ~b49 & b41; - s[8] = b8 ^ ~b0 & b2; - s[9] = b9 ^ ~b1 & b3; - s[18] = b18 ^ ~b10 & b12; - s[19] = b19 ^ ~b11 & b13; - s[28] = b28 ^ ~b20 & b22; - s[29] = b29 ^ ~b21 & b23; - s[38] = b38 ^ ~b30 & b32; - s[39] = b39 ^ ~b31 & b33; - s[48] = b48 ^ ~b40 & b42; - s[49] = b49 ^ ~b41 & b43; - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } -}; - -var keccak = function keccak(bits) { - return function (str) { - var msg; - if (str.slice(0, 2) === "0x") { - msg = []; - for (var i = 2, l = str.length; i < l; i += 2) { - msg.push(parseInt(str.slice(i, i + 2), 16)); - } - } else { - msg = str; - } - return update(Keccak(bits, bits), msg); - }; -}; - -module.exports = { - keccak256: keccak(256), - keccak512: keccak(512), - keccak256s: keccak(256), - keccak512s: keccak(512) -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/index.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/index.js deleted file mode 100644 index 3df71252..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/index.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - account: require("./account.js"), - nat: require("./nat.js"), - bytes: require("./bytes.js"), - hash: require("./hash.js"), - RLP: require("./rlp.js"), - abi: require("./abi.js"), - transaction: require("./transaction.js"), - rpc: require("./rpc.js"), - desubits: require("./desubits.js"), - passphrase: require("./passphrase.js") -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/map.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/map.js deleted file mode 100644 index c67c4974..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/map.js +++ /dev/null @@ -1,24 +0,0 @@ -var merge = function merge(a) { - return function (b) { - var c = {}; - for (var key in a) { - c[key] = a[key]; - }for (var _key in b) { - c[_key] = b[_key]; - }return c; - }; -}; - -var remove = function remove(removeKey) { - return function (a) { - var b = {}; - for (var key in a) { - if (key !== removeKey) b[key] = a[key]; - }return b; - }; -}; - -module.exports = { - merge: merge, - remove: remove -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/nat.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/nat.js deleted file mode 100644 index 9f2fa2f6..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/nat.js +++ /dev/null @@ -1,64 +0,0 @@ -var BN = require("bn.js"); -var Bytes = require("./bytes"); - -var fromBN = function fromBN(bn) { - return "0x" + bn.toString("hex"); -}; - -var toBN = function toBN(str) { - return new BN(str.slice(2), 16); -}; - -var fromString = function fromString(str) { - var bn = "0x" + (str.slice(0, 2) === "0x" ? new BN(str.slice(2), 16) : new BN(str, 10)).toString("hex"); - return bn === "0x0" ? "0x" : bn; -}; - -var toEther = function toEther(wei) { - return toNumber(div(wei, fromString("10000000000"))) / 100000000; -}; - -var fromEther = function fromEther(eth) { - return mul(fromNumber(Math.floor(eth * 100000000)), fromString("10000000000")); -}; - -var toString = function toString(a) { - return toBN(a).toString(10); -}; - -var fromNumber = function fromNumber(a) { - return typeof a === "string" ? /^0x/.test(a) ? a : "0x" + a : "0x" + new BN(a).toString("hex"); -}; - -var toNumber = function toNumber(a) { - return toBN(a).toNumber(); -}; - -var toUint256 = function toUint256(a) { - return Bytes.pad(32, a); -}; - -var bin = function bin(method) { - return function (a, b) { - return fromBN(toBN(a)[method](toBN(b))); - }; -}; - -var add = bin("add"); -var mul = bin("mul"); -var div = bin("div"); -var sub = bin("sub"); - -module.exports = { - toString: toString, - fromString: fromString, - toNumber: toNumber, - fromNumber: fromNumber, - toEther: toEther, - fromEther: fromEther, - toUint256: toUint256, - add: add, - mul: mul, - div: div, - sub: sub -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/passphrase.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/passphrase.js deleted file mode 100644 index b164fd38..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/passphrase.js +++ /dev/null @@ -1,52 +0,0 @@ -var Hash = require("./hash"); -var Bytes = require("./bytes"); -var Desubits = require("./desubits"); - -// Bytes -> Bytes -var bytesAddChecksum = function bytesAddChecksum(bytes) { - var hash = Hash.keccak256(bytes); - var sum = Bytes.slice(0, 1, hash); - return Bytes.concat(bytes, sum); -}; - -// Bytes -> Bool -var bytesChecksum = function bytesChecksum(bytes) { - var length = Bytes.length(bytes); - var prefix = Bytes.slice(0, length - 1, bytes); - return bytesAddChecksum(prefix) === bytes; -}; - -// () ~> Passphrase -var create = function create() { - var bytes = bytesAddChecksum(Bytes.random(11)); - var seed = Desubits.fromBytes(bytes); - var passphrase = seed.replace(/([a-z]{8})/g, "$1 "); - return passphrase; -}; - -// Passphrase -> Bytes -var toBytes = function toBytes(passphrase) { - var seed = passphrase.replace(/ /g, ""); - var bytes = Desubits.toBytes(passphrase); - return bytes; -}; - -// Passphrase -> Bool -var checksum = function checksum(passphrase) { - return bytesChecksum(toBytes(passphrase)); -}; - -// Passphrase -> Bytes -var toMasterKey = function toMasterKey(passphrase) { - var hash = Hash.keccak256; - var bytes = toBytes(passphrase); - for (var i = 0, l = Math.pow(2, 12); i < l; ++i) { - bytes = hash(bytes); - }return bytes; -}; - -module.exports = { - create: create, - checksum: checksum, - toMasterKey: toMasterKey -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/provider.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/provider.js deleted file mode 100644 index 38203798..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/provider.js +++ /dev/null @@ -1,46 +0,0 @@ -var njsp = require("nano-json-stream-parser"); -var request = require("xhr-request-promise"); - -var EthereumProvider = function EthereumProvider(url) { - var api = {}; - var onResponse = {}; - var callbacks = {}; - var nextId = 0; - var send = void 0; - - var parseResponse = njsp(function (json) { - onResponse[json.id] && onResponse[json.id](null, json.result); - }); - - var genPayload = function genPayload(method, params) { - return { - jsonrpc: "2.0", - id: ++nextId, - method: method, - params: params - }; - }; - - if (/^http/.test(url)) { - api.send = async function (method, params) { - try { - var answer = await request(url, { - method: "POST", - contentType: "application/json-rpc", - body: JSON.stringify(genPayload(method, params)) }); - var resp = JSON.parse(answer); - if (resp.error) { - return resp.error.message; - } else { - throw resp.result; - } - } catch (e) { - console.log(e); - } - }; - }; - - return api; -}; - -module.exports = EthereumProvider; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/rlp.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/rlp.js deleted file mode 100644 index 4d5b27df..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/rlp.js +++ /dev/null @@ -1,73 +0,0 @@ -// The RLP format -// Serialization and deserialization for the BytesTree type, under the following grammar: -// | First byte | Meaning | -// | ---------- | -------------------------------------------------------------------------- | -// | 0 to 127 | HEX(leaf) | -// | 128 to 183 | HEX(length_of_leaf + 128) + HEX(leaf) | -// | 184 to 191 | HEX(length_of_length_of_leaf + 128 + 55) + HEX(length_of_leaf) + HEX(leaf) | -// | 192 to 247 | HEX(length_of_node + 192) + HEX(node) | -// | 248 to 255 | HEX(length_of_length_of_node + 128 + 55) + HEX(length_of_node) + HEX(node) | - -var encode = function encode(tree) { - var padEven = function padEven(str) { - return str.length % 2 === 0 ? str : "0" + str; - }; - - var uint = function uint(num) { - return padEven(num.toString(16)); - }; - - var length = function length(len, add) { - return len < 56 ? uint(add + len) : uint(add + uint(len).length / 2 + 55) + uint(len); - }; - - var dataTree = function dataTree(tree) { - if (typeof tree === "string") { - var hex = tree.slice(2); - var pre = hex.length != 2 || hex >= "80" ? length(hex.length / 2, 128) : ""; - return pre + hex; - } else { - var _hex = tree.map(dataTree).join(""); - var _pre = length(_hex.length / 2, 192); - return _pre + _hex; - } - }; - - return "0x" + dataTree(tree); -}; - -var decode = function decode(hex) { - var i = 2; - - var parseTree = function parseTree() { - if (i >= hex.length) throw ""; - var head = hex.slice(i, i + 2); - return head < "80" ? (i += 2, "0x" + head) : head < "c0" ? parseHex() : parseList(); - }; - - var parseLength = function parseLength() { - var len = parseInt(hex.slice(i, i += 2), 16) % 64; - return len < 56 ? len : parseInt(hex.slice(i, i += (len - 55) * 2), 16); - }; - - var parseHex = function parseHex() { - var len = parseLength(); - return "0x" + hex.slice(i, i += len * 2); - }; - - var parseList = function parseList() { - var lim = parseLength() * 2 + i; - var list = []; - while (i < lim) { - list.push(parseTree()); - }return list; - }; - - try { - return parseTree(); - } catch (e) { - return []; - } -}; - -module.exports = { encode: encode, decode: decode }; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/rpc.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/rpc.js deleted file mode 100644 index 3b1c077d..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/rpc.js +++ /dev/null @@ -1,34 +0,0 @@ -var request = require("xhr-request-promise"); - -var genPayload = function () { - var nextId = 0; - return function (method, params) { - return { - jsonrpc: "2.0", - id: ++nextId, - method: method, - params: params - }; - }; -}(); - -var send = function send(url) { - return function (method, params) { - return request(url, { - method: "POST", - contentType: "application/json-rpc", - body: JSON.stringify(genPayload(method, params)) - }).then(function (answer) { - var resp = JSON.parse(answer); // todo: use njsp? - if (resp.error) { - throw new Error(resp.error.message); - } else { - return resp.result; - } - }).catch(function (e) { - return { error: e.toString() }; - }); - }; -}; - -module.exports = send; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/transaction.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/transaction.js deleted file mode 100644 index dcc53651..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/transaction.js +++ /dev/null @@ -1,78 +0,0 @@ -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var Account = require("./account"); -var Nat = require("./nat"); -var Bytes = require("./bytes"); -var RLP = require("./rlp"); -var keccak256 = require("./hash").keccak256; - -// EthereumRPC, IncompleteTransaction -> Promise Transaction -var addDefaults = function addDefaults(rpc, tx) { - var baseDefaults = [tx.chainId || rpc("net_version", []), tx.gasPrice || rpc("eth_gasPrice", []), tx.nonce || rpc("eth_getTransactionCount", [tx.from, "latest"]), tx.value || "0x0", tx.data || "0x"]; - var noAddress = function noAddress(address) { - return !address || address === "" || address === "0x"; - }; - return Promise.all(baseDefaults).then(function (_ref) { - var _ref2 = _slicedToArray(_ref, 5), - chainIdNum = _ref2[0], - gasPrice = _ref2[1], - nonce = _ref2[2], - value = _ref2[3], - data = _ref2[4]; - - var chainId = Nat.fromNumber(chainIdNum); - var gasEstimator = tx.gas ? Promise.resolve(null) : rpc("eth_estimateGas", [{ - from: noAddress(tx.from) ? null : tx.from, - to: noAddress(tx.to) ? null : tx.to, - value: tx.value, - nonce: tx.nonce, - data: tx.data - }]); - return gasEstimator.then(function (gasEstimate) { - if (gasEstimate.error) { - throw gasEstimate.error; - } - return { - chainId: chainId, - from: noAddress(tx.from) ? "0x" : tx.from.toLowerCase(), - to: noAddress(tx.to) ? "0x" : to.toLowerCase(), - gasPrice: gasPrice, - gas: tx.gas ? tx.gas : Nat.div(Nat.mul(gasEstimate, "0x6"), "0x5"), - nonce: nonce, - value: value, - data: data ? data.toLowerCase() : null - }; - }); - }); -}; - -// Transaction -> Bytes -var signingData = function signingData(tx) { - return RLP.encode([Bytes.fromNat(tx.nonce), Bytes.fromNat(tx.gasPrice), Bytes.fromNat(tx.gas), tx.to ? tx.to.toLowerCase() : "0x", Bytes.fromNat(tx.value), tx.data, Bytes.fromNat(tx.chainId || "0x1"), "0x", "0x"]); -}; - -// Transaction, Account -> Bytes -var sign = function sign(tx, account) { - var data = signingData(tx); - var signature = Account.makeSigner(Nat.toNumber(tx.chainId || "0x1") * 2 + 35)(keccak256(data), account.privateKey); - var rawTransaction = RLP.decode(data).slice(0, 6).concat(Account.decodeSignature(signature)); - return RLP.encode(rawTransaction); -}; - -// Bytes -> Address -var recover = function recover(rawTransaction) { - var values = RLP.decode(rawTransaction); - var signature = Account.encodeSignature(values.slice(6, 9)); - var recovery = Bytes.toNumber(values[6]); - var extraData = recovery < 35 ? [] : [Bytes.fromNumber(recovery - 35 >> 1), "0x", "0x"]; - var data = values.slice(0, 6).concat(extraData); - var dataHex = RLP.encode(data); - return Account.recover(keccak256(dataHex), signature); -}; - -module.exports = { - addDefaults: addDefaults, - signingData: signingData, - sign: sign, - recover: recover -}; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/types.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/types.js deleted file mode 100644 index 93082d1a..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/lib/types.js +++ /dev/null @@ -1,95 +0,0 @@ -var F = require("forall"); -var A = require("./array"); -var B = require("./bytes"); -var Account = require("./account"); - -F.Bytes = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by an even number of low-case hex chars (i.e., `0123456789abcdef`)", - rand: function rand() { - return "0x" + A.generate((Math.random() * 16 | 0) * 2, function () { - return (Math.random() * 16 | 0).toString(16); - }).join(""); - }, - test: function test(value) { - return typeof value === "string" && /^0x([0-9a-f][0-9a-f])*$/.test(value); - } -}).__name("Bytes").__desc("any arbitrary data"); - -F.NBytes = function (bytes) { - return F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by " + bytes * 2 + " low-case hex chars (i.e., `0123456789abcdef`)", - test: function test(value) { - return F.Bytes.test(value) && value.length === bytes * 2 + 2; - }, - rand: function rand() { - return "0x" + A.generate(bytes * 2, function () { - return (Math.random() * 16 | 0).toString(16); - }).join(""); - } - }).__name("NBytes(" + bytes + ")").__desc("any arbitrary data of exactly " + bytes + "-byte" + (bytes > 1 ? "s" : "")); -}; - -F.Nat = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by at least one low-case hex char different from 0, followed by any number of low-case hex chars (i.e., `0123456789abcdef`)", - test: function test(value) { - return typeof value === "string" && /^0x[1-9a-f]([0-9a-f])*$/.test(value); - }, - rand: function rand() { - return "0x" + (Math.random() * Math.pow(2, 50) | 0).toString(16); - } -}).__name("Nat").__desc("an arbitrarily long non-negative integer number"); - -F.Address = F(F.Type, { - form: "a JavaScript String starting with a `0x`, followed by 40 hex chars (i.e., `0123456789abcdefABCDEF`), with the nth hex being uppercase iff the nth hex of the keccak256 of the lowercase address in ASCII is > 7", - test: function test(address) { - return (/^(0x)?[0-9a-f]{40}$/i.test(address) && Account.toChecksum(address.toLowerCase()) === address - ); - }, - rand: function rand() { - return F.Account.rand().address; - } -}).__name("Address").__desc("an Ethereum public address"); - -F.Hash = F(F.Type, { - form: F.NBytes(32).form, - test: F.NBytes(32).test, - rand: F.NBytes(32).rand -}).__name("Hash").__desc("a Keccak-256 hash"); - -F.PrivateKey = F(F.Type, { - form: F.NBytes(32).form, - test: F.NBytes(32).test, - rand: F.NBytes(32).rand -}).__name("PrivateKey").__desc("an Ethereum private key"); - -F.Account = function () { - var base = F.Struct({ - address: F.Address, - privateKey: F.PrivateKey - }); - return F(F.Type, { - form: base.form, - test: base.test, - rand: function rand() { - return Account.create(""); - } - }); -}().__name("Account").__desc("an Ethereum account"); - -F.BytesTree = F(F.Type, { - form: "either " + F.Bytes.form + ", or a tree of nested JavaScript Arrays of BytesTrees", - test: function test(value) { - return F.Bytes.test(value) || value instanceof Array && value.reduce(function (r, v) { - return F.BytesTree.test(v) && r; - }, true); - }, - rand: function rand() { - var list = []; - while (Math.random() < 0.8) { - if (Math.random() < 0.8) list.push(F.Bytes.rand());else list.push(F.BytesTree.rand()); - } - return list; - } -}).__name("BytesTree").__desc("a tree of arbitrary binary data"); - -module.exports = F; \ No newline at end of file diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/package.json b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/package.json deleted file mode 100644 index 185f7ea5..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "_from": "eth-lib@0.2.7", - "_id": "eth-lib@0.2.7", - "_inBundle": false, - "_integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "_location": "/web3-eth-accounts/eth-lib", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "eth-lib@0.2.7", - "name": "eth-lib", - "escapedName": "eth-lib", - "rawSpec": "0.2.7", - "saveSpec": null, - "fetchSpec": "0.2.7" - }, - "_requiredBy": [ - "/web3-eth-accounts" - ], - "_resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "_shasum": "2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca", - "_spec": "eth-lib@0.2.7", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth-accounts", - "author": { - "name": "Victor Maia" - }, - "bugs": { - "url": "https://github.com/maiavictor/eth-lib/issues" - }, - "bundleDependencies": false, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - }, - "deprecated": false, - "description": "Lightweight Ethereum libraries", - "devDependencies": { - "babel-cli": "^6.24.1", - "babel-preset-es2015": "^6.24.1", - "ethjs-account": "^0.1.1", - "ethjs-signer": "^0.1.1", - "rlp": "^2.0.0" - }, - "homepage": "https://github.com/maiavictor/eth-lib#readme", - "keywords": [ - "ethereum" - ], - "license": "MIT", - "main": "lib/index.js", - "name": "eth-lib", - "repository": { - "type": "git", - "url": "git+https://github.com/maiavictor/eth-lib.git" - }, - "scripts": { - "build": "babel src --out-dir=lib", - "test": "mocha test/test.js" - }, - "version": "0.2.7" -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/abi.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/abi.js deleted file mode 100644 index 2a6f3da6..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/abi.js +++ /dev/null @@ -1,57 +0,0 @@ -// type Var = { -// name: String -// type: "uint256" | "bytes32" | ... -// } -// -// type Method = { -// name: String -// inputs: [Var] -// output: [Var] -// constant: Bool -// payable: Bool -// } - -const Bytes = require("./bytes"); -const Nat = require("./nat"); -const keccak256s = require("./hash").keccak256s; - -// (type : String), JSType(type) -> {data: Bytes, dynamic: Bool} -// ABI-encodes a single term. -const encode = (type, value) => { - if (type === "bytes") { - const length = Bytes.length(value); - const nextMul32 = (((length - 1) / 32 | 0) + 1) * 32; - const lengthEncoded = encode("uint256", Nat.fromNumber(length)).data; - const bytesEncoded = Bytes.padRight(nextMul32, value); - return {data: Bytes.concat(lengthEncoded, bytesEncoded), dynamic: true}; - } else if (type === "uint256" || type === "bytes32" || type === "address") { - return {data: Bytes.pad(32, value), dynamic: false}; - } else { - throw "Eth-lib can't encode ABI type " + type + " yet."; - } -} - -// (method : Method), [JSType(method.inputs[i].type)] -> Bytes -// ABI-encodes the transaction data to call a method. -const methodData = (method, params) => { - const methodSig = method.name + "(" + method.inputs.map(i => i.type).join(",") + ")"; - const methodHash = keccak256s(methodSig).slice(0,10); - let encodedParams = params.map((param,i) => encode(method.inputs[i].type, param)); - var headBlock = "0x"; - let dataBlock = "0x"; - for (var i = 0; i < encodedParams.length; ++i) { - if (encodedParams[i].dynamic) { - var dataLoc = encodedParams.length * 32 + Bytes.length(dataBlock); - headBlock = Bytes.concat(headBlock, Bytes.pad(32, Nat.fromNumber(dataLoc))); - dataBlock = Bytes.concat(dataBlock, encodedParams[i].data); - } else { - headBlock = Bytes.concat(headBlock, encodedParams[i].data); - } - } - return Bytes.flatten([methodHash, headBlock, dataBlock]); -}; - -module.exports = { - encode, - methodData -}; diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/account.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/account.js deleted file mode 100644 index adb20a9d..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/account.js +++ /dev/null @@ -1,76 +0,0 @@ -const Bytes = require("./bytes"); -const Nat = require("./nat"); -const elliptic = require("elliptic"); -const rlp = require("./rlp"); -const secp256k1 = new (elliptic.ec)("secp256k1"); // eslint-disable-line -const {keccak256, keccak256s} = require("./hash"); - -const create = entropy => { - const innerHex = keccak256(Bytes.concat(Bytes.random(32), entropy || Bytes.random(32))); - const middleHex = Bytes.concat(Bytes.concat(Bytes.random(32), innerHex), Bytes.random(32)); - const outerHex = keccak256(middleHex); - return fromPrivate(outerHex); -} - -const toChecksum = address => { - const addressHash = keccak256s(address.slice(2)); - let checksumAddress = "0x"; - for (let i = 0; i < 40; i++) - checksumAddress += parseInt(addressHash[i + 2], 16) > 7 - ? address[i + 2].toUpperCase() - : address[i + 2]; - return checksumAddress; -} - -const fromPrivate = privateKey => { - const buffer = new Buffer(privateKey.slice(2), "hex"); - const ecKey = secp256k1.keyFromPrivate(buffer); - const publicKey = "0x" + ecKey.getPublic(false, 'hex').slice(2); - const publicHash = keccak256(publicKey); - const address = toChecksum("0x" + publicHash.slice(-40)); - return { - address: address, - privateKey: privateKey - } -} - -const encodeSignature = ([v, r, s]) => - Bytes.flatten([r,s,v]); - -const decodeSignature = (hex) => [ - Bytes.slice(64, Bytes.length(hex), hex), - Bytes.slice(0, 32, hex), - Bytes.slice(32, 64, hex)]; - -const makeSigner = addToV => (hash, privateKey) => { - const signature = secp256k1 - .keyFromPrivate(new Buffer(privateKey.slice(2), "hex")) - .sign(new Buffer(hash.slice(2), "hex"), {canonical: true}); - return encodeSignature([ - Nat.fromString(Bytes.fromNumber(addToV + signature.recoveryParam)), - Bytes.pad(32, Bytes.fromNat("0x" + signature.r.toString(16))), - Bytes.pad(32, Bytes.fromNat("0x" + signature.s.toString(16)))]); -} - -const sign = makeSigner(27); // v=27|28 instead of 0|1... - -const recover = (hash, signature) => { - const vals = decodeSignature(signature); - const vrs = {v: Bytes.toNumber(vals[0]), r:vals[1].slice(2), s:vals[2].slice(2)}; - const ecPublicKey = secp256k1.recoverPubKey(new Buffer(hash.slice(2), "hex"), vrs, vrs.v < 2 ? vrs.v : 1 - (vrs.v % 2)); // because odd vals mean v=0... sadly that means v=0 means v=1... I hate that - const publicKey = "0x" + ecPublicKey.encode("hex", false).slice(2); - const publicHash = keccak256(publicKey); - const address = toChecksum("0x" + publicHash.slice(-40)); - return address; -} - -module.exports = { - create, - toChecksum, - fromPrivate, - sign, - makeSigner, - recover, - encodeSignature, - decodeSignature -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/array.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/array.js deleted file mode 100644 index c6945a57..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/array.js +++ /dev/null @@ -1,35 +0,0 @@ -const generate = (num, fn) => { - let a = []; - for (var i = 0; i < num; ++i) - a.push(fn(i)); - return a; -}; - -const replicate = (num, val) => - generate(num, () => val); - -const concat = (a, b) => - a.concat(b); - -const flatten = (a) => { - let r = []; - for (let j = 0, J = a.length; j < J; ++j) - for (let i = 0, I = a[j].length; i < I; ++i) - r.push(a[j][i]); - return r; -} - -const chunksOf = (n,a) => { - let b = []; - for (let i = 0, l = a.length; i < l; i += n) - b.push(a.slice(i, i + n)); - return b; -} - -module.exports = { - generate, - replicate, - concat, - flatten, - chunksOf -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/bytes.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/bytes.js deleted file mode 100644 index 857da70e..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/bytes.js +++ /dev/null @@ -1,179 +0,0 @@ -const A = require("./array.js"); - -const at = (bytes, index) => - parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16); - -const random = bytes => { - let rnd; - if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) - rnd = window.crypto.getRandomValues(new Uint8Array(bytes)); - else if (typeof require !== "undefined") - rnd = require("c" + "rypto").randomBytes(bytes); - else - throw "Safe random numbers not available."; - let hex = "0x"; - for (let i = 0; i < bytes; ++i) - hex += ("00" + rnd[i].toString(16)).slice(-2); - return hex; -}; - -const length = a => - (a.length - 2) / 2; - -const flatten = (a) => - "0x" + a.reduce((r,s) => r + s.slice(2), ""); - -const slice = (i,j,bs) => - "0x" + bs.slice(i*2+2,j*2+2); - -const reverse = hex => { - let rev = "0x"; - for (let i = 0, l = length(hex); i < l; ++i) { - rev += hex.slice((l-i)*2, (l-i+1)*2); - } - return rev; -} - -const pad = (l,hex) => - hex.length === l*2+2 ? hex : pad(l,"0x"+"0"+hex.slice(2)); - -const padRight = (l,hex) => - hex.length === l*2+2 ? hex : padRight(l,hex+"0"); - -const toArray = hex => { - let arr = []; - for (let i = 2, l = hex.length; i < l; i += 2) - arr.push(parseInt(hex.slice(i, i + 2), 16)); - return arr; -} - -const fromArray = arr => { - let hex = "0x"; - for (let i = 0, l = arr.length; i < l; ++i) { - let b = arr[i]; - hex += (b < 16 ? "0" : "") + b.toString(16); - } - return hex; -} - -const toUint8Array = hex => - new Uint8Array(toArray(hex)); - -const fromUint8Array = arr => - fromArray([].slice.call(arr, 0)); - -const fromNumber = num => { - let hex = num.toString(16); - return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex ; -}; - -const toNumber = hex => - parseInt(hex.slice(2), 16); - -const concat = (a, b) => - a.concat(b.slice(2)); - -const fromNat = bn => - bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2); - -const toNat = bn => - bn[2] === "0" ? "0x" + bn.slice(3) : bn; - -const fromAscii = ascii => { - let hex = "0x"; - for (let i = 0; i < ascii.length; ++i) - hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2); - return hex; -}; - -const toAscii = hex => { - let ascii = ""; - for (let i = 2; i < hex.length; i += 2) - ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16)); - return ascii; -}; - -// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330 -const fromString = s => { - const makeByte = uint8 => { - const b = uint8.toString(16); - return b.length < 2 ? "0" + b : b; - }; - let bytes = "0x"; - for (let ci = 0; ci != s.length; ci++) { - let c = s.charCodeAt(ci); - if (c < 128) { - bytes += makeByte(c); - continue; - } - if (c < 2048) { - bytes += makeByte(c >> 6 | 192); - } else { - if (c > 0xd7ff && c < 0xdc00) { - if (++ci == s.length) return null; - let c2 = s.charCodeAt(ci); - if (c2 < 0xdc00 || c2 > 0xdfff) return null; - c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); - bytes += makeByte(c >> 18 | 240); - bytes += makeByte(c>> 12 & 63 | 128); - } else { // c <= 0xffff - bytes += makeByte(c >> 12 | 224); - } - bytes += makeByte(c >> 6 & 63 | 128); - } - bytes += makeByte(c & 63 | 128); - } - return bytes; -}; - -const toString = (bytes) => { - let s = ''; - let i = 0; - let l = length(bytes); - while (i < l) { - let c = at(bytes, i++); - if (c > 127) { - if (c > 191 && c < 224) { - if (i >= l) return null; - c = (c & 31) << 6 | at(bytes, i) & 63; - } else if (c > 223 && c < 240) { - if (i + 1 >= l) return null; - c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63; - } else if (c > 239 && c < 248) { - if (i+2 >= l) return null; - c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63; - } else return null; - ++i; - } - if (c <= 0xffff) s += String.fromCharCode(c); - else if (c <= 0x10ffff) { - c -= 0x10000; - s += String.fromCharCode(c >> 10 | 0xd800) - s += String.fromCharCode(c & 0x3FF | 0xdc00) - } else return null; - } - return s; -}; - -module.exports = { - random, - length, - concat, - flatten, - slice, - reverse, - pad, - padRight, - fromAscii, - toAscii, - fromString, - toString, - fromNumber, - toNumber, - fromNat, - toNat, - fromArray, - toArray, - fromUint8Array, - toUint8Array -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/desubits.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/desubits.js deleted file mode 100644 index 88734ba3..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/desubits.js +++ /dev/null @@ -1,62 +0,0 @@ -const Bytes = require("./bytes"); - -const inis = "pbtdkgxjfvlrmnsz".split(""); - -const mids = "auie".split(""); - -const back = [inis,mids].map(chars => { - let map = {}; - for (let i = 0; i < chars.length; ++i) - map[chars[i]] = i; - return map; -}); - -const syllableFromB64 = b64 => { - const ini = (b64 >>> 2) & 15; - const mid = (b64 >>> 0) & 3; - return inis[ini] + mids[mid]; -} - -const syllableToB64 = syllable => { - const ini = back[0][syllable[0]]; - const mid = back[1][syllable[1]]; - return ini * 4 + mid; -} - -const b64sFromBytes = bytes => { - //BoooooBoooooBoooooBooooo - //BoooooooBoooooooBooooooo - let b64s = [], b64; - for (let i = 0, l = Math.ceil(bytes.length * 8 / 6); i < l; ++i) { - let j = i / 8 * 6 | 0; - b64s.push - ( i % 4 === 0 ? (bytes[j+0] / 4 | 0) - : i % 4 === 1 ? bytes[j+0] % 4 * 16 + (bytes[j+1] / 16 | 0) - : i % 4 === 2 ? bytes[j+0] % 16 * 4 + (bytes[j+1] / 64 | 0) - : bytes[j+0] % 64 * 1); - } - return b64s; -} - -const b64sToBytes = b64s => { - let bytes = []; - for (let i = 0, l = Math.floor(b64s.length * 6 / 8); i < l; ++i) { - let j = i / 6 * 8 | 0; - bytes.push - ( i % 3 === 0 ? b64s[j+0] % 64 * 4 + (b64s[j+1] / 16 | 0) - : i % 3 === 1 ? b64s[j+0] % 16 * 16 + (b64s[j+1] / 4 | 0) - : b64s[j+0] % 4 * 64 + (b64s[j+1] / 1 | 0)); - } - return bytes; -} - -const fromBytes = bytes => - b64sFromBytes(Bytes.toArray(bytes)).map(syllableFromB64).join(""); - -const toBytes = syllables => - Bytes.fromArray(b64sToBytes(syllables.match(/\w\w/g).map(syllableToB64))); - -module.exports = { - fromBytes, - toBytes -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/fn.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/fn.js deleted file mode 100644 index 15114dc2..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/fn.js +++ /dev/null @@ -1,10 +0,0 @@ -const times = (n, f, x) => { - for (let i = 0; i < n; ++i) { - x = f(x); - } - return x; -} - -module.exports = { - times -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/hash.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/hash.js deleted file mode 100644 index e11b94bb..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/hash.js +++ /dev/null @@ -1,340 +0,0 @@ -// This was ported from https://github.com/emn178/js-sha3, with some minor -// modifications and pruning. It is licensed under MIT: -// -// Copyright 2015-2016 Chen, Yi-Cyuan -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// 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. - -const HEX_CHARS = '0123456789abcdef'.split(''); -const KECCAK_PADDING = [1, 256, 65536, 16777216]; -const SHIFT = [0, 8, 16, 24]; -const RC = [ - 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]; - -const Keccak = (bits) => ({ - blocks: [], - reset: true, - block: 0, - start: 0, - blockCount: (1600 - (bits << 1)) >> 5, - outputBlocks: bits >> 5, - s: (s=>[].concat(s,s,s,s,s))([0,0,0,0,0,0,0,0,0,0]) -}); - -const update = (state, message) => { - var length = message.length, - blocks = state.blocks, - byteCount = state.blockCount << 2, - blockCount = state.blockCount, - outputBlocks = state.outputBlocks, - s = state.s, - index = 0, - i, - code; - - // update - while (index < length) { - if (state.reset) { - state.reset = false; - blocks[0] = state.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (typeof message !== "string") { - for (i = state.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = state.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - state.lastByteIndex = i; - if (i >= byteCount) { - state.start = i - byteCount; - state.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - state.reset = true; - } else { - state.start = i; - } - } - - // finalize - i = state.lastByteIndex; - blocks[i >> 2] |= KECCAK_PADDING[i & 3]; - if (state.lastByteIndex === byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - - // toString - var hex = '', i = 0, j = 0, block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + - HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + - HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + - HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - return "0x" + hex; -} - -const f = s => { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } -} - -const keccak = bits => str => { - var msg; - if (str.slice(0,2) === "0x") { - msg = []; - for (var i = 2, l = str.length; i < l; i += 2) - msg.push(parseInt(str.slice(i,i+2), 16)); - } else { - msg = str; - } - return update(Keccak(bits, bits), msg); -} - -module.exports = { - keccak256: keccak(256), - keccak512: keccak(512), - keccak256s: keccak(256), - keccak512s: keccak(512), -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/index.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/index.js deleted file mode 100644 index 258b6668..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/index.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - account: require("./account.js"), - nat: require("./nat.js"), - bytes: require("./bytes.js"), - hash: require("./hash.js"), - RLP: require("./rlp.js"), - abi: require("./abi.js"), - transaction: require("./transaction.js"), - rpc: require("./rpc.js"), - desubits: require("./desubits.js"), - passphrase: require("./passphrase.js") -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/map.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/map.js deleted file mode 100644 index e5d805ae..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/map.js +++ /dev/null @@ -1,21 +0,0 @@ -const merge = a => b => { - let c = {}; - for (let key in a) - c[key] = a[key]; - for (let key in b) - c[key] = b[key]; - return c; -} - -const remove = removeKey => a => { - let b = {}; - for (let key in a) - if (key !== removeKey) - b[key] = a[key]; - return b; -} - -module.exports = { - merge, - remove -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/nat.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/nat.js deleted file mode 100644 index 1cfc02ea..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/nat.js +++ /dev/null @@ -1,57 +0,0 @@ -const BN = require("bn.js"); -const Bytes = require("./bytes"); - -const fromBN = bn => - "0x" + bn.toString("hex"); - -const toBN = str => - new BN(str.slice(2), 16); - -const fromString = str => { - const bn = "0x" + (str.slice(0,2) === "0x" - ? new BN(str.slice(2), 16) - : new BN(str, 10)).toString("hex"); - return bn === "0x0" ? "0x" : bn; -} - -const toEther = wei => - toNumber(div(wei, fromString("10000000000"))) / 100000000; - -const fromEther = eth => - mul(fromNumber(Math.floor(eth * 100000000)), fromString("10000000000")); - -const toString = a => - toBN(a).toString(10); - -const fromNumber = a => - typeof a === "string" - ? (/^0x/.test(a) ? a : "0x" + a) - : "0x" + new BN(a).toString("hex"); - -const toNumber = a => - toBN(a).toNumber(); - -const toUint256 = a => - Bytes.pad(32, a); - -const bin = method => (a, b) => - fromBN(toBN(a)[method](toBN(b))); - -const add = bin("add"); -const mul = bin("mul"); -const div = bin("div"); -const sub = bin("sub"); - -module.exports = { - toString, - fromString, - toNumber, - fromNumber, - toEther, - fromEther, - toUint256, - add, - mul, - div, - sub -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/passphrase.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/passphrase.js deleted file mode 100644 index bd112352..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/passphrase.js +++ /dev/null @@ -1,51 +0,0 @@ -const Hash = require("./hash"); -const Bytes = require("./bytes"); -const Desubits = require("./desubits"); - -// Bytes -> Bytes -const bytesAddChecksum = (bytes) => { - const hash = Hash.keccak256(bytes); - const sum = Bytes.slice(0, 1, hash); - return Bytes.concat(bytes, sum); -}; - -// Bytes -> Bool -const bytesChecksum = (bytes) => { - const length = Bytes.length(bytes); - const prefix = Bytes.slice(0, length - 1, bytes); - return bytesAddChecksum(prefix) === bytes; -}; - -// () ~> Passphrase -const create = () => { - const bytes = bytesAddChecksum(Bytes.random(11)); - const seed = Desubits.fromBytes(bytes); - const passphrase = seed.replace(/([a-z]{8})/g, "$1 "); - return passphrase; -}; - -// Passphrase -> Bytes -const toBytes = (passphrase) => { - const seed = passphrase.replace(/ /g, ""); - const bytes = Desubits.toBytes(passphrase); - return bytes; -}; - -// Passphrase -> Bool -const checksum = (passphrase) => - bytesChecksum(toBytes(passphrase)); - -// Passphrase -> Bytes -const toMasterKey = (passphrase) => { - let hash = Hash.keccak256; - let bytes = toBytes(passphrase); - for (let i = 0, l = Math.pow(2,12); i < l; ++i) - bytes = hash(bytes); - return bytes; -} - -module.exports = { - create, - checksum, - toMasterKey -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/rlp.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/rlp.js deleted file mode 100644 index 9c42de64..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/rlp.js +++ /dev/null @@ -1,72 +0,0 @@ -// The RLP format -// Serialization and deserialization for the BytesTree type, under the following grammar: -// | First byte | Meaning | -// | ---------- | -------------------------------------------------------------------------- | -// | 0 to 127 | HEX(leaf) | -// | 128 to 183 | HEX(length_of_leaf + 128) + HEX(leaf) | -// | 184 to 191 | HEX(length_of_length_of_leaf + 128 + 55) + HEX(length_of_leaf) + HEX(leaf) | -// | 192 to 247 | HEX(length_of_node + 192) + HEX(node) | -// | 248 to 255 | HEX(length_of_length_of_node + 128 + 55) + HEX(length_of_node) + HEX(node) | - -const encode = tree => { - const padEven = str => - str.length % 2 === 0 ? str : "0" + str; - - const uint = num => - padEven(num.toString(16)) - - const length = (len, add) => - len < 56 ? uint(add + len) : uint(add + uint(len).length / 2 + 55) + uint(len); - - const dataTree = tree => { - if (typeof tree === "string") { - const hex = tree.slice(2); - const pre = hex.length != 2 || hex >= "80" ? length(hex.length / 2, 128) : ""; - return pre + hex; - } else { - const hex = tree.map(dataTree).join(""); - const pre = length(hex.length / 2, 192) - return pre + hex; - } - } - - return "0x" + dataTree(tree); -}; - -const decode = hex => { - let i = 2; - - const parseTree = () => { - if (i >= hex.length) throw ""; - const head = hex.slice(i,i+2); - return head < "80" ? (i+=2, "0x" + head) - : head < "c0" ? parseHex() - : parseList(); - } - - const parseLength = () => { - const len = parseInt(hex.slice(i,i+=2), 16) % 64; - return len < 56 ? len : parseInt(hex.slice(i, i += (len - 55) * 2), 16); - } - - const parseHex = () => { - const len = parseLength(); - return "0x" + hex.slice(i, i += len * 2); - } - - const parseList = () => { - const lim = parseLength() * 2 + i; - let list = []; - while (i < lim) - list.push(parseTree()); - return list; - } - - try { - return parseTree(); - } catch (e) { - return []; - } -}; - -module.exports = {encode, decode}; diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/rpc.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/rpc.js deleted file mode 100644 index 2ade2e7b..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/rpc.js +++ /dev/null @@ -1,30 +0,0 @@ -const request = require("xhr-request-promise"); - -const genPayload = (() => { - let nextId = 0; - return (method, params) => ({ - jsonrpc: "2.0", - id: ++nextId, - method: method, - params: params - }); -})(); - -const send = url => (method, params) => { - return request(url, { - method: "POST", - contentType: "application/json-rpc", - body: JSON.stringify(genPayload(method,params)) - }).then(answer => { - var resp = JSON.parse(answer); // todo: use njsp? - if (resp.error) { - throw new Error(resp.error.message); - } else { - return resp.result; - } - }).catch(e => { - return {error: e.toString()}; - }); -}; - -module.exports = send; diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/transaction.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/transaction.js deleted file mode 100644 index 0182d416..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/src/transaction.js +++ /dev/null @@ -1,85 +0,0 @@ -const Account = require("./account"); -const Nat = require("./nat"); -const Bytes = require("./bytes"); -const RLP = require("./rlp"); -const keccak256 = require("./hash").keccak256; - -// EthereumRPC, IncompleteTransaction -> Promise Transaction -const addDefaults = (rpc, tx) => { - var baseDefaults = [ - tx.chainId || rpc("net_version", []), - tx.gasPrice || rpc("eth_gasPrice", []), - tx.nonce || rpc("eth_getTransactionCount", [tx.from,"latest"]), - tx.value || "0x0", - tx.data || "0x" - ]; - const noAddress = address => !address || address === "" || address === "0x"; - return Promise.all(baseDefaults).then(([chainIdNum, gasPrice, nonce, value, data]) => { - var chainId = Nat.fromNumber(chainIdNum); - var gasEstimator = tx.gas - ? Promise.resolve(null) - : rpc("eth_estimateGas", [{ - from: noAddress(tx.from) ? null : tx.from, - to: noAddress(tx.to) ? null : tx.to, - value: tx.value, - nonce: tx.nonce, - data: tx.data - }]); - return gasEstimator.then(gasEstimate => { - if (gasEstimate.error) { - throw gasEstimate.error; - } - return { - chainId: chainId, - from: noAddress(tx.from) ? "0x" : tx.from.toLowerCase(), - to: noAddress(tx.to) ? "0x" : to.toLowerCase(), - gasPrice: gasPrice, - gas: tx.gas ? tx.gas : Nat.div(Nat.mul(gasEstimate, "0x6"), "0x5"), - nonce: nonce, - value: value, - data: data ? data.toLowerCase() : null - } - }); - }); -}; - -// Transaction -> Bytes -const signingData = tx => { - return RLP.encode([ - Bytes.fromNat(tx.nonce), - Bytes.fromNat(tx.gasPrice), - Bytes.fromNat(tx.gas), - tx.to ? tx.to.toLowerCase() : "0x", - Bytes.fromNat(tx.value), - tx.data, - Bytes.fromNat(tx.chainId || "0x1"), - "0x", - "0x" - ]); -}; - -// Transaction, Account -> Bytes -const sign = (tx, account) => { - const data = signingData(tx); - const signature = Account.makeSigner(Nat.toNumber(tx.chainId || "0x1") * 2 + 35)(keccak256(data), account.privateKey); - const rawTransaction = RLP.decode(data).slice(0,6).concat(Account.decodeSignature(signature)); - return RLP.encode(rawTransaction); -}; - -// Bytes -> Address -const recover = (rawTransaction) => { - const values = RLP.decode(rawTransaction); - const signature = Account.encodeSignature(values.slice(6,9)); - const recovery = Bytes.toNumber(values[6]); - const extraData = recovery < 35 ? [] : [Bytes.fromNumber((recovery - 35) >> 1), "0x", "0x"] - const data = values.slice(0,6).concat(extraData); - const dataHex = RLP.encode(data); - return Account.recover(keccak256(dataHex), signature); -}; - -module.exports = { - addDefaults, - signingData, - sign, - recover -}; diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/lib/benchmark.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/lib/benchmark.js deleted file mode 100644 index 1dcf9bd3..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/lib/benchmark.js +++ /dev/null @@ -1,18 +0,0 @@ -const rnd = require("./randomData.js"); -const rlp = require("./../../src/rlp.js"); -const ref = {rlp: require("rlp")}; -const cps = f => { - for (var t = Date.now(), i = 0; Date.now() - t < 1000; ++i) - f(); - return i; -}; - -let dataTrees = []; -for (let i = 0; i < 64; ++i) - dataTrees.push(rnd.dataTree()); -console.log("Benchmarking Eth-Lib's RLP implementation vs the one on NPM."); -const liteCps = cps(() => dataTrees.map((dt) => rlp.decode(rlp.encode(dt)))); -const npmCps = cps(() => dataTrees.map((dt) => ref.rlp.decode(ref.rlp.encode(dt)))); -console.log("- Eth-Lib: " + liteCps + " calls per second."); -console.log("- Reference: " + npmCps + " calls per second."); -console.log("- Eth-Lib is: " + (liteCps / npmCps).toFixed(2) + " " + (liteCps > npmCps ? "faster" : "slower") + " than reference."); diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/lib/randomData.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/lib/randomData.js deleted file mode 100644 index b2082d85..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/lib/randomData.js +++ /dev/null @@ -1,24 +0,0 @@ -// () ~> HexString -const hexString = () => { - let str = ""; - while (Math.random() < 0.95) - str = str + ("00" + (Math.random() * 256 | 0).toString(16)).slice(-2); - return "0x" + str; -} - -// () ~> DataTree -const dataTree = () => { - let list = []; - while (Math.random() < 0.8) { - if (Math.random() < 0.8) - list.push(hexString()); - else - list.push(dataTree()); - } - return list; -} - -module.exports = { - hexString, - dataTree -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/test.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/test.js deleted file mode 100644 index 971a6683..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/eth-lib/test/test.js +++ /dev/null @@ -1,141 +0,0 @@ -const assert = require("assert"); -const rnd = require("./lib/randomData.js"); -const rlp = require("./../src/rlp.js"); -const ref = {rlp: require("rlp")}; -// const F = require("./../src/types.js"); -const Nat = require("./../src/Nat.js"); -const Account = require("./../src/account.js"); -const keccak256 = require("./../src/hash.js").keccak256; -const ethjs = { - signer: require("ethjs-signer"), - account: require("ethjs-account")}; - -describe("RLP", () => { - it("Must operate identically to reference implementation", () => { - // Builds a test set of 256 random dataTrees + 2 default - let dataTrees = []; - dataTrees.push(["0x00112233", "0x00", "0x44", "0x55", "0xf0", "0xff", ["0x66"], ["0x77", "0x88"], "0x", "0x", "0x99aabb"]); - dataTrees.push("0x00112233445566778899aabbccddeeff"); - for (let i = 0; i < 256; ++i) - dataTrees.push(rnd.dataTree()); - - // Tests if they encode and decode identically to the reference implementation - dataTrees.forEach(dataTree => { - const refEnc = "0x" + ref.rlp.encode(dataTree).toString("hex"); - const impEnc = rlp.encode(dataTree); - const impDec = rlp.decode(impEnc); - try { - assert(refEnc === impEnc); - assert(JSON.stringify(impDec) === JSON.stringify(dataTree)); - } catch (e) { - console.log(JSON.stringify(dataTree, null, 2)); - } - }); - }); - it("Obeys law: `decode(encode(tree)) == tree`", () => { - F.forall([F.BytesTree], tree => JSON.stringify(rlp.decode(rlp.encode(tree))) === JSON.stringify(tree)); - }); -}); - -describe("account", function () { - it("must recover the same address that signed", () => { - F.forall([F.Account, F.Bytes], (acc, msg) => - Account.recover(keccak256(msg), Account.sign(keccak256(msg), acc.privateKey, 0)) === acc.address, - 32); - }); - - it("must match the generated address with EthJS-account", () => { - F.forall([F.NBytes(32)], pvt => { - const ethfpAcc = Account.fromPrivate(pvt); - const ethjsAcc = ethjs.account.privateToAccount(pvt); - return ethfpAcc.address === ethjsAcc.address; - }, 128); - }); - - it("must match expected values for complex pre-determined tests", () => { - const accounts = [ - { - "address": '0x9d8A62f656a8d1615C1294fd71e9CFb3E4855A4F', - "publicKey": '0x4bc2a31265153f07e70e0bab08724e6b85e217f8cd628ceb62974247bb493382ce28cab79ad7119ee1ad3ebcdb98a16805211530ecc6cfefa1b88e6dff99232a', - "privateKey": '0x4646464646464646464646464646464646464646464646464646464646464646', - "transactions": [ - { - "object": { - "nonce": Nat.fromString("9"), - "gasPrice": Nat.fromString("20000000000"), - "gas": Nat.fromString("21000"), - "to": '0x3535353535353535353535353535353535353535', - "value": Nat.fromString("1000000000000000000"), - "data": "0x" - }, - "signature": "0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83" - }, - ] - }, - { - "address": '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - "publicKey": '0x4646ae5047316b4230d0086c8acec687f00b1cd9d1dc634f6cb358ac0a9a8ffffe77b4dd0a4bfb95851f3b7355c781dd60f8418fc8a65d14907aff47c903a559', - "privateKey": '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', - "transactions": [ - { - "object": { - "nonce": Nat.fromString("0"), - "gasPrice": Nat.fromString("230000000000"), - "gas": Nat.fromString("21000"), - "to": '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c', - "value": Nat.fromString("1000000000000000000"), - "data": "0x0123abcd" - }, - "signature": "0xf8708085358d117c0082520894fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd25a032dbcf46a64b9892df24d8b961d2a52fd66b1dabd3a0d96940fd6795c01d8711a01b86df9475de7451554557d87b69456e3fa95aa5375584bf63d1ffd647a225d9", - "oldSignature": "0xf8708085358d117c0082520894fcad0b19bb29d4674531d6f115237e16afce377c880de0b6b3a7640000840123abcd1ba04e289b471dd4469d5080ce3726b8359d5b0c649e012bbbdde53f9b6580ad21a2a0333663ea96846c112f3878705c8c24a763d1fbf8f97c174d26e350c7ef0d7263" - }, - ] - } - ]; - - // For each account - accounts.forEach(function (correctAccount, i) { - - // Generates an address from this account's private key - const testAccount = Account.fromPrivate(correctAccount.privateKey); - - // Generated address must match - assert(testAccount.address === correctAccount.address); - - // For each transaction on this account - correctAccount.transactions.forEach(function (transaction) { - - // Signs it, uing post-EIP 155 scheme - const signature = Account.signTransaction( - transaction.object, - correctAccount.privateKey); - - // Checks if the signature is as expected - assert(transaction.signature === signature); - - //// Checks if we can recover the right address - const recoveredAddress = Account.recoverTransaction(signature); - assert(recoveredAddress === testAccount.address); - - //// If the test also provides a pre-EIP 155 signature - if (transaction.oldSignature) { - - let txObj = {}; - for (let key in transaction.object) - txObj[key] = transaction.object[key].replace(/^0x$/,"0x0"); - - //Signs it, using pre-EIP 155 scheme (using the ethjs-signer lib) - const oldSignature = ethjs.signer.sign(txObj, correctAccount.privateKey); - - //// Checks if the signature is as expected - assert(transaction.oldSignature === oldSignature); - - //// Checks if we can recover the right address from old sigs (using web3) - const recoveredAddress = Account.recoverTransaction(oldSignature); - assert(recoveredAddress === testAccount.address); - } - }); - }); - }); -}); - diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/.npmignore b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/.npmignore deleted file mode 100644 index fd4f2b06..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/.travis.yml b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/.travis.yml deleted file mode 100644 index 9400c118..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.6" - - "0.8" - - "0.10" diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/LICENSE.md b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/LICENSE.md deleted file mode 100644 index f039427f..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,2 +0,0 @@ -Copyright (c) 2010-2012 Robert Kieffer -MIT License - http://opensource.org/licenses/mit-license.php diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/README.md b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/README.md deleted file mode 100644 index 0965cbb3..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/README.md +++ /dev/null @@ -1,205 +0,0 @@ -# uuid [![Build Status](https://secure.travis-ci.org/defunctzombie/node-uuid.png?branch=master)](http://travis-ci.org/defunctzombie/node-uuid) # - -[![browser support](https://ci.testling.com/defunctzombie/node-uuid.png)](https://ci.testling.com/defunctzombie/node-uuid) - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Generate RFC4122 version 1 or version 4 UUIDs -* Runs in node.js and all browsers. -* Cryptographically strong random # generation on supporting platforms -* 1185 bytes minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) -* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) - -## Getting Started - -Install it in your browser: - -```html - -``` - -Or in node.js: - -``` -npm install uuid -``` - -```javascript -var uuid = require('uuid'); - -// Generate a v1 (time-based) id -uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' - -// Generate a v4 (random) id -uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1' -``` - -## API - -### uuid.v1([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Notes: - -1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v1({ - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}); // -> "710b962e-041c-11e1-9234-0123456789ab" -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -var arr = new Array(32); // -> [] -uuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15] -uuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15] - -// Optionally use uuid.unparse() to get stringify the ids -uuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115' -uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115' -``` - -### uuid.v4([`options` [, `buffer` [, `offset`]]]) - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with fully-specified options - -```javascript -uuid.v4({ - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}); -// -> "109156be-c4fb-41ea-b1b4-efe1671c5836" -``` - -Example: Generate two IDs in a single buffer - -```javascript -var buffer = new Array(32); // (or 'new Buffer' in node.js) -uuid.v4(null, buffer, 0); -uuid.v4(null, buffer, 16); -``` - -### uuid.parse(id[, buffer[, offset]]) -### uuid.unparse(buffer[, offset]) - -Parse and unparse UUIDs - - * `id` - (String) UUID(-like) string - * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used - * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0 - -Example parsing and unparsing a UUID string - -```javascript -var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> -var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10' -``` - -### uuid.noConflict() - -(Browsers only) Set `uuid` property back to it's previous value. - -Returns the uuid object. - -Example: - -```javascript -var myUuid = uuid.noConflict(); -myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a' -``` - -## Deprecated APIs - -Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version. - -### uuid([format [, buffer [, offset]]]) - -uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary). - -### uuid.BufferClass - -The class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API. - -## Testing - -In node.js - -``` -> cd test -> node test.js -``` - -In Browser - -``` -open test/test.html -``` - -### Benchmarking - -Requires node.js - -``` -cd benchmark/ -npm install -node benchmark.js -``` - -For a more complete discussion of uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/uuid/wiki/Benchmark) - -For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance). - -## Release notes - -### 1.4.0 - -* Improved module context detection -* Removed public RNG functions - -### 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - -### 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/README.md b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/README.md deleted file mode 100644 index aaeb2ea0..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# node-uuid Benchmarks - -### Results - -To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark - -### Run them yourself - -node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`. - -To prepare and run the benchmark issue; - -``` -npm install uuid uuid-js -node benchmark/benchmark.js -``` - -You'll see an output like this one: - -``` -# v4 -nodeuuid.v4(): 854700 uuids/second -nodeuuid.v4('binary'): 788643 uuids/second -nodeuuid.v4('binary', buffer): 1336898 uuids/second -uuid(): 479386 uuids/second -uuid('binary'): 582072 uuids/second -uuidjs.create(4): 312304 uuids/second - -# v1 -nodeuuid.v1(): 938086 uuids/second -nodeuuid.v1('binary'): 683060 uuids/second -nodeuuid.v1('binary', buffer): 1644736 uuids/second -uuidjs.create(1): 190621 uuids/second -``` - -* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library. -* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK. - -If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file: - -``` -for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done; -``` - -If you're interested in how performance varies between different node versions, you can issue the above command multiple times. - -You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot: - -``` -(cd benchmark/ && ./bench.sh) -``` - -This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then. diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/bench.gnu b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/bench.gnu deleted file mode 100644 index a342fbbe..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/bench.gnu +++ /dev/null @@ -1,174 +0,0 @@ -#!/opt/local/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.4 patchlevel 3 -# last modified March 2011 -# System: Darwin 10.8.0 -# -# Copyright (C) 1986-1993, 1998, 2004, 2007-2010 -# Thomas Williams, Colin Kelley and many others -# -# gnuplot home: http://www.gnuplot.info -# faq, bugs, etc: type "help seeking-assistance" -# immediate help: type "help" -# plot window: hit 'h' -set terminal postscript eps noenhanced defaultplex \ - leveldefault color colortext \ - solid linewidth 1.2 butt noclip \ - palfuncparam 2000,0.003 \ - "Helvetica" 14 -set output 'bench.eps' -unset clip points -set clip one -unset clip two -set bar 1.000000 front -set border 31 front linetype -1 linewidth 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1 -set style circle radius graph 0.02, first 0, 0 -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox -set key noinvert samplen 4 spacing 1 width 0 height 0 -set key maxcolumns 2 maxrows 0 -unset label -unset arrow -set style increment default -unset style line -set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0 -unset style arrow -set style histogram clustered gap 2 title offset character 0, 0, 0 -unset logscale -set offsets graph 0.05, 0.15, 0, 0 -set pointsize 1.5 -set pointintervalbox 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -unset hidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data points -set style function lines -set xzeroaxis linetype -2 linewidth 1.000 -set yzeroaxis linetype -2 linewidth 1.000 -set zzeroaxis linetype -2 linewidth 1.000 -set x2zeroaxis linetype -2 linewidth 1.000 -set y2zeroaxis linetype -2 linewidth 1.000 -set ticslevel 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set xtics norangelimit -set xtics () -set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set ytics autofreq norangelimit -set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0 -set ztics autofreq norangelimit -set nox2tics -set noy2tics -set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0 -set cbtics autofreq norangelimit -set title "" -set title offset character 0, 0, 0 font "" norotate -set timestamp bottom -set timestamp "" -set timestamp offset character 0, 0, 0 font "" norotate -set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale rfixmin -set autoscale rfixmax -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set autoscale tfixmin -set autoscale tfixmax -set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale ufixmin -set autoscale ufixmax -set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale vfixmin -set autoscale vfixmax -set xlabel "" -set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set x2label "" -set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate -set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] ) -set autoscale xfixmin -set autoscale xfixmax -set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] ) -set autoscale x2fixmin -set autoscale x2fixmax -set ylabel "" -set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set y2label "" -set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] ) -set autoscale yfixmin -set autoscale yfixmax -set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] ) -set autoscale y2fixmin -set autoscale y2fixmax -set zlabel "" -set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set autoscale zfixmin -set autoscale zfixmax -set cblabel "" -set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270 -set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] ) -set autoscale cbfixmin -set autoscale cbfixmax -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set pm3d explicit at s -set pm3d scansautomatic -set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault -set loadpath -set fontpath -set fit noerrorvariables -GNUTERM = "aqua" -plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2 -# EOF diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/bench.sh b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/bench.sh deleted file mode 100755 index d870a0cb..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/bench.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# for a given node version run: -# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done; - -PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte') -FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es) -INDICES=(2 3 2 3 2 2 2 2 2) -VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " ) -TMPJOIN="tmp_join" -OUTPUT="bench_results.txt" - -for I in ${!FILES[*]}; do - F=${FILES[$I]} - P=${PATTERNS[$I]} - INDEX=${INDICES[$I]} - echo "version $F" > $F - for V in $VERSIONS; do - (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F - done - if [ $I == 0 ]; then - cat $F > $TMPJOIN - else - join $TMPJOIN $F > $OUTPUT - cp $OUTPUT $TMPJOIN - fi - rm $F -done - -rm $TMPJOIN - -gnuplot bench.gnu -convert -density 200 -resize 800x560 -flatten bench.eps bench.png -rm bench.eps diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/benchmark-native.c b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/benchmark-native.c deleted file mode 100644 index dbfc75f6..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/benchmark-native.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -Test performance of native C UUID generation - -To Compile: cc -luuid benchmark-native.c -o benchmark-native -*/ - -#include -#include -#include -#include - -int main() { - uuid_t myid; - char buf[36+1]; - int i; - struct timeval t; - double start, finish; - - gettimeofday(&t, NULL); - start = t.tv_sec + t.tv_usec/1e6; - - int n = 2e5; - for (i = 0; i < n; i++) { - uuid_generate(myid); - uuid_unparse(myid, buf); - } - - gettimeofday(&t, NULL); - finish = t.tv_sec + t.tv_usec/1e6; - double dur = finish - start; - - printf("%d uuids/sec", (int)(n/dur)); - return 0; -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/benchmark.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/benchmark.js deleted file mode 100644 index 40e6efbe..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/benchmark.js +++ /dev/null @@ -1,84 +0,0 @@ -try { - var nodeuuid = require('../uuid'); -} catch (e) { - console.error('node-uuid require failed - skipping tests'); -} - -try { - var uuid = require('uuid'); -} catch (e) { - console.error('uuid require failed - skipping tests'); -} - -try { - var uuidjs = require('uuid-js'); -} catch (e) { - console.error('uuid-js require failed - skipping tests'); -} - -var N = 5e5; - -function rate(msg, t) { - console.log(msg + ': ' + - (N / (Date.now() - t) * 1e3 | 0) + - ' uuids/second'); -} - -console.log('# v4'); - -// node-uuid - string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4(); - rate('nodeuuid.v4() - using node.js crypto RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG}); - rate('nodeuuid.v4() - using Math.random() RNG', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary'); - rate('nodeuuid.v4(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer); - rate('nodeuuid.v4(\'binary\', buffer)', t); -} - -// libuuid - string form -if (uuid) { - for (var i = 0, t = Date.now(); i < N; i++) uuid(); - rate('uuid()', t); - - for (var i = 0, t = Date.now(); i < N; i++) uuid('binary'); - rate('uuid(\'binary\')', t); -} - -// uuid-js - string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4); - rate('uuidjs.create(4)', t); -} - -// 140byte.es -for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)}); -rate('140byte.es_v4', t); - -console.log(''); -console.log('# v1'); - -// node-uuid - v1 string form -if (nodeuuid) { - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1(); - rate('nodeuuid.v1()', t); - - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary'); - rate('nodeuuid.v1(\'binary\')', t); - - var buffer = new nodeuuid.BufferClass(16); - for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer); - rate('nodeuuid.v1(\'binary\', buffer)', t); -} - -// uuid-js - v1 string form -if (uuidjs) { - for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1); - rate('uuidjs.create(1)', t); -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/package.json b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/package.json deleted file mode 100644 index 94e0b593..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/benchmark/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "benchmark-uuid", - "private": true, - "description": "Benchmarks for node-uuid", - "dependencies": { - "uuid": "1.4.1", - "uuid-js": "0.7.4" - } -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/misc/compare.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/misc/compare.js deleted file mode 100644 index 3de34151..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/misc/compare.js +++ /dev/null @@ -1,62 +0,0 @@ -var assert = require('assert'), - nodeuuid = require('../'), - uuidjs = require('uuid-js'), - util = require('util'), - exec = require('child_process').exec, - os = require('os'); - -// On Mac Os X / macports there's only the ossp-uuid package that provides uuid -// On Linux there's uuid-runtime which provides uuidgen -var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t'; - -function compare(ids) { - console.log(ids); - for (var i = 0; i < ids.length; i++) { - var id = ids[i].split('-'); - id = [id[2], id[1], id[0]].join(''); - ids[i] = id; - } - var sorted = ([].concat(ids)).sort(); - - if (sorted.toString() !== ids.toString()) { - console.log('Warning: sorted !== ids'); - } else { - console.log('everything in order!'); - } -} - -// Test time order of v1 uuids -var ids = []; -while (ids.length < 10e3) ids.push(nodeuuid.v1()); - -var max = 10; -console.log('node-uuid:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(nodeuuid.v1()); -compare(ids); - -console.log(''); -console.log('uuidjs:'); -ids = []; -for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString()); -compare(ids); - -console.log(''); -console.log('libuuid:'); -ids = []; -var count = 0; -var last = function() { - compare(ids); -} -var cb = function(err, stdout, stderr) { - ids.push(stdout.substring(0, stdout.length-1)); - count++; - if (count < max) { - return next(); - } - last(); -}; -var next = function() { - exec(uuidCmd, cb); -}; -next(); diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/misc/perf.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/misc/perf.js deleted file mode 100644 index bdc9eb46..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/misc/perf.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -var log = console.log; - -var generators = { - v1: uuid.v1, - v4: uuid.v4 -}; - -var UUID_FORMAT = { - v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i, - v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i -}; - -var N = 1e4; - -// Get %'age an actual value differs from the ideal value -function divergence(actual, ideal) { - return Math.round(100*100*(actual - ideal)/ideal)/100; -} - -function rate(msg, t) { - log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second'); -} - -for (var version in generators) { - var counts = {}, max = 0; - var generator = generators[version]; - var format = UUID_FORMAT[version]; - - log('\nSanity check ' + N + ' ' + version + ' uuids'); - for (var i = 0, ok = 0; i < N; i++) { - id = generator(); - if (!format.test(id)) { - throw Error(id + ' is not a valid UUID string'); - } - - if (id != uuid.unparse(uuid.parse(id))) { - assert(fail, id + ' is not a valid id'); - } - - // Count digits for our randomness check - if (version == 'v4') { - var digits = id.replace(/-/g, '').split(''); - for (var j = digits.length-1; j >= 0; j--) { - var c = digits[j]; - max = Math.max(max, counts[c] = (counts[c] || 0) + 1); - } - } - } - - // Check randomness for v4 UUIDs - if (version == 'v4') { - // Limit that we get worried about randomness. (Purely empirical choice, this!) - var limit = 2*100*Math.sqrt(1/N); - - log('\nChecking v4 randomness. Distribution of Hex Digits (% deviation from ideal)'); - - for (var i = 0; i < 16; i++) { - var c = i.toString(16); - var bar = '', n = counts[c], p = Math.round(n/max*100|0); - - // 1-3,5-8, and D-F: 1:16 odds over 30 digits - var ideal = N*30/16; - if (i == 4) { - // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1 + 30/16); - } else if (i >= 8 && i <= 11) { - // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits - ideal = N*(1/4 + 30/16); - } else { - // Otherwise: 1:16 odds on 30 digits - ideal = N*30/16; - } - var d = divergence(n, ideal); - - // Draw bar using UTF squares (just for grins) - var s = n/max*50 | 0; - while (s--) bar += '='; - - assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)'); - } - } -} - -// Perf tests -for (var version in generators) { - log('\nPerformance testing ' + version + ' UUIDs'); - var generator = generators[version]; - var buf = new uuid.BufferClass(16); - - for (var i = 0, t = Date.now(); i < N; i++) generator(); - rate('uuid.' + version + '()', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary'); - rate('uuid.' + version + '(\'binary\')', t); - - for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf); - rate('uuid.' + version + '(\'binary\', buffer)', t); -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/package.json b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/package.json deleted file mode 100644 index f9ae363a..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_from": "uuid@2.0.1", - "_id": "uuid@2.0.1", - "_inBundle": false, - "_integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", - "_location": "/web3-eth-accounts/uuid", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "uuid@2.0.1", - "name": "uuid", - "escapedName": "uuid", - "rawSpec": "2.0.1", - "saveSpec": null, - "fetchSpec": "2.0.1" - }, - "_requiredBy": [ - "/web3-eth-accounts" - ], - "_resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "_shasum": "c2a30dedb3e535d72ccf82e343941a50ba8533ac", - "_spec": "uuid@2.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth-accounts", - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com" - }, - "browser": { - "./rng.js": "./rng-browser.js" - }, - "bugs": { - "url": "https://github.com/shtylman/node-uuid/issues" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Christoph Tavan", - "email": "dev@tavan.de" - }, - { - "name": "Vincent Voyer", - "email": "vincent@zeroload.net" - } - ], - "deprecated": false, - "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.", - "devDependencies": { - "mocha": "1.8.0" - }, - "homepage": "https://github.com/shtylman/node-uuid#readme", - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "main": "./uuid.js", - "name": "uuid", - "repository": { - "type": "git", - "url": "git+https://github.com/shtylman/node-uuid.git" - }, - "scripts": { - "test": "mocha test/test.js" - }, - "testling": { - "browsers": [ - "ie6..latest", - "firefox/3.6..latest", - "chrome/22..latest", - "safari/5.1..latest" - ], - "harness": "mocha-tdd", - "files": "test/*.js" - }, - "version": "2.0.1" -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/rng-browser.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/rng-browser.js deleted file mode 100644 index 57b58d4b..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/rng-browser.js +++ /dev/null @@ -1,31 +0,0 @@ - -var rng; - -if (global.crypto && crypto.getRandomValues) { - // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto - // Moderately fast, high quality - var _rnds8 = new Uint8Array(16); - rng = function whatwgRNG() { - crypto.getRandomValues(_rnds8); - return _rnds8; - }; -} - -if (!rng) { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var _rnds = new Array(16); - rng = function() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return _rnds; - }; -} - -module.exports = rng; - diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/rng.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/rng.js deleted file mode 100644 index 3977f798..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/rng.js +++ /dev/null @@ -1,4 +0,0 @@ -var rb = require('crypto').randomBytes; -module.exports = function() { - return rb(16); -}; diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/test/mocha.opts b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/test/mocha.opts deleted file mode 100644 index e2bfcc5a..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---ui qunit diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/test/test.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/test/test.js deleted file mode 100644 index 4c9872ff..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/test/test.js +++ /dev/null @@ -1,105 +0,0 @@ -var assert = require('assert'); - -var uuid = require('../'); - -// Verify ordering of v1 ids created with explicit times -var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00 - -function compare(name, ids) { - test(name, function() { - // avoid .map for older browsers - for (var i=0 ; i 10k ids created in 1ms', function() { - // Verify throw if too many ids created - var thrown = false; - try { - uuid.v1({msecs: TIME, nsecs: 10000}); - } catch (e) { - thrown = true; - } - assert(thrown, 'Exception thrown when > 10K ids created in 1 ms'); -}); - -test('clock regression by msec', function() { - // Verify clock regression bumps clockseq - var uidt = uuid.v1({msecs: TIME}); - var uidtb = uuid.v1({msecs: TIME - 1}); - assert( - parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1, - 'Clock regression by msec increments the clockseq' - ); -}); - -test('clock regression by nsec', function() { - // Verify clock regression bumps clockseq - var uidtn = uuid.v1({msecs: TIME, nsecs: 10}); - var uidtnb = uuid.v1({msecs: TIME, nsecs: 9}); - assert( - parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1, - 'Clock regression by nsec increments the clockseq' - ); -}); - -test('explicit options product expected id', function() { - // Verify explicit options produce expected id - var id = uuid.v1({ - msecs: 1321651533573, - nsecs: 5432, - clockseq: 0x385c, - node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ] - }); - assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id'); -}); - -test('ids spanning 1ms boundary are 100ns apart', function() { - // Verify adjacent ids across a msec boundary are 1 time unit apart - var u0 = uuid.v1({msecs: TIME, nsecs: 9999}); - var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0}); - - var before = u0.split('-')[0], after = u1.split('-')[0]; - var dt = parseInt(after, 16) - parseInt(before, 16); - assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart'); -}); - -test('parse/unparse', function() { - var id = '00112233445566778899aabbccddeeff'; - assert(uuid.unparse(uuid.parse(id.substr(0,10))) == - '00112233-4400-0000-0000-000000000000', 'Short parse'); - assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) == - '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse'); -}); - diff --git a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/uuid.js b/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/uuid.js deleted file mode 100644 index be5bfede..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/node_modules/uuid/uuid.js +++ /dev/null @@ -1,183 +0,0 @@ -// uuid.js -// -// Copyright (c) 2010-2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -// Unique ID creation requires a high quality random # generator. We feature -// detect to determine the best RNG source, normalizing to a function that -// returns 128-bits of randomness, since that's what's usually required -var _rng = require('./rng'); - -// Maps for number <-> hex string conversion -var _byteToHex = []; -var _hexToByte = {}; -for (var i = 0; i < 256; i++) { - _byteToHex[i] = (i + 0x100).toString(16).substr(1); - _hexToByte[_byteToHex[i]] = i; -} - -// **`parse()` - Parse a UUID into it's component bytes** -function parse(s, buf, offset) { - var i = (buf && offset) || 0, ii = 0; - - buf = buf || []; - s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) { - if (ii < 16) { // Don't overflow! - buf[i + ii++] = _hexToByte[oct]; - } - }); - - // Zero out remaining bytes if string was short - while (ii < 16) { - buf[i + ii++] = 0; - } - - return buf; -} - -// **`unparse()` - Convert UUID byte array (ala parse()) into a string** -function unparse(buf, offset) { - var i = offset || 0, bth = _byteToHex; - return bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + '-' + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]] + - bth[buf[i++]] + bth[buf[i++]]; -} - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -// random #'s we need to init node and clockseq -var _seedBytes = _rng(); - -// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) -var _nodeId = [ - _seedBytes[0] | 0x01, - _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] -]; - -// Per 4.2.2, randomize (14 bit) clockseq -var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff; - -// Previous uuid creation time -var _lastMSecs = 0, _lastNSecs = 0; - -// See https://github.com/broofa/node-uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - var node = options.node || _nodeId; - for (var n = 0; n < 6; n++) { - b[i + n] = node[n]; - } - - return buf ? buf : unparse(b); -} - -// **`v4()` - Generate random UUID** - -// See https://github.com/broofa/node-uuid for API details -function v4(options, buf, offset) { - // Deprecated - 'format' argument, as supported in v1.2 - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options == 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || _rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ii++) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || unparse(rnds); -} - -// Export public API -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; -uuid.parse = parse; -uuid.unparse = unparse; - -module.exports = uuid; diff --git a/truebit-implementation/node_modules/web3-eth-accounts/package.json b/truebit-implementation/node_modules/web3-eth-accounts/package.json deleted file mode 100644 index 1e501c77..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "_from": "web3-eth-accounts@1.0.0-beta.36", - "_id": "web3-eth-accounts@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-MmgIlBEZ0ILLWV4+wfMrbeVVMU/VmQnCpgSDcw7wHKOKu47bKncJ6rVqVsUbC6d9F613Rios+Yj2Ua6SCHtmrg==", - "_location": "/web3-eth-accounts", - "_phantomChildren": { - "bn.js": "4.11.8", - "elliptic": "6.4.1", - "xhr-request-promise": "0.1.2" - }, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-eth-accounts@1.0.0-beta.36", - "name": "web3-eth-accounts", - "escapedName": "web3-eth-accounts", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-eth" - ], - "_resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.36.tgz", - "_shasum": "8aea37df9b038ef2c6cda608856ffd861b39eeef", - "_spec": "web3-eth-accounts@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth", - "bundleDependencies": false, - "dependencies": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module to generate Ethereum accounts and sign data and transactions.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-eth-accounts", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-eth-accounts" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-eth-accounts/src/index.js b/truebit-implementation/node_modules/web3-eth-accounts/src/index.js deleted file mode 100644 index f3da6f30..00000000 --- a/truebit-implementation/node_modules/web3-eth-accounts/src/index.js +++ /dev/null @@ -1,534 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file accounts.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require("underscore"); -var core = require('web3-core'); -var Method = require('web3-core-method'); -var Promise = require('any-promise'); -var Account = require("eth-lib/lib/account"); -var Hash = require("eth-lib/lib/hash"); -var RLP = require("eth-lib/lib/rlp"); -var Nat = require("eth-lib/lib/nat"); -var Bytes = require("eth-lib/lib/bytes"); -var cryp = (typeof global === 'undefined') ? require('crypto-browserify') : require('crypto'); -var scryptsy = require('scrypt.js'); -var uuid = require('uuid'); -var utils = require('web3-utils'); -var helpers = require('web3-core-helpers'); - -var isNot = function(value) { - return (_.isUndefined(value) || _.isNull(value)); -}; - -var trimLeadingZero = function (hex) { - while (hex && hex.startsWith('0x0')) { - hex = '0x' + hex.slice(3); - } - return hex; -}; - -var makeEven = function (hex) { - if(hex.length % 2 === 1) { - hex = hex.replace('0x', '0x0'); - } - return hex; -}; - - -var Accounts = function Accounts() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - // remove unecessary core functions - delete this.BatchRequest; - delete this.extend; - - var _ethereumCall = [ - new Method({ - name: 'getId', - call: 'net_version', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getGasPrice', - call: 'eth_gasPrice', - params: 0 - }), - new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [function (address) { - if (utils.isAddress(address)) { - return address; - } else { - throw new Error('Address '+ address +' is not a valid address to get the "transactionCount".'); - } - }, function () { return 'latest'; }] - }) - ]; - // attach methods to this._ethereumCall - this._ethereumCall = {}; - _.each(_ethereumCall, function (method) { - method.attachToObject(_this._ethereumCall); - method.setRequestManager(_this._requestManager); - }); - - - this.wallet = new Wallet(this); -}; - -Accounts.prototype._addAccountFunctions = function (account) { - var _this = this; - - // add sign functions - account.signTransaction = function signTransaction(tx, callback) { - return _this.signTransaction(tx, account.privateKey, callback); - }; - account.sign = function sign(data) { - return _this.sign(data, account.privateKey); - }; - - account.encrypt = function encrypt(password, options) { - return _this.encrypt(account.privateKey, password, options); - }; - - - return account; -}; - -Accounts.prototype.create = function create(entropy) { - return this._addAccountFunctions(Account.create(entropy || utils.randomHex(32))); -}; - -Accounts.prototype.privateKeyToAccount = function privateKeyToAccount(privateKey) { - return this._addAccountFunctions(Account.fromPrivate(privateKey)); -}; - -Accounts.prototype.signTransaction = function signTransaction(tx, privateKey, callback) { - var _this = this, - error = false, - result; - - callback = callback || function () {}; - - if (!tx) { - error = new Error('No transaction object given!'); - - callback(error); - return Promise.reject(error); - } - - function signed (tx) { - - if (!tx.gas && !tx.gasLimit) { - error = new Error('"gas" is missing'); - } - - if (tx.nonce < 0 || - tx.gas < 0 || - tx.gasPrice < 0 || - tx.chainId < 0) { - error = new Error('Gas, gasPrice, nonce or chainId is lower than 0'); - } - - if (error) { - callback(error); - return Promise.reject(error); - } - - try { - tx = helpers.formatters.inputCallFormatter(tx); - - var transaction = tx; - transaction.to = tx.to || '0x'; - transaction.data = tx.data || '0x'; - transaction.value = tx.value || '0x'; - transaction.chainId = utils.numberToHex(tx.chainId); - - var rlpEncoded = RLP.encode([ - Bytes.fromNat(transaction.nonce), - Bytes.fromNat(transaction.gasPrice), - Bytes.fromNat(transaction.gas), - transaction.to.toLowerCase(), - Bytes.fromNat(transaction.value), - transaction.data, - Bytes.fromNat(transaction.chainId || "0x1"), - "0x", - "0x"]); - - - var hash = Hash.keccak256(rlpEncoded); - - var signature = Account.makeSigner(Nat.toNumber(transaction.chainId || "0x1") * 2 + 35)(Hash.keccak256(rlpEncoded), privateKey); - - var rawTx = RLP.decode(rlpEncoded).slice(0, 6).concat(Account.decodeSignature(signature)); - - rawTx[6] = makeEven(trimLeadingZero(rawTx[6])); - rawTx[7] = makeEven(trimLeadingZero(rawTx[7])); - rawTx[8] = makeEven(trimLeadingZero(rawTx[8])); - - var rawTransaction = RLP.encode(rawTx); - - var values = RLP.decode(rawTransaction); - result = { - messageHash: hash, - v: trimLeadingZero(values[6]), - r: trimLeadingZero(values[7]), - s: trimLeadingZero(values[8]), - rawTransaction: rawTransaction - }; - - } catch(e) { - callback(e); - return Promise.reject(e); - } - - callback(null, result); - return result; - } - - // Resolve immediately if nonce, chainId and price are provided - if (tx.nonce !== undefined && tx.chainId !== undefined && tx.gasPrice !== undefined) { - return Promise.resolve(signed(tx)); - } - - - // Otherwise, get the missing info from the Ethereum Node - return Promise.all([ - isNot(tx.chainId) ? _this._ethereumCall.getId() : tx.chainId, - isNot(tx.gasPrice) ? _this._ethereumCall.getGasPrice() : tx.gasPrice, - isNot(tx.nonce) ? _this._ethereumCall.getTransactionCount(_this.privateKeyToAccount(privateKey).address) : tx.nonce - ]).then(function (args) { - if (isNot(args[0]) || isNot(args[1]) || isNot(args[2])) { - throw new Error('One of the values "chainId", "gasPrice", or "nonce" couldn\'t be fetched: '+ JSON.stringify(args)); - } - return signed(_.extend(tx, {chainId: args[0], gasPrice: args[1], nonce: args[2]})); - }); -}; - -/* jshint ignore:start */ -Accounts.prototype.recoverTransaction = function recoverTransaction(rawTx) { - var values = RLP.decode(rawTx); - var signature = Account.encodeSignature(values.slice(6,9)); - var recovery = Bytes.toNumber(values[6]); - var extraData = recovery < 35 ? [] : [Bytes.fromNumber((recovery - 35) >> 1), "0x", "0x"]; - var signingData = values.slice(0,6).concat(extraData); - var signingDataHex = RLP.encode(signingData); - return Account.recover(Hash.keccak256(signingDataHex), signature); -}; -/* jshint ignore:end */ - -Accounts.prototype.hashMessage = function hashMessage(data) { - var message = utils.isHexStrict(data) ? utils.hexToBytes(data) : data; - var messageBuffer = Buffer.from(message); - var preamble = "\x19Ethereum Signed Message:\n" + message.length; - var preambleBuffer = Buffer.from(preamble); - var ethMessage = Buffer.concat([preambleBuffer, messageBuffer]); - return Hash.keccak256s(ethMessage); -}; - -Accounts.prototype.sign = function sign(data, privateKey) { - var hash = this.hashMessage(data); - var signature = Account.sign(hash, privateKey); - var vrs = Account.decodeSignature(signature); - return { - message: data, - messageHash: hash, - v: vrs[0], - r: vrs[1], - s: vrs[2], - signature: signature - }; -}; - -Accounts.prototype.recover = function recover(message, signature, preFixed) { - var args = [].slice.apply(arguments); - - - if (_.isObject(message)) { - return this.recover(message.messageHash, Account.encodeSignature([message.v, message.r, message.s]), true); - } - - if (!preFixed) { - message = this.hashMessage(message); - } - - if (args.length >= 4) { - preFixed = args.slice(-1)[0]; - preFixed = _.isBoolean(preFixed) ? !!preFixed : false; - - return this.recover(message, Account.encodeSignature(args.slice(1, 4)), preFixed); // v, r, s - } - return Account.recover(message, signature); -}; - -// Taken from https://github.com/ethereumjs/ethereumjs-wallet -Accounts.prototype.decrypt = function (v3Keystore, password, nonStrict) { - /* jshint maxcomplexity: 10 */ - - if(!_.isString(password)) { - throw new Error('No password given.'); - } - - var json = (_.isObject(v3Keystore)) ? v3Keystore : JSON.parse(nonStrict ? v3Keystore.toLowerCase() : v3Keystore); - - if (json.version !== 3) { - throw new Error('Not a valid V3 wallet'); - } - - var derivedKey; - var kdfparams; - if (json.crypto.kdf === 'scrypt') { - kdfparams = json.crypto.kdfparams; - - // FIXME: support progress reporting callback - derivedKey = scryptsy(new Buffer(password), new Buffer(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen); - } else if (json.crypto.kdf === 'pbkdf2') { - kdfparams = json.crypto.kdfparams; - - if (kdfparams.prf !== 'hmac-sha256') { - throw new Error('Unsupported parameters to PBKDF2'); - } - - derivedKey = cryp.pbkdf2Sync(new Buffer(password), new Buffer(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256'); - } else { - throw new Error('Unsupported key derivation scheme'); - } - - var ciphertext = new Buffer(json.crypto.ciphertext, 'hex'); - - var mac = utils.sha3(Buffer.concat([ derivedKey.slice(16, 32), ciphertext ])).replace('0x',''); - if (mac !== json.crypto.mac) { - throw new Error('Key derivation failed - possibly wrong password'); - } - - var decipher = cryp.createDecipheriv(json.crypto.cipher, derivedKey.slice(0, 16), new Buffer(json.crypto.cipherparams.iv, 'hex')); - var seed = '0x'+ Buffer.concat([ decipher.update(ciphertext), decipher.final() ]).toString('hex'); - - return this.privateKeyToAccount(seed); -}; - -Accounts.prototype.encrypt = function (privateKey, password, options) { - /* jshint maxcomplexity: 20 */ - var account = this.privateKeyToAccount(privateKey); - - options = options || {}; - var salt = options.salt || cryp.randomBytes(32); - var iv = options.iv || cryp.randomBytes(16); - - var derivedKey; - var kdf = options.kdf || 'scrypt'; - var kdfparams = { - dklen: options.dklen || 32, - salt: salt.toString('hex') - }; - - if (kdf === 'pbkdf2') { - kdfparams.c = options.c || 262144; - kdfparams.prf = 'hmac-sha256'; - derivedKey = cryp.pbkdf2Sync(new Buffer(password), salt, kdfparams.c, kdfparams.dklen, 'sha256'); - } else if (kdf === 'scrypt') { - // FIXME: support progress reporting callback - kdfparams.n = options.n || 8192; // 2048 4096 8192 16384 - kdfparams.r = options.r || 8; - kdfparams.p = options.p || 1; - derivedKey = scryptsy(new Buffer(password), salt, kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen); - } else { - throw new Error('Unsupported kdf'); - } - - var cipher = cryp.createCipheriv(options.cipher || 'aes-128-ctr', derivedKey.slice(0, 16), iv); - if (!cipher) { - throw new Error('Unsupported cipher'); - } - - var ciphertext = Buffer.concat([ cipher.update(new Buffer(account.privateKey.replace('0x',''), 'hex')), cipher.final() ]); - - var mac = utils.sha3(Buffer.concat([ derivedKey.slice(16, 32), new Buffer(ciphertext, 'hex') ])).replace('0x',''); - - return { - version: 3, - id: uuid.v4({ random: options.uuid || cryp.randomBytes(16) }), - address: account.address.toLowerCase().replace('0x',''), - crypto: { - ciphertext: ciphertext.toString('hex'), - cipherparams: { - iv: iv.toString('hex') - }, - cipher: options.cipher || 'aes-128-ctr', - kdf: kdf, - kdfparams: kdfparams, - mac: mac.toString('hex') - } - }; -}; - - -// Note: this is trying to follow closely the specs on -// http://web3js.readthedocs.io/en/1.0/web3-eth-accounts.html - -function Wallet(accounts) { - this._accounts = accounts; - this.length = 0; - this.defaultKeyName = "web3js_wallet"; -} - -Wallet.prototype._findSafeIndex = function (pointer) { - pointer = pointer || 0; - if (_.has(this, pointer)) { - return this._findSafeIndex(pointer + 1); - } else { - return pointer; - } -}; - -Wallet.prototype._currentIndexes = function () { - var keys = Object.keys(this); - var indexes = keys - .map(function(key) { return parseInt(key); }) - .filter(function(n) { return (n < 9e20); }); - - return indexes; -}; - -Wallet.prototype.create = function (numberOfAccounts, entropy) { - for (var i = 0; i < numberOfAccounts; ++i) { - this.add(this._accounts.create(entropy).privateKey); - } - return this; -}; - -Wallet.prototype.add = function (account) { - - if (_.isString(account)) { - account = this._accounts.privateKeyToAccount(account); - } - if (!this[account.address]) { - account = this._accounts.privateKeyToAccount(account.privateKey); - account.index = this._findSafeIndex(); - - this[account.index] = account; - this[account.address] = account; - this[account.address.toLowerCase()] = account; - - this.length++; - - return account; - } else { - return this[account.address]; - } -}; - -Wallet.prototype.remove = function (addressOrIndex) { - var account = this[addressOrIndex]; - - if (account && account.address) { - // address - this[account.address].privateKey = null; - delete this[account.address]; - // address lowercase - this[account.address.toLowerCase()].privateKey = null; - delete this[account.address.toLowerCase()]; - // index - this[account.index].privateKey = null; - delete this[account.index]; - - this.length--; - - return true; - } else { - return false; - } -}; - -Wallet.prototype.clear = function () { - var _this = this; - var indexes = this._currentIndexes(); - - indexes.forEach(function(index) { - _this.remove(index); - }); - - return this; -}; - -Wallet.prototype.encrypt = function (password, options) { - var _this = this; - var indexes = this._currentIndexes(); - - var accounts = indexes.map(function(index) { - return _this[index].encrypt(password, options); - }); - - return accounts; -}; - - -Wallet.prototype.decrypt = function (encryptedWallet, password) { - var _this = this; - - encryptedWallet.forEach(function (keystore) { - var account = _this._accounts.decrypt(keystore, password); - - if (account) { - _this.add(account); - } else { - throw new Error('Couldn\'t decrypt accounts. Password wrong?'); - } - }); - - return this; -}; - -Wallet.prototype.save = function (password, keyName) { - localStorage.setItem(keyName || this.defaultKeyName, JSON.stringify(this.encrypt(password))); - - return true; -}; - -Wallet.prototype.load = function (password, keyName) { - var keystore = localStorage.getItem(keyName || this.defaultKeyName); - - if (keystore) { - try { - keystore = JSON.parse(keystore); - } catch(e) { - - } - } - - return this.decrypt(keystore || [], password); -}; - -if (typeof localStorage === 'undefined') { - delete Wallet.prototype.save; - delete Wallet.prototype.load; -} - - -module.exports = Accounts; diff --git a/truebit-implementation/node_modules/web3-eth-contract/README.md b/truebit-implementation/node_modules/web3-eth-contract/README.md deleted file mode 100644 index f32b9a1a..00000000 --- a/truebit-implementation/node_modules/web3-eth-contract/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# web3-eth-contract - -This is a sub package of [web3.js][repo] - -This is the contract package to be used in the `web3-eth` package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-eth-contract -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-eth-contract.js` in your html file. -This will expose the `Web3EthContract` object on the window object. - - -## Usage - -```js -// in node.js -var Web3EthContract = require('web3-eth-contract'); - -// set provider for all later instances to use -Web3EthContract.setProvider('ws://localhost:8546'); - -var contract = new Web3EthContract(jsonInterface, address); -contract.methods.somFunc().send({from: ....}) -.on('receipt', function(){ - ... -}); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-eth-contract/package.json b/truebit-implementation/node_modules/web3-eth-contract/package.json deleted file mode 100644 index bd97ee67..00000000 --- a/truebit-implementation/node_modules/web3-eth-contract/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "_from": "web3-eth-contract@1.0.0-beta.36", - "_id": "web3-eth-contract@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-cywqcIrUsCW4fyqsHdOb24OCC8AnBol8kNiptI+IHRylyCjTNgr53bUbjrXWjmEnear90rO0QhAVjLB1a4iEbQ==", - "_location": "/web3-eth-contract", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-eth-contract@1.0.0-beta.36", - "name": "web3-eth-contract", - "escapedName": "web3-eth-contract", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-eth", - "/web3-eth-ens" - ], - "_resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.36.tgz", - "_shasum": "c0c366c4e4016896142208cee758a2ff2a31be2a", - "_spec": "web3-eth-contract@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth", - "bundleDependencies": false, - "dependencies": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module to interact with Ethereum smart contracts.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-eth-contract", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-eth-contract" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-eth-contract/src/index.js b/truebit-implementation/node_modules/web3-eth-contract/src/index.js deleted file mode 100644 index c0d7e3d8..00000000 --- a/truebit-implementation/node_modules/web3-eth-contract/src/index.js +++ /dev/null @@ -1,905 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file contract.js - * - * To initialize a contract use: - * - * var Contract = require('web3-eth-contract'); - * Contract.setProvider('ws://localhost:8546'); - * var contract = new Contract(abi, address, ...); - * - * @author Fabian Vogelsteller - * @date 2017 - */ - - -"use strict"; - - -var _ = require('underscore'); -var core = require('web3-core'); -var Method = require('web3-core-method'); -var utils = require('web3-utils'); -var Subscription = require('web3-core-subscriptions').subscription; -var formatters = require('web3-core-helpers').formatters; -var errors = require('web3-core-helpers').errors; -var promiEvent = require('web3-core-promievent'); -var abi = require('web3-eth-abi'); - - -/** - * Should be called to create new contract instance - * - * @method Contract - * @constructor - * @param {Array} jsonInterface - * @param {String} address - * @param {Object} options - */ -var Contract = function Contract(jsonInterface, address, options) { - var _this = this, - args = Array.prototype.slice.call(arguments); - - if(!(this instanceof Contract)) { - throw new Error('Please use the "new" keyword to instantiate a web3.eth.contract() object!'); - } - - // sets _requestmanager - core.packageInit(this, [this.constructor.currentProvider]); - - this.clearSubscriptions = this._requestManager.clearSubscriptions; - - - - if(!jsonInterface || !(Array.isArray(jsonInterface))) { - throw new Error('You must provide the json interface of the contract when instantiating a contract object.'); - } - - - - // create the options object - this.options = {}; - - var lastArg = args[args.length - 1]; - if(_.isObject(lastArg) && !_.isArray(lastArg)) { - options = lastArg; - - this.options = _.extend(this.options, this._getOrSetDefaultOptions(options)); - if(_.isObject(address)) { - address = null; - } - } - - // set address - Object.defineProperty(this.options, 'address', { - set: function(value){ - if(value) { - _this._address = utils.toChecksumAddress(formatters.inputAddressFormatter(value)); - } - }, - get: function(){ - return _this._address; - }, - enumerable: true - }); - - // add method and event signatures, when the jsonInterface gets set - Object.defineProperty(this.options, 'jsonInterface', { - set: function(value){ - _this.methods = {}; - _this.events = {}; - - _this._jsonInterface = value.map(function(method) { - var func, - funcName; - - // make constant and payable backwards compatible - method.constant = (method.stateMutability === "view" || method.stateMutability === "pure" || method.constant); - method.payable = (method.stateMutability === "payable" || method.payable); - - - if (method.name) { - funcName = utils._jsonInterfaceMethodToString(method); - } - - - // function - if (method.type === 'function') { - method.signature = abi.encodeFunctionSignature(funcName); - func = _this._createTxObject.bind({ - method: method, - parent: _this - }); - - - // add method only if not one already exists - if(!_this.methods[method.name]) { - _this.methods[method.name] = func; - } else { - var cascadeFunc = _this._createTxObject.bind({ - method: method, - parent: _this, - nextMethod: _this.methods[method.name] - }); - _this.methods[method.name] = cascadeFunc; - } - - // definitely add the method based on its signature - _this.methods[method.signature] = func; - - // add method by name - _this.methods[funcName] = func; - - - // event - } else if (method.type === 'event') { - method.signature = abi.encodeEventSignature(funcName); - var event = _this._on.bind(_this, method.signature); - - // add method only if not already exists - if(!_this.events[method.name] || _this.events[method.name].name === 'bound ') - _this.events[method.name] = event; - - // definitely add the method based on its signature - _this.events[method.signature] = event; - - // add event by name - _this.events[funcName] = event; - } - - - return method; - }); - - // add allEvents - _this.events.allEvents = _this._on.bind(_this, 'allevents'); - - return _this._jsonInterface; - }, - get: function(){ - return _this._jsonInterface; - }, - enumerable: true - }); - - // get default account from the Class - var defaultAccount = this.constructor.defaultAccount; - var defaultBlock = this.constructor.defaultBlock || 'latest'; - - Object.defineProperty(this, 'defaultAccount', { - get: function () { - return defaultAccount; - }, - set: function (val) { - if(val) { - defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val)); - } - - return val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultBlock', { - get: function () { - return defaultBlock; - }, - set: function (val) { - defaultBlock = val; - - return val; - }, - enumerable: true - }); - - // properties - this.methods = {}; - this.events = {}; - - this._address = null; - this._jsonInterface = []; - - // set getter/setter properties - this.options.address = address; - this.options.jsonInterface = jsonInterface; - -}; - -Contract.setProvider = function(provider, accounts) { - // Contract.currentProvider = provider; - core.packageInit(this, [provider]); - - this._ethAccounts = accounts; -}; - - -/** - * Get the callback and modiufy the array if necessary - * - * @method _getCallback - * @param {Array} args - * @return {Function} the callback - */ -Contract.prototype._getCallback = function getCallback(args) { - if (args && _.isFunction(args[args.length - 1])) { - return args.pop(); // modify the args array! - } -}; - -/** - * Checks that no listener with name "newListener" or "removeListener" is added. - * - * @method _checkListener - * @param {String} type - * @param {String} event - * @return {Object} the contract instance - */ -Contract.prototype._checkListener = function(type, event){ - if(event === type) { - throw new Error('The event "'+ type +'" is a reserved event name, you can\'t use it.'); - } -}; - - -/** - * Use default values, if options are not available - * - * @method _getOrSetDefaultOptions - * @param {Object} options the options gived by the user - * @return {Object} the options with gaps filled by defaults - */ -Contract.prototype._getOrSetDefaultOptions = function getOrSetDefaultOptions(options) { - var gasPrice = options.gasPrice ? String(options.gasPrice): null; - var from = options.from ? utils.toChecksumAddress(formatters.inputAddressFormatter(options.from)) : null; - - options.data = options.data || this.options.data; - - options.from = from || this.options.from; - options.gasPrice = gasPrice || this.options.gasPrice; - options.gas = options.gas || options.gasLimit || this.options.gas; - - // TODO replace with only gasLimit? - delete options.gasLimit; - - return options; -}; - - -/** - * Should be used to encode indexed params and options to one final object - * - * @method _encodeEventABI - * @param {Object} event - * @param {Object} options - * @return {Object} everything combined together and encoded - */ -Contract.prototype._encodeEventABI = function (event, options) { - options = options || {}; - var filter = options.filter || {}, - result = {}; - - ['fromBlock', 'toBlock'].filter(function (f) { - return options[f] !== undefined; - }).forEach(function (f) { - result[f] = formatters.inputBlockNumberFormatter(options[f]); - }); - - // use given topics - if(_.isArray(options.topics)) { - result.topics = options.topics; - - // create topics based on filter - } else { - - result.topics = []; - - // add event signature - if (event && !event.anonymous && event.name !== 'ALLEVENTS') { - result.topics.push(event.signature); - } - - // add event topics (indexed arguments) - if (event.name !== 'ALLEVENTS') { - var indexedTopics = event.inputs.filter(function (i) { - return i.indexed === true; - }).map(function (i) { - var value = filter[i.name]; - if (!value) { - return null; - } - - // TODO: https://github.com/ethereum/web3.js/issues/344 - // TODO: deal properly with components - - if (_.isArray(value)) { - return value.map(function (v) { - return abi.encodeParameter(i.type, v); - }); - } - return abi.encodeParameter(i.type, value); - }); - - result.topics = result.topics.concat(indexedTopics); - } - - if(!result.topics.length) - delete result.topics; - } - - if(this.options.address) { - result.address = this.options.address.toLowerCase(); - } - - return result; -}; - -/** - * Should be used to decode indexed params and options - * - * @method _decodeEventABI - * @param {Object} data - * @return {Object} result object with decoded indexed && not indexed params - */ -Contract.prototype._decodeEventABI = function (data) { - var event = this; - - data.data = data.data || ''; - data.topics = data.topics || []; - var result = formatters.outputLogFormatter(data); - - // if allEvents get the right event - if(event.name === 'ALLEVENTS') { - event = event.jsonInterface.find(function (intf) { - return (intf.signature === data.topics[0]); - }) || {anonymous: true}; - } - - // create empty inputs if none are present (e.g. anonymous events on allEvents) - event.inputs = event.inputs || []; - - - var argTopics = event.anonymous ? data.topics : data.topics.slice(1); - - result.returnValues = abi.decodeLog(event.inputs, data.data, argTopics); - delete result.returnValues.__length__; - - // add name - result.event = event.name; - - // add signature - result.signature = (event.anonymous || !data.topics[0]) ? null : data.topics[0]; - - // move the data and topics to "raw" - result.raw = { - data: result.data, - topics: result.topics - }; - delete result.data; - delete result.topics; - - - return result; -}; - -/** - * Encodes an ABI for a method, including signature or the method. - * Or when constructor encodes only the constructor parameters. - * - * @method _encodeMethodABI - * @param {Mixed} args the arguments to encode - * @param {String} the encoded ABI - */ -Contract.prototype._encodeMethodABI = function _encodeMethodABI() { - var methodSignature = this._method.signature, - args = this.arguments || []; - - var signature = false, - paramsABI = this._parent.options.jsonInterface.filter(function (json) { - return ((methodSignature === 'constructor' && json.type === methodSignature) || - ((json.signature === methodSignature || json.signature === methodSignature.replace('0x','') || json.name === methodSignature) && json.type === 'function')); - }).map(function (json) { - var inputLength = (_.isArray(json.inputs)) ? json.inputs.length : 0; - - if (inputLength !== args.length) { - throw new Error('The number of arguments is not matching the methods required number. You need to pass '+ inputLength +' arguments.'); - } - - if (json.type === 'function') { - signature = json.signature; - } - return _.isArray(json.inputs) ? json.inputs : []; - }).map(function (inputs) { - return abi.encodeParameters(inputs, args).replace('0x',''); - })[0] || ''; - - // return constructor - if(methodSignature === 'constructor') { - if(!this._deployData) - throw new Error('The contract has no contract data option set. This is necessary to append the constructor parameters.'); - - return this._deployData + paramsABI; - - // return method - } else { - - var returnValue = (signature) ? signature + paramsABI : paramsABI; - - if(!returnValue) { - throw new Error('Couldn\'t find a matching contract method named "'+ this._method.name +'".'); - } else { - return returnValue; - } - } - -}; - - -/** - * Decode method return values - * - * @method _decodeMethodReturn - * @param {Array} outputs - * @param {String} returnValues - * @return {Object} decoded output return values - */ -Contract.prototype._decodeMethodReturn = function (outputs, returnValues) { - if (!returnValues) { - return null; - } - - returnValues = returnValues.length >= 2 ? returnValues.slice(2) : returnValues; - var result = abi.decodeParameters(outputs, returnValues); - - if (result.__length__ === 1) { - return result[0]; - } else { - delete result.__length__; - return result; - } -}; - - -/** - * Deploys a contract and fire events based on its state: transactionHash, receipt - * - * All event listeners will be removed, once the last possible event is fired ("error", or "receipt") - * - * @method deploy - * @param {Object} options - * @param {Function} callback - * @return {Object} EventEmitter possible events are "error", "transactionHash" and "receipt" - */ -Contract.prototype.deploy = function(options, callback){ - - options = options || {}; - - options.arguments = options.arguments || []; - options = this._getOrSetDefaultOptions(options); - - - // return error, if no "data" is specified - if(!options.data) { - return utils._fireError(new Error('No "data" specified in neither the given options, nor the default options.'), null, null, callback); - } - - var constructor = _.find(this.options.jsonInterface, function (method) { - return (method.type === 'constructor'); - }) || {}; - constructor.signature = 'constructor'; - - return this._createTxObject.apply({ - method: constructor, - parent: this, - deployData: options.data, - _ethAccounts: this.constructor._ethAccounts - }, options.arguments); - -}; - -/** - * Gets the event signature and outputformatters - * - * @method _generateEventOptions - * @param {Object} event - * @param {Object} options - * @param {Function} callback - * @return {Object} the event options object - */ -Contract.prototype._generateEventOptions = function() { - var args = Array.prototype.slice.call(arguments); - - // get the callback - var callback = this._getCallback(args); - - // get the options - var options = (_.isObject(args[args.length - 1])) ? args.pop() : {}; - - var event = (_.isString(args[0])) ? args[0] : 'allevents'; - event = (event.toLowerCase() === 'allevents') ? { - name: 'ALLEVENTS', - jsonInterface: this.options.jsonInterface - } : this.options.jsonInterface.find(function (json) { - return (json.type === 'event' && (json.name === event || json.signature === '0x'+ event.replace('0x',''))); - }); - - if (!event) { - throw new Error('Event "' + event.name + '" doesn\'t exist in this contract.'); - } - - if (!utils.isAddress(this.options.address)) { - throw new Error('This contract object doesn\'t have address set yet, please set an address first.'); - } - - return { - params: this._encodeEventABI(event, options), - event: event, - callback: callback - }; -}; - -/** - * Adds event listeners and creates a subscription, and remove it once its fired. - * - * @method clone - * @return {Object} the event subscription - */ -Contract.prototype.clone = function() { - return new this.constructor(this.options.jsonInterface, this.options.address, this.options); -}; - - -/** - * Adds event listeners and creates a subscription, and remove it once its fired. - * - * @method once - * @param {String} event - * @param {Object} options - * @param {Function} callback - * @return {Object} the event subscription - */ -Contract.prototype.once = function(event, options, callback) { - var args = Array.prototype.slice.call(arguments); - - // get the callback - callback = this._getCallback(args); - - if (!callback) { - throw new Error('Once requires a callback as the second parameter.'); - } - - // don't allow fromBlock - if (options) - delete options.fromBlock; - - // don't return as once shouldn't provide "on" - this._on(event, options, function (err, res, sub) { - sub.unsubscribe(); - if(_.isFunction(callback)){ - callback(err, res, sub); - } - }); - - return undefined; -}; - -/** - * Adds event listeners and creates a subscription. - * - * @method _on - * @param {String} event - * @param {Object} options - * @param {Function} callback - * @return {Object} the event subscription - */ -Contract.prototype._on = function(){ - var subOptions = this._generateEventOptions.apply(this, arguments); - - - // prevent the event "newListener" and "removeListener" from being overwritten - this._checkListener('newListener', subOptions.event.name, subOptions.callback); - this._checkListener('removeListener', subOptions.event.name, subOptions.callback); - - // TODO check if listener already exists? and reuse subscription if options are the same. - - // create new subscription - var subscription = new Subscription({ - subscription: { - params: 1, - inputFormatter: [formatters.inputLogFormatter], - outputFormatter: this._decodeEventABI.bind(subOptions.event), - // DUBLICATE, also in web3-eth - subscriptionHandler: function (output) { - if(output.removed) { - this.emit('changed', output); - } else { - this.emit('data', output); - } - - if (_.isFunction(this.callback)) { - this.callback(null, output, this); - } - } - }, - type: 'eth', - requestManager: this._requestManager - }); - subscription.subscribe('logs', subOptions.params, subOptions.callback || function () {}); - - return subscription; -}; - -/** - * Get past events from contracts - * - * @method getPastEvents - * @param {String} event - * @param {Object} options - * @param {Function} callback - * @return {Object} the promievent - */ -Contract.prototype.getPastEvents = function(){ - var subOptions = this._generateEventOptions.apply(this, arguments); - - var getPastLogs = new Method({ - name: 'getPastLogs', - call: 'eth_getLogs', - params: 1, - inputFormatter: [formatters.inputLogFormatter], - outputFormatter: this._decodeEventABI.bind(subOptions.event) - }); - getPastLogs.setRequestManager(this._requestManager); - var call = getPastLogs.buildCall(); - - getPastLogs = null; - - return call(subOptions.params, subOptions.callback); -}; - - -/** - * returns the an object with call, send, estimate functions - * - * @method _createTxObject - * @returns {Object} an object with functions to call the methods - */ -Contract.prototype._createTxObject = function _createTxObject(){ - var args = Array.prototype.slice.call(arguments); - var txObject = {}; - - if(this.method.type === 'function') { - - txObject.call = this.parent._executeMethod.bind(txObject, 'call'); - txObject.call.request = this.parent._executeMethod.bind(txObject, 'call', true); // to make batch requests - - } - - txObject.send = this.parent._executeMethod.bind(txObject, 'send'); - txObject.send.request = this.parent._executeMethod.bind(txObject, 'send', true); // to make batch requests - txObject.encodeABI = this.parent._encodeMethodABI.bind(txObject); - txObject.estimateGas = this.parent._executeMethod.bind(txObject, 'estimate'); - - if (args && this.method.inputs && args.length !== this.method.inputs.length) { - if (this.nextMethod) { - return this.nextMethod.apply(null, args); - } - throw errors.InvalidNumberOfParams(args.length, this.method.inputs.length, this.method.name); - } - - txObject.arguments = args || []; - txObject._method = this.method; - txObject._parent = this.parent; - txObject._ethAccounts = this.parent.constructor._ethAccounts || this._ethAccounts; - - if(this.deployData) { - txObject._deployData = this.deployData; - } - - return txObject; -}; - - -/** - * Generates the options for the execute call - * - * @method _processExecuteArguments - * @param {Array} args - * @param {Promise} defer - */ -Contract.prototype._processExecuteArguments = function _processExecuteArguments(args, defer) { - var processedArgs = {}; - - processedArgs.type = args.shift(); - - // get the callback - processedArgs.callback = this._parent._getCallback(args); - - // get block number to use for call - if(processedArgs.type === 'call' && args[args.length - 1] !== true && (_.isString(args[args.length - 1]) || isFinite(args[args.length - 1]))) - processedArgs.defaultBlock = args.pop(); - - // get the options - processedArgs.options = (_.isObject(args[args.length - 1])) ? args.pop() : {}; - - // get the generateRequest argument for batch requests - processedArgs.generateRequest = (args[args.length - 1] === true)? args.pop() : false; - - processedArgs.options = this._parent._getOrSetDefaultOptions(processedArgs.options); - processedArgs.options.data = this.encodeABI(); - - // add contract address - if(!this._deployData && !utils.isAddress(this._parent.options.address)) - throw new Error('This contract object doesn\'t have address set yet, please set an address first.'); - - if(!this._deployData) - processedArgs.options.to = this._parent.options.address; - - // return error, if no "data" is specified - if(!processedArgs.options.data) - return utils._fireError(new Error('Couldn\'t find a matching contract method, or the number of parameters is wrong.'), defer.eventEmitter, defer.reject, processedArgs.callback); - - return processedArgs; -}; - -/** - * Executes a call, transact or estimateGas on a contract function - * - * @method _executeMethod - * @param {String} type the type this execute function should execute - * @param {Boolean} makeRequest if true, it simply returns the request parameters, rather than executing it - */ -Contract.prototype._executeMethod = function _executeMethod(){ - var _this = this, - args = this._parent._processExecuteArguments.call(this, Array.prototype.slice.call(arguments), defer), - defer = promiEvent((args.type !== 'send')), - ethAccounts = _this.constructor._ethAccounts || _this._ethAccounts; - - // simple return request for batch requests - if(args.generateRequest) { - - var payload = { - params: [formatters.inputCallFormatter.call(this._parent, args.options)], - callback: args.callback - }; - - if(args.type === 'call') { - payload.params.push(formatters.inputDefaultBlockNumberFormatter.call(this._parent, args.defaultBlock)); - payload.method = 'eth_call'; - payload.format = this._parent._decodeMethodReturn.bind(null, this._method.outputs); - } else { - payload.method = 'eth_sendTransaction'; - } - - return payload; - - } else { - - switch (args.type) { - case 'estimate': - - var estimateGas = (new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatters.inputCallFormatter], - outputFormatter: utils.hexToNumber, - requestManager: _this._parent._requestManager, - accounts: ethAccounts, // is eth.accounts (necessary for wallet signing) - defaultAccount: _this._parent.defaultAccount, - defaultBlock: _this._parent.defaultBlock - })).createFunction(); - - return estimateGas(args.options, args.callback); - - case 'call': - - // TODO check errors: missing "from" should give error on deploy and send, call ? - - var call = (new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter], - // add output formatter for decoding - outputFormatter: function (result) { - return _this._parent._decodeMethodReturn(_this._method.outputs, result); - }, - requestManager: _this._parent._requestManager, - accounts: ethAccounts, // is eth.accounts (necessary for wallet signing) - defaultAccount: _this._parent.defaultAccount, - defaultBlock: _this._parent.defaultBlock - })).createFunction(); - - return call(args.options, args.defaultBlock, args.callback); - - case 'send': - - // return error, if no "from" is specified - if(!utils.isAddress(args.options.from)) { - return utils._fireError(new Error('No "from" address specified in neither the given options, nor the default options.'), defer.eventEmitter, defer.reject, args.callback); - } - - if (_.isBoolean(this._method.payable) && !this._method.payable && args.options.value && args.options.value > 0) { - return utils._fireError(new Error('Can not send value to non-payable contract method or constructor'), defer.eventEmitter, defer.reject, args.callback); - } - - - // make sure receipt logs are decoded - var extraFormatters = { - receiptFormatter: function (receipt) { - if (_.isArray(receipt.logs)) { - - // decode logs - var events = _.map(receipt.logs, function(log) { - return _this._parent._decodeEventABI.call({ - name: 'ALLEVENTS', - jsonInterface: _this._parent.options.jsonInterface - }, log); - }); - - // make log names keys - receipt.events = {}; - var count = 0; - events.forEach(function (ev) { - if (ev.event) { - // if > 1 of the same event, don't overwrite any existing events - if (receipt.events[ev.event]) { - if (Array.isArray(receipt.events[ ev.event ])) { - receipt.events[ ev.event ].push(ev); - } else { - receipt.events[ev.event] = [receipt.events[ev.event], ev]; - } - } else { - receipt.events[ ev.event ] = ev; - } - } else { - receipt.events[count] = ev; - count++; - } - }); - - delete receipt.logs; - } - return receipt; - }, - contractDeployFormatter: function (receipt) { - var newContract = _this._parent.clone(); - newContract.options.address = receipt.contractAddress; - return newContract; - } - }; - - var sendTransaction = (new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatters.inputTransactionFormatter], - requestManager: _this._parent._requestManager, - accounts: _this.constructor._ethAccounts || _this._ethAccounts, // is eth.accounts (necessary for wallet signing) - defaultAccount: _this._parent.defaultAccount, - defaultBlock: _this._parent.defaultBlock, - extraFormatters: extraFormatters - })).createFunction(); - - return sendTransaction(args.options, args.callback); - - } - - } - -}; - -module.exports = Contract; diff --git a/truebit-implementation/node_modules/web3-eth-ens/README.md b/truebit-implementation/node_modules/web3-eth-ens/README.md deleted file mode 100644 index cf4ab13f..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# web3-eth-ens - -This is a sub package of [web3.js][repo] - -This is the contract package to be used in the `web3-eth` package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-eth-ens -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-eth-ens.js` and `dist/web3-eth.js` in your html file. -This will expose the `EthEns` object on the window object. - -## Usage - -```js - var eth = new Web3Eth(web3.currentProvider); - var ens = new EthEns(eth); - - ens.getAddress('ethereum.eth').then(function (result) { - console.log(result); - }); -``` - - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-eth-ens/package.json b/truebit-implementation/node_modules/web3-eth-ens/package.json deleted file mode 100644 index 4e26a9fb..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "_from": "web3-eth-ens@1.0.0-beta.36", - "_id": "web3-eth-ens@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-8ZdD7XoJfSX3jNlZHSLe4G837xQ0v5a8cHCcDcd1IoqoY855X9SrIQ0Xdqia9p4mR1YcH1vgmkXY9/3hsvxS7g==", - "_location": "/web3-eth-ens", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-eth-ens@1.0.0-beta.36", - "name": "web3-eth-ens", - "escapedName": "web3-eth-ens", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-eth" - ], - "_resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.36.tgz", - "_shasum": "c7440b42b597fd74f64bc402f03ad2e832f423d8", - "_spec": "web3-eth-ens@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth", - "bundleDependencies": false, - "dependencies": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-eth-contract": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "ENS support for web3.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-eth-ens", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-eth-ens" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-eth-ens/src/ENS.js b/truebit-implementation/node_modules/web3-eth-ens/src/ENS.js deleted file mode 100644 index 741eb5b2..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/src/ENS.js +++ /dev/null @@ -1,189 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file ENS.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var config = require('./config'); -var Registry = require('./contracts/Registry'); -var ResolverMethodHandler = require('./lib/ResolverMethodHandler'); - -/** - * Constructs a new instance of ENS - * - * @method ENS - * @param {Object} eth - * @constructor - */ -function ENS(eth) { - this.eth = eth; -} - -Object.defineProperty(ENS.prototype, 'registry', { - get: function () { - return new Registry(this); - }, - enumerable: true -}); - -Object.defineProperty(ENS.prototype, 'resolverMethodHandler', { - get: function () { - return new ResolverMethodHandler(this.registry); - }, - enumerable: true -}); - -/** - * @param {string} name - * @returns {Promise} - */ -ENS.prototype.resolver = function (name) { - return this.registry.resolver(name); -}; - -/** - * Returns the address record associated with a name. - * - * @method getAddress - * @param {string} name - * @param {function} callback - * @return {eventifiedPromise} - */ -ENS.prototype.getAddress = function (name, callback) { - return this.resolverMethodHandler.method(name, 'addr', []).call(callback); -}; - -/** - * Sets a new address - * - * @method setAddress - * @param {string} name - * @param {string} address - * @param {Object} sendOptions - * @param {function} callback - * @returns {eventifiedPromise} - */ -ENS.prototype.setAddress = function (name, address, sendOptions, callback) { - return this.resolverMethodHandler.method(name, 'setAddr', [address]).send(sendOptions, callback); -}; - -/** - * Returns the public key - * - * @method getPubkey - * @param {string} name - * @param {function} callback - * @returns {eventifiedPromise} - */ -ENS.prototype.getPubkey = function (name, callback) { - return this.resolverMethodHandler.method(name, 'pubkey', [], callback).call(callback); -}; - -/** - * Set the new public key - * - * @method setPubkey - * @param {string} name - * @param {string} x - * @param {string} y - * @param {Object} sendOptions - * @param {function} callback - * @returns {eventifiedPromise} - */ -ENS.prototype.setPubkey = function (name, x, y, sendOptions, callback) { - return this.resolverMethodHandler.method(name, 'setPubkey', [x, y]).send(sendOptions, callback); -}; - -/** - * Returns the content - * - * @method getContent - * @param {string} name - * @param {function} callback - * @returns {eventifiedPromise} - */ -ENS.prototype.getContent = function (name, callback) { - return this.resolverMethodHandler.method(name, 'content', []).call(callback); -}; - -/** - * Set the content - * - * @method setContent - * @param {string} name - * @param {string} hash - * @param {function} callback - * @param {Object} sendOptions - * @returns {eventifiedPromise} - */ -ENS.prototype.setContent = function (name, hash, sendOptions, callback) { - return this.resolverMethodHandler.method(name, 'setContent', [hash]).send(sendOptions, callback); -}; - -/** - * Get the multihash - * - * @method getMultihash - * @param {string} name - * @param {function} callback - * @returns {eventifiedPromise} - */ -ENS.prototype.getMultihash = function (name, callback) { - return this.resolverMethodHandler.method(name, 'multihash', []).call(callback); -}; - -/** - * Set the multihash - * - * @method setMultihash - * @param {string} name - * @param {string} hash - * @param {Object} sendOptions - * @param {function} callback - * @returns {eventifiedPromise} - */ -ENS.prototype.setMultihash = function (name, hash, sendOptions, callback) { - return this.resolverMethodHandler.method(name, 'multihash', [hash]).send(sendOptions, callback); -}; - -/** - * Checks if the current used network is synced and looks for ENS support there. - * Throws an error if not. - * - * @returns {Promise} - */ -ENS.prototype.checkNetwork = function () { - var self = this; - return self.eth.getBlock('latest').then(function (block) { - var headAge = new Date() / 1000 - block.timestamp; - if (headAge > 3600) { - throw new Error("Network not synced; last block was " + headAge + " seconds ago"); - } - return self.eth.net.getNetworkType(); - }).then(function (networkType) { - var addr = config.addresses[networkType]; - if (typeof addr === 'undefined') { - throw new Error("ENS is not supported on network " + networkType); - } - - return addr; - }); -}; - -module.exports = ENS; diff --git a/truebit-implementation/node_modules/web3-eth-ens/src/config.js b/truebit-implementation/node_modules/web3-eth-ens/src/config.js deleted file mode 100644 index 7656840b..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/src/config.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var config = { - addresses: { - main: "0x314159265dD8dbb310642f98f50C066173C1259b", - ropsten: "0x112234455c3a32fd11230c42e7bccd4a84e02010", - rinkeby: "0xe7410170f87102df0055eb195163a03b7f2bff4a" - }, -}; - -module.exports = config; diff --git a/truebit-implementation/node_modules/web3-eth-ens/src/contracts/Registry.js b/truebit-implementation/node_modules/web3-eth-ens/src/contracts/Registry.js deleted file mode 100644 index 783761f8..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/src/contracts/Registry.js +++ /dev/null @@ -1,100 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file Registry.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var _ = require('underscore'); -var Contract = require('web3-eth-contract'); -var namehash = require('eth-ens-namehash'); -var PromiEvent = require('web3-core-promievent'); -var REGISTRY_ABI = require('../ressources/ABI/Registry'); -var RESOLVER_ABI = require('../ressources/ABI/Resolver'); - - -/** - * A wrapper around the ENS registry contract. - * - * @method Registry - * @param {Ens} ens - * @constructor - */ -function Registry(ens) { - var self = this; - this.ens = ens; - this.contract = ens.checkNetwork().then(function (address) { - var contract = new Contract(REGISTRY_ABI, address); - contract.setProvider(self.ens.eth.currentProvider); - - return contract; - }); -} - -/** - * Returns the address of the owner of an ENS name. - * - * @method owner - * @param {string} name - * @param {function} callback - * @return {Promise} - */ -Registry.prototype.owner = function (name, callback) { - var promiEvent = new PromiEvent(true); - - this.contract.then(function (contract) { - contract.methods.owner(namehash.hash(name)).call() - .then(function (receipt) { - promiEvent.resolve(receipt); - - if (_.isFunction(callback)) { - callback(receipt); - } - }) - .catch(function (error) { - promiEvent.reject(error); - - if (_.isFunction(callback)) { - callback(error); - } - }); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Returns the resolver contract associated with a name. - * - * @method resolver - * @param {string} name - * @return {Promise} - */ -Registry.prototype.resolver = function (name) { - var self = this; - - return this.contract.then(function (contract) { - return contract.methods.resolver(namehash.hash(name)).call(); - }).then(function (address) { - var contract = new Contract(RESOLVER_ABI, address); - contract.setProvider(self.ens.eth.currentProvider); - return contract; - }); -}; - -module.exports = Registry; diff --git a/truebit-implementation/node_modules/web3-eth-ens/src/index.js b/truebit-implementation/node_modules/web3-eth-ens/src/index.js deleted file mode 100644 index cb39092a..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/src/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var ENS = require('./ENS'); - -module.exports = ENS; diff --git a/truebit-implementation/node_modules/web3-eth-ens/src/lib/ResolverMethodHandler.js b/truebit-implementation/node_modules/web3-eth-ens/src/lib/ResolverMethodHandler.js deleted file mode 100644 index 39ee146d..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/src/lib/ResolverMethodHandler.js +++ /dev/null @@ -1,189 +0,0 @@ -/* - This file is part of web3.js. - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file ResolverMethodHandler.js - * - * @author Samuel Furter - * @date 2018 - */ - -"use strict"; - -var PromiEvent = require('web3-core-promievent'); -var namehash = require('eth-ens-namehash'); -var _ = require('underscore'); - -/** - * @param {Registry} registry - * @constructor - */ -function ResolverMethodHandler(registry) { - this.registry = registry; -} - -/** - * Executes an resolver method and returns an eventifiedPromise - * - * @param {string} ensName - * @param {string} methodName - * @param {array} methodArguments - * @param {function} callback - * @returns {Object} - */ -ResolverMethodHandler.prototype.method = function (ensName, methodName, methodArguments, callback) { - return { - call: this.call.bind({ - ensName: ensName, - methodName: methodName, - methodArguments: methodArguments, - callback: callback, - parent: this - }), - send: this.send.bind({ - ensName: ensName, - methodName: methodName, - methodArguments: methodArguments, - callback: callback, - parent: this - }) - }; -}; - -/** - * Executes call - * - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.call = function (callback) { - var self = this; - var promiEvent = new PromiEvent(); - var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments); - - this.parent.registry.resolver(this.ensName).then(function (resolver) { - self.parent.handleCall(promiEvent, resolver.methods[self.methodName], preparedArguments, callback); - }).catch(function (error) { - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - - -/** - * Executes send - * - * @param {Object} sendOptions - * @param {function} callback - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.send = function (sendOptions, callback) { - var self = this; - var promiEvent = new PromiEvent(); - var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments); - - this.parent.registry.resolver(this.ensName).then(function (resolver) { - self.parent.handleSend(promiEvent, resolver.methods[self.methodName], preparedArguments, sendOptions, callback); - }).catch(function (error) { - promiEvent.reject(error); - }); - - return promiEvent.eventEmitter; -}; - -/** - * Handles a call method - * - * @param {eventifiedPromise} promiEvent - * @param {function} method - * @param {array} preparedArguments - * @param {function} callback - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.handleCall = function (promiEvent, method, preparedArguments, callback) { - method.apply(this, preparedArguments).call() - .then(function (receipt) { - promiEvent.resolve(receipt); - - if (_.isFunction(callback)) { - callback(receipt); - } - }).catch(function (error) { - promiEvent.reject(error); - - if (_.isFunction(callback)) { - callback(error); - } - }); - - return promiEvent; -}; - -/** - * Handles a send method - * - * @param {eventifiedPromise} promiEvent - * @param {function} method - * @param {array} preparedArguments - * @param {Object} sendOptions - * @param {function} callback - * @returns {eventifiedPromise} - */ -ResolverMethodHandler.prototype.handleSend = function (promiEvent, method, preparedArguments, sendOptions, callback) { - method.apply(this, preparedArguments).send(sendOptions) - .on('transactionHash', function (hash) { - promiEvent.eventEmitter.emit('transactionHash', hash); - }) - .on('confirmation', function (confirmationNumber, receipt) { - promiEvent.eventEmitter.emit('confirmation', confirmationNumber, receipt); - }) - .on('receipt', function (receipt) { - promiEvent.eventEmitter.emit('receipt', receipt); - promiEvent.resolve(receipt); - - if (_.isFunction(callback)) { - callback(receipt); - } - }) - .on('error', function (error) { - promiEvent.eventEmitter.emit('error', error); - promiEvent.reject(error); - - if (_.isFunction(callback)) { - callback(error); - } - }); - - return promiEvent; -}; - -/** - * Adds the ENS node to the arguments - * - * @param {string} name - * @param {array} methodArguments - * @returns {array} - */ -ResolverMethodHandler.prototype.prepareArguments = function (name, methodArguments) { - var node = namehash.hash(name); - - if (methodArguments.length > 0) { - methodArguments.unshift(node); - - return methodArguments; - } - - return [node]; -}; - -module.exports = ResolverMethodHandler; diff --git a/truebit-implementation/node_modules/web3-eth-ens/src/ressources/ABI/Registry.js b/truebit-implementation/node_modules/web3-eth-ens/src/ressources/ABI/Registry.js deleted file mode 100644 index 55243624..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/src/ressources/ABI/Registry.js +++ /dev/null @@ -1,205 +0,0 @@ -"use strict"; - -var REGISTRY = [ - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "resolver", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "label", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - } - ], - "name": "setSubnodeOwner", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "ttl", - "type": "uint64" - } - ], - "name": "setTTL", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "ttl", - "outputs": [ - { - "name": "", - "type": "uint64" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "resolver", - "type": "address" - } - ], - "name": "setResolver", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - } - ], - "name": "setOwner", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "owner", - "type": "address" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": true, - "name": "label", - "type": "bytes32" - }, - { - "indexed": false, - "name": "owner", - "type": "address" - } - ], - "name": "NewOwner", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "resolver", - "type": "address" - } - ], - "name": "NewResolver", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "ttl", - "type": "uint64" - } - ], - "name": "NewTTL", - "type": "event" - } -]; - -module.exports = REGISTRY; diff --git a/truebit-implementation/node_modules/web3-eth-ens/src/ressources/ABI/Resolver.js b/truebit-implementation/node_modules/web3-eth-ens/src/ressources/ABI/Resolver.js deleted file mode 100644 index 9bd8da24..00000000 --- a/truebit-implementation/node_modules/web3-eth-ens/src/ressources/ABI/Resolver.js +++ /dev/null @@ -1,356 +0,0 @@ -"use strict"; - -var RESOLVER = [ - { - "constant": true, - "inputs": [ - { - "name": "interfaceID", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "contentTypes", - "type": "uint256" - } - ], - "name": "ABI", - "outputs": [ - { - "name": "contentType", - "type": "uint256" - }, - { - "name": "data", - "type": "bytes" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "hash", - "type": "bytes" - } - ], - "name": "setMultihash", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "multihash", - "outputs": [ - { - "name": "", - "type": "bytes" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "x", - "type": "bytes32" - }, - { - "name": "y", - "type": "bytes32" - } - ], - "name": "setPubkey", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "content", - "outputs": [ - { - "name": "ret", - "type": "bytes32" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "addr", - "outputs": [ - { - "name": "ret", - "type": "address" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "contentType", - "type": "uint256" - }, - { - "name": "data", - "type": "bytes" - } - ], - "name": "setABI", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "name", - "outputs": [ - { - "name": "ret", - "type": "string" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "name", - "type": "string" - } - ], - "name": "setName", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "hash", - "type": "bytes32" - } - ], - "name": "setContent", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], - "name": "pubkey", - "outputs": [ - { - "name": "x", - "type": "bytes32" - }, - { - "name": "y", - "type": "bytes32" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "addr", - "type": "address" - } - ], - "name": "setAddr", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "ensAddr", - "type": "address" - } - ], - "payable": false, - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "a", - "type": "address" - } - ], - "name": "AddrChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "hash", - "type": "bytes32" - } - ], - "name": "ContentChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "name", - "type": "string" - } - ], - "name": "NameChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": true, - "name": "contentType", - "type": "uint256" - } - ], - "name": "ABIChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "node", - "type": "bytes32" - }, - { - "indexed": false, - "name": "x", - "type": "bytes32" - }, - { - "indexed": false, - "name": "y", - "type": "bytes32" - } - ], - "name": "PubkeyChanged", - "type": "event" - } -]; - -module.exports = RESOLVER; diff --git a/truebit-implementation/node_modules/web3-eth-iban/README.md b/truebit-implementation/node_modules/web3-eth-iban/README.md deleted file mode 100644 index d287cfbf..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# web3-eth-iban - -This is a sub package of [web3.js][repo] - -This is the IBAN package to be used in the `web3-eth` package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-eth-iban -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-eth-iban.js` in your html file. -This will expose the `Web3EthIban` object on the window object. - - -## Usage - -```js -// in node.js -var Web3EthIban = require('web3-eth-iban'); - -var iban = new Web3EthIban('XE75JRZCTTLBSYEQBGAS7GID8DKR7QY0QA3'); -iban.toAddress() -> '0xa94f5374Fce5edBC8E2a8697C15331677e6EbF0B' -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/.npmignore b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/.npmignore deleted file mode 100644 index 6d1eebbd..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -benchmarks/ -coverage/ -node_modules/ -npm-debug.log -1.js -logo.png diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/.travis.yml b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/.travis.yml deleted file mode 100644 index 936b7b78..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -node_js: - - "0.10" - - "0.12" - - "4" - - "5" -env: - matrix: - - TEST_SUITE=unit -matrix: - include: - - node_js: "4" - env: TEST_SUITE=lint -script: npm run $TEST_SUITE diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/README.md b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/README.md deleted file mode 100644 index fee65baa..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# bn.js - -> BigNum in pure javascript - -[![Build Status](https://secure.travis-ci.org/indutny/bn.js.png)](http://travis-ci.org/indutny/bn.js) - -## Install -`npm install --save bn.js` - -## Usage - -```js -const BN = require('bn.js'); - -var a = new BN('dead', 16); -var b = new BN('101010', 2); - -var res = a.add(b); -console.log(res.toString(10)); // 57047 -``` - -**Note**: decimals are not supported in this library. - -## Notation - -### Prefixes - -There are several prefixes to instructions that affect the way the work. Here -is the list of them in the order of appearance in the function name: - -* `i` - perform operation in-place, storing the result in the host object (on - which the method was invoked). Might be used to avoid number allocation costs -* `u` - unsigned, ignore the sign of operands when performing operation, or - always return positive value. Second case applies to reduction operations - like `mod()`. In such cases if the result will be negative - modulo will be - added to the result to make it positive - -### Postfixes - -The only available postfix at the moment is: - -* `n` - which means that the argument of the function must be a plain JavaScript - number - -### Examples - -* `a.iadd(b)` - perform addition on `a` and `b`, storing the result in `a` -* `a.pmod(b)` - reduce `a` modulo `b`, returning positive value -* `a.iushln(13)` - shift bits of `a` left by 13 - -## Instructions - -Prefixes/postfixes are put in parens at the of the line. `endian` - could be -either `le` (little-endian) or `be` (big-endian). - -### Utilities - -* `a.clone()` - clone number -* `a.toString(base, length)` - convert to base-string and pad with zeroes -* `a.toNumber()` - convert to Javascript Number (limited to 53 bits) -* `a.toJSON()` - convert to JSON compatible hex string (alias of `toString(16)`) -* `a.toArray(endian, length)` - convert to byte `Array`, and optionally zero - pad to length, throwing if already exceeding -* `a.toArrayLike(type, endian, length)` - convert to an instance of `type`, - which must behave like an `Array` -* `a.toBuffer(endian, length)` - convert to Node.js Buffer (if available) -* `a.bitLength()` - get number of bits occupied -* `a.zeroBits()` - return number of less-significant consequent zero bits - (example: `1010000` has 4 zero bits) -* `a.byteLength()` - return number of bytes occupied -* `a.isNeg()` - true if the number is negative -* `a.isEven()` - no comments -* `a.isOdd()` - no comments -* `a.isZero()` - no comments -* `a.cmp(b)` - compare numbers and return `-1` (a `<` b), `0` (a `==` b), or `1` (a `>` b) - depending on the comparison result (`ucmp`, `cmpn`) -* `a.lt(b)` - `a` less than `b` (`n`) -* `a.lte(b)` - `a` less than or equals `b` (`n`) -* `a.gt(b)` - `a` greater than `b` (`n`) -* `a.gte(b)` - `a` greater than or equals `b` (`n`) -* `a.eq(b)` - `a` equals `b` (`n`) -* `a.toTwos(width)` - convert to two's complement representation, where `width` is bit width -* `a.fromTwos(width)` - convert from two's complement representation, where `width` is the bit width -* `a.isBN(object)` - returns true if the supplied `object` is a BN.js instance - -### Arithmetics - -* `a.neg()` - negate sign (`i`) -* `a.abs()` - absolute value (`i`) -* `a.add(b)` - addition (`i`, `n`, `in`) -* `a.sub(b)` - subtraction (`i`, `n`, `in`) -* `a.mul(b)` - multiply (`i`, `n`, `in`) -* `a.sqr()` - square (`i`) -* `a.pow(b)` - raise `a` to the power of `b` -* `a.div(b)` - divide (`divn`, `idivn`) -* `a.mod(b)` - reduct (`u`, `n`) (but no `umodn`) -* `a.divRound(b)` - rounded division - -### Bit operations - -* `a.or(b)` - or (`i`, `u`, `iu`) -* `a.and(b)` - and (`i`, `u`, `iu`, `andln`) (NOTE: `andln` is going to be replaced - with `andn` in future) -* `a.xor(b)` - xor (`i`, `u`, `iu`) -* `a.setn(b)` - set specified bit to `1` -* `a.shln(b)` - shift left (`i`, `u`, `iu`) -* `a.shrn(b)` - shift right (`i`, `u`, `iu`) -* `a.testn(b)` - test if specified bit is set -* `a.maskn(b)` - clear bits with indexes higher or equal to `b` (`i`) -* `a.bincn(b)` - add `1 << b` to the number -* `a.notn(w)` - not (for the width specified by `w`) (`i`) - -### Reduction - -* `a.gcd(b)` - GCD -* `a.egcd(b)` - Extended GCD results (`{ a: ..., b: ..., gcd: ... }`) -* `a.invm(b)` - inverse `a` modulo `b` - -## Fast reduction - -When doing lots of reductions using the same modulo, it might be beneficial to -use some tricks: like [Montgomery multiplication][0], or using special algorithm -for [Mersenne Prime][1]. - -### Reduction context - -To enable this tricks one should create a reduction context: - -```js -var red = BN.red(num); -``` -where `num` is just a BN instance. - -Or: - -```js -var red = BN.red(primeName); -``` - -Where `primeName` is either of these [Mersenne Primes][1]: - -* `'k256'` -* `'p224'` -* `'p192'` -* `'p25519'` - -Or: - -```js -var red = BN.mont(num); -``` - -To reduce numbers with [Montgomery trick][1]. `.mont()` is generally faster than -`.red(num)`, but slower than `BN.red(primeName)`. - -### Converting numbers - -Before performing anything in reduction context - numbers should be converted -to it. Usually, this means that one should: - -* Convert inputs to reducted ones -* Operate on them in reduction context -* Convert outputs back from the reduction context - -Here is how one may convert numbers to `red`: - -```js -var redA = a.toRed(red); -``` -Where `red` is a reduction context created using instructions above - -Here is how to convert them back: - -```js -var a = redA.fromRed(); -``` - -### Red instructions - -Most of the instructions from the very start of this readme have their -counterparts in red context: - -* `a.redAdd(b)`, `a.redIAdd(b)` -* `a.redSub(b)`, `a.redISub(b)` -* `a.redShl(num)` -* `a.redMul(b)`, `a.redIMul(b)` -* `a.redSqr()`, `a.redISqr()` -* `a.redSqrt()` - square root modulo reduction context's prime -* `a.redInvm()` - modular inverse of the number -* `a.redNeg()` -* `a.redPow(b)` - modular exponentiation - -## LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2015. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. - -[0]: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication -[1]: https://en.wikipedia.org/wiki/Mersenne_prime diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/lib/bn.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/lib/bn.js deleted file mode 100644 index 29a4c51a..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/lib/bn.js +++ /dev/null @@ -1,3427 +0,0 @@ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buf' + 'fer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/package.json b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/package.json deleted file mode 100644 index 71ee06b5..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "bn.js@4.11.6", - "_id": "bn.js@4.11.6", - "_inBundle": false, - "_integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "_location": "/web3-eth-iban/bn.js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "bn.js@4.11.6", - "name": "bn.js", - "escapedName": "bn.js", - "rawSpec": "4.11.6", - "saveSpec": null, - "fetchSpec": "4.11.6" - }, - "_requiredBy": [ - "/web3-eth-iban" - ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "_shasum": "53344adb14617a13f6e8dd2ce28905d1c0ba3215", - "_spec": "bn.js@4.11.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-eth-iban", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/bn.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Big number implementation in pure javascript", - "devDependencies": { - "istanbul": "^0.3.5", - "mocha": "^2.1.0", - "semistandard": "^7.0.4" - }, - "homepage": "https://github.com/indutny/bn.js", - "keywords": [ - "BN", - "BigNum", - "Big number", - "Modulo", - "Montgomery" - ], - "license": "MIT", - "main": "lib/bn.js", - "name": "bn.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/bn.js.git" - }, - "scripts": { - "lint": "semistandard", - "test": "npm run lint && npm run unit", - "unit": "mocha --reporter=spec test/*-test.js" - }, - "version": "4.11.6" -} diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/arithmetic-test.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/arithmetic-test.js deleted file mode 100644 index c3a0d7d5..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/arithmetic-test.js +++ /dev/null @@ -1,635 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; -var fixtures = require('./fixtures'); - -describe('BN.js/Arithmetic', function () { - describe('.add()', function () { - it('should add numbers', function () { - assert.equal(new BN(14).add(new BN(26)).toString(16), '28'); - var k = new BN(0x1234); - var r = k; - - for (var i = 0; i < 257; i++) { - r = r.add(k); - } - - assert.equal(r.toString(16), '125868'); - }); - - it('should handle carry properly (in-place)', function () { - var k = new BN('abcdefabcdefabcdef', 16); - var r = new BN('deadbeef', 16); - - for (var i = 0; i < 257; i++) { - r.iadd(k); - } - - assert.equal(r.toString(16), 'ac79bd9b79be7a277bde'); - }); - - it('should properly do positive + negative', function () { - var a = new BN('abcd', 16); - var b = new BN('-abce', 16); - - assert.equal(a.iadd(b).toString(16), '-1'); - - a = new BN('abcd', 16); - b = new BN('-abce', 16); - - assert.equal(a.add(b).toString(16), '-1'); - assert.equal(b.add(a).toString(16), '-1'); - }); - }); - - describe('.iaddn()', function () { - it('should allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should add negative number', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(-200); - - assert.equal(a.toString(), '-300'); - }); - - it('should allow neg + pos with big number', function () { - var a = new BN('-1000000000', 10); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.toString(), '-999999800'); - }); - - it('should carry limb', function () { - var a = new BN('3ffffff', 16); - - assert.equal(a.iaddn(1).toString(16), '4000000'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).iaddn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.sub()', function () { - it('should subtract small numbers', function () { - assert.equal(new BN(26).sub(new BN(14)).toString(16), 'c'); - assert.equal(new BN(14).sub(new BN(26)).toString(16), '-c'); - assert.equal(new BN(26).sub(new BN(26)).toString(16), '0'); - assert.equal(new BN(-26).sub(new BN(26)).toString(16), '-34'); - }); - - var a = new BN( - '31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384' + - 'a7d8daef41395491e2', - 16); - var b = new BN( - '6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000', - 16); - var r = new BN( - '31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a67' + - '76281f34583ddb91e2', - 16); - - it('should subtract big numbers', function () { - assert.equal(a.sub(b).cmp(r), 0); - }); - - it('should subtract numbers in place', function () { - assert.equal(b.clone().isub(a).neg().cmp(r), 0); - }); - - it('should subtract with carry', function () { - // Carry and copy - var a = new BN('12345', 16); - var b = new BN('1000000000000', 16); - assert.equal(a.isub(b).toString(16), '-fffffffedcbb'); - - a = new BN('12345', 16); - b = new BN('1000000000000', 16); - assert.equal(b.isub(a).toString(16), 'fffffffedcbb'); - }); - }); - - describe('.isubn()', function () { - it('should subtract negative number', function () { - var r = new BN( - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16); - assert.equal(r.isubn(-1).toString(16), - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c'); - }); - - it('should work for positive numbers', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(200); - assert.equal(a.negative, 1); - assert.equal(a.toString(), '-300'); - }); - - it('should not allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(-200); - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should change sign on small numbers at 0', function () { - var a = new BN(0).subn(2); - assert.equal(a.toString(), '-2'); - }); - - it('should change sign on small numbers at 1', function () { - var a = new BN(1).subn(2); - assert.equal(a.toString(), '-1'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).isubn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - function testMethod (name, mul) { - describe(name, function () { - it('should multiply numbers of different signs', function () { - var offsets = [ - 1, // smallMulTo - 250, // comb10MulTo - 1000, // bigMulTo - 15000 // jumboMulTo - ]; - - for (var i = 0; i < offsets.length; ++i) { - var x = new BN(1).ishln(offsets[i]); - - assert.equal(mul(x, x).isNeg(), false); - assert.equal(mul(x, x.neg()).isNeg(), true); - assert.equal(mul(x.neg(), x).isNeg(), true); - assert.equal(mul(x.neg(), x.neg()).isNeg(), false); - } - }); - - it('should multiply with carry', function () { - var n = new BN(0x1001); - var r = n; - - for (var i = 0; i < 4; i++) { - r = mul(r, n); - } - - assert.equal(r.toString(16), '100500a00a005001'); - }); - - it('should correctly multiply big numbers', function () { - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal( - mul(n, n).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40'); - assert.equal( - mul(mul(n, n), n).toString(16), - '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b' + - '46e0cf2cb11667f795d5569482640fe5f628939467a01a612b02350' + - '0d0161e9730279a7561043af6197798e41b7432458463e64fa81158' + - '907322dc330562697d0d600'); - }); - - it('should multiply neg number on 0', function () { - assert.equal( - mul(new BN('-100000000000'), new BN('3').div(new BN('4'))) - .toString(16), - '0' - ); - }); - - it('should regress mul big numbers', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - assert.equal(mul(q, q).toString(16), qs); - }); - }); - } - - testMethod('.mul()', function (x, y) { - return BN.prototype.mul.apply(x, [ y ]); - }); - - testMethod('.mulf()', function (x, y) { - return BN.prototype.mulf.apply(x, [ y ]); - }); - - describe('.imul()', function () { - it('should multiply numbers in-place', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('deadbeefa551edebabba8', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - - a = new BN('abcdef01234567890abcd214a25123f512361e6d236', 16); - b = new BN('deadbeefa551edebabba8121234fd21bac0341324dd', 16); - c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should multiply by 0', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('0', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should regress mul big numbers in-place', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - - assert.equal(q.isqr().toString(16), qs); - }); - }); - - describe('.muln()', function () { - it('should multiply number by small number', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('dead', 16); - var c = a.mul(b); - - assert.equal(a.muln(0xdead).toString(16), c.toString(16)); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).imuln(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.pow()', function () { - it('should raise number to the power', function () { - var a = new BN('ab', 16); - var b = new BN('13', 10); - var c = a.pow(b); - - assert.equal(c.toString(16), '15963da06977df51909c9ba5b'); - }); - }); - - describe('.div()', function () { - it('should divide small numbers (<=26 bits)', function () { - assert.equal(new BN('256').div(new BN(10)).toString(10), - '25'); - assert.equal(new BN('-256').div(new BN(10)).toString(10), - '-25'); - assert.equal(new BN('256').div(new BN(-10)).toString(10), - '-25'); - assert.equal(new BN('-256').div(new BN(-10)).toString(10), - '25'); - - assert.equal(new BN('10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('10').div(new BN(-256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(-256)).toString(10), - '0'); - }); - - it('should divide large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').div(new BN('611111124969028')) - .toString(10), '1'); - assert.equal(new BN('-1222222225255589').div(new BN('611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('1222222225255589').div(new BN('-611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('-1222222225255589').div(new BN('-611111124969028')) - .toString(10), '1'); - - assert.equal(new BN('611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - }); - - it('should divide numbers', function () { - assert.equal(new BN('69527932928').div(new BN('16974594')).toString(16), - 'fff'); - assert.equal(new BN('-69527932928').div(new BN('16974594')).toString(16), - '-fff'); - - var b = new BN( - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40', - 16); - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal(b.div(n).toString(16), n.toString(16)); - - assert.equal(new BN('1').div(new BN('-5')).toString(10), '0'); - }); - - it('should not fail on regression after moving to _wordDiv', function () { - // Regression after moving to word div - var p = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', - 16); - var a = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16); - var as = a.sqr(); - assert.equal( - as.div(p).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9'); - - p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.div(p).toString(16), - 'ffffffff00000002000000000000000000000001000000000000000000000001'); - }); - }); - - describe('.idivn()', function () { - it('should divide numbers in-place', function () { - assert.equal(new BN('10', 16).idivn(3).toString(16), '5'); - assert.equal(new BN('12', 16).idivn(3).toString(16), '6'); - assert.equal(new BN('10000000000000000').idivn(3).toString(10), - '3333333333333333'); - assert.equal( - new BN('100000000000000000000000000000').idivn(3).toString(10), - '33333333333333333333333333333'); - - var t = new BN(3); - assert.equal( - new BN('12345678901234567890123456', 16).idivn(3).toString(16), - new BN('12345678901234567890123456', 16).div(t).toString(16)); - }); - }); - - describe('.divRound()', function () { - it('should divide numbers with rounding', function () { - assert.equal(new BN(9).divRound(new BN(20)).toString(10), - '0'); - assert.equal(new BN(10).divRound(new BN(20)).toString(10), - '1'); - assert.equal(new BN(150).divRound(new BN(20)).toString(10), - '8'); - assert.equal(new BN(149).divRound(new BN(20)).toString(10), - '7'); - assert.equal(new BN(149).divRound(new BN(17)).toString(10), - '9'); - assert.equal(new BN(144).divRound(new BN(17)).toString(10), - '8'); - assert.equal(new BN(-144).divRound(new BN(17)).toString(10), - '-8'); - }); - - it('should return 1 on exact division', function () { - assert.equal(new BN(144).divRound(new BN(144)).toString(10), '1'); - }); - }); - - describe('.mod()', function () { - it('should modulo small numbers (<=26 bits)', function () { - assert.equal(new BN('256').mod(new BN(10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(10)).toString(10), - '-6'); - assert.equal(new BN('256').mod(new BN(-10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(-10)).toString(10), - '-6'); - - assert.equal(new BN('10').mod(new BN(256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(256)).toString(10), - '-10'); - assert.equal(new BN('10').mod(new BN(-256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(-256)).toString(10), - '-10'); - }); - - it('should modulo large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').mod(new BN('611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('611111124969028')) - .toString(10), '-611111100286561'); - assert.equal(new BN('1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '-611111100286561'); - - assert.equal(new BN('611111124969028').mod(new BN('1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('1222222225255589')) - .toString(10), '-611111124969028'); - assert.equal(new BN('611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '-611111124969028'); - }); - - it('should mod numbers', function () { - assert.equal(new BN('10').mod(new BN(256)).toString(16), - 'a'); - assert.equal(new BN('69527932928').mod(new BN('16974594')).toString(16), - '102f302'); - - // 178 = 10 * 17 + 8 - assert.equal(new BN(178).div(new BN(10)).toNumber(), 17); - assert.equal(new BN(178).mod(new BN(10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(10)).toNumber(), 8); - - // -178 = 10 * (-17) + (-8) - assert.equal(new BN(-178).div(new BN(10)).toNumber(), -17); - assert.equal(new BN(-178).mod(new BN(10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(10)).toNumber(), 2); - - // 178 = -10 * (-17) + 8 - assert.equal(new BN(178).div(new BN(-10)).toNumber(), -17); - assert.equal(new BN(178).mod(new BN(-10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(-10)).toNumber(), 8); - - // -178 = -10 * (17) + (-8) - assert.equal(new BN(-178).div(new BN(-10)).toNumber(), 17); - assert.equal(new BN(-178).mod(new BN(-10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(-10)).toNumber(), 2); - - // -4 = 1 * (-3) + -1 - assert.equal(new BN(-4).div(new BN(-3)).toNumber(), 1); - assert.equal(new BN(-4).mod(new BN(-3)).toNumber(), -1); - - // -4 = -1 * (3) + -1 - assert.equal(new BN(-4).mod(new BN(3)).toNumber(), -1); - // -4 = 1 * (-3) + (-1 + 3) - assert.equal(new BN(-4).umod(new BN(-3)).toNumber(), 2); - - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.mod(p).toString(16), - '0'); - }); - - it('should properly carry the sign inside division', function () { - var a = new BN('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex'); - var b = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe', - 'hex'); - - assert.equal(a.mul(b).mod(a).cmpn(0), 0); - }); - }); - - describe('.modn()', function () { - it('should act like .mod() on small numbers', function () { - assert.equal(new BN('10', 16).modn(256).toString(16), '10'); - assert.equal(new BN('100', 16).modn(256).toString(16), '0'); - assert.equal(new BN('1001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(257).toString(16), - new BN('100000000001', 16).mod(new BN(257)).toString(16)); - assert.equal(new BN('123456789012', 16).modn(3).toString(16), - new BN('123456789012', 16).mod(new BN(3)).toString(16)); - }); - }); - - describe('.abs()', function () { - it('should return absolute value', function () { - assert.equal(new BN(0x1001).abs().toString(), '4097'); - assert.equal(new BN(-0x1001).abs().toString(), '4097'); - assert.equal(new BN('ffffffff', 16).abs().toString(), '4294967295'); - }); - }); - - describe('.invm()', function () { - it('should invert relatively-prime numbers', function () { - var p = new BN(257); - var a = new BN(3); - var b = a.invm(p); - assert.equal(a.mul(b).mod(p).toString(16), '1'); - - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - a = new BN('deadbeef', 16); - b = a.invm(p192); - assert.equal(a.mul(b).mod(p192).toString(16), '1'); - - // Even base - var phi = new BN('872d9b030ba368706b68932cf07a0e0c', 16); - var e = new BN(65537); - var d = e.invm(phi); - assert.equal(e.mul(d).mod(phi).toString(16), '1'); - - // Even base (take #2) - a = new BN('5'); - b = new BN('6'); - var r = a.invm(b); - assert.equal(r.mul(a).mod(b).toString(16), '1'); - }); - }); - - describe('.gcd()', function () { - it('should return GCD', function () { - assert.equal(new BN(3).gcd(new BN(2)).toString(10), '1'); - assert.equal(new BN(18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(-12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(0)).toString(10), '18'); - assert.equal(new BN(0).gcd(new BN(-18)).toString(10), '18'); - assert.equal(new BN(2).gcd(new BN(0)).toString(10), '2'); - assert.equal(new BN(0).gcd(new BN(3)).toString(10), '3'); - assert.equal(new BN(0).gcd(new BN(0)).toString(10), '0'); - }); - }); - - describe('.egcd()', function () { - it('should return EGCD', function () { - assert.equal(new BN(3).egcd(new BN(2)).gcd.toString(10), '1'); - assert.equal(new BN(18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(-18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(0).egcd(new BN(12)).gcd.toString(10), '12'); - }); - it('should not allow 0 input', function () { - assert.throws(function () { - new BN(1).egcd(0); - }, /^Error: Assertion failed$/); - }); - it('should not allow negative input', function () { - assert.throws(function () { - new BN(1).egcd(-1); - }, /^Error: Assertion failed$/); - }); - }); - - describe('BN.max(a, b)', function () { - it('should return maximum', function () { - assert.equal(BN.max(new BN(3), new BN(2)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(3)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.max(new BN(2), new BN(-2)).toString(16), '2'); - }); - }); - - describe('BN.min(a, b)', function () { - it('should return minimum', function () { - assert.equal(BN.min(new BN(3), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(3)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(-2)).toString(16), '-2'); - }); - }); - - describe('BN.ineg', function () { - it('shouldn\'t change sign for zero', function () { - assert.equal(new BN(0).ineg().toString(10), '0'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/binary-test.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/binary-test.js deleted file mode 100644 index 37b6421d..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/binary-test.js +++ /dev/null @@ -1,233 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Binary', function () { - describe('.shl()', function () { - it('should shl numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').shln(45).toString(16), - '206060200000000000000'); - }); - - it('should ushl numbers', function () { - assert.equal(new BN('69527932928').ushln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').ushln(45).toString(16), - '206060200000000000000'); - }); - }); - - describe('.shr()', function () { - it('should shr numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').shrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').shrn(256).toString(16), - '0'); - }); - - it('should ushr numbers', function () { - assert.equal(new BN('69527932928').ushrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').ushrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').ushrn(256).toString(16), - '0'); - }); - }); - - describe('.bincn()', function () { - it('should increment bit', function () { - assert.equal(new BN(0).bincn(1).toString(16), '2'); - assert.equal(new BN(2).bincn(1).toString(16), '4'); - assert.equal(new BN(2).bincn(1).bincn(1).toString(16), - new BN(2).bincn(2).toString(16)); - assert.equal(new BN(0xffffff).bincn(1).toString(16), '1000001'); - assert.equal(new BN(2).bincn(63).toString(16), - '8000000000000002'); - }); - }); - - describe('.imaskn()', function () { - it('should mask bits in-place', function () { - assert.equal(new BN(0).imaskn(1).toString(16), '0'); - assert.equal(new BN(3).imaskn(1).toString(16), '1'); - assert.equal(new BN('123456789', 16).imaskn(4).toString(16), '9'); - assert.equal(new BN('123456789', 16).imaskn(16).toString(16), '6789'); - assert.equal(new BN('123456789', 16).imaskn(28).toString(16), '3456789'); - }); - - it('should not mask when number is bigger than length', function () { - assert.equal(new BN(0xe3).imaskn(56).toString(16), 'e3'); - assert.equal(new BN(0xe3).imaskn(26).toString(16), 'e3'); - }); - }); - - describe('.testn()', function () { - it('should support test specific bit', function () { - [ - 'ff', - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' - ].forEach(function (hex) { - var bn = new BN(hex, 16); - var bl = bn.bitLength(); - - for (var i = 0; i < bl; ++i) { - assert.equal(bn.testn(i), true); - } - - // test off the end - assert.equal(bn.testn(bl), false); - }); - - var xbits = '01111001010111001001000100011101' + - '11010011101100011000111001011101' + - '10010100111000000001011000111101' + - '01011111001111100100011110000010' + - '01011010100111010001010011000100' + - '01101001011110100001001111100110' + - '001110010111'; - - var x = new BN( - '23478905234580795234378912401239784125643978256123048348957342' - ); - for (var i = 0; i < x.bitLength(); ++i) { - assert.equal(x.testn(i), (xbits.charAt(i) === '1'), 'Failed @ bit ' + i); - } - }); - - it('should have short-cuts', function () { - var x = new BN('abcd', 16); - assert(!x.testn(128)); - }); - }); - - describe('.and()', function () { - it('should and numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .and(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .and(new BN('abcd', 16)).toString(16), - 'abcd'); - }); - }); - - describe('.iand()', function () { - it('should iand numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .iand(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - assert.equal(new BN('1000000000000000000000000000000000000001', 2) - .iand(new BN('1', 2)) - .toString(2), '1'); - assert.equal(new BN('1', 2) - .iand(new BN('1000000000000000000000000000000000000001', 2)) - .toString(2), '1'); - }); - }); - - describe('.or()', function () { - it('should or numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .or(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - }); - - it('should or numbers of different limb-length', function () { - assert.equal( - new BN('abcd00000000', 16) - .or(new BN('abcd', 16)).toString(16), - 'abcd0000abcd'); - }); - }); - - describe('.ior()', function () { - it('should ior numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .ior(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - assert.equal(new BN('1000000000000000000000000000000000000000', 2) - .ior(new BN('1', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - assert.equal(new BN('1', 2) - .ior(new BN('1000000000000000000000000000000000000000', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - }); - }); - - describe('.xor()', function () { - it('should xor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .xor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - }); - }); - - describe('.ixor()', function () { - it('should ixor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1', 2)) - .toString(2), '11001100110011001100110011001101'); - assert.equal(new BN('1', 2) - .ixor(new BN('11001100110011001100110011001100', 2)) - .toString(2), '11001100110011001100110011001101'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .xor(new BN('abcd', 16)).toString(16), - 'abcd00005432'); - }); - }); - - describe('.setn()', function () { - it('should allow single bits to be set', function () { - assert.equal(new BN(0).setn(2, true).toString(2), '100'); - assert.equal(new BN(0).setn(27, true).toString(2), - '1000000000000000000000000000'); - assert.equal(new BN(0).setn(63, true).toString(16), - new BN(1).iushln(63).toString(16)); - assert.equal(new BN('1000000000000000000000000001', 2).setn(27, false) - .toString(2), '1'); - assert.equal(new BN('101', 2).setn(2, false).toString(2), '1'); - }); - }); - - describe('.notn()', function () { - it('should allow bitwise negation', function () { - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(32).toString(2), - '11111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(32).toString(2), - '11111111111111111111111111000111'); - assert.equal(new BN('111000111', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111111000111'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/constructor-test.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/constructor-test.js deleted file mode 100644 index 11c7df08..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/constructor-test.js +++ /dev/null @@ -1,149 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Constructor', function () { - describe('with Smi input', function () { - it('should accept one limb number', function () { - assert.equal(new BN(12345).toString(16), '3039'); - }); - - it('should accept two-limb number', function () { - assert.equal(new BN(0x4123456).toString(16), '4123456'); - }); - - it('should accept 52 bits of precision', function () { - var num = Math.pow(2, 52); - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should accept max safe integer', function () { - var num = Math.pow(2, 53) - 1; - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should not accept an unsafe integer', function () { - var num = Math.pow(2, 53); - - assert.throws(function () { - return new BN(num, 10); - }, /^Error: Assertion failed$/); - }); - - it('should accept two-limb LE number', function () { - assert.equal(new BN(0x4123456, null, 'le').toString(16), '56341204'); - }); - }); - - describe('with String input', function () { - it('should accept base-16', function () { - assert.equal(new BN('1A6B765D8CDF', 16).toString(16), '1a6b765d8cdf'); - assert.equal(new BN('1A6B765D8CDF', 16).toString(), '29048849665247'); - }); - - it('should accept base-hex', function () { - assert.equal(new BN('FF', 'hex').toString(), '255'); - }); - - it('should accept base-16 with spaces', function () { - var num = 'a89c e5af8724 c0a23e0e 0ff77500'; - assert.equal(new BN(num, 16).toString(16), num.replace(/ /g, '')); - }); - - it('should accept long base-16', function () { - var num = '123456789abcdef123456789abcdef123456789abcdef'; - assert.equal(new BN(num, 16).toString(16), num); - }); - - it('should accept positive base-10', function () { - assert.equal(new BN('10654321').toString(), '10654321'); - assert.equal(new BN('29048849665247').toString(16), '1a6b765d8cdf'); - }); - - it('should accept negative base-10', function () { - assert.equal(new BN('-29048849665247').toString(16), '-1a6b765d8cdf'); - }); - - it('should accept long base-10', function () { - var num = '10000000000000000'; - assert.equal(new BN(num).toString(10), num); - }); - - it('should accept base-2', function () { - var base2 = '11111111111111111111111111111111111111111111111111111'; - assert.equal(new BN(base2, 2).toString(2), base2); - }); - - it('should accept base-36', function () { - var base36 = 'zzZzzzZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; - assert.equal(new BN(base36, 36).toString(36), base36.toLowerCase()); - }); - - it('should not overflow limbs during base-10', function () { - var num = '65820182292848241686198767302293' + - '20890292528855852623664389292032'; - assert(new BN(num).words[0] < 0x4000000); - }); - - it('should accept base-16 LE integer', function () { - assert.equal(new BN('1A6B765D8CDF', 16, 'le').toString(16), - 'df8c5d766b1a'); - }); - }); - - describe('with Array input', function () { - it('should not fail on empty array', function () { - assert.equal(new BN([]).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN([ 1, 2, 3 ]).toString(16), '10203'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toString(16), '1020304'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ]).toString(16), '102030405'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toString(16), - '102030405060708'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray().join(','), '1,2,3,4'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray().join(','), - '1,2,3,4,5,6,7,8'); - }); - - it('should import little endian', function () { - assert.equal(new BN([ 1, 2, 3 ], 10, 'le').toString(16), '30201'); - assert.equal(new BN([ 1, 2, 3, 4 ], 10, 'le').toString(16), '4030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 10, 'le').toString(16), - '504030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ], 'le').toString(16), - '807060504030201'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray('le').join(','), '4,3,2,1'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray('le').join(','), - '8,7,6,5,4,3,2,1'); - }); - - it('should import big endian with implicit base', function () { - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 'le').toString(16), '504030201'); - }); - }); - - // the Array code is able to handle Buffer - describe('with Buffer input', function () { - it('should not fail on empty Buffer', function () { - assert.equal(new BN(new Buffer(0)).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex')).toString(16), '10203'); - }); - - it('should import little endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex'), 'le').toString(16), '30201'); - }); - }); - - describe('with BN input', function () { - it('should clone BN', function () { - var num = new BN(12345); - assert.equal(new BN(num).toString(10), '12345'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/fixtures.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/fixtures.js deleted file mode 100644 index 39fd661d..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/fixtures.js +++ /dev/null @@ -1,264 +0,0 @@ -exports.dhGroups = { - p16: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199' + - 'ffffffffffffffff', - priv: '6d5923e6449122cbbcc1b96093e0b7e4fd3e469f58daddae' + - '53b49b20664f4132675df9ce98ae0cfdcac0f4181ccb643b' + - '625f98104dcf6f7d8e81961e2cab4b5014895260cb977c7d' + - '2f981f8532fb5da60b3676dfe57f293f05d525866053ac7e' + - '65abfd19241146e92e64f309a97ef3b529af4d6189fa416c' + - '9e1a816c3bdf88e5edf48fbd8233ef9038bb46faa95122c0' + - '5a426be72039639cd2d53d37254b3d258960dcb33c255ede' + - '20e9d7b4b123c8b4f4b986f53cdd510d042166f7dd7dca98' + - '7c39ab36381ba30a5fdd027eb6128d2ef8e5802a2194d422' + - 'b05fe6e1cb4817789b923d8636c1ec4b7601c90da3ddc178' + - '52f59217ae070d87f2e75cbfb6ff92430ad26a71c8373452' + - 'ae1cc5c93350e2d7b87e0acfeba401aaf518580937bf0b6c' + - '341f8c49165a47e49ce50853989d07171c00f43dcddddf72' + - '94fb9c3f4e1124e98ef656b797ef48974ddcd43a21fa06d0' + - '565ae8ce494747ce9e0ea0166e76eb45279e5c6471db7df8' + - 'cc88764be29666de9c545e72da36da2f7a352fb17bdeb982' + - 'a6dc0193ec4bf00b2e533efd6cd4d46e6fb237b775615576' + - 'dd6c7c7bbc087a25e6909d1ebc6e5b38e5c8472c0fc429c6' + - 'f17da1838cbcd9bbef57c5b5522fd6053e62ba21fe97c826' + - 'd3889d0cc17e5fa00b54d8d9f0f46fb523698af965950f4b' + - '941369e180f0aece3870d9335f2301db251595d173902cad' + - '394eaa6ffef8be6c', - pub: 'd53703b7340bc89bfc47176d351e5cf86d5a18d9662eca3c' + - '9759c83b6ccda8859649a5866524d77f79e501db923416ca' + - '2636243836d3e6df752defc0fb19cc386e3ae48ad647753f' + - 'bf415e2612f8a9fd01efe7aca249589590c7e6a0332630bb' + - '29c5b3501265d720213790556f0f1d114a9e2071be3620bd' + - '4ee1e8bb96689ac9e226f0a4203025f0267adc273a43582b' + - '00b70b490343529eaec4dcff140773cd6654658517f51193' + - '13f21f0a8e04fe7d7b21ffeca85ff8f87c42bb8d9cb13a72' + - 'c00e9c6e9dfcedda0777af951cc8ccab90d35e915e707d8e' + - '4c2aca219547dd78e9a1a0730accdc9ad0b854e51edd1e91' + - '4756760bab156ca6e3cb9c625cf0870def34e9ac2e552800' + - 'd6ce506d43dbbc75acfa0c8d8fb12daa3c783fb726f187d5' + - '58131779239c912d389d0511e0f3a81969d12aeee670e48f' + - 'ba41f7ed9f10705543689c2506b976a8ffabed45e33795b0' + - '1df4f6b993a33d1deab1316a67419afa31fbb6fdd252ee8c' + - '7c7d1d016c44e3fcf6b41898d7f206aa33760b505e4eff2e' + - 'c624bc7fe636b1d59e45d6f904fc391419f13d1f0cdb5b6c' + - '2378b09434159917dde709f8a6b5dc30994d056e3f964371' + - '11587ac7af0a442b8367a7bd940f752ddabf31cf01171e24' + - 'd78df136e9681cd974ce4f858a5fb6efd3234a91857bb52d' + - '9e7b414a8bc66db4b5a73bbeccfb6eb764b4f0cbf0375136' + - 'b024b04e698d54a5' - }, - p17: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934028492' + - '36c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bd' + - 'f8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831' + - '179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1b' + - 'db7f1447e6cc254b332051512bd7af426fb8f401378cd2bf' + - '5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6' + - 'd55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f3' + - '23a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aa' + - 'cc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be328' + - '06a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55c' + - 'da56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee' + - '12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff', - priv: '6017f2bc23e1caff5b0a8b4e1fc72422b5204415787801dc' + - '025762b8dbb98ab57603aaaa27c4e6bdf742b4a1726b9375' + - 'a8ca3cf07771779589831d8bd18ddeb79c43e7e77d433950' + - 'e652e49df35b11fa09644874d71d62fdaffb580816c2c88c' + - '2c4a2eefd4a660360316741b05a15a2e37f236692ad3c463' + - 'fff559938fc6b77176e84e1bb47fb41af691c5eb7bb81bd8' + - 'c918f52625a1128f754b08f5a1403b84667231c4dfe07ed4' + - '326234c113931ce606037e960f35a2dfdec38a5f057884d3' + - '0af8fab3be39c1eeb390205fd65982191fc21d5aa30ddf51' + - 'a8e1c58c0c19fc4b4a7380ea9e836aaf671c90c29bc4bcc7' + - '813811aa436a7a9005de9b507957c56a9caa1351b6efc620' + - '7225a18f6e97f830fb6a8c4f03b82f4611e67ab9497b9271' + - 'd6ac252793cc3e5538990dbd894d2dbc2d152801937d9f74' + - 'da4b741b50b4d40e4c75e2ac163f7b397fd555648b249f97' + - 'ffe58ffb6d096aa84534c4c5729cff137759bd34e80db4ab' + - '47e2b9c52064e7f0bf677f72ac9e5d0c6606943683f9d12f' + - '180cf065a5cb8ec3179a874f358847a907f8471d15f1e728' + - '7023249d6d13c82da52628654438f47b8b5cdf4761fbf6ad' + - '9219eceac657dbd06cf2ab776ad4c968f81c3d039367f0a4' + - 'd77c7ec4435c27b6c147071665100063b5666e06eb2fb2cc' + - '3159ba34bc98ca346342195f6f1fb053ddc3bc1873564d40' + - '1c6738cdf764d6e1ff25ca5926f80102ea6593c17170966b' + - 'b5d7352dd7fb821230237ea3ebed1f920feaadbd21be295a' + - '69f2083deae9c5cdf5f4830eb04b7c1f80cc61c17232d79f' + - '7ecc2cc462a7965f804001c89982734e5abba2d31df1b012' + - '152c6b226dff34510b54be8c2cd68d795def66c57a3abfb6' + - '896f1d139e633417f8c694764974d268f46ece3a8d6616ea' + - 'a592144be48ee1e0a1595d3e5edfede5b27cec6c48ceb2ff' + - 'b42cb44275851b0ebf87dfc9aa2d0cb0805e9454b051dfe8' + - 'a29fadd82491a4b4c23f2d06ba45483ab59976da1433c9ce' + - '500164b957a04cf62dd67595319b512fc4b998424d1164dd' + - 'bbe5d1a0f7257cbb04ec9b5ed92079a1502d98725023ecb2', - pub: '3bf836229c7dd874fe37c1790d201e82ed8e192ed61571ca' + - '7285264974eb2a0171f3747b2fc23969a916cbd21e14f7e2' + - 'f0d72dcd2247affba926f9e7bb99944cb5609aed85e71b89' + - 'e89d2651550cb5bd8281bd3144066af78f194032aa777739' + - 'cccb7862a1af401f99f7e5c693f25ddce2dedd9686633820' + - 'd28d0f5ed0c6b5a094f5fe6170b8e2cbc9dff118398baee6' + - 'e895a6301cb6e881b3cae749a5bdf5c56fc897ff68bc73f2' + - '4811bb108b882872bade1f147d886a415cda2b93dd90190c' + - 'be5c2dd53fe78add5960e97f58ff2506afe437f4cf4c912a' + - '397c1a2139ac6207d3ab76e6b7ffd23bb6866dd7f87a9ae5' + - '578789084ff2d06ea0d30156d7a10496e8ebe094f5703539' + - '730f5fdbebc066de417be82c99c7da59953071f49da7878d' + - 'a588775ff2a7f0084de390f009f372af75cdeba292b08ea8' + - '4bd13a87e1ca678f9ad148145f7cef3620d69a891be46fbb' + - 'cad858e2401ec0fd72abdea2f643e6d0197b7646fbb83220' + - '0f4cf7a7f6a7559f9fb0d0f1680822af9dbd8dec4cd1b5e1' + - '7bc799e902d9fe746ddf41da3b7020350d3600347398999a' + - 'baf75d53e03ad2ee17de8a2032f1008c6c2e6618b62f225b' + - 'a2f350179445debe68500fcbb6cae970a9920e321b468b74' + - '5fb524fb88abbcacdca121d737c44d30724227a99745c209' + - 'b970d1ff93bbc9f28b01b4e714d6c9cbd9ea032d4e964d8e' + - '8fff01db095160c20b7646d9fcd314c4bc11bcc232aeccc0' + - 'fbedccbc786951025597522eef283e3f56b44561a0765783' + - '420128638c257e54b972a76e4261892d81222b3e2039c61a' + - 'ab8408fcaac3d634f848ab3ee65ea1bd13c6cd75d2e78060' + - 'e13cf67fbef8de66d2049e26c0541c679fff3e6afc290efe' + - '875c213df9678e4a7ec484bc87dae5f0a1c26d7583e38941' + - 'b7c68b004d4df8b004b666f9448aac1cc3ea21461f41ea5d' + - 'd0f7a9e6161cfe0f58bcfd304bdc11d78c2e9d542e86c0b5' + - '6985cc83f693f686eaac17411a8247bf62f5ccc7782349b5' + - 'cc1f20e312fa2acc0197154d1bfee507e8db77e8f2732f2d' + - '641440ccf248e8643b2bd1e1f9e8239356ab91098fcb431d', - q: 'a899c59999bf877d96442d284359783bdc64b5f878b688fe' + - '51407f0526e616553ad0aaaac4d5bed3046f10a1faaf42bb' + - '2342dc4b7908eea0c46e4c4576897675c2bfdc4467870d3d' + - 'cd90adaed4359237a4bc6924bfb99aa6bf5f5ede15b574ea' + - 'e977eac096f3c67d09bda574c6306c6123fa89d2f086b8dc' + - 'ff92bc570c18d83fe6c810ccfd22ce4c749ef5e6ead3fffe' + - 'c63d95e0e3fde1df9db6a35fa1d107058f37e41957769199' + - 'd945dd7a373622c65f0af3fd9eb1ddc5c764bbfaf7a3dc37' + - '2548e683b970dac4aa4b9869080d2376c9adecebb84e172c' + - '09aeeb25fb8df23e60033260c4f8aac6b8b98ab894b1fb84' + - 'ebb83c0fb2081c3f3eee07f44e24d8fabf76f19ed167b0d7' + - 'ff971565aa4efa3625fce5a43ceeaa3eebb3ce88a00f597f' + - '048c69292b38dba2103ecdd5ec4ccfe3b2d87fa6202f334b' + - 'c1cab83b608dfc875b650b69f2c7e23c0b2b4adf149a6100' + - 'db1b6dbad4679ecb1ea95eafaba3bd00db11c2134f5a8686' + - '358b8b2ab49a1b2e85e1e45caeac5cd4dc0b3b5fffba8871' + - '1c6baf399edd48dad5e5c313702737a6dbdcede80ca358e5' + - '1d1c4fe42e8948a084403f61baed38aa9a1a5ce2918e9f33' + - '100050a430b47bc592995606440272a4994677577a6aaa1b' + - 'a101045dbec5a4e9566dab5445d1af3ed19519f07ac4e2a8' + - 'bd0a84b01978f203a9125a0be020f71fab56c2c9e344d4f4' + - '12d53d3cd8eb74ca5122002e931e3cb0bd4b7492436be17a' + - 'd7ebe27148671f59432c36d8c56eb762655711cfc8471f70' + - '83a8b7283bcb3b1b1d47d37c23d030288cfcef05fbdb4e16' + - '652ee03ee7b77056a808cd700bc3d9ef826eca9a59be959c' + - '947c865d6b372a1ca2d503d7df6d7611b12111665438475a' + - '1c64145849b3da8c2d343410df892d958db232617f9896f1' + - 'de95b8b5a47132be80dd65298c7f2047858409bf762dbc05' + - 'a62ca392ac40cfb8201a0607a2cae07d99a307625f2b2d04' + - 'fe83fbd3ab53602263410f143b73d5b46fc761882e78c782' + - 'd2c36e716a770a7aefaf7f76cea872db7bffefdbc4c2f9e0' + - '39c19adac915e7a63dcb8c8c78c113f29a3e0bc10e100ce0', - qs: '6f0a2fb763eaeb8eb324d564f03d4a55fdcd709e5f1b65e9' + - '5702b0141182f9f945d71bc3e64a7dfdae7482a7dd5a4e58' + - 'bc38f78de2013f2c468a621f08536969d2c8d011bb3bc259' + - '2124692c91140a5472cad224acdacdeae5751dadfdf068b8' + - '77bfa7374694c6a7be159fc3d24ff9eeeecaf62580427ad8' + - '622d48c51a1c4b1701d768c79d8c819776e096d2694107a2' + - 'f3ec0c32224795b59d32894834039dacb369280afb221bc0' + - '90570a93cf409889b818bb30cccee98b2aa26dbba0f28499' + - '08e1a3cd43fa1f1fb71049e5c77c3724d74dc351d9989057' + - '37bbda3805bd6b1293da8774410fb66e3194e18cdb304dd9' + - 'a0b59b583dcbc9fc045ac9d56aea5cfc9f8a0b95da1e11b7' + - '574d1f976e45fe12294997fac66ca0b83fc056183549e850' + - 'a11413cc4abbe39a211e8c8cbf82f2a23266b3c10ab9e286' + - '07a1b6088909cddff856e1eb6b2cde8bdac53fa939827736' + - 'ca1b892f6c95899613442bd02dbdb747f02487718e2d3f22' + - 'f73734d29767ed8d0e346d0c4098b6fdcb4df7d0c4d29603' + - '5bffe80d6c65ae0a1b814150d349096baaf950f2caf298d2' + - 'b292a1d48cf82b10734fe8cedfa16914076dfe3e9b51337b' + - 'ed28ea1e6824bb717b641ca0e526e175d3e5ed7892aebab0' + - 'f207562cc938a821e2956107c09b6ce4049adddcd0b7505d' + - '49ae6c69a20122461102d465d93dc03db026be54c303613a' + - 'b8e5ce3fd4f65d0b6162ff740a0bf5469ffd442d8c509cd2' + - '3b40dab90f6776ca17fc0678774bd6eee1fa85ababa52ec1' + - 'a15031eb677c6c488661dddd8b83d6031fe294489ded5f08' + - '8ad1689a14baeae7e688afa3033899c81f58de39b392ca94' + - 'af6f15a46f19fa95c06f9493c8b96a9be25e78b9ea35013b' + - 'caa76de6303939299d07426a88a334278fc3d0d9fa71373e' + - 'be51d3c1076ab93a11d3d0d703366ff8cde4c11261d488e5' + - '60a2bdf3bfe2476032294800d6a4a39d306e65c6d7d8d66e' + - '5ec63eee94531e83a9bddc458a2b508285c0ee10b7bd94da' + - '2815a0c5bd5b2e15cbe66355e42f5af8955cdfc0b3a4996d' + - '288db1f4b32b15643b18193e378cb7491f3c3951cdd044b1' + - 'a519571bffac2da986f5f1d506c66530a55f70751e24fa8e' + - 'd83ac2347f4069fb561a5565e78c6f0207da24e889a93a96' + - '65f717d9fe8a2938a09ab5f81be7ccecf466c0397fc15a57' + - '469939793f302739765773c256a3ca55d0548afd117a7cae' + - '98ca7e0d749a130c7b743d376848e255f8fdbe4cb4480b63' + - 'cd2c015d1020cf095d175f3ca9dcdfbaf1b2a6e6468eee4c' + - 'c750f2132a77f376bd9782b9d0ff4da98621b898e251a263' + - '4301ba2214a8c430b2f7a79dbbfd6d7ff6e9b0c137b025ff' + - '587c0bf912f0b19d4fff96b1ecd2ca990c89b386055c60f2' + - '3b94214bd55096f17a7b2c0fa12b333235101cd6f28a128c' + - '782e8a72671adadebbd073ded30bd7f09fb693565dcf0bf3' + - '090c21d13e5b0989dd8956f18f17f4f69449a13549c9d80a' + - '77e5e61b5aeeee9528634100e7bc390672f0ded1ca53555b' + - 'abddbcf700b9da6192255bddf50a76b709fbed251dce4c7e' + - '1ca36b85d1e97c1bc9d38c887a5adf140f9eeef674c31422' + - 'e65f63cae719f8c1324e42fa5fd8500899ef5aa3f9856aa7' + - 'ce10c85600a040343204f36bfeab8cfa6e9deb8a2edd2a8e' + - '018d00c7c9fa3a251ad0f57183c37e6377797653f382ec7a' + - '2b0145e16d3c856bc3634b46d90d7198aff12aff88a30e34' + - 'e2bfaf62705f3382576a9d3eeb0829fca2387b5b654af46e' + - '5cf6316fb57d59e5ea6c369061ac64d99671b0e516529dd5' + - 'd9c48ea0503e55fee090d36c5ea8b5954f6fcc0060794e1c' + - 'b7bc24aa1e5c0142fd4ce6e8fd5aa92a7bf84317ea9e1642' + - 'b6995bac6705adf93cbce72433ed0871139970d640f67b78' + - 'e63a7a6d849db2567df69ac7d79f8c62664ac221df228289' + - 'd0a4f9ebd9acb4f87d49da64e51a619fd3f3baccbd9feb12' + - '5abe0cc2c8d17ed1d8546da2b6c641f4d3020a5f9b9f26ac' + - '16546c2d61385505612275ea344c2bbf1ce890023738f715' + - '5e9eba6a071678c8ebd009c328c3eb643679de86e69a9fa5' + - '67a9e146030ff03d546310a0a568c5ba0070e0da22f2cef8' + - '54714b04d399bbc8fd261f9e8efcd0e83bdbc3f5cfb2d024' + - '3e398478cc598e000124eb8858f9df8f52946c2a1ca5c400' - } -}; diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/pummel/dh-group-test.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/pummel/dh-group-test.js deleted file mode 100644 index 37a259ff..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/pummel/dh-group-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../../').BN; -var fixtures = require('../fixtures'); - -describe('BN.js/Slow DH test', function () { - var groups = fixtures.dhGroups; - Object.keys(groups).forEach(function (name) { - it('should match public key for ' + name + ' group', function () { - var group = groups[name]; - - this.timeout(3600 * 1000); - - var base = new BN(2); - var mont = BN.red(new BN(group.prime, 16)); - var priv = new BN(group.priv, 16); - var multed = base.toRed(mont).redPow(priv).fromRed(); - var actual = new Buffer(multed.toArray()); - assert.equal(actual.toString('hex'), group.pub); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/red-test.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/red-test.js deleted file mode 100644 index fc2498c9..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/red-test.js +++ /dev/null @@ -1,263 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Reduction context', function () { - function testMethod (name, fn) { - describe(name + ' method', function () { - it('should support add, iadd, sub, isub operations', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(123).toRed(m); - var b = new BN(231).toRed(m); - - assert.equal(a.redAdd(b).fromRed().toString(10), '97'); - assert.equal(a.redSub(b).fromRed().toString(10), '149'); - assert.equal(b.redSub(a).fromRed().toString(10), '108'); - - assert.equal(a.clone().redIAdd(b).fromRed().toString(10), '97'); - assert.equal(a.clone().redISub(b).fromRed().toString(10), '149'); - assert.equal(b.clone().redISub(a).fromRed().toString(10), '108'); - }); - - it('should support pow and mul operations', function () { - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p192); - var a = new BN(123); - var b = new BN(231); - var c = a.toRed(m).redMul(b.toRed(m)).fromRed(); - assert(c.cmp(a.mul(b).mod(p192)) === 0); - - assert.equal(a.toRed(m).redPow(new BN(3)).fromRed() - .cmp(a.sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(4)).fromRed() - .cmp(a.sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(8)).fromRed() - .cmp(a.sqr().sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(9)).fromRed() - .cmp(a.sqr().sqr().sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(17)).fromRed() - .cmp(a.sqr().sqr().sqr().sqr().mul(a)), 0); - assert.equal( - a.toRed(m).redPow(new BN('deadbeefabbadead', 16)).fromRed() - .toString(16), - '3aa0e7e304e320b68ef61592bcb00341866d6fa66e11a4d6'); - }); - - it('should sqrtm numbers', function () { - var p = new BN(263); - var m = fn(p); - var q = new BN(11).toRed(m); - - var qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - m = fn(p); - - q = new BN(13).toRed(m); - qr = q.redSqrt(true, p); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(false, p); - assert.equal(qr.redSqr().cmp(q), 0); - - // Tonelli-shanks - p = new BN(13); - m = fn(p); - q = new BN(10).toRed(m); - assert.equal(q.redSqrt().fromRed().toString(10), '7'); - }); - - it('should invm numbers', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(3).toRed(m); - var b = a.redInvm(); - assert.equal(a.redMul(b).fromRed().toString(16), '1'); - }); - - it('should invm numbers (regression)', function () { - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'e1d969b8192fbac73ea5b7921896d6a2263d4d4077bb8e5055361d1f7f8163f3', - 16); - - var m = fn(p); - a = a.toRed(m); - - assert.equal(a.redInvm().fromRed().negative, 0); - }); - - it('should imul numbers', function () { - var p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p); - - var a = new BN('deadbeefabbadead', 16); - var b = new BN('abbadeadbeefdead', 16); - var c = a.mul(b).mod(p); - - assert.equal(a.toRed(m).redIMul(b.toRed(m)).fromRed().toString(16), - c.toString(16)); - }); - - it('should pow(base, 0) == 1', function () { - var base = new BN(256).toRed(BN.red('k256')); - var exponent = new BN(0); - var result = base.redPow(exponent); - assert.equal(result.toString(), '1'); - }); - - it('should shl numbers', function () { - var base = new BN(256).toRed(BN.red('k256')); - var result = base.redShl(1); - assert.equal(result.toString(), '512'); - }); - - it('should reduce when converting to red', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(5).toRed(m); - - assert.doesNotThrow(function () { - var b = a.redISub(new BN(512).toRed(m)); - b.redISub(new BN(512).toRed(m)); - }); - }); - - it('redNeg and zero value', function () { - var a = new BN(0).toRed(BN.red('k256')).redNeg(); - assert.equal(a.isZero(), true); - }); - - it('should not allow modulus <= 1', function () { - assert.throws(function () { - BN.red(new BN(0)); - }, /^Error: modulus must be greater than 1$/); - - assert.throws(function () { - BN.red(new BN(1)); - }, /^Error: modulus must be greater than 1$/); - - assert.doesNotThrow(function () { - BN.red(new BN(2)); - }); - }); - }); - } - - testMethod('Plain', BN.red); - testMethod('Montgomery', BN.mont); - - describe('Pseudo-Mersenne Primes', function () { - it('should reduce numbers mod k256', function () { - var p = BN._prime('k256'); - - assert.equal(p.ireduce(new BN(0xdead)).toString(16), 'dead'); - assert.equal(p.ireduce(new BN('deadbeef', 16)).toString(16), 'deadbeef'); - - var num = new BN('fedcba9876543210fedcba9876543210dead' + - 'fedcba9876543210fedcba9876543210dead', - 16); - var exp = num.mod(p.p).toString(16); - assert.equal(p.ireduce(num).toString(16), exp); - - var regr = new BN('f7e46df64c1815962bf7bc9c56128798' + - '3f4fcef9cb1979573163b477eab93959' + - '335dfb29ef07a4d835d22aa3b6797760' + - '70a8b8f59ba73d56d01a79af9', - 16); - exp = regr.mod(p.p).toString(16); - - assert.equal(p.ireduce(regr).toString(16), exp); - }); - - it('should not fail to invm number mod k256', function () { - var regr2 = new BN( - '6c150c4aa9a8cf1934485d40674d4a7cd494675537bda36d49405c5d2c6f496f', 16); - regr2 = regr2.toRed(BN.red('k256')); - assert.equal(regr2.redInvm().redMul(regr2).fromRed().cmpn(1), 0); - }); - - it('should correctly square the number', function () { - var p = BN._prime('k256').p; - var red = BN.red('k256'); - - var n = new BN('9cd8cb48c3281596139f147c1364a3ed' + - 'e88d3f310fdb0eb98c924e599ca1b3c9', - 16); - var expected = n.sqr().mod(p); - var actual = n.toRed(red).redSqr().fromRed(); - - assert.equal(actual.toString(16), expected.toString(16)); - }); - - it('redISqr should return right result', function () { - var n = new BN('30f28939', 16); - var actual = n.toRed(BN.red('k256')).redISqr().fromRed(); - assert.equal(actual.toString(16), '95bd93d19520eb1'); - }); - }); - - it('should avoid 4.1.0 regresion', function () { - function bits2int (obits, q) { - var bits = new BN(obits); - var shift = (obits.length << 3) - q.bitLength(); - if (shift > 0) { - bits.ishrn(shift); - } - return bits; - } - var t = new Buffer('aff1651e4cd6036d57aa8b2a05ccf1a9d5a40166340ecbbdc55' + - 'be10b568aa0aa3d05ce9a2fcec9df8ed018e29683c6051cb83e' + - '46ce31ba4edb045356a8d0d80b', 'hex'); - var g = new BN('5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670' + - '716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1' + - 'aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a' + - '338661d10461c0d135472085057f3494309ffa73c611f78b32adbb574' + - '0c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097b' + - 'c5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a3' + - '3afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd24871' + - '99874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f9' + - '96bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7', - 16); - var p = new BN('9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642' + - 'f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55' + - '757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9' + - 'f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b99' + - '3e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368' + - '213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca283716' + - '21cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d' + - '3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256' + - 'a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b', - 16); - var q = new BN('f2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde' + - '9998c1f', 16); - var k = bits2int(t, q); - var expectedR = '89ec4bb1400eccff8e7d9aa515cd1de7803f2daff09693ee7fd1353e' + - '90a68307'; - var r = g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); - assert.equal(r.toString(16), expectedR); - }); - - it('K256.split for 512 bits number should return equal numbers', function () { - var red = BN.red('k256'); - var input = new BN(1).iushln(512).subn(1); - assert.equal(input.bitLength(), 512); - var output = new BN(0); - red.prime.split(input, output); - assert.equal(input.cmp(output), 0); - }); -}); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/utils-test.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/utils-test.js deleted file mode 100644 index 8571905a..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/test/utils-test.js +++ /dev/null @@ -1,345 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Utils', function () { - describe('.toString()', function () { - describe('binary padding', function () { - it('should have a length of 256', function () { - var a = new BN(0); - - assert.equal(a.toString(2, 256).length, 256); - }); - }); - describe('hex padding', function () { - it('should have length of 8 from leading 15', function () { - var a = new BN('ffb9602', 16); - - assert.equal(a.toString('hex', 2).length, 8); - }); - - it('should have length of 8 from leading zero', function () { - var a = new BN('fb9604', 16); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 8 from leading zeros', function () { - var a = new BN(0); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 64 from leading 15', function () { - var a = new BN( - 'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 2).length, 64); - }); - - it('should have length of 64 from leading zero', function () { - var a = new BN( - 'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 64).length, 64); - }); - }); - }); - - describe('.isNeg()', function () { - it('should return true for negative numbers', function () { - assert.equal(new BN(-1).isNeg(), true); - assert.equal(new BN(1).isNeg(), false); - assert.equal(new BN(0).isNeg(), false); - assert.equal(new BN('-0', 10).isNeg(), false); - }); - }); - - describe('.isOdd()', function () { - it('should return true for odd numbers', function () { - assert.equal(new BN(0).isOdd(), false); - assert.equal(new BN(1).isOdd(), true); - assert.equal(new BN(2).isOdd(), false); - assert.equal(new BN('-0', 10).isOdd(), false); - assert.equal(new BN('-1', 10).isOdd(), true); - assert.equal(new BN('-2', 10).isOdd(), false); - }); - }); - - describe('.isEven()', function () { - it('should return true for even numbers', function () { - assert.equal(new BN(0).isEven(), true); - assert.equal(new BN(1).isEven(), false); - assert.equal(new BN(2).isEven(), true); - assert.equal(new BN('-0', 10).isEven(), true); - assert.equal(new BN('-1', 10).isEven(), false); - assert.equal(new BN('-2', 10).isEven(), true); - }); - }); - - describe('.isZero()', function () { - it('should return true for zero', function () { - assert.equal(new BN(0).isZero(), true); - assert.equal(new BN(1).isZero(), false); - assert.equal(new BN(0xffffffff).isZero(), false); - }); - }); - - describe('.bitLength()', function () { - it('should return proper bitLength', function () { - assert.equal(new BN(0).bitLength(), 0); - assert.equal(new BN(0x1).bitLength(), 1); - assert.equal(new BN(0x2).bitLength(), 2); - assert.equal(new BN(0x3).bitLength(), 2); - assert.equal(new BN(0x4).bitLength(), 3); - assert.equal(new BN(0x8).bitLength(), 4); - assert.equal(new BN(0x10).bitLength(), 5); - assert.equal(new BN(0x100).bitLength(), 9); - assert.equal(new BN(0x123456).bitLength(), 21); - assert.equal(new BN('123456789', 16).bitLength(), 33); - assert.equal(new BN('8023456789', 16).bitLength(), 40); - }); - }); - - describe('.byteLength()', function () { - it('should return proper byteLength', function () { - assert.equal(new BN(0).byteLength(), 0); - assert.equal(new BN(0x1).byteLength(), 1); - assert.equal(new BN(0x2).byteLength(), 1); - assert.equal(new BN(0x3).byteLength(), 1); - assert.equal(new BN(0x4).byteLength(), 1); - assert.equal(new BN(0x8).byteLength(), 1); - assert.equal(new BN(0x10).byteLength(), 1); - assert.equal(new BN(0x100).byteLength(), 2); - assert.equal(new BN(0x123456).byteLength(), 3); - assert.equal(new BN('123456789', 16).byteLength(), 5); - assert.equal(new BN('8023456789', 16).byteLength(), 5); - }); - }); - - describe('.toArray()', function () { - it('should return [ 0 ] for `0`', function () { - var n = new BN(0); - assert.deepEqual(n.toArray('be'), [ 0 ]); - assert.deepEqual(n.toArray('le'), [ 0 ]); - }); - - it('should zero pad to desired lengths', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toArray('be', 5), [ 0x00, 0x00, 0x12, 0x34, 0x56 ]); - assert.deepEqual(n.toArray('le', 5), [ 0x56, 0x34, 0x12, 0x00, 0x00 ]); - }); - - it('should throw when naturally larger than desired length', function () { - var n = new BN(0x123456); - assert.throws(function () { - n.toArray('be', 2); - }, /^Error: byte array longer than desired length$/); - }); - }); - - describe('.toBuffer', function () { - it('should return proper Buffer', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toBuffer('be', 5).toString('hex'), '0000123456'); - assert.deepEqual(n.toBuffer('le', 5).toString('hex'), '5634120000'); - }); - }); - - describe('.toNumber()', function () { - it('should return proper Number if below the limit', function () { - assert.deepEqual(new BN(0x123456).toNumber(), 0x123456); - assert.deepEqual(new BN(0x3ffffff).toNumber(), 0x3ffffff); - assert.deepEqual(new BN(0x4000000).toNumber(), 0x4000000); - assert.deepEqual(new BN(0x10000000000000).toNumber(), 0x10000000000000); - assert.deepEqual(new BN(0x10040004004000).toNumber(), 0x10040004004000); - assert.deepEqual(new BN(-0x123456).toNumber(), -0x123456); - assert.deepEqual(new BN(-0x3ffffff).toNumber(), -0x3ffffff); - assert.deepEqual(new BN(-0x4000000).toNumber(), -0x4000000); - assert.deepEqual(new BN(-0x10000000000000).toNumber(), -0x10000000000000); - assert.deepEqual(new BN(-0x10040004004000).toNumber(), -0x10040004004000); - }); - - it('should throw when number exceeds 53 bits', function () { - var n = new BN(1).iushln(54); - assert.throws(function () { - n.toNumber(); - }, /^Error: Number can only safely store up to 53 bits$/); - }); - }); - - describe('.zeroBits()', function () { - it('should return proper zeroBits', function () { - assert.equal(new BN(0).zeroBits(), 0); - assert.equal(new BN(0x1).zeroBits(), 0); - assert.equal(new BN(0x2).zeroBits(), 1); - assert.equal(new BN(0x3).zeroBits(), 0); - assert.equal(new BN(0x4).zeroBits(), 2); - assert.equal(new BN(0x8).zeroBits(), 3); - assert.equal(new BN(0x10).zeroBits(), 4); - assert.equal(new BN(0x100).zeroBits(), 8); - assert.equal(new BN(0x1000000).zeroBits(), 24); - assert.equal(new BN(0x123456).zeroBits(), 1); - }); - }); - - describe('.toJSON', function () { - it('should return hex string', function () { - assert.equal(new BN(0x123).toJSON(), '123'); - }); - }); - - describe('.cmpn', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmpn(42), 0); - assert.equal(new BN(42).cmpn(43), -1); - assert.equal(new BN(42).cmpn(41), 1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffe), 0); - assert.equal(new BN(0x3fffffe).cmpn(0x3ffffff), -1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffd), 1); - assert.throws(function () { - new BN(0x3fffffe).cmpn(0x4000000); - }, /^Error: Number is too big$/); - assert.equal(new BN(42).cmpn(-42), 1); - assert.equal(new BN(-42).cmpn(42), -1); - assert.equal(new BN(-42).cmpn(-42), 0); - assert.equal(1 / new BN(-42).cmpn(-42), Infinity); - }); - }); - - describe('.cmp', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmp(new BN(42)), 0); - assert.equal(new BN(42).cmp(new BN(43)), -1); - assert.equal(new BN(42).cmp(new BN(41)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffe)), 0); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3ffffff)), -1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffd)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x4000000)), -1); - assert.equal(new BN(42).cmp(new BN(-42)), 1); - assert.equal(new BN(-42).cmp(new BN(42)), -1); - assert.equal(new BN(-42).cmp(new BN(-42)), 0); - assert.equal(1 / new BN(-42).cmp(new BN(-42)), Infinity); - }); - }); - - describe('comparison shorthands', function () { - it('.gtn greater than', function () { - assert.equal(new BN(3).gtn(2), true); - assert.equal(new BN(3).gtn(3), false); - assert.equal(new BN(3).gtn(4), false); - }); - it('.gt greater than', function () { - assert.equal(new BN(3).gt(new BN(2)), true); - assert.equal(new BN(3).gt(new BN(3)), false); - assert.equal(new BN(3).gt(new BN(4)), false); - }); - it('.gten greater than or equal', function () { - assert.equal(new BN(3).gten(3), true); - assert.equal(new BN(3).gten(2), true); - assert.equal(new BN(3).gten(4), false); - }); - it('.gte greater than or equal', function () { - assert.equal(new BN(3).gte(new BN(3)), true); - assert.equal(new BN(3).gte(new BN(2)), true); - assert.equal(new BN(3).gte(new BN(4)), false); - }); - it('.ltn less than', function () { - assert.equal(new BN(2).ltn(3), true); - assert.equal(new BN(2).ltn(2), false); - assert.equal(new BN(2).ltn(1), false); - }); - it('.lt less than', function () { - assert.equal(new BN(2).lt(new BN(3)), true); - assert.equal(new BN(2).lt(new BN(2)), false); - assert.equal(new BN(2).lt(new BN(1)), false); - }); - it('.lten less than or equal', function () { - assert.equal(new BN(3).lten(3), true); - assert.equal(new BN(3).lten(2), false); - assert.equal(new BN(3).lten(4), true); - }); - it('.lte less than or equal', function () { - assert.equal(new BN(3).lte(new BN(3)), true); - assert.equal(new BN(3).lte(new BN(2)), false); - assert.equal(new BN(3).lte(new BN(4)), true); - }); - it('.eqn equal', function () { - assert.equal(new BN(3).eqn(3), true); - assert.equal(new BN(3).eqn(2), false); - assert.equal(new BN(3).eqn(4), false); - }); - it('.eq equal', function () { - assert.equal(new BN(3).eq(new BN(3)), true); - assert.equal(new BN(3).eq(new BN(2)), false); - assert.equal(new BN(3).eq(new BN(4)), false); - }); - }); - - describe('.fromTwos', function () { - it('should convert from two\'s complement to negative number', function () { - assert.equal(new BN('00000000', 16).fromTwos(32).toNumber(), 0); - assert.equal(new BN('00000001', 16).fromTwos(32).toNumber(), 1); - assert.equal(new BN('7fffffff', 16).fromTwos(32).toNumber(), 2147483647); - assert.equal(new BN('80000000', 16).fromTwos(32).toNumber(), -2147483648); - assert.equal(new BN('f0000000', 16).fromTwos(32).toNumber(), -268435456); - assert.equal(new BN('f1234567', 16).fromTwos(32).toNumber(), -249346713); - assert.equal(new BN('ffffffff', 16).fromTwos(32).toNumber(), -1); - assert.equal(new BN('fffffffe', 16).fromTwos(32).toNumber(), -2); - assert.equal(new BN('fffffffffffffffffffffffffffffffe', 16) - .fromTwos(128).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber(), -1); - assert.equal(new BN('7fffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10), - new BN('5789604461865809771178549250434395392663499' + - '2332820282019728792003956564819967', 10).toString(10)); - assert.equal(new BN('80000000000000000000000000000000' + - '00000000000000000000000000000000', 16).fromTwos(256).toString(10), - new BN('-578960446186580977117854925043439539266349' + - '92332820282019728792003956564819968', 10).toString(10)); - }); - }); - - describe('.toTwos', function () { - it('should convert from negative number to two\'s complement', function () { - assert.equal(new BN(0).toTwos(32).toString(16), '0'); - assert.equal(new BN(1).toTwos(32).toString(16), '1'); - assert.equal(new BN(2147483647).toTwos(32).toString(16), '7fffffff'); - assert.equal(new BN('-2147483648', 10).toTwos(32).toString(16), '80000000'); - assert.equal(new BN('-268435456', 10).toTwos(32).toString(16), 'f0000000'); - assert.equal(new BN('-249346713', 10).toTwos(32).toString(16), 'f1234567'); - assert.equal(new BN('-1', 10).toTwos(32).toString(16), 'ffffffff'); - assert.equal(new BN('-2', 10).toTwos(32).toString(16), 'fffffffe'); - assert.equal(new BN('-2', 10).toTwos(128).toString(16), - 'fffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-2', 10).toTwos(256).toString(16), - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-1', 10).toTwos(256).toString(16), - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('5789604461865809771178549250434395392663' + - '4992332820282019728792003956564819967', 10).toTwos(256).toString(16), - '7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('-578960446186580977117854925043439539266' + - '34992332820282019728792003956564819968', 10).toTwos(256).toString(16), - '8000000000000000000000000000000000000000000000000000000000000000'); - }); - }); - - describe('.isBN', function () { - it('should return true for BN', function () { - assert.equal(BN.isBN(new BN()), true); - }); - - it('should return false for everything else', function () { - assert.equal(BN.isBN(1), false); - assert.equal(BN.isBN([]), false); - assert.equal(BN.isBN({}), false); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/util/genCombMulTo.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/util/genCombMulTo.js deleted file mode 100644 index 8b456c7c..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/util/genCombMulTo.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -// NOTE: This could be potentionally used to generate loop-less multiplications -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('var w' + k + ' = c;'); - src.push('c = 0;'); - for (var j = minJ; j <= maxJ; j++) { - i = k - j; - - src.push('lo = Math.imul(al' + i + ', bl' + j + ');'); - src.push('mid = Math.imul(al' + i + ', bh' + j + ');'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = Math.imul(ah' + i + ', bh' + j + ');'); - - src.push('w' + k + ' = (w' + k + ' + lo) | 0;'); - src.push('w' + k + ' = (w' + k + ' + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (c + hi) | 0;'); - src.push('c = (c + (mid >>> 13)) | 0;'); - src.push('c = (c + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/util/genCombMulTo10.js b/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/util/genCombMulTo10.js deleted file mode 100644 index cf2e6e80..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/node_modules/bn.js/util/genCombMulTo10.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');'); - src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');'); - src.push( - 'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;'); - src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');'); - - for (var j = minJ + 1; j <= maxJ; j++) { - i = k - j; - - src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;'); - } - - src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/web3-eth-iban/package.json b/truebit-implementation/node_modules/web3-eth-iban/package.json deleted file mode 100644 index e7608112..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "_from": "web3-eth-iban@1.0.0-beta.36", - "_id": "web3-eth-iban@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-b5AEDjjhOLR4q47Hbzf65zYE+7U7JgCgrUb13RU4HMIGoMb1q4DXaJw1UH8VVHCZulevl2QBjpCyrntecMqqCQ==", - "_location": "/web3-eth-iban", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-eth-iban@1.0.0-beta.36", - "name": "web3-eth-iban", - "escapedName": "web3-eth-iban", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core-helpers", - "/web3-eth" - ], - "_resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.36.tgz", - "_shasum": "00cb3aba7a5aeb15d02b07421042e263d7b2e01b", - "_spec": "web3-eth-iban@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core-helpers", - "bundleDependencies": false, - "dependencies": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "This package converts Ethereum addresses to IBAN addresses a vice versa.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-eth-iban", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-eth-iban" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-eth-iban/src/index.js b/truebit-implementation/node_modules/web3-eth-iban/src/index.js deleted file mode 100644 index 6fdbc99f..00000000 --- a/truebit-implementation/node_modules/web3-eth-iban/src/index.js +++ /dev/null @@ -1,267 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file iban.js - * - * Details: https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol - * - * @author Marek Kotewicz - * @date 2015 - */ - -"use strict"; - -var utils = require('web3-utils'); -var BigNumber = require('bn.js'); - - -var leftPad = function (string, bytes) { - var result = string; - while (result.length < bytes * 2) { - result = '0' + result; - } - return result; -}; - -/** - * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to - * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616. - * - * @method iso13616Prepare - * @param {String} iban the IBAN - * @returns {String} the prepared IBAN - */ -var iso13616Prepare = function (iban) { - var A = 'A'.charCodeAt(0); - var Z = 'Z'.charCodeAt(0); - - iban = iban.toUpperCase(); - iban = iban.substr(4) + iban.substr(0,4); - - return iban.split('').map(function(n){ - var code = n.charCodeAt(0); - if (code >= A && code <= Z){ - // A = 10, B = 11, ... Z = 35 - return code - A + 10; - } else { - return n; - } - }).join(''); -}; - -/** - * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064. - * - * @method mod9710 - * @param {String} iban - * @returns {Number} - */ -var mod9710 = function (iban) { - var remainder = iban, - block; - - while (remainder.length > 2){ - block = remainder.slice(0, 9); - remainder = parseInt(block, 10) % 97 + remainder.slice(block.length); - } - - return parseInt(remainder, 10) % 97; -}; - -/** - * This prototype should be used to create iban object from iban correct string - * - * @param {String} iban - */ -var Iban = function Iban(iban) { - this._iban = iban; -}; - -/** - * This method should be used to create an ethereum address from a direct iban address - * - * @method toAddress - * @param {String} iban address - * @return {String} the ethereum address - */ -Iban.toAddress = function (ib) { - ib = new Iban(ib); - - if(!ib.isDirect()) { - throw new Error('IBAN is indirect and can\'t be converted'); - } - - return ib.toAddress(); -}; - -/** - * This method should be used to create iban address from an ethereum address - * - * @method toIban - * @param {String} address - * @return {String} the IBAN address - */ -Iban.toIban = function (address) { - return Iban.fromAddress(address).toString(); -}; - -/** - * This method should be used to create iban object from an ethereum address - * - * @method fromAddress - * @param {String} address - * @return {Iban} the IBAN object - */ -Iban.fromAddress = function (address) { - if(!utils.isAddress(address)){ - throw new Error('Provided address is not a valid address: '+ address); - } - - address = address.replace('0x','').replace('0X',''); - - var asBn = new BigNumber(address, 16); - var base36 = asBn.toString(36); - var padded = leftPad(base36, 15); - return Iban.fromBban(padded.toUpperCase()); -}; - -/** - * Convert the passed BBAN to an IBAN for this country specification. - * Please note that "generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account". - * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits - * - * @method fromBban - * @param {String} bban the BBAN to convert to IBAN - * @returns {Iban} the IBAN object - */ -Iban.fromBban = function (bban) { - var countryCode = 'XE'; - - var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban)); - var checkDigit = ('0' + (98 - remainder)).slice(-2); - - return new Iban(countryCode + checkDigit + bban); -}; - -/** - * Should be used to create IBAN object for given institution and identifier - * - * @method createIndirect - * @param {Object} options, required options are "institution" and "identifier" - * @return {Iban} the IBAN object - */ -Iban.createIndirect = function (options) { - return Iban.fromBban('ETH' + options.institution + options.identifier); -}; - -/** - * This method should be used to check if given string is valid iban object - * - * @method isValid - * @param {String} iban string - * @return {Boolean} true if it is valid IBAN - */ -Iban.isValid = function (iban) { - var i = new Iban(iban); - return i.isValid(); -}; - -/** - * Should be called to check if iban is correct - * - * @method isValid - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isValid = function () { - return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) && - mod9710(iso13616Prepare(this._iban)) === 1; -}; - -/** - * Should be called to check if iban number is direct - * - * @method isDirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isDirect = function () { - return this._iban.length === 34 || this._iban.length === 35; -}; - -/** - * Should be called to check if iban number if indirect - * - * @method isIndirect - * @returns {Boolean} true if it is, otherwise false - */ -Iban.prototype.isIndirect = function () { - return this._iban.length === 20; -}; - -/** - * Should be called to get iban checksum - * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003) - * - * @method checksum - * @returns {String} checksum - */ -Iban.prototype.checksum = function () { - return this._iban.substr(2, 2); -}; - -/** - * Should be called to get institution identifier - * eg. XREG - * - * @method institution - * @returns {String} institution identifier - */ -Iban.prototype.institution = function () { - return this.isIndirect() ? this._iban.substr(7, 4) : ''; -}; - -/** - * Should be called to get client identifier within institution - * eg. GAVOFYORK - * - * @method client - * @returns {String} client identifier - */ -Iban.prototype.client = function () { - return this.isIndirect() ? this._iban.substr(11) : ''; -}; - -/** - * Should be called to get client direct address - * - * @method toAddress - * @returns {String} ethereum address - */ -Iban.prototype.toAddress = function () { - if (this.isDirect()) { - var base36 = this._iban.substr(4); - var asBn = new BigNumber(base36, 36); - return utils.toChecksumAddress(asBn.toString(16, 20)); - } - - return ''; -}; - -Iban.prototype.toString = function () { - return this._iban; -}; - -module.exports = Iban; diff --git a/truebit-implementation/node_modules/web3-eth-personal/README.md b/truebit-implementation/node_modules/web3-eth-personal/README.md deleted file mode 100644 index f64f9688..00000000 --- a/truebit-implementation/node_modules/web3-eth-personal/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# web3-eth-personal - -This is a sub package of [web3.js][repo] - -This is the personal package to be used in the `web3-eth` package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-eth-personal -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-eth-personal.js` in your html file. -This will expose the `Web3EthPersonal` object on the window object. - - -## Usage - -```js -// in node.js -var Web3EthPersonal = require('web3-eth-personal'); - -var personal = new Web3EthPersonal('ws://localhost:8546'); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-eth-personal/package.json b/truebit-implementation/node_modules/web3-eth-personal/package.json deleted file mode 100644 index 2adb9bcb..00000000 --- a/truebit-implementation/node_modules/web3-eth-personal/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "_from": "web3-eth-personal@1.0.0-beta.36", - "_id": "web3-eth-personal@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-+oxvhojeWh4C/XtnlYURWRR3F5Cg7bQQNjtN1ZGnouKAZyBLoYDVVJ6OaPiveNtfC9RKnzLikn9/Uqc0xz410A==", - "_location": "/web3-eth-personal", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-eth-personal@1.0.0-beta.36", - "name": "web3-eth-personal", - "escapedName": "web3-eth-personal", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3", - "/web3-eth" - ], - "_resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.36.tgz", - "_shasum": "95545998a8ee377e3bb71e27c8d1a5dc1d7d5a21", - "_spec": "web3-eth-personal@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3", - "bundleDependencies": false, - "dependencies": { - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module to interact with the Ethereum blockchain accounts stored in the node.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-eth-personal", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-eth-personal" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-eth-personal/src/index.js b/truebit-implementation/node_modules/web3-eth-personal/src/index.js deleted file mode 100644 index 54f12ab3..00000000 --- a/truebit-implementation/node_modules/web3-eth-personal/src/index.js +++ /dev/null @@ -1,150 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var core = require('web3-core'); -var Method = require('web3-core-method'); -var utils = require('web3-utils'); -var Net = require('web3-net'); - -var formatters = require('web3-core-helpers').formatters; - - -var Personal = function Personal() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - this.net = new Net(this.currentProvider); - - var defaultAccount = null; - var defaultBlock = 'latest'; - - Object.defineProperty(this, 'defaultAccount', { - get: function () { - return defaultAccount; - }, - set: function (val) { - if(val) { - defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val)); - } - - // update defaultBlock - methods.forEach(function(method) { - method.defaultAccount = defaultAccount; - }); - - return val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultBlock', { - get: function () { - return defaultBlock; - }, - set: function (val) { - defaultBlock = val; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultBlock = defaultBlock; - }); - - return val; - }, - enumerable: true - }); - - - var methods = [ - new Method({ - name: 'getAccounts', - call: 'personal_listAccounts', - params: 0, - outputFormatter: utils.toChecksumAddress - }), - new Method({ - name: 'newAccount', - call: 'personal_newAccount', - params: 1, - inputFormatter: [null], - outputFormatter: utils.toChecksumAddress - }), - new Method({ - name: 'unlockAccount', - call: 'personal_unlockAccount', - params: 3, - inputFormatter: [formatters.inputAddressFormatter, null, null] - }), - new Method({ - name: 'lockAccount', - call: 'personal_lockAccount', - params: 1, - inputFormatter: [formatters.inputAddressFormatter] - }), - new Method({ - name: 'importRawKey', - call: 'personal_importRawKey', - params: 2 - }), - new Method({ - name: 'sendTransaction', - call: 'personal_sendTransaction', - params: 2, - inputFormatter: [formatters.inputTransactionFormatter, null] - }), - new Method({ - name: 'signTransaction', - call: 'personal_signTransaction', - params: 2, - inputFormatter: [formatters.inputTransactionFormatter, null] - }), - new Method({ - name: 'sign', - call: 'personal_sign', - params: 3, - inputFormatter: [formatters.inputSignFormatter, formatters.inputAddressFormatter, null] - }), - new Method({ - name: 'ecRecover', - call: 'personal_ecRecover', - params: 2, - inputFormatter: [formatters.inputSignFormatter, null] - }) - ]; - methods.forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager); - method.defaultBlock = _this.defaultBlock; - method.defaultAccount = _this.defaultAccount; - }); -}; - -core.addProviders(Personal); - - - -module.exports = Personal; - - diff --git a/truebit-implementation/node_modules/web3-eth/README.md b/truebit-implementation/node_modules/web3-eth/README.md deleted file mode 100644 index ac3ec3ff..00000000 --- a/truebit-implementation/node_modules/web3-eth/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# web3-eth - -This is a sub package of [web3.js][repo] - -This is the Eth package to be used [web3.js][repo]. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-eth -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-eth.js` in your html file. -This will expose the `Web3Eth` object on the window object. - - -## Usage - -```js -// in node.js -var Web3Eth = require('web3-eth'); - -var eth = new Web3Eth('ws://localhost:8546'); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-eth/package.json b/truebit-implementation/node_modules/web3-eth/package.json deleted file mode 100644 index cc47e7fd..00000000 --- a/truebit-implementation/node_modules/web3-eth/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "_from": "web3-eth@1.0.0-beta.36", - "_id": "web3-eth@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-uEa0UnbnNHUB4N2O1U+LsvxzSPJ/w3azy5115IseaUdDaiz6IFFgFfFP3ssauayQNCf7v2F44GXLfPhrNeb/Sw==", - "_location": "/web3-eth", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-eth@1.0.0-beta.36", - "name": "web3-eth", - "escapedName": "web3-eth", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3" - ], - "_resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.36.tgz", - "_shasum": "04a8c748d344c1accaa26d7d5d0eac0da7127f14", - "_spec": "web3-eth@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3", - "bundleDependencies": false, - "dependencies": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-eth-accounts": "1.0.0-beta.36", - "web3-eth-contract": "1.0.0-beta.36", - "web3-eth-ens": "1.0.0-beta.36", - "web3-eth-iban": "1.0.0-beta.36", - "web3-eth-personal": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module to interact with the Ethereum blockchain and smart contracts.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-eth", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-eth" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-eth/src/getNetworkType.js b/truebit-implementation/node_modules/web3-eth/src/getNetworkType.js deleted file mode 100644 index dea30b76..00000000 --- a/truebit-implementation/node_modules/web3-eth/src/getNetworkType.js +++ /dev/null @@ -1,78 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file getNetworkType.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); - -var getNetworkType = function (callback) { - var _this = this, - id; - - - return this.net.getId() - .then(function (givenId) { - - id = givenId; - - return _this.getBlock(0); - }) - .then(function (genesis) { - var returnValue = 'private'; - - if (genesis.hash === '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3' && - id === 1) { - returnValue = 'main'; - } - if (genesis.hash === '0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303' && - id === 2) { - returnValue = 'morden'; - } - if (genesis.hash === '0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d' && - id === 3) { - returnValue = 'ropsten'; - } - if (genesis.hash === '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177' && - id === 4) { - returnValue = 'rinkeby'; - } - if (genesis.hash === '0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9' && - id === 42) { - returnValue = 'kovan'; - } - - if (_.isFunction(callback)) { - callback(null, returnValue); - } - - return returnValue; - }) - .catch(function (err) { - if (_.isFunction(callback)) { - callback(err); - } else { - throw err; - } - }); -}; - -module.exports = getNetworkType; diff --git a/truebit-implementation/node_modules/web3-eth/src/index.js b/truebit-implementation/node_modules/web3-eth/src/index.js deleted file mode 100644 index f3c2b733..00000000 --- a/truebit-implementation/node_modules/web3-eth/src/index.js +++ /dev/null @@ -1,466 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var core = require('web3-core'); -var helpers = require('web3-core-helpers'); -var Subscriptions = require('web3-core-subscriptions').subscriptions; -var Method = require('web3-core-method'); -var utils = require('web3-utils'); -var Net = require('web3-net'); - -var ENS = require('web3-eth-ens'); -var Personal = require('web3-eth-personal'); -var BaseContract = require('web3-eth-contract'); -var Iban = require('web3-eth-iban'); -var Accounts = require('web3-eth-accounts'); -var abi = require('web3-eth-abi'); - -var getNetworkType = require('./getNetworkType.js'); -var formatter = helpers.formatters; - - -var blockCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber"; -}; - -var transactionFromBlockCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex'; -}; - -var uncleCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex'; -}; - -var getBlockTransactionCountCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber'; -}; - -var uncleCountCall = function (args) { - return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber'; -}; - - -var Eth = function Eth() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - // overwrite setProvider - var setProvider = this.setProvider; - this.setProvider = function () { - setProvider.apply(_this, arguments); - _this.net.setProvider.apply(_this, arguments); - _this.personal.setProvider.apply(_this, arguments); - _this.accounts.setProvider.apply(_this, arguments); - _this.Contract.setProvider(_this.currentProvider, _this.accounts); - }; - - - var defaultAccount = null; - var defaultBlock = 'latest'; - - Object.defineProperty(this, 'defaultAccount', { - get: function () { - return defaultAccount; - }, - set: function (val) { - if(val) { - defaultAccount = utils.toChecksumAddress(formatter.inputAddressFormatter(val)); - } - - // also set on the Contract object - _this.Contract.defaultAccount = defaultAccount; - _this.personal.defaultAccount = defaultAccount; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultAccount = defaultAccount; - }); - - return val; - }, - enumerable: true - }); - Object.defineProperty(this, 'defaultBlock', { - get: function () { - return defaultBlock; - }, - set: function (val) { - defaultBlock = val; - // also set on the Contract object - _this.Contract.defaultBlock = defaultBlock; - _this.personal.defaultBlock = defaultBlock; - - // update defaultBlock - methods.forEach(function(method) { - method.defaultBlock = defaultBlock; - }); - - return val; - }, - enumerable: true - }); - - - this.clearSubscriptions = _this._requestManager.clearSubscriptions; - - // add net - this.net = new Net(this.currentProvider); - // add chain detection - this.net.getNetworkType = getNetworkType.bind(this); - - // add accounts - this.accounts = new Accounts(this.currentProvider); - - // add personal - this.personal = new Personal(this.currentProvider); - this.personal.defaultAccount = this.defaultAccount; - - // create a proxy Contract type for this instance, as a Contract's provider - // is stored as a class member rather than an instance variable. If we do - // not create this proxy type, changing the provider in one instance of - // web3-eth would subsequently change the provider for _all_ contract - // instances! - var self = this; - var Contract = function Contract() { - BaseContract.apply(this, arguments); - - // when Eth.setProvider is called, call packageInit - // on all contract instances instantiated via this Eth - // instances. This will update the currentProvider for - // the contract instances - var _this = this; - var setProvider = self.setProvider; - self.setProvider = function() { - setProvider.apply(self, arguments); - core.packageInit(_this, [self.currentProvider]); - }; - }; - - Contract.setProvider = function() { - BaseContract.setProvider.apply(this, arguments); - }; - - // make our proxy Contract inherit from web3-eth-contract so that it has all - // the right functionality and so that instanceof and friends work properly - Contract.prototype = Object.create(BaseContract.prototype); - Contract.prototype.constructor = Contract; - - // add contract - this.Contract = Contract; - this.Contract.defaultAccount = this.defaultAccount; - this.Contract.defaultBlock = this.defaultBlock; - this.Contract.setProvider(this.currentProvider, this.accounts); - - // add IBAN - this.Iban = Iban; - - // add ABI - this.abi = abi; - - // add ENS - this.ens = new ENS(this); - - var methods = [ - new Method({ - name: 'getNodeInfo', - call: 'web3_clientVersion' - }), - new Method({ - name: 'getProtocolVersion', - call: 'eth_protocolVersion', - params: 0 - }), - new Method({ - name: 'getCoinbase', - call: 'eth_coinbase', - params: 0 - }), - new Method({ - name: 'isMining', - call: 'eth_mining', - params: 0 - }), - new Method({ - name: 'getHashrate', - call: 'eth_hashrate', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'isSyncing', - call: 'eth_syncing', - params: 0, - outputFormatter: formatter.outputSyncingFormatter - }), - new Method({ - name: 'getGasPrice', - call: 'eth_gasPrice', - params: 0, - outputFormatter: formatter.outputBigNumberFormatter - }), - new Method({ - name: 'getAccounts', - call: 'eth_accounts', - params: 0, - outputFormatter: utils.toChecksumAddress - }), - new Method({ - name: 'getBlockNumber', - call: 'eth_blockNumber', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getBalance', - call: 'eth_getBalance', - params: 2, - inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter], - outputFormatter: formatter.outputBigNumberFormatter - }), - new Method({ - name: 'getStorageAt', - call: 'eth_getStorageAt', - params: 3, - inputFormatter: [formatter.inputAddressFormatter, utils.numberToHex, formatter.inputDefaultBlockNumberFormatter] - }), - new Method({ - name: 'getCode', - call: 'eth_getCode', - params: 2, - inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter] - }), - new Method({ - name: 'getBlock', - call: blockCall, - params: 2, - inputFormatter: [formatter.inputBlockNumberFormatter, function (val) { return !!val; }], - outputFormatter: formatter.outputBlockFormatter - }), - new Method({ - name: 'getUncle', - call: uncleCall, - params: 2, - inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex], - outputFormatter: formatter.outputBlockFormatter, - - }), - new Method({ - name: 'getBlockTransactionCount', - call: getBlockTransactionCountCall, - params: 1, - inputFormatter: [formatter.inputBlockNumberFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getBlockUncleCount', - call: uncleCountCall, - params: 1, - inputFormatter: [formatter.inputBlockNumberFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'getTransaction', - call: 'eth_getTransactionByHash', - params: 1, - inputFormatter: [null], - outputFormatter: formatter.outputTransactionFormatter - }), - new Method({ - name: 'getTransactionFromBlock', - call: transactionFromBlockCall, - params: 2, - inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex], - outputFormatter: formatter.outputTransactionFormatter - }), - new Method({ - name: 'getTransactionReceipt', - call: 'eth_getTransactionReceipt', - params: 1, - inputFormatter: [null], - outputFormatter: formatter.outputTransactionReceiptFormatter - }), - new Method({ - name: 'getTransactionCount', - call: 'eth_getTransactionCount', - params: 2, - inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'sendSignedTransaction', - call: 'eth_sendRawTransaction', - params: 1, - inputFormatter: [null] - }), - new Method({ - name: 'signTransaction', - call: 'eth_signTransaction', - params: 1, - inputFormatter: [formatter.inputTransactionFormatter] - }), - new Method({ - name: 'sendTransaction', - call: 'eth_sendTransaction', - params: 1, - inputFormatter: [formatter.inputTransactionFormatter] - }), - new Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [formatter.inputSignFormatter, formatter.inputAddressFormatter], - transformPayload: function (payload) { - payload.params.reverse(); - return payload; - } - }), - new Method({ - name: 'call', - call: 'eth_call', - params: 2, - inputFormatter: [formatter.inputCallFormatter, formatter.inputDefaultBlockNumberFormatter] - }), - new Method({ - name: 'estimateGas', - call: 'eth_estimateGas', - params: 1, - inputFormatter: [formatter.inputCallFormatter], - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'submitWork', - call: 'eth_submitWork', - params: 3 - }), - new Method({ - name: 'getWork', - call: 'eth_getWork', - params: 0 - }), - new Method({ - name: 'getPastLogs', - call: 'eth_getLogs', - params: 1, - inputFormatter: [formatter.inputLogFormatter], - outputFormatter: formatter.outputLogFormatter - }), - - // subscriptions - new Subscriptions({ - name: 'subscribe', - type: 'eth', - subscriptions: { - 'newBlockHeaders': { - // TODO rename on RPC side? - subscriptionName: 'newHeads', // replace subscription with this name - params: 0, - outputFormatter: formatter.outputBlockFormatter - }, - 'pendingTransactions': { - subscriptionName: 'newPendingTransactions', // replace subscription with this name - params: 0 - }, - 'logs': { - params: 1, - inputFormatter: [formatter.inputLogFormatter], - outputFormatter: formatter.outputLogFormatter, - // DUBLICATE, also in web3-eth-contract - subscriptionHandler: function (output) { - if(output.removed) { - this.emit('changed', output); - } else { - this.emit('data', output); - } - - if (_.isFunction(this.callback)) { - this.callback(null, output, this); - } - } - }, - 'syncing': { - params: 0, - outputFormatter: formatter.outputSyncingFormatter, - subscriptionHandler: function (output) { - var _this = this; - - // fire TRUE at start - if(this._isSyncing !== true) { - this._isSyncing = true; - this.emit('changed', _this._isSyncing); - - if (_.isFunction(this.callback)) { - this.callback(null, _this._isSyncing, this); - } - - setTimeout(function () { - _this.emit('data', output); - - if (_.isFunction(_this.callback)) { - _this.callback(null, output, _this); - } - }, 0); - - // fire sync status - } else { - this.emit('data', output); - if (_.isFunction(_this.callback)) { - this.callback(null, output, this); - } - - // wait for some time before fireing the FALSE - clearTimeout(this._isSyncingTimeout); - this._isSyncingTimeout = setTimeout(function () { - if(output.currentBlock > output.highestBlock - 200) { - _this._isSyncing = false; - _this.emit('changed', _this._isSyncing); - - if (_.isFunction(_this.callback)) { - _this.callback(null, _this._isSyncing, _this); - } - } - }, 500); - } - } - } - } - }) - ]; - - methods.forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager, _this.accounts); // second param means is eth.accounts (necessary for wallet signing) - method.defaultBlock = _this.defaultBlock; - method.defaultAccount = _this.defaultAccount; - }); - -}; - -core.addProviders(Eth); - - -module.exports = Eth; - diff --git a/truebit-implementation/node_modules/web3-net/README.md b/truebit-implementation/node_modules/web3-net/README.md deleted file mode 100644 index a8160c25..00000000 --- a/truebit-implementation/node_modules/web3-net/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# web3-net - -This is a sub package of [web3.js][repo] - -This is the net package to be used in other web3.js packages. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-net -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-net.js` in your html file. -This will expose the `Web3Net` object on the window object. - - -## Usage - -```js -// in node.js -var Web3Net = require('web3-net'); - -var net = new Web3Net('ws://localhost:8546'); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-net/package.json b/truebit-implementation/node_modules/web3-net/package.json deleted file mode 100644 index dc342835..00000000 --- a/truebit-implementation/node_modules/web3-net/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "_from": "web3-net@1.0.0-beta.36", - "_id": "web3-net@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-BriXK0Pjr6Hc/VDq1Vn8vyOum4JB//wpCjgeGziFD6jC7Of8YaWC7AJYXje89OckzfcqX1aJyJlBwDpasNkAzQ==", - "_location": "/web3-net", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-net@1.0.0-beta.36", - "name": "web3-net", - "escapedName": "web3-net", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3", - "/web3-eth", - "/web3-eth-personal", - "/web3-shh" - ], - "_resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.36.tgz", - "_shasum": "396cd35cb40934ed022a1f44a8a642d3908c41eb", - "_spec": "web3-net@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3", - "bundleDependencies": false, - "dependencies": { - "web3-core": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module to interact with the Ethereum nodes networking properties.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-net", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-net" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-net/src/index.js b/truebit-implementation/node_modules/web3-net/src/index.js deleted file mode 100644 index ebf1b456..00000000 --- a/truebit-implementation/node_modules/web3-net/src/index.js +++ /dev/null @@ -1,67 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var core = require('web3-core'); -var Method = require('web3-core-method'); -var utils = require('web3-utils'); - - -var Net = function () { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - - [ - new Method({ - name: 'getId', - call: 'net_version', - params: 0, - outputFormatter: utils.hexToNumber - }), - new Method({ - name: 'isListening', - call: 'net_listening', - params: 0 - }), - new Method({ - name: 'getPeerCount', - call: 'net_peerCount', - params: 0, - outputFormatter: utils.hexToNumber - }) - ].forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager); - }); - -}; - -core.addProviders(Net); - - -module.exports = Net; - - diff --git a/truebit-implementation/node_modules/web3-providers-http/README.md b/truebit-implementation/node_modules/web3-providers-http/README.md deleted file mode 100644 index ac468533..00000000 --- a/truebit-implementation/node_modules/web3-providers-http/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# web3-providers-http - -*This is a sub package of [web3.js][repo]* - -This is a HTTP provider for [web3.js][repo]. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-providers-http -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-providers-http.js` in your html file. -This will expose the `Web3HttpProvider` object on the window object. - - -## Usage - -```js -// in node.js -var Web3HttpProvider = require('web3-providers-http'); - -var options = { - timeout: 20000, // milliseconds, - headers: [{name: 'Access-Control-Allow-Origin', value: '*'},{...}] -}; -var http = new Web3HttpProvider('http://localhost:8545', options); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-providers-http/package.json b/truebit-implementation/node_modules/web3-providers-http/package.json deleted file mode 100644 index 00ffe2ea..00000000 --- a/truebit-implementation/node_modules/web3-providers-http/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "_from": "web3-providers-http@1.0.0-beta.36", - "_id": "web3-providers-http@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-KLSqMS59nRdpet9B0B64MKgtM3n9wAHTcAHJ03hv79avQNTjHxtjZm0ttcjcFUPpWDgTCtcYCa7tqaYo9Pbeog==", - "_location": "/web3-providers-http", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-providers-http@1.0.0-beta.36", - "name": "web3-providers-http", - "escapedName": "web3-providers-http", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core-requestmanager" - ], - "_resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.36.tgz", - "_shasum": "c1937a2e64f8db7cd30f166794e37cf0fcca1131", - "_spec": "web3-providers-http@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core-requestmanager", - "bundleDependencies": false, - "dependencies": { - "web3-core-helpers": "1.0.0-beta.36", - "xhr2-cookies": "1.1.0" - }, - "deprecated": false, - "description": "Module to handle web3 RPC connections over HTTP.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-providers-http", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-providers-http" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-providers-http/src/index.js b/truebit-implementation/node_modules/web3-providers-http/src/index.js deleted file mode 100644 index 8a4ec985..00000000 --- a/truebit-implementation/node_modules/web3-providers-http/src/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file httpprovider.js - * @authors: - * Marek Kotewicz - * Marian Oancea - * Fabian Vogelsteller - * @date 2015 - */ - -var errors = require('web3-core-helpers').errors; -var XHR2 = require('xhr2-cookies').XMLHttpRequest // jshint ignore: line -var http = require('http'); -var https = require('https'); - - -/** - * HttpProvider should be used to send rpc calls over http - */ -var HttpProvider = function HttpProvider(host, options) { - options = options || {}; - this.host = host || 'http://localhost:8545'; - if (this.host.substring(0,5) === "https"){ - this.httpsAgent = new https.Agent({ keepAlive: true }); - }else{ - this.httpAgent = new http.Agent({ keepAlive: true }); - } - this.timeout = options.timeout || 0; - this.headers = options.headers; - this.connected = false; -}; - -HttpProvider.prototype._prepareRequest = function(){ - var request = new XHR2(); - request.nodejsSet({ - httpsAgent:this.httpsAgent, - httpAgent:this.httpAgent - }); - - request.open('POST', this.host, true); - request.setRequestHeader('Content-Type','application/json'); - request.timeout = this.timeout && this.timeout !== 1 ? this.timeout : 0; - request.withCredentials = true; - - if(this.headers) { - this.headers.forEach(function(header) { - request.setRequestHeader(header.name, header.value); - }); - } - - return request; -}; - -/** - * Should be used to make async request - * - * @method send - * @param {Object} payload - * @param {Function} callback triggered on end with (err, result) - */ -HttpProvider.prototype.send = function (payload, callback) { - var _this = this; - var request = this._prepareRequest(); - - request.onreadystatechange = function() { - if (request.readyState === 4 && request.timeout !== 1) { - var result = request.responseText; - var error = null; - - try { - result = JSON.parse(result); - } catch(e) { - error = errors.InvalidResponse(request.responseText); - } - - _this.connected = true; - callback(error, result); - } - }; - - request.ontimeout = function() { - _this.connected = false; - callback(errors.ConnectionTimeout(this.timeout)); - }; - - try { - request.send(JSON.stringify(payload)); - } catch(error) { - this.connected = false; - callback(errors.InvalidConnection(this.host)); - } -}; - -HttpProvider.prototype.disconnect = function () { - //NO OP -}; - - -module.exports = HttpProvider; diff --git a/truebit-implementation/node_modules/web3-providers-ipc/README.md b/truebit-implementation/node_modules/web3-providers-ipc/README.md deleted file mode 100644 index 03a329ea..00000000 --- a/truebit-implementation/node_modules/web3-providers-ipc/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# web3-providers-ipc - -This is a sub package of [web3.js][repo] - -This is a IPC provider for [web3.js][repo]. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-providers-ipc -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-providers-ipc.js` in your html file. -This will expose the `Web3IpcProvider` object on the window object. - - -## Usage - -```js -// in node.js -var Web3IpcProvider = require('web3-providers-ipc'); -var net = require(net); - -var ipc = new Web3IpcProvider('/Users/me/Library/Ethereum/geth.ipc', net); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-providers-ipc/package.json b/truebit-implementation/node_modules/web3-providers-ipc/package.json deleted file mode 100644 index 2a79993d..00000000 --- a/truebit-implementation/node_modules/web3-providers-ipc/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "_from": "web3-providers-ipc@1.0.0-beta.36", - "_id": "web3-providers-ipc@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-iEUrmdd2CzoWgp+75/ydom/1IaoLw95qkAzsgwjjZp1waDncHP/cvVGX74+fbUx4hRaPdchyzxCQfNpgLDmNjQ==", - "_location": "/web3-providers-ipc", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-providers-ipc@1.0.0-beta.36", - "name": "web3-providers-ipc", - "escapedName": "web3-providers-ipc", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core-requestmanager" - ], - "_resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.36.tgz", - "_shasum": "0c78efb4ed6b0305ec830e1e0b785e61217ee605", - "_spec": "web3-providers-ipc@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core-requestmanager", - "bundleDependencies": false, - "dependencies": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Module to handle web3 RPC connections over IPC sockets.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-providers-ipc", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-providers-ipc" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-providers-ipc/src/index.js b/truebit-implementation/node_modules/web3-providers-ipc/src/index.js deleted file mode 100644 index 8e8002bb..00000000 --- a/truebit-implementation/node_modules/web3-providers-ipc/src/index.js +++ /dev/null @@ -1,315 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** @file index.js - * @authors: - * Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; -var oboe = require('oboe'); - - -var IpcProvider = function IpcProvider(path, net) { - var _this = this; - this.responseCallbacks = {}; - this.notificationCallbacks = []; - this.path = path; - this.connected = false; - - this.connection = net.connect({path: this.path}); - - this.addDefaultEvents(); - - // LISTEN FOR CONNECTION RESPONSES - var callback = function(result) { - /*jshint maxcomplexity: 6 */ - - var id = null; - - // get the id which matches the returned id - if(_.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // notification - if(!id && result.method.indexOf('_subscription') !== -1) { - _this.notificationCallbacks.forEach(function(callback){ - if(_.isFunction(callback)) - callback(result); - }); - - // fire the callback - } else if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }; - - // use oboe.js for Sockets - if (net.constructor.name === 'Socket') { - oboe(this.connection) - .done(callback); - } else { - this.connection.on('data', function(data){ - _this._parseResponse(data.toString()).forEach(callback); - }); - } -}; - -/** -Will add the error and end event to timeout existing calls - -@method addDefaultEvents -*/ -IpcProvider.prototype.addDefaultEvents = function(){ - var _this = this; - - this.connection.on('connect', function(){ - _this.connected = true; - }); - - this.connection.on('close', function(){ - _this.connected = false; - }); - - this.connection.on('error', function(){ - _this._timeout(); - }); - - this.connection.on('end', function(){ - _this._timeout(); - }); - - this.connection.on('timeout', function(){ - _this._timeout(); - }); -}; - - -/** - Will parse the response and make an array out of it. - - NOTE, this exists for backwards compatibility reasons. - - @method _parseResponse - @param {String} data - */ -IpcProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** -Get the adds a callback to the responseCallbacks object, -which will be called if a response matching the response Id will arrive. - -@method _addResponseCallback -*/ -IpcProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; -}; - -/** -Timeout all requests when the end/error event is fired - -@method _timeout -*/ -IpcProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on IPC')); - delete this.responseCallbacks[key]; - } - } -}; - -/** - Try to reconnect - - @method reconnect - */ -IpcProvider.prototype.reconnect = function() { - this.connection.connect({path: this.path}); -}; - - -IpcProvider.prototype.send = function (payload, callback) { - // try reconnect, when connection is gone - if(!this.connection.writable) - this.connection.connect({path: this.path}); - - - this.connection.write(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -/** -Subscribes to provider events.provider - -@method on -@param {String} type 'notification', 'connect', 'error', 'end' or 'data' -@param {Function} callback the callback to call -*/ -IpcProvider.prototype.on = function (type, callback) { - - if(typeof callback !== 'function') - throw new Error('The second parameter callback must be a function.'); - - switch(type){ - case 'data': - this.notificationCallbacks.push(callback); - break; - - // adds error, end, timeout, connect - default: - this.connection.on(type, callback); - break; - } -}; - -/** - Subscribes to provider events.provider - - @method on - @param {String} type 'connect', 'error', 'end' or 'data' - @param {Function} callback the callback to call - */ -IpcProvider.prototype.once = function (type, callback) { - - if(typeof callback !== 'function') - throw new Error('The second parameter callback must be a function.'); - - this.connection.once(type, callback); -}; - -/** -Removes event listener - -@method removeListener -@param {String} type 'data', 'connect', 'error', 'end' or 'data' -@param {Function} callback the callback to call -*/ -IpcProvider.prototype.removeListener = function (type, callback) { - var _this = this; - - switch(type){ - case 'data': - this.notificationCallbacks.forEach(function(cb, index){ - if(cb === callback) - _this.notificationCallbacks.splice(index, 1); - }); - break; - - default: - this.connection.removeListener(type, callback); - break; - } -}; - -/** -Removes all event listeners - -@method removeAllListeners -@param {String} type 'data', 'connect', 'error', 'end' or 'data' -*/ -IpcProvider.prototype.removeAllListeners = function (type) { - switch(type){ - case 'data': - this.notificationCallbacks = []; - break; - - default: - this.connection.removeAllListeners(type); - break; - } -}; - -/** -Resets the providers, clears all callbacks - -@method reset -*/ -IpcProvider.prototype.reset = function () { - this._timeout(); - this.notificationCallbacks = []; - - this.connection.removeAllListeners('error'); - this.connection.removeAllListeners('end'); - this.connection.removeAllListeners('timeout'); - - this.addDefaultEvents(); -}; - -module.exports = IpcProvider; - diff --git a/truebit-implementation/node_modules/web3-providers-ws/README.md b/truebit-implementation/node_modules/web3-providers-ws/README.md deleted file mode 100644 index 72553c48..00000000 --- a/truebit-implementation/node_modules/web3-providers-ws/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# web3-providers-ws - -This is a sub package of [web3.js][repo] - -This is a websocket provider for [web3.js][repo]. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-providers-ws -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-providers-ws.js` in your html file. -This will expose the `Web3WsProvider` object on the window object. - - -## Usage - -```js -// in node.js -var Web3WsProvider = require('web3-providers-ws'); - -var options = { timeout: 30000, headers: {authorization: 'Basic username:password'} } // set a custom timeout at 30 seconds, and credentials (you can also add the credentials to the URL: ws://username:password@localhost:8546) -var ws = new Web3WsProvider('ws://localhost:8546', options); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js diff --git a/truebit-implementation/node_modules/web3-providers-ws/package.json b/truebit-implementation/node_modules/web3-providers-ws/package.json deleted file mode 100644 index f196094d..00000000 --- a/truebit-implementation/node_modules/web3-providers-ws/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "_from": "web3-providers-ws@1.0.0-beta.36", - "_id": "web3-providers-ws@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-wAnENuZx75T5ZSrT2De2LOaUuPf2yRjq1VfcbD7+Zd79F3DZZLBJcPyCNVQ1U0fAXt0wfgCKl7sVw5pffqR9Bw==", - "_location": "/web3-providers-ws", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-providers-ws@1.0.0-beta.36", - "name": "web3-providers-ws", - "escapedName": "web3-providers-ws", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3-core-requestmanager" - ], - "_resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.36.tgz", - "_shasum": "27b74082c7adfa0cb5a65535eb312e49008c97c3", - "_spec": "web3-providers-ws@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-core-requestmanager", - "bundleDependencies": false, - "dependencies": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" - }, - "deprecated": false, - "description": "Module to handle web3 RPC connections over WebSockets.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-providers-ws", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-providers-ws" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-providers-ws/src/index.js b/truebit-implementation/node_modules/web3-providers-ws/src/index.js deleted file mode 100644 index 7d298615..00000000 --- a/truebit-implementation/node_modules/web3-providers-ws/src/index.js +++ /dev/null @@ -1,401 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** @file WebsocketProvider.js - * @authors: - * Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var _ = require('underscore'); -var errors = require('web3-core-helpers').errors; - -var Ws = null; -var _btoa = null; -var parseURL = null; -if (typeof window !== 'undefined' && typeof window.WebSocket !== 'undefined') { - Ws = function(url, protocols) { - return new window.WebSocket(url, protocols); - }; - _btoa = btoa; - parseURL = function(url) { - return new URL(url); - }; -} else { - Ws = require('websocket').w3cwebsocket; - _btoa = function(str) { - return Buffer(str).toString('base64'); - }; - var url = require('url'); - if (url.URL) { - // Use the new Node 6+ API for parsing URLs that supports username/password - var newURL = url.URL; - parseURL = function(url) { - return new newURL(url); - }; - } - else { - // Web3 supports Node.js 5, so fall back to the legacy URL API if necessary - parseURL = require('url').parse; - } -} -// Default connection ws://localhost:8546 - - - - -var WebsocketProvider = function WebsocketProvider(url, options) { - var _this = this; - this.responseCallbacks = {}; - this.notificationCallbacks = []; - - options = options || {}; - this._customTimeout = options.timeout; - - // The w3cwebsocket implementation does not support Basic Auth - // username/password in the URL. So generate the basic auth header, and - // pass through with any additional headers supplied in constructor - var parsedURL = parseURL(url); - var headers = options.headers || {}; - var protocol = options.protocol || undefined; - if (parsedURL.username && parsedURL.password) { - headers.authorization = 'Basic ' + _btoa(parsedURL.username + ':' + parsedURL.password); - } - - // Allow a custom client configuration - var clientConfig = options.clientConfig || undefined; - - // When all node core implementations that do not have the - // WHATWG compatible URL parser go out of service this line can be removed. - if (parsedURL.auth) { - headers.authorization = 'Basic ' + _btoa(parsedURL.auth); - } - this.connection = new Ws(url, protocol, undefined, headers, undefined, clientConfig); - - this.addDefaultEvents(); - - - // LISTEN FOR CONNECTION RESPONSES - this.connection.onmessage = function(e) { - /*jshint maxcomplexity: 6 */ - var data = (typeof e.data === 'string') ? e.data : ''; - - _this._parseResponse(data).forEach(function(result){ - - var id = null; - - // get the id which matches the returned id - if(_.isArray(result)) { - result.forEach(function(load){ - if(_this.responseCallbacks[load.id]) - id = load.id; - }); - } else { - id = result.id; - } - - // notification - if(!id && result && result.method && result.method.indexOf('_subscription') !== -1) { - _this.notificationCallbacks.forEach(function(callback){ - if(_.isFunction(callback)) - callback(result); - }); - - // fire the callback - } else if(_this.responseCallbacks[id]) { - _this.responseCallbacks[id](null, result); - delete _this.responseCallbacks[id]; - } - }); - }; - - // make property `connected` which will return the current connection status - Object.defineProperty(this, 'connected', { - get: function () { - return this.connection && this.connection.readyState === this.connection.OPEN; - }, - enumerable: true, - }); -}; - -/** - Will add the error and end event to timeout existing calls - - @method addDefaultEvents - */ -WebsocketProvider.prototype.addDefaultEvents = function(){ - var _this = this; - - this.connection.onerror = function(){ - _this._timeout(); - }; - - this.connection.onclose = function(){ - _this._timeout(); - - // reset all requests and callbacks - _this.reset(); - }; - - // this.connection.on('timeout', function(){ - // _this._timeout(); - // }); -}; - -/** - Will parse the response and make an array out of it. - - @method _parseResponse - @param {String} data - */ -WebsocketProvider.prototype._parseResponse = function(data) { - var _this = this, - returnValues = []; - - // DE-CHUNKER - var dechunkedData = data - .replace(/\}[\n\r]?\{/g,'}|--|{') // }{ - .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{ - .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{ - .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{ - .split('|--|'); - - dechunkedData.forEach(function(data){ - - // prepend the last chunk - if(_this.lastChunk) - data = _this.lastChunk + data; - - var result = null; - - try { - result = JSON.parse(data); - - } catch(e) { - - _this.lastChunk = data; - - // start timeout to cancel all requests - clearTimeout(_this.lastChunkTimeout); - _this.lastChunkTimeout = setTimeout(function(){ - _this._timeout(); - throw errors.InvalidResponse(data); - }, 1000 * 15); - - return; - } - - // cancel timeout and set chunk to null - clearTimeout(_this.lastChunkTimeout); - _this.lastChunk = null; - - if(result) - returnValues.push(result); - }); - - return returnValues; -}; - - -/** - Adds a callback to the responseCallbacks object, - which will be called if a response matching the response Id will arrive. - - @method _addResponseCallback - */ -WebsocketProvider.prototype._addResponseCallback = function(payload, callback) { - var id = payload.id || payload[0].id; - var method = payload.method || payload[0].method; - - this.responseCallbacks[id] = callback; - this.responseCallbacks[id].method = method; - - var _this = this; - - // schedule triggering the error response if a custom timeout is set - if (this._customTimeout) { - setTimeout(function () { - if (_this.responseCallbacks[id]) { - _this.responseCallbacks[id](errors.ConnectionTimeout(_this._customTimeout)); - delete _this.responseCallbacks[id]; - } - }, this._customTimeout); - } -}; - -/** - Timeout all requests when the end/error event is fired - - @method _timeout - */ -WebsocketProvider.prototype._timeout = function() { - for(var key in this.responseCallbacks) { - if(this.responseCallbacks.hasOwnProperty(key)){ - this.responseCallbacks[key](errors.InvalidConnection('on WS')); - delete this.responseCallbacks[key]; - } - } -}; - - -WebsocketProvider.prototype.send = function (payload, callback) { - var _this = this; - - if (this.connection.readyState === this.connection.CONNECTING) { - setTimeout(function () { - _this.send(payload, callback); - }, 10); - return; - } - - // try reconnect, when connection is gone - // if(!this.connection.writable) - // this.connection.connect({url: this.url}); - if (this.connection.readyState !== this.connection.OPEN) { - console.error('connection not open on send()'); - if (typeof this.connection.onerror === 'function') { - this.connection.onerror(new Error('connection not open')); - } else { - console.error('no error callback'); - } - callback(new Error('connection not open')); - return; - } - - this.connection.send(JSON.stringify(payload)); - this._addResponseCallback(payload, callback); -}; - -/** - Subscribes to provider events.provider - - @method on - @param {String} type 'notifcation', 'connect', 'error', 'end' or 'data' - @param {Function} callback the callback to call - */ -WebsocketProvider.prototype.on = function (type, callback) { - - if(typeof callback !== 'function') - throw new Error('The second parameter callback must be a function.'); - - switch(type){ - case 'data': - this.notificationCallbacks.push(callback); - break; - - case 'connect': - this.connection.onopen = callback; - break; - - case 'end': - this.connection.onclose = callback; - break; - - case 'error': - this.connection.onerror = callback; - break; - - // default: - // this.connection.on(type, callback); - // break; - } -}; - -// TODO add once - -/** - Removes event listener - - @method removeListener - @param {String} type 'notifcation', 'connect', 'error', 'end' or 'data' - @param {Function} callback the callback to call - */ -WebsocketProvider.prototype.removeListener = function (type, callback) { - var _this = this; - - switch(type){ - case 'data': - this.notificationCallbacks.forEach(function(cb, index){ - if(cb === callback) - _this.notificationCallbacks.splice(index, 1); - }); - break; - - // TODO remvoving connect missing - - // default: - // this.connection.removeListener(type, callback); - // break; - } -}; - -/** - Removes all event listeners - - @method removeAllListeners - @param {String} type 'notifcation', 'connect', 'error', 'end' or 'data' - */ -WebsocketProvider.prototype.removeAllListeners = function (type) { - switch(type){ - case 'data': - this.notificationCallbacks = []; - break; - - // TODO remvoving connect properly missing - - case 'connect': - this.connection.onopen = null; - break; - - case 'end': - this.connection.onclose = null; - break; - - case 'error': - this.connection.onerror = null; - break; - - default: - // this.connection.removeAllListeners(type); - break; - } -}; - -/** - Resets the providers, clears all callbacks - - @method reset - */ -WebsocketProvider.prototype.reset = function () { - this._timeout(); - this.notificationCallbacks = []; - - // this.connection.removeAllListeners('error'); - // this.connection.removeAllListeners('end'); - // this.connection.removeAllListeners('timeout'); - - this.addDefaultEvents(); -}; - -WebsocketProvider.prototype.disconnect = function () { - if (this.connection) { - this.connection.close(); - } -}; - -module.exports = WebsocketProvider; diff --git a/truebit-implementation/node_modules/web3-shh/README.md b/truebit-implementation/node_modules/web3-shh/README.md deleted file mode 100644 index 7b2bf688..00000000 --- a/truebit-implementation/node_modules/web3-shh/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# web3-shh - -This is a sub package of [web3.js][repo] - -This is the whisper v5 package. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-shh -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-shh.js` in your html file. -This will expose the `Web3Personal` object on the window object. - - -## Usage - -```js -// in node.js -var Web3Personal = require('web3-shh'); - -var shh = new Web3Personal('ws://localhost:8546'); -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-shh/package.json b/truebit-implementation/node_modules/web3-shh/package.json deleted file mode 100644 index 41fb1598..00000000 --- a/truebit-implementation/node_modules/web3-shh/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "_from": "web3-shh@1.0.0-beta.36", - "_id": "web3-shh@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-bREGHS/WprYFSvGUhyIk8RSpT2Z5SvJOKGBrsUW2nDIMWO6z0Op8E7fzC6GXY2HZfZliAqq6LirbXLgcLRWuPw==", - "_location": "/web3-shh", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-shh@1.0.0-beta.36", - "name": "web3-shh", - "escapedName": "web3-shh", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3" - ], - "_resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.36.tgz", - "_shasum": "6ff297594480edefc710d9d287765a0c4a5d5af1", - "_spec": "web3-shh@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3", - "bundleDependencies": false, - "dependencies": { - "web3-core": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Web3 module to interact with the Whisper messaging protocol.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-shh", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-shh" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-shh/src/index.js b/truebit-implementation/node_modules/web3-shh/src/index.js deleted file mode 100644 index d723d884..00000000 --- a/truebit-implementation/node_modules/web3-shh/src/index.js +++ /dev/null @@ -1,189 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -"use strict"; - -var core = require('web3-core'); -var Subscriptions = require('web3-core-subscriptions').subscriptions; -var Method = require('web3-core-method'); -// var formatters = require('web3-core-helpers').formatters; -var Net = require('web3-net'); - - -var Shh = function Shh() { - var _this = this; - - // sets _requestmanager - core.packageInit(this, arguments); - - // overwrite setProvider - var setProvider = this.setProvider; - this.setProvider = function () { - setProvider.apply(_this, arguments); - _this.net.setProvider.apply(_this, arguments); - }; - - this.clearSubscriptions = _this._requestManager.clearSubscriptions; - - this.net = new Net(this.currentProvider); - - - [ - new Subscriptions({ - name: 'subscribe', - type: 'shh', - subscriptions: { - 'messages': { - params: 1 - // inputFormatter: [formatters.inputPostFormatter], - // outputFormatter: formatters.outputPostFormatter - } - } - }), - - new Method({ - name: 'getVersion', - call: 'shh_version', - params: 0 - }), - new Method({ - name: 'getInfo', - call: 'shh_info', - params: 0 - }), - new Method({ - name: 'setMaxMessageSize', - call: 'shh_setMaxMessageSize', - params: 1 - }), - new Method({ - name: 'setMinPoW', - call: 'shh_setMinPoW', - params: 1 - }), - new Method({ - name: 'markTrustedPeer', - call: 'shh_markTrustedPeer', - params: 1 - }), - new Method({ - name: 'newKeyPair', - call: 'shh_newKeyPair', - params: 0 - }), - new Method({ - name: 'addPrivateKey', - call: 'shh_addPrivateKey', - params: 1 - }), - new Method({ - name: 'deleteKeyPair', - call: 'shh_deleteKeyPair', - params: 1 - }), - new Method({ - name: 'hasKeyPair', - call: 'shh_hasKeyPair', - params: 1 - }), - new Method({ - name: 'getPublicKey', - call: 'shh_getPublicKey', - params: 1 - }), - new Method({ - name: 'getPrivateKey', - call: 'shh_getPrivateKey', - params: 1 - }), - new Method({ - name: 'newSymKey', - call: 'shh_newSymKey', - params: 0 - }), - new Method({ - name: 'addSymKey', - call: 'shh_addSymKey', - params: 1 - }), - new Method({ - name: 'generateSymKeyFromPassword', - call: 'shh_generateSymKeyFromPassword', - params: 1 - }), - new Method({ - name: 'hasSymKey', - call: 'shh_hasSymKey', - params: 1 - }), - new Method({ - name: 'getSymKey', - call: 'shh_getSymKey', - params: 1 - }), - new Method({ - name: 'deleteSymKey', - call: 'shh_deleteSymKey', - params: 1 - }), - - new Method({ - name: 'newMessageFilter', - call: 'shh_newMessageFilter', - params: 1 - }), - new Method({ - name: 'getFilterMessages', - call: 'shh_getFilterMessages', - params: 1 - }), - new Method({ - name: 'deleteMessageFilter', - call: 'shh_deleteMessageFilter', - params: 1 - }), - - new Method({ - name: 'post', - call: 'shh_post', - params: 1, - inputFormatter: [null] - }), - - new Method({ - name: 'unsubscribe', - call: 'shh_unsubscribe', - params: 1 - }) - ].forEach(function(method) { - method.attachToObject(_this); - method.setRequestManager(_this._requestManager); - }); -}; - -core.addProviders(Shh); - - - -module.exports = Shh; - - diff --git a/truebit-implementation/node_modules/web3-utils/README.md b/truebit-implementation/node_modules/web3-utils/README.md deleted file mode 100644 index 11c1b810..00000000 --- a/truebit-implementation/node_modules/web3-utils/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# web3-utils - -This is a sub package of [web3.js][repo] - -This contains useful utility functions for Dapp developers. -Please read the [documentation][docs] for more. - -## Installation - -### Node.js - -```bash -npm install web3-utils -``` - -### In the Browser - -Build running the following in the [web3.js][repo] repository: - -```bash -npm run-script build-all -``` - -Then include `dist/web3-utils.js` in your html file. -This will expose the `Web3Utils` object on the window object. - - -## Usage - -```js -// in node.js -var Web3Utils = require('web3-utils'); -console.log(Web3Utils); -{ - sha3: function(){}, - soliditySha3: function(){}, - isAddress: function(){}, - ... -} -``` - - -[docs]: http://web3js.readthedocs.io/en/1.0/ -[repo]: https://github.com/ethereum/web3.js - - diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/.npmignore b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/.npmignore deleted file mode 100644 index 6d1eebbd..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -benchmarks/ -coverage/ -node_modules/ -npm-debug.log -1.js -logo.png diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/.travis.yml b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/.travis.yml deleted file mode 100644 index 936b7b78..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -sudo: false -language: node_js -node_js: - - "0.10" - - "0.12" - - "4" - - "5" -env: - matrix: - - TEST_SUITE=unit -matrix: - include: - - node_js: "4" - env: TEST_SUITE=lint -script: npm run $TEST_SUITE diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/README.md b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/README.md deleted file mode 100644 index fee65baa..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# bn.js - -> BigNum in pure javascript - -[![Build Status](https://secure.travis-ci.org/indutny/bn.js.png)](http://travis-ci.org/indutny/bn.js) - -## Install -`npm install --save bn.js` - -## Usage - -```js -const BN = require('bn.js'); - -var a = new BN('dead', 16); -var b = new BN('101010', 2); - -var res = a.add(b); -console.log(res.toString(10)); // 57047 -``` - -**Note**: decimals are not supported in this library. - -## Notation - -### Prefixes - -There are several prefixes to instructions that affect the way the work. Here -is the list of them in the order of appearance in the function name: - -* `i` - perform operation in-place, storing the result in the host object (on - which the method was invoked). Might be used to avoid number allocation costs -* `u` - unsigned, ignore the sign of operands when performing operation, or - always return positive value. Second case applies to reduction operations - like `mod()`. In such cases if the result will be negative - modulo will be - added to the result to make it positive - -### Postfixes - -The only available postfix at the moment is: - -* `n` - which means that the argument of the function must be a plain JavaScript - number - -### Examples - -* `a.iadd(b)` - perform addition on `a` and `b`, storing the result in `a` -* `a.pmod(b)` - reduce `a` modulo `b`, returning positive value -* `a.iushln(13)` - shift bits of `a` left by 13 - -## Instructions - -Prefixes/postfixes are put in parens at the of the line. `endian` - could be -either `le` (little-endian) or `be` (big-endian). - -### Utilities - -* `a.clone()` - clone number -* `a.toString(base, length)` - convert to base-string and pad with zeroes -* `a.toNumber()` - convert to Javascript Number (limited to 53 bits) -* `a.toJSON()` - convert to JSON compatible hex string (alias of `toString(16)`) -* `a.toArray(endian, length)` - convert to byte `Array`, and optionally zero - pad to length, throwing if already exceeding -* `a.toArrayLike(type, endian, length)` - convert to an instance of `type`, - which must behave like an `Array` -* `a.toBuffer(endian, length)` - convert to Node.js Buffer (if available) -* `a.bitLength()` - get number of bits occupied -* `a.zeroBits()` - return number of less-significant consequent zero bits - (example: `1010000` has 4 zero bits) -* `a.byteLength()` - return number of bytes occupied -* `a.isNeg()` - true if the number is negative -* `a.isEven()` - no comments -* `a.isOdd()` - no comments -* `a.isZero()` - no comments -* `a.cmp(b)` - compare numbers and return `-1` (a `<` b), `0` (a `==` b), or `1` (a `>` b) - depending on the comparison result (`ucmp`, `cmpn`) -* `a.lt(b)` - `a` less than `b` (`n`) -* `a.lte(b)` - `a` less than or equals `b` (`n`) -* `a.gt(b)` - `a` greater than `b` (`n`) -* `a.gte(b)` - `a` greater than or equals `b` (`n`) -* `a.eq(b)` - `a` equals `b` (`n`) -* `a.toTwos(width)` - convert to two's complement representation, where `width` is bit width -* `a.fromTwos(width)` - convert from two's complement representation, where `width` is the bit width -* `a.isBN(object)` - returns true if the supplied `object` is a BN.js instance - -### Arithmetics - -* `a.neg()` - negate sign (`i`) -* `a.abs()` - absolute value (`i`) -* `a.add(b)` - addition (`i`, `n`, `in`) -* `a.sub(b)` - subtraction (`i`, `n`, `in`) -* `a.mul(b)` - multiply (`i`, `n`, `in`) -* `a.sqr()` - square (`i`) -* `a.pow(b)` - raise `a` to the power of `b` -* `a.div(b)` - divide (`divn`, `idivn`) -* `a.mod(b)` - reduct (`u`, `n`) (but no `umodn`) -* `a.divRound(b)` - rounded division - -### Bit operations - -* `a.or(b)` - or (`i`, `u`, `iu`) -* `a.and(b)` - and (`i`, `u`, `iu`, `andln`) (NOTE: `andln` is going to be replaced - with `andn` in future) -* `a.xor(b)` - xor (`i`, `u`, `iu`) -* `a.setn(b)` - set specified bit to `1` -* `a.shln(b)` - shift left (`i`, `u`, `iu`) -* `a.shrn(b)` - shift right (`i`, `u`, `iu`) -* `a.testn(b)` - test if specified bit is set -* `a.maskn(b)` - clear bits with indexes higher or equal to `b` (`i`) -* `a.bincn(b)` - add `1 << b` to the number -* `a.notn(w)` - not (for the width specified by `w`) (`i`) - -### Reduction - -* `a.gcd(b)` - GCD -* `a.egcd(b)` - Extended GCD results (`{ a: ..., b: ..., gcd: ... }`) -* `a.invm(b)` - inverse `a` modulo `b` - -## Fast reduction - -When doing lots of reductions using the same modulo, it might be beneficial to -use some tricks: like [Montgomery multiplication][0], or using special algorithm -for [Mersenne Prime][1]. - -### Reduction context - -To enable this tricks one should create a reduction context: - -```js -var red = BN.red(num); -``` -where `num` is just a BN instance. - -Or: - -```js -var red = BN.red(primeName); -``` - -Where `primeName` is either of these [Mersenne Primes][1]: - -* `'k256'` -* `'p224'` -* `'p192'` -* `'p25519'` - -Or: - -```js -var red = BN.mont(num); -``` - -To reduce numbers with [Montgomery trick][1]. `.mont()` is generally faster than -`.red(num)`, but slower than `BN.red(primeName)`. - -### Converting numbers - -Before performing anything in reduction context - numbers should be converted -to it. Usually, this means that one should: - -* Convert inputs to reducted ones -* Operate on them in reduction context -* Convert outputs back from the reduction context - -Here is how one may convert numbers to `red`: - -```js -var redA = a.toRed(red); -``` -Where `red` is a reduction context created using instructions above - -Here is how to convert them back: - -```js -var a = redA.fromRed(); -``` - -### Red instructions - -Most of the instructions from the very start of this readme have their -counterparts in red context: - -* `a.redAdd(b)`, `a.redIAdd(b)` -* `a.redSub(b)`, `a.redISub(b)` -* `a.redShl(num)` -* `a.redMul(b)`, `a.redIMul(b)` -* `a.redSqr()`, `a.redISqr()` -* `a.redSqrt()` - square root modulo reduction context's prime -* `a.redInvm()` - modular inverse of the number -* `a.redNeg()` -* `a.redPow(b)` - modular exponentiation - -## LICENSE - -This software is licensed under the MIT License. - -Copyright Fedor Indutny, 2015. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -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. - -[0]: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication -[1]: https://en.wikipedia.org/wiki/Mersenne_prime diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/lib/bn.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/lib/bn.js deleted file mode 100644 index 29a4c51a..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/lib/bn.js +++ /dev/null @@ -1,3427 +0,0 @@ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buf' + 'fer').Buffer; - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - } - - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } - - if (number[0] === '-') { - this.negative = 1; - } - - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r <<= 4; - - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/package.json b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/package.json deleted file mode 100644 index 4b280e03..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "_from": "bn.js@4.11.6", - "_id": "bn.js@4.11.6", - "_inBundle": false, - "_integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "_location": "/web3-utils/bn.js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "bn.js@4.11.6", - "name": "bn.js", - "escapedName": "bn.js", - "rawSpec": "4.11.6", - "saveSpec": null, - "fetchSpec": "4.11.6" - }, - "_requiredBy": [ - "/web3-utils" - ], - "_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "_shasum": "53344adb14617a13f6e8dd2ce28905d1c0ba3215", - "_spec": "bn.js@4.11.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-utils", - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "bugs": { - "url": "https://github.com/indutny/bn.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Big number implementation in pure javascript", - "devDependencies": { - "istanbul": "^0.3.5", - "mocha": "^2.1.0", - "semistandard": "^7.0.4" - }, - "homepage": "https://github.com/indutny/bn.js", - "keywords": [ - "BN", - "BigNum", - "Big number", - "Modulo", - "Montgomery" - ], - "license": "MIT", - "main": "lib/bn.js", - "name": "bn.js", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/bn.js.git" - }, - "scripts": { - "lint": "semistandard", - "test": "npm run lint && npm run unit", - "unit": "mocha --reporter=spec test/*-test.js" - }, - "version": "4.11.6" -} diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/arithmetic-test.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/arithmetic-test.js deleted file mode 100644 index c3a0d7d5..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/arithmetic-test.js +++ /dev/null @@ -1,635 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; -var fixtures = require('./fixtures'); - -describe('BN.js/Arithmetic', function () { - describe('.add()', function () { - it('should add numbers', function () { - assert.equal(new BN(14).add(new BN(26)).toString(16), '28'); - var k = new BN(0x1234); - var r = k; - - for (var i = 0; i < 257; i++) { - r = r.add(k); - } - - assert.equal(r.toString(16), '125868'); - }); - - it('should handle carry properly (in-place)', function () { - var k = new BN('abcdefabcdefabcdef', 16); - var r = new BN('deadbeef', 16); - - for (var i = 0; i < 257; i++) { - r.iadd(k); - } - - assert.equal(r.toString(16), 'ac79bd9b79be7a277bde'); - }); - - it('should properly do positive + negative', function () { - var a = new BN('abcd', 16); - var b = new BN('-abce', 16); - - assert.equal(a.iadd(b).toString(16), '-1'); - - a = new BN('abcd', 16); - b = new BN('-abce', 16); - - assert.equal(a.add(b).toString(16), '-1'); - assert.equal(b.add(a).toString(16), '-1'); - }); - }); - - describe('.iaddn()', function () { - it('should allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should add negative number', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.iaddn(-200); - - assert.equal(a.toString(), '-300'); - }); - - it('should allow neg + pos with big number', function () { - var a = new BN('-1000000000', 10); - assert.equal(a.negative, 1); - - a.iaddn(200); - - assert.equal(a.toString(), '-999999800'); - }); - - it('should carry limb', function () { - var a = new BN('3ffffff', 16); - - assert.equal(a.iaddn(1).toString(16), '4000000'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).iaddn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.sub()', function () { - it('should subtract small numbers', function () { - assert.equal(new BN(26).sub(new BN(14)).toString(16), 'c'); - assert.equal(new BN(14).sub(new BN(26)).toString(16), '-c'); - assert.equal(new BN(26).sub(new BN(26)).toString(16), '0'); - assert.equal(new BN(-26).sub(new BN(26)).toString(16), '-34'); - }); - - var a = new BN( - '31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384' + - 'a7d8daef41395491e2', - 16); - var b = new BN( - '6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000', - 16); - var r = new BN( - '31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a67' + - '76281f34583ddb91e2', - 16); - - it('should subtract big numbers', function () { - assert.equal(a.sub(b).cmp(r), 0); - }); - - it('should subtract numbers in place', function () { - assert.equal(b.clone().isub(a).neg().cmp(r), 0); - }); - - it('should subtract with carry', function () { - // Carry and copy - var a = new BN('12345', 16); - var b = new BN('1000000000000', 16); - assert.equal(a.isub(b).toString(16), '-fffffffedcbb'); - - a = new BN('12345', 16); - b = new BN('1000000000000', 16); - assert.equal(b.isub(a).toString(16), 'fffffffedcbb'); - }); - }); - - describe('.isubn()', function () { - it('should subtract negative number', function () { - var r = new BN( - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16); - assert.equal(r.isubn(-1).toString(16), - '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c'); - }); - - it('should work for positive numbers', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(200); - assert.equal(a.negative, 1); - assert.equal(a.toString(), '-300'); - }); - - it('should not allow a sign change', function () { - var a = new BN(-100); - assert.equal(a.negative, 1); - - a.isubn(-200); - assert.equal(a.negative, 0); - assert.equal(a.toString(), '100'); - }); - - it('should change sign on small numbers at 0', function () { - var a = new BN(0).subn(2); - assert.equal(a.toString(), '-2'); - }); - - it('should change sign on small numbers at 1', function () { - var a = new BN(1).subn(2); - assert.equal(a.toString(), '-1'); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).isubn(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - function testMethod (name, mul) { - describe(name, function () { - it('should multiply numbers of different signs', function () { - var offsets = [ - 1, // smallMulTo - 250, // comb10MulTo - 1000, // bigMulTo - 15000 // jumboMulTo - ]; - - for (var i = 0; i < offsets.length; ++i) { - var x = new BN(1).ishln(offsets[i]); - - assert.equal(mul(x, x).isNeg(), false); - assert.equal(mul(x, x.neg()).isNeg(), true); - assert.equal(mul(x.neg(), x).isNeg(), true); - assert.equal(mul(x.neg(), x.neg()).isNeg(), false); - } - }); - - it('should multiply with carry', function () { - var n = new BN(0x1001); - var r = n; - - for (var i = 0; i < 4; i++) { - r = mul(r, n); - } - - assert.equal(r.toString(16), '100500a00a005001'); - }); - - it('should correctly multiply big numbers', function () { - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal( - mul(n, n).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40'); - assert.equal( - mul(mul(n, n), n).toString(16), - '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b' + - '46e0cf2cb11667f795d5569482640fe5f628939467a01a612b02350' + - '0d0161e9730279a7561043af6197798e41b7432458463e64fa81158' + - '907322dc330562697d0d600'); - }); - - it('should multiply neg number on 0', function () { - assert.equal( - mul(new BN('-100000000000'), new BN('3').div(new BN('4'))) - .toString(16), - '0' - ); - }); - - it('should regress mul big numbers', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - assert.equal(mul(q, q).toString(16), qs); - }); - }); - } - - testMethod('.mul()', function (x, y) { - return BN.prototype.mul.apply(x, [ y ]); - }); - - testMethod('.mulf()', function (x, y) { - return BN.prototype.mulf.apply(x, [ y ]); - }); - - describe('.imul()', function () { - it('should multiply numbers in-place', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('deadbeefa551edebabba8', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - - a = new BN('abcdef01234567890abcd214a25123f512361e6d236', 16); - b = new BN('deadbeefa551edebabba8121234fd21bac0341324dd', 16); - c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should multiply by 0', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('0', 16); - var c = a.mul(b); - - assert.equal(a.imul(b).toString(16), c.toString(16)); - }); - - it('should regress mul big numbers in-place', function () { - var q = fixtures.dhGroups.p17.q; - var qs = fixtures.dhGroups.p17.qs; - - q = new BN(q, 16); - - assert.equal(q.isqr().toString(16), qs); - }); - }); - - describe('.muln()', function () { - it('should multiply number by small number', function () { - var a = new BN('abcdef01234567890abcd', 16); - var b = new BN('dead', 16); - var c = a.mul(b); - - assert.equal(a.muln(0xdead).toString(16), c.toString(16)); - }); - - it('should throw error with num eq 0x4000000', function () { - assert.throws(function () { - new BN(0).imuln(0x4000000); - }, /^Error: Assertion failed$/); - }); - }); - - describe('.pow()', function () { - it('should raise number to the power', function () { - var a = new BN('ab', 16); - var b = new BN('13', 10); - var c = a.pow(b); - - assert.equal(c.toString(16), '15963da06977df51909c9ba5b'); - }); - }); - - describe('.div()', function () { - it('should divide small numbers (<=26 bits)', function () { - assert.equal(new BN('256').div(new BN(10)).toString(10), - '25'); - assert.equal(new BN('-256').div(new BN(10)).toString(10), - '-25'); - assert.equal(new BN('256').div(new BN(-10)).toString(10), - '-25'); - assert.equal(new BN('-256').div(new BN(-10)).toString(10), - '25'); - - assert.equal(new BN('10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(256)).toString(10), - '0'); - assert.equal(new BN('10').div(new BN(-256)).toString(10), - '0'); - assert.equal(new BN('-10').div(new BN(-256)).toString(10), - '0'); - }); - - it('should divide large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').div(new BN('611111124969028')) - .toString(10), '1'); - assert.equal(new BN('-1222222225255589').div(new BN('611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('1222222225255589').div(new BN('-611111124969028')) - .toString(10), '-1'); - assert.equal(new BN('-1222222225255589').div(new BN('-611111124969028')) - .toString(10), '1'); - - assert.equal(new BN('611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - assert.equal(new BN('-611111124969028').div(new BN('-1222222225255589')) - .toString(10), '0'); - }); - - it('should divide numbers', function () { - assert.equal(new BN('69527932928').div(new BN('16974594')).toString(16), - 'fff'); - assert.equal(new BN('-69527932928').div(new BN('16974594')).toString(16), - '-fff'); - - var b = new BN( - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9' + - 'b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9' + - '978a8bd8acaa40', - 16); - var n = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16 - ); - assert.equal(b.div(n).toString(16), n.toString(16)); - - assert.equal(new BN('1').div(new BN('-5')).toString(10), '0'); - }); - - it('should not fail on regression after moving to _wordDiv', function () { - // Regression after moving to word div - var p = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', - 16); - var a = new BN( - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - 16); - var as = a.sqr(); - assert.equal( - as.div(p).toString(16), - '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9'); - - p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.div(p).toString(16), - 'ffffffff00000002000000000000000000000001000000000000000000000001'); - }); - }); - - describe('.idivn()', function () { - it('should divide numbers in-place', function () { - assert.equal(new BN('10', 16).idivn(3).toString(16), '5'); - assert.equal(new BN('12', 16).idivn(3).toString(16), '6'); - assert.equal(new BN('10000000000000000').idivn(3).toString(10), - '3333333333333333'); - assert.equal( - new BN('100000000000000000000000000000').idivn(3).toString(10), - '33333333333333333333333333333'); - - var t = new BN(3); - assert.equal( - new BN('12345678901234567890123456', 16).idivn(3).toString(16), - new BN('12345678901234567890123456', 16).div(t).toString(16)); - }); - }); - - describe('.divRound()', function () { - it('should divide numbers with rounding', function () { - assert.equal(new BN(9).divRound(new BN(20)).toString(10), - '0'); - assert.equal(new BN(10).divRound(new BN(20)).toString(10), - '1'); - assert.equal(new BN(150).divRound(new BN(20)).toString(10), - '8'); - assert.equal(new BN(149).divRound(new BN(20)).toString(10), - '7'); - assert.equal(new BN(149).divRound(new BN(17)).toString(10), - '9'); - assert.equal(new BN(144).divRound(new BN(17)).toString(10), - '8'); - assert.equal(new BN(-144).divRound(new BN(17)).toString(10), - '-8'); - }); - - it('should return 1 on exact division', function () { - assert.equal(new BN(144).divRound(new BN(144)).toString(10), '1'); - }); - }); - - describe('.mod()', function () { - it('should modulo small numbers (<=26 bits)', function () { - assert.equal(new BN('256').mod(new BN(10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(10)).toString(10), - '-6'); - assert.equal(new BN('256').mod(new BN(-10)).toString(10), - '6'); - assert.equal(new BN('-256').mod(new BN(-10)).toString(10), - '-6'); - - assert.equal(new BN('10').mod(new BN(256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(256)).toString(10), - '-10'); - assert.equal(new BN('10').mod(new BN(-256)).toString(10), - '10'); - assert.equal(new BN('-10').mod(new BN(-256)).toString(10), - '-10'); - }); - - it('should modulo large numbers (>53 bits)', function () { - assert.equal(new BN('1222222225255589').mod(new BN('611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('611111124969028')) - .toString(10), '-611111100286561'); - assert.equal(new BN('1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '611111100286561'); - assert.equal(new BN('-1222222225255589').mod(new BN('-611111124969028')) - .toString(10), '-611111100286561'); - - assert.equal(new BN('611111124969028').mod(new BN('1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('1222222225255589')) - .toString(10), '-611111124969028'); - assert.equal(new BN('611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '611111124969028'); - assert.equal(new BN('-611111124969028').mod(new BN('-1222222225255589')) - .toString(10), '-611111124969028'); - }); - - it('should mod numbers', function () { - assert.equal(new BN('10').mod(new BN(256)).toString(16), - 'a'); - assert.equal(new BN('69527932928').mod(new BN('16974594')).toString(16), - '102f302'); - - // 178 = 10 * 17 + 8 - assert.equal(new BN(178).div(new BN(10)).toNumber(), 17); - assert.equal(new BN(178).mod(new BN(10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(10)).toNumber(), 8); - - // -178 = 10 * (-17) + (-8) - assert.equal(new BN(-178).div(new BN(10)).toNumber(), -17); - assert.equal(new BN(-178).mod(new BN(10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(10)).toNumber(), 2); - - // 178 = -10 * (-17) + 8 - assert.equal(new BN(178).div(new BN(-10)).toNumber(), -17); - assert.equal(new BN(178).mod(new BN(-10)).toNumber(), 8); - assert.equal(new BN(178).umod(new BN(-10)).toNumber(), 8); - - // -178 = -10 * (17) + (-8) - assert.equal(new BN(-178).div(new BN(-10)).toNumber(), 17); - assert.equal(new BN(-178).mod(new BN(-10)).toNumber(), -8); - assert.equal(new BN(-178).umod(new BN(-10)).toNumber(), 2); - - // -4 = 1 * (-3) + -1 - assert.equal(new BN(-4).div(new BN(-3)).toNumber(), 1); - assert.equal(new BN(-4).mod(new BN(-3)).toNumber(), -1); - - // -4 = -1 * (3) + -1 - assert.equal(new BN(-4).mod(new BN(3)).toNumber(), -1); - // -4 = 1 * (-3) + (-1 + 3) - assert.equal(new BN(-4).umod(new BN(-3)).toNumber(), 2); - - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffff' + - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', - 16); - assert.equal( - a.mod(p).toString(16), - '0'); - }); - - it('should properly carry the sign inside division', function () { - var a = new BN('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex'); - var b = new BN( - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe', - 'hex'); - - assert.equal(a.mul(b).mod(a).cmpn(0), 0); - }); - }); - - describe('.modn()', function () { - it('should act like .mod() on small numbers', function () { - assert.equal(new BN('10', 16).modn(256).toString(16), '10'); - assert.equal(new BN('100', 16).modn(256).toString(16), '0'); - assert.equal(new BN('1001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(256).toString(16), '1'); - assert.equal(new BN('100000000001', 16).modn(257).toString(16), - new BN('100000000001', 16).mod(new BN(257)).toString(16)); - assert.equal(new BN('123456789012', 16).modn(3).toString(16), - new BN('123456789012', 16).mod(new BN(3)).toString(16)); - }); - }); - - describe('.abs()', function () { - it('should return absolute value', function () { - assert.equal(new BN(0x1001).abs().toString(), '4097'); - assert.equal(new BN(-0x1001).abs().toString(), '4097'); - assert.equal(new BN('ffffffff', 16).abs().toString(), '4294967295'); - }); - }); - - describe('.invm()', function () { - it('should invert relatively-prime numbers', function () { - var p = new BN(257); - var a = new BN(3); - var b = a.invm(p); - assert.equal(a.mul(b).mod(p).toString(16), '1'); - - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - a = new BN('deadbeef', 16); - b = a.invm(p192); - assert.equal(a.mul(b).mod(p192).toString(16), '1'); - - // Even base - var phi = new BN('872d9b030ba368706b68932cf07a0e0c', 16); - var e = new BN(65537); - var d = e.invm(phi); - assert.equal(e.mul(d).mod(phi).toString(16), '1'); - - // Even base (take #2) - a = new BN('5'); - b = new BN('6'); - var r = a.invm(b); - assert.equal(r.mul(a).mod(b).toString(16), '1'); - }); - }); - - describe('.gcd()', function () { - it('should return GCD', function () { - assert.equal(new BN(3).gcd(new BN(2)).toString(10), '1'); - assert.equal(new BN(18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(-12)).toString(10), '6'); - assert.equal(new BN(-18).gcd(new BN(0)).toString(10), '18'); - assert.equal(new BN(0).gcd(new BN(-18)).toString(10), '18'); - assert.equal(new BN(2).gcd(new BN(0)).toString(10), '2'); - assert.equal(new BN(0).gcd(new BN(3)).toString(10), '3'); - assert.equal(new BN(0).gcd(new BN(0)).toString(10), '0'); - }); - }); - - describe('.egcd()', function () { - it('should return EGCD', function () { - assert.equal(new BN(3).egcd(new BN(2)).gcd.toString(10), '1'); - assert.equal(new BN(18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(-18).egcd(new BN(12)).gcd.toString(10), '6'); - assert.equal(new BN(0).egcd(new BN(12)).gcd.toString(10), '12'); - }); - it('should not allow 0 input', function () { - assert.throws(function () { - new BN(1).egcd(0); - }, /^Error: Assertion failed$/); - }); - it('should not allow negative input', function () { - assert.throws(function () { - new BN(1).egcd(-1); - }, /^Error: Assertion failed$/); - }); - }); - - describe('BN.max(a, b)', function () { - it('should return maximum', function () { - assert.equal(BN.max(new BN(3), new BN(2)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(3)).toString(16), '3'); - assert.equal(BN.max(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.max(new BN(2), new BN(-2)).toString(16), '2'); - }); - }); - - describe('BN.min(a, b)', function () { - it('should return minimum', function () { - assert.equal(BN.min(new BN(3), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(3)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(2)).toString(16), '2'); - assert.equal(BN.min(new BN(2), new BN(-2)).toString(16), '-2'); - }); - }); - - describe('BN.ineg', function () { - it('shouldn\'t change sign for zero', function () { - assert.equal(new BN(0).ineg().toString(10), '0'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/binary-test.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/binary-test.js deleted file mode 100644 index 37b6421d..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/binary-test.js +++ /dev/null @@ -1,233 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Binary', function () { - describe('.shl()', function () { - it('should shl numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').shln(45).toString(16), - '206060200000000000000'); - }); - - it('should ushl numbers', function () { - assert.equal(new BN('69527932928').ushln(13).toString(16), - '2060602000000'); - assert.equal(new BN('69527932928').ushln(45).toString(16), - '206060200000000000000'); - }); - }); - - describe('.shr()', function () { - it('should shr numbers', function () { - // TODO(indutny): add negative numbers when the time will come - assert.equal(new BN('69527932928').shrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').shrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').shrn(256).toString(16), - '0'); - }); - - it('should ushr numbers', function () { - assert.equal(new BN('69527932928').ushrn(13).toString(16), - '818180'); - assert.equal(new BN('69527932928').ushrn(17).toString(16), - '81818'); - assert.equal(new BN('69527932928').ushrn(256).toString(16), - '0'); - }); - }); - - describe('.bincn()', function () { - it('should increment bit', function () { - assert.equal(new BN(0).bincn(1).toString(16), '2'); - assert.equal(new BN(2).bincn(1).toString(16), '4'); - assert.equal(new BN(2).bincn(1).bincn(1).toString(16), - new BN(2).bincn(2).toString(16)); - assert.equal(new BN(0xffffff).bincn(1).toString(16), '1000001'); - assert.equal(new BN(2).bincn(63).toString(16), - '8000000000000002'); - }); - }); - - describe('.imaskn()', function () { - it('should mask bits in-place', function () { - assert.equal(new BN(0).imaskn(1).toString(16), '0'); - assert.equal(new BN(3).imaskn(1).toString(16), '1'); - assert.equal(new BN('123456789', 16).imaskn(4).toString(16), '9'); - assert.equal(new BN('123456789', 16).imaskn(16).toString(16), '6789'); - assert.equal(new BN('123456789', 16).imaskn(28).toString(16), '3456789'); - }); - - it('should not mask when number is bigger than length', function () { - assert.equal(new BN(0xe3).imaskn(56).toString(16), 'e3'); - assert.equal(new BN(0xe3).imaskn(26).toString(16), 'e3'); - }); - }); - - describe('.testn()', function () { - it('should support test specific bit', function () { - [ - 'ff', - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' - ].forEach(function (hex) { - var bn = new BN(hex, 16); - var bl = bn.bitLength(); - - for (var i = 0; i < bl; ++i) { - assert.equal(bn.testn(i), true); - } - - // test off the end - assert.equal(bn.testn(bl), false); - }); - - var xbits = '01111001010111001001000100011101' + - '11010011101100011000111001011101' + - '10010100111000000001011000111101' + - '01011111001111100100011110000010' + - '01011010100111010001010011000100' + - '01101001011110100001001111100110' + - '001110010111'; - - var x = new BN( - '23478905234580795234378912401239784125643978256123048348957342' - ); - for (var i = 0; i < x.bitLength(); ++i) { - assert.equal(x.testn(i), (xbits.charAt(i) === '1'), 'Failed @ bit ' + i); - } - }); - - it('should have short-cuts', function () { - var x = new BN('abcd', 16); - assert(!x.testn(128)); - }); - }); - - describe('.and()', function () { - it('should and numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .and(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .and(new BN('abcd', 16)).toString(16), - 'abcd'); - }); - }); - - describe('.iand()', function () { - it('should iand numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .iand(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '0'); - assert.equal(new BN('1000000000000000000000000000000000000001', 2) - .iand(new BN('1', 2)) - .toString(2), '1'); - assert.equal(new BN('1', 2) - .iand(new BN('1000000000000000000000000000000000000001', 2)) - .toString(2), '1'); - }); - }); - - describe('.or()', function () { - it('should or numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .or(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - }); - - it('should or numbers of different limb-length', function () { - assert.equal( - new BN('abcd00000000', 16) - .or(new BN('abcd', 16)).toString(16), - 'abcd0000abcd'); - }); - }); - - describe('.ior()', function () { - it('should ior numbers', function () { - assert.equal(new BN('1010101010101010101010101010101010101010', 2) - .ior(new BN('101010101010101010101010101010101010101', 2)) - .toString(2), '1111111111111111111111111111111111111111'); - assert.equal(new BN('1000000000000000000000000000000000000000', 2) - .ior(new BN('1', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - assert.equal(new BN('1', 2) - .ior(new BN('1000000000000000000000000000000000000000', 2)) - .toString(2), '1000000000000000000000000000000000000001'); - }); - }); - - describe('.xor()', function () { - it('should xor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .xor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - }); - }); - - describe('.ixor()', function () { - it('should ixor numbers', function () { - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1100110011001100110011001100110', 2)) - .toString(2), '10101010101010101010101010101010'); - assert.equal(new BN('11001100110011001100110011001100', 2) - .ixor(new BN('1', 2)) - .toString(2), '11001100110011001100110011001101'); - assert.equal(new BN('1', 2) - .ixor(new BN('11001100110011001100110011001100', 2)) - .toString(2), '11001100110011001100110011001101'); - }); - - it('should and numbers of different limb-length', function () { - assert.equal( - new BN('abcd0000ffff', 16) - .xor(new BN('abcd', 16)).toString(16), - 'abcd00005432'); - }); - }); - - describe('.setn()', function () { - it('should allow single bits to be set', function () { - assert.equal(new BN(0).setn(2, true).toString(2), '100'); - assert.equal(new BN(0).setn(27, true).toString(2), - '1000000000000000000000000000'); - assert.equal(new BN(0).setn(63, true).toString(16), - new BN(1).iushln(63).toString(16)); - assert.equal(new BN('1000000000000000000000000001', 2).setn(27, false) - .toString(2), '1'); - assert.equal(new BN('101', 2).setn(2, false).toString(2), '1'); - }); - }); - - describe('.notn()', function () { - it('should allow bitwise negation', function () { - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(9).toString(2), - '111000'); - assert.equal(new BN('000111000', 2).notn(9).toString(2), - '111000111'); - assert.equal(new BN('111000111', 2).notn(32).toString(2), - '11111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(32).toString(2), - '11111111111111111111111111000111'); - assert.equal(new BN('111000111', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111000111000'); - assert.equal(new BN('000111000', 2).notn(68).toString(2), - '11111111111111111111111111111111' + - '111111111111111111111111111111000111'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/constructor-test.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/constructor-test.js deleted file mode 100644 index 11c7df08..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/constructor-test.js +++ /dev/null @@ -1,149 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Constructor', function () { - describe('with Smi input', function () { - it('should accept one limb number', function () { - assert.equal(new BN(12345).toString(16), '3039'); - }); - - it('should accept two-limb number', function () { - assert.equal(new BN(0x4123456).toString(16), '4123456'); - }); - - it('should accept 52 bits of precision', function () { - var num = Math.pow(2, 52); - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should accept max safe integer', function () { - var num = Math.pow(2, 53) - 1; - assert.equal(new BN(num, 10).toString(10), num.toString(10)); - }); - - it('should not accept an unsafe integer', function () { - var num = Math.pow(2, 53); - - assert.throws(function () { - return new BN(num, 10); - }, /^Error: Assertion failed$/); - }); - - it('should accept two-limb LE number', function () { - assert.equal(new BN(0x4123456, null, 'le').toString(16), '56341204'); - }); - }); - - describe('with String input', function () { - it('should accept base-16', function () { - assert.equal(new BN('1A6B765D8CDF', 16).toString(16), '1a6b765d8cdf'); - assert.equal(new BN('1A6B765D8CDF', 16).toString(), '29048849665247'); - }); - - it('should accept base-hex', function () { - assert.equal(new BN('FF', 'hex').toString(), '255'); - }); - - it('should accept base-16 with spaces', function () { - var num = 'a89c e5af8724 c0a23e0e 0ff77500'; - assert.equal(new BN(num, 16).toString(16), num.replace(/ /g, '')); - }); - - it('should accept long base-16', function () { - var num = '123456789abcdef123456789abcdef123456789abcdef'; - assert.equal(new BN(num, 16).toString(16), num); - }); - - it('should accept positive base-10', function () { - assert.equal(new BN('10654321').toString(), '10654321'); - assert.equal(new BN('29048849665247').toString(16), '1a6b765d8cdf'); - }); - - it('should accept negative base-10', function () { - assert.equal(new BN('-29048849665247').toString(16), '-1a6b765d8cdf'); - }); - - it('should accept long base-10', function () { - var num = '10000000000000000'; - assert.equal(new BN(num).toString(10), num); - }); - - it('should accept base-2', function () { - var base2 = '11111111111111111111111111111111111111111111111111111'; - assert.equal(new BN(base2, 2).toString(2), base2); - }); - - it('should accept base-36', function () { - var base36 = 'zzZzzzZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; - assert.equal(new BN(base36, 36).toString(36), base36.toLowerCase()); - }); - - it('should not overflow limbs during base-10', function () { - var num = '65820182292848241686198767302293' + - '20890292528855852623664389292032'; - assert(new BN(num).words[0] < 0x4000000); - }); - - it('should accept base-16 LE integer', function () { - assert.equal(new BN('1A6B765D8CDF', 16, 'le').toString(16), - 'df8c5d766b1a'); - }); - }); - - describe('with Array input', function () { - it('should not fail on empty array', function () { - assert.equal(new BN([]).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN([ 1, 2, 3 ]).toString(16), '10203'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toString(16), '1020304'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ]).toString(16), '102030405'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toString(16), - '102030405060708'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray().join(','), '1,2,3,4'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray().join(','), - '1,2,3,4,5,6,7,8'); - }); - - it('should import little endian', function () { - assert.equal(new BN([ 1, 2, 3 ], 10, 'le').toString(16), '30201'); - assert.equal(new BN([ 1, 2, 3, 4 ], 10, 'le').toString(16), '4030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 10, 'le').toString(16), - '504030201'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ], 'le').toString(16), - '807060504030201'); - assert.equal(new BN([ 1, 2, 3, 4 ]).toArray('le').join(','), '4,3,2,1'); - assert.equal(new BN([ 1, 2, 3, 4, 5, 6, 7, 8 ]).toArray('le').join(','), - '8,7,6,5,4,3,2,1'); - }); - - it('should import big endian with implicit base', function () { - assert.equal(new BN([ 1, 2, 3, 4, 5 ], 'le').toString(16), '504030201'); - }); - }); - - // the Array code is able to handle Buffer - describe('with Buffer input', function () { - it('should not fail on empty Buffer', function () { - assert.equal(new BN(new Buffer(0)).toString(16), '0'); - }); - - it('should import/export big endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex')).toString(16), '10203'); - }); - - it('should import little endian', function () { - assert.equal(new BN(new Buffer('010203', 'hex'), 'le').toString(16), '30201'); - }); - }); - - describe('with BN input', function () { - it('should clone BN', function () { - var num = new BN(12345); - assert.equal(new BN(num).toString(10), '12345'); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/fixtures.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/fixtures.js deleted file mode 100644 index 39fd661d..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/fixtures.js +++ /dev/null @@ -1,264 +0,0 @@ -exports.dhGroups = { - p16: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199' + - 'ffffffffffffffff', - priv: '6d5923e6449122cbbcc1b96093e0b7e4fd3e469f58daddae' + - '53b49b20664f4132675df9ce98ae0cfdcac0f4181ccb643b' + - '625f98104dcf6f7d8e81961e2cab4b5014895260cb977c7d' + - '2f981f8532fb5da60b3676dfe57f293f05d525866053ac7e' + - '65abfd19241146e92e64f309a97ef3b529af4d6189fa416c' + - '9e1a816c3bdf88e5edf48fbd8233ef9038bb46faa95122c0' + - '5a426be72039639cd2d53d37254b3d258960dcb33c255ede' + - '20e9d7b4b123c8b4f4b986f53cdd510d042166f7dd7dca98' + - '7c39ab36381ba30a5fdd027eb6128d2ef8e5802a2194d422' + - 'b05fe6e1cb4817789b923d8636c1ec4b7601c90da3ddc178' + - '52f59217ae070d87f2e75cbfb6ff92430ad26a71c8373452' + - 'ae1cc5c93350e2d7b87e0acfeba401aaf518580937bf0b6c' + - '341f8c49165a47e49ce50853989d07171c00f43dcddddf72' + - '94fb9c3f4e1124e98ef656b797ef48974ddcd43a21fa06d0' + - '565ae8ce494747ce9e0ea0166e76eb45279e5c6471db7df8' + - 'cc88764be29666de9c545e72da36da2f7a352fb17bdeb982' + - 'a6dc0193ec4bf00b2e533efd6cd4d46e6fb237b775615576' + - 'dd6c7c7bbc087a25e6909d1ebc6e5b38e5c8472c0fc429c6' + - 'f17da1838cbcd9bbef57c5b5522fd6053e62ba21fe97c826' + - 'd3889d0cc17e5fa00b54d8d9f0f46fb523698af965950f4b' + - '941369e180f0aece3870d9335f2301db251595d173902cad' + - '394eaa6ffef8be6c', - pub: 'd53703b7340bc89bfc47176d351e5cf86d5a18d9662eca3c' + - '9759c83b6ccda8859649a5866524d77f79e501db923416ca' + - '2636243836d3e6df752defc0fb19cc386e3ae48ad647753f' + - 'bf415e2612f8a9fd01efe7aca249589590c7e6a0332630bb' + - '29c5b3501265d720213790556f0f1d114a9e2071be3620bd' + - '4ee1e8bb96689ac9e226f0a4203025f0267adc273a43582b' + - '00b70b490343529eaec4dcff140773cd6654658517f51193' + - '13f21f0a8e04fe7d7b21ffeca85ff8f87c42bb8d9cb13a72' + - 'c00e9c6e9dfcedda0777af951cc8ccab90d35e915e707d8e' + - '4c2aca219547dd78e9a1a0730accdc9ad0b854e51edd1e91' + - '4756760bab156ca6e3cb9c625cf0870def34e9ac2e552800' + - 'd6ce506d43dbbc75acfa0c8d8fb12daa3c783fb726f187d5' + - '58131779239c912d389d0511e0f3a81969d12aeee670e48f' + - 'ba41f7ed9f10705543689c2506b976a8ffabed45e33795b0' + - '1df4f6b993a33d1deab1316a67419afa31fbb6fdd252ee8c' + - '7c7d1d016c44e3fcf6b41898d7f206aa33760b505e4eff2e' + - 'c624bc7fe636b1d59e45d6f904fc391419f13d1f0cdb5b6c' + - '2378b09434159917dde709f8a6b5dc30994d056e3f964371' + - '11587ac7af0a442b8367a7bd940f752ddabf31cf01171e24' + - 'd78df136e9681cd974ce4f858a5fb6efd3234a91857bb52d' + - '9e7b414a8bc66db4b5a73bbeccfb6eb764b4f0cbf0375136' + - 'b024b04e698d54a5' - }, - p17: { - prime: 'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd1' + - '29024e088a67cc74020bbea63b139b22514a08798e3404dd' + - 'ef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245' + - 'e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7ed' + - 'ee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3d' + - 'c2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f' + - '83655d23dca3ad961c62f356208552bb9ed529077096966d' + - '670c354e4abc9804f1746c08ca18217c32905e462e36ce3b' + - 'e39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9' + - 'de2bcbf6955817183995497cea956ae515d2261898fa0510' + - '15728e5a8aaac42dad33170d04507a33a85521abdf1cba64' + - 'ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7' + - 'abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6b' + - 'f12ffa06d98a0864d87602733ec86a64521f2b18177b200c' + - 'bbe117577a615d6c770988c0bad946e208e24fa074e5ab31' + - '43db5bfce0fd108e4b82d120a92108011a723c12a787e6d7' + - '88719a10bdba5b2699c327186af4e23c1a946834b6150bda' + - '2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6' + - '287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed' + - '1f612970cee2d7afb81bdd762170481cd0069127d5b05aa9' + - '93b4ea988d8fddc186ffb7dc90a6c08f4df435c934028492' + - '36c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bd' + - 'f8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831' + - '179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1b' + - 'db7f1447e6cc254b332051512bd7af426fb8f401378cd2bf' + - '5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6' + - 'd55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f3' + - '23a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aa' + - 'cc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be328' + - '06a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55c' + - 'da56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee' + - '12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff', - priv: '6017f2bc23e1caff5b0a8b4e1fc72422b5204415787801dc' + - '025762b8dbb98ab57603aaaa27c4e6bdf742b4a1726b9375' + - 'a8ca3cf07771779589831d8bd18ddeb79c43e7e77d433950' + - 'e652e49df35b11fa09644874d71d62fdaffb580816c2c88c' + - '2c4a2eefd4a660360316741b05a15a2e37f236692ad3c463' + - 'fff559938fc6b77176e84e1bb47fb41af691c5eb7bb81bd8' + - 'c918f52625a1128f754b08f5a1403b84667231c4dfe07ed4' + - '326234c113931ce606037e960f35a2dfdec38a5f057884d3' + - '0af8fab3be39c1eeb390205fd65982191fc21d5aa30ddf51' + - 'a8e1c58c0c19fc4b4a7380ea9e836aaf671c90c29bc4bcc7' + - '813811aa436a7a9005de9b507957c56a9caa1351b6efc620' + - '7225a18f6e97f830fb6a8c4f03b82f4611e67ab9497b9271' + - 'd6ac252793cc3e5538990dbd894d2dbc2d152801937d9f74' + - 'da4b741b50b4d40e4c75e2ac163f7b397fd555648b249f97' + - 'ffe58ffb6d096aa84534c4c5729cff137759bd34e80db4ab' + - '47e2b9c52064e7f0bf677f72ac9e5d0c6606943683f9d12f' + - '180cf065a5cb8ec3179a874f358847a907f8471d15f1e728' + - '7023249d6d13c82da52628654438f47b8b5cdf4761fbf6ad' + - '9219eceac657dbd06cf2ab776ad4c968f81c3d039367f0a4' + - 'd77c7ec4435c27b6c147071665100063b5666e06eb2fb2cc' + - '3159ba34bc98ca346342195f6f1fb053ddc3bc1873564d40' + - '1c6738cdf764d6e1ff25ca5926f80102ea6593c17170966b' + - 'b5d7352dd7fb821230237ea3ebed1f920feaadbd21be295a' + - '69f2083deae9c5cdf5f4830eb04b7c1f80cc61c17232d79f' + - '7ecc2cc462a7965f804001c89982734e5abba2d31df1b012' + - '152c6b226dff34510b54be8c2cd68d795def66c57a3abfb6' + - '896f1d139e633417f8c694764974d268f46ece3a8d6616ea' + - 'a592144be48ee1e0a1595d3e5edfede5b27cec6c48ceb2ff' + - 'b42cb44275851b0ebf87dfc9aa2d0cb0805e9454b051dfe8' + - 'a29fadd82491a4b4c23f2d06ba45483ab59976da1433c9ce' + - '500164b957a04cf62dd67595319b512fc4b998424d1164dd' + - 'bbe5d1a0f7257cbb04ec9b5ed92079a1502d98725023ecb2', - pub: '3bf836229c7dd874fe37c1790d201e82ed8e192ed61571ca' + - '7285264974eb2a0171f3747b2fc23969a916cbd21e14f7e2' + - 'f0d72dcd2247affba926f9e7bb99944cb5609aed85e71b89' + - 'e89d2651550cb5bd8281bd3144066af78f194032aa777739' + - 'cccb7862a1af401f99f7e5c693f25ddce2dedd9686633820' + - 'd28d0f5ed0c6b5a094f5fe6170b8e2cbc9dff118398baee6' + - 'e895a6301cb6e881b3cae749a5bdf5c56fc897ff68bc73f2' + - '4811bb108b882872bade1f147d886a415cda2b93dd90190c' + - 'be5c2dd53fe78add5960e97f58ff2506afe437f4cf4c912a' + - '397c1a2139ac6207d3ab76e6b7ffd23bb6866dd7f87a9ae5' + - '578789084ff2d06ea0d30156d7a10496e8ebe094f5703539' + - '730f5fdbebc066de417be82c99c7da59953071f49da7878d' + - 'a588775ff2a7f0084de390f009f372af75cdeba292b08ea8' + - '4bd13a87e1ca678f9ad148145f7cef3620d69a891be46fbb' + - 'cad858e2401ec0fd72abdea2f643e6d0197b7646fbb83220' + - '0f4cf7a7f6a7559f9fb0d0f1680822af9dbd8dec4cd1b5e1' + - '7bc799e902d9fe746ddf41da3b7020350d3600347398999a' + - 'baf75d53e03ad2ee17de8a2032f1008c6c2e6618b62f225b' + - 'a2f350179445debe68500fcbb6cae970a9920e321b468b74' + - '5fb524fb88abbcacdca121d737c44d30724227a99745c209' + - 'b970d1ff93bbc9f28b01b4e714d6c9cbd9ea032d4e964d8e' + - '8fff01db095160c20b7646d9fcd314c4bc11bcc232aeccc0' + - 'fbedccbc786951025597522eef283e3f56b44561a0765783' + - '420128638c257e54b972a76e4261892d81222b3e2039c61a' + - 'ab8408fcaac3d634f848ab3ee65ea1bd13c6cd75d2e78060' + - 'e13cf67fbef8de66d2049e26c0541c679fff3e6afc290efe' + - '875c213df9678e4a7ec484bc87dae5f0a1c26d7583e38941' + - 'b7c68b004d4df8b004b666f9448aac1cc3ea21461f41ea5d' + - 'd0f7a9e6161cfe0f58bcfd304bdc11d78c2e9d542e86c0b5' + - '6985cc83f693f686eaac17411a8247bf62f5ccc7782349b5' + - 'cc1f20e312fa2acc0197154d1bfee507e8db77e8f2732f2d' + - '641440ccf248e8643b2bd1e1f9e8239356ab91098fcb431d', - q: 'a899c59999bf877d96442d284359783bdc64b5f878b688fe' + - '51407f0526e616553ad0aaaac4d5bed3046f10a1faaf42bb' + - '2342dc4b7908eea0c46e4c4576897675c2bfdc4467870d3d' + - 'cd90adaed4359237a4bc6924bfb99aa6bf5f5ede15b574ea' + - 'e977eac096f3c67d09bda574c6306c6123fa89d2f086b8dc' + - 'ff92bc570c18d83fe6c810ccfd22ce4c749ef5e6ead3fffe' + - 'c63d95e0e3fde1df9db6a35fa1d107058f37e41957769199' + - 'd945dd7a373622c65f0af3fd9eb1ddc5c764bbfaf7a3dc37' + - '2548e683b970dac4aa4b9869080d2376c9adecebb84e172c' + - '09aeeb25fb8df23e60033260c4f8aac6b8b98ab894b1fb84' + - 'ebb83c0fb2081c3f3eee07f44e24d8fabf76f19ed167b0d7' + - 'ff971565aa4efa3625fce5a43ceeaa3eebb3ce88a00f597f' + - '048c69292b38dba2103ecdd5ec4ccfe3b2d87fa6202f334b' + - 'c1cab83b608dfc875b650b69f2c7e23c0b2b4adf149a6100' + - 'db1b6dbad4679ecb1ea95eafaba3bd00db11c2134f5a8686' + - '358b8b2ab49a1b2e85e1e45caeac5cd4dc0b3b5fffba8871' + - '1c6baf399edd48dad5e5c313702737a6dbdcede80ca358e5' + - '1d1c4fe42e8948a084403f61baed38aa9a1a5ce2918e9f33' + - '100050a430b47bc592995606440272a4994677577a6aaa1b' + - 'a101045dbec5a4e9566dab5445d1af3ed19519f07ac4e2a8' + - 'bd0a84b01978f203a9125a0be020f71fab56c2c9e344d4f4' + - '12d53d3cd8eb74ca5122002e931e3cb0bd4b7492436be17a' + - 'd7ebe27148671f59432c36d8c56eb762655711cfc8471f70' + - '83a8b7283bcb3b1b1d47d37c23d030288cfcef05fbdb4e16' + - '652ee03ee7b77056a808cd700bc3d9ef826eca9a59be959c' + - '947c865d6b372a1ca2d503d7df6d7611b12111665438475a' + - '1c64145849b3da8c2d343410df892d958db232617f9896f1' + - 'de95b8b5a47132be80dd65298c7f2047858409bf762dbc05' + - 'a62ca392ac40cfb8201a0607a2cae07d99a307625f2b2d04' + - 'fe83fbd3ab53602263410f143b73d5b46fc761882e78c782' + - 'd2c36e716a770a7aefaf7f76cea872db7bffefdbc4c2f9e0' + - '39c19adac915e7a63dcb8c8c78c113f29a3e0bc10e100ce0', - qs: '6f0a2fb763eaeb8eb324d564f03d4a55fdcd709e5f1b65e9' + - '5702b0141182f9f945d71bc3e64a7dfdae7482a7dd5a4e58' + - 'bc38f78de2013f2c468a621f08536969d2c8d011bb3bc259' + - '2124692c91140a5472cad224acdacdeae5751dadfdf068b8' + - '77bfa7374694c6a7be159fc3d24ff9eeeecaf62580427ad8' + - '622d48c51a1c4b1701d768c79d8c819776e096d2694107a2' + - 'f3ec0c32224795b59d32894834039dacb369280afb221bc0' + - '90570a93cf409889b818bb30cccee98b2aa26dbba0f28499' + - '08e1a3cd43fa1f1fb71049e5c77c3724d74dc351d9989057' + - '37bbda3805bd6b1293da8774410fb66e3194e18cdb304dd9' + - 'a0b59b583dcbc9fc045ac9d56aea5cfc9f8a0b95da1e11b7' + - '574d1f976e45fe12294997fac66ca0b83fc056183549e850' + - 'a11413cc4abbe39a211e8c8cbf82f2a23266b3c10ab9e286' + - '07a1b6088909cddff856e1eb6b2cde8bdac53fa939827736' + - 'ca1b892f6c95899613442bd02dbdb747f02487718e2d3f22' + - 'f73734d29767ed8d0e346d0c4098b6fdcb4df7d0c4d29603' + - '5bffe80d6c65ae0a1b814150d349096baaf950f2caf298d2' + - 'b292a1d48cf82b10734fe8cedfa16914076dfe3e9b51337b' + - 'ed28ea1e6824bb717b641ca0e526e175d3e5ed7892aebab0' + - 'f207562cc938a821e2956107c09b6ce4049adddcd0b7505d' + - '49ae6c69a20122461102d465d93dc03db026be54c303613a' + - 'b8e5ce3fd4f65d0b6162ff740a0bf5469ffd442d8c509cd2' + - '3b40dab90f6776ca17fc0678774bd6eee1fa85ababa52ec1' + - 'a15031eb677c6c488661dddd8b83d6031fe294489ded5f08' + - '8ad1689a14baeae7e688afa3033899c81f58de39b392ca94' + - 'af6f15a46f19fa95c06f9493c8b96a9be25e78b9ea35013b' + - 'caa76de6303939299d07426a88a334278fc3d0d9fa71373e' + - 'be51d3c1076ab93a11d3d0d703366ff8cde4c11261d488e5' + - '60a2bdf3bfe2476032294800d6a4a39d306e65c6d7d8d66e' + - '5ec63eee94531e83a9bddc458a2b508285c0ee10b7bd94da' + - '2815a0c5bd5b2e15cbe66355e42f5af8955cdfc0b3a4996d' + - '288db1f4b32b15643b18193e378cb7491f3c3951cdd044b1' + - 'a519571bffac2da986f5f1d506c66530a55f70751e24fa8e' + - 'd83ac2347f4069fb561a5565e78c6f0207da24e889a93a96' + - '65f717d9fe8a2938a09ab5f81be7ccecf466c0397fc15a57' + - '469939793f302739765773c256a3ca55d0548afd117a7cae' + - '98ca7e0d749a130c7b743d376848e255f8fdbe4cb4480b63' + - 'cd2c015d1020cf095d175f3ca9dcdfbaf1b2a6e6468eee4c' + - 'c750f2132a77f376bd9782b9d0ff4da98621b898e251a263' + - '4301ba2214a8c430b2f7a79dbbfd6d7ff6e9b0c137b025ff' + - '587c0bf912f0b19d4fff96b1ecd2ca990c89b386055c60f2' + - '3b94214bd55096f17a7b2c0fa12b333235101cd6f28a128c' + - '782e8a72671adadebbd073ded30bd7f09fb693565dcf0bf3' + - '090c21d13e5b0989dd8956f18f17f4f69449a13549c9d80a' + - '77e5e61b5aeeee9528634100e7bc390672f0ded1ca53555b' + - 'abddbcf700b9da6192255bddf50a76b709fbed251dce4c7e' + - '1ca36b85d1e97c1bc9d38c887a5adf140f9eeef674c31422' + - 'e65f63cae719f8c1324e42fa5fd8500899ef5aa3f9856aa7' + - 'ce10c85600a040343204f36bfeab8cfa6e9deb8a2edd2a8e' + - '018d00c7c9fa3a251ad0f57183c37e6377797653f382ec7a' + - '2b0145e16d3c856bc3634b46d90d7198aff12aff88a30e34' + - 'e2bfaf62705f3382576a9d3eeb0829fca2387b5b654af46e' + - '5cf6316fb57d59e5ea6c369061ac64d99671b0e516529dd5' + - 'd9c48ea0503e55fee090d36c5ea8b5954f6fcc0060794e1c' + - 'b7bc24aa1e5c0142fd4ce6e8fd5aa92a7bf84317ea9e1642' + - 'b6995bac6705adf93cbce72433ed0871139970d640f67b78' + - 'e63a7a6d849db2567df69ac7d79f8c62664ac221df228289' + - 'd0a4f9ebd9acb4f87d49da64e51a619fd3f3baccbd9feb12' + - '5abe0cc2c8d17ed1d8546da2b6c641f4d3020a5f9b9f26ac' + - '16546c2d61385505612275ea344c2bbf1ce890023738f715' + - '5e9eba6a071678c8ebd009c328c3eb643679de86e69a9fa5' + - '67a9e146030ff03d546310a0a568c5ba0070e0da22f2cef8' + - '54714b04d399bbc8fd261f9e8efcd0e83bdbc3f5cfb2d024' + - '3e398478cc598e000124eb8858f9df8f52946c2a1ca5c400' - } -}; diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/pummel/dh-group-test.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/pummel/dh-group-test.js deleted file mode 100644 index 37a259ff..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/pummel/dh-group-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../../').BN; -var fixtures = require('../fixtures'); - -describe('BN.js/Slow DH test', function () { - var groups = fixtures.dhGroups; - Object.keys(groups).forEach(function (name) { - it('should match public key for ' + name + ' group', function () { - var group = groups[name]; - - this.timeout(3600 * 1000); - - var base = new BN(2); - var mont = BN.red(new BN(group.prime, 16)); - var priv = new BN(group.priv, 16); - var multed = base.toRed(mont).redPow(priv).fromRed(); - var actual = new Buffer(multed.toArray()); - assert.equal(actual.toString('hex'), group.pub); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/red-test.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/red-test.js deleted file mode 100644 index fc2498c9..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/red-test.js +++ /dev/null @@ -1,263 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Reduction context', function () { - function testMethod (name, fn) { - describe(name + ' method', function () { - it('should support add, iadd, sub, isub operations', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(123).toRed(m); - var b = new BN(231).toRed(m); - - assert.equal(a.redAdd(b).fromRed().toString(10), '97'); - assert.equal(a.redSub(b).fromRed().toString(10), '149'); - assert.equal(b.redSub(a).fromRed().toString(10), '108'); - - assert.equal(a.clone().redIAdd(b).fromRed().toString(10), '97'); - assert.equal(a.clone().redISub(b).fromRed().toString(10), '149'); - assert.equal(b.clone().redISub(a).fromRed().toString(10), '108'); - }); - - it('should support pow and mul operations', function () { - var p192 = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p192); - var a = new BN(123); - var b = new BN(231); - var c = a.toRed(m).redMul(b.toRed(m)).fromRed(); - assert(c.cmp(a.mul(b).mod(p192)) === 0); - - assert.equal(a.toRed(m).redPow(new BN(3)).fromRed() - .cmp(a.sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(4)).fromRed() - .cmp(a.sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(8)).fromRed() - .cmp(a.sqr().sqr().sqr()), 0); - assert.equal(a.toRed(m).redPow(new BN(9)).fromRed() - .cmp(a.sqr().sqr().sqr().mul(a)), 0); - assert.equal(a.toRed(m).redPow(new BN(17)).fromRed() - .cmp(a.sqr().sqr().sqr().sqr().mul(a)), 0); - assert.equal( - a.toRed(m).redPow(new BN('deadbeefabbadead', 16)).fromRed() - .toString(16), - '3aa0e7e304e320b68ef61592bcb00341866d6fa66e11a4d6'); - }); - - it('should sqrtm numbers', function () { - var p = new BN(263); - var m = fn(p); - var q = new BN(11).toRed(m); - - var qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(); - assert.equal(qr.redSqr().cmp(q), 0); - - p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - m = fn(p); - - q = new BN(13).toRed(m); - qr = q.redSqrt(true, p); - assert.equal(qr.redSqr().cmp(q), 0); - - qr = q.redSqrt(false, p); - assert.equal(qr.redSqr().cmp(q), 0); - - // Tonelli-shanks - p = new BN(13); - m = fn(p); - q = new BN(10).toRed(m); - assert.equal(q.redSqrt().fromRed().toString(10), '7'); - }); - - it('should invm numbers', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(3).toRed(m); - var b = a.redInvm(); - assert.equal(a.redMul(b).fromRed().toString(16), '1'); - }); - - it('should invm numbers (regression)', function () { - var p = new BN( - 'ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', - 16); - var a = new BN( - 'e1d969b8192fbac73ea5b7921896d6a2263d4d4077bb8e5055361d1f7f8163f3', - 16); - - var m = fn(p); - a = a.toRed(m); - - assert.equal(a.redInvm().fromRed().negative, 0); - }); - - it('should imul numbers', function () { - var p = new BN( - 'fffffffffffffffffffffffffffffffeffffffffffffffff', - 16); - var m = fn(p); - - var a = new BN('deadbeefabbadead', 16); - var b = new BN('abbadeadbeefdead', 16); - var c = a.mul(b).mod(p); - - assert.equal(a.toRed(m).redIMul(b.toRed(m)).fromRed().toString(16), - c.toString(16)); - }); - - it('should pow(base, 0) == 1', function () { - var base = new BN(256).toRed(BN.red('k256')); - var exponent = new BN(0); - var result = base.redPow(exponent); - assert.equal(result.toString(), '1'); - }); - - it('should shl numbers', function () { - var base = new BN(256).toRed(BN.red('k256')); - var result = base.redShl(1); - assert.equal(result.toString(), '512'); - }); - - it('should reduce when converting to red', function () { - var p = new BN(257); - var m = fn(p); - var a = new BN(5).toRed(m); - - assert.doesNotThrow(function () { - var b = a.redISub(new BN(512).toRed(m)); - b.redISub(new BN(512).toRed(m)); - }); - }); - - it('redNeg and zero value', function () { - var a = new BN(0).toRed(BN.red('k256')).redNeg(); - assert.equal(a.isZero(), true); - }); - - it('should not allow modulus <= 1', function () { - assert.throws(function () { - BN.red(new BN(0)); - }, /^Error: modulus must be greater than 1$/); - - assert.throws(function () { - BN.red(new BN(1)); - }, /^Error: modulus must be greater than 1$/); - - assert.doesNotThrow(function () { - BN.red(new BN(2)); - }); - }); - }); - } - - testMethod('Plain', BN.red); - testMethod('Montgomery', BN.mont); - - describe('Pseudo-Mersenne Primes', function () { - it('should reduce numbers mod k256', function () { - var p = BN._prime('k256'); - - assert.equal(p.ireduce(new BN(0xdead)).toString(16), 'dead'); - assert.equal(p.ireduce(new BN('deadbeef', 16)).toString(16), 'deadbeef'); - - var num = new BN('fedcba9876543210fedcba9876543210dead' + - 'fedcba9876543210fedcba9876543210dead', - 16); - var exp = num.mod(p.p).toString(16); - assert.equal(p.ireduce(num).toString(16), exp); - - var regr = new BN('f7e46df64c1815962bf7bc9c56128798' + - '3f4fcef9cb1979573163b477eab93959' + - '335dfb29ef07a4d835d22aa3b6797760' + - '70a8b8f59ba73d56d01a79af9', - 16); - exp = regr.mod(p.p).toString(16); - - assert.equal(p.ireduce(regr).toString(16), exp); - }); - - it('should not fail to invm number mod k256', function () { - var regr2 = new BN( - '6c150c4aa9a8cf1934485d40674d4a7cd494675537bda36d49405c5d2c6f496f', 16); - regr2 = regr2.toRed(BN.red('k256')); - assert.equal(regr2.redInvm().redMul(regr2).fromRed().cmpn(1), 0); - }); - - it('should correctly square the number', function () { - var p = BN._prime('k256').p; - var red = BN.red('k256'); - - var n = new BN('9cd8cb48c3281596139f147c1364a3ed' + - 'e88d3f310fdb0eb98c924e599ca1b3c9', - 16); - var expected = n.sqr().mod(p); - var actual = n.toRed(red).redSqr().fromRed(); - - assert.equal(actual.toString(16), expected.toString(16)); - }); - - it('redISqr should return right result', function () { - var n = new BN('30f28939', 16); - var actual = n.toRed(BN.red('k256')).redISqr().fromRed(); - assert.equal(actual.toString(16), '95bd93d19520eb1'); - }); - }); - - it('should avoid 4.1.0 regresion', function () { - function bits2int (obits, q) { - var bits = new BN(obits); - var shift = (obits.length << 3) - q.bitLength(); - if (shift > 0) { - bits.ishrn(shift); - } - return bits; - } - var t = new Buffer('aff1651e4cd6036d57aa8b2a05ccf1a9d5a40166340ecbbdc55' + - 'be10b568aa0aa3d05ce9a2fcec9df8ed018e29683c6051cb83e' + - '46ce31ba4edb045356a8d0d80b', 'hex'); - var g = new BN('5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670' + - '716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1' + - 'aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a' + - '338661d10461c0d135472085057f3494309ffa73c611f78b32adbb574' + - '0c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097b' + - 'c5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a3' + - '3afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd24871' + - '99874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f9' + - '96bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7', - 16); - var p = new BN('9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642' + - 'f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55' + - '757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9' + - 'f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b99' + - '3e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368' + - '213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca283716' + - '21cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d' + - '3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256' + - 'a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b', - 16); - var q = new BN('f2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde' + - '9998c1f', 16); - var k = bits2int(t, q); - var expectedR = '89ec4bb1400eccff8e7d9aa515cd1de7803f2daff09693ee7fd1353e' + - '90a68307'; - var r = g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); - assert.equal(r.toString(16), expectedR); - }); - - it('K256.split for 512 bits number should return equal numbers', function () { - var red = BN.red('k256'); - var input = new BN(1).iushln(512).subn(1); - assert.equal(input.bitLength(), 512); - var output = new BN(0); - red.prime.split(input, output); - assert.equal(input.cmp(output), 0); - }); -}); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/utils-test.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/utils-test.js deleted file mode 100644 index 8571905a..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/test/utils-test.js +++ /dev/null @@ -1,345 +0,0 @@ -/* global describe, it */ - -var assert = require('assert'); -var BN = require('../').BN; - -describe('BN.js/Utils', function () { - describe('.toString()', function () { - describe('binary padding', function () { - it('should have a length of 256', function () { - var a = new BN(0); - - assert.equal(a.toString(2, 256).length, 256); - }); - }); - describe('hex padding', function () { - it('should have length of 8 from leading 15', function () { - var a = new BN('ffb9602', 16); - - assert.equal(a.toString('hex', 2).length, 8); - }); - - it('should have length of 8 from leading zero', function () { - var a = new BN('fb9604', 16); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 8 from leading zeros', function () { - var a = new BN(0); - - assert.equal(a.toString('hex', 8).length, 8); - }); - - it('should have length of 64 from leading 15', function () { - var a = new BN( - 'ffb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 2).length, 64); - }); - - it('should have length of 64 from leading zero', function () { - var a = new BN( - 'fb96ff654e61130ba8422f0debca77a0ea74ae5ea8bca9b54ab64aabf01003', - 16); - - assert.equal(a.toString('hex', 64).length, 64); - }); - }); - }); - - describe('.isNeg()', function () { - it('should return true for negative numbers', function () { - assert.equal(new BN(-1).isNeg(), true); - assert.equal(new BN(1).isNeg(), false); - assert.equal(new BN(0).isNeg(), false); - assert.equal(new BN('-0', 10).isNeg(), false); - }); - }); - - describe('.isOdd()', function () { - it('should return true for odd numbers', function () { - assert.equal(new BN(0).isOdd(), false); - assert.equal(new BN(1).isOdd(), true); - assert.equal(new BN(2).isOdd(), false); - assert.equal(new BN('-0', 10).isOdd(), false); - assert.equal(new BN('-1', 10).isOdd(), true); - assert.equal(new BN('-2', 10).isOdd(), false); - }); - }); - - describe('.isEven()', function () { - it('should return true for even numbers', function () { - assert.equal(new BN(0).isEven(), true); - assert.equal(new BN(1).isEven(), false); - assert.equal(new BN(2).isEven(), true); - assert.equal(new BN('-0', 10).isEven(), true); - assert.equal(new BN('-1', 10).isEven(), false); - assert.equal(new BN('-2', 10).isEven(), true); - }); - }); - - describe('.isZero()', function () { - it('should return true for zero', function () { - assert.equal(new BN(0).isZero(), true); - assert.equal(new BN(1).isZero(), false); - assert.equal(new BN(0xffffffff).isZero(), false); - }); - }); - - describe('.bitLength()', function () { - it('should return proper bitLength', function () { - assert.equal(new BN(0).bitLength(), 0); - assert.equal(new BN(0x1).bitLength(), 1); - assert.equal(new BN(0x2).bitLength(), 2); - assert.equal(new BN(0x3).bitLength(), 2); - assert.equal(new BN(0x4).bitLength(), 3); - assert.equal(new BN(0x8).bitLength(), 4); - assert.equal(new BN(0x10).bitLength(), 5); - assert.equal(new BN(0x100).bitLength(), 9); - assert.equal(new BN(0x123456).bitLength(), 21); - assert.equal(new BN('123456789', 16).bitLength(), 33); - assert.equal(new BN('8023456789', 16).bitLength(), 40); - }); - }); - - describe('.byteLength()', function () { - it('should return proper byteLength', function () { - assert.equal(new BN(0).byteLength(), 0); - assert.equal(new BN(0x1).byteLength(), 1); - assert.equal(new BN(0x2).byteLength(), 1); - assert.equal(new BN(0x3).byteLength(), 1); - assert.equal(new BN(0x4).byteLength(), 1); - assert.equal(new BN(0x8).byteLength(), 1); - assert.equal(new BN(0x10).byteLength(), 1); - assert.equal(new BN(0x100).byteLength(), 2); - assert.equal(new BN(0x123456).byteLength(), 3); - assert.equal(new BN('123456789', 16).byteLength(), 5); - assert.equal(new BN('8023456789', 16).byteLength(), 5); - }); - }); - - describe('.toArray()', function () { - it('should return [ 0 ] for `0`', function () { - var n = new BN(0); - assert.deepEqual(n.toArray('be'), [ 0 ]); - assert.deepEqual(n.toArray('le'), [ 0 ]); - }); - - it('should zero pad to desired lengths', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toArray('be', 5), [ 0x00, 0x00, 0x12, 0x34, 0x56 ]); - assert.deepEqual(n.toArray('le', 5), [ 0x56, 0x34, 0x12, 0x00, 0x00 ]); - }); - - it('should throw when naturally larger than desired length', function () { - var n = new BN(0x123456); - assert.throws(function () { - n.toArray('be', 2); - }, /^Error: byte array longer than desired length$/); - }); - }); - - describe('.toBuffer', function () { - it('should return proper Buffer', function () { - var n = new BN(0x123456); - assert.deepEqual(n.toBuffer('be', 5).toString('hex'), '0000123456'); - assert.deepEqual(n.toBuffer('le', 5).toString('hex'), '5634120000'); - }); - }); - - describe('.toNumber()', function () { - it('should return proper Number if below the limit', function () { - assert.deepEqual(new BN(0x123456).toNumber(), 0x123456); - assert.deepEqual(new BN(0x3ffffff).toNumber(), 0x3ffffff); - assert.deepEqual(new BN(0x4000000).toNumber(), 0x4000000); - assert.deepEqual(new BN(0x10000000000000).toNumber(), 0x10000000000000); - assert.deepEqual(new BN(0x10040004004000).toNumber(), 0x10040004004000); - assert.deepEqual(new BN(-0x123456).toNumber(), -0x123456); - assert.deepEqual(new BN(-0x3ffffff).toNumber(), -0x3ffffff); - assert.deepEqual(new BN(-0x4000000).toNumber(), -0x4000000); - assert.deepEqual(new BN(-0x10000000000000).toNumber(), -0x10000000000000); - assert.deepEqual(new BN(-0x10040004004000).toNumber(), -0x10040004004000); - }); - - it('should throw when number exceeds 53 bits', function () { - var n = new BN(1).iushln(54); - assert.throws(function () { - n.toNumber(); - }, /^Error: Number can only safely store up to 53 bits$/); - }); - }); - - describe('.zeroBits()', function () { - it('should return proper zeroBits', function () { - assert.equal(new BN(0).zeroBits(), 0); - assert.equal(new BN(0x1).zeroBits(), 0); - assert.equal(new BN(0x2).zeroBits(), 1); - assert.equal(new BN(0x3).zeroBits(), 0); - assert.equal(new BN(0x4).zeroBits(), 2); - assert.equal(new BN(0x8).zeroBits(), 3); - assert.equal(new BN(0x10).zeroBits(), 4); - assert.equal(new BN(0x100).zeroBits(), 8); - assert.equal(new BN(0x1000000).zeroBits(), 24); - assert.equal(new BN(0x123456).zeroBits(), 1); - }); - }); - - describe('.toJSON', function () { - it('should return hex string', function () { - assert.equal(new BN(0x123).toJSON(), '123'); - }); - }); - - describe('.cmpn', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmpn(42), 0); - assert.equal(new BN(42).cmpn(43), -1); - assert.equal(new BN(42).cmpn(41), 1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffe), 0); - assert.equal(new BN(0x3fffffe).cmpn(0x3ffffff), -1); - assert.equal(new BN(0x3fffffe).cmpn(0x3fffffd), 1); - assert.throws(function () { - new BN(0x3fffffe).cmpn(0x4000000); - }, /^Error: Number is too big$/); - assert.equal(new BN(42).cmpn(-42), 1); - assert.equal(new BN(-42).cmpn(42), -1); - assert.equal(new BN(-42).cmpn(-42), 0); - assert.equal(1 / new BN(-42).cmpn(-42), Infinity); - }); - }); - - describe('.cmp', function () { - it('should return -1, 0, 1 correctly', function () { - assert.equal(new BN(42).cmp(new BN(42)), 0); - assert.equal(new BN(42).cmp(new BN(43)), -1); - assert.equal(new BN(42).cmp(new BN(41)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffe)), 0); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3ffffff)), -1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x3fffffd)), 1); - assert.equal(new BN(0x3fffffe).cmp(new BN(0x4000000)), -1); - assert.equal(new BN(42).cmp(new BN(-42)), 1); - assert.equal(new BN(-42).cmp(new BN(42)), -1); - assert.equal(new BN(-42).cmp(new BN(-42)), 0); - assert.equal(1 / new BN(-42).cmp(new BN(-42)), Infinity); - }); - }); - - describe('comparison shorthands', function () { - it('.gtn greater than', function () { - assert.equal(new BN(3).gtn(2), true); - assert.equal(new BN(3).gtn(3), false); - assert.equal(new BN(3).gtn(4), false); - }); - it('.gt greater than', function () { - assert.equal(new BN(3).gt(new BN(2)), true); - assert.equal(new BN(3).gt(new BN(3)), false); - assert.equal(new BN(3).gt(new BN(4)), false); - }); - it('.gten greater than or equal', function () { - assert.equal(new BN(3).gten(3), true); - assert.equal(new BN(3).gten(2), true); - assert.equal(new BN(3).gten(4), false); - }); - it('.gte greater than or equal', function () { - assert.equal(new BN(3).gte(new BN(3)), true); - assert.equal(new BN(3).gte(new BN(2)), true); - assert.equal(new BN(3).gte(new BN(4)), false); - }); - it('.ltn less than', function () { - assert.equal(new BN(2).ltn(3), true); - assert.equal(new BN(2).ltn(2), false); - assert.equal(new BN(2).ltn(1), false); - }); - it('.lt less than', function () { - assert.equal(new BN(2).lt(new BN(3)), true); - assert.equal(new BN(2).lt(new BN(2)), false); - assert.equal(new BN(2).lt(new BN(1)), false); - }); - it('.lten less than or equal', function () { - assert.equal(new BN(3).lten(3), true); - assert.equal(new BN(3).lten(2), false); - assert.equal(new BN(3).lten(4), true); - }); - it('.lte less than or equal', function () { - assert.equal(new BN(3).lte(new BN(3)), true); - assert.equal(new BN(3).lte(new BN(2)), false); - assert.equal(new BN(3).lte(new BN(4)), true); - }); - it('.eqn equal', function () { - assert.equal(new BN(3).eqn(3), true); - assert.equal(new BN(3).eqn(2), false); - assert.equal(new BN(3).eqn(4), false); - }); - it('.eq equal', function () { - assert.equal(new BN(3).eq(new BN(3)), true); - assert.equal(new BN(3).eq(new BN(2)), false); - assert.equal(new BN(3).eq(new BN(4)), false); - }); - }); - - describe('.fromTwos', function () { - it('should convert from two\'s complement to negative number', function () { - assert.equal(new BN('00000000', 16).fromTwos(32).toNumber(), 0); - assert.equal(new BN('00000001', 16).fromTwos(32).toNumber(), 1); - assert.equal(new BN('7fffffff', 16).fromTwos(32).toNumber(), 2147483647); - assert.equal(new BN('80000000', 16).fromTwos(32).toNumber(), -2147483648); - assert.equal(new BN('f0000000', 16).fromTwos(32).toNumber(), -268435456); - assert.equal(new BN('f1234567', 16).fromTwos(32).toNumber(), -249346713); - assert.equal(new BN('ffffffff', 16).fromTwos(32).toNumber(), -1); - assert.equal(new BN('fffffffe', 16).fromTwos(32).toNumber(), -2); - assert.equal(new BN('fffffffffffffffffffffffffffffffe', 16) - .fromTwos(128).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'fffffffffffffffffffffffffffffffe', 16).fromTwos(256).toNumber(), -2); - assert.equal(new BN('ffffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toNumber(), -1); - assert.equal(new BN('7fffffffffffffffffffffffffffffff' + - 'ffffffffffffffffffffffffffffffff', 16).fromTwos(256).toString(10), - new BN('5789604461865809771178549250434395392663499' + - '2332820282019728792003956564819967', 10).toString(10)); - assert.equal(new BN('80000000000000000000000000000000' + - '00000000000000000000000000000000', 16).fromTwos(256).toString(10), - new BN('-578960446186580977117854925043439539266349' + - '92332820282019728792003956564819968', 10).toString(10)); - }); - }); - - describe('.toTwos', function () { - it('should convert from negative number to two\'s complement', function () { - assert.equal(new BN(0).toTwos(32).toString(16), '0'); - assert.equal(new BN(1).toTwos(32).toString(16), '1'); - assert.equal(new BN(2147483647).toTwos(32).toString(16), '7fffffff'); - assert.equal(new BN('-2147483648', 10).toTwos(32).toString(16), '80000000'); - assert.equal(new BN('-268435456', 10).toTwos(32).toString(16), 'f0000000'); - assert.equal(new BN('-249346713', 10).toTwos(32).toString(16), 'f1234567'); - assert.equal(new BN('-1', 10).toTwos(32).toString(16), 'ffffffff'); - assert.equal(new BN('-2', 10).toTwos(32).toString(16), 'fffffffe'); - assert.equal(new BN('-2', 10).toTwos(128).toString(16), - 'fffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-2', 10).toTwos(256).toString(16), - 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe'); - assert.equal(new BN('-1', 10).toTwos(256).toString(16), - 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('5789604461865809771178549250434395392663' + - '4992332820282019728792003956564819967', 10).toTwos(256).toString(16), - '7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); - assert.equal(new BN('-578960446186580977117854925043439539266' + - '34992332820282019728792003956564819968', 10).toTwos(256).toString(16), - '8000000000000000000000000000000000000000000000000000000000000000'); - }); - }); - - describe('.isBN', function () { - it('should return true for BN', function () { - assert.equal(BN.isBN(new BN()), true); - }); - - it('should return false for everything else', function () { - assert.equal(BN.isBN(1), false); - assert.equal(BN.isBN([]), false); - assert.equal(BN.isBN({}), false); - }); - }); -}); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/util/genCombMulTo.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/util/genCombMulTo.js deleted file mode 100644 index 8b456c7c..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/util/genCombMulTo.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -// NOTE: This could be potentionally used to generate loop-less multiplications -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('var w' + k + ' = c;'); - src.push('c = 0;'); - for (var j = minJ; j <= maxJ; j++) { - i = k - j; - - src.push('lo = Math.imul(al' + i + ', bl' + j + ');'); - src.push('mid = Math.imul(al' + i + ', bh' + j + ');'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = Math.imul(ah' + i + ', bh' + j + ');'); - - src.push('w' + k + ' = (w' + k + ' + lo) | 0;'); - src.push('w' + k + ' = (w' + k + ' + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (c + hi) | 0;'); - src.push('c = (c + (mid >>> 13)) | 0;'); - src.push('c = (c + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/util/genCombMulTo10.js b/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/util/genCombMulTo10.js deleted file mode 100644 index cf2e6e80..00000000 --- a/truebit-implementation/node_modules/web3-utils/node_modules/bn.js/util/genCombMulTo10.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -function genCombMulTo (alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = self.words;', - 'var b = num.words;', - 'var o = out.words;', - 'var c = 0;', - 'var lo;', - 'var mid;', - 'var hi;' - ]; - for (var i = 0; i < alen; i++) { - src.push('var a' + i + ' = a[' + i + '] | 0;'); - src.push('var al' + i + ' = a' + i + ' & 0x1fff;'); - src.push('var ah' + i + ' = a' + i + ' >>> 13;'); - } - for (i = 0; i < blen; i++) { - src.push('var b' + i + ' = b[' + i + '] | 0;'); - src.push('var bl' + i + ' = b' + i + ' & 0x1fff;'); - src.push('var bh' + i + ' = b' + i + ' >>> 13;'); - } - src.push(''); - src.push('out.negative = self.negative ^ num.negative;'); - src.push('out.length = ' + len + ';'); - - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); - - src.push('\/* k = ' + k + ' *\/'); - src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');'); - src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');'); - src.push( - 'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;'); - src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');'); - - for (var j = minJ + 1; j <= maxJ; j++) { - i = k - j; - - src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;'); - src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;'); - src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;'); - } - - src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;'); - src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;'); - src.push('w' + k + ' &= 0x3ffffff;'); - } - // Store in separate step for better memory access - for (k = 0; k < len; k++) { - src.push('o[' + k + '] = w' + k + ';'); - } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - - return src.join('\n'); -} - -console.log(genCombMulTo(10, 10)); diff --git a/truebit-implementation/node_modules/web3-utils/package.json b/truebit-implementation/node_modules/web3-utils/package.json deleted file mode 100644 index caf0c528..00000000 --- a/truebit-implementation/node_modules/web3-utils/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "_from": "web3-utils@1.0.0-beta.36", - "_id": "web3-utils@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-7ri74lG5fS2Th0fhYvTtiEHMB1Pmf2p7dQx1COQ3OHNI/CHNEMjzoNMEbBU6FAENrywfoFur40K4m0AOmEUq5A==", - "_location": "/web3-utils", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "web3-utils@1.0.0-beta.36", - "name": "web3-utils", - "escapedName": "web3-utils", - "rawSpec": "1.0.0-beta.36", - "saveSpec": null, - "fetchSpec": "1.0.0-beta.36" - }, - "_requiredBy": [ - "/web3", - "/web3-core", - "/web3-core-helpers", - "/web3-core-method", - "/web3-eth", - "/web3-eth-abi", - "/web3-eth-accounts", - "/web3-eth-contract", - "/web3-eth-ens", - "/web3-eth-iban", - "/web3-eth-personal", - "/web3-net" - ], - "_resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.36.tgz", - "_shasum": "dc19c9aeec009b1816cc91ef64d7fe9f8ee344c9", - "_spec": "web3-utils@1.0.0-beta.36", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3", - "bundleDependencies": false, - "dependencies": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - }, - "deprecated": false, - "description": "Collection of utility functions used in web3.js.", - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3-utils", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3-utils" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3-utils/src/bloomFilter.js b/truebit-implementation/node_modules/web3-utils/src/bloomFilter.js deleted file mode 100644 index 0aa855ab..00000000 --- a/truebit-implementation/node_modules/web3-utils/src/bloomFilter.js +++ /dev/null @@ -1,111 +0,0 @@ -/*jshint bitwise: false*/ - -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ - -/** - * @file bloom.js - * @author Bas van Kervel - * @date 2017 - */ - -/** - * Ethereum bloom filter support. - * - * TODO UNDOCUMENTED - * - * @module bloom - * @class [bloom] bloom - */ - -var utils = require("./utils.js"); - -function codePointToInt(codePoint) { - if (codePoint >= 48 && codePoint <= 57) { /*['0'..'9'] -> [0..9]*/ - return codePoint-48; - } - - if (codePoint >= 65 && codePoint <= 70) { /*['A'..'F'] -> [10..15]*/ - return codePoint-55; - } - - if (codePoint >= 97 && codePoint <= 102) { /*['a'..'f'] -> [10..15]*/ - return codePoint-87; - } - - throw "invalid bloom"; -} - -function testBytes(bloom, bytes) { - var hash = utils.sha3(bytes).replace('0x',''); - - for (var i = 0; i < 12; i += 4) { - // calculate bit position in bloom filter that must be active - var bitpos = ((parseInt(hash.substr(i, 2), 16) << 8) + parseInt(hash.substr((i+2), 2), 16)) & 2047; - - // test if bitpos in bloom is active - var code = codePointToInt(bloom.charCodeAt(bloom.length - 1 - Math.floor(bitpos/4))); - var offset = 1 << (bitpos % 4); - - if ((code&offset) !== offset) { - return false; - } - } - - return true; -} - -/** - * Returns true if address is part of the given bloom. - * note: false positives are possible. - * - * @method testAddress - * @param {String} hex encoded bloom - * @param {String} address in hex notation - * @returns {Boolean} topic is (probably) part of the block - */ -var testAddress = function(bloom, address) { - if (!utils.isBloom(bloom)) { - throw 'Invalid bloom given'; - } - if (!utils.isAddress(address)) { - throw 'Invalid address given: "'+ address +'\"'; - } - - return testBytes(bloom, address); -}; - -/** - * Returns true if the topic is part of the given bloom. - * note: false positives are possible. - * - * @method hasTopic - * @param {String} hex encoded bloom - * @param {String} address in hex notation - * @returns {Boolean} topic is (probably) part of the block - */ -var testTopic = function(bloom, topic) { - if (!utils.isBloom(bloom)) throw "invalid bloom"; - if (!utils.isTopic(topic)) throw "invalid topic"; - - return testBytes(bloom, topic); -}; - -module.exports = { - testAddress: testAddress, - testTopic: testTopic -}; diff --git a/truebit-implementation/node_modules/web3-utils/src/index.js b/truebit-implementation/node_modules/web3-utils/src/index.js deleted file mode 100644 index d2a06611..00000000 --- a/truebit-implementation/node_modules/web3-utils/src/index.js +++ /dev/null @@ -1,364 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file utils.js - * @author Marek Kotewicz - * @author Fabian Vogelsteller - * @date 2017 - */ - - -var _ = require('underscore'); -var ethjsUnit = require('ethjs-unit'); -var utils = require('./utils.js'); -var soliditySha3 = require('./soliditySha3.js'); -var randomHex = require('randomhex'); - - - -/** - * Fires an error in an event emitter and callback and returns the eventemitter - * - * @method _fireError - * @param {Object} error a string, a error, or an object with {message, data} - * @param {Object} emitter - * @param {Function} reject - * @param {Function} callback - * @return {Object} the emitter - */ -var _fireError = function (error, emitter, reject, callback) { - /*jshint maxcomplexity: 10 */ - - // add data if given - if(_.isObject(error) && !(error instanceof Error) && error.data) { - if(_.isObject(error.data) || _.isArray(error.data)) { - error.data = JSON.stringify(error.data, null, 2); - } - - error = error.message +"\n"+ error.data; - } - - if(_.isString(error)) { - error = new Error(error); - } - - if (_.isFunction(callback)) { - callback(error); - } - if (_.isFunction(reject)) { - // suppress uncatched error if an error listener is present - // OR suppress uncatched error if an callback listener is present - if (emitter && - (_.isFunction(emitter.listeners) && - emitter.listeners('error').length) || _.isFunction(callback)) { - emitter.catch(function(){}); - } - // reject later, to be able to return emitter - setTimeout(function () { - reject(error); - }, 1); - } - - if(emitter && _.isFunction(emitter.emit)) { - // emit later, to be able to return emitter - setTimeout(function () { - emitter.emit('error', error); - emitter.removeAllListeners(); - }, 1); - } - - return emitter; -}; - -/** - * Should be used to create full function/event name from json abi - * - * @method _jsonInterfaceMethodToString - * @param {Object} json - * @return {String} full function/event name - */ -var _jsonInterfaceMethodToString = function (json) { - if (_.isObject(json) && json.name && json.name.indexOf('(') !== -1) { - return json.name; - } - - return json.name + '(' + _flattenTypes(false, json.inputs).join(',') + ')'; -}; - - -/** - * Should be used to flatten json abi inputs/outputs into an array of type-representing-strings - * - * @method _flattenTypes - * @param {bool} includeTuple - * @param {Object} puts - * @return {Array} parameters as strings - */ -var _flattenTypes = function(includeTuple, puts) -{ - // console.log("entered _flattenTypes. inputs/outputs: " + puts) - var types = []; - - puts.forEach(function(param) { - if (typeof param.components === 'object') { - if (param.type.substring(0, 5) !== 'tuple') { - throw new Error('components found but type is not tuple; report on GitHub'); - } - var suffix = ''; - var arrayBracket = param.type.indexOf('['); - if (arrayBracket >= 0) { suffix = param.type.substring(arrayBracket); } - var result = _flattenTypes(includeTuple, param.components); - // console.log("result should have things: " + result) - if(_.isArray(result) && includeTuple) { - // console.log("include tuple word, and its an array. joining...: " + result.types) - types.push('tuple(' + result.join(',') + ')' + suffix); - } - else if(!includeTuple) { - // console.log("don't include tuple, but its an array. joining...: " + result) - types.push('(' + result.join(',') + ')' + suffix); - } - else { - // console.log("its a single type within a tuple: " + result.types) - types.push('(' + result + ')'); - } - } else { - // console.log("its a type and not directly in a tuple: " + param.type) - types.push(param.type); - } - }); - - return types; -}; - - -/** - * Should be called to get ascii from it's hex representation - * - * @method hexToAscii - * @param {String} hex - * @returns {String} ascii string representation of hex value - */ -var hexToAscii = function(hex) { - if (!utils.isHexStrict(hex)) - throw new Error('The parameter must be a valid HEX string.'); - - var str = ""; - var i = 0, l = hex.length; - if (hex.substring(0, 2) === '0x') { - i = 2; - } - for (; i < l; i+=2) { - var code = parseInt(hex.substr(i, 2), 16); - str += String.fromCharCode(code); - } - - return str; -}; - -/** - * Should be called to get hex representation (prefixed by 0x) of ascii string - * - * @method asciiToHex - * @param {String} str - * @returns {String} hex representation of input string - */ -var asciiToHex = function(str) { - if(!str) - return "0x00"; - var hex = ""; - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - } - - return "0x" + hex; -}; - - - -/** - * Returns value of unit in Wei - * - * @method getUnitValue - * @param {String} unit the unit to convert to, default ether - * @returns {BN} value of the unit (in Wei) - * @throws error if the unit is not correct:w - */ -var getUnitValue = function (unit) { - unit = unit ? unit.toLowerCase() : 'ether'; - if (!ethjsUnit.unitMap[unit]) { - throw new Error('This unit "'+ unit +'" doesn\'t exist, please use the one of the following units' + JSON.stringify(ethjsUnit.unitMap, null, 2)); - } - return unit; -}; - -/** - * Takes a number of wei and converts it to any other ether unit. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method fromWei - * @param {Number|String} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert to, default ether - * @return {String|Object} When given a BN object it returns one as well, otherwise a number - */ -var fromWei = function(number, unit) { - unit = getUnitValue(unit); - - if(!utils.isBN(number) && !_.isString(number)) { - throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.'); - } - - return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10); -}; - -/** - * Takes a number of a unit and converts it to wei. - * - * Possible units are: - * SI Short SI Full Effigy Other - * - kwei femtoether babbage - * - mwei picoether lovelace - * - gwei nanoether shannon nano - * - -- microether szabo micro - * - -- microether szabo micro - * - -- milliether finney milli - * - ether -- -- - * - kether -- grand - * - mether - * - gether - * - tether - * - * @method toWei - * @param {Number|String|BN} number can be a number, number string or a HEX of a decimal - * @param {String} unit the unit to convert from, default ether - * @return {String|Object} When given a BN object it returns one as well, otherwise a number - */ -var toWei = function(number, unit) { - unit = getUnitValue(unit); - - if(!utils.isBN(number) && !_.isString(number)) { - throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.'); - } - - return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10); -}; - - - - -/** - * Converts to a checksum address - * - * @method toChecksumAddress - * @param {String} address the given HEX address - * @return {String} - */ -var toChecksumAddress = function (address) { - if (typeof address === 'undefined') return ''; - - if(!/^(0x)?[0-9a-f]{40}$/i.test(address)) - throw new Error('Given address "'+ address +'" is not a valid Ethereum address.'); - - - - address = address.toLowerCase().replace(/^0x/i,''); - var addressHash = utils.sha3(address).replace(/^0x/i,''); - var checksumAddress = '0x'; - - for (var i = 0; i < address.length; i++ ) { - // If ith character is 9 to f then make it uppercase - if (parseInt(addressHash[i], 16) > 7) { - checksumAddress += address[i].toUpperCase(); - } else { - checksumAddress += address[i]; - } - } - return checksumAddress; -}; - - - -module.exports = { - _fireError: _fireError, - _jsonInterfaceMethodToString: _jsonInterfaceMethodToString, - _flattenTypes: _flattenTypes, - // extractDisplayName: extractDisplayName, - // extractTypeName: extractTypeName, - randomHex: randomHex, - _: _, - BN: utils.BN, - isBN: utils.isBN, - isBigNumber: utils.isBigNumber, - isHex: utils.isHex, - isHexStrict: utils.isHexStrict, - sha3: utils.sha3, - keccak256: utils.sha3, - soliditySha3: soliditySha3, - isAddress: utils.isAddress, - checkAddressChecksum: utils.checkAddressChecksum, - toChecksumAddress: toChecksumAddress, - toHex: utils.toHex, - toBN: utils.toBN, - - bytesToHex: utils.bytesToHex, - hexToBytes: utils.hexToBytes, - - hexToNumberString: utils.hexToNumberString, - - hexToNumber: utils.hexToNumber, - toDecimal: utils.hexToNumber, // alias - - numberToHex: utils.numberToHex, - fromDecimal: utils.numberToHex, // alias - - hexToUtf8: utils.hexToUtf8, - hexToString: utils.hexToUtf8, - toUtf8: utils.hexToUtf8, - - utf8ToHex: utils.utf8ToHex, - stringToHex: utils.utf8ToHex, - fromUtf8: utils.utf8ToHex, - - hexToAscii: hexToAscii, - toAscii: hexToAscii, - asciiToHex: asciiToHex, - fromAscii: asciiToHex, - - unitMap: ethjsUnit.unitMap, - toWei: toWei, - fromWei: fromWei, - - padLeft: utils.leftPad, - leftPad: utils.leftPad, - padRight: utils.rightPad, - rightPad: utils.rightPad, - toTwosComplement: utils.toTwosComplement -}; - diff --git a/truebit-implementation/node_modules/web3-utils/src/soliditySha3.js b/truebit-implementation/node_modules/web3-utils/src/soliditySha3.js deleted file mode 100644 index b1767abd..00000000 --- a/truebit-implementation/node_modules/web3-utils/src/soliditySha3.js +++ /dev/null @@ -1,245 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file soliditySha3.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -var _ = require('underscore'); -var BN = require('bn.js'); -var utils = require('./utils.js'); - - -var _elementaryName = function (name) { - /*jshint maxcomplexity:false */ - - if (name.startsWith('int[')) { - return 'int256' + name.slice(3); - } else if (name === 'int') { - return 'int256'; - } else if (name.startsWith('uint[')) { - return 'uint256' + name.slice(4); - } else if (name === 'uint') { - return 'uint256'; - } else if (name.startsWith('fixed[')) { - return 'fixed128x128' + name.slice(5); - } else if (name === 'fixed') { - return 'fixed128x128'; - } else if (name.startsWith('ufixed[')) { - return 'ufixed128x128' + name.slice(6); - } else if (name === 'ufixed') { - return 'ufixed128x128'; - } - return name; -}; - -// Parse N from type -var _parseTypeN = function (type) { - var typesize = /^\D+(\d+).*$/.exec(type); - return typesize ? parseInt(typesize[1], 10) : null; -}; - -// Parse N from type[] -var _parseTypeNArray = function (type) { - var arraySize = /^\D+\d*\[(\d+)\]$/.exec(type); - return arraySize ? parseInt(arraySize[1], 10) : null; -}; - -var _parseNumber = function (arg) { - var type = typeof arg; - if (type === 'string') { - if (utils.isHexStrict(arg)) { - return new BN(arg.replace(/0x/i,''), 16); - } else { - return new BN(arg, 10); - } - } else if (type === 'number') { - return new BN(arg); - } else if (utils.isBigNumber(arg)) { - return new BN(arg.toString(10)); - } else if (utils.isBN(arg)) { - return arg; - } else { - throw new Error(arg +' is not a number'); - } -}; - -var _solidityPack = function (type, value, arraySize) { - /*jshint maxcomplexity:false */ - - var size, num; - type = _elementaryName(type); - - - if (type === 'bytes') { - - if (value.replace(/^0x/i,'').length % 2 !== 0) { - throw new Error('Invalid bytes characters '+ value.length); - } - - return value; - } else if (type === 'string') { - return utils.utf8ToHex(value); - } else if (type === 'bool') { - return value ? '01' : '00'; - } else if (type.startsWith('address')) { - if(arraySize) { - size = 64; - } else { - size = 40; - } - - if(!utils.isAddress(value)) { - throw new Error(value +' is not a valid address, or the checksum is invalid.'); - } - - return utils.leftPad(value.toLowerCase(), size); - } - - size = _parseTypeN(type); - - if (type.startsWith('bytes')) { - - if(!size) { - throw new Error('bytes[] not yet supported in solidity'); - } - - // must be 32 byte slices when in an array - if(arraySize) { - size = 32; - } - - if (size < 1 || size > 32 || size < value.replace(/^0x/i,'').length / 2 ) { - throw new Error('Invalid bytes' + size +' for '+ value); - } - - return utils.rightPad(value, size * 2); - } else if (type.startsWith('uint')) { - - if ((size % 8) || (size < 8) || (size > 256)) { - throw new Error('Invalid uint'+size+' size'); - } - - num = _parseNumber(value); - if (num.bitLength() > size) { - throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength()); - } - - if(num.lt(new BN(0))) { - throw new Error('Supplied uint '+ num.toString() +' is negative'); - } - - return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num; - } else if (type.startsWith('int')) { - - if ((size % 8) || (size < 8) || (size > 256)) { - throw new Error('Invalid int'+size+' size'); - } - - num = _parseNumber(value); - if (num.bitLength() > size) { - throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength()); - } - - if(num.lt(new BN(0))) { - return num.toTwos(size).toString('hex'); - } else { - return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num; - } - - } else { - // FIXME: support all other types - throw new Error('Unsupported or invalid type: ' + type); - } -}; - - -var _processSoliditySha3Args = function (arg) { - /*jshint maxcomplexity:false */ - - if(_.isArray(arg)) { - throw new Error('Autodetection of array types is not supported.'); - } - - var type, value = ''; - var hexArg, arraySize; - - // if type is given - if (_.isObject(arg) && (arg.hasOwnProperty('v') || arg.hasOwnProperty('t') || arg.hasOwnProperty('value') || arg.hasOwnProperty('type'))) { - type = arg.hasOwnProperty('t') ? arg.t : arg.type; - value = arg.hasOwnProperty('v') ? arg.v : arg.value; - - // otherwise try to guess the type - } else { - - type = utils.toHex(arg, true); - value = utils.toHex(arg); - - if (!type.startsWith('int') && !type.startsWith('uint')) { - type = 'bytes'; - } - } - - if ((type.startsWith('int') || type.startsWith('uint')) && typeof value === 'string' && !/^(-)?0x/i.test(value)) { - value = new BN(value); - } - - // get the array size - if(_.isArray(value)) { - arraySize = _parseTypeNArray(type); - if(arraySize && value.length !== arraySize) { - throw new Error(type +' is not matching the given array '+ JSON.stringify(value)); - } else { - arraySize = value.length; - } - } - - - if (_.isArray(value)) { - hexArg = value.map(function (val) { - return _solidityPack(type, val, arraySize).toString('hex').replace('0x',''); - }); - return hexArg.join(''); - } else { - hexArg = _solidityPack(type, value, arraySize); - return hexArg.toString('hex').replace('0x',''); - } - -}; - -/** - * Hashes solidity values to a sha3 hash using keccak 256 - * - * @method soliditySha3 - * @return {Object} the sha3 - */ -var soliditySha3 = function () { - /*jshint maxcomplexity:false */ - - var args = Array.prototype.slice.call(arguments); - - var hexArgs = _.map(args, _processSoliditySha3Args); - - // console.log(args, hexArgs); - // console.log('0x'+ hexArgs.join('')); - - return utils.sha3('0x'+ hexArgs.join('')); -}; - - -module.exports = soliditySha3; diff --git a/truebit-implementation/node_modules/web3-utils/src/utils.js b/truebit-implementation/node_modules/web3-utils/src/utils.js deleted file mode 100644 index 616cce29..00000000 --- a/truebit-implementation/node_modules/web3-utils/src/utils.js +++ /dev/null @@ -1,467 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . - */ -/** - * @file utils.js - * @author Fabian Vogelsteller - * @date 2017 - */ - -var _ = require('underscore'); -var BN = require('bn.js'); -var numberToBN = require('number-to-bn'); -var utf8 = require('utf8'); -var Hash = require("eth-lib/lib/hash"); - - -/** - * Returns true if object is BN, otherwise false - * - * @method isBN - * @param {Object} object - * @return {Boolean} - */ -var isBN = function (object) { - return object instanceof BN || - (object && object.constructor && object.constructor.name === 'BN'); -}; - -/** - * Returns true if object is BigNumber, otherwise false - * - * @method isBigNumber - * @param {Object} object - * @return {Boolean} - */ -var isBigNumber = function (object) { - return object && object.constructor && object.constructor.name === 'BigNumber'; -}; - -/** - * Takes an input and transforms it into an BN - * - * @method toBN - * @param {Number|String|BN} number, string, HEX string or BN - * @return {BN} BN - */ -var toBN = function(number){ - try { - return numberToBN.apply(null, arguments); - } catch(e) { - throw new Error(e + ' Given value: "'+ number +'"'); - } -}; - - -/** - * Takes and input transforms it into BN and if it is negative value, into two's complement - * - * @method toTwosComplement - * @param {Number|String|BN} number - * @return {String} - */ -var toTwosComplement = function (number) { - return '0x'+ toBN(number).toTwos(256).toString(16, 64); -}; - -/** - * Checks if the given string is an address - * - * @method isAddress - * @param {String} address the given HEX address - * @return {Boolean} - */ -var isAddress = function (address) { - // check if it has the basic requirements of an address - if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { - return false; - // If it's ALL lowercase or ALL upppercase - } else if (/^(0x|0X)?[0-9a-f]{40}$/.test(address) || /^(0x|0X)?[0-9A-F]{40}$/.test(address)) { - return true; - // Otherwise check each case - } else { - return checkAddressChecksum(address); - } -}; - - - -/** - * Checks if the given string is a checksummed address - * - * @method checkAddressChecksum - * @param {String} address the given HEX address - * @return {Boolean} - */ -var checkAddressChecksum = function (address) { - // Check each case - address = address.replace(/^0x/i,''); - var addressHash = sha3(address.toLowerCase()).replace(/^0x/i,''); - - for (var i = 0; i < 40; i++ ) { - // the nth letter should be uppercase if the nth digit of casemap is 1 - if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) { - return false; - } - } - return true; -}; - -/** - * Should be called to pad string to expected length - * - * @method leftPad - * @param {String} string to be padded - * @param {Number} chars that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var leftPad = function (string, chars, sign) { - var hasPrefix = /^0x/i.test(string) || typeof string === 'number'; - string = string.toString(16).replace(/^0x/i,''); - - var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0; - - return (hasPrefix ? '0x' : '') + new Array(padding).join(sign ? sign : "0") + string; -}; - -/** - * Should be called to pad string to expected length - * - * @method rightPad - * @param {String} string to be padded - * @param {Number} chars that result string should have - * @param {String} sign, by default 0 - * @returns {String} right aligned string - */ -var rightPad = function (string, chars, sign) { - var hasPrefix = /^0x/i.test(string) || typeof string === 'number'; - string = string.toString(16).replace(/^0x/i,''); - - var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0; - - return (hasPrefix ? '0x' : '') + string + (new Array(padding).join(sign ? sign : "0")); -}; - - -/** - * Should be called to get hex representation (prefixed by 0x) of utf8 string - * - * @method utf8ToHex - * @param {String} str - * @returns {String} hex representation of input string - */ -var utf8ToHex = function(str) { - str = utf8.encode(str); - var hex = ""; - - // remove \u0000 padding from either side - str = str.replace(/^(?:\u0000)*/,''); - str = str.split("").reverse().join(""); - str = str.replace(/^(?:\u0000)*/,''); - str = str.split("").reverse().join(""); - - for(var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - // if (code !== 0) { - var n = code.toString(16); - hex += n.length < 2 ? '0' + n : n; - // } - } - - return "0x" + hex; -}; - -/** - * Should be called to get utf8 from it's hex representation - * - * @method hexToUtf8 - * @param {String} hex - * @returns {String} ascii string representation of hex value - */ -var hexToUtf8 = function(hex) { - if (!isHexStrict(hex)) - throw new Error('The parameter "'+ hex +'" must be a valid HEX string.'); - - var str = ""; - var code = 0; - hex = hex.replace(/^0x/i,''); - - // remove 00 padding from either side - hex = hex.replace(/^(?:00)*/,''); - hex = hex.split("").reverse().join(""); - hex = hex.replace(/^(?:00)*/,''); - hex = hex.split("").reverse().join(""); - - var l = hex.length; - - for (var i=0; i < l; i+=2) { - code = parseInt(hex.substr(i, 2), 16); - // if (code !== 0) { - str += String.fromCharCode(code); - // } - } - - return utf8.decode(str); -}; - - -/** - * Converts value to it's number representation - * - * @method hexToNumber - * @param {String|Number|BN} value - * @return {String} - */ -var hexToNumber = function (value) { - if (!value) { - return value; - } - - return toBN(value).toNumber(); -}; - -/** - * Converts value to it's decimal representation in string - * - * @method hexToNumberString - * @param {String|Number|BN} value - * @return {String} - */ -var hexToNumberString = function (value) { - if (!value) return value; - - return toBN(value).toString(10); -}; - - -/** - * Converts value to it's hex representation - * - * @method numberToHex - * @param {String|Number|BN} value - * @return {String} - */ -var numberToHex = function (value) { - if (_.isNull(value) || _.isUndefined(value)) { - return value; - } - - if (!isFinite(value) && !isHexStrict(value)) { - throw new Error('Given input "'+value+'" is not a number.'); - } - - var number = toBN(value); - var result = number.toString(16); - - return number.lt(new BN(0)) ? '-0x' + result.substr(1) : '0x' + result; -}; - - -/** - * Convert a byte array to a hex string - * - * Note: Implementation from crypto-js - * - * @method bytesToHex - * @param {Array} bytes - * @return {String} the hex string - */ -var bytesToHex = function(bytes) { - for (var hex = [], i = 0; i < bytes.length; i++) { - /* jshint ignore:start */ - hex.push((bytes[i] >>> 4).toString(16)); - hex.push((bytes[i] & 0xF).toString(16)); - /* jshint ignore:end */ - } - return '0x'+ hex.join(""); -}; - -/** - * Convert a hex string to a byte array - * - * Note: Implementation from crypto-js - * - * @method hexToBytes - * @param {string} hex - * @return {Array} the byte array - */ -var hexToBytes = function(hex) { - hex = hex.toString(16); - - if (!isHexStrict(hex)) { - throw new Error('Given value "'+ hex +'" is not a valid hex string.'); - } - - hex = hex.replace(/^0x/i,''); - - for (var bytes = [], c = 0; c < hex.length; c += 2) - bytes.push(parseInt(hex.substr(c, 2), 16)); - return bytes; -}; - -/** - * Auto converts any given value into it's hex representation. - * - * And even stringifys objects before. - * - * @method toHex - * @param {String|Number|BN|Object} value - * @param {Boolean} returnType - * @return {String} - */ -var toHex = function (value, returnType) { - /*jshint maxcomplexity: false */ - - if (isAddress(value)) { - return returnType ? 'address' : '0x'+ value.toLowerCase().replace(/^0x/i,''); - } - - if (_.isBoolean(value)) { - return returnType ? 'bool' : value ? '0x01' : '0x00'; - } - - - if (_.isObject(value) && !isBigNumber(value) && !isBN(value)) { - return returnType ? 'string' : utf8ToHex(JSON.stringify(value)); - } - - // if its a negative number, pass it through numberToHex - if (_.isString(value)) { - if (value.indexOf('-0x') === 0 || value.indexOf('-0X') === 0) { - return returnType ? 'int256' : numberToHex(value); - } else if(value.indexOf('0x') === 0 || value.indexOf('0X') === 0) { - return returnType ? 'bytes' : value; - } else if (!isFinite(value)) { - return returnType ? 'string' : utf8ToHex(value); - } - } - - return returnType ? (value < 0 ? 'int256' : 'uint256') : numberToHex(value); -}; - - -/** - * Check if string is HEX, requires a 0x in front - * - * @method isHexStrict - * @param {String} hex to be checked - * @returns {Boolean} - */ -var isHexStrict = function (hex) { - return ((_.isString(hex) || _.isNumber(hex)) && /^(-)?0x[0-9a-f]*$/i.test(hex)); -}; - -/** - * Check if string is HEX - * - * @method isHex - * @param {String} hex to be checked - * @returns {Boolean} - */ -var isHex = function (hex) { - return ((_.isString(hex) || _.isNumber(hex)) && /^(-0x|0x)?[0-9a-f]*$/i.test(hex)); -}; - - -/** - * Returns true if given string is a valid Ethereum block header bloom. - * - * TODO UNDOCUMENTED - * - * @method isBloom - * @param {String} hex encoded bloom filter - * @return {Boolean} - */ -var isBloom = function (bloom) { - if (!/^(0x)?[0-9a-f]{512}$/i.test(bloom)) { - return false; - } else if (/^(0x)?[0-9a-f]{512}$/.test(bloom) || /^(0x)?[0-9A-F]{512}$/.test(bloom)) { - return true; - } - return false; -}; - -/** - * Returns true if given string is a valid log topic. - * - * TODO UNDOCUMENTED - * - * @method isTopic - * @param {String} hex encoded topic - * @return {Boolean} - */ -var isTopic = function (topic) { - if (!/^(0x)?[0-9a-f]{64}$/i.test(topic)) { - return false; - } else if (/^(0x)?[0-9a-f]{64}$/.test(topic) || /^(0x)?[0-9A-F]{64}$/.test(topic)) { - return true; - } - return false; -}; - - -/** - * Hashes values to a sha3 hash using keccak 256 - * - * To hash a HEX string the hex must have 0x in front. - * - * @method sha3 - * @return {String} the sha3 string - */ -var SHA3_NULL_S = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; - -var sha3 = function (value) { - if (isHexStrict(value) && /^0x/i.test((value).toString())) { - value = hexToBytes(value); - } - - var returnValue = Hash.keccak256(value); // jshint ignore:line - - if(returnValue === SHA3_NULL_S) { - return null; - } else { - return returnValue; - } -}; -// expose the under the hood keccak256 -sha3._Hash = Hash; - - -module.exports = { - BN: BN, - isBN: isBN, - isBigNumber: isBigNumber, - toBN: toBN, - isAddress: isAddress, - isBloom: isBloom, // TODO UNDOCUMENTED - isTopic: isTopic, // TODO UNDOCUMENTED - checkAddressChecksum: checkAddressChecksum, - utf8ToHex: utf8ToHex, - hexToUtf8: hexToUtf8, - hexToNumber: hexToNumber, - hexToNumberString: hexToNumberString, - numberToHex: numberToHex, - toHex: toHex, - hexToBytes: hexToBytes, - bytesToHex: bytesToHex, - isHex: isHex, - isHexStrict: isHexStrict, - leftPad: leftPad, - rightPad: rightPad, - toTwosComplement: toTwosComplement, - sha3: sha3 -}; diff --git a/truebit-implementation/node_modules/web3/README.md b/truebit-implementation/node_modules/web3/README.md deleted file mode 100644 index 885d2679..00000000 --- a/truebit-implementation/node_modules/web3/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# web3 - -This is a main package of [web3.js](https://github.com/ethereum/web3.js) - -Please read the main [readme](https://github.com/ethereum/web3.js/blob/1.0/README.md) and [documentation](https://web3js.readthedocs.io/en/1.0/) for more. - -## Installation - -### Node.js - -```bash -npm install web3 -``` diff --git a/truebit-implementation/node_modules/web3/package.json b/truebit-implementation/node_modules/web3/package.json deleted file mode 100644 index 7d221d17..00000000 --- a/truebit-implementation/node_modules/web3/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "_from": "web3", - "_id": "web3@1.0.0-beta.36", - "_inBundle": false, - "_integrity": "sha512-fZDunw1V0AQS27r5pUN3eOVP7u8YAvyo6vOapdgVRolAu5LgaweP7jncYyLINqIX9ZgWdS5A090bt+ymgaYHsw==", - "_location": "/web3", - "_phantomChildren": {}, - "_requested": { - "type": "tag", - "registry": true, - "raw": "web3", - "name": "web3", - "escapedName": "web3", - "rawSpec": "", - "saveSpec": null, - "fetchSpec": "latest" - }, - "_requiredBy": [ - "#USER", - "/" - ], - "_resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.36.tgz", - "_shasum": "2954da9e431124c88396025510d840ba731c8373", - "_spec": "web3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation", - "author": { - "name": "ethereum.org" - }, - "authors": [ - { - "name": "Fabian Vogelsteller", - "email": "fabian@ethereum.org", - "homepage": "http://frozeman.de" - }, - { - "name": "Marek Kotewicz", - "email": "marek@parity.io", - "url": "https://github.com/debris" - }, - { - "name": "Marian Oancea", - "url": "https://github.com/cubedro" - }, - { - "name": "Gav Wood", - "email": "g@parity.io", - "homepage": "http://gavwood.com" - }, - { - "name": "Jeffery Wilcke", - "email": "jeffrey.wilcke@ethereum.org", - "url": "https://github.com/obscuren" - } - ], - "bugs": { - "url": "https://github.com/ethereum/web3.js/issues" - }, - "bundleDependencies": false, - "dependencies": { - "web3-bzz": "1.0.0-beta.36", - "web3-core": "1.0.0-beta.36", - "web3-eth": "1.0.0-beta.36", - "web3-eth-personal": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-shh": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "deprecated": false, - "description": "Ethereum JavaScript API", - "keywords": [ - "Ethereum", - "JavaScript", - "API" - ], - "license": "LGPL-3.0", - "main": "src/index.js", - "name": "web3", - "namespace": "ethereum", - "repository": { - "type": "git", - "url": "https://github.com/ethereum/web3.js/tree/master/packages/web3" - }, - "version": "1.0.0-beta.36" -} diff --git a/truebit-implementation/node_modules/web3/src/index.js b/truebit-implementation/node_modules/web3/src/index.js deleted file mode 100644 index 789c1785..00000000 --- a/truebit-implementation/node_modules/web3/src/index.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - This file is part of web3.js. - - web3.js is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - web3.js is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with web3.js. If not, see . -*/ -/** - * @file index.js - * @authors: - * Fabian Vogelsteller - * Gav Wood - * Jeffrey Wilcke - * Marek Kotewicz - * Marian Oancea - * @date 2017 - */ - -"use strict"; - - -var version = require('../package.json').version; -var core = require('web3-core'); -var Eth = require('web3-eth'); -var Net = require('web3-net'); -var Personal = require('web3-eth-personal'); -var Shh = require('web3-shh'); -var Bzz = require('web3-bzz'); -var utils = require('web3-utils'); - -var Web3 = function Web3() { - var _this = this; - - // sets _requestmanager etc - core.packageInit(this, arguments); - - this.version = version; - this.utils = utils; - - this.eth = new Eth(this); - this.shh = new Shh(this); - this.bzz = new Bzz(this); - - // overwrite package setProvider - var setProvider = this.setProvider; - this.setProvider = function (provider, net) { - setProvider.apply(_this, arguments); - - this.eth.setProvider(provider, net); - this.shh.setProvider(provider, net); - this.bzz.setProvider(provider); - - return true; - }; -}; - -Web3.version = version; -Web3.utils = utils; -Web3.modules = { - Eth: Eth, - Net: Net, - Personal: Personal, - Shh: Shh, - Bzz: Bzz -}; - -core.addProviders(Web3); - -module.exports = Web3; - diff --git a/truebit-implementation/node_modules/websocket/.jshintrc b/truebit-implementation/node_modules/websocket/.jshintrc deleted file mode 100644 index 98d8766c..00000000 --- a/truebit-implementation/node_modules/websocket/.jshintrc +++ /dev/null @@ -1,88 +0,0 @@ -{ - // JSHint Default Configuration File (as on JSHint website) - // See http://jshint.com/docs/ for more details - - "maxerr" : 50, // {int} Maximum error before stopping - - // Enforcing - "bitwise" : false, // true: Prohibit bitwise operators (&, |, ^, etc.) - "camelcase" : false, // true: Identifiers must be in camelCase - "curly" : true, // true: Require {} for every new block or scope - "eqeqeq" : true, // true: Require triple equals (===) for comparison - "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc. - "forin" : false, // true: Require filtering for..in loops with obj.hasOwnProperty() - "immed" : true, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` - "latedef" : "nofunc", // true: Require variables/functions to be defined before being used - "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()` - "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` - "noempty" : true, // true: Prohibit use of empty blocks - "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters. - "nonew" : true, // true: Prohibit use of constructors for side-effects (without assignment) - "plusplus" : false, // true: Prohibit use of `++` & `--` - "quotmark" : "single", // Quotation mark consistency: - // false : do nothing (default) - // true : ensure whatever is used is consistent - // "single" : require single quotes - // "double" : require double quotes - "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) - "unused" : "vars", // vars: Require all defined variables be used, ignore function params - "strict" : false, // true: Requires all functions run in ES5 Strict Mode - "maxparams" : false, // {int} Max number of formal params allowed per function - "maxdepth" : false, // {int} Max depth of nested blocks (within functions) - "maxstatements" : false, // {int} Max number statements per function - "maxcomplexity" : false, // {int} Max cyclomatic complexity per function - "maxlen" : false, // {int} Max number of characters per line - - // Relaxing - "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons) - "boss" : false, // true: Tolerate assignments where comparisons would be expected - "debug" : false, // true: Allow debugger statements e.g. browser breakpoints. - "eqnull" : false, // true: Tolerate use of `== null` - "es5" : false, // true: Allow ES5 syntax (ex: getters and setters) - "esnext" : true, // true: Allow ES.next (ES6) syntax (ex: `const`) - "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) - // (ex: `for each`, multiple try/catch, function expression…) - "evil" : false, // true: Tolerate use of `eval` and `new Function()` - "expr" : false, // true: Tolerate `ExpressionStatement` as Programs - "funcscope" : false, // true: Tolerate defining variables inside control statements - "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') - "iterator" : false, // true: Tolerate using the `__iterator__` property - "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block - "laxbreak" : false, // true: Tolerate possibly unsafe line breakings - "laxcomma" : false, // true: Tolerate comma-first style coding - "loopfunc" : false, // true: Tolerate functions being defined in loops - "multistr" : false, // true: Tolerate multi-line strings - "noyield" : false, // true: Tolerate generator functions with no yield statement in them. - "notypeof" : false, // true: Tolerate invalid typeof operator values - "proto" : false, // true: Tolerate using the `__proto__` property - "scripturl" : false, // true: Tolerate script-targeted URLs - "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` - "sub" : true, // true: Tolerate using `[]` notation when it can still be expressed in dot notation - "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` - "validthis" : false, // true: Tolerate using this in a non-constructor function - - // Environments - "browser" : true, // Web Browser (window, document, etc) - "browserify" : true, // Browserify (node.js code in the browser) - "couch" : false, // CouchDB - "devel" : true, // Development/debugging (alert, confirm, etc) - "dojo" : false, // Dojo Toolkit - "jasmine" : false, // Jasmine - "jquery" : false, // jQuery - "mocha" : false, // Mocha - "mootools" : false, // MooTools - "node" : true, // Node.js - "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) - "prototypejs" : false, // Prototype and Scriptaculous - "qunit" : false, // QUnit - "rhino" : false, // Rhino - "shelljs" : false, // ShellJS - "worker" : false, // Web Workers - "wsh" : false, // Windows Scripting Host - "yui" : false, // Yahoo User Interface - - // Custom Globals - "globals" : { // additional predefined global variables - "WebSocket": true - } -} diff --git a/truebit-implementation/node_modules/websocket/CHANGELOG.md b/truebit-implementation/node_modules/websocket/CHANGELOG.md deleted file mode 100644 index 66a40198..00000000 --- a/truebit-implementation/node_modules/websocket/CHANGELOG.md +++ /dev/null @@ -1,231 +0,0 @@ -Changelog -========= - -Version 1.0.26 --------------- -*Released 2018-04-27* - -* No longer using the deprecated `noAssert` parameter for functions reading and writing binary numeric data. (Thanks, [@BridgeAR](https://github.com/BridgeAR)) - -Version 1.0.25 --------------- -*Released 2017-10-18* - -* Bumping minimum supported node version specified in package.json to v0.10.x because some upstream libraries no longer install on v0.8.x -* [Allowing use of close codes 1012, 1013, 1014](https://www.iana.org/assignments/websocket/websocket.xml) -* [Allowing the `Host` header to be overridden.](https://github.com/theturtle32/WebSocket-Node/pull/291) (Thanks, [@Juneil](https://github.com/Juneil)) -* [Mitigating infinite loop for broken connections](https://github.com/theturtle32/WebSocket-Node/pull/289) (Thanks, [@tvkit](https://github.com/tvkit)) -* [Fixed Markdown Typos](https://github.com/theturtle32/WebSocket-Node/pull/281) (Thanks, [@teramotodaiki](https://github.com/teramotodaiki)) -* [Adding old readyState constants for W3CWebSocket interface](https://github.com/theturtle32/WebSocket-Node/pull/282) (Thanks, [@thechriswalker](https://github.com/thechriswalker)) - - -Version 1.0.24 --------------- -*Released 2016-12-28* - -* Fixed a bug when using native keepalive on Node >= 6.0. (Thanks, [@prossin](https://github.com/prossin)) -* Upgrading outdated dependencies - -Version 1.0.23 --------------- -*Released 2016-05-18* - -* Official support for Node 6.x -* Updating dependencies. Specifically, updating nan to ^2.3.3 - -Version 1.0.22 --------------- -*Released 2015-09-28* - -* Updating to work with nan 2.x - -Version 1.0.21 --------------- -*Released 2015-07-22* - -* Incremented and re-published to work around an aborted npm publish of v1.0.20. - -Version 1.0.20 --------------- -*Released 2015-07-22* - -* Added EventTarget to the W3CWebSocket interface (Thanks, [@ibc](https://github.com/ibc)!) -* Corrected an inaccurate error message. (Thanks, [@lekoaf](https://github.com/lekoaf)!) - -Version 1.0.19 --------------- -*Released 2015-05-28* - -* Updated to nan v1.8.x (tested with v1.8.4) -* Added `"license": "Apache-2.0"` to package.json via [pull request #199](https://github.com/theturtle32/WebSocket-Node/pull/199) by [@pgilad](https://github.com/pgilad). See [npm1k.org](http://npm1k.org/). - - -Version 1.0.18 --------------- -*Released 2015-03-19* - -* Resolves [issue #195](https://github.com/theturtle32/WebSocket-Node/pull/179) - passing number to connection.send() causes crash -* [Added close code/reason arguments to W3CWebSocket#close()](https://github.com/theturtle32/WebSocket-Node/issues/184) - - -Version 1.0.17 --------------- -*Released 2015-01-17* - -* Resolves [issue #179](https://github.com/theturtle32/WebSocket-Node/pull/179) - Allow toBuffer to work with empty data - - -Version 1.0.16 --------------- -*Released 2015-01-16* - -* Resolves [issue #178](https://github.com/theturtle32/WebSocket-Node/issues/178) - Ping Frames with no data - - -Version 1.0.15 --------------- -*Released 2015-01-13* - -* Resolves [issue #177](https://github.com/theturtle32/WebSocket-Node/issues/177) - WebSocketClient ignores options unless it has a tlsOptions property - - -Version 1.0.14 --------------- -*Released 2014-12-03* - -* Resolves [issue #173](https://github.com/theturtle32/WebSocket-Node/issues/173) - To allow the W3CWebSocket interface to accept an optional non-standard configuration object as its third parameter, which will be ignored when running in a browser context. - - -Version 1.0.13 --------------- -*Released 2014-11-29* - -* Fixes [issue #171](https://github.com/theturtle32/WebSocket-Node/issues/171) - Code to prevent calling req.accept/req.reject multiple times breaks sanity checks in req.accept - - -Version 1.0.12 --------------- -*Released 2014-11-28* - -* Fixes [issue #170](https://github.com/theturtle32/WebSocket-Node/issues/170) - Non-native XOR implementation broken after making JSHint happy - - -Version 1.0.11 --------------- -*Released 2014-11-25* - -* Fixes some undefined behavior surrounding closing WebSocket connections and more reliably handles edge cases. -* Adds an implementation of the W3C WebSocket API for browsers to facilitate sharing code between client and server via browserify. (Thanks, [@ibc](https://github.com/ibc)!) -* `WebSocketConnection.prototype.close` now accepts optional `reasonCode` and `description` parameters. -* Calling `accept` or `reject` more than once on a `WebSocketRequest` will now throw an error. [Issue #149](https://github.com/theturtle32/WebSocket-Node/issues/149) -* Handling connections dropped by client before accepted by server [Issue #167](https://github.com/theturtle32/WebSocket-Node/issues/167) -* Integrating Gulp and JSHint (Thanks, [@ibc](https://github.com/ibc)!) -* Starting to add individual unit tests (using substack's [tape](github.com/substack/tape) and [faucet](github.com/substack/faucet)) - - -Version 1.0.10 --------------- -*Released 2014-10-22* - -* Fixed Issue [#146](https://github.com/theturtle32/WebSocket-Node/issues/146) that was causing WebSocketClient to throw errors when instantiated if passed `tlsOptions`. - -Version 1.0.9 -------------- -*Released 2014-10-20* - -* Fixing an insidious corner-case bug that prevented `WebSocketConnection` from firing the `close` event in certain cases when there was an error on the underlying `Socket`, leading to connections sticking around forever, stuck erroneously in the `connected` state. These "ghost" connections would cause an error event when trying to write to them. -* Removed deprecated `websocketVersion` property. Use `webSocketVersion` instead (case difference). -* Allowing user to specify all properties for `tlsOptions` in WebSocketClient, not just a few whitelisted properties. This keeps us from having to constantly add new config properties for new versions of Node. (Thanks, [jesusprubio](https://github.com/jesusprubio)) -* Removing support for Node 0.4.x and 0.6.x. -* Adding `fuzzingclient.json` spec file for the Autobahn Test Suite. -* Now more fairly emitting `message` events from the `WebSocketConnection`. Previously, all buffered frames for a connection would be processed and all `message` events emitted before moving on to processing the next connection with available data. Now We process one frame per connection (most of the time) in a more fair round-robin fashion. -* Now correctly calling the `EventEmitter` superclass constructor during class instance initialization. -* `WebSocketClient.prototype.connect` now accepts the empty string (`''`) to mean "no subprotocol requested." Previously either `null` or an empty array (`[]`) was required. -* Fixing a `TypeError` bug in `WebSocketRouter` (Thanks, [a0000778](https://github.com/a0000778)) -* Fixing a potential race condition when attaching event listeners to the underlying `Socket`. (Thanks [RichardBsolut](https://github.com/RichardBsolut)) -* `WebSocketClient` now accepts an optional options hash to be passed to `(http|https).request`. (Thanks [mildred](https://github.com/mildred) and [aus](https://github.com/aus)) This enables the following new abilities, amongst others: - * Use WebSocket-Node from behind HTTP/HTTPS proxy servers using [koichik/node-tunnel](https://github.com/koichik/node-tunnel) or similar. - * Specify the local port and local address to bind the outgoing request socket to. -* Adding option to ignore `X-Forwarded-For` headers when accepting connections from untrusted clients. -* Adding ability to mount a `WebSocketServer` instance to an arbitrary number of Node http/https servers. -* Adding browser shim so Browserify won't blow up when trying to package up code that uses WebSocket-Node. The shim is a no-op, it ***does not implement a wrapper*** providing the WebSocket-Node API in the browser. -* Incorporating upstream enhancements for the native C++ UTF-8 validation and xor masking functions. (Thanks [einaros](https://github.com/einaros) and [kkoopa](https://github.com/kkoopa)) - - -Version 1.0.8 -------------- -*Released 2012-12-26* - -* Fixed remaining naming inconsistency of "websocketVersion" as opposed to "webSocketVersion" throughout the code, and added deprecation warnings for use of the old casing throughout. -* Fixed an issue with our case-insensitive handling of WebSocket subprotocols. Clients that requested a mixed-case subprotocol would end up failing the connection when the server accepted the connection, returning a lower-case version of the subprotocol name. Now we return the subprotocol name in the exact casing that was requested by the client, while still maintaining the case-insensitive verification logic for convenience and practicality. -* Making sure that any socket-level activity timeout that may have been set on a TCP socket is removed when initializing a connection. -* Added support for native TCP Keep-Alive instead of using the WebSocket ping/pong packets to serve that function. -* Fixed cookie parsing to be compliant with RFC 2109 - -Version 1.0.7 -------------- -*Released 2012-08-12* - -* ***Native modules are now optional!*** If they fail to compile, WebSocket-Node will still work but will not verify that received UTF-8 data is valid, and xor masking/unmasking of payload data for security purposes will not be as efficient as it is performed in JavaScript instead of native code. -* Reduced Node.JS version requirement back to v0.6.10 - -Version 1.0.6 -------------- -*Released 2012-05-22* - -* Now requires Node v0.6.13 since that's the first version that I can manage to successfully build the native UTF-8 validator with node-gyp through npm. - -Version 1.0.5 -------------- -*Released 2012-05-21* - -* Fixes the issues that users were having building the native UTF-8 validator on Windows platforms. Special Thanks to: - * [zerodivisi0n](https://github.com/zerodivisi0n) - * [andreasbotsikas](https://github.com/andreasbotsikas) -* Fixed accidental global variable usage (Thanks, [hakobera](https://github.com/hakobera)!) -* Added callbacks to the send* methods that provide notification of messages being sent on the wire and any socket errors that may occur when sending a message. (Thanks, [zerodivisi0n](https://github.com/zerodivisi0n)!) -* Added option to disable logging in the echo-server in the test folder (Thanks, [oberstet](https://github.com/oberstet)!) - - -Version 1.0.4 -------------- -*Released 2011-12-18* - -* Now validates that incoming UTF-8 messages do, in fact, contain valid UTF-8 data. The connection is dropped with prejudice if invalid data is received. This strict behavior conforms to the WebSocket RFC and is verified by the Autobahn Test Suite. This is accomplished in a performant way by using a native C++ Node module created by [einaros](https://github.com/einaros). -* Updated handling of connection closure to pass more of the Autobahn Test Suite. - -Version 1.0.3 -------------- -*Released 2011-12-18* - -* Substantial speed increase (~150% on my machine, depending on the circumstances) due to an optimization in FastBufferList.js that drastically reduces the number of memory alloctions and buffer copying. ([kazuyukitanimura](https://github.com/kazuyukitanimura)) - - -Version 1.0.2 -------------- -*Released 2011-11-28* - -* Fixing whiteboard example to work under Node 0.6.x ([theturtle32](https://github.com/theturtle32)) -* Now correctly emitting a `close` event with a 1006 error code if there is a TCP error while writing to the socket during the handshake. ([theturtle32](https://github.com/theturtle32)) -* Catching errors when writing to the TCP socket during the handshake. ([justoneplanet](https://github.com/justoneplanet)) -* No longer outputting console.warn messages when there is an error writing to the TCP socket ([justoneplanet](https://github.com/justoneplanet)) -* Fixing some formatting errors, commas, semicolons, etc. ([kaisellgren](https://github.com/kaisellgren)) - - -Version 1.0.1 -------------- -*Released 2011-11-21* - -* Now works with Node 0.6.2 as well as 0.4.12 -* Support TLS in WebSocketClient -* Added support for setting and reading cookies -* Added WebSocketServer.prototype.broadcast(data) convenience method -* Added `resourceURL` property to WebSocketRequest objects. It is a Node URL object with the `resource` and any query string params already parsed. -* The WebSocket request router no longer includes the entire query string when trying to match the path name of the request. -* WebSocketRouterRequest objects now include all the properties and events of WebSocketRequest objects. -* Removed more console.log statements. Please rely on the various events emitted to be notified of error conditions. I decided that it is not a library's place to spew information to the console. -* Renamed the `websocketVersion` property to `webSocketVersion` throughout the code to fix inconsistent capitalization. `websocketVersion` has been kept for compatibility but is deprecated and may be removed in the future. -* Now outputting the sanitized version of custom header names rather than the raw value. This prevents invalid HTTP from being put onto the wire if given an illegal header name. - - -I decided it's time to start maintaining a changelog now, starting with version 1.0.1. diff --git a/truebit-implementation/node_modules/websocket/LICENSE b/truebit-implementation/node_modules/websocket/LICENSE deleted file mode 100644 index 430d42bb..00000000 --- a/truebit-implementation/node_modules/websocket/LICENSE +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS diff --git a/truebit-implementation/node_modules/websocket/Makefile b/truebit-implementation/node_modules/websocket/Makefile deleted file mode 100644 index 39ff6455..00000000 --- a/truebit-implementation/node_modules/websocket/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -all: - node-gyp configure build - -clean: - node-gyp clean - -autobahn: - @NODE_PATH=lib node test/autobahn-test-client.js --host=127.0.0.1 --port=9000 - -autobahn-server: - @NODE_PATH=lib node test/echo-server.js diff --git a/truebit-implementation/node_modules/websocket/README.md b/truebit-implementation/node_modules/websocket/README.md deleted file mode 100644 index a7996f91..00000000 --- a/truebit-implementation/node_modules/websocket/README.md +++ /dev/null @@ -1,273 +0,0 @@ -WebSocket Client & Server Implementation for Node -================================================= - -[![npm version](https://badge.fury.io/js/websocket.svg)](http://badge.fury.io/js/websocket) - -[![NPM Downloads](https://img.shields.io/npm/dm/websocket.svg)](https://www.npmjs.com/package/websocket) - -[![NPM](https://nodei.co/npm/websocket.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/websocket/) - -[![NPM](https://nodei.co/npm-dl/websocket.png?height=3)](https://nodei.co/npm/websocket/) - -[ ![Codeship Status for theturtle32/WebSocket-Node](https://codeship.com/projects/70458270-8ee7-0132-7756-0a0cf4fe8e66/status?branch=master)](https://codeship.com/projects/61106) - -Overview --------- -This is a (mostly) pure JavaScript implementation of the WebSocket protocol versions 8 and 13 for Node. There are some example client and server applications that implement various interoperability testing protocols in the "test/scripts" folder. - -For a WebSocket client written in ActionScript 3, see my [AS3WebScocket](https://github.com/theturtle32/AS3WebSocket) project. - - -Documentation -============= - -[You can read the full API documentation in the docs folder.](docs/index.md) - - -Changelog ---------- - -***Current Version: 1.0.26*** — Released 2018-04-27 - -* No longer using the deprecated `noAssert` parameter for functions reading and writing binary numeric data. (Thanks, [@BridgeAR](https://github.com/BridgeAR)) - -[View the full changelog](CHANGELOG.md) - -Browser Support ---------------- - -All current browsers are fully supported. - -* Firefox 7-9 (Old) (Protocol Version 8) -* Firefox 10+ (Protocol Version 13) -* Chrome 14,15 (Old) (Protocol Version 8) -* Chrome 16+ (Protocol Version 13) -* Internet Explorer 10+ (Protocol Version 13) -* Safari 6+ (Protocol Version 13) - -***Safari older than 6.0 is not supported since it uses a very old draft of WebSockets*** - -***If you need to simultaneously support legacy browser versions that had implemented draft-75/draft-76/draft-00, take a look here: https://gist.github.com/1428579*** - -Benchmarks ----------- -There are some basic benchmarking sections in the Autobahn test suite. I've put up a [benchmark page](http://theturtle32.github.com/WebSocket-Node/benchmarks/) that shows the results from the Autobahn tests run against AutobahnServer 0.4.10, WebSocket-Node 1.0.2, WebSocket-Node 1.0.4, and ws 0.3.4. - -Autobahn Tests --------------- -The very complete [Autobahn Test Suite](http://autobahn.ws/testsuite/) is used by most WebSocket implementations to test spec compliance and interoperability. - -- [View Server Test Results](http://theturtle32.github.com/WebSocket-Node/test-report/servers/) - -Installation ------------- - -A few users have reported difficulties building the native extensions without first manually installing node-gyp. If you have trouble building the native extensions, make sure you've got a C++ compiler, and have done `npm install -g node-gyp` first. - -Native extensions are optional, however, and WebSocket-Node will work even if the extensions cannot be compiled. - -In your project root: - - $ npm install websocket - -Then in your code: - -```javascript -var WebSocketServer = require('websocket').server; -var WebSocketClient = require('websocket').client; -var WebSocketFrame = require('websocket').frame; -var WebSocketRouter = require('websocket').router; -var W3CWebSocket = require('websocket').w3cwebsocket; -``` - -Note for Windows Users ----------------------- -Because there is a small C++ component used for validating UTF-8 data, you will need to install a few other software packages in addition to Node to be able to build this module: - -- [Microsoft Visual C++](http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express) -- [Python 2.7](http://www.python.org/download/) (NOT Python 3.x) - - -Current Features: ------------------ -- Licensed under the Apache License, Version 2.0 -- Protocol version "8" and "13" (Draft-08 through the final RFC) framing and handshake -- Can handle/aggregate received fragmented messages -- Can fragment outgoing messages -- Router to mount multiple applications to various path and protocol combinations -- TLS supported for outbound connections via WebSocketClient -- TLS supported for server connections (use https.createServer instead of http.createServer) - - Thanks to [pors](https://github.com/pors) for confirming this! -- Cookie setting and parsing -- Tunable settings - - Max Receivable Frame Size - - Max Aggregate ReceivedMessage Size - - Whether to fragment outgoing messages - - Fragmentation chunk size for outgoing messages - - Whether to automatically send ping frames for the purposes of keepalive - - Keep-alive ping interval - - Whether or not to automatically assemble received fragments (allows application to handle individual fragments directly) - - How long to wait after sending a close frame for acknowledgment before closing the socket. -- [W3C WebSocket API](http://www.w3.org/TR/websockets/) for applications running on both Node and browsers (via the `W3CWebSocket` class). - - -Known Issues/Missing Features: ------------------------------- -- No API for user-provided protocol extensions. - - -Usage Examples -============== - -Server Example --------------- - -Here's a short example showing a server that echos back anything sent to it, whether utf-8 or binary. - -```javascript -#!/usr/bin/env node -var WebSocketServer = require('websocket').server; -var http = require('http'); - -var server = http.createServer(function(request, response) { - console.log((new Date()) + ' Received request for ' + request.url); - response.writeHead(404); - response.end(); -}); -server.listen(8080, function() { - console.log((new Date()) + ' Server is listening on port 8080'); -}); - -wsServer = new WebSocketServer({ - httpServer: server, - // You should not use autoAcceptConnections for production - // applications, as it defeats all standard cross-origin protection - // facilities built into the protocol and the browser. You should - // *always* verify the connection's origin and decide whether or not - // to accept it. - autoAcceptConnections: false -}); - -function originIsAllowed(origin) { - // put logic here to detect whether the specified origin is allowed. - return true; -} - -wsServer.on('request', function(request) { - if (!originIsAllowed(request.origin)) { - // Make sure we only accept requests from an allowed origin - request.reject(); - console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.'); - return; - } - - var connection = request.accept('echo-protocol', request.origin); - console.log((new Date()) + ' Connection accepted.'); - connection.on('message', function(message) { - if (message.type === 'utf8') { - console.log('Received Message: ' + message.utf8Data); - connection.sendUTF(message.utf8Data); - } - else if (message.type === 'binary') { - console.log('Received Binary Message of ' + message.binaryData.length + ' bytes'); - connection.sendBytes(message.binaryData); - } - }); - connection.on('close', function(reasonCode, description) { - console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); - }); -}); -``` - -Client Example --------------- - -This is a simple example client that will print out any utf-8 messages it receives on the console, and periodically sends a random number. - -*This code demonstrates a client in Node.js, not in the browser* - -```javascript -#!/usr/bin/env node -var WebSocketClient = require('websocket').client; - -var client = new WebSocketClient(); - -client.on('connectFailed', function(error) { - console.log('Connect Error: ' + error.toString()); -}); - -client.on('connect', function(connection) { - console.log('WebSocket Client Connected'); - connection.on('error', function(error) { - console.log("Connection Error: " + error.toString()); - }); - connection.on('close', function() { - console.log('echo-protocol Connection Closed'); - }); - connection.on('message', function(message) { - if (message.type === 'utf8') { - console.log("Received: '" + message.utf8Data + "'"); - } - }); - - function sendNumber() { - if (connection.connected) { - var number = Math.round(Math.random() * 0xFFFFFF); - connection.sendUTF(number.toString()); - setTimeout(sendNumber, 1000); - } - } - sendNumber(); -}); - -client.connect('ws://localhost:8080/', 'echo-protocol'); -``` - -Client Example using the *W3C WebSocket API* --------------------------------------------- - -Same example as above but using the [W3C WebSocket API](http://www.w3.org/TR/websockets/). - -```javascript -var W3CWebSocket = require('websocket').w3cwebsocket; - -var client = new W3CWebSocket('ws://localhost:8080/', 'echo-protocol'); - -client.onerror = function() { - console.log('Connection Error'); -}; - -client.onopen = function() { - console.log('WebSocket Client Connected'); - - function sendNumber() { - if (client.readyState === client.OPEN) { - var number = Math.round(Math.random() * 0xFFFFFF); - client.send(number.toString()); - setTimeout(sendNumber, 1000); - } - } - sendNumber(); -}; - -client.onclose = function() { - console.log('echo-protocol Client Closed'); -}; - -client.onmessage = function(e) { - if (typeof e.data === 'string') { - console.log("Received: '" + e.data + "'"); - } -}; -``` - -Request Router Example ----------------------- - -For an example of using the request router, see `libwebsockets-test-server.js` in the `test` folder. - - -Resources ---------- - -A presentation on the state of the WebSockets protocol that I gave on July 23, 2011 at the LA Hacker News meetup. [WebSockets: The Real-Time Web, Delivered](http://www.scribd.com/doc/60898569/WebSockets-The-Real-Time-Web-Delivered) diff --git a/truebit-implementation/node_modules/websocket/binding.gyp b/truebit-implementation/node_modules/websocket/binding.gyp deleted file mode 100644 index 77b2ed52..00000000 --- a/truebit-implementation/node_modules/websocket/binding.gyp +++ /dev/null @@ -1,18 +0,0 @@ -{ - 'targets': [ - { - 'target_name': 'validation', - 'include_dirs': ["> $(depfile) -# Add extra rules as in (2). -# We remove slashes and replace spaces with new lines; -# remove blank lines; -# delete the first line and append a colon to the remaining lines. -sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ - grep -v '^$$' |\ - sed -e 1d -e 's|$$|:|' \ - >> $(depfile) -rm $(depfile).raw -endef - -# Command definitions: -# - cmd_foo is the actual command to run; -# - quiet_cmd_foo is the brief-output summary of the command. - -quiet_cmd_cc = CC($(TOOLSET)) $@ -cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_cxx = CXX($(TOOLSET)) $@ -cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< - -quiet_cmd_touch = TOUCH $@ -cmd_touch = touch $@ - -quiet_cmd_copy = COPY $@ -# send stderr to /dev/null to ignore messages when linking directories. -cmd_copy = rm -rf "$@" && cp -af "$<" "$@" - -quiet_cmd_alink = AR($(TOOLSET)) $@ -cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) - -quiet_cmd_alink_thin = AR($(TOOLSET)) $@ -cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) - -# Due to circular dependencies between libraries :(, we wrap the -# special "figure out circular dependencies" flags around the entire -# input list during linking. -quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group - -# We support two kinds of shared objects (.so): -# 1) shared_library, which is just bundling together many dependent libraries -# into a link line. -# 2) loadable_module, which is generating a module intended for dlopen(). -# -# They differ only slightly: -# In the former case, we want to package all dependent code into the .so. -# In the latter case, we want to package just the API exposed by the -# outermost module. -# This means shared_library uses --whole-archive, while loadable_module doesn't. -# (Note that --whole-archive is incompatible with the --start-group used in -# normal linking.) - -# Other shared-object link notes: -# - Set SONAME to the library filename so our binaries don't reference -# the local, absolute paths used on the link command-line. -quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) - -quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS) - - -# Define an escape_quotes function to escape single quotes. -# This allows us to handle quotes properly as long as we always use -# use single quotes and escape_quotes. -escape_quotes = $(subst ','\'',$(1)) -# This comment is here just to include a ' to unconfuse syntax highlighting. -# Define an escape_vars function to escape '$' variable syntax. -# This allows us to read/write command lines with shell variables (e.g. -# $LD_LIBRARY_PATH), without triggering make substitution. -escape_vars = $(subst $$,$$$$,$(1)) -# Helper that expands to a shell command to echo a string exactly as it is in -# make. This uses printf instead of echo because printf's behaviour with respect -# to escape sequences is more portable than echo's across different shells -# (e.g., dash, bash). -exact_echo = printf '%s\n' '$(call escape_quotes,$(1))' - -# Helper to compare the command we're about to run against the command -# we logged the last time we ran the command. Produces an empty -# string (false) when the commands match. -# Tricky point: Make has no string-equality test function. -# The kernel uses the following, but it seems like it would have false -# positives, where one string reordered its arguments. -# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ -# $(filter-out $(cmd_$@), $(cmd_$(1)))) -# We instead substitute each for the empty string into the other, and -# say they're equal if both substitutions produce the empty string. -# .d files contain ? instead of spaces, take that into account. -command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ - $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) - -# Helper that is non-empty when a prerequisite changes. -# Normally make does this implicitly, but we force rules to always run -# so we can check their command lines. -# $? -- new prerequisites -# $| -- order-only dependencies -prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) - -# Helper that executes all postbuilds until one fails. -define do_postbuilds - @E=0;\ - for p in $(POSTBUILDS); do\ - eval $$p;\ - E=$$?;\ - if [ $$E -ne 0 ]; then\ - break;\ - fi;\ - done;\ - if [ $$E -ne 0 ]; then\ - rm -rf "$@";\ - exit $$E;\ - fi -endef - -# do_cmd: run a command via the above cmd_foo names, if necessary. -# Should always run for a given target to handle command-line changes. -# Second argument, if non-zero, makes it do asm/C/C++ dependency munging. -# Third argument, if non-zero, makes it do POSTBUILDS processing. -# Note: We intentionally do NOT call dirx for depfile, since it contains ? for -# spaces already and dirx strips the ? characters. -define do_cmd -$(if $(or $(command_changed),$(prereq_changed)), - @$(call exact_echo, $($(quiet)cmd_$(1))) - @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 1,$(cmd_$1))), - @$(cmd_$(1)) - @echo " $(quiet_cmd_$(1)): Finished", - @$(cmd_$(1)) - ) - @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) - @$(if $(2),$(fixup_dep)) - $(if $(and $(3), $(POSTBUILDS)), - $(call do_postbuilds) - ) -) -endef - -# Declare the "all" target first so it is the default, -# even though we don't have the deps yet. -.PHONY: all -all: - -# make looks for ways to re-generate included makefiles, but in our case, we -# don't have a direct way. Explicitly telling make that it has nothing to do -# for them makes it go faster. -%.d: ; - -# Use FORCE_DO_CMD to force a target to run. Should be coupled with -# do_cmd. -.PHONY: FORCE_DO_CMD -FORCE_DO_CMD: - -TOOLSET := target -# Suffix rules, putting all outputs into $(obj). -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD - @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD - @$(call do_cmd,cc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD - @$(call do_cmd,cc,1) - - -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,bufferutil.target.mk)))),) - include bufferutil.target.mk -endif -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,validation.target.mk)))),) - include validation.target.mk -endif - -quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = cd $(srcdir); /usr/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "--toplevel-dir=." -I/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/websocket/build/config.gypi -I/usr/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/home/surya/.node-gyp/11.1.0/include/node/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/home/surya/.node-gyp/11.1.0" "-Dnode_gyp_dir=/usr/lib/node_modules/npm/node_modules/node-gyp" "-Dnode_lib_file=/home/surya/.node-gyp/11.1.0/<(target_arch)/node.lib" "-Dmodule_root_dir=/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/websocket" "-Dnode_engine=v8" binding.gyp -Makefile: $(srcdir)/../../../../../../.node-gyp/11.1.0/include/node/common.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../../../../usr/lib/node_modules/npm/node_modules/node-gyp/addon.gypi - $(call do_cmd,regen_makefile) - -# "all" is a concatenation of the "all" targets from all the included -# sub-makefiles. This is just here to clarify. -all: - -# Add in dependency-tracking rules. $(all_deps) is the list of every single -# target in our tree. Only consider the ones with .d (dependency) info: -d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) -ifneq ($(d_files),) - include $(d_files) -endif diff --git a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/bufferutil.node.d b/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/bufferutil.node.d deleted file mode 100644 index 03982bed..00000000 --- a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/bufferutil.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/bufferutil.node := rm -rf "Release/bufferutil.node" && cp -af "Release/obj.target/bufferutil.node" "Release/bufferutil.node" diff --git a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/bufferutil.node.d b/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/bufferutil.node.d deleted file mode 100644 index ecf52e3f..00000000 --- a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/bufferutil.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/obj.target/bufferutil.node := g++ -shared -pthread -rdynamic -m64 -Wl,-soname=bufferutil.node -o Release/obj.target/bufferutil.node -Wl,--start-group Release/obj.target/bufferutil/src/bufferutil.o -Wl,--end-group diff --git a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d b/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d deleted file mode 100644 index 933a10eb..00000000 --- a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d +++ /dev/null @@ -1,57 +0,0 @@ -cmd_Release/obj.target/bufferutil/src/bufferutil.o := g++ '-DNODE_GYP_MODULE_NAME=bufferutil' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/surya/.node-gyp/11.1.0/include/node -I/home/surya/.node-gyp/11.1.0/src -I/home/surya/.node-gyp/11.1.0/deps/openssl/config -I/home/surya/.node-gyp/11.1.0/deps/openssl/openssl/include -I/home/surya/.node-gyp/11.1.0/deps/uv/include -I/home/surya/.node-gyp/11.1.0/deps/zlib -I/home/surya/.node-gyp/11.1.0/deps/v8/include -I../../nan -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O2 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++1y -MMD -MF ./Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d.raw -c -o Release/obj.target/bufferutil/src/bufferutil.o ../src/bufferutil.cc -Release/obj.target/bufferutil/src/bufferutil.o: ../src/bufferutil.cc \ - /home/surya/.node-gyp/11.1.0/include/node/v8.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8-version.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8config.h \ - /home/surya/.node-gyp/11.1.0/include/node/node.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8-platform.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_version.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_version.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_buffer.h \ - /home/surya/.node-gyp/11.1.0/include/node/node.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_object_wrap.h \ - ../../nan/nan.h /home/surya/.node-gyp/11.1.0/include/node/uv.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/errno.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/version.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/unix.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/threadpool.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/linux.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h ../../nan/nan_persistent_12_inl.h \ - ../../nan/nan_weak.h ../../nan/nan_object_wrap.h ../../nan/nan_private.h \ - ../../nan/nan_typedarray_contents.h ../../nan/nan_json.h -../src/bufferutil.cc: -/home/surya/.node-gyp/11.1.0/include/node/v8.h: -/home/surya/.node-gyp/11.1.0/include/node/v8-version.h: -/home/surya/.node-gyp/11.1.0/include/node/v8config.h: -/home/surya/.node-gyp/11.1.0/include/node/node.h: -/home/surya/.node-gyp/11.1.0/include/node/v8.h: -/home/surya/.node-gyp/11.1.0/include/node/v8-platform.h: -/home/surya/.node-gyp/11.1.0/include/node/node_version.h: -/home/surya/.node-gyp/11.1.0/include/node/node_version.h: -/home/surya/.node-gyp/11.1.0/include/node/node_buffer.h: -/home/surya/.node-gyp/11.1.0/include/node/node.h: -/home/surya/.node-gyp/11.1.0/include/node/node_object_wrap.h: -../../nan/nan.h: -/home/surya/.node-gyp/11.1.0/include/node/uv.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/errno.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/version.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/unix.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/threadpool.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/linux.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_private.h: -../../nan/nan_typedarray_contents.h: -../../nan/nan_json.h: diff --git a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/validation.node.d b/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/validation.node.d deleted file mode 100644 index c51ae383..00000000 --- a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/validation.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/obj.target/validation.node := g++ -shared -pthread -rdynamic -m64 -Wl,-soname=validation.node -o Release/obj.target/validation.node -Wl,--start-group Release/obj.target/validation/src/validation.o -Wl,--end-group diff --git a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/validation/src/validation.o.d b/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/validation/src/validation.o.d deleted file mode 100644 index 1ff36094..00000000 --- a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/obj.target/validation/src/validation.o.d +++ /dev/null @@ -1,57 +0,0 @@ -cmd_Release/obj.target/validation/src/validation.o := g++ '-DNODE_GYP_MODULE_NAME=validation' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/surya/.node-gyp/11.1.0/include/node -I/home/surya/.node-gyp/11.1.0/src -I/home/surya/.node-gyp/11.1.0/deps/openssl/config -I/home/surya/.node-gyp/11.1.0/deps/openssl/openssl/include -I/home/surya/.node-gyp/11.1.0/deps/uv/include -I/home/surya/.node-gyp/11.1.0/deps/zlib -I/home/surya/.node-gyp/11.1.0/deps/v8/include -I../../nan -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O2 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++1y -MMD -MF ./Release/.deps/Release/obj.target/validation/src/validation.o.d.raw -c -o Release/obj.target/validation/src/validation.o ../src/validation.cc -Release/obj.target/validation/src/validation.o: ../src/validation.cc \ - /home/surya/.node-gyp/11.1.0/include/node/v8.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8-version.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8config.h \ - /home/surya/.node-gyp/11.1.0/include/node/node.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8.h \ - /home/surya/.node-gyp/11.1.0/include/node/v8-platform.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_version.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_version.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_buffer.h \ - /home/surya/.node-gyp/11.1.0/include/node/node.h \ - /home/surya/.node-gyp/11.1.0/include/node/node_object_wrap.h \ - ../../nan/nan.h /home/surya/.node-gyp/11.1.0/include/node/uv.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/errno.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/version.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/unix.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/threadpool.h \ - /home/surya/.node-gyp/11.1.0/include/node/uv/linux.h \ - ../../nan/nan_callbacks.h ../../nan/nan_callbacks_12_inl.h \ - ../../nan/nan_maybe_43_inl.h ../../nan/nan_converters.h \ - ../../nan/nan_converters_43_inl.h ../../nan/nan_new.h \ - ../../nan/nan_implementation_12_inl.h ../../nan/nan_persistent_12_inl.h \ - ../../nan/nan_weak.h ../../nan/nan_object_wrap.h ../../nan/nan_private.h \ - ../../nan/nan_typedarray_contents.h ../../nan/nan_json.h -../src/validation.cc: -/home/surya/.node-gyp/11.1.0/include/node/v8.h: -/home/surya/.node-gyp/11.1.0/include/node/v8-version.h: -/home/surya/.node-gyp/11.1.0/include/node/v8config.h: -/home/surya/.node-gyp/11.1.0/include/node/node.h: -/home/surya/.node-gyp/11.1.0/include/node/v8.h: -/home/surya/.node-gyp/11.1.0/include/node/v8-platform.h: -/home/surya/.node-gyp/11.1.0/include/node/node_version.h: -/home/surya/.node-gyp/11.1.0/include/node/node_version.h: -/home/surya/.node-gyp/11.1.0/include/node/node_buffer.h: -/home/surya/.node-gyp/11.1.0/include/node/node.h: -/home/surya/.node-gyp/11.1.0/include/node/node_object_wrap.h: -../../nan/nan.h: -/home/surya/.node-gyp/11.1.0/include/node/uv.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/errno.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/version.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/unix.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/threadpool.h: -/home/surya/.node-gyp/11.1.0/include/node/uv/linux.h: -../../nan/nan_callbacks.h: -../../nan/nan_callbacks_12_inl.h: -../../nan/nan_maybe_43_inl.h: -../../nan/nan_converters.h: -../../nan/nan_converters_43_inl.h: -../../nan/nan_new.h: -../../nan/nan_implementation_12_inl.h: -../../nan/nan_persistent_12_inl.h: -../../nan/nan_weak.h: -../../nan/nan_object_wrap.h: -../../nan/nan_private.h: -../../nan/nan_typedarray_contents.h: -../../nan/nan_json.h: diff --git a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/validation.node.d b/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/validation.node.d deleted file mode 100644 index 6b32ade1..00000000 --- a/truebit-implementation/node_modules/websocket/build/Release/.deps/Release/validation.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/validation.node := rm -rf "Release/validation.node" && cp -af "Release/obj.target/validation.node" "Release/validation.node" diff --git a/truebit-implementation/node_modules/websocket/build/Release/bufferutil.node b/truebit-implementation/node_modules/websocket/build/Release/bufferutil.node deleted file mode 100755 index f2a57e22..00000000 Binary files a/truebit-implementation/node_modules/websocket/build/Release/bufferutil.node and /dev/null differ diff --git a/truebit-implementation/node_modules/websocket/build/Release/obj.target/bufferutil.node b/truebit-implementation/node_modules/websocket/build/Release/obj.target/bufferutil.node deleted file mode 100755 index f2a57e22..00000000 Binary files a/truebit-implementation/node_modules/websocket/build/Release/obj.target/bufferutil.node and /dev/null differ diff --git a/truebit-implementation/node_modules/websocket/build/Release/obj.target/bufferutil/src/bufferutil.o b/truebit-implementation/node_modules/websocket/build/Release/obj.target/bufferutil/src/bufferutil.o deleted file mode 100644 index 0075435e..00000000 Binary files a/truebit-implementation/node_modules/websocket/build/Release/obj.target/bufferutil/src/bufferutil.o and /dev/null differ diff --git a/truebit-implementation/node_modules/websocket/build/Release/obj.target/validation.node b/truebit-implementation/node_modules/websocket/build/Release/obj.target/validation.node deleted file mode 100755 index e23b38aa..00000000 Binary files a/truebit-implementation/node_modules/websocket/build/Release/obj.target/validation.node and /dev/null differ diff --git a/truebit-implementation/node_modules/websocket/build/Release/obj.target/validation/src/validation.o b/truebit-implementation/node_modules/websocket/build/Release/obj.target/validation/src/validation.o deleted file mode 100644 index 9722d604..00000000 Binary files a/truebit-implementation/node_modules/websocket/build/Release/obj.target/validation/src/validation.o and /dev/null differ diff --git a/truebit-implementation/node_modules/websocket/build/Release/validation.node b/truebit-implementation/node_modules/websocket/build/Release/validation.node deleted file mode 100755 index e23b38aa..00000000 Binary files a/truebit-implementation/node_modules/websocket/build/Release/validation.node and /dev/null differ diff --git a/truebit-implementation/node_modules/websocket/build/binding.Makefile b/truebit-implementation/node_modules/websocket/build/binding.Makefile deleted file mode 100644 index 3c498cd4..00000000 --- a/truebit-implementation/node_modules/websocket/build/binding.Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# This file is generated by gyp; do not edit. - -export builddir_name ?= ./build/. -.PHONY: all -all: - $(MAKE) bufferutil validation diff --git a/truebit-implementation/node_modules/websocket/build/bufferutil.target.mk b/truebit-implementation/node_modules/websocket/build/bufferutil.target.mk deleted file mode 100644 index 0e960b5a..00000000 --- a/truebit-implementation/node_modules/websocket/build/bufferutil.target.mk +++ /dev/null @@ -1,150 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := bufferutil -DEFS_Debug := \ - '-DNODE_GYP_MODULE_NAME=bufferutil' \ - '-DUSING_UV_SHARED=1' \ - '-DUSING_V8_SHARED=1' \ - '-DV8_DEPRECATION_WARNINGS=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' \ - '-DV8_ENABLE_CHECKS' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -fPIC \ - -pthread \ - -Wall \ - -Wextra \ - -Wno-unused-parameter \ - -m64 \ - -O2 \ - -g \ - -O0 - -# Flags passed to only C files. -CFLAGS_C_Debug := - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -fno-rtti \ - -fno-exceptions \ - -std=gnu++1y - -INCS_Debug := \ - -I/home/surya/.node-gyp/11.1.0/include/node \ - -I/home/surya/.node-gyp/11.1.0/src \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/config \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/openssl/include \ - -I/home/surya/.node-gyp/11.1.0/deps/uv/include \ - -I/home/surya/.node-gyp/11.1.0/deps/zlib \ - -I/home/surya/.node-gyp/11.1.0/deps/v8/include \ - -I$(srcdir)/../nan - -DEFS_Release := \ - '-DNODE_GYP_MODULE_NAME=bufferutil' \ - '-DUSING_UV_SHARED=1' \ - '-DUSING_V8_SHARED=1' \ - '-DV8_DEPRECATION_WARNINGS=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -fPIC \ - -pthread \ - -Wall \ - -Wextra \ - -Wno-unused-parameter \ - -m64 \ - -O2 \ - -fno-omit-frame-pointer - -# Flags passed to only C files. -CFLAGS_C_Release := - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -fno-rtti \ - -fno-exceptions \ - -std=gnu++1y - -INCS_Release := \ - -I/home/surya/.node-gyp/11.1.0/include/node \ - -I/home/surya/.node-gyp/11.1.0/src \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/config \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/openssl/include \ - -I/home/surya/.node-gyp/11.1.0/deps/uv/include \ - -I/home/surya/.node-gyp/11.1.0/deps/zlib \ - -I/home/surya/.node-gyp/11.1.0/deps/v8/include \ - -I$(srcdir)/../nan - -OBJS := \ - $(obj).target/$(TARGET)/src/bufferutil.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -pthread \ - -rdynamic \ - -m64 - -LDFLAGS_Release := \ - -pthread \ - -rdynamic \ - -m64 - -LIBS := - -$(obj).target/bufferutil.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(obj).target/bufferutil.node: LIBS := $(LIBS) -$(obj).target/bufferutil.node: TOOLSET := $(TOOLSET) -$(obj).target/bufferutil.node: $(OBJS) FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(obj).target/bufferutil.node -# Add target alias -.PHONY: bufferutil -bufferutil: $(builddir)/bufferutil.node - -# Copy this to the executable output path. -$(builddir)/bufferutil.node: TOOLSET := $(TOOLSET) -$(builddir)/bufferutil.node: $(obj).target/bufferutil.node FORCE_DO_CMD - $(call do_cmd,copy) - -all_deps += $(builddir)/bufferutil.node -# Short alias for building this executable. -.PHONY: bufferutil.node -bufferutil.node: $(obj).target/bufferutil.node $(builddir)/bufferutil.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/bufferutil.node - diff --git a/truebit-implementation/node_modules/websocket/build/config.gypi b/truebit-implementation/node_modules/websocket/build/config.gypi deleted file mode 100644 index f2343411..00000000 --- a/truebit-implementation/node_modules/websocket/build/config.gypi +++ /dev/null @@ -1,193 +0,0 @@ -# Do not edit. File was generated by node-gyp's "configure" step -{ - "target_defaults": { - "cflags": [], - "default_configuration": "Release", - "defines": [], - "include_dirs": [], - "libraries": [] - }, - "variables": { - "asan": 0, - "build_v8_with_gn": "false", - "coverage": "false", - "debug_nghttp2": "false", - "enable_lto": "false", - "enable_pgo_generate": "false", - "enable_pgo_use": "false", - "force_dynamic_crt": 0, - "gas_version": "2.27", - "host_arch": "x64", - "icu_data_in": "../../deps/icu-small/source/data/in/icudt63l.dat", - "icu_endianness": "l", - "icu_gyp_path": "tools/icu/icu-generic.gyp", - "icu_locales": "en,root", - "icu_path": "deps/icu-small", - "icu_small": "true", - "icu_ver_major": "63", - "llvm_version": 0, - "node_byteorder": "little", - "node_debug_lib": "false", - "node_enable_d8": "false", - "node_enable_v8_vtunejit": "false", - "node_install_npm": "true", - "node_module_version": 67, - "node_no_browser_globals": "false", - "node_prefix": "/", - "node_release_urlbase": "https://nodejs.org/download/release/", - "node_shared": "false", - "node_shared_cares": "false", - "node_shared_http_parser": "false", - "node_shared_libuv": "false", - "node_shared_nghttp2": "false", - "node_shared_openssl": "false", - "node_shared_zlib": "false", - "node_tag": "", - "node_target_type": "executable", - "node_use_bundled_v8": "true", - "node_use_dtrace": "false", - "node_use_etw": "false", - "node_use_large_pages": "false", - "node_use_openssl": "true", - "node_use_pch": "false", - "node_use_v8_platform": "true", - "node_with_ltcg": "false", - "node_without_node_options": "false", - "openssl_fips": "", - "openssl_no_asm": 0, - "shlib_suffix": "so.67", - "target_arch": "x64", - "v8_enable_gdbjit": 0, - "v8_enable_i18n_support": 1, - "v8_enable_inspector": 1, - "v8_no_strict_aliasing": 1, - "v8_optimized_debug": 0, - "v8_promise_internal_field_count": 1, - "v8_random_seed": 0, - "v8_trace_maps": 0, - "v8_typed_array_max_size_in_heap": 0, - "v8_use_snapshot": "true", - "want_separate_host_toolset": 0, - "nodedir": "/home/surya/.node-gyp/11.1.0", - "standalone_static_library": 1, - "cache_lock_stale": "60000", - "ham_it_up": "", - "legacy_bundling": "", - "sign_git_tag": "", - "user_agent": "npm/6.4.1 node/v11.1.0 linux x64", - "always_auth": "", - "bin_links": "true", - "key": "", - "allow_same_version": "", - "description": "true", - "fetch_retries": "2", - "heading": "npm", - "if_present": "", - "init_version": "1.0.0", - "user": "", - "prefer_online": "", - "noproxy": "", - "force": "", - "only": "", - "read_only": "", - "cache_min": "10", - "init_license": "ISC", - "editor": "vi", - "rollback": "true", - "tag_version_prefix": "v", - "cache_max": "Infinity", - "timing": "", - "userconfig": "/home/surya/.npmrc", - "engine_strict": "", - "init_author_name": "", - "init_author_url": "", - "preid": "", - "tmp": "/tmp", - "depth": "Infinity", - "package_lock_only": "", - "save_dev": "", - "usage": "", - "metrics_registry": "https://registry.npmjs.org/", - "otp": "", - "package_lock": "true", - "progress": "true", - "https_proxy": "", - "save_prod": "", - "audit": "true", - "cidr": "", - "onload_script": "", - "sso_type": "oauth", - "rebuild_bundle": "true", - "save_bundle": "", - "shell": "/bin/bash", - "dry_run": "", - "prefix": "/usr", - "scope": "", - "browser": "", - "cache_lock_wait": "10000", - "ignore_prepublish": "", - "registry": "https://registry.npmjs.org/", - "save_optional": "", - "searchopts": "", - "versions": "", - "cache": "/home/surya/.npm", - "send_metrics": "", - "global_style": "", - "ignore_scripts": "", - "version": "", - "local_address": "", - "viewer": "man", - "node_gyp": "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js", - "audit_level": "low", - "prefer_offline": "", - "color": "true", - "sign_git_commit": "", - "fetch_retry_mintimeout": "10000", - "maxsockets": "50", - "offline": "", - "sso_poll_frequency": "500", - "umask": "0022", - "fetch_retry_maxtimeout": "60000", - "logs_max": "10", - "message": "%s", - "ca": "", - "cert": "", - "global": "", - "link": "", - "access": "", - "also": "", - "save": "true", - "unicode": "true", - "long": "", - "production": "", - "searchlimit": "20", - "unsafe_perm": "true", - "update_notifier": "true", - "auth_type": "legacy", - "node_version": "11.1.0", - "tag": "latest", - "git_tag_version": "true", - "commit_hooks": "true", - "script_shell": "", - "shrinkwrap": "true", - "fetch_retry_factor": "10", - "save_exact": "", - "strict_ssl": "true", - "dev": "", - "globalconfig": "/usr/etc/npmrc", - "init_module": "/home/surya/.npm-init.js", - "parseable": "", - "globalignorefile": "/usr/etc/npmignore", - "cache_lock_retries": "10", - "searchstaleness": "900", - "node_options": "", - "save_prefix": "^", - "scripts_prepend_node_path": "warn-only", - "group": "1000", - "init_author_email": "", - "searchexclude": "", - "git": "git", - "optional": "true", - "json": "" - } -} diff --git a/truebit-implementation/node_modules/websocket/build/validation.target.mk b/truebit-implementation/node_modules/websocket/build/validation.target.mk deleted file mode 100644 index c731eff2..00000000 --- a/truebit-implementation/node_modules/websocket/build/validation.target.mk +++ /dev/null @@ -1,150 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := validation -DEFS_Debug := \ - '-DNODE_GYP_MODULE_NAME=validation' \ - '-DUSING_UV_SHARED=1' \ - '-DUSING_V8_SHARED=1' \ - '-DV8_DEPRECATION_WARNINGS=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' \ - '-DV8_ENABLE_CHECKS' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -fPIC \ - -pthread \ - -Wall \ - -Wextra \ - -Wno-unused-parameter \ - -m64 \ - -O2 \ - -g \ - -O0 - -# Flags passed to only C files. -CFLAGS_C_Debug := - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -fno-rtti \ - -fno-exceptions \ - -std=gnu++1y - -INCS_Debug := \ - -I/home/surya/.node-gyp/11.1.0/include/node \ - -I/home/surya/.node-gyp/11.1.0/src \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/config \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/openssl/include \ - -I/home/surya/.node-gyp/11.1.0/deps/uv/include \ - -I/home/surya/.node-gyp/11.1.0/deps/zlib \ - -I/home/surya/.node-gyp/11.1.0/deps/v8/include \ - -I$(srcdir)/../nan - -DEFS_Release := \ - '-DNODE_GYP_MODULE_NAME=validation' \ - '-DUSING_UV_SHARED=1' \ - '-DUSING_V8_SHARED=1' \ - '-DV8_DEPRECATION_WARNINGS=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -fPIC \ - -pthread \ - -Wall \ - -Wextra \ - -Wno-unused-parameter \ - -m64 \ - -O2 \ - -fno-omit-frame-pointer - -# Flags passed to only C files. -CFLAGS_C_Release := - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -fno-rtti \ - -fno-exceptions \ - -std=gnu++1y - -INCS_Release := \ - -I/home/surya/.node-gyp/11.1.0/include/node \ - -I/home/surya/.node-gyp/11.1.0/src \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/config \ - -I/home/surya/.node-gyp/11.1.0/deps/openssl/openssl/include \ - -I/home/surya/.node-gyp/11.1.0/deps/uv/include \ - -I/home/surya/.node-gyp/11.1.0/deps/zlib \ - -I/home/surya/.node-gyp/11.1.0/deps/v8/include \ - -I$(srcdir)/../nan - -OBJS := \ - $(obj).target/$(TARGET)/src/validation.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -pthread \ - -rdynamic \ - -m64 - -LDFLAGS_Release := \ - -pthread \ - -rdynamic \ - -m64 - -LIBS := - -$(obj).target/validation.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(obj).target/validation.node: LIBS := $(LIBS) -$(obj).target/validation.node: TOOLSET := $(TOOLSET) -$(obj).target/validation.node: $(OBJS) FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(obj).target/validation.node -# Add target alias -.PHONY: validation -validation: $(builddir)/validation.node - -# Copy this to the executable output path. -$(builddir)/validation.node: TOOLSET := $(TOOLSET) -$(builddir)/validation.node: $(obj).target/validation.node FORCE_DO_CMD - $(call do_cmd,copy) - -all_deps += $(builddir)/validation.node -# Short alias for building this executable. -.PHONY: validation.node -validation.node: $(obj).target/validation.node $(builddir)/validation.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/validation.node - diff --git a/truebit-implementation/node_modules/websocket/builderror.log b/truebit-implementation/node_modules/websocket/builderror.log deleted file mode 100644 index fe8b9403..00000000 --- a/truebit-implementation/node_modules/websocket/builderror.log +++ /dev/null @@ -1,154 +0,0 @@ -In file included from ../../nan/nan_new.h:189:0, - from ../../nan/nan.h:203, - from ../src/bufferutil.cc:17: -../../nan/nan_implementation_12_inl.h: In static member function ‘static Nan::imp::FactoryBase::return_t Nan::imp::Factory::New(v8::Local)’: -../../nan/nan_implementation_12_inl.h:337:37: warning: ‘static v8::Local v8::StringObject::New(v8::Local)’ is deprecated: Use Isolate* version [-Wdeprecated-declarations] - return v8::StringObject::New(value).As(); - ^ -In file included from /home/surya/.node-gyp/11.1.0/include/node/v8.h:26:0, - from ../src/bufferutil.cc:8: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:5236:37: note: declared here - static Local New(Local value)); - ^ -/home/surya/.node-gyp/11.1.0/include/node/v8config.h:326:3: note: in definition of macro ‘V8_DEPRECATED’ - declarator __attribute__((deprecated(message))) - ^~~~~~~~~~ -In file included from ../src/bufferutil.cc:17:0: -../../nan/nan.h: In constructor ‘Nan::Utf8String::Utf8String(v8::Local)’: -../../nan/nan.h:1034:53: warning: ‘v8::Local v8::Value::ToString() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - v8::Local string = from->ToString(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10242:15: note: declared here - Local Value::ToString() const { - ^~~~~ -In file included from ../src/bufferutil.cc:17:0: -../../nan/nan.h:1044:74: warning: ‘int v8::String::WriteUtf8(char*, int, int*, int) const’ is deprecated: Use Isolate* version [-Wdeprecated-declarations] - length_ = string->WriteUtf8(str_, static_cast(len), 0, flags); - ^ -In file included from /home/surya/.node-gyp/11.1.0/include/node/v8.h:26:0, - from ../src/bufferutil.cc:8: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:2754:21: note: declared here - int WriteUtf8(char* buffer, int length = -1, - ^ -/home/surya/.node-gyp/11.1.0/include/node/v8config.h:326:3: note: in definition of macro ‘V8_DEPRECATED’ - declarator __attribute__((deprecated(message))) - ^~~~~~~~~~ -../src/bufferutil.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE BufferUtil::Merge(Nan::NAN_METHOD_ARGS_TYPE)’: -../src/bufferutil.cc:50:49: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local bufferObj = info[0]->ToObject(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ -../src/bufferutil.cc:57:51: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local src = array->Get(i)->ToObject(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ -../src/bufferutil.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE BufferUtil::Unmask(Nan::NAN_METHOD_ARGS_TYPE)’: -../src/bufferutil.cc:68:50: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local buffer_obj = info[0]->ToObject(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ -../src/bufferutil.cc:70:48: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local mask_obj = info[1]->ToObject(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ -../src/bufferutil.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE BufferUtil::Mask(Nan::NAN_METHOD_ARGS_TYPE)’: -../src/bufferutil.cc:89:50: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local buffer_obj = info[0]->ToObject(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ -../src/bufferutil.cc:90:48: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local mask_obj = info[1]->ToObject(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ -../src/bufferutil.cc:92:50: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local output_obj = info[2]->ToObject(); - ^ -In file included from ../src/bufferutil.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ -../src/bufferutil.cc:93:51: warning: ‘int32_t v8::Value::Int32Value() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - unsigned int dataOffset = info[3]->Int32Value(); - ^ -In file included from /home/surya/.node-gyp/11.1.0/include/node/v8.h:26:0, - from ../src/bufferutil.cc:8: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:2572:46: note: declared here - V8_DEPRECATED("Use maybe version", int32_t Int32Value() const); - ^ -/home/surya/.node-gyp/11.1.0/include/node/v8config.h:326:3: note: in definition of macro ‘V8_DEPRECATED’ - declarator __attribute__((deprecated(message))) - ^~~~~~~~~~ -../src/bufferutil.cc:94:47: warning: ‘int32_t v8::Value::Int32Value() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - unsigned int length = info[4]->Int32Value(); - ^ -In file included from /home/surya/.node-gyp/11.1.0/include/node/v8.h:26:0, - from ../src/bufferutil.cc:8: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:2572:46: note: declared here - V8_DEPRECATED("Use maybe version", int32_t Int32Value() const); - ^ -/home/surya/.node-gyp/11.1.0/include/node/v8config.h:326:3: note: in definition of macro ‘V8_DEPRECATED’ - declarator __attribute__((deprecated(message))) - ^~~~~~~~~~ -In file included from ../../nan/nan_new.h:189:0, - from ../../nan/nan.h:203, - from ../src/validation.cc:16: -../../nan/nan_implementation_12_inl.h: In static member function ‘static Nan::imp::FactoryBase::return_t Nan::imp::Factory::New(v8::Local)’: -../../nan/nan_implementation_12_inl.h:337:37: warning: ‘static v8::Local v8::StringObject::New(v8::Local)’ is deprecated: Use Isolate* version [-Wdeprecated-declarations] - return v8::StringObject::New(value).As(); - ^ -In file included from /home/surya/.node-gyp/11.1.0/include/node/v8.h:26:0, - from ../src/validation.cc:8: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:5236:37: note: declared here - static Local New(Local value)); - ^ -/home/surya/.node-gyp/11.1.0/include/node/v8config.h:326:3: note: in definition of macro ‘V8_DEPRECATED’ - declarator __attribute__((deprecated(message))) - ^~~~~~~~~~ -In file included from ../src/validation.cc:16:0: -../../nan/nan.h: In constructor ‘Nan::Utf8String::Utf8String(v8::Local)’: -../../nan/nan.h:1034:53: warning: ‘v8::Local v8::Value::ToString() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - v8::Local string = from->ToString(); - ^ -In file included from ../src/validation.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10242:15: note: declared here - Local Value::ToString() const { - ^~~~~ -In file included from ../src/validation.cc:16:0: -../../nan/nan.h:1044:74: warning: ‘int v8::String::WriteUtf8(char*, int, int*, int) const’ is deprecated: Use Isolate* version [-Wdeprecated-declarations] - length_ = string->WriteUtf8(str_, static_cast(len), 0, flags); - ^ -In file included from /home/surya/.node-gyp/11.1.0/include/node/v8.h:26:0, - from ../src/validation.cc:8: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:2754:21: note: declared here - int WriteUtf8(char* buffer, int length = -1, - ^ -/home/surya/.node-gyp/11.1.0/include/node/v8config.h:326:3: note: in definition of macro ‘V8_DEPRECATED’ - declarator __attribute__((deprecated(message))) - ^~~~~~~~~~ -../src/validation.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Validation::IsValidUTF8(Nan::NAN_METHOD_ARGS_TYPE)’: -../src/validation.cc:133:50: warning: ‘v8::Local v8::Value::ToObject() const’ is deprecated: Use maybe version [-Wdeprecated-declarations] - Local buffer_obj = info[0]->ToObject(); - ^ -In file included from ../src/validation.cc:8:0: -/home/surya/.node-gyp/11.1.0/include/node/v8.h:10248:15: note: declared here - Local Value::ToObject() const { - ^~~~~ diff --git a/truebit-implementation/node_modules/websocket/gulpfile.js b/truebit-implementation/node_modules/websocket/gulpfile.js deleted file mode 100644 index b515b928..00000000 --- a/truebit-implementation/node_modules/websocket/gulpfile.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Dependencies. - */ -var gulp = require('gulp'); -var jshint = require('gulp-jshint'); - -gulp.task('lint', function() { - return gulp.src(['gulpfile.js', 'lib/**/*.js', 'test/**/*.js']) - .pipe(jshint('.jshintrc')) - .pipe(jshint.reporter('jshint-stylish', {verbose: true})) - .pipe(jshint.reporter('fail')); -}); - -gulp.task('default', gulp.series('lint')); diff --git a/truebit-implementation/node_modules/websocket/index.js b/truebit-implementation/node_modules/websocket/index.js deleted file mode 100644 index 573969f7..00000000 --- a/truebit-implementation/node_modules/websocket/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/websocket'); \ No newline at end of file diff --git a/truebit-implementation/node_modules/websocket/lib/BufferUtil.fallback.js b/truebit-implementation/node_modules/websocket/lib/BufferUtil.fallback.js deleted file mode 100644 index c92daa6d..00000000 --- a/truebit-implementation/node_modules/websocket/lib/BufferUtil.fallback.js +++ /dev/null @@ -1,52 +0,0 @@ -/*! - * Copied from: - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -/* jshint -W086 */ - -module.exports.BufferUtil = { - merge: function(mergedBuffer, buffers) { - var offset = 0; - for (var i = 0, l = buffers.length; i < l; ++i) { - var buf = buffers[i]; - buf.copy(mergedBuffer, offset); - offset += buf.length; - } - }, - mask: function(source, mask, output, offset, length) { - var maskNum = mask.readUInt32LE(0); - var i = 0; - for (; i < length - 3; i += 4) { - var num = maskNum ^ source.readUInt32LE(i); - if (num < 0) { num = 4294967296 + num; } - output.writeUInt32LE(num, offset + i); - } - switch (length % 4) { - case 3: output[offset + i + 2] = source[i + 2] ^ mask[2]; - case 2: output[offset + i + 1] = source[i + 1] ^ mask[1]; - case 1: output[offset + i] = source[i] ^ mask[0]; - case 0: - } - }, - unmask: function(data, mask) { - var maskNum = mask.readUInt32LE(0); - var length = data.length; - var i = 0; - for (; i < length - 3; i += 4) { - var num = maskNum ^ data.readUInt32LE(i); - if (num < 0) { num = 4294967296 + num; } - data.writeUInt32LE(num, i); - } - switch (length % 4) { - case 3: data[i + 2] = data[i + 2] ^ mask[2]; - case 2: data[i + 1] = data[i + 1] ^ mask[1]; - case 1: data[i] = data[i] ^ mask[0]; - case 0: - } - } -}; - -/* jshint +W086 */ \ No newline at end of file diff --git a/truebit-implementation/node_modules/websocket/lib/BufferUtil.js b/truebit-implementation/node_modules/websocket/lib/BufferUtil.js deleted file mode 100644 index fa37c808..00000000 --- a/truebit-implementation/node_modules/websocket/lib/BufferUtil.js +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * Copied from: - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -try { - module.exports = require('../build/Release/bufferutil'); -} catch (e) { try { - module.exports = require('../build/default/bufferutil'); -} catch (e) { try { - module.exports = require('./BufferUtil.fallback'); -} catch (e) { - console.error('bufferutil.node seems to not have been built. Run npm install.'); - throw e; -}}} diff --git a/truebit-implementation/node_modules/websocket/lib/Deprecation.js b/truebit-implementation/node_modules/websocket/lib/Deprecation.js deleted file mode 100644 index 094f1604..00000000 --- a/truebit-implementation/node_modules/websocket/lib/Deprecation.js +++ /dev/null @@ -1,32 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var Deprecation = { - disableWarnings: false, - - deprecationWarningMap: { - - }, - - warn: function(deprecationName) { - if (!this.disableWarnings && this.deprecationWarningMap[deprecationName]) { - console.warn('DEPRECATION WARNING: ' + this.deprecationWarningMap[deprecationName]); - this.deprecationWarningMap[deprecationName] = false; - } - } -}; - -module.exports = Deprecation; diff --git a/truebit-implementation/node_modules/websocket/lib/Validation.fallback.js b/truebit-implementation/node_modules/websocket/lib/Validation.fallback.js deleted file mode 100644 index 6160f888..00000000 --- a/truebit-implementation/node_modules/websocket/lib/Validation.fallback.js +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * UTF-8 Validation Fallback Code originally from: - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -module.exports.Validation = { - isValidUTF8: function() { - return true; - } -}; diff --git a/truebit-implementation/node_modules/websocket/lib/Validation.js b/truebit-implementation/node_modules/websocket/lib/Validation.js deleted file mode 100644 index b4106e8d..00000000 --- a/truebit-implementation/node_modules/websocket/lib/Validation.js +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * UTF-8 Validation Code originally from: - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -try { - module.exports = require('../build/Release/validation'); -} catch (e) { try { - module.exports = require('../build/default/validation'); -} catch (e) { try { - module.exports = require('./Validation.fallback'); -} catch (e) { - console.error('validation.node seems not to have been built. Run npm install.'); - throw e; -}}} diff --git a/truebit-implementation/node_modules/websocket/lib/W3CWebSocket.js b/truebit-implementation/node_modules/websocket/lib/W3CWebSocket.js deleted file mode 100644 index 44a4ac98..00000000 --- a/truebit-implementation/node_modules/websocket/lib/W3CWebSocket.js +++ /dev/null @@ -1,257 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var WebSocketClient = require('./WebSocketClient'); -var toBuffer = require('typedarray-to-buffer'); -var yaeti = require('yaeti'); - - -const CONNECTING = 0; -const OPEN = 1; -const CLOSING = 2; -const CLOSED = 3; - - -module.exports = W3CWebSocket; - - -function W3CWebSocket(url, protocols, origin, headers, requestOptions, clientConfig) { - // Make this an EventTarget. - yaeti.EventTarget.call(this); - - // Sanitize clientConfig. - clientConfig = clientConfig || {}; - clientConfig.assembleFragments = true; // Required in the W3C API. - - var self = this; - - this._url = url; - this._readyState = CONNECTING; - this._protocol = undefined; - this._extensions = ''; - this._bufferedAmount = 0; // Hack, always 0. - this._binaryType = 'arraybuffer'; // TODO: Should be 'blob' by default, but Node has no Blob. - - // The WebSocketConnection instance. - this._connection = undefined; - - // WebSocketClient instance. - this._client = new WebSocketClient(clientConfig); - - this._client.on('connect', function(connection) { - onConnect.call(self, connection); - }); - - this._client.on('connectFailed', function() { - onConnectFailed.call(self); - }); - - this._client.connect(url, protocols, origin, headers, requestOptions); -} - - -// Expose W3C read only attributes. -Object.defineProperties(W3CWebSocket.prototype, { - url: { get: function() { return this._url; } }, - readyState: { get: function() { return this._readyState; } }, - protocol: { get: function() { return this._protocol; } }, - extensions: { get: function() { return this._extensions; } }, - bufferedAmount: { get: function() { return this._bufferedAmount; } } -}); - - -// Expose W3C write/read attributes. -Object.defineProperties(W3CWebSocket.prototype, { - binaryType: { - get: function() { - return this._binaryType; - }, - set: function(type) { - // TODO: Just 'arraybuffer' supported. - if (type !== 'arraybuffer') { - throw new SyntaxError('just "arraybuffer" type allowed for "binaryType" attribute'); - } - this._binaryType = type; - } - } -}); - - -// Expose W3C readyState constants into the WebSocket instance as W3C states. -[['CONNECTING',CONNECTING], ['OPEN',OPEN], ['CLOSING',CLOSING], ['CLOSED',CLOSED]].forEach(function(property) { - Object.defineProperty(W3CWebSocket.prototype, property[0], { - get: function() { return property[1]; } - }); -}); - -// Also expose W3C readyState constants into the WebSocket class (not defined by the W3C, -// but there are so many libs relying on them). -[['CONNECTING',CONNECTING], ['OPEN',OPEN], ['CLOSING',CLOSING], ['CLOSED',CLOSED]].forEach(function(property) { - Object.defineProperty(W3CWebSocket, property[0], { - get: function() { return property[1]; } - }); -}); - - -W3CWebSocket.prototype.send = function(data) { - if (this._readyState !== OPEN) { - throw new Error('cannot call send() while not connected'); - } - - // Text. - if (typeof data === 'string' || data instanceof String) { - this._connection.sendUTF(data); - } - // Binary. - else { - // Node Buffer. - if (data instanceof Buffer) { - this._connection.sendBytes(data); - } - // If ArrayBuffer or ArrayBufferView convert it to Node Buffer. - else if (data.byteLength || data.byteLength === 0) { - data = toBuffer(data); - this._connection.sendBytes(data); - } - else { - throw new Error('unknown binary data:', data); - } - } -}; - - -W3CWebSocket.prototype.close = function(code, reason) { - switch(this._readyState) { - case CONNECTING: - // NOTE: We don't have the WebSocketConnection instance yet so no - // way to close the TCP connection. - // Artificially invoke the onConnectFailed event. - onConnectFailed.call(this); - // And close if it connects after a while. - this._client.on('connect', function(connection) { - if (code) { - connection.close(code, reason); - } else { - connection.close(); - } - }); - break; - case OPEN: - this._readyState = CLOSING; - if (code) { - this._connection.close(code, reason); - } else { - this._connection.close(); - } - break; - case CLOSING: - case CLOSED: - break; - } -}; - - -/** - * Private API. - */ - - -function createCloseEvent(code, reason) { - var event = new yaeti.Event('close'); - - event.code = code; - event.reason = reason; - event.wasClean = (typeof code === 'undefined' || code === 1000); - - return event; -} - - -function createMessageEvent(data) { - var event = new yaeti.Event('message'); - - event.data = data; - - return event; -} - - -function onConnect(connection) { - var self = this; - - this._readyState = OPEN; - this._connection = connection; - this._protocol = connection.protocol; - this._extensions = connection.extensions; - - this._connection.on('close', function(code, reason) { - onClose.call(self, code, reason); - }); - - this._connection.on('message', function(msg) { - onMessage.call(self, msg); - }); - - this.dispatchEvent(new yaeti.Event('open')); -} - - -function onConnectFailed() { - destroy.call(this); - this._readyState = CLOSED; - - try { - this.dispatchEvent(new yaeti.Event('error')); - } finally { - this.dispatchEvent(createCloseEvent(1006, 'connection failed')); - } -} - - -function onClose(code, reason) { - destroy.call(this); - this._readyState = CLOSED; - - this.dispatchEvent(createCloseEvent(code, reason || '')); -} - - -function onMessage(message) { - if (message.utf8Data) { - this.dispatchEvent(createMessageEvent(message.utf8Data)); - } - else if (message.binaryData) { - // Must convert from Node Buffer to ArrayBuffer. - // TODO: or to a Blob (which does not exist in Node!). - if (this.binaryType === 'arraybuffer') { - var buffer = message.binaryData; - var arraybuffer = new ArrayBuffer(buffer.length); - var view = new Uint8Array(arraybuffer); - for (var i=0, len=buffer.length; i', '@', - ',', ';', ':', '\\', '\"', - '/', '[', ']', '?', '=', - '{', '}', ' ', String.fromCharCode(9) -]; - -function WebSocketClient(config) { - // Superclass Constructor - EventEmitter.call(this); - - // TODO: Implement extensions - - this.config = { - // 1MiB max frame size. - maxReceivedFrameSize: 0x100000, - - // 8MiB max message size, only applicable if - // assembleFragments is true - maxReceivedMessageSize: 0x800000, - - // Outgoing messages larger than fragmentationThreshold will be - // split into multiple fragments. - fragmentOutgoingMessages: true, - - // Outgoing frames are fragmented if they exceed this threshold. - // Default is 16KiB - fragmentationThreshold: 0x4000, - - // Which version of the protocol to use for this session. This - // option will be removed once the protocol is finalized by the IETF - // It is only available to ease the transition through the - // intermediate draft protocol versions. - // At present, it only affects the name of the Origin header. - webSocketVersion: 13, - - // If true, fragmented messages will be automatically assembled - // and the full message will be emitted via a 'message' event. - // If false, each frame will be emitted via a 'frame' event and - // the application will be responsible for aggregating multiple - // fragmented frames. Single-frame messages will emit a 'message' - // event in addition to the 'frame' event. - // Most users will want to leave this set to 'true' - assembleFragments: true, - - // The Nagle Algorithm makes more efficient use of network resources - // by introducing a small delay before sending small packets so that - // multiple messages can be batched together before going onto the - // wire. This however comes at the cost of latency, so the default - // is to disable it. If you don't need low latency and are streaming - // lots of small messages, you can change this to 'false' - disableNagleAlgorithm: true, - - // The number of milliseconds to wait after sending a close frame - // for an acknowledgement to come back before giving up and just - // closing the socket. - closeTimeout: 5000, - - // Options to pass to https.connect if connecting via TLS - tlsOptions: {} - }; - - if (config) { - var tlsOptions; - if (config.tlsOptions) { - tlsOptions = config.tlsOptions; - delete config.tlsOptions; - } - else { - tlsOptions = {}; - } - extend(this.config, config); - extend(this.config.tlsOptions, tlsOptions); - } - - this._req = null; - - switch (this.config.webSocketVersion) { - case 8: - case 13: - break; - default: - throw new Error('Requested webSocketVersion is not supported. Allowed values are 8 and 13.'); - } -} - -util.inherits(WebSocketClient, EventEmitter); - -WebSocketClient.prototype.connect = function(requestUrl, protocols, origin, headers, extraRequestOptions) { - var self = this; - if (typeof(protocols) === 'string') { - if (protocols.length > 0) { - protocols = [protocols]; - } - else { - protocols = []; - } - } - if (!(protocols instanceof Array)) { - protocols = []; - } - this.protocols = protocols; - this.origin = origin; - - if (typeof(requestUrl) === 'string') { - this.url = url.parse(requestUrl); - } - else { - this.url = requestUrl; // in case an already parsed url is passed in. - } - if (!this.url.protocol) { - throw new Error('You must specify a full WebSocket URL, including protocol.'); - } - if (!this.url.host) { - throw new Error('You must specify a full WebSocket URL, including hostname. Relative URLs are not supported.'); - } - - this.secure = (this.url.protocol === 'wss:'); - - // validate protocol characters: - this.protocols.forEach(function(protocol) { - for (var i=0; i < protocol.length; i ++) { - var charCode = protocol.charCodeAt(i); - var character = protocol.charAt(i); - if (charCode < 0x0021 || charCode > 0x007E || protocolSeparators.indexOf(character) !== -1) { - throw new Error('Protocol list contains invalid character "' + String.fromCharCode(charCode) + '"'); - } - } - }); - - var defaultPorts = { - 'ws:': '80', - 'wss:': '443' - }; - - if (!this.url.port) { - this.url.port = defaultPorts[this.url.protocol]; - } - - var nonce = new Buffer(16); - for (var i=0; i < 16; i++) { - nonce[i] = Math.round(Math.random()*0xFF); - } - this.base64nonce = nonce.toString('base64'); - - var hostHeaderValue = this.url.hostname; - if ((this.url.protocol === 'ws:' && this.url.port !== '80') || - (this.url.protocol === 'wss:' && this.url.port !== '443')) { - hostHeaderValue += (':' + this.url.port); - } - - var reqHeaders = headers || {}; - extend(reqHeaders, { - 'Upgrade': 'websocket', - 'Connection': 'Upgrade', - 'Sec-WebSocket-Version': this.config.webSocketVersion.toString(10), - 'Sec-WebSocket-Key': this.base64nonce, - 'Host': reqHeaders.Host || hostHeaderValue - }); - - if (this.protocols.length > 0) { - reqHeaders['Sec-WebSocket-Protocol'] = this.protocols.join(', '); - } - if (this.origin) { - if (this.config.webSocketVersion === 13) { - reqHeaders['Origin'] = this.origin; - } - else if (this.config.webSocketVersion === 8) { - reqHeaders['Sec-WebSocket-Origin'] = this.origin; - } - } - - // TODO: Implement extensions - - var pathAndQuery; - // Ensure it begins with '/'. - if (this.url.pathname) { - pathAndQuery = this.url.path; - } - else if (this.url.path) { - pathAndQuery = '/' + this.url.path; - } - else { - pathAndQuery = '/'; - } - - function handleRequestError(error) { - self._req = null; - self.emit('connectFailed', error); - } - - var requestOptions = { - agent: false - }; - if (extraRequestOptions) { - extend(requestOptions, extraRequestOptions); - } - // These options are always overridden by the library. The user is not - // allowed to specify these directly. - extend(requestOptions, { - hostname: this.url.hostname, - port: this.url.port, - method: 'GET', - path: pathAndQuery, - headers: reqHeaders - }); - if (this.secure) { - for (var key in self.config.tlsOptions) { - if (self.config.tlsOptions.hasOwnProperty(key)) { - requestOptions[key] = self.config.tlsOptions[key]; - } - } - } - - var req = this._req = (this.secure ? https : http).request(requestOptions); - req.on('upgrade', function handleRequestUpgrade(response, socket, head) { - self._req = null; - req.removeListener('error', handleRequestError); - self.socket = socket; - self.response = response; - self.firstDataChunk = head; - self.validateHandshake(); - }); - req.on('error', handleRequestError); - - req.on('response', function(response) { - self._req = null; - if (utils.eventEmitterListenerCount(self, 'httpResponse') > 0) { - self.emit('httpResponse', response, self); - if (response.socket) { - response.socket.end(); - } - } - else { - var headerDumpParts = []; - for (var headerName in response.headers) { - headerDumpParts.push(headerName + ': ' + response.headers[headerName]); - } - self.failHandshake( - 'Server responded with a non-101 status: ' + - response.statusCode + ' ' + response.statusMessage + - '\nResponse Headers Follow:\n' + - headerDumpParts.join('\n') + '\n' - ); - } - }); - req.end(); -}; - -WebSocketClient.prototype.validateHandshake = function() { - var headers = this.response.headers; - - if (this.protocols.length > 0) { - this.protocol = headers['sec-websocket-protocol']; - if (this.protocol) { - if (this.protocols.indexOf(this.protocol) === -1) { - this.failHandshake('Server did not respond with a requested protocol.'); - return; - } - } - else { - this.failHandshake('Expected a Sec-WebSocket-Protocol header.'); - return; - } - } - - if (!(headers['connection'] && headers['connection'].toLocaleLowerCase() === 'upgrade')) { - this.failHandshake('Expected a Connection: Upgrade header from the server'); - return; - } - - if (!(headers['upgrade'] && headers['upgrade'].toLocaleLowerCase() === 'websocket')) { - this.failHandshake('Expected an Upgrade: websocket header from the server'); - return; - } - - var sha1 = crypto.createHash('sha1'); - sha1.update(this.base64nonce + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'); - var expectedKey = sha1.digest('base64'); - - if (!headers['sec-websocket-accept']) { - this.failHandshake('Expected Sec-WebSocket-Accept header from server'); - return; - } - - if (headers['sec-websocket-accept'] !== expectedKey) { - this.failHandshake('Sec-WebSocket-Accept header from server didn\'t match expected value of ' + expectedKey); - return; - } - - // TODO: Support extensions - - this.succeedHandshake(); -}; - -WebSocketClient.prototype.failHandshake = function(errorDescription) { - if (this.socket && this.socket.writable) { - this.socket.end(); - } - this.emit('connectFailed', new Error(errorDescription)); -}; - -WebSocketClient.prototype.succeedHandshake = function() { - var connection = new WebSocketConnection(this.socket, [], this.protocol, true, this.config); - - connection.webSocketVersion = this.config.webSocketVersion; - connection._addSocketEventListeners(); - - this.emit('connect', connection); - if (this.firstDataChunk.length > 0) { - connection.handleSocketData(this.firstDataChunk); - } - this.firstDataChunk = null; -}; - -WebSocketClient.prototype.abort = function() { - if (this._req) { - this._req.abort(); - } -}; - -module.exports = WebSocketClient; diff --git a/truebit-implementation/node_modules/websocket/lib/WebSocketConnection.js b/truebit-implementation/node_modules/websocket/lib/WebSocketConnection.js deleted file mode 100644 index 2c19aab9..00000000 --- a/truebit-implementation/node_modules/websocket/lib/WebSocketConnection.js +++ /dev/null @@ -1,894 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var util = require('util'); -var utils = require('./utils'); -var EventEmitter = require('events').EventEmitter; -var WebSocketFrame = require('./WebSocketFrame'); -var BufferList = require('../vendor/FastBufferList'); -var Validation = require('./Validation').Validation; - -// Connected, fully-open, ready to send and receive frames -const STATE_OPEN = 'open'; -// Received a close frame from the remote peer -const STATE_PEER_REQUESTED_CLOSE = 'peer_requested_close'; -// Sent close frame to remote peer. No further data can be sent. -const STATE_ENDING = 'ending'; -// Connection is fully closed. No further data can be sent or received. -const STATE_CLOSED = 'closed'; - -var setImmediateImpl = ('setImmediate' in global) ? - global.setImmediate.bind(global) : - process.nextTick.bind(process); - -var idCounter = 0; - -function WebSocketConnection(socket, extensions, protocol, maskOutgoingPackets, config) { - this._debug = utils.BufferingLogger('websocket:connection', ++idCounter); - this._debug('constructor'); - - if (this._debug.enabled) { - instrumentSocketForDebugging(this, socket); - } - - // Superclass Constructor - EventEmitter.call(this); - - this._pingListenerCount = 0; - this.on('newListener', function(ev) { - if (ev === 'ping'){ - this._pingListenerCount++; - } - }).on('removeListener', function(ev) { - if (ev === 'ping') { - this._pingListenerCount--; - } - }); - - this.config = config; - this.socket = socket; - this.protocol = protocol; - this.extensions = extensions; - this.remoteAddress = socket.remoteAddress; - this.closeReasonCode = -1; - this.closeDescription = null; - this.closeEventEmitted = false; - - // We have to mask outgoing packets if we're acting as a WebSocket client. - this.maskOutgoingPackets = maskOutgoingPackets; - - // We re-use the same buffers for the mask and frame header for all frames - // received on each connection to avoid a small memory allocation for each - // frame. - this.maskBytes = new Buffer(4); - this.frameHeader = new Buffer(10); - - // the BufferList will handle the data streaming in - this.bufferList = new BufferList(); - - // Prepare for receiving first frame - this.currentFrame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - this.fragmentationSize = 0; // data received so far... - this.frameQueue = []; - - // Various bits of connection state - this.connected = true; - this.state = STATE_OPEN; - this.waitingForCloseResponse = false; - // Received TCP FIN, socket's readable stream is finished. - this.receivedEnd = false; - - this.closeTimeout = this.config.closeTimeout; - this.assembleFragments = this.config.assembleFragments; - this.maxReceivedMessageSize = this.config.maxReceivedMessageSize; - - this.outputBufferFull = false; - this.inputPaused = false; - this.receivedDataHandler = this.processReceivedData.bind(this); - this._closeTimerHandler = this.handleCloseTimer.bind(this); - - // Disable nagle algorithm? - this.socket.setNoDelay(this.config.disableNagleAlgorithm); - - // Make sure there is no socket inactivity timeout - this.socket.setTimeout(0); - - if (this.config.keepalive && !this.config.useNativeKeepalive) { - if (typeof(this.config.keepaliveInterval) !== 'number') { - throw new Error('keepaliveInterval must be specified and numeric ' + - 'if keepalive is true.'); - } - this._keepaliveTimerHandler = this.handleKeepaliveTimer.bind(this); - this.setKeepaliveTimer(); - - if (this.config.dropConnectionOnKeepaliveTimeout) { - if (typeof(this.config.keepaliveGracePeriod) !== 'number') { - throw new Error('keepaliveGracePeriod must be specified and ' + - 'numeric if dropConnectionOnKeepaliveTimeout ' + - 'is true.'); - } - this._gracePeriodTimerHandler = this.handleGracePeriodTimer.bind(this); - } - } - else if (this.config.keepalive && this.config.useNativeKeepalive) { - if (!('setKeepAlive' in this.socket)) { - throw new Error('Unable to use native keepalive: unsupported by ' + - 'this version of Node.'); - } - this.socket.setKeepAlive(true, this.config.keepaliveInterval); - } - - // The HTTP Client seems to subscribe to socket error events - // and re-dispatch them in such a way that doesn't make sense - // for users of our client, so we want to make sure nobody - // else is listening for error events on the socket besides us. - this.socket.removeAllListeners('error'); -} - -WebSocketConnection.CLOSE_REASON_NORMAL = 1000; -WebSocketConnection.CLOSE_REASON_GOING_AWAY = 1001; -WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR = 1002; -WebSocketConnection.CLOSE_REASON_UNPROCESSABLE_INPUT = 1003; -WebSocketConnection.CLOSE_REASON_RESERVED = 1004; // Reserved value. Undefined meaning. -WebSocketConnection.CLOSE_REASON_NOT_PROVIDED = 1005; // Not to be used on the wire -WebSocketConnection.CLOSE_REASON_ABNORMAL = 1006; // Not to be used on the wire -WebSocketConnection.CLOSE_REASON_INVALID_DATA = 1007; -WebSocketConnection.CLOSE_REASON_POLICY_VIOLATION = 1008; -WebSocketConnection.CLOSE_REASON_MESSAGE_TOO_BIG = 1009; -WebSocketConnection.CLOSE_REASON_EXTENSION_REQUIRED = 1010; -WebSocketConnection.CLOSE_REASON_INTERNAL_SERVER_ERROR = 1011; -WebSocketConnection.CLOSE_REASON_TLS_HANDSHAKE_FAILED = 1015; // Not to be used on the wire - -WebSocketConnection.CLOSE_DESCRIPTIONS = { - 1000: 'Normal connection closure', - 1001: 'Remote peer is going away', - 1002: 'Protocol error', - 1003: 'Unprocessable input', - 1004: 'Reserved', - 1005: 'Reason not provided', - 1006: 'Abnormal closure, no further detail available', - 1007: 'Invalid data received', - 1008: 'Policy violation', - 1009: 'Message too big', - 1010: 'Extension requested by client is required', - 1011: 'Internal Server Error', - 1015: 'TLS Handshake Failed' -}; - -function validateCloseReason(code) { - if (code < 1000) { - // Status codes in the range 0-999 are not used - return false; - } - if (code >= 1000 && code <= 2999) { - // Codes from 1000 - 2999 are reserved for use by the protocol. Only - // a few codes are defined, all others are currently illegal. - return [1000, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014].indexOf(code) !== -1; - } - if (code >= 3000 && code <= 3999) { - // Reserved for use by libraries, frameworks, and applications. - // Should be registered with IANA. Interpretation of these codes is - // undefined by the WebSocket protocol. - return true; - } - if (code >= 4000 && code <= 4999) { - // Reserved for private use. Interpretation of these codes is - // undefined by the WebSocket protocol. - return true; - } - if (code >= 5000) { - return false; - } -} - -util.inherits(WebSocketConnection, EventEmitter); - -WebSocketConnection.prototype._addSocketEventListeners = function() { - this.socket.on('error', this.handleSocketError.bind(this)); - this.socket.on('end', this.handleSocketEnd.bind(this)); - this.socket.on('close', this.handleSocketClose.bind(this)); - this.socket.on('drain', this.handleSocketDrain.bind(this)); - this.socket.on('pause', this.handleSocketPause.bind(this)); - this.socket.on('resume', this.handleSocketResume.bind(this)); - this.socket.on('data', this.handleSocketData.bind(this)); -}; - -// set or reset the keepalive timer when data is received. -WebSocketConnection.prototype.setKeepaliveTimer = function() { - this._debug('setKeepaliveTimer'); - if (!this.config.keepalive || this.config.useNativeKeepalive) { return; } - this.clearKeepaliveTimer(); - this.clearGracePeriodTimer(); - this._keepaliveTimeoutID = setTimeout(this._keepaliveTimerHandler, this.config.keepaliveInterval); -}; - -WebSocketConnection.prototype.clearKeepaliveTimer = function() { - if (this._keepaliveTimeoutID) { - clearTimeout(this._keepaliveTimeoutID); - } -}; - -// No data has been received within config.keepaliveTimeout ms. -WebSocketConnection.prototype.handleKeepaliveTimer = function() { - this._debug('handleKeepaliveTimer'); - this._keepaliveTimeoutID = null; - this.ping(); - - // If we are configured to drop connections if the client doesn't respond - // then set the grace period timer. - if (this.config.dropConnectionOnKeepaliveTimeout) { - this.setGracePeriodTimer(); - } - else { - // Otherwise reset the keepalive timer to send the next ping. - this.setKeepaliveTimer(); - } -}; - -WebSocketConnection.prototype.setGracePeriodTimer = function() { - this._debug('setGracePeriodTimer'); - this.clearGracePeriodTimer(); - this._gracePeriodTimeoutID = setTimeout(this._gracePeriodTimerHandler, this.config.keepaliveGracePeriod); -}; - -WebSocketConnection.prototype.clearGracePeriodTimer = function() { - if (this._gracePeriodTimeoutID) { - clearTimeout(this._gracePeriodTimeoutID); - } -}; - -WebSocketConnection.prototype.handleGracePeriodTimer = function() { - this._debug('handleGracePeriodTimer'); - // If this is called, the client has not responded and is assumed dead. - this._gracePeriodTimeoutID = null; - this.drop(WebSocketConnection.CLOSE_REASON_ABNORMAL, 'Peer not responding.', true); -}; - -WebSocketConnection.prototype.handleSocketData = function(data) { - this._debug('handleSocketData'); - // Reset the keepalive timer when receiving data of any kind. - this.setKeepaliveTimer(); - - // Add received data to our bufferList, which efficiently holds received - // data chunks in a linked list of Buffer objects. - this.bufferList.write(data); - - this.processReceivedData(); -}; - -WebSocketConnection.prototype.processReceivedData = function() { - this._debug('processReceivedData'); - // If we're not connected, we should ignore any data remaining on the buffer. - if (!this.connected) { return; } - - // Receiving/parsing is expected to be halted when paused. - if (this.inputPaused) { return; } - - var frame = this.currentFrame; - - // WebSocketFrame.prototype.addData returns true if all data necessary to - // parse the frame was available. It returns false if we are waiting for - // more data to come in on the wire. - if (!frame.addData(this.bufferList)) { this._debug('-- insufficient data for frame'); return; } - - var self = this; - - // Handle possible parsing errors - if (frame.protocolError) { - // Something bad happened.. get rid of this client. - this._debug('-- protocol error'); - process.nextTick(function() { - self.drop(WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR, frame.dropReason); - }); - return; - } - else if (frame.frameTooLarge) { - this._debug('-- frame too large'); - process.nextTick(function() { - self.drop(WebSocketConnection.CLOSE_REASON_MESSAGE_TOO_BIG, frame.dropReason); - }); - return; - } - - // For now since we don't support extensions, all RSV bits are illegal - if (frame.rsv1 || frame.rsv2 || frame.rsv3) { - this._debug('-- illegal rsv flag'); - process.nextTick(function() { - self.drop(WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR, - 'Unsupported usage of rsv bits without negotiated extension.'); - }); - return; - } - - if (!this.assembleFragments) { - this._debug('-- emitting frame'); - process.nextTick(function() { self.emit('frame', frame); }); - } - - process.nextTick(function() { self.processFrame(frame); }); - - this.currentFrame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - - // If there's data remaining, schedule additional processing, but yield - // for now so that other connections have a chance to have their data - // processed. We use setImmediate here instead of process.nextTick to - // explicitly indicate that we wish for other I/O to be handled first. - if (this.bufferList.length > 0) { - setImmediateImpl(this.receivedDataHandler); - } -}; - -WebSocketConnection.prototype.handleSocketError = function(error) { - this._debug('handleSocketError: %j', error); - if (this.state === STATE_CLOSED) { - // See https://github.com/theturtle32/WebSocket-Node/issues/288 - this._debug(' --- Socket \'error\' after \'close\''); - return; - } - this.closeReasonCode = WebSocketConnection.CLOSE_REASON_ABNORMAL; - this.closeDescription = 'Socket Error: ' + error.syscall + ' ' + error.code; - this.connected = false; - this.state = STATE_CLOSED; - this.fragmentationSize = 0; - if (utils.eventEmitterListenerCount(this, 'error') > 0) { - this.emit('error', error); - } - this.socket.destroy(error); - this._debug.printOutput(); -}; - -WebSocketConnection.prototype.handleSocketEnd = function() { - this._debug('handleSocketEnd: received socket end. state = %s', this.state); - this.receivedEnd = true; - if (this.state === STATE_CLOSED) { - // When using the TLS module, sometimes the socket will emit 'end' - // after it emits 'close'. I don't think that's correct behavior, - // but we should deal with it gracefully by ignoring it. - this._debug(' --- Socket \'end\' after \'close\''); - return; - } - if (this.state !== STATE_PEER_REQUESTED_CLOSE && - this.state !== STATE_ENDING) { - this._debug(' --- UNEXPECTED socket end.'); - this.socket.end(); - } -}; - -WebSocketConnection.prototype.handleSocketClose = function(hadError) { - this._debug('handleSocketClose: received socket close'); - this.socketHadError = hadError; - this.connected = false; - this.state = STATE_CLOSED; - // If closeReasonCode is still set to -1 at this point then we must - // not have received a close frame!! - if (this.closeReasonCode === -1) { - this.closeReasonCode = WebSocketConnection.CLOSE_REASON_ABNORMAL; - this.closeDescription = 'Connection dropped by remote peer.'; - } - this.clearCloseTimer(); - this.clearKeepaliveTimer(); - this.clearGracePeriodTimer(); - if (!this.closeEventEmitted) { - this.closeEventEmitted = true; - this._debug('-- Emitting WebSocketConnection close event'); - this.emit('close', this.closeReasonCode, this.closeDescription); - } -}; - -WebSocketConnection.prototype.handleSocketDrain = function() { - this._debug('handleSocketDrain: socket drain event'); - this.outputBufferFull = false; - this.emit('drain'); -}; - -WebSocketConnection.prototype.handleSocketPause = function() { - this._debug('handleSocketPause: socket pause event'); - this.inputPaused = true; - this.emit('pause'); -}; - -WebSocketConnection.prototype.handleSocketResume = function() { - this._debug('handleSocketResume: socket resume event'); - this.inputPaused = false; - this.emit('resume'); - this.processReceivedData(); -}; - -WebSocketConnection.prototype.pause = function() { - this._debug('pause: pause requested'); - this.socket.pause(); -}; - -WebSocketConnection.prototype.resume = function() { - this._debug('resume: resume requested'); - this.socket.resume(); -}; - -WebSocketConnection.prototype.close = function(reasonCode, description) { - if (this.connected) { - this._debug('close: Initating clean WebSocket close sequence.'); - if ('number' !== typeof reasonCode) { - reasonCode = WebSocketConnection.CLOSE_REASON_NORMAL; - } - if (!validateCloseReason(reasonCode)) { - throw new Error('Close code ' + reasonCode + ' is not valid.'); - } - if ('string' !== typeof description) { - description = WebSocketConnection.CLOSE_DESCRIPTIONS[reasonCode]; - } - this.closeReasonCode = reasonCode; - this.closeDescription = description; - this.setCloseTimer(); - this.sendCloseFrame(this.closeReasonCode, this.closeDescription); - this.state = STATE_ENDING; - this.connected = false; - } -}; - -WebSocketConnection.prototype.drop = function(reasonCode, description, skipCloseFrame) { - this._debug('drop'); - if (typeof(reasonCode) !== 'number') { - reasonCode = WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR; - } - - if (typeof(description) !== 'string') { - // If no description is provided, try to look one up based on the - // specified reasonCode. - description = WebSocketConnection.CLOSE_DESCRIPTIONS[reasonCode]; - } - - this._debug('Forcefully dropping connection. skipCloseFrame: %s, code: %d, description: %s', - skipCloseFrame, reasonCode, description - ); - - this.closeReasonCode = reasonCode; - this.closeDescription = description; - this.frameQueue = []; - this.fragmentationSize = 0; - if (!skipCloseFrame) { - this.sendCloseFrame(reasonCode, description); - } - this.connected = false; - this.state = STATE_CLOSED; - this.clearCloseTimer(); - this.clearKeepaliveTimer(); - this.clearGracePeriodTimer(); - - if (!this.closeEventEmitted) { - this.closeEventEmitted = true; - this._debug('Emitting WebSocketConnection close event'); - this.emit('close', this.closeReasonCode, this.closeDescription); - } - - this._debug('Drop: destroying socket'); - this.socket.destroy(); -}; - -WebSocketConnection.prototype.setCloseTimer = function() { - this._debug('setCloseTimer'); - this.clearCloseTimer(); - this._debug('Setting close timer'); - this.waitingForCloseResponse = true; - this.closeTimer = setTimeout(this._closeTimerHandler, this.closeTimeout); -}; - -WebSocketConnection.prototype.clearCloseTimer = function() { - this._debug('clearCloseTimer'); - if (this.closeTimer) { - this._debug('Clearing close timer'); - clearTimeout(this.closeTimer); - this.waitingForCloseResponse = false; - this.closeTimer = null; - } -}; - -WebSocketConnection.prototype.handleCloseTimer = function() { - this._debug('handleCloseTimer'); - this.closeTimer = null; - if (this.waitingForCloseResponse) { - this._debug('Close response not received from client. Forcing socket end.'); - this.waitingForCloseResponse = false; - this.state = STATE_CLOSED; - this.socket.end(); - } -}; - -WebSocketConnection.prototype.processFrame = function(frame) { - this._debug('processFrame'); - this._debug(' -- frame: %s', frame); - - // Any non-control opcode besides 0x00 (continuation) received in the - // middle of a fragmented message is illegal. - if (this.frameQueue.length !== 0 && (frame.opcode > 0x00 && frame.opcode < 0x08)) { - this.drop(WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR, - 'Illegal frame opcode 0x' + frame.opcode.toString(16) + ' ' + - 'received in middle of fragmented message.'); - return; - } - - switch(frame.opcode) { - case 0x02: // WebSocketFrame.BINARY_FRAME - this._debug('-- Binary Frame'); - if (this.assembleFragments) { - if (frame.fin) { - // Complete single-frame message received - this._debug('---- Emitting \'message\' event'); - this.emit('message', { - type: 'binary', - binaryData: frame.binaryPayload - }); - } - else { - // beginning of a fragmented message - this.frameQueue.push(frame); - this.fragmentationSize = frame.length; - } - } - break; - case 0x01: // WebSocketFrame.TEXT_FRAME - this._debug('-- Text Frame'); - if (this.assembleFragments) { - if (frame.fin) { - if (!Validation.isValidUTF8(frame.binaryPayload)) { - this.drop(WebSocketConnection.CLOSE_REASON_INVALID_DATA, - 'Invalid UTF-8 Data Received'); - return; - } - // Complete single-frame message received - this._debug('---- Emitting \'message\' event'); - this.emit('message', { - type: 'utf8', - utf8Data: frame.binaryPayload.toString('utf8') - }); - } - else { - // beginning of a fragmented message - this.frameQueue.push(frame); - this.fragmentationSize = frame.length; - } - } - break; - case 0x00: // WebSocketFrame.CONTINUATION - this._debug('-- Continuation Frame'); - if (this.assembleFragments) { - if (this.frameQueue.length === 0) { - this.drop(WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR, - 'Unexpected Continuation Frame'); - return; - } - - this.fragmentationSize += frame.length; - - if (this.fragmentationSize > this.maxReceivedMessageSize) { - this.drop(WebSocketConnection.CLOSE_REASON_MESSAGE_TOO_BIG, - 'Maximum message size exceeded.'); - return; - } - - this.frameQueue.push(frame); - - if (frame.fin) { - // end of fragmented message, so we process the whole - // message now. We also have to decode the utf-8 data - // for text frames after combining all the fragments. - var bytesCopied = 0; - var binaryPayload = new Buffer(this.fragmentationSize); - var opcode = this.frameQueue[0].opcode; - this.frameQueue.forEach(function (currentFrame) { - currentFrame.binaryPayload.copy(binaryPayload, bytesCopied); - bytesCopied += currentFrame.binaryPayload.length; - }); - this.frameQueue = []; - this.fragmentationSize = 0; - - switch (opcode) { - case 0x02: // WebSocketOpcode.BINARY_FRAME - this.emit('message', { - type: 'binary', - binaryData: binaryPayload - }); - break; - case 0x01: // WebSocketOpcode.TEXT_FRAME - if (!Validation.isValidUTF8(binaryPayload)) { - this.drop(WebSocketConnection.CLOSE_REASON_INVALID_DATA, - 'Invalid UTF-8 Data Received'); - return; - } - this.emit('message', { - type: 'utf8', - utf8Data: binaryPayload.toString('utf8') - }); - break; - default: - this.drop(WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR, - 'Unexpected first opcode in fragmentation sequence: 0x' + opcode.toString(16)); - return; - } - } - } - break; - case 0x09: // WebSocketFrame.PING - this._debug('-- Ping Frame'); - - if (this._pingListenerCount > 0) { - // logic to emit the ping frame: this is only done when a listener is known to exist - // Expose a function allowing the user to override the default ping() behavior - var cancelled = false; - var cancel = function() { - cancelled = true; - }; - this.emit('ping', cancel, frame.binaryPayload); - - // Only send a pong if the client did not indicate that he would like to cancel - if (!cancelled) { - this.pong(frame.binaryPayload); - } - } - else { - this.pong(frame.binaryPayload); - } - - break; - case 0x0A: // WebSocketFrame.PONG - this._debug('-- Pong Frame'); - this.emit('pong', frame.binaryPayload); - break; - case 0x08: // WebSocketFrame.CONNECTION_CLOSE - this._debug('-- Close Frame'); - if (this.waitingForCloseResponse) { - // Got response to our request to close the connection. - // Close is complete, so we just hang up. - this._debug('---- Got close response from peer. Completing closing handshake.'); - this.clearCloseTimer(); - this.waitingForCloseResponse = false; - this.state = STATE_CLOSED; - this.socket.end(); - return; - } - - this._debug('---- Closing handshake initiated by peer.'); - // Got request from other party to close connection. - // Send back acknowledgement and then hang up. - this.state = STATE_PEER_REQUESTED_CLOSE; - var respondCloseReasonCode; - - // Make sure the close reason provided is legal according to - // the protocol spec. Providing no close status is legal. - // WebSocketFrame sets closeStatus to -1 by default, so if it - // is still -1, then no status was provided. - if (frame.invalidCloseFrameLength) { - this.closeReasonCode = 1005; // 1005 = No reason provided. - respondCloseReasonCode = WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR; - } - else if (frame.closeStatus === -1 || validateCloseReason(frame.closeStatus)) { - this.closeReasonCode = frame.closeStatus; - respondCloseReasonCode = WebSocketConnection.CLOSE_REASON_NORMAL; - } - else { - this.closeReasonCode = frame.closeStatus; - respondCloseReasonCode = WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR; - } - - // If there is a textual description in the close frame, extract it. - if (frame.binaryPayload.length > 1) { - if (!Validation.isValidUTF8(frame.binaryPayload)) { - this.drop(WebSocketConnection.CLOSE_REASON_INVALID_DATA, - 'Invalid UTF-8 Data Received'); - return; - } - this.closeDescription = frame.binaryPayload.toString('utf8'); - } - else { - this.closeDescription = WebSocketConnection.CLOSE_DESCRIPTIONS[this.closeReasonCode]; - } - this._debug( - '------ Remote peer %s - code: %d - %s - close frame payload length: %d', - this.remoteAddress, this.closeReasonCode, - this.closeDescription, frame.length - ); - this._debug('------ responding to remote peer\'s close request.'); - this.sendCloseFrame(respondCloseReasonCode, null); - this.connected = false; - break; - default: - this._debug('-- Unrecognized Opcode %d', frame.opcode); - this.drop(WebSocketConnection.CLOSE_REASON_PROTOCOL_ERROR, - 'Unrecognized Opcode: 0x' + frame.opcode.toString(16)); - break; - } -}; - -WebSocketConnection.prototype.send = function(data, cb) { - this._debug('send'); - if (Buffer.isBuffer(data)) { - this.sendBytes(data, cb); - } - else if (typeof(data['toString']) === 'function') { - this.sendUTF(data, cb); - } - else { - throw new Error('Data provided must either be a Node Buffer or implement toString()'); - } -}; - -WebSocketConnection.prototype.sendUTF = function(data, cb) { - data = new Buffer(data.toString(), 'utf8'); - this._debug('sendUTF: %d bytes', data.length); - var frame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - frame.opcode = 0x01; // WebSocketOpcode.TEXT_FRAME - frame.binaryPayload = data; - this.fragmentAndSend(frame, cb); -}; - -WebSocketConnection.prototype.sendBytes = function(data, cb) { - this._debug('sendBytes'); - if (!Buffer.isBuffer(data)) { - throw new Error('You must pass a Node Buffer object to WebSocketConnection.prototype.sendBytes()'); - } - var frame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - frame.opcode = 0x02; // WebSocketOpcode.BINARY_FRAME - frame.binaryPayload = data; - this.fragmentAndSend(frame, cb); -}; - -WebSocketConnection.prototype.ping = function(data) { - this._debug('ping'); - var frame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - frame.opcode = 0x09; // WebSocketOpcode.PING - frame.fin = true; - if (data) { - if (!Buffer.isBuffer(data)) { - data = new Buffer(data.toString(), 'utf8'); - } - if (data.length > 125) { - this._debug('WebSocket: Data for ping is longer than 125 bytes. Truncating.'); - data = data.slice(0,124); - } - frame.binaryPayload = data; - } - this.sendFrame(frame); -}; - -// Pong frames have to echo back the contents of the data portion of the -// ping frame exactly, byte for byte. -WebSocketConnection.prototype.pong = function(binaryPayload) { - this._debug('pong'); - var frame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - frame.opcode = 0x0A; // WebSocketOpcode.PONG - if (Buffer.isBuffer(binaryPayload) && binaryPayload.length > 125) { - this._debug('WebSocket: Data for pong is longer than 125 bytes. Truncating.'); - binaryPayload = binaryPayload.slice(0,124); - } - frame.binaryPayload = binaryPayload; - frame.fin = true; - this.sendFrame(frame); -}; - -WebSocketConnection.prototype.fragmentAndSend = function(frame, cb) { - this._debug('fragmentAndSend'); - if (frame.opcode > 0x07) { - throw new Error('You cannot fragment control frames.'); - } - - var threshold = this.config.fragmentationThreshold; - var length = frame.binaryPayload.length; - - // Send immediately if fragmentation is disabled or the message is not - // larger than the fragmentation threshold. - if (!this.config.fragmentOutgoingMessages || (frame.binaryPayload && length <= threshold)) { - frame.fin = true; - this.sendFrame(frame, cb); - return; - } - - var numFragments = Math.ceil(length / threshold); - var sentFragments = 0; - var sentCallback = function fragmentSentCallback(err) { - if (err) { - if (typeof cb === 'function') { - // pass only the first error - cb(err); - cb = null; - } - return; - } - ++sentFragments; - if ((sentFragments === numFragments) && (typeof cb === 'function')) { - cb(); - } - }; - for (var i=1; i <= numFragments; i++) { - var currentFrame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - - // continuation opcode except for first frame. - currentFrame.opcode = (i === 1) ? frame.opcode : 0x00; - - // fin set on last frame only - currentFrame.fin = (i === numFragments); - - // length is likely to be shorter on the last fragment - var currentLength = (i === numFragments) ? length - (threshold * (i-1)) : threshold; - var sliceStart = threshold * (i-1); - - // Slice the right portion of the original payload - currentFrame.binaryPayload = frame.binaryPayload.slice(sliceStart, sliceStart + currentLength); - - this.sendFrame(currentFrame, sentCallback); - } -}; - -WebSocketConnection.prototype.sendCloseFrame = function(reasonCode, description, cb) { - if (typeof(reasonCode) !== 'number') { - reasonCode = WebSocketConnection.CLOSE_REASON_NORMAL; - } - - this._debug('sendCloseFrame state: %s, reasonCode: %d, description: %s', this.state, reasonCode, description); - - if (this.state !== STATE_OPEN && this.state !== STATE_PEER_REQUESTED_CLOSE) { return; } - - var frame = new WebSocketFrame(this.maskBytes, this.frameHeader, this.config); - frame.fin = true; - frame.opcode = 0x08; // WebSocketOpcode.CONNECTION_CLOSE - frame.closeStatus = reasonCode; - if (typeof(description) === 'string') { - frame.binaryPayload = new Buffer(description, 'utf8'); - } - - this.sendFrame(frame, cb); - this.socket.end(); -}; - -WebSocketConnection.prototype.sendFrame = function(frame, cb) { - this._debug('sendFrame'); - frame.mask = this.maskOutgoingPackets; - var flushed = this.socket.write(frame.toBuffer(), cb); - this.outputBufferFull = !flushed; - return flushed; -}; - -module.exports = WebSocketConnection; - - - -function instrumentSocketForDebugging(connection, socket) { - /* jshint loopfunc: true */ - if (!connection._debug.enabled) { return; } - - var originalSocketEmit = socket.emit; - socket.emit = function(event) { - connection._debug('||| Socket Event \'%s\'', event); - originalSocketEmit.apply(this, arguments); - }; - - for (var key in socket) { - if ('function' !== typeof(socket[key])) { continue; } - if (['emit'].indexOf(key) !== -1) { continue; } - (function(key) { - var original = socket[key]; - if (key === 'on') { - socket[key] = function proxyMethod__EventEmitter__On() { - connection._debug('||| Socket method called: %s (%s)', key, arguments[0]); - return original.apply(this, arguments); - }; - return; - } - socket[key] = function proxyMethod() { - connection._debug('||| Socket method called: %s', key); - return original.apply(this, arguments); - }; - })(key); - } -} diff --git a/truebit-implementation/node_modules/websocket/lib/WebSocketFrame.js b/truebit-implementation/node_modules/websocket/lib/WebSocketFrame.js deleted file mode 100644 index dcec9ca3..00000000 --- a/truebit-implementation/node_modules/websocket/lib/WebSocketFrame.js +++ /dev/null @@ -1,279 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var bufferUtil = require('./BufferUtil').BufferUtil; - -const DECODE_HEADER = 1; -const WAITING_FOR_16_BIT_LENGTH = 2; -const WAITING_FOR_64_BIT_LENGTH = 3; -const WAITING_FOR_MASK_KEY = 4; -const WAITING_FOR_PAYLOAD = 5; -const COMPLETE = 6; - -// WebSocketConnection will pass shared buffer objects for maskBytes and -// frameHeader into the constructor to avoid tons of small memory allocations -// for each frame we have to parse. This is only used for parsing frames -// we receive off the wire. -function WebSocketFrame(maskBytes, frameHeader, config) { - this.maskBytes = maskBytes; - this.frameHeader = frameHeader; - this.config = config; - this.maxReceivedFrameSize = config.maxReceivedFrameSize; - this.protocolError = false; - this.frameTooLarge = false; - this.invalidCloseFrameLength = false; - this.parseState = DECODE_HEADER; - this.closeStatus = -1; -} - -WebSocketFrame.prototype.addData = function(bufferList) { - if (this.parseState === DECODE_HEADER) { - if (bufferList.length >= 2) { - bufferList.joinInto(this.frameHeader, 0, 0, 2); - bufferList.advance(2); - var firstByte = this.frameHeader[0]; - var secondByte = this.frameHeader[1]; - - this.fin = Boolean(firstByte & 0x80); - this.rsv1 = Boolean(firstByte & 0x40); - this.rsv2 = Boolean(firstByte & 0x20); - this.rsv3 = Boolean(firstByte & 0x10); - this.mask = Boolean(secondByte & 0x80); - - this.opcode = firstByte & 0x0F; - this.length = secondByte & 0x7F; - - // Control frame sanity check - if (this.opcode >= 0x08) { - if (this.length > 125) { - this.protocolError = true; - this.dropReason = 'Illegal control frame longer than 125 bytes.'; - return true; - } - if (!this.fin) { - this.protocolError = true; - this.dropReason = 'Control frames must not be fragmented.'; - return true; - } - } - - if (this.length === 126) { - this.parseState = WAITING_FOR_16_BIT_LENGTH; - } - else if (this.length === 127) { - this.parseState = WAITING_FOR_64_BIT_LENGTH; - } - else { - this.parseState = WAITING_FOR_MASK_KEY; - } - } - } - if (this.parseState === WAITING_FOR_16_BIT_LENGTH) { - if (bufferList.length >= 2) { - bufferList.joinInto(this.frameHeader, 2, 0, 2); - bufferList.advance(2); - this.length = this.frameHeader.readUInt16BE(2); - this.parseState = WAITING_FOR_MASK_KEY; - } - } - else if (this.parseState === WAITING_FOR_64_BIT_LENGTH) { - if (bufferList.length >= 8) { - bufferList.joinInto(this.frameHeader, 2, 0, 8); - bufferList.advance(8); - var lengthPair = [ - this.frameHeader.readUInt32BE(2), - this.frameHeader.readUInt32BE(2+4) - ]; - - if (lengthPair[0] !== 0) { - this.protocolError = true; - this.dropReason = 'Unsupported 64-bit length frame received'; - return true; - } - this.length = lengthPair[1]; - this.parseState = WAITING_FOR_MASK_KEY; - } - } - - if (this.parseState === WAITING_FOR_MASK_KEY) { - if (this.mask) { - if (bufferList.length >= 4) { - bufferList.joinInto(this.maskBytes, 0, 0, 4); - bufferList.advance(4); - this.parseState = WAITING_FOR_PAYLOAD; - } - } - else { - this.parseState = WAITING_FOR_PAYLOAD; - } - } - - if (this.parseState === WAITING_FOR_PAYLOAD) { - if (this.length > this.maxReceivedFrameSize) { - this.frameTooLarge = true; - this.dropReason = 'Frame size of ' + this.length.toString(10) + - ' bytes exceeds maximum accepted frame size'; - return true; - } - - if (this.length === 0) { - this.binaryPayload = new Buffer(0); - this.parseState = COMPLETE; - return true; - } - if (bufferList.length >= this.length) { - this.binaryPayload = bufferList.take(this.length); - bufferList.advance(this.length); - if (this.mask) { - bufferUtil.unmask(this.binaryPayload, this.maskBytes); - // xor(this.binaryPayload, this.maskBytes, 0); - } - - if (this.opcode === 0x08) { // WebSocketOpcode.CONNECTION_CLOSE - if (this.length === 1) { - // Invalid length for a close frame. Must be zero or at least two. - this.binaryPayload = new Buffer(0); - this.invalidCloseFrameLength = true; - } - if (this.length >= 2) { - this.closeStatus = this.binaryPayload.readUInt16BE(0); - this.binaryPayload = this.binaryPayload.slice(2); - } - } - - this.parseState = COMPLETE; - return true; - } - } - return false; -}; - -WebSocketFrame.prototype.throwAwayPayload = function(bufferList) { - if (bufferList.length >= this.length) { - bufferList.advance(this.length); - this.parseState = COMPLETE; - return true; - } - return false; -}; - -WebSocketFrame.prototype.toBuffer = function(nullMask) { - var maskKey; - var headerLength = 2; - var data; - var outputPos; - var firstByte = 0x00; - var secondByte = 0x00; - - if (this.fin) { - firstByte |= 0x80; - } - if (this.rsv1) { - firstByte |= 0x40; - } - if (this.rsv2) { - firstByte |= 0x20; - } - if (this.rsv3) { - firstByte |= 0x10; - } - if (this.mask) { - secondByte |= 0x80; - } - - firstByte |= (this.opcode & 0x0F); - - // the close frame is a special case because the close reason is - // prepended to the payload data. - if (this.opcode === 0x08) { - this.length = 2; - if (this.binaryPayload) { - this.length += this.binaryPayload.length; - } - data = new Buffer(this.length); - data.writeUInt16BE(this.closeStatus, 0); - if (this.length > 2) { - this.binaryPayload.copy(data, 2); - } - } - else if (this.binaryPayload) { - data = this.binaryPayload; - this.length = data.length; - } - else { - this.length = 0; - } - - if (this.length <= 125) { - // encode the length directly into the two-byte frame header - secondByte |= (this.length & 0x7F); - } - else if (this.length > 125 && this.length <= 0xFFFF) { - // Use 16-bit length - secondByte |= 126; - headerLength += 2; - } - else if (this.length > 0xFFFF) { - // Use 64-bit length - secondByte |= 127; - headerLength += 8; - } - - var output = new Buffer(this.length + headerLength + (this.mask ? 4 : 0)); - - // write the frame header - output[0] = firstByte; - output[1] = secondByte; - - outputPos = 2; - - if (this.length > 125 && this.length <= 0xFFFF) { - // write 16-bit length - output.writeUInt16BE(this.length, outputPos); - outputPos += 2; - } - else if (this.length > 0xFFFF) { - // write 64-bit length - output.writeUInt32BE(0x00000000, outputPos); - output.writeUInt32BE(this.length, outputPos + 4); - outputPos += 8; - } - - if (this.mask) { - maskKey = nullMask ? 0 : ((Math.random() * 0xFFFFFFFF) >>> 0); - this.maskBytes.writeUInt32BE(maskKey, 0); - - // write the mask key - this.maskBytes.copy(output, outputPos); - outputPos += 4; - - if (data) { - bufferUtil.mask(data, this.maskBytes, output, outputPos, this.length); - } - } - else if (data) { - data.copy(output, outputPos); - } - - return output; -}; - -WebSocketFrame.prototype.toString = function() { - return 'Opcode: ' + this.opcode + ', fin: ' + this.fin + ', length: ' + this.length + ', hasPayload: ' + Boolean(this.binaryPayload) + ', masked: ' + this.mask; -}; - - -module.exports = WebSocketFrame; diff --git a/truebit-implementation/node_modules/websocket/lib/WebSocketRequest.js b/truebit-implementation/node_modules/websocket/lib/WebSocketRequest.js deleted file mode 100644 index f4d96555..00000000 --- a/truebit-implementation/node_modules/websocket/lib/WebSocketRequest.js +++ /dev/null @@ -1,524 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var crypto = require('crypto'); -var util = require('util'); -var url = require('url'); -var EventEmitter = require('events').EventEmitter; -var WebSocketConnection = require('./WebSocketConnection'); - -var headerValueSplitRegExp = /,\s*/; -var headerParamSplitRegExp = /;\s*/; -var headerSanitizeRegExp = /[\r\n]/g; -var xForwardedForSeparatorRegExp = /,\s*/; -var separators = [ - '(', ')', '<', '>', '@', - ',', ';', ':', '\\', '\"', - '/', '[', ']', '?', '=', - '{', '}', ' ', String.fromCharCode(9) -]; -var controlChars = [String.fromCharCode(127) /* DEL */]; -for (var i=0; i < 31; i ++) { - /* US-ASCII Control Characters */ - controlChars.push(String.fromCharCode(i)); -} - -var cookieNameValidateRegEx = /([\x00-\x20\x22\x28\x29\x2c\x2f\x3a-\x3f\x40\x5b-\x5e\x7b\x7d\x7f])/; -var cookieValueValidateRegEx = /[^\x21\x23-\x2b\x2d-\x3a\x3c-\x5b\x5d-\x7e]/; -var cookieValueDQuoteValidateRegEx = /^"[^"]*"$/; -var controlCharsAndSemicolonRegEx = /[\x00-\x20\x3b]/g; - -var cookieSeparatorRegEx = /[;,] */; - -var httpStatusDescriptions = { - 100: 'Continue', - 101: 'Switching Protocols', - 200: 'OK', - 201: 'Created', - 203: 'Non-Authoritative Information', - 204: 'No Content', - 205: 'Reset Content', - 206: 'Partial Content', - 300: 'Multiple Choices', - 301: 'Moved Permanently', - 302: 'Found', - 303: 'See Other', - 304: 'Not Modified', - 305: 'Use Proxy', - 307: 'Temporary Redirect', - 400: 'Bad Request', - 401: 'Unauthorized', - 402: 'Payment Required', - 403: 'Forbidden', - 404: 'Not Found', - 406: 'Not Acceptable', - 407: 'Proxy Authorization Required', - 408: 'Request Timeout', - 409: 'Conflict', - 410: 'Gone', - 411: 'Length Required', - 412: 'Precondition Failed', - 413: 'Request Entity Too Long', - 414: 'Request-URI Too Long', - 415: 'Unsupported Media Type', - 416: 'Requested Range Not Satisfiable', - 417: 'Expectation Failed', - 426: 'Upgrade Required', - 500: 'Internal Server Error', - 501: 'Not Implemented', - 502: 'Bad Gateway', - 503: 'Service Unavailable', - 504: 'Gateway Timeout', - 505: 'HTTP Version Not Supported' -}; - -function WebSocketRequest(socket, httpRequest, serverConfig) { - // Superclass Constructor - EventEmitter.call(this); - - this.socket = socket; - this.httpRequest = httpRequest; - this.resource = httpRequest.url; - this.remoteAddress = socket.remoteAddress; - this.remoteAddresses = [this.remoteAddress]; - this.serverConfig = serverConfig; - - // Watch for the underlying TCP socket closing before we call accept - this._socketIsClosing = false; - this._socketCloseHandler = this._handleSocketCloseBeforeAccept.bind(this); - this.socket.on('end', this._socketCloseHandler); - this.socket.on('close', this._socketCloseHandler); - - this._resolved = false; -} - -util.inherits(WebSocketRequest, EventEmitter); - -WebSocketRequest.prototype.readHandshake = function() { - var self = this; - var request = this.httpRequest; - - // Decode URL - this.resourceURL = url.parse(this.resource, true); - - this.host = request.headers['host']; - if (!this.host) { - throw new Error('Client must provide a Host header.'); - } - - this.key = request.headers['sec-websocket-key']; - if (!this.key) { - throw new Error('Client must provide a value for Sec-WebSocket-Key.'); - } - - this.webSocketVersion = parseInt(request.headers['sec-websocket-version'], 10); - - if (!this.webSocketVersion || isNaN(this.webSocketVersion)) { - throw new Error('Client must provide a value for Sec-WebSocket-Version.'); - } - - switch (this.webSocketVersion) { - case 8: - case 13: - break; - default: - var e = new Error('Unsupported websocket client version: ' + this.webSocketVersion + - 'Only versions 8 and 13 are supported.'); - e.httpCode = 426; - e.headers = { - 'Sec-WebSocket-Version': '13' - }; - throw e; - } - - if (this.webSocketVersion === 13) { - this.origin = request.headers['origin']; - } - else if (this.webSocketVersion === 8) { - this.origin = request.headers['sec-websocket-origin']; - } - - // Protocol is optional. - var protocolString = request.headers['sec-websocket-protocol']; - this.protocolFullCaseMap = {}; - this.requestedProtocols = []; - if (protocolString) { - var requestedProtocolsFullCase = protocolString.split(headerValueSplitRegExp); - requestedProtocolsFullCase.forEach(function(protocol) { - var lcProtocol = protocol.toLocaleLowerCase(); - self.requestedProtocols.push(lcProtocol); - self.protocolFullCaseMap[lcProtocol] = protocol; - }); - } - - if (!this.serverConfig.ignoreXForwardedFor && - request.headers['x-forwarded-for']) { - var immediatePeerIP = this.remoteAddress; - this.remoteAddresses = request.headers['x-forwarded-for'] - .split(xForwardedForSeparatorRegExp); - this.remoteAddresses.push(immediatePeerIP); - this.remoteAddress = this.remoteAddresses[0]; - } - - // Extensions are optional. - var extensionsString = request.headers['sec-websocket-extensions']; - this.requestedExtensions = this.parseExtensions(extensionsString); - - // Cookies are optional - var cookieString = request.headers['cookie']; - this.cookies = this.parseCookies(cookieString); -}; - -WebSocketRequest.prototype.parseExtensions = function(extensionsString) { - if (!extensionsString || extensionsString.length === 0) { - return []; - } - var extensions = extensionsString.toLocaleLowerCase().split(headerValueSplitRegExp); - extensions.forEach(function(extension, index, array) { - var params = extension.split(headerParamSplitRegExp); - var extensionName = params[0]; - var extensionParams = params.slice(1); - extensionParams.forEach(function(rawParam, index, array) { - var arr = rawParam.split('='); - var obj = { - name: arr[0], - value: arr[1] - }; - array.splice(index, 1, obj); - }); - var obj = { - name: extensionName, - params: extensionParams - }; - array.splice(index, 1, obj); - }); - return extensions; -}; - -// This function adapted from node-cookie -// https://github.com/shtylman/node-cookie -WebSocketRequest.prototype.parseCookies = function(str) { - // Sanity Check - if (!str || typeof(str) !== 'string') { - return []; - } - - var cookies = []; - var pairs = str.split(cookieSeparatorRegEx); - - pairs.forEach(function(pair) { - var eq_idx = pair.indexOf('='); - if (eq_idx === -1) { - cookies.push({ - name: pair, - value: null - }); - return; - } - - var key = pair.substr(0, eq_idx).trim(); - var val = pair.substr(++eq_idx, pair.length).trim(); - - // quoted values - if ('"' === val[0]) { - val = val.slice(1, -1); - } - - cookies.push({ - name: key, - value: decodeURIComponent(val) - }); - }); - - return cookies; -}; - -WebSocketRequest.prototype.accept = function(acceptedProtocol, allowedOrigin, cookies) { - this._verifyResolution(); - - // TODO: Handle extensions - - var protocolFullCase; - - if (acceptedProtocol) { - protocolFullCase = this.protocolFullCaseMap[acceptedProtocol.toLocaleLowerCase()]; - if (typeof(protocolFullCase) === 'undefined') { - protocolFullCase = acceptedProtocol; - } - } - else { - protocolFullCase = acceptedProtocol; - } - this.protocolFullCaseMap = null; - - // Create key validation hash - var sha1 = crypto.createHash('sha1'); - sha1.update(this.key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'); - var acceptKey = sha1.digest('base64'); - - var response = 'HTTP/1.1 101 Switching Protocols\r\n' + - 'Upgrade: websocket\r\n' + - 'Connection: Upgrade\r\n' + - 'Sec-WebSocket-Accept: ' + acceptKey + '\r\n'; - - if (protocolFullCase) { - // validate protocol - for (var i=0; i < protocolFullCase.length; i++) { - var charCode = protocolFullCase.charCodeAt(i); - var character = protocolFullCase.charAt(i); - if (charCode < 0x21 || charCode > 0x7E || separators.indexOf(character) !== -1) { - this.reject(500); - throw new Error('Illegal character "' + String.fromCharCode(character) + '" in subprotocol.'); - } - } - if (this.requestedProtocols.indexOf(acceptedProtocol) === -1) { - this.reject(500); - throw new Error('Specified protocol was not requested by the client.'); - } - - protocolFullCase = protocolFullCase.replace(headerSanitizeRegExp, ''); - response += 'Sec-WebSocket-Protocol: ' + protocolFullCase + '\r\n'; - } - this.requestedProtocols = null; - - if (allowedOrigin) { - allowedOrigin = allowedOrigin.replace(headerSanitizeRegExp, ''); - if (this.webSocketVersion === 13) { - response += 'Origin: ' + allowedOrigin + '\r\n'; - } - else if (this.webSocketVersion === 8) { - response += 'Sec-WebSocket-Origin: ' + allowedOrigin + '\r\n'; - } - } - - if (cookies) { - if (!Array.isArray(cookies)) { - this.reject(500); - throw new Error('Value supplied for "cookies" argument must be an array.'); - } - var seenCookies = {}; - cookies.forEach(function(cookie) { - if (!cookie.name || !cookie.value) { - this.reject(500); - throw new Error('Each cookie to set must at least provide a "name" and "value"'); - } - - // Make sure there are no \r\n sequences inserted - cookie.name = cookie.name.replace(controlCharsAndSemicolonRegEx, ''); - cookie.value = cookie.value.replace(controlCharsAndSemicolonRegEx, ''); - - if (seenCookies[cookie.name]) { - this.reject(500); - throw new Error('You may not specify the same cookie name twice.'); - } - seenCookies[cookie.name] = true; - - // token (RFC 2616, Section 2.2) - var invalidChar = cookie.name.match(cookieNameValidateRegEx); - if (invalidChar) { - this.reject(500); - throw new Error('Illegal character ' + invalidChar[0] + ' in cookie name'); - } - - // RFC 6265, Section 4.1.1 - // *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) | %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E - if (cookie.value.match(cookieValueDQuoteValidateRegEx)) { - invalidChar = cookie.value.slice(1, -1).match(cookieValueValidateRegEx); - } else { - invalidChar = cookie.value.match(cookieValueValidateRegEx); - } - if (invalidChar) { - this.reject(500); - throw new Error('Illegal character ' + invalidChar[0] + ' in cookie value'); - } - - var cookieParts = [cookie.name + '=' + cookie.value]; - - // RFC 6265, Section 4.1.1 - // 'Path=' path-value | - if(cookie.path){ - invalidChar = cookie.path.match(controlCharsAndSemicolonRegEx); - if (invalidChar) { - this.reject(500); - throw new Error('Illegal character ' + invalidChar[0] + ' in cookie path'); - } - cookieParts.push('Path=' + cookie.path); - } - - // RFC 6265, Section 4.1.2.3 - // 'Domain=' subdomain - if (cookie.domain) { - if (typeof(cookie.domain) !== 'string') { - this.reject(500); - throw new Error('Domain must be specified and must be a string.'); - } - invalidChar = cookie.domain.match(controlCharsAndSemicolonRegEx); - if (invalidChar) { - this.reject(500); - throw new Error('Illegal character ' + invalidChar[0] + ' in cookie domain'); - } - cookieParts.push('Domain=' + cookie.domain.toLowerCase()); - } - - // RFC 6265, Section 4.1.1 - //'Expires=' sane-cookie-date | Force Date object requirement by using only epoch - if (cookie.expires) { - if (!(cookie.expires instanceof Date)){ - this.reject(500); - throw new Error('Value supplied for cookie "expires" must be a vaild date object'); - } - cookieParts.push('Expires=' + cookie.expires.toGMTString()); - } - - // RFC 6265, Section 4.1.1 - //'Max-Age=' non-zero-digit *DIGIT - if (cookie.maxage) { - var maxage = cookie.maxage; - if (typeof(maxage) === 'string') { - maxage = parseInt(maxage, 10); - } - if (isNaN(maxage) || maxage <= 0 ) { - this.reject(500); - throw new Error('Value supplied for cookie "maxage" must be a non-zero number'); - } - maxage = Math.round(maxage); - cookieParts.push('Max-Age=' + maxage.toString(10)); - } - - // RFC 6265, Section 4.1.1 - //'Secure;' - if (cookie.secure) { - if (typeof(cookie.secure) !== 'boolean') { - this.reject(500); - throw new Error('Value supplied for cookie "secure" must be of type boolean'); - } - cookieParts.push('Secure'); - } - - // RFC 6265, Section 4.1.1 - //'HttpOnly;' - if (cookie.httponly) { - if (typeof(cookie.httponly) !== 'boolean') { - this.reject(500); - throw new Error('Value supplied for cookie "httponly" must be of type boolean'); - } - cookieParts.push('HttpOnly'); - } - - response += ('Set-Cookie: ' + cookieParts.join(';') + '\r\n'); - }.bind(this)); - } - - // TODO: handle negotiated extensions - // if (negotiatedExtensions) { - // response += 'Sec-WebSocket-Extensions: ' + negotiatedExtensions.join(', ') + '\r\n'; - // } - - // Mark the request resolved now so that the user can't call accept or - // reject a second time. - this._resolved = true; - this.emit('requestResolved', this); - - response += '\r\n'; - - var connection = new WebSocketConnection(this.socket, [], acceptedProtocol, false, this.serverConfig); - connection.webSocketVersion = this.webSocketVersion; - connection.remoteAddress = this.remoteAddress; - connection.remoteAddresses = this.remoteAddresses; - - var self = this; - - if (this._socketIsClosing) { - // Handle case when the client hangs up before we get a chance to - // accept the connection and send our side of the opening handshake. - cleanupFailedConnection(connection); - } - else { - this.socket.write(response, 'ascii', function(error) { - if (error) { - cleanupFailedConnection(connection); - return; - } - - self._removeSocketCloseListeners(); - connection._addSocketEventListeners(); - }); - } - - this.emit('requestAccepted', connection); - return connection; -}; - -WebSocketRequest.prototype.reject = function(status, reason, extraHeaders) { - this._verifyResolution(); - - // Mark the request resolved now so that the user can't call accept or - // reject a second time. - this._resolved = true; - this.emit('requestResolved', this); - - if (typeof(status) !== 'number') { - status = 403; - } - var response = 'HTTP/1.1 ' + status + ' ' + httpStatusDescriptions[status] + '\r\n' + - 'Connection: close\r\n'; - if (reason) { - reason = reason.replace(headerSanitizeRegExp, ''); - response += 'X-WebSocket-Reject-Reason: ' + reason + '\r\n'; - } - - if (extraHeaders) { - for (var key in extraHeaders) { - var sanitizedValue = extraHeaders[key].toString().replace(headerSanitizeRegExp, ''); - var sanitizedKey = key.replace(headerSanitizeRegExp, ''); - response += (sanitizedKey + ': ' + sanitizedValue + '\r\n'); - } - } - - response += '\r\n'; - this.socket.end(response, 'ascii'); - - this.emit('requestRejected', this); -}; - -WebSocketRequest.prototype._handleSocketCloseBeforeAccept = function() { - this._socketIsClosing = true; - this._removeSocketCloseListeners(); -}; - -WebSocketRequest.prototype._removeSocketCloseListeners = function() { - this.socket.removeListener('end', this._socketCloseHandler); - this.socket.removeListener('close', this._socketCloseHandler); -}; - -WebSocketRequest.prototype._verifyResolution = function() { - if (this._resolved) { - throw new Error('WebSocketRequest may only be accepted or rejected one time.'); - } -}; - -function cleanupFailedConnection(connection) { - // Since we have to return a connection object even if the socket is - // already dead in order not to break the API, we schedule a 'close' - // event on the connection object to occur immediately. - process.nextTick(function() { - // WebSocketConnection.CLOSE_REASON_ABNORMAL = 1006 - // Third param: Skip sending the close frame to a dead socket - connection.drop(1006, 'TCP connection lost before handshake completed.', true); - }); -} - -module.exports = WebSocketRequest; diff --git a/truebit-implementation/node_modules/websocket/lib/WebSocketRouter.js b/truebit-implementation/node_modules/websocket/lib/WebSocketRouter.js deleted file mode 100644 index 35bced97..00000000 --- a/truebit-implementation/node_modules/websocket/lib/WebSocketRouter.js +++ /dev/null @@ -1,157 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var extend = require('./utils').extend; -var util = require('util'); -var EventEmitter = require('events').EventEmitter; -var WebSocketRouterRequest = require('./WebSocketRouterRequest'); - -function WebSocketRouter(config) { - // Superclass Constructor - EventEmitter.call(this); - - this.config = { - // The WebSocketServer instance to attach to. - server: null - }; - if (config) { - extend(this.config, config); - } - this.handlers = []; - - this._requestHandler = this.handleRequest.bind(this); - if (this.config.server) { - this.attachServer(this.config.server); - } -} - -util.inherits(WebSocketRouter, EventEmitter); - -WebSocketRouter.prototype.attachServer = function(server) { - if (server) { - this.server = server; - this.server.on('request', this._requestHandler); - } - else { - throw new Error('You must specify a WebSocketServer instance to attach to.'); - } -}; - -WebSocketRouter.prototype.detachServer = function() { - if (this.server) { - this.server.removeListener('request', this._requestHandler); - this.server = null; - } - else { - throw new Error('Cannot detach from server: not attached.'); - } -}; - -WebSocketRouter.prototype.mount = function(path, protocol, callback) { - if (!path) { - throw new Error('You must specify a path for this handler.'); - } - if (!protocol) { - protocol = '____no_protocol____'; - } - if (!callback) { - throw new Error('You must specify a callback for this handler.'); - } - - path = this.pathToRegExp(path); - if (!(path instanceof RegExp)) { - throw new Error('Path must be specified as either a string or a RegExp.'); - } - var pathString = path.toString(); - - // normalize protocol to lower-case - protocol = protocol.toLocaleLowerCase(); - - if (this.findHandlerIndex(pathString, protocol) !== -1) { - throw new Error('You may only mount one handler per path/protocol combination.'); - } - - this.handlers.push({ - 'path': path, - 'pathString': pathString, - 'protocol': protocol, - 'callback': callback - }); -}; -WebSocketRouter.prototype.unmount = function(path, protocol) { - var index = this.findHandlerIndex(this.pathToRegExp(path).toString(), protocol); - if (index !== -1) { - this.handlers.splice(index, 1); - } - else { - throw new Error('Unable to find a route matching the specified path and protocol.'); - } -}; - -WebSocketRouter.prototype.findHandlerIndex = function(pathString, protocol) { - protocol = protocol.toLocaleLowerCase(); - for (var i=0, len=this.handlers.length; i < len; i++) { - var handler = this.handlers[i]; - if (handler.pathString === pathString && handler.protocol === protocol) { - return i; - } - } - return -1; -}; - -WebSocketRouter.prototype.pathToRegExp = function(path) { - if (typeof(path) === 'string') { - if (path === '*') { - path = /^.*$/; - } - else { - path = path.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); - path = new RegExp('^' + path + '$'); - } - } - return path; -}; - -WebSocketRouter.prototype.handleRequest = function(request) { - var requestedProtocols = request.requestedProtocols; - if (requestedProtocols.length === 0) { - requestedProtocols = ['____no_protocol____']; - } - - // Find a handler with the first requested protocol first - for (var i=0; i < requestedProtocols.length; i++) { - var requestedProtocol = requestedProtocols[i].toLocaleLowerCase(); - - // find the first handler that can process this request - for (var j=0, len=this.handlers.length; j < len; j++) { - var handler = this.handlers[j]; - if (handler.path.test(request.resourceURL.pathname)) { - if (requestedProtocol === handler.protocol || - handler.protocol === '*') - { - var routerRequest = new WebSocketRouterRequest(request, requestedProtocol); - handler.callback(routerRequest); - return; - } - } - } - } - - // If we get here we were unable to find a suitable handler. - request.reject(404, 'No handler is available for the given request.'); -}; - -module.exports = WebSocketRouter; diff --git a/truebit-implementation/node_modules/websocket/lib/WebSocketRouterRequest.js b/truebit-implementation/node_modules/websocket/lib/WebSocketRouterRequest.js deleted file mode 100644 index d3e37457..00000000 --- a/truebit-implementation/node_modules/websocket/lib/WebSocketRouterRequest.js +++ /dev/null @@ -1,54 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var util = require('util'); -var EventEmitter = require('events').EventEmitter; - -function WebSocketRouterRequest(webSocketRequest, resolvedProtocol) { - // Superclass Constructor - EventEmitter.call(this); - - this.webSocketRequest = webSocketRequest; - if (resolvedProtocol === '____no_protocol____') { - this.protocol = null; - } - else { - this.protocol = resolvedProtocol; - } - this.origin = webSocketRequest.origin; - this.resource = webSocketRequest.resource; - this.resourceURL = webSocketRequest.resourceURL; - this.httpRequest = webSocketRequest.httpRequest; - this.remoteAddress = webSocketRequest.remoteAddress; - this.webSocketVersion = webSocketRequest.webSocketVersion; - this.requestedExtensions = webSocketRequest.requestedExtensions; - this.cookies = webSocketRequest.cookies; -} - -util.inherits(WebSocketRouterRequest, EventEmitter); - -WebSocketRouterRequest.prototype.accept = function(origin, cookies) { - var connection = this.webSocketRequest.accept(this.protocol, origin, cookies); - this.emit('requestAccepted', connection); - return connection; -}; - -WebSocketRouterRequest.prototype.reject = function(status, reason, extraHeaders) { - this.webSocketRequest.reject(status, reason, extraHeaders); - this.emit('requestRejected', this); -}; - -module.exports = WebSocketRouterRequest; diff --git a/truebit-implementation/node_modules/websocket/lib/WebSocketServer.js b/truebit-implementation/node_modules/websocket/lib/WebSocketServer.js deleted file mode 100644 index c27d967b..00000000 --- a/truebit-implementation/node_modules/websocket/lib/WebSocketServer.js +++ /dev/null @@ -1,245 +0,0 @@ -/************************************************************************ - * Copyright 2010-2015 Brian McKelvey. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ***********************************************************************/ - -var extend = require('./utils').extend; -var utils = require('./utils'); -var util = require('util'); -var debug = require('debug')('websocket:server'); -var EventEmitter = require('events').EventEmitter; -var WebSocketRequest = require('./WebSocketRequest'); - -var WebSocketServer = function WebSocketServer(config) { - // Superclass Constructor - EventEmitter.call(this); - - this._handlers = { - upgrade: this.handleUpgrade.bind(this), - requestAccepted: this.handleRequestAccepted.bind(this), - requestResolved: this.handleRequestResolved.bind(this) - }; - this.connections = []; - this.pendingRequests = []; - if (config) { - this.mount(config); - } -}; - -util.inherits(WebSocketServer, EventEmitter); - -WebSocketServer.prototype.mount = function(config) { - this.config = { - // The http server instance to attach to. Required. - httpServer: null, - - // 64KiB max frame size. - maxReceivedFrameSize: 0x10000, - - // 1MiB max message size, only applicable if - // assembleFragments is true - maxReceivedMessageSize: 0x100000, - - // Outgoing messages larger than fragmentationThreshold will be - // split into multiple fragments. - fragmentOutgoingMessages: true, - - // Outgoing frames are fragmented if they exceed this threshold. - // Default is 16KiB - fragmentationThreshold: 0x4000, - - // If true, the server will automatically send a ping to all - // clients every 'keepaliveInterval' milliseconds. The timer is - // reset on any received data from the client. - keepalive: true, - - // The interval to send keepalive pings to connected clients if the - // connection is idle. Any received data will reset the counter. - keepaliveInterval: 20000, - - // If true, the server will consider any connection that has not - // received any data within the amount of time specified by - // 'keepaliveGracePeriod' after a keepalive ping has been sent to - // be dead, and will drop the connection. - // Ignored if keepalive is false. - dropConnectionOnKeepaliveTimeout: true, - - // The amount of time to wait after sending a keepalive ping before - // closing the connection if the connected peer does not respond. - // Ignored if keepalive is false. - keepaliveGracePeriod: 10000, - - // Whether to use native TCP keep-alive instead of WebSockets ping - // and pong packets. Native TCP keep-alive sends smaller packets - // on the wire and so uses bandwidth more efficiently. This may - // be more important when talking to mobile devices. - // If this value is set to true, then these values will be ignored: - // keepaliveGracePeriod - // dropConnectionOnKeepaliveTimeout - useNativeKeepalive: false, - - // If true, fragmented messages will be automatically assembled - // and the full message will be emitted via a 'message' event. - // If false, each frame will be emitted via a 'frame' event and - // the application will be responsible for aggregating multiple - // fragmented frames. Single-frame messages will emit a 'message' - // event in addition to the 'frame' event. - // Most users will want to leave this set to 'true' - assembleFragments: true, - - // If this is true, websocket connections will be accepted - // regardless of the path and protocol specified by the client. - // The protocol accepted will be the first that was requested - // by the client. Clients from any origin will be accepted. - // This should only be used in the simplest of cases. You should - // probably leave this set to 'false' and inspect the request - // object to make sure it's acceptable before accepting it. - autoAcceptConnections: false, - - // Whether or not the X-Forwarded-For header should be respected. - // It's important to set this to 'true' when accepting connections - // from untrusted clients, as a malicious client could spoof its - // IP address by simply setting this header. It's meant to be added - // by a trusted proxy or other intermediary within your own - // infrastructure. - // See: http://en.wikipedia.org/wiki/X-Forwarded-For - ignoreXForwardedFor: false, - - // The Nagle Algorithm makes more efficient use of network resources - // by introducing a small delay before sending small packets so that - // multiple messages can be batched together before going onto the - // wire. This however comes at the cost of latency, so the default - // is to disable it. If you don't need low latency and are streaming - // lots of small messages, you can change this to 'false' - disableNagleAlgorithm: true, - - // The number of milliseconds to wait after sending a close frame - // for an acknowledgement to come back before giving up and just - // closing the socket. - closeTimeout: 5000 - }; - extend(this.config, config); - - if (this.config.httpServer) { - if (!Array.isArray(this.config.httpServer)) { - this.config.httpServer = [this.config.httpServer]; - } - var upgradeHandler = this._handlers.upgrade; - this.config.httpServer.forEach(function(httpServer) { - httpServer.on('upgrade', upgradeHandler); - }); - } - else { - throw new Error('You must specify an httpServer on which to mount the WebSocket server.'); - } -}; - -WebSocketServer.prototype.unmount = function() { - var upgradeHandler = this._handlers.upgrade; - this.config.httpServer.forEach(function(httpServer) { - httpServer.removeListener('upgrade', upgradeHandler); - }); -}; - -WebSocketServer.prototype.closeAllConnections = function() { - this.connections.forEach(function(connection) { - connection.close(); - }); - this.pendingRequests.forEach(function(request) { - process.nextTick(function() { - request.reject(503); // HTTP 503 Service Unavailable - }); - }); -}; - -WebSocketServer.prototype.broadcast = function(data) { - if (Buffer.isBuffer(data)) { - this.broadcastBytes(data); - } - else if (typeof(data.toString) === 'function') { - this.broadcastUTF(data); - } -}; - -WebSocketServer.prototype.broadcastUTF = function(utfData) { - this.connections.forEach(function(connection) { - connection.sendUTF(utfData); - }); -}; - -WebSocketServer.prototype.broadcastBytes = function(binaryData) { - this.connections.forEach(function(connection) { - connection.sendBytes(binaryData); - }); -}; - -WebSocketServer.prototype.shutDown = function() { - this.unmount(); - this.closeAllConnections(); -}; - -WebSocketServer.prototype.handleUpgrade = function(request, socket) { - var wsRequest = new WebSocketRequest(socket, request, this.config); - try { - wsRequest.readHandshake(); - } - catch(e) { - wsRequest.reject( - e.httpCode ? e.httpCode : 400, - e.message, - e.headers - ); - debug('Invalid handshake: %s', e.message); - return; - } - - this.pendingRequests.push(wsRequest); - - wsRequest.once('requestAccepted', this._handlers.requestAccepted); - wsRequest.once('requestResolved', this._handlers.requestResolved); - - if (!this.config.autoAcceptConnections && utils.eventEmitterListenerCount(this, 'request') > 0) { - this.emit('request', wsRequest); - } - else if (this.config.autoAcceptConnections) { - wsRequest.accept(wsRequest.requestedProtocols[0], wsRequest.origin); - } - else { - wsRequest.reject(404, 'No handler is configured to accept the connection.'); - } -}; - -WebSocketServer.prototype.handleRequestAccepted = function(connection) { - var self = this; - connection.once('close', function(closeReason, description) { - self.handleConnectionClose(connection, closeReason, description); - }); - this.connections.push(connection); - this.emit('connect', connection); -}; - -WebSocketServer.prototype.handleConnectionClose = function(connection, closeReason, description) { - var index = this.connections.indexOf(connection); - if (index !== -1) { - this.connections.splice(index, 1); - } - this.emit('close', connection, closeReason, description); -}; - -WebSocketServer.prototype.handleRequestResolved = function(request) { - var index = this.pendingRequests.indexOf(request); - if (index !== -1) { this.pendingRequests.splice(index, 1); } -}; - -module.exports = WebSocketServer; diff --git a/truebit-implementation/node_modules/websocket/lib/browser.js b/truebit-implementation/node_modules/websocket/lib/browser.js deleted file mode 100644 index 162e8dc4..00000000 --- a/truebit-implementation/node_modules/websocket/lib/browser.js +++ /dev/null @@ -1,42 +0,0 @@ -var _global = (function() { return this || {}; })(); -var NativeWebSocket = _global.WebSocket || _global.MozWebSocket; -var websocket_version = require('./version'); - - -/** - * Expose a W3C WebSocket class with just one or two arguments. - */ -function W3CWebSocket(uri, protocols) { - var native_instance; - - if (protocols) { - native_instance = new NativeWebSocket(uri, protocols); - } - else { - native_instance = new NativeWebSocket(uri); - } - - /** - * 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket - * class). Since it is an Object it will be returned as it is when creating an - * instance of W3CWebSocket via 'new W3CWebSocket()'. - * - * ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2 - */ - return native_instance; -} -if (NativeWebSocket) { - ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) { - Object.defineProperty(W3CWebSocket, prop, { - get: function() { return NativeWebSocket[prop]; } - }); - }); -} - -/** - * Module exports. - */ -module.exports = { - 'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null, - 'version' : websocket_version -}; diff --git a/truebit-implementation/node_modules/websocket/lib/utils.js b/truebit-implementation/node_modules/websocket/lib/utils.js deleted file mode 100644 index 6506dc97..00000000 --- a/truebit-implementation/node_modules/websocket/lib/utils.js +++ /dev/null @@ -1,60 +0,0 @@ -var noop = exports.noop = function(){}; - -exports.extend = function extend(dest, source) { - for (var prop in source) { - dest[prop] = source[prop]; - } -}; - -exports.eventEmitterListenerCount = - require('events').EventEmitter.listenerCount || - function(emitter, type) { return emitter.listeners(type).length; }; - - - - - -exports.BufferingLogger = function createBufferingLogger(identifier, uniqueID) { - var logFunction = require('debug')(identifier); - if (logFunction.enabled) { - var logger = new BufferingLogger(identifier, uniqueID, logFunction); - var debug = logger.log.bind(logger); - debug.printOutput = logger.printOutput.bind(logger); - debug.enabled = logFunction.enabled; - return debug; - } - logFunction.printOutput = noop; - return logFunction; -}; - -function BufferingLogger(identifier, uniqueID, logFunction) { - this.logFunction = logFunction; - this.identifier = identifier; - this.uniqueID = uniqueID; - this.buffer = []; -} - -BufferingLogger.prototype.log = function() { - this.buffer.push([ new Date(), Array.prototype.slice.call(arguments) ]); - return this; -}; - -BufferingLogger.prototype.clear = function() { - this.buffer = []; - return this; -}; - -BufferingLogger.prototype.printOutput = function(logFunction) { - if (!logFunction) { logFunction = this.logFunction; } - var uniqueID = this.uniqueID; - this.buffer.forEach(function(entry) { - var date = entry[0].toLocaleString(); - var args = entry[1].slice(); - var formatString = args[0]; - if (formatString !== (void 0) && formatString !== null) { - formatString = '%s - %s - ' + formatString.toString(); - args.splice(0, 1, formatString, date, uniqueID); - logFunction.apply(global, args); - } - }); -}; diff --git a/truebit-implementation/node_modules/websocket/lib/version.js b/truebit-implementation/node_modules/websocket/lib/version.js deleted file mode 100644 index 81f6e78b..00000000 --- a/truebit-implementation/node_modules/websocket/lib/version.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../package.json').version; diff --git a/truebit-implementation/node_modules/websocket/lib/websocket.js b/truebit-implementation/node_modules/websocket/lib/websocket.js deleted file mode 100644 index 6242d561..00000000 --- a/truebit-implementation/node_modules/websocket/lib/websocket.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - 'server' : require('./WebSocketServer'), - 'client' : require('./WebSocketClient'), - 'router' : require('./WebSocketRouter'), - 'frame' : require('./WebSocketFrame'), - 'request' : require('./WebSocketRequest'), - 'connection' : require('./WebSocketConnection'), - 'w3cwebsocket' : require('./W3CWebSocket'), - 'deprecation' : require('./Deprecation'), - 'version' : require('./version') -}; diff --git a/truebit-implementation/node_modules/websocket/package.json b/truebit-implementation/node_modules/websocket/package.json deleted file mode 100644 index 9038836b..00000000 --- a/truebit-implementation/node_modules/websocket/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", - "_id": "websocket@1.0.26", - "_inBundle": false, - "_integrity": "", - "_location": "/websocket", - "_phantomChildren": {}, - "_requested": { - "type": "git", - "raw": "websocket@git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", - "name": "websocket", - "escapedName": "websocket", - "rawSpec": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", - "saveSpec": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", - "fetchSpec": "git://github.com/frozeman/WebSocket-Node.git", - "gitCommittish": "browserifyCompatible" - }, - "_requiredBy": [ - "/web3-providers-ws" - ], - "_resolved": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "_spec": "websocket@git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-providers-ws", - "author": { - "name": "Brian McKelvey", - "email": "brian@worlize.com", - "url": "https://www.worlize.com/" - }, - "browser": "lib/browser.js", - "bugs": { - "url": "https://github.com/theturtle32/WebSocket-Node/issues" - }, - "bundleDependencies": false, - "config": { - "verbose": false - }, - "contributors": [ - { - "name": "Iñaki Baz Castillo", - "email": "ibc@aliax.net", - "url": "http://dev.sipdoc.net" - } - ], - "dependencies": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" - }, - "deprecated": false, - "description": "Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.", - "devDependencies": { - "buffer-equal": "^1.0.0", - "faucet": "^0.0.1", - "gulp": "git+https://github.com/gulpjs/gulp.git#4.0", - "gulp-jshint": "^2.0.4", - "jshint": "^2.0.0", - "jshint-stylish": "^2.2.1", - "tape": "^4.0.1" - }, - "directories": { - "lib": "./lib" - }, - "engines": { - "node": ">=0.10.0" - }, - "homepage": "https://github.com/theturtle32/WebSocket-Node", - "keywords": [ - "websocket", - "websockets", - "socket", - "networking", - "comet", - "push", - "RFC-6455", - "realtime", - "server", - "client" - ], - "license": "Apache-2.0", - "main": "index", - "name": "websocket", - "repository": { - "type": "git", - "url": "git+https://github.com/theturtle32/WebSocket-Node.git" - }, - "scripts": { - "gulp": "gulp", - "install": "(node-gyp rebuild 2> builderror.log) || (exit 0)", - "test": "faucet test/unit" - }, - "version": "1.0.26" -} diff --git a/truebit-implementation/node_modules/websocket/src/bufferutil.cc b/truebit-implementation/node_modules/websocket/src/bufferutil.cc deleted file mode 100644 index d2f8d2d6..00000000 --- a/truebit-implementation/node_modules/websocket/src/bufferutil.cc +++ /dev/null @@ -1,121 +0,0 @@ -/*! - * BufferUtil originally from: - * ws: a node.js websocket client - * Copyright(c) 2015 Einar Otto Stangvik - * MIT Licensed - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nan.h" - -using namespace v8; -using namespace node; - -class BufferUtil : public ObjectWrap -{ -public: - - static void Initialize(v8::Handle target) - { - Nan::HandleScope scope; - Local t = Nan::New(New); - t->InstanceTemplate()->SetInternalFieldCount(1); - Nan::SetMethod(t, "unmask", BufferUtil::Unmask); - Nan::SetMethod(t, "mask", BufferUtil::Mask); - Nan::SetMethod(t, "merge", BufferUtil::Merge); - Nan::Set(target, Nan::New("BufferUtil").ToLocalChecked(), t->GetFunction()); - } - -protected: - - static NAN_METHOD(New) - { - Nan::HandleScope scope; - BufferUtil* bufferUtil = new BufferUtil(); - bufferUtil->Wrap(info.This()); - info.GetReturnValue().Set(info.This()); - } - - static NAN_METHOD(Merge) - { - Nan::HandleScope scope; - Local bufferObj = info[0]->ToObject(); - char* buffer = Buffer::Data(bufferObj); - Local array = Local::Cast(info[1]); - unsigned int arrayLength = array->Length(); - size_t offset = 0; - unsigned int i; - for (i = 0; i < arrayLength; ++i) { - Local src = array->Get(i)->ToObject(); - size_t length = Buffer::Length(src); - memcpy(buffer + offset, Buffer::Data(src), length); - offset += length; - } - info.GetReturnValue().Set(Nan::True()); - } - - static NAN_METHOD(Unmask) - { - Nan::HandleScope scope; - Local buffer_obj = info[0]->ToObject(); - size_t length = Buffer::Length(buffer_obj); - Local mask_obj = info[1]->ToObject(); - unsigned int *mask = (unsigned int*)Buffer::Data(mask_obj); - unsigned int* from = (unsigned int*)Buffer::Data(buffer_obj); - size_t len32 = length / 4; - unsigned int i; - for (i = 0; i < len32; ++i) *(from + i) ^= *mask; - from += i; - switch (length % 4) { - case 3: *((unsigned char*)from+2) = *((unsigned char*)from+2) ^ ((unsigned char*)mask)[2]; - case 2: *((unsigned char*)from+1) = *((unsigned char*)from+1) ^ ((unsigned char*)mask)[1]; - case 1: *((unsigned char*)from ) = *((unsigned char*)from ) ^ ((unsigned char*)mask)[0]; - case 0:; - } - info.GetReturnValue().Set(Nan::True()); - } - - static NAN_METHOD(Mask) - { - Nan::HandleScope scope; - Local buffer_obj = info[0]->ToObject(); - Local mask_obj = info[1]->ToObject(); - unsigned int *mask = (unsigned int*)Buffer::Data(mask_obj); - Local output_obj = info[2]->ToObject(); - unsigned int dataOffset = info[3]->Int32Value(); - unsigned int length = info[4]->Int32Value(); - unsigned int* to = (unsigned int*)(Buffer::Data(output_obj) + dataOffset); - unsigned int* from = (unsigned int*)Buffer::Data(buffer_obj); - unsigned int len32 = length / 4; - unsigned int i; - for (i = 0; i < len32; ++i) *(to + i) = *(from + i) ^ *mask; - to += i; - from += i; - switch (length % 4) { - case 3: *((unsigned char*)to+2) = *((unsigned char*)from+2) ^ *((unsigned char*)mask+2); - case 2: *((unsigned char*)to+1) = *((unsigned char*)from+1) ^ *((unsigned char*)mask+1); - case 1: *((unsigned char*)to ) = *((unsigned char*)from ) ^ *((unsigned char*)mask); - case 0:; - } - info.GetReturnValue().Set(Nan::True()); - } -}; - -#if !NODE_VERSION_AT_LEAST(0,10,0) -extern "C" -#endif -void init (Handle target) -{ - Nan::HandleScope scope; - BufferUtil::Initialize(target); -} - -NODE_MODULE(bufferutil, init) diff --git a/truebit-implementation/node_modules/websocket/src/validation.cc b/truebit-implementation/node_modules/websocket/src/validation.cc deleted file mode 100644 index 8e2347e5..00000000 --- a/truebit-implementation/node_modules/websocket/src/validation.cc +++ /dev/null @@ -1,148 +0,0 @@ -/*! - * UTF-8 Validation Code originally from: - * ws: a node.js websocket client - * Copyright(c) 2015 Einar Otto Stangvik - * MIT Licensed - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "nan.h" - -using namespace v8; -using namespace node; - -#define UNI_SUR_HIGH_START (uint32_t) 0xD800 -#define UNI_SUR_LOW_END (uint32_t) 0xDFFF -#define UNI_REPLACEMENT_CHAR (uint32_t) 0x0000FFFD -#define UNI_MAX_LEGAL_UTF32 (uint32_t) 0x0010FFFF - -static const uint8_t trailingBytesForUTF8[256] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 -}; - -static const uint32_t offsetsFromUTF8[6] = { - 0x00000000, 0x00003080, 0x000E2080, - 0x03C82080, 0xFA082080, 0x82082080 -}; - -static int isLegalUTF8(const uint8_t *source, const int length) -{ - uint8_t a; - const uint8_t *srcptr = source+length; - switch (length) { - default: return 0; - /* Everything else falls through when "true"... */ - /* RFC3629 makes 5 & 6 bytes UTF-8 illegal - case 6: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; - case 5: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; */ - case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; - case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; - case 2: if ((a = (*--srcptr)) > 0xBF) return 0; - switch (*source) { - /* no fall-through in this inner switch */ - case 0xE0: if (a < 0xA0) return 0; break; - case 0xED: if (a > 0x9F) return 0; break; - case 0xF0: if (a < 0x90) return 0; break; - case 0xF4: if (a > 0x8F) return 0; break; - default: if (a < 0x80) return 0; - } - - case 1: if (*source >= 0x80 && *source < 0xC2) return 0; - } - if (*source > 0xF4) return 0; - return 1; -} - -int is_valid_utf8 (size_t len, char *value) -{ - /* is the string valid UTF-8? */ - for (unsigned int i = 0; i < len; i++) { - uint32_t ch = 0; - uint8_t extrabytes = trailingBytesForUTF8[(uint8_t) value[i]]; - - if (extrabytes + i >= len) - return 0; - - if (isLegalUTF8 ((uint8_t *) (value + i), extrabytes + 1) == 0) return 0; - - switch (extrabytes) { - case 5 : ch += (uint8_t) value[i++]; ch <<= 6; - case 4 : ch += (uint8_t) value[i++]; ch <<= 6; - case 3 : ch += (uint8_t) value[i++]; ch <<= 6; - case 2 : ch += (uint8_t) value[i++]; ch <<= 6; - case 1 : ch += (uint8_t) value[i++]; ch <<= 6; - case 0 : ch += (uint8_t) value[i]; - } - - ch -= offsetsFromUTF8[extrabytes]; - - if (ch <= UNI_MAX_LEGAL_UTF32) { - if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) - return 0; - } else { - return 0; - } - } - - return 1; -} - -class Validation : public ObjectWrap -{ -public: - - static void Initialize(v8::Handle target) - { - Nan::HandleScope scope; - Local t = Nan::New(New); - t->InstanceTemplate()->SetInternalFieldCount(1); - Nan::SetMethod(t, "isValidUTF8", Validation::IsValidUTF8); - Nan::Set(target, Nan::New("Validation").ToLocalChecked(), t->GetFunction()); - } - -protected: - - static NAN_METHOD(New) - { - Nan::HandleScope scope; - Validation* validation = new Validation(); - validation->Wrap(info.This()); - info.GetReturnValue().Set(info.This()); - } - - static NAN_METHOD(IsValidUTF8) - { - Nan::HandleScope scope; - if (!Buffer::HasInstance(info[0])) { - return Nan::ThrowTypeError("First argument needs to be a buffer"); - } - Local buffer_obj = info[0]->ToObject(); - char *buffer_data = Buffer::Data(buffer_obj); - size_t buffer_length = Buffer::Length(buffer_obj); - info.GetReturnValue().Set(is_valid_utf8(buffer_length, buffer_data) == 1 ? Nan::True() : Nan::False()); - } -}; -#if !NODE_VERSION_AT_LEAST(0,10,0) -extern "C" -#endif -void init (Handle target) -{ - Nan::HandleScope scope; - Validation::Initialize(target); -} - -NODE_MODULE(validation, init) diff --git a/truebit-implementation/node_modules/websocket/vendor/FastBufferList.js b/truebit-implementation/node_modules/websocket/vendor/FastBufferList.js deleted file mode 100644 index aabf096a..00000000 --- a/truebit-implementation/node_modules/websocket/vendor/FastBufferList.js +++ /dev/null @@ -1,193 +0,0 @@ -// This file was copied from https://github.com/substack/node-bufferlist -// and modified to be able to copy bytes from the bufferlist directly into -// a pre-existing fixed-size buffer without an additional memory allocation. - -// bufferlist.js -// Treat a linked list of buffers as a single variable-size buffer. -var Buffer = require('buffer').Buffer; -var EventEmitter = require('events').EventEmitter; - -module.exports = BufferList; -module.exports.BufferList = BufferList; // backwards compatibility - -function BufferList(opts) { - if (!(this instanceof BufferList)) return new BufferList(opts); - EventEmitter.call(this); - var self = this; - - if (typeof(opts) == 'undefined') opts = {}; - - // default encoding to use for take(). Leaving as 'undefined' - // makes take() return a Buffer instead. - self.encoding = opts.encoding; - - // constructor to use for Buffer-esque operations - self.construct = opts.construct || Buffer; - - var head = { next : null, buffer : null }; - var last = { next : null, buffer : null }; - - // length can get negative when advanced past the end - // and this is the desired behavior - var length = 0; - self.__defineGetter__('length', function () { - return length; - }); - - // keep an offset of the head to decide when to head = head.next - var offset = 0; - - // Write to the bufferlist. Emits 'write'. Always returns true. - self.write = function (buf) { - if (!head.buffer) { - head.buffer = buf; - last = head; - } - else { - last.next = { next : null, buffer : buf }; - last = last.next; - } - length += buf.length; - self.emit('write', buf); - return true; - }; - - self.end = function (buf) { - if (Buffer.isBuffer(buf)) self.write(buf); - }; - - // Push buffers to the end of the linked list. (deprecated) - // Return this (self). - self.push = function () { - var args = [].concat.apply([], arguments); - args.forEach(self.write); - return self; - }; - - // For each buffer, perform some action. - // If fn's result is a true value, cut out early. - // Returns this (self). - self.forEach = function (fn) { - if (!head.buffer) return new self.construct(0); - - if (head.buffer.length - offset <= 0) return self; - var firstBuf = head.buffer.slice(offset); - - var b = { buffer : firstBuf, next : head.next }; - - while (b && b.buffer) { - var r = fn(b.buffer); - if (r) break; - b = b.next; - } - - return self; - }; - - // Create a single Buffer out of all the chunks or some subset specified by - // start and one-past the end (like slice) in bytes. - self.join = function (start, end) { - if (!head.buffer) return new self.construct(0); - if (start == undefined) start = 0; - if (end == undefined) end = self.length; - - var big = new self.construct(end - start); - var ix = 0; - self.forEach(function (buffer) { - if (start < (ix + buffer.length) && ix < end) { - // at least partially contained in the range - buffer.copy( - big, - Math.max(0, ix - start), - Math.max(0, start - ix), - Math.min(buffer.length, end - ix) - ); - } - ix += buffer.length; - if (ix > end) return true; // stop processing past end - }); - - return big; - }; - - self.joinInto = function (targetBuffer, targetStart, sourceStart, sourceEnd) { - if (!head.buffer) return new self.construct(0); - if (sourceStart == undefined) sourceStart = 0; - if (sourceEnd == undefined) sourceEnd = self.length; - - var big = targetBuffer; - if (big.length - targetStart < sourceEnd - sourceStart) { - throw new Error("Insufficient space available in target Buffer."); - } - var ix = 0; - self.forEach(function (buffer) { - if (sourceStart < (ix + buffer.length) && ix < sourceEnd) { - // at least partially contained in the range - buffer.copy( - big, - Math.max(targetStart, targetStart + ix - sourceStart), - Math.max(0, sourceStart - ix), - Math.min(buffer.length, sourceEnd - ix) - ); - } - ix += buffer.length; - if (ix > sourceEnd) return true; // stop processing past end - }); - - return big; - }; - - // Advance the buffer stream by n bytes. - // If n the aggregate advance offset passes the end of the buffer list, - // operations such as .take() will return empty strings until enough data is - // pushed. - // Returns this (self). - self.advance = function (n) { - offset += n; - length -= n; - while (head.buffer && offset >= head.buffer.length) { - offset -= head.buffer.length; - head = head.next - ? head.next - : { buffer : null, next : null } - ; - } - if (head.buffer === null) last = { next : null, buffer : null }; - self.emit('advance', n); - return self; - }; - - // Take n bytes from the start of the buffers. - // Returns a string. - // If there are less than n bytes in all the buffers or n is undefined, - // returns the entire concatenated buffer string. - self.take = function (n, encoding) { - if (n == undefined) n = self.length; - else if (typeof n !== 'number') { - encoding = n; - n = self.length; - } - var b = head; - if (!encoding) encoding = self.encoding; - if (encoding) { - var acc = ''; - self.forEach(function (buffer) { - if (n <= 0) return true; - acc += buffer.toString( - encoding, 0, Math.min(n,buffer.length) - ); - n -= buffer.length; - }); - return acc; - } else { - // If no 'encoding' is specified, then return a Buffer. - return self.join(0, n); - } - }; - - // The entire concatenated buffer as a string. - self.toString = function () { - return self.take('binary'); - }; -} -require('util').inherits(BufferList, EventEmitter); diff --git a/truebit-implementation/node_modules/wrappy/LICENSE b/truebit-implementation/node_modules/wrappy/LICENSE deleted file mode 100644 index 19129e31..00000000 --- a/truebit-implementation/node_modules/wrappy/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/truebit-implementation/node_modules/wrappy/README.md b/truebit-implementation/node_modules/wrappy/README.md deleted file mode 100644 index 98eab252..00000000 --- a/truebit-implementation/node_modules/wrappy/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# wrappy - -Callback wrapping utility - -## USAGE - -```javascript -var wrappy = require("wrappy") - -// var wrapper = wrappy(wrapperFunction) - -// make sure a cb is called only once -// See also: http://npm.im/once for this specific use case -var once = wrappy(function (cb) { - var called = false - return function () { - if (called) return - called = true - return cb.apply(this, arguments) - } -}) - -function printBoo () { - console.log('boo') -} -// has some rando property -printBoo.iAmBooPrinter = true - -var onlyPrintOnce = once(printBoo) - -onlyPrintOnce() // prints 'boo' -onlyPrintOnce() // does nothing - -// random property is retained! -assert.equal(onlyPrintOnce.iAmBooPrinter, true) -``` diff --git a/truebit-implementation/node_modules/wrappy/package.json b/truebit-implementation/node_modules/wrappy/package.json deleted file mode 100644 index 2f1a9512..00000000 --- a/truebit-implementation/node_modules/wrappy/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "wrappy@1", - "_id": "wrappy@1.0.2", - "_inBundle": false, - "_integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "_location": "/wrappy", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "wrappy@1", - "name": "wrappy", - "escapedName": "wrappy", - "rawSpec": "1", - "saveSpec": null, - "fetchSpec": "1" - }, - "_requiredBy": [ - "/inflight", - "/once" - ], - "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", - "_spec": "wrappy@1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/once", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/npm/wrappy/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "Callback wrapping utility", - "devDependencies": { - "tap": "^2.3.1" - }, - "directories": { - "test": "test" - }, - "files": [ - "wrappy.js" - ], - "homepage": "https://github.com/npm/wrappy", - "license": "ISC", - "main": "wrappy.js", - "name": "wrappy", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/wrappy.git" - }, - "scripts": { - "test": "tap --coverage test/*.js" - }, - "version": "1.0.2" -} diff --git a/truebit-implementation/node_modules/wrappy/wrappy.js b/truebit-implementation/node_modules/wrappy/wrappy.js deleted file mode 100644 index bb7e7d6f..00000000 --- a/truebit-implementation/node_modules/wrappy/wrappy.js +++ /dev/null @@ -1,33 +0,0 @@ -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -module.exports = wrappy -function wrappy (fn, cb) { - if (fn && cb) return wrappy(fn)(cb) - - if (typeof fn !== 'function') - throw new TypeError('need wrapper function') - - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k] - }) - - return wrapper - - function wrapper() { - var args = new Array(arguments.length) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - var ret = fn.apply(this, args) - var cb = args[args.length-1] - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k] - }) - } - return ret - } -} diff --git a/truebit-implementation/node_modules/ws/LICENSE b/truebit-implementation/node_modules/ws/LICENSE deleted file mode 100644 index a145cd1d..00000000 --- a/truebit-implementation/node_modules/ws/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011 Einar Otto Stangvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/ws/README.md b/truebit-implementation/node_modules/ws/README.md deleted file mode 100644 index e2cc3bd3..00000000 --- a/truebit-implementation/node_modules/ws/README.md +++ /dev/null @@ -1,341 +0,0 @@ -# ws: a Node.js WebSocket library - -[![Version npm](https://img.shields.io/npm/v/ws.svg)](https://www.npmjs.com/package/ws) -[![Linux Build](https://img.shields.io/travis/websockets/ws/master.svg)](https://travis-ci.org/websockets/ws) -[![Windows Build](https://ci.appveyor.com/api/projects/status/github/websockets/ws?branch=master&svg=true)](https://ci.appveyor.com/project/lpinca/ws) -[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg)](https://coveralls.io/r/websockets/ws?branch=master) - -ws is a simple to use, blazing fast, and thoroughly tested WebSocket client -and server implementation. - -Passes the quite extensive Autobahn test suite: [server][server-report], -[client][client-report]. - -**Note**: This module does not work in the browser. The client in the docs is a -reference to a back end with the role of a client in the WebSocket -communication. Browser clients must use the native -[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) object. - -## Table of Contents - -* [Protocol support](#protocol-support) -* [Installing](#installing) - + [Opt-in for performance and spec compliance](#opt-in-for-performance-and-spec-compliance) -* [API docs](#api-docs) -* [WebSocket compression](#websocket-compression) -* [Usage examples](#usage-examples) - + [Sending and receiving text data](#sending-and-receiving-text-data) - + [Sending binary data](#sending-binary-data) - + [Server example](#server-example) - + [Broadcast example](#broadcast-example) - + [ExpressJS example](#expressjs-example) - + [echo.websocket.org demo](#echowebsocketorg-demo) - + [Other examples](#other-examples) -* [Error handling best practices](#error-handling-best-practices) -* [FAQ](#faq) - + [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client) - + [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections) - + [How to connect via a proxy?](#how-to-connect-via-a-proxy) -* [Changelog](#changelog) -* [License](#license) - -## Protocol support - -* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) -* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`) - -## Installing - -``` -npm install --save ws -``` - -### Opt-in for performance and spec compliance - -There are 2 optional modules that can be installed along side with the ws -module. These modules are binary addons which improve certain operations. -Prebuilt binaries are available for the most popular platforms so you don't -necessarily need to have a C++ compiler installed on your machine. - -- `npm install --save-optional bufferutil`: Allows to efficiently perform - operations such as masking and unmasking the data payload of the WebSocket - frames. -- `npm install --save-optional utf-8-validate`: Allows to efficiently check - if a message contains valid UTF-8 as required by the spec. - -## API docs - -See [`/doc/ws.md`](./doc/ws.md) for Node.js-like docs for the ws classes. - -## WebSocket compression - -ws supports the [permessage-deflate extension][permessage-deflate] which -enables the client and server to negotiate a compression algorithm and its -parameters, and then selectively apply it to the data payloads of each -WebSocket message. - -The extension is disabled by default on the server and enabled by default on -the client. It adds a significant overhead in terms of performance and memory -consumption so we suggest to enable it only if it is really needed. - -The client will only use the extension if it is supported and enabled on the -server. To always disable the extension on the client set the -`perMessageDeflate` option to `false`. - -```js -const WebSocket = require('ws'); - -const ws = new WebSocket('ws://www.host.com/path', { - perMessageDeflate: false -}); -``` - -## Usage examples - -### Sending and receiving text data - -```js -const WebSocket = require('ws'); - -const ws = new WebSocket('ws://www.host.com/path'); - -ws.on('open', function open() { - ws.send('something'); -}); - -ws.on('message', function incoming(data) { - console.log(data); -}); -``` - -### Sending binary data - -```js -const WebSocket = require('ws'); - -const ws = new WebSocket('ws://www.host.com/path'); - -ws.on('open', function open() { - const array = new Float32Array(5); - - for (var i = 0; i < array.length; ++i) { - array[i] = i / 2; - } - - ws.send(array); -}); -``` - -### Server example - -```js -const WebSocket = require('ws'); - -const wss = new WebSocket.Server({ port: 8080 }); - -wss.on('connection', function connection(ws) { - ws.on('message', function incoming(message) { - console.log('received: %s', message); - }); - - ws.send('something'); -}); -``` - -### Broadcast example - -```js -const WebSocket = require('ws'); - -const wss = new WebSocket.Server({ port: 8080 }); - -// Broadcast to all. -wss.broadcast = function broadcast(data) { - wss.clients.forEach(function each(client) { - if (client.readyState === WebSocket.OPEN) { - client.send(data); - } - }); -}; - -wss.on('connection', function connection(ws) { - ws.on('message', function incoming(data) { - // Broadcast to everyone else. - wss.clients.forEach(function each(client) { - if (client !== ws && client.readyState === WebSocket.OPEN) { - client.send(data); - } - }); - }); -}); -``` - -### ExpressJS example - -```js -const express = require('express'); -const http = require('http'); -const url = require('url'); -const WebSocket = require('ws'); - -const app = express(); - -app.use(function (req, res) { - res.send({ msg: "hello" }); -}); - -const server = http.createServer(app); -const wss = new WebSocket.Server({ server }); - -wss.on('connection', function connection(ws, req) { - const location = url.parse(req.url, true); - // You might use location.query.access_token to authenticate or share sessions - // or req.headers.cookie (see http://stackoverflow.com/a/16395220/151312) - - ws.on('message', function incoming(message) { - console.log('received: %s', message); - }); - - ws.send('something'); -}); - -server.listen(8080, function listening() { - console.log('Listening on %d', server.address().port); -}); -``` - -### echo.websocket.org demo - -```js -const WebSocket = require('ws'); - -const ws = new WebSocket('wss://echo.websocket.org/', { - origin: 'https://websocket.org' -}); - -ws.on('open', function open() { - console.log('connected'); - ws.send(Date.now()); -}); - -ws.on('close', function close() { - console.log('disconnected'); -}); - -ws.on('message', function incoming(data) { - console.log(`Roundtrip time: ${Date.now() - data} ms`); - - setTimeout(function timeout() { - ws.send(Date.now()); - }, 500); -}); -``` - -### Other examples - -For a full example with a browser client communicating with a ws server, see the -examples folder. - -Otherwise, see the test cases. - -## Error handling best practices - -```js -// If the WebSocket is closed before the following send is attempted -ws.send('something'); - -// Errors (both immediate and async write errors) can be detected in an optional -// callback. The callback is also the only way of being notified that data has -// actually been sent. -ws.send('something', function ack(error) { - // If error is not defined, the send has been completed, otherwise the error - // object will indicate what failed. -}); - -// Immediate errors can also be handled with `try...catch`, but **note** that -// since sends are inherently asynchronous, socket write failures will *not* be -// captured when this technique is used. -try { ws.send('something'); } -catch (e) { /* handle error */ } -``` - -## FAQ - -### How to get the IP address of the client? - -The remote IP address can be obtained from the raw socket. - -```js -const WebSocket = require('ws'); - -const wss = new WebSocket.Server({ port: 8080 }); - -wss.on('connection', function connection(ws, req) { - const ip = req.connection.remoteAddress; -}); -``` - -When the server runs behind a proxy like NGINX, the de-facto standard is to use -the `X-Forwarded-For` header. - -```js -wss.on('connection', function connection(ws, req) { - const ip = req.headers['x-forwarded-for']; -}); -``` - -### How to detect and close broken connections? - -Sometimes the link between the server and the client can be interrupted in a -way that keeps both the server and the client unaware of the broken state of the -connection (e.g. when pulling the cord). - -In these cases ping messages can be used as a means to verify that the remote -endpoint is still responsive. - -```js -const WebSocket = require('ws'); - -const wss = new WebSocket.Server({ port: 8080 }); - -function heartbeat() { - this.isAlive = true; -} - -wss.on('connection', function connection(ws) { - ws.isAlive = true; - ws.on('pong', heartbeat); -}); - -const interval = setInterval(function ping() { - wss.clients.forEach(function each(ws) { - if (ws.isAlive === false) return ws.terminate(); - - ws.isAlive = false; - ws.ping('', false, true); - }); -}, 30000); -``` - -Pong messages are automatically sent in response to ping messages as required -by the spec. - -### How to connect via a proxy? - -Use a custom `http.Agent` implementation like [https-proxy-agent][] or -[socks-proxy-agent][]. - -## Changelog - -We're using the GitHub [releases][changelog] for changelog entries. - -## License - -[MIT](LICENSE) - -[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent -[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent -[client-report]: http://websockets.github.io/ws/autobahn/clients/ -[server-report]: http://websockets.github.io/ws/autobahn/servers/ -[permessage-deflate]: https://tools.ietf.org/html/rfc7692 -[changelog]: https://github.com/websockets/ws/releases diff --git a/truebit-implementation/node_modules/ws/index.js b/truebit-implementation/node_modules/ws/index.js deleted file mode 100644 index 489e1694..00000000 --- a/truebit-implementation/node_modules/ws/index.js +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -const WebSocket = require('./lib/WebSocket'); - -WebSocket.Server = require('./lib/WebSocketServer'); -WebSocket.Receiver = require('./lib/Receiver'); -WebSocket.Sender = require('./lib/Sender'); - -module.exports = WebSocket; diff --git a/truebit-implementation/node_modules/ws/lib/BufferUtil.js b/truebit-implementation/node_modules/ws/lib/BufferUtil.js deleted file mode 100644 index 6a35e8f4..00000000 --- a/truebit-implementation/node_modules/ws/lib/BufferUtil.js +++ /dev/null @@ -1,71 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -const safeBuffer = require('safe-buffer'); - -const Buffer = safeBuffer.Buffer; - -/** - * Merges an array of buffers into a new buffer. - * - * @param {Buffer[]} list The array of buffers to concat - * @param {Number} totalLength The total length of buffers in the list - * @return {Buffer} The resulting buffer - * @public - */ -const concat = (list, totalLength) => { - const target = Buffer.allocUnsafe(totalLength); - var offset = 0; - - for (var i = 0; i < list.length; i++) { - const buf = list[i]; - buf.copy(target, offset); - offset += buf.length; - } - - return target; -}; - -try { - const bufferUtil = require('bufferutil'); - - module.exports = Object.assign({ concat }, bufferUtil.BufferUtil || bufferUtil); -} catch (e) /* istanbul ignore next */ { - /** - * Masks a buffer using the given mask. - * - * @param {Buffer} source The buffer to mask - * @param {Buffer} mask The mask to use - * @param {Buffer} output The buffer where to store the result - * @param {Number} offset The offset at which to start writing - * @param {Number} length The number of bytes to mask. - * @public - */ - const mask = (source, mask, output, offset, length) => { - for (var i = 0; i < length; i++) { - output[offset + i] = source[i] ^ mask[i & 3]; - } - }; - - /** - * Unmasks a buffer using the given mask. - * - * @param {Buffer} buffer The buffer to unmask - * @param {Buffer} mask The mask to use - * @public - */ - const unmask = (buffer, mask) => { - // Required until https://github.com/nodejs/node/issues/9006 is resolved. - const length = buffer.length; - for (var i = 0; i < length; i++) { - buffer[i] ^= mask[i & 3]; - } - }; - - module.exports = { concat, mask, unmask }; -} diff --git a/truebit-implementation/node_modules/ws/lib/Constants.js b/truebit-implementation/node_modules/ws/lib/Constants.js deleted file mode 100644 index 39044146..00000000 --- a/truebit-implementation/node_modules/ws/lib/Constants.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -const safeBuffer = require('safe-buffer'); - -const Buffer = safeBuffer.Buffer; - -exports.BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments']; -exports.GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; -exports.EMPTY_BUFFER = Buffer.alloc(0); -exports.NOOP = () => {}; diff --git a/truebit-implementation/node_modules/ws/lib/ErrorCodes.js b/truebit-implementation/node_modules/ws/lib/ErrorCodes.js deleted file mode 100644 index f5155716..00000000 --- a/truebit-implementation/node_modules/ws/lib/ErrorCodes.js +++ /dev/null @@ -1,28 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -module.exports = { - isValidErrorCode: function (code) { - return (code >= 1000 && code <= 1013 && code !== 1004 && code !== 1005 && code !== 1006) || - (code >= 3000 && code <= 4999); - }, - 1000: 'normal', - 1001: 'going away', - 1002: 'protocol error', - 1003: 'unsupported data', - 1004: 'reserved', - 1005: 'reserved for extensions', - 1006: 'reserved for extensions', - 1007: 'inconsistent or invalid data', - 1008: 'policy violation', - 1009: 'message too big', - 1010: 'extension handshake missing', - 1011: 'an unexpected condition prevented the request from being fulfilled', - 1012: 'service restart', - 1013: 'try again later' -}; diff --git a/truebit-implementation/node_modules/ws/lib/EventTarget.js b/truebit-implementation/node_modules/ws/lib/EventTarget.js deleted file mode 100644 index c48137b9..00000000 --- a/truebit-implementation/node_modules/ws/lib/EventTarget.js +++ /dev/null @@ -1,151 +0,0 @@ -'use strict'; - -/** - * Class representing an event. - * - * @private - */ -class Event { - /** - * Create a new `Event`. - * - * @param {String} type The name of the event - * @param {Object} target A reference to the target to which the event was dispatched - */ - constructor (type, target) { - this.target = target; - this.type = type; - } -} - -/** - * Class representing a message event. - * - * @extends Event - * @private - */ -class MessageEvent extends Event { - /** - * Create a new `MessageEvent`. - * - * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data - * @param {WebSocket} target A reference to the target to which the event was dispatched - */ - constructor (data, target) { - super('message', target); - - this.data = data; - } -} - -/** - * Class representing a close event. - * - * @extends Event - * @private - */ -class CloseEvent extends Event { - /** - * Create a new `CloseEvent`. - * - * @param {Number} code The status code explaining why the connection is being closed - * @param {String} reason A human-readable string explaining why the connection is closing - * @param {WebSocket} target A reference to the target to which the event was dispatched - */ - constructor (code, reason, target) { - super('close', target); - - this.wasClean = target._closeFrameReceived && target._closeFrameSent; - this.reason = reason; - this.code = code; - } -} - -/** - * Class representing an open event. - * - * @extends Event - * @private - */ -class OpenEvent extends Event { - /** - * Create a new `OpenEvent`. - * - * @param {WebSocket} target A reference to the target to which the event was dispatched - */ - constructor (target) { - super('open', target); - } -} - -/** - * This provides methods for emulating the `EventTarget` interface. It's not - * meant to be used directly. - * - * @mixin - */ -const EventTarget = { - /** - * Register an event listener. - * - * @param {String} method A string representing the event type to listen for - * @param {Function} listener The listener to add - * @public - */ - addEventListener (method, listener) { - if (typeof listener !== 'function') return; - - function onMessage (data) { - listener.call(this, new MessageEvent(data, this)); - } - - function onClose (code, message) { - listener.call(this, new CloseEvent(code, message, this)); - } - - function onError (event) { - event.type = 'error'; - event.target = this; - listener.call(this, event); - } - - function onOpen () { - listener.call(this, new OpenEvent(this)); - } - - if (method === 'message') { - onMessage._listener = listener; - this.on(method, onMessage); - } else if (method === 'close') { - onClose._listener = listener; - this.on(method, onClose); - } else if (method === 'error') { - onError._listener = listener; - this.on(method, onError); - } else if (method === 'open') { - onOpen._listener = listener; - this.on(method, onOpen); - } else { - this.on(method, listener); - } - }, - - /** - * Remove an event listener. - * - * @param {String} method A string representing the event type to remove - * @param {Function} listener The listener to remove - * @public - */ - removeEventListener (method, listener) { - const listeners = this.listeners(method); - - for (var i = 0; i < listeners.length; i++) { - if (listeners[i] === listener || listeners[i]._listener === listener) { - this.removeListener(method, listeners[i]); - } - } - } -}; - -module.exports = EventTarget; diff --git a/truebit-implementation/node_modules/ws/lib/Extensions.js b/truebit-implementation/node_modules/ws/lib/Extensions.js deleted file mode 100644 index 15fee121..00000000 --- a/truebit-implementation/node_modules/ws/lib/Extensions.js +++ /dev/null @@ -1,203 +0,0 @@ -'use strict'; - -// -// Allowed token characters: -// -// '!', '#', '$', '%', '&', ''', '*', '+', '-', -// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~' -// -// tokenChars[32] === 0 // ' ' -// tokenChars[33] === 1 // '!' -// tokenChars[34] === 0 // '"' -// ... -// -const tokenChars = [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31 - 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63 - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127 -]; - -/** - * Adds an offer to the map of extension offers or a parameter to the map of - * parameters. - * - * @param {Object} dest The map of extension offers or parameters - * @param {String} name The extension or parameter name - * @param {(Object|Boolean|String)} elem The extension parameters or the - * parameter value - * @private - */ -function push (dest, name, elem) { - if (Object.prototype.hasOwnProperty.call(dest, name)) dest[name].push(elem); - else dest[name] = [elem]; -} - -/** - * Parses the `Sec-WebSocket-Extensions` header into an object. - * - * @param {String} header The field value of the header - * @return {Object} The parsed object - * @public - */ -function parse (header) { - const offers = {}; - - if (header === undefined || header === '') return offers; - - var params = {}; - var mustUnescape = false; - var isEscaping = false; - var inQuotes = false; - var extensionName; - var paramName; - var start = -1; - var end = -1; - - for (var i = 0; i < header.length; i++) { - const code = header.charCodeAt(i); - - if (extensionName === undefined) { - if (end === -1 && tokenChars[code] === 1) { - if (start === -1) start = i; - } else if (code === 0x20/* ' ' */|| code === 0x09/* '\t' */) { - if (end === -1 && start !== -1) end = i; - } else if (code === 0x3b/* ';' */ || code === 0x2c/* ',' */) { - if (start === -1) throw new Error(`unexpected character at index ${i}`); - - if (end === -1) end = i; - const name = header.slice(start, end); - if (code === 0x2c) { - push(offers, name, params); - params = {}; - } else { - extensionName = name; - } - - start = end = -1; - } else { - throw new Error(`unexpected character at index ${i}`); - } - } else if (paramName === undefined) { - if (end === -1 && tokenChars[code] === 1) { - if (start === -1) start = i; - } else if (code === 0x20 || code === 0x09) { - if (end === -1 && start !== -1) end = i; - } else if (code === 0x3b || code === 0x2c) { - if (start === -1) throw new Error(`unexpected character at index ${i}`); - - if (end === -1) end = i; - push(params, header.slice(start, end), true); - if (code === 0x2c) { - push(offers, extensionName, params); - params = {}; - extensionName = undefined; - } - - start = end = -1; - } else if (code === 0x3d/* '=' */&& start !== -1 && end === -1) { - paramName = header.slice(start, i); - start = end = -1; - } else { - throw new Error(`unexpected character at index ${i}`); - } - } else { - // - // The value of a quoted-string after unescaping must conform to the - // token ABNF, so only token characters are valid. - // Ref: https://tools.ietf.org/html/rfc6455#section-9.1 - // - if (isEscaping) { - if (tokenChars[code] !== 1) { - throw new Error(`unexpected character at index ${i}`); - } - if (start === -1) start = i; - else if (!mustUnescape) mustUnescape = true; - isEscaping = false; - } else if (inQuotes) { - if (tokenChars[code] === 1) { - if (start === -1) start = i; - } else if (code === 0x22/* '"' */ && start !== -1) { - inQuotes = false; - end = i; - } else if (code === 0x5c/* '\' */) { - isEscaping = true; - } else { - throw new Error(`unexpected character at index ${i}`); - } - } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) { - inQuotes = true; - } else if (end === -1 && tokenChars[code] === 1) { - if (start === -1) start = i; - } else if (start !== -1 && (code === 0x20 || code === 0x09)) { - if (end === -1) end = i; - } else if (code === 0x3b || code === 0x2c) { - if (start === -1) throw new Error(`unexpected character at index ${i}`); - - if (end === -1) end = i; - var value = header.slice(start, end); - if (mustUnescape) { - value = value.replace(/\\/g, ''); - mustUnescape = false; - } - push(params, paramName, value); - if (code === 0x2c) { - push(offers, extensionName, params); - params = {}; - extensionName = undefined; - } - - paramName = undefined; - start = end = -1; - } else { - throw new Error(`unexpected character at index ${i}`); - } - } - } - - if (start === -1 || inQuotes) throw new Error('unexpected end of input'); - - if (end === -1) end = i; - const token = header.slice(start, end); - if (extensionName === undefined) { - push(offers, token, {}); - } else { - if (paramName === undefined) { - push(params, token, true); - } else if (mustUnescape) { - push(params, paramName, token.replace(/\\/g, '')); - } else { - push(params, paramName, token); - } - push(offers, extensionName, params); - } - - return offers; -} - -/** - * Serializes a parsed `Sec-WebSocket-Extensions` header to a string. - * - * @param {Object} value The object to format - * @return {String} A string representing the given value - * @public - */ -function format (value) { - return Object.keys(value).map((token) => { - var paramsList = value[token]; - if (!Array.isArray(paramsList)) paramsList = [paramsList]; - return paramsList.map((params) => { - return [token].concat(Object.keys(params).map((k) => { - var p = params[k]; - if (!Array.isArray(p)) p = [p]; - return p.map((v) => v === true ? k : `${k}=${v}`).join('; '); - })).join('; '); - }).join(', '); - }).join(', '); -} - -module.exports = { format, parse }; diff --git a/truebit-implementation/node_modules/ws/lib/PerMessageDeflate.js b/truebit-implementation/node_modules/ws/lib/PerMessageDeflate.js deleted file mode 100644 index 6ed12a7b..00000000 --- a/truebit-implementation/node_modules/ws/lib/PerMessageDeflate.js +++ /dev/null @@ -1,507 +0,0 @@ -'use strict'; - -const safeBuffer = require('safe-buffer'); -const Limiter = require('async-limiter'); -const zlib = require('zlib'); - -const bufferUtil = require('./BufferUtil'); - -const Buffer = safeBuffer.Buffer; - -const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]); -const EMPTY_BLOCK = Buffer.from([0x00]); - -const kWriteInProgress = Symbol('write-in-progress'); -const kPendingClose = Symbol('pending-close'); -const kTotalLength = Symbol('total-length'); -const kCallback = Symbol('callback'); -const kBuffers = Symbol('buffers'); -const kError = Symbol('error'); -const kOwner = Symbol('owner'); - -// -// We limit zlib concurrency, which prevents severe memory fragmentation -// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913 -// and https://github.com/websockets/ws/issues/1202 -// -// Intentionally global; it's the global thread pool that's an issue. -// -let zlibLimiter; - -/** - * permessage-deflate implementation. - */ -class PerMessageDeflate { - /** - * Creates a PerMessageDeflate instance. - * - * @param {Object} options Configuration options - * @param {Boolean} options.serverNoContextTakeover Request/accept disabling - * of server context takeover - * @param {Boolean} options.clientNoContextTakeover Advertise/acknowledge - * disabling of client context takeover - * @param {(Boolean|Number)} options.serverMaxWindowBits Request/confirm the - * use of a custom server window size - * @param {(Boolean|Number)} options.clientMaxWindowBits Advertise support - * for, or request, a custom client window size - * @param {Number} options.level The value of zlib's `level` param - * @param {Number} options.memLevel The value of zlib's `memLevel` param - * @param {Number} options.threshold Size (in bytes) below which messages - * should not be compressed - * @param {Number} options.concurrencyLimit The number of concurrent calls to - * zlib - * @param {Boolean} isServer Create the instance in either server or client - * mode - * @param {Number} maxPayload The maximum allowed message length - */ - constructor (options, isServer, maxPayload) { - this._maxPayload = maxPayload | 0; - this._options = options || {}; - this._threshold = this._options.threshold !== undefined - ? this._options.threshold - : 1024; - this._isServer = !!isServer; - this._deflate = null; - this._inflate = null; - - this.params = null; - - if (!zlibLimiter) { - const concurrency = this._options.concurrencyLimit !== undefined - ? this._options.concurrencyLimit - : 10; - zlibLimiter = new Limiter({ concurrency }); - } - } - - /** - * @type {String} - */ - static get extensionName () { - return 'permessage-deflate'; - } - - /** - * Create extension parameters offer. - * - * @return {Object} Extension parameters - * @public - */ - offer () { - const params = {}; - - if (this._options.serverNoContextTakeover) { - params.server_no_context_takeover = true; - } - if (this._options.clientNoContextTakeover) { - params.client_no_context_takeover = true; - } - if (this._options.serverMaxWindowBits) { - params.server_max_window_bits = this._options.serverMaxWindowBits; - } - if (this._options.clientMaxWindowBits) { - params.client_max_window_bits = this._options.clientMaxWindowBits; - } else if (this._options.clientMaxWindowBits == null) { - params.client_max_window_bits = true; - } - - return params; - } - - /** - * Accept extension offer. - * - * @param {Array} paramsList Extension parameters - * @return {Object} Accepted configuration - * @public - */ - accept (paramsList) { - paramsList = this.normalizeParams(paramsList); - - var params; - if (this._isServer) { - params = this.acceptAsServer(paramsList); - } else { - params = this.acceptAsClient(paramsList); - } - - this.params = params; - return params; - } - - /** - * Releases all resources used by the extension. - * - * @public - */ - cleanup () { - if (this._inflate) { - if (this._inflate[kWriteInProgress]) { - this._inflate[kPendingClose] = true; - } else { - this._inflate.close(); - this._inflate = null; - } - } - if (this._deflate) { - if (this._deflate[kWriteInProgress]) { - this._deflate[kPendingClose] = true; - } else { - this._deflate.close(); - this._deflate = null; - } - } - } - - /** - * Accept extension offer from client. - * - * @param {Array} paramsList Extension parameters - * @return {Object} Accepted configuration - * @private - */ - acceptAsServer (paramsList) { - const accepted = {}; - const result = paramsList.some((params) => { - if ( - (this._options.serverNoContextTakeover === false && - params.server_no_context_takeover) || - (this._options.serverMaxWindowBits === false && - params.server_max_window_bits) || - (typeof this._options.serverMaxWindowBits === 'number' && - typeof params.server_max_window_bits === 'number' && - this._options.serverMaxWindowBits > params.server_max_window_bits) || - (typeof this._options.clientMaxWindowBits === 'number' && - !params.client_max_window_bits) - ) { - return; - } - - if ( - this._options.serverNoContextTakeover || - params.server_no_context_takeover - ) { - accepted.server_no_context_takeover = true; - } - if ( - this._options.clientNoContextTakeover || - (this._options.clientNoContextTakeover !== false && - params.client_no_context_takeover) - ) { - accepted.client_no_context_takeover = true; - } - if (typeof this._options.serverMaxWindowBits === 'number') { - accepted.server_max_window_bits = this._options.serverMaxWindowBits; - } else if (typeof params.server_max_window_bits === 'number') { - accepted.server_max_window_bits = params.server_max_window_bits; - } - if (typeof this._options.clientMaxWindowBits === 'number') { - accepted.client_max_window_bits = this._options.clientMaxWindowBits; - } else if ( - this._options.clientMaxWindowBits !== false && - typeof params.client_max_window_bits === 'number' - ) { - accepted.client_max_window_bits = params.client_max_window_bits; - } - return true; - }); - - if (!result) throw new Error("Doesn't support the offered configuration"); - - return accepted; - } - - /** - * Accept extension response from server. - * - * @param {Array} paramsList Extension parameters - * @return {Object} Accepted configuration - * @private - */ - acceptAsClient (paramsList) { - const params = paramsList[0]; - - if ( - this._options.clientNoContextTakeover === false && - params.client_no_context_takeover - ) { - throw new Error('Invalid value for "client_no_context_takeover"'); - } - - if ( - (typeof this._options.clientMaxWindowBits === 'number' && - (!params.client_max_window_bits || - params.client_max_window_bits > this._options.clientMaxWindowBits)) || - (this._options.clientMaxWindowBits === false && - params.client_max_window_bits) - ) { - throw new Error('Invalid value for "client_max_window_bits"'); - } - - return params; - } - - /** - * Normalize extensions parameters. - * - * @param {Array} paramsList Extension parameters - * @return {Array} Normalized extensions parameters - * @private - */ - normalizeParams (paramsList) { - return paramsList.map((params) => { - Object.keys(params).forEach((key) => { - var value = params[key]; - if (value.length > 1) { - throw new Error(`Multiple extension parameters for ${key}`); - } - - value = value[0]; - - switch (key) { - case 'server_no_context_takeover': - case 'client_no_context_takeover': - if (value !== true) { - throw new Error(`invalid extension parameter value for ${key} (${value})`); - } - params[key] = true; - break; - case 'server_max_window_bits': - case 'client_max_window_bits': - if (typeof value === 'string') { - value = parseInt(value, 10); - if ( - Number.isNaN(value) || - value < zlib.Z_MIN_WINDOWBITS || - value > zlib.Z_MAX_WINDOWBITS - ) { - throw new Error(`invalid extension parameter value for ${key} (${value})`); - } - } - if (!this._isServer && value === true) { - throw new Error(`Missing extension parameter value for ${key}`); - } - params[key] = value; - break; - default: - throw new Error(`Not defined extension parameter (${key})`); - } - }); - return params; - }); - } - - /** - * Decompress data. Concurrency limited by async-limiter. - * - * @param {Buffer} data Compressed data - * @param {Boolean} fin Specifies whether or not this is the last fragment - * @param {Function} callback Callback - * @public - */ - decompress (data, fin, callback) { - zlibLimiter.push((done) => { - this._decompress(data, fin, (err, result) => { - done(); - callback(err, result); - }); - }); - } - - /** - * Compress data. Concurrency limited by async-limiter. - * - * @param {Buffer} data Data to compress - * @param {Boolean} fin Specifies whether or not this is the last fragment - * @param {Function} callback Callback - * @public - */ - compress (data, fin, callback) { - zlibLimiter.push((done) => { - this._compress(data, fin, (err, result) => { - done(); - callback(err, result); - }); - }); - } - - /** - * Decompress data. - * - * @param {Buffer} data Compressed data - * @param {Boolean} fin Specifies whether or not this is the last fragment - * @param {Function} callback Callback - * @private - */ - _decompress (data, fin, callback) { - const endpoint = this._isServer ? 'client' : 'server'; - - if (!this._inflate) { - const key = `${endpoint}_max_window_bits`; - const windowBits = typeof this.params[key] !== 'number' - ? zlib.Z_DEFAULT_WINDOWBITS - : this.params[key]; - - this._inflate = zlib.createInflateRaw({ windowBits }); - this._inflate[kTotalLength] = 0; - this._inflate[kBuffers] = []; - this._inflate[kOwner] = this; - this._inflate.on('error', inflateOnError); - this._inflate.on('data', inflateOnData); - } - - this._inflate[kCallback] = callback; - this._inflate[kWriteInProgress] = true; - - this._inflate.write(data); - if (fin) this._inflate.write(TRAILER); - - this._inflate.flush(() => { - const err = this._inflate[kError]; - - if (err) { - this._inflate.close(); - this._inflate = null; - callback(err); - return; - } - - const data = bufferUtil.concat( - this._inflate[kBuffers], - this._inflate[kTotalLength] - ); - - if ( - (fin && this.params[`${endpoint}_no_context_takeover`]) || - this._inflate[kPendingClose] - ) { - this._inflate.close(); - this._inflate = null; - } else { - this._inflate[kWriteInProgress] = false; - this._inflate[kTotalLength] = 0; - this._inflate[kBuffers] = []; - } - - callback(null, data); - }); - } - - /** - * Compress data. - * - * @param {Buffer} data Data to compress - * @param {Boolean} fin Specifies whether or not this is the last fragment - * @param {Function} callback Callback - * @private - */ - _compress (data, fin, callback) { - if (!data || data.length === 0) { - process.nextTick(callback, null, EMPTY_BLOCK); - return; - } - - const endpoint = this._isServer ? 'server' : 'client'; - - if (!this._deflate) { - const key = `${endpoint}_max_window_bits`; - const windowBits = typeof this.params[key] !== 'number' - ? zlib.Z_DEFAULT_WINDOWBITS - : this.params[key]; - - this._deflate = zlib.createDeflateRaw({ - memLevel: this._options.memLevel, - level: this._options.level, - flush: zlib.Z_SYNC_FLUSH, - windowBits - }); - - this._deflate[kTotalLength] = 0; - this._deflate[kBuffers] = []; - - // - // `zlib.DeflateRaw` emits an `'error'` event only when an attempt to use - // it is made after it has already been closed. This cannot happen here, - // so we only add a listener for the `'data'` event. - // - this._deflate.on('data', deflateOnData); - } - - this._deflate[kWriteInProgress] = true; - - this._deflate.write(data); - this._deflate.flush(zlib.Z_SYNC_FLUSH, () => { - var data = bufferUtil.concat( - this._deflate[kBuffers], - this._deflate[kTotalLength] - ); - - if (fin) data = data.slice(0, data.length - 4); - - if ( - (fin && this.params[`${endpoint}_no_context_takeover`]) || - this._deflate[kPendingClose] - ) { - this._deflate.close(); - this._deflate = null; - } else { - this._deflate[kWriteInProgress] = false; - this._deflate[kTotalLength] = 0; - this._deflate[kBuffers] = []; - } - - callback(null, data); - }); - } -} - -module.exports = PerMessageDeflate; - -/** - * The listener of the `zlib.DeflateRaw` stream `'data'` event. - * - * @param {Buffer} chunk A chunk of data - * @private - */ -function deflateOnData (chunk) { - this[kBuffers].push(chunk); - this[kTotalLength] += chunk.length; -} - -/** - * The listener of the `zlib.InflateRaw` stream `'data'` event. - * - * @param {Buffer} chunk A chunk of data - * @private - */ -function inflateOnData (chunk) { - this[kTotalLength] += chunk.length; - - if ( - this[kOwner]._maxPayload < 1 || - this[kTotalLength] <= this[kOwner]._maxPayload - ) { - this[kBuffers].push(chunk); - return; - } - - this[kError] = new Error('max payload size exceeded'); - this[kError].closeCode = 1009; - this.removeListener('data', inflateOnData); - this.reset(); -} - -/** - * The listener of the `zlib.InflateRaw` stream `'error'` event. - * - * @param {Error} err The emitted error - * @private - */ -function inflateOnError (err) { - // - // There is no need to call `Zlib#close()` as the handle is automatically - // closed when an error is emitted. - // - this[kOwner]._inflate = null; - this[kCallback](err); -} diff --git a/truebit-implementation/node_modules/ws/lib/Receiver.js b/truebit-implementation/node_modules/ws/lib/Receiver.js deleted file mode 100644 index 91196706..00000000 --- a/truebit-implementation/node_modules/ws/lib/Receiver.js +++ /dev/null @@ -1,553 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -const safeBuffer = require('safe-buffer'); - -const PerMessageDeflate = require('./PerMessageDeflate'); -const isValidUTF8 = require('./Validation'); -const bufferUtil = require('./BufferUtil'); -const ErrorCodes = require('./ErrorCodes'); -const constants = require('./Constants'); - -const Buffer = safeBuffer.Buffer; - -const GET_INFO = 0; -const GET_PAYLOAD_LENGTH_16 = 1; -const GET_PAYLOAD_LENGTH_64 = 2; -const GET_MASK = 3; -const GET_DATA = 4; -const INFLATING = 5; - -/** - * HyBi Receiver implementation. - */ -class Receiver { - /** - * Creates a Receiver instance. - * - * @param {Object} extensions An object containing the negotiated extensions - * @param {Number} maxPayload The maximum allowed message length - * @param {String} binaryType The type for binary data - */ - constructor (extensions, maxPayload, binaryType) { - this._binaryType = binaryType || constants.BINARY_TYPES[0]; - this._extensions = extensions || {}; - this._maxPayload = maxPayload | 0; - - this._bufferedBytes = 0; - this._buffers = []; - - this._compressed = false; - this._payloadLength = 0; - this._fragmented = 0; - this._masked = false; - this._fin = false; - this._mask = null; - this._opcode = 0; - - this._totalPayloadLength = 0; - this._messageLength = 0; - this._fragments = []; - - this._cleanupCallback = null; - this._hadError = false; - this._dead = false; - this._loop = false; - - this.onmessage = null; - this.onclose = null; - this.onerror = null; - this.onping = null; - this.onpong = null; - - this._state = GET_INFO; - } - - /** - * Consumes bytes from the available buffered data. - * - * @param {Number} bytes The number of bytes to consume - * @return {Buffer} Consumed bytes - * @private - */ - readBuffer (bytes) { - var offset = 0; - var dst; - var l; - - this._bufferedBytes -= bytes; - - if (bytes === this._buffers[0].length) return this._buffers.shift(); - - if (bytes < this._buffers[0].length) { - dst = this._buffers[0].slice(0, bytes); - this._buffers[0] = this._buffers[0].slice(bytes); - return dst; - } - - dst = Buffer.allocUnsafe(bytes); - - while (bytes > 0) { - l = this._buffers[0].length; - - if (bytes >= l) { - this._buffers[0].copy(dst, offset); - offset += l; - this._buffers.shift(); - } else { - this._buffers[0].copy(dst, offset, 0, bytes); - this._buffers[0] = this._buffers[0].slice(bytes); - } - - bytes -= l; - } - - return dst; - } - - /** - * Checks if the number of buffered bytes is bigger or equal than `n` and - * calls `cleanup` if necessary. - * - * @param {Number} n The number of bytes to check against - * @return {Boolean} `true` if `bufferedBytes >= n`, else `false` - * @private - */ - hasBufferedBytes (n) { - if (this._bufferedBytes >= n) return true; - - this._loop = false; - if (this._dead) this.cleanup(this._cleanupCallback); - return false; - } - - /** - * Adds new data to the parser. - * - * @public - */ - add (data) { - if (this._dead) return; - - this._bufferedBytes += data.length; - this._buffers.push(data); - this.startLoop(); - } - - /** - * Starts the parsing loop. - * - * @private - */ - startLoop () { - this._loop = true; - - while (this._loop) { - switch (this._state) { - case GET_INFO: - this.getInfo(); - break; - case GET_PAYLOAD_LENGTH_16: - this.getPayloadLength16(); - break; - case GET_PAYLOAD_LENGTH_64: - this.getPayloadLength64(); - break; - case GET_MASK: - this.getMask(); - break; - case GET_DATA: - this.getData(); - break; - default: // `INFLATING` - this._loop = false; - } - } - } - - /** - * Reads the first two bytes of a frame. - * - * @private - */ - getInfo () { - if (!this.hasBufferedBytes(2)) return; - - const buf = this.readBuffer(2); - - if ((buf[0] & 0x30) !== 0x00) { - this.error(new Error('RSV2 and RSV3 must be clear'), 1002); - return; - } - - const compressed = (buf[0] & 0x40) === 0x40; - - if (compressed && !this._extensions[PerMessageDeflate.extensionName]) { - this.error(new Error('RSV1 must be clear'), 1002); - return; - } - - this._fin = (buf[0] & 0x80) === 0x80; - this._opcode = buf[0] & 0x0f; - this._payloadLength = buf[1] & 0x7f; - - if (this._opcode === 0x00) { - if (compressed) { - this.error(new Error('RSV1 must be clear'), 1002); - return; - } - - if (!this._fragmented) { - this.error(new Error(`invalid opcode: ${this._opcode}`), 1002); - return; - } else { - this._opcode = this._fragmented; - } - } else if (this._opcode === 0x01 || this._opcode === 0x02) { - if (this._fragmented) { - this.error(new Error(`invalid opcode: ${this._opcode}`), 1002); - return; - } - - this._compressed = compressed; - } else if (this._opcode > 0x07 && this._opcode < 0x0b) { - if (!this._fin) { - this.error(new Error('FIN must be set'), 1002); - return; - } - - if (compressed) { - this.error(new Error('RSV1 must be clear'), 1002); - return; - } - - if (this._payloadLength > 0x7d) { - this.error(new Error('invalid payload length'), 1002); - return; - } - } else { - this.error(new Error(`invalid opcode: ${this._opcode}`), 1002); - return; - } - - if (!this._fin && !this._fragmented) this._fragmented = this._opcode; - - this._masked = (buf[1] & 0x80) === 0x80; - - if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16; - else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64; - else this.haveLength(); - } - - /** - * Gets extended payload length (7+16). - * - * @private - */ - getPayloadLength16 () { - if (!this.hasBufferedBytes(2)) return; - - this._payloadLength = this.readBuffer(2).readUInt16BE(0, true); - this.haveLength(); - } - - /** - * Gets extended payload length (7+64). - * - * @private - */ - getPayloadLength64 () { - if (!this.hasBufferedBytes(8)) return; - - const buf = this.readBuffer(8); - const num = buf.readUInt32BE(0, true); - - // - // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned - // if payload length is greater than this number. - // - if (num > Math.pow(2, 53 - 32) - 1) { - this.error(new Error('max payload size exceeded'), 1009); - return; - } - - this._payloadLength = (num * Math.pow(2, 32)) + buf.readUInt32BE(4, true); - this.haveLength(); - } - - /** - * Payload length has been read. - * - * @private - */ - haveLength () { - if (this._opcode < 0x08 && this.maxPayloadExceeded(this._payloadLength)) { - return; - } - - if (this._masked) this._state = GET_MASK; - else this._state = GET_DATA; - } - - /** - * Reads mask bytes. - * - * @private - */ - getMask () { - if (!this.hasBufferedBytes(4)) return; - - this._mask = this.readBuffer(4); - this._state = GET_DATA; - } - - /** - * Reads data bytes. - * - * @private - */ - getData () { - var data = constants.EMPTY_BUFFER; - - if (this._payloadLength) { - if (!this.hasBufferedBytes(this._payloadLength)) return; - - data = this.readBuffer(this._payloadLength); - if (this._masked) bufferUtil.unmask(data, this._mask); - } - - if (this._opcode > 0x07) { - this.controlMessage(data); - } else if (this._compressed) { - this._state = INFLATING; - this.decompress(data); - } else if (this.pushFragment(data)) { - this.dataMessage(); - } - } - - /** - * Decompresses data. - * - * @param {Buffer} data Compressed data - * @private - */ - decompress (data) { - const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; - - perMessageDeflate.decompress(data, this._fin, (err, buf) => { - if (err) { - this.error(err, err.closeCode === 1009 ? 1009 : 1007); - return; - } - - if (this.pushFragment(buf)) this.dataMessage(); - this.startLoop(); - }); - } - - /** - * Handles a data message. - * - * @private - */ - dataMessage () { - if (this._fin) { - const messageLength = this._messageLength; - const fragments = this._fragments; - - this._totalPayloadLength = 0; - this._messageLength = 0; - this._fragmented = 0; - this._fragments = []; - - if (this._opcode === 2) { - var data; - - if (this._binaryType === 'nodebuffer') { - data = toBuffer(fragments, messageLength); - } else if (this._binaryType === 'arraybuffer') { - data = toArrayBuffer(toBuffer(fragments, messageLength)); - } else { - data = fragments; - } - - this.onmessage(data); - } else { - const buf = toBuffer(fragments, messageLength); - - if (!isValidUTF8(buf)) { - this.error(new Error('invalid utf8 sequence'), 1007); - return; - } - - this.onmessage(buf.toString()); - } - } - - this._state = GET_INFO; - } - - /** - * Handles a control message. - * - * @param {Buffer} data Data to handle - * @private - */ - controlMessage (data) { - if (this._opcode === 0x08) { - if (data.length === 0) { - this.onclose(1000, ''); - this._loop = false; - this.cleanup(this._cleanupCallback); - } else if (data.length === 1) { - this.error(new Error('invalid payload length'), 1002); - } else { - const code = data.readUInt16BE(0, true); - - if (!ErrorCodes.isValidErrorCode(code)) { - this.error(new Error(`invalid status code: ${code}`), 1002); - return; - } - - const buf = data.slice(2); - - if (!isValidUTF8(buf)) { - this.error(new Error('invalid utf8 sequence'), 1007); - return; - } - - this.onclose(code, buf.toString()); - this._loop = false; - this.cleanup(this._cleanupCallback); - } - - return; - } - - if (this._opcode === 0x09) this.onping(data); - else this.onpong(data); - - this._state = GET_INFO; - } - - /** - * Handles an error. - * - * @param {Error} err The error - * @param {Number} code Close code - * @private - */ - error (err, code) { - this.onerror(err, code); - this._hadError = true; - this._loop = false; - this.cleanup(this._cleanupCallback); - } - - /** - * Checks payload size, disconnects socket when it exceeds `maxPayload`. - * - * @param {Number} length Payload length - * @private - */ - maxPayloadExceeded (length) { - if (length === 0 || this._maxPayload < 1) return false; - - const fullLength = this._totalPayloadLength + length; - - if (fullLength <= this._maxPayload) { - this._totalPayloadLength = fullLength; - return false; - } - - this.error(new Error('max payload size exceeded'), 1009); - return true; - } - - /** - * Appends a fragment in the fragments array after checking that the sum of - * fragment lengths does not exceed `maxPayload`. - * - * @param {Buffer} fragment The fragment to add - * @return {Boolean} `true` if `maxPayload` is not exceeded, else `false` - * @private - */ - pushFragment (fragment) { - if (fragment.length === 0) return true; - - const totalLength = this._messageLength + fragment.length; - - if (this._maxPayload < 1 || totalLength <= this._maxPayload) { - this._messageLength = totalLength; - this._fragments.push(fragment); - return true; - } - - this.error(new Error('max payload size exceeded'), 1009); - return false; - } - - /** - * Releases resources used by the receiver. - * - * @param {Function} cb Callback - * @public - */ - cleanup (cb) { - this._dead = true; - - if (!this._hadError && (this._loop || this._state === INFLATING)) { - this._cleanupCallback = cb; - } else { - this._extensions = null; - this._fragments = null; - this._buffers = null; - this._mask = null; - - this._cleanupCallback = null; - this.onmessage = null; - this.onclose = null; - this.onerror = null; - this.onping = null; - this.onpong = null; - - if (cb) cb(); - } - } -} - -module.exports = Receiver; - -/** - * Makes a buffer from a list of fragments. - * - * @param {Buffer[]} fragments The list of fragments composing the message - * @param {Number} messageLength The length of the message - * @return {Buffer} - * @private - */ -function toBuffer (fragments, messageLength) { - if (fragments.length === 1) return fragments[0]; - if (fragments.length > 1) return bufferUtil.concat(fragments, messageLength); - return constants.EMPTY_BUFFER; -} - -/** - * Converts a buffer to an `ArrayBuffer`. - * - * @param {Buffer} The buffer to convert - * @return {ArrayBuffer} Converted buffer - */ -function toArrayBuffer (buf) { - if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { - return buf.buffer; - } - - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); -} diff --git a/truebit-implementation/node_modules/ws/lib/Sender.js b/truebit-implementation/node_modules/ws/lib/Sender.js deleted file mode 100644 index 046a0e1d..00000000 --- a/truebit-implementation/node_modules/ws/lib/Sender.js +++ /dev/null @@ -1,412 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -const safeBuffer = require('safe-buffer'); -const crypto = require('crypto'); - -const PerMessageDeflate = require('./PerMessageDeflate'); -const bufferUtil = require('./BufferUtil'); -const ErrorCodes = require('./ErrorCodes'); -const constants = require('./Constants'); - -const Buffer = safeBuffer.Buffer; - -/** - * HyBi Sender implementation. - */ -class Sender { - /** - * Creates a Sender instance. - * - * @param {net.Socket} socket The connection socket - * @param {Object} extensions An object containing the negotiated extensions - */ - constructor (socket, extensions) { - this._extensions = extensions || {}; - this._socket = socket; - - this._firstFragment = true; - this._compress = false; - - this._bufferedBytes = 0; - this._deflating = false; - this._queue = []; - } - - /** - * Frames a piece of data according to the HyBi WebSocket protocol. - * - * @param {Buffer} data The data to frame - * @param {Object} options Options object - * @param {Number} options.opcode The opcode - * @param {Boolean} options.readOnly Specifies whether `data` can be modified - * @param {Boolean} options.fin Specifies whether or not to set the FIN bit - * @param {Boolean} options.mask Specifies whether or not to mask `data` - * @param {Boolean} options.rsv1 Specifies whether or not to set the RSV1 bit - * @return {Buffer[]} The framed data as a list of `Buffer` instances - * @public - */ - static frame (data, options) { - const merge = data.length < 1024 || (options.mask && options.readOnly); - var offset = options.mask ? 6 : 2; - var payloadLength = data.length; - - if (data.length >= 65536) { - offset += 8; - payloadLength = 127; - } else if (data.length > 125) { - offset += 2; - payloadLength = 126; - } - - const target = Buffer.allocUnsafe(merge ? data.length + offset : offset); - - target[0] = options.fin ? options.opcode | 0x80 : options.opcode; - if (options.rsv1) target[0] |= 0x40; - - if (payloadLength === 126) { - target.writeUInt16BE(data.length, 2, true); - } else if (payloadLength === 127) { - target.writeUInt32BE(0, 2, true); - target.writeUInt32BE(data.length, 6, true); - } - - if (!options.mask) { - target[1] = payloadLength; - if (merge) { - data.copy(target, offset); - return [target]; - } - - return [target, data]; - } - - const mask = crypto.randomBytes(4); - - target[1] = payloadLength | 0x80; - target[offset - 4] = mask[0]; - target[offset - 3] = mask[1]; - target[offset - 2] = mask[2]; - target[offset - 1] = mask[3]; - - if (merge) { - bufferUtil.mask(data, mask, target, offset, data.length); - return [target]; - } - - bufferUtil.mask(data, mask, data, 0, data.length); - return [target, data]; - } - - /** - * Sends a close message to the other peer. - * - * @param {(Number|undefined)} code The status code component of the body - * @param {String} data The message component of the body - * @param {Boolean} mask Specifies whether or not to mask the message - * @param {Function} cb Callback - * @public - */ - close (code, data, mask, cb) { - var buf; - - if (code === undefined) { - code = 1000; - } else if (typeof code !== 'number' || !ErrorCodes.isValidErrorCode(code)) { - throw new Error('first argument must be a valid error code number'); - } - - if (data === undefined || data === '') { - if (code === 1000) { - buf = constants.EMPTY_BUFFER; - } else { - buf = Buffer.allocUnsafe(2); - buf.writeUInt16BE(code, 0, true); - } - } else { - buf = Buffer.allocUnsafe(2 + Buffer.byteLength(data)); - buf.writeUInt16BE(code, 0, true); - buf.write(data, 2); - } - - if (this._deflating) { - this.enqueue([this.doClose, buf, mask, cb]); - } else { - this.doClose(buf, mask, cb); - } - } - - /** - * Frames and sends a close message. - * - * @param {Buffer} data The message to send - * @param {Boolean} mask Specifies whether or not to mask `data` - * @param {Function} cb Callback - * @private - */ - doClose (data, mask, cb) { - this.sendFrame(Sender.frame(data, { - fin: true, - rsv1: false, - opcode: 0x08, - mask, - readOnly: false - }), cb); - } - - /** - * Sends a ping message to the other peer. - * - * @param {*} data The message to send - * @param {Boolean} mask Specifies whether or not to mask `data` - * @public - */ - ping (data, mask) { - var readOnly = true; - - if (!Buffer.isBuffer(data)) { - if (data instanceof ArrayBuffer) { - data = Buffer.from(data); - } else if (ArrayBuffer.isView(data)) { - data = viewToBuffer(data); - } else { - data = Buffer.from(data); - readOnly = false; - } - } - - if (this._deflating) { - this.enqueue([this.doPing, data, mask, readOnly]); - } else { - this.doPing(data, mask, readOnly); - } - } - - /** - * Frames and sends a ping message. - * - * @param {*} data The message to send - * @param {Boolean} mask Specifies whether or not to mask `data` - * @param {Boolean} readOnly Specifies whether `data` can be modified - * @private - */ - doPing (data, mask, readOnly) { - this.sendFrame(Sender.frame(data, { - fin: true, - rsv1: false, - opcode: 0x09, - mask, - readOnly - })); - } - - /** - * Sends a pong message to the other peer. - * - * @param {*} data The message to send - * @param {Boolean} mask Specifies whether or not to mask `data` - * @public - */ - pong (data, mask) { - var readOnly = true; - - if (!Buffer.isBuffer(data)) { - if (data instanceof ArrayBuffer) { - data = Buffer.from(data); - } else if (ArrayBuffer.isView(data)) { - data = viewToBuffer(data); - } else { - data = Buffer.from(data); - readOnly = false; - } - } - - if (this._deflating) { - this.enqueue([this.doPong, data, mask, readOnly]); - } else { - this.doPong(data, mask, readOnly); - } - } - - /** - * Frames and sends a pong message. - * - * @param {*} data The message to send - * @param {Boolean} mask Specifies whether or not to mask `data` - * @param {Boolean} readOnly Specifies whether `data` can be modified - * @private - */ - doPong (data, mask, readOnly) { - this.sendFrame(Sender.frame(data, { - fin: true, - rsv1: false, - opcode: 0x0a, - mask, - readOnly - })); - } - - /** - * Sends a data message to the other peer. - * - * @param {*} data The message to send - * @param {Object} options Options object - * @param {Boolean} options.compress Specifies whether or not to compress `data` - * @param {Boolean} options.binary Specifies whether `data` is binary or text - * @param {Boolean} options.fin Specifies whether the fragment is the last one - * @param {Boolean} options.mask Specifies whether or not to mask `data` - * @param {Function} cb Callback - * @public - */ - send (data, options, cb) { - var opcode = options.binary ? 2 : 1; - var rsv1 = options.compress; - var readOnly = true; - - if (!Buffer.isBuffer(data)) { - if (data instanceof ArrayBuffer) { - data = Buffer.from(data); - } else if (ArrayBuffer.isView(data)) { - data = viewToBuffer(data); - } else { - data = Buffer.from(data); - readOnly = false; - } - } - - const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; - - if (this._firstFragment) { - this._firstFragment = false; - if (rsv1 && perMessageDeflate) { - rsv1 = data.length >= perMessageDeflate._threshold; - } - this._compress = rsv1; - } else { - rsv1 = false; - opcode = 0; - } - - if (options.fin) this._firstFragment = true; - - if (perMessageDeflate) { - const opts = { - fin: options.fin, - rsv1, - opcode, - mask: options.mask, - readOnly - }; - - if (this._deflating) { - this.enqueue([this.dispatch, data, this._compress, opts, cb]); - } else { - this.dispatch(data, this._compress, opts, cb); - } - } else { - this.sendFrame(Sender.frame(data, { - fin: options.fin, - rsv1: false, - opcode, - mask: options.mask, - readOnly - }), cb); - } - } - - /** - * Dispatches a data message. - * - * @param {Buffer} data The message to send - * @param {Boolean} compress Specifies whether or not to compress `data` - * @param {Object} options Options object - * @param {Number} options.opcode The opcode - * @param {Boolean} options.readOnly Specifies whether `data` can be modified - * @param {Boolean} options.fin Specifies whether or not to set the FIN bit - * @param {Boolean} options.mask Specifies whether or not to mask `data` - * @param {Boolean} options.rsv1 Specifies whether or not to set the RSV1 bit - * @param {Function} cb Callback - * @private - */ - dispatch (data, compress, options, cb) { - if (!compress) { - this.sendFrame(Sender.frame(data, options), cb); - return; - } - - const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName]; - - this._deflating = true; - perMessageDeflate.compress(data, options.fin, (_, buf) => { - options.readOnly = false; - this.sendFrame(Sender.frame(buf, options), cb); - this._deflating = false; - this.dequeue(); - }); - } - - /** - * Executes queued send operations. - * - * @private - */ - dequeue () { - while (!this._deflating && this._queue.length) { - const params = this._queue.shift(); - - this._bufferedBytes -= params[1].length; - params[0].apply(this, params.slice(1)); - } - } - - /** - * Enqueues a send operation. - * - * @param {Array} params Send operation parameters. - * @private - */ - enqueue (params) { - this._bufferedBytes += params[1].length; - this._queue.push(params); - } - - /** - * Sends a frame. - * - * @param {Buffer[]} list The frame to send - * @param {Function} cb Callback - * @private - */ - sendFrame (list, cb) { - if (list.length === 2) { - this._socket.write(list[0]); - this._socket.write(list[1], cb); - } else { - this._socket.write(list[0], cb); - } - } -} - -module.exports = Sender; - -/** - * Converts an `ArrayBuffer` view into a buffer. - * - * @param {(DataView|TypedArray)} view The view to convert - * @return {Buffer} Converted view - * @private - */ -function viewToBuffer (view) { - const buf = Buffer.from(view.buffer); - - if (view.byteLength !== view.buffer.byteLength) { - return buf.slice(view.byteOffset, view.byteOffset + view.byteLength); - } - - return buf; -} diff --git a/truebit-implementation/node_modules/ws/lib/Validation.js b/truebit-implementation/node_modules/ws/lib/Validation.js deleted file mode 100644 index 35c7e4f2..00000000 --- a/truebit-implementation/node_modules/ws/lib/Validation.js +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -try { - const isValidUTF8 = require('utf-8-validate'); - - module.exports = typeof isValidUTF8 === 'object' - ? isValidUTF8.Validation.isValidUTF8 // utf-8-validate@<3.0.0 - : isValidUTF8; -} catch (e) /* istanbul ignore next */ { - module.exports = () => true; -} diff --git a/truebit-implementation/node_modules/ws/lib/WebSocket.js b/truebit-implementation/node_modules/ws/lib/WebSocket.js deleted file mode 100644 index a8c7b99b..00000000 --- a/truebit-implementation/node_modules/ws/lib/WebSocket.js +++ /dev/null @@ -1,717 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -const EventEmitter = require('events'); -const crypto = require('crypto'); -const Ultron = require('ultron'); -const https = require('https'); -const http = require('http'); -const url = require('url'); - -const PerMessageDeflate = require('./PerMessageDeflate'); -const EventTarget = require('./EventTarget'); -const Extensions = require('./Extensions'); -const constants = require('./Constants'); -const Receiver = require('./Receiver'); -const Sender = require('./Sender'); - -const protocolVersions = [8, 13]; -const closeTimeout = 30 * 1000; // Allow 30 seconds to terminate the connection cleanly. - -/** - * Class representing a WebSocket. - * - * @extends EventEmitter - */ -class WebSocket extends EventEmitter { - /** - * Create a new `WebSocket`. - * - * @param {String} address The URL to which to connect - * @param {(String|String[])} protocols The subprotocols - * @param {Object} options Connection options - */ - constructor (address, protocols, options) { - super(); - - if (!protocols) { - protocols = []; - } else if (typeof protocols === 'string') { - protocols = [protocols]; - } else if (!Array.isArray(protocols)) { - options = protocols; - protocols = []; - } - - this.readyState = WebSocket.CONNECTING; - this.bytesReceived = 0; - this.extensions = {}; - this.protocol = ''; - - this._binaryType = constants.BINARY_TYPES[0]; - this._finalize = this.finalize.bind(this); - this._closeFrameReceived = false; - this._closeFrameSent = false; - this._closeMessage = ''; - this._closeTimer = null; - this._finalized = false; - this._closeCode = 1006; - this._receiver = null; - this._sender = null; - this._socket = null; - this._ultron = null; - - if (Array.isArray(address)) { - initAsServerClient.call(this, address[0], address[1], options); - } else { - initAsClient.call(this, address, protocols, options); - } - } - - get CONNECTING () { return WebSocket.CONNECTING; } - get CLOSING () { return WebSocket.CLOSING; } - get CLOSED () { return WebSocket.CLOSED; } - get OPEN () { return WebSocket.OPEN; } - - /** - * @type {Number} - */ - get bufferedAmount () { - var amount = 0; - - if (this._socket) { - amount = this._socket.bufferSize + this._sender._bufferedBytes; - } - return amount; - } - - /** - * This deviates from the WHATWG interface since ws doesn't support the required - * default "blob" type (instead we define a custom "nodebuffer" type). - * - * @type {String} - */ - get binaryType () { - return this._binaryType; - } - - set binaryType (type) { - if (constants.BINARY_TYPES.indexOf(type) < 0) return; - - this._binaryType = type; - - // - // Allow to change `binaryType` on the fly. - // - if (this._receiver) this._receiver._binaryType = type; - } - - /** - * Set up the socket and the internal resources. - * - * @param {net.Socket} socket The network socket between the server and client - * @param {Buffer} head The first packet of the upgraded stream - * @private - */ - setSocket (socket, head) { - socket.setTimeout(0); - socket.setNoDelay(); - - this._receiver = new Receiver(this.extensions, this._maxPayload, this.binaryType); - this._sender = new Sender(socket, this.extensions); - this._ultron = new Ultron(socket); - this._socket = socket; - - this._ultron.on('close', this._finalize); - this._ultron.on('error', this._finalize); - this._ultron.on('end', this._finalize); - - if (head.length > 0) socket.unshift(head); - - this._ultron.on('data', (data) => { - this.bytesReceived += data.length; - this._receiver.add(data); - }); - - this._receiver.onmessage = (data) => this.emit('message', data); - this._receiver.onping = (data) => { - this.pong(data, !this._isServer, true); - this.emit('ping', data); - }; - this._receiver.onpong = (data) => this.emit('pong', data); - this._receiver.onclose = (code, reason) => { - this._closeFrameReceived = true; - this._closeMessage = reason; - this._closeCode = code; - if (!this._finalized) this.close(code, reason); - }; - this._receiver.onerror = (error, code) => { - this._closeMessage = ''; - this._closeCode = code; - - // - // Ensure that the error is emitted even if `WebSocket#finalize()` has - // already been called. - // - this.readyState = WebSocket.CLOSING; - this.emit('error', error); - this.finalize(true); - }; - - this.readyState = WebSocket.OPEN; - this.emit('open'); - } - - /** - * Clean up and release internal resources. - * - * @param {(Boolean|Error)} error Indicates whether or not an error occurred - * @private - */ - finalize (error) { - if (this._finalized) return; - - this.readyState = WebSocket.CLOSING; - this._finalized = true; - - if (typeof error === 'object') this.emit('error', error); - if (!this._socket) return this.emitClose(); - - clearTimeout(this._closeTimer); - this._closeTimer = null; - - this._ultron.destroy(); - this._ultron = null; - - this._socket.on('error', constants.NOOP); - - if (!error) this._socket.end(); - else this._socket.destroy(); - - this._socket = null; - this._sender = null; - - this._receiver.cleanup(() => this.emitClose()); - this._receiver = null; - } - - /** - * Emit the `close` event. - * - * @private - */ - emitClose () { - this.readyState = WebSocket.CLOSED; - - this.emit('close', this._closeCode, this._closeMessage); - - if (this.extensions[PerMessageDeflate.extensionName]) { - this.extensions[PerMessageDeflate.extensionName].cleanup(); - } - - this.extensions = null; - - this.removeAllListeners(); - } - - /** - * Pause the socket stream. - * - * @public - */ - pause () { - if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); - - this._socket.pause(); - } - - /** - * Resume the socket stream - * - * @public - */ - resume () { - if (this.readyState !== WebSocket.OPEN) throw new Error('not opened'); - - this._socket.resume(); - } - - /** - * Start a closing handshake. - * - * +----------+ +-----------+ +----------+ - * + - - -|ws.close()|---->|close frame|-->|ws.close()|- - - - - * +----------+ +-----------+ +----------+ | - * | +----------+ +-----------+ | - * |ws.close()|<----|close frame|<--------+ | - * +----------+ +-----------+ | - * CLOSING | +---+ | CLOSING - * | +---|fin|<------------+ - * | | | +---+ | - * | | +---+ +-------------+ - * | +----------+-->|fin|----->|ws.finalize()| - - + - * | +---+ +-------------+ - * | +-------------+ | - * - - -|ws.finalize()|<--+ - * +-------------+ - * - * @param {Number} code Status code explaining why the connection is closing - * @param {String} data A string explaining why the connection is closing - * @public - */ - close (code, data) { - if (this.readyState === WebSocket.CLOSED) return; - if (this.readyState === WebSocket.CONNECTING) { - this._req.abort(); - this.finalize(new Error('closed before the connection is established')); - return; - } - - if (this.readyState === WebSocket.CLOSING) { - if (this._closeFrameSent && this._closeFrameReceived) this._socket.end(); - return; - } - - this.readyState = WebSocket.CLOSING; - this._sender.close(code, data, !this._isServer, (err) => { - // - // This error is handled by the `'error'` listener on the socket. We only - // want to know if the close frame has been sent here. - // - if (err) return; - - this._closeFrameSent = true; - - if (!this._finalized) { - if (this._closeFrameReceived) this._socket.end(); - - // - // Ensure that the connection is cleaned up even when the closing - // handshake fails. - // - this._closeTimer = setTimeout(this._finalize, closeTimeout, true); - } - }); - } - - /** - * Send a ping message. - * - * @param {*} data The message to send - * @param {Boolean} mask Indicates whether or not to mask `data` - * @param {Boolean} failSilently Indicates whether or not to throw if `readyState` isn't `OPEN` - * @public - */ - ping (data, mask, failSilently) { - if (this.readyState !== WebSocket.OPEN) { - if (failSilently) return; - throw new Error('not opened'); - } - - if (typeof data === 'number') data = data.toString(); - if (mask === undefined) mask = !this._isServer; - this._sender.ping(data || constants.EMPTY_BUFFER, mask); - } - - /** - * Send a pong message. - * - * @param {*} data The message to send - * @param {Boolean} mask Indicates whether or not to mask `data` - * @param {Boolean} failSilently Indicates whether or not to throw if `readyState` isn't `OPEN` - * @public - */ - pong (data, mask, failSilently) { - if (this.readyState !== WebSocket.OPEN) { - if (failSilently) return; - throw new Error('not opened'); - } - - if (typeof data === 'number') data = data.toString(); - if (mask === undefined) mask = !this._isServer; - this._sender.pong(data || constants.EMPTY_BUFFER, mask); - } - - /** - * Send a data message. - * - * @param {*} data The message to send - * @param {Object} options Options object - * @param {Boolean} options.compress Specifies whether or not to compress `data` - * @param {Boolean} options.binary Specifies whether `data` is binary or text - * @param {Boolean} options.fin Specifies whether the fragment is the last one - * @param {Boolean} options.mask Specifies whether or not to mask `data` - * @param {Function} cb Callback which is executed when data is written out - * @public - */ - send (data, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - if (this.readyState !== WebSocket.OPEN) { - if (cb) cb(new Error('not opened')); - else throw new Error('not opened'); - return; - } - - if (typeof data === 'number') data = data.toString(); - - const opts = Object.assign({ - binary: typeof data !== 'string', - mask: !this._isServer, - compress: true, - fin: true - }, options); - - if (!this.extensions[PerMessageDeflate.extensionName]) { - opts.compress = false; - } - - this._sender.send(data || constants.EMPTY_BUFFER, opts, cb); - } - - /** - * Forcibly close the connection. - * - * @public - */ - terminate () { - if (this.readyState === WebSocket.CLOSED) return; - if (this.readyState === WebSocket.CONNECTING) { - this._req.abort(); - this.finalize(new Error('closed before the connection is established')); - return; - } - - this.finalize(true); - } -} - -WebSocket.CONNECTING = 0; -WebSocket.OPEN = 1; -WebSocket.CLOSING = 2; -WebSocket.CLOSED = 3; - -// -// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes. -// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface -// -['open', 'error', 'close', 'message'].forEach((method) => { - Object.defineProperty(WebSocket.prototype, `on${method}`, { - /** - * Return the listener of the event. - * - * @return {(Function|undefined)} The event listener or `undefined` - * @public - */ - get () { - const listeners = this.listeners(method); - for (var i = 0; i < listeners.length; i++) { - if (listeners[i]._listener) return listeners[i]._listener; - } - }, - /** - * Add a listener for the event. - * - * @param {Function} listener The listener to add - * @public - */ - set (listener) { - const listeners = this.listeners(method); - for (var i = 0; i < listeners.length; i++) { - // - // Remove only the listeners added via `addEventListener`. - // - if (listeners[i]._listener) this.removeListener(method, listeners[i]); - } - this.addEventListener(method, listener); - } - }); -}); - -WebSocket.prototype.addEventListener = EventTarget.addEventListener; -WebSocket.prototype.removeEventListener = EventTarget.removeEventListener; - -module.exports = WebSocket; - -/** - * Initialize a WebSocket server client. - * - * @param {http.IncomingMessage} req The request object - * @param {net.Socket} socket The network socket between the server and client - * @param {Buffer} head The first packet of the upgraded stream - * @param {Object} options WebSocket attributes - * @param {Number} options.protocolVersion The WebSocket protocol version - * @param {Object} options.extensions The negotiated extensions - * @param {Number} options.maxPayload The maximum allowed message size - * @param {String} options.protocol The chosen subprotocol - * @private - */ -function initAsServerClient (socket, head, options) { - this.protocolVersion = options.protocolVersion; - this._maxPayload = options.maxPayload; - this.extensions = options.extensions; - this.protocol = options.protocol; - - this._isServer = true; - - this.setSocket(socket, head); -} - -/** - * Initialize a WebSocket client. - * - * @param {String} address The URL to which to connect - * @param {String[]} protocols The list of subprotocols - * @param {Object} options Connection options - * @param {String} options.protocol Value of the `Sec-WebSocket-Protocol` header - * @param {(Boolean|Object)} options.perMessageDeflate Enable/disable permessage-deflate - * @param {Number} options.handshakeTimeout Timeout in milliseconds for the handshake request - * @param {String} options.localAddress Local interface to bind for network connections - * @param {Number} options.protocolVersion Value of the `Sec-WebSocket-Version` header - * @param {Object} options.headers An object containing request headers - * @param {String} options.origin Value of the `Origin` or `Sec-WebSocket-Origin` header - * @param {http.Agent} options.agent Use the specified Agent - * @param {String} options.host Value of the `Host` header - * @param {Number} options.family IP address family to use during hostname lookup (4 or 6). - * @param {Function} options.checkServerIdentity A function to validate the server hostname - * @param {Boolean} options.rejectUnauthorized Verify or not the server certificate - * @param {String} options.passphrase The passphrase for the private key or pfx - * @param {String} options.ciphers The ciphers to use or exclude - * @param {String} options.ecdhCurve The curves for ECDH key agreement to use or exclude - * @param {(String|String[]|Buffer|Buffer[])} options.cert The certificate key - * @param {(String|String[]|Buffer|Buffer[])} options.key The private key - * @param {(String|Buffer)} options.pfx The private key, certificate, and CA certs - * @param {(String|String[]|Buffer|Buffer[])} options.ca Trusted certificates - * @private - */ -function initAsClient (address, protocols, options) { - options = Object.assign({ - protocolVersion: protocolVersions[1], - protocol: protocols.join(','), - perMessageDeflate: true, - handshakeTimeout: null, - localAddress: null, - headers: null, - family: null, - origin: null, - agent: null, - host: null, - - // - // SSL options. - // - checkServerIdentity: null, - rejectUnauthorized: null, - passphrase: null, - ciphers: null, - ecdhCurve: null, - cert: null, - key: null, - pfx: null, - ca: null - }, options); - - if (protocolVersions.indexOf(options.protocolVersion) === -1) { - throw new Error( - `unsupported protocol version: ${options.protocolVersion} ` + - `(supported versions: ${protocolVersions.join(', ')})` - ); - } - - this.protocolVersion = options.protocolVersion; - this._isServer = false; - this.url = address; - - const serverUrl = url.parse(address); - const isUnixSocket = serverUrl.protocol === 'ws+unix:'; - - if (!serverUrl.host && (!isUnixSocket || !serverUrl.path)) { - throw new Error('invalid url'); - } - - const isSecure = serverUrl.protocol === 'wss:' || serverUrl.protocol === 'https:'; - const key = crypto.randomBytes(16).toString('base64'); - const httpObj = isSecure ? https : http; - var perMessageDeflate; - - const requestOptions = { - port: serverUrl.port || (isSecure ? 443 : 80), - host: serverUrl.hostname, - path: '/', - headers: { - 'Sec-WebSocket-Version': options.protocolVersion, - 'Sec-WebSocket-Key': key, - 'Connection': 'Upgrade', - 'Upgrade': 'websocket' - } - }; - - if (options.headers) Object.assign(requestOptions.headers, options.headers); - if (options.perMessageDeflate) { - perMessageDeflate = new PerMessageDeflate( - options.perMessageDeflate !== true ? options.perMessageDeflate : {}, - false - ); - requestOptions.headers['Sec-WebSocket-Extensions'] = Extensions.format({ - [PerMessageDeflate.extensionName]: perMessageDeflate.offer() - }); - } - if (options.protocol) { - requestOptions.headers['Sec-WebSocket-Protocol'] = options.protocol; - } - if (options.origin) { - if (options.protocolVersion < 13) { - requestOptions.headers['Sec-WebSocket-Origin'] = options.origin; - } else { - requestOptions.headers.Origin = options.origin; - } - } - if (options.host) requestOptions.headers.Host = options.host; - if (serverUrl.auth) requestOptions.auth = serverUrl.auth; - - if (options.localAddress) requestOptions.localAddress = options.localAddress; - if (options.family) requestOptions.family = options.family; - - if (isUnixSocket) { - const parts = serverUrl.path.split(':'); - - requestOptions.socketPath = parts[0]; - requestOptions.path = parts[1]; - } else if (serverUrl.path) { - // - // Make sure that path starts with `/`. - // - if (serverUrl.path.charAt(0) !== '/') { - requestOptions.path = `/${serverUrl.path}`; - } else { - requestOptions.path = serverUrl.path; - } - } - - var agent = options.agent; - - // - // A custom agent is required for these options. - // - if ( - options.rejectUnauthorized != null || - options.checkServerIdentity || - options.passphrase || - options.ciphers || - options.ecdhCurve || - options.cert || - options.key || - options.pfx || - options.ca - ) { - if (options.passphrase) requestOptions.passphrase = options.passphrase; - if (options.ciphers) requestOptions.ciphers = options.ciphers; - if (options.ecdhCurve) requestOptions.ecdhCurve = options.ecdhCurve; - if (options.cert) requestOptions.cert = options.cert; - if (options.key) requestOptions.key = options.key; - if (options.pfx) requestOptions.pfx = options.pfx; - if (options.ca) requestOptions.ca = options.ca; - if (options.checkServerIdentity) { - requestOptions.checkServerIdentity = options.checkServerIdentity; - } - if (options.rejectUnauthorized != null) { - requestOptions.rejectUnauthorized = options.rejectUnauthorized; - } - - if (!agent) agent = new httpObj.Agent(requestOptions); - } - - if (agent) requestOptions.agent = agent; - - this._req = httpObj.get(requestOptions); - - if (options.handshakeTimeout) { - this._req.setTimeout(options.handshakeTimeout, () => { - this._req.abort(); - this.finalize(new Error('opening handshake has timed out')); - }); - } - - this._req.on('error', (error) => { - if (this._req.aborted) return; - - this._req = null; - this.finalize(error); - }); - - this._req.on('response', (res) => { - if (!this.emit('unexpected-response', this._req, res)) { - this._req.abort(); - this.finalize(new Error(`unexpected server response (${res.statusCode})`)); - } - }); - - this._req.on('upgrade', (res, socket, head) => { - this.emit('headers', res.headers, res); - - // - // The user may have closed the connection from a listener of the `headers` - // event. - // - if (this.readyState !== WebSocket.CONNECTING) return; - - this._req = null; - - const digest = crypto.createHash('sha1') - .update(key + constants.GUID, 'binary') - .digest('base64'); - - if (res.headers['sec-websocket-accept'] !== digest) { - socket.destroy(); - return this.finalize(new Error('invalid server key')); - } - - const serverProt = res.headers['sec-websocket-protocol']; - const protList = (options.protocol || '').split(/, */); - var protError; - - if (!options.protocol && serverProt) { - protError = 'server sent a subprotocol even though none requested'; - } else if (options.protocol && !serverProt) { - protError = 'server sent no subprotocol even though requested'; - } else if (serverProt && protList.indexOf(serverProt) === -1) { - protError = 'server responded with an invalid protocol'; - } - - if (protError) { - socket.destroy(); - return this.finalize(new Error(protError)); - } - - if (serverProt) this.protocol = serverProt; - - if (perMessageDeflate) { - try { - const serverExtensions = Extensions.parse( - res.headers['sec-websocket-extensions'] - ); - - if (serverExtensions[PerMessageDeflate.extensionName]) { - perMessageDeflate.accept( - serverExtensions[PerMessageDeflate.extensionName] - ); - this.extensions[PerMessageDeflate.extensionName] = perMessageDeflate; - } - } catch (err) { - socket.destroy(); - this.finalize(new Error('invalid Sec-WebSocket-Extensions header')); - return; - } - } - - this.setSocket(socket, head); - }); -} diff --git a/truebit-implementation/node_modules/ws/lib/WebSocketServer.js b/truebit-implementation/node_modules/ws/lib/WebSocketServer.js deleted file mode 100644 index 8ebd6bf8..00000000 --- a/truebit-implementation/node_modules/ws/lib/WebSocketServer.js +++ /dev/null @@ -1,326 +0,0 @@ -/*! - * ws: a node.js websocket client - * Copyright(c) 2011 Einar Otto Stangvik - * MIT Licensed - */ - -'use strict'; - -const safeBuffer = require('safe-buffer'); -const EventEmitter = require('events'); -const crypto = require('crypto'); -const Ultron = require('ultron'); -const http = require('http'); -const url = require('url'); - -const PerMessageDeflate = require('./PerMessageDeflate'); -const Extensions = require('./Extensions'); -const constants = require('./Constants'); -const WebSocket = require('./WebSocket'); - -const Buffer = safeBuffer.Buffer; - -/** - * Class representing a WebSocket server. - * - * @extends EventEmitter - */ -class WebSocketServer extends EventEmitter { - /** - * Create a `WebSocketServer` instance. - * - * @param {Object} options Configuration options - * @param {String} options.host The hostname where to bind the server - * @param {Number} options.port The port where to bind the server - * @param {http.Server} options.server A pre-created HTTP/S server to use - * @param {Function} options.verifyClient An hook to reject connections - * @param {Function} options.handleProtocols An hook to handle protocols - * @param {String} options.path Accept only connections matching this path - * @param {Boolean} options.noServer Enable no server mode - * @param {Boolean} options.clientTracking Specifies whether or not to track clients - * @param {(Boolean|Object)} options.perMessageDeflate Enable/disable permessage-deflate - * @param {Number} options.maxPayload The maximum allowed message size - * @param {Function} callback A listener for the `listening` event - */ - constructor (options, callback) { - super(); - - options = Object.assign({ - maxPayload: 100 * 1024 * 1024, - perMessageDeflate: false, - handleProtocols: null, - clientTracking: true, - verifyClient: null, - noServer: false, - backlog: null, // use default (511 as implemented in net.js) - server: null, - host: null, - path: null, - port: null - }, options); - - if (options.port == null && !options.server && !options.noServer) { - throw new TypeError('missing or invalid options'); - } - - if (options.port != null) { - this._server = http.createServer((req, res) => { - const body = http.STATUS_CODES[426]; - - res.writeHead(426, { - 'Content-Length': body.length, - 'Content-Type': 'text/plain' - }); - res.end(body); - }); - this._server.listen(options.port, options.host, options.backlog, callback); - } else if (options.server) { - this._server = options.server; - } - - if (this._server) { - this._ultron = new Ultron(this._server); - this._ultron.on('listening', () => this.emit('listening')); - this._ultron.on('error', (err) => this.emit('error', err)); - this._ultron.on('upgrade', (req, socket, head) => { - this.handleUpgrade(req, socket, head, (client) => { - this.emit('connection', client, req); - }); - }); - } - - if (options.perMessageDeflate === true) options.perMessageDeflate = {}; - if (options.clientTracking) this.clients = new Set(); - this.options = options; - } - - /** - * Close the server. - * - * @param {Function} cb Callback - * @public - */ - close (cb) { - // - // Terminate all associated clients. - // - if (this.clients) { - for (const client of this.clients) client.terminate(); - } - - const server = this._server; - - if (server) { - this._ultron.destroy(); - this._ultron = this._server = null; - - // - // Close the http server if it was internally created. - // - if (this.options.port != null) return server.close(cb); - } - - if (cb) cb(); - } - - /** - * See if a given request should be handled by this server instance. - * - * @param {http.IncomingMessage} req Request object to inspect - * @return {Boolean} `true` if the request is valid, else `false` - * @public - */ - shouldHandle (req) { - if (this.options.path && url.parse(req.url).pathname !== this.options.path) { - return false; - } - - return true; - } - - /** - * Handle a HTTP Upgrade request. - * - * @param {http.IncomingMessage} req The request object - * @param {net.Socket} socket The network socket between the server and client - * @param {Buffer} head The first packet of the upgraded stream - * @param {Function} cb Callback - * @public - */ - handleUpgrade (req, socket, head, cb) { - socket.on('error', socketError); - - const version = +req.headers['sec-websocket-version']; - const extensions = {}; - - if ( - req.method !== 'GET' || req.headers.upgrade.toLowerCase() !== 'websocket' || - !req.headers['sec-websocket-key'] || (version !== 8 && version !== 13) || - !this.shouldHandle(req) - ) { - return abortConnection(socket, 400); - } - - if (this.options.perMessageDeflate) { - const perMessageDeflate = new PerMessageDeflate( - this.options.perMessageDeflate, - true, - this.options.maxPayload - ); - - try { - const offers = Extensions.parse( - req.headers['sec-websocket-extensions'] - ); - - if (offers[PerMessageDeflate.extensionName]) { - perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); - extensions[PerMessageDeflate.extensionName] = perMessageDeflate; - } - } catch (err) { - return abortConnection(socket, 400); - } - } - - var protocol = (req.headers['sec-websocket-protocol'] || '').split(/, */); - - // - // Optionally call external protocol selection handler. - // - if (this.options.handleProtocols) { - protocol = this.options.handleProtocols(protocol, req); - if (protocol === false) return abortConnection(socket, 401); - } else { - protocol = protocol[0]; - } - - // - // Optionally call external client verification handler. - // - if (this.options.verifyClient) { - const info = { - origin: req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`], - secure: !!(req.connection.authorized || req.connection.encrypted), - req - }; - - if (this.options.verifyClient.length === 2) { - this.options.verifyClient(info, (verified, code, message) => { - if (!verified) return abortConnection(socket, code || 401, message); - - this.completeUpgrade( - protocol, - extensions, - version, - req, - socket, - head, - cb - ); - }); - return; - } - - if (!this.options.verifyClient(info)) return abortConnection(socket, 401); - } - - this.completeUpgrade(protocol, extensions, version, req, socket, head, cb); - } - - /** - * Upgrade the connection to WebSocket. - * - * @param {String} protocol The chosen subprotocol - * @param {Object} extensions The accepted extensions - * @param {Number} version The WebSocket protocol version - * @param {http.IncomingMessage} req The request object - * @param {net.Socket} socket The network socket between the server and client - * @param {Buffer} head The first packet of the upgraded stream - * @param {Function} cb Callback - * @private - */ - completeUpgrade (protocol, extensions, version, req, socket, head, cb) { - // - // Destroy the socket if the client has already sent a FIN packet. - // - if (!socket.readable || !socket.writable) return socket.destroy(); - - const key = crypto.createHash('sha1') - .update(req.headers['sec-websocket-key'] + constants.GUID, 'binary') - .digest('base64'); - - const headers = [ - 'HTTP/1.1 101 Switching Protocols', - 'Upgrade: websocket', - 'Connection: Upgrade', - `Sec-WebSocket-Accept: ${key}` - ]; - - if (protocol) headers.push(`Sec-WebSocket-Protocol: ${protocol}`); - if (extensions[PerMessageDeflate.extensionName]) { - const params = extensions[PerMessageDeflate.extensionName].params; - const value = Extensions.format({ - [PerMessageDeflate.extensionName]: [params] - }); - headers.push(`Sec-WebSocket-Extensions: ${value}`); - } - - // - // Allow external modification/inspection of handshake headers. - // - this.emit('headers', headers, req); - - socket.write(headers.concat('\r\n').join('\r\n')); - - const client = new WebSocket([socket, head], null, { - maxPayload: this.options.maxPayload, - protocolVersion: version, - extensions, - protocol - }); - - if (this.clients) { - this.clients.add(client); - client.on('close', () => this.clients.delete(client)); - } - - socket.removeListener('error', socketError); - cb(client); - } -} - -module.exports = WebSocketServer; - -/** - * Handle premature socket errors. - * - * @private - */ -function socketError () { - this.destroy(); -} - -/** - * Close the connection when preconditions are not fulfilled. - * - * @param {net.Socket} socket The socket of the upgrade request - * @param {Number} code The HTTP response status code - * @param {String} [message] The HTTP response body - * @private - */ -function abortConnection (socket, code, message) { - if (socket.writable) { - message = message || http.STATUS_CODES[code]; - socket.write( - `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + - 'Connection: close\r\n' + - 'Content-type: text/html\r\n' + - `Content-Length: ${Buffer.byteLength(message)}\r\n` + - '\r\n' + - message - ); - } - - socket.removeListener('error', socketError); - socket.destroy(); -} diff --git a/truebit-implementation/node_modules/ws/package.json b/truebit-implementation/node_modules/ws/package.json deleted file mode 100644 index 07236351..00000000 --- a/truebit-implementation/node_modules/ws/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_from": "ws@^3.0.0", - "_id": "ws@3.3.3", - "_inBundle": false, - "_integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "_location": "/ws", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "ws@^3.0.0", - "name": "ws", - "escapedName": "ws", - "rawSpec": "^3.0.0", - "saveSpec": null, - "fetchSpec": "^3.0.0" - }, - "_requiredBy": [ - "/eth-lib" - ], - "_resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "_shasum": "f1cf84fe2d5e901ebce94efaece785f187a228f2", - "_spec": "ws@^3.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/eth-lib", - "author": { - "name": "Einar Otto Stangvik", - "email": "einaros@gmail.com", - "url": "http://2x.io" - }, - "bugs": { - "url": "https://github.com/websockets/ws/issues" - }, - "bundleDependencies": false, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - }, - "deprecated": false, - "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", - "devDependencies": { - "benchmark": "~2.1.2", - "bufferutil": "~3.0.0", - "eslint": "~4.13.0", - "eslint-config-standard": "~10.2.0", - "eslint-plugin-import": "~2.8.0", - "eslint-plugin-node": "~5.2.0", - "eslint-plugin-promise": "~3.6.0", - "eslint-plugin-standard": "~3.0.0", - "mocha": "~4.0.0", - "nyc": "~11.3.0", - "utf-8-validate": "~4.0.0" - }, - "files": [ - "index.js", - "lib" - ], - "homepage": "https://github.com/websockets/ws", - "keywords": [ - "HyBi", - "Push", - "RFC-6455", - "WebSocket", - "WebSockets", - "real-time" - ], - "license": "MIT", - "main": "index.js", - "name": "ws", - "repository": { - "type": "git", - "url": "git+https://github.com/websockets/ws.git" - }, - "scripts": { - "integration": "eslint . && mocha test/*.integration.js", - "lint": "eslint .", - "test": "eslint . && nyc --reporter=html --reporter=text mocha test/*.test.js" - }, - "version": "3.3.3" -} diff --git a/truebit-implementation/node_modules/xhr-request-promise/.npmignore b/truebit-implementation/node_modules/xhr-request-promise/.npmignore deleted file mode 100644 index c2658d7d..00000000 --- a/truebit-implementation/node_modules/xhr-request-promise/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/truebit-implementation/node_modules/xhr-request-promise/README.md b/truebit-implementation/node_modules/xhr-request-promise/README.md deleted file mode 100644 index de3cea95..00000000 --- a/truebit-implementation/node_modules/xhr-request-promise/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## xhr-request-promise - -Thin wrapper on top of [this](https://www.npmjs.com/package/xhr-request) to use Promise instead of callbacks. diff --git a/truebit-implementation/node_modules/xhr-request-promise/index.js b/truebit-implementation/node_modules/xhr-request-promise/index.js deleted file mode 100644 index e9b9d8fc..00000000 --- a/truebit-implementation/node_modules/xhr-request-promise/index.js +++ /dev/null @@ -1,10 +0,0 @@ -var request = require('xhr-request') - -module.exports = function (url, options) { - return new Promise(function (resolve, reject) { - request(url, options, function (err, data) { - if (err) reject(err); - else resolve(data); - }); - }); -}; diff --git a/truebit-implementation/node_modules/xhr-request-promise/package.json b/truebit-implementation/node_modules/xhr-request-promise/package.json deleted file mode 100644 index 254d9b3f..00000000 --- a/truebit-implementation/node_modules/xhr-request-promise/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "_from": "xhr-request-promise@^0.1.2", - "_id": "xhr-request-promise@0.1.2", - "_inBundle": false, - "_integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "_location": "/xhr-request-promise", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "xhr-request-promise@^0.1.2", - "name": "xhr-request-promise", - "escapedName": "xhr-request-promise", - "rawSpec": "^0.1.2", - "saveSpec": null, - "fetchSpec": "^0.1.2" - }, - "_requiredBy": [ - "/eth-lib", - "/swarm-js", - "/web3-eth-accounts/eth-lib" - ], - "_resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "_shasum": "343c44d1ee7726b8648069682d0f840c83b4261d", - "_spec": "xhr-request-promise@^0.1.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/swarm-js", - "author": { - "name": "Victor Maia" - }, - "bugs": { - "url": "https://github.com/maiavictor/xhr-request-promise/issues" - }, - "bundleDependencies": false, - "dependencies": { - "xhr-request": "^1.0.1" - }, - "deprecated": false, - "description": "Thin wrapper on top of [this](https://www.npmjs.com/package/xhr-request) to use Promise instead of callbacks.", - "homepage": "https://github.com/maiavictor/xhr-request-promise#readme", - "license": "MIT", - "main": "index.js", - "name": "xhr-request-promise", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/maiavictor/xhr-request-promise.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "0.1.2" -} diff --git a/truebit-implementation/node_modules/xhr-request/LICENSE.md b/truebit-implementation/node_modules/xhr-request/LICENSE.md deleted file mode 100644 index 9b10ce2a..00000000 --- a/truebit-implementation/node_modules/xhr-request/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) -Copyright (c) 2015 Jam3 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. - diff --git a/truebit-implementation/node_modules/xhr-request/README.md b/truebit-implementation/node_modules/xhr-request/README.md deleted file mode 100644 index 8099ba62..00000000 --- a/truebit-implementation/node_modules/xhr-request/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# xhr-request - -[![stable](http://badges.github.io/stability-badges/dist/stable.svg)](http://github.com/badges/stability-badges) - -An extremely tiny HTTP/HTTPS request client for Node and the browser. Uses [xhr](https://www.npmjs.com/package/xhr) in the browser and [simple-get](https://www.npmjs.com/package/simple-get) in Node. - -Supported response types: JSON, ArrayBuffer, and text (default). - -For streaming requests, you can just use [simple-get](https://www.npmjs.com/package/simple-get) directly. It works in Node/browser and supports true streaming in new versions of Chrome/FireFox. - -## Install - -```sh -npm install xhr-request --save -``` - -## Example - -A simple example, loading JSON: - -```js -var request = require('xhr-request') - -request('http://foo.com/some/api', { - json: true -}, function (err, data) { - if (err) throw err - - // the JSON result - console.log(data.foo.bar) -}) -``` - -Another example, sending a JSON `body` with a `query` parameter. Receives binary data as the response. - -```js -var request = require('xhr-request') - -request('http://foo.com/some/api', { - method: 'PUT', - json: true, - body: { foo: 'bar' }, - responseType: 'arraybuffer', - query: { - sort: 'name' - } -}, function (err, data) { - if (err) throw err - console.log('got ArrayBuffer result: ', data) -}) -``` - -## Motivation - -There are a lot of HTTP clients, but most of them are Node-centric and lead to large browser bundles with builtins like `url`, `buffer`, `http`, `zlib`, streams, etc. - -With browserify, this bundles to 7kb minified. Compare to 742kb for [request](https://www.npmjs.com/package/request), 153kb for [got](https://www.npmjs.com/package/got), 74kb for [simple-get](https://www.npmjs.com/package/simple-get), and 25kb for [nets](https://www.npmjs.com/package/nets). - -## Usage - -#### `req = xhrRequest(url, [opt], [callback])` - -Sends a request to the given `url` with optional `opt` settings, triggering `callback` on complete. - -Options: - -- `query` (String|Object) - - the query parameters to use for the URL -- `headers` (Object) - - the headers for the request -- `json` (Boolean) - - if true, `responseType` defaults to `'json`' and `body` will be sent as JSON -- `responseType` (String) - - can be `'text'`, `'arraybuffer'` or `'json'` - - defaults to `'text'` unless `json` is true -- `body` (String|JSON) - - an optional body to send with request - - sent as text unless `json` is true -- `method` (String) - - an optional method to use, defaults to `'GET'` -- `timeout` (Number) - - milliseconds to use as a timeout, defaults to 0 (no timeout) - -The `callback` is called with the arguments `(error, data, response)` - -- `error` on success will be null/undefined -- `data` the result of the request, either a JSON object, string, or `ArrayBuffer` -- `response` the request response, see below - -The response object has the following form: - -```js -{ - statusCode: Number, - method: String, - headers: {}, - url: String, - rawRequest: {} -} -``` - -The `rawRequest` is the XMLHttpRequest in the browser, and the `http` response in Node. - -Since `opt` is optional, you can specify `callback` as the second argument. - -#### `req.abort()` - -The returned `req` (the [ClientRequest](https://nodejs.org/api/http.html#http_class_http_clientrequest) or XMLHttpRequest) has an `abort()` method which can be used to cancel the request and send an Error to the callback. - -## See Also - -- [simple-get](https://www.npmjs.com/package/simple-get) -- [xhr](https://www.npmjs.com/package/xhr) -- [got](https://www.npmjs.com/package/got) -- [nets](https://www.npmjs.com/package/nets) -- [superagent](https://www.npmjs.com/package/nets) -- [axios](https://www.npmjs.com/package/axios) - -## License - -MIT, see [LICENSE.md](http://github.com/Jam3/xhr-request/blob/master/LICENSE.md) for details. diff --git a/truebit-implementation/node_modules/xhr-request/index.js b/truebit-implementation/node_modules/xhr-request/index.js deleted file mode 100644 index 405bd050..00000000 --- a/truebit-implementation/node_modules/xhr-request/index.js +++ /dev/null @@ -1,59 +0,0 @@ -var queryString = require('query-string') -var setQuery = require('url-set-query') -var assign = require('object-assign') -var ensureHeader = require('./lib/ensure-header.js') - -// this is replaced in the browser -var request = require('./lib/request.js') - -var mimeTypeJson = 'application/json' -var noop = function () {} - -module.exports = xhrRequest -function xhrRequest (url, opt, cb) { - if (!url || typeof url !== 'string') { - throw new TypeError('must specify a URL') - } - if (typeof opt === 'function') { - cb = opt - opt = {} - } - if (cb && typeof cb !== 'function') { - throw new TypeError('expected cb to be undefined or a function') - } - - cb = cb || noop - opt = opt || {} - - var defaultResponse = opt.json ? 'json' : 'text' - opt = assign({ responseType: defaultResponse }, opt) - - var headers = opt.headers || {} - var method = (opt.method || 'GET').toUpperCase() - var query = opt.query - if (query) { - if (typeof query !== 'string') { - query = queryString.stringify(query) - } - url = setQuery(url, query) - } - - // allow json response - if (opt.responseType === 'json') { - ensureHeader(headers, 'Accept', mimeTypeJson) - } - - // if body content is json - if (opt.json && method !== 'GET' && method !== 'HEAD') { - ensureHeader(headers, 'Content-Type', mimeTypeJson) - opt.body = JSON.stringify(opt.body) - } - - opt.method = method - opt.url = url - opt.headers = headers - delete opt.query - delete opt.json - - return request(opt, cb) -} diff --git a/truebit-implementation/node_modules/xhr-request/lib/ensure-header.js b/truebit-implementation/node_modules/xhr-request/lib/ensure-header.js deleted file mode 100644 index f2c97f66..00000000 --- a/truebit-implementation/node_modules/xhr-request/lib/ensure-header.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = ensureHeader -function ensureHeader (headers, key, value) { - var lower = key.toLowerCase() - if (!headers[key] && !headers[lower]) { - headers[key] = value - } -} diff --git a/truebit-implementation/node_modules/xhr-request/lib/normalize-response.js b/truebit-implementation/node_modules/xhr-request/lib/normalize-response.js deleted file mode 100644 index 11e7b480..00000000 --- a/truebit-implementation/node_modules/xhr-request/lib/normalize-response.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = getResponse -function getResponse (opt, resp) { - if (!resp) return null - return { - statusCode: resp.statusCode, - headers: resp.headers, - method: opt.method, - url: opt.url, - // the XHR object in browser, http response in Node - rawRequest: resp.rawRequest ? resp.rawRequest : resp - } -} diff --git a/truebit-implementation/node_modules/xhr-request/lib/request-browser.js b/truebit-implementation/node_modules/xhr-request/lib/request-browser.js deleted file mode 100644 index 3c81e7ba..00000000 --- a/truebit-implementation/node_modules/xhr-request/lib/request-browser.js +++ /dev/null @@ -1,42 +0,0 @@ -var xhr = require('xhr') -var normalize = require('./normalize-response') -var noop = function () {} - -module.exports = xhrRequest -function xhrRequest (opt, cb) { - delete opt.uri - - // for better JSON.parse error handling than xhr module - var useJson = false - if (opt.responseType === 'json') { - opt.responseType = 'text' - useJson = true - } - - var req = xhr(opt, function xhrRequestResult (err, resp, body) { - if (useJson && !err) { - try { - var text = resp.rawRequest.responseText - body = JSON.parse(text) - } catch (e) { - err = e - } - } - - resp = normalize(opt, resp) - if (err) cb(err, null, resp) - else cb(err, body, resp) - cb = noop - }) - - // Patch abort() so that it also calls the callback, but with an error - var onabort = req.onabort - req.onabort = function () { - var ret = onabort.apply(req, Array.prototype.slice.call(arguments)) - cb(new Error('XHR Aborted')) - cb = noop - return ret - } - - return req -} diff --git a/truebit-implementation/node_modules/xhr-request/lib/request.js b/truebit-implementation/node_modules/xhr-request/lib/request.js deleted file mode 100644 index b9139335..00000000 --- a/truebit-implementation/node_modules/xhr-request/lib/request.js +++ /dev/null @@ -1,47 +0,0 @@ -var request = require('simple-get') -var toArrayBuffer = require('buffer-to-arraybuffer') -var normalize = require('./normalize-response') -var timeout = require('timed-out') -var ensureHeader = require('./ensure-header') - -// supported types -var responseTypes = [ 'text', 'arraybuffer', 'json' ] - -module.exports = xhrRequest -function xhrRequest (opt, cb) { - var responseType = opt.responseType - if (responseType && responseTypes.indexOf(responseType) === -1) { - throw new TypeError('invalid responseType for node: ' + responseType) - } - - // set a default user agent for Node - ensureHeader(opt.headers, 'User-Agent', 'https://github.com/Jam3/xhr-request') - var req = request.concat(opt, function xhrRequestResult (err, resp, data) { - if (!err) { - if (responseType === 'arraybuffer') { - data = toArrayBuffer(data) - } else if (responseType === 'json') { - try { - data = JSON.parse(data.toString()) - } catch (e) { - err = e - } - } else { // 'text' response - data = data.toString() - } - } - - resp = normalize(opt, resp) - if (err) { - cb(err, null, resp) - } else { - cb(null, data, resp) - } - }) - - if (typeof opt.timeout === 'number' && opt.timeout !== 0) { - timeout(req, opt.timeout) - } - - return req -} diff --git a/truebit-implementation/node_modules/xhr-request/package.json b/truebit-implementation/node_modules/xhr-request/package.json deleted file mode 100644 index a32a51ac..00000000 --- a/truebit-implementation/node_modules/xhr-request/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_from": "xhr-request@^1.0.1", - "_id": "xhr-request@1.1.0", - "_inBundle": false, - "_integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "_location": "/xhr-request", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "xhr-request@^1.0.1", - "name": "xhr-request", - "escapedName": "xhr-request", - "rawSpec": "^1.0.1", - "saveSpec": null, - "fetchSpec": "^1.0.1" - }, - "_requiredBy": [ - "/xhr-request-promise" - ], - "_resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "_shasum": "f4a7c1868b9f198723444d82dcae317643f2e2ed", - "_spec": "xhr-request@^1.0.1", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/xhr-request-promise", - "author": { - "name": "Matt DesLauriers", - "email": "dave.des@gmail.com", - "url": "https://github.com/mattdesl" - }, - "browser": { - "./lib/request.js": "./lib/request-browser.js" - }, - "bugs": { - "url": "https://github.com/Jam3/xhr-request/issues" - }, - "bundleDependencies": false, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - }, - "deprecated": false, - "description": "tiny http client for Node and the browser", - "devDependencies": { - "budo": "^11.0.1", - "faucet": "0.0.1", - "standard": "^10.0.3", - "tape": "^4.0.1" - }, - "homepage": "https://github.com/Jam3/xhr-request", - "keywords": [ - "node", - "browser", - "http", - "got", - "request", - "gots", - "nets", - "xhr", - "xmlhttprequest", - "xml", - "http", - "request", - "client", - "https", - "requests", - "xml", - "get", - "query", - "string" - ], - "license": "MIT", - "main": "index.js", - "name": "xhr-request", - "repository": { - "type": "git", - "url": "git://github.com/Jam3/xhr-request.git" - }, - "scripts": { - "test": "standard && npm run test-node && npm run test-browser", - "test-browser": "budo test/test-browser.js -o", - "test-node": "node test/index.js | faucet" - }, - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/xhr/CONTRIBUTING.md b/truebit-implementation/node_modules/xhr/CONTRIBUTING.md deleted file mode 100644 index 3d4053b5..00000000 --- a/truebit-implementation/node_modules/xhr/CONTRIBUTING.md +++ /dev/null @@ -1,27 +0,0 @@ -# XHR is an OPEN Open Source Project - ------------------------------------------ - -## What? - -Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project. - -## Rules - -There are a few basic ground-rules for contributors: - -1. **No `--force` pushes** or modifying the Git history in any way. -1. **Non-master branches** ought to be used for ongoing work. -1. **External API changes and significant modifications** ought to be subject to an **internal pull-request** to solicit feedback from other contributors. -1. Internal pull-requests to solicit feedback are *encouraged* for any other non-trivial contribution but left to the discretion of the contributor. -1. Contributors should attempt to adhere to the prevailing code-style. - -## Releases - -Declaring formal releases remains the prerogative of the project maintainer. - -## Changes to this arrangement - -This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change. - ------------------------------------------ diff --git a/truebit-implementation/node_modules/xhr/LICENCE b/truebit-implementation/node_modules/xhr/LICENCE deleted file mode 100644 index a23e08a8..00000000 --- a/truebit-implementation/node_modules/xhr/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr/README.md b/truebit-implementation/node_modules/xhr/README.md deleted file mode 100644 index 3aac5a02..00000000 --- a/truebit-implementation/node_modules/xhr/README.md +++ /dev/null @@ -1,255 +0,0 @@ -# xhr - -[![Join the chat at https://gitter.im/naugtur-xhr/Lobby](https://badges.gitter.im/naugtur-xhr/Lobby.svg)](https://gitter.im/naugtur-xhr/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -[![Greenkeeper badge](https://badges.greenkeeper.io/naugtur/xhr.svg)](https://greenkeeper.io/) - -A small XMLHttpRequest wrapper. Designed for use with [browserify](http://browserify.org/), [webpack](https://webpack.github.io/) etc. - -API is a subset of [request](https://github.com/request/request) so you can write code that works in both node.js and the browser by using `require('request')` in your code and telling your browser bundler to load `xhr` instead of `request`. - -For browserify, add a [browser](https://github.com/substack/node-browserify#browser-field) field to your `package.json`: - -``` -"browser": { - "request": "xhr" -} -``` - -For webpack, add a [resolve.alias](http://webpack.github.io/docs/configuration.html#resolve-alias) field to your configuration: - -``` -"resolve": { - "alias": { - "request$": "xhr" - } -} -``` - -Browser support: IE8+ and everything else. - -## Installation - -``` -npm install xhr -``` - -## Example - -```js -var xhr = require("xhr") - -xhr({ - method: "post", - body: someJSONString, - uri: "/foo", - headers: { - "Content-Type": "application/json" - } -}, function (err, resp, body) { - // check resp.statusCode -}) -``` - -## `var req = xhr(options, callback)` - -```js -type XhrOptions = String | { - useXDR: Boolean?, - sync: Boolean?, - uri: String, - url: String, - method: String?, - timeout: Number?, - headers: Object?, - body: String? | Object?, - json: Boolean? | Object?, - username: String?, - password: String?, - withCredentials: Boolean?, - responseType: String?, - beforeSend: Function? -} -xhr := (XhrOptions, Callback) => Request -``` -the returned object is either an [`XMLHttpRequest`][3] instance - or an [`XDomainRequest`][4] instance (if on IE8/IE9 && - `options.useXDR` is set to `true`) - -Your callback will be called once with the arguments - ( [`Error`][5], `response` , `body` ) where the response is an object: -```js -{ - body: Object||String, - statusCode: Number, - method: String, - headers: {}, - url: String, - rawRequest: xhr -} -``` - - `body`: HTTP response body - [`XMLHttpRequest.response`][6], [`XMLHttpRequest.responseText`][7] or - [`XMLHttpRequest.responseXML`][8] depending on the request type. - - `rawRequest`: Original [`XMLHttpRequest`][3] instance - or [`XDomainRequest`][4] instance (if on IE8/IE9 && - `options.useXDR` is set to `true`) - - `headers`: A collection of headers where keys are header names converted to lowercase - - -Your callback will be called with an [`Error`][5] if there is an error in the browser that prevents sending the request. -A HTTP 500 response is not going to cause an error to be returned. - -## Other signatures - -* `var req = xhr(url, callback)` - -a simple string instead of the options. In this case, a GET request will be made to that url. - -* `var req = xhr(url, options, callback)` - -the above may also be called with the standard set of options. - -### Convience methods -* `var req = xhr.{post, put, patch, del, head, get}(url, callback)` -* `var req = xhr.{post, put, patch, del, head, get}(options, callback)` -* `var req = xhr.{post, put, patch, del, head, get}(url, options, callback)` - -The `xhr` module has convience functions attached that will make requests with the given method. -Each function is named after its method, with the exception of `DELETE` which is called `xhr.del` for compatibility. - -The method shorthands may be combined with the url-first form of `xhr` for succinct and descriptive requests. For example, - -```js -xhr.post('/post-to-me', function(err, resp) { - console.log(resp.body) -}) -``` - -or - -```js -xhr.del('/delete-me', { headers: { my: 'auth' } }, function (err, resp) { - console.log(resp.statusCode); -}) -``` - -## Options - -### `options.method` - -Specify the method the [`XMLHttpRequest`][3] should be opened - with. Passed to [`XMLHttpRequest.open`][2]. Defaults to "GET" - -### `options.useXDR` - -Specify whether this is a cross origin (CORS) request for IE<10. - Switches IE to use [`XDomainRequest`][4] instead of `XMLHttpRequest`. - Ignored in other browsers. - -Note that headers cannot be set on an XDomainRequest instance. - -### `options.sync` - -Specify whether this is a synchrounous request. Note that when - this is true the callback will be called synchronously. In - most cases this option should not be used. Only use if you - know what you are doing! - -### `options.body` - -Pass in body to be send across the [`XMLHttpRequest`][3]. - Generally should be a string. But anything that's valid as - a parameter to [`XMLHttpRequest.send`][1] should work (Buffer for file, etc.). - -If `options.json` is `true`, then this must be a JSON-serializable object. `options.body` is passed to `JSON.stringify` and sent. - -### `options.uri` or `options.url` - -The uri to send a request to. Passed to [`XMLHttpRequest.open`][2]. `options.url` and `options.uri` are aliases for each other. - -### `options.headers` - -An object of headers that should be set on the request. The - key, value pair is passed to [`XMLHttpRequest.setRequestHeader`][9] - -### `options.timeout` - -Number of miliseconds to wait for response. Defaults to 0 (no timeout). Ignored when `options.sync` is true. - -### `options.json` - -Set to `true` to send request as `application/json` (see `options.body`) and parse response from JSON. - -For backwards compatibility `options.json` can also be a valid JSON-serializable value to be sent to the server. Additionally the response body is still parsed as JSON - -For sending booleans as JSON body see FAQ - -### `options.withCredentials` - -Specify whether user credentials are to be included in a cross-origin - request. Sets [`XMLHttpRequest.withCredentials`][10]. Defaults to false. - -A wildcard `*` cannot be used in the `Access-Control-Allow-Origin` header when `withCredentials` is true. - The header needs to specify your origin explicitly or browser will abort the request. - -### `options.responseType` - -Determines the data type of the `response`. Sets [`XMLHttpRequest.responseType`][11]. For example, a `responseType` of `document` will return a parsed `Document` object as the `response.body` for an XML resource. - -### `options.beforeSend` - -A function being called right before the `send` method of the `XMLHttpRequest` or `XDomainRequest` instance is called. The `XMLHttpRequest` or `XDomainRequest` instance is passed as an argument. - -### `options.xhr` - -Pass an `XMLHttpRequest` object (or something that acts like one) to use instead of constructing a new one using the `XMLHttpRequest` or `XDomainRequest` constructors. Useful for testing. - -## FAQ - -- Why is my server's JSON response not parsed? I returned the right content-type. - - See `options.json` - you can set it to `true` on a GET request to tell `xhr` to parse the response body. - - Without `options.json` body is returned as-is (a string or when `responseType` is set and the browser supports it - a result of parsing JSON or XML) -- How do I send an object or array as POST body? - - `options.body` should be a string. You need to serialize your object before passing to `xhr` for sending. - - To serialize to JSON you can use - `options.json:true` with `options.body` for convenience - then `xhr` will do the serialization and set content-type accordingly. -- Where's stream API? `.pipe()` etc. - - Not implemented. You can't reasonably have that in the browser. -- Why can't I send `"true"` as body by passing it as `options.json` anymore? - - Accepting `true` as a value was a bug. Despite what `JSON.stringify` does, the string `"true"` is not valid JSON. If you're sending booleans as JSON, please consider wrapping them in an object or array to save yourself from more trouble in the future. To bring back the old behavior, hardcode `options.json` to `true` and set `options.body` to your boolean value. -- How do I add an `onprogress` listener? - - use `beforeSend` function for non-standard things that are browser specific. In this case: - ```js - xhr({ - ... - beforeSend: function(xhrObject){ - xhrObject.onprogress = function(){} - } - }) - ``` - -## Mocking Requests -You can override the constructor used to create new requests for testing. When you're making a new request: - -```js -xhr({ xhr: new MockXMLHttpRequest() }) -``` - -or you can override the constructors used to create requests at the module level: - -```js -xhr.XMLHttpRequest = MockXMLHttpRequest -xhr.XDomainRequest = MockXDomainRequest -``` - -## MIT Licenced - - [1]: http://xhr.spec.whatwg.org/#the-send()-method - [2]: http://xhr.spec.whatwg.org/#the-open()-method - [3]: http://xhr.spec.whatwg.org/#interface-xmlhttprequest - [4]: http://msdn.microsoft.com/en-us/library/ie/cc288060(v=vs.85).aspx - [5]: http://es5.github.com/#x15.11 - [6]: http://xhr.spec.whatwg.org/#the-response-attribute - [7]: http://xhr.spec.whatwg.org/#the-responsetext-attribute - [8]: http://xhr.spec.whatwg.org/#the-responsexml-attribute - [9]: http://xhr.spec.whatwg.org/#the-setrequestheader()-method - [10]: http://xhr.spec.whatwg.org/#the-withcredentials-attribute - [11]: https://xhr.spec.whatwg.org/#the-responsetype-attribute diff --git a/truebit-implementation/node_modules/xhr/index.d.ts b/truebit-implementation/node_modules/xhr/index.d.ts deleted file mode 100644 index 3dbd5ba7..00000000 --- a/truebit-implementation/node_modules/xhr/index.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -export type XhrCallback = ( - error: Error, - response: XhrResponse, - body: any -) => void; - -export interface XhrResponse { - body: Object | string; - statusCode: number; - method: string; - headers: XhrHeaders; - url: string; - rawRequest: XMLHttpRequest; -} - -export interface XhrHeaders { - [key: string]: string; -} - -export interface XhrBaseConfig { - useXDR?: boolean; - sync?: boolean; - method?: 'DELETE' | 'GET' | 'HEAD' | 'OPTIONS' | 'POST' | 'PUT'; - timeout?: number; - headers?: XhrHeaders; - body?: string | any; - json?: boolean; - username?: string; - password?: string; - withCredentials?: boolean; - responseType?: '' | 'arraybuffer' | 'blob' | 'document' | 'json' | 'text'; - beforeSend?: (xhrObject: XMLHttpRequest) => void; - xhr?: XMLHttpRequest; -} - -export interface XhrUriConfig extends XhrBaseConfig { - uri: string; -} - -export interface XhrUrlConfig extends XhrBaseConfig { - url: string; -} - -export interface XhrInstance { - (options: XhrUriConfig | XhrUrlConfig, callback: XhrCallback): any; - (url: string, callback: XhrCallback): any; - (url: string, options: XhrBaseConfig, callback: XhrCallback): any; -} - -export interface XhrStatic extends XhrInstance { - del: XhrInstance; - get: XhrInstance; - head: XhrInstance; - patch: XhrInstance; - post: XhrInstance; - put: XhrInstance; -} - -declare const Xhr: XhrStatic; - -export default Xhr; diff --git a/truebit-implementation/node_modules/xhr/index.js b/truebit-implementation/node_modules/xhr/index.js deleted file mode 100644 index 1bc328f2..00000000 --- a/truebit-implementation/node_modules/xhr/index.js +++ /dev/null @@ -1,247 +0,0 @@ -"use strict"; -var window = require("global/window") -var isFunction = require("is-function") -var parseHeaders = require("parse-headers") -var xtend = require("xtend") - -module.exports = createXHR -// Allow use of default import syntax in TypeScript -module.exports.default = createXHR; -createXHR.XMLHttpRequest = window.XMLHttpRequest || noop -createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest - -forEachArray(["get", "put", "post", "patch", "head", "delete"], function(method) { - createXHR[method === "delete" ? "del" : method] = function(uri, options, callback) { - options = initParams(uri, options, callback) - options.method = method.toUpperCase() - return _createXHR(options) - } -}) - -function forEachArray(array, iterator) { - for (var i = 0; i < array.length; i++) { - iterator(array[i]) - } -} - -function isEmpty(obj){ - for(var i in obj){ - if(obj.hasOwnProperty(i)) return false - } - return true -} - -function initParams(uri, options, callback) { - var params = uri - - if (isFunction(options)) { - callback = options - if (typeof uri === "string") { - params = {uri:uri} - } - } else { - params = xtend(options, {uri: uri}) - } - - params.callback = callback - return params -} - -function createXHR(uri, options, callback) { - options = initParams(uri, options, callback) - return _createXHR(options) -} - -function _createXHR(options) { - if(typeof options.callback === "undefined"){ - throw new Error("callback argument missing") - } - - var called = false - var callback = function cbOnce(err, response, body){ - if(!called){ - called = true - options.callback(err, response, body) - } - } - - function readystatechange() { - if (xhr.readyState === 4) { - setTimeout(loadFunc, 0) - } - } - - function getBody() { - // Chrome with requestType=blob throws errors arround when even testing access to responseText - var body = undefined - - if (xhr.response) { - body = xhr.response - } else { - body = xhr.responseText || getXml(xhr) - } - - if (isJson) { - try { - body = JSON.parse(body) - } catch (e) {} - } - - return body - } - - function errorFunc(evt) { - clearTimeout(timeoutTimer) - if(!(evt instanceof Error)){ - evt = new Error("" + (evt || "Unknown XMLHttpRequest Error") ) - } - evt.statusCode = 0 - return callback(evt, failureResponse) - } - - // will load the data & process the response in a special response object - function loadFunc() { - if (aborted) return - var status - clearTimeout(timeoutTimer) - if(options.useXDR && xhr.status===undefined) { - //IE8 CORS GET successful response doesn't have a status field, but body is fine - status = 200 - } else { - status = (xhr.status === 1223 ? 204 : xhr.status) - } - var response = failureResponse - var err = null - - if (status !== 0){ - response = { - body: getBody(), - statusCode: status, - method: method, - headers: {}, - url: uri, - rawRequest: xhr - } - if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE - response.headers = parseHeaders(xhr.getAllResponseHeaders()) - } - } else { - err = new Error("Internal XMLHttpRequest Error") - } - return callback(err, response, response.body) - } - - var xhr = options.xhr || null - - if (!xhr) { - if (options.cors || options.useXDR) { - xhr = new createXHR.XDomainRequest() - }else{ - xhr = new createXHR.XMLHttpRequest() - } - } - - var key - var aborted - var uri = xhr.url = options.uri || options.url - var method = xhr.method = options.method || "GET" - var body = options.body || options.data - var headers = xhr.headers = options.headers || {} - var sync = !!options.sync - var isJson = false - var timeoutTimer - var failureResponse = { - body: undefined, - headers: {}, - statusCode: 0, - method: method, - url: uri, - rawRequest: xhr - } - - if ("json" in options && options.json !== false) { - isJson = true - headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json") //Don't override existing accept header declared by user - if (method !== "GET" && method !== "HEAD") { - headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json") //Don't override existing accept header declared by user - body = JSON.stringify(options.json === true ? body : options.json) - } - } - - xhr.onreadystatechange = readystatechange - xhr.onload = loadFunc - xhr.onerror = errorFunc - // IE9 must have onprogress be set to a unique function. - xhr.onprogress = function () { - // IE must die - } - xhr.onabort = function(){ - aborted = true; - } - xhr.ontimeout = errorFunc - xhr.open(method, uri, !sync, options.username, options.password) - //has to be after open - if(!sync) { - xhr.withCredentials = !!options.withCredentials - } - // Cannot set timeout with sync request - // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly - // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent - if (!sync && options.timeout > 0 ) { - timeoutTimer = setTimeout(function(){ - if (aborted) return - aborted = true//IE9 may still call readystatechange - xhr.abort("timeout") - var e = new Error("XMLHttpRequest timeout") - e.code = "ETIMEDOUT" - errorFunc(e) - }, options.timeout ) - } - - if (xhr.setRequestHeader) { - for(key in headers){ - if(headers.hasOwnProperty(key)){ - xhr.setRequestHeader(key, headers[key]) - } - } - } else if (options.headers && !isEmpty(options.headers)) { - throw new Error("Headers cannot be set on an XDomainRequest object") - } - - if ("responseType" in options) { - xhr.responseType = options.responseType - } - - if ("beforeSend" in options && - typeof options.beforeSend === "function" - ) { - options.beforeSend(xhr) - } - - // Microsoft Edge browser sends "undefined" when send is called with undefined value. - // XMLHttpRequest spec says to pass null as body to indicate no body - // See https://github.com/naugtur/xhr/issues/100. - xhr.send(body || null) - - return xhr - - -} - -function getXml(xhr) { - // xhr.responseXML will throw Exception "InvalidStateError" or "DOMException" - // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML. - try { - if (xhr.responseType === "document") { - return xhr.responseXML - } - var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === "parsererror" - if (xhr.responseType === "" && !firefoxBugTakenEffect) { - return xhr.responseXML - } - } catch (e) {} - - return null -} - -function noop() {} diff --git a/truebit-implementation/node_modules/xhr/package.json b/truebit-implementation/node_modules/xhr/package.json deleted file mode 100644 index a79b3e54..00000000 --- a/truebit-implementation/node_modules/xhr/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_from": "xhr@^2.3.3", - "_id": "xhr@2.5.0", - "_inBundle": false, - "_integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "_location": "/xhr", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "xhr@^2.3.3", - "name": "xhr", - "escapedName": "xhr", - "rawSpec": "^2.3.3", - "saveSpec": null, - "fetchSpec": "^2.3.3" - }, - "_requiredBy": [ - "/servify", - "/xhr-request" - ], - "_resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "_shasum": "bed8d1676d5ca36108667692b74b316c496e49dd", - "_spec": "xhr@^2.3.3", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/servify", - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "bugs": { - "url": "https://github.com/naugtur/xhr/issues", - "email": "naugtur@gmail.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Zbyszek Tenerowicz", - "email": "naugtur@gmail.com" - } - ], - "dependencies": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - }, - "deprecated": false, - "description": "small xhr abstraction", - "devDependencies": { - "for-each": "^0.3.2", - "pre-commit": "1.2.2", - "run-browser": "github:naugtur/run-browser", - "tap-spec": "^4.0.2", - "tape": "^4.0.0" - }, - "homepage": "https://github.com/naugtur/xhr", - "keywords": [ - "xhr", - "http", - "xmlhttprequest", - "xhr2", - "browserify" - ], - "license": "MIT", - "main": "index", - "name": "xhr", - "repository": { - "type": "git", - "url": "git://github.com/naugtur/xhr.git" - }, - "scripts": { - "browser": "run-browser -m test/mock-server.js test/index.js", - "test": "run-browser test/index.js -b -m test/mock-server.js | tap-spec" - }, - "typings": "./index.d.ts", - "version": "2.5.0" -} diff --git a/truebit-implementation/node_modules/xhr2-cookies/README.md b/truebit-implementation/node_modules/xhr2-cookies/README.md deleted file mode 100644 index a6e4efce..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# XMLHttpRequest polyfill for node.js - -Based on [https://github.com/pwnall/node-xhr2](https://github.com/pwnall/node-xhr2) - -* Adds support for cookies -* Adds in-project TypeScript type definitions -* Switched to TypeScript - -### Cookies - -* saved in `XMLHttpRequest.cookieJar` -* saved between redirects -* saved between requests -* can be cleared by doing: -```typescript -import * as Cookie from 'cookiejar'; -XMLHttpRequest.cookieJar = Cookie.CookieJar(); -``` - -### Aims - -* Provide full XMLHttpRequest features to Angular Universal HttpClient & -`node-angular-http-client` - -### Changelog - -#### `1.1.0` -* added saving of cookies between requests, not just redirects -* bug fixes -* most tests from `xhr2` ported over and passing diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/errors.d.ts b/truebit-implementation/node_modules/xhr2-cookies/dist/errors.d.ts deleted file mode 100644 index c27fac90..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/errors.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare class SecurityError extends Error { -} -export declare class InvalidStateError extends Error { -} -export declare class NetworkError extends Error { -} -export declare class SyntaxError extends Error { -} diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/errors.js b/truebit-implementation/node_modules/xhr2-cookies/dist/errors.js deleted file mode 100644 index 6a27a120..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/errors.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var SecurityError = /** @class */ (function (_super) { - __extends(SecurityError, _super); - function SecurityError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return SecurityError; -}(Error)); -exports.SecurityError = SecurityError; -var InvalidStateError = /** @class */ (function (_super) { - __extends(InvalidStateError, _super); - function InvalidStateError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return InvalidStateError; -}(Error)); -exports.InvalidStateError = InvalidStateError; -var NetworkError = /** @class */ (function (_super) { - __extends(NetworkError, _super); - function NetworkError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return NetworkError; -}(Error)); -exports.NetworkError = NetworkError; -var SyntaxError = /** @class */ (function (_super) { - __extends(SyntaxError, _super); - function SyntaxError() { - return _super !== null && _super.apply(this, arguments) || this; - } - return SyntaxError; -}(Error)); -exports.SyntaxError = SyntaxError; -//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/errors.js.map b/truebit-implementation/node_modules/xhr2-cookies/dist/errors.js.map deleted file mode 100644 index b8867f8c..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/errors.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"errors.js","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;IAAmC,iCAAK;IAAxC;;IAA0C,CAAC;IAAD,oBAAC;AAAD,CAAC,AAA3C,CAAmC,KAAK,GAAG;AAA9B,sCAAa;AAC1B;IAAuC,qCAAK;IAA5C;;IAA8C,CAAC;IAAD,wBAAC;AAAD,CAAC,AAA/C,CAAuC,KAAK,GAAG;AAAlC,8CAAiB;AAC9B;IAAkC,gCAAK;IAAvC;;IAAyC,CAAC;IAAD,mBAAC;AAAD,CAAC,AAA1C,CAAkC,KAAK,GAAG;AAA7B,oCAAY;AACzB;IAAiC,+BAAK;IAAtC;;IAAwC,CAAC;IAAD,kBAAC;AAAD,CAAC,AAAzC,CAAiC,KAAK,GAAG;AAA5B,kCAAW"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/index.d.ts b/truebit-implementation/node_modules/xhr2-cookies/dist/index.d.ts deleted file mode 100644 index 835197c5..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './xml-http-request'; -export { XMLHttpRequestEventTarget } from './xml-http-request-event-target'; diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/index.js b/truebit-implementation/node_modules/xhr2-cookies/dist/index.js deleted file mode 100644 index dfadc7c6..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/index.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} -Object.defineProperty(exports, "__esModule", { value: true }); -__export(require("./xml-http-request")); -var xml_http_request_event_target_1 = require("./xml-http-request-event-target"); -exports.XMLHttpRequestEventTarget = xml_http_request_event_target_1.XMLHttpRequestEventTarget; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/index.js.map b/truebit-implementation/node_modules/xhr2-cookies/dist/index.js.map deleted file mode 100644 index f7421cbb..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;AAAA,wCAAmC;AACnC,iFAA4E;AAAnE,oEAAA,yBAAyB,CAAA"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.d.ts b/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.d.ts deleted file mode 100644 index 28d4f479..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { XMLHttpRequestEventTarget } from './xml-http-request-event-target'; -export declare class ProgressEvent { - type: string; - bubbles: boolean; - cancelable: boolean; - target: XMLHttpRequestEventTarget; - loaded: number; - lengthComputable: boolean; - total: number; - constructor(type: string); -} diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.js b/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.js deleted file mode 100644 index 9ed411ae..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var ProgressEvent = /** @class */ (function () { - function ProgressEvent(type) { - this.type = type; - this.bubbles = false; - this.cancelable = false; - this.loaded = 0; - this.lengthComputable = false; - this.total = 0; - } - return ProgressEvent; -}()); -exports.ProgressEvent = ProgressEvent; -//# sourceMappingURL=progress-event.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.js.map b/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.js.map deleted file mode 100644 index fb763b44..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/progress-event.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"progress-event.js","sourceRoot":"","sources":["../progress-event.ts"],"names":[],"mappings":";;AAEA;IAQC,uBAAoB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QAPhC,YAAO,GAAG,KAAK,CAAC;QAChB,eAAU,GAAG,KAAK,CAAC;QAEnB,WAAM,GAAG,CAAC,CAAC;QACX,qBAAgB,GAAG,KAAK,CAAC;QACzB,UAAK,GAAG,CAAC,CAAC;IAEyB,CAAC;IACrC,oBAAC;AAAD,CAAC,AATD,IASC;AATY,sCAAa"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.d.ts b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.d.ts deleted file mode 100644 index 13732a64..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ProgressEvent } from './progress-event'; -export declare type ProgressEventListener = (event: ProgressEvent) => void; -export declare type ProgressEventListenerObject = { - handleEvent(event: ProgressEvent): void; -}; -export declare type ProgressEventListenerOrEventListenerObject = ProgressEventListener | ProgressEventListenerObject; -export declare class XMLHttpRequestEventTarget { - onloadstart: ProgressEventListener | null; - onprogress: ProgressEventListener | null; - onabort: ProgressEventListener | null; - onerror: ProgressEventListener | null; - onload: ProgressEventListener | null; - ontimeout: ProgressEventListener | null; - onloadend: ProgressEventListener | null; - private listeners; - addEventListener(eventType: string, listener?: ProgressEventListenerOrEventListenerObject): void; - removeEventListener(eventType: string, listener?: ProgressEventListenerOrEventListenerObject): void; - dispatchEvent(event: ProgressEvent): boolean; -} diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js deleted file mode 100644 index d9370430..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var XMLHttpRequestEventTarget = /** @class */ (function () { - function XMLHttpRequestEventTarget() { - this.listeners = {}; - } - XMLHttpRequestEventTarget.prototype.addEventListener = function (eventType, listener) { - eventType = eventType.toLowerCase(); - this.listeners[eventType] = this.listeners[eventType] || []; - this.listeners[eventType].push(listener.handleEvent || listener); - }; - XMLHttpRequestEventTarget.prototype.removeEventListener = function (eventType, listener) { - eventType = eventType.toLowerCase(); - if (!this.listeners[eventType]) { - return; - } - var index = this.listeners[eventType].indexOf(listener.handleEvent || listener); - if (index < 0) { - return; - } - this.listeners[eventType].splice(index, 1); - }; - XMLHttpRequestEventTarget.prototype.dispatchEvent = function (event) { - var eventType = event.type.toLowerCase(); - event.target = this; // TODO: set event.currentTarget? - if (this.listeners[eventType]) { - for (var _i = 0, _a = this.listeners[eventType]; _i < _a.length; _i++) { - var listener_1 = _a[_i]; - listener_1.call(this, event); - } - } - var listener = this["on" + eventType]; - if (listener) { - listener.call(this, event); - } - return true; - }; - return XMLHttpRequestEventTarget; -}()); -exports.XMLHttpRequestEventTarget = XMLHttpRequestEventTarget; -//# sourceMappingURL=xml-http-request-event-target.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js.map b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js.map deleted file mode 100644 index 371d324a..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"xml-http-request-event-target.js","sourceRoot":"","sources":["../xml-http-request-event-target.ts"],"names":[],"mappings":";;AAMA;IAAA;QASS,cAAS,GAAmD,EAAE,CAAC;IAiCxE,CAAC;IA/BA,oDAAgB,GAAhB,UAAiB,SAAiB,EAAE,QAAqD;QACxF,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAE,QAAwC,CAAC,WAAW,IAAK,QAAkC,CAAC,CAAC;IAC9H,CAAC;IACD,uDAAmB,GAAnB,UAAoB,SAAiB,EAAE,QAAqD;QAC3F,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACpC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE3C,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAE,QAAwC,CAAC,WAAW,IAAK,QAAkC,CAAC,CAAC;QAC9I,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE1B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,iDAAa,GAAb,UAAc,KAAoB;QACjC,IAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,iCAAiC;QAEtD,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,CAAiB,UAAyB,EAAzB,KAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAzB,cAAyB,EAAzB,IAAyB;gBAAzC,IAAI,UAAQ,SAAA;gBAChB,UAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC3B;QACF,CAAC;QAED,IAAM,QAAQ,GAAG,IAAI,CAAC,OAAK,SAAW,CAAC,CAAC;QACxC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;IACb,CAAC;IACF,gCAAC;AAAD,CAAC,AA1CD,IA0CC;AA1CY,8DAAyB"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.d.ts b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.d.ts deleted file mode 100644 index 86cfdd6a..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/// -import { XMLHttpRequestEventTarget } from './xml-http-request-event-target'; -import { ClientRequest } from 'http'; -export declare class XMLHttpRequestUpload extends XMLHttpRequestEventTarget { - private _contentType; - private _body; - constructor(); - _reset(): void; - _setData(data?: string | Buffer | ArrayBuffer | ArrayBufferView): void; - _finalizeHeaders(headers: object, loweredHeaders: object): void; - _startUpload(request: ClientRequest): void; -} diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.js b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.js deleted file mode 100644 index 60ddb3ee..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var xml_http_request_event_target_1 = require("./xml-http-request-event-target"); -var XMLHttpRequestUpload = /** @class */ (function (_super) { - __extends(XMLHttpRequestUpload, _super); - function XMLHttpRequestUpload() { - var _this = _super.call(this) || this; - _this._contentType = null; - _this._body = null; - _this._reset(); - return _this; - } - XMLHttpRequestUpload.prototype._reset = function () { - this._contentType = null; - this._body = null; - }; - XMLHttpRequestUpload.prototype._setData = function (data) { - if (data == null) { - return; - } - if (typeof data === 'string') { - if (data.length !== 0) { - this._contentType = 'text/plain;charset=UTF-8'; - } - this._body = new Buffer(data, 'utf-8'); - } - else if (Buffer.isBuffer(data)) { - this._body = data; - } - else if (data instanceof ArrayBuffer) { - var body = new Buffer(data.byteLength); - var view = new Uint8Array(data); - for (var i = 0; i < data.byteLength; i++) { - body[i] = view[i]; - } - this._body = body; - } - else if (data.buffer && data.buffer instanceof ArrayBuffer) { - var body = new Buffer(data.byteLength); - var offset = data.byteOffset; - var view = new Uint8Array(data.buffer); - for (var i = 0; i < data.byteLength; i++) { - body[i] = view[i + offset]; - } - this._body = body; - } - else { - throw new Error("Unsupported send() data " + data); - } - }; - XMLHttpRequestUpload.prototype._finalizeHeaders = function (headers, loweredHeaders) { - if (this._contentType && !loweredHeaders['content-type']) { - headers['Content-Type'] = this._contentType; - } - if (this._body) { - headers['Content-Length'] = this._body.length.toString(); - } - }; - XMLHttpRequestUpload.prototype._startUpload = function (request) { - if (this._body) { - request.write(this._body); - } - request.end(); - }; - return XMLHttpRequestUpload; -}(xml_http_request_event_target_1.XMLHttpRequestEventTarget)); -exports.XMLHttpRequestUpload = XMLHttpRequestUpload; -//# sourceMappingURL=xml-http-request-upload.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.js.map b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.js.map deleted file mode 100644 index 3799d945..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request-upload.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"xml-http-request-upload.js","sourceRoot":"","sources":["../xml-http-request-upload.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iFAA4E;AAG5E;IAA0C,wCAAyB;IAIlE;QAAA,YACC,iBAAO,SAEP;QANO,kBAAY,GAAkB,IAAI,CAAC;QACnC,WAAK,GAAG,IAAI,CAAC;QAIpB,KAAI,CAAC,MAAM,EAAE,CAAC;;IACf,CAAC;IAED,qCAAM,GAAN;QACC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,uCAAQ,GAAR,UAAS,IAAsD;QAC9D,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE7B,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;YAC9B,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,YAAY,GAAG,0BAA0B,CAAC;YAChD,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC,CAAC,CAAC;YACxC,IAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAChE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC;YAC9D,IAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,IAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC/B,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAAC,CAAC;YACzE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,IAAI,CAAC,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,6BAA2B,IAAM,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;IAED,+CAAgB,GAAhB,UAAiB,OAAe,EAAE,cAAsB;QACvD,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7C,CAAC;QACD,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1D,CAAC;IACF,CAAC;IAED,2CAAY,GAAZ,UAAa,OAAsB;QAClC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;IACf,CAAC;IACF,2BAAC;AAAD,CAAC,AArDD,CAA0C,yDAAyB,GAqDlE;AArDY,oDAAoB"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.d.ts b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.d.ts deleted file mode 100644 index b4a2329a..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.d.ts +++ /dev/null @@ -1,102 +0,0 @@ -/// -import { ProgressEvent } from './progress-event'; -import { InvalidStateError, NetworkError, SecurityError, SyntaxError } from './errors'; -import { ProgressEventListener, XMLHttpRequestEventTarget } from './xml-http-request-event-target'; -import { XMLHttpRequestUpload } from './xml-http-request-upload'; -import { Url } from 'url'; -import { Agent as HttpAgent } from 'http'; -import { Agent as HttpsAgent } from 'https'; -export interface XMLHttpRequestOptions { - anon?: boolean; -} -export interface XHRUrl extends Url { - method?: string; -} -export declare class XMLHttpRequest extends XMLHttpRequestEventTarget { - static ProgressEvent: typeof ProgressEvent; - static InvalidStateError: typeof InvalidStateError; - static NetworkError: typeof NetworkError; - static SecurityError: typeof SecurityError; - static SyntaxError: typeof SyntaxError; - static XMLHttpRequestUpload: typeof XMLHttpRequestUpload; - static UNSENT: number; - static OPENED: number; - static HEADERS_RECEIVED: number; - static LOADING: number; - static DONE: number; - static cookieJar: any; - UNSENT: number; - OPENED: number; - HEADERS_RECEIVED: number; - LOADING: number; - DONE: number; - onreadystatechange: ProgressEventListener | null; - readyState: number; - response: string | ArrayBuffer | Buffer | object | null; - responseText: string; - responseType: string; - status: number; - statusText: string; - timeout: number; - upload: XMLHttpRequestUpload; - responseUrl: string; - withCredentials: boolean; - nodejsHttpAgent: HttpsAgent; - nodejsHttpsAgent: HttpsAgent; - nodejsBaseUrl: string | null; - private _anonymous; - private _method; - private _url; - private _sync; - private _headers; - private _loweredHeaders; - private _mimeOverride; - private _request; - private _response; - private _responseParts; - private _responseHeaders; - private _aborting; - private _error; - private _loadedBytes; - private _totalBytes; - private _lengthComputable; - private _restrictedMethods; - private _restrictedHeaders; - private _privateHeaders; - private _userAgent; - constructor(options?: XMLHttpRequestOptions); - open(method: string, url: string, async?: boolean, user?: string, password?: string): void; - setRequestHeader(name: string, value: any): void; - send(data?: string | ArrayBuffer): void; - abort(): void; - getResponseHeader(name: string): string; - getAllResponseHeaders(): string; - overrideMimeType(mimeType: string): void; - nodejsSet(options: { - httpAgent?: HttpAgent; - httpsAgent?: HttpsAgent; - baseUrl?: string; - }): void; - static nodejsSet(options: { - httpAgent?: HttpAgent; - httpsAgent?: HttpsAgent; - baseUrl?: string; - }): void; - private _setReadyState(readyState); - private _sendFile(data); - private _sendHttp(data?); - private _sendHxxpRequest(); - private _finalizeHeaders(); - private _onHttpResponse(request, response); - private _onHttpResponseData(response, data); - private _onHttpResponseEnd(response); - private _onHttpResponseClose(response); - private _onHttpTimeout(request); - private _onHttpRequestError(request, error); - private _dispatchProgress(eventType); - private _setError(); - private _parseUrl(urlString, user?, password?); - private _parseResponseHeaders(response); - private _parseResponse(); - private _parseResponseEncoding(); -} diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.js b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.js deleted file mode 100644 index d12254de..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.js +++ /dev/null @@ -1,447 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var http = require("http"); -var https = require("https"); -var os = require("os"); -var url = require("url"); -var progress_event_1 = require("./progress-event"); -var errors_1 = require("./errors"); -var xml_http_request_event_target_1 = require("./xml-http-request-event-target"); -var xml_http_request_upload_1 = require("./xml-http-request-upload"); -var Cookie = require("cookiejar"); -var XMLHttpRequest = /** @class */ (function (_super) { - __extends(XMLHttpRequest, _super); - function XMLHttpRequest(options) { - if (options === void 0) { options = {}; } - var _this = _super.call(this) || this; - _this.UNSENT = XMLHttpRequest.UNSENT; - _this.OPENED = XMLHttpRequest.OPENED; - _this.HEADERS_RECEIVED = XMLHttpRequest.HEADERS_RECEIVED; - _this.LOADING = XMLHttpRequest.LOADING; - _this.DONE = XMLHttpRequest.DONE; - _this.onreadystatechange = null; - _this.readyState = XMLHttpRequest.UNSENT; - _this.response = null; - _this.responseText = ''; - _this.responseType = ''; - _this.status = 0; // TODO: UNSENT? - _this.statusText = ''; - _this.timeout = 0; - _this.upload = new xml_http_request_upload_1.XMLHttpRequestUpload(); - _this.responseUrl = ''; - _this.withCredentials = false; - _this._method = null; - _this._url = null; - _this._sync = false; - _this._headers = {}; - _this._loweredHeaders = {}; - _this._mimeOverride = null; // TODO: is type right? - _this._request = null; - _this._response = null; - _this._responseParts = null; - _this._responseHeaders = null; - _this._aborting = null; // TODO: type? - _this._error = null; // TODO: type? - _this._loadedBytes = 0; - _this._totalBytes = 0; - _this._lengthComputable = false; - _this._restrictedMethods = { CONNECT: true, TRACE: true, TRACK: true }; - _this._restrictedHeaders = { - 'accept-charset': true, - 'accept-encoding': true, - 'access-control-request-headers': true, - 'access-control-request-method': true, - connection: true, - 'content-length': true, - cookie: true, - cookie2: true, - date: true, - dnt: true, - expect: true, - host: true, - 'keep-alive': true, - origin: true, - referer: true, - te: true, - trailer: true, - 'transfer-encoding': true, - upgrade: true, - 'user-agent': true, - via: true - }; - _this._privateHeaders = { 'set-cookie': true, 'set-cookie2': true }; - _this._userAgent = "Mozilla/5.0 (" + os.type() + " " + os.arch() + ") node.js/" + process.versions.node + " v8/" + process.versions.v8; - _this._anonymous = options.anon || false; - return _this; - } - XMLHttpRequest.prototype.open = function (method, url, async, user, password) { - if (async === void 0) { async = true; } - method = method.toUpperCase(); - if (this._restrictedMethods[method]) { - throw new XMLHttpRequest.SecurityError("HTTP method " + method + " is not allowed in XHR"); - } - ; - var xhrUrl = this._parseUrl(url, user, password); - if (this.readyState === XMLHttpRequest.HEADERS_RECEIVED || this.readyState === XMLHttpRequest.LOADING) { - // TODO(pwnall): terminate abort(), terminate send() - } - this._method = method; - this._url = xhrUrl; - this._sync = !async; - this._headers = {}; - this._loweredHeaders = {}; - this._mimeOverride = null; - this._setReadyState(XMLHttpRequest.OPENED); - this._request = null; - this._response = null; - this.status = 0; - this.statusText = ''; - this._responseParts = []; - this._responseHeaders = null; - this._loadedBytes = 0; - this._totalBytes = 0; - this._lengthComputable = false; - }; - XMLHttpRequest.prototype.setRequestHeader = function (name, value) { - if (this.readyState !== XMLHttpRequest.OPENED) { - throw new XMLHttpRequest.InvalidStateError('XHR readyState must be OPENED'); - } - var loweredName = name.toLowerCase(); - if (this._restrictedHeaders[loweredName] || /^sec-/.test(loweredName) || /^proxy-/.test(loweredName)) { - console.warn("Refused to set unsafe header \"" + name + "\""); - return; - } - value = value.toString(); - if (this._loweredHeaders[loweredName] != null) { - name = this._loweredHeaders[loweredName]; - this._headers[name] = this._headers[name] + ", " + value; - } - else { - this._loweredHeaders[loweredName] = name; - this._headers[name] = value; - } - }; - XMLHttpRequest.prototype.send = function (data) { - if (this.readyState !== XMLHttpRequest.OPENED) { - throw new XMLHttpRequest.InvalidStateError('XHR readyState must be OPENED'); - } - if (this._request) { - throw new XMLHttpRequest.InvalidStateError('send() already called'); - } - switch (this._url.protocol) { - case 'file:': - return this._sendFile(data); - case 'http:': - case 'https:': - return this._sendHttp(data); - default: - throw new XMLHttpRequest.NetworkError("Unsupported protocol " + this._url.protocol); - } - }; - XMLHttpRequest.prototype.abort = function () { - if (this._request == null) { - return; - } - this._request.abort(); - this._setError(); - this._dispatchProgress('abort'); - this._dispatchProgress('loadend'); - }; - XMLHttpRequest.prototype.getResponseHeader = function (name) { - if (this._responseHeaders == null || name == null) { - return null; - } - var loweredName = name.toLowerCase(); - return this._responseHeaders.hasOwnProperty(loweredName) - ? this._responseHeaders[name.toLowerCase()] - : null; - }; - XMLHttpRequest.prototype.getAllResponseHeaders = function () { - var _this = this; - if (this._responseHeaders == null) { - return ''; - } - return Object.keys(this._responseHeaders).map(function (key) { return key + ": " + _this._responseHeaders[key]; }).join('\r\n'); - }; - XMLHttpRequest.prototype.overrideMimeType = function (mimeType) { - if (this.readyState === XMLHttpRequest.LOADING || this.readyState === XMLHttpRequest.DONE) { - throw new XMLHttpRequest.InvalidStateError('overrideMimeType() not allowed in LOADING or DONE'); - } - this._mimeOverride = mimeType.toLowerCase(); - }; - XMLHttpRequest.prototype.nodejsSet = function (options) { - this.nodejsHttpAgent = options.httpAgent || this.nodejsHttpAgent; - this.nodejsHttpsAgent = options.httpsAgent || this.nodejsHttpsAgent; - if (options.hasOwnProperty('baseUrl')) { - if (options.baseUrl != null) { - var parsedUrl = url.parse(options.baseUrl, false, true); - if (!parsedUrl.protocol) { - throw new XMLHttpRequest.SyntaxError("baseUrl must be an absolute URL"); - } - } - this.nodejsBaseUrl = options.baseUrl; - } - }; - XMLHttpRequest.nodejsSet = function (options) { - XMLHttpRequest.prototype.nodejsSet(options); - }; - XMLHttpRequest.prototype._setReadyState = function (readyState) { - this.readyState = readyState; - this.dispatchEvent(new progress_event_1.ProgressEvent('readystatechange')); - }; - XMLHttpRequest.prototype._sendFile = function (data) { - // TODO - throw new Error('Protocol file: not implemented'); - }; - XMLHttpRequest.prototype._sendHttp = function (data) { - if (this._sync) { - throw new Error('Synchronous XHR processing not implemented'); - } - if (data && (this._method === 'GET' || this._method === 'HEAD')) { - console.warn("Discarding entity body for " + this._method + " requests"); - data = null; - } - else { - data = data || ''; - } - this.upload._setData(data); - this._finalizeHeaders(); - this._sendHxxpRequest(); - }; - XMLHttpRequest.prototype._sendHxxpRequest = function () { - var _this = this; - if (this.withCredentials) { - var cookie = XMLHttpRequest.cookieJar - .getCookies(Cookie.CookieAccessInfo(this._url.hostname, this._url.pathname, this._url.protocol === 'https:')).toValueString(); - this._headers.cookie = this._headers.cookie2 = cookie; - } - var _a = this._url.protocol === 'http:' ? [http, this.nodejsHttpAgent] : [https, this.nodejsHttpsAgent], hxxp = _a[0], agent = _a[1]; - var requestMethod = hxxp.request.bind(hxxp); - var request = requestMethod({ - hostname: this._url.hostname, - port: +this._url.port, - path: this._url.path, - auth: this._url.auth, - method: this._method, - headers: this._headers, - agent: agent - }); - this._request = request; - if (this.timeout) { - request.setTimeout(this.timeout, function () { return _this._onHttpTimeout(request); }); - } - request.on('response', function (response) { return _this._onHttpResponse(request, response); }); - request.on('error', function (error) { return _this._onHttpRequestError(request, error); }); - this.upload._startUpload(request); - if (this._request === request) { - this._dispatchProgress('loadstart'); - } - }; - XMLHttpRequest.prototype._finalizeHeaders = function () { - this._headers = __assign({}, this._headers, { Connection: 'keep-alive', Host: this._url.host, 'User-Agent': this._userAgent }, this._anonymous ? { Referer: 'about:blank' } : {}); - this.upload._finalizeHeaders(this._headers, this._loweredHeaders); - }; - XMLHttpRequest.prototype._onHttpResponse = function (request, response) { - var _this = this; - if (this._request !== request) { - return; - } - if (this.withCredentials && (response.headers['set-cookie'] || response.headers['set-cookie2'])) { - XMLHttpRequest.cookieJar - .setCookies(response.headers['set-cookie'] || response.headers['set-cookie2']); - } - if ([301, 302, 303, 307, 308].indexOf(response.statusCode) >= 0) { - this._url = this._parseUrl(response.headers.location); - this._method = 'GET'; - if (this._loweredHeaders['content-type']) { - delete this._headers[this._loweredHeaders['content-type']]; - delete this._loweredHeaders['content-type']; - } - if (this._headers['Content-Type'] != null) { - delete this._headers['Content-Type']; - } - delete this._headers['Content-Length']; - this.upload._reset(); - this._finalizeHeaders(); - this._sendHxxpRequest(); - return; - } - this._response = response; - this._response.on('data', function (data) { return _this._onHttpResponseData(response, data); }); - this._response.on('end', function () { return _this._onHttpResponseEnd(response); }); - this._response.on('close', function () { return _this._onHttpResponseClose(response); }); - this.responseUrl = this._url.href.split('#')[0]; - this.status = response.statusCode; - this.statusText = http.STATUS_CODES[this.status]; - this._parseResponseHeaders(response); - var lengthString = this._responseHeaders['content-length'] || ''; - this._totalBytes = +lengthString; - this._lengthComputable = !!lengthString; - this._setReadyState(XMLHttpRequest.HEADERS_RECEIVED); - }; - XMLHttpRequest.prototype._onHttpResponseData = function (response, data) { - if (this._response !== response) { - return; - } - this._responseParts.push(new Buffer(data)); - this._loadedBytes += data.length; - if (this.readyState !== XMLHttpRequest.LOADING) { - this._setReadyState(XMLHttpRequest.LOADING); - } - this._dispatchProgress('progress'); - }; - XMLHttpRequest.prototype._onHttpResponseEnd = function (response) { - if (this._response !== response) { - return; - } - this._parseResponse(); - this._request = null; - this._response = null; - this._setReadyState(XMLHttpRequest.DONE); - this._dispatchProgress('load'); - this._dispatchProgress('loadend'); - }; - XMLHttpRequest.prototype._onHttpResponseClose = function (response) { - if (this._response !== response) { - return; - } - var request = this._request; - this._setError(); - request.abort(); - this._setReadyState(XMLHttpRequest.DONE); - this._dispatchProgress('error'); - this._dispatchProgress('loadend'); - }; - XMLHttpRequest.prototype._onHttpTimeout = function (request) { - if (this._request !== request) { - return; - } - this._setError(); - request.abort(); - this._setReadyState(XMLHttpRequest.DONE); - this._dispatchProgress('timeout'); - this._dispatchProgress('loadend'); - }; - XMLHttpRequest.prototype._onHttpRequestError = function (request, error) { - if (this._request !== request) { - return; - } - this._setError(); - request.abort(); - this._setReadyState(XMLHttpRequest.DONE); - this._dispatchProgress('error'); - this._dispatchProgress('loadend'); - }; - XMLHttpRequest.prototype._dispatchProgress = function (eventType) { - var event = new XMLHttpRequest.ProgressEvent(eventType); - event.lengthComputable = this._lengthComputable; - event.loaded = this._loadedBytes; - event.total = this._totalBytes; - this.dispatchEvent(event); - }; - XMLHttpRequest.prototype._setError = function () { - this._request = null; - this._response = null; - this._responseHeaders = null; - this._responseParts = null; - }; - XMLHttpRequest.prototype._parseUrl = function (urlString, user, password) { - var absoluteUrl = this.nodejsBaseUrl == null ? urlString : url.resolve(this.nodejsBaseUrl, urlString); - var xhrUrl = url.parse(absoluteUrl, false, true); - xhrUrl.hash = null; - var _a = (xhrUrl.auth || '').split(':'), xhrUser = _a[0], xhrPassword = _a[1]; - if (xhrUser || xhrPassword || user || password) { - xhrUrl.auth = (user || xhrUser || '') + ":" + (password || xhrPassword || ''); - } - return xhrUrl; - }; - XMLHttpRequest.prototype._parseResponseHeaders = function (response) { - this._responseHeaders = {}; - for (var name_1 in response.headers) { - var loweredName = name_1.toLowerCase(); - if (this._privateHeaders[loweredName]) { - continue; - } - this._responseHeaders[loweredName] = response.headers[name_1]; - } - if (this._mimeOverride != null) { - this._responseHeaders['content-type'] = this._mimeOverride; - } - }; - XMLHttpRequest.prototype._parseResponse = function () { - var buffer = Buffer.concat(this._responseParts); - this._responseParts = null; - switch (this.responseType) { - case 'json': - this.responseText = null; - try { - this.response = JSON.parse(buffer.toString('utf-8')); - } - catch (_a) { - this.response = null; - } - return; - case 'buffer': - this.responseText = null; - this.response = buffer; - return; - case 'arraybuffer': - this.responseText = null; - var arrayBuffer = new ArrayBuffer(buffer.length); - var view = new Uint8Array(arrayBuffer); - for (var i = 0; i < buffer.length; i++) { - view[i] = buffer[i]; - } - this.response = arrayBuffer; - return; - case 'text': - default: - try { - this.responseText = buffer.toString(this._parseResponseEncoding()); - } - catch (_b) { - this.responseText = buffer.toString('binary'); - } - this.response = this.responseText; - } - }; - XMLHttpRequest.prototype._parseResponseEncoding = function () { - return /;\s*charset=(.*)$/.exec(this._responseHeaders['content-type'] || '')[1] || 'utf-8'; - }; - XMLHttpRequest.ProgressEvent = progress_event_1.ProgressEvent; - XMLHttpRequest.InvalidStateError = errors_1.InvalidStateError; - XMLHttpRequest.NetworkError = errors_1.NetworkError; - XMLHttpRequest.SecurityError = errors_1.SecurityError; - XMLHttpRequest.SyntaxError = errors_1.SyntaxError; - XMLHttpRequest.XMLHttpRequestUpload = xml_http_request_upload_1.XMLHttpRequestUpload; - XMLHttpRequest.UNSENT = 0; - XMLHttpRequest.OPENED = 1; - XMLHttpRequest.HEADERS_RECEIVED = 2; - XMLHttpRequest.LOADING = 3; - XMLHttpRequest.DONE = 4; - XMLHttpRequest.cookieJar = Cookie.CookieJar(); - return XMLHttpRequest; -}(xml_http_request_event_target_1.XMLHttpRequestEventTarget)); -exports.XMLHttpRequest = XMLHttpRequest; -XMLHttpRequest.prototype.nodejsHttpAgent = http.globalAgent; -XMLHttpRequest.prototype.nodejsHttpsAgent = https.globalAgent; -XMLHttpRequest.prototype.nodejsBaseUrl = null; -//# sourceMappingURL=xml-http-request.js.map \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.js.map b/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.js.map deleted file mode 100644 index 1ecebc93..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/dist/xml-http-request.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"xml-http-request.js","sourceRoot":"","sources":["../xml-http-request.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,2BAA6B;AAC7B,6BAA+B;AAC/B,uBAAyB;AACzB,yBAA2B;AAC3B,mDAAiD;AACjD,mCAAuF;AACvF,iFAAmG;AACnG,qEAAiE;AAIjE,kCAAoC;AASpC;IAAoC,kCAAyB;IAmF5D,wBAAY,OAAmC;QAAnC,wBAAA,EAAA,YAAmC;QAA/C,YACC,iBAAO,SAEP;QAtED,YAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QAC/B,YAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QAC/B,sBAAgB,GAAG,cAAc,CAAC,gBAAgB,CAAC;QACnD,aAAO,GAAG,cAAc,CAAC,OAAO,CAAC;QACjC,UAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QAE3B,wBAAkB,GAAiC,IAAI,CAAC;QACxD,gBAAU,GAAW,cAAc,CAAC,MAAM,CAAC;QAE3C,cAAQ,GAAkD,IAAI,CAAC;QAC/D,kBAAY,GAAG,EAAE,CAAC;QAClB,kBAAY,GAAG,EAAE,CAAC;QAClB,YAAM,GAAG,CAAC,CAAC,CAAC,gBAAgB;QAC5B,gBAAU,GAAG,EAAE,CAAC;QAChB,aAAO,GAAG,CAAC,CAAC;QACZ,YAAM,GAAG,IAAI,8CAAoB,EAAE,CAAC;QACpC,iBAAW,GAAG,EAAE,CAAC;QACjB,qBAAe,GAAG,KAAK,CAAC;QAOhB,aAAO,GAAkB,IAAI,CAAC;QAC9B,UAAI,GAAkB,IAAI,CAAC;QAC3B,WAAK,GAAG,KAAK,CAAC;QACd,cAAQ,GAA+B,EAAE,CAAC;QAC1C,qBAAe,GAAwC,EAAE,CAAC;QAC1D,mBAAa,GAAkB,IAAI,CAAC,CAAC,uBAAuB;QAC5D,cAAQ,GAAyB,IAAI,CAAC;QACtC,eAAS,GAA2B,IAAI,CAAC;QACzC,oBAAc,GAAoB,IAAI,CAAC;QACvC,sBAAgB,GAA+C,IAAI,CAAC;QACpE,eAAS,GAAG,IAAI,CAAC,CAAC,cAAc;QAChC,YAAM,GAAG,IAAI,CAAC,CAAC,cAAc;QAC7B,kBAAY,GAAG,CAAC,CAAC;QACjB,iBAAW,GAAG,CAAC,CAAC;QAChB,uBAAiB,GAAG,KAAK,CAAC;QAE1B,wBAAkB,GAAG,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;QAC/D,wBAAkB,GAAG;YAC5B,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,IAAI;YACvB,gCAAgC,EAAE,IAAI;YACtC,+BAA+B,EAAE,IAAI;YACrC,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,IAAI;YACtB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI;YACb,mBAAmB,EAAE,IAAI;YACzB,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,IAAI;YAClB,GAAG,EAAE,IAAI;SACT,CAAC;QACM,qBAAe,GAAG,EAAC,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAC,CAAC;QAC5D,gBAAU,GAAG,kBAAgB,EAAE,CAAC,IAAI,EAAE,SAAI,EAAE,CAAC,IAAI,EAAE,kBAAa,OAAO,CAAC,QAAQ,CAAC,IAAI,YAAO,OAAO,CAAC,QAAQ,CAAC,EAAI,CAAC;QAIzH,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;;IACzC,CAAC;IAED,6BAAI,GAAJ,UAAK,MAAc,EAAE,GAAW,EAAE,KAAY,EAAE,IAAa,EAAE,QAAiB;QAA9C,sBAAA,EAAA,YAAY;QAC7C,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9B,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,IAAI,cAAc,CAAC,aAAa,CAAC,iBAAe,MAAM,2BAAwB,CAAC,CAAA;QAAA,CAAC;QAAA,CAAC;QAE9H,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEnD,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACvG,oDAAoD;QACrD,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,yCAAgB,GAAhB,UAAiB,IAAY,EAAE,KAAU;QACxC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;YAAC,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;QAAC,CAAC;QAE/H,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACtG,OAAO,CAAC,IAAI,CAAC,oCAAiC,IAAI,OAAG,CAAC,CAAC;YACvD,MAAM,CAAC;QACR,CAAC;QAED,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzB,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAC/C,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAK,KAAO,CAAC;QAC1D,CAAC;QAAC,IAAI,CAAC,CAAC;YACP,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,6BAAI,GAAJ,UAAK,IAA2B;QAC/B,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;YAAC,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;QAAC,CAAC;QAC/H,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAC,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;QAAC,CAAC;QAE3F,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7B,KAAK,OAAO;gBACX,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7B,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ;gBACZ,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7B;gBACC,MAAM,IAAI,cAAc,CAAC,YAAY,CAAC,0BAAwB,IAAI,CAAC,IAAI,CAAC,QAAU,CAAC,CAAC;QACrF,CAAC;IACF,CAAC;IAED,8BAAK,GAAL;QACC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAEtC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,0CAAiB,GAAjB,UAAkB,IAAY;QAC7B,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC;QAAC,CAAC;QACnE,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC;IACT,CAAC;IAED,8CAAqB,GAArB;QAAA,iBAGC;QAFA,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,EAAE,CAAC;QAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAG,GAAG,UAAK,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAG,EAAvC,CAAuC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5G,CAAC;IAED,yCAAgB,GAAhB,UAAiB,QAAgB;QAChC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YAAC,MAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,mDAAmD,CAAC,CAAC;QAAC,CAAC;QAC/L,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;IAED,kCAAS,GAAT,UAAU,OAA4E;QACrF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC;QACjE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC;QACpE,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACvC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC;gBAC7B,IAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC1D,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACzB,MAAM,IAAI,cAAc,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAA;gBACxE,CAAC;YACF,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;QACtC,CAAC;IACF,CAAC;IAEM,wBAAS,GAAhB,UAAiB,OAA4E;QAC5F,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEO,uCAAc,GAAtB,UAAuB,UAAkB;QACxC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,8BAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,kCAAS,GAAjB,UAAkB,IAAS;QAC1B,OAAO;QACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACnD,CAAC;IAEO,kCAAS,GAAjB,UAAkB,IAA2B;QAC5C,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAAC,CAAC;QAClF,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,gCAA8B,IAAI,CAAC,OAAO,cAAW,CAAC,CAAC;YACpE,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;QAAC,IAAI,CAAC,CAAC;YACP,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAEO,yCAAgB,GAAxB;QAAA,iBA6BC;QA5BA,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC1B,IAAM,MAAM,GAAG,cAAc,CAAC,SAAS;iBACrC,UAAU,CACV,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAChG,CAAC,aAAa,EAAE,CAAC;YAEnB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC;QACvD,CAAC;QAEK,IAAA,mGAA8G,EAA7G,YAAI,EAAE,aAAK,CAAmG;QACrH,IAAM,aAAa,GAAmD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9F,IAAM,OAAO,GAAG,aAAa,CAAC;YAC7B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YACpB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,KAAK,OAAA;SACL,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAA5B,CAA4B,CAAC,CAAC;QAAC,CAAC;QAC3F,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,UAAA,QAAQ,IAAI,OAAA,KAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAvC,CAAuC,CAAC,CAAC;QAC5E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAxC,CAAwC,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAElC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC;IACxE,CAAC;IAEO,yCAAgB,GAAxB;QACC,IAAI,CAAC,QAAQ,gBACT,IAAI,CAAC,QAAQ,IAChB,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EACpB,YAAY,EAAE,IAAI,CAAC,UAAU,IAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAClD,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC;IAEO,wCAAe,GAAvB,UAAwB,OAAsB,EAAE,QAAyB;QAAzE,iBAyCC;QAxCA,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE1C,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACjG,cAAc,CAAC,SAAS;iBACtB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC7C,CAAC;YACD,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAEvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,MAAM,CAAC;QACR,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAA,IAAI,IAAI,OAAA,KAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAxC,CAAwC,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAM,OAAA,KAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAjC,CAAiC,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAnC,CAAmC,CAAC,CAAC;QAEtE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QACnE,IAAI,CAAC,WAAW,GAAG,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,YAAY,CAAC;QAExC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC;IAEO,4CAAmB,GAA3B,UAA4B,QAAyB,EAAE,IAAqB;QAC3E,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAW,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC;QAEjC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAEO,2CAAkB,GAA1B,UAA2B,QAAyB;QACnD,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE5C,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEO,6CAAoB,GAA5B,UAA6B,QAAyB;QACrD,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE5C,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEO,uCAAc,GAAtB,UAAuB,OAAsB;QAC5C,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEO,4CAAmB,GAA3B,UAA4B,OAAsB,EAAE,KAAY;QAC/D,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC;QAAC,CAAC;QAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEO,0CAAiB,GAAzB,UAA0B,SAAiB;QAC1C,IAAM,KAAK,GAAG,IAAI,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC1D,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAEO,kCAAS,GAAjB;QACC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,kCAAS,GAAjB,UAAkB,SAAiB,EAAE,IAAa,EAAE,QAAiB;QACpE,IAAM,WAAW,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACxG,IAAM,MAAM,GAAW,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAE3D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAEb,IAAA,mCAAuD,EAAtD,eAAO,EAAE,mBAAW,CAAmC;QAC9D,EAAE,CAAC,CAAC,OAAO,IAAI,WAAW,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,GAAG,CAAG,IAAI,IAAI,OAAO,IAAI,EAAE,WAAI,QAAQ,IAAI,WAAW,IAAI,EAAE,CAAE,CAAC;QAC3E,CAAC;QAED,MAAM,CAAC,MAAM,CAAC;IACf,CAAC;IAEO,8CAAqB,GAA7B,UAA8B,QAAyB;QACtD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,IAAI,MAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACnC,IAAM,WAAW,GAAG,MAAI,CAAC,WAAW,EAAE,CAAC;YACvC,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAAC,QAAQ,CAAC;YAAC,CAAC;YACpD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAI,CAAC,CAAC;QAC7D,CAAC;QACD,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC5D,CAAC;IACF,CAAC;IAEO,uCAAc,GAAtB;QACC,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC5B,KAAK,MAAM;gBACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC;oBACJ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtD,CAAC;gBAAC,KAAK,CAAC,CAAC,IAAD,CAAC;oBACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACtB,CAAC;gBACD,MAAM,CAAC;YACR,KAAK,QAAQ;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;gBACvB,MAAM,CAAC;YACR,KAAK,aAAa;gBACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAM,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAM,IAAI,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;gBACzC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAChE,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;gBAC5B,MAAM,CAAC;YACR,KAAK,MAAM,CAAC;YACZ;gBACC,IAAI,CAAC;oBACJ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;gBACpE,CAAC;gBAAC,KAAK,CAAC,CAAC,IAAD,CAAC;oBACR,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC/C,CAAC;gBACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;QACnC,CAAC;IACF,CAAC;IAEO,+CAAsB,GAA9B;QACC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAC5F,CAAC;IAzbM,4BAAa,GAAG,8BAAa,CAAC;IAC9B,gCAAiB,GAAG,0BAAiB,CAAC;IACtC,2BAAY,GAAG,qBAAY,CAAC;IAC5B,4BAAa,GAAG,sBAAa,CAAC;IAC9B,0BAAW,GAAG,oBAAW,CAAC;IAC1B,mCAAoB,GAAG,8CAAoB,CAAC;IAE5C,qBAAM,GAAG,CAAC,CAAC;IACX,qBAAM,GAAG,CAAC,CAAC;IACX,+BAAgB,GAAG,CAAC,CAAC;IACrB,sBAAO,GAAG,CAAC,CAAC;IACZ,mBAAI,GAAG,CAAC,CAAC;IAET,wBAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IA6avC,qBAAC;CAAA,AA3bD,CAAoC,yDAAyB,GA2b5D;AA3bY,wCAAc;AA6b3B,cAAc,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC;AAC5D,cAAc,CAAC,SAAS,CAAC,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC;AAC9D,cAAc,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC"} \ No newline at end of file diff --git a/truebit-implementation/node_modules/xhr2-cookies/package.json b/truebit-implementation/node_modules/xhr2-cookies/package.json deleted file mode 100644 index 588a152e..00000000 --- a/truebit-implementation/node_modules/xhr2-cookies/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_from": "xhr2-cookies@1.1.0", - "_id": "xhr2-cookies@1.1.0", - "_inBundle": false, - "_integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "_location": "/xhr2-cookies", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "xhr2-cookies@1.1.0", - "name": "xhr2-cookies", - "escapedName": "xhr2-cookies", - "rawSpec": "1.1.0", - "saveSpec": null, - "fetchSpec": "1.1.0" - }, - "_requiredBy": [ - "/web3-providers-http" - ], - "_resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "_shasum": "7d77449d0999197f155cb73b23df72505ed89d48", - "_spec": "xhr2-cookies@1.1.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/web3-providers-http", - "author": { - "name": "Ionut Costica", - "email": "ionut.costica@gmail.com" - }, - "ava": { - "files": [ - "test/*.spec.ts" - ], - "source": [ - "*.ts", - "!dist/**/*" - ] - }, - "bugs": { - "url": "https://github.com/souldreamer/xhr2-cookies/issues" - }, - "bundleDependencies": false, - "dependencies": { - "cookiejar": "^2.1.1" - }, - "deprecated": false, - "description": "XMLHttpRequest polyfill for node.js", - "devDependencies": { - "@types/body-parser": "^1.16.8", - "@types/cookie-parser": "^1.4.1", - "@types/express": "^4.0.39", - "@types/morgan": "^1.7.35", - "@types/node": "^6", - "ava": "^0.23.0", - "ava-ts": "^0.23.0", - "body-parser": "^1.18.2", - "cookie-parser": "^1.4.3", - "express": "^4.16.2", - "morgan": "^1.9.0", - "ts-loader": "^2.3.4", - "ts-node": "^3.3.0", - "typescript": "^2.5.2", - "webpack": "^3.5.5" - }, - "homepage": "https://github.com/souldreamer/xhr2-cookies#readme", - "keywords": [ - "XMLHttpRequest", - "cookies", - "xhr2" - ], - "license": "MIT", - "main": "dist/index.js", - "name": "xhr2-cookies", - "repository": { - "type": "git", - "url": "git://github.com/souldreamer/xhr2-cookies.git" - }, - "scripts": { - "prepare": "tsc", - "test": "tsc -p ./test && ava-ts -v" - }, - "types": "dist/index.d.ts", - "version": "1.1.0" -} diff --git a/truebit-implementation/node_modules/xmlhttprequest/.jshintrc b/truebit-implementation/node_modules/xmlhttprequest/.jshintrc deleted file mode 100644 index 3df2adc0..00000000 --- a/truebit-implementation/node_modules/xmlhttprequest/.jshintrc +++ /dev/null @@ -1,26 +0,0 @@ -{ - "node": true, - "browser": false, - "esnext": true, - "bitwise": false, - "camelcase": true, - "curly": true, - "eqeqeq": true, - "eqnull": true, - "immed": true, - "indent": 2, - "latedef": true, - "laxbreak": true, - "newcap": true, - "noarg": true, - "quotmark": "double", - "regexp": true, - "undef": true, - "unused": true, - "strict": true, - "trailing": true, - "smarttabs": true, - "globals": { - "define": false - } -} diff --git a/truebit-implementation/node_modules/xmlhttprequest/.npmignore b/truebit-implementation/node_modules/xmlhttprequest/.npmignore deleted file mode 100644 index 97b5e9bb..00000000 --- a/truebit-implementation/node_modules/xmlhttprequest/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -example -tests - -autotest.watchr diff --git a/truebit-implementation/node_modules/xmlhttprequest/LICENSE b/truebit-implementation/node_modules/xmlhttprequest/LICENSE deleted file mode 100644 index 1c63271b..00000000 --- a/truebit-implementation/node_modules/xmlhttprequest/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - Copyright (c) 2010 passive.ly LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - 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. diff --git a/truebit-implementation/node_modules/xmlhttprequest/README.md b/truebit-implementation/node_modules/xmlhttprequest/README.md deleted file mode 100644 index 50039f96..00000000 --- a/truebit-implementation/node_modules/xmlhttprequest/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# node-XMLHttpRequest # - -node-XMLHttpRequest is a wrapper for the built-in http client to emulate the -browser XMLHttpRequest object. - -This can be used with JS designed for browsers to improve reuse of code and -allow the use of existing libraries. - -Note: This library currently conforms to [XMLHttpRequest 1](http://www.w3.org/TR/XMLHttpRequest/). Version 2.0 will target [XMLHttpRequest Level 2](http://www.w3.org/TR/XMLHttpRequest2/). - -## Usage ## - -Here's how to include the module in your project and use as the browser-based -XHR object. - - var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; - var xhr = new XMLHttpRequest(); - -Note: use the lowercase string "xmlhttprequest" in your require(). On -case-sensitive systems (eg Linux) using uppercase letters won't work. - -## Versions ## - -Prior to 1.4.0 version numbers were arbitrary. From 1.4.0 on they conform to -the standard major.minor.bugfix. 1.x shouldn't necessarily be considered -stable just because it's above 0.x. - -Since the XMLHttpRequest API is stable this library's API is stable as -well. Major version numbers indicate significant core code changes. -Minor versions indicate minor core code changes or better conformity to -the W3C spec. - -## License ## - -MIT license. See LICENSE for full details. - -## Supports ## - -* Async and synchronous requests -* GET, POST, PUT, and DELETE requests -* All spec methods (open, send, abort, getRequestHeader, - getAllRequestHeaders, event methods) -* Requests to all domains - -## Known Issues / Missing Features ## - -For a list of open issues or to report your own visit the [github issues -page](https://github.com/driverdan/node-XMLHttpRequest/issues). - -* Local file access may have unexpected results for non-UTF8 files -* Synchronous requests don't set headers properly -* Synchronous requests freeze node while waiting for response (But that's what you want, right? Stick with async!). -* Some events are missing, such as abort -* Cookies aren't persisted between requests -* Missing XML support diff --git a/truebit-implementation/node_modules/xmlhttprequest/lib/XMLHttpRequest.js b/truebit-implementation/node_modules/xmlhttprequest/lib/XMLHttpRequest.js deleted file mode 100644 index 48939133..00000000 --- a/truebit-implementation/node_modules/xmlhttprequest/lib/XMLHttpRequest.js +++ /dev/null @@ -1,620 +0,0 @@ -/** - * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object. - * - * This can be used with JS designed for browsers to improve reuse of code and - * allow the use of existing libraries. - * - * Usage: include("XMLHttpRequest.js") and use XMLHttpRequest per W3C specs. - * - * @author Dan DeFelippi - * @contributor David Ellis - * @license MIT - */ - -var Url = require("url"); -var spawn = require("child_process").spawn; -var fs = require("fs"); - -exports.XMLHttpRequest = function() { - "use strict"; - - /** - * Private variables - */ - var self = this; - var http = require("http"); - var https = require("https"); - - // Holds http.js objects - var request; - var response; - - // Request settings - var settings = {}; - - // Disable header blacklist. - // Not part of XHR specs. - var disableHeaderCheck = false; - - // Set some default headers - var defaultHeaders = { - "User-Agent": "node-XMLHttpRequest", - "Accept": "*/*", - }; - - var headers = {}; - var headersCase = {}; - - // These headers are not user setable. - // The following are allowed but banned in the spec: - // * user-agent - var forbiddenRequestHeaders = [ - "accept-charset", - "accept-encoding", - "access-control-request-headers", - "access-control-request-method", - "connection", - "content-length", - "content-transfer-encoding", - "cookie", - "cookie2", - "date", - "expect", - "host", - "keep-alive", - "origin", - "referer", - "te", - "trailer", - "transfer-encoding", - "upgrade", - "via" - ]; - - // These request methods are not allowed - var forbiddenRequestMethods = [ - "TRACE", - "TRACK", - "CONNECT" - ]; - - // Send flag - var sendFlag = false; - // Error flag, used when errors occur or abort is called - var errorFlag = false; - - // Event listeners - var listeners = {}; - - /** - * Constants - */ - - this.UNSENT = 0; - this.OPENED = 1; - this.HEADERS_RECEIVED = 2; - this.LOADING = 3; - this.DONE = 4; - - /** - * Public vars - */ - - // Current state - this.readyState = this.UNSENT; - - // default ready state change handler in case one is not set or is set late - this.onreadystatechange = null; - - // Result & response - this.responseText = ""; - this.responseXML = ""; - this.status = null; - this.statusText = null; - - // Whether cross-site Access-Control requests should be made using - // credentials such as cookies or authorization headers - this.withCredentials = false; - - /** - * Private methods - */ - - /** - * Check if the specified header is allowed. - * - * @param string header Header to validate - * @return boolean False if not allowed, otherwise true - */ - var isAllowedHttpHeader = function(header) { - return disableHeaderCheck || (header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1); - }; - - /** - * Check if the specified method is allowed. - * - * @param string method Request method to validate - * @return boolean False if not allowed, otherwise true - */ - var isAllowedHttpMethod = function(method) { - return (method && forbiddenRequestMethods.indexOf(method) === -1); - }; - - /** - * Public methods - */ - - /** - * Open the connection. Currently supports local server requests. - * - * @param string method Connection method (eg GET, POST) - * @param string url URL for the connection. - * @param boolean async Asynchronous connection. Default is true. - * @param string user Username for basic authentication (optional) - * @param string password Password for basic authentication (optional) - */ - this.open = function(method, url, async, user, password) { - this.abort(); - errorFlag = false; - - // Check for valid request method - if (!isAllowedHttpMethod(method)) { - throw new Error("SecurityError: Request method not allowed"); - } - - settings = { - "method": method, - "url": url.toString(), - "async": (typeof async !== "boolean" ? true : async), - "user": user || null, - "password": password || null - }; - - setState(this.OPENED); - }; - - /** - * Disables or enables isAllowedHttpHeader() check the request. Enabled by default. - * This does not conform to the W3C spec. - * - * @param boolean state Enable or disable header checking. - */ - this.setDisableHeaderCheck = function(state) { - disableHeaderCheck = state; - }; - - /** - * Sets a header for the request or appends the value if one is already set. - * - * @param string header Header name - * @param string value Header value - */ - this.setRequestHeader = function(header, value) { - if (this.readyState !== this.OPENED) { - throw new Error("INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN"); - } - if (!isAllowedHttpHeader(header)) { - console.warn("Refused to set unsafe header \"" + header + "\""); - return; - } - if (sendFlag) { - throw new Error("INVALID_STATE_ERR: send flag is true"); - } - header = headersCase[header.toLowerCase()] || header; - headersCase[header.toLowerCase()] = header; - headers[header] = headers[header] ? headers[header] + ', ' + value : value; - }; - - /** - * Gets a header from the server response. - * - * @param string header Name of header to get. - * @return string Text of the header or null if it doesn't exist. - */ - this.getResponseHeader = function(header) { - if (typeof header === "string" - && this.readyState > this.OPENED - && response - && response.headers - && response.headers[header.toLowerCase()] - && !errorFlag - ) { - return response.headers[header.toLowerCase()]; - } - - return null; - }; - - /** - * Gets all the response headers. - * - * @return string A string with all response headers separated by CR+LF - */ - this.getAllResponseHeaders = function() { - if (this.readyState < this.HEADERS_RECEIVED || errorFlag) { - return ""; - } - var result = ""; - - for (var i in response.headers) { - // Cookie headers are excluded - if (i !== "set-cookie" && i !== "set-cookie2") { - result += i + ": " + response.headers[i] + "\r\n"; - } - } - return result.substr(0, result.length - 2); - }; - - /** - * Gets a request header - * - * @param string name Name of header to get - * @return string Returns the request header or empty string if not set - */ - this.getRequestHeader = function(name) { - if (typeof name === "string" && headersCase[name.toLowerCase()]) { - return headers[headersCase[name.toLowerCase()]]; - } - - return ""; - }; - - /** - * Sends the request to the server. - * - * @param string data Optional data to send as request body. - */ - this.send = function(data) { - if (this.readyState !== this.OPENED) { - throw new Error("INVALID_STATE_ERR: connection must be opened before send() is called"); - } - - if (sendFlag) { - throw new Error("INVALID_STATE_ERR: send has already been called"); - } - - var ssl = false, local = false; - var url = Url.parse(settings.url); - var host; - // Determine the server - switch (url.protocol) { - case "https:": - ssl = true; - // SSL & non-SSL both need host, no break here. - case "http:": - host = url.hostname; - break; - - case "file:": - local = true; - break; - - case undefined: - case null: - case "": - host = "localhost"; - break; - - default: - throw new Error("Protocol not supported."); - } - - // Load files off the local filesystem (file://) - if (local) { - if (settings.method !== "GET") { - throw new Error("XMLHttpRequest: Only GET method is supported"); - } - - if (settings.async) { - fs.readFile(url.pathname, "utf8", function(error, data) { - if (error) { - self.handleError(error); - } else { - self.status = 200; - self.responseText = data; - setState(self.DONE); - } - }); - } else { - try { - this.responseText = fs.readFileSync(url.pathname, "utf8"); - this.status = 200; - setState(self.DONE); - } catch(e) { - this.handleError(e); - } - } - - return; - } - - // Default to port 80. If accessing localhost on another port be sure - // to use http://localhost:port/path - var port = url.port || (ssl ? 443 : 80); - // Add query string if one is used - var uri = url.pathname + (url.search ? url.search : ""); - - // Set the defaults if they haven't been set - for (var name in defaultHeaders) { - if (!headersCase[name.toLowerCase()]) { - headers[name] = defaultHeaders[name]; - } - } - - // Set the Host header or the server may reject the request - headers.Host = host; - if (!((ssl && port === 443) || port === 80)) { - headers.Host += ":" + url.port; - } - - // Set Basic Auth if necessary - if (settings.user) { - if (typeof settings.password === "undefined") { - settings.password = ""; - } - var authBuf = new Buffer(settings.user + ":" + settings.password); - headers.Authorization = "Basic " + authBuf.toString("base64"); - } - - // Set content length header - if (settings.method === "GET" || settings.method === "HEAD") { - data = null; - } else if (data) { - headers["Content-Length"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data); - - if (!headers["Content-Type"]) { - headers["Content-Type"] = "text/plain;charset=UTF-8"; - } - } else if (settings.method === "POST") { - // For a post with no data set Content-Length: 0. - // This is required by buggy servers that don't meet the specs. - headers["Content-Length"] = 0; - } - - var options = { - host: host, - port: port, - path: uri, - method: settings.method, - headers: headers, - agent: false, - withCredentials: self.withCredentials - }; - - // Reset error flag - errorFlag = false; - - // Handle async requests - if (settings.async) { - // Use the proper protocol - var doRequest = ssl ? https.request : http.request; - - // Request is being sent, set send flag - sendFlag = true; - - // As per spec, this is called here for historical reasons. - self.dispatchEvent("readystatechange"); - - // Handler for the response - var responseHandler = function responseHandler(resp) { - // Set response var to the response we got back - // This is so it remains accessable outside this scope - response = resp; - // Check for redirect - // @TODO Prevent looped redirects - if (response.statusCode === 301 || response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) { - // Change URL to the redirect location - settings.url = response.headers.location; - var url = Url.parse(settings.url); - // Set host var in case it's used later - host = url.hostname; - // Options for the new request - var newOptions = { - hostname: url.hostname, - port: url.port, - path: url.path, - method: response.statusCode === 303 ? "GET" : settings.method, - headers: headers, - withCredentials: self.withCredentials - }; - - // Issue the new request - request = doRequest(newOptions, responseHandler).on("error", errorHandler); - request.end(); - // @TODO Check if an XHR event needs to be fired here - return; - } - - response.setEncoding("utf8"); - - setState(self.HEADERS_RECEIVED); - self.status = response.statusCode; - - response.on("data", function(chunk) { - // Make sure there's some data - if (chunk) { - self.responseText += chunk; - } - // Don't emit state changes if the connection has been aborted. - if (sendFlag) { - setState(self.LOADING); - } - }); - - response.on("end", function() { - if (sendFlag) { - // Discard the end event if the connection has been aborted - setState(self.DONE); - sendFlag = false; - } - }); - - response.on("error", function(error) { - self.handleError(error); - }); - }; - - // Error handler for the request - var errorHandler = function errorHandler(error) { - self.handleError(error); - }; - - // Create the request - request = doRequest(options, responseHandler).on("error", errorHandler); - - // Node 0.4 and later won't accept empty data. Make sure it's needed. - if (data) { - request.write(data); - } - - request.end(); - - self.dispatchEvent("loadstart"); - } else { // Synchronous - // Create a temporary file for communication with the other Node process - var contentFile = ".node-xmlhttprequest-content-" + process.pid; - var syncFile = ".node-xmlhttprequest-sync-" + process.pid; - fs.writeFileSync(syncFile, "", "utf8"); - // The async request the other Node process executes - var execString = "var http = require('http'), https = require('https'), fs = require('fs');" - + "var doRequest = http" + (ssl ? "s" : "") + ".request;" - + "var options = " + JSON.stringify(options) + ";" - + "var responseText = '';" - + "var req = doRequest(options, function(response) {" - + "response.setEncoding('utf8');" - + "response.on('data', function(chunk) {" - + " responseText += chunk;" - + "});" - + "response.on('end', function() {" - + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText}}), 'utf8');" - + "fs.unlinkSync('" + syncFile + "');" - + "});" - + "response.on('error', function(error) {" - + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: error}), 'utf8');" - + "fs.unlinkSync('" + syncFile + "');" - + "});" - + "}).on('error', function(error) {" - + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: error}), 'utf8');" - + "fs.unlinkSync('" + syncFile + "');" - + "});" - + (data ? "req.write('" + JSON.stringify(data).slice(1,-1).replace(/'/g, "\\'") + "');":"") - + "req.end();"; - // Start the other Node Process, executing this string - var syncProc = spawn(process.argv[0], ["-e", execString]); - while(fs.existsSync(syncFile)) { - // Wait while the sync file is empty - } - var resp = JSON.parse(fs.readFileSync(contentFile, 'utf8')); - // Kill the child process once the file has data - syncProc.stdin.end(); - // Remove the temporary file - fs.unlinkSync(contentFile); - - if (resp.err) { - self.handleError(resp.err); - } else { - response = resp.data; - self.status = resp.data.statusCode; - self.responseText = resp.data.text; - setState(self.DONE); - } - } - }; - - /** - * Called when an error is encountered to deal with it. - */ - this.handleError = function(error) { - this.status = 0; - this.statusText = error; - this.responseText = error.stack; - errorFlag = true; - setState(this.DONE); - this.dispatchEvent('error'); - }; - - /** - * Aborts a request. - */ - this.abort = function() { - if (request) { - request.abort(); - request = null; - } - - headers = defaultHeaders; - this.status = 0; - this.responseText = ""; - this.responseXML = ""; - - errorFlag = true; - - if (this.readyState !== this.UNSENT - && (this.readyState !== this.OPENED || sendFlag) - && this.readyState !== this.DONE) { - sendFlag = false; - setState(this.DONE); - } - this.readyState = this.UNSENT; - this.dispatchEvent('abort'); - }; - - /** - * Adds an event listener. Preferred method of binding to events. - */ - this.addEventListener = function(event, callback) { - if (!(event in listeners)) { - listeners[event] = []; - } - // Currently allows duplicate callbacks. Should it? - listeners[event].push(callback); - }; - - /** - * Remove an event callback that has already been bound. - * Only works on the matching funciton, cannot be a copy. - */ - this.removeEventListener = function(event, callback) { - if (event in listeners) { - // Filter will return a new array with the callback removed - listeners[event] = listeners[event].filter(function(ev) { - return ev !== callback; - }); - } - }; - - /** - * Dispatch any events, including both "on" methods and events attached using addEventListener. - */ - this.dispatchEvent = function(event) { - if (typeof self["on" + event] === "function") { - self["on" + event](); - } - if (event in listeners) { - for (var i = 0, len = listeners[event].length; i < len; i++) { - listeners[event][i].call(self); - } - } - }; - - /** - * Changes readyState and calls onreadystatechange. - * - * @param int state New state - */ - var setState = function(state) { - if (state == self.LOADING || self.readyState !== state) { - self.readyState = state; - - if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) { - self.dispatchEvent("readystatechange"); - } - - if (self.readyState === self.DONE && !errorFlag) { - self.dispatchEvent("load"); - // @TODO figure out InspectorInstrumentation::didLoadXHR(cookie) - self.dispatchEvent("loadend"); - } - } - }; -}; diff --git a/truebit-implementation/node_modules/xmlhttprequest/package.json b/truebit-implementation/node_modules/xmlhttprequest/package.json deleted file mode 100644 index 32dc707c..00000000 --- a/truebit-implementation/node_modules/xmlhttprequest/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "_from": "xmlhttprequest@1.8.0", - "_id": "xmlhttprequest@1.8.0", - "_inBundle": false, - "_integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "_location": "/xmlhttprequest", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "xmlhttprequest@1.8.0", - "name": "xmlhttprequest", - "escapedName": "xmlhttprequest", - "rawSpec": "1.8.0", - "saveSpec": null, - "fetchSpec": "1.8.0" - }, - "_requiredBy": [ - "/ethers" - ], - "_resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "_shasum": "67fe075c5c24fef39f9d65f5f7b7fe75171968fc", - "_spec": "xmlhttprequest@1.8.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/ethers", - "author": { - "name": "Dan DeFelippi", - "url": "http://driverdan.com" - }, - "bugs": { - "url": "http://github.com/driverdan/node-XMLHttpRequest/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "XMLHttpRequest for Node", - "directories": { - "lib": "./lib", - "example": "./example" - }, - "engines": { - "node": ">=0.4.0" - }, - "homepage": "https://github.com/driverdan/node-XMLHttpRequest#readme", - "keywords": [ - "xhr", - "ajax" - ], - "license": "MIT", - "main": "./lib/XMLHttpRequest.js", - "name": "xmlhttprequest", - "repository": { - "type": "git", - "url": "git://github.com/driverdan/node-XMLHttpRequest.git" - }, - "version": "1.8.0" -} diff --git a/truebit-implementation/node_modules/xtend/.jshintrc b/truebit-implementation/node_modules/xtend/.jshintrc deleted file mode 100644 index 77887b5f..00000000 --- a/truebit-implementation/node_modules/xtend/.jshintrc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "maxdepth": 4, - "maxstatements": 200, - "maxcomplexity": 12, - "maxlen": 80, - "maxparams": 5, - - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": false, - "noarg": true, - "noempty": true, - "nonew": true, - "undef": true, - "unused": "vars", - "trailing": true, - - "quotmark": true, - "expr": true, - "asi": true, - - "browser": false, - "esnext": true, - "devel": false, - "node": false, - "nonstandard": false, - - "predef": ["require", "module", "__dirname", "__filename"] -} diff --git a/truebit-implementation/node_modules/xtend/.npmignore b/truebit-implementation/node_modules/xtend/.npmignore deleted file mode 100644 index 3c3629e6..00000000 --- a/truebit-implementation/node_modules/xtend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/truebit-implementation/node_modules/xtend/LICENCE b/truebit-implementation/node_modules/xtend/LICENCE deleted file mode 100644 index 1a14b437..00000000 --- a/truebit-implementation/node_modules/xtend/LICENCE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/xtend/Makefile b/truebit-implementation/node_modules/xtend/Makefile deleted file mode 100644 index d583fcf4..00000000 --- a/truebit-implementation/node_modules/xtend/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -browser: - node ./support/compile - -.PHONY: browser \ No newline at end of file diff --git a/truebit-implementation/node_modules/xtend/README.md b/truebit-implementation/node_modules/xtend/README.md deleted file mode 100644 index 093cb297..00000000 --- a/truebit-implementation/node_modules/xtend/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# xtend - -[![browser support][3]][4] - -[![locked](http://badges.github.io/stability-badges/dist/locked.svg)](http://github.com/badges/stability-badges) - -Extend like a boss - -xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes precedence. - -## Examples - -```js -var extend = require("xtend") - -// extend returns a new object. Does not mutate arguments -var combination = extend({ - a: "a", - b: 'c' -}, { - b: "b" -}) -// { a: "a", b: "b" } -``` - -## Stability status: Locked - -## MIT Licenced - - - [3]: http://ci.testling.com/Raynos/xtend.png - [4]: http://ci.testling.com/Raynos/xtend diff --git a/truebit-implementation/node_modules/xtend/immutable.js b/truebit-implementation/node_modules/xtend/immutable.js deleted file mode 100644 index 94889c9d..00000000 --- a/truebit-implementation/node_modules/xtend/immutable.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/truebit-implementation/node_modules/xtend/mutable.js b/truebit-implementation/node_modules/xtend/mutable.js deleted file mode 100644 index 72debede..00000000 --- a/truebit-implementation/node_modules/xtend/mutable.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = extend - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -function extend(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] - - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - target[key] = source[key] - } - } - } - - return target -} diff --git a/truebit-implementation/node_modules/xtend/package.json b/truebit-implementation/node_modules/xtend/package.json deleted file mode 100644 index 0f97f408..00000000 --- a/truebit-implementation/node_modules/xtend/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_from": "xtend@^4.0.0", - "_id": "xtend@4.0.1", - "_inBundle": false, - "_integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "_location": "/xtend", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "xtend@^4.0.0", - "name": "xtend", - "escapedName": "xtend", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/tar-stream", - "/xhr" - ], - "_resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "_shasum": "a5c6d532be656e23db820efb943a1f04998d63af", - "_spec": "xtend@^4.0.0", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/tar-stream", - "author": { - "name": "Raynos", - "email": "raynos2@gmail.com" - }, - "bugs": { - "url": "https://github.com/Raynos/xtend/issues", - "email": "raynos2@gmail.com" - }, - "bundleDependencies": false, - "contributors": [ - { - "name": "Jake Verbaten" - }, - { - "name": "Matt Esch" - } - ], - "dependencies": {}, - "deprecated": false, - "description": "extend like a boss", - "devDependencies": { - "tape": "~1.1.0" - }, - "engines": { - "node": ">=0.4" - }, - "homepage": "https://github.com/Raynos/xtend", - "keywords": [ - "extend", - "merge", - "options", - "opts", - "object", - "array" - ], - "license": "MIT", - "main": "immutable", - "name": "xtend", - "repository": { - "type": "git", - "url": "git://github.com/Raynos/xtend.git" - }, - "scripts": { - "test": "node test" - }, - "testling": { - "files": "test.js", - "browsers": [ - "ie/7..latest", - "firefox/16..latest", - "firefox/nightly", - "chrome/22..latest", - "chrome/canary", - "opera/12..latest", - "opera/next", - "safari/5.1..latest", - "ipad/6.0..latest", - "iphone/6.0..latest" - ] - }, - "version": "4.0.1" -} diff --git a/truebit-implementation/node_modules/xtend/test.js b/truebit-implementation/node_modules/xtend/test.js deleted file mode 100644 index 093a2b06..00000000 --- a/truebit-implementation/node_modules/xtend/test.js +++ /dev/null @@ -1,83 +0,0 @@ -var test = require("tape") -var extend = require("./") -var mutableExtend = require("./mutable") - -test("merge", function(assert) { - var a = { a: "foo" } - var b = { b: "bar" } - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("replace", function(assert) { - var a = { a: "foo" } - var b = { a: "bar" } - - assert.deepEqual(extend(a, b), { a: "bar" }) - assert.end() -}) - -test("undefined", function(assert) { - var a = { a: undefined } - var b = { b: "foo" } - - assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) - assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) - assert.end() -}) - -test("handle 0", function(assert) { - var a = { a: "default" } - var b = { a: 0 } - - assert.deepEqual(extend(a, b), { a: 0 }) - assert.deepEqual(extend(b, a), { a: "default" }) - assert.end() -}) - -test("is immutable", function (assert) { - var record = {} - - extend(record, { foo: "bar" }) - assert.equal(record.foo, undefined) - assert.end() -}) - -test("null as argument", function (assert) { - var a = { foo: "bar" } - var b = null - var c = void 0 - - assert.deepEqual(extend(b, a, c), { foo: "bar" }) - assert.end() -}) - -test("mutable", function (assert) { - var a = { foo: "bar" } - - mutableExtend(a, { bar: "baz" }) - - assert.equal(a.bar, "baz") - assert.end() -}) - -test("null prototype", function(assert) { - var a = { a: "foo" } - var b = Object.create(null) - b.b = "bar"; - - assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) - assert.end() -}) - -test("null prototype mutable", function (assert) { - var a = { foo: "bar" } - var b = Object.create(null) - b.bar = "baz"; - - mutableExtend(a, b) - - assert.equal(a.bar, "baz") - assert.end() -}) diff --git a/truebit-implementation/node_modules/yaeti/.jscsrc b/truebit-implementation/node_modules/yaeti/.jscsrc deleted file mode 100644 index a37d119c..00000000 --- a/truebit-implementation/node_modules/yaeti/.jscsrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "preset": "crockford", - "validateIndentation": "\t", - "disallowKeywords": ["with"], - "disallowDanglingUnderscores": null -} diff --git a/truebit-implementation/node_modules/yaeti/.jshintrc b/truebit-implementation/node_modules/yaeti/.jshintrc deleted file mode 100644 index 1cca0fab..00000000 --- a/truebit-implementation/node_modules/yaeti/.jshintrc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "bitwise": false, - "curly": true, - "eqeqeq": true, - "forin": true, - "freeze": true, - "latedef": "function", - "noarg": true, - "nonbsp": true, - "nonew": true, - "plusplus": false, - "undef": true, - "unused": true, - "strict": false, - "maxparams": 6, - "maxdepth": 4, - "maxstatements": false, - "maxlen": 200, - "browser": true, - "browserify": true, - "devel": true, - "jquery": false, - "mocha": true, - "node": false, - "shelljs": false, - "worker": false -} diff --git a/truebit-implementation/node_modules/yaeti/.npmignore b/truebit-implementation/node_modules/yaeti/.npmignore deleted file mode 100644 index 2ccbe465..00000000 --- a/truebit-implementation/node_modules/yaeti/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules/ diff --git a/truebit-implementation/node_modules/yaeti/LICENSE b/truebit-implementation/node_modules/yaeti/LICENSE deleted file mode 100644 index a64a4125..00000000 --- a/truebit-implementation/node_modules/yaeti/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Iñaki Baz Castillo, - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/yaeti/README.md b/truebit-implementation/node_modules/yaeti/README.md deleted file mode 100644 index db253a43..00000000 --- a/truebit-implementation/node_modules/yaeti/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# yaeti - -Yet Another [EventTarget](https://developer.mozilla.org/es/docs/Web/API/EventTarget) Implementation. - -The library exposes both the [EventTarget](https://developer.mozilla.org/es/docs/Web/API/EventTarget) interface and the [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event) interface. - - -## Installation - -```bash -$ npm install yaeti --save -``` - - -## Usage - -```javascript -var yaeti = require('yaeti'); - - -// Custom class we want to make an EventTarget. -function Foo() { - // Make Foo an EventTarget. - yaeti.EventTarget.call(this); -} - -// Create an instance. -var foo = new Foo(); - -function listener1() { - console.log('listener1'); -} - -function listener2() { - console.log('listener2'); -} - -foo.addEventListener('bar', listener1); -foo.addEventListener('bar', listener2); -foo.removeEventListener('bar', listener1); - -var event = new yaeti.Event('bar'); - -foo.dispatchEvent(event); - - -// Output: -// => "listener2" -``` - - - -## API - - -#### `yaeti.EventTarget` interface - -Implementation of the [EventTarget](https://developer.mozilla.org/es/docs/Web/API/EventTarget) interface. - -* Make a custom class inherit from `EventTarget`: -```javascript -function Foo() { - yaeti.EventTarget.call(this); -} -``` - -* Make an existing object an `EventTarget`: -```javascript -yaeti.EventTarget.call(obj); -``` - -The interface implements the `addEventListener`, `removeEventListener` and `dispatchEvent` methods as defined by the W3C. - - -##### `listeners` read-only property - -Returns an object whose keys are configured event types (String) and whose values are an array of listeners (functions) for those event types. - - -#### `yaeti.Event` interface - -Implementation of the [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event) interface. - -*NOTE:* Just useful in Node (the browser already exposes the native `Event` interface). - -```javascript -var event = new yaeti.Event('bar'); -``` - - -## Author - -[Iñaki Baz Castillo](https://github.com/ibc) - - -## License - -[MIT](./LICENSE) diff --git a/truebit-implementation/node_modules/yaeti/gulpfile.js b/truebit-implementation/node_modules/yaeti/gulpfile.js deleted file mode 100644 index 294cd9c7..00000000 --- a/truebit-implementation/node_modules/yaeti/gulpfile.js +++ /dev/null @@ -1,23 +0,0 @@ -var - /** - * Dependencies. - */ - gulp = require('gulp'), - jscs = require('gulp-jscs'), - jshint = require('gulp-jshint'), - stylish = require('gulp-jscs-stylish'); - - -gulp.task('lint', function () { - var src = ['gulpfile.js', 'index.js', 'lib/**/*.js']; - - return gulp.src(src) - .pipe(jshint('.jshintrc')) // Enforce good practics. - .pipe(jscs('.jscsrc')) // Enforce style guide. - .pipe(stylish.combineWithHintResults()) - .pipe(jshint.reporter('jshint-stylish', {verbose: true})) - .pipe(jshint.reporter('fail')); -}); - - -gulp.task('default', gulp.task('lint')); diff --git a/truebit-implementation/node_modules/yaeti/index.js b/truebit-implementation/node_modules/yaeti/index.js deleted file mode 100644 index b1e6db47..00000000 --- a/truebit-implementation/node_modules/yaeti/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - EventTarget : require('./lib/EventTarget'), - Event : require('./lib/Event') -}; diff --git a/truebit-implementation/node_modules/yaeti/lib/Event.browser.js b/truebit-implementation/node_modules/yaeti/lib/Event.browser.js deleted file mode 100644 index 0cd5ea68..00000000 --- a/truebit-implementation/node_modules/yaeti/lib/Event.browser.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * In browsers export the native Event interface. - */ - -module.exports = global.Event; diff --git a/truebit-implementation/node_modules/yaeti/lib/Event.js b/truebit-implementation/node_modules/yaeti/lib/Event.js deleted file mode 100644 index cd245a27..00000000 --- a/truebit-implementation/node_modules/yaeti/lib/Event.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Expose the Event class. - */ -module.exports = _Event; - - -function _Event(type) { - this.type = type; - this.isTrusted = false; - - // Set a flag indicating this is not a DOM Event object - this._yaeti = true; -} diff --git a/truebit-implementation/node_modules/yaeti/lib/EventTarget.js b/truebit-implementation/node_modules/yaeti/lib/EventTarget.js deleted file mode 100644 index 403c75bd..00000000 --- a/truebit-implementation/node_modules/yaeti/lib/EventTarget.js +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Expose the _EventTarget class. - */ -module.exports = _EventTarget; - -function _EventTarget() { - // Do nothing if called for a native EventTarget object.. - if (typeof this.addEventListener === 'function') { - return; - } - - this._listeners = {}; - - this.addEventListener = _addEventListener; - this.removeEventListener = _removeEventListener; - this.dispatchEvent = _dispatchEvent; -} - -Object.defineProperties(_EventTarget.prototype, { - listeners: { - get: function () { - return this._listeners; - } - } -}); - -function _addEventListener(type, newListener) { - var - listenersType, - i, listener; - - if (!type || !newListener) { - return; - } - - listenersType = this._listeners[type]; - if (listenersType === undefined) { - this._listeners[type] = listenersType = []; - } - - for (i = 0; !!(listener = listenersType[i]); i++) { - if (listener === newListener) { - return; - } - } - - listenersType.push(newListener); -} - -function _removeEventListener(type, oldListener) { - var - listenersType, - i, listener; - - if (!type || !oldListener) { - return; - } - - listenersType = this._listeners[type]; - if (listenersType === undefined) { - return; - } - - for (i = 0; !!(listener = listenersType[i]); i++) { - if (listener === oldListener) { - listenersType.splice(i, 1); - break; - } - } - - if (listenersType.length === 0) { - delete this._listeners[type]; - } -} - -function _dispatchEvent(event) { - var - type, - listenersType, - dummyListener, - stopImmediatePropagation = false, - i, listener; - - if (!event || typeof event.type !== 'string') { - throw new Error('`event` must have a valid `type` property'); - } - - // Do some stuff to emulate DOM Event behavior (just if this is not a - // DOM Event object) - if (event._yaeti) { - event.target = this; - event.cancelable = true; - } - - // Attempt to override the stopImmediatePropagation() method - try { - event.stopImmediatePropagation = function () { - stopImmediatePropagation = true; - }; - } catch (error) {} - - type = event.type; - listenersType = (this._listeners[type] || []); - - dummyListener = this['on' + type]; - if (typeof dummyListener === 'function') { - dummyListener.call(this, event); - } - - for (i = 0; !!(listener = listenersType[i]); i++) { - if (stopImmediatePropagation) { - break; - } - - listener.call(this, event); - } - - return !event.defaultPrevented; -} diff --git a/truebit-implementation/node_modules/yaeti/package.json b/truebit-implementation/node_modules/yaeti/package.json deleted file mode 100644 index 15bf3642..00000000 --- a/truebit-implementation/node_modules/yaeti/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "_from": "yaeti@^0.0.6", - "_id": "yaeti@0.0.6", - "_inBundle": false, - "_integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "_location": "/yaeti", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "yaeti@^0.0.6", - "name": "yaeti", - "escapedName": "yaeti", - "rawSpec": "^0.0.6", - "saveSpec": null, - "fetchSpec": "^0.0.6" - }, - "_requiredBy": [ - "/websocket" - ], - "_resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "_shasum": "f26f484d72684cf42bedfb76970aa1608fbf9577", - "_spec": "yaeti@^0.0.6", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/websocket", - "author": { - "name": "Iñaki Baz Castillo", - "email": "ibc@aliax.net" - }, - "browser": { - "./lib/Event.js": "./lib/Event.browser.js" - }, - "bugs": { - "url": "https://github.com/ibc/yaeti/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Yet Another EventTarget Implementation", - "devDependencies": { - "gulp": "git+https://github.com/gulpjs/gulp.git#4.0", - "gulp-jscs": "^1.6.0", - "gulp-jscs-stylish": "^1.1.0", - "gulp-jshint": "^1.11.2", - "jshint-stylish": "~1.0.2" - }, - "engines": { - "node": ">=0.10.32" - }, - "homepage": "https://github.com/ibc/yaeti#readme", - "license": "MIT", - "main": "index.js", - "name": "yaeti", - "repository": { - "type": "git", - "url": "git+https://github.com/ibc/yaeti.git" - }, - "version": "0.0.6" -} diff --git a/truebit-implementation/node_modules/yauzl/LICENSE b/truebit-implementation/node_modules/yauzl/LICENSE deleted file mode 100644 index 37538d4d..00000000 --- a/truebit-implementation/node_modules/yauzl/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Josh Wolfe - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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. diff --git a/truebit-implementation/node_modules/yauzl/README.md b/truebit-implementation/node_modules/yauzl/README.md deleted file mode 100644 index d4e53f4c..00000000 --- a/truebit-implementation/node_modules/yauzl/README.md +++ /dev/null @@ -1,658 +0,0 @@ -# yauzl - -[![Build Status](https://travis-ci.org/thejoshwolfe/yauzl.svg?branch=master)](https://travis-ci.org/thejoshwolfe/yauzl) -[![Coverage Status](https://img.shields.io/coveralls/thejoshwolfe/yauzl.svg)](https://coveralls.io/r/thejoshwolfe/yauzl) - -yet another unzip library for node. For zipping, see -[yazl](https://github.com/thejoshwolfe/yazl). - -Design principles: - - * Follow the spec. - Don't scan for local file headers. - Read the central directory for file metadata. - (see [No Streaming Unzip API](#no-streaming-unzip-api)). - * Don't block the JavaScript thread. - Use and provide async APIs. - * Keep memory usage under control. - Don't attempt to buffer entire files in RAM at once. - * Never crash (if used properly). - Don't let malformed zip files bring down client applications who are trying to catch errors. - * Catch unsafe file names. - See `validateFileName()`. - -## Usage - -```js -var yauzl = require("yauzl"); - -yauzl.open("path/to/file.zip", {lazyEntries: true}, function(err, zipfile) { - if (err) throw err; - zipfile.readEntry(); - zipfile.on("entry", function(entry) { - if (/\/$/.test(entry.fileName)) { - // Directory file names end with '/'. - // Note that entires for directories themselves are optional. - // An entry's fileName implicitly requires its parent directories to exist. - zipfile.readEntry(); - } else { - // file entry - zipfile.openReadStream(entry, function(err, readStream) { - if (err) throw err; - readStream.on("end", function() { - zipfile.readEntry(); - }); - readStream.pipe(somewhere); - }); - } - }); -}); -``` - -See also `examples/` for more usage examples. - -## API - -The default for every optional `callback` parameter is: - -```js -function defaultCallback(err) { - if (err) throw err; -} -``` - -### open(path, [options], [callback]) - -Calls `fs.open(path, "r")` and reads the `fd` effectively the same as `fromFd()` would. - -`options` may be omitted or `null`. The defaults are `{autoClose: true, lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. - -`autoClose` is effectively equivalent to: - -```js -zipfile.once("end", function() { - zipfile.close(); -}); -``` - -`lazyEntries` indicates that entries should be read only when `readEntry()` is called. -If `lazyEntries` is `false`, `entry` events will be emitted as fast as possible to allow `pipe()`ing -file data from all entries in parallel. -This is not recommended, as it can lead to out of control memory usage for zip files with many entries. -See [issue #22](https://github.com/thejoshwolfe/yauzl/issues/22). -If `lazyEntries` is `true`, an `entry` or `end` event will be emitted in response to each call to `readEntry()`. -This allows processing of one entry at a time, and will keep memory usage under control for zip files with many entries. - -`decodeStrings` is the default and causes yauzl to decode strings with `CP437` or `UTF-8` as required by the spec. -The exact effects of turning this option off are: - -* `zipfile.comment`, `entry.fileName`, and `entry.fileComment` will be `Buffer` objects instead of `String`s. -* Any Info-ZIP Unicode Path Extra Field will be ignored. See `extraFields`. -* Automatic file name validation will not be performed. See `validateFileName()`. - -`validateEntrySizes` is the default and ensures that an entry's reported uncompressed size matches its actual uncompressed size. -This check happens as early as possible, which is either before emitting each `"entry"` event (for entries with no compression), -or during the `readStream` piping after calling `openReadStream()`. -See `openReadStream()` for more information on defending against zip bomb attacks. - -When `strictFileNames` is `false` (the default) and `decodeStrings` is `true`, -all backslash (`\`) characters in each `entry.fileName` are replaced with forward slashes (`/`). -The spec forbids file names with backslashes, -but Microsoft's `System.IO.Compression.ZipFile` class in .NET versions 4.5.0 until 4.6.1 -creates non-conformant zipfiles with backslashes in file names. -`strictFileNames` is `false` by default so that clients can read these -non-conformant zipfiles without knowing about this Microsoft-specific bug. -When `strictFileNames` is `true` and `decodeStrings` is `true`, -entries with backslashes in their file names will result in an error. See `validateFileName()`. -When `decodeStrings` is `false`, `strictFileNames` has no effect. - -The `callback` is given the arguments `(err, zipfile)`. -An `err` is provided if the End of Central Directory Record cannot be found, or if its metadata appears malformed. -This kind of error usually indicates that this is not a zip file. -Otherwise, `zipfile` is an instance of `ZipFile`. - -### fromFd(fd, [options], [callback]) - -Reads from the fd, which is presumed to be an open .zip file. -Note that random access is required by the zip file specification, -so the fd cannot be an open socket or any other fd that does not support random access. - -`options` may be omitted or `null`. The defaults are `{autoClose: false, lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. - -See `open()` for the meaning of the options and callback. - -### fromBuffer(buffer, [options], [callback]) - -Like `fromFd()`, but reads from a RAM buffer instead of an open file. -`buffer` is a `Buffer`. - -If a `ZipFile` is acquired from this method, -it will never emit the `close` event, -and calling `close()` is not necessary. - -`options` may be omitted or `null`. The defaults are `{lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. - -See `open()` for the meaning of the options and callback. -The `autoClose` option is ignored for this method. - -### fromRandomAccessReader(reader, totalSize, [options], [callback]) - -This method of reading a zip file allows clients to implement their own back-end file system. -For example, a client might translate read calls into network requests. - -The `reader` parameter must be of a type that is a subclass of -[RandomAccessReader](#class-randomaccessreader) that implements the required methods. -The `totalSize` is a Number and indicates the total file size of the zip file. - -`options` may be omitted or `null`. The defaults are `{autoClose: true, lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. - -See `open()` for the meaning of the options and callback. - -### dosDateTimeToDate(date, time) - -Converts MS-DOS `date` and `time` data into a JavaScript `Date` object. -Each parameter is a `Number` treated as an unsigned 16-bit integer. -Note that this format does not support timezones, -so the returned object will use the local timezone. - -### validateFileName(fileName) - -Returns `null` or a `String` error message depending on the validity of `fileName`. -If `fileName` starts with `"/"` or `/[A-Za-z]:\//` or if it contains `".."` path segments or `"\\"`, -this function returns an error message appropriate for use like this: - -```js -var errorMessage = yauzl.validateFileName(fileName); -if (errorMessage != null) throw new Error(errorMessage); -``` - -This function is automatically run for each entry, as long as `decodeStrings` is `true`. -See `open()`, `strictFileNames`, and `Event: "entry"` for more information. - -### Class: ZipFile - -The constructor for the class is not part of the public API. -Use `open()`, `fromFd()`, `fromBuffer()`, or `fromRandomAccessReader()` instead. - -#### Event: "entry" - -Callback gets `(entry)`, which is an `Entry`. -See `open()` and `readEntry()` for when this event is emitted. - -If `decodeStrings` is `true`, entries emitted via this event have already passed file name validation. -See `validateFileName()` and `open()` for more information. - -If `validateEntrySizes` is `true` and this entry's `compressionMethod` is `0` (stored without compression), -this entry has already passed entry size validation. -See `open()` for more information. - -#### Event: "end" - -Emitted after the last `entry` event has been emitted. -See `open()` and `readEntry()` for more info on when this event is emitted. - -#### Event: "close" - -Emitted after the fd is actually closed. -This is after calling `close()` (or after the `end` event when `autoClose` is `true`), -and after all stream pipelines created from `openReadStream()` have finished reading data from the fd. - -If this `ZipFile` was acquired from `fromRandomAccessReader()`, -the "fd" in the previous paragraph refers to the `RandomAccessReader` implemented by the client. - -If this `ZipFile` was acquired from `fromBuffer()`, this event is never emitted. - -#### Event: "error" - -Emitted in the case of errors with reading the zip file. -(Note that other errors can be emitted from the streams created from `openReadStream()` as well.) -After this event has been emitted, no further `entry`, `end`, or `error` events will be emitted, -but the `close` event may still be emitted. - -#### readEntry() - -Causes this `ZipFile` to emit an `entry` or `end` event (or an `error` event). -This method must only be called when this `ZipFile` was created with the `lazyEntries` option set to `true` (see `open()`). -When this `ZipFile` was created with the `lazyEntries` option set to `true`, -`entry` and `end` events are only ever emitted in response to this method call. - -The event that is emitted in response to this method will not be emitted until after this method has returned, -so it is safe to call this method before attaching event listeners. - -After calling this method, calling this method again before the response event has been emitted will cause undefined behavior. -Calling this method after the `end` event has been emitted will cause undefined behavior. -Calling this method after calling `close()` will cause undefined behavior. - -#### openReadStream(entry, [options], callback) - -`entry` must be an `Entry` object from this `ZipFile`. -`callback` gets `(err, readStream)`, where `readStream` is a `Readable Stream` that provides the file data for this entry. -If this zipfile is already closed (see `close()`), the `callback` will receive an `err`. - -`options` may be omitted or `null`, and has the following defaults: - -```js -{ - decompress: entry.isCompressed() ? true : null, - decrypt: null, - start: 0, // actually the default is null, see below - end: entry.compressedSize, // actually the default is null, see below -} -``` - -If the entry is compressed (with a supported compression method), -and the `decompress` option is `true` (or omitted), -the read stream provides the decompressed data. -Omitting the `decompress` option is what most clients should do. - -The `decompress` option must be `null` (or omitted) when the entry is not compressed (see `isCompressed()`), -and either `true` (or omitted) or `false` when the entry is compressed. -Specifying `decompress: false` for a compressed entry causes the read stream -to provide the raw compressed file data without going through a zlib inflate transform. - -If the entry is encrypted (see `isEncrypted()`), clients may want to avoid calling `openReadStream()` on the entry entirely. -Alternatively, clients may call `openReadStream()` for encrypted entries and specify `decrypt: false`. -If the entry is also compressed, clients must *also* specify `decompress: false`. -Specifying `decrypt: false` for an encrypted entry causes the read stream to provide the raw, still-encrypted file data. -(This data includes the 12-byte header described in the spec.) - -The `decrypt` option must be `null` (or omitted) for non-encrypted entries, and `false` for encrypted entries. -Omitting the `decrypt` option (or specifying it as `null`) for an encrypted entry -will result in the `callback` receiving an `err`. -This default behavior is so that clients not accounting for encrypted files aren't surprised by bogus file data. - -The `start` (inclusive) and `end` (exclusive) options are byte offsets into this entry's file data, -and can be used to obtain part of an entry's file data rather than the whole thing. -If either of these options are specified and non-`null`, -then the above options must be used to obain the file's raw data. -Speficying `{start: 0, end: entry.compressedSize}` will result in the complete file, -which is effectively the default values for these options, -but note that unlike omitting the options, when you specify `start` or `end` as any non-`null` value, -the above requirement is still enforced that you must also pass the appropriate options to get the file's raw data. - -It's possible for the `readStream` provided to the `callback` to emit errors for several reasons. -For example, if zlib cannot decompress the data, the zlib error will be emitted from the `readStream`. -Two more error cases (when `validateEntrySizes` is `true`) are if the decompressed data has too many -or too few actual bytes compared to the reported byte count from the entry's `uncompressedSize` field. -yauzl notices this false information and emits an error from the `readStream` -after some number of bytes have already been piped through the stream. - -This check allows clients to trust the `uncompressedSize` field in `Entry` objects. -Guarding against [zip bomb](http://en.wikipedia.org/wiki/Zip_bomb) attacks can be accomplished by -doing some heuristic checks on the size metadata and then watching out for the above errors. -Such heuristics are outside the scope of this library, -but enforcing the `uncompressedSize` is implemented here as a security feature. - -It is possible to destroy the `readStream` before it has piped all of its data. -To do this, call `readStream.destroy()`. -You must `unpipe()` the `readStream` from any destination before calling `readStream.destroy()`. -If this zipfile was created using `fromRandomAccessReader()`, the `RandomAccessReader` implementation -must provide readable streams that implement a `.destroy()` method (see `randomAccessReader._readStreamForRange()`) -in order for calls to `readStream.destroy()` to work in this context. - -#### close() - -Causes all future calls to `openReadStream()` to fail, -and closes the fd, if any, after all streams created by `openReadStream()` have emitted their `end` events. - -If the `autoClose` option is set to `true` (see `open()`), -this function will be called automatically effectively in response to this object's `end` event. - -If the `lazyEntries` option is set to `false` (see `open()`) and this object's `end` event has not been emitted yet, -this function causes undefined behavior. -If the `lazyEntries` option is set to `true`, -you can call this function instead of calling `readEntry()` to abort reading the entries of a zipfile. - -It is safe to call this function multiple times; after the first call, successive calls have no effect. -This includes situations where the `autoClose` option effectively calls this function for you. - -If `close()` is never called, then the zipfile is "kept open". -For zipfiles created with `fromFd()`, this will leave the `fd` open, which may be desirable. -For zipfiles created with `open()`, this will leave the underlying `fd` open, thereby "leaking" it, which is probably undesirable. -For zipfiles created with `fromRandomAccessReader()`, the reader's `close()` method will never be called. -For zipfiles created with `fromBuffer()`, the `close()` function has no effect whether called or not. - -Regardless of how this `ZipFile` was created, there are no resources other than those listed above that require cleanup from this function. -This means it may be desirable to never call `close()` in some usecases. - -#### isOpen - -`Boolean`. `true` until `close()` is called; then it's `false`. - -#### entryCount - -`Number`. Total number of central directory records. - -#### comment - -`String`. Always decoded with `CP437` per the spec. - -If `decodeStrings` is `false` (see `open()`), this field is the undecoded `Buffer` instead of a decoded `String`. - -### Class: Entry - -Objects of this class represent Central Directory Records. -Refer to the zipfile specification for more details about these fields. - -These fields are of type `Number`: - - * `versionMadeBy` - * `versionNeededToExtract` - * `generalPurposeBitFlag` - * `compressionMethod` - * `lastModFileTime` (MS-DOS format, see `getLastModDateTime`) - * `lastModFileDate` (MS-DOS format, see `getLastModDateTime`) - * `crc32` - * `compressedSize` - * `uncompressedSize` - * `fileNameLength` (bytes) - * `extraFieldLength` (bytes) - * `fileCommentLength` (bytes) - * `internalFileAttributes` - * `externalFileAttributes` - * `relativeOffsetOfLocalHeader` - -#### fileName - -`String`. -Following the spec, the bytes for the file name are decoded with -`UTF-8` if `generalPurposeBitFlag & 0x800`, otherwise with `CP437`. -Alternatively, this field may be populated from the Info-ZIP Unicode Path Extra Field -(see `extraFields`). - -This field is automatically validated by `validateFileName()` before yauzl emits an "entry" event. -If this field would contain unsafe characters, yauzl emits an error instead of an entry. - -If `decodeStrings` is `false` (see `open()`), this field is the undecoded `Buffer` instead of a decoded `String`. -Therefore, `generalPurposeBitFlag` and any Info-ZIP Unicode Path Extra Field are ignored. -Furthermore, no automatic file name validation is performed for this file name. - -#### extraFields - -`Array` with each entry in the form `{id: id, data: data}`, -where `id` is a `Number` and `data` is a `Buffer`. - -This library looks for and reads the ZIP64 Extended Information Extra Field (0x0001) -in order to support ZIP64 format zip files. - -This library also looks for and reads the Info-ZIP Unicode Path Extra Field (0x7075) -in order to support some zipfiles that use it instead of General Purpose Bit 11 -to convey `UTF-8` file names. -When the field is identified and verified to be reliable (see the zipfile spec), -the the file name in this field is stored in the `fileName` property, -and the file name in the central directory record for this entry is ignored. -Note that when `decodeStrings` is false, all Info-ZIP Unicode Path Extra Fields are ignored. - -None of the other fields are considered significant by this library. -Fields that this library reads are left unalterned in the `extraFields` array. - -#### fileComment - -`String` decoded with the charset indicated by `generalPurposeBitFlag & 0x800` as with the `fileName`. -(The Info-ZIP Unicode Path Extra Field has no effect on the charset used for this field.) - -If `decodeStrings` is `false` (see `open()`), this field is the undecoded `Buffer` instead of a decoded `String`. - -Prior to yauzl version 2.7.0, this field was erroneously documented as `comment` instead of `fileComment`. -For compatibility with any code that uses the field name `comment`, -yauzl creates an alias field named `comment` which is identical to `fileComment`. - -#### getLastModDate() - -Effectively implemented as: - -```js -return dosDateTimeToDate(this.lastModFileDate, this.lastModFileTime); -``` - -#### isEncrypted() - -Returns is this entry encrypted with "Traditional Encryption". -Effectively implemented as: - -```js -return (this.generalPurposeBitFlag & 0x1) !== 0; -``` - -See `openReadStream()` for the implications of this value. - -Note that "Strong Encryption" is not supported, and will result in an `"error"` event emitted from the `ZipFile`. - -#### isCompressed() - -Effectively implemented as: - -```js -return this.compressionMethod === 8; -``` - -See `openReadStream()` for the implications of this value. - -### Class: RandomAccessReader - -This class is meant to be subclassed by clients and instantiated for the `fromRandomAccessReader()` function. - -An example implementation can be found in `test/test.js`. - -#### randomAccessReader._readStreamForRange(start, end) - -Subclasses *must* implement this method. - -`start` and `end` are Numbers and indicate byte offsets from the start of the file. -`end` is exclusive, so `_readStreamForRange(0x1000, 0x2000)` would indicate to read `0x1000` bytes. -`end - start` will always be at least `1`. - -This method should return a readable stream which will be `pipe()`ed into another stream. -It is expected that the readable stream will provide data in several chunks if necessary. -If the readable stream provides too many or too few bytes, an error will be emitted. -(Note that `validateEntrySizes` has no effect on this check, -because this is a low-level API that should behave correctly regardless of the contents of the file.) -Any errors emitted on the readable stream will be handled and re-emitted on the client-visible stream -(returned from `zipfile.openReadStream()`) or provided as the `err` argument to the appropriate callback -(for example, for `fromRandomAccessReader()`). - -The returned stream *must* implement a method `.destroy()` -if you call `readStream.destroy()` on streams you get from `openReadStream()`. -If you never call `readStream.destroy()`, then streams returned from this method do not need to implement a method `.destroy()`. -`.destroy()` should abort any streaming that is in progress and clean up any associated resources. -`.destroy()` will only be called after the stream has been `unpipe()`d from its destination. - -Note that the stream returned from this method might not be the same object that is provided by `openReadStream()`. -The stream returned from this method might be `pipe()`d through one or more filter streams (for example, a zlib inflate stream). - -#### randomAccessReader.read(buffer, offset, length, position, callback) - -Subclasses may implement this method. -The default implementation uses `createReadStream()` to fill the `buffer`. - -This method should behave like `fs.read()`. - -#### randomAccessReader.close(callback) - -Subclasses may implement this method. -The default implementation is effectively `setImmediate(callback);`. - -`callback` takes parameters `(err)`. - -This method is called once the all streams returned from `_readStreamForRange()` have ended, -and no more `_readStreamForRange()` or `read()` requests will be issued to this object. - -## How to Avoid Crashing - -When a malformed zipfile is encountered, the default behavior is to crash (throw an exception). -If you want to handle errors more gracefully than this, -be sure to do the following: - - * Provide `callback` parameters where they are allowed, and check the `err` parameter. - * Attach a listener for the `error` event on any `ZipFile` object you get from `open()`, `fromFd()`, `fromBuffer()`, or `fromRandomAccessReader()`. - * Attach a listener for the `error` event on any stream you get from `openReadStream()`. - -Minor version updates to yauzl will not add any additional requirements to this list. - -## Limitations - -### No Streaming Unzip API - -Due to the design of the .zip file format, it's impossible to interpret a .zip file from start to finish -(such as from a readable stream) without sacrificing correctness. -The Central Directory, which is the authority on the contents of the .zip file, is at the end of a .zip file, not the beginning. -A streaming API would need to either buffer the entire .zip file to get to the Central Directory before interpreting anything -(defeating the purpose of a streaming interface), or rely on the Local File Headers which are interspersed through the .zip file. -However, the Local File Headers are explicitly denounced in the spec as being unreliable copies of the Central Directory, -so trusting them would be a violation of the spec. - -Any library that offers a streaming unzip API must make one of the above two compromises, -which makes the library either dishonest or nonconformant (usually the latter). -This library insists on correctness and adherence to the spec, and so does not offer a streaming API. - -Here is a way to create a spec-conformant .zip file using the `zip` command line program (Info-ZIP) -available in most unix-like environments, that is (nearly) impossible to parse correctly with a streaming parser: - -``` -$ echo -ne '\x50\x4b\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > file.txt -$ zip -q0 - file.txt | cat > out.zip -``` - -This .zip file contains a single file entry that uses General Purpose Bit 3, -which means the Local File Header doesn't know the size of the file. -Any streaming parser that encounters this situation will either immediately fail, -or attempt to search for the Data Descriptor after the file's contents. -The file's contents is a sequence of 16-bytes crafted to exactly mimic a valid Data Descriptor for an empty file, -which will fool any parser that gets this far into thinking that the file is empty rather than containing 16-bytes. -What follows the file's real contents is the file's real Data Descriptor, -which will likely cause some kind of signature mismatch error for a streaming parser (if one hasn't occurred already). - -By using General Purpose Bit 3 (and compression method 0), -it's possible to create arbitrarily ambiguous .zip files that -distract parsers with file contents that contain apparently valid .zip file metadata. - -### Limitted ZIP64 Support - -For ZIP64, only zip files smaller than `8PiB` are supported, -not the full `16EiB` range that a 64-bit integer should be able to index. -This is due to the JavaScript Number type being an IEEE 754 double precision float. - -The Node.js `fs` module probably has this same limitation. - -### ZIP64 Extensible Data Sector Is Ignored - -The spec does not allow zip file creators to put arbitrary data here, -but rather reserves its use for PKWARE and mentions something about Z390. -This doesn't seem useful to expose in this library, so it is ignored. - -### No Multi-Disk Archive Support - -This library does not support multi-disk zip files. -The multi-disk fields in the zipfile spec were intended for a zip file to span multiple floppy disks, -which probably never happens now. -If the "number of this disk" field in the End of Central Directory Record is not `0`, -the `open()`, `fromFd()`, `fromBuffer()`, or `fromRandomAccessReader()` `callback` will receive an `err`. -By extension the following zip file fields are ignored by this library and not provided to clients: - - * Disk where central directory starts - * Number of central directory records on this disk - * Disk number where file starts - -### Limited Encryption Handling - -You can detect when a file entry is encrypted with "Traditional Encryption" via `isEncrypted()`, -but yauzl will not help you decrypt it. -See `openReadStream()`. - -If a zip file contains file entries encrypted with "Strong Encryption", yauzl emits an error. - -If the central directory is encrypted or compressed, yauzl emits an error. - -### Local File Headers Are Ignored - -Many unzip libraries mistakenly read the Local File Header data in zip files. -This data is officially defined to be redundant with the Central Directory information, -and is not to be trusted. -Aside from checking the signature, yauzl ignores the content of the Local File Header. - -### No CRC-32 Checking - -This library provides the `crc32` field of `Entry` objects read from the Central Directory. -However, this field is not used for anything in this library. - -### versionNeededToExtract Is Ignored - -The field `versionNeededToExtract` is ignored, -because this library doesn't support the complete zip file spec at any version, - -### No Support For Obscure Compression Methods - -Regarding the `compressionMethod` field of `Entry` objects, -only method `0` (stored with no compression) -and method `8` (deflated) are supported. -Any of the other 15 official methods will cause the `openReadStream()` `callback` to receive an `err`. - -### Data Descriptors Are Ignored - -There may or may not be Data Descriptor sections in a zip file. -This library provides no support for finding or interpreting them. - -### Archive Extra Data Record Is Ignored - -There may or may not be an Archive Extra Data Record section in a zip file. -This library provides no support for finding or interpreting it. - -### No Language Encoding Flag Support - -Zip files officially support charset encodings other than CP437 and UTF-8, -but the zip file spec does not specify how it works. -This library makes no attempt to interpret the Language Encoding Flag. - -## Change History - - * 2.10.0 - * Added support for non-conformant zipfiles created by Microsoft, and added option `strictFileNames` to disable the workaround. [issue #66](https://github.com/thejoshwolfe/yauzl/issues/66), [issue #88](https://github.com/thejoshwolfe/yauzl/issues/88) - * 2.9.2 - * Removed `tools/hexdump-zip.js` and `tools/hex2bin.js`. Those tools are now located here: [thejoshwolfe/hexdump-zip](https://github.com/thejoshwolfe/hexdump-zip) and [thejoshwolfe/hex2bin](https://github.com/thejoshwolfe/hex2bin) - * Worked around performance problem with zlib when using `fromBuffer()` and `readStream.destroy()` for large compressed files. [issue #87](https://github.com/thejoshwolfe/yauzl/issues/87) - * 2.9.1 - * Removed `console.log()` accidentally introduced in 2.9.0. [issue #64](https://github.com/thejoshwolfe/yauzl/issues/64) - * 2.9.0 - * Throw an exception if `readEntry()` is called without `lazyEntries:true`. Previously this caused undefined behavior. [issue #63](https://github.com/thejoshwolfe/yauzl/issues/63) - * 2.8.0 - * Added option `validateEntrySizes`. [issue #53](https://github.com/thejoshwolfe/yauzl/issues/53) - * Added `examples/promises.js` - * Added ability to read raw file data via `decompress` and `decrypt` options. [issue #11](https://github.com/thejoshwolfe/yauzl/issues/11), [issue #38](https://github.com/thejoshwolfe/yauzl/issues/38), [pull #39](https://github.com/thejoshwolfe/yauzl/pull/39) - * Added `start` and `end` options to `openReadStream()`. [issue #38](https://github.com/thejoshwolfe/yauzl/issues/38) - * 2.7.0 - * Added option `decodeStrings`. [issue #42](https://github.com/thejoshwolfe/yauzl/issues/42) - * Fixed documentation for `entry.fileComment` and added compatibility alias. [issue #47](https://github.com/thejoshwolfe/yauzl/issues/47) - * 2.6.0 - * Support Info-ZIP Unicode Path Extra Field, used by WinRAR for Chinese file names. [issue #33](https://github.com/thejoshwolfe/yauzl/issues/33) - * 2.5.0 - * Ignore malformed Extra Field that is common in Android .apk files. [issue #31](https://github.com/thejoshwolfe/yauzl/issues/31) - * 2.4.3 - * Fix crash when parsing malformed Extra Field buffers. [issue #31](https://github.com/thejoshwolfe/yauzl/issues/31) - * 2.4.2 - * Remove .npmignore and .travis.yml from npm package. - * 2.4.1 - * Fix error handling. - * 2.4.0 - * Add ZIP64 support. [issue #6](https://github.com/thejoshwolfe/yauzl/issues/6) - * Add `lazyEntries` option. [issue #22](https://github.com/thejoshwolfe/yauzl/issues/22) - * Add `readStream.destroy()` method. [issue #26](https://github.com/thejoshwolfe/yauzl/issues/26) - * Add `fromRandomAccessReader()`. [issue #14](https://github.com/thejoshwolfe/yauzl/issues/14) - * Add `examples/unzip.js`. - * 2.3.1 - * Documentation updates. - * 2.3.0 - * Check that `uncompressedSize` is correct, or else emit an error. [issue #13](https://github.com/thejoshwolfe/yauzl/issues/13) - * 2.2.1 - * Update dependencies. - * 2.2.0 - * Update dependencies. - * 2.1.0 - * Remove dependency on `iconv`. - * 2.0.3 - * Fix crash when trying to read a 0-byte file. - * 2.0.2 - * Fix event behavior after errors. - * 2.0.1 - * Fix bug with using `iconv`. - * 2.0.0 - * Initial release. diff --git a/truebit-implementation/node_modules/yauzl/index.js b/truebit-implementation/node_modules/yauzl/index.js deleted file mode 100644 index cf5d70df..00000000 --- a/truebit-implementation/node_modules/yauzl/index.js +++ /dev/null @@ -1,796 +0,0 @@ -var fs = require("fs"); -var zlib = require("zlib"); -var fd_slicer = require("fd-slicer"); -var crc32 = require("buffer-crc32"); -var util = require("util"); -var EventEmitter = require("events").EventEmitter; -var Transform = require("stream").Transform; -var PassThrough = require("stream").PassThrough; -var Writable = require("stream").Writable; - -exports.open = open; -exports.fromFd = fromFd; -exports.fromBuffer = fromBuffer; -exports.fromRandomAccessReader = fromRandomAccessReader; -exports.dosDateTimeToDate = dosDateTimeToDate; -exports.validateFileName = validateFileName; -exports.ZipFile = ZipFile; -exports.Entry = Entry; -exports.RandomAccessReader = RandomAccessReader; - -function open(path, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) options = {}; - if (options.autoClose == null) options.autoClose = true; - if (options.lazyEntries == null) options.lazyEntries = false; - if (options.decodeStrings == null) options.decodeStrings = true; - if (options.validateEntrySizes == null) options.validateEntrySizes = true; - if (options.strictFileNames == null) options.strictFileNames = false; - if (callback == null) callback = defaultCallback; - fs.open(path, "r", function(err, fd) { - if (err) return callback(err); - fromFd(fd, options, function(err, zipfile) { - if (err) fs.close(fd, defaultCallback); - callback(err, zipfile); - }); - }); -} - -function fromFd(fd, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) options = {}; - if (options.autoClose == null) options.autoClose = false; - if (options.lazyEntries == null) options.lazyEntries = false; - if (options.decodeStrings == null) options.decodeStrings = true; - if (options.validateEntrySizes == null) options.validateEntrySizes = true; - if (options.strictFileNames == null) options.strictFileNames = false; - if (callback == null) callback = defaultCallback; - fs.fstat(fd, function(err, stats) { - if (err) return callback(err); - var reader = fd_slicer.createFromFd(fd, {autoClose: true}); - fromRandomAccessReader(reader, stats.size, options, callback); - }); -} - -function fromBuffer(buffer, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) options = {}; - options.autoClose = false; - if (options.lazyEntries == null) options.lazyEntries = false; - if (options.decodeStrings == null) options.decodeStrings = true; - if (options.validateEntrySizes == null) options.validateEntrySizes = true; - if (options.strictFileNames == null) options.strictFileNames = false; - // limit the max chunk size. see https://github.com/thejoshwolfe/yauzl/issues/87 - var reader = fd_slicer.createFromBuffer(buffer, {maxChunkSize: 0x10000}); - fromRandomAccessReader(reader, buffer.length, options, callback); -} - -function fromRandomAccessReader(reader, totalSize, options, callback) { - if (typeof options === "function") { - callback = options; - options = null; - } - if (options == null) options = {}; - if (options.autoClose == null) options.autoClose = true; - if (options.lazyEntries == null) options.lazyEntries = false; - if (options.decodeStrings == null) options.decodeStrings = true; - var decodeStrings = !!options.decodeStrings; - if (options.validateEntrySizes == null) options.validateEntrySizes = true; - if (options.strictFileNames == null) options.strictFileNames = false; - if (callback == null) callback = defaultCallback; - if (typeof totalSize !== "number") throw new Error("expected totalSize parameter to be a number"); - if (totalSize > Number.MAX_SAFE_INTEGER) { - throw new Error("zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double."); - } - - // the matching unref() call is in zipfile.close() - reader.ref(); - - // eocdr means End of Central Directory Record. - // search backwards for the eocdr signature. - // the last field of the eocdr is a variable-length comment. - // the comment size is encoded in a 2-byte field in the eocdr, which we can't find without trudging backwards through the comment to find it. - // as a consequence of this design decision, it's possible to have ambiguous zip file metadata if a coherent eocdr was in the comment. - // we search backwards for a eocdr signature, and hope that whoever made the zip file was smart enough to forbid the eocdr signature in the comment. - var eocdrWithoutCommentSize = 22; - var maxCommentSize = 0xffff; // 2-byte size - var bufferSize = Math.min(eocdrWithoutCommentSize + maxCommentSize, totalSize); - var buffer = newBuffer(bufferSize); - var bufferReadStart = totalSize - buffer.length; - readAndAssertNoEof(reader, buffer, 0, bufferSize, bufferReadStart, function(err) { - if (err) return callback(err); - for (var i = bufferSize - eocdrWithoutCommentSize; i >= 0; i -= 1) { - if (buffer.readUInt32LE(i) !== 0x06054b50) continue; - // found eocdr - var eocdrBuffer = buffer.slice(i); - - // 0 - End of central directory signature = 0x06054b50 - // 4 - Number of this disk - var diskNumber = eocdrBuffer.readUInt16LE(4); - if (diskNumber !== 0) { - return callback(new Error("multi-disk zip files are not supported: found disk number: " + diskNumber)); - } - // 6 - Disk where central directory starts - // 8 - Number of central directory records on this disk - // 10 - Total number of central directory records - var entryCount = eocdrBuffer.readUInt16LE(10); - // 12 - Size of central directory (bytes) - // 16 - Offset of start of central directory, relative to start of archive - var centralDirectoryOffset = eocdrBuffer.readUInt32LE(16); - // 20 - Comment length - var commentLength = eocdrBuffer.readUInt16LE(20); - var expectedCommentLength = eocdrBuffer.length - eocdrWithoutCommentSize; - if (commentLength !== expectedCommentLength) { - return callback(new Error("invalid comment length. expected: " + expectedCommentLength + ". found: " + commentLength)); - } - // 22 - Comment - // the encoding is always cp437. - var comment = decodeStrings ? decodeBuffer(eocdrBuffer, 22, eocdrBuffer.length, false) - : eocdrBuffer.slice(22); - - if (!(entryCount === 0xffff || centralDirectoryOffset === 0xffffffff)) { - return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames)); - } - - // ZIP64 format - - // ZIP64 Zip64 end of central directory locator - var zip64EocdlBuffer = newBuffer(20); - var zip64EocdlOffset = bufferReadStart + i - zip64EocdlBuffer.length; - readAndAssertNoEof(reader, zip64EocdlBuffer, 0, zip64EocdlBuffer.length, zip64EocdlOffset, function(err) { - if (err) return callback(err); - - // 0 - zip64 end of central dir locator signature = 0x07064b50 - if (zip64EocdlBuffer.readUInt32LE(0) !== 0x07064b50) { - return callback(new Error("invalid zip64 end of central directory locator signature")); - } - // 4 - number of the disk with the start of the zip64 end of central directory - // 8 - relative offset of the zip64 end of central directory record - var zip64EocdrOffset = readUInt64LE(zip64EocdlBuffer, 8); - // 16 - total number of disks - - // ZIP64 end of central directory record - var zip64EocdrBuffer = newBuffer(56); - readAndAssertNoEof(reader, zip64EocdrBuffer, 0, zip64EocdrBuffer.length, zip64EocdrOffset, function(err) { - if (err) return callback(err); - - // 0 - zip64 end of central dir signature 4 bytes (0x06064b50) - if (zip64EocdrBuffer.readUInt32LE(0) !== 0x06064b50) { - return callback(new Error("invalid zip64 end of central directory record signature")); - } - // 4 - size of zip64 end of central directory record 8 bytes - // 12 - version made by 2 bytes - // 14 - version needed to extract 2 bytes - // 16 - number of this disk 4 bytes - // 20 - number of the disk with the start of the central directory 4 bytes - // 24 - total number of entries in the central directory on this disk 8 bytes - // 32 - total number of entries in the central directory 8 bytes - entryCount = readUInt64LE(zip64EocdrBuffer, 32); - // 40 - size of the central directory 8 bytes - // 48 - offset of start of central directory with respect to the starting disk number 8 bytes - centralDirectoryOffset = readUInt64LE(zip64EocdrBuffer, 48); - // 56 - zip64 extensible data sector (variable size) - return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames)); - }); - }); - return; - } - callback(new Error("end of central directory record signature not found")); - }); -} - -util.inherits(ZipFile, EventEmitter); -function ZipFile(reader, centralDirectoryOffset, fileSize, entryCount, comment, autoClose, lazyEntries, decodeStrings, validateEntrySizes, strictFileNames) { - var self = this; - EventEmitter.call(self); - self.reader = reader; - // forward close events - self.reader.on("error", function(err) { - // error closing the fd - emitError(self, err); - }); - self.reader.once("close", function() { - self.emit("close"); - }); - self.readEntryCursor = centralDirectoryOffset; - self.fileSize = fileSize; - self.entryCount = entryCount; - self.comment = comment; - self.entriesRead = 0; - self.autoClose = !!autoClose; - self.lazyEntries = !!lazyEntries; - self.decodeStrings = !!decodeStrings; - self.validateEntrySizes = !!validateEntrySizes; - self.strictFileNames = !!strictFileNames; - self.isOpen = true; - self.emittedError = false; - - if (!self.lazyEntries) self._readEntry(); -} -ZipFile.prototype.close = function() { - if (!this.isOpen) return; - this.isOpen = false; - this.reader.unref(); -}; - -function emitErrorAndAutoClose(self, err) { - if (self.autoClose) self.close(); - emitError(self, err); -} -function emitError(self, err) { - if (self.emittedError) return; - self.emittedError = true; - self.emit("error", err); -} - -ZipFile.prototype.readEntry = function() { - if (!this.lazyEntries) throw new Error("readEntry() called without lazyEntries:true"); - this._readEntry(); -}; -ZipFile.prototype._readEntry = function() { - var self = this; - if (self.entryCount === self.entriesRead) { - // done with metadata - setImmediate(function() { - if (self.autoClose) self.close(); - if (self.emittedError) return; - self.emit("end"); - }); - return; - } - if (self.emittedError) return; - var buffer = newBuffer(46); - readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) { - if (err) return emitErrorAndAutoClose(self, err); - if (self.emittedError) return; - var entry = new Entry(); - // 0 - Central directory file header signature - var signature = buffer.readUInt32LE(0); - if (signature !== 0x02014b50) return emitErrorAndAutoClose(self, new Error("invalid central directory file header signature: 0x" + signature.toString(16))); - // 4 - Version made by - entry.versionMadeBy = buffer.readUInt16LE(4); - // 6 - Version needed to extract (minimum) - entry.versionNeededToExtract = buffer.readUInt16LE(6); - // 8 - General purpose bit flag - entry.generalPurposeBitFlag = buffer.readUInt16LE(8); - // 10 - Compression method - entry.compressionMethod = buffer.readUInt16LE(10); - // 12 - File last modification time - entry.lastModFileTime = buffer.readUInt16LE(12); - // 14 - File last modification date - entry.lastModFileDate = buffer.readUInt16LE(14); - // 16 - CRC-32 - entry.crc32 = buffer.readUInt32LE(16); - // 20 - Compressed size - entry.compressedSize = buffer.readUInt32LE(20); - // 24 - Uncompressed size - entry.uncompressedSize = buffer.readUInt32LE(24); - // 28 - File name length (n) - entry.fileNameLength = buffer.readUInt16LE(28); - // 30 - Extra field length (m) - entry.extraFieldLength = buffer.readUInt16LE(30); - // 32 - File comment length (k) - entry.fileCommentLength = buffer.readUInt16LE(32); - // 34 - Disk number where file starts - // 36 - Internal file attributes - entry.internalFileAttributes = buffer.readUInt16LE(36); - // 38 - External file attributes - entry.externalFileAttributes = buffer.readUInt32LE(38); - // 42 - Relative offset of local file header - entry.relativeOffsetOfLocalHeader = buffer.readUInt32LE(42); - - if (entry.generalPurposeBitFlag & 0x40) return emitErrorAndAutoClose(self, new Error("strong encryption is not supported")); - - self.readEntryCursor += 46; - - buffer = newBuffer(entry.fileNameLength + entry.extraFieldLength + entry.fileCommentLength); - readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) { - if (err) return emitErrorAndAutoClose(self, err); - if (self.emittedError) return; - // 46 - File name - var isUtf8 = (entry.generalPurposeBitFlag & 0x800) !== 0; - entry.fileName = self.decodeStrings ? decodeBuffer(buffer, 0, entry.fileNameLength, isUtf8) - : buffer.slice(0, entry.fileNameLength); - - // 46+n - Extra field - var fileCommentStart = entry.fileNameLength + entry.extraFieldLength; - var extraFieldBuffer = buffer.slice(entry.fileNameLength, fileCommentStart); - entry.extraFields = []; - var i = 0; - while (i < extraFieldBuffer.length - 3) { - var headerId = extraFieldBuffer.readUInt16LE(i + 0); - var dataSize = extraFieldBuffer.readUInt16LE(i + 2); - var dataStart = i + 4; - var dataEnd = dataStart + dataSize; - if (dataEnd > extraFieldBuffer.length) return emitErrorAndAutoClose(self, new Error("extra field length exceeds extra field buffer size")); - var dataBuffer = newBuffer(dataSize); - extraFieldBuffer.copy(dataBuffer, 0, dataStart, dataEnd); - entry.extraFields.push({ - id: headerId, - data: dataBuffer, - }); - i = dataEnd; - } - - // 46+n+m - File comment - entry.fileComment = self.decodeStrings ? decodeBuffer(buffer, fileCommentStart, fileCommentStart + entry.fileCommentLength, isUtf8) - : buffer.slice(fileCommentStart, fileCommentStart + entry.fileCommentLength); - // compatibility hack for https://github.com/thejoshwolfe/yauzl/issues/47 - entry.comment = entry.fileComment; - - self.readEntryCursor += buffer.length; - self.entriesRead += 1; - - if (entry.uncompressedSize === 0xffffffff || - entry.compressedSize === 0xffffffff || - entry.relativeOffsetOfLocalHeader === 0xffffffff) { - // ZIP64 format - // find the Zip64 Extended Information Extra Field - var zip64EiefBuffer = null; - for (var i = 0; i < entry.extraFields.length; i++) { - var extraField = entry.extraFields[i]; - if (extraField.id === 0x0001) { - zip64EiefBuffer = extraField.data; - break; - } - } - if (zip64EiefBuffer == null) { - return emitErrorAndAutoClose(self, new Error("expected zip64 extended information extra field")); - } - var index = 0; - // 0 - Original Size 8 bytes - if (entry.uncompressedSize === 0xffffffff) { - if (index + 8 > zip64EiefBuffer.length) { - return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include uncompressed size")); - } - entry.uncompressedSize = readUInt64LE(zip64EiefBuffer, index); - index += 8; - } - // 8 - Compressed Size 8 bytes - if (entry.compressedSize === 0xffffffff) { - if (index + 8 > zip64EiefBuffer.length) { - return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include compressed size")); - } - entry.compressedSize = readUInt64LE(zip64EiefBuffer, index); - index += 8; - } - // 16 - Relative Header Offset 8 bytes - if (entry.relativeOffsetOfLocalHeader === 0xffffffff) { - if (index + 8 > zip64EiefBuffer.length) { - return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include relative header offset")); - } - entry.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index); - index += 8; - } - // 24 - Disk Start Number 4 bytes - } - - // check for Info-ZIP Unicode Path Extra Field (0x7075) - // see https://github.com/thejoshwolfe/yauzl/issues/33 - if (self.decodeStrings) { - for (var i = 0; i < entry.extraFields.length; i++) { - var extraField = entry.extraFields[i]; - if (extraField.id === 0x7075) { - if (extraField.data.length < 6) { - // too short to be meaningful - continue; - } - // Version 1 byte version of this extra field, currently 1 - if (extraField.data.readUInt8(0) !== 1) { - // > Changes may not be backward compatible so this extra - // > field should not be used if the version is not recognized. - continue; - } - // NameCRC32 4 bytes File Name Field CRC32 Checksum - var oldNameCrc32 = extraField.data.readUInt32LE(1); - if (crc32.unsigned(buffer.slice(0, entry.fileNameLength)) !== oldNameCrc32) { - // > If the CRC check fails, this UTF-8 Path Extra Field should be - // > ignored and the File Name field in the header should be used instead. - continue; - } - // UnicodeName Variable UTF-8 version of the entry File Name - entry.fileName = decodeBuffer(extraField.data, 5, extraField.data.length, true); - break; - } - } - } - - // validate file size - if (self.validateEntrySizes && entry.compressionMethod === 0) { - var expectedCompressedSize = entry.uncompressedSize; - if (entry.isEncrypted()) { - // traditional encryption prefixes the file data with a header - expectedCompressedSize += 12; - } - if (entry.compressedSize !== expectedCompressedSize) { - var msg = "compressed/uncompressed size mismatch for stored file: " + entry.compressedSize + " != " + entry.uncompressedSize; - return emitErrorAndAutoClose(self, new Error(msg)); - } - } - - if (self.decodeStrings) { - if (!self.strictFileNames) { - // allow backslash - entry.fileName = entry.fileName.replace(/\\/g, "/"); - } - var errorMessage = validateFileName(entry.fileName, self.validateFileNameOptions); - if (errorMessage != null) return emitErrorAndAutoClose(self, new Error(errorMessage)); - } - self.emit("entry", entry); - - if (!self.lazyEntries) self._readEntry(); - }); - }); -}; - -ZipFile.prototype.openReadStream = function(entry, options, callback) { - var self = this; - // parameter validation - var relativeStart = 0; - var relativeEnd = entry.compressedSize; - if (callback == null) { - callback = options; - options = {}; - } else { - // validate options that the caller has no excuse to get wrong - if (options.decrypt != null) { - if (!entry.isEncrypted()) { - throw new Error("options.decrypt can only be specified for encrypted entries"); - } - if (options.decrypt !== false) throw new Error("invalid options.decrypt value: " + options.decrypt); - if (entry.isCompressed()) { - if (options.decompress !== false) throw new Error("entry is encrypted and compressed, and options.decompress !== false"); - } - } - if (options.decompress != null) { - if (!entry.isCompressed()) { - throw new Error("options.decompress can only be specified for compressed entries"); - } - if (!(options.decompress === false || options.decompress === true)) { - throw new Error("invalid options.decompress value: " + options.decompress); - } - } - if (options.start != null || options.end != null) { - if (entry.isCompressed() && options.decompress !== false) { - throw new Error("start/end range not allowed for compressed entry without options.decompress === false"); - } - if (entry.isEncrypted() && options.decrypt !== false) { - throw new Error("start/end range not allowed for encrypted entry without options.decrypt === false"); - } - } - if (options.start != null) { - relativeStart = options.start; - if (relativeStart < 0) throw new Error("options.start < 0"); - if (relativeStart > entry.compressedSize) throw new Error("options.start > entry.compressedSize"); - } - if (options.end != null) { - relativeEnd = options.end; - if (relativeEnd < 0) throw new Error("options.end < 0"); - if (relativeEnd > entry.compressedSize) throw new Error("options.end > entry.compressedSize"); - if (relativeEnd < relativeStart) throw new Error("options.end < options.start"); - } - } - // any further errors can either be caused by the zipfile, - // or were introduced in a minor version of yauzl, - // so should be passed to the client rather than thrown. - if (!self.isOpen) return callback(new Error("closed")); - if (entry.isEncrypted()) { - if (options.decrypt !== false) return callback(new Error("entry is encrypted, and options.decrypt !== false")); - } - // make sure we don't lose the fd before we open the actual read stream - self.reader.ref(); - var buffer = newBuffer(30); - readAndAssertNoEof(self.reader, buffer, 0, buffer.length, entry.relativeOffsetOfLocalHeader, function(err) { - try { - if (err) return callback(err); - // 0 - Local file header signature = 0x04034b50 - var signature = buffer.readUInt32LE(0); - if (signature !== 0x04034b50) { - return callback(new Error("invalid local file header signature: 0x" + signature.toString(16))); - } - // all this should be redundant - // 4 - Version needed to extract (minimum) - // 6 - General purpose bit flag - // 8 - Compression method - // 10 - File last modification time - // 12 - File last modification date - // 14 - CRC-32 - // 18 - Compressed size - // 22 - Uncompressed size - // 26 - File name length (n) - var fileNameLength = buffer.readUInt16LE(26); - // 28 - Extra field length (m) - var extraFieldLength = buffer.readUInt16LE(28); - // 30 - File name - // 30+n - Extra field - var localFileHeaderEnd = entry.relativeOffsetOfLocalHeader + buffer.length + fileNameLength + extraFieldLength; - var decompress; - if (entry.compressionMethod === 0) { - // 0 - The file is stored (no compression) - decompress = false; - } else if (entry.compressionMethod === 8) { - // 8 - The file is Deflated - decompress = options.decompress != null ? options.decompress : true; - } else { - return callback(new Error("unsupported compression method: " + entry.compressionMethod)); - } - var fileDataStart = localFileHeaderEnd; - var fileDataEnd = fileDataStart + entry.compressedSize; - if (entry.compressedSize !== 0) { - // bounds check now, because the read streams will probably not complain loud enough. - // since we're dealing with an unsigned offset plus an unsigned size, - // we only have 1 thing to check for. - if (fileDataEnd > self.fileSize) { - return callback(new Error("file data overflows file bounds: " + - fileDataStart + " + " + entry.compressedSize + " > " + self.fileSize)); - } - } - var readStream = self.reader.createReadStream({ - start: fileDataStart + relativeStart, - end: fileDataStart + relativeEnd, - }); - var endpointStream = readStream; - if (decompress) { - var destroyed = false; - var inflateFilter = zlib.createInflateRaw(); - readStream.on("error", function(err) { - // setImmediate here because errors can be emitted during the first call to pipe() - setImmediate(function() { - if (!destroyed) inflateFilter.emit("error", err); - }); - }); - readStream.pipe(inflateFilter); - - if (self.validateEntrySizes) { - endpointStream = new AssertByteCountStream(entry.uncompressedSize); - inflateFilter.on("error", function(err) { - // forward zlib errors to the client-visible stream - setImmediate(function() { - if (!destroyed) endpointStream.emit("error", err); - }); - }); - inflateFilter.pipe(endpointStream); - } else { - // the zlib filter is the client-visible stream - endpointStream = inflateFilter; - } - // this is part of yauzl's API, so implement this function on the client-visible stream - endpointStream.destroy = function() { - destroyed = true; - if (inflateFilter !== endpointStream) inflateFilter.unpipe(endpointStream); - readStream.unpipe(inflateFilter); - // TODO: the inflateFilter may cause a memory leak. see Issue #27. - readStream.destroy(); - }; - } - callback(null, endpointStream); - } finally { - self.reader.unref(); - } - }); -}; - -function Entry() { -} -Entry.prototype.getLastModDate = function() { - return dosDateTimeToDate(this.lastModFileDate, this.lastModFileTime); -}; -Entry.prototype.isEncrypted = function() { - return (this.generalPurposeBitFlag & 0x1) !== 0; -}; -Entry.prototype.isCompressed = function() { - return this.compressionMethod === 8; -}; - -function dosDateTimeToDate(date, time) { - var day = date & 0x1f; // 1-31 - var month = (date >> 5 & 0xf) - 1; // 1-12, 0-11 - var year = (date >> 9 & 0x7f) + 1980; // 0-128, 1980-2108 - - var millisecond = 0; - var second = (time & 0x1f) * 2; // 0-29, 0-58 (even numbers) - var minute = time >> 5 & 0x3f; // 0-59 - var hour = time >> 11 & 0x1f; // 0-23 - - return new Date(year, month, day, hour, minute, second, millisecond); -} - -function validateFileName(fileName) { - if (fileName.indexOf("\\") !== -1) { - return "invalid characters in fileName: " + fileName; - } - if (/^[a-zA-Z]:/.test(fileName) || /^\//.test(fileName)) { - return "absolute path: " + fileName; - } - if (fileName.split("/").indexOf("..") !== -1) { - return "invalid relative path: " + fileName; - } - // all good - return null; -} - -function readAndAssertNoEof(reader, buffer, offset, length, position, callback) { - if (length === 0) { - // fs.read will throw an out-of-bounds error if you try to read 0 bytes from a 0 byte file - return setImmediate(function() { callback(null, newBuffer(0)); }); - } - reader.read(buffer, offset, length, position, function(err, bytesRead) { - if (err) return callback(err); - if (bytesRead < length) { - return callback(new Error("unexpected EOF")); - } - callback(); - }); -} - -util.inherits(AssertByteCountStream, Transform); -function AssertByteCountStream(byteCount) { - Transform.call(this); - this.actualByteCount = 0; - this.expectedByteCount = byteCount; -} -AssertByteCountStream.prototype._transform = function(chunk, encoding, cb) { - this.actualByteCount += chunk.length; - if (this.actualByteCount > this.expectedByteCount) { - var msg = "too many bytes in the stream. expected " + this.expectedByteCount + ". got at least " + this.actualByteCount; - return cb(new Error(msg)); - } - cb(null, chunk); -}; -AssertByteCountStream.prototype._flush = function(cb) { - if (this.actualByteCount < this.expectedByteCount) { - var msg = "not enough bytes in the stream. expected " + this.expectedByteCount + ". got only " + this.actualByteCount; - return cb(new Error(msg)); - } - cb(); -}; - -util.inherits(RandomAccessReader, EventEmitter); -function RandomAccessReader() { - EventEmitter.call(this); - this.refCount = 0; -} -RandomAccessReader.prototype.ref = function() { - this.refCount += 1; -}; -RandomAccessReader.prototype.unref = function() { - var self = this; - self.refCount -= 1; - - if (self.refCount > 0) return; - if (self.refCount < 0) throw new Error("invalid unref"); - - self.close(onCloseDone); - - function onCloseDone(err) { - if (err) return self.emit('error', err); - self.emit('close'); - } -}; -RandomAccessReader.prototype.createReadStream = function(options) { - var start = options.start; - var end = options.end; - if (start === end) { - var emptyStream = new PassThrough(); - setImmediate(function() { - emptyStream.end(); - }); - return emptyStream; - } - var stream = this._readStreamForRange(start, end); - - var destroyed = false; - var refUnrefFilter = new RefUnrefFilter(this); - stream.on("error", function(err) { - setImmediate(function() { - if (!destroyed) refUnrefFilter.emit("error", err); - }); - }); - refUnrefFilter.destroy = function() { - stream.unpipe(refUnrefFilter); - refUnrefFilter.unref(); - stream.destroy(); - }; - - var byteCounter = new AssertByteCountStream(end - start); - refUnrefFilter.on("error", function(err) { - setImmediate(function() { - if (!destroyed) byteCounter.emit("error", err); - }); - }); - byteCounter.destroy = function() { - destroyed = true; - refUnrefFilter.unpipe(byteCounter); - refUnrefFilter.destroy(); - }; - - return stream.pipe(refUnrefFilter).pipe(byteCounter); -}; -RandomAccessReader.prototype._readStreamForRange = function(start, end) { - throw new Error("not implemented"); -}; -RandomAccessReader.prototype.read = function(buffer, offset, length, position, callback) { - var readStream = this.createReadStream({start: position, end: position + length}); - var writeStream = new Writable(); - var written = 0; - writeStream._write = function(chunk, encoding, cb) { - chunk.copy(buffer, offset + written, 0, chunk.length); - written += chunk.length; - cb(); - }; - writeStream.on("finish", callback); - readStream.on("error", function(error) { - callback(error); - }); - readStream.pipe(writeStream); -}; -RandomAccessReader.prototype.close = function(callback) { - setImmediate(callback); -}; - -util.inherits(RefUnrefFilter, PassThrough); -function RefUnrefFilter(context) { - PassThrough.call(this); - this.context = context; - this.context.ref(); - this.unreffedYet = false; -} -RefUnrefFilter.prototype._flush = function(cb) { - this.unref(); - cb(); -}; -RefUnrefFilter.prototype.unref = function(cb) { - if (this.unreffedYet) return; - this.unreffedYet = true; - this.context.unref(); -}; - -var cp437 = '\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ '; -function decodeBuffer(buffer, start, end, isUtf8) { - if (isUtf8) { - return buffer.toString("utf8", start, end); - } else { - var result = ""; - for (var i = start; i < end; i++) { - result += cp437[buffer[i]]; - } - return result; - } -} - -function readUInt64LE(buffer, offset) { - // there is no native function for this, because we can't actually store 64-bit integers precisely. - // after 53 bits, JavaScript's Number type (IEEE 754 double) can't store individual integers anymore. - // but since 53 bits is a whole lot more than 32 bits, we do our best anyway. - var lower32 = buffer.readUInt32LE(offset); - var upper32 = buffer.readUInt32LE(offset + 4); - // we can't use bitshifting here, because JavaScript bitshifting only works on 32-bit integers. - return upper32 * 0x100000000 + lower32; - // as long as we're bounds checking the result of this function against the total file size, - // we'll catch any overflow errors, because we already made sure the total file size was within reason. -} - -// Node 10 deprecated new Buffer(). -var newBuffer; -if (typeof Buffer.allocUnsafe === "function") { - newBuffer = function(len) { - return Buffer.allocUnsafe(len); - }; -} else { - newBuffer = function(len) { - return new Buffer(len); - }; -} - -function defaultCallback(err) { - if (err) throw err; -} diff --git a/truebit-implementation/node_modules/yauzl/package.json b/truebit-implementation/node_modules/yauzl/package.json deleted file mode 100644 index eb48b23b..00000000 --- a/truebit-implementation/node_modules/yauzl/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_from": "yauzl@^2.4.2", - "_id": "yauzl@2.10.0", - "_inBundle": false, - "_integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "_location": "/yauzl", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "yauzl@^2.4.2", - "name": "yauzl", - "escapedName": "yauzl", - "rawSpec": "^2.4.2", - "saveSpec": null, - "fetchSpec": "^2.4.2" - }, - "_requiredBy": [ - "/decompress-unzip" - ], - "_resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "_shasum": "c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9", - "_spec": "yauzl@^2.4.2", - "_where": "/home/surya/projects/truebit/interactive-coin-offerings/truebit-implementation/node_modules/decompress-unzip", - "author": { - "name": "Josh Wolfe", - "email": "thejoshwolfe@gmail.com" - }, - "bugs": { - "url": "https://github.com/thejoshwolfe/yauzl/issues" - }, - "bundleDependencies": false, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - }, - "deprecated": false, - "description": "yet another unzip library for node", - "devDependencies": { - "bl": "~1.0.0", - "istanbul": "~0.3.4", - "pend": "~1.2.0" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/thejoshwolfe/yauzl", - "keywords": [ - "unzip", - "zip", - "stream", - "archive", - "file" - ], - "license": "MIT", - "main": "index.js", - "name": "yauzl", - "repository": { - "type": "git", - "url": "git+https://github.com/thejoshwolfe/yauzl.git" - }, - "scripts": { - "test": "node test/test.js", - "test-cov": "istanbul cover test/test.js", - "test-travis": "istanbul cover --report lcovonly test/test.js" - }, - "version": "2.10.0" -} diff --git a/truebit-implementation/package-lock.json b/truebit-implementation/package-lock.json deleted file mode 100644 index 41e2e07f..00000000 --- a/truebit-implementation/package-lock.json +++ /dev/null @@ -1,2501 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@types/node": { - "version": "10.12.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.3.tgz", - "integrity": "sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg==" - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bl": { - "version": "1.2.2", - "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "~2.0.0" - } - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sha3": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", - "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", - "requires": { - "js-sha3": "^0.3.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - }, - "get-stream": { - "version": "2.3.1", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-contract-class": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/eth-contract-class/-/eth-contract-class-0.0.6.tgz", - "integrity": "sha1-OYuJUhScx0fLlZ+otdSAKIx6i84=", - "requires": { - "web3-core-promievent": "^1.0.0-beta.21" - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - } - } - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "ethers": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", - "requires": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - } - }, - "fs-promise": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", - "requires": { - "any-promise": "^1.3.0", - "fs-extra": "^2.0.0", - "mz": "^2.6.0", - "thenify-all": "^1.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.2.tgz", - "integrity": "sha512-OFxb5MZXCUMx43X7O8LK4FKggEQx6yC5QPmOcBnYbJ9UjxEcMcrMbaR0af5HZpqeFopw2GwQRQi34ZXI7YLM5w==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "js-sha3": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", - "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keccakjs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", - "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", - "requires": { - "browserify-sha3": "^0.0.1", - "sha3": "^1.1.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimetoken": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/minimetoken/-/minimetoken-0.2.0.tgz", - "integrity": "sha512-oRwMg4tbr4sAznQ8+eS6ZQbrIQNt2Qn0wTFHQJVlPCCQ1cgq24h1B2KIaUtqIUu/eKZi7a5NE1MOcv0tZQxYFQ==", - "requires": { - "eth-contract-class": "0.0.6" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "*" - } - }, - "mock-fs": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.7.0.tgz", - "integrity": "sha512-WlQNtUlzMRpvLHf8dqeUmNqfdPjGY29KrJF50Ldb4AcL+vQeR8QH3wQcFMgrhTwb1gHjZn9xggho+84tBskLgA==" - }, - "mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.10.0", - "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "oboe": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "openzeppelin-solidity": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/openzeppelin-solidity/-/openzeppelin-solidity-2.0.0.tgz", - "integrity": "sha512-SolpxQFArtiYnlSNg3dZ9sz0WVlKtPqSOcJkXRllaZp4+Lpfqz3vxF0yoh7g75TszKPyadqoJmU7+GM/vwh9SA==" - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "^1.0.0" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-headers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", - "requires": { - "for-each": "^0.3.2", - "trim": "0.0.1" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", - "requires": { - "nan": "^2.0.8" - } - }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "http://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "^6.0.2", - "scryptsy": "^1.2.1" - } - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "requires": { - "pbkdf2": "^3.0.3" - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "~2.8.1" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "sha3": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", - "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", - "requires": { - "nan": "2.10.0" - } - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "swarm-js": { - "version": "0.1.37", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^2.1.2", - "fs-promise": "^2.0.0", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar.gz": "^1.0.5", - "xhr-request-promise": "^0.1.2" - } - }, - "tar": { - "version": "2.2.1", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "tar.gz": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", - "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", - "requires": { - "bluebird": "^2.9.34", - "commander": "^2.8.1", - "fstream": "^1.0.8", - "mout": "^0.11.0", - "tar": "^2.1.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - } - } - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unbzip2-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz", - "integrity": "sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==", - "requires": { - "buffer": "^3.0.1", - "through": "^2.3.6" - }, - "dependencies": { - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" - }, - "buffer": { - "version": "3.6.0", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", - "requires": { - "base64-js": "0.0.8", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - } - } - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "utf8": { - "version": "2.1.1", - "resolved": "http://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "web3": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.36.tgz", - "integrity": "sha512-fZDunw1V0AQS27r5pUN3eOVP7u8YAvyo6vOapdgVRolAu5LgaweP7jncYyLINqIX9ZgWdS5A090bt+ymgaYHsw==", - "requires": { - "web3-bzz": "1.0.0-beta.36", - "web3-core": "1.0.0-beta.36", - "web3-eth": "1.0.0-beta.36", - "web3-eth-personal": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-shh": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-bzz": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.36.tgz", - "integrity": "sha512-clDRS/ziboJ5ytnrfxq80YSu9HQsT0vggnT3BkoXadrauyEE/9JNLxRu016jjUxqdkfdv4MgIPDdOS3Bv2ghiw==", - "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" - } - }, - "web3-core": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.36.tgz", - "integrity": "sha512-C2QW9CMMRZdYAiKiLkMrKRSp+gekSqTDgZTNvlxAdN1hXn4d9UmcmWSJXOmIHqr5N2ISbRod+bW+qChODxVE3Q==", - "requires": { - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-requestmanager": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.36.tgz", - "integrity": "sha512-gu74l0htiGWuxLQuMnZqKToFvkSM+UFPE7qUuy1ZosH/h2Jd+VBWg6k4CyNYVYfP0hL5x3CN8SBmB+HMowo55A==", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.36.tgz", - "integrity": "sha512-dJsP3KkGaqBBSdxfzvLsYPOmVaSs1lR/3oKob/gtUYG7UyTnwquwliAc7OXj+gqRA2E/FHZcM83cWdl31ltdSA==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.36.tgz", - "integrity": "sha512-RGIL6TjcOeJTullFLMurChPTsg94cPF6LI763y/sPYtXTDol1vVa+J5aGLp/4WW8v+s+1bSQO6zYq2ZtkbmtEQ==", - "requires": { - "any-promise": "1.3.0", - "eventemitter3": "1.1.1" - } - }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.36.tgz", - "integrity": "sha512-/CHuaMbiMDu1v8ANGYI7yFCnh1GaCWx5pKnUPJf+QTk2xAAw+Bvd97yZJIWPOK5AOPUIzxgwx9Ob/5ln6mTmYA==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-providers-http": "1.0.0-beta.36", - "web3-providers-ipc": "1.0.0-beta.36", - "web3-providers-ws": "1.0.0-beta.36" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.36.tgz", - "integrity": "sha512-/evyLQ8CMEYXC5aUCodDpmEnmGVYQxaIjiEIfA/85f9ifHkfzP1aOwCAjcsLsJWnwrWDagxSpjCYrDtnNabdEw==", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" - } - }, - "web3-eth": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.36.tgz", - "integrity": "sha512-uEa0UnbnNHUB4N2O1U+LsvxzSPJ/w3azy5115IseaUdDaiz6IFFgFfFP3ssauayQNCf7v2F44GXLfPhrNeb/Sw==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-eth-accounts": "1.0.0-beta.36", - "web3-eth-contract": "1.0.0-beta.36", - "web3-eth-ens": "1.0.0-beta.36", - "web3-eth-iban": "1.0.0-beta.36", - "web3-eth-personal": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.36.tgz", - "integrity": "sha512-fBfW+7hvA0rxEMV45fO7JU+0R32ayT7aRwG9Cl6NW2/QvhFeME2qVbMIWw0q5MryPZGIN8A6366hKNuWvVidDg==", - "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.36.tgz", - "integrity": "sha512-MmgIlBEZ0ILLWV4+wfMrbeVVMU/VmQnCpgSDcw7wHKOKu47bKncJ6rVqVsUbC6d9F613Rios+Yj2Ua6SCHtmrg==", - "requires": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.36.tgz", - "integrity": "sha512-cywqcIrUsCW4fyqsHdOb24OCC8AnBol8kNiptI+IHRylyCjTNgr53bUbjrXWjmEnear90rO0QhAVjLB1a4iEbQ==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.36.tgz", - "integrity": "sha512-8ZdD7XoJfSX3jNlZHSLe4G837xQ0v5a8cHCcDcd1IoqoY855X9SrIQ0Xdqia9p4mR1YcH1vgmkXY9/3hsvxS7g==", - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-eth-contract": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.36.tgz", - "integrity": "sha512-b5AEDjjhOLR4q47Hbzf65zYE+7U7JgCgrUb13RU4HMIGoMb1q4DXaJw1UH8VVHCZulevl2QBjpCyrntecMqqCQ==", - "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.36" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.36.tgz", - "integrity": "sha512-+oxvhojeWh4C/XtnlYURWRR3F5Cg7bQQNjtN1ZGnouKAZyBLoYDVVJ6OaPiveNtfC9RKnzLikn9/Uqc0xz410A==", - "requires": { - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-net": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.36.tgz", - "integrity": "sha512-BriXK0Pjr6Hc/VDq1Vn8vyOum4JB//wpCjgeGziFD6jC7Of8YaWC7AJYXje89OckzfcqX1aJyJlBwDpasNkAzQ==", - "requires": { - "web3-core": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-providers-http": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.36.tgz", - "integrity": "sha512-KLSqMS59nRdpet9B0B64MKgtM3n9wAHTcAHJ03hv79avQNTjHxtjZm0ttcjcFUPpWDgTCtcYCa7tqaYo9Pbeog==", - "requires": { - "web3-core-helpers": "1.0.0-beta.36", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.36.tgz", - "integrity": "sha512-iEUrmdd2CzoWgp+75/ydom/1IaoLw95qkAzsgwjjZp1waDncHP/cvVGX74+fbUx4hRaPdchyzxCQfNpgLDmNjQ==", - "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" - } - }, - "web3-providers-ws": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.36.tgz", - "integrity": "sha512-wAnENuZx75T5ZSrT2De2LOaUuPf2yRjq1VfcbD7+Zd79F3DZZLBJcPyCNVQ1U0fAXt0wfgCKl7sVw5pffqR9Bw==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" - } - }, - "web3-shh": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.36.tgz", - "integrity": "sha512-bREGHS/WprYFSvGUhyIk8RSpT2Z5SvJOKGBrsUW2nDIMWO6z0Op8E7fzC6GXY2HZfZliAqq6LirbXLgcLRWuPw==", - "requires": { - "web3-core": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36" - } - }, - "web3-utils": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.36.tgz", - "integrity": "sha512-7ri74lG5fS2Th0fhYvTtiEHMB1Pmf2p7dQx1COQ3OHNI/CHNEMjzoNMEbBU6FAENrywfoFur40K4m0AOmEUq5A==", - "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", - "requires": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "requires": { - "xhr-request": "^1.0.1" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } -} diff --git a/truebit-implementation/package.json b/truebit-implementation/package.json new file mode 100644 index 00000000..74966805 --- /dev/null +++ b/truebit-implementation/package.json @@ -0,0 +1,36 @@ +{ + "name": "truebit-iico-beta-dev", + "version": "2.0.1", + "description": "Interactive Coin Offerings", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "compile-contract": "truffle compile --all && npm run export-abi", + "migrate-contract": "truffle migrate --network=development --reset", + "migrate-contract-infura": "truffle migrate --network=rinkeby", + "deploy-contract": "npm run compile-contract && npm run migrate-contract", + "deploy-contract-infura": "npm run compile-contract && npm run migrate-contract-infura", + "export-abi": "node export-abi.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/TrueBitFoundation/interactive-coin-offerings" + }, + "keywords": [ + "IICO", + "contract", + "truebit" + ], + "license": "MIT", + "dependencies": {}, + "devDependencies": { + "dotenv": "6.2.0", + "openzeppelin-solidity": "2.0.0", + "truffle": "4.1.14", + "truffle-hdwallet-provider": "1.0.4", + "web3-utils": "1.0.0-beta.46" + } +} diff --git a/truebit-implementation/screenshots/deploying_contract.PNG b/truebit-implementation/screenshots/deploying_contract.PNG new file mode 100644 index 00000000..63a7751a Binary files /dev/null and b/truebit-implementation/screenshots/deploying_contract.PNG differ diff --git a/truebit-implementation/test/IICO.js b/truebit-implementation/test/IICO.js index c0abb583..5b36eaa5 100644 --- a/truebit-implementation/test/IICO.js +++ b/truebit-implementation/test/IICO.js @@ -1,8 +1,47 @@ -const { waitForMined, expectThrow, increaseTime, mineBlock } = require('kleros-interaction/helpers/utils') +//const { waitForMined, expectThrow, increaseTime, mineBlock } = require('kleros-interaction/helpers/utils.js') const MintableToken = artifacts.require('openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol') const IICO = artifacts.require('IICO.sol') - +const BN = require('bignumber.js') + +const should = require('chai') + .should(); + +async function expectThrow (promise, message) { + try { + await promise; + } catch (error) { + // Message is an optional parameter here + if (message) { + error.message.should.include(message, 'Expected \'' + message + '\', got \'' + error + '\' instead'); + return; + } else { + // TODO: Check jump destination to destinguish between a throw + // and an actual invalid jump. + // TODO: When we contract A calls contract B, and B throws, instead + // of an 'invalid jump', we get an 'out of gas' error. How do + // we distinguish this from an actual out of gas event? (The + // ganache log actually show an 'invalid jump' event.) + error.message.should.match(/[invalid opcode|out of gas|revert]/, 'Expected throw, got \'' + error + '\' instead'); + return; + } + } + should.fail('Expected throw not received'); +} + +increaseTime = (time) => { + return new Promise((resolve, reject) => { + web3.currentProvider.sendAsync({ + jsonrpc: "2.0", + method: "evm_increaseTime", + params: [time], + id: new Date().getTime() + }, (err, result) => { + if (err) { return reject(err); } + return resolve(result); + }); + }); +} contract('IICO', function (accounts) { let owner = accounts[0] @@ -46,11 +85,6 @@ contract('IICO', function (accounts) { assert.equal(await iico.sumAcceptedContrib(), 0, 'The sumAcceptedContrib is not set correctly') assert.equal(await iico.sumAcceptedVirtualContrib(), 0, 'The sumAcceptedVirtualContrib is not set correctly') - assert.equal(await iico.numBuckets(), numBuckets) - assert.equal(maxBucket[1], owner) - assert.equal(minBucket[1], owner) - assert.equal(maxBucket[0].toNumber(), maxValuation) - assert.equal(minBucket[0].toNumber(), minValuation) }) // setToken @@ -84,6 +118,7 @@ contract('IICO', function (accounts) { log = tx.logs.find(log => log.event === 'BidSubmitted') assert.equal(log.args.contributor, buyerA) assert.equal(log.args.bidID, 1) + let bid = await iico.bids.call(1) assert.equal(bid[0].toNumber(), maxValuation) @@ -95,14 +130,6 @@ contract('IICO', function (accounts) { assert.equal(bid[7], true) assert.equal(bid[8].toNumber(), 0) assert.equal(bid[9].toNumber(), numBuckets-1) - // TODO: fix the god damn min bucket valuation - // Check the bucket got filled - let bucketMinBids = await iico.bucketMinBids(0) - let bucketMaxBids = await iico.bucketMaxBids(numBuckets-1) - assert.equal(bucketMinBids.length, 1) - assert.equal(bucketMaxBids.length, 1) - assert.equal(bucketMinBids[0].toNumber(), 1) - assert.equal(bucketMaxBids[0].toNumber(), 1) }) it('Should mark the bid inactive at submission.', async () => { @@ -138,67 +165,99 @@ contract('IICO', function (accounts) { assert.equal(bid[9].toNumber(), 2) assert.equal(bid[7].false) - let bucket = await iico.buckets(0) - assert.equal(bucket[1], owner) - - bucket = await iico.buckets(2) - assert.equal(bucket[1], buyerA) - }) - - it ('Inactive bid should be poked in', async () => { + + + it ('Maximum cap should be accepted', async () => { let startTestTime = web3.eth.getBlock('latest').timestamp let iico = await IICO.new(startTestTime+timeBeforeStart,fullBonusLength,partialWithdrawalLength, withdrawalLockUpLength,maxBonus,beneficiary, minValuation, maxValuation, increment, {from: owner}) let token = await MintableToken.new({from: owner}) increaseTime(1010) + let maxmaxcap = BN('2^256 - 1') // inactive bid await iico.submitBid(web3.toWei(5, 'ether'), web3.toWei(3, 'ether'), {from: buyerA, value:web3.toWei(2, 'ether')}) - let bid = await iico.bids.call(1) - assert.equal(bid[7], false) - - await iico.submitBid(maxValuation, 0, {from: buyerB, value: web3.toWei(1, 'ether')}) - bid = await iico.bids.call(2) - assert.equal(bid[7], true) - - tx = await iico.poke(1, {from: buyerC}) - log = tx.logs.find(log => log.event === 'Poked') - assert.equal(log.args.poker, buyerC) - assert.equal(log.args.bidID, 1) - - bid = await iico.bids.call(1) - assert.equal(bid[7], true) - }) - it ('Active bid should be poked out', async () => { + it ('Inactive bid should be poked in', async () => { let startTestTime = web3.eth.getBlock('latest').timestamp let iico = await IICO.new(startTestTime+timeBeforeStart,fullBonusLength,partialWithdrawalLength, withdrawalLockUpLength,maxBonus,beneficiary, minValuation, maxValuation, increment, {from: owner}) let token = await MintableToken.new({from: owner}) increaseTime(1010) - // active bid - await iico.submitBid(web3.toWei(5, 'ether'), web3.toWei(3, 'ether'), {from: buyerA, value:web3.toWei(5, 'ether')}) + // inactive bid + await iico.submitBid(web3.toWei(5, 'ether'), web3.toWei(3, 'ether'), {from: buyerA, value:web3.toWei(2, 'ether')}) let bid = await iico.bids.call(1) - assert.equal(bid[7], true) + assert.equal(bid[7], false) await iico.submitBid(maxValuation, 0, {from: buyerB, value: web3.toWei(1, 'ether')}) bid = await iico.bids.call(2) assert.equal(bid[7], true) - tx = await iico.poke(1, {from: buyerC}) - log = tx.logs.find(log => log.event === 'Poked') + tx = await iico.pokeIn([1], {from: buyerC}) + log = tx.logs.find(log => log.event == 'PokeIn') assert.equal(log.args.poker, buyerC) assert.equal(log.args.bidID, 1) - - bid = await iico.bids.call(1) - assert.equal(bid[7], false) - }) + + +// it ('Inactive bid should be poked in', async () => { +// let startTestTime = web3.eth.getBlock('latest').timestamp +// let iico = await IICO.new(startTestTime+timeBeforeStart,fullBonusLength,partialWithdrawalLength, withdrawalLockUpLength,maxBonus,beneficiary, minValuation, maxValuation, increment, {from: owner}) +// let token = await MintableToken.new({from: owner}) +// +// increaseTime(1010) +// +// // inactive bid +// await iico.submitBid(web3.toWei(5, 'ether'), web3.toWei(3, 'ether'), {from: buyerA, value:web3.toWei(2, 'ether')}) +// +// let bid = await iico.bids.call(1) +// assert.equal(bid[7], false) +// +// await iico.submitBid(maxValuation, 0, {from: buyerB, value: web3.toWei(1, 'ether')}) +// bid = await iico.bids.call(2) +// assert.equal(bid[7], true) +// +// tx = await iico.poke(1, {from: buyerC}) +// log = tx.logs.find(log => log.event === 'Poked') +// assert.equal(log.args.poker, buyerC) +// assert.equal(log.args.bidID, 1) +// +// bid = await iico.bids.call(1) +// assert.equal(bid[7], true) +// +// }) + +// it ('Active bid should be poked out', async () => { +// let startTestTime = web3.eth.getBlock('latest').timestamp +// let iico = await IICO.new(startTestTime+timeBeforeStart,fullBonusLength,partialWithdrawalLength, withdrawalLockUpLength,maxBonus,beneficiary, minValuation, maxValuation, increment, {from: owner}) +// let token = await MintableToken.new({from: owner}) +// +// increaseTime(1010) +// +// // active bid +// await iico.submitBid(web3.toWei(5, 'ether'), web3.toWei(3, 'ether'), {from: buyerA, value:web3.toWei(5, 'ether')}) +// +// let bid = await iico.bids.call(1) +// assert.equal(bid[7], true) +// +// await iico.submitBid(maxValuation, 0, {from: buyerB, value: web3.toWei(1, 'ether')}) +// bid = await iico.bids.call(2) +// assert.equal(bid[7], true) +// +// tx = await iico.poke(1, {from: buyerC}) +// log = tx.logs.find(log => log.event === 'Poked') +// assert.equal(log.args.poker, buyerC) +// assert.equal(log.args.bidID, 1) +// +// bid = await iico.bids.call(1) +// assert.equal(bid[7], false) +// +// }) it('Withdraw full amount before full bonus refund deadline', async () => { let startTestTime = web3.eth.getBlock('latest').timestamp @@ -225,30 +284,52 @@ contract('IICO', function (accounts) { }) - it('Withdraw partial bid', async () => { - let startTestTime = web3.eth.getBlock('latest').timestamp - let iico = await IICO.new(startTestTime+timeBeforeStart,fullBonusLength,partialWithdrawalLength, withdrawalLockUpLength,maxBonus,beneficiary, minValuation, maxValuation, increment, {from: owner}) - let token = await MintableToken.new({from: owner}) - - increaseTime(1010) - - await iico.submitBid(maxValuation, 0, {from: buyerB, value: web3.toWei(1, 'ether')}) - let bid = await iico.bids.call(1) - assert.equal(bid[7], true) - - await iico.submitBid(maxValuation, 0, {from: buyerA, value: web3.toWei(5, 'ether')}) - bid = await iico.bids.call(2) - assert.equal(bid[7], true) - - increaseTime(5000) - await iico.withdraw(1, {from: buyerB}) - bid = await iico.bids.call(1) - assert.equal(bid[5], true) - - let valuation = await iico.sumAcceptedContrib() - assert.equal(valuation.toNumber(10), web3.toWei(5, 'ether')) - - }) +// it('Withdraw partial bid', async () => { +// let startTestTime = web3.eth.getBlock('latest').timestamp +// let iico = await IICO.new(startTestTime+timeBeforeStart,fullBonusLength,partialWithdrawalLength, withdrawalLockUpLength,maxBonus,beneficiary, minValuation, maxValuation, increment, {from: owner}) +// let token = await MintableToken.new({from: owner}) +// +// increaseTime(1010) +// +// await iico.submitBid(maxValuation, 0, {from: buyerB, value: web3.toWei(1, 'ether')}) +// let bid = await iico.bids.call(1) +// assert.equal(bid[7], true) +// +// await iico.submitBid(maxValuation, 0, {from: buyerA, value: web3.toWei(5, 'ether')}) +// bid = await iico.bids.call(2) +// assert.equal(bid[7], true) +// +// increaseTime(5000) +// await iico.withdraw(1, {from: buyerB}) +// bid = await iico.bids.call(1) +// assert.equal(bid[5], true) +// +// let valuation = await iico.sumAcceptedContrib() +// assert.equal(valuation.toNumber(10), web3.toWei(5, 'ether')) +// +// }) + +// it('Should get all the bid uints.', async () => { +// let startTestTime = web3.eth.getBlock('latest').timestamp +// let iico = await IICO.new(startTestTime+timeBeforeStart,fullBonusLength,partialWithdrawalLength, withdrawalLockUpLength,maxBonus,beneficiary, minValuation, maxValuation, increment, {from: owner}) +// let token = await MintableToken.new({from: owner}) +// +// increaseTime(1010) +// +// let startNumber = web3.eth.blockNumber +// +// for (let i = 0; i < 1000; i++) { +// let t = await iico.submitBid(web3.toWei(10000, 'ether'), 0, {from: buyerA, value:1}) +// } +// +// assert.equal(startNumber+1001, await web3.eth.blockNumber) +// let expectedNumber = startNumber + 1000 +// +// +// let result = await iico.bidBufferUint.call() +// console.log(result) +// +// }) }) diff --git a/truebit-implementation/truffle-config.js b/truebit-implementation/truffle-config.js index 0453b366..adf414a7 100644 --- a/truebit-implementation/truffle-config.js +++ b/truebit-implementation/truffle-config.js @@ -1,25 +1,21 @@ -/* - * NB: since truffle-hdwallet-provider 0.0.5 you must wrap HDWallet providers in a - * function when declaring them. Failure to do so will cause commands to hang. ex: - * ``` - * mainnet: { - * provider: function() { - * return new HDWalletProvider(mnemonic, 'https://mainnet.infura.io/') - * }, - * network_id: '1', - * gas: 4500000, - * gasPrice: 10000000000, - * }, - */ - +const path = require('path'); +const HDWalletProvider = require("truffle-hdwallet-provider"); +require('dotenv').config(); // Store environment-specific variable from '.env' to process.env module.exports = { - // See - // to customize your Truffle configuration! - networks: { - development: { - host: "127.0.0.1", - port: 8545, - network_id: "*" - } - } + contracts_build_directory: path.join(__dirname, './build/contracts'), + contracts_directory: path.join(__dirname, './contracts'), + networks: { + development: { + host: '127.0.0.1', + port: 7545, + network_id: '*' + }, + rinkeby: { + provider: () => new HDWalletProvider(process.env.MNENOMIC, "https://rinkeby.infura.io/v3/" + process.env.INFURA_API_KEY), + network_id: 4 + /* Both gas and gasPrice commented due to error at deploy time: The contract code couldn't be stored, please check your gas amount. */ + //gas: 3000000, + //gasPrice: 10000000000 + }, + } }; diff --git a/truebit-implementation/truffle.js b/truebit-implementation/truffle.js deleted file mode 100644 index 0453b366..00000000 --- a/truebit-implementation/truffle.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * NB: since truffle-hdwallet-provider 0.0.5 you must wrap HDWallet providers in a - * function when declaring them. Failure to do so will cause commands to hang. ex: - * ``` - * mainnet: { - * provider: function() { - * return new HDWalletProvider(mnemonic, 'https://mainnet.infura.io/') - * }, - * network_id: '1', - * gas: 4500000, - * gasPrice: 10000000000, - * }, - */ - -module.exports = { - // See - // to customize your Truffle configuration! - networks: { - development: { - host: "127.0.0.1", - port: 8545, - network_id: "*" - } - } -};